diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..83bc72e
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1068 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the included GNU
+`gettext' library will be used.  This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might not be desirable.  You should use
+the more recent version of the GNU `gettext' library.  I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect.  Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of November
+2007.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files       af am ar az be bg bs ca cs cy da de el en en_GB eo
+                        +----------------------------------------------------+
+     Compendium         |                      []       [] []        []      |
+     a2ps               |             []                [] [] []     []      |
+     aegis              |                                  ()                |
+     ant-phone          |                                  ()                |
+     anubis             |                                  []                |
+     ap-utils           |                                                    |
+     aspell             |                      [] []    [] []        []      |
+     bash               |                                                 [] |
+     bfd                |                                                    |
+     bibshelf           |                                  []                |
+     binutils           |                                                    |
+     bison              |                               [] []                |
+     bison-runtime      |                                  []                |
+     bluez-pin          | []                      []       [] []          [] |
+     cflow              |                               []                   |
+     clisp              |                               [] []    []          |
+     console-tools      |                         []       []                |
+     coreutils          |                []    [] []       []                |
+     cpio               |                                                    |
+     cpplib             |                      []       [] []                |
+     cryptonit          |                                  []                |
+     dialog             |                                                    |
+     diffutils          |                      [] []    [] [] []          [] |
+     doodle             |                                  []                |
+     e2fsprogs          |                         []       []                |
+     enscript           |                      []       [] []        []      |
+     fetchmail          |                      []       [] () []     []      |
+     findutils          |                []                                  |
+     findutils_stable   |                []    []       []                   |
+     flex               |                      []       [] []                |
+     fslint             |                                                    |
+     gas                |                                                    |
+     gawk               |                      []       [] []                |
+     gcal               |                      []                            |
+     gcc                |                                  []                |
+     gettext-examples   | []                   []          [] []          [] |
+     gettext-runtime    |             []       []       [] []             [] |
+     gettext-tools      |                      []          []                |
+     gip                |                []                                  |
+     gliv               |                []                []                |
+     glunarclock        |                []                                  |
+     gmult              | []                               []                |
+     gnubiff            |                                  ()                |
+     gnucash            |                      [] []       () ()     []      |
+     gnuedu             |                                                    |
+     gnulib             |                []                                  |
+     gnunet             |                                                    |
+     gnunet-gtk         |                                                    |
+     gnutls             |                                  []                |
+     gpe-aerial         |                         []       []                |
+     gpe-beam           |                         []       []                |
+     gpe-calendar       |                                                    |
+     gpe-clock          |                         []       []                |
+     gpe-conf           |                         []       []                |
+     gpe-contacts       |                                                    |
+     gpe-edit           |                         []                         |
+     gpe-filemanager    |                                                    |
+     gpe-go             |                         []                         |
+     gpe-login          |                         []       []                |
+     gpe-ownerinfo      |                         []       []                |
+     gpe-package        |                                                    |
+     gpe-sketchbook     |                         []       []                |
+     gpe-su             |                         []       []                |
+     gpe-taskmanager    |                         []       []                |
+     gpe-timesheet      |                         []                         |
+     gpe-today          |                         []       []                |
+     gpe-todo           |                                                    |
+     gphoto2            |                         []    [] []        []      |
+     gprof              |                               [] []                |
+     gpsdrive           |                                                    |
+     gramadoir          | []                               []                |
+     grep               |                         []                      [] |
+     gretl              |                                  ()                |
+     gsasl              |                                                    |
+     gss                |                                                    |
+     gst-plugins-bad    |                []             []                   |
+     gst-plugins-base   |                []             []                   |
+     gst-plugins-good   |                []    []       []                   |
+     gst-plugins-ugly   |                []             []                   |
+     gstreamer          | []             []    [] []    [] []        []      |
+     gtick              |                                  ()                |
+     gtkam              |             []          []    [] []                |
+     gtkorphan          |                []                []                |
+     gtkspell           |             []                   [] []          [] |
+     gutenprint         |                               []                   |
+     hello              |                []    []       [] []             [] |
+     herrie             |                                  []                |
+     hylafax            |                                                    |
+     idutils            |                               [] []                |
+     indent             |                      [] []       []             [] |
+     iso_15924          |                                                    |
+     iso_3166           |       []    [] [] [] [] [] [] [] [] []          [] |
+     iso_3166_2         |                                                    |
+     iso_4217           |                         []    [] []                |
+     iso_639            |                         []    [] []             [] |
+     jpilot             |                         []                         |
+     jtag               |                                                    |
+     jwhois             |                                                    |
+     kbd                |                         []    [] [] []             |
+     keytouch           |                      []          []                |
+     keytouch-editor    |                                  []                |
+     keytouch-keyboa... |                      []                            |
+     latrine            |                                  ()                |
+     ld                 |                               []                   |
+     leafpad            |                []    [] []       [] []             |
+     libc               |                      [] []    [] []                |
+     libexif            |                                  []                |
+     libextractor       |                                  []                |
+     libgpewidget       |                         []    [] []                |
+     libgpg-error       |                                  []                |
+     libgphoto2         |                               [] []                |
+     libgphoto2_port    |                               [] []                |
+     libgsasl           |                                                    |
+     libiconv           |                                  []             [] |
+     libidn             |                         []    []                [] |
+     lifelines          |                               [] ()                |
+     lilypond           |                                  []                |
+     lingoteach         |                                                    |
+     lprng              |                                                    |
+     lynx               |                      [] []    [] []                |
+     m4                 |                         []    [] [] []             |
+     mailfromd          |                                                    |
+     mailutils          |                      []                            |
+     make               |                               [] []                |
+     man-db             |                      []       [] []                |
+     minicom            |                         []    [] []                |
+     nano               |                []    []          []                |
+     opcodes            |                                  []                |
+     parted             |                         []       []                |
+     pilot-qof          |                                                    |
+     popt               |                         []    [] []                |
+     psmisc             |                []                                  |
+     pwdutils           |                                                    |
+     qof                |                                                    |
+     radius             |                      []                            |
+     recode             |             []       []       [] [] []          [] |
+     rpm                |                               []                   |
+     screem             |                                                    |
+     scrollkeeper       |          [] []       [] [] [] [] []        []      |
+     sed                |                      []          []             [] |
+     shared-mime-info   |                []    [] []    [] () []     []   [] |
+     sharutils          |                []    [] []    [] [] []             |
+     shishi             |                                                    |
+     skencil            |                               [] ()                |
+     solfege            |                                                    |
+     soundtracker       |                               [] []                |
+     sp                 |                                  []                |
+     system-tools-ba... |       []       [] [] [] []    [] [] []     []      |
+     tar                |                []                []                |
+     texinfo            |                               [] []             [] |
+     tin                |                                  ()        ()      |
+     tuxpaint           | []             []             [] []        []   [] |
+     unicode-han-tra... |                                                    |
+     unicode-transla... |                                                    |
+     util-linux         |                      [] []    [] []                |
+     util-linux-ng      |                      [] []    [] []                |
+     vorbis-tools       |                         []                         |
+     wastesedge         |                                  ()                |
+     wdiff              |                      []       [] []        []      |
+     wget               |                      [] []       []                |
+     xchat              |             [] []    [] []       [] []     []      |
+     xkeyboard-config   |                []                                  |
+     xpad               |                []             []           []      |
+                        +----------------------------------------------------+
+                          af am ar az be bg bs ca cs cy da de el en en_GB eo
+                           6  0  2  1  8 26  2 40 48  2 56 88 15  1  15   18
+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                        +--------------------------------------------------+
+     Compendium         | []          [] []  []                []          |
+     a2ps               |    []       [] []                             () |
+     aegis              |                                                  |
+     ant-phone          |                []                                |
+     anubis             |                []                                |
+     ap-utils           |             [] []                                |
+     aspell             |                []  []                         [] |
+     bash               | []                                               |
+     bfd                | []          []                                   |
+     bibshelf           | []                 []                         [] |
+     binutils           | []          [] []                                |
+     bison              | [] []          []  []                   []    [] |
+     bison-runtime      |    []          []  []                   []    [] |
+     bluez-pin          |             [] []  []                [] []       |
+     cflow              |                    []                            |
+     clisp              | []             []                                |
+     console-tools      |                                                  |
+     coreutils          | [] []       [] []  []                []          |
+     cpio               | []             []  []                            |
+     cpplib             | []             []                                |
+     cryptonit          |                []                                |
+     dialog             |       []           []                         [] |
+     diffutils          | []          [] []  [] []    []       [] []    [] |
+     doodle             |                    []                         [] |
+     e2fsprogs          | []             []                             [] |
+     enscript           |                []  []             []             |
+     fetchmail          | []                                               |
+     findutils          |    []              []                []          |
+     findutils_stable   |    []          []  []                []          |
+     flex               | []             []  []                            |
+     fslint             |                                                  |
+     gas                | []             []                                |
+     gawk               | []             []  []       []                () |
+     gcal               | []             []                                |
+     gcc                | []                                               |
+     gettext-examples   | []          [] []  []                [] []    [] |
+     gettext-runtime    | []          [] []  []                   []    [] |
+     gettext-tools      | []    []       []                             [] |
+     gip                | []    []       []  []                            |
+     gliv               |                ()                                |
+     glunarclock        |             []     []                []          |
+     gmult              |       []       []                             [] |
+     gnubiff            |                ()                             () |
+     gnucash            | ()             ()                    ()          |
+     gnuedu             | []                                               |
+     gnulib             | [] []              []                            |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                                  |
+     gnutls             |                                                  |
+     gpe-aerial         | []             []                                |
+     gpe-beam           | []             []                                |
+     gpe-calendar       |                                                  |
+     gpe-clock          | []          [] []                    []          |
+     gpe-conf           |                []                                |
+     gpe-contacts       | []             []                                |
+     gpe-edit           | []             []                    [] []       |
+     gpe-filemanager    | []                                               |
+     gpe-go             | []             []                    []          |
+     gpe-login          | []             []                    []          |
+     gpe-ownerinfo      | []          [] []                    [] []       |
+     gpe-package        | []                                               |
+     gpe-sketchbook     | []             []                                |
+     gpe-su             | []          [] []                    []          |
+     gpe-taskmanager    | []          [] []                                |
+     gpe-timesheet      | []             []  []                   []       |
+     gpe-today          | []          [] []  []                            |
+     gpe-todo           | []                                               |
+     gphoto2            | []          [] []                    []       [] |
+     gprof              | []          [] []  []                   []       |
+     gpsdrive           |    []                                            |
+     gramadoir          |                []  []                            |
+     grep               | []          []     []                            |
+     gretl              | []    []       []                             () |
+     gsasl              |                    []                   []       |
+     gss                |                []  []                            |
+     gst-plugins-bad    | []          []                       []       [] |
+     gst-plugins-base   | []          []                       []       [] |
+     gst-plugins-good   | []    []    []                       []       [] |
+     gst-plugins-ugly   | []          []                       []       [] |
+     gstreamer          |             []                       []       [] |
+     gtick              |             []     []                         [] |
+     gtkam              | []             []                    []       [] |
+     gtkorphan          |                []                             [] |
+     gtkspell           | []    []    [] []  []                []       [] |
+     gutenprint         |                                      []          |
+     hello              | [] [] [] [] [] []  [] []    []    [] [] []    [] |
+     herrie             |                    []                            |
+     hylafax            |                                                  |
+     idutils            |                []  []                [] []    [] |
+     indent             | [] [] []    [] []  [] []             [] []    [] |
+     iso_15924          |                []                                |
+     iso_3166           | [] [] []    [] []     [] [] [] [] [] [] []    [] |
+     iso_3166_2         |                []                                |
+     iso_4217           | [] []       [] []                    []       [] |
+     iso_639            | []       [] [] []  []                []          |
+     jpilot             | []             []                                |
+     jtag               |                []                                |
+     jwhois             | []             []                    [] []    [] |
+     kbd                | []             []                                |
+     keytouch           |                []  []                         [] |
+     keytouch-editor    |                    []                            |
+     keytouch-keyboa... |                    []                         [] |
+     latrine            |                    []                         [] |
+     ld                 | []          [] []  []                            |
+     leafpad            | []             []  []       []       []       [] |
+     libc               | []          [] []     []             []          |
+     libexif            | []                                               |
+     libextractor       |                    []                            |
+     libgpewidget       | []             []  []                [] []       |
+     libgpg-error       |                []                                |
+     libgphoto2         | []             []                             [] |
+     libgphoto2_port    |                []                             [] |
+     libgsasl           |                []  []                            |
+     libiconv           |    []       []     []                            |
+     libidn             |                []                             [] |
+     lifelines          |                ()                                |
+     lilypond           | []          [] []                                |
+     lingoteach         |                []                       []    [] |
+     lprng              |                                                  |
+     lynx               |    []                                []       [] |
+     m4                 |                []  [] []                []       |
+     mailfromd          |                                                  |
+     mailutils          | []             []                                |
+     make               | []          [] []  [] []    []    []    []       |
+     man-db             |                                               [] |
+     minicom            | []          [] []                    []          |
+     nano               | []    []       []  [] []             []       [] |
+     opcodes            | []          [] []  []                            |
+     parted             |                []                       []    [] |
+     pilot-qof          |                                                  |
+     popt               |                []  [] []                   []    |
+     psmisc             |                                      []       [] |
+     pwdutils           |                                                  |
+     qof                |                                         []       |
+     radius             | []             []                                |
+     recode             | []             []  [] []    []       [] []    [] |
+     rpm                |                []                       []       |
+     screem             |                                                  |
+     scrollkeeper       | []          []                       []          |
+     sed                | [] []          []  []                []          |
+     shared-mime-info   | []    []    [] []                    []       [] |
+     sharutils          | [] []       [] []  [] []             []       [] |
+     shishi             |                []                                |
+     skencil            | []             []                                |
+     solfege            |                                               [] |
+     soundtracker       | []             []                             [] |
+     sp                 |                []                                |
+     system-tools-ba... | []    []    [] []  []             [] [] []    [] |
+     tar                |    [] []    []     []                []          |
+     texinfo            |                []           []       []          |
+     tin                |    []          ()                                |
+     tuxpaint           |                    []                []          |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                []  []                            |
+     util-linux         | [] []       [] []                    [] []    [] |
+     util-linux-ng      | [] []       [] []                    [] []    [] |
+     vorbis-tools       |                                                  |
+     wastesedge         |                ()                                |
+     wdiff              | [] []          []  [] []             [] []    [] |
+     wget               |    []       [] []  []             [] [] []    [] |
+     xchat              | []          [] []        []    []    []       [] |
+     xkeyboard-config   | []          [] []                    []          |
+     xpad               | []                 []                []          |
+                        +--------------------------------------------------+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                          85 22 14  2 48 101 61 12  2  8  2  6 53 29  1 52
+
+                          ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl  nn
+                        +--------------------------------------------------+
+     Compendium         |                                           []     |
+     a2ps               |       ()                      []          []     |
+     aegis              |                                           ()     |
+     ant-phone          |                                           []     |
+     anubis             |                               []    []    []     |
+     ap-utils           |                               []                 |
+     aspell             |                            []             []     |
+     bash               |                                           []     |
+     bfd                |                                                  |
+     bibshelf           |                               []                 |
+     binutils           |                                                  |
+     bison              |                               []    []    []     |
+     bison-runtime      |                               []    []    []     |
+     bluez-pin          |          []                   []          []     |
+     cflow              |                                                  |
+     clisp              |                                           []     |
+     console-tools      |                                                  |
+     coreutils          |                                           []     |
+     cpio               |                                           []     |
+     cpplib             |                                           []     |
+     cryptonit          |                                           []     |
+     dialog             |                               []          []     |
+     diffutils          | []                            []          []     |
+     doodle             |                                                  |
+     e2fsprogs          |                                           []     |
+     enscript           |                                           []     |
+     fetchmail          | []                                        []     |
+     findutils          |                                           []     |
+     findutils_stable   |                                           []     |
+     flex               |       []                                  []     |
+     fslint             |                                                  |
+     gas                |                                                  |
+     gawk               | []                                        []     |
+     gcal               |                                                  |
+     gcc                |                                                  |
+     gettext-examples   | []                            []          []     |
+     gettext-runtime    | []    []                                  []     |
+     gettext-tools      | []    []                                         |
+     gip                |                               []          []     |
+     gliv               |                                           []     |
+     glunarclock        |                               []          []     |
+     gmult              | []                            []          []     |
+     gnubiff            |                                                  |
+     gnucash            | ()                                  () ()        |
+     gnuedu             |                                                  |
+     gnulib             | []                                        []     |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                                  |
+     gnutls             |                               []                 |
+     gpe-aerial         |                                           []     |
+     gpe-beam           |                                           []     |
+     gpe-calendar       | []                                               |
+     gpe-clock          | []    []                                  []     |
+     gpe-conf           | []    []                                  []     |
+     gpe-contacts       |       []                                         |
+     gpe-edit           | []    []                                  []     |
+     gpe-filemanager    | []    []                                         |
+     gpe-go             | []    []                                  []     |
+     gpe-login          | []    []                                  []     |
+     gpe-ownerinfo      | []                                        []     |
+     gpe-package        | []    []                                         |
+     gpe-sketchbook     |       []                                  []     |
+     gpe-su             | []    []                                  []     |
+     gpe-taskmanager    | []    [] []                               []     |
+     gpe-timesheet      |                                           []     |
+     gpe-today          | []                                        []     |
+     gpe-todo           | []                                               |
+     gphoto2            | []                                        []     |
+     gprof              |                               []                 |
+     gpsdrive           |                                           []     |
+     gramadoir          |                                           ()     |
+     grep               |             []                            []     |
+     gretl              |                                                  |
+     gsasl              |                                           []     |
+     gss                |                                                  |
+     gst-plugins-bad    |                                           []     |
+     gst-plugins-base   |                                           []     |
+     gst-plugins-good   |                                           []     |
+     gst-plugins-ugly   |                                           []     |
+     gstreamer          |                                           []     |
+     gtick              |                                           []     |
+     gtkam              | []                                        []     |
+     gtkorphan          |                                           []     |
+     gtkspell           |                            []             []     |
+     gutenprint         |                                           []     |
+     hello              | [] [] []                      []    []    []  [] |
+     herrie             |                                           []     |
+     hylafax            |                                                  |
+     idutils            |                                           []     |
+     indent             | []                                        []     |
+     iso_15924          |                                           []     |
+     iso_3166           | []    [] []       []    []          []    []  [] |
+     iso_3166_2         |                                           []     |
+     iso_4217           | []                []                      []     |
+     iso_639            | []                []                      []  [] |
+     jpilot             | ()                                        ()     |
+     jtag               |                                                  |
+     jwhois             |                                           []     |
+     kbd                |                                           []     |
+     keytouch           |                                           []     |
+     keytouch-editor    |                                           []     |
+     keytouch-keyboa... |                                                  |
+     latrine            |                                           []     |
+     ld                 |                                                  |
+     leafpad            | []                []                             |
+     libc               | []    []                                  []     |
+     libexif            |                                                  |
+     libextractor       |                                                  |
+     libgpewidget       |                                           []     |
+     libgpg-error       |                                                  |
+     libgphoto2         | []                                               |
+     libgphoto2_port    | []                                               |
+     libgsasl           |                                           []     |
+     libiconv           |                                           []     |
+     libidn             | []                                        []     |
+     lifelines          |                                           []     |
+     lilypond           |                                           []     |
+     lingoteach         |                                           []     |
+     lprng              |                                                  |
+     lynx               | []                                        []     |
+     m4                 | []                                        []     |
+     mailfromd          |                                                  |
+     mailutils          |                                                  |
+     make               | []    []                                  []     |
+     man-db             |                                                  |
+     minicom            | []                                               |
+     nano               |                               []    []    []     |
+     opcodes            |                                           []     |
+     parted             | []                                        []     |
+     pilot-qof          |                                                  |
+     popt               | []    []                                  []     |
+     psmisc             | []                                  []    []     |
+     pwdutils           |                                                  |
+     qof                |                                                  |
+     radius             |                                                  |
+     recode             |                                           []     |
+     rpm                | []    []                                         |
+     screem             | []                                               |
+     scrollkeeper       |                                     [] [] []  [] |
+     sed                | []                                        []     |
+     shared-mime-info   | []    []          []          []    []    []  [] |
+     sharutils          | []                                        []     |
+     shishi             |                                                  |
+     skencil            |                                                  |
+     solfege            |                                     ()        () |
+     soundtracker       |                                                  |
+     sp                 | ()                                               |
+     system-tools-ba... | []    []          []                      []     |
+     tar                | []          []                            []     |
+     texinfo            |                                     []    []     |
+     tin                |                                                  |
+     tuxpaint           |                                     ()    []  [] |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                                                  |
+     util-linux         | []                                        []     |
+     util-linux-ng      | []                                        []     |
+     vorbis-tools       |                                                  |
+     wastesedge         |                                           []     |
+     wdiff              |                               []    []           |
+     wget               | []                                        []     |
+     xchat              | []    []                []                []     |
+     xkeyboard-config   |    [] []                                  []     |
+     xpad               |       []                      []          []     |
+                        +--------------------------------------------------+
+                          ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl  nn
+                          51  2 25  3  2  0  6  0  2  2 20  0 11  1 103  6
+
+                          or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                        +--------------------------------------------------+
+     Compendium         |          []  []      []       []          []     |
+     a2ps               |       ()     []      [] []       []    [] []     |
+     aegis              |                      () ()                       |
+     ant-phone          |                      []                   []     |
+     anubis             |       []             [] []                       |
+     ap-utils           |       ()                                         |
+     aspell             |                      [] []    []                 |
+     bash               |       []                      []                 |
+     bfd                |                                                  |
+     bibshelf           |                                           []     |
+     binutils           |                         []    []                 |
+     bison              |       []     []      [] []                []     |
+     bison-runtime      |       []     []      []          []       []     |
+     bluez-pin          |       []     []   [] [] []    [] []    [] []     |
+     cflow              |       []                                         |
+     clisp              |                         []                       |
+     console-tools      |                         []                       |
+     coreutils          |       []                []       []       []     |
+     cpio               |       []                []                []     |
+     cpplib             |                                           []     |
+     cryptonit          |              []                           []     |
+     dialog             |                                           []     |
+     diffutils          |       []     []      [] []             [] []     |
+     doodle             |                                     []    []     |
+     e2fsprogs          |       []                                  []     |
+     enscript           |              []      [] []       []       []     |
+     fetchmail          |       []                []          []           |
+     findutils          |       [] []                               []     |
+     findutils_stable   |       [] []          []       [] []       []     |
+     flex               |       []     []      [] []                []     |
+     fslint             |                                           []     |
+     gas                |                                                  |
+     gawk               |       []     []      []                   []     |
+     gcal               |                                           []     |
+     gcc                |                                        [] []     |
+     gettext-examples   |       [] []          [] []    [] []    [] []     |
+     gettext-runtime    |       [] []          [] []    [] []    [] []     |
+     gettext-tools      |       []             [] []    [] []    [] []     |
+     gip                |                   []          []       [] []     |
+     gliv               |       []     []      [] []    []          []     |
+     glunarclock        |              []      [] []    []       [] []     |
+     gmult              |                   [] []                [] []     |
+     gnubiff            |                      ()                   []     |
+     gnucash            |       ()                                  []     |
+     gnuedu             |                                                  |
+     gnulib             |       []                         []       []     |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                           []     |
+     gnutls             |       []                                  []     |
+     gpe-aerial         |          []  []      [] []       []    [] []     |
+     gpe-beam           |          []  []      [] []       []    [] []     |
+     gpe-calendar       |                         []       []    [] []     |
+     gpe-clock          |          []  []      [] []    [] []    [] []     |
+     gpe-conf           |          []  []      [] []    [] []       []     |
+     gpe-contacts       |                      [] []       []    [] []     |
+     gpe-edit           |       [] []  []      [] []    [] []    [] []     |
+     gpe-filemanager    |                                  []       []     |
+     gpe-go             |       []     []      [] []    [] []    [] []     |
+     gpe-login          |          []  []      [] []    [] []    [] []     |
+     gpe-ownerinfo      |          []  []      [] []    [] []    [] []     |
+     gpe-package        |                                  []       []     |
+     gpe-sketchbook     |          []  []      [] []    [] []    [] []     |
+     gpe-su             |          []  []      [] []    [] []    [] []     |
+     gpe-taskmanager    |          []  []      [] []    [] []    [] []     |
+     gpe-timesheet      |          []  []      [] []    [] []    [] []     |
+     gpe-today          |          []  []      [] []    [] []    [] []     |
+     gpe-todo           |                         []       []    [] []     |
+     gphoto2            |    [] []             []       []       [] []     |
+     gprof              |              []      []                   []     |
+     gpsdrive           |                         []                []     |
+     gramadoir          |                               []          []     |
+     grep               |       []                      [] []       []     |
+     gretl              |       [] []  []                                  |
+     gsasl              |       []                               [] []     |
+     gss                |       []             []       []          []     |
+     gst-plugins-bad    |       []     []                           []     |
+     gst-plugins-base   |       []                                  []     |
+     gst-plugins-good   |       []                                  []     |
+     gst-plugins-ugly   |       []     []                           []     |
+     gstreamer          |       []                            [] [] []     |
+     gtick              |                         []                       |
+     gtkam              |    [] []     []         []                []     |
+     gtkorphan          |                                           []     |
+     gtkspell           |              []   [] [] []    [] []    [] []     |
+     gutenprint         |                                           []     |
+     hello              |       []     []      [] []    [] []    [] []     |
+     herrie             |       []                []                []     |
+     hylafax            |                                                  |
+     idutils            |       []     []      [] []                []     |
+     indent             |       []     []      [] []    []       [] []     |
+     iso_15924          |                                                  |
+     iso_3166           |    [] [] []  []      [] [] [] [] [] [] [] []  [] |
+     iso_3166_2         |                                                  |
+     iso_4217           |       [] []             [] []    []    [] []     |
+     iso_639            |       []                [] [] [] []    [] []     |
+     jpilot             |                                                  |
+     jtag               |                               []                 |
+     jwhois             |       []     []      []                   []     |
+     kbd                |       []             []                   []     |
+     keytouch           |                                           []     |
+     keytouch-editor    |                                           []     |
+     keytouch-keyboa... |                                           []     |
+     latrine            |                                                  |
+     ld                 |                                           []     |
+     leafpad            |       [] []             []    []          []  [] |
+     libc               |       []                []    []          []     |
+     libexif            |       []                      []                 |
+     libextractor       |                      []                   []     |
+     libgpewidget       |       [] []  []      []       [] []    [] []     |
+     libgpg-error       |       []             []                   []     |
+     libgphoto2         |       []                                         |
+     libgphoto2_port    |       []                []                []     |
+     libgsasl           |       []             []                [] []     |
+     libiconv           |                                  []    [] []     |
+     libidn             |       []                               [] ()     |
+     lifelines          |       []                                  []     |
+     lilypond           |                                                  |
+     lingoteach         |              []                                  |
+     lprng              |       []                                         |
+     lynx               |              []         []                []     |
+     m4                 |       []     []      [] []                []     |
+     mailfromd          |       []                                         |
+     mailutils          |       []                []                []     |
+     make               |       []     []         []                []     |
+     man-db             |       []             [] []                []     |
+     minicom            |       []     []      [] []                []     |
+     nano               |              []      [] []                []     |
+     opcodes            |                      []                   []     |
+     parted             |       []                                         |
+     pilot-qof          |                                                  |
+     popt               |       [] []             []                []     |
+     psmisc             |       []                                  []     |
+     pwdutils           |       []                                  []     |
+     qof                |              []                           []     |
+     radius             |       []                []                       |
+     recode             |       [] []  []      [] []       []       []     |
+     rpm                |       [] []             []                []     |
+     screem             |                                                  |
+     scrollkeeper       |       []             [] []    []    [] [] []     |
+     sed                |       [] []  []      [] []    [] []    [] []     |
+     shared-mime-info   |       [] []  []                     [] [] []     |
+     sharutils          |       []                []             [] []     |
+     shishi             |       []                                         |
+     skencil            |          []  []                           []     |
+     solfege            |              []                                  |
+     soundtracker       |                               []          []     |
+     sp                 |                                                  |
+     system-tools-ba... |    [] [] []  []      []             [] [] []  [] |
+     tar                |       []                []       []       []     |
+     texinfo            |       []             [] []                []     |
+     tin                |                         ()                       |
+     tuxpaint           |       [] []                      [] [] [] []     |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                                                  |
+     util-linux         |              []         []       []       []     |
+     util-linux-ng      |              []         []       []       []     |
+     vorbis-tools       |                         []                       |
+     wastesedge         |                                                  |
+     wdiff              |       []     []      [] []    [] []       []     |
+     wget               |          []             []    []          []     |
+     xchat              |    []                   []    [] [] [] [] []     |
+     xkeyboard-config   |                               [] []       []     |
+     xpad               |                               [] []       []     |
+                        +--------------------------------------------------+
+                          or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                           0  5 77 31  53    4 58 72  3 45 46  9 45 122  3
+
+                          tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+                        +---------------------------------------------------+
+     Compendium         |          []        []         []          []      | 19
+     a2ps               |          [] []     []                             | 19
+     aegis              |                    []                             |  1
+     ant-phone          |          []        []                             |  6
+     anubis             |          [] []     []                             | 11
+     ap-utils           |             ()     []                             |  4
+     aspell             |             []     []  []                         | 16
+     bash               |          []                                       |  6
+     bfd                |                                                   |  2
+     bibshelf           |                    []                             |  7
+     binutils           |          [] []     []                     []      |  9
+     bison              |          [] []     []                     []      | 20
+     bison-runtime      |             []     []         []          []      | 18
+     bluez-pin          |          [] []     []  []     []          []      | 28
+     cflow              |             []     []                             |  5
+     clisp              |                                                   |  9
+     console-tools      |          []        []                             |  5
+     coreutils          |          [] []     []                             | 18
+     cpio               |          [] []     []         []                  | 11
+     cpplib             |          [] []     []         []          []      | 12
+     cryptonit          |                    []                             |  6
+     dialog             |                    []  []     []                  |  9
+     diffutils          |          [] []     []         []          []      | 29
+     doodle             |                    []                             |  6
+     e2fsprogs          |          []        []                             | 10
+     enscript           |          [] []     []                             | 16
+     fetchmail          |          []        []                             | 12
+     findutils          |          [] []     []                             | 11
+     findutils_stable   |          [] []     []                     []      | 18
+     flex               |          []        []                             | 15
+     fslint             |                    []                             |  2
+     gas                |          []                                       |  3
+     gawk               |          []        []         []                  | 16
+     gcal               |          []                                       |  5
+     gcc                |          []                   []          []      |  7
+     gettext-examples   |          [] []     []         []    []    []      | 29
+     gettext-runtime    |          [] []     []         []    []    []      | 28
+     gettext-tools      |          [] []     []         []          []      | 20
+     gip                |                    []                     []      | 13
+     gliv               |          []        []                             | 11
+     glunarclock        |                    []  []                 []      | 15
+     gmult              |          []        []         []          []      | 16
+     gnubiff            |                    []                             |  2
+     gnucash            |          () []                                    |  5
+     gnuedu             |                    []                             |  2
+     gnulib             |                    []                             | 10
+     gnunet             |                                                   |  0
+     gnunet-gtk         |          []        []                             |  3
+     gnutls             |                                                   |  4
+     gpe-aerial         |                    []         []                  | 14
+     gpe-beam           |                    []         []                  | 14
+     gpe-calendar       |                    []  []                         |  7
+     gpe-clock          |          []        []  []     []                  | 21
+     gpe-conf           |                    []  []     []                  | 16
+     gpe-contacts       |                    []         []                  | 10
+     gpe-edit           |          []        []  []     []          []      | 22
+     gpe-filemanager    |                    []  []                         |  7
+     gpe-go             |          []        []  []     []                  | 19
+     gpe-login          |          []        []  []     []          []      | 21
+     gpe-ownerinfo      |          []        []         []          []      | 21
+     gpe-package        |                    []                             |  6
+     gpe-sketchbook     |          []        []                             | 16
+     gpe-su             |          []        []  []     []                  | 21
+     gpe-taskmanager    |          []        []  []     []                  | 21
+     gpe-timesheet      |          []        []         []          []      | 18
+     gpe-today          |          []        []  []     []          []      | 21
+     gpe-todo           |                    []  []                         |  8
+     gphoto2            |             []     []         []          []      | 21
+     gprof              |          []        []                             | 13
+     gpsdrive           |                    []                             |  5
+     gramadoir          |                    []                             |  7
+     grep               |                    []                             | 12
+     gretl              |                                                   |  6
+     gsasl              |                    []         []          []      |  9
+     gss                |                    []                             |  7
+     gst-plugins-bad    |             []     []         []                  | 13
+     gst-plugins-base   |             []     []                             | 11
+     gst-plugins-good   |             []     []         []    []    []      | 16
+     gst-plugins-ugly   |             []     []         []                  | 13
+     gstreamer          |          [] []     []                             | 18
+     gtick              |             []     []                             |  7
+     gtkam              |                    []                             | 16
+     gtkorphan          |                    []                             |  7
+     gtkspell           |             []     []  []     []    []    []      | 27
+     gutenprint         |                                                   |  4
+     hello              |          [] []     []         []          []      | 38
+     herrie             |          []        []                             |  8
+     hylafax            |                                                   |  0
+     idutils            |          []        []                             | 15
+     indent             |          [] []     []         []          []      | 28
+     iso_15924          |                    []         []                  |  4
+     iso_3166           |    [] [] [] []     []  []     []    []    []      | 54
+     iso_3166_2         |                    []         []                  |  4
+     iso_4217           |    []    []        []         []    []            | 24
+     iso_639            |             []     []  []     []    []            | 26
+     jpilot             |          [] []     []         []                  |  7
+     jtag               |                    []                             |  3
+     jwhois             |          []        []                     []      | 13
+     kbd                |          [] []     []                             | 13
+     keytouch           |                    []                             |  8
+     keytouch-editor    |                    []                             |  5
+     keytouch-keyboa... |                    []                             |  5
+     latrine            |          []        []                             |  5
+     ld                 |          []        []         []          []      | 10
+     leafpad            |          [] []     []         []          []      | 24
+     libc               |          []                   []          []      | 19
+     libexif            |                    []                             |  5
+     libextractor       |                    []                             |  5
+     libgpewidget       |                    []  []     []                  | 20
+     libgpg-error       |                    []                             |  6
+     libgphoto2         |             []     []                             |  9
+     libgphoto2_port    |             []     []                     []      | 11
+     libgsasl           |                    []                             |  8
+     libiconv           |                    []  []                         | 11
+     libidn             |                    []         []                  | 11
+     lifelines          |                                                   |  4
+     lilypond           |                    []                             |  6
+     lingoteach         |                    []                             |  6
+     lprng              |                    []                             |  2
+     lynx               |          [] []     []                             | 15
+     m4                 |                    []         []          []      | 18
+     mailfromd          |             []     []                             |  3
+     mailutils          |             []     []                             |  8
+     make               |          []        []         []                  | 20
+     man-db             |                    []                             |  9
+     minicom            |                    []                             | 14
+     nano               |                    []         []          []      | 20
+     opcodes            |          []        []                             | 10
+     parted             |          [] []                            []      | 11
+     pilot-qof          |                    []                             |  1
+     popt               |          []        []         []          []      | 18
+     psmisc             |                    []         []                  | 10
+     pwdutils           |                    []                             |  3
+     qof                |                    []                             |  4
+     radius             |             []     []                             |  7
+     recode             |          []        []         []                  | 25
+     rpm                |          [] []     []                     []      | 13
+     screem             |                    []                             |  2
+     scrollkeeper       |          [] []     []                     []      | 26
+     sed                |          []        []         []          []      | 23
+     shared-mime-info   |             []     []         []                  | 29
+     sharutils          |          []        []                     []      | 23
+     shishi             |                    []                             |  3
+     skencil            |                    []                             |  7
+     solfege            |                    []                             |  3
+     soundtracker       |          []        []                             |  9
+     sp                 |          []                                       |  3
+     system-tools-ba... |    []    [] []     []     []  []          []      | 38
+     tar                |          [] []     []                             | 17
+     texinfo            |          []        []         []                  | 15
+     tin                |                                                   |  1
+     tuxpaint           |                    []  []                 []      | 19
+     unicode-han-tra... |                                                   |  0
+     unicode-transla... |                                                   |  2
+     util-linux         |          [] []     []                             | 20
+     util-linux-ng      |          [] []     []                             | 20
+     vorbis-tools       |             []     []                             |  4
+     wastesedge         |                                                   |  1
+     wdiff              |          []        []                             | 23
+     wget               |          []        []                     []      | 20
+     xchat              |             []     []         []          []      | 29
+     xkeyboard-config   |          [] []     []                             | 14
+     xpad               |                    []         []          []      | 15
+                        +---------------------------------------------------+
+       76 teams           tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+      163 domains          0  3  1 74 51  0  143 21  1  57     7    45    0  2036
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If November 2007 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.  The most
+up-to-date matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..1a394ed
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,23 @@
+Erik Walthinsen <omega@temple-baptist.com>
+Matt Howell <mhowell@users.sourceforge.net>
+Brent Bradburn <bbradburn@users.sourceforge.net>
+Wim Taymans <wim.taymans@gmail.com>
+Richard Boulton <richard@tartarus.org>
+Zaheer Abbas Merali <zaheerabbas at merali dot org>
+David I. Lehn <dlehn@users.sourceforge.net>
+Chris Emerson <chris@tartarus.org>
+Jens Thiele <karme@unforgettable.com>
+Thomas Nyberg <thomas@codefactory.se>
+Bastien Nocera <hadess@hadess.net>
+Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org>
+Thomas Vander Stichele <thomas@apestaart.org>
+Andy Wingo <wingo@pobox.com>
+Cameron Hutchison <camh@xdna.net>
+David Schleef <ds@schleef.org>
+Benjamin Otte <in7y118@public.uni-hamburg.de>
+Ronald Bultje <rbultje@ronald.bitfreak.net>
+Julien MOUTTE <julien@moutte.net>
+Jan Schmidt <thaytan@mad.scientist.com>
+Arwed v. Merkatz <v.merkatz@gmx.net>
+Tim-Philipp Müller <tim at centricular dot net>
+Mark Borgerding <mark at borgerding dot net> (kissfft, used in libgstfft)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..60549be
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/COPYING.LIB b/COPYING.LIB
new file mode 100644
index 0000000..eb685a5
--- /dev/null
+++ b/COPYING.LIB
@@ -0,0 +1,481 @@
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..a0b2b85
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,58666 @@
+=== release 0.11.1 ===
+
+2011-09-29  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	  releasing 0.11.1, "A handful sometimes, A heartful always"
+
+2011-09-29 13:46:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/adder.c:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/elements/audiorate.c:
+	* tests/check/elements/audioresample.c:
+	* tests/check/elements/audiotestsrc.c:
+	* tests/check/elements/decodebin2.c:
+	* tests/check/elements/encodebin.c:
+	* tests/check/elements/gdpdepay.c:
+	* tests/check/elements/gdppay.c:
+	* tests/check/elements/playbin-compressed.c:
+	* tests/check/elements/videorate.c:
+	* tests/check/elements/videotestsrc.c:
+	* tests/check/elements/volume.c:
+	* tests/check/libs/audio.c:
+	* tests/check/libs/pbutils.c:
+	* tests/check/libs/profile.c:
+	* tests/check/pipelines/simple-launch-lines.c:
+	* tests/check/pipelines/vorbisdec.c:
+	* tests/check/pipelines/vorbisenc.c:
+	  tests: update for new audio caps
+
+2011-09-29 13:45:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstaudio.def:
+	  defs: add new symbols
+
+2011-09-28 16:08:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: fix refcounting error
+
+2011-09-28 16:07:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: store info so we can debug it
+
+2011-09-28 15:46:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-09-28 15:41:16 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: really push pending events
+
+2011-09-28 15:35:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	  audiodecoder: add method to set output caps
+	  Add a method to configure the output caps. Subclasses can't use
+	  gst_pad_set_caps() anymore because then we won't see the caps.
+	  Unbreak the padtemplate registration, the GTypeClass that is configured in the
+	  object during _init is not the right one, we need to use the klass passed as the
+	  argument to the init function..
+
+2011-09-28 14:32:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: remove more tags from upstream tag events such as bitrate tags
+	  We want to remove all codec specific tags.
+
+2011-09-28 11:35:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/audio/gstaudioencoder.c
+	  gst/playback/gstplaybin2.c
+	  gst/videotestsrc/videotestsrc.c
+
+2011-09-28 01:56:42 +0300  Raimo Järvi <raimo.jarvi@gmail.com>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix compiler warning on 64 bit mingw-w64
+	  Fixes bug #660304.
+
+2011-09-28 01:11:30 +0300  Raimo Järvi <raimo.jarvi@gmail.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Fix compiler warnings on 64 bit mingw-w64
+	  Fixes bug #660301.
+
+2011-09-27 16:18:05 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: only got_data if we really got some
+	  ... which avoids going loopy with casual subclass.
+
+2011-09-27 16:57:45 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: really push pending events
+
+2011-09-27 16:16:54 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: send tag event after pending events
+	  ... which probably includes a pending newsegment event.
+
+2011-09-27 16:16:29 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: protect pending_events with proper lock
+
+2011-09-27 15:31:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: clean up some documentation
+
+2011-09-27 11:19:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	* gst-libs/gst/audio/multichannel.h:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/video.h:
+	  docs: improve docs
+
+2011-09-27 00:32:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: minor docs fix
+
+2011-09-26 21:11:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioenc: fix compilation
+
+2011-09-26 19:22:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/audio/gstaudiodecoder.c
+	  gst-libs/gst/audio/gstaudioencoder.c
+	  gst/encoding/gstencodebin.c
+
+2011-09-26 16:36:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: Adjust for GstAudioEncoder API changes
+
+2011-09-26 16:36:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstaudio.def:
+	  win32: Adjust for GstAudioEncoder API changes
+
+2011-09-26 16:35:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Improve set_frame_sample_{min,max} documentation
+
+2011-09-26 16:22:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	  audiodecoder: Fix thread safety issues if both pads have different streaming threads
+
+2011-09-26 16:19:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Delay sending of serialized events to finish_frame()
+
+2011-09-26 16:02:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  Revert "audioencoder: Use GST_BOILERPLATE instead of custom GObject boilerplate code"
+	  This reverts commit 11e375486e07cfa0686a97b5cf6110909b3a828c.
+	  GST_BOILERPLATE() can't define an abstract type and
+	  G_DEFINE_ABSTRACT_TYPE() does not pass the class struct to
+	  the instance_init function and there's no way to get the
+	  class struct of the current type in instance_init().
+
+2011-09-26 15:59:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  audioencoder: Add support for requesting a minimum and maximum number of samples per frame
+	  This extends the special case of a fixed number of samples per frame
+	  that was supported before already.
+
+2011-09-26 15:45:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  audioencoder: Fix thread safety issues if both pads have different streaming threads
+
+2011-09-26 15:42:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Delay sending of serialized events to finish_frame()
+	  This makes sure that the caps are already set before any serialized
+	  events are sent downstream.
+
+2011-09-26 15:34:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Use GST_BOILERPLATE instead of custom GObject boilerplate code
+
+2011-09-26 15:14:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  audioencoder: add some tag handling convenience help
+
+2011-09-26 14:48:55 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: provide CODEC/AUDIO_CODEC handling
+
+2011-09-26 13:42:38 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: filter AUDIO_CODEC/CODEC tags from passing tag events
+
+2011-09-25 15:31:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: backport some const-ifications from 0.11 branch
+	  To keep code identical as much as possible between the two branches,
+	  for easier merging.
+
+2011-09-25 15:24:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: fix indentation
+
+2011-09-23 21:18:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Android.mk:
+	* configure.ac:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/floatcast/Makefile.am:
+	* gst-libs/gst/floatcast/floatcast.h:
+	* gst-plugins-base.spec.in:
+	* gst/audioconvert/audioconvert.c:
+	* pkgconfig/Makefile.am:
+	* pkgconfig/gstreamer-floatcast-uninstalled.pc.in:
+	* pkgconfig/gstreamer-floatcast.pc.in:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/libs/gstlibscpp.cc:
+	  libs: remove unused floatcast header-only library
+	  There's no code whatsoever that uses these macros. If anyone
+	  ever feels the need to resurrect them, we should add them to
+	  gstutils.h in core or libgstaudio or so.
+
+2011-09-23 18:27:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/ogg/gstoggdemux.c
+	  ext/pango/gsttextoverlay.c
+	  gst-libs/gst/audio/gstaudioencoder.c
+	  gst-libs/gst/audio/gstbaseaudiosrc.c
+	  gst/playback/gstsubtitleoverlay.c
+	  gst/videorate/gstvideorate.c
+
+2011-09-23 17:50:31 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Avoid unnecessary read only caps copy
+
+2011-09-21 13:30:43 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  gst-libs: Temporarily remove dependency of gstaudio on gstpbutils
+	  Also re-order the SUBDIRS in the higher-level Makefile so it cleanly
+	  installs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657675
+
+2011-09-22 15:38:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: proxy some more optional downstream caps fields to upstream
+
+2011-09-22 15:38:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: changed is verily the opposite of equal
+
+2011-09-22 15:37:07 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: prevent crashing when comparing to a freshly inited GstAudioInfo
+
+2011-09-22 15:36:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	  audio: some more accessor macros for GstAudioInfo
+
+2011-09-22 15:34:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: fix documentation typo
+
+2011-09-21 13:54:27 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Update common to 0.11 branch
+
+2011-09-21 13:31:35 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstaudio.def:
+	  win32: Update .def files
+
+2011-09-19 18:32:26 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  videorate: Add tests for the max-rate case
+
+2011-09-19 18:31:07 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  videorate: Print which caps didn't match up
+
+2011-09-19 18:26:04 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: Add a max-rate property
+	  In various use-case you want to dynamically change the framerate (e.g.
+	  live streams where the available network bandwidth changes). Doing this
+	  via capsfilters in the pipeline tends to be very cumbersome and racy,
+	  using this property instead makes it very painless.
+
+2011-09-01 17:05:23 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  videorate: Add test for caps negotiation
+
+2011-09-01 16:47:49 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Add more strict caps negotiation
+	  When in drop-only mode we can never provide a framerate that is higher
+	  then the input, so let the caps negotiation reflect this.
+
+2011-09-20 13:35:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: don't unref event we don't own
+	  http://bugzilla.gnome.org/show_bug.cgi?id=659562
+
+2011-09-20 14:04:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Only check if this is a discarded type if we have fixed caps
+	  For unfixed caps we will get here again later when the caps are fixed.
+
+2011-09-20 14:03:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Only call autoplug-continue with fixed caps
+	  With unfixed caps we can't reliably decide if the final caps
+	  are going to be "raw" (e.g. supported by a sink) or not.
+	  We will get here again later when the caps are fixed.
+
+2011-09-20 13:45:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/decodebin2.c:
+	  decodebin2: Fix unit test by strictly implementing parser behaviour instead of relying on basetransform
+
+2011-01-13 15:35:30 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  oggstream: only use information from skeleton if we have nothing better
+	  The codec setup headers are a lot more likely to have correct information,
+	  especially as it's easy to remux a skeleton in a file where streams don't
+	  have the same parameters (I've even seen a file with two skeletons).
+	  Still, this is useful in the case we have a codec we can't decode, so we
+	  can at least (theoretically) convert granpos to time, so we discard this
+	  information if the codec setup has already provided it.
+	  This fixes playback on (at lesat) the original archive.org encoding of
+	  "The Night of the Living Dead" (now replaced by another encoding).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=612443
+
+2011-09-19 14:16:19 +0200  Age Bosma <agebosma@gmail.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  discoverer: Don't use gtk-doc /* < ... > */ style comments for signals
+	  The /*< ... >*/ style is only used for public|protected|private,
+	  signal comments use /* signals */. This prevents the some code
+	  parsers/binding generators to be confused by the comment.
+
+2011-09-19 14:02:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Get the target of the video sinkpad, not the target sinkpad in the video setcaps handler
+
+2011-08-18 15:13:23 +0000  Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Initialize variable correctly
+	  If subdrained isn't initialized to FALSE then a chain might think
+	  that its group is drained when in fact it's not and this can cause
+	  a switch too early or even cause a deadlock.
+
+2011-07-28 16:44:33 +0000  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Rewrite EOS-handling code
+	  This is now really threadsafe and improves switching
+	  between different groups.
+
+2011-09-19 11:53:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Fix non-prerolling pipelines and not-linked errors if a parser is available but no decoder
+	  Fixes bug #658846.
+
+2011-08-01 07:54:02 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtspdefs: add RTCP-Interval header
+
+2011-09-19 11:24:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Implement support for switching between raw and non-raw video streams
+
+2011-09-19 09:34:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Protect against accessing the NULL parent of the pads during shutdown
+	  Fixes bug #658901.
+
+2011-09-16 20:14:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: remove superfluous check in newsegment event handler
+	  If we get a newsegment event from upstream, we can be quite
+	  sure we're not operating pull-based.
+
+2011-09-16 20:11:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: minor printf format fix
+
+2011-09-14 12:23:19 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix wedge when seeking twice quickly in push mode
+	  This could happen when testing with navseek, and pressing
+	  right and left at roughly the same time. The current chain
+	  is temporarily moved away, and this caused the flush events
+	  not to be sent to the source pads, which would cause the
+	  data queues downstream to reject incoming data after the
+	  seek, and shut down, wedging the pipeline.
+	  Now, I can't really decide whether this is a nasty steaming
+	  hack or a good fix, but it certainly does fix the issue, and
+	  does not seem to break anything else so far.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=621897
+
+2011-08-13 14:18:56 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: implement push mode seeking
+	  This patch implements seeking in push mode (eg, over the net)
+	  in Ogg, using the double bisection method.
+	  As a side effect, it also fixes duration determination of network
+	  streams, by seeking to the end to check the actual duration.
+	  Known issues:
+	  - Getting an EOS while seeking stops the streaming task, I can't
+	  find a way to prevent this (eg, by issuing a seek in the event
+	  handler).
+	  - Seeking twice in a VERY short succession with playbin2 fails
+	  for streams with subtitles, we end up pushing in a dataqueue
+	  which is flushing. Rare in normal use AFAICT.
+	  - Seeking is slow on slow links - byte ranges guesses could be
+	  made better, decreasing the number of required requests
+	  - If no granule position is found in the last 64 KB of a stream,
+	  duration will be left unknown (should be pretty rare)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=621897
+
+2011-09-15 22:04:56 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: fix compiler warning
+	  Remove a check for gchar >= 128
+
+2011-09-15 16:47:26 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: don't access the event after pushing
+	  Fixes valgrind warnings.
+
+2011-09-15 14:27:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  Revert "playbin2: autoplug sink if stream is incompatible to the configured one"
+	  This reverts commit b0b4e286c8cde2e79a959a444a2c68e99c3f29c6.
+	  We agreed that the previous (pre-.35) behaviour is broken and a bug and the
+	  current behaviour is correct, deterministic and allows the application to
+	  handle stuff properly while the old behaviour can't be handled properly by
+	  applications and just worked in some applications by luck.
+	  The solution to the problem that was solved by relying on the old, broken
+	  behaviour would be, to make decodebin2/playbin2 more aware of decoders and
+	  improve the autoplugging of decoders by considering the caps supported by the
+	  sink instead of just using something with the highest rank.
+	  See bug #656923.
+
+2011-09-15 09:23:54 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: autoplug sink if stream is incompatible to the configured one
+	  Fixes regression since 0.10.33 where sinks that can cope with non raw
+	  caps or custom caps are not autoplugged if there's a sink configured
+	  with the properties video-sink and audio-sink which cannot handle
+	  the stream. This change checks for compatibility on the configured one
+	  and use it if success. Otherwhise it tries with the found factories.
+
+2011-08-13 14:14:19 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not propagate discontinuities in sparse streams
+	  The first packet of a sparse stream may arrive after an initial
+	  delay in the stream. If ogg_stream_packetout reports a discontinuity
+	  in a sparse stream, do not propagate it to other streams in the
+	  chain unnecessarily.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=621897
+
+2011-09-12 15:48:59 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaysink.c:
+	  Revert "playsink: only add text overlay if vido sink also accepts raw caps"
+	  This reverts commit a22faad18a73a27a2a0c903748c1a355df4d8c13. Instead
+	  of disabling subtitles completelly when video stream have custom caps,
+	  just let the sutbtileoverlay cope with them as now it's able to.
+
+2011-09-12 15:46:46 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: gracefully handle non raw video streams
+	  Implement handling of non raw video streams by avoiding colorspace
+	  elements and autoplugging a compatible renderer if available. Fallback
+	  to passthrough if no compatible renderer is found.
+
+2011-09-12 15:10:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: try to catch malformed URIs
+	  Only log in debug log for now, since the check is a bit
+	  half-hearted, its purpose is mostly to make sure people
+	  use gst_filename_to_uri() or g_filename_to_uri().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=654673
+
+2011-09-12 19:53:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/tag.h:
+	  docs: minor addition to GST_TAG_ID3V2_HEADER_SIZE docs
+
+2011-09-11 14:22:59 -0400  Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: Fix descriptions of properties
+
+2011-09-10 18:30:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: don't try to fixate "width" field for alaw/mulaw
+	  Fixes warning when trying to fixate e.g. pulsesrc ! audio/x-alaw ! fakesink.
+
+2011-09-09 13:10:13 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/design-decodebin.txt:
+	  docs: fix some typos in the decodebin design document
+
+2011-09-09 13:07:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.c:
+	  colorbalance: add some guards to interface methods
+	  https://bugzilla.gnome.org/show_bug.cgi?id=658584
+
+2011-09-09 12:07:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: recognize Asylum modules
+	  Note that there is already a AMF detection for a different
+	  magic, I'm not sure if that's a different format with the
+	  same initials or not. AMF is used for a few different formats
+	  (including video), so...
+	  This fixes playbin2 playing Asylum modules.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=658514
+
+2011-08-31 20:51:17 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Improve subrip type check regex
+	  This patch prevents timestamp like "1 1:00:00", which would have been seen
+	  as hour 101 by our parser, and allow single digit hour, minute and seconds
+	  as it's already supported by the parser, and also by other implementation
+	  like in mplayer. This fixes bug 657872.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657872
+
+2011-09-08 14:46:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/design/design-decodebin.txt:
+	  decodebin: Update design documentation about how Parser/Converter are handled
+
+2011-09-08 14:42:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "Revert "decodebin2: Do a subset check before actually using a factory""
+	  This reverts commit 5f5d832a3bcff0828758f164fcb13c4258aefb36.
+
+2011-09-08 14:42:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  docs/libs/Makefile.am
+	  tests/check/elements/decodebin2.c
+
+2011-09-08 13:25:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin2: Do a subset check before actually using a factory"
+	  This reverts commit 50a88396ae6d54a83a10e7d2efd551d39033148e.
+	  See bug #658541.
+
+2011-09-07 16:44:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/decodebin2.c:
+	  decodebin2: Don't use bufferalloc in the test elements
+	  This will cause not-linked errors that usually don't happen
+	  because normal decoders/parsers will set srcpad caps before
+	  allocating buffers from downstream.
+
+2011-09-07 16:43:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Make sure to fixate Parser/Converter caps before continuing autoplugging
+
+2011-09-07 16:04:43 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: only add text overlay if vido sink also accepts raw caps
+	  Fixes regression, pipeline fails with not negotiated, on media
+	  containing subtitles when decoder/sink with custom caps is used.
+
+2011-09-07 14:19:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Intersect the factory caps with the current caps for the capsfilter
+	  Otherwise we'll include many incompatible caps in the capsfilter that
+	  will only slow down negotiation.
+
+2011-09-07 14:07:00 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/Makefile.am:
+	* docs/plugins/Makefile.am:
+	  docs: cleanup makefiles
+	  Remove commented out parts that we don't need. Remove "the wingo addition" - no
+	  so useful after all. Narrow down file-globs for plugin docs.
+
+2011-09-07 14:04:10 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  docs: add two mising enum docs
+
+2011-09-07 14:10:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/audiorate.c:
+	  audiorate: Use complete audio caps, including the endianness field
+
+2011-09-07 12:32:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix element factory refcounting
+	  g_value_get_object() does not give us our own ref.
+	  Fixes "Trying to dispose object "flacparse", but it still has a parent "registry0".
+	  You need to let the parent manage the object instead of unreffing the object directly."
+	  and similar warnings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=658416
+
+2011-09-07 11:06:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: do not automatically override quality when using target bitrate
+	  If both quality and bitrate are set, libtheora will try to meet
+	  both constraints, causing it to prefer emitting a smaller number
+	  of good frames, to emitting the full number of frames that would
+	  not meet the requested quality. This causes a slideshow effect
+	  when the bitrate is low and the quality is high. And the default
+	  theoraenc is high (48/63).
+	  So only set quality when it is requested, and leave it unset
+	  otherwise.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=658443
+
+2011-09-06 21:24:33 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From a39eb83 to 11f0cd5
+
+2011-09-06 19:18:27 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Add latest files to spec file
+
+2011-09-06 20:13:30 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/Makefile.am:
+	  docs: activate overrides file to fix make distcheck
+
+2011-09-06 16:42:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	  Merge remote-tracking branch 'origin/master' into 0.11
+	  Merge in doc updates for audio enums from 0.10, and get rid
+	  of the #if #else in the enum list, since that confuses gtk-doc.
+	  Conflicts:
+	  gst-libs/gst/audio/audio.c
+	  gst-libs/gst/audio/audio.h
+
+2011-09-06 16:46:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	  audio: rename IS_LE/BE to _IS_LITTLE_ENDIAN/BIG_ENDIAN
+
+2011-09-06 16:46:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  audio/video add descriptions
+	  Add a description to the audio and video format info in case we want to use this
+	  later.
+
+2011-09-06 15:46:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	  audio: update internal silent sample defines as well to match 0.11
+
+2011-09-06 16:46:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	* gst/audioconvert/audioconvert.c:
+	  rename IS_LE/BE to _IS_LITTLE_ENDIAN/BIG_ENDIAN
+
+2011-09-06 15:16:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	  audio: update audio format enums to match changes in 0.11
+	  And add new audio format info stuff to docs.
+
+2011-09-06 15:40:02 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 605cd9a to a39eb83
+
+2011-09-06 15:31:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst/playback/gstsubtitleoverlay.c
+	  tests/check/elements/decodebin2.c
+
+2011-09-06 15:24:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/audio/audio.h
+	  gst-libs/gst/audio/gstaudiodecoder.c
+	  gst-libs/gst/audio/gstaudiodecoder.h
+	  gst-libs/gst/audio/gstaudioencoder.c
+	  gst-libs/gst/audio/gstbaseaudioencoder.h
+	  gst/playback/Makefile.am
+	  gst/playback/gstplaybin.c
+	  gst/playback/gstplaysink.c
+	  gst/playback/gstplaysinkvideoconvert.c
+	  gst/playback/gstsubtitleoverlay.c
+	  gst/videorate/gstvideorate.c
+	  gst/videoscale/gstvideoscale.c
+	  win32/common/libgstaudio.def
+
+2011-09-06 14:16:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Do a subset check before actually using a factory
+	  This prevents autoplugging if the caps have a non-empty intersection
+	  but are not accepted by the next element's pad.
+
+2011-09-06 14:04:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Use subset check instead of non-empty-intersection check to check if pads are compatible
+
+2011-09-06 14:03:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Use subset check instead of non-empty-intersection check to check if pads are compatible
+
+2011-09-06 13:06:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Fix memory leak
+
+2011-09-06 12:14:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/decodebin2.c:
+	  decodebin2: Add unit test for correct parser/converter negotiation
+
+2011-06-26 15:40:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Correctly negotiate format for parsers that can convert different stream formats
+	  This is done by adding a capsfilter after every parser/converter that contains
+	  all possible caps supported by downstream elements. A capsfilter is necessary
+	  here because the decoder is only selected after the parser selected a format
+	  and the parser can't know what downstream would support otherwise.
+
+2011-09-05 15:19:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If a audio/video sink was already selected don't check caps of all other possible sinks
+
+2011-09-06 08:25:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/decodebin2.c:
+	  decodebin2: Add Tim as author for the parser test
+
+2011-09-06 12:06:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst/adder/gstadder.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/volume/gstvolume.c:
+	  audio: change audio format syntax a little
+	  Remove the _ in front of the endianness prefix.
+	  Remove the _3 postfix for the 24 bits formats.
+	  Add a _32 postfix after the formats that occupy extra space beyond their
+	  natural size.
+	  The result is that the GST_AUDIO_NE() macro can simply append the endianness
+	  after all formats and that we only specify a different sample width when it is
+	  different from the natural size of the sample. This makes things more consistent
+	  and follows the pulseaudio conventions instead of the alsa ones.
+
+2011-09-06 10:07:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  docs: more docs clean-ups
+
+2011-09-05 23:00:30 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: don't take the object lock twice in {set,get}_property
+	  https://bugzilla.gnome.org/show_bug.cgi?id=658294
+
+2011-09-05 22:51:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	  audio: fix GST_AUDIO_FORMAT_INFO_IS_*() macros to return a boolean
+
+2011-09-05 21:40:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/Makefile.am:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  docs: some docs love
+
+2011-09-05 20:45:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* docs/libs/gst-plugins-base-libs.types:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  docs: add GstAudioDecoder and GstAudioEncoder to documentation
+
+2011-09-05 15:01:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	* win32/common/libgstaudio.def:
+	  audio: rename GstBaseAudioDecoder/Encoder to GstAudioDecoder/Encoder
+	  API: gst_gst_audio_decoder_finish_frame()
+	  API: gst_gst_audio_decoder_get_audio_info()
+	  API: gst_gst_audio_decoder_get_byte_time()
+	  API: gst_gst_audio_decoder_get_delay()
+	  API: gst_gst_audio_decoder_get_latency()
+	  API: gst_gst_audio_decoder_get_max_errors()
+	  API: gst_gst_audio_decoder_get_min_latenc()y
+	  API: gst_gst_audio_decoder_get_parse_state()
+	  API: gst_gst_audio_decoder_get_plc()
+	  API: gst_gst_audio_decoder_get_plc_aware()
+	  API: gst_gst_audio_decoder_get_tolerance()
+	  API: gst_gst_audio_decoder_get_type()
+	  API: gst_gst_audio_decoder_set_byte_time()
+	  API: gst_gst_audio_decoder_set_latency()
+	  API: gst_gst_audio_decoder_set_max_errors()
+	  API: gst_gst_audio_decoder_set_min_latency()
+	  API: gst_gst_audio_decoder_set_plc()
+	  API: gst_gst_audio_decoder_set_plc_aware()
+	  API: gst_gst_audio_decoder_set_tolerance()
+	  API: gst_gst_audio_encoder_finish_frame()
+	  API: gst_gst_audio_encoder_get_audio_info()
+	  API: gst_gst_audio_encoder_get_frame_max()
+	  API: gst_gst_audio_encoder_get_frame_samples()
+	  API: gst_gst_audio_encoder_get_hard_resync()
+	  API: gst_gst_audio_encoder_get_latency()
+	  API: gst_gst_audio_encoder_get_lookahead()
+	  API: gst_gst_audio_encoder_get_mark_granule()
+	  API: gst_gst_audio_encoder_get_perfect_timestamp()
+	  API: gst_gst_audio_encoder_get_tolerance()
+	  API: gst_gst_audio_encoder_get_type()
+	  API: gst_gst_audio_encoder_proxy_getcaps()
+	  API: gst_gst_audio_encoder_set_frame_max()
+	  API: gst_gst_audio_encoder_set_frame_samples()
+	  API: gst_gst_audio_encoder_set_hard_resync()
+	  API: gst_gst_audio_encoder_set_latency()
+	  API: gst_gst_audio_encoder_set_lookahead()
+	  API: gst_gst_audio_encoder_set_mark_granule()
+	  API: gst_gst_audio_encoder_set_perfect_timestamp()
+	  API: gst_gst_audio_encoder_set_tolerance()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642690
+
+2011-08-03 13:31:59 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Select muxer further
+	  Sort muxers based on their caps and ranking before iterating to
+	  find one that fits the profile.
+	  Sorting is done by putting the elements that have a pad template
+	  that can produce the exact caps that is on the profile. For example:
+	  when asking for "video/quicktime, variant=iso", muxers that
+	  have this exact caps on their pad templates will be put first on
+	  the list than ones that have only "video/quicktime".
+	  https://bugzilla.gnome.org/show_bug.cgi?id=651496
+
+2011-09-05 20:31:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Actually iterate over the factories instead of only taking the first one
+
+2011-09-05 15:51:25 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* tests/check/libs/profile.c:
+	* tests/check/libs/tag.c:
+	* tests/check/libs/video.c:
+	  tests: supress ERROR log output for some tests
+	  Be nice when we tests for correct error handling and don't spam stdout.
+
+2011-09-05 14:40:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  Revert "playsink: Try include 'pitch', if no other sink is provided"
+	  This reverts commit 105814e2c78f9867c61531b9e8166e4ae994296f.
+	  The general consensus seems to be that we should revert this for
+	  now. If such behaviour is desired, we should probably enable it
+	  via a flag. And maybe use the scaletempo plugin instead.
+
+2011-09-05 12:02:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Don't leak the videochain ts-offset element
+	  Also don't leak the audiochain ts-offset element if one is
+	  found but the sink doesn't support volume settings.
+
+2011-09-05 11:55:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Use gst_object_unref() instead of g_object_unref() for better debugging
+
+2011-03-17 19:13:58 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/Makefile.am:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_lanczos.c:
+	  videoscale: Add modified Lanczos scaling method
+	  Adds a Lanczos-derived scaling method, which is rather slow, but very
+	  high quality.  Adds a few properties that can be used to tune various
+	  scaling properties: sharpness, sharpen, envelope, dither.  Not currently
+	  Orcified, but was designed with that in mind.
+
+2011-05-16 14:46:52 -0700  David Schleef <ds@schleef.org>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  playback: Add define for colorspace element
+	  Single point of change if you want to switch from ffmpegcolorspace
+	  to colorspace.
+
+2011-08-25 15:14:58 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: fix dynamically changing average period
+	  The average_period_set variable can be accessed in different threads, so
+	  always lock it when reading. Furthermore when switching to averaging
+	  mode we should make sure we don't have cached buffers that aren't used
+	  in that mode. And any modeswitch will cause the latency to change, so we
+	  should post a NewLatency message
+
+2011-08-23 10:11:52 +0200  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* gst/videorate/Makefile.am:
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: Port to basetransform
+
+2011-08-22 15:52:57 +0200  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  Correct added versions
+
+2011-08-31 14:45:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Only unref ts_offset elements if they're not NULL
+
+2011-08-31 13:32:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: improve docs a little
+
+2011-08-31 12:39:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Keep the chain mutex locked while connecting to the notify::caps signal
+
+2011-08-30 14:04:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add some more macros
+
+2011-08-30 18:21:31 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/seek/seek.c:
+	  seek: Accept pipeline descriptions for audiosink/videosink
+	  Make the element_factory_make_or_warn utility function try parsing
+	  the input string as a bin if element_factory_make() fails. This makes
+	  the --audiosink/--videosink commandline options accept a pipeline
+	  string.
+
+2011-08-30 18:21:31 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Try include 'pitch', if no other sink is provided
+	  As a default, try the pipeline 'pitch ! audioconvert ! autoaudiosink'
+	  before trying plain autoaudiosink
+
+2011-08-29 13:33:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: fix ts_offset refcounting
+
+2011-08-29 13:28:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	  base: port to 0.11
+
+2011-08-29 11:42:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	  audio: fix after merge
+
+2011-08-29 11:38:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  pbutils: port to new API
+
+2011-08-29 11:37:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/ogg/gstoggmux.c
+	  gst-libs/gst/audio/audio.c
+	  gst-libs/gst/audio/audio.h
+	  gst-libs/gst/audio/multichannel.h
+	  gst-libs/gst/pbutils/Makefile.am
+	  gst-libs/gst/pbutils/gstdiscoverer.c
+	  gst/playback/gstplaysinkaudioconvert.c
+	  gst/playback/gstplaysinkvideoconvert.c
+	  win32/common/libgstaudio.def
+
+2011-08-27 14:57:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  pbutils: don't depend on libgstvideo just to parse some caps
+	  Let's extract those ints and fractions ourselves and not depend
+	  on libgstvideo.
+
+2011-08-27 13:31:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* win32/common/libgstaudio.def:
+	  audio: add GstBaseAudioDecoder and GstBaseAudioEncoder to build
+	  However, libgstaudio now depends on libgstvideo (via pbutils).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642690
+	  API: gst_audio_info_clear()
+	  API: gst_audio_info_convert()
+	  API: gst_audio_info_copy()
+	  API: gst_audio_info_free()
+	  API: gst_audio_info_from_caps()
+	  API: gst_audio_info_init()
+	  API: gst_audio_info_to_caps()
+	  API: gst_base_audio_decoder_finish_frame()
+	  API: gst_base_audio_decoder_get_audio_info()
+	  API: gst_base_audio_decoder_get_byte_time()
+	  API: gst_base_audio_decoder_get_delay()
+	  API: gst_base_audio_decoder_get_latency()
+	  API: gst_base_audio_decoder_get_max_errors()
+	  API: gst_base_audio_decoder_get_min_latency()
+	  API: gst_base_audio_decoder_get_parse_state()
+	  API: gst_base_audio_decoder_get_plc()
+	  API: gst_base_audio_decoder_get_plc_aware()
+	  API: gst_base_audio_decoder_get_tolerance()
+	  API: gst_base_audio_decoder_get_type()
+	  API: gst_base_audio_decoder_set_byte_time()
+	  API: gst_base_audio_decoder_set_latency()
+	  API: gst_base_audio_decoder_set_max_errors()
+	  API: gst_base_audio_decoder_set_min_latency()
+	  API: gst_base_audio_decoder_set_plc()
+	  API: gst_base_audio_decoder_set_plc_aware()
+	  API: gst_base_audio_decoder_set_tolerance()
+	  API: gst_base_audio_encoder_finish_frame()
+	  API: gst_base_audio_encoder_get_audio_info()
+	  API: gst_base_audio_encoder_get_frame_max()
+	  API: gst_base_audio_encoder_get_frame_samples()
+	  API: gst_base_audio_encoder_get_hard_resync()
+	  API: gst_base_audio_encoder_get_latency()
+	  API: gst_base_audio_encoder_get_lookahead()
+	  API: gst_base_audio_encoder_get_mark_granule()
+	  API: gst_base_audio_encoder_get_perfect_timestamp()
+	  API: gst_base_audio_encoder_get_tolerance()
+	  API: gst_base_audio_encoder_get_type()
+	  API: gst_base_audio_encoder_proxy_getcaps()
+	  API: gst_base_audio_encoder_set_frame_max()
+	  API: gst_base_audio_encoder_set_frame_samples()
+	  API: gst_base_audio_encoder_set_hard_resync()
+	  API: gst_base_audio_encoder_set_latency()
+	  API: gst_base_audio_encoder_set_lookahead()
+	  API: gst_base_audio_encoder_set_mark_granule()
+	  API: gst_base_audio_encoder_set_perfect_timestamp()
+	  API: gst_base_audio_encoder_set_tolerance()
+
+2011-08-27 13:15:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  docs: add since markers to baseaudio{decoder,encoder} documentation
+
+2011-08-27 12:47:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudiodecoder, baseaudioencoder: fix some compiler warnings
+	  Leaving the GST_USE_UNSTABLE_API guards in until some of the
+	  ported decoders have been updated and it's clear that I didn't
+	  mess up anywhere porting things to the new audio API.
+
+2011-08-27 12:41:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioutils.c:
+	* gst-libs/gst/audio/gstbaseaudioutils.h:
+	  baseaudioutils: remove, merged into or superseded by audio.c
+
+2011-08-27 12:39:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: port to new GstAudioInfo API
+
+2011-08-27 12:37:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: port to GstAudioInfo API
+
+2011-08-27 11:43:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	  audio: add gst_audio_info_{init,clear} and gst_audio_info_{copy,free}
+
+2011-08-22 20:15:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/multichannel.c:
+	* gst-libs/gst/audio/multichannel.h:
+	  audio: add GstAudioFormat, GstAudioFormatInfo and GstAudioInfo
+	  Same as in 0.11, but with caps parsing/serialising for 0.10 style
+	  caps. Add setting default channel positions.
+
+2011-08-17 18:48:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: remove leftover experimental code
+
+2011-08-17 18:32:54 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioutils.c:
+	* gst-libs/gst/audio/gstbaseaudioutils.h:
+	  audioutils: modify _parse, add GType support functions
+
+2011-08-16 21:11:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: move properties to private storage and add _get/_set
+
+2011-08-16 21:11:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: rename property
+
+2011-08-16 20:39:07 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: replace context helper structure by various _get/_set
+
+2011-08-16 18:59:13 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: move properties to private storage and add _get/_set
+
+2011-08-16 18:25:43 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: rename some properties
+
+2011-08-16 18:23:14 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: replace context helper structure by various _get/_set
+
+2011-08-16 17:27:07 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	* gst-libs/gst/audio/gstbaseaudioutils.c:
+	* gst-libs/gst/audio/gstbaseaudioutils.h:
+	  baseaudio: rename GstAudioState to GstAudioFormatInfo
+
+2011-06-17 11:54:08 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: TEMP; avoid some imperfect ts jitter ?
+	  ... even when not in perfect mode ?
+
+2011-04-28 12:01:43 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: debug format fixes
+
+2011-04-28 12:01:30 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: debug format fix
+
+2011-03-31 14:03:11 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: fixup documentation
+
+2011-03-29 15:51:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: fix FLUSH_STOP actions
+
+2011-03-28 13:16:27 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: preserve upstream seek event seqnum
+
+2011-03-22 11:09:56 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: use buffer running time for granule calculation
+
+2011-03-22 10:45:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: minor fix in ts resync
+
+2011-03-21 11:40:31 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: improve glitch resilience
+	  Provide a replacement for GST_ELEMENT_ERROR to avoid aborting at the first
+	  atom out of place, while on the other hand not failing indefinitely.
+
+2011-03-17 12:09:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: add limited legacy seeking support
+
+2011-03-16 14:41:40 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: cater for audio-codec tag
+
+2011-03-10 16:01:05 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiodecoder: initial version
+
+2011-03-16 18:41:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: misc fixes
+
+2011-03-15 17:27:42 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	* gst-libs/gst/audio/gstbaseaudioutils.c:
+	* gst-libs/gst/audio/gstbaseaudioutils.h:
+	  baseaudio: add audioutils for caps and query handling helper utils
+
+2011-03-14 12:39:49 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: mark unstable API
+
+2011-03-10 15:12:54 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: fix clearing context
+
+2011-03-10 15:12:19 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: simplify latency variable handling
+
+2011-03-10 14:28:48 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: minor fixes and code simplifications
+	  Also modify and elaborate a bit on pre_push (though currently unused to no harm).
+
+2011-03-09 12:44:36 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: additional documentation on granule semantics and configuration
+
+2011-03-09 12:24:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: elaborate property names
+
+2011-03-09 12:22:04 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: rename state field xint to is_int
+
+2011-03-09 12:18:56 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	  baseaudioencoder: gtk-doc syntax fixes
+
+2011-03-09 12:17:18 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  baseaudioencoder: minor fix and cleanup
+
+2011-03-01 14:08:18 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  baseaudiocodec: ... and also rename to baseaudiodecoder
+
+2011-03-01 13:58:31 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  gst-libs/gst/audio: Remove baseaudiodecoder
+	  Adds little beyond baseaudiocodec (seeking, bit of query), and what it adds
+	  is mainly out-of-scope (e.g. decoder seeking, should be done by upstream
+	  demuxer/parser) and/or based on non-prime example (mad).
+
+2009-09-17 13:26:28 +0200  Iago Toral <itoral@igalia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	  baseaudiodecoder: Return TRUE if we run into special conversion cases.
+
+2009-09-01 14:17:53 +0200  Iago Toral <itoral@igalia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  audio: initial version of GstBaseAudioCodec
+	  Moved most of the code to GstBaseAudioCodec, GstBaseAudioDecode is
+	  now really small, maybe we do not really need it (or its encoder
+	  counterpart). Added more API for subclasses and documentation.
+
+2009-08-14 09:45:52 +0200  Iago Toral <itoral@igalia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  Added src_queries to decoder class. Added handle_discont to decoder class. Reworked reset. Various other minor fixes.
+
+2009-08-06 15:28:00 +0200  Iago Toral <itoral@igalia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  Added a draft implementation of gstbaseaudiodecoder
+
+2011-03-01 11:56:29 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiodecoder.c:
+	* gst-libs/gst/audio/gstbaseaudiodecoder.h:
+	  Added audio directory for audio codec base classes
+
+2011-02-18 16:38:37 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  audioencoders: add streamheader helper utility
+
+2011-01-27 16:52:50 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudioencoder.c:
+	* gst-libs/gst/audio/gstbaseaudioencoder.h:
+	  audioencoders: baseaudioencoder and ported encoders
+
+2011-08-26 14:20:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  base: fix for allocation methods rename
+
+2011-08-26 10:03:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstpbutils.def:
+	  win32: Add new discoverer API
+
+2011-08-26 10:03:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: Add new discoverer API
+
+2011-08-24 16:29:08 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	* tools/gst-discoverer.c:
+	  discoverer: retrieve audio track language from tags too
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657257
+
+2011-08-24 15:09:47 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: consider subtitles as raw
+	  Otherwise, discoverer will generated an "inner" codec
+	  where there can be a tranformation (eg, kate -> DVD SPU,
+	  and various ->text/x-pango-markup).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639055
+
+2011-08-24 15:05:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: add application/x-kate to subtitles caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639055
+
+2011-08-24 14:59:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: get language from other tags if we did not get it already
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639055
+
+2011-08-24 15:04:50 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	* tools/gst-discoverer.c:
+	  discoverer: add subtitles API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639055
+
+2011-08-21 14:51:45 -0700  David Schleef <ds@schleef.org>
+
+	* gst/playback/gstplaysink.c:
+	  playback: reference count ts_offset
+	  Apparently this object is being used after it's freed.  This is one
+	  way to fix it, although perhaps not the best way.  Fixes: #656715.
+
+2011-08-25 17:41:53 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstaudio.def:
+	* win32/common/libgstinterfaces.def:
+	* win32/common/libgsttag.def:
+	* win32/common/libgstvideo.def:
+	  win32: Update .def files
+
+2011-08-25 17:41:30 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/_stdint.h:
+	* win32/common/audio-enumtypes.c:
+	* win32/common/audio-enumtypes.h:
+	* win32/common/config.h:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  win32: Update pre-generated files
+
+2011-08-25 17:41:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/video/video.h:
+	  video: Fix typo in interlaced flag (TTF => TFF)
+
+2011-08-25 16:41:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: clean up the custom flags
+	  Clean up the flags, make an enum of them. We can now do this because there are
+	  no subclasses of buffer anymore.
+
+2011-08-25 16:30:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	  convert: use new caps
+
+2011-08-25 14:55:14 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: fix caps leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657333
+
+2011-07-08 23:06:46 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppayload: Make perfect timestamps reproducible across element restart
+	  Without the perfect timestamp machinery, the RTP timestamp can be
+	  computed directly from the running time of a buffer, but the perfect
+	  timestamp patch broke that assumption. This patch restores it by
+	  having the first perfect timestamp be the running time of that buffer
+	  and counting from there.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=654434
+
+2011-08-25 13:21:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: use base class fill method
+
+2011-08-24 17:39:11 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix leaks in skeleton writing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=563251
+
+2011-08-18 16:36:23 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: generate message headers from received tags
+	  Some message headers can be deduced from tags (eg, "Language").
+	  https://bugzilla.gnome.org/show_bug.cgi?id=563251
+
+2011-08-18 10:05:17 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggparse.c:
+	  ogg: use memory slices where appropriate
+	  While there, avoid zeroing newly allocated memory where unnecessary
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-24 18:39:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/multichannel.h:
+	* gst-libs/gst/riff/riff-media.c:
+	  multichannel: add some more channels
+
+2011-08-24 16:40:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/video/video.h:
+	  audio/video: add format of the pack functions
+	  Replace the unpack_size with an unpack_format, which is more descriptive of the
+	  kind of data the unpack function will create.
+
+2011-08-24 14:13:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	  audio: rename UNPOSITIONED to DEFAULT_POSITIONS
+	  Rename the UNPOSITIONED flag to the DEFAULT_POSITIONS flag because that is
+	  really what the resulting GstAudioInfo will contain as the chanel mappings.
+
+2011-08-24 14:05:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	  playsink{audio,video}convert: Send NEWSEGMENT events to sinkpads instead of pushing them
+
+2011-08-24 13:52:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add an id to the video frame
+	  Rename @view_id to @id.
+	  Add an id to the video metadata. Add a method to get the metadata from a buffer
+	  with the given id.
+	  Make a method to map a frame with a certain id. This only maps the frame with
+	  the given id on the video metadata. The generic frame id can be used when a
+	  buffer carries multiple video frames such as in multiview mode but maybe also
+	  when dealing with interlaced video that stores the fields in separate buffers.
+
+2011-08-24 11:05:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: fix build
+
+2011-08-24 11:04:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/ogg/gstoggmux.c
+	  ext/vorbis/gstvorbisenc.c
+
+2011-08-23 11:12:10 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not warn when reaching EOS while scanning for the end chain
+	  After all, we were asking for it.
+	  This gets rid of the last warning-about-expected-condition.
+	  w00t.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 11:08:25 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: add media type to chain information reports
+	  One more little step in making logs a little less abstruse.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 11:05:11 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: correctly identify skeleton EOS packet
+	  It is 0 byte, and was triggering the "bad packet" logic.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:58:20 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not warn about expected occurences
+	  In this case, finding a skeleton packet.
+	  Once upon a time, it used to be rare indeed, but no more.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:47:53 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not warn when finding a non BOS page
+	  After all, we do hope to find actual data for these streams.
+	  However, warn if we could not set up a chain when we find a
+	  non BOS page, as that means we don't have a valid Ogg stream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:40:12 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: rename local variable for clarity
+	  While the casual reader might end up bewildered by just why this
+	  change might increase clarity, it just happens than, in the libogg
+	  and associated sources, op is the canonical name for an ogg_packet
+	  whlie og is the canonical name for an ogg_page, and reading this
+	  code confuses me.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:32:36 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not try to determine duration of header packets
+	  Headers are inherently durationless.
+	  Instead, set duration to 0 to avoid increasing tracked granpos,
+	  and do not warn about it, since it is totally expected.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:29:49 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: include stream type in warnings
+	  It makes it easier to work out what's going on.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-23 10:28:33 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: set skeleton stream media type to application/x-ogg-skeleton
+	  This is to match the typefinder, and to make logs clearer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657151
+
+2011-08-17 17:09:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: add skeleton write support
+	  Version written is 3.0
+	  Base times are left empty for now.
+	  Content-Type should be the MIME type of the stream. It is set to
+	  the GStreamer media type for now, which is probably the same for
+	  the streams oggmux supports.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=563251
+
+2011-08-23 20:34:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: fix chroma-site enums
+
+2011-08-23 19:23:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: avoid gst-indent breaking the code
+
+2011-08-23 19:04:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: fix docs
+
+2011-08-23 18:57:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	  video: add colorimetry info
+	  Make enums for the chroma siting for easier use in the videoinfo.
+	  Make enums for the color range, color matrix, transfer function and the
+	  color primaries. Add these values to the video info structure in a Colorimetry
+	  structure. These values define the exact colors and are needed to perform
+	  correct colorspace conversion. Use a couple of predefined colorimetry specs
+	  because in practice only a few combinations are in use.
+	  Add view_id to the video frames to identify the view this frame represents in
+	  multiview video.
+	  Remove old gst_video_parse_caps_framerate, use the videoinfo for this.
+	  Port elements to new colorimetry info.
+	  Remove deprecated colorspace property from videotestsrc.
+
+2011-08-22 14:56:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not skip sparse streams when determining start times
+	  This fixes demuxing of streams containing only sparse streams,
+	  which would cause an infinite loop in _read_end_chain.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657062
+
+2011-08-22 14:55:59 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not ignore sparse streams' start time
+	  But do not wait for them either, if we don't have a packet for them.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657062
+
+2011-07-21 17:16:26 -0400  Monty Montgomery <cmontgom@redhat.com>
+
+	* ext/vorbis/gstvorbisenc.c:
+	  vorbisenc: Relax overly-tight jitter tolerances in gstvobisenc
+	  vorbisenc currently reacts in a rater draconian fashion if input
+	  timestamps are more than 1/2 sample off what it considers ideal. If data
+	  is 'too late' it truncates buffers, if it is 'too soon' it completely
+	  shuts down encode and restarts it.  This is causingvorbisenc to produce
+	  corrupt output when encoding data produced by sources with bugs that
+	  produce a smple or two of jitter (eg, flacdec)
+
+2011-08-22 16:21:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audio: use convert audio helper
+
+2011-08-22 16:11:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  audio: move function to convert
+
+2011-08-22 15:57:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-media-types.txt:
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: parse number of views
+	  Parse the number of views in multiview video buffers.
+
+2011-08-22 13:14:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/pango/gsttextoverlay.c
+
+2011-08-22 13:06:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/interfaces/videooverlay.c
+	  gst-libs/gst/rtp/gstrtpbuffer.c
+	  po/af.po
+	  po/az.po
+	  po/bg.po
+	  po/ca.po
+	  po/cs.po
+	  po/da.po
+	  po/de.po
+	  po/el.po
+	  po/en_GB.po
+	  po/es.po
+	  po/eu.po
+	  po/fi.po
+	  po/fr.po
+	  po/gl.po
+	  po/hu.po
+	  po/id.po
+	  po/it.po
+	  po/ja.po
+	  po/lt.po
+	  po/lv.po
+	  po/nb.po
+	  po/nl.po
+	  po/or.po
+	  po/pl.po
+	  po/pt_BR.po
+	  po/ro.po
+	  po/ru.po
+	  po/sk.po
+	  po/sl.po
+	  po/sq.po
+	  po/sr.po
+	  po/sv.po
+	  po/tr.po
+	  po/uk.po
+	  po/vi.po
+	  po/zh_CN.po
+
+2011-08-22 12:22:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstogmparse.c:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/descriptions.c:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst-libs/gst/video/video.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/decodebin.c:
+	  fourcc: remove fourcc
+	  Remove fourcc in caps.
+	  Fix pbutils descriptions.
+	  Add more video macros
+	  Fix some unit test
+
+2011-08-22 12:21:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix compilation
+
+2011-08-22 09:06:53 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: fix text buffer leak
+	  Make sure to always unref the input text buffer.
+	  Reported by bcxa.sz@gmail.com.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=657049
+
+2011-08-20 19:46:31 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/gstvideosink.h:
+	  docs: fix xref for the property
+
+2011-08-20 19:16:42 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	* gst-libs/gst/interfaces/colorbalance.c:
+	* gst-libs/gst/interfaces/mixer.c:
+	* gst-libs/gst/interfaces/navigation.c:
+	* gst-libs/gst/interfaces/streamvolume.h:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/install-plugins.h:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	* gst-libs/gst/video/gstvideosink.h:
+	  docs: handle warnings emitted by gtk-doc
+	  This is useful and in most cases someone had put arbitrary markup into the docs,
+	  misspelled xref'ed symbols, forgot to add stuff to the docs etc..
+
+2011-08-20 17:53:11 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: partially revert my last commit
+	  Somehow this was already there, but I missed that commit.
+
+2011-08-20 14:11:11 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/licenses.c:
+	  docs: add new taglicense docs and clean them up
+	  Avoid ugly docbook tags unless needed.
+
+2011-08-20 12:37:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update for new translatable string
+
+2011-08-20 12:36:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	  tag: fix distcheck issue
+	  Dist licenses dict.
+
+2011-08-20 10:49:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstchannelmix.c:
+	  audio: rename INT -> INTEGER
+	  Spell INTEGER fully instead of using the int abreviation.
+	  Remove some old functions.
+
+2011-08-19 17:41:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsa.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst/audioconvert/channelmixtest.c:
+	* gst/encoding/gstencodebin.c:
+	  more audio caps porting
+
+2011-08-19 17:05:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: port to new caps
+
+2011-08-19 17:05:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: fix playbin2 setup
+
+2011-08-19 16:49:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/Makefile.am:
+	* ext/libvisual/visual.c:
+	  visual: port some more to new audio caps
+
+2011-08-19 16:01:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: port to new audio caps
+
+2011-08-19 16:00:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	  audio: add function to build audio format
+
+2011-08-19 14:07:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-08-19 11:55:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	  audio: add more macros
+
+2011-08-19 10:06:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	* gst/volume/gstvolume.c:
+	  audiofilter: Pass a const pointer to the audio format info to ::setup()
+	  It is not meant to be changed by the subclass.
+
+2011-08-18 16:20:57 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggparse.c:
+	  ogg: do not use 32 bit modifiers to print serial numbers
+	  If ints are 64 bits, 32 bits should get promoted in varargs anyway,
+	  and we don't care about 16 bit ints.
+	  This makes the code a lot more readable, and still gets us nice
+	  hexadecimal 32 bit serialnos.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-18 19:36:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/ogg/gstoggmux.c
+	  gst/playback/gstplaysink.c
+
+2011-08-18 19:15:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasink.h:
+	* ext/alsa/gstalsasrc.c:
+	* ext/alsa/gstalsasrc.h:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/gstvorbisdeclib.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	* gst-libs/gst/audio/multichannel.c:
+	* gst-libs/gst/audio/multichannel.h:
+	* gst-libs/gst/video/video.h:
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstaudioconvert.h:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audiorate/Makefile.am:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiorate/gstaudiorate.h:
+	* gst/audioresample/Makefile.am:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	* gst/audiotestsrc/Makefile.am:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	* gst/playback/gstrawcaps.h:
+	* gst/volume/gstvolume.c:
+	  audio: rework audio caps.
+	  Rework the audio caps similar to the video caps. Remove
+	  width/depth/endianness/signed fields and replace with a simple string
+	  format and media type audio/x-raw.
+	  Create a GstAudioInfo and some helper methods to parse caps.
+	  Remove duplicate code from the ringbuffer and replace with audio info.
+	  Use AudioInfo in the base audio filter class.
+	  Port elements to new API.
+
+2011-07-27 11:05:31 +0000  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Reconfigure when pads are added later
+	  Instead of just assuming all pads are created at the same time,
+	  remember which ones are actually new (via ->pending_blocked_pads).
+	  This allows the following use-case to properly work:
+	  * Upstream starts with audio-only
+	  * Only that pad gets data, blocks and a real audio sink is created
+	  * Upstream laters adds a video stream
+	  * A new pad is requested, blocks and reconfiguration kicks in in
+	  order to add a new real video sink
+
+2011-08-18 09:37:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/README:
+	  ogg: get the operator precedence right, even if only a doc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-18 09:30:46 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: vorbis has a preroll of 2
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 19:40:08 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggstream: new convenience function to get a stream's media type
+	  This will make logging a lot clearer, both in code and in output.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 18:48:54 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  ogg: move the "always flush page" to oggstream
+	  It avoids checking for specific media types in the muxer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 18:38:39 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: use oggstream to decide which BOS packets to place first
+	  Ogg recommends video BOS packets to be first.
+	  Use the "is_video" flag in oggstream to select those, rather than
+	  check for known mime types.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 18:03:16 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggstream.h:
+	  ogg: rationalize serialno type to guint32
+	  It is a 32 bit unsigned number.
+	  Sure, the libogg API uses a long, but that's an unfortunate oversight.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 17:39:18 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: factor the header packet creation code
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-17 17:18:47 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: headers should always have granpos 0
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656775
+
+2011-08-18 09:48:16 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/audioresample/resample.c:
+	  audioresample: fix build without orc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656781
+
+2011-08-17 17:24:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: chain up to parent in fixate
+
+2011-08-17 17:22:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: properly override fixate
+
+2011-08-17 17:18:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: properly override the fixate function
+
+2011-08-17 17:18:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add some more macros
+
+2011-08-17 10:57:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	* gst-libs/gst/tag/id3v2.c:
+	  tagdemux: port to 0.11
+
+2011-08-17 10:57:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix compiler warning
+
+2011-08-17 10:47:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: fix after merge
+
+2011-08-17 10:47:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: fix after merge
+
+2011-08-16 18:01:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+	  ext/pango/gsttextoverlay.c
+	  ext/theora/gsttheoradec.c
+	  gst/adder/gstadder.c
+	  gst/adder/gstadder.h
+	  gst/audioresample/gstaudioresample.c
+	  gst/encoding/gstencodebin.c
+	  gst/playback/gstdecodebin.c
+	  gst/playback/gstdecodebin2.c
+	  tests/check/elements/decodebin2.c
+	  tests/check/elements/playbin-compressed.c
+	  win32/common/libgsttag.def
+
+2011-08-16 16:51:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/audio.h:
+	  audio: remove deprecated methods
+
+2011-08-15 01:22:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	* tests/check/libs/tag.c:
+	  tag: id3: avoid some more relocations in genre table
+
+2011-08-12 12:07:32 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/audioresample.c:
+	  audioresample: add FFT based checks
+	  Send a few simple tones through audioresample and check
+	  that the main frequency spot is the same for the input and
+	  the resampled output.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656392
+
+2011-08-15 23:41:24 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: add OSX specific hack to detect when a connection is refused
+	  Unlike linux, OSX wakes up select with POLLOUT (instead of POLLERR) when
+	  connect() is done async and the connection is refused. Therefore always check
+	  for the socket error state using getsockopt (..., SO_ERROR, ...) after a
+	  connection attempt.
+
+2011-08-15 18:39:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  xvimage: avoid caps intersection
+	  Store the video format in the XvImage format list so that we can quickly map
+	  between the two.
+
+2011-08-15 18:38:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  gststreamsynchronizer: don't abuse PREROLL flag
+	  the preroll flag is not implemented and will disappear soon.
+
+2011-08-15 12:18:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* tests/check/libs/struct_x86_64.h:
+	* tests/check/pipelines/oggmux.c:
+	  fix for _negotiated_caps() change
+
+2011-08-15 00:17:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: add new license API to docs
+
+2011-08-15 00:03:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: try pkg-config first when looking for zlib
+
+2011-08-14 20:44:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.3.0.txt:
+	* gst-libs/gst/tag/id3v2.4.0-frames.txt:
+	* gst-libs/gst/tag/id3v2.4.0-structure.txt:
+	  tag: id3v2: add specs to git for reference
+
+2011-08-14 13:32:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: avoid some relocations, make table static
+
+2011-08-14 01:47:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	* gst-libs/gst/tag/id3v2.h:
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: add debug category for ID3 tag parsing
+
+2011-07-18 18:09:53 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* configure.ac:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/id3v2.c:
+	* gst-libs/gst/tag/id3v2.h:
+	* gst-libs/gst/tag/id3v2frames.c:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	* win32/common/libgsttag.def:
+	  tag: id3v2: add id3v2 tag parsing helpers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=654388
+
+2011-02-22 15:19:00 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: return ID3TAGS_BROKEN_TAG for unsupported versions
+	  This prevents us for trying to work with a NULL taglist.
+
+2011-01-02 19:23:51 +0000  Erich Schubert <erich@debian.org>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: fix parsing of ID3v2.4 genre frames with multiple genres
+	  We'd only extract the first genre (multiple times) instead of all
+	  genres.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638535
+
+2010-09-24 15:19:15 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: Sanitize id3 frame names
+	  This is similar to what is done in qtdemux. Avoids providing invalid
+	  structure/tags names
+
+2010-03-30 01:50:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: fix parsing of unsynced frames with data length indicator
+	  Fixes bug #614158.
+
+2010-03-20 00:54:14 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  Add -Wwrite-strings to the configure flags
+	  ... and fix all warnings
+
+2009-12-13 13:19:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: prefer two letter ISO 639-1 code for extended comment
+
+2009-10-09 15:59:25 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: fixes warnings building on macosx
+	  Another round on the formating of that debug line.
+
+2009-10-09 14:44:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: cast pointer math results to glong
+
+2009-10-09 13:38:17 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: don't cast, but use the right format specified instead
+	  This correct some of the previous macos fixes.
+
+2009-10-09 11:42:36 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: fix printf warnings on macosx
+
+2009-10-07 14:03:20 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: fprintf, sprintf, sscanf need stdio.h
+
+2009-09-22 15:03:20 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: Fix compile warnings with gcc 4.0.1.
+
+2009-08-09 12:52:17 +0200  LoneStar <lone@auvtech.com>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: Try GST_*_TAG_ENCODING and locale encoding if tags are not UTF8
+	  Fixes bug #499242.
+
+2009-08-07 16:42:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: sizes in ID3 v2.3 are unlikely to be sync-safe integers
+	  In ID3 v2.3 compressed frames will have a 4-byte data length indicator
+	  after the frame header to indicate the size of the decompressed data.
+	  This integer is unlikely to be a sync-safe integer for v2.3 tags,
+	  only in v2.4 it's sync-safe.
+
+2009-08-07 16:36:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: fix typo in debug message
+
+2009-08-07 16:02:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	* gst-libs/gst/tag/id3v2.h:
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: fix parsing of unsync'ed ID3 v2.4 tags and frames
+	  Reversing the unsynchronisation seems to work slightly differently
+	  for ID3 v2.3 tags and v2.4 tags: v2.3 tags don't have syncsafe frame
+	  sizes in the frame header, so the unsynchronisation is applied to
+	  the whole frame data including all the frame headers. v2.4 frames
+	  have sync-safe sizes, however, so the unsynchronisation only needs
+	  to be applied to the actual frame data, and it seems that's what's
+	  being done as well. So we need to undo the unsynchronisation on a
+	  per-frame basis for v2.4 tags for things to work properly.
+	  Fixes extraction of coverart/images from APIC frames in ID3 v2.4
+	  tags (#588148).
+	  Add unit test for this as well.
+
+2009-04-24 01:51:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: parse unsynchronised tags properly
+	  We didn't handle unsynchronization at all up to now, which might have
+	  caused frames to not be extracted - esp. frames after an APIC picture
+	  frame. Fixes #577468.
+
+2009-04-24 01:01:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tag: id3v2: pass the right size value for size of all frames to the parser
+	  Frame data size is tag size adjusted for size of the tag header and
+	  footer, not tag size including header and footer.
+
+2008-06-04 10:42:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Use new utility functions in libgsttag to process coverart (#512333).
+	  Original commit message from CVS:
+	  * ext/flac/gstflacdec.c: (gst_flac_extract_picture_buffer):
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
+	  Use new utility functions in libgsttag to process coverart (#512333).
+
+2008-01-11 21:08:59 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Generate the image-type values correctly. Leave them out of the caps when outputting a "preview image" tag, since it ...
+	  Original commit message from CVS:
+	  * ext/flac/gstflacdec.c: (gst_flac_extract_picture_buffer):
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
+	  Generate the image-type values correctly. Leave them out of the caps
+	  when outputting a "preview image" tag, since it only makes sense
+	  to have one of those - the type is irrelevant.
+	  * sys/sunaudio/gstsunaudiomixerctrl.c:
+	  (gst_sunaudiomixer_ctrl_open):
+	  If we can, mark the mixer multiple open when we use it, in case
+	  (for some reason) the process wants to open it again elsewhere.
+
+2008-01-09 15:20:19 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  tag: id3v2: Make sure the ISO 639-X language code in ID3v2 COMM frames so we don't end up with non-UT...
+	  Original commit message from CVS:
+	  Based on patch by: Tommi Myöhänen <ext-tommi.myohanen nokia com>
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_comment_frame):
+	  Make sure the ISO 639-X language code in ID3v2 COMM frames
+	  is actually valid UTF-8 (or rather: ASCII), so we don't end
+	  up with non-UTF8 strings in tags if there's garbage in the
+	  language field. Also make sure the language code is always
+	  lower case. Fixes: #508291.
+
+2007-12-14 10:17:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Parse WOAF frames and put the result into GST_TAG_CONTACT, which is where it would end up...
+	  Original commit message from CVS:
+	  * tag: id3v2: (parse_url_link_frame):
+	  Parse WOAF frames and put the result into GST_TAG_CONTACT,
+	  which is where it would end up if the same information was
+	  put in a vorbis comment (don't think it's worth adding a
+	  new URI tag for this). Fixes #488112.
+
+2007-11-14 21:39:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: We don't want the same string multiple times in a tag list for the same tag ever, for any tag, not jus...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c:
+	  * gst-libs/gst/tag/id3v2.h:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
+	  We don't want the same string multiple times in a tag list for the
+	  same tag ever, for any tag, not just for GST_TAG_GENRE, so make sure
+	  this doesn't happen and remove special-case code for GST_TAG_GENRE.
+
+2007-10-11 17:55:29 +0000  Jason Kivlighn <jkivlighn@gmail.com>
+
+	  tag: id3v2: Extract license/copyright URIs from ID3v2 WCOP frames (Fixes #447000).
+	  Original commit message from CVS:
+	  Based on patch by: Jason Kivlighn  <jkivlighn gmail com>
+	  * gst-libs/gst/tag/id3v2frames.c:
+	  Extract license/copyright URIs from ID3v2 WCOP frames
+	  (Fixes #447000).
+	  * tests/check/elements/id3demux.c:
+	  * tests/files/Makefile.am:
+	  * tests/files/id3-447000-wcop.tag:
+	  Add simple unit test.
+
+2007-10-06 16:13:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Port ID3 tag demuxer over to the new GstTagDemux in -base (now would be a good time to test re-importi...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3demux.c:
+	  * gst-libs/gst/tag/gstid3demux.h:
+	  * gst-libs/gst/tag/id3v2.c:
+	  * gst-libs/gst/tag/id3v2.h:
+	  * gst-libs/gst/tag/id3v2frames.c:
+	  Port ID3 tag demuxer over to the new GstTagDemux in -base
+	  (now would be a good time to test re-importing your music
+	  collection).
+
+2007-03-12 13:28:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Fix parsing of ID3 v2.2.0 PIC frames. Only in version >= 2.3.0 is the image format a vari...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
+	  Fix parsing of ID3 v2.2.0 PIC frames. Only in version >= 2.3.0 is
+	  the image format a variable-length NUL-terminated string; in
+	  versions before that the image format is a fixed-length string of
+	  3 characters (see #348644 for a sample tag).
+	  Also make supplied mime type lower-case and fix up 'jpg' to 'jpeg'.
+
+2007-03-06 18:16:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Do not convert obsolete TDA/TDAT frames to TDRC frames, otherwise the four-digit number will be interp...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
+	  * gst-libs/gst/tag/id3v2.h:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_obsolete_tdat_frame):
+	  Do not convert obsolete TDA/TDAT frames to TDRC frames, otherwise
+	  the four-digit number will be interpreted as a year, whereas it is
+	  month and day in DDMM format. Instead, parse TDAT frames and fix up
+	  the date in the GST_TAG_DATE tag later if we also extracted a year.
+	  Fixes #407349.
+
+2006-11-19 13:41:53 +0000  René Stadler <mail@renestadler.de>
+
+	  tag: id3v2: Make sure that g_free always gets called on the same pointer that was returned by g_mallo...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
+	  Make sure that g_free always gets called on the same pointer that was
+	  returned by g_malloc.  Fixes #376594.
+	  Do not leak memory if decompressed size is wrong.
+	  Remove unneeded check of return value of g_malloc.
+	  Patch by: René Stadler <mail@renestadler.de>
+
+2006-11-01 13:59:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: We require a -base more recent than 0.10.9, so it's safe to use
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
+	  We require a -base more recent than 0.10.9, so it's safe to use
+	  GST_TYPE_TAG_IMAGE_TYPE unconditionally now.
+	  * ext/dv/gstdvdec.c: (gst_dvdec_sink_event):
+	  * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_sink_event):
+	  Use _newsegment_full() now that we depend on a recent enough core.
+	  * gst/wavparse/gstwavparse.c:
+	  Remove cruft that we don't need any longer now that we depend on
+	  a recent enough -base.
+
+2006-10-05 16:37:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Printf format fixes.
+	  Original commit message from CVS:
+	  * ext/cairo/gsttimeoverlay.c:
+	  (gst_cairo_time_overlay_update_font_height):
+	  * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_transform_caps):
+	  * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_parse_image_data):
+	  * ext/jpeg/gstjpegenc.c: (gst_jpegenc_chain):
+	  * ext/jpeg/gstsmokedec.c: (gst_smokedec_chain):
+	  * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_chain):
+	  * ext/libpng/gstpngdec.c: (user_endrow_callback):
+	  * gst/auparse/gstauparse.c: (gst_au_parse_parse_header):
+	  * gst/avi/gstavidemux.c: (gst_avi_demux_parse_superindex),
+	  (gst_avi_demux_parse_subindex), (gst_avi_demux_parse_stream),
+	  (gst_avi_demux_stream_data):
+	  * gst/cutter/gstcutter.c: (gst_cutter_chain):
+	  * gst/debug/efence.c: (gst_efence_buffer_alloc),
+	  (gst_fenced_buffer_copy):
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
+	  * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
+	  * gst/matroska/matroska-mux.c: (gst_matroska_mux_start):
+	  * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send),
+	  (gst_rtspsrc_handle_message):
+	  * gst/wavparse/gstwavparse.c: (gst_wavparse_stream_headers):
+	  * sys/ximage/ximageutil.c: (ximageutil_xcontext_get):
+	  Printf format fixes.
+
+2006-08-22 13:53:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: If strings in text fields are marked ISO8859-1, but contain valid UTF-8 already, then han...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_text_identification_frame),
+	  (parse_insert_string_field):
+	  If strings in text fields are marked ISO8859-1, but contain
+	  valid UTF-8 already, then handle them as UTF-8 and ignore
+	  the encoding. (#351794)
+
+2006-08-16 13:01:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Require CVS of GStreamer core and -base (for
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require CVS of GStreamer core and -base (for
+	  GST_TAG_EXTENDED_COMMENT and gst_tag_parse_extended_comment()).
+	  * ext/taglib/gstid3v2mux.cc:
+	  Write extended comment tags properly (#348762).
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_comment_frame):
+	  Extract COMM frames into extended comments, which makes it
+	  easier to properly retain the description bit of the tag
+	  and maintain this information when re-tagging (#348762).
+
+2006-07-25 16:47:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Extract frames for ID3v2 versions prior to ID3v2.3.0 properly as well, and add the version to...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c:
+	  (id3demux_add_id3v2_frame_blob_to_taglist):
+	  Extract frames for ID3v2 versions prior to ID3v2.3.0 properly as
+	  well, and add the version to the blob's buffer caps, since that
+	  information will be needed for deserialisation later on (#348644).
+
+2006-07-23 11:33:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: On second thought, it might be wiser and more efficient not to do tag registration from a streaming th...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3demux.c: (plugin_init):
+	  * gst-libs/gst/tag/id3v2.c:
+	  (id3demux_add_id3v2_frame_blob_to_taglist):
+	  * gst-libs/gst/tag/id3v2.h:
+	  On second thought, it might be wiser and more efficient
+	  not to do tag registration from a streaming thread.
+
+2006-07-23 10:56:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Put ID3v2 frames we can't parse as binary blobs into private tags, so that they are not lost ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c:
+	  (id3demux_add_id3v2_frame_blob_to_taglist),
+	  (id3demux_id3v2_frames_to_tag_list):
+	  Put ID3v2 frames we can't parse as binary blobs into private
+	  tags, so that they are not lost when retagging, at least once
+	  id3v2mux has been taught to re-inject those frames again.
+	  See bug #334375.
+
+2006-07-21 10:57:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tag: id3v2: Don't use \n in debug lines
+	  Original commit message from CVS:
+	  * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
+	  (gst_avi_demux_process_next_entry):
+	  Fix some leaks.
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
+	  Don't use \n in debug lines.
+
+2006-06-22 12:17:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Set image type from APIC frame as "image-type" field of GST_TAG_IMAGE buffer caps (#344605).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_picture_frame):
+	  Set image type from APIC frame as "image-type" field
+	  of GST_TAG_IMAGE buffer caps (#344605).
+
+2006-06-11 19:31:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Extract images from ID3v2 tags (APIC frames). Fixes #339704.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (scan_encoded_string), (parse_picture_frame):
+	  Extract images from ID3v2 tags (APIC frames). Fixes #339704.
+	  * configure.ac:
+	  Require core >= 0.10.8 (for GST_TAG_IMAGE and
+	  GST_TAG_PPEVIEW_IMAGE used in the patch above).
+
+2006-05-28 10:05:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: A track/volume number or count of 0 does not make sense, just ignore it along with negati...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
+	  A track/volume number or count of 0 does not make sense,
+	  just ignore it along with negative numbers (a tag might
+	  only contain a track count without a track number).
+
+2006-05-19 14:05:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Don't output any tag when we encounter a negative track number - the tag type is uint, so...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
+	  Don't output any tag when we encounter a negative track number - the
+	  tag type is uint, so we end up outputting huge positive numbers
+	  instead. (Fixes: #342029)
+
+2006-05-16 14:07:29 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Rework string parsing to always walk over BOM markers in UTF16 strings, using the endianness indicated by the innermost one ...
+	  Original commit message from CVS:
+	  * gst/autodetect/gstautoaudiosink.c:
+	  (gst_auto_audio_sink_find_best):
+	  * gst/autodetect/gstautovideosink.c:
+	  (gst_auto_video_sink_find_best):
+	  Make the name of the child element be based on the name of the
+	  parent, so that debug output is more useful.
+	  * gst-libs/gst/tag/id3v2frames.c: (find_utf16_bom),
+	  (parse_insert_string_field), (parse_split_strings):
+	  Rework string parsing to always walk over BOM markers in UTF16
+	  strings, using the endianness indicated by the innermost one,
+	  then trying the opposite endianness if that fails to convert
+	  to valid UTF-8. Fixes #341774
+
+2006-05-12 08:21:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Some more debug info. No need to check whether the string returned by g_convert() is real...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_insert_string_field):
+	  Some more debug info. No need to check whether the string
+	  returned by g_convert() is really UTF-8 - either it is or
+	  we get NULL returned.
+
+2006-05-10 13:51:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Fix parsing of numeric genre strings some more, by ensuring that we only try and parse st...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_genre_fields_to_taglist):
+	  Fix parsing of numeric genre strings some more, by ensuring that
+	  we only try and parse strings that a) Start with '(' and b) Consist
+	  only of digits.
+	  Also, when finding an escaping '((' sequence, bust it back to '(' by
+	  swallowing the first parenthesis
+
+2006-04-28 11:37:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Recognise and skip any byte order marker (BOM) in
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (has_utf16_bom),
+	  (parse_split_strings):
+	  Recognise and skip any byte order marker (BOM) in
+	  UTF-16 strings.
+
+2006-04-17 10:01:51 +0000  Alex Lancaster <alexlan@fedoraproject.org>
+
+	  tag: id3v2: Recognise TCO (Genre) tags in ID3v2.2
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c:
+	  Recognise TCO (Genre) tags in ID3v2.2. Patch by Alex Lancaster
+	  (Fixes #338713)
+
+2006-03-30 23:37:16 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  tag: id3v2: use of GST_DEBUG instead of DEBUG(a...) for WIN32
+	  Original commit message from CVS:
+	  * ext\jpeg\smokecodec.c:
+	  use of GST_DEBUG instead of DEBUG(a...) for WIN32
+	  * ext\speex\gstspeexenc.c: (gst_speexenc_set_header_on_caps):
+	  move first instruction after all variables declarations
+	  * gst\alpha\gstalpha.c:
+	  * gst\effectv\gstshagadelic.c:
+	  * gst\smpte\paint.c:
+	  * gst\videofilter\gstvideobalance.c:
+	  define M_PI if it's not defined (it's not defined on WIN32)
+	  * gst\cutter\gstcutter.c: (gst_cutter_chain):
+	  * gst\id3demux\id3v2frames.c: (parse_relative_volume_adjustment_two):
+	  * gst\level\gstlevel.c: (gst_level_set_property), (gst_level_transform_ip):
+	  * gst\matroska\matroska-demux.c: (gst_matroska_demux_parse_info),
+	  (gst_matroska_demux_video_caps):
+	  * gst\matroska\matroska-mux.c: (gst_matroska_mux_start), (gst_matroska_mux_finish):
+	  * gst\wavparse\gstwavparse.c: (gst_wavparse_stream_data):
+	  use gst_guint64_to_gdouble for conversions
+	  * gst\goom\filters.c: (setPixelRGB_):
+	  fix a debug which was using undefined variable
+	  * gst\level\gstlevel.c: (gst_level_set_caps), (gst_level_transform_ip):
+	  * gst\matroska\ebml-read.c: (gst_ebml_read_sint):
+	  replace LL suffix with L suffix (LL isn't supported by MSVC6.0)
+	  * win32/vs6:
+	  add vs6 projects files for most of plugins-good
+
+2006-03-22 13:00:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Don't attempt typefinding on too-short buffers that have been completely trimmed away.
+	  Original commit message from CVS:
+	  * gst/apetag/gsttagdemux.c: (gst_tag_demux_chain):
+	  * gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_chain):
+	  Don't attempt typefinding on too-short buffers that have been
+	  completely trimmed away.
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
+	  Improve the debug output
+
+2006-03-16 16:06:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: We only care about gain and peak data for the master volume.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c:
+	  (parse_relative_volume_adjustment_two):
+	  We only care about gain and peak data for the master volume.
+
+2006-03-16 13:22:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tag: id3v2: Read replay gain tags
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_id_string), (parse_unique_file_identifier),
+	  (parse_relative_volume_adjustment_two), (id3v2_tag_to_taglist):
+	  Read replay gain tags (#323721).
+
+2006-03-14 17:56:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Bump -base requirement to 0.10.5 for gst_tag_from_id3_user_tag(), used by id3demux.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump -base requirement to 0.10.5 for gst_tag_from_id3_user_tag(),
+	  used by id3demux.
+	  * gst-libs/gst/tag/gstid3demux.c: (plugin_init):
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_user_text_identification_frame),
+	  (parse_unique_file_identifier):
+	  Add support for UFID and TXXX frames and extract musicbrainz tags.
+
+2006-02-18 20:48:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Handle 0 data size in otherwise valid frames.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_genre_fields_to_taglist):
+	  Handle 0 data size in otherwise valid frames.
+	  Handle numeric strings in 2.4.0 even when not in parentheses
+
+2006-02-16 10:58:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: 3 2.3.0 used synch-safe integers for the tag size, but not for the frame size. (Fixes #331368)
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_id3v2_frames_to_tag_list):
+	  ID3 2.3.0 used synch-safe integers for the tag size, but not for the
+	  frame size. (Fixes #331368)
+
+2006-02-13 12:00:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Add more validation to ensure that a char encoding conversion produced a valid UTF-8 string.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_insert_string_field),
+	  (parse_split_strings):
+	  Add more validation to ensure that a char encoding conversion
+	  produced a valid UTF-8 string.
+
+2006-02-04 13:30:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Adjust for data length indicators when parsing (Fixes #329810)
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_split_strings):
+	  Adjust for data length indicators when parsing (Fixes #329810)
+	  Fix stupid bug parsing UTF-8 tag text.
+	  Output tag strings with multiple fields as multiple tags, so the
+	  app gets all the data.
+
+2006-02-03 13:06:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Never output a tag with a null contents string.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_text_identification_frame),
+	  (id3v2_tag_to_taglist), (id3v2_genre_string_to_taglist),
+	  (id3v2_genre_fields_to_taglist):
+	  Never output a tag with a null contents string.
+
+2006-01-30 23:13:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Someone should kick my butt. Remove ID3v1 tags from the end of the file.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_chain),
+	  (gst_id3demux_read_id3v1), (gst_id3demux_sink_activate),
+	  (gst_id3demux_send_tag_event):
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v1_tag):
+	  Someone should kick my butt. Remove ID3v1 tags from the end of the
+	  file.
+	  Improve error messages. Send the TAG message as soon as we complete
+	  typefinding, instead of waiting until we send the first buffer.
+	  Downstream tag event is still sent before the first buffer.
+
+2006-01-25 18:23:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Never trust ANY information encoded in a media file, especially when it's giving you size...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
+	  Never trust ANY information encoded in a media file, especially
+	  when it's giving you sizes. (Fixes #328452)
+
+2006-01-23 14:32:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Remove errant break statement, and fix compilation with older GCC.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3v2_tag_to_taglist):
+	  Remove errant break statement, and fix compilation with
+	  older GCC.
+
+2006-01-23 09:22:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: Rewrite parsing of text tags to handle multiple NULL terminated strings. Parse numeric genre strings a...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
+	  * gst-libs/gst/tag/id3v2.h:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_comment_frame), (parse_text_identification_frame),
+	  (id3v2_tag_to_taglist), (id3v2_are_digits),
+	  (id3v2_genre_string_to_taglist), (id3v2_genre_fields_to_taglist),
+	  (parse_split_strings), (free_tag_strings):
+	  Rewrite parsing of text tags to handle multiple NULL terminated
+	  strings. Parse numeric genre strings and ID3v2 type
+	  "(3)(6)Alternative" style genre strings.
+	  Parse dates that are only YYYY or YYYY-mm format.
+
+2006-01-15 20:21:48 +0000  Sergey Scobich <sergey.scobich@gmail.com>
+
+	  tag: id3v2: Fix compilation of id3demux when zlib is not present.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame):
+	  Fix compilation of id3demux when zlib is not present.
+	  (Fixes #326602; patch by: Sergey Scobich)
+
+2006-01-06 11:46:53 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tag: id3v2: Add gst_element_no_more_pads() for proper decodebin behaviour.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3demux.c: (gst_id3demux_add_srcpad):
+	  Add gst_element_no_more_pads() for proper decodebin behaviour.
+	  * gst-libs/gst/tag/id3v2frames.c: (parse_comment_frame),
+	  (parse_text_identification_frame), (parse_split_strings):
+	  Failure to decode some tags is not a GST_ERROR() but a
+	  GST_WARNING()
+	  When iterating over a chunk of text, check that we haven't gone too
+	  far.
+
+2005-12-28 18:55:32 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: If a broken tag has 0 bytes payload, at least still skip the 10 byte header
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/id3v2.c: (id3demux_read_id3v2_tag):
+	  If a broken tag has 0 bytes payload, at least still skip
+	  the 10 byte header
+
+2005-12-18 15:14:44 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tag: id3v2: all new LGPL id3 demuxer, can use zlib for compressed frames
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Check for optional dependency on zlib for id3demux
+	  * gst-libs/gst/tag/Makefile.am:
+	  * gst-libs/gst/tag/gstid3demux.c: (gst_gst_id3demux_get_type),
+	  (gst_id3demux_base_init), (gst_id3demux_class_init),
+	  (gst_id3demux_reset), (gst_id3demux_init), (gst_id3demux_dispose),
+	  (gst_id3demux_add_srcpad), (gst_id3demux_remove_srcpad),
+	  (gst_id3demux_trim_buffer), (gst_id3demux_chain),
+	  (gst_id3demux_set_property), (gst_id3demux_get_property),
+	  (id3demux_get_upstream_size), (gst_id3demux_srcpad_event),
+	  (gst_id3demux_read_id3v1), (gst_id3demux_read_id3v2),
+	  (gst_id3demux_sink_activate), (gst_id3demux_src_activate_pull),
+	  (gst_id3demux_src_checkgetrange), (gst_id3demux_read_range),
+	  (gst_id3demux_src_getrange), (gst_id3demux_change_state),
+	  (gst_id3demux_pad_query), (gst_id3demux_get_query_types),
+	  (simple_find_peek), (simple_find_suggest),
+	  (gst_id3demux_do_typefind), (gst_id3demux_send_tag_event),
+	  (plugin_init):
+	  * gst-libs/gst/tag/gstid3demux.h:
+	  * gst-libs/gst/tag/id3v2.c: (read_synch_uint),
+	  (id3demux_read_id3v1_tag), (id3demux_read_id3v2_tag),
+	  (id3demux_id3v2_frame_hdr_size), (convert_fid_to_v240),
+	  (id3demux_id3v2_frames_to_tag_list):
+	  * gst-libs/gst/tag/id3v2.h:
+	  * gst-libs/gst/tag/id3v2.4.0-frames.txt:
+	  * gst-libs/gst/tag/id3v2.4.0-structure.txt:
+	  * gst-libs/gst/tag/id3v2frames.c: (id3demux_id3v2_parse_frame),
+	  (parse_comment_frame), (parse_text_identification_frame),
+	  (id3v2_tag_to_taglist), (parse_split_strings):
+	  All new LGPL id3 demuxer. Can use zlib for compressed frames,
+	  otherwise it discards them. Works on my test files.
+	  * gst/wavparse/gstwavparse.c: (gst_wavparse_loop):
+	  Don't send EOS to a non-existing srcpad
+	  The debug category can be static
+
+2011-08-11 18:50:08 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: fix quality setting being ignored by the resampler state
+	  https://bugzilla.gnome.org/show_bug.cgi?id=636562
+
+2011-08-11 15:54:15 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* configure.ac:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/resample_sse.h:
+	* gst/audioresample/speex_resampler_double.c:
+	* gst/audioresample/speex_resampler_float.c:
+	  audioresample: use SSE/SSE2 when possible
+	  Compile in the code on i386 and x86_64, and use ORC to determine
+	  when the runtime platform can run the code.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=636562
+
+2011-08-11 19:23:42 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/audioresample/resample_sse.h:
+	  audioresample: fix SSE2 building with double precision
+	  The full double implementation was missing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=636562
+
+2011-08-11 12:12:07 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Check for utf8 before trying to convert
+	  If the string is already on utf8, there is no need to
+	  try to convert it, because it is useless and it might garble
+	  the string.
+
+2011-08-10 13:16:13 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: tag: exif: Add tests for 'non-trivial' chars
+	  Adds two new cases to check that characters are properly
+	  converted to ascii when writen to exif and parsed correctly
+	  back to utf8 when read.
+
+2011-08-09 16:02:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Exif strings should be ascii
+	  Use g_convert to turn all strings into extended ascii before writing
+	  to the exif buffer and converting back from ascii to utf8 when
+	  reading them.
+
+2011-08-10 15:57:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgsttag.def:
+	  win32: update libgsttag.def for new API
+
+2011-08-10 15:21:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	  tag: don't build helper programs that generate/update data by default
+	  No point building these by default. Also, these generated files
+	  should go into the srcdir, not the builddir in this case, since
+	  they're version controlled.
+
+2011-08-10 15:20:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/mklicensestables.c:
+	  tag: fix stray printf in mklicensestables
+	  Don't dump debug output to stdout.
+
+2011-08-10 15:06:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/licenses.c:
+	  tag: fix compilation of new licenses code with GLib versions < 2.28
+	  Add local g_variant_lookup_value() fallback for now when compiling
+	  against older GLib versions.
+
+2011-08-10 14:57:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/licenses.c:
+	* gst-libs/gst/tag/tag.h:
+	  tag: add GType for GstTagLicenseFlags
+	  API: gst_tag_license_flags_get_type()
+
+2011-08-09 16:41:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: fix compiler warning in release mode
+	  Fix compiler warning caused by g_assert_not_reached() being skipped
+	  because releases are compiled with -DG_DISABLE_ASSERT.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656264
+
+2011-08-10 10:49:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: fix runtime warnings when doing position query
+	  Add missing 'break'.
+
+2011-07-15 13:19:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/tag.c:
+	* tests/files/Makefile.am:
+	* tests/files/license-uris:
+	  tag: add unit test for new license API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646868
+
+2011-07-15 13:14:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/mklicensestables.c:
+	  tag: add mklicensestables utility
+	  Add (uninstalled) tool to create licenses-table.dat from liblicense's
+	  RDF files. It's not very pretty and makes loats of assumptions about
+	  the input, but should work. If things change, we can fix it then.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646868
+
+2011-07-15 13:07:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/license-translations.dict:
+	* gst-libs/gst/tag/licenses-tables.dat:
+	* gst-libs/gst/tag/licenses.c:
+	* gst-libs/gst/tag/tag.h:
+	  tag: add convenience API to handle creative commons licenses
+	  Based on liblicense's RDF files.
+	  API: GstTagLicenseFlags
+	  API: gst_tag_get_licenses()
+	  API: gst_tag_get_license_flags()
+	  API: gst_tag_get_license_nick()
+	  API: gst_tag_get_license_title()
+	  API: gst_tag_get_license_version()
+	  API: gst_tag_get_license_description()
+	  API: gst_tag_get_license_jurisdiction()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646868
+
+2011-08-08 10:00:40 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: bump probability if all frames we found are similar
+	  Similar meaning same layer, same bitrate, and same number of channels
+	  This fixes misdetection of (some MP3 files that have zero padding
+	  between the ID3 tag and the MP3 stream) as H.264 video.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656018
+
+2011-08-09 16:39:31 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst-libs/gst/riff/riff-read.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/gstvideofilter.c:
+	* gst-libs/gst/video/video.h:
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcp.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/videoscale/gstvideoscale.c:
+	* tests/icles/stress-videooverlay.c:
+	  Fix debug statements
+	  Fixes build on MacOSX
+	  Signed-off-by: Edward Hervey <edward.hervey@collabora.co.uk>
+
+2011-08-08 14:41:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/videooverlay.c:
+	* gst-libs/gst/interfaces/videooverlay.h:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/stress-videooverlay.c:
+	  videooverlay: add convenience API to check if a message is a prepare-window-handle message
+	  API: gst_is_video_overlay_prepare_window_handle_message()
+
+2011-08-08 14:16:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/Makefile.am:
+	* tests/icles/Makefile.am:
+	  tests: fix libs order in some makefiles
+	  Local libs should come first.
+
+2011-08-08 13:55:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/gstlibscpp.cc:
+	* tests/check/libs/libsabi.c:
+	* tests/examples/overlay/.gitignore:
+	* tests/examples/overlay/Makefile.am:
+	* tests/examples/overlay/gtk-videooverlay.c:
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/examples/overlay/qt-videooverlay.cpp:
+	* tests/examples/overlay/qt-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-videooverlay.cpp:
+	* tests/examples/overlay/qtgv-videooverlay.h:
+	* tests/examples/overlay/qtgv-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-xoverlay.h:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/stress-videooverlay.c:
+	* tests/icles/stress-xoverlay.c:
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-videooverlay.c:
+	* tests/icles/test-xoverlay.c:
+	  tests: update for GstXOverlay => GstVideoOverlay
+
+2011-08-08 10:44:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  ximagesink, xvimagesink: update for GstXOverlay -> GstVideoOverlay
+
+2011-08-07 16:55:25 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* android/interfaces.mk:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* docs/libs/gst-plugins-base-libs.types:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/interfaces/videooverlay.c:
+	* gst-libs/gst/interfaces/videooverlay.h:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	* gst-plugins-base.spec.in:
+	  interfaces: rename GstXOverlay interface to GstVideoOverlay
+	  And remove deprecated methods, and fix up some cruft.
+
+2011-08-07 18:36:04 +0200  Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+	* gst-plugins-base.spec.in:
+	  gst-plugins-base.spec.in: update for 0.11
+
+2011-08-05 16:53:47 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  gstvorbistag: map ENCODER Vorbis comment to application-name
+	  What GStreamer calls encoder ("encoder used to encode this stream") is
+	  stored in the vendor string in Vorbis/Theora/Kate and possibly others.
+	  The Vorbis comment packet used in those streams uses ENCODER as the name
+	  of the encoding program, which GStreamer calls application-name.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656034
+
+2011-08-05 11:32:09 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: fix sample depth typo
+	  https://bugzilla.gnome.org/show_bug.cgi?id=656022
+
+2011-08-05 13:05:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	  volume: Update disted ORC files
+
+2011-08-05 12:48:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagepool.c:
+	  xvimagepool: cleanups
+
+2011-08-04 18:08:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: call parent alloc function
+	  Call the parent alloc function to allocate buffers.
+
+2011-08-04 15:18:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: remove useless alignment
+
+2011-08-04 15:18:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: improve debug
+
+2011-08-03 14:14:55 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Set queues to silent=true
+	  As encodebin doesn't connect to the queue signals, it can set
+	  queues to silent mode to make queue not emit them.
+	  Check https://bugzilla.gnome.org/show_bug.cgi?id=621299 for
+	  more info on queue's silent property.
+
+2011-08-03 13:40:19 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Fix typo on installing properties
+	  queue buffers and bytes properties have ids swapped, fix it.
+
+2011-08-03 12:08:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/multichannel-enumtypes.c:
+	* win32/common/multichannel-enumtypes.h:
+	  back to development
+
+=== release 0.11.0 ===
+
+2011-08-03 10:55:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* gst-plugins-base.doap:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/_stdint.h:
+	* win32/common/audio-enumtypes.c:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  Release 0.11.0
+
+2011-08-03 10:18:29 +0200  Jonathan Liu <net147@gmail.com>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: Fix crashes with 0-byte vorbis packets
+	  Fixes bug #655574.
+
+2011-07-28 14:43:53 +0200  Jens Georg <jensg@openismus.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  pbutils: Add SP levels 4a, 5 and 6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=655503
+
+2011-07-26 16:10:17 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: segfault on 0-byte ogg_packet in _chain_reverse
+
+2011-08-02 12:53:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* po/LINGUAS:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  update po
+
+2011-08-02 12:24:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	  update ORC dist files
+
+2011-08-02 12:24:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videoconvert/gstvideoconvertorc-dist.c:
+	* gst/videoconvert/gstvideoconvertorc-dist.h:
+	  videoconvert: update ORC dist files
+
+2011-08-02 12:22:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  def: add new symbols
+
+2011-08-01 19:04:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/ximage/ximagesink.c:
+	  ximage: add support for alignment bufferpool option
+
+2011-08-01 18:36:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	* sys/xvimage/xvimagesink.c:
+	  xv: apply cropping on padded images
+	  Store the dimensions of the unpadded image in the metadata and use that info to
+	  display the valid region of the image.
+
+2011-08-01 17:10:10 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	  xvimage: add suport for video alignment
+	  Add support for the VideoAlignment option in the bufferpool. The extra
+	  configuration options can be used to request special padding and alignment
+	  requirements for the video buffers.
+
+2011-08-01 16:50:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: ensure sign in scale function
+
+2011-08-01 16:48:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstvideopool.c:
+	* gst-libs/gst/video/gstvideopool.h:
+	  videopool: add implementation
+	  Rename very long structure name to GstVideoAlignment
+	  Add the implementation of the video alignment config setter and getters.
+
+2011-07-29 17:15:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  base: update for new bufferpool API
+
+2011-07-29 17:14:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstvideopool.h:
+	  videopool: add stuff related to bufferpools
+	  Add bufferpool options and extra config parameters.
+
+2011-07-29 12:22:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: relax bufferpool checks
+	  Check if the metadata belongs to us instead of checking the current bufferpool.
+	  The bufferpool can change at any time when upstream wants to renegotiate.
+
+2011-07-27 16:55:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add macro to access flags
+
+2011-07-29 10:23:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* win32/common/libgsttag.def:
+	  Add new GstTagMux base class
+	  Hook up new tag muxing base class to build system.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=555437
+	  API: GstTagMux
+
+2011-07-29 10:22:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/gsttagmux.c:
+	* gst-libs/gst/tag/gsttagmux.h:
+	  docs: add documentation for GstTagMux
+
+2011-07-28 20:38:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	  tagmux: require subclass to install sink pad template
+	  Require the subclass to install both source and sink pad
+	  templates. Also, print some warnings if the subclass doesn't
+	  do that.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=555437
+
+2011-07-15 20:57:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagmux.h:
+	  tagmux: const-ify GstTagList argument of render vfuncs
+
+2011-07-15 20:39:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	* gst-libs/gst/tag/gsttagmux.h:
+	  tagmux: fix up private base class header so it can be made public
+	  Move private bits into a private struct, add some padding.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=555437
+
+2011-07-28 23:31:03 +0100  Michael Smith <msmith@songbirdnest.com>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	* gst-libs/gst/tag/gsttagmux.h:
+	  tagmux: add support for end tags
+	  Originally "id3tag: Add new id3 tagging plugin, supports v1, v2.3,
+	  and v2.4." from gst-plugins-bad. This is an artificial bridge commit.
+
+2010-06-06 18:00:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	  ext: Don't use GST_DEBUG_FUNCPTR for GObject vfuncs
+
+2007-11-20 11:41:13 +0000  Julien Moutte <julien@moutte.net>
+
+	  Fix build on Mac OS X 10.5
+	  Original commit message from CVS:
+	  2007-11-20  Julien MOUTTE  <julien@moutte.net>
+	  * gst-libs/gst/tag/gsttagmux.c: (gst_tag_lib_mux_render_tag),
+	  (gst_tag_lib_mux_adjust_event_offsets):
+	  * gst/qtdemux/qtdemux.c: (qtdemux_parse_theora_extension):
+	  * sys/osxaudio/Makefile.am:
+	  * sys/osxvideo/cocoawindow.h:
+	  * sys/osxvideo/cocoawindow.m: Fix build on Mac OS X 10.5
+
+2007-09-13 15:04:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Update my mail address.
+	  Original commit message from CVS:
+	  * ext/taglib/gstapev2mux.cc:
+	  * ext/taglib/gstapev2mux.h:
+	  * gst-libs/gst/tag/gsttagmux.c:
+	  * tests/check/elements/apev2mux.c:
+	  Update my mail address.
+
+2006-05-30 14:35:18 +0000  Sebastian Dröge <mail@slomosnail.de>
+
+	  Add apev2mux element (#343122).
+	  Original commit message from CVS:
+	  Patch by: Sebastian Dröge  <mail at slomosnail de >
+	  * docs/plugins/gst-plugins-good-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-good-plugins-sections.txt:
+	  * ext/taglib/Makefile.am:
+	  * ext/taglib/gstapev2mux.cc:
+	  * ext/taglib/gstapev2mux.h:
+	  * ext/taglib/gstid3v2mux.cc:
+	  * gst-libs/gst/tag/gsttagmux.c: (plugin_init):
+	  * gst-libs/gst/tag/gsttagmux.h:
+	  Add apev2mux element (#343122).
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/apev2mux.c:
+	  (test_taglib_apev2mux_create_tags),
+	  (test_taglib_apev2mux_check_tags), (fill_mp3_buffer), (got_buffer),
+	  (demux_pad_added), (test_taglib_apev2mux_check_output_buffer),
+	  (test_taglib_apev2mux_with_tags), (GST_START_TEST),
+	  (apev2mux_suite), (main):
+	  Add unit test for apev2mux element.
+
+2006-05-18 12:46:08 +0000  James Doc Livingston <doclivingston@gmail.com>
+
+	  gst-libs/gst/tag/gsttagmux.c: Merge event tags and tag setter tags correctly (#339918). Also, don't leak taglist in case...
+	  Original commit message from CVS:
+	  Patch by: James "Doc" Livingston  <doclivingston gmail com>
+	  * gst-libs/gst/tag/gsttagmux.c: (gst_tag_lib_mux_render_tag):
+	  Merge event tags and tag setter tags correctly (#339918). Also,
+	  don't leak taglist in case of an error.
+
+2006-05-01 11:46:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  docs/plugins/Makefile.am: also check .cc files for gtk-doc markup
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  also check .cc files for gtk-doc markup
+	  * configure.ac:
+	  * docs/plugins/gst-plugins-good-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-good-plugins-sections.txt:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/id3v2mux.c: (id3v2mux_suite), (main):
+	  * ext/Makefile.am:
+	  * ext/taglib/Makefile.am:
+	  * ext/taglib/gstid3v2mux.h:
+	  * gst-libs/gst/tag/gsttagmux.c:
+	  * gst-libs/gst/tag/gsttagmux.h:
+	  move taglib-based id3v2muxer to -good.  Fixes #336110.
+
+2006-04-30 16:16:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	  small cleanups
+	  Original commit message from CVS:
+	  small cleanups
+
+2006-04-29 18:46:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/gsttaglib.cc: Post an error message on the bus in the (extremely unlikely) case of an error.
+	  Original commit message from CVS:
+	  * ext/taglib/gsttaglib.cc:
+	  Post an error message on the bus in the (extremely unlikely)
+	  case of an error.
+
+2006-04-29 18:18:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/: Split the actual ID3v2 tag rendering code into its own subclass.
+	  Original commit message from CVS:
+	  * ext/taglib/Makefile.am:
+	  * ext/taglib/gstid3v2mux.cc:
+	  * ext/taglib/gstid3v2mux.h:
+	  * ext/taglib/gsttaglib.cc:
+	  * ext/taglib/gsttaglib.h:
+	  Split the actual ID3v2 tag rendering code into
+	  its own subclass.
+
+2006-04-28 15:33:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	* gst-libs/gst/tag/gsttagmux.h:
+	  pedantic cleanups
+	  Original commit message from CVS:
+	  pedantic cleanups
+
+2006-04-01 16:50:49 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	  add taglib checks and docs
+	  Original commit message from CVS:
+	  add taglib checks and docs
+
+2006-03-26 19:56:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/gsttaglib.*: Fix newsegment event handling a bit. We need to cache the first newsegment event, because we ...
+	  Original commit message from CVS:
+	  * ext/taglib/gsttaglib.cc:
+	  * ext/taglib/gsttaglib.h:
+	  Fix newsegment event handling a bit. We need to
+	  cache the first newsegment event, because we can't
+	  adjust offsets yet when we get it, as we don't
+	  know the size of the tag yet for sure at that point.
+	  Also do some minor cleaning up here and there and add
+	  some debug statements.
+
+2006-03-25 21:57:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/gsttaglib.cc: We do not want to proxy the caps on the sink pad; our source pad should have application/x-i...
+	  Original commit message from CVS:
+	  * ext/taglib/gsttaglib.cc:
+	  We do not want to proxy the caps on the sink pad; our
+	  source pad should have application/x-id3 caps; also,
+	  don't use already-freed strings in debug messages;
+	  finally, adjust buffer offsets on buffers sent out.
+
+2006-03-20 08:59:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/gsttaglib.h: Fix left-over gst_my_filter_get_type.
+	  Original commit message from CVS:
+	  * ext/taglib/gsttaglib.h:
+	  Fix left-over gst_my_filter_get_type.
+
+2006-03-13 17:22:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/gsttaglib.cc: Add gtk-doc blurb (unused for the time being); match registered plugin name to the filename ...
+	  Original commit message from CVS:
+	  * ext/taglib/gsttaglib.cc:
+	  Add gtk-doc blurb (unused for the time being); match registered
+	  plugin name to the filename of the plugin (taglibmux => taglib)
+
+2006-03-12 15:02:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/taglib/: Add support for writing MusicBrainz IDs.
+	  Original commit message from CVS:
+	  * ext/taglib/Makefile.am:
+	  * ext/taglib/gsttaglib.cc:
+	  * ext/taglib/gsttaglib.h:
+	  Add support for writing MusicBrainz IDs.
+
+2006-03-11 10:58:08 +0000  Alex Lancaster <alexlan@fedoraproject.org>
+
+	  ext/taglib/gsttaglib.cc: and add support for TCOP (copyright)
+	  Original commit message from CVS:
+	  2006-03-11  Christophe Fergeau  <teuf@gnome.org>
+	  Patch by: Alex Lancaster
+	  * ext/taglib/gsttaglib.cc: fix writing of TPOS tags (album number),
+	  and add support for TCOP (copyright)
+
+2006-03-09 17:44:17 +0000  Christophe Fergeau <teuf@gnome.org>
+
+	  new id3v2 muxer based on TagLib
+	  Original commit message from CVS:
+	  2006-03-09  Christophe Fergeau  <teuf@gnome.org>
+	  reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+	  * configure.ac:
+	  * ext/Makefile.am:
+	  * ext/taglib/Makefile.am:
+	  * ext/taglib/gsttaglib.cc:
+	  * ext/taglib/gsttaglib.h: new id3v2 muxer based on TagLib
+
+2011-07-28 15:28:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videotestsrc/Makefile.am:
+	  videotestsrc: use local libgstvideo here as well
+
+2011-07-28 11:21:26 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: rename flags names
+	  Rename flags names from native-audio/-video to
+	  no-audio/video-conversion to be more explicit on what it does
+
+2011-07-28 14:18:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videoconvert/Makefile.am:
+	  videoconvert: link to local libgstvideo-0.11
+
+2011-07-28 13:39:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	  video: make GST_VIDEO_FORMATS_ALL define more readable
+	  We don't need all those quotes, strings will be parsed as strings
+	  regardless, and g-i doesn't seem to like all those escaped quotes.
+
+2011-07-20 18:10:57 +0200  Stefan Sauer <ensonic@google.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: fix latency calculation for live elements
+	  Max_latency was computed on already adjusted min_latency. Introduce a new
+	  variable for clarity. Spotted by Blaise Gassend.
+	  Fixes #644284
+
+2011-07-28 11:44:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: fix max latency calculation
+	  ... to allow infinite max, as also claimed by comment.
+
+2011-06-01 10:21:39 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: drop samples that are too late
+	  ... rather than having all of them rendered at 0 or subsequently aligned,
+	  likely inevitably leading to repeated resyncing.
+
+2011-07-27 01:18:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/gio.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	* tests/examples/snapshot/snapshot.c:
+	* tests/icles/playback/test3.c:
+	* tests/icles/playback/test7.c:
+	* tests/icles/playbin-text.c:
+	* tests/icles/position-formats.c:
+	  tests: update for query API changes
+
+2011-07-27 01:16:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst/adder/gstadder.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  ext,gst: update for query API changes
+
+2011-07-27 01:16:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  gst-libs: update for query API changes
+
+2011-07-26 13:51:31 +0200  Stefan Sauer <ensonic@google.com>
+
+	* tests/check/pipelines/basetime.c:
+	  basetime: fix failing test
+	  Always use audiotestsrc as it seems to have been the intention according to the
+	  comment header. The test does not work with live-audiosources.
+
+2011-07-26 14:10:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: let old pool drain
+	  Let the old pool drain without deactivating it, some elements might still be
+	  using it.
+
+2011-07-26 13:17:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: use new setup_allocation vmethod
+
+2011-07-26 12:47:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	  giosink: use new query vmethod
+
+2011-07-26 12:42:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: chain up to parent_class correctly
+
+2011-07-25 19:51:24 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/playbin2-compressed.c:
+	  tests: rename the test suite to match the binary
+	  This unbreaks determining the name for make elements/playbin2-compressed.check
+	  from the test output.
+
+2011-07-25 19:39:55 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: rework pending event handling
+	  Use atomic ops on pending flags. Rename the segment_pending to
+	  new_segment_pending. Set new_segment_pending not when we received seek, but
+	  when we received the first upstream new_segment.
+
+2011-07-25 19:11:59 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: more debug logging for events
+
+2011-07-26 12:37:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: use new basesink query vmethod
+
+2011-07-26 12:33:56 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Allow all EOS to go through if we don't have a next group
+	  Only drop them if the current group isn't drained .. AND there is a
+	  next group to switch to.
+	  Should Fix #655268
+
+2011-07-25 18:37:15 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Avoid resetting playsink when not needed
+	  When we don't have specific {audio|video|text}-sink properties, don't
+	  set them on playsink when reconfiguring.
+	  If we do that, we end up setting the previous configured sink to
+	  GST_STATE_NULL resulting in any potentially pending push being returned
+	  with GST_FLOW_WRONG_STATE which will cause the upstream elements to
+	  silently stop.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=655279
+
+2011-07-25 18:35:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add pack and unpack functions
+	  Add pack and unpack function to handle complex formats in the future.
+
+2011-07-25 18:08:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: add more info in the format structure
+	  Add a field to describe how many bits are used to pack items.
+	  Specify the shift for each component.
+	  Add some more flags to better describe the format.
+
+2011-07-25 12:04:02 +0200  Stefan Sauer <ensonic@google.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: improve the example
+	  Mentioned that this is not ment to be used with subtitles and suggest alternatives.
+
+2011-07-25 10:41:04 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Properly handle multi-stream chains
+	  When we have a multi-stream (i.e. audio and video) input and the demuxer
+	  adds/removes pads for a new stream (common in a mpeg-ts stream when the
+	  program stream mapping is updated), the algorithm for EOS handling was
+	  previously wrong (it would only drop the EOS of the *last* pad but would
+	  let the EOS on the other pads go through).
+	  The logic has only been changed a tiny bit for EOS handling resulting in:
+	  * If there is no next group, let the EOS go through
+	  * If there is a next group, but not all pads are drained in the active
+	  group, drop the EOS event
+	  * If there is a next group and all pads are drained, then the ghostpads
+	  will be removed and the EOS event will be dropped automatically.
+
+2011-07-23 14:21:27 +0200  Stefan Sauer <ensonic@google.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: add example for feeding from stdin
+
+2011-07-23 13:46:31 +0200  Stefan Sauer <ensonic@google.com>
+
+	* tests/check/pipelines/basetime.c:
+	  test: print actual timestamp on failure
+
+2011-07-20 13:46:31 +0200  Stefan Sauer <ensonic@google.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: keep untimestamped textbuffer until next one
+	  Instead of discarding untimestamped text-buffers immeditely after rendering,
+	  keep them until we receive the next text buffer.
+	  Fixes #654959
+
+2011-07-22 21:19:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: fix for event handler change
+
+2011-07-19 18:31:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  the
+
+2011-07-19 18:21:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: make sure our buffer is big enough
+	  Make sure we allocate a buffer that is big enough.
+
+2011-07-18 18:46:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  x11: call parent set_config
+	  Call the parent set_config method to make it aware of the current config so that
+	  its default methods can do preallocation.
+
+2011-07-18 16:48:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: improve allocation parameters
+	  Set the min-buffers to 2 because our base class will hold on to 1 buffer for the
+	  last-buffer property.
+
+2011-07-15 16:46:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/decodebin2.c:
+	  tests: add decodebin2 test for parser autoplugging
+	  Make sure decodebin2 doesn't try to plug the same parser twice
+	  in a row.
+
+2011-07-06 19:40:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/decodebin.c:
+	* tests/files/Makefile.am:
+	* tests/files/test.mp3:
+	  tests: add decodebin1 test for parser autoplugging
+	  Make sure decodebin1 doesn't try to plug the same parser twice
+	  in a row (so we can change all parsers to accept parsed input as
+	  well without breaking applications still using the old decodebin1
+	  element).
+
+2011-07-07 15:02:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin.c:
+	  decodebin: don't plug the same parser multiple times in a row
+	  This allows us to make parsers accept both parsed and unparsed input
+	  without decodebin plugging them in a loop until things blow up, ie.
+	  without affecting applications that still use the old playbin or the
+	  old decodebin.
+	  (Making parsers accept parsed input is useful for later when we want
+	  to use parsers to convert the stream-format into something the decoder
+	  can handle. It's also much more convenient for application authors
+	  who can plug parsers unconditionally in transcoding pipelines, for
+	  example).
+
+2011-07-15 16:34:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  X11: also check the bufferpool
+	  Don't just check the availability of the metadata but also if the buffer is
+	  really from our bufferpool.
+
+2011-07-15 12:32:25 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: decodebin2 is dead, long live decodebin
+
+2011-07-14 13:56:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* win32/common/libgstpbutils.def:
+	  docs: add Since marker to gtk-doc chunk for new codec utils API
+	  And add new API to .def file.
+	  API: gst_codec_utils_h264_get_level_idc()
+
+2011-03-07 17:55:48 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	  codec-utils: Add method to convert H.264 text level in a level_idc
+
+2011-07-11 18:21:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	  metavideo: fix for API change
+
+2011-07-10 21:47:12 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: init video info to some sensible defaults
+
+2011-07-10 13:49:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-07-10 13:39:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add macros for par and fps
+
+2011-07-09 18:33:38 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: check for EOS on both current and best pad
+	  Oops, need both.  Fixes #654270.
+
+2011-07-09 18:24:26 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: check for EOS on current pad, not best
+	  Fixes #654270.
+
+2011-07-09 11:59:42 +0200  Piotr Fusik <fox@scene.pl>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: fixed detection of audio/x-sap
+	  Fixes: #654295.
+	  Signed-off-by: David Schleef <ds@schleef.org>
+
+2011-07-06 17:03:08 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  rtcpbuffer: provide a WRITE map with maximum available size
+	  ... which allows adding additional packets and may be needed to counteract
+	  the shrink that implicitly occurred during a map/unmap cycle when adding
+	  a previous packet.
+
+2011-07-08 20:02:25 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: parse caps event and payload caps
+	  Which makes it actually output stuff.
+
+2011-07-07 23:57:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/adder.c:
+	* tests/check/libs/video.c:
+	  tests: make adder test and libgstvideo test compile, disable some tests
+	  Don't fully work yet though
+
+2011-07-07 21:24:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Android.mk:
+	* android/ffmpegcolorspace.mk:
+	* android/videoconvert.mk:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstclockoverlay.c:
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-plugins-base.spec.in:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gstencodebin.c:
+	* sys/ximage/ximagesink.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/videoscale.c:
+	* tests/check/pipelines/oggmux.c:
+	* tests/examples/dynamic/addstream.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/snapshot/snapshot.c:
+	* tests/icles/output-selector-test.c:
+	* tests/icles/playback/test.c:
+	* tests/icles/test-box.c:
+	* tests/icles/test-scale.c:
+	* tests/icles/test-textoverlay.c:
+	* tools/gst-launch-ext.1.in:
+	* tools/gst-visualise-m.m:
+	* win32/MANIFEST:
+	* win32/vs6/gst_plugins_base.dsw:
+	* win32/vs6/libgstffmpegcolorspace.dsp:
+	* win32/vs6/libgsttag.dsp:
+	* win32/vs7/gst-plugins-base.sln:
+	* win32/vs7/libgstffmpegcolorspace.vcproj:
+	* win32/vs8/gst-plugins-base.sln:
+	* win32/vs8/libgstffmpegcolorspace.vcproj:
+	  ffmpegcolorspace -> videoconvert
+
+2011-07-07 21:04:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/old/Makefile.am:
+	* tests/old/examples/Makefile.am:
+	* tests/old/examples/capsfilter/Makefile.am:
+	* tests/old/examples/capsfilter/capsfilter1.c:
+	* tests/old/examples/gob/Makefile.am:
+	* tests/old/examples/gob/gst-identity2.gob:
+	* tests/old/examples/indexing/.gitignore:
+	* tests/old/examples/indexing/Makefile.am:
+	* tests/old/examples/indexing/indexmpeg.c:
+	* tests/old/examples/seek/.gitignore:
+	* tests/old/examples/seek/Makefile.am:
+	* tests/old/examples/seek/cdparanoia.c:
+	* tests/old/examples/seek/cdplayer.c:
+	* tests/old/examples/seek/chained.c:
+	* tests/old/examples/stats/Makefile.am:
+	* tests/old/examples/stats/mp2ogg.c:
+	* tests/old/examples/switch/.gitignore:
+	* tests/old/examples/switch/Makefile.am:
+	* tests/old/examples/switch/switcher.c:
+	* tests/old/testsuite/alsa/.gitignore:
+	* tests/old/testsuite/alsa/Makefile.am:
+	* tests/old/testsuite/alsa/formats.c:
+	* tests/old/testsuite/alsa/sinesrc.c:
+	* tests/old/testsuite/alsa/sinesrc.h:
+	* tests/old/testsuite/alsa/srcstate.c:
+	* tests/old/testsuite/alsa/state.c:
+	* tests/old/testsuite/embed/Makefile.am:
+	* tests/old/testsuite/embed/embed.c:
+	* tests/old/testsuite/gst-lint:
+	  tests: remove tests from ancient times
+	  They're just noise.
+
+2011-07-07 11:10:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/tag/gstxmptag.c
+	  gst/encoding/gststreamsplitter.c
+
+2011-07-07 10:28:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: update orc dist files
+
+2011-07-07 10:20:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/plugin.c:
+	  audioconvert: don't use .init function
+	  Don't use the .init function but compile all functions when needed instead of
+	  when the plugin is registered.
+
+2011-07-06 12:54:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/netbuffer.c:
+	* tests/check/libs/tag.c:
+	  tests: update netbuffer and tag tests for gst_buffer_take_memory() API change
+
+2011-07-06 12:51:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/pbutils.c:
+	  tests: update libs/pbutils test for GstMessage API changes
+	  Can't access msg->structure directly any more.
+
+2011-07-06 12:47:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/mixer.c:
+	  tests: fix libs/mixer test for GstImplementsInterface removal
+	  Not sure if we want to keep the GstMixer API in its current form
+	  though..
+
+2011-07-06 12:42:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/theoraenc.c:
+	  tests: update theoraenc test for new pad probe API
+	  Compiles now, but fails.
+
+2011-07-06 12:38:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: update typefindfunctions test for latest API changes
+
+2011-07-06 12:36:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/audio.c:
+	  tests: update libs/audio test for latest API changes
+
+2011-07-06 10:27:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: update exports for new libgstvideo API
+
+2011-07-06 10:27:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/Makefile.am:
+	  docs: add -DGST_USE_UNSTABLE_API also to GTKDOC_CFLAGS
+	  To avoid warnings
+
+2011-07-05 16:58:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: update docs
+
+2011-07-05 10:07:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  Add -DGST_USE_UNSTABLE_API to the compiler flags to avoid warnings
+
+2011-07-05 10:04:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: remove some unused code that caused a compiler warning
+	  The video format is set up in the sink pad's setcaps() function.
+
+2011-07-04 18:08:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add macro to get frame size
+
+2011-07-04 16:27:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: add some more macros
+	  Add macros to get the plane and offset of a component.
+
+2011-07-04 10:19:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* gst/videoconvert/videoconvert.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/videotestsrc.c:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  video: More video helper library improvements
+	  Make a new GstVideoFormatinfo structure that contains the specific information
+	  related to a format such as the number of planes, components, subsampling,
+	  pixel stride etc. The result is that we are now able to introduce the concept of
+	  components again in the API.
+	  Use tables to specify the formats and its properties.
+	  Use macros to get information about the video format description.
+	  Move code to set strides, offsets and size into one function.
+	  Remove methods that are not handled with the structures.
+	  Add methods to retrieve pointers and strides to the components in the video.
+
+2011-06-30 20:33:36 +0200  Luis de Bethencourt <luis@debethencourt.com>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: fix compiler warning
+	  cspace and cspace2 may run uninitialized.
+
+2011-06-29 13:12:49 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Add flags to disable conversion elements
+	  Add a flags property and two flags to allow one to disable the
+	  conversion elements within encodebin. Doing so insists that the
+	  uncompressed input to encodebin for the appropriate stream type is
+	  sufficient to meet the caps requirements of the encoders, muxers and
+	  encodebin target.
+	  This is mostly beneficial to bypass slow caps negotiations in the
+	  conversion elements.
+
+2011-06-29 09:59:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Remove extra chars from end of xmp packet
+	  Windows picture viewer is unhappy with extra trailing chars at the
+	  end of the xmppacket footer. So remove them as they aren't needed.
+
+2011-06-29 11:30:51 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/encoding/gststreamsplitter.c:
+	  streamsplitter: Fix getcaps src pad caps merge
+	  Caps returned from gst_pad_peer_get_caps_reffed () may not be writable.
+	  If they are not is should cause an assertion in gst_caps_merge (),
+	  however, sometimes assertions are disabled in binary builds of -base and
+	  it's safer to just be sure the caps are writable. Also, check that the
+	  reffed caps pointer is not NULL.
+
+2011-06-28 19:03:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: only unset initialized GValue
+
+2011-06-15 13:51:31 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: NULL check in degas_type_find
+	  The length check isn't sufficient, an source might
+	  report the correct length, but then still fail to
+	  read the requested number of bytes for some reason.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=652642
+
+2011-06-26 23:17:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	  videoconvert: fix unused-but-set-variable compiler warning
+
+2011-06-26 23:16:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	* gst/volume/gstvolume.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  gst, sys: remove GstImplementsInterface usage
+
+2011-06-26 22:58:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/alsa/gstalsamixer.h:
+	* ext/alsa/gstalsamixerelement.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: don't use GstImplementsInterface
+
+2011-06-26 21:46:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.c:
+	* gst-libs/gst/interfaces/colorbalance.h:
+	* gst-libs/gst/interfaces/mixer.c:
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/interfaces/tuner.c:
+	* gst-libs/gst/interfaces/tuner.h:
+	* gst-libs/gst/interfaces/videoorientation.c:
+	* gst-libs/gst/interfaces/videoorientation.h:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	  gst-libs: remove GstImplementsInterface usage
+	  Will need to add replacement API for some of these.
+
+2011-06-26 21:27:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	  Merge remote-tracking branch 'origin/master' into 0.11
+
+2011-06-26 01:06:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/design-decodebin.txt:
+	  docs: minor addition to decodebin2 design doc
+
+2011-06-26 01:06:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/navigation.c:
+	  tests: the navigation interface isn't GstImplementsInterface-wrapped
+
+2011-06-26 00:49:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/streamvolume.h:
+	  interfaces: GstStreamVolume isn't wrapped by GstImplementsInterface
+	  This interface depends on properties and isn't per-instance.
+
+2011-06-26 00:40:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspextension.h:
+	  rtsp: GstRTSPExtension isn't wrapped by GstImplementsInterface
+	  Fix copy'n'paste error in headers, GstRTSPExtension isn't
+	  something that's per-instance.
+
+2011-06-26 00:36:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/xmpwriter.h:
+	  tag: GstXmpWriter doesn't use the GstImplementsInterface
+	  No need for per-instance checking of interface implementation here,
+	  presumably just a copy'n'paste issue.
+
+2011-06-11 19:03:57 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: set names on audio and video profiles
+	  https://bugzilla.gnome.org/show_bug.cgi?id=652342
+
+2011-06-23 11:28:04 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From 69b981f to 605cd9a
+
+2011-06-23 18:02:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	  theoradec: use cropping metadata
+
+2011-06-23 16:31:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: let upstream know we support cropping
+
+2011-06-23 12:55:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  x11: add image cropping
+	  Use the cropping metadata to crop the image.
+	  Remove deprecated display-region property to set a clipping rectangle.
+
+2011-06-23 09:55:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	  meta: add some docs
+
+2011-06-23 09:30:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	  meta: add video crop metadata
+
+2011-06-22 19:35:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: handle unknown formats
+
+2011-06-22 16:38:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgio.c:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  fix for uri changes
+
+2011-06-22 15:38:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  x11: use frame copy functions
+
+2011-06-22 15:25:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: add video copy function
+	  Add a function to copy a video frame, taking care of source and destination
+	  strides.
+
+2011-06-22 12:57:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: wait for the spinbutton widget
+	  Wait for the spinbutton widget before trying to update it when the volume
+	  changed callback is called.
+
+2011-06-22 11:45:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: fix for allocator name change
+
+2011-06-21 18:17:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	  audio: clean up headers
+
+2011-06-21 18:13:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosink.h:
+	  audio: clean up audiosink headers
+
+2011-06-21 18:08:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	  audio: clean up ringbuffer header
+
+2011-06-21 17:57:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+	  docs/plugins/inspect/plugin-gnomevfs.xml
+
+2011-06-21 17:33:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/Makefile.am:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: port to video helpers
+	  Port videotestsrc to use the video helper functions to parse caps and handle
+	  video frames.
+	  Enable GstMetaVideo to make us handle strided video.
+
+2011-06-21 17:31:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: use gint to make parsing easier
+	  Use gint for with/height etc to make it easier to pass the variables to various
+	  caps and structure parsing functions.
+
+2011-06-21 12:52:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: small cleanups
+
+2011-06-20 17:49:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: activate Video meta
+	  Configure the allocator with GstMetaVideo because we can handle that using the
+	  GstVideoFrame helpers.
+
+2011-06-20 17:36:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: delay pool activation
+	  don't activate the pool we return in the ALLOCATION query because upstream might
+	  still want to configure it
+
+2011-06-20 17:34:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	  videoconvert: use new allocation setup
+	  Add setup_allocation to configure video metadata in the negotiated bufferpool.
+
+2011-06-20 15:43:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* configure.ac:
+	  configure.ac: bump required GLib to 2.26
+
+2011-06-20 13:30:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: enable video metadata in the bufferpool
+	  Enable the video metadata in the bufferpool.
+
+2011-06-20 13:28:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  x11: handle new bufferpool metadata api
+	  Provide a method to list the supported metadata apis.
+	  Activate the video metadata on buffers when a downstream element configured the
+	  bufferpool to support that api.
+
+2011-06-20 11:25:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* gst/videoconvert/videoconvert.c:
+	* gst/videoscale/gstvideoscale.c:
+	  video: remove intermediate Plane structure
+	  Remove the GstVideoPlane structure and move the fields directly into the
+	  GstVideoInfo structure. This makes things a little easier to read and also makes
+	  it more likely that we can pass the stride array to external libraries.
+
+2011-06-18 13:32:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	  Bump git version after unplanned 0.10.35 release
+	  Merge branch '0.10.35'
+	  Conflicts:
+	  configure.ac
+	  docs/plugins/inspect/plugin-adder.xml
+	  docs/plugins/inspect/plugin-alsa.xml
+	  docs/plugins/inspect/plugin-app.xml
+	  docs/plugins/inspect/plugin-audioconvert.xml
+	  docs/plugins/inspect/plugin-audiorate.xml
+	  docs/plugins/inspect/plugin-audioresample.xml
+	  docs/plugins/inspect/plugin-audiotestsrc.xml
+	  docs/plugins/inspect/plugin-cdparanoia.xml
+	  docs/plugins/inspect/plugin-decodebin.xml
+	  docs/plugins/inspect/plugin-encoding.xml
+	  docs/plugins/inspect/plugin-ffmpegcolorspace.xml
+	  docs/plugins/inspect/plugin-gdp.xml
+	  docs/plugins/inspect/plugin-gio.xml
+	  docs/plugins/inspect/plugin-gnomevfs.xml
+	  docs/plugins/inspect/plugin-libvisual.xml
+	  docs/plugins/inspect/plugin-ogg.xml
+	  docs/plugins/inspect/plugin-pango.xml
+	  docs/plugins/inspect/plugin-playback.xml
+	  docs/plugins/inspect/plugin-subparse.xml
+	  docs/plugins/inspect/plugin-tcp.xml
+	  docs/plugins/inspect/plugin-theora.xml
+	  docs/plugins/inspect/plugin-typefindfunctions.xml
+	  docs/plugins/inspect/plugin-uridecodebin.xml
+	  docs/plugins/inspect/plugin-videorate.xml
+	  docs/plugins/inspect/plugin-videoscale.xml
+	  docs/plugins/inspect/plugin-videotestsrc.xml
+	  docs/plugins/inspect/plugin-volume.xml
+	  docs/plugins/inspect/plugin-vorbis.xml
+	  docs/plugins/inspect/plugin-ximagesink.xml
+	  docs/plugins/inspect/plugin-xvimagesink.xml
+	  gst-libs/gst/audio/Makefile.am
+	  gst/subparse/gstsubparse.c
+	  win32/common/_stdint.h
+	  win32/common/config.h
+
+2011-06-18 11:16:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Allow GError* argument to be NULL
+	  This is how other methods taking GError* arguments behave.
+	  Fixes #652838
+
+2011-06-17 17:54:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  x11: use GstVideoInfo to parse caps
+	  Use GstVideoInfo to keep track of the configured format.
+	  Add GstMetaVideo to buffers, disabled by default for now until we can have it
+	  enabled with a property on the bufferpool configuration.
+
+2011-06-17 17:44:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	  metavideo: small fixes
+	  Set the buffer as a field in the metadata so that we can use it to map the
+	  buffer data.
+	  Fix wrong assert.
+
+2011-06-17 17:27:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	  x11: make function static
+	  Don't export buffer creation function, we need to use the bufferpool
+	  now.
+
+2011-06-17 16:47:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: use metadata to set up strides
+	  Use the GstMetaVideo when we can to map the buffers and set up the strides.
+
+2011-06-17 15:48:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  tests/examples/Makefile.am
+
+2011-06-17 15:31:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraenc.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* gst/videoconvert/videoconvert.c:
+	* gst/videoconvert/videoconvert.h:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  -base: port to GstVideoFrame API
+
+2011-06-17 15:29:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add GstVideoFrame helper structure
+	  The videoframe structure can be used to easily parse the contents of video
+	  buffers.
+
+2011-06-17 09:21:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/gstvideofilter.c:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* gst/videoconvert/videoconvert.c:
+	  video: port to new API
+	  Add support for palette again.
+	  Rewrite setup code for videoconvert using the new video methods.
+
+2011-06-16 19:35:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: rework part 2
+	  Update docs.
+	  Add method to get number of components.
+	  Implement method to calculate defaults from format and dimensions.
+	  Improve caps parsing.
+	  Implement GstVideoInfo to caps conversion.
+
+2011-06-16 16:27:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.h:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: rework part 1
+	  Add GstVideoFlags similar to the flags on the metadata. The idea is to replace
+	  the metadata flags with the GstVideoFlags.
+	  Move VideoPlane to video.h, it contains the information for a plane.
+	  Add GstVideoInfo structure that holds the current configuration of a video
+	  format.
+	  Add methods to parse caps into GstVideoInfo.
+
+2011-06-16 13:41:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/ffmpegcolorspace.c:
+	* tests/check/elements/libvisual.c:
+	* tests/check/elements/playbin-compressed.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/textoverlay.c:
+	* tests/check/elements/videorate.c:
+	* tests/check/elements/videoscale.c:
+	* tests/check/elements/videotestsrc.c:
+	* tests/check/libs/pbutils.c:
+	* tests/check/libs/profile.c:
+	* tests/check/libs/video.c:
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	* tests/check/pipelines/simple-launch-lines.c:
+	* tests/check/pipelines/theoraenc.c:
+	  test: port some more tests
+
+2011-06-16 12:48:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstrawcaps.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	  -base: port elements to new video caps
+
+2011-06-16 12:43:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: add methods to parse X11 visuals
+	  Add method to convert X11 visual description to GstVideoFormat
+
+2011-06-15 16:16:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: update video caps
+
+2011-06-16 14:23:25 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/POTFILES.in:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Remove deleted playbin/decodebin files from POTFILES.in
+
+=== release 0.10.35 ===
+
+2011-06-15 19:29:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	  Release 0.10.35
+	  This is an ad-hoc release that is almost identical to 0.10.34:
+	  * work around GLib atomic ops API change
+	  * don't use G_CONST_RETURN in public headers
+	  * subparse: typefinding fixes for subtitles in non-UTF8 charsets
+
+2011-06-15 18:08:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* gst/playback/gstplay-enum.h:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  some more ffmpegcolorspace to videoconvert changes
+
+2011-06-15 18:01:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/Makefile.am:
+	* gst/ffmpegcolorspace/Makefile.am:
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/dsputil.c:
+	* gst/ffmpegcolorspace/dsputil.h:
+	* gst/ffmpegcolorspace/ffmpegcolorspace.vcproj:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	* gst/ffmpegcolorspace/mem.c:
+	* gst/ffmpegcolorspace/utils.c:
+	* gst/playback/gstplaysink.c:
+	  ffmpegcolorspace: remove plugin
+
+2011-06-15 17:49:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	* gst/colorspace/Makefile.am:
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/colorspace.vcproj:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	* gst/colorspace/gstcolorspaceorc-dist.h:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	* gst/videoconvert/Makefile.am:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* gst/videoconvert/gstvideoconvertorc-dist.c:
+	* gst/videoconvert/gstvideoconvertorc-dist.h:
+	* gst/videoconvert/gstvideoconvertorc.orc:
+	* gst/videoconvert/videoconvert.c:
+	* gst/videoconvert/videoconvert.h:
+	* gst/videoconvert/videoconvert.vcproj:
+	  videoconvert: renamed from colorspace
+
+2011-06-15 16:52:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspace.c:
+	  colorspace: fix caps negotiation
+
+2011-06-15 16:28:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspace.c:
+	  colorspace: port to 0.11
+
+2011-06-15 16:28:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	  colorspace: add to build
+
+2011-04-30 19:46:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	  [MOVED FROM BAD 68/68] Update orc-generated disted C backup code to orc 0.4.14
+
+2011-04-28 00:00:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	  [MOVED FROM BAD 67/68] 0.10.21.3 pre-release
+
+2011-04-17 01:09:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	* gst/colorspace/gstcolorspaceorc-dist.h:
+	  [MOVED FROM BAD 66/68] ext, gst: update disted orc backup files
+
+2011-04-15 00:09:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 65/68] Fix some unused-but-set-variable warnings with gcc 4.6
+
+2011-04-11 00:36:35 -0400  Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+	* gst/colorspace/Makefile.am:
+	  [MOVED FROM BAD 64/68] android: make it ready for androgenizer
+	  Remove the android/ top dir
+	  Fixe the Makefile.am to be androgenized
+	  To build gstreamer for android we are now using androgenizer which generates the needed Android.mk files.
+	  Androgenizer can be found here: http://git.collabora.co.uk/?p=user/derek/androgenizer.git
+
+2011-02-25 19:59:05 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 63/68] colorspace: set dithering enum directly
+
+2011-02-25 19:57:47 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 62/68] colorspace: Add support for r210
+
+2011-02-20 23:01:30 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 61/68] colorspace: Fix YUV->RGB matrixing
+
+2011-02-20 22:43:56 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	  [MOVED FROM BAD 60/68] colorspace: Add dithering
+	  Dithering only happens when a 16-bit-per-channel format is
+	  involved.
+
+2011-02-20 14:14:27 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 59/68] colorspace: fix a few formats
+
+2011-02-19 13:12:41 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 58/68] colorspace: Add 16-bit-per-channel handling
+
+2011-02-19 13:13:13 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 57/68] colorspace: Fix memleak
+
+2011-02-15 18:12:02 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 56/68] colorspace: Fix memory leak
+
+2011-01-02 16:13:56 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 55/68] colorspace: Disable matrixing on big-endian
+	  It's broken until someone writes better Orc code.  Fixes #631232.
+
+2010-11-21 23:11:19 -0800  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 54/68] colorspace: remove incorrect check
+
+2010-11-05 10:56:51 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	* gst/colorspace/gstcolorspaceorc-dist.h:
+	  [MOVED FROM BAD 53/68] colorspace: Update generated ORC sources
+
+2010-11-04 14:18:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 52/68] colorspace: Inverse -base version check logic to actually make sense
+
+2010-11-03 15:37:48 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 51/68] colorspace: Add support for IYU1
+
+2010-11-03 15:12:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 50/68] colorspace: First version of YUV9 and YVU9 implementation
+
+2010-11-03 09:20:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 49/68] colorspace: Use GST_CHECK_PLUGINS_BASE_VERSION() instead of other hacks
+
+2010-11-02 16:54:59 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 48/68] colorspace: fix build with current git of gst-plugins-base
+	  ifdef tests don't work so well if we define them in the code
+	  above in case they aren't defined.
+
+2010-11-02 16:05:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	  [MOVED FROM BAD 47/68] colorspace: Add support for 8 bit paletted RGB
+	  This needs the 8 bit paletted support from -base
+	  which will be committed after release. Without this
+	  the 8 bit parts are disabled.
+
+2010-11-01 15:53:52 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	* gst/colorspace/gstcolorspaceorc-dist.h:
+	  [MOVED FROM BAD 46/68] cog, colorspace: update orc backup functions for latest changes
+	  Should fix build on systems without the latest orc.
+
+2010-10-31 23:46:27 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 45/68] colorspace: Add support for RGB15 and BGR15
+
+2010-10-31 23:44:20 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 44/68] colorspace: Add support for RGB16 and BGR16
+
+2010-10-31 23:25:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 43/68] colorspace: Add support for Y16
+
+2010-10-31 23:25:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 42/68] colorspace: Fix Y800 ORC getline implementation
+
+2010-10-31 23:07:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 41/68] colorspace: Add support for A420
+
+2010-10-31 23:00:07 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 40/68] colorspace: Add support for Y41B
+
+2010-10-31 22:39:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	  [MOVED FROM BAD 39/68] colorspace: Add support for SDTV/HDTV YUV conversions
+
+2010-10-31 22:21:35 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 38/68] colorspace: Add comment for the A420 getline/putline table row
+
+2010-10-31 20:40:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	  [MOVED FROM BAD 37/68] colorspace: Add const to the source arrays and the getline/putline table
+
+2010-10-31 19:42:30 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 36/68] colorspace: Make fast-path transform table const
+
+2010-10-31 19:39:33 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 35/68] colorspace: Only do the I420->YUY2 conversion once per scanline in the fast path
+
+2010-09-21 18:13:37 -0700  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/colorspace.c:
+	  [MOVED FROM BAD 34/68] colorspace: quiet a GST_ERROR
+
+2010-09-15 21:47:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/colorspace/gstcolorspaceorc-dist.c:
+	* gst/colorspace/gstcolorspaceorc-dist.h:
+	  [MOVED FROM BAD 33/68] colorspace: add orc-dist files
+	  Should fix build without orc or too old orc.
+
+2010-09-13 18:49:43 -0700  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/Makefile.am:
+	* gst/colorspace/colorspace.c:
+	* gst/colorspace/colorspace.h:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	  [MOVED FROM BAD 32/68] colorspace: Add conversion code
+	  Work in progress.  Colorspace handles most format conversion using
+	  3-stage getline/matrix/putline process using an AYUV or ARGB
+	  intermediate, with most functions handled by Orc.  There is also
+	  a table of single-pass conversions, all handled by Orc.  The plan
+	  is to add optional stages for various chroma upsampling/downsampling
+	  algorithms, dithering, and float/int16 intermediates, and then have
+	  Orc create multi-stage functions at runtime.
+
+2010-09-13 12:48:50 -0700  David Schleef <ds@schleef.org>
+
+	* gst/colorspace/Makefile.am:
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	* gst/colorspace/gstcolorspaceorc.orc:
+	* gst/colorspace/yuv2rgb.c:
+	* gst/colorspace/yuv2rgb.h:
+	  [MOVED FROM BAD 31/68] colorspace: Revive element
+	  Now based on Orc.
+
+2010-03-18 17:30:26 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 30/68] gst_element_class_set_details => gst_element_class_set_details_simple
+
+2008-11-04 12:42:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  [MOVED FROM BAD 29/68] Don't install static libs for plugins. Fixes #550851 for -bad.
+	  Original commit message from CVS:
+	  * ext/alsaspdif/Makefile.am:
+	  * ext/amrwb/Makefile.am:
+	  * ext/apexsink/Makefile.am:
+	  * ext/arts/Makefile.am:
+	  * ext/artsd/Makefile.am:
+	  * ext/audiofile/Makefile.am:
+	  * ext/audioresample/Makefile.am:
+	  * ext/bz2/Makefile.am:
+	  * ext/cdaudio/Makefile.am:
+	  * ext/celt/Makefile.am:
+	  * ext/dc1394/Makefile.am:
+	  * ext/dirac/Makefile.am:
+	  * ext/directfb/Makefile.am:
+	  * ext/divx/Makefile.am:
+	  * ext/dts/Makefile.am:
+	  * ext/faac/Makefile.am:
+	  * ext/faad/Makefile.am:
+	  * ext/gsm/Makefile.am:
+	  * ext/hermes/Makefile.am:
+	  * ext/ivorbis/Makefile.am:
+	  * ext/jack/Makefile.am:
+	  * ext/jp2k/Makefile.am:
+	  * ext/ladspa/Makefile.am:
+	  * ext/lcs/Makefile.am:
+	  * ext/libfame/Makefile.am:
+	  * ext/libmms/Makefile.am:
+	  * ext/metadata/Makefile.am:
+	  * ext/mpeg2enc/Makefile.am:
+	  * ext/mplex/Makefile.am:
+	  * ext/musepack/Makefile.am:
+	  * ext/musicbrainz/Makefile.am:
+	  * ext/mythtv/Makefile.am:
+	  * ext/nas/Makefile.am:
+	  * ext/neon/Makefile.am:
+	  * ext/ofa/Makefile.am:
+	  * ext/polyp/Makefile.am:
+	  * ext/resindvd/Makefile.am:
+	  * ext/sdl/Makefile.am:
+	  * ext/shout/Makefile.am:
+	  * ext/snapshot/Makefile.am:
+	  * ext/sndfile/Makefile.am:
+	  * ext/soundtouch/Makefile.am:
+	  * ext/spc/Makefile.am:
+	  * ext/swfdec/Makefile.am:
+	  * ext/tarkin/Makefile.am:
+	  * ext/theora/Makefile.am:
+	  * ext/timidity/Makefile.am:
+	  * ext/twolame/Makefile.am:
+	  * ext/x264/Makefile.am:
+	  * ext/xine/Makefile.am:
+	  * ext/xvid/Makefile.am:
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/dshow/Makefile.am:
+	  * gst/aiffparse/Makefile.am:
+	  * gst/app/Makefile.am:
+	  * gst/audiobuffer/Makefile.am:
+	  * gst/bayer/Makefile.am:
+	  * gst/cdxaparse/Makefile.am:
+	  * gst/chart/Makefile.am:
+	  * gst/colorspace/Makefile.am:
+	  * gst/dccp/Makefile.am:
+	  * gst/deinterlace/Makefile.am:
+	  * gst/deinterlace2/Makefile.am:
+	  * gst/dvdspu/Makefile.am:
+	  * gst/festival/Makefile.am:
+	  * gst/filter/Makefile.am:
+	  * gst/flacparse/Makefile.am:
+	  * gst/flv/Makefile.am:
+	  * gst/games/Makefile.am:
+	  * gst/h264parse/Makefile.am:
+	  * gst/librfb/Makefile.am:
+	  * gst/mixmatrix/Makefile.am:
+	  * gst/modplug/Makefile.am:
+	  * gst/mpeg1sys/Makefile.am:
+	  * gst/mpeg4videoparse/Makefile.am:
+	  * gst/mpegdemux/Makefile.am:
+	  * gst/mpegtsmux/Makefile.am:
+	  * gst/mpegvideoparse/Makefile.am:
+	  * gst/mve/Makefile.am:
+	  * gst/nsf/Makefile.am:
+	  * gst/nuvdemux/Makefile.am:
+	  * gst/overlay/Makefile.am:
+	  * gst/passthrough/Makefile.am:
+	  * gst/pcapparse/Makefile.am:
+	  * gst/playondemand/Makefile.am:
+	  * gst/rawparse/Makefile.am:
+	  * gst/real/Makefile.am:
+	  * gst/rtjpeg/Makefile.am:
+	  * gst/rtpmanager/Makefile.am:
+	  * gst/scaletempo/Makefile.am:
+	  * gst/sdp/Makefile.am:
+	  * gst/selector/Makefile.am:
+	  * gst/smooth/Makefile.am:
+	  * gst/smoothwave/Makefile.am:
+	  * gst/speed/Makefile.am:
+	  * gst/speexresample/Makefile.am:
+	  * gst/stereo/Makefile.am:
+	  * gst/subenc/Makefile.am:
+	  * gst/tta/Makefile.am:
+	  * gst/vbidec/Makefile.am:
+	  * gst/videodrop/Makefile.am:
+	  * gst/videosignal/Makefile.am:
+	  * gst/virtualdub/Makefile.am:
+	  * gst/vmnc/Makefile.am:
+	  * gst/y4m/Makefile.am:
+	  * sys/acmenc/Makefile.am:
+	  * sys/cdrom/Makefile.am:
+	  * sys/dshowdecwrapper/Makefile.am:
+	  * sys/dshowsrcwrapper/Makefile.am:
+	  * sys/dvb/Makefile.am:
+	  * sys/dxr3/Makefile.am:
+	  * sys/fbdev/Makefile.am:
+	  * sys/oss4/Makefile.am:
+	  * sys/qcam/Makefile.am:
+	  * sys/qtwrapper/Makefile.am:
+	  * sys/vcd/Makefile.am:
+	  * sys/wininet/Makefile.am:
+	  * win32/common/config.h:
+	  Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2007-06-22 10:46:33 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  [MOVED FROM BAD 28/68] Fix leaks.
+	  Original commit message from CVS:
+	  * ext/amrwb/gstamrwbdec.c: (gst_amrwbdec_init):
+	  * ext/amrwb/gstamrwbenc.c: (gst_amrwbenc_init):
+	  * ext/amrwb/gstamrwbparse.c: (gst_amrwbparse_init):
+	  * ext/audioresample/gstaudioresample.c:
+	  * ext/bz2/gstbz2dec.c: (gst_bz2dec_init):
+	  * ext/bz2/gstbz2enc.c: (gst_bz2enc_init):
+	  * ext/divx/gstdivxdec.c: (gst_divxdec_init):
+	  * ext/divx/gstdivxenc.c: (gst_divxenc_init):
+	  * ext/faac/gstfaac.c: (gst_faac_init):
+	  * ext/gsm/gstgsmdec.c: (gst_gsmdec_init):
+	  * ext/gsm/gstgsmenc.c: (gst_gsmenc_init):
+	  * ext/hermes/gsthermescolorspace.c: (gst_hermes_colorspace_init):
+	  * ext/lcs/gstcolorspace.c: (gst_colorspace_init):
+	  * ext/libfame/gstlibfame.c: (gst_fameenc_init):
+	  * ext/snapshot/gstsnapshot.c: (gst_snapshot_init):
+	  * ext/spc/gstspc.c: (gst_spc_dec_init):
+	  * ext/swfdec/gstswfdec.c: (gst_swfdec_init):
+	  * ext/xvid/gstxvidenc.c: (gst_xvidenc_init):
+	  * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_init):
+	  * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_init):
+	  * gst/chart/gstchart.c: (gst_chart_init):
+	  * gst/colorspace/gstcolorspace.c: (gst_colorspace_init):
+	  * gst/festival/gstfestival.c: (gst_festival_init):
+	  * gst/freeze/gstfreeze.c: (gst_freeze_init):
+	  * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_request_new_pad):
+	  * gst/mpeg1sys/gstmpeg1systemencode.c: (gst_system_encode_init):
+	  * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_init):
+	  * gst/nsf/gstnsf.c: (gst_nsfdec_init):
+	  * gst/overlay/gstoverlay.c: (gst_overlay_init):
+	  * gst/passthrough/gstpassthrough.c: (passthrough_init):
+	  * gst/playondemand/gstplayondemand.c: (play_on_demand_init):
+	  * gst/smooth/gstsmooth.c: (gst_smooth_init):
+	  * gst/smoothwave/gstsmoothwave.c: (gst_smoothwave_init):
+	  * gst/speed/gstspeed.c: (speed_init):
+	  * gst/vbidec/gstvbidec.c: (gst_vbidec_init):
+	  * gst/videodrop/gstvideodrop.c: (gst_videodrop_init):
+	  * sys/dxr3/dxr3spusink.c: (dxr3spusink_init):
+	  * sys/dxr3/dxr3videosink.c: (dxr3videosink_init):
+	  * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_init):
+	  Fix leaks.
+
+2006-06-01 22:00:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  [MOVED FROM BAD 27/68] Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+	  Original commit message from CVS:
+	  * ext/alsaspdif/alsaspdifsink.h:
+	  * ext/amrwb/gstamrwbdec.h:
+	  * ext/amrwb/gstamrwbenc.h:
+	  * ext/amrwb/gstamrwbparse.h:
+	  * ext/arts/gst_arts.h:
+	  * ext/artsd/gstartsdsink.h:
+	  * ext/audiofile/gstafparse.h:
+	  * ext/audiofile/gstafsink.h:
+	  * ext/audiofile/gstafsrc.h:
+	  * ext/audioresample/gstaudioresample.h:
+	  * ext/bz2/gstbz2dec.h:
+	  * ext/bz2/gstbz2enc.h:
+	  * ext/dirac/gstdiracdec.h:
+	  * ext/directfb/dfbvideosink.h:
+	  * ext/divx/gstdivxdec.h:
+	  * ext/divx/gstdivxenc.h:
+	  * ext/dts/gstdtsdec.h:
+	  * ext/faac/gstfaac.h:
+	  * ext/gsm/gstgsmdec.h:
+	  * ext/gsm/gstgsmenc.h:
+	  * ext/ivorbis/vorbisenc.h:
+	  * ext/libfame/gstlibfame.h:
+	  * ext/nas/nassink.h:
+	  * ext/neon/gstneonhttpsrc.h:
+	  * ext/polyp/polypsink.h:
+	  * ext/sdl/sdlaudiosink.h:
+	  * ext/sdl/sdlvideosink.h:
+	  * ext/shout/gstshout.h:
+	  * ext/snapshot/gstsnapshot.h:
+	  * ext/sndfile/gstsf.h:
+	  * ext/swfdec/gstswfdec.h:
+	  * ext/tarkin/gsttarkindec.h:
+	  * ext/tarkin/gsttarkinenc.h:
+	  * ext/theora/theoradec.h:
+	  * ext/wavpack/gstwavpackdec.h:
+	  * ext/wavpack/gstwavpackparse.h:
+	  * ext/xine/gstxine.h:
+	  * ext/xvid/gstxviddec.h:
+	  * ext/xvid/gstxvidenc.h:
+	  * gst/cdxaparse/gstcdxaparse.h:
+	  * gst/cdxaparse/gstcdxastrip.h:
+	  * gst/colorspace/gstcolorspace.h:
+	  * gst/festival/gstfestival.h:
+	  * gst/freeze/gstfreeze.h:
+	  * gst/gdp/gstgdpdepay.h:
+	  * gst/gdp/gstgdppay.h:
+	  * gst/modplug/gstmodplug.h:
+	  * gst/mpeg1sys/gstmpeg1systemencode.h:
+	  * gst/mpeg1videoparse/gstmp1videoparse.h:
+	  * gst/mpeg2sub/gstmpeg2subt.h:
+	  * gst/mpegaudioparse/gstmpegaudioparse.h:
+	  * gst/multifilesink/gstmultifilesink.h:
+	  * gst/overlay/gstoverlay.h:
+	  * gst/playondemand/gstplayondemand.h:
+	  * gst/qtdemux/qtdemux.h:
+	  * gst/rtjpeg/gstrtjpegdec.h:
+	  * gst/rtjpeg/gstrtjpegenc.h:
+	  * gst/smooth/gstsmooth.h:
+	  * gst/smoothwave/gstsmoothwave.h:
+	  * gst/spectrum/gstspectrum.h:
+	  * gst/speed/gstspeed.h:
+	  * gst/stereo/gststereo.h:
+	  * gst/switch/gstswitch.h:
+	  * gst/tta/gstttadec.h:
+	  * gst/tta/gstttaparse.h:
+	  * gst/videodrop/gstvideodrop.h:
+	  * gst/xingheader/gstxingmux.h:
+	  * sys/directdraw/gstdirectdrawsink.h:
+	  * sys/directsound/gstdirectsoundsink.h:
+	  * sys/dxr3/dxr3audiosink.h:
+	  * sys/dxr3/dxr3spusink.h:
+	  * sys/dxr3/dxr3videosink.h:
+	  * sys/qcam/gstqcamsrc.h:
+	  * sys/vcd/vcdsrc.h:
+	  Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-04-25 21:56:38 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  [MOVED FROM BAD 26/68] Define GstElementDetails as const and also static (when defined as global)
+	  Original commit message from CVS:
+	  * ext/amrwb/gstamrwbdec.c:
+	  * ext/amrwb/gstamrwbenc.c:
+	  * ext/amrwb/gstamrwbparse.c:
+	  * ext/arts/gst_arts.c:
+	  * ext/artsd/gstartsdsink.c:
+	  * ext/audiofile/gstafparse.c:
+	  * ext/audiofile/gstafsink.c:
+	  * ext/audiofile/gstafsrc.c:
+	  * ext/audioresample/gstaudioresample.c:
+	  * ext/bz2/gstbz2dec.c:
+	  * ext/bz2/gstbz2enc.c:
+	  * ext/cdaudio/gstcdaudio.c:
+	  * ext/directfb/dfbvideosink.c:
+	  * ext/divx/gstdivxdec.c:
+	  * ext/divx/gstdivxenc.c:
+	  * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+	  * ext/faac/gstfaac.c: (gst_faac_base_init):
+	  * ext/faad/gstfaad.c:
+	  * ext/gsm/gstgsmdec.c:
+	  * ext/gsm/gstgsmenc.c:
+	  * ext/hermes/gsthermescolorspace.c:
+	  * ext/ivorbis/vorbisfile.c:
+	  * ext/lcs/gstcolorspace.c:
+	  * ext/libfame/gstlibfame.c:
+	  * ext/libmms/gstmms.c: (gst_mms_base_init):
+	  * ext/musepack/gstmusepackdec.c: (gst_musepackdec_base_init):
+	  * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+	  * ext/nas/nassink.c: (gst_nassink_base_init):
+	  * ext/neon/gstneonhttpsrc.c:
+	  * ext/sdl/sdlaudiosink.c:
+	  * ext/sdl/sdlvideosink.c:
+	  * ext/shout/gstshout.c:
+	  * ext/snapshot/gstsnapshot.c:
+	  * ext/sndfile/gstsf.c:
+	  * ext/swfdec/gstswfdec.c:
+	  * ext/tarkin/gsttarkindec.c:
+	  * ext/tarkin/gsttarkinenc.c:
+	  * ext/theora/theoradec.c:
+	  * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
+	  * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
+	  * ext/xvid/gstxviddec.c:
+	  * ext/xvid/gstxvidenc.c:
+	  * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
+	  * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
+	  * gst/chart/gstchart.c:
+	  * gst/colorspace/gstcolorspace.c:
+	  * gst/deinterlace/gstdeinterlace.c:
+	  * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
+	  * gst/festival/gstfestival.c:
+	  * gst/filter/gstbpwsinc.c:
+	  * gst/filter/gstiir.c:
+	  * gst/filter/gstlpwsinc.c:
+	  * gst/freeze/gstfreeze.c:
+	  * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+	  * gst/librfb/gstrfbsrc.c:
+	  * gst/mixmatrix/mixmatrix.c:
+	  * gst/mpeg1sys/gstmpeg1systemencode.c:
+	  * gst/mpeg1videoparse/gstmp1videoparse.c:
+	  * gst/mpeg2sub/gstmpeg2subt.c:
+	  * gst/mpegaudioparse/gstmpegaudioparse.c:
+	  * gst/multifilesink/gstmultifilesink.c:
+	  * gst/overlay/gstoverlay.c:
+	  * gst/passthrough/gstpassthrough.c:
+	  * gst/playondemand/gstplayondemand.c:
+	  * gst/qtdemux/qtdemux.c:
+	  * gst/rtjpeg/gstrtjpegdec.c:
+	  * gst/rtjpeg/gstrtjpegenc.c:
+	  * gst/smooth/gstsmooth.c:
+	  * gst/smoothwave/gstsmoothwave.c:
+	  * gst/spectrum/gstspectrum.c:
+	  * gst/speed/gstspeed.c:
+	  * gst/stereo/gststereo.c:
+	  * gst/switch/gstswitch.c:
+	  * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
+	  * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
+	  * gst/vbidec/gstvbidec.c:
+	  * gst/videocrop/gstvideocrop.c:
+	  * gst/videodrop/gstvideodrop.c:
+	  * gst/virtualdub/gstxsharpen.c:
+	  * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
+	  * gst/y4m/gsty4mencode.c:
+	  * sys/cdrom/gstcdplayer.c:
+	  * sys/directdraw/gstdirectdrawsink.c:
+	  * sys/directsound/gstdirectsoundsink.c:
+	  * sys/glsink/glimagesink.c:
+	  * sys/qcam/gstqcamsrc.c:
+	  * sys/v4l2/gstv4l2src.c:
+	  * sys/vcd/vcdsrc.c: (gst_vcdsrc_base_init):
+	  * sys/ximagesrc/ximagesrc.c:
+	  Define GstElementDetails as const and also static (when defined as
+	  global)
+
+2006-04-08 21:48:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  [MOVED FROM BAD 25/68] Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+	  Original commit message from CVS:
+	  * ext/amrwb/gstamrwbdec.c: (gst_amrwbdec_class_init):
+	  * ext/amrwb/gstamrwbenc.c: (gst_amrwbenc_class_init):
+	  * ext/amrwb/gstamrwbparse.c: (gst_amrwbparse_class_init):
+	  * ext/arts/gst_arts.c: (gst_arts_class_init):
+	  * ext/artsd/gstartsdsink.c: (gst_artsdsink_class_init):
+	  * ext/audiofile/gstafsink.c: (gst_afsink_class_init):
+	  * ext/audiofile/gstafsrc.c: (gst_afsrc_class_init):
+	  * ext/audioresample/gstaudioresample.c:
+	  * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init):
+	  * ext/directfb/dfbvideosink.c: (gst_dfbvideosink_class_init):
+	  * ext/divx/gstdivxdec.c: (gst_divxdec_class_init):
+	  * ext/hermes/gsthermescolorspace.c:
+	  (gst_hermes_colorspace_class_init):
+	  * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_class_init):
+	  * ext/jack/gstjack.c: (gst_jack_class_init):
+	  * ext/jack/gstjackbin.c: (gst_jack_bin_class_init):
+	  * ext/lcs/gstcolorspace.c: (gst_colorspace_class_init):
+	  * ext/libfame/gstlibfame.c: (gst_fameenc_class_init):
+	  * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init):
+	  * ext/nas/nassink.c: (gst_nassink_class_init):
+	  * ext/shout/gstshout.c: (gst_icecastsend_class_init):
+	  * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init):
+	  * ext/sndfile/gstsf.c: (gst_sf_class_init):
+	  * ext/swfdec/gstswfdec.c: (gst_swfdecbuffer_class_init),
+	  (gst_swfdec_class_init):
+	  * ext/tarkin/gsttarkindec.c: (gst_tarkindec_class_init):
+	  * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_class_init):
+	  * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_class_init):
+	  * gst/chart/gstchart.c: (gst_chart_class_init):
+	  * gst/colorspace/gstcolorspace.c: (gst_colorspace_class_init):
+	  * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_class_init):
+	  * gst/festival/gstfestival.c: (gst_festival_class_init):
+	  * gst/filter/gstbpwsinc.c: (gst_bpwsinc_class_init):
+	  * gst/filter/gstiir.c: (gst_iir_class_init):
+	  * gst/filter/gstlpwsinc.c: (gst_lpwsinc_class_init):
+	  * gst/librfb/gstrfbsrc.c: (gst_rfbsrc_class_init):
+	  * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_class_init):
+	  * gst/mpeg1sys/gstmpeg1systemencode.c:
+	  (gst_system_encode_class_init):
+	  * gst/mpeg1videoparse/gstmp1videoparse.c:
+	  (gst_mp1videoparse_class_init):
+	  * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_class_init):
+	  * gst/mpegaudioparse/gstmpegaudioparse.c:
+	  (gst_mp3parse_class_init):
+	  * gst/overlay/gstoverlay.c: (gst_overlay_class_init):
+	  * gst/passthrough/gstpassthrough.c: (passthrough_class_init):
+	  * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init):
+	  * gst/rtjpeg/gstrtjpegdec.c: (gst_rtjpegdec_class_init):
+	  * gst/rtjpeg/gstrtjpegenc.c: (gst_rtjpegenc_class_init):
+	  * gst/smooth/gstsmooth.c: (gst_smooth_class_init):
+	  * gst/smoothwave/gstsmoothwave.c: (gst_smoothwave_class_init):
+	  * gst/spectrum/gstspectrum.c: (gst_spectrum_class_init):
+	  * gst/stereo/gststereo.c: (gst_stereo_class_init):
+	  * gst/switch/gstswitch.c: (gst_switch_class_init):
+	  * gst/tta/gstttadec.c: (gst_tta_dec_class_init):
+	  * gst/tta/gstttaparse.c: (gst_tta_parse_class_init):
+	  * gst/vbidec/gstvbidec.c: (gst_vbidec_class_init):
+	  * gst/videocrop/gstvideocrop.c: (gst_video_crop_class_init):
+	  * gst/virtualdub/gstxsharpen.c: (gst_xsharpen_class_init):
+	  * gst/y4m/gsty4mencode.c: (gst_y4mencode_class_init):
+	  * sys/cdrom/gstcdplayer.c: (cdplayer_class_init):
+	  * sys/directsound/gstdirectsoundsink.c:
+	  (gst_directsoundsink_class_init):
+	  * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_class_init):
+	  * sys/dxr3/dxr3spusink.c: (dxr3spusink_class_init):
+	  * sys/dxr3/dxr3videosink.c: (dxr3videosink_class_init):
+	  * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_class_init):
+	  * sys/v4l2/gstv4l2colorbalance.c:
+	  (gst_v4l2_color_balance_channel_class_init):
+	  * sys/v4l2/gstv4l2tuner.c: (gst_v4l2_tuner_channel_class_init),
+	  (gst_v4l2_tuner_norm_class_init):
+	  * sys/ximagesrc/ximagesrc.c: (gst_ximagesrc_class_init):
+	  Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+
+2006-04-08 19:04:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  [MOVED FROM BAD 24/68] gst/: Fix more broken GObject macros
+	  Original commit message from CVS:
+	  * gst/colorspace/gstcolorspace.h:
+	  * gst/deinterlace/gstdeinterlace.h:
+	  * gst/passthrough/gstpassthrough.h:
+	  * gst/y4m/gsty4mencode.h:
+	  Fix more broken GObject macros
+
+2006-04-01 10:09:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 23/68] rework build; add translations for v4l2
+	  Original commit message from CVS:
+	  rework build; add translations for v4l2
+
+2005-12-06 19:55:58 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/colorspace/yuv2rgb.c:
+	* gst/colorspace/yuv2rgb.h:
+	  [MOVED FROM BAD 22/68] expand tabs
+	  Original commit message from CVS:
+	  expand tabs
+
+2005-12-05 13:04:22 +0000  Andy Wingo <wingo@pobox.com>
+
+	  [MOVED FROM BAD 21/68] Update for alloc_buffer changes.
+	  Original commit message from CVS:
+	  2005-12-05  Andy Wingo  <wingo@pobox.com>
+	  * ext/faac/gstfaac.c: (gst_faac_sink_event), (gst_faac_chain):
+	  * ext/faad/gstfaad.c: (gst_faad_chain):
+	  * ext/hermes/gsthermescolorspace.c: (gst_hermes_colorspace_chain):
+	  * ext/lcs/gstcolorspace.c: (gst_colorspace_chain):
+	  * ext/xine/xineinput.c: (gst_xine_input_get):
+	  * gst/colorspace/gstcolorspace.c: (gst_colorspace_chain):
+	  * gst/speed/gstspeed.c: (speed_chain):
+	  * gst/videocrop/gstvideocrop.c: (gst_video_crop_chain): Update for
+	  alloc_buffer changes.
+
+2005-09-05 17:20:29 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 20/68] Fix up all the state change functions.
+	  Original commit message from CVS:
+	  Fix up all the state change functions.
+
+2005-08-14 16:21:00 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/colorspace/Makefile.am:
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 19/68] pound some sense in the colorspace elements
+	  Original commit message from CVS:
+	  pound some sense in the colorspace elements
+
+2005-07-05 10:51:49 +0000  Andy Wingo <wingo@pobox.com>
+
+	  [MOVED FROM BAD 18/68] Way, way, way too many files: Remove crack comment from the 2000 era.
+	  Original commit message from CVS:
+	  2005-07-05  Andy Wingo  <wingo@pobox.com>
+	  * Way, way, way too many files:
+	  Remove crack comment from the 2000 era.
+
+2004-07-27 21:41:30 +0000  Steve Lhomme <steve.lhomme@free.fr>
+
+	* gst/colorspace/colorspace.vcproj:
+	  [MOVED FROM BAD 17/68] more working plugins
+	  Original commit message from CVS:
+	  more working plugins
+
+2004-07-27 09:57:33 +0000  Steve Lhomme <steve.lhomme@free.fr>
+
+	* gst/colorspace/colorspace.vcproj:
+	  [MOVED FROM BAD 16/68] rename GStreamer-0.8.lib to libgstreamer.lib
+	  Original commit message from CVS:
+	  rename GStreamer-0.8.lib to libgstreamer.lib
+
+2004-07-27 09:48:51 +0000  Steve Lhomme <steve.lhomme@free.fr>
+
+	* gst/colorspace/colorspace.vcproj:
+	  [MOVED FROM BAD 15/68] avoid problems with math.h, fix release dependancy
+	  Original commit message from CVS:
+	  avoid problems with math.h, fix release dependancy
+
+2004-07-26 22:11:21 +0000  Steve Lhomme <steve.lhomme@free.fr>
+
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/yuv2rgb.h:
+	  [MOVED FROM BAD 14/68] local include fixes
+	  Original commit message from CVS:
+	  local include fixes
+	  Fix some 64 bits constants to be glib friendly
+	  issue for a vararg macro with MSVC
+
+2004-07-26 13:20:11 +0000  Steve Lhomme <steve.lhomme@free.fr>
+
+	* gst/colorspace/colorspace.vcproj:
+	  [MOVED FROM BAD 13/68] more plugins supported under windows
+	  Original commit message from CVS:
+	  more plugins supported under windows
+
+2004-05-21 22:39:30 +0000  Stéphane Loeuillet <gstreamer@leroutier.net>
+
+	* gst/colorspace/gstcolorspace.c:
+	  [MOVED FROM BAD 12/68] first batch : remove ',' at end of enums as they could confuse older gcc, foreign compilers (forte) and gtk-doc
+	  Original commit message from CVS:
+	  first batch :
+	  remove ',' at end of enums as they could confuse older gcc, foreign compilers (forte) and gtk-doc
+
+2004-04-22 03:52:52 +0000  Benjamin Otte <otte@gnome.org>
+
+	  [MOVED FROM BAD 11/68] s/gst_caps_simplify/gst_caps_do_simplify/
+	  Original commit message from CVS:
+	  * ext/hermes/gsthermescolorspace.c:
+	  (gst_hermes_colorspace_caps_remove_format_info):
+	  * gst/colorspace/gstcolorspace.c:
+	  (gst_colorspace_caps_remove_format_info):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcolorspace_caps_remove_format_info):
+	  s/gst_caps_simplify/gst_caps_do_simplify/
+
+2004-04-09 00:01:44 +0000  David Schleef <ds@schleef.org>
+
+	  [MOVED FROM BAD 10/68] gst/colorspace/gstcolorspace.c: Don't advertise a conversion we don't support (bug #139532)
+	  Original commit message from CVS:
+	  * gst/colorspace/gstcolorspace.c: Don't advertise a conversion
+	  we don't support (bug #139532)
+
+2004-03-30 07:07:46 +0000  David Schleef <ds@schleef.org>
+
+	  [MOVED FROM BAD 09/68] ext/hermes/gsthermescolorspace.c: decrease rank by 2 to not interfere with other colorspaces.
+	  Original commit message from CVS:
+	  * ext/hermes/gsthermescolorspace.c: (plugin_init): decrease rank
+	  by 2 to not interfere with other colorspaces.
+	  * ext/pango/gsttextoverlay.c: (plugin_init): change rank to NONE
+	  * gst/colorspace/gstcolorspace.c: (plugin_init): decrease rank by
+	  one to not interfere with ffmpeg_colorspace.
+
+2004-03-15 19:32:27 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/yuv2rgb.c:
+	  [MOVED FROM BAD 08/68] don't mix tabs and spaces
+	  Original commit message from CVS:
+	  don't mix tabs and spaces
+
+2004-03-15 16:32:54 +0000  Johan Dahlin <johan@gnome.org>
+
+	  [MOVED FROM BAD 07/68] *.h: Revert indenting
+	  Original commit message from CVS:
+	  * *.h: Revert indenting
+
+2004-03-14 22:34:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/colorspace/gstcolorspace.c:
+	* gst/colorspace/gstcolorspace.h:
+	* gst/colorspace/yuv2rgb.c:
+	* gst/colorspace/yuv2rgb.h:
+	  [MOVED FROM BAD 06/68] gst-indent
+	  Original commit message from CVS:
+	  gst-indent
+
+2004-03-13 00:19:26 +0000  David Schleef <ds@schleef.org>
+
+	  [MOVED FROM BAD 05/68] configure.ac: the Hermes library controls hermescolorspace, not colorspace.
+	  Original commit message from CVS:
+	  * configure.ac: the Hermes library controls hermescolorspace, not
+	  colorspace.
+	  * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+	  (gst_mpeg2dec_init): minor pet peeve: disable code with #ifdef,
+	  not /* */
+	  * ext/sdl/sdlvideosink.c: Change XID to unsigned long.
+	  * ext/sdl/sdlvideosink.h: ditto.
+	  * gst/colorspace/gstcolorspace.c: Fix old comments about Hermes
+
+2004-01-18 19:02:33 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst/colorspace/Makefile.am:
+	  [MOVED FROM BAD 04/68] fix to make it possible to build from disted tarball
+	  Original commit message from CVS:
+	  fix to make it possible to build from disted tarball
+
+2004-01-16 00:55:29 +0000  David Schleef <ds@schleef.org>
+
+	  [MOVED FROM BAD 03/68] gst-libs/gst/audio/Makefile.am: Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c from the template.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c
+	  from the template.
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  Add bytes_per_sample and size and n_samples calculation.
+	  * gst-libs/gst/audio/gstaudiofilterexample.c:
+	  Remove, now autogenerated.
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  Moved from gstaudiofilterexample, object name changed, code added
+	  so that it actually works.
+	  * gst-libs/gst/audio/make_filter:
+	  Script to build an audiofilter subclass from the template.
+	  * gst/colorspace/Makefile.am:
+	  * gst/colorspace/yuv2yuv.c:
+	  Remove file, since it's GPL, and we don't use it.
+
+2004-01-15 10:45:55 +0000  Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+	  [MOVED FROM BAD 02/68] gst/colorspace/: Fix compiling... Didn't test if it actually works.
+	  Original commit message from CVS:
+	  2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+	  * gst/colorspace/gstcolorspace.c:
+	  * gst/colorspace/yuv2yuv.c: (gst_colorspace_yuy2_to_i420),
+	  (gst_colorspace_i420_to_yv12):
+	  Fix compiling... Didn't test if it actually works.
+
+2004-01-15 08:58:22 +0000  David Schleef <ds@schleef.org>
+
+	  [MOVED FROM BAD 01/68] Duplicate the ext/hermes colorspace plugin, and remove Hermes code and GPL code.  Fix for new caps negotiation.  Rewr...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/colorspace/Makefile.am:
+	  * gst/colorspace/gstcolorspace.c:
+	  * gst/colorspace/gstcolorspace.h:
+	  * gst/colorspace/yuv2rgb.c:
+	  * gst/colorspace/yuv2rgb.h:
+	  Duplicate the ext/hermes colorspace plugin, and remove Hermes
+	  code and GPL code.  Fix for new caps negotiation.  Rewrite
+	  much of the format handling code, and some of the conversion
+	  code.  Basically, rewrote almost everything.  This element
+	  handles I420, YV12 to RGB conversions.
+	  * ext/hermes/Makefile.am:
+	  * ext/hermes/gsthermescolorspace.c:
+	  Rename colorspace to hermescolorspace.  Fix negotiation issues.
+	  Remove non-Hermes related code.  This element handles lots of
+	  RGB to RGB conversions, but no YUV.
+	  * ext/hermes/gstcolorspace.c:
+	  * ext/hermes/gstcolorspace.h:
+	  * ext/hermes/rgb2yuv.c:
+	  * ext/hermes/yuv2rgb.c:
+	  * ext/hermes/yuv2rgb.h:
+	  * ext/hermes/yuv2rgb_mmx16.s:
+	  * ext/hermes/yuv2yuv.c:
+	  * ext/hermes/yuv2yuv.h:
+	  Remove old code.
+
+2011-06-15 15:08:32 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Add gobject introspection files to spec
+
+2011-06-15 14:53:56 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  remove old v4l plugin from spec file
+
+2011-06-15 14:49:41 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* tests/examples/Makefile.am:
+	  Add missing dist subdir
+
+2011-06-15 14:21:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio: link test program against libgstaudio
+
+2011-06-15 13:01:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: cleanup and use playbin after rename
+	  Remove the static pipelines and other unused things
+	  Use playbin
+
+2011-06-15 12:48:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-media-types.txt:
+	  docs: add more media type
+
+2011-06-15 00:52:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* ext/Makefile.am:
+	* ext/gnomevfs/Makefile.am:
+	* ext/gnomevfs/gstgnomevfs.c:
+	* ext/gnomevfs/gstgnomevfs.h:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssink.h:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.h:
+	* ext/gnomevfs/gstgnomevfsuri.c:
+	* ext/gnomevfs/gstgnomevfsuri.h:
+	* gst-libs/gst/pbutils/descriptions.c:
+	* gst-plugins-base.spec.in:
+	* po/POTFILES.in:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/gnomevfssink.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/icles/playback/decodetest.c:
+	  gnomevfs: remove GnomeVFS plugin
+	  The gio plugin replaces it.
+
+2011-06-15 00:35:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/decodebin.c:
+	* tests/check/elements/decodebin2.c:
+	* tests/check/elements/playbin-compressed.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/playbin2-compressed.c:
+	* tests/check/elements/playbin2.c:
+	  tests: fix up unit tests for playbin2/decodebin2 renames and updates
+	  Even if they don't work yet.
+
+2011-06-15 00:32:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/design-decodebin.txt:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplay-marshal.list:
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin, decodebin: remove new-decoded-pad and removed-decoded-pad signals
+	  They were deprecated, use "pad-added" and "pad-removed" instead.
+
+2011-06-15 00:06:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamsynchronizer.c:
+	  playback: rename playbin2 to playbin
+	  But keep source file name as-is for now.
+
+2011-06-15 00:02:13 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplayback.c:
+	* gst/playback/gstplayback.h:
+	* gst/playback/gsturidecodebin.c:
+	  playback: merge playbin and decodebin plugins into one single playback plugin again
+
+2011-06-14 23:51:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gsturidecodebin.c:
+	  decodebin2: rename decodebin2 to decodebin
+	  But don't rename source file for now, which hopefully
+	  makes merging from master easier.
+
+2011-06-14 23:42:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/README:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstplayback.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybasebin.h:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gststreaminfo.c:
+	* gst/playback/gststreaminfo.h:
+	  playback: remove old playbin and decodebin elements
+
+2011-06-15 01:55:31 +0530  Debarshi Ray <rishi@gnu.org>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst/tcp/gsttcpclientsink.c:
+	  Remove unused but set variables
+	  This is needed to satisfy the new -Wunused-but-set-variable added in
+	  GCC 4.6: http://gcc.gnu.org/gcc-4.6/changes.html
+
+2011-06-14 18:25:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-media-types.txt:
+	  docs: add beginnings of new media types design doc
+	  Start with new video media types and properties
+
+2011-06-14 15:20:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-06-14 10:31:18 +0530  Debarshi Ray <rishi@gnu.org>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: restore 7350 as a valid sampling frequency for AAC
+	  This was lost during c77f88cac675a1dbb89e40da8e3c28320523bfca.
+
+2011-06-09 18:30:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/tag.h:
+	  libs: replace G_CONST_RETURN with 'const'
+	  G_CONST_RETURN will be deprecated soon.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=652211
+
+2011-05-31 22:14:09 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioresample/resample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videotestsrc/generate_sine_table.c:
+	* gst/videotestsrc/videotestsrc.c:
+	* tests/icles/test-xoverlay.c:
+	  convert M_PI to G_PI, for msvc
+
+2011-06-06 14:41:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: no input data implies no type can be found
+	  ... and posting a proper error message to this effect is appropriately
+	  informative and prevents auto-plugging otherwise stalling.
+
+2011-06-04 13:36:55 -0700  David Schleef <ds@schleef.org>
+
+	* gst/adder/gstadder.c:
+	  adder: Work around changes in g_atomic API
+	  See #651514 for details.
+
+2011-05-31 20:38:56 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: fix c99-ism
+
+2011-05-23 16:02:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Try to typefind even if conversion to UTF8 failed
+	  Fixes bug #600043.
+
+2011-05-23 15:51:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Interprete typefind strings passed to GRegex as raw bytes instead of valid UTF8
+
+2011-05-20 10:48:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/lang.c:
+	  lang: fix possible array overrun
+	  We where checking for i<G_N_ELEMENTS, but where accessing i+1.
+
+2011-06-14 10:31:18 +0530  Debarshi Ray <rishi@gnu.org>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: restore 7350 as a valid sampling frequency for AAC
+	  This was lost during c77f88cac675a1dbb89e40da8e3c28320523bfca.
+
+2011-06-13 19:09:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-06-13 16:32:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* gst/gdp/gstgdppay.c:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	  -base: update for buffer API change
+
+2011-06-13 16:28:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppayload: cleanup header
+
+2011-06-13 12:15:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: use _check_reconfigure method
+
+2011-06-13 12:09:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	  videotestsrc: use baseclass allocator negotiation logic
+	  Let the baseclass implement the negotiation of the allocators.
+	  Influence the allocator buffersize.
+	  Use the fill vmethod to fill the buffer with data.
+
+2011-06-11 20:47:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  ximage: fix alignment and size
+	  Set the right alignment and size in the bufferpool.
+
+2011-06-11 18:54:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/theora/gsttheoradec.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagesink.c:
+	  update for bufferpool api change
+
+2011-05-31 22:14:09 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioresample/resample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videotestsrc/generate_sine_table.c:
+	* gst/videotestsrc/videotestsrc.c:
+	* tests/icles/test-xoverlay.c:
+	  convert M_PI to G_PI, for msvc
+
+2011-06-07 21:30:18 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: refactor how EOS is determined
+	  This decreases the number of buffers held on each pad by one,
+	  eliminating next_buffer.  Simplifies the logic by relying solely
+	  on CollectPads to let us know when a pad is in EOS.  As a side
+	  benefit, the collect pads related code is structured more like
+	  other CollectPad users.
+	  The previous code would occasionally mark the wrong pad as EOS,
+	  causing the code to get in a state where all the streams were
+	  finished, but EOS hadn't been sent to the source pad.
+
+2011-06-10 18:04:29 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/theora/gsttheoradec.c:
+	  update for alignment change
+
+2011-06-10 17:58:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: small cleanups
+
+2011-06-10 17:58:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: fix for alignment value change
+
+2011-06-10 12:14:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  tests/examples/audio/Makefile.am
+	  tests/examples/v4l/Makefile.am
+
+2011-06-10 11:59:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* gst/adder/gstadder.c:
+	* gst/encoding/gstsmartencoder.c:
+	  -base: fix for flush_stop event API change
+
+2011-06-09 18:30:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/tag.h:
+	  libs: replace G_CONST_RETURN with 'const'
+	  G_CONST_RETURN will be deprecated soon.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=652211
+
+2011-06-09 00:02:07 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Fix LocationShown syntax
+	  According to the specification, the LocationShown requires its
+	  struct fields to be inside a Bag type.
+
+2011-06-09 11:52:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: small improvements
+
+2011-06-08 14:21:40 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add room for extra namespace definitions
+	  Adds an extra field to the namespace definitions of the schemas
+	  so they can add the namespace of any array/struct fields they
+	  might use internally.
+
+2011-06-08 13:43:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: changes for message API changes
+
+2011-06-08 12:21:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/pango/Makefile.am:
+	* gst/audioresample/Makefile.am:
+	* tests/check/Makefile.am:
+	* tests/examples/v4l/Makefile.am:
+	  GST_PLUGINS_BASE_LIBS is not defined in -base.
+
+2011-06-08 11:33:07 +0200  Christophe Fergeau <cfergeau@redhat.com>
+
+	* tests/examples/audio/Makefile.am:
+	  examples: don't link testchannels example with system libgstaudio
+	  The testchannels audio test program is using -lgstaudio-0.10 to link
+	  with libgstaudio which won't use the gstaudio library that was just
+	  built but the one from the system. This is an issue since it means
+	  we won't be testing the code from the current source tree, and it
+	  also breaks the build when building on a system which don't have
+	  a libgstaudio yet.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=652100
+
+2011-06-08 11:11:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/design-decodebin.txt:
+	  docs: add some text about parser/decoder autoplugging issues
+
+2011-06-07 20:43:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Makefile.am:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* gst-plugins-base.spec.in:
+	* gst/videorate/gstvideorate.c:
+	* po/POTFILES.in:
+	* sys/Makefile.am:
+	* sys/v4l/.gitignore:
+	* sys/v4l/Makefile.am:
+	* sys/v4l/README:
+	* sys/v4l/TODO:
+	* sys/v4l/gstv4l.c:
+	* sys/v4l/gstv4lcolorbalance.c:
+	* sys/v4l/gstv4lcolorbalance.h:
+	* sys/v4l/gstv4lelement.c:
+	* sys/v4l/gstv4lelement.h:
+	* sys/v4l/gstv4ljpegsrc.c:
+	* sys/v4l/gstv4ljpegsrc.h:
+	* sys/v4l/gstv4lmjpegsink.c:
+	* sys/v4l/gstv4lmjpegsink.h:
+	* sys/v4l/gstv4lmjpegsrc.c:
+	* sys/v4l/gstv4lmjpegsrc.h:
+	* sys/v4l/gstv4lsrc.c:
+	* sys/v4l/gstv4lsrc.h:
+	* sys/v4l/gstv4ltuner.c:
+	* sys/v4l/gstv4ltuner.h:
+	* sys/v4l/gstv4lxoverlay.c:
+	* sys/v4l/gstv4lxoverlay.h:
+	* sys/v4l/v4l_calls.c:
+	* sys/v4l/v4l_calls.h:
+	* sys/v4l/v4lmjpegsink_calls.c:
+	* sys/v4l/v4lmjpegsink_calls.h:
+	* sys/v4l/v4lmjpegsrc_calls.c:
+	* sys/v4l/v4lmjpegsrc_calls.h:
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/v4l/v4lsrc_calls.h:
+	* sys/v4l/videodev_mjpeg.h:
+	* tests/examples/Makefile.am:
+	* tests/examples/v4l/.gitignore:
+	* tests/examples/v4l/Makefile.am:
+	* tests/examples/v4l/probe.c:
+	  Remove v4l plugin
+	  The old v4l interface has been deprecated for years and even
+	  been removed from the kernel headers. If anyone still needs
+	  this plugin, they can resurrect it in gst-plugins-bad, there's
+	  no reason for it to be in -base.
+
+2011-06-07 16:18:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: use new memory alloc API
+
+2011-06-07 12:06:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  event: fix some event leaks
+
+2011-06-07 11:55:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggaviparse.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst/videorate/gstvideorate.c:
+	  -base: use caps event
+	  Remove uses of setcaps function and use the caps event.
+
+2011-06-07 10:58:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamsplitter.c:
+	* gst/subparse/gstssaparse.c:
+	  -base: use caps event instead of setcapsfunction
+
+2011-06-06 16:27:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/theora/gsttheoraenc.c
+
+2011-06-06 12:03:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	  videotestsrc: remove deprecated peer-alloc property
+	  Remove the peer-alloc property, it's not used anymore because pad-alloc is gone.
+
+2011-06-06 14:30:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: also define GST_DISABLE_XML for now to fix subparse build
+
+2011-06-06 14:41:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: no input data implies no type can be found
+	  ... and posting a proper error message to this effect is appropriately
+	  informative and prevents auto-plugging otherwise stalling.
+
+2011-06-06 12:48:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: determine granulepos metadata using stream mapper whenever possible
+	  ... which unfortunately is not the case for all types, but at least so for
+	  most common ones.
+
+2011-06-06 12:46:05 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: convert incoming buffer timestamp to running time
+	  ... so all subsequent manipulation can take place in the proper timeline
+	  without further ado.
+
+2011-06-01 20:48:44 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: remove superfluous code
+	  ... since there is nothing in oggstream that cares (or even should)
+	  about granulepos for what is being asked from it.
+
+2011-06-05 23:47:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update for removed translatable strings
+
+2011-06-05 23:47:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: fix indentation
+
+2011-06-05 23:44:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: define USE_XML conditional used by subparse as FALSE for now
+	  The subparse plugin needs to be split and/or moved to ext/ for the
+	  libxml2 dependency. The media type needs to be format-specific instead
+	  of a catch-all format. Maybe add a base class or line-based adapter.
+
+2011-06-04 13:36:55 -0700  David Schleef <ds@schleef.org>
+
+	* gst/adder/gstadder.c:
+	  adder: Work around changes in g_atomic API
+	  See #651514 for details.
+
+2011-05-31 20:38:56 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: fix c99-ism
+
+2011-06-03 16:29:00 +0200  Luis de Bethencourt <luis.debethencourt@collabora.como>
+
+	* ext/theora/gsttheoraenc.c:
+	  theora: separate encode and push block in chain, into own function.
+
+2011-06-03 19:10:33 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/elements/vorbistag.c:
+	  check/vorbistag: Convert to new probe API
+
+2011-06-03 19:07:44 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/pipelines/vorbisenc.c:
+	  check/vorbisenc: Convert to new probe API
+
+2011-06-03 19:00:23 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/pipelines/oggmux.c:
+	  check/oggmux: Convert to new probe API
+
+2011-06-03 15:51:08 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/elements/playbin2.c:
+	  check/playbin2: Update for caps and structure API changes
+
+2011-06-03 12:19:49 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/elements/gnomevfssink.c:
+	  check: Use new gst_event_new_segment() API
+
+2011-06-03 11:48:43 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/examples/audio/Makefile.am:
+	  examples: Link against proper libgstaudio
+	  It was previously attempting to link against the non-local one.
+
+2011-06-03 19:00:39 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Use the GstPad (and not the GstOggPadData for GstPad functions
+	  For those willing, renaming that 'pad' variable to something more obvious
+	  would be nice to avoid such bugs...
+
+2011-06-03 13:35:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  thoeraenc: port to 0.11
+
+2011-06-03 13:31:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/theora/gsttheoraenc.c
+
+2011-06-03 13:16:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: fix after merge
+
+2011-06-03 13:12:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  playback: fix compilation after ghostpad setcaps removal
+
+2011-06-02 19:08:41 +0200  Luis de Bethencourt <luis.debethencourt@collabora.como>
+
+	* ext/theora/gsttheoraenc.c:
+	  theora: use fixed src cap pads
+
+2011-06-02 18:57:05 +0200  Luis de Bethencourt <luis.debethencourt@collabora.como>
+
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraenc.h:
+	  theora: set the width/height/par on the srcpad caps
+
+2011-06-02 17:29:53 +0200  Luis de Bethencourt <luis.debethencourt@collabora.como>
+
+	* ext/theora/gsttheoraenc.c:
+	  theora: get sink caps info from downstream element pad
+	  https://bugzilla.gnome.org/show_bug.cgi?id=651564
+
+2011-06-02 19:26:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-06-02 19:21:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertp: use caps event instead of setcaps function
+	  Use the caps event instead of the setcaps function to configure caps.
+	  Use a default event handler for the base rtp payloader instead of the awkward
+	  way of handling the return value.
+
+2011-05-27 14:41:39 -0700  Patrick McCarty <patrick.mccarty@intel.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for wbmp images.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=651294
+
+2011-06-02 00:55:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add typefinder for WAP WBMP bitmaps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=651294
+
+2011-06-02 12:21:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: fix header after merge
+
+2011-06-02 12:18:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/video/video.h
+	  gst/playback/gstplaysinkaudioconvert.c
+	  gst/playback/gstplaysinkvideoconvert.c
+	  tests/check/libs/rtp.c
+
+2011-06-02 12:12:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	  playsinconvert: clear the probe id when removing
+
+2011-06-02 12:08:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: refactor block/unblock code a little
+
+2011-06-02 11:53:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	  playsink: Fix deadlock in the audio/video converter bins when linking fails
+
+2011-06-01 19:34:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkaudioconvert.h:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.h:
+	* gst/playback/gststreaminfo.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	* gst/playback/gsturidecodebin.c:
+	* tests/icles/audio-trickplay.c:
+	  probes: port to new API for blocking and probes
+
+2011-06-01 17:31:35 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  check: ... and don't forget to add the new arm header
+	  Forgot it in my previous commit
+
+2011-06-01 17:24:30 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_arm.h:
+	  libsabi: Add structure sizes for arm
+
+2011-05-31 19:57:57 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/fft/gstfftf32.c:
+	* gst-libs/gst/fft/gstfftf64.c:
+	* gst-libs/gst/fft/gstffts16.c:
+	* gst-libs/gst/fft/gstffts32.c:
+	  fft: s/M_PI/G_PI/ for MSVC
+
+2011-05-31 11:05:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	* tests/check/elements/volume.c:
+	  volume: Fix handling of volume>=4.0 for 8 and 16 bit integer formats
+	  Also add a unit test for this. Previously volumes bigger than 4.0
+	  would have resulted in overflows in the fixed point processing.
+	  Fixes bug #649642.
+
+2011-05-30 18:36:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  playbin: fixed for new pad block API
+
+2011-05-30 17:14:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: activate pad before pushing things
+	  Activate the pad before pushing things on it or else we get errors.
+
+2011-05-29 13:32:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/adder.c:
+	* tests/check/elements/ffmpegcolorspace.c:
+	* tests/check/elements/vorbistag.c:
+	* tests/check/libs/rtp.c:
+	* tests/check/pipelines/theoraenc.c:
+	  tests: fix some more unused-but-set-variable warnings with gcc 4.6
+
+2011-05-28 16:14:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: update .def file for new API
+
+2011-05-28 12:39:06 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Makefile.am:
+	* tests/check/elements/.gitignore:
+	  Ignore new playbin2-compress test binary
+	  And add old testchannels binary to CRUFT_FILES.
+
+2011-05-27 23:31:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: sprinkle some G_GNUC_CONST
+	  Mark functions that have no effect besides their return value and
+	  only inspect their input arguments with G_GNUC_CONST. (We just
+	  ignore the g_return_val_if_fail() guards for this)
+
+2011-05-27 23:25:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: clean up header file
+	  Sprinkle some spaces and newlines here and there.
+
+2011-05-27 14:30:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Optimize transform_caps()
+	  If the second and next caps structures are a subset of the already existing
+	  transformed caps we can safely skip them because we would transform them to
+	  the same caps again.
+
+2011-05-27 14:28:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Optimize transform_caps()
+	  If the second and next caps structures are a subset of the already existing
+	  transformed caps we can safely skip them because we would transform them to
+	  the same caps again.
+
+2011-05-27 14:20:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Optimize transform_caps()
+	  If the second and next caps structures are a subset of the already existing
+	  transformed caps we can safely skip them because we would transform them to
+	  the same caps again.
+
+2011-05-27 14:10:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: Use new gst_caps_is_subset_structure() API
+	  This prevents one copy of every structure and creating a new caps
+	  instance.
+
+2011-05-27 15:03:19 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst-libs/gst/audio/.gitignore:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/testchannels.c:
+	* tests/examples/Makefile.am:
+	* tests/examples/audio/.gitignore:
+	* tests/examples/audio/Makefile.am:
+	* tests/examples/audio/testchannels.c:
+	  audio: move testchannels example to 'tests/examples' dir
+	  Also fix it up a little to not include 'c' file but link to the libs instead.
+
+2011-05-27 13:58:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-05-27 13:13:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: Optimize transform_caps()
+	  If the second and next caps structures are a subset of the already existing
+	  transformed caps we can safely skip them because we would transform them to
+	  the same caps again.
+	  This makes gst_pad_get_caps() on an audiotestsrc ! audioconvert !
+	  audioconvert ! audioconvert ! fakesink pipeline about 1.7 times faster.
+
+2011-05-27 12:13:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/audioconvert.c:
+	  audioconvert: Fix audioconvert unit test to work again
+
+2011-05-27 12:13:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/videoscale/gstvideoscale.c:
+	  gst: Update for the GstBaseTransform::transform_caps() changes
+
+2011-05-27 11:39:21 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  code-utile: fix level descriptions for fgs
+	  fgs levels range from 8-13 and are mapped to 0-5.
+
+2011-05-25 14:38:21 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: fix mpeg4 level verification
+	  The current condition would never be true. As levels<6 are asp and levels>7 and
+	  <14 are fgs, we should return NULL for cases 6,7,14,15.
+
+2011-05-26 16:08:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  -base: change for changed set_blocked API
+
+2011-05-26 13:47:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-05-26 12:33:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Fallback to non-XShm mode if allocating the XShm image failed
+	  Fixes bug #630442.
+
+2011-05-26 12:30:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Fallback to non-XShm mode if allocating the XShm image failed
+	  Fixes bug #630442.
+
+2011-05-26 11:41:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Let the input-selectors sync all streams to the running time
+	  This is especially needed when switching between a non-sparse and sparse
+	  video stream, see bug #537382. It also lowers the time needed for switching
+	  between streams a bit.
+
+2011-01-20 00:52:50 -0700  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: added 'outline-color' parameter to control whether text gets a shadow
+
+2011-01-20 00:42:39 -0700  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: added 'shadow' option to control whether text gets a shadow
+
+2011-05-26 10:48:05 +0200  Jindrich Makovicka <makovick@gmail.com>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Correctly negotiate with downstream instead of just using random caps
+	  Fixes bug #638897.
+
+2011-05-26 10:43:51 +0200  Jindrich Makovicka <makovick@gmail.com>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Add bound checks to not write outside the image area
+
+2011-05-26 10:42:46 +0200  Jindrich Makovicka <makovick@gmail.com>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Prevent double unref of caps if the caps can't be set on the srcpad
+
+2011-05-26 10:31:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  gnomevfssrc: Keep track of interruptions during read with a flag
+
+2010-09-03 09:11:30 -0400  American Dynamics <GStreamer-Bugs@tycosp.com>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.h:
+	  gnomevfssrc: Add support for cancelling the read operations
+	  This allows the state change from PAUSED to READY to be faster.
+	  Fixes bug #628337.
+
+2011-05-25 14:14:46 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Remove g_assert from interface query
+
+2011-05-25 14:08:43 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Remove the g_assert from interface query
+
+2011-05-26 00:17:40 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: add blue and violet noise by using spectral inversion
+	  Add blue and violet noise by spectral inversion of pink and red noise.
+	  Fixes #649969
+
+2011-05-25 23:40:26 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: add red (brownian) noise generator
+	  Add another noise generator which produces a quite dark noise color.
+	  Fixes parts of #649969.
+
+2010-09-27 13:32:31 +0400  Vladimir Eremeev <eremeev@atlantis.ru>
+
+	* tests/examples/seek/seek.c:
+	  seek: set selected/default audio/video sinks on playbin and playbin2
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630322
+
+2011-05-25 19:03:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: add --audiosink and --videosink command line options
+
+2011-05-25 18:50:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: use the right GDK defines to differentiate between the backends
+
+2011-05-25 18:45:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: use gst_filename_to_uri() to convert a filename to a uri
+
+2010-09-27 12:46:54 +0400  Vladimir Eremeev <eremeev@atlantis.ru>
+
+	* tests/examples/seek/seek.c:
+	  seek: make seek example work in win32
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630322
+
+2011-05-25 16:08:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: update GLib requirement to >= 2.24
+	  Same as core (make implicit requirement explicit).
+	  http://gstreamer.freedesktop.org/wiki/ReleasePlanning/GLibRequirement
+
+2011-05-25 15:24:33 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: remove bogus <0 check for unsigned var
+	  bytes_written is a gsize which is unsigned and thus never < 0.
+
+2011-05-25 15:23:13 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: fix variable type for bytes_consumed
+	  th_encode_ctl() returns an int. Using a gsize result in bogus <0 checks.
+
+2011-05-25 15:04:20 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: remove the g_return_if_fail as we test it below
+	  We don't want to return without setting taglist=NULL if asserts are on and with
+	  setting taglist=NULL otherwise.
+
+2011-05-25 14:28:18 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/volume/gstvolume.c:
+	  volume: use a flag for 'mute' using the controller
+	  Previously we checked mute_csource to determine wheter we need to premultiply
+	  volumes and mute values. That fails as we unrefs mute_csource and set it to
+	  NULL after. Use an extra flag instead.
+
+2011-05-25 14:12:50 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  exiftag: reflow the code
+	  Move the warning on unsupported units to the swicth-case. Move fetching the
+	  pending tags down to where we use them.
+
+2011-05-25 13:59:57 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  exiftag: set value=1 if we found the token
+	  Otherwise we never write the tag. This would also be consistent with the code in
+	  deserialize_scene_type().
+
+2011-05-25 12:30:51 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: run gst-indent
+
+2011-05-25 12:29:21 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: remove unneded !=NULL checks
+	  We check for matching_attr!=NULL right before already.
+
+2011-05-24 18:21:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/mixerutils.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstplaybin2.c:
+	* tests/check/elements/libvisual.c:
+	  feature: use object name instaed of feature name
+
+2011-05-24 17:37:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiosrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/ogg/gstoggdemux.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  scheduling: port to new scheduling query
+
+2011-05-24 10:46:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: handle reconfigure events
+	  Handle the caps with the caps event.
+	  Handle the reconfigure event and renegotiate the bufferpool when needed.
+
+2011-05-24 09:55:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	  convertframe: fix for merge conflict
+
+2011-05-24 09:47:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/video/convertframe.c
+
+2011-05-24 09:45:18 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x11: free bufferpool whe activation fails
+
+2011-05-24 00:13:04 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: massage the section file more
+	  Add more symbols (from unused.txt). Move the whole bunch of riff-fourcc defines
+	  to std section too (no one is hoing to document them, right).
+
+2011-05-24 00:12:26 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/video.c:
+	  docs: add missing parameter docs
+
+2011-05-23 23:53:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: move the riff structure to std-section
+	  If someone intents to document them and the fields we can move them back.
+
+2011-05-23 23:53:06 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/gstpluginsbaseversion.c:
+	  docs: move pluginbaseversion to separate section as we have section docs
+
+2011-05-23 23:51:15 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  docs: add minimal docblobs for status code and headers
+	  Use a trick to avoid documenting all 100 enums.
+
+2011-05-23 23:41:56 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	  docs: update xoverlay docs for api addition and deprecation
+
+2011-05-23 23:12:50 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  docs: rtp library docs update
+
+2011-05-23 22:58:22 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstringbuffer.h:
+	* gst-libs/gst/cdda/gstcddabasesrc.h:
+	* gst-libs/gst/interfaces/colorbalance.h:
+	* gst-libs/gst/interfaces/colorbalancechannel.h:
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/interfaces/mixeroptions.h:
+	* gst-libs/gst/interfaces/navigation.h:
+	* gst-libs/gst/interfaces/tuner.h:
+	* gst-libs/gst/video/gstvideofilter.h:
+	* gst-libs/gst/video/gstvideosink.h:
+	  docs: add missing documentation for various pieces
+
+2010-02-19 12:54:18 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: recalibrate clock on setcaps
+	  Because the spec for the ringbuffer can change when changing
+	  the caps, we must recalibrate the clock.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=610443
+
+2011-05-23 16:02:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Try to typefind even if conversion to UTF8 failed
+	  Fixes bug #600043.
+
+2011-05-23 16:02:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Compile the typefind regex with optimization to speed up matching
+
+2011-05-23 15:51:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Interprete typefind strings passed to GRegex as raw bytes instead of valid UTF8
+
+2011-05-23 15:21:59 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/convertframe.c:
+	  convertframe: fix docs
+	  Fixup paramter mismatch between func and prototype. Add missing parameter docs.
+
+2011-05-23 15:08:24 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	* gst-libs/gst/audio/gstaudiosrc.h:
+	* gst-libs/gst/audio/multichannel.h:
+	  docs: fixup audio-library docs
+
+2011-05-23 15:02:27 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst/app/gstapp.c:
+	  docs: fixup appsrc/sink api docs
+
+2011-05-23 14:53:26 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	* gst-libs/gst/audio/gstaudioiec61937.h:
+	  docs: fix docs for new api
+	  Some parameters where wrong, first line missed the ':' and return docs where
+	  broken.
+
+2011-05-23 14:45:23 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: update xmp api docs
+	  Add missing section. Add new section to main-sgml. Add missing function.
+
+2011-05-23 14:07:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: remove late check
+	  We deref the pointer two lines before already and besides this internal function
+	  should not be called with this parameter=NULL.
+
+2011-05-23 14:01:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: have the default branch as the last one
+
+2011-05-23 14:00:04 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: an uint value can't be <0
+
+2011-05-23 13:53:06 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/video.c:
+	  whitespace: trim trailing whitespace
+
+2011-05-23 13:50:59 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/video.c:
+	  video.c: use a break and a final warning instead of early returns
+	  Use breaks for case branches instead of return 0. We don't expect these to
+	  happen anyway. Thus have a warning before the final return to make it easier to
+	  see when things go out of sync.
+
+2011-05-23 13:49:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/video.c:
+	  video.c: use g_assert_not_reached() for logical error here.
+	  This will help to detect them closer to the source if they ever happen.
+
+2011-05-20 12:50:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: use new method
+	  Use the new element class method to get the metadata from an element. Not all
+	  elements might have an elementfactory.
+
+2011-05-20 12:32:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Fix compilation after the removal of GstElementDetails
+
+2011-05-20 12:26:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  docs/plugins/gst-plugins-base-plugins.hierarchy
+	  docs/plugins/gst-plugins-base-plugins.interfaces
+	  docs/plugins/gst-plugins-base-plugins.prerequisites
+
+2011-05-20 10:48:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/lang.c:
+	  lang: fix possible array overrun
+	  We where checking for i<G_N_ELEMENTS, but where accessing i+1.
+
+2011-05-19 23:41:08 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: cleanup helper code
+	  make_lossless_changes() returns the same structure that we're passing (probably
+	  to enable chaining). Instead of reusing s and making it point to s2 as well,
+	  keep using s2. Drop the assignment which in the 2nd case is a dead one anyway.
+
+2011-05-19 23:25:24 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  docs: update plugin introspection data
+	  Now more files are merged and produced in a canonical fashion, which hopefully
+	  creates less or no delta in the future.
+
+2011-05-19 22:56:53 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 9e5bbd5 to 69b981f
+
+2011-05-19 15:56:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: implement ALLOCATION query
+
+2011-05-19 15:55:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: improve allocation query
+	  If the allocation query contains the same caps as the current allocator, we can
+	  return that one instead of making a new one.
+
+2011-05-19 13:40:29 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Add new header file
+
+2011-05-19 13:38:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: fix upstream renegotiation
+	  Fix a refcount problem.
+	  Handle reconfiguration requests.
+
+2011-05-19 08:30:14 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Autoplug formatters
+	  Autoplug formatters for streams if a formatter with secondary or
+	  higher rank is found. Formatters are autoplugged when there is no
+	  muxer or when the muxer doesn't implement the tagsetter interface.
+	  Currently only the first formatter found is plugged, this might
+	  help in lots of cases, but it doesn't solve the
+	  'lamemp3 ! xingmux ! id3mux'
+	  case.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=649841
+
+2011-05-19 08:27:29 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: fix typos
+
+2011-05-19 12:42:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: improve negotiation
+	  Remove the setcaps function on the srcpad, we know exactly when we negotiate a
+	  new format now.
+	  Use a caps event to configure new caps.
+
+2011-05-19 12:29:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbis: fix for new API
+
+2011-05-19 11:31:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-05-18 22:07:58 +0200  Aleix Conchillo Flaque <aleix@oblong.com>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: Handle headers in caps
+
+2011-05-18 17:23:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/videorate/gstvideorate.c:
+	  base: Update for SEGMENT event parse API changes
+
+2011-05-18 16:09:47 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From fd35073 to 9e5bbd5
+
+2011-05-18 13:18:15 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	  gstvideo: Add gst_video_get_size_from_caps function
+	  gst_video_get_size_from_caps () allows easy calculation of the raw video
+	  buffer size from some fixed video caps.
+	  API: gst_video_get_size_from_caps()
+
+2011-05-18 12:24:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 46dfcea to fd35073
+
+2011-05-18 09:34:52 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsa: Remove unused but set variable
+	  Unused but set variables cause warnings in GCC 4.6.x and newer.
+
+2011-05-17 13:04:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  gst: Update for caps/pad template related API changes
+
+2011-05-17 13:03:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/ffmpegcolorspace.c:
+	* tests/check/elements/videoscale.c:
+	* tests/check/elements/videotestsrc.c:
+	  tests: Update for caps/pad template related API changes
+
+2011-05-17 13:01:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/vorbis/gstvorbisdec.c:
+	  ext: Update for caps/pad template related API changes
+
+2011-05-17 12:54:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/v4l/gstv4lmjpegsrc.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  sys: Update for caps/pad template related API changes
+
+2011-05-17 12:51:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Update for caps/pad template related API changes
+
+2011-05-17 12:47:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	  encoding-profile: Returns a new reference of caps everywhere instead of const caps
+
+2011-05-17 12:29:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	  audiofilter: gst_pad_template_new() does not take ownership of the caps anymore
+	  There's no need to copy the caps before passing them to that function.
+
+2011-05-17 11:27:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-05-17 11:25:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/adder/gstadder.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamsplitter.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/v4l/gstv4lsrc.c:
+	* sys/xvimage/xvimagesink.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/audio-trickplay.c:
+	* tests/icles/playback/test5.c:
+	* tests/icles/playback/test6.c:
+	  Revert "-base_port to new query API"
+	  This reverts commit c9f4e0676ba8c8074a50aa6d1d058f6da9a76b32.
+
+2011-05-17 11:24:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin2: Update for GstQuery related API changes"
+	  This reverts commit 549128c2a3702a878c62f5603e097c8df7075f36.
+
+2011-05-17 10:20:36 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Fix typo which broke the build
+
+2011-05-17 09:31:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-05-16 15:35:50 +0200  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: not enter in not controllable state unless it is necessary
+	  When closing rtspsrc the state change blocks until the polling in the
+	  connection timeouts. This is because the second time we loop to read a
+	  full message controllable is set to FALSE in the poll group, even though no
+	  message is half read.
+	  This can be avoided by not setting controllable to FALSE the poll group
+	  unless we had begin to read a message.
+	  Fixes #610916
+
+2011-05-16 15:35:50 +0200  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: not enter in not controllable state unless it is necessary
+	  When closing rtspsrc the state change blocks until the polling in the
+	  connection timeouts. This is because the second time we loop to read a
+	  full message controllable is set to FALSE in the poll group, even though no
+	  message is half read.
+	  This can be avoided by not setting controllable to FALSE the poll group
+	  unless we had begin to read a message.
+	  Fixes #610916
+
+2010-05-30 13:21:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	* ext/cdparanoia/gstcdparanoiasrc.h:
+	  cdparanoiasrc: fix build on OSX by #undef-ing VERSION before including system headers
+	  On OSX the cdparanoia headers include IOKit framework headers (in particular
+	  SCSICmds_INQUIRY_Definitions.h) which define a structure that has a member
+	  named VERSION, so we must #undef VERSION before including those for things
+	  to compile on OSX.
+	  Fixes #609918.
+
+2011-05-16 17:44:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/v4l/gstv4lsrc.c:
+	  v4l: Make sure to return a subset of the filter caps in getcaps
+
+2011-05-16 17:30:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/v4l/gstv4lsrc.c:
+	  v4lsrc: fix for new getcaps function
+
+2011-05-16 17:14:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Update for segment API changes
+
+2011-05-16 17:13:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Update for GstQuery related API changes
+
+2011-05-16 17:13:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	  playsink: Update for other 0.11 API changes
+
+2011-05-16 17:08:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Use correct number of parameters to gst_pad_get_caps()
+
+2011-05-16 17:06:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+	  ext/alsa/gstalsasrc.c
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  gst-libs/gst/tag/gstxmptag.c
+	  gst/playback/gstsubtitleoverlay.c
+	  gst/videorate/gstvideorate.c
+	  sys/xvimage/xvimagesink.c
+
+2011-05-16 15:31:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/encoding/encoding.c:
+	* tests/icles/playback/test.c:
+	* tests/icles/playback/test5.c:
+	* tests/icles/playback/test6.c:
+	  tests: Update for negotiation related API changes
+
+2011-05-16 15:25:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	  vorbis: Update for negotiation related API changes
+
+2011-05-16 15:19:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	  theora: Update for negotiation related API changes
+
+2011-05-16 12:23:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  textoverlay: Update for negotiation related API changes
+
+2011-05-16 12:20:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	  ogg: Update for negotiation related API changes
+
+2011-05-16 12:18:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: Update for negotiation related API changes
+
+2011-05-16 12:17:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: Update for negotiation related API changes
+
+2011-05-16 12:04:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Update for negotiation related API changes
+
+2011-05-16 12:01:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Update for negotiation related API changes
+
+2011-05-16 11:37:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/tcp/gsttcpclientsrc.c:
+	  tcpclientsrc: Update for negotation related API changes
+
+2011-05-16 11:37:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Update for negotiation related API changes
+
+2011-05-16 11:33:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: Update for negotiation related API changes
+
+2011-05-16 11:26:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Update for negotiation related API changes
+
+2011-05-16 11:04:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamsplitter.c:
+	  encodebin: Update for negotiation related API changes
+
+2011-05-16 10:56:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: Update for negotiation related API changes
+
+2011-05-16 10:52:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: Update for negotiation related API changes
+
+2011-05-16 10:48:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Update for the new gst_pad_get_caps() signature
+
+2011-05-16 10:47:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: Update for the negotiation related API changes
+
+2011-05-16 10:44:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppayload: Change ::get_caps to include the filter caps
+	  And improve downstream negotiation a bit by passing our proposed
+	  caps to the peer as a filter.
+
+2011-05-11 17:39:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Update for negotiation related API changes
+
+2011-05-11 17:39:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Update for negotiation related API changes
+
+2011-05-16 12:02:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Update for negotiation related API changes
+
+2011-05-11 17:35:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: basetransform is now better at trying passthrough, remove workaround
+
+2011-05-16 13:48:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisenc.h:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	* gst/videorate/gstvideorate.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  -base: port to new SEGMENT API
+
+2011-05-02 11:43:38 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: optionally ensure maximum average output frame rate
+	  See #628764.
+
+2011-04-29 14:58:02 +0200  Alexey Fisher <bug-track@fisher-privat.net>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: optionally only drop frames to ensure maximum frame rate
+	  This adds option to arrange for maximal allowed variable frame rate.
+	  Fixes #628764.
+
+2011-04-26 13:37:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: use bitrate to configure streaming buffer-duration default case
+	  In particular, in audio only cases whose (estimated) metadata provides bitrate
+	  information, the buffer-size based on such bitrate (and buffer-duration)
+	  will be much more reasonable than queue2 default buffer-size.
+
+2011-04-26 11:27:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: remove some dead code
+	  ... which was dead as pads were never added to the list, and need not be added,
+	  since removing them is handled by a pad callback.
+
+2011-04-29 11:48:02 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/examples/encoding/Makefile.am:
+	  encodebin: examples: Add missing base libs to makefile
+
+2011-04-28 10:58:15 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Check for missing converters
+	  Adds checks for missing video and audio converter elements
+
+2011-04-27 22:05:55 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/xmpwriter.c:
+	  tag: xmpwriter: Rename documentation headers
+	  Fix some wrong documentation headers from the first name
+	  given to this interface.
+
+2011-04-19 08:41:53 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: xmp: New tests for the Iptc4xmpExt tags
+
+2011-04-18 23:28:13 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add Iptc4xmpExt schema support
+	  Adds Iptc4xmpExt schema with country, city and sublocation
+	  tags mapped
+
+2011-04-19 11:00:24 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add support for reading struct tags
+	  Adds a context variable that controls if the parsing is on
+	  'top level' tags or inside a struct tag.
+
+2011-04-18 16:54:54 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add struct xmp tag type support
+	  Adds support for writing the xmp struct tag type, it is a compound tag
+	  that has inner tags.
+
+2011-04-18 23:16:59 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Fixing schema maps
+	  Do not forget to create a new schema for every supported schema
+	  instead of reusing the same object
+
+2011-04-18 10:20:00 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Write the same tag to all schemas
+	  Instead of writing only the xmp tag for the first found entry
+	  that matches the gstreamer tag, look for all mappings to write
+	  the tag to different schemas.
+	  The rationale here is that some reader application might only
+	  be interested on a particular schema tags, so we should try
+	  to write as many tags for all schemas.
+
+2011-05-15 13:39:18 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstaudio.def:
+	  win32: Update libgstaudio.def for new symbols
+
+2011-05-14 17:27:30 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  baseaudiosink: Use g_str_equal() instead of strncmp()
+	  The strncmp is unnecessary anyway since one of the strings is a const
+	  string.
+
+2011-05-14 16:49:53 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: Fix trivial indentation problems
+
+2011-03-07 20:49:16 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	* gst-libs/gst/audio/gstaudioiec61937.h:
+	  audio: Add an IEC 61937 payloading library
+	  This can be used by sinks to take compressed formats, correctly payload
+	  these in IEC 61937 frames and feed these to sinks that support
+	  passthrough output over IEC 60958 (S/PDIF) or, in the case of MP3, over
+	  Bluetooth.
+	  Initial implementation includes AC3, E-AC3, MPEG-1, MPEG-2 (non-AAC),
+	  and DTS (type-I/II/II) payloading. More formats can be added as needed.
+	  API: gst_audio_iec61937_frame_size()
+	  API: gst_audio_iec61937_payload()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642730
+
+2011-03-09 11:12:39 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	  baseaudiosink: Allow subclasses to provide payloaders
+	  This allows subclasses to provide a "payload" function to prepare
+	  buffers for consumption. The immediate use for this is for sinks that
+	  can handle compressed formats - parsers are directly connected to the
+	  sink, and for formats such as AC3, DTS, and MPEG, IEC 61937 patyloading
+	  might be used.
+	  API: GstBaseAudioSinkClass:payload()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642730
+
+2011-04-09 09:49:10 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: Add support for E-AC3
+	  Adds support for pushing E-AC3 buffers and doing bytes-to-ms conversion
+	  correctly. The assumption (as with other formats) is that something like
+	  IEC 61937 payloading will be used. Correspondingly the ringbuffer spec
+	  is populated so that the data rate is 4x normal AC3.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642730
+
+2011-03-14 15:51:40 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: Add support for MPEG audio buffers
+
+2011-03-14 15:49:57 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.h:
+	  ringbuffer: Add AAC format types
+	  These are meant to be used for buffers containing AAC data. Nothing uses
+	  this yet, but for now it serves to distinguish from GST_BUFTYPE_MPEG
+	  which represents non-AAC MPEG audio.
+	  API: GST_BUFTYPE_MPEG2_AAC
+	  API: GST_BUFTYPE_MPEG4_AAC
+
+2011-03-09 22:57:00 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: Add support for DTS buffers
+
+2011-05-14 11:42:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Require core 0.10.34.1 for the new ghostpad API
+
+2011-05-09 22:20:23 +0200  Andoni Morales Alastruey <ylatuya@gmail.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix preroll for streams at low bitrates
+	  For streams at low bitrates we need to set a limit in time because the limit
+	  in bytes might not reached too late, sometimes more than 30 seconds.
+	  This limit can only be set if upstream is seekable (see #584104)
+	  Closes #647769
+
+2011-05-09 13:11:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Use new ghostpad/proxypad API to get the internal pad
+
+2011-05-09 12:59:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkaudioconvert.h:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.h:
+	  playsink: Use new ghostpad/proxypad API
+
+2011-05-09 12:50:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/playbin2-compressed.c:
+	  playbin2: Disable some compressed stream tests that are racy without a stream-activate event
+
+2011-03-29 19:15:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/playbin2-compressed.c:
+	  playbin2: Reset buffer counter in playbin2-compressed tests every time when going to READY
+
+2011-03-25 08:26:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysinkaudioconvert.c:
+	* gst/playback/gstplaysinkaudioconvert.h:
+	* gst/playback/gstplaysinkvideoconvert.c:
+	* gst/playback/gstplaysinkvideoconvert.h:
+	  playsink: Add audio and video converter convenience bins
+	  These reconfigure based on the caps and plugin in converters if
+	  necessary. This also makes switching between compressed and raw
+	  streams work flawlessly without loosing the states of any element
+	  somewhere or having running time problems.
+
+2011-03-15 12:51:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2/playsink: Decide if A/V caps are raw only inside playsink
+	  Before playbin2 would use different selectors for raw audio and
+	  compressed audio (and the same for video) and used different
+	  pads from playsink. This made the involved logic much more
+	  complex and was not implemented completely in playsink, which
+	  made it impossible to support files with a compressed and
+	  uncompressed stream that is support by the sink.
+	  playbin2 handles raw/non-raw streams the same now and the
+	  decision is left to playsink, which now can also handle
+	  caps changes from raw to non-raw and the other way around.
+	  Fixes bug #632788.
+
+2011-03-15 11:41:14 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/playbin2-compressed.c:
+	  playbin2: Add unit test for compressed stream support in playbin2/playsink
+
+2011-05-09 12:56:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc: Fix some compilation errors
+
+2011-05-09 11:50:05 +0200  Pontus Oldberg <pontus.oldberg@invector.se>
+
+	* ext/alsa/gstalsasrc.c:
+	* ext/alsa/gstalsasrc.h:
+	  alsasrc: Improve timestamp accuracy
+	  Fixes bug #635256.
+
+2011-05-06 17:01:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Use new, public ghostpad functions
+
+2011-05-03 11:26:32 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Use GST_BOILERPLATE
+
+2011-05-14 09:41:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development
+
+=== release 0.10.34 ===
+
+2011-05-14 01:00:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.34
+
+2011-05-11 19:12:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* gst-libs/gst/video/gstmetavideo.c:
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  -base: remove metadata (des)serialize functions
+
+2011-05-10 18:39:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/adder/gstadder.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamsplitter.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/v4l/gstv4lsrc.c:
+	* sys/xvimage/xvimagesink.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/audio-trickplay.c:
+	* tests/icles/playback/test5.c:
+	* tests/icles/playback/test6.c:
+	  -base_port to new query API
+
+2011-05-10 16:44:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* gst/adder/gstadder.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamsplitter.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	  -base: fix for now request pad API
+
+2011-05-10 15:43:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: use new query method names
+
+2011-05-10 13:35:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gsturidecodebin.c:
+	* tests/examples/gio/giosrc-mounting.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  message: don't acces the structure directly
+
+=== release 0.10.33 ===
+
+2011-05-10 09:32:11 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.33
+	  Highlights:
+	  - support for 16-bit-per-component video formats
+	  - playbin2 fixes and improvements for custom and non-raw sinks
+	  - oggmux muxes based on running time now
+	  - many other fixes and improvements
+
+2011-05-10 11:54:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  event: don't access the event structure
+	  the event structure is now hidden, so don't access it directly.
+
+2011-05-09 18:53:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/theora/gsttheoradec.c:
+	* gst/playback/gststreamsynchronizer.c:
+	  qos: _qos_full -> _qos
+
+2011-05-09 18:16:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/adder/gstadder.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/videorate/gstvideorate.c:
+	  segment: fix for new core API
+	  Fix for gst_*_segment_full rename.
+
+2011-05-09 16:42:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: abs_rate is removed from segment structure
+
+2011-05-09 15:41:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: use the right pad
+
+2011-05-09 15:37:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* ext/libvisual/visual.c:
+	  visual: use CAPS event to configure caps
+
+2011-05-09 15:37:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/vorbis/gstvorbisdec.c:
+	  theora/vorbis: use default pad handler
+	  Use the default pad event handler because we are not supposed to pass on CAPS
+	  events.
+
+2011-05-09 13:05:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/tags.c:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaysink.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/videorate/gstvideorate.c:
+	* tests/examples/app/appsink-src.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/examples/snapshot/snapshot.c:
+	  -base: don't use buffer caps
+	  Port to newest 0.11 core API, remove GST_PAD_CAPS and GST_BUFFER_CAPS.
+
+2011-05-08 13:24:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: fix getcaps function
+	  Explicitely get the possible caps in the sinkpad instead of using an old removed
+	  function.
+
+2011-05-08 13:09:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: avoid setting caps on buffers
+	  We don't need to set caps on buffers anymore, this is now done with a caps
+	  event.
+
+2011-05-06 11:31:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: avoid unreffing a NULL object
+
+2011-05-05 18:47:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Update for new GstIterator API
+
+2011-05-05 18:47:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Update for new GstIterator API
+
+2011-05-05 18:38:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gststreamselector.c:
+	  streamselector: Return a NULL iterator instead of an empty iterator that returns NULL if there's no otherpad
+
+2011-05-05 18:35:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybasebin.c:
+	  playbasebin: Update for new GstIterator API
+
+2011-05-05 18:29:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Fix usage of gst_iterator_fold()
+
+2011-05-05 16:05:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: Update exports
+
+2011-05-05 16:04:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/icles/playback/test5.c:
+	* tests/icles/playback/test6.c:
+	  icles: Update for new GstIterator API
+
+2011-05-05 16:03:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	  gst: Update for new GstIterator API
+
+2011-05-05 15:30:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	  capsfilter-renegotiation: Fix for the removal of the bufferalloc function
+
+2011-05-03 12:57:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Send reconfigure event upstream if the window geometry changes
+
+2011-04-28 10:55:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Add caps with the current window geometry to the top in getcaps
+
+2011-01-17 14:12:06 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	  tests: capsfilter-renegotiation: New renegotiation use cases
+	  Adds some new tests for renegotiation use cases that would
+	  use the new renegotiate event
+
+2011-04-29 14:14:53 +0200  Philippe Normand <pnormand@igalia.com>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* tests/check/libs/profile.c:
+	  base: presets moved from $HOME/.gstreamer-0.11 to $HOME/.local/share/gstreamer-0.11
+
+2011-05-03 09:49:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+
+2011-05-02 11:11:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/theora/gsttheoradec.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/xvimage/xvimagesink.c:
+	  plugins: fix for allocation query API change
+
+2011-04-30 17:35:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* po/da.po:
+	* po/de.po:
+	* po/fr.po:
+	* po/uk.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.32.4 pre-release
+
+2011-04-30 17:21:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.c:
+	  gst: update orc-generated disted C backup code to orc 0.4.14
+
+2011-04-29 18:23:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: add bufferpool support to libvisual
+
+2011-04-29 16:52:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	  theoradec: use bufferpool
+
+2011-04-29 13:48:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/audioresample.c:
+	* tests/check/elements/videoscale.c:
+	  tests: make unit tests compile
+
+2011-04-29 13:28:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/subparse/gstsubparse.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  remove buffer_alloc
+
+2011-04-29 12:10:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	  videotestsrc: use ALLOCATION query
+	  Use the allocation query to get the buffer parameters and potentially a
+	  bufferpool from downstream. Use the bufferpool to create buffers.
+
+2011-04-29 12:09:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: implement ALLOCATION query
+
+2011-04-29 11:27:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	  metavideo: add flags and a define for the API
+
+2011-04-28 19:28:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+
+2011-04-28 19:20:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstmetavideo.c:
+	* gst-libs/gst/video/gstmetavideo.h:
+	  metavideo: first attempt at video metadata
+	  Add a first version of video metadata for buffers that can contain more info
+	  about the video such as strides and flags etc.
+
+2011-04-27 12:09:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* po/bg.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/ru.po:
+	* po/sl.po:
+	* po/tr.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.32.3 pre-release
+
+2011-04-25 11:32:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  tests: fix test
+
+2011-04-25 11:20:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst/videoscale/gstvideoscale.c
+
+2011-04-24 18:45:40 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_image.c:
+	  videoscale: Fix off-by-one error in previous commit
+	  Fix for 7c0b702e.  It helps to get your j+1's right.
+
+2011-04-24 18:16:20 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_image.c:
+	  videoscale: Fix ARGB bilinear scaling
+	  Fixes #648548.  Orc generates bad code for
+	  gst_videoscale_orc_resample_merge_bilinear_u32, so we'll use the
+	  slightly slower two-stage process.  I'd fix Orc, but it's hard to
+	  get excited about fixing a feature that I'm planning to deprecate
+	  and replace.
+
+2011-04-23 13:42:23 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_image.c:
+	  videoscale: hack to fix invalid reads in linear
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633837
+
+2011-04-23 12:46:09 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: protect 4tap from out-of-bounds reads
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633837
+
+2011-04-24 14:03:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From c3cafe1 to 46dfcea
+
+2011-04-23 12:44:50 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: use simpler scaling method for small images
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633837
+
+2011-04-14 09:32:19 +0200  Marc Plano-Lesay <marc.planolesay@gmail.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: fix unused-but-set-variable warnings with gcc 4.6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-22 13:55:20 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	  tag: exif: register common tags from tag library
+	  Exif uses tags like  image-vertical-ppi or image-horizontal-ppi which are
+	  registered in gst_tag_register_musicbrainz_tags(), but neither GstExifReader
+	  nor GstExifWriter register them.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648459
+
+2011-04-24 12:16:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tag: update some FIXMEs for 0.11
+
+2011-04-21 14:11:49 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  tests: add unit test for basetransform/videoscale negotiation regression
+	  Turn Rene's test pipeline into a unit test.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648220
+
+2011-04-19 16:40:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/v4l/gstv4lelement.c:
+	* sys/v4l/gstv4lsrc.c:
+	  v4l: use G_DEFINE_TYPE
+
+2011-04-19 14:31:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: GstElement takes ownership of pad templates and it should be called from class_init now, not base_init
+
+2011-04-19 14:21:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/audiorate.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/playbin2.c:
+	* tests/check/elements/videoscale.c:
+	* tests/check/libs/cddabasesrc.c:
+	* tests/check/libs/mixer.c:
+	* tests/check/libs/navigation.c:
+	* tests/check/libs/xmpwriter.c:
+	  tests: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 14:11:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsamixerelement.c:
+	* ext/alsa/gstalsamixertrack.c:
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosrc.c:
+	* ext/gio/gstgiostreamsink.c:
+	* ext/gio/gstgiostreamsrc.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttimeoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	  ext: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 11:44:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  sys: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 11:36:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Remove filter-length property, it only existed for backward compatibility
+
+2011-04-19 11:35:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiorate/gstaudiorate.h:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversink.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/volume/gstvolume.c:
+	  gst: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 10:54:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  cddabasesrc: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 10:52:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audio: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-19 10:47:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	  app: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-18 18:30:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  gstbasertppayload: Use g_once_init_{enter,leave}() in the _get_type() function
+
+2011-04-18 18:29:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  rtp: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-04-18 13:23:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2010-11-25 17:01:53 +0100  Håvard Graff <havard.graff@.eu.tandberg.int>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: make sure to not start if the may_start flag is FALSE
+	  Fixes #635784
+
+2011-04-18 11:24:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: If NULL caps are passed to buffer_alloc() do fallback allocation
+	  Fixes bug #647857.
+
+2011-04-18 10:19:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/pipelines/oggmux.c:
+	  oggmux: Remove bus GSource to prevent a valgrind warning
+
+2011-04-18 09:16:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/pipelines/gio.c:
+	  gio: Remove the bus GSource from the main context
+	  Prevents a valgrind warning about possibly leaked memory,
+	  see bug #647763.
+
+2011-04-17 19:33:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/sdp/Makefile.am:
+	  sdp: remove gst_init() for g-i scanner here again as well to avoid problems with -Wl,--as-needed
+
+2011-04-17 17:59:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/fft/Makefile.am:
+	  fft: remove gst_init() for g-i scanner again
+	  libgstfft doesn't actually use any symbols from libgstreamer, so when
+	  compiling with -Wl,--as-needed it won't even link to it, which can
+	  cause failures with older versions of g-i that ignore the --pkg
+	  arguments.
+	  Should fix PPA build failure on Ubuntu Maverick
+
+2011-04-16 16:31:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Always hold the class-global pango mutex when using pango API
+
+2011-04-16 16:23:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gsttimeoverlay.c:
+	  {time,clock}overlay: Hold the class-global pango mutex when changing the pango context
+
+2011-04-16 16:21:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gsttimeoverlay.c:
+	  {clock,time}overlay: Only set the global pango context options once in class_init
+	  Instead of doing it over and over again when instantiating a new instance.
+
+2011-04-16 16:18:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  pango: Create a new pango context for every subclass
+	  timeoverlay/clockoverlay are setting some global options
+	  on the context that shouldn't be used for the generic textoverlay.
+
+2011-04-16 16:03:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	  0.10.32.2 pre-release
+
+2011-04-16 15:58:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/adder/gstadderorc-dist.c:
+	* gst/adder/gstadderorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.h:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  gst: update disted orc backup code
+
+2011-04-16 15:50:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  docs: update documentation
+
+2011-04-16 15:42:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translations
+
+2011-03-31 17:56:00 +0000  Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+	* Android.mk:
+	* configure.ac:
+	* ext/vorbis/Makefile.am:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/gstvorbisdeclib.h:
+	  vorbis: add support for using tremolo on android
+	  Tremolo is an ARM-optimised version of xiph's tremor library.
+
+2011-04-16 16:14:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: Update new code for 0.11 buffer API
+
+2011-04-16 16:06:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-04-16 15:56:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/Makefile.am:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gstclockoverlay.h:
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	* ext/pango/gsttimeoverlay.c:
+	* ext/pango/gsttimeoverlay.h:
+	  pango: Create a new base class for all the elements
+	  This prevents the ugly hack where the text_sink pad template
+	  was only added for textoverlay but not for the subclasses.
+	  Also makes this work with the core change that made
+	  subclasses inherit the templates of their parent class.
+
+2011-04-15 13:36:39 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggmux: prefer headers from caps to determine stream type
+	  Ogg mandates the first header packet must determine a stream's type.
+	  However, some streams (such as VP8) do not include such a header
+	  when muxed in other containers, and thus do not include this header
+	  as a buffer, but only in caps. We thus use headers from caps when
+	  available to determine a new stream's type.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647856
+
+2011-04-16 11:00:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  libs: gobject-introspection scanner doesn't need to scan or update plugin info
+	  Make sure the scanner doesn't load or introspect or check any plugins,
+	  (especially not outside the build directory).
+
+2011-04-16 09:33:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-04-16 09:12:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-04-15 21:09:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: list libs/struct*h files explicitly in Makefile.am
+	  Hopefully makes the gentoo buildbot happy again.
+
+2011-04-15 11:11:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: avoid foregoing READY_TO_NULL when appropriate
+
+2011-04-14 22:13:21 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: ensure proper PAUSED_TO_READY cleanup
+	  ... since going async to PAUSED might fail, and never making it to PAUSED
+	  subsequently skips going down to READY.
+	  Fixes #647781.
+
+2011-04-14 12:42:20 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	  Revert "video: Remove the extensive checkings from switch"
+	  This reverts commit 500d14c35c656890686574e1c041fb556df17056.
+
+2011-04-14 13:15:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  encodebin: Unref encoding profiles after usage in the test
+
+2011-04-14 12:55:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  encodebin: Release pads after setting the state to NULL in the unit test
+	  See bug #647756.
+
+2011-04-14 12:23:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Set all elements to NULL and remove them from the bin when removing a source group
+
+2011-04-14 00:26:34 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* gst-libs/gst/video/video.c:
+	  video: Remove the extensive checkings from switch
+	  The default case handles them already
+
+2011-04-13 23:17:34 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: tag: Fix typo
+
+2011-04-13 23:17:14 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds mapping for GST_TAG_CAPTURING_EXPOSURE_COMPENSATION
+	  Adds mapping for GST_TAG_CAPTURING_EXPOSURE_COMPENSATION for xmp
+	  library.
+	  Includes unit tests.
+
+2011-04-13 23:16:02 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds mapping for GST_TAG_CAPTURING_EXPOSURE_COMPENSATION
+	  Adds mapping for GST_TAG_CAPTURING_EXPOSURE_COMPENSATION for exif
+	  library.
+	  Includes unit tests.
+
+2011-04-13 23:13:59 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tag: Adds GST_TAG_CAPTURING_EXPOSURE_COMPENSATION
+	  Adds a new tag for indicating the used exposure compensation
+	  level in EV used when capturing an image.
+	  API: GST_TAG_CAPTURING_EXPOSURE_COMPENSATION
+
+2011-04-14 00:24:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/encoding/gstcapslist.c:
+	* tests/examples/gio/giosrc-mounting.c:
+	* tests/examples/playrec/playrec.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  tests: fix unused-but-set-variable warnings with gcc 4.6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-13 23:57:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: fix unused-but-set-variable warnings with gcc 4.6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-13 23:19:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: fix unused-but-set-variable warnings with gcc 4.6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-13 22:59:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: fix unused-but-set-variable warning with gcc 4.6
+	  We don't compare the bitrates of consecutive mp3 frames on purpose
+	  here.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-13 09:10:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  docs: fix typo in video format docs
+
+2011-04-12 12:41:06 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix uninitialised variable usage and element leak
+	  gcc on OSX complains about ret being used uninitialized in
+	  this function, and it is right. Don't leak element ref
+	  when returning early because newsegment event is not in
+	  TIME format.
+
+2011-04-12 12:20:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: do check return values of fcntl() and fstat()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-09 19:15:23 +0200  Marc Plano-Lesay <marc.planolesay@gmail.com>
+
+	* gst/playback/gstplaybasebin.c:
+	* gst/subparse/tmplayerparse.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/videoscale/vs_image.c:
+	  fix unused-but-set-variable warnings with gcc 4.6
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647294
+
+2011-04-06 22:57:41 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	  rtsptranport: ensure valid int result when parsing ranges
+	  Specifically, make sure that the return value of strtol is falling in
+	  between the range of G_MININT and G_MAXINT.
+	  Fixes #646952.
+
+2011-04-06 16:27:54 +0100  Bastien Nocera <hadess@hadess.net>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-profile: fix unused-but-set-variable warnings with gcc 4.6
+	  Top-level profiles don't have restrictions, only stream profiles,
+	  so no need to serialise that here.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646925
+
+2011-04-11 14:29:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: dist all struct_*.h files for libs ABI test
+	  Should fix distcheck on x86_64.
+
+2011-04-11 15:02:38 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: empty caps have no structure to pick
+
+2011-04-11 11:37:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  android/alsa.mk
+	  android/app.mk
+	  android/app_plugin.mk
+	  android/audio.mk
+	  android/audioconvert.mk
+	  android/decodebin.mk
+	  android/decodebin2.mk
+	  android/gdp.mk
+	  android/interfaces.mk
+	  android/netbuffer.mk
+	  android/pbutils.mk
+	  android/playbin.mk
+	  android/queue2.mk
+	  android/riff.mk
+	  android/rtp.mk
+	  android/rtsp.mk
+	  android/sdp.mk
+	  android/tag.mk
+	  android/tcp.mk
+	  android/typefindfunctions.mk
+	  android/video.mk
+
+2011-04-11 10:06:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	  tag: fix typo in ID3 genres
+	  psychadelic -> psychedelic. Spotted by Sébastien Wilmet.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647399
+
+2011-01-27 17:28:51 +0100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* Android.mk:
+	* android/alsa.mk:
+	* android/app.mk:
+	* android/app_plugin.mk:
+	* android/audio.mk:
+	* android/audioconvert.mk:
+	* android/audioresample.mk:
+	* android/audiotestsrc.mk:
+	* android/decodebin.mk:
+	* android/decodebin2.mk:
+	* android/ffmpegcolorspace.mk:
+	* android/gdp.mk:
+	* android/gst-libs/gst/app/gstapp-marshal.c:
+	* android/gst-libs/gst/app/gstapp-marshal.h:
+	* android/gst-libs/gst/audio/audio-enumtypes.c:
+	* android/gst-libs/gst/audio/audio-enumtypes.h:
+	* android/gst-libs/gst/interfaces/interfaces-enumtypes.c:
+	* android/gst-libs/gst/interfaces/interfaces-enumtypes.h:
+	* android/gst-libs/gst/interfaces/interfaces-marshal.c:
+	* android/gst-libs/gst/interfaces/interfaces-marshal.h:
+	* android/gst-libs/gst/pbutils/pbutils-enumtypes.c:
+	* android/gst-libs/gst/pbutils/pbutils-enumtypes.h:
+	* android/gst-libs/gst/rtsp/gstrtsp-enumtypes.c:
+	* android/gst-libs/gst/rtsp/gstrtsp-enumtypes.h:
+	* android/gst-libs/gst/rtsp/gstrtsp-marshal.c:
+	* android/gst-libs/gst/rtsp/gstrtsp-marshal.h:
+	* android/gst-libs/gst/video/video-enumtypes.c:
+	* android/gst-libs/gst/video/video-enumtypes.h:
+	* android/gst/playback/gstplay-marshal.c:
+	* android/gst/playback/gstplay-marshal.h:
+	* android/gst/tcp/gsttcp-enumtypes.c:
+	* android/gst/tcp/gsttcp-enumtypes.h:
+	* android/gst/tcp/gsttcp-marshal.c:
+	* android/gst/tcp/gsttcp-marshal.h:
+	* android/interfaces.mk:
+	* android/netbuffer.mk:
+	* android/pbutils.mk:
+	* android/playbin.mk:
+	* android/queue2.mk:
+	* android/riff.mk:
+	* android/rtp.mk:
+	* android/rtsp.mk:
+	* android/sdp.mk:
+	* android/tag.mk:
+	* android/tcp.mk:
+	* android/typefindfunctions.mk:
+	* android/video.mk:
+	* android/videoscale.mk:
+	* android/videotestsrc.mk:
+	* ext/ogg/Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* gst/adder/Makefile.am:
+	* gst/app/Makefile.am:
+	* gst/audioconvert/Makefile.am:
+	* gst/audiorate/Makefile.am:
+	* gst/audioresample/Makefile.am:
+	* gst/audiotestsrc/Makefile.am:
+	* gst/encoding/Makefile.am:
+	* gst/ffmpegcolorspace/Makefile.am:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+	* gst/gdp/Makefile.am:
+	* gst/playback/Makefile.am:
+	* gst/tcp/Makefile.am:
+	* gst/typefind/Makefile.am:
+	* gst/videorate/Makefile.am:
+	* gst/videoscale/Makefile.am:
+	* gst/videotestsrc/Makefile.am:
+	* gst/volume/Makefile.am:
+	* tools/Makefile.am:
+	  android: make it ready for androgenizer
+	  Remove the android/ top dir
+	  Fixe the Makefile.am to be androgenized
+	  To build gstreamer for android we are now using androgenizer which generates the
+	  needed Android.mk files.
+	  Androgenizer can be found here:
+	  http://git.collabora.co.uk/?p=user/derek/androgenizer.git
+
+2011-04-09 02:01:08 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Add new header file to spec file
+
+2011-04-08 15:10:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtp: Unref events if the parent element disappeared or has no event handler implemented
+
+2011-01-06 18:20:58 +0100  Ole André Vadla Ravnås <oravnas@cisco.com>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtp: fix pad callbacks so they handle when parent goes away
+	  1) We need to lock and get a strong ref to the parent, if still there.
+	  2) If it has gone away, we need to handle that gracefully.
+	  This is necessary in order to safely modify a running pipeline. Has been
+	  observed when a streaming thread is doing a buffer_alloc() while an
+	  application thread sends an event on a pad further downstream, and from
+	  within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
+	  while the streaming thread has its buffer_alloc() in progress.
+
+2011-03-20 08:59:33 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Make src query MT-safe
+	  It is possible that the element might be going down while the event arrives
+
+2011-04-08 15:00:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: Unref events if the parent element disappeared
+
+2011-03-21 16:03:16 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: make upstream queries and events MT-safe
+
+2011-04-07 16:19:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/rtp/gstbasertpdepayload.c
+
+2011-04-07 16:07:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  ximage: don't share the memory
+	  We can't share the memory on the buffer with other buffers because the metadata
+	  X(v)Image points to it and we don't want it to go away.
+
+2011-04-06 16:25:37 +0100  Bastien Nocera <hadess@hadess.net>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: Remove unused variables
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646924
+
+2011-04-07 10:06:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix creation of grayscale caps
+	  The endianness was not set correctly before.
+	  Fixes bug #646923.
+
+2011-04-06 19:21:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: make the show_frame function prettier
+
+2011-04-06 17:54:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  ximage: more fixes
+
+2011-04-06 16:33:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  ext/theora/gsttheoraenc.c
+
+2011-04-06 16:26:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  ximage: more fixes
+
+2011-04-06 16:11:02 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* docs/design/part-interlaced-video.txt:
+	  docs: Update interlaced video design document
+	  The RFF flag is to be reused for buffers in the telecine state to
+	  indicate that the buffer contains only unneeded repeated fields that are
+	  present in other buffers and as such this buffer can be dropped.
+
+2011-04-06 12:26:47 +0200  benjamin gaignard <benjamin.gaignard@linaro.org>
+
+	* sys/ximage/ximage.c:
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/Makefile.am:
+	* sys/xvimage/xvimage.c:
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  xvimagesink: use bufferpool
+	  Improve bufferpool handling in ximagesink.
+	  Implement bufferpool handling on xvimagesink.
+	  Based on patches from benjamin gaignard <benjamin.gaignard@linaro.org>
+
+2011-03-25 16:59:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: refactor multipass file writing
+
+2011-02-08 14:02:20 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: minor simplification
+	  ... which avoids crashing in the off-chance that structure == NULL.
+
+2011-04-05 18:14:49 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/discoverer.c:
+	  tests: add basic unit tests for discoverer
+
+2010-08-24 13:14:33 +0200  Pascal Buhler <pascal.buhler@tandberg.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  rtcpbuffer: Round to next 32bit word, not current 32bit word at end of SDES chunk
+
+2011-04-05 11:32:52 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: don't paint the window black when going to NULL
+	  Leave dealing with the appearance of the window when we are not playing to the
+	  applications. We anyway want to go to NULL as quickly as possible.
+	  Fixes #635800
+
+2011-04-04 16:00:30 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* tests/check/libs/video.c:
+	  video: Fix YUV9 and YVU9 again
+
+2011-04-04 23:41:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  tag: fix compiler warning on OSX
+	  gstvorbistag.c: In function 'gst_tag_list_from_vorbiscomment_buffer':
+	  gstvorbistag.c:371: warning: 'data' may be used uninitialized in this function
+
+2011-04-04 23:23:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/.gitignore:
+	  tests: ignore xmpwriter unit test binary
+
+2011-04-04 17:21:45 +0200  Haakon Sporsheim <haakon.sporsheim@gmail.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: use gst/math-compat.h header.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646744
+
+2011-04-04 17:23:53 +0200  Haakon Sporsheim <haakon.sporsheim@gmail.com>
+
+	* gst-libs/gst/tag/xmpwriter.c:
+	  tag: Remove constness to silence MS compiler.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646744
+
+2011-04-04 17:23:13 +0200  Haakon Sporsheim <haakon.sporsheim@gmail.com>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: Explicit cast to GThreadFunc to silence MS compiler.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646744
+
+2011-04-04 15:56:50 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 1ccbe09 to c3cafe1
+
+2011-04-04 11:44:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* tests/check/libs/video.c:
+	  fix compilation after merge
+
+2011-04-04 11:31:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  gst-libs/gst/tag/gstvorbistag.c
+
+2011-03-11 10:41:11 +0100  Trond Andersen <trondand@cisco.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  rtcpbuffer: fix invalid read in validation of padding in rtcp packet
+
+2011-02-23 10:55:12 +0100  Stian Johansen <stian.johansen@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: Add src object lock around call to ringbuffer parse caps.
+	  A race was observed between query() and setcaps() where the latter would
+	  change the ringbuffer spec while the former was performing operations
+	  based this data.
+
+2011-01-22 23:09:32 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: protect against ringbuffer disappearing while in a query
+	  Observed a case where the src went to null-state during the query,
+	  hence the spec pointer was no longer valid, and
+	  gst_util_unit64_scale_int crashed (assertion `denom > 0´failed)
+	  Add locking to make sure the ringbuffer can't disappear.
+
+2011-02-08 18:27:43 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: don't allow aligning behind the read-segment
+	  Given a large enough drift-tolerance, one could end up in a situation
+	  where one would keep aligning the written buffers behind the current
+	  read-segment position. The result for the reader would be complete
+	  silence, possible preceded by very choppy audio.
+	  By checking the available headroom, one can determine if there is
+	  room to do alignment, or if one should resort to a resync instead to get
+	  the pointers back on track.
+	  Also refactor the alignment-logic out of the render function for cleaner
+	  code.
+
+2011-04-01 13:55:26 -0700  David Schleef <ds@schleef.org>
+
+	* gst/encoding/Makefile.am:
+	* gst/playback/Makefile.am:
+	  Remove setting of plugindir from Makefiles
+
+2011-03-23 23:10:51 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* tests/check/libs/video.c:
+	  video: Fix height calculation for YUV9/YVU9
+
+2011-04-01 15:34:30 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix warning building in mac os x
+
+2011-04-01 15:33:42 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: fix comparison is always false due to limited range of data type
+	  Perform calculation in a temp var with enough room as there's guarantee that
+	  ret will be able to hold the result for example in _blit_AYUV.
+
+2011-04-01 12:52:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Write GST_TAG_IMAGE and GST_TAG_PREVIEW_IMAGE as METADATA_BLOCK_PICTURE
+	  This is the official, standardized way of embedding images into
+	  vorbiscomments now.
+
+2011-04-01 12:28:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Add support for METADATA_BLOCK_PICTURE tags
+	  This is the official, standardized way of embedding pictures
+	  inside vorbiscomments now. Parsing code taken from flacparse
+	  and slightly changed.
+	  Fixes bug #635669.
+
+2011-04-01 12:09:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Use g_base64_decode_inplace()
+	  Instead of using the GLib base64 decoding functions manually to
+	  do inplace base64 decoding. This makes the code easier to understand.
+
+2011-04-01 11:00:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: Store the segment directly inside the pad
+	  Also initialize it always in TIME format. We require TIME segments
+	  in oggmux anyway and drop newsegment events in other formats and
+	  assume an open-ended segment starting at 0.
+
+2011-04-01 10:57:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Reset the segment on flush-stop events and when going back to READY
+
+2011-03-03 08:45:15 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Use running time instead of timestamps
+	  Theora and vorbis use running time (which is correct) for calculating
+	  the granulepos for their ogg packets. Oggmux, however, used
+	  timestamps to order the received buffers.
+	  This patch makes it use the running time to compare buffer times
+	  and also to timestamp pushed buffers.
+	  Some bits of the code still use timestamps, but they are only
+	  used to calculate durations, so it should be fine.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=643775
+
+2011-02-16 16:07:49 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: Keep track of pad's segments
+	  https://bugzilla.gnome.org/show_bug.cgi?id=643775
+
+2011-04-01 10:39:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Add support for xBGR and RGBx
+	  Now all RGB variants are supported.
+
+2011-01-17 21:12:18 -0700  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Added support for ARGB and other RGB alpha variants
+
+2011-01-11 10:34:33 -0700  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: converted AYUV to use 'A OVER B' alpha compositing
+	  'A OVER B' compositing is explained at
+	  http://en.wikipedia.org/wiki/Alpha_compositing.
+	  Previously, overlaying text on a transparent background image left the
+	  text overlay also transparent. This pipeline shows such an example:
+	  gst-launch videotestsrc pattern=white ! video/x-raw-yuv,format=\(fourcc\)AYUV ! alpha alpha=0.0 ! textoverlay text=Testing auto-resize=False font-desc=60px ! videomixer ! ffmpegcolorspace ! autovideosink
+	  With this patch, text is composited "OVER" the background image and
+	  thus is visible regardless of the alpha of the background image. The
+	  overlay in the above pipeline works after applying this patch.
+
+2011-03-31 18:40:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_x86_64.h:
+	* tests/check/libs/xmpwriter.c:
+	  fixes for new API
+
+2011-03-31 17:53:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-03-31 17:47:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst/gdp/gstgdppay.c:
+	* tests/check/elements/appsink.c:
+	  bufferlist: fixes for new API
+
+2011-03-28 22:00:25 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	  baseaudiosink: arrange for running clock when rendering eos
+	  Commit ba2e500bd992d8ad7db0da923801964964835967 ensured to provide
+	  a running clock when EOS had finished rendering.  However,
+	  other measures are needed (and were in place before) to ensure a
+	  running clock when EOS still needs rendering (i.e. waiting).
+	  So, specifically, re-introduce eos_rendering removed in aforementioned commit,
+	  this time as a public variable so subclasses can be aware of the situation.
+	  Fixes (part of) #645961.
+	  API: GstBaseAudioSink:eos_rendering
+
+2011-03-31 12:37:32 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_i386_osx.h:
+	  tests: Fixes libsabi for MacOSX/32bit.
+	  GStaticRecMutex is 60bytes on macosx/32bit (As opposed to 40).
+	  Fixes #644996
+
+2011-03-31 10:38:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_x86_64.h:
+	  libsabi: Add structure sizes for x86-64
+
+2011-03-09 11:51:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  libs: make sure gobject-introspection scanner calls gst_init()
+	  Cherry-picked from 0.11, since it's the right thing to do (we
+	  now silently rely on various _get_type() working without
+	  gst_init() having been called).
+
+2011-03-30 20:57:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  libs: replace 0.10 with @GST_MAJORMINOR@ in Makefile.am
+	  For easier cherry-picking/merging later.
+
+2011-03-30 20:35:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmp: fix after merge conflict
+
+2011-03-30 20:23:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11-fdo
+	  Conflicts:
+	  gst-libs/gst/tag/gstxmptag.c
+
+2011-03-30 16:50:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/riff/riff-read.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst/audiorate/gstaudiorate.c:
+	  Fix for latest API changes
+
+2011-03-30 15:47:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/typefindfunctions.c:
+	* tests/files/Makefile.am:
+	* tests/files/hls.m3u8:
+	  tests: add typefind test for application/x-hls
+	  To make sure we don't break detection when we add typefinding
+	  for normal m3u8 playlists.
+
+2011-03-30 15:44:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: rename type playlist/m3u8 to application/x-hls
+	  We should keep playlist/m3u8 available for normal m3u8 playlists,
+	  which we we'll likely support some day. Also, we probably don't
+	  want this handled like other playlists, so application/* seems
+	  more appropriate in this case, even if it's really just a playlist.
+
+2011-03-30 09:18:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Fix comment typo and add a link the the HTTP live streaming spec
+
+2011-03-30 09:12:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Use the DataScanCtx for the m3u8 typefinder
+
+2011-02-14 19:05:09 +0100  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: add m3u8 playlists
+
+2011-03-21 15:34:09 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/xmpwriter.c:
+	  tagxmpwriter: Add check tests
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645167
+
+2011-03-17 15:42:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/xmpwriter.c:
+	* gst-libs/gst/tag/xmpwriter.h:
+	* win32/common/libgsttag.def:
+	  tagxmpwriter: Adds a new GstTagXmpWriter interface
+	  The GstTagXmpWriter interface is to be implemented on elements that
+	  provide xmp serialization. It allows users to select which
+	  xmp schemas should be used on serialization.
+	  API: GstTagXmpWriter
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645167
+
+2011-03-18 09:28:23 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* gst-libs/gst/tag/tag.h:
+	* win32/common/libgsttag.def:
+	  tag: xmp: Add function to list the available schemas
+	  Adds a function to list the available schemas in our xmp lib
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645167
+
+2011-03-29 15:41:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  encodebin: Requesting a pad again now gives a g_return_val_if_fail()
+	  Before the behaviour was undefined and implemented differently by elements,
+	  now core checks for this (and other problems) and returns NULL and an assertion.
+
+2011-03-29 11:08:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  remove deprecated buffer methods
+
+2011-03-28 20:19:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggparse.c:
+	  oggparse: fix for _make_writable
+
+2011-03-28 20:13:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11-fdo
+
+2011-03-28 19:23:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisenc.c:
+	* gst-libs/gst/audio/audio.c:
+	* tests/check/pipelines/vorbisenc.c:
+	* win32/common/libgstapp.def:
+	* win32/common/libgstnetbuffer.def:
+	* win32/common/libgstrtp.def:
+	* win32/common/libgsttag.def:
+	  tests: fix more checks
+
+2011-03-28 18:42:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	* tests/check/libs/rtp.c:
+	  tests: fix RTP and RTCP unit tests
+
+2011-03-28 18:22:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  test: fic tag check
+
+2011-03-28 18:17:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/profile.c:
+	  tests: fix patch names and g_object_unref
+
+2011-03-28 18:01:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/pbutils.c:
+	  tests: fix version number checks
+
+2011-03-28 17:58:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  netbuffer: fix netbuffer add function
+
+2011-03-28 17:53:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  tests: fix more tests
+	  refcounts are always 1 because subbuffers don't ref the original buffer anymore,
+	  just the memory.
+
+2011-03-28 17:46:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/gdppay.c:
+	* tests/check/elements/subparse.c:
+	  tests: fix more unit tests
+
+2011-03-28 17:02:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encodebin: fix new profile unref
+
+2011-03-28 16:54:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.c:
+	* tests/check/elements/decodebin.c:
+	* tests/check/elements/decodebin2.c:
+	* tests/check/elements/textoverlay.c:
+	* tests/check/elements/vorbistag.c:
+	* tests/check/pipelines/vorbisenc.c:
+	  tests: fix some unit tests
+
+2011-03-28 15:51:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/gstlibscpp.cc:
+	* tests/check/libs/video.c:
+	* tests/check/pipelines/streamheader.c:
+	  tests: fix remaining unit tests
+
+2011-03-28 14:12:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/appsink.c:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/elements/audiorate.c:
+	* tests/check/elements/audioresample.c:
+	* tests/check/elements/decodebin.c:
+	* tests/check/elements/decodebin2.c:
+	* tests/check/elements/ffmpegcolorspace.c:
+	* tests/check/elements/gdpdepay.c:
+	* tests/check/elements/gdppay.c:
+	* tests/check/elements/gnomevfssink.c:
+	* tests/check/elements/multifdsink.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/playbin2.c:
+	* tests/check/elements/subparse.c:
+	* tests/check/elements/textoverlay.c:
+	* tests/check/elements/videorate.c:
+	* tests/check/elements/videoscale.c:
+	* tests/check/elements/videotestsrc.c:
+	* tests/check/elements/volume.c:
+	* tests/check/elements/vorbisdec.c:
+	* tests/check/elements/vorbistag.c:
+	* tests/check/gst/typefindfunctions.c:
+	* tests/check/libs/audio.c:
+	* tests/check/libs/cddabasesrc.c:
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/netbuffer.c:
+	* tests/check/libs/profile.c:
+	* tests/check/libs/rtp.c:
+	* tests/check/libs/struct_i386.h:
+	* tests/check/libs/tag.c:
+	* tests/check/pipelines/oggmux.c:
+	* tests/examples/app/appsink-src.c:
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	* tests/examples/app/appsrc_ex.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/examples/snapshot/snapshot.c:
+	* tests/icles/playbin-text.c:
+	  tests: work on porting the unit tests
+
+2011-03-28 10:25:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: improve comment
+
+2011-03-28 10:20:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	* tools/gst-discoverer.c:
+	  plugins: more porting
+
+2011-03-27 20:15:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoraparse.c:
+	  theora: port to new memory API
+
+2011-03-27 18:30:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/tag.h:
+	  plugins: more porting to new memory API
+
+2011-03-27 17:16:10 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/libvisual/visual.c:
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  plugins: fix for new memory API
+
+2011-03-27 16:35:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcp.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/typefind/gsttypefindfunctions.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/volume/gstvolume.c:
+	  plugins: port some plugins to the new memory API
+
+2011-03-27 13:55:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst-libs/gst/riff/riff-read.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/gstvideofilter.c:
+	  libs: port to new data API
+
+2011-03-26 19:36:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggparse.c:
+	  oggparse: fix list iteration code
+	  Not that it really matters, but let's fix it before someone
+	  notices and makes fun of us.
+
+2011-03-26 12:01:05 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/.gitignore:
+	  tests: ignore new libsabi test binary
+
+2011-03-26 11:59:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggparse.c:
+	  oggparse: make sure buffer metadata is writable before setting caps on buffers
+
+2011-03-25 22:14:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 193b717 to 1ccbe09
+
+2011-03-25 19:52:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tags: port to new metadata and memory API
+
+2011-03-25 14:55:52 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From b77e2bf to 193b717
+
+2011-03-25 11:06:35 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/Makefile.am:
+	  docs: do xrefs for non installed books too
+	  Get the xrefs from the builddir for the books in the same package. This fixes
+	  the cross references if one does not have the docs already installed.
+
+2011-02-25 16:46:29 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+	* docs/design/part-interlaced-video.txt:
+	  docs: Add an interlaced video design document
+
+2011-03-25 09:29:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From d8814b6 to b77e2bf
+
+2011-03-25 09:03:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6aaa286 to d8814b6
+
+2011-03-24 18:48:59 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6aec6b9 to 6aaa286
+
+2011-03-24 14:22:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Update comment about why an audio queue is needed
+
+2011-03-24 14:21:01 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  Revert "playsink: Only add a queue before the audio sink if visualizations are enabled"
+	  This reverts commit df886c0622257bb8635e5bd0fc7fc3da20bfc3be.
+
+2011-03-24 14:03:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Only add a queue before the audio sink if visualizations are enabled
+	  The queue is not needed otherwise and will add some delay to track
+	  switches.
+
+2011-03-23 12:42:04 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  tests: video: Uncommenting test
+	  Pushed a commented test by accident, uncommenting it.
+
+2011-03-23 12:02:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  video: adds missing function to win32 def
+
+2011-03-23 12:02:35 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Getting component offsets without dimensions is fine if it is not YUV
+	  This fixes a regression that an assertion would happen if
+	  gst_video_get_component_offset would be called with width or
+	  height as 0.
+	  Calling it with 0 is fine if the format isn't yuv and this
+	  was already being used in some other places of video.c
+
+2011-03-23 11:13:57 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  tests: video: Add a test for checking rgb caps creation
+	  This new test for checking rgb caps creation exposes a regression
+
+2011-03-15 14:45:03 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Remember automatically created sinks for future reconfigures
+	  Also allow reuse of sink elements in error cases.
+
+2011-03-16 15:27:51 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Check if an already existing sink supports the non-raw format too
+	  Before we were assuming that a sink will always support all non-raw formats
+	  in a single stream.
+
+2011-03-10 19:04:51 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Check if an element accepts requisite caps before selecting
+	  In addition to ensuring that an element we want to select in
+	  autoplug-select can enter the READY state, we also now check if it can
+	  accept the caps we wish to plug it for. This is handy for sinks that
+	  need to perform a probe to figure out whether they can actually handle a
+	  given format.
+
+2011-03-16 15:56:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Set sinks to READY before checking if it accept caps
+	  Fixes bug #642732.
+
+2011-03-16 15:56:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Always prefer the custom set sink and also set it back to NULL in all cases.
+
+2011-03-17 13:47:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Only consider the audio/video sinks in autoplug_continue for the normal uridecodebin
+	  Considering them for the subtitle uridecodebin will add audio/video
+	  streams that might be in a file used as subtitle file.
+
+2011-03-22 11:59:40 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add gst_video_format_new_template_caps()
+
+2011-02-24 08:42:34 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Fix assertion on caps fixation
+	  When fixating caps, from_par should always be initialized
+	  with a fixed value.
+	  In case the fixation is from src to sink pad it was setting
+	  the from par (srcpad par) to a fraction range, this patch initializes
+	  it to 1/1, based on the assumption that missing PAR is 1/1.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641952
+
+2011-03-22 12:44:49 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* configure.ac:
+	  configure.ac: redundant use of AC_MSG_RESULT()
+	  cleaned the redundant use of AC_MSG_RESULT() in configure.ac
+
+2011-03-18 19:34:57 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* autogen.sh:
+	  autogen: wingo signed comment
+
+2011-03-21 19:22:30 +0100  Fraxinas <andreas.frisch@multimedia-labs.de>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encoding-profile: Fix syntax in Example: Creating a profile
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645437
+
+2011-03-21 18:33:03 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add missing schema creation
+	  tiff schema entries were being added to the previous
+	  schema (xap) because a new one wasn't being created
+	  for it.
+
+2011-03-17 21:50:15 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: Off-by-one error when creating RTP header extensions with a two-byte header
+
+2011-03-16 15:38:31 +0200  Mart Raudsepp <mart.raudsepp@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: Clean up alignment docs a bit and remove horiz top alignment enum
+
+2011-02-07 09:13:39 +0200  Mart Raudsepp <leio@gentoo.org>
+
+	* tests/check/Makefile.am:
+	  check: Really fix the linking order of libs/tag
+	  Follow-up to commit 5f5c52c, which only fixed the CFLAGS order.
+	  Fix the linker order as well.
+
+2011-03-16 10:19:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: post proper error message if decodebin2/typefind elements are missing
+	  Post better error messages in case typefind/decodebin2 are missing or
+	  could not be loaded for some reason (e.g. because they inadvertently
+	  got blacklisted).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=644892
+
+2011-03-15 19:47:11 +0100  Blaise Gassend <blaise@suitabletech.com>
+
+	* ext/alsa/gstalsamixer.c:
+	  alsamixer: Store return values of poll functions in a signed integer
+	  Negative return values are used for errors and storing
+	  them in an unsigned integer will make it impossible to
+	  detect the errors.
+	  Fixes bug #644845.
+
+2011-03-15 11:11:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11-fdo
+
+2011-03-14 19:42:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Increase the seen header packets count when seeing a header packet
+	  This fixes muxing of Speex content and possibly other formats where the
+	  header detection works by counting the packets.
+	  Fixes bug #644745.
+
+2011-03-14 18:35:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add depth and endianness to DTS caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=644208
+
+2011-03-14 11:14:04 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: use a class wide mutex to work around pango reentrance issues
+	  Pango is not reentrant. Use a class wide mutex to protect pange use in
+	  gst_text_overlay_render_pangocairo(). This works reliable in contrast to the
+	  hack in my previous commit.
+	  Fixes Bug #412678
+
+2011-03-14 11:12:53 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/pango/gsttextoverlay.c:
+	  Revert "textoverlay: add a hack to init the pango engine"
+	  This reverts commit fee3266056b522cdd34e606b5682553d35eec5a1.
+
+2011-03-14 10:09:35 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybin2.c:
+	  plaback: trim trailing whitespace
+
+2011-03-14 10:05:34 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: reflow configuring new multiqueue instance
+	  Use a single g_object_set to configure the new multiqueue instance. Also don't
+	  needlessly set "use-buffering" if it is the default.
+
+2011-03-04 14:52:01 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: drop trailing whitespaces
+
+2011-03-04 14:52:28 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: add a hack to init the pango engine
+	  Layout a single char to pre-create all resources.
+
+2011-03-12 17:51:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/gstlibscpp.cc:
+	  tests: add libscpp unit test to make sure g++ likes our library headers
+
+2011-03-10 14:22:38 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  tests: encodebin: Add reuse test case
+	  Adds a test case to check if encodebin can be reused
+	  https://bugzilla.gnome.org/show_bug.cgi?id=644416
+
+2011-03-10 14:38:47 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Tear down old profiles when setting new ones
+	  In NULL/READY, we should be able to switch profiles on encodebin,
+	  this patch makes it tear down old profiles when new ones are set
+	  if in NULL/READY states
+	  https://bugzilla.gnome.org/show_bug.cgi?id=644416
+
+2010-10-22 14:01:26 +0200  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: disconnect inactive clients in the select loop too
+	  Clients are usually disconnected in the streaming thread if their inactivity
+	  is bigger than the timeout. If no new buffers are to be rendered in the sink,
+	  these clients will never be disconnected and for that reason it should be
+	  handled in the select() loop too.
+
+2010-10-22 14:01:26 +0200  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: disconnect inactive clients in the select loop too
+	  Clients are usually disconnected in the streaming thread if their inactivity
+	  is bigger than the timeout. If no new buffers are to be rendered in the sink,
+	  these clients will never be disconnected and for that reason it should be
+	  handled in the select() loop too.
+
+2011-03-09 11:51:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  libs: make sure gobject-introspection scanner calls gst_init()
+	  Fixes introspection failures caused by type assertions/warnings.
+	  Since we now moved from _get_type() functions to external GType
+	  variables in a couple of places, we actually have to call gst_init()
+	  to make sure these are set when we use GST_TYPE_FOO.
+
+2011-03-09 11:45:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	  libgstapp: fix backticks in gobject-introspection section of Makefile.am
+
+2010-11-03 14:37:07 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Don't wait for subtitle streams to preroll
+	  Subtitle streams being parse can cause the pipeline to wait indefinitely
+	  to PREROLL. This makes subtitle streams got to PAUSED even if no data is
+	  available. This should not be a cause for concern as we don't expect to
+	  get much data for subtitle streams other than language tags from the
+	  container.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632291
+
+2011-03-08 17:01:41 +0000  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagesink.c:
+	  meta: update for new API
+
+2011-03-04 18:32:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/ximage/ximagesink.c:
+	  ximagesink: make metadata methods more like core
+
+2011-03-04 17:25:46 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: use sink preroll lock
+
+2011-03-04 10:21:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: reset the pool
+
+2011-03-03 18:39:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	  ximagesink: implement buffer_alloc from the pool
+	  Use the bufferpool for pad_alloc when we are asked for the same caps as the
+	  bufferpool.
+
+2011-03-03 16:48:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/Makefile.am:
+	* sys/ximage/ximage.c:
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	  ximage: rewrite the buffer pool in ximagesink
+	  Rewrite the pooling in ximagesink to extend from the bufferpool base class in
+	  core. Move some code to a comon place and refactor.
+
+2011-03-04 16:21:13 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+
+2011-03-03 19:14:38 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: start ringbuffer upon going to PLAYING and already EOS
+	  ... otherwise we may end up without running clock in PLAYING.
+	  Fixes #636886.
+
+2011-03-04 14:39:45 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: set several properties in one go
+	  g_object_set is a varargs function. Save 7 g_obvject_calls (and the overhead of
+	  them) by using it accordingly.
+
+2011-03-02 15:38:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: fix compiler warning on 32-bit systems
+	  Mark 64-bit interger constant as such to avoid warnings such as:
+	  gsttypefindfunctions.c:2152: error: integer constant is too large for ‘long’ type
+
+2011-02-28 18:52:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* configure.ac:
+	  configure.ac: export plugin description more platform independent
+	  Fixes #642504.
+
+2011-02-28 18:32:33 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 1de7f6a to 6aec6b9
+
+2011-02-28 12:59:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  netbuffer: Implement NetAddress with metadata
+	  Make a NetAddress metadata.
+
+2011-02-27 19:42:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  meta: fix for new API
+
+2011-02-26 18:19:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	  ximagesink: experiment with convenience macros
+
+2011-02-25 16:28:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.h:
+	  ximage: fix macros
+
+2011-02-25 16:01:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  ximage: reimplement buffer pooling with metadata
+	  Use the buffer metadata to get back to the extra info we can use to optimize the
+	  video rendering.
+
+2011-02-25 15:49:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  metadata: implement extra buffer data with metadata
+	  Use buffer metadata to attach arbitrary extra data to buffers.
+
+2011-02-24 12:19:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/app/appsink-src.c:
+	* tests/examples/app/appsrc_ex.c:
+	  tests: fix some tests now that appbuffer is gone
+
+2011-02-24 12:18:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	  v4l: use buffer private data for extra buffer info
+	  Since we can't subclass anymore, use the owber_priv pointer for storing extra
+	  info for the buffer.
+
+2011-02-24 11:57:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  X11: port imagesinks to new miniobjects
+	  Remove the subbuffer from X11 sinks and use the private pointer to store a
+	  single buffer metadata with the extra info.
+
+2011-02-23 15:46:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/subparse/gstssaparse.c:
+	  miniobject: fix for changed miniobject
+
+2011-02-23 14:12:22 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	  pbutils: use GObject as the base class
+	  We can't subclass miniobject so use GObject as the base class,
+
+2011-02-23 13:42:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: remove deprecated method
+
+2011-02-23 13:14:21 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  netbuffer: disable GstNetBuffer object
+	  There are no more buffer subclasses and this should be implemented with
+	  buffermetadata later.
+
+2011-02-23 13:13:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/app/gstappbuffer.c:
+	* gst-libs/gst/app/gstappbuffer.h:
+	  app: remove appbuffer
+	  There are no more buffer subclasses and the application can use the regular API
+	  to make buffers.
+
+2011-02-28 11:47:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' into 0.11
+	  Conflicts:
+	  configure.ac
+	  gst-libs/gst/pbutils/Makefile.am
+
+2011-02-28 10:10:22 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_i386.h:
+	  tests: add ABI test suite for libs
+
+2011-02-27 09:32:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Only prevent to autoplug the same parser multiple times for the same chain
+	  Parsers are the only element class that are not changing the data and
+	  could lead to an infinite loop. Other element classes like demuxers,
+	  e.g. id3demux, can be used multiple times in a row and sometimes are.
+
+2011-02-26 23:43:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Break the double-factory checking loop immediately if the factory was used already
+
+2011-02-26 23:39:03 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't use the same element multiple times in the same chain
+	  This is going to lead to an infinite loop of this element and can easily
+	  happen with parsers that accept their own src caps on the sinkpad.
+
+2011-02-26 23:20:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Improve detection of raw caps in expose-all-streams=false mode
+	  Previously we only checked against the raw caps but we should also
+	  check against the return value of autoplug-continue. Additionally fix
+	  a thread-safety issue with accessing the raw caps.
+
+2011-02-25 19:37:07 -0800  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add support for r210
+
+2011-01-03 11:41:56 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  gstvideo: Add GST_VIDEO_BUFFER_PROGRESSIVE flag
+	  Maps to GST_BUFFER_FLAG_MEDIA4. The purpose is to explicitly indicate
+	  whether a telecined buffer is progressive or not without having to make
+	  assumptions based on previous buffers.
+
+2011-02-24 20:59:48 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  encodebin: Fix double unref in unit test
+
+2011-02-22 14:54:55 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/playbin2.c:
+	  checks: add a simple unit test for the source-setup signal
+
+2011-02-22 12:56:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playbin2, uridecodebin: add "source-setup" signal
+	  Add "source-setup" signal for convenience and discoverability. No need
+	  to figure out "notify::source", look up the notify callback signature,
+	  then do an g_object_get() to get the source element..
+	  https://bugzilla.gnome.org/show_bug.cgi?id=626152
+
+2011-02-24 16:22:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Don't handle GstCollectData as GstObject, use the pad instead
+
+2011-02-24 16:02:50 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	  encodebin: Fix memory leaks related to request pads
+	  Request pads have to be released by the caller and must be
+	  unreffed after releasing them.
+
+2011-02-24 15:55:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Return a new reference of the pad for the "request-pad" signal
+	  The GObject signal code assumes that the signal handlers return a
+	  new reference or copy. Fixes bug #641927.
+
+2011-02-21 20:34:41 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/adder/gstadder.c:
+	  adder: Fill in offset_end field of outgoing buffers
+	  ... rather than leave it as GST_BUFFER_OFFSET_NONE
+	  Fix bug #642942.
+
+2011-02-23 14:31:13 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: release all chains when going to NULL
+	  Also fixes #642466.
+
+2011-02-23 14:29:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: undo state change side effect on error way out
+	  ... to avoid subsequent cleanup disposing an element not in NULL state.
+
+2011-02-23 10:32:08 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: avoid crashing on the way out when needed chain missing
+
+2011-02-22 15:26:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: update .def file for new libgstvideo API
+
+2011-02-22 16:41:54 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tools/gst-discoverer.c:
+	  discoverer: handle desc==NULL
+	  It would otherwise be printed as (null) and mess up indentation (no \n).
+
+2011-02-08 12:42:32 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Chain dispose() up to parent class
+
+2011-02-07 13:04:55 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Keep a ref for the async timeout callback
+	  This makes sure we maintain a ref on the discoverer object while the
+	  async timeout callback is alive to prevent a potential crash if the
+	  object is freed while the callback is pending.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641706
+
+2011-02-07 13:57:39 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Use g_signal_connect_object instead of g_signal_connect
+	  We want to make sure the discoverer object passed to the various
+	  callbacks doesn't become invalid if a callback is pending and the object
+	  is free'd in the mean time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641706
+
+2011-02-10 03:22:42 +1100  Parthasarathi Susarla <partha.susarla@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: detect raw h.263
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623846
+
+2011-02-21 15:58:16 +0200  Teemu Katajisto <teemu.katajisto@digia.com>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  pbutils: encoding-target: fix error checking in target file loading
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642949
+
+2011-02-21 17:55:04 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  tests: fix videoscale test by ignoring newly-added 64-bit formats
+	  They probably fail because ffmpegcolorspace can't handle those formats.
+
+2011-02-21 18:01:04 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/sdp/Makefile.am:
+	  sdp: Fix copy/paste error in inrospection part of Makefile
+
+2011-02-21 18:00:36 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/tag/Makefile.am:
+	  tag: Fix copy/paste error in inrospection part of Makefile
+
+2011-02-21 18:00:02 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	  rtsp: Fix copy/paste error in inrospection part of Makefile
+
+2011-02-21 12:40:36 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiorate/gstaudiorate.h:
+	  audiorate: add skip-to-first property
+	  API: GstAudioRate::skip-to-first
+
+2011-02-21 12:27:17 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: fix skip-to-first ts setup
+	  ... such as avoiding arithmetic mixing counts and ts, although latter
+	  would typically be 0 so far.
+
+2011-02-21 12:04:09 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* gst/adder/gstadder.c:
+	  Revert "oggmux,adder: Check if collectpads has been freed"
+	  This reverts commit 6d150873e8b4c23d694b0351570de323b1576d76.
+	  Depends on a core commit that was reverted.
+
+2011-02-20 23:49:54 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	* gst/adder/gstadder.c:
+	  oggmux,adder: Check if collectpads has been freed
+	  Core now calls release_pad in finalize, which is usually after
+	  the collectpads has been unreffed.
+
+2011-02-19 18:50:37 -0800  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	* gst/videoscale/vs_fill_borders.c:
+	* gst/videoscale/vs_fill_borders.h:
+	* gst/videoscale/vs_image.c:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_scanline.c:
+	* gst/videoscale/vs_scanline.h:
+	  videoscale: Add 16-bit-channel support
+
+2011-02-19 16:41:43 -0800  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add 16-bit-per-channel formats
+
+2011-02-19 12:03:17 -0800  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add ARGB64 and AYUV64
+	  16-bit per channel formats.
+
+2011-02-18 16:26:59 -0800  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add gst_video_format_get_component_depth()
+
+2011-02-18 13:27:23 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: each element gets its own instance of GRand, if needed
+	  As a result, pipelines that contain multiple instances of audiotestsrc
+	  with the 'wave' property set to 'white-noise', 'pink-noise', or
+	  'gaussian-noise' will run much faster, since they won't be competing
+	  for access to the global, lock-protected instance of GRand.
+	  Fixes bug #642720.
+
+2011-02-18 17:26:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If a sink claims to support ANY caps assume that it only supports the usual raw formats
+	  This should be changed again in 0.11, if a sink really claims to support ANY
+	  caps it should support everything or provide correct caps.
+
+2011-02-17 18:11:10 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Add a audioconverter after the audio resampler.
+	  This allows handling non-native-endianness conversion properly.
+
+2011-02-18 14:04:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Use gst_pad_accept_caps() instead of intersecting with the getcaps caps
+	  This might be faster and more accurate in some cases to detect if a
+	  sink supports a format and autoplugging can be stopped.
+
+2011-02-18 12:06:30 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Add default handler for autoplug-select
+	  uridecodebin proxies this signal and only the first signal handler
+	  will ever be called from decodebin2, which is uridecodebin's proxy
+	  signal handler.
+
+2011-02-18 12:02:07 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Return NULL from the default autoplug-sort handler
+	  ...instead of copying the array. Returning NULL will result
+	  in the original factories array to be used and prevents a useless
+	  array copy in most use cases.
+
+2011-02-18 12:01:05 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Return NULL from the default autoplug-sort handler
+	  ...instead of copying the array. Returning NULL will result
+	  in the original factories array to be used and prevents a useless
+	  array copy in most use cases.
+
+2011-02-18 12:00:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Update autoplug-* signal docs from decodebin2
+	  uridecodebin proxies these signals.
+
+2011-02-18 11:58:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Update documentation of the autoplug-* signals
+	  Add notes about the behaviour if multiple signal handlers are connected.
+	  For most autoplug-* signals only the first signal handler will ever
+	  be invoked.
+	  Also add to the autoplug-sort docs that the signal handler can return NULL
+	  to specify that the order should change and other handlers get the chance
+	  to sort the array.
+
+2011-02-18 11:57:12 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Keep the original factory list if the sort signal handlers returned NULL
+
+2011-02-16 20:14:25 +0900  tskd2@yahoo.co.jp <tskd2@yahoo.co.jp>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: expose "autoplug-sort" signal
+	  It is a proxy of the decodebin2's one, and was missing
+	  in the previous code.
+	  See bug #642433.
+
+2011-02-18 10:57:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Use a recursive mutex for the playbin lock
+	  This lock is taken when activating a group, which could result in
+	  calling the autoplug-continue callback, which also needs this lock
+	  to access the sinks.
+	  See bug #642174.
+
+2011-02-18 09:36:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Disconnect signal handlers when removing a failed element
+	  This prevents crashes later if one of the signals is emitted after the
+	  element was removed from decodebin2 already, which can happen in discoverer.
+
+2011-02-15 19:23:48 -0800  David Schleef <ds@schleef.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Fix mpeg TS detection
+
+2011-02-04 17:36:40 -0800  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: move debug category init earlier
+
+2011-02-03 22:41:23 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.h:
+	  oggparse: better detection of delta unit flag
+
+2011-01-15 18:21:28 -0800  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: Set speed level while running
+
+2011-01-13 15:12:53 -0800  Ralph Giles <giles@thaumus.net>
+
+	* ext/theora/gsttheoraenc.c:
+	  Set the theoraenc speed-level property from libtheora's defaults.
+	  The speed-level property, which allows callers to trade of encoding
+	  quality for speed in the libtheora api, has a version-dependent
+	  maximum and default values. Instead of hardcoding the acceptable
+	  range for the theoraenc element's presentation of this setting,
+	  we query the library directly at class initialization time and
+	  set the maximum and default values from that. If the query fails,
+	  we fall back to the previous default setting.
+	  To keep the values reported by gst-inspect (which I'm told use
+	  the spec values from the class) with those available on an\
+	  instantiated element, we remove to setting of enc->speed_level
+	  from the initializer and instead pass G_PARAM_CONSTRUCT to
+	  the property spec flags, asking g_object to set this property
+	  when theoraenc objects are constructed.
+	  NB in theory the maximum speed-level could depend on the actual
+	  video caps. If later versions of libtheoraenc do this, a second
+	  call will need to be made from theora_enc_reset to update the
+	  property, since this function is mostly useful for realtime
+	  adjustment of performance while the pipeline is running.
+
+2011-02-16 11:57:31 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: don't leak parent tags
+
+2011-02-16 11:56:16 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: improve logging (and reindent)
+	  Add more logging for the tag merging and use the _OBJECT flavour more.
+
+2011-02-15 17:46:22 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Optimize autoplug-continue handler a bit
+	  Don't build merge the caps of all sinks but check them one-by-one
+	  until one supports the caps. Also get reffed caps from the sinkpads
+	  instead of a writable copy and add debug output if a sink claims to
+	  support ANY caps.
+
+2011-02-15 17:24:28 +0100  Akihiro Tsukada <tskd2@yahoo.co.jp>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Fix handling of non-raw custom sinks
+	  When autoplugging elements in decodebin2, check if
+	  the caps are supported by one of the sink before
+	  continuing autoplugging.
+	  Fixes bug #642174.
+
+2011-02-15 17:01:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't leak elements that fail to go to PAUSED after being autoplugged
+	  Fixes bug #642381.
+
+2011-02-13 14:42:14 +0000  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: Don't reset the video quality setting the bitrate
+	  libtheora has two encoding modes, CBR, where it tries to hit a target
+	  bitrate and VBR where it tries to achieve a target quality.
+	  Internally if the target bitrate is set to anything other then 0 the
+	  encoding-mode is CBR.
+	  This means that the gstreamer element can leave the video_quality
+	  setting alone as long as the user is tweaking the bitrate. Which has the
+	  nice side-effect that if the user explicitely sets the bitrate to 0
+	  (which is actually the default), the quality value doesn't get reset and
+	  one ends up encoding VBR at quality-level 0...
+
+2011-02-09 12:45:23 +0100  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: ensure buffer's metadata is writable before setting caps
+
+2011-02-14 12:52:59 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f94d739 to 1de7f6a
+
+2011-02-10 23:44:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-plugins-base.doap:
+	  doap: update mailing list location
+
+2011-02-08 23:58:56 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Use nominal bitrate if bitrate tag is unavailable
+	  If the bitrate tag is unavailable, this falls back to the nominal
+	  bitrate tag instead, if that is present.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641860
+
+2011-02-08 12:31:34 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: caps can be NULL
+	  Don't use and unref NULL caps.
+
+2011-02-02 16:49:04 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: also push cached events downstream when operating in pull mode
+	  Otherwise, having 2 tagdemux in a row followed by an element operating in
+	  pull mode will make the second tagdemux implictly eat the first tagdemux'
+	  tag event(s).
+	  Fixes (part of) #641047.
+
+2011-01-21 18:10:29 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: ensure serialnos are unique
+	  We do that by checking a newly generated one is not already used in
+	  an existing stream, and doing it again if it is.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640211
+
+2011-02-02 17:30:15 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: free stream map caps when done
+
+2011-02-02 17:23:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: keep IN_CAPS flag check for header buffers as fallback
+	  In case the ogg mapper doesn't handle all the accepted input formats
+	  (although it really should). Saves us error handling for that case
+	  though. Also log caps properly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629196
+
+2011-01-21 16:05:46 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: use oggstream for less brittleness in recognizing headers
+	  Using the IN_CAPS flag for this is brittle, and will fail if either
+	  vorbisparse or vorbistag (which is itself based on vorbisparse) is
+	  inserted between oggdemux and oggmux. Possibly other elements too
+	  (eg, theoraparse, etc).
+	  Using oggstream ensures we Get It Right More Often Than Not.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629196
+
+2011-02-02 15:33:36 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: fix copy-and-paste typo in property docs
+
+2011-01-21 10:56:00 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	  oggmux: do not skip a pageno at start
+	  Discontinuities are automatically signalled by oggdemux at the start
+	  of a new stream. When oggmux is yet to output actual data pages,
+	  do not signal these discontinuities in the ogg stream.
+	  This patch may miss some actual discontinuities at the very start of
+	  a stream, but avoids the spurious missing pages when encoding happens
+	  normally.
+	  A better fix might involve finding a way to distinguish between actual
+	  data discontinuities and discontinuities merely marking the start of
+	  a new stream.
+	  Fixes an issue with ogg page numbering (would skip a number for no
+	  reason, which then looks like a packet was lost somewhere) when
+	  re-muxing an ogg stream, e.g. when re-tagging in rhythmbox.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629196
+
+2011-02-01 15:57:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: clean up property descriptions
+	  Remove "This property requires libtheora version >= 1.1" qualifiers
+	  from property descriptions. They aren't needed any longer now that
+	  we require libtheora >= 1.1.
+
+2010-08-19 22:31:07 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* configure.ac:
+	* gst-libs/gst/tag/gstid3tag.c:
+	  id3tag: map the ID3v2 TENC frame to GST_TAG_ENCODED_BY
+	  https://bugzilla.gnome.org/show_bug.cgi?id=627268
+
+2011-01-29 20:43:08 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/tcp/gsttcpserversink.c:
+	  tcp: use socklen_t where appropriate rather than specific type
+	  In particular, fixes Cygwin build where socklen_t is defined as int
+	  in line with native win32 api definition.
+
+2011-01-29 19:40:23 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: cast argument to isdigit to int
+	  ... as that is the specification and fixes compilation on Cygwin:
+	  gstxmptaag.c: In function 'read_one_tag':
+	  gstxmptag.c:1015: error: array subscript has type 'char'
+
+2011-01-31 18:06:18 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* tests/check/elements/appsink.c:
+	  appsink: add buffer fallback in case the application doesn't handle buffer lists
+	  We shouldn't assume the application handles buffer lists, for
+	  ease-of-use reasons and for backwards compatibility reasons.
+
+2011-01-26 10:32:32 +0800  Cai Yuanqing <Yuanqing.Cai@tieto.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: send new-buffer-list signal
+	  Send new-buffer-list signal when emit-signals is TRUE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640607
+
+2011-01-20 16:25:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: also add https to buffer protocols
+	  HTTPS also needs buffering.
+
+2011-01-30 15:40:53 +0200  Felipe Contreras <felipe.contreras@nokia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: trivial cleanups
+	  It seems these stuff was neglected from commmit d8942e2.
+	  Signed-off-by: Felipe Contreras <felipe.contreras@nokia.com>
+
+2011-01-27 15:26:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/config.h:
+	  win32: fix DEFAULT_AUDIOSINK, should be direct*sound*sink
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640705
+
+2011-01-27 12:32:35 +0100  Philippe Normand <pnormand@igalia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: register H264 typefinder with H264 caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640709
+
+2011-01-26 12:16:58 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/encoding/gststreamsplitter.c:
+	  streamsplitter: release pending events refs
+	  Unref pending events when disposing the streamsplitter.
+	  Also refactor a little to replace a for with a g_list_foreach
+
+2011-01-26 15:42:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: don't run encodebin test if vorbis or theora plugins aren't available
+
+2011-01-26 09:07:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for degas images
+
+2011-01-26 09:06:10 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: use image/x-icon as media type for ICON files
+	  That's what we've been using so far (e.g. gdkpixbufdec).
+
+2011-01-18 10:20:29 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/snapshot/snapshot.c:
+	  snapshot: use a keyframe seek
+	  One would usualy get good quality snapshots quickly. The exact seek position
+	  does not really matter.
+
+2011-01-17 23:13:29 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/snapshot/snapshot.c:
+	  snapshot: add a newline to the usage and error output
+
+2011-01-25 18:03:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: add comment and whitespace trimming
+
+2011-01-12 14:03:12 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for x-annodex
+
+2011-01-25 13:39:25 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: add typefinder for DEGAS images
+	  This fixes at least one DEGAS image from being misdetected as DTS audio.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=625129
+
+2011-01-21 14:56:28 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: cleanup
+	  Remove a pointless string concatentation, and fix an off-by-one in
+	  packetno in a log.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640189
+
+2011-01-24 11:45:21 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: add detection for windows icon files to get them out of the way
+	  Some of them can otherwise be misdetected for MPEG audio.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=620364
+
+2011-01-17 15:11:15 +0200  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Remove dead code
+
+2011-01-11 15:10:42 +0800  Yang Xichuan <xichuan.yang@tieto.com>
+
+	* ext/ogg/gstoggparse.c:
+	  oggparse: Make gst_ogg_parse_submit_buffer() safe
+	  By not passing zero-sized buffers to ogg_sync_buffer()
+	  and checking the return values of libogg functions.
+	  Fixes bug #639136.
+
+2011-01-11 18:18:34 +0100  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: Add support for vertical center alignment
+	  Fixes bug #639159.
+
+2011-01-24 15:21:10 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Move static variable to local function
+	  Variable was being written to and could cause crashes
+	  if multiple elements were parsing xmp at the same time.
+	  Moving it to local scope solves the problem.
+
+2011-01-24 18:27:30 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add support for video/x-camstudio
+
+2011-01-24 00:00:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development
+
+=== release 0.10.32 ===
+
+2011-01-21 10:50:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.32
+
+2011-01-18 10:45:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.31.4 pre-releases
+
+2011-01-18 10:44:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  docs: update docs
+
+2011-01-18 10:40:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* tests/check/libs/profile.c:
+	  encoding-target: change keyfile header to 'GStreamer Encoding Target'
+	  which is more in line with other files such as .desktop files.
+
+2011-01-18 01:06:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  pbutils: don't assume LC_MESSAGES is always defined, also check for ENABLE_NLS
+	  Should fix build with mingw32 build bot again.
+
+2011-01-18 00:09:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/app/gstappsrc.h:
+	* win32/common/libgstapp.def:
+	  app: export gst_app_stream_type_get_type()
+	  API: gst_app_stream_type_get_type()
+	  API: GST_TYPE_APP_STREAM_TYPE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639747
+
+2011-01-17 23:59:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappbuffer.c:
+	  app: make GstAppBuffer get_type() function thread-safe
+
+2011-01-18 01:09:53 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Drop new stream tags once preroll is done
+	  This makes sure we do not touch the stream taglist once the pipeline has
+	  been prerolled. Adding of stream tags happens in the pad event probe
+	  which runs in a different thread from discoverer stream processing, so
+	  modifying the tag list while discoverer might be processing it can
+	  sometimes cause a crash.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639778
+
+2011-01-17 15:30:08 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Validate timeouts before processing them
+	  This avoids a race where the timeout callback is scheduled to run but we
+	  get sufficient information to finish discovery before actually getting
+	  around to executing the callback. See the documentation of
+	  g_source_is_destroyed() for more details.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639730
+
+2011-01-18 00:08:32 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Make sure we call _stop() before being freed
+	  This ensures that everything is properly cleaned up before the
+	  GstDiscoverer object is freed. Specifically, it makes sure that we've
+	  removed the async timeout callback before freeing the object to avoid a
+	  potential crash later on.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639755
+
+2011-01-16 14:55:46 -0800  David Schleef <ds@schleef.org>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: make newsegment buffer metadata writable
+
+2011-01-16 16:46:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  pbutils: save localised strings properly when writing encoding targets to a file
+	  Use LC_MESSAGES rather than LC_ALL. Save/load description as untranslated string
+	  when using an English language locale. Strip locale information to the language,
+	  so we don't save keys like description[fr_FR.UTF-8]=...
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638860
+
+2011-01-13 13:59:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: set framed=false on DTS caps
+
+2011-01-12 17:51:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  docs: add some more Since: markers for new encoding-profile API
+
+2011-01-12 15:51:52 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: require gobject-introspection >= 0.9.12
+	  Earlier versions don't honour the -L/--library-path option,
+	  which we need. See commit 4d0ccdad in gobject-introspection git.
+	  Should "fix" build on lucid/maverick build bots.
+
+2011-01-11 19:19:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.31.3 pre-release
+
+2011-01-11 18:59:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/da.po:
+	* po/gl.po:
+	* po/pt_BR.po:
+	  po: update translations
+
+2011-01-11 14:41:53 +0000  Bastien Nocera <hadess@hadess.net>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	  examples: allow building with newer GTK+
+	  GtkFunction is gone, and there's no update policies for
+	  GtkRanges any more (but the default was continuous anyway,
+	  so no need to set it to that mode explicitly).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639215
+
+2011-01-11 14:59:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	  gobject-introspection: pass --library-path as well to make it find the right libgstreamer
+	  Makes things work again properly in uninstalled setups (and
+	  presumably in installed setups where GStreamer is installed
+	  into a non-standard prefix). Requires fixes from core git.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639039
+
+2011-01-11 14:52:51 +0000  Byeong-ryeol Kim <brofkims@gmail.com>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	  gobject-introspection: fix issue when gold linker is used
+	  Need to pass libgstreamer-0.10 explicitly to linker, since we're
+	  calling gst_init(), which in turn is needed because the encoding
+	  target get_type() function calls gst_value_register().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639039
+
+2011-01-11 15:49:54 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From e572c87 to f94d739
+
+2011-01-10 16:35:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From ccbaa85 to e572c87
+
+2011-01-10 14:53:04 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 46445ad to ccbaa85
+
+2011-01-10 15:55:26 +0800  Yang Xichuan <xichuan.yang@tieto.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: remove outdated comment
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639121
+
+2011-01-08 02:16:19 +0000  Koop Mast <kwm@FreeBSD.org>
+
+	* configure.ac:
+	  configure: fix bash-ism
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638961
+
+2011-01-08 02:10:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  gobject-introspection: use same PKG_CONFIG_PATH for g-ir-compiler as for g-ir-scanner
+	  Make sure to use the PKG_CONFIG_PATH set at configure time instead of
+	  just relying on an env-var set one. This makes sure both g-ir-compiler
+	  and g-ir-scanner use the same PKG_CONFIG_PATH for determining include
+	  paths etc.
+
+2011-01-08 01:12:02 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* pkgconfig/gstreamer-app-uninstalled.pc.in:
+	* pkgconfig/gstreamer-app.pc.in:
+	* pkgconfig/gstreamer-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-audio.pc.in:
+	* pkgconfig/gstreamer-cdda-uninstalled.pc.in:
+	* pkgconfig/gstreamer-cdda.pc.in:
+	* pkgconfig/gstreamer-fft-uninstalled.pc.in:
+	* pkgconfig/gstreamer-fft.pc.in:
+	* pkgconfig/gstreamer-floatcast.pc.in:
+	* pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+	* pkgconfig/gstreamer-interfaces.pc.in:
+	* pkgconfig/gstreamer-netbuffer-uninstalled.pc.in:
+	* pkgconfig/gstreamer-netbuffer.pc.in:
+	* pkgconfig/gstreamer-pbutils-uninstalled.pc.in:
+	* pkgconfig/gstreamer-pbutils.pc.in:
+	* pkgconfig/gstreamer-riff-uninstalled.pc.in:
+	* pkgconfig/gstreamer-riff.pc.in:
+	* pkgconfig/gstreamer-rtp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtp.pc.in:
+	* pkgconfig/gstreamer-rtsp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtsp.pc.in:
+	* pkgconfig/gstreamer-sdp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-sdp.pc.in:
+	* pkgconfig/gstreamer-tag-uninstalled.pc.in:
+	* pkgconfig/gstreamer-tag.pc.in:
+	* pkgconfig/gstreamer-video-uninstalled.pc.in:
+	* pkgconfig/gstreamer-video.pc.in:
+	  pkg-config: add girdir and typelibdir variables to .pc files
+	  We need them when building gir and typelib files for
+	  libraries that depend on these, such as gst-rtsp-server
+	  for example, in an uninstalled setup.
+
+2011-01-07 12:50:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/video-enumtypes.c:
+	  0.10.31.2 pre-release
+
+2011-01-07 13:04:11 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	* gst/encoding/gstencodebin.h:
+	  encodebin: Add missing-plugin support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638903
+
+2011-01-07 12:51:11 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Extend documentation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638901
+
+2011-01-07 00:43:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: never disable g_assert() and cast checks for the unit tests
+	  The unit tests are riddled with g_assert() and friends, sometimes
+	  containing functional code like set_state() calls in them even
+	  (looking at you, pipeline/capsfilter-renegotiation). Make sure we
+	  don't disable assert and cast checks for the unit tests even if
+	  this has been specified for the rest of the code base, e.g. via
+	  --disable-glib-asserts.
+
+2011-01-06 23:17:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstpbutils.def:
+	  win32: udpate pbutils .def file for API change
+
+2011-01-06 23:13:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  docs: update docs
+
+2011-01-06 23:13:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/fi.po:
+	* po/ru.po:
+	  po: update translations
+
+2011-01-06 23:08:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: make text property controllable too
+	  Because we can, and because it's the most interesting one
+	  to control really, after xpos/ypos.
+
+2011-01-06 23:01:20 +0000  Lane Brooks <dirjud@gmail.com>
+
+	* ext/pango/Makefile.am:
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: make some properties controllable
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638859
+
+2011-01-06 20:37:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/.gitignore:
+	  tests: ignore new rtsp test binary
+
+2011-01-05 15:54:15 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: ignore header pages when looking for keyframe
+	  This was causing keyframe_granule to be set to 0 for all streams
+	  when seeking to the beginning of the stream, i.e., at the
+	  beginning of playback.  Fixes #619778.
+
+2010-12-29 15:27:44 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: when the last keyframe position is not known, do not use -1
+	  Instead, use either 0 or 1, depending on bitstream version, which give
+	  the correct result for streams which aren't cut off at start.
+	  This allows that function to not return negative granpos.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638276
+
+2011-01-06 17:57:41 +0000  christian schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Update spec file with discoverer and encodebinchanges
+
+2011-01-05 15:53:09 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  discoverer: Documentation updates
+	  Some cosmetic changes and expands on some bits of the documentation to
+	  make it more newbie-friendly.
+
+2011-01-06 13:08:53 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: Fix behaviour for frame rate cap changes
+	  The outgoing buffer timestamp is calculated by scaling an output buffer
+	  count by the src pad frame rate caps. If these caps change, we need to
+	  reset the count and work from a new base timestamp. The new output
+	  buffer timestamp is then the count scaled by the new caps values added
+	  onto the base timestamp.
+
+2011-01-06 08:47:04 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tools/gst-discoverer.c:
+	  tools: Improve pretty-printing of tags
+	  Avoids escaping strings for nothing and printing out useless buffer contents.
+
+2011-01-06 08:46:42 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tools/gst-discoverer.c:
+	  tools: don't leak the GMainLoop
+
+2011-01-06 00:28:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  pbutils: config.h include should come before all other includes
+
+2011-01-05 22:02:35 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst/encoding/gstencodebin.c:
+	* tests/check/libs/profile.c:
+	* tests/examples/encoding/encoding.c:
+	  encoding: encoding_profile_get_output_caps => _get_input_caps
+	  Makes more sense name-wise
+
+2011-01-05 20:40:39 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: Add various new symbols
+
+2011-01-05 01:50:34 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-profile: Minor documentation updates
+
+2011-01-03 19:07:45 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encoding-profile: Give a better usage example
+
+2011-01-03 18:52:00 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* tests/check/libs/profile.c:
+	* win32/common/libgstpbutils.def:
+	  encoding-target: Fixup loading/saving methods
+
+2011-01-03 18:51:22 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	  encoding-target: more docs cleanups
+
+2011-01-03 16:07:49 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* tests/check/libs/profile.c:
+	  encoding-target: Change target suffix to .gep
+	  Along with a bunch of other internal cleanups
+
+2011-01-03 13:21:26 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	  encoding-target: Add more docs regarding categories
+
+2011-01-03 13:20:19 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* tests/check/libs/profile.c:
+	* win32/common/libgstpbutils.def:
+	  encoding-target: Add API for list all categories and targets
+	  API: gst_encoding_list_available_categories
+	  API: gst_encoding_list_all_targets
+
+2010-12-22 18:18:00 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* tests/check/libs/profile.c:
+	* win32/common/libgstpbutils.def:
+	  encoding-profile: Add convenience method to find a profile
+	  API: gst_encoding_profile_find
+
+2010-12-22 18:16:33 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* tests/check/libs/profile.c:
+	  encoding-target: Implement save/load feature
+	  Fixes #637735
+
+2010-12-22 11:41:41 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* tests/check/libs/profile.c:
+	* win32/common/libgstpbutils.def:
+	  encoding-target: Add method to get a profile by name
+	  API: gst_encoding_target_get_profile
+
+2011-01-05 19:30:50 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Convert to new GstElementClass::request_new_pad_full vmethod
+
+2011-01-05 15:31:09 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/pbutils.h:
+	  pbutils: Don't forget to include the encoding headers
+
+2011-01-05 12:02:02 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix uninitialized variables
+	  reported by macosx gcc
+
+2010-12-07 14:59:46 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: Minor documentation changes
+
+2011-01-02 15:48:47 -0800  David Schleef <ds@schleef.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Add stream-format to h264 caps
+
+2011-01-02 17:21:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: default to enable-last-buffer=FALSE for audio sinks
+	  There isn't really any good reason to get the last buffer from an
+	  audio sink, so don't make the sink keep it around unnecessarily.
+
+2010-12-31 12:14:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* gst/playback/Makefile.am:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstinputselector.h:
+	* gst/playback/gstplay-marshal.list:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: use input-selector from core instead of internal copy
+
+2010-12-31 01:24:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	  tests: add input-selector-test and output-selector-test
+	  Moved from gst-plugins-bad into -base, becasue it uses videotestsrc
+	  and other elements from -base, so it can't be in core.
+
+2010-11-24 12:22:01 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/output-selector-test.c:
+	  output-selector-test: don't hardcode videosinks and use more colorspace conv.
+	  Use autovideosink instead of hardcoded sinks. Use an additional colorspace
+	  converter between videotestsrc and timeoverlay.
+
+2009-10-27 11:51:05 -0700  Michael Smith <msmith@songbirdnest.com>
+
+	* tests/icles/output-selector-test.c:
+	  tests: Remove executable bits from non-executable files.
+
+2009-02-24 16:33:51 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/icles/input-selector-test.c:
+	  tests: move examples directory to tests/examples as in every other GStreamer module
+
+2008-06-19 13:18:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests: Use BOILERPLATE macro and update output-selector test to the latest api changes.
+	  Original commit message from CVS:
+	  * gst/selector/gstoutputselector.c:
+	  * tests/icles/output-selector-test.c:
+	  Use BOILERPLATE macro and update test to the latest api changes.
+
+2008-02-07 13:48:20 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/icles/output-selector-test.c: Add a fixme comment.
+	  Original commit message from CVS:
+	  * gst/multifile/gstmultifilesink.c:
+	  Add a fixme comment.
+	  * gst/selector/gstoutputselector.c:
+	  Fix same leak as in input-selector.
+	  * tests/icles/output-selector-test.c:
+	  Improve the test.
+
+2008-01-29 07:38:31 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Replace the switch plugin with the selector plugin. Add output-selector as the opposite of input-selector (was switc...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-bad-plugins.args:
+	  * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-bad-plugins.interfaces:
+	  * docs/plugins/gst-plugins-bad-plugins.signals:
+	  * docs/plugins/inspect/plugin-metadata.xml:
+	  * docs/plugins/inspect/plugin-selector.xml:
+	  * docs/plugins/inspect/plugin-soundtouch.xml:
+	  * docs/plugins/inspect/plugin-switch.xml:
+	  * gst/selector/.cvsignore:
+	  * gst/selector/Makefile.am:
+	  * gst/selector/gstinputselector.c:
+	  * gst/selector/gstinputselector.h:
+	  * gst/selector/gstoutputselector.c:
+	  * gst/selector/gstoutputselector.h:
+	  * gst/selector/gstselector-marshal.list:
+	  * gst/selector/gstselector.c:
+	  * gst/selector/selector.vcproj:
+	  * gst/switch/.cvsignore:
+	  * gst/switch/Makefile.am:
+	  * gst/switch/gstswitch-marshal.list:
+	  * gst/switch/gstswitch.c:
+	  * gst/switch/gstswitch.h:
+	  * gst/switch/switch.vcproj:
+	  * tests/icles/.cvsignore:
+	  * tests/icles/Makefile.am:
+	  * tests/icles/output-selector-test.c:
+	  Replace the switch plugin with the selector plugin. Add output-
+	  selector as the opposite of input-selectoo (was switch). Add a test
+	  for output-selector. Add docs for the elements. The vcproj needs
+	  update. Fixes #500142.
+
+2010-12-30 18:08:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  baseaudiopay: fix timestamps on buffer lists
+	  Fix the outgoing timestamps and RTP timestamps on outgoing buffers when using
+	  buffer lists.
+
+2010-12-29 22:36:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: assume EBML files without doctype are matroska
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638019
+
+2010-12-29 12:53:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: only keep last valid timestamp
+	  Fixes #634397
+
+2010-10-13 17:09:13 +0200  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	  multifdsink: add first and last buffer's timestamp to the stats
+
+2010-12-29 11:51:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: fix typo in comment
+
+2010-12-28 17:39:58 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: fix interpretation of Theora granule position
+	  The offset part of the granpos is not a sign of the newer encoding.
+	  Use the version number instead.
+	  This fixes the criticals thrown by theoraparse, and (at last) the
+	  remaining part of #553244.
+
+2010-11-25 17:01:04 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: protect against ringbuffer disappearing while in a query
+	  Observed a case where the sink went to null-state during the query,
+	  hence the ringbuffer-pointer was NULL, causing a crash.
+	  Moving the ringbuffer-check code until after the query, and hold the
+	  lock during the check and while using the spec-values. It should not matter
+	  to the query wether the ringbuffer is present or not, and it actually
+	  gets a time bit more time to get the ringbuffer set up in this case!
+	  Fixes #635231
+
+2010-12-28 19:39:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: handle pads that are not added yet
+	  Don't try to stream data on pads that are not added yet. This happens while we
+	  discover the different streams.
+
+2010-12-28 11:41:49 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basedepay: fix refcounting issue
+	  Make sure that when _make_writable() returns a new buffer, we actually push that
+	  one instead of the old one.
+
+2010-12-25 15:22:42 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: implement tag extraction for Kate streams
+	  This will mainly allow Totem to know the language of those streams,
+	  so the subtitle selection menu gets properly filled out.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=638005
+
+2010-12-26 17:29:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for DVB subtitle caps
+
+2010-12-23 17:18:17 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: set headers on caps
+	  This will allow switching from one stream to another without having to send
+	  the headers for the new stream again.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=637927
+
+2010-12-22 15:29:56 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: Fix parsing of theora size
+
+2010-12-22 19:06:56 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't use gst_pad_alloc_buffer()
+	  allocate buffers using gst_buffer_new_and_alloc() instead of
+	  gst_pad_alloc_buffer_and_set_caps(), as the first one will
+	  cause the pad to block, and we don't want that since that will
+	  prevent subsequent pads from being fed if a block occurs at
+	  start, when all pads must be fed for playback to start.
+	  This fixes autoplugging of the tiger element and other things.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=637822
+
+2010-12-22 18:12:14 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Also use "Formatter"s for container formats
+
+2010-12-22 18:19:48 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: Fix typo
+
+2010-12-22 10:32:03 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Fix unitialized data warning
+	  Fixes a valgrind warning on jifmux tests on -bad caused by
+	  unitialized bytes.
+	  Fixes #637758
+
+2010-12-22 13:56:12 +0100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: minor fix in error handling.
+	  Don't call gst_bin_remove (bin, <invalid pointer>).
+
+2010-12-21 18:51:29 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	  pbutils: More gtk-doc annotations
+
+2010-12-21 10:26:40 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: delay stream-changed messages
+	  https://bugzilla.gnome.org/show_bug.cgi?id=637586
+
+2010-12-21 16:33:50 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* tests/check/libs/profile.c:
+	  encoding-target: Ensure target names and categories are valid
+
+2010-12-21 15:11:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  depay: update some docs
+
+2010-12-21 15:02:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  rtpdepayloade: add support for getting events
+	  Add support for intercepting sink events in the depayloader by adding a new
+	  vmethod.
+
+2010-12-21 13:37:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: keep timestamps when no decoded output
+	  Keep track of the timestamps even when we didn't generate decodable output.
+
+2010-12-21 13:19:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: avoid using invalid timestamps
+
+2010-12-21 10:41:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: don't pause for live buffering messages
+
+2010-12-20 18:29:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppay: use RTP base time when invalid timestamps
+	  When we have an invalid running-time (because we clipped, for example) use the
+	  RTP base time for timestamping instead of generating wrong RTP timestamps.
+
+2010-12-20 18:28:14 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtppayload: copy applied rate to segment
+	  Use set_segment_full to copy all segment values to the segment structure.
+
+2010-12-21 13:09:34 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* tests/check/elements/encodebin.c:
+	* tests/check/libs/profile.c:
+	  tests: Update container-less profile checks
+
+2010-12-21 13:08:15 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encoding-profile: Add guard against profiles without format
+
+2010-12-21 13:07:27 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Fix usage of non-container profiles
+
+2010-12-17 16:10:53 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	  docs: Update for videoscale class changes
+
+2010-12-20 17:46:48 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 169462a to 46445ad
+
+2010-12-19 13:41:22 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  gstdiscoverer: Don't leak tags
+
+2010-12-19 13:22:23 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tools/gst-discoverer.c:
+	  gst-discoverer: show global tags by default
+
+2010-12-19 09:53:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/rtsp.c:
+	  rtsp: Fix memory leaks in the gst_rtsp_url_decode_path_components() unit tests
+
+2010-12-18 20:47:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/encoding/Makefile.am:
+	  examples: Fix encodebin example CFLAGS and LDFLAGS
+	  Previously it would only succeed to link if a new enough
+	  libgstpbutils-0.10 was installed in the default library
+	  search path.
+
+2010-12-17 14:16:18 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: implement packet duration query for kate streams
+	  https://bugzilla.gnome.org/show_bug.cgi?id=637519
+
+2010-12-17 19:06:27 -0600  Rob Clark <rob@ti.com>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst/encoding/gstencodebin.c:
+	  fix compile errors on macosx
+	  with i686-apple-darwin10-gcc-4.2.1:
+	  encoding-profile.h:134: warning: type qualifiers ignored on function return type
+	  encoding-profile.c:240: warning: type qualifiers ignored on function return type
+	  gstencodebin.c: In function 'next_unused_stream_profile':
+	  gstencodebin.c:454: warning: format '%d' expects type 'int', but argument 8 has type 'GType'
+	  gstencodebin.c:464: warning: format '%d' expects type 'int', but argument 8 has type 'GType'
+
+2010-12-17 00:49:26 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: corrected buffer duration calculation to account for nonzero initial timestamp
+	  Since we calculate timestamps by:
+	  timestamp = t0 + (out samples) / (out rate)
+	  and durations by:
+	  duration = ((out samples) + (processed samples)) / (out rate) - timestamp
+	  if t0 is nonzero, this would simplify to
+	  duration = t0 + (processed samples) / (out rate).
+	  This duration is too large by the amount t0.  We should have done:
+	  duration = t0 + ((out samples) + (processed samples)) / (out rate) - timestamp
+	  so that
+	  duration = (processed samples) / (out rate).
+
+2010-12-16 20:40:33 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.h:
+	  audioresample: changed num_gap_samples, num_nongap_samples from guint32 to guint64 so that gaps of greater than or equal to 2^32 samples do not cause integer overflow
+
+2010-12-16 20:38:31 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: push half a history length, instead of a full history length, at end-of-stream so that output segment and input segment have same duration
+
+2010-12-16 20:34:13 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	  audioresample: renamed count_gap, count_nongap to more descriptive num_gap_samples, num_nongap_samples
+
+2010-12-16 20:32:07 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: replaced void* with gpointer
+
+2010-12-16 20:30:24 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: initial filter transient discarded; unit tests passing
+
+2010-12-16 20:09:58 -0800  Leo Singer <leo.singer@ligo.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/speex_resampler.h:
+	* gst/audioresample/speex_resampler_wrapper.h:
+	  Revert "Revert "audioresample: Add GAP flag support""
+	  This reverts commit 35c76b3409dde7f2dcc8232388a47a1b99b661a7.
+	  Conflicts:
+	  gst/audioresample/gstaudioresample.c
+	  gst/audioresample/gstaudioresample.h
+
+2010-12-16 10:26:43 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  timeoverlay: add missing break
+	  https://bugzilla.gnome.org/show_bug.cgi?id=637377
+
+2010-12-16 10:11:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Change classification to Filter/Converter/Video/Scaler
+
+2010-12-15 23:47:29 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* win32/common/libgstrtsp.def:
+	  win32: update the def file with the new rtsp api
+
+2010-12-15 17:51:36 +0100  Andy Wingo <wingo@oblong.com>
+
+	  add gst_rtsp_url_decode_path_components
+	  * gst-libs/gst/rtsp/gstrtspurl.h:
+	  * gst-libs/gst/rtsp/gstrtspurl.c (gst_rtsp_url_decode_path_components):
+	  New public function, returns a strv of uri-decoded path components.
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/rtsp.c: Add tests.
+
+2010-12-15 16:35:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtp.def:
+	  win32: update defs file
+
+2010-12-15 16:30:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: relax arrangement for RTP bufferlists
+	  Don't assume there are exactly 2 buffers but allow cases where the header and
+	  payload are in 1 buffer or where the payload is in more buffers.
+
+2010-12-15 14:55:34 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 20742ae to 169462a
+
+2010-12-15 12:58:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  basedepay: add support for buffer lists in the depayloader
+	  Add support for buffer lists in the depayloader.
+
+2010-09-13 10:08:47 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/encoding/.gitignore:
+	* tests/examples/encoding/Makefile.am:
+	* tests/examples/encoding/encoding.c:
+	* tests/examples/encoding/gstcapslist.c:
+	* tests/examples/encoding/gstcapslist.h:
+	  examples: encoding example
+	  Along with gstcapslist
+
+2010-08-13 17:36:38 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* gst/encoding/.gitignore:
+	* gst/encoding/Makefile.am:
+	* gst/encoding/gstencode-marshal.list:
+	* gst/encoding/gstencodebin.c:
+	* gst/encoding/gstencodebin.h:
+	* gst/encoding/gstsmartencoder.c:
+	* gst/encoding/gstsmartencoder.h:
+	* gst/encoding/gststreamcombiner.c:
+	* gst/encoding/gststreamcombiner.h:
+	* gst/encoding/gststreamsplitter.c:
+	* gst/encoding/gststreamsplitter.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/encodebin.c:
+	  gst: New encoding plugin
+	  https://bugzilla.gnome.org/show_bug.cgi?id=627476
+
+2010-08-13 17:27:52 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* docs/design/Makefile.am:
+	* docs/design/design-encoding.txt:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* docs/libs/gst-plugins-base-libs.types:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/profile.c:
+	* win32/common/libgstpbutils.def:
+	  pbutils: New Profile library
+	  https://bugzilla.gnome.org/show_bug.cgi?id=627476
+
+2010-12-15 12:21:05 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	  configure: use the -Bsymbolic-functions linker flag if supported
+	  This feature turns intra library calls into direct function calls and thus makes
+	  them a little faster. The downside is that this causes problems for e.g.
+	  LD_PRELOAD based tools. Thus add a configure option to turn it off.
+
+2010-12-14 00:16:13 -0800  David Schleef <ds@schleef.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Add check for yuv4mpeg
+
+2010-12-13 18:05:41 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: spell out two more container formats
+
+2010-12-13 16:20:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	* tools/gst-discoverer.c:
+	* win32/common/libgstpbutils.def:
+	  discoverer: query seekability
+	  Besides the duration we can also query the seekability of a stream. Use the new
+	  API in the gst-discoverer tool.
+	  API: gst_discoverer_info_get_seekable
+
+2010-12-13 16:23:04 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 011bcc8 to 20742ae
+
+2010-12-13 13:04:40 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* tests/check/elements/audioresample.c:
+	  tests: audioresample: adjust unit test to relaxed discont checking
+
+2010-12-13 12:34:58 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/Makefile.am:
+	* docs/design/Makefile.am:
+	  make: move the design doc also on the Makefile.am level (for dist)
+
+2010-12-13 10:05:00 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: relax discont checking slightly
+
+2010-12-13 09:56:04 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	  audioresample: provide as much valid output ts and offset as valid input
+	  ... by independently tracking time and offset, rather than having no offset
+	  leading to no output ts.
+
+2010-12-13 10:41:24 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinders: name "aac" typefinder "audio/aac"
+	  This is in sync how we call the others.
+
+2010-12-13 09:58:53 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/design-audiosinks.txt:
+	* docs/design/design-audiosinks.txt:
+	  docs: move design doc to design folder
+
+2010-12-11 19:33:33 +0200  Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
+
+	* gst/videotestsrc/generate_sine_table.c:
+	  videotestsrc: Add a missing return statement
+
+2010-12-11 17:18:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Deprecate new-decoded-pad and removed-decoded-pad signals
+	  They're really the same as pad-added and pad-removed from GstElement
+	  and it doesn't make sense to have two signals for the same thing.
+
+2010-12-11 17:14:36 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Emit "remove-decoded-pad" signal when pads are removed from decodebin2
+	  Fixes bug #636198.
+
+2010-12-10 18:57:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: unset flushing flag when starting
+	  When we start again after being stopped, clear the flushing flag or else
+	  it will always be TRUE.
+	  Fixes #636769
+
+2010-12-09 16:57:35 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add/Fix some media descriptions
+	  Fixes #623413
+
+2010-12-09 08:40:25 +0100  Gavin Stark <g.stark@realdigitalmedia.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Use gst_caps_can_intersect() instead of gst_caps_intersect()
+	  Fixes a memory leak and bug #636827.
+
+2010-12-08 12:55:24 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: improve iso media typefinding
+	  ... by also considering compatible brands rather than only aiming at major brand
+	  (of which there are a seemingly ever expanding great many).
+
+2010-12-08 12:28:32 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/libs/pbutils.c:
+	  tests: remove superflous ';' and reindent
+
+2010-12-08 12:09:45 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  docs: fix wrong use of Since: keyword
+
+2010-12-07 20:28:37 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: add AC-3, E-AC-3 typefind tests
+
+2010-12-03 17:33:40 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: ignore AC-3 BSIDs 9, 10 and >16
+	  These are reserved for future extensions which will not be backwards
+	  compatible to E-AC-3.
+
+2010-12-03 16:54:21 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: accept consecutive AC-3 frames of different sizes
+	  This is perfectly valid and occurs in particular when there are
+	  (in)dependent substreams present.
+
+2010-12-03 16:22:32 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: remove useless masking in (E-)AC-3 typefinders
+
+2010-12-03 16:14:15 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: stop scanning after suggesting E-AC-3 caps
+
+2010-12-03 18:08:58 +0200  René Stadler <rene.stadler@nokia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: fix E-AC-3 frame size parsing
+	  Frame size is given in words; it is already multiplied by two where
+	  needed, so the left shift is superfluous. This extra multiplication
+	  caused the code to inspect the third packet instead of the second,
+	  which would fail for files where the second packet has a size
+	  different from the first.
+
+2010-12-07 17:35:14 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: Move around the typedefs to make GIR happy
+	  Otherwise it will generate they symbols as _GstRTSP* (with the leading
+	  underscore).
+
+2010-12-07 11:31:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin.c:
+	  use _object_ref_sink() when we can
+
+2010-12-07 11:30:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsadeviceprobe.c:
+	  alsaprobe: don't abuse the object class lock
+	  don't abuse the class lock but use a new static lock for protecting the probed
+	  list of devices.
+
+2010-12-06 20:01:35 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	* gst/tcp/gsttcp.c:
+	* gst/tcp/gsttcp.h:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsink.h:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpclientsrc.h:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/tcp/gsttcpserversrc.h:
+	  tcp: remove deprecated GDP protocol
+
+2010-12-06 17:09:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  more 0.10 -> 0.11 changes
+
+2010-12-06 16:50:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* android/alsa.mk:
+	* android/app.mk:
+	* android/app_plugin.mk:
+	* android/audio.mk:
+	* android/audioconvert.mk:
+	* android/decodebin.mk:
+	* android/decodebin2.mk:
+	* android/gdp.mk:
+	* android/interfaces.mk:
+	* android/netbuffer.mk:
+	* android/pbutils.mk:
+	* android/playbin.mk:
+	* android/queue2.mk:
+	* android/riff.mk:
+	* android/rtp.mk:
+	* android/rtsp.mk:
+	* android/sdp.mk:
+	* android/tag.mk:
+	* android/tcp.mk:
+	* android/typefindfunctions.mk:
+	* android/video.mk:
+	  android: update for 0.11
+
+2010-12-06 12:11:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	  configure: start 0.11 branch
+
+2010-12-04 14:48:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	  tests: use GLib 2.22 API unconditionally
+
+2010-12-04 14:45:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/tag/lang.c:
+	* gst-libs/gst/tag/mklangtables.c:
+	* gst-libs/gst/video/convertframe.c:
+	  libs: use GLib 2.22 API unconditionally
+
+2010-12-03 17:41:18 +0100  Benjamin Gaignard <benjamin.gaignard@stericsson.com>
+
+	* Android.mk:
+	* android/NOTICE:
+	* android/alsa.mk:
+	* android/app.mk:
+	* android/app_plugin.mk:
+	* android/audio.mk:
+	* android/audioconvert.mk:
+	* android/decodebin.mk:
+	* android/decodebin2.mk:
+	* android/gdp.mk:
+	* android/gst-libs/gst/app/gstapp-marshal.c:
+	* android/gst-libs/gst/app/gstapp-marshal.h:
+	* android/gst-libs/gst/audio/audio-enumtypes.c:
+	* android/gst-libs/gst/audio/audio-enumtypes.h:
+	* android/gst-libs/gst/interfaces/interfaces-enumtypes.c:
+	* android/gst-libs/gst/interfaces/interfaces-enumtypes.h:
+	* android/gst-libs/gst/interfaces/interfaces-marshal.c:
+	* android/gst-libs/gst/interfaces/interfaces-marshal.h:
+	* android/gst-libs/gst/pbutils/pbutils-enumtypes.c:
+	* android/gst-libs/gst/pbutils/pbutils-enumtypes.h:
+	* android/gst-libs/gst/rtsp/gstrtsp-enumtypes.c:
+	* android/gst-libs/gst/rtsp/gstrtsp-enumtypes.h:
+	* android/gst-libs/gst/rtsp/gstrtsp-marshal.c:
+	* android/gst-libs/gst/rtsp/gstrtsp-marshal.h:
+	* android/gst-libs/gst/video/video-enumtypes.c:
+	* android/gst-libs/gst/video/video-enumtypes.h:
+	* android/gst/playback/gstplay-marshal.c:
+	* android/gst/playback/gstplay-marshal.h:
+	* android/gst/tcp/gsttcp-enumtypes.c:
+	* android/gst/tcp/gsttcp-enumtypes.h:
+	* android/gst/tcp/gsttcp-marshal.c:
+	* android/gst/tcp/gsttcp-marshal.h:
+	* android/interfaces.mk:
+	* android/netbuffer.mk:
+	* android/pbutils.mk:
+	* android/playbin.mk:
+	* android/queue2.mk:
+	* android/riff.mk:
+	* android/rtp.mk:
+	* android/rtsp.mk:
+	* android/sdp.mk:
+	* android/tag.mk:
+	* android/tcp.mk:
+	* android/typefindfunctions.mk:
+	* android/video.mk:
+	  Add build system for Android
+
+2010-12-03 15:46:07 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  defs: add new symbol
+
+2010-10-27 13:49:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: additional tag extraction
+	  ... supporting theora, flac, speex, celt.
+	  Fixes #629349.
+
+2010-10-27 12:08:25 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggstream: use separate tag extraction vfunction
+
+2010-10-27 11:58:53 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: refactor vorbis comment tag extraction
+
+2010-10-27 11:16:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: plug some oggstream leaks
+
+2010-10-27 10:59:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggstream: streamline tag extraction and prevent some leaks
+
+2010-10-27 10:58:16 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: send stream tags after newsegment and global tags
+
+2010-09-14 23:08:51 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: perform more (vorbis comment header) tag extractions
+	  In particular, move comment header parsing to gstoggstrem.c.
+	  Thanks to Felipe Contreras.
+	  Fixes #629349 (partially).
+
+2010-10-27 10:20:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	  riff: document omitted field in _gst_riff_strf_auds
+	  (aka WAVEFORMATEX)
+
+2010-10-10 17:15:53 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: fix incorrect warning on skeleton headers
+
+2010-11-20 19:02:50 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggparse: Set DELTA_UNIT on buffers
+
+2010-12-03 00:01:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  tests: fix video library unit test and skip non-working YUV9/YVU9 parts for now
+
+2010-12-02 23:49:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: add missing break statement for the GST_VIDEO_FORMAT_RGB8_PALETTED case
+
+2010-11-15 22:02:07 +0200  Evan Broder <evan@ebroder.net>
+
+	* tools/gst-visualise-m.m:
+	  gst-visualise: trim unused perl dependency
+	  Remove an unused perl module. Fixes #634522.
+
+2010-11-01 23:07:12 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: add some logging for failure case
+
+2010-11-01 23:06:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: log times in human readable form
+
+2010-11-01 22:44:16 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: more G_PARAM_STATIC_STRINGS use
+
+2010-11-01 22:42:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: move reoccuring logs to LOG and remove a double info
+	  Less debug spew in DEBUG category. No need to log pad again if we use
+	  GST_LOG_OBJECT(pad,...).
+
+2010-12-02 19:11:37 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	  libgstrtsp: Fix typo in .pc to use for GIR
+
+2010-12-02 15:16:25 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  docs: Add a whole bunch of symbols that were unused to the proper sections
+
+2010-11-10 11:02:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: only parse TTL for IP4 addresses
+	  Only IP4 addresses can have a TTL in the address.
+
+2010-11-10 10:53:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	* gst-libs/gst/sdp/gstsdpmessage.h:
+	* win32/common/libgstsdp.def:
+	  sdp: add method to check for multicast addresses
+	  Expose a previously internal method to check for multicast addresses.
+	  See #634093
+
+2010-11-03 11:13:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstpluginsbaseversion.h.in:
+	  pbutils: Take nano version into account in GST_CHECK_PLUGINS_BASE_VERSION()
+	  If the nano is > 0 the current version should be handled the same as
+	  micro + 1.
+
+2010-11-03 09:51:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add YUV9, YVU9 and IYU1 video formats
+	  API: GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV
+	  API: GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (chroma planes swapped)
+	  API: GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cr-Y0-Y1-Cb-Y2-Y3)
+
+2010-11-02 11:57:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add 8-bit paletted RGB
+	  API: Add GST_VIDEO_FORMAT_RGB8_PALETTED
+	  API: Add GST_VIDEO_CAPS_RGB8_PALETTED
+	  API: Add gst_video_parse_caps_palette()
+
+2010-10-31 19:17:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  gnomevfssrc: Remove dead assignment
+
+2010-10-31 19:14:27 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/tcp/gsttcp.c:
+	  tcp: Remove dead assignment
+
+2010-10-31 19:11:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: gen_video_chain() always returns a bin, no need to check for that
+
+2010-10-31 19:08:32 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: If we get EOS for an unknown stream just do nothing
+	  instead of dereferencing NULL pointers. This can happen if the stream
+	  was just removed from the streamsynchronizer in a bad time.
+
+2010-10-31 19:06:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: gen_video_deinterlace_chain() always returns a bin, no need to check that
+
+2010-10-31 19:01:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/v4l/v4l_calls.c:
+	  v4l: If no video tuner is the requested one don't read unitialized data
+
+2010-10-25 14:13:16 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Add docs for the new property
+	  Including Since markers
+
+2010-10-25 14:11:01 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Add docs for the new property
+	  Including Since markers
+
+2010-10-25 14:09:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Use PROP_ instead of ARG_ for the property enums
+
+2010-10-25 14:09:20 +0100  Andrea Sebastianutti <andreailseba@virgilio.it>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Add read-only properties window-width and window-height
+
+2010-10-25 14:08:43 +0100  Andrea Sebastianutti <andreailseba@virgilio.it>
+
+	* sys/ximage/ximagesink.c:
+	  ximagsink: Add read-only properties window-width and window-height
+
+2010-10-17 14:26:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Return correct component width/height for A420
+
+2010-12-02 00:15:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  Bump GLib requirement to >= 2.22
+	  See http://gstreamer.freedesktop.org/wiki/ReleasePlanning/GLibRequirement
+
+2010-12-02 00:12:51 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development
+
+=== release 0.10.31 ===
+
+2010-11-30 19:25:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.31
+
+2010-11-24 17:34:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: disconnect signal handlers before disposing
+
+2010-11-22 00:54:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  docs: improve decodebin2 docs a little
+	  Mention that new pads may be created even after no-more-pads.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=634584
+
+2010-11-20 15:45:49 -0800  Evan Nemerson <evan@coeus-group.com>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: Add information on exported packages to GIRs
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635392
+
+2010-11-18 04:51:56 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	  discoverer: Minor documentation fix
+	  docs: Minor discoverer documentation fix
+
+2010-11-18 00:36:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.30.5 pre-release
+
+2010-11-18 00:35:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/bg.po:
+	* po/ca.po:
+	* po/es.po:
+	* po/hu.po:
+	* po/sk.po:
+	* po/tr.po:
+	  po: update translations
+
+2010-11-18 00:33:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin.c:
+	  decodebin: fix one more pad template ref leak
+
+2010-11-17 10:14:59 +0200  Harri Mähönen <harri.mahonen@gmail.com>
+
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  *decodebin*: don't leak pad templates set on ghostpads
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635067
+
+2010-11-17 01:01:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  playbin2: disable streamsynchronizer magic for this release
+	  Some things aren't quite right yet and cause problems (0-sized buffers
+	  with PREROLL flag set cause crashes in elements that don't expect those;
+	  getting pipeline back to preroll/playing again when audio/video streams
+	  have different lengths and a seek past the end of one of the stream
+	  happens doesn't always work, etc.). Needs further investigation in the
+	  next cycle.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633700
+	  https://bugzilla.gnome.org/show_bug.cgi?id=634699
+
+2010-11-08 09:27:52 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Fix a gtk-doc gobject-introspection annotation
+	  gst_discoverer_discover_uri() expects the caller to unref the returned
+	  GstDiscovererInfo object. The corresponding gtk-doc annotation was not
+	  updated to reflect this.
+
+2010-11-08 09:26:27 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* tools/gst-discoverer.c:
+	  discoverer: Fix argument type to _container_info_get_streams()
+	  No reason for gst_discoverer_container_info_get_streams() to not take a
+	  GstDiscovererContainerInfo as its argument.
+
+2010-11-05 20:47:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: add --with-gtk option and default to Gtk+ 2.0 while the 3.0 API is still in flux
+	  https://bugzilla.gnome.org/show_bug.cgi?id=634014
+
+2010-11-03 10:35:35 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix IYU1 support
+	  Fix conversions to IYU1, they allocated infinite amounts of memory before
+	  because no conversion to IYU1 was actually implemented and it was running
+	  into an infinite loop trying to find suitable intermediate formats.
+	  Also fix the stride and sizes used for IYU1.
+
+2010-11-02 12:29:05 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/rtp.c:
+	  tests: fix invalid free and buffer list leak in rtp library unit test
+
+2010-11-02 12:03:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: fix leak in tag library unit test
+
+2010-11-02 12:01:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: fix leak when parsing undefined EXIF tag into tag list
+	  gst_buffer_set_data() does not set GST_BUFFER_MALLOCDATA, but
+	  the code assumes the buffer takes ownership of the memory
+	  allocated earlier.
+
+2010-11-02 11:57:02 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: fix GstDateTime leak when converting exif tag to tag list
+
+2010-11-01 17:00:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.30.4 pre-release
+
+2010-11-01 16:59:59 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/fr.po:
+	* po/ja.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/sl.po:
+	  po: update translations
+
+2010-10-30 16:07:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: update docs for discoverer API changes as well
+
+2010-10-30 16:03:18 +0100  Matthias Clasen <mclasen@redhat.com>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  examples: update some more code for new Gtk+ API, with fallback for older Gtk+ versions
+	  Move code to new Gtk+ 3.x / 2.9x API. We have defines in place
+	  already that make this code work fine on older Gtk+ 2.x.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632653
+
+2010-10-28 15:13:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  seek: Define the new combobox API to the old functions if using older GTK
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632653
+
+2010-10-30 15:31:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstutils.def:
+	* win32/vs6/gst_plugins_base.dsw:
+	* win32/vs6/libgstutils.dsp:
+	  win32: remove unused libgstutils stuff
+	  Cruft from before the lib was renamed to pbutils
+
+2010-10-28 18:51:08 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* tools/gst-discoverer.c:
+	* win32/common/libgstpbutils.def:
+	  discoverer: rename boolean getters for consistency
+	  Rename _get_is_image() to _is_image() and _get_interlaced() to _is_interlaced().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633311
+
+2010-10-30 12:24:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	  pbutils: remove padding from now-private GstDiscovererInfo structure
+
+2010-10-30 12:03:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Makefile.am:
+	* tools/.gitignore:
+	* tools/Makefile.am:
+	  tools: rename gst-discoverer binary to gst-discoverer-0.10
+	  We're not providing a wrapper like we do for the tools in core,
+	  since wrappers are confusing (e.g. for debugging purposes),
+	  mostly pointless (since the API is likely to change between
+	  major versions), and cause packaging issues when packages for
+	  two different major versions are to be installed in parallel.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633023
+
+2010-10-30 11:41:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/gst-discoverer.c:
+	  tools: update gst-discoverer tool for last-minute API change
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633311
+
+2010-10-29 14:17:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: calculate better timeout value
+	  We want to send the keealive message a little earlier than the timeout value
+	  specifies. Scale this based on the value of the timeout instead of just assuming
+	  5 seconds.
+
+2010-10-29 14:24:54 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: don't let the rtsp connection timeout
+	  Because we should act before the rtsp server does a timeout, we
+	  reduce the timeout-time with 5 seconds, this should be safe to always
+	  keep te rtsp connection alive.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633455
+
+2010-10-28 15:55:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add unit test for working reverse negotiation
+	  See bug #633147.
+
+2010-10-29 11:48:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix wrong flowreturn handling
+	  Oggdemux will currently try to pad alloc a buffer from the peer when it is
+	  reading the header files. This is a relic from the time where we had an internal
+	  parser and needs to be removed at some point in time.
+	  The problem is that when there is no peer pad yet (which is normal when
+	  collecting headers) we should still continue to parse all the packets of a
+	  page instead of erroring out on NOT_LINKED.
+	  Fixes #632167
+
+2010-10-29 11:47:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: add some more debug statements
+
+2010-10-26 16:41:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Fix subpicture overlay when deinterlacing disabled.
+	  Fix a bug when reconfiguring the playsink where the subpicture
+	  stream is broken by attempting to connect it through
+	  streamsynchroniser and second time.
+
+2010-10-28 17:38:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  discoverer: use const in most of the getters
+
+2010-10-28 03:09:10 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  discoverer: use specific types in getters
+	  Use GstDiscoverer{Audio,Video}Info in getters like
+	  gst_discoverer_{audio,video}_info_get_*(). This avoids the casts in the macros,
+	  help language bindings and is more correct.
+
+2010-10-28 11:56:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	  discoverer: Move documentation to the correct section
+	  And don't mention the (not existing) libgstdiscovery.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=633336
+
+2010-10-27 13:16:37 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7bbd708 to 011bcc8
+
+2010-10-24 16:09:26 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Get pad caps if we can't get negotiated caps
+	  Better provide something than nothing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632988
+
+2010-10-24 15:38:30 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	  discoverer: Don't ref a NULL caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632988
+
+2010-09-24 16:02:42 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't add non prerolled stream to topology
+	  If a final stream didn't preroll, don't add it to the topology since
+	  it doesn't give any information at all.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=632988
+
+2010-10-24 16:17:09 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Description for RealAudio container format
+
+2010-10-24 15:38:42 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for VP6 alpha and ASS subtitle
+
+2010-10-22 17:44:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.30.3 pre-release
+
+2010-10-20 11:01:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  seek: The new combo box text API is available since 2.23.0 and 2.91.1
+	  Only use it conditionally.
+
+2010-10-20 11:01:14 +0200  Matthias Clasen <mclasen@redhat.com>
+
+	* tests/examples/seek/jsseek.c:
+	  seek: Don't use deprecated combo box text API
+	  Fixes bug #632653.
+
+2010-10-21 12:24:19 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: workaround internal decodebin2 failing state change
+	  Fixes #632656.
+
+2010-10-21 13:38:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-xoverlay.c:
+	  tests: don't use deprecated gtk_widget_hide_all()
+	  gtk_widget_hide_all() has been deprecated in gtk+ 2.x and
+	  removed in 2.9x master. Just use gtk_widget_hide() instead.
+
+2010-10-21 13:07:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/Makefile.am:
+	  tools: fix linking problems caused by accidentally linking against installed pbutils/gstvideo libs
+	  Fixes build errors in jhbuild:
+	  /foo/build/gst-plugins-base/gst-libs/gst/video/.libs/libgstvideo-0.10.so: undefined reference to `gst_element_factory_list_get_elements'
+	  ../gst-libs/gst/pbutils/.libs/libgstpbutils-0.10.so: undefined reference to `gst_element_link_pads_full'
+	  /foo/build/gst-plugins-base/gst-libs/gst/video/.libs/libgstvideo-0.10.so: undefined reference to `gst_element_factory_list_filter'
+	  ../gst-libs/gst/pbutils/.libs/libgstpbutils-0.10.so: undefined reference to `gst_pad_link_full'
+	  /foo/build/gst-plugins-base/gst-libs/gst/video/.libs/libgstvideo-0.10.so: undefined reference to `gst_plugin_feature_list_debug'
+
+2010-10-19 00:07:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/pbutils-marshal.list:
+	* gst-libs/gst/rtsp/gstrtsp-marshal.list:
+	  libs: touch marshal.list files to force rebuild after Makefile.am changes
+	  Force regeneration of marshal.[ch] files after prefix changes in
+	  Makefile.am, to avoid build errors for those of us who don't
+	  habitually make clean first.
+
+2010-10-16 01:08:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/pbutils-enumtypes.h:
+	* win32/common/video-enumtypes.c:
+	  0.10.30.2 pre-release
+
+2010-10-16 01:07:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/LINGUAS:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translations
+
+2010-10-08 17:24:07 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	* tests/check/libs/tag.c:
+	  tag: Adds GST_TAG_CAPTURING_SOURCE
+	  Adds a tag to indicate the source/device used for the capture.
+	  Already maps it in exif and adds tests.
+	  API: GST_TAG_CAPTURING_SOURCE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=631773
+
+2010-10-08 15:51:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	* tests/check/libs/tag.c:
+	  tag: Adds GST_TAG_CAPTURING_METERING_MODE
+	  Adds a tag to inform what mode was used by a camera to calculate
+	  the picture capturing exposure
+	  Also adds mapping to exif and tests
+	  API: GST_TAG_CAPTURING_METERING_MODE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=631773
+
+2010-10-08 15:14:22 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	* tests/check/libs/tag.c:
+	  tag: Adds GST_TAG_CAPTURING_SHARPNESS
+	  Adds new tag for tagging sharpness processing used
+	  when capturing an image. Also maps it in the exif
+	  tags.
+	  Tests included.
+	  API: GST_TAG_CAPTURING_SHARPNESS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=631773
+
+2010-10-15 23:54:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	* win32/common/libgstrtsp.def:
+	  rtsp: don't export marshaller function
+	  Make sure the marshaller function isn't exported. As it was
+	  never in a public header file, this should be fine.
+
+2010-10-15 21:22:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	  pbutils: fix distcheck
+	  Apparently noinst implies dist.
+
+2010-10-15 11:23:02 -0700  David Schleef <ds@schleef.org>
+
+	* tests/check/Makefile.am:
+	  tests: Don't dist generated orc code
+
+2010-10-15 11:22:45 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	  Update generated orc code
+
+2010-10-15 19:18:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/pbutils.h:
+	* win32/common/libgstpbutils.def:
+	  pbutils: make marshaller private
+	  There's no reason to make the marshaller public API. Don't install
+	  pbutils-marshal.h header file and use prefix that makes sure the
+	  symbol doesn't get exported.
+
+2010-10-15 19:14:49 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	  pbutils: use fewer variables in Makefile.am to make things clearer
+	  Also fix typo in DISTCLEANFILES.
+
+2010-10-15 17:59:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump Orc requirement to 0.4.11
+	  Has fixes for volume, among other things.
+
+2010-10-15 17:23:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  docs: improve gst_discoverer_new() docs a bit
+
+2010-10-15 16:43:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: private structs need to padding
+
+2010-10-15 11:26:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix stupid copy&paste error in last commit
+
+2010-10-13 22:51:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add support for A420
+
+2010-10-13 20:45:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: API: Add A420 video format
+	  This is planar 4:2:0 YUV plus non-subsampled alpha plane.
+
+2010-10-14 12:31:39 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From 5a668bf to 7bbd708
+
+2010-10-14 16:36:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: fix ADTS caps stream-format detail
+	  Field should be "stream-format", not "stream-type".
+
+2010-07-08 15:22:08 +0200  Andrzej K. Haczewski <ahaczewski@gmail.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: extend AAC typefinder to detect LOAS streams
+	  Extend AAC typefinder to recognize LOAS stream as specified by
+	  ISO/IEC 14496-3:2009.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623918
+
+2010-10-13 23:26:35 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  *decodebin*: set pad-templates on ghostpads
+	  This makes calling gst_pad_get_pad_template() work.
+
+2010-10-12 21:23:03 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: Update with latest datetime from core
+	  Updates datetime functions to latest APIs in core
+
+2010-10-13 16:12:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/theora/gsttheoraparse.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/interfaces/mixertrack.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstsubparse.c:
+	  various: add a missing G_PARAM_STATIC_STRINGS flag to object properties
+
+2010-10-13 13:05:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: declare decodebin2 stable, deprecate the old decodebin
+	  https://bugzilla.gnome.org/show_bug.cgi?id=624949
+
+2010-10-13 12:55:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: declare stable, deprecate the old playbin
+	  https://bugzilla.gnome.org/show_bug.cgi?id=624949
+
+2010-10-12 16:03:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: only keep last valid granulepos
+	  Only keep the last valid granulepos we see when scanning the last
+	  pages. It is possible that the last page that we inspect has a -1 granulepos, in
+	  which case we want to keep the previous valid time instead.
+	  Fixes #631703
+
+2010-10-10 15:22:52 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix check for last page
+
+2010-10-10 15:22:04 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: change checks from is_skeleton to is_sparse
+
+2010-10-10 15:17:31 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: move is_sparse into stream map
+
+2010-10-11 18:06:18 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: vorbis: adds missing lib
+	  Adds missing lib to vorbis check tests makefile
+
+2010-10-11 14:30:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Set GST_ELEMENT_IS_SOURCE flag
+	  uridecodebin behaves like a source, let's mark it as a source
+
+2010-10-10 00:52:13 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: expose telemetry properties only if libtheora was compiled with --enable-telemetry
+	  Since this is just a debugging feature and libtheora will usually not be
+	  compiled with that option enabled, we should maybe just hide these properties,
+	  since they won't work anyway, and avoid confusing warnings.
+	  Also rename properties to make them less cryptic.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=628488
+
+2010-10-09 23:49:35 +0100  Alexey Fisher <bug-track@fisher-privat.net>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	  theoradec: add properties to enable debugging telemetry overlay
+	  The theora decoder can overlay debugging information on the output
+	  video. This functionality is only available if libtheora has been
+	  compiled with --enable-telemetry. For more details see:
+	  http://people.xiph.org/~xiphmont/demo/theora/demo2.html
+	  Based on original patch by Michael Smith <msmith at xiph org>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=628488
+
+2010-10-10 18:35:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Make sure that the caps for upstream negotiation are simple caps
+	  Fixes bug #631774.
+
+2010-10-09 14:17:57 +0100  Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>
+
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	  examples: g_mapped_file_unref exists already since GLib 2.21.3
+
+2010-10-07 19:32:56 +0200  Guillaume Emont <gemont@igalia.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix seeking with negative rate with skeleton
+	  Files with a skeleton, or other files with a stream that ends before the end of
+	  the chain would start playing from the end of the chain when trying to seek with
+	  a negative rate at a position between the end of any stream and the end of the
+	  chain.
+	  This is due to the loop in _do_seek() assuming that pages will be encountered
+	  for all streams shortly after the place where we want to seek, as found by
+	  do_binary_search().
+	  In the first iteration of the loop, stream ends are now checked against the
+	  time of the current page.
+
+2010-10-07 18:53:35 +0100  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: gdp protocol is deprecated. People should use gdppay instead.
+
+2010-10-08 12:43:28 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From c4a8adc to 5a668bf
+
+2010-09-28 12:17:41 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/descriptions.c:
+	* gst-libs/gst/pbutils/gstdiscoverer-private.h:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	* gst-libs/gst/pbutils/pbutils-private.h:
+	  pbutils: rename gstdiscoverer-private.h to pbutils-private.h
+
+2010-09-28 12:15:22 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* gst-libs/gst/pbutils/gstdiscoverer-private.h:
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	  pbutils: Use copy_and_clean_caps for description methods
+	  This allows the various _get_*_description() methods to be more
+	  forgiving with the provided caps.
+
+2010-10-08 12:51:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 5e3c9bf to c4a8adc
+
+2010-10-08 11:23:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  rtsp: make public _get_type() functions thread-safe
+
+2010-10-08 10:29:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  rtspurl: minor clean-up
+	  Merge and const-ify two arrays that should be one.
+
+2010-10-08 10:06:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	  rtsp: fix enum value name in enums that are public API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629746
+
+2010-10-08 09:48:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audio: make public get_type() functions thread-safe
+
+2010-10-08 09:45:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audio: fix enum value name in enums that are public API
+	  So run-time bindings can introspect the names correctly (we abuse this
+	  field as description field only in elements, not for public API
+	  (where the description belongs into the gtk-doc chunk).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629746
+
+2010-10-08 12:30:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	  volume: Regenerate generated orc C code again with an orc fix for loading double parameters
+
+2010-10-08 11:50:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  volume: Update generated orc sources
+
+2010-10-08 11:49:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Fix unit test failure for the controlled processing functions
+	  Going over integer arithmetic will lead to minimal rounding errors,
+	  leading to +/-1 changes for volume==1.0. Implement the controlled
+	  processing with floating point arithmetic, which was already done
+	  for the C versions anyway.
+
+2010-10-08 09:10:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Require orc 0.4.10
+
+2010-10-07 23:54:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: Update generated orc files
+
+2010-10-07 23:54:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Update for orc changes
+	  double parameters are declared with .doubleparam now.
+
+2010-10-03 11:21:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  volume: Update generated orc sources
+
+2010-10-03 12:00:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Fix controlled processing via orc
+
+2010-10-03 11:24:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Actually enable usage of the orc optimized functions
+
+2010-10-03 11:20:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Implement int32 processing with orc
+
+2010-10-01 12:21:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Implement controlled processing for int16/1-2ch and int8/1,2,4ch with orc
+
+2010-10-01 11:13:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Implement controlled processing for f64/1ch and f32/1-2ch in orc
+
+2010-10-01 11:00:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Convert parts of the controlled processing to orc
+
+2010-10-01 10:44:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Implement f64 scaling with orc
+	  This requires orc 0.4.10
+
+2010-10-01 10:38:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	  audioconvert: Implement remaining conversion functions from/to doubles to orc
+	  This requires orc 0.4.10
+
+2010-10-07 20:54:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: use g_object_notify_by_pspec() if possible
+	  Use g_object_notify_by_pspec() when building against GLib >= 2.26.
+	  This avoids the pspec lookup which takes the global paramspec pool lock.
+
+2010-10-07 20:37:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: use g_object_notify_by_pspec() if possible
+	  Use g_object_notify_by_pspec() when building against GLib >= 2.26.
+	  This avoids the pspec lookup which takes the global paramspec pool lock.
+
+2010-10-04 10:01:19 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Do not advance segment starts beyond stop times
+	  Advance stop times too when they are getting higher than the
+	  stop time of segments, avoiding assertions.
+	  The stop time has to be advanced too so that running time keep in sync
+	  for gapless mode.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=631312
+
+2010-10-06 16:19:49 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/rtp.c:
+	  tests: rtp: No need to unref buffer from bufferlist
+	  Buffers obtained from buffer list iterators don't need to
+	  be unreffed.
+	  Test was failing due to this.
+
+2010-10-04 11:22:45 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: reverse playback; decode pending buffers upon EOS
+
+2010-10-05 19:15:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: use math-compat.h here as well
+	  Hopefully the powers that be don't mind the gst/glib include here
+	  too much.
+
+2010-10-05 19:13:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: include new math-compat.h header for rint() on MSVC
+	  Should fix compilation with Visual Studio 2008.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630802
+
+2010-10-05 17:19:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtp.def:
+	  win32: update def file with new RTP methods
+
+2010-10-05 17:13:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/libs/rtp.c:
+	  check: fix rtp checks
+	  Fix the checks for the extension support in RTP.
+
+2010-10-05 16:36:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: fix position reporting
+
+2010-08-26 12:34:11 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  rtcpbuffer: Add function to manipulation the data in RTCP feedback packets
+	  Add methods to get/set the length of the Feedback Control Information (FCI) as
+	  well as getting a pointer to the FCI itself.
+
+2010-08-23 16:41:44 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* tests/check/libs/rtp.c:
+	  tests: Test the manipulations of bufferlists containing RFC 5285 header extensions
+
+2010-08-23 14:24:21 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add function to transform a GstBuffer into a GstBufferList
+	  Add a new function called gst_rtp_buffer_list_from_buffer() that takes
+	  a GstBuffer containing a RTP packets and spits out a GstBufferList
+	  containing two buffers, one with the header and the other with the payload.
+
+2010-08-22 19:44:38 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add functions to add RFC 5285 header extensions to GstBufferLists
+	  Add functions to add header extensions to buffer lists, these functions only modify
+	  the header part of the buffer lists, so the data is not copied.
+
+2010-08-22 17:22:21 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add function to read RFC 5285 header extensions from GstBufferLists
+
+2010-08-20 15:30:08 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* tests/check/libs/rtp.c:
+	  tests: Add test for RTP header extension functions
+
+2010-08-20 17:13:06 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add function to add RTP header extensions with a two bytes header
+
+2010-08-20 12:54:38 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add function to append RFC 5285 one byte header extensions
+
+2010-08-19 16:26:18 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add function to parse RFC 5285 header extensions
+	  RFC 5285 describes a generic method to add multiple header extensions to RTP packets.
+	  These functions parse these headers and return them, both for the one-byte header and the
+	  two bytes headers.
+
+2010-10-05 12:05:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  libvisual: only drop frames that are really too old
+	  Also take the frame duration into account so that we don't drop frames that are
+	  partially past the estimated QoS time.
+
+2010-10-05 12:01:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  libvisual: add latency query
+	  Add our own latency to the latency query reply from upstream.
+
+2010-10-05 12:00:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  libvisual: add some defines
+	  Add some defines for width/height/fps and a define for the minimum amount of
+	  samples we need to buffer.
+
+2010-10-04 15:48:51 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* tools/gst-discoverer.c:
+	  gst-discoverer: The 'ready' signal was renamed to 'finished'
+
+2010-10-04 17:27:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoraparse.c:
+	  parse: Don't error on discont
+	  We don't need to error out when we detect a discontinuity.
+
+2010-10-04 17:08:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoraparse.c:
+	  theoraparse: set caps on streamheader too
+
+2010-10-04 13:07:14 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	  build: Fix include path order for gir generation
+	  This makes sure that the built girs are picked up over installed girs
+	  where this is currently the case.
+
+2010-10-01 14:52:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec utils: populate mpeg4 caps "level" field with level, not profile
+	  Call the right function to get the level. Also add some more debug
+	  logging.
+
+2010-10-01 10:47:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  volume: Update generated orc files
+
+2010-10-01 10:42:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: Improve f32 scaling by using only a single array
+	  Passing the same array as dest and src is invalid anyway because
+	  they're maked with the restrict qualifier.
+
+2010-09-30 15:19:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  pbutils: include config.h in codec utils
+
+2010-09-30 00:19:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  docs: add new codec utils API to docs
+
+2010-05-01 01:03:18 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	* win32/common/libgstpbutils.def:
+	  pbutils: Add MPEG-4 Video profile/level extraction
+	  This adds code to translate the profile_and_level indication from the
+	  MPEG-4 video (ISO/IEC 14496-2) headers to a string profile/level. The
+	  mappings are taken from the spec and Wireshark's code, and might need to
+	  be expanded on.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617314
+	  API: gst_codec_utils_mpeg4video_get_profile()
+	  API: gst_codec_utils_mpeg4video_get_level()
+	  API: gst_codec_utils_mpeg4video_caps_set_level_and_profile()
+
+2010-04-30 20:50:09 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	  pbutils: add H.264 profile/level extraction functions to codec utils
+	  This adds code to parse the first few bytes of H.264 sequence parameter
+	  set in order to extract the profile and level as const strings. This
+	  code was originally in both qtdemux and matroskademux.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617314
+	  API: gst_codec_utils_h264_get_level()
+	  API: gst_codec_utils_h264_get_profile()
+	  API: gst_codec_utils_h264_caps_set_level_and_profile()
+
+2010-04-30 15:12:04 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	* gst/typefind/gsttypefindfunctions.c:
+	* win32/common/libgstpbutils.def:
+	  pbutils: add AAC profile detection to codec utils
+	  This moves AAC profile detection to pbutils, and uses this in
+	  typefindfunctions. This will also be used in qtdemux.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617314
+	  API: gst_codec_utils_aac_get_profile()
+	  API: codec_utils_aac_caps_set_level_and_profile()
+
+2010-04-30 13:41:17 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	* gst-libs/gst/pbutils/pbutils.h:
+	* gst/typefind/Makefile.am:
+	* gst/typefind/gstaacutil.c:
+	* gst/typefind/gstaacutil.h:
+	* gst/typefind/gsttypefindfunctions.c:
+	* win32/common/libgstpbutils.def:
+	  pbutils: add codec-specific utility functions for AAC
+	  This allows us to add generic codec-specific functionality, like
+	  extracting profile/level data from headers, without having to duplicate
+	  code across demuxers and typefindfunctions.
+	  As a starting point, this moves over AAC level extraction code from
+	  typefindfunctions, so it can be reused in qtdemux, etc.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617314
+	  API: gst_codec_utils_aac_get_sample_rate_from_index()
+	  API: gst_codec_utils_aac_get_level()
+
+2010-09-30 13:12:30 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: fix unused function warning with debug disabled
+
+2010-09-30 12:59:46 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: fix illegal use of internal debug category function
+	  From gstinfo.h:
+	  /* do not use this function, use the GST_DEBUG_CATEGORY_INIT macro */
+	  GstDebugCategory *_gst_debug_category_new (const gchar * name,
+	  And more importantly:
+	  #pragma GCC poison _gst_debug_category_new
+	  So this commit fixes --disable-gst-debug builds.
+
+2010-09-29 18:57:50 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tools/gst-discoverer.c:
+	  gst-discoverer: Print out topology if available.
+	  If we have some unhandled streams, we can still print out the remaining
+	  topology.
+
+2010-09-29 18:54:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't post async-done when not needed
+	  Where it was previously located, we would get async-done for the first
+	  unknown-type, even if other valid streams would appear afterwards.
+	  decode_bin_expose() will take care of posting async-done when the group
+	  is exposed.
+	  But we still want to post it in case the typefinding returned an unknown
+	  type, in which case we will post it after posting an error.
+	  These two changes ensure we do as much as possible before posting async-done.
+
+2010-09-29 16:53:21 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basertpdepay: ensure metadata is writable
+
+2010-09-29 13:29:20 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add descriptions for more codecs
+
+2010-09-29 12:33:44 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/examples/seek/seek.c:
+	  seek: Fix debug statement argument type
+
+2010-09-28 09:30:57 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tools/Makefile.am:
+	  More makefile Fixes
+	  Removing some not needed lines added in the last makefile
+	  fixes commit (previous commit).
+	  Also adds some more makefile files to check tests
+
+2010-06-17 14:32:22 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: allow render rectangle coordinates to be negative
+	  Useful for cropped zooming.
+
+2010-06-17 14:33:44 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  xoverlay: allow render rectangle coordinates to be negative
+	  This is useful for cropped zooming of the overlay.
+
+2010-09-28 15:15:57 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  xoverlay: fix endless loop in deprecated method
+
+2010-09-28 08:46:25 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/examples/app/Makefile.am:
+	* tools/Makefile.am:
+	  Fixing Makefiles
+	  Adds some missing lines to makefiles
+
+2010-09-27 18:14:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: add debug category for tags utility functions
+
+2010-09-27 14:36:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: try ISO-8859-1 as second fallback in case WINDOWS-1252 is not supported
+	  Better safe than sorry. Some embedded systems may use crippled iconv
+	  implementations or not support WINDOWS-1252 for other reasons.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630471
+
+2010-09-23 23:53:48 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: when converting freeform strings try Windows-1252 as fallback instead of ISO-8859-1
+	  Windows-1252 is a superset of ISO-8859-1, which uses some space
+	  allocated to control characters for additional printable characters.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630471
+
+2010-09-24 21:30:20 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: ptalarbvorm speed level goes to 3
+
+2010-09-24 16:31:37 +0200  Vladimir <wl2776 at gmail.com>
+
+	* tests/examples/seek/seek.c:
+	  seek: Add #define for seekbar granularity
+	  Fixes #630496
+
+2010-09-24 14:03:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/audio-enumtypes.c:
+	* win32/common/audio-enumtypes.h:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/gstrtsp-enumtypes.h:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/interfaces-enumtypes.h:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/pbutils-enumtypes.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  win32: define GST_PACKAGE_RELEASE_DATETIME in win32 config.h as well
+	  Also update enums.
+
+2010-09-24 00:25:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/.gitignore:
+	  .gitignore: ignore new appsrc unit test
+
+2010-09-24 13:09:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: add Since markers
+	  Fixes #630443
+
+2010-07-30 13:54:42 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	* win32/common/libgstaudio.def:
+	  baseaudiosink: Added getter and setter for drift tolerance.
+
+2010-09-24 12:54:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: subtract the render_delay from our latency
+	  The latency reported by the base class includes the render_delay, which we don't
+	  want to include when we start slaving our clocks.
+	  See #630441
+
+2010-09-23 23:57:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: Use G_DEFINE_ABSTRACT_TYPE instead of manual GObject boilerplate code
+	  This also makes the _get_type() function threadsafe.
+	  Fixes bug #630440.
+
+2010-09-23 10:16:07 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tags: exif: Add mapping for _HORIZONTAL_ERROR
+	  Maps GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR to the
+	  GPSHPositionError tag in exif.
+	  Tests included.
+
+2010-09-22 14:10:18 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/appsrc.c:
+	  appsrc: Do not override buffer caps if appsrc caps is null
+	  Make appsrc not set caps on buffers when its own caps is NULL.
+	  This avoids calling make_metadata_writable on all buffers and
+	  prevents losing buffer caps in case we are not replacing it
+	  with something meaningful.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630353
+
+2010-09-21 18:57:42 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraenc.h:
+	  theoraenc: Make the bitrate/quality dynamically modifiable
+	  https://bugzilla.gnome.org/show_bug.cgi?id=630303
+
+2010-09-22 12:35:59 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* tools/gst-discoverer.c:
+	  discoverer: Fixup DiscovererResult handling
+	  This was a leftover from the changes from a flag to an enum
+
+2010-09-22 12:10:24 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: We don't need the signals from the queues
+
+2010-09-22 01:50:21 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/Makefile.am:
+	  gst-libs: build pbutils after video
+	  Because pbutils now depends on video.
+
+2010-09-21 18:33:36 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From aa0d1d0 to 5e3c9bf
+
+2010-09-20 21:04:48 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  discoverer: fix docs
+	  While the doc parser allows for certain variation, it is a good idea to not
+	  use random characters here and there, but try to stick to the little markup
+	  syntax there is.
+
+2010-09-20 16:45:32 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Fix debug statement.
+	  Fixes build on macosx
+
+2010-09-20 16:28:52 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/volume/gstvolumeorc-dist.c:
+	  volume: orc fixup for loading float arguments
+	  This is only used with DISABLE_ORC.
+
+2010-09-20 11:24:10 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tools/.gitignore:
+	* tools/Makefile.am:
+	* tools/gst-discoverer.c:
+	  tools: Standalone tool for discovering media file properties
+	  Fixes #625944
+
+2010-09-20 11:23:36 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstpbutils.def:
+	  win32: Update with symbols from GstDiscoverer
+	  Fixes #625944
+
+2010-09-20 11:23:17 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/Makefile.am:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* docs/libs/gst-plugins-base-libs.types:
+	  docs: Documentation for new pbutils GstDiscoverer
+	  Fixes #625944
+
+2010-09-20 11:22:32 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/pbutils/.gitignore:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/gstdiscoverer-private.h:
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/pbutils-marshal.list:
+	* gst-libs/gst/pbutils/pbutils.h:
+	  pbutils: New Discoverer utility
+	  Fixes #625944
+
+2010-09-20 11:13:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add mp3 to the apetag extensions
+
+2010-09-18 13:15:08 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix regression in ball pattern
+	  Was painting using two different methods.
+
+2010-09-17 11:46:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: Fix ACCEPTABLE_CHAR() macro to work with signed and unsigned chars
+
+2010-09-17 11:44:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  Revert "sdp: Remove useless check in macro"
+	  This reverts commit e6a041b69fd21c42651d98cf8a3064e43cecc51c.
+	  It's not a useless check, the signedness of "char" and "gchar" is
+	  defined by the ABI.
+
+2010-09-17 10:43:04 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: Remove useless check in macro
+	  A signed char is always < 128. Fixes a warning on macosx build.
+
+2010-09-16 18:03:23 -0700  David Schleef <ds@schleef.org>
+
+	* gst/adder/gstadderorc-dist.c:
+	* gst/adder/gstadderorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.h:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  orc: update generated files to fix MSVC compile issues
+
+2010-09-16 17:56:31 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/gstvideoscaleorc.orc:
+	  videoscale: Don't use broken orc feature
+
+2010-09-16 19:30:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  xoverlay: G_GUINTPTR_FORMAT is since 2.22
+	  Don't rely on too new symbols, we only depend on 2.20.
+
+2010-09-16 15:01:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/playrec/.gitignore:
+	* tests/examples/playrec/Makefile.am:
+	* tests/examples/playrec/playrec.c:
+	  examples: add synchronized playback and capture example
+	  Add an example that demonstrates synchronized playback and capture.
+
+2010-09-16 17:15:32 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Fix indentation
+
+2010-09-16 17:14:20 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add bar pattern
+	  Simple bar with foreground color on the background color
+
+2010-09-16 15:07:15 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* tests/check/elements/videotestsrc.c:
+	  tests: use gst-check API in videotestsrc
+	  use gst_check_drop_buffers in videotestsrc to
+	  clear the global buffers list.
+
+2010-09-16 14:55:55 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* tests/check/elements/videotestsrc.c:
+	  tests: Fix unit test of videotestsrc
+	  Use UYVY for unit tests, it's exactly the same as Y422.
+	  (which is currently disabled in videotestsrc)
+
+2010-09-15 15:13:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update for new strings
+
+2010-09-15 15:12:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  docs: add Since: comment to docs for new GST_VIDEO_FORMAT_UYVP
+
+2010-09-14 11:20:42 -0400  Tristan Matthews <le.businessman@gmail.com>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  gnomevfsrc: set GST_PARAM_MUTABLE_READY flag on the "handle" property
+	  Fixes #629672
+
+2010-09-15 15:19:04 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: fix segfault on negative horizontal-speed
+
+2010-09-15 14:15:13 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Actually dispose the unused ghostpads
+
+2010-09-15 11:28:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/speex_resampler.h:
+	* gst/audioresample/speex_resampler_wrapper.h:
+	  Revert "audioresample: Add GAP flag support"
+	  This reverts commit 129af0d8e6a74e8edef3e77c3626616b674b7cc1.
+	  This shouldn't be committed at all, it isn't ready and apparently
+	  was in the wrong branch locally.
+
+2010-09-15 11:26:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	  video: Add a destroy notify parameter to gst_video_convert_frame_async()
+	  Binding generators apparently need this as they can't really know
+	  that the callback is guaranteed to be called exactly once and that
+	  the user_data can be freed at the end of it.
+
+2010-09-14 12:00:39 +0200  Leo Singer <lsinger@caltech.edu>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/speex_resampler.h:
+	* gst/audioresample/speex_resampler_wrapper.h:
+	  audioresample: Add GAP flag support
+	  Fixes bug #586570.
+
+2010-09-05 15:17:47 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	* sys/v4l/gstv4lxoverlay.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/examples/overlay/qt-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-xoverlay.cpp:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/stress-xoverlay.c:
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-xoverlay.c:
+	* win32/common/libgstinterfaces.def:
+	  xoverlay: Add guintptr versions of functions
+	  And deprecate the gulong versions.  This is to support platforms
+	  where sizeof(unsigned long) < sizeof(void *).  Fixes #627565.
+	  API: Add gst_x_overlay_set_window_handle()
+	  API: Deprecate: gst_x_overlay_set_xwindow_id()
+	  API: Add gst_x_overlay_got_window_handle()
+	  API: Deprecate: gst_x_overlay_got_xwindow_id()
+	  API: Add GstXOverlay::set_window_handle()
+	  API: Deprecate: GstXOverlay::set_xwindow_id()
+
+2010-09-14 12:31:58 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add UYVP
+
+2010-09-12 20:36:19 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Various improvements
+	  Replace moving-color-bars pattern with smpte100, and change
+	  moving-speed to horizontal-speed.  Default is now 0.  Add
+	  a rotation stage to pattern building.
+	  Allocate a temporary scanline for building images.  Remove
+	  unused code.  Disable several patterns that we're unable to
+	  test and probably never used.  Add other variants of bayer
+	  sampling.  Convert some patterns to use videotestsrc_blend_line.
+
+2010-09-10 18:10:40 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: clean up blink pattern
+
+2010-09-10 15:57:54 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Clean up the RGB code
+
+2010-09-10 14:40:44 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Convert to intermediate AYUV/ARGB
+	  Scanlines are generated into AYUV/ARGB, then converted to the
+	  various formats.
+
+2010-09-10 12:48:30 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: rearrange code to work on scanlines
+
+2010-09-10 12:03:07 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix recent breakage of smpte75 pattern
+
+2010-09-01 15:18:31 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add moving color bars pattern
+	  This pattern is moving the color bars with a given
+	  speed. Negative speed is inverting the moving direction.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=628500
+
+2010-06-14 15:42:09 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_image.c:
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: refactor using more Orc code
+	  Convert downsampling to Orc.  Convert horizontal linear scaling
+	  to Orc.  Combine horizontal and vertical scaling into one pass.
+
+2010-09-12 19:34:28 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add UYVP, 10-bit 4:2:2
+
+2010-09-14 08:41:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  video: Add gst_video_convert_frame_async() to the docs
+
+2010-09-14 08:40:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: Add gst_video_convert_frame() and gst_video_convert_frame_async() to the .def files
+
+2010-09-14 08:40:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  video: Add unit test for gst_video_convert_frame_async()
+
+2010-09-14 08:39:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add async variant of the convert frame function
+	  API: gst_video_convert_frame_async()
+
+2010-09-12 16:53:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  video: Add a simple unit test for the new convert_frame API
+	  Unfortunately this can't test the encoding because there's no
+	  image encoder in base.
+
+2010-09-12 16:51:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	  video: Strip framerate from the target caps
+	  There will always be only a single output buffer and if the
+	  target caps have a different framerate than the input there
+	  will be a negotiation error during conversion.
+
+2010-09-12 16:36:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/convertframe.c:
+	  video: Refactor convert_frame a bit and fix some minor memory leaks in error cases
+
+2010-09-09 14:11:52 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	* gst/playback/gstscreenshot.c:
+	* gst/playback/gstscreenshot.h:
+	  playback: Switch to using gst_video_convert_frame
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629157
+
+2010-09-09 13:44:54 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/convertframe.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add new method for converting a video frame
+	  https://bugzilla.gnome.org/show_bug.cgi?id=629157
+
+2010-09-13 10:02:44 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: prevent another race with shutdown state change
+
+2010-09-11 14:55:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstsdp.def:
+	  win32: Add new SDP symbols to the .def files
+
+2010-09-10 18:42:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: remove leftover g_print
+
+2010-09-10 17:55:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	* gst-libs/gst/sdp/gstsdpmessage.h:
+	  sdp: add methods to convert between uri and message
+	  Add methods to convert between uri and sdpmessages, loosly based on
+	  http://tools.ietf.org/html/draft-fujikawa-sdp-url-01
+	  API: GstSDPMessage::gst_sdp_message_parse_uri
+	  API: GstSDPMessage::gst_sdp_message_as_uri
+
+2010-09-10 10:40:52 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* tests/check/elements/videotestsrc.c:
+	  tests: videotestsrc change the pattern property for the tests
+
+2010-09-10 08:42:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadderorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.c:
+	  orc: Fix generated source files
+
+2010-09-09 20:45:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  tests: fix passing of URIs containing '*' and '?' to the seek example
+	  Only do wildcard expansion (why?!) on things that look like local
+	  file paths. Fixes passing of URIs containing '*' and '?' (see #629212).
+
+2010-09-09 21:51:18 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/generic/states.c:
+	  tests: allow running state tests for all elements
+	  Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check
+	  to try elements that would normaly be skipped.
+
+2010-09-09 11:12:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: Do debug category initialization in plugin_init again
+
+2010-09-09 10:59:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadderorc-dist.c:
+	* gst/adder/gstadderorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.h:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  orc: Update generated source files everywhere
+
+2010-09-09 10:57:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadderorc.orc:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/plugin.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrcorc.orc:
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  Revert "Revert "Use init functions for Orc code""
+	  This reverts commit 93aa13639d74449dc68296427e5dbcfe8aca5f51.
+	  Everything should work now after regenerating the disted source files.
+
+2010-09-07 19:04:23 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstaudio.def:
+	  win32: Add new symbol to libgstaudio
+
+2010-09-07 18:09:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudio: avoid taking extra ref on sink/src
+	  Don't take an extra ref on the sink and source because that creates a reference
+	  cycle. Instead, use the invalidate method of the clock when the sink and source
+	  are freed. This way, we don't call into the time function anymore after the
+	  objects are disposed.
+
+2010-09-07 18:06:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	  audioclock: add a function to invalidate the clock
+	  Add a function to invalidate the time function of a clock. Useful for when the
+	  function becomes invalid.
+
+2010-09-07 16:26:56 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/Makefile.am:
+	  check: Fix linking order of libs/tag
+
+2010-09-07 16:26:30 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/gst-plugins-base.supp:
+	  check: Make fontconfig leak suppression more generic
+
+2010-09-07 08:46:15 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds mappings for new image ppi tags
+	  Adds mappings for GST_TAG_IMAGE_HORIZONTAL/VERTICAL_PPI into
+	  our exif lib
+	  Tests included.
+	  Fixes #626570
+
+2010-09-07 08:22:27 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tags: Add GST_TAG_IMAGE_HORIZONTAL/VERTICAL_PPI tags
+	  Adds new tags for representing the intended PPI of images/videos
+	  API: GST_TAG_IMAGE_HORIZONTAL_PPI
+	  API: GST_TAG_IMAGE_VERTICAL_PPI
+	  Fixes #626570
+
+2010-09-07 11:41:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From c2e10bf to aa0d1d0
+
+2010-09-06 18:17:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  rtp: improve basertpdepayload's error message when no input caps were set
+	  This is pretty much an FAQ, so try to make the error message a bit
+	  more helpful. Also, don't tell people to file a bug in bugzilla
+	  about this (which is what happens if the default error message for
+	  CORE_NEGOTIATION is used).
+
+2010-09-06 13:14:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtppayload: notify of first timestamp/seqnum
+	  Notify of the first timestamp/seqnum pushed out by the payloader.
+	  Fixes #612264
+
+2010-09-06 11:53:35 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/videotestsrc/.gitignore:
+	  videotestsrc: .gitignore new generate_sine_table
+
+2010-09-06 11:44:17 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstinputselector.h:
+	* gst/playback/gstplaybin2.c:
+	  playback: ref the selector pad class inside input-selector
+	  Minimizes the delta to original element in -bad and allows us to keep the
+	  type static.
+
+2010-09-05 20:57:48 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/Makefile.am:
+	* gst/videotestsrc/generate_sine_table.c:
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Use static sine table
+
+2010-09-05 20:35:13 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Add foreground/background-color properties
+	  Replace solid-color property with foreground-color and add
+	  background-color.  Pull some common code out of each of the
+	  pattern generating functions.  Fix many of the patterns to
+	  use foreground-color/background-color instead of white/black.
+	  Generated images are indentical to previously if foreground-color
+	  and background-color are left as default.
+	  API: GstVideoTestSrc::foreground-color
+	  API: GstVideoTestSrc::background-color
+
+2010-09-05 18:58:03 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From d3d9acf to c2e10bf
+
+2010-09-05 17:04:31 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: deprecate colorspec property
+	  Fixes: #616392.
+
+2010-09-05 12:57:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	  audioconvert: Simplify float->s32 conversion
+	  orc 0.4.7 is doing saturated conversion from floats to integers
+	  and it's not necessary to do this manually anymore.
+
+2010-09-05 12:14:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From ca1c867 to d3d9acf
+
+2010-09-05 12:12:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: Update disted orc files
+
+2010-09-05 12:09:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Enable float processing with orc again
+
+2010-09-05 12:08:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Require orc 0.4.8.1 for the volume test
+
+2010-08-26 19:16:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	  audioconvert: Use the ORC double support
+
+2010-09-04 09:06:08 +0200  Leo Singer <lsinger@caltech.edu>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  exiftag: Fix compiler warnings with old gcc versions
+	  Old gcc complains about possibly uninitialized variables which
+	  are always initialized before usage in reality. Fixes bug #628747.
+
+2010-08-06 11:53:38 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstfactorylists.c:
+	* gst/playback/gstfactorylists.h:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: Switch to gstfactorylist from core
+	  https://bugzilla.gnome.org/show_bug.cgi?id=626181
+
+2010-09-02 12:57:42 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: fix typo in property description
+
+2010-09-01 17:52:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Add support for AYUV
+
+2010-09-01 11:37:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: Fill segment until the end on EOS
+
+2010-09-01 11:33:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Fill the segment on EOS or at least produce enough frames to use the complete buffer duration
+	  Fixes bug #628400.
+
+2010-09-01 11:22:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Don't ignore flow returns when filling the previous segment during NEWSEGMENT handling
+
+2010-09-01 11:11:47 +0200  Philippe Normand <pnormand@igalia.com>
+
+	* tests/examples/seek/seek.c:
+	  seek: allow seeking behind the currently downloaded position.
+
+2010-09-01 10:06:09 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: use GST_BOILERPALTE macro
+
+2010-08-31 10:09:51 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  playback: Set queues silent property to TRUE
+	  We don't use the queue signals within playsink.
+
+2010-08-30 14:59:22 -0500  Rob Clark <rob@ti.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: fix Cb/Cr inversion for colored text overlays
+	  In case of odd values for xpos or ypos, the division by two in CbCr
+	  plane would result in an off-by-one error, which in the case of NV12,
+	  NV21, or UYVY would cause inversion of blue and red colors.  (And
+	  would be not so easily noticed for I420 as it would just cause the
+	  chroma to be offset slightly from the luma.)
+	  This patch also fixes a silly typo from the earlier patch which
+	  added NV12 support that broke UYVY support.
+
+2010-08-30 15:50:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't reset the pad when pushing resulted in NOT_LINKED
+	  The pad might be linked later and after resetting it it will
+	  only work after resetting all of oggdemux.
+
+2010-08-27 20:45:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Only enable progressive downloading if the upstream duration in bytes is known
+	  Otherwise we might try to enable it for live streams, where this would
+	  cause playback to fail completely.
+	  Fixes bug #628028.
+
+2010-08-27 17:23:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't use GST_FLOW_IS_FATAL()
+	  And while we're at it, handle WRONG_STATE as error too
+	  in oggdemux and WRONG_STATE and NOT_LINKED in oggaviparse.
+
+2010-08-27 11:49:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadderorc.orc:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/plugin.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrcorc.orc:
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  Revert "Use init functions for Orc code"
+	  This reverts commit b2051090b43f82b23bb01826f09053479bbd7874.
+	  Fixes the build again until someone pushes the regenerated .c/.h
+	  files too.
+
+2010-08-22 23:01:19 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: clean up code
+	  Merge various color structures into one.
+
+2010-08-22 22:16:45 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Add ball pattern
+
+2010-08-19 15:43:09 -0700  David Schleef <ds@schleef.org>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadderorc.orc:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/plugin.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrcorc.orc:
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc.orc:
+	  Use init functions for Orc code
+
+2010-08-26 15:17:20 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/volume/gstvolume.c:
+	  volume: make the orc usage for float conditional again
+	  See bug #628009. The tests still fail in the orc code (which we just don't call
+	  now).
+
+2010-08-25 12:19:05 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add support for 2vuy
+	  It is the apple alternative for Microsofts UYVY.
+	  (http://ntta.szm.com/Tutors/FourCC.htm)
+	  Only use the UYVY for the caps to enable support in other
+	  gstreamer elements.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=627924
+
+2010-08-25 19:01:57 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: enable ORC for float in volume
+
+2010-08-25 11:19:31 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/tag/gstexiftag.c:
+	  configure: Add check for log2
+	  Adds check for log2 and only use it in exif library if it is
+	  available.
+
+2010-08-25 15:32:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	  tag: Link to $(LIBM) for pow(), log2() and friends
+
+2010-08-25 08:41:52 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Move some tags to their correct IFDs
+	  Put some tags in their correct IFDs
+
+2010-08-20 16:39:08 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Always write FlashPixVersion tag
+	  FlashPixVersion is mandatory and constant. Write it always.
+
+2010-08-20 15:59:22 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds flash tags mapping
+	  Adds a mapping for GST_TAG_CAPTURING_FLASH_FIRED/_MODE to
+	  the exif Flash tag.
+	  Tests included.
+
+2010-08-19 15:47:18 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	* win32/common/libgsttag.def:
+	  tag: exif: More photography mappings
+	  Adds mappings from:
+	  GST_TAG_CAPTURING_EXPOSURE_PROGRAM -> ExposureProgram
+	  GST_TAG_CAPTURING_EXPOSURE_MODE -> ExposureMode
+	  GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE -> SceneCaptureType
+	  GST_TAG_CAPTURING_GAIN_ADJUSTMENT -> GainControl
+	  GST_TAG_CAPTURING_WHITE_BALANCE -> WhiteBalance
+	  GST_TAG_CAPTURING_CONTRAST -> Constrast
+	  GST_TAG_CAPTURING_SATURATION -> Saturation
+	  Also renames gst_tag_image_orientation_from_exif_value and
+	  gst_tag_image_orientation_to_exif_value to remove the 'gst'
+	  prefix and not including in the win32 defs.
+	  Tests included.
+
+2010-08-19 09:39:39 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Add macros for the exif ids
+	  Use macros for exif ids to avoid having those numbers spread
+	  all over the code.
+
+2010-08-17 15:56:34 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds photography tags mappings
+	  Adds the following mappings for the exif helper:
+	  * GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO -> DigitalZoomRatio
+	  * GST_TAG_CAPTURING_FOCAL_LENGTH -> FocalLength
+	  * GST_TAG_CAPTURING_SHUTTER_SPEED -> ExposureTime, ShutterSpeedValue
+	  * GST_TAG_CAPTURING_FOCAL_RATIO -> FNumber, ApertureValue
+	  * GST_TAG_CAPTURING_ISO_SPEED -> ISOSpeed, PhotographicSensitivity
+	  Tests included.
+
+2010-08-17 15:05:32 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds mapping for GST_TAG_APPLICATION_DATA
+	  Adds mapping for GST_TAG_APPLICATION_DATA to the exif
+	  'maker-note' tag.
+
+2010-08-20 14:54:23 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tag: Adds GST_TAG_CAPTURE_FLASH_FIRED/_MODE
+	  Adds a new tag for informing if flash was used while
+	  capturing an image and the flash mode selected by the
+	  user during this capture
+	  API: GST_TAG_CAPTURING_FLASH_FIRED
+	  API: GST_TAG_CAPTURING_FLASH_MODE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=626651
+
+2010-08-17 07:21:20 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tag: More photography related tags
+	  API: GST_TAG_CAPTURING_EXPOSURE_PROGRAM
+	  API: GST_TAG_CAPTURING_EXPOSURE_MODE
+	  API: GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE
+	  API: GST_TAG_CAPTURING_GAIN_ADJUSTMENT
+	  API: GST_TAG_CAPTURING_WHITE_BALANCE
+	  API: GST_TAG_CAPTURING_CONTRAST
+	  API: GST_TAG_CAPTURING_SATURATION
+	  Fixes #626651
+
+2010-08-17 06:47:52 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/tag/tags.c:
+	  tag: Adds some basic photography tags
+	  Adds the following basic photography tags.
+	  API: GST_TAG_CAPTURING_SHUTTER_SPEED
+	  API: GST_TAG_CAPTURING_FOCAL_RATIO
+	  API: GST_TAG_CAPTURING_FOCAL_LENGTH
+	  API: GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO
+	  API: GST_TAG_CAPTURING_ISO_SPEED
+	  Fixes #626651
+
+2010-08-24 15:06:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: Require ORC 0.4.7 for the loadl/storel opcodes
+	  And update disted files to allow compilation with no or too old ORC.
+
+2010-08-24 11:39:09 +0200  Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: Make sure FLUSH_STOP is always sent after a flushing seek.
+	  Send FLUSH_STOP right after forwarding the seek event upstream if necessary.
+	  This makes sure that adder->srcpad is not left flushing if seeking fails or if
+	  upstream is blocked.
+	  The same fix was already applied to videomixer in 49b2a946.
+
+2010-08-24 11:11:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	  audioconvert: Use ORC for the float<->int32 conversion
+	  This should speed up standard Vorbis encoding and decoding pipelines a bit.
+	  Thanks to David Schleef for the assistance to get the ORC code right
+	  and explaining everything.
+
+2010-08-24 10:12:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Support NV21 too and minor cleanups
+
+2010-08-24 10:03:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix component width for NV12/NV21
+	  Both have width/2 as component width for the chroma planes.
+
+2010-08-24 09:51:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix NV21 rendering
+	  Using the same as for NV12 will result in wrong colors and crashes.
+
+2010-08-23 18:51:18 -0400  Chris Shoemaker <chris.shoemaker@cox.net>
+
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gstclockoverlay.h:
+	  clockoverlay: only rerender text if time string has changed
+	  The textoverlay element will rerender the text string whenever
+	  overlay sets the 'need_render' flag to TRUE.  Previously, we
+	  lazily set the flag to TRUE every time the time string was requested.
+	  Now, we save a copy of the previously given string, and only set
+	  'need_render' to TRUE if the string has changed.
+	  In my tests with a 30fps video stream, and a time string including
+	  a seconds field, this change reduced the CPU usage of the clockoverlay
+	  element from 60% to 5%.
+	  Fixes bug #627780.
+
+2010-08-23 13:59:38 -0500  Rob Clark <rob@ti.com>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: add NV12 support
+	  Fixes bug #627768.
+
+2010-08-20 12:03:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Mark duplicated frames with the GAP flag
+	  We currently don't use the GAP flag for video and the docs say
+	  that this is for buffers, that have been created to fill a gap
+	  and contains neutral data. For video this is the previous frame.
+	  This information can be used by encoders to encode the duplicated
+	  frames more efficiently. See bug #627459.
+
+2010-08-19 18:51:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Add back support for 8 bit paletted RGB
+	  This was removed by 3a00a97fd2b4015e93cdcabaa75da406aa599570
+	  while making the pad template caps more compact.
+	  Fixes bug #626629.
+
+2010-08-18 16:45:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc/sink: add property to get the card name
+	  fixes #627203
+
+2010-08-18 16:42:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsa.c:
+	* ext/alsa/gstalsa.h:
+	  alsa: add method to retrieve the card name
+	  Reuse an existing method to retrieve the card name.
+
+2010-08-18 12:34:07 +0200  American Dynamics <GStreamer-Bugs at tycosp.com>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basertpdepay: don't clear the discont flag too early
+	  Set the discont flag when we receive a DISCONT buffer and only clear the discont
+	  state when we pushed out a DISCONT buffer.
+	  Fixes #626869
+
+2010-08-14 19:08:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  docs: fix typo in appsink docs so function gets cross-referenced properly
+
+2010-08-14 19:02:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	* configure.ac:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  build: use new AG_GST_PKG_CONFIG_PATH m4 macro from common
+	  Sets up a GST_PKG_CONFIG_PATH variable for use in Makefile.am
+	  (avoids trailing ':' in PKG_CONFIG_PATH used).
+
+2010-08-14 18:36:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: set PKG_CONFIG_PATH so that our in-tree libs come first when calling scanner
+	  When calling gobject-introspection scanner, make sure our own
+	  freshly-built libs within the source tree (well, build dir) come
+	  first in the PKG_CONFIG_PATH. May or may not help to make sure
+	  that it doesn't pick up older external plugins-base libs (or
+	  .gir files) from outside the source tree / build directory as
+	  dependencies of the introspected lib instead of using the
+	  stuff we just built in a sibling directory.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623698
+
+2010-08-06 17:16:27 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: Delay usage of GstFactoryList
+	  By delaying it to when it's actually needed, we speed things up a bit
+	  since some elements might have been added/removed in between.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=626718
+
+2010-06-17 09:10:11 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playbin2: uridecodebin: add property to configure ring buffer size
+
+2010-08-13 17:23:46 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 3e8db1d to ec60217
+
+2010-08-13 13:59:08 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  plugin-docs: the <TITLE> tag should come right after <FILE>.
+	  Fixes missing plugin entries. If the object name, e.g. GstGIOSrc came before the
+	  title, we ended up with differnt section_id in the generated docbook.
+
+2010-08-12 18:14:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: fix the classification.
+	  Change "Src" into "Source" (we use that elsewhere). I did not keept "Src" as it
+	  is quite unlikely that someone plugs appsrc by searching the registry by classification.
+
+2010-08-12 15:26:08 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: remove 'dir' out variable
+	  Alsa seems to expect that we initialize it. Remove the variable and pass NULL
+	  as we actually don't use it. In alsasink also #ifdef one section that is
+	  grabing diagnostics to be disabled, when logging is disabled (the code was
+	  using the out parameter as well).
+	  Fixes #626125
+
+2010-08-12 11:46:11 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: remove chroma-site and color-matrix fields from RGB caps
+
+2010-08-11 12:49:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: prevent deadlock with _chain when deactivating pad
+	  Fixes #626581.
+
+2010-08-12 12:50:27 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/Makefile.am:
+	  playback: bad bad editor, readd missing line to fix the build
+
+2010-08-12 12:08:35 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/playback/.gitignore:
+	* tests/examples/playback/Makefile.am:
+	* tests/examples/playback/decodetest.c:
+	* tests/examples/playback/test.c:
+	* tests/examples/playback/test2.c:
+	* tests/examples/playback/test3.c:
+	* tests/examples/playback/test4.c:
+	* tests/examples/playback/test5.c:
+	* tests/examples/playback/test6.c:
+	* tests/examples/playback/test7.c:
+	* tests/icles/Makefile.am:
+	* tests/icles/playback/.gitignore:
+	* tests/icles/playback/Makefile.am:
+	* tests/icles/playback/decodetest.c:
+	* tests/icles/playback/test.c:
+	* tests/icles/playback/test2.c:
+	* tests/icles/playback/test3.c:
+	* tests/icles/playback/test4.c:
+	* tests/icles/playback/test5.c:
+	* tests/icles/playback/test6.c:
+	* tests/icles/playback/test7.c:
+	  tests/playback: due to popular demand mv them from examples to icles
+	  The tests are toys and not reference demos.
+
+2010-08-12 10:02:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: send preroll buffer when delaying preroll eos
+	  That is, if eos is received which will not be forwarded, and the stream
+	  has not yet seen any data, then send a buffer to preroll downstream
+	  (which might otherwise be accomplished by the eos event).
+
+2010-08-12 10:01:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: remove some heuristic in chain configuration code
+	  .. since queues are now inserted unconditionally.
+
+2010-08-11 10:27:35 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	  playbin2/playsink: update subtitle handling for streamsynchronizer
+	  Streamsynchronizer excepts to see stream-changed msg for all streams, but to
+	  arrange for this, video and subtitle streams need to be decoupled by means
+	  of queues (due to pad blocks that may occur).
+	  Fixes #626463.
+
+2010-08-10 13:06:32 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: always have a queue in chain head to aid streamsynchronizer
+	  Specifically, as the latter may have one thread pushing EOS to several streams,
+	  that needs to be decoupled into various thread to prevent preroll hanging
+	  problems.
+
+2010-08-10 11:28:43 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: drop lock when pushing eos downstream
+	  ... to prevent deadlock (e.g. upon seek) when downstream waits in preroll.
+
+2010-08-10 11:19:59 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: clear stream eos state on FLUSH and new stream
+
+2010-08-10 11:19:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: set READY sinks to NULL before freeing chain upon failure
+
+2010-08-12 10:49:59 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst/playback/.gitignore:
+	* gst/playback/Makefile.am:
+	* gst/playback/decodetest.c:
+	* gst/playback/test.c:
+	* gst/playback/test2.c:
+	* gst/playback/test3.c:
+	* gst/playback/test4.c:
+	* gst/playback/test5.c:
+	* gst/playback/test6.c:
+	* gst/playback/test7.c:
+	* tests/examples/Makefile.am:
+	* tests/examples/playback/.gitignore:
+	* tests/examples/playback/Makefile.am:
+	* tests/examples/playback/decodetest.c:
+	* tests/examples/playback/test.c:
+	* tests/examples/playback/test2.c:
+	* tests/examples/playback/test3.c:
+	* tests/examples/playback/test4.c:
+	* tests/examples/playback/test5.c:
+	* tests/examples/playback/test6.c:
+	* tests/examples/playback/test7.c:
+	  playback: move tests from plugin-dir to tests/examples/playback
+
+2010-08-11 18:08:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Suggest caps with different width/height if bufferalloc is called with impossible width/height
+
+2010-08-11 17:16:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add some debug output to the videoscale negotiation test
+
+2010-08-11 17:03:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Only set the PAR if the caps already had a PAR
+	  Otherwise we're producing different caps and basetransform thinks that it
+	  can't passthrough buffer allocations, etc.
+	  In 0.11 all video caps really should have the PAR set...
+
+2010-08-11 17:00:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: It's not a bad thing if the preferred video format needs less bytes per frame
+
+2010-08-11 08:47:57 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tags: exif: Fix bug in inner ifd parsing
+	  Do not use the result of inner ifd's parsing to increment
+	  the current tag index. The reasons are:
+	  1) The function returns a boolean.
+	  2) The inner ifd's tags are in a separate table, so they shouldn't
+	  interfere with its parent ifd table parsing.
+
+2010-08-11 08:03:44 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Put ExifVersion in the correct IFD
+	  ExifVersion is from the 'exif' ifd, not the 0th ifd.
+
+2010-08-10 19:50:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Refactor functions declaration
+	  Use some macros to declare serialization/deserialization
+	  functions prototypes.
+
+2010-08-10 19:30:11 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Add another DateTime mapping
+	  datetimes can also be represented by the 0x132 tag. Map it, too.
+
+2010-08-10 11:29:22 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Fix bug on image-orientation parsing
+	  Do not skip one extra tag when parsing image-orientation tags.
+
+2010-08-10 10:57:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From bd2054b to 3e8db1d
+
+2010-08-10 11:52:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  exiftag: Compare with G_MAXUINT16 instead of -1
+	  Fixes a compiler warning on the OS X buildbot.
+
+2010-08-09 18:04:08 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  xmp: exif: Adds GST_TAG_APPLICATION_NAME mappings
+	  adds xmp and exif helper library mappings for GST_TAG_APPLICATION_NAME
+	  tag.
+
+2010-08-04 13:01:21 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Write ExifVersion tag
+	  Write ExifVersion tag unconditionally when creating exif
+	  buffers. Might help other applications parsing of this data.
+
+2010-08-04 13:02:52 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: tag: Test to try to serialize multiple exif tags
+	  Adds a new test for exif data that tries serializing data
+	  from multiple ifd tables and check if it works.
+
+2010-08-09 17:25:07 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tags: exif: Fix inner tags offset rewriting
+	  Fixes a bug that made exif helper lib fail to rewrite inner ifd tags
+	  offsets when there were more than 1 inner ifd.
+
+2010-07-22 17:29:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: configurable text color and position
+	  Rather than only left, right, top, etc, allow for horizontal and vertical
+	  positioning on a scale from 0 to 1.
+	  Also cater for configuring rendered text color.
+	  Fixes #624920.
+	  API: GstTextOverlay:xpos
+	  API: GstTextOverlay:ypos
+	  API: GstTextOverlay:color
+
+2010-07-21 14:20:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add solid-color pattern
+	  ... which generalizes the current listing of white, black, etc.
+	  In particular, also allow specifying alpha channel, and modify
+	  some structures and pattern filling to cater for alpha value as well.
+	  Fixes #624919.
+	  API: GstVideoTestSrc:solid-color
+
+2010-08-08 17:42:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: static forward declarations are forbidden by the C standard
+	  ...and actually cause compiler errors on VC++. Change it to an extern
+	  forward declaration and non-static definition.
+
+2010-08-05 13:56:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 2004d03 to bd2054b
+
+2010-08-04 19:24:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Check if the compiler supports ISO C89 or C99 and which parameters are required
+	  This first checks what is required for ISO C99 support and sets the relevant
+	  compiler parameters and if no C99 compiler is found, it checks for a
+	  C89 compiler. This enables us to check for and use C89/C99 functions
+	  that gcc hides from us without the correct compiler parameters.
+
+2010-08-04 15:18:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosink/baseaudiosrc: Post CLOCK-LOST/CLOCK-PROVIDE when going to/from READY
+	  Otherwise the clocks are redistributed every time the pipeline
+	  goes to PAUSED, which is quite expensive.
+
+2010-08-03 15:03:27 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Make xmp lib aware for the different tag types
+	  Makes the xmp helper lib aware that the tags can be simple,
+	  sequences or bags (there is still struct and alt, but those
+	  aren't handled yet). Adding this info makes serialization
+	  and deserialization more consistent.
+
+2010-08-02 09:56:21 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmp: Add a new layer of indirection (GstXmpSchema)
+	  Instead of storing all tags in a single hashtable, store them
+	  grouped by schema in a GstXmpSchema, and add those to the toplevel
+	  hashtable.
+
+2010-08-03 14:37:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Make bag tags deserialization work correctly
+	  If we find a bag of tags of type string in the xmp packet, we
+	  should concat them, this is not the ideal approach, but at
+	  least works for now as we don't know what type of tag it
+	  is (simple, structure, seq, alt or bag)
+
+2010-08-04 21:44:22 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/seek/seek.c:
+	  examples/seek: Don't unpause on clock-lost unless playing
+	  If the pipeline is paused by the user, don't pause/unpause
+	  on clock-lost.
+
+2010-07-02 12:10:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: improve debugging
+
+2010-07-02 12:09:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.h:
+	  ringbuffer: whitespace fixes
+
+2010-06-28 10:53:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: use more efficient way of getting caps
+	  When inspecting the caps of a pad, try to get the pad _CAPS first before calling
+	  the getcaps function.
+
+2010-08-02 11:06:00 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/pipelines/oggmux.c:
+	  oggmux: Fix test build when theora and vorbis aren't available
+	  Ifdef properly to avoid build failures
+
+2010-08-01 06:50:13 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Detect avc1 ftyp as video/quicktime
+	  Detects avc1 ftyp as video/quicktime (iso variant)
+
+2010-07-27 11:25:12 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: removing useless locking
+	  Everything in the xmp helper lib is initiallized once and on a thread
+	  safe way, and after that there are only reads going on, no more
+	  writing. Based on that, drop the locking.
+
+2010-06-20 23:53:38 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: Set joystick io encoding to 'NULL'
+	  Fix problems with newer glib reporting bad encodings on the binary
+	  data emerging from the joystick device fd.
+
+2010-07-26 20:25:55 +0200  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: fix printf format compiler warnings
+	  Make OSX build bot happy.
+
+2010-07-26 18:23:33 +0200  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: initialize datetime variable in xmp tag parsing code
+	  Fixes (correct) compiler warning on the OSX build bot.
+
+2010-07-26 17:48:14 +0200  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: require core from git
+	  For GstDateTime stuff used in libgsttag.
+
+2010-07-26 17:04:02 +0200  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	* configure.ac:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/gstpluginsbaseversion.c:
+	* gst-libs/gst/pbutils/gstpluginsbaseversion.h.in:
+	* gst-libs/gst/pbutils/pbutils.h:
+	* tests/check/libs/pbutils.c:
+	* win32/common/libgstpbutils.def:
+	  pbutils: add compile time and runtime version checks for gst-plugins-base
+	  So people can check what version of the gst-plugins-base libs they're
+	  building against or linked against.
+	  API: GST_PLUGINS_BASE_VERSION_MAJOR
+	  API: GST_PLUGINS_BASE_VERSION_MINOR
+	  API: GST_PLUGINS_BASE_VERSION_MICRO
+	  API: GST_PLUGINS_BASE_VERSION_NANO
+	  API: GST_CHECK_PLUGINS_BASE_VERSION
+	  API: gst_plugins_base_version()
+	  API: gst_plugins_base_version_string()
+
+2010-06-30 16:36:14 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Map GST_TAG_DATE_TIME
+	  Adds mapping to the exif helper library for GST_TAG_DATE_TIME.
+	  Tests included.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594504
+
+2010-06-23 12:02:24 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Maps GST_TAG_DATE_TIME
+	  Adds mapping for GST_TAG_DATE_TIME.
+	  Tests included.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594504
+
+2010-07-26 16:05:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Fixate the pixel-aspect-ratio if necessary
+
+2010-07-24 18:17:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Delay EOS events until all streams are EOS
+	  This fixes a race condition in playbin2's gapless mode, where the
+	  EOS of other streams might arrive in the sinks before the last stream
+	  ends and the switch to the new track happens. The EOS sinks won't
+	  accept any new data then and playback stops.
+	  To prevent this, delay all EOS events until all streams are EOS
+	  and advance the sinks of the EOS streams by filler newsegment
+	  events if necessary.
+	  Fixes bug #625118.
+
+2010-06-01 23:43:45 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: export 3gp profile in caps
+	  This reads the 3gp profile from the major/compatible brands and puts
+	  this as a 'profile' field in caps. This can be used by demuxers to
+	  decide whether they can handle this stream or not. Also needed for
+	  DLNA.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=620291
+
+2010-07-24 11:48:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-xoverlay.c:
+	  examples: Use cairo instead of to-be-deprecated GDK API
+	  Fixes bug #625001.
+
+2010-07-24 09:22:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	* configure.ac:
+	  configure: set release date/time
+	  Use the new AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO macro.
+
+2010-07-20 12:08:52 +0530  Parthasarathi Susarla <partha.susarla@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: detect enhanced AC-3
+	  https://bugzilla.gnome.org/show_bug.cgi?id=623846
+
+2010-07-22 09:13:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gststreamsynchronizer.h:
+	  streamsynchronizer: Fix another deadlock when going PAUSED->READY while streams are waiting for the GCond
+
+2010-07-20 21:05:45 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	  playsink: Switch to faster pad linking methods
+	  Logic for choice of GST_PAD_LINK_CHECK_* is as follows:
+	  * Where return of pad_link wasn't checked before : NOTHING
+	  * Where linking is between known compatible elements : NOTHING
+	  * All other cases : TEMPLATE_CAPS
+	  Slashes down playsink reconfigure by up to 50% cpu time.
+
+2010-07-19 15:58:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstscreenshot.c:
+	  playsink: Set add-borders=true on the videoscale instances
+	  This makes sure that we always keep the display aspect ratio and
+	  add black borders if necessary, which is usually something you want
+	  for viewing a video.
+
+2010-07-19 15:44:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Rename borders property to add-borders
+
+2010-07-19 09:39:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	  videoscale: update disted orc files for latest changes
+
+2010-07-17 20:24:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/Makefile.am:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_fill_borders.c:
+	* gst/videoscale/vs_fill_borders.h:
+	* gst/videoscale/vs_image.h:
+	  videoscale: Add support for adding black borders to keep the DAR if necessary
+	  Fixes bug #617506.
+
+2010-07-18 15:08:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Fix linear scaling of UYVY scanlines
+	  Fixes bug #624656.
+
+2010-07-17 19:57:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Fix caps fixating if the height is fixed but the width isn't
+
+2010-07-16 20:41:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: Remove interlaced scaling again
+	  This behaviour was not preferred and caused visible image quality
+	  degradations. The real solution would be, to apply a real
+	  deinterlacing filter before scaling the frames.
+	  Fixes bug #615471.
+
+2010-07-16 19:06:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add helper method for filling the VSImage struct
+
+2010-07-18 11:43:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/files/Makefile.am:
+	  tests: don't forget to dist test file for typefinding unit test
+
+2010-07-18 11:38:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/typefindfunctions.c:
+	* tests/files/623663.mts:
+	  tests: add unit test for mpeg-ts typefinding bug
+	  See #623663.
+
+2010-07-18 11:24:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: make mpeg-ts typefinder scan more data
+	  We only look for packets with payload, but it appears there may be packets without,
+	  which makes it harder to find the N packets with payload in a row that we need in
+	  order to typefind this successfully, so scan some more data than necessary in the
+	  optimistic scenario. Alternatively we could change IS_MPEGTS_HEADER().
+	  Fixes #623663.
+
+2010-07-16 18:51:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gststreamsynchronizer.c:
+	  playsink/streamsynchronizer: Remove and deactivate pads after calling the change_state function of the parent class
+	  Fixes some deadlocks.
+
+2010-07-16 18:25:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Drop DISCONT flag on first buffer for new streams
+	  Also reset stream state when going back to READY and on flush-stop.
+
+2010-07-11 14:44:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gststreamsynchronizer.h:
+	* gst/playback/test7.c:
+	  playsink: Fix gapless playback in many non-simple scenarios
+	  Before gapless playback failed when switching between audio-only,
+	  video-only and audio-video files, when choosing different clocks
+	  and when the different streams had different durations.
+	  This is now handled by a helper element, which keeps track of the
+	  running times of all streams and synchronizes them.
+	  Fixes bug #602437.
+
+2010-07-11 14:43:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Remove QOS event adjustments for gapless playback mode
+
+2010-07-09 17:15:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: Post clock-provide and clock-lost messages when going from/to PLAYING
+
+2010-07-09 17:15:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: Post clock-provide and clock-lost messages when going from/to PLAYING
+
+2010-07-08 16:11:12 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: only associate .webm with WebM
+	  .weba (audio) and .webv (video) were speculation on my part before
+	  the public launch. As of yet no decision has been made on the
+	  file extension for audio-only WebM, and I'm pretty sure there will
+	  never be one for video-only.
+	  Fixes bug #623837.
+
+2010-07-08 09:54:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: Use new gst_audio_clock_new_full()
+
+2010-07-08 09:54:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: Use new gst_audio_clock_new_full()
+
+2010-07-08 08:32:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* win32/common/libgstaudio.def:
+	  audioclock: API: Add gst_audio_clock_new_full() with a GDestroyNotify for the user_data
+	  Elements usually use their own instance as instance data but the
+	  clock can have a longer lifetime than their elements and the clock
+	  doesn't own a reference of the element.
+	  Fixes bug #623807.
+
+2010-07-04 20:29:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/Makefile.am:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraenc.h:
+	  theoraenc: Implement two pass encoding
+	  Fixes bug #621349.
+
+2010-07-04 20:14:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* ext/theora/gsttheoraenc.c:
+	  configure: Require libtheora >= 1.1
+	  It's more than a year old at the time of the next -base release,
+	  has many encoder and decoder improvements and gets us rid of a lot
+	  of #ifdefs
+
+2010-07-04 20:08:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	  theora: Use PROP_ instead of ARG_ for property enum values
+
+2010-05-04 12:09:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: use proper error message code for failing state change
+
+2010-07-16 11:24:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development
+
+=== release 0.10.30 ===
+
+2010-07-15 01:20:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.30
+
+2010-07-15 00:32:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/cs.po:
+	* po/lv.po:
+	  po: update translations
+
+2010-07-14 12:59:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Disconnect and destroy uridecodebins when going from READY to NULL
+	  Fixes spurious errors that happen after an error and playing a working
+	  stream afterwards or signals that are emitted for non-active groups.
+	  Fixes bug #624266.
+
+2010-07-08 14:51:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/Makefile.am:
+	  docs: dist more of the gst-plugin-base design docs
+
+2010-07-07 00:35:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.29.4 pre-release
+
+2010-07-07 00:24:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/LINGUAS:
+	* po/es.po:
+	* po/fr.po:
+	* po/it.po:
+	* po/nl.po:
+	* po/pt_BR.po:
+	* po/sl.po:
+	* po/sv.po:
+	  po: update translations
+
+2010-07-06 09:47:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  Revert "playbin2: Don't put "raw" subtitle types in the raw caps for decodebin2"
+	  This reverts commit 9d7538247ff1bf9841b53eeb71ddc47f2c662415.
+	  If the DVD subpicture caps are not part of the raw caps, uridecodebin
+	  doesn't qualify resindvdbin as raw source and plugs decodebins, which
+	  causes broken DVD playback because of bugs elsewhere.
+	  This change was originally added to only expose supported, raw subtitles,
+	  e.g. if the subtitle sink did not support DVD subpictures but a converter
+	  to some supported format exists. It's not very important right now because
+	  we have nothing (that is autoplugged) to convert from plaintext/pango-markup
+	  or DVD subpictures to something else.
+	  Fixes bug #623583.
+
+2010-07-04 17:27:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Use correct Y offset for YVYU -> RGB conversions
+	  Fixes bug #623530.
+
+2010-07-04 17:26:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Use correct Y offset for the YUY2 -> RGB conversions
+	  Fixes bug #623530.
+
+2010-07-04 14:55:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/plugins/inspect/plugin-ogg.xml:
+	  docs: update ogg introspection info after riff fourcc addition
+
+2010-07-02 20:09:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix conversion of packed 4:2:2 YUV to 8 bit grayscale
+	  The last pixel wasn't written before for odd widths.
+	  Fixes bug #623418.
+
+2010-07-02 14:56:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Fix conversion of packed 4:2:2 YUV to RGB
+	  The last pixel wasn't written before.
+	  Fixes bug #623384.
+
+2010-07-02 13:59:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix invalid memory accesses with odd widths/heights during subsampling
+	  Fixes bug #623375.
+
+2010-07-01 21:21:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If setup of the source element fails in READY->PAUSED deactive the current group
+	  Otherwise the uridecodebin will be still a child of playbin2 and
+	  its signals will still be connected. In future state changes this
+	  will then emit unrelated signals that will confuse playbin2 or,
+	  even worse, cause crashes and assertions.
+	  Fixes bug #623318.
+
+2010-06-30 21:20:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add FLV4 fourcc and map it to video/x-vp6-flash
+	  Fixes #623176.
+
+2010-06-30 15:13:10 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  netbuffer: declare with G_DEFINE_TYPE for type safety
+	  Fixes #623233.
+
+2010-06-24 16:55:57 +0200  Fredrik Söderquist <fs@opera.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Handle errors from _get_next_page in _do_seek.
+	  If the source element failed here, oggdemux would crash.
+	  Fixes #623218.
+
+2010-06-30 11:00:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: keep things sorted alphabetically
+	  On special request. Because it's important, apparently.
+
+2010-06-29 18:48:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.29.3 pre-release
+
+2010-06-29 18:46:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: fix --disable-external
+
+2010-06-28 15:43:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* autogen.sh:
+	* configure.ac:
+	  Bump automake requirement to 1.10
+	  For maintainability reasons and $(builddir).
+	  Fixes #622944.
+
+2010-06-27 10:43:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/seek.c:
+	  examples: Remove some #if GTK_CHECK_VERSION(2,12,0)
+	  We depend on GTK+ >= 2.14 already.
+
+2010-06-26 21:28:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/Makefile.am:
+	  videotestsrc: Explicitely link with $(LIBM)
+
+2010-06-26 21:27:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/Makefile.am:
+	  videoscale: Explicitely link with $(LIBM)
+
+2010-06-26 18:19:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	  0.10.29.2 pre-release
+
+2010-06-26 18:19:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/adder/gstadderorc-dist.c:
+	* gst/adder/gstadderorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.h:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	  gst: update orc files
+
+2010-06-26 18:19:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translations
+
+2010-06-26 17:55:12 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Properly clean DecodeChain after errors.
+	  If an error happens, the PAUSED state will never be reached. If an
+	  application re-uses decodebin2 (like totem) where one would normally
+	  set to READY between each file, the cleanup that normally happens in
+	  the PAUSED=>READY codepath will never be called, resulting in the
+	  following file to re-use the previous demuxer/decoder/...
+	  https://bugzilla.gnome.org/show_bug.cgi?id=622807
+
+2010-06-26 12:39:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/design-orc-integration.txt:
+	  docs: fix a few typos
+
+2010-06-26 12:03:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  checks: simplify GstBus usage in videoscale unit test
+	  There's no need to run a main loop, add a bus watch and deal with
+	  helper structs here just to wait for an EOS message.
+
+2010-06-26 11:38:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  checks: speed up videoscale unit test a little
+	  Use new gst_element_link_pads_full() function to link elements,
+	  and disable all checks when linking (don't try this at home).
+	  Down to 18s from 3m20s. Scary.
+
+2010-06-25 17:18:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: check for ringbuffer state first
+	  Check for the state of the ringbuffer before doing the checks of the other
+	  buffer properties, when we're not started, we don't care about those values.
+
+2010-06-24 13:30:59 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Use a more concise pad template
+	  Speeds up caps nego 2 fold
+	  https://bugzilla.gnome.org/show_bug.cgi?id=622696
+
+2010-06-24 15:31:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/icles/audio-trickplay.c:
+	  tests: make audio-trickplay test compile when the gst debugging system is disabled
+	  Fixes unused variable warning in that case.
+
+2010-06-24 15:13:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: add test that runs all typefinders over random data
+
+2010-06-06 12:31:35 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: Mark ISO 14496-14 files as video/quicktime
+	  These are currently being marked as audio/x-m4a which is incorrect.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=620720
+
+2010-06-24 13:42:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	  .gitignore: add temporary orc test directory
+
+2010-06-24 13:30:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: add plugin loading whitelist to test environment
+	  Only want to load core/-base plugins here.
+
+2010-06-24 15:09:04 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 73ff93a to a519571
+
+2010-06-24 08:41:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	  tag: Fix printf format string
+	  Use %s for strings, not %d.
+
+2010-06-24 12:06:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Fix resampling of ARGB scanlines
+	  Previously we would read behind the end of the source lines.
+
+2010-06-16 14:08:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds GST_TAG_IMAGE_ORIENTATION mapping
+	  Adds GST_TAG_IMAGE_ORIENTATION mapping to xmp helper lib.
+	  Tests included.
+
+2010-06-16 11:19:37 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/gsttageditingprivate.c:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* tests/check/libs/tag.c:
+	* win32/common/libgsttag.def:
+	  tag: exif: Adds mapping for GST_TAG_IMAGE_ORIENTATION
+	  Adds GST_TAG_IMAGE_ORIENTATION to the exif helper lib mapped tags.
+	  Tests included.
+
+2010-06-23 12:10:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: clear ts-offset pointer
+	  We need to clear the pointer to our ts-offset element when we destroy the video
+	  chain elements to make sure nobody derefs it to invalid memory afterwards.
+
+2010-06-23 10:16:07 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Reset ts_offset field when freeing chain
+	  Otherwise we would end up with a bogus ->audiochain->ts_offset field
+	  which would cause segfaults/assertions when trying to modify the
+	  'ts-offset' property in update_av_offset().
+	  Was easy to trigger when using a list of audio+video files mixed with
+	  video-only files in totem.
+
+2010-06-18 16:37:14 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/adder.c:
+	* tests/check/elements/appsink.c:
+	* tests/check/elements/audiotestsrc.c:
+	* tests/check/elements/gdpdepay.c:
+	* tests/check/elements/gdppay.c:
+	* tests/check/elements/multifdsink.c:
+	* tests/check/elements/videotestsrc.c:
+	* tests/check/elements/vorbisdec.c:
+	  tests: use our own macros for the tests main function
+
+2010-06-18 14:17:30 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  tag: Use gst_tag_list_peek_string_index in vorbistag
+	  Use _peek_string_index instead of _get_string_index to avoid
+	  a string copy
+
+2010-06-14 12:27:02 +0200  Philippe Normand <pnormand@igalia.com>
+
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	  ximagesink: Ask pad peer to accept new caps once only
+	  In buffer_alloc, if the buffer caps are new, call
+	  gst_pad_peer_accept_caps once only, it's useless to call it in the
+	  cases where we know it will always fail.
+	  Fixes bug #621190
+
+2010-06-17 17:07:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add YUY2/YVYU to all RGB formats conversions
+
+2010-06-17 16:57:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix Y42B to YUY2/YVYU/UYVY conversion for odd widths
+
+2010-06-17 16:54:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix YUY2/YVYU/UYVY to Y42B conversion for odd widths
+
+2010-06-17 16:06:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	  docs: update introspected plugin docs for gstdoc-scangobj and other changes
+	  Update common for latest gstdoc-scangobj and inspect xml files for
+	  escaping and pad template order changes. Update other gtk-doc files
+	  for API additions and object hierarchy changes.
+
+2010-06-16 19:15:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: improve autoplugging
+	  Use the pad caps when they are available to continue the autoplugging. If the
+	  pad caps are set, they are fixed and then we can directly continue autoplugging.
+
+2010-06-15 16:49:17 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 9339ccc to 35617c2
+
+2010-06-15 16:53:49 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 5adb1ca to 9339ccc
+
+2010-06-15 16:34:54 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 57c89b7 to 5adb1ca
+
+2010-06-15 15:32:34 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From c804988 to 57c89b7
+
+2010-06-15 13:09:37 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/elements/audioresample.c:
+	  Revert "audioresample: set pads as negotiable"
+	  This reverts commit 5f74f3a82eb54f9a9517f99dffbe45ce4d474870.
+
+2010-06-15 13:09:29 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/elements/audioconvert.c:
+	  Revert "audioconvert: set pads negotiable"
+	  This reverts commit bbd7dee8f604bd0373a82e6e5cc3eec8313806ac.
+
+2010-06-14 15:19:32 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Fix black horizontal line in image
+
+2010-06-14 15:05:16 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Init char variable for gps coordinates
+	  Initialize char variable for gps coordinates deserialization to 0
+	  to identify when it couldn't be parsed/found and error out.
+	  Fixes #621509
+
+2010-06-14 18:10:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/audioconvert.c:
+	  audioconvert: set pads negotiable
+
+2010-06-14 17:48:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/audioresample.c:
+	  audioresample: set pads as negotiable
+
+2010-06-14 16:25:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Revert accidental downgrade of common revision.
+
+2010-06-14 16:07:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: And only expect a single buffer in the unit test
+
+2010-06-14 16:02:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: Only convert one buffer instead of five
+	  Should make the unit test a lot faster.
+
+2010-06-14 14:13:32 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Fix unitialized variables
+	  yay macosx compilers :(
+
+2010-06-14 14:13:16 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix unitialized variable.
+	  yay macosx compilers :(
+
+2010-06-14 13:27:01 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Use Quarks for structure name/field checking
+
+2010-06-14 13:26:02 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Speed up _remove_format_info
+	  Instead of copying full caps, use the fact that the provided caps only have
+	  one structure and only copy around structures.
+
+2010-06-14 13:24:06 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Transfer structures instead of copying them
+	  Avoids many expensive structure copies
+
+2010-06-14 13:20:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Use GLIB_EXTRA_CFLAGS
+
+2010-06-14 13:02:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7a0fdf5 to c804988
+
+2010-06-14 11:31:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6da3bab to 7a0fdf5
+
+2010-06-14 11:20:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: Don't use deprecated GLib API
+	  Fixes once again bug #605100.
+
+2010-06-14 11:16:45 +0200  Prahal <prahal at yahoo.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: use accumulator for autoplug-sort
+	  Use an accumulator for the autoplug-sort signal so that we can stop the emission
+	  when a signal handler produced a valid result. This avoids the object handler
+	  to overwrite the results from user signals.
+	  Fixes #621161
+
+2010-06-14 11:11:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: activate_chain must not be called with a NULL chain
+	  It will crash later and shouldn't really happen anyway unless
+	  something is really wrong.
+
+2010-06-14 11:08:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  gnomevfssrc: Fix possible NULL pointer dereference
+	  It's always an error if gst_buffer_try_new_and_alloc() returns NULL
+
+2010-06-14 11:03:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Return FALSE from the seek handler if no seek callback was set
+
+2010-06-14 09:53:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiostreamsrc.c:
+	  giostreamsrc: Fix copy&paste error in the docs
+
+2010-06-14 00:33:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: fix debug message printf format some more
+	  Just cast the pointer diff, so it works everywhere without
+	  warnings. Can't use %tu, because that modifier is C99. Warning
+	  was: "format '%li' expects type 'long int', but argument 8 has
+	  type 'int'".
+
+2010-06-13 22:17:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add ffmpegcolorspace after videotestsrc for the unit test
+
+2010-06-13 20:57:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: ...and add Y16 case for the linear scaling
+
+2010-06-13 20:38:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add Y16 case for 4-tap scaling
+
+2010-06-13 18:27:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  tests: Fix linking of the tags test
+
+2010-06-13 08:20:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: Re-add (but deprecated) GST_VIDEO_{RED,GREEN,BLUE}_MASK_1[56]
+
+2010-06-12 21:04:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Use correct variables for debug output
+
+2010-06-12 16:51:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix Y16 from/to GRAY8 conversion
+
+2010-06-12 16:31:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Don't crash when doing gray YUV to GRAY conversion
+
+2010-06-12 16:23:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	  videoscale: Update disted orc files
+
+2010-06-12 16:16:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Allow video/webm for progressive downloading
+
+2010-06-12 13:59:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add support for more gray formats
+
+2010-06-01 16:45:34 +0000  Martin Bisson <martin.bisson@gmail.com>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video.{c,h}: Fix an endianness bug fix.
+	  This commit makes sure the endianness is ok for RGB/BGR 15/16 formats.
+
+2010-06-01 14:42:54 +0000  Martin Bisson <martin.bisson@gmail.com>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video.{c,h}: Add support for RGB and BGR with 15 and 16 bits.
+
+2010-06-12 13:35:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: Use libgstvideo for caps parsing, etc
+
+2010-06-12 13:04:43 +0200  Philippe Normand <phil@base-art.net>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Fix format string compiler warning on OS X
+
+2010-06-12 13:00:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Use GST_VIDEO_CAPS_GRAY{8,16}
+
+2010-06-12 12:57:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Implement linear merging of Y16 scanlines with orc
+
+2010-06-12 08:26:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 733fca9 to 6da3bab
+
+2010-06-11 22:16:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* ext/cdparanoia/Makefile.am:
+	  cdparanoia: check for cdparanoia with pkg-config first
+	  cdparanoia now has a .pc file in post-0.10.2 SVN, so use
+	  that to check for cdparanoia before we try all the other
+	  checks. Besides being generally nicer, this may help with
+	  correctly detecting cdparanoia on OSX some day (see #609918).
+
+2010-06-11 12:34:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: look for dts frames at non-zero offsets too
+	  Scan a bit into the data when checking for dts frames instead
+	  of expecting the frame sync to be right at the start of the
+	  data. This is needed for some dts-disguised-as-pcm-in-wav files.
+	  See #413942.
+
+2010-06-10 18:12:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add typefinder for dts audio
+
+2010-06-11 15:23:14 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  gstexiftag: Fix unitialized variables
+	  I hate thee macosx
+
+2010-06-11 08:47:27 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  gstexiftag: Fix debug statements
+
+2010-06-11 08:47:17 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  exiftag: Fix unitialized variable
+
+2010-06-10 20:45:42 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* win32/common/libgsttag.def:
+	  win32: update def file
+
+2010-06-10 20:36:32 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/tag.h:
+	  docs: fix gtk-doc warnings
+	  Variable names in function prototypes in the headers should match the doc-
+	  comment.
+
+2010-06-10 08:47:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If the text-sink claims to support ANY caps assume it only support raw plaintext subtitles
+	  Fixes bug #621071.
+
+2010-06-10 08:46:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/icles/playbin-text.c:
+	  icles: Only accept plain subtitles in the playbin-text icles test
+
+2010-06-09 22:34:24 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add support for VP6F (On2 VP6 Flash variant)
+
+2010-06-09 12:35:40 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	  Use the Orc m4 macro
+
+2010-06-09 12:40:00 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From fad145b to 733fca9
+
+2010-06-09 12:33:51 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From 47683c1 to fad145b
+
+2010-06-09 15:58:32 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exif: Refactor byte-order handling
+	  Only check for valid byte-order values when creating the
+	  exif readers and writers
+
+2010-05-10 14:01:46 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	* tests/check/libs/tag.c:
+	  tag: exif: Adds new geo-location tag mappings
+	  Adds mappings for:
+	  GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION
+	  GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION
+	  GST_TAG_GEO_LOCATION_MOVEMENT_SPEED
+	  GST_TAG_GEO_LOCATION_ELEVATION
+	  Does some refactoring in the code to reduce number of parameters
+	  passed to functions
+	  Tests included.
+
+2010-04-04 22:25:24 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: tag: Adds unit tests for exif helper lib
+	  Adds some simple unit tests for exif helper lib functions
+	  Fixes #614872
+
+2010-04-03 23:02:57 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/gstexiftag.c:
+	* gst-libs/gst/tag/tag.h:
+	* win32/common/libgsttag.def:
+	  tag: Adds basic exif tags support
+	  Adds exif helper lib functions to parse exif buffers from/to
+	  taglists. Exif is tipically used in jpeg images, but it can
+	  also be embedded into TIFF, AVI and WAV formats.
+	  Adds a couple function to handle exif in tiff header structures, that is how
+	  exif is embedded in jpeg and (obviously) in tiff.
+	  API: gst_tag_list_to_exif_buffer
+	  API: gst_tag_list_to_exif_buffer_with_tiff_header
+	  API: gst_tag_list_from_exif_buffer
+	  API: gst_tag_list_from_exif_buffer_with_tiff_header
+	  Fixes #614872
+
+2010-06-09 17:02:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Handle SEEKING query in push mode too
+
+2010-06-09 16:38:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Update the total time from the Skeleton 4 indexes
+	  Fixes bug #620939, see bug #607945.
+
+2010-06-09 16:33:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: Implement latest version of the Skeleton 4.0 spec
+	  Fixes bug #620939.
+
+2010-06-09 16:59:10 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/volume/gstvolume.c:
+	  volume: make the orc codes available for testing.
+	  Add a USE_ORC define for now and switch 'this' to 'self'. Having orc enabled
+	  passes the test suite and various manual gst-launch pipelines.
+
+2010-06-08 13:34:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	  .gitignore: add orc-related temp files
+
+2010-06-08 13:26:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* gst/audioresample/Makefile.am:
+	* gst/audioresample/gstaudioresample.c:
+	  Fix build if orc is not installed
+	  Orc is not a hard requirement. Things should still compile and
+	  work without orc, but slow fallback code may be used in this
+	  case. Fix up configure to not error out if orc is not installed
+	  and wrap use of orc profiling in audioresample in #ifdefs.
+	  Fixes #620136 some more.
+
+2010-06-08 13:11:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Implement correct parsing of Skeleton 4.0 index packets
+
+2010-06-08 12:01:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: Add parsing of Skeleton 4.0 indexes
+
+2010-06-08 11:40:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Parse segment length and content offset from fishead
+	  And print them for debugging purposes. Not sure if we can do anything useful
+	  with this information.
+
+2010-06-08 11:31:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: Parse Skeleton stream major/minor version
+
+2010-06-08 11:26:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Use binary search for searching in the index
+
+2010-06-08 11:02:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/video.c:
+	  video: Fix unit test, the Y800 checks were not used before and were not working
+
+2010-06-08 11:01:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Return TRUE in gst_video_format_is_gray() for Y800 and Y16
+
+2010-06-08 00:33:31 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	  audioconvert, videotestsrc: Update generated Orc code
+	  Fixes compile errors with initialization of unions.
+
+2010-06-08 00:32:36 -0700  David Schleef <ds@schleef.org>
+
+	* REQUIREMENTS:
+	  requirements: change liboil to Orc
+
+2010-06-06 23:50:05 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioresample/Makefile.am:
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: convert from liboil to orc
+
+2010-06-06 23:48:35 -0700  David Schleef <ds@schleef.org>
+
+	* tests/check/Makefile.am:
+	  tests: Add orc tests
+
+2010-06-06 23:48:15 -0700  David Schleef <ds@schleef.org>
+
+	* gst/volume/Makefile.am:
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolumeorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.h:
+	* gst/volume/gstvolumeorc.orc:
+	  volume: convert from liboil to orc
+
+2010-06-06 23:47:53 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/Makefile.am:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.h:
+	* gst/videotestsrc/gstvideotestsrcorc.orc:
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: convert from liboil to orc
+
+2010-06-06 23:47:16 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/Makefile.am:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_scanline.c:
+	* gst/videoscale/vs_scanline.h:
+	  videoscale: convert from liboil to orc
+
+2010-06-06 23:46:41 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioconvert/Makefile.am:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	  audioconvert: convert from liboil to orc
+
+2010-06-06 23:45:58 -0700  David Schleef <ds@schleef.org>
+
+	* gst/adder/Makefile.am:
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	* gst/adder/gstadderorc-dist.c:
+	* gst/adder/gstadderorc-dist.h:
+	* gst/adder/gstadderorc.orc:
+	  adder: convert from liboil to orc
+
+2010-06-06 23:45:10 -0700  David Schleef <ds@schleef.org>
+
+	* docs/design/Makefile.am:
+	* docs/design/design-orc-integration.txt:
+	  docs: Add notes about Orc integration
+
+2010-06-06 23:34:39 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	  configure: convert liboil check to orc
+
+2010-06-08 07:34:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Start a new page for every CMML buffer
+
+2010-06-07 14:38:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: add av-offset property
+	  Add av-offset property to control the audio and video sync offset. This can be
+	  used to to manually correct badly synced streams.
+	  See #620529
+
+2010-06-07 08:31:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  ffmpegcolorspace: Map "Y8  " and "GREY" to "Y800" and add it to the template caps
+
+2010-06-07 08:17:13 +0200  Martin Bisson <martin.bisson@gmail.com>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add support for Y800 and Y16
+	  Fixes bug #620441.
+
+2010-06-07 08:16:01 +0200  Martin Bisson <martin.bisson@gmail.com>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add support for Y800 and Y16
+	  Fixes bug #620441.
+
+2010-06-06 16:46:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: fix log function printf format issue
+
+2010-06-05 18:14:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: stop jpeg typefinding once we found a SOF marker
+
+2010-06-05 18:05:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: fix memory leak in unit test
+
+2010-05-19 15:40:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: improve jpeg typefinder
+	  Make jpeg typefinder check more than just the first two bytes
+	  plus Exif or JFIF marker. This allows us to report MAXIMUM
+	  probability in cases where there's no Exif or JFIF marker,
+	  making typefinding stop early. Also extract width and height,
+	  because we can.
+
+2010-06-05 17:22:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* tests/Makefile.am:
+	* tests/check/Makefile.am:
+	* tests/check/gst/typefindfunctions.c:
+	* tests/files/Makefile.am:
+	* tests/files/partialframe.mjpeg:
+	  tests: add small unit test for AC3 vs. JPEG typefinding issue
+
+2010-06-05 16:58:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: fix AC-3 typefinding so that it actually checks for a second frame
+	  Fix typo that made the AC-3 typefinder not actually check for a
+	  second frame, but rather compare the sync point found to itself,
+	  which resulted in the AC-3 typefinder reporting an overly optimistic
+	  MAXIMUM or VERY_LIKELY probability when it found a possible frame
+	  sync.
+
+2010-06-05 12:27:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstscreenshot.c:
+	  playbin2: improve screenshot code
+	  Use appsrc and appsink in the screenshot code to make things nicer.
+
+2010-06-05 11:28:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: fix documentation string
+
+2010-06-05 11:05:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: add convert-frame action signal
+	  Add a convert-frame action signal.
+	  Fixes #620279
+
+2010-06-05 11:02:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstscreenshot.c:
+	* gst/playback/gstscreenshot.h:
+	  playbin2: move marshaller to screenshot
+	  Move the marshaller for the convert_frame signal to the screenshot file in
+	  preparation for moving it to playsink.
+	  See #620279
+
+2010-06-05 10:42:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: move convert_frame to playsink
+	  Move the convert_frame function to playsink and make it part of the API. This is
+	  in preparation to add the convert_frame signal to playsink.
+	  See #620279
+
+2010-06-05 10:31:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: add property to get the last frame
+	  Add a property to get the last video frame.
+	  See #620279
+
+2010-06-04 19:30:14 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Handle raw streams we don't want.
+	  If a file contains raw streams (not requiring a decoder) that we do
+	  not want (expose-all-streams == FALSE), we would previously consider
+	  those of unknown-type (missing a decoder) ... whereas in fact it was just
+	  because they don't need decoders.
+	  This only applies if expose-all-streams is FALSE.
+
+2010-06-03 13:44:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  Revert "baseaudiosink: Allocate and free the clock in NULL->READY and reverse"
+	  This reverts commit cea2644ed86097aadedc9e8731e78a22ffc6246b.
+	  Many audio sink assume that they can create a clock in
+	  the instance init function and it will be there forever
+	  and not be cleared by the state change functions.
+
+2010-06-02 12:19:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: Allocate and free the clock in NULL->READY and reverse
+
+2010-06-01 23:49:07 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From 17f89e5 to 47683c1
+
+2010-06-01 22:54:33 -0700  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From fd7ca04 to 17f89e5
+
+2010-06-01 13:00:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* tests/examples/overlay/Makefile.am:
+	  examples: get the right Qt moc binary to use via pkg-config
+	  Should make us do the right thing in cases where both Qt3 and Qt4
+	  are installed.
+	  Fixes #620211.
+
+2010-05-31 19:28:45 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* ext/gio/gstgiobasesink.c:
+	  gio: map GIO NO_SPACE error to NO_SPACE_LEFT
+	  Fixes bug #620140.
+
+2010-05-28 08:27:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/interfaces/streamvolume.c:
+	  configure: Remove (now) useless check for cbrt
+
+2009-12-02 22:16:22 -0800  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/interfaces/streamvolume.c:
+	  interfaces: Use pow() instead of cbrt() for MSVC
+
+2010-05-26 11:54:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 357b0db to fd7ca04
+
+2010-05-26 08:51:09 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: Fix buffer offset_end when within tolerance.
+	  This fixes issues if we then have downstream elements that operate
+	  on offset/offset_end.
+	  And add the expected timestamp in the debug logs
+
+2010-05-24 11:27:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/fft/kiss_fft_f32.c:
+	* gst-libs/gst/fft/kiss_fft_f32.h:
+	* gst-libs/gst/fft/kiss_fft_f64.c:
+	* gst-libs/gst/fft/kiss_fft_f64.h:
+	* gst-libs/gst/fft/kiss_fft_s16.c:
+	* gst-libs/gst/fft/kiss_fft_s16.h:
+	* gst-libs/gst/fft/kiss_fft_s32.c:
+	* gst-libs/gst/fft/kiss_fft_s32.h:
+	* gst-libs/gst/fft/kiss_fftr_f32.c:
+	* gst-libs/gst/fft/kiss_fftr_f64.c:
+	* gst-libs/gst/fft/kiss_fftr_s16.c:
+	* gst-libs/gst/fft/kiss_fftr_s32.c:
+	  fft: Merge kissfft 1.2.8
+	  This reduces memory footprint for the FFT and adds
+	  OpenMP support (but we don't use it).
+
+2010-05-22 10:05:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Fixate interlaced, chroma-site and color-matrix fields if necessary
+
+2010-05-22 10:02:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* gst/videorate/gstvideorate.c:
+	  videorate: Use new string fixation function from core
+
+2010-05-22 09:48:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Fixate color-matrix and chroma-site fields if necessary
+
+2010-05-22 09:39:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Fixate the interlaced field if necessary
+	  Fixes bug #619310.
+
+2010-05-22 08:55:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add IVF typefinder
+
+2010-05-21 18:16:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: pass object to logging functions, use GST_DEBUG_FUNCPTR
+
+2010-05-20 15:14:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add basic descriptions for new WebM and VP8 types
+
+2010-05-20 14:21:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix sizes again, this time for real
+
+2010-05-20 13:58:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Fix size checks
+
+2010-05-20 10:19:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Drop all other Ogg VP8 header packets and make VP8 mapping check a bit more strict
+
+2010-05-20 08:52:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: Some more minor adjustments for the VP8 Ogg mapping
+
+2010-05-19 21:35:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: Update to the latest VP8 mapping
+
+2010-05-10 05:53:22 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Detect WebM as video/webm
+	  Refactor matroska_type_find into ebml_check_header and a new
+	  matroska_type_find and webm_type_find.
+
+2010-05-14 13:31:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Fix granulepos->key granule calculation for Dirac
+
+2010-05-14 11:02:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Add support for mapping specific granulepos to key granule mapping
+
+2010-05-05 13:59:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  ogg: Implement Ogg VP8 mapping
+
+2010-04-27 15:24:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add support for On2 VP8
+
+2010-05-19 16:17:19 +0200  Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: fix a typo introduced by 9d753824.
+	  video/x-raw-float => audio/x-raw-float. Fixes #619090.
+
+2010-05-18 08:45:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't put "raw" subtitle types in the raw caps for decodebin2
+	  We handle them from the autoplug-continue signal, where the caps supported
+	  by the subtitle sink or overlay are known already.
+
+2010-05-15 21:15:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Use = instead of == in shell scripts for equality checks
+
+2010-05-14 18:23:11 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 4d67bd6 to 357b0db
+
+2010-05-14 17:24:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Always take the object lock when accessing the caps
+	  Fixes bug #618625.
+
+2010-05-14 17:17:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Don't fail if subtitles are used but only audio is available and no visualizations
+	  Instead simply disable displaying of the subtitles for now, as was
+	  intended by that part of code...
+	  Fixes bug #610866.
+
+2010-05-14 17:13:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Fix deadlock caused from an additional lock instead of unlock
+	  Also improve debug output for the playsink lock.
+
+2010-05-13 12:16:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Use passthrough mode if width and height are not changed
+	  It doesn't matter if the PAR changes or not, processing of every pixel
+	  is only necessary when the width or height changes.
+
+2010-05-13 12:03:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: relax width and height constraints
+	  Increase the acceptable video sizes from [16,4096] to [1, MAX].
+	  See #618392
+
+2010-05-13 08:05:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Use simple fraction multiplication functions instead of going through GValues
+
+2010-05-10 17:09:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add a unit test for checking if the negotiation works as expected
+
+2010-05-10 17:09:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Try harder to keep the DAR if possible
+	  Fixes bug #371108.
+
+2010-05-10 15:13:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Log PAR and DAR of input and output caps when setting caps
+
+2010-05-10 14:52:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Set input width/height if the output caps don't have any width or height
+
+2010-05-10 13:01:44 +0200  Andoni Morales <ylatuya@gmail.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Try to keep DAR when scaling
+	  Fixes bug #371108.
+
+2010-05-10 19:09:28 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  basertpaudiopayload: Add extra frame for non-complete frame lengths
+	  Some payloaders like rtpg729pay can add a shorter frame at the end of a
+	  RTP packet. We need to count it like a full frame for timestamps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=618324
+
+2010-05-10 18:53:29 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  basertpaudiopayload: Set duration on buffers
+	  Set the duration of the buffers from their size
+
+2010-05-11 16:12:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Fixate PAR to 1/1 if possible
+
+2010-05-11 10:07:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Check for GTK+ 3.0 and if it's not available for GTK+ 2.0
+
+2010-05-10 12:44:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Check if the X context is allocated before using it
+	  It should be allocated at these places already or the state changes
+	  would have failed... but better add an additional check here.
+
+2010-05-10 12:28:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Post an error message on the bus if no supported pixmap formats can be found
+	  Might fix bug #615851.
+
+2010-05-07 19:49:57 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace : whooops
+
+2010-05-07 19:21:13 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: more minor cleanups
+
+2010-05-07 17:16:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: speedup caps transformation
+	  * don't re-create our possible caps every single time, just use the
+	  template caps.
+	  * don't intersect the caps against the template, basetransform has already
+	  done that for us.
+	  62% speedup of _transform_caps() (instruction calls, measured with callgrind)
+
+2010-05-07 12:19:25 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add the 'expose-all-streams' property from decodebin2
+	  API: expose-all-streams
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617868
+
+2010-05-06 18:50:51 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Add a property to not expose/decode all streams
+	  API : expose-all-streams
+	  If disabled:
+	  * only the streams that CAN be decoded and match the final caps will have a
+	  decoder plugged in and be exposed.
+	  * the streams that COULD HAVE BEEN decoded but do not match the finals caps
+	  will not have a decoder plugged in and will not be exposed.
+	  If no decoder is available to decode a certain stream, then the missing element
+	  message will still be emitted regardless of the value of the property.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617868
+
+2010-05-06 17:47:12 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: rename are_raw_caps to are_final_caps, correct comment
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617868
+
+2010-05-07 17:16:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/sdp/gstsdpmessage.h:
+	  sdpmessage: add new TIAS bandwidth modifier
+	  Add TIAS modifier as specified in RFC 3890.
+	  Do some whitespace fixes.
+
+2010-05-07 00:10:22 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioconvert/audioconvert.c:
+	  audioconvert: disambigue comment due to popular demand
+	  Write "target depth" instead of "our depth" or previous ambigous "out depth".
+
+2010-05-06 15:40:34 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: disconnect signals in some more cleanup cases
+
+2010-05-06 13:10:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't seek when no current chain
+	  Avoid a crash when we try to seek when there is no current chain.
+
+2010-05-06 12:21:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: ignore the skeleton start time
+	  Ignore the skeleton start time as it is usually wrong for live streams
+	  and we have the needed logic to calculate it anyway.
+
+2010-05-06 12:06:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: wait for headers before exposing chains
+	  Wait until we have all the stream headers before we start exposing the streams
+	  of a chain.
+
+2010-05-06 10:56:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: use index to estimate bitrate
+	  When we have an index, use it to much more accurately estimate the total stream
+	  bitrate.
+
+2010-05-06 11:34:53 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  docs: be more firendly to gtk-doc limitted parsing capabilities
+
+2010-05-06 09:42:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* gst-libs/gst/rtsp/gstrtsprange.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  docs: fix wrong doc markup
+
+2010-05-06 09:17:33 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: use can_intersect to avoid a caps copy
+
+2010-05-06 09:14:25 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: trucate own caps, instead of copying and using the first only
+	  We got the caps from an intersect, it is our own, hence we can truncate it.
+	  Besides gst-indent has chooses to line-up all caps in one line again :/.
+
+2010-05-06 09:12:32 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin.c:
+	  decodebin: use can_intersect to avoid a caps copy
+
+2010-05-06 09:11:17 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/libvisual/visual.c:
+	  libvisual: trucate own caps, instead of copying and using the first only
+	  We got the caps from an intersect, it is our own, hence we can truncate it.
+
+2010-05-06 08:20:10 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/gstvorbisdeclib.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	  vorbis: have a copy_sample func as a func pointer
+	  Make some more variants for copy_sample funcs and use them via function pointer.
+
+2010-05-06 08:16:45 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioconvert/audioconvert.c:
+	  audioconvert: fix typo in comment
+
+2010-05-06 08:15:16 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: use gst_caps_can_intersect() more
+	  In place where we just need to know whether caps intersect, we can use this
+	  quicker function.
+
+2010-04-15 13:09:45 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/position-formats.c:
+	  examples: add a test for difference position formats
+	  The test runs position and duration queries on the pipeline in all formats.
+
+2010-04-15 13:08:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/audio-trickplay.c:
+	  example: update status (adder is fixed now)
+
+2010-04-15 13:08:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/playbin-text.c:
+	  example: make app static
+
+2010-05-05 13:25:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: printf format fixes
+
+2010-05-04 15:32:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: weekday and month names in RTSP date string should be in C locale
+	  Create date string using C locale weekday and month names.
+	  Fixes #617636.
+
+2010-05-04 17:54:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add all qtdemux types to downloadable types
+	  Add all the media types that qtdemux can handle to the list of downloadable
+	  types.
+
+2010-05-04 17:38:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: handle corrupt indexes
+	  Make sure we handle and receover from corrupt indexes.
+
+2010-05-04 15:47:29 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix EOS check
+
+2010-05-04 13:51:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: avoild division by 0
+
+2010-05-04 13:50:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: cleanup unused defines
+
+2010-05-04 13:36:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: use the index in push mode when we can
+	  When seeking in push mode, try to use the index first before we use the bitrate
+	  estimation.
+
+2010-05-04 13:05:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: use skeleton duration when possible
+
+2010-05-04 13:02:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggstream: parse duration from 3.3 skeleton
+
+2010-03-02 11:16:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: more index parsing work
+
+2010-03-01 13:50:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: clean up fishead/fisbone parsing
+	  Remove some redundant code for parsing fishead streams. Actually use the data we
+	  parsed (mostly start_time).
+
+2010-05-04 11:19:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: implement seek in push mode
+	  Refactor start time collection code.
+	  When we receive a flush_stop, resync to the new start time and push out a new
+	  segment event.
+
+2010-05-03 16:52:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: make event handling better
+	  Explicitly handle FLUSH events and resync on FLUSH_STOP.
+	  Make send_event return a boolean.
+	  Use more performant send_event function to forward events.
+
+2010-04-30 18:37:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: implement seeking in pushmode
+	  Convert seek requests to bytes using the bitrate and forward them upstream. Does
+	  not quite work because the flushing and resyncing is not implemented yet.
+
+2010-04-30 18:03:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: refactor for seeking in pushmode
+	  refactor the code a little to prepare for seeking in push mode
+
+2010-05-03 12:46:34 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds new geo-location mappings
+	  Adds GST_TAG_GEO_LOCATION_MOVEMENT_SPEED,
+	  GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION and
+	  GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION to xmp
+	  mappings.
+	  Tests included.
+
+2010-04-26 22:08:41 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds xmp mappings for device tags
+	  Adds xmp mappings for GST_TAG_DEVICE_MANUFACTURER and
+	  GST_TAG_DEVICE_MODEL. Also adds tests for it.
+
+2010-04-30 19:56:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspbase64.c:
+	* gst-libs/gst/rtsp/gstrtspbase64.h:
+	  rtsp: deprecate remaining base64 function now that we depend on GLib 2.20
+	  API: deprecate gst_rtsp_base64_decode_ip(), use g_base64_decode_inplace() instead
+
+2010-04-30 19:37:33 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basertpdepayload: ensure writable metadata
+
+2010-04-30 17:41:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: use bitrate to estimate length in pushmode
+	  Parse the bitrate from the various streams.
+	  Use the bitrate and the upstream length in bytes to estimate the total stream
+	  duration in push mode.
+
+2010-04-30 14:07:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* ext/gio/gstgiobasesrc.c:
+	  Bump GLib requirement to 2.20
+	  See http://gstreamer.freedesktop.org/wiki/ReleasePlanning/GLibRequirement
+
+2010-04-30 13:36:59 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: forward duration query duration during group switch if no cached duration
+	  ... such as during first group setup.
+	  Fixes #616396.
+
+2010-04-02 16:37:21 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: only EOS when all streams are EOS
+
+2010-04-02 16:36:53 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix debug message
+
+2010-04-30 08:45:43 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/audio-trickplay.c:
+	  test: fix copy and paste error of variable name
+
+2010-04-18 20:46:37 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: only accept seek-types none and set
+	  Previously we were also acting on cur and end, but treating them like none.
+
+2010-04-14 23:31:20 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: rework timestamping
+	  Adder was using always incrementing timestamps. Seeking was done by setting the
+	  position in the newsegment event. This was failing when doing segmented seeks
+	  with rate<0.0, as offset (and thus timestamp) would go below 0.
+	  Now we take both cur and end from the seek event. We construct newsegment events
+	  depending including cur and end from the seek event. We set position to the
+	  start of the segment. Timestamp is set to start or end of segment depending on
+	  rate. Offset is recalculated.
+
+2010-04-26 17:30:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Add support for deinterlacing
+	  This is disabled by default and can be enabled with the
+	  deinterlace flag.
+	  Fixes bug #547603.
+
+2010-04-26 11:12:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplay-enum.c:
+	* gst/playback/gstplay-enum.h:
+	  playbin2: Add flag for enabling/disabling automatic deinterlacing
+
+2010-04-26 11:11:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplay-enum.c:
+	  playbin: Use g_once_init_{enter,leave} instead of GOnce for enum/flag registration
+
+2010-04-23 17:01:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/Makefile.am:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	  ffmpegcolorspace: Use GST_BOILERPLATE and use GstVideoFilter as base class
+	  This gives automatic QoS handling.
+
+2010-04-23 16:24:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Correctly reconfigure the video chain when switching from a subtitle to a non-subtitle file
+	  Fixes bug #616422.
+
+2010-04-23 16:08:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If a text sink is provided, let subtitle parsing be done by decodebin2 if required
+	  This way subtitle sinks only get buffers in the format that they
+	  understand, i.e. raw parsed text in most cases.
+	  Fixes bug #614942.
+
+2010-04-23 15:30:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Set subtitle encoding on the decodebins again
+
+2010-04-23 15:22:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: API: Add GST_VIDEO_FORMAT_v308 for packed 4:4:4 YUV
+
+2010-04-23 15:14:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: Some random cleanup
+
+2010-04-23 15:06:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add support for Y444, Y42B and Y41B
+
+2010-04-23 14:42:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Reorder template caps by the amount of information contained in the color formats
+
+2010-04-22 15:46:17 -0400  Joshua M. Doe <joshua.doe@us.army.mil>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: add support for video/x-raw-gray
+
+2010-04-29 15:05:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/inspect/plugin-decodebin2.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	  docs: remove references to and introspection data of plugins that no longer exist
+	  Some plugins (decodebin2, playbin) have been renamed or merged
+	  into different plugins (uridecodebin, playback).
+
+2010-04-29 15:02:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development.
+
+=== release 0.10.29 ===
+
+2010-04-28 02:16:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.29
+
+2010-04-28 01:34:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2010-04-25 23:14:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.28.3 pre-release
+
+2010-04-20 17:20:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-plugins-base.doap:
+	  doap: update repository info from cvs->git and maintainers
+
+2010-04-23 14:39:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From fc85867 to 4d67bd6
+
+2010-04-22 20:58:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Fix Y41B->Y444 conversion
+	  ...which is the intermediate conversion for conversion to all
+	  other formats.
+	  Fixes bug #616545.
+
+2010-04-16 20:03:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: Don't leak the input buffer in error cases
+	  Fixes bug #615572.
+
+2010-03-29 12:53:11 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/ogg/gstoggmux.c:
+	  docs: fix typo in link name
+
+2010-04-15 12:59:53 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: gracefully handle ximagesink>xwindow == NULL
+	  Expose could be called before we have set the xwindow. Handle this gracefully
+	  like we do in image_put.
+	  Fixes #615789
+
+2010-04-15 11:44:49 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: refactor _update_geometry()
+	  Refactor like in xvimagesink. Remove the extra parameter and adjust the assert check.
+
+2010-04-15 07:18:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Drop -Wcast-align
+	  Commit message copied from core's commit from Benjamin Otte:
+	  246f5dba96a5b50bb74621af67b30942cca72af5
+	  Apparently gcc warns that GstMiniObject is not castable to
+	  GstEvent/Message/Buffer due to them containing 64bit variables, even
+	  though ARM hackers claim that those only need 4byte alignment. And as
+	  long as gcc behaves that way, this warning is not very useful.
+	  So we'll remove the warning until this problem is fixed.
+	  Fixes #615698
+
+2010-04-14 14:13:25 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/tag/lang-tables.dat:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	  0.10.28.2 pre-release
+
+2010-04-14 13:50:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translations
+
+2010-04-13 16:20:10 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: init geometry when setting new xid
+	  Don't rely on expose event to query geomentry after new xid is set.
+	  Fixes #615647.
+
+2010-04-14 13:43:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audioconvert/Makefile.am:
+	* tests/examples/app/Makefile.am:
+	* tests/examples/dynamic/Makefile.am:
+	* tests/examples/gio/Makefile.am:
+	* tests/examples/volume/Makefile.am:
+	* tests/old/examples/switch/Makefile.am:
+	  build: use LDADD instead of LDFLAGS to specify libs to link to when building executables
+	  Use foo_LDADD instead of foo_LDFLAGS to specify the libraries to link to.
+	  This should make sure arguments are passed to the linker in the right
+	  order, and makes LDFLAGS usable again.
+	  Based on initial patch by Brian Cameron <brian.cameron@oracle.com>
+	  Fixes #615697.
+
+2010-04-12 14:02:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add channels and rate to ADTS caps if we can
+
+2010-04-12 13:33:18 +0100  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/typefind/Makefile.am:
+	* gst/typefind/gstaacutil.c:
+	* gst/typefind/gstaacutil.h:
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add AAC level to ADTS caps
+	  This adds code to calculate the level for a given AAC stream and export
+	  it in the stream caps. For AAC LC streams, the level is calculated
+	  according to the definition under the AAC Profile. For other streams,
+	  the definition under the Main Profile is used.
+	  HE-AAC support is still to be done, and is dependent on detecting the
+	  presence of SBR and PS in the stream.
+	  Level is added as a field of type string because that's the way it's
+	  done in H.264 caps as well. There are only a few possible levels, so
+	  not using a numerical type is not too painful in this case, and
+	  consistency is nice.
+	  Fixes #613589.
+
+2010-03-10 13:32:53 +0000  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add AAC profile to ADTS caps
+	  This looks at the AAC profile for ADTS streams and adds the profile as a
+	  string in the corresponding caps.
+	  Profile is the actual profile, base-profile denotes the minimum codec
+	  requirements to decode this stream. In this case they're always the
+	  same, but they may differ e.g. in case of certain HE-AAC streams that
+	  can be partially decoded by LC decoders (with loss of quality of course)
+	  if no suitable HE-AAC decoder is available.
+	  Fixes #612312.
+
+2010-04-11 22:58:15 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: add support for negative playback rates
+	  Decrement sample counter when playing backwards. Set proper segment when playing
+	  backwards (0..cur instead or cur..-1). Add more logging and fix a format string.
+
+2010-03-26 19:00:47 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiopayload: use ptime-multiple
+	  Based on patch by Olivier Crête <olivier.crete@collabora.co.uk>
+	  Fixes #613248
+
+2010-04-09 16:06:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  audiopayload: add property to control packet duration
+	  Add a property to specify that the amount of data in a packet should be a
+	  multiple of ptime-multiple.
+	  See #613248
+
+2010-04-09 11:20:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 218568f to fc85867
+
+2010-04-08 17:49:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/Makefile.am:
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplayback.h:
+	  playback, ogg: dist new gstplayback.h and gstogg.h
+
+2010-04-09 08:23:33 +0200  Thomas Green <thomasgr33n@googlemail.com>
+
+	* gst/playback/gstplaybin.c:
+	  playbin: Only unref the volume element on dispose and when a new audio sink is set
+	  Unreffing it whenever the sinks are removed will make the volume
+	  element unavailable after a playbin reuse because it is only
+	  recreated if the audio sink has changed.
+	  Fixes bug #614288.
+
+2010-04-08 07:39:08 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Be sure that metadata is writable before setting caps
+	  Call gst_buffer_make_metadata_writable before attempting
+	  to set caps on the buffer.
+
+2010-04-08 12:21:50 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/gio/gstgio.c:
+	* ext/gnomevfs/gstgnomevfs.c:
+	  ext: Invert rank of gio and gnomevfs elements
+
+2010-04-08 01:26:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: don't pass non-constant strings as printf format strings
+	  Fixes 'format not a string literal and no format arguments' compiler
+	  warning when compiling with -DGST_DISABLE_PRINTF_EXTENSION.
+
+2010-04-07 20:21:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  docs: add gtk-doc chunks with Since: tags for new GST_VIDEO_CAPS_GRAY* API
+
+2010-04-07 19:07:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* autogen.sh:
+	* configure.ac:
+	  build: bump autoconf requirement to 2.60 for gobject-introspection.m4
+	  Require autoconf 2.60 (which was released in June 2006).
+	  Fixes #600718.
+
+2010-04-07 17:25:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  video: Fix parsing of 8-bit grayscale caps
+
+2010-04-07 17:21:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video.h:
+	  video: API: Add GST_VIDEO_CAPS_GRAY{8,16}
+
+2010-04-07 17:08:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  video: API: Add gst_video_format_is_gray() to the docs
+
+2010-04-07 17:07:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  video: Add new symbol to the exported symbols list
+
+2010-04-07 17:06:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add support for 8-bit and 16-bit grayscale formats
+
+2010-04-06 10:55:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtspconnection: Handle closed POST socket in tunneling
+	  Catch more socket errors.
+	  Rework how sockets are managed in the GSource, wake up the maincontext instead
+	  of adding/removing the sockets from the source.
+	  Add callback for when the tunnel connection is lost. Some clients (Quicktime
+	  Player) close the POST connection in tunneled mode and reopen the socket when
+	  needed.
+	  See #612915
+
+2010-04-04 21:24:44 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	  configure: fix cdparanoia check
+	  Linking with libcdda_paranoia.so requires also linking with
+	  libcdda_interface.so.
+
+2010-04-04 18:00:23 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  tests: tag: Refactor a bit
+	  Refactor xmp tags unit tests and remove an useless assertion.
+	  This will make easier to add unit tests to serialize/deserialize
+	  taglists.
+
+2010-04-04 21:18:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: Ignore errors when unpreparing or closing the device
+	  Errors could happen here when the device was removed already
+	  or when something is broken anyway. If errors happen here and
+	  they're propagated, the element can't shutdown cleanly.
+	  Fixes bug #614545.
+
+2010-04-04 20:55:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/alsa/gstalsamixer.c:
+	  alsamixer: Detect errors from device polling, stop the task and post an error message
+	  Partially fixes bug #614545.
+
+2010-04-04 12:13:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* tests/examples/seek/Makefile.am:
+	  examples: build silly joystick seek example only on linux
+	  jsseek depends on linux headers and should therefore only be built
+	  on linux.
+	  Fixes #614764.
+
+2010-04-03 22:49:11 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: swap timestamps in forward and reverse mode.
+	  In reverse mode we want use the next next timestamp (and not the other way
+	  around). Fixes the tests again. Also readd a log line that was dropped with
+	  previous commit.
+
+2010-04-03 14:03:45 +0100  Vincent Untz <vuntz@gnome.org>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  libs: point gobject-introspection scanner to .la files
+	  Point g-ir-scanner to the .la file of our library, which hopefully
+	  makes it find the right dependencies in all cases (ie. our locally
+	  built libgstreamer and not the system-installed one). This is also
+	  how it's done in Gtk+ and how it's documented in the wiki, see
+	  http://live.gnome.org/GObjectIntrospection/AutotoolsIntegration
+	  Fixes #603710.
+
+2010-04-02 21:01:25 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: implement reverse playback
+	  Support playback at negative rates. When having a GstController assigned, the
+	  element will produce time dependend output.
+
+2010-04-02 20:56:19 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/audio-trickplay.c:
+	  tests: extend audio-trickplay test app
+	  Tell status in top comment. Use debug logging instead of print to be able to
+	  see timing issue in debug log viewer. Add more commandline flags. Test reverse
+	  playback.
+
+2010-04-02 18:56:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: Only use embed_xid if HAVE_X is defined
+	  Fixes bug #614622.
+
+2010-04-01 19:13:22 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/pipelines/basetime.c:
+	  tests/basetime: Don't run test with osxaudiosrc
+	  libcheck runs the actual tests in a forked process and that makes the guys
+	  in Cupertino really sad.
+
+2010-04-01 18:51:17 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	  tests: Unref the bus once we're done with it
+
+2010-04-01 16:49:37 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  common: Update for new suppressions
+
+2010-04-01 13:55:15 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  gstplaysink: Remove unused variable.
+	  The value of klass is never used
+
+2010-04-01 13:53:37 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Removing dead assignment.
+	  The value of group is overwritten a few lines below before being used.
+
+2010-04-01 13:51:13 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: Remove unused variable
+
+2010-04-01 13:48:42 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/gnomevfs/gstgnomevfssink.c:
+	  gstgnomevfssink: Return the proper GstFlowReturn.
+	  We were always returning GST_FLOW_OK previously even if we encountered errors.
+
+2010-03-30 23:44:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  gst-libs: more gobject-introspection fixes
+	  Use right .pc file variable for compiler includes this time:
+	  g-ir-compiler wants the girdirs not the typelibdirs as includes.
+
+2010-03-30 20:21:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/jsseek.c:
+	  examples: fix printf format warning in jsseek example
+	  Yes, I know about G_GSIZE_FORMAT.
+
+2010-03-30 19:56:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  gst-libs: fix up gobject-introspection some more
+	  Use new girdir and typlibdir from core .pc files, so we can figure
+	  out the right includes to pass to the gobject-introspection tools,
+	  whether core is installed in the same prefix as gobject-introspection
+	  or in a different prefix or uninstalled. This also keeps us from adding
+	  bogus paths to the includes that only work if core is uninstalled.
+	  Also add some missing includes/pkgs where needed.
+
+2010-03-30 19:29:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	  Our RIFF library depends on both the audio and tag libraries
+	  Update rules in Makefile.am accordingly.
+
+2010-03-30 15:10:42 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Fix aduio_raw_sink typo
+
+2009-11-28 21:03:44 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/seek/.gitignore:
+	* tests/examples/seek/Makefile.am:
+	* tests/examples/seek/jsseek.c:
+	  examples: Add a silly joystick based shuttle example
+
+2010-03-29 20:07:52 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: 0-length packets are delta units
+
+2010-03-29 10:47:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	  gst-libs: build independent sub-directories in parallel if make -jN is used
+	  Build those libraries that don't depend on any other gst-plugins-base
+	  libraries in parallel if make -jN is used.
+
+2010-03-29 00:22:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	* ext/Makefile.am:
+	* gst/Makefile.am:
+	* sys/Makefile.am:
+	* tests/examples/Makefile.am:
+	  build: build plugin and example directories in parallel if make -jN is used
+	  We know our plugins and examples are independent of each other, so may
+	  just as well build them in parallel. Makes the output a bit messy, but
+	  that shouldn't be a problem and can easily be avoided with make -j1.
+
+2010-03-28 21:50:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	  gst-libs: specify dependencies in Makefile.am to make them explicit
+
+2010-03-24 09:59:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	* sys/xvimage/xvimagesink.c:
+	* tests/icles/test-xoverlay.c:
+	  xoverlay: change new set_render_rectangle() vfunc to take four arguments so we don't depend on libgstvideo
+	  Don't make libgstinterfaces (and thus libgstaudio etc.) indirectly depend
+	  on libgstvideo by using the GstVideoRectangle helper structure in the API,
+	  which causes undesirable dependencies, esp. with the gobject-introspection
+	  (people will point and laugh at us if they find out that libgstaudio
+	  depends on libgstvideo). Instead, pass the x, y, width and height parameters
+	  directly to the function.
+	  Re-fixes #610249.
+
+2010-03-25 18:45:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: we can handle avi in download mode too
+	  Add avi to the whitelisted types that can be used for download buffering.
+
+2010-03-26 15:57:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Provide packet duration function for old FLAC mapping too
+	  Fixes bug #613809.
+
+2010-03-18 22:12:40 +0000  Damien Lespiau <damien.lespiau@intel.com>
+
+	* autogen.sh:
+	  autogen.sh: Don't call configure with --enable-plugin-docs
+	  configure gives a nice warning:
+	  configure: WARNING: unrecognized options: --enable-plugin-docs
+	  and indeed, I could not find anything in the configure.ac or the m4
+	  macros that would allow enabling that option. Remove it then.
+
+2010-03-24 23:04:43 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Do not remove tag from list twice
+	  There was a but when parsing the tags that removed two tags
+	  from the list when only one was parsed
+
+2010-03-24 14:43:21 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Add some comments
+	  Just adds some comments explaining some stuff about the
+	  (de)serialization functions. Add myself to the copyright list too.
+
+2010-03-24 10:18:13 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds _USER_RATING mapping for xmp
+	  Adds a new mapping for _USER_RATING on xmp helper lib
+	  and also adds tests for it
+
+2010-03-23 09:32:40 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Add Elevation tag mapping
+	  Adds a mapping to the _ELEVATION tag, this is a different
+	  mapping as it has to be mapped into exif:GPSAltitude and
+	  exif:GPSAltitudeRef at the same time. So we needed to refactor
+	  a little more to be able to deserialize it properly.
+	  Now, when parsing a xmp buffer into a taglist all tags are
+	  added to a list before being parsed so that when one of the
+	  altitude tags are found the deserialization function can search
+	  for its complementary tag to do the correct parsing
+	  Fixes #613690
+
+2010-03-23 09:48:19 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Fix off by one
+	  Avoid ignoring single char tags, like exif:GPSAltitudeRef
+	  Fixes #613690
+
+2010-03-22 15:18:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	* tests/check/libs/tag.c:
+	  tag: xmp: Adds mappings for LATITUDE and LONGITUDE
+	  Adds the mappings for those tags and tests
+	  for tags serialization.
+	  Fixes #613690
+
+2010-03-22 22:03:09 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Refactor buffer parsing
+	  When parsing the xmp buffer into the gst taglist store the
+	  found tags into a list to be parsed only after finding all
+	  tags on the buffer. This allows the parser function to search
+	  this list for complimentary tags that should be parsed together
+	  Fixes #613690
+
+2010-03-20 11:17:38 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tag: xmp: Refactor mappings storage
+	  This commit is only refactoring, no fetaures added.
+	  Do not store tags in flexible arrays as it doesn't allow us
+	  to use nested flexible arrays. This is going to be needed in the
+	  following commits to map gst tags that are stored into
+	  2 separate tags in xmp (Not that they are alternatives, but
+	  they are complementary).
+	  For example, GST_TAG_ELEVATION is represented in the exif
+	  schema with 2 fields: the absolute altitude and an integer
+	  to indicate if it is above or below sea level.
+	  The previous mappings storage wouldn't allow us to
+	  express it.
+	  Also store a serialization and a deserialization function
+	  for each xmp tag as some of them require some non-trivial
+	  convertion to its string form.
+	  Fixes #613690
+
+2010-03-24 18:51:42 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 55cd514 to c1d07dd
+
+2010-03-24 18:55:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: parse more info from the buffering query
+	  Parse more info from the buffering query and log this as debug info.
+
+2010-03-24 12:10:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	  rtsptransport: ignore unparsable ranges
+	  Ignore unparsable port ranges instead of erroring out.
+	  Fixes #613591
+
+2010-03-23 18:36:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Add new gst_rtsp_lower_trans_get_type() symbol to the symbol lists
+
+2010-03-23 11:01:17 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add some more fourcc for MPEG-4 video
+
+2010-03-22 09:15:28 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: require core git
+
+2010-03-22 08:38:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* pkgconfig/gstreamer-fft-uninstalled.pc.in:
+	* pkgconfig/gstreamer-fft.pc.in:
+	  pkgconfig: Add @LIBM@ to the FFT pkg-config files
+
+2010-03-22 08:35:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* pkgconfig/gstreamer-app-uninstalled.pc.in:
+	* pkgconfig/gstreamer-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-cdda-uninstalled.pc.in:
+	* pkgconfig/gstreamer-fft-uninstalled.pc.in:
+	* pkgconfig/gstreamer-floatcast-uninstalled.pc.in:
+	* pkgconfig/gstreamer-floatcast.pc.in:
+	* pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+	* pkgconfig/gstreamer-netbuffer-uninstalled.pc.in:
+	* pkgconfig/gstreamer-pbutils-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-riff-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtsp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-sdp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-tag-uninstalled.pc.in:
+	* pkgconfig/gstreamer-video-uninstalled.pc.in:
+	  pkgconfig: Fix include and library paths for the uninstalled pc files
+
+2010-03-20 13:42:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	  gio: add cast to avoid compiler warning with old GLib versions
+	  g_file_input_stream_query_info() had char * instead of const char *
+	  as attribute argument before 2.20.
+	  Fixes #613387, spotted by tetsuyayasuda@gmail.com
+
+2010-03-20 12:55:36 +0000  Torsten Schönfeld <kaffeetisch@gmx.de>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  docs: add Since: tags to gst_x_overlay_handle_event() docs
+	  Fixes #613403.
+
+2010-03-19 22:33:58 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  Constify some strings in the API
+	  Needed by plugins-good
+
+2010-03-19 16:41:54 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Only set color-matrix and chroma-site for relevant formats
+	  The color-matrix only makes sense for colorful formats, i.e. not Y800
+	  and the chroma-site only for non-4:4:4(:4) formats.
+
+2010-03-19 15:37:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	  theoradec: add QoS messages to the decoder
+	  Post QoS messages when we drop a frame because of QoS.
+
+2010-03-19 15:00:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: add GType for transport flags
+	  Make a method to register the transport flags as a GType.
+
+2010-03-19 01:00:36 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/cdparanoia/Makefile.am:
+	* ext/gio/Makefile.am:
+	* ext/gnomevfs/Makefile.am:
+	* ext/libvisual/Makefile.am:
+	* ext/ogg/Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* gst/ffmpegcolorspace/Makefile.am:
+	* gst/tcp/Makefile.am:
+	* gst/videotestsrc/Makefile.am:
+	* sys/v4l/Makefile.am:
+	* tests/examples/app/Makefile.am:
+	* tests/examples/overlay/Makefile.am:
+	* tests/icles/Makefile.am:
+	  build: Makefile.am fixes
+	  Mostly just add missing $(GST_BASE_CFLAGS), but also fix up order
+	  of flags (see docs/random/moving-plugins).
+
+2010-03-19 00:46:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/.gitignore:
+	  .gitignore: ignore new unit test binary
+
+2010-03-17 23:57:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure.ac: -Wmissing-prototypes and -Wnested-externs are not valid for C++
+	  Fixes building Qt-based overlay examples in combination with -Werror.
+
+2010-03-17 16:32:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure.ac: wrap overly long warning flag lines
+
+2010-03-17 19:24:27 -0300  Reuben Dowle <reube.dowle@navico.com>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Fix caps leak
+	  Unref caps when peer doesn't accept caps
+	  Fixes #613198
+
+2010-03-17 08:13:59 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	  tests: capsfilter-renegotiation: Adds a new unit test
+	  Adds a new test for checking that capsfilter 'caps' property
+	  changes cause caps renegotiation on the pipeline.
+
+2010-03-17 16:46:32 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Use correct boundary checks for YUY2/UYVY
+	  Fixes bug #613093.
+
+2010-03-17 16:39:13 +0100  Peter Kjellerstedt <peter.kjellerstedt@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	  rtsp: Further clean up of gst_rtsp_strresult()
+	  Since we no longer use an array of error messages, there is no reason
+	  to clamp the error code, which allows us to simplify the code some more
+	  and also to actually report the correct error code for unknown errors.
+
+2010-03-17 15:41:45 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Remove useless cast
+	  It's not necessary anymore after latest core change to GstValueArray.
+
+2010-03-17 12:08:30 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	  Add more warning flags
+	  The warnings are:
+	  -Wcast-align
+	  -Winit-self
+	  -Wmissing-include-dirs
+	  -Waddress
+	  -Waggregate-return
+	  -Wno-multichar
+	  -Wnested-externs
+	  No code needed to be fixed.
+
+2010-03-17 11:14:29 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst/audioconvert/gstfastrandom.h:
+	  Fix for -Wold-style-definition
+	  I didn't add the flag to configure because libvisual ships headers that
+	  trigger this warning.
+
+2010-03-17 10:53:21 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	* ext/pango/gstclockoverlay.h:
+	* gst/subparse/mpl2parse.c:
+	  Add -Wformat-nonliteral -Wformat-security
+	  And fix the resulting compile failures.
+	  I'm sorry about the patch necessary to gstclockoverlay.h but after
+	  talking to Tim we decided we can live with it.
+
+2010-03-17 10:51:57 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	  rtsp: Refactor gst_rtsp_strresult
+	  2 goals in the refactoring:
+	  - Put the error messages closer to their enum values, so that it's easy
+	  to see which error belongs to which value.
+	  - Make gcc not complain with -Wformat-nonliteral
+
+2010-03-17 10:47:07 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmp: Refactor code
+	  I initially looked here because I wanted compiles to not fail with
+	  -Wformat-nonliteral but ended up refactoring the code to make it look
+	  nicer.
+	  As I lack a large collection of XMP tagged files, I only did rough
+	  testing of the code. The testsuite passes though.
+
+2010-03-16 20:05:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* m4/Makefile.am:
+	* m4/a52.m4:
+	* m4/aalib.m4:
+	* m4/as-arts.m4:
+	* m4/as-ffmpeg.m4:
+	* m4/as-liblame.m4:
+	* m4/as-slurp-ffmpeg.m4:
+	* m4/esd.m4:
+	* m4/gconf-2.m4:
+	* m4/glib.m4:
+	* m4/gst-artsc.m4:
+	* m4/gst-matroska.m4:
+	* m4/gst-sdl.m4:
+	* m4/gst-shout2.m4:
+	* m4/gst-sid.m4:
+	* m4/gtk.m4:
+	* m4/libfame.m4:
+	* m4/libmikmod.m4:
+	  m4: remove some unused .m4 files
+
+2010-03-16 18:31:15 +0100  Benjamin Otte <otte@redhat.com>
+
+	* ext/alsa/gstalsaplugin.c:
+	* ext/ogg/gstoggdemux.c:
+	  More ENABLE_NLS fixes
+
+2010-03-16 18:06:16 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/gettext.h:
+	  Fix for ENABLE_NLS being undefined for -Wundef
+
+2010-03-15 22:49:53 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	* ext/libvisual/visual.c:
+	* ext/theora/gsttheoraenc.c:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/interfaces/mixer.c:
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	* gst-libs/gst/tag/tags.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/samiparse.c:
+	* gst/typefind/gsttypefindfunctions.c:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	* gst/volume/gstvolume.c:
+	* sys/v4l/gstv4lelement.c:
+	* sys/xvimage/xvimagesink.c:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/elements/gdpdepay.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/playbin2.c:
+	* tests/check/elements/videorate.c:
+	* tests/check/libs/pbutils.c:
+	* tests/check/libs/video.c:
+	* tests/check/pipelines/simple-launch-lines.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/stress-playbin.c:
+	  Add -Wwrite-strings to configure
+	  Fixes for the code included
+
+2010-03-16 15:45:23 +0100  Benjamin Otte <otte@redhat.com>
+
+	* ext/alsa/gstalsamixer.c:
+	* ext/alsa/gstalsamixerelement.c:
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	* ext/gnomevfs/gstgnomevfssink.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/libvisual/visual.c:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gststreamselector.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversink.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* sys/v4l/gstv4ljpegsrc.c:
+	* sys/v4l/gstv4lmjpegsink.c:
+	* sys/v4l/gstv4lmjpegsrc.c:
+	* sys/v4l/gstv4lsrc.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/elements/playbin.c:
+	* tests/check/elements/playbin2.c:
+	* tests/check/elements/textoverlay.c:
+	* tests/check/libs/cddabasesrc.c:
+	* tests/check/libs/pbutils.c:
+	* tests/old/testsuite/alsa/formats.c:
+	* tests/old/testsuite/alsa/sinesrc.c:
+	  gst_element_class_set_details => gst_element_class_set_details_simple
+	  Also change my email from the old university one to the current one.
+
+2010-03-15 22:17:56 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	  Add -Wundef flag
+
+2010-03-16 16:15:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: allow for more ipv6 addresses
+	  Use hints in getaddrinfo() so that we can also resolve ipv6 addresses.
+
+2010-03-11 14:52:09 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: arrange for a running ringbuffer/clock for _wait_eos
+	  Fixes #612223.
+
+2010-03-16 01:08:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  tests: fix videorate test
+	  Fix up videorate test for latest videotestsrc changes: just check for
+	  the important bits in the negotiated caps, not for exact equality with
+	  our filter caps. Also don't leak the videorate element in the test.
+
+2010-03-15 12:54:32 -0500  Rob Clark <rob@ti.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add mapping for On2 VP7 fourccs
+	  Fixes #612968.
+
+2010-03-15 12:54:01 -0500  Rob Clark <rob@ti.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add mapping for On2 VP62 fourcc
+	  See #612968.
+
+2010-03-15 23:46:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/multichannel.c:
+	* gst-libs/gst/audio/multichannel.h:
+	* gst-libs/gst/interfaces/propertyprobe.c:
+	* gst-libs/gst/interfaces/tuner.c:
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  docs: more helper libraries docs fixes
+	  Quieten gtk-doc a bit more.
+
+2010-03-15 23:47:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	  docs: add GstRTSPExtension to docs
+	  Add minimal docs for GstRTSPExtension so people know it exists.
+
+2010-03-15 18:45:13 +0000  David Hoyt <dhoyt@llnl.gov>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: use g_ascii_strncasecmp() instead of strncasecmp()
+	  g_ascii_strncasecmp() is more portable and likely more robust as
+	  well (with random binary data as input).
+	  Fixes #612845.
+
+2010-03-15 13:39:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  docs: fix typo in gst_tag_list_from_xmp_buffer() docs chunk
+
+2010-03-15 13:32:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	  docs: fix up interfaces library docs to make gtk-doc happy
+
+2010-03-15 13:24:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: add new libgstvideo API to documentation
+
+2010-03-15 13:19:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstinterfaces.def:
+	* win32/common/libgstvideo.def:
+	  win32: add recently added API to .def files
+	  Also add API markers to make life easier for the release manager:
+	  API: gst_x_overlay_set_render_rectangle()
+	  API: gst_video_parse_caps_color_matrix()
+	  API: gst_video_parse_caps_chroma_site()
+
+2010-03-15 13:14:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: use C comments instead of C++-style comments
+
+2010-03-15 13:10:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: use g_value_set_static_string() for string constants
+
+2010-03-15 14:26:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Avoid g_object_set() on NULL if a text sink is used
+	  Fixes bug #611702.
+
+2010-03-15 14:10:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Correctly escape brackets in DKS regex
+	  Fixes bug #612783.
+
+2010-03-15 11:36:22 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: make timeout usec more accurate
+	  Adjust the returned usec from the elapsed time so it represents the remaining
+	  timeout.
+
+2010-03-15 11:41:35 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/videorate.c:
+	  tests: update videorate test for videotestsrc changes
+	  Add color-matrix to the caps we are comparing. Add logging og the caps in the
+	  test.
+
+2010-03-15 01:35:15 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add chroma-zone-plate pattern
+	  pattern=chroma-zone-plate is pattern similar to zone-plate,
+	  but in the chroma channels instead of luma.
+
+2010-03-15 01:34:09 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: add chroma-site to caps
+
+2010-03-15 01:33:36 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: add chroma-site to caps
+
+2010-03-15 01:31:20 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: add gst_video_parse_caps_chroma_site()
+
+2010-03-14 19:10:16 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: add color-matrix to caps
+
+2010-03-14 16:17:46 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add color-matrix to template caps
+
+2010-03-14 22:14:19 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/examples/seek/seek.c:
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-xoverlay.c:
+	  tests: make Gtk+ test programs compile with -DGSEAL_ENABLE
+	  Fixes #612552, at least for now.
+
+2010-03-14 22:13:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Makefile.am:
+	  build: add cruft alert for common/shave* leftovers to top-level Makefile.am
+
+2010-03-14 13:11:53 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't drop zero-sized packets
+	  Zero-sized packets have relevence to Theora.
+
+2010-03-12 15:47:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Revert rounding behaviour changes when using controlled volume properties
+	  Now the controlled and non-controlled code paths are all having
+	  exactly the same rounding behaviour and the unit tests pass again.
+
+2010-03-12 15:44:50 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Only allocate a mute value array if a control source exists for the mute property
+
+2010-03-12 13:55:55 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From e272f71 to 55cd514
+
+2010-03-10 10:50:32 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  tags: Add new mapping to XMP helpers
+	  Adds geotagging mappings to XMP helpers
+	  Fixes #609539
+
+2010-03-11 20:16:44 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/interfaces/Makefile.am:
+	  Don't have 2 include dirs
+	  Seems to have been accidentally introduced in
+	  7269bc26d0a4bf44bd77a039fb54777625ef5f39.
+
+2010-03-11 16:35:10 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/icles/audio-trickplay.c:
+	  tests: Fix another unitialized variable
+
+2010-03-11 16:09:26 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/icles/audio-trickplay.c:
+	  tests: Fix unitialized variable.
+
+2010-03-11 15:38:18 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	* ext/ogg/gstoggdemux.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioquantize.h:
+	* gst/audioconvert/gstchannelmix.h:
+	* gst/playback/gstplaysink.c:
+	  Add -Wredundant-decls to warning flags
+	  ... and fix all the warnings that flag throws.
+
+2010-03-11 13:32:14 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	* ext/ogg/Makefile.am:
+	* ext/ogg/gstogg.c:
+	* ext/ogg/gstogg.h:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggmux.h:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/ogg/vorbis_parse.c:
+	* ext/ogg/vorbis_parse.h:
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/gsttheoraenc.h:
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/riff/riff.c:
+	* gst-libs/gst/rtsp/gstrtspbase64.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/tag/lang.c:
+	* gst/ffmpegcolorspace/Makefile.am:
+	* gst/ffmpegcolorspace/gstffmpeg.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/gdp/gstgdpdepay.h:
+	* gst/gdp/gstgdppay.h:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplayback.c:
+	* gst/playback/gstplayback.h:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/videorate/gstvideorate.h:
+	* tests/check/elements/appsink.c:
+	* tests/check/elements/audiorate.c:
+	* tests/check/elements/audioresample.c:
+	* tests/check/libs/cddabasesrc.c:
+	* tests/check/libs/mixer.c:
+	* tests/check/libs/navigation.c:
+	* tests/examples/gio/giosrc-mounting.c:
+	  Add -Wmissing-declarations -Wmissing-prototypes to warning flags
+	  Includes all the fixes necessary to make stuff compile again.
+
+2010-03-11 12:49:02 +0100  Benjamin Otte <otte@redhat.com>
+
+	* ext/gio/gstgiobasesink.c:
+	  gio: Remove unused function
+
+2010-03-11 11:14:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisparse.c:
+	  vorbisparse: make sure header buffer metadata is writable before modifying it
+	  Fixes unit test failures with core git.
+
+2010-03-11 12:18:00 +0100  Benjamin Otte <otte@redhat.com>
+
+	* tests/check/elements/multifdsink.c:
+	  check: Ref buffers after setting caps on them
+	  Reffing makes metadata unwritable, so we need to set the caps before.
+
+2010-03-11 12:04:32 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	  Add WARNING_CXXFLAGS where ERROR_CXXFLAGS are
+	  This matches the previous commit doing the same for CFLAGS in response
+	  to the common/ module changes.
+
+2010-03-11 12:04:37 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2010-03-11 10:38:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/icles/test-xoverlay.c:
+	  tests: don't use Gtk+ 2.18 API for no good reason
+	  The rest of the code directly uses widget->allocation as well, so no point
+	  in using the new API in other places.
+
+2010-03-11 11:20:48 +0100  Benjamin Otte <otte@redhat.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From df8a7c8 to e272f71
+
+2010-03-11 10:55:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  xvoverlay: correct version number in docs
+
+2010-02-26 13:56:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/audio-trickplay.c:
+	  tests: add a test for trickplay in audio synthesis graphs
+	  Right now this mostly demonstatest what not works. That is seeking with
+	  start-type = NONE to only update the rate and playing backwards. Also
+	  it shows that non-flushing seeks tend to lockup adder. Separate unit tests
+	  for the issues follow.
+
+2010-02-08 17:20:35 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/gstxmptag.c:
+	* gst-libs/gst/tag/tag.h:
+	* tests/check/libs/tag.c:
+	* win32/common/libgsttag.def:
+	  tags: add basic xmp metadata support
+	  XMP metadata can be embedded in many media container formats. Implement own
+	  parser and formatter that can be used to convert between an xpacket and a
+	  GstTagList. Add unit tests.
+
+2010-02-19 14:38:36 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/test-xoverlay.c:
+	  example: add an example for xoverlay::set_render_rectangle()
+	  This add a new example which animates a target recangle for the video.
+
+2010-02-19 14:46:43 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  xvimagesink: implement set_render_rectangle
+	  Previously we hardcoded the target rectangle passes to Xv(Shm)PutImage. Extend
+	  the implementation to use a full rectangle and don't assume 0,0 for top,left.
+
+2010-02-17 15:00:13 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	  xoverlay: add new vmethod ::set_render_rectangle()
+	  Add set_render_rectangle() vmethod to the interface to better support windowless
+	  toolkits (e.g. qt graphicsview or video on canvas in general). Right now we
+	  always fill the widget to 100%. With the patch we can use a rectangular target
+	  region. Fixes #610249.
+	  API: GstXOverlay::set_render_rectangle()
+
+2010-02-16 12:06:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: take new size from event thread and do not poll for every frame
+	  We can update the geometry in ConfigureNotify (unless we disable event-
+	  handling). If event handling is disabled, one should use _expose() to trigger a
+	  redraw and update the geometry.
+
+2010-03-10 21:51:59 +0100  Benjamin Otte <otte@redhat.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 9720a7d to df8a7c8
+
+2010-03-10 21:01:20 +0100  Benjamin Otte <otte@redhat.com>
+
+	* configure.ac:
+	  Update for recent changes to common submodule
+	  This just replaces every "$ERROR_CFLAGS" usage with a usage of
+	  "$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
+	  previously.
+	  Actually using that separation will happen later.
+
+2010-03-10 20:43:46 +0100  Benjamin Otte <otte@redhat.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 0b6e072 to 9720a7d
+
+2010-03-10 16:09:45 +0100  Benjamin Otte <otte@redhat.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7cc5eb4 to 0b6e072
+
+2010-03-10 14:36:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: do not cache FLUSH_START/_STOP events
+	  ... and similarly so for serialized events.
+
+2010-03-10 14:34:57 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: provide correct error message if configured audio/video sink fails
+
+2010-03-10 10:22:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.h:
+	  vorbisdec: remove unused field
+
+2010-02-02 11:34:10 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* tests/check/pipelines/vorbisdec.c:
+	  tests: enable strict discontinuity checking on vorbisdec pipeline
+	  Closes #423086.
+
+2010-03-10 01:09:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7aa65b5 to 7cc5eb4
+
+2010-03-10 01:07:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	  docs: fix Returns: for gst_video_parse_caps_color_matrix()
+
+2010-03-10 00:46:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update for changed string
+
+2010-03-10 00:42:15 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  tests: fix typo in videorate unit test pipeline description
+	  Two consecutive ! ! leave a 'Link without source' error in the debug log.
+
+2010-03-10 00:41:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  tests: don't use deprecated functions in videorate unit test
+
+2010-03-10 00:29:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32: add new API to libgstvideo.def
+
+2010-03-09 15:39:55 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Don't flush after every frame for theora
+
+2010-03-09 21:26:58 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 44ecce7 to 7aa65b5
+
+2010-03-09 13:05:23 -0800  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add color-matrix handling to caps
+
+2010-01-30 22:55:01 -0800  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Add color-matrix to caps
+
+2010-02-26 16:25:59 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* pkgconfig/Makefile.am:
+	* tests/examples/overlay/Makefile.am:
+	* tools/Makefile.am:
+	  build: Make some more rules silent if requested
+
+2010-02-26 15:40:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  configure: Use automake 1.11 silent rules instead of shave if available
+	  This makes sure that we use something that is still maintained and
+	  also brings back libtool 1.5 support.
+
+2010-02-23 19:12:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Don't fail if there are subtitles and audio but no video
+	  Change playbin2 to not error out if there are subtitles and audio
+	  but no video. If visualizations are enabled the subtitles are rendered on top
+	  of the visualization stream, otherwise the subtitles are not linked at all and
+	  only the audio is played (and a warning message is posted).
+	  If there are only subtitles but neither audio nor video an error message is
+	  still posted.
+	  Fixes bug #610866.
+
+2010-02-17 19:18:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolume.h:
+	  volume: If a controller is used, use sample accurate property values
+	  Fixes bug #609801.
+
+2010-03-09 19:17:04 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/video/video.c:
+	  gstvideo: Fix typos in comments
+
+2010-03-09 17:32:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Back to development
+
+=== release 0.10.28 ===
+
+2010-03-08 23:20:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.28
+
+2010-03-08 23:19:57 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2010-03-08 21:57:03 +0100  Benjamin Otte <otte@redhat.com>
+
+	* ext/theora/gsttheoraenc.c:
+	  theora: Fix SIGFPE when using 0/1 framerate
+	  libtheora crashes with a 0 framerate, so let's forbid it.
+	  https://bugzilla.redhat.com/show_bug.cgi?id=571289
+
+2010-03-08 14:50:25 +0000  David Schleef <ds@schleef.org>
+
+	* ext/ogg/dirac_parse.c:
+	  oggdemux: fix dirac header parsing
+	  Fixes #611900.
+
+2010-03-08 14:46:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/Makefile.am:
+	  examples: make sure to dist qtgv-xoverlay.h header file
+	  This time for real.
+	  Fixes #610832.
+
+2010-03-08 12:11:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basedepay: clarify some documentation
+
+2010-03-08 11:25:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc: return right number of bytes that we wrote
+
+2010-03-08 11:20:51 +0100  Dake Gu <gudake@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: fix handling of x-server-ip-address
+	  Fix handling of x-server-ip-address.
+
+2010-03-02 11:25:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-keyframe-force.txt:
+	  docs: update keyframe force event
+	  Add field to send all headers.
+
+=== release 0.10.27 ===
+
+2010-03-06 00:09:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.27
+
+2010-03-06 00:08:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2010-03-05 15:58:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: first check for QtGui >= 4.6, only then for >= 4.0
+	  If we first check for >= 4.0 the second check for >= 4.6 will just
+	  short-cut since we are using the same prefix for the variables for
+	  both checks, and they've already been set previously. So the examples
+	  requiring >= 4.6 were built even in the >= 4.0 case.
+
+2010-03-03 20:18:16 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.26.4 pre-release
+
+2010-03-03 20:17:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/ja.po:
+	  po: update translations
+
+2010-03-03 20:15:44 +0000  Josep Torra Valles <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: avoid g_object_set() on NULL pointers
+	  There may not be an overlay element if a text-sink is set.
+	  Fixes #611702.
+
+2010-03-01 12:17:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: mark skeleton streams correctly
+	  Mark skeleton streams because we need to ignore them for calculating the
+	  duration of the stream.
+	  Fixes #611227
+
+2010-02-24 01:10:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* po/nl.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.26.3 pre-release
+
+2010-02-23 16:57:53 +0100  Götz Waschk <waschk@mandriva.org>
+
+	* tests/examples/overlay/Makefile.am:
+	  examples: Dist header file for the Qt graphics view example
+	  Fixes bug #610832.
+
+2010-02-23 11:41:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: use the chain begin_time instead of our counter
+	  We update the passed begintime argument to narrow our search region in the
+	  binary search. This means that it does not always contain the chain begin time
+	  after a couple of bisects. Use the real chain->begin_time to bring the
+	  granuletime to the time in the chain instead.
+	  Fixes #610005
+
+2010-02-19 18:24:40 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/elements/videorate.c:
+	  videorate: tests: New unit tests for upstream caps nego
+	  Adds unit tests that check videorate's upstream caps
+	  negotiation works properly (put passthrough caps
+	  first)
+	  Fixes #608025
+
+2010-01-27 15:07:47 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Improve upstream negotiation
+	  Put peer pad caps preferred framerates first, indicating
+	  they are videorate's first choices, removing an unnecessary
+	  conversion.
+	  Fixes #608025
+
+2010-02-21 19:52:45 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  playbin2, playsink, subtitleoverlay: Set subtitle encoding properly
+	  For this add subtitle encoding properties to playsink and subtitleoverlay
+	  and update the values in the containing elements.
+	  Also update the font description in textoverlay or the used renderer
+	  element if it is changed during playback.
+	  Fixes bug #610310.
+
+2010-02-22 13:01:19 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/examples/overlay/qt-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-xoverlay.cpp:
+	  examples: also add sink detection and set title to qt examples
+	  Also set a title in the qt examples like it is now done in the gtk example.
+	  Fix the newly added find_video_sink in the gtk example and add similar function
+	  to the qt examples.
+
+2010-02-19 14:40:43 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/overlay/.gitignore:
+	  gitignore: ignore files in new example directroy
+
+2010-02-17 14:59:33 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/Makefile.am:
+	  make: fix copy and paste error in git rules (audio<->video)
+
+2010-02-19 17:44:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Ghost the video sinkpad if a text sinkpad is available
+	  Only don't ghost it if no visualizations are need and if
+	  no text is needed and no textchain was created yet.
+	  Fixes bug #610379.
+
+2010-02-19 00:22:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.26.2 pre-release
+
+2010-02-19 00:20:02 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translation files
+
+2010-02-19 00:17:51 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/.gitignore:
+	  Ignore new overlay examples
+
+2010-02-18 23:47:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/overlay/gtk-xoverlay.c:
+	  examples: don't hard-code xvimagesink for Gtk+ GstXOverlay example
+	  Try to find a working videosink, don't hardcode xvimagesink. Also
+	  add some borders to window and give it a title so that it's clear
+	  that this is really a Gtk+ window and not a window created by the
+	  videosink.
+
+2010-02-18 11:42:55 -0800  David Schleef <ds@schleef.org>
+
+	* gst/tcp/gsttcp.c:
+	  tcp(client/server)src: Fix handling of closed sockets
+	  The peer closing the socket should cause an EOS, instead of
+	  silently doing nothing.  This changes the behavior to be
+	  more like fdsrc.  Fixes: #610386
+
+2010-02-18 12:42:53 +0000  Patrick Radizi <patrick.radizi@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: make sure not to dereference NULL username or password
+	  Fixes #610268.
+
+2010-02-17 21:22:54 -0800  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: Fix chroma copying for 4:2:2
+	  Fix mixup of height/width, causing only half the chroma lines to
+	  be copied when outputting buffers.  Fixes: #610329.
+
+2010-02-16 15:43:26 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst-libs/gst/interfaces/xoverlay.c:
+	* tests/examples/Makefile.am:
+	* tests/examples/overlay/Makefile.am:
+	* tests/examples/overlay/gtk-xoverlay.c:
+	* tests/examples/overlay/qt-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-xoverlay.cpp:
+	* tests/examples/overlay/qtgv-xoverlay.h:
+	  examples: add video overlay examples for gtk, qt and qt graphics view
+	  Add simple videotestsrc ! xvimagesink examples using gtk and qt. This patch also
+	  adds all boilerplate to configure for using c++. The qt based examples are
+	  optional like their gtk counterparts.
+
+2010-02-16 17:20:01 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/compiling.sgml:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: cleanup library docs
+	  Correct name of included files. Remove files that are not used anymore. Add many
+	  new api entries to their sections.
+
+2010-02-15 11:11:04 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/test-colorkey.c:
+	  test-colorkey: remove the XInitThreads()
+	  We don't do this is any other example, this should be done for us in gdk it if
+	  would be needed.
+
+2010-02-16 10:09:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: use same message string for missing elements as in playbin
+	  Use the same translated message string for missing core elements as
+	  playbin uses, which is a bit nicer and also indicates that there is
+	  something wrong with the user's GStreamer installation (which arguably
+	  is the case if elements like typefind or queue2 are missing).
+
+2010-02-08 13:54:57 +0200  Kaj-Michael Lang <milang@tal.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Handle stm module format
+	  Fixes #609314.
+
+2010-02-15 12:10:10 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/vorbis/gstivorbisdec.c:
+	  ivorbisdec: set rank to SECONDARY
+
+2010-02-15 12:09:53 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* configure.ac:
+	* ext/Makefile.am:
+	* ext/vorbis/Makefile.am:
+	* ext/vorbis/gstivorbisdec.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/gstvorbisdeclib.c:
+	* ext/vorbis/gstvorbisdeclib.h:
+	  vorbisdec: also support ivorbis tremor decoder
+	  ... which only needs a bit of refactoring and extracting to support
+	  the minor difference in (i)vorbis interface.
+	  Fixes #609063.
+
+2010-02-03 14:37:43 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisdec.h:
+	  vorbisdec: reduce some hard-coding
+	  ... such as assuming float all over, and base src caps on template caps.
+
+2010-02-15 10:23:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/playbin.c:
+	  playbin: Fix the primary-decoder-missing test with USE_DECODEBIN2
+
+2010-02-15 09:04:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggparse.c:
+	  oggparse: Fix another format string compiler warning
+
+2010-02-15 08:56:25 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix format string compiler warnings
+
+2010-02-15 08:48:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Post a missing element message and an error message if no uridecodebin can be found
+
+2010-02-15 08:46:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Post missing element messages if a core plugin is missing
+	  And post a warning in cases where we can still continue to work
+	  or an error when the missing element is fatal.
+
+2010-02-15 08:28:24 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/playbin2.c:
+	  playbin2: Enable all unit tests
+	  They're all working and valgrind clean now.
+
+2010-02-15 08:26:05 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: First post a missing-plugin message, then emit the unkown-type signal
+	  This makes sure that there *always* is a missing plugin message in the bus
+	  before any errors or warning messages.
+
+2010-02-15 08:20:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Missing decoder errors should be STREAM CODEC_NOT_FOUND
+	  and not CORE MISSING_PLUGIN.
+
+2010-02-15 08:18:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Free the subtitle URI
+
+2010-02-15 08:06:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Post missing plugin messages if a required element can't be created
+	  Especially if no suitable URI source can be found.
+
+2010-02-15 06:50:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/.gitignore:
+	  tests: Add decodebin2 test to .gitignore
+
+2010-02-15 01:18:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Set ghostpad targets to NULL when freeing a decode chain
+	  Otherwise the ghostpad will still be linked to the peer and there
+	  will still be a reference kept, leading to nothing being unlinked
+	  and destroyed until decodebin2 is finalized.
+	  This fixes reuse of decodebin2 if a raw stream is connected to
+	  its sinkpad.
+
+2010-02-15 01:17:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/decodebin2.c:
+	  decodebin2: Add simple unit test, mainly a copy of the decodebin unit test
+	  The only difference between the two unit tests right now is,
+	  that the decodebin2 test resets the element to READY before trying
+	  to reuse it instead of NULL. decodebin2 guarantees to be reusable
+	  without going back to NULL.
+
+2010-02-15 00:11:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: theora PAR of 0:N, N:0 or 0:0 is allowed and maps to 1:1
+	  See #609252.
+
+2010-02-14 23:16:32 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 96dc793 to 44ecce7
+
+2010-02-14 23:10:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	  playbin2: Enable playbin2 unit test
+	  It now contains a single working unit test and can be enabled.
+	  The other more useful unit tests still need fixing.
+
+2010-02-14 22:16:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/playbin.c:
+	  playbin: Fix indention in the unit test
+
+2010-02-13 01:08:05 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	  volume: Replace this variables by self
+
+2010-02-12 19:43:13 +0100  Josep Torra Valles <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Reset the sink's state to NULL before unreffing it unless it's the same instance again
+	  This makes sure that we don't destroy the last reference before the
+	  element gets back to NULL state. Fixes assertion failures if a playbin2
+	  instance is reused but different sinks are automatically chosen because
+	  of different caps.
+
+2010-02-12 18:00:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: fix Since tag
+
+2010-02-12 14:19:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: treat JUNQ chunks like JUNK chunks
+
+2010-02-12 14:29:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Update basesrc segment duration and post duration messages from the streaming thread
+
+2010-02-11 14:10:02 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/tags.c:
+	  tags: improve docs about determining the encoding
+
+2010-02-11 14:09:05 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  comment: fix wrong header comment
+
+2010-02-01 13:50:14 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	  riff: add a variant of the JUNK tag that several adobe products produce
+	  JUNQ has same semantics as JUNK.
+
+2010-02-01 19:01:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: add min-percent property
+	  Emit need-data when the amount of data in the internal queue drops below
+	  min-percent.
+	  Fixes #608309
+
+2010-02-01 18:56:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: cleanups
+	  Avoid some typechecks.
+	  Avoid dereferencing appsrc->priv all the time.
+
+2010-02-01 18:55:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: cleanups
+	  Avoid some typecasting.
+	  Avoid dereferencing appsink->priv all the time.
+
+2010-02-01 15:09:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: avoid some typecasts
+
+2010-01-29 16:34:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: ignore \n and \r as the first line
+	  Be more forgiving for bad servers and ignore \r and \n when we are looking for
+	  the response/request line.
+	  See #608417
+
+2010-02-10 16:05:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: fail gracefully on bad Content-Length headers
+	  Be careful when allocating the amount of bytes specified in the Content-Length
+	  because it can be an insanely huge value. Try to allocate the memory but fail
+	  gracefully with a nice error when the allocation failed.
+
+2010-02-10 10:12:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add conversions from all ARGB formats to AYUV and back
+
+2010-02-09 17:39:21 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Update segment duration and post a duration message if the duration changes
+	  Fixes bug #609423.
+
+2010-02-11 10:56:17 +0100  Benjamin Otte <otte@redhat.com>
+
+	* tests/examples/seek/Makefile.am:
+	  build: link to libm in examples that use it
+	  This fixes build failure in Fedora 13.
+
+2010-02-11 01:11:30 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* MAINTAINERS:
+	  Update MAINTAINERS, add myself
+
+2010-02-11 23:57:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: back to development
+	  Slushy freeze remains in effect.
+
+=== release 0.10.26 ===
+
+2010-02-10 20:17:36 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.26
+
+2010-02-10 20:16:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2010-02-08 11:21:35 +0100  Benjamin M. Schwartz <bens@alum.mit.edu>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: PARs of 0:x, x:0 and 0:0 are all allowed and map to 1:1
+	  Fixes #609252.
+
+2010-01-24 12:31:04 +0000  Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: use the default granpos functions for kate streams
+	  Set timestamps on kate packets. See bug #600929.
+
+2010-02-05 01:18:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.25.3 pre-release
+
+2010-02-04 18:52:59 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/bg.po:
+	  po: update translations
+
+2010-02-04 18:32:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  Revert "playbin2: Only allow to set the URIs in states <= READY or from an about-to-finish signal handler"
+	  This reverts commit 7335ce5d3e03c126a417a721571cb6f3af136ecf.
+	  Support abusing the uri property to configure the next uri to play
+	  outside of the about-to-finish handler for the time being after all.
+	  We also shouldn't use thread private structures for this, since it
+	  should be possible to block the thread that emitted about-to-finish
+	  while the main thread sets the uri property. See #607226.
+
+2010-02-02 10:18:05 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't leak allocated buffers
+	  This can happen if the combined flow return is not OK although the
+	  allocation succeeded or if the packet in question is a BOS and we're
+	  not going to push headers.
+	  Fixes bug #608699.
+
+2010-02-01 11:44:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: clean up decodebin properties
+	  When reusing a decodebin2 element, clear the properties we might have changed,
+	  to their default values or else we might end up with old configuration.
+	  Fixes #608484
+
+2010-01-29 13:56:05 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: when no uri is set, post an error message
+	  When no uri is set, don't just return STATE_CHANGE_FAILURE from the
+	  state change function, but actually post an error message.
+
+2010-01-30 15:18:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 15d47a6 to 96dc793
+
+2010-01-28 17:12:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: don't hold object lock when calling peer elements
+	  Do not hold the object lock while we call methods on peer elements as this can
+	  lead to deadlocks.
+	  Fixes #608179
+
+2010-01-27 01:12:49 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  0.10.25.2 pre-release
+
+2010-01-27 01:07:55 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/interfaces-enumtypes.h:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/video-enumtypes.c:
+	  win32: update generated files for non-autotools win32 builds
+
+2010-01-27 00:56:00 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translation files
+
+2010-01-27 00:41:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audiosrc: add gratuitious FIXME for use of generic G_TYPE_POINTER type
+
+2010-01-26 16:47:40 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't skip an element when getting the topology
+	  Fixes #608167
+
+2010-01-24 14:41:44 +0000  Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: sparse streams aren't timed by end time, and their duration isn't implicit
+	  Fixes timestamps and durations on Kate subtitle streams.
+	  See http://www.xiph.org/ogg/doc/ogg-multiplex.html section 'start-time and
+	  end-time positioning' for some more details, and bug #600929.
+
+2010-01-23 20:15:08 +0000  Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: properly set up the media type for kate streams
+	  See #600929.
+
+2010-01-25 18:57:52 +0100  Julien Moutte <julien@fluendo.com>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: relax caps template on sink pads
+	  Allow any caps on sink pad templates as we could do passthrough with non raw
+	  video caps.
+
+2010-01-25 15:14:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: use right type for the serialno
+	  Use a consistent type for the serialno to avoid problems when comparing between
+	  signed and unsigned variants.
+	  Fixes #607926
+
+2010-01-25 14:00:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't push headers twice
+	  Don't push the stream headers twice but only in the activation of a chain.
+	  Fixes #607929
+
+2010-01-25 13:18:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-base
+
+2010-01-25 12:31:24 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: rename a variable
+	  Rename the 'seekable' variable to 'pullmode'. We might be able to seek in push
+	  mode too eventually.
+
+2010-01-25 12:22:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  Revert "inputselector: Protect g_object_notify() with the object's mutex"
+	  This reverts commit a37426c41c80fd21e5017fea01a786c05bcd9661, it's
+	  causing deadlocks with playbin2.
+
+2010-01-24 20:55:26 +0100  Kipp Cannon <kcannon@ligo.caltech.edu>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: Protect g_object_notify() with the object's mutex
+	  This works around the thread unsafety of g_object_notify()
+	  Fixes bug #607513.
+
+2010-01-24 20:46:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add typefinder for ISO MP4 files
+	  Fixes bug #607848.
+
+2010-01-24 13:29:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix crash when freeing headers
+	  Use _ogg_packet_free() instead of gst_mini_object_unref in one more
+	  place now that the header list contains ogg packets and not buffers.
+	  file: Stephen_Fry-Happy_Birthday_GNU-nq_600px_425kbit.ogv
+
+2010-01-24 08:57:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Strip trailing \0 for subtitle OGM streams
+	  Fixes bug #607870.
+
+2010-01-23 22:09:45 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Correctly set DELTA_UNIT flag for OGM streams
+
+2010-01-23 22:05:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Don't strip all 0-bytes from the end of OGM packets
+	  This fixes broken packets pushed downstream by oggdemux for
+	  MPEG4 streams for example.
+
+2010-01-23 22:03:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Extract tags from OGM text streams and don't push them downstream
+
+2010-01-23 14:46:19 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Store header/queued packets as ogg_packet and use normal peer chaining functions to pass them downstream
+
+2010-01-23 15:25:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: optimise AC-3 typefinder a bit
+	  Make AC-3 typefinder use the DataScanCtx stuff so we don't have to
+	  do gst_type_find_peek() in the inner loop all the time. Also return
+	  when we've suggested AC3 caps, instead of continuing with the loop.
+
+2010-01-23 14:31:15 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  Revert "typefind: Reduce number of calls to gst_type_find_peek."
+	  This reverts commit c661bfaa991c58f1fbd9fbc0dae90b8b2c27f92b.
+	  This breaks AC-3 typefinding for all cases where the first frame
+	  is at an offset > 0.
+
+2010-01-23 15:35:05 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for Zip Block Motion Video
+
+2010-01-23 15:34:54 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add mapping for Zip Block Motion Video
+
+2010-01-23 15:26:37 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: YUNV is a fourcc which is also used for YUY2 raw video
+
+2010-01-23 15:13:45 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: vp61 and VP61 are also valid On2 VP6 fourcc
+
+2010-01-23 15:10:45 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add mapping for On2 VP5
+
+2010-01-23 15:04:35 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add mapping for Sigma-Designs MPEG4
+	  It's actually a xvid-compatible stream. both xviddec and ffmpeg handle it.
+
+2010-01-23 14:35:28 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for LOCO Lossless codec
+
+2010-01-23 14:35:16 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add mapping for LOCO Lossless codec
+
+2010-01-23 14:08:39 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add support for YV12 / Uncompressed packed YVU 4:2:2
+
+2010-01-23 13:50:26 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for Autodesk Animator codec
+
+2010-01-23 13:50:09 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add mapping for Autodesk Animator Codec
+
+2010-01-23 13:20:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: ...and set caps on queued packet buffers too
+
+2010-01-23 13:19:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Set caps on header buffers
+
+2010-01-22 16:23:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: handle raw sources about-to-finish signals
+	  When we are dealing with a source that produces raw audio/video, we don't use a
+	  decodebin2 to decode the data and we thus don't have the drained/about-to-finish
+	  signal emited. To fix this, we add a padprobe on the source pads and emit the
+	  drained signal ourselves. This then makes playbin2 emit the about-to-finish
+	  signal for raw sources such as cdda://
+	  Fixes #607116
+
+2010-01-22 16:15:54 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: include stdio.h for sscanf
+
+2010-01-22 01:49:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: add PNM typefinder
+	  Add PNM typefinder, so we can remove the one that's in the PNM plugin
+	  in -bad (which btw uses different/wrong media types that don't match
+	  the ones used by gdkpixbufdec) and people don't make fun of us for
+	  loading image decoders when typefinding and playing back audio files.
+
+2010-01-21 19:31:23 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: rename performance category
+	  rename the performance category to ffmpegcolorspace_performance
+	  as there is already a global GST_CAT_PERFORMANCE in core
+
+2010-01-21 17:32:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: keep track of added pads
+	  Keep track of the pads we added and removed.
+	  Remove some unused fields.
+	  Don't add pads for which we don't have caps.
+
+2010-01-21 17:31:13 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: don't call NULL setup functions
+	  If we find a known mapper but it doesn't have a setup function, simply skip it
+	  instead of crashing.
+
+2010-01-21 17:30:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggstream: avoid division by 0 on bad annodex streams
+
+2010-01-21 13:47:01 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for y4m container
+
+2010-01-19 14:31:34 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppayload: ptime/maxptime should be unsigned
+	  https://bugzilla.gnome.org/show_bug.cgi?id=607403
+
+2010-01-18 21:16:32 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppayload: ptime should be in nanoseconds
+	  https://bugzilla.gnome.org/show_bug.cgi?id=607403
+
+2010-01-20 00:53:20 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 14cec89 to 15d47a6
+
+2010-01-19 13:33:06 -0800  David Schleef <ds@schleef.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: rewrite h.264 detection
+	  Make detection simpler: check for NALs, check that they make
+	  sense, and report how certain we are that it's a raw H.264 stream.
+	  Fixes: #583376.
+
+2010-01-18 14:33:30 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppayload: Reject empty caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=607353
+
+2010-01-19 08:39:14 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: No need to subtract begin time
+	  Last stop is already based on the chain start and there is no need
+	  to subtract the chain start as it may lead to a negative overflow.
+	  This was causing seeking issues when the target chain was not
+	  the first one (that has chain start = 0)
+	  Fixes #606382
+
+2010-01-19 09:25:35 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/audio.h:
+	  audio: Use rounding scaling functions for GST_CLOCK_TIME_TO_FRAMES and _FRAMES_TO_CLOCK_TIME
+	  Fixes bug #607381.
+
+2010-01-18 15:22:52 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: granulepos is relative to its chain
+	  When performing seeks, the granulepos should be offset by
+	  its chain start time to avoid using wrong values to
+	  update segment's last_stop. A sample file is indicated on
+	  bug #606382
+
+2010-01-18 17:57:16 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for MXF container format
+
+2010-01-18 10:07:30 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: re-use iterator callback to avoid code duplication
+
+2010-01-18 02:08:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: when looking for sink properties, make sure they have the right type
+	  We don't want to end up setting values on elements where the property is of
+	  a different type than we expect. Can't transform the value either, since we
+	  can't really make assumptions about the scale and transform function.
+	  Fixes crashes when using playbin2 with apexsink (#606949).
+
+2010-01-18 09:30:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Only allow to set the URIs in states <= READY or from an about-to-finish signal handler
+	  Changing the URIs in a state > READY results in unexpected behaviour,
+	  i.e. the new URIs are only used after the current track has finished.
+	  Fixes bug #607226.
+
+2010-01-15 19:52:29 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: sprinkle some more locking
+	  ... to avoid races and ensure some data structure consistency.
+	  See also #574289.
+
+2010-01-14 18:26:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: mind blocked pads when shutting down
+	  Fix regression in shutdown deadlock handling now that the
+	  target of a ghostpad is blocked instead of ghostpad itself.
+	  See also #574293.
+
+2010-01-14 13:36:23 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Fix disabling of subtitles if subtitles were used before
+	  In this case the video still goes through the text chain and
+	  subtitles are still going in there, in case subtitles are
+	  enabled again. This makes sure that re-enabling subtitles
+	  happens instantly.
+	  Fixes hanging video when disabling subtitles, caused by an
+	  unliked video pad.
+
+2010-01-14 10:43:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: fix pad ref leak
+
+2010-01-12 21:42:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* docs/plugins/Makefile.am:
+	  docs: fix out-of-source build
+
+2009-04-29 11:50:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* tests/icles/stress-playbin.c:
+	  stress-playbin: fix error return check
+
+2010-01-14 10:10:23 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/Makefile.am:
+	* ext/theora/gsttheora.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/theora/theora.c:
+	* ext/theora/theoradec.c:
+	* ext/theora/theoraenc.c:
+	* ext/theora/theoraparse.c:
+	  theora: Rename source files to have the same name as the headers
+
+2010-01-14 10:07:22 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/Makefile.am:
+	* ext/vorbis/gstvorbis.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	* ext/vorbis/vorbis.c:
+	* ext/vorbis/vorbisdec.c:
+	* ext/vorbis/vorbisenc.c:
+	* ext/vorbis/vorbisparse.c:
+	* ext/vorbis/vorbistag.c:
+	  vorbis: Rename source files to have the same name as the headers
+
+2010-01-14 10:05:35 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/Makefile.am:
+	* ext/vorbis/gstvorbiscommon.c:
+	* ext/vorbis/gstvorbiscommon.h:
+	* ext/vorbis/vorbisdec.c:
+	* ext/vorbis/vorbisenc.c:
+	  vorbis: Move channel layout definitions into a single separate file
+	  ...instead of having two copies.
+
+2010-01-14 08:19:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/vorbisdec.c:
+	* ext/vorbis/vorbisenc.c:
+	  vorbis: Add official 6.1 and 7.1 channel mappings
+	  These are in the Vorbis spec since 2010-01-13. Fixes bug #606926.
+
+2010-01-13 23:05:45 +0100  Benjamin Otte <otte@redhat.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	  rtsp: Don't define h_error ourselves
+	  It's included from netdb.h and that header might define it differently,
+	  which can lead to build failures.
+
+2010-01-13 17:36:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: mp4 video is not parsed
+
+2010-01-13 12:49:20 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Add aac stream-format to caps
+	  Also add the aac stream-format field on the caps when
+	  detecting it.
+
+2010-01-13 09:39:54 +0100  Brijesh Singh <brijesh.ksingh@gmail.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Fix handling of the native audio/video flags
+	  Fixes bug #606687.
+
+2010-01-12 16:35:50 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix unitialized variable.
+	  If the package isn't handled, gracefully return GST_FLOW_OK.
+
+2010-01-10 23:50:02 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/xoverlay.c:
+	  docs: flesh out GtkXOverlay docs some more and add example for Gtk+ >= 2.18
+	  Explain why the whole bus sync handler mess is needed. Add section about
+	  how to use GstXOverlay in connection with Gtk+ and mention the Gtk+ API
+	  break issue and how to work around it (see #601809).
+
+2010-01-10 21:18:04 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  docs: minor netbuffer documentation fix
+
+2010-01-10 20:41:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: update translated strings
+	  Queue2 moved into core, so remove its strings.
+
+2010-01-08 16:57:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: push headers when activating chains
+	  Keep a list of headers for each stream of a chain. When a chain is activated,
+	  push the headers before pushing the data so that decoders can sync.
+	  Fix seeking in chains, take the chain start time into account when comparing
+	  timestamps.
+	  See #606382
+
+2010-01-07 15:26:57 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/lang-tables.c:
+	* gst-libs/gst/tag/lang-tables.dat:
+	* gst-libs/gst/tag/lang.c:
+	  tag: fix up disting of lang-tables.c more correctly
+	  lang-tables.c is included by lang.c and not really a proper source
+	  file that should be compiled into its own object, so rename it to
+	  lang-tables.dat and put it into EXTRA_DIST instead to ensure it
+	  gets disted.
+
+2010-01-07 13:50:03 +0000  Christian Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-plugins-base.spec.in:
+	  Add missing source file for tagger to Makefile and update spec file
+
+2010-01-06 18:30:57 -0800  Mark Yen <mook@songbirdnest.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff-media: handle 32 bit raw RGB video.
+
+2010-01-06 13:57:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: decide flac header packet by content rather than count
+
+2010-01-06 13:56:26 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: reset header packet count at bos page
+
+2010-01-06 13:39:14 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiopayload: add support for buffer-lists
+
+2010-01-06 11:33:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-base
+
+2010-01-05 17:17:58 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Ignore zero framerate
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606163
+
+2009-12-29 18:45:32 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  basertpaudiopayload: Respect ptime if it is given
+	  If the ptime is given in the caps, respect it and force the minimum
+	  and maximum sizes to be exactly the requested ptime.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606050
+
+2009-12-29 18:36:29 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  rtpbasepayload: Store ptime from caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606050
+
+2009-12-02 19:40:58 +0530  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppayload: Accept maxptime from caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606050
+
+2010-01-05 14:11:06 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: enhance flac packet duration calculation
+
+2010-01-05 10:38:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-base
+
+2010-01-04 09:49:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	* tests/icles/test-colorkey.c:
+	  examples: use Gtk+-2.18 API conditionally
+	  so the seek example and colorkey test work with older Gtk+ versions
+	  as well.
+	  Fixes #605960.
+
+2009-12-29 00:53:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/icles/test-colorkey.c:
+	  tests: fix colorkey test up for Gtk+ >= 2.18
+	  Make test-colorkey work with newer versions of Gtk+.
+	  See #601809.
+
+2009-12-29 00:40:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  examples: make seek example work with Gtk+ >= 2.18
+	  Gtk+ broke API slightly with the introduction of
+	  client-side windows in Gtk+ 2.18. Fix up seek
+	  example to work with newer Gtk+ versions.
+	  Fixes #601809.
+
+2009-12-26 23:29:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/icles/stress-xoverlay.c:
+	  tests: fix warning and memory leak in stress-overlay test
+	  Not all messages have structures and we need to unref messages
+	  when returning GST_BUS_DROP in the sync bus handler.
+
+2009-12-26 18:46:50 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: correctly eat empty and dummy buffers
+
+2009-12-24 19:56:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: be a lot smarter with buffer management
+	  Detect EOS faster.
+	  Try to reuse one of the input buffer as the output buffer. This usually works
+	  and avoids an allocation and a memcpy.
+	  Be smarter with GAP buffers so that they don't get mixed or cleared at all. Also
+	  try to use a GAP buffer as the output buffer when all input buffers are GAP
+	  buffers.
+
+2009-12-24 16:30:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/Makefile.am:
+	* gst/adder/gstadder.c:
+	* tests/check/elements/adder.c:
+	  adder: use collectpads clipping function
+	  Install a clipping function in the collectpads and use the audio clipping helper
+	  function to perform clipping to the segment boundaries.
+	  Fixes #590265
+
+2009-12-24 13:58:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: fix juvenile comment
+
+2009-12-23 21:24:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix typo in debug message
+
+2009-12-23 18:18:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: avoid some type checks
+
+2009-12-23 17:08:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: avoid leaking selector request pads
+
+2009-12-23 15:46:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: avoid leaking queue and typefind
+	  Don't leak the queue and typefind elements that we might link after the
+	  source element.
+
+2009-12-23 15:43:52 +0100  Jonathan Matthew <jonathan@d14n.org>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: don't name the queue
+	  There is no reason to name the queue.
+	  Fixes #605219
+
+2009-12-23 15:30:50 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtp.def:
+	  defs: update defs with new symbols
+
+2009-12-22 20:15:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  rtcpbuffer: add helper functions for SDES types
+	  Add functions to convert SDES names to their types and back. Will be used later
+	  to set SDES items using a GstStructure.
+	  See #595265
+
+2009-12-21 19:12:02 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 47cb23a to 14cec89
+
+2009-12-21 18:45:58 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: add Since marker for the new tolerance property
+
+2009-12-21 07:57:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/lang.c:
+	  docs: use 'Returns: xyz' rather than 'Returns xyz' to make gtk-doc happy
+
+2009-12-21 07:50:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	  tests: don't use deprecated GLib API g_mapped_file_free
+	  Fixes #605100.
+
+2009-12-20 17:34:46 -0800  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theoraenc: Add encoder controls for libtheora 1.1
+	  Added drop-frames, cap-overflow, cap-underflow, and rate-buffer.
+
+2009-12-19 21:40:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: increase default drift tolerance to fix glitches with WMA
+	  Increase default drift tolerance to 40ms to avoid glitches with decoders
+	  or formats where there's a lot of timestamp jitter for some reason or
+	  another (in this case: asf/wma), at least until we implement timestamp
+	  smoothing.
+
+2009-12-16 11:43:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: add some debugging
+
+2009-12-15 18:41:38 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiorate/gstaudiorate.h:
+	  audiorate: add a tolerance property
+	  It may not be uncommon for the input timestamps to experience some jitter
+	  around the 'perfect time'.  As such, instead of regularly adding and dropping
+	  samples, optionally allow for some tolerance in a more relaxed approach.
+	  API: GstAudioRate:tolerance
+
+2009-12-15 19:50:56 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: add documentation
+
+2009-12-15 16:52:44 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/Makefile.am:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audiorate/gstaudiorate.h:
+	  audiorate: use separate header file
+
+2009-12-14 21:17:57 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: set DISCONT when resyncing (e.g. newsegment)
+
+2009-12-14 18:47:27 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: also fill up segments if possible
+
+2009-12-15 19:29:29 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: fix segment handling
+	  Do not compare a media (buffer) time to a (bogus) running time
+	  (or their offset equivalents).
+
+2009-12-15 19:22:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: properly report truncated samples as dropped samples
+
+2009-12-13 18:43:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/lang.c:
+	  docs: mention that gst_tag_get_language_name() may return NULL
+
+2009-12-13 18:42:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/libs/tag.c:
+	  checks: some more testing for the new language code functions
+
+2009-12-12 18:58:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/mixer.c:
+	* gst-libs/gst/interfaces/mixeroptions.c:
+	* gst-libs/gst/interfaces/mixertrack.c:
+	  docs: misc. mixer docs improvements
+
+2009-12-12 18:16:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	  docs: add short descriptions for API reference contents page
+
+2009-12-12 17:43:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/lang-tables.c:
+	* gst-libs/gst/tag/mklangtables.c:
+	  tag: make internal language names table static
+
+2009-12-12 17:41:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/lang.c:
+	* gst-libs/gst/tag/mklangtables.c:
+	  tag: don't use GLib 2.22 API
+	  g_mapped_file_unref() was introduced in GLib 2.22, but we depend
+	  only on GLib 2.18, so use g_mapped_file_free() when compiling
+	  against older GLib versions until we bump the GLib dependency.
+
+2009-12-11 23:59:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	* configure.ac:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/tag/lang-tables.c:
+	* gst-libs/gst/tag/lang.c:
+	* gst-libs/gst/tag/mklangtables.c:
+	* gst-libs/gst/tag/tag.h:
+	* tests/check/libs/tag.c:
+	* win32/common/libgsttag.def:
+	  tag: add some utility functions for language codes and tags
+	  Add some utility functions for language tags and ISO-639
+	  codes. These are useful for both GUIs and elements. The
+	  iso-codes package is used for language name translations
+	  if available.
+	  API: gst_tag_get_language_codes()
+	  API: gst_tag_get_language_name()
+	  API: gst_tag_get_language_code()
+	  API: gst_tag_get_language_code_iso_639_1()
+	  API: gst_tag_get_language_code_iso_639_2B()
+	  API: gst_tag_get_language_code_iso_639_2T()
+
+2009-12-11 12:02:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: ogm video has constant packet duration
+
+2009-12-10 22:47:53 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: implement old fLaC mapping
+
+2009-12-10 17:53:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gsttcpclientsrc.c:
+	  tcpclientsrc: unset flushing state too
+	  When unlocking, we set the flushing state on the fdset. Implement unlock_stop so
+	  that we can use it to unset the flushing state again.
+	  Fixes #577326
+
+2009-12-10 16:09:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: remove redundant fields
+
+2009-12-09 19:03:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: adapt to new oggdemux
+	  Remove all granulepos hacks and simply use the timestamps from the new oggdemux
+	  like any other decoder.
+
+2009-12-09 19:04:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: fix peer query
+
+2009-12-09 17:24:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: fix query
+
+2009-12-09 16:55:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: small cleanups
+
+2009-12-09 16:38:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: use gst_pad_peer_query()
+
+2009-12-09 12:10:35 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: fix video when subtitles disabled
+	  When we have a source with subtitles but they were disabled with the flags,
+	  still ghostpad the video pad instead of leaving it unlinked.
+
+2009-12-09 09:47:30 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Only flush downstream on seeks for flushing seeks
+
+2009-12-09 09:35:14 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Proxy buffer allocation on the video sinkpad to the srcpad
+
+2009-12-08 17:30:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: update slider only 25 times a second
+	  don't update the slider a 100 times a second, it's likely higher than the screen
+	  framerate and just wastes cpu.
+
+2009-12-08 17:23:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/theoradec.c:
+	  theora: remove granulepos hacks
+	  Remove the granulepos hacking now that oggdemux outputs timestamps like any
+	  other demuxer.
+
+2009-12-08 13:40:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Fix stream-changed message list iteration
+	  When iterating the list and removing the current element, first
+	  get the next element and then remove the current one and not
+	  the other way around.
+
+2009-12-07 18:49:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: improve keyframe seeking
+	  Improve keyframe seeking.
+	  Fix reverse playback.
+
+2009-12-07 15:42:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: implement keyframe seeking
+	  Implement keyframe seeking in oggdemux by doing the double seek trick. First
+	  seek to the required position, then read pages for all streams to grab the
+	  granulepos (to know the timing of the keyframe) of each stream, then seek back
+	  to the first keyframe.
+
+2009-12-07 09:13:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Some minor cleanup
+
+2009-12-06 18:05:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Reset stream segments on FLUSH_STOP and don't adjust QoS events for non-time segments
+
+2009-12-04 16:35:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix timestamps after seek
+	  After a seek, discard all packets before the packet with the granulepos on it so
+	  that the output buffers contain valid timestamps.
+	  Reorder some code so that we check the timestamps before allocating and pushing
+	  an output buffer.
+	  Do more checks on valid packets in ogm mode.
+
+2009-12-04 15:39:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: add comment
+
+2009-12-04 14:01:11 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't do math with invalid granulepos
+	  When the current granulepos is unknown and set to -1, don't try to add durations
+	  to it.
+
+2009-12-04 13:14:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: guard against wrong granulepos
+	  Clamp the initial granulepos to 0 instead of going negative for some badly muxed
+	  ogg files.
+
+2009-12-04 12:26:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: don't fail on bogus granulepos
+	  Do some additional checks on the granulpos timestamp before using it for
+	  calculating the duration because oggdemux generates wrong granulepos now.
+	  Fixes seeking somewhat again.
+
+2009-12-03 20:05:29 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: reimplement OGM support
+	  OGM demuxing no longer requires helper elements.  It's done internally
+	  in oggdemux.  Vorbis comments are still not handled because I don't
+	  have anything to test with.
+
+2009-12-03 17:02:11 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: fix for I-frame-only theora
+
+2009-12-03 01:16:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: log when ogg mapper doesn't accept the setup header packet
+
+2009-12-02 02:08:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: extract width, height and PAR from theora header and add to caps
+
+2009-12-03 23:43:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggstream.c:
+	  ogg: extract number of channels from FLAC, speex and vorbis headers
+	  Because we can.
+
+2009-12-03 22:14:34 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	  build: fix build with debug logging disabled.
+
+2009-12-03 21:07:49 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: more print fixes
+	  gstoggstream.c:419: error: format ‘%lld’ expects type ‘long long int’, but argument 8 has type ‘gint64’
+	  gstoggdemux.c:2253: error: format ‘%lld’ expects type ‘long long int’, but argument 8 has type ‘GstClockTime’
+	  gstoggdemux.c:2333: error: format ‘%lld’ expects type ‘long long int’, but argument 8 has type ‘GstClockTime’
+
+2009-12-03 16:57:48 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.c:
+	  ogg: Fixing some printf format strings
+	  Fixes some printf format strings to make it build on mac.
+
+2009-12-03 18:08:49 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstfactorylists.c:
+	* gst/playback/gstfactorylists.h:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: don't iterate the factory lists in non-debug mode
+	  When debugging is disabled, we won't see anything printed anyway.
+
+2009-12-02 23:55:55 -0800  David Schleef <ds@schleef.org>
+
+	* gst/videoscale/vs_4tap.c:
+	  Build fix for MSVC
+
+2009-12-02 23:27:55 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/subparse/qttextparse.c:
+	  build: add missing includes for sprintf and atoi
+
+2009-12-01 16:42:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/qttextparse.c:
+	  subparse: Add support for some tags of qttext
+	  Currently supporting timescale, timestamps, font, size,
+	  textColor, backColor, plain, bold and italic
+	  Fixes #603357
+
+2009-12-01 13:13:24 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/subparse/Makefile.am:
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	* gst/subparse/qttextparse.c:
+	* gst/subparse/qttextparse.h:
+	  subparse: add qttext support
+	  Adds basic support for qttext subtitles, still lacks markup tags
+	  to make it prettier, but the plain text already works.
+	  Implemented according to:
+	  http://www.apple.com/quicktime/tutorials/texttracks.html
+	  http://www.apple.com/quicktime/tutorials/textdescriptors.html
+	  Fixes #603357
+
+2009-12-01 13:22:57 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: conditionally cleanup sami context
+	  Only cleanup sami context if we are parsing sami subtitles,
+	  otherwise we might have crashes.
+
+2009-12-01 13:19:35 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Add missing caps to sink caps template
+	  Some caps were missing from the sink caps template when
+	  xml was disabled
+
+2009-12-01 15:06:10 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 87bf428 to 47cb23a
+
+2009-12-01 14:14:25 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From da4c75c to 87bf428
+
+2009-11-30 10:22:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Fix some pad refcount issues
+	  Fixes bug #603345.
+
+2009-11-27 18:54:57 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 53a2485 to da4c75c
+
+2009-11-25 17:04:41 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: handle theora streams with 0 keyoffset
+
+2009-11-25 16:53:26 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Handle unknown streams
+
+2009-11-26 14:30:33 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  Revert "textoverlay: First draw outline text and then the real text"
+	  This reverts commit 60aa09d28c1f9fd29b56876d7ac6c0366d6cef4d.
+	  First drawing the real text and then the outline produces ugly
+	  text in lower resolutions. The outline line width needs to be somehow
+	  changed relative to the resolution. Fixes bug #602924.
+
+2009-11-26 10:30:25 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: Use G_DEFINE_ABSTRACT_TYPE_WITH_CODE
+	  ...and fix code style a bit.
+
+2009-11-26 10:31:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	  audiofilter: Add _CAST variants of the cast macros
+
+2009-11-25 10:26:16 -0600  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: add adjustement when slaving
+	  Our calibration against the pipeline clock is done with the adjusted
+	  ringbuffer time, so take the adjustement into account. Fixes some audio dropouts
+	  when reusing audio sinks after switching clocks and slaving methods in a
+	  pipeline.
+
+2009-11-25 16:17:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Prefer transforming alpha formats to alpha formats and the other way around
+	  Fixes bug #602834 and #350748.
+
+2009-11-25 00:46:55 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Reset last_granule during seeking
+	  Fix case where we would reconstruct the wrong granulepos for
+	  outgoing streams immediately after a seek.
+
+2009-11-24 22:08:09 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: Fix timestamp generation for theora
+	  Timestamp generation was broken by the last commit for formats
+	  with a non-zero granule shift.  Also keep track of the last keyframe
+	  so that we can regenerate granulepos for theora.
+
+2009-11-24 21:22:03 -0800  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	* ext/ogg/vorbis_parse.c:
+	  oggdemux: Fix vorbis parsing
+	  Add a granule to granulepos conversion function.  Fix the duration
+	  function for vorbis.  Handle timestamps on header packets differently
+	  and be more careful about calculating OFFSET and OFFSET_END.  After
+	  this change, timestamps for vorbis don't exactly match up with the
+	  timestamps that vorbisparse outputs, but it's unclear if vorbisparse
+	  is actually correct and it would add a lot more code to make oggdemux
+	  match vorbisparse.  Fixes #602790.
+
+2009-11-19 19:28:12 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Transform QoS events to be meaningful for upstream elements
+	  This is necessary because the sinks don't notice the group switches
+	  and the decoders/demuxers have a different running time than the
+	  sinks.
+	  Fixes bug #537050.
+
+2009-11-21 22:05:34 +0100  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  ogg: Fix generation of timestamps and durations
+	  After changing some internal functions, I forgot to update
+	  the code that puts the values on the buffers.
+
+2009-08-29 10:51:48 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/Makefile.am:
+	* ext/ogg/dirac_parse.c:
+	* ext/ogg/dirac_parse.h:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	* ext/ogg/gstoggparse.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	* ext/ogg/vorbis_parse.c:
+	  ogg: Add ogg stream parsing
+	  Adds code that parses headers of various formats encapsulated in
+	  Ogg in order to calculate timestamps and durations of each buffer.
+	  Removes the creation of helper decoder elements to do this calculation
+	  via conversion queries.
+	  Fixes: #344013, #568014.
+
+2009-09-04 00:11:38 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: don't overwrite object properties
+
+2009-11-21 17:54:49 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/theora/theoradec.c:
+	  debug: also cast packet.packetno to gint64 in debug log
+	  We do this already for granulepos to handle ogg_int64_t mismatches.
+
+2009-11-21 17:47:26 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  debug: fix format string that was missing a var
+
+2009-10-10 00:32:04 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	* tests/check/elements/adder.c:
+	  adder: make events succeed, if they succed on atleast one pad
+
+2009-11-19 14:51:33 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: error when all streams have no buffers
+	  In some cases (all buffers dropped by a parser) a decodebin2
+	  chain might receive an EOS before it gets enough data to
+	  expose a decoded pad. In the case that no streams can expose
+	  a pad we should error out instead of hang.
+	  Fixes #542758
+
+2009-11-19 12:23:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Fix stupid bug introduced in last commit
+
+2009-11-19 12:10:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Aggregate the stream-changed message by looking at the seqnum
+	  Just counting how many messages were sent and how many were received
+	  is not good enough because they might've been duplicated (e.g. by the
+	  visualization audio tee). Comparing the sequence numbers should give
+	  better results in that case.
+
+2009-11-19 10:05:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Ignore async state changes of the uridecodebins
+	  Otherwise the async state change from READY->PAUSED of the
+	  uridecodebins will take playbin2 from PLAYING->PAUSED again
+	  during gapless group switches.
+	  Fixes bug #602000.
+
+2009-11-19 10:30:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 0702fe1 to 53a2485
+
+2009-11-18 14:50:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: set to buffer less on no-more-pads
+	  When a decodebin2 receives no-more-pads of a group it
+	  can set that group's multiqueue buffering thresholds to
+	  'playing' buffering method, avoiding that it buffers
+	  too long and cause problems when using with queue2.
+	  See the associated bug for details.
+	  Fixes #600787
+
+2009-11-18 17:09:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: fix initial calibration
+	  When we are calibrating the internal clock against the external clock take into
+	  account the time offset applied to our internal clock because we will subtract
+	  that in the render_function again.
+
+2009-11-18 09:22:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't handle DURATION queries during group switches
+	  During a group switch return the cached duration of the old group
+	  because the old group still didn't finish playback. If we have no
+	  cached duration return FALSE.
+	  Fixes bug #585969.
+
+2009-11-15 19:36:21 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Post a stream-changed message after activating a group
+	  This is useful to detect when playbin2 has really switched to the next
+	  group after about-to-finish for example.
+	  Fixes bug #584987.
+
+2009-11-18 12:27:19 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/libgstvideo.def:
+	  win32: Add new still-frame API to the defs
+	  Add gst_video_event_new_still_frame() and
+	  gst_video_event_parse_still_frame() functions to the win32 defs files
+
+2009-11-18 12:37:44 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: fix 'uninitialized' compiler warning
+
+2009-11-18 10:14:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump core requirement to 0.10.25.1
+	  We depend on new API that's only in git so far.
+
+2009-11-15 17:34:37 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	  video: Add functions to create/parse still frame events.
+	  Add a new video event to mark the start or end of a still-frame
+	  sequence, and a parser function to identify and extract info from
+	  such events.
+	  API: gst_video_event_new_still_frame()
+	  API: gst_video_event_parse_still_frame()
+	  Fixes: #601942
+
+2009-11-17 16:39:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: make sure we always go to PAUSED async
+	  Set the need_async_start flag before going to PAUSED so that we always post the
+	  ASYNC_START message, even after reusing playsink.
+
+2009-11-17 16:37:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: make sure we remain a sink
+	  When we remove our elements, we could lose our sink flag. Make sure we remain a
+	  sink by setting the flag again after removing elements.
+
+2009-11-16 22:47:54 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: remove unused array
+
+2009-11-16 09:57:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Use new double->fraction transformation function from core
+
+2009-11-14 14:05:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Make subtitle error handling more robust and ignore late errors too
+	  Make sure, to only "simulate" subtitle no-more-pads if it was still
+	  pending and also handle errors in the subtitle pipeline as warnings
+	  after the subtitles prerolled.
+	  Don't set the suburidecodebin to READY after errors, handle_message
+	  will usually be called from the streaming thread and doing that
+	  from there is obviously not a good idea.
+
+2009-11-14 13:21:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Handle errors from subtitle elements as warning and go into passthrough mode
+
+2009-11-13 12:47:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't leak the GError and debug string when parsing error messages
+
+2009-11-13 11:16:44 +0100  Sreerenj B <bsreerenj@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: avoid crashing on SIGPIPE
+	  Use send() instead of write() so that we can pass the MSG_NOSIGNAL flags to
+	  avoid crashing with SIGPIPE when the remote end is not listening to us anymore.
+	  Fixes #601772
+
+2009-11-11 17:35:45 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Improve subtitle passthrough in uridecodebin
+	  Now the caps property isn't set anymore for the subtitle caps
+	  but instead in the autoplug-continue signal it is detected
+	  if the caps belong to a supported subtitle stream.
+	  This makes automatic use of newly installed plugins.
+
+2009-11-11 17:08:47 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Only recreate factory caps if necessary and cache them
+
+2009-11-10 18:27:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Only update the factory list when the registry has changed
+	  Also don't free the list every time we go to NULL.
+
+2009-11-08 15:04:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: Use gst_pad_get_caps_reffed()
+
+2009-11-07 21:38:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	  playbin2/playsink: Use new "silent" property instead of unlinking
+	  This makes sure that subtitleoverlay still gets segment updates and
+	  everything to pass on downstream. Without this segment problems happen.
+
+2009-11-07 21:10:27 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Update segments after pushing the events downstream
+	  This makes sure that we don't apply segments twice downstream. Also
+	  always send our newsegment events downstream.
+
+2009-11-07 21:09:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Add silent property to disable subtitles
+	  This tries to disable subtitles in the overlay or renderer
+	  and if that's not possible it goes into passthrough mode.
+
+2009-11-07 11:46:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Set the video framerate on parsers if possible
+	  Fixes bug #599649.
+
+2009-11-07 11:31:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	  subparse: Make fps a GstFraction typed property and use it properly
+
+2009-11-07 11:08:19 +0100  Iago Toral <itoral@igalia.com>
+
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	  subparse: Add property for the video framerate
+
+2009-11-06 12:51:22 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Handle external subtitles better
+	  First of all, make sure that suburidecodebin never
+	  errors out because of not-linked in case external subtitles
+	  are used but then subtitles are disabled.
+	  And then make sure that external subtitles always start from
+	  the correct position and are not racing until EOS if they
+	  get unselected and selected again.
+
+2009-11-04 17:29:07 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Flush the subtitles before switching to a new subtitle stream
+	  This makes sure that all currently shown subtitles disappear
+	  and new ones can be shown as soon as possible.
+
+2009-11-03 12:47:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Set subtitle caps as raw caps for the uridecodebins
+	  This will make sure that no subparse is ever plugged and subtitleoverlay,
+	  that subpicture streams are handled the same was as subtitles and that
+	  subtitle renderers are used if available.
+	  Fixes bugs #595123, #570753, #591662, #591706.
+
+2009-11-03 12:33:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2/playsink: Remove everything related to subpicture streams
+	  These will soon be handled the same way as subtitle streams.
+
+2009-11-02 15:50:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Add a queue before subtitleoverlay
+	  This will improve playback, and the same thing is done
+	  for subpicture streams too.
+
+2009-11-02 15:05:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Use subtitleoverlay for subtitles
+
+2009-11-02 07:43:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  subtitleoverlay: Add to the docs
+
+2009-10-13 16:48:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplayback.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gstsubtitleoverlay.h:
+	  subtitleoverlay: Add new element for generic subtitle overlaying
+	  This autopluggs the required elements for parsing and rendering
+	  different subtitle formats on a video stream.
+	  Fixes bug #600370.
+
+2009-11-11 19:32:01 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: Keep timestamp from incoming buffer if it is valid
+	  Fixes bug #601627.
+
+2009-11-11 14:00:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: Update factories list on every access if the registry has changed
+	  This makes application's simpler because the element doesn't need to
+	  go to NULL first to make use of newly installed plugins.
+	  Fixes bug #601480.
+
+2009-11-10 18:13:25 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playback: When going from NULL->READY check if the registry has new features
+	  This makes it possible to use newly installed plugins after going back
+	  to NULL instead of requiring a new instance.
+	  Fixes bug #599266.
+
+2009-11-10 13:55:26 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Clear the EOS state on a seek.
+	  Allow seeking back into the stream after it hits EOS.
+
+2009-11-10 12:21:50 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/README:
+	* gst/audioresample/arch.h:
+	* gst/audioresample/fixed_arm4.h:
+	* gst/audioresample/fixed_arm5e.h:
+	* gst/audioresample/fixed_bfin.h:
+	* gst/audioresample/fixed_debug.h:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/resample_sse.h:
+	* gst/audioresample/speex_resampler.h:
+	  audioresample: Update speex resampler to latest GIT
+
+2009-11-10 00:48:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: assign chain->mute before using it
+	  Fixes GObject warnings when starting totem.
+
+2009-10-28 22:10:33 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/theoradec.c:
+	  theora: Fix alignment of frames when converting
+	  Fix logic inversion in calculating the offset in the theora
+	  frame when copying to a GStreamer frame.
+
+2009-11-09 19:58:20 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstfactorylists.c:
+	  playback: Fix the order in strcmp that I broke in previous commit.
+
+2009-11-09 19:16:21 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Reduce number of calls to gst_type_find_peek.
+	  Shaves off a couple percents off typefinding
+
+2009-11-09 17:49:51 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstfactorylists.c:
+	  playback: Avoid expensive API calls in tight loop.
+	  We know we're dealing with GstPluginFeature.
+
+2009-11-09 18:11:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/cddabasesrc.c:
+	  cddabasesrc: Add unit test for property settings
+	  Also includes a regression test for bug #601104.
+
+2009-11-09 18:04:23 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  cddabasesrc: Never return a negative track number in get_uri()
+
+2009-11-09 18:03:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  cddabasesrc: Don't set the track to 1 every time a device is set
+	  Fixes bug #601104.
+
+2009-11-08 11:27:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: Remove useless variables and fix a uninitialized variable compiler warnings
+
+2009-11-06 17:01:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Add property to disable/enable posting of stream-topology messages
+	  Most people don't need this messages and generating them is quite
+	  expensive.
+
+2009-11-06 15:12:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Protect subtitle elements and subtitle encoding by a new mutex
+	  Using the object lock here can and will lead to deadlocks because
+	  of deep-notifies of property changes: the deep-notify handler will
+	  get the parent of objects, which will take the object lock again.
+	  Fixes bug #600479.
+
+2009-11-06 13:13:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: Make sure that running_time->timestamp calculation never becomes negative
+
+2009-11-06 13:25:05 +0200  Mart Raudsepp <leio@gentoo.org>
+
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	  examples: Correct casting of g_signal* funcs first arguments
+	  This completes the deprecated GTK API fix in commits 81a0a986 and
+	  79adfa54 - unlike gtk_signal_connect and co, g_signal_connect and
+	  co take a gpointer, not a GtkObject.
+
+2009-11-06 12:25:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Improve all-raw-caps detection for pads
+
+2009-11-06 12:19:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  basesrc: fix startup position in the ringbuffer
+	  When we start and we need to produce the first sample, go to the next sample
+	  that will be written into the ringbuffer instead of trying to go to sample 0.
+	  We relied on rather small ringbuffer sizes to correctly go to the current
+	  sample, which breaks whith large buffers.
+	  Fixes #600945
+
+2009-11-06 11:26:14 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: Use the start time (i.e. timestamp) as the last stop
+	  Using the end time makes it impossible to replace buffers, which is
+	  a big problem for subtitles that could have very long durations.
+
+2009-11-06 12:08:19 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Synchronize video/text based on the running time
+	  Instead of simply using the buffer timestamps.
+
+2009-11-06 09:30:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Clip text buffers to the text segment and reset segments properly
+
+2009-11-06 09:01:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: Put the video segment into the instance struct instead of allocating it separately
+
+2009-11-06 09:05:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Check if text timestamp/duration is valid before clipping
+
+2009-11-05 23:33:42 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: printf format fix
+
+2009-11-05 15:42:09 +0100  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst/gdp/gstgdpdepay.c:
+	  gdpdepay: Clear adapter on flush and state change
+	  Fixes #600469
+
+2009-11-05 13:12:19 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: use _get_caps_reffed()
+
+2009-11-05 13:00:27 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  pad: rename new api from _refed to _reffed.
+	  Due to popular demand rename the new api as we still can.
+
+2009-11-04 18:57:07 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playbin2: avoid copying caps
+	  Use get_caps_refed() when we can.
+
+2009-11-04 18:31:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: use new getcaps function to avoid copies
+	  Use the gst_pad_get_caps_refed() to avoid some caps copy functions.
+
+2009-11-04 17:50:11 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: use faster element_link_pads
+	  Use the faster gst_element_link_pads because we know for sure the sinkpad name
+	  and we don't need to have the function search for a suitable pad anymore.
+
+2009-11-04 16:16:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: make drift tolerance configurable
+	  Add drift-tolerance property (defaulting to 20ms) to handle resync after clock
+	  drift or timestamp drift instead of relying on the latency-time value for clock
+	  drift and 500ms for timestamp drift.
+	  Remove warning about discont timestamp and simply resync. The warning is in some
+	  cases not correct and is triggered more frequently now that we lower the
+	  tolerance value.
+
+2009-11-04 10:52:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Return NOT_LINKED for unselected text pads from a demuxer
+	  We want to return NOT_LINKED for unselected pads but only for pads
+	  from the normal uridecodebin. This makes sure that subtitle streams
+	  are not raced past audio/video from decodebin2's multiqueue.
+	  For pads from suburidecodebin OK should always be returned, otherwise
+	  it will most likely stop with an error.
+
+2009-11-04 08:20:59 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: also add inline to the proto to fix the build
+	  Merged from gst-plugins-bad, e1e9be6dbe1bd0df0543f2a72dcf9cc6d644dd78.
+
+2009-11-03 12:01:16 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Initialize caps property with the default raw caps
+
+2009-11-03 11:48:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstrawcaps.h:
+	  decodebin2: Use static caps for the default raw caps and put them into a separate header
+	  This way we can use the same default raw caps everywhere.
+
+2009-11-03 08:26:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: First draw outline text and then the real text
+	  Improves the output a bit because no parts of the outline are
+	  overwritten again.
+
+2009-10-31 14:02:40 +0100  Josep Torra Valles <n770galaxy@gmail.com>
+
+	* gst/playback/gstplaybin.c:
+	  playbin: Make sure to keep a reference on the volume element
+	  Fixes null pointer dereferences under certain circumstances.
+	  Fixes bug #595401.
+
+2009-10-31 09:47:54 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* po/POTFILES.in:
+	  po: queue2 has moved to core
+
+2009-10-30 09:24:30 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Reset {mute,volume}-changed flags after setting the volume
+	  These flags are there to make sure that the volume is set, if there
+	  is no volume element yet.
+
+2009-10-30 09:24:03 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: If notify::{volume,mute} is triggered by the volume element, update our internal state
+
+2009-10-29 14:30:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Proxy notify::volume and notify::mute from the volume/mute elements (or sinks)
+	  Fixes bug #600027.
+
+2009-10-29 14:19:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Proxy notify::volume and notify::mute from the playsink to playbin2
+
+2009-10-29 11:37:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/plugins/inspect/plugin-queue2.xml:
+	  queue2: Remove inspect file
+
+2009-10-29 11:29:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstqueue2.c:
+	  queue2: Remove from gst-plugins-base
+	  This is now in coreplugins.
+
+2009-10-28 11:29:36 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	  docs: include more indexes
+
+2009-10-28 11:13:20 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	  docs: turn entities into xi:includes
+	  This is faster to process and easier to maintain. Its also less 80s.
+
+2009-10-28 10:17:43 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: dump packets which we reject
+
+2009-10-28 01:01:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/.gitignore:
+	  .gitignore: ignore basetime unit test binary
+
+2009-10-28 00:59:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst/adder/gstadder.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstqueue2.c:
+	* gst/playback/gststreaminfo.c:
+	* gst/playback/gststreamselector.c:
+	* gst/subparse/gstssaparse.c:
+	  Remove GST_DEBUG_FUNCPTR where they're pointless
+	  There's not much point in using GST_DEBUG_FUNCPTR with GObject
+	  virtual functions such as get_property, set_propery, finalize and
+	  dispose, since they'll never be used by anyone anyway. Saves a
+	  few bytes and possibly a sixteenth of a polar bear.
+
+2009-10-27 15:23:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstqueue2.c:
+	  queue2: add custom acceptcaps function
+
+2009-10-27 15:22:22 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: implement low/high watermark property
+
+2009-10-23 14:56:11 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: add checkbox to enable buffering
+
+2009-10-23 14:54:47 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: don't use 2 buffering elements
+	  Only use the multiqueue buffering when we don't have a stream (and thus are
+	  using queue2 to do the buffering already).
+
+2009-10-23 14:34:42 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplay-enum.c:
+	* gst/playback/gstplay-enum.h:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: add flag to enable decodebin buffering
+	  Add a flag that enables buffering in decodebin.
+
+2009-10-23 14:32:29 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: buffering is implemented now
+
+2009-10-23 14:30:52 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: buffering is implemented now
+
+2009-10-23 14:09:17 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: configure use-buffering on multiqueue
+
+2009-10-23 13:58:25 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: use 0 for max buffer size
+
+2009-10-23 13:53:21 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: set some reasonable defaults
+
+2009-10-23 13:44:12 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: set buffering properties on decodebin2
+	  Propagate the buffering properties on decodebin2 but only if we are not already
+	  doing download buffering.
+
+2009-10-23 11:52:09 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add use-buffering property
+	  Add a use-buffering property that will perform buffering on the parsed or
+	  demuxed media.
+
+2009-10-23 11:31:47 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: refactor queue size configuration.
+	  Refactor the queue size configuration into a new method.
+	  Use the same queue values for buffering as for preroll.
+
+2009-10-23 11:08:50 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: move error path down
+
+2009-10-23 11:02:40 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: implement max queue size properties
+
+2009-10-23 10:42:23 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: add properties for buffering
+	  Add properties that can be used to configure the multiqueue buffers and
+	  buffering methods
+
+2009-10-24 13:19:08 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/examples/app/Makefile.am:
+	* tests/examples/seek/Makefile.am:
+	* tests/examples/v4l/Makefile.am:
+	  examples: fix linking order.
+	  the uninstalled wrapper would create a LD_LIBRARY_PATH with system-wide
+	  path before the local ones... resulting in the example applications picking
+	  up the system-wide libraries and not the (potentially modified) uninstalled
+	  libraries
+
+2009-10-24 13:08:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't destroy the suburidecodebin on errors
+	  It can still be reused
+
+2009-10-24 13:07:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: If setting the state of the suburidecodebin fails just warn, don't error out
+
+2009-10-24 12:12:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't set uridecodebin states to NULL before reusing them
+	  This makes sure that the internal decodebin2 and everything else can
+	  be reused without reinstantiation.
+
+2009-10-18 17:28:22 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Store unused decodebin2 instances for further usage.
+	  This allows faster re-use of uridecodebin.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=599471
+
+2009-10-23 17:49:15 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoraparse.h:
+	* ext/theora/theoraparse.c:
+	  theora: Convert theoraparse to libtheora 1.0 API
+
+2009-10-21 12:38:59 +0300  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  rtpaudiopayload: Only sent exact multiple of the frame size
+	  Also align the maximum size with the frame size, not only the minimum
+
+2009-10-22 09:12:03 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: move debug calculation into debug macro
+	  Remove in_duration and move its calculation to
+	  GST_LOG_OBJECT macro. This way it will only be calculated
+	  if we have debug enabled.
+
+2009-10-22 09:06:02 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: Removing unused variable
+	  The in_stop variable was never read. Removing it.
+
+2009-10-22 08:40:01 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: be more accurate on offset math
+	  Replace gst_util_uint64_scale_int for its rounding version
+	  to improve accuracy and avoid inserting samples where
+	  they aren't needed.
+	  Fixes #499181
+
+2009-10-22 10:17:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Optimize a bit more
+	  ...and add a FIXME for bug #598695 and explain
+	  what we should do once Pango supports user fonts.
+
+2009-10-22 10:02:11 +0200  Iago Toral <itoral@igalia.com>
+
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	* tests/check/elements/subparse.c:
+	  subparse: Add support for DKS subtitle format
+	  Fixes bug #598936.
+
+2009-10-22 09:31:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Do shading as first operation
+
+2009-10-22 09:08:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Only use a single cairo surface for drawing
+	  ... and comment/optimize what is going on here a bit better.
+
+2009-10-21 16:24:29 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: set output caps before pushing
+	  Set the output caps on the srcpad before pushing the buffer because else core
+	  will do a rather expensive check to see if we can actually accept those caps on
+	  the srcpad.
+
+2009-10-21 15:58:11 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	  inputselector: install an acceptcaps function
+	  Install a custom acceptcaps function instead of using the default expensive
+	  check. We accept whatever downstream accepts so we pass along the acceptcaps
+	  call to the downstream peer.
+
+2009-10-21 20:35:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: fix typo in previous mxf typefinder change
+
+2009-10-21 20:44:33 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: speed up mxf_type_find over 300 times for worst case scenarios
+	  * memcmp is expensive and was being abused, reduce calling it by checking
+	  the first byte.
+	  * iterating one byte at at time over 64 kbites introduces a certain overhead,
+	  therefore we now do it in chunks of 1024 bytes
+	  And I do mean over 300 times. The average instruction call per mxf_type_find
+	  was previously 785685 and it's now down to 2458 :)
+
+2009-10-20 17:13:39 -0400  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstfactorylists.c:
+	  decodebin2: avoid type checks
+
+2009-10-20 09:00:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  gst/decodebin2: Ensure we get fixed caps for topology message
+	  There are some corner cases (like with dvdemux amongst others) where
+	  the caps won't be negotiated, but the pad has fixed caps.
+
+2009-10-20 08:52:36 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  gst/decodebin2: Don't expose chains if we're shutting down.
+	  This avoids adding flushing pads to ourself
+
+2009-10-17 21:16:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* ext/pango/gsttextoverlay.c:
+	  pango: bump pango requirement to stable version and remove ifdefs
+	  Bump pango requirement from an ancient development version to an
+	  ancient stable version.
+
+2009-10-17 21:11:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/.gitignore:
+	  .gitignore: update after files got renamed
+
+2009-10-16 10:54:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppayload: small comment fix
+
+2009-10-16 10:50:35 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtp: Correct timestamping of buffers when buffer_lists are used
+	  The timestamping of buffers when buffer_lists are used failed if
+	  a buffer did not have both a timestamp and an offset.
+
+2009-10-16 10:56:56 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/rtsp/gstrtsp-marshal.list:
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	* gst-libs/gst/rtsp/rtsp-marshal.list:
+	* gst-libs/gst/video/Makefile.am:
+	* gst/playback/Makefile.am:
+	* gst/tcp/Makefile.am:
+	  build: fix previous commit to fully accomodate the glib-gen.mak changes
+	  I also renamed glib_enum_prefix to glib_gen_prefix as we also use that for the
+	  marshallers. Also rename the rtsp-marshal.list to work with the unified prefix.
+
+2009-10-16 10:18:45 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* gst/playback/Makefile.am:
+	* gst/tcp/Makefile.am:
+	  build: use gst-glib-gen.mak to fix the glib build rules. Fixes #598114
+	  The build rules in glib-gen.mak were using pattern rules in a non save way.
+
+2009-10-16 10:14:36 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 85d1530 to 0702fe1
+
+2009-09-10 11:39:18 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoradec.c:
+	  theora: Make theoradec use gstvideo for image conversion
+	  Vastly simplifies code.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-10 09:36:31 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoradec.c:
+	  theora: Don't always round to even width/height
+	  Previously, the code always rounded to even sizes. Now it only ensures
+	  that pic_x and pic_y are multiples of 2 if the output format requires
+	  it.
+	  Also inlcudes fixes to take pic_x/y into account properly when copying
+	  the buffer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-10 00:00:44 +0200  Benjamin Otte <otte@gnome.org>
+
+	* configure.ac:
+	  theora: Don't check for theora.pc anymore
+	  THe new APIs from theoradec and theoraenc are used now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-07-31 14:59:03 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/theoradec.c:
+	  theora: Convert theoradec to libtheora 1.0 API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 23:44:36 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/Makefile.am:
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Port encoder to new Theora API
+	  Includes ripping out the old buffer copy code to fill up to frame size.
+	  This is not necesary with the new encoder.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 21:59:31 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Disable sharpness property
+	  It's ignored by libtheora
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 21:57:08 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Disable noise-sensitivity property
+	  It is ignored by libtheora
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 21:50:57 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Disable keyframe-mindistance property
+	  It's ignored by the current Theora library
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 21:48:08 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Disable keyframe_threshold property
+	  It's ignored by the current theora encoder
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-09 20:26:47 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Get rid of "quick" property
+	  The proeprty is not used by libtheora at all
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-08 15:12:23 +0200  Benjamin Otte <otte@gnome.org>
+
+	* configure.ac:
+	* ext/theora/theoraenc.c:
+	  theora: remove support for outdated granulepos hack
+	  This is in preparation to switching to switching to the new Theora API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-08 13:23:04 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Ignore border property
+	  Always make the video use black as padding color.
+	  The output will be identical to previous versions.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-09-08 13:18:26 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theora: Ignore the center property, always set video to top left
+	  This is not a necessary property, the output will be identical no matter
+	  what.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594729
+
+2009-10-15 16:34:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/Makevars:
+	  po: Don't create backup .po files
+	  As well as preventing creation of useless backup files, it works
+	  around a bug in gettext 0.17 on OS/X
+
+2009-10-15 13:13:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Post a element message on the bus with the stream topology
+	  Fixes bug #598533.
+
+2009-10-15 13:01:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Store the "endcaps" of a chain
+	  This are the caps that either resulted in a deadend if
+	  no plugin for them could be found or raw caps.
+
+2009-10-15 11:38:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Store for every chain, which pad resulted in its creation
+
+2009-10-15 10:28:39 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/pipelines/basetime.c:
+	  check: Don't fail the basetime test when no audiosrc is available
+	  On OS/X the DEFAULT_AUDIOSRC is not going to be available, because
+	  it isn't in gst-plugins-base. Just defer the test, instead of
+	  failing it.
+
+2009-10-14 10:41:03 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From a3e3ce4 to 85d1530
+
+2009-10-14 08:36:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Use gst_object_has_ancestor() instead of our own implementation of it
+
+2009-10-13 19:14:41 +0300  Tommi Myöhänen <ext-tommi.1.myohanen@nokia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: fix timestamp comparission, Fixes #597407
+
+2009-10-13 13:52:02 +0300  Tommi Myöhänen <ext-tommi.1.myohanen@nokia.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/basetime.c:
+	  tests: new test for baseaudiosrc base_time comparison
+	  This test reveals a bug in comparison operation between timestamp and
+	  GstElement's base_time in GstBaseAudioSrc.
+
+2009-10-08 19:55:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Don't stop completely on initialization errors from subtitle elements
+	  Instead disable the subtitles and play the other parts of the stream.
+	  Fixes bug #587704.
+
+2009-10-13 16:50:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Ignore no-more-pads from non-demuxer elements
+	  instead of printing an error that no corresponding group could
+	  be found. no-more-pads from non-demuxer elements doesn't give
+	  any additional information because there can only be a single srcpad.
+	  Fixes bug #598288.
+
+2009-10-12 21:30:15 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: track active conversion in perf log
+
+2009-10-12 15:48:46 +0200  Patrick Radizi <patrick.radizi at axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: handle socket errors
+	  gstrtspconnection.c:gst_rtsp_connection_receive() can hang when an error occured
+	  on a socekt. Fix this problem by checking for error on 'other' socket after poll
+	  return.
+	  Fixes #596159
+
+2009-10-06 14:08:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: whitespace fixes
+
+2009-10-06 14:07:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: avoid confusing error
+
+2009-10-09 22:00:45 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/vorbis/vorbisdec.c:
+	* ext/vorbis/vorbisenc.c:
+	  vorbis: fixes warings in macosx snow leopard
+
+2009-10-09 18:52:12 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/theora/theoradec.c:
+	* ext/theora/theoraparse.c:
+	  theora: fixes warnings on macosx snow leopard
+
+2009-10-09 16:56:29 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/ogg/gstoggparse.c:
+	  ogg: fixes warnings on macosx snow leopard
+
+2009-10-09 16:19:17 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix a warning in macosx
+
+2009-10-08 14:16:44 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/tag/tags.c:
+	  tag: use BOM to recognize UTF-16/32 encoding and convert accordingly
+
+2009-10-09 15:11:16 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/gst-plugins-base.supp:
+	  check: Add valgrind suppressions for ALSA and fontconfig bits on Jaunty.
+
+2009-10-09 15:32:45 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  audioconvert: change the format instead of cast as ensonic asked
+
+2009-10-09 15:29:15 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: fixes warning: format not a string literal and no format arguments
+	  redo of valid part of my previous revert.
+
+2009-10-09 15:19:42 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* common:
+	* gst/audioconvert/gstchannelmix.c:
+	  Revert "audioconvert: fixes warning: format not a string literal and no format arguments"
+	  Revert this commit as unintentionally I've changed common.
+	  This reverts commit 49ea0138223ec5f9e53780635cbcc70f33778667.
+
+2009-10-09 14:28:42 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	  gnomevfssrc: fixes warnings in macosx
+	  warning: format '%llu' expects type 'long long unsigned int', but argument 8 has type 'GnomeVFSFileOffset'
+	  warning: format '%lld' expects type 'long long int', but argument 9 has type 'guint64'
+
+2009-10-09 14:23:36 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: fix warning in macosx
+
+2009-10-09 14:20:47 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: fix warning in macosx
+
+2009-10-09 14:14:15 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* common:
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: fixes warning: format not a string literal and no format arguments
+
+2009-10-09 14:07:24 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  audio: fix warnings building on macosx
+
+2009-10-08 18:08:22 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: chwck formats just once per _chain()
+
+2009-10-08 17:49:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: add perf-log-category and log suboptimal operation
+	  Log if we use an intermediate colorspace for conversion.
+
+2009-10-08 10:59:36 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 19fa4f3 to a3e3ce4
+
+2009-10-08 00:17:21 +0100  Jan Schmidt <jan.schmidt@sun.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Fix type-punning warning
+
+2009-09-26 12:56:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Chains with an exposed endpad are complete too
+	  This allows partial group changes, i.e. demuxer2 in the example below
+	  goes EOS but has a next group and audio2 stays the same.
+	  /-- >demuxer2---->video
+	  demuxer---             \--->audio1
+	  \--->audio2
+
+2009-09-26 12:47:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Use the iterate internal links function instead of string magic to get multiqueue srcpads
+
+2009-09-24 14:56:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Don't post missing plugin messages twice
+	  decodebin2 already posts them after emitting the unknown-type signal,
+	  there's no need to post another one.
+
+2009-09-26 12:17:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Rewrite autoplugging and how groups of pads are exposed
+	  This now keeps track of everything that is going on, creates
+	  a tree of chains and groups to allow "demuxer after demuxer" scenarios
+	  and allows chained Oggs with multiple streams (needs oggdemux or playbin2 fixes).
+	  Also document everything in detail and give a general overview of what
+	  decodebin2 is doing at the top of the sources.
+	  Fixes bug #596183, #563828 and #591677.
+
+2009-10-07 17:45:33 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: only start event thread if needed
+	  The event thread is doing 20 wakeups per second to poll the events. If one
+	  runs ximagesink with handle-events=false and handle-expose=false then we can
+	  avoid the extra thread.
+
+2009-10-07 16:56:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/theora/theoraenc.c:
+	  theoraenc: Make the default quality property 48.
+	  This guarantees that people who use theoraenc without modifying any
+	  properties will end up with a reasonably good quality output.
+	  48 is also the default of the encoder_example application shipped with
+	  libtheora.
+
+2009-10-07 11:48:37 +0200  Benjamin Otte <otte@gnome.org>
+
+	* tests/check/libs/video.c:
+	  tests/check/libs/video.c: Update strides for Y41B
+
+2009-10-07 10:32:17 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: we can use GLib 2.18 API unconditionally now
+
+2009-10-07 10:13:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump GLib requirement to 2.18
+	  Bump required GLib version as per the release planning docs.
+
+2009-10-05 00:33:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/tuner.c:
+	  docs: clarify GstTuner docs in two places
+
+2009-09-25 15:32:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/v4l/gstv4lelement.c:
+	  v4l: fix compiler warning
+	  Fix 'variable may be used uninitialized' compiler warning (which is
+	  true in theory, but can't actually ever happen, since we always
+	  call the function with check=FALSE).
+	  Fixes #596313.
+
+2009-10-07 11:56:35 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/ogg/gstogmparse.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/mpl2parse.c:
+	* gst/subparse/tmplayerparse.c:
+	  build: sprintf, sscanf need stdio.h
+
+2009-09-15 15:26:06 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: only start event thread if needed
+	  The event thread is doing 20 wakeups per second to poll the events. If one runs
+	  xvimagesink with handle-events=false and handle-expose=false then we can avoid
+	  the extra thread.
+
+2009-10-07 09:58:27 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst-libs/gst/video/video.h:
+	  Update Since tags for NV12/NV21
+	  They are added in 0.10.26 now, not 0.10.25
+
+2009-09-23 15:31:50 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  [videotestsrc] Make checkers-8 pattern create 8x8 instead of 16x16 tiles
+
+2009-09-23 11:03:57 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  [ffmpegcolorspace] Fix NV12 and NV21 with odd width and height
+
+2009-09-23 10:25:02 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  Add NV12 and NV21 formats
+
+2009-09-21 18:49:42 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst-libs/gst/video/video.c:
+	  [video] Fix Y41B
+	  Chroma components should be aligned on 4byte boundaries.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=595849
+
+2009-09-21 18:49:06 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  [videotestsrc] Fix Y41B
+	  Chroma components should be aligned on 4byte boundaries.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=595849
+
+2009-10-07 07:28:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/interfaces/streamvolume.c:
+	  streamvolume: Define cbrt() if it's not available
+	  Fixes build on Win32, bug #597537.
+
+2009-09-24 16:05:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstfactorylists.c:
+	  factorylist: Use gst_caps_can_intersect() instead of _intersect()
+	  This is faster and results in less allocations.
+
+2009-09-26 12:10:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't set the external ghostpads blocked but only their targets
+	  Pad blocks should never be done on external pads as outside elements
+	  might want to use their own pad blocks on them and this will lead to
+	  conflicts and deadlocks.
+
+2009-09-26 12:04:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Only use the object lock for protecting the subtitle elements
+	  Using the decodebin lock will result in deadlocks if the subtitle encoding
+	  is accessed from a pad-added handler.
+
+2009-09-26 18:11:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Improve debugging of pad blocks
+
+2009-09-23 16:07:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	  playbin2/playsink: Use gst_object_ref_sink() instead of calling both separately
+
+2009-10-06 19:59:11 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	  configure: Add an 'else' to pangocairo check
+	  Otherwise it exits if it fails.
+
+2009-10-06 19:35:50 -0700  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add pattern with out-of-gamut colors
+	  Adds a pattern with out-of-gamut colors in a checkerboard
+	  pattern with in-gamut neighbors.  Useful for checking YCbCr->RGB
+	  color matrixing.  Correct matrixing and clamping will cause the
+	  checkerboard pattern to be invisible.
+
+2009-10-06 19:17:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: use CLOSE_SOCKET() instead of close()
+	  Use CLOSE_SOCKET instead of directly calling close() because it does the right
+	  thing for windows.
+	  Fixes #597539
+
+2009-10-01 14:19:41 +0200  Robert Swain <robert swain gmail com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: fix printf variable type
+	  Change printf variable type from %lu to %" G_GUINT64_FORMAT " as it
+	  should be for guint64.
+	  Fixes #596981
+
+2009-09-30 23:22:35 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  ffmpegcolorspace: Use the ffmpegcolorspace debug category
+	  Move gstffmpegcodecmap debug to the ffmpegcolorspace category
+
+2009-09-22 11:58:26 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: Don't repeat tags buffers for every new segment
+	  Only send a tag buffer when one is received, not after every new segment
+	  event/update.
+
+2009-09-28 20:25:35 -0700  David Schleef <ds@schleef.org>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: detect 'ftypqt  ' as video/quicktime
+
+2009-10-06 19:47:00 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	  back to development -> 0.10.25.1
+
+=== release 0.10.25 ===
+
+2009-10-05 13:56:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	  Release 0.10.25
+
+2009-10-05 13:49:10 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2009-10-01 17:17:55 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.24.4 pre-release
+
+2009-10-01 10:37:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	  pango: Unpremultiply Cairo's ARGB to match GStreamers ARGB
+
+2009-09-28 22:06:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: make the lock recursive for now
+	  Fixes #583255
+
+2009-09-28 21:54:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: fix the vis property getter
+
+2009-09-30 18:06:56 +0100  Christian F.K. Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Add missing file to spec file
+
+2009-09-17 16:57:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* tests/check/libs/cddabasesrc.c:
+	  cddabasesrc: Fix string leaks in the unit test and a leak in cddabasesrc
+
+2009-09-17 23:42:52 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* tests/check/libs/cddabasesrc.c:
+	  cddabasesrc: ignore URI fragments that look like device paths
+	  Rhythmbox uses cdda:// URIs of the form cdda://track#device, which
+	  worked before the fix for bug #321532.
+	  Also adds a check for negative track numbers and some unit tests for URI
+	  parsing.
+	  Fixes bug #595454.
+
+2009-09-17 01:20:45 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.24.3 pre-release
+
+2009-09-15 15:23:49 -0700  Michael Smith <msmith@songbirdnest.com>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: don't ever return NULL in list of strings.
+
+2009-09-14 12:18:33 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Expose mute,volume,vis-plugin and font-desc properties
+	  https://bugzilla.gnome.org/show_bug.cgi?id=594623
+
+2009-09-09 12:42:04 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  GstPlaySink: Expose 'reconfigure' as an action signal.
+
+2009-09-09 11:17:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaysink.c:
+	  GstPlaySink: Expose flags as a gobject property.
+
+2009-09-08 11:35:20 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplayback.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playback: Register playsink as an element.
+	  This allows using playsink from outside the playback plugin.
+	  Add code to be able to request the sink pads using standard GStreamer API.
+	  TODO : expose GObject properties/signals.
+
+2009-09-12 14:55:06 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs.types:
+	  docs: add new gst_stream_volume_get_type to types file
+	  This is needs to get Gobject features to show up in the docs.
+
+2009-09-12 15:48:11 -0700  David Schleef <ds@schleef.org>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix duration calculation for truncated files
+	  If the last page of a stream has a granulepos of -1, that is,
+	  it doesn't complete a packet, we need to continue to search
+	  for the last granulepos.
+
+2009-09-12 14:01:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: Build pkgconfig before all libraries and set PKG_CONFIG_PATH
+	  This way g-ir-scanner can find the gstreamer-*-0.10 pkg-config files.
+
+2009-09-12 02:23:07 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ext/theora/theoraenc.c:
+	  theoraenc: Fix a string leak in _getcaps()
+
+2009-09-11 23:49:11 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/LINGUAS:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.24.2 pre-release
+
+2009-09-11 21:44:18 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/audioresample.c:
+	  check: Improve audioresample test
+	  Make the audioresample test work with CK_FORK=no, and
+	  turn a g_print into a GST_INFO.
+
+2009-09-11 22:09:06 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix crashes with even widths
+	  The fix for green lines introduced by commit
+	  35fdfcc6258c66ba462a4330a35deffb0f2b501d caused invalid memory accesses
+	  for even widths. This patch fixes it.
+
+2009-09-11 15:11:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Implement GstStreamVolume interface
+
+2009-09-11 15:04:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/volume/gstvolume.c:
+	* gst/volume/gstvolume.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/volume.c:
+	  volume: Implement GstStreamVolume interface
+
+2009-09-11 14:54:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/interfaces/streamvolume.c:
+	* gst-libs/gst/interfaces/streamvolume.h:
+	* gst/playback/Makefile.am:
+	* win32/common/libgstinterfaces.def:
+	  interfaces: API: Add GstStreamVolume interface
+	  Fixes bug #567660.
+
+2009-09-11 12:20:10 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: properly fix the HTTP manual mode
+	  When we're not parsing HTTP, return EPARSE when we get an HTTP
+	  message.
+
+2009-09-11 10:16:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/mixertrack.h:
+	  mixertrack: add READONLY and WRITEONLY flags
+	  Should really have been READABLE and WRITABLE, but those are hard to
+	  add whilst maintaining backwards compatibility. See #343615.
+	  API: GST_MIXER_TRACK_READONLY
+	  API: GST_MIXER_TRACK_WRITEONLY
+
+2009-09-11 10:02:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: fix build against core that has debugging disabled
+	  The macro is called GST_DISABLE_GST_DEBUG, not GST_DISABLE_DEBUG.
+
+2009-09-11 07:38:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Add Since marker for the new skip-to-first property
+
+2009-09-11 07:36:10 +0200  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: Make videorate work with a live source
+	  Add a property that makes videorate skip to the first buffer it
+	  receives instead of padding the stream from segment start to the
+	  first real buffer.
+	  Fixes bug #567928.
+
+2009-09-11 07:20:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/fft/gstfft.h:
+	* gst-libs/gst/fft/gstfftf32.h:
+	* gst-libs/gst/fft/gstfftf64.h:
+	* gst-libs/gst/fft/gstffts16.h:
+	* gst-libs/gst/fft/gstffts32.h:
+	  fft: Mark one function as const and add notes that the structs should be private in 0.11
+
+2009-09-10 22:28:19 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: add human readable format names when logging
+	  Add string array with human readable names for format and type to be used in log
+	  statements.
+
+2009-09-10 18:19:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppay: don't print RTP timestamps as clocktime
+	  Don't try to print the RTP timestamp as a GstClockTime, it's just a guint32.
+	  Fixes #594757
+
+2009-09-10 16:55:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gstplaybin2.c:
+	  playbin(2): Document that the volume property uses a linear scale
+	  Fixes bug #571610.
+
+2009-09-10 14:04:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: don't return EPARSE
+	  Don't blindly return EPARSE when http mode is disabled.
+	  Restore old http mode after temporarily setting it to TRUE.
+
+2009-09-10 12:38:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: add ugly backward compat hack
+	  Check for pulsesink < 0.10.17 because it includes code that is now included in
+	  baseaudiosink. Disable that code in baseaudiosink to be compatible with the
+	  older version.
+
+2009-09-10 10:56:29 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Handle YVU9/YUV9 conversion with odd widths
+	  A green border could be visible when converting to Y444 or RGB, because
+	  the last chroma samples weren't copied correctly
+
+2009-09-10 10:43:37 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix YVU9 and YUV9
+	  - Buffer sizes were computed different from ffmpegcolorspace
+	  - Green bar on right size for widths not divisable by 4
+
+2009-09-10 10:08:28 +0200  Benjamin Otte <otte@gnome.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix image for odd widths in some formats
+	  videotestsrc rounds chroma down. This causes it to omit the last chroma
+	  value completely for odd widths when the chroma is downsampled.
+	  This patch special cases the last pixel to not be rounded down.
+
+2009-09-10 10:02:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Handle kate and cmml as sparse streams too
+
+2009-09-10 10:00:16 +0200  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: Better handling of sparse streams by sending segment updates
+	  Fixes bug #397419.
+
+2009-09-10 09:43:28 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gsturidecodebin.c:
+	  docs: tell a biit more about uri-decodebin and buffering
+
+2009-09-09 18:24:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: take clock time in setcaps
+	  Take the time of the clock so that the last_time field is set. This is important
+	  for sinks that restart their internal ringbuffer after a caps change and need to
+	  know the last know position.
+
+2009-09-09 18:24:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: add some more debug
+
+2009-09-09 16:44:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/theoraenc.c:
+	  theoraenc: Print a debug message with supported formats
+
+2009-09-07 17:29:38 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Check supported input formats in getcaps function
+	  We want to fail early when an older libtheora release is used that does
+	  not support Y444 or Y42B formats, so use a getcaps function that does
+	  this.
+
+2009-09-04 21:37:04 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Implement support in theoraenc for Y444 and Y42B
+	  Fixes bug #594165.
+
+2009-09-04 20:23:52 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Refactor the buffer copy code
+
+2009-09-04 16:59:49 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Split yuv_buffer creation into its own function
+
+2009-09-04 16:49:08 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Split out buffer resize in its own function
+
+2009-09-04 14:06:09 +0200  Benjamin Otte <otte@gnome.org>
+
+	* ext/theora/theoraenc.c:
+	  theora: Add assertions that functions don't fail
+	  Some functions in libtheora can return an error, but that error cannot
+	  ever happen inside theoraenc. In those cases assert that it doesn't.
+
+2009-09-09 16:21:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: make stop state configurable
+	  Make it easy to experiment with different stop states (NULL and READY)
+
+2009-09-09 16:19:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: correct for clock reset
+	  When going to NULL, we reset the ringbuffer so that it starts beck from 0. We
+	  also make sure that the clock is updated with the elapsed time so that it
+	  alsways increments even when the ringbuffer goes back to 0. When this happened
+	  we need to adjust the sample position for the reset ringbuffer.
+	  Fixes #594136
+
+2009-09-09 16:17:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	  baseaudiosink: whitespace fixes
+
+2009-09-09 16:16:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: add more debug
+
+2009-09-09 10:25:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.h:
+	* gst-libs/gst/interfaces/mixer.h:
+	  whitespace fixes
+
+2009-09-08 17:59:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/gstvideosink.c:
+	* gst-libs/gst/video/gstvideosink.h:
+	  videosink: add "show-preroll-frame" property
+	  Add a property to disable rendering of video frames during preroll. This
+	  will only work for videosinks that use the new ::show_frame() vfunc instead
+	  of overriding basesink's preroll and render vfuncs directly.
+	  API: GstVideoSink:show-preroll-frame
+
+2009-09-08 17:43:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  ximagesink, xvimagesink: use new GstVideoSink::show_frame() vfunc
+
+2009-09-08 18:19:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/gstvideosink.c:
+	* gst-libs/gst/video/gstvideosink.h:
+	  video: add GstVideoSinkClass::show_frame()
+	  Add ::show_frame() vfunc which maps to basesink's ::preroll and ::render
+	  vfuncs and add some gtk-doc chunks.
+	  API: GstVideoSinkClass::show_frame()
+
+2009-09-08 16:00:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: don't do stuff inside g_return_val_if_fail() statements
+	  Or it will all fall apart if someone compiles with -DG_DISABLE_ASSERT.
+
+2009-08-31 20:24:22 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: Fix compiler warning with MSVC
+	  Fixes bug #594275.
+
+2009-08-31 20:31:56 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  basertpdepayload: fix event forwarding
+
+2009-08-31 20:36:37 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  rtcpbuffer: add missing break in handling of GST_RTCP_TYPE_PSFB
+	  Fixes #594258
+
+2009-09-08 13:02:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  fix whitespace
+
+2009-09-08 12:59:20 +0200  Håvard Graff <havard.graff@tandberg.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: improve slave skew resync
+	  The old one did the mistake of not actually advancing the ringbuffer, it just
+	  adjusted the segbase, introducing the whole lenght of the ringbuffer as an
+	  extra delay in the pipeline.
+	  Also make sure that the resync can never go back in time, producing the same
+	  timestamps that has already been produced, as this can cause severe problems
+	  for sinks and other synching mechanisms.
+	  Fixes #594256
+
+2009-09-07 17:13:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: disable typefinder for headerless flac
+	  Disable headerless flac typefinder as long as it happily typefinds anything
+	  including /dev/urandom as flac and as long as it's not particularly useful
+	  given that such streams don't really exist in the wild.
+	  Also fix up some comments so that gtk-doc doesn't complain about them.
+
+2009-09-06 15:21:43 +0300  René Stadler <mail@renestadler.de>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: fix small memory leak when setting window title
+
+2009-09-06 01:42:42 +0300  René Stadler <mail@renestadler.de>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix small memory leak when setting window title
+
+2009-09-05 13:55:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* .gitignore:
+	  introspection: Add *.gir and *.typelib to .gitignore
+
+2009-09-05 13:46:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introduction: Fix out-of-tree build
+
+2009-09-05 13:13:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	  rtsp: Fix introspection build by ordering sources/headers in dependency order
+
+2009-09-05 13:09:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio: Remove debug echo
+
+2009-09-05 13:08:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio: Fix build of introspection data by using dependency order for the headers/sources
+
+2009-09-05 12:31:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: Strip Gst prefix from all types/functions
+
+2009-09-05 11:49:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/netbuffer/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: Fix build if gir-repository is not installed
+
+2009-09-05 11:37:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/Makefile.am:
+	  video: Add gobject-introspection support
+
+2009-09-05 11:35:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/Makefile.am:
+	  tag: Add gobject-introspection support
+
+2009-09-05 11:34:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/sdp/Makefile.am:
+	  sdp: Add gobject-introspection support
+
+2009-09-05 11:31:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/interfaces/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	  libs: Add nodist headers and sources to the introspection files
+
+2009-09-05 11:28:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	  rtsp: Add gobject-introspection support
+
+2009-09-05 11:25:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtp/Makefile.am:
+	  rtp: Add gobject-introspection support
+
+2009-09-05 11:23:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/riff/Makefile.am:
+	  riff: Add gobject-introspection support
+
+2009-09-05 11:20:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/Makefile.am:
+	  pbutils: Add gobject-introspection support
+
+2009-09-05 11:17:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/Makefile.am:
+	  netbuffer: Add gobject-introspection support
+
+2009-09-05 11:15:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/Makefile.am:
+	  interfaces: Add gobject-introspection support
+
+2009-09-05 11:04:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/fft/Makefile.am:
+	  fft: Add gobject-introspection support
+
+2009-09-05 11:01:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/Makefile.am:
+	  cdda: Add gobject-introspection support
+	  This is disabled for now until gobject-introspection is fixed
+
+2009-09-05 10:50:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio: Add gobject-introspection support
+
+2009-09-05 10:40:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* gst-libs/gst/app/Makefile.am:
+	  app: Add gobject-introspection support
+
+2009-09-05 10:20:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 00a859e to 19fa4f3
+
+2009-09-04 15:48:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: fix midi typefinding
+	  We already have a audio/midi typefinder so don't override it with the midi in
+	  RIFF typefinder or else we fail to detect plain midi files.
+
+2009-09-04 11:29:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: do buffering for more uris
+	  Add ssh://, ftp://, sftp://, myth:// to the list of uris that require
+	  buffering.
+	  Fixes #594020
+
+2009-09-04 07:36:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add typefinder for Midi inside RIFF
+	  This is a standard Midi file format that should be supported by
+	  all Midi decoders and also has the mimetype audio/mid according to
+	  the Midi specification homepage.
+	  Fixes bug #594094.
+
+2009-09-03 18:53:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: add some debugging
+
+2009-09-03 17:53:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: handle gaps
+	  Add various conversion functions between time<->bytes<->rtptime that will be
+	  used later on.
+	  Refactor the min/max packet length code so that it can be used for both
+	  sample/frame based payloaders. Cache the returned values.
+	  code cleanups.
+	  When we discover a DISCONT buffer, make the outgoing RTP timestamps have the
+	  same gap as the GStreamer timestamps gap.
+
+2009-09-03 14:13:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: fix frame duration calculations
+	  Fix the calculation of the frame duration and rtp timestamps.
+	  Add some debugging
+
+2009-09-03 14:13:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  rtppay: add some debugging
+
+2009-09-02 19:49:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: use offsets for RTP timestamps
+	  Have a custom sample/frame function to generate an offset that the base class
+	  will use for generating RTP timestamps. This results in perfect RTP timestamps
+	  on the output buffers.
+	  Refactor setting metadata on output buffers.
+	  Add some more functionality to _flush().
+	  Handle DISCONT on the input buffers and set the marker bit and DISCONT flag on
+	  the next outgoing buffer.
+	  Flush the pending data on EOS.
+
+2009-09-02 13:13:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: move function around
+
+2009-09-02 13:12:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: fix sample duration calculation
+
+2009-09-02 12:24:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppay: more refactoring
+	  Unify the sample/frame buffer handling code by making the functions plugable.
+
+2009-09-02 12:03:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  audiortppayload: refactor some more
+	  Refactor getting the packet min/max size and alignment code.
+	  Refactor converting bytes to time.
+	  change some variable to something shorter.
+
+2009-09-02 10:46:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	* win32/common/libgstrtp.def:
+	  audiortppayload: refactor and cleanup
+	  Always use the adapter when we need to fragment the incomming buffer. Use more
+	  modern adapter functions to avoid malloc and memcpy. The overall result is that
+	  the code looks cleaner while it should be equally fast and in some case avoid a
+	  memcpy and malloc.
+	  Use the adapter timestamping functions for more precise timestamps in case of
+	  weird disconts.
+	  Cache some values instead of recalculating them.
+	  Add gst_base_rtp_audio_payload_flush() to flush a certain amount of bytes from
+	  the internal adapter.
+	  API: GstBaseRTPAudioPayload::gst_base_rtp_audio_payload_flush()
+
+2009-09-03 16:56:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Update common
+
+2009-09-03 11:29:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppay: add property to disable perfect RTP time
+	  Add a property to disable the generation of perfect RTP timestamps. By default
+	  it is active.
+	  API: GstBaseRTPPayload::perfect-rtptime
+
+2009-09-02 19:47:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  basertppay: allow subclasses to influence RTP time
+	  Allow subclasses to use the OFFSET field on RTP buffers to influence the way in
+	  which RTP timestamps are generated. Usually timestamps are created from the
+	  GStreamer timestamps on the buffer, which could result in imperfect RTP
+	  timestamps.
+
+2009-09-02 19:44:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppay: add macro to cast
+
+2009-09-01 18:26:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiopayload: code cleanups
+
+2009-09-01 18:08:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  audiortppayload: don't check adapter
+	  the adapter is never NULL so we don't need to check it.
+	  Use _scale functions to avoid overflows.
+
+2009-09-03 00:14:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* gst/typefind/Makefile.am:
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: move gio-based xdg mime typefinder from -bad to -base
+	  Its purposes is mainly to avoid false positives (e.g. mp3 typefinder
+	  reporting a 20% probability and somesuch). Won't be registered if
+	  the gio plugin has been disabled via ./configure --disable-gio.
+
+2009-09-01 15:06:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: GstAdapter is not a GstObject and should be freed with g_object_unref
+
+2009-09-01 15:02:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	  v4lsrc: fix timestamping for when we do not have a clock yet
+	  Should fix #559049.
+
+2009-09-01 14:30:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	  v4lsrc: don't log not-yet-initialised integer value
+
+2009-09-01 14:28:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* sys/v4l/v4lsrc_calls.c:
+	  v4lsrc: avoid unnecessary run-time type checks in custom buffer finalize
+	  And reflow code to be more indent friendly.
+
+2009-09-01 10:39:52 +0200  Jonas Holmberg <jonas.holmberg@axis.com>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppayload: Make instance init faster by not reading /dev/urandom 3 times
+	  ... which is the default seed when creating a new GRand. Because
+	  GLib in older versions used buffered IO this would take a lot of time.
+	  Instead use the global GRand for getting random numbers and keep the
+	  three instance GRand for backward compatibility with a simple seed.
+	  Fixes bug #593284.
+
+2009-08-31 22:48:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: improve caps filter functionality. Fixes #590146.
+	  Also use the capsfilter if there is no src-peer as the caps constrain what
+	  we can do. Don't create any_caps as a default, as we check for NULL to skip the
+	  filtering. This is a (small) performance regression as we always intersect
+	  otherwise.
+
+2009-08-31 11:10:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Post missing plugin messages before any error messages
+
+2009-08-28 19:06:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  cddabasesrc: safely handle the indexes
+
+2009-08-28 19:06:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtsp.def:
+	  def: add new rtsp symbols
+
+2009-08-28 14:08:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  basertppayload: whitespace fixes.
+
+2009-08-27 18:59:49 +0200  Marc-André Lureau <mlureau@flumotion.com>
+
+	* gst/gdp/gstgdppay.c:
+	  Bug 593035 - set IN_CAPS for streamheader buffer
+
+2009-08-26 16:56:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gststreamselector.c:
+	  playbin: The internally linked pad of the selector might be NULL in some cases
+
+2009-08-26 16:45:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gststreamselector.c:
+	  playbin: Fix iterate internal linked pads functions for the stream selectors
+	  This now used the new gst_iterator_new_single() function and as a side effect
+	  fixes bug #592864.
+
+2009-08-26 09:08:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: Add support for AVF files
+	  AVF is valid RIFF but has AVF0 has first fourcc instead of RIFF.
+	  Fixes bug #593117.
+
+2009-08-26 09:08:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Detect AVF files as RIFF files too
+	  AVF is valid RIFF but has AVF0 as first fourcc instead of RIFF.
+	  Partially fixes bug #593117.
+
+2009-08-21 11:51:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/audioresample.c:
+	  audioresample: Add unit test for checking for timestamp drifts
+	  This also checks for perfect timestamping and offsetting.
+
+2009-08-21 10:11:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Fix drain processing
+	  In case we have to convert internally don't process output length input samples
+	  but history length input samples.
+
+2009-08-21 10:02:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/audioresample.c:
+	  audioresample: Improve debugging a bit in the unit test
+
+2009-08-21 10:00:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: On the first buffer we need discont handling
+	  Otherwise we won't get upstream timestamps and everything and all
+	  output buffers would have -1 timestamps.
+
+2009-08-21 08:23:39 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
+
+	* configure.ac:
+	* gst/subparse/gstsubparse.c:
+	  subparse: Remove dependency on regex.h as it's not used anyway
+	  Fixes bug #592544.
+
+2009-08-21 06:58:31 +0200  Kipp Cannon <kcannon@ligo.caltech.edu>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Fix buffer overflow when pushing the drain
+
+2009-08-21 06:57:58 +0200  Kipp Cannon <kcannon@ligo.caltech.edu>
+
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	  audioresample: Fix timestamp drift
+	  Fixes bug #591934.
+
+2009-08-24 11:34:35 -0700  David Schleef <ds@schleef.org>
+
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gsttextrender.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gststreamselector.c:
+	* gst/subparse/gstsubparse.c:
+	* sys/v4l/gstv4lmjpegsink.c:
+	* sys/v4l/gstv4lmjpegsrc.c:
+	* sys/v4l/gstv4lsrc.c:
+	  Remove Ronald Bultje from Authors field
+	  Replaced with "GStreamer maintainers
+	  <gstreamer-devel@lists.sourceforge.net>" or just removed,
+	  depending on the number of other authors.
+
+2009-08-24 15:06:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: fix refcounting of _get_sink()
+	  g_value_set_object() increases the refcount of the sink, which is not needed
+	  because the object should already be refcounted. Make sure this is always the
+	  case and use g_value_take_object().
+	  Fixes: #592884
+
+2009-08-24 14:39:16 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	  rtsp: Mark Transport as supporting multiple values.
+
+2009-08-24 13:58:17 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	* gst-libs/gst/rtsp/gstrtspmessage.h:
+	  rtsp: Added missing Since tags.
+
+2009-08-24 13:27:55 +0200  Eero Nurkkala <ext-eero.nurkkala at nokia.com>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: Improve audiosink startup performance
+	  When we start the ringbuffer, immediatly continue processing samples if the
+	  writer prepared some for us.
+	  Fixes #545807
+
+2009-08-17 11:53:43 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Added new API for sending using GstRTSPWatch.
+	  The new API to send messages using GstRTSPWatch will first try to send the
+	  message immediately. Then, if that failed (or the message was not sent
+	  fully), it will queue the remaining message for later delivery. This avoids
+	  unnecessary context switches, and makes it possible to keep track of
+	  whether the connection is blocked (the unblocking of the connection is
+	  indicated by the reception of the message_sent signal).
+	  This also deprecates the old API (gst_rtsp_watch_queue_data() and
+	  gst_rtsp_watch_queue_message().)
+	  API: gst_rtsp_watch_write_data()
+	  API: gst_rtsp_watch_send_message()
+
+2009-08-17 11:46:32 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Made gst_rtsp_watch_queue_data() thread safe.
+
+2009-06-17 15:37:53 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Added gst_rtsp_connection_set_http_mode().
+	  With gst_rtsp_connection_set_http_mode() it is possible to tell the
+	  connection whether to allow HTTP messages to be supported. By enabling HTTP
+	  support the automatic HTTP tunnel support will also be disabled.
+	  API: gst_rtsp_connection_set_http_mode()
+
+2009-06-16 19:35:23 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Allow gst_rtsp_connection_do_tunnel() to just setup decoding context.
+	  If the second connection passed to gst_rtsp_connection_do_tunnel() is NULL
+	  then just setup the base64 decoding context for the first connection.
+
+2009-06-16 19:04:54 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Write as much as possible in gst_rtsp_source_dispatch().
+	  Try to write as much as possible if there are multiple messages queued.
+
+2009-06-16 18:38:02 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Add error_full callback to GstRTSPWatchFuncs.
+	  The error_full callback is similar to the error callback, but allows for
+	  better error handling. For read errors a partial message is provided to
+	  help an RTSP server generate a more correct error response, and for write
+	  errors the write queue id of the failed message is returned.
+
+2009-08-17 18:29:17 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Made read_line() support LWS.
+	  Rewrote read_line() to support LWS (Line White Space), the method used by
+	  RTSP (and HTTP) to break long lines. Also added support for \r and \n as
+	  line endings (in addition to the official \r\n).
+
+2009-08-20 14:12:50 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: Do not split headers which should not be split.
+	  From RFC 2068 section 4.2: "Multiple message-header fields with the same
+	  field-name may be present in a message if and only if the entire
+	  field-value for that header field is defined as a comma-separated list
+	  [i.e., #(values)]." This means that we should not split other headers which
+	  may contain a comma, e.g., Range and Date.
+
+2009-08-20 14:12:09 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Parse WWW-Authenticate headers correctly.
+	  Due to the odd syntax for WWW-Authenticate (and Proxy-Authenticate) which
+	  allows commas both to separate between multiple challenges, and within the
+	  challenges themself, we need to take some extra care to split these headers
+	  correctly.
+
+2009-06-17 21:46:27 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Improve parse_line().
+	  Make parse_line() handle keys with multiple values on one line correctly.
+
+2009-06-17 23:15:23 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Rewrote setup_tunneling().
+	  Rewrote setup_tunneling() to use normal GstRTSPMessages instead of hard
+	  coded strings and duplicates of the message parsing code.
+
+2009-08-24 10:20:16 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: Rewrote gen_tunnel_reply().
+	  Rewrote gen_tunnel_reply() to generate a normal GstRTSPMessage rather
+	  than a hard coded string.
+
+2009-08-24 10:19:35 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Ignore the Content-Length for POST requests.
+	  The Content-Length for POST requests with an x-sessioncookie header should
+	  be ignored as the length is bogus and only there to fool proxies.
+
+2009-06-17 20:52:48 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Normalize lines (remove extra whitespace) before parsing.
+
+2009-06-10 13:11:31 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Made parse_string() return a result.
+	  This will catch parsing errors when a too long string is received.
+
+2009-06-10 11:43:31 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Improved parsing of messages.
+	  Do not abort message parsing as soon as there is an error. Instead parse
+	  as much as possible to allow a server to return as meaningful an error as
+	  possible.
+
+2009-06-09 17:54:20 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.h:
+	  rtsp: Added support for HTTP messages
+
+2009-06-09 16:22:17 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Added gst_rtsp_connection_create_from_fd().
+	  API: gst_rtsp_connection_create_from_fd()
+
+2009-06-09 15:27:17 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Add initial buffer support.
+	  The initial buffer contains data for a connection which should be used
+	  before starting to actually read anything from the socket.
+
+2009-08-24 13:15:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: don't block in paused
+	  When we are asked to unlock we should either leave the render function or call
+	  the wait_preroll method to release the stream lock.
+	  Fixes #592657
+
+2009-08-24 13:06:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: fix includes for appsrc/appsink
+
+2009-08-24 11:24:27 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: Add support for the Authentication-Info header.
+	  The Authentication-Info header is defined in RFC 2617 (Digest Access
+	  Authentication).
+
+2009-08-20 13:11:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* tests/check/pipelines/oggmux.c:
+	  oggmux: don't drop the streamheader field from the output caps
+	  Revert previous 'fix' for bug #588717 and fix it properly, whilst
+	  maintaining the streamheader field on the output caps. Also make
+	  sure we don't leak header buffers we couldn't push when downstream
+	  is unlinked. Add unit test for the presence of the streamheader
+	  field on the output caps and for the issue from bug #588717.
+
+2009-08-18 21:45:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gststreamselector.c:
+	  streamselector/inputselector: Use iterate internal links instead of deprecated get internal links
+
+2009-08-19 09:31:51 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Avoid duplicated headers.
+	  Remove any existing Session and Date headers before adding new ones
+	  when sending a request. This may happen if the user of this code reuses
+	  a request (rtspsrc does this when resending after authorization fails).
+
+2009-08-18 16:49:58 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Corrected the HTTP digest authorization computation.
+	  Do not use sizeof() on an array passed as an argument to a function and
+	  expect to get anything but the size of a pointer. As a result only the
+	  first 4 (or 8) bytes of the response buffer were initialized to 0 in
+	  auth_digest_compute_response() which caused it to return a string which
+	  was not NUL-terminated...
+
+2009-08-18 11:15:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Also send SEEK events directly to a subpicture sink
+
+2009-08-18 08:39:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: If a custom text sink is used, send events to it too
+	  Before, SEEK events would be sent to the video sink, which wouldn't
+	  be linked in any way to the subtitle part of the pipeline and
+	  subparse would never see the SEEK event. This would then seek
+	  the audio/video but the subtitles would continue from the old
+	  position instead.
+	  Fixes bug #591664.
+
+2009-08-18 08:20:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Make missing plugins emit a warning message, not an error message
+	  The problem with an error message is, that it will stop playback completely
+	  while it could be that only a audio decoder plugin is missing and the video
+	  could be played with the available plugins.
+	  See bug #591677.
+
+2009-08-13 17:42:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Post a correct error message for unknown types
+	  Before we had STREAM/WRONG_TYPE but it's really CORE/MISSING_PLUGIN
+	  because a plugin is missing and nothing else is wrong.
+	  Also make it an error instead of a warning.
+	  Really fixes bug #591677.
+
+2009-08-13 15:48:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Post a missing plugin message additional to the error message on unknown types
+	  Fixes bug #591677.
+
+2009-08-13 10:59:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  playbin2: fix error message string
+	  Fixes #591577.
+
+2009-08-05 15:38:32 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: align API doc of gst_riff_parse_chunk with reality
+
+2009-08-05 15:36:30 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: avoid assertion failure on empty/NULL caps
+
+2009-08-12 12:09:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Also detect SVG by the <svg> starting tag
+	  Not all SVG images have the DOCTYPE specified.
+
+2009-08-10 20:18:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: don't use GLib-2.18 function
+	  g_checksum_reset() was added only in GLib 2.18, but we still require
+	  only 2.16, so work around that if we only have 2.16. Fixes #591357.
+
+2009-08-10 15:40:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/pipelines/streamheader.c:
+	  streamheader: Fix caps leak in the vorbisenc unit test
+
+2009-08-10 14:14:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/streamheader.c:
+	  checks: fix stream header unit test hanging in gst_task_cleanup_all()
+	  Set pipelines to NULL state and unref when done.
+
+2009-08-10 10:17:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/md5.c:
+	* gst-libs/gst/rtsp/md5.h:
+	  rtsp: Use GLib's GChecksum instead of our own MD5 implementation
+
+2009-08-10 03:46:39 +0300  Mart Raudsepp <leio@gentoo.org>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: Fix doc blurb typo for gst_navigation_send_key_event
+
+2009-08-09 12:13:16 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Allow . instead of , as millisecond delimiter in srt subtitles
+	  Fixes bug #591207.
+
+2009-08-08 17:51:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gststreamselector.c:
+	  Revert inlines that cause compiler warnings and are not needed anyway
+
+2009-08-08 15:54:57 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/interfaces/propertyprobe.c:
+	* gst-libs/gst/riff/riff-media.c:
+	* gst-libs/gst/rtp/gstbasertpdepayload.c:
+	* gst-libs/gst/video/gstvideofilter.c:
+	* gst-libs/gst/video/gstvideosink.c:
+	  gst-libs: Remove dead assignments and resulting unused variables.
+
+2009-08-08 15:54:41 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/alsa/gstalsadeviceprobe.c:
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/ogg/gstoggaviparse.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gsttextrender.c:
+	* ext/vorbis/vorbisenc.c:
+	  ext: Remove dead assignments and resulting unused variables.
+
+2009-08-08 15:54:02 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstfactorylists.c:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gststreamselector.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/vs_image.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  gst: Remove dead assignments and resulting unused variables
+
+2009-08-07 13:05:42 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* docs/design/draft-va.txt:
+	  docs: add draft for generic introduction of video acceleration APIs idea
+
+2009-08-07 08:53:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/theoradec.c:
+	  Revert "theora: Convert theoradec to libtheora 1.0 API"
+	  This reverts commit f1e142ac9dcfb754d85357b9077d5aee48559dd9.
+	  Temporarily revert until we have a workaround for debian/ubuntu
+	  packaging failure (see http://bugs.debian.org/528710).
+
+2009-08-07 09:32:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add typefinders for many game sound console formats supported by gme
+	  These are AY, GBS, GYM, KSS, SAP and VGM. SPC and NSF already had typefinders.
+
+2009-07-16 11:29:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix warning when we're not linked downstream and error out properly
+	  Fix caps warning when there's no element linked downstream, and pass
+	  not-linked flow return value correctly up the chain, so we error out
+	  correctly. Fixes #588717.
+
+2009-07-31 14:59:03 -0700  David Schleef <ds@schleef.org>
+
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/theoradec.c:
+	  theora: Convert theoradec to libtheora 1.0 API
+
+2009-08-06 20:47:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Fix blitting of text over the output buffer and cairo painting
+
+2009-08-06 09:13:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Fix endianness problems (i.e. make it work again on big endian architectures)
+
+2009-07-31 14:27:28 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/icles/test-colorkey.c:
+	  colorkey-test: fix xsync error
+
+2009-07-06 23:06:50 +0300  Siarhei Siamashka <siarhei.siamashka@nokia.com>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: support for direct conversion from uyvy422 to rgb formats
+
+2009-07-14 12:33:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: smarter sink selection. Fixes #588523
+	  Don't do fallbacks if application specified a sink element. When doing the
+	  fallback use configured default elements instead of hardcoded linux only
+	  elements. Improve error messages accordingly.
+
+2009-08-06 12:18:36 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstqueue2.c:
+	  queue2: post error message when pausing task if so appropriate
+	  If a downstream element returns an error while upstream has already
+	  put all data into queue2 (including EOS), upstream will no longer
+	  chain into queue2, so it is up to queue2 to perform some
+	  EOS handling / message posting in such cases.  See #589991.
+
+2009-08-06 12:58:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: change default slave method
+	  Set the default slave method to the much better skew slaving algortihm.
+
+2009-08-06 12:01:10 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: make buffer writable
+	  Make the input buffer writable before changing its contents.
+
+2009-08-06 09:55:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: fix postscript typefinder probability
+	  Two bytes for a rare format hardly warrants MAXIMUM typefinding
+	  probability, POSSIBLE seems more appropriate.
+
+2009-08-04 14:55:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  pango: Send queries from the srcpad directly to the video sinkpad
+
+2009-08-04 14:32:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Implement POSITION query
+
+2009-08-04 14:29:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/samiparse.c:
+	  subparse: Implement SEEKING query
+
+2009-08-04 14:14:53 +0200  John Millikin <jmillikin@gmail.com>
+
+	* configure.ac:
+	* gst-libs/gst/tag/gstid3tag.c:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  tag: Add support for ALBUM_ARTIST tag in vorbiscomments and ID3v2 tags
+	  Require latest core for this.
+	  Fixes bug #590430.
+
+2009-08-04 12:46:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  pango: Add support for xRGB and BGRx formats
+
+2009-08-04 12:22:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  pango: Fix endianness issues from the pangocairo switch
+	  cairo's ARGB is in native endianness, i.e. ARGB on big endian architectures
+	  and BGRA on little endian architectures.
+
+2009-08-04 12:11:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  pango: Re-add shading support which was dropped by a previous patch
+
+2009-08-04 11:58:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* ext/pango/gsttextoverlay.c:
+	  pango: Check if pangocairo supports vertical rendering and fix properties
+
+2009-08-04 11:45:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Use PROP_X instead of ARG_X consistently
+
+2009-08-04 11:42:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttimeoverlay.c:
+	  pango: Some minor cleanup
+
+2009-08-04 11:36:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  pango: Check for pangocairo instead of pangoft2
+
+2009-08-04 11:35:10 +0200  Young-Ho Cha <ganadist@chollian.net>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttextrender.h:
+	  pango: Use pango-cairo instead of pango-ft2
+	  pango-cairo will always use the native font rendering backend
+	  of the platform and provides better results.
+	  Fixes bug #340887.
+
+2009-08-04 10:35:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add SVG typefinder
+
+2009-08-04 10:29:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add postscript typefinder
+
+2009-07-30 15:08:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Use static caps again for MPEG4 typefinding
+
+2009-07-30 15:05:28 +0200  Arnout Vandecappelle <arnout@mind.be>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Implement better & more flexible MPEG4 typefinding
+	  This detects more MPEG4 streams as MPEG4.
+	  Fixes bug #556537.
+
+2009-07-30 14:04:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	  cddabasesrc: Allow to specify the device name in the URI
+	  The allowed URI scheme is now:
+	  cdda://(device#)?track
+	  Also allow every combination of uppercase and lowercase
+	  characters for the protocol part.
+	  Fixes bug #321532.
+
+2009-07-30 12:37:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Restrict width/height to 2^15 - 1
+	  Otherwise integer overflows will happen, resulting in segmentation faults.
+	  Fixes bug #590243.
+
+2009-07-29 14:55:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Fix indention of template header
+
+2009-07-29 14:10:35 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Clarify documentation about caps and linkage
+	  Fixes bug #589095.
+
+2009-07-29 07:42:05 +0200  Benjamin Gaignard <benjamin@gaignard.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Fix typefinding of SDP files
+	  Fixes bug #589574.
+
+2009-07-28 20:50:06 +0200  Kipp Cannon <kcannon@ligo.caltech.edu>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Take the output offsets from the input if possible
+	  Fixes bug #588915.
+
+2009-07-28 15:54:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Make sure to allocate enough memory for the temporary buffer
+	  and fix scaling of odd-height interlaced video.
+
+2009-07-28 15:18:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Fix interlaced scaling for I420
+	  ...and some other minor mistakes in the previous change.
+
+2009-07-28 14:12:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Include interlacing information in the AVPicture
+	  This later allows to handle interlaced AVPicture different than
+	  progressive ones which is needed for horizontally subsampled YUV
+	  formats, see bug #589242.
+
+2009-07-28 13:55:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: Add support for interlaced content
+	  videoscale is not mixing content of two seperate fields anymore
+	  and does scaling on every field separately.
+	  Fixes bug #588761.
+
+2009-08-06 01:44:24 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	  back to development -> 0.10.24.1
+
+2009-08-05 02:03:44 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-plugins-base.doap:
+	  Add 0.10.24 release to the doap file
+
+=== release 0.10.24 ===
+
+2009-08-05 00:56:58 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Release 0.10.24
+
+2009-08-05 00:38:40 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2009-08-01 17:26:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	* tests/check/gst/typefindfunctions.c:
+	  typefinding: fix detection of fLaC id packet in broken flac-in-ogg
+	  There are flac-in-ogg files without the usual flac packet framing
+	  and these files just have a 4-byte fLaC ID packet as first packet.
+	  We need to recognise the type just from these four bytes if we
+	  want oggdemux to recognise these streams correctly.
+
+2009-07-30 14:40:50 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/LINGUAS:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.24.5 pre-release
+
+2009-07-29 14:15:53 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: Don't assert on slightly different caps
+	  Plugins should not assert on incompatible caps, caps negotiation will
+	  fail anyway.
+
+2009-07-30 13:42:21 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: reset pending flush-stop flag in state_changed. (mostly) Fixes #590146.
+
+2009-07-30 09:28:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump Gtk+ requirement of GUI examples from 2.12 to 2.14
+	  The gio mount example needs GtkMountOperation, which is new in 2.14.
+
+2009-07-27 10:29:27 +0100  Balachandran C <balachandran_c@rediffmail.com>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc: set alsasrc->handle back to NULL when closing device
+	  Fixes crashes in gst_alsa_find_device_name() when probing or
+	  reading the device-name property (e.g. when doing a dot-file
+	  dump). Fixes #589797.
+
+2009-07-24 19:26:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gststreamselector.c:
+	  playbin: rename GType of stream selector pad to avoid clash with input-selector from -bad
+	  Rename the GType of the pads of playbin's internal stream selector
+	  element so they don't use the same type name as input-selector's
+	  pads. Fixes #589622.
+
+2009-07-24 13:39:55 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.23.4 pre-release
+
+2009-07-24 13:46:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/v4l/.gitignore:
+	  ignores: Ignore v4l probing example binary
+
+2009-07-24 09:35:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: recognise Kate spu subtitles as well
+	  Recognise spu-subtitles, SUB and K-SPU as valid categories for
+	  Kate subtitles as well.
+
+2009-07-24 00:42:16 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From fedaaee to 94f95e3
+
+2009-07-22 14:21:43 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Update spec file with latest changes
+
+2009-07-20 17:28:20 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/_stdint.h:
+	* win32/common/audio-enumtypes.c:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/video-enumtypes.c:
+	  0.10.23.3 pre-release
+
+2009-07-20 12:51:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: call send_event directly
+	  We can't call gst_element_send_event() from a streaming thread as it gets the
+	  state lock. Instead call the send_event method directly until we have a nice API
+	  for this in basesrc.
+	  Fixes #588746
+
+2009-07-03 04:42:24 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	  audiosink: Add stream-status messages
+	  Fixes #587695
+
+2009-07-03 04:41:05 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audiosrc: Add stream-status messages
+	  See #587695
+
+2009-07-20 10:53:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/adder/gstadder.c:
+	  gstadder: Don't forget to free pending events on flush/dispose.
+	  Fixes #588747
+
+2009-07-12 10:08:12 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/elements/adder.c:
+	  tests/adder: Add stream consistency checking. Fixes #588748
+
+2009-07-12 10:07:34 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: Make sure tags are properly serialized. Fixes #588746
+	  We do this by letting the basesrc base class handle the tags.
+
+2009-07-13 09:28:54 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: Collect incoming tag events and send them after newsegment. Fixes #588747
+
+2009-07-16 09:32:46 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: Check for empty tag strings. Fixes #588724
+
+2009-07-14 17:03:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstqueue2.c:
+	  queue2: fix leak and improve buffering
+	  Keep track of the max requested position and compare this to the write position
+	  in the temp file to get the current amount of buffered data.
+	  Fix memleak of all incomming buffers.
+	  Fixes #588551
+
+2009-07-15 17:40:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstinputselector.h:
+	* gst/playback/gstplay-marshal.list:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: use private copy of input-selector
+	  We shouldn't really depend on elements from -bad for stream
+	  selection in playbin2, so use a private copy of input-selector
+	  until the selector plugin is ready to be moved to -base or -good.
+	  Fixes #586356.
+
+2009-07-15 17:26:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstinputselector.c:
+	* gst/playback/gstinputselector.h:
+	  playback: add private copy of the input-selector from gst-plugins-bad
+	  Not hooked up yet though. See #586356.
+
+2009-07-14 19:00:36 +0200  Filippo Argiolas <filippo.argiolas@gmail.com>
+
+	* tests/examples/v4l/Makefile.am:
+	  examples: fix v4l probe example build
+	  Fixes bug #588550.
+
+2009-07-14 19:00:10 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.23.2 pre-release
+
+2009-07-14 16:24:10 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/LINGUAS:
+	* po/tr.po:
+	  Add Turkish translations
+
+2009-07-14 15:31:13 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/adder.c:
+	  adder: One more attempt to fix the adder test
+	  Give up and discard and recreate the alsasrc after checking it can
+	  be opened, due to some strange crash inside alsa when we don't.
+
+2009-07-14 15:06:41 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/adder.c:
+	  adder: Perform get_state() in the unit test
+	  Wait for the alsasrc to return to NULL after setting it to PAUSED for
+	  testing, otherwise it leads to segfaults later on.
+
+2009-07-14 14:39:32 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/adder.c:
+	  adder: Don't fail when alsasrc is unavailable
+	  Make the liveadder test succeed silently when it can't be completed
+	  either because alsasrc is unavailable, or because the device is
+	  inaccessible.
+
+2009-07-13 22:51:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: use subtitle/x-kate for Kate subtitle streams and application/x-kate for the rest
+	  Differentiate subtitle streams and lyrics/cracktastic/complex streams via
+	  the category string in the headers. This seems like a useful distinction
+	  to make, and also seems more future-proof. See #525743.
+
+2009-02-21 13:18:10 +0000  Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: add Kate caps to the list of accepted types
+	  See #525743.
+
+2009-07-13 21:56:46 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: treat uri-schemas incasesensitive
+	  Treat uri-schemas incasesensitive. This is mandated in rfc2396 section 3.1.
+	  Fixes not showing buffering messages e.g. for HTTP://...
+
+2009-07-13 21:54:47 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: simplify docs
+	  Make short-desc short - its used in the toc. Strip uneeded markup.
+
+2009-07-13 18:31:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/libgstnetbuffer.def:
+	* win32/common/libgstvideo.def:
+	  win32: Fix exports
+	  Remove methods from video base classes that have moved to -bad.
+	  Add gst_netaddress_to_string
+
+2009-07-13 17:56:58 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/examples/gio/.gitignore:
+	  ignores: ignore the giosrc-mounting example binary
+
+2009-07-13 17:54:40 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	  navigation: Add some partial documentation
+	  Add a general documentation blurb for the GstNavigation functionality.
+	  Still lacks some example code and detail on how to implement it.
+
+2009-07-13 17:52:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for Siren codec and make two descriptions non-translatable
+
+2009-07-13 12:23:20 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 5845b63 to fedaaee
+
+2009-07-13 18:21:49 +0200  Elliott Sales de Andrade <quantum.analyst at gmail.com>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add siren to the RIFF parser
+	  Add siren7 caps to the RIFF parser.
+
+2009-07-13 14:55:59 +0200  Filippo Argiolas <filippo.argiolas@gmail.com>
+
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/v4l/Makefile.am:
+	* tests/examples/v4l/probe.c:
+	  v4lsrc: add a simple test case for device probing
+
+2009-07-03 11:38:01 +0200  Filippo Argiolas <filippo.argiolas@gmail.com>
+
+	* configure.ac:
+	* sys/v4l/Makefile.am:
+	* sys/v4l/gstv4lelement.c:
+	  v4lsrc: optional support for device probing with gudev
+	  Enumerate v4l devices using gudev if available.
+	  Fixes bug #583640.
+
+2009-07-10 23:24:36 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: add since tags to docs
+
+2009-07-10 21:29:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: don't automatically start pipeline in DB
+	  Keep the pipeline paused when we detect download buffering. The user has to
+	  manually start the pipeline for now because we can't estimate when the buffering
+	  will finish or when we have underrun.
+
+2009-07-10 21:01:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstqueue2.c:
+	  queue2: flush differently, avoiding deadlocks
+	  Don't flush the file by closing and opening it but instead use g_freopen. This
+	  avoids a deadlock in shutdown because we emit the temp-location property change
+	  with the wrong lock held.
+
+2009-07-10 20:25:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: add a checkbox for progressive download
+
+2009-07-10 20:24:14 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Fix template construction
+	  Fix the construction of the temporary filename construction as the application
+	  name can be NULL and we don't want a separator between the prgname and the
+	  template.
+
+2009-07-10 20:04:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplay-enum.c:
+	* gst/playback/gstplay-enum.h:
+	* gst/playback/gstplaybin2.c:
+	  playbin2: add support for progressive download
+	  Add a new playbin2 flag (initially disabled) to enable progressive download
+	  buffering in uridecodebin.
+
+2009-07-10 19:59:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add download property
+	  Add a download property that will attempt to configure queue2 into progressive
+	  download buffering.
+	  Make sure we only enable download buffering for quicktime and flv formats.
+
+2009-07-10 19:49:46 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstqueue2.c:
+	  queue2: add temp-template property
+	  Add a new temp-template property so that queue2 can securely allocate a
+	  temporary filename. Deprecate the temp-location property for setting the
+	  location but still use it to notify the allocated temp file.
+
+2009-07-10 20:06:28 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: add a caps-property to avoid to need to plug a capsfilter afterwards
+	  Adder can only handle one common format accross the pads. Thus one needed to add
+	  a capsfilter afterwards and manage the caps. Now one can simply set the caps on
+	  the property.
+
+2009-07-10 18:59:05 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/adder.c:
+	  adder: skip live-seek text if we have no audiosrc, add new test
+	  The seek-test needs a real audiosrc. Also add a test that checks that adder is
+	  reusable. Finaly handle warnings as warnings to fix a assertion.
+
+2009-07-10 19:16:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosink.c:
+	  gio: Also post a "not-mounted" message from giosink
+
+2009-07-10 17:15:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/gio/giosrc-mounting.c:
+	  gio: Remove workaround for playbin2 bug in the sample application
+	  The playbin2 bug was #588078.
+
+2009-07-10 17:08:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Make it possible for READY->PAUSED to succeed after it failed the first time
+	  If READY->PAUSED failed in the source element we would've swapped
+	  the current and next group already. To allow READY->PAUSED to succeed
+	  after the first failure we have to swap the current and next group
+	  back again. This also ensure that we're again in the same state
+	  as before the failed state change and not at the next group.
+	  This was especially a problem for playbin2 pipelines that use the
+	  new mounting support in giosrc as the source would fail for READY->PAUSED
+	  the first time, the application mounts the location and then tries
+	  to go READY->PAUSED again (and this time it would succeed).
+	  Fixes bug #588078.
+
+2009-07-10 11:42:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* tests/examples/Makefile.am:
+	* tests/examples/gio/Makefile.am:
+	* tests/examples/gio/giosrc-mounting.c:
+	  gio: Add example application that shows how to handle the "not-mounted" message
+
+2009-07-10 11:24:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	  gio: Remove the experimental status from the GIO plugin
+	  Fixes bug #510417.
+
+2009-07-10 11:24:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosrc.c:
+	  gio: Add documentation for the new "not-mounted" and "file-exists" messages
+
+2009-07-09 13:45:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	  gio: Make sure that we have the correct stream position when starting
+
+2009-07-08 17:24:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	  gio: Make sure to flush the output stream if it shouldn't be closed
+	  Otherwise there might still be unwritten data after the element
+	  has stopped.
+
+2009-07-08 17:19:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesink.h:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiobasesrc.h:
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosrc.c:
+	  gio: Don't close the GIO streams for the giostream{src,sink} elements
+	  This makes it possible to do something useful with the streams
+	  after the element has stopped. Fixes bug #587896.
+
+2009-07-08 17:19:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/pipelines/gio.c:
+	  gio: Try to reuse the pipeline with the same stream objects
+
+2009-07-08 17:02:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	  gio: Improve the error message if a stream is already closed before usage
+
+2009-07-08 16:55:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosink.c:
+	  gio: Post a custom file-exists message on the bus if the file already exists
+	  An application can handle this message, remove the file in question
+	  and restart the pipeline again without showing an error.
+	  This fixes bug #529300.
+
+2009-07-08 16:54:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosrc.c:
+	  gio: Use OPEN_READ instead of NOT_FOUND if a location is not mounted
+
+2009-07-08 16:50:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosink.c:
+	  gio: Use OPEN_WRITE instead of OPEN_READ as error category in giosink
+
+2009-07-08 15:52:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiosrc.c:
+	  gio: Post a custom "not-mounted" message on the bus
+	  This allows applications to mount the GFile if possible and restart
+	  the pipeline instead of simply giving an error.
+
+2009-07-08 15:08:32 +0200  Philip Jägenstedt <philipj@opera.com>
+
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: Fix compilation when debugging is disabled
+	  Fixes bug #587980.
+
+2009-07-07 20:23:23 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesink.h:
+	* ext/gio/gstgiobasesrc.h:
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosink.h:
+	* ext/gio/gstgiostreamsink.c:
+	* ext/gio/gstgiostreamsink.h:
+	  gio: Add vfunc for requesting the stream for the sinks too
+
+2009-07-07 20:21:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesink.h:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosrc.c:
+	* ext/gio/gstgiostreamsink.c:
+	* ext/gio/gstgiostreamsrc.c:
+	  gio: Some more random cleanup
+
+2009-07-07 20:20:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgio.c:
+	* ext/gio/gstgiobasesink.c:
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiobasesrc.h:
+	* ext/gio/gstgiosink.c:
+	* ext/gio/gstgiosrc.c:
+	* ext/gio/gstgiosrc.h:
+	* ext/gio/gstgiostreamsink.c:
+	* ext/gio/gstgiostreamsrc.c:
+	* ext/gio/gstgiostreamsrc.h:
+	  gio: Update my mail address and copyright
+
+2009-07-07 20:18:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/gio/gstgiobasesrc.c:
+	* ext/gio/gstgiobasesrc.h:
+	* ext/gio/gstgiosrc.c:
+	* ext/gio/gstgiostreamsrc.c:
+	* ext/gio/gstgiostreamsrc.h:
+	  gio: General clean up and simplification
+	  The GInputStreams are now requested by a vfunc from
+	  the subclasses instead of relying that the subclass
+	  sets it until it's needed.
+	  This might also fix bug #587896.
+
+2009-07-06 22:31:12 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: keep sending newsegments after seeking
+	  Adder sends with timestamps from 0 upwards. After seeking we need to send
+	  new-segments to get correct positions-queries.
+
+2009-07-06 20:44:00 +0100  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/adder.c:
+	  adder: make test more robust
+	  Add audioconverts to the live-seeking test to make it negotiate.
+
+2009-06-30 17:19:50 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: use core performance log category
+
+2009-07-05 21:29:40 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/adder/gstadder.c:
+	  adder: Call set_flushing(TRUE) for flushing seeks *when* the streaming is stopped.
+	  This ensures that collectpads' cookie is properly updated so that when the streaming
+	  threads will restart and be checking for the flushing status of all pads there will
+	  be no inconsistent state.
+
+2009-07-05 18:01:38 +0200  Hans-Peter Nilsson <hp@gcc.gnu.org>
+
+	* ext/pango/gstclockoverlay.c:
+	  pango: Call tzset() before localtime_r()
+	  POSIX and your local friendly ctime(3) manual entry says that localtime_r isn't
+	  required to set the state variables that define the current timezone.  Indeed,
+	  glibc (at least 2.9) doesn't do this for subsequent calls.  The effect is that
+	  if the system timezone is changed for a running program between two calls to
+	  gst_clock_overlay_render_time, it won't be noticed.  For glibc, changing the
+	  timezone equals /etc/localtime being modified.
+	  Fixes bug #587676.
+
+2009-07-01 17:33:14 -0700  David Schleef <ds@schleef.org>
+
+	* ext/Makefile.am:
+	  build: remove spurious schroedinger reference
+
+2009-07-01 10:25:43 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	* ext/Makefile.am:
+	* ext/schroedinger/Makefile.am:
+	* ext/schroedinger/gstschro.c:
+	* ext/schroedinger/gstschrodec.c:
+	* ext/schroedinger/gstschroenc.c:
+	* ext/schroedinger/gstschroparse.c:
+	* ext/schroedinger/gstschroutils.c:
+	* ext/schroedinger/gstschroutils.h:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstbasevideocodec.c:
+	* gst-libs/gst/video/gstbasevideocodec.h:
+	* gst-libs/gst/video/gstbasevideodecoder.c:
+	* gst-libs/gst/video/gstbasevideodecoder.h:
+	* gst-libs/gst/video/gstbasevideoencoder.c:
+	* gst-libs/gst/video/gstbasevideoencoder.h:
+	* gst-libs/gst/video/gstbasevideoparse.c:
+	* gst-libs/gst/video/gstbasevideoparse.h:
+	* gst-libs/gst/video/gstbasevideoutils.c:
+	* gst-libs/gst/video/gstbasevideoutils.h:
+	  basevideo: send basevideo back to remedial school
+	  Move basevideo classes and schroedinger plugin to -bad.
+
+2009-07-01 12:54:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  netaddress: add constant for max len
+
+2009-07-01 12:48:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  netbuffer: add gst_netaddress_to_string
+	  Add function to serialize a net address to a string.
+	  API: GstNetAddress::gst_netaddress_to_string()
+
+2009-06-30 18:44:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: make fd:// uri use buffering too
+	  fd:// usually operate in push mode only and are thus suitable for buffering.
+
+2009-06-30 14:46:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/volume/gstvolume.c:
+	  volume: include "1.0=100%" in property description
+
+2009-06-30 14:45:51 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: remove unused property defs
+
+2009-06-29 17:11:50 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/multichannel.c:
+	  multichannel: rewrite the new doc comment a bit
+	  Its part of the audio lib.
+
+2009-06-29 14:34:02 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Avoid a segfault when the video sink fails to start
+	  Don't attempt to display the subpictures and segfault when the
+	  video sink failed to start (and hence the videochain is NULL).
+
+2009-06-29 15:14:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	  ringbuffer: add vmethod to clear the ringbuffer
+	  Add a vmethod so that subclasses can be notified when they should clear the data
+	  in the ringbuffer.
+
+2009-06-29 14:00:14 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff-media: Fix the fourcc caps property for VC-1/WMVA
+	  The caps property for carrying fourccs is 'format', not 'fourcc'
+
+2009-06-29 12:20:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: include in.h for FreeBSD compat
+	  Fixes #586920
+
+2009-06-29 12:20:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstapp.def:
+	  defs: add defs for new appsink buffer-list method
+
+2009-06-29 12:14:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsink.h:
+	  appsink: add docs and signals
+	  Add docs for the new callback.
+	  Add signals for the new buffer-list support.
+
+2009-06-29 10:24:36 +0200  Branko Subasic <branko@lnxbranko2.se.axis.com>
+
+	* tests/check/elements/appsink.c:
+	  Added unit tests for buffer list support in appsink.
+
+2009-06-17 11:12:08 +0200  Branko Subasic <branko@lnxbranko2.se.axis.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  Added buffer list support.
+
+2009-06-17 09:23:11 +0200  Branko Subasic <branko@lnxbranko2.se.axis.com>
+
+	* gst-libs/gst/app/gstappsink.h:
+	  Added buffer list support.
+
+2009-06-29 09:36:27 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: Include winsock2.h after defining WINVER.
+	  Similar to bug #587080.
+
+2009-06-29 09:31:40 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Moved a comment.
+
+2009-06-27 23:23:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/audio.c:
+	* gst-libs/gst/audio/multichannel.c:
+	  docs: add basic section docs for multichannel and relocate the ones for audio
+	  Add section docs for multichannel, so that it has a short desc in the toc too.
+	  Move the section docs in adio up, so that the follow the copyright like
+	  elsewhere.
+
+2009-06-26 21:11:45 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/v4l/gstv4lelement.c:
+	* sys/v4l/gstv4lsrc.c:
+	  v4l: open/close device in ready.
+	  Simillar change like in v4l2src. This allows probing feature in paused, where
+	  streaming is noit yet started.
+
+2009-06-10 17:05:22 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix initial volume handling also when reusing the element
+	  This is a follow-up to commit 452988, making it work correctly when the audio
+	  chain is reused.
+
+2009-06-26 21:48:58 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Define WINVER before including any win headers
+	  Fixes bug #587080.
+
+2009-06-27 00:50:54 +0300  René Stadler <mail@renestadler.de>
+
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: prevent crash if rounded up tag size exceeds data size
+	  When rounding up `tsize' exceeds the remaining buffer size, `size' underflows
+	  and an invalid read past the buffer data follows.
+
+2009-06-26 15:17:21 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/gstbasevideocodec.c:
+	  basevideocodec: By default don't allow caps changes on the srcpad
+	  This fixed playback of Dirac files with schrodec when upstream wants
+	  a different width/height, basevideocodec accepts this and then
+	  pushes buffers with new caps but content of the old caps.
+	  In the best case this will just result in wrong unit size and a
+	  failure in basestransform elements.
+
+2009-06-26 14:11:21 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* autogen.sh:
+	  autogen.sh: Use printf instead of 'echo -n'. Check for automake-1.1[01]
+	  Check for more automake command variants. Use printf instead of 'echo -n'
+	  for portability
+
+2009-06-26 13:41:38 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f810030 to 5845b63
+
+2009-06-26 13:14:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstscreenshot.c:
+	  screenshot: don't leak message
+
+2009-06-25 12:04:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: lower the h264 typefinder's probability
+	  A NEARLY_CERTAIN is absolutely not warranted given the kind
+	  of things it checks for. Even a LIKELY is probably not entirely
+	  appropriate.
+
+2009-06-24 15:13:56 +0100  Jan Schmidt <jan.schmidt@sun.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From f3bb51b to f810030
+
+2009-06-24 09:48:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for multipart
+	  So we get slightly nicer error messages when multipartdemux is missing.
+
+2009-06-23 18:07:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: only unflush when we flushed before
+	  Ass suggested by Stefan Kost:
+	  Keep track of when the sinkpad was set to flushing and unflush the pad when an
+	  upstream flushing seek failed.
+
+2009-06-23 15:10:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: fix leak when the source fails to change state
+
+2009-06-23 12:40:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/subparse/gstssaparse.c:
+	  ssaparse: avoid leaking all buffers
+
+2009-06-22 22:18:03 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/elements/adder.c:
+	  adder: test seek handling in adder
+	  This tests seeking on an adder that has a normal and a live source connected.
+	  Wheter the current behavior is the desired one needs to be discussed still
+	  (see #586033)
+
+2009-06-22 16:17:10 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: pass the xwindow along to not look at the yet unset var.
+	  When we call this from xwindow_new, x(v)imagesink->xwindow is not yet set.
+
+2009-06-22 11:40:33 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  x(v)imagesink: catch tags and show title in own window
+	  Refactor the code that sets the window title. Catch tag-events and use title
+	  metadata for the window title.
+
+2009-06-21 19:42:15 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: Name gaussian noise "gaussian-noise" instead of just "gaussian"
+	  Also make all the function arrays constant.
+
+2009-06-21 12:27:37 +0200  Kipp Cannon <kcannon@ligo.caltech.edu>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: Add support for generating gaussian white noise
+	  This patch adds support for stationary white Gaussian noise.
+	  The Box-Muller algorithm is used to generate pairs of independent
+	  normally-distributed random numbers.
+	  Fixes bug #586519.
+
+2009-06-20 23:46:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Fix NV12 and NV21 transformations
+	  Fix some stride problems, fix the nv12 to nv21 direct transformation,
+	  and implement a direct conversion to yuv444 to save CPU.
+
+2009-06-20 22:36:21 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Fix NV12 painting for odd strides/heights
+
+2009-06-19 22:16:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	  cdparanoia: run-time license is LGPL now that we require cdparanoia 0.10.2
+	  cdparanoia has an LGPL v2.1 license since 0.10.1 and we now require 0.10.2.
+	  Finally fixes #531035.
+
+2009-06-19 21:25:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	  cdparanoia: try to guess a good cache size if it's set to -1
+	  Try to guess from the paranoia-mode setting whether playback or
+	  ripping is wanted, and use a smaller cache size if we're likely
+	  to be doing playback, to avoid a long startup delay. Since this
+	  was the value used in older cdparanoia versions, it should be
+	  fine in any case. See #586331.
+
+2009-06-19 11:27:40 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* configure.ac:
+	* ext/cdparanoia/gstcdparanoiasrc.c:
+	* ext/cdparanoia/gstcdparanoiasrc.h:
+	  cdparanoia: expose cache size setting
+	  This setting was added in cdparanoia 10.2.  The default value is good
+	  for audio extraction, but lower values (previous versions of cdparanoia
+	  used 150) are better for realtime playback.
+	  Fixes #586331.
+
+2009-06-19 17:43:03 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Make build of schro plugin conditional
+
+2009-06-19 15:52:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	* win32/common/libgstrtp.def:
+	  basertppayload: add support for bufferlists
+	  Based on patch from Ognyan Tonchev.
+	  See #585559
+
+2009-06-19 15:33:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: use new convenience functions
+	  New core convenience functions makes the list getters and setters trivial.
+	  Maybe even too trivial...
+
+2009-06-18 19:07:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtp.def:
+	  defs: add new symbol to win32 defs file
+	  Based on patches by Ognyan Tonchev.
+	  See #585559
+
+2009-06-18 19:04:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: cleanups, add _list_get_seq() too
+	  Clean up the docs a little.
+	  Add missing _list_get_seq method.
+	  Add new symbols to the docs
+
+2009-06-18 18:47:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* win32/common/libgstrtp.def:
+	  rtp: cleanups
+	  Add Since tags to docs
+	  Move some code around
+	  Add win32 symbols
+
+2009-06-18 17:46:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	* tests/check/libs/rtp.c:
+	  rtp: add bufferlist support
+
+2009-06-18 18:03:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: pass data to macros instead of GstBuffer
+
+2009-06-18 17:42:10 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Add gst_rtsp_watch_queue_data() to the exports
+	  Fix the tests by exporting the new symbol from the win32 dlls
+
+2009-06-18 18:13:22 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: appname might be NULL
+	  Don't set title if appname is unknown.
+
+2009-06-18 17:58:06 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: set window title from application name
+
+2009-06-09 19:14:00 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  rtsp: Made the parsing of the RTSP URL scheme more generic.
+
+2009-06-15 13:58:26 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Added gst_rtsp_watch_queue_data().
+	  gst_rtsp_watch_queue_data() is similar to gst_rtsp_watch_queue_message()
+	  but allows for queuing any data block for writing (much like
+	  gst_rtsp_connection_write() vs. gst_rtsp_connection_send().)
+	  API: gst_rtsp_watch_queue_data()
+
+2009-06-09 16:37:09 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Only extract the session ID from RTSP responses.
+
+2009-06-09 19:06:57 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  rtsp: Added support for parsing IPv6 addresses in RTSP URLs.
+
+2009-06-09 14:31:18 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Use getaddrinfo() to support both IPv4 and IPv6.
+
+2009-06-17 15:37:53 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Improved base64 decoding in fill_bytes().
+	  The base64 decoding in fill_bytes() expected the size of the read data to
+	  be evenly divisible by four (which is true for the base64 encoded data
+	  itself). This did not, however, take whitespace (especially line breaks)
+	  into account and would fail the decoding if any whitespace was present.
+
+2009-06-17 14:00:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audiosrc: fix get_offset
+	  When we need to jump to the most recently captured sample, jump to where the
+	  next sample will be written instead of to some old data.
+	  Fixes #581460
+
+2009-06-17 13:18:18 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: free the ringbuffer when going to NULL
+	  Unparent and free the ringbuffer when going to NULL, like we do with the
+	  audiosrc element. We can do this now because we correctly manage the time
+	  jumping back to 0.
+
+2009-06-17 13:17:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audio: correctly handle short read/writes
+
+2009-05-05 15:37:54 +0300  René Stadler <rene.stadler@nokia.com>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: add some extra logging for buffer timestamps
+
+2009-06-17 11:22:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: more seeking fixes.
+	  When a seek failed upstream, make sure the adder sinkpad is set unflushing again
+	  so that streaming can continue.
+	  We only have a pending segment when we flushed.
+	  Set the flush_stop_pending flag inside the appropriate locks and before we
+	  attempt to perform the upstream seek.
+	  Add some more comments.
+	  Use the right lock to protect the flags in flush_stop.
+	  See #585708
+
+2009-06-17 07:24:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Free iterator after removing all groups
+
+2009-06-16 19:38:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/gstvideofilter.c:
+	  videofilter: Add a default get_unit_size function
+	  This returns the correct values for all formats that are handled by
+	  GstVideoFormat and makes all the custom get_unit_size functions in
+	  many elements unnecessary.
+
+2009-06-16 18:57:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: add Timestamp header field
+	  fixes #585994
+
+2009-06-16 18:15:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: set smarter target state on uridecodebin
+	  Set the target state of the newly added uridecodebins to somthing else that
+	  PAUSED so that we keep their state in sync with the playsink state.
+	  Fixes #585268
+
+2009-06-16 18:13:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: set the sink flag on the element
+
+2009-06-16 18:09:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add debug message
+
+2009-06-16 14:05:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audiosink, audiosrc: do the class_ref()s in the right class_init functions
+	  Spotted by Philip Jägenstedt. Hopefully fixes #585970 for real.
+
+2009-06-15 15:39:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audiosink,audiosrc: ref the audio ring buffer class and type in class_init
+	  Hack around thread-safety issues in GObject and our racy _get_type()
+	  functions (we could easily fix the _get_type() functions, but we still
+	  need to hack around the GObject class races until we require a newer
+	  GLib version, I think).
+
+2009-06-15 12:57:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audiosrc: return FALSE when receiving a SEEK event
+	  When receiving a seek event, return FALSE as we don't implement seeking.
+
+2009-06-15 11:06:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  Don't use deprecated GTK API
+	  Fixes bug #585758.
+
+2009-06-15 11:40:00 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: send flush_stop when seeking failed
+	  At least do the fix to sent the flush_stop when seeking failed to ensure we
+	  keep no pads flushing. before it was send when the seeking worked which is just
+	  plain wrong and was not the intention.
+
+2009-06-12 15:17:14 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Use a more consistent naming of GstRTSPRec variables.
+
+2009-06-12 15:11:05 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Call message_sent() callback for all sent messages.
+	  Previously the messages_sent() callback was only called for messages
+	  which had a CSeq, which excluded all data messages. Instead of using the
+	  CSeq as ID, use a simple index counter.
+
+2009-06-14 22:13:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/theora/theoradec.c:
+	* ext/vorbis/vorbisdec.c:
+	  oggdemux: post/send tags with the container-format tag
+	  For this to work properly, theoradec and vorbisdec need to put
+	  tag events received from upstream into the pending_events list
+	  so they get pushed out after any newsegment event, not before.
+
+2009-06-14 20:30:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	* tests/old/examples/seek/cdplayer.c:
+	  Don't use deprecated GTK API
+	  Fixes bug #585758.
+
+2009-06-12 16:31:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/adder/gstadder.c:
+	  adder: send flush-stop earlier
+	  When no flush-stop has been sent by upstream, we have to send one ourselves to
+	  continue playback. Do this as soon as the collect function is called instead of
+	  after we possibly pushed segment events (that got then flushed out)
+
+2009-06-12 13:55:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: add shuttle controls
+
+2009-06-12 13:55:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/stepping2.c:
+	  example: fix compile
+
+2009-06-12 13:52:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/Makefile.am:
+	  examples: build the stepping2 example
+
+2009-06-12 13:52:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: update for new step API
+
+2009-06-12 13:22:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do reverse seeks more accurate
+	  For reverse seeking with the accurate flag set, try to be more precise by
+	  seeking a little bit after the requested position.
+
+2009-06-11 22:32:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/ogg/gstogmparse.c:
+	* gst/subparse/gstssaparse.c:
+	* gst/subparse/gstssaparse.h:
+	* gst/subparse/gstsubparse.c:
+	* gst/subparse/gstsubparse.h:
+	  subparse, ogmparse: post tags with GST_TAG_SUBTITLE_CODEC
+	  Make subtitle parsers post a taglist with codec tags, so the application
+	  knows what kind of subtitle a subtitle stream is. Fixes #576552.
+
+2009-06-11 19:12:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	  ringbuffer: handle border cases in resampler
+
+2009-06-11 13:28:20 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	* docs/libs/Makefile.am:
+	* docs/plugins/Makefile.am:
+	  docs: Update common. Use upload-doc.mak instead of upload.mak
+
+2009-06-11 12:39:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  docs: fix typo
+
+2009-06-11 12:17:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: reset accum when dropping samples
+	  When we are resampling and we drop samples because we paused, reset the accum
+	  counter because it's now invalid.
+
+2009-06-11 11:16:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/video/gstbasevideodecoder.h:
+	  docs: Fix a couple of warnings from the docs build.
+
+2009-06-10 21:36:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/testchannels.c:
+	  Don't include config.h multiple times when build audio testchannel app.
+	  Fixes build problem on win32 (#585075).
+
+2009-06-10 16:56:51 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playbin2/uridecodebin: Fix connection-speed propagation
+	  uridecodebin expects the passed connection-speed value in kbps, so we
+	  need to divide the value stored in bps by 1000. Also, lower the upper
+	  limit on the properties to the value that we can actually store in our
+	  internal guint (which is plenty high enough)
+
+2009-06-10 14:37:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/subparse/gstsubparse.c:
+	* tests/check/elements/subparse.c:
+	  subparse: recognise more subrip timestamp variants
+	  Be even less restrictive in what we accept for .srt timestamps when
+	  typefinding and parsing subrip subtitles and add a unit test for
+	  the 'new' format. Fixes #585197.
+
+2009-06-09 22:00:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: add some more docs
+
+2009-06-09 18:24:55 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: Avoid a compiler warning.
+
+2009-06-09 18:23:28 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: Updated documentation for GstRTSPResult.
+	  Moved GST_RTSP_ELAST to be last in the documentation to match the actual
+	  enum values.
+
+2009-05-20 17:30:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* autogen.sh:
+	  autogen: remove -Wno-portability from here
+	  as it is in configure.ac now.
+
+2009-06-09 16:28:20 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Plug a memory leak.
+	  Free memory related to any partially read and/or written RTSP messages.
+
+2009-06-09 12:09:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: no need to cause discont when clipping
+	  Remove the discont-when-clipping hack now that basesink provides us with
+	  correctly clipped samples when stepping.
+
+2009-06-08 17:26:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: don't align when we clip
+	  Don't align samples when they were clipped. Not entirely correct but better than
+	  nothing for now.
+
+2009-06-08 16:41:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/.gitignore:
+	* tests/examples/seek/stepping2.c:
+	  examples: add stepping example in PLAYING
+	  Add stepping example in PLAYING, audio is a bit distorted because basesink does
+	  not provide good clipping info yet.
+
+2009-06-08 10:25:00 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for hdv/aux-* formats.
+
+2009-06-07 22:20:33 +0400  LRN <lrn1986@gmail.com>
+
+	* ext/schroedinger/Makefile.am:
+	  Added libgstbase to schro's LIBADD
+	  Fixes #585079
+
+2009-06-06 02:15:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	  libgsttag: don't extract genres from empty ID3v1 tags
+	  If we don't have any other info, don't try to interpret the
+	  genre field. In particular we don't want to interpret a genre
+	  of 0 as 'Blues' if no other fields are set and the entire tag
+	  is just empty.
+
+2009-06-05 18:13:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: make sure varargs are of right type
+	  Explicitly cast the variables to g_object_set to their right types.
+
+2009-06-05 16:49:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: increase stream probing queues
+	  When we are probing for streams, we want to set the queue size in such a way
+	  that we can scan a maximum amount of data without consuming too much memory.
+	  Therefore, remove the time limit on the queue and only stop scanning after 2MB
+	  of data.
+	  See #584104.
+
+2009-06-05 14:06:17 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Fixed a typo.
+
+2009-06-05 14:05:54 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Remove an unused variable.
+
+2009-06-05 13:59:14 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Removed duplicate initialization of conn->writefd.
+
+2009-06-05 13:55:08 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Use #defined status codes.
+
+2009-06-05 13:53:29 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Correct gen_tunnel_reply().
+	  Prevent gen_tunnel_reply() from generating an incomplete response
+	  in case an error response code is given.
+
+2009-06-05 10:57:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	  configure: remove AC_C_INLINE which is not needed and causes problems with MSVC
+	  See #584835. Also update win32 files while we're at it.
+
+2009-06-04 08:57:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: API: Add {audio,video,text}-tags-changed signals
+	  Fixes bug #584686.
+
+2009-06-03 20:42:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: don't put invalid bitrate values into the taglist
+	  Bitrates are stored as 32-bit signed integers in the vorbis
+	  identification headers, but seem to be read incorrectly,
+	  namely as unsigned 32-bit integers, into the vorbis structure
+	  members which are of type long, which makes our check for
+	  values <= 0 fail with files that put -1 in there for unset
+	  values.
+
+2009-06-03 15:52:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/.gitignore:
+	  ignore: add new stepping app to ignore
+
+2009-06-03 15:31:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/Makefile.am:
+	* tests/examples/seek/stepping.c:
+	  examples: add stepping example.
+	  Add an example of using playbin2 and frame stepping to simulate variable rate
+	  playback based on a sine wave.
+
+2009-06-03 12:45:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: also set custom text and subp sinks
+	  Set the custom subpicture and text sinks along with the custom audio and video
+	  sinks when needed.
+	  Fix a little docs blurb too.
+
+2009-06-02 12:10:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: add G_LIKELY because we can
+
+2009-06-02 09:53:05 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Fix caps for ogg typefinder.
+
+2009-05-29 11:10:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: remove some cruft from -sections.txt file
+
+2009-06-01 11:31:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* tests/examples/seek/seek.c:
+	  add framestepping to playbin2 and seek
+
+2009-06-01 09:59:22 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Avoid compiler warnings with -Wextra.
+
+2009-06-01 09:58:27 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: Include gst/gstconfig.h to make sure GST_PADDING is defined.
+
+2009-06-01 09:43:04 +0200  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: Remove an unused variable.
+
+2009-05-30 14:17:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add a lot more conversions from/to 16 bit grayscale
+
+2009-05-29 00:09:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Have playbin recognise PGS subpicture streams
+	  Recognise PGS subpicture streams and connect them to the SPU pad
+	  in playsink. Unfortunately this fails badly with negotiation errors
+	  if the SPU is not recent enough to support the stream. I'm not sure
+	  how to add format negotiation in yet.
+
+2009-05-21 23:11:29 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  decodebin/uridecodebin: Recognise subpicture/x-pgs pads and output them.
+
+2009-05-28 20:37:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix volume handling for audio sinks without "volume" property
+	  When using an audio sink without a "volume" property, volume control
+	  would only work for the first song. For the next song, we'd try to
+	  re-use the existing audio chain, but inadvertently set chain->volume
+	  to NULL instead of to the existing volume element.
+
+2009-05-28 17:05:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: cosmetic change to avoid unnecessary line breaks
+	  Looks nicer and works around gst-indent silliness.
+
+2009-05-28 17:21:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: don't lose the ref to the volume element
+	  Only release the ref to the volume element when it is controled by a sink. For
+	  software volume we never have to fear that it will change.
+
+2009-05-28 15:21:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	  playbin2: actually use configured audio/video sinks
+	  playbin2 inadvertently used autoaudiosink and autovideosink up to now,
+	  since it would overwrite the sinks configured via the "audio-sink"
+	  and "video-sink" properties with the stream-specific group sinks when
+	  configuring the outputs. Those are usually NULL however, so that would
+	  overwrite the configured sinks with NULL which makes playbin2 then
+	  default to the auto sinks. Fix this by keeping a reference to each
+	  configured sink in playbin2 and setting up the right sinks depending
+	  on whether there is a stream-specific sink or not.
+	  Fixes #584020.
+
+2009-05-27 17:37:38 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/seek/seek.c:
+	  seek: add volume label and sync with sink volume
+	  Look at the volume and have the pulsemixer open at same time. Unfortunately
+	  playbin2 does not emit notify on volume right, so this polls for now.
+
+2009-05-27 18:12:10 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: remove leftover elements
+	  Remove all of the elements inside decodebin2 when goint to READY and NULL.
+	  Makes decodebin2 reusable.
+	  Fixes #583750
+
+2009-05-27 15:36:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2; release refs to volume/mute properties
+	  Release the refs to the volume and mute property elemens before setting the
+	  child elements to READY or NULL.
+	  Fixes #583318
+
+2009-05-27 12:10:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gdp/gstgdppay.c:
+	  gdppay: set caps on outgoing buffers
+	  Set caps on outgoing buffers because NULL caps confuse basetransform.
+	  Fixes #583867
+
+2009-05-27 11:08:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  netbuffer: also note the order of IP4 addresses
+	  IP4 addresses are also stored in network byte order. Make a note of this in the
+	  docs.
+
+2009-05-26 22:43:34 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+	* ext/theora/theoraparse.c:
+	  theoraparse: fix assertions in make_granulepos when using the new theora granulepos mapping. Fixes #583903.
+
+2009-05-26 11:13:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Revert "rtspconnection: don't use GLib-2.16 API, we require only 2.14"
+	  This reverts commit 418760cf740332c12c3fd9cf3244af134fa9534b.
+	  We now require GLib 2.16.
+
+2009-05-26 15:18:09 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Update common
+
+2009-05-26 15:37:18 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  netbuffer: document that the port is network order
+	  Document the fact that we store the port number in network order in
+	  GstNetAddress and that the caller should byteswap appropriately.
+
+2009-05-26 15:23:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	* gst/videoscale/vs_image.c:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_scanline.c:
+	* gst/videoscale/vs_scanline.h:
+	  videoscale: Add support for 16 bit grayscale in native endianness
+
+2009-05-26 14:58:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Add support for 16 bit grayscale in little/big endian
+
+2009-05-26 14:38:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: Add support for 16 bit grayscale in native endianness
+
+2009-01-21 12:33:59 +0100  Andy Wingo <wingo@oblong.net>
+
+	  add can-activate-pull property to baseaudiosink
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: Add can-activate-pull property
+	  to baseaudiosink.
+
+2009-05-26 13:14:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix boundary case for seeking.
+	  When we have exactly 0 bytes left to search, make sure we stop instead of going
+	  into an infinite loop.
+
+2009-05-26 11:11:03 +0200  Bastien Nocera <hadess at hadess.net>
+
+	* gst-libs/gst/cdda/Makefile.am:
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* gst-libs/gst/cdda/sha1.c:
+	* gst-libs/gst/cdda/sha1.h:
+	  cddabasesrc: Remove copy of sha1 digest
+	  Remove our copy of sha1 digest now that we depend on glib 2.16.
+	  Fixes #536313
+
+2009-05-25 17:54:01 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+	* gst-plugins-base.spec.in:
+	  Update spec file
+
+2009-05-23 00:33:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/video/gstbasevideodecoder.c:
+	* gst-libs/gst/video/gstbasevideoparse.c:
+	* gst-libs/gst/video/gstbasevideoutils.c:
+	* gst-libs/gst/video/gstbasevideoutils.h:
+	* win32/common/libgstvideo.def:
+	  video: don't expose internal gst_adapter_get_buffer() helper function
+	  If it's really needed it should go into GstAdapter in core.
+
+2009-05-22 21:29:51 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/gstbasevideodecoder.c:
+	  basevideo: Fix memleak
+
+2009-05-22 21:27:58 -0700  David Schleef <ds@schleef.org>
+
+	* ext/schroedinger/gstschrodec.c:
+	* ext/schroedinger/gstschroparse.c:
+	  schro: Fix usage of adapter_masked_scan_uint32
+	  Because *somebody* changed the API without telling me.
+
+2009-05-22 21:25:06 -0700  David Schleef <ds@schleef.org>
+
+	* ext/schroedinger/gstschro.c:
+	  schro: Change package name to GST_PACKAGE_NAME
+
+2009-05-22 17:34:10 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/gstbasevideoencoder.c:
+	  basevideo: Add preset interface to encoder
+
+2009-05-22 17:31:14 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  Run liboil benchmark multiple times
+	  The statistics function requires multiple runs, otherwise
+	  it causes a divide by zero error.
+
+2009-05-22 19:36:06 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* m4/gst-fionread.m4:
+	  m4: fix 'suspicious cache value' warning for gst-fionread.m4
+	  .. here as well (should really be moved to common, but I'm too lazy).
+
+2009-05-22 17:41:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: detect and report errors better
+	  Check the return values of a couple more libvorbis functions and post an error
+	  when something is wrong instead of continuing and crashing.
+
+2009-05-22 15:49:14 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix initial volume and mute handling
+	  Use two flags to remember volume/mute changes at times when we don't have the
+	  audiochain yet (e.g. construction). Only set values when they were actualy
+	  changed. This makes pulseaudio's stream restore functional.
+
+2009-05-22 10:19:51 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From d3a8fab to 888e0a2
+
+2009-05-22 09:03:22 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/libgstvideo.def:
+	  win32: Remove gst_adapter_masked_scan_uint32 from the exports
+
+2009-05-21 10:48:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: improve debug message
+
+2009-05-19 18:10:55 -0700  Michael Smith <msmith@songbirdnest.com>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	  gstid3tag: Don't extract a track number unless present.
+	  In ID3v1, a track number is present only if byte 125 is null AND
+	  byte 126 is non-null. If the track number is not present, don't add
+	  a track number tag with value 0.
+
+2009-05-20 00:48:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/video/gstbasevideoutils.c:
+	* gst-libs/gst/video/gstbasevideoutils.h:
+	  videoutils: remove adapter methods
+	  Remove adapter methods now that they are in core.
+
+2009-05-20 00:42:29 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  defs: add new symbols
+
+2009-05-19 17:47:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  autogen: pass -Wno-portability to automake to suppress warnings
+	  GNU make is needed.
+
+2009-05-19 02:28:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/.gitignore:
+	  gitignore: remove bogus *.sgml wildcard - these files are tracked in git
+
+2009-05-19 18:41:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gsttcpclientsrc.c:
+	  tcpclientsrc: this is not a live source
+	  Don't mark us as a live source because we are not.
+
+2009-05-19 18:41:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: only send flush_stop when seek failed
+	  This is still not the ultimate fix. Added some comment to explain the troubles.
+
+2009-05-19 17:17:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  audiosink: return the return value of wait_preroll
+	  Return the value that _wait_preroll() returned instead of always WRONG_STATE.
+
+2009-05-19 16:45:56 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  adder: send flush_stop to match flush_start
+	  Adder was relying that something else sends a flush stop. When using adder with
+	  a livesource it was not getting a flush_stop and thus all pads downstream where
+	  keept flushing. Mark a pending flush_stop and send it when we are working on
+	  the new segment back in the streaming thread.
+
+2009-05-19 16:02:44 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/seek/seek.c:
+	  seek: ui improvements
+	  Repaint the window black on expose, as this looks nicer when resizing or using
+	  the expander. Also show time after slider, as this saves a whole line (nice on
+	  small displays).
+
+2009-04-29 18:36:17 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstdecodebin.c:
+	  decodebin: use iterators instead of list
+	  The list api is deprecated. Use threadsafe iterators instead.
+
+2009-05-19 15:35:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: configure caps on decodebin2
+	  Implement the caps property by setting the configured caps on new decodebin2
+	  objects.
+	  Fixes #582749
+
+2009-05-19 15:34:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: avoid some _caps_ref in some cases
+	  Only mess with the caps refcount when we configure different caps.
+
+2009-05-19 15:27:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: fix potential caps leak
+	  Free the user-configured caps in finalize.
+
+2009-05-19 15:20:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: add queue after cdda://
+	  Add a queue2 after the raw output pads of certain sources such as those for uris
+	  like cdda://
+	  No tuning of the queue is done yet as the defaults seem to work fine for me.
+	  Fixes #582528
+
+2009-05-19 12:45:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't loop when at EOS
+	  When we try to read the last page, don't try to read past the upper boundary, as
+	  this might cause endless loops.
+	  See #582942
+
+2009-05-19 11:20:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Don't drain remaining buffers after a flush.
+	  If we were resetted (due to a flush), we can not drain the remaining
+	  buffers since they would be pushed before a valid new newsegment event.
+
+2009-05-18 22:29:07 -0700  Michael Smith <msmith@syncword.(none)>
+
+	* ext/theora/theoradec.c:
+	  theoradec: for 4:2:2, use Y42B (planar) rather than a packed format.
+
+2009-05-19 01:13:34 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: add more logging and return value checking
+
+2009-05-19 01:11:45 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: handle the return value from iterator_fold
+
+2009-05-19 01:03:44 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: use the pad in logging as objects
+	  Helps to differenciate between source and sinks pads.
+
+2009-04-21 22:54:19 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/seek/seek.c:
+	  seek: use parser for mp3 and rename variable
+
+2009-05-18 11:08:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: add playbin2 options in expander
+	  Add the playbin2 stream selection options inside an expander to preserve some
+	  space on screen.
+
+2009-02-10 15:29:10 -0800  David Schleef <ds@schleef.org>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add support for v210 and v216 formats
+
+2009-05-15 16:21:15 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/gstbasevideocodec.c:
+	* gst-libs/gst/video/gstbasevideodecoder.c:
+	* gst-libs/gst/video/gstbasevideoencoder.c:
+	* gst-libs/gst/video/gstbasevideoparse.c:
+	  video: remove // comments
+
+2009-05-15 16:18:18 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add Y444, v210, v216 formats
+
+2009-05-15 16:12:37 -0700  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	* ext/Makefile.am:
+	* ext/schroedinger/Makefile.am:
+	* ext/schroedinger/gstschro.c:
+	* ext/schroedinger/gstschrodec.c:
+	* ext/schroedinger/gstschroenc.c:
+	* ext/schroedinger/gstschroparse.c:
+	* ext/schroedinger/gstschroutils.c:
+	* ext/schroedinger/gstschroutils.h:
+	  schro: Move schro plugin from Schroedinger
+	  Previous history is in Schroedinger.  Depends on, and is an example
+	  of using, GstBaseVideo* base classes.
+	  Code was reindented, and an #ifdef HAVE_ENCODER removed.
+
+2009-05-15 10:23:08 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstbasevideocodec.c:
+	* gst-libs/gst/video/gstbasevideocodec.h:
+	* gst-libs/gst/video/gstbasevideodecoder.c:
+	* gst-libs/gst/video/gstbasevideodecoder.h:
+	* gst-libs/gst/video/gstbasevideoencoder.c:
+	* gst-libs/gst/video/gstbasevideoencoder.h:
+	* gst-libs/gst/video/gstbasevideoparse.c:
+	* gst-libs/gst/video/gstbasevideoparse.h:
+	* gst-libs/gst/video/gstbasevideoutils.c:
+	* gst-libs/gst/video/gstbasevideoutils.h:
+	  video: Copy BaseVideo classes from Schroedinger
+
+2009-05-15 23:05:45 +0200  Arnout Vandecappelle <arnout@mind.be>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: add num-fds property
+	  multifdsink::num-fds
+
+2009-05-15 20:36:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add descriptions for 3GP, JPEG 2000 and Motion JPEG 2000
+
+2009-05-14 11:44:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/vorbis/vorbisenc.c:
+	  vorbisenc: Implement Preset interface
+
+2009-05-14 11:43:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/theoraenc.c:
+	  theoraenc: Implement Preset interface
+
+2009-05-14 11:41:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Implement Preset interface
+
+2009-05-14 21:37:22 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: Fix cdda:// playback
+	  Don't send async-start when the playsink has already been configured
+	  before changing state.
+
+2009-05-14 01:31:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: require core CVS for gst_adapter_prev_timestamp()
+	  which is used in the libvisual plugin.
+
+2009-04-22 18:34:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* AUTHORS:
+	  AUTHORS: fix my email
+
+2009-04-22 18:35:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: make our internal time monotonic
+	  Make the internal time increase monotonically.
+
+2009-05-13 19:27:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: remove next_ts variable
+	  We can remove the next_ts variable as we don't use it anymore.
+
+2009-05-13 19:24:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/libvisual/visual.c:
+	  visual: use new adapter timestamp code
+	  Use the new adapter timestamp tracking code to make things easier and produce
+	  vastly better output timestamps.
+
+2009-05-13 01:35:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* po/Makevars:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: avoid conflicts of local *.po files with files in git
+	  Make it so that filenames and line numbers are only stored in the *.pot file
+	  (which is not in git), but not in the individual *.po files. This information
+	  is hardly useful for translators in our case, and it should avoid the constant
+	  conflicts of local *.po files with the ones in git which are caused by the
+	  source files changing and the line numbers being updated. This commit might
+	  cause one last merge conflict for you, which you can work around with
+	  "git checkout po/*.po" before merging or pulling. After that there should
+	  (hopefully) not be any more local modifications of these files (unless
+	  someone committed additions or changes to translated strings and the
+	  *.po files haven't been updated yet, that is).
+
+2009-05-12 23:51:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/audioresample.c:
+	  tests: fix audioresample unit test on big endian architectures
+	  Don't hardcode endianness=1234 in the filtercaps, it will cause
+	  pad link failures which will result in the test timing out.
+
+2009-05-12 17:18:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: fix broken enum nick - it should have a hyphen
+	  The enum nick should be 'sine-table', not 'sine table'. Technically this is
+	  an API/ABI change I guess, but anyone who was using this and didn't report
+	  it deserves this.
+
+2009-05-01 01:04:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: seek to the requested byte offset, not the expected byte offset
+
+2009-05-01 01:03:06 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: support more than just one channel
+
+2009-05-12 15:52:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/propertyprobe.h:
+	  propertyprobe: Fix typo in the docs
+
+2009-05-12 12:17:55 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/theora/theora.c:
+	* ext/vorbis/vorbis.c:
+	  Add ranks to the Oggmuxer, Vorbis encoder and Theora encoder
+
+2009-04-30 16:37:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: handle invalid timestamps better
+	  Handle buffers with -1 timestamps better by keeping track of the en time of the
+	  previous buffer and assuming the -1 timestamp buffer goes right after the
+	  previous one.
+	  when we have two buffers that are equally good, output the oldest buffer once to
+	  minimize latency.
+	  don't try to calculate latency when the input framerate is unknown.
+
+2009-04-28 11:37:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: small debug statement in DISCONT
+
+2009-04-28 11:24:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: fix abuse of ogg API, handle broken oggs
+	  When we feed the ogg sync layer, we need to feed it contiguous data even if the
+	  sync layer did not consume all of it yet. This makes sure that it always finds
+	  the next page even for more corrupted files. Use a different read_offset for
+	  this purpose. since we now keep track of the sync layer, we don't have to reset
+	  after finding a start of a page.
+	  Add some more debug info for the error paths.
+	  Only reset the sync layer when we perform a seek operation.
+	  Avoid failure when the next chain has no bos pages but instead simply ignore it.
+	  when we receive unknown page serial numbers mid stream, don't fail but post a
+	  warning and hope that we get back on track later.
+	  Fixes #579642
+
+2009-04-30 16:41:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: make subpictures a raw output format
+	  Subpictures are a raw format, we want those pads exposed so that playbin2 can do
+	  the subpicture mixing.
+
+2009-04-27 10:15:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	  rtpdepay: add some more comments
+
+2009-04-17 10:54:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: make sure values are ever increasing
+
+2009-05-05 17:17:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: make fallback identity silent
+	  Set the signal-handoffs to FALSE and silent to TRUE for the fallback identity
+	  element so that it consumes less CPU.
+
+2009-04-17 10:57:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	  playbin2: handle custom audiosinks differently
+	  Keep track of the autoplugged custom sinks and configure them in the playsink
+	  element when we have collected all streams.
+	  Also make sure that we only select one custom sink.
+	  When unreffing the internal sink, we don't need to change the state to NULL.
+
+2009-05-12 10:36:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: unify custom sink get/set functions
+	  Use one function to set/get all of the different sink types.
+	  cleanup up the subpicture chain too.
+	  Allow setting a custom subpicture sink.
+
+2009-05-11 18:29:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/tunernorm.h:
+	  interfaces: Seperate some more struct definitions from typedefs
+
+2009-05-11 15:48:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/navigation.h:
+	* gst-libs/gst/interfaces/videoorientation.h:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	  interfaces: Seperate some more struct definitions from typedefs
+
+2009-05-10 17:28:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstinterfaces.def:
+	  Add new functions to win32 exports
+
+2009-05-10 17:28:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  Add new functions to the docs
+
+2009-05-10 17:25:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/mixer.c:
+	* gst-libs/gst/interfaces/mixer.h:
+	  interfaces: API: Add gst_mixer_get_mixer_type()
+	  This is a convenience function that returns the mixer_type
+	  of the interface struct.
+
+2009-05-10 17:25:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.c:
+	  interfaces: Add docs for gst_color_balance_get_balance_type()
+
+2009-05-10 11:17:19 +0200  Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+	* autogen.sh:
+	  Run libtoolize before aclocal
+	  This unbreaks the build in some cases. Fixes bug #582021
+
+2009-05-07 17:38:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Correctly initialize the background for ARGB too
+
+2009-05-07 16:59:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttextrender.h:
+	  textrender: Use libgstvideo functions to create caps
+	  Also check if downstream wants ARGB always when we get
+	  new caps.
+
+2009-05-07 16:52:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Don't always use ARGB if downstream supports it but take it's preference
+
+2009-05-07 16:48:08 +0200  Kapil Agrawal <kapil@mediamagictechnologies.com>
+
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttextrender.h:
+	  textrender: Add support for ARGB and alignment properties
+	  Fixes bug #581571.
+
+2009-05-07 16:42:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextrender.c:
+	  textrender: Add ; after GST_BOILERPLATE to fix indention
+
+2009-05-07 15:10:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Use text/uri-list as mimetype instead of ---> for URI lists
+
+2009-05-07 14:59:36 +0200  Arnout Vandecappelle <arnout@mind.be>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: made mp3_type_find less aggressive
+	  mp3_type_find could suggest already when only a single valid header
+	  was found, if it ran out of data before the end of the next frame.
+	  Therefore, ignore the last found frame if it was incomplete.
+	  Fixes bug #579692.
+
+2009-05-07 14:48:29 +0200  John Millikin <jmillikin@gmail.com>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Store cover art in vorbiscomments
+	  Fixes bug #513373.
+
+2009-05-07 06:14:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.c:
+	* gst-libs/gst/interfaces/colorbalance.h:
+	  interfaces: API: Add gst_color_balance_get_balance_type()
+	  This is a convenience function that returns the balance_type
+	  of the interface struct.
+
+2009-05-06 17:59:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/interfaces/colorbalance.h:
+	* gst-libs/gst/interfaces/colorbalancechannel.h:
+	* gst-libs/gst/interfaces/tuner.h:
+	* gst-libs/gst/interfaces/tunerchannel.h:
+	  interfaces: Separate struct definitions from typedefs
+
+2009-05-06 14:03:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* pkgconfig/gstreamer-app-uninstalled.pc.in:
+	  Fix libdir for uninstalled gstreamer-app library
+
+2009-05-12 01:59:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for APE tag caps
+
+2009-05-12 01:35:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump core requirement to last release
+	  as that's more likely to be true than that we need
+	  only 0.21.1.
+
+2009-05-12 01:21:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	* configure.ac:
+	  configure: rename CVS -> git in a couple of places
+
+2009-05-12 01:17:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	  configure: bump GLib requirement to GLib >= 2.16
+	  as per the New Regime (see wiki).
+
+2009-05-01 00:09:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: cache events from upstream and re-send them once we have a source pad
+	  Makes sure tags don't get dropped when we have multiple tag demuxers in a row.
+	  Fixes #580318.
+
+2009-05-07 14:07:44 -0700  Michael Smith <msmith@songbirdnest.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: support UYVY raw 4:2:2 in riff.
+
+2009-05-11 21:20:07 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	  Back to development -> 0.10.23.1
+
+2009-04-27 22:42:55 -0700  Michael Smith <msmith@syncword.(none)>
+
+	* ext/theora/theoradec.c:
+	  theoradec: fix buffer overrun on 422 decode.
+
+2009-04-27 21:39:01 -0700  Michael Smith <msmith@syncword.(none)>
+
+	* ext/theora/theoradec.c:
+	  theoradec: 444 support.
+
+2009-04-27 21:30:04 -0700  Michael Smith <msmith@syncword.(none)>
+
+	* ext/theora/theoradec.c:
+	  theoradec: handle 422 images (as YUY2).
+
+2009-04-27 21:01:51 -0700  Michael Smith <msmith@syncword.(none)>
+
+	* ext/theora/gsttheoradec.h:
+	* ext/theora/theoradec.c:
+	  theoradec: rearrange code in preparation for 422 and 444 support.
+
+=== release 0.10.23 ===
+
+2009-05-10 23:57:01 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  Release 0.10.23
+
+2009-05-10 23:56:05 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+
+2009-05-08 20:32:20 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.22.6 pre-release
+
+2009-05-08 13:09:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix resume after pause
+	  Don't ignore the state change of the children, they might be doing an ASYNC
+	  state change.
+
+2009-05-08 11:05:41 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  0.10.22.5 pre-release
+
+2009-05-07 22:01:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gsttcp-marshal.list:
+	  multifdsink: fix signature of the add-full signal
+	  The second parameter is a GstSyncMethod enum, not a boolean.
+
+2009-05-07 15:19:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: initialize variable too
+
+2009-05-07 14:28:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: make playsink go ASYNC to PAUSED
+	  Make playsink go async to the PAUSED state instead of relying on uridecodebin
+	  for async behaviour in playbin. This solves some problems (mainly with DVD)
+	  where the pipeline would go to PLAYING before preroll completed, failing to
+	  select the audiosink clock.
+	  Fixes #581727
+
+2009-05-06 16:09:52 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.22.4 pre-release
+
+2009-05-06 13:19:34 +0100  Zaheer Merali <zaheerabbas@merali.org>
+
+	* ext/theora/theoraenc.c:
+	* ext/vorbis/vorbisenc.c:
+	  vorbisenc, theoraenc: Ensure gp is computed consistently + clip to segment
+	  With vorbisenc, compute the granulepos with running time and clip incoming
+	  buffers to segment.
+	  With theoraenc, drop out of segment buffers.
+
+2009-05-01 16:47:53 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Fix buffer size transformations
+	  When calculating the input/output buffer sizes in the transform_size function,
+	  take the number of channels into account, so we don't end up calculating
+	  a buffer size that only contains a partial number of audio frames.
+	  Also, when going from output size to input size, round down rather than
+	  up, so as to calculate the minimum number of samples that *might* yield
+	  a buffer of the intended destination size.
+	  Fixes: #580470 and #580952
+
+2009-04-29 16:45:27 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ext/vorbis/gstvorbisenc.h:
+	* ext/vorbis/vorbisenc.c:
+	  vorbisenc: Ensure output buffers fall within the segment
+	  Add the start position of the first segment to the running time
+	  used to generate buffer timestamps in vorbisenc. This avoids generating
+	  buffers which fall outside the initial segment. The element segment
+	  handling requires more extensive fixing, but this at least prevents
+	  regressions. Fixes: #580020
+
+2009-04-29 11:18:42 +0200  Andy Wingo <wingo@oblong.net>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  Revert "add can-activate-pull property to baseaudiosink"
+	  This reverts commit c4074a2ee4f1e6cac734a145bf675bbb16fac985.
+
+2009-04-29 11:18:33 +0200  Andy Wingo <wingo@oblong.net>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  Revert "[baseaudiosink] add docs for can-activate-pull"
+	  This reverts commit 416ce16f26b39c76ab35e1ef6a75dc41ec69f75b.
+
+2009-04-28 18:48:33 +0200  Andy Wingo <wingo@oblong.net>
+
+	  [baseaudiosink] add docs for can-activate-pull
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: Add documentation for
+	  can-activate-pull.
+
+2009-01-21 12:33:59 +0100  Andy Wingo <wingo@oblong.net>
+
+	  add can-activate-pull property to baseaudiosink
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: Add can-activate-pull property
+	  to baseaudiosink.
+
+2009-04-28 11:32:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	  videorate: clear discont on duplicated buffers
+	  When videorate duplicates a buffer with a DISCONT flag, it copies the discont on
+	  the first pushed buffer but fails to clear it for subsequent buffers. This
+	  causes theoraenc!oggmux and possibly other elements to consider this a discont
+	  stream.
+	  Fix videorate to produce discont as the first buffer and after a flushing seek.
+	  Fixes #580271.
+
+2009-04-24 18:13:00 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/Makefile.am:
+	  check: Disable the playbin2 for this release, as it is a bit racy.
+	  Disable the test, as per the discussion in #580120. Needs re-enabling
+	  after the release, when playbin2 is fixed.
+
+2009-04-23 08:41:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Don't reduce max-size-time of exposed groups. Fixes #579912
+	  The 2s limit is way too small for a lot of files (which have an interleave
+	  in time of between 3 and 5s). Instead, leave it to the initial 5s value
+	  and reduce the other limits (allowing us to stay memory-efficient).
+
+2009-04-21 21:06:59 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	  0.10.22.3 pre-release
+
+2009-04-21 20:41:23 +0100  René Stadler <mail@renestadler.de>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Fix unused variable in compilation with --disable-gst-debug
+	  Fixes: #579668
+
+2009-04-21 22:12:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From b3941ea to 6ab11d1
+
+2009-04-21 20:57:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybasebin.c:
+	  playbin: only use raw_decoding_mode when it's true
+	  First check the pad caps if they are raw before setting the raw_decoding_mode to
+	  TRUE. Fixes playback of transport streams and other streams that require large
+	  queues.
+	  Fixes #579734
+
+2009-04-19 18:15:28 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/cdda/gstcddabasesrc.c:
+	* tests/check/libs/cddabasesrc.c:
+	  cddabasesrc: fix posting of discid tags after MERGE_MODE_REPLACE_ALL changes in core
+	  Don't use REPLACE_ALL merge mode when that's not really what we want,
+	  as now that REPLACE_ALL actually does what it's supposed to do in
+	  core, we drop tags we wanted to keep, such as the various disc id
+	  tags. Add unit test for this as well. Fixes #579463.
+
+2009-04-17 10:34:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: don't use GLib-2.16 API, we require only 2.14
+	  Fixes #579267.
+
+2009-04-17 10:55:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: don't unparent the ringbuffer
+	  when going to NULL, don't unparent the ringbuffer because we don't support going
+	  back to 0 very well yet.
+	  Fixes #579203
+
+2009-04-17 10:53:10 +0200  Olivier Crete <tester at tester.ca>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  RTCP: don't fail when retrieving invalid PT
+	  We can't meaningfully assert on valid packet types so just return the type as it
+	  is. Update the comments to reflect this.
+	  Fixes #579192.
+
+2009-04-16 12:12:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsink.h:
+	* gst-libs/gst/app/gstappsrc.h:
+	  app: add trivial cast macros
+	  Add trivial cast macros for appsrc and appsink. Mark them as being since 0.10.23
+	  and add the macros to the standard macros in the docs.
+	  Fixes #579130
+
+2009-04-16 12:09:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  pkgconfig: add the app/ directory to Libs
+	  Add the appsrc/appsink directory to the Libs in the uninstalled
+	  pkgconfig file so that one can build against it.
+	  Fixes #579129
+
+2009-04-15 22:59:31 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	  0.10.22.2 pre-release
+
+2009-04-15 22:56:15 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* ChangeLog:
+	  ChangeLog: regenerate changelog with the gen-changelog script
+
+2009-04-16 00:41:13 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: Update po files from TP
+
+2009-04-16 00:40:59 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/interfaces-enumtypes.h:
+	* win32/common/video-enumtypes.c:
+	  win32: Update win32 build files
+
+2009-04-16 00:31:55 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/libs/video.c:
+	  check: Add GST_VIDEO_FORMAT_YVYU to the test so it passes.
+
+2009-04-16 00:31:00 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/playbin2.c:
+	  check: Fix the input uri in playbin2 test.
+	  Don't try and use a random file in wim's home directory as a test input
+
+2009-04-15 15:35:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.h:
+	  video: Fix typo in the docs
+
+2009-04-15 14:53:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add support for YVYU YUV colorspace
+
+2009-04-15 00:17:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* gst-libs/gst/fft/gstfft.c:
+	  docs: fix hyperlink and move fft attribution to the right place
+
+2009-04-15 00:02:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  log: use G_GUINT64_FORMAT instead of llu
+
+2009-04-14 18:31:52 +0200  Josep Torra <n770galaxy at gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  RTSP: add missing headers for WMS RTSP
+	  Add missing headers related to Windows Media RTSP extension.
+	  Fixes #578942
+
+2009-04-14 18:16:37 +0200  Olivier Crete <tester at tester.ca>
+
+	* docs/design/draft-keyframe-force.txt:
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theoraenc: implement upstream keyframe force
+	  Implement handling of upstream keyframe forcing.
+	  Update the design documents too.
+	  Fixes #578656
+
+2009-04-14 17:31:31 +0200  Olivier Crete <tester at tester.ca>
+
+	* ext/theora/theoraenc.c:
+	  theoraenc: factor out keyframe forcing
+	  See #578656
+
+2009-04-14 17:01:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* AUTHORS:
+	* gst-libs/gst/fft/gstfft.c:
+	  Give credit to Mark Borgerding (kissfft author)
+	  and add myself to AUTHORS as well. Fixes #575638.
+
+2009-04-14 17:04:06 +0200  Jan Urbanski <j.urbanski at students.mimuw.edu.pl>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	  multifdsink: add property to resend streamheaders
+	  Adds a new property in multifdsink, resend-streamheader.
+	  If this property is false, the multifdsink will not send the streamheader if
+	  there's already one set for a particular client.
+	  There are some formats in which every stream needs to start with a certain
+	  blob, but you can't inject this blob at leisure. If the producer wants to
+	  change the blob in question and sets in as the streamheader on the outgoing
+	  buffers' caps, new clients of multifdsink will get the new streamheader, but
+	  old clients will break, because they'll see the blob in the middle of the
+	  stream.
+	  The property is true by default, so existing code will not see any difference.
+	  Fixes #578118.
+
+2009-04-14 16:53:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	  multifdsink: add property to handle client write
+	  Add a property to disable listening to client writes. This property is usefull
+	  when other code will deal with reading from the client socket.
+	  API: GstMultiFdSink::handle-read property
+
+2009-04-14 16:45:20 +0200  Johann Prieur <johann.prieur at gmail.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	* win32/common/libgstrtp.def:
+	  RTCP: add beginnings of Feedback messages
+	  Add the beginnings of parsing and constructing Feedback messages.
+	  Fixes #577610.
+
+2009-04-14 13:51:41 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: clear the target
+	  Clear the target of our ghostpads before we remove the pad from the element.
+	  This to make sure that the internal pad is not left linked to whatever pad we
+	  were ghosted to. This should only be a problem when we leak the ghostpads.
+	  Also release our subpicture pads.
+	  Fixes #577288.
+
+2009-04-14 12:10:30 +0100  Hannes Bistry <hannesb@gmx.net>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: fix mouse pointer offsets in navigation event if window is smaller than the image
+	  Fixes #570768.
+
+2009-04-14 13:16:14 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  baseaudiosrc: adjust the internal timestamp
+	  Adjust the internal timestamp before comparing it against the adjusted clock
+	  time.
+	  Fixes #578506
+
+2009-04-14 13:12:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: use new clock time methods
+	  Use the unadjusted internal clock times to calculate the internal/external
+	  offset when calibrating the clock.
+	  When going to NULL, unparent and free the ringbuffer, like we do in the source
+	  element.
+	  See #578506
+
+2009-04-14 13:08:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* win32/common/libgstaudio.def:
+	  audioclock: add methods for the internal offset
+	  Add two methods for getting the unadjusted time of the clock and one for
+	  adjusting an internal time. We will need these methods for correctly handling
+	  the time after a gst_audio_clock_reset().
+	  Add a debug category and some debug lines to the audio clock.
+	  API: gst_audio_clock_get_time()
+	  API: gst_audio_clock_adjust()
+	  API: GST_AUDIO_CLOCK_CAST()
+
+2009-04-14 11:34:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix up the debugs and warnings
+	  Use _OBJECT variants because we can. Go over some log statements and put them in
+	  the right category.
+	  Fixes #567740.
+
+2009-04-12 22:26:33 +0200  Luca Ognibene <luca.ognibene at gmail.com>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: fix error in sync-method
+	  Multifdsink did not handle sync-method=latest-keyframe correctly when the
+	  soft-limit is set to -1 (unlimited).
+	  Fixes #578583.
+
+2009-04-10 21:49:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: use the internal clock time
+	  We can't assume that the internal clock time is the same as the function we
+	  installed on our provided clock because somebody might have changed it.
+
+2009-04-10 14:12:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: handle clock-lost messages
+	  When we receive a clock-lost message we need to pause and play to select a new
+	  clock.
+
+2009-04-10 13:44:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/playbin2.c:
+	  check: add a unit test for playbin2
+	  Add unit test for playbin2 and include the refcount test in #577794.
+
+2009-04-10 13:42:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix refcounting of visualisations
+	  See #577794.
+
+2009-04-10 13:27:41 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: fix refcounting of custom elements
+	  Sink the custom sinks, let other elements we create be sunken by the bin we add
+	  them to.
+	  Fixes #577794.
+
+2009-04-10 12:27:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/appsink.c:
+	  check: fix appsink test
+	  Fix the appsink test now that the method signature changed.
+
+2009-04-10 12:26:16 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: handle missing input-selector
+	  Gracefully degrade and disable stream selection when input-selector is
+	  missing.
+
+2009-04-09 23:46:17 +0200  Martin Samuelsson <martin.samuelsson at axis.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsink.h:
+	  appsink: make callbacks return GstFlowReturn
+	  Make the new_buffer and new_preroll callbacks return a GstFlowReturn so that
+	  errors can be reported properly.
+	  Fixes #577827.
+
+2009-04-09 18:04:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	  ringbuffer: allow for custom commit functions
+	  Allow subclasses to override the commit method.
+
+2009-04-08 18:04:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  baseaudiosink: fix a small glitch after pause
+	  After we pause the stream and interrupt the writeout to the ringbuffer, also adjust
+	  the amount of output samples we consumed. We can't do this reliably with the
+	  current API when we are doing trick modes but we can do the right thing for
+	  normal playback.
+
+2009-04-08 16:43:27 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: better error message on sink failure
+	  If we could create the sinks, but the don't work, don't send the missing plugin
+	  message and report that the state-changed failed.
+
+2009-04-07 22:38:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: don't leak pad-template
+	  gst_element_class_add_pad_template() does not take ownership.
+
+2009-04-04 21:18:38 +0300  Felipe Contreras <felipe.contreras@gmail.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From d0ea89e to b3941ea
+
+2009-04-04 16:28:14 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/interfaces/navigation.c:
+	* sys/v4l/v4lsrc_calls.c:
+	  navigation/v4l: Don't use g_return_val_if_fail for computed/used values.
+
+2009-03-22 09:46:37 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/theora/theoradec.c:
+	  theoradec: return GST_CLOCK_TIME_NONE for negative framecounts.
+	  This fixes most seeking issues when used with gnonlin.
+	  Fixes #543591
+
+2009-04-04 14:53:42 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From f8b3d91 to d0ea89e
+
+2009-04-03 10:51:42 -0700  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: don't leak selector when getting current stream numbers.
+
+2009-04-02 22:28:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: use fully qualified urls when using a proxy
+	  Use a fully qualified url when specifying the url for tunneled requests through
+	  a proxy.
+	  See #573173
+
+2009-03-31 00:54:30 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/interfaces/navigation.c:
+	* gst-libs/gst/interfaces/navigation.h:
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/navigation.c:
+	* win32/common/libgstinterfaces.def:
+	  navigation: Extend the navigation interface
+	  Add support for a set of standard commands that can be queried and executed to
+	  support applications like DVD. Add query construction and parsing functions.
+	  Add new messages that can be sent on the bus to provide notifications related
+	  to commands, multiangle changes, and button highlight activity.
+	  Add some helper functions to parse the existing GstNavigation events that
+	  elements might receive.
+	  Document it all and add unit tests.
+
+2009-02-04 17:03:07 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaybasebin.c:
+	* gst/playback/gstplaybasebin.h:
+	  playbin: Add simple 'raw decoding mode'.
+	  Raw decoding mode removes almost all buffering in video and audio queues
+	  when a source providing already decoded video/audio is detected, on the
+	  possibly bogus assumption that such a source should provide sufficient
+	  internal queueing. Fixes playback on some DVDs, and improves it
+	  on all.
+
+2009-04-02 09:27:07 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/.gitignore:
+	  ignores: Ignore the videoscale check binary
+
+2009-04-02 12:13:57 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Add gst_rtsp_connection_set_proxy to the win32 exports
+
+2009-04-02 10:42:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ext/alsa/gstalsamixer.c:
+	  alsamixer: don't forget to release locks in a few places
+	  Might fix #576585.
+
+2009-04-02 11:10:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: Don't read over line ends when taking the last Cr or Cb
+
+2009-04-02 10:52:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: Don't write to few pixels and don't mix Cr and Cb
+	  Fixes bug #577054.
+
+2009-04-01 15:15:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	* tests/check/elements/audioresample.c:
+	  audioresample: fix negotiation so that upstream can actually fixate to downstream's rate
+	  If one side has a preference for a particular sample rate or set of sample rates, we
+	  should honour this in the caps we advertise and transform to and from, so that elements
+	  actually know about the other side's sample rate preference and can negotiate to it
+	  if supported. Also add unit test for this.
+
+2009-03-26 19:34:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  docs: add a blurb about redirect messages to playbin2 docs
+
+2009-04-01 09:03:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: fix  little typo in the comments
+
+2009-03-31 17:52:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: make gst_rtsp_watch_queue_message() thread-safe
+	  People might queue messages from a thread other than the thread in which
+	  the main context which this watch is attached is iterated from, so use
+	  a GAsyncQueue instead of a GList, so g_list_append() doesn't trample
+	  over list nodes just freed in the other thread. This just fixes issues
+	  I've had with gst-rtsp-server. We might need more locking in various
+	  places here.
+
+2009-03-31 18:13:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: clear the entire builder structure
+	  And use structure instead of variable with sizeof when
+	  clearing the rtsp message structure, for clarity.
+
+2009-03-31 17:56:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  docs: fix typo in gst_rtsp_message_unset() API docs
+
+2009-03-31 19:00:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: add support for proxies
+	  Add suport for proxy servers. Currently only used for tunneled HTTP
+	  connections without authentication.
+
+2009-03-31 18:57:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  Revert "rtsp: reset whole message (was sizeof pointer instead of sizeof type)"
+	  This reverts commit 79de0b8d67df6fbbe79455adc2e06858295f5c03.
+
+2009-03-26 18:54:56 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: use xcontext->depth instead of bits in attr.max_value for colorkey
+	  According to the drivers in http://cgit.freedesktop.org/xorg/driver/ we should
+	  format the colorkey depending on xcontext->depth. This is what they will use to
+	  interprete the value. The max_value in turn is usualy a constant regardless of
+	  the depth.
+
+2009-03-31 12:22:14 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: reset whole message (was sizeof pointer instead of sizeof type)
+
+2009-03-31 00:56:18 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/interfaces/mixer.c:
+	  doc: Fix a typo in the GstMixer docs
+
+2009-03-29 12:01:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Fix linear scaling for one byte components
+	  Fixes bug #577054.
+
+2009-03-29 11:53:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: Fix 4tap scaling of YUYV and friends
+
+2009-03-28 16:08:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_image.c:
+	* gst/videoscale/vs_scanline.c:
+	* gst/videoscale/vs_scanline.h:
+	  videoscale: Rewrite YUYV (and friends) scaling and don't read/write over line ends
+	  Partially fixes bug #577054, there's just one issue left now.
+
+2009-03-28 12:48:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add some more unit tests
+
+2009-03-28 11:51:01 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Use bilinear instead of 4tap scaling for heights < 4
+	  Partially fixes bug #577054.
+
+2009-03-28 11:45:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Don't read after the end of a line when lineary scaling YUYV/UYVY/RGB/RGBA
+	  This case is for upscaling a frame with width=1
+	  Partially fixes bug #577054.
+
+2009-03-28 11:27:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_scanline.c:
+	  videoscale: Don't read after the end of a line when lineary scaling YUYV/UYVY
+	  Partially fixes bug #577054.
+
+2009-03-28 10:40:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Initialize buffer memory with zeroes
+	  This prevents valgrind warnings when accessing the "x" parts
+	  of xRGB and friends in other elements that handle (and can handle)
+	  xRGB like ARGB (for example videoscale).
+
+2009-03-28 10:25:12 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/videoscale.c:
+	  videoscale: Add a lot of unit tests
+
+2009-03-28 10:06:24 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videocale: Add support for video/x-raw-gray with bpp=depth=8
+
+2009-03-28 10:01:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add support for generating video/x-raw-gray with bpp=depth=8
+
+2009-03-28 09:43:23 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  ffmpegcolorspace: video/x-raw-gray is the same as the YUV Y800 format
+
+2009-03-27 19:12:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: Take the next luma value instead of every second next when scaling UYVY and friends
+
+2009-03-27 19:09:47 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add support for v308 YUV colorspace
+
+2009-03-27 13:15:11 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	  videoscale: Add my copyright to the 4tap scalers
+
+2009-03-27 13:14:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Enable 4-tap scaling for all supported formats
+
+2009-03-27 13:14:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Implement 4-tap scaling for RGB565 and RGB555
+
+2009-03-27 10:47:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Implement 4-tap scaling for UYVY
+
+2009-03-27 09:33:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Implement 4-tap scaling for YUY2 and YVYU
+
+2009-03-26 22:14:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Implement 4-tap scaling for RGB and BGR
+
+2009-03-26 22:08:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Implement 4-tap scaling for RGBA and other 4 byte formats
+
+2009-03-26 11:02:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/pango/gsttextoverlay.c:
+	  textoverlay: Fix drawing of UYVY text borders
+
+2009-03-26 10:36:27 +0100  Zeeshan Ali <zeeshan.ali@nokia.com>
+
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextoverlay.h:
+	  textoverlay: Add support for UYVY colorspace
+	  Fixes bug #378094.
+
+2009-03-25 19:01:45 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: do some more cleanup
+	  Free the groups when we go to READY.
+	  Allow for NO_PREROLL elements.
+
+2009-03-25 16:37:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: start CSeq counting from 1 instead of 0
+	  Start counting from 1 instead of 0 as this is what most other clients
+	  seem to do.
+
+2009-03-25 16:35:22 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: add ETag and If-Match headers
+	  Add new headers, we need them for RealMedia support.
+
+2009-03-25 14:16:25 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: scale the colorkey components in case of 16bit visuals
+	  Use a default that won't be scales to 0,0,0
+
+2009-03-25 11:27:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  audiosrc: improve 'Dropped n samples' warning message
+
+2009-03-24 19:41:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	  examples: use new method to set flags
+	  Use the new core method for setting object enum properties by name.
+
+2009-03-24 18:29:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: add more support for subpictures
+
+2009-03-24 17:12:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: first support for subpictures
+	  Add beginnings of subpicture support.
+
+2009-03-24 15:26:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: print tags from the different tracks
+
+2009-03-24 12:22:37 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: blacklist subpictures for now
+	  Blacklist the subpictures until we add support for them.
+	  Add some small debug info.
+	  See #576408.
+
+2009-03-24 12:19:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: expose more media types
+	  Expose more media types from a raw source, such as the subpicture and various
+	  text pads.
+	  Small cleanups  and add some more debugging.
+	  See #576408.
+
+2009-03-24 10:42:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: rescan audio sinks for volume/mute
+	  Rescan the audio sinks for the mute and volume properties.
+	  fixes #576180.
+
+2009-03-23 19:40:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix reuse of the video chains
+	  When reusing playbin with visualisations, reset the async property on the video
+	  sink because some sinks might dynamically recreate their sinks.
+	  Fixes #576188
+
+2009-03-23 17:37:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: allow dynamic swtiching of subtitles
+	  When we have the textpad configured, enable and disable the subtitles by setting
+	  the silent flag on the overlay element instead of trying to remove elements.
+	  See #576187
+
+2009-03-23 16:59:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/playbin-text.c:
+	  tests: print some more info in the text example
+	  Print both the position and the running_time when the subtitle becomes available
+	  in the application.
+
+2009-03-23 16:04:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix dynamic switching of visualisations
+	  Fix the switching of visualisations by requesting and releasing the tee request
+	  pads on demand.
+	  See #576187.
+
+2009-03-23 16:19:11 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/tcp/README:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversink.c:
+	* gst/tcp/gsttcpserversrc.c:
+	  docs: add examples for tcp elements, also use correct section name. Fixes #564139
+	  Updated the examples in the README to actually work. Add them to api docs. Tests
+	  the api-docs and fix the section names to make the docs actualy show up.
+	  The example for "tcpserversrc" needs review (might be an element bug).
+
+2009-03-17 09:14:02 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/videoscale/gstvideoscale.c:
+	  indent: fix damange that gst-indent did some time ago
+
+2009-03-23 15:27:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: fix linking order
+	  Link after doing the state change and unlink before shutting down. Makes the
+	  window for causing races in toggling the visualisations smaller.
+	  See #576187.
+
+2009-03-23 12:26:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: reset counter
+	  reset the number of pending dynamic operations back to 0 when we reuse
+	  uridecodebin.
+	  Fixes #576190
+
+2009-03-23 11:38:53 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* ext/theora/theoradec.c:
+	  theoradec: Use GST_CLOCK_TIME_NONE for invalid positions. Fixes #543591
+	  The problem was that previously we didn't check whether _theora_granule_frame
+	  returned a negative framecount or not, resulting in bogus timestamps.
+
+2009-03-21 09:46:28 +0100  René Stadler <mail@renestadler.de>
+
+	* ext/vorbis/vorbisenc.c:
+	  vorbisenc: Set caps on non-header ouput buffers.
+	  Fixes #576142.
+
+2009-03-20 16:13:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/seek/seek.c:
+	  seek: Add some more debug
+	  Add some more info about the selected streams.
+
+2009-03-20 15:47:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: a pad starts out being not drained.
+	  Mark a new pad as not drained until we get EOS on it.
+
+2009-03-20 14:17:19 +0100  LRN <lrn1986 at gmail dot com>
+
+	* gst/playback/gstqueue2.c:
+	  win32: fix seeking in large files
+	  Fix Seeking in large files by using the 64-bit seek functions.
+	  Fixes #576019
+
+2009-03-19 20:31:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: recover from failing to add a pad
+	  When we cannot add a pad to the decodebin2 for some reason, print a warning but
+	  continue adding the remaining pads.
+
+2009-03-19 19:35:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: more cleanups and docs.
+	  Add some more comments and use g_list_prepend().
+
+2009-03-19 19:19:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: refactoring and race fixes
+	  Refactor some code so that we can take the right locks and in the right order.
+	  Fixes quite a bit of races already.
+
+2009-03-19 19:03:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: remove the group cond + cleanups
+	  Remove the group GCond that we used for waiting for groups to finish because we
+	  use pad blocking on the selectors and counters instead for waiting for the
+	  groups to complete.
+	  remove the obsolete about_to_finish variable set while emiting the
+	  about-to-finish signal and fix some old comments.
+	  We don't need to take the playbin lock when querying the uridecodebin.
+
+2009-03-18 10:45:50 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/playbin-text.c:
+	  icles: print better error and warning messages
+	  --
+
+2009-03-17 22:53:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspbase64.c:
+	* gst-libs/gst/rtsp/gstrtspbase64.h:
+	  rtsp: Use GLib base64 functions and deprecate gst_rtsp_base64_encode
+	  This also fixes another instance of CVE-2008-4316.
+
+2009-03-17 19:53:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: report -1 for duration in push mode
+	  In push mode we must return TRUE from the duration query with a value of -1
+	  meaning that we know that we don't know the duration.
+
+2009-03-17 19:09:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: add extra dynamic ref for demuxers
+	  When we make a group connected to a demuxer, keep an extra dynamic refcount for
+	  the group which is only decremented when no_more_pads or a multiqueue overrun is
+	  detected. This way we avoid a race between exposing the group while more dynamic
+	  refs are added from new pads.
+	  Fixes #575588.
+
+2009-03-17 15:39:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: sync state of the sink correctly
+	  Sync the state of the newly added chains to the state of the parent sink element
+	  to avoid lost async-start messages. Fixes cdda:// async-done message storm.
+
+2009-03-17 11:54:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: return NOT_LINKED for unselected streams
+	  When streams are not selected in the selector, return NOT_LINKED so that
+	  upstream elements can skip decoding. Only do this for audio and video pads
+	  because for text streams the overhead is smaller and they could come from
+	  external files.
+
+2009-03-17 11:51:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin: set custom text sink properties
+	  Set the custom sink async=FALSE to not make it participate in preroll because we
+	  are dealing with sparse streams.
+	  Try to set sync=TRUE on the custom text sink.
+
+2009-03-17 11:30:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/playbin-text.c:
+	  example: use appsink instead of fakesink
+	  Use appsink instead of fakesink to get the subtitles.
+	  Make things more pretty.
+
+2009-03-17 11:24:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/playbin-text.c:
+	  examples: add example of intercepting subtitles
+	  Add an example of how to install a custom sink for receiving subtitles in
+	  playbin2.
+
+2009-03-17 11:03:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/elements/appsink.c:
+	  tests: fix include in the appsink test
+	  Fix dist by doing the right include.
+
+2009-03-16 16:42:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: don't try to set invalid stream numbers
+	  Fix a problem with setting the stream numbers because we check for the wrong
+	  range.
+	  See #575239.
+
+2009-03-16 16:16:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: release the shutdown lock
+	  Release the shutdown lock when we wait for other groups to complete or else we
+	  have a deadlock when the other group completes and tries to grab the shutdown
+	  lock.
+	  Fixes #575550.
+
+2009-03-16 15:31:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/app/appsrc-ra.c:
+	* tests/examples/app/appsrc-seekable.c:
+	* tests/examples/app/appsrc-stream.c:
+	* tests/examples/app/appsrc-stream2.c:
+	  examples: fix g_object_set() value type.
+	  Make sure we cast the length value as a gint64 to the vararg g_object_set() just
+	  incase sizeof(gsize) != sizeof(gint64).
+
+2009-03-15 19:57:36 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: make flac typefinder return lower probability for frame headers
+	  The flac frame header typefinder overstates the likelihood of a match, leading
+	  to false positives with e.g. aac streams and PDF files. Reduce probabilty
+	  returned from LIKELY to POSSIBLE for the frame header matchin code.
+	  Fixes #574939.
+
+2009-03-11 12:59:05 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: improve image/bmp typefinder
+	  Detect more variations and also bail out in more cases where the values
+	  don't make sense. Furthermore, add width/height and bpp to the caps,
+	  because we can.
+
+2009-03-13 15:22:42 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/Makefile.am:
+	  check: Ignore alsamixer in the states test too
+
+2009-03-13 15:22:11 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* sys/v4l/v4l_calls.c:
+	  v4lsrc: Fix some valgrind warnings about leaked memory and uninitialised data.
+
+2009-03-13 16:19:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: fix resolving of hostnames
+	  We were returning a pointer to a stack variable with the resolved hostname,
+	  which doesn't work.
+	  return a copy of the resolved ip address instead.
+	  Fixes #575256.
+
+2009-03-13 15:29:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/vorbis/vorbisparse.c:
+	  vorbisparse: be smarter when queueing headers
+	  Look at the first buffer byte to see if a buffer is a header instead of counting
+	  packets.
+
+2009-03-13 15:27:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/gsttheoraparse.h:
+	* ext/theora/theoraparse.c:
+	  theoraparse: be smarter when queuing headers
+	  Look at the first byte of the buffer data (if we can) to decide if the packet is
+	  a header packet or not instead of counting packets.
+
+2009-03-13 15:26:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: add some debug info
+	  Add some debug info to log when the seek worked.
+
+2009-03-13 15:14:37 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: release lock in _eos flushing case
+	  Release the mutex when we are flushing in gst_app_src_end_of_stream()
+	  Fixes #574964.
+
+2009-03-13 11:49:10 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* ext/vorbis/vorbisdec.c:
+	  vorbisdec: Avoid an unnecessary memory allocation in vorbiscomment handling.
+
+2009-03-13 11:48:28 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* ext/theora/theoradec.c:
+	  theoradec: Avoid an unnecessary memory allocation in vorbiscomment handling.
+
+2009-03-12 18:27:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  playbin2: fix raw elements like cdda://
+	  Fix a fixme with a one liner and make cd playback work again.
+
+2009-03-12 17:47:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playbin2: improve subtitle handling
+	  Add property to playbin2 to configure a custom sink that receives the raw
+	  subtitle buffers instead of using a textoverlay.
+	  Improve the property finding code to make it more usable.
+	  Use property find code to find async properties in custom sinks that are bins.
+	  Improve text overlay code to gracefully handle missing elements.
+
+2009-02-24 15:58:42 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/tag/gstvorbistag.c:
+	  vorbistag: Protect memory allocation calculation from overflow.
+	  Patch by: Tomas Hoger <thoger@redhat.com> Fixes CVE-2009-0586
+
+2009-03-12 11:34:20 +0000  Jan Urbanski <jurbanski@flumotion.com>
+
+	* gst-plugins-base.spec.in:
+	  Spec: fix up deps
+
+2009-03-11 18:45:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: fix parsing of the timeout parameter
+	  --
+
+2009-03-11 16:20:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: fix g_return condition
+	  when parsing a data message, we require a data message.
+
+2009-03-11 13:33:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: flac typefinder fixes
+	  Use scan context for initial peek as well. Peek 6 bytes in the initial
+	  peek rather than 5 bytes, to match the length of the memcmp we're doing
+	  on that data later. Return immediately when we found caps from looking
+	  at the beginning of the data - no point in continuing to scan the next
+	  64kB for something matching a frame header.
+
+2009-03-11 14:08:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: free the right string.
+	  Free the key value before we remove the header item from the array. The item we
+	  retrieved from the array is only valid until we remove it from the array.
+
+2009-03-11 14:07:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: keep track of amount of decoded bytes
+	  Keep track of the actual amount of decoded bytes, which can be less than 3 when
+	  we decode the last bits of a base64 message.
+
+2009-03-10 21:00:26 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: log details in getcaps like in setcaps
+
+2009-03-10 13:11:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/MANIFEST:
+	  win32: update MANIFEST, fixing 'make dist'
+
+2009-03-09 23:12:00 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7032163 to f8b3d91
+
+2009-03-09 16:19:40 +0100  Jonathan Matthew <notverysmart at gmail dot com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: add photoshop typefind functions
+	  Add photoshop typefind functions.
+	  Fixes #574516.
+
+2009-03-09 15:46:21 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: only remove pads that were added
+	  Flag pads that were added so that we can see if we need to remove them later or
+	  not.
+
+2009-03-09 13:53:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	  rtsp: only add ports when not using TCP
+	  Only add the port numbers in the transport string when we are using udp or
+	  multicast.
+
+2009-03-09 13:53:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  rtsp: use gstreamer dump mem
+	  --
+
+2009-03-09 13:51:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: use glib base64 encoder
+	  --
+
+2009-03-06 19:28:37 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  Unblock blocked ghostpads when shutting down.  Fixes #574293.
+
+2009-03-09 10:03:13 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  Riff: Add mapping for Fraps video codec.
+	  Found through insanity testrun. Confirmed mapping in libavformat.
+
+2009-03-09 09:07:13 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add the 'DVR ' mapping for mpeg2video.
+	  Found this in 3 files from the insanity suite and mapping is also present
+	  in libavformat.
+
+2009-03-09 09:06:40 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Use the proper data pointer instead of poking random memory.
+
+2009-03-08 18:17:48 +0100  LRN <lrn1986@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: fix compilation on windows.
+	  Remove unused variable when building for windows.
+	  Fixes #574443.
+
+2009-03-08 12:03:22 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From ffa738d to 7032163
+
+2009-03-08 11:19:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 3f13e4e to ffa738d
+
+2009-03-07 11:44:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 3c7456b to 3f13e4e
+
+2009-03-07 10:44:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 57c83f2 to 3c7456b
+
+2009-03-06 19:02:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  theoradec: parse and use codec_data in the caps
+	  Parse the codec_data in the caps and use this as the headers.
+	  Fixes #574169.
+
+2009-03-06 18:53:17 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add theora mapping
+	  Add theora mappings. See #574169.
+
+2009-03-06 16:31:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	* win32/common/libgstrtsp.def:
+	  rtsp: Add methods for getting the read/write fds
+	  API:gst_rtsp_connection_get_readfd()
+	  API:gst_rtsp_connection_get_writefd()
+
+2009-03-06 10:35:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* Makefile.am:
+	* win32/common/audio-enumtypes.c:
+	  win32: indent copied *-enumtypes.c files in make win32-update
+
+2009-03-06 10:35:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/MANIFEST:
+	  win32: update MANIFEST
+
+2009-03-06 10:30:28 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* win32/common/config.h:
+	  win32: fix configure logic for GST_INSTALL_PLUGINS_HELPER define
+
+2009-03-06 10:05:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/interfaces-enumtypes.c:
+	* win32/common/multichannel-enumtypes.c:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  win32: update windows files via make win32-update
+	  Updates win32 files using the new system/hook, and defines HAVE_PROCESS_H,
+	  which fixes the build of pbutils on windows (#574319).
+
+2009-03-06 10:03:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	  gitignore: ignore more
+
+2009-03-06 10:37:38 +0100  Julien Moutte <julien@fluendo.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Fix build on Mac OS X
+
+2009-03-05 15:42:23 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: don't stay connected to notify::caps after negotiation
+	  Disconnect the notify::caps signal in our callback (it'll be re-added
+	  if we're not, in fact, finished getting complete caps). Ensures that
+	  caps changes mid-stream (e.g. from an mp3 that changes from
+	  stereo->mono mid-file) don't cause us to try to add a new pad.
+
+2009-03-05 13:48:37 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsprange.c:
+	  rtsp: fix parsing of 'now-' ranges.
+	  --
+
+2009-03-05 12:43:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/dynamic/.gitignore:
+	* tests/examples/dynamic/Makefile.am:
+	* tests/examples/dynamic/sprinkle.c:
+	* tests/examples/dynamic/sprinkle2.c:
+	* tests/examples/dynamic/sprinkle3.c:
+	  examples: add some more sprinkle examples
+	  Add some more sprinle examples and add some more comments.
+	  See #574160.
+
+2009-03-05 11:57:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  docs: add appsrc symbols to standard section
+	  --
+
+2009-03-05 12:27:16 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/adder/gstadder.c:
+	  adder: add variants for unsigned to fix warnings for unneeded check
+	  For unsigned int out+in can't be < 0.
+
+2009-03-05 10:58:12 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: use the right variable in debug log, encoding is not yet initialized
+
+2009-03-05 10:51:25 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/v4l/v4l_calls.c:
+	  v4l: add a fixme for broken code, that someone who has a v4l tuner device should fix
+
+2009-03-05 10:39:33 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: add missing break in event handling, remove dead code
+
+2009-03-04 16:24:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: do some more cleanup in _close
+	  Do som more cleanup in gst_rtsp_connection_close() so that it's back into the
+	  unconnected state as it was allocated.
+
+2009-03-04 16:11:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: fix the memory management of the url
+	  Constify the url parameter in _create.
+	  Make a copy of the url stored in the connection.
+	  Free the url when the connection is freed.
+
+2009-03-04 12:21:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	* win32/common/libgstrtsp.def:
+	  RTSP: Add support for server tunneling
+	  Save the tunnelid in the connection. Add a method to retrieve the tunnelid so
+	  that a server can store and match the id against other tunnel requests.
+	  Fix the URI in the tunnel requests so that they contain the absolute uri and the
+	  query string if any instead of just the hostname.
+	  Transparently base64 decode the input stream when tunneling.
+	  Add method to set the connection ip address so that it can be included in the
+	  tunnel response.
+	  Add method to connect the two tunnel requests.
+	  Add two callbacks for the async mode to notify a tunnel start and tunnel
+	  complete event.
+	  Add method to reset the watch after the connection has been tunneled.
+	  Various little refactoring to make more stuff reusable.
+	  API: RTSP::gst_rtsp_connection_set_ip()
+	  API: RTSP::gst_rtsp_connection_get_tunnelid()
+	  API: RTSP::gst_rtsp_connection_do_tunnel()
+	  API: RTSP::gst_rtsp_watch_reset()
+
+2009-03-04 12:18:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtsp: add new defines for tunneling
+	  Add two more result codes for tunneling support.
+
+2009-03-04 12:12:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.h:
+	  rtsp: remove , from last enum member
+	  Remove , from last enum member to improve compatibility with other compilers.
+
+2009-02-28 15:23:20 -0800  LRN <lrn1986@gmail.com>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: Convert regex code to GRegex code
+	  Fixes: #572993.  Patch author prefers to use an alias, contact
+	  ds if you actually need a real name.
+	  Signed-off-by: David Schleef <ds@schleef.org>
+
+2009-03-02 16:13:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: remove debugging g_message
+	  --
+
+2009-03-02 16:03:49 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	* win32/common/libgstrtsp.def:
+	  RTSP: add support for Quicktime tunneled RTSP
+	  Add support for tunneling RTSP over HTTP.
+	  Fix documentation some more.
+	  See also #573173.
+	  API: RTSP:gst_rtsp_connection_is_tunneled()
+	  API: RTSP:gst_rtsp_connection_set_tunneled()
+
+2009-03-02 15:48:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	  RTSP: parse rtsph uris as RTSP tunneled over HTTP
+	  Add transport define for RTSP tunneled over HTTP.
+	  Parse rtsph:// uris as tunneled HTTP over TCP.
+	  API: GstRTSPLowerTrans::GST_RTSP_LOWER_TRANS_HTTP
+	  See also #573173.
+
+2009-03-02 12:48:18 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Add gst_rtsp_connection_get_url definition
+	  No, I'm not wim's buildslave, seriously.
+
+2009-03-02 10:58:49 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtsp: add _get_url method and separate sockets
+	  Add gst_rtsp_connection_get_url() method.
+	  Reserve space for 2 sockets, one for reading and one for writing. Use socket
+	  pointers to select the read and write sockets. This should allow us to implement
+	  tunneling over HTTP soon.
+	  API: RTSP::gst_rtsp_connection_get_url()
+
+2009-03-01 18:31:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/gstapp-marshal.list:
+	  app: force automatic rebuild of gstapp-marshal.[ch] after previous change
+	  The previous change to appsrc/appsink requires people to 'make clean'
+	  to get the marshallers rebuilt (causing a build failure otherwise).
+	  Change some lines in the .list file around to force a rebuild of
+	  these files automatically.
+
+2009-02-28 11:07:04 -0800  David Schleef <ds@schleef.org>
+
+	* configure.ac:
+	  Bump glib requirement to 2.14
+
+2009-02-28 19:37:53 +0100  LRN <lrn1986@gmail.com>
+
+	* ext/gio/gstgiobasesink.c:
+	  gio: Use correct format modifier for size_t
+	  Fixes bug #573528.
+
+2009-02-28 19:35:33 +0100  LRN <lrn1986@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Use correct types for some functions on Win32
+	  Fixes bug #573529.
+
+2009-02-28 13:11:59 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Fix warning about using unitialized value.
+
+2009-02-28 12:41:28 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Add more codec mappings.
+	  This comes mostly from a review of ffmpeg/libavformat/riff.c
+
+2009-02-27 11:14:25 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/alsa/gstalsa.c:
+	  alsa: release pcminfo after the strdup
+
+2009-02-26 17:38:47 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/rtsp/gstrtsprange.c:
+	  rtsprange: don't leak the range in case of parsing error.
+	  Free the gstRTSPTimeRange if we don't return it. Also simplify
+	  gst_rtsp_range_free() as it is valid to pass NULL to g_free().
+
+2009-02-26 16:47:39 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/alsa/gstalsa.c:
+	  alsa: cleanup name lookup.
+	  We can break, once we have a name to make sure, we won't read it ever twice.
+
+2009-02-26 16:09:03 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: don't leak line, if flushing
+
+2009-02-26 16:03:39 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* ext/gio/gstgiosink.c:
+	  giosink: reflow error handling to not leak uri
+
+2009-02-26 15:53:10 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: remove unused code/variables
+
+2009-02-26 12:10:47 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: use GST_FLOW_NOT_NEGOTIATED for partial caps
+
+2009-02-26 16:44:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/app/gstappsrc.h:
+	* win32/common/libgstapp.def:
+	  app: add callbacks to appsrc, cleanups
+	  Add a uri handler to appsink.
+	  don't emit signals when we have installed callbacks on appsink.
+	  Add callbacks to appsrc to replace the signals.
+	  Add property to disable callbacks in appsrc, default to TRUE for backwards
+	  compatibility but disable when callbacks are installed.
+	  API: GstAppSrc::emit-signals
+	  API: GstAppSrc::gst_app_src_set_emit_signals()
+	  API: GstAppSrc::gst_app_src_get_emit_signals()
+	  API: GstAppSrc::gst_app_src_set_callbacks()
+
+2009-02-26 11:42:44 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsink.h:
+	* tests/check/elements/appsink.c:
+	  Appsink: add padding for callbacks + docs
+	  Add some padding to the callbacks structure just to be safe.
+	  Remove the now invisible marshaller methods from the docs.
+	  Fix a comment in the unit test.
+
+2009-02-26 09:52:59 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstapp.def:
+	  win32: Add new libgstapp symbol
+
+2009-02-26 10:07:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  docs: clean section.txt file.
+	  Add appsrc/sink symbols to private, as they are covered in the libs docs.
+
+2009-02-26 10:06:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybasebin.c:
+	  docs: fix random text after since: tag. Also fix class name to make the docs actual appear.
+
+2009-02-26 09:56:16 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst/playback/gstplaybin2.c:
+	  docs: playbin2 has no stream-info
+
+2009-02-26 09:53:03 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/video/video.h:
+	  docs: fix newly added interlace constants and plug holes in video format docs
+
+2009-02-26 09:35:43 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  docs: don't put random stuff in tags.
+	  Tags like Since: or Returns: can only be followed by more tags. gtk-doc has no
+	  tag to append text again to the documentation body.
+
+2009-02-06 11:10:15 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/ximage/ximagesink.c:
+	  ximagsink: do not access uninitialized height variable.
+	  Exit like in xvimagesink, if we have partial caps.
+
+2009-02-25 20:26:05 -0800  David Schleef <ds@schleef.org>
+
+	* Makefile.am:
+	* configure.ac:
+	* win32/common/config.h.in:
+	  Change how win32/common/config.h is updated
+	  Generate win32/common/config.h-new directly from config.h.in,
+	  using shell variables in configure and some hard-coded information.
+	  Change top-level makefile so that 'make win32-update' copies the
+	  generated file to win32/common/config.h, which we keep in source
+	  control.  It's kept in source control so that the git tree is
+	  buildable from VS.
+	  This change is similar to the one recently applied to GStreamer,
+	  except that it adds a few -base specific defines.
+
+2009-02-25 19:40:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsrc.c:
+	* win32/common/libgstapp.def:
+	  app: add win32 .def file and only export functions we want exported
+	  Add a .def file for win32 builds (and make check-exports).
+	  Fix LDFLAGS in Makefile.am, so the usual export regexps are used (fixes #573165).
+	  Make sure private marshaller functions aren't exported by prefixing them with __gst;
+	  also rename gst_app_marshal_OBJECT__VOID to _BUFFER__VOID, make it static and add
+	  a comment why we're not using glib-genmarshal for this one.
+
+2009-02-25 17:08:24 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/examples/dynamic/.gitignore:
+	* tests/examples/dynamic/Makefile.am:
+	* tests/examples/dynamic/sprinkle.c:
+	  sprinkle: Add another example app
+	  Add an example app that dynamically adds and removes audiotestsrc elements from
+	  adder.
+
+2009-02-25 16:25:33 +0100  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Fixed a typo.
+
+2009-02-25 11:31:02 +0100  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst/tcp/gstmultifdsink.c:
+	  rtsp, multifdsink: Unify the use of union gst_sockaddr.
+
+2009-02-25 14:22:35 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	* configure.ac:
+	  build: Update shave init statement for changes in common. Bump common.
+
+2009-02-25 13:16:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  xvimageink: protect buffer_alloc from shutdown
+	  Use the pool_lock in the buffer_alloc function to detect shutdown. Avoids
+	  crashes when the sink is shutdown.
+
+2009-02-25 12:43:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: use flushing pads instead of fakesink
+	  Use the flushing pads on playsink to terminate on shutdown instead of plugging
+	  fakesinks. this should be a little cheaper.
+
+2009-02-25 12:42:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstplaysink.h:
+	  playsink: Add FLUSHING pad type
+	  Make it possible to request a flushing pad from the playsink. We can eventually
+	  use these flushing pads to quickly terminate the dataflow when we are shutting
+	  down.
+
+2009-02-25 11:31:52 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 9cf8c9b to a6ce5c6
+
+2009-02-25 09:52:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add fourcc for mpeg2-in-avi (as produced by mencoder)
+	  Fixes: #565777
+
+2009-02-25 12:07:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/stress-playbin.c:
+	  stress-playbin: print the current uri
+	  Print the current uri so that we can more easily see what uri caused a crash or
+	  error.
+
+2009-02-25 11:07:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/icles/stress-playbin.c:
+	  Print the errors more clearly
+	  Print some more verbose messages when dealing with errors.
+
+2009-02-25 10:08:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  Release the group lock when setting states
+	  Release the group lock while we perform the state changes on the uridecodebins
+	  because that might trigger callbacks that we need to handle with the group lock
+	  taken. Avoids a possible deadly embrace in some id3/flac files.
+	  Fixes #567396.
+
+2009-02-25 10:05:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  Combine finding and creating groups
+	  Combine the search for the current group and optionally creating one into one
+	  function so that we can avoid taking the lock multiple times.
+
+2009-02-25 08:22:00 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Playbin2: Don't leave unused parameters in debug statements.
+	  Fixes build on macosx
+
+2009-02-24 10:33:05 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  Riff: Add fourcc for mpeg1-in-avi (as produced by mencoder)
+
+2009-02-24 18:43:45 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  Add some G_UNLIKELY because we can
+	  Add a G_UNLIKELY when checking the shutdown variable.
+
+2009-02-24 17:23:58 +0000  Garret D'Amore <garrett.damore@sun.com>
+
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/interfaces/mixertrack.h:
+	  mixer interface: Add flags to enhance mixer interfaces
+	  This patch adds a few flags to the mixer and mixerctrl interface to
+	  better support OSSv4 (and potentially other backends).
+	  Patch By: Garret D'Amore <garrett.damore@sun.com>
+	  Signed-Off-By: Jan Schmidt <jan.schmidt@sun.com>
+	  API: GST_MIXER_FLAG_HAS_WHITELIST, GST_MIXER_FLAG_GROUPING,
+	  API: GST_MIXER_TRACK_NO_RECORD, GST_MIXER_TRACK_NO_MUTE,
+	  API: GST_MIXER_TRACK_WHITELIST
+
+2009-02-24 17:03:08 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: Fix strict aliasing error using a union
+
+2009-02-24 16:49:40 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Fix a strict aliasing warning
+	  Fix strict aliasing warnings from casting a sockaddr_storage and
+	  using it as a sockaddr_in6. Use a union instead.
+
+2009-02-24 16:08:49 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* docs/libs/.gitignore:
+	* docs/libs/tmpl/.gitignore:
+	* docs/plugins/.gitignore:
+	* docs/plugins/tmpl/.gitignore:
+	  Remove .gitignore files from the docs tmpl dirs, that are killed by make clean.
+
+2009-02-24 14:36:39 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/plugins/Makefile.am:
+	* ext/vorbis/Makefile.am:
+	* ext/vorbis/gstvorbisdec.h:
+	* ext/vorbis/gstvorbisenc.h:
+	* ext/vorbis/gstvorbisparse.h:
+	* ext/vorbis/gstvorbistag.h:
+	* ext/vorbis/vorbis.c:
+	* ext/vorbis/vorbisdec.c:
+	* ext/vorbis/vorbisdec.h:
+	* ext/vorbis/vorbisenc.c:
+	* ext/vorbis/vorbisenc.h:
+	* ext/vorbis/vorbisparse.c:
+	* ext/vorbis/vorbisparse.h:
+	* ext/vorbis/vorbistag.c:
+	* ext/vorbis/vorbistag.h:
+	  vorbis: Rename vorbis*.h to gstvorbis*.h to prevent name conflicts
+
+2009-02-24 14:06:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Add conversion from/to YVYU colorspace
+	  Fixes bug #572872.
+
+2009-02-24 13:42:01 +0100  Jonas Danielsson <jonas.danielsson@axis.com>
+
+	* gst/ffmpegcolorspace/imgconvert.c:
+	  ffmpegcolorspace: Add direct UYVY->GRAY8 conversion
+	  The conversion from UYVY to RGB24 and then to GRAY8
+	  is quite slow. Fixes bug #569655.
+
+2009-02-19 17:16:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: fix deadlock when shutting down.  Fixes #572577.
+
+2009-02-19 17:15:18 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* tests/icles/stress-playbin.c:
+	  stress-playbin: make more flexible, e.g. also useful for playbin2
+
+2009-02-24 12:11:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Match WSAStartup and WSACleanup correctly
+	  Don't randomly call WSAStartup and WSACleanup but instead call the startup when
+	  we create a connection and cleanup when we free it again. Because the internal
+	  datastructure is refcounted, this should not cause any refcounting leaks when
+	  the connection is managed correctly.
+	  Fixes #562794.
+
+2009-02-18 11:59:58 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2/playsink: Set audiotee to PAUSED state in all cases.  Fixes #565105.
+
+2009-02-23 10:57:42 -0800  David Flynn <davidf@rd.bbc.co.uk>
+
+	* pkgconfig/gstreamer-app-uninstalled.pc.in:
+	* pkgconfig/gstreamer-audio-uninstalled.pc.in:
+	* pkgconfig/gstreamer-cdda-uninstalled.pc.in:
+	* pkgconfig/gstreamer-fft-uninstalled.pc.in:
+	* pkgconfig/gstreamer-floatcast-uninstalled.pc.in:
+	* pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+	* pkgconfig/gstreamer-netbuffer-uninstalled.pc.in:
+	* pkgconfig/gstreamer-pbutils-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-riff-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-rtsp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-sdp-uninstalled.pc.in:
+	* pkgconfig/gstreamer-tag-uninstalled.pc.in:
+	* pkgconfig/gstreamer-video-uninstalled.pc.in:
+	  Add srcdir to includes for out-of-source builds
+	  When you use gstreamer uninstalled and build outside
+	  the source tree, the includes need to be specified for
+	  both the source tree and the build tree.
+	  Signed-off-by: David Schleef <ds@schleef.org>
+
+2009-02-22 17:23:52 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	* docs/libs/Makefile.am:
+	* docs/plugins/Makefile.am:
+	  Use shave for the build output
+
+2009-02-23 12:17:07 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Add new symbol to libgstrtsp.def
+
+2009-02-23 10:57:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	* gst-libs/gst/rtsp/gstrtspextension.h:
+	  Add method for handling server requests
+	  Add a receive_request so that extensions can react to server requests.
+
+2009-02-22 19:20:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/netbuffer.c:
+	  Correctly cast to GstBuffer * before passing to gst_buffer_(copy|unref)
+
+2009-02-22 19:19:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* ext/theora/theoraparse.c:
+	  theoraparse: Use the correct unref functions
+
+2009-02-22 19:18:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  x(v)imagesink: Correctly cast to GstBuffer * before passing to gst_buffer_unref()
+
+2009-02-22 19:12:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: Unref the actual buffer instead of the memory address of the buffer
+
+2009-02-22 15:47:53 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 5d7c9cc to 9cf8c9b
+
+2009-02-22 14:49:29 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstrtsp.def:
+	* win32/common/libgstvideo.def:
+	  win32/common: Update .def files for recent API addition
+
+2009-02-22 13:43:35 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/libs/rtp.c:
+	  tests: Fix indentation
+
+2009-02-22 13:42:33 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/video/video.c:
+	  libs/video: Fix gst_video_format_new_caps* functions.
+	  Only add a 'interlaced=True' property to caps *IF* it is interlaced, else
+	  don't add anything.
+
+2009-02-21 11:13:36 -0800  David Schleef <ds@schleef.org>
+
+	* common:
+	  Automatic update of common submodule
+	  From 80c627d to 5d7c9cc
+
+2009-02-20 17:26:40 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  Improve key/value parsing
+	  Improve header field parsing by keeping a ref to the key/value instead of
+	  copying it into a local variable.
+
+2009-02-20 12:35:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Add trailing \0 to message length
+	  We always put a trailing 0 at the end of the message body. Reflect this fact in
+	  the length of the message.
+
+2009-02-20 09:50:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Don't parse headers for data messages
+	  Don't try to parse the headers on a data message because they don't have
+	  headers.
+
+2009-02-19 12:18:29 -0800  Benjamin M. Schwartz <bens@alum.mit.edu>
+
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	  theoraenc: Add property for speed level control
+	  Add property "speed-level" to control the amount of motion searching
+	  the encoder does.  This is only available in libtheora >= 1.0 and
+	  will silently fail with earlier libraries.  Fixes: #572275.
+	  Signed-off-by: David Schleef <ds@schleef.org>
+
+2009-02-19 17:40:45 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Fix 'Since' tags
+
+2009-01-26 10:30:53 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add flags for interlaced video along with convenience methods for interlaced caps.
+	  These three flags allow all know combinations of interlaced formats. They should
+	  only be used when the caps contain 'interlaced=True'.
+	  Fixes #163577 (yes, it's a 4 year old bug).
+
+2009-02-19 15:51:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Make RTSPConnection opaque and rename RTSPChannel
+	  Make the RTSPConnection object opaque so that we can extend it in the future.
+	  Rename GstRTSPChannel to GstRTSPWatch to avoid confusing with the RTSP channels.
+
+2009-01-26 10:31:14 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  Add some more mappings for h264 in riff
+
+2009-02-19 10:49:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtsp.def:
+	  Add new RTSP symbols to def files
+	  Add the new RTSP symbols to the windows def file.
+
+2009-02-19 10:44:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsink.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/appsink.c:
+	  Add method to install callbacks on appsink
+	  Based on pacth by Martin Samuelsson <martin dot samuelsson at axis dot com>
+	  Fixes #571299.
+	  Add gst_app_sink_set_callbacks() to install a set of callbacks. This is a more
+	  performant alternative to connecting to the signals.
+	  Add a unit test for appsink.
+	  Clean up some of the appsink docs.
+	  API: GstAppSink::gst_app_sink_set_callbacks()
+
+2009-02-18 18:46:35 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Add RTSP accept method
+	  Add a method to accept a connection on a socket and create a GstRTSPConnection
+	  for it.
+	  API: gst_rtsp_connection_accept()
+
+2009-02-18 17:42:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Add RTSP channel object for async io
+	  Add a GstRTSPChannel object that wraps a GSource around the RTSP connection so
+	  that the connection can be monitored from a maincontext. This allows us to
+	  operate in ASYNC mode, which is handy when building a server.
+	  Rework the old code to use the async code under the hood.
+	  API: gst_rtsp_channel_new()
+	  API: gst_rtsp_channel_unref()
+	  API: gst_rtsp_channel_attach()
+	  API: gst_rtsp_channel_queue_message()
+
+2009-02-15 07:30:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Add locking to protect the resampling context
+	  When setting the quality/filter-length while PLAYING the
+	  resampling context will be destroyed and created again in
+	  some cases, which will cause crashes in the transform function
+	  if it's called at that time.
+
+2009-02-13 10:10:25 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/videotestsrc/videotestsrc.c:
+	  ffmpegcolorspace/videotestsrc: Use v308 instead of V308
+
+2009-02-12 19:02:59 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	  ffmpegcolorspace: Add support for packed 4:4:4 YUV (format=V308)
+	  Only conversions from/to are implemented, which
+	  gives (indirect) support for all possible conversions.
+	  Partially fixes bug #571147.
+
+2009-02-12 18:17:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add support for packed 4:4:4 YUV (format=V308)
+	  Partially fixes bug #571147.
+
+2009-02-12 09:18:20 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: don't abort when downstream pulls a buffer of size 0
+	  Pulling a 0-sized buffer is allowed, and we should handle this correctly instead of
+	  aborting. Fixes #571009 (wma file with ID3v2 tag).
+
+2009-02-11 16:39:55 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: error out on nonsensical chunk sizes instead of aborting
+	  When encountering a nonsensical chunk size such as (guint)-1, error out cleanly instead of
+	  continuing and trying to g_memdup() 4GB of data that doesn't exist, which will either abort
+	  in g_malloc() or crash.
+	  Fixes #553295, crash with fuzzed AVI file.
+
+2009-02-11 16:39:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* .gitignore:
+	  Make git ignore backup files.
+
+2009-02-10 20:38:58 -0800  Michael Smith <msmith@syncword.(none)>
+
+	* gst/playback/gstplaybin2.c:
+	  Revert "Remove pad-removed handlers after setting the decodebins to NULL."
+	  This reverts commit b36d8f3e119f9edc5993c08025614ee32642972e.
+	  This brought back some deadlocks. A small leak is better, for now. Need to
+	  figure out a way to fix the leak properly.
+
+2009-02-10 17:16:07 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin2: Fix segfault on notify after group change.
+	  If our group has been switched, then we get a selector active-pad
+	  notification, we don't need to notify.
+
+2009-02-10 17:10:33 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: Look for volume/mute properties recursively in audio element.
+	  Rather than only checking for volume property on the audio sink
+	  directly, recursively look for it on sinks within it (if it's a bin).
+	  Allows use of sink-as-volume-control where the application has supplied
+	  an audio-sink bin that includes a real audio sink internally.
+
+2009-02-10 18:29:22 +0000  Christian Schaller <cschalle@crazyhorse.localdomain>
+
+	* gst-plugins-base.spec.in:
+	  Update spec file with latest additions and changes, most noteably the move of appsrc appsink into -base
+
+2009-02-10 17:39:45 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/videotestsrc/videotestsrc.c:
+	  videotestsrc: Add support for Y444 (planar 4:4:4 YUV)
+	  Partially fixes bug #571147.
+
+2009-02-10 17:37:06 +0100  Peter Kjellerstedt <pkj@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  gstrtspmessage: Minor documentation correction.
+	  Corrected documentation about what needs to be freed after calling
+	  gst_rtsp_message_new(), gst_rtsp_message_new_request(),
+	  gst_rtsp_message_new_response() and gst_rtsp_message_new_data().
+
+2009-02-10 11:00:12 +0100  Antoine Tremblay <hexa00@gmail.com>
+
+	* ext/alsa/gstalsamixer.c:
+	  alsamixer: Fix race condition that made alsamixer not working properly
+	  This is due to race conditions between functions that
+	  modified the mixer like set_volume and
+	  snd_mixer_handle_events since the handle_events
+	  can now be called at any time.
+	  Fixed by adding locking around any snd_mixer call
+	  since even read functions can modify the mixer stucture, since
+	  alsa likes to clear it's values before reading new ones.
+	  The favorite race condition seemed to be that set_volume
+	  called read_elem (in alsalib) that reset the volumes to
+	  0 and then read them with read_x_volume. This read looped
+	  on each channel and as the race condition occured the
+	  channels value could be anything , most of the time
+	  it was 0. Thus no value was read or only the value of
+	  one channel was and the volume was reset to 0.
+	  Fixes bug #478512.
+
+2009-02-09 12:02:21 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Bump revision to use for common submodule.
+
+2009-02-05 15:47:00 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: do not call _xwindow_clear on ready->paused.
+	  Calling clear at that transition does things like stopping xvideo (which is not
+	  running at that time) and also clearing anything what the application might have drawn.
+	  This breaks handle-expose and autopaint-colorkey features.
+
+2009-02-04 17:03:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtsprange.c:
+	* gst-libs/gst/rtsp/gstrtsprange.h:
+	  RTSPRange: Add method to serialize ranges
+	  Add gst_rtsp_range_to_string() to serialize a GstRTSPRange to a string that can
+	  be used by a server.
+	  API: GstRTSPRange::gst_rtsp_range_to_string()
+
+2009-02-04 13:16:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspurl.c:
+	* gst-libs/gst/rtsp/gstrtspurl.h:
+	  GstRTSPUrl: Add some const to methods
+	  Add const to the methods that do not modify the object.
+
+2009-02-04 13:53:30 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/playback/gstplaysink.c:
+	  playbin2: implement GST_PLAY_FLAG_NATIVE_{AUDIO,VIDEO}
+	  The flags where present but actually not been taken into account.
+
+2009-02-04 12:06:38 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Add a proper deprecation comment and also drop G_PARAM_CONSTRUCT.
+	  The comment will ensure that is is marked properly in the docs and the
+	  GParamSpecflag was causing a duplicated initialisation of the same value.
+
+2009-02-04 11:18:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Add more g_return_if_fail() calls
+	  Check that we have a valid file descriptor before entering certain functions in
+	  order to avoid undesirable situations.
+	  Add some more debugging in the connect method.
+
+2009-02-04 10:31:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst/audioresample/Makefile.am:
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Only pull in liboil if its actualy used.
+	  Liboil still has quite significant startup overhead especialy on embedded
+	  platforms. In audioresample it was only used for the profiling timer.
+
+2009-02-03 15:26:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Make the flac check more tight to not mistace some aac files for flac. Fixes #570356.
+	  Add comments about the flac format. Tighten the check to not allow values that
+	  refer to headers.
+
+2009-02-03 10:52:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstrtsp.def:
+	  Add new methods
+	  Add new methods to the windows def file.
+
+2009-02-02 17:25:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* tests/check/libs/pbutils.c:
+	  pbutils: remove duplicate detail strings when calling the external codec installer
+	  It doesn't make sense to ask installers for the same codec or element twice, so filter out duplicate requests before calling the external helper script and make the unit test check this works right. Fixes #567636.
+
+2009-02-02 18:05:42 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosink.h:
+	  Add a FIXME 0.11. Make the log message a bit more detailed and add comments.
+
+2009-02-02 15:43:03 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* configure.ac:
+	* gst/audioresample/gstaudioresample.c:
+	  Allow to configure the resampler function for integer to skip the benchmarking. Fix releasing the intger resampler in benchmark.
+
+2009-02-02 13:30:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  Fix buffer_alloc in ximagesink
+	  Remove some useless debug info that reported wrong image sizes.
+	  When upstream does not accept out suggested size, fall back to allocating an
+	  image of the requested width/height instead of the currently configured size.
+	  The problem is that an image is reused from the pool because the width/height
+	  match but the caps on the new buffer are the requested caps with possibly
+	  different height/width resulting in errors.
+
+2009-02-02 12:54:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  Fix documentation for autoplug-select
+	  fix the documentation strings for the autoplug-select signal.
+	  Fixes #570142.
+
+2009-02-02 10:09:07 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	  Fix string leak in rtspmessage
+	  when we remove a header field from a message we must free the value associated
+	  with the key to avoid a memory leak.
+
+2009-01-31 18:45:47 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	  Its "Base Library" and not just "Library".
+
+2009-01-31 18:44:32 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  Link to the class, as we can't link to the members yet.
+
+2009-01-30 17:48:23 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Remove pad-removed handlers after setting the decodebins to NULL.
+	  They do needed cleanup; without this we leak selector requestpads.
+
+2009-01-30 17:47:07 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Unref selector request pad even if we no longer have a selector.
+	  During destruction, we won't have a selector any more, but we still need
+	  to unref the pad to avoid leaking it.
+
+2009-01-30 15:23:23 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Unref source in playbin2's finalize method
+
+2009-01-30 12:04:01 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaysink.c:
+	  Fix more leaks of pads and elements in gstplaysink.
+	  Don't keep extra references to volume and mute elements; we don't need
+	  to do so.
+	  Ensure we unref pads that we have references to, and release request
+	  pads.
+
+2009-01-30 11:04:37 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaysink.c:
+	  Avoid leaking all playsinks. Fix some internal leaks.
+	  Playsink was holding references to itself. Don't do that, it's not cool.
+	  Also, free all chains in dispose.
+
+2009-01-30 10:54:12 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Unref peer request pad after releasing it, since we hold a reference.
+
+2009-01-30 10:52:52 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Fix caps leak in playbin2.
+
+2009-01-30 10:51:11 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Unref active pad from selector when finding active stream.
+
+2009-01-30 10:49:55 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gstplaybin2.c:
+	  Free uris when finalizing playbin2 instance.
+
+2009-01-30 10:38:17 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  Unref pads when iterating over them in analyse_source.
+	  Fixes leak of source's srcpad when using uridecodebin.
+
+2009-01-30 22:22:07 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  Add releaseinfo with online url.
+
+2009-01-30 17:58:15 +0000  Jan Schmidt <jan.schmidt@sun.com>
+
+	* gst/playback/gstplaybasebin.c:
+	  Fix compilation warning on Forte
+
+2009-01-30 17:16:39 +0000  Jan Schmidt <jan.schmidt@sun.com>
+
+	* gst/adder/gstadder.c:
+	  Don't do void pointer arithmetic.
+
+2009-01-30 17:25:51 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* common:
+	  Bump common
+
+2009-01-30 08:50:53 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* autogen.sh:
+	* common:
+	  Use a symbolic link for the pre-commit client-side hook
+
+2009-01-30 08:12:42 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* .gitignore:
+	  Add more files/directories to ignore
+
+2009-01-29 14:00:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	  fix some typos
+	  Fix some typos in the doc string of the new
+	  gst_rtsp_options_as_string() method.
+
+2009-01-29 11:55:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.h:
+	  Add new RTSP message method to set header
+	  Add gst_rtsp_message_take_header() that takes ownership of the passed header
+	  value. This allows us to avoid an allocations and memory copy in some
+	  situations.
+	  API: GstRTSPMessage::gst_rtsp_message_take_header()
+
+2009-01-29 11:51:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  Add new method to docs
+	  Add the new gst_rtsp_options_as_text() method to the docs.
+
+2009-01-28 11:48:01 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  Add method to serialize RTSP options
+	  Add gst_rtsp_options_as_text() method to serialize a set of RTSP options to a
+	  string.
+	  API: GstRTSP::gst_rtsp_options_as_text()
+
+2009-01-26 17:59:37 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  Ensure we have sufficient data when using data scan contexts.
+	  Fixes crashes typefinding things that look like they might contain AAC
+	  data (but probably aren't actually AAC).
+
+2009-01-26 23:32:09 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* ext/gio/Makefile.am:
+	  Fix include order for gio plugin
+
+2009-01-23 23:59:48 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* win32/common/config.h:
+	  Update win32 config.h for 0.10.22.1 dev cycle
+
+2009-01-23 23:16:11 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* .gitignore:
+	* docs/libs/.gitignore:
+	* gst-libs/gst/audio/.gitignore:
+	* gst-libs/gst/video/.gitignore:
+	* po/.gitignore:
+	* tests/examples/dynamic/.gitignore:
+	  Extend and clean up git ignores
+
+2009-01-23 12:31:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst/audioresample/Makefile.am:
+	* gst/audioresample/README:
+	* gst/audioresample/arch.h:
+	* gst/audioresample/buffer.c:
+	* gst/audioresample/buffer.h:
+	* gst/audioresample/debug.c:
+	* gst/audioresample/debug.h:
+	* gst/audioresample/fixed_arm4.h:
+	* gst/audioresample/fixed_arm5e.h:
+	* gst/audioresample/fixed_bfin.h:
+	* gst/audioresample/fixed_debug.h:
+	* gst/audioresample/fixed_generic.h:
+	* gst/audioresample/functable.c:
+	* gst/audioresample/functable.h:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/gstaudioresample.h:
+	* gst/audioresample/resample.c:
+	* gst/audioresample/resample.h:
+	* gst/audioresample/resample_chunk.c:
+	* gst/audioresample/resample_functable.c:
+	* gst/audioresample/resample_ref.c:
+	* gst/audioresample/resample_sse.h:
+	* gst/audioresample/speex_resampler.h:
+	* gst/audioresample/speex_resampler_double.c:
+	* gst/audioresample/speex_resampler_float.c:
+	* gst/audioresample/speex_resampler_int.c:
+	* gst/audioresample/speex_resampler_wrapper.h:
+	* gst/speexresample/Makefile.am:
+	* gst/speexresample/README:
+	* gst/speexresample/arch.h:
+	* gst/speexresample/fixed_arm4.h:
+	* gst/speexresample/fixed_arm5e.h:
+	* gst/speexresample/fixed_bfin.h:
+	* gst/speexresample/fixed_debug.h:
+	* gst/speexresample/fixed_generic.h:
+	* gst/speexresample/gstspeexresample.c:
+	* gst/speexresample/gstspeexresample.h:
+	* gst/speexresample/resample.c:
+	* gst/speexresample/resample_sse.h:
+	* gst/speexresample/speex_resampler.h:
+	* gst/speexresample/speex_resampler_double.c:
+	* gst/speexresample/speex_resampler_float.c:
+	* gst/speexresample/speex_resampler_int.c:
+	* gst/speexresample/speex_resampler_wrapper.h:
+	* gst/typefind/gsttypefindfunctions.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/audioresample.c:
+	* tests/check/elements/speexresample.c:
+	  Rename files and types from speexresample to audioresample
+	  Rename files and types from speexresample to audioresample
+	  to finish the move and to prevent any confusion.
+
+2009-01-23 11:44:53 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  Add some more debugging to the Xv strides
+	  Add some more debugging to the strides as they are received from the server and
+	  the expected strides.
+
+2009-01-23 11:40:26 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  Add typefind function for gsm
+	  Because core now supports typefindfactories without a typefind function we can
+	  register a factory fo GSM that will --if all else fails-- assume the file is a
+	  GSM file based on the registered extension.
+	  Fixes #566661.
+
+2009-01-23 11:37:45 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/playback/gsturidecodebin.c:
+	  Use more performant link function
+	  We can use gst_element_link_pads() instead of the more generic
+	  gst_element_link() function because we know the pads. This saves some cycles
+	  because the more generic function needs to search for possible compatible caps
+	  etc.
+
+2009-01-23 11:33:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-media.c:
+	  Add more codec ids for RIFF formats
+	  Handle codec ID for various other AAC formats.
+	  Sync the list of possible codec ids with that of ffmpeg.
+	  Fixes #567255
+
+2009-01-23 11:27:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/theora/theoradec.c:
+	  Use rounded values for image strides and sizes
+	  Round up the height before calculating the expected size and
+	  strides of the output image.
+
+2009-01-23 11:23:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* ext/alsa/gstalsasink.c:
+	  Improve debug message
+	  Improve the debug message when alsa returns an error.
+
+2009-01-23 11:07:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  Reset queued_bytes counter when flushing
+	  Set the amount of queued bytes in the internal queue back to 0 when we clear the
+	  queue.
+	  Fixes #567982
+
+2009-01-23 10:19:27 +0100  Benjamin Gaignard <benjamin@gaignard.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  Add typefinder for Mobile XMF. Fixes bug #568707.
+
+2009-01-23 10:00:11 +0100  Brian Cameron <brian.cameron@sun.com>
+
+	* configure.ac:
+	  Fix linking on Solaris. Fixes bug #568482.
+	  Check for nsl and socket libraries and add them to
+	  LIBS if they're found. They're needed for socket()
+	  and gethostbyname() on Solaris.
+
+2009-01-22 22:09:47 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/playback/gstplaybasebin.c:
+	  Fix use-after-unref problem noticed by Josep Torra Valles, and run gst-indent
+
+2009-01-22 17:46:59 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Update common snapshot.
+
+2009-01-22 13:47:24 +0100  Sebastian Dröge <slomo@circular-chaos.org>
+
+	* common:
+	  Fix pre-commit hook
+
+2009-01-22 13:12:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	  Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-base
+
+2009-01-22 10:14:28 +0100  Sebastian Dröge <slomo@circular-chaos.org>
+
+	* gst-libs/gst/fft/gstfftf32.c:
+	* gst-libs/gst/fft/gstfftf64.c:
+	* gst-libs/gst/fft/gstffts16.c:
+	* gst-libs/gst/fft/gstffts32.c:
+	  Reduce the number of allocations for creating FFT contexts
+	  Reduce the number of allocations from 2 to 1 for every FFT
+	  context by allocating enough memory for the FFT context
+	  and passing parts of it to the kissfft allocation functions.
+
+2009-01-22 11:32:56 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+	* configure.ac:
+	  Back to devel -> 0.10.22.1
+
+2009-01-22 05:57:53 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* autogen.sh:
+	* common:
+	  Install and use pre-commit indentation hook from common
+
+2009-01-21 13:09:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* tests/check/libs/rtp.c:
+	  Avoid overflows in the padding checks by doing the check slightly differently. Add a unit test to check for correct behaviour.
+
+2009-01-21 04:31:32 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* autogen.sh:
+	  autogen.sh : Use git submodule
+
+=== release 0.10.22 ===
+
+2009-01-19 23:10:50 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* po/LINGUAS:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	* win32/common/config.h:
+	  Release 0.10.22
+	  Original commit message from CVS:
+	  Release 0.10.22
+
+2009-01-19 22:01:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2009-01-16 11:44:04 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/fft/: Use correct struct alignment everywhere to prevent unaligned memory accesses, resulting in SIGBUS ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/fft/_kiss_fft_guts_f32.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_f64.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_s16.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_s32.h:
+	  * gst-libs/gst/fft/kiss_fftr_f32.c: (kiss_fftr_f32_alloc):
+	  * gst-libs/gst/fft/kiss_fftr_f64.c: (kiss_fftr_f64_alloc):
+	  * gst-libs/gst/fft/kiss_fftr_s16.c: (kiss_fftr_s16_alloc):
+	  * gst-libs/gst/fft/kiss_fftr_s32.c: (kiss_fftr_s32_alloc):
+	  Use correct struct alignment everywhere to prevent unaligned
+	  memory accesses, resulting in SIGBUS on sparc and probably others.
+	  Fixes bug #500833.
+
+2009-01-16 11:40:02 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Forward unknown events upstream to allow latency configuration.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c: (gst_tag_demux_srcpad_event):
+	  Forward unknown events upstream to allow latency configuration.
+	  Fixes bug #567960.
+
+2009-01-13 14:47:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Provide the right arguments to a debug line.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (groups_set_locked_state):
+	  Provide the right arguments to a debug line.
+
+2009-01-13 06:51:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Don't reset the colorkey when element is reused. Fixes #567511.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Don't reset the colorkey when element is reused. Fixes #567511.
+
+2009-01-09 23:42:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: 0.10.21.3 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  0.10.21.3 pre-release
+
+2009-01-09 23:13:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/app/gstappsink.c: Store the returned signal id in the right slot when registering the pull-buffer signal.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c:
+	  Store the returned signal id in the right slot when
+	  registering the pull-buffer signal.
+	  Fixes #567168
+	  Spotted by: Thomas Vander Stichele  <thomas at apestaart dot org>
+
+2009-01-09 17:17:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixer.c: Small docs addition to clarify that one really mustn't free the constant GList retur...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixer.c:
+	  Small docs addition to clarify that one really mustn't free
+	  the constant GList returned (#566812).
+
+2009-01-08 17:18:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add GType for GstRTSPUrl and expose a copy function because we can.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtsp/gstrtspurl.c: (register_rtsp_url_type),
+	  (gst_rtsp_url_get_type), (gst_rtsp_url_copy):
+	  * gst-libs/gst/rtsp/gstrtspurl.h:
+	  * win32/common/libgstrtsp.def:
+	  Add GType for GstRTSPUrl and expose a copy function because we can.
+	  API: gst_rtsp_url_copy()
+	  Fixes #567027.
+
+2009-01-07 18:36:04 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add plugin dependency for the GIO and GVfs modules.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/gio/gstgio.c: (plugin_init):
+	  Add plugin dependency for the GIO and GVfs modules.
+	  Fixes bug #566876.
+
+2009-01-07 18:32:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add plugin dependency for the gnomevfs modules.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+	  Add plugin dependency for the gnomevfs modules.
+	  Fixes bug #566875.
+
+2009-01-07 18:30:52 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstcdda.def: Add new symbol to the list of exported symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstcdda.def:
+	  Add new symbol to the list of exported symbols.
+
+2009-01-07 13:52:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Fix some comments and docs.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (gst_play_bin_set_uri), (gst_play_bin_set_suburi),
+	  (no_more_pads_cb), (drained_cb), (group_set_locked_state_unlocked),
+	  (activate_group), (deactivate_group), (groups_set_locked_state),
+	  (gst_play_bin_change_state):
+	  Fix some comments and docs.
+	  Post an error message when we fail to link the selector to the sink.
+	  Remove pushing of EOS, this seems unneeded.
+	  Lock the state of deactivated groups so that they don't accidentally
+	  reactivate when the playbin2 state changes.
+	  Reuse uridecodebins.
+	  Unlock and relock state of groups when playbin goes to NULL.
+	  Fixes #566654.
+	  Fixes #566341.
+	  * gst/playback/gsturidecodebin.c: (pad_removed_cb), (type_found):
+	  Only do something in the pad removed callback when we are dealing with
+	  our sourcepads because the sinkpads don't have a ghostpad.
+
+2009-01-07 10:50:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.*: Make the GType of GstCDDABaseSrcMode public for bindings.
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  * gst-libs/gst/cdda/gstcddabasesrc.h:
+	  Make the GType of GstCDDABaseSrcMode public for bindings.
+	  Fixes bug #566837.
+
+2009-01-06 18:03:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Use new core API to make registry re-scan the plugin whenever visualisations are added or removed (see #350477).
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/libvisual/visual.c: (plugin_init):
+	  Use new core API to make registry re-scan the plugin
+	  whenever visualisations are added or removed (see #350477).
+
+2009-01-06 17:30:31 +0000  José Alburquerque <jaalburqu@svn.gnome.org>
+
+	  gst-libs/gst/audio/gstaudioclock.*: Make gst_audio_clock_new use const gchar* to ease the wrapping of
+	  Original commit message from CVS:
+	  Patch by: José Alburquerque <jaalburqu svn gnome org>
+	  * gst-libs/gst/audio/gstaudioclock.c: (gst_audio_clock_new):
+	  * gst-libs/gst/audio/gstaudioclock.h:
+	  Make gst_audio_clock_new use const gchar* to ease the wrapping of
+	  C++ bindings. Fixes #566723.
+
+2009-01-06 12:16:18 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add pkg-config files for libgstapp. Fixes bug #566761.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * pkgconfig/Makefile.am:
+	  * pkgconfig/gstreamer-app-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-app.pc.in:
+	  Add pkg-config files for libgstapp. Fixes bug #566761.
+
+2009-01-06 11:10:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/app/: Make debug categories static. Use _element_class_set_details_simple().
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst-libs/gst/app/gstappsink.h:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Make debug categories static. Use _element_class_set_details_simple().
+
+2009-01-06 10:56:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/app/: Move private data into a private instance struct. Add padding to instance and class structures exp...
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (_GstAppSinkPrivate),
+	  (gst_app_sink_class_init), (gst_app_sink_init),
+	  (gst_app_sink_dispose), (gst_app_sink_finalize),
+	  (gst_app_sink_unlock_start), (gst_app_sink_unlock_stop),
+	  (gst_app_sink_flush_unlocked), (gst_app_sink_start),
+	  (gst_app_sink_stop), (gst_app_sink_event), (gst_app_sink_preroll),
+	  (gst_app_sink_render), (gst_app_sink_getcaps),
+	  (gst_app_sink_set_caps), (gst_app_sink_get_caps),
+	  (gst_app_sink_is_eos), (gst_app_sink_set_emit_signals),
+	  (gst_app_sink_get_emit_signals), (gst_app_sink_set_max_buffers),
+	  (gst_app_sink_get_max_buffers), (gst_app_sink_set_drop),
+	  (gst_app_sink_get_drop), (gst_app_sink_pull_preroll),
+	  (gst_app_sink_pull_buffer)::
+	  * gst-libs/gst/app/gstappsink.h: (GstAppSinkPrivate), (_GstAppSink)::
+	  * gst-libs/gst/app/gstappsrc.c: (_GstAppSrcPrivate),
+	  (gst_app_src_class_init), (gst_app_src_init),
+	  (gst_app_src_flush_queued), (gst_app_src_dispose),
+	  (gst_app_src_finalize), (gst_app_src_set_property),
+	  (gst_app_src_get_property), (gst_app_src_unlock),
+	  (gst_app_src_unlock_stop), (gst_app_src_start), (gst_app_src_stop),
+	  (gst_app_src_is_seekable), (gst_app_src_check_get_range),
+	  (gst_app_src_query), (gst_app_src_do_seek), (gst_app_src_create),
+	  (gst_app_src_set_caps), (gst_app_src_get_caps),
+	  (gst_app_src_set_size), (gst_app_src_get_size),
+	  (gst_app_src_set_stream_type), (gst_app_src_get_stream_type),
+	  (gst_app_src_set_max_bytes), (gst_app_src_get_max_bytes),
+	  (gst_app_src_set_latencies), (gst_app_src_set_latency),
+	  (gst_app_src_get_latency), (gst_app_src_push_buffer_full),
+	  (gst_app_src_push_buffer_action), (gst_app_src_end_of_stream)::
+	  * gst-libs/gst/app/gstappsrc.h: (GstAppSrcPrivate)::
+	  Move private data into a private instance struct. Add padding to
+	  instance and class structures exposed in public headers. Add
+	  Since markers to the gtk-doc blurbs (#566750).
+
+2009-01-06 10:50:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/app/appsrc_ex.c: Some comments.
+	  Original commit message from CVS:
+	  * tests/examples/app/appsrc_ex.c: (main):
+	  Some comments.
+	  When pulling a buffer we can get NULL when the element is EOS, don't try
+	  to unref this NULL buffer.
+
+2009-01-06 10:16:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/video/: Fix up build flags and include statement for the new generated enumtypes files, to fix dist.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/Makefile.am:
+	  * gst-libs/gst/video/video.h:
+	  Fix up build flags and include statement for the new generated
+	  enumtypes files, to fix dist.
+
+2009-01-05 23:04:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Move AppSrc/AppSink from gst-plugins-bad. Fixes #564421
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  * docs/plugins/inspect/plugin-app.xml:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  * tests/examples/Makefile.am:
+	  * tests/examples/app/Makefile.am:
+	  Move AppSrc/AppSink from gst-plugins-bad. Fixes #564421
+
+2009-01-05 17:13:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Avoid holding the OBJECT_LOCK when calling ringbuffer functions that take the ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_change_state):
+	  Avoid holding the OBJECT_LOCK when calling ringbuffer functions that
+	  take the ringbuffer lock because rinbuffer lock > OBJECT_LOCK. We can do
+	  this because the async_play method is deprecated and usually not called
+	  anymore.
+
+2009-01-05 12:18:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Disconnect signal handlers before destroying a previous decodebin so that we don't end up...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (notify_source_cb), (activate_group):
+	  Disconnect signal handlers before destroying a previous decodebin so
+	  that we don't end up causing deadlocks. Fixes #566586.
+
+2009-01-05 10:59:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: Add property to control pull/push based scheduling.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_class_init), (gst_audio_test_src_init),
+	  (gst_audio_test_src_check_get_range),
+	  (gst_audio_test_src_set_property),
+	  (gst_audio_test_src_get_property):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Add property to control pull/push based scheduling.
+
+2009-01-02 15:04:13 +0000  Alessandro Decina <alessandro.d@gmail.com>
+
+	  Make the seek and colorkey examples depend on gtk+-x11 as they use
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/examples/seek/Makefile.am:
+	  * tests/icles/Makefile.am:
+	  Make the seek and colorkey examples depend on gtk+-x11 as they use
+	  GDK_WINDOW_XID.
+	  Fixes the build with gtk+-quartz.
+
+2008-12-31 16:04:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  win32/common/: Add new exports to win32 files.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgsttag.def:
+	  * win32/common/libgstvideo.def:
+	  Add new exports to win32 files.
+
+2008-12-31 13:31:55 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/tag/gsttagdemux.*: Add GType for GstTagDemuxResult enum.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c: (gst_tag_demux_result_get_type):
+	  * gst-libs/gst/tag/gsttagdemux.h:
+	  Add GType for GstTagDemuxResult enum.
+
+2008-12-31 13:01:30 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/video/: Add glib-mkenum for GstVideoFormat enum GTYPE auto-generation.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/Makefile.am:
+	  * gst-libs/gst/video/video.h:
+	  Add glib-mkenum for GstVideoFormat enum GTYPE auto-generation.
+	  This will help bindings to use it.
+
+2008-12-31 11:20:26 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  Switch glib-mkenum for gst-libs/gst/audio from multichannel- to audio- in order to wrap all enums declarations of tha...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  * gst-libs/gst/audio/audio.c:
+	  * gst-libs/gst/audio/multichannel.h:
+	  * gst-libs/gst/audio/testchannels.c:
+	  * win32/MANIFEST:
+	  * win32/common/audio-enumtypes.c:
+	  (gst_audio_channel_position_get_type),
+	  (gst_ring_buffer_state_get_type),
+	  (gst_ring_buffer_seg_state_get_type),
+	  (gst_buffer_format_type_get_type), (gst_buffer_format_get_type):
+	  * win32/common/audio-enumtypes.h:
+	  * win32/common/multichannel-enumtypes.c:
+	  * win32/common/multichannel-enumtypes.h:
+	  * win32/vs6/grammar.dsp:
+	  * win32/vs6/libgstaudio.dsp:
+	  * win32/vs7/libgstaudio.vcproj:
+	  * win32/vs8/libgstaudio.vcproj:
+	  Switch glib-mkenum for gst-libs/gst/audio from multichannel- to
+	  audio- in order to wrap all enums declarations of that library.
+	  This modification should not matter since that header file is not a
+	  public header (it will be included by public headers).
+	  Modify win32 crap^Wfiles accordingly.
+
+2008-12-30 17:55:07 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/audio/: Complete Sebastien's commit from the 13th by exporting the _slave_method_get_type() methods.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Complete Sebastien's commit from the 13th by exporting the
+	  _slave_method_get_type() methods.
+
+2008-12-29 16:45:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsrc.*: Add properties and methods to configure and retrieve the min and max latencies.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_init), (gst_app_src_set_property),
+	  (gst_app_src_get_property), (gst_app_src_query),
+	  (gst_app_src_set_latencies), (gst_app_src_set_latency),
+	  (gst_app_src_get_latency), (gst_app_src_push_buffer_full):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Add properties and methods to configure and retrieve the min and max
+	  latencies.
+
+2008-12-20 17:38:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/: Implement URI query. Fixes bug #562949.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesink.c: (gst_gio_base_sink_query):
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_class_init),
+	  (gst_gio_base_src_query):
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_query):
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init),
+	  (gst_gnome_vfs_src_query):
+	  Implement URI query. Fixes bug #562949.
+
+2008-12-20 12:48:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Add some debug info.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (no_more_pads_cb):
+	  Add some debug info.
+	  * gst/playback/gstplaysink.c: (gen_video_chain), (gen_audio_chain),
+	  (gst_play_sink_reconfigure), (gst_play_sink_request_pad),
+	  (gst_play_sink_release_pad):
+	  Add some more debug info.
+	  Reconfigure the audio chain when we switch between raw and encoded audio
+	  in gapless playback.
+
+2008-12-20 12:45:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Pause the write thread before deactivating and releasing the ringbuffer to avo...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_setcaps):
+	  Pause the write thread before deactivating and releasing the ringbuffer
+	  to avoid a deadlock when we do gapless playback with different sample
+	  rates in playbin2.  Fixes #564929.
+
+2008-12-19 13:03:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Make GstAudioSrcSlaveMethod get_type() function non-static as it's public now.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  Make GstAudioSrcSlaveMethod get_type() function non-static
+	  as it's public now.
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgstnetbuffer.def:
+	  Add some missing functions to the list of exported symbols.
+
+2008-12-18 12:37:33 +0000  Andrew Feren <acferen@yahoo.com>
+
+	  gst-libs/gst/netbuffer/gstnetbuffer.*: Make gst_netaddress_get_ip4_address fail for v6 addresses.
+	  Original commit message from CVS:
+	  Patch by: Andrew Feren <acferen at yahoo dot com>
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  (gst_netaddress_get_ip4_address), (gst_netaddress_get_ip6_address),
+	  (gst_netaddress_get_address_bytes),
+	  (gst_netaddress_set_address_bytes):
+	  * gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  Make gst_netaddress_get_ip4_address fail for v6 addresses.
+	  Make gst_netaddress_get_ip6_address either fail or return the v4
+	  address as a transitional v6 address.
+	  Add two convenience functions:
+	  API: gst_netaddress_get_address_bytes()
+	  API: gst_netaddress_set_address_bytes()
+	  Fixes #564896.
+
+2008-12-17 13:51:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add appsrc and appsink documentation.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init):
+	  Add appsrc and appsink documentation.
+
+2008-12-17 08:51:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/: Cleanup variable names to make the adder-loop easier to understand.
+	  Original commit message from CVS:
+	  * gst/adder/Makefile.am:
+	  * gst/adder/gstadder.c:
+	  Cleanup variable names to make the adder-loop easier to understand.
+	  Also try to use liboil to spee it up, but ifdef it out as it does not
+	  make any change for me (Intel pentim M (sse,sse2) please try on other
+	  systems).
+
+2008-12-16 20:16:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add minimal docs to make the remaining tcp elements show up.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * gst/tcp/gsttcpclientsink.c:
+	  * gst/tcp/gsttcpclientsrc.c:
+	  * gst/tcp/gsttcpserversrc.c:
+	  Add minimal docs to make the remaining tcp elements show up.
+	  Fixes #564139.
+
+2008-12-15 12:02:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/: Fix example to unref after emiting the push-buffer action.
+	  Original commit message from CVS:
+	  * examples/app/appsrc-ra.c: (feed_data):
+	  * examples/app/appsrc-seekable.c: (feed_data):
+	  * examples/app/appsrc-stream.c: (read_data):
+	  * examples/app/appsrc-stream2.c: (feed_data):
+	  Fix example to unref after emiting the push-buffer action.
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_push_buffer_full), (gst_app_src_push_buffer),
+	  (gst_app_src_push_buffer_action):
+	  Don't take the ref on the buffer in push-buffer action because it's too
+	  awkward for bindings. Fixes #564482.
+
+2008-12-13 19:32:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  win32/common/config.h: Update to CVS version.
+	  Original commit message from CVS:
+	  * win32/common/config.h:
+	  Update to CVS version.
+	  * win32/common/config.h.in:
+	  Hardcode path to plugin install helper exe, just like we hardcode
+	  the paths in core. Removes another source of VCS conflicts for
+	  people hacking gst-plugins-base on systems with autotools.
+
+2008-12-13 16:21:12 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  m4/Makefile.am: And a couple more .m4 that don't exist anymore with gettext 0.17
+	  Original commit message from CVS:
+	  * m4/Makefile.am:
+	  And a couple more .m4 that don't exist anymore with gettext 0.17
+
+2008-12-13 12:41:56 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  m4/Makefile.am: inttypes.m4 hasn't been available since gettext-0.15, and since we now require gettext >= 0.17 ... we...
+	  Original commit message from CVS:
+	  * m4/Makefile.am:
+	  inttypes.m4 hasn't been available since gettext-0.15, and since we now
+	  require gettext >= 0.17 ... we can remove it from the list of files to
+	  dist.
+
+2008-12-13 06:57:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/: API: Add GST_TYPE_BASE_AUDIO_(SRC|SINK)_SLAVE_METHOD to the public API. This is needed for the C...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_slave_method_get_type),
+	  (gst_base_audio_sink_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_slave_method_get_type),
+	  (gst_base_audio_src_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  API: Add GST_TYPE_BASE_AUDIO_(SRC|SINK)_SLAVE_METHOD to the
+	  public API. This is needed for the C++ bindings to be able
+	  to use this base classes. Fixes bug #564200, #564206.
+
+2008-12-12 19:41:28 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: Remove erroneous gst_buffer_ref().
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_handle_event):
+	  Remove erroneous gst_buffer_ref().
+	  * tests/check/libs/rtp.c: (GST_START_TEST):
+	  Don't forget to unref the buffer once you're done with it.
+
+2008-12-12 13:06:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/: XRef to GstXOverlay.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gstplaybin2.c:
+	  XRef to GstXOverlay.
+
+2008-12-12 10:54:45 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gsturidecodebin.c: Free the factory array when finalizing.
+	  Original commit message from CVS:
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_finalize):
+	  Free the factory array when finalizing.
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
+	  Use a GstStaticPadTemplate since the src pad caps are fixed.
+
+2008-12-12 07:17:21 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisenc.c: Make vorbisenc's pad template behave like vorbisdec's. Fixes a leak with pad templates.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_base_init),
+	  (gst_vorbis_enc_init):
+	  Make vorbisenc's pad template behave like vorbisdec's. Fixes a leak with
+	  pad templates.
+
+2008-12-12 07:15:22 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Add mapping for VP6 in avi/riff.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add mapping for VP6 in avi/riff.
+
+2008-12-11 15:49:12 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/subparse/samiparse.c: Some versions of libxml seem to be very picky as to strict formatting of the input and neve...
+	  Original commit message from CVS:
+	  * gst/subparse/samiparse.c: (sami_context_push_state),
+	  (sami_context_pop_state), (start_sami_element), (end_sami_element):
+	  Some versions of libxml seem to be very picky as to strict formatting
+	  of the input and never 'close' the final </body> tag.
+	  In order to fix that bad behaviour, we trigger the flushing of
+	  remaining data on both </body> and </sami>.
+	  Fixes #557365
+
+2008-12-11 12:32:03 +0000  Guillaume Emont <guillaume@fluendo.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinders for MS Word files and OS X .DS_Store files to prevent them to be...
+	  Original commit message from CVS:
+	  Patch by: Guillaume Emont <guillaume at fluendo dot com>
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Add typefinders for MS Word files and OS X .DS_Store files to
+	  prevent them to be recognized as MPEG files. Fixes bug #564098.
+
+2008-12-11 11:04:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Add some more debug info.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gen_audio_chain),
+	  (gst_play_sink_reconfigure):
+	  Add some more debug info.
+	  Fix linking of just an encoded sink.
+	  Handle failure to create a sink chain more gracefully than crashing.
+
+2008-12-11 10:33:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/pipelines/theoraenc.c: Pushing 10 buffers is enough to run the test.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/theoraenc.c: (GST_START_TEST):
+	  Pushing 10 buffers is enough to run the test.
+
+2008-12-11 10:28:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Hook up the SKIP seek flag.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (do_seek), (stop_cb),
+	  (skip_toggle_cb), (rate_spinbutton_changed_cb), (msg_segment_done),
+	  (main):
+	  Hook up the SKIP seek flag.
+
+2008-12-10 18:43:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Error out with a missing-plugin error when the input-selector was not found.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (pad_added_cb):
+	  Error out with a missing-plugin error when the input-selector was not
+	  found.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_reconfigure):
+	  Indentation.
+
+2008-12-10 17:39:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Use G_DEFINE_TYPE.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gst_play_sink_class_init),
+	  (gst_play_sink_dispose), (gst_play_sink_finalize), (try_element),
+	  (gen_video_chain), (gen_audio_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_send_event), (gst_play_sink_change_state):
+	  Use G_DEFINE_TYPE.
+	  Try to set the selected sink to READY before using it. This will allow
+	  for detection of incompatible formats sooner.
+	  Don't cause a fatal error when conversion elements are missing but post
+	  a missing-element message and a warning instead because things might
+	  still link and run fine.
+	  Simplyfy the construction of audio and video sink chains.
+
+2008-12-10 14:55:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Use G_DEFINE_TYPE for the OggPad to get some threadsafe type init from glib.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_class_init),
+	  (gst_ogg_pad_dispose), (gst_ogg_pad_finalize):
+	  Use G_DEFINE_TYPE for the OggPad to get some threadsafe type
+	  init from glib.
+
+2008-12-10 08:19:13 +0000  Luis Menina <liberforce@freeside.fr>
+
+	  gst/: Include glib.h instead of a specific GLib header. Including single
+	  Original commit message from CVS:
+	  Patch by: Luis Menina <liberforce at freeside dot fr>
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Include glib.h instead of a specific GLib header. Including single
+	  GLib headers is deprecated. Fixes bug #563904.
+
+2008-12-09 18:30:10 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst-libs/gst/riff/riff-media.c: Support higher max audio rates for some formats (WAV, Vorbis, LPCM).
+	  Original commit message from CVS:
+	  2008-12-09  Julien Moutte  <julien@fluendo.com>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Support higher max audio rates for some formats (WAV, Vorbis, LPCM).
+
+2008-12-09 17:21:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-read.c: Fix handling of odd chunks in riff metadata.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c:
+	  Fix handling of odd chunks in riff metadata.
+
+2008-12-08 18:44:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/volume/gstvolume.c: Use new basetransform vmethod to reconfigure the dynamic properties and any pending volume/mu...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (gst_volume_class_init),
+	  (volume_before_transform), (volume_transform_ip):
+	  Use new basetransform vmethod to reconfigure the dynamic properties and
+	  any pending volume/mute changes. Fixes #563508.
+
+2008-12-08 18:12:18 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: First check for "theoraenc theoradec" and if that failed check for "theora >= 1.0alpha5". The former ap...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  First check for "theoraenc theoradec" and if that failed check
+	  for "theora >= 1.0alpha5". The former appeared in 1.0beta3 and
+	  deprecate the latter. Also linking on Windows fails with just "theora"
+	  and the version check would fail for the release candidates.
+	  Fixes bug #563718.
+
+2008-12-08 15:25:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/: Add basic docs to decodebin and link to decodebin from decodebin2.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstdecodebin2.c:
+	  Add basic docs to decodebin and link to decodebin from decodebin2.
+
+2008-12-08 12:08:32 +0000  Olivier Crete <tester@tester.ca>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.*: Implement gst_rtcp_packet_remove(). Fixes #563174.
+	  Original commit message from CVS:
+	  Patch by: Olivier Crete  <tester at tester ca>
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_packet_remove):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Implement gst_rtcp_packet_remove(). Fixes #563174.
+	  * tests/check/libs/rtp.c: (GST_START_TEST), (rtp_suite):
+	  Add unit test for some RTCP functions.
+
+2008-12-04 20:09:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Apparently AC_CONFIG_MACRO_DIR breaks when using more
+	  than one macro directory, reverting last change.
+
+2008-12-04 19:47:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to
+	  our M4 macros.
+
+2008-12-03 17:47:44 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  sys/: Clear all flags on buffers returned from the image pool.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_buffer_alloc):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_buffer_alloc):
+	  Clear all flags on buffers returned from the image pool.
+	  Fixes #563143
+
+2008-12-01 19:36:35 +0000  이문형 <iwings@gmail.com>
+
+	  gst-libs/gst/app/gstappsrc.c: Don't forget to release the lock again if we bail out because some pad is flushing or w...
+	  Original commit message from CVS:
+	  Patch by: 이문형 <iwings at gmail dot com>
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_push_buffer):
+	  Don't forget to release the lock again if we bail out because some
+	  pad is flushing or we've reached EOS, otherwise things will lock up
+	  next time _push_buffer() is called (#562802).
+
+2008-11-29 13:31:47 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Require gettext 0.17 because older versions don't mix with libtool 2.2. At build time an older gettext version will s...
+	  Original commit message from CVS:
+	  Patch by: Cygwin Ports maintainer
+	  <yselkowitz at users dot sourceforge dot net>
+	  * autogen.sh:
+	  * configure.ac:
+	  Require gettext 0.17 because older versions don't mix with libtool
+	  2.2. At build time an older gettext version will still work.
+	  Fixes bug #556091.
+
+2008-11-28 13:30:36 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* ChangeLog:
+	* gst/speexresample/Makefile.am:
+	  fix build
+	  Original commit message from CVS:
+	  fix build
+
+2008-11-28 09:44:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Update documentation of speexresample for the new element name.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * gst/speexresample/gstspeexresample.c:
+	  Update documentation of speexresample for the new element name.
+
+2008-11-28 09:04:46 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/README: Update README with the latest diff between the Speex resampler and our copy.
+	  Original commit message from CVS:
+	  * gst/speexresample/README:
+	  Update README with the latest diff between the Speex resampler
+	  and our copy.
+
+2008-11-28 08:37:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Update the debug category from speex_resample to audioresample.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c: (plugin_init):
+	  Update the debug category from speex_resample to audioresample.
+
+2008-11-27 19:13:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Remove audioresample files.
+	  Original commit message from CVS:
+	  * gst/audioresample/Makefile.am:
+	  * gst/audioresample/buffer.c:
+	  * gst/audioresample/buffer.h:
+	  * gst/audioresample/debug.c:
+	  * gst/audioresample/debug.h:
+	  * gst/audioresample/functable.c:
+	  * gst/audioresample/functable.h:
+	  * gst/audioresample/gstaudioresample.c:
+	  * gst/audioresample/gstaudioresample.h:
+	  * gst/audioresample/resample.c:
+	  * gst/audioresample/resample.h:
+	  * gst/audioresample/resample_chunk.c:
+	  * gst/audioresample/resample_functable.c:
+	  * gst/audioresample/resample_ref.c:
+	  * tests/check/elements/audioresample.c:
+	  Remove audioresample files.
+
+2008-11-27 17:04:07 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  docs/plugins/inspect/plugin-audioresample.xml: Regenerated for library filename change.
+	  Original commit message from CVS:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  Regenerated for library filename change.
+
+2008-11-27 16:57:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Rename the moved speexresample to audioresample, integrate into the build system and remove the old audioresample fro...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gio.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  * gst/speexresample/gstspeexresample.c: (plugin_init):
+	  * gst/speexresample/Makefile.am:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/speexresample.c: (setup_speexresample),
+	  (GST_START_TEST), (test_pipeline):
+	  Rename the moved speexresample to audioresample, integrate into the
+	  build system and remove the old audioresample from the build system.
+	  Fixes bug #558124, #385061, #346218, #116051.
+
+2008-11-27 16:47:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Avoid nasty int overflows after about 12 hours and 25 minutes when these code p...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_get_offset), (gst_base_audio_src_create):
+	  Avoid nasty int overflows after about 12 hours and 25 minutes when these
+	  code paths are triggered.
+	  A free beer to Håvard Graff for finding this!
+
+2008-11-27 11:16:44 +0000  이문형 <iwings@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: A successful gst_poll_wait() doesn't always mean successful connect() on
+	  Original commit message from CVS:
+	  Patch by: 이문형 <iwings at gmail dot com>
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect):
+	  A successful gst_poll_wait() doesn't always mean successful connect() on
+	  Windows.  We should check errors by calling gst_poll_fd_has_error().
+	  See #561924.
+
+2008-11-25 16:37:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/elements/speexresample.c: Make unit test again faster to prevent timeouts with valgrind.
+	  Original commit message from CVS:
+	  * tests/check/elements/speexresample.c: (test_pipeline):
+	  Make unit test again faster to prevent timeouts with valgrind.
+
+2008-11-25 15:33:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.c: Fix typo in the docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  Fix typo in the docs.
+
+2008-11-25 15:28:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: If no stream was found before receiving EOS, post an error message.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_sink_event):
+	  If no stream was found before receiving EOS, post an error message.
+	  Fixes #561924.
+
+2008-11-25 15:14:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/: Parse segment events.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/theoraenc.c: (gst_theora_enc_init),
+	  (theora_buffer_from_packet), (theora_push_packet),
+	  (theora_enc_sink_event), (theora_enc_is_discontinuous),
+	  (theora_enc_chain):
+	  Parse segment events.
+	  Pass incomming buffer timestamps to outgoing buffers.
+	  Use the running_time to construct the granulepos.
+	  Fixes #562163.
+
+2008-11-25 11:00:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Fix buffer-duration property.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (activate_group):
+	  Fix buffer-duration property.
+
+2008-11-25 10:32:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Really fix audiosink drain handling by keeping track of the running_time of th...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain), (gst_base_audio_sink_event),
+	  (gst_base_audio_sink_sync_latency), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_change_state):
+	  Really fix audiosink drain handling by keeping track of the running_time
+	  of the last sample.
+
+2008-11-24 20:25:24 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstplaybin2.c: Add notification of current stream. Add ability to configure buffer sizes.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c:
+	  Add notification of current stream. Add ability to configure buffer
+	  sizes.
+	  * gst/playback/gsturidecodebin.c:
+	  Add ability to configure buffer sizes for streaming mode.
+	  Bug #561734.
+
+2008-11-24 20:11:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Time is already in running_time. Remove base_time handling. Fixes audiosinks n...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  Time is already in running_time. Remove base_time handling. Fixes
+	  audiosinks not draining and thus chopping some audio in the end.
+
+2008-11-24 19:18:59 +0000  David Schleef <ds@schleef.org>
+
+	  ext/ogg/gstoggmux.*: If we're muxing a dirac stream, flush the page after every picture.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggmux.h:
+	  If we're muxing a dirac stream, flush the page after every picture.
+
+2008-11-24 12:56:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Add one log message to check for audio_drained. Sync one log message with the ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  Add one log message to check for audio_drained. Sync one log message
+	  with the condition. Send EOS after draining audio in pull mode.
+
+2008-11-24 12:07:10 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/: Use gst_buffer_try_new_and_alloc() and fail properly if the allocation failed. This prevents abort() if downstr...
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_create):
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create):
+	  Use gst_buffer_try_new_and_alloc() and fail properly if the
+	  allocation failed. This prevents abort() if downstream elements
+	  request an insane amount of memory.
+
+2008-11-24 12:03:11 +0000  Jon Trowbridge <trow@ximian.com>
+
+	  gst/volume/gstvolume.*: Cleanup volume, define and use default values.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (volume_update_volume), (gst_volume_set_volume),
+	  (gst_volume_get_volume), (gst_volume_set_mute),
+	  (gst_volume_class_init), (gst_volume_init),
+	  (volume_process_double), (volume_process_float),
+	  (volume_process_int32), (volume_process_int32_clamp),
+	  (volume_process_int24), (volume_process_int24_clamp),
+	  (volume_process_int16), (volume_process_int16_clamp),
+	  (volume_process_int8), (volume_process_int8_clamp), (volume_setup),
+	  (volume_transform_ip), (volume_set_property),
+	  (volume_get_property):
+	  * gst/volume/gstvolume.h:
+	  Cleanup volume, define and use default values.
+	  Recalculate new volume and mute setup before processing. Fixes #561789.
+	  * tests/check/elements/volume.c: (GST_START_TEST), (volume_suite):
+	  Add controller unit test. Patch by: Jonathan Matthew
+	  Fix bogus test that messed with basetransform's internal state.
+
+2008-11-22 15:02:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/elements/speexresample.c: Make the unit test a bit faster to prevent timeouts, especially with valgrind.
+	  Original commit message from CVS:
+	  * tests/check/elements/speexresample.c: (GST_START_TEST):
+	  Make the unit test a bit faster to prevent timeouts, especially
+	  with valgrind.
+
+2008-11-22 14:44:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videorate/gstvideorate.c: Add jpeg and png image media types to the caps. Fixes #561436.
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c:
+	  Add jpeg and png image media types to the caps. Fixes #561436.
+
+2008-11-22 14:31:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Don't post an error when we can't configure the volume but post a warning instead. Fixes ...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gen_audio_chain):
+	  Don't post an error when we can't configure the volume but post a
+	  warning instead. Fixes #561780.
+
+2008-11-21 20:32:56 +0000  Jonathan Rosser <jonathan.rosser@rd.bbc.co.uk>
+
+	  gst/videotestsrc/: Add a zone plate pattern generator based on BBC R&D Report 1978/23 (yeah *that* 1978).  Try 'video...
+	  Original commit message from CVS:
+	  Patch by: Jonathan Rosser <jonathan.rosser@rd.bbc.co.uk>
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/videotestsrc/videotestsrc.c:
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add a zone plate pattern generator based on BBC R&D Report
+	  1978/23 (yeah *that* 1978).  Try 'videotestsrc pattern=zone-plate
+	  kx2=20 ky2=20 kt=1'.
+
+2008-11-21 15:45:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Add a "filter-length" property that maps to the quality values for compatibilty...
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_class_init), (gst_speex_resample_set_property),
+	  (gst_speex_resample_get_property):
+	  Add a "filter-length" property that maps to the quality values
+	  for compatibilty with audioresample.
+
+2008-11-21 00:04:48 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstdecodebin2.c: Fix random fat-fingering making this not compile.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  Fix random fat-fingering making this not compile.
+
+2008-11-20 22:11:38 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstdecodebin2.c: If the top-level type of the stream is plain text, don't try to decode it, matching beh...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  If the top-level type of the stream is plain text, don't try to decode
+	  it, matching behaviour of decodebin.
+	  * gst/playback/gstplaysink.c:
+	  If we fail to generate a text chain (e.g. due to missing optional
+	  plugins), don't crash.
+
+2008-11-20 22:06:05 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/rtsp/gstrtspdefs.c: Fix win32 build. Oops.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspdefs.c:
+	  Fix win32 build. Oops.
+
+2008-11-20 21:40:49 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/rtsp/gstrtspdefs.c: Use WSAGetLastError() rather than errno/h_errno on win32.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspdefs.c:
+	  Use WSAGetLastError() rather than errno/h_errno on win32.
+
+2008-11-20 21:20:27 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/riff/riff-media.c: Support WMA Lossless properly.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c:
+	  Support WMA Lossless properly.
+
+2008-11-19 00:24:44 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videotestsrc/: Add "colorspec" property, specifying whether to generate BT.601 or BT.709 video.  This only affect...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/videotestsrc/videotestsrc.c:
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add "colorspec" property, specifying whether to generate BT.601
+	  or BT.709 video.  This only affects YCbCr values, not RGB, since
+	  if you're generating a 709 test pattern, presumably you want
+	  709 RGB primaries, not 601.  Also add "smpte75" pattern, which
+	  uses 75% colors instead of 100%, since this is often more useful
+	  for testing (and also follows the SMPTE EG-1 guideline).
+
+2008-11-18 18:08:42 +0000  Alessandro Decina <alessandro.d@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Add a "sink-caps" property to decodebin like it's done for decodebin2.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c:
+	  Add a "sink-caps" property to decodebin like it's done for decodebin2.
+	  Fixes #560380.
+
+2008-11-14 21:44:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/audioresample/gstaudioresample.c: Guard against a NULL dereference I somehow encountered - with a FLUSH_STOP arri...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  Guard against a NULL dereference I somehow encountered -
+	  with a FLUSH_STOP arriving either before basetransform _start(),
+	  or after _stop().
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Make sure we never jump backwards when typefinding corrupt mov files.
+
+2008-11-14 21:39:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/propertyprobe.c: Fix random type causing a docs warning.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  Fix random type causing a docs warning.
+
+2008-11-14 15:40:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/v4l/gstv4l.c: Give it a minimal rank for autovideosrc.
+	  Original commit message from CVS:
+	  * sys/v4l/gstv4l.c:
+	  Give it a minimal rank for autovideosrc.
+
+2008-11-13 21:11:13 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	  gst/typefind/gsttypefindfunctions.c: Improve typefinding of ISO JPEG2000 mime types.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (jp2_type_find),
+	  (plugin_init):
+	  Improve typefinding of ISO JPEG2000 mime types.
+
+2008-11-13 18:18:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/xvimage/xvimagesink.*: Avoid typechecking when we do trivial casts.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_finalize),
+	  (gst_xvimagesink_xvimage_put), (gst_xvimagesink_setcaps),
+	  (gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
+	  * sys/xvimage/xvimagesink.h:
+	  Avoid typechecking when we do trivial casts.
+	  Move error handling out of the main program flow.
+	  Sneak in the display-region caps property, not completely correct yet.
+	  Cache the width/height in buffer_alloc instead of parsing it from the
+	  caps all the time.
+
+2008-11-13 17:27:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: don't try to unlink the selector sinkpad when we don't have it yet. This can happen if an...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (deactivate_group):
+	  don't try to unlink the selector sinkpad when we don't have it yet. This
+	  can happen if an error occured before the group was complete.
+
+2008-11-13 15:37:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Avoid expensive type checks we already did as part of the _validate() function that ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data),
+	  (gst_rtp_buffer_set_packet_len), (gst_rtp_buffer_get_packet_len),
+	  (gst_rtp_buffer_get_header_len), (gst_rtp_buffer_get_version),
+	  (gst_rtp_buffer_set_version), (gst_rtp_buffer_get_padding),
+	  (gst_rtp_buffer_set_padding), (gst_rtp_buffer_pad_to),
+	  (gst_rtp_buffer_get_extension), (gst_rtp_buffer_set_extension),
+	  (gst_rtp_buffer_get_extension_data),
+	  (gst_rtp_buffer_set_extension_data), (gst_rtp_buffer_get_ssrc),
+	  (gst_rtp_buffer_set_ssrc), (gst_rtp_buffer_get_csrc_count),
+	  (gst_rtp_buffer_get_csrc), (gst_rtp_buffer_set_csrc),
+	  (gst_rtp_buffer_get_marker), (gst_rtp_buffer_set_marker),
+	  (gst_rtp_buffer_get_payload_type),
+	  (gst_rtp_buffer_set_payload_type), (gst_rtp_buffer_get_seq),
+	  (gst_rtp_buffer_set_seq), (gst_rtp_buffer_get_timestamp),
+	  (gst_rtp_buffer_set_timestamp),
+	  (gst_rtp_buffer_get_payload_subbuffer),
+	  (gst_rtp_buffer_get_payload_len), (gst_rtp_buffer_get_payload):
+	  Avoid expensive type checks we already did as part of the
+	  _validate() function that should be called first.
+
+2008-11-11 16:40:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Fix some cases where a newsegment event was not sent.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c: (create_segment_event),
+	  (gst_base_rtp_depayload_push_full),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Fix some cases where a newsegment event was not sent.
+
+2008-11-11 15:52:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Catch state change errors and stop from the uridecodebin elements instead of trying to co...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (activate_group):
+	  Catch state change errors and stop from the uridecodebin elements
+	  instead of trying to continue in vain.
+
+2008-11-10 14:53:45 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/: Wim, you're a bad boy. You don't want people to contact you or what?
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  * gst/h264parse/gsth264parse.c:
+	  Wim, you're a bad boy. You don't want people to contact you or what?
+
+2008-11-10 14:22:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Use gst_base_sink_do_preroll() to wait for PLAYING and before waiting for the ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_sync_latency), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_callback):
+	  Use gst_base_sink_do_preroll() to wait for PLAYING and before waiting
+	  for the latency to expire, fixes #559567.
+
+2008-11-10 13:55:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/adder/gstadder.c: Change author string after seeing output of gst-inspector.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Change author string after seeing output of gst-inspector.
+
+2008-11-10 10:33:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Don't try to do crazy things when we only have a text pad without a video pad. Fixes #559...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gst_play_sink_reconfigure):
+	  Don't try to do crazy things when we only have a text pad without a
+	  video pad. Fixes #559478.
+
+2008-11-07 17:35:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsrc.*: Add is-live property.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_init), (gst_app_src_set_property),
+	  (gst_app_src_get_property), (gst_app_src_push_buffer):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Add is-live property.
+	  Add some more docs.
+
+2008-11-06 12:14:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: Fix case where we don't have a range for the rates or channels as is the case with tr...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Fix case where we don't have a range for the rates or channels as is the
+	  case with truespeech.
+
+2008-11-05 19:18:25 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/volume/gstvolume.*: Keep negotiated state in a separate variable.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_update_real_volume),
+	  (gst_volume_set_volume), (gst_volume_get_volume),
+	  (gst_volume_set_mute), (gst_volume_init), (volume_setup),
+	  (volume_transform_ip), (volume_update_mute),
+	  (volume_update_volume), (volume_get_property):
+	  * gst/volume/gstvolume.h:
+	  Keep negotiated state in a separate variable.
+	  Protect the volume and mute properties with the object lock.
+	  Protect modifying the transform with the transform lock.
+
+2008-11-05 12:20:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Only convert caps to string when debug is enabled.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps):
+	  Only convert caps to string when debug is enabled.
+
+2008-11-04 18:17:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/: Copy seqnum.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_init),
+	  (gst_theora_dec_reset), (theora_dec_src_event),
+	  (theora_dec_sink_event), (theora_handle_type_packet):
+	  Copy seqnum.
+	  Keep events in a pending list, like vorbisdec, instead of trying
+	  to construct a segment event ourselves.
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_reset),
+	  (vorbis_dec_src_event), (vorbis_dec_sink_event):
+	  * ext/vorbis/vorbisdec.h:
+	  Copy seqnum.
+
+2008-11-04 17:24:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.*: Copy seqnums around to track playback segments and messages.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_deactivate_current_chain),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_handle_page),
+	  (gst_ogg_demux_loop):
+	  * ext/ogg/gstoggdemux.h:
+	  Copy seqnums around to track playback segments and messages.
+
+2008-11-04 12:42:18 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Don't install static libs for plugins. Fixes #550851 for -bad.
+	  Original commit message from CVS:
+	  * ext/alsaspdif/Makefile.am:
+	  * ext/amrwb/Makefile.am:
+	  * ext/apexsink/Makefile.am:
+	  * ext/arts/Makefile.am:
+	  * ext/artsd/Makefile.am:
+	  * ext/audiofile/Makefile.am:
+	  * ext/audioresample/Makefile.am:
+	  * ext/bz2/Makefile.am:
+	  * ext/cdaudio/Makefile.am:
+	  * ext/celt/Makefile.am:
+	  * ext/dc1394/Makefile.am:
+	  * ext/dirac/Makefile.am:
+	  * ext/directfb/Makefile.am:
+	  * ext/divx/Makefile.am:
+	  * ext/dts/Makefile.am:
+	  * ext/faac/Makefile.am:
+	  * ext/faad/Makefile.am:
+	  * ext/gsm/Makefile.am:
+	  * ext/hermes/Makefile.am:
+	  * ext/ivorbis/Makefile.am:
+	  * ext/jack/Makefile.am:
+	  * ext/jp2k/Makefile.am:
+	  * ext/ladspa/Makefile.am:
+	  * ext/lcs/Makefile.am:
+	  * ext/libfame/Makefile.am:
+	  * ext/libmms/Makefile.am:
+	  * ext/metadata/Makefile.am:
+	  * ext/mpeg2enc/Makefile.am:
+	  * ext/mplex/Makefile.am:
+	  * ext/musepack/Makefile.am:
+	  * ext/musicbrainz/Makefile.am:
+	  * ext/mythtv/Makefile.am:
+	  * ext/nas/Makefile.am:
+	  * ext/neon/Makefile.am:
+	  * ext/ofa/Makefile.am:
+	  * ext/polyp/Makefile.am:
+	  * ext/resindvd/Makefile.am:
+	  * ext/sdl/Makefile.am:
+	  * ext/shout/Makefile.am:
+	  * ext/snapshot/Makefile.am:
+	  * ext/sndfile/Makefile.am:
+	  * ext/soundtouch/Makefile.am:
+	  * ext/spc/Makefile.am:
+	  * ext/swfdec/Makefile.am:
+	  * ext/tarkin/Makefile.am:
+	  * ext/theora/Makefile.am:
+	  * ext/timidity/Makefile.am:
+	  * ext/twolame/Makefile.am:
+	  * ext/x264/Makefile.am:
+	  * ext/xine/Makefile.am:
+	  * ext/xvid/Makefile.am:
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/dshow/Makefile.am:
+	  * gst/aiffparse/Makefile.am:
+	  * gst/app/Makefile.am:
+	  * gst/audiobuffer/Makefile.am:
+	  * gst/bayer/Makefile.am:
+	  * gst/cdxaparse/Makefile.am:
+	  * gst/chart/Makefile.am:
+	  * gst/colorspace/Makefile.am:
+	  * gst/dccp/Makefile.am:
+	  * gst/deinterlace/Makefile.am:
+	  * gst/deinterlace2/Makefile.am:
+	  * gst/dvdspu/Makefile.am:
+	  * gst/festival/Makefile.am:
+	  * gst/filter/Makefile.am:
+	  * gst/flacparse/Makefile.am:
+	  * gst/flv/Makefile.am:
+	  * gst/games/Makefile.am:
+	  * gst/h264parse/Makefile.am:
+	  * gst/librfb/Makefile.am:
+	  * gst/mixmatrix/Makefile.am:
+	  * gst/modplug/Makefile.am:
+	  * gst/mpeg1sys/Makefile.am:
+	  * gst/mpeg4videoparse/Makefile.am:
+	  * gst/mpegdemux/Makefile.am:
+	  * gst/mpegtsmux/Makefile.am:
+	  * gst/mpegvideoparse/Makefile.am:
+	  * gst/mve/Makefile.am:
+	  * gst/nsf/Makefile.am:
+	  * gst/nuvdemux/Makefile.am:
+	  * gst/overlay/Makefile.am:
+	  * gst/passthrough/Makefile.am:
+	  * gst/pcapparse/Makefile.am:
+	  * gst/playondemand/Makefile.am:
+	  * gst/rawparse/Makefile.am:
+	  * gst/real/Makefile.am:
+	  * gst/rtjpeg/Makefile.am:
+	  * gst/rtpmanager/Makefile.am:
+	  * gst/scaletempo/Makefile.am:
+	  * gst/sdp/Makefile.am:
+	  * gst/selector/Makefile.am:
+	  * gst/smooth/Makefile.am:
+	  * gst/smoothwave/Makefile.am:
+	  * gst/speed/Makefile.am:
+	  * gst/speexresample/Makefile.am:
+	  * gst/stereo/Makefile.am:
+	  * gst/subenc/Makefile.am:
+	  * gst/tta/Makefile.am:
+	  * gst/vbidec/Makefile.am:
+	  * gst/videodrop/Makefile.am:
+	  * gst/videosignal/Makefile.am:
+	  * gst/virtualdub/Makefile.am:
+	  * gst/vmnc/Makefile.am:
+	  * gst/y4m/Makefile.am:
+	  * sys/acmenc/Makefile.am:
+	  * sys/cdrom/Makefile.am:
+	  * sys/dshowdecwrapper/Makefile.am:
+	  * sys/dshowsrcwrapper/Makefile.am:
+	  * sys/dvb/Makefile.am:
+	  * sys/dxr3/Makefile.am:
+	  * sys/fbdev/Makefile.am:
+	  * sys/oss4/Makefile.am:
+	  * sys/qcam/Makefile.am:
+	  * sys/qtwrapper/Makefile.am:
+	  * sys/vcd/Makefile.am:
+	  * sys/wininet/Makefile.am:
+	  * win32/common/config.h:
+	  Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2008-11-03 15:30:14 +0000  Matthias Kretz <kretz@kde.org>
+
+	  ext/alsa/gstalsasink.c: Make all access non-blocking so that we can better handle unplugging of usb devices. Fixes #5...
+	  Original commit message from CVS:
+	  Based on patch by: Matthias Kretz <kretz at kde dot org>
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_open),
+	  (gst_alsasink_prepare), (gst_alsasink_unprepare),
+	  (gst_alsasink_write):
+	  Make all access non-blocking so that we can better handle unplugging
+	  of usb devices. Fixes #559111
+
+2008-11-03 10:49:24 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Make the next call to poll not depend on previous calls to poll with or withou...
+	  Original commit message from CVS:
+	  Patch by: Damien Lespiau  <damien.lespiau gmail com>
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_write):
+	  Make the next call to poll not depend on previous calls to poll with or
+	  without reading from the active descriptor. Fixes #544293.
+
+2008-11-03 08:55:49 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Add TODO at the top of the file for enabling SSE/ARM specific optimizations and...
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_convert_buffer):
+	  Add TODO at the top of the file for enabling SSE/ARM specific
+	  optimizations and choosing the fastest implementation at runtime.
+	  Add g_assert_not_reached() at two places that should really never
+	  be reached.
+
+2008-11-02 09:19:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Fix format string and arguments.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_check_discont):
+	  Fix format string and arguments.
+	  * gst/speexresample/resample_sse.h:
+	  Add missing file.
+
+2008-11-01 19:38:36 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/: Add missing headers to Makefile.am.
+	  Original commit message from CVS:
+	  * gst/speexresample/Makefile.am:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_base_init), (gst_speex_resample_get_funcs),
+	  (gst_speex_resample_convert_buffer), (_benchmark_int_float),
+	  (_benchmark_int_int), (_benchmark_integer_resampling),
+	  (plugin_init):
+	  * gst/speexresample/gstspeexresample.h:
+	  * gst/speexresample/resample.c:
+	  * gst/speexresample/speex_resampler_double.c:
+	  * gst/speexresample/speex_resampler_float.c:
+	  * gst/speexresample/speex_resampler_int.c:
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  Add missing headers to Makefile.am.
+	  Update copyright, years and my mail address.
+	  Benchmark the integer resampling implementation against the
+	  float implementation and use the faster one for 8/16 bit integer
+	  input. On most recent systems the floating point version is faster.
+
+2008-10-31 09:49:57 +0000  Nick Haddad <nick@haddads.net>
+
+	  gst-libs/gst/riff/: Add support for other fourcc codes that are commonly used for 'uncompressed RGB', including 'RGB ...
+	  Original commit message from CVS:
+	  Patch by: Nick Haddad <nick at haddads dot net>
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Add support for other fourcc codes that are commonly used for
+	  'uncompressed RGB', including 'RGB ', 'RAW ', and 0.
+	  Fixes #558553.
+
+2008-10-30 14:55:43 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: The length for the buffer conversion function is the number of audio frames, i....
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_convert_buffer):
+	  The length for the buffer conversion function is the number of
+	  audio frames, i.e. we need to multiply it by the number of channels
+	  to get the number of values. Also spotted by the unit test after
+	  running in valgrind.
+
+2008-10-30 14:46:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/elements/speexresample.c: Add pipeline unit tests for testing all supported formats with up/downsampling ...
+	  Original commit message from CVS:
+	  * tests/check/elements/speexresample.c: (element_message_cb),
+	  (eos_message_cb), (test_pipeline), (GST_START_TEST),
+	  (speexresample_suite):
+	  Add pipeline unit tests for testing all supported formats with
+	  up/downsampling and different in/outrates.
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_push_drain), (gst_speex_resample_process):
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  Fix bugs identified by the testsuite.
+
+2008-10-30 13:44:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/: Add support for int8, int24 and int32 input by converting internally to/from int16 or double.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c: (gst_speex_resample_stop),
+	  (gst_speex_resample_get_funcs),
+	  (gst_speex_resample_transform_size),
+	  (gst_speex_resample_convert_buffer),
+	  (gst_speex_resample_push_drain), (gst_speex_resample_process):
+	  * gst/speexresample/gstspeexresample.h:
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  Add support for int8, int24 and int32 input by converting internally
+	  to/from int16 or double.
+
+2008-10-30 12:43:44 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add support for double samples as input and refactor the usage of the different compilation flavors of the speex resa...
+	  Original commit message from CVS:
+	  * gst/speexresample/Makefile.am:
+	  * gst/speexresample/arch.h:
+	  * gst/speexresample/gstspeexresample.c: (gst_speex_resample_stop),
+	  (gst_speex_resample_get_unit_size), (gst_speex_resample_get_funcs),
+	  (gst_speex_resample_init_state), (gst_speex_resample_update_state),
+	  (gst_speex_resample_reset_state), (gst_speex_resample_parse_caps),
+	  (_gcd), (gst_speex_resample_transform_size),
+	  (gst_speex_resample_set_caps), (gst_speex_resample_push_drain),
+	  (gst_speex_resample_process), (gst_speex_resample_transform),
+	  (gst_speex_resample_query), (gst_speex_resample_set_property):
+	  * gst/speexresample/gstspeexresample.h:
+	  * gst/speexresample/resample.c:
+	  * gst/speexresample/speex_resampler.h:
+	  * gst/speexresample/speex_resampler_double.c:
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  * tests/check/elements/speexresample.c: (setup_speexresample),
+	  (test_perfect_stream_instance), (GST_START_TEST),
+	  (test_discont_stream_instance):
+	  Add support for double samples as input and refactor the usage
+	  of the different compilation flavors of the speex resampler.
+
+2008-10-30 11:43:12 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioresample/gstaudioresample.c: Return the result of parent_class->event().
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  Return the result of parent_class->event().
+
+2008-10-29 17:02:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.c: Fix the docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_class_init):
+	  Fix the docs.
+
+2008-10-29 12:11:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.*: Rewrite timestamp tracking to make it more robust and guarantee a continous str...
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c: (gst_speex_resample_start),
+	  (gst_speex_resample_get_unit_size),
+	  (gst_speex_resample_push_drain), (gst_speex_resample_event),
+	  (gst_speex_resample_check_discont), (gst_speex_resample_process),
+	  (gst_speex_resample_transform):
+	  * gst/speexresample/gstspeexresample.h:
+	  Rewrite timestamp tracking to make it more robust and guarantee
+	  a continous stream.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/speexresample.c: (setup_speexresample),
+	  (cleanup_speexresample), (fail_unless_perfect_stream),
+	  (test_perfect_stream_instance), (GST_START_TEST),
+	  (test_discont_stream_instance), (live_switch_alloc_only_48000),
+	  (live_switch_get_sink_caps), (live_switch_push),
+	  (speexresample_suite):
+	  Add unit tests for speexresample based on the audioresample unit tests.
+
+2008-10-28 19:30:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.*: Some random cleanup, add G_LIKELY and friends, use GST_DEBUG_OBJECT instead of ...
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_get_unit_size),
+	  (gst_speex_resample_fixate_caps), (gst_speex_resample_init_state),
+	  (gst_speex_resample_update_state), (gst_speex_resample_parse_caps),
+	  (gst_speex_resample_transform_size), (gst_speex_resample_set_caps),
+	  (gst_speex_resample_push_drain), (gst_speex_resample_event),
+	  (gst_speex_resample_check_discont), (gst_speex_fix_output_buffer),
+	  (gst_speex_resample_process), (gst_speex_resample_transform),
+	  (gst_speex_resample_query), (gst_speex_resample_set_property):
+	  * gst/speexresample/gstspeexresample.h:
+	  Some random cleanup, add G_LIKELY and friends, use GST_DEBUG_OBJECT
+	  instead of GST_DEBUG, ...
+
+2008-10-28 16:28:45 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Fixate to the nearest supported rate instead of the first one.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_class_init), (gst_speex_resample_fixate_caps),
+	  (gst_speex_resample_process):
+	  Fixate to the nearest supported rate instead of the first one.
+
+2008-10-28 16:25:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioresample/gstaudioresample.c: Fixate the rate to the nearest supported rate instead of the first one. Fixes b...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  (gst_audioresample_class_init), (audioresample_fixate_caps):
+	  Fixate the rate to the nearest supported rate instead of
+	  the first one. Fixes bug #549510.
+
+2008-10-28 11:46:28 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/: Update Speex resampler with latest version from Speex GIT.
+	  Original commit message from CVS:
+	  * gst/speexresample/README:
+	  * gst/speexresample/arch.h:
+	  * gst/speexresample/fixed_arm4.h:
+	  * gst/speexresample/fixed_arm5e.h:
+	  * gst/speexresample/fixed_bfin.h:
+	  * gst/speexresample/fixed_debug.h:
+	  * gst/speexresample/fixed_generic.h:
+	  * gst/speexresample/resample.c: (compute_func), (main), (sinc),
+	  (cubic_coef), (resampler_basic_direct_single),
+	  (resampler_basic_direct_double),
+	  (resampler_basic_interpolate_single),
+	  (resampler_basic_interpolate_double), (update_filter),
+	  (speex_resampler_init_frac), (speex_resampler_process_native),
+	  (speex_resampler_magic), (speex_resampler_process_float),
+	  (speex_resampler_process_int),
+	  (speex_resampler_process_interleaved_float),
+	  (speex_resampler_process_interleaved_int),
+	  (speex_resampler_set_rate_frac), (speex_resampler_skip_zeros),
+	  (speex_resampler_reset_mem):
+	  * gst/speexresample/speex_resampler.h:
+	  Update Speex resampler with latest version from Speex GIT.
+
+2008-10-27 14:57:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  win32/common/libgstaudio.def: Add new symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  Add new symbols.
+
+2008-10-23 09:57:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Attempt to make obfuscated code clearer.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_identification_packet):
+	  Attempt to make obfuscated code clearer.
+
+2008-10-23 07:11:23 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Move float endianness conversion macros to core. Second part of bug ##555196.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  Move float endianness conversion macros to core. Second part of
+	  bug ##555196.
+
+2008-10-22 12:29:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/: Don't mark as gtk-doc docs as they aren't public.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.h:
+	  * sys/xvimage/xvimagesink.h:
+	  Don't mark as gtk-doc docs as they aren't public.
+
+2008-10-22 12:25:02 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Allow setting colorkey if possible. Implement property probe interface for optional X features (autopaint-colorkey, d...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  * sys/xvimage/xvimagesink.h:
+	  * tests/icles/Makefile.am:
+	  * tests/icles/test-colorkey.c:
+	  Allow setting colorkey if possible. Implement property probe interface
+	  for optional X features (autopaint-colorkey, double-buffer and
+	  colorkey). Fixes #554533
+
+2008-10-22 12:01:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/tag/tags.c: Remove useless buffer size assignment. It already has this value.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_image_data_to_image_buffer):
+	  Remove useless buffer size assignment. It already has this value.
+
+2008-10-20 15:35:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Implement a separate activate functions to start monitoring the segments or, in pu...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c:
+	  (gst_audioringbuffer_class_init), (gst_audioringbuffer_acquire),
+	  (gst_audioringbuffer_activate), (gst_audioringbuffer_release),
+	  (gst_audioringbuffer_stop):
+	  Implement a separate activate functions to start monitoring the segments
+	  or, in pull mode, pulling in data.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_init), (gst_base_audio_sink_dispose),
+	  (gst_base_audio_sink_query_pad), (gst_base_audio_sink_query),
+	  (gst_base_audio_sink_setcaps), (gst_base_audio_sink_callback),
+	  (gst_base_audio_sink_activate_pull),
+	  (gst_base_audio_sink_async_play),
+	  (gst_base_audio_sink_change_state):
+	  Implement pad and element convert query function.
+	  Activate the ringbuffer.
+	  Use the segment last_stop value as the offset to pull.
+	  Use new basesink _do_preroll() method to preroll in the pulling thread.
+	  Take appropriate locking in the pulling thread.
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Update some docs.
+
+2008-10-20 14:08:52 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Improve MXF typefinding a bit by searching for a header partition pack instead o...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mxf_type_find):
+	  Improve MXF typefinding a bit by searching for a header partition
+	  pack instead of just a general partition pack and checking more
+	  bytes for valid values.
+
+2008-10-20 13:45:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/icles/.cvsignore: update ignore file.
+	  Original commit message from CVS:
+	  * tests/icles/.cvsignore:
+	  update ignore file.
+	  * tests/icles/Makefile.am:
+	  * tests/icles/test-box.c: (make_pipeline), (main):
+	  Add another interactive command line experimentation suite for
+	  dynamically boxing/cropping/saling an input video.
+
+2008-10-17 13:19:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add methods to more accuratly control the pulling thread of a ringbuffer.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_convert),
+	  (gst_ring_buffer_activate), (gst_ring_buffer_is_active):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Add methods to more accuratly control the pulling thread of a
+	  ringbuffer.
+	  Add format conversion helper code to the ringbuffer.
+	  API: GstRingBuffer:gst_ring_buffer_activate()
+	  API: GstRingBuffer:gst_ring_buffer_is_active()
+	  API: GstRingBuffer:gst_ring_buffer_convert()
+
+2008-10-16 15:44:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Signal thread startup earlier so that we can immediatly go into pull mode when we ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func),
+	  (gst_audioringbuffer_acquire), (gst_audioringbuffer_release),
+	  (gst_audioringbuffer_stop):
+	  Signal thread startup earlier so that we can immediatly go into pull
+	  mode when we have to and block on preroll.
+
+2008-10-16 15:38:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: In pull mode we want the callback to prepull a buffer we can preroll on even when...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_prepare_read):
+	  In pull mode we want the callback to prepull a buffer we can preroll on
+	  even when we are not yet playing.
+
+2008-10-16 15:07:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Don't install static libs for plugins. Fixes #550851 for base.
+	  Original commit message from CVS:
+	  * ext/alsa/Makefile.am:
+	  * ext/cdparanoia/Makefile.am:
+	  * ext/gio/Makefile.am:
+	  * ext/gnomevfs/Makefile.am:
+	  * ext/libvisual/Makefile.am:
+	  * ext/ogg/Makefile.am:
+	  * ext/pango/Makefile.am:
+	  * ext/theora/Makefile.am:
+	  * ext/vorbis/Makefile.am:
+	  * gst/adder/Makefile.am:
+	  * gst/audioconvert/Makefile.am:
+	  * gst/audiorate/Makefile.am:
+	  * gst/audioresample/Makefile.am:
+	  * gst/audiotestsrc/Makefile.am:
+	  * gst/ffmpegcolorspace/Makefile.am:
+	  * gst/gdp/Makefile.am:
+	  * gst/playback/Makefile.am:
+	  * gst/subparse/Makefile.am:
+	  * gst/tcp/Makefile.am:
+	  * gst/typefind/Makefile.am:
+	  * gst/videorate/Makefile.am:
+	  * gst/videoscale/Makefile.am:
+	  * gst/videotestsrc/Makefile.am:
+	  * gst/volume/Makefile.am:
+	  * sys/v4l/Makefile.am:
+	  * sys/ximage/Makefile.am:
+	  * sys/xvimage/Makefile.am:
+	  Don't install static libs for plugins. Fixes #550851 for base.
+
+2008-10-16 13:50:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Set the default blocksize to -1 because we will then use the configured samplespe...
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_init):
+	  Set the default blocksize to -1 because we will then use the configured
+	  samplesperbuffer to create our output buffer.
+
+2008-10-15 15:28:41 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Add mappping for the KMVC (Karl Morton's Video) Codec.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add mappping for the KMVC (Karl Morton's Video) Codec.
+
+2008-10-15 14:25:50 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Don't forget to advance the offset of what we're matching against, else we end u...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (flac_type_find):
+	  Don't forget to advance the offset of what we're matching against, else
+	  we end up in a forever loop.
+
+2008-10-15 11:25:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/subparse/gstsubparse.c: Improve typefinding a bit. If we don't have a Unicode charset try GST_SUBTITLE_ENCODING a...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (gst_subparse_type_find):
+	  Improve typefinding a bit. If we don't have a Unicode charset
+	  try GST_SUBTITLE_ENCODING and otherwise try ISO-8859-15.
+
+2008-10-14 11:13:59 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/theora/theoradec.c: Fix build on macosx.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_decode_buffer):
+	  Fix build on macosx.
+
+2008-10-13 11:36:13 +0000  Robin Stocker <robin@nibor.org>
+
+	  ext/theora/: Parse input caps and make the PAR override the encoded PAR when specified by a container. Fixes #555699.
+	  Original commit message from CVS:
+	  Based on patch by: Robin Stocker <robin at nibor dot org>
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_init),
+	  (theora_dec_setcaps), (theora_handle_type_packet),
+	  (theora_dec_decode_buffer), (theora_dec_change_state):
+	  Parse input caps and make the PAR override the encoded PAR when
+	  specified by a container. Fixes #555699.
+
+2008-10-13 09:16:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Add some more G_LIKELY
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps), (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_change_state):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Add some more G_LIKELY
+	  Fail when the setcaps function was not called.
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_set_outcaps):
+	  Propagate return value of setcaps.
+
+2008-10-13 08:58:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/subparse/: Add support for UTF16/UTF32 subtitles as long as the first bytes of the first buffer contain the BOM. ...
+	  Original commit message from CVS:
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (gst_sub_parse_class_init), (gst_sub_parse_init),
+	  (gst_convert_to_utf8), (detect_encoding), (convert_encoding),
+	  (get_next_line), (gst_sub_parse_data_format_autodetect),
+	  (feed_textbuf), (handle_buffer), (gst_sub_parse_change_state),
+	  (gst_subparse_type_find):
+	  * gst/subparse/gstsubparse.h:
+	  Add support for UTF16/UTF32 subtitles as long as the first bytes of
+	  the first buffer contain the BOM. This also adds support for other
+	  encodings that allow NUL bytes via the encoding property.
+	  Fixes bugs #552237 and #456788.
+
+2008-10-13 08:15:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/tag/tags.c: Don't drop the last byte of image tags if they're not an URI list.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_image_data_to_image_buffer):
+	  Don't drop the last byte of image tags if they're not an URI list.
+	  Fixes bug #556066.
+
+2008-10-13 08:00:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: For looking at the 4th byte we have to get 4 bytes of course and not 3.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (flac_type_find):
+	  For looking at the 4th byte we have to get 4 bytes of course
+	  and not 3.
+
+2008-10-13 07:52:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Improve FLAC-without-headers typefinding by looking at most of the frame header ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (flac_type_find):
+	  Improve FLAC-without-headers typefinding by looking at most of the
+	  frame header and checking if invalid values are used. Should prevent
+	  quite some false positives compared to the old version which only
+	  check if the first 14 bits are set.
+
+2008-10-11 16:27:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Don't assert on caps==NULL.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Don't assert on caps==NULL.
+
+2008-10-10 17:13:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add support for subtitle files with UTF-8 BOM at the beginning by simple stripping it from the first line before pass...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect), (handle_buffer),
+	  (gst_sub_parse_change_state):
+	  * gst/subparse/gstsubparse.h:
+	  * tests/check/elements/subparse.c: (GST_START_TEST):
+	  Add support for subtitle files with UTF-8 BOM at the beginning
+	  by simple stripping it from the first line before passing it
+	  to any parsing code. Fixes bug #555257 and playback of files
+	  created by Gnome Subtitles.
+
+2008-10-10 15:45:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: Define the default property values in the usual place.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_class_init), (gst_audio_test_src_init),
+	  (gst_audio_test_src_src_fixate), (gst_audio_test_src_setcaps),
+	  (gst_audio_test_src_start), (gst_audio_test_src_stop),
+	  (gst_audio_test_src_do_seek), (gst_audio_test_src_check_get_range),
+	  (gst_audio_test_src_create):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Define the default property values in the usual place.
+	  Implement start/stop to reset values correctly.
+	  Calculate the sample size only once when we negotiate.
+	  Rename some values to make more sense.
+	  Keep track of our byte range.
+	  Add support for pull based scheduling. Disabled for now until we have
+	  the whole stack working.
+	  Set the BUFFER_OFFSET correctly.
+
+2008-10-10 15:32:10 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Make the detection of the used subtitle a bit less strict for srt subtitles. Fixes bug #555607.
+	  Original commit message from CVS:
+	  Based on a patch by: xavierb at gmail dot com
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect):
+	  * tests/check/elements/subparse.c: (GST_START_TEST):
+	  Make the detection of the used subtitle a bit less strict
+	  for srt subtitles. Fixes bug #555607.
+
+2008-10-10 15:21:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/vorbis/vorbisenc.c: Fix discontinuity detection which was broken by last commit.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c:
+	  (gst_vorbis_enc_buffer_check_discontinuous):
+	  Fix discontinuity detection which was broken by last commit.
+
+2008-10-09 11:18:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Require core CVS for ghostpad API additions used by decodebin2.
+	  Original commit message from CVS:
+	  * configure.ac::
+	  Require core CVS for ghostpad API additions used by decodebin2.
+
+2008-10-08 15:30:33 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Fix debug statements (space between '%' and actual format).
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Fix debug statements (space between '%' and actual format).
+
+2008-10-08 14:44:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Remove bogus assert, the decodepad could have been created inside an already existing g...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_pad_activate):
+	  Remove bogus assert, the decodepad could have been created inside an
+	  already existing group.
+
+2008-10-08 14:01:42 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	  changelog
+	  Original commit message from CVS:
+	  changelog
+
+2008-10-08 14:00:07 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/playback/gstdecodebin2.c (expose_pad): Fix typo: unset target instead of setting it.
+	  Original commit message from CVS:
+	  2008-10-08  Andy Wingo  <wingo@pobox.com>
+	  * gst/playback/gstdecodebin2.c (expose_pad): Fix typo: unset
+	  target instead of setting it.
+	  (gst_decode_pad_activate, gst_decode_pad_unblock): This is now the
+	  API for a decode pad. The bugfix is that we set the group in
+	  activate(), not when the pad was created because it might be NULL
+	  then.
+	  (gst_decode_group_control_source_pad, gst_decode_group_expose):
+	  Update to use the API.
+
+2008-10-08 12:49:40 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/playback/gstdecodebin2.c (struct _GstDecodePad): Change to be a subclass of GstGhostPad.
+	  Original commit message from CVS:
+	  2008-10-08  Andy Wingo  <wingo@pobox.com>
+	  * gst/playback/gstdecodebin2.c (struct _GstDecodePad): Change to
+	  be a subclass of GstGhostPad.
+	  (analyze_new_pad): So, when emitting the signals that determine
+	  how we do autoplugging, already create the ghost pad and use it as
+	  the pad in the signal arguments. This allows applications to make
+	  a connection between the pad passed in e.g. autoplug-continue, and
+	  the pad passed in new-decoded-pad.
+	  (connect_pad, expose_pad): Update to receive the ghosted decode
+	  pad in the args, retargetting it as necessary if we have to plug
+	  the target pad through a multiqueue.
+	  (gst_decode_group_control_source_pad): Adapt to receive an
+	  already-ghosted pad that just needs activation, blocking, and
+	  drain notification.
+	  (sort_end_pads): Adapt for decode pads actually being pads.
+	  (gst_decode_group_expose): Adapt for decode pads actually being
+	  pads. Rewrite the decode pad names so they appear in order. Adds a
+	  new error case if we couldn't set the name.
+	  (gst_decode_group_free, gst_decode_group_hide): Adapt cleanup
+	  logic.
+	  (gst_decode_pad_set_blocked, gst_decode_pad_add_drained_check):
+	  New API for the decode pad, needed because we shouldn't do these
+	  things inside gst_decode_pad_new(), but after.
+	  (gst_decode_pad_new): Change to actually make the real pad, and
+	  delay the blocking/drainage bits.
+
+2008-10-08 12:12:01 +0000  Daniel Drake <dsd@laptop.org>
+
+	  ext/ogg/gstoggmux.c: Unref all buffers when clearing collectpads. Fixes bug #546955.
+	  Original commit message from CVS:
+	  Patch by: Daniel Drake <dsd at laptop dot org>
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_clear_collectpads):
+	  Unref all buffers when clearing collectpads. Fixes bug #546955.
+
+2008-10-08 12:08:01 +0000  Klaas <klaas@rivercrew.net>
+
+	  ext/vorbis/vorbisenc.*: Keep track of the upstream segments and use the running time on that segment instead of the b...
+	  Original commit message from CVS:
+	  Based on a patch by: Klaas <klaas at rivercrew dot net>
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_sink_event),
+	  (gst_vorbis_enc_buffer_check_discontinuous),
+	  (gst_vorbis_enc_chain), (gst_vorbis_enc_change_state):
+	  * ext/vorbis/vorbisenc.h:
+	  Keep track of the upstream segments and use the running time on that
+	  segment instead of the buffer timestamp everywhere. Fixes bug #525807.
+
+2008-10-08 11:50:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/audioconvert.c: Prevent overflows with big buffer when calculating the size of the intermediate buff...
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (audio_convert_convert):
+	  Prevent overflows with big buffer when calculating the size of
+	  the intermediate buffer by using gst_util_uint64_scale() instead of
+	  plain arithmetics. Fixes bug #552801.
+
+2008-10-08 10:49:15 +0000  Pavel Zeldin <pzeldin@gmail.com>
+
+	  ext/pango/gstclockoverlay.*: API: Add ability to specify format for date/time display by adding a "time-format" prope...
+	  Original commit message from CVS:
+	  Patch by: Pavel Zeldin <pzeldin at gmail dot com>
+	  * ext/pango/gstclockoverlay.c: (gst_clock_overlay_render_time),
+	  (gst_clock_overlay_class_init), (gst_clock_overlay_finalize),
+	  (gst_clock_overlay_init), (gst_clock_overlay_set_property),
+	  (gst_clock_overlay_get_property):
+	  * ext/pango/gstclockoverlay.h:
+	  API: Add ability to specify format for date/time display by
+	  adding a "time-format" property.
+	  Fixes bug #554879.
+
+2008-10-08 09:22:26 +0000  Jan Gerber <j@oil21.org>
+
+	  gst-libs/gst/riff/riff-media.c: Add FFV1 fourcc to support playback of FFMPEG lossless video in AVI. Fixes bug #555319.
+	  Original commit message from CVS:
+	  Patch by: Jan Gerber <j at oil21 dot org>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add FFV1 fourcc to support playback of FFMPEG lossless video
+	  in AVI. Fixes bug #555319.
+
+2008-10-08 09:12:36 +0000  Håvard Graff <havard.graff@tandberg.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Implement skew clock slaving. Fixes #552559.
+	  Original commit message from CVS:
+	  Patch by: Håvard Graff <havard dot graff at tandberg dot com>
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Implement skew clock slaving. Fixes #552559.
+
+2008-10-08 09:10:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/: Fix include of config.h
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  * gst-libs/gst/audio/testchannels.c:
+	  Fix include of config.h
+
+2008-10-06 16:36:20 +0000  Tero Saarni <tero.saarni@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Fix parsing of the c= field containing multicast addresses.
+	  Original commit message from CVS:
+	  Based on Patch by: Tero Saarni <tero dot saarni at gmail dot com>
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_parse_line),
+	  (print_media), (gst_sdp_message_dump):
+	  Fix parsing of the c= field containing multicast addresses.
+	  Fixes #552199.
+	  Add the connection info to the session or streams.
+	  Fix parsing of the bandwidth.
+	  Add debugging for the connections and bandwidths for a media.
+	  Add debugging for the bandwidth of the session.
+
+2008-10-06 16:31:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Configure the next seqnum and timestamp in the state change so that they can be...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_change_state):
+	  Configure the next seqnum and timestamp in the state change so that they
+	  can be queried soon after.
+
+2008-10-06 16:29:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Improve debugging of the rtptime.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain):
+	  Improve debugging of the rtptime.
+
+2008-10-05 11:33:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to development -> 0.10.21.1
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to development -> 0.10.21.1
+
+2008-10-05 08:18:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	* ChangeLog:
+	  ChangeLog surgery
+	  Original commit message from CVS:
+	  ChangeLog surgery
+
+2008-10-05 08:11:53 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for MXF.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mxf_type_find),
+	  (plugin_init):
+	  Add typefinder for MXF.
+
+2008-10-05 08:10:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for MXF.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mxf_type_find),
+	  (plugin_init):
+	  Add typefinder for MXF.
+
+2008-10-03 15:19:40 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/icles/Makefile.am: Only build test-colorkey if GTK+ is available.
+	  Original commit message from CVS:
+	  * tests/icles/Makefile.am:
+	  Only build test-colorkey if GTK+ is available.
+
+=== release 0.10.21 ===
+
+2008-10-03 00:03:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/config.h:
+	  Release 0.10.21
+	  Original commit message from CVS:
+	  Release 0.10.21
+
+2008-10-02 23:44:45 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2008-09-28 22:58:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: 0.10.20.4 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  0.10.20.4 pre-release
+
+2008-09-25 10:46:00 +0000  ogg.k.ogg.k <ogg.k.ogg.k@googlemail.com>
+
+	  ext/theora/theoraparse.c: Set the BOS flag on the BOS packet. Fixes #553244.
+	  Original commit message from CVS:
+	  Patch by: ogg.k.ogg.k <ogg dot k dot ogg dot k at googlemail dot com>
+	  * ext/theora/theoraparse.c: (theora_parse_set_streamheader):
+	  Set the BOS flag on the BOS packet. Fixes #553244.
+
+2008-09-23 17:48:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspmessage.c: Fix the g_return_val_if_fail() statements.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspmessage.c:
+	  (gst_rtsp_message_parse_request),
+	  (gst_rtsp_message_parse_response):
+	  Fix the g_return_val_if_fail() statements.
+
+2008-09-22 17:44:14 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Fail to activate if there's insufficient data in the file to be usable, preventing an...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c:
+	  Fail to activate if there's insufficient data in the file to be usable,
+	  preventing an assertion fail later. Fixes #552960
+
+2008-09-16 15:36:56 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Commit stuff that should have gone in last week when I made the pre-releases:
+	  Original commit message from CVS:
+	  Commit stuff that should have gone in last week when I made the pre-releases:
+	  2008-09-10  Jan Schmidt  <jan.schmidt@sun.com>
+	  * configure.ac:
+	  0.10.20.2 pre-release
+	  * po/LINGUAS:
+	  * po/id.po:
+	  * po/pt_BR.po:
+	  New translations.
+
+2008-09-15 15:11:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: Recognise Kate subtitle streams (#550582).
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Recognise Kate subtitle streams (#550582).
+
+2008-09-13 11:04:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/audio.h: Remove trailing comma from enum list, which causes problems with -pendantic (#550729).
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.h: (GST_AUDIO_FIELD_SIGNED):
+	  Remove trailing comma from enum list, which causes problems
+	  with -pendantic (#550729).
+
+2008-09-05 19:04:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/propertyprobe.c: More sanity checks for our second-favourite interface.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  (gst_property_probe_get_properties),
+	  (gst_property_probe_get_property),
+	  (gst_property_probe_probe_property),
+	  (gst_property_probe_probe_property_name),
+	  (gst_property_probe_needs_probe),
+	  (gst_property_probe_needs_probe_name),
+	  (gst_property_probe_get_values),
+	  (gst_property_probe_get_values_name),
+	  (gst_property_probe_probe_and_get_values),
+	  (gst_property_probe_probe_and_get_values_name):
+	  More sanity checks for our second-favourite interface.
+
+2008-09-05 14:12:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/interfaces/propertyprobe.c: Check for NULL pointer, in the hope that this fixes #532864.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  Check for NULL pointer, in the hope that this fixes #532864.
+
+2008-09-05 10:24:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/xvimage/xvimagesink.c: No really, the next release is 0.10.21 (fix Since: tags in docs).
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init):
+	  No really, the next release is 0.10.21 (fix Since: tags in docs).
+
+2008-09-04 16:25:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosrc.c: Disable a code path that is now called but causes a deadlock for some reason and is...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosrc.c: (gst_audioringbuffer_stop):
+	  Disable a code path that is now called but causes a deadlock for some
+	  reason and is unneeded.
+
+2008-09-04 13:46:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.*: Add a "draw-border" property that can be set to false to disable drawing borders.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  * sys/xvimage/xvimagesink.h:
+	  Add a "draw-border" property that can be set to false to disable
+	  drawing borders.
+	  * tests/icles/test-colorkey.c:
+	  * tests/icles/Makefile.am:
+	  Add new test application for the colorkey handling.
+
+2008-09-03 14:00:06 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Use a decent caps for TrueSpeech instead of a ffmpeg-specific one.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Use a decent caps for TrueSpeech instead of a ffmpeg-specific one.
+	  This will also be fixed for upcoming gst-ffmpeg release so that once
+	  this release of -base is out, it will work with the latest gst-ffmpeg
+	  release.
+
+2008-09-03 13:27:20 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Add Truespeech mapping for RIFF formats (AVI/WAV).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Add Truespeech mapping for RIFF formats (AVI/WAV).
+	  Fixes #550656
+
+2008-09-03 12:23:44 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	  gst/typefind/gsttypefindfunctions.c: Typefind video/mj2 and image/jp2 ISO JPEG2000 mime types.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Typefind video/mj2 and image/jp2 ISO JPEG2000 mime types.
+	  Fixes #550638.
+
+2008-09-03 10:12:04 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Rework last change, so that we build subparse, but just disable the sami parse functionality, if we're configured to ...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstsubparse.c:
+	  * gst/subparse/samiparse.c:
+	  * tests/check/elements/subparse.c:
+	  Rework last change, so that we build subparse, but just disable the
+	  sami parse functionality, if we're configured to not use xml. In the
+	  tests only the sami test is disabled now.
+
+2008-09-02 15:07:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Disable subparse when xml is disabled. It woundn't work anyway. Fixes test runs.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Disable subparse when xml is disabled. It woundn't work anyway. Fixes
+	  test runs.
+
+2008-09-02 09:33:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  po/POTFILES.in: Add some more files with strings for translation.
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  Add some more files with strings for translation.
+
+2008-09-02 06:37:04 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Use new geo location tags from core. Fixes #481169
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  * tests/check/libs/tag.c:
+	  Use new geo location tags from core. Fixes #481169
+
+2008-09-01 16:05:45 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/elements/audioresample.c: Now that GstBaseTransform is 'fixed' ... remove cruft from tests.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioresample.c: (setup_audioresample),
+	  (fail_unless_perfect_stream), (test_perfect_stream_instance),
+	  (test_discont_stream_instance):
+	  Now that GstBaseTransform is 'fixed' ... remove cruft from tests.
+	  Add debugging for coherence.
+
+2008-08-30 15:55:06 +0000  Jonathan Matthew <notverysmart@gmail.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for PDF documents (which is nice to have, since it's a common for...
+	  Original commit message from CVS:
+	  Patch by: Jonathan Matthew  <notverysmart gmail com>
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Add typefinder for PDF documents (which is nice to have, since it's a
+	  common format, but also helps prevent false positives). Fixes #549814.
+
+2008-08-27 15:30:16 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Fix nasty race where multiple decodebins could start pushing data before we manage to con...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (selector_blocked), (pad_added_cb),
+	  (no_more_pads_cb):
+	  Fix nasty race where multiple decodebins could start pushing data before
+	  we manage to configure the sinks, resulting in not-linked errors in
+	  typical RTSP streaming cases.
+
+2008-08-26 17:24:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Since we now call stop, we trigger this code path that causes a deadlock is appare...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (gst_audioringbuffer_stop):
+	  Since we now call stop, we trigger this code path that causes a deadlock
+	  is apparently not needed.
+
+2008-08-26 15:45:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Also allow the case where the ringbuffer was paused when we try to stop it so tha...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_start),
+	  (gst_ring_buffer_stop):
+	  Also allow the case where the ringbuffer was paused when we try to stop
+	  it so that the basesrc stop function is still called.
+
+2008-08-23 15:25:44 +0000  Mike Ruprecht <cmaiku@gmail.com>
+
+	  sys/v4l/gstv4lelement.c: Reprobe devices again instead of taking a cached list as new devices could've been plugged i...
+	  Original commit message from CVS:
+	  Patch by: Mike Ruprecht <cmaiku at gmail dot com>
+	  * sys/v4l/gstv4lelement.c: (gst_v4l_class_probe_devices):
+	  Reprobe devices again instead of taking a cached list as new
+	  devices could've been plugged in. Fixes bug #549062.
+
+2008-08-23 15:19:59 +0000  Alessandro Dessina <alessandro@nnva.org>
+
+	  ext/ogg/gstoggdemux.c: Don't add pads and activate them for skeleton streams. These are already handled inside oggdem...
+	  Original commit message from CVS:
+	  Patch by: Alessandro Dessina <alessandro nnva org>
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_deactivate_current_chain),
+	  (gst_ogg_demux_activate_chain):
+	  Don't add pads and activate them for skeleton streams. These are already
+	  handled inside oggdemux. Fixes bug #537599.
+
+2008-08-22 15:54:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Reset variable so that query and convert fail after going back to
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_change_state):
+	  Reset variable so that query and convert fail after going back to
+	  READY. Fixes #548898.
+
+2008-08-22 07:24:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/vorbis/vorbisenc.c: If a buffer arrives with a timestamp before the timestamp+duration of the previous buffer cli...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain):
+	  If a buffer arrives with a timestamp before the timestamp+duration
+	  of the previous buffer clip it instead of dropping it completely.
+	  Slight improvement for the unfixable bug #548913.
+
+2008-08-21 14:19:21 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/vorbis/vorbisdec.c: Take the current timestamp instead of timestamp+duration for the offset.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  Take the current timestamp instead of timestamp+duration for the offset.
+	  This offset will later be used for calculating the timestamp and
+	  otherwise vorbisdec will interpolate timestamps wrong if upstream
+	  only sends timestamps and no granulepos.
+
+2008-08-21 11:20:36 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Don't crash when having no visualisations.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c:
+	  Don't crash when having no visualisations.
+
+2008-08-16 20:57:27 +0000  David Schleef <ds@schleef.org>
+
+	  gst/typefind/gsttypefindfunctions.c: DV typefinding.  Remove check for a bit that is 0 in IEC 61384, but not SMPTE 314M.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: DV typefinding.  Remove
+	  check for a bit that is 0 in IEC 61384, but not SMPTE 314M.
+	  Fixes #548065.
+
+2008-08-15 07:24:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/pbutils/missing-plugins.c: When cleaning up the caps fields also remove "depth" for the same reason we r...
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/missing-plugins.c: (copy_and_clean_caps):
+	  When cleaning up the caps fields also remove "depth" for the same
+	  reason we remove "width".
+
+2008-08-14 17:14:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Add Lead H.264 here as well.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (format_info_get_desc):
+	  Add Lead H.264 here as well.
+
+2008-08-14 15:17:31 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst-libs/gst/riff/riff-media.c: Add Lead H.264 variant.
+	  Original commit message from CVS:
+	  2008-08-14  Julien Moutte  <julien@fluendo.com>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps): Add Lead H.264 variant.
+
+2008-08-13 09:17:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: When not slaved to another clock also subtract the base_time from our internal ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  When not slaved to another clock also subtract the base_time from our
+	  internal clock time to get the running time.
+
+2008-08-13 00:59:07 +0000  David Schleef <ds@schleef.org>
+
+	  ext/theora/theoraenc.c: Remove the 2000 kbit limit to bitrate, since it has no basis in libtheora.
+	  Original commit message from CVS:
+	  * ext/theora/theoraenc.c: Remove the 2000 kbit limit to bitrate,
+	  since it has no basis in libtheora.
+
+2008-08-12 06:31:49 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/interfaces/propertyprobe.h: Remove double "interface" from doc-string.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/propertyprobe.h:
+	  Remove double "interface" from doc-string.
+	  * gst-libs/gst/interfaces/xoverlay.h:
+	  Document interface.
+	  * gst-libs/gst/riff/riff.c:
+	  Add basic doc blobs.
+
+2008-08-11 15:05:35 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/Makefile.am: Don't try to build that example anymore.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  Don't try to build that example anymore.
+
+2008-08-11 14:51:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/: Move audiofiltertemplate to gst-template.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/.cvsignore:
+	  * gst-libs/gst/audio/Makefile.am:
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  * gst-libs/gst/audio/make_filter:
+	  Move audiofiltertemplate to gst-template.
+
+2008-08-11 09:20:33 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  More docs and shuffling. What can we do with the hundreds of #defines.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstaudiosrc.h:
+	  More docs and shuffling. What can we do with the hundreds of #defines.
+
+2008-08-11 08:34:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/: Reducing number of dundocumented symbols.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.h:
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  * gst-libs/gst/interfaces/propertyprobe.h:
+	  * gst-libs/gst/tag/gsttagdemux.h:
+	  Reducing number of dundocumented symbols.
+
+2008-08-11 07:16:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/audio.c: Fix doc comment syntax.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.c:
+	  Fix doc comment syntax.
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  Add more doc-comments and a FIXME: for the signal.
+
+2008-08-07 16:11:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/ogg/gstoggmux.*: Don't pretend to support NEWSEGMENT events, instead override the
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_sink_event),
+	  (gst_ogg_mux_request_new_pad):
+	  * ext/ogg/gstoggmux.h:
+	  Don't pretend to support NEWSEGMENT events, instead override the
+	  GstCollectPads event function to return FALSE on NEWSEGMENT events
+	  and do the normal work for other events.
+	  This prevents elements like flacenc to seek to the start and rewrite
+	  some data which then results in a broken Ogg packet.
+
+2008-08-07 15:58:58 +0000  Frederic Crozat <fcrozat@mandriva.org>
+
+	  Make sure gettext returns translations in UTF-8 encoding rather than in the current locale encoding (#546822).
+	  Original commit message from CVS:
+	  Patch by: Frederic Crozat <fcrozat@mandriva.org>
+	  * ext/alsa/gstalsaplugin.c: (plugin_init):
+	  * ext/cdparanoia/gstcdparanoiasrc.c: (plugin_init):
+	  * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (_do_init):
+	  * gst-libs/gst/pbutils/pbutils.c: (gst_pb_utils_init):
+	  * gst-libs/gst/tag/tags.c: (gst_tag_register_tags_internal):
+	  * gst/playback/gstdecodebin.c: (plugin_init):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_plugin_init):
+	  * gst/playback/gstplayback.c: (plugin_init):
+	  * gst/playback/gstqueue2.c: (plugin_init):
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_plugin_init):
+	  * sys/v4l/gstv4l.c: (plugin_init):
+	  Make sure gettext returns translations in UTF-8 encoding rather
+	  than in the current locale encoding (#546822).
+
+2008-08-06 13:12:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Add audio/x-qdm for qtdemux.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c:
+	  Add audio/x-qdm for qtdemux.
+
+2008-08-05 15:38:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/vorbis/vorbisdec.c: Do not leak old taglist.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c:
+	  Do not leak old taglist.
+
+2008-08-04 12:35:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/icles/test-scale.c: Include <stdlib.h> for atoi().
+	  Original commit message from CVS:
+	  * tests/icles/test-scale.c:
+	  Include <stdlib.h> for atoi().
+
+2008-08-04 09:11:08 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Very crucial and important documentation fix.
+	  Original commit message from CVS:
+	  2008-08-04  Andy Wingo  <wingo@pobox.com>
+	  * gst/audiotestsrc/gstaudiotestsrc.c: Very crucial and important
+	  documentation fix.
+
+2008-08-01 13:06:59 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/gstadder.c: Cleanup lots of empty lines that came from gst-indent going havoc before I added the INDENT_ON/...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Cleanup lots of empty lines that came from gst-indent going havoc
+	  before I added the INDENT_ON/OFF marker some time agao.
+
+2008-08-01 11:55:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Bump requirement to latest core and use new tag for riff formats.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/riff/riff-read.c:
+	  Bump requirement to latest core and use new tag for riff formats.
+	  Needed for #520694.
+
+2008-08-01 11:14:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/dynamic/: Add example app that dynamically switches between 3 'encoders'.
+	  Original commit message from CVS:
+	  * tests/examples/dynamic/Makefile.am:
+	  * tests/examples/dynamic/codec-select.c: (make_encoder),
+	  (make_pipeline), (do_switch), (my_bus_callback), (main):
+	  Add example app that dynamically switches between 3 'encoders'.
+
+2008-07-31 13:06:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Add some more comments.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gst_play_sink_set_vis_plugin):
+	  Add some more comments.
+
+2008-07-31 12:58:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videotestsrc/gstvideotestsrc.c: Discard buffers of the wrong size after renegotiation, this is perfectly possible...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_getcaps),
+	  (gst_video_test_src_create):
+	  Discard buffers of the wrong size after renegotiation, this is perfectly
+	  possible with things like capsfilter that could suggest caps changes
+	  upstream without knowing the size of the buffer.
+
+2008-07-31 11:39:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/icles/: Add dynamic rescaling tests for the new basetransform.
+	  Original commit message from CVS:
+	  * tests/icles/.cvsignore:
+	  * tests/icles/Makefile.am:
+	  * tests/icles/test-scale.c: (make_pipeline), (main):
+	  Add dynamic rescaling tests for the new basetransform.
+
+2008-07-30 19:51:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/Makefile.am: Dist recently-added gstfastrandom.h.
+	  Original commit message from CVS:
+	  * gst/audioconvert/Makefile.am:
+	  Dist recently-added gstfastrandom.h.
+
+2008-07-30 15:29:44 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  sys/xvimage/xvimagesink.c: Fix a "may be used uninitialized in this function" which weirdly only appears on macosx (?).
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+	  Fix a "may be used uninitialized in this function" which weirdly only
+	  appears on macosx (?).
+
+2008-07-30 09:02:31 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-ids.h: Adding acid chunk for tempo and loop information.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  Adding acid chunk for tempo and loop information.
+
+2008-07-29 13:01:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/Makefile.am: floor() needs linking to $(LIBM).
+	  Original commit message from CVS:
+	  * sys/xvimage/Makefile.am:
+	  floor() needs linking to $(LIBM).
+
+2008-07-29 12:35:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Aggregate short reads and add some comments and debug logging.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Aggregate short reads and add some comments and debug logging.
+	  Fixes #537380
+
+2008-07-29 10:26:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstplaybasebin.c: Fix property doc markup (its not a signal).
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  Fix property doc markup (its not a signal).
+	  * sys/xvimage/xvimagesink.c:
+	  Add since tag for new proeprties (also add sice tags fro the last two
+	  other additions).
+
+2008-07-29 08:59:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.*: Add autofill/colorkey properties. Fixes #538656.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  * sys/xvimage/xvimagesink.h:
+	  Add autofill/colorkey properties. Fixes #538656.
+
+2008-07-29 01:58:05 +0000  David Schleef <ds@schleef.org>
+
+	  sys/xvimage/xvimagesink.c: Fix rounding errors when converting colorbalance values between hardware and object proper...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Fix rounding errors when converting colorbalance values
+	  between hardware and object property ranges.  Partial
+	  fix for #537889, however, there still seems to be a small
+	  drift problem that could be totem's fault.
+
+2008-07-28 15:34:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/ogg/gstoggdemux.c: Don't use GST_CLOCK_TIME_NONE as start of NEWSEGMENT events.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_peer),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_handle_page):
+	  Don't use GST_CLOCK_TIME_NONE as start of NEWSEGMENT events.
+	  This fixes a critical warning.
+
+2008-07-28 13:12:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/ogg/gstoggmux.c: Allow muxing of CELT into Ogg streams.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  Allow muxing of CELT into Ogg streams.
+
+2008-07-28 12:47:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add simple typefinder for the CELT codec (www.celt-codec.org).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (celt_type_find),
+	  (plugin_init):
+	  Add simple typefinder for the CELT codec (www.celt-codec.org).
+
+2008-07-27 11:12:41 +0000  Jan Gerber <j@oil21.org>
+
+	  ext/ogg/gstoggdemux.c: Fix calculation of the start time from skeleton streams.
+	  Original commit message from CVS:
+	  Patch by: Jan Gerber <j at oil21 dot org>
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fisbone):
+	  Fix calculation of the start time from skeleton streams.
+	  Fixes bug #530068.
+
+2008-07-24 13:19:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Use 64 bit constant GST_CLOCK_TIME_NONE instead of plain -1.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c:
+	  Use 64 bit constant GST_CLOCK_TIME_NONE instead of plain -1.
+
+2008-07-23 18:34:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/: Implement a linear congruential generator as pseudo random number generator for the dither noise. ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.h:
+	  * gst/audioconvert/gstaudioquantize.c:
+	  (gst_audio_quantize_setup_dither),
+	  (gst_audio_quantize_free_dither):
+	  * gst/audioconvert/gstfastrandom.h:
+	  Implement a linear congruential generator as pseudo random number
+	  generator for the dither noise. This is about 2 times faster than
+	  using GLib's mersenne twister. Also this uses only integer math for
+	  generating integers while GLib internally uses floating point math.
+
+2008-07-23 18:27:15 +0000  Michael Smith <msmith@xiph.org>
+
+	  configure.ac: Remove AC_ISC_POSIX; it breaks on some systems and is not needed.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Remove AC_ISC_POSIX; it breaks on some systems and is not needed.
+
+2008-07-23 13:17:31 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Use GST_STR_NULL to avoid crashes with libcs that don't like NULL strings in printf...
+	  Original commit message from CVS:
+	  Patch by: Damien Lespiau  <damien.lespiau gmail com>
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (print_media):
+	  Use GST_STR_NULL to avoid crashes with libcs that don't
+	  like NULL strings in printf args (such as the win32 one).
+	  Fixes #544306.
+
+2008-07-17 14:21:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/xvimage/xvimagesink.c: Oops - set the size of the image used for probing back to 1x1, for consistency with ximage...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls):
+	  Oops - set the size of the image used for probing back to 1x1, for
+	  consistency with ximagesink
+
+2008-07-17 13:57:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: it's not legal to ask the
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+	  (gst_ximagesink_ximage_new):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+	  (gst_xvimagesink_xvimage_new):
+	  Apparently on Solaris and OS/X (at least), it's not legal to ask the
+	  X server to attach to a shared memory segment after we've deleted it,
+	  with the result that MIT-SHM is disabled. Instead, remove it only after
+	  X succeeds in attaching too.
+
+2008-07-17 02:30:24 +0000  David Schleef <ds@schleef.org>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: Add 'ticks', a 1/30 second sine wave pulse every second.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Add 'ticks', a 1/30 second sine wave pulse every second.
+
+2008-07-15 22:43:16 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/video/video.c: Revert ABI change.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: Revert ABI change.
+
+2008-07-15 13:05:04 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Make it impossible to have NULL caps at the point where we set framerate and other th...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Make it impossible to have NULL caps at the point where we set
+	  framerate and other things. Also don't return immediately for "3ivd"
+	  video and let framerate, etc be set. Might fix bug #542508.
+
+2008-07-14 17:06:26 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	  gst-libs/gst/video/video.c: Video format can also be conveniently determined from (many) non-fixed caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: (gst_video_format_parse_caps):
+	  Video format can also be conveniently determined from (many)
+	  non-fixed caps.
+
+2008-07-14 08:18:58 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/: First stab at integrating DVD subpicture overlay into playbin. Successfully plugs and plays, but the q...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gststreamselector.c:
+	  First stab at integrating DVD subpicture overlay into
+	  playbin. Successfully plugs and plays, but the queues need
+	  shrinking - 3 seconds of video is too much buffering.
+
+2008-07-11 18:06:33 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Remove now obsolete note in the docs.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  Remove now obsolete note in the docs.
+
+2008-07-11 06:10:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Cleanup Plugin docs. Link to signals and properties. Fix sub-section titles. Drop mentining that all our example pipe...
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  * ext/alsa/gstalsamixer.c:
+	  * ext/alsa/gstalsasink.c:
+	  * ext/alsa/gstalsasrc.c:
+	  * ext/gio/gstgiosink.c:
+	  * ext/gio/gstgiosrc.c:
+	  * ext/gio/gstgiostreamsink.c:
+	  * ext/gio/gstgiostreamsrc.c:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/pango/gstclockoverlay.c:
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextrender.c:
+	  * ext/pango/gsttimeoverlay.c:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/theora/theoraparse.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * ext/vorbis/vorbisenc.c:
+	  * ext/vorbis/vorbisparse.c:
+	  * ext/vorbis/vorbistag.c:
+	  * gst/adder/gstadder.c:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/audioresample/gstaudioresample.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  * gst/gdp/gstgdpdepay.c:
+	  * gst/gdp/gstgdppay.c:
+	  * gst/playback/gstdecodebin2.c:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gstplaybin2.c:
+	  * gst/playback/gstqueue2.c:
+	  * gst/playback/gsturidecodebin.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/videorate/gstvideorate.c:
+	  * gst/videoscale/gstvideoscale.c:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/volume/gstvolume.c:
+	  * sys/ximage/ximagesink.c:
+	  * sys/xvimage/xvimagesink.c:
+	  Cleanup Plugin docs. Link to signals and properties. Fix sub-section
+	  titles. Drop mentining that all our example pipelines are "simple"
+	  pipelines.
+
+2008-07-10 21:06:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Cleanup Plugin docs. Link to signals and properties. Fix sub-section titles. Drop mentining that all our example pipe...
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  * ext/alsa/gstalsamixer.c:
+	  * ext/alsa/gstalsasink.c:
+	  * ext/alsa/gstalsasrc.c:
+	  * ext/gio/gstgiosink.c:
+	  * ext/gio/gstgiosrc.c:
+	  * ext/gio/gstgiostreamsink.c:
+	  * ext/gio/gstgiostreamsrc.c:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/pango/gstclockoverlay.c:
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextrender.c:
+	  * ext/pango/gsttimeoverlay.c:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/theora/theoraparse.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * ext/vorbis/vorbisenc.c:
+	  * ext/vorbis/vorbisparse.c:
+	  * ext/vorbis/vorbistag.c:
+	  * gst/adder/gstadder.c:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/audioresample/gstaudioresample.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  * gst/gdp/gstgdpdepay.c:
+	  * gst/gdp/gstgdppay.c:
+	  * gst/playback/gstdecodebin2.c:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gstplaybin2.c:
+	  * gst/playback/gstqueue2.c:
+	  * gst/playback/gsturidecodebin.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/videorate/gstvideorate.c:
+	  * gst/videoscale/gstvideoscale.c:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/volume/gstvolume.c:
+	  * sys/ximage/ximagesink.c:
+	  * sys/xvimage/xvimagesink.c:
+	  Cleanup Plugin docs. Link to signals and properties. Fix sub-section
+	  titles. Drop mentining that all our example pipelines are "simple"
+	  pipelines.
+
+2008-07-07 17:25:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/examples/seek/Makefile.am: Fix out of tree build by adding all required CFLAGS.
+	  Original commit message from CVS:
+	  * tests/examples/seek/Makefile.am:
+	  Fix out of tree build by adding all required CFLAGS.
+
+2008-07-07 09:55:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/playback/gstdecodebin.c: And ref the pad before returning it again when linking to the queue failed. Otherwise we...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (add_raw_queue):
+	  And ref the pad before returning it again when linking to the queue
+	  failed. Otherwise we will unref the pad twice later and things break.
+
+2008-07-07 09:48:45 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/playback/gstdecodebin.c: If linking the raw pad with a queue fails, try it without a queue instead of failing com...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (add_raw_queue):
+	  If linking the raw pad with a queue fails, try it without a queue
+	  instead of failing completely. This should never happen.
+
+2008-07-06 23:22:12 +0000  Evgeniy Stepanov <eugeni.stepanov@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Add a queue after a demuxer if the demuxer outputs raw data. This was done before only f...
+	  Original commit message from CVS:
+	  Patch by: Evgeniy Stepanov <eugeni dot stepanov at gmail dot com>
+	  * gst/playback/gstdecodebin.c: (add_raw_queue), (close_pad_link):
+	  Add a queue after a demuxer if the demuxer outputs raw data. This was
+	  done before only for non-raw data but is required in this case too.
+	  Fixes bug #540215.
+	  decodebin2 doesn't have this issue because all streams of a group
+	  go through multiqueue.
+
+2008-07-03 09:12:49 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Makes libgstsdp compile with mingw32 by defining the right WINVER so that getaddrin...
+	  Original commit message from CVS:
+	  Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+	  * gst-libs/gst/sdp/gstsdpmessage.c:
+	  Makes libgstsdp compile with mingw32 by defining the right WINVER so
+	  that getaddrinfo() can be used. Fixes #541358.
+
+2008-07-01 13:22:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videotestsrc/gstvideotestsrc.*: Cleanups, use default property values as defines.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_class_init), (gst_video_test_src_init),
+	  (gst_video_test_src_set_property),
+	  (gst_video_test_src_get_property), (gst_video_test_src_create):
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  Cleanups, use default property values as defines.
+	  Add property to enable/disable peer buffer allocation.
+
+2008-06-30 09:46:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/: Enable unit tests on PPC again as the bugs are now fixed.
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+	  * tests/check/pipelines/streamheader.c: (streamheader_suite):
+	  Enable unit tests on PPC again as the bugs are now fixed.
+
+2008-06-30 09:20:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/: Add support for ADPCM IMA DK3 and DK4 variant in RIFF containers.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Add support for ADPCM IMA DK3 and DK4 variant in RIFF containers.
+	  Fixes bug #540351.
+
+2008-06-30 08:29:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/ffmpegcolorspace/: Only set/get on the PAL8 format, ffmpegcolorspace doesn't support it on other formats. Also ad...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_get_unit_size):
+	  Only set/get on the PAL8 format, ffmpegcolorspace doesn't support
+	  it on other formats. Also adjust the unit size only for that format
+	  to not include the palette. Fixes bug #540497.
+
+2008-06-29 13:45:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/gstadder.c: Use GST_DEBUG_FUNCPTR and remove some extra vlnak lines.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Use GST_DEBUG_FUNCPTR and remove some extra vlnak lines.
+
+2008-06-27 07:55:40 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ChangeLog: ChangeLog surgery.
+	  Original commit message from CVS:
+	  * ChangeLog:
+	  ChangeLog surgery.
+	  * tests/examples/seek/seek.c:
+	  Move variable into ifdef too.
+
+2008-06-27 07:42:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Include config.h and check if we have X. Fixes: #540334.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c:
+	  Include config.h and check if we have X. Fixes: #540334.
+
+2008-06-26 06:03:38 +0000  Sam Morris <sam@robots.org.to.uk>
+
+	  gst-libs/gst/interfaces/mixertrack.c: API: Add "index" property to GstMixerTrack to differantiate between multiple mi...
+	  Original commit message from CVS:
+	  Patch by: Sam Morris <sam at robots dot org to uk>
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  (gst_mixer_track_class_init), (gst_mixer_track_get_property),
+	  (gst_mixer_track_set_property):
+	  API: Add "index" property to GstMixerTrack to differantiate between
+	  multiple mixer tracks with the same label.
+	  * ext/alsa/gstalsamixeroptions.c: (gst_alsa_mixer_options_new):
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+	  Set the "index" property of GstMixerTrack to the index given by ALSA.
+	  Fixes bug #528299.
+
+2008-06-25 13:15:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/: Remove libgstvideo usage. Use gtk_get_option_group instead of gtk_init().
+	  Original commit message from CVS:
+	  * tests/examples/seek/Makefile.am:
+	  * tests/examples/seek/seek.c:
+	  Remove libgstvideo usage. Use gtk_get_option_group instead of
+	  gtk_init().
+
+2008-06-24 16:27:35 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/Makefile.am: Name the test registry format neutral.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Name the test registry format neutral.
+
+2008-06-24 16:22:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstqueue2.c: Do not double notify. Remove the unsued return value.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c:
+	  Do not double notify. Remove the unsued return value.
+
+2008-06-24 16:15:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/alsa/gstalsamixer.c: Also consider "speaker" as a name for master volume. If that doesn't help look for the first...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c:
+	  Also consider "speaker" as a name for master volume. If that doesn't
+	  help look for the first non-mono volume control that also has a
+	  playback switch.
+
+2008-06-24 16:10:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ChangeLog: Forgot to save the ChangeLog :/
+	  Original commit message from CVS:
+	  * ChangeLog:
+	  Forgot to save the ChangeLog :/
+
+2008-06-24 16:05:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/: Embedd the xwindow.
+	  Original commit message from CVS:
+	  * tests/examples/seek/Makefile.am:
+	  * tests/examples/seek/seek.c:
+	  Embedd the xwindow.
+
+2008-06-24 01:14:40 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/ximage/ximagesink.h: When the caps change, make sure to re-draw borders in force-aspect-ratio=true mode.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c (gst_ximagesink_ximage_put),
+	  (gst_ximagesink_setcaps):
+	  * sys/ximage/ximagesink.h:
+	  When the caps change, make sure to re-draw borders in
+	  force-aspect-ratio=true mode.
+	  * sys/xvimage/xvimagesink.c (gst_xvimagesink_xvimage_put):
+	  Don't clear the border_draw flag until we actually draw the border.
+	  * tests/check/Makefile.am:
+	  Ignore alsasink/src during the states test too, so it doesn't fail
+	  when running without access to the sound device.
+
+2008-06-22 18:35:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Fix crasher when playing a parse-launch line the 2nd time.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c:
+	  Fix crasher when playing a parse-launch line the 2nd time.
+
+2008-06-21 18:56:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/pipelines/oggmux.c: Properly ifdef tests to fix compilation.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c:
+	  Properly ifdef tests to fix compilation.
+
+2008-06-21 10:25:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	  break long lines
+	  Original commit message from CVS:
+	  break long lines
+
+2008-06-20 18:24:24 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/: Add get-video-pad, get-audio-pad, get-text-pad action signals to playbin2. This allows the user to get...
+	  Original commit message from CVS:
+	  * gst/playback/gstplay-marshal.list:
+	  * gst/playback/gstplaybin2.c:
+	  Add get-video-pad, get-audio-pad, get-text-pad action signals to
+	  playbin2. This allows the user to get to the selector's sinkpads, and
+	  thus inspect a range of things - caps, tags, etc.
+
+2008-06-20 17:27:03 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstplaybin2.c: Use a different constant for the convert-frame signal id.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c:
+	  Use a different constant for the convert-frame signal id.
+	  Fixes #537009.
+
+2008-06-20 17:18:55 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/: Fix a whole bunch of typos in comments and log statements.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c:
+	  * gst/playback/gstplaysink.c:
+	  Fix a whole bunch of typos in comments and log statements.
+
+2008-06-20 17:02:48 +0000  Michael Smith <msmith@xiph.org>
+
+	  sys/xvimage/xvimagesink.c: Don't set colour balance values on the Xv port if the user hasn't changed them (via proper...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Don't set colour balance values on the Xv port if the user hasn't
+	  changed them (via properties or the interface). Avoids accumulating
+	  rounding errors for the common case.
+	  Partial fix for bug #537889.
+
+2008-06-20 16:56:18 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstdecodebin2.c: Ensure decodebin2 emits 'drained' signal once, and only once, when all pads are drained.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  Ensure decodebin2 emits 'drained' signal once, and only once, when all
+	  pads are drained.
+
+2008-06-20 16:12:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/README:
+	  apparently it's an error to specify nc -l -p 3000 - though the short usage does not make it very clear that you can d...
+	  Original commit message from CVS:
+	  apparently it's an error to specify nc -l -p 3000 - though the short usage
+	  does not make it very clear that you can drop the host arg with -l
+
+2008-06-20 09:25:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisenc.c: Report the encoder latency. Fixes #538232.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_get_latency),
+	  (gst_vorbis_enc_src_query), (gst_vorbis_enc_chain):
+	  Report the encoder latency. Fixes #538232.
+
+2008-06-20 09:19:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Implement the source property, emit notify when it changes in the underlying uridecodebin.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_get_property),
+	  (notify_source), (activate_group):
+	  Implement the source property, emit notify when it changes in the
+	  underlying uridecodebin.
+
+2008-06-20 09:14:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Free and clear the seek element list so that we don't use invalid references when seeking...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (stop_cb):
+	  Free and clear the seek element list so that we don't use invalid
+	  references when seeking after recreating a gst-launch line.
+
+2008-06-20 09:09:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Report latency even if we are not live instead of hiding it.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_query), (gst_base_audio_sink_skew_slaving),
+	  (gst_base_audio_sink_render):
+	  Report latency even if we are not live instead of hiding it.
+	  Take ts-offset and render-delay of the basesink into account when
+	  scheduling samples.
+	  Rework the clipping code so that we can take the various offsets into
+	  account and still do correct clipping.
+
+2008-06-20 08:52:21 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Bump verion back to devel -> 0.10.20.1
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump verion back to devel -> 0.10.20.1
+
+2008-06-20 08:47:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/tag/tags.c: Don't increase the size of non-string image buffers by one as this might in theory confuse d...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_image_data_to_image_buffer):
+	  Don't increase the size of non-string image buffers by one as this
+	  might in theory confuse decoders. Still increase it by one for string
+	  image buffers to append '\0'.
+
+2008-06-20 08:45:13 +0000  Antoine Tremblay <hexa00@gmail.com>
+
+	  gst/gdp/gstgdppay.c: Fix a buffer memleak and remove a confusing and wrong debug output.
+	  Original commit message from CVS:
+	  Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset):
+	  Fix a buffer memleak and remove a confusing and wrong debug output.
+	  Fixes bug #538663.
+
+2008-06-19 11:25:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/appsink-src.c: Don't use a buffer after unreffing it.
+	  Original commit message from CVS:
+	  * examples/app/appsink-src.c: (on_new_buffer_from_source):
+	  Don't use a buffer after unreffing it.
+
+=== release 0.10.20 ===
+
+2008-06-18 14:36:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* po/LINGUAS:
+	* win32/common/config.h:
+	  Release 0.10.20
+	  Original commit message from CVS:
+	  Release 0.10.20
+
+2008-06-18 14:32:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2008-06-18 06:31:11 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix gtk-doc warnings. Also don't misuse api-doc comments for normal comments.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * examples/app/appsrc-ra.c:
+	  * examples/app/appsrc-seekable.c:
+	  * examples/app/appsrc-stream.c:
+	  * examples/app/appsrc-stream2.c:
+	  * ext/directfb/dfbvideosink.h:
+	  * ext/metadata/gstbasemetadata.c:
+	  * ext/metadata/gstbasemetadata.h:
+	  * ext/metadata/metadata.c:
+	  * ext/metadata/metadataexif.c:
+	  * ext/theora/theoradec.h:
+	  * gst/deinterlace2/gstdeinterlace2.h:
+	  * gst/deinterlace2/tvtime/speedy.c:
+	  * gst/deinterlace2/tvtime/speedy.h:
+	  * gst/deinterlace2/tvtime/vfir.c:
+	  Fix gtk-doc warnings. Also don't misuse api-doc comments for normal
+	  comments.
+
+2008-06-16 14:11:36 +0000  Andy Wingo <wingo@pobox.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  gst-libs/gst/app/gstappsrc.c (gst_app_src_set_max_bytes)
+	  Original commit message from CVS:
+	  2008-06-16  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/app/gstappsrc.c (gst_app_src_set_max_bytes)
+	  (gst_app_src_get_max_bytes, gst_app_src_push_buffer): Use
+	  G_GUINT64_FORMAT. Avoid overflow in get_max_bytes().
+
+2008-06-16 07:30:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Final round of doc updates.
+	  Original commit message from CVS:
+	  * gst/rtpmanager/gstrtpjitterbuffer.c:
+	  * gst/speed/gstspeed.c:
+	  * gst/speexresample/gstspeexresample.c:
+	  * gst/videosignal/gstvideoanalyse.c:
+	  * gst/videosignal/gstvideodetect.c:
+	  * gst/videosignal/gstvideomark.c:
+	  * sys/dvb/gstdvbsrc.c:
+	  * sys/oss4/oss4-mixer.c:
+	  * sys/oss4/oss4-sink.c:
+	  * sys/oss4/oss4-source.c:
+	  * sys/wininet/gstwininetsrc.c:
+	  Final round of doc updates.
+
+2008-06-13 11:59:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/plugins/: docs/plugins/inspect/plugin-mythtv.xml
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-bad-plugins.args:
+	  * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-bad-plugins.interfaces:
+	  * docs/plugins/gst-plugins-bad-plugins.prerequisites:
+	  * docs/plugins/gst-plugins-bad-plugins.signals:
+	  * docs/plugins/inspect/plugin-alsaspdif.xml:
+	  * docs/plugins/inspect/plugin-amrwb.xml:
+	  * docs/plugins/inspect/plugin-app.xml:
+	  * docs/plugins/inspect/plugin-bayer.xml:
+	  * docs/plugins/inspect/plugin-bz2.xml:
+	  * docs/plugins/inspect/plugin-cdaudio.xml:
+	  * docs/plugins/inspect/plugin-cdxaparse.xml:
+	  * docs/plugins/inspect/plugin-dtsdec.xml:
+	  * docs/plugins/inspect/plugin-dvb.xml:
+	  * docs/plugins/inspect/plugin-dvdspu.xml:
+	  * docs/plugins/inspect/plugin-faac.xml:
+	  * docs/plugins/inspect/plugin-faad.xml:
+	  * docs/plugins/inspect/plugin-fbdevsink.xml:
+	  * docs/plugins/inspect/plugin-festival.xml:
+	  * docs/plugins/inspect/plugin-filter.xml:
+	  * docs/plugins/inspect/plugin-flvdemux.xml:
+	  * docs/plugins/inspect/plugin-freeze.xml:
+	  * docs/plugins/inspect/plugin-gsm.xml:
+	  * docs/plugins/inspect/plugin-gstinterlace.xml:
+	  * docs/plugins/inspect/plugin-gstrtpmanager.xml:
+	  * docs/plugins/inspect/plugin-h264parse.xml:
+	  * docs/plugins/inspect/plugin-interleave.xml:
+	  * docs/plugins/inspect/plugin-jack.xml:
+	  * docs/plugins/inspect/plugin-ladspa.xml:
+	  * docs/plugins/inspect/plugin-metadata.xml:
+	  * docs/plugins/inspect/plugin-mms.xml:
+	  * docs/plugins/inspect/plugin-modplug.xml:
+	  * docs/plugins/inspect/plugin-mpeg2enc.xml:
+	  * docs/plugins/inspect/plugin-mpeg4videoparse.xml:
+	  * docs/plugins/inspect/plugin-mpegtsparse.xml:
+	  * docs/plugins/inspect/plugin-mpegvideoparse.xml:
+	  * docs/plugins/inspect/plugin-musepack.xml:
+	  * docs/plugins/inspect/plugin-musicbrainz.xml:
+	  * docs/plugins/inspect/plugin-mve.xml:
+	  * docs/plugins/inspect/plugin-mythtv.xml
+	  * docs/plugins/inspect/plugin-nas.xml:
+	  * docs/plugins/inspect/plugin-neon.xml:
+	  * docs/plugins/inspect/plugin-nsfdec.xml:
+	  * docs/plugins/inspect/plugin-nuvdemux.xml:
+	  * docs/plugins/inspect/plugin-oss4.xml
+	  * docs/plugins/inspect/plugin-rawparse.xml:
+	  * docs/plugins/inspect/plugin-real.xml:
+	  * docs/plugins/inspect/plugin-replaygain.xml:
+	  * docs/plugins/inspect/plugin-rfbsrc.xml:
+	  * docs/plugins/inspect/plugin-sdl.xml:
+	  * docs/plugins/inspect/plugin-sdp.xml:
+	  * docs/plugins/inspect/plugin-selector.xml:
+	  * docs/plugins/inspect/plugin-sndfile.xml:
+	  * docs/plugins/inspect/plugin-soundtouch.xml:
+	  * docs/plugins/inspect/plugin-spcdec.xml:
+	  * docs/plugins/inspect/plugin-speed.xml:
+	  * docs/plugins/inspect/plugin-speexresample.xml:
+	  * docs/plugins/inspect/plugin-stereo.xml:
+	  * docs/plugins/inspect/plugin-subenc.xml
+	  * docs/plugins/inspect/plugin-timidity.xml:
+	  * docs/plugins/inspect/plugin-tta.xml:
+	  * docs/plugins/inspect/plugin-vcdsrc.xml:
+	  * docs/plugins/inspect/plugin-videosignal.xml:
+	  * docs/plugins/inspect/plugin-vmnc.xml:
+	  * docs/plugins/inspect/plugin-wildmidi.xml:
+	  * docs/plugins/inspect/plugin-x264.xml:
+	  * docs/plugins/inspect/plugin-xvid.xml:
+	  * docs/plugins/inspect/plugin-y4menc.xml:
+	  * ext/amrwb/gstamrwbdec.c:
+	  * ext/amrwb/gstamrwbenc.c:
+	  * ext/amrwb/gstamrwbparse.c:
+	  * ext/dc1394/gstdc1394.c:
+	  * ext/directfb/dfbvideosink.c:
+	  * ext/ivorbis/vorbisdec.c:
+	  * ext/jack/gstjackaudiosink.c:
+	  * ext/mpeg2enc/gstmpeg2enc.cc:
+	  * ext/mplex/gstmplex.cc:
+	  * ext/musicbrainz/gsttrm.c:
+	  * ext/mythtv/gstmythtvsrc.c:
+	  * ext/theora/theoradec.c:
+	  * ext/timidity/gsttimidity.c:
+	  * ext/timidity/gstwildmidi.c:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst/deinterlace/gstdeinterlace.c:
+	  * gst/dvdspu/gstdvdspu.c:
+	  * gst/festival/gstfestival.c:
+	  * gst/freeze/gstfreeze.c:
+	  * gst/interleave/deinterleave.c:
+	  * gst/interleave/interleave.c:
+	  * gst/modplug/gstmodplug.cc:
+	  * gst/nuvdemux/gstnuvdemux.c:
+	  Add missing elements to docs. Fix doc-markup: use convinience syntax
+	  for examples (produces valid docbook), add several refsec2 when we
+	  have several titles. Fix some types.
+
+2008-06-12 15:47:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/: Add beefed up example app from bug #413418. It now also uses appsink instead of fakesink for more ulti...
+	  Original commit message from CVS:
+	  * examples/app/.cvsignore:
+	  * examples/app/Makefile.am:
+	  * examples/app/appsink-src.c: (on_new_buffer_from_source),
+	  (on_source_message), (on_sink_message), (main):
+	  Add beefed up example app from bug #413418. It now also uses appsink
+	  instead of fakesink for more ultimate coolness.
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_init), (gst_app_src_set_property),
+	  (gst_app_src_get_property), (gst_app_src_unlock),
+	  (gst_app_src_unlock_stop), (gst_app_src_create),
+	  (gst_app_src_set_max_bytes), (gst_app_src_push_buffer),
+	  (gst_app_src_end_of_stream):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Add block property to allow push based implementation to block when we
+	  fill up the appsrc queues.
+	  Emit the enough-data signal while releasing our lock.
+
+2008-06-12 14:50:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  examples/app/.cvsignore: Ignore more.
+	  Original commit message from CVS:
+	  * examples/app/.cvsignore:
+	  Ignore more.
+
+2008-06-12 14:49:15 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Do not use short_description in section docs for elements. We extract them from element details and there will be war...
+	  Original commit message from CVS:
+	  * ext/dc1394/gstdc1394.c:
+	  * ext/ivorbis/vorbisdec.c:
+	  * ext/jack/gstjackaudiosink.c:
+	  * ext/metadata/gstmetadatademux.c:
+	  * ext/mythtv/gstmythtvsrc.c:
+	  * ext/theora/theoradec.c:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst/bayer/gstbayer2rgb.c:
+	  * gst/deinterlace/gstdeinterlace.c:
+	  * gst/rawparse/gstaudioparse.c:
+	  * gst/rawparse/gstvideoparse.c:
+	  * gst/rtpmanager/gstrtpbin.c:
+	  * gst/rtpmanager/gstrtpclient.c:
+	  * gst/rtpmanager/gstrtpjitterbuffer.c:
+	  * gst/rtpmanager/gstrtpptdemux.c:
+	  * gst/rtpmanager/gstrtpsession.c:
+	  * gst/rtpmanager/gstrtpssrcdemux.c:
+	  * gst/selector/gstinputselector.c:
+	  * gst/selector/gstoutputselector.c:
+	  * gst/videosignal/gstvideoanalyse.c:
+	  * gst/videosignal/gstvideodetect.c:
+	  * gst/videosignal/gstvideomark.c:
+	  * sys/oss4/oss4-mixer.c:
+	  * sys/oss4/oss4-sink.c:
+	  * sys/oss4/oss4-source.c:
+	  Do not use short_description in section docs for elements. We extract
+	  them from element details and there will be warnings if they differ.
+	  Also fixing up the ChangeLog order.
+
+2008-06-11 21:17:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: 0.10.19.3 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  0.10.19.3 pre-release
+
+2008-06-11 20:13:00 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Fix build on win32.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Fix build on win32.
+	  Patch By: David Schleef <ds@schleef.org>
+	  Fixes: #536874
+
+2008-06-11 09:35:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgiobasesrc.*: Try to read the requested number of bytes, even if the first read returns less than requeste...
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_finalize),
+	  (gst_gio_base_src_create):
+	  * ext/gio/gstgiobasesrc.h:
+	  Try to read the requested number of bytes, even if the first
+	  read returns less than requested, until nothing is read anymore
+	  or we have the requested amount of bytes. This fixes playback of
+	  files via Samba as Samba only allows to read 64k at once.
+	  Implement a caching algorithm that makes sure that we read at
+	  least 4k of data every time. Some elements will try to read a few
+	  bytes, then seek, read again a few bytes and so on and this is
+	  painfully slow as every operation has to go over DBus if GVfs is
+	  used as backend.
+	  Fixes bug #536849 and #536848.
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_class_init),
+	  (gst_gio_src_check_get_range):
+	  Override check_get_range() to blacklist http/https URIs
+	  and whitelist file URIs. More to be added on demand.
+
+2008-06-06 16:50:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/: Added 3 more example application for using appsrc in random-access mode, pull-mode streaming and pull ...
+	  Original commit message from CVS:
+	  * examples/app/Makefile.am:
+	  * examples/app/appsrc-ra.c: (feed_data), (seek_data),
+	  (found_source), (bus_message), (main):
+	  * examples/app/appsrc-seekable.c: (feed_data), (seek_data),
+	  (found_source), (bus_message), (main):
+	  * examples/app/appsrc-stream2.c: (feed_data), (found_source),
+	  (bus_message), (main):
+	  Added 3 more example application for using appsrc in random-access mode,
+	  pull-mode streaming and pull mode seekable.
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_start), (gst_app_src_do_get_size),
+	  (gst_app_src_create):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Make stream-type property writable.
+	  Unset flushing when starting so that we reuse appsrc.
+	  Inform basesrc about the configured size.
+	  Emit seek-data signal when we are going to a different offset in
+	  random-access mode.
+
+2008-06-06 14:19:54 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/appsrc-stream.c: Use deep-notify until we can depend on a playbin2 with support for the source property.
+	  Original commit message from CVS:
+	  * examples/app/appsrc-stream.c: (found_source), (main):
+	  Use deep-notify until we can depend on a playbin2 with support for the
+	  source property.
+
+2008-06-05 16:38:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/: Added an example on how to use appsrc in playbin in streaming mode from an mmapped file.
+	  Original commit message from CVS:
+	  * examples/app/.cvsignore:
+	  * examples/app/Makefile.am:
+	  * examples/app/appsrc-stream.c: (read_data), (start_feed),
+	  (stop_feed), (found_source), (bus_message), (main):
+	  Added an example on how to use appsrc in playbin in streaming mode from
+	  an mmapped file.
+	  * examples/app/appsrc_ex.c: (main):
+	  Set pipeline to NULL to free queued buffers.
+	  * gst-libs/gst/app/gstapp-marshal.list:
+	  * gst-libs/gst/app/gstappsrc.c: (stream_type_get_type), (_do_init),
+	  (gst_app_src_class_init), (gst_app_src_init),
+	  (gst_app_src_flush_queued), (gst_app_src_dispose),
+	  (gst_app_src_set_property), (gst_app_src_get_property),
+	  (gst_app_src_unlock), (gst_app_src_unlock_stop),
+	  (gst_app_src_start), (gst_app_src_stop), (gst_app_src_is_seekable),
+	  (gst_app_src_check_get_range), (gst_app_src_do_seek),
+	  (gst_app_src_create), (gst_app_src_set_stream_type),
+	  (gst_app_src_get_stream_type), (gst_app_src_set_max_bytes),
+	  (gst_app_src_get_max_bytes), (gst_app_src_push_buffer),
+	  (gst_app_src_end_of_stream), (gst_app_src_uri_get_type),
+	  (gst_app_src_uri_get_protocols), (gst_app_src_uri_get_uri),
+	  (gst_app_src_uri_set_uri), (gst_app_src_uri_handler_init):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Measure max queue size in bytes instead.
+	  Add support for 3 modes of operation, streaming, seekable and
+	  random-access, making basesrc handle the scheduling modes for each.
+	  Add appsrc:// uri handler so that automatic plugging can be done from
+	  playbin2 or uridecodebin, for example.
+	  Added support for custom segment formats.
+	  Add support for push and pull based operations from the application.
+	  Expand the methods so that errors can be detected.
+	  Flush the queued buffers on seeks and when shutting down.
+	  Add signals to inform the app that a seek must happen.
+
+2008-06-05 09:47:23 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: 0.10.19.2 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  0.10.19.2 pre-release
+
+2008-06-04 21:48:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  win32/common/: Add new API functions to the dll exports
+	  Original commit message from CVS:
+	  * win32/common/libgstrtsp.def:
+	  * win32/common/libgsttag.def:
+	  Add new API functions to the dll exports
+
+2008-06-04 17:42:38 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstplaybasebin.c: Disconnect signals from decodebins we created before we remove it from playbin, to avo...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  Disconnect signals from decodebins we created before we remove it from
+	  playbin, to avoid crashes if the decodebin is eventually disposed after
+	  the playbin itself (possible if the app takes a reference on the
+	  decodebin).
+	  Fixes #536521.
+
+2008-06-04 17:12:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Bunch of small clean-ups: use gst_type_find_suggest_simple(); don't copy caps fo...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
+	  (mp3_type_find), (musepack_type_find), (MULTIPART_MAX_HEADER_SIZE),
+	  (mpeg_sys_type_find), (mpeg_ts_type_find), (mpeg4_video_type_find),
+	  (h264_video_type_find), (mpeg_video_stream_type_find),
+	  (dv_type_find), (mmsh_type_find):
+	  Bunch of small clean-ups: use gst_type_find_suggest_simple(); don't
+	  copy caps for no good reason (this may be desirable to make it easier
+	  to detect leaks, but then it should probably be done for all caps
+	  in the typefinder somewhere).
+
+2008-06-04 16:06:49 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  tests/check/Makefile.am: Do not try to run the check tests for subparse unless it has been built.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Do not try to run the check tests for subparse unless it has been
+	  built.
+
+2008-06-04 16:00:26 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  tests/check/pipelines/streamheader.c: Do not try to run a test which requires vorbisenc unless we have actually built...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/streamheader.c: (buffer_probe_cb),
+	  (test_multifdsink_gdp_vorbisenc), (streamheader_suite):
+	  Do not try to run a test which requires vorbisenc unless we have
+	  actually built it.
+
+2008-06-04 11:53:53 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.*: Add a couple of missing argument guards.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_set_auth), (gst_rtsp_connection_set_auth_param),
+	  (gst_rtsp_connection_clear_auth_params),
+	  (gst_rtsp_connection_set_qos_dscp), (gst_rtsp_connection_get_ip):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Add a couple of missing argument guards.
+	  Add a way of setting the DSCP for an RTSP connection.
+	  Add an accessor method for the ip member of GstRTSPConnection as all
+	  members are supposed to be private.
+
+2008-06-04 11:33:23 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst/tcp/gstmultifdsink.c: Fixed accidental use of IPv4 options for all IPv6 addresses.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (setup_dscp_client):
+	  Fixed accidental use of IPv4 options for all IPv6 addresses.
+
+2008-06-04 10:18:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixertrack.h: Document mixer track flags.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  Document mixer track flags.
+
+2008-06-04 05:58:38 +0000  Antoine Tremblay <hexa00@gmail.com>
+
+	  gst/gdp/gstgdppay.c: Don't set caps on the buffers that contain a copy of the buffer including the caps of them resul...
+	  Original commit message from CVS:
+	  Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader):
+	  Don't set caps on the buffers that contain a copy of the buffer
+	  including the caps of them resulting in an always increasing refcount
+	  of the caps and insanely large caps. Instead include a buffer without
+	  caps in the new caps. Fixes bug #536475.
+
+2008-06-04 05:44:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/videoscale/gstvideoscale.c: Transform a given PAR to a range on the struct with the generic height/width instead ...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform_caps):
+	  Transform a given PAR to a range on the struct with the generic
+	  height/width instead of the struct with the possibly restricted
+	  height/width.
+
+2008-06-04 04:24:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/videoscale/gstvideoscale.c: Prefer the given format if it contains something stricter than [1,MAX] for height or ...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform_caps):
+	  Prefer the given format if it contains something stricter than [1,MAX]
+	  for height or width and only put a structure that requires rescaling
+	  as second. This makes it possible to use videoscale in pipelines where
+	  the source can actually produce the wanted height/width but usually
+	  selects a different one from the requested.
+
+2008-06-03 20:01:58 +0000  John Millikin <jmillikin@gmail.com>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Retrieve COVERART tags from vorbis comments (#512333)
+	  Original commit message from CVS:
+	  Based on patch by: John Millikin <jmillikin gmail com>
+	  * gst-libs/gst/tag/gstvorbistag.c: (tag_matches), (gst_vorbis_tag_add),
+	  (gst_vorbis_tag_add_coverart):
+	  Retrieve COVERART tags from vorbis comments (#512333)
+
+2008-06-03 19:44:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/: Don't forget to add new enum value here too (should probably use glib-mkenums here...).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c: (register_tag_image_type_enum):
+	  Don't forget to add new enum value here too (should probably use
+	  glib-mkenums here...).
+
+2008-06-03 19:29:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/: API: add gst_tag_image_data_to_image_buffer()
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c: (gst_tag_list_add_id3_image):
+	  * gst-libs/gst/tag/tag.h: (GST_TAG_IMAGE_TYPE_NONE),
+	  * gst-libs/gst/tag/tags.c: (register_tag_image_type_enum),
+	  (gst_tag_image_type_get_type), (gst_tag_image_type_is_valid),
+	  (gst_tag_image_data_to_image_buffer):
+	  Add two utility functions to avoid code duplication (#512333):
+	  API: add gst_tag_image_data_to_image_buffer()
+	  API: add gst_tag_list_add_id3_image()
+
+2008-06-03 08:54:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstaudio.def: Add gst_audio_check_channel_positions() to the exported symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  Add gst_audio_check_channel_positions() to the exported symbols.
+
+2008-06-03 08:48:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  API: Make gst_audio_check_channel_positions() public.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions):
+	  * gst-libs/gst/audio/multichannel.h:
+	  API: Make gst_audio_check_channel_positions() public.
+	  * tests/check/libs/audio.c: (GST_START_TEST):
+	  Add some simple checks for gst_audio_check_channel_positions().
+
+2008-06-02 20:09:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/v4l/v4l_calls.c: minrange and maxrange are scaled according to the frequency multiplier.
+	  Original commit message from CVS:
+	  * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
+	  minrange and maxrange are scaled according to the frequency
+	  multiplier.
+
+2008-06-02 18:37:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/: Use gstvideo functions to calculate strides and plane offsets. Fixes rendering issue ('ghost' images of t...
+	  Original commit message from CVS:
+	  * ext/pango/Makefile.am:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_shade_y),
+	  (gst_text_overlay_blit_yuv420), (gst_text_overlay_push_frame):
+	  Use gstvideo functions to calculate strides and plane offsets. Fixes
+	  rendering issue ('ghost' images of the text on the chroma planes)
+	  with widths or heights that are not multiples of 8 (#506659 and
+	  probably also #485729).
+	  * tests/icles/test-textoverlay.c: (show_text), (test_textoverlay),
+	  (main):
+	  Test with odd height/width too.
+
+2008-06-02 12:20:35 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: When using gst_element_iterate_pads() one has to unref every pad after usage.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_query_duration),
+	  (gst_adder_query_latency):
+	  When using gst_element_iterate_pads() one has to unref every pad
+	  after usage.
+
+2008-05-31 19:57:57 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Add a gtk-doc chunk for the new properties to have a Since: indication.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init):
+	  Add a gtk-doc chunk for the new properties to have a Since: indication.
+
+2008-05-31 19:50:59 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* ChangeLog:
+	  ChangeLog surgery, mark API change
+	  Original commit message from CVS:
+	  ChangeLog surgery, mark API change
+
+2008-05-31 18:10:47 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Provide readable actual-buffer-time and actual-latency-time properties that ref...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init), (gst_base_audio_src_dispose),
+	  (gst_base_audio_src_get_property), (gst_base_audio_src_setcaps),
+	  (gst_base_audio_src_change_state):
+	  Provide readable actual-buffer-time and actual-latency-time properties
+	  that reflect the configured ringbuffer values. Fixes #524724.
+
+2008-05-30 15:29:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Simply converting the running time into an RTP timestamp by scaling it based on...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push),
+	  (gst_basertppayload_change_state):
+	  Simply converting the running time into an RTP timestamp by scaling it
+	  based on the clock-rate is good enough for making an RTP timestamp. This
+	  has the added benefit that we can later on expose a property with the
+	  RTP timestamp of running time 0, as is needed for RTSP servers to
+	  generate the response of the PLAY request.
+
+2008-05-30 08:42:17 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Allow up to 11 positioned channels now that audioconvert can handle this but add ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (structure_has_fixed_channel_positions),
+	  (gst_audio_convert_transform_caps):
+	  Allow up to 11 positioned channels now that audioconvert can handle
+	  this but add no default positions for > 8 channels.
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Add some unit tests for the above change: Test conversion of
+	  11 positioned channels to stereo and the other way around, test
+	  conversion of 15 unpositioned channels in different ways.
+
+2008-05-29 19:45:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstaudio.def: Add gst_audio_clock_reset to the list of exported symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  Add gst_audio_clock_reset to the list of exported symbols.
+
+2008-05-29 19:37:47 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/elements/vorbisdec.c: Remove wrong_channels_identification_header unit test as we now support 7 (and more...
+	  Original commit message from CVS:
+	  * tests/check/elements/vorbisdec.c: (vorbisdec_suite):
+	  Remove wrong_channels_identification_header unit test as we now
+	  support 7 (and more channels).
+
+2008-05-29 12:17:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstchannelmix.c: If mixing left or right to center (or the other way around) only take the complete ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c:
+	  (gst_channel_mix_fill_one_other):
+	  If mixing left or right to center (or the other way around) only take
+	  the complete value if we don't already have the original position in
+	  the source.
+
+2008-05-29 11:34:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/multichannel.c: Allow rear center together with rear left/right and other previously conflicting c...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions),
+	  (gst_audio_set_structure_channel_positions_list),
+	  (gst_audio_fixate_channel_positions):
+	  Allow rear center together with rear left/right and other previously
+	  conflicting channel positions. The reason why they weren't allowed
+	  was the channel mixing implementation in audioconvert.
+	  Also take this into account when fixing channel layouts.
+	  Allow setting channel positions for 1/2 channels when using
+	  gst_audio_set_structure_channel_position().
+	  * gst/audioconvert/gstchannelmix.c:
+	  (gst_channel_mix_fill_compatible), (gst_channel_mix_detect_pos),
+	  (gst_channel_mix_fill_one_other), (gst_channel_mix_fill_others),
+	  (gst_channel_mix_fill_special), (gst_channel_mix_fill_matrix):
+	  Major rewrite of the channel mixing.
+	  We now allow previously	conflicting channel positions to appear
+	  together (rear center and rear left/right for example).
+	  Fixes bug #533817.
+	  Rework the way channels are mixed together to take more possible
+	  channel positions into account, properly mix from/to side channels
+	  and don't assume that either center, left&right or nothing of a
+	  specific position is available anymore.
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Adjust unit tests with non-standard 1/2 channel layouts to the more
+	  correct new behaviour.
+	  Add a unit test for 5.1->Stereo downmixing.
+
+2008-05-29 07:02:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/vorbis/: Add sane defaults for the 7 and 8 channel layouts as those are undefined in the Vorbis spec. Use NONE ch...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_identification_packet):
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_generate_sink_caps):
+	  Add sane defaults for the 7 and 8 channel layouts as those are
+	  undefined in the Vorbis spec. Use NONE channel layouts when decoding
+	  more than 8 channels instead of erroring out. Fixes bug #535356.
+
+2008-05-28 16:10:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add theoraparse to the docs and fix some docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/theora/theoraparse.c:
+	  Add theoraparse to the docs and fix some docs.
+
+2008-05-28 15:48:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: Fix EOS condition and track addition check, the track.end sector is included in t...
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_add_track), (gst_cdda_base_src_create):
+	  Fix EOS condition and track addition check, the track.end sector is
+	  included in the track. Fixes #533265.
+
+2008-05-28 14:49:24 +0000  Mark Nauwelaerts <manauw@skynet.be>
+
+	  gst/videorate/gstvideorate.*: React (more) to NEWSEGMENT
+	  Original commit message from CVS:
+	  Patch by: Mark Nauwelaerts <manauw at skynet be>
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_reset),
+	  (gst_video_rate_flush_prev), (gst_video_rate_event),
+	  (gst_video_rate_chain):
+	  * gst/videorate/gstvideorate.h:
+	  React (more) to NEWSEGMENT
+	  Small adjustment in timestamp calculation to prevent mismatches
+	  Fixes #435633.
+
+2008-05-28 11:31:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/examples/seek/seek.c: Initialise error to NULL as we should.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (make_parselaunch_pipeline):
+	  Initialise error to NULL as we should.
+
+2008-05-28 08:14:47 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: Implement latency query.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_query_duration),
+	  (gst_adder_query_latency), (gst_adder_query):
+	  Implement latency query.
+
+2008-05-27 18:10:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: Correctly resync the iterator if gst_iterator_next() returns
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_query_duration):
+	  Correctly resync the iterator if gst_iterator_next() returns
+	  GST_ITERATOR_RESYNC.
+
+2008-05-27 17:14:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  win32/vs6/libgstpbutils.dsp: Add pbutils-enumtypes.c to sources (#518037).
+	  Original commit message from CVS:
+	  * win32/vs6/libgstpbutils.dsp:
+	  Add pbutils-enumtypes.c to sources (#518037).
+
+2008-05-27 16:20:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudioclock.*: Add method to inform the clock that the time starts from 0 again. We use this inf...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudioclock.c: (gst_audio_clock_init),
+	  (gst_audio_clock_reset), (gst_audio_clock_get_internal_time):
+	  * gst-libs/gst/audio/gstaudioclock.h:
+	  Add method to inform the clock that the time starts from 0 again. We use
+	  this info to calculate a clock offset so that the time we report in
+	  internal_time is monotonically increasing, as required by the clock base
+	  class. Fixes #521761.
+	  API: GstAudioClock::gst_audio_clock_reset()
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_skew_slaving),
+	  (gst_base_audio_sink_change_state):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create), (gst_base_audio_src_change_state):
+	  Reset reported time when we (re)create the ringbuffer.
+
+2008-05-27 16:11:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsamixertrack.c: Make sure playback volumes aren't accidentally overwritten by capture volumes if an als...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixertrack.c:
+	  (gst_alsa_mixer_track_update_alsa_capabilities):
+	  Make sure playback volumes aren't accidentally overwritten by
+	  capture volumes if an alsa mixer track has both playback and
+	  capture capabilities: we create two GstMixerTracks in that
+	  case, so make sure we query only the alsa capabilities that
+	  refer to the type of GstMixerTrack we created from the dual
+	  capability alsa element. Should fix issues with Audigy2 sound
+	  cards (#518082).
+
+2008-05-27 10:57:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/oggmux.c: Don't use deprecated function.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c: (test_pipeline):
+	  Don't use deprecated function.
+
+2008-05-27 10:35:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Check for NULL cases and log them, creating ghostpads can, for example, fail when the p...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  (gst_decode_group_control_source_pad), (gst_decode_group_expose):
+	  Check for NULL cases and log them, creating ghostpads can, for example,
+	  fail when the pad returns wrong caps.
+	  * gst/playback/gstplaybin2.c: (perform_eos):
+	  When pushing out the EOS event, collect the return value and warn when
+	  something failed.
+
+2008-05-26 17:18:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: Add support for DVCPRO.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add support for DVCPRO.
+
+2008-05-26 10:29:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videoscale/gstvideoscale.c: Change default scaling method from nearest-neighbour to bilinear.
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (DEFAULT_PROP_METHOD):
+	  Change default scaling method from nearest-neighbour to bilinear.
+
+2008-05-26 10:26:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/video.c: More checks.
+	  Original commit message from CVS:
+	  * tests/check/libs/video.c:
+	  More checks.
+
+2008-05-25 20:51:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Limit duration to a maximum of five seconds for tmplayer format where we can guess the duration only from the timesta...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (parser_state_init),
+	  (gst_sub_parse_format_autodetect), (handle_buffer):
+	  * gst/subparse/gstsubparse.h:
+	  * tests/check/elements/subparse.c: (test_tmplayer_style3b):
+	  Limit duration to a maximum of five seconds for tmplayer format where
+	  we can guess the duration only from the timestamp of the next line of
+	  text. We don't want to show a text for eternities just because nothing
+	  else is being said for a while.
+
+2008-05-23 14:14:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Check sequence numbers, mark input buffers with a discont flag for the subcla...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_handle_sink_event),
+	  (gst_base_rtp_depayload_push_full),
+	  (gst_base_rtp_depayload_change_state):
+	  Check sequence numbers, mark input buffers with a discont flag for the
+	  subclass when we detected a gap, drop duplicate buffers. We do this
+	  because one can use the element without a jitterbuffer in front and we
+	  don't want to feed the subclasses invalid or reordered data.
+	  Do an error when the subclass did not provide a process function instead
+	  of crashing.
+	  Some other small cleanups.
+
+2008-05-22 22:35:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/videotestsrc.c: May just as well use the precalculated uvstride here.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c: (paint_hline_NV12_NV21):
+	  May just as well use the precalculated uvstride here.
+
+2008-05-22 22:09:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Add some documentation comments, and some new headers to be scanned.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gio.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggdemux.h:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggmux.h:
+	  * gst/audioconvert/audioconvert.c:
+	  * gst/audioconvert/audioconvert.h:
+	  * gst/audioconvert/gstaudioconvert.h:
+	  * gst/gdp/gstgdpdepay.h:
+	  * gst/gdp/gstgdppay.h:
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstdecodebin2.c:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gstplaybin2.c:
+	  * gst/playback/gsturidecodebin.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gstmultifdsink.h:
+	  * gst/tcp/gsttcp.h:
+	  Add some documentation comments, and some new headers to be scanned.
+	  Rename some internal enum declarations (audioconvert's DitherType and
+	  NoiseShapingType, GstUnitType from the TCP elements) to match the
+	  documented GObject type names so that the docs pick them up.
+	  Name the playbin2 docs markups properly so they get picked up. They'll
+	  need renaming back when/if playbin2 becomes playbin.
+	  100% symbol coverage for the plugin docs, booya.
+
+2008-05-22 18:30:15 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  gst/videotestsrc/videotestsrc.c: Fix generation of NV12/NV21 frames. Fixes bug #532454.
+	  Original commit message from CVS:
+	  Patch by: Thijs Vermeir <thijsvermeir@gmail.com>
+	  * gst/videotestsrc/videotestsrc.c: (paint_hline_NV12_NV21):
+	  Fix generation of NV12/NV21 frames. Fixes bug #532454.
+
+2008-05-22 11:59:33 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/playback/gstdecodebin.c: Lock the fakesink before setting the state to NULL and removing it from the bin so that ...
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons <sjoerd at luon dot net>
+	  * gst/playback/gstdecodebin.c: (remove_fakesink):
+	  Lock the fakesink before setting the state to NULL and removing it from
+	  the bin so that a concurrent state change cannot interfere.
+	  Fixes #534331.
+
+2008-05-21 17:09:42 +0000  Felipe Contreras <felipe.contreras@nokia.com>
+
+	  docs/Makefile.am: Fix installing plugin documentation when gtk-doc is disabled.
+	  Original commit message from CVS:
+	  * docs/Makefile.am:
+	  Fix installing plugin documentation when gtk-doc is disabled.
+
+2008-05-21 17:01:16 +0000  Felipe Contreras <felipe.contreras@nokia.com>
+
+	  gst-libs/gst/rtsp/Makefile.am: Distribute, don't install md5.h
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  Distribute, don't install md5.h
+
+2008-05-21 16:47:58 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/tcp/gstmultifdsink.c: Use IPPROTO_IP instead of SOL_IP, works on more platforms.
+	  Original commit message from CVS:
+	  2008-05-21  Julien Moutte  <julien@fluendo.com>
+	  * gst/tcp/gstmultifdsink.c: (setup_dscp_client): Use IPPROTO_IP
+	  instead of SOL_IP, works on more platforms.
+	  * gst/typefind/gsttypefindfunctions.c: (aac_type_find): Fix printf
+	  arguments.
+
+2008-05-21 16:44:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Some debug and comment fixes.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_show_frame):
+	  Some debug and comment fixes.
+	  * tests/examples/dynamic/addstream.c: (main):
+	  Fix , to ;
+
+2008-05-21 16:36:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Don't use bad gst_element_get_pad().
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind):
+	  * gst/playback/decodetest.c: (new_decoded_pad_cb):
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+	  (try_to_link_1), (elem_is_dynamic), (close_link), (type_found),
+	  (cleanup_decodebin):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_init),
+	  (connect_element), (gst_decode_group_control_demuxer_pad):
+	  * gst/playback/gstplaybasebin.c: (queue_remove_probe),
+	  (queue_out_of_data), (gen_preroll_element), (preroll_unlinked),
+	  (mute_group_type):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_vis_blocked),
+	  (gst_play_bin_set_property), (handoff), (gen_video_element),
+	  (gen_text_element), (gen_audio_element), (gen_vis_element),
+	  (remove_sinks), (add_sink), (setup_sinks):
+	  * gst/playback/gstplaybin2.c: (pad_added_cb), (no_more_pads_cb):
+	  * gst/playback/gstplaysink.c: (gst_play_sink_get_video_sink),
+	  (gst_play_sink_get_audio_sink), (gst_play_sink_vis_unblocked),
+	  (gst_play_sink_vis_blocked), (gst_play_sink_set_vis_plugin),
+	  (gst_play_sink_get_vis_plugin), (gst_play_sink_set_mute),
+	  (gen_video_chain), (gen_text_chain), (gen_audio_chain),
+	  (gen_vis_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_set_font_desc), (gst_play_sink_get_font_desc),
+	  (gst_play_sink_request_pad):
+	  * gst/playback/gsturidecodebin.c: (type_found), (setup_source):
+	  * gst/playback/test.c: (gen_video_element), (gen_audio_element),
+	  (cb_newpad):
+	  * gst/playback/test6.c: (new_decoded_pad_cb):
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  * tests/check/elements/audiorate.c: (test_injector_chain),
+	  (do_perfect_stream_test):
+	  * tests/check/elements/ffmpegcolorspace.c: (GST_START_TEST):
+	  * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+	  * tests/check/elements/gnomevfssink.c:
+	  * tests/check/elements/textoverlay.c:
+	  (notgst_check_setup_src_pad2), (notgst_check_teardown_src_pad2):
+	  * tests/check/elements/videotestsrc.c: (GST_START_TEST):
+	  * tests/check/libs/cddabasesrc.c: (GST_START_TEST):
+	  * tests/check/pipelines/oggmux.c: (test_pipeline):
+	  * tests/check/pipelines/streamheader.c: (GST_START_TEST):
+	  * tests/check/pipelines/theoraenc.c: (GST_START_TEST):
+	  * tests/check/pipelines/vorbisenc.c: (GST_START_TEST):
+	  * tests/examples/seek/scrubby.c: (make_wav_pipeline):
+	  * tests/examples/seek/seek.c: (make_mod_pipeline),
+	  (make_dv_pipeline), (make_wav_pipeline), (make_flac_pipeline),
+	  (make_sid_pipeline), (make_parse_pipeline), (make_vorbis_pipeline),
+	  (make_theora_pipeline), (make_vorbis_theora_pipeline),
+	  (make_avi_msmpeg4v3_mp3_pipeline), (make_mp3_pipeline),
+	  (make_avi_pipeline), (make_mpeg_pipeline), (make_mpegnt_pipeline),
+	  (update_fill), (msg_buffering):
+	  Don't use bad gst_element_get_pad().
+
+2008-05-21 14:35:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-media.c: Fix wrong method name in docs. Fix calculation of strf fields for broken mulaw/alaw.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c:
+	  Fix wrong method name in docs. Fix calculation of strf fields for
+	  broken mulaw/alaw.
+	  * gst-libs/gst/riff/riff-read.c:
+	  Whitespace fix and removing double ';'.
+
+2008-05-21 11:52:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/design/part-playbin2.txt: Add some leftover doc.
+	  Original commit message from CVS:
+	  * docs/design/part-playbin2.txt:
+	  Add some leftover doc.
+
+2008-05-21 11:36:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstchannelmix.c: Fix copy & paste error in last commit.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c: (gst_channel_mix_fill_others):
+	  Fix copy & paste error in last commit.
+
+2008-05-21 11:30:58 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstchannelmix.c: Add support for mixing GST_AUDIO_CHANNEL_POSITION_SIDE_* from/to other channel posi...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c: (gst_channel_mix_fill_others):
+	  Add support for mixing GST_AUDIO_CHANNEL_POSITION_SIDE_* from/to
+	  other channel positions when source has SIDE channels and dest doesn't
+	  or the other way around.
+
+2008-05-21 11:29:25 +0000  Henrik Eriksson <henriken@axis.com>
+
+	  gst/tcp/gstmultifdsink.*: Add support for DSCP QOS. Fixes #469933.
+	  Original commit message from CVS:
+	  Patch by: Henrik Eriksson <henriken at axis dot com>
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init),
+	  (gst_multi_fd_sink_init), (setup_dscp_client), (setup_dscp),
+	  (gst_multi_fd_sink_add_full), (gst_multi_fd_sink_set_property),
+	  (gst_multi_fd_sink_get_property):
+	  * gst/tcp/gstmultifdsink.h:
+	  Add support for DSCP QOS. Fixes #469933.
+
+2008-05-21 07:46:02 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/elements/audioconvert.c: Add another test that checks if conversion between standard 1 and 2 channel layo...
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Add another test that checks if conversion between standard 1 and 2
+	  channel layouts with and without positions set is working.
+
+2008-05-21 07:39:56 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/multichannel.c: Allow non-standard 2 channel layouts.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions):
+	  Allow non-standard 2 channel layouts.
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Add some tests for converting and remapping non-standard 1 and 2
+	  channel layouts.
+
+2008-05-21 07:28:04 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstchannelmix.c: Prevent division by zero if the channel mix matrix contains only zeroes.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c:
+	  (gst_channel_mix_fill_normalize):
+	  Prevent division by zero if the channel mix matrix contains only
+	  zeroes.
+
+2008-05-21 06:45:22 +0000  Antoine Tremblay <hexa00@gmail.com>
+
+	  gst/gdp/gstgdppay.c: Close a buffer memory leak. Fixes bug #534071.
+	  Original commit message from CVS:
+	  Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain):
+	  Close a buffer memory leak. Fixes bug #534071.
+
+2008-05-21 06:39:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/rtsp/gstrtsptransport.h: Make the GstRTSPTransport struct members public as there are no setters/getters...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtsptransport.h:
+	  Make the GstRTSPTransport struct members public as there are no
+	  setters/getters and it's supposed to be changed directly.
+	  Fixes bug #533087.
+
+2008-05-21 05:48:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: Adder also doesn't support audio/x-raw-int with width!=depth so don't claim this on the pad tem...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Adder also doesn't support audio/x-raw-int with width!=depth so don't
+	  claim this on the pad template caps.
+
+2008-05-20 16:26:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: We can only use our optimal calibration if we prerolled before the latency exp...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_sync_latency):
+	  We can only use our optimal calibration if we prerolled before the
+	  latency expired.
+
+2008-05-20 14:35:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Require core CVS for GstBaseSrc buffer caps setting magic.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require core CVS for GstBaseSrc buffer caps setting magic.
+
+2008-05-20 12:26:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Fix logic in last commit.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_fixate_channels):
+	  Fix logic in last commit.
+
+2008-05-20 12:15:34 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Passthrough the channel positions if the number of output channels is the same as...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_fixate_channels):
+	  Passthrough the channel positions if the number of output channels is
+	  the same as the number of input channels, the input had a channel
+	  layout and downstream requests no special one. We did this already for
+	  > 2 channels but now it's also done for 1 channel. Fixes bug #533617.
+
+2008-05-20 11:13:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.*: Set the ICY caps on the srcpad from where they get picked up by the base class now and...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_init),
+	  (gst_gnome_vfs_src_finalize),
+	  (gst_gnome_vfs_src_received_headers_callback),
+	  (gst_gnome_vfs_src_create), (gst_gnome_vfs_src_stop):
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  Set the ICY caps on the srcpad from where they get picked up by the base
+	  class now and set on the outgoing buffers.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_buffer_new):
+	  BaseSrc now sets the caps on outgoing buffers automatically.
+
+2008-05-20 11:09:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Change the way in which the ringbuffer is started when dealing with a slaved c...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_resample_slaving),
+	  (gst_base_audio_sink_skew_slaving),
+	  (gst_base_audio_sink_sync_latency), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_async_play),
+	  (gst_base_audio_sink_change_state):
+	  Change the way in which the ringbuffer is started when dealing with a
+	  slaved clock and latency. We now sync to the clock until we reach
+	  upstream latency before starting the ringbuffer. This has the effect
+	  that we can accurately align the master and slave clocks and let the
+	  rate correction code take care of the initial drift or rounding errors
+	  instead of leaving them uncorrected with the old approach.
+
+2008-05-20 08:12:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Correctly set the default channel positions when converting to 8 channels.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_fixate_channels):
+	  Correctly set the default channel positions when converting to 8
+	  channels.
+
+2008-05-19 16:13:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Error out if we don't have the required version of core.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Error out if we don't have the required version of core.
+
+2008-05-19 15:59:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Use data scan helper in aac typefinder and stop scanning for headers when we've ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (aac_type_find):
+	  Use data scan helper in aac typefinder and stop scanning
+	  for headers when we've found a type. Also fix potential invalid
+	  memory access when calculating the frame length.
+
+2008-05-19 14:09:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Don't modify scan context when we return FALSE in ensure_data, so it's possible ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (data_scan_ctx_ensure_data),
+	  (mpeg_sys_is_valid_pack):
+	  Don't modify scan context when we return FALSE in ensure_data, so
+	  it's possible to continue scanning, and we don't end up with a NULL
+	  data pointer and a positive size, which might bite us the next time
+	  we're called. Small constification.
+
+2008-05-16 21:12:02 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: Adder doesn't support 24 bit samples so don't claim it supports them in the pad template caps.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Adder doesn't support 24 bit samples so don't claim it supports them
+	  in the pad template caps.
+
+2008-05-14 20:28:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Validate the RTP packet before further processing it. It's just too dangerous...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain):
+	  Validate the RTP packet before further processing it. It's just too
+	  dangerous to accept random packets and people are not forced to use a
+	  jitterbuffer or session manager to filter out the bad packets.
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  (gst_rtp_buffer_set_extension_data),
+	  (gst_rtp_buffer_get_payload_subbuffer):
+	  Small cleanups.
+	  When setting extension data in a buffer that is too small, we fail and
+	  we should not set the extension bit.
+	  Change GST_WARNINGS into g_warning because they really are
+	  programming errors.
+	  * tests/check/libs/rtp.c: (GST_START_TEST):
+	  Catch the g_warnings now in the unit tests and that fact that failing to
+	  set extension data left the extension bit untouched.
+
+2008-05-14 13:57:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioresample/gstaudioresample.c: Revert previous change which made basetransform handle buffer_alloc and which b...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init):
+	  Revert previous change which made basetransform handle buffer_alloc
+	  and which breaks things badly in the non-passthrough case since it
+	  returned buffers with a different (ie. sometimes smaller) size than
+	  the size requested.
+
+2008-05-14 13:43:12 +0000  Bernard B <b-gnome@largestprime.net>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Fix seqnum compare function for bordercase values and fix the docs again. Fixes #533...
+	  Original commit message from CVS:
+	  Patch by: Bernard B <b-gnome at largestprime dot net>
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_compare_seqnum):
+	  Fix seqnum compare function for bordercase values and fix the docs
+	  again. Fixes #533075.
+	  * tests/check/libs/rtp.c: (GST_START_TEST), (rtp_suite):
+	  Add a testcase for seqnum compare function.
+
+2008-05-14 10:58:52 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/adder/gstadder.c: Correctly declare the supported endianness on the pad templates and check for correct endiannes...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_setcaps),
+	  (gst_adder_class_init):
+	  Correctly declare the supported endianness on the pad templates
+	  and check for correct endianness in the set caps function. Adder
+	  only supports native endianness.
+	  Also use gst_element_class_set_details_simple().
+
+2008-05-14 09:12:10 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Better debug logging in port value handling. Merging separate port value loops into one.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Better debug logging in port value handling. Merging separate port
+	  value loops into one.
+
+2008-05-13 16:02:19 +0000  Hannes Bistry <hannesb@gmx.de>
+
+	  gst/tcp/: Fix regression in clientsrc because we did not add the fd to the poll set anymore. Fixes #532364.
+	  Original commit message from CVS:
+	  Patch by: Hannes Bistry <hannesb at gmx dot de>
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_start):
+	  * gst/tcp/gsttcpserversink.c:
+	  (gst_tcp_server_sink_handle_server_read),
+	  (gst_tcp_server_sink_handle_wait), (gst_tcp_server_sink_init_send):
+	  Fix regression in clientsrc because we did not add the fd to the poll
+	  set anymore. Fixes #532364.
+	  Do some cleanups here and there.
+
+2008-05-13 13:04:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/playback/: Use correct marshallers. GstCaps are a boxed type and no GObject subclass.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
+	  * gst/playback/gstplay-marshal.list:
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init):
+	  Use correct marshallers. GstCaps are a boxed type and no GObject
+	  subclass.
+
+2008-05-13 11:37:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstrtsp.def: Add gst_rtsp_connection_(set|clear)_auth_param() to the exported symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstrtsp.def:
+	  Add gst_rtsp_connection_(set|clear)_auth_param() to the exported
+	  symbols.
+
+2008-05-13 10:59:49 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  tests/check/elements/audioresample.c: Add unit test for the latest basetransform negotiation changes.
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons <sjoerd at luon dot net>
+	  * tests/check/elements/audioresample.c:
+	  (live_switch_alloc_only_48000), (live_switch_get_sink_caps),
+	  (live_switch_push), (GST_START_TEST):
+	  Add unit test for the latest basetransform negotiation changes.
+	  See bug #526768.
+
+2008-05-13 09:14:44 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/ffmpegcolorspace/imgconvert.c: Fix nv12<->nv21 conversion if stride is larger than width.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/imgconvert.c: (nv12_to_nv21):
+	  Fix nv12<->nv21 conversion if stride is larger than width.
+
+2008-05-13 07:28:21 +0000  j^ <j@oil21.org>
+
+	  ext/ogg/gstoggdemux.*: Parse presentation time from skeleton streams and use it as offset for the timestamps. Fixes b...
+	  Original commit message from CVS:
+	  Patch by: j^ <j at oil21 dot org>
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fishead),
+	  (gst_ogg_pad_parse_skeleton_fisbone):
+	  * ext/ogg/gstoggdemux.h:
+	  Parse presentation time from skeleton streams and use it as offset
+	  for the timestamps. Fixes bug #530068.
+
+2008-05-12 08:45:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Revert previous patch that attempted to more accurately calculate the initial ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_async_play):
+	  Revert previous patch that attempted to more accurately calculate the
+	  initial offset between master and slave clock. The best thing we can do
+	  in general is take the time of both clocks as the diff since we don't
+	  know when the actual preroll happened.
+
+2008-05-11 19:52:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/install-plugins.c: Fix docs: type and missing word.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  Fix docs: type and missing word.
+
+2008-05-10 20:16:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Don't do lots of 4-byte peeks, but use the 'new' data scan helper for this inste...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (h264_video_type_find):
+	  Don't do lots of 4-byte peeks, but use the 'new' data scan helper
+	  for this instead; don't check if we've found enough markers after
+	  each and every step, it's enough to do that only if we've actually
+	  found a new marker.
+	  Embed a G_UNLIKELY into the IS_MPEG_HEADER macro.
+
+2008-05-10 18:19:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Move scan helper thingy to the beginning of the file so we can use it in other t...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  (DATA_SCAN_CTX_CHUNK_SIZE), (DataScanCtx), (data_scan_ctx_advance),
+	  (data_scan_ctx_ensure_data), (GST_MPEGVID_TYPEFIND_TRY_SYNC),
+	  (mpeg_video_stream_type_find):
+	  Move scan helper thingy to the beginning of the file so we can use
+	  it in other typefind functions. Rename it to something more
+	  generic. Also improve handling of things towards the end of the
+	  typefind data: peek as much as we can if we know the size of the
+	  data, rather than just min_size.
+
+2008-05-09 21:42:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Document the GstTuner and GstColorBalance interfaces, and some other random API functions that needed it. 70% symbol ...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/interfaces/colorbalance.c:
+	  * gst-libs/gst/interfaces/colorbalance.h:
+	  * gst-libs/gst/interfaces/colorbalancechannel.c:
+	  * gst-libs/gst/interfaces/colorbalancechannel.h:
+	  * gst-libs/gst/interfaces/tuner.c:
+	  * gst-libs/gst/interfaces/tunerchannel.c:
+	  * gst-libs/gst/interfaces/tunerchannel.h:
+	  * gst-libs/gst/interfaces/tunernorm.c:
+	  * gst-libs/gst/interfaces/tunernorm.h:
+	  * gst-libs/gst/video/video.c:
+	  * gst-libs/gst/video/video.h:
+	  Document the GstTuner and GstColorBalance interfaces, and some
+	  other random API functions that needed it. 70% symbol coverage, woo.
+
+2008-05-09 16:38:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Choose to allocate one less segment but require one additional segment as latency.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (gst_audioringbuffer_acquire):
+	  Choose to allocate one less segment but require one additional segment
+	  as latency.
+	  * gst-libs/gst/audio/gstaudiosrc.c: (gst_audioringbuffer_acquire):
+	  No need to increment the number of segments in the source.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_get_time), (clock_convert_external),
+	  (gst_base_audio_sink_resample_slaving),
+	  (gst_base_audio_sink_skew_slaving),
+	  (gst_base_audio_sink_none_slaving), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_async_play):
+	  Remove adding latency when returning the internal time while subtracting
+	  it again when we use the value a little later.
+	  When calculating the end timestamp, we are making a rounding error
+	  with the current algorithm. Ensure that we don't accumulate these
+	  rounding errors when aligning samples by not resampling at all if we
+	  don't need to. Fixes #419351.
+	  Make the initial calibration of the clock slaving a little more
+	  predictable and accurate. Also handle the case where we don't do
+	  clock slaving.
+
+2008-05-09 08:34:52 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/ffmpegcolorspace/: Add conversions from/to NV12 and NV21 and conversions between those two formats. Fixes bug #53...
+	  Original commit message from CVS:
+	  Based on a patch by:
+	  Björn Benderius <bjoern dot benderius at axis dot com>
+	  * gst/ffmpegcolorspace/avcodec.h:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+	  (gst_ffmpegcsp_avpicture_fill):
+	  * gst/ffmpegcolorspace/imgconvert.c: (nv12_to_nv21):
+	  * gst/ffmpegcolorspace/imgconvert_template.h:
+	  Add conversions from/to NV12 and NV21 and conversions between those
+	  two formats. Fixes bug #532166.
+
+2008-05-08 17:35:44 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Abort the h264 typefinding as soon as _peek() doesn't return anything, which hap...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (h264_video_type_find):
+	  Abort the h264 typefinding as soon as _peek() doesn't return anything,
+	  which happens for example with files smaller than 128kb.
+
+2008-05-08 14:46:27 +0000  Wouter Cloetens <zombie@e2big.org>
+
+	  gst-libs/gst/rtsp/: Add Digest authorization support for RTSP connections. See #532065.
+	  Original commit message from CVS:
+	  Patch by: Wouter Cloetens <zombie at e2big dot org>
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_create), (md5_digest_to_hex_string),
+	  (auth_digest_compute_hex_urp), (auth_digest_compute_response),
+	  (add_auth_header), (gst_rtsp_connection_free),
+	  (gst_rtsp_connection_set_auth), (str_case_hash), (str_case_equal),
+	  (gst_rtsp_connection_set_auth_param),
+	  (gst_rtsp_connection_clear_auth_params):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Add Digest authorization support for RTSP connections. See #532065.
+	  * gst-libs/gst/rtsp/md5.c:
+	  * gst-libs/gst/rtsp/md5.h:
+	  Yeap, another md5 implementation until we can depend on a glib that has
+	  support for it.
+
+2008-05-08 06:20:42 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/audioresample/gstaudioresample.c: Let audioresample use the buffer allocation of basetransform instead of it's ow...
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons <sjoerd at luon dot net>
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init):
+	  Let audioresample use the buffer allocation of basetransform instead
+	  of it's own stuff.
+	  * tests/check/elements/audioresample.c: (alloc_only_48000),
+	  (GST_START_TEST), (audioresample_suite):
+	  Add unit test for the recent basetransform bugfix, where upstream
+	  changes caps to something that can't be passed through anymore.
+
+2008-05-07 19:50:27 +0000  Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
+
+	  win32/common/config.h.in: Don't define GST_FUNCTION, if GLib supports MSVC we'd much rather use the real thing than h...
+	  Original commit message from CVS:
+	  * win32/common/config.h.in:
+	  Don't define GST_FUNCTION, if GLib supports MSVC we'd much rather
+	  use the real thing than having "???" unconditionally.
+
+2008-05-07 15:47:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Report the latency with the new seglatency parameter.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_query):
+	  Report the latency with the new seglatency parameter.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_debug_spec_buff), (gst_ring_buffer_parse_caps),
+	  (gst_ring_buffer_acquire):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Add new field to the ringbufferspec to specify the expected latency
+	  between the underlying device read/write pointer, this is needed
+	  when writing sinks that sit a little closer to the hardware.
+	  Add some more docs for other fields.
+
+2008-05-07 10:38:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/: Add marshal.list, make it compile and add to cvsignore.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/.cvsignore:
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/app/gstapp-marshal.list:
+	  Add marshal.list, make it compile and add to cvsignore.
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_dispose),
+	  (gst_app_sink_stop):
+	  Small cleanups.
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_class_init),
+	  (gst_app_src_init), (gst_app_src_set_property),
+	  (gst_app_src_get_property), (gst_app_src_unlock),
+	  (gst_app_src_unlock_stop), (gst_app_src_start), (gst_app_src_stop),
+	  (gst_app_src_create), (gst_app_src_set_caps),
+	  (gst_app_src_get_caps), (gst_app_src_set_size),
+	  (gst_app_src_get_size), (gst_app_src_set_seekable),
+	  (gst_app_src_get_seekable), (gst_app_src_set_max_buffers),
+	  (gst_app_src_get_max_buffers), (gst_app_src_push_buffer),
+	  (gst_app_src_end_of_stream):
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Beat appsrc in shape, add signals and actions.
+	  Add some docs.
+	  Add properties for caps, size, seekability and max-buffers.
+	  Fix unlock/stop code.
+
+2008-05-06 12:35:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/volume/gstvolume.c: Return NOT_NEGOTIATED if we didn't set a process function yet for some reason instead of cras...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_transform_ip):
+	  Return NOT_NEGOTIATED if we didn't set a process function yet for some
+	  reason instead of crashing later. Might fix bug #509125.
+
+2008-05-06 12:12:16 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	  gst/audioconvert/: Add support for more than 8 channels and NONE channel layouts. For more than 8 channels no channel...
+	  Original commit message from CVS:
+	  Based on a patch by: Tim-Philipp Müller  <tim.muller at collabora co uk>
+	  * gst/audioconvert/audioconvert.c: (audio_convert_prepare_context):
+	  * gst/audioconvert/audioconvert.h:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_parse_caps),
+	  (structure_has_fixed_channel_positions),
+	  (gst_audio_convert_transform_caps):
+	  * gst/audioconvert/gstchannelmix.c: (gst_channel_mix_fill_matrix):
+	  Add support for more than 8 channels and NONE channel layouts. For
+	  more than 8 channels no channel conversion is supported yet, only
+	  format conversions are supported. Fixes bug #398033.
+	  * tests/check/elements/audioconvert.c: (verify_convert),
+	  (GST_START_TEST), (audioconvert_suite):
+	  Add some unit tests by Tim for checking the NONE channel layouts
+	  and more than 8 channels and add some more unit tests for channel
+	  conversions.
+
+2008-05-06 10:16:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: When autoplugging fails, set the element back to NULL before unreffing it.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (connect_pad):
+	  When autoplugging fails, set the element back to NULL before
+	  unreffing it.
+
+2008-05-06 09:59:43 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstaudio.def: Add gst_base_audio_src_[sg]et_slave_method() to the exported symbols.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  Add gst_base_audio_src_[sg]et_slave_method() to the exported
+	  symbols.
+
+2008-05-05 12:33:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/subparse/samiparse.c: Remove trailing, leading and double whitespaces.
+	  Original commit message from CVS:
+	  * gst/subparse/samiparse.c: (handle_start_sync),
+	  (end_sami_element), (characters_sami):
+	  Remove trailing, leading and double whitespaces.
+	  Correctly timestamp buffers and output the last buffer too.
+	  * tests/check/elements/subparse.c: (GST_START_TEST),
+	  (subparse_suite):
+	  Add a simple unit test for SAMI parsing.
+
+2008-05-05 11:14:48 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: Only output characters inside the "sync" elements. There could be other elements like "styl...
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian dot net>
+	  * gst/subparse/samiparse.c: (handle_start_sync),
+	  (start_sami_element), (end_sami_element), (characters_sami),
+	  (sami_context_reset):
+	  Only output characters inside the "sync" elements. There could be
+	  other elements like "style" that have some content but should
+	  not be printed. Fixes bug #467911.
+
+2008-05-05 10:27:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.*: Start some docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_class_init),
+	  (gst_app_sink_init), (gst_app_sink_set_property),
+	  (gst_app_sink_get_property), (gst_app_sink_unlock_start),
+	  (gst_app_sink_unlock_stop), (gst_app_sink_flush_unlocked),
+	  (gst_app_sink_start), (gst_app_sink_stop), (gst_app_sink_event),
+	  (gst_app_sink_preroll), (gst_app_sink_render),
+	  (gst_app_sink_set_caps), (gst_app_sink_set_drop),
+	  (gst_app_sink_get_drop):
+	  * gst-libs/gst/app/gstappsink.h:
+	  Start some docs.
+	  Add property to drop buffers when the queue is filled
+	  Fix unlocking and flushing when the queues are filled.
+
+2008-05-05 10:03:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/playback/: Allow setting -1 as current-audio to mute the current audio stream, similar to what is done for subtit...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (set_audio_mute),
+	  (set_active_source):
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+	  (playbin_set_audio_mute):
+	  Allow setting -1 as current-audio to mute the current audio stream,
+	  similar to what is done for subtitles. Fixes bug #342294.
+
+2008-05-05 07:41:03 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/pbutils/descriptions.c: It's SorensOn and not SorensEn.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (formats):
+	  It's SorensOn and not SorensEn.
+
+2008-05-04 15:23:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Fix description of video/x-flash-video.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (formats):
+	  Fix description of video/x-flash-video.
+
+2008-05-04 15:02:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Remove some unused code.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func):
+	  * gst-libs/gst/audio/gstaudiosrc.c: (audioringbuffer_thread_func):
+	  * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
+	  * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_get_fps_list):
+	  Remove some unused code.
+	  * gst/audioconvert/gstaudioquantize.c:
+	  (gst_audio_quantize_free_noise_shaping):
+	  Don't return before freeing the noise shaping history.
+
+2008-05-03 16:00:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/subparse.c: Add unit test for the tmplayer variant from bug #530962.
+	  Original commit message from CVS:
+	  * tests/check/elements/subparse.c: (do_test),
+	  (test_tmplayer_style3b), (subparse_suite):
+	  Add unit test for the tmplayer variant from bug #530962.
+
+2008-05-03 15:45:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/: Fix parsing of tmplayer subtitle variant where every single line contains text and there isn't an empt...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (handle_buffer),
+	  (gst_sub_parse_sink_event):
+	  * gst/subparse/tmplayerparse.c: (tmplayer_process_buffer),
+	  (tmplayer_parse_line):
+	  Fix parsing of tmplayer subtitle variant where every single line contains
+	  text and there isn't an empty line after each line to determine the
+	  duration (#530962). Improve EOS handling for tmplayer subtitles a bit by
+	  making sure that we push out the last line of text without a duration if
+	  there's still text left in the buffer at the end.
+
+2008-05-03 15:39:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Fix detection of discontinuities based on the buffer offset (doesn't work so well if no b...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (feed_textbuf):
+	  Fix detection of discontinuities based on the buffer offset (doesn't work
+	  so well if no buffer offset is set) and also check for the DISCONT buffer
+	  flag. This keeps the parser state from being reset after each buffer in
+	  the unit test.
+
+2008-05-03 12:09:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Further fine-tuning: don't absolutely require sequence or GOP headers but adjust...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg_video_stream_type_find):
+	  Further fine-tuning: don't absolutely require sequence or GOP headers
+	  (as introduced in the previous commit), but adjust the typefind
+	  probabilities returned accordingly if we don't see them. Also make sure
+	  picture header and first slice are somewhat close to each other (which
+	  is not perfect but still better than requiring a fixed offset or having
+	  no limit at all).
+
+2008-05-02 12:13:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Rename the setcaps/getcaps function internally to make it clear that they are c...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_init),
+	  (gst_basertppayload_sink_setcaps),
+	  (gst_basertppayload_sink_getcaps):
+	  Rename the setcaps/getcaps function internally to make it clear that
+	  they are called for the sink pad.
+
+2008-05-02 12:11:07 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Catch packet-lost events from the jitterbuffer and convert them into a vmetho...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_class_init),
+	  (gst_base_rtp_depayload_handle_sink_event), (create_segment_event),
+	  (gst_base_rtp_depayload_packet_lost),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Catch packet-lost events from the jitterbuffer and convert them into a
+	  vmethod call (lost-packet) so that depayloaders can do something smart.
+	  Also add a default packet-lost function that sends out a segment update
+	  to the decoders.
+
+2008-05-02 11:13:05 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/: Also include config.h when relying on defines from it. Fixes the build. Its been a please to serve :)
+	  Original commit message from CVS:
+	  * gst/playback/test4.c:
+	  * gst/playback/test5.c:
+	  * gst/playback/test6.c:
+	  * gst/playback/test7.c:
+	  Also include config.h when relying on defines from it. Fixes the
+	  build. Its been a please to serve :)
+
+2008-05-02 10:54:51 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* ChangeLog:
+	* gst/videotestsrc/videotestsrc.c:
+	  Add support for NV12 and NV21 in videotestsrc
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c (paint_setup_NV12),
+	  (paint_setup_NV21), (paint_hline_NV12_NV21):
+	  Add support for NV12 and NV21 in videotestsrc
+
+2008-05-02 10:02:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/videoscale/: Support 1x1 images as input and output as for example the BBC HQ new streams have 1x1 GIFs in the pl...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c:
+	  * gst/videoscale/vs_4tap.c: (vs_image_scale_4tap_Y):
+	  * gst/videoscale/vs_image.c: (vs_image_scale_nearest_RGBA),
+	  (vs_image_scale_linear_RGBA), (vs_image_scale_nearest_RGB),
+	  (vs_image_scale_linear_RGB), (vs_image_scale_nearest_YUYV),
+	  (vs_image_scale_linear_YUYV), (vs_image_scale_nearest_UYVY),
+	  (vs_image_scale_linear_UYVY), (vs_image_scale_nearest_Y),
+	  (vs_image_scale_linear_Y), (vs_image_scale_nearest_RGB565),
+	  (vs_image_scale_linear_RGB565), (vs_image_scale_nearest_RGB555),
+	  (vs_image_scale_linear_RGB555):
+	  Support 1x1 images as input and output as for example the BBC HQ new
+	  streams have 1x1 GIFs in the playlists for some reason.
+
+2008-05-01 19:11:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: If we can't activate one of the decoders we plugged in (such as, say, musepackdec) for s...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (free_pad_probe_for_element),
+	  (try_to_link_1):
+	  If we can't activate one of the decoders we plugged in (such as,
+	  say, musepackdec) for some reason (it might not support push mode,
+	  for example), remove any pad probes that close_pad_link() might
+	  have set up. This makes sure we later don't try to remove a probe
+	  for a pad that doesn't exist any longer, and avoids nast warnings
+	  and probably other things too.
+
+2008-04-30 20:54:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Rework mpeg video stream typefinding a bit more: make sure sequence,
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  (mpeg_video_stream_ctx_ensure_data), (mpeg_video_stream_type_find),
+	  (plugin_init):
+	  Rework mpeg video stream typefinding a bit more: make sure sequence,
+	  GOP, picture and slice headers appear in the order they should and
+	  that we've in fact at least had one of each; fix picture header
+	  detection; decouple picture and slice header check - don't assume
+	  they're at a fixed offset, there may be extra data in between. Also,
+	  announce varying degrees of probability depending on what we found
+	  exactly (multiple pictures, at least one picture, just sequence and
+	  GOP headers). Finally, in _ensure_data(), take into account that we
+	  might be typefinding smaller amounts of data, such as the first
+	  buffer of a stream, so fall back to the minimum size needed as long
+	  as that's available, instead of erroring out if there's less than
+	  2kB of data. Fixes #526173. Conveniently also doesn't recognise the
+	  fuzzed file from #399342 as valid.
+
+2008-04-30 17:06:45 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Cool kids don't divide by zero.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c:
+	  Cool kids don't divide by zero.
+	  Treat PAR of x:0 as 1:1.
+	  Fixes #530719.
+
+2008-04-30 14:37:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Refactor a bit: use context structure to track parsing offset and size of availa...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (MpegVideoStreamCtx),
+	  (mpeg_video_stream_ctx_advance), (mpeg_video_stream_ctx_ensure_data),
+	  (mpeg_video_stream_type_find):
+	  Refactor a bit: use context structure to track parsing offset and size of
+	  available data and make the code a bit clearer. Fixes bad memory access
+	  in #356937.
+
+2008-04-28 22:18:49 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/: Include stdlib.h and unistd.h only if the appropriate HAVE_*_H macro is defined.
+	  Original commit message from CVS:
+	  * gst/playback/test4.c:
+	  * gst/playback/test5.c:
+	  * gst/playback/test6.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  Include stdlib.h and unistd.h only if the appropriate HAVE_*_H macro
+	  is defined.
+
+2008-04-28 08:51:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.h: Clarify some docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Clarify some docs.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (slave_method_get_type),
+	  (gst_base_audio_src_class_init), (gst_base_audio_src_init),
+	  (gst_base_audio_src_set_slave_method),
+	  (gst_base_audio_src_get_slave_method),
+	  (gst_base_audio_src_set_property),
+	  (gst_base_audio_src_get_property), (gst_base_audio_src_create):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  Add property and methods for selecting the clock slave method in the
+	  source, like in the sink.
+	  We only implement "none" and "re-timestamp" for now.
+	  API: gst_base_audio_src_set_slave_method()
+	  API: gst_base_audio_src_get_slave_method()
+
+2008-04-25 18:18:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.*: Add more docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_class_init),
+	  (gst_app_sink_init), (gst_app_sink_set_property),
+	  (gst_app_sink_get_property), (gst_app_sink_event),
+	  (gst_app_sink_preroll), (gst_app_sink_render),
+	  (gst_app_sink_set_emit_signals), (gst_app_sink_get_emit_signals),
+	  (gst_app_sink_set_max_buffers), (gst_app_sink_get_max_buffers),
+	  (gst_app_sink_pull_buffer):
+	  * gst-libs/gst/app/gstappsink.h:
+	  Add more docs.
+	  Add signals for when preroll and render buffers are available.
+	  Add property to control signal emission.
+	  Add property to control the max queue size.
+
+2008-04-25 07:37:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Fix the docs about the seqnum compare function, it returns a difference.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  Fix the docs about the seqnum compare function, it returns a difference.
+
+2008-04-24 09:27:35 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/alsa/gstalsadeviceprobe.c: Don't return before freeing up the allocated structures.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsadeviceprobe.c:
+	  (gst_alsa_get_device_list): Don't return before freeing up
+	  the allocated structures.
+
+2008-04-24 08:19:35 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstplaybin.c: Remove obsolete streaminfo code and fix a leak. Fixes #529546
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c:
+	  Remove obsolete streaminfo code and fix a leak. Fixes #529546
+
+2008-04-23 13:50:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/ogg/gstoggdemux.c: Revert the event part, that should not go in.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c:
+	  Revert the event part, that should not go in.
+
+2008-04-23 13:45:29 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/ogg/gstoggdemux.c: Don't leak GstPluginFeatures when filtering.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c:
+	  Don't leak GstPluginFeatures when filtering.
+
+2008-04-23 08:58:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Add some logging for cases when grabbing the xv failed.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Add some logging for cases when grabbing the xv failed.
+
+2008-04-22 06:18:04 +0000  David Schleef <ds@schleef.org>
+
+	  ext/ogg/gstoggmux.c: Update Ogg/Dirac muxing.  Removes the weird "KW-DIRAC" bos packet.  Should conform to what we cu...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  Update Ogg/Dirac muxing.  Removes the weird "KW-DIRAC" bos
+	  packet.  Should conform to what we currently think is the
+	  final Ogg/Dirac muxing spec.
+
+2008-04-22 06:13:43 +0000  David Schleef <ds@schleef.org>
+
+	  sys/xvimage/xvimagesink.c: Fix typo that causes the overlay keying color to bright green on a 16-bit display.  Dark g...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Fix typo that causes the overlay keying color to bright green
+	  on a 16-bit display.  Dark grey good.  Bright green bad.
+
+2008-04-21 13:47:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/gnomevfs/gstgnomevfsuri.c: Add  FIXME comment about using uri-list for source and sink.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfsuri.c:
+	  Add  FIXME comment about using uri-list for source and sink.
+
+2008-04-20 11:42:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/ogg/gstogmparse.c: GST_TYPE_FRACTION contains gints so correctly cast gint64 arguments to vaargs functions to gin...
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_stream_header):
+	  GST_TYPE_FRACTION contains gints so correctly cast gint64 arguments to
+	  vaargs functions to gint. Otherwise the fractions will get 0 set
+	  instead of the correct value on big endian systems. Fixes bug #529018.
+
+2008-04-20 10:17:23 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gnomevfs/: Get the list of supported URI schemes in a threadsafe way and use the same list for the source and sink.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  (gst_gnome_vfs_sink_uri_get_protocols):
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  (gst_gnome_vfs_src_uri_get_protocols):
+	  * ext/gnomevfs/gstgnomevfsuri.c: (_internal_get_supported_uris),
+	  (gst_gnomevfs_get_supported_uris):
+	  Get the list of supported URI schemes in a threadsafe way and use the
+	  same list for the source and sink.
+
+2008-04-20 10:11:54 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Don't generate a new supported protocols list on each call but cache it. It's supposed to be static...
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (_internal_get_supported_protocols),
+	  (gst_gio_get_supported_protocols):
+	  Don't generate a new supported protocols list on each call but cache
+	  it. It's supposed to be static anyway, this way we only leak it once
+	  per process.
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
+	  (gst_gio_sink_class_init), (gst_gio_sink_finalize),
+	  (gst_gio_sink_set_property), (gst_gio_sink_get_property),
+	  (gst_gio_sink_start):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
+	  (gst_gio_src_class_init), (gst_gio_src_finalize),
+	  (gst_gio_src_set_property), (gst_gio_src_get_property),
+	  (gst_gio_src_start):
+	  * ext/gio/gstgiosrc.h:
+	  API: Add "file" properties where one can set a GFile as source/destination.
+	  Add locking to the properties and use gst_element_class_set_details_simple()
+	  instead of a static GstElementDetails struct.
+
+2008-04-19 20:06:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add "mpp" and "mp+" as possible extensions for MusePack files.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (musepack_type_find),
+	  (plugin_init):
+	  Add "mpp" and "mp+" as possible extensions for MusePack files.
+	  Add typefinding for MusePack StreamVersion 8 files and include the
+	  stream version in the caps.
+
+2008-04-19 16:33:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/rtp/gstrtppayloads.c: Use g_ascii_strcasecmp() instead of the deprecated g_strcasecmp().
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtppayloads.c:
+	  (gst_rtp_payload_info_for_name):
+	  Use g_ascii_strcasecmp() instead of the deprecated g_strcasecmp().
+
+2008-04-18 17:10:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Bump Gtk+ requirement to 2.12.0 for gtk_range_set_fill_level (NB: this only affects compilation of some...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump Gtk+ requirement to 2.12.0 for gtk_range_set_fill_level
+	  (NB: this only affects compilation of some of the examples).
+	  Remove some configure.ac cruft that's not needed any longer.
+
+2008-04-18 14:54:01 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/gdp/gstgdpdepay.c: Don't validate the payload if there isn't any.
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+	  Don't validate the payload if there isn't any.
+	  Fixes #525915
+
+2008-04-17 07:33:46 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Use g_atomic_int_set() instead of gst_atomic_int_set().
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_may_start):
+	  Use g_atomic_int_set() instead of gst_atomic_int_set().
+
+2008-04-17 07:29:28 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Return NULL instead of a gchar * array with one NULL element if we don't get any supported URI sche...
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
+	  Return NULL instead of a gchar * array with one NULL element if we
+	  don't get any supported URI schemes from GIO.
+
+2008-04-15 19:06:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Remove cpp style commented old code.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  Remove cpp style commented old code.
+
+2008-04-15 19:02:10 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstdecodebin2.c: Fix signal docs.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  Fix signal docs.
+
+2008-04-14 17:58:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Fix textoverlay unit test again by making the supposed default value for the wait-text pr...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init),
+	  (gst_text_overlay_init):
+	  Fix textoverlay unit test again by making the supposed default
+	  value for the wait-text property the actual default value.
+	  Also fix Since: tag for new property.
+
+2008-04-11 17:13:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/video/video.c: Add guards to these functions to ensure sane input values.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: (gst_video_format_new_caps),
+	  (gst_video_format_to_fourcc), (gst_video_format_get_row_stride),
+	  (gst_video_format_get_pixel_stride),
+	  (gst_video_format_get_component_width),
+	  (gst_video_format_get_component_height),
+	  (gst_video_format_get_component_offset), (gst_video_format_get_size),
+	  (gst_video_format_convert):
+	  Add guards to these functions to ensure sane input values.
+	  * tests/check/libs/video.c:
+	  Fix unit test not to create caps with width=0 and height=0.
+
+2008-04-11 01:25:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/design/draft-keyframe-force.txt: Fix typo.
+	  Original commit message from CVS:
+	  * docs/design/draft-keyframe-force.txt:
+	  Fix typo.
+	  * gst/playback/gstqueue2.c: (update_buffering),
+	  (gst_queue_handle_src_query):
+	  Set buffering mode in the messages.
+	  Set buffering percent in the query.
+	  * tests/examples/seek/seek.c: (update_fill), (msg_state_changed),
+	  (do_stream_buffering), (do_download_buffering), (msg_buffering):
+	  Do some more fancy things based on the buffering method in use.
+
+2008-04-09 21:42:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add basic download reports to seek using the new buffering API.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (update_fill), (set_update_fill),
+	  (play_cb), (pause_cb), (stop_cb), (msg_state_changed),
+	  (msg_buffering), (main):
+	  Add basic download reports to seek using the new buffering API.
+
+2008-04-09 21:40:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Include extra buffering stats in the buffering message.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (update_buffering),
+	  (gst_queue_close_temp_location_file), (gst_queue_handle_src_query),
+	  (gst_queue_src_checkgetrange_function):
+	  Include extra buffering stats in the buffering message.
+	  Implement BUFFERING query.
+	  * gst/playback/gsturidecodebin.c: (do_async_start),
+	  (do_async_done), (type_found), (setup_streaming), (setup_source),
+	  (gst_uri_decode_bin_change_state):
+	  Only add decodebin2 when the type is found in streaming mode.
+	  Make uridecodebin async to PAUSED even when we don't have decodebin2
+	  added yet.
+
+2008-04-09 08:38:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Filter cdda from the supported URI schemes. We can't support musicbrainz tags and everything else o...
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
+	  Filter cdda from the supported URI schemes. We can't support
+	  musicbrainz tags and everything else one expects from a cdda source
+	  with GIO. Fixes bug #526794.
+
+2008-04-07 22:37:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  Fix calculation of 'expected size' for YV12 buffers.
+	  Original commit message from CVS:
+	  2008-04-07  Jan Schmidt  <jan.schmidt@sun.com>
+	  * sys/xvimage/xvimagesink.c (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_buffer_alloc):
+	  Fix calculation of 'expected size' for YV12 buffers.
+	  Be a little more verbose in the debug output for buffer-alloc'ed
+	  buffers which turn out to have the wrong size.
+
+2008-04-07 22:26:50 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	  Fix calculation of 'expected size' for YV12 buffers.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_buffer_alloc):
+	  Fix calculation of 'expected size' for YV12 buffers.
+	  Be a little more verbose in the debug output for buffer-alloc'ed
+	  buffers which turn out to have the wrong size.
+
+2008-04-07 10:50:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Merge other changes from 0.10.19 release branch.
+	  Original commit message from CVS:
+	  * NEWS:
+	  * RELEASE:
+	  * gst-plugins-base.doap:
+	  Merge other changes from 0.10.19 release branch.
+
+2008-04-06 20:16:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: Work around missing bits of thread-safety on older GLibs some more to avoid assertions when starting up multipl...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init):
+	  * gst/playback/gstplayback.c: (plugin_init):
+	  * gst/volume/gstvolume.c: (plugin_init):
+	  Work around missing bits of thread-safety on older GLibs some
+	  more to avoid assertions when starting up multiple playbin
+	  objects concurrently (see #512382).
+
+2008-04-06 17:19:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/missing-plugins.c: Remove some more fields.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/missing-plugins.c: (copy_and_clean_caps):
+	  Remove some more fields.
+
+2008-04-06 08:56:07 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+	  configure.ac: Actually build dlls when cross-compiling with mingw32.
+	  Original commit message from CVS:
+	  Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+	  * configure.ac:
+	  Actually build dlls when cross-compiling with mingw32.
+	  Fixes bug #526247.
+
+2008-04-03 23:01:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Bump version to 0.10.19.1 after the unplanned 0.10.19 release.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump version to 0.10.19.1 after the unplanned 0.10.19 release.
+
+2008-04-03 16:10:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add statusbar.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (play_cb), (pause_cb), (stop_cb),
+	  (msg_buffering), (connect_bus_signals), (main):
+	  Add statusbar.
+	  Add buffering support with feedback in the statusbar.
+
+2008-04-03 15:58:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggmux.c: Fix sample pipeline description.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  Fix sample pipeline description.
+
+2008-04-03 14:58:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/plugins/: Add playbin, playbin2, decodebin, decodebin2, uridecodebin and oggmux
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  Add playbin, playbin2, decodebin, decodebin2, uridecodebin and oggmux
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Update introspection data.
+	  * ext/ogg/gstoggmux.c:
+	  Document oggmux.
+	  * gst/playback/gstdecodebin2.c:
+	  Don't use gtk-doc style comment start for private stuff, but make it
+	  formatted like this for consistency.
+
+2008-04-03 12:16:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Remove fakesink hack, we can now implement this more elegantly.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
+	  (gst_decode_bin_init), (gst_decode_bin_dispose),
+	  (gst_decode_bin_set_sink_caps), (gst_decode_bin_get_sink_caps),
+	  (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+	  (analyze_new_pad), (connect_pad), (expose_pad),
+	  (gst_decode_group_new), (gst_decode_group_control_demuxer_pad),
+	  (gst_decode_group_expose), (gst_decode_group_free),
+	  (do_async_start), (do_async_done), (gst_decode_bin_change_state):
+	  Remove fakesink hack, we can now implement this more elegantly.
+	  Added property to bypass typefinding.
+	  Removed underrun callback and demuxer pad probe, we now use the srcpad
+	  probe to expose groups.
+	  API::sink-caps property
+	  * gst/playback/gstplaybin2.c: (no_more_pads_cb):
+	  Guard against multiple emissions of the no_more_pads signal, which
+	  happens when we are dealing with chained oggs.
+	  * gst/playback/gsturidecodebin.c: (remove_decoders),
+	  (make_decoder), (type_found), (setup_streaming), (source_new_pad),
+	  (setup_source):
+	  For streams, use our own typefind element and plug our queue after it.
+	  We will need this to determine the type of buffering to use for the
+	  queue soon.
+
+2008-04-03 10:37:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Guard against over and underflows because of clock slaving.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_skew_slaving), (gst_base_audio_sink_render):
+	  Guard against over and underflows because of clock slaving.
+	  When we are using our own clock, still compensate for any calibrations
+	  that we might have done to our clock.
+
+2008-04-03 10:22:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Don't try to do anything fancy with the return code from pushing an event, it does not have e...
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_handle_type_packet),
+	  (theora_dec_chain):
+	  Don't try to do anything fancy with the return code from pushing an
+	  event, it does not have enough information to turn it into a
+	  GST_FLOW_ERROR.
+
+2008-04-03 10:19:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Add small debug line.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_reset),
+	  (gst_ogg_demux_chain_elem_pad):
+	  Add small debug line.
+	  Pass return code from the internal decoder instead of the too generic
+	  GST_FLOW_ERROR.
+
+2008-04-03 06:39:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/cdda/: Use GLib's base64 implementation instead of our own.
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/Makefile.am:
+	  * gst-libs/gst/cdda/base64.c:
+	  * gst-libs/gst/cdda/base64.h:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cddabasesrc_calculate_musicbrainz_discid):
+	  Use GLib's base64 implementation instead of our own.
+
+2008-04-02 15:41:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Refix oggdemux, we only have a problem if we failed to find a chain and we are not EOF.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_activate_chain),
+	  (gst_ogg_demux_read_chain):
+	  Refix oggdemux, we only have a problem if we failed to find a chain and
+	  we are not EOF.
+
+2008-04-02 15:07:01 +0000  Victor STINNER <victor.stinner@haypocalc.com>
+
+	  ext/ogg/gstoggdemux.c: When we fail to find a BOS page and we and up with no chain, error out properly instead of seg...
+	  Original commit message from CVS:
+	  Patch by: Victor STINNER <victor dot stinner at haypocalc dot com>
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_activate_chain),
+	  (gst_ogg_demux_read_chain):
+	  When we fail to find a BOS page and we and up with no chain, error out
+	  properly instead of segfaulting. Fixes #525665.
+
+2008-04-02 14:58:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: The new-pad-group sequence is add-pads, no-more-pads, add-pads, no-more-pads...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_activate_chain),
+	  (gst_ogg_demux_read_chain), (gst_ogg_demux_handle_page):
+	  The new-pad-group sequence is add-pads, no-more-pads, add-pads,
+	  no-more-pads...
+
+2008-04-02 11:08:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Update the estimated input data when we push out a buffer.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (update_out_rates),
+	  (gst_queue_open_temp_location_file),
+	  (gst_queue_close_temp_location_file), (gst_queue_handle_src_event),
+	  (gst_queue_handle_src_query), (gst_queue_set_property):
+	  Update the estimated input data when we push out a buffer.
+	  Add some debug info about the temp file.
+	  Only forward src events when we are not using a temp file.
+	  Don't block the duration query, we need to find something better.
+	  Don't leak the temp filename.
+
+2008-04-01 14:01:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Require GLib 2.12 and liboil 0.3.14.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require GLib 2.12 and liboil 0.3.14.
+	  * gst/volume/gstvolume.c: (volume_process_double):
+	  Unconditionally use liboil 0.3.14 function.
+
+2008-03-31 16:08:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: ms-gsm can have arbitrarty sample rates. See #481354.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  ms-gsm can have arbitrarty sample rates. See #481354.
+
+2008-03-28 16:22:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: MP4S is generic MPEG-4, not a microsoft variant.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  MP4S is generic MPEG-4, not a microsoft variant.
+
+2008-03-27 15:26:38 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/gdp/gstgdpdepay.c: Check the body CRC (if set) when depayloading.
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+	  Check the body CRC (if set) when depayloading.
+	  Fixes #522401.
+
+2008-03-24 17:45:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Fix Since: version for new property.
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init):
+	  Fix Since: version for new property.
+
+2008-03-24 16:40:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Don't error when poll_wait returns EAGAIN.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect), (gst_rtsp_connection_write),
+	  (gst_rtsp_connection_read_internal), (gst_rtsp_connection_poll):
+	  Don't error when poll_wait returns EAGAIN.
+
+2008-03-24 14:08:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: The queue is never filled when there are no buffers in the queue at all.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_is_filled):
+	  The queue is never filled when there are no buffers in the queue at all.
+	  Fixes #523993.
+
+2008-03-24 12:26:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Update some docs.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (init_group), (free_group), (gst_play_bin_init),
+	  (gst_play_bin_finalize), (gst_play_bin_set_uri),
+	  (gst_play_bin_set_suburi), (gst_play_bin_get_video_tags),
+	  (gst_play_bin_get_audio_tags), (gst_play_bin_get_text_tags),
+	  (gst_play_bin_set_current_video_stream),
+	  (gst_play_bin_set_current_audio_stream),
+	  (gst_play_bin_set_current_text_stream),
+	  (gst_play_bin_set_encoding), (gst_play_bin_set_property),
+	  (gst_play_bin_get_property), (pad_added_cb), (pad_removed_cb),
+	  (no_more_pads_cb), (perform_eos), (autoplug_select_cb),
+	  (activate_group), (deactivate_group), (setup_next_source),
+	  (save_current_group), (gst_play_bin_change_state):
+	  Update some docs.
+	  Add new locks and conds to protect pipeline creation and group
+	  switching.
+	  Implement the sub-uri property.
+	  Keep track of pending uridecodebin creation and configure the output
+	  pipeline after all streams are configured.
+	  Propagate subtitle encoding to the uridecodebins.
+	  Implement getting the video/audio/visualisation elements.
+	  Use input-selector for stream switching.
+	  If we are asked to do visualisation, prefer to autoplug raw sinks
+	  instead of sinks that accept encoded data.
+
+2008-03-24 12:15:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.*: Add methods to get audio/video/vis elements.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gst_play_sink_class_init),
+	  (gst_play_sink_init), (gst_play_sink_dispose),
+	  (gst_play_sink_set_video_sink), (gst_play_sink_get_video_sink),
+	  (gst_play_sink_set_audio_sink), (gst_play_sink_get_audio_sink),
+	  (gst_play_sink_vis_unblocked), (gst_play_sink_vis_blocked),
+	  (gst_play_sink_set_vis_plugin), (gst_play_sink_get_vis_plugin),
+	  (gst_play_sink_set_volume), (gst_play_sink_get_volume),
+	  (gst_play_sink_set_mute), (gen_video_chain), (gen_text_chain),
+	  (gen_audio_chain), (gen_vis_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_set_font_desc), (gst_play_sink_get_font_desc),
+	  (gst_play_sink_send_event_to_sink), (gst_play_sink_change_state):
+	  * gst/playback/gstplaysink.h:
+	  Add methods to get audio/video/vis elements.
+	  Add methods to set the font description for the overlay.
+	  Remove properties, we're using this element with its methods only.
+	  Add support for subtitles.
+	  Rearrange the locking a bit to not use the object lock for protecting
+	  the pipeline construction.
+	  Try to use the volume and mute property on the sink when its available.
+	  Implement the mute option with volume when the sink does not have a mute
+	  property.
+	  Only add volume element when the sink has no volume property.
+	  Only do visualisations with raw audio pads.
+
+2008-03-24 12:03:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/pango/gsttextoverlay.*: Add property to configure waiting for text on the textpad or not, with the default behavi...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init),
+	  (gst_text_overlay_init), (gst_text_overlay_set_property),
+	  (gst_text_overlay_get_property), (gst_text_overlay_src_event),
+	  (gst_text_overlay_text_event), (gst_text_overlay_video_event),
+	  (gst_text_overlay_text_chain), (gst_text_overlay_video_chain),
+	  (gst_text_overlay_change_state):
+	  * ext/pango/gsttextoverlay.h:
+	  Add property to configure waiting for text on the textpad or not, with
+	  the default behaviour being the old one (always wait for text before
+	  rendering the video). This default behaviour is usually not the best one
+	  because the text stream can very sparse and could require queueing a lot
+	  of video.
+	  Fix the flushing and EOS handing so that we don't mix up their meaning.
+
+2008-03-24 11:54:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gsturidecodebin.c: Add a readonly source property and notify.
+	  Original commit message from CVS:
+	  * gst/playback/gsturidecodebin.c:
+	  (gst_uri_decode_bin_autoplug_factories),
+	  (gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
+	  (gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_encoding),
+	  (gst_uri_decode_bin_set_property),
+	  (gst_uri_decode_bin_get_property), (no_more_pads_full),
+	  (new_decoded_pad_cb), (gen_source_element), (remove_decoders),
+	  (proxy_autoplug_factories_signal), (make_decoder),
+	  (source_new_pad), (setup_source):
+	  Add a readonly source property and notify.
+	  Add new lock for protecting the construction of the pipeline.
+	  Keep track of the decodebins we plugged.
+	  Correctly proxy the autoplug signal so that it actually continues.
+	  Proxy subtitle-encoding to the decodebins.
+
+2008-03-24 11:46:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Rearrange some buttons in playbin2 and make some other boxes insensitive when needed.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (audio_toggle_cb), (video_toggle_cb),
+	  (text_toggle_cb), (update_streams), (main):
+	  Rearrange some buttons in playbin2 and make some other boxes insensitive
+	  when needed.
+	  Add language codes to subtitle selection boxes when we gind the right
+	  tags for the streams.
+
+2008-03-24 11:36:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Protect caps property with the object lock.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_dispose),
+	  (gst_decode_bin_set_caps), (gst_decode_bin_get_caps),
+	  (gst_decode_bin_set_subs_encoding),
+	  (gst_decode_bin_get_subs_encoding),
+	  (gst_decode_bin_autoplug_factories), (connect_pad), (are_raw_caps),
+	  (deactivate_free_recursive):
+	  Protect caps property with the object lock.
+	  Protect encoding property with the object lock.
+	  Keep list of elements we added that have the subtitle-encoding property.
+	  Distribute the subtitle-encoding to all of the elements when it
+	  changes.
+
+2008-03-24 11:24:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Small debug improvement.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (gst_audioringbuffer_release):
+	  Small debug improvement.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  Fix bug in determining the sample start/stop position, we want to base
+	  this decision on the fact that we are going forwards or backwards, not
+	  slower or faster. This fixes some ugly resync warnings when playing at
+	  very slow speeds.
+
+2008-03-23 13:41:28 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Correctly set the supported URI schemes and don't leave some schemes in the middle or at the start ...
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
+	  Correctly set the supported URI schemes and don't leave
+	  some schemes in the middle or at the start at NULL.
+
+2008-03-23 13:12:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/gdpdepay.c: Make test compile without unused function/variable warnings on PPC.
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c:
+	  Make test compile without unused function/variable warnings on PPC.
+
+2008-03-22 15:00:53 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use static strings (i.e. all). This gives us less memory u...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_class_init):
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_class_init):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init):
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  (gst_cd_paranoia_src_class_init):
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_class_init):
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_class_init):
+	  * ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_class_init):
+	  * ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_class_init):
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init):
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init):
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init):
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init):
+	  * ext/pango/gsttextrender.c: (gst_text_render_class_init):
+	  * ext/theora/theoradec.c: (gst_theora_dec_class_init):
+	  * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
+	  * ext/theora/theoraparse.c: (gst_theora_parse_class_init):
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_class_init):
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  (gst_audio_filter_template_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init):
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_class_init):
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  (gst_mixer_track_class_init):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_class_init):
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_class_init):
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_class_init):
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_class_init):
+	  * gst/audioresample/gstaudioresample.c:
+	  (gst_audioresample_class_init):
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_class_init):
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (preroll_unlinked):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init):
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init):
+	  * gst/playback/gstplaysink.c: (gst_play_sink_class_init):
+	  * gst/playback/gstqueue2.c: (gst_queue_class_init):
+	  * gst/playback/gststreaminfo.c: (gst_stream_info_class_init):
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_class_init),
+	  (gst_stream_selector_class_init):
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init):
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init):
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init):
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init):
+	  * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init):
+	  * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init):
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_class_init):
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init):
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_class_init):
+	  * gst/volume/gstvolume.c: (gst_volume_class_init):
+	  * sys/v4l/gstv4lelement.c: (gst_v4lelement_class_init):
+	  * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+	  * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_class_init):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init):
+	  Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use
+	  static strings (i.e. all). This gives us less memory usage,
+	  fewer allocations and thus less memory defragmentation. Depend
+	  on core CVS for this. Fixes bug #523806.
+
+2008-03-22 14:13:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Filter http and https protocols. GIO/GVfs handles them but it's impossible to implement iradio/icec...
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
+	  Filter http and https protocols. GIO/GVfs handles them but it's
+	  impossible to implement iradio/icecast with it. Better use
+	  souphttpsrc or something else for this.
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_get_size):
+	  If getting the file informations by a query fails try it with the
+	  seek-to-end trick too.
+
+2008-03-21 16:46:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/volume/gstvolume.c: memset buffers to zero if we get a GAP buffer. We usually see a buffer as one unit so let's h...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (gst_volume_interface_supported),
+	  (gst_volume_base_init), (gst_volume_class_init),
+	  (volume_process_double), (volume_process_float),
+	  (volume_transform_ip), (plugin_init):
+	  memset buffers to zero if we get a GAP buffer. We usually see a
+	  buffer as one unit so let's handle it as one and don't care about
+	  volume changes while processing one buffer.
+	  Also clean up some stuff a bit.
+
+2008-03-21 15:58:44 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Make audioconvert GAP-aware by outputting silence buffers when the input has the ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
+	  (gst_audio_convert_create_silence_buffer),
+	  (gst_audio_convert_transform):
+	  Make audioconvert GAP-aware by outputting silence buffers when the
+	  input has the GAP flag set. This is up to 8x faster.
+	  Based on a patch by Stefan Kost. Fixes bug #517813.
+
+2008-03-21 15:54:54 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/volume/gstvolume.c: Use oil_scalarmultiply_f64_ns() for double processing when it's available at compile time.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_process_double):
+	  Use oil_scalarmultiply_f64_ns() for double processing when it's
+	  available at compile time.
+
+2008-03-21 13:27:47 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Fix lrint/lrintf checks to actually work. These functions are in libm on Linux at least so try to link ...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Fix lrint/lrintf checks to actually work. These functions are
+	  in libm on Linux at least so try to link to it.
+
+2008-03-21 00:36:20 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to development - 0.10.18.1
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to development - 0.10.18.1
+
+=== release 0.10.18 ===
+
+2008-03-21 00:26:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-queue2.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-uridecodebin.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* po/LINGUAS:
+	* win32/common/config.h:
+	  Release 0.10.18
+	  Original commit message from CVS:
+	  Release 0.10.18
+
+2008-03-21 00:16:37 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/lt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/sk.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2008-03-18 12:19:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  0.10.17.4 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * win32/common/config.h:
+	  0.10.17.4 pre-release
+
+2008-03-18 11:20:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Use GST_STR_NULL when trying to print strings that could be NULL because this might...
+	  Original commit message from CVS:
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_message_dump):
+	  Use GST_STR_NULL when trying to print strings that could be NULL because
+	  this might crash on some platforms. See #520808.
+
+2008-03-18 11:10:12 +0000  Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Generic Windows fixes that makes libgstrtsp work on Windows when coupled with ...
+	  Original commit message from CVS:
+	  Patch by: Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect), (gst_rtsp_connection_write),
+	  (read_line), (gst_rtsp_connection_read_internal):
+	  Generic Windows fixes that makes libgstrtsp work on Windows when
+	  coupled with the new GstPoll API. See #520808.
+
+2008-03-17 22:06:56 +0000  Milosz Derezynski <internalerror@gmail.com>
+
+	  ext/gio/gstgiobasesrc.c: If seeking to a new position succeeds don't simply return from create() without creating a b...
+	  Original commit message from CVS:
+	  Patch by: Milosz Derezynski <internalerror at gmail dot com>
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_create):
+	  If seeking to a new position succeeds don't simply return from
+	  create() without creating a buffer. Do this only in the case
+	  seeking to the new position fails. Fixes bug #523054.
+
+2008-03-17 10:32:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/video/video.c: Fix gst_video_format_parse_caps() for RGB caps with alpha channel (#522635).
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: (gst_video_format_parse_caps),
+	  (gst_video_format_from_rgba32_masks):
+	  Fix gst_video_format_parse_caps() for RGB caps with alpha channel
+	  (#522635).
+	  * tests/check/libs/video.c: (test_parse_caps_rgb), (video_suite):
+	  Add unit test for the RGB caps parsing and creation, checking for
+	  internal consistency of the new API and consistency of the API with
+	  the old GST_VIDEO_CAPS_* defines.
+
+2008-03-14 18:42:35 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videotestsrc/videotestsrc.c: Oops, revert last change because -base is in freeze.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c:  Oops, revert last change
+	  because -base is in freeze.
+
+2008-03-14 17:33:09 +0000  William M. Brack <wbrack@mmm.hk>
+
+	  gst/videotestsrc/videotestsrc.c: Fix Bayer pattern generation.
+	  Original commit message from CVS:
+	  Patch by: William M. Brack
+	  * gst/videotestsrc/videotestsrc.c: Fix Bayer pattern generation.
+
+2008-03-14 09:54:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gststreamselector.*: Revert change that caused regression until a real fix is found.
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_event),
+	  (gst_selector_pad_chain):
+	  * gst/playback/gststreamselector.h:
+	  Revert change that caused regression until a real fix is found.
+	  Fixes #522203.
+
+2008-03-12 12:39:13 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/audio/gstringbuffer.*: Rename recently added buffer types to make more sense.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_parse_caps):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Rename recently added buffer types to make more sense.
+	  * ext/alsa/gstalsasink.c: (alsasink_parse_spec),
+	  (gst_alsasink_write):
+	  Adapt for above API changes.
+	  Fixes bug #520523.
+
+2008-03-11 13:23:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  win32/common/libgstnetbuffer.def: Add new symbol gst_netaddress_equal. Fixes bug #521743.
+	  Original commit message from CVS:
+	  * win32/common/libgstnetbuffer.def:
+	  Add new symbol gst_netaddress_equal. Fixes bug #521743.
+
+2008-03-11 00:25:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  0.10.17.3 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * win32/common/config.h:
+	  0.10.17.3 pre-release
+
+2008-03-10 17:19:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Fix duration when no clock was provided. Fixes #520300.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Fix duration when no clock was provided. Fixes #520300.
+
+2008-03-07 18:17:44 +0000  Olivier Crete <tester@tester.ca>
+
+	  Add trivial function to compare GstNetAddress. See #520626.
+	  Original commit message from CVS:
+	  Patch by: Olivier Crete  <tester at tester ca>
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c: (gst_netaddress_equal):
+	  * gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  Add trivial function to compare GstNetAddress. See #520626.
+	  API: GstNetBuffer::gst_netaddress_equal
+
+2008-03-07 16:10:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.c: Update mode property docs, it's deprecated now.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  Update mode property docs, it's deprecated now.
+
+2008-03-07 15:48:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/: Remove GstPollMode from gstpoll constructor.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_create):
+	  * gst/tcp/gstmultifdsink.c: (gst_fdset_mode_get_type),
+	  (gst_multi_fd_sink_class_init), (gst_multi_fd_sink_start):
+	  * gst/tcp/gstmultifdsink.h:
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_start):
+	  * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_start):
+	  Remove GstPollMode from gstpoll constructor.
+
+2008-03-04 00:26:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  0.10.17.2 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * win32/common/config.h:
+	  0.10.17.2 pre-release
+
+2008-03-03 23:59:45 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/Makefile.am: GST_PLUGINS_ALL correctly lists subparse and tcp now, don't distclean them twice
+	  Original commit message from CVS:
+	  * gst/Makefile.am:
+	  GST_PLUGINS_ALL correctly lists subparse and tcp now, don't distclean
+	  them twice
+	  * win32/common/libgstinterfaces.def:
+	  * win32/common/libgstrtp.def:
+	  Add new API to the defs
+
+2008-03-03 16:11:50 +0000  Mersad Jelacic <mersad@axis.com>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.*: API: add gst_base_rtp_audio_payload_set_samplebits_options() to make it po...
+	  Original commit message from CVS:
+	  Patch by: Mersad Jelacic  <mersad at axis dot com>
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  API: add gst_base_rtp_audio_payload_set_samplebits_options() to make it
+	  possible to specify the sample size in bits. (#509637)
+
+2008-03-03 13:59:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/mixer.c: Add a few simple checks for the new message types.
+	  Original commit message from CVS:
+	  * tests/check/libs/mixer.c:
+	  Add a few simple checks for the new message types.
+
+2008-03-03 13:56:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add gst_mixer_options_list_changed(), gst_mixer_mixer_changed() and gst_mixer_message_parse_options_list_changed...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/interfaces/mixer.c: (gst_mixer_option_changed),
+	  (gst_mixer_options_list_changed), (gst_mixer_mixer_changed),
+	  (gst_mixer_message_get_type),
+	  (gst_mixer_message_parse_option_changed),
+	  (gst_mixer_message_parse_options_list_changed):
+	  * gst-libs/gst/interfaces/mixer.h: (GstMixerType),
+	  (GST_MIXER_MESSAGE_OPTION_CHANGED),
+	  (GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED),
+	  (GST_MIXER_MESSAGE_MIXER_CHANGED):
+	  API: add gst_mixer_options_list_changed(), gst_mixer_mixer_changed()
+	  and gst_mixer_message_parse_options_list_changed(). Fixes #519916.
+
+2008-03-03 13:50:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixeroptions.*: API: add GstMixerOptions::get_values vfunc (#519906)
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixeroptions.c: (gst_mixer_options_init),
+	  (gst_mixer_options_get_values):
+	  * gst-libs/gst/interfaces/mixeroptions.h:
+	  (GST_MIXER_OPTIONS_GET_CLASS), (GstMixerOptionsClass),
+	  (_GstMixerOptions), (_GstMixerOptionsClass):
+	  API: add GstMixerOptions::get_values vfunc (#519906)
+
+2008-03-03 12:01:15 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  configure.ac: Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which plug-ins are included/excluded. (#4...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which
+	  plug-ins are included/excluded. (#498222)
+
+2008-03-03 06:22:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for IMelody files, using audio/x-imelody.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Add typefinder for IMelody files, using audio/x-imelody.
+	  See bug #519516.
+
+2008-03-03 06:04:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Correct all relevant warnings found by the sparse semantic code analyzer. This include marking several symbols static...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_get_type):
+	  * ext/alsa/gstalsasink.c: (set_hwparams):
+	  * ext/alsa/gstalsasrc.c: (set_hwparams):
+	  * ext/gio/gstgio.c: (gst_gio_uri_handler_get_uri):
+	  * ext/ogg/gstoggmux.h:
+	  * ext/ogg/gstogmparse.c:
+	  * gst-libs/gst/audio/audio.c:
+	  * gst-libs/gst/fft/kiss_fft_f64.c: (kiss_fft_f64_alloc):
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  (gst_missing_uri_sink_message_new),
+	  (gst_missing_element_message_new),
+	  (gst_missing_decoder_message_new),
+	  (gst_missing_encoder_message_new):
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  (gst_rtcp_packet_bye_get_reason):
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/audioresample/gstaudioresample.c:
+	  * gst/ffmpegcolorspace/imgconvert.c:
+	  * gst/playback/test.c: (gen_video_element), (gen_audio_element):
+	  * gst/typefind/gsttypefindfunctions.c:
+	  * gst/videoscale/vs_4tap.c:
+	  * gst/videoscale/vs_4tap.h:
+	  * sys/v4l/gstv4lelement.c:
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_any_caps):
+	  * sys/v4l/v4l_calls.c:
+	  * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
+	  (gst_v4lsrc_try_capture):
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+	  (gst_ximagesink_ximage_new):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+	  (gst_xvimagesink_xvimage_new):
+	  * tests/check/elements/audioconvert.c:
+	  * tests/check/elements/audioresample.c:
+	  (fail_unless_perfect_stream):
+	  * tests/check/elements/audiotestsrc.c: (setup_audiotestsrc):
+	  * tests/check/elements/decodebin.c:
+	  * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+	  (setup_gdpdepay_streamheader):
+	  * tests/check/elements/gdppay.c: (setup_gdppay), (GST_START_TEST),
+	  (setup_gdppay_streamheader):
+	  * tests/check/elements/gnomevfssink.c: (setup_gnomevfssink):
+	  * tests/check/elements/multifdsink.c: (setup_multifdsink):
+	  * tests/check/elements/textoverlay.c:
+	  * tests/check/elements/videorate.c: (setup_videorate):
+	  * tests/check/elements/videotestsrc.c: (setup_videotestsrc):
+	  * tests/check/elements/volume.c: (setup_volume):
+	  * tests/check/elements/vorbisdec.c: (setup_vorbisdec):
+	  * tests/check/elements/vorbistag.c:
+	  * tests/check/generic/clock-selection.c:
+	  * tests/check/generic/states.c: (setup), (teardown):
+	  * tests/check/libs/cddabasesrc.c:
+	  * tests/check/libs/video.c:
+	  * tests/check/pipelines/gio.c:
+	  * tests/check/pipelines/oggmux.c:
+	  * tests/check/pipelines/simple-launch-lines.c:
+	  (simple_launch_lines_suite):
+	  * tests/check/pipelines/streamheader.c:
+	  * tests/check/pipelines/theoraenc.c:
+	  * tests/check/pipelines/vorbisdec.c:
+	  * tests/check/pipelines/vorbisenc.c:
+	  * tests/examples/seek/scrubby.c:
+	  * tests/examples/seek/seek.c: (query_positions_elems),
+	  (query_positions_pads):
+	  * tests/icles/stress-xoverlay.c: (myclock):
+	  Correct all relevant warnings found by the sparse semantic code
+	  analyzer. This include marking several symbols static, using
+	  NULL instead of 0 for pointers and using "foo (void)" instead
+	  of "foo ()" for declarations.
+	  * win32/common/libgstrtp.def:
+	  Add gst_rtp_buffer_set_extension_data to the symbol definition file.
+
+2008-03-02 18:43:15 +0000  José Alburquerque <jaalburqu@svn.gnome.org>
+
+	  gst/playback/gstplaybin2.c: Make the function signature of the _get_*_tags() functions match the signature of the vfu...
+	  Original commit message from CVS:
+	  Patch by: José Alburquerque <jaalburqu svn gnome org>
+	  * gst/playback/gstplaybin2.c:
+	  Make the function signature of the _get_*_tags() functions match
+	  the signature of the vfuncs they implement, ie. return a
+	  GstTagList rather than a GstStructure, which is more correct,
+	  even if one is typedef'ed to the other (#518940).
+
+2008-03-02 18:32:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Don't include unix headers unconditionally (fixes #518037).
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Don't include unix headers unconditionally (fixes #518037).
+
+2008-03-02 18:24:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/video.c: Add unit test that makes sure that the strides, offsets and sizes returned for the various ...
+	  Original commit message from CVS:
+	  * tests/check/libs/video.c: (paintinfo), (paintinfo_struct),
+	  (fourcc_list_struct), (fourcc_list), (fourcc_get_size),
+	  (paint_setup_I420), (paint_setup_YV12), (paint_setup_AYUV),
+	  (paint_setup_YUY2), (paint_setup_UYVY), (paint_setup_YVYU),
+	  (paint_setup_IYU2), (paint_setup_Y41B), (paint_setup_Y42B),
+	  (paint_setup_Y800), (paint_setup_YVU9), (paint_setup_YUV9),
+	  (gst_video_format_is_packed), (video_format_is_packed):
+	  Add unit test that makes sure that the strides, offsets and
+	  sizes returned for the various YUV formats by the new video API
+	  match the old reference implementation in videotestsrc.
+
+2008-03-02 18:20:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/video/video.*: API: add GST_VIDEO_FORMAT_Y41B and GST_VIDEO_FORMAT_Y42B.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: (gst_video_calculate_display_ratio),
+	  (gst_video_format_from_fourcc), (gst_video_format_to_fourcc),
+	  (gst_video_format_is_rgb), (gst_video_format_is_yuv),
+	  (gst_video_format_has_alpha), (gst_video_format_get_row_stride),
+	  (gst_video_format_get_pixel_stride),
+	  (gst_video_format_get_component_width),
+	  (gst_video_format_get_component_height),
+	  (gst_video_format_get_component_offset), (gst_video_format_get_size):
+	  * gst-libs/gst/video/video.h: (GST_VIDEO_FORMAT_Y41B),
+	  (GST_VIDEO_FORMAT_Y42B):
+	  API: add GST_VIDEO_FORMAT_Y41B and GST_VIDEO_FORMAT_Y42B.
+
+2008-03-02 18:07:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/video/video.c: YV12 is I420 with swapped components 1 and 2, so the offset of component 1 for I420 shoul...
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c: (gst_video_format_get_component_offset):
+	  YV12 is I420 with swapped components 1 and 2, so the offset of
+	  component 1 for I420 should be the offset for component 2 for YV12
+	  and vice versa.
+
+2008-02-29 21:48:00 +0000  Rene Stadler <mail@renestadler.de>
+
+	  sys/v4l/gstv4lelement.c: Add missing semicolon to fix indentation.
+	  Original commit message from CVS:
+	  * sys/v4l/gstv4lelement.c:
+	  Add missing semicolon to fix indentation.
+
+2008-02-29 18:44:36 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/alsa/gstalsa.c: Probe for IEC958 pcm to detect if we can do SPDIF output.
+	  Original commit message from CVS:
+	  2008-02-29  Julien Moutte  <julien@fluendo.com>
+	  * ext/alsa/gstalsa.c: (gst_alsa_open_iec958_pcm),
+	  (gst_alsa_probe_supported_formats): Probe for IEC958 pcm to
+	  detect
+	  if we can do SPDIF output.
+	  * ext/alsa/gstalsa.h:
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (alsasink_parse_spec),
+	  (gst_alsasink_prepare), (gst_alsasink_close),
+	  (gst_alsasink_write):
+	  * ext/alsa/gstalsasink.h: Initial support for SPDIF.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_parse_caps):
+	  * gst-libs/gst/audio/gstringbuffer.h: Add non linear buffer
+	  types
+	  to support AC3, EC3 and IEC958 buffers.
+
+2008-02-29 17:59:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixer.c: De-cruft and fix message type assertions (NULL is not a really valid mixer message t...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixer.c: (GST_MIXER_MESSAGE_HAS_TYPE),
+	  (gst_mixer_message_parse_mute_toggled),
+	  (gst_mixer_message_parse_record_toggled),
+	  (gst_mixer_message_parse_volume_changed),
+	  (gst_mixer_message_parse_option_changed):
+	  De-cruft and fix message type assertions (NULL is not a really
+	  valid mixer message type string).
+
+2008-02-29 14:52:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: When negotiating, actually start from a format that we can support instead of from the too ge...
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_vis_src_negotiate):
+	  When negotiating, actually start from a format that we can support
+	  instead of from the too generic template.
+
+2008-02-29 12:26:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Enable vis setting.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_set_property):
+	  Enable vis setting.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_init),
+	  (gst_play_sink_dispose), (gst_play_sink_vis_unblocked),
+	  (gst_play_sink_vis_blocked), (gst_play_sink_set_vis_plugin),
+	  (gen_vis_chain):
+	  Implement vis switching while playing.
+
+2008-02-29 00:04:57 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/riff/riff-media.c: Add Dirac mapping
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: Add Dirac mapping
+
+2008-02-28 10:54:14 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst/tcp/: Removed fdset and stress test, they are now known as GstPoll in core.
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst/tcp/Makefile.am:
+	  * gst/tcp/fdsetstress.c:
+	  * gst/tcp/gstfdset.c:
+	  * gst/tcp/gstfdset.h:
+	  Removed fdset and stress test, they are now known as GstPoll in
+	  core.
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init),
+	  (gst_multi_fd_sink_add_full), (gst_multi_fd_sink_remove),
+	  (gst_multi_fd_sink_clear), (gst_multi_fd_sink_remove_client_link),
+	  (gst_multi_fd_sink_handle_client_write),
+	  (gst_multi_fd_sink_queue_buffer),
+	  (gst_multi_fd_sink_handle_clients), (gst_multi_fd_sink_start),
+	  (gst_multi_fd_sink_stop):
+	  * gst/tcp/gstmultifdsink.h:
+	  * gst/tcp/gsttcp.c: (gst_tcp_socket_read), (gst_tcp_socket_close),
+	  (gst_tcp_read_buffer), (gst_tcp_gdp_read_buffer),
+	  (gst_tcp_gdp_read_caps):
+	  * gst/tcp/gsttcp.h:
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_init),
+	  (gst_tcp_client_sink_setcaps), (gst_tcp_client_sink_render),
+	  (gst_tcp_client_sink_start), (gst_tcp_client_sink_stop):
+	  * gst/tcp/gsttcpclientsink.h:
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_init),
+	  (gst_tcp_client_src_create), (gst_tcp_client_src_start),
+	  (gst_tcp_client_src_stop), (gst_tcp_client_src_unlock):
+	  * gst/tcp/gsttcpclientsrc.h:
+	  * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_handle_wait),
+	  (gst_tcp_server_sink_init_send), (gst_tcp_server_sink_close):
+	  * gst/tcp/gsttcpserversink.h:
+	  * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_init),
+	  (gst_tcp_server_src_create), (gst_tcp_server_src_start),
+	  (gst_tcp_server_src_stop), (gst_tcp_server_src_unlock):
+	  * gst/tcp/gsttcpserversrc.h:
+	  Port to GstPoll. See #505417.
+
+2008-02-28 09:54:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	* ChangeLog:
+	  Patch Changelog a bit to give credit and refer to the relevant bug.
+	  Original commit message from CVS:
+	  Patch Changelog a bit to give credit and refer to the
+	  relevant bug.
+
+2008-02-28 09:50:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.*: Use GstPoll for the rtsp connection.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_create), (gst_rtsp_connection_connect),
+	  (gst_rtsp_connection_write), (gst_rtsp_connection_read_internal),
+	  (gst_rtsp_connection_receive), (gst_rtsp_connection_close),
+	  (gst_rtsp_connection_free), (gst_rtsp_connection_poll),
+	  (gst_rtsp_connection_flush):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Use GstPoll for the rtsp connection.
+
+2008-02-27 12:19:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add combo box for visualisations, populate it with a factory list of all visualisation pl...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (vis_toggle_cb), (filter_features),
+	  (init_visualization_features), (vis_combo_cb), (shot_cb), (main):
+	  Add combo box for visualisations, populate it with a factory list
+	  of all visualisation plugins, configure vis plugin instance in
+	  playbin2.
+
+2008-02-27 10:55:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/libs/rtp.c: Add check for RTP buffer defaults, padding and marker bit API.
+	  Original commit message from CVS:
+	  * tests/check/libs/rtp.c: (GST_START_TEST):
+	  Add check for RTP buffer defaults, padding and marker bit API.
+
+2008-02-27 10:42:08 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/cdda/sha1.c: Use memcpy() instead of upcasting a byte array to long *. This fixes an unaligned memory ac...
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/sha1.c: (sha_transform):
+	  Use memcpy() instead of upcasting a byte array to long *. This
+	  fixes an unaligned memory access, resulting in SIGBUS on IA64.
+	  This should be ported to GCheckSum once we can use GLib 2.16.
+	  Partially fixes bug #500833.
+
+2008-02-27 10:23:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Push tag event after the newsegment event. Log the pointer of the buffer we're actual...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c: (gst_tag_demux_chain):
+	  Push tag event after the newsegment event. Log the pointer of
+	  the buffer we're actually going to push rather than the buffer
+	  we're feeding to _make_metadata_writable().
+
+2008-02-25 07:21:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Comment smoke typefinder for now. The smokedec plugin needs one frame per buffer...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Comment smoke typefinder for now. The smokedec plugin needs one
+	  frame per buffer but we have no parser yet, thus it simply crashes
+	  in most situations.
+
+2008-02-25 06:48:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for the smoke video codec. Copied from the jpeg plugin.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Add typefinder for the smoke video codec. Copied from the jpeg plugin.
+
+2008-02-25 06:29:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Add midi typefinder, copied from the timidity plugin.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mid_type_find),
+	  (plugin_init):
+	  Add midi typefinder, copied from the timidity plugin.
+
+2008-02-23 09:51:26 +0000  Tomasz Sałaciński <tsalacinski@gmail.com>
+
+	  Forward slashes at the beginning and end of a line also signify italics (Fixes: #518162).
+	  Original commit message from CVS:
+	  Based on patch by: Tomasz Sałaciński <tsalacinski gmail com>
+	  * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+	  * tests/check/elements/subparse.c: (test_microdvd_with_italics),
+	  (subparse_suite):
+	  Forward slashes at the beginning and end of a line also signify
+	  italics (Fixes: #518162).
+
+2008-02-22 06:38:08 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/gst-plugins-base.supp: Add a suppression for a cached value in GIO that wasn't moved while moving gio fro...
+	  Original commit message from CVS:
+	  * tests/check/gst-plugins-base.supp:
+	  Add a suppression for a cached value in GIO that wasn't moved
+	  while moving gio from -bad to -base.
+
+2008-02-22 05:27:24 +0000  Brian Cameron <brian.cameron@sun.com>
+
+	  configure.ac: Don't hardcode -Wall and -Werror for configure checks, this fails with non-GCC compilers. Fixes bug #51...
+	  Original commit message from CVS:
+	  Patch by: Brian Cameron <brian dot cameron at sun dot com>
+	  * configure.ac:
+	  Don't hardcode -Wall and -Werror for configure checks, this fails
+	  with non-GCC compilers. Fixes bug #517991.
+
+2008-02-21 08:05:10 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Mark buffers as GAP,if volume is 0.0 and fix the previous logic.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  Mark buffers as GAP,if volume is 0.0 and fix the previous logic.
+
+2008-02-20 15:37:36 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gnomevfs/gstgnomevfssink.c: Return FALSE when seeking for a new segment fails instead of silently ignoring the fa...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  (gst_gnome_vfs_sink_handle_event):
+	  Return FALSE when seeking for a new segment fails instead
+	  of silently ignoring the failure and appending every buffer
+	  that comes for the new segment.
+
+2008-02-20 11:52:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Recursively search the sink element for a last-frame property so that we can also find th...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (find_property),
+	  (gst_play_sink_find_property), (gen_video_chain),
+	  (gst_play_sink_reconfigure), (gst_play_sink_get_last_frame):
+	  Recursively search the sink element for a last-frame property so that we
+	  can also find the property in autovideosink and friends that don't
+	  always proxy the internal sink properties.
+
+2008-02-19 20:42:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: Fix confusing terminology in docs and code: structure fields are 'fields' and not ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME),
+	  (gst_audio_get_channel_positions), (gst_audio_set_channel_positions),
+	  (gst_audio_set_structure_channel_positions_list),
+	  (add_list_to_struct), (gst_audio_set_caps_channel_positions_list),
+	  (gst_audio_fixate_channel_positions):
+	  Fix confusing terminology in docs and code: structure fields are
+	  'fields' and not 'properties'.
+
+2008-02-19 20:36:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: Give more useful warning messages if one of the channel layout enums passed to us ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions), (add_list_to_struct):
+	  Give more useful warning messages if one of the channel
+	  layout enums passed to us is invalid and if the "channels"
+	  field in the caps has a GType we don't expect.
+
+2008-02-19 20:22:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: Fix typo in docs blurb.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  Fix typo in docs blurb.
+
+2008-02-19 16:16:55 +0000  Josep Torra Valles <josep@fluendo.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Increase the MPEG PS typefind lookup to fix typefinding on HD clips.
+	  Original commit message from CVS:
+	  2008-02-19  Julien Moutte  <julien@fluendo.com>
+	  Patch by: Josep Torra Valles <josep@fluendo.com>
+	  * gst/typefind/gsttypefindfunctions.c: Increase the MPEG PS
+	  typefind lookup to fix typefinding on HD clips.
+
+2008-02-19 15:50:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstscreenshot.*: Fix up copyright (I rewrote the GStreamer-0.10 code for this from scratch back in the d...
+	  Original commit message from CVS:
+	  * gst/playback/gstscreenshot.c:
+	  * gst/playback/gstscreenshot.h:
+	  Fix up copyright (I rewrote the GStreamer-0.10 code for
+	  this from scratch back in the days).
+
+2008-02-19 15:02:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Add screenshot conversion code from totem.
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstscreenshot.c: (feed_fakesrc), (save_result),
+	  (create_element), (gst_play_frame_conv_convert):
+	  * gst/playback/gstscreenshot.h:
+	  Add screenshot conversion code from totem.
+	  * gst/playback/gstplay-marshal.list:
+	  * gst/playback/gstplaybin2.c: (gst_play_marshal_BUFFER__BOXED),
+	  (gst_play_bin_class_init), (gst_play_bin_convert_frame),
+	  (gst_play_bin_get_property), (no_more_pads_cb), (activate_group):
+	  Implement frame property to get a color-unconverted snapshot.
+	  Implement convert-frame action signal to get a converted snapshot image.
+	  Configure connection speed in uridecodebin.
+	  Document some more properties.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_class_init),
+	  (gen_video_chain), (gen_audio_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_get_last_frame):
+	  * gst/playback/gstplaysink.h:
+	  Use last-buffer property of the video sink to get a video snapshot.
+	  * tests/examples/seek/seek.c: (shot_cb), (main):
+	  Add snapshot button for playbin2 and use the frame property to save the
+	  frame as a png in the current directory.
+
+2008-02-19 11:45:56 +0000  Josep Torra Valles <josep@fluendo.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinding support for h264 elementary streams.
+	  Original commit message from CVS:
+	  Patch by: Josep Torra Valles <josep at fluendo dot com>
+	  * gst/typefind/gsttypefindfunctions.c: (h264_video_type_find),
+	  (plugin_init):
+	  Add typefinding support for h264 elementary streams.
+	  Fixes bug #517420.
+
+2008-02-18 13:51:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Require CVS of core for new API in collectpads.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require CVS of core for new API in collectpads.
+	  * gst/adder/gstadder.c:
+	  Use new API to make adder sparse stream aware.
+
+2008-02-18 11:54:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Get the object data correct so that we can remove our channels correctly.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (pad_added_cb), (pad_removed_cb),
+	  (no_more_pads_cb):
+	  Get the object data correct so that we can remove our channels
+	  correctly.
+	  * gst/playback/gstplaysink.c: (gen_video_chain), (gen_audio_chain),
+	  (gen_vis_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_request_pad):
+	  Add option to disable async behaviour in the sinks when possible. This
+	  makes it possible to avoid an audio queue when dealing with
+	  visualisations.
+	  Add option to add a queue for the audio path.
+	  * tests/examples/seek/seek.c: (clear_streams), (update_streams),
+	  (main):
+	  Disable the vis checkbox to match the defaults of playbin2.
+	  Only get the stream info when we need to.
+
+2008-02-17 05:15:45 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Don't use async operations as they require a running main loop.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesink.c: (gst_gio_base_sink_stop),
+	  (gst_gio_base_sink_set_stream):
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_stop),
+	  (gst_gio_base_src_set_stream):
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_start):
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_start):
+	  Don't use async operations as they require a running main loop.
+	  This makes us block again when closing streams and unable
+	  to mount the enclosing volume of an URI if it isn't yet.
+
+2008-02-15 18:38:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaysink.c: Move tee in front of the audio and vis pipelines.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaysink.c: (gst_play_sink_set_mute),
+	  (gst_play_sink_get_mute), (gen_video_chain), (gen_audio_chain),
+	  (gen_vis_chain), (gst_play_sink_reconfigure),
+	  (gst_play_sink_request_pad):
+	  Move tee in front of the audio and vis pipelines.
+	  Add queue for audio for now.
+	  Add visualisation support.
+	  * tests/examples/seek/seek.c: (main):
+	  Visualisation is by default disabled.
+
+2008-02-15 11:58:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Improve debugging a bit.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesink.c: (close_stream_cb):
+	  * ext/gio/gstgiobasesrc.c: (close_stream_cb):
+	  Improve debugging a bit.
+	  * ext/gio/gstgiosink.c: (mount_cb), (gst_gio_sink_start):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.c: (mount_cb), (gst_gio_src_start):
+	  * ext/gio/gstgiosrc.h:
+	  Try to mount the enclosing volume of a GFile if it isn't mounted
+	  yet. This requires us to wait for an async operation to finish, done
+	  with an nested GMainLoop. Authentication is not supported yet, will
+	  come later.
+
+2008-02-14 18:24:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Add mute property.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (gst_play_bin_set_property), (gst_play_bin_get_property),
+	  (pad_added_cb), (pad_removed_cb), (no_more_pads_cb):
+	  * gst/playback/gstplaysink.c: (gst_play_sink_set_mute),
+	  (gst_play_sink_get_mute), (gen_audio_chain):
+	  * gst/playback/gstplaysink.h:
+	  Add mute property.
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_event),
+	  (gst_selector_pad_chain):
+	  * gst/playback/gststreamselector.h:
+	  Make sure we forward the event only once.
+	  * tests/examples/seek/seek.c: (stop_cb), (mute_toggle_cb), (main):
+	  Add and implement the mute button for playbin2.
+
+2008-02-13 14:34:55 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  ext/alsa/gstalsasink.c: Add some more debug info.
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (gst_alsasink_delay):
+	  Add some more debug info.
+	  Make sure we never return a negative delay. Fixes #516246.
+
+2008-02-12 20:09:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsasink.c: Revert patch that makes the sink hold the object lock when calling snd_pcm_delay(), since it ...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_delay):
+	  Revert patch that makes the sink hold the object lock when
+	  calling snd_pcm_delay(), since it breaks playback for me.
+
+2008-02-12 19:50:36 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Add some seek flags when changing rate.
+	  Original commit message from CVS:
+	  2008-02-12  Julien Moutte  <julien@fluendo.com>
+	  * tests/examples/seek/seek.c: (rate_spinbutton_changed_cb): Add
+	  some seek flags when changing rate.
+
+2008-02-12 14:51:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Fix potential leaks.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_handle_frame_based_buffer),
+	  (gst_base_rtp_audio_payload_handle_sample_based_buffer):
+	  Fix potential leaks.
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_chain):
+	  Fix leak when there is no function configured.
+
+2008-02-12 11:36:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  sys/v4l/v4lsrc_calls.c: Correctly chain up the finalize method.
+	  Original commit message from CVS:
+	  * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_buffer_class_init),
+	  (gst_v4lsrc_buffer_finalize):
+	  Correctly chain up the finalize method.
+
+2008-02-12 09:24:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Add documentation and example code for giostreamsink/giostreamsrc.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiostreamsink.c:
+	  * ext/gio/gstgiostreamsrc.c:
+	  Add documentation and example code for giostreamsink/giostreamsrc.
+	  * tests/check/pipelines/gio.c: (GST_START_TEST):
+	  Ask the GMemoryOutputStream for the data instead of assuming that
+	  the pointer to the data stayed the same. It could've been realloc'ed.
+
+2008-02-12 08:55:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Make the documentation of giosink/giosrc complete, large parts are based on the gnomevfssink/gnomevfssrc docs.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiosink.c:
+	  * ext/gio/gstgiosrc.c:
+	  Make the documentation of giosink/giosrc complete, large parts
+	  are based on the gnomevfssink/gnomevfssrc docs.
+
+2008-02-12 08:13:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  docs/plugins/: Add the GIO documentation again and while at that run make update.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gio.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playback.xml:
+	  * docs/plugins/inspect/plugin-queue2.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-uridecodebin.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  Add the GIO documentation again and while at that run make update.
+
+2008-02-11 20:23:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/: Don't use snd_pcm_sw_params_set_xfer_align() if we're compiling against libasound >= 1.0.16, since it's be...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.h: (GST_CHECK_ALSA_VERSION):
+	  * ext/alsa/gstalsasink.c: (set_swparams):
+	  * ext/alsa/gstalsasrc.c: (set_swparams), (gst_alsasrc_open):
+	  Don't use snd_pcm_sw_params_set_xfer_align() if we're compiling
+	  against libasound >= 1.0.16, since it's been deprecated in
+	  0.10.16, and alignment is always 1 then, apparently. (#512899)
+
+2008-02-11 18:31:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Handle case where we can't create the volume element a bit better (#514307).
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_audio_element):
+	  * gst/playback/gstplaysink.c: (gen_audio_chain):
+	  Handle case where we can't create the volume element a bit
+	  better (#514307).
+
+2008-02-11 18:02:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/: Add support for https protocol. Fixes #510229.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_check_get_range):
+	  * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+	  Add support for https protocol. Fixes #510229.
+
+2008-02-11 17:03:18 +0000  Alan Peevers <peeves@pacbell.net>
+
+	  ext/alsa/gstalsasink.c: Take appropriate lock when calling alsa methods.
+	  Original commit message from CVS:
+	  2008-02-11  Julien Moutte  <julien@fluendo.com>
+	  Patch by: Alan Peevers <peeves@pacbell.net>
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_delay): Take appropriate
+	  lock when calling alsa methods.
+
+2008-02-11 13:03:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Bump rank of jpeg and png typefinders, which will return maximum probability in ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Bump rank of jpeg and png typefinders, which will return maximum
+	  probability in the most common cases (thus short-circuiting more
+	  expensive typefinders like the mp3 one for these two quite common
+	  image types).
+
+2008-02-11 09:48:03 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/theora/theoraparse.c: Fix long description of the theora parser to be more verbose than just the type name.
+	  Original commit message from CVS:
+	  * ext/theora/theoraparse.c:
+	  Fix long description of the theora parser to be more verbose than just
+	  the type name.
+
+2008-02-11 06:47:50 +0000  Branko Čibej <brane@xbc.nu>
+
+	  sys/xvimage/xvimagesink.c: Fix build of xvimagesink if we don't have XShm, e.g. on Mac OS X.
+	  Original commit message from CVS:
+	  Patch by: Branko Čibej <brane at xbc dot nu>
+	  * sys/xvimage/xvimagesink.c:
+	  Fix build of xvimagesink if we don't have XShm, e.g. on Mac OS X.
+	  Fixes bug #515654.
+
+2008-02-09 10:41:36 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	  gst/playback/gstplaybasebin.c: Set is_dynamic as True if there are elements with both request and sometimes src pad t...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  Set is_dynamic as True if there are elements with both request
+	  and sometimes src pad templates instead of breaking out when it
+	  finds the first pad template that is a src.
+
+2008-02-08 18:17:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add some stream switching and volume gui for playbin2.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (stop_cb), (clear_streams),
+	  (update_streams), (video_combo_cb), (audio_combo_cb),
+	  (text_combo_cb), (volume_spinbutton_changed_cb), (main):
+	  Add some stream switching and volume gui for playbin2.
+
+2008-02-08 17:47:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplay-marshal.list: Added marshal for streamselector Tags.
+	  Original commit message from CVS:
+	  * gst/playback/gstplay-marshal.list:
+	  Added marshal for streamselector Tags.
+	  * gst/playback/gstplaybasebin.c: (set_active_source):
+	  Streamselector now selects pads based on the pad object instead of its
+	  name.
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (init_group), (gst_play_bin_init), (get_group), (get_tags),
+	  (gst_play_bin_get_video_tags), (gst_play_bin_get_audio_tags),
+	  (gst_play_bin_get_text_tags),
+	  (gst_play_bin_set_current_video_stream),
+	  (gst_play_bin_set_current_audio_stream),
+	  (gst_play_bin_set_current_text_stream),
+	  (gst_play_bin_set_property), (gst_play_bin_get_property),
+	  (pad_added_cb), (pad_removed_cb), (autoplug_select_cb):
+	  Remove option to mute streams with the current-a/v/t property, we have
+	  this functionality in the flags.
+	  Add signals to notify when the number of A/V/T channels changed.
+	  Add action signals to get tags for the A/V/T streams.
+	  Implement setting the current A/V/T stream.
+	  Rearrange some things to simplify stream selection.
+	  Implement volume.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_set_volume),
+	  (gst_play_sink_get_volume), (gst_play_sink_set_property),
+	  (gst_play_sink_get_property), (gen_video_chain), (gen_audio_chain),
+	  (activate_vis), (gst_play_sink_reconfigure):
+	  * gst/playback/gstplaysink.h:
+	  Add and implement volume setting methods.
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_class_init),
+	  (gst_selector_pad_finalize), (gst_selector_pad_get_property),
+	  (gst_selector_pad_event), (gst_stream_selector_class_init),
+	  (gst_stream_selector_init), (gst_stream_selector_finalize),
+	  (gst_stream_selector_set_property),
+	  (gst_stream_selector_get_property),
+	  (gst_stream_selector_get_linked_pad),
+	  (gst_stream_selector_request_new_pad):
+	  * gst/playback/gststreamselector.h:
+	  Add pad properties for tags and status of pads.
+	  Keep tags on pads.
+	  Make active pad selection based on pad object instead of name.
+
+2008-02-08 16:10:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Revert last change as we now check in gtk-doc.m4 for sed.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Revert last change as we now check in gtk-doc.m4 for sed.
+
+2008-02-08 14:54:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Find and subst SED when building the docs.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Find and subst SED when building the docs.
+
+2008-02-08 14:34:41 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Make sure bus signals are reconnected when pressing STOP and then PLAY again for a parse ...
+	  Original commit message from CVS:
+	  2008-02-08  Julien Moutte  <julien@fluendo.com>
+	  * tests/examples/seek/seek.c: (stop_cb), (connect_bus_signals),
+	  (main): Make sure bus signals are reconnected when pressing STOP
+	  and then PLAY again for a parse launch pipeline. Fix a ref leak
+	  on the bus.
+	  * win32/common/config.h: Updated.
+
+2008-02-08 00:57:21 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Make DISABLE_DEPRECATED defined *only* during CVS, not during pre-releases or releases.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Make DISABLE_DEPRECATED defined *only* during CVS, not during
+	  pre-releases or releases.
+
+2008-02-08 00:45:56 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Subst GIO_LDFLAGS to avoid undefined Makefile var error Zaheer is reporting
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/gio/Makefile.am:
+	  Subst GIO_LDFLAGS to avoid undefined Makefile var error Zaheer is
+	  reporting
+
+2008-02-07 23:40:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  docs/plugins/Makefile.am: Add the headers which need scanning for the GIO plugin. The rest of the docs still need mig...
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  Add the headers which need scanning for the GIO plugin. The rest of
+	  the docs still need migrating.
+
+2008-02-07 23:22:23 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Add gio in a few more places.
+	  Original commit message from CVS:
+	  * ext/Makefile.am:
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/.cvsignore:
+	  Add gio in a few more places.
+
+2008-02-07 23:18:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Move gio plugin from -bad and mark as experimental.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/Makefile.am:
+	  * tests/check/Makefile.am:
+	  Move gio plugin from -bad and mark as experimental.
+
+2008-02-07 22:39:00 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/: Comment out a couple of other things which break the build when
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixeroptions.c:
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  Comment out a couple of other things which break the build when
+	  GST_DISABLE_DEPRECATED isn't on but -Werror is.
+
+2008-02-07 18:28:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Fix pbutils header.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Fix pbutils header.
+
+2008-02-07 18:07:41 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  commit spec file update which includes all the split .pc files
+	  Original commit message from CVS:
+	  commit spec file update which includes all the split .pc files
+
+2008-02-07 12:17:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspmessage.c: Fix compiler warning.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (gst_rtsp_message_unset):
+	  Fix compiler warning.
+
+2008-02-07 11:00:45 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Clear the addrinfo struct using memset. Fixes #514937.
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (is_multicast_address):
+	  Clear the addrinfo struct using memset. Fixes #514937.
+
+2008-02-06 15:07:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstfdset.h: Remove unused field to same some memory.
+	  Original commit message from CVS:
+	  * gst/tcp/gstfdset.h:
+	  Remove unused field to same some memory.
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  Mark action signals as such.
+
+2008-02-06 13:35:58 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Increment granulepos for new-bitstream versions appropriately.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (_theora_granule_frame),
+	  (_inc_granulepos):
+	  Increment granulepos for new-bitstream versions appropriately.
+	  Fixes #514623.
+
+2008-02-04 11:51:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Remove obsolete stream_time reset after flushing seek, core does that automatically now.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (do_seek),
+	  (rate_spinbutton_changed_cb), (update_streams), (main):
+	  Remove obsolete stream_time reset after flushing seek, core does that
+	  automatically now.
+	  Improve accuracy of speed spinbutton.
+	  Only do playbin2 stuff when we actually use it.
+
+2008-02-02 17:29:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Revert previous change of the test environment's GST_PLUGIN_PATH.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Revert previous change of the test environment's GST_PLUGIN_PATH.
+	  The problem is not with the plugins, but with element factories
+	  and only occurs if elements are split out from existing plugins
+	  or if plugins change name (see #512740).
+
+2008-02-02 15:32:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Fix the tests environment's GST_PLUGIN_PATH: we want the directory with the core's plugins f...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Fix the tests environment's GST_PLUGIN_PATH: we want the directory
+	  with the core's plugins first and our local build directories last,
+	  since we might be building against an installed core, and that
+	  core's plugin directory may contain older or other versions of
+	  our own -base plugins, but we really do want to test our local
+	  ones (if there are multiple plugins or element factories with the
+	  same name, those inspected last will trump those read in earlier).
+	  Fixes #512740 for the most part.
+
+2008-02-02 07:13:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Use gmtime_r if available as gmtime is not MT-safe.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (add_date_header):
+	  Use gmtime_r if available as gmtime is not MT-safe.
+	  Fixes bug #511810.
+
+2008-02-02 06:52:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Cast glong to time_t as time_t might have a different type on other platforms,...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (add_date_header):
+	  Cast glong to time_t as time_t might have a different type on
+	  other platforms, like FreeBSD, and we get a compiler warning
+	  otherwise. Fixes bug #511825.
+
+2008-02-01 16:44:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Remove stream-info, we going for something easier.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (get_group), (get_n_pads), (gst_play_bin_get_property),
+	  (pad_added_cb), (no_more_pads_cb), (perform_eos),
+	  (autoplug_select_cb), (deactivate_group):
+	  Remove stream-info, we going for something easier.
+	  Refactor getting the current group.
+	  Implement getting the number of audio/video/text streams.
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_class_init), (gst_stream_selector_init),
+	  (gst_stream_selector_get_property),
+	  (gst_stream_selector_request_new_pad),
+	  (gst_stream_selector_release_pad):
+	  * gst/playback/gststreamselector.h:
+	  Add property for number of pads.
+	  * tests/examples/seek/seek.c: (set_scale), (update_flag),
+	  (vis_toggle_cb), (audio_toggle_cb), (video_toggle_cb),
+	  (text_toggle_cb), (update_streams), (msg_async_done),
+	  (msg_state_changed), (main):
+	  Block slider callback when updating the slider position.
+	  Add gui elements for controlling playbin2.
+	  Add callback for async_done that updates position/duration.
+
+2008-02-01 12:56:59 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/plugins/: First round of plugin docs cleansups.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.prerequisites:
+	  First round of plugin docs cleansups.
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Regenerate.
+	  * ext/ogg/Makefile.am:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggmux.h:
+	  Add header for oggmux. the c-file needs a doc blob still.
+
+2008-02-01 11:09:16 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  Add gst_rtp_buffer_set_extension_data()
+	  Original commit message from CVS:
+	  Patch by: Thijs Vermeir <thijsvermeir at gmail dot com>
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  (gst_rtp_buffer_set_extension_data):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  * tests/check/libs/rtp.c: (GST_START_TEST), (rtp_suite):
+	  Add gst_rtp_buffer_set_extension_data()
+	  Add a unit test for this addition. Fixes #511478.
+	  API: GstRTPBuffer:gst_rtp_buffer_set_extension_data()
+
+2008-01-31 17:18:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.c: Really clean up the queue instead of just unreffing all buffers in it.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_dispose):
+	  Really clean up the queue instead of just unreffing all buffers
+	  in it.
+	  * gst-libs/gst/app/gstappsrc.c: (gst_app_src_base_init),
+	  (gst_app_src_class_init), (gst_app_src_init),
+	  (gst_app_src_dispose), (gst_app_src_finalize):
+	  Fix dispose/finalize.
+
+2008-01-30 15:34:25 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Use async variants of the close stream functions to prevent blocking for a long time there and add some mor...
+	  Original commit message from CVS:
+	  * ext/gio/gstgiobasesink.c: (close_stream_cb),
+	  (gst_gio_base_sink_stop), (gst_gio_base_sink_event),
+	  (gst_gio_base_sink_render), (gst_gio_base_sink_set_stream):
+	  * ext/gio/gstgiobasesrc.c: (close_stream_cb),
+	  (gst_gio_base_src_stop), (gst_gio_base_src_create),
+	  (gst_gio_base_src_set_stream):
+	  Use async variants of the close stream functions to prevent blocking
+	  for a long time there and add some more sanity checks for a correct
+	  stream.
+
+2008-01-30 14:42:14 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.17 ===
+
+2008-01-30 14:19:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/config.h:
+	  Release 0.10.17
+	  Original commit message from CVS:
+	  Release 0.10.17
+
+2008-01-30 13:45:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/: Also remove the conditional registration of the signals that disappeared with the ABI chang...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixeroptions.c:
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  Also remove the conditional registration of the signals
+	  that disappeared with the ABI change in 0.10.14
+
+2008-01-30 12:28:59 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Revert patch to gstrtspconnection.c for brown paper bag release of -base. Re-o...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Revert patch to gstrtspconnection.c for brown paper bag
+	  release of -base. Re-opens: #511825
+
+2008-01-30 12:20:42 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/: Change the way these deprecated function pointers are removed so that the compiled ABI is u...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixeroptions.h:
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  Change the way these deprecated function pointers are removed
+	  so that the compiled ABI is unconditionally smaller. This
+	  sets in stone an ABI break that actually occurred when the
+	  things were deprecated in 0.10.14, which seems to be the best
+	  fix as the only known users are oss-mixer and sunaudio-mixer in
+	  gst-plugins-good.
+	  Fixes: #513018
+
+2008-01-30 12:19:02 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/: Change the way these deprecated function pointers are removed so that the compiled ABI is u...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixeroptions.h:
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  Change the way these deprecated function pointers are removed
+	  so that the compiled ABI is unconditionally smaller. This
+	  sets in stone an ABI break that actually occurred when the
+	  things were deprecated in 0.10.14, which seems to be the best
+	  fix as the only known users are oss-mixer and sunaudio-mixer in
+	  gst-plugins-good.
+
+2008-01-30 11:43:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  win32/common/libgstpbutils.def: Export the two new _get_type() functions which are needed by the python bindings.
+	  Original commit message from CVS:
+	  * win32/common/libgstpbutils.def:
+	  Export the two new _get_type() functions which are needed
+	  by the python bindings.
+
+2008-01-29 09:59:03 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Cast glong to time_t as time_t might have a different type on other platforms,...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (add_date_header):
+	  Cast glong to time_t as time_t might have a different type on
+	  other platforms, like FreeBSD, and we get a compiler warning
+	  otherwise. Fixes bug #511825.
+
+2008-01-29 09:47:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/gstaudiofilter.c: Initialize the GstRingerBuffer class to get it's debug category initialized. gst...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  (gst_audio_filter_class_init):
+	  Initialize the GstRingerBuffer class to get it's debug category
+	  initialized. gst_ring_buffer_parse_caps() uses the ringbuffer debug
+	  category and otherwise we get some g_critical(). Fixes bug #512334.
+
+2008-01-28 23:35:21 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.16 ===
+
+2008-01-28 23:31:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.interfaces:
+	* docs/plugins/gst-plugins-base-plugins.prerequisites:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/config.h:
+	  Release 0.10.16
+	  Original commit message from CVS:
+	  Release 0.10.16
+
+2008-01-28 22:15:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* common:
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2008-01-22 15:37:49 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Fix typos and wrong extension check. Fixes #511274.
+	  Original commit message from CVS:
+	  Patch by: Thijs Vermeir <thijsvermeir at gmail dot com>
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  (gst_rtp_buffer_get_extension_data):
+	  Fix typos and wrong extension check. Fixes #511274.
+
+2008-01-18 00:03:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  po/sk.po: Oops - add new sk.po mentioned in the LINGUAS I just committed
+	  Original commit message from CVS:
+	  * po/sk.po:
+	  Oops - add new sk.po mentioned in the LINGUAS I just committed
+
+2008-01-17 22:31:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  po/LINGUAS: Add ca translation to the disted list.
+	  Original commit message from CVS:
+	  * po/LINGUAS:
+	  Add ca translation to the disted list.
+	  * win32/vs6/libgstsdp.dsp:
+	  Convert line endings to CRLF
+
+2008-01-17 21:58:53 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/MANIFEST: Add win32/vs6/libgstrtsp.dsp to MANIFEST
+	  Original commit message from CVS:
+	  * win32/MANIFEST:
+	  Add win32/vs6/libgstrtsp.dsp to MANIFEST
+
+2008-01-16 05:40:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Update for API changes in GIO and require GIO 2.15.2 for this.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/check/pipelines/gio.c: (GST_START_TEST):
+	  Update for API changes in GIO and require GIO 2.15.2 for this.
+
+2008-01-14 22:20:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  win32/common/: Add new API declarations
+	  Original commit message from CVS:
+	  * win32/common/libgstsdp.def:
+	  * win32/common/libgstvideo.def:
+	  Add new API declarations
+
+2008-01-14 17:00:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/theora/: Take a 2nd stab at handling libtheora granulepos changes in the decoder and parser by inspecting the bit...
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/gsttheoraparse.h:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraparse.c:
+	  Take a 2nd stab at handling libtheora granulepos changes in the decoder
+	  and parser by inspecting the bitstream version of the incoming data.
+
+2008-01-14 13:11:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Provide one pkg-config file for every gst-plugins-base library.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * pkgconfig/Makefile.am:
+	  * pkgconfig/gstreamer-audio-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-audio.pc.in:
+	  * pkgconfig/gstreamer-cdda-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-cdda.pc.in:
+	  * pkgconfig/gstreamer-fft-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-fft.pc.in:
+	  * pkgconfig/gstreamer-floatcast-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-floatcast.pc.in:
+	  * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-interfaces.pc.in:
+	  * pkgconfig/gstreamer-netbuffer-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-netbuffer.pc.in:
+	  * pkgconfig/gstreamer-pbutils-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-pbutils.pc.in:
+	  * pkgconfig/gstreamer-riff-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-riff.pc.in:
+	  * pkgconfig/gstreamer-rtp-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-rtp.pc.in:
+	  * pkgconfig/gstreamer-rtsp-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-rtsp.pc.in:
+	  * pkgconfig/gstreamer-sdp-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-sdp.pc.in:
+	  * pkgconfig/gstreamer-tag-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-tag.pc.in:
+	  * pkgconfig/gstreamer-video-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-video.pc.in:
+	  Provide one pkg-config file for every gst-plugins-base library.
+	  This makes linking to those libraries much more intuitive and
+	  provides standard pkg-config behaviour for them. Fixes bug #499697.
+
+2008-01-14 01:19:34 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videoscale/vs_4tap.c: Fix valgrind error on 4tap scaling method.
+	  Original commit message from CVS:
+	  * gst/videoscale/vs_4tap.c:
+	  Fix valgrind error on 4tap scaling method.
+
+2008-01-13 21:40:45 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Include Winsock2.h for VS6 and use a different way initialize hints structure so it...
+	  Original commit message from CVS:
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (is_multicast_address):
+	  Include Winsock2.h for VS6 and use a different way initialize
+	  hints structure so it can build with VS6.
+	  * win32/MANIFEST:
+	  * win32/vs6/libgstsdp.dsp:
+	  * win32/common/libgstsdp.def:
+	  Add new files for libgstsdp.
+	  * win32/vs6/grammar.dsp:
+	  Copy pbutils-enumtypes* from win32/common to pbutils sources folder.
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstdecodebin.dsp:
+	  * win32/vs6/libgstdecodebin2.dsp:
+	  * win32/vs6/libgstplaybin.dsp:
+	  * win32/vs6/libgstvolume.dsp:
+	  Add new dependencies to the link list.
+
+2008-01-13 17:24:49 +0000  Julien Moutte <julien@moutte.net>
+
+	  win32/common/: Update/Add generated files in the win32 build directory.
+	  Original commit message from CVS:
+	  2008-01-13  Julien Moutte  <julien@fluendo.com>
+	  * win32/common/config.h:
+	  * win32/common/gstrtsp-enumtypes.c: (gst_rtsp_result_get_type),
+	  (gst_rtsp_event_get_type), (gst_rtsp_family_get_type),
+	  (gst_rtsp_state_get_type), (gst_rtsp_version_get_type),
+	  (gst_rtsp_method_get_type), (gst_rtsp_auth_method_get_type),
+	  (gst_rtsp_header_field_get_type),
+	  (gst_rtsp_status_code_get_type):
+	  * win32/common/interfaces-enumtypes.c:
+	  (gst_color_balance_type_get_type), (gst_mixer_type_get_type),
+	  (gst_mixer_message_type_get_type), (gst_mixer_flags_get_type),
+	  (gst_mixer_track_flags_get_type),
+	  (gst_tuner_channel_flags_get_type):
+	  * win32/common/multichannel-enumtypes.c:
+	  (gst_audio_channel_position_get_type):
+	  * win32/common/pbutils-enumtypes.c:
+	  (gst_install_plugins_return_get_type):
+	  * win32/common/pbutils-enumtypes.h: Update/Add generated files
+	  in the win32 build directory.
+
+2008-01-12 23:24:02 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/Makefile.am: Fix CFLAGS to also pull in the gstcheck cflags from AM_CFLAGS.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Fix CFLAGS to also pull in the gstcheck cflags from AM_CFLAGS.
+	  * tests/check/elements/audiorate.c: (do_perfect_stream_test):
+	  * tests/check/elements/playbin.c:
+	  * tests/check/libs/mixer.c: (test_element_interface_supported),
+	  (gst_implements_interface_init):
+	  * tests/check/libs/rtp.c: (GST_START_TEST):
+	  Fix various assignment type mismatches.
+
+2008-01-12 23:08:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Add test to see if hstrerror is available or if we need libresolv (Solaris) for it, then use it in libgstrtsp.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  Add test to see if hstrerror is available or if we need libresolv
+	  (Solaris) for it, then use it in libgstrtsp.
+
+2008-01-12 14:54:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/tag/Makefile.am: Fix include path order
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/Makefile.am:
+	  Fix include path order
+
+2008-01-11 17:15:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* gst-libs/gst/pbutils/.gitignore:
+	  Ignore more and make buildbot happy
+	  Original commit message from CVS:
+	  Ignore more and make buildbot happy
+
+2008-01-11 16:18:10 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/pbutils/install-plugins.*: Add GBoxed GType for GstInstallPluginsContext, this eases the wrapping for bi...
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  (gst_install_plugins_context_copy),
+	  (gst_install_plugins_context_get_type):
+	  * gst-libs/gst/pbutils/install-plugins.h:
+	  Add GBoxed GType for GstInstallPluginsContext, this eases the wrapping
+	  for bindings.
+
+2008-01-11 15:48:11 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Adapt for post-alpha meaning of granulepos, when we have a newer version of libtheora.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+	  (_theora_granule_frame), (_theora_granule_start_time),
+	  (theora_dec_sink_convert), (theora_dec_decode_buffer):
+	  Adapt for post-alpha meaning of granulepos, when we
+	  have a newer version of libtheora.
+	  * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+	  (theora_enc_get_ogg_packet_end_time), (theora_enc_sink_event),
+	  (theora_enc_is_discontinuous), (theora_enc_chain):
+	  Likewise.
+	  * tests/check/Makefile.am:
+	  Link libtheora into theoraenc test so we can check which version of
+	  libtheora we're testing against.
+	  * tests/check/pipelines/theoraenc.c: (check_libtheora),
+	  (check_buffer_granulepos),
+	  (check_buffer_granulepos_from_starttime), (GST_START_TEST),
+	  (theoraenc_suite):
+	  Adapt tests to check the values that are now defined for theora; make
+	  the tests backwards-adapt the passed values if we're running against an
+	  old libtheora.
+	  Fixes #497964
+
+2008-01-10 17:55:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/: Ref audio clock class from a thread-safe context to make sure however unlikely that may be in pr...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init):
+	  Ref audio clock class from a thread-safe context to make sure
+	  we're not bit by GObjects lack of thread-safety here (#349410),
+	  however unlikely that may be in practice.
+
+2008-01-10 12:22:46 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We...
+	  Original commit message from CVS:
+	  * autogen.sh:
+	  Add -Wno-portability to the automake parameters to stop warnings
+	  about GNU make extensions being used. We require GNU make in almost
+	  every Makefile anyway.
+	  * configure.ac:
+	  Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o
+	  at the same time is required for per target flags.
+
+2008-01-08 21:10:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Post an error message if we can't pull as many bytes as we need for the tag. This mak...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c: (gst_tag_demux_pull_start_tag):
+	  Post an error message if we can't pull as many bytes as we need
+	  for the tag. This makes sure the user gets to see a proper error
+	  message if a file with a partial ID3 tag is fed to decodebin, and
+	  not a 'no ID3 tag demuxer' error, which would be confusing
+	  (see #508138).
+
+2008-01-08 20:59:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Add description strings for ID3, APE, and ICY tags.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (formats):
+	  Add description strings for ID3, APE, and ICY tags.
+
+2008-01-08 20:48:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: Make sure we error out correctly if we can't activate one of the elements we've added.  ...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (try_to_link_1):
+	  Make sure we error out correctly if we can't activate one of
+	  the elements we've added.  Fixes #508138.
+
+2008-01-07 13:59:43 +0000  Bastien Nocera <hadess@hadess.net>
+
+	  ext/alsa/gstalsamixer.c: Use snd_mixer_selem_set_{playback|capture}_volume_all() if the volume is the same for all ch...
+	  Original commit message from CVS:
+	  Patch by: Bastien Nocera <hadess at hadess net>
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume),
+	  (check_if_volumes_are_the_same), (gst_alsa_mixer_set_volume):
+	  Use snd_mixer_selem_set_{playback|capture}_volume_all() if
+	  the volume is the same for all channels. This works around
+	  some problem in alsa that leaves us with inconsistent state
+	  for some reason (#486840).
+
+2008-01-07 13:19:50 +0000  Jerone Young <jerone@gmail.com>
+
+	  ext/alsa/gstalsamixer.c: If there's no mixer track by the name of 'Master' or 'Front', check if there's one called 'P...
+	  Original commit message from CVS:
+	  Patch by: Jerone Young <jerone at gmail com>
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_find_master_mixer):
+	  If there's no mixer track by the name of 'Master' or 'Front',
+	  check if there's one called 'PCM' before trying the generic
+	  fallback logic (fixes #506928, where we pick 'Mic' as master
+	  track for the AD1984 card in a Thinkpad T61/X61 laptop).
+
+2008-01-07 11:40:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplay-enum.*: Add enums for configuration flags.
+	  Original commit message from CVS:
+	  * gst/playback/gstplay-enum.c:
+	  (register_gst_autoplug_select_result),
+	  (gst_autoplug_select_result_get_type), (register_gst_play_flags),
+	  (gst_play_flags_get_type):
+	  * gst/playback/gstplay-enum.h:
+	  Add enums for configuration flags.
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (init_group), (gst_play_bin_init), (gst_play_bin_set_property),
+	  (gst_play_bin_get_property), (no_more_pads_cb),
+	  (autoplug_select_cb), (gst_play_bin_change_state):
+	  Merge mode with flags.
+	  Add more property getters/setters, defaults and docs.
+	  Add properties to get number of audio/video/text streams.
+	  Create sink object in _init so that we can always rely on it being
+	  there.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_init),
+	  (gen_video_chain), (gen_audio_chain), (gen_vis_chain),
+	  (activate_vis), (gst_play_sink_reconfigure),
+	  (gst_play_sink_set_flags), (gst_play_sink_get_flags),
+	  (gst_play_sink_change_state):
+	  * gst/playback/gstplaysink.h:
+	  Use flags to configure the sink pipelines.
+	  Add tee before audio pipeline so that we can use it for visualisations.
+	  Start working on integrating visualisations.
+	  Remove mode, we can do everything with the flags now.
+	  Add method to configue the sink pipeline.
+
+2008-01-06 16:36:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Update to GMemoryInputStream API changes in GLib SVN and require gio-2.0 >= 2.15.1 for this. Fixes bug #507584.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_get_size):
+	  * tests/check/pipelines/gio.c: (free_input), (GST_START_TEST):
+	  Update to GMemoryInputStream API changes in GLib SVN and require
+	  gio-2.0 >= 2.15.1 for this. Fixes bug #507584.
+	  We can also report the duration for every GSeekable, not only
+	  GFileInputStream and GMemoryInputStream.
+
+2008-01-06 14:39:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/theoraenc.c: Turn these functions into macros so we can see right away where the failure occured.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/theoraenc.c: (check_buffer_is_header),
+	  (check_buffer_timestamp), (check_buffer_duration):
+	  Turn these functions into macros so we can see right away
+	  where the failure occured.
+
+2008-01-05 22:25:05 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.c: Add debugging information to understand how X calculates the stride for XvImages.
+	  Original commit message from CVS:
+	  2008-01-05  Julien Moutte  <julien@fluendo.com>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new): Add
+	  debugging information to understand how X calculates the stride
+	  for XvImages.
+
+2008-01-03 20:33:58 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/volume/: Use GstAudioFilter as base class for the volume element instead of plain GstBaseTransform.
+	  Original commit message from CVS:
+	  * gst/volume/Makefile.am:
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (gst_volume_base_init), (gst_volume_class_init), (gst_volume_init),
+	  (volume_setup):
+	  * gst/volume/gstvolume.h:
+	  Use GstAudioFilter as base class for the volume element instead of
+	  plain GstBaseTransform.
+
+2008-01-03 07:17:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/gstaudiofilter.c: Don't set element details for the abstract GstAudioFilter class.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiofilter.c: (gst_audio_filter_get_type):
+	  Don't set element details for the abstract GstAudioFilter class.
+
+2008-01-02 12:09:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/gstaudiofilter.c: Implement get_unit_size() vmethod of GstBaseTransform.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  (gst_audio_filter_class_init), (gst_audio_filter_get_unit_size):
+	  Implement get_unit_size() vmethod of GstBaseTransform.
+
+2008-01-01 12:53:48 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/pbutils/: Use glib-enum generator to have a proper enum GType for
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/Makefile.am:
+	  * gst-libs/gst/pbutils/pbutils.h:
+	  Use glib-enum generator to have a proper enum GType for
+	  GST_TYPE_INSTALL_PLUGINS_RETURN so we can easily wrap it in bindings.
+
+2008-01-01 01:21:47 +0000  David Schleef <ds@schleef.org>
+
+	  tests/check/: Reenable theoraenc test, which fails on the buildbot but not locally.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/theoraenc.c:
+	  Reenable theoraenc test, which fails on the buildbot but
+	  not locally.
+
+2007-12-31 21:31:01 +0000  David Schleef <ds@schleef.org>
+
+	  docs/: Add *-undeclared.txt to fix buildbot.
+	  Original commit message from CVS:
+	  * docs/libs/.cvsignore:
+	  * docs/plugins/.cvsignore:
+	  Add *-undeclared.txt to fix buildbot.
+
+2007-12-31 20:45:28 +0000  David Schleef <ds@schleef.org>
+
+	  tests/check/Makefile.am: Second attempt at disabling theoraenc test long enough to get buildbot to compile -base.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Second attempt at disabling theoraenc test long enough to
+	  get buildbot to compile -base.
+
+2007-12-31 20:21:20 +0000  David Schleef <ds@schleef.org>
+
+	  tests/check/pipelines/theoraenc.c: Disable theoraenc test long enough to get the buildbot to compile a recent -base.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/theoraenc.c:
+	  Disable theoraenc test long enough to get the buildbot to
+	  compile a recent -base.
+
+2007-12-31 13:17:29 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Make sure we reset the slider value to 0.0 without racing against a possible g_idle that ...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (stop_cb):
+	  Make sure we reset the slider value to 0.0 without racing against a
+	  possible g_idle that sets it to something else.
+
+2007-12-31 00:32:53 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  sys/ximage/ximagesink.c: fix typo
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c:
+	  fix typo
+
+2007-12-30 19:21:16 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspdefs.*: Add Location header so that we can start implementing redirects.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspdefs.c: (rtsp_init_status):
+	  * gst-libs/gst/rtsp/gstrtspdefs.h:
+	  Add Location header so that we can start implementing redirects.
+	  See #506025.
+
+2007-12-29 20:55:39 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  gst/subparse/gstssaparse.c: combine if's
+	  Original commit message from CVS:
+	  * gst/subparse/gstssaparse.c:
+	  combine if's
+
+2007-12-29 19:23:59 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  gst/subparse/gstssaparse.c: remove duplicate log message
+	  Original commit message from CVS:
+	  * gst/subparse/gstssaparse.c:
+	  remove duplicate log message
+
+2007-12-29 17:29:17 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Update to latest API changes in GLib/GIO and require at least gio-2.0 2.15.0 for this.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/gio/gstgio.c:
+	  * ext/gio/gstgio.h:
+	  * ext/gio/gstgiobasesink.h:
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_get_size):
+	  * ext/gio/gstgiobasesrc.h:
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_start):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.h:
+	  * ext/gio/gstgiostreamsink.h:
+	  * ext/gio/gstgiostreamsrc.h:
+	  * tests/check/pipelines/gio.c:
+	  Update to latest API changes in GLib/GIO and require at least
+	  gio-2.0 2.15.0 for this.
+	  * ext/gio/Makefile.am:
+	  Add GST_PLUGIN_LDFLAGS to LDFLAGS.
+
+2007-12-29 16:23:23 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/libvisual/visual.c: Fix 'xyz may be used uninitialized' compiler warnings caused by broken g_assert_not_reached()...
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_chain):
+	  Fix 'xyz may be used uninitialized' compiler warnings caused
+	  by broken g_assert_not_reached() macro in GLib-2.15.x and don't
+	  abort() in any case but properly report the error.
+
+2007-12-28 09:00:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin2.c: Code cleanups.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (gst_play_bin_finalize), (gst_play_bin_set_uri),
+	  (gst_play_bin_set_suburi), (gst_play_bin_set_property),
+	  (gst_play_bin_get_property), (pad_removed_cb), (drained_cb),
+	  (autoplug_select_cb), (activate_group), (deactivate_group),
+	  (setup_next_source), (save_current_group),
+	  (gst_play_bin_change_state):
+	  Code cleanups.
+	  Remove next-uri, we can use the uri property just fine.
+	  Fix some crasher.
+	  Unref uridecodebin when switching.
+	  Fix going to READY.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_class_init),
+	  (gst_play_sink_init), (gst_play_sink_dispose),
+	  (gst_play_sink_finalize), (gst_play_sink_vis_unblocked),
+	  (gst_play_sink_vis_blocked), (gst_play_sink_set_video_sink),
+	  (gst_play_sink_set_audio_sink), (gst_play_sink_set_vis_plugin),
+	  (gst_play_sink_set_property), (gst_play_sink_get_property),
+	  (gen_video_chain), (gen_text_element), (gen_audio_chain),
+	  (gen_vis_element), (gst_play_sink_get_mode),
+	  (gst_play_sink_set_mode), (gst_play_sink_set_flags),
+	  (gst_play_sink_get_flags), (gst_play_sink_request_pad),
+	  (gst_play_sink_release_pad), (gst_play_sink_send_event_to_sink),
+	  (gst_play_sink_change_state):
+	  * gst/playback/gstplaysink.h:
+	  Add some locking to make things threadsafe.
+	  * gst/playback/test7.c: (about_to_finish_cb):
+	  Fix test.
+
+2007-12-22 12:06:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videoscale/gstvideoscale.c: Don't claim to be able to handle/transform caps that can't really be handled by the c...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_set_property),
+	  (gst_video_scale_get_property), (gst_video_scale_transform_caps),
+	  (gst_video_scale_transform):
+	  Don't claim to be able to handle/transform caps that can't really
+	  be handled by the currently selected scaling method (here: RGB or
+	  packed YUV with 4-tap method). Also add locking to method property.
+	  * tests/check/pipelines/simple-launch-lines.c: (setup_pipeline),
+	  (test_basetransform_based):
+	  Some test pipelines for the above (not entirely valgrind clean yet
+	  apparently).
+
+2007-12-22 05:19:00 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/video/video.*: Add additional RGBA and RGB-24 video formats.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/video.c:
+	  * gst-libs/gst/video/video.h:
+	  Add additional RGBA and RGB-24 video formats.
+
+2007-12-21 22:46:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Don't use GST_PLUGIN_DEFINE_STATIC, it's not portable and will be deprecated in the future (see #498924).
+	  Original commit message from CVS:
+	  * tests/check/elements/playbin.c: (test_sink_usage_video_only_stream),
+	  (test_suburi_error_unknowntype), (test_suburi_error_invalidfile),
+	  (test_suburi_error_wrongproto), (test_missing_primary_decoder):
+	  * tests/check/libs/cddabasesrc.c: (GST_START_TEST), (GST_START_TEST),
+	  (cddabasesrc_suite):
+	  Don't use GST_PLUGIN_DEFINE_STATIC, it's not portable and will be
+	  deprecated in the future (see #498924).
+
+2007-12-21 22:26:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreamselector.c: Don't leak event.
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_event):
+	  Don't leak event.
+
+2007-12-20 19:43:25 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  gst-libs/gst/riff/riff-read.c: Use GST_ROUND_UP_2 macro
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c:
+	  Use GST_ROUND_UP_2 macro
+
+2007-12-20 17:13:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/.cvsignore: Ignore more.
+	  Original commit message from CVS:
+	  * gst/playback/.cvsignore:
+	  Ignore more.
+
+2007-12-20 10:41:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Make switching off of subtitles work. To avoid all kind of problems with unlinking of the subtitle input, we just kee...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init):
+	  * gst/playback/gstplaybasebin.c: (set_subtitles_visible),
+	  (set_active_source):
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+	  (setup_sinks), (playbin_set_subtitles_visible):
+	  Make switching off of subtitles work. To avoid all kind of
+	  problems with unlinking of the subtitle input, we just keep
+	  the subtitle inputs linked as they are and tell textoverlay
+	  not to render them. Fixes #373011.
+	  Other subtitle switching issues (esp. when there are both
+	  external and in-stream subtitles) remain. They'll be solved
+	  in playbin2.
+
+2007-12-18 16:21:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gststreamselector.c: Init the pad segment too.
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_init):
+	  Init the pad segment too.
+
+2007-12-18 15:56:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Improve debug output.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func),
+	  (gst_audioringbuffer_open_device),
+	  (gst_audioringbuffer_close_device), (gst_audioringbuffer_acquire),
+	  (gst_audioringbuffer_release), (gst_audioringbuffer_start),
+	  (gst_audioringbuffer_pause), (gst_audioringbuffer_stop),
+	  (gst_audio_sink_create_ringbuffer):
+	  Improve debug output.
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_start),
+	  (gst_ring_buffer_pause), (gst_ring_buffer_delay):
+	  Prevent some functions from doing things and failing when the
+	  ringbuffer is not yet acquired.
+
+2007-12-18 15:32:49 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/interfaces/interfaces.h: Also remove interfaces.h from CVS as it is not needed anymore.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/interfaces.h:
+	  Also remove interfaces.h from CVS as it is not needed anymore.
+
+2007-12-18 15:20:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/interfaces/Makefile.am: interfaces.h is not used anymore so remove it from the build process.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  interfaces.h is not used anymore so remove it from the build
+	  process.
+
+2007-12-18 01:01:23 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videotestsrc/gstvideotestsrc.*: Add a "blink" pattern.  Turn on the pain.  Apologies.  It's useful for testing ve...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  Add a "blink" pattern.  Turn on the pain.  Apologies.  It's useful
+	  for testing vertical refresh synchronization.
+
+2007-12-18 00:13:26 +0000  David Schleef <ds@schleef.org>
+
+	  Add new GstVideFormat enum and write a bunch of helper functions based around it.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/video/video.c:
+	  * gst-libs/gst/video/video.h:
+	  Add new GstVideFormat enum and write a bunch of helper functions
+	  based around it.
+
+2007-12-17 23:41:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Makefile.am: Use new common/win32.mak.
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  Use new common/win32.mak.
+
+2007-12-17 16:44:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Add debug info.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create), (gst_base_audio_src_change_state):
+	  Add debug info.
+	  When going from PLAYING to PAUSED, pause the ringbuffer before calling
+	  the parent state change function, just like the audiosink, because the
+	  parent waits for the element to finish its processing before completing
+	  the state change. This makes going to PAUSED a lot snappier.
+	  When going from READY to PAUSED, don't allow the ringbuffer to start
+	  yet.
+
+2007-12-17 00:01:00 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Yet another fix for broken software that produce files with an empty blockalign field...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Yet another fix for broken software that produce files with an empty
+	  blockalign field. Instead of completely failing, make a second attempt
+	  at guessing the width/depth by looking at strf->size.
+
+2007-12-16 23:52:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/: Turn a few g_assert_not_reached() into g_return_val_if_reached() to avoid compiler warnings (#503930).
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_do_seek),
+	  (gst_cdda_base_src_handle_track_seek), (gst_cdda_base_src_create):
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  (gst_install_plugins_spawn_child), (gst_install_plugins_supported):
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  (gst_missing_plugin_message_get_installer_detail),
+	  (gst_missing_encoder_installer_detail_new):
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (gst_rtsp_connection_send):
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (gst_rtsp_message_unset):
+	  Turn a few g_assert_not_reached() into g_return_val_if_reached() to
+	  avoid compiler warnings (#503930).
+
+2007-12-16 23:46:16 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Be apologetic of software that use the 'jpeg' instead of 'JPEG' FOURCC for jpeg video...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Be apologetic of software that use the 'jpeg' instead of 'JPEG' FOURCC
+	  for jpeg video streams.
+	  Add the 'avc1'/'AVC1' fourcc mapping for h264, same software-comment as
+	  for the above modification.
+
+2007-12-15 17:27:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/xoverlay.c: More guards (we don't want klass to end up being NULL).
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/xoverlay.c: (gst_x_overlay_expose),
+	  (gst_x_overlay_handle_events):
+	  More guards (we don't want klass to end up being NULL).
+
+2007-12-15 03:40:34 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Use new gst_base_transform_set_gap_aware() function as volume correctly handles GST_BUFFER_FLAG_GAP. Require core 0.1...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/volume/gstvolume.c: (gst_volume_init):
+	  Use new gst_base_transform_set_gap_aware() function as volume
+	  correctly handles GST_BUFFER_FLAG_GAP. Require core 0.10.15.1
+	  for this.
+
+2007-12-14 19:06:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Don't go to READY on EOS as this avoids testing of seeking and restarting after EOS, use ...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (msg_segment_done), (main):
+	  Don't go to READY on EOS as this avoids testing of seeking and
+	  restarting after EOS, use the stop button when you want to READY.
+	  Don't try to do a flushing seek in segment-done, it does not make
+	  sense to use this for gapless playback and is not needed.
+
+2007-12-14 18:46:12 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Use separate timers for input and output rates.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_init), (gst_queue_finalize),
+	  (reset_rate_timer), (update_in_rates), (update_out_rates),
+	  (gst_queue_locked_enqueue), (gst_queue_locked_dequeue),
+	  (gst_queue_chain), (gst_queue_loop):
+	  Use separate timers for input and output rates.
+	  Pause measuring the output rate when we block for more data.
+	  See #503262.
+
+2007-12-14 16:23:06 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst/speexresample/Makefile.am:
+	  update spec file and add two missing files for disting
+	  Original commit message from CVS:
+	  update spec file and add two missing files for disting
+
+2007-12-14 09:24:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Pause the timer to measure the input rate when we block because the queue is filled. See #5...
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_chain):
+	  Pause the timer to measure the input rate when we block because the
+	  queue is filled. See #503262.
+
+2007-12-13 15:54:00 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Close control sockets. Fixes #503440.
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_free):
+	  Close control sockets. Fixes #503440.
+
+2007-12-13 12:31:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Expose the right pad in the right place with the right element.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (analyze_new_pad), (connect_pad):
+	  Expose the right pad in the right place with the right element.
+
+2007-12-13 11:40:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Add description for 'private' dts caps (who come up with that name?).
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (formats):
+	  Add description for 'private' dts caps (who come up with that name?).
+
+2007-12-13 10:10:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Makefile.am: Add check-exports target and run it with 'make check'.
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  Add check-exports target and run it with 'make check'.
+	  * configure.ac:
+	  Be stricter about what we export in our libraries: change regexp so that
+	  we only export _gst_foo(), but not __gst_foo().
+	  * gst-libs/gst/cdda/base64.h: (rfc822_binary):
+	  * gst-libs/gst/cdda/sha1.h: (sha_init), (sha_update), (sha_final):
+	  Change internal functions to __gst_foo so they dont' get exported.
+	  * win32/common/libgstaudio.def:
+	  Add missing symbols.
+
+2007-12-11 21:18:57 +0000  David Schleef <ds@schleef.org>
+
+	* ChangeLog:
+	  ChangeLog: remove conflict markers
+	  Original commit message from CVS:
+	  ChangeLog: remove conflict markers
+
+2007-12-11 17:14:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/: Use gst_tag_freeform_string_to_utf8() here, which also takes into account any character sets specified...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/Makefile.am:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_unicodify):
+	  Use gst_tag_freeform_string_to_utf8() here, which also takes
+	  into account any character sets specified by the user via
+	  environment variables.
+
+2007-12-10 15:21:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audioconvert/Makefile.am: Also link to libm.
+	  Original commit message from CVS:
+	  * gst/audioconvert/Makefile.am:
+	  Also link to libm.
+
+2007-12-10 15:13:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: No need for floating point operations here. avoids having to link against the math li...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  No need for floating point operations here. avoids having to link
+	  against the math library too.
+
+2007-12-10 11:16:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add one or two missing formats.  Generate ADPCM description dynamically depending on layout/format.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (formats),
+	  (format_info_get_desc):
+	  * tests/check/libs/pbutils.c: (GST_START_TEST), (caps_strings),
+	  (GST_START_TEST):
+	  Add one or two missing formats.  Generate ADPCM description
+	  dynamically depending on layout/format.
+
+2007-12-09 04:28:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+
+2007-12-08 18:38:39 +0000  Robin Stocker <robin.stocker@gmx.ch>
+
+	  gst/subparse/gstsubparse.c: Some .srt files start with chunk number 0 and not chunk number 1, recognise and accept th...
+	  Original commit message from CVS:
+	  Patch by: Robin Stocker <robin dot stocker at gmx dot ch>
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_data_format_autodetect):
+	  Some .srt files start with chunk number 0 and not chunk number 1,
+	  recognise and accept those as well (fixes #502497).
+	  * tests/check/elements/subparse.c: (srt_input), (srt_input0),
+	  (test_src):
+	  Add unit test for the above.
+
+2007-12-06 12:08:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplay-enum.*: Add missing files.
+	  Original commit message from CVS:
+	  * gst/playback/gstplay-enum.c:
+	  (register_gst_autoplug_select_result),
+	  (gst_autoplug_select_result_get_type):
+	  * gst/playback/gstplay-enum.h:
+	  Add missing files.
+
+2007-12-05 17:11:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/Makefile.am: Group decodebin2 and uridecodebin into the same plugin so that they can share the GEnumType.
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  Group decodebin2 and uridecodebin into the same plugin so that they
+	  can share the GEnumType.
+	  * gst/playback/gstdecodebin2.c: (_gst_array_accumulator),
+	  (_gst_select_accumulator), (gst_decode_bin_class_init),
+	  (gst_decode_bin_init), (gst_decode_bin_autoplug_sort),
+	  (gst_decode_bin_autoplug_select), (gst_decode_bin_autoplug_add),
+	  (analyze_new_pad), (connect_pad), (gst_decode_bin_plugin_init):
+	  Add signal to sort factories instead of the more awkward autoplug-select
+	  signal.
+	  Modify autoplug_select so that we can try, skip or expose the
+	  autopluggin of an element on a pad.
+	  * gst/playback/gstfactorylists.c: (compare_ranks),
+	  (decoders_filter), (sinks_filter), (gst_factory_list_is_type),
+	  (element_filter), (gst_factory_list_get_elements),
+	  (gst_factory_list_debug), (gst_factory_list_filter):
+	  * gst/playback/gstfactorylists.h:
+	  Simplify the API, allow getting elements based on mask.
+	  * gst/playback/gstplay-marshal.list:
+	  Add some more marshallers.
+	  * gst/playback/gstplaybin2.c: (init_group), (gst_play_bin_init),
+	  (gst_play_bin_finalize), (pad_removed_cb), (autoplug_factories_cb),
+	  (autoplug_select_cb), (activate_group):
+	  Add support for managing non-raw sinks by providing a custom element and
+	  sink list to decodebin2.
+	  Try to plug non-raw sinks when decodebin2 using autoplug-select of
+	  decodebin2.
+	  * gst/playback/gstplaysink.c: (gen_video_chain), (gen_audio_chain),
+	  (gst_play_sink_set_mode), (gst_play_sink_request_pad):
+	  * gst/playback/gstplaysink.h:
+	  Add support for raw and non-raw sinks.
+	  Add support to force sinks selected by playbin2.
+	  Don't plug raw converters for non-raw sinks.
+	  * gst/playback/gsturidecodebin.c: (_gst_array_accumulator),
+	  (_gst_select_accumulator), (gst_uri_decode_bin_class_init),
+	  (proxy_autoplug_select_signal), (gst_uri_decode_bin_plugin_init),
+	  (plugin_init):
+	  Use right accumulators.
+	  Proxy new signal.
+
+2007-12-03 13:47:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Use runnning time as the base time instead of the timestamp.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push):
+	  Use runnning time as the base time instead of the timestamp.
+	  Spotted by Saur on IRC.
+
+2007-12-03 11:32:30 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Add 'WVC1' codec mapping for Windows Media VC-1 video codec.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Add 'WVC1' codec mapping for Windows Media VC-1 video codec.
+
+2007-12-03 10:58:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: If we find a new serial number but it does not contain a BOS page, make sure we initialize the...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_bisect_forward_serialno),
+	  (gst_ogg_demux_read_chain):
+	  If we find a new serial number but it does not contain a BOS page, make
+	  sure we initialize the chain to NULL because else we will try to scan it
+	  and crash. Fixes #500763
+
+2007-11-30 17:47:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Refactor some common code to filter factories and check caps compat.
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstfactorylists.c: (compare_ranks), (print_feature),
+	  (get_feature_array), (decoders_filter), (sinks_filter),
+	  (gst_factory_list_get_decoders), (gst_factory_list_get_sinks),
+	  (gst_factory_list_filter):
+	  * gst/playback/gstfactorylists.h:
+	  Refactor some common code to filter factories and check caps compat.
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
+	  (gst_decode_bin_init), (gst_decode_bin_dispose),
+	  (gst_decode_bin_autoplug_continue),
+	  (gst_decode_bin_autoplug_factories),
+	  (gst_decode_bin_autoplug_select), (analyze_new_pad),
+	  (find_compatibles):
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
+	  (gst_play_bin_init), (gst_play_bin_finalize),
+	  (autoplug_factories_cb), (activate_group):
+	  * gst/playback/gstqueue2.c:
+	  * gst/playback/gsturidecodebin.c: (proxy_unknown_type_signal),
+	  (proxy_autoplug_continue_signal),
+	  (proxy_autoplug_factories_signal), (proxy_autoplug_select_signal),
+	  (proxy_drained_signal):
+	  Add some more debug info and use factor filtering code.
+
+2007-11-26 13:19:46 +0000  Julien Moutte <julien@moutte.net>
+
+	  configure.ac: Add QuickTime Wrapper plug-in.
+	  Original commit message from CVS:
+	  2007-11-26  Julien Moutte  <julien@fluendo.com>
+	  * configure.ac: Add QuickTime Wrapper plug-in.
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_push_drain), (gst_speex_resample_process): Fix
+	  build on Mac OS X Leopard. Incorrect printf format arguments.
+	  * sys/Makefile.am:
+	  * sys/qtwrapper/Makefile.am:
+	  * sys/qtwrapper/audiodecoders.c:
+	  (qtwrapper_audio_decoder_base_init),
+	  (qtwrapper_audio_decoder_class_init),
+	  (qtwrapper_audio_decoder_init),
+	  (clear_AudioStreamBasicDescription), (fill_indesc_mp3),
+	  (fill_indesc_aac), (fill_indesc_samr), (fill_indesc_generic),
+	  (make_samr_magic_cookie), (open_decoder),
+	  (qtwrapper_audio_decoder_sink_setcaps), (process_buffer_cb),
+	  (qtwrapper_audio_decoder_chain),
+	  (qtwrapper_audio_decoder_sink_event),
+	  (qtwrapper_audio_decoders_register):
+	  * sys/qtwrapper/codecmapping.c: (audio_caps_from_string),
+	  (fourcc_to_caps):
+	  * sys/qtwrapper/codecmapping.h:
+	  * sys/qtwrapper/imagedescription.c: (image_description_for_avc1),
+	  (image_description_for_mp4v), (image_description_from_stsd_buffer),
+	  (image_description_from_codec_data):
+	  * sys/qtwrapper/imagedescription.h:
+	  * sys/qtwrapper/qtutils.c: (get_name_info_from_component),
+	  (get_output_info_from_component), (dump_avcc_atom),
+	  (dump_image_description), (dump_codec_decompress_params),
+	  (addSInt32ToDictionary), (dump_cvpixel_buffer),
+	  (DestroyAudioBufferList), (AllocateAudioBufferList):
+	  * sys/qtwrapper/qtutils.h:
+	  * sys/qtwrapper/qtwrapper.c: (plugin_init):
+	  * sys/qtwrapper/qtwrapper.h:
+	  * sys/qtwrapper/videodecoders.c:
+	  (qtwrapper_video_decoder_base_init),
+	  (qtwrapper_video_decoder_class_init),
+	  (qtwrapper_video_decoder_init), (qtwrapper_video_decoder_finalize),
+	  (fill_image_description), (new_image_description), (close_decoder),
+	  (open_decoder), (qtwrapper_video_decoder_sink_setcaps),
+	  (decompressCb), (qtwrapper_video_decoder_chain),
+	  (qtwrapper_video_decoder_sink_event),
+	  (qtwrapper_video_decoders_register): Initial import of QuickTime
+	  wrapper jointly developped by Songbird authors (Pioneers of the
+	  Inevitable) and Fluendo.
+
+2007-11-26 12:25:55 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/: Add GAP-flag support.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  * gst/volume/gstvolume.c:
+	  * gst/volume/gstvolume.h:
+	  Add GAP-flag support.
+
+2007-11-26 08:43:25 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/: Update speex resampler to latest SVN. We're now down to only the changes noted in README again.
+	  Original commit message from CVS:
+	  * gst/speexresample/README:
+	  * gst/speexresample/arch.h:
+	  * gst/speexresample/resample.c: (resampler_basic_direct_single),
+	  (resampler_basic_direct_double),
+	  (resampler_basic_interpolate_single),
+	  (resampler_basic_interpolate_double),
+	  (speex_resampler_process_native), (speex_resampler_process_float),
+	  (speex_resampler_process_int),
+	  (speex_resampler_process_interleaved_float),
+	  (speex_resampler_process_interleaved_int),
+	  (speex_resampler_get_input_latency),
+	  (speex_resampler_get_output_latency):
+	  * gst/speexresample/speex_resampler.h:
+	  Update speex resampler to latest SVN. We're now down to only the
+	  changes noted in README again.
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_push_drain), (gst_speex_resample_query):
+	  Adjust to API changes.
+
+2007-11-24 15:02:01 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Increase the range of the rate selector as I would like to test QOS behavior at higher fo...
+	  Original commit message from CVS:
+	  2007-11-24  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (main): Increase the range of the
+	  rate selector as I would like to test QOS behavior at higher
+	  forward and reverse playback speed like say 64x.
+
+2007-11-23 10:21:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Only post the latency message if we have a resampler state already.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_update_state):
+	  Only post the latency message if we have a resampler state already.
+
+2007-11-23 10:21:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioresample/gstaudioresample.c: Implement latency query.
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init),
+	  (audioresample_query), (audioresample_query_type),
+	  (gst_audioresample_set_property):
+	  Implement latency query.
+
+2007-11-23 10:01:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Also post GST_MESSAGE_LATENCY if the latency changes.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_update_state):
+	  Also post GST_MESSAGE_LATENCY if the latency changes.
+
+2007-11-23 08:48:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/: Add functions to push the remaining samples and to get the latency of the resampler. These will g...
+	  Original commit message from CVS:
+	  * gst/speexresample/resample.c: (speex_resampler_get_latency),
+	  (speex_resampler_drain_float), (speex_resampler_drain_int),
+	  (speex_resampler_drain_interleaved_float),
+	  (speex_resampler_drain_interleaved_int):
+	  * gst/speexresample/speex_resampler.h:
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  Add functions to push the remaining samples and to get the latency
+	  of the resampler. These will get added to Speex SVN in this or a
+	  slightly changed form at some point too and should get merged then
+	  again.
+	  * gst/speexresample/gstspeexresample.c: (gst_speex_resample_init),
+	  (gst_speex_resample_init_state),
+	  (gst_speex_resample_transform_size),
+	  (gst_speex_resample_push_drain), (gst_speex_resample_event),
+	  (gst_speex_fix_output_buffer), (gst_speex_resample_process),
+	  (gst_speex_resample_query), (gst_speex_resample_query_type):
+	  Drop the prepending zeroes and output the remaining samples on EOS.
+	  Also properly implement the latency query for this. speexresample
+	  should be completely ready for production use now.
+
+2007-11-21 18:02:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Our EOS time contains the base_time, _wait_eos() expects a running_time so we ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain):
+	  Our EOS time contains the base_time, _wait_eos() expects a running_time
+	  so we have to subtract the base_time again before calling the function.
+	  This fixes an EOS regression where the base_time was added twice and EOS
+	  took longer and longer in certain situations.
+	  Fixes #498767.
+
+2007-11-21 13:04:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Expose methods for some object properties so that subclasses can more easily configure them.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: (slave_method_get_type),
+	  (gst_base_audio_sink_set_provide_clock),
+	  (gst_base_audio_sink_get_provide_clock),
+	  (gst_base_audio_sink_set_slave_method),
+	  (gst_base_audio_sink_get_slave_method),
+	  (gst_base_audio_sink_set_property),
+	  (gst_base_audio_sink_get_property), (gst_base_audio_sink_drain),
+	  (gst_base_audio_sink_none_slaving),
+	  (gst_base_audio_sink_handle_slaving):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Expose methods for some object properties so that subclasses can more
+	  easily configure them.
+	  Added slave method none, that completely disables slaving to the
+	  internal clock.
+	  API: gst_base_audio_sink_set_provide_clock()
+	  API: gst_base_audio_sink_get_provide_clock()
+	  API: gst_base_audio_sink_set_slave_method()
+	  API: gst_base_audio_sink_get_slave_method()
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_set_provide_clock),
+	  (gst_base_audio_src_get_provide_clock),
+	  (gst_base_audio_src_set_property),
+	  (gst_base_audio_src_get_property), (gst_base_audio_src_create):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  Expose methods for some object properties so that subclasses can more
+	  easily configure them.
+	  API: gst_base_audio_src_set_provide_clock()
+	  API: gst_base_audio_src_get_provide_clock()
+
+2007-11-21 10:18:56 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/README: Add README explaining where the resampling code was taken from and which changes were done.
+	  Original commit message from CVS:
+	  * gst/speexresample/README:
+	  Add README explaining where the resampling code was taken from
+	  and which changes were done.
+	  * gst/speexresample/resample.c: (speex_alloc), (speex_realloc),
+	  (speex_free):
+	  Use g_malloc() and friends instead of malloc() to achieve higher
+	  portability and define the functions inline.
+	  * gst/speexresample/speex_resampler.h:
+	  Add back some useless preprocessor stuff to keep the diff between
+	  our version and the one from the Speex SVN repository lower.
+
+2007-11-20 20:23:25 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: Some small cleanup and addition of a TODO item.
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_fix_output_buffer), (gst_speex_resample_transform):
+	  Some small cleanup and addition of a TODO item.
+
+2007-11-20 12:56:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/Makefile.am: Add missing file.
+	  Original commit message from CVS:
+	  * gst/speexresample/Makefile.am:
+	  Add missing file.
+
+2007-11-20 07:53:56 +0000  Joe Peterson <lavajoe@gentoo.org>
+
+	  gst-libs/gst/sdp/gstsdpmessage.c: Fix compilation on FreeBSD (Gentoo). Fixes #498228.
+	  Original commit message from CVS:
+	  Patch by: Joe Peterson <lavajoe at gentoo dot org>
+	  * gst-libs/gst/sdp/gstsdpmessage.c:
+	  Fix compilation on FreeBSD (Gentoo). Fixes #498228.
+
+2007-11-20 07:47:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add speexresample to the docs and while at that do a make update.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-bad-plugins.args:
+	  * docs/plugins/gst-plugins-bad-plugins.signals:
+	  * docs/plugins/inspect/plugin-bz2.xml:
+	  * docs/plugins/inspect/plugin-cdxaparse.xml:
+	  * docs/plugins/inspect/plugin-dtsdec.xml:
+	  * docs/plugins/inspect/plugin-equalizer.xml:
+	  * docs/plugins/inspect/plugin-faac.xml:
+	  * docs/plugins/inspect/plugin-faad.xml:
+	  * docs/plugins/inspect/plugin-filter.xml:
+	  * docs/plugins/inspect/plugin-freeze.xml:
+	  * docs/plugins/inspect/plugin-gio.xml:
+	  * docs/plugins/inspect/plugin-gsm.xml:
+	  * docs/plugins/inspect/plugin-gstrtpmanager.xml:
+	  * docs/plugins/inspect/plugin-h264parse.xml:
+	  * docs/plugins/inspect/plugin-modplug.xml:
+	  * docs/plugins/inspect/plugin-mpeg2enc.xml:
+	  * docs/plugins/inspect/plugin-musepack.xml:
+	  * docs/plugins/inspect/plugin-musicbrainz.xml:
+	  * docs/plugins/inspect/plugin-nsfdec.xml:
+	  * docs/plugins/inspect/plugin-replaygain.xml:
+	  * docs/plugins/inspect/plugin-soundtouch.xml:
+	  * docs/plugins/inspect/plugin-spcdec.xml:
+	  * docs/plugins/inspect/plugin-spectrum.xml:
+	  * docs/plugins/inspect/plugin-speed.xml:
+	  * docs/plugins/inspect/plugin-tta.xml:
+	  * docs/plugins/inspect/plugin-videosignal.xml:
+	  * docs/plugins/inspect/plugin-xingheader.xml:
+	  * docs/plugins/inspect/plugin-xvid.xml:
+	  * gst/speexresample/gstspeexresample.h:
+	  Add speexresample to the docs and while at that do a make update.
+
+2007-11-20 07:30:30 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/speexresample/gstspeexresample.c: If the resampler gives less output samples than expected adjust the output buff...
+	  Original commit message from CVS:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_fix_output_buffer), (gst_speex_resample_process):
+	  If the resampler gives less output samples than expected
+	  adjust the output buffer and print a warning.
+
+2007-11-20 07:02:45 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add resample element based on the Speex resampling algorithm.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/speexresample/arch.h:
+	  * gst/speexresample/fixed_generic.h:
+	  * gst/speexresample/gstspeexresample.c:
+	  (gst_speex_resample_base_init), (gst_speex_resample_class_init),
+	  (gst_speex_resample_init), (gst_speex_resample_start),
+	  (gst_speex_resample_stop), (gst_speex_resample_get_unit_size),
+	  (gst_speex_resample_transform_caps),
+	  (gst_speex_resample_init_state), (gst_speex_resample_update_state),
+	  (gst_speex_resample_reset_state), (gst_speex_resample_parse_caps),
+	  (gst_speex_resample_transform_size), (gst_speex_resample_set_caps),
+	  (gst_speex_resample_event), (gst_speex_resample_check_discont),
+	  (gst_speex_resample_process), (gst_speex_resample_transform),
+	  (gst_speex_resample_set_property),
+	  (gst_speex_resample_get_property), (plugin_init):
+	  * gst/speexresample/gstspeexresample.h:
+	  * gst/speexresample/resample.c: (speex_alloc), (speex_realloc),
+	  (speex_free), (compute_func), (main), (sinc), (cubic_coef),
+	  (resampler_basic_direct_single), (resampler_basic_direct_double),
+	  (resampler_basic_interpolate_single),
+	  (resampler_basic_interpolate_double), (update_filter),
+	  (speex_resampler_init), (speex_resampler_init_frac),
+	  (speex_resampler_destroy), (speex_resampler_process_native),
+	  (speex_resampler_process_float), (speex_resampler_process_int),
+	  (speex_resampler_process_interleaved_float),
+	  (speex_resampler_process_interleaved_int),
+	  (speex_resampler_set_rate), (speex_resampler_get_rate),
+	  (speex_resampler_set_rate_frac), (speex_resampler_get_ratio),
+	  (speex_resampler_set_quality), (speex_resampler_get_quality),
+	  (speex_resampler_set_input_stride),
+	  (speex_resampler_get_input_stride),
+	  (speex_resampler_set_output_stride),
+	  (speex_resampler_get_output_stride), (speex_resampler_skip_zeros),
+	  (speex_resampler_reset_mem), (speex_resampler_strerror):
+	  * gst/speexresample/speex_resampler.h:
+	  * gst/speexresample/speex_resampler_float.c:
+	  * gst/speexresample/speex_resampler_int.c:
+	  * gst/speexresample/speex_resampler_wrapper.h:
+	  Add resample element based on the Speex resampling algorithm.
+
+2007-11-19 12:30:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  tests/check/libs/fft.c: Fix scaling to really have dB instead of something else.
+	  Original commit message from CVS:
+	  * tests/check/libs/fft.c: (GST_START_TEST):
+	  Fix scaling to really have dB instead of something else.
+
+2007-11-19 12:08:16 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: There's a nice macro to check
+	  Original commit message from CVS:
+	  2007-11-19  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (main): There's a nice macro to
+	  check
+	  GTK version, use it.
+
+2007-11-19 11:59:20 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Try to support stable version of GTK.
+	  Original commit message from CVS:
+	  2007-11-19  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (main): Try to support stable version
+	  of GTK.
+
+2007-11-17 15:25:15 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/: Fix the build + little README update.
+	  Original commit message from CVS:
+	  * gst/playback/README:
+	  * gst/playback/test7.c:
+	  Fix the build + little README update.
+
+2007-11-16 16:02:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add playbin2 seek pipeline.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (make_playerbin2_pipeline), (main):
+	  Add playbin2 seek pipeline.
+
+2007-11-16 15:44:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Add playbin2.
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstplayback.c: (plugin_init):
+	  * gst/playback/test7.c: (update_scale), (warning_cb), (error_cb),
+	  (eos_cb), (about_to_finish_cb), (main):
+	  Add playbin2.
+	  Added gapless playback example.
+	  * gst/playback/gstplaybasebin.c:
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_plugin_init):
+	  * gst/playback/gstqueue2.c:
+	  * gst/playback/test.c:
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init),
+	  (pad_removed_cb):
+	  * gst/playback/gststreaminfo.h:
+	  Change email.
+	  * gst/playback/gstplaybin2.c: (gst_play_bin_get_type),
+	  (gst_play_bin_class_init), (init_group), (gst_play_bin_init),
+	  (gst_play_bin_dispose), (gst_play_bin_set_uri),
+	  (gst_play_bin_set_suburi), (gst_play_bin_set_property),
+	  (gst_play_bin_get_property), (gst_play_bin_handle_message),
+	  (pad_added_cb), (pad_removed_cb), (no_more_pads_cb), (perform_eos),
+	  (drained_cb), (unlink_group), (activate_group),
+	  (setup_next_source), (gst_play_bin_change_state),
+	  (gst_play_bin2_plugin_init):
+	  Added raw first version of playbin2. Does chained oggs and gapless
+	  playback fine. No support for raw sinks yet. No visualisations or
+	  subtitles yet.
+	  * gst/playback/gstplaysink.c: (gst_play_sink_get_type),
+	  (gst_play_sink_class_init), (gst_play_sink_init),
+	  (gst_play_sink_dispose), (gst_play_sink_vis_unblocked),
+	  (gst_play_sink_vis_blocked), (gst_play_sink_set_video_sink),
+	  (gst_play_sink_set_audio_sink), (gst_play_sink_set_vis_plugin),
+	  (gst_play_sink_set_property), (gst_play_sink_get_property),
+	  (post_missing_element_message), (free_chain), (add_chain),
+	  (activate_chain), (gen_video_chain), (gen_text_element),
+	  (gen_audio_chain), (gen_vis_element), (gst_play_sink_get_mode),
+	  (gst_play_sink_set_mode), (gst_play_sink_request_pad),
+	  (gst_play_sink_release_pad), (gst_play_sink_send_event_to_sink),
+	  (gst_play_sink_send_event), (gst_play_sink_change_state):
+	  * gst/playback/gstplaysink.h:
+	  Added Element that abstracts the sinks and their pipelines for playbin2.
+
+2007-11-16 15:05:07 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gststreamselector.*: Improve streamselector, make it select and unselect the current pad more intelligen...
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c: (gst_selector_pad_get_type),
+	  (gst_selector_pad_class_init), (gst_selector_pad_init),
+	  (gst_selector_pad_finalize), (gst_selector_pad_reset),
+	  (gst_selector_pad_get_linked_pads), (gst_selector_pad_event),
+	  (gst_selector_pad_getcaps), (gst_selector_pad_bufferalloc),
+	  (gst_selector_pad_chain), (gst_stream_selector_get_type),
+	  (gst_stream_selector_base_init), (gst_stream_selector_class_init),
+	  (gst_stream_selector_init), (gst_stream_selector_set_property),
+	  (gst_stream_selector_get_linked_pad),
+	  (gst_stream_selector_getcaps),
+	  (gst_stream_selector_is_active_sinkpad),
+	  (gst_stream_selector_activate_sinkpad),
+	  (gst_stream_selector_get_linked_pads),
+	  (gst_stream_selector_request_new_pad),
+	  (gst_stream_selector_release_pad):
+	  * gst/playback/gststreamselector.h:
+	  Improve streamselector, make it select and unselect the current pad more
+	  intelligently.
+	  Subclass GstPad for the sinkpads of the selector.
+	  Handle segments more correctly.
+	  Fix caps negotiation.
+	  Implement release_pad.
+
+2007-11-16 12:51:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Add drained signal fired when decodebin finishes decoding the data.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
+	  (gst_decode_group_check_if_drained), (source_pad_event_probe),
+	  (remove_fakesink):
+	  Add drained signal fired when decodebin finishes decoding the data.
+	  Remove deprecated STATE_DIRTY message.
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init),
+	  (unknown_type_cb), (new_decoded_pad_cb), (pad_removed_cb),
+	  (analyse_source), (proxy_drained_signal), (make_decoder),
+	  (source_new_pad), (value_list_append_structure_list),
+	  (handle_redirect_message), (handle_message):
+	  Proxy the new drained signal.
+	  Handle pad removed from decodebin.
+	  Handle redirect messages by sorting multiple redirections based on the
+	  connection speed.
+
+2007-11-16 11:22:09 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  gst-libs/gst/rtsp/gstrtspmessage.c: Fix leaking headers. Fixes #496761.
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (gst_rtsp_message_unset):
+	  Fix leaking headers. Fixes #496761.
+
+2007-11-16 11:16:58 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  sys/: Don't leak the PAR on errors. Fixes #496731.
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+	  (gst_ximagesink_change_state):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get):
+	  Don't leak the PAR on errors. Fixes #496731.
+
+2007-11-16 10:14:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstid3tag.c: Add mapping for audio cd discid tags, so we can extract them from tags as well (see #34...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c: (user_tag_matches),
+	  (gst_tag_from_id3_user_tag):
+	  Add mapping for audio cd discid tags, so we can extract
+	  them from tags as well (see #347848). Also compare identifiers
+	  in ID3v2 TXXX frames in a case-insensitive way to increase
+	  compatibility when reading tags (discid vs. DiscID vs. DiscId).
+
+2007-11-16 01:21:40 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-plugins-base.doap: Oops, fix the release name.
+	  Original commit message from CVS:
+	  * gst-plugins-base.doap:
+	  Oops, fix the release name.
+
+2007-11-16 00:44:58 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-plugins-base.doap: Add 0.10.15 release
+	  Original commit message from CVS:
+	  * gst-plugins-base.doap:
+	  Add 0.10.15 release
+
+2007-11-16 00:24:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.15 ===
+
+2007-11-16 00:14:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: releasing 0.10.15, "No need to argue"
+	  Original commit message from CVS:
+	  === release 0.10.15 ===
+	  2007-11-15  Jan Schmidt <jan.schmidt@sun.com>
+	  * configure.ac:
+	  releasing 0.10.15, "No need to argue"
+
+2007-11-16 00:04:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/es.po:
+	* po/fi.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2007-11-15 21:40:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  win32/vs6/libgstfft.dsp: Convert line endings to DOS.
+	  Original commit message from CVS:
+	  * win32/vs6/libgstfft.dsp:
+	  Convert line endings to DOS.
+
+2007-11-15 21:14:04 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/: Add a project file for fft plugin and remove socket based plugin which don't build from the workspace.* win32...
+	  Original commit message from CVS:
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstfft.dsp:
+	  * win32/MANIFEST:
+	  Add a project file for fft plugin and remove socket
+	  based plugin which don't build from the workspace.* win32/vs6/libgstaudio.dsp:
+	  * win32/vs6/libgstrtp.dsp:
+	  * win32/vs6/libgsttag.dsp:
+	  Convert line endings back to DOS.
+	  Fixes #496724
+
+2007-11-14 12:27:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  win32/vs6/: Convert line endings back to DOS
+	  Original commit message from CVS:
+	  * win32/vs6/libgstinterfaces.dsp:
+	  * win32/vs6/libgstrtsp.dsp:
+	  Convert line endings back to DOS
+
+2007-11-14 11:08:48 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/fft/: Don't include malloc.h which doesn't exist on Mac OSX.
+	  Original commit message from CVS:
+	  * gst-libs/gst/fft/kiss_fft_f32.h:
+	  * gst-libs/gst/fft/kiss_fft_f64.h:
+	  * gst-libs/gst/fft/kiss_fft_s16.h:
+	  * gst-libs/gst/fft/kiss_fft_s32.h:
+	  Don't include malloc.h which doesn't exist on Mac OSX.
+	  Instead, pull in glib.h and use g_malloc/g_free for
+	  consistency. Fixes: #496548
+
+2007-11-09 15:54:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstdecodebin2.c: Dont leak ghostpad. Fixes #475451.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  Dont leak ghostpad. Fixes #475451.
+
+2007-11-09 12:21:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Update some more docs and comments.
+	  Original commit message from CVS:
+	  * docs/design/design-decodebin.txt:
+	  * gst/playback/gstdecodebin2.c: (analyze_new_pad):
+	  Update some more docs and comments.
+
+2007-11-07 16:47:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Require GIO >= 0.1.2 and adjust unit test for an API change.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/check/pipelines/gio.c: (GST_START_TEST):
+	  Require GIO >= 0.1.2 and adjust unit test for an API change.
+
+2007-11-07 15:18:54 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.h: Add macro to check if a stream supports seeking.
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.h:
+	  Add macro to check if a stream supports seeking.
+	  * ext/gio/Makefile.am:
+	  * ext/gio/gstgiobasesink.c: (gst_gio_base_sink_base_init),
+	  (gst_gio_base_sink_class_init), (gst_gio_base_sink_init),
+	  (gst_gio_base_sink_finalize), (gst_gio_base_sink_start),
+	  (gst_gio_base_sink_stop), (gst_gio_base_sink_unlock),
+	  (gst_gio_base_sink_unlock_stop), (gst_gio_base_sink_event),
+	  (gst_gio_base_sink_render), (gst_gio_base_sink_query),
+	  (gst_gio_base_sink_set_stream):
+	  * ext/gio/gstgiobasesink.h:
+	  * ext/gio/gstgiobasesrc.c: (gst_gio_base_src_base_init),
+	  (gst_gio_base_src_class_init), (gst_gio_base_src_init),
+	  (gst_gio_base_src_finalize), (gst_gio_base_src_start),
+	  (gst_gio_base_src_stop), (gst_gio_base_src_get_size),
+	  (gst_gio_base_src_is_seekable), (gst_gio_base_src_unlock),
+	  (gst_gio_base_src_unlock_stop), (gst_gio_base_src_check_get_range),
+	  (gst_gio_base_src_create), (gst_gio_base_src_set_stream):
+	  * ext/gio/gstgiobasesrc.h:
+	  Refactor common GIO functions to GstGioBaseSink and GstGioBaseSrc
+	  base classes that only require a GInputStream or GOutputStream to
+	  work.
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
+	  (gst_gio_sink_class_init), (gst_gio_sink_init),
+	  (gst_gio_sink_finalize), (gst_gio_sink_start):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
+	  (gst_gio_src_class_init), (gst_gio_src_init),
+	  (gst_gio_src_finalize), (gst_gio_src_start):
+	  * ext/gio/gstgiosrc.h:
+	  Use the newly created base classes here.
+	  * ext/gio/gstgio.c: (plugin_init):
+	  * ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_base_init),
+	  (gst_gio_stream_sink_class_init), (gst_gio_stream_sink_init),
+	  (gst_gio_stream_sink_finalize), (gst_gio_stream_sink_set_property),
+	  (gst_gio_stream_sink_get_property):
+	  * ext/gio/gstgiostreamsink.h:
+	  * ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_base_init),
+	  (gst_gio_stream_src_class_init), (gst_gio_stream_src_init),
+	  (gst_gio_stream_src_finalize), (gst_gio_stream_src_set_property),
+	  (gst_gio_stream_src_get_property):
+	  * ext/gio/gstgiostreamsrc.h:
+	  Implement GstGioStreamSink and GstGioStreamSrc that have a property
+	  to set the GInputStream/GOutputStream that should be used.
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/.cvsignore:
+	  * tests/check/pipelines/gio.c: (message_handler), (GST_START_TEST),
+	  (gio_testsuite), (main):
+	  Add unit test for giostreamsrc and giostreamsink.
+
+2007-11-07 11:48:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Remove nowadays unnecessary workaround for a crash.
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (plugin_init):
+	  Remove nowadays unnecessary workaround for a crash.
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_finalize),
+	  (gst_gio_sink_start), (gst_gio_sink_stop),
+	  (gst_gio_sink_unlock_stop):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_finalize), (gst_gio_src_start),
+	  (gst_gio_src_stop), (gst_gio_src_unlock_stop):
+	  * ext/gio/gstgiosrc.h:
+	  Make the finalize function safer, clean up everything that could stay
+	  around.
+	  Reset the cancellable instead of creating a new one after cancelling
+	  some operation.
+	  Don't store the GFile in the element, it's only necessary for creating
+	  the streams.
+
+2007-11-06 23:35:39 +0000  Sebastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/rtp/: Fix some C99-isms and and a missing function that some versions of
+	  Original commit message from CVS:
+	  Patch by: Sebastien Moutte  <sebastien moutte net>
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_ntp_to_unix),
+	  (gst_rtcp_unix_to_ntp):
+	  * gst-libs/gst/rtp/gstrtppayloads.c: (gst_rtp_payload_info_for_name):
+	  Fix some C99-isms and and a missing function that some versions of
+	  MSVC don't like too much (#494346).
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstaudio.dsp:
+	  * win32/vs6/libgstrtp.dsp:
+	  * win32/vs6/libgsttag.dsp:
+	  Update vs6 projects files (#494346).
+
+2007-11-06 16:38:49 +0000  Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
+
+	  win32/common/: More missing symbols to export (fixes #493986).
+	  Original commit message from CVS:
+	  Patch by: Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgstcdda.def:
+	  * win32/common/libgstinterfaces.def:
+	  * win32/common/libgstnetbuffer.def:
+	  * win32/common/libgstpbutils.def:
+	  * win32/common/libgstrtp.def:
+	  * win32/common/libgstrtsp.def:
+	  * win32/common/libgsttag.def:
+	  * win32/common/libgstvideo.def:
+	  More missing symbols to export (fixes #493986).
+
+2007-11-06 11:58:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Remove the magnitude and phase calculation functions as these have very special use cases and can't even be used for ...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/fft/gstfftf32.c:
+	  * gst-libs/gst/fft/gstfftf32.h:
+	  * gst-libs/gst/fft/gstfftf64.c:
+	  * gst-libs/gst/fft/gstfftf64.h:
+	  * gst-libs/gst/fft/gstffts16.c:
+	  * gst-libs/gst/fft/gstffts16.h:
+	  * gst-libs/gst/fft/gstffts32.c:
+	  * gst-libs/gst/fft/gstffts32.h:
+	  * tests/check/libs/fft.c: (GST_START_TEST):
+	  Remove the magnitude and phase calculation functions as these have
+	  very special use cases and can't even be used for the spectrum
+	  element. Also adjust the docs to mention some properties of the used
+	  FFT implemention, i.e. how the values are scaled. Fixes #492098.
+
+2007-11-06 11:09:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Avoid crash when there are external subtitles (fixes #491722).
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (queue_threshold_reached),
+	  (finish_source):
+	  Avoid crash when there are external subtitles (fixes #491722).
+
+2007-11-03 10:39:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/: 'Could not open resource for writing' is not an acceptable even less so when we're trying to open it to re...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_open):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_open):
+	  'Could not open resource for writing' is not an acceptable
+	  error message when we can't open the audio device (see #492334),
+	  even less so when we're trying to open it to record something.
+
+2007-11-02 21:03:01 +0000  Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
+
+	  win32/common/libgstrtp.def: Add some more missing symbols (#492813).
+	  Original commit message from CVS:
+	  Patch by: Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
+	  * win32/common/libgstrtp.def:
+	  Add some more missing symbols (#492813).
+
+2007-11-02 14:59:06 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	  tests/check/elements/audioconvert.c: Add check to make sure that the out caps have a channel layout set on them where...
+	  Original commit message from CVS:
+	  Patch by: Thijs Vermeir <thijsvermeir@gmail.com>
+	  * tests/check/elements/audioconvert.c: (verify_convert):
+	  Add check to make sure that the out caps have a channel layout
+	  set on them where they should have one.
+
+2007-11-01 13:28:59 +0000  Vincent Torri <vtorri@univ-evry.fr>
+
+	  gst-libs/gst/fft/: Include our own _stdint.h instead of sys/types.h, makes MingW happy (#492306).
+	  Original commit message from CVS:
+	  Patch by: Vincent Torri <vtorri at univ-evry dot fr>
+	  * gst-libs/gst/fft/kiss_fft_s16.h: (KISS_FFT_S16_MALLOC):
+	  * gst-libs/gst/fft/kiss_fft_s32.h: (KISS_FFT_S32_MALLOC):
+	  Include our own _stdint.h instead of sys/types.h, makes MingW happy
+	  (#492306).
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (gst_rtsp_connection_create):
+	  Use _pipe directly, GLib doesn't have a pipe() macro any longer
+	  (it disappeared in GLib 2.14.0) (#492306).
+	  * gst-libs/gst/sdp/Makefile.am:
+	  * gst-libs/gst/sdp/gstsdpmessage.c:
+	  Fix includes and LIBS for win32/Mingw (#492306).
+	  * tests/examples/dynamic/addstream.c (pause_play_stream):
+	  Use more portable g_usleep() instead of sleep() (#492306).
+
+2007-11-01 12:51:57 +0000  Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Return NULL instead of an enum that happens to be 0, fixes warning on MSVC (#4921...
+	  Original commit message from CVS:
+	  Patch by: Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
+	  * gst-libs/gst/audio/gstringbuffer.c: (build_linear_format),
+	  (gst_ring_buffer_parse_caps):
+	  Return NULL instead of an enum that happens to be 0, fixes warning
+	  on MSVC (#492114).
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  No trailing commas in enum list (for gcc-2.9x).
+	  * gst/videotestsrc/videotestsrc.c: (random_char):
+	  Make information loss explicit instead of implicitly truncating to
+	  eight bits via the return value.  Fixes runtime error on MSVC when
+	  using the debug CRT (#492114).
+	  * win32/common/config.h.in:
+	  Fix a bunch of '#undef FOO bar', which MSVC doesn't like (#492114).
+	  * win32/common/libgstinterfaces.def:
+	  * win32/common/libgstrtp.def:
+	  Export a few more symbols (#492114).
+
+2007-11-01 08:06:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/audio.*: Readd the deprecation guards, but preserve compilability.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.c:
+	  * gst-libs/gst/audio/audio.h:
+	  Readd the deprecation guards, but preserve compilability.
+
+2007-10-31 17:54:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Preserve channel layout when fixating the number of channels in the output caps, ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (find_suitable_channel_layout),
+	  (gst_audio_convert_fixate_channels), (gst_audio_convert_fixate_caps):
+	  Preserve channel layout when fixating the number of channels in the
+	  output caps, or make sure there's a suitable channel position layout
+	  set on the caps if required. Fixes #430677.
+
+2007-10-31 17:32:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/decodebin.c: Make sure the pipeline really operates in push mode as it should in this case.
+	  Original commit message from CVS:
+	  * tests/check/elements/decodebin.c: (test_text_plain_streams):
+	  Make sure the pipeline really operates in push mode as it should
+	  in this case.
+
+2007-10-31 15:30:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/audio.h: Don't guard deprecated enum with #ifndef DISABLE_DEPRECATED, or compilation with DISABLE_...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.h:
+	  Don't guard deprecated enum with #ifndef DISABLE_DEPRECATED, or
+	  compilation with DISABLE_DEPRECATED and without REMOVE_DEPRECATED
+	  (ie. normal cvs builds) will fail.
+
+2007-10-31 12:47:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tell gtk-doc about the deprecation guard. Apply more doc fixes.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * gst-libs/gst/audio/audio.c:
+	  * gst-libs/gst/audio/audio.h:
+	  * gst-libs/gst/interfaces/mixer.c:
+	  tell gtk-doc about the deprecation guard. Apply more doc fixes.
+
+2007-10-31 12:30:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/audio.c: Add simple unit test to make sure GstValue intersection of channel layouts works the way I ...
+	  Original commit message from CVS:
+	  * tests/check/libs/audio.c: (init_value_to_channel_layout),
+	  (test_channel_layout_value_intersect), (audio_suite):
+	  Add simple unit test to make sure GstValue intersection
+	  of channel layouts works the way I think it does.
+
+2007-10-30 20:32:14 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix the docs according to what gtk-doc complained about.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  * gst-libs/gst/interfaces/mixer.h:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  * gst-libs/gst/sdp/gstsdpmessage.c:
+	  Fix the docs according to what gtk-doc complained about.
+
+2007-10-30 19:46:02 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/icles/stress-playbin.c: Fix the build.
+	  Original commit message from CVS:
+	  * tests/icles/stress-playbin.c:
+	  Fix the build.
+
+2007-10-30 15:54:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Post nice/more useful error message if we don't have a decoder for the primary type.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (close_pad_link), (type_found):
+	  * gst/playback/gstdecodebin2.c: (analyze_new_pad):
+	  Post nice/more useful error message if we don't have a decoder for
+	  the primary type.
+
+2007-10-30 15:07:58 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Be a bit more useful, unblock the pads after we fired the no-more-pads signal so that w...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_group_expose):
+	  Be a bit more useful, unblock the pads after we fired the no-more-pads
+	  signal so that we can use the signal to inspect and connect all pads
+	  without having to keep extra state outside of decodebin.
+
+2007-10-30 15:00:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gsturidecodebin.c: Implement default signal handler so that we return TRUE when nothing is connected.
+	  Original commit message from CVS:
+	  * gst/playback/gsturidecodebin.c:
+	  (gst_uri_decode_bin_autoplug_continue),
+	  (gst_uri_decode_bin_class_init), (no_more_pads_full):
+	  Implement default signal handler so that we return TRUE when nothing is
+	  connected.
+
+2007-10-28 11:53:36 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Use the ALSA channel layout as default for wav files without channel layout informati...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c:
+	  (gst_riff_wavext_add_channel_layout),
+	  (gst_riff_wave_add_default_channel_layout),
+	  (gst_riff_wavext_get_default_channel_mask),
+	  (gst_riff_create_audio_caps):
+	  Use the ALSA channel layout as default for wav files without channel
+	  layout information. This fixes playback of chan-id.wav on 5.1 systems
+	  for example. Also refactor the channel layout setting a bit and add
+	  more default channel orders. Fixes #489010.
+
+2007-10-28 11:46:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	* ChangeLog:
+	  Use the ALSA channel layout as default for wav files without channel layout information. This fixes playback of chan-...
+	  Original commit message from CVS:
+	  (gst_riff_wavext_add_channel_layout),
+	  (gst_riff_wave_add_default_channel_layout),
+	  (gst_riff_wavext_get_default_channel_mask),
+	  (gst_riff_create_audio_caps):
+	  Use the ALSA channel layout as default for wav files without channel
+	  layout information. This fixes playback of chan-id.wav on 5.1 systems
+	  for example. Also refactor the channel layout setting a bit and add
+	  more default channel orders. Fixes #489010.
+
+2007-10-26 18:57:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/tag.c: GST_TAG_MUSICBRAINZ_SORTNAME is deprecated and we compile with
+	  Original commit message from CVS:
+	  * tests/check/libs/tag.c: (test_musicbrainz_tag_registration):
+	  GST_TAG_MUSICBRAINZ_SORTNAME is deprecated and we compile with
+	  -DGST_DISABLE_DEPRECATED, so use new GST_TAG_ARTIST_SORTNAME
+	  instead.
+
+2007-10-26 12:07:14 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update spec file
+	  Original commit message from CVS:
+	  update spec file
+
+2007-10-25 17:36:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Move subtitle encoding property to decodebin2 so that it can set the property value on ...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
+	  (gst_decode_bin_dispose), (gst_decode_bin_set_caps),
+	  (gst_decode_bin_set_subs_encoding),
+	  (gst_decode_bin_get_subs_encoding), (gst_decode_bin_set_property),
+	  (gst_decode_bin_get_property), (analyze_new_pad):
+	  Move subtitle encoding property to decodebin2 so that it can set the
+	  property value on all elements that it autoplugs and that require it.
+	  Make caps refcounting more consistent in get/set.
+	  * gst/playback/gsturidecodebin.c: (_gst_boolean_accumulator),
+	  (gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
+	  (gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_property),
+	  (gst_uri_decode_bin_get_property), (proxy_unknown_type_signal),
+	  (proxy_autoplug_continue_signal),
+	  (proxy_autoplug_factories_signal), (proxy_autoplug_select_signal),
+	  (make_decoder):
+	  Proxy properties and relevant signals from the internal decodebin.
+	  Make properties MT safe.
+
+2007-10-25 15:10:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/: Deprecate GST_TAG_MUSICBRAINZ_SORTNAME, replaced by the newly-added
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tag.h: (GST_TAG_MUSICBRAINZ_SORTNAME):
+	  * gst-libs/gst/tag/tags.c:
+	  Deprecate GST_TAG_MUSICBRAINZ_SORTNAME, replaced by the newly-added
+	  GST_TAG_ARTIST_SORTNAME (in an API and ABI compatible way).
+	  * gst-libs/gst/tag/gstid3tag.c: (tag_matches):
+	  Map ID3v2 TSOP, TSOA and TSOT frames to new SORTNAME tags (#414539).
+	  * gst-libs/gst/tag/gstvorbistag.c: (tag_matches),
+	  (gst_tag_to_vorbis_comments):
+	  Map new SORTNAME tags (these tags aren't even semi-official, so I'm
+	  just mapping everything I found in the wild) (#414539).
+
+2007-10-24 11:07:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Remove the autoplug-sort signal and replace it with a binding friendly autoplug-select signal.
+	  Original commit message from CVS:
+	  Inspired by patch of: René Stadler <mail at renestadler dot de>
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
+	  (gst_decode_bin_autoplug_continue),
+	  (gst_decode_bin_autoplug_factories),
+	  (gst_decode_bin_autoplug_select), (analyze_new_pad), (connect_pad),
+	  (find_compatibles):
+	  * gst/playback/gstplay-marshal.list:
+	  Remove the autoplug-sort signal and replace it with a binding friendly
+	  autoplug-select signal.
+	  Add an autoplug-factories signal that can be used to generate a list of
+	  factories to try to autoplug.
+	  Add the GstPad to the autoplugging signal args as it might be needed to
+	  make a good factory selection.
+	  Fix up the marshallers for this. Fixes #407282.
+
+2007-10-23 14:23:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Don't abort with an assertion if we receive a seek event with a start type of NONE (s...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c:
+	  Don't abort with an assertion if we receive a seek event with
+	  a start type of NONE (see launchpad bug #155878).
+
+2007-10-22 10:21:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/: Make sure that before we clean up the X resources, we shutdown and join the event thread.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_event_thread),
+	  (gst_ximagesink_xcontext_get), (gst_ximagesink_xcontext_clear),
+	  (gst_ximagesink_change_state), (gst_ximagesink_reset):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_event_thread),
+	  (gst_xvimagesink_xcontext_get), (gst_xvimagesink_xcontext_clear),
+	  (gst_xvimagesink_change_state), (gst_xvimagesink_reset):
+	  Make sure that before we clean up the X resources, we shutdown and join
+	  the event thread.
+	  Also make sure the event thread does not shut down immediatly after
+	  startup because the running variable is not yet correctly set.
+	  Fixes #378770.
+
+2007-10-16 16:48:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Make the window for a race in typefind and shutting down smaller until we figure out the...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (new_pad), (type_found):
+	  Make the window for a race in typefind and shutting down smaller until
+	  we figure out the right locking here. Avoids #485753 usually.
+	  * gst/playback/gstdecodebin2.c: (type_found), (pad_added_group_cb):
+	  Remove unneeded lock causing a race in typefind and shutting down.
+	  Fixes #485753.
+	  * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+	  Also remove sinks when going to NULL because we might not complete the
+	  state change to PAUSED, causing the PAUSED->READY state change not to
+	  happen.
+
+2007-10-16 15:33:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Also explicitly release the ringbuffer when going to NULL because it is requir...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain), (gst_base_audio_sink_change_state):
+	  Also explicitly release the ringbuffer when going to NULL because it
+	  is required in the setcaps function, before the state change to PAUSED
+	  completes.
+
+2007-10-16 14:58:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/icles/: Does what it says on the tin.
+	  Original commit message from CVS:
+	  * tests/icles/.cvsignore:
+	  * tests/icles/Makefile.am:
+	  * tests/icles/stress-playbin.c:
+	  Does what it says on the tin.
+
+2007-10-15 11:38:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Fix queue negotiation. See #486758.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_init), (gst_queue_push_one):
+	  Fix queue negotiation. See #486758.
+
+2007-10-12 10:52:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Actual code change to go along with:
+	  Original commit message from CVS:
+	  Actual code change to go along with:
+	  2007-10-12  Jan Schmidt  <Jan.Schmidt@sun.com>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
+	  (gst_xvimagesink_xwindow_new),
+	  (gst_xvimagesink_update_colorbalance),
+	  (gst_xvimagesink_handle_xevents), (gst_xvimagesink_xcontext_get):
+	  Fix handling of some of the X atoms. If the last parameter is True,
+	  XInternAtom won't create the atom if it doesn't exist, and therefore
+	  might return None. This causes X errors on Xv implementations that
+	  don't provide the colour balance attributes.
+
+2007-10-12 10:37:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	  Remove stray character from the changelog.
+	  Original commit message from CVS:
+	  Remove stray character from the changelog.
+
+2007-10-12 10:33:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	  I'm too lazy to comment this
+	  Original commit message from CVS:
+	  *** empty log message ***
+
+2007-10-11 18:24:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Extract vorbis comment LICENSE tags correctly.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  * tests/check/libs/tag.c:
+	  Extract vorbis comment LICENSE tags correctly.
+
+2007-10-11 16:12:21 +0000  Jason Kivlighn <jkivlighn@gmail.com>
+
+	  Map ID3v2 WCOP frame to GST_TAG_COPYRIGHT_URI (#447000).
+	  Original commit message from CVS:
+	  Patch by: Jason Kivlighn  <jkivlighn gmail com>
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  * tests/check/libs/tag.c:
+	  Map ID3v2 WCOP frame to GST_TAG_COPYRIGHT_URI (#447000).
+
+2007-10-10 17:01:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Don't error out when a buggy downstream element doesn't handle the newsegment event w...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c:
+	  Don't error out when a buggy downstream element doesn't
+	  handle the newsegment event we send properly (especially
+	  not without posting a meaningful error message on the
+	  bus). See bug #471370 and launchpad bug #136264.
+
+2007-10-10 15:36:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Use new basesink method to make our EOS drain interruptable.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain):
+	  Use new basesink method to make our EOS drain interruptable.
+
+2007-10-10 09:37:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtp/gstrtppayloads.c: Fix silly search-replace oversight.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtppayloads.c:
+	  Fix silly search-replace oversight.
+
+2007-10-09 09:57:17 +0000  Laurent Glayal <spglegle@yahoo.fr>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Fix caps memleak. Fixes #484989.
+	  Original commit message from CVS:
+	  Patch by: Laurent Glayal <spglegle at yahoo dot fr>
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (copy_fixed),
+	  (gst_basertppayload_set_outcaps):
+	  Fix caps memleak. Fixes #484989.
+
+2007-10-08 18:04:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Fix debug output.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps), (gst_base_rtp_depayload_chain):
+	  Fix debug output.
+
+2007-10-08 18:02:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Also handle the case where there is no clock set on the audio source, like in t...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Also handle the case where there is no clock set on the audio source,
+	  like in the unit tests.
+
+2007-10-08 17:40:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtp/gstrtppayloads.c: Use unsigned G_MAXUINT8 instead of -1 to initialise a guint8 to avoid compiler war...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtppayloads.c:
+	  Use unsigned G_MAXUINT8 instead of -1 to initialise a guint8
+	  to avoid compiler warnings
+
+2007-10-08 17:12:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Don't disconnect the have_type signal because we never reconnect it later on. Instead keep a variable ...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (type_found),
+	  (gst_decode_bin_change_state):
+	  * gst/playback/gstdecodebin2.c: (type_found),
+	  (gst_decode_bin_change_state):
+	  Don't disconnect the have_type signal because we never reconnect it
+	  later on. Instead keep a variable to see if we already detected a type.
+
+2007-10-08 10:47:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Unlink the signal handler when we found the type, we're not going to do anything sensible with more ty...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (add_fakesink), (type_found):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_init),
+	  (type_found):
+	  Unlink the signal handler when we found the type, we're not going to do
+	  anything sensible with more type_found signals anyway.
+
+2007-10-08 06:07:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgio.c: Use GIO function to get a list of supported URI schemes instead of hard coding something.
+	  Original commit message from CVS:
+	  * ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
+	  Use GIO function to get a list of supported URI schemes instead of
+	  hard coding something.
+
+2007-10-06 16:49:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gsttagdemux.c: Don't leak caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gsttagdemux.c:
+	  Don't leak caps.
+
+2007-10-06 15:04:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/: API: add GstTagDemux base class for simple tag demuxers.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/Makefile.am:
+	  * gst-libs/gst/tag/gsttagdemux.c:
+	  * gst-libs/gst/tag/gsttagdemux.h:
+	  API: add GstTagDemux base class for simple tag demuxers.
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Add GstTagDemux to docs.
+
+2007-10-05 07:49:25 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Fix bug introduced with last commit which inverted the logic and caused all buffers ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  (gst_rtp_buffer_get_payload_subbuffer):
+	  Fix bug introduced with last commit which inverted the logic and
+	  caused all buffers to be dropped. Fixes #483620.
+	  Thanks to Laurent Glayal <spglegle at yahoo dot fr> for noticing.
+
+2007-10-04 06:50:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: with regular return and warning.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  Replace g_return_if_val (as it could be disabled), with regular return
+	  and warning.
+
+2007-10-03 14:51:59 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/pipelines/simple-launch-lines.c: Print message name and not just number.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/simple-launch-lines.c:
+	  Print message name and not just number.
+
+2007-10-02 11:11:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: When slaved to the clock, don't try to align a sample with the previous one wh...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_async_play):
+	  When slaved to the clock, don't try to align a sample with the previous
+	  one when going to PLAYING again.
+
+2007-10-02 09:04:03 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/snapshot/snapshot.c: Fix the build.
+	  Original commit message from CVS:
+	  * tests/examples/snapshot/snapshot.c:
+	  Fix the build.
+
+2007-10-02 07:43:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/gstgiosink.c: Update to API changes in GIO.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_start):
+	  Update to API changes in GIO.
+
+2007-10-01 16:33:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.h: Add RFC 3556 bandwidth modifiers.
+	  Original commit message from CVS:
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  Add RFC 3556 bandwidth modifiers.
+
+2007-10-01 13:37:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Update documentation.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtp/gstrtppayloads.c:
+	  Update documentation.
+
+2007-10-01 13:22:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/: Added new file and header to deal with payload info.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/Makefile.am:
+	  * gst-libs/gst/rtp/gstrtppayloads.c: (gst_rtp_payload_info_for_pt),
+	  (gst_rtp_payload_info_for_name):
+	  * gst-libs/gst/rtp/gstrtppayloads.h:
+	  Added new file and header to deal with payload info.
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data),
+	  (gst_rtp_buffer_default_clock_rate):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Payload specific stuff is move to new headers.
+	  Implement _default_clock rate using the new payload function.
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (is_multicast_address),
+	  (gst_sdp_parse_line):
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  Add some more comments.
+
+2007-10-01 10:22:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefind function for application/sdp.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (utf8_type_find),
+	  (sdp_check_header), (sdp_type_find), (plugin_init):
+	  Add typefind function for application/sdp.
+	  Remove some old dirac typefind code that was ifdeffed out.
+
+2007-09-29 12:04:02 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/common/libgstaudio.def: Add new exported functions.
+	  Original commit message from CVS:
+	  * win32/common/libgstaudio.def:
+	  Add new exported functions.
+	  * win32/vs6/grammar.dsp:
+	  Add autogeneration and copy of some autegenerated files from win32/common
+	  for rtsp library.
+	  * win32/vs6/libgstaudioconvert.dsp:
+	  Add gstaudioquantize.c to the build.
+	  * win32/vs6/libgstinterfaces.dsp:
+	  Add videoorientation.c to the build.
+	  * win32/vs6/libgstriff.dsp:
+	  Add libgsttag to the link libraries list.
+	  * win32/vs6/libgstvolume.dsp:
+	  Add liboil to the link.
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstrtsp.dsp:
+	  * win32/common/libgstrtsp.def:
+	  Add files to build libgstrtsp library.
+
+2007-09-29 07:01:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/gio/: Some minor cleanup and allow setting the location only when the element is not playing or paused.
+	  Original commit message from CVS:
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
+	  (gst_gio_sink_set_property), (gst_gio_sink_render):
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
+	  (gst_gio_src_set_property):
+	  Some minor cleanup and allow setting the location only when the
+	  element is not playing or paused.
+
+2007-09-26 15:14:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/snapshot/snapshot.c: Print error when pipeline failed to construct.
+	  Original commit message from CVS:
+	  * tests/examples/snapshot/snapshot.c: (main):
+	  Print error when pipeline failed to construct.
+
+2007-09-25 19:06:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add mappings for the new GST_TAG_COMPOSER for vorbis comments and ID3v2 tags.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Add mappings for the new GST_TAG_COMPOSER for vorbis comments
+	  and ID3v2 tags.
+
+2007-09-25 11:54:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/floatcast/floatcast.h: Don't include config.h in an installed public header, this might break compilatio...
+	  Original commit message from CVS:
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  Don't include config.h in an installed public header, this
+	  might break compilation of applications that don't have such
+	  a header and doesn't necessarily do what it's supposed to do
+	  anyway (ie. check for the lrint/lrintf defines) (#442065).
+	  Add docs for the various macros and document how this header
+	  has to be used (link against libm, etc.); add a few FIXMEs;
+	  include math.h for non-c99 code path.  Based on patch by
+	  Jan Schmidt.
+
+2007-09-25 07:50:59 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  configure.ac: Use AG_GST_ARG_WITH_PLUGINS and AG_GST_ARG_ENABLE_EXTERNAL instead of duplicating these macros in confi...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Use AG_GST_ARG_WITH_PLUGINS and AG_GST_ARG_ENABLE_EXTERNAL instead
+	  of duplicating these macros in configure.ac.
+
+2007-09-22 17:58:22 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/: Updated translations to 0.10.14
+	  Original commit message from CVS:
+	  * po/hu.po:
+	  * po/sv.po:
+	  * po/uk.po:
+	  Updated translations to 0.10.14
+
+2007-09-22 17:57:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* po/LINGUAS:
+	  add languages
+	  Original commit message from CVS:
+	  add languages
+
+2007-09-22 17:56:28 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/pl.po: Added Polish translation.
+	  Original commit message from CVS:
+	  translated by: Jakub Bogusz <qboosh@pld-linux.org>
+	  * po/pl.po:
+	  Added Polish translation.
+
+2007-09-22 17:55:37 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/fi.po: Added Finnish translation.
+	  Original commit message from CVS:
+	  translated by: Ilkka Tuohela <hile@iki.fi>
+	  * po/fi.po:
+	  Added Finnish translation.
+
+2007-09-22 17:54:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/es.po: Added Spanish translation.
+	  Original commit message from CVS:
+	  translated by: Jorge González González <aloriel@gmail.com>
+	  * po/es.po:
+	  Added Spanish translation.
+
+2007-09-22 17:53:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/da.po: Added Danish translation.
+	  Original commit message from CVS:
+	  translated by: Mogens Jaeger <mogens@jaeger.tf>
+	  * po/da.po:
+	  Added Danish translation.
+
+2007-09-22 17:52:56 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/zh_CN.po: Added Chinese (simplified) translation.
+	  Original commit message from CVS:
+	  translated by: Funda Wang <fundawang@linux.net.cn>
+	  * po/zh_CN.po:
+	  Added Chinese (simplified) translation.
+
+2007-09-22 17:51:45 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/bg.po: Added Bulgarian translation.
+	  Original commit message from CVS:
+	  translated by: Alexander Shopov <ash@contact.bg>
+	  * po/bg.po:
+	  Added Bulgarian translation.
+
+2007-09-21 18:00:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  docs/plugins/gst-plugins-bad-plugins.hierarchy: Update hierarchy.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+	  Update hierarchy.
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.h:
+	  Mark private fields of the instance structs private.
+
+2007-09-21 17:31:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  docs/plugins/: Add the GIO plugin to the docs and do a make update while doing that.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-bad-plugins.args:
+	  * docs/plugins/gst-plugins-bad-plugins.signals:
+	  * docs/plugins/inspect/plugin-bz2.xml:
+	  * docs/plugins/inspect/plugin-cdxaparse.xml:
+	  * docs/plugins/inspect/plugin-dfbvideosink.xml:
+	  * docs/plugins/inspect/plugin-dtsdec.xml:
+	  * docs/plugins/inspect/plugin-equalizer.xml:
+	  * docs/plugins/inspect/plugin-faac.xml:
+	  * docs/plugins/inspect/plugin-faad.xml:
+	  * docs/plugins/inspect/plugin-filter.xml:
+	  * docs/plugins/inspect/plugin-freeze.xml:
+	  * docs/plugins/inspect/plugin-gio.xml:
+	  * docs/plugins/inspect/plugin-gsm.xml:
+	  * docs/plugins/inspect/plugin-gstrtpmanager.xml:
+	  * docs/plugins/inspect/plugin-h264parse.xml:
+	  * docs/plugins/inspect/plugin-modplug.xml:
+	  * docs/plugins/inspect/plugin-mpeg2enc.xml:
+	  * docs/plugins/inspect/plugin-musepack.xml:
+	  * docs/plugins/inspect/plugin-musicbrainz.xml:
+	  * docs/plugins/inspect/plugin-nsfdec.xml:
+	  * docs/plugins/inspect/plugin-replaygain.xml:
+	  * docs/plugins/inspect/plugin-soundtouch.xml:
+	  * docs/plugins/inspect/plugin-spcdec.xml:
+	  * docs/plugins/inspect/plugin-spectrum.xml:
+	  * docs/plugins/inspect/plugin-speed.xml:
+	  * docs/plugins/inspect/plugin-tta.xml:
+	  * docs/plugins/inspect/plugin-videosignal.xml:
+	  * docs/plugins/inspect/plugin-xingheader.xml:
+	  * docs/plugins/inspect/plugin-xvid.xml:
+	  Add the GIO plugin to the docs and do a make update
+	  while doing that.
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_start):
+	  Fix a small memleak.
+
+2007-09-21 17:07:56 +0000  René Stadler <mail@renestadler.de>
+
+	  Add a GIO/GVFS plugin with source and sink elements. This will only be enabled when --enable-experimental is given to...
+	  Original commit message from CVS:
+	  Patch by: René Stadler <mail at renestadler dot de>
+	  * configure.ac:
+	  * ext/Makefile.am:
+	  * ext/gio/Makefile.am:
+	  * ext/gio/gstgio.c: (gst_gio_error), (gst_gio_seek),
+	  (gst_gio_get_supported_protocols),
+	  (gst_gio_uri_handler_get_type_sink),
+	  (gst_gio_uri_handler_get_type_src),
+	  (gst_gio_uri_handler_get_protocols), (gst_gio_uri_handler_get_uri),
+	  (gst_gio_uri_handler_set_uri), (gst_gio_uri_handler_init),
+	  (gst_gio_uri_handler_do_init), (plugin_init):
+	  * ext/gio/gstgio.h:
+	  * ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
+	  (gst_gio_sink_class_init), (gst_gio_sink_init),
+	  (gst_gio_sink_finalize), (gst_gio_sink_set_property),
+	  (gst_gio_sink_get_property), (gst_gio_sink_start),
+	  (gst_gio_sink_stop), (gst_gio_sink_unlock),
+	  (gst_gio_sink_unlock_stop), (gst_gio_sink_event),
+	  (gst_gio_sink_render), (gst_gio_sink_query):
+	  * ext/gio/gstgiosink.h:
+	  * ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
+	  (gst_gio_src_class_init), (gst_gio_src_init),
+	  (gst_gio_src_finalize), (gst_gio_src_set_property),
+	  (gst_gio_src_get_property), (gst_gio_src_start),
+	  (gst_gio_src_stop), (gst_gio_src_get_size),
+	  (gst_gio_src_is_seekable), (gst_gio_src_unlock),
+	  (gst_gio_src_unlock_stop), (gst_gio_src_check_get_range),
+	  (gst_gio_src_create):
+	  * ext/gio/gstgiosrc.h:
+	  Add a GIO/GVFS plugin with source and sink elements. This will
+	  only be enabled when --enable-experimental is given to configure
+	  for now as the GIO API is not stable yet. Fixes #476916.
+
+2007-09-21 14:37:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Fix compilation wrt printf arguments.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_push_one):
+	  Fix compilation wrt printf arguments.
+
+2007-09-20 17:38:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  examples/app/appsrc_ex.c: Fix compilation after changing the name of a method.
+	  Original commit message from CVS:
+	  * examples/app/appsrc_ex.c: (main):
+	  Fix compilation after changing the name of a method.
+
+2007-09-20 14:09:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add simple snapshot example program using appsink.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/examples/Makefile.am:
+	  * tests/examples/snapshot/.cvsignore:
+	  * tests/examples/snapshot/Makefile.am:
+	  * tests/examples/snapshot/snapshot.c: (main):
+	  Add simple snapshot example program using appsink.
+
+2007-09-20 13:59:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.*: Add properties, signals and actions to access the element even without linking to the ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_marshal_OBJECT__VOID),
+	  (gst_app_sink_class_init), (gst_app_sink_init),
+	  (gst_app_sink_dispose), (gst_app_sink_finalize),
+	  (gst_app_sink_set_property), (gst_app_sink_get_property),
+	  (gst_app_sink_flush_unlocked), (gst_app_sink_start),
+	  (gst_app_sink_event), (gst_app_sink_getcaps),
+	  (gst_app_sink_set_caps), (gst_app_sink_get_caps),
+	  (gst_app_sink_is_eos), (gst_app_sink_pull_preroll),
+	  (gst_app_sink_pull_buffer):
+	  * gst-libs/gst/app/gstappsink.h:
+	  Add properties, signals and actions to access the element even without
+	  linking to the library.
+	  Fix some method names and signatures.
+
+2007-09-20 10:37:02 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/generic/states.c: Improved state change unit test.
+	  Original commit message from CVS:
+	  * tests/check/generic/states.c:
+	  Improved state change unit test.
+
+2007-09-19 18:16:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Ignore registries in any format.
+	  Original commit message from CVS:
+	  * docs/plugins/.cvsignore:
+	  * tests/check/.cvsignore:
+	  Ignore registries in any format.
+
+2007-09-19 16:09:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Only copy timestamp on outgoing packets if the depayloader did not set one.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Only copy timestamp on outgoing packets if the depayloader did not set
+	  one.
+	  Also copy duration on outgoing packets.
+
+2007-09-19 15:55:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Fix compilation because of missing %d in printf.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (copy_fixed),
+	  (gst_basertppayload_set_outcaps):
+	  Fix compilation because of missing %d in printf.
+	  When fixating caps, fixate what we can and throw away all remaining
+	  unfixed caps, subclasses should do something smart if they need to.
+
+2007-09-19 12:04:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Improve debug logs a bit and be more verbose if things go wrong.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Improve debug logs a bit and be more verbose if things go wrong.
+
+2007-09-17 17:24:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Fix a bunch of compile warnings shown with Forte.
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init),
+	  (gst_text_overlay_set_property):
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_ntp_to_unix),
+	  (gst_rtcp_unix_to_ntp):
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (gst_rtsp_message_get_type):
+	  * gst/playback/gstqueue2.c:
+	  * tests/examples/seek/seek.c: (set_scale):
+	  Fix a bunch of compile warnings shown with Forte.
+	  * gst/audiorate/gstaudiorate.c:
+	  Always pull in config.h before including any system headers.
+
+2007-09-17 16:22:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Also fix #476514 for queue2.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (update_buffering),
+	  (gst_queue_locked_flush), (gst_queue_locked_enqueue),
+	  (gst_queue_handle_sink_event), (gst_queue_chain),
+	  (gst_queue_push_one), (gst_queue_sink_activate_push),
+	  (gst_queue_src_activate_push), (gst_queue_src_activate_pull):
+	  Also fix #476514 for queue2.
+
+2007-09-16 19:31:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Remove code to deal with RTP to GST time conversion, we now just copy the GST...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_init), (gst_base_rtp_depayload_setcaps),
+	  (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_handle_sink_event),
+	  (gst_base_rtp_depayload_push_full),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_change_state):
+	  Remove code to deal with RTP to GST time conversion, we now just copy
+	  the GST timestamp we receive to the outgoing buffers.
+	  Handle segment and flushes correctly.
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push):
+	  When we have no valid input timestamp, use the previous rtp timestamp on
+	  the outgoing RTP packet instead of the RTP base time.
+
+2007-09-16 01:56:21 +0000  David Schleef <ds@schleef.org>
+
+	  ext/alsa/: Change alsa alloca's to malloc to fix warnings on gcc-4.2.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c:
+	  * ext/alsa/gstalsadeviceprobe.c:
+	  * ext/alsa/gstalsamixer.c:
+	  * ext/alsa/gstalsasink.c:
+	  * ext/alsa/gstalsasrc.c:
+	  Change alsa alloca's to malloc to fix warnings on gcc-4.2.
+
+2007-09-15 18:41:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Add some debug info when negotiating caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_set_outcaps), (gst_basertppayload_push):
+	  Add some debug info when negotiating caps.
+
+2007-09-15 00:29:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: A buffer with an empty payload is also a valid buffer.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data):
+	  A buffer with an empty payload is also a valid buffer.
+
+2007-09-14 20:52:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Make sure we start our RTP timestamp from the random base RTP timestamp even if...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_event),
+	  (gst_basertppayload_set_outcaps), (gst_basertppayload_push),
+	  (gst_basertppayload_change_state):
+	  Make sure we start our RTP timestamp from the random base RTP
+	  timestamp even if the buffer timestamp starts from some random value.
+
+2007-09-14 16:56:16 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add simple exmple app to demonstrate starting and pausing live and non-live bins in a PLAYING pipeline.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/examples/Makefile.am:
+	  * tests/examples/dynamic/.cvsignore:
+	  * tests/examples/dynamic/Makefile.am:
+	  * tests/examples/dynamic/addstream.c: (create_stream),
+	  (pause_play_stream), (message_received), (eos_message_received),
+	  (perform_step), (main):
+	  Add simple exmple app to demonstrate starting and pausing live and
+	  non-live bins in a PLAYING pipeline.
+
+2007-09-14 10:42:00 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add some typefind for QCP files (RFC #3625)
+	  Original commit message from CVS:
+	  2007-09-14  Julien MOUTTE  <julien@moutte.net>
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init): Add some
+	  typefind for QCP files (RFC #3625)
+
+2007-09-13 22:52:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Disable pull mode scheduling, we're not ready for it yet and it subtly breaks ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_init):
+	  Disable pull mode scheduling, we're not ready for it yet and it subtly
+	  breaks a lot of things.
+
+2007-09-12 17:35:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/libvisual.c: Test all libvisual plugins, not just the first one; this reproduces bug #450336 qui...
+	  Original commit message from CVS:
+	  * tests/check/elements/libvisual.c:
+	  Test all libvisual plugins, not just the first one; this reproduces
+	  bug #450336 quite easily.  Looks like a problem with the 'jess'
+	  visualisation.
+
+2007-09-12 17:15:12 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add basic libvisual test case in an attempt to reproduce bug #450336.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/libvisual.c:
+	  Add basic libvisual test case in an attempt to reproduce bug #450336.
+	  Doesn't reproduce that bug, but some other crasher instead (invalid
+	  free), at least with make elements/libvisual.forever and the bumscope
+	  plugin on x86-64/gutsy. Leaving test disabled for now.
+
+2007-09-12 08:38:21 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst/: Printf format fixes (#476128).
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst/flv/gstflvdemux.c:
+	  * gst/flv/gstflvparse.c:
+	  * gst/interleave/deinterleave.c:
+	  * gst/switch/gstswitch.c:
+	  Printf format fixes (#476128).
+
+2007-09-11 19:07:57 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.c: Make sure we can not cancel in the middle of receiving a message.
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_read_internal), (gst_rtsp_connection_read),
+	  (read_body), (gst_rtsp_connection_receive):
+	  Make sure we can not cancel in the middle of receiving a message.
+	  Fixes #475731.
+
+2007-09-11 11:29:12 +0000  Josep Torra Valles <josep@fluendo.com>
+
+	  gst/playback/gstplaybasebin.c: Increase upper limit for audio queue a bit; fixes preroll problem with playbin and dec...
+	  Original commit message from CVS:
+	  Patch by: Josep Torra Valles <josep@fluendo.com>
+	  * gst/playback/gstplaybasebin.c:
+	  Increase upper limit for audio queue a bit; fixes preroll problem
+	  with playbin and decodebin2 when playing a quicktime trailer with
+	  multichannel audio via http (#464666).
+
+2007-09-10 22:10:54 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.*: Allow othe clocks than the internal clock to be used for the pipeline.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init), (gst_base_audio_src_init),
+	  (gst_base_audio_src_provide_clock),
+	  (gst_base_audio_src_set_property),
+	  (gst_base_audio_src_get_property), (gst_base_audio_src_create):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  Allow othe clocks than the internal clock to be used for the pipeline.
+	  Add property to disable clock provide.
+	  API: GstBaseAudioSrc::provide-clock
+
+2007-09-10 12:05:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gstdecodebin2.c: Don't leak request pads. Fixes #475395.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  Don't leak request pads. Fixes #475395.
+
+2007-09-09 10:25:43 +0000  René Stadler <mail@renestadler.de>
+
+	  sys/: Correctly chain up finalize with the parent class to prevent memory leaks. Fixes #474880.
+	  Original commit message from CVS:
+	  Patch by: René Stadler <mail at renestadler dot de>
+	  * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
+	  (gst_ximage_buffer_class_init):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimage_buffer_class_init):
+	  Correctly chain up finalize with the parent class to prevent
+	  memory leaks. Fixes #474880.
+
+2007-09-09 04:08:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Revert the latest change: floating point samples are allowed to have any value, not only values in the range [-1,1]. ...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_choose_func):
+	  * tests/check/elements/volume.c: (GST_START_TEST):
+	  Revert the latest change: floating point samples are allowed to
+	  have any value, not only values in the range [-1,1]. Thanks to Andy
+	  Wingo for noticing.
+	  Also fix processing of int32 samples with volumes > 4 by making the
+	  unity value smaller which prevents overflows.
+
+2007-09-07 17:37:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Fix gst_rtp_buffer_set_csrc() and enable csrc-related unit test checks.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  * tests/check/libs/rtp.c:
+	  Fix gst_rtp_buffer_set_csrc() and enable csrc-related unit test checks.
+
+2007-09-07 16:46:05 +0000  Haakon Sporsheim <haakon.sporsheim@tandberg.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Fix up GstRTPHeader helper struct so that compilers will not under any circumstances...
+	  Original commit message from CVS:
+	  Based on patch by: Haakon Sporsheim  <haakon.sporsheim at tandberg com>
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  Fix up GstRTPHeader helper struct so that compilers will not under
+	  any circumstances add padding in between our fields, as currently
+	  happens with MSVC on win32, because that would lead to us sending
+	  out RTP payloads with broken RTP headers (#471194).
+	  Fix assertion guards for gst_rtp_buffer_get_csrc() and _set_csrc().
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/.cvsignore:
+	  * tests/check/libs/rtp.c:
+	  Add some simple unit tests for GstRTPBuffer. Some are disabled
+	  because the code tested still needs fixing (set_csrc() does not work).
+
+2007-09-07 15:05:24 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update spec file to include latest RTSP libraries and headers and more
+	  Original commit message from CVS:
+	  update spec file to include latest RTSP libraries and headers and more
+
+2007-09-07 12:41:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  win32/: Add rtsp enumtypes (#474384) and update others.
+	  Original commit message from CVS:
+	  * win32/MANIFEST:
+	  * win32/common/gstrtsp-enumtypes.c:
+	  * win32/common/gstrtsp-enumtypes.h:
+	  * win32/common/interfaces-enumtypes.c:
+	  * win32/common/interfaces-enumtypes.h:
+	  * win32/common/multichannel-enumtypes.c:
+	  Add rtsp enumtypes (#474384) and update others.
+
+2007-09-06 20:31:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Fix configure check for HAVE_LIBXML_HTML.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Fix configure check for HAVE_LIBXML_HTML.
+
+2007-09-06 12:14:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/.cvsignore: Ignore more, in case the build bots work again one day.
+	  Original commit message from CVS:
+	  * tests/check/libs/.cvsignore:
+	  Ignore more, in case the build bots work again one day.
+
+2007-09-06 07:00:36 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  Add libgstfft, a FFT library based on Kiss FFT which is
+	  Original commit message from CVS:
+	  Reviewed by:  Stefan Kost  <ensonic@users.sf.net>
+	  * configure.ac:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/fft/Makefile.am:
+	  * gst-libs/gst/fft/_kiss_fft_guts_f32.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_f64.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_s16.h:
+	  * gst-libs/gst/fft/_kiss_fft_guts_s32.h:
+	  * gst-libs/gst/fft/gstfft.c: (gst_fft_next_fast_length):
+	  * gst-libs/gst/fft/gstfft.h:
+	  * gst-libs/gst/fft/gstfftf32.c: (gst_fft_f32_new),
+	  (gst_fft_f32_fft), (gst_fft_f32_inverse_fft), (gst_fft_f32_free),
+	  (gst_fft_f32_window), (gst_fft_f32_magnitude), (gst_fft_f32_phase):
+	  * gst-libs/gst/fft/gstfftf32.h:
+	  * gst-libs/gst/fft/gstfftf64.c: (gst_fft_f64_new),
+	  (gst_fft_f64_fft), (gst_fft_f64_inverse_fft), (gst_fft_f64_free),
+	  (gst_fft_f64_window), (gst_fft_f64_magnitude), (gst_fft_f64_phase):
+	  * gst-libs/gst/fft/gstfftf64.h:
+	  * gst-libs/gst/fft/gstffts16.c: (gst_fft_s16_new),
+	  (gst_fft_s16_fft), (gst_fft_s16_inverse_fft), (gst_fft_s16_free),
+	  (gst_fft_s16_window), (gst_fft_s16_magnitude), (gst_fft_s16_phase):
+	  * gst-libs/gst/fft/gstffts16.h:
+	  * gst-libs/gst/fft/gstffts32.c: (gst_fft_s32_new),
+	  (gst_fft_s32_fft), (gst_fft_s32_inverse_fft), (gst_fft_s32_free),
+	  (gst_fft_s32_window), (gst_fft_s32_magnitude), (gst_fft_s32_phase):
+	  * gst-libs/gst/fft/gstffts32.h:
+	  * gst-libs/gst/fft/kiss_fft_f32.c: (kf_bfly2), (kf_bfly4),
+	  (kf_bfly3), (kf_bfly5), (kf_bfly_generic), (kf_work), (kf_factor),
+	  (kiss_fft_f32_alloc), (kiss_fft_f32_stride), (kiss_fft_f32),
+	  (kiss_fft_f32_cleanup), (kiss_fft_f32_next_fast_size):
+	  * gst-libs/gst/fft/kiss_fft_f32.h:
+	  * gst-libs/gst/fft/kiss_fft_f64.c: (kf_bfly2), (kf_bfly4),
+	  (kf_bfly3), (kf_bfly5), (kf_bfly_generic), (kf_work), (kf_factor),
+	  (kiss_fft_f64_alloc), (kiss_fft_f64_stride), (kiss_fft_f64),
+	  (kiss_fft_f64_cleanup), (kiss_fft_f64_next_fast_size):
+	  * gst-libs/gst/fft/kiss_fft_f64.h:
+	  * gst-libs/gst/fft/kiss_fft_s16.c: (kf_bfly2), (kf_bfly4),
+	  (kf_bfly3), (kf_bfly5), (kf_bfly_generic), (kf_work), (kf_factor),
+	  (kiss_fft_s16_alloc), (kiss_fft_s16_stride), (kiss_fft_s16),
+	  (kiss_fft_s16_cleanup), (kiss_fft_s16_next_fast_size):
+	  * gst-libs/gst/fft/kiss_fft_s16.h:
+	  * gst-libs/gst/fft/kiss_fft_s32.c: (kf_bfly2), (kf_bfly4),
+	  (kf_bfly3), (kf_bfly5), (kf_bfly_generic), (kf_work), (kf_factor),
+	  (kiss_fft_s32_alloc), (kiss_fft_s32_stride), (kiss_fft_s32),
+	  (kiss_fft_s32_cleanup), (kiss_fft_s32_next_fast_size):
+	  * gst-libs/gst/fft/kiss_fft_s32.h:
+	  * gst-libs/gst/fft/kiss_fftr_f32.c: (kiss_fftr_f32_alloc),
+	  (kiss_fftr_f32), (kiss_fftri_f32):
+	  * gst-libs/gst/fft/kiss_fftr_f32.h:
+	  * gst-libs/gst/fft/kiss_fftr_f64.c: (kiss_fftr_f64_alloc),
+	  (kiss_fftr_f64), (kiss_fftri_f64):
+	  * gst-libs/gst/fft/kiss_fftr_f64.h:
+	  * gst-libs/gst/fft/kiss_fftr_s16.c: (kiss_fftr_s16_alloc),
+	  (kiss_fftr_s16), (kiss_fftri_s16):
+	  * gst-libs/gst/fft/kiss_fftr_s16.h:
+	  * gst-libs/gst/fft/kiss_fftr_s32.c: (kiss_fftr_s32_alloc),
+	  (kiss_fftr_s32), (kiss_fftri_s32):
+	  * gst-libs/gst/fft/kiss_fftr_s32.h:
+	  * gst-libs/gst/fft/kiss_version:
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-plugins-base.pc.in:
+	  Add libgstfft, a FFT library based on Kiss FFT which is
+	  BSD licensed. Supported sample formats are int16, int32,
+	  float and double. For those formats a real FFT and IFFT
+	  can be done, different windowing functions can be applied
+	  and functions for extracting the magnitude and phase exist.
+	  Fixes #468619.
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Integrate libgstfft into the docs.
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/fft.c: (GST_START_TEST), (fft_suite), (main):
+	  Add unit tests for libgstfft, currently only testing the FFT.
+	  Unit tests for IFFT will follow soon.
+
+2007-09-05 23:07:40 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.*: Separate INIT_ARRAY() and related macros into two versions, one for structures and ...
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_time_init),
+	  (gst_sdp_message_init), (gst_sdp_message_uninit),
+	  (is_multicast_address), (gst_sdp_message_as_text),
+	  (gst_sdp_message_get_origin), (gst_sdp_message_set_connection),
+	  (gst_sdp_message_get_connection), (gst_sdp_message_add_bandwidth),
+	  (gst_sdp_message_add_time), (gst_sdp_message_add_zone),
+	  (gst_sdp_message_get_key), (gst_sdp_message_get_attribute_val_n),
+	  (gst_sdp_message_get_attribute_val), (gst_sdp_message_add_media),
+	  (gst_sdp_media_init), (gst_sdp_media_uninit),
+	  (gst_sdp_media_as_text), (gst_sdp_media_set_port_info),
+	  (gst_sdp_media_connections_len), (gst_sdp_media_add_connection),
+	  (gst_sdp_media_bandwidths_len), (gst_sdp_media_get_bandwidth),
+	  (gst_sdp_media_add_bandwidth), (gst_sdp_media_attributes_len),
+	  (gst_sdp_parse_line), (print_media), (gst_sdp_message_dump):
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  Separate INIT_ARRAY() and related macros into two versions, one for
+	  structures and one for pointers (e.g., INIT_ARRAY() and
+	  INIT_PTR_ARRAY()). This fixes a segmentation error on freeing the
+	  lists of emails and phone numbers.
+	  Add missing const as appropriate.
+	  Change all gint to guint since they all actually represent unsigned
+	  values.
+	  Do not use time as a variable name as it shadows the global time().
+	  Add gst_sdp_message_as_text() and gst_sdp_media_as_text().
+	  Actually implement gst_sdp_message_add_time().
+	  Make gst_sdp_message_add_time() take repeat times as an argument.
+	  Store repeat times in GstSDPTime as a GArray rather than as gchar**.
+	  Corrected the definition of gst_sdp_media_get_bandwidth() (was
+	  misspelled as badwidth).
+	  gst-indented and a little clean up. Fixes #471067.
+
+2007-09-05 21:20:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/volume/gstvolume.c: Correctly clamp float/double samples in the [-1.0,1.0] range to prevent weird effects.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (volume_process_double), (volume_process_double_clamp),
+	  (volume_process_float_clamp):
+	  Correctly clamp float/double samples in the [-1.0,1.0] range to
+	  prevent weird effects.
+	  * tests/check/elements/volume.c: (GST_START_TEST), (volume_suite):
+	  Add unit tests for all samples types that had none before.
+
+2007-09-05 14:09:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.c: Need to include stdlib.h for abs() here too.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  Need to include stdlib.h for abs() here too.
+
+2007-09-05 14:01:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreaminfo.c: Fix build.
+	  Original commit message from CVS:
+	  * gst/playback/gststreaminfo.c:
+	  Fix build.
+
+2007-09-05 10:32:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/gststreaminfo.c: Clean up some half-disabled code and comment.
+	  Original commit message from CVS:
+	  * gst/playback/gststreaminfo.c:
+	  Clean up some half-disabled code and comment.
+
+2007-09-04 16:18:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Return FALSE from the event handler to let the parent class handle the event.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_payload_audio_handle_event):
+	  Return FALSE from the event handler to let the parent class handle the
+	  event.
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain), (gst_base_rtp_depayload_push_full):
+	  Mark outgoing buffers as DISCONT if the incomming buffer was DISCONT.
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  Bump the MTU to 1400.
+
+2007-09-04 01:50:55 +0000  Johan Dahlin <johan@gnome.org>
+
+	  gst/typefind/gsttypefindfunctions.c (plugin_init): Add an audio/x-nsf typefind function for the nsfdec element.
+	  Original commit message from CVS:
+	  2007-09-03  Johan Dahlin  <jdahlin@async.com.br>
+	  * gst/typefind/gsttypefindfunctions.c (plugin_init):
+	  Add an audio/x-nsf typefind function for the nsfdec element.
+
+2007-09-03 20:46:38 +0000  Renato Filho <renato.filho@indt.org.br>
+
+	  gst/playback/gstplaybasebin.c: Included "myth://" on stream_uris list for enable buffering to mythtv files
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  Included "myth://" on stream_uris list for enable buffering to mythtv files
+
+2007-09-03 19:31:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Fix parsing of RB blocks.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_packet_get_rb),
+	  (gst_rtcp_packet_sdes_copy_entry), (gst_rtcp_ntp_to_unix),
+	  (gst_rtcp_unix_to_ntp):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Fix parsing of RB blocks.
+	  Fix docs.
+	  Added helper functions to convert to/from UNIX and NTP time.
+	  API: gst_rtcp_ntp_to_unix()
+	  API: gst_rtcp_unix_to_ntp()
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data),
+	  (gst_rtp_buffer_get_header_len),
+	  (gst_rtp_buffer_get_extension_data),
+	  (gst_rtp_buffer_get_payload_subbuffer),
+	  (gst_rtp_buffer_get_payload_len), (gst_rtp_buffer_get_payload),
+	  (gst_rtp_buffer_ext_timestamp):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Fix some more docs.
+	  Implement handling of packets with extensions.
+	  Fix padding check in _validate().
+	  Added function to get extension data.
+	  API: gst_rtp_buffer_get_header_len()
+	  API: gst_rtp_buffer_get_extension_data()
+
+2007-09-03 19:19:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Add some more docs for the queue-delay property and fix a typo in a comment.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_class_init),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Add some more docs for the queue-delay property and fix a typo in a
+	  comment.
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push):
+	  Fix typo.
+
+2007-09-03 19:17:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: When skew slaving, try to hover around the middle of a segment so that we at m...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_skew_slaving), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_change_state):
+	  When skew slaving, try to hover around the middle of a segment so that
+	  we at most drift by half a segment.
+	  If we are aligning in the oposite direction of the clock skew, we don't
+	  have to resync.
+
+2007-08-31 21:07:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Be less silly with the segment start, just apply the clock-base to the timest...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Be less silly with the segment start, just apply the clock-base to the
+	  timestamp.
+
+2007-08-31 15:58:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Deprecate the queue handling thread thing and remove the code.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_class_init),
+	  (gst_base_rtp_depayload_finalize),
+	  (gst_base_rtp_depayload_setcaps), (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_handle_sink_event),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_change_state):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Deprecate the queue handling thread thing and remove the code.
+	  Use new method to calculate the extended timestamp.
+
+2007-08-31 15:21:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.c: Use g_strndup which does exactly what we want.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  (gst_rtcp_packet_sdes_copy_entry):
+	  Use g_strndup which does exactly what we want.
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_compare_seqnum),
+	  (gst_rtp_buffer_ext_timestamp):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Add helper function to compare seqnums.
+	  Add helper function to calculate extended timestamps.
+	  API: gst_rtp_buffer_compare_seqnum()
+	  API: gst_rtp_buffer_ext_timestamp()
+
+2007-08-30 21:59:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.*: Fix and document SDES item data function.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  (gst_rtcp_packet_sdes_get_entry),
+	  (gst_rtcp_packet_sdes_copy_entry):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Fix and document SDES item data function.
+	  Add new function that makes a proper copy of SDES item data.
+	  API: gst_rtcp_packet_sdes_copy_entry()
+
+2007-08-30 07:29:55 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  The tcp and subparse plugins are under gst, but not totaly free of dependencies. Handle selection inconfigure.ac, so ...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/Makefile.am:
+	  The tcp and subparse plugins are under gst, but not totaly free of
+	  dependencies. Handle selection inconfigure.ac, so that they show up
+	  on the final list of what is build and what is not. Maybe they should
+	  better be moved to ext.
+
+2007-08-30 06:58:46 +0000  Daniel Díaz <yosoy@danieldiaz.org>
+
+	  Check if libxml provides HTML parser which subparse needs.
+	  Original commit message from CVS:
+	  Patch by: Daniel Díaz  <yosoy@danieldiaz.org>
+	  * configure.ac:
+	  * gst/Makefile.am:
+	  Check if libxml provides HTML parser which subparse needs.
+	  Fixes #451970.
+
+2007-08-29 14:22:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsa.c: Fix typo and compilation on big endian systems.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c:
+	  Fix typo and compilation on big endian systems.
+
+2007-08-29 12:16:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstssaparse.c: Convert SSA newline codes into actual newline characters (#470766).
+	  Original commit message from CVS:
+	  * gst/subparse/gstssaparse.c:
+	  Convert SSA newline codes into actual newline characters (#470766).
+
+2007-08-28 14:58:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: also add gst_install_plugins_supported() while we're at it (see #470456).
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  * gst-libs/gst/pbutils/install-plugins.h:
+	  * tests/check/libs/pbutils.c:
+	  API: also add gst_install_plugins_supported() while we're at it
+	  (see #470456).
+
+2007-08-28 14:23:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add gst_missing_*_installer_detail_new() convenience API so that applications that know exactly what they're mis...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  * gst-libs/gst/pbutils/missing-plugins.h:
+	  * tests/check/libs/pbutils.c:
+	  API: add gst_missing_*_installer_detail_new() convenience API so
+	  that applications that know exactly what they're missing can request
+	  installer detail strings for those items directly instead of having
+	  to first create a dummy missing-plugin message and then get the
+	  installer detail string from that.  Fixes #470456.
+
+2007-08-27 11:59:56 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: We need to set up delayed-linking whenever the caps are non-fixed, not just when there a...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (close_pad_link):
+	  We need to set up delayed-linking whenever the caps are non-fixed,
+	  not just when there are multiple types - use gst_pad_is_fixed()
+	  to test.
+
+2007-08-26 14:14:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/missing-plugins.c: Add missing separator in PID fallback case.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  (gst_missing_plugin_message_get_installer_detail):
+	  Add missing separator in PID fallback case.
+
+2007-08-24 15:28:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/alsa/Makefile.am: There is no GST_PLUGINS_BASE_LIBS defined.
+	  Original commit message from CVS:
+	  * ext/alsa/Makefile.am:
+	  There is no GST_PLUGINS_BASE_LIBS defined.
+	  * ext/alsa/gstalsa.c:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_delay):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_delay):
+	  Add support for ALSA 24-bit formats.
+	  snd_pcm_delay can return an error code, especially
+	  during XRUNS. In that case, the best we can do is assume
+	  delay = 0.
+	  * gst/audioconvert/Makefile.am:
+	  Add flags from -base before any more-remote dependencies.
+
+2007-08-23 20:45:45 +0000  Davyd <davyd@madeley.id.au>
+
+	  gst/volume/gstvolume.*: Add support for int32, int24 and int8 to the volume element.
+	  Original commit message from CVS:
+	  Based on a patch by: Davyd <davyd at madeley dot id dot au>
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (volume_update_real_volume), (gst_volume_set_volume),
+	  (gst_volume_init), (volume_process_int32),
+	  (volume_process_int32_clamp), (volume_process_int24),
+	  (volume_process_int24_clamp), (volume_process_int16),
+	  (volume_process_int16_clamp), (volume_process_int8),
+	  (volume_process_int8_clamp), (volume_update_volume), (plugin_init):
+	  * gst/volume/gstvolume.h:
+	  Add support for int32, int24 and int8 to the volume element.
+	  Fixes #445529.
+
+2007-08-23 12:37:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/examples/Makefile.am: Fix even more.
+	  Original commit message from CVS:
+	  * tests/examples/Makefile.am:
+	  Fix even more.
+
+2007-08-23 10:58:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Revert unwanted commit. many thanks to moap. I want a fix for https://thomas.apestaart.org/moap/trac/ticket/239
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  * gst-libs/gst/Makefile.am:
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-plugins-base.pc.in:
+	  * sys/v4l/v4lsrc_calls.c:
+	  * tests/examples/Makefile.am:
+	  * win32/common/config.h:
+	  Revert unwanted commit. many thanks to moap. I want a fix for
+	  https://thomas.apestaart.org/moap/trac/ticket/239
+
+2007-08-23 08:33:43 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	* ChangeLog:
+	* configure.ac:
+	* docs/libs/Makefile.am:
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* ext/gnomevfs/gstgnomevfssrc.c:
+	* ext/gnomevfs/gstgnomevfssrc.h:
+	* gst-libs/gst/Makefile.am:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	* gst/typefind/gsttypefindfunctions.c:
+	* gst/volume/gstvolume.c:
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-base.pc.in:
+	* sys/v4l/v4lsrc_calls.c:
+	* tests/examples/Makefile.am:
+	* win32/common/config.h:
+	  Original commit message from CVS: reviewed by: <delete if not using a buddy> patch by: <delete if not someone else's patch> * configure.ac: * docs/libs/Makefile.am: * docs/libs/gst-plugins-base-libs-docs.sgml: * docs/libs/gst-plugins-base-libs-sections.txt: * ext/gnomevfs/gstgnomevfssrc.c: * ext/gnomevfs/gstgnomevfssrc.h: * gst-libs/gst/Makefile.am: * gst-libs/gst/audio/gstaudiofilter.h: * gst/typefind/gsttypefindfunctions.c: * gst/volume/gstvolume.c: * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in: * pkgconfig/gstreamer-plugins-base.pc.in: * sys/v4l/v4lsrc_calls.c: * tests/examples/Makefile.am: * win32/common/config.h:
+
+2007-08-22 15:29:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/audio.c: Clarify the docs a little.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.c:
+	  Clarify the docs a little.
+
+2007-08-22 11:20:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/volume/gstvolume.c: Enable liboil for float and add more details about problems with int16.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c:
+	  Enable liboil for float and add more details about problems with
+	  int16.
+
+2007-08-21 15:43:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/v4l/gstv4lsrc.c: Fix RGB24 masks as spotted by _ke (Daniel G. Siegel) on IRC.
+	  Original commit message from CVS:
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
+	  Fix RGB24 masks as spotted by _ke (Daniel G. Siegel) on IRC.
+
+2007-08-21 12:08:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: When calculating the first timestamp of the buffers, don't go below 0 and clip the samples be...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_push_forward):
+	  When calculating the first timestamp of the buffers, don't go below 0
+	  and clip the samples because the offset was on the eos page.
+	  Fixes #466717.
+
+2007-08-21 11:42:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Also submit the eos page when trying to find the first timestamp.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain),
+	  (gst_ogg_demux_collect_chain_info):
+	  Also submit the eos page when trying to find the first timestamp.
+	  See #466717.
+
+2007-08-17 15:24:43 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/audio/audio.h: Use gst_util_uint64_scale() instead of doing the math with double for GST_FRAMES_TO_CLOCK...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.h:
+	  Use gst_util_uint64_scale() instead of doing the math
+	  with double for GST_FRAMES_TO_CLOCK_TIME() and
+	  GST_CLOCK_TIME_TO_FRAMES(). For large timestamps this
+	  prevents rounding errors. Fixes #467667.
+
+2007-08-17 13:42:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspconnection.*: Small cleanups.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect), (gst_rtsp_connection_write),
+	  (gst_rtsp_connection_read), (gst_rtsp_connection_poll):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  Small cleanups.
+	  On shutdown, don't read the control socket yet.
+	  Set timeout value correctly in all cases.
+	  Add function to check if the server accepts reads or writes.
+	  API: gst_rtsp_connection_poll()
+	  * gst-libs/gst/rtsp/gstrtspdefs.h:
+	  Fix compilation with -pedantic.
+	  Add enum for _poll.
+
+2007-08-16 17:11:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.c: Override the preroll vmethod instead of overriding the render method twice.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_class_init):
+	  Override the preroll vmethod instead of overriding the render method
+	  twice.
+
+2007-08-16 16:06:21 +0000  Olivier Crete <tester@tester.ca>
+
+	  gst-libs/gst/rtp/gstbasertppayload.*: Add getcaps vfunc to basertppayload. See #465146.
+	  Original commit message from CVS:
+	  Patch by: Olivier Crete  <tester at tester ca>
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_init),
+	  (gst_basertppayload_getcaps):
+	  * gst-libs/gst/rtp/gstbasertppayload.h:
+	  Add getcaps vfunc to basertppayload. See #465146.
+
+2007-08-16 11:20:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Only post buffering messages when we are a stream.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (queue_threshold_reached):
+	  Only post buffering messages when we are a stream.
+
+2007-08-15 17:05:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/: Small docs fix and addition.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  Small docs fix and addition.
+
+2007-08-14 17:47:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.c: Don't use new API.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_flush_unlocked):
+	  Don't use new API.
+
+2007-08-14 17:38:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/app/gstappsink.*: Make love to appsink.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsink.c: (gst_app_sink_base_init),
+	  (gst_app_sink_class_init), (gst_app_sink_dispose),
+	  (gst_app_sink_flush_unlocked), (gst_app_sink_start),
+	  (gst_app_sink_stop), (gst_app_sink_event), (gst_app_sink_preroll),
+	  (gst_app_sink_render), (gst_app_sink_get_caps),
+	  (gst_app_sink_set_caps), (gst_app_sink_end_of_stream),
+	  (gst_app_sink_pull_preroll), (gst_app_sink_pull_buffer):
+	  * gst-libs/gst/app/gstappsink.h:
+	  Make love to appsink.
+	  Make it support pulling of the preroll buffer.
+	  Add docs and debug statements.
+	  Fix some races wrt to EOS handling and stopping.
+	  Implement getcaps.
+	  Implement FLUSHING.
+	  API: gst_app_sink_pull_preroll()
+
+2007-08-13 15:37:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/icles/: Add a dumb little test for textoverlay alignments.
+	  Original commit message from CVS:
+	  * tests/icles/.cvsignore:
+	  * tests/icles/Makefile.am:
+	  * tests/icles/test-textoverlay.c:
+	  Add a dumb little test for textoverlay alignments.
+
+2007-08-13 15:26:54 +0000  Dan Williams <dcbw@redhat.com>
+
+	  ext/pango/gsttextoverlay.*: API: add "line-alignment" property (#459334). Add gtk-doc blurb for "silent" property so ...
+	  Original commit message from CVS:
+	  Patch by: Dan Williams  <dcbw redhat com>
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextoverlay.h:
+	  API: add "line-alignment" property (#459334). Add gtk-doc blurb for
+	  "silent" property so there's a Since tag in the API reference.
+
+2007-08-13 11:21:00 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	  fix ... by: lines
+	  Original commit message from CVS:
+	  fix ... by: lines
+
+2007-08-12 16:30:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.*: Improve caps negotiation so that downstream elements can confiure certain RTP p...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_set_outcaps):
+	  * gst-libs/gst/rtp/gstbasertppayload.h:
+	  Improve caps negotiation so that downstream elements can confiure
+	  certain RTP properties by fixing them on the caps. See #465146.
+	  Add docs.
+
+2007-08-11 12:39:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Mark as deprecated some macros which were presumably meant to be private API and accidentally exposed in the public h...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Mark as deprecated some macros which were presumably meant to be
+	  private API and accidentally exposed in the public header file.
+	  Also actually _init() lock (only works at the moment because the
+	  struct is zeroed out when created and the initial values in the
+	  mutex struct are zeroes too). (#459585)
+
+2007-08-10 17:35:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/Makefile.am: Remove cruft and do some cleanups.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  Remove cruft and do some cleanups.
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  Prepare for comming gtkdoc features (rebase against online docs).
+
+2007-08-10 13:55:44 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: Debug output fixes.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  Debug output fixes.
+	  * tests/check/elements/audiorate.c: (do_perfect_stream_test),
+	  (GST_START_TEST):
+	  Change the number of buffers used; 500 is too many and leads to
+	  timeouts.
+
+2007-08-10 10:08:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: Printf format fixes (#465028).
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c:
+	  * gst/videorate/gstvideorate.c:
+	  Printf format fixes (#465028).
+
+2007-08-09 15:44:02 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: If we have a large (> 1 second) discontinuity, push a series of smaller buffers rather ...
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  If we have a large (> 1 second) discontinuity, push a series of
+	  smaller buffers rather than a single very large buffer. Avoids
+	  unreasonably large single buffer allocations when encountering a
+	  large gap.
+	  * tests/check/elements/audiorate.c: (GST_START_TEST),
+	  (audiorate_suite):
+	  Add a test for this.
+
+2007-08-09 12:06:43 +0000  Josep Torra Valles <josep@fluendo.com>
+
+	  gst/playback/gstplaybasebin.c: Fixes: #465015
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (group_commit),
+	  (queue_remove_probe), (queue_threshold_reached):
+	  Patch by: Josep Torra Valles <josep@fluendo.com>
+	  Fixes: #465015
+	  Make sure we remove the check_queues buffer probe from the
+	  correct queue to avoid racily going back to "buffering 99%" when
+	  buffering is actually complete.
+	  Also, fix the spelling of Josep's surname in the ChangeLog.
+
+2007-08-09 11:37:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/ogg/gstoggmux.c: Do not leak oggmux instance.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  Do not leak oggmux instance.
+	  * ext/vorbis/vorbisenc.c:
+	  Also log values.
+
+2007-08-09 10:51:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/: Updated translations.
+	  Original commit message from CVS:
+	  * po/hu.po:
+	  * po/it.po:
+	  * po/nl.po:
+	  * po/uk.po:
+	  * po/vi.po:
+	  Updated translations.
+
+2007-08-08 16:07:21 +0000  Yang Hong <hongyang@redflag-linux.com>
+
+	  ext/pango/gsttextoverlay.*: Add 'silent' property to GstTimeOverlay. Fixes #462979
+	  Original commit message from CVS:
+	  patch by: Yang Hong <hongyang@redflag-linux.com>
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextoverlay.h:
+	  Add 'silent' property to GstTimeOverlay. Fixes #462979
+
+2007-08-08 15:05:22 +0000  Josep Torre Valles <josep@fluendo.com>
+
+	  Add connection-speed property. Fixes #464690.
+	  Original commit message from CVS:
+	  Patch by: Josep Torre Valles <josep@fluendo.com>
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init),
+	  (gst_uri_decode_bin_init), (gst_uri_decode_bin_set_property),
+	  (gst_uri_decode_bin_get_property), (gen_source_element):
+	  Add connection-speed property. Fixes #464690.
+
+2007-08-07 15:13:46 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+	  Fix compilation on windows. Fixes #464320.
+	  Original commit message from CVS:
+	  Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+	  * configure.ac:
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect):
+	  Fix compilation on windows. Fixes #464320.
+
+2007-08-07 14:14:54 +0000  Josep Torre Valles <josep@fluendo.com>
+
+	  gst/playback/: Move connection-speed property from playbin to playbasebin so that we can also configure it in source ...
+	  Original commit message from CVS:
+	  Patch by: Josep Torre Valles <josep@fluendo.com>
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (gst_play_base_bin_init), (queue_threshold_reached),
+	  (gen_source_element), (setup_substreams),
+	  (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+	  (gst_play_base_bin_get_streaminfo_value_array):
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+	  (gst_play_bin_set_property), (gst_play_bin_get_property),
+	  (gst_play_bin_handle_redirect_message):
+	  Move connection-speed property from playbin to playbasebin so that we
+	  can also configure it in source elements that have the connection-speed
+	  property. Fixes #464028.
+	  Add some debug info here and there.
+
+2007-08-06 16:42:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Properly respond to conversion queries. Fixes #464079.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_query):
+	  Properly respond to conversion queries. Fixes #464079.
+
+2007-08-03 19:53:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: Add float/double and int32 support to audiotestsrc. Fixes #460422.
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_init),
+	  (gst_audio_test_src_src_fixate), (gst_audio_test_src_setcaps),
+	  (gst_audio_test_src_init_sine_table),
+	  (gst_audio_test_src_change_wave), (gst_audio_test_src_create):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Add float/double and int32 support to audiotestsrc. Fixes #460422.
+	  Also set the default volume to the default value specified in the
+	  GParamSpec.
+
+2007-08-03 19:40:14 +0000  Jens Granseuer <jensgr@gmx.net>
+
+	  gst/audioconvert/gstaudioquantize.c: Fix C89 incompatibilities and spelling of explanations. Fixes #463215.
+	  Original commit message from CVS:
+	  Patch by: Jens Granseuer <jensgr at gmx dot net>
+	  * gst/audioconvert/gstaudioquantize.c:
+	  Fix C89 incompatibilities and spelling of explanations. Fixes #463215.
+
+2007-08-03 15:44:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtsptransport.c: Add rdt manager for rdt transport.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtsptransport.c: (gst_rtsp_transport_parse):
+	  Add rdt manager for rdt transport.
+	  Fix parsing of RDT transport.
+
+2007-08-03 14:43:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.14 ===
+
+2007-08-03 14:41:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-decodebin2.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/config.h:
+	  Release 0.10.14
+	  Original commit message from CVS:
+	  Release 0.10.14
+
+2007-08-03 14:24:08 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2007-07-27 17:37:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/libs/audio.c: Fix the test to reflect the behaviour of gst_audio_clip_buffer.
+	  Original commit message from CVS:
+	  * tests/check/libs/audio.c: (GST_START_TEST):
+	  Fix the test to reflect the behaviour of gst_audio_clip_buffer.
+
+2007-07-27 17:10:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/audio/audio.c: When clipping a buffer with no timestamp, assume it is within the segment without warnings.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.c:
+	  When clipping a buffer with no timestamp, assume it is
+	  within the segment without warnings.
+	  Fixes: #460978
+
+2007-07-27 11:16:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtsp/gstrtspextension.c: Fire the signal on the object, not the interface.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/gstrtspextension.c: (gst_rtsp_extension_send):
+	  Fire the signal on the object, not the interface.
+
+2007-07-27 09:17:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtsp/.cvsignore: Ber. Don't include the full path, idiot.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/.cvsignore:
+	  Ber. Don't include the full path, idiot.
+
+2007-07-27 08:29:29 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtsp/.cvsignore: Ignore generated files.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtsp/.cvsignore:
+	  Ignore generated files.
+
+2007-07-26 19:57:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/: Move the rtspextension.h interface into gstrtspextension.h as part of libgstrtsp instead of libgstinte...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  * gst-libs/gst/interfaces/interfaces-marshal.list:
+	  * gst-libs/gst/interfaces/rtspextension.c:
+	  * gst-libs/gst/interfaces/rtspextension.h:
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  * gst-libs/gst/rtsp/gstrtsp.h:
+	  * gst-libs/gst/rtsp/gstrtspextension.c:
+	  (gst_rtsp_extension_get_type), (gst_rtsp_extension_iface_init),
+	  (gst_rtsp_extension_detect_server),
+	  (gst_rtsp_extension_before_send), (gst_rtsp_extension_after_send),
+	  (gst_rtsp_extension_parse_sdp), (gst_rtsp_extension_setup_media),
+	  (gst_rtsp_extension_configure_stream),
+	  (gst_rtsp_extension_get_transports),
+	  (gst_rtsp_extension_stream_select), (gst_rtsp_extension_send):
+	  * gst-libs/gst/rtsp/gstrtspextension.h:
+	  * gst-libs/gst/rtsp/rtsp-marshal.list:
+	  Move the rtspextension.h interface into gstrtspextension.h
+	  as part of libgstrtsp instead of libgstinterfaces, because it's
+	  only for use within plugins, not applications.
+	  Add stuff to do the enum & marshal generation needed in libgstrtsp now.
+	  Use the GST_TYPE_RTSP_RESULT enum type for the return value of the
+	  signal that the GstRTSPExtension interface emits, since G_TYPE_ENUM
+	  is abstract.
+
+2007-07-26 15:48:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/interfaces/: Fix marshaller for the send signal.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  * gst-libs/gst/interfaces/interfaces-marshal.list:
+	  * gst-libs/gst/interfaces/rtspextension.c:
+	  (gst_rtsp_extension_iface_init),
+	  (gst_rtsp_extension_stream_select), (gst_rtsp_extension_send):
+	  * gst-libs/gst/interfaces/rtspextension.h:
+	  Fix marshaller for the send signal.
+	  Add URL to stream selection interface method.
+
+2007-07-26 15:35:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/riff/Makefile.am: Pull in our dependencies from -base before those from outside.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/Makefile.am:
+	  Pull in our dependencies from -base before those from outside.
+
+2007-07-26 14:33:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  API: gst_rtsp_base64_decode_ip()
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtsp/gstrtspbase64.c: (gst_rtsp_base64_decode_ip):
+	  * gst-libs/gst/rtsp/gstrtspbase64.h:
+	  API: gst_rtsp_base64_decode_ip()
+	  Added function to decode Base64 in-place.
+
+2007-07-26 14:08:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/libs/.cvsignore: Ignore the mixer test binary.
+	  Original commit message from CVS:
+	  * tests/check/libs/.cvsignore:
+	  Ignore the mixer test binary.
+
+2007-07-26 10:00:37 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/vorbis/vorbisdec.c: Gratuitous comment change to trigger a rebuild on the buildbots.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_push_forward):
+	  Gratuitous comment change to trigger a rebuild on the buildbots.
+
+2007-07-25 18:20:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/sdp/gstsdpmessage.*: Constify args where we can.
+	  Original commit message from CVS:
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_media_get_media),
+	  (gst_sdp_media_get_port), (gst_sdp_media_get_num_ports),
+	  (gst_sdp_media_get_proto), (gst_sdp_media_formats_len),
+	  (gst_sdp_media_get_format), (gst_sdp_media_get_information),
+	  (gst_sdp_media_connections_len), (gst_sdp_media_get_connection),
+	  (gst_sdp_media_bandwidths_len), (gst_sdp_media_get_badwidth),
+	  (gst_sdp_media_get_key), (gst_sdp_media_attributes_len),
+	  (gst_sdp_media_get_attribute), (gst_sdp_media_get_attribute_val_n),
+	  (gst_sdp_media_get_attribute_val):
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  Constify args where we can.
+
+2007-07-25 18:18:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/interfaces/: Move interface for RTSP extensions from -good to here.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  * gst-libs/gst/interfaces/rtspextension.c:
+	  (gst_rtsp_extension_get_type), (gst_rtsp_extension_iface_init),
+	  (gst_rtsp_extension_detect_server),
+	  (gst_rtsp_extension_before_send), (gst_rtsp_extension_after_send),
+	  (gst_rtsp_extension_parse_sdp), (gst_rtsp_extension_setup_media),
+	  (gst_rtsp_extension_configure_stream),
+	  (gst_rtsp_extension_get_transports),
+	  (gst_rtsp_extension_stream_select), (gst_rtsp_extension_send):
+	  * gst-libs/gst/interfaces/rtspextension.h:
+	  Move interface for RTSP extensions from -good to here.
+	  Added helper methods to invoke interface methods.
+
+2007-07-25 11:22:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Fix some more RTSP docs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtsp/gstrtspdefs.h:
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (key_value_foreach),
+	  (gst_rtsp_message_get_type), (gst_rtsp_message_parse_request),
+	  (gst_rtsp_message_init_response),
+	  (gst_rtsp_message_parse_response), (gst_rtsp_message_new_data),
+	  (gst_rtsp_message_parse_data), (gst_rtsp_message_add_header),
+	  (gst_rtsp_message_remove_header), (gst_rtsp_message_get_header),
+	  (gst_rtsp_message_append_headers), (gst_rtsp_message_set_body),
+	  (gst_rtsp_message_get_body), (dump_key_value):
+	  * gst-libs/gst/rtsp/gstrtspmessage.h:
+	  * gst-libs/gst/rtsp/gstrtsprange.c: (parse_npt_time),
+	  (parse_npt_range), (parse_clock_range), (parse_smpte_range),
+	  (gst_rtsp_range_parse):
+	  * gst-libs/gst/rtsp/gstrtsprange.h:
+	  * gst-libs/gst/rtsp/gstrtsptransport.c:
+	  * gst-libs/gst/rtsp/gstrtspurl.c:
+	  Fix some more RTSP docs.
+	  Add some missing methods for dealing with messages.
+
+2007-07-24 19:19:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Added beginnings of RTSP documentation.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtsp/gstrtspbase64.c: (gst_rtsp_base64_encode):
+	  * gst-libs/gst/rtsp/gstrtspbase64.h:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c:
+	  (gst_rtsp_connection_connect), (add_auth_header),
+	  (gst_rtsp_connection_write), (gst_rtsp_connection_send),
+	  (read_body), (gst_rtsp_connection_receive),
+	  (gst_rtsp_connection_next_timeout),
+	  (gst_rtsp_connection_reset_timeout),
+	  (gst_rtsp_connection_set_auth):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  * gst-libs/gst/rtsp/gstrtspdefs.c: (rtsp_init_status):
+	  * gst-libs/gst/rtsp/gstrtspdefs.h:
+	  * gst-libs/gst/rtsp/gstrtspmessage.h:
+	  * gst-libs/gst/rtsp/gstrtsprange.c: (parse_npt_time),
+	  (parse_npt_range), (parse_clock_range), (parse_smpte_range),
+	  (gst_rtsp_range_parse):
+	  * gst-libs/gst/rtsp/gstrtspurl.h:
+	  Added beginnings of RTSP documentation.
+
+2007-07-24 17:37:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Document the SDP library.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/sdp/gstsdp.h:
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_message_set_origin),
+	  (gst_sdp_message_set_connection), (gst_sdp_message_add_bandwidth),
+	  (gst_sdp_message_add_time), (gst_sdp_message_add_zone),
+	  (gst_sdp_message_set_key), (gst_sdp_message_get_attribute_val_n),
+	  (gst_sdp_message_get_attribute_val),
+	  (gst_sdp_message_add_attribute), (gst_sdp_media_new),
+	  (gst_sdp_media_init), (gst_sdp_media_uninit), (gst_sdp_media_free),
+	  (gst_sdp_media_get_media), (gst_sdp_media_set_media),
+	  (gst_sdp_media_get_port), (gst_sdp_media_get_num_ports),
+	  (gst_sdp_media_set_port_info), (gst_sdp_media_get_proto),
+	  (gst_sdp_media_set_proto), (gst_sdp_media_formats_len),
+	  (gst_sdp_media_get_format), (gst_sdp_media_add_format),
+	  (gst_sdp_media_get_information), (gst_sdp_media_set_information),
+	  (gst_sdp_media_connections_len), (gst_sdp_media_get_connection),
+	  (gst_sdp_media_add_connection), (gst_sdp_media_bandwidths_len),
+	  (gst_sdp_media_get_badwidth), (gst_sdp_media_add_bandwidth),
+	  (gst_sdp_media_set_key), (gst_sdp_media_get_key),
+	  (gst_sdp_media_attributes_len), (gst_sdp_media_add_attribute),
+	  (gst_sdp_media_get_attribute_val_n),
+	  (gst_sdp_media_get_attribute_val), (gst_sdp_message_parse_buffer),
+	  (print_media), (gst_sdp_message_dump):
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  Document the SDP library.
+	  Add some of the missing SDPMedia methods.
+
+2007-07-24 11:52:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Move SDP and RTSP from helper objects in -good to a reusable library.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/rtsp/Makefile.am:
+	  * gst-libs/gst/rtsp/gstrtspbase64.c: (gst_rtsp_base64_encode):
+	  * gst-libs/gst/rtsp/gstrtspbase64.h:
+	  * gst-libs/gst/rtsp/gstrtspconnection.c: (inet_aton),
+	  (gst_rtsp_connection_create), (gst_rtsp_connection_connect),
+	  (add_auth_header), (add_date_header), (gst_rtsp_connection_write),
+	  (gst_rtsp_connection_send), (read_line), (read_string), (read_key),
+	  (parse_response_status), (parse_request_line), (parse_line),
+	  (gst_rtsp_connection_read), (read_body),
+	  (gst_rtsp_connection_receive), (gst_rtsp_connection_close),
+	  (gst_rtsp_connection_free), (gst_rtsp_connection_next_timeout),
+	  (gst_rtsp_connection_reset_timeout), (gst_rtsp_connection_flush),
+	  (gst_rtsp_connection_set_auth):
+	  * gst-libs/gst/rtsp/gstrtspconnection.h:
+	  * gst-libs/gst/rtsp/gstrtspdefs.c: (rtsp_init_status),
+	  (gst_rtsp_strresult), (gst_rtsp_method_as_text),
+	  (gst_rtsp_version_as_text), (gst_rtsp_header_as_text),
+	  (gst_rtsp_status_as_text), (gst_rtsp_find_header_field),
+	  (gst_rtsp_find_method):
+	  * gst-libs/gst/rtsp/gstrtspdefs.h:
+	  * gst-libs/gst/rtsp/gstrtspmessage.c: (key_value_foreach),
+	  (gst_rtsp_message_new), (gst_rtsp_message_init),
+	  (gst_rtsp_message_new_request), (gst_rtsp_message_init_request),
+	  (gst_rtsp_message_new_response), (gst_rtsp_message_init_response),
+	  (gst_rtsp_message_init_data), (gst_rtsp_message_unset),
+	  (gst_rtsp_message_free), (gst_rtsp_message_add_header),
+	  (gst_rtsp_message_remove_header), (gst_rtsp_message_get_header),
+	  (gst_rtsp_message_append_headers), (gst_rtsp_message_set_body),
+	  (gst_rtsp_message_take_body), (gst_rtsp_message_get_body),
+	  (gst_rtsp_message_steal_body), (dump_mem), (dump_key_value),
+	  (gst_rtsp_message_dump):
+	  * gst-libs/gst/rtsp/gstrtspmessage.h:
+	  * gst-libs/gst/rtsp/gstrtsprange.c: (parse_npt_time),
+	  (parse_npt_range), (parse_clock_range), (parse_smpte_range),
+	  (gst_rtsp_range_parse), (gst_rtsp_range_free):
+	  * gst-libs/gst/rtsp/gstrtsprange.h:
+	  * gst-libs/gst/rtsp/gstrtsptransport.c: (gst_rtsp_transport_new),
+	  (gst_rtsp_transport_init), (gst_rtsp_transport_get_mime),
+	  (gst_rtsp_transport_get_manager), (parse_mode), (parse_range),
+	  (range_as_text), (rtsp_transport_mode_as_text),
+	  (rtsp_transport_profile_as_text), (rtsp_transport_ltrans_as_text),
+	  (gst_rtsp_transport_parse), (gst_rtsp_transport_as_text),
+	  (gst_rtsp_transport_free):
+	  * gst-libs/gst/rtsp/gstrtsptransport.h:
+	  * gst-libs/gst/rtsp/gstrtspurl.c: (gst_rtsp_url_parse),
+	  (gst_rtsp_url_free), (gst_rtsp_url_set_port),
+	  (gst_rtsp_url_get_port), (gst_rtsp_url_get_request_uri):
+	  * gst-libs/gst/rtsp/gstrtspurl.h:
+	  * gst-libs/gst/sdp/Makefile.am:
+	  * gst-libs/gst/sdp/gstsdp.h:
+	  * gst-libs/gst/sdp/gstsdpmessage.c: (gst_sdp_origin_init),
+	  (gst_sdp_connection_init), (gst_sdp_bandwidth_init),
+	  (gst_sdp_time_init), (gst_sdp_zone_init), (gst_sdp_key_init),
+	  (gst_sdp_attribute_init), (gst_sdp_message_new),
+	  (gst_sdp_message_init), (gst_sdp_message_uninit),
+	  (gst_sdp_message_free), (gst_sdp_media_new), (gst_sdp_media_init),
+	  (gst_sdp_media_uninit), (gst_sdp_media_free),
+	  (gst_sdp_message_set_origin), (gst_sdp_message_get_origin),
+	  (gst_sdp_message_set_connection), (gst_sdp_message_get_connection),
+	  (gst_sdp_message_add_bandwidth), (gst_sdp_message_add_time),
+	  (gst_sdp_message_add_zone), (gst_sdp_message_set_key),
+	  (gst_sdp_message_get_key), (gst_sdp_message_get_attribute_val_n),
+	  (gst_sdp_message_get_attribute_val),
+	  (gst_sdp_message_add_attribute), (gst_sdp_message_add_media),
+	  (gst_sdp_media_add_attribute), (gst_sdp_media_add_bandwidth),
+	  (gst_sdp_media_add_format), (gst_sdp_media_get_attribute),
+	  (gst_sdp_media_get_attribute_val_n),
+	  (gst_sdp_media_get_attribute_val), (gst_sdp_media_get_format),
+	  (read_string), (read_string_del), (gst_sdp_parse_line),
+	  (gst_sdp_message_parse_buffer), (print_media),
+	  (gst_sdp_message_dump):
+	  * gst-libs/gst/sdp/gstsdpmessage.h:
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  Move SDP and RTSP from helper objects in -good to a reusable library.
+	  Use a proper gst_ namespace.
+
+2007-07-23 18:42:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/vorbis/vorbisdec.c: Use the new buffer clipping function from gstaudio here.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_push_forward),
+	  (vorbis_dec_flush_decode):
+	  Use the new buffer clipping function from gstaudio here.
+
+2007-07-23 18:26:09 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  API: Add buffer clipping function for raw audio buffers. Fixes #456656.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/audio.c: (gst_audio_buffer_clip):
+	  * gst-libs/gst/audio/audio.h:
+	  * tests/check/libs/audio.c: (GST_START_TEST), (audio_suite):
+	  API: Add buffer clipping function for raw audio buffers. Fixes #456656.
+	  Also add deprecation guards for gst_audio_structure_set_int() to the
+	  header.
+
+2007-07-23 14:45:16 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Cleanup the docs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Cleanup the docs.
+
+2007-07-23 11:18:35 +0000  Dan Williams <dcbw@redhat.com>
+
+	  gst/playback/gstplaybasebin.c: Don't return NULL when querying the stream info value array but instead return an empt...
+	  Original commit message from CVS:
+	  Patch by: Dan Williams <dcbw at redhat dot com>
+	  * gst/playback/gstplaybasebin.c:
+	  (gst_play_base_bin_get_streaminfo_value_array):
+	  Don't return NULL when querying the stream info value array but instead
+	  return an empty array. Fixes #459204.
+
+2007-07-23 10:41:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gsturidecodebin.c: Init debug category before using it.
+	  Original commit message from CVS:
+	  * gst/playback/gsturidecodebin.c:
+	  Init debug category before using it.
+
+2007-07-21 09:56:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/interfaces/mixer.h: Add padding vars in place of the signal pointers when building with DISABLE_DEPRECAT...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixer.h:
+	  Add padding vars in place of the signal pointers
+	  when building with DISABLE_DEPRECATED so that the
+	  interface structure doesn't change size.
+
+2007-07-21 09:21:12 +0000  Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+	  Fixes: #152864
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * ext/alsa/gstalsamixer.c:
+	  * ext/alsa/gstalsamixer.h:
+	  * ext/alsa/gstalsamixerelement.c:
+	  * ext/alsa/gstalsamixertrack.c:
+	  * gst-libs/gst/interfaces/mixer.c:
+	  * gst-libs/gst/interfaces/mixer.h:
+	  * gst-libs/gst/interfaces/mixeroptions.c:
+	  * gst-libs/gst/interfaces/mixeroptions.h:
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/mixer.c:
+	  Patch By: Marc-Andre Lureau <marcandre.lureau@gmail.com>
+	  Fixes: #152864
+	  Add support for notifying mixer changes on the message bus, and
+	  implement it in alsamixer.
+	  API: gst_mixer_get_mixer_flags
+	  API: gst_mixer_message_parse_mute_toggled
+	  API: gst_mixer_message_parse_record_toggled
+	  API: gst_mixer_message_parse_volume_changed
+	  API: gst_mixer_message_parse_option_changed
+	  API: GstMixerMessageType
+	  API: GstMixerFlags
+
+2007-07-20 16:09:03 +0000  Michael Smith <msmith@xiph.org>
+
+	  sys/xvimage/xvimagesink.c: xcontext->im_format is only for testing XShm support (as the header file comments document...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_get_xv_support), (gst_xvimagesink_setcaps):
+	  xcontext->im_format is only for testing XShm support (as the header
+	  file comments document). Use xvimage->im_format for everything else.
+	  Avoids spurious warnings on buffer allocation before setcaps.
+
+2007-07-20 07:22:15 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/: We should use $(LIBM).
+	  Original commit message from CVS:
+	  * tests/examples/volume/Makefile.am:
+	  * tests/icles/Makefile.am:
+	  We should use $(LIBM).
+
+2007-07-20 06:13:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/icles/Makefile.am: This needs -lm.
+	  Original commit message from CVS:
+	  * tests/icles/Makefile.am:
+	  This needs -lm.
+
+2007-07-18 07:35:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add stdlib include (free, atoi, exit).
+	  Original commit message from CVS:
+	  * examples/app/appsrc_ex.c:
+	  * examples/switch/switcher.c:
+	  * ext/neon/gstneonhttpsrc.c:
+	  * ext/timidity/gstwildmidi.c:
+	  * ext/x264/gstx264enc.c:
+	  * gst/mve/mveaudioenc.c: (mve_compress_audio):
+	  * gst/rtpmanager/gstrtpclient.c:
+	  * gst/rtpmanager/gstrtpjitterbuffer.c:
+	  * gst/spectrum/demo-audiotest.c:
+	  * gst/spectrum/demo-osssrc.c:
+	  * sys/dvb/gstdvbsrc.c:
+	  Add stdlib include (free, atoi, exit).
+
+2007-07-16 10:10:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Don't break ABI, restore previous ranges. Keep the default random selection of ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_class_init), (gst_basertppayload_init),
+	  (gst_basertppayload_set_property),
+	  (gst_basertppayload_get_property):
+	  Don't break ABI, restore previous ranges. Keep the default random
+	  selection of timestamp and seqnum offset but as soon as the app sets a
+	  specific value, use that one.
+
+2007-07-14 18:33:15 +0000  Bastien Nocera <hadess@hadess.net>
+
+	  sys/xvimage/xvimagesink.*: Add option to turn off double-buffering for debugging purposes.
+	  Original commit message from CVS:
+	  Patch by: Bastien Nocera <hadess at hadess dot net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+	  (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+	  (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+	  * sys/xvimage/xvimagesink.h:
+	  Add option to turn off double-buffering for debugging purposes.
+	  Fixes #437169.
+
+2007-07-14 18:20:41 +0000  Jorn Baayen <jorn@openedhand.com>
+
+	  sys/: add 'handle-expose' property. Useful for video widgets which may want to be in control of Expose behaviour. Fix...
+	  Original commit message from CVS:
+	  Patch by: Jorn Baayen <jorn at openedhand dot com>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+	  (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+	  (gst_ximagesink_init), (gst_ximagesink_class_init):
+	  * sys/ximage/ximagesink.h:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
+	  (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+	  (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+	  * sys/xvimage/xvimagesink.h:
+	  add 'handle-expose' property. Useful for video widgets which may want to
+	  be in control of Expose behaviour. Fixes #380625
+
+2007-07-14 17:23:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertppayload.*: Fix ranges of rtp payloader properties so that the full range can be used in ad...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_class_init), (gst_basertppayload_init),
+	  (gst_basertppayload_event), (gst_basertppayload_push),
+	  (gst_basertppayload_set_property),
+	  (gst_basertppayload_get_property),
+	  (gst_basertppayload_change_state):
+	  * gst-libs/gst/rtp/gstbasertppayload.h:
+	  Fix ranges of rtp payloader properties so that the full range can be
+	  used in addition to -1 (random).
+	  Fix wrong seqnum reporting in caps.
+	  Fixes #420326.
+
+2007-07-13 18:12:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videorate/gstvideorate.c: Use boilerplate.
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_init),
+	  (gst_video_rate_query):
+	  Use boilerplate.
+	  Add latency query, might not be perfect yet but already works a lot
+	  better. Fixes #442557.
+
+2007-07-13 16:05:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/xvimage/xvimagesink.*: After a caps change, redraw our borders to avoid garbage left there when the image format ...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
+	  (gst_xvimagesink_setcaps):
+	  * sys/xvimage/xvimagesink.h:
+	  After a caps change, redraw our borders to avoid garbage left there
+	  when the image format changes to a smaller size, like 16:9 -> 4:3
+	  Also, hold the flow_lock a bit longer in the set_caps while we're
+	  fiddling with the xcontext.
+
+2007-07-13 16:02:23 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Remove bogus check for libcheck, since we check for gstreamer-check and it pulls in the required info from there, and...
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  * configure.ac:
+	  * tests/Makefile.am:
+	  Remove bogus check for libcheck, since we check for
+	  gstreamer-check and it pulls in the required info from there, and we
+	  weren't actually _using_ the information for libcheck ourselves
+	  anyway.
+
+2007-07-13 15:52:02 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Fix the r_mask test for RGBA32 on little-endian.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_caps_to_pixfmt):
+	  Fix the r_mask test for RGBA32 on little-endian.
+	  Fix a stupid typo that would have obviously broken
+	  compilation on big-endian, if anyone was testing.
+
+2007-07-12 15:02:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videotestsrc/videotestsrc.*: Add alpha to the color struct.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c: (paint_hline_AYUV),
+	  (paint_hline_str4):
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add alpha to the color struct.
+	  Use a default alpha value of 255 instead of 128.
+
+2007-07-12 12:01:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Clear the dynamic pads counter when starting a new uri. This makes reusing playbin wor...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (no_more_pads_full),
+	  (setup_source):
+	  Clear the dynamic pads counter when starting a new uri. This makes
+	  reusing playbin work again.
+	  Fixes #454264.
+
+2007-07-12 11:13:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Use pkg-config to locate check.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Use pkg-config to locate check.
+
+2007-07-11 23:12:12 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Fix 'make check' build against core CVS.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * tests/check/elements/volume.c: (GST_START_TEST):
+	  Fix 'make check' build against core CVS.
+
+2007-07-10 20:46:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/: Make gtk-doc happy.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Make gtk-doc happy.
+
+2007-07-08 13:07:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Quick hack to make audiosinks stop at EOS when operating in pull-mode; needs t...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_callback):
+	  Quick hack to make audiosinks stop at EOS when operating in
+	  pull-mode; needs to be fixed properly some day.
+
+2007-07-06 18:19:39 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Fix location of includes in the docs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Fix location of includes in the docs.
+
+2007-07-06 11:40:45 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/ffmpegcolorspace/: Add 2 new pixel formats - ABGR32 and ARGB32, which are reflections of the existing BGRA32 and ...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/avcodec.h:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+	  (gst_ffmpegcsp_avpicture_fill):
+	  * gst/ffmpegcolorspace/imgconvert.c: (img_convert),
+	  (img_get_alpha_info):
+	  Add 2 new pixel formats - ABGR32 and ARGB32, which are reflections
+	  of the existing BGRA32 and RGBA32 formats with the alpha at the other
+	  end of the word. Partially fixes #451908
+
+2007-07-05 08:43:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/: Simplify --extra-dir as gtkdoc scans recursively.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/plugins/Makefile.am:
+	  Simplify --extra-dir as gtkdoc scans recursively.
+
+2007-07-03 11:52:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.c: Make getcaps more robust by not using the proxycaps function. This makes sure that we don't end...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_sink_getcaps),
+	  (gst_adder_request_new_pad):
+	  Make getcaps more robust by not using the proxycaps function. This makes
+	  sure that we don't end up recursively calling getcaps upstream.
+	  See #316248.
+
+2007-06-29 17:21:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audioconvert/audioconvert.c: Include math.h to fix compilation.
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c:
+	  Include math.h to fix compilation.
+
+2007-06-29 14:47:42 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Add a mapping for YUV format "IYU1", which is a 4:1:1 packed pixel format, ...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt):
+	  Add a mapping for YUV format "IYU1", which is a 4:1:1 packed pixel
+	  format, as produced by some dc1394 cameras like the iSight.
+	  See http://www.fourcc.org/yuv.php#IYU1
+
+2007-06-28 20:37:58 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/: Implement dithering and noise shaping in audioconvert. By default now
+	  Original commit message from CVS:
+	  * gst/audioconvert/Makefile.am:
+	  * gst/audioconvert/audioconvert.c: (audio_convert_get_func_index),
+	  (check_default), (audio_convert_prepare_context),
+	  (audio_convert_clean_context), (audio_convert_convert):
+	  * gst/audioconvert/audioconvert.h:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_dithering_get_type),
+	  (gst_audio_convert_ns_get_type), (gst_audio_convert_class_init),
+	  (gst_audio_convert_init), (gst_audio_convert_set_caps),
+	  (gst_audio_convert_set_property), (gst_audio_convert_get_property):
+	  * gst/audioconvert/gstaudioconvert.h:
+	  * gst/audioconvert/gstaudioquantize.c:
+	  (gst_audio_quantize_setup_noise_shaping),
+	  (gst_audio_quantize_free_noise_shaping),
+	  (gst_audio_quantize_setup_dither),
+	  (gst_audio_quantize_free_dither),
+	  (gst_audio_quantize_setup_quantize_func),
+	  (gst_audio_quantize_setup), (gst_audio_quantize_free):
+	  * gst/audioconvert/gstaudioquantize.h:
+	  Implement dithering and noise shaping in audioconvert. By default now
+	  TPDF dithering (and no noise shaping) will be used when converting
+	  from a higher bit depth to 20 bit depth or smaller, otherwise
+	  everything will be as it is now.
+	  For the last audioconvert in a pipeline it would make sense to
+	  use some kind of noise shaping, enabling it by default for all
+	  conversions would give undesired results though. Fixes #360246.
+	  * tests/check/elements/audioconvert.c: (setup_audioconvert),
+	  (GST_START_TEST):
+	  Adjust unit test for the new audioconvert.
+
+2007-06-28 11:06:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Use other metrics as well when estimating the buffer level.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (apply_segment), (update_buffering):
+	  Use other metrics as well when estimating the buffer level.
+
+2007-06-28 10:21:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Small debug improvement.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (make_decoder), (setup_source):
+	  Small debug improvement.
+	  * gst/playback/gstqueue2.c: (apply_segment), (update_buffering),
+	  (plugin_init):
+	  Tweak the rate estimation period.
+	  When calculating the buffer filledness in rate estimation mode, don't
+	  mix it with other metrics.
+
+2007-06-28 09:46:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: When creating the groups, allow for a 5 second, unlimited buffers preroll phase after w...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_group_new),
+	  (gst_decode_group_expose), (gst_decode_group_free), (add_fakesink):
+	  When creating the groups, allow for a 5 second, unlimited buffers
+	  preroll phase after which we expose the group.
+	  When the group is exposed, use a small number of buffers up to a 2
+	  second limit. Also disconnect the overrun signal from multiqueue when we
+	  exposed the group because it is not needed anymore.
+
+2007-06-27 22:30:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/tags.c: Don't pass trailing zeroes in fixed-size string arrays in ID3v1 tags to utf8-validate; fixes...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_freeform_string_to_utf8):
+	  Don't pass trailing zeroes in fixed-size string arrays in ID3v1 tags
+	  to utf8-validate; fixes recognition of ID3v1 tags in UTF-8 encoding
+	  (#451707); also, output some debugging info when dealing with
+	  freeform strings.
+	  * tests/check/libs/tag.c: (GST_START_TEST), (tag_suite):
+	  Add unit test for the above.
+
+2007-06-27 12:55:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/descriptions.c: Add description for Windows Media RTP caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/descriptions.c: (caps_are_rtp_caps):
+	  Add description for Windows Media RTP caps.
+	  * gst-libs/gst/pbutils/missing-plugins.c: (copy_and_clean_caps):
+	  Remove RTP fields that don't define the format from caps.
+
+2007-06-27 10:14:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/vorbis/vorbisdec.c: Skip empty buffers, but not empty header buffers. That way the original vorbisdec unit test s...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_decode_buffer):
+	  Skip empty buffers, but not empty header buffers. That way the original
+	  vorbisdec unit test still passes (#451145); also, take into account
+	  that those empty packets might carry a granulepos.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/vorbisdec.c:
+	  (_create_codebook_header_buffer), (_create_audio_buffer),
+	  (GST_START_TEST), (vorbisdec_suite):
+	  Add unit test that sends an empty packet.
+
+2007-06-27 09:49:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Don't error out on 0-sized packets, just emit a warning because this is not a fatal error. Fi...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_decode_buffer):
+	  Don't error out on 0-sized packets, just emit a warning because this is
+	  not a fatal error. Fixes #451145.
+
+2007-06-25 12:43:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/plugins/: Update docs with caps info.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-decodebin2.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playbin.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Update docs with caps info.
+
+2007-06-25 12:04:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  po/POTFILES.in: Add more files with translatable strings (#450875).
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  Add more files with translatable strings (#450875).
+
+2007-06-23 14:44:07 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/ogg/gstoggdemux.c: The chain should be freed if we error out here, else it will leak.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_find_chains):
+	  The chain should be freed if we error out here, else it will leak.
+	  * gst/playback/gstdecodebin.c: (disconnect_unlinked_signals),
+	  (cleanup_decodebin):
+	  Don't forget to *properly* remove the signals, else it will leak.
+
+2007-06-22 14:25:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  MAINTAINERS: Updating all the maintainers files
+	  Original commit message from CVS:
+	  * MAINTAINERS:
+	  Updating all the maintainers files
+
+2007-06-21 08:34:46 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Destroy and recreate parse-launch based pipeline after stop to be able to play again. Reo...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (update_scale), (play_cb), (stop_cb),
+	  (main):
+	  Destroy and recreate parse-launch based pipeline after stop to be able
+	  to play again. Reorder some code and add more comments.
+
+2007-06-20 11:09:03 +0000  Wim Taymans <wim@fluendo.com>
+
+	  gst/playback/gstdecodebin2.c: When handling a delayed-caps notification case, mark the group as dynamic so that the n...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (analyze_new_pad):
+	  When handling a delayed-caps notification case, mark
+	  the group as dynamic so that the nbdynamic count is
+	  incremented and decremented correctly. Fixes: #449156
+	  Patch by: Wim Taymans <wim@fluendo.com>
+
+2007-06-19 19:13:04 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* win32/common/config.h:
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  Original commit message from CVS:
+	  2007-06-19  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_init): Enable pull-mode operation.
+
+2007-06-19 09:34:35 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/riff/riff-media.c: Change minimum rate back to 1000 to allow low-sample-rate wav files to play back.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Change minimum rate back to 1000 to allow low-sample-rate wav files
+	  to play back.
+
+2007-06-17 17:27:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/vi.po: Update translations.
+	  Original commit message from CVS:
+	  * po/vi.po:
+	  Update translations.
+
+2007-06-16 03:42:14 +0000  David Schleef <ds@schleef.org>
+
+	  gst/playback/gstqueue2.c: Fix compile error from ignored return value.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c:
+	  Fix compile error from ignored return value.
+
+2007-06-15 15:23:36 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/videoscale/vs_4tap.c: Update tmpbuf for all neccesary rows, not just one, as is required when downscaling.
+	  Original commit message from CVS:
+	  * gst/videoscale/vs_4tap.c: (vs_image_scale_4tap_Y):
+	  Update tmpbuf for all neccesary rows, not just one, as is required
+	  when downscaling.
+	  Fixes #402076.
+
+2007-06-15 11:15:28 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/pipelines/oggmux.c: Add a test that ensures we set DELTA_UNIT on all non-header, non-video buffers, if we...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c: (validate_ogg_page), (is_video),
+	  (eos_buffer_probe):
+	  Add a test that ensures we set DELTA_UNIT on all non-header,
+	  non-video buffers, if we have a video stream.
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_queue_pads),
+	  (gst_ogg_mux_process_best_pad):
+	  Move setting delta_pad to earlier, where we inspect all pads, so
+	  that leading audio pages don't get DELTA_UNIT unset if they come
+	  before the first DELTA_UNIT from video pages. Fixes the newly-added
+	  test. Fixes #385527.
+
+2007-06-14 19:53:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/streamheader.c: Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it fails on the p5-ppc6...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/streamheader.c: (streamheader_suite):
+	  Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it
+	  fails on the p5-ppc64 build bot and the failure looks like it is due
+	  to the same issue as #348114, ie. a compiler bug.
+
+2007-06-13 18:20:57 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstqueue2.c: Fix build on MacOSX.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_create_read):
+	  Fix build on MacOSX.
+
+2007-06-13 09:01:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Fix compilation on mingw. Fixes #446972.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_read_chain):
+	  Fix compilation on mingw. Fixes #446972.
+
+2007-06-12 08:38:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Fix a division by zero when the max percent is <= 0. Fixes #446572. also update the bufferi...
+	  Original commit message from CVS:
+	  Patches by: Thiago Sousa Santos <thiagossantos at gmail dot com>
+	  * gst/playback/gstqueue2.c: (update_buffering),
+	  (gst_queue_locked_enqueue):
+	  Fix a division by zero when the max percent is <= 0. Fixes #446572.
+	  also update the buffering status when receiving events. Fixes #446551.
+
+2007-06-11 11:32:26 +0000  Thiago Sousa Santos <thiagossantos@gmail.com>
+
+	  gst/playback/gstqueue2.c: Wait for preroll before attempting to forward a duration query upstream.
+	  Original commit message from CVS:
+	  Based on patch by: Thiago Sousa Santos <thiagossantos at gmail dot com>
+	  * gst/playback/gstqueue2.c: (gst_queue_peer_query),
+	  (gst_queue_handle_src_query):
+	  Wait for preroll before attempting to forward a duration query upstream.
+	  Fixes #445505.
+
+2007-06-07 21:08:38 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Use G_GINT64_CONSTANT macro for int64 constant.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Use G_GINT64_CONSTANT macro for int64 constant.
+	  * win32/common/libgstinterfaces.def:
+	  * win32/common/libgsttag.def:
+	  Add new exported functions.
+
+2007-06-07 14:25:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggmux.c: The BOS page of the first Dirac video stream needs to come before the BOS page of any Vorbis str...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_send_headers):
+	  The BOS page of the first Dirac video stream needs to come before
+	  the BOS page of any Vorbis streams or other audio streams, just like
+	  it is with Theora.
+
+2007-06-07 09:11:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Fix compilation.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_get_range):
+	  Fix compilation.
+
+2007-06-06 13:36:26 +0000  Thiago Sousa Santos <thiagossantos@gmail.com>
+
+	  gst/playback/gstqueue2.c: Add pull based scheduling and fix some deadlocks. Fixes #444523.
+	  Original commit message from CVS:
+	  Patch by: Thiago Sousa Santos <thiagossantos at gmail dot com>
+	  * gst/playback/gstqueue2.c: (gst_queue_init),
+	  (gst_queue_handle_sink_event), (gst_queue_chain),
+	  (gst_queue_get_range), (gst_queue_src_checkgetrange_function),
+	  (gst_queue_sink_activate_push), (gst_queue_src_activate_push),
+	  (gst_queue_src_activate_pull):
+	  Add pull based scheduling and fix some deadlocks. Fixes #444523.
+	  Does not yet completely work because duration queries upstream won't
+	  block yet.
+
+2007-06-06 09:08:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Some more fseeko checks.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/playback/gstqueue2.c: (gst_queue_create_read):
+	  Some more fseeko checks.
+
+2007-06-06 08:01:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  configure.ac: check for large file support.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  check for large file support.
+
+2007-06-05 21:36:11 +0000  Sven Arvidsson <sa@whiz.se>
+
+	  gst/subparse/gstsubparse.*: Add support for SubViewer version 1 and 2 subtitles. Fixes #394061.
+	  Original commit message from CVS:
+	  Based on a patch by Sven Arvidsson <sa at whiz dot se>:
+	  * gst/subparse/gstsubparse.c: (parse_subrip),
+	  (subviewer_unescape_newlines), (parse_subviewer),
+	  (gst_sub_parse_data_format_autodetect),
+	  (gst_sub_parse_format_autodetect), (gst_subparse_type_find):
+	  * gst/subparse/gstsubparse.h:
+	  Add support for SubViewer version 1 and 2 subtitles. Fixes #394061.
+	  * tests/check/elements/subparse.c: (GST_START_TEST),
+	  (subparse_suite):
+	  Add a unit test for both SubViewer formats.
+
+2007-06-05 17:08:04 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Don't overflow intermediate values when seeking to large time values in audiotest...
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_do_seek):
+	  Don't overflow intermediate values when seeking to large time values
+	  in audiotestsrc.
+
+2007-06-05 17:02:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Include stdio to define fseeko.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_have_data),
+	  (gst_queue_create_read), (gst_queue_read_item_from_file),
+	  (gst_queue_open_temp_location_file), (gst_queue_locked_enqueue):
+	  Include stdio to define fseeko.
+
+2007-06-05 16:37:09 +0000  Edward Hervey <edward@fluendo.com>
+
+	  sys/v4l/gstv4lsrc.c: Make v4lsrc output segments in GST_FORMAT_TIME. Fixes #442553.
+	  Original commit message from CVS:
+	  Patch by: Edward Hervey  <edward@fluendo.com>
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_fixate),
+	  (gst_v4lsrc_query):
+	  Make v4lsrc output segments in GST_FORMAT_TIME. Fixes #442553.
+
+2007-06-05 16:20:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/: Use gst_tag_utf8_from_freeform_string() from libgsttag instead of our own implementation.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/Makefile.am:
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_parse_info):
+	  Use gst_tag_utf8_from_freeform_string() from libgsttag instead of
+	  our own implementation.
+
+2007-06-05 16:19:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Handle timestamp wraparound.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_change_state):
+	  Handle timestamp wraparound.
+
+2007-06-05 16:17:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gsturidecodebin.c: Make sure we name srcpads uniquely even when using different internal decodebins.
+	  Original commit message from CVS:
+	  * gst/playback/gsturidecodebin.c: (no_more_pads_full),
+	  (new_decoded_pad), (remove_pads), (make_decoder), (setup_source),
+	  (gst_uri_decode_bin_change_state):
+	  Make sure we name srcpads uniquely even when using different internal
+	  decodebins.
+	  Signal no-more-pads when no more dynamic elements exist.
+	  Remove pads on cleanup.
+
+2007-06-05 16:14:23 +0000  Thiago Sousa Santos <thiagossantos@gmail.com>
+
+	  gst/playback/gstqueue2.c: Add support for filebased buffering. Fixes #441264.
+	  Original commit message from CVS:
+	  Based on patch by: Thiago Sousa Santos <thiagossantos at gmail dot com>
+	  * gst/playback/gstqueue2.c: (gst_queue_class_init),
+	  (gst_queue_init), (gst_queue_finalize),
+	  (gst_queue_write_buffer_to_file), (gst_queue_have_data),
+	  (gst_queue_create_read), (gst_queue_read_item_from_file),
+	  (gst_queue_open_temp_location_file),
+	  (gst_queue_close_temp_location_file), (gst_queue_locked_flush),
+	  (gst_queue_locked_enqueue), (gst_queue_locked_dequeue),
+	  (gst_queue_is_empty), (gst_queue_is_filled),
+	  (gst_queue_change_state), (gst_queue_set_temp_location),
+	  (gst_queue_set_property):
+	  Add support for filebased buffering. Fixes #441264.
+
+2007-06-05 16:05:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Add support for delayed caps fixation when autoplugging.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_factory_filter),
+	  (analyze_new_pad), (connect_pad), (expose_pad), (caps_notify_cb),
+	  (caps_notify_group_cb), (gst_decode_group_new),
+	  (gst_decode_group_free):
+	  Add support for delayed caps fixation when autoplugging.
+	  Optimize cases where a multiqueue is not needed/wanted, like right after
+	  anything that is not a demuxer.
+
+2007-06-05 16:02:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: consideratly speedup ogg chain detection by not trying to find a base timestamp for skeleton s...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fisbone),
+	  (gst_ogg_pad_submit_packet), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_read_chain), (gst_ogg_demux_collect_chain_info):
+	  consideratly speedup ogg chain detection by not trying to find a base
+	  timestamp for skeleton streams.
+
+2007-06-05 16:00:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.*: Add support for remuve_flush.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type),
+	  (gst_multi_fd_sink_class_init), (gst_multi_fd_sink_add_full),
+	  (gst_multi_fd_sink_remove_flush),
+	  (gst_multi_fd_sink_remove_client_link),
+	  (gst_multi_fd_sink_handle_client_write),
+	  (gst_multi_fd_sink_handle_clients):
+	  * gst/tcp/gstmultifdsink.h:
+	  Add support for remuve_flush.
+
+2007-06-05 15:59:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add draft design for forcing keyframes in encoders and implement in theoraenc.
+	  Original commit message from CVS:
+	  * docs/design/draft-keyframe-force.txt:
+	  * ext/theora/theoraenc.c: (theora_enc_sink_event),
+	  (theora_enc_chain):
+	  Add draft design for forcing keyframes in encoders and implement in
+	  theoraenc.
+
+2007-06-05 13:22:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.13 ===
+
+2007-06-05 12:50:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-decodebin2.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/config.h:
+	* win32/vs6/grammar.dsp:
+	* win32/vs6/gst_plugins_base.dsw:
+	* win32/vs6/libgstadder.dsp:
+	* win32/vs6/libgstaudio.dsp:
+	* win32/vs6/libgstaudioconvert.dsp:
+	* win32/vs6/libgstaudiorate.dsp:
+	* win32/vs6/libgstaudioresample.dsp:
+	* win32/vs6/libgstaudioscale.dsp:
+	* win32/vs6/libgstaudiotestsrc.dsp:
+	* win32/vs6/libgstcdda.dsp:
+	* win32/vs6/libgstdecodebin.dsp:
+	* win32/vs6/libgstdecodebin2.dsp:
+	* win32/vs6/libgstdirectsound.dsp:
+	* win32/vs6/libgstffmpegcolorspace.dsp:
+	* win32/vs6/libgstgdp.dsp:
+	* win32/vs6/libgstinterfaces.dsp:
+	* win32/vs6/libgstnetbuffer.dsp:
+	* win32/vs6/libgstogg.dsp:
+	* win32/vs6/libgstpbutils.dsp:
+	* win32/vs6/libgstplaybin.dsp:
+	* win32/vs6/libgstriff.dsp:
+	* win32/vs6/libgstrtp.dsp:
+	* win32/vs6/libgstsinesrc.dsp:
+	* win32/vs6/libgstsubparse.dsp:
+	* win32/vs6/libgsttag.dsp:
+	* win32/vs6/libgsttheora.dsp:
+	* win32/vs6/libgsttypefindfunctions.dsp:
+	* win32/vs6/libgstutils.dsp:
+	* win32/vs6/libgstvideo.dsp:
+	* win32/vs6/libgstvideorate.dsp:
+	* win32/vs6/libgstvideoscale.dsp:
+	* win32/vs6/libgstvideotestsrc.dsp:
+	* win32/vs6/libgstvolume.dsp:
+	* win32/vs6/libgstvorbis.dsp:
+	  Release 0.10.13 "What's going on?"
+	  Original commit message from CVS:
+	  Release 0.10.13 "What's going on?"
+
+2007-06-05 12:32:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2007-05-31 17:08:58 +0000  Wim Taymans <wim@fluendo.com>
+
+	  gst-libs/gst/riff/riff-media.c: In riff, the depth is stored in the size field but it just means that the least signi...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  In riff, the depth is stored in the size field but it just means that
+	  the least significant bits are cleared. We can therefore just play
+	  the sample as if it had a depth == width. Fixes: #440997
+	  Patch by: Wim Taymans <wim@fluendo.com>
+	  Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
+
+2007-05-31 16:36:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/floatcast/floatcast.h: Define inline when needed on win32 builds. Fixes: #441295
+	  Original commit message from CVS:
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  Define inline when needed on win32 builds. Fixes: #441295
+
+2007-05-29 13:38:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Stop buffering when the group is commited because the queues filled up.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (queue_overrun),
+	  (no_more_pads_full):
+	  Stop buffering when the group is commited because the queues filled up.
+	  Fixes #442024.
+
+2007-05-25 10:07:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Revert commits towards #152864 made so far. We'll pick it up again after the 0.10.13 release.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_ensure_track_list),
+	  (gst_alsa_mixer_free), (gst_alsa_mixer_update),
+	  (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+	  (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
+	  (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
+	  * ext/alsa/gstalsamixer.h:
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_interface_supported),
+	  (gst_alsa_mixer_element_finalize), (gst_alsa_mixer_element_init),
+	  (gst_alsa_mixer_element_set_property),
+	  (gst_alsa_mixer_element_get_property),
+	  (gst_alsa_mixer_element_change_state):
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_update):
+	  * gst-libs/gst/interfaces/mixer.c: (gst_mixer_volume_changed),
+	  (gst_mixer_option_changed):
+	  * gst-libs/gst/interfaces/mixer.h:
+	  Revert commits towards #152864 made so far. We'll pick it up again
+	  after the 0.10.13 release.
+
+2007-05-24 16:22:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: After an interrupt (PAUSED/flush) assume that the next sample should not be al...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  After an interrupt (PAUSED/flush) assume that the next sample should not
+	  be aligned to the previous sample. Fixes #417992.
+
+2007-05-24 15:16:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Don't add channels and rate fields to the template caps for audio/x-dts, as wavparse ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Don't add channels and rate fields to the template caps for
+	  audio/x-dts, as wavparse might not always be able to set them,
+	  which would then lead to 'caps are not a real subset of the
+	  template caps' warnings.
+
+2007-05-24 11:15:32 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybasebin.c: Handle unknown or invalid pads without crashing, as might occur if a media file like a...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (new_decoded_pad_full):
+	  Handle unknown or invalid pads without crashing, as might occur if
+	  a media file like an mp3 is specified as a subtitle file.
+	  Fixes: #410039
+
+2007-05-24 10:19:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybin.c: Block the subtitle bin output queue before ghosting it and linking, then unblock after. Th...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (add_sink), (dummy_blocked_cb),
+	  (setup_sinks):
+	  Block the subtitle bin output queue before ghosting it and linking,
+	  then unblock after. This avoids spurious not-linked errors caused
+	  by the queue starting up (because it gets linked when it is ghosted).
+	  Fixes: #350299
+
+2007-05-23 15:54:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/elements/playbin.c: Use /dev/zero instead of /dev/urandom to produce an invalid subtitle file. Avoids flu...
+	  Original commit message from CVS:
+	  * tests/check/elements/playbin.c: (test_suburi_error_unknowntype):
+	  Use /dev/zero instead of /dev/urandom to produce an invalid subtitle
+	  file. Avoids flukes where the input gets typefound to some valid but
+	  useless type.
+
+2007-05-22 15:45:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add unit test for gnomevfssink seeking and position reporting for file:// URIs.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/gnomevfssink.c: (setup_gnomevfssink),
+	  (cleanup_gnomevfssink), (GST_START_TEST), (gnomevfssink_suite):
+	  Add unit test for gnomevfssink seeking and position reporting for
+	  file:// URIs.
+
+2007-05-22 15:30:26 +0000  Mark Nauwelaerts <manauw@skynet.be>
+
+	  ext/gnomevfs/gstgnomevfssink.*: see #412648.
+	  Original commit message from CVS:
+	  Patch by: Mark Nauwelaerts <manauw at skynet be>
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_init),
+	  (gst_gnome_vfs_sink_open_file), (gst_gnome_vfs_sink_handle_event),
+	  (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render):
+	  * ext/gnomevfs/gstgnomevfssink.h:
+	  Fix position reporting, especially after a seek (from upstream),
+	  see #412648.
+
+2007-05-22 15:04:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/cdparanoia/gstcdparanoiasrc.c: Repair umlaut.
+	  Original commit message from CVS:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  Repair umlaut.
+
+2007-05-22 11:40:31 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/riff/riff-media.c: Specify the full valid range for MP3 samplerates. Fixes a regression caused by extra ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Specify the full valid range for MP3 samplerates. Fixes a regression
+	  caused by extra header checks since the last release.
+
+2007-05-21 15:32:42 +0000  Mike Smith <msmith@xiph.org>
+
+	  sys/: Fix a locking-order bug I introduced with my changes the other day.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+	  Fix a locking-order bug I introduced with my changes the other day.
+	  Patch by Mike Smith.
+
+2007-05-21 15:24:21 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Don't look inside 0-length packets (which indicate duplicated frames)
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_handle_data_packet):
+	  Don't look inside 0-length packets (which indicate duplicated
+	  frames)
+
+2007-05-21 10:25:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Small cleanups.
+	  Original commit message from CVS:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  (gst_cd_paranoia_src_read_sector):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Small cleanups.
+	  * ext/theora/theoradec.c: (theora_dec_sink_event):
+	  Fix typo.
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Add some FIXME
+	  * gst/playback/gstdecodebin.c: (queue_underrun_cb):
+	  And some debug info when a FIXME path is hit.
+
+2007-05-21 09:45:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Some cleanups, remove minptime property as it is now in the parent class.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_class_init),
+	  (gst_base_rtp_audio_payload_init),
+	  (gst_base_rtp_audio_payload_finalize),
+	  (gst_base_rtp_audio_payload_handle_frame_based_buffer),
+	  (gst_base_rtp_audio_payload_handle_sample_based_buffer),
+	  (gst_base_rtp_payload_audio_handle_event):
+	  Some cleanups, remove minptime property as it is now in the parent
+	  class.
+	  Override parent class event function.
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_class_init), (gst_basertppayload_init),
+	  (gst_basertppayload_event), (gst_basertppayload_set_property),
+	  (gst_basertppayload_get_property):
+	  * gst-libs/gst/rtp/gstbasertppayload.h:
+	  Add min-ptime property.
+	  Add handle-event vmethod. Fixes #415001.
+
+2007-05-18 17:10:03 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update spec
+	  Original commit message from CVS:
+	  update spec
+
+2007-05-18 15:23:43 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_change_state):
+	  Fix typo in comment.
+	  * gst/playback/gstdecodebin.c (gst_decode_bin_class_init,
+	  free_dynamics, pad_probe, close_pad_link, try_to_link_1,
+	  get_our_ghost_pad, remove_element_chain, queue_underrun_cb,
+	  close_link):
+	  * gst/playback/gstplaybin.c (gst_play_bin_set_property,
+	  gen_audio_element, remove_sinks, gst_play_bin_send_event_to_sink):
+	  Remove trailing whitespaces in comments.
+	  * gst/volume/Makefile.am:
+	  Fix tabs.
+
+2007-05-18 15:10:08 +0000  Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+	* ChangeLog:
+	* gst-libs/gst/interfaces/mixer.h:
+	  gst-libs/gst/interfaces/mixer.h (mixer_type, option_changed, set_option, get_option, _gst_reserved):
+	  Original commit message from CVS:
+	  patch by: Marc-Andre Lureau <marcandre.lureau@gmail.com>
+	  * gst-libs/gst/interfaces/mixer.h (mixer_type, option_changed,
+	  set_option, get_option, _gst_reserved):
+	  Revert reordering functions (keep ABI).
+
+2007-05-17 17:35:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: When we create our own window, indicate that we handle the
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_put),
+	  (gst_ximagesink_xwindow_new), (gst_ximagesink_handle_xevents),
+	  (gst_ximagesink_show_frame):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
+	  (gst_xvimagesink_xwindow_new), (gst_xvimagesink_handle_xevents),
+	  (gst_xvimagesink_show_frame):
+	  When we create our own window, indicate that we handle the
+	  WM_DELETE client message from the window manager, so that it won't
+	  kill our window (and our app) along with it. Handle ClientMessage,
+	  post an error on the bus, and close the window. Further buffers
+	  arriving will result in a FlowError because the window has been
+	  destroyed.
+	  Fixes: #393975
+	  Clean up the X event handling loop and make them the same for
+	  both xvimagesink and ximagesink while I'm at it.
+
+2007-05-17 16:27:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin2.c: Make decodebin2 autoplug depayloaders too.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_factory_filter):
+	  Make decodebin2 autoplug depayloaders too.
+	  * gst/playback/gsturidecodebin.c: (source_new_pad):
+	  Set the newly created decoder in a usable state when autoplugging a
+	  dynamic source such as RTSP.
+
+2007-05-17 16:11:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreaminfo.c: Ignore video-codec tag for audio streams and ignore audio-codec tags for video streams....
+	  Original commit message from CVS:
+	  * gst/playback/gststreaminfo.c: (cb_probe):
+	  Ignore video-codec tag for audio streams and ignore audio-codec tags
+	  for video streams. Should make codec name collection a bit more
+	  robust against sloppy demuxers that send tag events containing both
+	  tags down each pad.
+
+2007-05-17 15:22:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: Tweak the buffering thresholds a little.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (update_rates):
+	  Tweak the buffering thresholds a little.
+	  Update the buffer size with the previously calculate rate instead of
+	  only when we calculate a new rate so that we get smoother buffering
+	  updates.
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_base_init),
+	  (gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
+	  (gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_property),
+	  (gst_uri_decode_bin_get_property), (unknown_type),
+	  (add_element_stream), (no_more_pads_full), (no_more_pads),
+	  (source_no_more_pads), (new_decoded_pad), (array_has_value),
+	  (gen_source_element), (has_all_raw_caps), (analyse_source),
+	  (remove_decoders), (make_decoder), (remove_source),
+	  (source_new_pad), (setup_source), (decoder_query_init),
+	  (decoder_query_duration_fold), (decoder_query_duration_done),
+	  (decoder_query_position_fold), (decoder_query_position_done),
+	  (decoder_query_latency_fold), (decoder_query_latency_done),
+	  (decoder_query_seeking_fold), (decoder_query_seeking_done),
+	  (decoder_query_generic_fold), (gst_uri_decode_bin_query),
+	  (gst_uri_decode_bin_change_state), (plugin_init):
+	  New element that intergrates a source, optional buffering element and
+	  decodebin.
+
+2007-05-17 14:17:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Bump libtheora requirement to 1.0alpha5 for the pixformat check (also has a .pc file, so we don't need ...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump libtheora requirement to 1.0alpha5 for the pixformat check
+	  (also has a .pc file, so we don't need the fallback check any
+	  longer). Fixes #438840.
+
+2007-05-17 13:36:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstqueue2.c: fix build.
+	  Original commit message from CVS:
+	  * gst/playback/gstqueue2.c: (gst_queue_get_type),
+	  (gst_queue_class_init), (gst_queue_finalize), (update_time_level),
+	  (apply_segment), (apply_buffer), (update_buffering),
+	  (reset_rate_timer), (update_rates), (gst_queue_locked_flush),
+	  (gst_queue_locked_enqueue), (gst_queue_locked_dequeue),
+	  (gst_queue_handle_sink_event), (gst_queue_is_filled),
+	  (gst_queue_chain), (gst_queue_push_one), (gst_queue_loop),
+	  (plugin_init):
+	  fix build.
+
+2007-05-17 11:57:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: On our way to playbin2 this is the new network queue that does buffering all by itself using high and ...
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstqueue2.c: (gst_queue_get_type),
+	  (gst_queue_class_init), (gst_queue_init), (gst_queue_finalize),
+	  (gst_queue_getcaps), (gst_queue_bufferalloc),
+	  (gst_queue_acceptcaps), (update_time_level), (apply_segment),
+	  (apply_buffer), (update_buffering), (reset_rate_timer),
+	  (update_rates), (gst_queue_locked_flush),
+	  (gst_queue_locked_enqueue), (gst_queue_locked_dequeue),
+	  (gst_queue_handle_sink_event), (gst_queue_is_empty),
+	  (gst_queue_is_filled), (gst_queue_chain), (gst_queue_push_one),
+	  (gst_queue_loop), (gst_queue_handle_src_event),
+	  (gst_queue_handle_src_query), (gst_queue_sink_activate_push),
+	  (gst_queue_src_activate_push), (gst_queue_change_state),
+	  (gst_queue_set_property), (gst_queue_get_property), (plugin_init):
+	  On our way to playbin2 this is the new network queue that does buffering
+	  all by itself using high and low watermarks. It can also measure up and
+	  downstream bandwidth to optimally size the queue.
+
+2007-05-17 11:16:14 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/: Use the segment->last_stop value to calculate the next timestamp to generate after a seek; not the segment->sta...
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_do_seek):
+	  * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_do_seek):
+	  Use the segment->last_stop value to calculate the next timestamp to
+	  generate after a seek; not the segment->start value.
+
+2007-05-15 20:14:06 +0000  David Schleef <ds@schleef.org>
+
+	  docs/Makefile.am: Install docs even when --disable-gtk-doc is disabled.  This matches the behavior of gtk+.  Fixes #3...
+	  Original commit message from CVS:
+	  * docs/Makefile.am: Install docs even when --disable-gtk-doc
+	  is disabled.  This matches the behavior of gtk+.  Fixes #349099.
+
+2007-05-15 17:11:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Some more chained streaming ogg timestamp fixes.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_handle_page):
+	  Some more chained streaming ogg timestamp fixes.
+
+2007-05-15 16:46:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Add some FIXMEs.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_handle_page):
+	  Add some FIXMEs.
+	  Fix chain start/stop segment handling based on patch by
+	  <ahalda at cs dot mcgill dot ca> see #320984.
+
+2007-05-15 15:33:54 +0000  Michael Smith <msmith@xiph.org>
+
+	  configure.ac: We don't require a C++ compiler. So don't require one.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  We don't require a C++ compiler. So don't require one.
+
+2007-05-15 15:29:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	* ChangeLog:
+	* ext/alsa/gstalsamixer.c:
+	  ext/alsa/gstalsamixer.c (source, n_poll_fds, poll_fds, gst_alsa_mixer_check, gst_alsa_mixer_dispatch, gst_alsa_mixer_...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c (source, n_poll_fds, poll_fds,
+	  gst_alsa_mixer_check, gst_alsa_mixer_dispatch,
+	  gst_alsa_mixer_finalize, gst_alsa_mixer_handle_source_callback,
+	  gst_alsa_mixer_handle_callback, gst_alsa_mixer_elem_handle_callback,
+	  gst_alsa_mixer_ensure_track_list, gst_alsa_mixer_update_option,
+	  gst_alsa_mixer_update_track):
+	  Apply some of the cleanup Tim suggested in #152864 afterwards.
+
+2007-05-15 14:01:26 +0000  Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+	  ext/alsa/gstalsamixer.c (main_context, GstAlsaMixerWatch, _GstAlsaMixerWatch, source, n_poll_fds, poll_fds, gst_alsa_...
+	  Original commit message from CVS:
+	  patch by: Marc-Andre Lureau <marcandre.lureau@gmail.com>
+	  * ext/alsa/gstalsamixer.c (main_context, GstAlsaMixerWatch,
+	  _GstAlsaMixerWatch, source, n_poll_fds, poll_fds,
+	  gst_alsa_mixer_watch_funcs, gst_alsa_mixer_prepare,
+	  gst_alsa_mixer_check, gst_alsa_mixer_dispatch,
+	  gst_alsa_mixer_finalize, gst_alsa_mixer_find_master_mixer,
+	  gst_alsa_mixer_handle_source_callback,
+	  gst_alsa_mixer_handle_callback, gst_alsa_mixer_elem_handle_callback,
+	  gst_alsa_mixer_ensure_track_list, gst_alsa_mixer_free,
+	  gst_alsa_mixer_get_volume, gst_alsa_mixer_set_volume,
+	  gst_alsa_mixer_set_mute, gst_alsa_mixer_set_record,
+	  gst_alsa_mixer_get_option, gst_alsa_mixer_update_option,
+	  gst_alsa_mixer_update_track, _gst_alsa_mixer_set_interface):
+	  * ext/alsa/gstalsamixer.h (handle_source, interface, dir):
+	  * ext/alsa/gstalsamixerelement.c (gst_alsa_mixer_element_details,
+	  gst_alsa_mixer_element_interface_supported,
+	  gst_alsa_mixer_element_finalize, gst_alsa_mixer_element_init,
+	  gst_alsa_mixer_element_set_property,
+	  gst_alsa_mixer_element_get_property,
+	  gst_alsa_mixer_element_change_state):
+	  * ext/alsa/gstalsamixertrack.c (gst_alsa_mixer_track_update):
+	  * gst-libs/gst/interfaces/mixer.c (gst_mixer_volume_changed,
+	  gst_mixer_option_changed):
+	  * gst-libs/gst/interfaces/mixer.h (set_option, get_option,
+	  volume_changed, option_changed, _gst_reserved):
+	  Implement notification for alsamixer. Fixes #152864
+
+2007-05-15 03:53:11 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videotestsrc/videotestsrc.*: Add support for video/x-raw-bayer.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c:
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add support for video/x-raw-bayer.
+
+2007-05-13 01:06:19 +0000  David Schleef <ds@schleef.org>
+
+	  sys/xvimage/xvimagesink.c: Add some sanity checking for the XVImage size returned by X.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c:
+	  Add some sanity checking for the XVImage size returned by X.
+	  Related to #377400.
+
+2007-05-12 16:18:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Parse and use additional caps fields as described in updated application/x-rt...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  Parse and use additional caps fields as described in updated
+	  application/x-rtp caps spec.
+
+2007-05-12 16:16:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: If there is a stream in a chain without any data packets, ignore the stream in the total lengt...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_collect_chain_info):
+	  If there is a stream in a chain without any data packets, ignore the
+	  stream in the total length calculations. Might be related to #436820.
+
+2007-05-11 17:33:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Consolidate and re-work our mpeg system stream detection to probe more packets a...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg_sys_is_valid_pack),
+	  (mpeg_sys_is_valid_pes), (mpeg_sys_is_valid_sys),
+	  (mpeg_sys_type_find), (mpeg_ts_type_find), (mpeg4_video_type_find),
+	  (mpeg_video_type_find), (mpeg_video_stream_type_find),
+	  (plugin_init):
+	  Consolidate and re-work our mpeg system stream detection to probe
+	  more packets and produce a higher confidence result. Fixes a
+	  regression caused by lowering the typefind probability last year
+	  - related to bug #397810. Remove the redundant MPEG-1 specific
+	  typefind function, as the new one detects both MPEG-1 & MPEG-2
+	  happily.
+	  Also cleanup the MPEG elementary and MPEG-TS detection functions a
+	  little.
+	  Tested against my media test directory, with some improvements and
+	  no regressions.
+
+2007-05-10 15:28:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Connect to the new queue "pushing" signal instead of the broken "running" one.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (fill_buffer), (check_queue),
+	  (queue_out_of_data):
+	  Connect to the new queue "pushing" signal instead of the broken
+	  "running" one.
+
+2007-05-09 21:17:40 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Move variable declaration before the first instruction.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_handle_frame_based_buffer):
+	  Move variable declaration before the first instruction.
+	  * gst/videotestsrc/videotestsrc.c:
+	  Define M_PI if it's not defined yet.
+	  * win32/common/libgstrtp.def:
+	  Add new exported functions.
+
+2007-05-09 11:54:32 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: gst_pad_push_event() does not return a GstFlowReturn!
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_handle_type_packet):
+	  gst_pad_push_event() does not return a GstFlowReturn!
+
+2007-05-09 11:25:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/: Some small cosmetic changes.
+	  Original commit message from CVS:
+	  * tests/examples/seek/scrubby.c: (stop_cb), (main):
+	  * tests/examples/seek/seek.c: (do_seek):
+	  Some small cosmetic changes.
+
+2007-05-08 19:24:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	* ChangeLog:
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	  gst/adder/gstadder.c (gst_adder_src_event, gst_adder_collected, gst_adder_change_state): gst/adder/gstadder.h (bps, o...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c (gst_adder_src_event, gst_adder_collected,
+	  gst_adder_change_state):
+	  * gst/adder/gstadder.h (bps, offset, collect_event, segment,
+	  segment_pending, segment_position, segment_rate):
+	  Handle playback-rate on adder.
+
+2007-05-07 11:43:31 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/: Don't push events (newsegment, tags) before initialising the decoder.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_reset),
+	  (theora_dec_sink_event), (theora_handle_comment_packet),
+	  (theora_handle_type_packet), (theora_dec_change_state):
+	  Don't push events (newsegment, tags) before initialising the
+	  decoder.
+	  This is neccesary for seeking to work correctly in gnonlin.
+
+2007-05-04 13:10:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/: gst/audiotestsrc/gstaudiotestsrc.c
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst/adder/gstadder.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.c
+	  (gst_audio_test_src_create_white_noise):
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/volume/gstvolume.c (VOLUME_UNITY_INT16,
+	  VOLUME_UNITY_INT16_BIT_SHIFT, VOLUME_MAX_DOUBLE,
+	  volume_sink_template, volume_src_template, gst_volume_init,
+	  volume_process_double, volume_process_int16,
+	  volume_process_int16_clamp):
+	  Doc fixes and formatting.
+
+2007-05-04 12:41:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Minimal check for volume's GstController usability; also another test for #422295.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/volume.c: (GST_START_TEST), (volume_suite):
+	  Minimal check for volume's GstController usability; also another
+	  test for #422295.
+
+2007-05-04 09:06:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: Fix it so that it (a) makes sense and (b) doesn't break everything cdda-related i...
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_add_track):
+	  Fix it so that it (a) makes sense and (b) doesn't break
+	  everything cdda-related including the unit test.
+
+2007-05-04 08:46:59 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: Fix build when disabling asserts.
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_add_track):
+	  Fix build when disabling asserts.
+
+2007-05-03 16:29:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/ximage/ximagesink.c: When XShm is not available, we might get row strides that are not rounded up to multiples of...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new):
+	  When XShm is not available, we might get row strides that are not
+	  rounded up to multiples of four; this is bad, because virtually
+	  every RGB-processing element in GStreamer assumes rowstrides are
+	  rounded up to multiples of four, so let's allocate at least enough
+	  memory to avoid crashes in this case. The image will still be
+	  displayed distorted though if this happens, so that still needs
+	  fixing (maybe by allocating a bigger image with an 'even' width
+	  and then clipping it appropriately when rendering - something for
+	  Xlib aficionados in any case).
+
+2007-05-03 13:16:21 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: If a buffer doesn't have a timestamp, assume it's contiguous with the previous buffer, ...
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  If a buffer doesn't have a timestamp, assume it's contiguous with
+	  the previous buffer, and synthesise timestamps appropriately.
+
+2007-05-03 11:24:00 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/elements/videorate.c: Set buffer timestamp to a valid value in order to test the buffer really does stay ...
+	  Original commit message from CVS:
+	  * tests/check/elements/videorate.c: (GST_START_TEST):
+	  Set buffer timestamp to a valid value in order to test the buffer
+	  really does stay in videorate.
+
+2007-05-03 10:47:22 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/videorate/gstvideorate.c: There is no sensible way to handle incoming buffers which don't have a valid timestamp....
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_chain):
+	  There is no sensible way to handle incoming buffers which don't have a
+	  valid timestamp. We therefore discard them and wait for the next one.
+
+2007-05-01 18:45:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Better error message for text files.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (type_found), (plugin_init):
+	  * gst/playback/gstdecodebin2.c: (plugin_init):
+	  Better error message for text files.
+
+2007-04-29 14:38:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.c: Fix offset bug in generation RR packets.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_packet_add_rb):
+	  Fix offset bug in generation RR packets.
+
+2007-04-27 15:33:46 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/theora/theoradec.c: Calculate buffer duration correctly to generate a perfect stream (#433888).
+	  Original commit message from CVS:
+	  2007-04-27  Julien MOUTTE  <julien@moutte.net>
+	  * ext/theora/theoradec.c: (_theora_granule_time),
+	  (theora_dec_push_forward), (theora_handle_data_packet),
+	  (theora_dec_decode_buffer): Calculate buffer duration correctly
+	  to generate a perfect stream (#433888).
+	  * gst/audioresample/gstaudioresample.c:
+	  (audioresample_check_discont): Glib provides ABS.
+
+2007-04-27 15:01:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.*: Fix RB block parsing and writing.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_packet_get_rb),
+	  (gst_rtcp_packet_add_rb), (gst_rtcp_packet_sdes_add_item),
+	  (gst_rtcp_packet_sdes_add_entry), (gst_rtcp_packet_bye_add_ssrc),
+	  (gst_rtcp_packet_bye_add_ssrcs), (get_reason_offset),
+	  (gst_rtcp_packet_bye_set_reason):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Fix RB block parsing and writing.
+	  Add support for constructing BYE packets.
+
+2007-04-25 08:54:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  When posting a warning message because samples were dropped, post something more intelligible than he default error m...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (_do_init),
+	  (gst_base_audio_src_create):
+	  * po/POTFILES.in:
+	  When posting a warning message because samples were dropped, post
+	  something more intelligible than he default error message for clock
+	  errors which is just confusing in this context (#432984).
+
+2007-04-25 08:10:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtcpbuffer.*: Implement code to write SR, RR and SDES packets.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c: (gst_rtcp_buffer_new),
+	  (gst_rtcp_buffer_end), (gst_rtcp_buffer_get_packet_count),
+	  (read_packet_header), (gst_rtcp_packet_move_to_next),
+	  (gst_rtcp_buffer_add_packet), (gst_rtcp_packet_sr_set_sender_info),
+	  (gst_rtcp_packet_rr_set_ssrc), (gst_rtcp_packet_add_rb),
+	  (gst_rtcp_packet_sdes_get_item_count),
+	  (gst_rtcp_packet_sdes_first_item),
+	  (gst_rtcp_packet_sdes_next_item), (gst_rtcp_packet_sdes_get_ssrc),
+	  (gst_rtcp_packet_sdes_first_entry),
+	  (gst_rtcp_packet_sdes_next_entry),
+	  (gst_rtcp_packet_sdes_get_entry), (gst_rtcp_packet_sdes_add_item),
+	  (gst_rtcp_packet_sdes_add_entry):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Implement code to write SR, RR and SDES packets.
+
+2007-04-24 20:45:24 +0000  Christian Kirbach <Christian.Kirbach@googlemail.com>
+
+	  sys/ximage/ximagesink.c: Fix build if XShm is not available (#432362).
+	  Original commit message from CVS:
+	  Patch by: Christian Kirbach <Christian dot Kirbach at googlemail com>
+	  * sys/ximage/ximagesink.c:
+	  Fix build if XShm is not available (#432362).
+
+2007-04-24 18:58:25 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Initalize the AudioConvertCtx with zeroes, otherwise it will contain pointers to ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init):
+	  Initalize the AudioConvertCtx with zeroes, otherwise it will contain
+	  pointers to random memory which are passed to g_free() when
+	  audio_convert_prepare_context() is called the first time.
+
+2007-04-24 15:00:07 +0000  Dan Williams <dcbw@redhat.com>
+
+	  gst/videorate/gstvideorate.c: Don't leak incoming buffer if gst_pad_push() returns a non-OK flow. Fixes #432755.
+	  Original commit message from CVS:
+	  Patch by: Dan Williams <dcbw redhat com>
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_chain):
+	  Don't leak incoming buffer if gst_pad_push() returns a
+	  non-OK flow. Fixes #432755.
+	  * tests/check/elements/videorate.c: (GST_START_TEST),
+	  (videorate_suite):
+	  Unit test for the above by Yours Truly.
+
+2007-04-23 20:04:28 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/gstadder.c: Fix non-flushing segmented seeks, Fixes #340060 for me
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_setcaps), (gst_adder_src_event),
+	  (gst_adder_sink_event), (gst_adder_collected):
+	  Fix non-flushing segmented seeks, Fixes #340060 for me
+
+2007-04-21 15:29:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery: add API keyword
+	  Original commit message from CVS:
+	  ChangeLog surgery: add API keyword
+
+2007-04-21 15:25:22 +0000  Olivier Crete <tester@tester.ca>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Chain up to parent class in dispose function; get rid of unnecessary 'dipo...
+	  Original commit message from CVS:
+	  Patch by: Olivier Crete  <tester at tester ca>
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_class_init),
+	  (gst_base_rtp_audio_payload_init),
+	  (gst_base_rtp_audio_payload_dispose):
+	  Chain up to parent class in dispose function; get rid of
+	  unnecessary 'diposed' flag in private structure (#415001).
+
+2007-04-21 15:10:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Some minor docs fixes and additions; also add missing 'Since' bits.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_class_init):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  Some minor docs fixes and additions; also add missing 'Since' bits.
+
+2007-04-21 14:40:45 +0000  Zeeshan Ali <zeenix@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.*: The recently-added gst_base_rtp_audio_payload_push() should take an object...
+	  Original commit message from CVS:
+	  Patch by: Zeeshan Ali  <zeenix gmail com>
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_handle_frame_based_buffer),
+	  (gst_base_rtp_audio_payload_handle_sample_based_buffer),
+	  (gst_base_rtp_audio_payload_push):
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  The recently-added gst_base_rtp_audio_payload_push() should take an
+	  object of type GstBaseRTPAudioPayload as first argument (#431672).
+
+2007-04-21 14:14:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioresample/gstaudioresample.c: Make more functions static, just because we can.
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  Make more functions static, just because we can.
+
+2007-04-21 13:54:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/audioresample.c: Add unit test for audioresample shutdown crasher (#420106).
+	  Original commit message from CVS:
+	  * tests/check/elements/audioresample.c:
+	  Add unit test for audioresample shutdown crasher (#420106).
+
+2007-04-20 10:42:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/subparse/: Use GST_DISABLE_XML here
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c:
+	  * gst/subparse/samiparse.c:
+	  Use GST_DISABLE_XML here
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
+	  (gst_xvimagesink_xwindow_new), (gst_xvimagesink_get_xv_support),
+	  (gst_xvimagesink_buffer_alloc),
+	  (gst_xvimagesink_navigation_send_event):
+	  * sys/xvimage/xvimagesink.h:
+	  Include stdlib.h when using atoi.
+	  * tests/check/elements/playbin.c: (playbin_suite):
+	  Use GST_DISABLE_REGISTRY here
+
+2007-04-19 16:58:53 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/: Track initialisation state; don't try to use encoder state if we're not initialised (it'll segfault).
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
+	  (theora_enc_sink_event), (theora_enc_change_state):
+	  Track initialisation state; don't try to use encoder state if we're
+	  not initialised (it'll segfault).
+
+2007-04-18 11:06:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/pipelines/.cvsignore: Fix build.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/.cvsignore:
+	  Fix build.
+
+2007-04-17 10:56:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/app/Makefile.am: Fix CFLAGS and hopefully #430594.
+	  Original commit message from CVS:
+	  * gst/app/Makefile.am:
+	  Fix CFLAGS and hopefully #430594.
+
+2007-04-17 02:53:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Allow random depths between 1 and 32 instead of only multiplies of 8.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Allow random depths between 1 and 32 instead of only multiplies of 8.
+
+2007-04-17 02:04:21 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Set the maximum number of channels for PCM and float in the correct place to have it ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Set the maximum number of channels for PCM and float in the correct
+	  place to have it also used when creating the template caps.
+
+2007-04-17 01:56:07 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Correctly support 4, 6 and 8 channels with normal PCM and float wav files.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Correctly support 4, 6 and 8 channels with normal PCM and float
+	  wav files.
+	  Fix the depth and signedness calculation in extensible wav files and
+	  also handle 1, 2, 4, 6, 8 channels here when a file without channel
+	  mask is found.
+	  Add support for float, alaw and mulaw in extensible wav files.
+	  This allows correct playback of all but 5 files from
+	  http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples.html
+	  (gst_riff_create_audio_template_caps):
+	  Add voxware and float formats to the template caps.
+
+2007-04-16 22:20:03 +0000  Vincent Torri <vtorri@univ-evry.fr>
+
+	  ext/pango/gstclockoverlay.c: Fix unused variable warning if HAVE_LOCALTIME_R is undefinied
+	  Original commit message from CVS:
+	  Patch by: Vincent Torri <vtorri at univ-evry dot fr>
+	  * ext/pango/gstclockoverlay.c: (gst_clock_overlay_render_time):
+	  Fix unused variable warning if HAVE_LOCALTIME_R is undefinied
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  * gst/audioresample/gstaudioresample.c: (audioresample_do_output):
+	  Use the correct format strings for integer formats.
+
+2007-04-16 21:44:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-plugins-base.doap:
+	  fix release date
+	  Original commit message from CVS:
+	  fix release date
+
+2007-04-16 21:42:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-plugins-base.doap:
+	  fix release date
+	  Original commit message from CVS:
+	  fix release date
+
+2007-04-15 14:35:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/theora/theoraenc.c (theora_buffer_from_packet, theora_enc_chain): Don't use pad_alloc_buffer_and_set_caps to crea...
+	  Original commit message from CVS:
+	  * ext/theora/theoraenc.c (theora_buffer_from_packet, theora_enc_chain):
+	  Don't use pad_alloc_buffer_and_set_caps to create a small header
+	  packet, or, worse, to create a big temporary video buffer using the
+	  src pad.
+
+2007-04-14 12:34:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/gdp/gstgdppay.c (gst_gdp_pay_chain): tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdppay.c (gst_gdp_pay_chain):
+	  * tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+	  GST_START_TEST, buffer_probe_cb, GST_START_TEST):
+	  Fix a bug where serialized IN_CAPS buffers needed to be set IN_CAPS.
+
+2007-04-13 22:10:58 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  add debug
+	  Original commit message from CVS:
+	  add debug
+
+2007-04-13 21:55:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* tests/check/pipelines/streamheader.c:
+	  tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+	  Original commit message from CVS:
+	  * tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+	  GST_START_TEST, n_in_caps, buffer_probe_cb, GST_START_TEST,
+	  streamheader_suite):
+	  Add another test set up for failure
+
+2007-04-13 21:09:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	* gst/gdp/gstgdpdepay.c:
+	  debug changes
+	  Original commit message from CVS:
+	  debug changes
+
+2007-04-13 21:08:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/Makefile.am: tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb,
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb,
+	  GST_START_TEST, streamheader_suite, main):
+	  Add a test for the streamheader bug Wim fixed.
+
+2007-04-13 11:42:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/theora/theoradec.c: Fix misleading comment.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_sink_event):
+	  Fix misleading comment.
+
+2007-04-13 06:17:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-media.c: More sanity checks for the header fields.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  More sanity checks for the header fields.
+
+2007-04-12 16:36:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/tags.c: Try encodings from all environment variables, not just those in the first environment variab...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_freeform_string_to_utf8):
+	  Try encodings from all environment variables, not just those in the
+	  first environment variable that is set.
+
+2007-04-12 15:00:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videorate/gstvideorate.c: Add some debug.
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_setcaps),
+	  (gst_video_rate_chain):
+	  Add some debug.
+	  * tests/check/elements/videorate.c: (GST_START_TEST),
+	  (videorate_suite):
+	  Added check for videorate changing caps handling. Closes #421834.
+
+2007-04-12 12:57:33 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisdec.c: Use scale functions to avoid overflow when calculating duration of vorbis buffers.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  Use scale functions to avoid overflow when calculating duration of
+	  vorbis buffers.
+
+2007-04-12 12:19:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add gst_tag_freeform_string_to_utf8() (#405072).
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_freeform_string_to_utf8):
+	  API: add gst_tag_freeform_string_to_utf8() (#405072).
+	  * gst-libs/gst/tag/gstid3tag.c: (gst_tag_extract_id3v1_string):
+	  Use gst_tag_freeform_string_to_utf8() here.
+
+2007-04-12 10:38:03 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  log tweaking
+	  Original commit message from CVS:
+	  log tweaking
+
+2007-04-12 10:03:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/gdp/gstgdppay.c: Make sure we set the IN_CAPS flag correctly.
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain),
+	  (gst_gdp_pay_sink_event):
+	  Make sure we set the IN_CAPS flag correctly.
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render):
+	  Get the IN_CAPS flag before we call functions that mess with the flags.
+
+2007-04-10 20:37:05 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* gst/gdp/gstgdppay.c:
+	  gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader, gst_gdp_pay_chain, gst_gdp_pay_sink_event):
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader,
+	  gst_gdp_pay_chain, gst_gdp_pay_sink_event):
+	  Only stamp buffers with offset/offset_end right before they get
+	  pushed.  This ensures offset continuity, which was not the case
+	  before as shown by
+	  gst-launch -v -m audiotestsrc num-buffers=10 ! audioconvert ! vorbisenc ! gdppay ! identity check-imperfect-offset=TRUE ! fakesink silent=TRUE
+
+2007-04-10 20:25:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.c:
+	  adding debugging
+	  Original commit message from CVS:
+	  adding debugging
+
+2007-04-10 11:23:18 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* common:
+	* gst-plugins-base.spec.in:
+	  update spec file for RTP changes
+	  Original commit message from CVS:
+	  update spec file for RTP changes
+
+2007-04-06 12:58:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin.c: Activate sync in playbin, we are ready to handle it for live streams.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (add_sink),
+	  (gst_play_bin_change_state):
+	  Activate sync in playbin, we are ready to handle it for live streams.
+
+2007-04-06 09:56:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/playbin.c: Add small test for stream-info-value-array code paths.
+	  Original commit message from CVS:
+	  * tests/check/elements/playbin.c:
+	  (test_sink_usage_video_only_stream), (playbin_suite):
+	  Add small test for stream-info-value-array code paths.
+
+2007-04-05 15:44:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Don't try to create invalid calibration parameters by making the internal time...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_skew_slaving):
+	  Don't try to create invalid calibration parameters by making the
+	  internal time go backwards, instead make external time go forward.
+
+2007-04-05 10:27:06 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  gst/playback/gstplaybasebin.c: Fix leak in add_stream(), when g_value_set_object() increases the refcount of streamin...
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * gst/playback/gstplaybasebin.c: (add_stream):
+	  Fix leak in add_stream(), when g_value_set_object() increases the
+	  refcount of streaminfo object. Fixes #426250.
+
+2007-04-04 02:45:03 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videotestsrc/: Add a test pattern called "circular", which has concentric rings with varying radial frequency.  T...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/videotestsrc/videotestsrc.c:
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add a test pattern called "circular", which has concentric
+	  rings with varying radial frequency.  The main purpose of this
+	  pattern is to test fidelity loss in a filter or scaler element.
+	  Notably, this pattern is scale invariant, and is optimally viewed
+	  with a width (and height) of 400.
+
+2007-04-03 11:10:52 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  gst/playback/gstdecodebin2.c: Decodebin2 doesn't unref pads it obtains in some occasions:
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com>
+	  * gst/playback/gstdecodebin2.c: (connect_pad), (expose_pad),
+	  (deactivate_free_recursive):
+	  Decodebin2 doesn't unref pads it obtains in some occasions:
+	  - multiqueue src pads, when either connecting further or exposing
+	  - sink pads of new autoplugged elements
+	  - peer pads when recursively freeing elements
+	  Fixes #425455.
+
+2007-03-30 17:05:23 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: Add audio/x-raw-float support, now that audioconvert support non-native endianness fl...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Add audio/x-raw-float support, now that audioconvert support
+	  non-native endianness floats.
+
+2007-03-30 15:00:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/libs/gst-plugins-base-libs-docs.sgml: gstreamer-plugins-base.pc doesn't exist, it's gstreamer-plugins-base-0.10.pc.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  gstreamer-plugins-base.pc doesn't exist, it's
+	  gstreamer-plugins-base-0.10.pc.
+
+2007-03-29 18:42:34 +0000  René Stadler <mail@renestadler.de>
+
+	  with some minor changes
+	  Original commit message from CVS:
+	  Patch by: René Stadler <mail at renestadler dot de>
+	  with some minor changes
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  Use more efficient float endianness conversion functions that don't
+	  involve 2 function calls per value.
+	  * gst/audioconvert/audioconvert.c: (audio_convert_get_func_index),
+	  (check_default), (audio_convert_prepare_context):
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_parse_caps), (make_lossless_changes):
+	  Support non-native endianness floats as input and output.
+	  Fixes #339838.
+	  * tests/check/elements/audioconvert.c: (verify_convert),
+	  (GST_START_TEST):
+	  Add unit tests for the non-native endianness float conversions.
+
+2007-03-29 16:23:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Add Private structure.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_base_init),
+	  (gst_base_rtp_depayload_class_init), (gst_base_rtp_depayload_init),
+	  (gst_base_rtp_depayload_setcaps), (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_change_state),
+	  (gst_base_rtp_depayload_set_property),
+	  (gst_base_rtp_depayload_get_property):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Add Private structure.
+	  Bring element code to 2007.
+	  Parse clock-base caps param and use it when generating the
+	  newsegment.
+	  Reset variables before going to PAUSED.
+	  Fix some docs.
+
+2007-03-29 16:20:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Add RTCP docs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_get_adapter):
+	  Add RTCP docs.
+	  Fix some more docs.
+	  * gst-libs/gst/rtp/Makefile.am:
+	  * gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  (gst_rtcp_buffer_new_take_data), (gst_rtcp_buffer_new_copy_data),
+	  (gst_rtcp_buffer_validate_data), (gst_rtcp_buffer_validate),
+	  (gst_rtcp_buffer_get_packet_count), (read_packet_header),
+	  (gst_rtcp_buffer_get_first_packet), (gst_rtcp_packet_move_to_next),
+	  (gst_rtcp_buffer_add_packet), (gst_rtcp_packet_remove),
+	  (gst_rtcp_packet_get_padding), (gst_rtcp_packet_get_type),
+	  (gst_rtcp_packet_get_count), (gst_rtcp_packet_get_length),
+	  (gst_rtcp_packet_sr_get_sender_info),
+	  (gst_rtcp_packet_sr_set_sender_info),
+	  (gst_rtcp_packet_rr_get_ssrc), (gst_rtcp_packet_rr_set_ssrc),
+	  (gst_rtcp_packet_get_rb_count), (gst_rtcp_packet_get_rb),
+	  (gst_rtcp_packet_add_rb), (gst_rtcp_packet_set_rb),
+	  (gst_rtcp_packet_sdes_get_chunk_count),
+	  (gst_rtcp_packet_sdes_first_chunk),
+	  (gst_rtcp_packet_sdes_next_chunk), (gst_rtcp_packet_sdes_get_ssrc),
+	  (gst_rtcp_packet_sdes_first_item),
+	  (gst_rtcp_packet_sdes_next_item), (gst_rtcp_packet_sdes_get_item),
+	  (gst_rtcp_packet_bye_get_ssrc_count),
+	  (gst_rtcp_packet_bye_get_nth_ssrc), (gst_rtcp_packet_bye_add_ssrc),
+	  (gst_rtcp_packet_bye_add_ssrcs), (get_reason_offset),
+	  (gst_rtcp_packet_bye_get_reason_len),
+	  (gst_rtcp_packet_bye_get_reason), (gst_rtcp_packet_bye_set_reason):
+	  * gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  Add new helper object for parsing and creating RTCP messages.
+
+2007-03-29 12:07:02 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst-libs/gst/riff/riff-media.c: PCM samples with width=8 must be always unsigned, no matter what depth they have.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  PCM samples with width=8 must be always unsigned, no matter what
+	  depth they have.
+
+2007-03-29 11:24:47 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/videorate/gstvideorate.c (gst_video_rate_flush_prev): Make perfect offsets also, not just timestamps.
+	  Original commit message from CVS:
+	  2007-03-29  Andy Wingo  <wingo@pobox.com>
+	  * gst/videorate/gstvideorate.c (gst_video_rate_flush_prev): Make
+	  perfect offsets also, not just timestamps.
+	  * tests/check/elements/videorate.c (test_more): Test that given
+	  any incoming offsets, that videorate produces perfect offsets.
+
+2007-03-29 10:19:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-ids.h: Add some more RIFF formats.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  Add some more RIFF formats.
+
+2007-03-29 10:17:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.*: Fix fixed payload names and docs.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  (gst_rtp_buffer_default_clock_rate):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Fix fixed payload names and docs.
+	  Added method to get the default clock rates of fixed payload types.
+	  API: GstRTPBuffer::gst_rtp_buffer_default_clock_rate()
+
+2007-03-28 15:24:40 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	  tests/check/pipelines/.cvsignore: Add new vorbisdec test to cvsignore.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/.cvsignore:
+	  Add new vorbisdec test to cvsignore.
+
+2007-03-28 14:50:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.*: Store private stuff in GstBaseAudioSinkPrivate.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: (slave_method_get_type),
+	  (gst_base_audio_sink_class_init), (gst_base_audio_sink_init),
+	  (gst_base_audio_sink_query), (gst_base_audio_sink_get_time),
+	  (gst_base_audio_sink_set_property),
+	  (gst_base_audio_sink_get_property), (gst_base_audio_sink_event),
+	  (clock_convert_external), (gst_base_audio_sink_resample_slaving),
+	  (gst_base_audio_sink_skew_slaving),
+	  (gst_base_audio_sink_handle_slaving), (gst_base_audio_sink_render),
+	  (gst_base_audio_sink_async_play):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Store private stuff in GstBaseAudioSinkPrivate.
+	  Add configurable clock slaving modes property.
+	  API:: GstBaseAudioSink::slave-method property
+	  Some more latency reporting tweaks.
+	  Added skew based clock slaving correction and make it the default until
+	  the resampling method is more robust.
+
+2007-03-27 12:44:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  gst/audioconvert/audioconvert.c: Add docs to the integer pack functions and implement proper rounding. Before we had ...
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c:
+	  Add docs to the integer pack functions and implement proper
+	  rounding. Before we had rounding towards negative infinity, i.e.
+	  always the smaller number was taken. Now we use natural rounding,
+	  i.e. rounding to the nearest integer and to the one with the largest
+	  absolute value for X.5. The old rounding introduced some minor
+	  distortions. Fixes #420079
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Fix one unit test that assumed the old rounding and added unit tests
+	  for checking signed/unsigned int16 <-> signed/unsigned int16 with
+	  depth 8, one for signed int16 <-> unsigned int16 and one for the new
+	  rounding from signed int32 to signed/unsigned int16.
+
+2007-03-27 11:31:17 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Fix typo in debug line introduced recently, as pointed out on irc.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (strip_width_64),
+	  (gst_audio_convert_transform_caps):
+	  Fix typo in debug line introduced recently, as pointed out on irc.
+
+2007-03-27 10:17:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Make sure we parse floating-point numbers in vorbis comments correctly with either '.' or ',' as separator, no matter...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Make sure we parse floating-point numbers in vorbis comments
+	  correctly with either '.' or ',' as separator, no matter what
+	  the current locale is. Add unit test for this too.
+
+2007-03-27 09:37:42 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/pipelines/vorbisdec.c:
+	  commit new file
+	  Original commit message from CVS:
+	  commit new file
+
+2007-03-26 22:38:19 +0000  René Stadler <mail@renestadler.de>
+
+	  gst-libs/gst/tag/gstvorbistag.c: When writing out floating-point numbers to vorbis comment tags, always use the same ...
+	  Original commit message from CVS:
+	  Patch by: René Stadler  <mail at renestadler de>
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_tag_to_vorbis_comments):
+	  When writing out floating-point numbers to vorbis comment tags, always
+	  use the same character as separator no matter what the current locale is
+	  (fixes #423051).
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Add unit tests for replaygain tags in vorbis comments (closes #423055).
+
+2007-03-26 20:56:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/vorbis/vorbisdec.c (vorbis_dec_push_forward, vorbis_handle_data_packet):
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c (vorbis_dec_push_forward,
+	  vorbis_handle_data_packet):
+	  Correctly set DURATION to generate a timestamp-continuous stream.
+	  One bug left at the end; see
+	  ihttp://bugzilla.gnome.org/show_bug.cgi?id=423086
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/vorbisenc.c (GST_START_TEST):
+	  Add a test to check this.  Without the above patch this test fails.
+
+2007-03-26 11:44:07 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/rtp/Makefile.am: The base audio payloader uses GstAdapter - we need GST_BASE_LIBS.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/Makefile.am:
+	  The base audio payloader uses GstAdapter - we need GST_BASE_LIBS.
+
+2007-03-23 15:43:24 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update spec file
+	  Original commit message from CVS:
+	  update spec file
+
+2007-03-23 12:32:33 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/videorate/gstvideorate.c: If videorate changes caps, we can no longer use the old buffer (which may have a differ...
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_setcaps),
+	  (gst_video_rate_reset), (gst_video_rate_chain):
+	  If videorate changes caps, we can no longer use the old buffer
+	  (which may have a different size, incompatible with our caps).
+	  So don't do that; just duplicate the new frame more times.
+
+2007-03-22 17:43:52 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybin.c: Remove playbin's override of the set_clock vmethod. It's irrelevant after Wim's commit on ...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init):
+	  Remove playbin's override of the set_clock vmethod. It's irrelevant
+	  after Wim's commit on the 19th.
+
+2007-03-22 14:37:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst-libs/gst/app/Makefile.am: Use GST_ALL_LDFLAGS, which actually exists, but maybe David can confirm that was what h...
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/Makefile.am:
+	  Use GST_ALL_LDFLAGS, which actually exists, but maybe David
+	  can confirm that was what he wanted.
+
+2007-03-22 09:26:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.*: Don't cache file sizes. Fixes #341078.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_get_size),
+	  (gst_gnome_vfs_src_start), (gst_gnome_vfs_src_stop):
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  Don't cache file sizes. Fixes #341078.
+
+2007-03-21 11:03:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Use GST_PTR_FORMAT to log caps.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (add_sink):
+	  Use GST_PTR_FORMAT to log caps.
+
+2007-03-21 10:23:11 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: Special-case some more colour names that pango doesn't handle by default. Fixes #420578.
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian net>
+	  * gst/subparse/samiparse.c: (handle_start_font):
+	  Special-case some more colour names that pango doesn't handle by
+	  default. Fixes #420578.
+
+2007-03-20 11:49:55 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.c: If we get a zero-sized input buffer, don't pass it to libvorbis, as that marks EOS internally...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain):
+	  If we get a zero-sized input buffer, don't pass it to libvorbis, as
+	  that marks EOS internally. After that, libvorbis will buffer all
+	  input data, and encode none of it, eventually leading to memory
+	  exhaustion.
+
+2007-03-19 10:52:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Don't post STATE_DIRTY anymore.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (remove_fakesink):
+	  Don't post STATE_DIRTY anymore.
+	  * gst/playback/gstplaybin.c: (add_sink), (gst_play_bin_send_event),
+	  (gst_play_bin_change_state):
+	  Remove stream_time reset in seek handling, core does that now.
+	  Disable clocking for live pipelines by forcing a NULL clock to the
+	  complete pipeline, core is too smart now for our previous hack.
+	  We can always autoplug in PAUSED now.
+
+2007-03-18 03:14:01 +0000  David Schleef <ds@schleef.org>
+
+	  REQUIREMENTS: Update this file, change the formatting to make it more consistent, plus more machine readable.
+	  Original commit message from CVS:
+	  * REQUIREMENTS:  Update this file, change the formatting to make
+	  it more consistent, plus more machine readable.
+
+2007-03-16 17:29:09 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Previous fix was too simplistic, and broke the tests. Use a better approach; only...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (make_lossless_changes),
+	  (strip_width_64), (append_with_other_format):
+	  Previous fix was too simplistic, and broke the tests. Use a better
+	  approach; only strip 64 from widths for integer audio.
+
+2007-03-16 16:42:23 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/gstaudioconvert.c: We don't support 64 bit integer audio, so don't try to claim we can.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (make_lossless_changes),
+	  (gst_audio_convert_transform_caps):
+	  We don't support 64 bit integer audio, so don't try to claim we can.
+	  Stops us producing caps don't match our template caps.
+	  Update comments.
+
+2007-03-15 10:52:21 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioresample/gstaudioresample.c: Don't trigger discontinuities for very small imperfections; a filter flush will...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  (audioresample_check_discont), (audioresample_transform):
+	  Don't trigger discontinuities for very small imperfections; a filter
+	  flush will sound bad, and many plugins have rounding errors leading
+	  to these.
+
+2007-03-14 21:11:18 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.*: olivier.crete@collabora.co.uk.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  Add min-ptime property to RTP base audio payloader. Patch by
+	  olivier.crete@collabora.co.uk.
+	  Fixes #415001
+	  Indentation/whitespace/documentation fixes.
+
+2007-03-14 17:16:30 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/audioresample/gstaudioresample.c: Handle discontinuous streams.
+	  Original commit message from CVS:
+	  2007-03-14  Julien MOUTTE  <julien@moutte.net>
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init),
+	  (audioresample_transform_size), (audioresample_do_output),
+	  (audioresample_transform), (audioresample_pushthrough): Handle
+	  discontinuous streams.
+	  * gst/audioresample/gstaudioresample.h:
+	  * tests/check/elements/audioresample.c:
+	  (test_discont_stream_instance), (GST_START_TEST),
+	  (audioresample_suite): Add a test for discontinuous streams.
+	  * win32/common/config.h: Updated.
+
+2007-03-14 15:16:23 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  po/: Update translations from translation project.
+	  Original commit message from CVS:
+	  * po/af.po:
+	  * po/az.po:
+	  * po/cs.po:
+	  * po/en_GB.po:
+	  * po/it.po:
+	  * po/nb.po:
+	  * po/nl.po:
+	  * po/or.po:
+	  * po/sq.po:
+	  * po/sr.po:
+	  * po/sv.po:
+	  * po/uk.po:
+	  * po/vi.po:
+	  Update translations from translation project.
+
+2007-03-14 15:05:32 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/gstgdpdepay.c:
+	  add buffer logging
+	  Original commit message from CVS:
+	  add buffer logging
+
+2007-03-14 14:48:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/audioresample/: Since I really am not interested in a debug line for each sample being processed, move the librar...
+	  Original commit message from CVS:
+	  * gst/audioresample/debug.h:
+	  * gst/audioresample/resample.c: (resample_init):
+	  Since I really am not interested in a debug line for each sample
+	  being processed, move the library's debugging to its own category,
+	  libaudioresample
+
+2007-03-14 14:09:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/audioresample/gstaudioresample.c:
+	  add debugging and reformat docs
+	  Original commit message from CVS:
+	  add debugging and reformat docs
+
+2007-03-12 23:29:07 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Since the plugin doesn't support anything other than 4:2:0 right now, post an error and fail ...
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_handle_type_packet):
+	  Since the plugin doesn't support anything other than 4:2:0 right
+	  now, post an error and fail if we get something else. Won't matter
+	  until libtheora supports the other pixel formats, but hopefully
+	  that'll be soon...
+
+2007-03-12 15:50:35 +0000  Alex Lancaster <alexlan@fedoraproject.org>
+
+	* ChangeLog:
+	  I'm too lazy to comment this
+	  Original commit message from CVS:
+	  Mention Patch by: Alex Lancaster in a recent commit.
+
+2007-03-12 11:47:42 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  examples/app/.cvsignore: The buildbot demands .cvsignore files, and I comply.
+	  Original commit message from CVS:
+	  * examples/app/.cvsignore:
+	  The buildbot demands .cvsignore files, and I comply.
+
+2007-03-11 00:48:26 +0000  David Schleef <ds@schleef.org>
+
+	  Add appsrc/appsink example.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * examples/Makefile.am:
+	  * examples/app/Makefile.am:
+	  * examples/app/appsrc_ex.c:
+	  Add appsrc/appsink example.
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/app/gstapp.c:
+	  * gst-libs/gst/app/gstappsink.c:
+	  * gst-libs/gst/app/gstappsink.h:
+	  * gst/app/gstapp.c:
+	  Add appsink.
+
+2007-03-10 15:59:33 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Use gst_guint64_to_gdouble for conversion.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:(gst_base_audio_sink_render):
+	  Use gst_guint64_to_gdouble for conversion.
+	  * win32/MANIFEST:
+	  Add new files to the win32 MANIFEST.
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgstpbutils.def:
+	  Add new exported functions.
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstdecodebin.dsp:
+	  * win32/vs6/libgstplaybin.dsp:
+	  Change the link to libgstpbutils.lib.
+	  * win32/vs6/libgstdecodebin2.dsp:
+	  Add a new project for decodebin2.
+	  * win32/vs6/libgstpbutils.dsp:
+	  Add a new project for pbutils.
+
+2007-03-10 12:18:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Also accept partial dates with only year and month, like 1999-12-00 (fixes #410396 e...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  Also accept partial dates with only year and month,
+	  like 1999-12-00 (fixes #410396 even more).
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Add unit test for the above.
+
+2007-03-10 11:21:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/subparse.c: Add unit test for MPL2 subtitle format (#413799).
+	  Original commit message from CVS:
+	  * tests/check/elements/subparse.c: (GST_START_TEST),
+	  (subparse_suite):
+	  Add unit test for MPL2 subtitle format (#413799).
+
+2007-03-10 11:17:52 +0000  Kamil Pawlowski <kamilpe@gmail.com>
+
+	  gst/subparse/: Add support for MPL2 subtitle format (#413799).
+	  Original commit message from CVS:
+	  Patch by: Kamil Pawlowski  <kamilpe gmail com>
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect),
+	  (gst_sub_parse_format_autodetect), (gst_sub_parse_sink_event),
+	  (gst_subparse_type_find):
+	  * gst/subparse/gstsubparse.h:
+	  * gst/subparse/mpl2parse.c: (mpl2_parse_line), (parse_mpl2):
+	  * gst/subparse/mpl2parse.h:
+	  Add support for MPL2 subtitle format (#413799).
+
+2007-03-09 17:33:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: We require core CVS for the new buffer metadata copy functions.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  We require core CVS for the new buffer metadata copy functions.
+
+2007-03-09 16:51:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/tag/gstid3tag.c: Add read support for GST_TAG_MUSICBRAINZ_SORTNAME (TSOP) tag.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Add read support for GST_TAG_MUSICBRAINZ_SORTNAME (TSOP) tag.
+	  Fixes #414496.
+
+2007-03-09 16:46:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: Improve adapter usage and comments.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_sink_setcaps),
+	  (gst_vis_src_negotiate), (get_buffer), (gst_visual_chain):
+	  Improve adapter usage and comments.
+
+2007-03-09 16:38:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Use new metadata copy function.
+	  Original commit message from CVS:
+	  * ext/pango/gsttextrender.c: (gst_text_render_chain):
+	  * ext/vorbis/vorbistag.c: (gst_vorbis_tag_parse_packet):
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c: (gst_netbuffer_copy):
+	  Use new metadata copy function.
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_transform):
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform):
+	  Basetransform copied the metadata for us.
+
+2007-03-09 16:28:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Some more logging. Only accept newsegment events in TIME format and send a WARNING messag...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_text_event),
+	  (gst_text_overlay_video_event):
+	  Some more logging. Only accept newsegment events in TIME format and
+	  send a WARNING message if they are not in TIME format.
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (gst_sub_parse_init), (gst_sub_parse_src_event), (handle_buffer),
+	  (gst_sub_parse_chain), (gst_sub_parse_sink_event):
+	  * gst/subparse/gstsubparse.h:
+	  No need to allocate GstSegment structure dynamically, just put it
+	  into the instance structure; ignore newsegment events in BYTE
+	  format and in particular don't let it overwrite our saved TIME
+	  segment from the last seek.
+
+2007-03-09 13:05:04 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Replace AC3 typefinder with one that isn't terrible, and actually works usefully.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (ac3_type_find):
+	  Replace AC3 typefinder with one that isn't terrible, and actually
+	  works usefully.
+
+2007-03-09 12:22:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/audioconvert/gstaudioconvert.c: fix error category and translatable string
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_transform):
+	  fix error category and translatable string
+
+2007-03-09 11:23:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  pkgconfig/: Fix up utils => pbutils here too.
+	  Original commit message from CVS:
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-plugins-base.pc.in:
+	  Fix up utils => pbutils here too.
+
+2007-03-09 10:49:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Break out of loop in chain function as soon as possible if we get a non-OK flow return.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (handle_buffer):
+	  Break out of loop in chain function as soon as possible if we get
+	  a non-OK flow return.
+
+2007-03-08 18:26:07 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/elements/alsa.c: Unref the mixer if the state change fails too (if the alsa devices are inaccessible, for...
+	  Original commit message from CVS:
+	  * tests/check/elements/alsa.c: (GST_START_TEST):
+	  Unref the mixer if the state change fails too (if the
+	  alsa devices are inaccessible, for example)
+
+2007-03-08 17:49:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/Makefile.am: Don't test libvisual elements in the states check, because libvisual seems to leak internally.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Don't test libvisual elements in the states check, because libvisual
+	  seems to leak internally.
+	  Re-enable the alsa and states tests now that there's new suppressions
+	  in gst.supp.
+	  * tests/check/elements/alsa.c: (GST_START_TEST):
+	  Don't leak the alsamixer we instantiated.
+
+2007-03-08 15:22:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: Move some cleanup stuff from the state change handler into a _reset() function that can be called from _finaliz...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_clear),
+	  (gst_ximagesink_change_state), (gst_ximagesink_reset),
+	  (gst_ximagesink_finalize):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state),
+	  (gst_xvimagesink_reset), (gst_xvimagesink_finalize):
+	  Move some cleanup stuff from the state change handler into a _reset()
+	  function that can be called from _finalize(). This ensures that things
+	  get freed even if (for some reason) the NULL->READY state transition
+	  fails in the parent class.
+	  Even if a parent state change fails, process our downward state change
+	  logic instead of bailing out early.
+	  Free the correct xcontext pointer in ximagesink's xcontext_clear.
+
+2007-03-08 12:53:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/alsa/gstalsasink.c: Extra log line.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_open):
+	  Extra log line.
+	  * ext/pango/gstclockoverlay.c: (gst_clock_overlay_init):
+	  * ext/pango/gsttimeoverlay.c: (gst_time_overlay_init):
+	  Use pango_font_description_set_family_static instead of
+	  pango_font_description_set_family to save a string copy (it was
+	  leaking due to the strdup anyway)
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_finalize):
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_finalize):
+	  * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_finalize):
+	  * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_finalize):
+	  Chain up in finalize.
+
+2007-03-07 18:50:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixertrack.c: API: add "untranslated-label" property which should be set by implementations a...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  (gst_mixer_track_class_init), (gst_mixer_track_get_property),
+	  (gst_mixer_track_set_property):
+	  API: add "untranslated-label" property which should be set by
+	  implementations at construct time (#414645).
+	  * ext/alsa/gstalsamixeroptions.c: (gst_alsa_mixer_options_new):
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+	  Set "untranslated-label" when constructing mixer track objects.
+	  * tests/check/elements/alsa.c: (GST_START_TEST), (alsa_suite):
+	  Unit test to check the above.
+
+2007-03-07 17:15:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Fix confusing debug message.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain):
+	  Fix confusing debug message.
+
+2007-03-07 17:12:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-plugins-base.doap: update doap file with new version
+	  Original commit message from CVS:
+	  * gst-plugins-base.doap:
+	  update doap file with new version
+
+2007-03-07 17:05:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  update docs
+	  Original commit message from CVS:
+	  update docs
+
+2007-03-07 16:56:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.12 ===
+
+2007-03-07 16:46:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-decodebin2.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/config.h:
+	  Release 0.10.12
+	  Original commit message from CVS:
+	  Release 0.10.12
+
+2007-03-07 15:35:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* common:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/de.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2007-03-06 12:31:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Bump version to 0.10.11.4 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump version to 0.10.11.4 pre-release
+
+2007-03-06 12:10:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Fix regression that made GStreamer skip the first samples of audio.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_async_play):
+	  Fix regression that made GStreamer skip the first samples of audio.
+	  Fixes #414684.
+
+2007-03-05 11:21:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Bump version to 0.10.11.3 pre-release
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump version to 0.10.11.3 pre-release
+
+2007-03-05 09:35:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  po/POTFILES.in: Update paths for the rename from utils to pbutils to fix the build.
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  Update paths for the rename from utils to pbutils to fix the build.
+
+2007-03-05 09:27:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/pbutils/Makefile.am: Change directory to install headers in from gst/utils to gst/pbutils as well.
+	  Original commit message from CVS:
+	  * gst-libs/gst/pbutils/Makefile.am:
+	  Change directory to install headers in from gst/utils to gst/pbutils
+	  as well.
+
+2007-03-04 23:41:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/libs/.gitignore:
+	  moap ignore
+	  Original commit message from CVS:
+	  moap ignore
+
+2007-03-04 23:41:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* win32/common/config.h:
+	* win32/common/libgstutils.def:
+	  update defs
+	  Original commit message from CVS:
+	  update defs
+
+2007-03-04 23:39:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  rename utils to pbutils
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/interfaces/mixer.c:
+	  * gst-libs/gst/pbutils/Makefile.am:
+	  * gst-libs/gst/pbutils/descriptions.c:
+	  (gst_pb_utils_get_source_description),
+	  (gst_pb_utils_get_sink_description),
+	  (gst_pb_utils_get_decoder_description),
+	  (gst_pb_utils_get_encoder_description),
+	  (gst_pb_utils_get_element_description),
+	  (gst_pb_utils_add_codec_description_to_tag_list),
+	  (gst_pb_utils_get_codec_description), (gst_pb_utils_list_all):
+	  * gst-libs/gst/pbutils/descriptions.h:
+	  * gst-libs/gst/pbutils/install-plugins.c:
+	  * gst-libs/gst/pbutils/install-plugins.h:
+	  * gst-libs/gst/pbutils/missing-plugins.c:
+	  (gst_missing_uri_source_message_new),
+	  (gst_missing_uri_sink_message_new),
+	  (gst_missing_element_message_new),
+	  (gst_missing_decoder_message_new),
+	  (gst_missing_encoder_message_new),
+	  (gst_missing_plugin_message_get_description):
+	  * gst-libs/gst/pbutils/missing-plugins.h:
+	  * gst-libs/gst/pbutils/pbutils.c: (gst_pb_utils_init):
+	  * gst-libs/gst/pbutils/pbutils.h:
+	  * gst-libs/gst/utils/Makefile.am:
+	  * gst-libs/gst/utils/base-utils.c:
+	  * gst-libs/gst/utils/base-utils.h:
+	  * gst-libs/gst/utils/descriptions.c:
+	  * gst-libs/gst/utils/descriptions.h:
+	  * gst-libs/gst/utils/install-plugins.c:
+	  * gst-libs/gst/utils/install-plugins.h:
+	  * gst-libs/gst/utils/missing-plugins.c:
+	  * gst-libs/gst/utils/missing-plugins.h:
+	  * gst-plugins-base.spec.in:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstdecodebin2.c:
+	  * gst/playback/gstplaybasebin.c: (setup_subtitle),
+	  (gen_source_element):
+	  * gst/playback/gstplaybin.c: (plugin_init):
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/pbutils.c: (GST_START_TEST),
+	  (test_pb_utils_install_plugins_do_callout), (libgstpbutils_suite):
+	  * tests/check/libs/utils.c:
+	  rename utils to pbutils
+
+2007-03-03 10:23:03 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/app/Makefile.am: Install the headers.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/Makefile.am:
+	  Install the headers.
+
+2007-03-03 10:10:30 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/app/: Add GstAppBuffer that includes a callback and closure for proper handling of data chunks.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/app/gstappbuffer.c:
+	  * gst-libs/gst/app/gstappbuffer.h:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  Add GstAppBuffer that includes a callback and closure for
+	  proper handling of data chunks.
+
+2007-03-03 09:06:06 +0000  David Schleef <ds@schleef.org>
+
+	  gst-libs/gst/app/gstappsrc.*: Hacking to address issues in 413418.
+	  Original commit message from CVS:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  * gst-libs/gst/app/gstappsrc.h:
+	  Hacking to address issues in 413418.
+
+2007-03-03 08:16:57 +0000  David Schleef <ds@schleef.org>
+
+	  Move the app library to gst-libs/gst/app (duh!)
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  * configure.ac:
+	  * ext/Makefile.am:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/app/Makefile.am:
+	  * gst-libs/gst/app/gstapp.c:
+	  * gst-libs/gst/app/gstappsrc.c:
+	  * gst-libs/gst/app/gstappsrc.h:
+	  * gst/app/Makefile.am:
+	  * gst/app/gstapp.c:
+	  * gst/app/gstappsrc.c:
+	  * gst/app/gstappsrc.h:
+	  Move the app library to gst-libs/gst/app (duh!)
+
+2007-03-02 12:59:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Add documentation for decodebin2 that indicates that the API is still unstable.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/inspect/plugin-decodebin2.xml:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
+	  Add documentation for decodebin2 that indicates that the API
+	  is still unstable.
+
+2007-03-01 18:50:00 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Update to 0.10.11.2 (0.10.12 pre-release)
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Update to 0.10.11.2 (0.10.12 pre-release)
+
+2007-03-01 17:29:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: base time is irrelevant here.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_async_play):
+	  base time is irrelevant here.
+
+2007-03-01 17:01:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/: Improve debugging.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func):
+	  * gst-libs/gst/audio/gstaudiosrc.c: (audioringbuffer_thread_func):
+	  Improve debugging.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_query), (gst_base_audio_sink_event),
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_async_play):
+	  Improve latency and clock slaving calculations.
+	  Improve slave clock calibration.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_commit_full):
+	  When we are asked to render N sample to 0 bytes, return N.
+
+2007-03-01 16:48:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.*: Remove unused dispose function.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_class_init),
+	  (gst_alsasink_write), (gst_alsasink_reset):
+	  * ext/alsa/gstalsasink.h:
+	  Remove unused dispose function.
+	  Rename lock to not interfere with alsasrc lock.
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_finalize),
+	  (gst_alsasrc_class_init), (gst_alsasrc_init), (set_swparams),
+	  (gst_alsasrc_read), (gst_alsasrc_reset):
+	  * ext/alsa/gstalsasrc.h:
+	  Implement finalize function.
+	  Use lock to protect alsa access.
+	  Implement _reset.
+	  Fine tune sw params.
+
+2007-03-01 10:20:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* configure.ac:
+	  typo
+	  Original commit message from CVS:
+	  typo
+
+2007-02-28 19:27:28 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: Convert to new AG_GST style.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Convert to new AG_GST style.
+
+2007-02-28 15:17:20 +0000  Ed Catmur <ed@catmur.co.uk>
+
+	  gst/playback/gstplaybin.c: Fix race condition when rapidly switching visualisations in playbin.
+	  Original commit message from CVS:
+	  Patch by: Ed Catmur <ed at catmur dot co dot uk>
+	  * gst/playback/gstplaybin.c: (gst_play_bin_vis_unblocked),
+	  (gst_play_bin_vis_blocked), (gst_play_bin_set_property):
+	  Fix race condition when rapidly switching visualisations in playbin.
+	  Fixes #401029.
+
+2007-02-28 15:11:59 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/Makefile.am: Include local stuff before system installed things in LDFLAGS and
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Include local stuff before system installed things in LDFLAGS and
+	  CFLAGS.
+
+2007-02-28 15:10:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Improve debugging.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_sink_activate):
+	  Improve debugging.
+
+2007-02-28 15:05:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/v4l/: Fix duration and timestamping, taking latency into account.
+	  Original commit message from CVS:
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+	  (gst_v4lsrc_fixate), (gst_v4lsrc_query):
+	  * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_buffer_new):
+	  Fix duration and timestamping, taking latency into account.
+	  Implement latency query.
+
+2007-02-28 15:02:25 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudioclock.c: Fix clock name.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudioclock.c: (gst_audio_clock_init),
+	  (gst_audio_clock_new):
+	  Fix clock name.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_init), (gst_base_audio_sink_query):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_init),
+	  (gst_base_audio_src_query), (gst_base_audio_src_get_offset),
+	  (gst_base_audio_src_create):
+	  Improve latency query code.
+	  Use proper clock names.
+
+2007-02-28 12:57:46 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/generic/states.c:
+	  plug test leak
+	  Original commit message from CVS:
+	  plug test leak
+
+2007-02-28 12:44:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/generic/states.c: Copy the states.c test from core again
+	  Original commit message from CVS:
+	  * tests/check/generic/states.c: (GST_START_TEST):
+	  Copy the states.c test from core again
+	  * tests/check/Makefile.am:
+	  ignore cdio and cdparanoiasrc
+
+2007-02-28 12:08:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/audioconvert.c: Also make valgrind happy and avoid copying data in some cases.
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
+	  (double_hq), (audio_convert_get_func_index), (check_default),
+	  (audio_convert_prepare_context), (audio_convert_convert):
+	  Also make valgrind happy and avoid copying data in some cases.
+
+2007-02-28 11:58:16 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/generic/states.c:
+	  use a macro
+	  Original commit message from CVS:
+	  use a macro
+
+2007-02-28 11:47:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Don't run inplace if that overwrites source data as we go. Add more tests. Fixes #339837 even more.
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
+	  (double_hq), (audio_convert_get_func_index),
+	  (audio_convert_prepare_context), (audio_convert_convert):
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_class_init), (gst_audio_convert_get_unit_size),
+	  (gst_audio_convert_transform_caps):
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST),
+	  (audioconvert_suite):
+	  Don't run inplace if that overwrites source data as we go. Add more
+	  tests. Fixes #339837 even more.
+
+2007-02-27 18:45:37 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Fix various seeking bugs (Slider was not updating when doing a non flushing seek, Reverse...
+	  Original commit message from CVS:
+	  2007-02-27  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (do_seek), (set_update_scale),
+	  (msg_segment_done): Fix various seeking bugs (Slider was not
+	  updating when doing a non flushing seek, Reverse playback
+	  on segment seek was wrong).
+
+2007-02-26 21:01:03 +0000  David Schleef <ds@schleef.org>
+
+	  Add a new plugin/library to make it easy for apps to shove data into a pipeline.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/app/Makefile.am:
+	  * gst/app/gstapp.c:
+	  * gst/app/gstappsrc.c:
+	  * gst/app/gstappsrc.h:
+	  Add a new plugin/library to make it easy for apps to shove
+	  data into a pipeline.
+
+2007-02-26 11:48:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: When we stop scrubbing, don't leave the pipeline PLAYING when we requested a PAUSED state.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (stop_seek):
+	  When we stop scrubbing, don't leave the pipeline PLAYING when we
+	  requested a PAUSED state.
+
+2007-02-25 23:51:03 +0000  René Stadler <mail@renestadler.de>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Parse date strings in vorbis comments that have an invalid (zero) month or day (#410...
+	  Original commit message from CVS:
+	  Patch by: René Stadler <mail at renestadler de>
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  Parse date strings in vorbis comments that have an invalid (zero)
+	  month or day (#410396).
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Test case for the above.
+
+2007-02-24 20:12:49 +0000  Loïc Minier <lool+gnome@via.ecp.fr>
+
+	  Fix compilation with LDFLAGS='-Wl,-z,defs' (#410963).
+	  Original commit message from CVS:
+	  Patch by: Loïc Minier <lool+gnome at via ecp fr>
+	  * configure.ac:
+	  * ext/alsa/Makefile.am:
+	  * gst/audiotestsrc/Makefile.am:
+	  Fix compilation with LDFLAGS='-Wl,-z,defs' (#410963).
+
+2007-02-23 18:49:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Improve docs: point out that the application needs to assist playbin with buffering.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c:
+	  Improve docs: point out that the application needs to assist playbin
+	  with buffering.
+
+2007-02-23 13:10:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Change GStreamer marker prefix in detail string from 'gstreamer.net' to just 'gstreamer'. Document the caps string co...
+	  Original commit message from CVS:
+	  * gst-libs/gst/utils/install-plugins.c:
+	  * gst-libs/gst/utils/missing-plugins.c:
+	  * tests/check/libs/utils.c: (missing_msg_check_getters):
+	  Change GStreamer marker prefix in detail string from 'gstreamer.net'
+	  to just 'gstreamer'. Document the caps string component of the
+	  decoder/encoder detail a bit better, since not everyone will be
+	  familiar with the GStreamer media type/caps system (but they better
+	  enjoy nested itemized lists).
+
+2007-02-22 12:57:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/netbuffer/gstnetbuffer.c: Fix copying of GstNetBuffer (would crash before, or at least lead to invalid m...
+	  Original commit message from CVS:
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  (notgst_buffer_copy_fields_in_place), (gst_netbuffer_copy):
+	  Fix copying of GstNetBuffer (would crash before, or at least lead to
+	  invalid memory access, #410772), for now by copying the GstBuffer copy
+	  code from the core over here so we can copy the GstBuffer fields on a
+	  provided buffer instance (of type GstNetBuffer in this case). Would be
+	  better to fix this with some support by the core though (and in the long
+	  run change the broken GstBuffer/GstMiniObject copy semantics, #393099).
+	  * tests/check/Makefile.am:
+	  Enable unit test for GstNetBuffer.
+
+2007-02-22 11:04:10 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  Original commit message from CVS:
+	  2007-02-22  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_init): Disable pull-mode activation until we
+	  figure out how to make audio sinks go to PLAYING.
+
+2007-02-22 09:04:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add float as an intermediate format, as well as float mixing. Enable test that was failing before. Fixes #339837
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
+	  (double_hq), (audio_convert_get_func_index),
+	  (audio_convert_prepare_context), (audio_convert_convert):
+	  * gst/audioconvert/audioconvert.h:
+	  * gst/audioconvert/gstchannelmix.c: (gst_channel_mix_setup_matrix),
+	  (gst_channel_mix_mix_int), (gst_channel_mix_mix_float):
+	  * gst/audioconvert/gstchannelmix.h:
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Add float as an intermediate format, as well as float mixing. Enable
+	  test that was failing before. Fixes #339837
+
+2007-02-21 16:12:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/examples/seek/seek.c: Undo the previous commit: -1 as a stop time implies that the stop time is the end of file...
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (do_seek):
+	  Undo the previous commit: -1 as a stop time implies that the stop
+	  time is the end of file, clearing any previously configured segment.
+
+2007-02-21 15:36:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/examples/seek/seek.c: Don't SEEK_SET with a stop time of -1, use SEEK_NONE instead.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (do_seek):
+	  Don't SEEK_SET with a stop time of -1, use SEEK_NONE instead.
+
+2007-02-21 13:55:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/volume/gstvolume.c: Unbreak volume, value remains gint.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_process_int16),
+	  (volume_process_int16_clamp), (volume_set_caps):
+	  Unbreak volume, value remains gint.
+
+2007-02-21 13:08:51 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/volume/gstvolume.*: Extend float audio support (double) and some int->uint cleanups.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (volume_update_real_volume), (gst_volume_set_volume),
+	  (gst_volume_init), (volume_process_double), (volume_process_float),
+	  (volume_process_int16), (volume_process_int16_clamp),
+	  (volume_set_caps), (volume_transform_ip), (volume_update_volume):
+	  * gst/volume/gstvolume.h:
+	  Extend float audio support (double) and some int->uint cleanups.
+
+2007-02-20 15:44:32 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin2.c: Don't free groups from the streaming threads. Just put them aside and free them in disp...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_dispose),
+	  (multi_queue_underrun_cb), (gst_decode_group_check_if_drained),
+	  (sort_end_pads), (gst_decode_group_expose),
+	  (gst_decode_group_hide):
+	  Don't free groups from the streaming threads. Just put them aside and
+	  free them in dispose.
+
+2007-02-20 11:20:52 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin2.c: Handle dynamic pads within groups.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (connect_element),
+	  (pad_added_group_cb), (gst_decode_group_check_if_blocked),
+	  (sort_end_pads), (gst_decode_group_expose):
+	  Handle dynamic pads within groups.
+	  Sort pads before exposing them in order to make playbin happy.
+	  There still is a race with the multiqueue filling up. This should be
+	  solved separately.
+	  Fixes #398721
+
+2007-02-18 21:02:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/utils/: Some more docs (and descriptions for two subtitle formats).
+	  Original commit message from CVS:
+	  * gst-libs/gst/utils/base-utils.c:
+	  * gst-libs/gst/utils/descriptions.c:
+	  * gst-libs/gst/utils/install-plugins.c:
+	  * gst-libs/gst/utils/missing-plugins.c:
+	  Some more docs (and descriptions for two subtitle formats).
+
+2007-02-16 10:19:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/audio.c: Fix documentation.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.c:
+	  Fix documentation.
+
+2007-02-16 10:15:46 +0000  Yves Lefebvre <ivanohe@abacom.com>
+
+	  gst/videorate/gstvideorate.c: Don't leak caps. Fixes #408278.
+	  Original commit message from CVS:
+	  Patch by: Yves Lefebvre  <ivanohe abacom com>
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_setcaps):
+	  Don't leak caps. Fixes #408278.
+
+2007-02-15 15:17:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  More docs coverage and some ChangeLog surgery (add missing names)
+	  Original commit message from CVS:
+	  * ext/cdparanoia/gstcdparanoiasrc.h:
+	  * ext/ogg/gstoggdemux.h:
+	  * gst-libs/gst/audio/audio.c: (gst_audio_frame_byte_size),
+	  (gst_audio_frame_length), (gst_audio_duration_from_pad_buffer),
+	  (gst_audio_is_buffer_framed), (gst_audio_structure_set_int):
+	  * gst-libs/gst/audio/audio.h:
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  * gst-libs/gst/interfaces/videoorientation.h:
+	  * gst/adder/gstadder.h:
+	  More docs coverage and some ChangeLog surgery (add missing names)
+
+2007-02-15 12:07:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/: Small constifications.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c:
+	  (gst_ximagesink_calculate_pixel_aspect_ratio):
+	  * sys/xvimage/xvimagesink.c:
+	  (gst_xvimagesink_calculate_pixel_aspect_ratio):
+	  Small constifications.
+
+2007-02-15 12:06:25 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Answer latency query.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init), (gst_base_audio_sink_query),
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_callback),
+	  (gst_base_audio_sink_async_play),
+	  (gst_base_audio_sink_change_state):
+	  Answer latency query.
+	  Use configured latency when syncing.
+	  Fix clock slaving.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init), (gst_base_audio_src_dispose),
+	  (gst_base_audio_src_query), (gst_base_audio_src_change_state):
+	  Fix possible memleak.
+	  Implement latency query.
+	  Small cleanups.
+
+2007-02-15 11:59:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.c: Ignore errors in reset, these are not fatal. They also grab the element lock which is already...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_reset):
+	  Ignore errors in reset, these are not fatal. They also grab the element
+	  lock which is already taking when this function is called. Fixes
+	  #405451.
+
+2007-02-13 13:50:56 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  add header file for easy codec install
+	  Original commit message from CVS:
+	  add header file for easy codec install
+
+2007-02-13 10:24:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  configure.ac: Remove 'tests/examples/xerror/Makefile' from output files again.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Remove 'tests/examples/xerror/Makefile' from output files again.
+
+2007-02-13 09:12:11 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Also crossref against gst-plugins-base-libs.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/plugins/Makefile.am:
+	  Also crossref against gst-plugins-base-libs.
+
+2007-02-12 20:42:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add crossreferences to glib/gobject/gstream docs.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/libs/Makefile.am:
+	  * docs/plugins/Makefile.am:
+	  Add crossreferences to glib/gobject/gstream docs.
+	  * gst-libs/gst/audio/audio.h:
+	  Source formatting.
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (plugin_init):
+	  Add own debug category.
+
+2007-02-12 11:01:04 +0000  René Stadler <mail@renestadler.de>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Add vorbis/FLAC-tag mapping for new GST_TAG_REFERENCE_LEVEL (#403597).
+	  Original commit message from CVS:
+	  Patch by: René Stadler <mail at renestadler de>
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Add vorbis/FLAC-tag mapping for new GST_TAG_REFERENCE_LEVEL
+	  (#403597).
+
+2007-02-12 10:33:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: When we have external subtitles and wait for the subtitle decodebin to get up and runn...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source):
+	  When we have external subtitles and wait for the subtitle decodebin
+	  to get up and running, we set up a (sync) bus handler for the
+	  subtitle decodebin, so we can stop waiting when it posts an error
+	  message. However, we should do that before we set the subtitle
+	  decodebin's state to playing, otherwise things are racy and we might
+	  miss error messages posted before we had a chance to set up the bus.
+	  This should finally fix totem hanging on .txt pseudo-subtitle files.
+
+2007-02-10 19:27:48 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Use gst_gdouble_to_guint64 for conversions.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:(gst_base_rtp_audio_payload_handle_frame_based_buffer):
+	  Use gst_gdouble_to_guint64 for conversions.
+	  * win32/common/config.h.in:
+	  Add a define for GST_INSTALL_PLUGINS_HELPER
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgstcdda.def:
+	  * win32/common/libgstnetbuffer.def:
+	  * win32/common/libgstrtp.def:
+	  * win32/common/libgutils.def:
+	  Add new exported functions.
+	  * win32/vs6/gst_plugins_base.dsw:
+	  * win32/vs6/libgstdecodebin.dsp:
+	  * win32/vs6/libgstnetbuffer.dsp:
+	  * win32/vs6/libgstplaybin.dsp:
+	  * win32/vs6/libgstrtp.dsp:
+	  * win32/vs6/libgstvorbis.dsp:
+	  * win32/vs6/libgstcdda.dsp:
+	  * win32/vs6/libgstgdp.dsp:
+	  * win32/vs6/libgstutils.dsp:
+	  Update and add new project files.
+
+2007-02-10 18:19:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: For SubRip (.srt) subtitles, ignore all markup tags we don't handle (like font tags, for ...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (subrip_remove_unhandled_tag),
+	  (subrip_remove_unhandled_tags), (parse_subrip):
+	  For SubRip (.srt) subtitles, ignore all markup tags we don't
+	  handle (like font tags, for example).
+	  * tests/check/elements/subparse.c:
+	  Add test for this.
+
+2007-02-09 13:28:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery
+	  Original commit message from CVS:
+	  ChangeLog surgery
+
+2007-02-09 13:16:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Don't error out if there is no fakesink in the READY to NULL state change, since when decodebin is re-...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (add_fakesink),
+	  (gst_decode_bin_change_state):
+	  * gst/playback/gstdecodebin2.c: (add_fakesink),
+	  (gst_decode_bin_change_state):
+	  Don't error out if there is no fakesink in the READY to NULL state
+	  change, since when decodebin is re-used, we're only adding the
+	  fakesink element in READY to PAUSED.
+	  * tests/check/elements/decodebin.c:
+	  (new_decoded_pad_plug_fakesink_cb), (GST_START_TEST),
+	  (decodebin_suite):
+	  Minimal unit test to make sure we can use the same decodebin
+	  instance twice (at least with audiotestsrc input).
+
+2007-02-09 09:58:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsa.c: Try to get devic-name from device string first, and from handle only as fallback (seems to yield ...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c: (gst_alsa_find_device_name):
+	  Try to get devic-name from device string first, and from handle only
+	  as fallback (seems to yield better results and is more robust
+	  against buggy probing code on the application side).
+
+2007-02-08 15:43:26 +0000  Julien Puydt <julien.puydt@laposte.net>
+
+	  ext/alsa/: Improve device-name detection a bit, especially in the case where the device is not actually open (#405020...
+	  Original commit message from CVS:
+	  Based on patch by: Julien Puydt <julien.puydt at laposte net>
+	  * ext/alsa/gstalsa.c: (gst_alsa_find_device_name_no_handle),
+	  (gst_alsa_find_device_name):
+	  * ext/alsa/gstalsa.h:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_get_property):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_get_property):
+	  Improve device-name detection a bit, especially in the case where
+	  the device is not actually open (#405020, #405024). Move common code
+	  into gstalsa.c instead of duplicating it.
+
+2007-02-07 13:05:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Fix up docs chunk so that gtk-doc doesn't complain, and fix typo.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  Fix up docs chunk so that gtk-doc doesn't complain, and fix typo.
+
+2007-02-06 17:47:32 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.*: Implement PropertyProbe Interface for XVAdaptors so that one can choose the adaptor to use...
+	  Original commit message from CVS:
+	  2007-02-06  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
+	  (gst_xvimagesink_get_xv_support),
+	  (gst_xvimagesink_xcontext_clear),
+	  (gst_xvimagesink_interface_supported),
+	  (gst_xvimagesink_probe_get_properties),
+	  (gst_xvimagesink_probe_probe_property),
+	  (gst_xvimagesink_probe_needs_probe),
+	  (gst_xvimagesink_probe_get_values),
+	  (gst_xvimagesink_property_probe_interface_init),
+	  (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+	  (gst_xvimagesink_init), (gst_xvimagesink_class_init),
+	  (gst_xvimagesink_get_type):
+	  * sys/xvimage/xvimagesink.h: Implement PropertyProbe Interface
+	  for XVAdaptors so that one can choose the adaptor to use with
+	  gstreamer-properties.
+
+2007-02-06 14:00:31 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Also mention that a conversion from double to float is suboptimal still.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  Also mention that a conversion from double to float is suboptimal still.
+
+2007-02-06 09:42:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstaudiofilter.c: Clear our formats structure and free the caps contained in it when shutting down.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  (gst_audio_filter_class_init), (gst_audio_filter_change_state):
+	  Clear our formats structure and free the caps contained in it when
+	  shutting down.
+
+2007-02-05 18:39:51 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  Original commit message from CVS:
+	  2007-02-05  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_callback): Update basesink->offset so that we
+	  pull monotonically increasing offsets instead of, um, seeking back
+	  to 0 each time. Fixes alsasrc ! alsasink!
+
+2007-02-05 11:44:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videoscale/gstvideoscale.c: A width and height of 1 makes us crash, so increase minimum size to 2x2 pixels until ...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c:
+	  A width and height of 1 makes us crash, so increase minimum size to
+	  2x2 pixels until someone feels like fixing this (#404512).
+
+2007-02-04 16:23:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/oggmux.c: Add small test to make sure request pads are cleaned up properly even if oggmux never...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c: (GST_START_TEST), (oggmux_suite):
+	  Add small test to make sure request pads are cleaned up properly
+	  even if oggmux never changes state out of NULL.
+
+2007-02-04 14:11:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/utils.c: Fix unit test. Turns out things work much better when you
+	  Original commit message from CVS:
+	  * tests/check/libs/utils.c: (GST_START_TEST):
+	  Fix unit test. Turns out things work much better when you
+	  NULL-terminate string arrays. Should make p5 build bot happy again.
+
+2007-02-03 23:28:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/: Oops, forgot to commit fixed-up example.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  (gst_audio_filter_template_base_init),
+	  (gst_audio_filter_template_class_init),
+	  (gst_audio_filter_template_init),
+	  (gst_audio_filter_template_set_property),
+	  (gst_audio_filter_template_get_property),
+	  (gst_audio_filter_template_setup),
+	  (gst_audio_filter_template_filter),
+	  (gst_audio_filter_template_filter_inplace), (plugin_init):
+	  Oops, forgot to commit fixed-up example.
+
+2007-02-03 20:19:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Port GstAudioFilter to 0.10. This change technically breaks but seems justifiable on the grounds that the base class ...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstaudiofilter.c: (gst_audio_filter_get_type),
+	  (gst_audio_filter_class_init), (gst_audio_filter_init),
+	  (gst_audio_filter_set_caps),
+	  (gst_audio_filter_class_add_pad_templates):
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  Port GstAudioFilter to 0.10. This change technically breaks
+	  API and ABI (and thus also every library developer's heart),
+	  but seems justifiable on the grounds that the base class was
+	  completely unusable before (ie. would crash immediately when
+	  actually used). Fixes #403963 (and eventually also #403572).
+	  Also document all of this a bit.
+
+2007-02-03 14:26:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Lowering log level to see why things fail on the p5 build bot; fix some typos in unit test messages.
+	  Original commit message from CVS:
+	  * gst-libs/gst/utils/install-plugins.c:
+	  (gst_install_plugins_spawn_child):
+	  * tests/check/libs/utils.c:
+	  (test_base_utils_install_plugins_do_callout):
+	  Lowering log level to see why things fail on the p5 build bot;
+	  fix some typos in unit test messages.
+
+2007-02-03 13:59:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/utils.c: Don't hard-code temp directory for test helper; use GLib functions to write out file and do...
+	  Original commit message from CVS:
+	  * tests/check/libs/utils.c:
+	  (test_base_utils_install_plugins_do_callout):
+	  Don't hard-code temp directory for test helper; use GLib functions
+	  to write out file and do error checking etc.
+
+2007-02-02 20:42:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/utils/: API: add API for applications to initiate installation of missing plugins, ie. gst_install_plugi...
+	  Original commit message from CVS:
+	  * gst-libs/gst/utils/Makefile.am:
+	  * gst-libs/gst/utils/base-utils.h:
+	  * gst-libs/gst/utils/install-plugins.c:
+	  (gst_install_plugins_context_set_xid),
+	  (gst_install_plugins_context_new),
+	  (gst_install_plugins_context_free),
+	  (gst_install_plugins_get_helper),
+	  (gst_install_plugins_spawn_child),
+	  (gst_install_plugins_return_from_status),
+	  (gst_install_plugins_installer_exited),
+	  (gst_install_plugins_async), (gst_install_plugins_sync),
+	  (gst_install_plugins_return_get_name),
+	  (gst_install_plugins_installation_in_progress):
+	  * gst-libs/gst/utils/install-plugins.h:
+	  API: add API for applications to initiate installation of missing
+	  plugins, ie. gst_install_plugins_async() primarily.
+	  Based on libgimme-codec by Ryan Lortie.
+	  * configure.ac:
+	  Add --with-install-plugins-helper configure option so distros can specify
+	  the path of the helper script or program to call when plugin installation
+	  is requested (distros: please do any argument munging in this helper
+	  script instead of patching GStreamer to pass arguments differently
+	  to another program directly).
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Build and document new API.
+	  * tests/check/libs/utils.c: (result_cb),
+	  (test_base_utils_install_plugins_do_callout), (GST_START_TEST),
+	  (libgstbaseutils_suite):
+	  Some simple checks for the new API.
+
+2007-02-02 14:44:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/audioconvert.c: Add small test for 32bit float <=> 64bit float conversion (works only one way so...
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (test_float_conversion):
+	  Add small test for 32bit float <=> 64bit float conversion (works
+	  only one way so far, 32=>64 produces structured noise).
+
+2007-02-02 11:21:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/gstaudioconvert.c: We don't support floats with a width of 40, 48 or 56 bits.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (set_structure_widths_32_and_64), (make_lossless_changes):
+	  We don't support floats with a width of 40, 48 or 56 bits.
+
+2007-02-02 09:48:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/: Support for 64-bit float audio in audioconvert (#339837)
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float), (double),
+	  (audio_convert_get_func_index):
+	  * gst/audioconvert/gstaudioconvert.c: (set_structure_widths),
+	  (make_lossless_changes):
+	  Support for 64-bit float audio in audioconvert (#339837)
+
+2007-02-01 18:50:08 +0000  Holger Wansing <linux@wansing-online.de>
+
+	  po/: Add German translation (#352069).
+	  Original commit message from CVS:
+	  Patch by: Holger Wansing  <linux wansing-online de>
+	  * po/LINGUAS:
+	  * po/de.po:
+	  Add German translation (#352069).
+
+2007-02-01 17:52:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+	  ext/ogg/gstoggmux.c: Use newly added GstCollectPads API to free the allocated resources in the GstOggPad structures (...
+	  Original commit message from CVS:
+	  reviewed by: Wim Taymans <wim@fluendo.com>
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_ogg_pad_destroy_notify),
+	  (gst_ogg_mux_request_new_pad), (gst_ogg_mux_release_pad):
+	  Use newly added GstCollectPads API to free the allocated resources in
+	  the GstOggPad structures (#402393).
+
+2007-01-31 15:58:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybin.c: Add audioresample+audioconvert in front of the visualisation element, so that elements lik...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_vis_element):
+	  Add audioresample+audioconvert in front of the visualisation
+	  element, so that elements like libvisual 0.4 that don't support all
+	  samplerates can work.
+	  Fixes: #402505
+
+2007-01-30 19:19:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Take some locks and make a copy of the streaminfo value array we maintain while holdin...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_property),
+	  (gst_play_base_bin_get_streaminfo_value_array):
+	  Take some locks and make a copy of the streaminfo value array we
+	  maintain while holding the lock, so that the application can
+	  retrieve the stream-info as a value array in a thread-safe way.
+
+2007-01-30 11:29:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audioconvert/gstaudioconvert.c: Don't fail on 0 sized buffers. Fixes #396835.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  Don't fail on 0 sized buffers. Fixes #396835.
+
+2007-01-29 21:13:07 +0000  David Schleef <ds@schleef.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Detect BBCD as video/x-dirac, so we can play raw dirac streams.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Detect BBCD as video/x-dirac, so we can play raw dirac
+	  streams.
+
+2007-01-29 18:14:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/theora/theoraenc.c: Check return value of theora_encode_header(), or we might try to allocate a random number of ...
+	  Original commit message from CVS:
+	  * ext/theora/theoraenc.c: (theora_enc_chain):
+	  Check return value of theora_encode_header(), or we might try to
+	  allocate a random number of bytes. theora_encode_header() can fail
+	  if libtheora has been compiled with encoding support disabled.
+	  Fixes #398110.
+
+2007-01-29 10:53:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/gst/.cvsignore: Do as buildbot says.
+	  Original commit message from CVS:
+	  * tests/check/gst/.cvsignore:
+	  Do as buildbot says.
+
+2007-01-29 10:25:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: Fix strides in libvisual. Gst uses X strides.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_src_setcaps):
+	  Fix strides in libvisual. Gst uses X strides.
+	  Inspired by: <ed at catmur dot co dot uk> and
+	  <tim at centricular dot net>
+	  Fixes #401118.
+
+2007-01-27 13:32:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.*: Properly propagate streaming errors when we are scanning the file for chains so that we don't ...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_submit_buffer),
+	  (gst_ogg_demux_get_data), (gst_ogg_demux_get_next_page),
+	  (gst_ogg_demux_get_prev_page), (gst_ogg_demux_do_seek),
+	  (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_bisect_forward_serialno),
+	  (gst_ogg_demux_read_chain), (gst_ogg_demux_read_end_chain),
+	  (gst_ogg_demux_find_chains), (gst_ogg_demux_handle_page),
+	  (gst_ogg_demux_chain), (gst_ogg_demux_combine_flows),
+	  (gst_ogg_demux_loop_reverse), (gst_ogg_demux_loop):
+	  * ext/ogg/gstoggdemux.h:
+	  Properly propagate streaming errors when we are scanning the file for
+	  chains so that we don't crash when shut down. Might fix some crashers
+	  when quickly switching oggs in RB such as #332503 and #378436.
+
+2007-01-26 12:44:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Map a gnome-vfs HOST_NOT_FOUND error into a GStreamer NOT_FOUND error code as well.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_start):
+	  Map a gnome-vfs HOST_NOT_FOUND error into a GStreamer NOT_FOUND
+	  error code as well.
+
+2007-01-25 16:02:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Don't try to disconnect a signal from a finalized object.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (remove_source):
+	  Don't try to disconnect a signal from a finalized object.
+
+2007-01-25 14:29:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin2.c: Cast lock macro parameters to make sure we're actually accessing the lock member at the...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_dispose):
+	  Cast lock macro parameters to make sure we're actually accessing the
+	  lock member at the right class level. Free list itself in _dispose()
+	  as well and NULL it in case dispose gets called multiple times.
+
+2007-01-25 14:02:37 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin2.c: Free GstDecodeGroups no longer used.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c:
+	  (gst_decode_bin_dispose),(gst_decode_bin_finalize):
+	  Free GstDecodeGroups no longer used.
+	  (gst_decode_group_expose):
+	  Don't unlock too many times !
+	  (deactivate_free_recursive):
+	  Free iterator once we're done with it.
+	  Fix for recursively deactivating elements (stop at ghostpads).
+
+2007-01-25 12:24:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Fix up caps on the frame buffer before we save it and potentially make it accessible to ot...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (handoff):
+	  Fix up caps on the frame buffer before we save it and potentially
+	  make it accessible to other threads via g_object_get; also use
+	  gst_buffer_replace() instead of gst_mini_object_replace().
+
+2007-01-25 12:06:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Make getting the current frame thread-safe.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
+	  Make getting the current frame thread-safe.
+
+2007-01-25 11:48:10 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin2.c: Set queues to bigger sizes to cope with HD contents.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_finalize),
+	  (gst_decode_group_new), (gst_decode_group_free):
+	  Set queues to bigger sizes to cope with HD contents.
+	  Fix some mutex freeing and add comment about MT safe methods.
+
+2007-01-24 12:51:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Don't unnecessarily ref (and then leak) upstream events if the text pad is not linked. Fi...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_src_event),
+	  (gst_text_overlay_text_event):
+	  Don't unnecessarily ref (and then leak) upstream events if the text
+	  pad is not linked. Fixes #399948.
+	  * tests/check/gst-plugins-base.supp:
+	  Add suppression for pango on edgy/x86 for textoverlay test.
+
+2007-01-24 12:10:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.h: Add some more fixed payloads.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Add some more fixed payloads.
+
+2007-01-23 18:39:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggdemux.c: Error out properly if we get an error from libogg while reading the
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain):
+	  Error out properly if we get an error from libogg while reading the
+	  BOS page(s). Fixes crash parsing 'fuzzed' ogg file (#399340).
+
+2007-01-23 17:49:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin2.c: Don't leak mutex.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_finalize):
+	  Don't leak mutex.
+	  * tests/check/elements/playbin.c:
+	  (test_sink_usage_video_only_stream),
+	  (test_suburi_error_unknowntype), (test_suburi_error_invalidfile),
+	  (test_suburi_error_wrongproto), (test_missing_urisource_handler),
+	  (test_missing_suburisource_handler),
+	  (test_missing_primary_decoder), (playbin_suite):
+	  Run all tests once with decodebin and once with decodebin2.
+	  One test does not pass yet with decodebin2.
+
+2007-01-23 14:30:28 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/ogg/gstoggmux.c: Fix the cases where oggmux doesn't properly figure out that all sinkpads have gone EOS, and ther...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (all_pads_eos), (gst_ogg_mux_collected):
+	  Fix the cases where oggmux doesn't properly figure out that all
+	  sinkpads have gone EOS, and therefore doesn't push out the remaining
+	  buffers and the final EOS event.
+	  Fixes #363379
+
+2007-01-23 13:19:19 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Don't lock on navigation event push, just on keysym to string.
+	  Original commit message from CVS:
+	  2007-01-23  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+	  Don't lock on navigation event push, just on keysym to string.
+	  Fixes #397673 again.
+
+2007-01-22 17:37:38 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin2.c: Cleanups.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_group_new),
+	  (get_current_group), (group_demuxer_event_probe),
+	  (gst_decode_group_expose), (deactivate_free_recursive),
+	  (gst_decode_group_free):
+	  Cleanups.
+	  Don't forget to emit 'no-more-pads' once a group is exposed.
+	  Cleanup elements from a DecodeGroup once we remove it.
+	  Protect call to gst_decode_group_expose() with the decodebin lock.
+
+2007-01-22 13:16:42 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Looking at Xorg code i can't figure out if that XKeysymToString function is thread sensible or not. Lock it jus...
+	  Original commit message from CVS:
+	  2007-01-22  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+	  Looking at Xorg code i can't figure out if that XKeysymToString
+	  function is thread sensible or not. Lock it just in case as
+	  recommended by Radek Doulik <rodo at ximian dot com>.
+
+2007-01-22 13:10:13 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Lock that X Call as well. Fixes #397673.
+	  Original commit message from CVS:
+	  2007-01-22  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+	  Lock that X Call as well. Fixes #397673.
+
+2007-01-22 12:03:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Don't go into an endless loop if the file starts with 00 00 01 2X, like quicktim...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg4_video_type_find):
+	  Don't go into an endless loop if the file starts with 00 00 01 2X,
+	  like quicktime redirect files might. Fixes #396042.
+	  * tests/check/Makefile.am:
+	  * tests/check/gst/.cvsignore:
+	  * tests/check/gst/typefindfunctions.c: (GST_START_TEST),
+	  (typefindfunctions_suite):
+	  Add unit test for the above.
+
+2007-01-22 10:27:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: On second thought, use "depth" field rather than "bpp" field.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  On second thought, use "depth" field rather than "bpp" field.
+
+2007-01-22 09:23:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Camtasia caps apparently need a bpp field (#398875).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Camtasia caps apparently need a bpp field (#398875).
+
+2007-01-19 19:09:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Attempt at a better error message in case we don't have the required
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_subtitle),
+	  (gen_source_element), (gst_play_base_bin_change_state):
+	  Attempt at a better error message in case we don't have the required
+	  URI handler installed; post missing-plugin message also when we're
+	  missing an URI handler for the subtitle URI; clean up properly also
+	  when an error occurs and we never made it to PAUSED state.
+	  * tests/check/elements/playbin.c: (GST_START_TEST),
+	  (playbin_suite):
+	  Check that we're also getting a missing-plugin messsage for a
+	  missing subtitle URI handler (and clean up properly).
+
+2007-01-19 18:47:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Plug a few reference leaks.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (analyse_source), (setup_source):
+	  Plug a few reference leaks.
+
+2007-01-19 12:23:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Lower probability a bit if the marker isn't right at the start, to decrease the ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+	  Lower probability a bit if the marker isn't right at the start,
+	  to decrease the chance of false positives.
+
+2007-01-19 11:31:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Small mpeg2 system stream typefinding improvement: make typefinder probe a bit i...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+	  Small mpeg2 system stream typefinding improvement: make typefinder
+	  probe a bit into the stream instead of just looking for a marker
+	  at the beginning. Fixes #397810.
+
+2007-01-18 16:23:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/gstchannelmix.c: Remove compatibility cruft for prehistoric GLib versions.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c:
+	  Remove compatibility cruft for prehistoric GLib versions.
+
+2007-01-17 16:11:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Let decodebin be the element to post missing-plugin messages for missing decoders (rather than playbin...
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstdecodebin.c: (close_pad_link):
+	  * gst/playback/gstdecodebin2.c: (analyze_new_pad):
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (gst_play_base_bin_handle_message_func), (unknown_type):
+	  Let decodebin be the element to post missing-plugin messages for
+	  missing decoders (rather than playbin); make playbin implement
+	  GstBin::handle_message so we can suppress missing-plugin messages
+	  for types we're not handling on purpose (don't want to bring up an
+	  installer in those cases).
+
+2007-01-16 19:37:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: Fix potentially unaligned access (#397207).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  (gst_tag_list_to_vorbiscomment_buffer):
+	  * gst/typefind/gsttypefindfunctions.c: (vorbis_type_find):
+	  Fix potentially unaligned access (#397207).
+
+2007-01-16 12:17:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/examples/seek/seek.c: Allow to toggle looping while it plays. Fix callback prototype. Clean up code a bit more....
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (set_scale), (update_scale),
+	  (do_seek), (stop_seek), (pause_cb), (stop_cb), (loop_toggle_cb),
+	  (rate_spinbutton_changed_cb), (msg_eos), (msg_segment_done),
+	  (main):
+	  Allow to toggle looping while it plays. Fix callback prototype. Clean
+	  up code a bit more. Add copyright header.
+
+2007-01-16 11:41:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Red and blue mask was swapped (spotted by Dan Williams).
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+	  Red and blue mask was swapped (spotted by Dan Williams).
+
+2007-01-15 13:58:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/tag/: Use new beats-per-minute tag from core.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Use new beats-per-minute tag from core.
+
+2007-01-15 11:30:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  po/POTFILES.in: Add new files with translatable strings, so they actually make it into the template file one day.
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  Add new files with translatable strings, so they actually make it
+	  into the template file one day.
+
+2007-01-12 21:19:35 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  gst-libs/gst/audio/gstbaseaudiosink.c
+	  Original commit message from CVS:
+	  2007-01-12  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_fixate): Implement, stolen from baseaudiosrc.
+	  (gst_base_audio_sink_activate_pull): Remove the handwavey nego
+	  stuff, as the base class handles this now. Actually tell the ring
+	  buffer to start.
+	  (gst_base_audio_sink_callback): Cast the ring buffer correctly.
+	  How did this work before? Maybe I'm not as awesome a programmer as
+	  I think.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c
+	  (gst_base_audio_src_fixate): Rework as a basesrc vmethod instead
+	  of a pad function.
+
+2007-01-12 18:08:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/utils/missing-plugins.c: Remove more fields so that the application can better blacklist formats that ha...
+	  Original commit message from CVS:
+	  * gst-libs/gst/utils/missing-plugins.c: (copy_and_clean_caps):
+	  Remove more fields so that the application can better blacklist
+	  formats that have been tried before.
+
+2007-01-12 17:43:40 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  add latest files
+	  Original commit message from CVS:
+	  add latest files
+
+2007-01-12 12:47:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/mixerutils.h: Add G_BEGIN_DECLS and G_END_DECLS guards so these helpers can be used when compiling...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/mixerutils.h:
+	  Add G_BEGIN_DECLS and G_END_DECLS guards so these helpers can be
+	  used when compiling with c++ compilers as well.
+
+2007-01-12 09:45:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix comment.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Fix comment.
+
+2007-01-11 13:12:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Post missing-plugin messages also when we error out because converters, textoverlay or aut...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (post_missing_element_message),
+	  (gen_video_element), (gen_text_element), (gen_audio_element),
+	  (gen_vis_element):
+	  Post missing-plugin messages also when we error out because
+	  converters, textoverlay or auto*sinks are missing (#161922).
+
+2007-01-10 16:08:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Fix the case where we try to ref a NULL element when we delay a link because of unfixed caps.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (dynamic_add), (close_pad_link),
+	  (is_demuxer_element), (new_caps):
+	  * gst/playback/gstplaybasebin.c: (source_new_pad):
+	  Fix the case where we try to ref a NULL element when we delay a link
+	  because of unfixed caps.
+	  Set the state of autoplugged decodebins to PAUSED.
+	  RTSP now works in playbin, we can remove it from the blacklist.
+
+2007-01-09 14:33:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Post missing-plugin messages on the bus for missing sources and missing decoders/demuxers/depayloaders...
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstplaybasebin.c: (string_arr_has_str),
+	  (unknown_type), (setup_subtitle), (gen_source_element):
+	  * gst/playback/gstplaybin.c: (plugin_init):
+	  Post missing-plugin messages on the bus for missing sources and
+	  missing decoders/demuxers/depayloaders; fix error code used when
+	  we're missing an URI handler source; for media types that we are not
+	  handling on purpose at the moment, don't print "don't know how to
+	  handle xyz" messages to the terminal or post missing-plugin
+	  messages on the bus.
+	  * tests/check/elements/playbin.c: (create_playbin),
+	  (GST_START_TEST), (gst_codec_src_uri_get_type),
+	  (gst_codec_src_uri_get_protocols), (gst_codec_src_uri_get_uri),
+	  (gst_codec_src_uri_set_uri), (gst_codec_src_uri_handler_init),
+	  (gst_codec_src_init_type), (gst_codec_src_base_init),
+	  (gst_codec_src_create), (gst_codec_src_class_init),
+	  (gst_codec_src_init), (plugin_init), (playbin_suite):
+	  Add some tests for the missing-plugin stuff.
+
+2007-01-09 14:20:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add new libgstbaseutils library with functions
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/utils/Makefile.am:
+	  * gst-libs/gst/utils/base-utils.c: (gst_base_utils_init):
+	  * gst-libs/gst/utils/base-utils.h:
+	  * gst-libs/gst/utils/descriptions.c: (format_info_get_desc),
+	  (find_format_info), (caps_are_rtp_caps),
+	  (gst_base_utils_get_source_description),
+	  (gst_base_utils_get_sink_description),
+	  (gst_base_utils_get_decoder_description),
+	  (gst_base_utils_get_encoder_description),
+	  (gst_base_utils_get_element_description),
+	  (gst_base_utils_add_codec_description_to_tag_list),
+	  (gst_base_utils_get_codec_description), (gst_base_utils_list_all):
+	  * gst-libs/gst/utils/descriptions.h:
+	  * gst-libs/gst/utils/missing-plugins.c:
+	  (missing_structure_get_type), (copy_and_clean_caps),
+	  (gst_missing_uri_source_message_new),
+	  (gst_missing_uri_sink_message_new),
+	  (gst_missing_element_message_new),
+	  (gst_missing_decoder_message_new),
+	  (gst_missing_encoder_message_new),
+	  (missing_structure_get_string_detail),
+	  (missing_structure_get_caps_detail),
+	  (gst_missing_plugin_message_get_installer_detail),
+	  (gst_missing_plugin_message_get_description),
+	  (gst_is_missing_plugin_message):
+	  * gst-libs/gst/utils/missing-plugins.h:
+	  API: add new libgstbaseutils library with functions
+	  - to create and parse missing-plugins messages
+	  - that provide (translated) descriptions for caps/decoders/sources/etc.
+	  Closes #392393.
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  * pkgconfig/gstreamer-plugins-base.pc.in:
+	  Add new lib.
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Generate docs for new lib and API.
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/.cvsignore:
+	  * tests/check/libs/utils.c: (missing_msg_check_getters),
+	  (GST_START_TEST), (libgstbaseutils_suite):
+	  Add some basic unit tests.
+
+2007-01-09 13:35:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/Makefile.am: Dist gstoggdemux.h to fix 'make distcheck'.
+	  Original commit message from CVS:
+	  * ext/ogg/Makefile.am:
+	  Dist gstoggdemux.h to fix 'make distcheck'.
+	  * sys/v4l/Makefile.am:
+	  Fix 'make distcheck' even more.
+
+2007-01-09 12:30:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Added docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_page_copy), (gst_ogg_page_free),
+	  (gst_ogg_pad_query_types), (gst_ogg_pad_submit_page),
+	  (gst_ogg_chain_reset), (gst_ogg_chain_new_stream),
+	  (gst_ogg_demux_perform_seek):
+	  * ext/ogg/gstoggdemux.h:
+	  Added docs.
+	  Add some more comments.
+	  Small cleanups.
+
+2007-01-09 11:15:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Small documentation updates/fixes
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_commit_full):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Small documentation updates/fixes
+
+2007-01-09 10:37:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Require core CVS HEAD for Andy's basesrc/sink API additions.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require core CVS HEAD for Andy's basesrc/sink API additions.
+
+2007-01-08 14:01:23 +0000  Günter Thelen <daedalus.inc@gmx.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for flac-in-ogg in conformance with the ogg-mapping on flac.sf.ne...
+	  Original commit message from CVS:
+	  Patch by: Günter Thelen  <daedalus dot inc at gmx net>
+	  * gst/typefind/gsttypefindfunctions.c: (flac_type_find),
+	  (plugin_init):
+	  Add typefinder for flac-in-ogg in conformance with the ogg-mapping
+	  on flac.sf.net (there appear to be other versions of the first
+	  ogg page in the wild) (#391365).
+
+2007-01-08 13:32:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Check if localtime_r() is available.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Check if localtime_r() is available.
+	  * ext/pango/gstclockoverlay.c: (gst_clock_overlay_render_time):
+	  If localtime_r() is not available, fall back to localtime(). Should
+	  fix build on MingW (#393310).
+
+2007-01-08 12:30:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.*: Remove spurious 1000 subtrahend when calculating the timestamp from the frame number and ...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+	  * gst/subparse/gstsubparse.h:
+	  Remove spurious 1000 subtrahend when calculating the timestamp from
+	  the frame number and the frame rate . Also, use the frames/second
+	  value specified in the first line of the file, if one is specified
+	  there. Should fix #357503.
+	  * tests/check/elements/subparse.c: (do_test),
+	  (test_tmplayer_do_test), (test_microdvd_do_test), (GST_START_TEST),
+	  (subparse_suite):
+	  Add some basic unit tests for the microdvd subtitle format.
+
+2007-01-07 21:53:38 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  sys/xvimage/xvimagesink.c: Fixes : #390076.
+	  Original commit message from CVS:
+	  2007-01-07  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimage_buffer_finalize), (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_xvimage_put),
+	  (gst_lookup_xv_port_from_adaptor),
+	  (gst_xvimagesink_get_xv_support), (gst_xvimagesink_setcaps),
+	  (gst_xvimagesink_set_xwindow_id),
+	  (gst_xvimagesink_set_event_handling),
+	  (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+	  (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+	  Patch by : Young-Ho Cha <ganadist at chollian dot net>
+	  Fixes : #390076.
+	  Add an adaptor property to select a specific XV adaptor.
+	  * sys/xvimage/xvimagesink.h:
+
+2007-01-07 18:50:13 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Use flow_lock much more to protect every access to xwindow.
+	  Original commit message from CVS:
+	  2007-01-07  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
+	  (gst_ximagesink_handle_xerror), (gst_ximagesink_ximage_new),
+	  (gst_ximagesink_ximage_destroy), (gst_ximagesink_ximage_put),
+	  (gst_ximagesink_handle_xevents), (gst_ximagesink_setcaps),
+	  (gst_ximagesink_change_state), (gst_ximagesink_set_xwindow_id),
+	  (gst_ximagesink_expose), (gst_ximagesink_set_event_handling):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimage_buffer_finalize), (gst_xvimagesink_handle_xerror),
+	  (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_put),
+	  (gst_xvimagesink_handle_xevents), (gst_xvimagesink_setcaps),
+	  (gst_xvimagesink_change_state),
+	  (gst_xvimagesink_set_xwindow_id),
+	  (gst_xvimagesink_expose), (gst_xvimagesink_set_event_handling):
+	  Use flow_lock much more to protect every access to xwindow.
+	  Try to catch erros while creating images in case some drivers
+	  are
+	  just generating an XError when the requested image is too big.
+	  Should fix : #354698, #384008, #384060.
+	  * tests/icles/stress-xoverlay.c: (cycle_window),
+	  (create_window):
+	  Implement some stress testing of setting window xid.
+
+2007-01-07 10:33:55 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/common/libgsaudio.def: Add new exported function.
+	  Original commit message from CVS:
+	  * win32/common/libgsaudio.def:
+	  Add new exported function.
+	  * win32/common/libgstogg.dsp:
+	  Add gstoggaviparse.c to the build.
+	  * win32/common/libgstvideoscale.dsp:
+	  Add vs_4tap.c to the build.
+	  * win32/common/libgstvorbis.dsp:
+	  Add vorbistag.c to the build.
+
+2007-01-06 17:28:40 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	  gst-libs/gst/audio/gstbaseaudiosink.c (gst_base_audio_sink_class_init)
+	  Original commit message from CVS:
+	  2007-01-06  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstbaseaudiosink.c
+	  (gst_base_audio_sink_class_init)
+	  (gst_base_audio_sink_init):
+	  (gst_base_audio_sink_activate_pull): Add an activate_pull function
+	  to baseaudiosink, and tell basesink that we can work in pull mode.
+	  This way the ring buffer thread drives the pipeline directly, if
+	  pull mode is possible. There is some lingering nastiness regarding
+	  capsnego, however.
+	  (gst_base_audio_sink_callback): Implement the callback to pull
+	  data. This interface is a bit light, though -- it should get a
+	  GstFlowReturn return value at least.
+
+2007-01-05 19:43:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Printf format and missing argument fixes.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_stream_out):
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  * gst/playback/gstdecodebin2.c:
+	  (gst_decode_group_check_if_blocked):
+	  Printf format and missing argument fixes.
+
+2007-01-05 18:57:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/ogg/gstogmparse.c: Activate pads before adding them to the element.
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_stream_header),
+	  (gst_ogm_parse_change_state):
+	  Activate pads before adding them to the element.
+
+2007-01-05 16:02:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/examples/seek/: Call g_thread_init() first thing in main() (see #391278).
+	  Original commit message from CVS:
+	  * tests/examples/seek/scrubby.c: (main):
+	  * tests/examples/seek/seek.c: (main):
+	  Call g_thread_init() first thing in main() (see #391278).
+
+2007-01-05 12:19:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add test for GstNetBuffer + gst_buffer_copy(). Disabled for the time being, since it's broken, see #393...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/.cvsignore:
+	  * tests/check/libs/netbuffer.c: (GST_START_TEST),
+	  (netbuffer_suite):
+	  Add test for GstNetBuffer + gst_buffer_copy(). Disabled
+	  for the time being, since it's broken, see #393099.
+
+2007-01-05 12:13:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Update to use GST_PLUGINS_BASE_CFLAGS as well.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Update to use GST_PLUGINS_BASE_CFLAGS as well.
+
+2007-01-04 12:49:48 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: split out GST_CFLAGS into GST_PLUGINS_BASE_CFLAGS and GST_CFLAGS so that GST_BASE_CFLAGS can go inbetwe...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  split out GST_CFLAGS into GST_PLUGINS_BASE_CFLAGS and GST_CFLAGS
+	  so that GST_BASE_CFLAGS can go inbetween them, making sure
+	  we use uninstalled gst-libs headers
+	  * docs/libs/Makefile.am:
+	  * ext/alsa/Makefile.am:
+	  * ext/cdparanoia/Makefile.am:
+	  * ext/gnomevfs/Makefile.am:
+	  * ext/libvisual/Makefile.am:
+	  * ext/ogg/Makefile.am:
+	  * ext/theora/Makefile.am:
+	  * ext/vorbis/Makefile.am:
+	  * gst-libs/gst/audio/Makefile.am:
+	  * gst-libs/gst/cdda/Makefile.am:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  * gst-libs/gst/riff/Makefile.am:
+	  * gst-libs/gst/rtp/Makefile.am:
+	  * gst-libs/gst/tag/Makefile.am:
+	  * gst/adder/Makefile.am:
+	  * gst/audioconvert/Makefile.am:
+	  * gst/audiorate/Makefile.am:
+	  * gst/audioresample/Makefile.am:
+	  * gst/playback/Makefile.am:
+	  * gst/tcp/Makefile.am:
+	  * gst/videoscale/Makefile.am:
+	  * gst/volume/Makefile.am:
+	  * sys/ximage/Makefile.am:
+	  * sys/xvimage/Makefile.am:
+	  * tests/icles/Makefile.am:
+	  adapt
+
+2007-01-04 11:30:53 +0000  Julien Moutte <julien@moutte.net>
+
+	  Add a method to the XOverlay interface to allow disabling of event handling in x[v]imagesink elements. This will let ...
+	  Original commit message from CVS:
+	  2007-01-04  Julien MOUTTE  <julien@moutte.net>
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  (gst_x_overlay_handle_events):
+	  * gst-libs/gst/interfaces/xoverlay.h:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+	  (gst_ximagesink_set_xwindow_id),
+	  (gst_ximagesink_set_event_handling),
+	  (gst_ximagesink_xoverlay_init), (gst_ximagesink_set_property),
+	  (gst_ximagesink_get_property), (gst_ximagesink_init),
+	  (gst_ximagesink_class_init):
+	  * sys/ximage/ximagesink.h:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new),
+	  (gst_xvimagesink_set_xwindow_id),
+	  (gst_xvimagesink_set_event_handling),
+	  (gst_xvimagesink_xoverlay_init), (gst_xvimagesink_set_property),
+	  (gst_xvimagesink_get_property), (gst_xvimagesink_init),
+	  (gst_xvimagesink_class_init):
+	  * sys/xvimage/xvimagesink.h:
+	  * tests/icles/stress-xoverlay.c: (toggle_events),
+	  (create_window):
+	  Add a method to the XOverlay interface to allow disabling of
+	  event handling in x[v]imagesink elements. This will let X events
+	  propagate to parent windows which can be usefull in some cases.
+	  Be carefull that the application is then responsible of pushing
+	  navigation events and expose events to the video sink.
+	  Fixes: #387138.
+
+2007-01-03 15:45:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add vorbistag <=> GStreamer tag mapping for GST_TAG_LOCATION (fixes #392070).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Add vorbistag <=> GStreamer tag mapping for GST_TAG_LOCATION
+	  (fixes #392070).
+
+2007-01-01 18:59:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Dist design docs.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/Makefile.am:
+	  * docs/design/Makefile.am:
+	  Dist design docs.
+
+2006-12-27 17:15:35 +0000  Julien Moutte <julien@moutte.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Fix a documentation typo. Fixes: #390063.
+	  Original commit message from CVS:
+	  2006-12-27  Julien MOUTTE  <julien@moutte.net>
+	  * docs/libs/gst-plugins-base-libs-sections.txt: Fix a
+	  documentation
+	  typo. Fixes: #390063.
+
+2006-12-27 12:08:13 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Plug a caps leak.
+	  Original commit message from CVS:
+	  2006-12-27  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_setcaps):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps): Plug a
+	  caps leak.
+	  * win32/common/config.h: Updated.
+
+2006-12-22 12:10:18 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/: Fix the dp tests, but activating the pads for the streamheader tests too and cleaning up condi...
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (cleanup_gdpdepay),
+	  (setup_gdpdepay_streamheader):
+	  * tests/check/elements/gdppay.c: (cleanup_gdppay),
+	  (setup_gdppay_streamheader):
+	  Fix the dp tests, but activating the pads for the streamheader tests
+	  too and cleaning up conditionaly
+
+2006-12-22 11:09:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/ffmpegcolorspace/: Add 2 new caps arrangements, for 24-bit RGB and BGR in 32-bits, but at the other end of the wo...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/avcodec.h:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+	  (gst_ffmpegcsp_avpicture_fill):
+	  * gst/ffmpegcolorspace/imgconvert.c: (img_convert),
+	  (img_get_alpha_info):
+	  Add 2 new caps arrangements, for 24-bit RGB and BGR in 32-bits, but at the
+	  other end of the word. Fixes: #387073.
+	  Add some inconsequential branch hints in a couple of places.
+
+2006-12-21 12:30:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: The "signed" field in raw audio caps is of boolean type, trying to extract ...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_caps_to_smpfmt):
+	  The "signed" field in raw audio caps is of boolean type, trying to
+	  extract the value with _get_int() will fail (fix to keep in sync with
+	  the copy in gst-ffmpeg)
+
+2006-12-21 08:12:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/: consistent pad (de)activation
+	  Original commit message from CVS:
+	  * tests/check/elements/audioresample.c: (cleanup_audioresample):
+	  * tests/check/elements/audiotestsrc.c: (cleanup_audiotestsrc):
+	  * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+	  (cleanup_gdpdepay):
+	  * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay):
+	  * tests/check/elements/subparse.c: (teardown_subparse):
+	  * tests/check/elements/textoverlay.c: (cleanup_textoverlay):
+	  * tests/check/elements/videorate.c: (cleanup_videorate):
+	  * tests/check/elements/videotestsrc.c: (cleanup_videotestsrc):
+	  * tests/check/elements/volume.c: (cleanup_volume):
+	  * tests/check/elements/vorbisdec.c: (setup_vorbisdec),
+	  (cleanup_vorbisdec):
+	  * tests/check/elements/vorbistag.c: (setup_vorbistag),
+	  (cleanup_vorbistag):
+	  consistent pad (de)activation
+
+2006-12-20 10:29:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Forgot to register the extensions.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Forgot to register the extensions.
+
+2006-12-20 09:25:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for VIVO files (my christmas present to the 90s).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (vivo_type_find),
+	  (plugin_init):
+	  Add typefinder for VIVO files (my christmas present to the 90s).
+
+2006-12-16 13:59:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: Special-case the text/plain media type: we only want to recognise it as a 'raw' decoded ...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (type_found):
+	  Special-case the text/plain media type: we only want to recognise it
+	  as a 'raw' decoded media type if it comes from a demuxer or subtitle
+	  parser, but not if the entire stream is of text/plain type. If the
+	  entire stream is text/plain, we should just error out.
+	  This fixes playback of audio files with lyrics in totem. Totem can't
+	  distinguish between text files and subtitle files and passes any
+	  .txt file with the same basename as the main file to playbin as
+	  suburi, and playbin will then throw a 'subtitle found, but no video
+	  stream' error, which isn't entirely helpful. See #380342.
+	  Also, with this change we'll show a slightly more correct error
+	  message in case totem passes a playlist file to us (although a
+	  custom error message wording instead of the default text would
+	  probably not be a bad idea either).
+	  Same problem also needs to be fixed for playbin+decodebin2.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/decodebin.c: (src_handoff_cb),
+	  (decodebin_new_decoded_pad_cb), (GST_START_TEST),
+	  (decodebin_suite):
+	  Add simple unit test for decodebin for the above.
+
+2006-12-16 12:22:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Refuse to change state to READY when we failed to create any of the required elements in our instance ...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_change_state):
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_change_state):
+	  Refuse to change state to READY when we failed to create any of the
+	  required elements in our instance init function.
+
+2006-12-15 10:52:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Small docs fixes/updates.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Small docs fixes/updates.
+	  * gst-libs/gst/video/gstvideosink.h:
+	  Remove nonfunctional GST_VIDEO_SINK_CLOCK macro which is a leftover
+	  from the 0.9 days (GST_BASE_SINK_CLOCK, which it points to, was
+	  removed from the base sink API between 0.9.6 and 0.9.7).
+	  API: add GST_VIDEO_SINK_CAST and use it for the height/width
+	  accessor macros, so we don't do a runtime GObject type check every
+	  time we use them.
+
+2006-12-15 00:20:37 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  add doap file
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  * gst-plugins-base.doap:
+	  * gst-plugins-base.spec.in:
+	  add doap file
+
+2006-12-09 15:12:38 +0000  Jens Granseuer <jensgr@gmx.net>
+
+	  Declare variables at the beginning of a block. Fixes #383195.
+	  Original commit message from CVS:
+	  Patch by: Jens Granseuer <jensgr at gmx net>
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_create):
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_handle_frame_based_buffer),
+	  (gst_base_rtp_audio_payload_handle_sample_based_buffer):
+	  * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_fixate):
+	  Declare variables at the beginning of a block. Fixes #383195.
+
+2006-12-07 02:38:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Bump version nano - back to CVS.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump version nano - back to CVS.
+
+=== release 0.10.11 ===
+
+2006-12-07 02:30:38 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: releasing 0.10.11, "Dumb things"
+	  Original commit message from CVS:
+	  === release 0.10.11 ===
+	  2006-12-06  Jan Schmidt <thaytan@mad.scientist.com>
+	  * configure.ac:
+	  releasing 0.10.11, "Dumb things"
+
+2006-12-05 12:44:00 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: Handle the case where an element has multiple pads with unfixed caps as well as still po...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (find_dynamic), (dynamic_add),
+	  (close_pad_link), (elem_is_dynamic), (unlinked), (close_link):
+	  Handle the case where an element has multiple pads with
+	  unfixed caps as well as still possibly producing more dynamic
+	  pads by storing each case as a distinct entry in the dynamic list.
+	  Fixes #38223 again.
+
+2006-12-04 13:02:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Fix #382223, add more dynamic caps handling.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (close_pad_link):
+	  Fix #382223, add more dynamic caps handling.
+
+2006-12-01 11:35:57 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	* po/.gitignore:
+	  Ignore all pot files
+	  Original commit message from CVS:
+	  Ignore all pot files
+
+2006-12-01 10:36:50 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: Delete bad debug code.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  Delete bad debug code.
+	  Fixes #381219
+
+2006-12-01 10:27:54 +0000  Sergey Scobich <sergey.scobich@gmail.com>
+
+	  Fix compilation on win32 under VS8
+	  Original commit message from CVS:
+	  * gst/videoscale/vs_4tap.c:
+	  * win32/MANIFEST:
+	  * win32/common/config.h:
+	  * win32/vs8/libgstvideoscale.vcproj:
+	  Fix compilation on win32 under VS8
+	  Patch by: Sergey Scobich <sergey dot scobich at gmail dot com>
+	  Partially fixes #381175
+
+2006-11-30 23:46:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-11-30 12:50:42 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/pipelines/theoraenc.c: It would be very bad if, after a discont buffer, we thought every single following...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/theoraenc.c: (check_buffer_granulepos),
+	  (GST_START_TEST):
+	  It would be very bad if, after a discont buffer, we thought every
+	  single following buffer was also discont. So, add to the test to
+	  ensure that this isn't the case.
+	  * ext/theora/theoraenc.c: (theora_enc_is_discontinuous):
+	  ... it was the case. So fix it.
+
+2006-11-28 16:43:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Improve debug.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (check_queue_event):
+	  Improve debug.
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform_caps):
+	  Fix width and height range from 16 - 4096 to 1 - MAXINT, just like the
+	  padtemplate caps. Refixes #357577.
+
+2006-11-28 16:21:27 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Add event probe to see when EOS is in a queue and we can disable the underrun signals....
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (check_queue_event),
+	  (queue_threshold_reached), (queue_out_of_data),
+	  (gen_preroll_element):
+	  Add event probe to see when EOS is in a queue and we can disable the
+	  underrun signals. Fixes #357577.
+
+2006-11-28 14:40:39 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/: New decodebin2 element.
+	  Original commit message from CVS:
+	  * gst/playback/Makefile.am:
+	  * gst/playback/gstdecodebin2.c: (gst_decode_bin_get_type),
+	  (_gst_boolean_accumulator), (gst_decode_bin_class_init),
+	  (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
+	  (gst_decode_bin_init), (gst_decode_bin_dispose),
+	  (gst_decode_bin_finalize), (gst_decode_bin_set_property),
+	  (gst_decode_bin_get_property), (gst_decode_bin_set_caps),
+	  (gst_decode_bin_get_caps), (gst_decode_bin_autoplug_continue),
+	  (gst_decode_bin_autoplug_sort), (analyze_new_pad), (connect_pad),
+	  (connect_element), (expose_pad), (type_found),
+	  (pad_added_group_cb), (pad_removed_group_cb),
+	  (no_more_pads_group_cb), (pad_added_cb), (pad_removed_cb),
+	  (no_more_pads_cb), (find_compatibles), (is_demuxer_element),
+	  (are_raw_caps), (multi_queue_overrun_cb),
+	  (multi_queue_underrun_cb), (gst_decode_group_new),
+	  (get_current_group), (group_demuxer_event_probe),
+	  (gst_decode_group_control_demuxer_pad),
+	  (gst_decode_group_control_source_pad),
+	  (gst_decode_group_check_if_blocked),
+	  (gst_decode_group_check_if_drained), (gst_decode_group_expose),
+	  (gst_decode_group_hide), (gst_decode_group_free),
+	  (gst_decode_group_set_complete), (source_pad_blocked_cb),
+	  (source_pad_event_probe), (gst_decode_pad_new), (add_fakesink),
+	  (remove_fakesink), (find_sink_pad), (gst_decode_bin_change_state),
+	  (plugin_init):
+	  New decodebin2 element.
+	  Closes #370092
+	  * gst/playback/gstplay-marshal.list:
+	  Added marshallers for new signals in decodebin2
+	  * gst/playback/gstplaybasebin.c: (setup_subtitle), (make_decoder):
+	  Use decodebin2 if *and only if* the USE_DECODEBIN2 environment variable
+	  is set.
+
+2006-11-28 10:45:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Disable rtsp:// uris for the release, it's not good enough yet.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source),
+	  (gst_play_base_bin_change_state):
+	  Disable rtsp:// uris for the release, it's not good enough yet.
+	  Remove unused var.
+
+2006-11-26 16:39:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Implement reverse playback.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (gst_theora_dec_reset),
+	  (theora_dec_push_forward), (theora_dec_push_reverse),
+	  (theora_handle_data_packet), (theora_dec_decode_buffer),
+	  (theora_dec_flush_decode), (theora_dec_chain_reverse),
+	  (theora_dec_chain_forward), (theora_dec_chain):
+	  Implement reverse playback.
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_reset),
+	  (vorbis_dec_decode_buffer), (vorbis_dec_flush_decode),
+	  (vorbis_dec_chain_forward):
+	  Clear buffers used for reverse playback in _reset.
+	  No need to set the eos flag, we clip samples using the segment.
+
+2006-11-24 15:40:58 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Some cleanups.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_page_copy), (gst_ogg_page_free),
+	  (gst_ogg_pad_init), (gst_ogg_pad_dispose), (gst_ogg_pad_reset),
+	  (gst_ogg_pad_stream_out), (gst_ogg_pad_submit_page),
+	  (gst_ogg_chain_reset), (gst_ogg_demux_perform_seek):
+	  Some cleanups.
+	  Handle continued pages in reverse mode.
+
+2006-11-24 15:39:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Small cleanups.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_push_forward),
+	  (vorbis_handle_data_packet), (vorbis_dec_decode_buffer),
+	  (vorbis_dec_flush_decode):
+	  Small cleanups.
+	  Don't try to add invalid timestamps.
+	  Clipping will unref the buffer.
+
+2006-11-24 08:56:10 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/: remove obsolete _factory_init protos
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.h:
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  remove obsolete _factory_init protos
+
+2006-11-24 08:35:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: Fix spacing in debug message.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_buffer_alloc):
+	  Fix spacing in debug message.
+
+2006-11-23 11:07:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Don't just ignore return values from _pad_push().
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_page),
+	  (gst_ogg_demux_chain):
+	  Don't just ignore return values from _pad_push().
+	  Small debug improvements.
+
+2006-11-23 11:02:11 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggmux.c: If our incoming buffer is marked as DISCONT, then increment the page number (so that the discont...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_process_best_pad):
+	  If our incoming buffer is marked as DISCONT, then increment the page
+	  number (so that the discontinuity is marked in the final ogg
+	  bitstream) and flush the previous page.
+
+2006-11-22 14:34:03 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/: Mark discontinuities of > 3/4 of a frame, reinit encoder.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/theoraenc.c: (gst_theora_enc_init),
+	  (theora_enc_reset), (theora_enc_clear), (theora_enc_sink_setcaps),
+	  (theora_buffer_from_packet), (theora_enc_is_discontinuous),
+	  (theora_enc_chain), (theora_enc_change_state):
+	  Mark discontinuities of > 3/4 of a frame, reinit encoder.
+	  * tests/check/pipelines/theoraenc.c: (check_buffer_granulepos),
+	  (GST_START_TEST), (theoraenc_suite):
+	  Enable discontinuity test, fix it.
+
+2006-11-21 18:39:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.*: Some textoverlay fixes: for one, in the video chain function, actually wait for a text bu...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init),
+	  (gst_text_overlay_text_pad_unlink), (gst_text_overlay_text_event),
+	  (gst_text_overlay_video_event), (gst_text_overlay_pop_text),
+	  (gst_text_overlay_text_chain), (gst_text_overlay_video_chain),
+	  (gst_text_overlay_change_state):
+	  * ext/pango/gsttextoverlay.h:
+	  Some textoverlay fixes: for one, in the video chain function,
+	  actually wait for a text buffer to come in if there is none at the
+	  moment and there should be one; also, deal more gracefully with
+	  incoming buffers that do not have a timestamp or duration; discard
+	  text buffer when not needed any longer. Fixes #341681.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/textoverlay.c:
+	  (notgst_check_setup_src_pad2), (notgst_check_teardown_src_pad2),
+	  (setup_textoverlay), (buffer_is_all_black), (create_black_buffer),
+	  (create_text_buffer), (cleanup_textoverlay), (GST_START_TEST),
+	  (test_video_waits_for_text_send_text_newsegment_thread),
+	  (test_video_waits_for_text_shutdown_element),
+	  (test_render_continuity_push_video_buffers_thread),
+	  (textoverlay_suite):
+	  Add some unit tests for textoverlay.
+
+2006-11-21 09:29:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Avoid integer underflow when the found probability for mp3 is smaller than the '...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset):
+	  Avoid integer underflow when the found probability for mp3 is
+	  smaller than the 'penalty' we subtract if there's not a clean
+	  mp3 header sync at offset 0.
+
+2006-11-21 08:17:16 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/gst-plugins-base-libs-sections.txt: Add some new symbols to the docs
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  Add some new symbols to the docs
+
+2006-11-20 16:44:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Enable ffmpegcolorspace test now that the RGBA32 issue is fixed (for now not for valgrinding though, si...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/ffmpegcolorspace.c:
+	  (ffmpegcolorspace_suite):
+	  Enable ffmpegcolorspace test now that the RGBA32 issue is fixed
+	  (for now not for valgrinding though, since it takes too long).
+
+2006-11-20 15:01:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Fix RGBA32 caps. Fixes #357038.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps):
+	  Fix RGBA32 caps. Fixes #357038.
+
+2006-11-20 12:20:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixertrack.h: Add FIXME so we can add some padding here in 0.11
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  Add FIXME so we can add some padding here in 0.11
+
+2006-11-19 17:07:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.h: Fix GstBaseRTPAudioPayload structure so the whole GObject inheritance busi...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  Fix GstBaseRTPAudioPayload structure so the whole GObject
+	  inheritance business actually works (parent class instance structure
+	  must always come first in the derived class instance structure).
+
+2006-11-16 14:35:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Make sure our checks and the videotestsrc plugin link against the local uninstalled gst libs and not any installed gs...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/Makefile.am:
+	  * tests/check/Makefile.am:
+	  Make sure our checks and the videotestsrc plugin link against the
+	  local uninstalled gst libs and not any installed gst libs that
+	  might happen to exist as well.
+	  * tests/check/elements/adder.c: (message_received),
+	  (test_event_message_received), (test_play_twice_message_received):
+	  * tests/check/elements/ffmpegcolorspace.c: (GST_START_TEST):
+	  Fix compiler warnings when compiling against core with disabled
+	  debugging system.
+
+2006-11-16 12:55:08 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: Fix audiorate, so that it accurately sets offsets and timestamps.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_reset),
+	  (gst_audio_rate_sink_event), (gst_audio_rate_chain):
+	  Fix audiorate, so that it accurately sets offsets and timestamps.
+	  Doesn't change the fundamental algorithmic decisions; so should be
+	  safe.
+	  * tests/check/Makefile.am:
+	  Enable audiorate test now that it passes.
+
+2006-11-15 10:05:33 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: clear xv when going to NULL, remove // commented non-existant proto
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state):
+	  clear xv when going to NULL, remove // commented non-existant proto
+	  * tests/examples/seek/seek.c: (main):
+	  add missing tooltip description for scrub and play_scrub
+
+2006-11-14 23:34:19 +0000  David Schleef <ds@schleef.org>
+
+	  configure.ac: Bump liboil requirement to 0.3.8.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump liboil requirement to 0.3.8.
+	  * gst-libs/gst/riff/riff-media.c:
+	  Add Dirac fourcc.
+	  * gst/videoscale/vs_image.h:
+	  * gst/videoscale/vs_scanline.h:
+	  Use liboil's stdint.h.
+	  * gst/videotestsrc/videotestsrc.c:
+	  Remove liboil related ifdef's, since they aren't needed now, and
+	  won't work with future versions.
+
+2006-11-14 23:08:38 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videoscale/: Add a 4-tap image scaler.  Theoretically looks much prettier.
+	  Original commit message from CVS:
+	  * gst/videoscale/Makefile.am:
+	  * gst/videoscale/gstvideoscale.c:
+	  * gst/videoscale/gstvideoscale.h:
+	  * gst/videoscale/vs_4tap.c:
+	  * gst/videoscale/vs_4tap.h:
+	  * gst/videoscale/vs_image.c:
+	  * gst/videoscale/vs_image.h:
+	  * gst/videoscale/vs_scanline.c:
+	  * gst/videoscale/vs_scanline.h:
+	  Add a 4-tap image scaler.  Theoretically looks much prettier.
+	  The tap calculation could use some improvement.
+
+2006-11-14 11:54:14 +0000  Jan David Mol <j.j.d.mol@tudelft.nl>
+
+	  Various gsize and gssize printf fixes. Fixes #372507.
+	  Original commit message from CVS:
+	  Patch by: Jan David Mol <j dot j dot d dot mol at tudelft dot nl>
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_parse_strf_auds),
+	  (gst_riff_parse_strf_iavs):
+	  * gst/subparse/gstsubparse.c: (convert_encoding):
+	  * gst/tcp/gstmultifdsink.c:
+	  (gst_multi_fd_sink_handle_client_write):
+	  * gst/tcp/gsttcp.c: (gst_tcp_socket_write), (gst_tcp_socket_read),
+	  (gst_tcp_read_buffer), (gst_tcp_gdp_read_caps),
+	  (gst_tcp_gdp_write_buffer), (gst_tcp_gdp_write_caps):
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_render):
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+	  (gst_ximagesink_ximage_new):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new):
+	  Various gsize and gssize printf fixes. Fixes #372507.
+
+2006-11-13 18:14:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.*: First stab at vorbis reverse playback.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_sink_event),
+	  (vorbis_dec_push_forward), (vorbis_dec_push_reverse),
+	  (vorbis_handle_data_packet), (vorbis_dec_decode_buffer),
+	  (vorbis_dec_flush_decode), (vorbis_dec_chain_reverse),
+	  (vorbis_dec_chain_forward), (vorbis_dec_chain):
+	  * ext/vorbis/vorbisdec.h:
+	  First stab at vorbis reverse playback.
+
+2006-11-13 17:30:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.*: Make the clock sync code more accurate wrt resampling and playback at differen...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_event), (gst_base_audio_sink_render):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Make the clock sync code more accurate wrt resampling and playback
+	  at different rates.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_commit_full), (gst_ring_buffer_commit):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Use better algorithm to interpolate sample rates.
+
+2006-11-13 15:31:01 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggdemux.c: Improve a debug line slightly.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_page):
+	  Improve a debug line slightly.
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_plugin_init):
+	  Call gst_riff_init() in plugin_init, to avoid getting errors from
+	  the debug system (unrelated changes to another plugin made this turn
+	  up; not sure why).
+
+2006-11-10 19:20:21 +0000  Sergey Scobich <sergery.scobich@gmail.com>
+
+	  win32/common/libgsttag.def: Add missing symbol (#366492).
+	  Original commit message from CVS:
+	  Patch by: Sergey Scobich  <sergery.scobich at gmail com>
+	  * win32/common/libgsttag.def:
+	  Add missing symbol (#366492).
+
+2006-11-10 00:52:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreamselector.c: Don't unref a NULL pad.
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c: (gst_stream_selector_dispose):
+	  Don't unref a NULL pad.
+
+2006-11-09 00:50:00 +0000  Christian Schaller <uraeus@gnome.org>
+
+	  ext/ogg/gstoggdemux.c: Implement first stab at reverse playback.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_page),
+	  (gst_ogg_demux_get_prev_page), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_handle_page), (gst_ogg_demux_chain),
+	  (gst_ogg_demux_loop_forward), (gst_ogg_demux_loop_reverse),
+	  (gst_ogg_demux_loop):
+	  Implement first stab at reverse playback.
+
+2006-11-07 07:22:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-media.c: add h263/h264 variants to the caps, Fixes #363118
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  add h263/h264 variants to the caps, Fixes #363118
+
+2006-11-06 18:24:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/: Use g_strerror instead of strerror so we get UTF-8.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func):
+	  * gst-libs/gst/audio/gstaudiosrc.c: (audioringbuffer_thread_func):
+	  Use g_strerror instead of strerror so we get UTF-8.
+
+2006-11-04 07:25:58 +0000  David Schleef <ds@schleef.org>
+
+	  ext/ogg/: Add/remove KW-DIRAC header here, since it is ogg-specific.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  Add/remove KW-DIRAC header here, since it is ogg-specific.
+
+2006-11-03 15:44:31 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Recognise more mpeg4 elementary video streams.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg4_video_type_find):
+	  Recognise more mpeg4 elementary video streams.
+
+2006-11-02 17:26:03 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Lower the probability of mp3 typefinding functions if we don't find a valid mp3 ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset):
+	  Lower the probability of mp3 typefinding functions if we don't find a
+	  valid mp3 header at the start of the file.
+	  Closes #369482
+
+2006-11-02 15:06:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/: Document and partially implement an algorithm for doing reverse playback of theora video.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_init),
+	  (theora_dec_sink_event), (theora_dec_chain_forward),
+	  (theora_dec_flush_decode), (theora_dec_chain_reverse),
+	  (theora_dec_chain):
+	  Document and partially implement an algorithm for doing reverse playback
+	  of theora video.
+
+2006-11-02 14:18:45 +0000  Sergey Scobich <sergey.scobich@gmail.com>
+
+	  win32/: Misc. VS8 build fixes: fix syntax in config.h, add missing entries to libgsttag.def; add missing dependencies...
+	  Original commit message from CVS:
+	  Patch by: Sergey Scobich  <sergey.scobich at gmail com>
+	  * win32/common/config.h:
+	  * win32/common/interfaces-enumtypes.c:
+	  * win32/common/libgsttag.def:
+	  * win32/vs8/gst-plugins-base.sln:
+	  * win32/vs8/libgstaudioresample.vcproj:
+	  * win32/vs8/libgstinterfaces.vcproj:
+	  * win32/vs8/libgstogg.vcproj:
+	  * win32/vs8/libgstriff.vcproj:
+	  * win32/vs8/libgsttag.vcproj:
+	  * win32/vs8/libgsttheora.vcproj:
+	  * win32/vs8/libgstvideoscale.vcproj:
+	  * win32/vs8/libgstvorbis.vcproj:
+	  Misc. VS8 build fixes: fix syntax in config.h, add missing entries
+	  to libgsttag.def; add missing dependencies for some vs8 projects;
+	  re-arrange placement of .def files in vs8 projects (#366334).
+
+2006-11-01 14:08:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstogg.c: Remove unused variable.
+	  Original commit message from CVS:
+	  * ext/ogg/gstogg.c:
+	  Remove unused variable.
+	  * ext/ogg/gstoggdemux.c:
+	  Fix Wim's surname in plugin description.
+
+2006-10-31 15:05:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-plugins-base.spec.in: spec new .h file. Fixes #368310.
+	  Original commit message from CVS:
+	  * gst-plugins-base.spec.in:
+	  spec new .h file. Fixes #368310.
+
+2006-10-31 14:19:07 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.*: Make using the remove or clear signals threadsafe.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_add_full),
+	  (gst_multi_fd_sink_remove), (gst_multi_fd_sink_clear),
+	  (gst_multi_fd_sink_get_stats),
+	  (gst_multi_fd_sink_remove_client_link),
+	  (gst_multi_fd_sink_queue_buffer),
+	  (gst_multi_fd_sink_handle_clients):
+	  * gst/tcp/gstmultifdsink.h:
+	  Make using the remove or clear signals threadsafe.
+	  Make calling get-stats with an invalid fd not segfault.
+	  Fixes 368273.
+
+2006-10-31 10:49:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/: Fix and activate base audio payloader.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/Makefile.am:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  (gst_base_rtp_audio_payload_init):
+	  Fix and activate base audio payloader.
+
+2006-10-28 17:22:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for QuickTime Image Files (see #366156).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (qtif_type_find),
+	  (plugin_init):
+	  Add typefinder for QuickTime Image Files (see #366156).
+
+2006-10-28 16:00:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioresample/gstaudioresample.c: Another typo fix (#366212).
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init):
+	  Another typo fix (#366212).
+
+2006-10-27 17:13:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/volume/gstvolume.c: Use stream time to synchronize volume property instead of rather random timestamps. This is n...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_transform_ip):
+	  Use stream time to synchronize volume property instead of rather random
+	  timestamps. This is needed when gnonlin does its time shifting.
+
+2006-10-27 16:46:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	* ChangeLog:
+	  I'm too lazy to comment this
+	  Original commit message from CVS:
+	  *** empty log message ***
+
+2006-10-27 16:45:30 +0000  Mark Nauwelaerts <manauw@skynet.be>
+
+	  ext/ogg/gstoggmux.c: Remove the pad from the element in release_pad.
+	  Original commit message from CVS:
+	  Patch by: Mark Nauwelaerts <manauw at skynet dot be>
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_release_pad):
+	  Remove the pad from the element in release_pad.
+
+2006-10-27 11:57:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/: Explicitly create our custom buffer classes at a thread-safe location as well, since g_type_class_ref() doesn't...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_get_type):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_type):
+	  Explicitly create our custom buffer classes at a thread-safe
+	  location as well, since g_type_class_ref() doesn't seem to be
+	  entirely thread-safe either (#365501; also see #349410).
+
+2006-10-26 10:49:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-read.c: If strings in INFO chunk are not UTF-8, do something similar to what we do for ID3v1 t...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c: (freeform_string_to_utf8),
+	  (gst_riff_parse_info):
+	  If strings in INFO chunk are not UTF-8, do something similar to
+	  what we do for ID3v1 tags: check a number of environment variables
+	  (GST_AVI_TAG_ENCODING, GST_RIFF_TAG_ENCODING, GST_TAG_ENCODING) for
+	  character sets to try, otherwise try the current locale and/or fall
+	  back on ISO-8859-1. Fixes #360552.
+
+2006-10-23 12:46:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/: Add a bunch of exciting new checkers patterns.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_pattern_get_type),
+	  (gst_video_test_src_set_pattern):
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/videotestsrc/videotestsrc.c: (gst_video_test_src_checkers1),
+	  (gst_video_test_src_checkers2), (gst_video_test_src_checkers4),
+	  (gst_video_test_src_checkers8):
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add a bunch of exciting new checkers patterns.
+
+2006-10-23 12:06:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/: Add support for TMPlayer-type subtitles (#362845).
+	  Original commit message from CVS:
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect),
+	  (gst_sub_parse_format_autodetect), (handle_buffer),
+	  (gst_sub_parse_chain), (gst_subparse_type_find), (plugin_init):
+	  * gst/subparse/gstsubparse.h:
+	  * gst/subparse/tmplayerparse.c: (tmplayer_parse_line),
+	  (parse_tmplayer):
+	  * gst/subparse/tmplayerparse.h:
+	  Add support for TMPlayer-type subtitles (#362845).
+	  * tests/check/elements/subparse.c: (test_tmplayer_do_test),
+	  (GST_START_TEST), (subparse_suite):
+	  Add some basic unit tests for the above.
+
+2006-10-23 11:47:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/audiorate.c: More tests for audiorate: inject buffers to check behaviour when buffers overlap.
+	  Original commit message from CVS:
+	  * tests/check/elements/audiorate.c: (test_injector_base_init),
+	  (test_injector_class_init), (test_injector_chain),
+	  (test_injector_init), (probe_cb), (do_perfect_stream_test),
+	  (GST_START_TEST), (audiorate_suite):
+	  More tests for audiorate: inject buffers to check behaviour when
+	  buffers overlap.
+
+2006-10-21 16:39:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add some basic unit tests for audiorate. Disabled at the moment since it doesn't pass yet (see bug #363...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/audiorate.c: (probe_cb), (got_buf),
+	  (do_perfect_stream_test), (GST_START_TEST), (audiorate_suite):
+	  Add some basic unit tests for audiorate. Disabled at the moment
+	  since it doesn't pass yet (see bug #363119).
+
+2006-10-20 17:02:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Add missing closing tags for markup and fix broken markup, otherwise pango won't render a...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (subrip_fix_up_markup),
+	  (parse_subrip), (handle_buffer):
+	  Add missing closing tags for markup and fix broken markup,
+	  otherwise pango won't render anything (fixes #357531). Also,
+	  make sure the text we send out is always NUL-terminated
+	  (better safe than sorry etc.).
+	  * tests/check/elements/subparse.c: (test_srt_do_test),
+	  (test_srt):
+	  Some more tests for .srt incl. tests for the above stuff.
+
+2006-10-20 13:56:55 +0000  Stefan Kost <ensonic@users.sf.net>
+
+	  sys/: Try to redraw borders only when needed. Apparently this consumes resources on small devices... :-O (#363607)
+	  Original commit message from CVS:
+	  2006-10-20  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_put):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put):
+	  Patch by: Stefan Kost  <ensonic@users.sf.net>
+	  Try to redraw borders only when needed. Apparently this consumes
+	  resources on small devices... :-O (#363607)
+
+2006-10-20 13:54:19 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.c: If caps change, then update the client's idea of the caps so that we don't end up re-sendin...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c:
+	  (gst_multi_fd_sink_client_queue_buffer):
+	  If caps change, then update the client's idea of the caps so that we
+	  don't end up re-sending streamheaders for every single buffer after
+	  the caps change.
+
+2006-10-20 12:31:02 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggparse.c: Set caps on pushed buffers; fix up refcounting of caps objects.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggparse.c: (gst_ogg_parse_dispose),
+	  (gst_ogg_parse_append_header), (gst_ogg_parse_chain):
+	  Set caps on pushed buffers; fix up refcounting of caps objects.
+
+2006-10-19 14:09:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Typefind mmsh header data packet to application/x-mmsh (#362625).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mmsh_type_find),
+	  (plugin_init):
+	  Typefind mmsh header data packet to application/x-mmsh (#362625).
+
+2006-10-19 09:17:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add very simple unit test for subparse.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/subparse.c: (buffer_from_static_string),
+	  (setup_subparse), (teardown_subparse), (test_srt_do_test),
+	  (GST_START_TEST), (subparse_suite):
+	  Add very simple unit test for subparse.
+
+2006-10-19 09:00:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Strip trailing newlines from subtitle text output.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (strip_trailing_newlines),
+	  (parse_subrip):
+	  Strip trailing newlines from subtitle text output.
+
+2006-10-18 18:40:12 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Fix memleak; clear subparse->textbuf n state change function.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (gst_sub_parse_change_state):
+	  Fix memleak; clear subparse->textbuf n state change function.
+
+2006-10-18 15:13:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Don't require subrip (.srt) files to start with a chunk number of 1.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect):
+	  Don't require subrip (.srt) files to start with a chunk number of 1.
+
+2006-10-18 13:42:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.*: Extract rate from the NEWSEGMENT event.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_event), (gst_base_audio_sink_render):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  Extract rate from the NEWSEGMENT event.
+	  Use commit_full to also take rate adjustment into account when writing
+	  samples to the ringbuffer.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_commit_full), (gst_ring_buffer_commit),
+	  (gst_ring_buffer_read):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Added _commit_full() to also take rate into account.
+	  Use simple interpolation algorithm to resample audio.
+	  API: gst_ring_buffer_commit_full()
+	  * tests/examples/seek/scrubby.c: (speed_cb), (do_seek):
+	  * tests/examples/seek/seek.c: (segment_done):
+	  Don't try to seek with 0.0 rate, just pause instead.
+	  Remove bogus debug line.
+
+2006-10-18 12:57:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Catch async errors when starting up the subtitle bin, so we can stop waiting and conti...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (subbin_startup_sync_msg),
+	  (setup_source):
+	  Catch async errors when starting up the subtitle bin, so we can
+	  stop waiting and continue with the main film instead of hanging
+	  forever. Fixes #339366.
+	  * tests/check/elements/playbin.c: (playbin_suite):
+	  Enable unit test for the above.
+
+2006-10-18 09:53:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Some small and basic unit tests for playbin; not very useful yet, but at least a start.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/playbin.c: (GST_START_TEST),
+	  (gst_red_video_src_uri_get_type),
+	  (gst_red_video_src_uri_get_protocols),
+	  (gst_red_video_src_uri_get_uri), (gst_red_video_src_uri_set_uri),
+	  (gst_red_video_src_uri_handler_init),
+	  (gst_red_video_src_init_type), (gst_red_video_src_base_init),
+	  (gst_red_video_src_create), (gst_red_video_src_class_init),
+	  (gst_red_video_src_init), (plugin_init), (playbin_suite):
+	  Some small and basic unit tests for playbin; not very useful yet,
+	  but at least a start.
+
+2006-10-18 09:46:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: The old pad activation spiel.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (setup_sinks):
+	  The old pad activation spiel.
+
+2006-10-18 09:31:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Don't hang forever if the subbin already fails to start up in the state change to PAUS...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source):
+	  Don't hang forever if the subbin already fails to start up in
+	  the state change to PAUSED (#339366).
+
+2006-10-17 17:17:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/tuner.c: Fix some function guards, add some more function guards.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/tuner.c: (gst_tuner_list_channels),
+	  (gst_tuner_set_channel), (gst_tuner_get_channel),
+	  (gst_tuner_list_norms), (gst_tuner_set_norm), (gst_tuner_get_norm),
+	  (gst_tuner_set_frequency), (gst_tuner_get_frequency),
+	  (gst_tuner_signal_strength), (gst_tuner_find_norm_by_name),
+	  (gst_tuner_find_channel_by_name):
+	  Fix some function guards, add some more function guards.
+
+2006-10-17 11:34:32 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: Don't return a pad from get_our_ghost_pad unless it is actually the one we want.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (get_our_ghost_pad),
+	  (remove_element_chain):
+	  Don't return a pad from get_our_ghost_pad unless it is actually the
+	  one we want.
+	  Change a cast in remove_element_chain slightly.
+
+2006-10-13 15:20:29 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Segment seeking needs to use the rate and set stop to -1.
+	  Original commit message from CVS:
+	  2006-10-13  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (do_seek), (start_seek),
+	  (rate_spinbutton_changed_cb), (segment_done),
+	  (msg_state_changed):
+	  Segment seeking needs to use the rate and set stop to -1.
+
+2006-10-13 14:15:42 +0000  Ville Syrjala <ville.syrjala@movial.fi>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Don't crash when ringbuffer is not yet created.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_setcaps):
+	  Don't crash when ringbuffer is not yet created.
+	  Patch by: Ville Syrjala <ville dot syrjala at movial dot fi>
+	  Fixes #361634.
+	  * gst/playback/gstplaybasebin.c: (new_decoded_pad_full):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_request_new_pad):
+	  Activate pads befre adding them to running elements.
+
+2006-10-13 11:25:10 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Stop the scale updater when we start grabing the slider. Don't wait for the pipeline to b...
+	  Original commit message from CVS:
+	  2006-10-13  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (do_seek), (start_seek),
+	  (rate_spinbutton_changed_cb), (msg_state_changed): Stop the
+	  scale
+	  updater when we start grabing the slider. Don't wait for the
+	  pipeline to be PAUSED.
+
+2006-10-13 08:57:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/mixer.c: Guard mixer interface functions against bogus arguments.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/mixer.c: (gst_mixer_list_tracks),
+	  (gst_mixer_set_volume), (gst_mixer_get_volume),
+	  (gst_mixer_set_mute), (gst_mixer_set_option),
+	  (gst_mixer_get_option), (gst_mixer_mute_toggled),
+	  (gst_mixer_record_toggled), (gst_mixer_volume_changed),
+	  (gst_mixer_option_changed):
+	  Guard mixer interface functions against bogus arguments.
+
+2006-10-12 19:39:07 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: Use state-changed messages to trigger start/stop of scale update timer. Indeed the scale ...
+	  Original commit message from CVS:
+	  2006-10-12  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (do_seek), (start_seek),
+	  (stop_seek),
+	  (play_cb), (pause_cb), (stop_cb),
+	  (rate_spinbutton_changed_cb),
+	  (msg_state_changed), (main): Use state-changed messages to
+	  trigger
+	  start/stop of scale update timer. Indeed the scale slider was
+	  jumping here and there because the update timer was activated
+	  before seek completed. This fixes instant applying of rate
+	  changes
+	  by pressing the spinbutton like a crazy man !
+
+2006-10-12 19:09:06 +0000  Sebastien Cote <sebas642@yahoo.ca>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: Fix two small memory leaks (#361456).
+	  Original commit message from CVS:
+	  Patch by: Sebastien Cote  <sebas642 at yahoo.ca>
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_init),
+	  (gst_basertppayload_finalize):
+	  Fix two small memory leaks (#361456).
+
+2006-10-10 18:56:01 +0000  Julien Moutte <julien@moutte.net>
+
+	  tests/examples/seek/seek.c: When changing spinbutton we try to change the rate on the fly.
+	  Original commit message from CVS:
+	  2006-10-10  Julien MOUTTE  <julien@moutte.net>
+	  * tests/examples/seek/seek.c: (do_seek),
+	  (rate_spinbutton_changed_cb): When changing spinbutton we try
+	  to change the rate on the fly.
+
+2006-10-10 16:50:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/: Add WMS caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Add WMS caps.
+
+2006-10-10 12:49:03 +0000  Josep Torre Valles <josep@fluendo.com>
+
+	  ext/gnomevfs/: Fix URI interface implementation return type.
+	  Original commit message from CVS:
+	  2006-10-10  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+	  Patch by: Josep Torre Valles <josep@fluendo.com>
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Fix URI interface implementation return type.
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_set_property):
+	  Fix what looks like a copy/paste issue when assigning values.
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  (gst_audio_filter_template_get_type):
+	  Cast to prevent Forte warnings.
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_create):
+	  Fix URI interface implementation return type.
+	  gst_pad_query_position requires a signed integer pointer as
+	  3rd parameter, GstClockTime is unsigned.
+	  * gst/audioconvert/audioconvert.c:
+	  Fix integer overflow when treated as signed.
+	  * gst/audioresample/resample.c: (resample_add_input_data):
+	  Cast to prevent warnings on Forte.
+	  * gst/ffmpegcolorspace/imgconvert.c: (build_rgb_palette):
+	  Fix integer overflow when treated as signed.
+	  * gst/ffmpegcolorspace/imgconvert_template.h:
+	  Fix integer overflow when treated as signed. RGBA_OUT shifts bits.
+	  * gst/playback/gstdecodebin.c: (queue_filled_cb),
+	  (cleanup_decodebin):
+	  Who initialises a guint to -1!
+	  Cast function pointers to prevent warnings on Forte.
+	  * gst/playback/gstplaybasebin.c: (queue_deadlock_check),
+	  (queue_threshold_reached):
+	  Cast function pointers correctly to prevent warnings on Forte.
+	  * gst/playback/gststreaminfo.c: (gst_stream_info_dispose):
+	  Cast function pointers correctly to prevent warnings on Forte.
+	  * gst/subparse/gstssaparse.c: (gst_ssa_parse_setcaps):
+	  Obvious change to unsigned, 0xEF > max signed char.
+	  * gst/tcp/gstmultifdsink.c: (get_buffers_max), (count_burst_unit):
+	  GstClockTime is unsigned, initialise correctly.
+	  * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
+	  Cast so pointer arithemetic doesn't cause warnings on Forte.
+	  * gst/videorate/gstvideorate.c:
+	  Use correct return value.
+	  * tests/examples/seek/scrubby.c:
+	  GstClockTime is unsigned, initialise correctly.
+
+2006-10-10 11:20:03 +0000  Ferenc Gerlits <fgerlits@gmail.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Recognise XML files and XML-like files shorter than 256 bytes as well (fixes #35...
+	  Original commit message from CVS:
+	  Patch by: Ferenc Gerlits  <fgerlits at gmail com>
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Recognise XML files and XML-like files shorter than 256 bytes as
+	  well (fixes #359237).
+
+2006-10-09 15:01:30 +0000  Edgard Lima <edgard.lima@indt.org.br>
+
+	* ChangeLog:
+	* common:
+	* gst/typefind/gsttypefindfunctions.c:
+	  Added typefind functions to video/x-nuv media.
+	  Original commit message from CVS:
+	  Added typefind functions to video/x-nuv media.
+
+2006-10-08 16:59:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/xoverlay.c: Some more guards against invalid input.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  (gst_x_overlay_set_xwindow_id), (gst_x_overlay_expose):
+	  Some more guards against invalid input.
+
+2006-10-07 18:35:39 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Useless goto.
+	  Original commit message from CVS:
+	  2006-10-07  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_text_event):
+	  Useless goto.
+	  * tests/examples/seek/seek.c: (do_seek),
+	  (rate_spinbutton_changed_cb), (main): Add a rate spinbutton in
+	  seek example to experiment with rates != 1.0 (reverse playback
+	  !)
+
+2006-10-06 19:20:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/interfaces/xoverlay.c: Unref message in doc-example (spotted by Robert McQueen)
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  Unref message in doc-example (spotted by Robert McQueen)
+
+2006-10-06 17:04:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/typefind/gsttypefindfunctions.c: printf fix.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset),
+	  (mpeg1_parse_header), (mpeg1_sys_type_find):
+	  printf fix.
+
+2006-10-06 14:37:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/: Activate dynamic pads before adding them to the element.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+	  (close_pad_link):
+	  * gst/playback/gstplaybasebin.c: (new_decoded_pad_full):
+	  Activate dynamic pads before adding them to the element.
+
+2006-10-06 14:04:53 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/floatcast/floatcast.h: Fix obviously-bogus macros; use the correct types.
+	  Original commit message from CVS:
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  Fix obviously-bogus macros; use the correct types.
+
+2006-10-06 13:34:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Also call parent state change function to activate pads.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_change_state):
+	  Also call parent state change function to activate pads.
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset),
+	  (mpeg1_parse_header), (mpeg1_sys_type_find):
+	  Add some more debug info in mpeg typefinding.
+
+2006-10-06 12:57:10 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoradec.c: Zero byte theora packets are valid and well-defined; don't warn on them.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_chain):
+	  Zero byte theora packets are valid and well-defined; don't warn on
+	  them.
+
+2006-10-06 10:04:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gstmultifdsink.c: API: add dropped_buffers to the get-stats GValueArray
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init),
+	  (gst_multi_fd_sink_get_stats), (find_limits),
+	  (gst_multi_fd_sink_queue_buffer):
+	  API: add dropped_buffers to the get-stats GValueArray
+
+2006-10-05 15:55:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Printf format fixes.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsadeviceprobe.c:
+	  (gst_alsa_device_property_probe_get_values):
+	  * ext/alsa/gstalsasink.c: (set_hwparams):
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_elem_pad),
+	  (gst_ogg_chain_new_stream), (gst_ogg_demux_read_chain):
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_send_headers),
+	  (gst_ogg_mux_process_best_pad):
+	  * ext/ogg/gstoggparse.c: (gst_ogg_parse_new_stream),
+	  (gst_ogg_parse_chain):
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_stream_header):
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_setup),
+	  (gst_vorbis_enc_buffer_check_discontinuous):
+	  * ext/vorbis/vorbisparse.c: (vorbis_parse_src_query):
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_handle_track_seek):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_push_full):
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push):
+	  * gst/audioresample/resample.c: (resample_input_pushthrough):
+	  * gst/playback/gstplaybasebin.c: (queue_out_of_data):
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_handle_clients):
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset),
+	  (wavpack_type_find):
+	  * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_create):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimagesink_check_xshm_calls), (gst_xvimagesink_xvimage_new):
+	  * tests/check/elements/volume.c: (GST_START_TEST):
+	  Printf format fixes.
+
+2006-10-04 13:18:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gsttcp.c: Fix a simple mistake (see the docs)
+	  Original commit message from CVS:
+	  * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_caps):
+	  Fix a simple mistake (see the docs)
+	  Fixes #359580
+
+2006-10-04 13:15:36 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* win32/common/config.h:
+	  bump version
+	  Original commit message from CVS:
+	  bump version
+
+2006-10-03 12:11:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/plugins/: Add vorbistag element to docs; update version numbers to 0.10.10.1.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-libvisual.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playbin.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Add vorbistag element to docs; update version numbers to 0.10.10.1.
+
+2006-10-03 11:51:48 +0000  James Doc Livingston <doclivingston@gmail.com>
+
+	  ext/vorbis/: Add new vorbistag element which derives from vorbisparse and is essentially the same as well, only that ...
+	  Original commit message from CVS:
+	  Patch by: James "Doc" Livingston <doclivingston at gmail com>
+	  * ext/vorbis/Makefile.am:
+	  * ext/vorbis/vorbis.c: (plugin_init):
+	  * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_class_init),
+	  (vorbis_parse_parse_packet), (vorbis_parse_chain):
+	  * ext/vorbis/vorbisparse.h:
+	  * ext/vorbis/vorbistag.c: (gst_vorbis_tag_base_init),
+	  (gst_vorbis_tag_class_init), (gst_vorbis_tag_init),
+	  (gst_vorbis_tag_parse_packet):
+	  * ext/vorbis/vorbistag.h:
+	  Add new vorbistag element which derives from vorbisparse
+	  and is essentially the same as well, only that it implements
+	  the GstTagSetter interface and can modify the stream's
+	  vorbiscomment on the fly (#335635).
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/vorbistag.c: (setup_vorbistag),
+	  (cleanup_vorbistag), (buffer_probe), (start_pipeline),
+	  (get_buffer), (stop_pipeline), (_create_codebook_header_buffer),
+	  (_create_audio_buffer), (GST_START_TEST), (vorbistag_suite):
+	  Add unit test for new vorbistag element.
+
+2006-10-03 10:36:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/vorbis/vorbisparse.c: Set BOS flag in packet structure to fix 'jump depends on unitialized value' errors in valgr...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_init),
+	  (vorbis_parse_push_headers), (vorbis_parse_chain):
+	  Set BOS flag in packet structure to fix 'jump depends
+	  on unitialized value' errors in valgrind; various minor
+	  clean-ups.
+
+2006-09-30 15:30:07 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: Fix typo in a debug statement.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (close_pad_link):
+	  Fix typo in a debug statement.
+	  * gst/playback/gstplaybasebin.c: (probe_triggered),
+	  (new_decoded_pad_full), (new_decoded_pad), (subs_new_decoded_pad),
+	  (gen_source_element), (source_new_pad), (analyse_source),
+	  (setup_source):
+	  When handling no_more_pads in new_decoded_pad, make sure to treat
+	  subtitle pads correctly. Fixes playback with subtitle files.
+	  Move a recurring message to LOG level.
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+	  The maximum value for the Xv colorkey on this Radeon is 0xFFFFFFFF,
+	  which ends up as -1 when cast to an int. Make the logic handle the
+	  max value as an unsigned mask and only change the colorkey when it's
+	  a value we recognise.
+
+2006-09-30 00:14:20 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Removed empty * between paragraphs
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  Removed empty * between paragraphs
+
+2006-09-29 23:50:53 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/: Moved some documentation into .c file
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/README:
+	  Moved some documentation into .c file
+
+2006-09-29 17:35:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Fix compilation.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (no_more_pads):
+	  Fix compilation.
+
+2006-09-29 16:04:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Remove g_print
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (new_caps):
+	  Remove g_print
+	  * gst/playback/gstplaybin.c:
+	  Add some docs.
+
+2006-09-29 15:16:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Re-enable cddabasesrc test to see if it works again now.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Re-enable cddabasesrc test to see if it works again
+	  now.
+
+2006-09-29 13:46:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Handle invalid URIs a bit more gracefully.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_subtitle),
+	  (gen_source_element):
+	  Handle invalid URIs a bit more gracefully.
+
+2006-09-29 12:54:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/oggmux.c: Remove obsolete comment.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c:
+	  Remove obsolete comment.
+
+2006-09-29 10:43:05 +0000  James Doc Livingston <doclivingston@gmail.com>
+
+	  ext/ogg/gstoggmux.c: Commit patch from James "Doc" Livingston, adds proper EOS handling in oggmux. GStreamer can, for...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_request_new_pad),
+	  (gst_ogg_mux_release_pad), (gst_ogg_mux_push_buffer),
+	  (gst_ogg_mux_compare_pads), (gst_ogg_mux_queue_pads),
+	  (gst_ogg_mux_send_headers), (gst_ogg_mux_process_best_pad),
+	  (gst_ogg_mux_collected):
+	  Commit patch from James "Doc" Livingston, adds proper EOS handling
+	  in oggmux. GStreamer can, for the first time ever, create a valid
+	  Ogg file! Yay!
+	  * tests/check/pipelines/oggmux.c: (check_chain_final_state),
+	  (oggmux_suite):
+	  Reenable tests now that they pass.
+
+2006-09-29 08:20:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.c: Stop reading commands when EOF (we read 0) as well.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_handle_clients):
+	  Stop reading commands when EOF (we read 0) as well.
+
+2006-09-28 15:29:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Implement delayed caps linking needed for element with a lot of different caps on the sr...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (dynamic_create), (dynamic_free),
+	  (close_pad_link), (dynamic_remove), (no_more_pads), (new_caps),
+	  (find_dynamic), (unlinked), (close_link):
+	  Implement delayed caps linking needed for element with a lot of
+	  different caps on the src pads that get fixed at runtime.
+	  Improve management of dynamic elements.
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+	  (group_destroy), (group_commit), (check_queue), (queue_overrun),
+	  (gen_preroll_element), (remove_groups), (unknown_type),
+	  (add_element_stream), (no_more_pads_full), (no_more_pads),
+	  (sub_no_more_pads), (source_no_more_pads), (preroll_unlinked),
+	  (new_decoded_pad), (setup_subtitle), (array_has_value),
+	  (gen_source_element), (source_new_pad), (has_all_raw_caps),
+	  (analyse_source), (remove_decoders), (make_decoder),
+	  (remove_source), (setup_source), (finish_source), (prepare_output),
+	  (gst_play_base_bin_change_state):
+	  * gst/playback/gstplaybasebin.h:
+	  Use more _CAST instead of full type checking casts.
+	  Small cleanups, plug some leaks.
+	  Handle dynamic sources.
+	  Add some helper functions to create lists of strings used for
+	  blacklisting and other stuff.
+	  Refactor some code dealing with analysing the source.
+	  Re-enable sources without pads (like cd:// or other selfcontained
+	  elements).
+
+2006-09-28 15:08:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: When we have a timestamp, we can still perform clipping.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  When we have a timestamp, we can still perform clipping.
+	  When we have no clock, we must play the sample ASAP.
+
+2006-09-28 11:46:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiorate/gstaudiorate.c: Set caps on outgoing buffers.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  Set caps on outgoing buffers.
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_flush_prev),
+	  (gst_video_rate_event), (gst_video_rate_chain):
+	  * gst/videorate/gstvideorate.h:
+	  Fix videorate some more. Fixes #357977
+
+2006-09-28 11:34:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/adder.c: Don't set timeout to 6 seconds when we're running in valgrind ... (and how is 6 seconds...
+	  Original commit message from CVS:
+	  * tests/check/elements/adder.c: (adder_suite):
+	  Don't set timeout to 6 seconds when we're running
+	  in valgrind ... (and how is 6 seconds longer than
+	  the default anyway?)
+
+2006-09-28 10:49:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiorate/gstaudiorate.c: Keep sink and src segment to keep track of time and support more input formats.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_reset),
+	  (gst_audio_rate_sink_event), (gst_audio_rate_convert),
+	  (gst_audio_rate_convert_segments), (gst_audio_rate_chain):
+	  Keep sink and src segment to keep track of time and support more
+	  input formats.
+	  Fix bogus next_offset and run_time calculation, don't understand how
+	  this could have worked before. Fixes #357976.
+	  Remove some unneeded vars.
+
+2006-09-28 09:41:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Only remove visualisation from visbin if there is a visbin (or: don't throw warnings when ...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (remove_sinks):
+	  Only remove visualisation from visbin if there is a visbin (or:
+	  don't throw warnings when closing totem without playing a file).
+
+2006-09-27 13:52:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Add some more info in a WARNING.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  Add some more info in a WARNING.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_create):
+	  Handle PAUSE in create function, use new -core addition to
+	  wait for playing. Fixes pausing and resuming capture from an
+	  audiosrc.
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_commit),
+	  (gst_ring_buffer_read):
+	  Constify some more.
+	  Caller supports interrupted reads now.
+
+2006-09-27 13:29:49 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  add new header file to spec
+	  Original commit message from CVS:
+	  add new header file to spec
+
+2006-09-27 12:55:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Another attempt to make the gen64 buildbot happy.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Another attempt to make the gen64 buildbot happy.
+
+2006-09-27 11:58:17 +0000  Jonathan Matthew <jonathan@kaolin.wh9.net>
+
+	  ext/libvisual/visual.c: Libvisual plugin was not passing audio data to libvisual 0.4.0 correctly. Fixes #357800
+	  Original commit message from CVS:
+	  Patch by: Jonathan Matthew <jonathan@kaolin.wh9.net>
+	  * ext/libvisual/visual.c: (gst_visual_clear_actors),
+	  (gst_visual_chain), (gst_visual_change_state):
+	  Libvisual plugin was not passing audio data to libvisual 0.4.0
+	  correctly. Fixes #357800
+
+2006-09-27 11:31:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/simple-launch-lines.c: Add timeout to _get_state() so we see which pipeline it is that causes t...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/simple-launch-lines.c: (run_pipeline):
+	  Add timeout to _get_state() so we see which pipeline it is
+	  that causes trouble on the gen64 build bot.
+
+2006-09-27 11:06:54 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: the source pad always uses fixed caps.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_init), (gst_base_rtp_depayload_push_full),
+	  (gst_base_rtp_depayload_push_ts), (gst_base_rtp_depayload_process),
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  the source pad always uses fixed caps.
+
+2006-09-27 11:05:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Added docs for the audio libs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/gstaudioclock.c:
+	  * gst-libs/gst/audio/gstaudioclock.h:
+	  * gst-libs/gst/audio/gstaudiosink.c:
+	  * gst-libs/gst/audio/gstaudiosink.h:
+	  * gst-libs/gst/audio/gstaudiosrc.c:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Added docs for the audio libs.
+
+2006-09-27 10:59:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Temporarily disable test that fails on the bots for unknown reasons.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Temporarily disable test that fails on the bots for unknown reasons.
+
+2006-09-27 00:13:29 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.*: Moved AudioCodecType into priv
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  Moved AudioCodecType into priv
+	  Renamed all gst_basertpaudiopayload to gst_base_rtp_audio_payload prefixes
+
+2006-09-25 15:47:25 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Cleanups and small leak fixes.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
+	  (add_fakesink), (remove_fakesink), (pad_probe), (close_pad_link),
+	  (is_demuxer_element), (try_to_link_1), (get_our_ghost_pad),
+	  (new_pad):
+	  Cleanups and small leak fixes.
+	  Added Depayloaders to valid list of autopluggable elements.
+
+2006-09-25 13:24:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin.c: Detect NO_PREROLL state change returns and disable clock distribution to the sinks so that...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+	  (gst_play_bin_vis_blocked), (gst_play_bin_set_property),
+	  (gen_video_element), (gen_text_element), (gen_audio_element),
+	  (gen_vis_element), (remove_sinks), (add_sink), (setup_sinks),
+	  (gst_play_bin_set_clock_func), (gst_play_bin_change_state):
+	  Detect NO_PREROLL state change returns and disable clock distribution to
+	  the sinks so that sync is disabled.
+	  Avoid some type checking and do simple casts instead.
+	  Small cleanups, fix some FIXMEs.
+	  Be more robust when linking user specified elements, catch an report
+	  errors. Fixes #357404.
+	  Fix some leaks in the error paths.
+
+2006-09-25 12:55:04 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	* ChangeLog:
+	  ChangeLog surgery for missing bug-number
+	  Original commit message from CVS:
+	  ChangeLog surgery for missing bug-number
+
+2006-09-25 11:28:15 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst/playback/test.c: Fix compilation with uClibc and -Werror (#357591).
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst/playback/test.c:
+	  Fix compilation with uClibc and -Werror (#357591).
+
+2006-09-25 10:21:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Parse dates that are followed by a time as well (#357532).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  Parse dates that are followed by a time as well (#357532).
+	  * tests/check/libs/tag.c: (test_vorbis_tags):
+	  Add unit test for this.
+
+2006-09-23 15:24:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: A few array const-ifications.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (make_lossless_changes),
+	  (gst_audio_convert_transform_caps):
+	  * gst/videotestsrc/videotestsrc.c: (gst_video_test_src_unicolor):
+	  * gst/videotestsrc/videotestsrc.h:
+	  A few array const-ifications.
+
+2006-09-23 15:02:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: See if this makes the build bots happy.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  See if this makes the build bots happy.
+	  * tests/check/libs/cddabasesrc.c:
+	  UTF8-ise my name.
+
+2006-09-23 14:30:53 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: More case-insensitivity for certain tags; recognise entities with decimal codes as special ...
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian dot net>
+	  * gst/subparse/samiparse.c: (handle_start_font),
+	  (fix_invalid_entities):
+	  More case-insensitivity for certain tags; recognise entities with
+	  decimal codes as special entities as well (#357330).
+
+2006-09-23 13:32:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/Makefile.am: Need to build tag directory before cdda.
+	  Original commit message from CVS:
+	  * gst-libs/gst/Makefile.am:
+	  Need to build tag directory before cdda.
+
+2006-09-23 13:21:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Move GST_TAG_CDDA_* tags into libgsttag and make libgstcddabasesrc depend on libgsttag. This is required so we can ex...
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/cdda/Makefile.am:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_base_init):
+	  * gst-libs/gst/cdda/gstcddabasesrc.h:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_register_tags_internal),
+	  (gst_tag_register_musicbrainz_tags):
+	  Move GST_TAG_CDDA_* tags into libgsttag and make libgstcddabasesrc
+	  depend on libgsttag. This is required so we can extract/read tags like
+	  DISCID without depending on libgstcddabasesrc (which used to register
+	  them).
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Add vorbiscomment mapping for CDDB_DISCID and MUSICBRAINZ_DISCID
+	  tags (also see #347848).
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_metadata_set1):
+	  Log vorbis comments we are actually writing. Const-ify array.
+
+2006-09-23 08:53:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Improve buffering a bit by avoiding a deadlock because we cannot assume the underrun i...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gen_preroll_element):
+	  Improve buffering a bit by avoiding a deadlock because we cannot assume
+	  the underrun is always called.
+
+2006-09-23 08:51:14 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst-libs/gst/riff/: Added MPEG-4 AAC and id and caps. Fixes #357289
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian dot net>
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Added MPEG-4 AAC and id and caps. Fixes #357289
+	  Added WMA9 Lossless id.
+
+2006-09-22 14:50:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Fix misleading docs addition.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Fix misleading docs addition.
+	  * tests/check/elements/videotestsrc.c: (check_rgb_buf):
+	  Get rid of compiler warning the right way.
+
+2006-09-22 14:13:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Small cleanups.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_finalize),
+	  (gst_base_rtp_depayload_setcaps), (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_push_full),
+	  (gst_base_rtp_depayload_push_ts), (gst_base_rtp_depayload_push),
+	  (gst_base_rtp_depayload_process),
+	  (gst_base_rtp_depayload_set_gst_timestamp),
+	  (gst_base_rtp_depayload_queue_release):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Small cleanups.
+	  Fix some leaks.
+	  Refactored the process method and added methods to push from the process
+	  vmethod.
+	  Use _scale functions.
+	  API: gst_base_rtp_depayload_push_ts
+	  API: gst_base_rtp_depayload_push
+	  * gst-libs/gst/rtp/gstbasertppayload.c: (gst_basertppayload_push):
+	  timestamps are uint.
+
+2006-09-22 11:59:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/interfaces/xoverlay.c: Remove unused statement from doc example.
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  Remove unused statement from doc example.
+
+2006-09-22 09:52:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/videorate/gstvideorate.c:
+	  update docs
+	  Original commit message from CVS:
+	  update docs
+
+2006-09-21 13:49:47 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/interfaces/videoorientation.c: Add since tags to new API docs, ChangeLog surgery (forgot API keyword in ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/videoorientation.c:
+	  (gst_video_orientation_iface_init),
+	  (gst_video_orientation_get_hflip),
+	  (gst_video_orientation_get_vflip),
+	  (gst_video_orientation_get_hcenter),
+	  (gst_video_orientation_get_vcenter),
+	  (gst_video_orientation_set_hflip),
+	  (gst_video_orientation_set_vflip),
+	  (gst_video_orientation_set_hcenter),
+	  (gst_video_orientation_set_vcenter):
+	  Add since tags to new API docs, ChangeLog surgery (forgot API keyword
+	  in ChangeLog)
+
+2006-09-21 09:27:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: but disable for now since it doesn't pass (something wrong with
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/ffmpegcolorspace.c: (rgb_format_to_caps),
+	  (create_rgb_conversions), (rgb_conversion_free),
+	  (right_shift_colour), (fix_expected_colour), (check_rgb_buf),
+	  (got_buf_cb), (GST_START_TEST), (ffmpegcolorspace_suite):
+	  Add unit test for ffmpegcolorspace (RGB <=> RGB only so far),
+	  but disable for now since it doesn't pass (something wrong with
+	  RGBA somewhere).
+
+2006-09-21 07:01:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Refactor handling of overrun detection.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (group_commit),
+	  (queue_deadlock_check), (queue_overrun), (queue_threshold_reached),
+	  (queue_out_of_data), (gen_preroll_element),
+	  (preroll_remove_overrun), (probe_triggered):
+	  Refactor handling of overrun detection.
+	  Separate handling of group completion and deadlock detection when doing
+	  network buffering. This should fix some deadlocks that were not detected
+	  because the group was completed.
+	  Add more comments, improve debugging.
+
+2006-09-21 05:31:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/: Some more compilation fixes.
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+	  * tests/check/libs/audio.c:
+	  Some more compilation fixes.
+
+2006-09-21 05:12:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Early morning compilation fix.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_samples_done), (gst_ring_buffer_commit),
+	  (gst_ring_buffer_read):
+	  Early morning compilation fix.
+
+2006-09-20 18:09:43 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	  bump nano
+	  Original commit message from CVS:
+	  bump nano
+
+2006-09-20 17:04:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/: Fix some warnings.
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+	  * tests/check/elements/multifdsink.c: (GST_START_TEST):
+	  * tests/check/elements/videorate.c: (GST_START_TEST):
+	  * tests/check/libs/cddabasesrc.c: (GST_START_TEST):
+	  * tests/check/pipelines/oggmux.c: (eos_buffer_probe):
+	  Fix some warnings.
+
+2006-09-20 10:59:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: change colorkey behaviour back according to #354773 comment 6/7
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+	  (gst_xvimagesink_get_times):
+	  change colorkey behaviour back according to #354773 comment 6/7
+
+2006-09-20 10:42:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery: remove junk
+	  Original commit message from CVS:
+	  ChangeLog surgery: remove junk
+
+2006-09-19 11:31:06 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.*: Implement stubbed out properties unit-type, units-soft-max, units-max, to allow specifying ...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
+	  (gst_multi_fd_sink_class_init), (get_buffers_max), (find_limits),
+	  (gst_multi_fd_sink_recover_client),
+	  (gst_multi_fd_sink_queue_buffer), (gst_multi_fd_sink_set_property),
+	  (gst_multi_fd_sink_get_property):
+	  * gst/tcp/gstmultifdsink.h:
+	  Implement stubbed out properties unit-type, units-soft-max,
+	  units-max, to allow specifying maximum sizes in units other than
+	  buffers.
+	  Fixes #355935
+
+2006-09-19 10:23:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-media.c: Reorder the audio formats a bit for clarity.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Reorder the audio formats a bit for clarity.
+	  Detect and create caps for MSGSM and MSN (WAV49).
+	  Fixes #356596.
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimagesink_check_xshm_calls), (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_get_xv_support), (gst_xvimagesink_show_frame):
+	  Small cleanups, move error handling out of normal flow for clarity.
+
+2006-09-18 15:59:39 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add new interface to control video orientation (fixes #354908)
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  * gst-libs/gst/interfaces/Makefile.am:
+	  * gst-libs/gst/interfaces/videoorientation.c:
+	  (gst_video_orientation_get_type),
+	  (gst_video_orientation_iface_init),
+	  (gst_video_orientation_get_hflip),
+	  (gst_video_orientation_get_vflip),
+	  (gst_video_orientation_get_hcenter),
+	  (gst_video_orientation_get_vcenter),
+	  (gst_video_orientation_set_hflip),
+	  (gst_video_orientation_set_vflip),
+	  (gst_video_orientation_set_hcenter),
+	  (gst_video_orientation_set_vcenter):
+	  * gst-libs/gst/interfaces/videoorientation.h:
+	  Add new interface to control video orientation (fixes #354908)
+
+2006-09-18 15:48:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/videotestsrc/gstvideotestsrc.c: Use G_UNLIKELY in _create and log one more detail.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  Use G_UNLIKELY in _create and log one more detail.
+	  (gst_video_test_src_get_times), (gst_video_test_src_create):
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_get_times):
+	  Use gst_util_uint64_scale_int in _get_times().
+
+2006-09-18 15:00:51 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support)
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support)
+	  Give better warning message (add object and detail).
+
+2006-09-18 14:42:03 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  sys/xvimage/xvimagesink.c: xvimage assumed that XV_COLORKEY can be set in RGB888 format (fixes #354773), use gst_util...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+	  (gst_xvimagesink_get_times):
+	  xvimage assumed that XV_COLORKEY can be set in RGB888 format (fixes
+	  #354773), use gst_util_uint64_scale_int in _get_times()
+
+2006-09-18 14:21:45 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggmux.c: Timestamps are unsigned; comparision against GST_CLOCK_TIME_NONE was always true, leading to dro...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_push_buffer):
+	  Timestamps are unsigned; comparision against GST_CLOCK_TIME_NONE was
+	  always true, leading to dropping all timestamps.
+
+2006-09-18 11:40:14 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/libvisual/visual.c: update to work also with libvisual 0.4 API
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_vis_src_negotiate),
+	  (gst_visual_chain), (gst_visual_change_state):
+	  update to work also with libvisual 0.4 API
+	  * tools/gst-launch-ext.1.in:
+	  * tools/gst-visualise.1.in:
+	  remove references to old man-pages
+	  * tests/examples/seek/seek.c: (main):
+	  add real meadi-buttons, add tool-tips for the seek-options, arrange
+	  seek options in a table
+
+2006-09-18 10:57:28 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggmux.c: Don't generate out-of-order timestamps from oggmux, instead clamp output timestamps to be >= the...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_clear),
+	  (gst_ogg_mux_push_buffer):
+	  Don't generate out-of-order timestamps from oggmux, instead clamp
+	  output timestamps to be >= the previously output ts.
+	  Fixes #355595
+
+2006-09-18 10:18:22 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.c: Updates, fixes, and typo corrections for multifdsink. No functional changes.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
+	  (gst_multi_fd_sink_class_init):
+	  Updates, fixes, and typo corrections for multifdsink. No functional
+	  changes.
+
+2006-09-17 21:58:06 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Don't crash on truncated files - check that we got an 8 byte buffer before tryin...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (ogganx_type_find):
+	  Don't crash on truncated files - check that we got an 8 byte buffer
+	  before trying to memcmp it.
+
+2006-09-17 20:32:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Make stream-switching appear instant to the application (ie. make sure that a g_object...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (get_active_source):
+	  Make stream-switching appear instant to the application
+	  (ie. make sure that a g_object_get on 'current-foo' returns
+	  the stream previously set with g_object_set(). Totem needs
+	  this to update stream-related meta-info (like audio-codec)
+	  correctly when switching streams.
+
+2006-09-17 20:14:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsamixer.c: Try harder to guess which mixer track is the master mixer track (instead of just taking the ...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_find_master_mixer),
+	  (gst_alsa_mixer_ensure_track_list):
+	  Try harder to guess which mixer track is the master mixer
+	  track (instead of just taking the first one that has a pvolume).
+	  Fixes #342228.
+
+2006-09-17 11:24:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Get structure-name just once.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (set_structure_widths),
+	  (gst_audio_convert_transform_caps):
+	  Get structure-name just once.
+
+2006-09-16 22:30:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/: Fix big batch of compiler warnings.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioresample.c: (GST_START_TEST):
+	  * tests/check/elements/videotestsrc.c: (check_rgb_buf):
+	  * tests/check/elements/volume.c: (GST_START_TEST):
+	  * tests/check/elements/vorbisdec.c: (GST_START_TEST):
+	  * tests/check/pipelines/oggmux.c: (validate_ogg_page), (eos_watch),
+	  (test_pipeline), (GST_START_TEST):
+	  * tests/check/pipelines/theoraenc.c: (GST_START_TEST):
+	  * tests/check/pipelines/vorbisenc.c: (GST_START_TEST):
+	  Fix big batch of compiler warnings.
+
+2006-09-16 21:54:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Add docs about icydemux usage in connection with gnomevfssrc
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Add docs about icydemux usage in connection with gnomevfssrc
+	  * ext/libvisual/visual.c:
+	  * ext/ogg/gstoggaviparse.c:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggparse.c:
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  * gst-libs/gst/audio/gstaudiosink.c:
+	  * gst-libs/gst/audio/gstaudiosrc.c:
+	  * gst/audiorate/gstaudiorate.c:
+	  More G_OBJECT macro fixing.
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Fix wrong info in header due to copy & paste
+
+2006-09-15 14:53:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/: Do the delay calculation in the source/sink base classes as this is specific for the capture/pla...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_get_time), (gst_base_audio_sink_callback):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_get_time), (gst_base_audio_src_fixate),
+	  (gst_base_audio_src_get_times), (gst_base_audio_src_get_offset),
+	  (gst_base_audio_src_create), (gst_base_audio_src_change_state):
+	  Do the delay calculation in the source/sink base classes as this is
+	  specific for the capture/playback mode.
+	  Try to fixate a bit better, like round depth up to a multiple of 8
+	  bigger than width.
+	  Handle underruns correctly by marking DISCONT on buffers and adjusting
+	  timestamps to handle the gap.
+	  Set offset/offset_end correctly on buffers.
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_pause),
+	  (gst_ring_buffer_samples_done), (gst_ring_buffer_commit),
+	  (gst_ring_buffer_read):
+	  Remove resync and underrun recovery from the ringbuffer.
+	  Fix ringbuffer read code on under/overrun.
+
+2006-09-15 11:17:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.*: Don't use a 0 low watermark when buffering, it is catching starvation way too late. In...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (gst_play_base_bin_init), (fill_buffer), (check_queue),
+	  (queue_threshold_reached), (gst_play_base_bin_set_property),
+	  (gst_play_base_bin_get_property):
+	  * gst/playback/gstplaybasebin.h:
+	  Don't use a 0 low watermark when buffering, it is catching starvation
+	  way too late. Instead, use a 3 second queue with 30 and 95
+	  percent low/high watermarks.
+	  Added queue-min-threshold property to configure low watermark.
+	  Use new _buffering message API.
+	  Make queue_threshold variable big enough to store a uint64 time value.
+	  API: playbin::queue-min-threshold property.
+
+2006-09-15 09:13:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  configure.ac: We require 0.10.10.1 now because of _wait_preroll().
+	  Original commit message from CVS:
+	  * configure.ac:
+	  We require 0.10.10.1 now because of _wait_preroll().
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  Use gst_base_sink_wait_preroll().
+
+2006-09-15 09:09:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/: Use DEBUG_OBJECT more.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (xrun_recovery), (gst_alsasink_write):
+	  * ext/alsa/gstalsasrc.c: (xrun_recovery), (gst_alsasrc_read):
+	  Use DEBUG_OBJECT more.
+
+=== release 0.10.10 ===
+
+2006-09-14 20:09:19 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* common:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gdp.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* ext/theora/theoraparse.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst/playback/gstplaybin.c:
+	* tests/check/Makefile.am:
+	* win32/common/config.h:
+	  releasing 0.10.10
+	  Original commit message from CVS:
+	  releasing 0.10.10
+
+2006-09-09 16:08:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	* win32/common/config.h:
+	  second prerelease
+	  Original commit message from CVS:
+	  second prerelease
+
+2006-09-07 19:01:23 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	  update bug in changelog
+	  Original commit message from CVS:
+	  update bug in changelog
+
+2006-09-07 19:00:33 +0000  Michael Smith <msmith@fluendo.com>
+
+	  Fix implementation of sync-method 'next-keyframe'
+	  Original commit message from CVS:
+	  patch by: Michael Smith <msmith at fluendo dot com>
+	  * gst/tcp/gstmultifdsink.c: (is_sync_frame),
+	  (gst_multi_fd_sink_client_queue_buffer),
+	  (gst_multi_fd_sink_new_client):
+	  * tests/check/elements/multifdsink.c: (GST_START_TEST),
+	  (multifdsink_suite):
+	  Fix implementation of sync-method 'next-keyframe'
+
+2006-09-07 15:00:08 +0000  Wim Taymans <wim@fluendo.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: This patch removes the RANDOM flag that was incorrectly introduced with revision 1.91....
+	  Original commit message from CVS:
+	  patch by: Wim Taymans <wim at fluendo dot com>
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_start):
+	  This patch removes the RANDOM flag that was incorrectly introduced with
+	  revision 1.91.  Fixes #354590
+
+2006-09-07 14:56:47 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	* win32/common/config.h:
+	  first prerelease
+	  Original commit message from CVS:
+	  first prerelease
+
+2006-09-07 14:56:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  update po files
+	  Original commit message from CVS:
+	  update po files
+
+2006-09-05 09:12:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Random variation in Makefile line to see if it makes the gen64-base-full bot any happier.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Random variation in Makefile line to see if it makes the
+	  gen64-base-full bot any happier.
+
+2006-09-04 19:04:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/pipelines/oggmux.c: Disable test that fails at the moment (killed after timeout).
+	  Original commit message from CVS:
+	  * tests/check/pipelines/oggmux.c: (oggmux_suite):
+	  Disable test that fails at the moment (killed after timeout).
+
+2006-09-04 18:19:06 +0000  James Livingston <doclivingston@gmail.com>
+
+	  tests/check/: Add simple unit test for oggmux from #337026 with checking for the
+	  Original commit message from CVS:
+	  Patch by: James Livingston  <doclivingston at gmail.com>
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/.cvsignore:
+	  * tests/check/pipelines/oggmux.c: (get_page_codec),
+	  (check_chain_final_state), (fail_if_audio), (validate_ogg_page),
+	  (eos_buffer_probe), (start_pipeline), (stop_pipeline), (eos_watch),
+	  (test_pipeline), (test_vorbis), (test_theora), (test_vorbis_theora),
+	  (test_theora_vorbis), (oggmux_suite):
+	  Add simple unit test for oggmux from #337026 with checking for the
+	  EOS flags disabled for the time being.
+
+2006-09-04 09:13:01 +0000  Alessandro Dessina <alessandro@nnva.org>
+
+	  ext/ogg/gstoggmux.c: Add cmml caps to oggmux. Fixes #353912
+	  Original commit message from CVS:
+	  patch by: Alessandro Dessina <alessandro nnva org>
+	  * ext/ogg/gstoggmux.c:
+	  Add cmml caps to oggmux. Fixes #353912
+
+2006-09-02 13:20:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/videotestsrc.c: Returning a return value often helps. In this case, we don't need the return val...
+	  Original commit message from CVS:
+	  * tests/check/elements/videotestsrc.c: (check_rgb_buf):
+	  Returning a return value often helps. In this case, we
+	  don't need the return value anyway, so just get rid of it.
+	  Should make build bots much happier.
+
+2006-09-02 12:59:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/videotestsrc.*: Add support for AYUV and the various RGBA formats. Initialise fields of paintinfo st...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c: (paintinfo_find_by_structure),
+	  (paint_get_structure), (gst_video_test_src_get_size),
+	  (gst_video_test_src_smpte), (gst_video_test_src_snow),
+	  (gst_video_test_src_unicolor), (paint_setup_AYUV),
+	  (paint_hline_AYUV), (paint_setup_ARGB8888), (paint_setup_ABGR8888),
+	  (paint_setup_RGBA8888), (paint_setup_BGRA8888), (paint_hline_str4):
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add support for AYUV and the various RGBA formats. Initialise
+	  fields of paintinfo structs allocated on the stack.
+	  * tests/check/elements/videotestsrc.c: (right_shift_colour),
+	  (fix_expected_colour), (check_rgb_buf), (got_buf_cb),
+	  (GST_START_TEST), (videotestsrc_suite):
+	  Add unit tests for videotestsrc's RGB output.
+
+2006-09-01 16:12:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/: Add more uni-colour patterns ("white", "red", "green", and "blue").
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_pattern_get_type),
+	  (gst_video_test_src_set_pattern):
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/videotestsrc/videotestsrc.c: (gst_video_test_src_unicolor),
+	  (gst_video_test_src_black), (gst_video_test_src_white),
+	  (gst_video_test_src_red), (gst_video_test_src_green),
+	  (gst_video_test_src_blue):
+	  * gst/videotestsrc/videotestsrc.h:
+	  Add more uni-colour patterns ("white", "red", "green", and "blue").
+
+2006-09-01 10:07:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/videotestsrc.c: Fix stride for YVYU, should be word-aligned (#353658).
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.c: (paint_setup_YVYU):
+	  Fix stride for YVYU, should be word-aligned (#353658).
+
+2006-08-31 14:37:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/adder/gstadder.c: Fix build.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_src_event):
+	  Fix build.
+
+2006-08-31 12:39:17 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/adder/gstadder.*: Remember the start position asked in the incoming seeks, so we can output GST_EVENT_NEW_SEGMENT...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (forward_event_func),
+	  (gst_adder_src_event), (gst_adder_collected),
+	  (gst_adder_change_state):
+	  * gst/adder/gstadder.h:
+	  Remember the start position asked in the incoming seeks, so we can
+	  output GST_EVENT_NEW_SEGMENT with a correct position value (instead
+	  of assuming it will always be 0).
+
+2006-08-31 12:31:00 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/ogg/gstoggdemux.c: Send the GST_EVENT_NEW_SEGMENT from the streaming thread.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
+	  (gst_ogg_demux_finalize), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_loop):
+	  Send the GST_EVENT_NEW_SEGMENT from the streaming thread.
+
+2006-08-30 17:22:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/ffmpegcolorspace/gstffmpegcolorspace.c: Return FALSE instead of returning a random false unit size when the forma...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_get_unit_size):
+	  Return FALSE instead of returning a random false unit
+	  size when the format isn't known/supported (even if
+	  this shouldn't happen under normal circumstances).
+
+2006-08-29 15:23:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Try harder to get the size from a uri by using _info_uri() when _info_from_handle() do...
+	  Original commit message from CVS:
+	  Patch by: Tim-Philipp Müller  <tim at centricular dot net>
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create),
+	  (gst_gnome_vfs_src_start):
+	  Try harder to get the size from a uri by using _info_uri() when
+	  _info_from_handle() does not give us enough info.
+	  Also follow symlinks when getting the size.
+	  Partially Fixes #332864.
+
+2006-08-29 11:50:51 +0000  Viktor Peters <viktor.peters@gmail.com>
+
+	  ext/alsa/: Improve and fix mixer track handling, in particular better handling of alsa's pvolume/pswitch/cvolume/cswi...
+	  Original commit message from CVS:
+	  Patch by: Viktor Peters  <viktor dot peters at gmail dot com>
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_ensure_track_list),
+	  (gst_alsa_mixer_update), (gst_alsa_mixer_get_volume),
+	  (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
+	  (gst_alsa_mixer_set_record):
+	  * ext/alsa/gstalsamixertrack.c:
+	  (gst_alsa_mixer_track_update_alsa_capabilities),
+	  (alsa_track_has_cap), (gst_alsa_mixer_track_new),
+	  (gst_alsa_mixer_track_update):
+	  * ext/alsa/gstalsamixertrack.h:
+	  Improve and fix mixer track handling, in particular better handling
+	  of alsa's pvolume/pswitch/cvolume/cswitch capabilities; create separate
+	  track objects for tracks that have both capture and playback volume
+	  (and label them differently as well so they're not mistakenly
+	  assumed to be duplicates); classify mixer tracks that only affect
+	  the audible volume of something (rather than the capture volume)
+	  as playback tracks. Redefine/fix meaning of RECORD and MUTE flags
+	  for capture tracks to correspond to alsa-pswitch alsa-cswitch
+	  (following the meaning documented in the mixer interface header
+	  file); add support for alsa's exclusive cswitch groups; update/sync
+	  state/flags better if mixer settings are changed by another
+	  application. Fixes #336075.
+
+2006-08-29 10:58:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Improve docs: add section about BUFFERING messages sent by playbin.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c:
+	  Improve docs: add section about BUFFERING messages sent by playbin.
+
+2006-08-29 10:51:12 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.c: Ignore explicit DISCONT marked on buffers (which is often spurious, particularly when using m...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_push_buffer),
+	  (gst_vorbis_enc_buffer_check_discontinuous),
+	  (gst_vorbis_enc_chain):
+	  Ignore explicit DISCONT marked on buffers (which is often spurious,
+	  particularly when using multiple segments), in favour of solely
+	  using the timestamps/durations.
+
+2006-08-29 10:32:34 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/audiorate/gstaudiorate.c: Don't rely on incoming buffers offset anymore, since it is completely broken when using...
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
+	  Don't rely on incoming buffers offset anymore, since it is completely
+	  broken when using multiple segments.
+	  Instead convert the incoming buffers timestamp to running time, and
+	  then convert that value to the offsets.
+	  Also inform GstSegment of the last outputted stop position, which is
+	  needed if we received several segments with an unknown stop value.
+
+2006-08-29 08:03:05 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/vorbis/vorbisenc.c: fix buffer unreffing on a header push failure
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_chain):
+	  fix buffer unreffing on a header push failure
+
+2006-08-28 16:17:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiorate/gstaudiorate.c: Make the metadata of the buffer writable before changing its flags.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_sink_event),
+	  (gst_audio_rate_chain):
+	  Make the metadata of the buffer writable before changing its
+	  flags.
+
+2006-08-28 16:09:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	* ChangeLog:
+	  Fix changelog with bugzilla bug it fixed.
+	  Original commit message from CVS:
+	  Fix changelog with bugzilla bug it fixed.
+
+2006-08-28 16:08:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audiorate/gstaudiorate.c: Fix audiorate some more.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_reset),
+	  (gst_audio_rate_setcaps), (gst_audio_rate_init),
+	  (gst_audio_rate_sink_event), (gst_audio_rate_src_event),
+	  (gst_audio_rate_chain), (gst_audio_rate_change_state):
+	  Fix audiorate some more.
+	  Reset and resync counters on flush and READY.
+	  Handle the DISCONT flag correctly.
+	  Use GstSegment to track position.
+	  Fail when not negotiated.
+
+2006-08-25 16:48:28 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.c: Fix spelling.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render):
+	  Fix spelling.
+	  Remove accidently included debug line.
+
+2006-08-25 16:39:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.c: Small cleanups.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render):
+	  Small cleanups.
+	  If a buffer is received with no caps, make the buffer metadata
+	  writable and set the caps, making sure that we don't screw up the
+	  refcounts.
+
+2006-08-25 16:19:55 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/gdp/gstgdppay.c: Fix memory leaks and misleading debug messages, add a couple of comments.
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset),
+	  (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain):
+	  Fix memory leaks and misleading debug messages, add a couple of
+	  comments.
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_get_stats),
+	  (gst_multi_fd_sink_render):
+	  Do not use gst_buffer_make_writable() in a basesink render method,
+	  as it may incorrectly unref the buffer. Instead, use convoluted
+	  dance to avoid copying the buffer except when we need to.
+
+2006-08-25 09:54:56 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.c: Allow very small discontinuities in the timestamps. These we can't do anything useful with an...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c:
+	  (gst_vorbis_enc_buffer_check_discontinuous):
+	  Allow very small discontinuities in the timestamps. These we can't
+	  do anything useful with anyway (because vorbis's timestamps have
+	  only sample granularity), and are commonly produced by elements with
+	  minor bugs. Allow up to 1/2 a sample out.
+	  Fixes #351742.
+
+2006-08-24 11:18:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add a checkbox to enable play scrubbing. Makes it possible to disable normal scrubbing.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (seek_cb), (start_seek), (stop_seek),
+	  (play_scrub_toggle_cb), (main):
+	  Add a checkbox to enable play scrubbing. Makes it possible to disable
+	  normal scrubbing.
+
+2006-08-23 19:37:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/.cvsignore: make buildbot happy
+	  Original commit message from CVS:
+	  * tests/check/elements/.cvsignore:
+	  make buildbot happy
+
+2006-08-23 16:43:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstogmparse.c: Refactor ogm parse, do better input checking, misc. clean-ups.
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_base_init),
+	  (gst_ogm_video_parse_base_init), (gst_ogm_text_parse_base_init),
+	  (gst_ogm_parse_class_init), (gst_ogm_parse_dispose),
+	  (gst_ogm_parse_init), (gst_ogm_audio_parse_init),
+	  (gst_ogm_video_parse_init), (gst_ogm_text_parse_init),
+	  (gst_ogm_parse_stream_header), (gst_ogm_parse_comment_packet),
+	  (gst_ogm_text_parse_strip_trailing_zeroes),
+	  (gst_ogm_parse_data_packet), (gst_ogm_parse_chain),
+	  (gst_ogm_parse_sink_event), (gst_ogm_parse_change_state):
+	  Refactor ogm parse, do better input checking, misc. clean-ups.
+	  Cache incoming events and push them once the source pad has
+	  been created. Don't pass unterminated strings to sscanf().
+	  Strip trailing zeroes from subtitle text output, since they
+	  are not valid UTF-8. Don't push vorbiscomment packets on
+	  the subtitle text pad. Output perfect streams if possible.
+
+2006-08-23 15:27:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/libs/cddabasesrc.c: Waits for tasks to settle down so that we clean up correctly for valgrind.
+	  Original commit message from CVS:
+	  * tests/check/libs/cddabasesrc.c: (GST_START_TEST):
+	  Waits for tasks to settle down so that we clean up correctly for
+	  valgrind.
+
+2006-08-23 15:11:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/libs/tag.c: Unit test fixes: \377 is more likely to fit into 8 bits than \777; actually return return val...
+	  Original commit message from CVS:
+	  * tests/check/libs/tag.c: (GST_START_TEST), (taglists_are_equal):
+	  Unit test fixes: \377 is more likely to fit into 8 bits than \777;
+	  actually return return value in taglists_are_equal.
+
+2006-08-23 12:14:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstogmparse.c: Fix crash due to broken bitstream parsing on x86-64: can't make any assumptions about sizeof(s...
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
+	  Fix crash due to broken bitstream parsing on x86-64: can't make
+	  any assumptions about sizeof(struct) due to alignment/packing
+	  differences on different architectures. Fixes #351790.
+
+2006-08-22 16:31:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/riff/riff-read.c: Protect public functions against bad input.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk),
+	  (gst_riff_parse_chunk), (gst_riff_parse_file_header),
+	  (gst_riff_parse_strh), (gst_riff_parse_strf_vids),
+	  (gst_riff_parse_strf_auds), (gst_riff_parse_strf_iavs),
+	  (gst_riff_parse_info):
+	  Protect public functions against bad input.
+	  Do some cleanups.
+	  Fix documentation.
+
+2006-08-22 15:50:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/: Add voxware audio IDs (even if we can't play it) (#351795).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Add voxware audio IDs (even if we can't play it) (#351795).
+
+2006-08-22 15:11:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Const-ify some arrays and use G_N_ELEMENTS instead of wasting oodles of RAM on termin...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c:
+	  (gst_riff_create_video_template_caps),
+	  (gst_riff_create_audio_template_caps),
+	  (gst_riff_create_iavs_template_caps):
+	  Const-ify some arrays and use G_N_ELEMENTS instead
+	  of wasting oodles of RAM on terminator bits.
+
+2006-08-22 08:27:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  And the same for _to_vorbiscomment_buffer(): allow id_data_len == 0 for speex.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  (gst_tag_list_to_vorbiscomment_buffer):
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  And the same for _to_vorbiscomment_buffer(): allow
+	  id_data_len == 0 for speex.
+
+2006-08-21 19:04:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/README:
+	  adding a README
+	  Original commit message from CVS:
+	  adding a README
+
+2006-08-21 19:01:41 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  Move GDP plugin to -base from -bad.  Closes #347783.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/inspect/plugin-gdp.xml:
+	  * gst/gdp/Makefile.am:
+	  * tests/check/Makefile.am:
+	  Move GDP plugin to -base from -bad.  Closes #347783.
+
+2006-08-21 18:34:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Allow id_data_len == 0 (needed for vorbis comments in Speex files).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  (gst_tag_list_from_vorbiscomment_buffer):
+	  Allow id_data_len == 0 (needed for vorbis comments in Speex files).
+	  Also add some checks to make sure we don't memcmp() beyond the end of
+	  vorbiscomment buffer if the ID to check for is larger than the buffer.
+	  * tests/check/libs/tag.c: (GST_START_TEST):
+	  Some more tests for gst_tag_list_from_vorbiscomment_buffer().
+
+2006-08-21 16:39:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/vorbis/vorbisenc.c: Use vorbis comment utility functions from libgsttag instead of re-inventing the wheel (partia...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_metadata_set1),
+	  (gst_vorbis_enc_set_metadata):
+	  Use vorbis comment utility functions from libgsttag
+	  instead of re-inventing the wheel (partially fixes #347091).
+
+2006-08-21 11:42:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/elements/audioconvert.c: Fix leaks. Wait for state transitions that might happen ASYNC, as well as some t...
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST):
+	  Fix leaks. Wait for state transitions that might happen ASYNC, as well
+	  as some that won't.
+
+2006-08-21 10:32:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/libs/: Don't try to GObject scan the netbuffer as it's not a GObject.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  Don't try to GObject scan the netbuffer as it's not a GObject.
+	  Fixes #351308.
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  * gst-libs/gst/netbuffer/gstnetbuffer.h:
+	  Document GstNetBuffer.
+
+2006-08-21 08:54:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/audioconvert.c: Add testcase for caps-size-explosion
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (GST_START_TEST),
+	  (audioconvert_suite):
+	  Add testcase for caps-size-explosion
+
+2006-08-20 13:05:44 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Lower debug, use g_assert in _get_unit_size
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  (gst_audio_convert_get_unit_size), (set_structure_widths):
+	  Lower debug, use g_assert in _get_unit_size
+	  * gst/audioresample/gstaudioresample.c:
+	  (audioresample_get_unit_size):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_get_unit_size):
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_get_unit_size):
+	  use g_assert in _get_unit_size
+
+2006-08-18 21:21:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery: fix bug number
+	  Original commit message from CVS:
+	  ChangeLog surgery: fix bug number
+
+2006-08-18 16:43:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Document GstRTPBuffer.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_set_packet_len),
+	  (gst_rtp_buffer_pad_to), (gst_rtp_buffer_get_payload_subbuffer),
+	  (gst_rtp_buffer_get_payload_buffer):
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Document GstRTPBuffer.
+	  Added function to efficiently strip payload headers.
+	  API: gst_rtp_buffer_get_payload_subbuffer()
+
+2006-08-17 16:52:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Serialise unknown vorbis comments into GST_TAG_EXTENDED_COMMENT tags and deserialise...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add),
+	  (gst_tag_to_vorbis_comments):
+	  Serialise unknown vorbis comments into GST_TAG_EXTENDED_COMMENT
+	  tags and deserialise them properly as well (#351768).
+	  Add some more gtk-doc blurbs and also some g_return_if_fail().
+	  * tests/check/libs/tag.c: (GST_START_TEST),
+	  (back_to_vorbis_comments), (taglists_are_equal), (tag_suite):
+	  More tests.
+
+2006-08-17 15:43:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/: Added ogg-in-avi parser element. Fixes #140139.
+	  Original commit message from CVS:
+	  * ext/ogg/Makefile.am:
+	  * ext/ogg/gstogg.c: (plugin_init):
+	  * ext/ogg/gstoggaviparse.c: (gst_ogg_avi_parse_get_type),
+	  (gst_ogg_avi_parse_base_init), (gst_ogg_avi_parse_class_init),
+	  (gst_ogg_avi_parse_init), (gst_ogg_avi_parse_finalize),
+	  (gst_ogg_avi_parse_setcaps), (gst_ogg_avi_parse_event),
+	  (gst_ogg_avi_parse_push_packet), (gst_ogg_avi_parse_chain),
+	  (gst_ogg_avi_parse_change_state), (gst_ogg_avi_parse_plugin_init):
+	  Added ogg-in-avi parser element. Fixes #140139.
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page):
+	  Fixed a bug in oggdemux debug code.
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Recognise Ogg in the AVI extensible wave format.
+
+2006-08-17 10:00:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: Make buffer durations add up (duration should be next_ts-ts for perfect streams)....
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_create):
+	  Make buffer durations add up (duration should be next_ts-ts for
+	  perfect streams). Fixes CD ripping to Ogg/Vorbis with vorbisenc
+	  from CVS.
+	  * tests/check/libs/cddabasesrc.c: (gst_cd_foo_src_close),
+	  (test_buffer_timestamps), (cddabasesrc_suite):
+	  Add unit test for the above.
+	  * tests/check/Makefile.am:
+	  Don't know why cddabasesrc test was in VALGRIND_TO_FIX, remove
+	  to see what happens.
+
+2006-08-16 11:38:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/: Avoid setting and using a NULL device name.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_set_property),
+	  (gst_alsasink_open):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_set_property),
+	  (gst_alsasrc_open):
+	  Avoid setting and using a NULL device name.
+	  Print more info when we fail to open a device.
+
+2006-08-16 11:28:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add gst_tag_parse_extended_comment() (#351426).
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c: (gst_tag_parse_extended_comment):
+	  API: add gst_tag_parse_extended_comment() (#351426).
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/.cvsignore:
+	  * tests/check/libs/tag.c: (GST_START_TEST), (tag_suite), (main):
+	  Add unit test for gst_tag_parse_extended_comment().
+
+2006-08-15 19:20:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/: Fix leak (#351502).
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_get_property):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_property):
+	  Fix leak (#351502).
+
+2006-08-15 17:21:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Document playbin.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * gst/playback/gstplaybin.c:
+	  Document playbin.
+	  * docs/plugins/inspect/plugin-adder.xml:
+	  * docs/plugins/inspect/plugin-alsa.xml:
+	  * docs/plugins/inspect/plugin-audioconvert.xml:
+	  * docs/plugins/inspect/plugin-audiorate.xml:
+	  * docs/plugins/inspect/plugin-audioresample.xml:
+	  * docs/plugins/inspect/plugin-audiotestsrc.xml:
+	  * docs/plugins/inspect/plugin-cdparanoia.xml:
+	  * docs/plugins/inspect/plugin-decodebin.xml:
+	  * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	  * docs/plugins/inspect/plugin-gnomevfs.xml:
+	  * docs/plugins/inspect/plugin-ogg.xml:
+	  * docs/plugins/inspect/plugin-pango.xml:
+	  * docs/plugins/inspect/plugin-playbin.xml:
+	  * docs/plugins/inspect/plugin-subparse.xml:
+	  * docs/plugins/inspect/plugin-tcp.xml:
+	  * docs/plugins/inspect/plugin-theora.xml:
+	  * docs/plugins/inspect/plugin-typefindfunctions.xml:
+	  * docs/plugins/inspect/plugin-video4linux.xml:
+	  * docs/plugins/inspect/plugin-videorate.xml:
+	  * docs/plugins/inspect/plugin-videoscale.xml:
+	  * docs/plugins/inspect/plugin-videotestsrc.xml:
+	  * docs/plugins/inspect/plugin-volume.xml:
+	  * docs/plugins/inspect/plugin-vorbis.xml:
+	  * docs/plugins/inspect/plugin-ximagesink.xml:
+	  * docs/plugins/inspect/plugin-xvimagesink.xml:
+	  Update to CVS version.
+
+2006-08-14 17:54:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Add "connection-speed" property; re-order redirect messages with multiple redirect locatio...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+	  (gst_play_bin_set_property), (gst_play_bin_get_property),
+	  (value_list_append_structure_list),
+	  (gst_play_bin_handle_redirect_message),
+	  (gst_play_bin_handle_message):
+	  Add "connection-speed" property; re-order redirect messages with
+	  multiple redirect locations depending on the minimum bitrate if
+	  that information is available and a connection speed is set
+	  (#350399).
+
+2006-08-14 11:41:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Update max volume to the same value that the volume element uses.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c:
+	  Update max volume to the same value that the volume element uses.
+
+2006-08-14 10:50:15 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsamixer.c: Less uglyness..
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
+	  Less uglyness..
+
+2006-08-14 10:49:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Add some more debug info.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_submit_buffer),
+	  (gst_ogg_demux_get_next_page), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_read_chain), (gst_ogg_demux_loop):
+	  Add some more debug info.
+	  Don't crash when a seek failed.
+	  Actually return the result of the seek instead of TRUE.
+	  Ignore multiple BOS pages with the same serial so that we don't create
+	  the same stream multiple times.
+	  Post an error when we fail to do the initial seek.
+
+2006-08-13 14:34:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsa.c: Small code cleanup.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c: (gst_alsa_detect_rates),
+	  (gst_alsa_detect_channels), (gst_alsa_probe_supported_formats):
+	  Small code cleanup.
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
+	  (gst_alsa_mixer_new):
+	  Remove hack that always set the device to hw:0*.
+	  Properly find the card name for whatever device was configured.
+	  Do some better debugging.
+	  Fixes #350784.
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_set_property),
+	  (gst_alsa_mixer_element_change_state):
+	  Cleanups.
+	  Handle setting of a NULL device name better.
+
+2006-08-11 15:53:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.c: Don't clip float values. Fixes #350900.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c:
+	  Don't clip float values. Fixes #350900.
+
+2006-08-11 15:33:17 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/tcp/gsttcp.c: Really fix the build?
+	  Original commit message from CVS:
+	  2006-08-11  Andy Wingo  <wingo@pobox.com>
+	  * gst/tcp/gsttcp.c: Really fix the build?
+
+2006-08-11 15:29:56 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/tcp/gsttcp.h: For now, always disable deprecation here -- fixes the build.
+	  Original commit message from CVS:
+	  2006-08-11  Andy Wingo  <wingo@pobox.com>
+	  * gst/tcp/gsttcp.h: For now, always disable deprecation here --
+	  fixes the build.
+
+2006-08-10 13:01:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/gstaudioconvert.c: Float caps shouldn't have a "signed" field.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (make_lossless_changes):
+	  Float caps shouldn't have a "signed" field.
+
+2006-08-10 08:56:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggdemux.c: Implement SEEKING query in its most basic form, so that we can at least check if we're seekabl...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query):
+	  Implement SEEKING query in its most basic form, so that we can
+	  at least check if we're seekable or not (#350655).
+
+2006-08-09 14:42:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: The checks here are not even close to anything that would justify MAXIMUM probab...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+	  The checks here are not even close to anything that would
+	  justify MAXIMUM probability, lowering to POSSIBLE until someone
+	  fixes the checks (case at hand: quicktime redirection files
+	  might start with 00 00 01 XX and pass the checks here just
+	  fine, see #350399).
+
+2006-08-08 13:57:29 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/elements/gdpdepay.c: I forgot to include the file containing the #define :)
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+	  I forgot to include the file containing the #define :)
+	  Now includes "config.h"
+
+2006-08-08 13:45:44 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/elements/gdpdepay.c: Ignore test known to fail on PPC64. See #348114.
+	  Original commit message from CVS:
+	  * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+	  Ignore test known to fail on PPC64. See #348114.
+
+2006-08-08 08:41:13 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Better detection for multipart/x-mixed-replace: accept leading whitespaces befor...
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons  <sjoerd at luon net>
+	  * gst/typefind/gsttypefindfunctions.c: (multipart_type_find):
+	  Better detection for multipart/x-mixed-replace: accept leading
+	  whitespaces before the boundary marker as well (as our very own
+	  multipartmux used to produce) (#349068).
+
+2006-08-07 08:26:03 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst-libs/gst/riff/: Detect DTS audio streams (#350157).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+	  (gst_riff_create_audio_template_caps):
+	  Detect DTS audio streams (#350157).
+
+2006-08-05 17:08:05 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/gsttheoraparse.h: ext/theora/theoraparse.c (gst_theora_parse_class_init) (theora_parse_dispose, theora_par...
+	  Original commit message from CVS:
+	  2006-08-05  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/gsttheoraparse.h:
+	  * ext/theora/theoraparse.c (gst_theora_parse_class_init)
+	  (theora_parse_dispose, theora_parse_set_property)
+	  (theora_parse_get_property, theora_parse_munge_granulepos)
+	  (theora_parse_push_buffer, theora_parse_change_state): Add a
+	  property 'synchronization-points' to fix badly synchronized oggs.
+
+2006-08-04 13:20:23 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	  gst/gdp/gstgdpdepay.c: Fix event parsing by gdpdepay.  Fixes #349916.
+	  Original commit message from CVS:
+	  2006-08-04  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+	  Fix event parsing by gdpdepay.  Fixes #349916.
+
+2006-08-03 15:04:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add a few tests for the channel position stuff in libgstaudio.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/.cvsignore:
+	  * tests/check/libs/audio.c: (structure_contains_channel_positions),
+	  (fixed_caps_have_channel_positions), (GST_START_TEST),
+	  (audio_suite), (main):
+	  Add a few tests for the channel position stuff in libgstaudio.
+
+2006-08-03 14:16:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/: Add support for cards that (only) do more than 8 channels, like the Delta 44 (#345188).
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c: (caps_add_channel_configuration),
+	  (gst_alsa_detect_channels):
+	  * ext/alsa/gstalsasink.c:
+	  Add support for cards that (only) do more than 8 channels,
+	  like the Delta 44 (#345188).
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions):
+	  * gst-libs/gst/audio/multichannel.h:
+	  API: add GST_AUDIO_CHANNEL_POSITION_NONE, which stands for an
+	  unspecified channel position and cannot be combined with any
+	  of the other audio channel positions; adjust position layout
+	  checks accordingly (#345188).
+
+2006-08-03 11:15:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Recognise ancient RealAudio files (see #349779).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Recognise ancient RealAudio files (see #349779).
+
+2006-08-03 09:01:25 +0000  Jens Granseuer <jensgr@gmx.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinder for Interplay's MVE format (#348973).
+	  Original commit message from CVS:
+	  Patch by: Jens Granseuer  <jensgr at gmx net>
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Add typefinder for Interplay's MVE format (#348973).
+
+2006-08-02 17:03:29 +0000  Marcel Moreaux <marcelm@luon.net>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.*: Handle RTP sequence number rollover.
+	  Original commit message from CVS:
+	  Patch by: Marcel Moreaux <marcelm at luon dot net>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_add_to_queue):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  Handle RTP sequence number rollover.
+	  Disable jitterbuffer by default.
+
+2006-08-02 16:56:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/gdp/gstgdpdepay.c: Disable seeking.
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init),
+	  (gst_gdp_depay_finalize), (gst_gdp_depay_sink_event),
+	  (gst_gdp_depay_src_event), (gst_gdp_depay_chain),
+	  (gst_gdp_depay_change_state):
+	  Disable seeking.
+	  Small cleanups.
+	  Clear adapter on disconts.
+	  Clear caps when going to READY instead of NULL
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+	  (gst_gdp_pay_init), (gst_gdp_pay_finalize), (gst_gdp_pay_reset),
+	  (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer),
+	  (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader),
+	  (gst_gdp_queue_buffer), (gst_gdp_pay_chain),
+	  (gst_gdp_pay_sink_event), (gst_gdp_pay_src_event),
+	  (gst_gdp_pay_change_state):
+	  * gst/gdp/gstgdppay.h:
+	  Reset payloader when going to READY.
+	  Fix leaked buffers in ->queue on push errors.
+	  Disable seeking.
+	  Code cleanups.
+	  Create packetizer in _init, free in _finalize.
+
+2006-07-31 08:48:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/gdp/gstgdpdepay.c: Consume all events except EOS because we generate events from the gdp payload instead. Fixes #...
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init),
+	  (gst_gdp_depay_sink_event), (gst_gdp_depay_chain):
+	  Consume all events except EOS because we generate events from
+	  the gdp payload instead. Fixes #349204
+
+2006-07-28 17:17:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/audioresample/gstaudioresample.c: Don't leak references to the incoming caps. Clean them up when stopping.
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c: (audioresample_stop),
+	  (audioresample_set_caps):
+	  Don't leak references to the incoming caps. Clean them up when
+	  stopping.
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init),
+	  (gst_video_scale_finalize):
+	  Don't leak our temporary pixel buffer.
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/simple-launch-lines.c: (run_pipeline),
+	  (GST_START_TEST), (simple_launch_lines_suite):
+	  Fix leaks and re-enable the test for valgrind checking.
+
+2006-07-28 16:39:31 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefind function for multipart/x-mixed-replace (#348916).
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons  <sjoerd at luon net>
+	  * gst/typefind/gsttypefindfunctions.c: (multipart_type_find),
+	  (plugin_init):
+	  Add typefind function for multipart/x-mixed-replace (#348916).
+
+2006-07-28 14:14:58 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.c: Fix leak in duration query.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_setcaps),
+	  (gst_adder_query_duration):
+	  Fix leak in duration query.
+	  Reflow some docs and notes.
+
+2006-07-28 13:42:48 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/pipelines/vorbisenc.c: Enable Andy's extra vorbisenc test, now that it passes. Also fix one aspect of it.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/vorbisenc.c: (GST_START_TEST),
+	  (vorbisenc_suite):
+	  Enable Andy's extra vorbisenc test, now that it passes. Also fix one
+	  aspect of it.
+
+2006-07-28 12:48:21 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.*: Handle discontinuities in the input vorbis stream correctly, so that the output is properly t...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_generate_sink_caps),
+	  (gst_vorbis_enc_sink_getcaps), (gst_vorbis_enc_buffer_from_packet),
+	  (gst_vorbis_enc_push_buffer),
+	  (gst_vorbis_enc_buffer_check_discontinuous),
+	  (gst_vorbis_enc_chain), (gst_vorbis_enc_change_state):
+	  * ext/vorbis/vorbisenc.h:
+	  Handle discontinuities in the input vorbis stream correctly,
+	  so that the output is properly timestamped (and has good granulepos
+	  values). Needs some oggmux fixes too.
+
+2006-07-27 10:52:52 +0000  Kai Vehmanen <kv2004@eca.cx>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Don't send multiple newsegments with different formats.
+	  Original commit message from CVS:
+	  patch by: Kai Vehmanen <kv2004 eca cx>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_handle_sink_event),
+	  (gst_base_rtp_depayload_change_state):
+	  Don't send multiple newsegments with different formats.
+	  Fixes #348677.
+
+2006-07-26 15:20:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Make seeking in ogg more accurate again by doing the more correct granuletime to stream time c...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain),
+	  (gst_ogg_demux_do_seek), (gst_ogg_demux_read_chain):
+	  Make seeking in ogg more accurate again by doing the more correct
+	  granuletime to stream time conversion.
+
+2006-07-26 10:59:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gstmultifdsink.c: debug a little more understandably do not use goto as a substitute for break, especially if...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_add_full),
+	  (gst_multi_fd_sink_new_client):
+	  debug a little more understandably
+	  do not use goto as a substitute for break, especially if
+	  break is also being used
+
+2006-07-26 10:55:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gsttcp.c:
+	  move a recurring normal event to LOG, where it should be
+	  Original commit message from CVS:
+	  move a recurring normal event to LOG, where it should be
+
+2006-07-26 10:54:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/vorbis/vorbisdec.c:
+	  tweak debug output
+	  Original commit message from CVS:
+	  tweak debug output
+
+2006-07-26 10:52:05 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/gdp/gstgdpdepay.c: proxying get/set caps is the wrong thing to do, since we really do change caps quite fundament...
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init):
+	  proxying get/set caps is the wrong thing to do, since we really
+	  do change caps quite fundamentally
+	  * tests/check/elements/gdpdepay.c:
+	  * tests/check/elements/gdppay.c:
+	  remove declaration of buffers, it's already done in gstcheck.h
+
+2006-07-26 10:31:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Remove GLib-2.6 compatibility cruft.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_property):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
+	  Remove GLib-2.6 compatibility cruft.
+
+2006-07-24 16:47:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Don't try to align a sample to an unknown value.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  Don't try to align a sample to an unknown value.
+
+2006-07-24 15:14:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: When the audio clock is slaved to another clock, never try to align samples bu...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_provide_clock), (gst_base_audio_sink_render):
+	  When the audio clock is slaved to another clock, never try to align
+	  samples but trust the rate interpolation algorithm.
+
+2006-07-24 14:34:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.c: Don't try to calculate silence samples, base class does this much better now.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (gst_alsasink_prepare):
+	  Don't try to calculate silence samples, base class does this much
+	  better now.
+	  * gst-libs/gst/audio/gstringbuffer.c: (build_linear_format),
+	  (gst_ring_buffer_debug_spec_caps), (gst_ring_buffer_parse_caps),
+	  (gst_ring_buffer_acquire):
+	  Calculate silence samples correctly.
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Add _CAST macro.
+
+2006-07-22 17:01:12 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Limit search for the first markup tag to the first few kB of the file. If we don...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (xml_check_first_element):
+	  Limit search for the first markup tag to the first few kB of
+	  the file. If we don't find one there, it's highly unlikely that
+	  this is an XML(-ish) file.
+
+2006-07-21 17:04:06 +0000  Andy Wingo <wingo@pobox.com>
+
+	  tests/check/pipelines/theoraenc.c (test_discontinuity): Similar test to the one in vorbisenc. Also commented out.
+	  Original commit message from CVS:
+	  2006-07-21  Andy Wingo  <wingo@pobox.com>
+	  * tests/check/pipelines/theoraenc.c (test_discontinuity): Similar
+	  test to the one in vorbisenc. Also commented out.
+
+2006-07-21 16:54:19 +0000  Andy Wingo <wingo@pobox.com>
+
+	  tests/check/pipelines/vorbisenc.c: New test, commented out until Mike lands some elite vorbisenc patches.
+	  Original commit message from CVS:
+	  2006-07-21  Andy Wingo  <wingo@pobox.com>
+	  * tests/check/pipelines/vorbisenc.c:
+	  (test_discontinuity): New test, commented out until Mike lands
+	  some elite vorbisenc patches.
+
+2006-07-21 15:59:24 +0000  Andy Wingo <wingo@pobox.com>
+
+	  tests/check/pipelines/: Port to bufferstraw.
+	  Original commit message from CVS:
+	  2006-07-21  Andy Wingo  <wingo@pobox.com>
+	  * tests/check/pipelines/vorbisenc.c:
+	  * tests/check/pipelines/theoraenc.c: Port to bufferstraw.
+	  Bufferstraw was actually factored out of these tests. Now we share
+	  code yay.
+
+2006-07-21 11:03:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Better clipping.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (clip_buffer):
+	  Better clipping.
+
+2006-07-21 10:43:54 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Fix leak.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func),
+	  (gst_audioringbuffer_finalize), (gst_audioringbuffer_acquire),
+	  (gst_audioringbuffer_release), (gst_audioringbuffer_stop):
+	  Fix leak.
+	  Avoid type casting when we can.
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_dispose):
+	  Fix mem leak.
+
+2006-07-20 16:57:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsamixerelement.c: Make state change fail if the specified device can't be opened for some reason.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_change_state):
+	  Make state change fail if the specified device can't be opened
+	  for some reason.
+
+2006-07-20 10:42:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/test.c: Example of a small audio/video player using decodebin.
+	  Original commit message from CVS:
+	  * gst/playback/test.c: (gen_video_element), (gen_audio_element),
+	  (cb_newpad), (main):
+	  Example of a small audio/video player using decodebin.
+
+2006-07-20 05:56:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/riff-ids.h: Add 'fact' chunk id
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  Add 'fact' chunk id
+
+2006-07-19 18:20:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Don't assert when not negotiated but post a meaningfull error message. Fixes ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_chain),
+	  (gst_base_rtp_depayload_change_state):
+	  Don't assert when not negotiated but post a meaningfull
+	  error message. Fixes #347918.
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  Add comment about better default MTU size.
+	  * gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data):
+	  Small cleanups, start docs.
+
+2006-07-19 14:46:36 +0000  Martin Szulecki <compiz@sukimashita.com>
+
+	  sys/v4l/gstv4lelement.c: If "device-name" is requested and the device is not open, try to temporarily open it to obta...
+	  Original commit message from CVS:
+	  Patch by: Martin Szulecki
+	  * sys/v4l/gstv4lelement.c: (gst_v4lelement_get_property):
+	  If "device-name" is requested and the device is not
+	  open, try to temporarily open it to obtain this
+	  information (#342494).
+
+2006-07-19 12:25:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstid3tag.c: Add TSSE <=> GST_TAG_ENCODER mapping (see #347898).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Add TSSE <=> GST_TAG_ENCODER mapping (see #347898).
+	  * gst-libs/gst/tag/gsttageditingprivate.h:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  Some more random const-ifications.
+
+2006-07-18 19:48:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst-libs/gst/riff/: add comment what those 16 bytes in struct _gst_riff_strh according to one avi-dumper are
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c:
+	  (gst_riff_create_video_template_caps):
+	  Add more FOURCCs (sort list to make stuff easier to find),
+	  add comment what those 16 bytes in struct _gst_riff_strh according to
+	  one avi-dumper are
+
+2006-07-17 14:17:45 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/gdp/: remove parent_class setting, BOILERPLATE does this fix typo in comment
+	  Original commit message from CVS:
+	  2006-07-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_class_init):
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+	  remove parent_class setting, BOILERPLATE does this
+	  (gst_gdp_pay_reset_streamheader):
+	  fix typo in comment
+
+2006-07-17 13:48:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: Const-ify two arrays.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions),
+	  (gst_audio_fixate_channel_positions):
+	  Const-ify two arrays.
+
+2006-07-17 12:33:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsa.c: Fix typo, so that alsasink also advertises 8 channels if that's supported (tags: can, worms, open...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsa.c: (caps_add_channel_configuration):
+	  Fix typo, so that alsasink also advertises 8 channels
+	  if that's supported (tags: can, worms, open, alsa, ph34r).
+
+2006-07-17 12:01:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: *sigh*, when is the compiler going to warn when the comments are out-of-sync with the code.. R...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain),
+	  (gst_ogg_pad_submit_packet), (gst_ogg_demux_read_chain):
+	  *sigh*, when is the compiler going to warn when the comments
+	  are out-of-sync with the code.. Refix case of busted theora
+	  headers with 0 granule pos.
+
+2006-07-14 17:56:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Fix 99% cpu load by waiting for absolute times on the clock. Fixes #347300.
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_wait),
+	  (gst_base_rtp_depayload_change_state),
+	  (gst_base_rtp_depayload_set_property),
+	  (gst_base_rtp_depayload_get_property):
+	  Fix 99% cpu load by waiting for absolute times on the
+	  clock. Fixes #347300.
+
+2006-07-14 17:07:08 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/gsttheoraparse.h: ext/theora/theoraparse.c (theora_parse_drain_event_queue) (theora_parse_push_headers, th...
+	  Original commit message from CVS:
+	  2006-07-14  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/gsttheoraparse.h:
+	  * ext/theora/theoraparse.c (theora_parse_drain_event_queue)
+	  (theora_parse_push_headers, theora_parse_clear_queue)
+	  (theora_parse_drain_queue_prematurely, )
+	  (theora_parse_sink_event, theora_parse_change_state): Queue events
+	  until we initialized our state, like in vorbisparse.
+
+2006-07-14 16:45:17 +0000  Iain * <iaingnome@gmail.com>
+
+	  ext/vorbis/vorbisparse.h: ext/vorbis/vorbisparse.c (vorbis_parse_drain_event_queue) (vorbis_parse_push_headers, vorbi...
+	  Original commit message from CVS:
+	  2006-07-14  Andy Wingo  <wingo@pobox.com>
+	  * ext/vorbis/vorbisparse.h:
+	  * ext/vorbis/vorbisparse.c (vorbis_parse_drain_event_queue)
+	  (vorbis_parse_push_headers, vorbis_parse_clear_queue)
+	  (vorbis_parse_drain_queue_prematurely, )
+	  (vorbis_parse_sink_event, vorbis_parse_change_state): Queue events
+	  until we have initialized our state. Fixes seeking after an
+	  initial pad block.
+	  2006-07-14  Andy Wingo  <wingo@pobox.com>
+	  Patch by: Iain * <iaingnome@gmail.com>
+	  * ext/ogg/gstoggdemux.c (gst_ogg_demux_finalize): Fix memleak.
+
+2006-07-14 15:52:39 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Bump nano back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump nano back to CVS
+
+=== release 0.10.9 ===
+
+2006-07-14 15:51:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: releasing 0.10.9, "I walk the line"
+	  Original commit message from CVS:
+	  2006-07-13  Jan Schmidt <thaytan@mad.scientist.com>
+	  * configure.ac:
+	  releasing 0.10.9, "I walk the line"
+
+2006-07-14 14:12:40 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/pipelines/vorbisenc.c: Move a g_cond_signal to earlier to avoid sometimes deadlocking (commonly happens w...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/vorbisenc.c: (stop_pipeline):
+	  Move a g_cond_signal to earlier to avoid sometimes deadlocking
+	  (commonly happens when running this test under valgrind) when trying
+	  to remove the buffer probe.
+
+2006-07-14 10:34:36 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/Makefile.am:
+	  build as a plugin, not a lib
+	  Original commit message from CVS:
+	  build as a plugin, not a lib
+
+2006-07-13 16:43:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/xvimage/xvimagesink.c: Fix missing g_unlock from the previous commit
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new):
+	  Fix missing g_unlock from the previous commit
+
+2006-07-13 16:34:04 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: Implement a locking order to ensure we always take the object lock before the x_lock and never vice-versa.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+	  (gst_ximagesink_change_state):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_change_state):
+	  Implement a locking order to ensure we always take the object lock
+	  before the x_lock and never vice-versa.
+
+2006-07-13 15:25:58 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  docs/plugins/: add more plugins and elements to docs
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+	  add more plugins and elements to docs
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+	  fix segfaults due to wrong g_free
+	  add example
+	  * gst/gdp/gstgdppay.c:
+	  add example
+
+2006-07-13 14:38:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: Fix a caps leak when linking (#347304)
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (find_compatibles):
+	  Fix a caps leak when linking (#347304)
+	  * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
+	  (gst_ximagesink_ximage_destroy), (gst_ximagesink_xcontext_clear),
+	  (gst_ximagesink_change_state):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimage_buffer_finalize), (gst_xvimagesink_check_xshm_calls),
+	  (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_put),
+	  (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_change_state):
+	  Don't leak shared memory resources. Use the object lock to protect
+	  against the xcontext disappearing while returning a buffer from the
+	  pipeline. (#347304)
+
+2006-07-12 14:20:43 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisdec.c: gst_tag_list_merge() returns a new object. Take that into account when using it. This avoids ...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_finalize),
+	  (vorbis_handle_comment_packet):
+	  gst_tag_list_merge() returns a new object. Take that into account when
+	  using it. This avoids memleak.
+	  Revert previous commit which is not needed.
+
+2006-07-12 13:30:20 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisdec.c: Reset the decoder in finalize so that all fields get cleared.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_finalize):
+	  Reset the decoder in finalize so that all fields get cleared.
+
+2006-07-12 13:24:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Don't try to post an error message when setting the clock fails as this can hap...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_set_clock),
+	  (gst_base_audio_src_check_get_range), (gst_base_audio_src_create):
+	  Don't try to post an error message when setting the clock fails
+	  as this can happen when adding an element to a bin which will then
+	  deadlock. Fixes #347296.
+
+2006-07-12 13:04:15 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisdec.c: Post tag messages on the bus even if we're not initialized.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_reset),
+	  (vorbis_dec_sink_event), (vorbis_handle_comment_packet),
+	  (vorbis_handle_type_packet):
+	  Post tag messages on the bus even if we're not initialized.
+	  If we're not initialized, we still postpone the event pushing of tags.
+
+2006-07-12 11:28:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Revert last two changes that broke the freeze.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (gst_alsasink_prepare):
+	  * gst-libs/gst/audio/gstringbuffer.c: (build_linear_format),
+	  (gst_ring_buffer_debug_spec_caps), (gst_ring_buffer_parse_caps):
+	  Revert last two changes that broke the freeze.
+
+2006-07-12 10:59:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.c: basesink calculates silence sample correctly for us.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (gst_alsasink_prepare):
+	  basesink calculates silence sample correctly for us.
+
+2006-07-12 10:58:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Calculate correct silence samples so we don't fill our ringbuffer with noise.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (build_linear_format),
+	  (gst_ring_buffer_debug_spec_caps), (gst_ring_buffer_parse_caps):
+	  Calculate correct silence samples so we don't fill our ringbuffer
+	  with noise.
+
+2006-07-12 10:37:18 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisdec.*: Delay sending events (newsegment, tags) until the decoder is properly initialized.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init),
+	  (gst_vorbis_dec_reset), (vorbis_dec_sink_event),
+	  (vorbis_handle_comment_packet), (vorbis_handle_type_packet):
+	  * ext/vorbis/vorbisdec.h:
+	  Delay sending events (newsegment, tags) until the decoder is properly
+	  initialized.
+	  Fixes #347295
+
+2006-07-11 22:40:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-07-11 21:04:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/elements/audioconvert.c: Patch from #347221 adding a test for audioconvert channel remappings.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (get_float_mc_caps),
+	  (get_int_mc_caps), (GST_START_TEST), (audioconvert_suite):
+	  Patch from #347221 adding a test for audioconvert
+	  channel remappings.
+
+2006-07-11 12:03:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstssaparse.c: Don't include the terminating NUL in the buffer size, it's only there for extra paranoia ...
+	  Original commit message from CVS:
+	  * gst/subparse/gstssaparse.c: (gst_ssa_parse_base_init),
+	  (gst_ssa_parse_parse_line):
+	  Don't include the terminating NUL in the buffer size,
+	  it's only there for extra paranoia (would add random
+	  '*' characters at the end of each subtitle since the
+	  terminator itself is not valid UTF-8 technically).
+	  Also fix indenting after boilerplate macro.
+
+2006-07-10 14:59:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: Also emit 'unknown-type' signal (which should really be called unhandled-type) if we fou...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (close_pad_link):
+	  Also emit 'unknown-type' signal (which should really be
+	  called unhandled-type) if we found potential decoders/demuxers
+	  in the registry but none of them worked in the end (as in the
+	  case where the plugins don't exist any longer but are still
+	  listed in the registry). Fixes #329798.
+
+2006-07-08 13:48:58 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* ext/theora/theoraparse.c:
+	  theoraparse.c (theora_parse_push_buffer)
+	  Original commit message from CVS:
+	  2006-07-08  Andy Wingo  <wingo@pobox.com>
+	  * theoraparse.c (theora_parse_push_buffer)
+	  (theora_parse_drain_queue_prematurely, theora_parse_drain_queue):
+	  Add some more debugging. Fix granulepos reconstruction in the face
+	  of discontinuities.
+
+2006-07-06 15:54:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Use gobject_class instead of G_OBJECT_CLASS (klass)
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init),
+	  (gst_base_audio_sink_provide_clock):
+	  Use gobject_class instead of G_OBJECT_CLASS (klass)
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init), (gst_base_audio_src_init),
+	  (gst_base_audio_src_set_clock), (gst_base_audio_src_provide_clock),
+	  (gst_base_audio_src_get_time),
+	  (gst_base_audio_src_check_get_range), (gst_base_audio_src_create),
+	  (gst_base_audio_src_create_ringbuffer):
+	  Fix latency and buffer-time constants and properties ala basesink.
+	  Implement pull based scheduling. Fixes #346527.
+	  Set default blocksize in GstBaseSrc to 0, we default to pushing out
+	  one segment.
+	  Refuse slaving to another clock instead of silently not working.
+	  Only provide a clock when we are actually able to do so.
+	  Various small cleanups and compiler hints.
+
+2006-07-06 13:23:07 +0000  Lutz Mueller <lutz@topfrose.de>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefinding for text/html (#346581).
+	  Original commit message from CVS:
+	  Patch by: Lutz Mueller <lutz at topfrose de>
+	  * gst/typefind/gsttypefindfunctions.c: (html_type_find),
+	  (plugin_init):
+	  Add typefinding for text/html (#346581).
+
+2006-07-06 13:12:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix SMIL typefinding, make xml_check_first_element() more useful.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (utf8_type_find),
+	  (xml_check_first_element), (xml_type_find), (smil_type_find):
+	  Fix SMIL typefinding, make xml_check_first_element() more
+	  useful.
+
+2006-07-06 13:04:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.*: Protect list of elements with a subtitle-encoding property and the subtitle encoding m...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+	  (gst_play_base_bin_finalize), (decodebin_element_added_cb),
+	  (decodebin_element_removed_cb), (gst_play_base_bin_set_property):
+	  * gst/playback/gstplaybasebin.h:
+	  Protect list of elements with a subtitle-encoding property and
+	  the subtitle encoding member itself with a lock of their own
+	  instead of using the object lock. This prevents a dead-lock in
+	  the element-remove callback in some circumstances when shutting
+	  down playbin.
+
+2006-07-05 20:11:13 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/common/libgsttag.def: Export some new functions.
+	  Original commit message from CVS:
+	  * win32/common/libgsttag.def:
+	  Export some new functions.
+	  * win32/vs6/libgstogg.dsp:
+	  Add a link to libgsttag-0.10.lib.
+
+2006-07-04 16:50:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsamixertrack.c: Some const-ification.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+	  Some const-ification.
+
+2006-07-04 14:06:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.c: Improve checking if we are dealing with a stream. Added some more uris that need buffe...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (is_stream), (gen_source_element):
+	  Improve checking if we are dealing with a stream. Added some
+	  more uris that need buffering.
+
+2006-07-03 10:43:31 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/vorbis/vorbisdec.c: Remove unused variable.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_do_clip):
+	  Remove unused variable.
+
+2006-07-02 21:48:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  Makefile.am: include lcov.mak
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  include lcov.mak
+	  * configure.ac:
+	  add GCOV_LIBS to GST_LIBS
+
+2006-07-02 11:08:58 +0000  Michael Sheldon <webmaster@mikeasoft.com>
+
+	  ext/alsa/gstalsasrc.c: Add 32 bps to template caps and increase channels range from [1,2] to [1,MAX]. See #346326.
+	  Original commit message from CVS:
+	  Patch by: Michael Sheldon  <webmaster at mikeasoft com>
+	  * ext/alsa/gstalsasrc.c:
+	  Add 32 bps to template caps and increase channels range
+	  from [1,2] to [1,MAX]. See #346326.
+
+2006-06-30 12:04:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Recognise 'WMVA' video codec fourcc (#345879).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Recognise 'WMVA' video codec fourcc (#345879).
+
+2006-06-29 12:21:06 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: Fixed nasty memory leak
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  Fixed nasty memory leak
+
+2006-06-26 13:19:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gsttcp.c: fix logging
+	  Original commit message from CVS:
+	  * gst/tcp/gsttcp.c: (gst_tcp_read_buffer),
+	  (gst_tcp_gdp_read_buffer), (gst_tcp_gdp_read_caps):
+	  fix logging
+
+2006-06-23 16:45:50 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: Protect remove_fakesink using a mutex, so that we don't try and remove the fakesink simu...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+	  (gst_decode_bin_init), (gst_decode_bin_finalize), (add_fakesink),
+	  (remove_fakesink), (pad_probe), (gst_decode_bin_change_state):
+	  Protect remove_fakesink using a mutex, so that we don't try and
+	  remove the fakesink simultaneously from multiple threads.
+	  When going from READY to PAUSED, restore the fakesink, so that
+	  it is there when decodebin gets reused.
+
+2006-06-23 09:53:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Use GST_DEBUG_CATEGORY_STATIC where possible (#342503).
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gsttcpclientsink.c:
+	  * gst/tcp/gsttcpclientsrc.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/tcp/gsttcpserversrc.c:
+	  * gst/videorate/gstvideorate.c:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * sys/v4l/gstv4ljpegsrc.c:
+	  * sys/v4l/gstv4lmjpegsink.c:
+	  * sys/v4l/gstv4lsrc.c:
+	  * tests/examples/seek/scrubby.c:
+	  * tests/examples/seek/seek.c:
+	  Use GST_DEBUG_CATEGORY_STATIC where possible (#342503).
+
+2006-06-23 09:09:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Use GST_DEBUG_CATEGORY_STATIC where possible (#342503) and fix one GObject boilerplate macro.
+	  Original commit message from CVS:
+	  * ext/directfb/dfbvideosink.c:
+	  * ext/gsm/gstgsmdec.c:
+	  * ext/gsm/gstgsmenc.c:
+	  * ext/libmms/gstmms.c:
+	  * ext/neon/gstneonhttpsrc.c:
+	  * ext/theora/theoradec.c:
+	  * gst/freeze/gstfreeze.c:
+	  * gst/gdp/gstgdpdepay.c:
+	  * gst/gdp/gstgdppay.c:
+	  * sys/glsink/glimagesink.c:
+	  Use GST_DEBUG_CATEGORY_STATIC where possible (#342503)
+	  and fix one GObject boilerplate macro.
+
+2006-06-22 12:13:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/tags.c: Second field in GEnumValue shouldn't be a description, but a stringified version of the enum...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tags.c: (register_tag_image_type_enum):
+	  Second field in GEnumValue shouldn't be a description,
+	  but a stringified version of the enum value.
+
+2006-06-22 12:03:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/ximage/ximagesink.c: Avoid type checking in buffer casts.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
+	  (gst_ximage_buffer_free), (gst_ximagesink_ximage_put),
+	  (gst_ximagesink_setcaps), (gst_ximagesink_buffer_alloc):
+	  Avoid type checking in buffer casts.
+	  Avoid caps copy in buffer_alloc when we can.
+	  Use pad_peer_accept.
+
+2006-06-22 11:01:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/tag.h: Oops, make that 'Since: 0.10.9'.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/tag.h:
+	  Oops, make that 'Since: 0.10.9'.
+
+2006-06-22 10:55:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  API: add GstTagImageType enum to describe images contained in image tags (#345641).
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c: (register_tag_image_type_enum),
+	  (gst_tag_image_type_get_type):
+	  API: add GstTagImageType enum to describe images contained
+	  in image tags (#345641).
+
+2006-06-22 10:31:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/tcp/gstmultifdsink.c: Fix warnings with gst-inspect: "buffers-min" property should be of G_TYPE_INT and not G_TYP...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  Fix warnings with gst-inspect: "buffers-min" property
+	  should be of G_TYPE_INT and not G_TYPE_INT64. Also fix
+	  typo in property description.
+
+2006-06-22 10:10:51 +0000  Cody Russell <bratsche@gnome.org>
+
+	  gst/: Avoid unnecessary class cast check in class_init functions (#337747).
+	  Original commit message from CVS:
+	  Patch by: Cody Russell <bratsche at gnome org>
+	  * gst/audioresample/gstaudioresample.c:
+	  (gst_audioresample_class_init):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_class_init):
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init):
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init):
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init):
+	  * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init):
+	  * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init):
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init):
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_class_init):
+	  * gst/volume/gstvolume.c: (gst_volume_class_init):
+	  Avoid unnecessary class cast check in class_init
+	  functions (#337747).
+
+2006-06-21 18:39:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: g_markup_escape_text() REALLY doesn't like non-UTF8 input and doesn't validate its input ...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_make_utf8),
+	  (gst_text_overlay_video_chain):
+	  g_markup_escape_text() REALLY doesn't like non-UTF8 input
+	  and doesn't validate its input either (and neither did
+	  textoverlay it seems). Let's do that then and fix #345206.
+
+2006-06-19 17:12:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.*: Added shiny new burst-on-connect methods.
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
+	  (gst_unit_type_get_type), (gst_multi_fd_sink_class_init),
+	  (gst_multi_fd_sink_init), (gst_multi_fd_sink_add_full),
+	  (gst_multi_fd_sink_add), (gst_multi_fd_sink_handle_client_read),
+	  (find_syncframe), (find_limits), (assign_value),
+	  (count_burst_unit), (gst_multi_fd_sink_new_client),
+	  (gst_multi_fd_sink_handle_client_write),
+	  (gst_multi_fd_sink_queue_buffer), (gst_multi_fd_sink_render),
+	  (gst_multi_fd_sink_set_property), (gst_multi_fd_sink_get_property),
+	  (gst_multi_fd_sink_change_state):
+	  * gst/tcp/gstmultifdsink.h:
+	  Added shiny new burst-on-connect methods.
+	  Add properties to control the minimal amount of data queued.
+	  Small cleanups.
+	  API: bytes-min property
+	  API: time-min property
+	  API: buffers-min property
+	  API: burst-unit property
+	  API: burst-value property
+	  API: add-full signal
+	  * gst/tcp/gsttcp-marshal.list:
+	  Added new marshaller code for the new signal.
+	  * tests/check/elements/multifdsink.c: (GST_START_TEST),
+	  (multifdsink_suite):
+	  Added testcases for new burst methods.
+
+2006-06-19 11:35:47 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update for latest changes
+	  Original commit message from CVS:
+	  update for latest changes
+
+2006-06-19 09:57:50 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/theora/theoradec.c: Implement clipping for accurate seeking.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (clip_buffer), (theora_dec_push):
+	  Implement clipping for accurate seeking.
+	  Closes #345225
+
+2006-06-19 09:08:05 +0000  Philip Jaegenstedt <philip@lysator.liu.se>
+
+	  gst/videoscale/gstvideoscale.c: Make videoscale support RGBA, ARGB, BGRA and ABGR. Fixes #345131
+	  Original commit message from CVS:
+	  Patch by: Philip Jaegenstedt <philip at lysator dot liu dot se>
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_prepare_size),
+	  (gst_video_scale_transform):
+	  Make videoscale support RGBA, ARGB, BGRA and ABGR. Fixes #345131
+
+2006-06-17 14:18:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery
+	  Original commit message from CVS:
+	  ChangeLog surgery
+
+2006-06-17 14:13:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Fix --disable-extern (can't set conditionals conditionally, #343602).
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Fix --disable-extern (can't set conditionals conditionally,
+	  #343602).
+
+2006-06-16 15:43:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/audioresample.c: Add test case for bug #342789 fixed below.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioresample.c: (test_reuse),
+	  (audioresample_suite):
+	  Add test case for bug #342789 fixed below.
+
+2006-06-16 15:17:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioresample/gstaudioresample.c: Implement GstBaseTransform::start and ::stop so that audioresample can clear it...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  (gst_audioresample_class_init), (gst_audioresample_init),
+	  (audioresample_start), (audioresample_stop),
+	  (gst_audioresample_set_property), (gst_audioresample_get_property):
+	  Implement GstBaseTransform::start and ::stop so that audioresample
+	  can clear its internal state properly and be reused insted of
+	  causing non-negotiated errors with playbin under some circumstances
+	  (#342789).
+	  * tests/check/elements/audioresample.c: (setup_audioresample),
+	  (cleanup_audioresample):
+	  Need to set element state here so that ::start and ::stop are
+	  called.
+
+2006-06-16 13:59:29 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst-libs/gst/riff/riff-read.c: Parse extra data better, apparently it's right behind the normal strf header size. Fix...
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian dot net>
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_parse_strf_vids):
+	  Parse extra data better, apparently it's right behind
+	  the normal strf header size. Fixes #343500.
+
+2006-06-16 11:04:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.c: If we fail to set the buffer_time and period_time alsa parameters, post a warning and leave a...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (set_hwparams):
+	  If we fail to set the buffer_time and period_time alsa
+	  parameters, post a warning and leave alsa select a
+	  default instead of failing. Fixes #342085
+
+2006-06-16 10:30:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery (it wouldn't have crashed, just shown bogus values)
+	  Original commit message from CVS:
+	  ChangeLog surgery (it wouldn't have crashed, just shown bogus values)
+
+2006-06-16 10:20:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Remove GST_CDDA_TAG_TRACK_TAGS again, it is #ifdef 0'ed out in the header file and shouldn't be listed in the docs.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/cdda/gstcddabasesrc.h:
+	  Remove GST_CDDA_TAG_TRACK_TAGS again, it is #ifdef 0'ed
+	  out in the header file and shouldn't be listed in the docs.
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk):
+	  Fix it so that it doesn't crash in the debug statement.
+
+2006-06-16 10:02:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/: add remaining symbols into correct setions
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  add remaining symbols into correct setions
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  fix incomplete docs
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  comment out not yet implemented function
+	  * gst-libs/gst/floatcast/floatcast.h:
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  add short descriptions
+	  * gst-libs/gst/interfaces/propertyprobe.c:
+	  fix return value docs
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk):
+	  simplify debug logging
+	  * gst-libs/gst/riff/riff-read.h:
+	  sync function prototype and docs
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  remove left over symbol
+
+2006-06-16 09:56:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Use GST_PLUGIN_DOCS macro in configure.ac, add
+	  Original commit message from CVS:
+	  * autogen.sh:
+	  * configure.ac:
+	  * docs/Makefile.am:
+	  Use GST_PLUGIN_DOCS macro in configure.ac, add
+	  --enable-plugin-docs default to autogen.sh and use
+	  ENABLE_PLUGIN_DOCS conditional in Makefile.am (#344039).
+
+2006-06-15 15:27:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Combine GstFlowReturn from the source pads to give a meaningfull result to the upstream peer o...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_peer),
+	  (gst_ogg_demux_activate_chain), (gst_ogg_demux_combine_flows),
+	  (gst_ogg_demux_loop):
+	  Combine GstFlowReturn from the source pads to give a
+	  meaningfull result to the upstream peer or to stop the
+	  processing task in case of errors.
+
+2006-06-14 14:49:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreaminfo.c: Try GST_TAG_CODEC as fallback when extracting the codec name; more debug info.
+	  Original commit message from CVS:
+	  * gst/playback/gststreaminfo.c: (cb_probe):
+	  Try GST_TAG_CODEC as fallback when extracting the
+	  codec name; more debug info.
+
+2006-06-14 14:34:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/: Extract language tags from ogm subtitle streams, so that the subtitle menu choices are labelled correctly in
+	  Original commit message from CVS:
+	  * ext/ogg/Makefile.am:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
+	  Extract language tags from ogm subtitle streams, so that
+	  the subtitle menu choices are labelled correctly in
+	  Totem (fixes #344708).
+
+2006-06-14 09:13:54 +0000  Alessandro Decina <alessandro@nnva.org>
+
+	  ext/ogg/gstoggmux.c: Fix various leaks. Fixes #343699.
+	  Original commit message from CVS:
+	  Patch by: Alessandro Decina <alessandro at nnva dot org>
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type), (gst_ogg_mux_clear),
+	  (gst_ogg_mux_release_pad), (gst_ogg_mux_get_headers),
+	  (gst_ogg_mux_set_header_on_caps), (gst_ogg_mux_init_collectpads),
+	  (gst_ogg_mux_clear_collectpads), (gst_ogg_mux_change_state):
+	  Fix various leaks. Fixes #343699.
+	  Add x-smoke mime type.
+
+2006-06-14 08:17:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-ids.h: Add IDs for 'bext' chunks (see #343837).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  Add IDs for 'bext' chunks (see #343837).
+
+2006-06-12 12:44:38 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: Honour font face tags in SAMI subtitles (#344503).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * gst/subparse/samiparse.c: (sami_context_pop_state),
+	  (handle_start_font), (end_sami_element):
+	  Honour font face tags in SAMI subtitles (#344503).
+
+2006-06-11 20:41:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  po/POTFILES.in: add missing files containing translatable strings
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  add missing files containing translatable strings
+
+2006-06-11 19:55:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/tmpl/.cvsignore: we don't want those *.sgml files in CVS either
+	  Original commit message from CVS:
+	  * docs/libs/tmpl/.cvsignore:
+	  we don't want those *.sgml files in CVS either
+
+2006-06-11 19:44:49 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ignore more
+	  Original commit message from CVS:
+	  * docs/libs/.cvsignore:
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/libs/.cvsignore:
+	  ignore more
+
+2006-06-11 18:33:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/Makefile.am: also commiting the changed Makefile.am (added more libs to the doc-build)
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  also commiting the changed Makefile.am (added more libs to the
+	  doc-build)
+
+2006-06-11 17:08:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  docs/libs/: first batch of reordering things, add index & hierarchy
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  first batch of reordering things, add index & hierarchy
+
+2006-06-11 14:08:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* ext/alsa/Makefile.am:
+	* ext/cdparanoia/Makefile.am:
+	* ext/gnomevfs/Makefile.am:
+	* ext/libvisual/Makefile.am:
+	* ext/ogg/Makefile.am:
+	* ext/pango/Makefile.am:
+	* ext/theora/Makefile.am:
+	* ext/vorbis/Makefile.am:
+	* sys/v4l/Makefile.am:
+	* sys/ximage/Makefile.am:
+	* sys/xvimage/Makefile.am:
+	  further clean up build
+	  Original commit message from CVS:
+	  further clean up build
+
+2006-06-11 12:14:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: use GST_PKG_CHECK_MODULES, cleans up output
+	  Original commit message from CVS:
+	  * configure.ac:
+	  use GST_PKG_CHECK_MODULES, cleans up output
+
+2006-06-11 12:10:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* win32/common/config.h:
+	  update to cvs
+	  Original commit message from CVS:
+	  update to cvs
+
+2006-06-10 18:52:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfsuri.c: Add support for burn:// URIs (#343385); const-ify things a bit, use G_N_ELEMENTS inste...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+	  Add support for burn:// URIs (#343385); const-ify things a bit,
+	  use G_N_ELEMENTS instead of hard-coded array size.
+
+2006-06-10 18:25:07 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: Fix up broken entities before passing them to libxml *sigh*. (#343303).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * gst/subparse/samiparse.c: (fix_invalid_entities), (parse_sami):
+	  Fix up broken entities before passing them to libxml *sigh*.
+	  (#343303).
+
+2006-06-09 18:52:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	  back to trunk
+	  Original commit message from CVS:
+	  back to trunk
+
+=== release 0.10.8 ===
+
+2006-06-09 18:49:26 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/config.h:
+	  releasing 0.10.8
+	  Original commit message from CVS:
+	  releasing 0.10.8
+
+2006-06-07 11:04:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  0.10.7.2 prerelease
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * po/af.po:
+	  * po/az.po:
+	  * po/cs.po:
+	  * po/en_GB.po:
+	  * po/hu.po:
+	  * po/it.po:
+	  * po/nb.po:
+	  * po/nl.po:
+	  * po/or.po:
+	  * po/sq.po:
+	  * po/sr.po:
+	  * po/sv.po:
+	  * po/uk.po:
+	  * po/vi.po:
+	  * win32/common/config.h:
+	  0.10.7.2 prerelease
+
+2006-06-07 11:03:03 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  move last template doc snippets to source code and delete them
+	  Original commit message from CVS:
+	  * docs/libs/tmpl/gstaudio.sgml:
+	  * docs/libs/tmpl/gstcolorbalance.sgml:
+	  * docs/libs/tmpl/gstmixer.sgml:
+	  * docs/libs/tmpl/gstringbuffer.sgml:
+	  * docs/libs/tmpl/gsttuner.sgml:
+	  * docs/libs/tmpl/gstxoverlay.sgml:
+	  * gst-libs/gst/audio/audio.c:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  * gst-libs/gst/interfaces/colorbalance.c:
+	  * gst-libs/gst/interfaces/mixer.c:
+	  * gst-libs/gst/interfaces/tuner.c:
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  move last template doc snippets to source code and delete them
+
+2006-06-06 16:26:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/gstgdppay.c:
+	  adapt to new api
+	  Original commit message from CVS:
+	  adapt to new api
+
+2006-06-06 14:39:15 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: enable building of GDP elements
+	  Original commit message from CVS:
+	  * configure.ac:
+	  enable building of GDP elements
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+	  (gst_gdp_pay_init), (gst_gdp_buffer_from_caps),
+	  (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event),
+	  (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_sink_event),
+	  (gst_gdp_pay_set_property), (gst_gdp_pay_get_property),
+	  (gst_gdp_pay_change_state):
+	  * gst/gdp/gstgdppay.h:
+	  add version 1.0
+
+2006-06-06 11:13:18 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoraparse.c: Mark DELTA_UNIT on non-keyframes.
+	  Original commit message from CVS:
+	  * ext/theora/theoraparse.c: (theora_parse_drain_queue_prematurely),
+	  (theora_parse_drain_queue):
+	  Mark DELTA_UNIT on non-keyframes.
+
+2006-06-03 21:06:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/audio/: Document better the fact that latency_time and buffer_time are values stored in microseconds, an...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init), (gst_base_audio_sink_setcaps):
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_parse_caps),
+	  (gst_ring_buffer_samples_done):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Document better the fact that latency_time and buffer_time are values
+	  stored in microseconds, and not the usual GStreamer nanoseconds.
+	  Change the variables (compatibly) that store them from GstClockTime
+	  to guint64 to make it more clear that they're not storing clock times.
+	  Also, remove the bogus property description that says the user can
+	  specify -1 to get the default value, since that's never been the case.
+	  When computing the default segment size for the ring buffer, make it
+	  an integer number of samples.
+	  When the sub-class indicates a delay greater than the number of
+	  samples we've written return 0 from the audio sink get_time method.
+
+2006-06-02 17:01:02 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/: Don't busy-wait in tests; this was causing test timeouts very frequently when running under valgrind.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (set_channel_positions),
+	  (get_float_mc_caps), (get_int_mc_caps):
+	  * tests/check/elements/audioresample.c:
+	  * tests/check/elements/audiotestsrc.c: (GST_START_TEST):
+	  * tests/check/elements/videorate.c:
+	  * tests/check/elements/videotestsrc.c: (GST_START_TEST):
+	  * tests/check/elements/volume.c:
+	  * tests/check/elements/vorbisdec.c:
+	  * tests/check/pipelines/vorbisenc.c: (GST_START_TEST):
+	  Don't busy-wait in tests; this was causing test timeouts very
+	  frequently when running under valgrind.
+
+2006-06-02 16:45:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/gdp/gstgdpdepay.c:
+	* gst/gdp/gstgdppay.h:
+	  small fixes
+	  Original commit message from CVS:
+	  small fixes
+
+2006-06-02 16:35:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  fail_if_can_read is racy
+	  Original commit message from CVS:
+	  fail_if_can_read is racy
+
+2006-06-02 16:26:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/: make multifdsink properly deal with streamheader:
+	  Original commit message from CVS:
+	  * gst/tcp/README:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_init),
+	  (gst_multi_fd_sink_remove_client_link),
+	  (gst_multi_fd_sink_client_queue_caps),
+	  (gst_multi_fd_sink_client_queue_buffer),
+	  (gst_multi_fd_sink_handle_client_write),
+	  (gst_multi_fd_sink_render):
+	  * gst/tcp/gstmultifdsink.h:
+	  make multifdsink properly deal with streamheader:
+	  - streamheader is taken from caps
+	  - buffers marked with IN_CAPS are not sent
+	  - streamheaders are sent, on connection, from the caps of the
+	  buffer where the client gets positioned to
+	  - further streamheader changes are done every time the client
+	  will receive a buffer with different caps
+	  * tests/check/elements/multifdsink.c: (GST_START_TEST),
+	  (gst_multifdsink_create_streamheader):
+	  add tests for this
+
+2006-06-02 15:06:59 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisdec.c: Reinstate limit on channel count. Vorbis does not define the meaning of > 6 channels, so they...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_identification_packet):
+	  Reinstate limit on channel count. Vorbis does not define the meaning
+	  of > 6 channels, so they're just independent channels. Gstreamer
+	  currently has no mechanism to represent N independent channels.
+
+2006-06-02 14:23:34 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisdec.c: Don't arbitrarily restrict channel counts and rate in vorbis.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_identification_packet):
+	  Don't arbitrarily restrict channel counts and rate in vorbis.
+	  In terms of effects likely on real-world files, this fixes 96kHz
+	  playback of vorbis.
+
+2006-06-02 14:19:18 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/audioconvert.c: More correct float->int conversion.
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float):
+	  More correct float->int conversion.
+
+2006-06-02 14:07:42 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggdemux.c: Don't accidently send GST_CLOCK_TIME_NONE as a new segment start value. Fixes g-critical on tr...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_perform_seek):
+	  Don't accidently send GST_CLOCK_TIME_NONE as a new segment start
+	  value. Fixes g-critical on trying to play back ogg containing
+	  unknown codec.
+
+2006-06-02 10:34:12 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybasebin.*: Make the subtitle detection work from any thread so we don't deadlock. Fixes #343397.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (group_create), (group_commit),
+	  (setup_source):
+	  * gst/playback/gstplaybasebin.h:
+	  Make the subtitle detection work from any thread so we don't
+	  deadlock. Fixes #343397.
+
+2006-06-02 10:28:32 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/gdp/gstgdppay.c: add crc-header and crc-payload properties don't error out on some things that are recoverable
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+	  (gst_gdp_pay_init), (gst_gdp_buffer_from_caps),
+	  (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event),
+	  (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain),
+	  (gst_gdp_pay_sink_event), (gst_gdp_pay_set_property),
+	  (gst_gdp_pay_get_property):
+	  add crc-header and crc-payload properties
+	  don't error out on some things that are recoverable
+	  * tests/check/elements/gdppay.c: (GST_START_TEST), (gdppay_suite):
+	  add test for crc
+
+2006-06-02 09:17:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gsttcp.c:
+	  show type number when packet is of the wrong type
+	  Original commit message from CVS:
+	  show type number when packet is of the wrong type
+
+2006-06-01 23:04:32 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/volume/Makefile.am: Seriously, it's not *that* hard to get compilation right.  Even a drunk can do it ! Add LIBOI...
+	  Original commit message from CVS:
+	  * gst/volume/Makefile.am:
+	  Seriously, it's not *that* hard to get compilation right.  Even
+	  a drunk can do it ! Add LIBOIL CFLAGS and LIBS
+
+2006-06-01 22:00:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+	  Original commit message from CVS:
+	  * ext/alsaspdif/alsaspdifsink.h:
+	  * ext/amrwb/gstamrwbdec.h:
+	  * ext/amrwb/gstamrwbenc.h:
+	  * ext/amrwb/gstamrwbparse.h:
+	  * ext/arts/gst_arts.h:
+	  * ext/artsd/gstartsdsink.h:
+	  * ext/audiofile/gstafparse.h:
+	  * ext/audiofile/gstafsink.h:
+	  * ext/audiofile/gstafsrc.h:
+	  * ext/audioresample/gstaudioresample.h:
+	  * ext/bz2/gstbz2dec.h:
+	  * ext/bz2/gstbz2enc.h:
+	  * ext/dirac/gstdiracdec.h:
+	  * ext/directfb/dfbvideosink.h:
+	  * ext/divx/gstdivxdec.h:
+	  * ext/divx/gstdivxenc.h:
+	  * ext/dts/gstdtsdec.h:
+	  * ext/faac/gstfaac.h:
+	  * ext/gsm/gstgsmdec.h:
+	  * ext/gsm/gstgsmenc.h:
+	  * ext/ivorbis/vorbisenc.h:
+	  * ext/libfame/gstlibfame.h:
+	  * ext/nas/nassink.h:
+	  * ext/neon/gstneonhttpsrc.h:
+	  * ext/polyp/polypsink.h:
+	  * ext/sdl/sdlaudiosink.h:
+	  * ext/sdl/sdlvideosink.h:
+	  * ext/shout/gstshout.h:
+	  * ext/snapshot/gstsnapshot.h:
+	  * ext/sndfile/gstsf.h:
+	  * ext/swfdec/gstswfdec.h:
+	  * ext/tarkin/gsttarkindec.h:
+	  * ext/tarkin/gsttarkinenc.h:
+	  * ext/theora/theoradec.h:
+	  * ext/wavpack/gstwavpackdec.h:
+	  * ext/wavpack/gstwavpackparse.h:
+	  * ext/xine/gstxine.h:
+	  * ext/xvid/gstxviddec.h:
+	  * ext/xvid/gstxvidenc.h:
+	  * gst/cdxaparse/gstcdxaparse.h:
+	  * gst/cdxaparse/gstcdxastrip.h:
+	  * gst/colorspace/gstcolorspace.h:
+	  * gst/festival/gstfestival.h:
+	  * gst/freeze/gstfreeze.h:
+	  * gst/gdp/gstgdpdepay.h:
+	  * gst/gdp/gstgdppay.h:
+	  * gst/modplug/gstmodplug.h:
+	  * gst/mpeg1sys/gstmpeg1systemencode.h:
+	  * gst/mpeg1videoparse/gstmp1videoparse.h:
+	  * gst/mpeg2sub/gstmpeg2subt.h:
+	  * gst/mpegaudioparse/gstmpegaudioparse.h:
+	  * gst/multifilesink/gstmultifilesink.h:
+	  * gst/overlay/gstoverlay.h:
+	  * gst/playondemand/gstplayondemand.h:
+	  * gst/qtdemux/qtdemux.h:
+	  * gst/rtjpeg/gstrtjpegdec.h:
+	  * gst/rtjpeg/gstrtjpegenc.h:
+	  * gst/smooth/gstsmooth.h:
+	  * gst/smoothwave/gstsmoothwave.h:
+	  * gst/spectrum/gstspectrum.h:
+	  * gst/speed/gstspeed.h:
+	  * gst/stereo/gststereo.h:
+	  * gst/switch/gstswitch.h:
+	  * gst/tta/gstttadec.h:
+	  * gst/tta/gstttaparse.h:
+	  * gst/videodrop/gstvideodrop.h:
+	  * gst/xingheader/gstxingmux.h:
+	  * sys/directdraw/gstdirectdrawsink.h:
+	  * sys/directsound/gstdirectsoundsink.h:
+	  * sys/dxr3/dxr3audiosink.h:
+	  * sys/dxr3/dxr3spusink.h:
+	  * sys/dxr3/dxr3videosink.h:
+	  * sys/qcam/gstqcamsrc.h:
+	  * sys/vcd/vcdsrc.h:
+	  Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-06-01 20:39:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/volume/gstvolume.*: rewrite the passthrough check, split _int16 and _int16_clamp, fix another property desc., rem...
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_choose_func),
+	  (volume_update_real_volume), (gst_volume_class_init),
+	  (gst_volume_init), (volume_process_float), (volume_process_int16),
+	  (volume_process_int16_clamp), (volume_set_caps),
+	  (volume_transform_ip), (plugin_init):
+	  * gst/volume/gstvolume.h:
+	  rewrite the passthrough check, split _int16 and _int16_clamp, fix
+	  another property desc., remove unused param from process function
+	  * tests/check/elements/volume.c: (volume_suite):
+	  reactivate the passthrough test
+
+2006-06-01 19:19:51 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixerelement.h:
+	  * ext/alsa/gstalsamixeroptions.h:
+	  * ext/alsa/gstalsamixertrack.h:
+	  * ext/gnomevfs/gstgnomevfssink.h:
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/gsttheoraparse.h:
+	  * ext/vorbis/vorbisparse.h:
+	  * gst-libs/gst/audio/gstaudioclock.h:
+	  * gst-libs/gst/audio/gstaudiofilter.h:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  * gst/audioconvert/gstaudioconvert.h:
+	  * gst/audioresample/gstaudioresample.h:
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	  * gst/playback/gststreamselector.h:
+	  * gst/tcp/gstmultifdsink.h:
+	  * gst/tcp/gsttcpclientsink.h:
+	  * gst/tcp/gsttcpclientsrc.h:
+	  * gst/tcp/gsttcpserversink.h:
+	  * gst/tcp/gsttcpserversrc.h:
+	  * gst/videorate/gstvideorate.h:
+	  * gst/videoscale/gstvideoscale.h:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/volume/gstvolume.h:
+	  * sys/v4l/gstv4ljpegsrc.h:
+	  * sys/v4l/gstv4lmjpegsink.h:
+	  * sys/v4l/gstv4lmjpegsrc.h:
+	  * sys/v4l/gstv4lsrc.h:
+	  * sys/ximage/ximagesink.h:
+	  * sys/xvimage/xvimagesink.h:
+	  * tests/old/testsuite/alsa/sinesrc.h:
+	  Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-05-31 16:56:45 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  remove wrong commit
+	  Original commit message from CVS:
+	  remove wrong commit
+
+2006-05-31 16:21:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: Handle DISCONT.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_reset),
+	  (gst_visual_sink_setcaps), (gst_visual_sink_event),
+	  (gst_visual_src_event), (get_buffer), (gst_visual_chain):
+	  Handle DISCONT.
+	  Use running time before doing QoS.
+	  Handle mono too.
+
+2006-05-31 14:17:30 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  docs/libs/Makefile.am: set a magic variable to indicate we know the docs are incomplete
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  set a magic variable to indicate we know the docs are incomplete
+
+2006-05-30 20:33:59 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/common/libgstvideo.def: export gst_video_calculate_display_ratio
+	  Original commit message from CVS:
+	  * win32/common/libgstvideo.def:
+	  export gst_video_calculate_display_ratio
+	  * win32/vs6/libgstvideoscale.dsp:
+	  add link to libgstvideo-0.10.lib
+
+2006-05-30 19:00:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Throw a more comprehensible error for rtsp:// URIs (rather than erroring out with a ne...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gen_source_element):
+	  Throw a more comprehensible error for rtsp:// URIs (rather
+	  than erroring out with a negotiation error later on) until
+	  we fix playbin to handle rtspsrc etc.
+
+2006-05-30 16:09:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/pango/gsttextoverlay.c: Added some FIXMEs.
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_src_event),
+	  (gst_text_overlay_text_event):
+	  Added some FIXMEs.
+
+2006-05-30 16:07:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.*: Implement release_request_pad.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_class_init), (gst_adder_init),
+	  (gst_adder_request_new_pad), (gst_adder_release_pad):
+	  * gst/adder/gstadder.h:
+	  Implement release_request_pad.
+	  Make padcounter atomic.
+	  * tests/check/elements/adder.c: (GST_START_TEST), (adder_suite):
+	  Added check for release_pad in adder.
+
+2006-05-30 16:04:14 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Fix build again.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_chain_new_stream):
+	  Fix build again.
+
+2006-05-30 14:59:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/ogg/gstoggdemux.c: add more debugging clean up printf formats for granulepos and serialno
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind),
+	  (gst_ogg_demux_chain_elem_pad), (gst_ogg_demux_queue_data),
+	  (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
+	  (gst_ogg_pad_submit_page), (gst_ogg_chain_new_stream),
+	  (gst_ogg_demux_seek), (gst_ogg_demux_get_data),
+	  (gst_ogg_demux_get_next_page), (gst_ogg_demux_do_seek),
+	  (gst_ogg_demux_bisect_forward_serialno),
+	  (gst_ogg_demux_read_chain), (gst_ogg_demux_find_chains),
+	  (gst_ogg_demux_chain), (gst_ogg_demux_loop), (gst_ogg_print):
+	  add more debugging
+	  clean up printf formats for granulepos and serialno
+
+2006-05-30 14:31:43 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	* tests/check/generic/states.c:
+	  properly fail if we can't make an element
+	  Original commit message from CVS:
+	  properly fail if we can't make an element
+
+2006-05-30 13:22:58 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.*: Multi-channel caps negotiation, so we can do proper multichannel vorbis encoding, negotiated ...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (raw_caps_factory),
+	  (gst_vorbis_enc_class_init), (gst_vorbis_enc_dispose),
+	  (gst_vorbis_enc_generate_sink_caps), (gst_vorbis_enc_sink_getcaps),
+	  (gst_vorbis_enc_init), (gst_vorbis_enc_buffer_from_header_packet),
+	  (gst_vorbis_enc_chain), (gst_vorbis_enc_change_state):
+	  * ext/vorbis/vorbisenc.h:
+	  Multi-channel caps negotiation, so we can do proper multichannel
+	  vorbis encoding, negotiated through audioconvert.
+
+2006-05-30 11:45:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/elements/adder.c: Added check to show that #339935 is fixed with ongoing adder and collectpads fixes.
+	  Original commit message from CVS:
+	  * tests/check/elements/adder.c: (test_event_message_received),
+	  (test_play_twice_message_received), (GST_START_TEST),
+	  (adder_suite):
+	  Added check to show that #339935 is fixed with ongoing
+	  adder and collectpads fixes.
+
+2006-05-29 17:19:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.c: Don't leak pad name.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_request_new_pad):
+	  Don't leak pad name.
+
+2006-05-29 15:49:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.c: Fix adder seeking.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_query_duration),
+	  (forward_event_func), (forward_event), (gst_adder_src_event):
+	  Fix adder seeking.
+	  Make query/seeking code threadsafe.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/adder.c: (test_event_message_received),
+	  (GST_START_TEST), (test_play_twice_message_received):
+	  Fix adder test case.
+
+2006-05-29 13:21:00 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/playback/gstplaybasebin.*: Add 'subtitle-encoding' property to playbin, so applications can force a subtitle enco...
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (gst_play_base_bin_init), (gst_play_base_bin_dispose),
+	  (set_encoding_element), (decodebin_element_added_cb),
+	  (decodebin_element_removed_cb), (setup_subtitle), (setup_source),
+	  (gst_play_base_bin_set_property), (gst_play_base_bin_get_property):
+	  * gst/playback/gstplaybasebin.h:
+	  Add 'subtitle-encoding' property to playbin, so applications can
+	  force a subtitle encoding for non-UTF8 subtitles (#342268).
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init),
+	  (gst_sub_parse_set_property):
+	  Rename recently-added 'encoding' property to 'subtitle-encoding'
+	  (so it can be proxied by playbin/decodebin in a generic way
+	  with less danger of false positives).
+
+2006-05-29 11:04:48 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/gstaudioconvert.c: Patch from #341562: give more specific audio caps in get_caps, so that basetransf...
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstaudioconvert.c: (make_lossless_changes),
+	  (append_with_other_format), (set_structure_widths),
+	  (gst_audio_convert_transform_caps):
+	  Patch from #341562: give more specific audio caps in get_caps, so
+	  that basetransform  can make better decisions on what caps to
+	  negotiate.
+
+2006-05-28 20:04:12 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/volume.c: make it compile again
+	  Original commit message from CVS:
+	  * tests/check/elements/volume.c:
+	  make it compile again
+
+2006-05-28 19:56:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/volume.c: disable test until #343196 gets resolved
+	  Original commit message from CVS:
+	  * tests/check/elements/volume.c: (volume_suite):
+	  disable test until #343196 gets resolved
+
+2006-05-28 19:42:27 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/gstadder.c: Make it easier to copy&paste
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_get_type):
+	  Make it easier to copy&paste
+	  * gst/volume/Makefile.am:
+	  * gst/volume/gstvolume.c: (volume_update_real_volume),
+	  (gst_volume_set_volume), (gst_volume_set_mute),
+	  (gst_volume_class_init), (volume_process_int16), (volume_set_caps),
+	  (volume_transform_ip), (volume_update_mute),
+	  (volume_update_volume):
+	  * gst/volume/gstvolume.h:
+	  Add own debug category, move duplicate code to helper function, fix
+	  property texts, add more comments and prepare ffor liboil-goodness
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/volume.c: (GST_START_TEST), (volume_suite):
+	  add test for mute and passtrough case, be a bit more verbose to track
+	  failure
+	  * tests/check/generic/states.c: (GST_START_TEST):
+	  catch elements that fail to instantiate
+
+2006-05-28 09:37:18 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/pipelines/: Comment out tests using parse_launch() if core was built without parsing capabilities.
+	  Original commit message from CVS:
+	  * tests/check/pipelines/simple-launch-lines.c:
+	  * tests/check/pipelines/theoraenc.c:
+	  * tests/check/pipelines/vorbisenc.c:
+	  Comment out tests using parse_launch() if core was built without
+	  parsing capabilities.
+
+2006-05-27 13:34:03 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/check/Makefile.am: Extra bonus points for whoever explains to ensonic that you are meant to test unit tests tho...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Extra bonus points for whoever explains to ensonic that you are meant
+	  to test unit tests thoroughly before commiting them, especially if
+	  you know it's going to break.
+	  De-activated element/adder tests.
+
+2006-05-27 13:09:16 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Marking caps conversion issues as GST_WARNING is way too verbose,
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_smpfmt_to_caps):
+	  Marking caps conversion issues as GST_WARNING is way too verbose,
+	  Moving them to GST_LOG.
+
+2006-05-27 11:26:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  README: Replace current README (containing the release notes from some 0.9.x version) with a proper README taken from...
+	  Original commit message from CVS:
+	  * README:
+	  Replace current README (containing the release notes from
+	  some 0.9.x version) with a proper README taken from the core.
+
+2006-05-26 15:52:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Small cleanups.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
+	  (vorbis_dec_src_event), (vorbis_dec_sink_event), (vorbis_do_clip),
+	  (vorbis_dec_push), (vorbis_handle_data_packet), (vorbis_dec_chain),
+	  (vorbis_dec_change_state):
+	  Small cleanups.
+	  Add some FIXMEs
+	  Clip output samples to segment boundaries.
+
+2006-05-26 11:17:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/ximage/ximagesink.c: Improve the errors produced on bad output, including some human readable description strings.
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+	  (gst_ximagesink_xcontext_get), (gst_ximagesink_show_frame):
+	  Improve the errors produced on bad output, including some human
+	  readable description strings.
+	  Handle the (theoretical for ximagesink) case where the XServer
+	  has a different idea about the size required for a particular
+	  frame and gives us too small a memory allocation.
+
+2006-05-26 10:18:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	  Mention bugs fixed by previous commit
+	  Original commit message from CVS:
+	  Mention bugs fixed by previous commit
+
+2006-05-26 09:40:35 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/xvimage/xvimagesink.c: Improve the errors produced on bad output, including some human readable description strings.
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_get_xv_support), (gst_xvimagesink_xcontext_get),
+	  (gst_xvimagesink_get_format_from_caps), (gst_xvimagesink_setcaps),
+	  (gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
+	  Improve the errors produced on bad output, including some human
+	  readable description strings.
+	  Handle RGB Xv formats properly by transforming them into our
+	  big-endian caps description.
+	  Use gst_caps_truncate to ensure that we never try and choose a
+	  non-fixed caps in buffer_alloc.
+	  Handle the case where the XServer has a different idea about the size
+	  required for a particular frame and gives us too small a memory
+	  allocation.
+	  Use -1 to indicate 'no image format', because 0 is a valid XServer
+	  image format number.
+	  Put RGB Xv formats at the end of the caps, so that we always prefer
+	  YUV format frames.
+	  Iterate the available Xv Encodings to determine the maximum width and
+	  height, and then return that in our caps.
+
+2006-05-25 16:50:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstdecodebin.c: When there is only one unfinished pad and it receives an event that doesn't match our re...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (remove_fakesink), (pad_probe):
+	  When there is only one unfinished pad and it receives an event that
+	  doesn't match our requirements, we need to set alldone=FALSE so that
+	  the fakesink is not removed yet.
+
+2006-05-25 09:32:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggdemux.c: Use gst_type_find_helper_for_buffer() to find the type of stream from the first packet.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind):
+	  Use gst_type_find_helper_for_buffer() to find the type
+	  of stream from the first packet.
+	  * configure.ac:
+	  Bump requirements to core CVS (needed for vorbis
+	  typefinding to work).
+
+2006-05-24 08:34:53 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Added the 'prfl' atom type which MQV (no, it's not a typo) files contain.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+	  Added the 'prfl' atom type which MQV (no, it's not a typo) files contain.
+	  Else they play perfectly fine with qtdemux.
+
+2006-05-23 20:38:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  make more debug catagories static
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/theora/theoraparse.c: (gst_theora_parse_class_init):
+	  * gst/audiorate/gstaudiorate.c:
+	  make more debug catagories static
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/adder.c: (message_received),
+	  (test_event_message_received), (GST_START_TEST),
+	  (test_play_twice_message_received), (adder_suite):
+	  added test case for using element twice, extra bonus points for anyone
+	  who can make these test run reliably
+
+2006-05-23 15:18:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/theora/theoradec.c: Make work with time-stamped input buffers that do not have a granulepos in BUFFER_OFFSET_END ...
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_chain):
+	  Make work with time-stamped input buffers that do not
+	  have a granulepos in BUFFER_OFFSET_END (like theora
+	  buffers coming from matroskademux). Fixes #342448.
+
+2006-05-22 15:53:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/gdp/: Handle error cases when calling functions do downwards state change after parent's change_state
+	  Original commit message from CVS:
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain),
+	  (gst_gdp_depay_change_state):
+	  * gst/gdp/gstgdpdepay.h:
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader),
+	  (gst_gdp_pay_chain), (gst_gdp_pay_sink_event),
+	  (gst_gdp_pay_change_state):
+	  * gst/gdp/gstgdppay.h:
+	  Handle error cases when calling functions
+	  do downwards state change after parent's change_state
+	  * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+	  * tests/check/elements/gdppay.c: (GST_START_TEST):
+	  clean up more
+
+2006-05-22 13:25:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  adding GDP payloader and depayloader.  Build integration will follow later when the GDP issues for core are sorted out.
+	  Original commit message from CVS:
+	  * gst/gdp/Makefile.am:
+	  * gst/gdp/gstgdp.c: (plugin_init):
+	  * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_base_init),
+	  (gst_gdp_depay_class_init), (gst_gdp_depay_init),
+	  (gst_gdp_depay_finalize), (gst_gdp_depay_chain),
+	  (gst_gdp_depay_change_state), (gst_gdp_depay_plugin_init):
+	  * gst/gdp/gstgdpdepay.h:
+	  * gst/gdp/gstgdppay.c: (gst_gdp_pay_base_init),
+	  (gst_gdp_pay_class_init), (gst_gdp_pay_init),
+	  (gst_gdp_pay_dispose), (gst_gdp_stamp_buffer),
+	  (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer),
+	  (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader),
+	  (gst_gdp_queue_buffer), (gst_gdp_pay_chain),
+	  (gst_gdp_pay_sink_event), (gst_gdp_pay_change_state),
+	  (gst_gdp_pay_plugin_init):
+	  * gst/gdp/gstgdppay.h:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+	  (cleanup_gdpdepay), (gdpdepay_push_per_byte), (GST_START_TEST),
+	  (setup_gdpdepay_streamheader), (gdpdepay_suite), (main):
+	  * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay),
+	  (GST_START_TEST), (setup_gdppay_streamheader), (gdppay_suite),
+	  (main):
+	  adding GDP payloader and depayloader.  Build integration will
+	  follow later when the GDP issues for core are sorted out.
+
+2006-05-22 11:42:03 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+	  gst/tcp/Makefile.am: fdstresstest doesn't need Gtk+, fix compilation if gtk is not available (#342566).
+	  Original commit message from CVS:
+	  Patch by: Peter Kjellerstedt  <pkj at axis com>
+	  * gst/tcp/Makefile.am:
+	  fdstresstest doesn't need Gtk+, fix compilation if
+	  gtk is not available (#342566).
+
+2006-05-19 17:57:56 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpaudiopayload.c: 80 line columns
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  80 line columns
+	  Removed redundant floor()
+
+2006-05-19 15:00:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-read.c: On second thought, just skip JUNK chunks automatically, so the caller doesn't have to ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk):
+	  On second thought, just skip JUNK chunks automatically, so
+	  the caller doesn't have to handle this. Fixes #342345.
+	  Also, return GST_FLOW_UNEXPECTED if we get a short read,
+	  not GST_FLOW_ERROR.
+
+2006-05-19 13:37:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-read.c: Don't bail out on JUNK chunks with a size of 0 (would try to pull_range 0 bytes before...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk):
+	  Don't bail out on JUNK chunks with a size of 0 (would try to
+	  pull_range 0 bytes before, which sources don't like too much).
+	  See #342345.
+
+2006-05-19 13:02:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Use the gstutil scaling function to preserve 64 bits while calculating output width and height from the display-aspec...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_fixate_caps):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps):
+	  Use the gstutil scaling function to preserve 64 bits while calculating
+	  output width and height from the display-aspect-ratio. (A continuation
+	  of #341542)
+
+2006-05-19 11:50:17 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/xvimage/xvimagesink.*: When performing buffer allocations, remember the caps and image format we return so that i...
+	  Original commit message from CVS:
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
+	  (gst_xvimagesink_buffer_alloc):
+	  * sys/xvimage/xvimagesink.h:
+	  When performing buffer allocations, remember the caps and image format
+	  we return so that if the same caps are asked for next time we can
+	  return them immediately without doing any caps intersections.
+
+2006-05-18 23:00:02 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/README: Some new documentation
+	  Original commit message from CVS:
+	  2006-05-18 Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+	  * gst-libs/gst/rtp/README:
+	  Some new documentation
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Added GST_RTP_PAYLOAD_DYNAMIC_STRING for use by children
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  New RTP audio base payloader class. Supports frame or sample based codecs.
+	  Not enabled in Makefile.am until approved.
+
+2006-05-18 20:30:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/elements/alsa.c: Fix test case: don't try to free NULL GValueArray when there are no devices.
+	  Original commit message from CVS:
+	  * tests/check/elements/alsa.c: (test_device_property_probe):
+	  Fix test case: don't try to free NULL GValueArray when there
+	  are no devices.
+
+2006-05-18 19:21:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/: Add simple test that runs a device property probe on alsasrc, alsasink and alsamixer. Disable valgrind ...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/alsa.c: (test_device_property_probe),
+	  (alsa_suite), (main):
+	  Add simple test that runs a device property probe on alsasrc,
+	  alsasink and alsamixer. Disable valgrind check for now (too
+	  many leaks in libasound, and valgrind ignored my suppressions
+	  additions).
+
+2006-05-18 17:19:39 +0000  Martin Szulecki <gnomebugzilla@sukimashita.com>
+
+	  ext/alsa/: Clean up and simplify alsa device probing. Make it actually work for multiple classes. Don't cache results...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsadeviceprobe.c: (gst_alsa_get_device_list),
+	  (gst_alsa_device_property_probe_probe_property),
+	  (gst_alsa_device_property_probe_needs_probe),
+	  (gst_alsa_device_property_probe_get_values),
+	  (gst_alsa_type_add_device_property_probe_interface):
+	  * ext/alsa/gstalsadeviceprobe.h:
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_init_interfaces):
+	  * ext/alsa/gstalsamixerelement.h:
+	  Clean up and simplify alsa device probing. Make it actually work
+	  for multiple classes. Don't cache results any longer.
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_init_interfaces),
+	  (gst_alsasink_init):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_dispose),
+	  (gst_alsasrc_interface_supported), (gst_implements_interface_init),
+	  (gst_alsasrc_init_interfaces), (gst_alsasrc_set_property):
+	  Make alsasink and alsasrc implement the GstPropertyProbe interface
+	  for device probing (#342181).
+	  Patch by: Martin Szulecki  <gnomebugzilla at sukimashita com>
+
+2006-05-18 10:05:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/samiparse.c: Don't ignore return value of strtol (++compiler_happiness).
+	  Original commit message from CVS:
+	  * gst/subparse/samiparse.c: (handle_start_font):
+	  Don't ignore return value of strtol (++compiler_happiness).
+
+2006-05-17 17:49:10 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/gstsubparse.*: Add 'encoding' property (#341681).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist chollian net>
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (gst_sub_parse_class_init), (gst_sub_parse_init),
+	  (gst_sub_parse_set_property), (gst_sub_parse_get_property),
+	  (convert_encoding):
+	  * gst/subparse/gstsubparse.h:
+	  Add 'encoding' property (#341681).
+	  * gst/subparse/samiparse.c: (characters_sami):
+	  Output is pango markup, so we need to escape text
+	  between tags (#342143).
+
+2006-05-16 17:34:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: It's okay to have caps with channels=1 and a channel position different from GST_A...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_check_channel_positions):
+	  It's okay to have caps with channels=1 and a channel position
+	  different from GST_AUDIO_CHANNEL_POSITION_FRONT_MONO
+	  (deinterleavers might want to keep the position in the caps,
+	  so that they can be re-interleaved again properly later).
+	  Leave check for unexpected 2-channel layouts intact for now.
+
+2006-05-16 16:28:10 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+	  gst/tcp/gsttcp.c: Return GST_FLOW_UNEXPECTED when we have an eos on the socket so basesrc can do its job correctly.
+	  Original commit message from CVS:
+	  2006-05-16  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+	  * gst/tcp/gsttcp.c: (gst_tcp_socket_read):
+	  Return GST_FLOW_UNEXPECTED when we have an eos on the socket so
+	  basesrc can do its job correctly.
+
+2006-05-16 15:52:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/: Refactor and improve caps probing code: probe signedness when we probe the supported formats/widths; set e...
+	  Original commit message from CVS:
+	  * ext/alsa/Makefile.am:
+	  * ext/alsa/gstalsa.c: (gst_alsa_detect_rates),
+	  (gst_alsa_detect_formats), (get_channel_free_structure),
+	  (caps_add_channel_configuration), (gst_alsa_detect_channels),
+	  (gst_alsa_probe_supported_formats):
+	  * ext/alsa/gstalsa.h:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_getcaps):
+	  Refactor and improve caps probing code: probe signedness
+	  when we probe the supported formats/widths; set endianness
+	  to the one we actually probed for (ie. cpu endianness).
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_init), (gst_alsasrc_getcaps),
+	  (gst_alsasrc_close):
+	  * ext/alsa/gstalsasrc.h:
+	  Implement caps probing for alsasrc.
+
+2006-05-15 17:42:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Cleanups, add some G_LIKELY.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (gst_theora_dec_reset),
+	  (theora_dec_src_query), (theora_dec_src_event),
+	  (theora_dec_sink_event), (theora_handle_comment_packet),
+	  (theora_handle_data_packet), (theora_dec_change_state):
+	  Cleanups, add some G_LIKELY.
+	  Use segment helpers instead of our own wrong code.
+	  Clear queued buffers on seek and READY.
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_reset),
+	  (vorbis_dec_convert), (vorbis_dec_src_query),
+	  (vorbis_dec_src_event), (vorbis_dec_sink_event),
+	  (vorbis_handle_comment_packet), (vorbis_dec_push),
+	  (vorbis_handle_data_packet), (vorbis_dec_chain),
+	  (vorbis_dec_change_state):
+	  * ext/vorbis/vorbisdec.h:
+	  Remove old useless packetno variable.
+	  Do position query properly.
+	  Add some G_LIKELY.
+	  Do cleanup of queued buffers in new helper function
+	  and use it.
+
+2006-05-15 17:17:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsasink.c: Query supported sample rates. Fixes #341732.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_getcaps):
+	  Query supported sample rates. Fixes #341732.
+
+2006-05-15 17:01:02 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gstdecodebin.c: Make decodebin reusable when going from PAUSE_TO_READY and then back to PAUSED.
+	  Original commit message from CVS:
+	  2006-05-15  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gstdecodebin.c: (cleanup_decodebin),
+	  (gst_decode_bin_change_state): Make decodebin reusable
+	  when going from PAUSE_TO_READY and then back to PAUSED.
+	  Fixes #331678.
+
+2006-05-15 16:49:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Cleanups. Use refcounting and DEBUG_OBJECT.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_get_query_types),
+	  (vorbis_dec_convert), (vorbis_dec_src_query),
+	  (vorbis_dec_sink_query), (vorbis_dec_src_event),
+	  (vorbis_dec_sink_event), (vorbis_handle_identification_packet),
+	  (vorbis_dec_clean_queued), (vorbis_dec_push),
+	  (vorbis_handle_data_packet), (vorbis_dec_change_state):
+	  Cleanups. Use refcounting and DEBUG_OBJECT.
+	  Reset segment on flush, use code methods instead of our
+	  own wrong version.
+	  Fix potential memleak.
+
+2006-05-15 16:46:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsasink.*: Don't leak allocated snd_output_t structure if there's more than one alsasink instance at a t...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_finalise),
+	  (gst_alsasink_init):
+	  * ext/alsa/gstalsasink.h:
+	  Don't leak allocated snd_output_t structure if there's
+	  more than one alsasink instance at a time (#341873).
+	  Also fix GObject macros in header file.
+
+2006-05-15 15:31:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Don't use libxml functions in the typefinding code.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect):
+	  Don't use libxml functions in the typefinding code.
+
+2006-05-15 15:01:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Fix seeking performance in the case where a non-header packet has a 0 granulepos (busted theor...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet):
+	  Fix seeking performance in the case where a non-header
+	  packet has a 0 granulepos (busted theora case).
+	  Fixes #341719
+
+2006-05-15 14:19:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Improve SAMI typefinding: handle case where there are whitespaces or newlines in front of...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c:
+	  (gst_sub_parse_data_format_autodetect):
+	  Improve SAMI typefinding: handle case where there are
+	  whitespaces or newlines in front of the first <SAMI>
+	  tag (#169936).
+
+2006-05-15 12:18:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Build video4linux plugin even if there's no XVIDEO, just without implementing the GstXOverlay interface...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Build video4linux plugin even if there's no XVIDEO, just
+	  without implementing the GstXOverlay interface (#334002).
+
+2006-05-15 10:17:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add tentative support for libvisual-0.4 (#336881).
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/libvisual/visual.c: (gst_visual_actor_plugin_is_gl),
+	  (plugin_init):
+	  Add tentative support for libvisual-0.4 (#336881).
+
+2006-05-15 09:41:03 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/samiparse.c: Need to map "silver" colour explicitly (#169936).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha <ganadist at chollian net>
+	  * gst/subparse/samiparse.c: (handle_start_font):
+	  Need to map "silver" colour explicitly (#169936).
+
+2006-05-15 09:14:35 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  gst/subparse/: Add support for SAMI subtitles (#169936).
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (parser_state_dispose), (gst_sub_parse_data_format_autodetect),
+	  (gst_sub_parse_format_autodetect), (feed_textbuf),
+	  (gst_subparse_type_find), (plugin_init):
+	  * gst/subparse/gstsubparse.h:
+	  * gst/subparse/samiparse.c:
+	  * gst/subparse/samiparse.h:
+	  Add support for SAMI subtitles (#169936).
+
+2006-05-14 21:18:58 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* win32/common/config.h:
+	  update config.h
+	  Original commit message from CVS:
+	  update config.h
+
+2006-05-14 21:18:16 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/README:
+	  fix mistakes in README
+	  Original commit message from CVS:
+	  fix mistakes in README
+
+2006-05-14 18:15:17 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioconvert/gstchannelmix.c: Fix #341696: crash when mixing L+R+C to mono or stereo.
+	  Original commit message from CVS:
+	  * gst/audioconvert/gstchannelmix.c: (gst_channel_mix_fill_others):
+	  Fix #341696: crash when mixing L+R+C to mono or stereo.
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/audioconvert.c: (set_channel_positions),
+	  (get_float_mc_caps), (get_int_mc_caps), (GST_START_TEST),
+	  (audioconvert_suite):
+	  Add test for the above, including some generic framework bits for
+	  testing multichannel things.
+
+2006-05-14 16:05:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* configure.ac:
+	  Back to CVS
+	  Original commit message from CVS:
+	  Back to CVS
+
+=== release 0.10.7 ===
+
+2006-05-14 16:00:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: releasing 0.10.7, "Leave the gun"
+	  Original commit message from CVS:
+	  2006-05-14  Jan Schmidt <thaytan@mad.scientist.com>
+	  * configure.ac:
+	  releasing 0.10.7, "Leave the gun"
+
+2006-05-14 15:55:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* common:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-05-12 22:22:37 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Fix the build.
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_fixate_caps):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps):
+	  Fix the build.
+
+2006-05-12 21:30:00 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Fix integer overflow problem with pixel-aspect-ratio calculations in videoscale and xvimagesink (#341542)
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/video/video.c: (gst_video_calculate_display_ratio):
+	  * gst-libs/gst/video/video.h:
+	  * gst/videoscale/Makefile.am:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_fixate_caps):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_setcaps):
+	  * tests/check/Makefile.am:
+	  * tests/check/libs/video.c: (GST_START_TEST), (video_suite),
+	  (main):
+	  Fix integer overflow problem with pixel-aspect-ratio calculations
+	  in videoscale and xvimagesink (#341542)
+
+2006-05-12 16:56:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstid3tag.c: Map GST_IMAGE_TAG to and from ID2v2 APIC frames (#341557).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Map GST_IMAGE_TAG to and from ID2v2 APIC frames (#341557).
+
+2006-05-12 10:39:08 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/MANIFEST: update win32 files listing
+	  Original commit message from CVS:
+	  * win32/MANIFEST:
+	  update win32 files listing
+
+2006-05-11 21:47:01 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  disable failing check on gentoo64
+	  Original commit message from CVS:
+	  disable failing check on gentoo64
+
+2006-05-11 21:35:44 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  disable failing check on gentoo64
+	  Original commit message from CVS:
+	  disable failing check on gentoo64
+
+2006-05-11 21:20:20 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  macros show the correct line
+	  Original commit message from CVS:
+	  macros show the correct line
+
+2006-05-11 21:04:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  macros show the correct line
+	  Original commit message from CVS:
+	  macros show the correct line
+
+2006-05-11 21:01:05 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/playback/gstplaybasebin.*: API: GstPlayBaseBin::stream-info-value-array property use a more bindings-friendly way...
+	  Original commit message from CVS:
+	  2006-05-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+	  patch by: Sjoerd Simons (sjoerd@luon.net)
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+	  (group_create), (group_destroy), (add_stream),
+	  (gst_play_base_bin_get_property),
+	  (gst_play_base_bin_get_streaminfo_value_array):
+	  * gst/playback/gstplaybasebin.h:
+	  API: GstPlayBaseBin::stream-info-value-array property
+	  use a more bindings-friendly way of exposing streaminfo
+	  using a GValueArray.  Tested in ipython.
+	  Closes #341114
+
+2006-05-11 19:44:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  fix some type warnings
+	  Original commit message from CVS:
+	  fix some type warnings
+
+2006-05-11 19:38:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Also catch queue underruns but don't do anything yet.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (try_to_link_1), (queue_enlarge),
+	  (queue_underrun_cb), (queue_filled_cb):
+	  Also catch queue underruns but don't do anything yet.
+	  Refactor and comment queue enlarging code a bit.
+	  * gst/playback/gstplaybasebin.c: (queue_overrun),
+	  (queue_threshold_reached), (queue_out_of_data),
+	  (gen_preroll_element):
+	  If a queue over/underruns check that we don't create nasty
+	  deadlocks when the min-threshold is not reached but the
+	  max-bytes is. In those cases disable max-bytes when we
+	  know that the queue is fed timed data.
+	  Add more comments.
+
+2006-05-11 18:06:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Make playbin automatically plug an 'audioresample' element before the audio sink as well. ...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_audio_element):
+	  Make playbin automatically plug an 'audioresample'
+	  element before the audio sink as well. This solves
+	  problems with sinks that only accept a very specific
+	  sample rate, like esdsink (e.g. #340379).
+
+2006-05-11 16:04:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Make http sources send special headers so that we receive icecast metadata if the http...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gen_source_element):
+	  Make http sources send special headers so that we receive
+	  icecast metadata if the http stream is an icecast stream
+	  (otherwise the server will just ignore them). This also
+	  means that from now on users will need the 'icydemux'
+	  element from gst-plugins-good installed if they want to
+	  listen to icecast radio streams. (#341432, #333657).
+
+2006-05-11 12:34:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  more commenting
+	  Original commit message from CVS:
+	  more commenting
+
+2006-05-11 11:40:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gstmultifdsink.c: remove stupid example from docs - it should come with a simple
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_remove_client_link),
+	  (gst_multi_fd_sink_new_client), (gst_multi_fd_sink_stop):
+	  remove stupid example from docs - it should come with a simple
+	  C program instead.
+	  Clean up/fix docs
+	  * tests/check/elements/multifdsink.c: (wait_bytes_served),
+	  (fail_if_can_read), (GST_START_TEST),
+	  (gst_multifdsink_create_streamheader), (multifdsink_suite):
+	  add a test for changing streamheader which exposes a bug in
+	  multifdsink
+
+2006-05-11 10:33:46 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/gnomevfs/gstgnomevfssrc.*: Don't set icy-caps unless we have a sane interval value. Move interval to a local vari...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_init),
+	  (gst_gnome_vfs_src_received_headers_callback):
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  Don't set icy-caps unless we have a sane interval value. Move
+	  interval to a local variable; we never use it outside this function.
+
+2006-05-11 10:14:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  sys/: Register special buffer types along with the objects so that they are not registered at runtime from N differen...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_get_type):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_type):
+	  Register special buffer types along with the objects so
+	  that they are not registered at runtime from N different
+	  streaming threads since they are not threadsafe.
+
+2006-05-10 18:31:27 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/multifdsink.c:
+	  set caps and plug leaks
+	  Original commit message from CVS:
+	  set caps and plug leaks
+
+2006-05-10 18:16:23 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/elements/multifdsink.c: add two more tests, one doing streamheader
+	  Original commit message from CVS:
+	  * tests/check/elements/multifdsink.c: (wait_bytes_served),
+	  (GST_START_TEST), (fail_unless_read), (multifdsink_suite):
+	  add two more tests, one doing streamheader
+
+2006-05-10 16:34:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/tcp/gstmultifdsink.c: clean up the bufqueue when shutting down
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_stop):
+	  clean up the bufqueue when shutting down
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/multifdsink.c: (setup_multifdsink),
+	  (cleanup_multifdsink), (GST_START_TEST), (multifdsink_suite),
+	  (main):
+	  add a test for the leak that was just fixed
+
+2006-05-10 15:16:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  DEBUG_FUNCPTR'ing
+	  Original commit message from CVS:
+	  DEBUG_FUNCPTR'ing
+
+2006-05-10 15:14:30 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	  whitespace fixes
+	  Original commit message from CVS:
+	  whitespace fixes
+
+2006-05-10 11:54:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.*: Updated some docs. Added comments and FIXMEs all over the place.
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_setcaps),
+	  (gst_adder_query_duration), (gst_adder_query), (forward_event),
+	  (gst_adder_src_event), (gst_adder_sink_event),
+	  (gst_adder_class_init), (gst_adder_finalize),
+	  (gst_adder_request_new_pad), (gst_adder_collected):
+	  * gst/adder/gstadder.h:
+	  Updated some docs. Added comments and FIXMEs all over the place.
+	  Improve debugging info.
+	  Fix leak on finalize by not calling the parent.
+	  Implement duration query.
+	  Make event forwarding threadsafe.
+	  Correctly send NEWSEGMENT at start and after flush.
+	  Handle EOS correctly.
+	  Post error when not negotiated.
+	  * tests/check/elements/adder.c: (GST_START_TEST):
+	  Added FIXME in the test.
+
+2006-05-09 19:24:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Const-ify GEnumValue and GFlagsValue arrays. Use
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_valign_get_type),
+	  (gst_text_overlay_halign_get_type),
+	  (gst_text_overlay_wrap_mode_get_type):
+	  * ext/theora/theoradec.c: (theora_handle_type_packet),
+	  (theora_handle_data_packet):
+	  * ext/theora/theoraenc.c: (gst_border_mode_get_type),
+	  (theora_enc_sink_setcaps), (theora_enc_chain):
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_mode_get_type):
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audiostestsrc_wave_get_type):
+	  * gst/playback/gststreaminfo.c: (gst_stream_type_get_type):
+	  * gst/tcp/gstfdset.c: (gst_fdset_mode_get_type):
+	  * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+	  (gst_sync_method_get_type), (gst_unit_type_get_type),
+	  (gst_client_status_get_type):
+	  * gst/videoscale/gstvideoscale.c:
+	  (gst_video_scale_method_get_type):
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_pattern_get_type):
+	  * gst/videotestsrc/videotestsrc.c: (paint_setup_I420),
+	  (paint_setup_YV12), (paint_setup_YUY2), (paint_setup_UYVY),
+	  (paint_setup_YVYU), (paint_setup_IYU2), (paint_setup_Y41B),
+	  (paint_setup_Y42B), (paint_setup_Y800), (paint_setup_YVU9),
+	  (paint_setup_YUV9), (paint_setup_RGB888), (paint_setup_BGR888),
+	  (paint_setup_RGB565), (paint_setup_xRGB1555):
+	  Const-ify GEnumValue and GFlagsValue arrays. Use
+	  GST_ROUND_UP_* macros instead of home-made ones.
+
+2006-05-09 17:40:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Require core CVS for the new newsegment stuff.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Require core CVS for the new newsegment stuff.
+
+2006-05-09 17:30:48 +0000  Sjoerd Simons <sjoerd@luon.net>
+
+	  gst/tcp/gstmultifdsink.c: Register nick for enum value (#341160).
+	  Original commit message from CVS:
+	  Patch by: Sjoerd Simons  <sjoerd at luon net>
+	  * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type):
+	  Register nick for enum value (#341160).
+
+2006-05-09 16:46:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/typefind/gsttypefindfunctions.c: backout typefind patch #340375
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (m4a_type_find),
+	  (plugin_init):
+	  backout typefind patch #340375
+	  * tests/check/elements/adder.c: (message_received),
+	  (GST_START_TEST), (adder_suite):
+	  redo, signal-handling of test
+
+2006-05-09 16:14:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/adder/gstadder.*: Remove bogus segment merging and forwarding, we don't care about timestamps anyway and we just ...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_request_new_pad),
+	  (gst_adder_collected):
+	  * gst/adder/gstadder.h:
+	  Remove bogus segment merging and forwarding, we don't
+	  care about timestamps anyway and we just produce a
+	  continuous stream.
+	  Also create a nice NEWSEGMENT event when we start.
+	  Use _scale_int some more.
+
+2006-05-09 11:59:13 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/icles/stress-xoverlay.c: Fix if core was built without parsing support.
+	  Original commit message from CVS:
+	  * tests/icles/stress-xoverlay.c:
+	  Fix if core was built without parsing support.
+
+2006-05-09 11:37:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Add SEDG (Samsung MPEG-4) fourcc.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Add SEDG (Samsung MPEG-4) fourcc.
+
+2006-05-09 11:31:47 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/examples/volume/volume.c: Fox if core was built without parsing support.
+	  Original commit message from CVS:
+	  * tests/examples/volume/volume.c:
+	  Fox if core was built without parsing support.
+	  * tests/examples/seek/seek.c:
+	  Disable the parse_launch example if core was built without parsing
+	  support.
+
+2006-05-09 11:21:24 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  tests/examples/seek/seek.c: Disable the parse_launch example if core was built without parsing support.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c:
+	  Disable the parse_launch example if core was built without parsing
+	  support.
+
+2006-05-08 15:51:15 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/videoscale/gstvideoscale.c:
+	  doc reparagraphing and DEBUG_FUNCPTRing
+	  Original commit message from CVS:
+	  doc reparagraphing and DEBUG_FUNCPTRing
+
+2006-05-08 11:51:43 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize
+	  Original commit message from CVS:
+	  * autogen.sh: (CONFIGURE_DEF_OPT):
+	  libtoolize on Darwin/MacOSX is called glibtoolize
+
+2006-05-07 17:39:04 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/: Disable the adder test, until the build-slaves posses the kindness to either like it or to give valid r...
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/adder.c: (event_loop), (GST_START_TEST):
+	  Disable the adder test, until the build-slaves posses the kindness to
+	  either like it or to give valid reason for not doing so
+
+2006-05-07 17:25:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  tests/check/elements/adder.c: Shuffle NULL state change around and raise timeout more
+	  Original commit message from CVS:
+	  * tests/check/elements/adder.c: (event_loop), (GST_START_TEST),
+	  (adder_suite):
+	  Shuffle NULL state change around and raise timeout more
+
+2006-05-07 17:07:03 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Add typefind to distinguish between "audio/x-m4a" and new type "video/mp4". Fixe...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp4_find_box),
+	  (mp4_type_find), (plugin_init):
+	  Add typefind to distinguish between "audio/x-m4a" and new type
+	  "video/mp4". Fixes #340375
+	  * tests/check/elements/adder.c: (adder_suite):
+	  Raise timeout to make buildbot happy
+
+2006-05-07 16:39:36 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add sink-event handling to adder. It tries to merge incomming newsegment-events. Added test to check if segment_done ...
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_sink_event),
+	  (gst_adder_request_new_pad), (gst_adder_change_state):
+	  * gst/adder/gstadder.h:
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/adder.c: (event_loop), (GST_START_TEST),
+	  (adder_suite), (main):
+	  Add sink-event handling to adder. It tries to merge incomming
+	  newsegment-events. Added test to check if segment_done is comming
+	  through.
+
+2006-05-05 16:34:15 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* ext/theora/theoraparse.c:
+	* ext/vorbis/vorbisparse.c:
+	  ext/theora/theoraparse.c (gst_theora_parse_init) ext/vorbis/vorbisparse.c (gst_vorbis_parse_init)
+	  Original commit message from CVS:
+	  2006-05-05  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/theoraparse.c (gst_theora_parse_init)
+	  (theora_parse_src_convert, theora_parse_src_query):
+	  * ext/vorbis/vorbisparse.c (gst_vorbis_parse_init)
+	  (vorbis_parse_convert, vorbis_parse_src_query): Add convert and
+	  query functions on the source pads of the theora and vorbis parse
+	  elements. Fixes position querying when doing a remux.
+
+2006-05-05 13:46:37 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/theora/theoraparse.c: Fix flushing.
+	  Original commit message from CVS:
+	  * ext/theora/theoraparse.c: (parse_granulepos),
+	  (theora_parse_drain_queue_prematurely),
+	  (theora_parse_queue_buffer), (theora_parse_sink_event):
+	  Fix flushing.
+	  Fix invalid granulepos outputs when starting with a non-keyframe.
+
+2006-05-05 12:37:35 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Rearrange MPEG system stream detection, fixing some memleaks in the process.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find),
+	  (mpeg1_sys_type_find), (ogganx_type_find), (sw_data_destroy):
+	  Rearrange MPEG system stream detection, fixing some memleaks in the
+	  process.
+	  Constify the data for STARTS_WITH and RIFF helper handlers. Make sure
+	  they clean up their data correctly.
+	  Remove unused ogganx caps and move the 'is_annodex' check to inside
+	  the 'is_ogg' if statement.
+
+2006-05-05 11:33:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstdecodebin.c: Properly remove ghostpads. Fixes #340392
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (cleanup_decodebin):
+	  Properly remove ghostpads. Fixes #340392
+
+2006-05-04 18:43:58 +0000  David Schleef <ds@schleef.org>
+
+	  gst/typefind/gsttypefindfunctions.c:
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+
+2006-05-03 16:32:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/typefind/gsttypefindfunctions.c: When typefinding an MP3 in push-based mode, don't penalise the probability down ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset),
+	  (mpeg_ts_probe_headers), (mpeg_ts_type_find):
+	  When typefinding an MP3 in push-based mode, don't penalise the
+	  probability down to 74% when we found 5 valid frames just because we
+	  can't peek the end of the file.
+	  Make the probability for detecting MPEG Transport Streams based on the
+	  number of sequential headers we successfully detected.
+
+2006-05-03 15:52:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Still produce an error when we receive an empty packet.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_sink_event),
+	  (vorbis_dec_push), (vorbis_dec_chain):
+	  Still produce an error when we receive an empty packet.
+
+2006-05-03 15:34:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Mark buffers with DISCONT after seek and after activating new chains.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain_peer),
+	  (gst_ogg_chain_mark_discont), (gst_ogg_chain_new_stream),
+	  (gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek):
+	  Mark buffers with DISCONT after seek and after activating new
+	  chains.
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_reset),
+	  (theora_get_query_types), (theora_dec_sink_event),
+	  (theora_dec_push), (theora_handle_data_packet), (theora_dec_chain),
+	  (theora_dec_change_state):
+	  Fix frame counter.
+	  Detect and mark DISCONT buffers.
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
+	  (vorbis_dec_sink_event), (vorbis_dec_push), (vorbis_dec_chain),
+	  (vorbis_dec_change_state):
+	  * ext/vorbis/vorbisdec.h:
+	  Use GstSegment.
+	  Detect and mark DISCONT buffers.
+	  Don't crash on 0 sized buffers.
+
+2006-05-03 08:58:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/volume/gstvolume.c: Increase "volume" property to 10.0. Fixes #340369.
+	  Original commit message from CVS:
+	  * gst/volume/gstvolume.c: (volume_funcfind), (volume_set_caps),
+	  (volume_transform_ip):
+	  Increase "volume" property to 10.0. Fixes #340369.
+	  Set the process function to NULL when capsnego fails so that
+	  we properly error out.
+
+2006-05-02 18:15:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/playback/: free cpas using gst_caps_unref, don't leak caps-strings
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (add_sink):
+	  * gst/playback/test.c: (main):
+	  * gst/playback/test5.c: (dump_element_stats):
+	  * gst/playback/test6.c: (main):
+	  free cpas using gst_caps_unref, don't leak caps-strings
+
+2006-05-02 06:33:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	  some RTP debug
+	  Original commit message from CVS:
+	  some RTP debug
+
+2006-05-01 19:08:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Refine musepack typefinding a bit. Return MAXIMUM probability when we detect str...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (musepack_type_find),
+	  (plugin_init):
+	  Refine musepack typefinding a bit. Return MAXIMUM
+	  probability when we detect stream version 7 to make
+	  sure the mpeg audio typefinder doesn't trump us.
+
+2006-04-29 16:25:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Protect against unexpected NULL strf_data buffer.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Protect against unexpected NULL strf_data buffer.
+
+2006-04-29 13:09:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/elements/audioconvert.c: interpret the out[] buffer in the order the bytes are actually put in, which is ...
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (verify_convert),
+	  (GST_START_TEST):
+	  interpret the out[] buffer in the order the bytes are actually
+	  put in, which is LITTLE_ENDIAN, not BYTE_ORDER.
+	  Other tests should use BYTE_ORDER since the array is filled in
+	  with actual values
+
+2006-04-29 12:10:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/elements/audioconvert.c:
+	  dump expected data when audioconvert test fails
+	  Original commit message from CVS:
+	  dump expected data when audioconvert test fails
+
+2006-04-29 11:55:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/elements/audioconvert.c: when a test fails, give an indication of which it is
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (verify_convert),
+	  (GST_START_TEST):
+	  when a test fails, give an indication of which it is
+
+2006-04-29 09:48:16 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	* ext/theora/theoraenc.c:
+	  add another include
+	  Original commit message from CVS:
+	  add another include
+
+2006-04-29 01:24:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/subparse/gstssaparse.c:
+	  atoi() needs stdlib.h
+	  Original commit message from CVS:
+	  atoi() needs stdlib.h
+
+2006-04-29 01:18:05 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/playback/test4.c:
+	* gst/playback/test5.c:
+	* gst/playback/test6.c:
+	  exit needs stdlib.h
+	  Original commit message from CVS:
+	  exit needs stdlib.h
+
+2006-04-29 01:10:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: compile fix; strtol() needs <stdlib.h>
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  compile fix; strtol() needs <stdlib.h>
+
+2006-04-29 01:04:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* common:
+	* docs/Makefile.am:
+	* docs/libs/Makefile.am:
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* docs/plugins/Makefile.am:
+	* docs/upload.mak:
+	  use common upload.mak
+	  Original commit message from CVS:
+	  use common upload.mak
+
+2006-04-28 19:46:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  make GstElementDetails const
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixerelement.c:
+	  * ext/alsa/gstalsasrc.c:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggparse.c:
+	  * ext/ogg/gstogmparse.c:
+	  * ext/pango/gstclockoverlay.c:
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextrender.c:
+	  * ext/pango/gsttimeoverlay.c:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * ext/vorbis/vorbisenc.c:
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/audiorate/gstaudiorate.c:
+	  * gst/audioresample/gstaudioresample.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gststreamselector.c:
+	  * gst/subparse/gstsubparse.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gsttcpclientsink.c:
+	  * gst/tcp/gsttcpclientsrc.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/tcp/gsttcpserversrc.c:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  * gst/videorate/gstvideorate.c:
+	  * gst/videoscale/gstvideoscale.c:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/volume/gstvolume.c:
+	  * sys/v4l/gstv4ljpegsrc.c:
+	  * sys/v4l/gstv4lmjpegsink.c:
+	  * sys/v4l/gstv4lmjpegsrc.c:
+	  * sys/v4l/gstv4lsrc.c:
+	  * sys/ximage/ximagesink.c:
+	  * sys/xvimage/xvimagesink.c:
+	  * tests/check/libs/cddabasesrc.c:
+	  make GstElementDetails const
+
+2006-04-28 19:17:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/adder/gstadder.c: send events from src-pad to all sink-pads fixes #338657
+	  Original commit message from CVS:
+	  * gst/adder/gstadder.c: (gst_adder_setcaps), (gst_adder_src_event),
+	  (gst_adder_init):
+	  send events from src-pad to all sink-pads fixes #338657
+
+2006-04-28 19:08:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/alsa/gstalsasink.c: query witdh capabilities from alsa, fixes #338919
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_getcaps),
+	  (alsasink_parse_spec):
+	  query witdh capabilities from alsa, fixes #338919
+
+2006-04-28 15:31:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/tcp/gstmultifdsink.*: Fix race condition in multifdsink that can lead to spurious duplicate clients. this patch a...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init),
+	  (gst_multi_fd_sink_remove_client_link):
+	  * gst/tcp/gstmultifdsink.h:
+	  Fix race condition in multifdsink that can lead to spurious
+	  duplicate clients. this patch adds a new signal that is fired when
+	  multifdsink has removed all references to the fd.
+	  Fixes #339574.
+	  Updated documentation.
+	  API: client-fd-removed signal added
+
+2006-04-28 15:24:00 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/tcp/gstmultifdsink.c: When asking g_value_array_new to prealloc elements, we may as well ask for the right number...
+	  Original commit message from CVS:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_get_stats):
+	  When asking g_value_array_new to prealloc elements, we may as well
+	  ask for the right number of elements.
+
+2006-04-28 15:08:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: patch to make timestamp checking more tollerant to rounding errors given that ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain), (gst_base_audio_sink_event),
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_change_state):
+	  patch to make timestamp checking more tollerant to rounding
+	  errors given that real discontinuities are to be marked on
+	  buffers. Fixes some asf files and #338778.
+	  Also avoid some crashers when we receive an event in the
+	  NULL state.
+
+2006-04-28 15:01:58 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/gnomevfs/gstgnomevfssrc.*: Remove ICY handling (mostly) from gnomevfssrc, in favour of proper shared support with...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init),
+	  (gst_gnome_vfs_src_init), (gst_gnome_vfs_src_finalize),
+	  (gst_gnome_vfs_src_get_property),
+	  (gst_gnome_vfs_src_send_additional_headers_callback),
+	  (gst_gnome_vfs_src_received_headers_callback),
+	  (gst_gnome_vfs_src_create), (gst_gnome_vfs_src_start),
+	  (gst_gnome_vfs_src_stop):
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  Remove ICY handling (mostly) from gnomevfssrc, in favour of
+	  proper shared support within icydemux.
+
+2006-04-28 14:49:22 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/videorate/gstvideorate.c: fix up docs fix a leak when no caps negotiated fix counting of input frames
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_reset),
+	  (gst_video_rate_swap_prev), (gst_video_rate_chain):
+	  fix up docs
+	  fix a leak when no caps negotiated
+	  fix counting of input frames
+	  * tests/check/elements/.cvsignore:
+	  * tests/check/elements/videorate.c: (assert_videorate_stats),
+	  (GST_START_TEST), (videorate_suite):
+	  add tests for these
+
+2006-04-28 14:48:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Check arguments passed to public functions instead of crashing.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_set_callback), (gst_ring_buffer_acquire),
+	  (gst_ring_buffer_release), (gst_ring_buffer_is_acquired),
+	  (gst_ring_buffer_set_flushing), (gst_ring_buffer_start),
+	  (gst_ring_buffer_pause), (gst_ring_buffer_stop),
+	  (gst_ring_buffer_delay), (gst_ring_buffer_samples_done),
+	  (gst_ring_buffer_set_sample), (gst_ring_buffer_clear_all),
+	  (gst_ring_buffer_commit), (gst_ring_buffer_read),
+	  (gst_ring_buffer_prepare_read), (gst_ring_buffer_advance),
+	  (gst_ring_buffer_clear), (gst_ring_buffer_may_start):
+	  Check arguments passed to public functions instead of
+	  crashing.
+
+2006-04-28 14:37:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: GstBaseAudioSrc must be live or it does not work.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_init),
+	  (gst_base_audio_src_get_time), (gst_base_audio_src_create):
+	  GstBaseAudioSrc must be live or it does not work.
+	  * gst-libs/gst/audio/gstaudiosrc.c: (gst_audio_src_init):
+	  Don't set live to TRUE as this is the default in the parentclass.
+
+2006-04-28 14:37:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* win32/common/config.h:
+	  update config.h
+	  Original commit message from CVS:
+	  update config.h
+
+2006-04-28 14:33:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videoscale/gstvideoscale.c: Videoscale doesn't pass on pixel-aspect ratio. Handle all fixation cases better. Fixe...
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_transform_caps),
+	  (gst_video_scale_fixate_caps), (gst_video_scale_src_event):
+	  Videoscale doesn't pass on pixel-aspect ratio. Handle all
+	  fixation cases better. Fixes #338991
+
+2006-04-28 14:24:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videotestsrc/gstvideotestsrc.c: Handle 0/1 framerate correctly Fixes #331901.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_create):
+	  Handle 0/1 framerate correctly Fixes #331901.
+
+2006-04-28 14:22:16 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/check/elements/audioconvert.c: Added check for correct clipping when doing float samples in audioconvert.
+	  Original commit message from CVS:
+	  * tests/check/elements/audioconvert.c: (get_float_caps),
+	  (GST_START_TEST), (audioconvert_suite):
+	  Added check for correct clipping when doing float samples
+	  in audioconvert.
+
+2006-04-28 14:19:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videorate/gstvideorate.c: Print more debugging info.
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_event),
+	  (gst_video_rate_chain):
+	  Print more debugging info.
+
+2006-04-28 14:17:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audioresample/gstaudioresample.c: Add support for other formats audioresample can handle such as 32 bits in and f...
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c: (gst_audioresample_init),
+	  (resample_set_state_from_caps):
+	  Add support for other formats audioresample can handle such as
+	  32 bits in and float and 64 bits float. Fixes #301759
+
+2006-04-28 14:12:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/audioconvert/audioconvert.c: correctly clip float samples > 1.0. Fixes #338718
+	  Original commit message from CVS:
+	  * gst/audioconvert/audioconvert.c: (float):
+	  correctly clip float samples > 1.0. Fixes #338718
+
+2006-04-28 13:35:34 +0000  Young-Ho Cha <ganadist@chollian.net>
+
+	  ext/pango/gsttextoverlay.c: Don't strip newlines from the text. Also, center lines within multi-line paragraphs (#339...
+	  Original commit message from CVS:
+	  Patch by: Young-Ho Cha  <ganadist at chollian net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init),
+	  (gst_text_overlay_render_text):
+	  Don't strip newlines from the text. Also, center lines
+	  within multi-line paragraphs (#339405).
+
+2006-04-28 12:15:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix wavpack typefinding to work in more cases (don't peek for chunks of multiple...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (wavpack_type_find):
+	  Fix wavpack typefinding to work in more cases (don't peek
+	  for chunks of multiple hundred kBs at once, but process
+	  things step-by-step in smaller units). Fixes #339786.
+
+2006-04-28 10:58:41 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	  back to HEAD
+	  Original commit message from CVS:
+	  back to HEAD
+
+=== release 0.10.6 ===
+
+2006-04-28 10:53:40 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* docs/upload.mak:
+	  releasing 0.10.6
+	  Original commit message from CVS:
+	  releasing 0.10.6
+
+2006-04-28 10:42:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* win32/MANIFEST:
+	* win32/common/config.h:
+	  dist more win32 files
+	  Original commit message from CVS:
+	  dist more win32 files
+
+2006-04-28 10:41:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-04-27 00:19:29 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videoscale/gstvideoscale.c: Add call to oil_init().
+	  Original commit message from CVS:
+	  * gst/videoscale/gstvideoscale.c: Add call to oil_init().
+	  Fixes #338897.
+
+2006-04-26 17:20:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	* win32/common/config.h:
+	  new prerelease
+	  Original commit message from CVS:
+	  new prerelease
+
+2006-04-26 17:17:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: make sure correct newsegments are sent, so that the decoder and the demuxer agree on timestamp...
+	  Original commit message from CVS:
+	  2006-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+	  patch by: Wim Taymans
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_perform_seek):
+	  make sure correct newsegments are sent, so that the decoder
+	  and the demuxer agree on timestamps.  Fixes playback of a lot
+	  of Ogg files that do not start from 0.  Fixes #339833.
+
+2006-04-26 16:44:20 +0000  Edward Hervey <edward@fluendo.com>
+
+	  Fix an infinite loop if frames are passed in with wrongly ordered timestamps.  Fixes #339013.
+	  Original commit message from CVS:
+	  Patch by: Edward Hervey  <edward@fluendo.com>
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_chain):
+	  * tests/check/Makefile.am:
+	  * tests/check/elements/videorate.c: (assert_videorate_stats),
+	  (setup_videorate), (cleanup_videorate), (GST_START_TEST),
+	  (videorate_suite), (main):
+	  Fix an infinite loop if frames are passed in with wrongly ordered
+	  timestamps.  Fixes #339013.
+
+2006-04-26 13:55:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	* win32/common/config.h:
+	  prerelease
+	  Original commit message from CVS:
+	  prerelease
+
+2006-04-22 21:25:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: fix typefinding on some ISO files.  Fixes #339212.
+	  Original commit message from CVS:
+	  Patch by: Tim-Philipp Müller  <tim at centricular dot net>
+	  * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+	  fix typefinding on some ISO files.  Fixes #339212.
+
+2006-04-22 21:19:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: add another H264 fourcc.  Fixes #339047.
+	  Original commit message from CVS:
+	  Patch by: Tim-Philipp Müller  <tim at centricular dot net>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  add another H264 fourcc.  Fixes #339047.
+
+2006-04-22 21:12:52 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gststreamselector.c: Restore old StreamSelector behaviour.
+	  Original commit message from CVS:
+	  Patch by: Jan Schmidt
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_bufferalloc):
+	  Restore old StreamSelector behaviour.
+	  Fixes #338419.
+
+2006-04-13 09:26:27 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  reverting rtp patches to fix freeze break on -base as explained on the list
+	  Original commit message from CVS:
+	  reverting rtp patches to fix freeze break on -base as explained on the list
+
+2006-04-13 03:55:12 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstrtpbuffer.h: Added GST_RTP_PAYLOAD_DYNAMIC_STRING for use by children
+	  Original commit message from CVS:
+	  2006-04-12 Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+	  * gst-libs/gst/rtp/gstrtpbuffer.h:
+	  Added GST_RTP_PAYLOAD_DYNAMIC_STRING for use by children
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.c:
+	  * gst-libs/gst/rtp/gstbasertpaudiopayload.h:
+	  New RTP audio base payloader class. Supports frame or sample based codecs
+
+2006-04-12 11:04:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  update libtool versioning
+	  Original commit message from CVS:
+	  update libtool versioning
+
+2006-04-12 10:58:00 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	* win32/common/config.h:
+	  prerelease
+	  Original commit message from CVS:
+	  prerelease
+
+2006-04-11 17:31:29 +0000  Antoine Tremblay <hexa00@gmail.com>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Fix some memory leaks: on finalize, free buffers left in the queue before des...
+	  Original commit message from CVS:
+	  Patch by: Antoine Tremblay  <hexa00 at gmail dot com>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_finalize), (gst_base_rtp_depayload_push):
+	  Fix some memory leaks: on finalize, free buffers left in the queue
+	  before destroying the queue; in _push(), unref rtp_buf even if
+	  the process vfunc returned a NULL buffer as output buffer (#337548);
+	  demote some recuring debug messages to LOG level.
+
+2006-04-11 15:01:51 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  fix version number macro
+	  Original commit message from CVS:
+	  fix version number macro
+
+2006-04-11 14:42:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: More cleanups.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query),
+	  (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
+	  (gst_ogg_chain_free), (gst_ogg_demux_sink_event),
+	  (gst_ogg_demux_loop):
+	  More cleanups.
+	  Respect segment stop when emiting EOS or SEGMENT_DONE.
+	  Fixes (#337945).
+
+2006-04-11 10:45:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gststreamselector.c: Don't leak pad name.
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_get_property):
+	  Don't leak pad name.
+
+2006-04-11 09:42:52 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	  Mention bug #336617 closed by recent commit
+	  Original commit message from CVS:
+	  Mention bug #336617 closed by recent commit
+
+2006-04-10 20:32:46 +0000  Michael Smith <msmith@xiph.org>
+
+	  tests/check/: so that FC4 buildslaves can pass.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  * tests/check/gst-plugins-base.supp:
+	  Suppress an old libtheora bug (fixed in more recent versions), so
+	  that FC4 buildslaves can pass.
+
+2006-04-10 19:13:30 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Don't leak events.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query),
+	  (gst_ogg_demux_receive_event), (gst_ogg_pad_event),
+	  (gst_ogg_demux_init), (gst_ogg_demux_finalize),
+	  (gst_ogg_demux_sink_event), (gst_ogg_demux_get_data),
+	  (gst_ogg_demux_loop):
+	  Don't leak events.
+	  Remember what error we got when finding chains, if we
+	  were shutdown, that would not be an error.
+
+2006-04-10 17:05:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Starting the ringbuffer when we did not acquire it can cause a deadlock, is po...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_event):
+	  Starting the ringbuffer when we did not acquire it can cause
+	  a deadlock, is pointless and causes nasty things for
+	  subclasses.
+	  Fixes gst-launch audiotestsrc num-buffers=0 ! alsasink.
+
+2006-04-10 15:17:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Add some more debugging.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query),
+	  (gst_ogg_demux_receive_event), (gst_ogg_pad_event),
+	  (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_submit_buffer), (gst_ogg_demux_get_data),
+	  (gst_ogg_demux_deactivate_current_chain),
+	  (gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
+	  (gst_ogg_demux_bisect_forward_serialno),
+	  (gst_ogg_demux_find_chains), (gst_ogg_demux_chain):
+	  Add some more debugging.
+
+2006-04-10 14:52:10 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* ext/theora/theoraenc.c:
+	  fix width of docs
+	  Original commit message from CVS:
+	  fix width of docs
+
+2006-04-10 10:29:21 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Some more debug info.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_src_event),
+	  (theora_handle_data_packet):
+	  Some more debug info.
+	  * tests/examples/seek/seek.c: (start_seek), (main):
+	  Print element messages too.
+
+2006-04-09 17:14:22 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst/audioresample/debug.h: replace debug macros with variable number of parameters by a simple alias to gstreamer sta...
+	  Original commit message from CVS:
+	  * gst/audioresample/debug.h:
+	  replace debug macros with variable number of parameters
+	  by a simple alias to gstreamer standard debug macros
+	  (#define RESAMPLE_ERROR GST_ERROR, __VA_ARGS__ is not
+	  supported by MSVC 6.0 and 7.1)
+	  * gst/audioresample/resample.h:
+	  define M_PI and rint for WIN32
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgstriff.def:
+	  * win32/common/libgsttag.def:
+	  * win32/common/libgstvideo.def:
+	  add new exported functions
+	  * win32/vs6:
+	  update project files
+
+2006-04-08 21:02:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixeroptions.c:
+	  (gst_alsa_mixer_options_class_init):
+	  * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_class_init):
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_class_init):
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init):
+	  * ext/ogg/gstoggparse.c: (gst_ogg_parse_class_init):
+	  * gst-libs/gst/audio/gstaudioclock.c: (gst_audio_clock_class_init):
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  (gst_audio_filter_class_init):
+	  * gst-libs/gst/audio/gstaudiosink.c:
+	  (gst_audioringbuffer_class_init):
+	  * gst-libs/gst/audio/gstaudiosrc.c:
+	  (gst_audioringbuffer_class_init):
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_class_init):
+	  * gst-libs/gst/interfaces/colorbalancechannel.c:
+	  (gst_color_balance_channel_class_init):
+	  * gst-libs/gst/interfaces/mixeroptions.c:
+	  (gst_mixer_options_class_init):
+	  * gst-libs/gst/interfaces/mixertrack.c:
+	  (gst_mixer_track_class_init):
+	  * gst-libs/gst/interfaces/tunerchannel.c:
+	  (gst_tuner_channel_class_init):
+	  * gst-libs/gst/interfaces/tunernorm.c: (gst_tuner_norm_class_init):
+	  * gst-libs/gst/netbuffer/gstnetbuffer.c:
+	  (gst_netbuffer_class_init):
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_class_init):
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_class_init):
+	  * gst/playback/gststreaminfo.c: (gst_stream_info_class_init):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_class_init):
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init):
+	  * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init):
+	  * sys/v4l/gstv4lcolorbalance.c:
+	  (gst_v4l_color_balance_channel_class_init):
+	  * sys/v4l/gstv4ljpegsrc.c: (gst_v4ljpegsrc_class_init):
+	  * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+	  * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+	  * sys/v4l/gstv4ltuner.c: (gst_v4l_tuner_channel_class_init),
+	  (gst_v4l_tuner_norm_class_init):
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_class_init):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init):
+	  * tests/old/testsuite/alsa/sinesrc.c: (sinesrc_class_init):
+	  Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+
+2006-04-08 18:09:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Fix broken GObject macros
+	  Original commit message from CVS:
+	  * ext/pango/gsttextrender.h:
+	  * gst-libs/gst/audio/gstaudiosink.h:
+	  * gst-libs/gst/audio/gstaudiosrc.h:
+	  * gst-libs/gst/audio/gstbaseaudiosink.h:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.h:
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.h:
+	  * gst-libs/gst/rtp/gstbasertppayload.h:
+	  * gst-libs/gst/video/gstvideofilter.h:
+	  * gst-libs/gst/video/gstvideosink.h:
+	  * gst/playback/gstplaybasebin.h:
+	  * gst/tcp/gstmultifdsink.h:
+	  * sys/v4l/gstv4lelement.h:
+	  Fix broken GObject macros
+
+2006-04-08 16:21:15 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/alsa/gstalsasink.c: More debug to trace why my USB headset is not working with gst
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (set_hwparams), (alsasink_parse_spec):
+	  More debug to trace why my USB headset is not working with gst
+
+2006-04-07 17:18:11 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybasebin.c: Clean up our group elements properly in the case where it never got committed - it sti...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (group_destroy):
+	  Clean up our group elements properly in the case where it never
+	  got committed - it still got added unconditionally to the bin.
+
+2006-04-07 15:14:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Unref unhandled events.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_dec_sink_event),
+	  (theora_handle_data_packet), (theora_dec_chain):
+	  Unref unhandled events.
+	  Protect against empty buffers.
+	  Perform QoS on running time.
+
+2006-04-07 13:24:54 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/vorbis/vorbisenc.c: Remove leaks from vorbisenc.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_set_header_on_caps),
+	  (gst_vorbis_enc_chain):
+	  Remove leaks from vorbisenc.
+	  Mostly minor changes, the only significant one is that now the
+	  buffers we set as 'streamheader' on the caps are copies of the
+	  original buffers, to avoid circular refcounting problems.
+
+2006-04-07 09:51:35 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybasebin.c: Don't remove our mute-probe if someone else already did so.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (mute_stream), (setup_substreams):
+	  Don't remove our mute-probe if someone else already did so.
+	  Don't set a 2nd one if there is already one pending on the pad.
+	  * gst/playback/gstplaybin.c: (gst_play_bin_send_event_to_sink),
+	  (do_playbin_seek):
+	  When a seek fails, ensure that playbin is still set back to playing.
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg_ts_probe_headers),
+	  (mpeg_ts_type_find), (plugin_init):
+	  Add a typefind function for mpeg-ts streams.
+
+2006-04-06 11:40:45 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/videorate/gstvideorate.c:
+	  gst/videorate/gstvideorate.c (gst_video_rate_reset)
+	  Original commit message from CVS:
+	  2006-04-06  Andy Wingo  <wingo@pobox.com>
+	  * gst/videorate/gstvideorate.c (gst_video_rate_reset)
+	  (gst_video_rate_init): Caps-related parameters should not be reset
+	  by a flush -- move their inits to the instance init function.
+	  (gst_video_rate_flush_prev): Don't complain if gst_pad_push
+	  is not OK, just return the result.
+	  * gst/audiotestsrc/gstaudiotestsrc.c
+	  (gst_audio_test_src_class_init)
+	  (gst_audio_test_src_get_times): Re-enable is-live=true, as was
+	  broken by Stefan's commit on 24 March.
+
+2006-04-06 10:50:14 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/ogg/gstoggmux.c (gst_ogg_mux_push_buffer): Set caps on buffers being pushed out. Fixes oggmux ! multifdsink.
+	  Original commit message from CVS:
+	  2006-04-06  Andy Wingo  <wingo@pobox.com>
+	  * ext/ogg/gstoggmux.c (gst_ogg_mux_push_buffer): Set caps on
+	  buffers being pushed out. Fixes oggmux ! multifdsink.
+
+2006-04-05 13:05:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/vorbis/: Remove left-over 0.8 cruft; use GST_DEBUG_FUNCPTR; make vorbisenc adhere to the official nomenclature; u...
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_class_init),
+	  (gst_vorbis_dec_init), (vorbis_dec_finalize):
+	  * ext/vorbis/vorbisdec.h:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_add_interfaces),
+	  (gst_vorbis_enc_base_init), (gst_vorbis_enc_class_init),
+	  (gst_vorbis_enc_sink_setcaps), (gst_vorbis_enc_convert_src),
+	  (gst_vorbis_enc_convert_sink), (gst_vorbis_enc_get_query_types),
+	  (gst_vorbis_enc_src_query), (gst_vorbis_enc_sink_query),
+	  (gst_vorbis_enc_init), (gst_vorbis_enc_get_tag_value),
+	  (gst_vorbis_enc_metadata_set1), (gst_vorbis_enc_set_metadata),
+	  (gst_vorbis_enc_setup), (gst_vorbis_enc_clear),
+	  (gst_vorbis_enc_buffer_from_packet),
+	  (gst_vorbis_enc_buffer_from_header_packet),
+	  (gst_vorbis_enc_push_buffer), (gst_vorbis_enc_push_packet),
+	  (gst_vorbis_enc_set_header_on_caps), (gst_vorbis_enc_sink_event),
+	  (gst_vorbis_enc_chain), (gst_vorbis_enc_output_buffers),
+	  (gst_vorbis_enc_get_property), (gst_vorbis_enc_set_property),
+	  (gst_vorbis_enc_change_state):
+	  * ext/vorbis/vorbisenc.h:
+	  Remove left-over 0.8 cruft; use GST_DEBUG_FUNCPTR; make
+	  vorbisenc adhere to the official nomenclature; use boilerplate
+	  macro.
+
+2006-04-04 11:20:24 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/videorate/gstvideorate.c (gst_video_rate_flush_prev): Whoops, fix bug introduced. Bad hacker!
+	  Original commit message from CVS:
+	  2006-04-04  Andy Wingo  <wingo@pobox.com>
+	  * gst/videorate/gstvideorate.c (gst_video_rate_flush_prev):
+	  Whoops, fix bug introduced. Bad hacker!
+
+2006-04-04 11:15:00 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/videorate/gstvideorate.c (gst_video_rate_flush_prev): Properly handle the case where you get EOS before any buffe...
+	  Original commit message from CVS:
+	  2006-04-04  Andy Wingo  <wingo@pobox.com>
+	  * gst/videorate/gstvideorate.c (gst_video_rate_flush_prev):
+	  Properly handle the case where you get EOS before any buffers are
+	  received. Use gst_buffer_make_metadata_writable where appropriate.
+
+2006-04-04 10:16:46 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/theoradec.c (theora_handle_data_packet): This value is often negative -- make it signed so as not to wrap ...
+	  Original commit message from CVS:
+	  2006-04-04  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/theoradec.c (theora_handle_data_packet): This value
+	  is often negative -- make it signed so as not to wrap around.
+	  Fixes segfaults introduced on 9 March.
+
+2006-04-03 16:43:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/: Don't try to store a gdouble in a gboolean.
+	  Original commit message from CVS:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (theora_dec_src_event):
+	  Don't try to store a gdouble in a gboolean.
+	  Small cleanups.
+
+2006-04-03 12:55:18 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggmux.c: Oggmux sucks.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_queue_pads):
+	  Oggmux sucks.
+	  Make it suck slightly less by writing out the final page.
+	  Still can't encode a vorbis-in-ogg file correctly, though.
+
+2006-04-03 08:49:06 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/theoraparse.c (theora_parse_drain_queue): Um, remove a g_print.
+	  Original commit message from CVS:
+	  2006-04-03  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/theoraparse.c (theora_parse_drain_queue): Um, remove
+	  a g_print.
+
+2006-04-03 08:32:21 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/theora.c (plugin_init): Register theoraparse.
+	  Original commit message from CVS:
+	  2006-04-03  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/theora.c (plugin_init): Register theoraparse.
+	  * ext/theora/gsttheoraparse.h:
+	  * ext/theora/theoraparse.c: New files implementing a theora
+	  parser. Now we can properly remux ogg/theora+vorbis, yay.
+
+2006-04-03 08:28:58 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/vorbis/vorbisparse.c: Add some docs and a copyright.
+	  Original commit message from CVS:
+	  2006-04-03  Andy Wingo  <wingo@pobox.com>
+	  * ext/vorbis/vorbisparse.c: Add some docs and a copyright.
+
+2006-04-01 15:34:38 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* configure.ac:
+	  don't use AS_LIBTOOL_TAGS, it doesn't work
+	  Original commit message from CVS:
+	  don't use AS_LIBTOOL_TAGS, it doesn't work
+
+2006-04-01 11:41:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* ext/pango/gsttextoverlay.c:
+	* sys/v4l/gstv4lsrc.c:
+	  remove BT8x8 from description, works for more devices
+	  Original commit message from CVS:
+	  remove BT8x8 from description, works for more devices
+
+2006-04-01 11:21:30 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: Fixed the sample pipeline (see #323798)
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  Fixed the sample pipeline (see #323798)
+
+2006-04-01 09:50:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  use AS_VERSION and AS_NANO more cleanups
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * win32/common/config.h:
+	  * win32/common/config.h.in:
+	  use AS_VERSION and AS_NANO
+	  more cleanups
+
+2006-03-31 17:08:41 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/vorbis/vorbisparse.c (vorbis_parse_sink_event): Fix uninitialized variable return that would happen.
+	  Original commit message from CVS:
+	  2006-03-31  Andy Wingo  <wingo@pobox.com>
+	  * ext/vorbis/vorbisparse.c (vorbis_parse_sink_event): Fix
+	  uninitialized variable return that would happen.
+
+2006-03-31 16:57:47 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/vorbis/vorbisparse.c (vorbis_parse_drain_queue): Fix uninitialized variable return that would never happen.
+	  Original commit message from CVS:
+	  2006-03-31  Andy Wingo  <wingo@pobox.com>
+	  * ext/vorbis/vorbisparse.c (vorbis_parse_drain_queue): Fix
+	  uninitialized variable return that would never happen.
+
+2006-03-31 16:43:43 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/vorbis/vorbisparse.c (gst_vorbis_parse_init)
+	  Original commit message from CVS:
+	  2006-03-31  Andy Wingo  <wingo@pobox.com>
+	  * ext/vorbis/vorbisparse.c (gst_vorbis_parse_init)
+	  (vorbis_parse_sink_event): Add an event function to flush our
+	  state on a seek, and to drain buffers on a premature EOS.
+	  (vorbis_parse_push_headers, vorbis_parse_clear_queue)
+	  (vorbis_parse_push_buffer, vorbis_parse_drain_queue_prematurely)
+	  (vorbis_parse_chain, vorbis_parse_queue_buffer)
+	  (vorbis_parse_drain_queue): Queue up buffers until we can set
+	  their timestamps and granulepos values.
+	  * ext/vorbis/vorbisparse.h: Include the vorbis decoder headers,
+	  and keep track of data needed for deriving granulepos and
+	  timestamps for buffers.
+
+2006-03-30 11:05:25 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-base.pc.in:
+	  expose pluginsdir so gonlin can use it for tests
+	  Original commit message from CVS:
+	  expose pluginsdir so gonlin can use it for tests
+
+2006-03-30 10:03:56 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	* pkgconfig/gstreamer-plugins-base.pc.in:
+	  add ccda to libraries
+	  Original commit message from CVS:
+	  add ccda to libraries
+
+2006-03-29 14:00:08 +0000  j^ <j@bootlab.org>
+
+	  better/unified long descriptions
+	  Original commit message from CVS:
+	  Patch by: j^ <j at bootlab dot org>
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_class_init):
+	  * ext/alsa/gstalsasink.c:
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init):
+	  * ext/ogg/gstoggdemux.c:
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggparse.c:
+	  * ext/pango/gstclockoverlay.c:
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextrender.c:
+	  * ext/pango/gsttimeoverlay.c:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * ext/vorbis/vorbisenc.c:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/subparse/gstsubparse.c:
+	  * gst/tcp/gstmultifdsink.c:
+	  * gst/tcp/gsttcpclientsink.c:
+	  * gst/tcp/gsttcpclientsrc.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/tcp/gsttcpserversrc.c:
+	  better/unified long descriptions
+	  Fixes #336477
+
+2006-03-29 13:54:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Don't let double and tripple clicks mess up our state.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (end_scrub), (seek_cb), (start_seek),
+	  (stop_seek):
+	  Don't let double and tripple clicks mess up our state.
+
+2006-03-28 13:13:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybin.c: Error out gracefully when we can't create any of the usual conversion elements for some re...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_video_element),
+	  (gen_text_element), (gen_audio_element), (gen_vis_element):
+	  Error out gracefully when we can't create any of the usual
+	  conversion elements for some reason. Also, don't try to
+	  create an audioscale (sic) element that's not used anyway.
+
+2006-03-28 10:21:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Don't post RESOURCE_NOT_FOUND error when we can't find a source element for a particul...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source):
+	  Don't post RESOURCE_NOT_FOUND error when we can't find a source
+	  element for a particular protocol, that's confusing for users.
+	  Instead, post a RESOURCE_FAILED error, so that our own error
+	  message is actually shown in totem etc. (#336303).
+
+2006-03-27 16:36:46 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Fix some minor memory leaks (#336194).
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen  <ext-tommi dot myohanen at nokia dot com>
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_finalize),
+	  (gst_gnome_vfs_src_get_icy_metadata):
+	  Fix some minor memory leaks (#336194).
+
+2006-03-27 16:15:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/: Make gnomevfssink accept filenames as well as URIs for the "location" property, just like gnomevfssrc ...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfs.c:
+	  (gst_gnome_vfs_location_to_uri_string):
+	  * ext/gnomevfs/gstgnomevfs.h:
+	  * ext/gnomevfs/gstgnomevfssink.c:
+	  (gst_gnome_vfs_sink_set_property):
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_set_property):
+	  Make gnomevfssink accept filenames as well as URIs for the
+	  "location" property, just like gnomevfssrc does (and
+	  filesrc/filesink do) (#336190).
+
+2006-03-24 20:35:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/check/generic/clock-selection.c: set to NULL before unreffing, fixes a valgrind leak.
+	  Original commit message from CVS:
+	  * tests/check/generic/clock-selection.c: (GST_START_TEST):
+	  set to NULL before unreffing, fixes a valgrind leak.
+	  Why was this not triggering the error that an object needs to
+	  be NULL before unreffing ?
+	  * win32/common/config.h:
+	  update
+
+2006-03-24 17:57:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.*: Text subtitle files may or may not be UTF-8. If it's not, we don't really want to see '?'...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (convert_encoding),
+	  (gst_sub_parse_change_state):
+	  * gst/subparse/gstsubparse.h:
+	  Text subtitle files may or may not be UTF-8. If it's not, we
+	  don't really want to see '?' characters in place of non-ASCII
+	  characters like accented characters. So let's assume the input
+	  is UTF-8 until we come across text that is clearly not. If it's
+	  not UTF-8, we don't really know what it is, so try the following:
+	  (a) see whether the GST_SUBTITLE_ENCODING environment variable
+	  is set; if not, check (b) if the current locale encoding is
+	  non-UTF-8 and use that if it is, or (c) assume ISO-8859-15 if
+	  the current locale encoding is UTF-8 and the environment variable
+	  was not set to any particular encoding. Not perfect, but better
+	  than nothing (and better than before, I think) (fixes #172848).
+
+2006-03-24 17:39:45 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* docs/plugins/tmpl/.gitignore:
+	* tests/check/libs/.gitignore:
+	* tests/check/pipelines/.gitignore:
+	* tests/examples/volume/.gitignore:
+	  ignore more
+	  Original commit message from CVS:
+	  ignore more
+
+2006-03-24 17:26:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: update core requirement to 0.10.4.1 because of async_playback vmethod on GstBaseSink
+	  Original commit message from CVS:
+	  2006-03-24  Thomas Vander Stichele <thomas at apestaart dot org>
+	  * configure.ac:
+	  update core requirement to 0.10.4.1 because of async_playback
+	  vmethod on GstBaseSink
+
+2006-03-24 17:11:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  use DEBUG_FUNCPTR for collectpads
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_init):
+	  * gst/adder/gstadder.c: (gst_adder_init):
+	  use DEBUG_FUNCPTR for collectpads
+
+2006-03-24 14:11:20 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* Makefile.am:
+	  don't go through check-torture if no check installed
+	  Original commit message from CVS:
+	  don't go through check-torture if no check installed
+
+2006-03-24 10:42:11 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add docs for adder, use GST_ELEMENT_DETAILS macro, define GstElementDetails at the top
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_base_init),
+	  (gst_gnome_vfs_sink_class_init):
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_base_init):
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_base_init):
+	  * ext/ogg/gstoggmux.c:
+	  * ext/ogg/gstoggparse.c: (gst_ogg_parse_base_init):
+	  * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_base_init),
+	  (gst_ogm_video_parse_base_init), (gst_ogm_text_parse_base_init):
+	  * ext/pango/gsttextoverlay.c:
+	  * ext/pango/gsttextrender.c:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * ext/vorbis/vorbisdec.c:
+	  * ext/vorbis/vorbisenc.c:
+	  * gst-libs/gst/audio/gstaudiofilter.c:
+	  (gst_audio_filter_base_init):
+	  * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+	  (gst_audio_filter_template_base_init):
+	  * gst/adder/gstadder.c: (gst_adder_get_type):
+	  * gst/adder/gstadder.h:
+	  * gst/audioconvert/gstaudioconvert.c:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
+	  (gst_audio_test_src_create):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  * gst/playback/gstdecodebin.c:
+	  * gst/playback/gstplaybin.c:
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_base_init):
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_base_init):
+	  * gst/volume/gstvolume.c:
+	  * sys/v4l/gstv4lmjpegsink.c:
+	  * sys/v4l/gstv4lmjpegsrc.c:
+	  * tests/check/libs/cddabasesrc.c:
+	  * tests/old/examples/gob/gst-identity2.gob:
+	  Add docs for adder, use GST_ELEMENT_DETAILS macro,
+	  define GstElementDetails at the top
+
+2006-03-23 21:48:18 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/common/libgstinterfaces.def: Add a lot of export functions for gst-python
+	  Original commit message from CVS:
+	  * win32/common/libgstinterfaces.def:
+	  Add a lot of export functions for gst-python
+	  * win32/common/libgstinterfaces.dsp:
+	  Add a missing include folder in the project configuration
+
+2006-03-23 16:58:03 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: Fix audio sources, forgot to make the ringbuffer startable...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_get_time), (gst_base_audio_src_create),
+	  (gst_base_audio_src_change_state):
+	  Fix audio sources, forgot to make the ringbuffer
+	  startable...
+
+2006-03-23 16:29:58 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosrc.c: unparent instead of unref the ringbuffer.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_get_time), (gst_base_audio_src_create),
+	  (gst_base_audio_src_change_state):
+	  unparent instead of unref the ringbuffer.
+
+2006-03-23 16:24:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Implement new async_play vmethod to start slaving and allow playback start in ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init), (gst_base_audio_sink_async_play),
+	  (gst_base_audio_sink_do_play), (gst_base_audio_sink_change_state):
+	  Implement new async_play vmethod to start slaving and allow
+	  playback start in case of async PLAY state changes.
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init):
+	  Enable QoS with new method in base class.
+
+2006-03-23 11:18:19 +0000  Julien MOUTTE <julien@moutte.net>
+
+	  gst/videotestsrc/gstvideotestsrc.c: Partially handle 0 framerate, only EOS after the first frame is missing.
+	  Original commit message from CVS:
+	  Patch by: Julien MOUTTE <julien at moutte dot net>
+	  * gst/videotestsrc/gstvideotestsrc.c: (gst_video_test_src_query),
+	  (gst_video_test_src_do_seek), (gst_video_test_src_create):
+	  Partially handle 0 framerate, only EOS after the first frame
+	  is missing.
+
+2006-03-23 09:38:59 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+	  gst/: Patch for support of YVU9 AVI files (#334822)
+	  Original commit message from CVS:
+	  Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  * gst/ffmpegcolorspace/avcodec.h:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+	  (gst_ffmpegcsp_avpicture_fill):
+	  * gst/ffmpegcolorspace/imgconvert.c:
+	  Patch for support of YVU9 AVI files (#334822)
+
+2006-03-22 15:29:25 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  docs/design/design-decodebin.txt: Added design document for new decodebin text/x-pango-markup is also a default targe...
+	  Original commit message from CVS:
+	  * docs/design/design-decodebin.txt:
+	  Added design document for new decodebin
+	  (Target Caps): text/x-pango-markup is also a default target caps.
+
+2006-03-22 15:11:47 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  docs/design/design-decodebin.txt: Added design document for new decodebin
+	  Original commit message from CVS:
+	  * docs/design/design-decodebin.txt:
+	  Added design document for new decodebin
+
+2006-03-22 12:33:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Since we _parent the ringbuffer, we also need to _unparent instead of a plain ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_dispose):
+	  Since we _parent the ringbuffer, we also need to
+	  _unparent instead of a plain _unref.
+
+2006-03-22 12:28:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/seek.c: Add scrub checkbox.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (end_scrub), (do_seek), (seek_cb),
+	  (stop_seek), (scrub_toggle_cb), (main):
+	  Add scrub checkbox.
+
+2006-03-21 17:47:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstoggparse.c: Fix very inefficient usage of linked lists (#335365).
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggparse.c: (gst_ogg_parse_find_stream),
+	  (gst_ogg_parse_chain):
+	  Fix very inefficient usage of linked lists (#335365).
+
+2006-03-21 14:26:01 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gcc 4.1 unreferenced pointer fixes.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_dispose):
+	  * gst/playback/gstplaybin.c: (handoff):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_set_property):
+	  gcc 4.1 unreferenced pointer fixes.
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_put):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put):
+	  gst_buffer_ref() now takes a GstBuffer*.
+
+2006-03-20 18:09:41 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.c: Fix a memleak reported by Jan Schmidt.
+	  Original commit message from CVS:
+	  2006-03-20  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c:
+	  (gst_xvimagesink_get_format_from_caps): Fix a memleak reported
+	  by Jan Schmidt.
+
+2006-03-19 11:37:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Can't do tag preferences via probability, as tags would then lose against types ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (id3v2_type_find),
+	  (id3v1_type_find), (apetag_type_find), (plugin_init):
+	  Can't do tag preferences via probability, as tags would then
+	  lose against types that are recognised with MAXIMUM probability
+	  (like .wav); so let all tag typefinders return MAXIMUM themselves
+	  and order them via the rank. Split ID3v1 and ID3v2 typefinders so
+	  that we can prefer APE to ID3v1 (fixes #335028).
+
+2006-03-17 17:48:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/: Only start playback if we are playing. should fix #330748.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_change_state):
+	  * gst-libs/gst/audio/gstringbuffer.c: (wait_segment),
+	  (gst_ring_buffer_may_start):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Only start playback if we are playing.
+	  should fix #330748.
+
+2006-03-17 13:11:45 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Revert accidental commits to these files.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_getcaps):
+	  * win32/common/config.h:
+	  Revert accidental commits to these files.
+
+2006-03-16 20:01:03 +0000  Michal Benes <michal.benes@xeris.cz>
+
+	  tests/Makefile.am: Don't try to build tests in tests/icles if we don't have X (#323852)
+	  Original commit message from CVS:
+	  Patch by: Michal Benes  <michal dot benes at xeris dot cz>
+	  * tests/Makefile.am:
+	  Don't try to build tests in tests/icles if we
+	  don't have X (#323852)
+
+2006-03-16 13:08:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstid3tag.c: Add TXXX frame identifiers for replaygain stuff as used by some taggers (see #323721).
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Add TXXX frame identifiers for replaygain stuff as used
+	  by some taggers (see #323721).
+
+2006-03-16 10:22:27 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gststreamselector.c: Preserve the existing buggy streamselector behaviour by performing a fallback buffe...
+	  Original commit message from CVS:
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_set_property),
+	  (gst_stream_selector_bufferalloc):
+	  Preserve the existing buggy streamselector behaviour by performing
+	  a fallback buffer allocation when downstream isn't linked yet.
+	  This should really be fixed in playbin by blocking pads until it's
+	  linked them.
+	  Also, use gst_pad_alloc_buffer instead of
+	  gst_pad_alloc_buffer_and_set.
+
+2006-03-15 22:40:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstid3tag.c: Don't crash on unknown ID3v2 TXXX frames.
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Don't crash on unknown ID3v2 TXXX frames.
+
+2006-03-15 17:59:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/alsa/gstalsasink.c: Chain up to the parent finalize method.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_finalise):
+	  Chain up to the parent finalize method.
+	  Add 32-bit sample size to the template caps.
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add the fourcc that the VMWare codec uses.
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_set_property),
+	  (gst_stream_selector_bufferalloc),
+	  (gst_stream_selector_request_new_pad):
+	  For the active pad, forward buffer-alloc requests, otherwise
+	  return GST_FLOW_NOT_LINKED. This also prevents xvimagesink
+	  having to memcpy every frame when used by playbin.
+	  * gst/tcp/gstmultifdsink.c:
+	  (gst_multi_fd_sink_handle_client_write):
+	  Get negotiated caps from the sink pad, rather than the sink
+	  pad's peer.
+
+2006-03-15 17:11:34 +0000  Tommi Myöhänen <ext-tommi.myohanen@nokia.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Don't forget to set src->callbacks_pushed to FALSE again when popping them, otherwise ...
+	  Original commit message from CVS:
+	  Patch by: Tommi Myöhänen  <ext-tommi dot myohanen at nokia dot com>
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_pop_callbacks):
+	  Don't forget to set src->callbacks_pushed to FALSE again when
+	  popping them, otherwise re-activation in a different mode won't
+	  work (#334620).
+
+2006-03-15 11:30:29 +0000  Sebastien Moutte <sebastien@moutte.net>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Replace __VA_ARGS__ caps creation macros with varargs functions. looks nice...
+	  Original commit message from CVS:
+	  Patch by: Sebastien Moutte  <sebastien moutte net>
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c: (gst_ff_vid_caps_new),
+	  (gst_ff_aud_caps_new), (gst_ffmpeg_pixfmt_to_caps),
+	  (gst_ffmpeg_smpfmt_to_caps):
+	  Replace __VA_ARGS__ caps creation macros with varargs functions.
+	  Makes things compile on MSVC (#320765), looks nicer, and we can
+	  tell the compiler to check for the NULL terminator.
+
+2006-03-14 15:13:04 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+	  gst-libs/gst/riff/riff-media.c: Make sure the buffer we copy into is really always big enough, this time for real (#3...
+	  Original commit message from CVS:
+	  Patch by: Fabrizio Gennari  <fabrizio dot ge at tiscali dot it>
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Make sure the buffer we copy into is really always big
+	  enough, this time for real (#333488).
+
+2006-03-14 13:16:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Add support for 24bpp DIB (#305279).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Add support for 24bpp DIB (#305279).
+
+2006-03-14 11:11:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/: Re-enable QoS after the release.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/gstvideofilter.c: (gst_video_filter_init):
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c: (gst_ffmpegcsp_init):
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init),
+	  (gst_video_scale_init), (gst_video_scale_src_event):
+	  Re-enable QoS after the release.
+	  Rework videoscale to use the base class src_event handler.
+
+2006-03-14 09:51:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: back to CVS.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  back to CVS.
+
+=== release 0.10.5 ===
+
+2006-03-13 19:50:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/config.h:
+	  releasing 0.10.5
+	  Original commit message from CVS:
+	  releasing 0.10.5
+
+2006-03-13 17:28:23 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-03-13 11:17:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/plugins/Makefile.am: Part of previous cdparanoiasrc docs fixes, forgot to commit.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  Part of previous cdparanoiasrc docs fixes, forgot to commit.
+
+2006-03-12 14:56:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/plugins/: Add cdparanoiasrc to docs.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  Add cdparanoiasrc to docs.
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  More GstCddaBaseSrc docs.
+
+2006-03-12 13:47:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add new API to libgsttag: gst_tag_from_id3_user_tag().
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/gstid3tag.c: (gst_tag_from_id3_user_tag):
+	  * gst-libs/gst/tag/tag.h:
+	  Add new API to libgsttag: gst_tag_from_id3_user_tag().
+
+2006-03-11 19:47:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: NULL-terminate array of mpeg4 video file extensions.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  NULL-terminate array of mpeg4 video file extensions.
+	  Fixes crash on PPC (#334226).
+
+2006-03-11 16:40:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: gnome_vfs_uri_is_local() alone is not a good indicator whether we can operate in pull-...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  (gst_gnome_vfs_src_check_get_range):
+	  gnome_vfs_uri_is_local() alone is not a good indicator
+	  whether we can operate in pull-mode with a specific URI,
+	  as it returns FALSE for file:// URIs that point to an
+	  NFS-mounted path. Be more conservative here: whitelist
+	  local files, blacklist http URIs and use the old
+	  mechanism for anything else (fixes #334216).
+
+2006-03-10 19:15:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  configure.ac: back to trunk
+	  Original commit message from CVS:
+	  * configure.ac:
+	  back to trunk
+
+=== release 0.10.4 ===
+
+2006-03-10 19:05:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* docs/upload.mak:
+	* win32/common/config.h:
+	  releasing 0.10.4
+	  Original commit message from CVS:
+	  releasing 0.10.4
+
+2006-03-10 12:37:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/video/gstvideosink.c: Disable max-lateness by setting it to -1 for now, so that we can bed QoS stuff in ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init):
+	  Disable max-lateness by setting it to -1 for now, so that
+	  we can bed QoS stuff in thoroughly between now and the next
+	  release.
+
+2006-03-10 11:09:23 +0000  Fabrizio <fabrizio.ge@tiscali.it>
+
+	  gst-libs/gst/riff/riff-media.c: Make sure we don't read beyond the palette buffer in case of
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Make sure we don't read beyond the palette buffer in case of
+	  broken or manipulated files (#333488, patch by: Fabrizio
+	  Gennari)
+
+2006-03-10 10:44:02 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix for variable not initialized.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset):
+	  Fix for variable not initialized.
+
+2006-03-09 19:02:32 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	* docs/libs/tmpl/gstringbuffer.sgml:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	* win32/common/config.h:
+	  prereleasing
+	  Original commit message from CVS:
+	  prereleasing
+
+2006-03-09 17:58:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: Small cleanups.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_get_type),
+	  (gst_visual_src_setcaps), (gst_vis_src_negotiate),
+	  (gst_visual_chain):
+	  Small cleanups.
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/theoradec.c: (gst_theora_dec_init),
+	  (gst_theora_dec_reset), (_theora_granule_time),
+	  (theora_dec_src_convert), (theora_dec_sink_convert),
+	  (theora_dec_src_query), (theora_dec_src_event),
+	  (theora_dec_sink_event), (theora_handle_comment_packet),
+	  (theora_handle_header_packet), (theora_dec_push),
+	  (theora_handle_data_packet), (theora_dec_chain),
+	  (theora_dec_change_state):
+	  Add simple QoS.
+
+2006-03-09 17:50:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Some cleanups.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
+	  (audiocast_register_listener), (gst_gnome_vfs_src_start):
+	  Some cleanups.
+
+2006-03-09 17:45:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Don't try to activate NULL chains.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_activate_chain):
+	  Don't try to activate NULL chains.
+
+2006-03-09 16:30:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix invalid memory access to region before peek'd data (#332964).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset):
+	  Fix invalid memory access to region before peek'd data (#332964).
+
+2006-03-09 15:05:03 +0000  Christophe Fergeau <teuf@gnome.org>
+
+	  closes #333510.
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init):
+	  * ext/pango/gsttextrender.c: (gst_text_render_init):
+	  * gst/adder/gstadder.c: (gst_adder_init):
+	  Don't leak padtemplates, patch by Christophe Fergeau,
+	  closes #333510.
+
+2006-03-09 12:56:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Fix invalid memory access: make sure string passed to regexec() is NUL-termianted.
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (gst_subparse_type_find):
+	  Fix invalid memory access: make sure string passed to
+	  regexec() is NUL-termianted.
+
+2006-03-09 12:37:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Refactor mpeg/audio typefinding to make it more maintainable and easier to fine-...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset),
+	  (mp3_type_find):
+	  Refactor mpeg/audio typefinding to make it more maintainable
+	  and easier to fine-tune. Make probing into middle of the file
+	  work properly (fixes #333900, also see #152688).
+
+2006-03-09 11:10:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Remove part from previous commit that was bogus: g_utf8_validate() does in fact ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  (utf8_type_find_have_valid_utf8_at_offset):
+	  Remove part from previous commit that was bogus:
+	  g_utf8_validate() does in fact not accept embedded
+	  zeroes, so we don't need to check for those (thanks
+	  to Mike for the hint).
+
+2006-03-08 17:11:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Make plain/text typefinder more conservative: firstly, check for embedded zeroes...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  (utf8_type_find_count_embedded_zeroes),
+	  (utf8_type_find_have_valid_utf8_at_offset), (utf8_type_find):
+	  Make plain/text typefinder more conservative: firstly, check
+	  for embedded zeroes, which are perfectly valid UTF-8 characters,
+	  but also a fairly good sign that something is not a plain text
+	  file; secondly, probe into the middle of the file if possible.
+	  If we can't probe into the middle, limit the probability value
+	  to be returned to TYPE_FIND_POSSIBLE (see #333900).
+
+2006-03-08 11:34:45 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Make typefind function name for mpeg4 video unique.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Make typefind function name for mpeg4 video unique.
+
+2006-03-08 09:53:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/libvisual/visual.c: Cleanups, post nice errors.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_init),
+	  (gst_visual_clear_actors), (gst_visual_dispose),
+	  (gst_visual_reset), (gst_visual_src_setcaps),
+	  (gst_visual_sink_setcaps), (gst_vis_src_negotiate),
+	  (gst_visual_sink_event), (gst_visual_src_event), (get_buffer),
+	  (gst_visual_chain), (gst_visual_change_state):
+	  Cleanups, post nice errors.
+	  Handle sink and src events.
+	  Implement simple QoS.
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init):
+	  Use new basesink methods to configure max-lateness.
+	  Small doc update.
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_transform_caps), (gst_ffmpegcsp_set_caps):
+	  Debug statement cleanups.
+	  * gst/volume/gstvolume.c: (gst_volume_class_init):
+	  Simple cleanup.
+
+2006-03-08 09:50:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Revert API/ABI break from March 1. Keep 'halign' and 'valign' as string type properties, ...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init),
+	  (gst_text_overlay_init), (gst_text_overlay_set_property),
+	  (gst_text_overlay_get_property):
+	  Revert API/ABI break from March 1. Keep 'halign' and 'valign'
+	  as string type properties, but mark them deprecated. Add
+	  'halignment' and 'valignment' properties that use enums
+	  instead of strings.
+
+2006-03-08 09:37:12 +0000  Fabrizio <fabrizio.ge@tiscali.it>
+
+	  gst-libs/gst/riff/riff-media.c: Allow palettes with less than 256 colours in AVI files
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Allow palettes with less than 256 colours in AVI files
+	  (#333488, patch by: Fabrizio Gennari).
+
+2006-03-07 21:56:09 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Fix wrong EOS handling on text pad. We were releasing the queued text buffer when we shou...
+	  Original commit message from CVS:
+	  2006-03-07  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_text_event),
+	  (gst_text_overlay_video_event): Fix wrong EOS handling on text
+	  pad. We were releasing the queued text buffer when we should keep
+	  it until video pad gets EOS or discard the text buffer because it's
+	  too old. That was eating the last subtitle buffer. Add some more
+	  debug.
+
+2006-03-07 17:28:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Fix invalid memory access (we can't access a buffer after it's been pushed downstream wit...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_render_text),
+	  (gst_text_overlay_video_chain):
+	  Fix invalid memory access (we can't access a buffer after it's been
+	  pushed downstream without taking a reference); fix memory leak (if
+	  there's no text to render, bail out before allocating stuff).
+
+2006-03-07 15:08:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.*: If input is plain text, escape it before passing it to pango_layout_set_markup().
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init),
+	  (gst_text_overlay_setcaps_txt), (gst_text_overlay_video_chain):
+	  * ext/pango/gsttextoverlay.h:
+	  If input is plain text, escape it before passing it to
+	  pango_layout_set_markup().
+
+2006-03-07 13:01:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstaudiofilter.c: Don't ignore flow return from gst_pad_push().
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiofilter.c: (gst_audio_filter_chain):
+	  Don't ignore flow return from gst_pad_push().
+
+2006-03-07 12:49:03 +0000  Christophe Fergeau <teuf@gnome.org>
+
+	  Don't leak references returned by gst_pad_get_parent()
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_getcaps),
+	  (gst_visual_src_setcaps), (gst_visual_sink_setcaps):
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_sinkconnect):
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_convert_src),
+	  (gst_vorbisenc_convert_sink):
+	  * gst-libs/gst/audio/audio.c: (gst_audio_frame_byte_size),
+	  (gst_audio_duration_from_pad_buffer):
+	  * gst-libs/gst/audio/gstaudiofilter.c: (gst_audio_filter_link),
+	  (gst_audio_filter_chain):
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps):
+	  * gst-libs/gst/video/video.c: (gst_video_frame_rate),
+	  (gst_video_get_size):
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_setcaps):
+	  Don't leak references returned by gst_pad_get_parent()
+	  (#333663, based on patch by: Christophe Fergeau).
+
+2006-03-06 20:52:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/gnomevfs/gstgnomevfssink.c: change location param details
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init):
+	  change location param details
+	  * gst/volume/gstvolume.c: (plugin_init):
+	  correct plugin description
+
+2006-03-06 20:07:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Override GstBaseSrc::check_get_range() in order to avoid opening the resource just to ...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init),
+	  (gst_gnome_vfs_src_check_get_range):
+	  Override GstBaseSrc::check_get_range() in order to avoid opening
+	  the resource just to check whether we can operate in pull-mode or
+	  not - we can predict that pretty well from the URI alone. Should
+	  fix problems with last.fm (#331690). (Requires latest core CVS).
+
+2006-03-06 16:18:51 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/video/gstvideosink.c: Throw away frames that are later than 20 ms.
+	  Original commit message from CVS:
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init),
+	  (gst_video_sink_class_init):
+	  Throw away frames that are later than 20 ms.
+
+2006-03-06 14:14:47 +0000  Fabrizio <fabrizio.ge@tiscali.it>
+
+	  gst-libs/gst/riff/riff-media.c:
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Set depth on WMA caps (#333545, patch by: Fabrizio Gennari).
+
+2006-03-05 23:39:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/ogg/gstoggmux.c: put Theora BOS pages before others.  This hardcodes the Ogg/Theora I profile, but hey.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page),
+	  (gst_ogg_mux_send_headers), (gst_ogg_mux_collected):
+	  put Theora BOS pages before others.  This hardcodes
+	  the Ogg/Theora I profile, but hey.
+
+2006-03-05 23:06:22 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	  changed more than 5 lines
+	  Original commit message from CVS:
+	  changed more than 5 lines
+
+2006-03-05 22:57:58 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ogg muxing of vorbis and theora now has pages ordered correctly again, even with delays.
+	  Original commit message from CVS:
+	  ogg muxing of vorbis and theora now has pages ordered correctly again,
+	  even with delays.
+	  * ext/ogg/README:
+	  updated with some examples
+	  * ext/theora/theoraenc.c: (granulepos_to_timestamp),
+	  (granulepos_add), (theora_buffer_from_packet):
+	  * ext/vorbis/vorbisenc.c: (granulepos_to_timestamp_offset),
+	  (granulepos_to_timestamp), (gst_vorbisenc_buffer_from_packet),
+	  (gst_vorbisenc_chain):
+	  implement strategy from ext/ogg/README
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page),
+	  (gst_ogg_mux_push_buffer), (gst_ogg_mux_dequeue_page),
+	  (gst_ogg_mux_pad_queue_page), (gst_ogg_mux_compare_pads),
+	  (gst_ogg_mux_queue_pads), (gst_ogg_mux_collected):
+	  Fix muxer so that oggz-validate is happy with all streams;
+	  except for no eos mark, and the BOS page ordering
+	  * tests/check/pipelines/theoraenc.c: (check_buffer_is_header),
+	  (check_buffer_granulepos):
+	  * tests/check/pipelines/vorbisenc.c: (check_buffer_granulepos):
+	  update tests to check for OFFSET being set as requested
+	  fixed type of granulepos, it's not a ClockTime
+
+2006-03-05 21:34:23 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.c: Check that the xvimage we are creating has a correct size         before returning it. (#3...
+	  Original commit message from CVS:
+	  2006-03-05  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+	  (gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
+	  Check that the xvimage we are creating has a correct size         before returning it. (#314897)
+
+2006-03-05 13:44:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Give id3 and ape tag typefinders a rank slightly higher than PRIMARY to ensure t...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Give id3 and ape tag typefinders a rank slightly higher
+	  than PRIMARY to ensure they're always run before any of
+	  the other typefinders (in particular wav and mp3) (#324186).
+
+2006-03-05 13:08:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Add support for '3IVD' fourcc (#333403).
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Add support for '3IVD' fourcc (#333403).
+
+2006-03-04 14:35:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  configure.ac: Bump requirements to GStreamer CVS for the new error enum.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Bump requirements to GStreamer CVS for the new error enum.
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_render):
+	  Emit new GST_RESOURCE_ERROR_NO_SPACE_LEFT when there's no
+	  space left on the device (fixes #333352).
+
+2006-03-03 23:53:50 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/vs6: add a project file for libgstvolume update the workspace
+	  Original commit message from CVS:
+	  * win32/vs6:
+	  add a project file for libgstvolume
+	  update the workspace
+
+2006-03-03 15:26:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/README:
+	* ext/ogg/gstoggmux.c:
+	  debug updates
+	  Original commit message from CVS:
+	  debug updates
+
+2006-03-03 15:22:02 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  Fix for http://bugzilla.gnome.org/show_bug.cgi?id=333254
+	  Original commit message from CVS:
+	  2006-03-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+	  * ext/theora/theoraenc.c: (theora_set_header_on_caps):
+	  * tests/check/pipelines/theoraenc.c: (check_buffer_is_header),
+	  (GST_START_TEST):
+	  Fix for http://bugzilla.gnome.org/show_bug.cgi?id=333254
+	  Set IN_CAPS on header buffers
+
+2006-03-02 18:23:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/plugins/: Add audioresample to docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  Add audioresample to docs.
+	  * gst/audioconvert/gstaudioconvert.c:
+	  Add revision date.
+	  * gst/audioresample/gstaudioresample.c:
+	  (gst_audioresample_base_init), (gst_audioresample_class_init),
+	  (gst_audioresample_init), (gst_audioresample_dispose),
+	  (audioresample_get_unit_size), (audioresample_transform_caps),
+	  (resample_set_state_from_caps), (audioresample_transform_size),
+	  (audioresample_set_caps), (audioresample_event),
+	  (audioresample_do_output), (audioresample_transform),
+	  (audioresample_pushthrough), (gst_audioresample_set_property),
+	  (gst_audioresample_get_property), (plugin_init):
+	  * gst/audioresample/gstaudioresample.h:
+	  Added docs.
+	  Small code cleanups.
+
+2006-03-02 18:12:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/videorate/Makefile.am:
+	  fix wim's commit
+	  Original commit message from CVS:
+	  fix wim's commit
+
+2006-03-02 17:48:40 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	  debug using the actual GstPad, that allows us to see the serialno in the padname
+	  Original commit message from CVS:
+	  debug using the actual GstPad, that allows us to see the serialno in the padname
+
+2006-03-02 17:46:36 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/plugins/: Added videoscale to docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  Added videoscale to docs.
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_flush_prev),
+	  (gst_video_rate_swap_prev), (gst_video_rate_event),
+	  (gst_video_rate_chain):
+	  Fix typo in docs.
+	  * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init),
+	  (gst_video_scale_init), (gst_video_scale_prepare_size),
+	  (gst_video_scale_set_caps), (gst_video_scale_get_unit_size),
+	  (gst_video_scale_fixate_caps), (gst_video_scale_transform):
+	  * gst/videoscale/gstvideoscale.h:
+	  Added docs, examples.
+	  Some code cleanups.
+	  Post errors instead of g_warning.
+
+2006-03-02 17:30:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	  clean up debug messages
+	  Original commit message from CVS:
+	  clean up debug messages
+
+2006-03-02 17:15:38 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	  extra debugging from older version, makes it easier to compare
+	  Original commit message from CVS:
+	  extra debugging from older version, makes it easier to compare
+
+2006-03-02 17:04:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ext/ogg/gstoggmux.c:
+	  some space cleanup and debug fixes
+	  Original commit message from CVS:
+	  some space cleanup and debug fixes
+
+2006-03-02 16:47:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/: Added some more docs to libs and plugins.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  Added some more docs to libs and plugins.
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_prepare_read), (gst_ring_buffer_clear):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Document ringbuffer some more.
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_class_init),
+	  (gst_video_rate_setcaps), (gst_video_rate_reset),
+	  (gst_video_rate_init), (gst_video_rate_flush_prev),
+	  (gst_video_rate_swap_prev), (gst_video_rate_event),
+	  (gst_video_rate_chain), (gst_video_rate_change_state):
+	  * gst/videorate/gstvideorate.h:
+	  Fix videorate to use segments.
+	  Make it work with 0/1 framerates (closes #331903)
+	  Handle EOS correctly.
+	  Added docs.
+
+2006-03-02 13:13:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstogmparse.c: In state change function, first chain up to parent class, then handle downwards state change s...
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_class_init),
+	  (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init),
+	  (gst_ogm_text_parse_init), (gst_ogm_parse_change_state):
+	  In state change function, first chain up to parent class,
+	  then handle downwards state change stuff. Remove some
+	  commented out cruft from 0.8 code.
+
+2006-03-02 12:35:59 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/ogg/gstogmparse.c: Don't remove/re-add source pad if the new caps are the same as the old caps anyway (#333042). ...
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_init),
+	  (gst_ogm_video_parse_init), (gst_ogm_text_parse_init),
+	  (gst_ogm_parse_sink_convert), (gst_ogm_parse_sink_query),
+	  (gst_ogm_parse_chain):
+	  Don't remove/re-add source pad if the new caps are the same as
+	  the old caps anyway (#333042). When removing source pad, don't
+	  unref it afterwards - we didn't ref it when adding. Sprinkle some
+	  GST_DEBUG_FUNCPTR goodness here and there. Don't leak references
+	  after using gst_pad_get_parent(). Return downstream flow return
+	  value in chain function.
+
+2006-03-02 11:28:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  docs/plugins/: Fix hierarchy, added some more elements to the docs.
+	  Original commit message from CVS:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.interfaces:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  Fix hierarchy, added some more elements to the docs.
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_get_type):
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	  Fix docs for ffmpegcolorspace.
+
+2006-03-01 19:24:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Some typefinding fine-tuning:
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (id3_type_find),
+	  (apetag_type_find), (ape_type_find), (plugin_init):
+	  Some typefinding fine-tuning:
+	  - rank ID3/APE tags in order of preference via probabilities, so that
+	  ID3v2 > APEv2 > APEv1 > ID3v1.
+	  - three or four bytes don't really justify MAXIMUM probability,
+	  change those to 'very likely' (musepack and monkeysaudio).
+
+2006-03-01 18:25:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Added alsa docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/alsa/gstalsamixer.c:
+	  * ext/alsa/gstalsamixer.h:
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_class_init), (gst_alsa_mixer_element_init):
+	  * ext/alsa/gstalsamixerelement.h:
+	  * ext/alsa/gstalsasink.c:
+	  * ext/alsa/gstalsasink.h:
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init),
+	  (gst_alsasrc_init):
+	  * ext/alsa/gstalsasrc.h:
+	  Added alsa docs.
+	  Small code cleanups.
+
+2006-03-01 17:52:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/Makefile.am: Dist new header too,
+	  Original commit message from CVS:
+	  * ext/theora/Makefile.am:
+	  Dist new header too,
+
+2006-03-01 17:39:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Fix some more docs.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/gnomevfs/gstgnomevfssink.h:
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_data_packet):
+	  * ext/vorbis/vorbisdec.h:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_convert_sink):
+	  * ext/vorbis/vorbisenc.h:
+	  * ext/vorbis/vorbisparse.c: (vorbis_parse_set_header_on_caps),
+	  (vorbis_parse_chain), (vorbis_parse_change_state):
+	  * ext/vorbis/vorbisparse.h:
+	  * gst/audioconvert/gstaudioconvert.h:
+	  * gst/tcp/gsttcpserversink.h:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  * gst/volume/gstvolume.c:
+	  * gst/volume/gstvolume.h:
+	  Fix some more docs.
+	  Added docs for vorbisdec and vorbisparse.
+	  Fix vorbisparse.
+
+2006-03-01 16:24:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  Updated/added documentation.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * ext/pango/gstclockoverlay.h:
+	  * ext/pango/gsttextoverlay.h:
+	  * ext/pango/gsttextrender.h:
+	  * ext/pango/gsttimeoverlay.h:
+	  * ext/theora/gsttheoradec.h:
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/theoradec.c:
+	  * ext/theora/theoraenc.c:
+	  * gst/audioconvert/gstaudioconvert.h:
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.h:
+	  * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+	  * gst/tcp/gstmultifdsink.h:
+	  Updated/added documentation.
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_valign_get_type),
+	  (gst_text_overlay_halign_get_type),
+	  (gst_text_overlay_wrap_mode_get_type),
+	  (gst_text_overlay_base_init), (gst_text_overlay_class_init),
+	  (gst_text_overlay_init), (gst_text_overlay_set_property),
+	  (gst_text_overlay_get_property):
+	  Fix up properties to be enums instead of string to make bindings,
+	  introspection and automatic GUI creation possible.
+	  Add getters for the properties.
+
+2006-02-28 21:21:07 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst/audiotestsrc/gstaudiotestsrc.c: added defines of M_PI and M_PI_2
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  added defines of M_PI and M_PI_2
+	  * gst/ffmpegcolorspace/avcodec.h:
+	  removed #include "stdint.h" for win32 as _stdint.h is
+	  autogenerated to win32/common
+	  * win32/common/libgstaudio.def:
+	  * win32/common/libgsttag.def:
+	  added some exports
+	  * win32/vs6:
+	  some project files bugs corrected
+	  * win32/vs7:
+	  project files are reset to the default vs7 configuration
+	  (they link to msvcr71.dll using default optimizations)
+
+2006-02-28 19:08:12 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/gnomevfs/gstgnomevfssink.c: Fix some docs.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init):
+	  Fix some docs.
+
+2006-02-28 13:52:04 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/alsa/gstalsasrc.c: Set proper class on the ElementDetails:
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasrc.c:
+	  Set proper class on the ElementDetails:
+	  Source/Audio instead of Src/Audio
+
+2006-02-28 12:19:11 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/videoscale/vs_scanline.c: Revert optimization in videoscale. It should go in liboil and have an appropriate liboi...
+	  Original commit message from CVS:
+	  * gst/videoscale/vs_scanline.c:
+	  (vs_scanline_resample_nearest_RGBA):
+	  Revert optimization in videoscale. It should go in liboil and have
+	  an appropriate liboil function.
+
+2006-02-28 11:06:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Don't try to provide a clock in the NULL state.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_provide_clock):
+	  Don't try to provide a clock in the NULL state.
+
+2006-02-28 11:04:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/ogg/gstoggdemux.c: Use GstSegment infrastructure to remove duplicated code and handle more seek cases correctly.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_receive_event),
+	  (gst_ogg_pad_event), (gst_ogg_pad_internal_chain),
+	  (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_deactivate_current_chain),
+	  (gst_ogg_demux_activate_chain), (gst_ogg_demux_do_seek),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_collect_info),
+	  (gst_ogg_demux_find_chains), (gst_ogg_demux_chain),
+	  (gst_ogg_demux_loop), (gst_ogg_demux_change_state):
+	  Use GstSegment infrastructure to remove duplicated code
+	  and handle more seek cases correctly.
+
+2006-02-28 10:39:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/ffmpegcolorspace/gstffmpegcolorspace.c: Don't ignore return code from ffmpeg convert function.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_transform):
+	  Don't ignore return code from ffmpeg convert function.
+	  * gst/ffmpegcolorspace/imgconvert.c: (img_convert):
+	  Split out some long statements to ease debugging.
+
+2006-02-27 12:08:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/libvisual/visual.c: Don't use gst_pad_use_fixed_caps, because it prevents downstream from being able to renegotia...
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (gst_visual_init),
+	  (gst_vis_src_negotiate), (get_buffer), (plugin_init):
+	  Don't use gst_pad_use_fixed_caps, because it prevents downstream from
+	  being able to renegotiate the size. Instead, use the negotiation
+	  algorithm from the goom plugin to pick an initial output caps.
+	  Also, allow theoretical libvisual plugins that might support non-GL
+	  output even if they also do GL.
+
+2006-02-26 21:05:46 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/libvisual/visual.c: Load only non GL plugins. Fix some memleaks and possible negotiation issues.
+	  Original commit message from CVS:
+	  2006-02-26  Julien MOUTTE  <julien@moutte.net>
+	  * ext/libvisual/visual.c: (gst_visual_init),
+	  (gst_visual_src_setcaps), (get_buffer), (gst_visual_chain),
+	  (plugin_init): Load only non GL plugins. Fix some memleaks and
+	  possible negotiation issues.
+
+2006-02-24 23:19:44 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst-libs/gst/tag/tag.h: Adding Annodex tags here.
+	  Original commit message from CVS:
+	  2006-02-25  Julien MOUTTE  <julien@moutte.net>
+	  * gst-libs/gst/tag/tag.h: Adding Annodex tags here.
+
+2006-02-24 18:55:27 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix CMML type find function to not require a specific minor version of the CMML ...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mpeg4_video_type_find),
+	  (cmml_type_find), (plugin_init):
+	  Fix CMML type find function to not require a specific minor version
+	  of the CMML header.
+	  Add an MPEG4 video elementary stream typefind function.
+
+2006-02-24 17:31:53 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggdemux.c: Annodex support in ogg demuxer. Doesn't do very much without the other annodex patches (to come).
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fishead),
+	  (gst_ogg_pad_parse_skeleton_fisbone), (gst_ogg_pad_query_convert),
+	  (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
+	  (gst_ogg_demux_perform_seek), (gst_ogg_demux_read_chain),
+	  (gst_ogg_demux_read_end_chain), (gst_ogg_demux_collect_chain_info),
+	  (gst_ogg_demux_change_state), (gst_annodex_granule_to_time):
+	  Annodex support in ogg demuxer. Doesn't do very much without the
+	  other annodex patches (to come).
+
+2006-02-24 16:21:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c:
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+	  Pick up palette for MS video v1 (#327028, patch by:
+	  Fabrizio Gennari <fabrizio dot get at tiscali dot it>)
+
+2006-02-24 13:54:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/ffmpegcolorspace/gstffmpegcolorspace.c: The 'palette_data' field from incoming RGB caps shouldn't be proxied on o...
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_caps_remove_format_info),
+	  (gst_ffmpegcsp_get_unit_size):
+	  The 'palette_data' field from incoming RGB caps shouldn't be
+	  proxied on outgoing YUV caps; also, restrict unit size
+	  adjustment in case of paletted data only to the unit that
+	  actually has a palette. Fixes #330711.
+
+2006-02-24 12:18:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/ffmpegcolorspace/gstffmpegcolorspace.c: Plug some memory leaks.
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+	  (gst_ffmpegcsp_transform_caps), (gst_ffmpegcsp_set_caps),
+	  (gst_ffmpegcsp_finalize), (gst_ffmpegcsp_class_init),
+	  (gst_ffmpegcsp_get_unit_size):
+	  Plug some memory leaks.
+
+2006-02-24 10:18:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  sys/: Add some _CFLAGS and _LIBS that seem to be missing and/or required for Cygwin (see #317048).
+	  Original commit message from CVS:
+	  * sys/ximage/Makefile.am:
+	  * sys/xvimage/Makefile.am:
+	  Add some _CFLAGS and _LIBS that seem to be missing
+	  and/or required for Cygwin (see #317048).
+
+2006-02-24 00:07:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	* ChangeLog:
+	  ChangeLog surgery: use UTF-8 encoding in stead of ISO-8859-15
+	  Original commit message from CVS:
+	  ChangeLog surgery: use UTF-8 encoding in stead of ISO-8859-15
+
+2006-02-22 18:46:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasrc.c: Fix description as pointed out by caugier.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasrc.c:
+	  Fix description as pointed out by caugier.
+
+2006-02-22 10:29:22 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Better 3gp typefinding.
+	  Original commit message from CVS:
+	  Reviewed by : Edward Hervey  <edward@fluendo.com>
+	  * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
+	  (qt_type_find):
+	  Better 3gp typefinding.
+
+2006-02-21 12:16:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Don't send EOS event here, the base class will send one for us.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create):
+	  Don't send EOS event here, the base class will send one for us.
+	  * gst/playback/gstplaybasebin.c: (prepare_output):
+	  Subpictures without video stream aren't allowed either.
+	  * gst/subparse/gstsubparse.c: (gst_subparse_type_find):
+	  Fix debug statement copy'n'paste-o.
+
+2006-02-21 12:05:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsamixer.c: Fix issues with mixer keeping state when muting/unmuting and when changing the volume whilst...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume):
+	  Fix issues with mixer keeping state when muting/unmuting
+	  and when changing the volume whilst muted (see #331763
+	  and #331765).
+
+2006-02-20 18:27:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Set right caps given that we send escaped text. Also, honour <i></i>, <b></b> and <u></u>...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (subrip_unescape_formatting),
+	  (parse_subrip), (gst_sub_parse_format_autodetect):
+	  Set right caps given that we send escaped text. Also,
+	  honour <i></i>, <b></b> and <u></u> markers that can be found
+	  in .srt files (fixes #310202).
+
+2006-02-20 16:21:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/mixerutils.c: Make order in which elements are tried more determinable.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/mixerutils.c:
+	  (element_factory_rank_compare_func):
+	  Make order in which elements are tried more determinable.
+
+2006-02-20 15:57:51 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gstdecodebin.c: Make decodebin reusable by fixing remove_element_chain first and then introduce a cleane...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (get_our_ghost_pad),
+	  (remove_element_chain), (cleanup_decodebin),
+	  (gst_decode_bin_change_state): Make decodebin reusable by
+	  fixing remove_element_chain first and then introduce a
+	  cleaner in state change to ->NULL. (Closes #331678)
+	  ------------------------------------------------------
+
+2006-02-19 14:32:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/gnomevfs/gstgnomevfssink.c: use 0666 mask when creating files so umask gets applied correctly. Fixes #331295.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_open_file):
+	  use 0666 mask when creating files so umask gets applied
+	  correctly. Fixes #331295.
+
+2006-02-19 14:16:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/: Add very basic parser for SSA subtitle streams (as often found in matroska files).
+	  Original commit message from CVS:
+	  * gst/subparse/Makefile.am:
+	  * gst/subparse/gstssaparse.c: (gst_ssa_parse_base_init),
+	  (gst_ssa_parse_dispose), (gst_ssa_parse_init),
+	  (gst_ssa_parse_class_init), (gst_ssa_parse_src_event),
+	  (gst_ssa_parse_sink_event), (gst_ssa_parse_setcaps),
+	  (gst_ssa_parse_remove_override_codes), (gst_ssa_parse_parse_line),
+	  (gst_ssa_parse_chain), (gst_ssa_parse_change_state):
+	  * gst/subparse/gstssaparse.h:
+	  * gst/subparse/gstsubparse.c: (plugin_init):
+	  Add very basic parser for SSA subtitle streams (as often
+	  found in matroska files).
+
+2006-02-19 14:09:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: That should be text/x-pango-markup, not text/x-pango-layout.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (mimetype_is_raw):
+	  That should be text/x-pango-markup, not text/x-pango-layout.
+
+2006-02-19 12:41:03 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Polishing.
+	  Original commit message from CVS:
+	  2006-02-19  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_finalize):
+	  Polishing.
+
+2006-02-19 12:05:23 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Fix state change deadlock.
+	  Original commit message from CVS:
+	  2006-02-19  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_base_init),
+	  (gst_text_overlay_finalize), (gst_text_overlay_init),
+	  (gst_text_overlay_setcaps), (gst_text_overlay_src_event),
+	  (gst_text_overlay_render_text),
+	  (gst_text_overlay_text_pad_link),
+	  (gst_text_overlay_text_event), (gst_text_overlay_video_event),
+	  (gst_text_overlay_pop_text), (gst_text_overlay_text_chain),
+	  (gst_text_overlay_video_chain), (gst_text_overlay_change_state):
+	  Fix state change deadlock.
+
+2006-02-19 11:56:28 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.*: Fix seeking both for muxed formats and subtitles files.
+	  Original commit message from CVS:
+	  2006-02-19  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_base_init),
+	  (gst_text_overlay_finalize), (gst_text_overlay_init),
+	  (gst_text_overlay_setcaps), (gst_text_overlay_src_event),
+	  (gst_text_overlay_render_text),
+	  (gst_text_overlay_text_pad_link),
+	  (gst_text_overlay_text_event), (gst_text_overlay_video_event),
+	  (gst_text_overlay_pop_text), (gst_text_overlay_text_chain),
+	  (gst_text_overlay_video_chain), (gst_text_overlay_change_state):
+	  * ext/pango/gsttextoverlay.h: Fix seeking both for muxed formats
+	  and subtitles files.
+
+2006-02-19 00:40:38 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gstdecodebin.c: pango layout should be considered as row.
+	  Original commit message from CVS:
+	  2006-02-19  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gstdecodebin.c: (mimetype_is_raw): pango layout
+	  should be considered as row.
+
+2006-02-19 00:25:16 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gststreaminfo.*: Introduce language informations.
+	  Original commit message from CVS:
+	  2006-02-19  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+	  (cb_probe):
+	  * gst/playback/gststreaminfo.h: Introduce language informations.
+
+2006-02-18 22:41:31 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: Set shared memory segments to be deleted as soon as we have attached, that way they get cleaned up automaticall...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+	  (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimagesink_check_xshm_calls), (gst_xvimagesink_xvimage_new):
+	  Set shared memory segments to be deleted as soon as we have attached,
+	  that way they get cleaned up automatically if we crash.
+
+2006-02-18 19:53:48 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/: Those functions are called with lock held.
+	  Original commit message from CVS:
+	  2006-02-18  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gstclockoverlay.c: (gst_clock_overlay_get_text):
+	  * ext/pango/gsttimeoverlay.c: (gst_time_overlay_get_text): Those
+	  functions are called with lock held.
+
+2006-02-18 19:51:47 +0000  Julien Moutte <julien@moutte.net>
+
+	* ChangeLog:
+	  Forgot Changelog.
+	  Original commit message from CVS:
+	  Forgot Changelog.
+
+2006-02-18 19:10:35 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Refactoring of textoverlay without collectpads. This now supports sparse subtitles coming...
+	  Original commit message from CVS:
+	  2006-02-18  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_base_init),
+	  (gst_text_overlay_finalize), (gst_text_overlay_init),
+	  (gst_text_overlay_setcaps), (gst_text_overlay_src_event),
+	  (gst_text_overlay_render_text),
+	  (gst_text_overlay_text_pad_link),
+	  (gst_text_overlay_text_pad_unlink),
+	  (gst_text_overlay_text_event),
+	  (gst_text_overlay_video_event), (gst_text_overlay_pop_text),
+	  (gst_text_overlay_text_chain), (gst_text_overlay_video_chain),
+	  (gst_text_overlay_change_state): Refactoring of textoverlay
+	  without collectpads. This now supports sparse subtitles coming
+	  from a demuxer instead of a sub file. Seeking is still broken
+	  though. Need to discuss with wtay some more on how to handle
+	  seeking correctly.
+	  * ext/pango/gsttextoverlay.h:
+	  * gst/playback/gstplaybin.c: (setup_sinks): Support linking with
+	  subtitles coming from the demuxer.
+
+2006-02-17 19:31:12 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisenc.c: Use some more scaling functions.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_convert_src),
+	  (gst_vorbisenc_convert_sink):
+	  Use some more scaling functions.
+
+2006-02-17 16:12:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/cdparanoia/gstcdparanoiasrc.*: Add back 'transport-error' and 'uncorrected-error' signals and make them actually ...
+	  Original commit message from CVS:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  (gst_cd_paranoia_src_class_init), (gst_cd_paranoia_dummy_callback),
+	  (gst_cd_paranoia_paranoia_callback),
+	  (gst_cd_paranoia_src_signal_is_being_watched),
+	  (gst_cd_paranoia_src_read_sector):
+	  * ext/cdparanoia/gstcdparanoiasrc.h:
+	  Add back 'transport-error' and 'uncorrected-error' signals and
+	  make them actually be fired when bad stuff happens (#319340).
+
+2006-02-17 14:07:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Small cleanups.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_get_type),
+	  (gst_ring_buffer_open_device), (gst_ring_buffer_close_device),
+	  (gst_ring_buffer_device_is_open), (gst_ring_buffer_acquire),
+	  (gst_ring_buffer_release), (gst_ring_buffer_set_flushing),
+	  (gst_ring_buffer_start), (gst_ring_buffer_pause_unlocked),
+	  (gst_ring_buffer_pause), (gst_ring_buffer_stop),
+	  (gst_ring_buffer_delay), (gst_ring_buffer_samples_done),
+	  (gst_ring_buffer_set_sample), (gst_ring_buffer_clear_all),
+	  (gst_ring_buffer_commit), (gst_ring_buffer_prepare_read),
+	  (gst_ring_buffer_clear):
+	  Small cleanups.
+	  Added some G_LIKELY.
+
+2006-02-17 10:15:52 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/TODO: Update TODO
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/TODO:
+	  Update TODO
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_get_offset):
+	  When trying to play samples ASAP and we don't have a
+	  previous sample, try to play at position 0 instead of
+	  an invalid position.
+
+2006-02-17 09:24:56 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.c: Also release lock when we get an error in _reset(); fix an error message.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_open),
+	  (gst_alsasink_reset):
+	  Also release lock when we get an error in _reset();
+	  fix an error message.
+
+2006-02-16 21:01:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/gstalsasink.*: Add support for more than 2 channels (#326720).
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_class_init),
+	  (gst_alsasink_init), (get_channel_free_structure),
+	  (caps_add_channel_configuration), (gst_alsasink_getcaps),
+	  (gst_alsasink_close):
+	  * ext/alsa/gstalsasink.h:
+	  Add support for more than 2 channels (#326720).
+
+2006-02-16 20:19:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/riff/riff-media.c: Set codec_name for WAVEFORMATEX as well. When we have 'normal PCM' with 4 or 6 channe...
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+	  Set codec_name for WAVEFORMATEX as well. When we have 'normal PCM'
+	  with 4 or 6 channels, assume a default channel layout to make things
+	  work (not sure there's anything else we can do in those cases).
+
+2006-02-16 19:18:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: Minor docs fix.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  Minor docs fix.
+	  * gst-libs/gst/riff/Makefile.am:
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c:
+	  (gst_riff_wavext_add_channel_layout), (gst_riff_create_audio_caps):
+	  Add support for WAVEFORMATEX, eg. PCM audio with more than two
+	  channels and a channel layout map.
+
+2006-02-16 17:06:46 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/videoscale/vs_scanline.c: C-level optimization of the RGBA nearest neighbour function.
+	  Original commit message from CVS:
+	  Reviewed by Edward Hervey  <edward@fluendo.com>
+	  * gst/videoscale/vs_scanline.c: (vs_scanline_resample_nearest_RGBA):
+	  C-level optimization of the RGBA nearest neighbour function.
+	  Eventually this might end up in liboil with vectorized versions.
+
+2006-02-16 11:44:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/multichannel.c: When we have more than 2 channels, but no channel layout is specified in the caps,...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/multichannel.c:
+	  (gst_audio_get_channel_positions):
+	  When we have more than 2 channels, but no channel layout is
+	  specified in the caps, return some default channel layout
+	  to the caller and warn about about a possibly buggy element
+	  (could be buggy filtercaps as well of course) (#317038).
+
+2006-02-16 09:29:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  pkgconfig/gstreamer-plugins-base-uninstalled.pc.in: Add gst-libs/gst/cdda to list of lib search paths.
+	  Original commit message from CVS:
+	  * pkgconfig/gstreamer-plugins-base-uninstalled.pc.in:
+	  Add gst-libs/gst/cdda to list of lib search paths.
+
+2006-02-15 12:20:47 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/ogg/gstoggmux.c (gst_ogg_mux_collected): When updating timestamp, update timestamp_end as well. Fixes a bugaboo. ...
+	  Original commit message from CVS:
+	  2006-02-15  Andy Wingo  <wingo@pobox.com>
+	  * ext/ogg/gstoggmux.c (gst_ogg_mux_collected): When updating
+	  timestamp, update timestamp_end as well. Fixes a bugaboo. I hope
+	  to the Lord Jesus that I do not have to touch the ogg muxer ever
+	  again.
+
+2006-02-15 12:07:57 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: quicktime movie files can also contain 'uuid' atoms.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+	  quicktime movie files can also contain 'uuid' atoms.
+
+2006-02-14 18:52:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/audioconvert/plugin.c: Register the GstAudioChannelPosition enum type with the type system in the plugin_init fun...
+	  Original commit message from CVS:
+	  * gst/audioconvert/plugin.c: (plugin_init):
+	  Register the GstAudioChannelPosition enum type with the type
+	  system in the plugin_init function, so that it is known before
+	  any element actually makes use of multi-channel stuff. This is
+	  required for example if one wants to be able to deserialise/use
+	  a caps string with channel positions before any pipeline has
+	  been setup and started, like with gst-launch.
+
+2006-02-14 13:45:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Add some compiler G_(UN_)LIKELY help.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c:
+	  (gst_ring_buffer_pause_unlocked), (gst_ring_buffer_delay),
+	  (gst_ring_buffer_samples_done), (wait_segment),
+	  (gst_ring_buffer_commit), (gst_ring_buffer_clear):
+	  Add some compiler G_(UN_)LIKELY help.
+	  SIGNAL the ringbuffer waiters when going to PAUSED as well to
+	  make sure they can exit their functions. Should fix #330748
+
+2006-02-13 20:49:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  Windows does not have long long; copy the generated _stdint.h
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  * configure.ac:
+	  * win32/MANIFEST:
+	  * win32/common/_stdint.h:
+	  Windows does not have long long; copy the generated _stdint.h
+	  * win32/common/interfaces-enumtypes.c:
+	  (gst_color_balance_type_get_type), (gst_mixer_type_get_type),
+	  (gst_mixer_track_flags_get_type),
+	  (gst_tuner_channel_flags_get_type):
+	  * win32/common/multichannel-enumtypes.c:
+	  (gst_audio_channel_position_get_type):
+	  update
+
+2006-02-13 18:49:02 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Always sync on first sample we receive when starting.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_get_time), (gst_base_audio_sink_preroll),
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_change_state):
+	  Always sync on first sample we receive when starting.
+
+2006-02-13 15:59:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/playback/gstplaybin.c: Update vis bin docs.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_vis_element):
+	  Update vis bin docs.
+	  Move queue after tee so we don't queue video buffers but
+	  audio samples instead. Fixes problems where the video queue
+	  is filled and the audio queue empty.
+
+2006-02-13 15:17:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: No need to push an EOS event here, GstBaseSrc will do that for us when we return ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_create):
+	  No need to push an EOS event here, GstBaseSrc will do that for us
+	  when we return FLOW_UNEXPECTED.
+
+2006-02-12 14:54:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Use scale functions when possible.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_get_time), (gst_base_audio_sink_setcaps),
+	  (gst_base_audio_sink_drain), (gst_base_audio_sink_preroll),
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_change_state):
+	  Use scale functions when possible.
+	  Fix error messages.
+	  Free clockid when after waiting for EOS.
+	  Use G_(UN_)LIKLY when it makes sense.
+	  Fix sample clipping bug found by Arwed v. Merkatz fixes #330789.
+
+2006-02-12 14:26:55 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstplaybasebin.c: Remove stray semi-colon (fixes #330888).
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (prepare_output):
+	  Remove stray semi-colon (fixes #330888).
+
+2006-02-11 23:35:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  sys/: Fix up the XShm call testing so that we catch errors, and don't cause new ones by attempting to detach from a s...
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls):
+	  Fix up the XShm call testing so that we catch errors, and don't
+	  cause new ones by attempting to detach from a segment we failed
+	  to attach to. Fixes #312439.
+
+2006-02-10 11:29:55 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/typefind/gsttypefindfunctions.c: Added flv file typefind (video/x-flv).
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+	  Added flv file typefind (video/x-flv).
+
+2006-02-10 10:53:33 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Added FLV1 <==> 'video/x-flash-video,flvversion=1' conversion.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Added FLV1 <==> 'video/x-flash-video,flvversion=1' conversion.
+	  Also added the caps to the default set of riff video caps.
+
+2006-02-09 19:05:23 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/ogg/gstoggmux.c (GstOggPad): Keep track of both the start time and the end time of the last packet in the page.
+	  Original commit message from CVS:
+	  2006-02-09  Andy Wingo  <wingo@pobox.com>
+	  * ext/ogg/gstoggmux.c (GstOggPad): Keep track of both the start
+	  time and the end time of the last packet in the page.
+	  (gst_ogg_mux_pad_queue_page): In addition to setting the timestamp
+	  on the pages in our queue, set the duration as well. Reflow a
+	  debug statement.
+	  (gst_ogg_mux_collected): Keep track of GstOggPad->timestamp_end.
+	  Fixes bad muxing order.
+
+2006-02-09 17:04:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst-libs/gst/rtp/gstbasertppayload.c: update seqnum before setting it on the packet; this makes sure that the timesta...
+	  Original commit message from CVS:
+	  * gst-libs/gst/rtp/gstbasertppayload.c:
+	  (gst_basertppayload_setcaps), (gst_basertppayload_push):
+	  update seqnum before setting it on the packet; this makes sure
+	  that the timestamp and seqnum properties match after pushing
+	  a buffer
+
+2006-02-09 12:16:35 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	  changelog foo
+	  Original commit message from CVS:
+	  changelog foo
+
+2006-02-09 11:46:03 +0000  Andy Wingo <wingo@pobox.com>
+
+	* gst-libs/gst/audio/gstringbuffer.c:
+	* win32/common/config.h:
+	  kapowpowpow
+	  Original commit message from CVS:
+	  kapowpowpow
+
+2006-02-09 11:36:18 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst-libs/gst/audio/gstringbuffer.c
+	  Original commit message from CVS:
+	  2006-02-09  Andy Wingo  <wingo@pobox.com>
+	  * gst-libs/gst/audio/gstringbuffer.c
+	  (gst_ring_buffer_samples_done): Cast to guint64, fixes an integer
+	  overflow after 13.5 hours of recording. Kapow!
+	  * ext/alsa/gstalsasrc.c (gst_alsasrc_delay): Clamp the delay to
+	  the buffer size -- we don't care about underrun/overrun reporting
+	  right now, just need to return a useful value.
+
+2006-02-09 11:21:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Back to CVS
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Back to CVS
+
+=== release 0.10.3 ===
+
+2006-02-09 11:18:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* win32/common/config.h:
+	  Releasing 0.10.3
+	  Original commit message from CVS:
+	  Releasing 0.10.3
+
+2006-02-08 18:37:38 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  configure.ac: Drat. Bump libtool version number for new API.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  Drat. Bump libtool version number for new API.
+	  Prelease 0.10.2.3 (of 0.10.3)
+
+2006-02-08 15:57:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  0.10.2.2 prerelease (of 0.10.3).
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * win32/common/config.h:
+	  0.10.2.2 prerelease (of 0.10.3).
+
+2006-02-08 15:50:08 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/tcp/gsttcpclientsrc.c: Revert Andy's newsegment change pending a more correct fix.
+	  Original commit message from CVS:
+	  * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_create):
+	  Revert Andy's newsegment change pending a more correct
+	  fix.
+
+2006-02-08 12:46:14 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  Update .po files
+	  Original commit message from CVS:
+	  Update .po files
+
+2006-02-08 11:04:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst/tcp/gstmultifdsink.c:
+	  doc fixes
+	  Original commit message from CVS:
+	  doc fixes
+
+2006-02-08 09:20:23 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst/typefind/gsttypefindfunctions.c: detect more files as 3gp group and reorder the iso file formats
+	  Original commit message from CVS:
+	  :
+	  * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
+	  (qt_type_find), (plugin_init):
+	  detect more files as 3gp
+	  group and reorder the iso file formats
+
+2006-02-07 18:32:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/vorbis/vorbis.c: Register musicbrainz tags, so apps don't have to.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbis.c: (plugin_init):
+	  Register musicbrainz tags, so apps don't have to.
+
+2006-02-07 17:44:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Make sure we called gst_tag_register_musicbrainz_tags() before possibly mapping a vo...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_tag_from_vorbis_tag),
+	  (gst_tag_to_vorbis_tag):
+	  Make sure we called gst_tag_register_musicbrainz_tags()
+	  before possibly mapping a vorbiscomment string from/to a
+	  musicbrainz tag.
+
+2006-02-07 16:16:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: In case we can't find the required number of consecutive mpeg audio frames to po...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+	  In case we can't find the required number of consecutive
+	  mpeg audio frames to positively identify an MPEG audio
+	  stream, check if there's at least a valid mpeg audio
+	  frame right at offset 0 and if so suggest mpeg/audio
+	  caps with a very low probability (#153004).
+
+2006-02-07 15:52:26 +0000  Andy Wingo <wingo@pobox.com>
+
+	  gst/tcp/gsttcpclientsrc.c (gst_tcp_client_src_create): Switch to a TIME segment if we get timestamped buffers. Requir...
+	  Original commit message from CVS:
+	  2006-02-07  Andy Wingo  <wingo@pobox.com>
+	  * gst/tcp/gsttcpclientsrc.c (gst_tcp_client_src_create): Switch to
+	  a TIME segment if we get timestamped buffers. Requires recent
+	  fixes in core to work properly.
+
+2006-02-07 14:57:46 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Don't print the URI as part of the error message, it makes error dialogs look rather u...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (prepare_output):
+	  Don't print the URI as part of the error message, it
+	  makes error dialogs look rather ugly, especially if
+	  the URI is very long or has characters in it that
+	  need escaping.
+
+2006-02-07 13:11:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Error out if we have only text or subtitles, but nothing else. Also error out if we ha...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (prepare_output):
+	  Error out if we have only text or subtitles, but nothing
+	  else. Also error out if we have subtitles but no video
+	  stream.
+
+2006-02-07 11:44:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: Treat GNOME_VFS_RESULT_EOF as EOS, not as error (#329194).
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create):
+	  Treat GNOME_VFS_RESULT_EOF as EOS, not as error (#329194).
+	  Post an error message on the bus when we encounter an
+	  error, which will hopefully be more meaningful than the
+	  'Internal Flow Error' message users get to see if we
+	  just return GST_FLOW_ERROR.
+
+2006-02-07 11:28:04 +0000  Andy Wingo <wingo@pobox.com>
+
+	  configure.ac (GST_MAJORMINOR): Update core version req to 0.10.2.2, for the collectpads API addition (#330244).
+	  Original commit message from CVS:
+	  2006-02-07  Andy Wingo  <wingo@pobox.com>
+	  * configure.ac (GST_MAJORMINOR): Update core version req to
+	  0.10.2.2, for the collectpads API addition (#330244).
+
+2006-02-06 19:09:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfs.c: Return FALSE from plugin_init() when GnomeVFS can't be initialised for some reason (#3284...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+	  Return FALSE from plugin_init() when GnomeVFS can't
+	  be initialised for some reason (#328423).
+
+2006-02-06 13:26:54 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Stick to seeking theory until i find the bug.
+	  Original commit message from CVS:
+	  2006-02-06  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_src_event):
+	  Stick to seeking theory until i find the bug.
+	  * gst/subparse/gstsubparse.c: (parse_subrip): Fix debug.
+
+2006-02-06 12:38:48 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Make theoraenc and the tests leak free. Like, really.
+	  Original commit message from CVS:
+	  * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+	  (theora_enc_finalize), (theora_enc_sink_setcaps),
+	  (theora_set_header_on_caps), (theora_enc_chain),
+	  (theora_enc_change_state):
+	  * tests/check/pipelines/theoraenc.c: (GST_START_TEST):
+	  Make theoraenc and the tests leak free. Like, really.
+
+2006-02-05 23:31:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  Add a finalize method to ensure we clean up state even if someone omitted the state change back to NULL.
+	  Original commit message from CVS:
+	  (theora_enc_finalize), (theora_enc_sink_setcaps):
+	  Add a finalize method to ensure we clean up state even if
+	  someone omitted the state change back to NULL.
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_metadata_set1),
+	  (gst_vorbisenc_chain):
+	  Free some more leaked bits.
+	  * tests/check/pipelines/theoraenc.c: (start_pipeline),
+	  (stop_pipeline):
+	  Wait for state changes to happen if they're ASYNC.
+	  This ought to teach those fancy pants buildbots a lesson.
+
+2006-02-05 22:47:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/tag/gstid3tag.c: Add mapping for ID3 International Standard Recording Code tag "TSRC"
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  Add mapping for ID3 International Standard Recording Code
+	  tag "TSRC"
+
+2006-02-05 22:44:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/vorbis/vorbisenc.c: Don't leak tag names.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_metadata_set1):
+	  Don't leak tag names.
+
+2006-02-05 18:22:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Split libgsttag docs into multiple sections.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/gstid3tag.c:
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  * gst-libs/gst/tag/tags.c:
+	  Split libgsttag docs into multiple sections.
+
+2006-02-05 18:01:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add libgsttag to the docs.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/tag/gstid3tag.c: (gst_tag_from_id3_tag):
+	  * gst-libs/gst/tag/gstvorbistag.c:
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c:
+	  Add libgsttag to the docs.
+
+2006-02-05 17:21:23 +0000  Julien Moutte <julien@moutte.net>
+
+	  ext/pango/gsttextoverlay.c: Fix clockoverlay.
+	  Original commit message from CVS:
+	  2006-02-05  Julien MOUTTE  <julien@moutte.net>
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_finalize),
+	  (gst_text_overlay_init), (gst_text_overlay_src_event),
+	  (gst_text_overlay_collected): Fix clockoverlay.
+
+2006-02-05 17:15:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/libs/compiling.sgml: Fix typo: it's pkg-config, not pkg-gconfig
+	  Original commit message from CVS:
+	  * docs/libs/compiling.sgml:
+	  Fix typo: it's pkg-config, not pkg-gconfig
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/tmpl/gstgconf.sgml:
+	  There is no libgstgconf in 0.10, remove it
+	  from the docs.
+
+2006-02-05 16:03:48 +0000  Julien Moutte <julien@moutte.net>
+
+	  docs/libs/tmpl/gstcolorbalance.sgml: Updated.
+	  Original commit message from CVS:
+	  2006-02-05  Julien MOUTTE  <julien@moutte.net>
+	  * docs/libs/tmpl/gstcolorbalance.sgml: Updated.
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_init),
+	  (gst_text_overlay_src_event), (gst_text_overlay_collected):
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
+	  (gst_sub_parse_class_init), (gst_sub_parse_init),
+	  (gst_sub_parse_src_event), (parse_mdvdsub), (parse_subrip),
+	  (parse_mpsub), (parser_state_init), (handle_buffer),
+	  (gst_sub_parse_chain), (gst_sub_parse_sink_event),
+	  (plugin_init):
+	  * gst/subparse/gstsubparse.h: Introduce seeking code.
+
+2006-02-05 15:14:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/gstvorbistag.c: Add comment about LANGUAGE tag inconsistency (we want
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  Add comment about LANGUAGE tag inconsistency (we want
+	  ISO-639-1, but extract three-letter identifiers?)
+	  * po/POTFILES.in:
+	  Add two translatable files.
+
+2006-02-05 14:59:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/tag/: Forward-port some tags stuff from the 0.8 branch. This is mostly the addition of musicbrainz tags ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/tag/Makefile.am:
+	  * gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add):
+	  * gst-libs/gst/tag/tag.h:
+	  * gst-libs/gst/tag/tags.c:
+	  (gst_tag_register_musicbrainz_tags_internal),
+	  (gst_tag_register_musicbrainz_tags):
+	  Forward-port some tags stuff from the 0.8 branch. This is
+	  mostly the addition of musicbrainz tags and their mapping
+	  to vorbistags, and a vorbistag mapping of the language tag.
+
+2006-02-05 12:06:25 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gstplaybin.c: Fix broken code refactoring.
+	  Original commit message from CVS:
+	  2006-02-05  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gstplaybin.c: (gen_text_element): Fix broken code
+	  refactoring.
+
+2006-02-05 03:05:41 +0000  David Schleef <ds@schleef.org>
+
+	  Add Dirac typefinding and add dirac format to oggmux.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggmux.c:
+	  * gst/typefind/gsttypefindfunctions.c:
+	  Add Dirac typefinding and add dirac format to oggmux.
+
+2006-02-04 07:49:03 +0000  Michael Smith <msmith@xiph.org>
+
+	* configure.ac:
+	  Improve error message for liboil missingness.
+	  Original commit message from CVS:
+	  Improve error message for liboil missingness.
+
+2006-02-03 19:23:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: Don't put essential function call into g_return_*() macro, otherwise it'll all be replac...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (try_to_link_1):
+	  Don't put essential function call into
+	  g_return_*() macro, otherwise it'll all be
+	  replaced by NOOPs when compiling with
+	  G_DISABLE_CHECKS defined.
+
+2006-02-03 17:45:44 +0000  Edgard Lima <edgard.lima@indt.org.br>
+
+	* ChangeLog:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggparse.c:
+	* gst/tcp/gsttcpserversink.c:
+	* sys/v4l/v4lsrc_calls.c:
+	* sys/v4l/v4lsrc_calls.h:
+	  Just make it compile with --disable-gst-debug.
+	  Original commit message from CVS:
+	  Just make it compile with --disable-gst-debug.
+
+2006-02-03 12:51:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/alsa/gstalsasink.*: Add lock to protect alsa calls.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_finalise),
+	  (gst_alsasink_class_init), (gst_alsasink_init),
+	  (gst_alsasink_write), (gst_alsasink_reset):
+	  * ext/alsa/gstalsasink.h:
+	  Add lock to protect alsa calls.
+	  Implement reset to flush samples ASAP, does not work
+	  with dmix though.
+
+2006-02-02 18:18:31 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Ugh.. getting late I guess...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_provide_clock):
+	  Ugh.. getting late I guess...
+
+2006-02-02 18:13:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Don't try to provide a clock when we are not negotiated since we might not be ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_provide_clock),
+	  (gst_base_audio_sink_set_property),
+	  (gst_base_audio_sink_get_property), (gst_base_audio_sink_render):
+	  Don't try to provide a clock when we are not negotiated since
+	  we might not be able to make it run.
+
+2006-02-02 17:51:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstdecodebin.c: Unlinking two source pads is ... hard.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (try_to_link_1):
+	  Unlinking two source pads is ... hard.
+
+2006-02-02 12:14:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/TODO: Updated.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/TODO:
+	  Updated.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_drain), (gst_base_audio_sink_event):
+	  On EOS, wait till the last sample is played before posting EOS.
+
+2006-02-02 08:53:27 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* tests/check/pipelines/theoraenc.c:
+	  comment on my understanding
+	  Original commit message from CVS:
+	  comment on my understanding
+
+2006-02-02 08:47:42 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* common:
+	* tests/check/pipelines/theoraenc.c:
+	  reformat to fit 80 chars
+	  Original commit message from CVS:
+	  reformat to fit 80 chars
+
+2006-02-02 00:04:37 +0000  Kai Vehmanen <kv2004@eca.cx>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: setting queue_delay to zero. Also avoid thread being started if queue_delay i...
+	  Original commit message from CVS:
+	  2006-02-01  Philippe Kalaf <burger at speedy dot org>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  Patch by Kai Vehmanen : Adds ability to enable newsegment bypass by
+	  setting queue_delay to zero. Also avoid thread being started if
+	  queue_delay is zero.
+
+2006-02-01 14:51:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/test6.c: Make test work again by connecting fakesinks to each decoded pad, which makes the pipeline wait...
+	  Original commit message from CVS:
+	  * gst/playback/test6.c: (new_decoded_pad_cb), (show_error), (main):
+	  Make test work again by connecting fakesinks to each decoded pad,
+	  which makes the pipeline wait until each fakesink has a buffer
+	  queued before going to PAUSED state. At that point we know the
+	  decodebin pads are negotiated.
+
+2006-02-01 11:59:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/: Pass unhandled queries to the parent class's query function.
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_query),
+	  (gst_cdda_base_src_handle_event):
+	  * gst/audiotestsrc/gstaudiotestsrc.c: (gst_audio_test_src_query):
+	  Pass unhandled queries to the parent class's query function.
+
+2006-02-01 11:56:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Pass unhandled queries upstream instead of just dropping them (#326447). Also, fix supported query types list for som...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_pad_query_types),
+	  (gst_ogg_pad_src_query):
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_sink_query):
+	  * ext/theora/theoradec.c: (theora_dec_src_query),
+	  (theora_dec_sink_query):
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
+	  (vorbis_dec_sink_query):
+	  * ext/vorbis/vorbisenc.c: (gst_vorbisenc_src_query),
+	  (gst_vorbisenc_sink_query):
+	  * gst/adder/gstadder.c: (gst_adder_query):
+	  Pass unhandled queries upstream instead of just
+	  dropping them (#326447). Also, fix supported
+	  query types list for some elements.
+
+2006-02-01 09:58:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Fix typefinding for audio/x-au, audio/x-paris and audio/iLBC-sh. We cannot use t...
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (au_type_find),
+	  (paris_type_find), (ilbc_type_find), (plugin_init):
+	  Fix typefinding for audio/x-au, audio/x-paris and
+	  audio/iLBC-sh. We cannot use the START_WITH macros
+	  here, because there can only be one typefind factory
+	  with the same name (caps), so the second one would
+	  replace the first one and the first one would never
+	  be called when doing typefinding (see #161712).
+
+2006-01-31 19:25:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/vorbis/vorbisdec.c: Use scale_int when we can, add some more scaling.
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_convert),
+	  (vorbis_handle_header_packet), (vorbis_dec_push),
+	  (vorbis_handle_data_packet):
+	  Use scale_int when we can, add some more scaling.
+	  Check packettype before parsing it.
+
+2006-01-31 17:44:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Call right _scale functions.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (_theora_granule_time),
+	  (theora_dec_src_convert), (theora_dec_sink_convert):
+	  Call right _scale functions.
+	  Use parameter instead of some other random value.
+
+2006-01-31 17:27:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/theora/theoradec.c: Use higher precision timestamps calculation.
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (_theora_granule_frame),
+	  (_theora_granule_time), (_inc_granulepos),
+	  (theora_dec_src_convert), (theora_dec_sink_convert),
+	  (theora_handle_type_packet), (theora_handle_data_packet),
+	  (theora_dec_chain):
+	  Use higher precision timestamps calculation.
+	  Convert some other conversions to _scale.
+
+2006-01-31 17:19:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/: initialize gst_controller before using
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_create_sine_table), (plugin_init):
+	  * gst/volume/gstvolume.c: (plugin_init):
+	  initialize gst_controller before using
+
+2006-01-31 16:26:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  tests/check/pipelines/: Define constant using G_GINT64_CONSTANT to avoid errors when passing it around - otherwise it...
+	  Original commit message from CVS:
+	  * tests/check/pipelines/theoraenc.c:
+	  * tests/check/pipelines/vorbisenc.c:
+	  Define constant using G_GINT64_CONSTANT to avoid errors when
+	  passing it around - otherwise it gets truncated to 32 bits.
+	  Fixes failing tests.
+
+2006-01-31 15:36:13 +0000  Andy Wingo <wingo@pobox.com>
+
+	  sys/v4l/gstv4lsrc.c (gst_v4lsrc_set_caps): Don't segfault if the caps being set doesn't have a framerate value. Basic...
+	  Original commit message from CVS:
+	  2006-01-31  Andy Wingo  <wingo@pobox.com>
+	  * sys/v4l/gstv4lsrc.c (gst_v4lsrc_set_caps): Don't segfault if the
+	  caps being set doesn't have a framerate value. Basically a stopgap
+	  measure.
+	  * ext/ogg/gstoggmux.c (GST_BUFFER_END_TIME): New macro. Not
+	  technically correct enough to put into core though.
+	  (gst_ogg_mux_dequeue_page): Use END_TIME instead of TIMESTAMP +
+	  DURATION. Fixes theoraenc ! oggmux.
+	  * sys/v4l/gstv4lsrc.c (gst_v4lsrc_fixate): Fixate to the nearest
+	  fraction, not double.
+
+2006-01-31 12:23:35 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update with latest files
+	  Original commit message from CVS:
+	  update with latest files
+
+2006-01-30 23:42:54 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/vs7: add vs7 project files created by Sergey Scobich
+	  Original commit message from CVS:
+	  * win32/vs7:
+	  add vs7 project files created by Sergey Scobich
+
+2006-01-30 22:18:53 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  win32/vs8: add vs8 project files created by Sergey Scobich
+	  Original commit message from CVS:
+	  * win32/vs8:
+	  add vs8 project files created by Sergey Scobich
+
+2006-01-30 19:22:22 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/ogg/gstoggmux.c (gst_ogg_mux_dequeue_page): Compare timestamp + duration, not just timestamp -- ogg pages should ...
+	  Original commit message from CVS:
+	  2006-01-30  Andy Wingo  <wingo@pobox.com>
+	  * ext/ogg/gstoggmux.c (gst_ogg_mux_dequeue_page): Compare
+	  timestamp + duration, not just timestamp -- ogg pages should be
+	  ordered by stop time. Necessary fix given the change in vorbis
+	  timestamps.
+
+2006-01-30 19:21:07 +0000  Andy Wingo <wingo@pobox.com>
+
+	* ChangeLog:
+	* ext/theora/gsttheoraenc.h:
+	* ext/theora/theoraenc.c:
+	* tests/check/pipelines/theoraenc.c:
+	  ext/theora/theoraenc.c (theora_enc_sink_setcaps)
+	  Original commit message from CVS:
+	  2006-01-30  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/theoraenc.c (theora_enc_sink_setcaps)
+	  (gst_theora_enc_init): Pull the granule shift out of the encoder.
+	  (granulepos_add): New function, handles the messiness of adjusting
+	  granulepos values.
+	  (theora_buffer_from_packet):
+	  (theora_enc_chain):
+	  (theora_enc_sink_event): Use granulepos_add, not +.
+	  * tests/check/pipelines/theoraenc.c
+	  (check_buffer_granulepos_from_starttime): Just check the frame
+	  count, not the actual granulepos -- we can't dictate to the
+	  encoder when it should be placing keyframes.
+
+2006-01-30 18:17:19 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/gnomevfs/gstgnomevfssrc.c: SERVICE_NOT_AVAILABLE happens for example when you're trying to play an http:// stream...
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_start):
+	  SERVICE_NOT_AVAILABLE happens for example when you're trying to
+	  play an http:// stream from a server that's not serving
+
+2006-01-30 17:08:11 +0000  Andy Wingo <wingo@pobox.com>
+
+	  tests/check/pipelines/: Totally remove the UINT64_CONSTANT macro, doesn't appear to be needed or available.
+	  Original commit message from CVS:
+	  2006-01-30  Andy Wingo  <wingo@pobox.com>
+	  * tests/check/pipelines/vorbisenc.c (TIMESTAMP_OFFSET):
+	  * tests/check/pipelines/theoraenc.c (TIMESTAMP_OFFSET): Totally
+	  remove the UINT64_CONSTANT macro, doesn't appear to be needed or
+	  available.
+
+2006-01-30 17:01:54 +0000  Andy Wingo <wingo@pobox.com>
+
+	  ext/theora/: Same changes as were done to vorbisenc, although theoraenc was timestamping correctly. Added handling of...
+	  Original commit message from CVS:
+	  2006-01-30  Andy Wingo  <wingo@pobox.com>
+	  * ext/theora/gsttheoraenc.h:
+	  * ext/theora/theoraenc.c: Same changes as were done to vorbisenc,
+	  although theoraenc was timestamping correctly. Added handling of
+	  streams that start with nonzero timestamps.
+	  * tests/check/Makefile.am:
+	  * tests/check/pipelines/theoraenc.c: New file, basically does same
+	  tests as vorbisenc.
+	  * tests/check/pipelines/vorbisenc.c: I claim these bugs.
+
+2006-01-30 16:19:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstaudiosink.c: Implement pause that does not wait for completion.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosink.c:
+	  (gst_audioringbuffer_class_init), (gst_audioringbuffer_release),
+	  (gst_audioringbuffer_pause):
+	  Implement pause that does not wait for completion.
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_change_state):
+	  Don't drop buffers when going to PAUSED but perform preroll on
+	  remaining samples now that core base class supports this.
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_release),
+	  (gst_ring_buffer_pause_unlocked), (gst_ring_buffer_stop),
+	  (gst_ring_buffer_commit):
+	  Pause should not signal waiters.
+	  Implement return value of _commit correctly.
+
+2006-01-30 15:01:28 +0000  Andy Wingo <wingo@pobox.com>
+
+	  tests/check/Makefile.am (check_vorbis): Add pipelines/vorbisenc.
+	  Original commit message from CVS:
+	  2006-01-30  Andy Wingo  <wingo@pobox.com>
+	  * tests/check/Makefile.am (check_vorbis): Add pipelines/vorbisenc.
+	  * ext/vorbis/vorbisenc.c (gst_vorbisenc_buffer_from_packet): Logic
+	  updated to timestamp from the first sample, not the last.
+	  (gst_vorbisenc_buffer_from_header_packet): New function, takes
+	  special care of granulepos and timestamp for header packets.
+	  (gst_vorbisenc_chain): Reflow, fix some leaks, and handle the case
+	  when the first buffer has a nonzero timestamp.
+	  * ext/vorbis/vorbisenc.h (GstVorbisEnc.granulepos_offset)
+	  (GstVorbisEnc.subgranule_offset): New members. Take care of the
+	  case when the first audio buffer we get has a nonzero timestamp.
+	  (GstVorbisEnc.next_ts): Renamed from prev_ts, because now we
+	  properly timestamp vorbis buffers with the time of the first
+	  sample, not the last.
+	  * ext/vorbis/vorbisenc.c (granulepos_to_clocktime): Renamed from
+	  vorbis_granule_time_copy -- now it takes the granule/subgranule
+	  offset into account.
+	  * tests/check/pipelines/vorbisenc.c: New test for correctness of
+	  timestamps, durations, and granulepos on buffers produced by
+	  vorbisenc.
+
+2006-01-30 14:42:28 +0000  Eric Jonas <jonas@mit.edu>
+
+	  gst/ffmpegcolorspace/gstffmpegcodecmap.c: Patch from Eric Jonas to support conversions to/from UYVY (Fixes: #324626)
+	  Original commit message from CVS:
+	  * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	  (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt):
+	  Patch from Eric Jonas to support conversions to/from UYVY
+	  (Fixes: #324626)
+
+2006-01-30 08:11:14 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/: Implement subtitles.
+	  Original commit message from CVS:
+	  2006-01-30  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gstplaybasebin.c: (group_commit),
+	  (queue_overrun),
+	  (setup_subtitle), (setup_source), (set_active_source):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_dispose),
+	  (gen_text_element), (gen_audio_element), (gen_vis_element),
+	  (remove_sinks), (add_sink), (setup_sinks): Implement subtitles.
+
+2006-01-29 19:13:39 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+	  gst-libs/gst/audio/audio.h: (GST_CLOCK_TIME_TO_FRAMES)
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/audio.h: (GST_CLOCK_TIME_TO_FRAMES)
+	  * gst-libs/gst/audio/gstbaseaudiosink.c: (gst_base_audio_sink_render)
+	  use of gst_guint64_to_gdouble to be compliant with vs6
+	  * gst/playback/gstdecodebin.c: (try_to_link_1)
+	  * gst/videorate/videorate.c: (gst_video_rate_blank_data)
+	  use of G_GINT64_CONSTANT for int64 constants
+	  * win32/common/libgstinterfaces.def:
+	  export some symbols (gst_mixer_get_type,gst_mixer_track_get_type)
+	  * win32/vs6:
+	  update and add new project files
+
+2006-01-29 18:21:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  add a win32-update rule like in core, and copy over enumtypes files
+	  Original commit message from CVS:
+	  * Makefile.am:
+	  * win32/MANIFEST:
+	  * win32/common/interfaces-enumtypes.c:
+	  (gst_color_balance_type_get_type), (gst_mixer_type_get_type),
+	  (gst_mixer_track_flags_get_type),
+	  (gst_tuner_channel_flags_get_type):
+	  * win32/common/interfaces-enumtypes.h:
+	  * win32/common/multichannel-enumtypes.c:
+	  (gst_audio_channel_position_get_type):
+	  * win32/common/multichannel-enumtypes.h:
+	  add a win32-update rule like in core, and copy over enumtypes files
+
+2006-01-29 18:07:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	  generate win32/common/config.h
+	  Original commit message from CVS:
+	  generate win32/common/config.h
+
+2006-01-29 18:05:42 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  win32/: add config files just like in core
+	  Original commit message from CVS:
+	  * win32/MANIFEST:
+	  * win32/common/config.h:
+	  * win32/common/config.h.in:
+	  add config files just like in core
+
+2006-01-28 18:22:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/alsa/: Update all error messages.  All of them should either use the default translated message, or actually prov...
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_init), (set_hwparams),
+	  (set_swparams), (gst_alsasink_prepare), (gst_alsasink_unprepare),
+	  (gst_alsasink_close), (gst_alsasink_write), (gst_alsasink_reset):
+	  * ext/alsa/gstalsasrc.c: (gst_alsasrc_init), (set_hwparams),
+	  (set_swparams), (gst_alsasrc_open), (gst_alsasrc_prepare),
+	  (gst_alsasrc_unprepare), (gst_alsasrc_read):
+	  Update all error messages.  All of them should either use
+	  the default translated message, or actually provide a
+	  translatable string.
+	  Make the string for channel count problems meaningful.
+
+2006-01-28 18:19:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Make gcc-4.1 happy (part of #327357).
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (build_linear_format):
+	  Make gcc-4.1 happy (part of #327357).
+
+2006-01-28 16:35:47 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  sys/v4l/v4l_calls.c: check for and throw RESOURCE_BUSY
+	  Original commit message from CVS:
+	  * sys/v4l/v4l_calls.c: (gst_v4l_open):
+	  check for and throw RESOURCE_BUSY
+
+2006-01-28 02:13:14 +0000  David Schleef <ds@schleef.org>
+
+	  gst/videoscale/vs_scanline.c: Oops, *that's* why I never checked in this change -- it requires liboil features not in...
+	  Original commit message from CVS:
+	  * gst/videoscale/vs_scanline.c: Oops, *that's* why I never
+	  checked in this change -- it requires liboil features not
+	  in 0.3.6.  Revert parts.
+
+2006-01-27 23:40:19 +0000  David Schleef <ds@schleef.org>
+
+	  update liboil requirement to 0.3.6
+	  Original commit message from CVS:
+	  * REQUIREMENTS:
+	  * configure.ac: update liboil requirement to 0.3.6
+	  * gst/videoscale/Makefile.am:
+	  * gst/videoscale/vs_scanline.c: liboilify
+
+2006-01-27 17:00:09 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/libvisual/visual.c: When pad_alloc returns a GstFlowReturn other than GST_FLOW_OK, make sure it is passed upstream.
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (get_buffer):
+	  When pad_alloc returns a GstFlowReturn other
+	  than GST_FLOW_OK, make sure it is passed upstream.
+
+2006-01-27 01:36:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/alsa/gstalsasink.c: Free the device name string.
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsasink.c: (gst_alsasink_finalise),
+	  (gst_alsasink_class_init):
+	  Free the device name string.
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
+	  (gst_ogg_mux_request_new_pad), (gst_ogg_mux_release_pad),
+	  (gst_ogg_mux_handle_src_event), (gst_ogg_mux_clear_collectpads):
+	  Don't remove a pad from the collectpads structure until it
+	  is released - it's a request pad, and may receive data again
+	  if the element gets moved back to PLAYING state.
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+	  Ensure we turn on double buffering on the Xv port, and
+	  set the colour key to something dark and mysterious that
+	  isn't black.
+
+2006-01-27 01:06:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/: - a library should not call setlocale. see Libraries node in gettext manual
+	  Original commit message from CVS:
+	  * ext/alsa/gstalsaplugin.c: (plugin_init):
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  (gst_cd_paranoia_src_base_init), (plugin_init):
+	  * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init):
+	  - a library should not call setlocale. see Libraries node in
+	  gettext manual
+	  - make sure all plugins that use translation do bindtextdomain
+	  to point to the localedir
+	  * gst/playback/gstplaybin.c: (gen_vis_element), (add_sink),
+	  (setup_sinks), (plugin_init):
+	  all this, and check for NULL when creating sinks
+
+2006-01-26 23:21:31 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/subparse/gstsubparse.c: Make typefinding of subtitles work again.
+	  Original commit message from CVS:
+	  2006-01-27  Julien MOUTTE  <julien@moutte.net>
+	  * gst/subparse/gstsubparse.c: (gst_subparse_type_find),
+	  (plugin_init): Make typefinding of subtitles work again.
+
+2006-01-26 20:40:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/typefind/gsttypefindfunctions.c: Backport a bunch of typefinding fixes from the 0.8 branch.
+	  Original commit message from CVS:
+	  * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
+	  (mp3_type_frame_length_from_header), (mp3_type_find),
+	  (wavpack_type_find), (m4a_type_find), (ircam_type_find),
+	  (plugin_init):
+	  Backport a bunch of typefinding fixes from the 0.8 branch.
+	  Also, improve wavpack typefinding: if we can't peek the
+	  entire wavpack block, try to parse the bits we can get and
+	  see if we find what we're looking for in those.
+
+2006-01-26 19:17:38 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Handle some more cases of pixel aspect ratio.
+	  Original commit message from CVS:
+	  2006-01-26  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c:
+	  (gst_ximagesink_calculate_pixel_aspect_ratio):
+	  * sys/xvimage/xvimagesink.c:
+	  (gst_xvimagesink_calculate_pixel_aspect_ratio): Handle some
+	  more cases of pixel aspect ratio.
+
+2006-01-26 13:09:24 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin.c: Also consider the flush-start and tag events as unblockers for the pad probes.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (pad_probe):
+	  Also consider the flush-start and tag events as unblockers
+	  for the pad probes.
+
+2006-01-26 12:32:58 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst/playback/gstplaybin.c: On the fly visualisation switch, works disabling, enabling as well but it won't be able to...
+	  Original commit message from CVS:
+	  2006-01-26  Julien MOUTTE  <julien@moutte.net>
+	  * gst/playback/gstplaybin.c: (gst_play_bin_init),
+	  (gst_play_bin_dispose), (gst_play_bin_vis_unblocked),
+	  (gst_play_bin_vis_blocked), (gst_play_bin_set_property):
+	  On the fly visualisation switch, works disabling, enabling as
+	  well but it won't be able to enable vis in a playbin that was
+	  created with no visualisation.
+
+2006-01-25 10:50:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Undo previous commit, it breaks resume after pause.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render), (gst_base_audio_sink_change_state):
+	  Undo previous commit, it breaks resume after pause.
+
+2006-01-25 09:27:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Improve debugging.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_setcaps), (gst_base_audio_sink_event),
+	  (gst_base_audio_sink_preroll), (gst_base_audio_sink_render):
+	  Improve debugging.
+	  Post error when caps cannot be parsed.
+	  Resync on discontinuity in the stream.
+	  Clip samples to segment boundaries.
+	  return WRONG_STATE sooner when we are flushing.
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_init),
+	  (gst_base_audio_src_get_time), (gst_base_audio_src_create):
+	  Make audiosrc operate in TIME.
+	  Set TIMESTAMP and DURATION on buffers.
+
+2006-01-24 21:55:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/examples/seek/seek.c: Output tag messages as well.
+	  Original commit message from CVS:
+	  * tests/examples/seek/seek.c: (main):
+	  Output tag messages as well.
+
+2006-01-23 15:05:24 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/playback/gstdecodebin.c: Replace GstPadBlockCallback with pad probes that detect first buffer AND eos before remo...
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+	  (free_pad_probes), (remove_fakesink), (pad_probe),
+	  (close_pad_link), (gst_decode_bin_change_state):
+	  Replace GstPadBlockCallback with pad probes that detect
+	  first buffer AND eos before removing fakesink.
+	  Fixes hang with demuxers doing EOS while pre-rolling.
+	  Solves #328279
+
+2006-01-23 10:10:36 +0000  Jens Granseuer <jensgr@gmx.net>
+
+	  GCC 2.95 fixes (#328263).
+	  Original commit message from CVS:
+	  2006-01-23  Andy Wingo  <wingo@pobox.com>
+	  * ext/alsa/gstalsasink.c:
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_setcaps),
+	  (gst_base_rtp_depayload_add_to_queue),
+	  (gst_base_rtp_depayload_queue_release): GCC 2.95 fixes (#328263).
+	  Patch by: Jens Granseuer <jensgr at gmx dot net>
+
+2006-01-22 17:24:02 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/: Playbin keeps some ref to some frames. We might get a frame destroyed after changing state to
+	  Original commit message from CVS:
+	  2006-01-22  Julien MOUTTE  <julien@moutte.net>
+	  * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
+	  (gst_xvimagesink_buffer_alloc): Playbin keeps some ref to some
+	  frames. We might get a frame destroyed after changing state to
+	  NULL, adding a safety check on xcontext.
+
+2006-01-22 14:50:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/interfaces/xoverlay.c: Fix prepare-xwindow-id code example in the docs - we need to ignore all messages ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/interfaces/xoverlay.c:
+	  Fix prepare-xwindow-id code example in the docs - we need to
+	  ignore all messages that aren't element messages as well.
+
+2006-01-21 22:40:03 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.c: I think one day i'll completely undestand how caps negotiation is supposed to work. This r...
+	  Original commit message from CVS:
+	  2006-01-21  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_buffer_alloc):
+	  I think one day i'll completely undestand how caps negotiation
+	  is supposed to work. This refactoring handles buffer_alloc
+	  called with caps we can't handle. We definitely don't want a
+	  set_caps with those caps, so we define and allocate a buffer
+	  we would like to receive.
+
+2006-01-20 19:10:26 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* autogen.sh:
+	* common:
+	  up automake requirement to 1.7
+	  Original commit message from CVS:
+	  up automake requirement to 1.7
+
+2006-01-19 10:59:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Free iterator when done.
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source):
+	  Free iterator when done.
+
+2006-01-17 11:43:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst-libs/gst/audio/gstbaseaudiosink.c: Fix playback of non-synchronised streams by assuming a rate of 1.0 instead of ...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_render):
+	  Fix playback of non-synchronised streams by assuming a rate
+	  of 1.0 instead of a random one.
+	  Makes this work again:
+	  gst-launch filesrc location=raw_audio.file ! 'audio/x-raw-int,
+	  endianness=(int)4321, signed=(boolean)true, width=(int)16,
+	  depth=(int)16, rate=(int)44100, channels=(int)2' ! audioconvert !
+	  audioresample ! alsasink
+
+2006-01-16 21:01:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	  back to HEAD
+	  Original commit message from CVS:
+	  back to HEAD
+
+=== release 0.10.2 ===
+
+2006-01-16 20:59:32 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  releasing 0.10.2
+	  Original commit message from CVS:
+	  releasing 0.10.2
+
+2006-01-16 16:38:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/: Comment out broken code that connects to the state-changed signal.
+	  Original commit message from CVS:
+	  * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_set_property):
+	  Comment out broken code that connects to the state-changed signal.
+	  At this point, changing current stream selection is broken, but
+	  stuff like gst-launch playbin current-audio=1 works and filters
+	  to the chosen stream.
+
+2006-01-16 15:31:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/vorbis/vorbisdec.c: Fix #327216 (null dereference in vorbisdec)
+	  Original commit message from CVS:
+	  * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+	  Fix #327216 (null dereference in vorbisdec)
+
+2006-01-16 15:19:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/theora/theoradec.c: Post taglist actually on bus instead of just freeing it (fixes #327114 and totem bug #327080).
+	  Original commit message from CVS:
+	  * ext/theora/theoradec.c: (theora_handle_comment_packet):
+	  Post taglist actually on bus instead of just freeing it
+	  (fixes #327114 and totem bug #327080).
+	  * ext/vorbis/vorbisdec.c: (vorbis_handle_comment_packet):
+	  Use gst_element_found_tags_for_pad(), so that the tags
+	  are sent downstream as an event as well.
+
+2006-01-15 10:06:40 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  sys/: move all regularly occurring messages to GST_LOG level add some more object logs
+	  Original commit message from CVS:
+	  * sys/ximage/ximagesink.c: (gst_ximage_buffer_finalize),
+	  (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_put),
+	  (gst_ximagesink_buffer_alloc):
+	  * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_finalize),
+	  (gst_xvimagesink_xvimage_put), (gst_xvimagesink_show_frame),
+	  (gst_xvimagesink_buffer_alloc):
+	  move all regularly occurring messages to GST_LOG level
+	  add some more object logs
+
+2006-01-14 22:59:49 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  prerelease
+	  Original commit message from CVS:
+	  prerelease
+
+2006-01-14 20:46:25 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  ext/ogg/gstoggmux.c: fix a silly segfault
+	  Original commit message from CVS:
+	  2006-01-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_collected):
+	  fix a silly segfault
+
+2006-01-14 12:52:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add docs for mixerutils stuff.
+	  Original commit message from CVS:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * gst-libs/gst/audio/mixerutils.c:
+	  * gst-libs/gst/audio/mixerutils.h:
+	  Add docs for mixerutils stuff.
+
+2006-01-13 17:17:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/gstplaybasebin.c: Fix playback for sources that emit raw audio or raw video streams (e.g.: cd audio sour...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (setup_source):
+	  Fix playback for sources that emit raw audio or
+	  raw video streams (e.g.: cd audio sources) (#325984).
+
+2006-01-13 16:45:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst-libs/gst/audio/mixerutils.c: actually save the element we create
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/mixerutils.c:
+	  (gst_audio_mixer_filter_do_filter):
+	  actually save the element we create
+
+2006-01-13 16:17:50 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  remove version suffix
+	  Original commit message from CVS:
+	  remove version suffix
+
+2006-01-12 14:56:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: No need to post a tag message on the bus when seeking within the same track, only...
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_handle_track_seek):
+	  No need to post a tag message on the bus when seeking
+	  within the same track, only post it when the current
+	  track changes.
+
+2006-01-11 18:30:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/: Reenable stream selection. These mechanisms need a complete overhaul in the face of 0.8->0.10 changes ...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (group_destroy),
+	  (probe_triggered), (new_decoded_pad), (mute_group_type),
+	  (set_active_source):
+	  * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute):
+	  * gst/playback/gststreamselector.c:
+	  (gst_stream_selector_base_init),
+	  (gst_stream_selector_set_property),
+	  (gst_stream_selector_request_new_pad):
+	  Reenable stream selection. These mechanisms need a complete overhaul
+	  in the face of 0.8->0.10 changes though.
+
+2006-01-11 18:03:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/ogg/gstoggdemux.c: Change the pad template to src_%d to match the pads that are created from it. decodebin needs ...
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c:
+	  Change the pad template to src_%d to match the pads that
+	  are created from it. decodebin needs this information in order
+	  to decide that oggdemux is capable of producing multiple pads
+	  (and hence needs queues inserted).
+	  * ext/ogg/gstoggmux.c: (gst_ogg_mux_queue_pads),
+	  (gst_ogg_mux_collected):
+	  Make debug output more useful by using GST_PTR_FORMAT.
+
+2006-01-11 17:38:35 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* gst-plugins-base.spec.in:
+	  update spec.in file
+	  Original commit message from CVS:
+	  update spec.in file
+
+2006-01-11 15:11:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstringbuffer.c: Set depth and width for alaw/mulaw (fixes #326601).
+	  Original commit message from CVS:
+	  Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_parse_caps):
+	  Set depth and width for alaw/mulaw (fixes #326601).
+
+2006-01-10 23:58:36 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  tests/icles/Makefile.am: don't build the tests if we don't have the libs
+	  Original commit message from CVS:
+	  * tests/icles/Makefile.am:
+	  don't build the tests if we don't have the libs
+
+2006-01-10 18:06:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/cdparanoia/gstcdparanoiasrc.c: Don't try to free NULL pointers.
+	  Original commit message from CVS:
+	  * ext/cdparanoia/gstcdparanoiasrc.c: (gst_cd_paranoia_src_close),
+	  (gst_cd_paranoia_paranoia_callback):
+	  Don't try to free NULL pointers.
+
+2006-01-10 15:47:48 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst/audiorate/gstaudiorate.c: Add debugging category.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain),
+	  (gst_audio_rate_change_state), (plugin_init):
+	  Add debugging category.
+	  Fix type issues.
+	  Add case for incoming buffers without valid offset/offset_end.
+
+2006-01-10 12:25:59 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst-libs/gst/audio/gstaudiosrc.c: Don't leak GCond in audio sources.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstaudiosrc.c: (gst_audioringbuffer_dispose):
+	  Don't leak GCond in audio sources.
+
+2006-01-10 11:49:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  gst/playback/gstplaybin.c: Don't leak an autoaudiosink/alsasink when we generate a new audio element. (old code, I gu...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybin.c: (gen_audio_element):
+	  Don't leak an autoaudiosink/alsasink when we generate
+	  a new audio element. (old code, I guess)
+
+2006-01-10 11:04:21 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audiorate/gstaudiorate.c: Support float audio in audiorate.
+	  Original commit message from CVS:
+	  * gst/audiorate/gstaudiorate.c: (gst_audio_rate_setcaps):
+	  Support float audio in audiorate.
+	  Use width rather than depth for selecting sample width.
+
+2006-01-10 10:06:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/videotestsrc.h: Use GLib types here (that way we don't have to include the generated _stdint.h heade...
+	  Original commit message from CVS:
+	  * gst/videotestsrc/videotestsrc.h:
+	  Use GLib types here (that way we don't have to include the
+	  generated _stdint.h header, which makes life easier for win32
+	  folks that don't use autotools for the build) (#325990, patch
+	  by: Sergey Scobich).
+
+2006-01-10 09:38:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstringbuffer.*: Name (private) union, makes Forte compiler happy (this time for real) (#324900).
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_init),
+	  (gst_ring_buffer_set_flushing), (gst_ring_buffer_start),
+	  (gst_ring_buffer_pause), (wait_segment):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Name (private) union, makes Forte compiler happy (this time
+	  for real) (#324900).
+
+2006-01-09 10:52:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/Makefile.am: Link against libgstinterfaces, needed for mixer and property probe stuff.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  Link against libgstinterfaces, needed for mixer
+	  and property probe stuff.
+
+2006-01-09 10:46:52 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/Makefile.am:
+	  Original commit message from CVS:
+	  * gst-libs/gst/Makefile.am:
+
+2006-01-09 09:38:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/: Add gst_audio_default_registry_mixer_filter() utility function.
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/Makefile.am:
+	  * gst-libs/gst/audio/mixerutils.c:
+	  (gst_audio_mixer_filter_do_filter),
+	  (gst_audio_mixer_filter_check_element),
+	  (gst_audio_mixer_filter_probe_feature),
+	  (element_factory_rank_compare_func),
+	  (gst_audio_default_registry_mixer_filter):
+	  * gst-libs/gst/audio/mixerutils.h:
+	  Add gst_audio_default_registry_mixer_filter() utility
+	  function.
+
+2006-01-03 17:33:16 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioresample/resample.h: As before, but for o_buf
+	  Original commit message from CVS:
+	  * gst/audioresample/resample.h:
+	  As before, but for o_buf
+
+2006-01-03 17:27:13 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioresample/resample.h: Declare struct _ResampleState.buffer as unsigned char *, not void *, since we do arithm...
+	  Original commit message from CVS:
+	  * gst/audioresample/resample.h:
+	  Declare struct _ResampleState.buffer as unsigned char *, not void *,
+	  since we do arithmetic on it.
+
+2006-01-02 23:37:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/audio/gstringbuffer.*: Sun's Forte compiler doesn't seem to like anonymous structs, so use same setup as...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_init),
+	  (gst_ring_buffer_set_flushing), (gst_ring_buffer_start),
+	  (gst_ring_buffer_pause), (wait_segment):
+	  * gst-libs/gst/audio/gstringbuffer.h:
+	  Sun's Forte compiler doesn't seem to like anonymous structs,
+	  so use same setup as in GstBaseSrc (fixes #324900).
+
+2005-12-30 14:54:06 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  move old example to tests/examples/volume/volune.c
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/volume/Makefile.am:
+	  * gst/volume/demo.c:
+	  move old example to tests/examples/volume/volune.c
+	  * tests/examples/Makefile.am:
+	  * tests/examples/seek/seek.c: (main):
+	  change window-close event from "delete-event" to "destroy"
+	  * tests/examples/volume/Makefile.am:
+	  * tests/examples/volume/volume.c: (value_changed_callback),
+	  (setup_gui), (message_received), (eos_message_received), (main):
+	  fix event handling and bus usage
+
+2005-12-29 20:37:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: update to basesrc changes, implement segmented seeking and eos handling, add a 's...
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audiostestsrc_wave_get_type), (gst_audio_test_src_class_init),
+	  (gst_audio_test_src_init), (gst_audio_test_src_src_fixate),
+	  (gst_audio_test_src_query), (gst_audio_test_src_create_sine),
+	  (gst_audio_test_src_create_square),
+	  (gst_audio_test_src_create_saw),
+	  (gst_audio_test_src_create_triangle),
+	  (gst_audio_test_src_create_silence),
+	  (gst_audio_test_src_create_white_noise),
+	  (gst_audio_test_src_create_pink_noise),
+	  (gst_audio_test_src_init_sine_table),
+	  (gst_audio_test_src_create_sine_table),
+	  (gst_audio_test_src_change_wave),
+	  (gst_audio_test_src_change_volume), (gst_audio_test_src_do_seek),
+	  (gst_audio_test_src_create), (gst_audio_test_src_set_property):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  update to basesrc changes, implement segmented seeking and eos handling,
+	  add a 'sine-tab' waveform for performance critical playback
+
+2005-12-29 16:17:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  po/POTFILES.in: ... and this time the other modified file that I missed last time.
+	  Original commit message from CVS:
+	  * po/POTFILES.in:
+	  ... and this time the other modified file that I missed last time.
+
+2005-12-29 14:31:49 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/playback/gstdecodebin.c: Fix non-C89 variable declaration not at the start of a block. Should help some compilers.
+	  Original commit message from CVS:
+	  * gst/playback/gstdecodebin.c: (new_pad):
+	  Fix non-C89 variable declaration not at the start of a block. Should
+	  help some compilers.
+
+2005-12-29 12:43:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: And now fix 'make distcheck' (builddir != srcdir)
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  And now fix 'make distcheck' (builddir != srcdir)
+
+2005-12-29 12:22:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  New cdparanoiasrc element based on cddabasesrc; enable cdparanoia plugin again (there are still fixes required to pla...
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * ext/cdparanoia/Makefile.am:
+	  * ext/cdparanoia/gstcdparanoia.c:
+	  * ext/cdparanoia/gstcdparanoia.h:
+	  * ext/cdparanoia/gstcdparanoiasrc.c:
+	  (gst_cd_paranoia_mode_get_type), (gst_cd_paranoia_src_base_init),
+	  (gst_cd_paranoia_src_init), (gst_cd_paranoia_src_class_init),
+	  (gst_cd_paranoia_src_open), (gst_cd_paranoia_src_close),
+	  (gst_cd_paranoia_paranoia_callback),
+	  (gst_cd_paranoia_src_read_sector), (gst_cd_paranoia_src_finalize),
+	  (gst_cd_paranoia_src_set_property),
+	  (gst_cd_paranoia_src_get_property), (plugin_init):
+	  * ext/cdparanoia/gstcdparanoiasrc.h:
+	  New cdparanoiasrc element based on cddabasesrc; enable cdparanoia
+	  plugin again (there are still fixes required to playbin to make
+	  cdda:// uris work there).
+
+2005-12-29 12:13:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/Makefile.am: Fix test case compilation.
+	  Original commit message from CVS:
+	  * tests/check/Makefile.am:
+	  Fix test case compilation.
+
+2005-12-29 11:49:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst-libs/gst/cdda/gstcddabasesrc.c: An integer is not a string. Fix access to uninitialised variable.
+	  Original commit message from CVS:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_update_duration),
+	  (gst_cdda_base_src_calculate_cddb_id):
+	  An integer is not a string. Fix access to uninitialised variable.
+	  * tests/check/Makefile.am:
+	  Add cddabasesrc unit test; also actually enable the vorbis test.
+	  * tests/check/generic/states.c:
+	  Blacklist new cd audio elements as well.
+	  * tests/check/libs/cddabasesrc.c:
+	  Unit test for GstCddaBaseSrc (discid calculation mostly).
+
+2005-12-28 18:19:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/libs/: Add docs for libgstcdda/GstCddaBaseSrc.
+	  Original commit message from CVS:
+	  * docs/libs/Makefile.am:
+	  * docs/libs/gst-plugins-base-libs-docs.sgml:
+	  * docs/libs/gst-plugins-base-libs-sections.txt:
+	  * docs/libs/gst-plugins-base-libs.types:
+	  Add docs for libgstcdda/GstCddaBaseSrc.
+	  * gst-libs/gst/interfaces/mixertrack.h:
+	  Do one struct member per line with a semicolon at the end, that way
+	  even gtk-doc might parse it without complaining.
+
+2005-12-28 18:06:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  Add new libgstcdda with GstCddaBaseSrc class.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst-libs/gst/Makefile.am:
+	  * gst-libs/gst/cdda/Makefile.am:
+	  * gst-libs/gst/cdda/base64.c:
+	  * gst-libs/gst/cdda/base64.h:
+	  * gst-libs/gst/cdda/gstcddabasesrc.c:
+	  (gst_cdda_base_src_mode_get_type), (gst_cdda_base_src_base_init),
+	  (gst_cdda_base_src_class_init), (gst_cdda_base_src_init),
+	  (gst_cdda_base_src_finalize), (gst_cdda_base_src_set_property),
+	  (gst_cdda_base_src_get_property),
+	  (gst_cdda_base_src_get_track_from_sector),
+	  (gst_cdda_base_src_get_query_types), (gst_cdda_base_src_convert),
+	  (gst_cdda_base_src_query), (gst_cdda_base_src_is_seekable),
+	  (gst_cdda_base_src_do_seek), (gst_cdda_base_src_handle_track_seek),
+	  (gst_cdda_base_src_handle_event), (gst_cdda_base_src_uri_get_type),
+	  (gst_cdda_base_src_uri_get_protocols),
+	  (gst_cdda_base_src_uri_get_uri), (gst_cdda_base_src_uri_set_uri),
+	  (gst_cdda_base_src_uri_handler_init),
+	  (gst_cdda_base_src_setup_interfaces),
+	  (gst_cdda_base_src_add_track), (gst_cdda_base_src_update_duration),
+	  (cddb_sum), (gst_cddabasesrc_calculate_musicbrainz_discid),
+	  (lba_to_msf), (gst_cdda_base_src_calculate_cddb_id),
+	  (gst_cdda_base_src_add_tags),
+	  (gst_cdda_base_src_add_index_associations),
+	  (gst_cdda_base_src_set_index), (gst_cdda_base_src_get_index),
+	  (gst_cdda_base_src_track_sort_func), (gst_cdda_base_src_start),
+	  (gst_cdda_base_src_clear_tracks), (gst_cdda_base_src_stop),
+	  (gst_cdda_base_src_create):
+	  * gst-libs/gst/cdda/gstcddabasesrc.h:
+	  * gst-libs/gst/cdda/sha1.c:
+	  * gst-libs/gst/cdda/sha1.h:
+	  Add new libgstcdda with GstCddaBaseSrc class.
+
+2005-12-28 14:59:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/gstgnomevfssink.h: Use GstBaseSinkClass as parent_class member for class struct, not
+	  Original commit message from CVS:
+	  * ext/gnomevfs/gstgnomevfssink.h:
+	  Use GstBaseSinkClass as parent_class member for class struct, not
+	  GstBaseSink.
+
+2005-12-27 22:29:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/videotestsrc/gstvideotestsrc.c: Add start method to reset running time and number of frames sent
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_class_init), (gst_video_test_src_start):
+	  Add start method to reset running time and number of frames sent
+	  when starting up (fixes #324696; patch by: Michal Benes).
+
+2005-12-27 21:58:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  docs/plugins/: Add docs stuff for gnomevfssrc and gnomevfssink.
+	  Original commit message from CVS:
+	  * docs/plugins/Makefile.am:
+	  * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  * docs/plugins/gst-plugins-base-plugins-sections.txt:
+	  * docs/plugins/gst-plugins-base-plugins.args:
+	  * docs/plugins/gst-plugins-base-plugins.hierarchy:
+	  * docs/plugins/gst-plugins-base-plugins.signals:
+	  Add docs stuff for gnomevfssrc and gnomevfssink.
+	  * ext/gnomevfs/gstgnomevfssrc.c:
+	  Fix example pipeline in gtk-doc blurb.
+
+2005-12-27 21:42:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/gnomevfs/: Port gnomevfssink; add gtk-doc blurb.
+	  Original commit message from CVS:
+	  * ext/gnomevfs/Makefile.am:
+	  * ext/gnomevfs/gstgnomevfs.c: (gst_gnome_vfs_uri_get_type),
+	  (gst_gnome_vfs_handle_copy), (gst_gnome_vfs_handle_free),
+	  (gst_gnome_vfs_handle_get_type), (plugin_init):
+	  * ext/gnomevfs/gstgnomevfs.h:
+	  * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_do_init),
+	  (gst_gnome_vfs_sink_base_init), (gst_gnome_vfs_sink_class_init),
+	  (gst_gnome_vfs_sink_finalize), (gst_gnome_vfs_sink_init),
+	  (gst_gnome_vfs_sink_set_property),
+	  (gst_gnome_vfs_sink_get_property), (gst_gnome_vfs_sink_open_file),
+	  (gst_gnome_vfs_sink_close_file), (gst_gnome_vfs_sink_start),
+	  (gst_gnome_vfs_sink_stop), (gst_gnome_vfs_sink_handle_event),
+	  (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render),
+	  (gst_gnome_vfs_sink_uri_get_type),
+	  (gst_gnome_vfs_sink_uri_get_protocols),
+	  (gst_gnome_vfs_sink_uri_get_uri), (gst_gnome_vfs_sink_uri_set_uri),
+	  (gst_gnome_vfs_sink_uri_handler_init):
+	  * ext/gnomevfs/gstgnomevfssink.h:
+	  Port gnomevfssink; add gtk-doc blurb.
+	  * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_get_type),
+	  (gst_gnome_vfs_src_base_init), (gst_gnome_vfs_src_class_init),
+	  (gst_gnome_vfs_src_init), (gst_gnome_vfs_src_finalize),
+	  (gst_gnome_vfs_src_uri_get_type),
+	  (gst_gnome_vfs_src_uri_get_protocols),
+	  (gst_gnome_vfs_src_uri_get_uri), (gst_gnome_vfs_src_uri_set_uri),
+	  (gst_gnome_vfs_src_uri_handler_init),
+	  (gst_gnome_vfs_src_set_property), (gst_gnome_vfs_src_get_property),
+	  (gst_gnome_vfs_src_unicodify), (audiocast_thread_run),
+	  (gst_gnome_vfs_src_send_additional_headers_callback),
+	  (gst_gnome_vfs_src_received_headers_callback),
+	  (gst_gnome_vfs_src_push_callbacks),
+	  (gst_gnome_vfs_src_pop_callbacks),
+	  (gst_gnome_vfs_src_get_icy_metadata), (gst_gnome_vfs_src_create),
+	  (gst_gnome_vfs_src_is_seekable), (gst_gnome_vfs_src_get_size),
+	  (gst_gnome_vfs_src_start), (gst_gnome_vfs_src_stop):
+	  * ext/gnomevfs/gstgnomevfssrc.h:
+	  s/gst_gnomevfssrc/gst_gnome_vfs_src/; move header stuff to header
+	  file; add gtk-doc blurb with example pipelines.
+
+2005-12-23 18:16:22 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	  back to HEAD
+	  Original commit message from CVS:
+	  back to HEAD
+
+=== release 0.10.1 ===
+
+2005-12-23 18:08:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  releasing 0.10.1
+	  Original commit message from CVS:
+	  releasing 0.10.1
+
+2005-12-21 20:59:52 +0000  Edgard Lima <edgard.lima@indt.org.br>
+
+	* ChangeLog:
+	* gst/typefind/gsttypefindfunctions.c:
+	  iLBC30 and iLBC20 added to typefind.
+	  Original commit message from CVS:
+	  iLBC30 and iLBC20 added to typefind.
+
+2005-12-20 15:57:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* configure.ac:
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* po/af.po:
+	* po/az.po:
+	* po/cs.po:
+	* po/en_GB.po:
+	* po/hu.po:
+	* po/it.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/uk.po:
+	* po/vi.po:
+	  prereleasing
+	  Original commit message from CVS:
+	  prereleasing
+
+2005-12-20 12:24:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  stop making fun of older compilers
+	  Original commit message from CVS:
+	  stop making fun of older compilers
+
+2005-12-20 12:00:26 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	  gst-libs/gst/audio/: update strings, values are in microseconds change the default sink buffer time to something that...
+	  Original commit message from CVS:
+	  * gst-libs/gst/audio/gstbaseaudiosink.c:
+	  (gst_base_audio_sink_class_init):
+	  * gst-libs/gst/audio/gstbaseaudiosrc.c:
+	  (gst_base_audio_src_class_init):
+	  update strings, values are in microseconds
+	  change the default sink buffer time to something that is smaller
+	  (to help software volume mixing have a slightly lower delay) but
+	  still be acceptable on Wim's laptop
+
+2005-12-20 10:13:05 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  gst-libs/gst/riff/riff-media.c: Made a quack, forgot to add DUCK to the riff video template.
+	  Original commit message from CVS:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_template_caps):
+	  Made a quack, forgot to add DUCK to the riff video template.
+
+2005-12-19 15:00:38 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  ext/ogg/gstogmparse.c: Make sure pads are initialized correctly.
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_text_parse_base_init),
+	  (gst_ogm_parse_init), (gst_ogm_audio_parse_init),
+	  (gst_ogm_video_parse_init), (gst_ogm_text_parse_init),
+	  (gst_ogm_parse_chain):
+	  Make sure pads are initialized correctly.
+	  * gst-libs/gst/riff/riff-ids.h:
+	  * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+	  (gst_riff_create_video_template_caps):
+	  Add a whole bunch of FOURCC <=> MimeType.
+	  Extend the riff video pad template to support the newly added fourcc.
+
+2005-12-18 15:04:21 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+	  ext/ogg/gstoggdemux.c: Extra debug output when activating/deactivating chains.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_demux_deactivate_current_chain),
+	  (gst_ogg_demux_activate_chain):
+	  Extra debug output when activating/deactivating chains.
+	  * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
+	  (is_demuxer_element), (try_to_link_1), (remove_element_chain),
+	  (unlinked):
+	  Remove a queue from our list when it becomes unlinked.
+	  Don't add queues to elements in class 'Demux' if they
+	  can only produce one pad
+
+2005-12-18 10:54:33 +0000  Julien Moutte <julien@moutte.net>
+
+	  gst-libs/gst/video/gstvideosink.c: Add a debug category.
+	  Original commit message from CVS:
+	  2005-12-18  Julien MOUTTE  <julien@moutte.net>
+	  * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_base_init),
+	  (gst_video_sink_get_type): Add a debug category.
+
+2005-12-18 00:56:07 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: Handle downstream newsegment by sending our own newsegment before the next bu...
+	  Original commit message from CVS:
+	  2005-12-17  Philippe Khalaf  <burger@speedy.org>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_init), (gst_base_rtp_depayload_handle_sink_event):
+	  Handle downstream newsegment by sending our own newsegment before the
+	  next buffer to be released. (#323900)
+
+2005-12-18 00:41:10 +0000  Philippe Kalaf <philippe.kalaf@collabora.co.uk>
+
+	  gst-libs/gst/rtp/gstbasertpdepayload.c: add queue delay to new segment as well (as opposed to just the first buffer)....
+	  Original commit message from CVS:
+	  2005-12-17  Philippe Khalaf  <burger@speedy.org>
+	  * gst-libs/gst/rtp/gstbasertpdepayload.c:
+	  (gst_base_rtp_depayload_set_gst_timestamp):
+	  add queue delay to new segment as well (as opposed to just the first
+	  buffer). (bug #322347)
+
+2005-12-16 22:00:07 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  ext/libvisual/visual.c: change some char* into char[]
+	  Original commit message from CVS:
+	  * ext/libvisual/visual.c: (make_valid_name):
+	  change some char* into char[]
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_class_init), (gst_audio_test_src_do_seek),
+	  (gst_audio_test_src_create):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  prepare to handle EOS and SEGMENT_DONE
+
+2005-12-16 12:32:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  tests/check/generic/states.c: Blacklist cdparanoia element in state test.
+	  Original commit message from CVS:
+	  * tests/check/generic/states.c: (GST_START_TEST):
+	  Blacklist cdparanoia element in state test.
+
+2005-12-16 11:25:51 +0000  Benjamin Pineau <ben.pineau@gmail.com>
+
+	  gst/tcp/: Add <string.h> includes for memset and FD_ZERO (fixes #323878;
+	  Original commit message from CVS:
+	  * gst/tcp/gsttcp.c:
+	  * gst/tcp/gsttcpclientsink.c:
+	  * gst/tcp/gsttcpserversink.c:
+	  * gst/tcp/gsttcpserversrc.c:
+	  Add <string.h> includes for memset and FD_ZERO (fixes #323878;
+	  patch by: Benjamin Pineau).
+
+2005-12-15 14:43:38 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/videorate/gstvideorate.c: Fix timestamping for videorate when the first buffer it sees has a non-zero timestamp. ...
+	  Original commit message from CVS:
+	  * gst/videorate/gstvideorate.c: (gst_video_rate_blank_data),
+	  (gst_video_rate_chain):
+	  Fix timestamping for videorate when the first buffer it sees has a
+	  non-zero timestamp. Fix some misleading debug output.
+
+2005-12-15 10:30:14 +0000  Michael Smith <msmith@xiph.org>
+
+	  gst/audioresample/gstaudioresample.c: Don't leak all input buffers to audioresample.
+	  Original commit message from CVS:
+	  * gst/audioresample/gstaudioresample.c:
+	  Don't leak all input buffers to audioresample.
+
+2005-12-15 10:15:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/pango/gsttextoverlay.c: Don't operate on empty text buffers. Strip newlines and tabs only from the end of the tex...
+	  Original commit message from CVS:
+	  * ext/pango/gsttextoverlay.c: (gst_text_overlay_collected):
+	  Don't operate on empty text buffers. Strip newlines and
+	  tabs only from the end of the text, but leave them intact
+	  in the middle. Fix typo in gtk-doc description.
+
+2005-12-15 09:48:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Make sure the video frame buffer we return to apps via the "frame" property always has caps set on it....
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c:
+	  * gst/playback/gstplaybin.c: (handoff):
+	  Make sure the video frame buffer we return to apps via the
+	  "frame" property always has caps set on it. Modify
+	  _gst_gvalue_set_object() macro to handle NULL objects
+	  gracefully too.
+
+2005-12-14 20:42:11 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/audiotestsrc/gstaudiotestsrc.*: Adjust to some recent api changes and add wtays new cool seeking capabillities
+	  Original commit message from CVS:
+	  * gst/audiotestsrc/gstaudiotestsrc.c:
+	  (gst_audio_test_src_class_init), (gst_audio_test_src_init),
+	  (gst_audio_test_src_setcaps), (gst_audio_test_src_src_query),
+	  (gst_audio_test_src_do_seek), (gst_audio_test_src_is_seekable),
+	  (gst_audio_test_src_create):
+	  * gst/audiotestsrc/gstaudiotestsrc.h:
+	  Adjust to some recent api changes and add wtays new cool seeking
+	  capabillities
+
+2005-12-14 17:58:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  ext/alsa/: Helper functions to add device probing via the GstPropertyProbe interface to a class.
+	  Original commit message from CVS:
+	  * ext/alsa/Makefile.am:
+	  * ext/alsa/gstalsadeviceprobe.c:
+	  * ext/alsa/gstalsadeviceprobe.h:
+	  Helper functions to add device probing via the GstPropertyProbe
+	  interface to a class.
+	  * ext/alsa/gstalsamixer.h:
+	  Comment out GST_ALSA_MIXER, it returns a struct that's not
+	  used.
+	  * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
+	  Add some debug info.
+	  * ext/alsa/gstalsamixerelement.c:
+	  (gst_alsa_mixer_element_interface_supported),
+	  (gst_implements_interface_init),
+	  (gst_alsa_mixer_element_init_interfaces),
+	  (gst_alsa_mixer_element_class_init),
+	  (gst_alsa_mixer_element_finalize), (gst_alsa_mixer_element_init),
+	  (gst_alsa_mixer_element_set_property),
+	  (gst_alsa_mixer_element_get_property),
+	  (gst_alsa_mixer_element_change_state):
+	  * ext/alsa/gstalsamixerelement.h:
+	  Add 'device' and 'device-name' properties. Add GstPropertyProbe
+	  for device handling (gnome-volume-control will need that).
+
+2005-12-12 20:31:24 +0000  Christian Schaller <uraeus@gnome.org>
+
+	* ChangeLog:
+	* ext/Makefile.am:
+	* gst-plugins-base.spec.in:
+	  updates to activate cdparanoia plugin
+	  Original commit message from CVS:
+	  updates to activate cdparanoia plugin
+
+2005-12-12 19:13:09 +0000  Michael Smith <msmith@xiph.org>
+
+	  ext/ogg/gstoggdemux.c: Use the correct function to free list of typefind factories.
+	  Original commit message from CVS:
+	  * ext/ogg/gstoggdemux.c: (gst_ogg_type_find):
+	  Use the correct function to free list of typefind factories.
+
+2005-12-12 15:09:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  gst/videotestsrc/gstvideotestsrc.*: Implement seeking in videotestsrc.
+	  Original commit message from CVS:
+	  * gst/videotestsrc/gstvideotestsrc.c:
+	  (gst_video_test_src_class_init), (gst_video_test_src_init),
+	  (gst_video_test_src_parse_caps), (gst_video_test_src_query),
+	  (gst_video_test_src_do_seek), (gst_video_test_src_is_seekable),
+	  (gst_video_test_src_create):
+	  * gst/videotestsrc/gstvideotestsrc.h:
+	  Implement seeking in videotestsrc.
+	  Small cleanups.
+
+2005-12-12 15:06:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  ext/cdparanoia/: Partially ported cdparanoia now that basesrc can support a plugin like this..
+	  Original commit message from CVS:
+	  * ext/cdparanoia/Makefile.am:
+	  * ext/cdparanoia/gstcdparanoia.c: (gst_paranoia_mode_get_type),
+	  (gst_paranoia_endian_get_type), (_do_init),
+	  (cdparanoia_class_init), (cdparanoia_init),
+	  (cdparanoia_set_property), (cdparanoia_get_property),
+	  (cdparanoia_do_seek), (cdparanoia_is_seekable),
+	  (cdparanoia_create), (cdparanoia_start), (cdparanoia_stop),
+	  (cdparanoia_convert), (cdparanoia_get_query_types),
+	  (cdparanoia_query), (cdparanoia_set_index),
+	  (cdparanoia_uri_set_uri):
+	  * ext/cdparanoia/gstcdparanoia.h:
+	  Partially ported cdparanoia now that basesrc can support a
+	  plugin like this..
+
+2005-12-12 13:03:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+	  tests/examples/seek/scrubby.c: Set higher priority for bus events so they don't get reordered with gtk gui events.
+	  Original commit message from CVS:
+	  * tests/examples/seek/scrubby.c: (main):
+	  Set higher priority for bus events so they don't get reordered with
+	  gtk gui events.
+	  * tests/examples/seek/seek.c: (do_seek), (start_seek), (stop_seek),
+	  (flush_toggle_cb), (main):
+	  Added checkbox do disable flushing seeks.
+	  Disable scrubbing when doing non flushing seeks.
+
+2005-12-12 09:52:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/subparse/gstsubparse.c: Implement some sort of event handling that doesn't rely on g_return_if_fail; make sure we...
+	  Original commit message from CVS:
+	  * gst/subparse/gstsubparse.c: (gst_sub_parse_init),
+	  (gst_sub_parse_do_seek), (gst_sub_parse_src_event), (parse_subrip),
+	  (parser_state_init), (handle_buffer), (gst_sub_parse_chain),
+	  (gst_sub_parse_sink_event), (gst_sub_parse_change_state):
+	  Implement some sort of event handling that doesn't rely on
+	  g_return_if_fail; make sure we always push the last chunk of an
+	  .srt out when we receive an EOS; use gst_pad_alloc_buffer; fix
+	  state change function; remove some old cruft. Seeking is still
+	  rather unlikely to work though.
+	  * tools/.cvsignore:
+	  Ignore more.
+
+2005-12-11 22:26:08 +0000  Julien Moutte <julien@moutte.net>
+
+	  sys/xvimage/xvimagesink.c: Fixed a leak of the current image reference when cleaning up.
+	  Original commit message from CVS:
+	  2005-12-11  Julien MOUTTE  <julien@moutte.net>
+	  * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state):
+	  Fixed a leak of the current image reference when cleaning up.
+	  Thanks to Arwed von Merkatz (alley_cat) for pointing it out.
+
+2005-12-09 10:23:42 +0000  Michael Smith <msmith@xiph.org>
+
+	  tools/: Remove gst-launch-ext. It doesn't work, and is no longer particularly useful.
+	  Original commit message from CVS:
+	  * tools/Makefile.am:
+	  * tools/gst-launch-ext-m.m:
+	  Remove gst-launch-ext. It doesn't work, and is no longer
+	  particularly useful.
+
+2005-12-08 18:53:57 +0000  Luca Ognibene <luogni@tin.it>
+
+	  ext/ogg/gstogmparse.c: don't pass random values to ogmparse convert function.
+	  Original commit message from CVS:
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_sink_query):
+	  don't pass random values to ogmparse convert function.
+	  Make seeking possible in the exile1.ogm file.
+
+2005-12-07 18:51:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+	  gst/playback/: Work around refcount problem with g_value_set_object() that occur if the core has been compiled agains...
+	  Original commit message from CVS:
+	  * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_property):
+	  * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
+	  Work around refcount problem with g_value_set_object() that occur
+	  if the core has been compiled against GLib-2.6 (g_value_set_object()
+	  will only g_object_ref() the element, but the caller will
+	  gst_object_unref() it and bad things will happen due to the way
+	  GstObjects are refcounted in the GLib-2.6 case). Fixes problems with
+	  totem for people on FC4 using Thomas's 0.10 RPMs.
+
+2005-12-07 11:34:37 +0000  Edward Hervey <bilboed@bilboed.com>
+
+	  Time to welcome ogm to 0.10 :)
+	  Original commit message from CVS:
+	  Time to welcome ogm to 0.10 :)
+	  * ext/ogg/gstoggdemux.c: (internal_element_pad_added_cb),
+	  (gst_ogg_pad_typefind):
+	  Oggdemux can now properly typefind elements with dynamic pads.
+	  * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
+	  Properly set caps on src pad, and set caps on outgoing buffers.
+
+2005-12-06 19:42:02 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* ext/alsa/gstalsamixer.h:
+	* ext/alsa/gstalsamixerelement.h:
+	* ext/alsa/gstalsamixeroptions.h:
+	* ext/alsa/gstalsamixertrack.h:
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasink.h:
+	* ext/alsa/gstalsasrc.c:
+	* ext/alsa/gstalsasrc.h:
+	* ext/cdparanoia/gstcdparanoia.h:
+	* ext/gnomevfs/gstgnomevfsuri.h:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/pango/gsttextoverlay.h:
+	* ext/theora/theoradec.c:
+	* ext/theora/theoraenc.c:
+	* ext/vorbis/vorbisdec.h:
+	* ext/vorbis/vorbisenc.c:
+	* ext/vorbis/vorbisenc.h:
+	* ext/vorbis/vorbisparse.h:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst-libs/gst/audio/gstaudiosink.h:
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	* gst-libs/gst/audio/gstaudiosrc.h:
+	* gst-libs/gst/audio/gstbaseaudiosink.c:
+	* gst-libs/gst/audio/gstbaseaudiosink.h:
+	* gst-libs/gst/audio/gstbaseaudiosrc.c:
+	* gst-libs/gst/audio/gstbaseaudiosrc.h:
+	* gst-libs/gst/audio/gstringbuffer.h:
+	* gst-libs/gst/audio/multichannel.h:
+	* gst-libs/gst/floatcast/floatcast.h:
+	* gst-libs/gst/interfaces/colorbalance.c:
+	* gst-libs/gst/interfaces/colorbalance.h:
+	* gst-libs/gst/interfaces/colorbalancechannel.h:
+	* gst-libs/gst/interfaces/mixer.h:
+	* gst-libs/gst/interfaces/mixeroptions.h:
+	* gst-libs/gst/interfaces/mixertrack.h:
+	* gst-libs/gst/interfaces/navigation.h:
+	* gst-libs/gst/interfaces/propertyprobe.h:
+	* gst-libs/gst/interfaces/tuner.h:
+	* gst-libs/gst/interfaces/tunerchannel.h:
+	* gst-libs/gst/interfaces/tunernorm.h:
+	* gst-libs/gst/interfaces/xoverlay.h:
+	* gst-libs/gst/netbuffer/gstnetbuffer.h:
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-media.h:
+	* gst-libs/gst/riff/riff-read.h:
+	* gst-libs/gst/rtp/gstbasertpdepayload.h:
+	* gst-libs/gst/rtp/gstbasertppayload.c:
+	* gst-libs/gst/rtp/gstbasertppayload.h:
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	* gst-libs/gst/tag/gsttageditingprivate.h:
+	* gst-libs/gst/tag/gstvorbistag.c:
+	* gst-libs/gst/tag/tag.h:
+	* gst-libs/gst/video/video.h:
+	* gst/adder/gstadder.c:
+	* gst/adder/gstadder.h:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/buffer.h:
+	* gst/audioresample/functable.h:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/resample.h:
+	* gst/ffmpegcolorspace/avcodec.h:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+	* gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+	* gst/ffmpegcolorspace/imgconvert.c:
+	* gst/ffmpegcolorspace/imgconvert_template.h:
+	* gst/playback/gstdecodebin.c:
+	* gst/playback/gstplaybasebin.h:
+	* gst/playback/gstplaybin.c:
+	* gst/playback/gststreaminfo.h:
+	* gst/tcp/gstfdset.c:
+	* gst/tcp/gstfdset.h:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultifdsink.h:
+	* gst/tcp/gsttcp.h:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpclientsrc.h:
+	* gst/tcp/gsttcpplugin.h:
+	* gst/tcp/gsttcpserversink.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/typefind/gsttypefindfunctions.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.h:
+	* sys/v4l/gstv4lcolorbalance.h:
+	* sys/v4l/gstv4ltuner.h:
+	* sys/v4l/gstv4lxoverlay.h:
+	* sys/v4l/v4l_calls.h:
+	* sys/v4l/videodev_mjpeg.h:
+	* tests/check/elements/audioconvert.c:
+	* tests/check/elements/audioresample.c:
+	* tests/check/elements/audiotestsrc.c:
+	* tests/check/elements/videotestsrc.c:
+	* tests/check/elements/volume.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/seek/seek.c:
+	  expand tabs
+	  Original commit message from CVS:
+	  expand tabs
+
+2005-12-06 19:28:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* docs/libs/tmpl/gstaudio.sgml:
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* docs/libs/tmpl/gstgconf.sgml:
+	* docs/libs/tmpl/gstmixer.sgml:
+	* docs/libs/tmpl/gstringbuffer.sgml:
+	* docs/libs/tmpl/gsttuner.sgml:
+	* docs/libs/tmpl/gstxoverlay.sgml:
+	  put back stability level
+	  Original commit message from CVS:
+	  put back stability level
+
+2005-12-05 18:11:49 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* configure.ac:
+	  back to HEAD
+	  Original commit message from CVS:
+	  back to HEAD
+
+=== release 0.10.0 ===
+
+2005-12-05 18:02:48 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/libs/tmpl/gstcolorbalance.sgml:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-decodebin.xml:
+	* docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+	* docs/plugins/inspect/plugin-gnomevfs.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playbin.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-video4linux.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	  releasing 0.10.0
+	  Original commit message from CVS:
+	  releasing 0.10.0
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+   The file `configure.in' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory.  After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on.  Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+     CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+   If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..126379f
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,88 @@
+DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
+
+if BUILD_EXTERNAL
+SUBDIRS_EXT = ext
+else
+SUBDIRS_EXT =
+endif
+
+SUBDIRS = 			\
+	pkgconfig		\
+	gst-libs 		\
+	gst sys $(SUBDIRS_EXT) 	\
+	tools 			\
+	tests 			\
+	docs			\
+	po 			\
+	common 			\
+	m4
+
+DIST_SUBDIRS = 			\
+	pkgconfig		\
+	docs			\
+	gst-libs		\
+	gst sys ext		\
+	tools 			\
+	tests 			\
+	po 			\
+	common 			\
+	m4
+
+# include before EXTRA_DIST for win32 assignment
+include $(top_srcdir)/common/win32.mak
+
+EXTRA_DIST = \
+	gst-plugins-base.spec depcomp \
+	AUTHORS COPYING COPYING.LIB NEWS README RELEASE REQUIREMENTS \
+	ChangeLog gst-plugins-base.doap autogen.sh $(win32)
+
+DISTCLEANFILES = _stdint.h
+
+ACLOCAL_AMFLAGS = -I m4 -I common/m4
+
+include $(top_srcdir)/common/release.mak
+include $(top_srcdir)/common/po.mak
+
+check-valgrind:
+	cd tests/check && make check-valgrind
+
+if HAVE_GST_CHECK
+check-torture:
+	cd tests/check && make torture
+else
+check-torture:
+	true
+endif
+
+WIN32_COPY = \
+	$(top_builddir)/gst-libs/gst/*/*-enumtypes.[ch] \
+	$(top_builddir)/_stdint.h
+
+win32-update:
+	for f in $(WIN32_COPY); do cp -v $$f win32/common; done; \
+	for f in win32/common/*-enumtypes.c; do \
+	  echo "Indenting $$f"; \
+	  gst-indent $$f; gst-indent $$f; \
+	done
+	cp -v $(top_builddir)/win32/common/config.h-new \
+	    $(top_srcdir)/win32/common/config.h
+
+include $(top_srcdir)/common/coverage/lcov.mak
+
+check: check-exports
+
+# cruft: plugins that have been merged or moved or renamed
+
+CRUFT_FILES = \
+	$(top_builddir)/common/shave \
+	$(top_builddir)/common/shave-libtool \
+	$(top_builddir)/gst-libs/gst/audio/testchannels \
+	$(top_builddir)/tools/gst-discoverer
+
+CRUFT_DIRS = \
+	$(top_srcdir)/sys/v4l \
+	$(top_srcdir)/tests/examples/v4l
+
+include $(top_srcdir)/common/cruft.mak
+
+all-local: check-cruft
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..8a7e962
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,1199 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# various tests to make sure we dist the win32 stuff (for MSVC builds) right
+
+# include this snippet to add a common release: target by using
+# include $(top_srcdir)/common/release.mak
+
+# checks for left-over files in the (usually uninstalled) tree, ie. for
+# stuff that best be deleted to avoid problems like having old plugin binaries
+# lying around.
+#
+# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/gst-plugins-base.spec.in \
+	$(top_srcdir)/common/coverage/lcov.mak \
+	$(top_srcdir)/common/cruft.mak $(top_srcdir)/common/po.mak \
+	$(top_srcdir)/common/release.mak \
+	$(top_srcdir)/common/win32.mak $(top_srcdir)/configure \
+	ABOUT-NLS AUTHORS COPYING COPYING.LIB ChangeLog INSTALL NEWS \
+	compile config.guess config.rpath config.sub depcomp \
+	install-sh ltmain.sh missing
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = gst-plugins-base.spec
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = -I m4 -I common/m4
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+@BUILD_EXTERNAL_FALSE@SUBDIRS_EXT = 
+@BUILD_EXTERNAL_TRUE@SUBDIRS_EXT = ext
+SUBDIRS = \
+	pkgconfig		\
+	gst-libs 		\
+	gst sys $(SUBDIRS_EXT) 	\
+	tools 			\
+	tests 			\
+	docs			\
+	po 			\
+	common 			\
+	m4
+
+DIST_SUBDIRS = \
+	pkgconfig		\
+	docs			\
+	gst-libs		\
+	gst sys ext		\
+	tools 			\
+	tests 			\
+	po 			\
+	common 			\
+	m4
+
+
+# the MANIFEST contains all win32 related files that should be disted
+win32 = $(shell cat $(top_srcdir)/win32/MANIFEST)
+
+# wildcard is apparently not portable to other makes, hence the use of find
+# these are library .def files with the symbols to export
+win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def')
+
+# wildcard is apparently not portable to other makes, hence the use of find
+# these are files that need to be disted with CRLF line endings:
+win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp')
+
+# include before EXTRA_DIST for win32 assignment
+EXTRA_DIST = \
+	gst-plugins-base.spec depcomp \
+	AUTHORS COPYING COPYING.LIB NEWS README RELEASE REQUIREMENTS \
+	ChangeLog gst-plugins-base.doap autogen.sh $(win32)
+
+DISTCLEANFILES = _stdint.h
+
+# make bz2 as well
+AUTOMAKE_OPTIONS = dist-bzip2
+WIN32_COPY = \
+	$(top_builddir)/gst-libs/gst/*/*-enumtypes.[ch] \
+	$(top_builddir)/_stdint.h
+
+
+# cruft: plugins that have been merged or moved or renamed
+CRUFT_FILES = \
+	$(top_builddir)/common/shave \
+	$(top_builddir)/common/shave-libtool \
+	$(top_builddir)/gst-libs/gst/audio/testchannels \
+	$(top_builddir)/tools/gst-discoverer
+
+CRUFT_DIRS = \
+	$(top_srcdir)/sys/v4l \
+	$(top_srcdir)/tests/examples/v4l
+
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+gst-plugins-base.spec: $(top_builddir)/config.status $(srcdir)/gst-plugins-base.spec.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@$(am__cd) '$(distuninstallcheck_dir)' \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+	ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am all-local am--refresh check check-am clean \
+	clean-generic clean-libtool ctags ctags-recursive dist \
+	dist-all dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+win32-debug:
+	@echo; \
+	echo win32     = $(win32); \
+	echo; \
+	echo win32defs = $(win32defs); \
+	echo; \
+	echo win32crlf = $(win32crlf); \
+	echo
+
+win32-check-crlf:
+	@echo Checking win32 files for CR LF line endings ...; \
+	fail=0 ; \
+	for each in $(win32crlf) ; do \
+	  result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \
+	  if test "$$result" = 0 ; then \
+	    echo $$each must be fixed to have CRLF line endings ; \
+	    fail=1; \
+	  fi ; \
+	done ; \
+	exit $$fail
+
+# make sure all symbols we export on linux are defined in the win32 .def too
+# (don't care about other unixes for now, it's enough if it works on one of
+# the linux build bots; we assume .so )
+check-exports:
+	@fail=0 ; \
+	for l in $(win32defs); do \
+	  libbase=`basename "$$l" ".def"`; \
+	  libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \
+	  libdef="$(top_srcdir)/win32/common/$$libbase.def"; \
+	  if test "x$$libso" != "x"; then \
+	    echo Checking symbols in $$libso; \
+	    if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \
+	      fail=1; \
+	    fi; \
+	  fi; \
+	done ; \
+	if test $$fail != 0; then \
+	  echo '-----------------------------------------------------------'; \
+	  echo 'Run this to update the .def files:'; \
+	  echo 'make check-exports 2>&1 | patch -p1'; \
+	  echo '-----------------------------------------------------------'; \
+	fi; \
+	exit $$fail
+
+# complain about nonportable printf format strings (%lld, %llu, %zu etc.)
+check-nonportable-print-format:
+	@fail=0 ; \
+	loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \
+	if test "x$$loc" != "x"; then \
+	  echo "Please fix the following print format strings:" ; \
+	  find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \
+	  fail=1; \
+	fi; \
+	exit $$fail
+
+dist-hook: check-exports win32-check-crlf
+
+release: dist
+	$(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5
+	$(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5
+
+# generate md5 sum files
+%.md5: %
+	md5sum $< > $@
+
+# check that no marshal or enumtypes files are included
+# this in turn ensures that distcheck fails for missing .list files which is currently
+# shadowed when the corresponding .c and .h files are included.
+distcheck-hook:
+	@test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \
+	test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \
+	( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \
+	  $(ECHO) "*** Make sure the following files are not disted:" && \
+	  find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \
+	  find $(distdir) -name \*-marshal.[ch] && \
+	  false )
+
+# rule to download the latest .po files
+download-po: $(top_srcdir)/common/download-translations
+	$(top_srcdir)/common/download-translations $(PACKAGE)
+
+check-valgrind:
+	cd tests/check && make check-valgrind
+
+@HAVE_GST_CHECK_TRUE@check-torture:
+@HAVE_GST_CHECK_TRUE@	cd tests/check && make torture
+@HAVE_GST_CHECK_FALSE@check-torture:
+@HAVE_GST_CHECK_FALSE@	true
+
+win32-update:
+	for f in $(WIN32_COPY); do cp -v $$f win32/common; done; \
+	for f in win32/common/*-enumtypes.c; do \
+	  echo "Indenting $$f"; \
+	  gst-indent $$f; gst-indent $$f; \
+	done
+	cp -v $(top_builddir)/win32/common/config.h-new \
+	    $(top_srcdir)/win32/common/config.h
+.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload
+
+# run lcov from scratch, always
+lcov-reset:
+	$(MAKE) lcov-run
+	$(MAKE) lcov-report
+
+# run lcov from scratch if the dir is not there
+lcov:
+	$(MAKE) lcov-reset
+
+# reset run coverage tests
+@GST_GCOV_ENABLED_TRUE@lcov-run:
+@GST_GCOV_ENABLED_TRUE@	@-rm -rf lcov
+@GST_GCOV_ENABLED_TRUE@	lcov --directory . --zerocounters
+@GST_GCOV_ENABLED_TRUE@	-if test -d tests/check; then $(MAKE) -C tests/check inspect; fi
+@GST_GCOV_ENABLED_TRUE@	-$(MAKE) check
+
+# generate report based on current coverage data
+@GST_GCOV_ENABLED_TRUE@lcov-report:
+@GST_GCOV_ENABLED_TRUE@	mkdir lcov
+@GST_GCOV_ENABLED_TRUE@	lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info
+@GST_GCOV_ENABLED_TRUE@	lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove
+@GST_GCOV_ENABLED_TRUE@	lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove
+@GST_GCOV_ENABLED_TRUE@	lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove
+@GST_GCOV_ENABLED_TRUE@	lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info
+@GST_GCOV_ENABLED_TRUE@	rm lcov/remove
+@GST_GCOV_ENABLED_TRUE@	mv lcov/lcov.cleaned.info lcov/lcov.info
+@GST_GCOV_ENABLED_TRUE@	genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info
+
+@GST_GCOV_ENABLED_TRUE@lcov-upload: lcov
+@GST_GCOV_ENABLED_TRUE@	rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE)
+
+@GST_GCOV_ENABLED_FALSE@lcov-run:
+@GST_GCOV_ENABLED_FALSE@	echo "Need to reconfigure with --enable-gcov"
+
+@GST_GCOV_ENABLED_FALSE@lcov-report:
+@GST_GCOV_ENABLED_FALSE@	echo "Need to reconfigure with --enable-gcov"
+
+check: check-exports
+
+check-cruft:
+	@cruft_files=""; cruft_dirs=""; \
+	for f in $(CRUFT_FILES); do \
+	  if test -e $$f; then \
+	    cruft_files="$$cruft_files $$f"; \
+	  fi \
+	done; \
+	for d in $(CRUFT_DIRS); do \
+	  if test -e $$d; then \
+	    cruft_dirs="$$cruft_dirs $$d"; \
+	  fi \
+	done; \
+	if test "x$$cruft_files$$cruft_dirs" != x; then \
+	  echo; \
+	  echo "**** CRUFT ALERT *****"; \
+	  echo; \
+	  echo "The following files and directories may not be needed any "; \
+	  echo "longer (usually because a plugin has been merged into     "; \
+	  echo "another plugin, moved to a different module, or been      "; \
+	  echo "renamed), and you probably want to clean them up if you   "; \
+	  echo "don't have local changes:                                 "; \
+	  echo; \
+	  for f in $$cruft_files; do echo "file $$f"; done; \
+	  echo; \
+	  for d in $$cruft_dirs; do echo "directory $$d"; done; \
+	  echo; \
+	  echo "'make clean-cruft' will remove these for you."; \
+	  echo; \
+	fi
+
+clean-cruft-dirs:
+	@for d in $(CRUFT_DIRS); do \
+	  if test -e $$d; then \
+	    rm -r "$$d" && echo "Removed directory $$d"; \
+	  fi \
+	done
+
+clean-cruft-files:
+	@for f in $(CRUFT_FILES); do \
+	  if test -e $$f; then \
+	    rm "$$f" && echo "Removed file $$f"; \
+	  fi \
+	done
+
+clean-cruft: clean-cruft-dirs clean-cruft-files
+
+# also might want to add this to your Makefile.am:
+#
+# all-local: check-cruft
+
+all-local: check-cruft
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..d5d4ab8
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,9 @@
+This is GStreamer Base Plug-ins 0.11.1, "A handful sometimes, A heartful always"
+
+New in 0.11.1:
+
+      * Ported to 0.11.0 core API changes
+      * Rename GstXOverlay -> GstVideoOverlay
+      * Reworked audio caps
+      * Support for multiple frames in buffers
+      * Add video colorimetry support
diff --git a/README b/README
new file mode 100644
index 0000000..908386d
--- /dev/null
+++ b/README
@@ -0,0 +1,247 @@
+WHAT IT IS
+----------
+
+This is GStreamer, a framework for streaming media.
+
+WHERE TO START
+--------------
+
+We have a website at
+http://gstreamer.freedesktop.org/
+
+You should start by going through our FAQ at
+http://gstreamer.freedesktop.org/data/doc/gstreamer/head/faq/html/
+
+There is more documentation; go to
+http://gstreamer.freedesktop.org/documentation
+
+You can subscribe to our mailing lists; see the website for details.
+
+We track bugs in GNOME's bugzilla; see the website for details.
+
+You can join us on IRC - #gstreamer on irc.freenode.org
+
+GStreamer 0.10 series
+---------------------
+
+Starring
+
+  GSTREAMER
+
+The core around which all other modules revolve.  Base functionality and
+libraries, some essential elements, documentation, and testing.
+
+  BASE
+
+A well-groomed and well-maintained collection of GStreamer plug-ins and
+elements, spanning the range of possible types of elements one would want
+to write for GStreamer.  
+
+And introducing, for the first time ever, on the development screen ...
+
+  THE GOOD
+
+ --- "Such ingratitude.  After all the times I've saved your life."
+
+A collection of plug-ins you'd want to have right next to you on the
+battlefield.  Shooting sharp and making no mistakes, these plug-ins have it
+all: good looks, good code, and good licensing.  Documented and dressed up
+in tests.  If you're looking for a role model to base your own plug-in on,
+here it is.
+
+If you find a plot hole or a badly lip-synced line of code in them,
+let us know - it is a matter of honour for us to ensure Blondie doesn't look
+like he's been walking 100 miles through the desert without water.
+
+  THE UGLY
+
+  --- "When you have to shoot, shoot.  Don't talk."
+
+There are times when the world needs a color between black and white.
+Quality code to match the good's, but two-timing, backstabbing and ready to
+sell your freedom down the river.  These plug-ins might have a patent noose
+around their neck, or a lock-up license, or any other problem that makes you
+think twice about shipping them.
+
+We don't call them ugly because we like them less.  Does a mother love her
+son less because he's not as pretty as the other ones ? No  - she commends
+him on his great personality.  These plug-ins are the life of the party.
+And we'll still step in and set them straight if you report any unacceptable
+behaviour - because there are two kinds of people in the world, my friend:
+those with a rope around their neck and the people who do the cutting.
+
+  THE BAD
+
+  --- "That an accusation?"
+
+No perfectly groomed moustache or any amount of fine clothing is going to
+cover up the truth - these plug-ins are Bad with a capital B. 
+They look fine on the outside, and might even appear to get the job done, but
+at the end of the day they're a black sheep. Without a golden-haired angel
+to watch over them, they'll probably land in an unmarked grave at the final
+showdown.
+
+Don't bug us about their quality - exercise your Free Software rights,
+patch up the offender and send us the patch on the fastest steed you can
+steal from the Confederates. Because you see, in this world, there's two
+kinds of people, my friend: those with loaded guns and those who dig.
+You dig.
+
+The Lowdown
+-----------
+
+  --- "I've never seen so many plug-ins wasted so badly."
+
+GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
+the chaff.  Also, distributors have brought up issues about the legal status
+of some of the plug-ins we ship.  To remedy this, we've divided the previous
+set of available plug-ins into four modules:
+
+- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
+  of possible types of elements; these are continuously kept up-to-date
+  with any core changes during the development series.
+
+  - We believe distributors can safely ship these plug-ins.
+  - People writing elements should base their code on these elements.
+  - These elements come with examples, documentation, and regression tests.
+
+- gst-plugins-good: a set of plug-ins that we consider to have good quality
+  code, correct functionality, our preferred license (LGPL for the plug-in
+  code, LGPL or LGPL-compatible for the supporting library).
+
+  - We believe distributors can safely ship these plug-ins.
+  - People writing elements should base their code on these elements.
+ 
+- gst-plugins-ugly: a set of plug-ins that have good quality and correct
+  functionality, but distributing them might pose problems.  The license
+  on either the plug-ins or the supporting libraries might not be how we'd
+  like. The code might be widely known to present patent problems.
+
+  - Distributors should check if they want/can ship these plug-ins.
+  - People writing elements should base their code on these elements.
+
+- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
+  rest.  They might be close to being good quality, but they're missing
+  something - be it a good code review, some documentation, a set of tests,
+  a real live maintainer, or some actual wide use.
+  If the blanks are filled in they might be upgraded to become part of
+  either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
+
+  - If the plug-ins break, you can't complain - instead, you can fix the
+    problem and send us a patch, or bribe someone into fixing them for you.
+  - New contributors can start here for things to work on.
+
+PLATFORMS
+---------
+
+- Linux is of course fully supported
+- FreeBSD is reported to work; other BSD's should work too
+- Solaris is reported to work; a specific sunaudiosink plugin has been written
+- MacOSX is reported to work; specific audio and video sinks have been written
+- Windows support is experimental but improving.  Output sinks have been
+  written but are not yet included in the code. We support
+  - MSys/MingW builds
+  - Microsoft Visual Studio 6 builds (see win32/README.txt)
+
+INSTALLING FROM PACKAGES
+------------------------
+
+You should always prefer installing from packages first.  GStreamer is
+well-maintained for a number of distributions, including Fedora, Debian,
+Ubuntu, Mandrake, Gentoo, ...
+
+Only in cases where you:
+- want to hack on GStreamer
+- want to verify that a bug has been fixed
+- do not have a sane distribution
+should you choose to build from source tarballs or CVS.
+
+Find more information about the various packages at
+http://gstreamer.freedesktop.org/download/
+
+COMPILING FROM SOURCE TARBALLS
+------------------------------
+
+- again, make sure that you really need to install from source !
+  If GStreamer is one of your first projects ever that you build from source,
+  consider taking on an easier project.
+
+- check output of ./configure --help to see if any options apply to you
+- run
+  ./configure
+  make
+
+  to build GStreamer.
+- if you want to install it (not required, but what you usually want to do), run
+  make install
+
+- try out a simple test:
+  gst-launch -v fakesrc num_buffers=5 ! fakesink
+  (If you didn't install GStreamer, prefix gst-launch with tools/)
+
+  If it outputs a bunch of messages from fakesrc and fakesink, everything is
+  ok.
+
+  If it did not work, keep in mind that you might need to adjust the
+  PATH and/or LD_LIBRARY_PATH environment variables to make the system
+  find GStreamer in the prefix where you installed (by default that is /usr/local).
+
+- After this, you're ready to install gst-plugins, which will provide the
+  functionality you're probably looking for by now, so go on and read
+  that README.
+
+COMPILING FROM CVS
+------------------
+
+When building from CVS sources, you will need to run autogen.sh to generate 
+the build system files.
+
+You will need a set of additional tools typical for building from CVS,
+including:
+- autoconf
+- automake
+- libtool
+
+autogen.sh will check for recent enough versions and complain if you don't have
+them.  You can also specify specific versions of automake and autoconf with
+--with-automake and --with-autoconf
+
+Check autogen.sh options by running autogen.sh --help
+
+autogen.sh can pass on arguments to configure - you just need to separate them
+from autogen.sh with -- between the two.
+prefix has been added to autogen.sh but will be passed on to configure because
+some build scripts like that.
+
+When you have done this once, you can use autoregen.sh to re-autogen with
+the last passed options as a handy shortcut.  Use it.
+
+After the autogen.sh stage, you can follow the directions listed in
+"COMPILING FROM SOURCE"
+
+You can also run your whole cvs stack uninstalled.  The script in
+the gstreamer module /docs/faq/gst-uninstalled) is helpful in setting
+up your environment for this.
+
+PLUG-IN DEPENDENCIES AND LICENSES
+---------------------------------
+
+GStreamer is developed under the terms of the LGPL (see LICENSE file for
+details). Some of our plug-ins however rely on libraries which are available
+under other licenses. This means that if you are distributing an application
+which has a non-GPL compatible license (for instance a closed-source
+application) with GStreamer, you have to make sure not to distribute GPL-linked
+plug-ins.
+
+When using GPL-linked plug-ins, GStreamer is for all practical reasons
+under the GPL itself.
+
+HISTORY
+-------
+
+The fundamental design comes from the video pipeline at Oregon Graduate
+Institute, as well as some ideas from DirectMedia.  It's based on plug-ins that
+will provide the various codec and other functionality.  The interface
+hopefully is generic enough for various companies (ahem, Apple) to release
+binary codecs for Linux, until such time as they get a clue and release the
+source.
diff --git a/RELEASE b/RELEASE
new file mode 100644
index 0000000..7f2b749
--- /dev/null
+++ b/RELEASE
@@ -0,0 +1,127 @@
+
+Release notes for GStreamer Base Plug-ins 0.11.1 "A handful sometimes, A heartful always"
+        
+
+
+The GStreamer team is proud to announce a new release
+in the 0.11.x unstable series of the
+GStreamer Base Plug-ins.
+
+
+The 0.11.x series is an unstable series targeted at developers.
+It is not API or ABI compatible with the stable 0.10.x series.
+It is, however, parallel installable with the 0.10.x series.
+
+
+
+This module contains a set of reference plugins, base classes for other
+plugins, and helper libraries.
+
+This module is kept up-to-date together with the core developments.  Element
+writers should look at the elements in this module as a reference for
+their development.
+
+This module contains elements for, among others:
+
+  device plugins: x(v)imagesink, alsa, v4lsrc, cdparanoia
+  containers: ogg
+  codecs: vorbis, theora
+  text: textoverlay, subparse
+  sources: audiotestsrc, videotestsrc, gnomevfssrc, giosrc
+  network: tcp
+  typefind functions
+  audio processing: audioconvert, adder, audiorate, audioresample, volume
+  visualisation: libvisual
+  video processing: videoconvert
+  aggregate elements: uridecodebin, playbin, decodebin, encodebin
+  libraries: app, audio, cdda, fft, interfaces, netbuffer, pbutils, riff, rtp, rtsp, sdp, tag, video
+
+
+Other modules containing plug-ins are:
+
+
+gst-plugins-good
+contains a set of well-supported plug-ins under our preferred license
+gst-plugins-ugly
+contains a set of well-supported plug-ins, but might pose problems for
+    distributors
+gst-plugins-bad
+contains a set of less supported plug-ins that haven't passed the
+    rigorous quality testing we expect
+
+
+
+  
+
+Features of this release
+    
+      * Parallel installability with 0.10.x series
+      * Rename GstXOverlay -> GstVideoOverlay
+      * Reworked audio caps
+      * Support for multiple frames in buffers
+      * Add video colorimetry support
+There were no bugs fixed in this release
+    
+
+Download
+
+You can find source releases of gst-plugins-base in the download directory:
+http://gstreamer.freedesktop.org/src/gst-plugins-base/
+
+GStreamer Homepage
+
+More details can be found on the project's website:
+http://gstreamer.freedesktop.org/
+
+Support and Bugs
+
+We use GNOME's bugzilla for bug reports and feature requests:
+http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
+
+Developers
+
+GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned from there.
+Interested developers of the core library, plug-ins, and applications should
+subscribe to the gstreamer-devel list. If there is sufficient interest we
+will create more lists as necessary.
+
+        
+Applications
+  
+Contributors to this release
+    
+      * Age Bosma
+      * Alessandro Decina
+      * Alex Lancaster
+      * Benjamin Otte
+      * Christian Fredrik Kalager Schaller
+      * David Schleef
+      * Edward Hervey
+      * Erich Schubert
+      * Iago Toral
+      * Jan Schmidt
+      * Jason Kivlighn
+      * Josep Torra
+      * LoneStar
+      * Mark Nauwelaerts
+      * Monty Montgomery
+      * Nicolas Dufresne
+      * Olivier Crête
+      * Raimo Järvi
+      * René Stadler
+      * Robert Swain
+      * Sebastian Dröge
+      * Sergey Scobich
+      * Sergey Scobich)
+      * Sjoerd Simons
+      * Stefan Kost
+      * Stefan Sauer
+      * Sébastien Moutte
+      * Thiago Santos
+      * Thomas Vander Stichele
+      * Tim-Philipp Müller
+      * Tommi Myöhänen
+      * Vincent Penquerc'h
+      * Wim Taymans
+      * Youness Alaoui
+ 
\ No newline at end of file
diff --git a/REQUIREMENTS b/REQUIREMENTS
new file mode 100644
index 0000000..e620fc6
--- /dev/null
+++ b/REQUIREMENTS
@@ -0,0 +1,105 @@
+GStreamer uses a *large* array of tools and libraries, most of which are
+optional.  We have attempted to make sure that any code that depends on
+optional libraries doesn't get built unless you have those libraries.  If
+you find this not to be the case, please, let us know by filing a bug
+report at http://bugzilla.gnome.org/.
+
+
+Required tools:
+===============
+
+An extra set of tools is required if you wish to build GStreamer out of
+CVS (using autogen.sh):
+
+autoconf 2.52 or better 
+automake 1.5
+gettext 0.11.5
+libtool v1.4 or better
+pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
+
+Required libraries:
+===================
+
+The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
+the version that corresponds to this plugin release.
+
+Package:	GStreamer
+Version:	0.10.11.2
+Recommended:	0.10.latest
+URL:		http://gstreamer.freedesktop.org/
+DebianPackage:	libgstreamer0.10-dev
+Notes:		The required version is updated frequently, so the version
+	listed in this file is often wrong.  If you are compiling from CVS,
+	the required version is often the latest GStreamer CVS.
+
+
+Optional libraries:
+===================
+
+This file lists supporting libraries for which gst-plugins-base contains
+plugins, as well as their minimum version.  You can find the corresponding
+plugins in ext/(library)
+
+Package:	Orc
+Version:	>= 0.4.5
+Recommended:	0.4.latest
+URL:		http://code.entropywave.com/orc
+DebianPackage:	liborc-0.4-dev
+
+Package:	GTK+
+Version:	>= 2.0
+Recommended:	>= 2.2
+URL:		http://www.gtk.org/
+DebianPackage:	libgtk2.0-dev
+Notes:		Required by several examples
+
+Package:	Xlib
+Plugins:	xvimagesink, ximagesink, v4l (v4lsrc), ximagesrc
+DebianPackage:	libx11-dev libxv-dev libxt-dev
+
+Package:	Alsa
+Version:	>= 0.9.1
+Plugins:	alsa (alsasrc, alsasink)
+URL:		http://www.alsa-project.org/
+DebianPackage:	libasound2-dev
+
+Package:	CDParanoia
+Plugins:	cdparanoia
+URL:		http://xiph.org/paranoia/
+DebianPackage:	libcdparanoia0-dev
+
+Package:	GnomeVFS
+Version:	>= 2.0 (2.4?)
+Plugins:	gnomevfs (gnomevfssrc)
+URL:		http://www.gnome.org/
+DebianPackage:	libgnomevfs2-dev
+
+Package:	libvisual
+Version:	>= 0.2.0
+Recommended:	0.4.0
+Plugins:	libvisual
+URL:		http://localhost.nl/~synap/libvisual-wiki/index.php/Main_Page
+DebianPackage:	libvisual0.4-dev
+
+Package:	Ogg
+Version:	>= 1.0
+Plugins:	ogg (oggdemux, oggmux)
+URL:		http://xiph.org/ogg/
+DebianPackage:	libogg-dev
+
+Package:	Pango
+Plugins:	pango
+DebianPackage:	libpango1.0-dev
+URL:		http://www.pango.org/
+
+Package:	Theora
+Plugins:	theora (theoradec, theoraenc)
+URL:		http://www.theora.org/
+DebianPackage:	libtheora-dev
+
+Package:	Vorbis
+Plugins:	vorbis (vorbisdec, vorbisenc)
+DebianPackage:	libvorbis-dev
+URL:		http://www.vorbis.com/
+
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..7127794
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1112 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# (`yes' being less verbose, `no' or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules],
+[  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')])
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([common/m4/as-ac-expand.m4])
+m4_include([common/m4/as-auto-alt.m4])
+m4_include([common/m4/as-compiler-flag.m4])
+m4_include([common/m4/as-libtool.m4])
+m4_include([common/m4/as-python.m4])
+m4_include([common/m4/as-scrub-include.m4])
+m4_include([common/m4/as-version.m4])
+m4_include([common/m4/ax_create_stdint_h.m4])
+m4_include([common/m4/gst-arch.m4])
+m4_include([common/m4/gst-args.m4])
+m4_include([common/m4/gst-check.m4])
+m4_include([common/m4/gst-default.m4])
+m4_include([common/m4/gst-error.m4])
+m4_include([common/m4/gst-feature.m4])
+m4_include([common/m4/gst-function.m4])
+m4_include([common/m4/gst-gettext.m4])
+m4_include([common/m4/gst-glib2.m4])
+m4_include([common/m4/gst-package-release-datetime.m4])
+m4_include([common/m4/gst-plugin-docs.m4])
+m4_include([common/m4/gst-plugindir.m4])
+m4_include([common/m4/gst-x11.m4])
+m4_include([common/m4/gst.m4])
+m4_include([common/m4/gtk-doc.m4])
+m4_include([common/m4/introspection.m4])
+m4_include([common/m4/orc.m4])
+m4_include([common/m4/pkg.m4])
+m4_include([m4/freetype2.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/gst-alsa.m4])
+m4_include([m4/gst-fionread.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/lrint.m4])
+m4_include([m4/lrintf.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/ogg.m4])
+m4_include([m4/po.m4])
+m4_include([m4/progtest.m4])
+m4_include([m4/vorbis.m4])
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..820a017
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+DIE=0
+package=gst-plugins-base
+srcfile=gst/audiotestsrc/gstaudiotestsrc.c
+
+# Make sure we have common
+if test ! -f common/gst-autogen.sh;
+then
+  echo "+ Setting up common submodule"
+  git submodule init
+fi
+git submodule update
+
+# source helper functions
+if test ! -f common/gst-autogen.sh;
+then
+  echo There is something wrong with your source tree.
+  echo You are missing common/gst-autogen.sh
+  exit 1
+fi
+. common/gst-autogen.sh
+
+# install pre-commit hook for doing clean commits
+if test ! \( -x .git/hooks/pre-commit -a -L .git/hooks/pre-commit \);
+then
+    rm -f .git/hooks/pre-commit
+    ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit
+fi
+
+
+CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc'
+
+autogen_options $@
+
+printf "+ check for build tools"
+if test ! -z "$NOCHECK"; then echo " skipped"; else  echo; fi
+version_check "autoconf" "$AUTOCONF autoconf autoconf270 autoconf269 autoconf268 autoconf267 autoconf266 autoconf265 autoconf264 autoconf263 autoconf262 autoconf261 autoconf260" \
+              "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 60 || DIE=1
+version_check "automake" "$AUTOMAKE automake automake-1.11 automake-1.10" \
+              "ftp://ftp.gnu.org/pub/gnu/automake/" 1 10 || DIE=1
+version_check "autopoint" "autopoint" \
+              "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 17 || DIE=1
+version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \
+              "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1
+version_check "pkg-config" "" \
+              "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
+
+die_check $DIE
+
+aclocal_check || DIE=1
+autoheader_check || DIE=1
+
+die_check $DIE
+
+# if no arguments specified then this will be printed
+if test -z "$*"; then
+  echo "+ checking for autogen.sh options"
+  echo "  This autogen script will automatically run ./configure as:"
+  echo "  ./configure $CONFIGURE_DEF_OPT"
+  echo "  To pass any additional options, please specify them on the $0"
+  echo "  command line."
+fi
+
+toplevel_check $srcfile
+
+# autopoint
+#    older autopoint (< 0.12) has a tendency to complain about mkinstalldirs
+if test -x mkinstalldirs; then rm mkinstalldirs; fi
+#    first remove patch if necessary, then run autopoint, then reapply
+if test -f po/Makefile.in.in;
+then
+  patch -p0 -R --forward < common/gettext.patch
+fi
+tool_run "$autopoint --force"
+patch -p0 < common/gettext.patch
+
+tool_run "$libtoolize" "--copy --force"
+tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS"
+tool_run "$autoheader"
+
+# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode
+echo timestamp > stamp-h.in 2> /dev/null
+
+tool_run "$autoconf"
+tool_run "$automake" "-a -c"
+
+# if enable exists, add an -enable option for each of the lines in that file
+if test -f enable; then
+  for a in `cat enable`; do
+    CONFIGURE_FILE_OPT="--enable-$a"
+  done
+fi
+
+# if disable exists, add an -disable option for each of the lines in that file
+if test -f disable; then
+  for a in `cat disable`; do
+    CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a"
+  done
+fi
+
+test -n "$NOCONFIGURE" && {
+  echo "+ skipping configure stage for package $package, as requested."
+  echo "+ autogen.sh done."
+  exit 0
+}
+
+echo "+ running configure ... "
+test ! -z "$CONFIGURE_DEF_OPT" && echo "  ./configure default flags: $CONFIGURE_DEF_OPT"
+test ! -z "$CONFIGURE_EXT_OPT" && echo "  ./configure external flags: $CONFIGURE_EXT_OPT"
+test ! -z "$CONFIGURE_FILE_OPT" && echo "  ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
+echo
+
+./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
+        echo "  configure failed"
+        exit 1
+}
+
+echo "Now type 'make' to compile $package."
diff --git a/common/ChangeLog b/common/ChangeLog
new file mode 100644
index 0000000..92d0d25
--- /dev/null
+++ b/common/ChangeLog
@@ -0,0 +1,1712 @@
+2008-12-17  Edward Hervey  <bilboed@gmail.com>
+
+	* gst.supp:
+	And yet another variation of the GstAudioFilter leak.
+
+2008-12-15  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	Patch by: Roland Illig <roland dot illig at gmx dot de>
+
+	* m4/gst-parser.m4:
+	Fix AG_GST_BISON_CHECK to handle version numbers with more than
+	two components (i.e. 2.4.1). Fixes bug #564507.
+
+2008-12-14  Edward Hervey  <bilboed@gmail.com>
+
+	* gst.supp:
+	And yet another variant of the GstAudioFilter leak.
+
+2008-12-13  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* gst.supp:
+	Added variants of leaks of dynamic pad templates created in
+	GstAudioFilter.
+	Add conditional jump triggered by getaddrinfo (maybe glibc-2.9).
+
+2008-12-12  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* gst.supp:
+	Fix leak in GIO called by gnomevfs. Nothing we can do about this.
+
+2008-12-12  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* gst.supp:
+	Added another suppression for dynamic pad templates, in this case
+	GstAudioFilter.
+	Added suppression for PangoLanguage which can never be freed
+	according to the Pango API.
+
+2008-12-12  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* gst.supp:
+	A whole bunch of suppressions detected on latest gentoo ~amd64.
+	Make some existing suppressions more generic (for subtle dependecy
+	code changes).
+	Added suppressions for glibc-2.9.
+	Added suppressions for new variants of ALSA leaks.
+	Added suppressions for a series of leaks in plugins registrations due
+	to some pad templates' caps calculated at runtime.
+	Added suppressions for variants of some leaks in pango/fontconfig.
+	Added suppressions for leak in gstffmpegcsp.c (nothing we can do
+	about it, but will only exist once).
+
+2008-12-04  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	* m4/gst-plugin-docs.m4:
+	Remove the check if $have_gtk_doc equals yes as it's not defined
+	and $enable_gtk_doc should be good enough.
+	Also this restores the build of the plugin documentation.
+
+2008-12-01  Mark Nauwelaerts  <mark.nauwelaerts@collabora.co.uk>
+
+	* gst.supp:
+	Add suppression variant for Ubuntu Hardy x86/64bit.
+
+2008-12-01  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	  Simplily uninstall rule. Its closer to upstream and fixes #150331.
+
+2008-11-29  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	* m4/glib-gettext.m4:
+	Update glib-gettext.m4 from latest stable GLib release.
+
+2008-11-29  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	Patch by: Cygwin Ports maintainer
+	           <yselkowitz at users dot sourceforge dot net>
+
+	* gettext.patch:
+	Update the gettext patch for use with gettext 0.17 which is
+	required to build with libtool 2.2 because of conflicts.
+	First part of bug #556091.
+
+2008-11-29  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	* m4/gtk-doc.m4:
+	* m4/pkg.m4:
+	Update gtk-doc and pkg-config m4 macros from their latest releases.
+
+2008-11-20  Michael Smith <msmith@songbirdnest.com>
+
+	* m4/as-objc.m4:
+	  Fix objective C test macro when none of the compilers are found at all.
+
+2008-10-30  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc.mak:
+	  Also cp the entities here to all xinlcude based docs (workaround for
+	  not being able to set up a search path).
+
+2008-10-17  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gtk-doc.mak:
+	  Don't clobber the real registry cache file when
+	  building docs.
+
+2008-10-07  Jan Schmidt - Sun Microsystems <jan.schmidt@sun.com>
+
+	* m4/gst-error.m4:
+	  Also disable the bogus "loop not entered at top" warnings appearing on Sparc Forte builds.
+
+2008-10-06  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc.mak:
+	  Apply the same fix as below to gtk-doc.mak. Somehow did not end up in
+	  CVS.
+
+2008-09-05  David Schleef  <ds@schleef.org>
+
+	* gtk-doc-plugins.mak: Fix the check for gtkdoc-rebase: don't
+	  pass the 'which' error back to make.  This fix is more specific
+	  than what is in upstream.
+
+2008-09-05  David Schleef  <ds@schleef.org>
+
+	* gtk-doc.mak: Fix the check for gtkdoc-rebase: don't pass the
+	  'which' error back to make.  This fix is more specific than
+	  what is in upstream.
+
+2008-09-04  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	  Get closer to upstream makefiles. Don't install index.sgml twice. Call
+	  gtkdoc-rebase (if exists).
+
+2008-08-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	  Revert $(top_builddir) -> $(builddir) change of rev. 1.39 as there is
+	  no variable called builddir.
+
+2008-07-31  Mark Nauwelaerts  <mark.nauwelaerts@collabora.co.uk>
+
+	* gst.supp:
+	Add suppressions for Ubunty Hardy x86/64bit, similar to earlier
+	versions and 32bit variant.
+
+2008-07-31  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	* m4/gst-feature.m4:
+	Remove GST_DISABLE_(ENUMTYPES|INDEX|URI).
+
+2008-07-21  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+	* m4/gst-error.m4::
+	  When checking for GST_ERROR_CXXFLAGS, check each compiler flag
+	  individually, not all together.
+
+2008-07-20  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+	* m4/gst-parser.m4::
+	  Fix bison version number detection for older --version
+	  output format (as bison 1.28 on OSX 10.4 outputs).
+	  Fixes #543853.
+
+2008-07-12  Stefan Kost  <ensonic@users.sf.net>
+
+	* plugins.xsl:
+	  Split refsect2 also here to make "Element Pads" subtitle visible.
+
+2008-07-08  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
+	* m4/gst-error.m4:
+	Add compiler flags to warn if declarations after statements or
+	variable length arrays are used. These are C99/GCC extensions and
+	are not supported by some compilers we want to support.
+
+2008-07-02  Mark Nauwelaerts  <mark.nauwelaerts@collabora.co.uk>
+
+	* gtk-doc-plugins.mak:
+	Only clean doc maintainer stamps in maintainer-clean.  Fixes #539977.
+
+2008-06-20  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gstdoc-scangobj:
+	Always use format strings for printf-like functions, even if they just
+	print a string. Fixes bug #536981.
+
+2008-06-20  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	Include CFLAGS and LDFLAGS in GTKDOC_CFLAGS and GTKDOC_LDFLAGS,
+	otherwise the values passed to configure are ignored.
+	Fixes bug #536978.
+
+2008-06-05  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+	* m4/gst-error.m4:
+	  Add -fno-strict-aliasing when compiling with -Werror, to work around
+	  warnings caused by G_LOCK with recent GLib versions (2.16.x) (#316221).
+
+2008-06-05  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gtk-doc.mak:
+	Don't copy html/*.png files unless they don't already exist
+	in the destdir. Fixes distcheck failure caused by permissions
+	problems trying to copy a file into the destdir when it already
+	exists.
+
+2008-05-28  Stefan Kost  <ensonic@users.sf.net>
+
+	* plugins.xsl:
+	  The class was not shown in plugin docs. Fix typo in changelog below.
+
+2008-05-22  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gstdoc-scangobj:
+	Emit warnings if one of the GTypes we're expecting is 0
+	when scanning.
+
+2008-05-21  Felipe Contreras  <felipe.contreras@gmail.com>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	Fix installing png images when gtk-doc is disabled.
+
+2008-05-21  Felipe Contreras  <felipe.contreras@gmail.com>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	Fix make clean when gtk-doc is disabled and other cleanups.
+
+2008-05-17  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gtk-doc-plugins.mak:
+	Be more quiet when the files don't yet exist.
+
+2008-05-16  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gstdoc-scangobj:
+	Add a mechanism for adding 'implicitly created' GTypes into the
+	scan, allowing for documenting plugin-private base classes that
+	provide signals or properties for public elements.
+
+	* gtk-doc-plugins.mak:
+	Use $(builddir) instead of $(top_builddir) in a few places - there's
+	no need to hard code 'docs/plugins' as the only useable path.
+
+2008-05-14  Peter Kjellerstedt  <pkj@axis.com>
+
+	* m4/gst-feature.m4:
+	Report plug-ins without external dependencies that will not be built
+	even when the name of the plug-in is a substring of another plug-in,
+	e.g., goom vs. goom2k1.
+
+2008-05-14  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+	* gst.supp:
+	  Add suppression for glibc bug on gutsy/x86-64
+
+2008-05-12  Stefan Kost  <ensonic@users.sf.net>
+
+	* plugins.xsl:
+	  Improve the layout of the caps, but splitting them on ";".
+
+2008-05-09  Sebastian Dröge  <slomo@circular-chaos.org>
+	
+	Patch by: Brian Cameron <brian dot cameron at sun dot com>
+
+	* m4/gst-default.m4:
+	Don't set the default audio sink to the default visualizer.
+	Fixes bug #532295.
+
+2008-05-07  Tim-Philipp Müller  <tim.muller at collabora co uk>
+
+	* check.mak: (help):
+	  Document GST_CHECKS environment variable in checks 'make help'.
+
+2008-05-06  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Patch by: Marc-Andre Lureau <marcandre dot lureau at gmail dot com>
+
+	* scangobj-merge.py:
+	Don't depend on Twisted just for the OrderedDict but implement our
+	own ordered dictionary class. Fixes bug #531577.
+
+2008-04-23  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* gst.supp:
+	Re-arrange latest suppressions.
+	Add all known suppressions for ubuntu hardy. Same as for older
+	ubuntus, but with different codepaths.
+
+2008-04-22  Edward Hervey  <bilboed@gmail.com>
+
+	* gst.supp: Make tls leak suppression a bit more generic.
+
+2008-04-22  Edward Hervey  <bilboed@gmail.com>
+
+	* gst.supp: Fix ommission in latest commit.
+	Make tls leak suppression more generic in order to cover more
+	distributions (and hopefully also future distributions).
+
+2008-04-22  Edward Hervey  <bilboed@gmail.com>
+
+	* gst.supp: Add suppressions for Hardy.
+	They're just the newer versions of similar suppressions we had
+	for the previous versions of ubuntu.
+
+2008-04-15  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* Makefile.am:
+	* m4/Makefile.am:
+	Dist all files in common. Fixes bug #527984.
+
+2008-04-14  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-function.m4:
+	  Rename AC_CACHE_VAL cache-ids to contain '_cv_' in order to make
+	  autoconf-2.62 complain less.
+
+2008-04-13  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-args.m4:
+	* m4/gst-valgrind.m4:
+	  Bump valgrind requirement to 3.0 (which was released in August 2005).
+	  Fixes #489269. Also, check for version >=REQ and not >REQ.
+
+2008-04-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-default.m4:
+	  Add --with-default-{audiosink|audiosrc|videosink|videosrc|visualizer}
+	  configure switches (#519417).
+
+2008-04-03  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-args.m4:
+	  Add --disable-foo switch for dependency-less plugins (#525586).
+
+2008-04-01  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-parser.m4:
+	Unconditionally require flex 2.5.31 and bison 1.875.
+
+2008-03-23  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-arch.m4:
+	amd64/x86_64 allows unaligned memory access too.
+
+2008-03-21  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-dowhile.m4:
+	Add macro that checks if the compiler supports do {} while (0)
+	macros and define HAVE_DOWHILE_MACROS if it does. This is
+	needed by glib/gmacros.h to use something else than
+	if (1) else for G_STMT_START/END when compling C++, which
+	causes compiler warnings because of ambigious else with g++ 4.3.
+
+2008-03-21  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-plugin-docs.m4:
+	* mangle-tmpl.py:
+	Don't depend on PyXML and use only XML modules that are shipped
+	with python. Fixes bug #519635.
+
+2008-03-07  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* m4/gtk-doc.m4: (GTK_DOC_CHECK): 
+	The previous commit to this file by Stefan Kost mentionned checking for
+	SED, but NOT checking for gtkdoc-check (wth is that doing there ??).
+	Therefore, removing the check for gtkdoc-check
+
+2008-03-03  David Schleef  <ds@schleef.org>
+
+	* m4/ax_create_stdint_h.m4: Oops, checked in the wrong copy of
+	  this file.  (Update from upstream)
+
+2008-03-03  David Schleef  <ds@schleef.org>
+
+	* m4/ax_create_stdint_h.m4:  Update from upstream.  Fixes a bug
+	  compiling with MSVC.
+
+2008-03-03  Edward Hervey  <edward.hervey@collabora.co.uk>
+
+	* m4/pkg.m4:
+	Allow override of pkg-config results, as proposed by configure --help.
+	This is in fact just a backport from upstream pkg.m4.
+	Fixes #518892
+
+2008-03-03  Peter Kjellerstedt  <pkj@axis.com>
+
+	* ChangeLog:
+	Changelog surgery of my previous commit to add bugzilla reference.
+	* m4/gst-args.m4:
+	Add AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to make it easier
+	to include and exclude plug-ins without external references, i.e.,
+	plug-ins listed in GST_PLUGINS_SELECTED. (#498222)
+
+2008-03-03  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add another glibc suppression.
+
+2008-02-29  Peter Kjellerstedt  <pkj@axis.com>
+
+	* m4/gst-feature.m4:
+	Make the comment before defines generated via AG_GST_CHECK_FEATURE
+	look nicer. (#498222)
+
+2008-02-26  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* m4/Makefile.am:
+	* m4/as-gcc-inline-assembly.m4:
+	Add Dave Schleef's GCC inline assembly detection macro
+	for using in gst-plugins-good in the goom 2k4 plugin.
+
+2008-02-25  Andy Wingo  <wingo@pobox.com>
+
+	* gst-autogen.sh: Instead of only passing certain arguments to
+	configure, pass anything that we didn't handle. Much friendlier.
+	Fixes #34412.
+
+2008-02-23  Jan Schmidt  <Jan.Schmidt@sun.com>
+
+	* m4/gst-error.m4:
+	Store the detected compiler flags into ERROR_CFLAGS rather than
+	ERROR_CXXFLAGS, and use the macro that checks the C compiler, not
+	the C++ one.
+
+2008-02-23  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-error.m4:
+	  Reflow checks for additional warning flags so they're not
+	  nested, which fixes the result reporting in the configure
+	  output.
+
+2008-02-22  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/as-compiler-flag.m4:
+	  Add AS_CXX_COMPILER_FLAG
+
+	* m4/gst-error.m4:
+	  Add AG_GST_SET_ERROR_CXXFLAGS (Forte bits need testing)
+
+2008-02-22  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gtk-doc-plugins.mak:
+	  Add 'check-inspected-versions' target; this helps identify
+	  files that should have been removed or where the version
+	  number should (ideally) be updated before a release
+	  (which doesn't happen automatically if the releaser doesn't
+	  build that plugin locally). Not adding at a distcheck hook
+	  yet though, because it's not really that important and would
+	  probably also be a problem on buildbots.
+
+2008-02-22  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add even more glibc 2.7 suppressions.
+
+2008-02-22  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add another suppression for GLib caching some values after
+	the first call.
+
+2008-02-12  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Patch by:
+	  Tim Mooney <mooney at dogbert dot cc dot ndsu dot nodak dot edu>
+
+	* m4/gst-error.m4:
+	Use no%E_MACRO_REDEFINED on Solaris to prevent compiler warnings.
+	Fixes bug #515905.
+
+2008-02-11  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add a few more glibc 2.7 suppressions to make the avisubtitle unit
+	test valgrind clean. Fixes bug #515703.
+
+2008-02-08  Stefan Kost  <ensonic@users.sf.net>
+
+	* ChangeLog:
+	  Changelog surgery for last commit.
+
+2008-02-08  Stefan Kost  <ensonic@users.sf.net>
+
+	* m4/gtk-doc.m4:
+	  Conditionally check for SED. Also sync a bit with upstream macro.
+
+2008-02-08  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	  Use '$(SED)' instead of 'sed'. Don't use -i for in-place as its gnu
+	  only, move to a temp file instead.
+
+2008-02-06  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	 As our docs are versioned, we need to patch the index.sgml file to have
+	 correct paths there, unless we also want to fork gtk-doc's xsl (which
+	 we don't). This hopefully fixes xrefs between modules.
+
+2008-02-02  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-feature.m4:
+	Use printf instead of echo as "echo -e" isn't POSIX and doesn't work
+	with strict POSIX shells like tcsh or dash and also not every platform
+	has a /bin/echo that supports it.
+
+2008-01-24  Stefan Kost  <ensonic@users.sf.net>
+
+	* ChangeLog:
+	  ChangeLog surgery.
+
+	* gstdoc-scangobj:
+	  Sync the object scanner with gtk-doc fixes. Update args and hierarchy
+	  files.
+
+2008-01-20  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* check.mak:
+	* coverage/lcov.mak:
+	* gtk-doc-plugins.mak:
+	* release.mak:
+	Use $(MAKE) instead of make to fix the build if GNU make is called
+	something else on the system.
+	
+	* m4/as-docbook.m4:
+	Fix path for docbook.xsl if we have no /etc/xml/catalog and add a
+	docbook-xsl search path for FreeBSD.
+
+2008-01-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add a suppression for a glibc bug:
+	http://valgrind.org/docs/manual/faq.html#faq.exit_errors>
+
+2008-01-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add some more glibc 2.7 suppressions and make the GLib suppressions
+	for the home/tmp/etc directory caching a bit more generic.
+
+2008-01-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* gst.supp:
+	Add some glibc 2.7 supressions as found on Debian/unstable.
+
+2008-01-14  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* download-translations:
+	Apparently I have problems with leaving things commented out when
+	I edit shell scripts.
+
+2008-01-12  Jan Schmidt  <Jan.Schmidt@sun.com>
+
+	* download-translations:
+	Remove bash-isms
+
+2008-01-12  Jan Schmidt  <Jan.Schmidt@sun.com>
+
+	* check-exports:
+	Restore the cleanup rm of our tmp file which I didn't mean to leave 
+	commented out.
+
+2008-01-12  Jan Schmidt  <Jan.Schmidt@sun.com>
+
+	* check-exports:
+	  Fixes to make check-export work on both Solaris and Linux
+
+	* m4/gst-error.m4:
+	  Disable extra warning category (argument mismatch) as an error
+	  on Forte, as it prevents the libcheck fail_if macros from compiling.
+
+	* win32.mak:
+	  Substitute the GStreamer version so things will keep working in 0.11
+
+2008-01-11  Tim-Philipp Müller  <tim at centricular dot net>
+
+	Patch by: Peter Kjellerstedt <pkj axis com>
+
+	* m4/gst-glib2.m4:
+	* m4/gst-libxml2.m4:
+	  Improve/fix output from configure if either glib-2.0 or
+	  libxml2 are not installed (#498222).
+
+2008-01-09  Stefan Kost  <ensonic@users.sf.net>
+
+	* coverage/lcov.mak:
+	  Update coverage make-rules: use them conditionaly, use libtool mode
+	  and use lcov to cleanup.
+
+2007-12-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* glib-gen.mak:
+	  Also use #include "header" instead of #include <header> for the
+	  headers that were used to generate the source files for the same
+	  reason as below.
+
+	  Remove whitespace before #include.
+
+2007-12-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* glib-gen.mak:
+	  Use #include "header" instead of #include <header> for the generated
+	  enum C files as the file will always be in the same directory and
+	  some compilers seem to be a bit strict about that unless . is added
+	  to the include path.
+
+	  Include all headers that were used to generate the source files in
+	  the C file as they're used there.
+
+2007-12-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* win32.mak: (win32), (win32defs), (win32crlf):
+	  Make check for CR LF in Visual C++ 6.0 project files
+	  work, based on patch by David Schleef (#496722, #393626).
+	
+2007-12-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* Makefile.am:
+	  Don't forget to dist the new win32.mak.
+
+2007-12-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* win32.mak: (win32), (win32defs):
+	  Move common win32 Makefile foo into this new file.
+
+2007-12-15  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	  We should have never forked this that much :/.
+
+2007-12-13  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* check-exports:
+	  Fix build on the ppc64 build bot.
+
+2007-12-13  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* check-exports:
+	  Suppress more unintentional exports (too much hassle to rename them,
+	  since the win32 project files would need changing too).
+
+2007-12-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* Makefile.am:
+	  check-exports should be disted.
+
+2007-12-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* check-exports:
+	  Add quick'n'dirty script to check the exported symbols of a library
+	  against the symbols in the corresponding .def file (#493983). Based
+	  on script by Ole André Vadla Ravnås.
+
+2007-11-06  Jan Schmidt  <jan.schmidt@sun.com>
+
+	* gtk-doc-plugins.mak:
+	Fix distcheck by making sure the types files are treated like the
+	other gtkdoc-scangobj generated files.
+
+2007-09-21  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-args.m4:
+	  Let the AG_GST_ARG_ENABLE_EXPERIMENTAL macro default to disable
+	  building of experimental plugins. Nobody uses it yet and the
+	  --enable--experimental stuff from gst-plugins-good defaults to
+	  disable too.
+
+2007-09-06  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gtk-doc-plugins.mak:
+	  Just use the normal 'check' target and avoid a circular
+	  dependency.
+
+2007-09-06  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gtk-doc-plugins.mak:
+	  Add rule to error out if .hierarchy file contains tabs.
+
+2007-08-20  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* download-translations:
+	* po.mak:
+	  If there are new languages, they need to be added to po/LINGUAS.
+
+2007-08-20  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* download-translations:
+	* po.mak:
+	  Fix up 'download-po' a bit, so that we find new translations
+	  for languages that aren't in our po/LINGUAS file yet too.
+
+2007-07-16  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst.supp:
+	Add a suppression for GLib caching the tmp dir seen on an
+	Ubuntu Feisty system.
+
+2007-07-13  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* m4/gst-feature.m4:
+	If we want to use 'echo -e', call /bin/echo instead of the shell's
+	since -e is a bash extension, and our /bin/sh might not be being
+	provided by bash.
+
+2007-07-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* po.mak:
+	  Translation project has moved.  Also, no idea how this used to
+	  work given that we weren't downloading a .po file.
+
+2007-06-25  Stefan Kost  <ensonic@users.sf.net>
+
+	* gst-xmlinspect.py:
+	* plugins.xsl:
+	  Also extract element caps for plugin-docs. Fixes parts of #117692.
+
+2007-06-21  Tim-Philipp Müller  <tim at centricular dot net>
+
+	Patch by: Andreas Schwab
+
+	* m4/gst-feature.m4:
+	  Fix quoting (#449493).
+
+2007-06-10  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-parser.m4:
+	Only generate the parser if bison >= 1.875 _and_ flex >= 2.5.31 is
+	installed and use pre-generated sources otherwise. Fixes bug #444820.
+
+2007-05-11  Michael Smith <msmith@fluendo.com>
+
+	* gst.supp:
+	  Suppression variant for our good friend the TLS leak, this time for
+	  Ubuntu Feisty/x86.
+
+2007-05-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gtk-doc-plugins.mak:
+	  Fix make distcheck again; change some spaces to tabs in makefile.
+
+2007-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak (-module):
+	  Error out when the html build step gives warnings, so they get
+	  fixed properly.
+
+2007-04-23  Stefan Kost  <ensonic@users.sf.net>
+
+	* m4/gst-feature.m4:
+	  Add macro AG_GST_PARSE_SUBSYSTEM_DISABLES that checks the defines in
+	  the configuration header and AC_DEFINES the setings.
+
+2007-04-19  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	Patch by: Vincent Torri <vtorri at univ-evry dot fr>
+
+	* m4/gst-parser.m4:
+	Put the AC_MSG_RESULT output in brackets to get it properly written to
+	the terminal.
+
+2007-04-18  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-parser.m4:
+	Check for flex >= 2.5.31 and set GENERATE_PARSER if we have at least
+	that version. Otherwise use pre-generated parser sources as we can't
+	raise the required flex version. HAVE_MT_SAVE_FLEX is obsolete now
+	as we use a new enough flex version anyway. First part of #349180
+
+2007-04-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  Allow pre-setting the GST(PB)_TOOLS/PLUGINS_DIR variables to help
+	  builds against older GStreamer.
+
+2007-03-25  Sebastian Dröge  <slomo@circular-chaos.org>
+
+	* m4/gst-parser.m4:
+	Fix the flex version check. It ignored the micro version before.
+
+2007-03-09  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* check.mak:
+	Use the same timeout when generating valgrind suppressions as 
+	running the valgrind test.
+
+	* gst.supp:
+	Add some more suppressions and stuff.
+
+2007-03-08  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* check.mak:
+	Make sure GSlice is disabled when building suppressions too.
+
+	* gst.supp:
+	Add around *850* lines of suppressions for one-time initialisations
+	inside libasound and gconf/bonobo/ORBit. I feel so dirty.
+
+2007-03-07  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst.supp:
+	add a suppression for this GConf flup on the FC5 buildbot.
+
+2007-03-06  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst.supp:
+	Make the suppression a little more generic, to catch the FC5 
+	backtrace too.
+
+2007-03-06  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst.supp:
+	Add a suppression for libcdio 0.76. It leaks an internal struct
+	when the CD-ROM device is not accessible.
+
+2007-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-arch.m4:
+	  Move a line that was in the wrong macro
+
+2007-02-28  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst.m4:
+	  Add
+	* m4/gst-arch.m4:
+	* m4/gst-args.m4:
+	* m4/gst-check.m4:
+	* m4/gst-debuginfo.m4:
+	* m4/gst-default.m4:
+	* m4/gst-doc.m4:
+	* m4/gst-error.m4:
+	* m4/gst-feature.m4:
+	* m4/gst-function.m4:
+	* m4/gst-gettext.m4:
+	* m4/gst-glib2.m4:
+	* m4/gst-libxml2.m4:
+	* m4/gst-parser.m4:
+	* m4/gst-plugin-docs.m4:
+	* m4/gst-plugindir.m4:
+	* m4/gst-valgrind.m4:
+	* m4/gst-x11.m4:
+	  Convert all macros to use AG_GST style so we can properly warn
+	  when they're missing if configure.ac calls AG_GST_INIT
+	  Will require update in all GStreamer modules.
+
+2007-02-11  Stefan Kost  <ensonic@users.sf.net>
+
+	* m4/gst-args.m4:
+	  Remove 'enable' from configure switch description as this leads to 
+	  confusing lines like "disable enable builing ...".
+	* m4/gst-feature.m4:
+	  Fix comment to sound less horrible.
+
+2007-02-07  Tim-Philipp Müller  <tim at centricular dot net>
+
+	Patch by: Will Newton  <will.newton gmail com>
+
+	* m4/gst-check.m4:
+	  Use $PKG_CONFIG rather than pkg-config directly, the one in our path
+	  might not be the one we want, like when cross-compiling. Also, other
+	  macros such as PKG_CHECK_MODULES use $PKG_CONFIG, so we should
+	  probably too just for consistency. Fixes #405288.
+
+2007-01-08  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-parser.m4:
+	  Need to use double square brackets again so m4 doesn't remove them
+	  (fixes #378931).
+
+	* m4/gst-args.m4:
+	  Use double square brackets here as well, for the same reason.
+
+2007-01-05  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-parser.m4:
+	  Use 'sed' rather than 'tr' to strip trailing letters from version
+	  numbers, since 'tr' might not be available and we know sed is
+	  (#378931).
+
+2006-10-21  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* check.mak:
+	  Increase default timeout under valgrind, 60 is just too short and
+	  some tests take a bit longer these days and not everyone has a
+	  beefy machine.
+
+2006-09-29  Michael Smith  <msmith@fluendo.com>
+
+	* gst.supp:
+	  More suppressions for edgy. 
+
+2006-09-28  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* m4/gst-glib2.m4:
+	Use gmodule-no-export-2.0.pc instead of gmodule-2.0.pc - we neither
+	want nor need --export-dynamic (which ends up making us export a bunch
+	of unneeded symbols)
+
+2006-09-14  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gst.supp:
+	  Some suppressions for the more recent ld.so in ubuntu edgy.
+
+2006-08-23  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* gst.supp:
+	  Shorten function trail so the suppression works on
+	  my ubuntu dapper system with core cvs as well.
+
+2006-07-28  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst.supp:
+	Extra suppressions from my Ubuntu x86_64 machine
+
+2006-07-24  Tim-Philipp Müller  <tim at centricular dot net>
+
+	Patch by: Frederic Peters <fpeters at entrouvert com>
+
+	* m4/gst-parser.m4:
+	  Need to double square brackets in .m4 files. Should fix bison
+	  version detection with version numbers like 1.23a (#348354).
+
+2006-07-24  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* check.mak:
+	Valgrind fails to find tests written in tests/check/ directly (rather
+	than a subdir) - because valgrind gets run with a filename that
+	doesn't contain a relative path, it goes searching /usr/bin instead.
+	Run with ./.... to make things work either way.
+
+	* gtk-doc-plugins.mak:
+	Add $(top_builddir)/src as a place to look for plugins
+	when building too, since that's where gst-template keeps things
+
+2006-07-23  Stefan Kost  <ensonic@users.sf.net>
+
+	Patch by: Frederic Peters <fpeters@entrouvert.com>
+
+	* m4/gst-parser.m4:
+	  Fix bison detection (#348354)
+
+2006-07-21  Stefan Kost  <ensonic@users.sf.net>
+
+	* m4/gst-parser.m4:
+	  check for bison and flex
+
+2006-07-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-plugin-docs.m4:
+	  remove the configure argument for enabling plugin doc build;
+	  having gtk-doc enabled and pyxml present is enough of a trigger
+
+2006-07-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* coverage/lcov.mak:
+	  fix up rules to work with gst-python as well
+	  run "make lcov" to test and generate the reports
+	  run "make lcov-reset" to redo it after that
+
+2006-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* Makefile.am:
+	* check.mak:
+	  add an inspect target that inspects every element feature,
+	  so we can have that added for coverage
+	* coverage/lcov.mak:
+	  add support for lcov
+
+2006-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	  when building with gcov, reset CFLAGS and friends to O0
+
+2006-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	  Find the gcov that matches the gcc version
+	  Only allow gcov if we use gcc
+
+2006-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* Makefile.am:
+	* coverage/coverage-report-entry.pl:
+	* coverage/coverage-report.pl:
+	* coverage/coverage-report.xsl:
+	  copy coverage reporting files from dbus
+
+2006-07-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	  libtool strips gcov's -f flags, so libgcov does not get
+	  linked in.  Setting GCOV_LIBS with -lgcov fixes libtool's
+	  stripping
+	  also show what pkg-config-path we set
+
+2006-06-22  Tim-Philipp Müller  <tim at centricular dot net>
+
+	Patch by: Peter Kjellerstedt <pkj at axis com>
+
+	* m4/gst-feature.m4:
+	  Show list of plugins without external dependencies that
+	  will not be built as well (#344136).
+
+2006-06-15  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* m4/gst-plugin-docs.m4:
+	  add GST_PLUGIN_DOCS, which checks for everything needed
+	  to build the plugin docs (namely gtk-doc and pyxml); also
+	  adds a new --enable-plugin-docs configure switch; will
+	  set ENABLE_PLUGIN_DOCS conditional for use in Makefile.am
+	  files (see #344039).
+
+2006-06-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  add GST_PKG_CHECK_MODULES, which in the normal case of checking
+	  for a dependency lib for a plug-in only needs two arguments
+	  to do the right thing.
+	* m4/gst-feature.m4:
+	  clean up output a little of feature checking; also deal with
+	  non-plug-in feature checks
+	* m4/Makefile.am:
+	* m4/gst-gstreamer.m4:
+	  remove this file; it's a useless check
+
+2006-06-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-arch.m4:
+	  add PPC64 so we can have separate structure sizes for it
+
+2006-06-05  Edward Hervey  <edward@fluendo.com>
+
+	* gtk-doc.mak:
+	Check for the proper .devhelp2 file to remove.
+
+2006-05-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc.mak:
+	  allow a magic variable to suppress errors from docbuilding
+
+2006-05-30  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+	* gtk-doc.mak:
+	  error out if gtkdoc-mktmpl finds unused declarations
+
+2006-05-28  Edward Hervey  <edward@fluendo.com>
+
+	* gst.supp:
+	Reverting previous commit.  That's good to know, Edward, but why ?
+	
+2006-05-28  Edward Hervey  <edward@fluendo.com>
+
+	* gst.supp:
+	Added suppresion for memleak in g_option_context_parse on fc5-64
+
+2006-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  set GSTPB_PLUGINS_DIR just like GST_PLUGINS_DIR
+
+2006-05-18  Tim-Philipp Müller  <tim at centricular dot net>
+
+	* check.mak:
+	  Fix 'make help' in check directories, it should be
+	  'valgrind.gen-suppressions' not 'valgrind-gen-suppressions'
+	  (not changing target to match help string on purpose to keep
+	  scripts etc. functional).
+
+2006-05-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	Patch by: Peter Kjellerstedt
+
+	* m4/gst-arch.m4:
+	  add support for CRIS and CRISv32.
+
+2006-05-17  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* m4/gst-args.m4:
+	Fix the macros for command-line supplied package and origin names
+	so they don't end up being configure as "" (Fixes #341479)
+
+2006-05-14  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* gtk-doc.mak:
+	Add uninstall rule to remove .devhelp2 files.
+
+2006-05-09  Edward Hervey  <edward@fluendo.com>
+
+	* gst.supp: 
+	  Add suppression for GSlice version of
+	  g_type_init calloc leak
+
+2006-04-05  Michael Smith  <msmith@fluendo.com>
+
+	* gst.supp:
+	  Delete a bogus suppression for the registry code.
+	  Generalise a suppression for a glib bug (see #337404)
+
+2006-04-04  Michael Smith <msmith@fluendo.com>
+
+	* gst.supp:
+	  Add a leak suppression: the existing glibc-doesn't-free-TLS one
+	  wasn't triggering here.
+
+2006-04-04  Michael Smith <msmith@fluendo.com>
+
+	* gst.supp:
+	  Add some minimally-neccesary suppressions for my x86/dapper system.
+
+2006-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* plugins.xsl:
+	  Do not display an origin link if origin does not start with http
+	  See #323798
+
+2006-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	* m4/gst-feature.m4:
+	  add more macros
+	* m4/gst-x11.m4:
+	  X11-related checks
+
+2006-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-version.m4:
+	  newer version
+	* m4/gst-args.m4:
+	* m4/gst-doc.m4:
+	  update and add other macros to be shared across projects
+
+2006-03-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst.supp:
+	  add a suppression for g_parse_debug_string
+
+2006-03-23  Stefan Kost  <ensonic@users.sf.net>
+
+	* gstdoc-scangobj:
+	  sync fully with gtkdoc-0.15
+
+2006-03-23  Stefan Kost  <ensonic@users.sf.net>
+
+	* gstdoc-scangobj:
+	* gtk-doc.mak:
+	  sync a little with gtk-doc mainline
+
+2006-03-17  Wim Taymans  <wim@fluendo.com>
+
+	* gst.supp:
+	  add another clone suppression
+	  change all glibc suppressions to match 2.3.*
+
+2006-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/check.m4:
+	  fix test so it actually works when the normal check is used
+	  over debian's/ubuntu's
+
+2006-03-08  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* check.mak:
+	Set G_SLICE=always-malloc when valgrinding tests
+	(closes #333272)
+
+2006-02-21  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* m4/gst-glib2.m4:
+	Fix debug output when the GLib version prerequisite is not found
+
+2006-02-13  Andy Wingo  <wingo@pobox.com>
+
+	* m4/check.m4: Hack around Debian/Ubuntu's broken installation of
+	the PIC version of check as libcheck_pic.a. Should work with
+	cross-compilation too. Grr.
+
+2006-02-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-default.m4:
+	  switch to auto* sinks for defaults
+
+2006-02-02  Wim Taymans  <wim@fluendo.com>
+
+	* check.mak:
+	  add a .valgrind.gen-suppressions target to aid in generating
+	  suppressions
+	* gst.supp:
+	  add more repressions from my debian glibc as of today
+
+2006-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak:
+	  only add srcdir/gst if it exists
+
+2006-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* release.mak:
+	  don't complain about disted enums in win32
+
+2006-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  AC_SUBST CFLAGS and LIBS
+	  do a non-command because something is stripping out our AC_SUBST
+
+2006-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	* m4/gst-valgrind.m4:
+	  properly give a "no" result manually when providing a
+	  not-found action to fix configure output
+
+2006-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/pkg.m4:
+	  update with a more recent version
+
+2006-01-07  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gettext.patch:
+	  make Makefile depend on LINGUAS, so rebuilds work when adding
+	  a language
+
+2006-01-03  Michael Smith  <msmith@fluendo.com>
+
+	* check.mak:
+	  Clarify error message from valgrind test runs.
+
+2005-12-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-arch.m4:
+	  define HOST_CPU
+
+2005-11-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  add a valgrind-forever target for tests
+
+2005-11-28  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  when a "make test.check" run fails, make it rerun the test with	
+	  at least debug level 2
+
+2005-11-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/Makefile.am:
+	* m4/gst-check.m4:
+	  fix check for base plugins
+	* m4/gst-default.m4:
+	  add m4 to set default elements
+
+2005-10-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  check for tools correctly
+
+2005-10-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc.mak:
+	  only enable breaking on new API when make distcheck passes,
+	  not before
+
+2005-10-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  Resurrect Julien's dead body and wipe his mind clean
+
+2005-10-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-check.m4:
+	  Kill Julien
+
+2005-10-17  Julien MOUTTE  <julien@moutte.net>
+
+	* m4/gst-check.m4: I know Thomas will kill me but this 
+	ifelse statement seems incorrect as it is always setting
+	required to "yes". With this one it seems to work. Fixes
+	build of gst-plugins-base on my setup where gstreamer-check
+	is definitely not present/required.
+
+2005-10-18  Stefan Kost  <ensonic@users.sf.net>
+
+	* gtk-doc.mak:
+	  make build break on new api that has not been added to the
+	  sections file
+
+2005-10-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-glib2.m4:
+	* m4/Makefile.am:
+	* m4/gst-check.m4:
+	  add macro for easy checks for GStreamer libs
+
+2005-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-glib2.m4:
+	  update, warn in error cases
+
+2005-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-error.m4:
+	  add GST_SET_DEFAULT_LEVEL
+
+2005-10-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/Makefile.am:
+	* m4/gst-gettext.m4:
+	  remove the AM_GNU_GETTEXT* calls, they need to be in configure.ac
+	* m4/gst-glib2.m4:
+	  clean up and re-use in core soon
+	* m4/gst-plugindir.m4:
+	  macro to set up PLUGINDIR and plugindir define/var
+
+2005-10-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/Makefile.am:
+	* m4/gst-gettext.m4:
+	  add macro for setting up gettext
+
+2005-10-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-args.m4:
+	  add some .m4's for argument checking that can be shared among modules
+
+2005-10-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-libtool.m4:
+	  set _LT_LDFLAGS
+	* m4/gst-libxml2.m4:
+	  document
+
+2005-10-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-arch.m4:
+	  indent a little
+	  add AC_REQUIRE
+	* m4/gst-error.m4:
+	  clean up
+
+2005-10-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-autogen.sh:
+	  update version detection expression to catch stuff like
+	  Libtool (libtool15) 1.5.0
+
+2005-10-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst.supp:
+	  commit 6 new suppressions related to g_module_open; can these
+	  really not be folded into one ?
+
+2005-10-11  Edward Hervey  <edward@fluendo.com>
+
+	* gst.supp: 
+	made the <g_type_init calloc 2> suppression more generic
+	Added pthread memleak suppresions
+	Added nss_parse_* memleak suppresion (used by g_option_context_parse)
+
+2005-10-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  be more strict, more leak resolution
+	* gst.supp:
+	  clean up the g_type_init suppressions
+
+2005-10-07  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/Makefile.am:
+	* m4/gst-valgrind.m4:
+	  put the valgrind detection in an .m4
+
+2005-09-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  add some more targets, like "help", but also more intensive tests
+
+2005-09-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc.mak:
+	  make certain doc warnings fatal so people maintain docs again
+
+2005-09-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* Makefile.am:
+	* gtk-doc-plugins.mak:
+	* scangobj-merge.py:
+	  merge additions from the .signals.new and .args.new file in
+	  the original ones, only updating if necessary
+
+2005-09-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-xmlinspect.py:
+	* gstdoc-scangobj:
+	* gtk-doc-plugins.mak:
+	  fix properly for new API; make update in plugins dir now works
+
+2005-09-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-xmlinspect.py:
+	* gstdoc-scangobj:
+	  some fixes for new API
+	* gtk-doc-plugins.mak:
+	  set environment properly
+
+2005-09-17  David Schleef  <ds@schleef.org>
+
+	* gtk-doc-plugins.mak: Use new environment variables.
+
+2005-09-16  Michael Smith <msmith@fluendo.com>
+
+	* gstdoc-scangobj:
+	  Make the scanobj code reflect registry/plugin API changes
+
+2005-09-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak:
+	  split out scanobj step (which will be run by doc maintainer)
+	  from scan step (which will be run on every build)
+	  clean up some of the commands for make distcheck
+
+2005-09-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak:
+	* mangle-tmpl.py:
+	  first stab at reorganizing the plugins build so we can maintain
+	  element docs
+
+2005-09-14  David Schleef  <ds@schleef.org>
+
+	* as-libtool.mak: Remove
+	* m4/as-libtool.m4: The libtool bug that this worked around has
+	  been fixed.
+	* m4/as-version.m4: Don't define GST_RELEASE, since it causes
+	  config.h to be regenerated needlessly, and we don't use it.
+
+2005-09-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak:
+	  error out on inspect failure
+
+2005-09-14  Michael Smith <msmith@fluendo.com>
+
+	* glib-gen.mak:
+	  Don't call glib-mkenums with arguments that confuse/break MinGW,
+	  fixes 316155.
+
+2005-09-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gtk-doc-plugins.mak:
+	* gtk-doc.mak:
+	* m4/gst-doc.m4:
+	  separate out gtk-doc and docbook stuff
+	  have two separate --enable configure flags
+
+2005-08-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  add a .gdb target; rebuild registry for each target, otherwise
+	  a code rebuild always triggers a reg rebuild, and it's just too
+	  annoying
+	* gstdoc-scangobj:
+
+2005-08-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  separate out REGISTRY_ENVIRONMENT; we want to use that from
+	  our valgrind runs, but we also want TESTS_ENVIRONMENT to contain
+	  everything that the first test, gst-register, needs
+
+2005-08-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  parse output of valgrind and check for definitely lost, and error
+	  out; somehow I was led to believe valgrind returns non-zero for
+	  leaks, but I can't make it do that, so let's parse
+
+2005-08-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* check.mak:
+	  for some weird reason valgrind does not report actual memleaks
+	  if GST_PLUGIN_PATH is set to anything but the core gstreamer dir
+	  while valgrind is running.  Since the registry is going to go
+	  anyway, I don't want to waste any more time on this; I just run
+	  valgrind without GST_PLUGIN_PATH set.  Since the registry loading
+	  doesn't check if GST_PLUGIN_PATH got changed as a reason to rebuild
+	  the registry, that's actually fine.
+
+2005-08-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* mangle-tmpl.py:
+	  keep original Long_Description; only insert an include if it's
+	  not already the first line in there
+	* plugins.xsl:
+	  output more information for plugins, including an origin hyperlink
+
+2005-08-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-xmlinspect.py:
+	  a first stab at inspecting plugins and outputting an xml description
+	* gtk-doc-plugins.mak:
+	  a gtk-doc using snippet for plugins documentation
+	* plugins.xsl:
+	  a stylesheet to convert gst-xmlinspect.py output to docbook output
+	  for inclusion in the gtk-doc stuff
+
+2005-07-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+	* m4/gst-doc.m4:
+	  s/pdf/eps/ in test for whether we output EPS images (#309379).
+
+2005-07-18  Andy Wingo  <wingo@pobox.com>
+
+	* m4/as-libtool-tags.m4: Ooh, backported from libtool 1.6. Much
+	better. Thanks, Paolo Bonzini!
+	
+	* m4/Makefile.am (EXTRA_DIST): 
+	* m4/as-libtool-tags.m4: New file, tries to disable some CXX and
+	fortran checks.
+
+2005-07-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-error.m4:
+	  add macro to set ERROR_CFLAGS
+
+2005-06-30  Jan Schmidt  <thaytan@mad.scientist.com>
+
+	* gst-autogen.sh:
+	  Remove the old autoregen.sh if it exists before recreating it,
+	  to prevent confusing any shell process that might be reading it
+	  currently.
+
+2005-06-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gtk-doc.m4:
+	  added
+
+2005-06-03  Stefan Kost  <ensonic@users.sf.net>
+
+	* gst-autogen.sh: create autoregen.sh *before* shifting the options
+
+2005-05-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-autogen.sh: only update autoregen.sh on actual runs
+
+2005-03-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/check.m4: m4 from the check unit test suite
+
+2004-12-14  David Schleef  <ds@schleef.org>
+
+	* m4/gst-arch.m4: remove MMX stuff, since it doesn't work and
+	isn't needed anywhere
+
+2004-12-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* gst-autogen.sh:
+	  allow failure command to be run so we can clean upfrom autopoint
+
+2004-09-03  Zeeshan Ali Khattak <zeenix@gmail.com>
+	* m4/gst-feature.m4: Trying to correct the GST_CHECK_CONFIGPROG macro
+
+2004-07-21  Benjamin Otte  <otte@gnome.org>
+
+	* m4/.cvsignore: exciting updates for libtool m4 files
+
+2004-07-12  David Schleef  <ds@schleef.org>
+
+	* m4/as-objc.m4:  Add a macro to test for objective C
+
+2004-06-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-feature.m4:
+	  not all of them support --plugin-libs, so redirect stderr
+
+2004-06-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-scrub-include.m4:
+	  sync with upstream to 0.1.4.  Fixes #132440
+
+2004-06-07  Benjamin Otte  <otte@gnome.org>
+
+	* m4/gst-feature.m4:
+	  write a big marker into configure output when checking next plugin
+	  to allow easier parsing of why plugins are(n't) built.
+
+2004-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-compiler-flag.m4:
+	* m4/as-compiler.m4:
+	* m4/as-libtool.m4:
+	* m4/as-version.m4:
+	  sync with upstream, change sticky options to -ko
+
+2004-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-scrub-include.m4: synced with upstream
+
+2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* po.mak:
+          snippet for updating .po files
+
+2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* Makefile.am:
+	* m4/Makefile.am:
+          integrate these with the dist
+
+2004-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* release.mak: add a release target
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	patch by: Stephane Loeuillet
+
+	* m4/ax_create_stdint_h.m4:
+          use head -n instead of head - (#136500)
+
+2004-03-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-doc.m4: don't build PS without dvips binary
+
+2004-02-22   Julio M. Merino Vidal <jmmv@menta.net>
+
+	reviewed by: Benjamin Otte  <otte@gnome.org>
+
+	* m4/as-docbook.m4:
+	  don't use == operator with test(1) (fixes #135115)
+
+2004-02-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+ 
+	* common/m4/gst-arch.m4: x86_64 is x86 too (clue from Fedora 2 test)
+
+2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-feature.m4:
+          remove AM_CONDITIONAL for the subsystem since automake 1.6.x
+          requires that call be in configure.ac
+
+2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-libxml2.m4:
+          take required version as argument, and default to 2.4.9 if not
+          specified
+
+2004-02-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/gst-feature.m4:
+          rename and fix up GST_CHECK_DISABLE_SUBSYSTEM
+
+2004-02-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* common/m4/as-ac-expand.m4:
+	* common/m4/as-auto-alt.m4:
+	* common/m4/as-compiler-flag.m4:
+	* common/m4/as-compiler.m4:
+	* common/m4/as-docbook.m4:
+	* common/m4/as-libtool.m4:
+	* common/m4/as-scrub-include.m4:
+	* common/m4/as-version.m4:
+	* common/m4/glib-gettext.m4:
+	* common/m4/gst-arch.m4:
+	* common/m4/gst-debuginfo.m4:
+	* common/m4/gst-doc.m4:
+	* common/m4/gst-feature.m4:
+	* common/m4/gst-function.m4:
+	* common/m4/gst-glib2.m4:
+	* common/m4/gst-gstreamer.m4:
+	* common/m4/gst-libxml2.m4:
+	* common/m4/gst-makecontext.m4:
+	* common/m4/gst-mcsc.m4:
+	* common/m4/pkg.m4:
+          fix underquoted macros as reported by automake 1.8.x (#133800)
+
+2004-02-11  Johan Dahlin  <johan@gnome.org>
+
+	* gst-autogen.sh: Use A-Z instead of A-z in sed expression to
+	avoid a warning
+
+2004-02-05  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+	* m4/gst-doc.m4:
+          we use --output-format=xml and --ingnore-files options to
+          gtkdoc-mkdb, which got added between 0.9 and 1.0
+
+2004-02-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* m4/as-libtool.m4: remove AM_PROG_LIBTOOL so it can move back
+          to configure.ac to shut up libtoolize
+
+2004-02-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+        * glib-gen.mak: added; used to generate enums and marshal code
+
+2004-01-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+        * gettext.patch: added; used by autogen.sh to make sure
+          GETTEXT_PACKAGE is understood from po/Makefile.in.in -> po/Makefile.in
+
diff --git a/common/Makefile.am b/common/Makefile.am
new file mode 100644
index 0000000..25966fc
--- /dev/null
+++ b/common/Makefile.am
@@ -0,0 +1,22 @@
+SUBDIRS = m4
+
+EXTRA_DIST = \
+	ChangeLog \
+	gettext.patch \
+	glib-gen.mak gtk-doc.mak upload-doc.mak \
+	cruft.mak release.mak win32.mak po.mak \
+	parallel-subdirs.mak \
+	gst-autogen.sh \
+	check-exports \
+	c-to-xml.py mangle-tmpl.py scangobj-merge.py \
+	gtk-doc-plugins.mak \
+	plugins.xsl gstdoc-scangobj \
+	gst.supp check.mak \
+	coverage/lcov.mak \
+	coverage/coverage-report.pl \
+	coverage/coverage-report.xsl \
+	coverage/coverage-report-entry.pl \
+	download-translations \
+	extract-release-date-from-doap-file \
+	gst-indent \
+	orc.mak
diff --git a/common/Makefile.in b/common/Makefile.in
new file mode 100644
index 0000000..5f94177
--- /dev/null
+++ b/common/Makefile.in
@@ -0,0 +1,780 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = common
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = m4
+EXTRA_DIST = \
+	ChangeLog \
+	gettext.patch \
+	glib-gen.mak gtk-doc.mak upload-doc.mak \
+	cruft.mak release.mak win32.mak po.mak \
+	parallel-subdirs.mak \
+	gst-autogen.sh \
+	check-exports \
+	c-to-xml.py mangle-tmpl.py scangobj-merge.py \
+	gtk-doc-plugins.mak \
+	plugins.xsl gstdoc-scangobj \
+	gst.supp check.mak \
+	coverage/lcov.mak \
+	coverage/coverage-report.pl \
+	coverage/coverage-report.xsl \
+	coverage/coverage-report-entry.pl \
+	download-translations \
+	extract-release-date-from-doap-file \
+	gst-indent \
+	orc.mak
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu common/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/common/c-to-xml.py b/common/c-to-xml.py
new file mode 100644
index 0000000..397c112
--- /dev/null
+++ b/common/c-to-xml.py
@@ -0,0 +1,34 @@
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+"""
+Convert a C program to valid XML to be included in docbook
+"""
+
+import sys
+import os
+from xml.sax import saxutils
+
+def main():
+    if len(sys.argv) == 1:
+        sys.stderr.write("Please specify a source file to convert")
+        sys.exit(1)
+    source = sys.argv[1]
+
+    if not os.path.exists(source):
+        sys.stderr.write("%s does not exist.\n" % source)
+        sys.exit(1)
+
+    content = open(source, "r").read()
+
+    # print header
+    print '<?xml version="1.0"?>'
+    print '<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">'
+    print
+    print '<programlisting>'
+
+    # print content
+    print saxutils.escape(content).encode('UTF-8')
+    print '</programlisting>'
+
+main()
diff --git a/common/check-exports b/common/check-exports
new file mode 100755
index 0000000..c6d3eca
--- /dev/null
+++ b/common/check-exports
@@ -0,0 +1,72 @@
+#!/bin/sh
+# check-exports
+#
+# quick'n'dirty script that retrieves the list of exported symbols of a given
+# library using 'nm', and compares that against the list of symbols-to-export
+# of our win32/common/libfoo.def files.
+
+if [ $# -ne 2 ]; then
+	echo "Usage: $0 library.def library.so"
+	exit 1
+fi
+
+def_path="$1"
+def_name="$(basename $def_path)"
+lib_path="$2"
+
+lib_result="`mktemp /tmp/defname.XXXXXX`"
+
+LC_ALL=C
+export LC_ALL
+
+# On Solaris, add -p to get the correct output format
+NMARGS=
+if nm -V 2>&1 |grep Solaris > /dev/null; then
+  NMARGS=-p
+fi
+
+# FIXME 0.11: in 0.11, we should change the export filter to only export
+# _gst_foo, but not __gst_foo (we can't change this now, since we added
+# __gst_debug_min and __gst_debug_enabled at some point and need to keep
+# ABI compatibility).  So below we special-case some symbols that shouldn't
+# really be exported, either because we're too lazy to rename them to something
+# that's not exported (like the _gst_parse_* stuff) or because we had them in
+# public headers at some point although they shouldn't be and so we need to
+# keep them exported now (like _gst_debug_init,
+# __gst_element_factory_add_interface or
+# __gst_element_factory_add_static_pad_template).  We suppress them here to
+# make sure they're at least not exported in the windows msvc build (they
+# were never in the .def file, so they never got exported).
+# _end is special cased because for some reason it is reported as an exported
+# BSS symbol, unlike on linux where it's a local absolute symbol.
+nm $NMARGS $lib_path | awk \
+	'{
+		if ($3 !~ /^_gst_parse_yy/ && \
+		    $3 !~ /^_gst_[a-z]*_init/ && \
+		    $3 !~ /^_gst_parse_launch/ && \
+		    $3 !~ /^__gst_element_details_/ && \
+		    $3 !~ /^__gst_element_factory_add_/ && \
+		    $3 !~ /^gst_interfaces_marshal/ && \
+		    $3 ~ /^[_]*(gst_|Gst|GST_).*/)
+		{
+			if ($2 ~ /^[BSDG]$/)
+				print "\t" $3 " DATA"
+			else if ($2 == "T")
+				print "\t" $3
+		}
+	 }' | sort | awk '{ if (NR == 1) print "EXPORTS"; print $0; }' \
+	> $lib_result
+
+diffoutput=`diff -u $def_path $lib_result`
+diffresult=$?
+
+rm $lib_result
+
+if test "$diffresult" -eq 0; then
+  exit 0;
+else
+  echo -n "$diffoutput" >&2
+  echo >&2
+  exit 1;
+fi
+
diff --git a/common/check.mak b/common/check.mak
new file mode 100644
index 0000000..30487f1
--- /dev/null
+++ b/common/check.mak
@@ -0,0 +1,181 @@
+# keep target around, since it's referenced in the modules' Makefiles
+clean-local-check:
+	@echo
+
+if HAVE_VALGRIND
+# hangs spectacularly on some machines, so let's not do this by default yet
+check-valgrind:
+	$(MAKE) valgrind
+else
+check-valgrind:
+	@true
+endif
+
+LOOPS = 10
+
+# run any given test by running make test.check
+# if the test fails, run it again at at least debug level 2
+%.check: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$* ||							\
+	$(TESTS_ENVIRONMENT)					\
+	GST_DEBUG=$$GST_DEBUG,*:2				\
+	CK_DEFAULT_TIMEOUT=20					\
+	$*
+
+# run any given test in a loop
+%.torture: %
+	@for i in `seq 1 $(LOOPS)`; do				\
+	$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$*; done
+
+# run any given test in an infinite loop
+%.forever: %
+	@while true; do						\
+	$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$* || break; done
+
+# valgrind any given test by running make test.valgrind
+%.valgrind: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=360					\
+	G_SLICE=always-malloc					\
+	$(LIBTOOL) --mode=execute				\
+	$(VALGRIND_PATH) -q					\
+	$(foreach s,$(SUPPRESSIONS),--suppressions=$(s))	\
+	--tool=memcheck --leak-check=full --trace-children=yes	\
+	--leak-resolution=high --num-callers=20			\
+	./$* 2>&1 | tee valgrind.log
+	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
+	    rm valgrind.log;					\
+	    exit 1;						\
+	fi
+	@rm valgrind.log
+	
+# valgrind any given test and generate suppressions for it
+%.valgrind.gen-suppressions: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=360					\
+	G_SLICE=always-malloc					\
+	$(LIBTOOL) --mode=execute				\
+	$(VALGRIND_PATH) -q 					\
+	$(foreach s,$(SUPPRESSIONS),--suppressions=$(s))	\
+	--tool=memcheck --leak-check=full --trace-children=yes	\
+	--leak-resolution=high --num-callers=20			\
+	--gen-suppressions=all					\
+	./$* 2>&1 | tee suppressions.log
+	
+# valgrind any given test until failure by running make test.valgrind-forever
+%.valgrind-forever: %
+	@while $(MAKE) $*.valgrind; do				\
+	  true; done
+
+# gdb any given test by running make test.gdb
+%.gdb: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_FORK=no						\
+	$(LIBTOOL) --mode=execute				\
+	gdb $*
+
+# torture tests
+torture: $(TESTS)
+	-rm test-registry.xml
+	@echo "Torturing tests ..."
+	@for i in `seq 1 $(LOOPS)`; do				\
+		$(MAKE) check ||				\
+		(echo "Failure after $$i runs"; exit 1) ||	\
+		exit 1;						\
+	done
+	@banner="All $(LOOPS) loops passed";			\
+	dashes=`echo "$$banner" | sed s/./=/g`;			\
+	echo $$dashes; echo $$banner; echo $$dashes
+
+# forever tests
+forever: $(TESTS)
+	-rm test-registry.xml
+	@echo "Forever tests ..."
+	@while true; do						\
+		$(MAKE) check ||				\
+		(echo "Failure"; exit 1) ||			\
+		exit 1;						\
+	done
+
+# valgrind all tests
+valgrind: $(TESTS)
+	@echo "Valgrinding tests ..."
+	@failed=0;							\
+	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
+		$(MAKE) $$t.valgrind;					\
+		if test "$$?" -ne 0; then                               \
+			echo "Valgrind error for test $$t";		\
+			failed=`expr $$failed + 1`;			\
+			whicht="$$whicht $$t";				\
+		fi;							\
+	done;								\
+	if test "$$failed" -ne 0; then					\
+		echo "$$failed tests had leaks or errors under valgrind:";	\
+		echo "$$whicht";					\
+		false;							\
+	fi
+
+# valgrind all tests and generate suppressions
+valgrind.gen-suppressions: $(TESTS)
+	@echo "Valgrinding tests ..."
+	@failed=0;							\
+	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
+		$(MAKE) $$t.valgrind.gen-suppressions;			\
+		if test "$$?" -ne 0; then                               \
+			echo "Valgrind error for test $$t";		\
+			failed=`expr $$failed + 1`;			\
+			whicht="$$whicht $$t";				\
+		fi;							\
+	done;								\
+	if test "$$failed" -ne 0; then					\
+		echo "$$failed tests had leaks or errors under valgrind:";	\
+		echo "$$whicht";					\
+		false;							\
+	fi
+
+# inspect every plugin feature
+GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_MAJORMINOR)
+inspect:
+	@echo "Inspecting features ..."
+	@for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
+	  | cut -d: -f2`;						\
+	  do echo Inspecting $$e;					\
+	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
+
+help:
+	@echo
+	@echo "make check                         -- run all checks"
+	@echo "make torture                       -- run all checks $(LOOPS) times"
+	@echo "make (dir)/(test).check            -- run the given check once"
+	@echo "make (dir)/(test).forever          -- run the given check forever"
+	@echo "make (dir)/(test).torture          -- run the given check $(LOOPS) times"
+	@echo
+	@echo "make (dir)/(test).gdb              -- start up gdb for the given test"
+	@echo
+	@echo "make valgrind                      -- valgrind all tests"
+	@echo "make valgrind.gen-suppressions     -- generate suppressions for all tests"
+	@echo "                                      and save to suppressions.log"
+	@echo "make (dir)/(test).valgrind         -- valgrind the given test"
+	@echo "make (dir)/(test).valgrind-forever -- valgrind the given test forever"
+	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
+	@echo "                                               and save to suppressions.log"
+	@echo "make inspect                       -- inspect all plugin features"
+	@echo
+	@echo
+	@echo "Additionally, you can use the GST_CHECKS environment variable to"
+	@echo "specify which test(s) should be run. This is useful if you are"
+	@echo "debugging a failure in one particular test, or want to reproduce"
+	@echo "a race condition in a single test."
+	@echo
+	@echo "Examples:"
+	@echo
+	@echo "  GST_CHECKS=test_this,test_that  make element/foobar.check"
+	@echo "  GST_CHECKS=test_many_threads    make element/foobar.forever"
+	@echo
+
diff --git a/common/coverage/coverage-report-entry.pl b/common/coverage/coverage-report-entry.pl
new file mode 100644
index 0000000..51c506c
--- /dev/null
+++ b/common/coverage/coverage-report-entry.pl
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2006 Daniel Berrange
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+print <<EOF;
+<html>
+<head>
+<title>Coverage report for $ARGV[0]</title>
+<style type="text/css">
+          span.perfect {
+            background: rgb(0,255,0);
+          }
+          span.terrible {
+            background: rgb(255,0,0);
+          }
+</style>
+</head>
+<body>
+<h1>Coverage report for $ARGV[0]</h1>
+
+<pre>
+EOF
+
+
+while (<>) {
+    s/&/&amp;/g;
+    s/</&lt;/g;
+    s/>/&gt;/g;
+
+    if (/^\s*function (\S+) called (\d+) returned \d+% blocks executed \d+%/) {
+	my $class = $2 > 0 ? "perfect" : "terrible";
+	$_ = "<span class=\"$class\" id=\"" . $1 . "\">$_</span>";
+    } elsif (/^\s*branch\s+\d+\s+taken\s+(\d+)%\s+.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "<span class=\"$class\">$_</span>";
+    } elsif (/^\s*branch\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "<span class=\"$class\">$_</span>";
+    } elsif (/^\s*call\s+\d+\s+never executed.*$/) {
+	my $class = "terrible";
+	$_ = "<span class=\"$class\">$_</span>";
+    } elsif (/^\s*call\s+\d+\s+returned\s+(\d+)%.*$/) {
+	my $class = $1 > 0 ? "perfect" : "terrible";
+	$_ = "<span class=\"$class\">$_</span>";
+    }
+
+    print;
+}
+
+print <<EOF;
+</pre>
+</body>
+</html>
+EOF
diff --git a/common/coverage/coverage-report.pl b/common/coverage/coverage-report.pl
new file mode 100644
index 0000000..ed30f8d
--- /dev/null
+++ b/common/coverage/coverage-report.pl
@@ -0,0 +1,125 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2006 Daniel Berrange
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+use warnings;
+use strict;
+
+my %coverage = ( functions => {}, files => {} );
+
+my %filemap;
+
+my $type;
+my $name;
+
+my @functions;
+
+while (<>) {
+    if (/^Function '(.*)'\s*$/) {
+	$type = "function";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+	push @functions, $name;
+    } elsif (/^File '(.*?)'\s*$/) {
+	$type = "file";
+	$name = $1;
+	$coverage{$type}->{$name} = {};
+
+	foreach my $func (@functions) {
+	    $coverage{"function"}->{$func}->{file} = $name;
+	}
+	@functions = ();
+    } elsif (/^Lines executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{lines} = $2;
+	$coverage{$type}->{$name}->{linesCoverage} = $1;
+    } elsif (/^Branches executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{branches} = $2;
+	$coverage{$type}->{$name}->{branchesCoverage} = $1;
+    } elsif (/^Taken at least once:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{conds} = $2;
+	$coverage{$type}->{$name}->{condsCoverage} = $1;
+    } elsif (/^Calls executed:(.*)%\s*of\s*(\d+)\s*$/) {
+	$coverage{$type}->{$name}->{calls} = $2;
+	$coverage{$type}->{$name}->{callsCoverage} = $1;
+    } elsif (/^No branches$/) {
+	$coverage{$type}->{$name}->{branches} = 0;
+	$coverage{$type}->{$name}->{branchesCoverage} = "100.00";
+	$coverage{$type}->{$name}->{conds} = 0;
+	$coverage{$type}->{$name}->{condsCoverage} = "100.00";
+    } elsif (/^No calls$/) {
+	$coverage{$type}->{$name}->{calls} = 0;
+	$coverage{$type}->{$name}->{callsCoverage} = "100.00";
+    } elsif (/^\s*(.*):creating '(.*)'\s*$/) {
+	$filemap{$1} = $2;
+    } elsif (/^\s*$/) {
+	# nada
+    } else {
+	warn "Shit [$_]\n";
+    }
+}
+
+my %summary;
+foreach my $type ("function", "file") {
+    $summary{$type} = {};
+    foreach my $m ("lines", "branches", "conds", "calls") {
+	my $totalGot = 0;
+	my $totalMiss = 0;
+	my $count = 0;
+	foreach my $func (keys %{$coverage{function}}) {
+	    $count++;
+	    my $got = $coverage{function}->{$func}->{$m};
+	    $totalGot += $got;
+	    my $miss = $got * $coverage{function}->{$func}->{$m ."Coverage"} / 100;
+	    $totalMiss += $miss;
+	}
+	$summary{$type}->{$m} = sprintf("%d", $totalGot);
+	$summary{$type}->{$m . "Coverage"} = sprintf("%.2f", $totalMiss / $totalGot * 100);
+    }
+}
+
+
+
+print "<coverage>\n";
+
+foreach my $type ("function", "file") {
+    printf "<%ss>\n", $type;
+    foreach my $name (sort { $a cmp $b } keys %{$coverage{$type}}) {
+	my $rec = $coverage{$type}->{$name};
+	printf "  <entry name=\"%s\" details=\"%s\">\n", $name, ($type eq "file" ? $filemap{$name} : $filemap{$rec->{file}});
+	printf "    <lines count=\"%s\" coverage=\"%s\"/>\n", $rec->{lines}, $rec->{linesCoverage};
+	if (exists $rec->{branches}) {
+	    printf "    <branches count=\"%s\" coverage=\"%s\"/>\n", $rec->{branches}, $rec->{branchesCoverage};
+	}
+	if (exists $rec->{conds}) {
+	    printf "    <conditions count=\"%s\" coverage=\"%s\"/>\n", $rec->{conds}, $rec->{condsCoverage};
+	}
+	if (exists $rec->{calls}) {
+	    printf "    <calls count=\"%s\" coverage=\"%s\"/>\n", $rec->{calls}, $rec->{callsCoverage};
+	}
+	print  "  </entry>\n";
+    }
+
+    printf "  <summary>\n";
+    printf "    <lines count=\"%s\" coverage=\"%s\"/>\n", $summary{$type}->{lines}, $summary{$type}->{linesCoverage};
+    printf "    <branches count=\"%s\" coverage=\"%s\"/>\n", $summary{$type}->{branches}, $summary{$type}->{branchesCoverage};
+    printf "    <conditions count=\"%s\" coverage=\"%s\"/>\n", $summary{$type}->{conds}, $summary{$type}->{condsCoverage};
+    printf "    <calls count=\"%s\" coverage=\"%s\"/>\n", $summary{$type}->{calls}, $summary{$type}->{callsCoverage};
+    printf  "  </summary>\n";
+    printf "</%ss>\n", $type;
+}
+
+print "</coverage>\n";
diff --git a/common/coverage/coverage-report.xsl b/common/coverage/coverage-report.xsl
new file mode 100644
index 0000000..b19ebb6
--- /dev/null
+++ b/common/coverage/coverage-report.xsl
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+#
+# Copyright (C) 2006 Daniel Berrange
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                version="1.0">
+
+  <xsl:output method="html"/>
+
+  <xsl:template match="coverage">
+    <html>
+      <head>
+        <title>Coverage report</title>
+        <style type="text/css">
+          tbody tr.odd td.label {
+            border-top: 1px solid rgb(128,128,128);
+            border-bottom: 1px solid rgb(128,128,128);
+          }
+          tbody tr.odd td.label {
+            background: rgb(200,200,200);
+          }
+          
+          thead, tfoot {
+            background: rgb(60,60,60);
+            color: white;
+            font-weight: bold;
+          }
+
+          tr td.perfect {
+            background: rgb(0,255,0);
+            color: black;
+          }
+          tr td.excellant {
+            background: rgb(140,255,140);
+            color: black;
+          }
+          tr td.good {
+            background: rgb(160,255,0);
+            color: black;
+          }
+          tr td.poor {
+            background: rgb(255,160,0);
+            color: black;
+          }
+          tr td.bad {
+            background: rgb(255,140,140);
+            color: black;
+          }
+          tr td.terrible {
+            background: rgb(255,0,0);
+            color: black;
+          }
+        </style>
+      </head>
+      <body>
+        <h1>Coverage report</h1>
+        <xsl:apply-templates/>
+      </body>
+    </html>
+  </xsl:template>
+
+  <xsl:template match="functions">
+    <h2>Function coverage</h2>
+    <xsl:call-template name="content">
+      <xsl:with-param name="type" select="'function'"/>
+    </xsl:call-template>
+  </xsl:template>
+  
+
+  <xsl:template match="files">
+    <h2>File coverage</h2>
+    <xsl:call-template name="content">
+      <xsl:with-param name="type" select="'file'"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <xsl:template name="content">
+    <xsl:param name="type"/>
+    <table>
+      <thead>
+        <tr>
+          <th>Name</th>
+          <th>Lines</th>
+          <th>Branches</th>
+          <th>Conditions</th>
+          <th>Calls</th>
+        </tr>
+      </thead>
+      <tbody>
+        <xsl:for-each select="entry">
+          <xsl:call-template name="entry">
+            <xsl:with-param name="type" select="$type"/>
+            <xsl:with-param name="class">
+              <xsl:choose>
+                <xsl:when test="position() mod 2">
+                  <xsl:text>odd</xsl:text>
+                </xsl:when>
+                <xsl:otherwise>
+                  <xsl:text>even</xsl:text>
+                </xsl:otherwise>
+              </xsl:choose>
+            </xsl:with-param>
+          </xsl:call-template>
+        </xsl:for-each>
+      </tbody>
+      <tfoot>
+        <xsl:for-each select="summary">
+          <xsl:call-template name="entry">
+            <xsl:with-param name="type" select="'summary'"/>
+            <xsl:with-param name="class">
+              <xsl:choose>
+                <xsl:when test="position() mod 2">
+                  <xsl:text>odd</xsl:text>
+                </xsl:when>
+                <xsl:otherwise>
+                  <xsl:text>even</xsl:text>
+                </xsl:otherwise>
+              </xsl:choose>
+            </xsl:with-param>
+          </xsl:call-template>
+        </xsl:for-each>
+      </tfoot>
+    </table>
+  </xsl:template>
+  
+  <xsl:template name="entry">
+    <xsl:param name="type"/>
+    <xsl:param name="class"/>
+    <tr class="{$class}">
+      <xsl:choose>
+        <xsl:when test="$type = 'function'">
+          <td class="label"><a href="{@details}.html#{@name}"><xsl:value-of select="@name"/></a></td>
+        </xsl:when>
+        <xsl:when test="$type = 'file'">
+          <td class="label"><a href="{@details}.html"><xsl:value-of select="@name"/></a></td>
+        </xsl:when>
+        <xsl:otherwise>
+          <td class="label">Summary</td>
+        </xsl:otherwise>
+      </xsl:choose>
+
+      <xsl:if test="count(lines)">
+        <xsl:apply-templates select="lines"/>
+      </xsl:if>
+      <xsl:if test="not(count(lines))">
+        <xsl:call-template name="missing"/>
+      </xsl:if>
+
+      <xsl:if test="count(branches)">
+        <xsl:apply-templates select="branches"/>
+      </xsl:if>
+      <xsl:if test="not(count(branches))">
+        <xsl:call-template name="missing"/>
+      </xsl:if>
+
+      <xsl:if test="count(conditions)">
+        <xsl:apply-templates select="conditions"/>
+      </xsl:if>
+      <xsl:if test="not(count(conditions))">
+        <xsl:call-template name="missing"/>
+      </xsl:if>
+
+      <xsl:if test="count(calls)">
+        <xsl:apply-templates select="calls"/>
+      </xsl:if>
+      <xsl:if test="not(count(calls))">
+        <xsl:call-template name="missing"/>
+      </xsl:if>
+
+    </tr>
+  </xsl:template>
+  
+  <xsl:template match="lines">
+    <xsl:call-template name="row"/>
+  </xsl:template>
+
+  <xsl:template match="branches">
+    <xsl:call-template name="row"/>
+  </xsl:template>
+
+  <xsl:template match="conditions">
+    <xsl:call-template name="row"/>
+  </xsl:template>
+
+  <xsl:template match="calls">
+    <xsl:call-template name="row"/>
+  </xsl:template>
+
+  <xsl:template name="missing">
+    <td></td>
+  </xsl:template>
+
+  <xsl:template name="row">
+    <xsl:variable name="quality">
+      <xsl:choose>
+        <xsl:when test="@coverage = 100">
+          <xsl:text>perfect</xsl:text>
+        </xsl:when>
+        <xsl:when test="@coverage >= 80.0">
+          <xsl:text>excellant</xsl:text>
+        </xsl:when>
+        <xsl:when test="@coverage >= 60.0">
+          <xsl:text>good</xsl:text>
+        </xsl:when>
+        <xsl:when test="@coverage >= 40.0">
+          <xsl:text>poor</xsl:text>
+        </xsl:when>
+        <xsl:when test="@coverage >= 20.0">
+          <xsl:text>bad</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:text>terrible</xsl:text>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+    
+    <td class="{$quality}"><xsl:value-of select="@coverage"/>% of <xsl:value-of select="@count"/></td>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/common/coverage/lcov.mak b/common/coverage/lcov.mak
new file mode 100644
index 0000000..fc1f6b2
--- /dev/null
+++ b/common/coverage/lcov.mak
@@ -0,0 +1,43 @@
+## .PHONY so it always rebuilds it
+.PHONY: lcov-reset lcov lcov-run lcov-report lcov-upload
+
+# run lcov from scratch, always
+lcov-reset:
+	$(MAKE) lcov-run
+	$(MAKE) lcov-report
+
+# run lcov from scratch if the dir is not there
+lcov:
+	$(MAKE) lcov-reset
+
+if GST_GCOV_ENABLED
+# reset run coverage tests
+lcov-run:
+	@-rm -rf lcov
+	lcov --directory . --zerocounters
+	-if test -d tests/check; then $(MAKE) -C tests/check inspect; fi
+	-$(MAKE) check
+
+# generate report based on current coverage data
+lcov-report:
+	mkdir lcov
+	lcov --compat-libtool --directory . --capture --output-file lcov/lcov.info
+	lcov --list-full-path -l lcov/lcov.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d\| -f1 > lcov/remove
+	lcov --list-full-path -l lcov/lcov.info | grep "tests/check/" | cut -d\| -f1 >> lcov/remove
+	lcov --list-full-path -l lcov/lcov.info | grep "docs/plugins/" | cut -d\| -f1 >> lcov/remove
+	lcov -r lcov/lcov.info `cat lcov/remove` > lcov/lcov.cleaned.info
+	rm lcov/remove
+	mv lcov/lcov.cleaned.info lcov/lcov.info
+	genhtml -t "$(PACKAGE_STRING)" -o lcov --num-spaces 2 lcov/lcov.info
+
+lcov-upload: lcov
+	rsync -rvz -e ssh --delete lcov/* gstreamer.freedesktop.org:/srv/gstreamer.freedesktop.org/www/data/coverage/lcov/$(PACKAGE)
+
+else
+lcov-run:
+	echo "Need to reconfigure with --enable-gcov"
+
+lcov-report:
+	echo "Need to reconfigure with --enable-gcov"
+endif
+
diff --git a/common/cruft.mak b/common/cruft.mak
new file mode 100644
index 0000000..53eec24
--- /dev/null
+++ b/common/cruft.mak
@@ -0,0 +1,56 @@
+# checks for left-over files in the (usually uninstalled) tree, ie. for
+# stuff that best be deleted to avoid problems like having old plugin binaries
+# lying around.
+#
+# set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this
+
+check-cruft:
+	@cruft_files=""; cruft_dirs=""; \
+	for f in $(CRUFT_FILES); do \
+	  if test -e $$f; then \
+	    cruft_files="$$cruft_files $$f"; \
+	  fi \
+	done; \
+	for d in $(CRUFT_DIRS); do \
+	  if test -e $$d; then \
+	    cruft_dirs="$$cruft_dirs $$d"; \
+	  fi \
+	done; \
+	if test "x$$cruft_files$$cruft_dirs" != x; then \
+	  echo; \
+	  echo "**** CRUFT ALERT *****"; \
+	  echo; \
+	  echo "The following files and directories may not be needed any "; \
+	  echo "longer (usually because a plugin has been merged into     "; \
+	  echo "another plugin, moved to a different module, or been      "; \
+	  echo "renamed), and you probably want to clean them up if you   "; \
+	  echo "don't have local changes:                                 "; \
+	  echo; \
+	  for f in $$cruft_files; do echo "file $$f"; done; \
+	  echo; \
+	  for d in $$cruft_dirs; do echo "directory $$d"; done; \
+	  echo; \
+	  echo "'make clean-cruft' will remove these for you."; \
+	  echo; \
+	fi
+
+clean-cruft-dirs:
+	@for d in $(CRUFT_DIRS); do \
+	  if test -e $$d; then \
+	    rm -r "$$d" && echo "Removed directory $$d"; \
+	  fi \
+	done
+
+clean-cruft-files:
+	@for f in $(CRUFT_FILES); do \
+	  if test -e $$f; then \
+	    rm "$$f" && echo "Removed file $$f"; \
+	  fi \
+	done
+
+clean-cruft: clean-cruft-dirs clean-cruft-files
+
+# also might want to add this to your Makefile.am:
+#
+# all-local: check-cruft
+
diff --git a/common/download-translations b/common/download-translations
new file mode 100755
index 0000000..aef1d31
--- /dev/null
+++ b/common/download-translations
@@ -0,0 +1,152 @@
+#!/bin/sh
+# Shell script to download the latest translations for a given GStreamer
+# package from translationproject.org
+
+
+# DOMAINS based on http://translationproject.org/extra/matrix.html
+# We need to check all domains, not only po/LINGUAS, since there might be
+# new translations
+DOMAINS=\
+"af am ar az be bg pt_BR bs ca zh_CN cs cy da de el eo es et eu fa fi fr "\
+"ga en_GB gl gu he hi zh_HK hr hu id is it ja ko ku ky lg lt lv mk mn ms "\
+"mt nb ne nl nn or pa pl pt rm ro ru rw sk sl sq sr sv ta tq th tk "\
+"tr zh_TW uk ven vi wa xh zu"
+
+# for testing/debugging:
+#DOMAINS="es fr hu sv pl xx"
+
+# check for 'diff' program
+diff --version 2>/dev/null >/dev/null
+if [ ! $? ]; then
+  echo "==== You must have the 'diff' program installed for this script ===="
+  exit 1
+fi
+
+# check for 'wget' program
+wget --version 2>/dev/null >/dev/null
+if [ ! $? ]; then
+  echo "==== You must have the 'wget' program installed for this script ===="
+  exit 1
+fi
+
+# make sure we're in the top-level directory
+if [ ! -d ./po ]; then
+  echo "==== No ./po directory in the current working directory ===="
+  exit 1
+fi
+
+# make sure a package argument was passed to us
+if [ -z "$1" ]; then
+  echo "Usage: $0 PACKAGE, e.g. $0 gst-plugins-good"
+  exit 1
+fi
+
+if test "$1" != "gstreamer" -a \
+        "$1" != "gst-plugins-base" -a \
+        "$1" != "gst-plugins-good" -a \
+        "$1" != "gst-plugins-ugly" -a \
+        "$1" != "gst-plugins-bad"; then
+  echo "Unexpected package '$1' ?!"
+  exit 1
+fi
+
+PACKAGE="$1"
+
+DOMAINS_TO_ADD=""
+DOMAINS_UPDATED=""
+DOMAINS_NOT_IN_LINGUAS=""
+
+echo "Downloading latest translation files for package $PACKAGE ..."
+echo
+
+for d in $DOMAINS
+do
+  PACKAGE_PO_URL_BASE="http://translationproject.org/latest/$PACKAGE"
+  PO_URL="$PACKAGE_PO_URL_BASE/$d.po"
+  PO_FILENAME="$PACKAGE.$d.po"
+  if wget -q -nc -O $PO_FILENAME $PO_URL; then
+    # we want all .po files in UTF-8 format really, so convert if needed..
+    CHARSET=`grep Content-Type $PO_FILENAME | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'`
+    if test "x$CHARSET" != "xUTF-8" -a "x$CHARSET" != "xutf-8"; then
+      # note: things like the bugs address will be added back by make update-po
+      if msguniq $PO_FILENAME --no-location \
+                              --output-file=$PO_FILENAME.utf8 \
+                              --to-code=UTF-8; then
+        mv $PO_FILENAME.utf8 $PO_FILENAME
+      else
+        echo "**** $d: conversion from $CHARSET to UTF-8 failed ****"
+      fi
+    fi
+    if [ -f "po/$d.po" ]; then
+      # ./po/foo.po exists, so let's check if ours matches the latest from the
+      # translation project website
+      REVDATE_NEW=`grep PO-Revision-Date $PO_FILENAME`;
+      REVDATE_OLD=`grep PO-Revision-Date po/$d.po`;
+      CHARSET_OLD=`grep Content-Type po/$d.po | sed -e 's/.*charset=\(.*\)\\\\n.*/\1/'`
+      if test "x$REVDATE_NEW" = "x$REVDATE_OLD" -a "x$CHARSET_OLD" = "xUTF-8"; then
+        # note: source code line markers will be removed later by make upload-po
+        echo "$d.po: up-to-date"
+        rm -f $PO_FILENAME
+      else
+        mv $PO_FILENAME "po/$d.po"
+        if test "x$CHARSET_OLD" != "xUTF-8" -a "x$CHARSET_OLD" != "xutf-8"; then
+          echo "$d.po: update (and charset converted from $CHARSET_OLD to UTF-8)"
+        else
+          echo "$d.po: updated"
+        fi
+        DOMAINS_UPDATED="$DOMAINS_UPDATED $d"
+      fi
+      # make sure domain is listed in LINGUAS
+      if ! grep $d "po/LINGUAS" >/dev/null 2>/dev/null; then
+        DOMAINS_NOT_IN_LINGUAS="$DOMAINS_NOT_IN_LINGUAS $d"
+      fi
+    else
+      # ./po/foo.po doesn't exist, but foo.po exists on the translation project
+      # website, so it's probably a new translation
+      echo "$d.po: new language"
+      mv $PO_FILENAME "po/$d.po"
+      DOMAINS_UPDATED="$DOMAINS_UPDATED $d"
+      DOMAINS_TO_ADD="$DOMAINS_TO_ADD $d"
+    fi
+  else
+    rm -f $PO_FILENAME
+    echo "$d.po: failure (does probably not exist)"
+  fi
+done
+
+if [ -n "$DOMAINS_UPDATED" ]; then
+  echo "===================================================================="
+  echo
+  echo "Language domains updated    :$DOMAINS_UPDATED"
+  echo "Language domains to git add :$DOMAINS_TO_ADD"
+  echo
+  echo "Source: http://translationproject.org/latest/$PACKAGE/"
+  echo
+  if [ -n "$DOMAINS_TO_ADD" ]; then
+    CMD_STRING="git add"
+    for d in $DOMAINS_TO_ADD; do
+      CMD_STRING="$CMD_STRING po/$d.po"
+    done
+    echo "Please run"
+    echo
+    echo "  $CMD_STRING"
+    echo
+    echo "now and add the following domains to the po/LINGUAS file:"
+    echo
+    echo "  $DOMAINS_TO_ADD"
+    echo
+    echo
+  fi
+  echo "===================================================================="
+fi
+
+if [ -n "$DOMAINS_NOT_IN_LINGUAS" ]; then
+  echo
+  echo "Existing domains missing from the po/LINGUAS file:"
+  echo
+  echo "  $DOMAINS_NOT_IN_LINGUAS"
+  echo
+  echo
+fi
+
+
diff --git a/common/extract-release-date-from-doap-file b/common/extract-release-date-from-doap-file
new file mode 100755
index 0000000..f2bc418
--- /dev/null
+++ b/common/extract-release-date-from-doap-file
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Shell script to extract the date given a release version and a .doap file
+
+if test "x$1" = "x" -o "x$2" = "x" -o ! -s "$2"; then
+  echo "Usage: $0 RELEASE-VERSION-NUMBER DOAP-FILE" >&2;
+  exit 1
+fi
+
+if ! grep '<Project' "$2" >/dev/null ; then
+  echo "$2 does not look lika a .doap file" >&2;
+  exit 1
+fi
+
+if ! grep "$1" "$2" >/dev/null ; then
+  echo "$2 contains no reference to a version $1" >&2;
+  exit 1
+fi
+
+awk 'BEGIN {x=0}
+{
+if ($0~"<release>") {x=1; chunk=""}
+if (x==1) {
+  if ($0~"<revision>") { chunk = chunk $0 }
+  if ($0~"<created>") { chunk = chunk $0 }
+}
+if ($0~"</release>") {x=0; print chunk}
+}' < "$2" | \
+\
+grep '<revision>'"$1"'</revision>' | \
+\
+sed -e 's/^.*<created>//' -e 's/<\/created>.*$//'
+
diff --git a/common/gettext.patch b/common/gettext.patch
new file mode 100644
index 0000000..682b905
--- /dev/null
+++ b/common/gettext.patch
@@ -0,0 +1,12 @@
+--- po/Makefile.in.in.orig	2006-01-07 12:03:45.000000000 +0100
++++ po/Makefile.in.in	2006-01-07 12:04:23.000000000 +0100
+@@ -11,6 +11,9 @@
+ PACKAGE = @PACKAGE@
+ VERSION = @VERSION@
+ 
++# thomas: add GETTEXT_PACKAGE substitution as used in Makevars
++GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
++
+ SHELL = /bin/sh
+ @SET_MAKE@
+ 
diff --git a/common/glib-gen.mak b/common/glib-gen.mak
new file mode 100644
index 0000000..ef93a5f
--- /dev/null
+++ b/common/glib-gen.mak
@@ -0,0 +1,44 @@
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_enum_prefix=gst_color_balance
+
+enum_headers=$(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+
+# these are all the rules generating the relevant files
+%-marshal.h: %-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_enum_prefix)_marshal $^ > $*-marshal.h.tmp && \
+	mv $*-marshal.h.tmp $*-marshal.h
+
+%-marshal.c: %-marshal.list
+	$(AM_V_GEN)echo "#include \"$*-marshal.h\"" >> $*-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_enum_prefix)_marshal $^ >> $*-marshal.c.tmp && \
+	mv $*-marshal.c.tmp $*-marshal.c
+
+%-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+%-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$*-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
diff --git a/common/gst-autogen.sh b/common/gst-autogen.sh
new file mode 100644
index 0000000..f05e021
--- /dev/null
+++ b/common/gst-autogen.sh
@@ -0,0 +1,376 @@
+# a silly hack that generates autoregen.sh but it's handy
+# Remove the old autoregen.sh first to create a new file,
+# as the current one may be being read by the shell executing
+# this script.
+if [ -f "autoregen.sh" ]; then
+  rm autoregen.sh
+fi
+echo "#!/bin/sh" > autoregen.sh
+echo "./autogen.sh $@ \$@" >> autoregen.sh
+chmod +x autoregen.sh
+
+# helper functions for autogen.sh
+
+debug ()
+# print out a debug message if DEBUG is a defined variable
+{
+  if test ! -z "$DEBUG"
+  then
+    echo "DEBUG: $1"
+  fi
+}
+
+version_get ()
+# based on the command's version output, set variables
+# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix
+#
+# arg 1: command binary name
+# arg 2: (uppercased) variable name prefix
+{
+  COMMAND=$1
+  VARPREFIX=`echo $2 | tr .,- _`
+
+  # strip everything that's not a digit, then use cut to get the first field
+  pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1`
+  debug "pkg_version $pkg_version"
+  # remove any non-digit characters from the version numbers to permit numeric
+  # comparison
+  pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
+  pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
+  pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
+  test -z "$pkg_major" && pkg_major=0
+  test -z "$pkg_minor" && pkg_minor=0
+  test -z "$pkg_micro" && pkg_micro=0
+  debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
+  eval ${VARPREFIX}_MAJOR=$pkg_major
+  eval ${VARPREFIX}_MINOR=$pkg_minor
+  eval ${VARPREFIX}_MICRO=$pkg_micro
+  eval ${VARPREFIX}_VERSION=$pkg_version
+}
+
+version_compare ()
+# Checks whether the version of VARPREFIX is equal to or
+# newer than the requested version
+# arg1: VARPREFIX
+# arg2: MAJOR
+# arg3: MINOR
+# arg4: MICRO
+{
+  VARPREFIX=`echo $1 | tr .,- _`
+  MAJOR=$2
+  MINOR=$3
+  MICRO=$4
+
+  eval pkg_major=\$${VARPREFIX}_MAJOR;
+  eval pkg_minor=\$${VARPREFIX}_MINOR;
+  eval pkg_micro=\$${VARPREFIX}_MICRO;
+
+  #start checking the version
+  debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO"
+
+    # reset check
+    WRONG=
+
+    if [ ! "$pkg_major" -gt "$MAJOR" ]; then
+      debug "major: $pkg_major <= $MAJOR"
+      if [ "$pkg_major" -lt "$MAJOR" ]; then
+        debug "major: $pkg_major < $MAJOR"
+        WRONG=1
+      elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
+        debug "minor: $pkg_minor <= $MINOR"
+        if [ "$pkg_minor" -lt "$MINOR" ]; then
+          debug "minor: $pkg_minor < $MINOR"
+          WRONG=1
+        elif [ "$pkg_micro" -lt "$MICRO" ]; then
+          debug "micro: $pkg_micro < $MICRO"
+	  WRONG=1
+        fi
+      fi
+    fi
+    if test ! -z "$WRONG"; then
+      debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO"
+      return 1
+    fi
+    debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO"
+    return 0
+}
+
+
+version_check ()
+# check the version of a package
+# first argument : package name (executable)
+# second argument : optional path where to look for it instead
+# third argument : source download url
+# rest of arguments : major, minor, micro version
+# all consecutive ones : suggestions for binaries to use
+# (if not specified in second argument)
+{
+  PACKAGE=$1
+  PKG_PATH=$2
+  URL=$3
+  MAJOR=$4
+  MINOR=$5
+  MICRO=$6
+
+  # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
+  if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
+  debug "major $MAJOR minor $MINOR micro $MICRO"
+  VERSION=$MAJOR
+  if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
+  if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
+
+  debug "major $MAJOR minor $MINOR micro $MICRO"
+
+  for SUGGESTION in $PKG_PATH; do
+    COMMAND="$SUGGESTION"
+
+    # don't check if asked not to
+    test -z "$NOCHECK" && {
+      printf "  checking for $COMMAND >= $VERSION ... "
+    } || {
+      # we set a var with the same name as the package, but stripped of
+      # unwanted chars
+      VAR=`echo $PACKAGE | sed 's/-//g'`
+      debug "setting $VAR"
+      eval $VAR="$COMMAND"
+      return 0
+    }
+
+    which $COMMAND > /dev/null 2>&1
+    if test $? -eq 1;
+    then 
+      debug "$COMMAND not found"
+      continue
+    fi
+
+    VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]`
+    version_get $COMMAND $VARPREFIX
+
+    version_compare $VARPREFIX $MAJOR $MINOR $MICRO
+    if test $? -ne 0; then
+      echo "found $pkg_version, not ok !"
+      continue
+    else
+      echo "found $pkg_version, ok."
+      # we set a var with the same name as the package, but stripped of
+      # unwanted chars
+      VAR=`echo $PACKAGE | sed 's/-//g'`
+      debug "setting $VAR"
+      eval $VAR="$COMMAND"
+      return 0
+    fi
+  done
+
+  echo "$PACKAGE not found !"
+  echo "You must have $PACKAGE installed to compile $package."
+  echo "Download the appropriate package for your distribution,"
+  echo "or get the source tarball at $URL"
+  return 1;
+}
+
+aclocal_check ()
+{
+  # normally aclocal is part of automake
+  # so we expect it to be in the same place as automake
+  # so if a different automake is supplied, we need to adapt as well
+  # so how's about replacing automake with aclocal in the set var,
+  # and saving that in $aclocal ?
+  # note, this will fail if the actual automake isn't called automake*
+  # or if part of the path before it contains it
+  if [ -z "$automake" ]; then
+    echo "Error: no automake variable set !"
+    return 1
+  else
+    aclocal=`echo $automake | sed s/automake/aclocal/`
+    debug "aclocal: $aclocal"
+    if [ "$aclocal" != "aclocal" ];
+    then
+      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
+    fi
+    if [ ! -x `which $aclocal` ]; then
+      echo "Error: cannot execute $aclocal !"
+      return 1
+    fi
+  fi
+}
+
+autoheader_check ()
+{
+  # same here - autoheader is part of autoconf
+  # use the same voodoo
+  if [ -z "$autoconf" ]; then
+    echo "Error: no autoconf variable set !"
+    return 1
+  else
+    autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
+    debug "autoheader: $autoheader"
+    if [ "$autoheader" != "autoheader" ];
+    then
+      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
+    fi
+    if [ ! -x `which $autoheader` ]; then
+      echo "Error: cannot execute $autoheader !"
+      return 1
+    fi
+  fi
+
+}
+
+autoconf_2_52d_check ()
+{
+  # autoconf 2.52d has a weird issue involving a yes:no error
+  # so don't allow it's use
+  test -z "$NOCHECK" && {
+    ac_version=`$autoconf --version|head -n 1|sed 's/^[a-zA-Z\.\ ()]*//;s/ .*$//'`
+    if test "$ac_version" = "2.52d"; then
+      echo "autoconf 2.52d has an issue with our current build."
+      echo "We don't know who's to blame however.  So until we do, get a"
+      echo "regular version.  RPM's of a working version are on the gstreamer site."
+      exit 1
+    fi
+  }
+  return 0
+}
+libtool_2_2_gettext_check ()
+{
+  # libtool 2.2 needs autopoint 0.17 or higher
+  version_compare LIBTOOLIZE 2 2 0
+  if test $? -eq 0
+  then
+    version_compare AUTOPOINT 0 17 0
+    if test $? -ne 0
+    then
+      echo "libtool 2.2 requires autopoint 0.17 or higher"
+      return 1
+    fi
+  fi
+  return 0
+}
+
+
+die_check ()
+{
+  # call with $DIE
+  # if set to 1, we need to print something helpful then die
+  DIE=$1
+  if test "x$DIE" = "x1";
+  then
+    echo
+    echo "- Please get the right tools before proceeding."
+    echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
+    exit 1
+  fi
+}
+
+autogen_options ()
+{
+  if test "x$1" = "x"; then
+    return 0
+  fi
+
+  while test "x$1" != "x" ; do
+    optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    case "$1" in
+      --noconfigure)
+          NOCONFIGURE=defined
+	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --noconfigure"
+          echo "+ configure run disabled"
+          shift
+          ;;
+      --nocheck)
+	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --nocheck"
+          NOCHECK=defined
+          echo "+ autotools version check disabled"
+          shift
+          ;;
+      -d|--debug)
+          DEBUG=defined
+	  AUTOGEN_EXT_OPT="$AUTOGEN_EXT_OPT --debug"
+          echo "+ debug output enabled"
+          shift
+          ;;
+      -h|--help)
+          echo "autogen.sh (autogen options) -- (configure options)"
+          echo "autogen.sh help options: "
+          echo " --noconfigure            don't run the configure script"
+          echo " --nocheck                don't do version checks"
+          echo " --debug                  debug the autogen process"
+          echo
+          echo " --with-autoconf PATH     use autoconf in PATH"
+          echo " --with-automake PATH     use automake in PATH"
+          echo
+          echo "Any argument either not in the above list or after a '--' will be "
+          echo "passed to ./configure."
+	  exit 1
+          ;;
+      --with-automake=*)
+          AUTOMAKE=$optarg
+          echo "+ using alternate automake in $optarg"
+	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-automake=$AUTOMAKE"
+          shift
+          ;;
+      --with-autoconf=*)
+          AUTOCONF=$optarg
+          echo "+ using alternate autoconf in $optarg"
+	  CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoconf=$AUTOCONF"
+          shift
+          ;;
+      --) shift ; break ;;
+      *)
+          echo "+ passing argument $1 to configure"
+	  CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $1"
+          shift
+          ;;
+    esac
+  done
+
+  for arg do CONFIGURE_EXT_OPT="$CONFIGURE_EXT_OPT $arg"; done
+  if test ! -z "$CONFIGURE_EXT_OPT"
+  then
+    echo "+ options passed to configure: $CONFIGURE_EXT_OPT"
+  fi
+}
+
+toplevel_check ()
+{
+  srcfile=$1
+  test -f $srcfile || {
+        echo "You must run this script in the top-level $package directory"
+        exit 1
+  }
+}
+
+tool_run ()
+{
+  tool=$1
+  options=$2
+  run_if_fail=$3
+  echo "+ running $tool $options..."
+  $tool $options || {
+    echo
+    echo $tool failed
+    eval $run_if_fail
+    exit 1
+  }
+}
+
+install_git_hooks ()
+{
+  if test -d .git; then
+    # install pre-commit hook for doing clean commits
+    for hook in pre-commit; do
+      if test ! \( -x .git/hooks/$hook -a -L .git/hooks/$hook \); then
+        echo "+ Installing git $hook hook"
+        rm -f .git/hooks/$hook
+        ln -s ../../common/hooks/$hook.hook .git/hooks/$hook || {
+          # if we couldn't create a symbolic link, try doing a plain cp
+          if cp common/hooks/pre-commit.hook .git/hooks/pre-commit; then
+            chmod +x .git/hooks/pre-commit;
+          else
+            echo "********** Couldn't install git $hook hook **********";
+          fi
+        }
+      fi
+    done
+  fi
+}
diff --git a/common/gst-glib-gen.mak b/common/gst-glib-gen.mak
new file mode 100644
index 0000000..cc82bbd
--- /dev/null
+++ b/common/gst-glib-gen.mak
@@ -0,0 +1,45 @@
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+enum_headers=$(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
diff --git a/common/gst-indent b/common/gst-indent
new file mode 100755
index 0000000..732b2ba
--- /dev/null
+++ b/common/gst-indent
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# Check that the code follows a consistant code style
+#
+
+# Check for existence of indent, and error out if not present.
+# On some *bsd systems the binary seems to be called gnunindent,
+# so check for that first.
+
+version=`gnuindent --version 2>/dev/null`
+if test "x$version" = "x"; then
+  version=`indent --version 2>/dev/null`
+  if test "x$version" = "x"; then
+    echo "GStreamer git pre-commit hook:"
+    echo "Did not find GNU indent, please install it before continuing."
+    exit 1
+  fi
+  INDENT=indent
+else
+  INDENT=gnuindent
+fi
+
+case `$INDENT --version` in
+  GNU*)
+      ;;
+  default)
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
+      exit 1
+      ;;
+esac
+
+INDENT_PARAMETERS="--braces-on-if-line \
+	--case-brace-indentation0 \
+	--case-indentation2 \
+	--braces-after-struct-decl-line \
+	--line-length80 \
+	--no-tabs \
+	--cuddle-else \
+	--dont-line-up-parentheses \
+	--continuation-indentation4 \
+	--honour-newlines \
+	--tab-size8 \
+	--indent-level2 \
+	--leave-preprocessor-space"
+
+$INDENT ${INDENT_PARAMETERS} $@
+
diff --git a/common/gst.supp b/common/gst.supp
new file mode 100644
index 0000000..c10005f
--- /dev/null
+++ b/common/gst.supp
@@ -0,0 +1,3963 @@
+### this file contains suppressions for valgrind when running
+### the gstreamer unit tests
+### it might be useful for wider use as well
+
+### syscall suppressions
+
+{
+   <clone on Wim's Debian>
+   Memcheck:Param
+   clone(parent_tidptr)
+   fun:clone
+   fun:clone
+}
+
+{
+   <clone on Wim's Debian>
+   Memcheck:Param
+   clone(child_tidptr)
+   fun:clone
+   fun:clone
+}
+
+{
+   <clone on Wim's Debian>
+   Memcheck:Param
+   clone(tlsinfo)
+   fun:clone
+   fun:clone
+}
+
+### glibc suppressions
+
+{
+   <conditional jump on wim's debian 2/2/06>
+   Memcheck:Cond
+   obj:/lib/ld-2.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.*.so
+   fun:_dlerror_run
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_file
+}
+
+{
+   <Conditional jump>
+   Memcheck:Cond
+   fun:strlen
+   fun:fillin_rpath
+   fun:_dl_init_paths
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+   obj:/lib64/ld-2.*.so
+   obj:*
+   obj:*
+}
+
+{
+   <Conditional jump>
+   Memcheck:Cond
+   fun:_dl_relocate_object
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+}
+
+{
+   <insert a suppression name here>
+   Memcheck:Cond
+   fun:*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+# glibc does not deallocate thread-local storage
+
+{
+   <tls>
+   Memcheck:Leak
+   fun:calloc
+   fun:_dl_allocate_tls
+   fun:pthread_create@@*
+}
+
+# I get an extra stack entry on x86/dapper
+{
+   <tls>
+   Memcheck:Leak
+   fun:calloc
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_allocate_tls
+   fun:pthread_create@@*
+}
+
+
+{
+   <pthread strstr>
+   Memcheck:Cond
+   fun:strstr
+   fun:__pthread_initialize_minimal
+   obj:/lib/libpthread-*.so
+   obj:/lib/libpthread-*.so
+   fun:call_init
+   fun:_dl_init
+   obj:/lib/ld-*.so
+}
+
+# a thread-related free problem in glibc from Edgard
+{
+   __libc_freeres_rw_acess
+   Memcheck:Addr4
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:__libc_freeres
+}
+
+{
+   <a conditional jump on wim's debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+}
+
+# g_module_open-related problems
+{
+   <started showing up on fc4-quick>
+   Memcheck:Addr2
+   fun:memcpy
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+   fun:gst_plugin_load_file
+   fun:gst_registry_scan_path_level
+   fun:gst_registry_scan_path_level
+   fun:gst_registry_scan_path_level
+   fun:init_post
+   fun:g_option_context_parse
+   fun:gst_init_check
+   fun:gst_init
+   fun:gst_check_init
+   fun:main
+}
+
+{
+   <started showing up on fc4-quick>
+   Memcheck:Addr4
+   fun:memcpy
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+   fun:gst_plugin_load_file
+   fun:gst_registry_scan_path_level
+   fun:gst_registry_scan_path_level
+   fun:gst_registry_scan_path_level
+   fun:init_post
+   fun:g_option_context_parse
+   fun:gst_init_check
+   fun:gst_init
+   fun:gst_check_init
+   fun:main
+}
+
+{
+   <g_module_open on wim's debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:do_sym
+   fun:_dl_sym
+   fun:dlsym_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlsym
+   fun:g_module_symbol
+   fun:g_module_open
+   fun:gst_plugin_load_file
+}
+
+{
+   <g_module_open on wim's debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+   fun:gst_plugin_load_file
+}
+{
+   <g_module_open on wim's debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+   fun:gst_plugin_load_file
+   fun:gst_plugin_load_by_name
+   fun:gst_plugin_feature_load
+}
+
+{
+   <leak on wim's debian in g_module_open>
+   Memcheck:Leak
+   fun:malloc
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+   fun:gst_plugin_load_file
+   fun:gst_plugin_load_by_name
+}
+
+{
+   <invalid read on wim's debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+}
+
+{
+   <invalid read on wim's debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+}
+
+{
+   <invalid read on wim's debian - 2006-02-02>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <invalid read on wim's debian - 2006-02-02>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:dl_open_worker
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   fun:dlopen_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <invalid read on wim's debian - 2006-02-02>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:do_sym
+   fun:_dl_sym
+   fun:dlsym_doit
+   obj:/lib/ld-2.3.*.so
+   fun:_dlerror_run
+   fun:dlsym
+   fun:g_module_symbol
+   fun:g_module_open
+}
+
+{
+   <futex on Andy's 64-bit ubuntu>
+   Memcheck:Param
+   futex(uaddr2)
+   fun:pthread_once
+   obj:/lib/libc-2.3.*.so
+   obj:/lib/libc-2.3.*.so
+   fun:mbsnrtowcs
+   fun:vfprintf
+   fun:vsprintf
+   fun:sprintf
+   obj:/lib/libc-2.3.*.so
+   fun:tmpfile
+   fun:setup_pipe
+   fun:setup_messaging_with_key
+   fun:setup_messaging
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   fun:_dl_sym
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlsym
+   fun:g_module_symbol
+   fun:g_module_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   fun:iconv_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   obj:/lib/i686/cmov/libc-2.7.so
+   fun:iconv_open
+}
+
+{
+   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   fun:iconv_open
+}
+
+{
+   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libc-2.7.so
+   fun:iconv_open
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Cond
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+{
+   <suppression for glibc 2.7 on debian>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/i686/cmov/libdl-2.7.so
+   fun:dlopen
+}
+
+# suppression for a glibc bug:
+# http://valgrind.org/docs/manual/faq.html#faq.exit_errors>
+{
+   <Workaround for a glibc bug>
+   Memcheck:Free
+   fun:free
+   obj:*libc-*.so
+   fun:__libc_freeres
+   fun:*
+   fun:_Exit
+}
+
+# same as above, just so it works for tpm on gutsy/x86-64
+{
+   <workaround glibc bug on gutsy x86-64>
+   Memcheck:Free
+   fun:free
+   fun:free_mem
+   fun:__libc_freeres
+}
+
+# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4
+# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr1
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr2
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr4
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr1
+   fun:memcpy
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr2
+   fun:memcpy
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+{
+   <Invalid read of size 1, 2, 4 on thomas's FC4>
+   Memcheck:Addr4
+   fun:memcpy
+   fun:_dl_signal_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+   fun:g_module_open
+}
+
+{
+   <Addr8 on Andy's AMD64 ubuntu in dl_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/libc-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   obj:/lib/libdl-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+}
+
+{
+   <Conditional jump on Andy's AMD64 ubuntu>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/libc-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   fun:_dl_open
+   obj:/lib/libdl-2.3.*.so
+   obj:/lib/ld-2.3.*.so
+   obj:/lib/libdl-2.3.*.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_file
+   fun:gst_plugin_load_by_name
+   fun:gst_plugin_feature_load
+}
+
+{
+   <Mike's x86 dapper>
+   Memcheck:Addr4
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libc-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   fun:_dl_open
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   fun:dlopen
+}
+
+{
+   <Mike's x86 dapper>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libc-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   fun:_dl_open
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   fun:dlopen
+}
+
+{
+   <Another dapper one>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libc-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   fun:_dl_open
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+   fun:dlopen
+}
+
+### glib suppressions
+{
+   <g_parse_debug_string>
+   Memcheck:Cond
+   fun:g_parse_debug_string
+   obj:/usr/lib*/libglib-2.0.so.*
+   fun:g_slice_alloc
+   fun:g_slice_alloc0
+}
+
+{
+   <g_type_init leaks>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:g_type_init*
+   fun:init_pre
+}
+
+{
+   <g_type_register_fundamental leaks>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:g_type_register_fundamental
+}
+
+{
+   <glib 2.21 static type data>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:type_node_any_new_W
+}
+
+{
+   <glib 2.21 static type data>
+   Memcheck:Leak
+   fun:realloc
+   fun:g_realloc
+   fun:type_node_any_new_W
+}
+
+{
+   <glib 2.21 static type data>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:g_type_class_ref
+}
+
+{
+   <glib 2.21 static type data>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:type_add_flags_W
+}
+
+{
+   <glib 2.21 static type data>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:type_add_flags_W
+}
+
+#pthread memleaks
+
+{
+   Thread creation leak
+   Memcheck:Leak
+   fun:calloc
+   fun:allocate_dtv
+   fun:_dl_allocate*
+   fun:_dl_allocate*
+   fun:__pthread_initialize_minimal
+}
+
+{
+   Thread management leak
+   Memcheck:Leak
+   fun:calloc
+   fun:allocate_dtv
+   fun:_dl_allocate*
+   fun:_dl_allocate*
+   fun:__pthread_*
+}
+
+{
+   Thread management leak 2
+   Memcheck:Leak
+   fun:memalign
+   fun:_dl_allocate*
+   fun:_dl_allocate*
+   fun:__pthread_*
+}
+
+{
+   pthread_create Syscall param write(buf) points to uninitialised byte(s)
+   Memcheck:Param
+   write(buf)
+   fun:pthread_create@@GLIBC_2.2.5
+   fun:g_thread_create*
+
+}
+
+# nss_parse_* memleak (used by g_option_context_parse)
+{
+   nss_parse_* memleak
+   Memcheck:Leak
+   fun:malloc
+   fun:nss_parse_service_list
+   fun:__nss_database_lookup
+}
+
+# liboil suppressions
+{
+   <liboil cpu_fault_check_try>
+   Memcheck:Value8
+   obj:/usr/lib/liboil-0.3.so.0.1.0
+   obj:/usr/lib/liboil-0.3.so.0.1.0
+   obj:/usr/lib/liboil-0.3.so.0.1.0
+   fun:oil_cpu_fault_check_try
+   fun:oil_test_check_impl
+   fun:oil_class_optimize
+   fun:oil_optimize_all
+   fun:oil_init
+}
+
+{
+   <annoying read error inside dlopen stuff on Ubuntu Dapper x86_64>
+   Memcheck:Addr8
+   obj:/lib/ld-2.3.6.so
+}
+
+{
+   <Ubuntu Dapper x86_64>
+   Memcheck:Param
+   futex(uaddr2)
+   fun:pthread_once
+   obj:/lib/libc-2.3.6.so
+   obj:/lib/libc-2.3.6.so
+   fun:setlocale
+   fun:init_pre
+   fun:g_option_context_parse
+   fun:gst_init_check
+   fun:gst_init
+   fun:gst_check_init
+   fun:main
+}
+
+{
+   <Ubuntu Dapper x86_64 dlopen stuff again>
+   Memcheck:Cond
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   fun:_dl_open
+   obj:/lib/libdl-2.3.6.so
+   obj:/lib/ld-2.3.6.so
+   obj:/lib/libdl-2.3.6.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_file
+}
+# this exists in a bunch of different variations, hence the short tail/trace
+{
+   <dlopen invalid read of size 4 suppression on tpm's Ubuntu edgy/x86>
+   Memcheck:Addr4
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+}
+{
+   <and the same for 64bit systems>
+   Memcheck:Addr8
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+}
+
+# More edgy suppressions (Mike)
+{
+   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+   Memcheck:Cond
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   fun:dlopen_doit
+   obj:/lib/ld-2.4.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+}
+
+{
+   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+   Memcheck:Cond
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   fun:dlopen_doit
+   obj:/lib/ld-2.4.so
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.1
+}
+
+{
+   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+   Memcheck:Cond
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   fun:do_sym
+   fun:_dl_sym
+}
+
+# This one's overly general, but there's zero other information in the stack
+# trace - just these five lines!
+{
+   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+   Memcheck:Cond
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+   obj:/lib/ld-2.4.so
+}
+
+{
+   <tls leaks on Edgy/x86>
+   Memcheck:Leak
+   fun:calloc
+   obj:/lib/ld-2.4.so
+   fun:_dl_allocate_tls
+   fun:pthread_create@@GLIBC_2.1
+}
+
+# TLS leaks for feisty/x86
+{
+   <tls leaks on Feisty/x86>
+   Memcheck:Leak
+   fun:calloc
+   fun:allocate_dtv
+   fun:_dl_allocate_tls
+   fun:pthread_create@@GLIBC_2.1
+}
+
+{
+   <libcdio 0.76 leak>
+   Memcheck:Leak
+   fun:calloc
+   obj:/usr/lib/libcdio.so.6.0.1
+   fun:cdio_open_am_linux
+   obj:/usr/lib/libcdio.so.6.0.1
+   fun:cdio_open_am
+}
+
+{
+   <Addr8 on Jan's AMD64 ubuntu Feisty in dl_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.5.so
+}
+
+{
+   <First of many Alsa errors>
+   Memcheck:Cond
+   fun:snd_pcm_direct_shm_create_or_connect
+   fun:snd_pcm_dsnoop_open
+   fun:_snd_pcm_dsnoop_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_plug_open
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_asym_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+}
+
+{
+   <alsa error>
+   Memcheck:Cond
+   fun:snd*_pcm_hw_param_set_near
+}
+
+{
+   <alsa error>
+   Memcheck:Cond
+   ...
+   fun:snd*_pcm_hw_param_set_near
+}
+
+{
+   <alsa error>
+   Memcheck:Cond
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_close
+   obj:/*lib/libasound.so.2.0.0
+}
+{
+   <alsa error>
+   Memcheck:Cond
+   fun:snd_pcm_direct_shm_create_or_connect
+   fun:snd_pcm_dmix_open
+   fun:_snd_pcm_dmix_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_softvol_open
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_plug_open
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_asym_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+}
+{
+   <alsa error>
+   Memcheck:Leak
+   fun:malloc
+   fun:strdup
+   fun:snd_dlobj_cache_add
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:snd_pcm_dsnoop_open
+   fun:_snd_pcm_dsnoop_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_plug_open
+   obj:/*lib/libasound.so.2.0.0
+   fun:snd_pcm_open_slave
+   fun:_snd_pcm_asym_open
+   obj:/*lib/libasound.so.2.0.0
+   obj:/*lib/libasound.so.2.0.0
+}
+# Catch about 15 variations on inserting info into an ALSA
+# internal cache
+{
+   <alsa error>
+   Memcheck:Leak
+   fun:malloc
+   ...
+   fun:snd*_dlobj_cache_add
+   obj:/*lib*/libasound.so.2.0.0
+}
+
+{
+   <alsa leak in loading configuration>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:snd_pcm_open_conf
+}
+
+{
+   <alsa leak snd_config_hook_load>
+   Memcheck:Leak
+   fun:*alloc
+   obj:/*lib*/libasound.so.2.0.0
+   ...
+   fun:snd_config_hook_load
+}
+
+{
+   <alsa leak snd_config_update_r>
+   Memcheck:Leak
+   fun:*alloc
+   obj:/*lib*/libasound.so.2.0.0
+   ...
+   fun:snd_config_update_r
+   fun:snd_config_update
+}
+{
+   <alsa leak snd_config_update_r>
+   Memcheck:Leak
+   fun:*alloc
+   fun:strdup
+   ...
+   fun:snd_config_update_r
+   fun:snd_config_update
+}
+{
+   <nss lookup within ALSA>
+   Memcheck:Leak
+   fun:malloc
+   obj:/lib/libc*.so
+   fun:__nss_database_lookup
+   obj:*
+   obj:*
+   fun:getgrnam_r
+   fun:getgrnam
+   fun:snd_pcm_direct_parse_open_conf
+}
+
+{
+   <libxcb leak on Ubuntu Feisty>
+   Memcheck:Leak
+   fun:calloc
+   fun:_XCBInitDisplayLock
+   fun:XOpenDisplay
+}
+
+# GConf internal initialisations related to getting the default client.
+{
+   <Orbit something or other>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_tcval
+   obj:/usr/lib/libORBit-2.so.*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:CORBA_ORB_string_to_object
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_get_current_lock_holder
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so.*
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_tcval
+   obj:*
+   fun:PortableServer_POA_servant_to_reference
+   fun:*
+   fun:*
+   fun:*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_tcval
+   obj:/usr/lib/libORBit-2.so.*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:CORBA_ORB_string_to_object
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_get_current_lock_holder
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so.*
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:ORBit_demarshal_value
+   fun:*
+   fun:ORBit_small_invoke_stub
+   fun:ConfigServer_get_default_database
+   fun:*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:*
+   fun:IOP_generate_profiles
+   fun:ORBit_marshal_object
+   fun:ORBit_marshal_value
+   fun:*
+   fun:ORBit_small_invoke_stub
+   fun:ConfigServer_add_client
+   fun:*
+   fun:*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_by_tc
+   fun:*
+   fun:PortableServer_POA_servant_to_reference
+   fun:*
+   fun:*
+   fun:*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf internal init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_by_tc
+   obj:/usr/lib/libORBit-2.so.*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:CORBA_ORB_string_to_object
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_get_current_lock_holder
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so.*
+   obj:/usr/lib/libgconf-2.so.*
+   fun:gconf_engine_get_default
+}
+
+{
+   <insert a suppression name here>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:*
+   fun:*
+   fun:gconf_activate_server
+}
+
+# Some libORBit/bonobo initialisation stuff
+{
+   <bonobo init>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:ORBit_alloc_string
+   fun:CORBA_string_dup
+   fun:Bonobo_ActivationEnvValue_set
+   fun:bonobo_activation_init_activation_env
+   fun:bonobo_activation_orb_init
+   fun:bonobo_activation_init
+}
+{
+   <bonobo init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc*
+   obj:/usr/lib/libORBit-2.so*
+   fun:PortableServer_POA_servant_to_reference
+   obj:/usr/lib/libbonobo-2.so*
+}
+{
+   <bonobo init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_tcval
+   fun:ORBit_small_allocbuf
+   fun:ORBit_adaptor_setup
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_POA_setup_root
+   fun:ORBit_init_internals
+   fun:CORBA_ORB_init
+}
+{
+   <bonobo init - more recent variant of above>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc_tcval
+   fun:ORBit_adaptor_setup
+   fun:*
+   fun:ORBit_POA_setup_root
+   fun:ORBit_init_internals
+   fun:CORBA_ORB_init
+}
+{
+   <bonobo init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_allocbuf
+   fun:bonobo_activation_init_activation_env
+   fun:bonobo_activation_orb_init
+   fun:bonobo_activation_init
+}
+
+# More GConf stuff from the FC5 buildbot, mostly variations on the
+# above stack traces
+{
+   <incompletely initialised ORBit buffer>
+   Memcheck:Param
+   writev(vector[...])
+   fun:writev
+   obj:/usr/lib/libORBit-2.so*
+   fun:link_connection_writev
+   fun:giop_send_buffer_write
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_small_invoke_stub
+   fun:ORBit_small_invoke_stub_n
+   fun:ORBit_c_stub_invoke
+   fun:ConfigServer_ping
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc*
+   obj:/usr/lib/libORBit-2.so*
+   fun:PortableServer_POA_servant_to_reference
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:CORBA_ORB_string_to_object
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_get_current_lock_holder
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc*
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:CORBA_ORB_string_to_object
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_get_current_lock_holder
+   fun:gconf_activate_server
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <bonobo init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc*
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_demarshal_IOR
+   fun:ORBit_demarshal_object
+   fun:ORBit_demarshal_value
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_small_invoke_stub
+   fun:ORBit_small_invoke_stub_n
+   fun:ORBit_c_stub_invoke
+   fun:ConfigServer_get_default_database
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <gconf init>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:ORBit_alloc*
+   fun:ORBit_small_alloc*
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_OAObject_object_to_objkey
+   fun:IOP_generate_profiles
+   fun:ORBit_marshal_object
+   fun:ORBit_marshal_value
+   obj:/usr/lib/libORBit-2.so*
+   fun:ORBit_small_invoke_stub
+   fun:ORBit_small_invoke_stub_n
+   fun:ORBit_c_stub_invoke
+   fun:ConfigServer_add_client
+   obj:/usr/lib/libgconf-2.so*
+   obj:/usr/lib/libgconf-2.so*
+   fun:gconf_engine_get_default
+}
+{
+   <GLib caching the home dir>
+   Memcheck:Leak
+   fun:malloc
+   obj:*libc-*.so
+   fun:__nss_database_lookup
+   obj:*
+   obj:*
+   fun:getpwnam_r
+   obj:/usr/lib*/libglib-2.0.so.*
+   fun:g_get_home_dir
+}
+{
+   <GLib caching the user name>
+   Memcheck:Leak
+   fun:malloc
+   obj:*libc-*.so
+   fun:__nss_database_lookup
+   obj:*
+   obj:*
+   fun:getpwnam_r
+   obj:/usr/lib*/libglib-2.0.so.*
+   fun:g_get_user_name
+}
+{
+   <GLib caching the tmp dir>
+   Memcheck:Leak
+   fun:malloc
+   obj:*libc-*.so
+   fun:__nss_database_lookup
+   obj:*
+   obj:*
+   fun:getpwnam_r
+   obj:/usr/lib*/libglib-2.0.so.*
+   fun:g_get_tmp_dir
+}
+
+{
+   <GLib caching the host name>
+   Memcheck:Leak
+   fun:malloc
+   obj:*libc-*.so
+   fun:__nss_database_lookup
+   obj:*
+   obj:*
+   fun:getpwnam_r
+   obj:/usr/lib*/libglib-2.0.so.0.*
+   fun:g_get_host_name
+}
+
+
+## Some Fontconfig errors.
+{
+   <First time load of a font - feisty x86_64>
+   Memcheck:Leak
+   fun:malloc
+   fun:FcPatternObjectInsertElt
+   fun:FcPatternObjectAddWithBinding
+   fun:FcPatternAppend
+   fun:FcEndElement
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   fun:XML_ParseBuffer
+   fun:FcConfigParseAndLoad
+   fun:FcConfigParseAndLoad
+   fun:FcParseInclude
+   fun:FcEndElement
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   obj:/usr/lib/libexpat.so.*
+   fun:XML_ParseBuffer
+   fun:FcConfigParseAndLoad
+}
+{
+   <First time load of a font - generic>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:FcInitLoadConfig
+}
+
+# Issues with ubuntu Hardy, same crack as for previous ubuntus
+{
+   <tls leak generic ubuntu hardy x86>
+   Memcheck:Leak
+   fun:calloc
+   obj:*
+   fun:_dl_allocate_tls
+   fun:pthread_create@@*
+   obj:/usr/lib/libgthread*
+   fun:g_thread_*
+}
+
+# I've made this version generic, so that it covers future modifications
+# of library names
+{
+   <tls leak generic>
+   Memcheck:Leak
+   fun:calloc
+   obj:*
+   fun:_dl_allocate_tls
+   fun:pthread_create@@*
+   fun:g_thread_*
+}
+
+# series of invalid read of size 4 in g_module_open for ubuntu
+# hardy x86/32bit
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_*
+}
+
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_*
+}
+
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_*
+}
+
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load_*
+}
+
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+   fun:gst_plugin_load*
+}
+
+{
+   <invalid read of size 4 within <g_module_open>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   fun:_dl_sym
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libdl-2.7.so
+   fun:dlsym
+   fun:g_module_symbol
+   fun:g_module_open
+   fun:gst_plugin_load_*
+}
+
+# series of invalid read of size 8 in g_module_open for ubuntu
+# hardy x86/64bit
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlopen
+   fun:g_module_open
+}
+
+{
+   <invalid read of size 8 within <g_module_open>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/libdl-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libdl-2.7.so
+   fun:dlsym
+   fun:g_module_symbol
+   fun:g_module_open
+}
+
+{
+   <GLib caching>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   fun:__nss_lookup_function
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   fun:__nss_passwd_lookup
+   fun:getpwnam_r
+}
+
+{
+   <GLib caching>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   fun:__nss_lookup_function
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   fun:__nss_passwd_lookup
+   fun:getpwnam_r
+}
+
+{
+   <GLib caching>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   fun:__nss_lookup_function
+   obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
+   fun:_nss_compat_getpwnam_r
+   fun:getpwnam_r
+}
+
+{
+   <GLib caching>
+   Memcheck:Addr4
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/tls/i686/cmov/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   fun:__nss_lookup_function
+   obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
+   fun:_nss_compat_getpwnam_r
+   fun:getpwnam_r
+}
+
+{
+   <GLib caching>
+   Memcheck:Addr8
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/ld-2.7.so
+   obj:/lib/libc-2.7.so
+   obj:/lib/ld-2.7.so
+   fun:__libc_dlopen_mode
+   fun:__nss_lookup_function
+   obj:/lib/libc-2.7.so
+   fun:getpwnam_r
+}
+
+## Leaks in ALSA (variations of leak from snd_config_load1)
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:calloc
+   fun:_snd_config_make
+   fun:_snd_config_make_add
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:malloc
+   fun:snd1_dlobj_cache_add
+   fun:snd_ctl_open_noupdate
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:malloc
+   fun:*
+   fun:snd1_dlobj_cache_add
+   fun:snd_ctl_open_noupdate
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+{
+   <Alsa leak>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:snd_config_load1
+}
+
+
+# The following are leaks of caps that need to be created dynamically
+# in the type registration of the plugin (used for pad templates).
+
+{
+   <Leak in ogmparsers>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_new_simple
+   fun:*
+   fun:g_type_class_ref
+   fun:gst_element_register
+}
+
+{
+   <Leak in ogmparsers>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:*
+   fun:*
+   fun:g_type_class_ref
+   fun:gst_element_register
+   fun:gst_ogm_parse_plugin_init
+   fun:plugin_init
+}
+
+{
+   <Leak in videotestsrc>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_copy
+   fun:gst_video_test_src_base_init
+   fun:g_type_class_ref
+   fun:gst_element_register
+}
+
+{
+   <Leak in videotestsrc>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_copy
+   fun:gst_video_test_src_getcaps
+   fun:gst_video_test_src_base_init
+   fun:g_type_class_ref
+   fun:gst_element_register
+}
+
+{
+   <Leak in ffmpegcolorspace>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_ffmpegcsp_codectype_to_caps
+   fun:gst_ffmpegcolorspace_register
+   fun:plugin_init
+}
+
+{
+   <Leak in ffmpegocolorspace>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_copy
+   fun:gst_ffmpegcolorspace_register
+   fun:plugin_init
+}
+
+{
+   <Leak in gstffmpegdemux>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_new_any
+   fun:gst_ffmpegdemux_register
+   fun:plugin_init
+}
+
+{
+   <Leak in GstAudioFilter subclasses>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+
+{
+   <Leak in GstAudioFilter subclasses, variant>
+   Memcheck:Leak
+   fun:realloc
+   fun:g_realloc
+   fun:g_ptr_array_maybe_expand
+   fun:g_ptr_array_add
+   fun:gst_caps_append
+   fun:gst_audio_filter_class_add_pad_templates
+}
+
+{
+   <Leak in GstAudioFilter subclasses, variant>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:g_ptr_array_maybe_expand
+   fun:g_ptr_array_add
+   fun:gst_caps_append
+   fun:gst_audio_filter_class_add_pad_templates
+}
+
+{
+   <Leak in GstAudioFilter subclasses, variant>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:g_ptr_array_maybe_expand
+   fun:g_ptr_array_add
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+
+{
+   <Leak in GstAudioFilter subclasses, variant2>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:g_ptr_array_sized_new
+   fun:gst_caps_new_empty
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+{
+   <Leak in GstAudioFilter subclasses, variant3>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:g_array_maybe_expand
+   fun:g_array_sized_new
+   fun:*
+   fun:*
+   fun:*
+   fun:gst_value_init_and_copy
+   fun:gst_structure_copy
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+{
+   <Leak in GstAudioFilter subclasses, variant4>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:g_array_maybe_expand
+   fun:g_array_sized_new
+   fun:*
+   fun:gst_structure_copy
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+{
+   <Leak in GstAudioFilter subclasses, variant5>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:g_array_sized_new
+   fun:*
+   fun:gst_structure_copy
+   fun:gst_caps_copy
+   fun:gst_audio_filter_class_add_pad_templates
+}
+
+{
+   <Leak in riff-media>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_riff_create_*_template_caps
+}
+{
+   <Leak in riff-media>
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:g_realloc
+   fun:*
+   fun:*
+   fun:*
+   fun:gst_structure_copy
+   fun:gst_caps_copy
+   fun:gst_caps_append
+   fun:gst_riff_create_*_template_caps
+}
+{
+   <Leak in riff-media>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:g_array_sized_new
+   fun:*
+   fun:gst_structure_copy
+   fun:gst_caps_copy
+   fun:gst_caps_append
+   fun:gst_riff_create_*_template_caps
+}
+
+## Leaks in pango (bilboed: gentoo unstable amd64)
+
+{
+   <Pango leak - generic>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:pango_layout_get_pixel_extents
+}
+{
+   <insert a suppression name here>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:pango_language_from_string
+   fun:pango_language_get_default
+   fun:pango_context_init
+   fun:g_type_create_instance
+   fun:g_object_constructor
+   fun:g_object_newv
+   fun:g_object_new_valist
+   fun:g_object_new
+   fun:pango_font_map_create_context
+}
+
+{
+   <PangoLanguage can never be freed>
+   Memcheck:Leak
+   fun:calloc
+   fun:g_malloc0
+   fun:pango_language_from_string
+}
+
+
+## Leak of property_list in gstffmpegcfg.c
+## This list is created in gst_ffmpegcsp_init(), called from
+## gst_ffmpegenc_register.
+{
+   <insert a suppression name here>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:g_datalist_id_set_data_full
+   fun:gst_ffmpeg_cfg_init
+   fun:gst_ffmpegenc_register
+   fun:plugin_init
+}
+{
+   <insert a suppression name here>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:g_datalist_id_set_data_full
+   fun:g_param_spec_set_qdata_full
+   fun:gst_ffmpeg_cfg_init
+   fun:gst_ffmpegenc_register
+   fun:plugin_init
+}
+
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:gst_ffmpeg_cfg_init
+   fun:gst_ffmpegenc_register
+}
+
+## Leak of GIO module through gnomevfs
+
+{
+   <gio leak>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:*
+   fun:*
+   fun:g_type_create_instance
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:g_io_module_new
+   fun:g_io_modules_load_all_in_directory
+   fun:*
+   fun:get_default_vfs
+}
+
+## Conditional jump in getaddrinfo (bilboed, gentoo ~amd64, Dec 13 2008)
+{
+   <Leak of addrinfo in esd>
+   Memcheck:Cond
+   fun:gaih_inet
+   fun:getaddrinfo
+}
+
+## Dynamic pad templates in mxfmux
+{
+   <Dynamic pad templates in mxfmux>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_slice_alloc
+   fun:gst_caps_new_empty
+   fun:gst_caps_from_string
+   fun:mxf_*_init
+   fun:plugin_init
+}
+
+## We don't know if ffmpeg frees this or not and better pass a copy for safety
+{
+   <insert a suppression name here>
+   Memcheck:Leak
+   fun:malloc
+   fun:g_malloc
+   fun:g_strdup
+   fun:gst_ffmpeg_cfg_fill_context
+   fun:gst_ffmpegenc_setcaps
+   fun:gst_pad_set_caps
+}
+
+## Leak/overreads with glibc-2.10
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:do_sym
+   fun:dlsym_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlsym
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:do_sym
+   fun:dlsym_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlsym
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_relocate_object
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_check_map_versions
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_relocate_object
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_check_map_versions
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_map_object*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_map_object*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_check_caller
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_check_caller
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen*
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   obj:/lib*/libc-2.10.*.so
+   obj:/lib*/libc-2.10.*.so
+   fun:_vgnU_freeres
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   obj:/lib*/libc-2.10.*.so
+   obj:/lib*/libc-2.10.*.so
+   fun:_vgnU_freeres
+}
+{
+   <glibc-2.10 mysterious invalid free on exit>
+   Memcheck:Free
+   fun:free
+   obj:/lib*/libc-2.10.*.so
+   obj:/lib*/libc-2.10.*.so
+   fun:_vgnU_freeres
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_fini
+   fun:__run_exit_handlers
+   fun:exit
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_fini
+   fun:__run_exit_handlers
+   fun:exit
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_sort_fini
+   fun:_dl_fini
+   fun:__run_exit_handlers
+   fun:exit
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_sort_fini
+   fun:_dl_fini
+   fun:__run_exit_handlers
+   fun:exit
+}
+
+# glibc-2.10 dl overreads
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_fixup
+   fun:_dl_runtime_resolve
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_fixup
+   fun:_dl_runtime_resolve
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_lookup_symbol_x
+   fun:_dl_fixup
+   fun:_dl_runtime_resolve
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_lookup_symbol_x
+   fun:_dl_fixup
+   fun:_dl_runtime_resolve
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:call_init
+   fun:_dl_init
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_init
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_check_map_versions
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_check_map_versions
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_check_map_versions
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_check_map_versions
+   fun:_dl_check_all_versions
+   fun:version_check_doit
+   fun:_dl_receive_error
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:init_tls
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:init_tls
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_protect_relro
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_setup_hash
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:open_path
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:open_path
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:*
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_name_match_p
+   fun:_dl_check_map_versions
+   fun:_dl_check_all_versions
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:do_lookup_x
+   fun:_dl_lookup_symbol_x
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+   fun:dl_open_worker
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+   fun:dl_open_worker
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+   fun:dl_open_worker
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+   fun:dl_open_worker
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_lookup_symbol_x
+   fun:_dl_relocate_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:_dl_check_map_versions
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_check_map_versions
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:*
+   fun:_dl_check_map_versions
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_check_map_versions
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:openaux
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_name_match_p
+   fun:_dl_map_object
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_close_worker
+   fun:_dl_close
+   fun:_dl_catch_error
+   fun:dlerror_run
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_close_worker
+   fun:_dl_close
+   fun:_dl_catch_error
+   fun:dlerror_run
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_close_worker
+   fun:_dl_close
+   fun:_dl_catch_error
+   fun:dlerror_run
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_close_worker
+   fun:_dl_close
+   fun:_dl_catch_error
+   fun:dlerror_run
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:fillin_rpath
+   fun:_dl_init_paths
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:fillin_rpath
+   fun:_dl_init_paths
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:fillin_rpath
+   fun:_dl_init_paths
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:fillin_rpath
+   fun:_dl_init_paths
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_map_object
+   fun:map_doit
+   fun:_dl_catch_error
+   fun:do_preload
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_map_object
+   fun:map_doit
+   fun:_dl_catch_error
+   fun:do_preload
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Param
+   open(filename)
+   fun:open
+   fun:open_verify
+   fun:_dl_map_object
+   fun:map_doit
+   fun:_dl_catch_error
+   fun:do_preload
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Param
+   stat(file_name)
+   fun:_xstat
+   fun:open_path
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:_dl_map_object_deps
+   fun:dl_main
+}
+
+# glibc-2.10 tls issues
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:init_tls
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:init_tls
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:*
+   fun:init_tls
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:init_tls
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:_dl_allocate_tls_init
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:_dl_allocate_tls_init
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:*
+   fun:_dl_allocate_tls_init
+   fun:dl_main
+}
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Value8
+   fun:*
+   fun:_dl_allocate_tls_init
+   fun:dl_main
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Cond
+   fun:__tls*
+   obj:*
+   obj:*
+   fun:_vgnU_freeres
+}
+
+{
+   <glibc-2.10 overreads/conditionals>
+   Memcheck:Param
+   arch_prctl(arg2)
+   fun:init_tls
+}
+# GLib caching tmp/home directories (glibc-2.10 variants)
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Cond
+   fun:*
+   fun:dl_open_worker
+   fun:*
+   fun:*
+   fun:*
+   fun:_dl_catch_error
+   fun:dlerror_run
+   fun:*
+   fun:__nss_lookup_function
+   fun:__nss_lookup
+   fun:getpwnam*
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:dl_open_worker
+   fun:*
+   fun:*
+   fun:*
+   fun:_dl_catch_error
+   fun:dlerror_run
+   fun:*
+   fun:__nss_lookup_function
+   fun:__nss_lookup
+   fun:getpwnam*
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Cond
+   fun:dl_open_worker
+   fun:*
+   fun:*
+   fun:do_dlopen
+   fun:*
+   fun:dlerror_run
+   fun:*
+   fun:__nss_lookup_function
+   fun:__nss_lookup
+   fun:getpwnam*
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:dl_open_worker
+   fun:*
+   fun:*
+   fun:do_dlopen
+   fun:*
+   fun:dlerror_run
+   fun:*
+   fun:__nss_lookup_function
+   fun:__nss_lookup
+   fun:getpwnam*
+}
+
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:_dl_add_to_slotinfo
+   fun:dl_main
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Param
+   open(filename)
+   fun:open
+   fun:open_verify
+   fun:open_path
+   fun:_dl_map_object
+}
+
+
+
+# GModule issues with glibc-2.10
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:dlsym
+   fun:g_module_symbol
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:g_module_*
+   fun:gst_plugin*
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:g_module_*
+   fun:gst_plugin*
+}
+
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:dlopen*
+   fun:g_module_open
+}
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:dlsym
+   fun:g_module_symbol
+}
+
+{
+   <glibc-2.10 GLIB leaks>
+   Memcheck:Value8
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:*
+   fun:dlopen*
+   fun:g_module_open
+}
+
+# Leak in GSlice
+{
+   <insert a suppression name here>
+   Memcheck:Value8
+   fun:g_parse_debug_string
+   fun:slice_config_init
+   fun:g_slice_init_nomessage
+   fun:_g_slice_thread_init_nomessage
+   fun:g_thread_init_glib
+}
+
+# 2.10 pthread issues
+{
+   <insert a suppression name here>
+   Memcheck:Value8
+   fun:__pthread_initialize_minimal
+}
+
+# glibc 2.11 conditional
+{
+   <glibc-2.11 conditional>
+   Memcheck:Cond
+   fun:_dl_relocate_object
+   fun:dl_main
+   fun:_dl_sysdep_start
+   fun:_dl_start
+   obj:/lib64/ld-2.11.so
+}
+
+# glibc 2.11 Leak
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:_dl_*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:_dl_*
+   fun:_dl_*
+   fun:_dl_*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:_dl_*
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:_dl_map_object
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:_dl_new_object
+   fun:_dl_map_object_from_fd
+   fun:_dl_map_object
+   fun:openaux
+   fun:_dl_catch_error
+   fun:_dl_map_object_deps
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:_dl_*
+   fun:_dl_*
+   fun:_dl_*
+   fun:dl_open_worker
+   fun:_dl_catch_error
+   fun:_dl_open
+   fun:dlopen_doit
+   fun:_dl_catch_error
+   fun:_dlerror_run
+   fun:dlopen@@GLIBC_2.2.5
+}
+
+# glib type leaks
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:g_type_register_static
+}
+
+# new registry system
+# all of this will only be created once when loading registry.
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:_priv_gst_registry_chunks_load_plugin
+}
+
+# system-wide tags
+# these tags are registered once
+
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   fun:*
+   fun:*
+   fun:gst_tag_register
+   fun:_gst_tag_initialize
+}
+
+# system-wide type classes that we keep referenced
+
+{
+   <g_type_class_ref leaks>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:g_type_class_ref
+}
+
+# leaking cached queries which are only initialized once
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:_gst_query_initialize
+   fun:init_post
+}
+
+# macosx (leopard) library loader leak
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:_Znwm
+   fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+   fun:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag
+   fun:_ZNSsC2EPKcRKSaIcE
+   fun:_Z41__static_initialization_and_destruction_0ii
+   fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
+}
+
+# GObject type registration
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:_g_atomic_array_copy
+}
+
+{
+   <getdelim one-time inits called from libselinux>
+   Memcheck:Leak
+   fun:*alloc
+   fun:getdelim
+   obj:*libselinux*
+}
+
+{
+   <weird one when re-reading registry>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   obj:*/sed
+}
+
+{
+   <weird one when re-reading registry>
+   Memcheck:Addr8
+   ...
+   obj:*/sed
+}
+
+# GLib 2.23 interface vtable
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:g_type_add_interface_static
+}
+
+{
+   <leak in dash on debian sid>
+   Memcheck:Leak
+   fun:*alloc
+   obj:*/dash
+}
+
+# libtool/gentoo fake leak
+# it actually runs bash and valgrind complains
+{
+   <insert_a_suppression_name_here>
+   Memcheck:Leak
+   fun:*alloc
+   obj:/bin/bash
+}
+
+{
+   <ignore possbly-lost leaks in the plugin scanner which doesn't clean up properly>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:_gst_plugin_loader_client_run
+   fun:main
+}
+
+{
+   <warning with libc 2.13-2 as in Debian/unstable on amd64>
+   Memcheck:Cond
+   fun:*strcasecmp*
+   ...
+   fun:__dcigettext
+}
+
+{
+   <warning with libc 2.13-2 as in Debian/unstable on amd64>
+   Memcheck:Value8
+   fun:*strcasecmp*
+   ...
+   fun:__dcigettext
+}
+
+{
+   <GstSystemClock is a singleton and does not leak>
+   Memcheck:Leak
+   fun:malloc
+   ...
+   fun:gst_poll_new
+   fun:gst_poll_new_timer
+   fun:gst_system_clock_init
+}
+
diff --git a/common/gstdoc-scangobj b/common/gstdoc-scangobj
new file mode 100755
index 0000000..5b13352
--- /dev/null
+++ b/common/gstdoc-scangobj
@@ -0,0 +1,1598 @@
+#!/usr/bin/env perl
+# -*- cperl -*-
+#
+# gtk-doc - GTK DocBook documentation generator.
+# Copyright (C) 1998  Damon Chaplin
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+#
+# This gets information about object hierarchies and signals
+# by compiling a small C program. CFLAGS and LDFLAGS must be
+# set appropriately before running this script.
+#
+
+use Getopt::Long;
+
+my $GTK_DOC_PREFIX=`pkg-config --variable prefix gtk-doc`;
+if ($GTK_DOC_PREFIX) {
+  chomp $GTK_DOC_PREFIX;
+  #print "Adding $GTK_DOC_PREFIX/share/gtk-doc/data to \@INC\n";
+  unshift @INC, "$GTK_DOC_PREFIX/share/gtk-doc/data";
+} else {
+  unshift @INC, '/usr/share/gtk-doc/data';
+}
+require "gtkdoc-common.pl";
+
+# Options
+
+# name of documentation module
+my $MODULE;
+my $OUTPUT_DIR;
+my $INSPECT_DIR;
+my $VERBOSE;
+my $PRINT_VERSION;
+my $PRINT_HELP;
+my $TYPE_INIT_FUNC="g_type_init ()";
+
+# --nogtkinit is deprecated, as it is the default now anyway.
+%optctl = (module => \$MODULE,
+           source => \$SOURCE,
+	   types => \$TYPES_FILE,
+	   nogtkinit => \$NO_GTK_INIT,
+	   'type-init-func' => \$TYPE_INIT_FUNC,
+	   'output-dir' => \$OUTPUT_DIR,
+	   'inspect-dir' => \$INSPECT_DIR,
+	   'verbose' => \$VERBOSE,
+	   'version' => \$PRINT_VERSION,
+	   'help' => \$PRINT_HELP);
+
+GetOptions(\%optctl, "module=s", "source=s", "types:s", "output-dir:s", "inspect-dir:s", "nogtkinit", "type-init-func:s", "verbose", "version", "help");
+
+if ($NO_GTK_INIT) {
+  # Do nothing. This just avoids a warning.
+  # the option is not used anymore
+}
+
+if ($PRINT_VERSION) {
+    print "1.5\n";
+    exit 0;
+}
+
+if (!$MODULE) {
+    $PRINT_HELP = 1;
+}
+
+if ($PRINT_HELP) {
+    print <<EOF;
+gstdoc-scangobj version 1.5 - introspect gstreamer-plugins
+
+--module=MODULE_NAME          Name of the doc module being parsed
+--source=SOURCE_NAME          Name of the source module for plugins
+--types=FILE                  The name of the file to store the types in
+--type-init-func=FUNC         The init function to call instead of g_type_init()
+--output-dir=DIRNAME          The directory where the results are stored
+--inspect-dir=DIRNAME         The directory where the plugin inspect data is stored
+--verbose                     Print extra output while processing
+--version                     Print the version of this program
+--help                        Print this help
+EOF
+    exit 0;
+}
+
+$OUTPUT_DIR = $OUTPUT_DIR ? $OUTPUT_DIR : ".";
+
+$TYPES_FILE = $TYPES_FILE ? $TYPES_FILE : "$OUTPUT_DIR/$MODULE.types";
+
+open (TYPES, $TYPES_FILE) || die "Cannot open $TYPES_FILE: $!\n";
+open (OUTPUT, ">$MODULE-scan.c") || die "Cannot open $MODULE-scan.c: $!\n";
+
+my $old_signals_filename = "$OUTPUT_DIR/$MODULE.signals";
+my $new_signals_filename = "$OUTPUT_DIR/$MODULE.signals.new";
+my $old_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy";
+my $new_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy.new";
+my $old_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces";
+my $new_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces.new";
+my $old_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites";
+my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new";
+my $old_args_filename = "$OUTPUT_DIR/$MODULE.args";
+my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new";
+
+my $debug_log="g_message";
+if (!defined($VERBOSE) or $VERBOSE eq "0") {
+    $debug_log="//$debug_log";
+}
+
+# write a C program to scan the types
+
+$includes = "";
+@types = ();
+@impl_types = ();
+
+for (<TYPES>) {
+    if (/^#include/) {
+	$includes .= $_;
+    } elsif (/^%/) {
+	next;
+    } elsif (/^\s*$/) {
+	next;
+    } elsif (/^type:(.*)$/) {
+	$t = $1;
+        chomp $t;
+	push @impl_types, $t;
+    } else {
+	chomp;
+	push @types, $_;
+    }
+}
+
+$ntypes = @types + @impl_types + 1;
+
+print OUTPUT <<EOT;
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+$includes
+
+#ifdef GTK_IS_WIDGET_CLASS
+#include <gtk/gtkversion.h>
+#endif
+
+static GType *object_types = NULL;
+
+static GString *xmlstr = NULL;
+
+static const gchar*
+xmlprint (gint indent, const gchar *tag, const gchar *data)
+{
+  const gchar indent_str[] = "                                               ";
+
+  /* reset */
+  g_string_truncate (xmlstr, 0);
+  g_string_append_len (xmlstr, indent_str, MIN (indent, strlen (indent_str)));
+  g_string_append_printf (xmlstr, "<%s>", tag);
+
+  if (data) {
+    gchar *s;
+
+    s = g_markup_escape_text (data, -1);
+    g_string_append (xmlstr, s);
+    g_free (s);
+  }
+
+  g_string_append_printf (xmlstr, "</%s>\\n", tag);
+  return xmlstr->str;
+}
+
+static gint
+gst_feature_sort_compare (gconstpointer a, gconstpointer b)
+{
+  return strcmp (((GstPluginFeature *)a)->name, ((GstPluginFeature *)b)->name);
+}
+
+static gint
+static_pad_template_compare (gconstpointer a, gconstpointer b)
+{
+  GstStaticPadTemplate *spt_a = (GstStaticPadTemplate *) a;
+  GstStaticPadTemplate *spt_b = (GstStaticPadTemplate *) b;
+
+  /* we want SINK before SRC (enum is UNKNOWN, SRC, SINK) */
+  if (spt_a->direction != spt_b->direction)
+    return spt_b->direction - spt_a->direction;
+
+  /* we want ALWAYS first, SOMETIMES second, REQUEST last
+   * (enum is ALWAYS, SOMETIMES, REQUEST) */
+  if (spt_a->presence != spt_b->presence)
+    return spt_a->presence - spt_b->presence;
+
+  return strcmp (spt_a->name_template, spt_b->name_template);
+}
+
+static GType *
+get_object_types (void)
+{
+    gpointer g_object_class;
+    GList *plugins = NULL;
+    GList *factories = NULL;
+    GList *l;
+    GstElementFactory *factory = NULL;
+    GType type;
+    gint i = 0;
+    gboolean reinspect;
+
+    /* get a list of features from plugins in our source module */
+    plugins = gst_registry_get_plugin_list (gst_registry_get_default());
+
+    xmlstr = g_string_new ("");
+
+    reinspect = !g_file_test ("scanobj-build.stamp", G_FILE_TEST_EXISTS);
+
+    while (plugins) {
+      GList *features;
+      GstPlugin *plugin;
+      const gchar *source;
+      FILE *inspect = NULL;
+      gchar *inspect_name;
+
+      plugin = (GstPlugin *) (plugins->data);
+      plugins = g_list_next (plugins);
+      source = gst_plugin_get_source (plugin);
+      if (!source || strcmp (source, "$SOURCE") != 0) {
+        continue;
+      }
+
+      /* skip static coreelements plugin with pipeline and bin element factory */
+      if (gst_plugin_get_filename (plugin) == NULL)
+        continue;
+
+      $debug_log ("plugin: %s source: %s", plugin->desc.name, source);
+
+      if (reinspect) {
+        inspect_name = g_strdup_printf ("$INSPECT_DIR" G_DIR_SEPARATOR_S "plugin-%s.xml",
+            plugin->desc.name);
+        inspect = fopen (inspect_name, "w");
+        if (inspect == NULL) {
+          g_error ("Could not open %s for writing: %s\\n", inspect_name,
+              g_strerror (errno));
+        }
+        g_free (inspect_name);
+
+        /* output plugin data */
+        fputs ("<plugin>\\n",inspect);
+        fputs (xmlprint(2, "name", plugin->desc.name),inspect);
+        fputs (xmlprint(2, "description", plugin->desc.description),inspect);
+        fputs (xmlprint(2, "filename", plugin->filename),inspect);
+        fputs (xmlprint(2, "basename", plugin->basename),inspect);
+        fputs (xmlprint(2, "version", plugin->desc.version),inspect);
+        fputs (xmlprint(2, "license", plugin->desc.license),inspect);
+        fputs (xmlprint(2, "source", plugin->desc.source),inspect);
+        fputs (xmlprint(2, "package", plugin->desc.package),inspect);
+        fputs (xmlprint(2, "origin", plugin->desc.origin),inspect);
+        fputs ("  <elements>\\n", inspect);
+      }
+
+      features =
+          gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
+          plugin->desc.name);
+
+      /* sort factories by feature->name */
+      features = g_list_sort (features, gst_feature_sort_compare);
+
+      while (features) {
+        GstPluginFeature *feature;
+        feature = GST_PLUGIN_FEATURE (features->data);
+        feature = gst_plugin_feature_load (feature);
+        if (!feature) {
+          g_warning ("Could not load plugin feature %s",
+                     gst_plugin_feature_get_name (feature));
+        }
+
+        if (GST_IS_ELEMENT_FACTORY (feature)) {
+          const gchar *pad_dir[] = { "unknown","source","sink" };
+          const gchar *pad_pres[] = { "always","sometimes","request" };
+          GList *pads, *pad;
+
+          $debug_log ("  feature: %s", feature->name);
+
+          factory = GST_ELEMENT_FACTORY (feature);
+          factories = g_list_prepend (factories, factory);
+
+          if (reinspect) {
+            /* output element data */
+            fputs ("    <element>\\n", inspect);
+            fputs (xmlprint(6, "name", feature->name),inspect);
+            fputs (xmlprint(6, "longname", gst_element_factory_get_longname (factory)),inspect);
+            fputs (xmlprint(6, "class", gst_element_factory_get_klass (factory)),inspect);
+            fputs (xmlprint(6, "description", gst_element_factory_get_description (factory)),inspect);
+            fputs (xmlprint(6, "author", gst_element_factory_get_author (factory)),inspect);
+            fputs ("      <pads>\\n", inspect);
+
+            /* output pad-template data */
+            pads = g_list_copy ((GList *) gst_element_factory_get_static_pad_templates (factory));
+            pads = g_list_sort (pads, static_pad_template_compare);
+            for (pad = pads; pad != NULL; pad = pad->next) {
+              GstStaticPadTemplate *pt = pad->data;
+
+              fputs ("        <caps>\\n", inspect);
+              fputs (xmlprint(10, "name", pt->name_template),inspect);
+              fputs (xmlprint(10, "direction", pad_dir[pt->direction]),inspect);
+              fputs (xmlprint(10, "presence", pad_pres[pt->presence]),inspect);
+              fputs (xmlprint(10, "details", pt->static_caps.string),inspect);
+              fputs ("        </caps>\\n", inspect);
+            }
+            g_list_free (pads);
+            fputs ("      </pads>\\n    </element>\\n", inspect);
+          }
+        }
+        features = g_list_next (features);
+      }
+
+      if (reinspect) {
+        fputs ("  </elements>\\n</plugin>", inspect);
+        fclose (inspect);
+      }
+    }
+
+    g_string_free (xmlstr, TRUE);
+
+    $debug_log ("number of element factories: %d", g_list_length (factories));
+
+    /* allocate the object_types array to hold them */
+    object_types = g_new0 (GType, g_list_length (factories)+$ntypes+1);
+
+    l = factories;
+    i = 0;
+
+    /* fill it */
+    while (l) {
+      factory = GST_ELEMENT_FACTORY (l->data);
+      type = gst_element_factory_get_element_type (factory);
+      if (type != 0) {
+        $debug_log ("adding type for factory %s", gst_element_factory_get_longname (factory));
+        object_types[i++] = type;
+      } else {
+        g_message ("type info for factory %s not found",
+            gst_element_factory_get_longname (factory));
+      }
+      l = g_list_next (l);
+    }
+
+EOT
+
+# get_type functions:
+for (@types) {
+print OUTPUT <<EOT;
+    type = $_ ();
+    if (type == 0) {
+      g_message ("$_ () didn't return a valid type");
+    }
+    else {
+      object_types[i++] = type;
+    }
+EOT
+}
+
+# Implicit types retrieved from GLib:
+for (@impl_types) {
+print OUTPUT <<EOT;
+    type = g_type_from_name ("$_");
+    if (type == 0) {
+      g_message ("Implicit type $_ not found");
+    }
+    else {
+      object_types[i++] = type;
+    }
+EOT
+}
+
+print OUTPUT <<EOT;
+
+    object_types[i] = 0;
+
+    /* reference the GObjectClass to initialize the param spec pool
+     * potentially needed by interfaces. See http://bugs.gnome.org/571820 */
+    g_object_class = g_type_class_ref (G_TYPE_OBJECT);
+
+    /* Need to make sure all the types are loaded in and initialize
+     * their signals and properties.
+     */
+    for (i=0; object_types[i]; i++)
+      {
+        if (G_TYPE_IS_CLASSED (object_types[i]))
+          g_type_class_ref (object_types[i]);
+        if (G_TYPE_IS_INTERFACE (object_types[i]))
+          g_type_default_interface_ref (object_types[i]);
+      }
+
+    g_type_class_unref (g_object_class);
+
+    return object_types;
+}
+
+/*
+ * This uses GObject type functions to output signal prototypes and the object
+ * hierarchy.
+ */
+
+/* The output files */
+const gchar *signals_filename = "$new_signals_filename";
+const gchar *hierarchy_filename = "$new_hierarchy_filename";
+const gchar *interfaces_filename = "$new_interfaces_filename";
+const gchar *prerequisites_filename = "$new_prerequisites_filename";
+const gchar *args_filename = "$new_args_filename";
+
+
+static void output_signals (void);
+static void output_object_signals (FILE *fp,
+				   GType object_type);
+static void output_object_signal (FILE *fp,
+				  const gchar *object_class_name,
+				  guint signal_id);
+static const gchar * get_type_name (GType type,
+			            gboolean * is_pointer);
+static void output_object_hierarchy (void);
+static void output_hierarchy (FILE *fp,
+			      GType type,
+			      guint level);
+
+static void output_object_interfaces (void);
+static void output_interfaces (FILE *fp,
+			       GType type);
+
+static void output_interface_prerequisites (void);
+static void output_prerequisites (FILE *fp,
+			          GType type);
+
+static void output_args (void);
+static void output_object_args (FILE *fp, GType object_type);
+
+int
+main (int argc, char *argv[])
+{
+  /* Silence the compiler: */
+  if (argv != argv) argc = argc;
+
+  $TYPE_INIT_FUNC;
+
+  get_object_types ();
+
+  output_signals ();
+  output_object_hierarchy ();
+  output_object_interfaces ();
+  output_interface_prerequisites ();
+  output_args ();
+
+  return 0;
+}
+
+
+static void
+output_signals (void)
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (signals_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", signals_filename, g_strerror(errno));
+      return;
+    }
+
+  for (i = 0; object_types[i]; i++)
+    output_object_signals (fp, object_types[i]);
+
+  fclose (fp);
+}
+
+static gint
+compare_signals (const void *a, const void *b)
+{
+  const guint *signal_a = a;
+  const guint *signal_b = b;
+
+  return strcmp (g_signal_name (*signal_a), g_signal_name (*signal_b));
+}
+
+/* This outputs all the signals of one object. */
+static void
+output_object_signals (FILE *fp, GType object_type)
+{
+  const gchar *object_class_name;
+  guint *signals, n_signals;
+  guint sig;
+
+  if (G_TYPE_IS_INSTANTIATABLE (object_type) ||
+      G_TYPE_IS_INTERFACE (object_type))
+    {
+
+      object_class_name = g_type_name (object_type);
+
+      signals = g_signal_list_ids (object_type, &n_signals);
+      qsort (signals, n_signals, sizeof (guint), compare_signals);
+
+      for (sig = 0; sig < n_signals; sig++)
+        {
+           output_object_signal (fp, object_class_name, signals[sig]);
+        }
+      g_free (signals);
+   }
+}
+
+
+/* This outputs one signal. */
+static void
+output_object_signal (FILE *fp,
+		      const gchar *object_name,
+		      guint signal_id)
+{
+  GSignalQuery query_info;
+  const gchar *type_name, *ret_type, *object_arg, *arg_name;
+  gchar *pos, *object_arg_lower;
+  gboolean is_pointer;
+  gchar buffer[1024];
+  guint i, param;
+  gint param_num, widget_num, event_num, callback_num;
+  gint *arg_num;
+  gchar signal_name[128];
+  gchar flags[16];
+
+  $debug_log ("Object: %s Signal: %u", object_name, signal_id);
+
+  param_num = 1;
+  widget_num = event_num = callback_num = 0;
+
+  g_signal_query (signal_id, &query_info);
+
+  /* Output the signal object type and the argument name. We assume the
+     type is a pointer - I think that is OK. We remove "Gtk" or "Gnome" and
+     convert to lower case for the argument name. */
+  pos = buffer;
+  sprintf (pos, "%s ", object_name);
+  pos += strlen (pos);
+
+  /* Try to come up with a sensible variable name for the first arg
+   * It chops off 2 know prefixes :/ and makes the name lowercase
+   * It should replace lowercase -> uppercase with '_'
+   * GFileMonitor -> file_monitor
+   * GIOExtensionPoint -> extension_point
+   * GtkTreeView -> tree_view
+   * if 2nd char is upper case too
+   *   search for first lower case and go back one char
+   * else
+   *   search for next upper case
+   */
+  if (!strncmp (object_name, "Gtk", 3))
+      object_arg = object_name + 3;
+  else if (!strncmp (object_name, "Gnome", 5))
+      object_arg = object_name + 5;
+  else
+      object_arg = object_name;
+
+  object_arg_lower = g_ascii_strdown (object_arg, -1);
+  sprintf (pos, "*%s\\n", object_arg_lower);
+  pos += strlen (pos);
+  if (!strncmp (object_arg_lower, "widget", 6))
+    widget_num = 2;
+  g_free(object_arg_lower);
+
+  /* Convert signal name to use underscores rather than dashes '-'. */
+  strncpy (signal_name, query_info.signal_name, 127);
+  signal_name[127] = '\\0';
+  for (i = 0; signal_name[i]; i++)
+    {
+      if (signal_name[i] == '-')
+	signal_name[i] = '_';
+    }
+
+  /* Output the signal parameters. */
+  for (param = 0; param < query_info.n_params; param++)
+    {
+      type_name = get_type_name (query_info.param_types[param] & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer);
+
+      /* Most arguments to the callback are called "arg1", "arg2", etc.
+         GtkWidgets are called "widget", "widget2", ...
+         GtkCallbacks are called "callback", "callback2", ... */
+      if (!strcmp (type_name, "GtkWidget"))
+        {
+          arg_name = "widget";
+          arg_num = &widget_num;
+        }
+      else if (!strcmp (type_name, "GtkCallback")
+               || !strcmp (type_name, "GtkCCallback"))
+        {
+          arg_name = "callback";
+          arg_num = &callback_num;
+        }
+      else
+        {
+          arg_name = "arg";
+          arg_num = &param_num;
+        }
+      sprintf (pos, "%s ", type_name);
+      pos += strlen (pos);
+
+      if (!arg_num || *arg_num == 0)
+        sprintf (pos, "%s%s\\n", is_pointer ? "*" : " ", arg_name);
+      else
+        sprintf (pos, "%s%s%i\\n", is_pointer ? "*" : " ", arg_name,
+                 *arg_num);
+      pos += strlen (pos);
+
+      if (arg_num)
+        {
+          if (*arg_num == 0)
+            *arg_num = 2;
+          else
+            *arg_num += 1;
+        }
+    }
+
+  pos = flags;
+  /* We use one-character flags for simplicity. */
+  if (query_info.signal_flags & G_SIGNAL_RUN_FIRST)
+    *pos++ = 'f';
+  if (query_info.signal_flags & G_SIGNAL_RUN_LAST)
+    *pos++ = 'l';
+  if (query_info.signal_flags & G_SIGNAL_RUN_CLEANUP)
+    *pos++ = 'c';
+  if (query_info.signal_flags & G_SIGNAL_NO_RECURSE)
+    *pos++ = 'r';
+  if (query_info.signal_flags & G_SIGNAL_DETAILED)
+    *pos++ = 'd';
+  if (query_info.signal_flags & G_SIGNAL_ACTION)
+    *pos++ = 'a';
+  if (query_info.signal_flags & G_SIGNAL_NO_HOOKS)
+    *pos++ = 'h';
+  *pos = 0;
+
+  /* Output the return type and function name. */
+  ret_type = get_type_name (query_info.return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer);
+
+  fprintf (fp,
+	   "<SIGNAL>\\n<NAME>%s::%s</NAME>\\n<RETURNS>%s%s</RETURNS>\\n<FLAGS>%s</FLAGS>\\n%s</SIGNAL>\\n\\n",
+	   object_name, query_info.signal_name, ret_type, is_pointer ? "*" : "", flags, buffer);
+}
+
+
+/* Returns the type name to use for a signal argument or return value, given
+   the GtkType from the signal info. It also sets is_pointer to TRUE if the
+   argument needs a '*' since it is a pointer. */
+static const gchar *
+get_type_name (GType type, gboolean * is_pointer)
+{
+  const gchar *type_name;
+
+  *is_pointer = FALSE;
+  type_name = g_type_name (type);
+
+  switch (type) {
+  case G_TYPE_NONE:
+  case G_TYPE_CHAR:
+  case G_TYPE_UCHAR:
+  case G_TYPE_BOOLEAN:
+  case G_TYPE_INT:
+  case G_TYPE_UINT:
+  case G_TYPE_LONG:
+  case G_TYPE_ULONG:
+  case G_TYPE_FLOAT:
+  case G_TYPE_DOUBLE:
+  case G_TYPE_POINTER:
+    /* These all have normal C type names so they are OK. */
+    return type_name;
+
+  case G_TYPE_STRING:
+    /* A GtkString is really a gchar*. */
+    *is_pointer = TRUE;
+    return "gchar";
+
+  case G_TYPE_ENUM:
+  case G_TYPE_FLAGS:
+    /* We use a gint for both of these. Hopefully a subtype with a decent
+       name will be registered and used instead, as GTK+ does itself. */
+    return "gint";
+
+  case G_TYPE_BOXED:
+    /* The boxed type shouldn't be used itself, only subtypes. Though we
+       return 'gpointer' just in case. */
+    return "gpointer";
+
+  case G_TYPE_PARAM:
+    /* A GParam is really a GParamSpec*. */
+    *is_pointer = TRUE;
+    return "GParamSpec";
+
+#if GLIB_CHECK_VERSION (2, 25, 9)
+  case G_TYPE_VARIANT:
+    *is_pointer = TRUE;
+    return "GVariant";
+#endif
+
+default:
+    break;
+  }
+
+  /* For all GObject subclasses we can use the class name with a "*",
+     e.g. 'GtkWidget *'. */
+  if (g_type_is_a (type, G_TYPE_OBJECT))
+    *is_pointer = TRUE;
+
+  /* Also catch non GObject root types */
+  if (G_TYPE_IS_CLASSED (type))
+    *is_pointer = TRUE;
+
+  /* All boxed subtypes will be pointers as well. */
+  /* Exception: GStrv */
+  if (g_type_is_a (type, G_TYPE_BOXED) &&
+      !g_type_is_a (type, G_TYPE_STRV))
+    *is_pointer = TRUE;
+
+  /* All pointer subtypes will be pointers as well. */
+  if (g_type_is_a (type, G_TYPE_POINTER))
+    *is_pointer = TRUE;
+
+  /* But enums are not */
+  if (g_type_is_a (type, G_TYPE_ENUM) ||
+      g_type_is_a (type, G_TYPE_FLAGS))
+    *is_pointer = FALSE;
+
+  return type_name;
+}
+
+
+/* This outputs the hierarchy of all objects which have been initialized,
+   i.e. by calling their XXX_get_type() initialization function. */
+static void
+output_object_hierarchy (void)
+{
+  FILE *fp;
+  gint i,j;
+  GType root, type;
+  GType root_types[$ntypes] = { G_TYPE_INVALID, };
+
+  fp = fopen (hierarchy_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", hierarchy_filename, g_strerror(errno));
+      return;
+    }
+  output_hierarchy (fp, G_TYPE_OBJECT, 0);
+  output_hierarchy (fp, G_TYPE_INTERFACE, 0);
+
+  for (i=0; object_types[i]; i++) {
+    root = object_types[i];
+    while ((type = g_type_parent (root))) {
+      root = type;
+    }
+    if ((root != G_TYPE_OBJECT) && (root != G_TYPE_INTERFACE)) {
+      for (j=0; root_types[j]; j++) {
+        if (root == root_types[j]) {
+          root = G_TYPE_INVALID; break;
+        }
+      }
+      if(root) {
+        root_types[j] = root;
+        output_hierarchy (fp, root, 0);
+      }
+    }
+  }
+
+  fclose (fp);
+}
+
+static int
+compare_types (const void *a, const void *b)
+{
+  const char *na = g_type_name (*((GType *)a));
+  const char *nb = g_type_name (*((GType *)b));
+
+  return g_strcmp0 (na, nb);
+}
+
+
+/* This is called recursively to output the hierarchy of a object. */
+static void
+output_hierarchy (FILE  *fp,
+		  GType  type,
+		  guint   level)
+{
+  guint i;
+  GType *children;
+  guint n_children;
+
+  if (!type)
+    return;
+
+  for (i = 0; i < level; i++)
+    fprintf (fp, "  ");
+  fprintf (fp, "%s\\n", g_type_name (type));
+
+  children = g_type_children (type, &n_children);
+  qsort (children, n_children, sizeof (GType), compare_types);
+
+
+  for (i=0; i < n_children; i++)
+    output_hierarchy (fp, children[i], level + 1);
+
+  g_free (children);
+}
+
+static void output_object_interfaces (void)
+{
+  guint i;
+  FILE *fp;
+
+  fp = fopen (interfaces_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", interfaces_filename, g_strerror(errno));
+      return;
+    }
+  output_interfaces (fp, G_TYPE_OBJECT);
+
+  for (i = 0; object_types[i]; i++)
+    {
+      if (!g_type_parent (object_types[i]) &&
+          (object_types[i] != G_TYPE_OBJECT) &&
+          G_TYPE_IS_INSTANTIATABLE (object_types[i]))
+        {
+          output_interfaces (fp, object_types[i]);
+        }
+    }
+  fclose (fp);
+}
+
+static void
+output_interfaces (FILE  *fp,
+		   GType  type)
+{
+  guint i;
+  GType *children, *interfaces;
+  guint n_children, n_interfaces;
+
+  if (!type)
+    return;
+
+  interfaces = g_type_interfaces (type, &n_interfaces);
+
+  if (n_interfaces > 0)
+    {
+      fprintf (fp, "%s", g_type_name (type));
+      for (i=0; i < n_interfaces; i++)
+          fprintf (fp, " %s", g_type_name (interfaces[i]));
+      fprintf (fp, "\\n");
+     }
+  g_free (interfaces);
+
+  children = g_type_children (type, &n_children);
+
+  for (i=0; i < n_children; i++)
+    output_interfaces (fp, children[i]);
+
+  g_free (children);
+}
+
+static void output_interface_prerequisites (void)
+{
+  FILE *fp;
+
+  fp = fopen (prerequisites_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", prerequisites_filename, g_strerror(errno));
+      return;
+    }
+  output_prerequisites (fp, G_TYPE_INTERFACE);
+  fclose (fp);
+}
+
+static void
+output_prerequisites (FILE  *fp,
+		      GType  type)
+{
+#if GLIB_CHECK_VERSION(2,1,0)
+  guint i;
+  GType *children, *prerequisites;
+  guint n_children, n_prerequisites;
+
+  if (!type)
+    return;
+
+  prerequisites = g_type_interface_prerequisites (type, &n_prerequisites);
+
+  if (n_prerequisites > 0)
+    {
+      fprintf (fp, "%s", g_type_name (type));
+      for (i=0; i < n_prerequisites; i++)
+          fprintf (fp, " %s", g_type_name (prerequisites[i]));
+      fprintf (fp, "\\n");
+     }
+  g_free (prerequisites);
+
+  children = g_type_children (type, &n_children);
+
+  for (i=0; i < n_children; i++)
+    output_prerequisites (fp, children[i]);
+
+  g_free (children);
+#endif
+}
+
+static void
+output_args (void)
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (args_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", args_filename, g_strerror(errno));
+      return;
+    }
+
+  for (i = 0; object_types[i]; i++) {
+    output_object_args (fp, object_types[i]);
+  }
+
+  fclose (fp);
+}
+
+static gint
+compare_param_specs (const void *a, const void *b)
+{
+  GParamSpec *spec_a = *(GParamSpec **)a;
+  GParamSpec *spec_b = *(GParamSpec **)b;
+
+  return strcmp (g_param_spec_get_name (spec_a), g_param_spec_get_name (spec_b));
+}
+
+/* Its common to have unsigned properties restricted
+ * to the signed range. Therefore we make this look
+ * a bit nicer by spelling out the max constants.
+ */
+
+/* Don't use "==" with floats, it might trigger a gcc warning.  */
+#define GTKDOC_COMPARE_FLOAT(x, y) (x <= y && x >= y)
+
+static gchar*
+describe_double_constant (gdouble value)
+{
+  gchar *desc;
+
+  if (GTKDOC_COMPARE_FLOAT (value, G_MAXDOUBLE))
+    desc = g_strdup ("G_MAXDOUBLE");
+  else if (GTKDOC_COMPARE_FLOAT (value, G_MINDOUBLE))
+    desc = g_strdup ("G_MINDOUBLE");
+  else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXDOUBLE))
+    desc = g_strdup ("-G_MAXDOUBLE");
+  else if (GTKDOC_COMPARE_FLOAT (value, G_MAXFLOAT))
+    desc = g_strdup ("G_MAXFLOAT");
+  else if (GTKDOC_COMPARE_FLOAT (value, G_MINFLOAT))
+    desc = g_strdup ("G_MINFLOAT");
+  else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXFLOAT))
+    desc = g_strdup ("-G_MAXFLOAT");
+  else{
+    /* make sure floats are output with a decimal dot irrespective of
+    * current locale. Use formatd since we want human-readable numbers
+    * and do not need the exact same bit representation when deserialising */
+    desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE);
+    g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g", value);
+  }
+
+  return desc;
+}
+
+static gchar*
+describe_signed_constant (gsize size, gint64 value)
+{
+  gchar *desc = NULL;
+
+  switch (size) {
+    case 8:
+      if (value == G_MAXINT64)
+        desc = g_strdup ("G_MAXINT64");
+      else if (value == G_MININT64)
+        desc = g_strdup ("G_MININT64");
+      /* fall through */
+    case 4:
+      if (sizeof (int) == 4) {
+        if (value == G_MAXINT)
+          desc = g_strdup ("G_MAXINT");
+        else if (value == G_MININT)
+          desc = g_strdup ("G_MININT");
+        else if (value == (gint64)G_MAXUINT)
+          desc = g_strdup ("G_MAXUINT");
+      }
+      if (value == G_MAXLONG)
+        desc = g_strdup ("G_MAXLONG");
+      else if (value == G_MINLONG)
+        desc = g_strdup ("G_MINLONG");
+      else if (value == (gint64)G_MAXULONG)
+        desc = g_strdup ("G_MAXULONG");
+      /* fall through */
+    case 2:
+      if (sizeof (int) == 2) {
+        if (value == G_MAXINT)
+          desc = g_strdup ("G_MAXINT");
+        else if (value == G_MININT)
+          desc = g_strdup ("G_MININT");
+        else if (value == (gint64)G_MAXUINT)
+          desc = g_strdup ("G_MAXUINT");
+      }
+      break;
+    default:
+      break;
+  }
+  if (!desc)
+    desc = g_strdup_printf ("%" G_GINT64_FORMAT, value);
+
+  return desc;
+}
+
+static gchar*
+describe_unsigned_constant (gsize size, guint64 value)
+{
+  gchar *desc = NULL;
+
+  switch (size) {
+    case 8:
+      if (value == G_MAXINT64)
+        desc = g_strdup ("G_MAXINT64");
+      else if (value == G_MAXUINT64)
+        desc = g_strdup ("G_MAXUINT64");
+      /* fall through */
+    case 4:
+      if (sizeof (int) == 4) {
+        if (value == (guint64)G_MAXINT)
+          desc = g_strdup ("G_MAXINT");
+        else if (value == G_MAXUINT)
+          desc = g_strdup ("G_MAXUINT");
+      }
+      if (value == (guint64)G_MAXLONG)
+        desc = g_strdup ("G_MAXLONG");
+      else if (value == G_MAXULONG)
+        desc = g_strdup ("G_MAXULONG");
+      /* fall through */
+    case 2:
+      if (sizeof (int) == 2) {
+        if (value == (guint64)G_MAXINT)
+          desc = g_strdup ("G_MAXINT");
+        else if (value == G_MAXUINT)
+          desc = g_strdup ("G_MAXUINT");
+      }
+      break;
+    default:
+      break;
+  }
+  if (!desc)
+    desc = g_strdup_printf ("%" G_GUINT64_FORMAT, value);
+
+  return desc;
+}
+
+static gchar*
+describe_type (GParamSpec *spec)
+{
+  gchar *desc;
+  gchar *lower;
+  gchar *upper;
+
+  if (G_IS_PARAM_SPEC_CHAR (spec))
+    {
+      GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec);
+
+      lower = describe_signed_constant (sizeof(gchar), pspec->minimum);
+      upper = describe_signed_constant (sizeof(gchar), pspec->maximum);
+      if (pspec->minimum == G_MININT8 && pspec->maximum == G_MAXINT8)
+	desc = g_strdup ("");
+      else if (pspec->minimum == G_MININT8)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXINT8)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_UCHAR (spec))
+    {
+      GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec);
+
+      lower = describe_unsigned_constant (sizeof(guchar), pspec->minimum);
+      upper = describe_unsigned_constant (sizeof(guchar), pspec->maximum);
+      if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT8)
+	desc = g_strdup ("");
+      else if (pspec->minimum == 0)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXUINT8)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_INT (spec))
+    {
+      GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec);
+
+      lower = describe_signed_constant (sizeof(gint), pspec->minimum);
+      upper = describe_signed_constant (sizeof(gint), pspec->maximum);
+      if (pspec->minimum == G_MININT && pspec->maximum == G_MAXINT)
+	desc = g_strdup ("");
+      else if (pspec->minimum == G_MININT)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXINT)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_UINT (spec))
+    {
+      GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec);
+
+      lower = describe_unsigned_constant (sizeof(guint), pspec->minimum);
+      upper = describe_unsigned_constant (sizeof(guint), pspec->maximum);
+      if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT)
+	desc = g_strdup ("");
+      else if (pspec->minimum == 0)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXUINT)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_LONG (spec))
+    {
+      GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec);
+
+      lower = describe_signed_constant (sizeof(glong), pspec->minimum);
+      upper = describe_signed_constant (sizeof(glong), pspec->maximum);
+      if (pspec->minimum == G_MINLONG && pspec->maximum == G_MAXLONG)
+	desc = g_strdup ("");
+      else if (pspec->minimum == G_MINLONG)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXLONG)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_ULONG (spec))
+    {
+      GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec);
+
+      lower = describe_unsigned_constant (sizeof(gulong), pspec->minimum);
+      upper = describe_unsigned_constant (sizeof(gulong), pspec->maximum);
+      if (pspec->minimum == 0 && pspec->maximum == G_MAXULONG)
+	desc = g_strdup ("");
+      else if (pspec->minimum == 0)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXULONG)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_INT64 (spec))
+    {
+      GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec);
+
+      lower = describe_signed_constant (sizeof(gint64), pspec->minimum);
+      upper = describe_signed_constant (sizeof(gint64), pspec->maximum);
+      if (pspec->minimum == G_MININT64 && pspec->maximum == G_MAXINT64)
+	desc = g_strdup ("");
+      else if (pspec->minimum == G_MININT64)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXINT64)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_UINT64 (spec))
+    {
+      GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec);
+
+      lower = describe_unsigned_constant (sizeof(guint64), pspec->minimum);
+      upper = describe_unsigned_constant (sizeof(guint64), pspec->maximum);
+      if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT64)
+	desc = g_strdup ("");
+      else if (pspec->minimum == 0)
+	desc = g_strdup_printf ("<= %s", upper);
+      else if (pspec->maximum == G_MAXUINT64)
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_FLOAT (spec))
+    {
+      GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec);
+
+      lower = describe_double_constant (pspec->minimum);
+      upper = describe_double_constant (pspec->maximum);
+      if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXFLOAT))
+	{
+	  if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT))
+	    desc = g_strdup ("");
+	  else
+	    desc = g_strdup_printf ("<= %s", upper);
+	}
+      else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT))
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+  else if (G_IS_PARAM_SPEC_DOUBLE (spec))
+    {
+      GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec);
+
+      lower = describe_double_constant (pspec->minimum);
+      upper = describe_double_constant (pspec->maximum);
+      if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXDOUBLE))
+	{
+	  if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE))
+	    desc = g_strdup ("");
+	  else
+	    desc = g_strdup_printf ("<= %s", upper);
+	}
+      else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE))
+	desc = g_strdup_printf (">= %s", lower);
+      else
+	desc = g_strdup_printf ("[%s,%s]", lower, upper);
+      g_free (lower);
+      g_free (upper);
+    }
+#if GLIB_CHECK_VERSION (2, 12, 0)
+  else if (G_IS_PARAM_SPEC_GTYPE (spec))
+    {
+      GParamSpecGType *pspec = G_PARAM_SPEC_GTYPE (spec);
+      gboolean is_pointer;
+
+      desc = g_strdup (get_type_name (pspec->is_a_type, &is_pointer));
+    }
+#endif
+#if GLIB_CHECK_VERSION (2, 25, 9)
+  else if (G_IS_PARAM_SPEC_VARIANT (spec))
+    {
+      GParamSpecVariant *pspec = G_PARAM_SPEC_VARIANT (spec);
+      gchar *variant_type;
+
+      variant_type = g_variant_type_dup_string (pspec->type);
+      desc = g_strdup_printf ("GVariant<%s>", variant_type);
+      g_free (variant_type);
+    }
+#endif
+  else
+    {
+      desc = g_strdup ("");
+    }
+
+  return desc;
+}
+
+static gchar*
+describe_default (GParamSpec *spec)
+{
+  gchar *desc;
+
+  if (G_IS_PARAM_SPEC_CHAR (spec))
+    {
+      GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec);
+
+      desc = g_strdup_printf ("%d", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_UCHAR (spec))
+    {
+      GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec);
+
+      desc = g_strdup_printf ("%u", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_BOOLEAN (spec))
+    {
+      GParamSpecBoolean *pspec = G_PARAM_SPEC_BOOLEAN (spec);
+
+      desc = g_strdup_printf ("%s", pspec->default_value ? "TRUE" : "FALSE");
+    }
+  else if (G_IS_PARAM_SPEC_INT (spec))
+    {
+      GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec);
+
+      desc = g_strdup_printf ("%d", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_UINT (spec))
+    {
+      GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec);
+
+      desc = g_strdup_printf ("%u", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_LONG (spec))
+    {
+      GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec);
+
+      desc = g_strdup_printf ("%ld", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_LONG (spec))
+    {
+      GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec);
+
+      desc = g_strdup_printf ("%lu", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_INT64 (spec))
+    {
+      GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec);
+
+      desc = g_strdup_printf ("%" G_GINT64_FORMAT, pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_UINT64 (spec))
+    {
+      GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec);
+
+      desc = g_strdup_printf ("%" G_GUINT64_FORMAT, pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_UNICHAR (spec))
+    {
+      GParamSpecUnichar *pspec = G_PARAM_SPEC_UNICHAR (spec);
+
+      if (g_unichar_isprint (pspec->default_value))
+	desc = g_strdup_printf ("'%c'", pspec->default_value);
+      else
+	desc = g_strdup_printf ("%u", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_ENUM (spec))
+    {
+      GParamSpecEnum *pspec = G_PARAM_SPEC_ENUM (spec);
+
+      GEnumValue *value = g_enum_get_value (pspec->enum_class, pspec->default_value);
+      if (value)
+	desc = g_strdup_printf ("%s", value->value_name);
+      else
+	desc = g_strdup_printf ("%d", pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_FLAGS (spec))
+    {
+      GParamSpecFlags *pspec = G_PARAM_SPEC_FLAGS (spec);
+      guint default_value;
+      GString *acc;
+
+      default_value = pspec->default_value;
+      acc = g_string_new ("");
+
+      while (default_value)
+	{
+	  GFlagsValue *value = g_flags_get_first_value (pspec->flags_class, default_value);
+
+	  if (!value)
+	    break;
+
+	  if (acc->len > 0)
+	    g_string_append (acc, "|");
+	  g_string_append (acc, value->value_name);
+
+	  default_value &= ~value->value;
+	}
+
+      if (default_value == 0)
+	desc = g_string_free (acc, FALSE);
+      else
+	{
+	  desc = g_strdup_printf ("%d", pspec->default_value);
+	  g_string_free (acc, TRUE);
+	}
+    }
+  else if (G_IS_PARAM_SPEC_FLOAT (spec))
+    {
+      GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec);
+
+      /* make sure floats are output with a decimal dot irrespective of
+       * current locale. Use formatd since we want human-readable numbers
+       * and do not need the exact same bit representation when deserialising */
+      desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE);
+      g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g",
+          pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_DOUBLE (spec))
+    {
+      GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec);
+
+      /* make sure floats are output with a decimal dot irrespective of
+       * current locale. Use formatd since we want human-readable numbers
+       * and do not need the exact same bit representation when deserialising */
+      desc = g_malloc0 (G_ASCII_DTOSTR_BUF_SIZE);
+      g_ascii_formatd (desc, G_ASCII_DTOSTR_BUF_SIZE, "%g",
+          pspec->default_value);
+    }
+  else if (G_IS_PARAM_SPEC_STRING (spec))
+    {
+      GParamSpecString *pspec = G_PARAM_SPEC_STRING (spec);
+
+      if (pspec->default_value)
+	{
+	  gchar *esc = g_strescape (pspec->default_value, NULL);
+
+	  desc = g_strdup_printf ("\\"%s\\"", esc);
+
+	  g_free (esc);
+	}
+      else
+	desc = g_strdup_printf ("NULL");
+    }
+  else
+    {
+      desc = g_strdup ("");
+    }
+
+  return desc;
+}
+
+
+static void
+output_object_args (FILE *fp, GType object_type)
+{
+  gpointer class;
+  const gchar *object_class_name;
+  guint arg;
+  gchar flags[16], *pos;
+  GParamSpec **properties;
+  guint n_properties;
+  gboolean child_prop;
+  gboolean style_prop;
+  gboolean is_pointer;
+  const gchar *type_name;
+  gchar *type_desc;
+  gchar *default_value;
+
+  if (G_TYPE_IS_OBJECT (object_type))
+    {
+      class = g_type_class_peek (object_type);
+      if (!class)
+	return;
+
+      properties = g_object_class_list_properties (class, &n_properties);
+    }
+#if GLIB_MAJOR_VERSION > 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 3)
+  else if (G_TYPE_IS_INTERFACE (object_type))
+    {
+      class = g_type_default_interface_ref (object_type);
+
+      if (!class)
+	return;
+
+      properties = g_object_interface_list_properties (class, &n_properties);
+    }
+#endif
+  else
+    return;
+
+  object_class_name = g_type_name (object_type);
+
+  child_prop = FALSE;
+  style_prop = FALSE;
+
+  while (TRUE) {
+    qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs);
+    for (arg = 0; arg < n_properties; arg++)
+      {
+        GParamSpec *spec = properties[arg];
+        const gchar *nick, *blurb, *dot;
+
+        if (spec->owner_type != object_type)
+          continue;
+
+        pos = flags;
+        /* We use one-character flags for simplicity. */
+        if (child_prop && !style_prop)
+   	  *pos++ = 'c';
+        if (style_prop)
+   	  *pos++ = 's';
+        if (spec->flags & G_PARAM_READABLE)
+ 	  *pos++ = 'r';
+        if (spec->flags & G_PARAM_WRITABLE)
+	  *pos++ = 'w';
+        if (spec->flags & G_PARAM_CONSTRUCT)
+	  *pos++ = 'x';
+        if (spec->flags & G_PARAM_CONSTRUCT_ONLY)
+	  *pos++ = 'X';
+        *pos = 0;
+
+        nick = g_param_spec_get_nick (spec);
+        blurb = g_param_spec_get_blurb (spec);
+
+        dot = "";
+        if (blurb) {
+          int str_len = strlen (blurb);
+          if (str_len > 0  && blurb[str_len - 1] != '.')
+            dot = ".";
+        }
+
+	type_desc = describe_type (spec);
+	default_value = describe_default (spec);
+	type_name = get_type_name (spec->value_type, &is_pointer);
+        fprintf (fp, "<ARG>\\n<NAME>%s::%s</NAME>\\n<TYPE>%s%s</TYPE>\\n<RANGE>%s</RANGE>\\n<FLAGS>%s</FLAGS>\\n<NICK>%s</NICK>\\n<BLURB>%s%s</BLURB>\\n<DEFAULT>%s</DEFAULT>\\n</ARG>\\n\\n",
+	         object_class_name, g_param_spec_get_name (spec), type_name, is_pointer ? "*" : "", type_desc, flags, nick ? nick : "(null)", blurb ? blurb : "(null)", dot, default_value);
+	g_free (type_desc);
+	g_free (default_value);
+      }
+
+    g_free (properties);
+
+#ifdef GTK_IS_CONTAINER_CLASS
+    if (!child_prop && GTK_IS_CONTAINER_CLASS (class)) {
+      properties = gtk_container_class_list_child_properties (class, &n_properties);
+      child_prop = TRUE;
+      continue;
+    }
+#endif
+
+#ifdef GTK_IS_CELL_AREA_CLASS
+    if (!child_prop && GTK_IS_CELL_AREA_CLASS (class)) {
+      properties = gtk_cell_area_class_list_cell_properties (class, &n_properties);
+      child_prop = TRUE;
+      continue;
+    }
+#endif
+
+#ifdef GTK_IS_WIDGET_CLASS
+#if GTK_CHECK_VERSION(2,1,0)
+    if (!style_prop && GTK_IS_WIDGET_CLASS (class)) {
+      properties = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (class), &n_properties);
+      style_prop = TRUE;
+      continue;
+    }
+#endif
+#endif
+
+    break;
+  }
+}
+EOT
+
+close OUTPUT;
+
+# Compile and run our file
+
+$CC = $ENV{CC} ? $ENV{CC} : "gcc";
+$LD = $ENV{LD} ? $ENV{LD} : $CC;
+$CFLAGS = $ENV{CFLAGS} ? "$ENV{CFLAGS}" : "";
+$LDFLAGS = $ENV{LDFLAGS} ? $ENV{LDFLAGS} : "";
+
+my $o_file;
+if ($CC =~ /libtool/) {
+  $o_file  = "$MODULE-scan.lo"
+} else {
+  $o_file = "$MODULE-scan.o"
+}
+
+my $stdout="";
+if (!defined($VERBOSE) or $VERBOSE eq "0") {
+    $stdout=">/dev/null";
+}
+
+# Compiling scanner
+$command = "$CC $stdout $CFLAGS -c -o $o_file $MODULE-scan.c";
+system("($command)") == 0 or die "Compilation of scanner failed: $!\n";
+
+# Linking scanner
+$command = "$LD $stdout -o $MODULE-scan $o_file $LDFLAGS";
+system($command) == 0 or die "Linking of scanner failed: $!\n";
+
+# Running scanner $MODULE-scan ";
+system("sh -c ./$MODULE-scan") == 0 or die "Scan failed: $!\n";
+
+if (!defined($ENV{"GTK_DOC_KEEP_INTERMEDIATE"})) {
+  unlink "./$MODULE-scan.c", "./$MODULE-scan.o", "./$MODULE-scan.lo", "./$MODULE-scan";
+}
+
+&UpdateFileIfChanged ($old_hierarchy_filename, $new_hierarchy_filename, 0);
+# we will merge these in scangobj-merge.py
+#&UpdateFileIfChanged ($old_interfaces_filename, $new_interfaces_filename, 0);
+#&UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0);
+#&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0);
+#&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0);
+
diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
new file mode 100644
index 0000000..8cc42e7
--- /dev/null
+++ b/common/gtk-doc-plugins.mak
@@ -0,0 +1,387 @@
+# This is an include file specifically tuned for building documentation
+# for GStreamer plug-ins
+
+help:
+	@echo
+	@echo "If you are a doc maintainer, run 'make update' to update"
+	@echo "the documentation files maintained in git"
+	@echo
+	@echo Other useful make targets:
+	@echo
+	@echo  check-inspected-versions: make sure the inspected plugin info
+	@echo                            is up to date before a release
+	@echo
+
+# update the stuff maintained by doc maintainers
+update:
+	$(MAKE) scanobj-update
+	$(MAKE) check-outdated-docs
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+# thomas: make docs parallel installable
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@
+
+MAINTAINER_DOC_STAMPS =			\
+	scanobj-build.stamp
+
+EXTRA_DIST = 				\
+	$(MAINTAINER_DOC_STAMPS)		\
+	$(srcdir)/inspect/*.xml		\
+	$(SCANOBJ_FILES)		\
+	$(content_files)		\
+	$(extra_files)			\
+	$(HTML_IMAGES)			\
+	$(DOC_MAIN_SGML_FILE)	\
+	$(DOC_OVERRIDES)		\
+	$(DOC_MODULE)-sections.txt
+
+# we don't add scanobj-build.stamp here since they are built manually by docs
+# maintainers and result is commited to git
+DOC_STAMPS =				\
+	scan-build.stamp		\
+	tmpl-build.stamp		\
+	sgml-build.stamp		\
+	html-build.stamp		\
+	scan.stamp			\
+	tmpl.stamp			\
+	sgml.stamp			\
+	html.stamp
+
+# files generated/updated by gtkdoc-scangobj
+SCANOBJ_FILES =				\
+	$(DOC_MODULE).args              \
+	$(DOC_MODULE).hierarchy         \
+	$(DOC_MODULE).interfaces        \
+	$(DOC_MODULE).prerequisites     \
+	$(DOC_MODULE).signals           \
+	$(DOC_MODULE).types
+
+SCANOBJ_FILES_O =			\
+	.libs/$(DOC_MODULE)-scan.o
+
+# files generated/updated by gtkdoc-scan
+SCAN_FILES =				\
+	$(DOC_MODULE)-sections.txt	\
+	$(DOC_MODULE)-overrides.txt	\
+	$(DOC_MODULE)-decl.txt		\
+	$(DOC_MODULE)-decl-list.txt
+
+
+REPORT_FILES = \
+	$(DOC_MODULE)-undocumented.txt \
+	$(DOC_MODULE)-undeclared.txt \
+	$(DOC_MODULE)-unused.txt
+
+CLEANFILES = \
+	$(SCANOBJ_FILES_O) \
+	$(REPORT_FILES) \
+	$(DOC_STAMPS) \
+	inspect-registry.xml
+
+INSPECT_DIR = inspect
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+
+### inspect GStreamer plug-ins; done by documentation maintainer ###
+
+# only look at the plugins in this module when building inspect .xml stuff
+INSPECT_REGISTRY=$(top_builddir)/docs/plugins/inspect-registry.xml
+INSPECT_ENVIRONMENT=\
+	LC_ALL=C \
+	GST_PLUGIN_SYSTEM_PATH= \
+	GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(top_builddir)/plugins:$(top_builddir)/src:$(top_builddir)/gnl \
+	GST_REGISTRY=$(INSPECT_REGISTRY) \
+	PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(INSPECT_EXTRA_ENVIRONMENT)
+
+#### scan gobjects; done by documentation maintainer ####
+scanobj-update:
+	-rm scanobj-build.stamp
+	$(MAKE) scanobj-build.stamp
+
+# gstdoc-scanobj produces 5 output files (.new)
+# scangobj-merge.py merges them into the file which we commit later
+# TODO: also merge the hierarchy
+scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles)
+	@echo "  DOC   Introspecting gobjects"
+	@if test x"$(srcdir)" != x. ; then				\
+	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+	    do								\
+	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+	    done;							\
+	fi;								\
+	mkdir -p $(INSPECT_DIR); \
+	scanobj_options=""; \
+	if test "x$(V)" = "x1"; then \
+	    scanobj_options="--verbose"; \
+	fi; \
+	$(INSPECT_ENVIRONMENT) 					\
+	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+	CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)"	\
+	LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
+	$(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)"	\
+	    --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) &&		\
+	    echo "  DOC   Merging introspection data" && \
+	    $(PYTHON)						\
+	    $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE);	\
+	if test x"$(srcdir)" != x. ; then				\
+	    for f in $(SCANOBJ_FILES);					\
+	    do								\
+	        cmp -s ./$$f $(srcdir)/$$f || cp ./$$f $(srcdir)/ ;		\
+	    done;							\
+	fi;								\
+	touch scanobj-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(SCANOBJ_FILES_O): scan-build.stamp
+	@true
+
+### scan headers; done on every build ###
+scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp
+	@echo '  DOC   Scanning header files'
+	@if test x"$(srcdir)" != x. ; then				\
+	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+	    do								\
+	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+	    done;							\
+	fi
+	@_source_dir='' ;						\
+	for i in $(DOC_SOURCE_DIR) ; do					\
+	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+	done ;							        \
+	gtkdoc-scan							\
+	    $(SCAN_OPTIONS) $(EXTRA_HFILES)				\
+	    --module=$(DOC_MODULE)					\
+	    $${_source_dir}             				\
+	    --ignore-headers="$(IGNORE_HFILES)";			\
+	touch scan-build.stamp
+
+#### update templates; done on every build ####
+
+# in a non-srcdir build, we need to copy files from the previous step
+# and the files from previous runs of this step
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES)
+	@echo '  DOC   Rebuilding template files'
+	@if test x"$(srcdir)" != x. ; then				\
+	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+	    do								\
+	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+	    done;							\
+	fi
+	@gtkdoc-mktmpl --module=$(DOC_MODULE)
+	@$(PYTHON) \
+		$(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl
+	@touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+	@true
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
+	@echo '  DOC   Building XML'
+	@-mkdir -p xml
+	@for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
+	    xsltproc --stringparam module $(MODULE) \
+		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
+	@for f in $(EXAMPLE_CFILES); do \
+		$(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done
+	@gtkdoc-mkdb \
+		--module=$(DOC_MODULE) \
+		--source-dir=$(DOC_SOURCE_DIR) \
+		 --expand-content-files="$(expand_content_files)" \
+		--main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \
+		--output-format=xml \
+		--ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
+		$(MKDB_OPTIONS)
+	@cp ../version.entities xml
+	@touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+	@true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+	@echo '  DOC   Building HTML'
+	@rm -rf html
+	@mkdir html
+	@cp $(srcdir)/$(DOC_MAIN_SGML_FILE) html
+	@for f in $(content_files); do cp $(srcdir)/$$f html; done
+	@cp -pr xml html
+	@cp ../version.entities html
+	@mkhtml_options=""; \
+	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+	if test "$(?)" = "0"; then \
+	  if test "x$(V)" = "x1"; then \
+	    mkhtml_options="$$mkhtml_options --verbose"; \
+	  fi; \
+	fi; \
+	cd html && gtkdoc-mkhtml $$mkhtml_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE)
+	@mv html/index.sgml html/index.sgml.bak
+	@$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml
+	@rm -f html/index.sgml.bak
+	@rm -f html/$(DOC_MAIN_SGML_FILE)
+	@rm -rf html/xml
+	@rm -f html/version.entities
+	@test "x$(HTML_IMAGES)" = "x" || for i in "" $(HTML_IMAGES) ; do \
+	    if test "$$i" != ""; then cp $(srcdir)/$$i html ; fi; done
+	@echo '  DOC   Fixing cross-references'
+	@gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+	@touch html-build.stamp
+
+clean-local-gtkdoc:
+	@rm -rf xml tmpl html
+# clean files copied for nonsrcdir templates build
+	@if test x"$(srcdir)" != x. ; then \
+	    rm -rf $(SCANOBJ_FILES) $(SCAN_FILES) $(REPORT_FILES) \
+	        $(MAINTAINER_DOC_STAMPS); \
+	fi
+else
+all-local:
+clean-local-gtkdoc:
+endif
+
+clean-local: clean-local-gtkdoc
+	@rm -f *~ *.bak
+	@rm -rf .libs
+
+distclean-local:
+	@rm -f $(REPORT_FILES) \
+	        $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	@rm -rf tmpl/*.sgml.bak
+	@rm -f $(DOC_MODULE).hierarchy
+	@rm -f *.stamp || true
+	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+	    rm -f $(DOC_MODULE)-docs.sgml ; \
+	    rm -f $(DOC_MODULE).types ; \
+	    rm -f $(DOC_MODULE).interfaces ; \
+	    rm -f $(DOC_MODULE)-overrides.txt ; \
+	    rm -f $(DOC_MODULE).prerequisites ; \
+	    rm -f $(DOC_MODULE)-sections.txt ; \
+	    rm -rf tmpl/*.sgml ; \
+	    rm -rf $(INSPECT_DIR); \
+	fi
+	@rm -rf *.o
+
+MAINTAINERCLEANFILES = $(MAINTAINER_DOC_STAMPS)
+
+# thomas: make docs parallel installable; devhelp requires majorminor too
+install-data-local:
+	(installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \
+	if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  pngfiles=`echo ./html/*.png`; \
+	  if test "$$pngfiles" != './html/*.png'; then \
+	    for i in $$pngfiles; do \
+	      echo '-- Installing '$$i ; \
+	      $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	    done; \
+	  fi; \
+	  echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \
+	  if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \
+	            $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
+	            $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \
+	  fi; \
+	  (which gtkdoc-rebase >/dev/null && \
+	    gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+	fi)
+uninstall-local:
+	if test -d $(DESTDIR)$(TARGET_DIR); then \
+	  rm -rf $(DESTDIR)$(TARGET_DIR)/*; \
+	  rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \
+	else \
+	  echo '-- Nothing to uninstall' ; \
+	fi;
+
+#
+# Checks
+#
+if ENABLE_GTK_DOC
+check-hierarchy: $(DOC_MODULE).hierarchy
+	@if grep '	' $(DOC_MODULE).hierarchy; then \
+	    echo "$(DOC_MODULE).hierarchy contains tabs, please fix"; \
+	    /bin/false; \
+	fi
+
+check: check-hierarchy
+endif
+
+# wildcard is apparently not portable to other makes, hence the use of find
+inspect_files = $(shell find $(srcdir)/$(INSPECT_DIR) -name '*.xml')
+
+check-inspected-versions:
+	@echo Checking plugin versions of inspected plugin data ...; \
+	fail=0 ; \
+	for each in $(inspect_files) ; do \
+	  if (grep -H '<version>' $$each | grep -v '<version>$(VERSION)'); then \
+	    echo $$each should be fixed to say version $(VERSION) or be removed ; \
+	    echo "sed -i -e 's/<version.*version>/<version>$(VERSION)<\/version>/'" $$each; \
+	    echo ; \
+	    fail=1; \
+	  fi ; \
+	done ; \
+	exit $$fail
+
+check-outdated-docs:
+	$(AM_V_GEN)echo Checking for outdated plugin inspect data ...; \
+	fail=0 ; \
+	if [ -d $(top_srcdir)/.git/ ]; then \
+	  files=`find $(srcdir)/inspect/ -name '*xml'`; \
+	  for f in $$files; do \
+	    ver=`grep '<version>$(PACKAGE_VERSION)</version>' $$f`; \
+	    if test "x$$ver" = "x"; then \
+	      plugin=`echo $$f | sed -e 's/^.*plugin-//' -e 's/.xml//'`; \
+	      # echo "Checking $$plugin $$f"; \
+	      pushd "$(top_srcdir)" >/dev/null; \
+	      pinit=`git grep -A3 GST_PLUGIN_DEFINE -- ext/ gst/ sys/ | grep "\"$$plugin\""`; \
+	      popd >/dev/null; \
+	      # echo "[$$pinit]"; \
+	      if test "x$$pinit" = "x"; then \
+	        printf " **** outdated docs for plugin %-15s: %s\n" $$plugin $$f; \
+	        fail=1; \
+	      fi; \
+	    fi; \
+	  done; \
+	fi ; \
+	exit $$fail
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+	@false
+endif
+
+# FIXME: decide whether we want to dist generated html or not
+# also this only works, if the project has been build before
+# we could dist html only if its there, but that might lead to missing html in
+# tarballs
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/html
+	cp html/* $(distdir)/html
+	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+	cd $(distdir) && rm -f $(DISTCLEANFILES)
+	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs check-outdated-docs inspect
+
+# avoid spurious build errors when distchecking with -jN
+.NOTPARALLEL:
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
new file mode 100644
index 0000000..dd2b5a5
--- /dev/null
+++ b/common/gtk-doc.mak
@@ -0,0 +1,231 @@
+###########################################################################
+# Everything below here is generic and you shouldn't need to change it.
+###########################################################################
+# thomas: except of course that we did
+
+# thomas: copied from glib-2
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+# thomas: make docs parallel installable
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@
+
+EXTRA_DIST = 				\
+	$(content_files)		\
+	$(extra_files)			\
+	$(HTML_IMAGES)			\
+	$(DOC_MAIN_SGML_FILE)		\
+	$(DOC_MODULE).types		\
+	$(DOC_OVERRIDES)		\
+	$(DOC_MODULE)-sections.txt
+
+DOC_STAMPS =				\
+	setup-build.stamp		\
+	scan-build.stamp		\
+	sgml-build.stamp		\
+	html-build.stamp		\
+	sgml.stamp		\
+	html.stamp
+
+SCANOBJ_FILES =				\
+	$(DOC_MODULE).args		\
+	$(DOC_MODULE).hierarchy		\
+	$(DOC_MODULE).interfaces		\
+	$(DOC_MODULE).prerequisites	\
+	$(DOC_MODULE).signals		\
+	.libs/$(DOC_MODULE)-scan.o
+
+REPORT_FILES = \
+	$(DOC_MODULE)-undocumented.txt \
+	$(DOC_MODULE)-undeclared.txt \
+	$(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) doc-registry.xml
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+
+#### setup ####
+
+setup-build.stamp: $(content_files)
+	-@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+	    echo '  DOC   Preparing build'; \
+	    files=`echo $(DOC_MAIN_SGML_FILE) $(DOC_OVERRIDES) $(DOC_MODULE)-sections.txt $(DOC_MODULE).types $(content_files)`; \
+	    if test "x$$files" != "x" ; then \
+	        for file in $$files ; do \
+	            test -f $(abs_srcdir)/$$file && \
+	                cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+	        done; \
+	    fi; \
+	fi
+	@touch setup-build.stamp
+
+#### scan ####
+
+# in the case of non-srcdir builds, the built gst directory gets added
+# to gtk-doc scanning; but only then, to avoid duplicates
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+	@echo '  DOC   Scanning header files'
+	@_source_dir='' ;						\
+	for i in $(DOC_SOURCE_DIR) ; do					\
+	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+	done ;							        \
+	gtkdoc-scan							\
+		$(SCAN_OPTIONS) $(EXTRA_HFILES)				\
+		--module=$(DOC_MODULE)					\
+		$${_source_dir}         				\
+		--ignore-headers="$(IGNORE_HFILES)"
+	@if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then	\
+	    echo "  DOC   Introspecting gobjects"; \
+	    GST_PLUGIN_SYSTEM_PATH=`cd $(top_builddir) && pwd`		\
+	    GST_PLUGIN_PATH=						\
+	    GST_REGISTRY=doc-registry.xml				\
+	    $(GTKDOC_EXTRA_ENVIRONMENT)					\
+	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+	    CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)"				\
+	    LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
+	    gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)"	\
+	        --module=$(DOC_MODULE) ;				\
+	else								\
+	    for i in $(SCANOBJ_FILES) ; do				\
+	       test -f $$i || touch $$i ;				\
+	    done							\
+	fi
+	@touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+	@true
+
+#### xml ####
+
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files)
+	@echo '  DOC   Building XML'
+	@gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+	@cp ../version.entities xml
+	@touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+	@true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+	@echo '  DOC   Building HTML'
+	@rm -rf html
+	@mkdir html
+	@cp -pr xml html
+	@cp ../version.entities ./
+	@mkhtml_options=""; \
+	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+	if test "$(?)" = "0"; then \
+	  if test "x$(V)" = "x1"; then \
+	    mkhtml_options="$$mkhtml_options --verbose"; \
+	  fi; \
+	fi; \
+	@gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+	if test "$(?)" = "0"; then \
+	  mkhtml_options=--path="$(abs_srcdir)"; \
+	fi; \
+	cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+	@mv html/index.sgml html/index.sgml.bak
+	@$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml
+	@rm -f html/index.sgml.bak
+	@rm -rf html/xml
+	@rm -f version.entities
+	@test "x$(HTML_IMAGES)" = "x" ||  ( cd $(srcdir) && cp $(HTML_IMAGES) $(abs_builddir)/html )
+	@echo '  DOC   Fixing cross-references'
+	@gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+	@touch html-build.stamp
+
+clean-local-gtkdoc:
+	@rm -rf xml tmpl html
+# clean files copied for nonsrcdir templates build
+	@if test x"$(srcdir)" != x. ; then \
+	        rm -rf $(DOC_MODULE).types; \
+	fi
+else
+all-local:
+clean-local-gtkdoc:
+endif
+
+clean-local: clean-local-gtkdoc
+	@rm -f *~ *.bak
+	@rm -rf .libs
+
+distclean-local:
+	@rm -f $(REPORT_FILES) \
+	        $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	@rm -rf tmpl/*.sgml.bak
+	@rm -f $(DOC_MODULE).hierarchy
+	@rm -f *.stamp || true
+	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+	    rm -f $(DOC_MAIN_SGML_FILE) ; \
+	    rm -f $(DOC_OVERRIDES) ; \
+	    rm -f $(DOC_MODULE).types ; \
+	    rm -f $(DOC_MODULE).interfaces ; \
+	    rm -f $(DOC_MODULE).prerequisites ; \
+	    rm -f $(DOC_MODULE)-sections.txt ; \
+	    rm -f $(content_files) ; \
+	    rm -rf tmpl/*.sgml ; \
+	fi
+	@rm -rf *.o
+
+maintainer-clean-local: clean
+	@cd $(srcdir) && rm -rf html \
+		xml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+# thomas: make docs parallel installable; devhelp requires majorminor too
+install-data-local:
+	(installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \
+	if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \
+	  if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \
+	            $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
+	            $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \
+	  fi; \
+	  (which gtkdoc-rebase >/dev/null && \
+	    gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+	fi)
+uninstall-local:
+	if test -d $(DESTDIR)$(TARGET_DIR); then \
+	  rm -rf $(DESTDIR)$(TARGET_DIR)/*; \
+	  rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \
+	else \
+	  echo '-- Nothing to uninstall' ; \
+	fi;
+
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+	@false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/html
+	cp html/* $(distdir)/html
+	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+	cd $(distdir) && rm -f $(DISTCLEANFILES)
+	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# avoid spurious build errors when distchecking with -jN
+.NOTPARALLEL:
diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am
new file mode 100644
index 0000000..2ddb8a7
--- /dev/null
+++ b/common/m4/Makefile.am
@@ -0,0 +1,42 @@
+EXTRA_DIST = \
+	README \
+	as-ac-expand.m4 \
+	as-auto-alt.m4 \
+	as-compiler-flag.m4 \
+	as-compiler.m4 \
+	as-docbook.m4 \
+	as-gcc-inline-assembly.m4 \
+	as-libtool.m4 \
+	as-libtool-tags.m4 \
+	as-objc.m4 \
+	as-python.m4 \
+	as-scrub-include.m4 \
+	as-version.m4 \
+	ax_create_stdint_h.m4 \
+	glib-gettext.m4 \
+	gst-arch.m4 \
+	gst-args.m4 \
+	gst-check.m4 \
+	gst-debuginfo.m4 \
+	gst-default.m4 \
+	gst-doc.m4 \
+	gst-dowhile.m4 \
+	gst-error.m4 \
+	gst-feature.m4 \
+	gst-function.m4 \
+	gst-gettext.m4 \
+	gst-glib2.m4 \
+	gst-libxml2.m4 \
+	gst-parser.m4 \
+	gst-package-release-datetime.m4 \
+	gst-platform.m4 \
+	gst-plugindir.m4 \
+	gst-plugin-docs.m4 \
+	gst-valgrind.m4 \
+	gst-x11.m4 \
+	gst.m4 \
+	gtk-doc.m4 \
+	introspection.m4 \
+	pkg.m4 \
+	check.m4 \
+	orc.m4
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
new file mode 100644
index 0000000..3425366
--- /dev/null
+++ b/common/m4/Makefile.in
@@ -0,0 +1,599 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = common/m4
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+	README \
+	as-ac-expand.m4 \
+	as-auto-alt.m4 \
+	as-compiler-flag.m4 \
+	as-compiler.m4 \
+	as-docbook.m4 \
+	as-gcc-inline-assembly.m4 \
+	as-libtool.m4 \
+	as-libtool-tags.m4 \
+	as-objc.m4 \
+	as-python.m4 \
+	as-scrub-include.m4 \
+	as-version.m4 \
+	ax_create_stdint_h.m4 \
+	glib-gettext.m4 \
+	gst-arch.m4 \
+	gst-args.m4 \
+	gst-check.m4 \
+	gst-debuginfo.m4 \
+	gst-default.m4 \
+	gst-doc.m4 \
+	gst-dowhile.m4 \
+	gst-error.m4 \
+	gst-feature.m4 \
+	gst-function.m4 \
+	gst-gettext.m4 \
+	gst-glib2.m4 \
+	gst-libxml2.m4 \
+	gst-parser.m4 \
+	gst-package-release-datetime.m4 \
+	gst-platform.m4 \
+	gst-plugindir.m4 \
+	gst-plugin-docs.m4 \
+	gst-valgrind.m4 \
+	gst-x11.m4 \
+	gst.m4 \
+	gtk-doc.m4 \
+	introspection.m4 \
+	pkg.m4 \
+	check.m4 \
+	orc.m4
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/m4/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu common/m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/common/m4/README b/common/m4/README
new file mode 100644
index 0000000..867a344
--- /dev/null
+++ b/common/m4/README
@@ -0,0 +1,3 @@
+All aclocal .m4 files we need are put here and cat'd to acinclude.m4 in
+the source root.  Official ones (taken from the relevant devel packages)
+are named as-is, unofficial ones (or changed ones) get a gst-prefix.
diff --git a/common/m4/as-ac-expand.m4 b/common/m4/as-ac-expand.m4
new file mode 100644
index 0000000..d6c9e33
--- /dev/null
+++ b/common/m4/as-ac-expand.m4
@@ -0,0 +1,43 @@
+dnl as-ac-expand.m4 0.2.0
+dnl autostars m4 macro for expanding directories using configure's prefix
+dnl thomas@apestaart.org
+
+dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
+dnl example
+dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
+dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
+
+AC_DEFUN([AS_AC_EXPAND],
+[
+  EXP_VAR=[$1]
+  FROM_VAR=[$2]
+
+  dnl first expand prefix and exec_prefix if necessary
+  prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+  dnl if no prefix given, then use /usr/local, the default prefix
+  if test "x$prefix" = "xNONE"; then
+    prefix="$ac_default_prefix"
+  fi
+  dnl if no exec_prefix given, then use prefix
+  if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+  dnl loop until it doesn't change anymore
+  while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var" = "x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+  dnl clean up
+  full_var=$new_full_var
+  AC_SUBST([$1], "$full_var")
+
+  dnl restore prefix and exec_prefix
+  prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+])
diff --git a/common/m4/as-auto-alt.m4 b/common/m4/as-auto-alt.m4
new file mode 100644
index 0000000..3f7920d
--- /dev/null
+++ b/common/m4/as-auto-alt.m4
@@ -0,0 +1,50 @@
+dnl as-auto-alt.m4 0.0.2
+dnl autostars m4 macro for supplying alternate autotools versions to configure
+dnl thomas@apestaart.org
+dnl
+dnl AS_AUTOTOOLS_ALTERNATE()
+dnl
+dnl supplies --with arguments for autoconf, autoheader, automake, aclocal
+
+AC_DEFUN([AS_AUTOTOOLS_ALTERNATE],
+[
+  dnl allow for different autoconf version
+  AC_ARG_WITH(autoconf,
+    AC_HELP_STRING([--with-autoconf],
+                   [use a different autoconf for regeneration of Makefiles]),
+    [
+      unset AUTOCONF
+      AM_MISSING_PROG(AUTOCONF, ${withval})
+      AC_MSG_NOTICE([Using $AUTOCONF as autoconf])
+    ])
+
+  dnl allow for different autoheader version
+  AC_ARG_WITH(autoheader,
+    AC_HELP_STRING([--with-autoheader],
+                   [use a different autoheader for regeneration of Makefiles]),
+    [
+      unset AUTOHEADER
+      AM_MISSING_PROG(AUTOHEADER, ${withval})
+      AC_MSG_NOTICE([Using $AUTOHEADER as autoheader])
+    ])
+
+  dnl allow for different automake version
+  AC_ARG_WITH(automake,
+    AC_HELP_STRING([--with-automake],
+                   [use a different automake for regeneration of Makefiles]),
+    [
+      unset AUTOMAKE
+      AM_MISSING_PROG(AUTOMAKE, ${withval})
+      AC_MSG_NOTICE([Using $AUTOMAKE as automake])
+    ])
+
+  dnl allow for different aclocal version
+  AC_ARG_WITH(aclocal,
+    AC_HELP_STRING([--with-aclocal],
+                   [use a different aclocal for regeneration of Makefiles]),
+    [
+      unset ACLOCAL
+      AM_MISSING_PROG(ACLOCAL, ${withval})
+      AC_MSG_NOTICE([Using $ACLOCAL as aclocal])
+    ])
+])
diff --git a/common/m4/as-compiler-flag.m4 b/common/m4/as-compiler-flag.m4
new file mode 100644
index 0000000..882a4c7
--- /dev/null
+++ b/common/m4/as-compiler-flag.m4
@@ -0,0 +1,64 @@
+dnl as-compiler-flag.m4 0.1.0
+
+dnl autostars m4 macro for detection of compiler flags
+
+dnl David Schleef <ds@schleef.org>
+dnl Tim-Philipp Müller <tim centricular net>
+
+dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
+dnl Tries to compile with the given CFLAGS.
+dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
+dnl and ACTION-IF-NOT-ACCEPTED otherwise.
+
+AC_DEFUN([AS_COMPILER_FLAG],
+[
+  AC_MSG_CHECKING([to see if compiler understands $1])
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $1"
+
+  AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    $2
+    true
+  else
+    $3
+    true
+  fi
+  AC_MSG_RESULT([$flag_ok])
+])
+
+dnl AS_CXX_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
+dnl Tries to compile with the given CPPFLAGS.
+dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
+dnl and ACTION-IF-NOT-ACCEPTED otherwise.
+
+AC_DEFUN([AS_CXX_COMPILER_FLAG],
+[
+  AC_REQUIRE([AC_PROG_CXX])
+
+  AC_MSG_CHECKING([to see if c++ compiler understands $1])
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $1"
+
+  AC_LANG_PUSH(C++)
+
+  AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    $2
+    true
+  else
+    $3
+    true
+  fi
+
+  AC_LANG_POP(C++)
+
+  AC_MSG_RESULT([$flag_ok])
+])
+
diff --git a/common/m4/as-compiler.m4 b/common/m4/as-compiler.m4
new file mode 100644
index 0000000..309a060
--- /dev/null
+++ b/common/m4/as-compiler.m4
@@ -0,0 +1,44 @@
+dnl as-compiler.m4 0.1.0
+
+dnl autostars m4 macro for detection of compiler flavor
+
+dnl Thomas Vander Stichele <thomas at apestaart dot org>
+
+dnl $Id: as-compiler.m4,v 1.4 2004/06/01 09:44:19 thomasvs Exp $
+
+dnl AS_COMPILER(COMPILER)
+dnl will set variable COMPILER to
+dnl - gcc
+dnl - forte
+dnl - (empty) if no guess could be made
+
+AC_DEFUN([AS_COMPILER],
+[
+  as_compiler=
+  AC_MSG_CHECKING(for compiler flavour)
+
+  dnl is it gcc ?
+  if test "x$GCC" = "xyes"; then
+    as_compiler="gcc"
+  fi
+
+  dnl is it forte ?
+  AC_TRY_RUN([
+int main
+(int argc, char *argv[])
+{
+#ifdef __sun
+  return 0;
+#else
+  return 1;
+#endif
+}
+  ], as_compiler="forte", ,)
+
+  if test "x$as_compiler" = "x"; then
+    AC_MSG_RESULT([unknown !])
+  else
+    AC_MSG_RESULT($as_compiler)
+  fi
+  [$1]=$as_compiler
+])
diff --git a/common/m4/as-docbook.m4 b/common/m4/as-docbook.m4
new file mode 100644
index 0000000..8a1b32a
--- /dev/null
+++ b/common/m4/as-docbook.m4
@@ -0,0 +1,66 @@
+dnl AS_DOCBOOK([, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl checks if xsltproc can build docbook documentation
+dnl (which is possible if the catalog is set up properly
+dnl I also tried checking for a specific version and type of docbook
+dnl but xsltproc seemed to happily run anyway, so we can't check for that
+dnl and version
+dnl this macro takes inspiration from
+dnl http://www.movement.uklinux.net/docs/docbook-autotools/configure.html
+AC_DEFUN([AS_DOCBOOK],
+[
+  XSLTPROC_FLAGS=--nonet
+  DOCBOOK_ROOT=
+  TYPE_LC=xml
+  TYPE_UC=XML
+  DOCBOOK_VERSION=4.1.2
+
+  if test ! -f /etc/xml/catalog; then
+    for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/ /usr/local/share/xsl/docbook ;
+    do
+      if test -d "$i"; then
+        DOCBOOK_ROOT=$i
+      fi
+    done
+  else
+    XML_CATALOG=/etc/xml/catalog
+    CAT_ENTRY_START='<!--'
+    CAT_ENTRY_END='-->'
+  fi
+
+  dnl We need xsltproc to process the test
+  AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,)
+  XSLTPROC_WORKS=no
+  if test -n "$XSLTPROC"; then
+    AC_MSG_CHECKING([whether xsltproc docbook processing works])
+
+    if test -n "$XML_CATALOG"; then
+      DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"
+    else
+      DB_FILE="$DOCBOOK_ROOT/xhtml/docbook.xsl"
+    fi
+    $XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END
+<?xml version="1.0" encoding='ISO-8859-1'?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook $TYPE_UC V$DOCBOOK_VERSION//EN" "http://www.oasis-open.org/docbook/$TYPE_LC/$DOCBOOK_VERSION/docbookx.dtd">
+<book id="test">
+</book>
+END
+    if test "$?" = 0; then
+      XSLTPROC_WORKS=yes
+    fi
+    AC_MSG_RESULT($XSLTPROC_WORKS)
+  fi
+
+  if test "x$XSLTPROC_WORKS" = "xyes"; then
+    dnl execute ACTION-IF-FOUND
+    ifelse([$1], , :, [$1])
+  else
+    dnl execute ACTION-IF-NOT-FOUND
+    ifelse([$2], , :, [$2])
+  fi
+
+  AC_SUBST(XML_CATALOG)
+  AC_SUBST(XSLTPROC_FLAGS)
+  AC_SUBST(DOCBOOK_ROOT)
+  AC_SUBST(CAT_ENTRY_START)
+  AC_SUBST(CAT_ENTRY_END)
+])
diff --git a/common/m4/as-gcc-inline-assembly.m4 b/common/m4/as-gcc-inline-assembly.m4
new file mode 100644
index 0000000..af32104
--- /dev/null
+++ b/common/m4/as-gcc-inline-assembly.m4
@@ -0,0 +1,52 @@
+dnl as-gcc-inline-assembly.m4 0.1.0
+
+dnl autostars m4 macro for detection of gcc inline assembly
+
+dnl David Schleef <ds@schleef.org>
+
+dnl $Id$
+
+dnl AS_COMPILER_FLAG(ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
+dnl Tries to compile with the given CFLAGS.
+dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
+dnl and ACTION-IF-NOT-ACCEPTED otherwise.
+
+AC_DEFUN([AS_GCC_INLINE_ASSEMBLY],
+[
+  AC_MSG_CHECKING([if compiler supports gcc-style inline assembly])
+
+  AC_TRY_COMPILE([], [
+#ifdef __GNUC_MINOR__
+#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 3004
+#error GCC before 3.4 has critical bugs compiling inline assembly
+#endif
+#endif
+__asm__ (""::) ], [flag_ok=yes], [flag_ok=no])
+
+  if test "X$flag_ok" = Xyes ; then
+    $1
+    true
+  else
+    $2
+    true
+  fi
+  AC_MSG_RESULT([$flag_ok])
+])
+
+
+AC_DEFUN([AS_GCC_ASM_POWERPC_FPU],
+[
+  AC_MSG_CHECKING([if compiler supports FPU instructions on PowerPC])
+
+  AC_TRY_COMPILE([], [__asm__ ("fadd 0,0,0"::) ], [flag_ok=yes], [flag_ok=no])
+
+  if test "X$flag_ok" = Xyes ; then
+    $1
+    true
+  else
+    $2
+    true
+  fi
+  AC_MSG_RESULT([$flag_ok])
+])
+
diff --git a/common/m4/as-libtool-tags.m4 b/common/m4/as-libtool-tags.m4
new file mode 100644
index 0000000..06f0ae4
--- /dev/null
+++ b/common/m4/as-libtool-tags.m4
@@ -0,0 +1,83 @@
+dnl as-libtool-tags.m4 0.1.4
+
+dnl autostars m4 macro for selecting libtool "tags" (languages)
+
+dnl Andy Wingo does not claim credit for this macro
+dnl backported from libtool 1.6 by Paolo Bonzini
+dnl see http://lists.gnu.org/archive/html/libtool/2003-12/msg00007.html
+
+dnl $Id$
+
+dnl AS_LIBTOOL_TAGS([tags...])
+
+dnl example
+dnl AS_LIBTOOL_TAGS([]) for only C (no fortran, etc)
+
+dnl When AC_LIBTOOL_TAGS is used, I redefine _LT_AC_TAGCONFIG
+dnl to be more similar to the libtool 1.6 implementation, which
+dnl uses an m4 loop and m4 case instead of a shell loop.  This
+dnl way the CXX/GCJ/F77/RC tests are not always expanded.
+
+dnl AS_LIBTOOL_TAGS
+dnl ---------------
+dnl tags to enable
+AC_DEFUN([AS_LIBTOOL_TAGS],
+[m4_define([_LT_TAGS],[$1])
+m4_define([_LT_AC_TAGCONFIG], [
+  # redefined LT AC TAGCONFIG
+  if test -f "$ltmain"; then
+    if test ! -f "${ofile}"; then
+      AC_MSG_WARN([output file `$ofile' does not exist])
+    fi
+
+    if test -z "$LTCC"; then
+      eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+      if test -z "$LTCC"; then
+        AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+      else
+        AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+      fi
+    fi
+
+    AC_FOREACH([_LT_TAG], _LT_TAGS,
+      echo THOMAS: tag _LT_TAG
+      [m4_case(_LT_TAG,
+      [CXX], [
+    if test -n "$CXX" && test "X$CXX" != "Xno"; then
+      echo "THOMAS: YAY CXX"
+      AC_LIBTOOL_LANG_CXX_CONFIG
+      available_tags="$available_tags _LT_TAG"
+    fi],
+      [F77], [
+    if test -n "$F77" && test "X$F77" != "Xno"; then
+      AC_LIBTOOL_LANG_F77_CONFIG
+      available_tags="$available_tags _LT_TAG"
+    fi],
+      [GCJ], [
+    if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+      AC_LIBTOOL_LANG_GCJ_CONFIG
+      available_tags="$available_tags _LT_TAG"
+    fi],
+      [RC], [
+    if test -n "$RC" && test "X$RC" != "Xno"; then
+      AC_LIBTOOL_LANG_RC_CONFIG
+      available_tags="$available_tags _LT_TAG"
+    fi],
+      [m4_errprintn(m4_location[: error: invalid tag name: ]"_LT_TAG")
+      m4_exit(1)])
+    ])
+    echo THOMAS: available tags: $available_tags
+  fi
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+    AC_MSG_NOTICE([updated available libtool tags with $available_tags.])
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+
+  fi
+
+])dnl _LT_AC_TAG_CONFIG
+])
diff --git a/common/m4/as-libtool.m4 b/common/m4/as-libtool.m4
new file mode 100644
index 0000000..25de9d1
--- /dev/null
+++ b/common/m4/as-libtool.m4
@@ -0,0 +1,45 @@
+dnl as-libtool.m4 0.1.4
+
+dnl autostars m4 macro for libtool versioning
+
+dnl Thomas Vander Stichele <thomas at apestaart dot org>
+
+dnl $Id: as-libtool.m4,v 1.10 2005/10/15 13:44:23 thomasvs Exp $
+
+dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, [RELEASE])
+
+dnl example
+dnl AS_LIBTOOL(GST, 2, 0, 0)
+
+dnl this macro
+dnl - defines [$PREFIX]_CURRENT, REVISION and AGE
+dnl - defines [$PREFIX]_LIBVERSION
+dnl - defines [$PREFIX]_LT_LDFLAGS to set versioning
+dnl - AC_SUBST's them all
+
+dnl if RELEASE is given, then add a -release option to the LDFLAGS
+dnl with the given release version
+dnl then use [$PREFIX]_LT_LDFLAGS in the relevant Makefile.am's
+
+dnl call AM_PROG_LIBTOOL after this call
+
+AC_DEFUN([AS_LIBTOOL],
+[
+  [$1]_CURRENT=[$2]
+  [$1]_REVISION=[$3]
+  [$1]_AGE=[$4]
+  [$1]_LIBVERSION=[$2]:[$3]:[$4]
+  AC_SUBST([$1]_CURRENT)
+  AC_SUBST([$1]_REVISION)
+  AC_SUBST([$1]_AGE)
+  AC_SUBST([$1]_LIBVERSION)
+
+  [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -version-info $[$1]_LIBVERSION"
+  if test ! -z "[$5]"
+  then
+    [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release [$5]"
+  fi
+  AC_SUBST([$1]_LT_LDFLAGS)
+
+  AC_LIBTOOL_DLOPEN
+])
diff --git a/common/m4/as-objc.m4 b/common/m4/as-objc.m4
new file mode 100644
index 0000000..1e7066a
--- /dev/null
+++ b/common/m4/as-objc.m4
@@ -0,0 +1,56 @@
+
+
+# AC_PROG_OBJC([LIST-OF-COMPILERS])
+#
+AC_DEFUN([AS_PROG_OBJC],
+[
+AC_CHECK_TOOLS(OBJC,
+	[m4_default([$1], [objcc objc gcc cc CC])],
+	none)
+AC_SUBST(OBJC)
+OBJC_LDFLAGS="-lobjc"
+AC_SUBST(OBJC_LDFLAGS)
+if test "x$OBJC" != xnone ; then
+  _AM_DEPENDENCIES(OBJC)
+  AC_MSG_CHECKING([if Objective C compiler works])
+  cat >>conftest.m <<EOF
+#include <objc/Object.h>
+@interface Moo:Object
+{
+}
+- moo;
+int main();
+@end
+
+@implementation Moo
+- moo
+{
+  exit(0);
+}
+
+int main()
+{
+  id moo;
+  moo = [[Moo new]];
+  [[moo moo]];
+  return 1;
+}
+@end
+EOF
+  ${OBJC} conftest.m ${OBJC_LDFLAGS} >&5 2>&5
+  if test -f a.out -o -f a.exe ; then
+    result=yes
+  else
+    result=no
+    echo failed program is: >&5
+    cat conftest.m >&5
+  fi
+  rm -f conftest.m a.out a.exe
+  AC_MSG_RESULT([$result])
+else
+  _AM_DEPENDENCIES(OBJC)
+fi
+
+])
+
+
diff --git a/common/m4/as-python.m4 b/common/m4/as-python.m4
new file mode 100644
index 0000000..eb9b175
--- /dev/null
+++ b/common/m4/as-python.m4
@@ -0,0 +1,152 @@
+## ------------------------
+## Python file handling
+## From Andrew Dalke
+## Updated by James Henstridge
+## Updated by Andy Wingo to loop through possible pythons
+## ------------------------
+
+# AS_PATH_PYTHON([MINIMUM-VERSION])
+
+# Adds support for distributing Python modules and packages.  To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable.  To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+
+# If the MINIMUM-VERSION argument is passed, AS_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement.  MINIMUM-VERSION should consist of
+# numbers and dots only.
+
+# Updated to loop over all possible python binaries by Andy Wingo
+# <wingo@pobox.com>
+# Updated to only warn and unset PYTHON if no good one is found
+
+AC_DEFUN([AS_PATH_PYTHON],
+ [
+  dnl Find a version of Python.  I could check for python versions 1.4
+  dnl or earlier, but the default installation locations changed from
+  dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
+  dnl in 1.5, and I don't want to maintain that logic.
+
+  dnl should we do the version check?
+  PYTHON_CANDIDATES="python python2.2 python2.1 python2.0 python2 \
+                     python1.6 python1.5"
+  ifelse([$1],[],
+         [AC_PATH_PROG(PYTHON, $PYTHON_CANDIDATES)],
+         [
+     AC_MSG_NOTICE(Looking for Python version >= $1)
+    changequote(<<, >>)dnl
+    prog="
+import sys, string
+minver = '$1'
+# split string by '.' and convert to numeric
+minver_info = map(string.atoi, string.split(minver, '.'))
+# we can now do comparisons on the two lists:
+if sys.version_info >= tuple(minver_info):
+	sys.exit(0)
+else:
+	sys.exit(1)"
+    changequote([, ])dnl
+
+    python_good=false
+    for python_candidate in $PYTHON_CANDIDATES; do
+      unset PYTHON
+      AC_PATH_PROG(PYTHON, $python_candidate) 1> /dev/null 2> /dev/null
+
+      if test "x$PYTHON" = "x"; then continue; fi
+
+      if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC; then
+        AC_MSG_CHECKING(["$PYTHON":])
+	AC_MSG_RESULT([okay])
+        python_good=true
+        break;
+      else
+        dnl clear the cache val
+        unset ac_cv_path_PYTHON
+      fi
+    done
+  ])
+
+  if test "$python_good" != "true"; then
+    AC_MSG_WARN([No suitable version of python found])
+    PYTHON=
+  else
+
+  AC_MSG_CHECKING([local Python configuration])
+
+  dnl Query Python for its version number.  Getting [:3] seems to be
+  dnl the best way to do this; it's what "site.py" does in the standard
+  dnl library.  Need to change quote character because of [:3]
+
+  AC_SUBST(PYTHON_VERSION)
+  changequote(<<, >>)dnl
+  PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
+  changequote([, ])dnl
+
+
+  dnl Use the values of $prefix and $exec_prefix for the corresponding
+  dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX.  These are made
+  dnl distinct variables so they can be overridden if need be.  However,
+  dnl general consensus is that you shouldn't need this ability.
+
+  AC_SUBST(PYTHON_PREFIX)
+  PYTHON_PREFIX='${prefix}'
+
+  AC_SUBST(PYTHON_EXEC_PREFIX)
+  PYTHON_EXEC_PREFIX='${exec_prefix}'
+
+  dnl At times (like when building shared libraries) you may want
+  dnl to know which OS platform Python thinks this is.
+
+  AC_SUBST(PYTHON_PLATFORM)
+  PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
+
+
+  dnl Set up 4 directories:
+
+  dnl pythondir -- where to install python scripts.  This is the
+  dnl   site-packages directory, not the python standard library
+  dnl   directory like in previous automake betas.  This behaviour
+  dnl   is more consistent with lispdir.m4 for example.
+  dnl
+  dnl Also, if the package prefix isn't the same as python's prefix,
+  dnl then the old $(pythondir) was pretty useless.
+
+  AC_SUBST(pythondir)
+  pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
+
+  dnl pkgpythondir -- $PACKAGE directory under pythondir.  Was
+  dnl   PYTHON_SITE_PACKAGE in previous betas, but this naming is
+  dnl   more consistent with the rest of automake.
+  dnl   Maybe this should be put in python.am?
+
+  AC_SUBST(pkgpythondir)
+  pkgpythondir=\${pythondir}/$PACKAGE
+
+  dnl pyexecdir -- directory for installing python extension modules
+  dnl   (shared libraries)  Was PYTHON_SITE_EXEC in previous betas.
+
+  AC_SUBST(pyexecdir)
+  pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
+
+  dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+  dnl   Maybe this should be put in python.am?
+
+  AC_SUBST(pkgpyexecdir)
+  pkgpyexecdir=\${pyexecdir}/$PACKAGE
+
+  AC_MSG_RESULT([looks good])
+
+  fi
+])
diff --git a/common/m4/as-scrub-include.m4 b/common/m4/as-scrub-include.m4
new file mode 100644
index 0000000..3ed49b0
--- /dev/null
+++ b/common/m4/as-scrub-include.m4
@@ -0,0 +1,36 @@
+dnl as-scrub-include.m4 0.0.4
+
+dnl autostars m4 macro for scrubbing CFLAGS of system include dirs
+dnl because gcc 3.x complains about including system including dirs
+
+dnl Thomas Vander Stichele <thomas at apestaart dot org>
+
+dnl $Id: as-scrub-include.m4,v 1.7 2004/06/12 08:30:20 thomasvs Exp $
+
+dnl This macro uses output of cpp -v and expects it to contain text that
+dnl looks a little bit like this:
+dnl #include <...> search starts here:
+dnl  /usr/local/include
+dnl  /usr/lib/gcc-lib/i386-redhat-linux/3.2/include
+dnl  /usr/include
+dnl End of search list.
+
+dnl AS_SCRUB_INCLUDE(VAR)
+dnl example
+dnl AS_SCRUB_INCLUDE(CFLAGS)
+dnl will remove all system include dirs from the given CFLAGS
+
+AC_DEFUN([AS_SCRUB_INCLUDE],
+[
+  GIVEN_CFLAGS=$[$1]
+  INCLUDE_DIRS=`echo | cpp -v 2>&1`
+
+  dnl remove everything from this output between the "starts here" and "End of"
+  dnl line
+  INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'`
+  for dir in $INCLUDE_DIRS; do
+    dnl use "" as the sed script so $dir gets expanded
+    GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"`
+  done
+  [$1]=$GIVEN_CFLAGS
+])
diff --git a/common/m4/as-version.m4 b/common/m4/as-version.m4
new file mode 100644
index 0000000..22ff774
--- /dev/null
+++ b/common/m4/as-version.m4
@@ -0,0 +1,75 @@
+dnl as-version.m4 0.2.0
+
+dnl autostars m4 macro for versioning
+
+dnl Thomas Vander Stichele <thomas at apestaart dot org>
+
+dnl $Id: as-version.m4,v 1.15 2006/04/01 09:40:24 thomasvs Exp $
+
+dnl AS_VERSION
+
+dnl example
+dnl AS_VERSION
+
+dnl this macro
+dnl - AC_SUBST's PACKAGE_VERSION_MAJOR, _MINOR, _MICRO
+dnl - AC_SUBST's PACKAGE_VERSION_RELEASE,
+dnl    which can be used for rpm release fields
+dnl - doesn't call AM_INIT_AUTOMAKE anymore because it prevents
+dnl   maintainer mode from running correctly
+dnl
+dnl don't forget to put #undef PACKAGE_VERSION_RELEASE in acconfig.h
+dnl if you use acconfig.h
+
+AC_DEFUN([AS_VERSION],
+[
+  PACKAGE_VERSION_MAJOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo AC_PACKAGE_VERSION | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f3)
+
+  AC_SUBST(PACKAGE_VERSION_MAJOR)
+  AC_SUBST(PACKAGE_VERSION_MINOR)
+  AC_SUBST(PACKAGE_VERSION_MICRO)
+])
+
+dnl AS_NANO(ACTION-IF-NANO-NON-NULL, [ACTION-IF-NANO-NULL])
+
+dnl requires AC_INIT to be called before
+dnl For projects using a fourth or nano number in your versioning to indicate
+dnl development or prerelease snapshots, this macro allows the build to be
+dnl set up differently accordingly.
+
+dnl this macro:
+dnl - parses AC_PACKAGE_VERSION, set by AC_INIT, and extracts the nano number
+dnl - sets the variable PACKAGE_VERSION_NANO
+dnl - sets the variable PACKAGE_VERSION_RELEASE, which can be used
+dnl   for rpm release fields
+dnl - executes ACTION-IF-NANO-NON-NULL or ACTION-IF-NANO-NULL
+
+dnl example:
+dnl AS_NANO(RELEASE="yes", RELEASE="no")
+
+AC_DEFUN([AS_NANO],
+[
+  AC_MSG_CHECKING(nano version)
+
+  NANO=$(echo AC_PACKAGE_VERSION | cut -d'.' -f4)
+
+  if test x"$NANO" = x || test "x$NANO" = "x0" ; then
+    AC_MSG_RESULT([0 (release)])
+    NANO=0
+    PACKAGE_VERSION_RELEASE=1
+    ifelse([$1], , :, [$1])
+  else
+    AC_MSG_RESULT($NANO)
+    PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S`
+    if test "x$NANO" != "x1" ; then
+       ifelse([$1], , :, [$1])
+    else
+       ifelse([$2], , :, [$2])
+    fi
+  fi
+  PACKAGE_VERSION_NANO=$NANO
+  AC_SUBST(PACKAGE_VERSION_NANO)
+  AC_SUBST(PACKAGE_VERSION_RELEASE)
+])
diff --git a/common/m4/ax_create_stdint_h.m4 b/common/m4/ax_create_stdint_h.m4
new file mode 100644
index 0000000..13bf699
--- /dev/null
+++ b/common/m4/ax_create_stdint_h.m4
@@ -0,0 +1,734 @@
+##### http://autoconf-archive.cryp.to/ax_create_stdint_h.html
+#
+# SYNOPSIS
+#
+#   AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])]
+#
+# DESCRIPTION
+#
+#   the "ISO C9X: 7.18 Integer types <stdint.h>" section requires the
+#   existence of an include file <stdint.h> that defines a set of
+#   typedefs, especially uint8_t,int32_t,uintptr_t. Many older
+#   installations will not provide this file, but some will have the
+#   very same definitions in <inttypes.h>. In other enviroments we can
+#   use the inet-types in <sys/types.h> which would define the typedefs
+#   int8_t and u_int8_t respectivly.
+#
+#   This macros will create a local "_stdint.h" or the headerfile given
+#   as an argument. In many cases that file will just "#include
+#   <stdint.h>" or "#include <inttypes.h>", while in other environments
+#   it will provide the set of basic 'stdint's definitions/typedefs:
+#
+#     int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t
+#     int_least32_t.. int_fast32_t.. intmax_t
+#
+#   which may or may not rely on the definitions of other files, or
+#   using the AC_CHECK_SIZEOF macro to determine the actual sizeof each
+#   type.
+#
+#   if your header files require the stdint-types you will want to
+#   create an installable file mylib-int.h that all your other
+#   installable header may include. So if you have a library package
+#   named "mylib", just use
+#
+#        AX_CREATE_STDINT_H(mylib-int.h)
+#
+#   in configure.ac and go to install that very header file in
+#   Makefile.am along with the other headers (mylib.h) - and the
+#   mylib-specific headers can simply use "#include <mylib-int.h>" to
+#   obtain the stdint-types.
+#
+#   Remember, if the system already had a valid <stdint.h>, the
+#   generated file will include it directly. No need for fuzzy
+#   HAVE_STDINT_H things... (oops, GCC 4.2.x has deliberatly disabled
+#   its stdint.h for non-c99 compilation and the c99-mode is not the
+#   default. Therefore this macro will not use the compiler's stdint.h
+#   - please complain to the GCC developers).
+#
+# LAST MODIFICATION
+#
+#   2007-06-27
+#
+# COPYLEFT
+#
+#   Copyright (c) 2007 Guido U. Draheim <guidod@gmx.de>
+#
+#   This program is free software; you can redistribute it and/or
+#   modify it under the terms of the GNU General Public License as
+#   published by the Free Software Foundation; either version 2 of the
+#   License, or (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+#   General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+#   02111-1307, USA.
+#
+#   As a special exception, the respective Autoconf Macro's copyright
+#   owner gives unlimited permission to copy, distribute and modify the
+#   configure scripts that are the output of Autoconf when processing
+#   the Macro. You need not follow the terms of the GNU General Public
+#   License when using or distributing such scripts, even though
+#   portions of the text of the Macro appear in them. The GNU General
+#   Public License (GPL) does govern all other use of the material that
+#   constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the
+#   Autoconf Macro released by the Autoconf Macro Archive. When you
+#   make and distribute a modified version of the Autoconf Macro, you
+#   may extend this special exception to the GPL to apply to your
+#   modified version as well.
+
+AC_DEFUN([AX_CHECK_DATA_MODEL],[
+   AC_CHECK_SIZEOF(char)
+   AC_CHECK_SIZEOF(short)
+   AC_CHECK_SIZEOF(int)
+   AC_CHECK_SIZEOF(long)
+   AC_CHECK_SIZEOF(void*)
+   ac_cv_char_data_model=""
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
+   ac_cv_long_data_model=""
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
+   AC_MSG_CHECKING([data model])
+   case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
+    122/242)     ac_cv_data_model="IP16"  ; n="standard 16bit machine" ;;
+    122/244)     ac_cv_data_model="LP32"  ; n="standard 32bit machine" ;;
+    122/*)       ac_cv_data_model="i16"   ; n="unusual int16 model" ;;
+    124/444)     ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
+    124/488)     ac_cv_data_model="LP64"  ; n="standard 64bit unixish" ;;
+    124/448)     ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
+    124/*)       ac_cv_data_model="i32"   ; n="unusual int32 model" ;;
+    128/888)     ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
+    128/*)       ac_cv_data_model="i64"   ; n="unusual int64 model" ;;
+    222/*2)      ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
+    333/*3)      ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
+    444/*4)      ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
+    666/*6)      ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
+    888/*8)      ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
+    222/*|333/*|444/*|666/*|888/*) :
+                 ac_cv_data_model="iDSP"  ; n="unusual dsptype" ;;
+     *)          ac_cv_data_model="none"  ; n="very unusual model" ;;
+   esac
+   AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)])
+])
+
+dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF])
+AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[
+AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[
+ ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
+  AC_MSG_RESULT([(..)])
+  for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h])
+  do
+   unset ac_cv_type_uintptr_t
+   unset ac_cv_type_uint64_t
+   AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>])
+   AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
+   m4_ifvaln([$2],[$2]) break
+  done
+  AC_MSG_CHECKING([for stdint uintptr_t])
+ ])
+])
+
+AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[
+AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[
+ ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
+  AC_MSG_RESULT([(..)])
+  for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h])
+  do
+   unset ac_cv_type_uint32_t
+   unset ac_cv_type_uint64_t
+   AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>])
+   AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>])
+   m4_ifvaln([$2],[$2]) break
+   break;
+  done
+  AC_MSG_CHECKING([for stdint uint32_t])
+ ])
+])
+
+AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[
+AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[
+ ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
+  AC_MSG_RESULT([(..)])
+  for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do
+   unset ac_cv_type_u_int32_t
+   unset ac_cv_type_u_int64_t
+   AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>])
+   AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>])
+   m4_ifvaln([$2],[$2]) break
+   break;
+  done
+  AC_MSG_CHECKING([for stdint u_int32_t])
+ ])
+])
+
+AC_DEFUN([AX_CREATE_STDINT_H],
+[# ------ AX CREATE STDINT H -------------------------------------
+AC_MSG_CHECKING([for stdint types])
+ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)`
+# try to shortcircuit - if the default include path of the compiler
+# can find a "stdint.h" header then we assume that all compilers can.
+AC_CACHE_VAL([ac_cv_header_stdint_t],[
+old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
+old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
+old_CFLAGS="$CFLAGS"     ; CFLAGS=""
+AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
+[ac_cv_stdint_result="(assuming C99 compatible system)"
+ ac_cv_header_stdint_t="stdint.h"; ],
+[ac_cv_header_stdint_t=""])
+if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
+CFLAGS="-std=c99"
+AC_TRY_COMPILE([#include <stdint.h>],[int_least32_t v = 0;],
+[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)])
+fi
+CXXFLAGS="$old_CXXFLAGS"
+CPPFLAGS="$old_CPPFLAGS"
+CFLAGS="$old_CFLAGS" ])
+
+v="... $ac_cv_header_stdint_h"
+if test "$ac_stdint_h" = "stdint.h" ; then
+ AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)])
+elif test "$ac_stdint_h" = "inttypes.h" ; then
+ AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)])
+elif test "_$ac_cv_header_stdint_t" = "_" ; then
+ AC_MSG_RESULT([(putting them into $ac_stdint_h)$v])
+else
+ ac_cv_header_stdint="$ac_cv_header_stdint_t"
+ AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)])
+fi
+
+if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
+
+dnl .....intro message done, now do a few system checks.....
+dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type,
+dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW
+dnl instead that is triggered with 3 or more arguments (see types.m4)
+
+inttype_headers=`echo $2 | sed -e 's/,/ /g'`
+
+ac_cv_stdint_result="(no helpful system typedefs seen)"
+AX_CHECK_HEADER_STDINT_X(dnl
+   stdint.h inttypes.h sys/inttypes.h $inttype_headers,
+   ac_cv_stdint_result="(seen uintptr_t$and64 in $i)")
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+AX_CHECK_HEADER_STDINT_O(dnl,
+   inttypes.h sys/inttypes.h stdint.h $inttype_headers,
+   ac_cv_stdint_result="(seen uint32_t$and64 in $i)")
+fi
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+if test "_$ac_cv_header_stdint_o" = "_" ; then
+AX_CHECK_HEADER_STDINT_U(dnl,
+   sys/types.h inttypes.h sys/inttypes.h $inttype_headers,
+   ac_cv_stdint_result="(seen u_int32_t$and64 in $i)")
+fi fi
+
+dnl if there was no good C99 header file, do some typedef checks...
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+   AC_MSG_CHECKING([for stdint datatype model])
+   AC_MSG_RESULT([(..)])
+   AX_CHECK_DATA_MODEL
+fi
+
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_x"
+elif  test "_$ac_cv_header_stdint_o" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_o"
+elif  test "_$ac_cv_header_stdint_u" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_u"
+else
+   ac_cv_header_stdint="stddef.h"
+fi
+
+AC_MSG_CHECKING([for extra inttypes in chosen header])
+AC_MSG_RESULT([($ac_cv_header_stdint)])
+dnl see if int_least and int_fast types are present in _this_ header.
+unset ac_cv_type_int_least32_t
+unset ac_cv_type_int_fast32_t
+AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>])
+AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>])
+AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>])
+
+fi # shortcircut to system "stdint.h"
+# ------------------ PREPARE VARIABLES ------------------------------
+if test "$GCC" = "yes" ; then
+ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
+else
+ac_cv_stdint_message="using $CC"
+fi
+
+AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl
+$ac_cv_stdint_result])
+
+dnl -----------------------------------------------------------------
+# ----------------- DONE inttypes.h checks START header -------------
+AC_CONFIG_COMMANDS([$ac_stdint_h],[
+AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h)
+ac_stdint=$tmp/_stdint.h
+
+echo "#ifndef" $_ac_stdint_h >$ac_stdint
+echo "#define" $_ac_stdint_h "1" >>$ac_stdint
+echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint
+echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint
+echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_t" != "_" ; then
+echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint
+echo "#include <stdint.h>" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+else
+
+cat >>$ac_stdint <<STDINT_EOF
+
+/* ................... shortcircuit part ........................... */
+
+#if defined HAVE_STDINT_H || defined _STDINT_HAVE_STDINT_H
+#include <stdint.h>
+#else
+#include <stddef.h>
+
+/* .................... configured part ............................ */
+
+STDINT_EOF
+
+echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+  ac_header="$ac_cv_header_stdint_x"
+  echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint
+fi
+
+echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint
+if  test "_$ac_cv_header_stdint_o" != "_" ; then
+  ac_header="$ac_cv_header_stdint_o"
+  echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint
+fi
+
+echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint
+if  test "_$ac_cv_header_stdint_u" != "_" ; then
+  ac_header="$ac_cv_header_stdint_u"
+  echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint
+fi
+
+echo "" >>$ac_stdint
+
+if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then
+  echo "#include <$ac_header>" >>$ac_stdint
+  echo "" >>$ac_stdint
+fi fi
+
+echo "/* which 64bit typedef has been found */" >>$ac_stdint
+if test "$ac_cv_type_uint64_t" = "yes" ; then
+echo "#define   _STDINT_HAVE_UINT64_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint
+fi
+if test "$ac_cv_type_u_int64_t" = "yes" ; then
+echo "#define   _STDINT_HAVE_U_INT64_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* which type model has been detected */" >>$ac_stdint
+if test "_$ac_cv_char_data_model" != "_" ; then
+echo "#define   _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint
+echo "#define   _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint
+else
+echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint
+echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* whether int_least types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_least32_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INT_LEAST32_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint
+fi
+echo "/* whether int_fast types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_fast32_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint
+fi
+echo "/* whether intmax_t type was detected */" >>$ac_stdint
+if test "$ac_cv_type_intmax_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+  cat >>$ac_stdint <<STDINT_EOF
+/* .................... detections part ............................ */
+
+/* whether we need to define bitspecific types from compiler base types */
+#ifndef _STDINT_HEADER_INTPTR
+#ifndef _STDINT_HEADER_UINT32
+#ifndef _STDINT_HEADER_U_INT32
+#define _STDINT_NEED_INT_MODEL_T
+#else
+#define _STDINT_HAVE_U_INT_TYPES
+#endif
+#endif
+#endif
+
+#ifdef _STDINT_HAVE_U_INT_TYPES
+#undef _STDINT_NEED_INT_MODEL_T
+#endif
+
+#ifdef  _STDINT_CHAR_MODEL
+#if     _STDINT_CHAR_MODEL+0 == 122 || _STDINT_CHAR_MODEL+0 == 124
+#ifndef _STDINT_BYTE_MODEL
+#define _STDINT_BYTE_MODEL 12
+#endif
+#endif
+#endif
+
+#ifndef _STDINT_HAVE_INT_LEAST32_T
+#define _STDINT_NEED_INT_LEAST_T
+#endif
+
+#ifndef _STDINT_HAVE_INT_FAST32_T
+#define _STDINT_NEED_INT_FAST_T
+#endif
+
+#ifndef _STDINT_HEADER_INTPTR
+#define _STDINT_NEED_INTPTR_T
+#ifndef _STDINT_HAVE_INTMAX_T
+#define _STDINT_NEED_INTMAX_T
+#endif
+#endif
+
+
+/* .................... definition part ............................ */
+
+/* some system headers have good uint64_t */
+#ifndef _HAVE_UINT64_T
+#if     defined _STDINT_HAVE_UINT64_T  || defined HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#elif   defined _STDINT_HAVE_U_INT64_T || defined HAVE_U_INT64_T
+#define _HAVE_UINT64_T
+typedef u_int64_t uint64_t;
+#endif
+#endif
+
+#ifndef _HAVE_UINT64_T
+/* .. here are some common heuristics using compiler runtime specifics */
+#if defined __STDC_VERSION__ && defined __STDC_VERSION__ >= 199901L
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+#elif !defined __STRICT_ANSI__
+#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
+#define _HAVE_UINT64_T
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__
+/* note: all ELF-systems seem to have loff-support which needs 64-bit */
+#if !defined _NO_LONGLONG
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+#endif
+
+#elif defined __alpha || (defined __mips && defined _ABIN32)
+#if !defined _NO_LONGLONG
+typedef long int64_t;
+typedef unsigned long uint64_t;
+#endif
+  /* compiler/cpu type to define int64_t */
+#endif
+#endif
+#endif
+
+#if defined _STDINT_HAVE_U_INT_TYPES
+/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */
+typedef u_int8_t uint8_t;
+typedef u_int16_t uint16_t;
+typedef u_int32_t uint32_t;
+
+/* glibc compatibility */
+#ifndef __int8_t_defined
+#define __int8_t_defined
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INT_MODEL_T
+/* we must guess all the basic types. Apart from byte-adressable system, */
+/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */
+/* (btw, those nibble-addressable systems are way off, or so we assume) */
+
+dnl   /* have a look at "64bit and data size neutrality" at */
+dnl   /* http://unix.org/version2/whatsnew/login_64bit.html */
+dnl   /* (the shorthand "ILP" types always have a "P" part) */
+
+#if defined _STDINT_BYTE_MODEL
+#if _STDINT_LONG_MODEL+0 == 242
+/* 2:4:2 =  IP16 = a normal 16-bit system                */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned long   uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          long    int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444
+/* 2:4:4 =  LP32 = a 32-bit system derived from a 16-bit */
+/* 4:4:4 = ILP32 = a normal 32-bit system                */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488
+/* 4:8:4 =  IP32 = a 32-bit system prepared for 64-bit    */
+/* 4:8:8 =  LP64 = a normal 64-bit system                 */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+/* this system has a "long" of 64bit */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+typedef unsigned long   uint64_t;
+typedef          long    int64_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 448
+/*      LLP64   a 64-bit system derived from a 32-bit system */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+/* assuming the system has a "long long" */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef unsigned long long uint64_t;
+typedef          long long  int64_t;
+#endif
+#else
+#define _STDINT_NO_INT32_T
+#endif
+#else
+#define _STDINT_NO_INT8_T
+#define _STDINT_NO_INT32_T
+#endif
+#endif
+
+/*
+ * quote from SunOS-5.8 sys/inttypes.h:
+ * Use at your own risk.  As of February 1996, the committee is squarely
+ * behind the fixed sized types; the "least" and "fast" types are still being
+ * discussed.  The probability that the "fast" types may be removed before
+ * the standard is finalized is high enough that they are not currently
+ * implemented.
+ */
+
+#if defined _STDINT_NEED_INT_LEAST_T
+typedef  int8_t    int_least8_t;
+typedef  int16_t   int_least16_t;
+typedef  int32_t   int_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef  int64_t   int_least64_t;
+#endif
+
+typedef uint8_t   uint_least8_t;
+typedef uint16_t  uint_least16_t;
+typedef uint32_t  uint_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t  uint_least64_t;
+#endif
+  /* least types */
+#endif
+
+#if defined _STDINT_NEED_INT_FAST_T
+typedef  int8_t    int_fast8_t;
+typedef  int       int_fast16_t;
+typedef  int32_t   int_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef  int64_t   int_fast64_t;
+#endif
+
+typedef uint8_t   uint_fast8_t;
+typedef unsigned  uint_fast16_t;
+typedef uint32_t  uint_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t  uint_fast64_t;
+#endif
+  /* fast types */
+#endif
+
+#ifdef _STDINT_NEED_INTMAX_T
+#ifdef _HAVE_UINT64_T
+typedef  int64_t       intmax_t;
+typedef uint64_t      uintmax_t;
+#else
+typedef          long  intmax_t;
+typedef unsigned long uintmax_t;
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INTPTR_T
+#ifndef __intptr_t_defined
+#define __intptr_t_defined
+/* we encourage using "long" to store pointer values, never use "int" ! */
+#if   _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484
+typedef  unsigned int   uintptr_t;
+typedef           int    intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444
+typedef  unsigned long  uintptr_t;
+typedef           long   intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T
+typedef        uint64_t uintptr_t;
+typedef         int64_t  intptr_t;
+#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */
+typedef  unsigned long  uintptr_t;
+typedef           long   intptr_t;
+#endif
+#endif
+#endif
+
+/* The ISO C99 standard specifies that in C++ implementations these
+   should only be defined if explicitly requested.  */
+#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
+#ifndef UINT32_C
+
+/* Signed.  */
+# define INT8_C(c)      c
+# define INT16_C(c)     c
+# define INT32_C(c)     c
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define INT64_C(c)    c ## L
+# else
+#  define INT64_C(c)    c ## LL
+# endif
+
+/* Unsigned.  */
+# define UINT8_C(c)     c ## U
+# define UINT16_C(c)    c ## U
+# define UINT32_C(c)    c ## U
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define UINT64_C(c)   c ## UL
+# else
+#  define UINT64_C(c)   c ## ULL
+# endif
+
+/* Maximal type.  */
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define INTMAX_C(c)   c ## L
+#  define UINTMAX_C(c)  c ## UL
+# else
+#  define INTMAX_C(c)   c ## LL
+#  define UINTMAX_C(c)  c ## ULL
+# endif
+
+  /* literalnumbers */
+#endif
+#endif
+
+/* These limits are merily those of a two complement byte-oriented system */
+
+/* Minimum of signed integral types.  */
+# define INT8_MIN               (-128)
+# define INT16_MIN              (-32767-1)
+# define INT32_MIN              (-2147483647-1)
+# define INT64_MIN              (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types.  */
+# define INT8_MAX               (127)
+# define INT16_MAX              (32767)
+# define INT32_MAX              (2147483647)
+# define INT64_MAX              (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types.  */
+# define UINT8_MAX              (255)
+# define UINT16_MAX             (65535)
+# define UINT32_MAX             (4294967295U)
+# define UINT64_MAX             (__UINT64_C(18446744073709551615))
+
+/* Minimum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MIN         INT8_MIN
+# define INT_LEAST16_MIN        INT16_MIN
+# define INT_LEAST32_MIN        INT32_MIN
+# define INT_LEAST64_MIN        INT64_MIN
+/* Maximum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MAX         INT8_MAX
+# define INT_LEAST16_MAX        INT16_MAX
+# define INT_LEAST32_MAX        INT32_MAX
+# define INT_LEAST64_MAX        INT64_MAX
+
+/* Maximum of unsigned integral types having a minimum size.  */
+# define UINT_LEAST8_MAX        UINT8_MAX
+# define UINT_LEAST16_MAX       UINT16_MAX
+# define UINT_LEAST32_MAX       UINT32_MAX
+# define UINT_LEAST64_MAX       UINT64_MAX
+
+  /* shortcircuit*/
+#endif
+  /* once */
+#endif
+#endif
+STDINT_EOF
+fi
+    if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
+      AC_MSG_NOTICE([$ac_stdint_h is unchanged])
+    else
+      ac_dir=`AS_DIRNAME(["$ac_stdint_h"])`
+      AS_MKDIR_P(["$ac_dir"])
+      rm -f $ac_stdint_h
+      mv $ac_stdint $ac_stdint_h
+    fi
+],[# variables for create stdint.h replacement
+PACKAGE="$PACKAGE"
+VERSION="$VERSION"
+ac_stdint_h="$ac_stdint_h"
+_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h)
+ac_cv_stdint_message="$ac_cv_stdint_message"
+ac_cv_header_stdint_t="$ac_cv_header_stdint_t"
+ac_cv_header_stdint_x="$ac_cv_header_stdint_x"
+ac_cv_header_stdint_o="$ac_cv_header_stdint_o"
+ac_cv_header_stdint_u="$ac_cv_header_stdint_u"
+ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
+ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
+ac_cv_char_data_model="$ac_cv_char_data_model"
+ac_cv_long_data_model="$ac_cv_long_data_model"
+ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
+ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
+ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
+])
+])
diff --git a/common/m4/check.m4 b/common/m4/check.m4
new file mode 100644
index 0000000..afd26eb
--- /dev/null
+++ b/common/m4/check.m4
@@ -0,0 +1,181 @@
+dnl _AM_TRY_CHECK(MINIMUM-VERSION, EXTRA-CFLAGS, EXTRA-LIBS, CHECK-LIB-NAME
+dnl               [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS
+dnl Done this way because of the brokenness that is
+dnl https://launchpad.net/distros/ubuntu/+source/check/+bug/5840
+dnl
+
+AC_DEFUN([_AM_TRY_CHECK],
+[
+  min_check_version=$1
+  extra_cflags=$2
+  extra_libs=$3
+  check_lib_name=$4
+
+  CHECK_CFLAGS="$extra_cflags"
+  CHECK_LIBS="$extra_libs -l$check_lib_name"
+
+  ac_save_CFLAGS="$CFLAGS"
+  ac_save_LIBS="$LIBS"
+
+  CFLAGS="$CFLAGS $CHECK_CFLAGS"
+  LIBS="$CHECK_LIBS $LIBS"
+
+  AC_MSG_CHECKING(for check named $check_lib_name  - version >= $min_check_version)
+
+  rm -f conf.check-test
+  dnl unset no_check, since in our second run it would have been set to yes
+  dnl before
+  no_check=
+  AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <check.h>
+
+int main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.check-test");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = strdup("$min_check_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_check_version");
+     return 1;
+   }
+
+  if ((CHECK_MAJOR_VERSION != check_major_version) ||
+      (CHECK_MINOR_VERSION != check_minor_version) ||
+      (CHECK_MICRO_VERSION != check_micro_version))
+    {
+      printf("\n*** The check header file (version %d.%d.%d) does not match\n",
+	     CHECK_MAJOR_VERSION, CHECK_MINOR_VERSION, CHECK_MICRO_VERSION);
+      printf("*** the check library (version %d.%d.%d).\n",
+	     check_major_version, check_minor_version, check_micro_version);
+      return 1;
+    }
+
+  if ((check_major_version > major) ||
+      ((check_major_version == major) && (check_minor_version > minor)) ||
+      ((check_major_version == major) && (check_minor_version == minor) && (check_micro_version >= micro)))
+    {
+      return 0;
+    }
+  else
+    {
+      printf("\n*** An old version of check (%d.%d.%d) was found.\n",
+             check_major_version, check_minor_version, check_micro_version);
+      printf("*** You need a version of check being at least %d.%d.%d.\n", major, minor, micro);
+      printf("***\n");
+      printf("*** If you have already installed a sufficiently new version, this error\n");
+      printf("*** probably means that the wrong copy of the check library and header\n");
+      printf("*** file is being found. Rerun configure with the --with-check=PATH option\n");
+      printf("*** to specify the prefix where the correct version was installed.\n");
+    }
+
+  return 1;
+}
+],, no_check=yes, [echo $ac_n "cross compiling; assumed OK... $ac_c"])
+
+  CFLAGS="$ac_save_CFLAGS"
+  LIBS="$ac_save_LIBS"
+
+  if test "x$no_check" = x ; then
+    AC_MSG_RESULT(yes)
+    ifelse([$5], , :, [$5])
+  else
+    AC_MSG_RESULT(no)
+    if test -f conf.check-test ; then
+      :
+    else
+      echo "*** Could not run check test program, checking why..."
+      CFLAGS="$CFLAGS $CHECK_CFLAGS"
+      LIBS="$CHECK_LIBS $LIBS"
+      AC_TRY_LINK([
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <check.h>
+], ,  [ echo "*** The test program compiled, but did not run. This usually means"
+        echo "*** that the run-time linker is not finding check. You'll need to set your"
+        echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+        echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+        echo "*** is required on your system"
+	echo "***"
+        echo "*** If you have an old version installed, it is best to remove it, although"
+        echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+      [ echo "*** The test program failed to compile or link. See the file config.log for"
+        echo "*** the exact error that occured." ])
+
+      CFLAGS="$ac_save_CFLAGS"
+      LIBS="$ac_save_LIBS"
+    fi
+
+    CHECK_CFLAGS=""
+    CHECK_LIBS=""
+
+    rm -f conf.check-test
+    ifelse([$6], , AC_MSG_ERROR([check not found]), [$6])
+  fi
+])
+
+
+dnl AM_PATH_CHECK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for check, and define CHECK_CFLAGS and CHECK_LIBS
+dnl
+
+AC_DEFUN([AM_PATH_CHECK],
+[
+  AC_ARG_WITH(check,
+  [  --with-check=PATH       prefix where check is installed [default=auto]])
+
+  AC_ARG_WITH(checklibname,
+    AC_HELP_STRING([--with-check-lib-name=NAME],
+      [name of the PIC check library (default=check)]))
+
+  min_check_version=ifelse([$1], ,0.8.2,$1)
+
+  if test x$with_check = xno; then
+    AC_MSG_RESULT(disabled)
+    ifelse([$3], , AC_MSG_ERROR([disabling check is not supported]), [$3])
+  else
+    if test "x$with_check" != x; then
+      CHECK_EXTRA_CFLAGS="-I$with_check/include"
+      CHECK_EXTRA_LIBS="-L$with_check/lib"
+    else
+      CHECK_EXTRA_CFLAGS=""
+      CHECK_EXTRA_LIBS=""
+    fi
+
+    if test x$with_checklibname = x; then
+      _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS,
+        check_pic, [have_check=true], [have_check=false])
+      if test x$have_check = xtrue; then
+        ifelse([$2], , :, [$2])
+      else
+        _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS,
+          check, [have_check=true], [have_check=false])
+        if test x$have_check = xtrue; then
+          ifelse([$2], , :, [$2])
+        else
+          ifelse([$3], , AC_MSG_ERROR([check not found]), [$3])
+        fi
+      fi
+    else
+      _AM_TRY_CHECK($min_check_version, $CHECK_EXTRA_CFLAGS, $CHECK_EXTRA_LIBS,
+        $with_checklibname, [have_check=true], [have_check=false])
+      if test x$have_check = xtrue; then
+        ifelse([$2], , :, [$2])
+      else
+        ifelse([$3], , AC_MSG_ERROR([check not found]), [$3])
+      fi
+    fi
+
+    AC_SUBST(CHECK_CFLAGS)
+    AC_SUBST(CHECK_LIBS)
+    rm -f conf.check-test
+  fi
+])
diff --git a/common/m4/glib-gettext.m4 b/common/m4/glib-gettext.m4
new file mode 100644
index 0000000..f8d442f
--- /dev/null
+++ b/common/m4/glib-gettext.m4
@@ -0,0 +1,432 @@
+# Copyright (C) 1995-2002 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003,2004 Red Hat, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+#
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
+#
+# Modified to never use included libintl.
+# Owen Taylor <otaylor@redhat.com>, 12/15/1998
+#
+# Major rework to remove unused code
+# Owen Taylor <otaylor@redhat.com>, 12/11/2002
+#
+# Added better handling of ALL_LINGUAS from GNU gettext version
+# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
+#
+# Modified to require ngettext
+# Matthias Clasen <mclasen@redhat.com> 08/06/2004
+#
+# We need this here as well, since someone might use autoconf-2.5x
+# to configure GLib then an older version to configure a package
+# using AM_GLIB_GNU_GETTEXT
+AC_PREREQ(2.53)
+
+dnl
+dnl We go to great lengths to make sure that aclocal won't
+dnl try to pull in the installed version of these macros
+dnl when running aclocal in the glib directory.
+dnl
+m4_copy([AC_DEFUN],[glib_DEFUN])
+m4_copy([AC_REQUIRE],[glib_REQUIRE])
+dnl
+dnl At the end, if we're not within glib, we'll define the public
+dnl definitions in terms of our private definitions.
+dnl
+
+# GLIB_LC_MESSAGES
+#--------------------
+glib_DEFUN([GLIB_LC_MESSAGES],
+  [AC_CHECK_HEADERS([locale.h])
+    if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# GLIB_PATH_PROG_WITH_TEST
+#----------------------------
+dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+	ac_cv_path_$1="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# GLIB_WITH_NLS
+#-----------------
+glib_DEFUN([GLIB_WITH_NLS],
+  dnl NLS is obligatory
+  [USE_NLS=yes
+    AC_SUBST(USE_NLS)
+
+    gt_cv_have_gettext=no
+
+    CATOBJEXT=NONE
+    XGETTEXT=:
+    INTLLIBS=
+
+    AC_CHECK_HEADER(libintl.h,
+     [gt_cv_func_dgettext_libintl="no"
+      libintl_extra_libs=""
+
+      #
+      # First check in libc
+      #
+      AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
+        [AC_TRY_LINK([
+#include <libintl.h>
+],
+         [return !ngettext ("","", 1)],
+	  gt_cv_func_ngettext_libc=yes,
+          gt_cv_func_ngettext_libc=no)
+        ])
+
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+	      AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
+        	[AC_TRY_LINK([
+#include <libintl.h>
+],
+	          [return !dgettext ("","")],
+		  gt_cv_func_dgettext_libc=yes,
+	          gt_cv_func_dgettext_libc=no)
+        	])
+      fi
+
+      if test "$gt_cv_func_ngettext_libc" = "yes" ; then
+        AC_CHECK_FUNCS(bind_textdomain_codeset)
+      fi
+
+      #
+      # If we don't have everything we want, check in libintl
+      #
+      if test "$gt_cv_func_dgettext_libc" != "yes" \
+	 || test "$gt_cv_func_ngettext_libc" != "yes" \
+         || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
+
+        AC_CHECK_LIB(intl, bindtextdomain,
+	    [AC_CHECK_LIB(intl, ngettext,
+		    [AC_CHECK_LIB(intl, dgettext,
+			          gt_cv_func_dgettext_libintl=yes)])])
+
+	if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
+	  AC_MSG_CHECKING([if -liconv is needed to use gettext])
+	  AC_MSG_RESULT([])
+  	  AC_CHECK_LIB(intl, ngettext,
+          	[AC_CHECK_LIB(intl, dcgettext,
+		       [gt_cv_func_dgettext_libintl=yes
+			libintl_extra_libs=-liconv],
+			:,-liconv)],
+		:,-liconv)
+        fi
+
+        #
+        # If we found libintl, then check in it for bind_textdomain_codeset();
+        # we'll prefer libc if neither have bind_textdomain_codeset(),
+        # and both have dgettext and ngettext
+        #
+        if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS -lintl $libintl_extra_libs"
+          unset ac_cv_func_bind_textdomain_codeset
+          AC_CHECK_FUNCS(bind_textdomain_codeset)
+          LIBS="$glib_save_LIBS"
+
+          if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
+            gt_cv_func_dgettext_libc=no
+          else
+            if test "$gt_cv_func_dgettext_libc" = "yes" \
+		&& test "$gt_cv_func_ngettext_libc" = "yes"; then
+              gt_cv_func_dgettext_libintl=no
+            fi
+          fi
+        fi
+      fi
+
+      if test "$gt_cv_func_dgettext_libc" = "yes" \
+	|| test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        gt_cv_have_gettext=yes
+      fi
+
+      if test "$gt_cv_func_dgettext_libintl" = "yes"; then
+        INTLLIBS="-lintl $libintl_extra_libs"
+      fi
+
+      if test "$gt_cv_have_gettext" = "yes"; then
+	AC_DEFINE(HAVE_GETTEXT,1,
+	  [Define if the GNU gettext() function is already present or preinstalled.])
+	GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+	  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+	if test "$MSGFMT" != "no"; then
+          glib_save_LIBS="$LIBS"
+          LIBS="$LIBS $INTLLIBS"
+	  AC_CHECK_FUNCS(dcgettext)
+	  MSGFMT_OPTS=
+	  AC_MSG_CHECKING([if msgfmt accepts -c])
+	  GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: test 1.0\n"
+"PO-Revision-Date: 2007-02-15 12:01+0100\n"
+"Last-Translator: test <foo@bar.xx>\n"
+"Language-Team: C <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+	  AC_SUBST(MSGFMT_OPTS)
+	  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+	  GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+	    [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+	  AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
+			 return _nl_msg_cat_cntr],
+	    [CATOBJEXT=.gmo
+             DATADIRNAME=share],
+	    [case $host in
+	    *-*-solaris*)
+	    dnl On Solaris, if bind_textdomain_codeset is in libc,
+	    dnl GNU format message catalog is always supported,
+            dnl since both are added to the libc all together.
+	    dnl Hence, we'd like to go with DATADIRNAME=share and
+	    dnl and CATOBJEXT=.gmo in this case.
+            AC_CHECK_FUNC(bind_textdomain_codeset,
+	      [CATOBJEXT=.gmo
+               DATADIRNAME=share],
+	      [CATOBJEXT=.mo
+               DATADIRNAME=lib])
+	    ;;
+	    *)
+	    CATOBJEXT=.mo
+            DATADIRNAME=lib
+	    ;;
+	    esac])
+          LIBS="$glib_save_LIBS"
+	  INSTOBJEXT=.mo
+	else
+	  gt_cv_have_gettext=no
+	fi
+      fi
+    ])
+
+    if test "$gt_cv_have_gettext" = "yes" ; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [always defined to indicate that i18n is enabled])
+    fi
+
+    dnl Test whether we really found GNU xgettext.
+    if test "$XGETTEXT" != ":"; then
+      dnl If it is not GNU xgettext we define it as : so that the
+      dnl Makefiles still can work.
+      if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+        : ;
+      else
+        AC_MSG_RESULT(
+	  [found xgettext program is not GNU xgettext; ignore it])
+        XGETTEXT=":"
+      fi
+    fi
+
+    # We need to process the po/ directory.
+    POSUB=po
+
+    AC_OUTPUT_COMMANDS(
+      [case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac])
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(PO_IN_DATADIR_TRUE)
+    AC_SUBST(PO_IN_DATADIR_FALSE)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+# AM_GLIB_GNU_GETTEXT
+# -------------------
+# Do checks necessary for use of gettext. If a suitable implementation
+# of gettext is found in either in libintl or in the C library,
+# it will set INTLLIBS to the libraries needed for use of gettext
+# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
+# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
+# on various variables needed by the Makefile.in.in installed by
+# glib-gettextize.
+dnl
+glib_DEFUN([GLIB_GNU_GETTEXT],
+  [AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+
+   GLIB_LC_MESSAGES
+   GLIB_WITH_NLS
+
+   if test "$gt_cv_have_gettext" = "yes"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for presentlang in $ALL_LINGUAS; do
+         useit=no
+         if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
+           desiredlanguages="$LINGUAS"
+         else
+           desiredlanguages="$ALL_LINGUAS"
+         fi
+         for desiredlang in $desiredlanguages; do
+ 	   # Use the presentlang catalog if desiredlang is
+           #   a. equal to presentlang, or
+           #   b. a variant of presentlang (because in this case,
+           #      presentlang can be used as a fallback for messages
+           #      which are not translated in the desiredlang catalog).
+           case "$desiredlang" in
+             "$presentlang"*) useit=yes;;
+           esac
+         done
+         if test $useit = yes; then
+           NEW_LINGUAS="$NEW_LINGUAS $presentlang"
+         fi
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl Generate list of files to be processed by xgettext which will
+   dnl be included in po/Makefile.
+   test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,	$posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+	< $srcdir/po/POTFILES.in > po/POTFILES
+  ])
+
+# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
+# -------------------------------
+# Define VARIABLE to the location where catalog files will
+# be installed by po/Makefile.
+glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
+[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
+glib_save_prefix="$prefix"
+glib_save_exec_prefix="$exec_prefix"
+glib_save_datarootdir="$datarootdir"
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+datarootdir=`eval echo "${datarootdir}"`
+if test "x$CATOBJEXT" = "x.mo" ; then
+  localedir=`eval echo "${libdir}/locale"`
+else
+  localedir=`eval echo "${datadir}/locale"`
+fi
+prefix="$glib_save_prefix"
+exec_prefix="$glib_save_exec_prefix"
+datarootdir="$glib_save_datarootdir"
+AC_DEFINE_UNQUOTED($1, "$localedir",
+  [Define the location where the catalogs will be installed])
+])
+
+dnl
+dnl Now the definitions that aclocal will find
+dnl
+ifdef(glib_configure_in,[],[
+AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
+AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
+])dnl
+
+# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL])
+#
+# Create a temporary file with TEST-FILE as its contents and pass the
+# file name to PROGRAM.  Perform ACTION-IF-PASS if PROGRAM exits with
+# 0 and perform ACTION-IF-FAIL for any other exit status.
+AC_DEFUN([GLIB_RUN_PROG],
+[cat >conftest.foo <<_ACEOF
+$2
+_ACEOF
+if AC_RUN_LOG([$1 conftest.foo]); then
+  m4_ifval([$3], [$3], [:])
+m4_ifvaln([$4], [else $4])dnl
+echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD
+sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD
+fi])
+
diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
new file mode 100644
index 0000000..2e935d2
--- /dev/null
+++ b/common/m4/gst-arch.m4
@@ -0,0 +1,141 @@
+dnl AG_GST_ARCH
+dnl sets up defines and automake conditionals for host architecture
+dnl checks endianness
+dnl defines HOST_CPU
+
+AC_DEFUN([AG_GST_ARCH],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
+
+  dnl Determine CPU
+  case "x${host_cpu}" in
+    xi?86 | xk? | xi?86_64)
+      case $host_os in
+         solaris*)
+            AC_CHECK_DECL([__i386],	[I386_ABI="yes"], [I386_ABI="no"])
+            AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
+
+            if test "x$I386_ABI" = "xyes" ; then
+               HAVE_CPU_I386=yes
+               AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86])
+            fi
+            if test "x$AMD64_ABI" = "xyes" ; then
+                HAVE_CPU_X86_64=yes
+                AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64])
+            fi
+            ;;
+         *)
+            HAVE_CPU_I386=yes
+            AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86])
+
+            dnl FIXME could use some better detection
+            dnl (ie CPUID)
+            case "x${host_cpu}" in
+              xi386 | xi486) ;;
+            *)
+              AC_DEFINE(HAVE_RDTSC, 1, [Define if RDTSC is available]) ;;
+            esac
+            ;;
+      esac
+      ;;
+    xpowerpc)
+      HAVE_CPU_PPC=yes
+      AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the host CPU is a PowerPC]) ;;
+    xpowerpc64)
+      HAVE_CPU_PPC64=yes
+      AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the host CPU is a 64 bit PowerPC]) ;;
+    xalpha*)
+      HAVE_CPU_ALPHA=yes
+      AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the host CPU is an Alpha]) ;;
+    xarm*)
+      HAVE_CPU_ARM=yes
+      AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the host CPU is an ARM]) ;;
+    xsparc*)
+      HAVE_CPU_SPARC=yes
+      AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the host CPU is a SPARC]) ;;
+    xmips*)
+      HAVE_CPU_MIPS=yes
+      AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the host CPU is a MIPS]) ;;
+    xhppa*)
+      HAVE_CPU_HPPA=yes
+      AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the host CPU is a HPPA]) ;;
+    xs390*)
+      HAVE_CPU_S390=yes
+      AC_DEFINE(HAVE_CPU_S390, 1, [Define if the host CPU is a S390]) ;;
+    xia64*)
+      HAVE_CPU_IA64=yes
+      AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the host CPU is a IA64]) ;;
+    xm68k*)
+      HAVE_CPU_M68K=yes
+      AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the host CPU is a M68K]) ;;
+    xx86_64)
+      HAVE_CPU_X86_64=yes
+      AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) ;;
+    xcris)
+      HAVE_CPU_CRIS=yes
+      AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the host CPU is a CRIS]) ;;
+    xcrisv32)
+      HAVE_CPU_CRISV32=yes
+      AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the host CPU is a CRISv32]) ;;
+  esac
+
+  dnl Determine endianness
+  AC_C_BIGENDIAN
+
+  AM_CONDITIONAL(HAVE_CPU_I386,       test "x$HAVE_CPU_I386" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_PPC,        test "x$HAVE_CPU_PPC" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_PPC64,      test "x$HAVE_CPU_PPC64" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_ALPHA,      test "x$HAVE_CPU_ALPHA" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_ARM,        test "x$HAVE_CPU_ARM" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_SPARC,      test "x$HAVE_CPU_SPARC" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_HPPA,       test "x$HAVE_CPU_HPPA" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_MIPS,       test "x$HAVE_CPU_MIPS" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_S390,       test "x$HAVE_CPU_S390" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_IA64,       test "x$HAVE_CPU_IA64" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_M68K,       test "x$HAVE_CPU_M68K" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_X86_64,     test "x$HAVE_CPU_X86_64" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_CRIS,       test "x$HAVE_CPU_CRIS" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_CRISV32,    test "x$HAVE_CPU_CRISV32" = "xyes")
+
+  AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [the host CPU])
+])
+
+dnl check if unaligned memory access works correctly
+AC_DEFUN([AG_GST_UNALIGNED_ACCESS], [
+  AC_MSG_CHECKING([if unaligned memory access works correctly])
+  if test x"$as_cv_unaligned_access" = x ; then
+    case $host in
+      alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*)
+        _AS_ECHO_N([(blacklisted) ])
+        as_cv_unaligned_access=no
+	;;
+      i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*)
+        _AS_ECHO_N([(whitelisted) ])
+        as_cv_unaligned_access=yes
+	;;
+    esac
+  else
+    _AS_ECHO_N([(cached) ])
+  fi
+  if test x"$as_cv_unaligned_access" = x ; then
+    AC_TRY_RUN([
+int main(int argc, char **argv)
+{
+  char array[] = "ABCDEFGH";
+  unsigned int iarray[2];
+  memcpy(iarray,array,8);
+#define GET(x) (*(unsigned int *)((char *)iarray + (x)))
+  if(GET(0) != 0x41424344 && GET(0) != 0x44434241) return 1;
+  if(GET(1) != 0x42434445 && GET(1) != 0x45444342) return 1;
+  if(GET(2) != 0x43444546 && GET(2) != 0x46454443) return 1;
+  if(GET(3) != 0x44454647 && GET(3) != 0x47464544) return 1;
+  return 0;
+}
+    ], as_cv_unaligned_access="yes", as_cv_unaligned_access="no")
+  fi
+  AC_MSG_RESULT($as_cv_unaligned_access)
+  if test "$as_cv_unaligned_access" = "yes"; then
+    AC_DEFINE_UNQUOTED(HAVE_UNALIGNED_ACCESS, 1,
+      [defined if unaligned memory access works correctly])
+  fi
+])
diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4
new file mode 100644
index 0000000..d16fa79
--- /dev/null
+++ b/common/m4/gst-args.m4
@@ -0,0 +1,335 @@
+dnl configure-time options shared among gstreamer modules
+
+dnl AG_GST_ARG_DEBUG
+dnl AG_GST_ARG_PROFILING
+dnl AG_GST_ARG_VALGRIND
+dnl AG_GST_ARG_GCOV
+
+dnl AG_GST_ARG_EXAMPLES
+
+dnl AG_GST_ARG_WITH_PKG_CONFIG_PATH
+dnl AG_GST_ARG_WITH_PACKAGE_NAME
+dnl AG_GST_ARG_WITH_PACKAGE_ORIGIN
+
+dnl AG_GST_ARG_WITH_PLUGINS
+dnl AG_GST_CHECK_PLUGIN
+dnl AG_GST_DISABLE_PLUGIN
+
+dnl AG_GST_ARG_ENABLE_EXTERNAL
+dnl AG_GST_ARG_ENABLE_EXPERIMENTAL
+dnl AG_GST_ARG_ENABLE_BROKEN
+
+AC_DEFUN([AG_GST_ARG_DEBUG],
+[
+  dnl debugging stuff
+  AC_ARG_ENABLE(debug,
+    AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]),
+    [
+      case "${enableval}" in
+        yes) USE_DEBUG=yes ;;
+        no)  USE_DEBUG=no ;;
+        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
+      esac
+    ],
+    [USE_DEBUG=yes]) dnl Default value
+])
+
+AC_DEFUN([AG_GST_ARG_PROFILING],
+[
+  AC_ARG_ENABLE(profiling,
+    AC_HELP_STRING([--enable-profiling],
+      [adds -pg to compiler commandline, for profiling]),
+    [
+      case "${enableval}" in
+        yes) USE_PROFILING=yes ;;
+        no)  USE_PROFILING=no ;;
+        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-profiling) ;;
+      esac
+    ],
+    [USE_PROFILING=no]) dnl Default value
+])
+
+AC_DEFUN([AG_GST_ARG_VALGRIND],
+[
+  dnl valgrind inclusion
+  AC_ARG_ENABLE(valgrind,
+    AC_HELP_STRING([--disable-valgrind],[disable run-time valgrind detection]),
+    [
+      case "${enableval}" in
+        yes) USE_VALGRIND="$USE_DEBUG" ;;
+        no)  USE_VALGRIND=no ;;
+        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;;
+      esac
+    ],
+    [USE_VALGRIND="$USE_DEBUG"]) dnl Default value
+  VALGRIND_REQ="3.0"
+  if test "x$USE_VALGRIND" = xyes; then
+    PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ,
+      USE_VALGRIND="yes",
+      USE_VALGRIND="no")
+  fi
+  if test "x$USE_VALGRIND" = xyes; then
+    AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used])
+    AC_MSG_NOTICE(Using extra code paths for valgrind)
+  fi
+])
+
+AC_DEFUN([AG_GST_ARG_GCOV],
+[
+  AC_ARG_ENABLE(gcov,
+    AC_HELP_STRING([--enable-gcov],
+      [compile with coverage profiling instrumentation (gcc only)]),
+    enable_gcov=$enableval,
+    enable_gcov=no)
+  if test x$enable_gcov = xyes ; then
+    if test "x$GCC" != "xyes"
+    then
+      AC_MSG_ERROR([gcov only works if gcc is used])
+    fi
+
+    AS_COMPILER_FLAG(["-fprofile-arcs"],
+      [GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs"],
+      true)
+    AS_COMPILER_FLAG(["-ftest-coverage"],
+      [GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage"],
+      true)
+    dnl remove any -O flags - FIXME: is this needed ?
+    GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[[0-9]]*//g'`
+    dnl libtool 1.5.22 and lower strip -fprofile-arcs from the flags
+    dnl passed to the linker, which is a bug; -fprofile-arcs implicitly
+    dnl links in -lgcov, so we do it explicitly here for the same effect
+    GCOV_LIBS=-lgcov
+    AC_SUBST(GCOV_CFLAGS)
+    AC_SUBST(GCOV_LIBS)
+    GCOV=`echo $CC | sed s/gcc/gcov/g`
+    AC_SUBST(GCOV)
+
+    GST_GCOV_ENABLED=yes
+    AC_DEFINE_UNQUOTED(GST_GCOV_ENABLED, 1,
+      [Defined if gcov is enabled to force a rebuild due to config.h changing])
+    dnl if gcov is used, we do not want default -O2 CFLAGS
+    if test "x$GST_GCOV_ENABLED" = "xyes"
+    then
+      CFLAGS="-O0"
+      AC_SUBST(CFLAGS)
+      CXXFLAGS="-O0"
+      AC_SUBST(CXXFLAGS)
+      FFLAGS="-O0"
+      AC_SUBST(FFLAGS)
+      CCASFLAGS="-O0"
+      AC_SUBST(CCASFLAGS)
+      AC_MSG_NOTICE([gcov enabled, setting CFLAGS and friends to $CFLAGS])
+    fi
+  fi
+  AM_CONDITIONAL(GST_GCOV_ENABLED, test x$enable_gcov = xyes)
+])
+
+AC_DEFUN([AG_GST_ARG_EXAMPLES],
+[
+  AC_ARG_ENABLE(examples,
+    AC_HELP_STRING([--disable-examples], [disable building examples]),
+      [
+        case "${enableval}" in
+          yes) BUILD_EXAMPLES=yes ;;
+          no)  BUILD_EXAMPLES=no ;;
+          *)   AC_MSG_ERROR(bad value ${enableval} for --disable-examples) ;;
+        esac
+      ],
+      [BUILD_EXAMPLES=yes]) dnl Default value
+  AM_CONDITIONAL(BUILD_EXAMPLES,      test "x$BUILD_EXAMPLES" = "xyes")
+])
+
+AC_DEFUN([AG_GST_ARG_WITH_PKG_CONFIG_PATH],
+[
+  dnl possibly modify pkg-config path
+  AC_ARG_WITH(pkg-config-path,
+     AC_HELP_STRING([--with-pkg-config-path],
+                    [colon-separated list of pkg-config(1) dirs]),
+     [
+       export PKG_CONFIG_PATH=${withval}
+       AC_MSG_NOTICE(Set PKG_CONFIG_PATH to $PKG_CONFIG_PATH)
+     ])
+])
+
+
+dnl This macro requires that GST_GIT or GST_CVS is set to yes or no (release)
+AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_NAME],
+[
+  dnl package name in plugins
+  AC_ARG_WITH(package-name,
+    AC_HELP_STRING([--with-package-name],
+      [specify package name to use in plugins]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-package-name) ;;
+        *)   GST_PACKAGE_NAME="${withval}" ;;
+      esac
+    ],
+    [
+      P=$1
+      if test "x$P" = "x"
+      then
+        P=$PACKAGE_NAME
+      fi
+
+      if test "x$PACKAGE_VERSION_NANO" = "x0"
+      then
+        GST_PACKAGE_NAME="$P source release"
+      else
+        if test "x$PACKAGE_VERSION_NANO" = "x1"
+        then
+          GST_PACKAGE_NAME="$P git"
+        else
+          GST_PACKAGE_NAME="$P prerelease"
+        fi
+      fi
+    ]
+  )
+  AC_MSG_NOTICE(Using $GST_PACKAGE_NAME as package name)
+  AC_DEFINE_UNQUOTED(GST_PACKAGE_NAME, "$GST_PACKAGE_NAME",
+      [package name in plugins])
+  AC_SUBST(GST_PACKAGE_NAME)
+])
+
+AC_DEFUN([AG_GST_ARG_WITH_PACKAGE_ORIGIN],
+[
+  dnl package origin URL
+  AC_ARG_WITH(package-origin,
+    AC_HELP_STRING([--with-package-origin],
+      [specify package origin URL to use in plugins]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-package-origin) ;;
+        *)   GST_PACKAGE_ORIGIN="${withval}" ;;
+      esac
+    ],
+    [GST_PACKAGE_ORIGIN="[Unknown package origin]"] dnl Default value
+  )
+  AC_MSG_NOTICE(Using $GST_PACKAGE_ORIGIN as package origin)
+  AC_DEFINE_UNQUOTED(GST_PACKAGE_ORIGIN, "$GST_PACKAGE_ORIGIN",
+      [package origin])
+  AC_SUBST(GST_PACKAGE_ORIGIN)
+])
+
+dnl sets WITH_PLUGINS to the list of plug-ins given as an argument
+dnl also clears GST_PLUGINS_ALL and GST_PLUGINS_SELECTED
+AC_DEFUN([AG_GST_ARG_WITH_PLUGINS],
+[
+  AC_ARG_WITH(plugins,
+    AC_HELP_STRING([--with-plugins],
+      [comma-separated list of dependencyless plug-ins to compile]),
+    [WITH_PLUGINS=$withval],
+    [WITH_PLUGINS=])
+
+  GST_PLUGINS_ALL=""
+  GST_PLUGINS_SELECTED=""
+  GST_PLUGINS_NONPORTED=""
+
+  AC_SUBST(GST_PLUGINS_ALL)
+  AC_SUBST(GST_PLUGINS_SELECTED)
+  AC_SUBST(GST_PLUGINS_NONPORTED)
+])
+
+dnl AG_GST_CHECK_PLUGIN(PLUGIN-NAME)
+dnl
+dnl This macro adds the plug-in <PLUGIN-NAME> to GST_PLUGINS_ALL. Then it
+dnl checks if WITH_PLUGINS is empty or the plugin is present in WITH_PLUGINS,
+dnl and if so adds it to GST_PLUGINS_SELECTED. Then it checks if the plugin
+dnl is present in WITHOUT_PLUGINS (ie. was disabled specifically) and if so
+dnl removes it from GST_PLUGINS_SELECTED.
+dnl
+dnl The macro will call AM_CONDITIONAL(USE_PLUGIN_<PLUGIN-NAME>, ...) to allow
+dnl control of what is built in Makefile.ams.
+AC_DEFUN([AG_GST_CHECK_PLUGIN],
+[
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL [$1]"
+
+  define([pname_def],translit([$1], -a-z, _a-z))
+
+  AC_ARG_ENABLE([$1],
+    AC_HELP_STRING([--disable-[$1]], [disable dependency-less $1 plugin]),
+    [
+      case "${enableval}" in
+        yes) [gst_use_]pname_def=yes ;;
+        no) [gst_use_]pname_def=no ;;
+        *) AC_MSG_ERROR([bad value ${enableval} for --enable-$1]) ;;
+       esac
+    ],
+    [[gst_use_]pname_def=yes]) dnl Default value
+
+  if test x$[gst_use_]pname_def = xno; then
+    AC_MSG_NOTICE(disabling dependency-less plugin $1)
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS [$1]"
+  fi
+  undefine([pname_def])
+
+  dnl First check inclusion
+  if [[ -z "$WITH_PLUGINS" ]] || echo " [$WITH_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED [$1]"
+  fi
+  dnl Then check exclusion
+  if echo " [$WITHOUT_PLUGINS] " | tr , ' ' | grep -i " [$1] " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'`
+  fi
+  dnl Finally check if the plugin is ported or not
+  if echo " [$GST_PLUGINS_NONPORTED] " | tr , ' ' | grep -i " [$1] " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'`
+  fi
+  AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), echo " $GST_PLUGINS_SELECTED " | grep -i " [$1] " > /dev/null)
+])
+
+dnl AG_GST_DISABLE_PLUGIN(PLUGIN-NAME)
+dnl
+dnl This macro disables the plug-in <PLUGIN-NAME> by removing it from
+dnl GST_PLUGINS_SELECTED.
+AC_DEFUN([AG_GST_DISABLE_PLUGIN],
+[
+  GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ [$1] / /'`
+  AM_CONDITIONAL([USE_PLUGIN_]translit([$1], a-z, A-Z), false)
+])
+
+AC_DEFUN([AG_GST_ARG_ENABLE_EXTERNAL],
+[
+  AG_GST_CHECK_FEATURE(EXTERNAL, [building of plug-ins with external deps],,
+    HAVE_EXTERNAL=yes, enabled,
+    [
+      AC_MSG_NOTICE(building external plug-ins)
+      BUILD_EXTERNAL="yes"
+    ],[
+      AC_MSG_WARN(all plug-ins with external dependencies will not be built)
+      BUILD_EXTERNAL="no"
+    ])
+  # make BUILD_EXTERNAL available to Makefile.am
+  AM_CONDITIONAL(BUILD_EXTERNAL, test "x$BUILD_EXTERNAL" = "xyes")
+])
+
+dnl experimental plug-ins; stuff that hasn't had the dust settle yet
+dnl read 'builds, but might not work'
+AC_DEFUN([AG_GST_ARG_ENABLE_EXPERIMENTAL],
+[
+  AG_GST_CHECK_FEATURE(EXPERIMENTAL, [building of experimental plug-ins],,
+    HAVE_EXPERIMENTAL=yes, disabled,
+    [
+      AC_MSG_WARN(building experimental plug-ins)
+      BUILD_EXPERIMENTAL="yes"
+    ],[
+      AC_MSG_NOTICE(not building experimental plug-ins)
+      BUILD_EXPERIMENTAL="no"
+    ])
+  # make BUILD_EXPERIMENTAL available to Makefile.am
+  AM_CONDITIONAL(BUILD_EXPERIMENTAL, test "x$BUILD_EXPERIMENTAL" = "xyes")
+])
+
+dnl broken plug-ins; stuff that doesn't seem to build at the moment
+AC_DEFUN([AG_GST_ARG_ENABLE_BROKEN],
+[
+  AG_GST_CHECK_FEATURE(BROKEN, [building of broken plug-ins],,
+    HAVE_BROKEN=yes, disabled,
+    [
+      AC_MSG_WARN([building broken plug-ins -- no bug reports on these, only patches ...])
+    ],[
+      AC_MSG_NOTICE([not building broken plug-ins])
+    ])
+])
diff --git a/common/m4/gst-check.m4 b/common/m4/gst-check.m4
new file mode 100644
index 0000000..3fd3acf
--- /dev/null
+++ b/common/m4/gst-check.m4
@@ -0,0 +1,262 @@
+dnl pkg-config-based checks for GStreamer modules and dependency modules
+
+dnl generic:
+dnl AG_GST_PKG_CHECK_MODULES([PREFIX], [WHICH], [REQUIRED])
+dnl sets HAVE_[$PREFIX], [$PREFIX]_*
+dnl AG_GST_CHECK_MODULES([PREFIX], [MODULE], [MINVER], [NAME], [REQUIRED])
+dnl sets HAVE_[$PREFIX], [$PREFIX]_*
+
+dnl specific:
+dnl AG_GST_CHECK_GST([MAJMIN], [MINVER], [REQUIRED])
+dnl   also sets/ACSUBSTs GST_TOOLS_DIR and GST_PLUGINS_DIR
+dnl AG_GST_CHECK_GST_BASE([MAJMIN], [MINVER], [REQUIRED])
+dnl AG_GST_CHECK_GST_GDP([MAJMIN], [MINVER], [REQUIRED])
+dnl AG_GST_CHECK_GST_CONTROLLER([MAJMIN], [MINVER], [REQUIRED])
+dnl AG_GST_CHECK_GST_CHECK([MAJMIN], [MINVER], [REQUIRED])
+dnl AG_GST_CHECK_GST_PLUGINS_BASE([MAJMIN], [MINVER], [REQUIRED])
+dnl   also sets/ACSUBSTs GSTPB_PLUGINS_DIR
+
+AC_DEFUN([AG_GST_PKG_CHECK_MODULES],
+[
+  which="[$2]"
+  dnl not required by default, since we use this mostly for plugin deps
+  required=ifelse([$3], , "no", [$3])
+
+  PKG_CHECK_MODULES([$1], $which,
+    [
+      HAVE_[$1]="yes"
+    ],
+    [
+      HAVE_[$1]="no"
+      if test "x$required" = "xyes"; then
+        AC_MSG_ERROR($[$1]_PKG_ERRORS)
+      else
+        AC_MSG_NOTICE($[$1]_PKG_ERRORS)
+      fi
+    ])
+
+  dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7
+  dnl It gets done automatically in automake >= 1.7, which we now require
+]))
+
+AC_DEFUN([AG_GST_CHECK_MODULES],
+[
+  module=[$2]
+  minver=[$3]
+  name="[$4]"
+  required=ifelse([$5], , "yes", [$5]) dnl required by default
+
+  PKG_CHECK_MODULES([$1], $module >= $minver,
+    [
+      HAVE_[$1]="yes"
+    ],
+    [
+      HAVE_[$1]="no"
+      AC_MSG_NOTICE($[$1]_PKG_ERRORS)
+      if test "x$required" = "xyes"; then
+        AC_MSG_ERROR([no $module >= $minver ($name) found])
+      else
+        AC_MSG_NOTICE([no $module >= $minver ($name) found])
+      fi
+    ])
+
+  dnl AC_SUBST of CFLAGS and LIBS was not done before automake 1.7
+  dnl It gets done automatically in automake >= 1.7, which we now require
+]))
+
+AC_DEFUN([AG_GST_CHECK_GST],
+[
+  AG_GST_CHECK_MODULES(GST, gstreamer-[$1], [$2], [GStreamer], [$3])
+  dnl allow setting before calling this macro to override
+  if test -z $GST_TOOLS_DIR; then
+    GST_TOOLS_DIR=`$PKG_CONFIG --variable=toolsdir gstreamer-[$1]`
+    if test -z $GST_TOOLS_DIR; then
+      AC_MSG_ERROR(
+        [no tools dir set in GStreamer pkg-config file, core upgrade needed.])
+    fi
+  fi
+  AC_MSG_NOTICE([using GStreamer tools in $GST_TOOLS_DIR])
+  AC_SUBST(GST_TOOLS_DIR)
+
+  dnl check for where core plug-ins got installed
+  dnl this is used for unit tests
+  dnl allow setting before calling this macro to override
+  if test -z $GST_PLUGINS_DIR; then
+    GST_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-[$1]`
+    if test -z $GST_PLUGINS_DIR; then
+      AC_MSG_ERROR(
+        [no pluginsdir set in GStreamer pkg-config file, core upgrade needed.])
+    fi
+  fi
+  AC_MSG_NOTICE([using GStreamer plug-ins in $GST_PLUGINS_DIR])
+  AC_SUBST(GST_PLUGINS_DIR)
+])
+
+AC_DEFUN([AG_GST_CHECK_GST_BASE],
+[
+  AG_GST_CHECK_MODULES(GST_BASE, gstreamer-base-[$1], [$2],
+    [GStreamer Base Libraries], [$3])
+])
+
+AC_DEFUN([AG_GST_CHECK_GST_GDP],
+[
+  AG_GST_CHECK_MODULES(GST_GDP, gstreamer-dataprotocol-[$1], [$2],
+    [GStreamer Data Protocol Library], [$3])
+])
+
+AC_DEFUN([AG_GST_CHECK_GST_CONTROLLER],
+[
+  AG_GST_CHECK_MODULES(GST_CONTROLLER, gstreamer-controller-[$1], [$2],
+    [GStreamer Controller Library], [$3])
+])
+
+AC_DEFUN([AG_GST_CHECK_GST_CHECK],
+[
+  AG_GST_CHECK_MODULES(GST_CHECK, gstreamer-check-[$1], [$2],
+    [GStreamer Check unittest Library], [$3])
+])
+
+dnl ===========================================================================
+dnl AG_GST_CHECK_GST_PLUGINS_BASE([GST-MAJORMINOR], [MIN-VERSION], [REQUIRED])
+dnl
+dnl Sets GST_PLUGINS_BASE_CFLAGS and GST_PLUGINS_BASE_LIBS.
+dnl
+dnl Also sets GSTPB_PLUGINS_DIR (and for consistency also GST_PLUGINS_BASE_DIR)
+dnl for use in Makefile.am. This is only really needed/useful in uninstalled
+dnl setups, since in an installed setup all plugins will be found in
+dnl GST_PLUGINS_DIR anyway.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BASE],
+[
+  AG_GST_CHECK_MODULES(GST_PLUGINS_BASE, gstreamer-plugins-base-[$1], [$2],
+    [GStreamer Base Plugins], [$3])
+
+  if test "x$HAVE_GST_PLUGINS_BASE" = "xyes"; then
+    dnl check for where base plugins got installed
+    dnl this is used for unit tests
+    dnl allow setting before calling this macro to override
+    if test -z $GSTPB_PLUGINS_DIR; then
+      GSTPB_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-base-[$1]`
+      if test -z $GSTPB_PLUGINS_DIR; then
+        AC_MSG_ERROR(
+          [no pluginsdir set in GStreamer Base Plugins pkg-config file])
+      fi
+    fi
+    AC_MSG_NOTICE([using GStreamer Base Plugins in $GSTPB_PLUGINS_DIR])
+    GST_PLUGINS_BASE_DIR="$GSTPB_PLUGINS_DIR/gst:$GSTPB_PLUGINS_DIR/sys:$GSTPB_PLUGINS_DIR/ext"
+    AC_SUBST(GST_PLUGINS_BASE_DIR)
+    AC_SUBST(GSTPB_PLUGINS_DIR)
+  fi
+])
+
+dnl ===========================================================================
+dnl AG_GST_CHECK_GST_PLUGINS_GOOD([GST-MAJORMINOR], [MIN-VERSION])
+dnl
+dnl Will set GST_PLUGINS_GOOD_DIR for use in Makefile.am. Note that this will
+dnl only be set in an uninstalled setup, since -good ships no .pc file and in
+dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_GOOD],
+[
+  AG_GST_CHECK_MODULES(GST_PLUGINS_GOOD, gstreamer-plugins-good-[$1], [$2],
+    [GStreamer Good Plugins], [no])
+
+  if test "x$HAVE_GST_PLUGINS_GOOD" = "xyes"; then
+    dnl check for where good plugins got installed
+    dnl this is used for unit tests
+    dnl allow setting before calling this macro to override
+    if test -z $GST_PLUGINS_GOOD_DIR; then
+      GST_PLUGINS_GOOD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-good-[$1]`
+      if test -z $GST_PLUGINS_GOOD_DIR; then
+        AC_MSG_ERROR([no pluginsdir set in GStreamer Good Plugins pkg-config file])
+      fi
+    fi
+    AC_MSG_NOTICE([using GStreamer Good Plugins in $GST_PLUGINS_GOOD_DIR])
+    GST_PLUGINS_GOOD_DIR="$GST_PLUGINS_GOOD_DIR/gst:$GST_PLUGINS_GOOD_DIR/sys:$GST_PLUGINS_GOOD_DIR/ext"
+    AC_SUBST(GST_PLUGINS_GOOD_DIR)
+  fi
+])
+
+dnl ===========================================================================
+dnl AG_GST_CHECK_GST_PLUGINS_UGLY([GST-MAJORMINOR], [MIN-VERSION])
+dnl
+dnl Will set GST_PLUGINS_UGLY_DIR for use in Makefile.am. Note that this will
+dnl only be set in an uninstalled setup, since -bad ships no .pc file and in
+dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_UGLY],
+[
+  AG_GST_CHECK_MODULES(GST_PLUGINS_UGLY, gstreamer-plugins-ugly-[$1], [$2],
+    [GStreamer Ugly Plugins], [no])
+
+  if test "x$HAVE_GST_PLUGINS_UGLY" = "xyes"; then
+    dnl check for where ugly plugins got installed
+    dnl this is used for unit tests
+    dnl allow setting before calling this macro to override
+    if test -z $GST_PLUGINS_UGLY_DIR; then
+      GST_PLUGINS_UGLY_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ugly-[$1]`
+      if test -z $GST_PLUGINS_UGLY_DIR; then
+        AC_MSG_ERROR([no pluginsdir set in GStreamer Ugly Plugins pkg-config file])
+      fi
+    fi
+    AC_MSG_NOTICE([using GStreamer Ugly Plugins in $GST_PLUGINS_UGLY_DIR])
+    GST_PLUGINS_UGLY_DIR="$GST_PLUGINS_UGLY_DIR/gst:$GST_PLUGINS_UGLY_DIR/sys:$GST_PLUGINS_UGLY_DIR/ext"
+    AC_SUBST(GST_PLUGINS_UGLY_DIR)
+  fi
+])
+
+dnl ===========================================================================
+dnl AG_GST_CHECK_GST_PLUGINS_BAD([GST-MAJORMINOR], [MIN-VERSION])
+dnl
+dnl Will set GST_PLUGINS_BAD_DIR for use in Makefile.am. Note that this will
+dnl only be set in an uninstalled setup, since -ugly ships no .pc file and in
+dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_BAD],
+[
+  AG_GST_CHECK_MODULES(GST_PLUGINS_BAD, gstreamer-plugins-bad-[$1], [$2],
+    [GStreamer Bad Plugins], [no])
+
+  if test "x$HAVE_GST_PLUGINS_BAD" = "xyes"; then
+    dnl check for where bad plugins got installed
+    dnl this is used for unit tests
+    dnl allow setting before calling this macro to override
+    if test -z $GST_PLUGINS_BAD_DIR; then
+      GST_PLUGINS_BAD_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-bad-[$1]`
+      if test -z $GST_PLUGINS_BAD_DIR; then
+        AC_MSG_ERROR([no pluginsdir set in GStreamer Bad Plugins pkg-config file])
+      fi
+    fi
+    AC_MSG_NOTICE([using GStreamer Bad Plugins in $GST_PLUGINS_BAD_DIR])
+    GST_PLUGINS_BAD_DIR="$GST_PLUGINS_BAD_DIR/gst:$GST_PLUGINS_BAD_DIR/sys:$GST_PLUGINS_BAD_DIR/ext"
+    AC_SUBST(GST_PLUGINS_BAD_DIR)
+  fi
+])
+
+dnl ===========================================================================
+dnl AG_GST_CHECK_GST_PLUGINS_FFMPEG([GST-MAJORMINOR], [MIN-VERSION])
+dnl
+dnl Will set GST_PLUGINS_FFMPEG_DIR for use in Makefile.am. Note that this will
+dnl only be set in an uninstalled setup, since -ffmpeg ships no .pc file and in
+dnl an installed setup all plugins will be found in GST_PLUGINS_DIR anyway.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_CHECK_GST_PLUGINS_FFMPEG],
+[
+  AG_GST_CHECK_MODULES(GST_PLUGINS_FFMPEG, gstreamer-plugins-ffmpeg-[$1], [$2],
+    [GStreamer FFmpeg Plugins], [no])
+
+  if test "x$HAVE_GST_PLUGINS_FFMPEG" = "xyes"; then
+    dnl check for where ffmpeg plugins got installed
+    dnl this is used for unit tests
+    dnl allow setting before calling this macro to override
+    if test -z $GST_PLUGINS_FFMPEG_DIR; then
+      GST_PLUGINS_FFMPEG_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-ffmpeg-[$1]`
+      if test -z $GST_PLUGINS_FFMPEG_DIR; then
+        AC_MSG_ERROR([no pluginsdir set in GStreamer FFmpeg Plugins pkg-config file])
+      fi
+    fi
+    GST_PLUGINS_FFMPEG_DIR="$GST_PLUGINS_FFMPEG_DIR/ext/ffmpeg"
+    AC_MSG_NOTICE([using GStreamer FFmpeg Plugins in $GST_PLUGINS_FFMPEG_DIR])
+    AC_SUBST(GST_PLUGINS_FFMPEG_DIR)
+  fi
+])
diff --git a/common/m4/gst-debuginfo.m4 b/common/m4/gst-debuginfo.m4
new file mode 100644
index 0000000..b48854d
--- /dev/null
+++ b/common/m4/gst-debuginfo.m4
@@ -0,0 +1,46 @@
+AC_DEFUN([AG_GST_DEBUGINFO], [
+AC_ARG_ENABLE(debug,
+AC_HELP_STRING([--disable-debug],[disable addition of -g debugging info]),
+[case "${enableval}" in
+  yes) USE_DEBUG=yes ;;
+  no)  USE_DEBUG=no ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
+esac],
+[USE_DEBUG=yes]) dnl Default value
+
+AC_ARG_ENABLE(DEBUG,
+AC_HELP_STRING([--disable-DEBUG],[disables compilation of debugging messages]),
+[case "${enableval}" in
+  yes) ENABLE_DEBUG=yes ;;
+  no)  ENABLE_DEBUG=no ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-DEBUG) ;;
+esac],
+[ENABLE_DEBUG=yes]) dnl Default value
+if test x$ENABLE_DEBUG = xyes; then
+  AC_DEFINE(GST_DEBUG_ENABLED, 1, [Define if DEBUG statements should be compiled in])
+fi
+
+AC_ARG_ENABLE(INFO,
+AC_HELP_STRING([--disable-INFO],[disables compilation of informational messages]),
+[case "${enableval}" in
+  yes) ENABLE_INFO=yes ;;
+  no)  ENABLE_INFO=no ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-INFO) ;;
+esac],
+[ENABLE_INFO=yes]) dnl Default value
+if test x$ENABLE_INFO = xyes; then
+  AC_DEFINE(GST_INFO_ENABLED, 1, [Define if INFO statements should be compiled in])
+fi
+
+AC_ARG_ENABLE(debug-color,
+AC_HELP_STRING([--disable-debug-color],[disables color output of DEBUG and INFO output]),
+[case "${enableval}" in
+  yes) ENABLE_DEBUG_COLOR=yes ;;
+  no)  ENABLE_DEBUG_COLOR=no ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug-color) ;;
+esac],
+[ENABLE_DEBUG_COLOR=yes]) dnl Default value
+if test "x$ENABLE_DEBUG_COLOR" = xyes; then
+  AC_DEFINE(GST_DEBUG_COLOR, 1, [Define if debugging messages should be colorized])
+fi
+])
diff --git a/common/m4/gst-default.m4 b/common/m4/gst-default.m4
new file mode 100644
index 0000000..8de9756
--- /dev/null
+++ b/common/m4/gst-default.m4
@@ -0,0 +1,120 @@
+dnl default elements used for tests and such
+
+dnl AG_GST_DEFAULT_ELEMENTS
+
+AC_DEFUN([AG_GST_DEFAULT_ELEMENTS],
+[
+  dnl decide on default elements
+  dnl FIXME: describe where exactly this gets used
+  dnl FIXME: decide if it's a problem that this could point to sinks from
+  dnl        depending plugin modules
+  dnl FIXME: when can we just use autoaudiosrc and autovideosrc?
+  DEFAULT_AUDIOSINK="autoaudiosink"
+  DEFAULT_VIDEOSINK="autovideosink"
+  DEFAULT_AUDIOSRC="alsasrc"
+  DEFAULT_VIDEOSRC="v4l2src"
+  DEFAULT_VISUALIZER="goom"
+  case "$host" in
+    *-sun-* | *pc-solaris* )
+      DEFAULT_AUDIOSRC="sunaudiosrc"
+      ;;
+    *-darwin* )
+      DEFAULT_AUDIOSRC="osxaudiosrc"
+      ;;
+  esac
+
+  dnl Default audio sink
+  AC_ARG_WITH(default-audiosink,
+    AC_HELP_STRING([--with-default-audiosink], [specify default audio sink]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-default-audiosink) ;;
+        *)   DEFAULT_AUDIOSINK="${withval}" ;;
+      esac
+    ],
+    [
+      DEFAULT_AUDIOSINK="$DEFAULT_AUDIOSINK"
+    ] dnl Default value as determined above
+  )
+  AC_MSG_NOTICE(Using $DEFAULT_AUDIOSINK as default audio sink)
+  AC_SUBST(DEFAULT_AUDIOSINK)
+  AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSINK, "$DEFAULT_AUDIOSINK",
+    [Default audio sink])
+
+  dnl Default audio source
+  AC_ARG_WITH(default-audiosrc,
+    AC_HELP_STRING([--with-default-audiosrc], [specify default audio source]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-default-audiosrc) ;;
+        *)   DEFAULT_AUDIOSRC="${withval}" ;;
+      esac
+    ],
+    [
+      DEFAULT_AUDIOSRC="$DEFAULT_AUDIOSRC"
+    ] dnl Default value as determined above
+  )
+  AC_MSG_NOTICE(Using $DEFAULT_AUDIOSRC as default audio source)
+  AC_SUBST(DEFAULT_AUDIOSRC)
+  AC_DEFINE_UNQUOTED(DEFAULT_AUDIOSRC, "$DEFAULT_AUDIOSRC",
+    [Default audio source])
+
+  dnl Default video sink
+  AC_ARG_WITH(default-videosink,
+    AC_HELP_STRING([--with-default-videosink], [specify default video sink]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-default-videosink) ;;
+        *)   DEFAULT_VIDEOSINK="${withval}" ;;
+      esac
+    ],
+    [
+      DEFAULT_VIDEOSINK="$DEFAULT_VIDEOSINK"
+    ] dnl Default value as determined above
+  )
+  AC_MSG_NOTICE(Using $DEFAULT_VIDEOSINK as default video sink)
+  AC_SUBST(DEFAULT_VIDEOSINK)
+  AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSINK, "$DEFAULT_VIDEOSINK",
+    [Default video sink])
+
+  dnl Default video source
+  AC_ARG_WITH(default-videosrc,
+    AC_HELP_STRING([--with-default-videosrc], [specify default video source]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-default-videosrc) ;;
+        *)   DEFAULT_VIDEOSRC="${withval}" ;;
+      esac
+    ],
+    [
+      DEFAULT_VIDEOSRC="$DEFAULT_VIDEOSRC"
+    ] dnl Default value as determined above
+  )
+  AC_MSG_NOTICE(Using $DEFAULT_VIDEOSRC as default video source)
+  AC_SUBST(DEFAULT_VIDEOSRC)
+  AC_DEFINE_UNQUOTED(DEFAULT_VIDEOSRC, "$DEFAULT_VIDEOSRC",
+    [Default video source])
+
+    dnl Default visualizer
+  AC_ARG_WITH(default-visualizer,
+    AC_HELP_STRING([--with-default-visualizer], [specify default visualizer]),
+    [
+      case "${withval}" in
+        yes) AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;;
+        no)  AC_MSG_ERROR(bad value ${withval} for --with-default-visualizer) ;;
+        *)   DEFAULT_VISUALIZER="${withval}" ;;
+      esac
+    ],
+    [
+      DEFAULT_VISUALIZER="$DEFAULT_VISUALIZER"
+    ] dnl Default value as determined above
+  )
+  AC_MSG_NOTICE(Using $DEFAULT_VISUALIZER as default visualizer)
+  AC_SUBST(DEFAULT_VISUALIZER)
+  AC_DEFINE_UNQUOTED(DEFAULT_VISUALIZER, "$DEFAULT_VISUALIZER",
+    [Default visualizer])
+])
diff --git a/common/m4/gst-doc.m4 b/common/m4/gst-doc.m4
new file mode 100644
index 0000000..6521097
--- /dev/null
+++ b/common/m4/gst-doc.m4
@@ -0,0 +1,148 @@
+AC_DEFUN([AG_GST_DOCBOOK_CHECK],
+[
+  dnl choose a location to install docbook docs in
+  if test "x$PACKAGE_TARNAME" = "x"
+  then
+    AC_MSG_ERROR([Internal error - PACKAGE_TARNAME not set])
+  fi
+  docdir="\$(datadir)/doc/$PACKAGE_TARNAME-$GST_MAJORMINOR"
+
+  dnl enable/disable docbook documentation building
+  AC_ARG_ENABLE(docbook,
+  AC_HELP_STRING([--enable-docbook],
+                 [use docbook to build documentation [default=no]]),,
+                 enable_docbook=no)
+
+  have_docbook=no
+
+  if test x$enable_docbook = xyes; then
+    dnl check if we actually have everything we need
+
+    dnl check for docbook tools
+    AC_CHECK_PROG(HAVE_DOCBOOK2PS, docbook2ps, yes, no)
+    AC_CHECK_PROG(HAVE_DOCBOOK2HTML, docbook2html, yes, no)
+    AC_CHECK_PROG(HAVE_JADETEX, jadetex, yes, no)
+    AC_CHECK_PROG(HAVE_PS2PDF, ps2pdf, yes, no)
+
+    # -V option appeared in 0.6.10
+    docbook2html_min_version=0.6.10
+    if test "x$HAVE_DOCBOOK2HTML" != "xno"; then
+      docbook2html_version=`docbook2html --version`
+      AC_MSG_CHECKING([docbook2html version ($docbook2html_version) >= $docbook2html_min_version])
+      if perl -w <<EOF
+        (\$min_version_major, \$min_version_minor, \$min_version_micro ) = "$docbook2html_min_version" =~ /(\d+)\.(\d+)\.(\d+)/;
+        (\$docbook2html_version_major, \$docbook2html_version_minor, \$docbook2html_version_micro ) = "$docbook2html_version" =~ /(\d+)\.(\d+)\.(\d+)/;
+        exit (((\$docbook2html_version_major > \$min_version_major) ||
+  	     ((\$docbook2html_version_major == \$min_version_major) &&
+  	      (\$docbook2html_version_minor >= \$min_version_minor)) ||
+  	     ((\$docbook2html_version_major == \$min_version_major) &&
+  	      (\$docbook2html_version_minor >= \$min_version_minor) &&
+  	      (\$docbook2html_version_micro >= \$min_version_micro)))
+  	     ? 0 : 1);
+EOF
+      then
+        AC_MSG_RESULT(yes)
+      else
+        AC_MSG_RESULT(no)
+        HAVE_DOCBOOK2HTML=no
+      fi
+    fi
+
+    dnl check if we can process docbook stuff
+    AS_DOCBOOK(have_docbook=yes, have_docbook=no)
+
+    dnl check for extra tools
+    AC_CHECK_PROG(HAVE_DVIPS, dvips, yes, no)
+    AC_CHECK_PROG(HAVE_XMLLINT, xmllint, yes, no)
+
+    dnl check for image conversion tools
+    AC_CHECK_PROG(HAVE_FIG2DEV, fig2dev, yes, no)
+    if test "x$HAVE_FIG2DEV" = "xno" ; then
+      AC_MSG_WARN([Did not find fig2dev (from xfig), images will not be generated.])
+    fi
+
+    dnl The following is a hack: if fig2dev doesn't display an error message
+    dnl for the desired type, we assume it supports it.
+    HAVE_FIG2DEV_EPS=no
+    if test "x$HAVE_FIG2DEV" = "xyes" ; then
+      fig2dev_quiet=`fig2dev -L eps </dev/null 2>&1 >/dev/null`
+      if test "x$fig2dev_quiet" = "x" ; then
+        HAVE_FIG2DEV_EPS=yes
+      fi
+    fi
+    HAVE_FIG2DEV_PNG=no
+    if test "x$HAVE_FIG2DEV" = "xyes" ; then
+      fig2dev_quiet=`fig2dev -L png </dev/null 2>&1 >/dev/null`
+      if test "x$fig2dev_quiet" = "x" ; then
+        HAVE_FIG2DEV_PNG=yes
+      fi
+    fi
+    HAVE_FIG2DEV_PDF=no
+    if test "x$HAVE_FIG2DEV" = "xyes" ; then
+      fig2dev_quiet=`fig2dev -L pdf </dev/null 2>&1 >/dev/null`
+      if test "x$fig2dev_quiet" = "x" ; then
+        HAVE_FIG2DEV_PDF=yes
+      fi
+    fi
+
+    AC_CHECK_PROG(HAVE_PNGTOPNM, pngtopnm, yes, no)
+    AC_CHECK_PROG(HAVE_PNMTOPS,  pnmtops,  yes, no)
+    AC_CHECK_PROG(HAVE_EPSTOPDF, epstopdf, yes, no)
+
+    dnl check if we can generate HTML
+    if test "x$HAVE_DOCBOOK2HTML" = "xyes" && \
+       test "x$enable_docbook" = "xyes" && \
+       test "x$HAVE_XMLLINT" = "xyes" && \
+       test "x$HAVE_FIG2DEV_PNG" = "xyes"; then
+      DOC_HTML=yes
+      AC_MSG_NOTICE(Will output HTML documentation)
+     else
+      DOC_HTML=no
+      AC_MSG_NOTICE(Will not output HTML documentation)
+    fi
+
+    dnl check if we can generate PS
+    if test "x$HAVE_DOCBOOK2PS" = "xyes" && \
+       test "x$enable_docbook" = "xyes" && \
+       test "x$HAVE_XMLLINT" = "xyes" && \
+       test "x$HAVE_JADETEX" = "xyes" && \
+       test "x$HAVE_FIG2DEV_EPS" = "xyes" && \
+       test "x$HAVE_DVIPS" = "xyes" && \
+       test "x$HAVE_PNGTOPNM" = "xyes" && \
+       test "x$HAVE_PNMTOPS" = "xyes"; then
+      DOC_PS=yes
+      AC_MSG_NOTICE(Will output PS documentation)
+    else
+      DOC_PS=no
+      AC_MSG_NOTICE(Will not output PS documentation)
+    fi
+
+    dnl check if we can generate PDF - using only ps2pdf
+    if test "x$DOC_PS" = "xyes" && \
+       test "x$enable_docbook" = "xyes" && \
+       test "x$HAVE_XMLLINT" = "xyes" && \
+       test "x$HAVE_PS2PDF" = "xyes"; then
+      DOC_PDF=yes
+      AC_MSG_NOTICE(Will output PDF documentation)
+    else
+      DOC_PDF=no
+      AC_MSG_NOTICE(Will not output PDF documentation)
+    fi
+
+    dnl if we don't have everything, we should disable
+    if test "x$have_docbook" != "xyes"; then
+      enable_docbook=no
+    fi
+  fi
+
+  dnl if we're going to install documentation, tell us where
+  if test "x$have_docbook" = "xyes"; then
+    AC_MSG_NOTICE(Installing documentation in $docdir)
+    AC_SUBST(docdir)
+  fi
+
+  AM_CONDITIONAL(ENABLE_DOCBOOK,      test x$enable_docbook = xyes)
+  AM_CONDITIONAL(DOC_HTML,            test x$DOC_HTML = xyes)
+  AM_CONDITIONAL(DOC_PDF,             test x$DOC_PDF = xyes)
+  AM_CONDITIONAL(DOC_PS,              test x$DOC_PS = xyes)
+])
diff --git a/common/m4/gst-dowhile.m4 b/common/m4/gst-dowhile.m4
new file mode 100644
index 0000000..069808d
--- /dev/null
+++ b/common/m4/gst-dowhile.m4
@@ -0,0 +1,24 @@
+dnl
+dnl Check for working do while(0) macros. This is used by G_STMT_START
+dnl and G_STMT_END in glib/gmacros.h. Without having this defined we
+dnl get "ambigious if-else" compiler warnings when compling C++ code.
+dnl
+dnl Copied from GLib's configure.in
+dnl
+AC_DEFUN([AG_GST_CHECK_DOWHILE_MACROS],[
+
+dnl *** check for working do while(0) macros ***
+AC_CACHE_CHECK([for working do while(0) macros], _cv_g_support_dowhile_macros, [
+	AC_TRY_COMPILE([],[
+	#define STMT_START do
+	#define STMT_END while(0)
+	#define STMT_TEST STMT_START { i = 0; } STMT_END
+	int main(void) { int i = 1; STMT_TEST; return i; }],
+	[_cv_g_support_dowhile_macros=yes],
+	[_cv_g_support_dowhile_macros=no],
+	[_cv_g_support_dowhile_macros=yes])
+])
+if test x$_cv_g_support_dowhile_macros = xyes; then
+  AC_DEFINE(HAVE_DOWHILE_MACROS, 1, [define for working do while(0) macros])
+fi
+])
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
new file mode 100644
index 0000000..f8f2364
--- /dev/null
+++ b/common/m4/gst-error.m4
@@ -0,0 +1,213 @@
+dnl handle various error-related things
+
+dnl Thomas Vander Stichele <thomas@apestaart.org>
+dnl Tim-Philipp Müller <tim centricular net>
+
+dnl Last modification: 2008-02-18
+
+dnl AG_GST_SET_ERROR_CFLAGS([ADD-WERROR], [MORE_FLAGS])
+dnl AG_GST_SET_ERROR_CXXFLAGS([ADD-WERROR], [MORE_FLAGS])
+dnl AG_GST_SET_LEVEL_DEFAULT([IS-GIT-VERSION])
+
+
+dnl Sets WARNING_CFLAGS and ERROR_CFLAGS to something the compiler 
+dnl will accept and AC_SUBST them so they are available in Makefile
+dnl
+dnl WARNING_CFLAGS will contain flags to make the compiler emit more
+dnl   warnings.
+dnl ERROR_CFLAGS will contain flags to make those warnings fatal,
+dnl   unless ADD-WERROR is set to "no"
+dnl 
+dnl If MORE_FLAGS is set, tries to add each of the given flags
+dnl to WARNING_CFLAGS if the compiler supports them. Each flag is 
+dnl tested separately.
+dnl
+dnl These flags can be overridden at make time:
+dnl make ERROR_CFLAGS=
+AC_DEFUN([AG_GST_SET_ERROR_CFLAGS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AS_COMPILER_FLAG])
+
+  WARNING_CFLAGS=""
+  ERROR_CFLAGS=""
+
+  dnl if we support -Wall, set it unconditionally
+  AS_COMPILER_FLAG(-Wall,
+                   WARNING_CFLAGS="$WARNING_CFLAGS -Wall")
+
+  dnl Warn if declarations after statements are used (C99 extension)
+  AS_COMPILER_FLAG(-Wdeclaration-after-statement,
+        WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement")
+
+  dnl Warn if variable length arrays are used (C99 extension)
+  AS_COMPILER_FLAG(-Wvla,
+        WARNING_CFLAGS="$WARNING_CFLAGS -Wvla")
+
+  dnl Warn for invalid pointer arithmetic
+  AS_COMPILER_FLAG(-Wpointer-arith,
+        WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith")
+
+  dnl if asked for, add -Werror if supported
+  if test "x$1" != "xno"
+  then
+    AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror")
+
+    dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case)
+    if test "x$ERROR_CFLAGS" = "x"
+    then
+      AS_COMPILER_FLAG([-errwarn=%all], [
+          ERROR_CFLAGS="-errwarn=%all"
+          dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
+          dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
+          dnl no%E_MACRO_REDEFINED (Sun Forte case)
+          dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
+          dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
+          dnl "macro redefined" because of gst/gettext.h
+          dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
+          for f in 'no%E_EMPTY_DECLARATION' \
+                   'no%E_STATEMENT_NOT_REACHED' \
+                   'no%E_ARGUEMENT_MISMATCH' \
+                   'no%E_MACRO_REDEFINED' \
+                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
+          do
+            AS_COMPILER_FLAG([-errwarn=%all,$f], [
+              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
+            ])
+          done
+      ])
+    else
+      dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
+      dnl as before G_LOCK and friends caused strict aliasing compiler
+      dnl warnings.
+      PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
+        AS_COMPILER_FLAG(-fno-strict-aliasing,
+            ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing")
+	])
+    fi
+  fi
+
+  if test "x$2" != "x"
+  then
+    UNSUPPORTED=""
+    list="$2"
+    for each in $list
+    do
+      AS_COMPILER_FLAG($each,
+          WARNING_CFLAGS="$WARNING_CFLAGS $each",
+          UNSUPPORTED="$UNSUPPORTED $each")
+    done
+    if test "X$UNSUPPORTED" != X ; then
+      AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED])
+    fi
+  fi
+
+  AC_SUBST(WARNING_CFLAGS)
+  AC_SUBST(ERROR_CFLAGS)
+  AC_MSG_NOTICE([set WARNING_CFLAGS to $WARNING_CFLAGS])
+  AC_MSG_NOTICE([set ERROR_CFLAGS to $ERROR_CFLAGS])
+])
+
+dnl Sets WARNING_CXXFLAGS and ERROR_CXXFLAGS to something the compiler 
+dnl will accept and AC_SUBST them so they are available in Makefile
+dnl
+dnl WARNING_CXXFLAGS will contain flags to make the compiler emit more
+dnl   warnings.
+dnl ERROR_CXXFLAGS will contain flags to make those warnings fatal,
+dnl   unless ADD-WERROR is set to "no"
+dnl 
+dnl If MORE_FLAGS is set, tries to add each of the given flags
+dnl to WARNING_CFLAGS if the compiler supports them. Each flag is 
+dnl tested separately.
+dnl
+dnl These flags can be overridden at make time:
+dnl make ERROR_CXXFLAGS=
+AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS],
+[
+  AC_REQUIRE([AC_PROG_CXX])
+  AC_REQUIRE([AS_CXX_COMPILER_FLAG])
+
+  ERROR_CXXFLAGS=""
+  WARNING_CXXFLAGS=""
+
+  dnl if we support -Wall, set it unconditionally
+  AS_CXX_COMPILER_FLAG(-Wall, WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Wall")
+
+  dnl if asked for, add -Werror if supported
+  if test "x$1" != "xno"
+  then
+    AS_CXX_COMPILER_FLAG(-Werror, ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror")
+
+    if test "x$ERROR_CXXFLAGS" != "x"
+    then
+        dnl add exceptions
+        AS_CXX_COMPILER_FLAG([-Wno-non-virtual-dtor], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-non-virtual-dtor")
+
+	dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
+	dnl as before G_LOCK and friends caused strict aliasing compiler
+	dnl warnings.
+	PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
+	  AS_CXX_COMPILER_FLAG([-fno-strict-aliasing],
+	    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing")
+	  ])
+    else
+      dnl if -Werror isn't suported, try -errwarn=%all
+      AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all")
+      if test "x$ERROR_CXXFLAGS" != "x"; then
+        dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
+        dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
+        dnl no%E_MACRO_REDEFINED (Sun Forte case)
+        dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
+        dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
+        dnl "macro redefined" because of gst/gettext.h
+        dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
+        dnl FIXME: do any of these work with the c++ compiler? if not, why
+        dnl do we check at all?
+        for f in 'no%E_EMPTY_DECLARATION' \
+                 'no%E_STATEMENT_NOT_REACHED' \
+                 'no%E_ARGUEMENT_MISMATCH' \
+                 'no%E_MACRO_REDEFINED' \
+                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
+        do
+          AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f")
+        done
+      fi
+    fi
+  fi
+
+  if test "x$2" != "x"
+  then
+    UNSUPPORTED=""
+    list="$2"
+    for each in $list
+    do
+      AS_CXX_COMPILER_FLAG($each,
+          WARNING_CXXFLAGS="$WARNING_CXXFLAGS $each",
+          UNSUPPORTED="$UNSUPPORTED $each")
+    done
+    if test "X$UNSUPPORTED" != X ; then
+      AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED])
+    fi
+  fi
+
+  AC_SUBST(WARNING_CXXFLAGS)
+  AC_SUBST(ERROR_CXXFLAGS)
+  AC_MSG_NOTICE([set WARNING_CXXFLAGS to $WARNING_CXXFLAGS])
+  AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS])
+])
+
+dnl Sets the default error level for debugging messages
+AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT],
+[
+  dnl define correct errorlevel for debugging messages. We want to have
+  dnl GST_ERROR messages printed when running cvs builds
+  if test "x[$1]" = "xyes"; then
+    GST_LEVEL_DEFAULT=GST_LEVEL_ERROR
+  else
+    GST_LEVEL_DEFAULT=GST_LEVEL_NONE
+  fi
+  AC_DEFINE_UNQUOTED(GST_LEVEL_DEFAULT, $GST_LEVEL_DEFAULT,
+    [Default errorlevel to use])
+  dnl AC_SUBST so we can use it for win32/common/config.h
+  AC_SUBST(GST_LEVEL_DEFAULT)
+])
diff --git a/common/m4/gst-feature.m4 b/common/m4/gst-feature.m4
new file mode 100644
index 0000000..7f684b0
--- /dev/null
+++ b/common/m4/gst-feature.m4
@@ -0,0 +1,266 @@
+dnl Perform a check for a feature for GStreamer
+dnl Richard Boulton <richard-alsa@tartarus.org>
+dnl Thomas Vander Stichele <thomas@apestaart.org> added useful stuff
+dnl Last modification: 25/06/2001
+dnl
+dnl AG_GST_CHECK_FEATURE(FEATURE-NAME, FEATURE-DESCRIPTION,
+dnl                   DEPENDENT-PLUGINS, TEST-FOR-FEATURE,
+dnl                   DISABLE-BY-DEFAULT, ACTION-IF-USE, ACTION-IF-NOTUSE)
+dnl
+dnl This macro adds a command line argument to allow the user to enable
+dnl or disable a feature, and if the feature is enabled, performs a supplied
+dnl test to check if the feature is available.
+dnl
+dnl The test should define HAVE_<FEATURE-NAME> to "yes" or "no" depending
+dnl on whether the feature is available.
+dnl
+dnl The macro will set USE_<FEATURE-NAME> to "yes" or "no" depending on
+dnl whether the feature is to be used.
+dnl Thomas changed this, so that when USE_<FEATURE-NAME> was already set
+dnl to no, then it stays that way.
+dnl
+dnl The macro will call AM_CONDITIONAL(USE_<FEATURE-NAME>, ...) to allow
+dnl the feature to control what is built in Makefile.ams.  If you want
+dnl additional actions resulting from the test, you can add them with the
+dnl ACTION-IF-USE and ACTION-IF-NOTUSE parameters.
+dnl
+dnl FEATURE-NAME        is the name of the feature, and should be in
+dnl                     purely upper case characters.
+dnl FEATURE-DESCRIPTION is used to describe the feature in help text for
+dnl                     the command line argument.
+dnl DEPENDENT-PLUGINS   lists any plug-ins which depend on this feature.
+dnl TEST-FOR-FEATURE    is a test which sets HAVE_<FEATURE-NAME> to "yes"
+dnl                     or "no" depending on whether the feature is
+dnl                     available.
+dnl DISABLE-BY-DEFAULT  if "disabled", the feature is disabled by default,
+dnl                     if any other value, the feature is enabled by default.
+dnl ACTION-IF-USE       any extra actions to perform if the feature is to be
+dnl                     used.
+dnl ACTION-IF-NOTUSE    any extra actions to perform if the feature is not to
+dnl                     be used.
+dnl
+dnl
+dnl thomas :
+dnl we also added a history.
+dnl GST_PLUGINS_YES will contain all plugins to be built
+dnl                 that were checked through AG_GST_CHECK_FEATURE
+dnl GST_PLUGINS_NO will contain those that won't be built
+
+AC_DEFUN([AG_GST_CHECK_FEATURE],
+[echo
+AC_MSG_NOTICE(*** checking feature: [$2] ***)
+if test "x[$3]" != "x"
+then
+  AC_MSG_NOTICE(*** for plug-ins: [$3] ***)
+fi
+dnl
+builtin(define, [gst_endisable], ifelse($5, [disabled], [enable], [disable]))dnl
+dnl if it is set to NO, then don't even consider it for building
+NOUSE=
+if test "x$USE_[$1]" = "xno"; then
+  NOUSE="yes"
+fi
+AC_ARG_ENABLE(translit([$1], A-Z, a-z),
+  [  ]builtin(format, --%-26s gst_endisable %s, gst_endisable-translit([$1], A-Z, a-z), [$2]ifelse([$3],,,: [$3])),
+  [ case "${enableval}" in
+      yes) USE_[$1]=yes;;
+      no) USE_[$1]=no;;
+      *) AC_MSG_ERROR(bad value ${enableval} for --enable-translit([$1], A-Z, a-z)) ;;
+    esac],
+  [ USE_$1=]ifelse($5, [disabled], [no], [yes]))           dnl DEFAULT
+
+dnl *** set it back to no if it was preset to no
+if test "x$NOUSE" = "xyes"; then
+  USE_[$1]="no"
+  AC_MSG_WARN(*** $3 pre-configured not to be built)
+fi
+NOUSE=
+
+dnl *** Check if it is ported or not
+if echo " [$GST_PLUGINS_NONPORTED] " | tr , ' ' | grep -i " [$1] " > /dev/null; then
+  USE_[$1]="no"
+  AC_MSG_WARN(*** $3 not ported)
+fi
+
+dnl *** If it's enabled
+
+if test x$USE_[$1] = xyes; then
+  dnl save compile variables before the test
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_[$1]=no
+  dnl TEST_FOR_FEATURE
+  $4
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+  dnl If it isn't found, unset USE_[$1]
+  if test x$HAVE_[$1] = xno; then
+    USE_[$1]=no
+  else
+    ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will be built: [$3])])
+  fi
+fi
+dnl *** Warn if it's disabled or not found
+if test x$USE_[$1] = xyes; then
+  ifelse([$6], , :, [$6])
+  if test "x$3" != "x"; then
+    GST_PLUGINS_YES="\t[$3]\n$GST_PLUGINS_YES"
+  fi
+  AC_DEFINE(HAVE_[$1], , [Define to enable $2]ifelse($3,,, [ (used by $3)]).)
+else
+  ifelse([$3], , :, [AC_MSG_NOTICE(*** These plugins will not be built: [$3])])
+  if test "x$3" != "x"; then
+    GST_PLUGINS_NO="\t[$3]\n$GST_PLUGINS_NO"
+  fi
+  ifelse([$7], , :, [$7])
+fi
+dnl *** Define the conditional as appropriate
+AM_CONDITIONAL(USE_[$1], test x$USE_[$1] = xyes)
+])
+
+dnl Use AC_CHECK_LIB and AC_CHECK_HEADER to do both tests at once
+dnl sets HAVE_module if we have it
+dnl Richard Boulton <richard-alsa@tartarus.org>
+dnl Last modification: 26/06/2001
+dnl AG_GST_CHECK_LIBHEADER(FEATURE-NAME, LIB NAME, LIB FUNCTION, EXTRA LD FLAGS,
+dnl                     HEADER NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
+dnl
+dnl This check was written for GStreamer: it should be renamed and checked
+dnl for portability if you decide to use it elsewhere.
+dnl
+AC_DEFUN([AG_GST_CHECK_LIBHEADER],
+[
+  AC_CHECK_LIB([$2], [$3], HAVE_[$1]=yes, HAVE_[$1]=no,[$4])
+  if test "x$HAVE_[$1]" = "xyes"; then
+    AC_CHECK_HEADER([$5], :, HAVE_[$1]=no)
+    if test "x$HAVE_[$1]" = "xyes"; then
+      dnl execute what needs to be
+      ifelse([$6], , :, [$6])
+    else
+      ifelse([$7], , :, [$7])
+    fi
+  else
+    ifelse([$7], , :, [$7])
+  fi
+  AC_SUBST(HAVE_[$1])
+]
+)
+
+dnl 2004-02-14 Thomas - changed to get set properly and use proper output
+dnl 2003-06-27 Benjamin Otte - changed to make this work with gstconfig.h
+dnl
+dnl Add a subsystem --disable flag and all the necessary symbols and substitions
+dnl
+dnl AG_GST_CHECK_SUBSYSTEM_DISABLE(SYSNAME, [subsystem name])
+dnl
+AC_DEFUN([AG_GST_CHECK_SUBSYSTEM_DISABLE],
+[
+  dnl this define will replace each literal subsys_def occurrence with
+  dnl the lowercase hyphen-separated subsystem
+  dnl e.g. if $1 is GST_DEBUG then subsys_def will be a macro with gst-debug
+  define([subsys_def],translit([$1], _A-Z, -a-z))
+
+  AC_ARG_ENABLE(subsys_def,
+    AC_HELP_STRING(--disable-subsys_def, [disable $2]),
+    [
+      case "${enableval}" in
+        yes) GST_DISABLE_[$1]=no ;;
+        no) GST_DISABLE_[$1]=yes ;;
+        *) AC_MSG_ERROR([bad value ${enableval} for --enable-subsys_def]) ;;
+       esac
+    ],
+    [GST_DISABLE_[$1]=no]) dnl Default value
+
+  if test x$GST_DISABLE_[$1] = xyes; then
+    AC_MSG_NOTICE([disabled subsystem [$2]])
+    GST_DISABLE_[$1]_DEFINE="#define GST_DISABLE_$1 1"
+  else
+    GST_DISABLE_[$1]_DEFINE="/* #undef GST_DISABLE_$1 */"
+  fi
+  AC_SUBST(GST_DISABLE_[$1]_DEFINE)
+  undefine([subsys_def])
+])
+
+
+dnl Parse gstconfig.h for feature and defines add the symbols and substitions
+dnl
+dnl AG_GST_PARSE_SUBSYSTEM_DISABLE(GST_CONFIGPATH, FEATURE)
+dnl
+AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLE],
+[
+  grep >/dev/null "#undef GST_DISABLE_$2" $1
+  if test $? = 0; then
+    GST_DISABLE_[$2]=0
+  else
+    GST_DISABLE_[$2]=1
+  fi
+  AC_SUBST(GST_DISABLE_[$2])
+])
+
+dnl Parse gstconfig.h and defines add the symbols and substitions
+dnl
+dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH)
+dnl
+AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES],
+[
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,GST_DEBUG)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,LOADSAVE)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PARSE)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,TRACE)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,ALLOC_TRACE)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,REGISTRY)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,PLUGIN)
+  AG_GST_PARSE_SUBSYSTEM_DISABLE($1,XML)
+])
+
+
+
+dnl relies on GST_PLUGINS_ALL, GST_PLUGINS_SELECTED, GST_PLUGINS_YES,
+dnl GST_PLUGINS_NO, and BUILD_EXTERNAL
+AC_DEFUN([AG_GST_OUTPUT_PLUGINS], [
+
+printf "configure: *** Plug-ins without external dependencies that will be built:\n"
+( for i in $GST_PLUGINS_SELECTED; do printf '\t'$i'\n'; done ) | sort
+printf "\n"
+
+printf "configure: *** Plug-ins without external dependencies that will NOT be built:\n"
+( for i in $GST_PLUGINS_ALL; do
+    case " $GST_PLUGINS_SELECTED " in
+      *\ $i\ *)
+	;;
+      *)
+	printf '\t'$i'\n'
+	;;
+    esac
+  done ) | sort
+printf "\n"
+
+printf "configure: *** Plug-ins that have NOT been ported:\n"
+( for i in $GST_PLUGINS_NONPORTED; do
+	printf '\t'$i'\n'
+  done ) | sort
+printf "\n"
+
+if test "x$BUILD_EXTERNAL" = "xno"; then
+  printf "configure: *** No plug-ins with external dependencies will be built\n"
+else
+  printf "configure: *** Plug-ins with dependencies that will be built:"
+  printf "$GST_PLUGINS_YES\n" | sort
+  printf "\n"
+  printf "configure: *** Plug-ins with dependencies that will NOT be built:"
+  printf "$GST_PLUGINS_NO\n" | sort
+  printf "\n"
+fi
+])
+
diff --git a/common/m4/gst-function.m4 b/common/m4/gst-function.m4
new file mode 100644
index 0000000..61adfd3
--- /dev/null
+++ b/common/m4/gst-function.m4
@@ -0,0 +1,63 @@
+dnl
+dnl Check for compiler mechanism to show functions in debugging
+dnl copied from an Ali patch floating on the internet
+dnl
+AC_DEFUN([AG_GST_CHECK_FUNCTION],[
+  dnl #1: __PRETTY_FUNCTION__
+  AC_MSG_CHECKING(whether $CC implements __PRETTY_FUNCTION__)
+  AC_CACHE_VAL(gst_cv_have_pretty_function,[
+    AC_TRY_LINK([#include <stdio.h>],
+                [printf("%s", __PRETTY_FUNCTION__);],
+                gst_cv_have_pretty_function=yes,
+                gst_cv_have_pretty_function=no)
+  ])
+  AC_MSG_RESULT($gst_cv_have_pretty_function)
+  if test "$gst_cv_have_pretty_function" = yes; then
+    AC_DEFINE(HAVE_PRETTY_FUNCTION, 1,
+              [defined if the compiler implements __PRETTY_FUNCTION__])
+  fi
+
+dnl #2: __FUNCTION__
+  AC_MSG_CHECKING(whether $CC implements __FUNCTION__)
+  AC_CACHE_VAL(gst_cv_have_function,[
+    AC_TRY_LINK([#include <stdio.h>],
+                [printf("%s", __FUNCTION__);],
+                gst_cv_have_function=yes,
+                gst_cv_have_function=no)
+  ])
+  AC_MSG_RESULT($gst_cv_have_function)
+  if test "$gst_cv_have_function" = yes; then
+    AC_DEFINE(HAVE_FUNCTION, 1,
+              [defined if the compiler implements __FUNCTION__])
+  fi
+
+dnl #3: __func__
+  AC_MSG_CHECKING(whether $CC implements __func__)
+  AC_CACHE_VAL(gst_cv_have_func,[
+    AC_TRY_LINK([#include <stdio.h>],
+                [printf("%s", __func__);],
+                gst_cv_have_func=yes,
+                gst_cv_have_func=no)
+  ])
+  AC_MSG_RESULT($gst_cv_have_func)
+  if test "$gst_cv_have_func" = yes; then
+    AC_DEFINE(HAVE_FUNC, 1,
+              [defined if the compiler implements __func__])
+  fi
+
+dnl now define FUNCTION to whatever works, and fallback to ""
+  if test "$gst_cv_have_pretty_function" = yes; then
+    function=__PRETTY_FUNCTION__
+  else
+    if test "$gst_cv_have_function" = yes; then
+      function=__FUNCTION__
+    else
+      if test "$gst_cv_have_func" = yes; then
+        function=__func__
+      else
+        function=\"\"
+      fi
+    fi
+  fi
+  AC_DEFINE_UNQUOTED(GST_FUNCTION, $function, [macro to use to show function name])
+])
diff --git a/common/m4/gst-gettext.m4 b/common/m4/gst-gettext.m4
new file mode 100644
index 0000000..a63651b
--- /dev/null
+++ b/common/m4/gst-gettext.m4
@@ -0,0 +1,21 @@
+dnl gettext setup
+
+dnl AG_GST_GETTEXT([gettext-package])
+dnl defines GETTEXT_PACKAGE and LOCALEDIR
+
+AC_DEFUN([AG_GST_GETTEXT],
+[
+  if test "$USE_NLS" = "yes"; then
+    GETTEXT_PACKAGE=[$1]
+  else
+    GETTEXT_PACKAGE=[NULL]
+  fi
+  AC_SUBST(GETTEXT_PACKAGE)
+  AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE",
+                     [gettext package name])
+
+  dnl define LOCALEDIR in config.h
+  AS_AC_EXPAND(LOCALEDIR, $datadir/locale)
+  AC_DEFINE_UNQUOTED([LOCALEDIR], "$LOCALEDIR",
+                     [gettext locale dir])
+])
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
new file mode 100644
index 0000000..bafba41
--- /dev/null
+++ b/common/m4/gst-glib2.m4
@@ -0,0 +1,73 @@
+dnl check for a minimum version of GLib
+
+dnl AG_GST_GLIB_CHECK([minimum-version-required])
+
+AC_DEFUN([AG_GST_GLIB_CHECK],
+[
+  AC_REQUIRE([AS_NANO])
+
+  dnl Minimum required version of GLib
+  GLIB_REQ=[$1]
+  if test "x$GLIB_REQ" = "x"
+  then
+    AC_MSG_ERROR([Please specify a required version for GLib 2.0])
+  fi
+  AC_SUBST(GLIB_REQ)
+
+  dnl Check for glib with everything
+  AG_GST_PKG_CHECK_MODULES(GLIB,
+    glib-2.0 >= $GLIB_REQ gobject-2.0 gthread-2.0 gmodule-no-export-2.0)
+
+  if test "x$HAVE_GLIB" = "xno"; then
+    AC_MSG_ERROR([This package requires GLib >= $GLIB_REQ to compile.])
+  fi
+
+  dnl Add define to tell GLib that threading is always enabled within GStreamer
+  dnl code (optimisation, bypasses checks if the threading system is enabled
+  dnl when using threading primitives)
+  GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY"
+
+  dnl Define G_DISABLE_DEPRECATED for GIT versions
+  if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED"
+  fi
+
+  AC_ARG_ENABLE(gobject-cast-checks,
+    AS_HELP_STRING([--enable-gobject-cast-checks[=@<:@no/auto/yes@:>@]],
+      [Enable GObject cast checks]),, 
+    [enable_gobject_cast_checks=auto])
+
+  if test "x$enable_gobject_cast_checks" = "xauto"; then
+    dnl For releases, turn off the cast checks
+    if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+      enable_gobject_cast_checks=yes
+    else
+      enable_gobject_cast_checks=no
+    fi
+  fi
+
+  if test "x$enable_gobject_cast_checks" = "xno"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_CAST_CHECKS"
+  fi
+
+  AC_ARG_ENABLE(glib-asserts,
+    AS_HELP_STRING([--enable-glib-asserts[=@<:@no/auto/yes@:>@]],
+      [Enable GLib assertion]),, 
+    [enable_glib_assertions=auto])
+
+  if test "x$enable_glib_assertions" = "xauto"; then
+    dnl For releases, turn off the assertions
+    if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+      enable_glib_assertions=yes
+    else
+      enable_glib_assertions=no
+    fi
+  fi
+
+  if test "x$enable_glib_assertions" = "xno"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
+  fi
+
+  dnl for the poor souls who for example have glib in /usr/local
+  AS_SCRUB_INCLUDE(GLIB_CFLAGS)
+])
diff --git a/common/m4/gst-libxml2.m4 b/common/m4/gst-libxml2.m4
new file mode 100644
index 0000000..4a843f0
--- /dev/null
+++ b/common/m4/gst-libxml2.m4
@@ -0,0 +1,52 @@
+dnl call this macro with the minimum required version as an argument
+dnl this macro sets and AC_SUBSTs XML_CFLAGS and XML_LIBS
+dnl it also sets LIBXML_PKG, used for the pkg-config file
+
+AC_DEFUN([AG_GST_LIBXML2_CHECK],
+[
+  dnl Minimum required version of libxml2
+  dnl default to 2.4.9 if not specified
+  LIBXML2_REQ=ifelse([$1],,2.4.9,[$1])
+  AC_SUBST(LIBXML2_REQ)
+
+  dnl check for libxml2
+  PKG_CHECK_MODULES(XML, libxml-2.0 >= $LIBXML2_REQ,
+                    HAVE_LIBXML2=yes, [
+                      AC_MSG_RESULT(no)
+                      HAVE_LIBXML2=no
+                    ])
+  if test "x$HAVE_LIBXML2" = "xyes"; then
+    AC_DEFINE(HAVE_LIBXML2, 1, [Define if libxml2 is available])
+  else
+    AC_MSG_ERROR([
+        Need libxml2 and development headers/files to build GStreamer.
+
+        You can do without libxml2 if you pass --disable-loadsave to
+        configure, but that breaks ABI, so don't do that unless you
+        are building for an embedded setup and know what you are doing.
+    ])
+  fi
+  dnl this is for the .pc file
+  LIBXML_PKG=', libxml-2.0'
+  AC_SUBST(LIBXML_PKG)
+  AC_SUBST(XML_LIBS)
+  AC_SUBST(XML_CFLAGS)
+
+  dnl XML_LIBS might pull in -lz without zlib actually being on the system, so
+  dnl try linking with these LIBS and CFLAGS
+  ac_save_CFLAGS=$CFLAGS
+  ac_save_LIBS=$LIBS
+  CFLAGS="$CFLAGS $XML_CFLAGS"
+  LIBS="$LIBS $XML_LIBS"
+  AC_TRY_LINK([
+#include <libxml/tree.h>
+#include <stdio.h>
+],[
+/* function body */
+],
+    AC_MSG_NOTICE([Test xml2 program linked]),
+    AC_MSG_ERROR([Could not link libxml2 test program.  Check if you have the necessary dependencies.])
+  )
+  CFLAGS="$ac_save_CFLAGS"
+  LIBS="$ac_save_LIBS"
+])
diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4
new file mode 100644
index 0000000..126919b
--- /dev/null
+++ b/common/m4/gst-package-release-datetime.m4
@@ -0,0 +1,89 @@
+dnl macros to set GST_PACKAGE_RELEASE_DATETIME
+
+dnl ===========================================================================
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME
+dnl
+dnl Usage:
+dnl
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME()
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]...)
+dnl sets the release datetime to the current date
+dnl (no = this is not a release, but git or prerelease)
+dnl
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD])
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [YYYY-MM-DD])
+dnl sets the release datetime to the specified date (and time, if given)
+dnl (yes = this is a release, not git or prerelease)
+dnl
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [DOAP-FILE], [RELEASE-VERSION])
+dnl sets the release date to the release date associated with version
+dnl RELEASE-VERSION in the .doap file DOAP-FILE
+dnl (yes = this is a release, not git or prerelease)
+dnl
+dnl We need to treat pre-releases like git because there won't be an entry
+dnl in the .doap file for pre-releases yet, and we don't want to use the
+dnl date of the last release either.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME],
+[
+  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME()
+  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes]...)
+  if test "x$1" = "xno" -o "x$1" = "x"; then
+    GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
+  elif test "x$1" = "xyes"; then
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"])
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION])
+    if ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME=$1
+    else
+      dnl we assume the .doap file contains the date as YYYY-MM-DD
+      YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $3 $2`;
+      if test "x$YYYY_MM_DD" != "x"; then
+        GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD
+      else
+        AC_MSG_ERROR([SET_PACKAGE_RELEASE_DATETIME: could not extract
+            release date for release version $3 from $2])
+        GST_PACKAGE_RELEASE_DATETIME=""
+      fi
+    fi
+  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD])
+  elif ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+    GST_PACKAGE_RELEASE_DATETIME=$1
+  else
+    AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument])
+    GST_PACKAGE_RELEASE_DATETIME=""
+  fi
+
+  if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then
+    AC_MSG_WARN([Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME])
+  else
+    AC_MSG_NOTICE([Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME])
+
+    AC_DEFINE_UNQUOTED([GST_PACKAGE_RELEASE_DATETIME],
+        ["$GST_PACKAGE_RELEASE_DATETIME"],
+        [GStreamer package release date/time for plugins as YYYY-MM-DD])
+  fi
+])
+
+dnl ===========================================================================
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO
+dnl
+dnl Usage:
+dnl
+dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([NANO-VERSION], [DOAP-FILE], [RELEASE-VERSION])
+dnl if NANO-VERSION is 0, sets the release date to the release date associated
+dnl with version RELEASE-VERSION in the .doap file DOAP-FILE, otherwise sets
+dnl the release date and time to the current date/time.
+dnl
+dnl We need to treat pre-releases like git because there won't be an entry
+dnl in the .doap file for pre-releases yet, and we don't want to use the
+dnl date of the last release either.
+dnl ===========================================================================
+AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO],
+[
+  if test "x$1" = "x0"; then
+    AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [ $2 ], [ $3 ])
+  else
+    AG_GST_SET_PACKAGE_RELEASE_DATETIME([no])
+  fi
+])
diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4
new file mode 100644
index 0000000..2cae45d
--- /dev/null
+++ b/common/m4/gst-parser.m4
@@ -0,0 +1,55 @@
+AC_DEFUN([AG_GST_BISON_CHECK],
+[
+  dnl FIXME: check if AC_PROG_YACC is suitable here
+  dnl FIXME: make precious
+  AC_PATH_PROG(BISON_PATH, bison, no)
+  if test x$BISON_PATH = xno; then
+    AC_MSG_ERROR(Could not find bison)
+  fi
+
+  dnl check bison version
+  dnl we need version >= 1.875 for the reentrancy support
+  dnl in the parser.
+  dnl First lines observed: 'bison (GNU Bison) 2.3' or 'GNU Bison version 1.28'
+  bison_min_version=1.875
+  bison_version=`$BISON_PATH --version | head -n 1 |  sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1`
+  AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version])
+
+  if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_ERROR([no])
+  fi
+])
+
+AC_DEFUN([AG_GST_FLEX_CHECK],
+[
+  dnl we require flex for building the parser
+  AC_PATH_PROG(FLEX_PATH, flex, no)
+  if test x$FLEX_PATH = xno; then
+    AC_MSG_ERROR(Could not find flex)
+  fi
+
+  dnl check flex version
+  dnl we need version >= 2.5.31 for the reentrancy support
+  dnl in the parser.
+  flex_min_version=2.5.31
+  flex_version=`$FLEX_PATH --version | head -n 1 | sed 's/^.* //' | sed 's/[[a-zA-Z]]*$//' | cut -d' ' -f1`
+  AC_MSG_CHECKING([flex version $flex_version >= $flex_min_version])
+  if perl -w <<EOF
+    (\$min_version_major, \$min_version_minor, \$min_version_micro ) = "$flex_min_version" =~ /(\d+)\.(\d+)\.(\d+)/;
+    (\$flex_version_major, \$flex_version_minor, \$flex_version_micro ) = "$flex_version" =~ /(\d+)\.(\d+)\.(\d+)/;
+    exit (((\$flex_version_major > \$min_version_major) ||
+     ((\$flex_version_major == \$min_version_major) &&
+      (\$flex_version_minor > \$min_version_minor)) ||
+     ((\$flex_version_major == \$min_version_major) &&
+      (\$flex_version_minor == \$min_version_minor) &&
+      (\$flex_version_micro >= \$min_version_micro)))
+     ? 0 : 1);
+EOF
+  then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_ERROR([no])
+  fi
+])
diff --git a/common/m4/gst-platform.m4 b/common/m4/gst-platform.m4
new file mode 100644
index 0000000..40d6faf
--- /dev/null
+++ b/common/m4/gst-platform.m4
@@ -0,0 +1,67 @@
+dnl AG_GST_PLATFORM
+dnl Check for platform specific features and define some variables
+dnl
+dnl GST_EXTRA_MODULE_SUFFIX: contains a platform specific
+dnl   extra module suffix additional to G_MODULE_SUFFIX
+dnl
+dnl HAVE_OSX: Defined if compiling for OS X
+dnl
+dnl GST_HAVE_UNSAFE_FORK: Defined if fork is unsafe (Windows)
+dnl
+dnl HAVE_WIN32: Defined if compiling on Win32
+dnl
+
+AC_DEFUN([AG_GST_PLATFORM],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  case $host_os in
+    rhapsody*)
+      AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix])
+      ;;
+    darwin*)
+      AC_DEFINE_UNQUOTED(GST_EXTRA_MODULE_SUFFIX, [".dylib"], [Extra platform specific plugin suffix])
+      AC_DEFINE_UNQUOTED(HAVE_OSX, 1, [Defined if compiling for OSX])
+      ;;
+    cygwin*)
+      AC_DEFINE_UNQUOTED(GST_HAVE_UNSAFE_FORK, 1, [Defined when registry scanning through fork is unsafe])
+      ;;
+    mingw* | msvc* | mks*)
+      dnl HAVE_WIN32 currently means "disable POSIXisms".
+      AC_DEFINE_UNQUOTED(HAVE_WIN32, 1, [Defined if compiling for Windows])
+
+      dnl define __MSVCRT_VERSION__ version if not set already by the
+      dnl compiler (ie. mostly for mingw). This is needed for things like
+      dnl __stat64 to be available. If set by the compiler, ensure it's
+      dnl new enough - we need at least WinXP SP2.
+      AC_TRY_COMPILE([ ], [ return __MSVCRT_VERSION__; ], [
+          AC_TRY_COMPILE([ ], [
+            #if __MSVCRT_VERSION__ < 0x0601
+            #error "MSVCRT too old"
+            #endif
+          ], [
+            AC_MSG_NOTICE([MSVCRT version looks ok])
+          ], [
+            AC_MSG_ERROR([MSVCRT version too old, need at least WinXP SP2])
+          ])
+      ], [
+        AC_MSG_NOTICE([Setting MSVCRT version to 0x0601])
+        AC_DEFINE_UNQUOTED(__MSVCRT_VERSION__, 0x0601, [We need at least WinXP SP2 for __stat64])
+      ])
+      ;;
+     *)
+      ;;
+  esac
+])
+
+AC_DEFUN([AG_GST_LIBTOOL_PREPARE],
+[
+  dnl Persuade libtool to also link (-l) a 'pure' (DirectX) static lib,
+  dnl i.e. as opposed to only import lib with dll counterpart.
+  dnl Needs to be tweaked before libtool's checks.
+  case $host_os in
+  cygwin* | mingw*)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+])
\ No newline at end of file
diff --git a/common/m4/gst-plugin-docs.m4 b/common/m4/gst-plugin-docs.m4
new file mode 100644
index 0000000..dcfd61d
--- /dev/null
+++ b/common/m4/gst-plugin-docs.m4
@@ -0,0 +1,21 @@
+dnl AG_GST_PLUGIN_DOCS([MINIMUM-GTK-DOC-VERSION],[MINIMUM-PYTHON-VERSION])
+dnl
+dnl checks for prerequisites for the common/mangle-tmpl.py script
+dnl used when building the plugin documentation
+
+AC_DEFUN([AG_GST_PLUGIN_DOCS],
+[
+  AC_BEFORE([GTK_DOC_CHECK],[$0])dnl check for gtk-doc first
+  AC_BEFORE([AS_PATH_PYTHON],[$1])dnl find python first
+
+  build_plugin_docs=no
+  AC_MSG_CHECKING([whether to build plugin documentation])
+  if test x$enable_gtk_doc = xyes; then
+    build_plugin_docs=yes
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no (gtk-doc disabled or not available)])
+  fi
+
+  AM_CONDITIONAL(ENABLE_PLUGIN_DOCS, test x$build_plugin_docs = xyes)
+])
diff --git a/common/m4/gst-plugindir.m4 b/common/m4/gst-plugindir.m4
new file mode 100644
index 0000000..09989d0
--- /dev/null
+++ b/common/m4/gst-plugindir.m4
@@ -0,0 +1,17 @@
+dnl AG_GST_SET_PLUGINDIR
+
+dnl AC_DEFINE PLUGINDIR to the full location where plug-ins will be installed
+dnl AC_SUBST plugindir, to be used in Makefile.am's
+
+AC_DEFUN([AG_GST_SET_PLUGINDIR],
+[
+  dnl define location of plugin directory
+  AS_AC_EXPAND(PLUGINDIR, ${libdir}/gstreamer-$GST_MAJORMINOR)
+  AC_DEFINE_UNQUOTED(PLUGINDIR, "$PLUGINDIR",
+    [directory where plugins are located])
+  AC_MSG_NOTICE([Using $PLUGINDIR as the plugin install location])
+
+  dnl plugin directory configure-time variable for use in Makefile.am
+  plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR"
+  AC_SUBST(plugindir)
+])
diff --git a/common/m4/gst-valgrind.m4 b/common/m4/gst-valgrind.m4
new file mode 100644
index 0000000..5c0d608
--- /dev/null
+++ b/common/m4/gst-valgrind.m4
@@ -0,0 +1,35 @@
+AC_DEFUN([AG_GST_VALGRIND_CHECK],
+[
+  dnl valgrind inclusion
+  AC_ARG_ENABLE(valgrind,
+    AC_HELP_STRING([--disable-valgrind], [disable run-time valgrind detection]),
+    [
+      case "${enableval}" in
+        yes) USE_VALGRIND="$USE_DEBUG" ;;
+        no)  USE_VALGRIND=no ;;
+        *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;;
+      esac],
+    [
+      USE_VALGRIND="$USE_DEBUG"
+    ]) dnl Default value
+
+  VALGRIND_REQ="3.0"
+  if test "x$USE_VALGRIND" = xyes; then
+    PKG_CHECK_MODULES(VALGRIND, valgrind >= $VALGRIND_REQ,
+      USE_VALGRIND="yes",
+      [
+        USE_VALGRIND="no"
+        AC_MSG_RESULT([no])
+      ])
+  fi
+
+  if test "x$USE_VALGRIND" = xyes; then
+    AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used])
+    AC_MSG_NOTICE(Using extra code paths for valgrind)
+  fi
+  AC_SUBST(VALGRIND_CFLAGS)
+  AC_SUBST(VALGRIND_LIBS)
+
+  AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
+  AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
+])
diff --git a/common/m4/gst-x11.m4 b/common/m4/gst-x11.m4
new file mode 100644
index 0000000..d3baf2d
--- /dev/null
+++ b/common/m4/gst-x11.m4
@@ -0,0 +1,70 @@
+dnl macros for X-related detections
+dnl AC_SUBST's HAVE_X, X_CFLAGS, X_LIBS
+AC_DEFUN([AG_GST_CHECK_X],
+[
+  AC_PATH_XTRA
+  ac_cflags_save="$CFLAGS"
+  ac_cppflags_save="$CPPFLAGS"
+  CFLAGS="$CFLAGS $X_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  dnl now try to find the HEADER
+  AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no")
+
+  if test "x$HAVE_X" = "xno"
+  then
+    AC_MSG_NOTICE([cannot find X11 development files])
+  else
+    dnl this is much more than we want
+    X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS"
+    dnl AC_PATH_XTRA only defines the path needed to find the X libs,
+    dnl it does not add the libs; therefore we add them here
+    X_LIBS="$X_LIBS -lX11"
+    AC_SUBST(X_CFLAGS)
+    AC_SUBST(X_LIBS)
+  fi
+  AC_SUBST(HAVE_X)
+
+  CFLAGS="$ac_cflags_save"
+  CPPFLAGS="$ac_cppflags_save"
+])
+
+dnl *** XVideo ***
+dnl Look for the PIC library first, Debian requires it.
+dnl Check debian-devel archives for gory details.
+dnl 20020110:
+dnl At the moment XFree86 doesn't distribute shared libXv due
+dnl to unstable API.  On many platforms you CAN NOT link a shared
+dnl lib to a static non-PIC lib.  This is what the xvideo GStreamer
+dnl plug-in wants to do.  So Debian distributes a PIC compiled
+dnl version of the static lib for plug-ins to link to when it is
+dnl inappropriate to link the main application to libXv directly.
+dnl FIXME: add check if this platform can support linking to a
+dnl        non-PIC libXv, if not then don not use Xv.
+dnl FIXME: perhaps warn user if they have a shared libXv since
+dnl        this is an error until XFree86 starts shipping one
+AC_DEFUN([AG_GST_CHECK_XV],
+[
+  if test x$HAVE_X = xyes; then
+    AC_CHECK_LIB(Xv_pic, XvQueryExtension,
+                 HAVE_XVIDEO="yes", HAVE_XVIDEO="no",
+                 $X_LIBS -lXext)
+
+    if test x$HAVE_XVIDEO = xyes; then
+      XVIDEO_LIBS="-lXv_pic -lXext"
+      AC_SUBST(XVIDEO_LIBS)
+    else
+      dnl try again using something else if we didn't find it first
+      if test x$HAVE_XVIDEO = xno; then
+        AC_CHECK_LIB(Xv, XvQueryExtension,
+                   HAVE_XVIDEO="yes", HAVE_XVIDEO="no",
+                   $X_LIBS -lXext)
+
+        if test x$HAVE_XVIDEO = xyes; then
+          XVIDEO_LIBS="-lXv -lXext"
+          AC_SUBST(XVIDEO_LIBS)
+        fi
+      fi
+    fi
+  fi
+])
diff --git a/common/m4/gst.m4 b/common/m4/gst.m4
new file mode 100644
index 0000000..ddfde51
--- /dev/null
+++ b/common/m4/gst.m4
@@ -0,0 +1,31 @@
+dnl AG_GST_INIT
+dnl sets up use of GStreamer configure.ac macros
+dnl all GStreamer autoconf macros are prefixed
+dnl with AG_GST_ for public macros
+dnl with _AG_GST_ for private macros
+
+AC_DEFUN([AG_GST_INIT],
+[
+  m4_pattern_forbid(^_?AG_GST_)
+])
+
+dnl AG_GST_PKG_CONFIG_PATH
+dnl
+dnl sets up a GST_PKG_CONFIG_PATH variable for use in Makefile.am
+dnl which contains the path of the in-tree pkgconfig directory first
+dnl and then any paths specified in PKG_CONFIG_PATH.
+dnl
+dnl We do this mostly so we don't have to use unportable shell constructs
+dnl such as ${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH} in Makefile.am to handle
+dnl the case where the environment variable is not set, but also in order
+dnl to avoid a trailing ':' in the PKG_CONFIG_PATH which apparently causes
+dnl problems with pkg-config on windows with msys/mingw.
+AC_DEFUN([AG_GST_PKG_CONFIG_PATH],
+[
+  GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig"
+  if test "x$PKG_CONFIG_PATH" != "x"; then
+    GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH"
+  fi
+  AC_SUBST([GST_PKG_CONFIG_PATH])
+  AC_MSG_NOTICE([Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH])
+])
diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4
new file mode 100644
index 0000000..39a4e7d
--- /dev/null
+++ b/common/m4/gtk-doc.m4
@@ -0,0 +1,42 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  if test x$enable_gtk_doc = xyes; then
+    ifelse([$1],[],
+      [PKG_CHECK_EXISTS([gtk-doc],,
+                        AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+      [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+                        AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))])
+    if test -z "$SED"; then
+      AC_PROG_SED
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,)
+
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+])
diff --git a/common/m4/introspection.m4 b/common/m4/introspection.m4
new file mode 100644
index 0000000..589721c
--- /dev/null
+++ b/common/m4/introspection.m4
@@ -0,0 +1,94 @@
+dnl -*- mode: autoconf -*-
+dnl Copyright 2009 Johan Dahlin
+dnl
+dnl This file is free software; the author(s) gives unlimited
+dnl permission to copy and/or distribute it, with or without
+dnl modifications, as long as this notice is preserved.
+dnl
+
+# serial 1
+
+m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
+[
+    AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+    AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+    AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
+
+    dnl enable/disable introspection
+    m4_if([$2], [require],
+    [dnl
+        enable_introspection=yes
+    ],[dnl
+        AC_ARG_ENABLE(introspection,
+                  AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
+                                 [Enable introspection for this build]),, 
+                                 [enable_introspection=auto])
+    ])dnl
+
+    AC_MSG_CHECKING([for gobject-introspection])
+
+    dnl presence/version checking
+    AS_CASE([$enable_introspection],
+    [no], [dnl
+        found_introspection="no (disabled, use --enable-introspection to enable)"
+    ],dnl
+    [yes],[dnl
+        PKG_CHECK_EXISTS([gobject-introspection-1.0],,
+                         AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1],
+                         found_introspection=yes,
+                         AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
+    ],dnl
+    [auto],[dnl
+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
+    ],dnl
+    [dnl	
+        AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
+    ])dnl
+
+    AC_MSG_RESULT([$found_introspection])
+
+    INTROSPECTION_SCANNER=
+    INTROSPECTION_COMPILER=
+    INTROSPECTION_GENERATE=
+    INTROSPECTION_GIRDIR=
+    INTROSPECTION_TYPELIBDIR=
+    if test "x$found_introspection" = "xyes"; then
+       INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+       INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+       INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+       INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+       INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+    fi
+    AC_SUBST(INTROSPECTION_SCANNER)
+    AC_SUBST(INTROSPECTION_COMPILER)
+    AC_SUBST(INTROSPECTION_GENERATE)
+    AC_SUBST(INTROSPECTION_GIRDIR)
+    AC_SUBST(INTROSPECTION_TYPELIBDIR)
+    AC_SUBST(INTROSPECTION_CFLAGS)
+    AC_SUBST(INTROSPECTION_LIBS)
+    AC_SUBST(INTROSPECTION_MAKEFILE)
+
+    AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
+])
+
+
+dnl Usage:
+dnl   GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
+
+AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
+[
+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
+])
+
+dnl Usage:
+dnl   GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
+
+
+AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
+[
+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
+])
diff --git a/common/m4/orc.m4 b/common/m4/orc.m4
new file mode 100644
index 0000000..26b2459
--- /dev/null
+++ b/common/m4/orc.m4
@@ -0,0 +1,70 @@
+dnl pkg-config-based checks for Orc
+
+dnl specific:
+dnl ORC_CHECK([REQUIRED_VERSION])
+
+AC_DEFUN([ORC_CHECK],
+[
+  ORC_REQ=ifelse([$1], , "0.4.6", [$1])
+
+  AC_ARG_ENABLE(orc,
+  AC_HELP_STRING([--enable-orc],[use Orc if installed]),
+  [case "${enableval}" in
+    auto) enable_orc=auto ;;
+    yes) enable_orc=yes ;;
+    no)  enable_orc=no ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for --enable-orc) ;;
+  esac
+  ],
+  [enable_orc=auto]) dnl Default value
+
+  if test "x$enable_orc" != "xno" ; then
+    PKG_CHECK_MODULES(ORC, orc-0.4 >= $ORC_REQ, [
+      AC_DEFINE(HAVE_ORC, 1, [Use Orc])
+      HAVE_ORC=yes
+      if test "x$ORCC" = "x" ; then
+        AC_MSG_CHECKING(for usable orcc)
+        ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
+        dnl check whether the orcc found by pkg-config can be run from the build environment
+        dnl if this is not the case (e.g. when cross-compiling) fall back to orcc from PATH
+        AS_IF([$ORCC --version 1> /dev/null 2> /dev/null], [], [ORCC=`which orcc`])
+        AC_MSG_RESULT($ORCC)
+      fi
+      AC_SUBST(ORCC)
+      ORCC_FLAGS="--compat $ORC_REQ"
+      AC_SUBST(ORCC_FLAGS)
+      AS_IF([test "x$ORCC" = "x"], [HAVE_ORCC=no], [HAVE_ORCC=yes])
+    ], [
+      if test "x$enable_orc" = "xyes" ; then
+        AC_MSG_ERROR([--enable-orc specified, but Orc >= $ORC_REQ not found])
+      fi
+      AC_DEFINE(DISABLE_ORC, 1, [Disable Orc])
+      HAVE_ORC=no
+      HAVE_ORCC=no
+    ])
+  else
+    AC_DEFINE(DISABLE_ORC, 1, [Disable Orc])
+    HAVE_ORC=no
+    HAVE_ORCC=no
+  fi
+  AM_CONDITIONAL(HAVE_ORC, [test "x$HAVE_ORC" = "xyes"])
+  AM_CONDITIONAL(HAVE_ORCC, [test "x$HAVE_ORCC" = "xyes"])
+
+]))
+
+AC_DEFUN([ORC_OUTPUT],
+[
+  if test "$HAVE_ORC" = yes ; then
+    printf "configure: *** Orc acceleration enabled.\n"
+  else
+    if test "x$enable_orc" = "xno" ; then
+      printf "configure: *** Orc acceleration disabled by --disable-orc.  Slower code paths\n"
+      printf "               will be used.\n"
+    else
+      printf "configure: *** Orc acceleration disabled.  Requires Orc >= $ORC_REQ, which was\n"
+      printf "               not found.  Slower code paths will be used.\n"
+    fi
+  fi
+  printf "\n"
+])
+
diff --git a/common/m4/pkg.m4 b/common/m4/pkg.m4
new file mode 100644
index 0000000..996e294
--- /dev/null
+++ b/common/m4/pkg.m4
@@ -0,0 +1,157 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+			 [pkg_failed=yes])
+    fi
+else
+	pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+		[AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+	ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+		[$4])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/common/mangle-tmpl.py b/common/mangle-tmpl.py
new file mode 100644
index 0000000..bd4f948
--- /dev/null
+++ b/common/mangle-tmpl.py
@@ -0,0 +1,163 @@
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+"""
+use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and
+insert/overwrite Short Description and Long Description
+"""
+
+# FIXME: right now it uses pygst and scans on its own;
+# we really should use inspect/*.xml instead since the result of
+# gst-xmlinspect.py is committed by the docs maintainer, who can be
+# expected to have pygst, but this step should be done for every docs build,
+# so no pygst allowed
+
+# read in inspect/*.xml
+# for every tmpl/element-(name).xml: mangle with details from element
+
+import glob
+import re
+import sys
+import os
+
+class Tmpl:
+    def __init__(self, filename):
+        self.filename = filename
+        self._sectionids = []
+        self._sections = {}
+
+    def read(self):
+        """
+        Read and parse the sections from the given file.
+        """
+        lines = open(self.filename).readlines()
+        matcher = re.compile("<!-- ##### SECTION (\S+) ##### -->\n")
+        id = None
+
+        for line in lines:
+            match = matcher.search(line)
+            if match:
+                id = match.expand("\\1")
+                self._sectionids.append(id)
+                self._sections[id] = []
+            else:
+                if not id:
+                    sys.stderr.write(
+                        "WARNING: line before a SECTION header: %s" % line)
+                else:
+                    self._sections[id].append(line)
+
+    def get_section(self, id):
+        """
+        Get the content from the given section.
+        """
+        return self._sections[id]
+
+    def set_section(self, id, content):
+        """
+        Replace the given section id with the given content.
+        """
+        self._sections[id] = content
+
+    def output(self):
+        """
+        Return the output of the current template in the tmpl/*.sgml format.
+        """
+        lines = []
+        for id in self._sectionids:
+            lines.append("<!-- ##### SECTION %s ##### -->\n" % id)
+            for line in self._sections[id]:
+                lines.append(line)
+
+        return "".join(lines)
+
+    def write(self, backup=False):
+        """
+        Write out the template file again, backing up the previous one.
+        """
+        if backup:
+            target = self.filename + ".mangle.bak"
+            os.rename(self.filename, target)
+
+        handle = open(self.filename, "w")
+        handle.write(self.output())
+        handle.close()
+
+import xml.dom.minidom
+
+def get_elements(file):
+    elements = {}
+    doc = xml.dom.minidom.parse(file)
+
+    elem = None
+    for e in doc.childNodes:
+        if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin':
+            elem = e
+            break
+    if elem == None:
+        return None
+
+    elem2 = None
+    for e in elem.childNodes:
+        if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements':
+            elem2 = e
+            break
+    if elem2 == None:
+        return None
+
+    elem = elem2
+
+    for e in elem.childNodes:
+        if e.nodeType == e.ELEMENT_NODE and e.localName == 'element':
+            name = None
+            description = None
+
+            for e2 in e.childNodes:
+                if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name':
+                    name = e2.childNodes[0].nodeValue.encode("UTF-8")
+                elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description':
+                    if e2.childNodes:
+                      description = e2.childNodes[0].nodeValue.encode("UTF-8")
+                    else:
+                      description = 'No description'
+
+            if name != None and description != None:
+                elements[name] = {'description': description}
+
+    return elements
+
+def main():
+    if not len(sys.argv) == 3:
+        sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir')
+        sys.exit(1)
+
+    inspectdir = sys.argv[1]
+    tmpldir = sys.argv[2]
+
+    # parse all .xml files; build map of element name -> short desc
+    #for file in glob.glob("inspect/plugin-*.xml"):
+    elements = {}
+    for file in glob.glob("%s/plugin-*.xml" % inspectdir):
+        elements.update(get_elements(file))
+
+    for file in glob.glob("%s/element-*.sgml" % tmpldir):
+        base = os.path.basename(file)
+        element = base[len("element-"):-len(".sgml")]
+        tmpl = Tmpl(file)
+        tmpl.read()
+        if element in elements.keys():
+            description = elements[element]['description']
+            tmpl.set_section("Short_Description", "%s\n\n" % description)
+
+        # put in an include if not yet there
+        line = '<include xmlns="http://www.w3.org/2003/XInclude" href="' + \
+            'element-' + element + '-details.xml">' + \
+            '<fallback xmlns="http://www.w3.org/2003/XInclude" />' + \
+            '</include>\n'
+        section = tmpl.get_section("Long_Description")
+        if not section[0]  == line:
+            section.insert(0, line)
+        tmpl.set_section("Long_Description", section)
+        tmpl.write()
+
+main()
diff --git a/common/orc.mak b/common/orc.mak
new file mode 100644
index 0000000..a232b5d
--- /dev/null
+++ b/common/orc.mak
@@ -0,0 +1,76 @@
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+EXTRA_DIST = $(ORC_SOURCE).orc
+
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+
+if HAVE_ORCC
+tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+else
+tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+endif
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
diff --git a/common/parallel-subdirs.mak b/common/parallel-subdirs.mak
new file mode 100644
index 0000000..36885df
--- /dev/null
+++ b/common/parallel-subdirs.mak
@@ -0,0 +1,13 @@
+# include this at the end of $MODULE/ext/Makefile.am to force make to
+# build subdirectories in parallel when make -jN is used. We will end up
+# descending into all subdirectories a second time, but only after the first
+# (parallel) run has finished, so it should go right through the second time.
+
+.PHONY: independent-subdirs $(SUBDIRS)
+
+independent-subdirs: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
diff --git a/common/plugins.xsl b/common/plugins.xsl
new file mode 100644
index 0000000..60515b6
--- /dev/null
+++ b/common/plugins.xsl
@@ -0,0 +1,209 @@
+<?xml version='1.0'?> <!--*- mode: xml -*-->
+
+<xsl:stylesheet
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:exsl="http://exslt.org/common"
+  xmlns:str="http://exslt.org/strings"
+  extension-element-prefixes="exsl str"
+  version="1.0">
+<xsl:output method="xml" indent="yes"
+            doctype-public ="-//OASIS//DTD DocBook XML V4.1.2//EN"
+            doctype-system = "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>
+
+<xsl:param name="module" />
+
+  <xsl:template match="element">
+    <xsl:element name="varlistentry">
+      <xsl:element name="term">
+        <xsl:element name="link">
+          <xsl:attribute name="linkend"><xsl:value-of select="$module" />-plugins-<xsl:value-of select="name"/></xsl:attribute>
+          <xsl:value-of select="name" />
+        </xsl:element>
+      </xsl:element>
+      <xsl:element name="listitem">
+        <xsl:element name="simpara"><xsl:value-of select="description" /></xsl:element>
+      </xsl:element>
+    </xsl:element>
+    <xsl:variable name="name"><xsl:copy-of select="name"/></xsl:variable>
+    <!-- here we write an element-(name)-details.xml file for the element -->
+    <exsl:document href="{concat ('xml/element-', $name, '-details.xml')}" method="xml" indent="yes">
+
+      <xsl:element name="refsynopsisdiv">
+        <xsl:element name="refsect2">
+          <xsl:element name="title">Element Information</xsl:element>
+          <xsl:element name="variablelist">
+
+            <!-- plugin name and link -->
+            <xsl:element name="varlistentry">
+              <xsl:element name="term">plugin</xsl:element>
+              <xsl:element name="listitem">
+                <xsl:element name="simpara">
+                  <xsl:element name="link">
+                    <xsl:attribute name="linkend">plugin-<xsl:value-of select="../../name"/></xsl:attribute>
+                    <xsl:value-of select="../../name" />
+                  </xsl:element>
+                </xsl:element>
+              </xsl:element>
+            </xsl:element>
+
+            <xsl:element name="varlistentry">
+              <xsl:element name="term">author</xsl:element>
+              <xsl:element name="listitem">
+                <xsl:element name="simpara"><xsl:value-of select="author" /></xsl:element>
+              </xsl:element>
+            </xsl:element>
+
+            <xsl:element name="varlistentry">
+              <xsl:element name="term">class</xsl:element>
+              <xsl:element name="listitem">
+                <xsl:element name="simpara"><xsl:value-of select="class" /></xsl:element>
+              </xsl:element>
+            </xsl:element>
+
+          </xsl:element> <!-- variablelist -->
+        </xsl:element> <!-- refsect2 -->
+
+        <xsl:element name="refsect2">
+          <xsl:element name="title">Element Pads</xsl:element>
+          <!-- process all caps -->
+          <xsl:for-each select="pads/caps">
+            <xsl:element name="variablelist">
+              <xsl:element name="varlistentry">
+                <xsl:element name="term">name</xsl:element>
+                <xsl:element name="listitem">
+                  <xsl:element name="simpara"><xsl:value-of select="name" /></xsl:element>
+                </xsl:element>
+              </xsl:element>
+
+              <xsl:element name="varlistentry">
+                <xsl:element name="term">direction</xsl:element>
+                <xsl:element name="listitem">
+                  <xsl:element name="simpara"><xsl:value-of select="direction" /></xsl:element>
+                </xsl:element>
+              </xsl:element>
+
+              <xsl:element name="varlistentry">
+                <xsl:element name="term">presence</xsl:element>
+                <xsl:element name="listitem">
+                  <xsl:element name="simpara"><xsl:value-of select="presence" /></xsl:element>
+                </xsl:element>
+              </xsl:element>
+
+              <xsl:for-each select='str:tokenize(details, ";")'>
+                <xsl:element name="varlistentry">
+                  <xsl:element name="term">
+                    <xsl:if test="position()=1">details</xsl:if>
+                  </xsl:element>
+                  <xsl:element name="listitem">
+                    <xsl:element name="simpara"><xsl:value-of select='.'/></xsl:element>
+                  </xsl:element>
+                </xsl:element>
+              </xsl:for-each>
+
+            </xsl:element> <!-- variablelist -->
+
+            <!--xsl:element name="programlisting"><xsl:value-of select="details" /></xsl:element-->
+
+          </xsl:for-each>
+        </xsl:element> <!-- refsect2 -->
+      </xsl:element> <!-- refsynopsisdiv -->
+
+    </exsl:document>
+  </xsl:template>
+
+  <xsl:template match="plugin">
+    <xsl:element name="refentry">
+      <xsl:attribute name="id"><xsl:value-of select="$module" />-plugins-plugin-<xsl:value-of select="name"/></xsl:attribute>
+
+      <xsl:element name="refmeta">
+        <xsl:element name="refentrytitle">
+          <xsl:value-of select="name"/>
+        </xsl:element>
+        <xsl:element name="manvolnum">3</xsl:element>
+        <xsl:element name="refmiscinfo">FIXME Library</xsl:element>
+      </xsl:element> <!-- refmeta -->
+
+      <xsl:element name="refnamediv">
+        <xsl:element name="refname">
+          <xsl:value-of select="name"/>
+        </xsl:element>
+
+        <xsl:element name="refpurpose">
+          <xsl:element name="anchor">
+            <xsl:attribute name="id">plugin-<xsl:value-of select="name"/></xsl:attribute>
+          </xsl:element>
+          <xsl:value-of select="description"/>
+        </xsl:element>
+      </xsl:element>
+
+      <xsl:element name="refsect1">
+        <xsl:element name="title">Plugin Information</xsl:element>
+        <xsl:element name="variablelist">
+
+          <xsl:element name="varlistentry">
+            <xsl:element name="term">filename</xsl:element>
+            <xsl:element name="listitem">
+              <xsl:element name="simpara"><xsl:value-of select="basename" /></xsl:element>
+            </xsl:element>
+          </xsl:element>
+
+          <xsl:element name="varlistentry">
+            <xsl:element name="term">version</xsl:element>
+            <xsl:element name="listitem">
+              <xsl:element name="simpara"><xsl:value-of select="version" /></xsl:element>
+            </xsl:element>
+          </xsl:element>
+
+          <xsl:element name="varlistentry">
+            <xsl:element name="term">run-time license</xsl:element>
+            <xsl:element name="listitem">
+              <xsl:element name="simpara"><xsl:value-of select="license" /></xsl:element>
+            </xsl:element>
+          </xsl:element>
+
+          <xsl:element name="varlistentry">
+            <xsl:element name="term">package</xsl:element>
+            <xsl:element name="listitem">
+              <xsl:element name="simpara"><xsl:value-of select="package" /></xsl:element>
+            </xsl:element>
+          </xsl:element>
+
+          <xsl:element name="varlistentry">
+            <xsl:element name="term">origin</xsl:element>
+            <xsl:element name="listitem">
+              <xsl:element name="simpara">
+                <!-- only show origin as link if it starts with http -->
+                <xsl:choose>
+                  <xsl:when test="substring(@href, 1, 4) = 'http'">
+                    <xsl:element name="ulink">
+                      <xsl:attribute name="url"><xsl:value-of select="origin" /></xsl:attribute>
+                      <xsl:value-of select="origin" />
+                    </xsl:element>
+                  </xsl:when>
+                  <xsl:otherwise>
+                    <xsl:value-of select="origin" />
+                  </xsl:otherwise>
+                </xsl:choose>
+              </xsl:element>
+            </xsl:element>
+          </xsl:element>
+
+        </xsl:element>
+      </xsl:element>
+
+      <xsl:element name="refsect1">
+        <xsl:element name="title">Elements</xsl:element>
+        <!-- process all elements -->
+        <xsl:element name="variablelist">
+          <xsl:apply-templates select="elements"/>
+        </xsl:element>
+      </xsl:element>
+
+    </xsl:element>
+
+  </xsl:template>
+
+  <!-- ignore -->
+  <xsl:template match="gst-plugin-paths" />
+
+</xsl:stylesheet>
diff --git a/common/po.mak b/common/po.mak
new file mode 100644
index 0000000..e019fac
--- /dev/null
+++ b/common/po.mak
@@ -0,0 +1,4 @@
+# rule to download the latest .po files
+download-po: $(top_srcdir)/common/download-translations
+	$(top_srcdir)/common/download-translations $(PACKAGE)
+
diff --git a/common/release.mak b/common/release.mak
new file mode 100644
index 0000000..4a9b7d5
--- /dev/null
+++ b/common/release.mak
@@ -0,0 +1,25 @@
+# include this snippet to add a common release: target by using
+# include $(top_srcdir)/common/release.mak
+
+# make bz2 as well
+AUTOMAKE_OPTIONS = dist-bzip2
+
+release: dist
+	$(MAKE) $(PACKAGE)-$(VERSION).tar.gz.md5
+	$(MAKE) $(PACKAGE)-$(VERSION).tar.bz2.md5
+
+# generate md5 sum files
+%.md5: %
+	md5sum $< > $@
+
+# check that no marshal or enumtypes files are included
+# this in turn ensures that distcheck fails for missing .list files which is currently
+# shadowed when the corresponding .c and .h files are included.
+distcheck-hook:
+	@test "x" = "x`find $(distdir) -name \*-enumtypes.[ch] | grep -v win32`" && \
+	test "x" = "x`find $(distdir) -name \*-marshal.[ch]`" || \
+	( $(ECHO) "*** Leftover enumtypes or marshal files in the tarball." && \
+	  $(ECHO) "*** Make sure the following files are not disted:" && \
+	  find $(distdir) -name \*-enumtypes.[ch] | grep -v win32 && \
+	  find $(distdir) -name \*-marshal.[ch] && \
+	  false )
diff --git a/common/scangobj-merge.py b/common/scangobj-merge.py
new file mode 100755
index 0000000..9a1cac9
--- /dev/null
+++ b/common/scangobj-merge.py
@@ -0,0 +1,309 @@
+#!/usr/bin/python
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+"""
+parse, merge and write gstdoc-scanobj files
+"""
+
+import sys
+import os
+
+def debug(*args):
+    pass
+
+# OrderedDict class based on
+# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
+# Licensed under the Python License
+class OrderedDict(dict):
+    def __init__(self):
+        self._keys = []
+        dict.__init__(self)
+
+    def __delitem__(self, key):
+        dict.__delitem__(self, key)
+        self._keys.remove(key)
+
+    def __setitem__(self, key, item):
+        dict.__setitem__(self, key, item)
+        if key not in self._keys: self._keys.append(key)
+
+    def clear(self):
+        dict.clear(self)
+        self._keys = []
+
+    def copy(self):
+        dict = dict.copy(self)
+        dict._keys = self._keys[:]
+        return dict
+
+    def items(self):
+        return zip(self._keys, self.values())
+
+    def keys(self):
+        return self._keys
+
+    def popitem(self):
+        try:
+            key = self._keys[-1]
+        except IndexError:
+            raise KeyError('dictionary is empty')
+
+        val = self[key]
+        del self[key]
+
+        return (key, val)
+
+    def setdefault(self, key, failobj = None):
+        dict.setdefault(self, key, failobj)
+        if key not in self._keys: self._keys.append(key)
+
+    def update(self, dict):
+        dict.update(self, dict)
+        for key in dict.keys():
+            if key not in self._keys: self._keys.append(key)
+
+    def values(self):
+        return map(self.get, self._keys)
+
+class Object:
+    def __init__(self, name):
+        self._signals = OrderedDict()
+        self._args = OrderedDict()
+        self.name = name
+
+    def __repr__(self):
+        return "<Object %s>" % self.name
+
+    def add_signal(self, signal, overwrite=True):
+        if not overwrite and self._signals.has_key(signal.name):
+            raise IndexError, "signal %s already in %r" % (signal.name, self)
+        self._signals[signal.name] = signal
+
+    def add_arg(self, arg, overwrite=True):
+        if not overwrite and self._args.has_key(arg.name):
+            raise IndexError, "arg %s already in %r" % (arg.name, self)
+        self._args[arg.name] = arg
+
+class Docable:
+    def __init__(self, **kwargs):
+        for key in self.attrs:
+            setattr(self, key, kwargs[key])
+        self.dict = kwargs
+
+    def __repr__(self):
+        return "<%r %s>" % (str(self.__class__), self.name)
+
+class Signal(Docable):
+    attrs = ['name', 'returns', 'args']
+
+class Arg(Docable):
+    attrs = ['name', 'type', 'range', 'flags', 'nick', 'blurb', 'default']
+
+class GDoc:
+    def load_file(self, filename):
+        try:
+            lines = open(filename).readlines()
+            self.load_data("".join(lines))
+        except IOError:
+            print "WARNING - could not read from %s" % filename
+
+    def save_file(self, filename, backup=False):
+        """
+        Save the information to the given file if the file content changed.
+        """
+        olddata = None
+        try:
+            lines = open(filename).readlines()
+            olddata = "".join(lines)
+        except IOError:
+            print "WARNING - could not read from %s" % filename
+        newdata = self.get_data()
+        if olddata and olddata == newdata:
+            return
+
+        if olddata:
+            if backup:
+                os.rename(filename, filename + '.bak')
+
+        handle = open(filename, "w")
+        handle.write(newdata)
+        handle.close()
+
+class Signals(GDoc):
+    def __init__(self):
+        self._objects = OrderedDict()
+
+    def load_data(self, data):
+        """
+        Load the .signals lines, creating our list of objects and signals.
+        """
+        import re
+        smatcher = re.compile(
+            '(?s)'                                      # make . match \n
+            '<SIGNAL>\n(.*?)</SIGNAL>\n'
+            )
+        nmatcher = re.compile(
+            '<NAME>'
+            '(?P<object>\S*)'                           # store object
+            '::'
+            '(?P<signal>\S*)'                           # store signal
+            '</NAME>'
+        )
+        rmatcher = re.compile(
+            '(?s)'                                      # make . match \n
+            '<RETURNS>(?P<returns>\S*)</RETURNS>\n'     # store returns
+            '(?P<args>.*)'                              # store args
+        )
+        for block in smatcher.findall(data):
+            nmatch = nmatcher.search(block)
+            if nmatch:
+                o = nmatch.group('object')
+                debug("Found object", o)
+                debug("Found signal", nmatch.group('signal'))
+                if not self._objects.has_key(o):
+                    object = Object(o)
+                    self._objects[o] = object
+
+                rmatch = rmatcher.search(block)
+                if rmatch:
+                    dict = rmatch.groupdict().copy()
+                    dict['name'] = nmatch.group('signal')
+                    signal = Signal(**dict)
+                    self._objects[o].add_signal(signal)
+
+    def get_data(self):
+        lines = []
+        for o in self._objects.values():
+            for s in o._signals.values():
+                block = """<SIGNAL>
+<NAME>%(object)s::%(name)s</NAME>
+<RETURNS>%(returns)s</RETURNS>
+%(args)s</SIGNAL>
+"""
+                d = s.dict.copy()
+                d['object'] = o.name
+                lines.append(block % d)
+
+        return "\n".join(lines) + '\n'
+
+class Args(GDoc):
+    def __init__(self):
+        self._objects = OrderedDict()
+
+    def load_data(self, data):
+        """
+        Load the .args lines, creating our list of objects and args.
+        """
+        import re
+        amatcher = re.compile(
+            '(?s)'                                      # make . match \n
+            '<ARG>\n(.*?)</ARG>\n'
+            )
+        nmatcher = re.compile(
+            '<NAME>'
+            '(?P<object>\S*)'                           # store object
+            '::'
+            '(?P<arg>\S*)'                              # store arg
+            '</NAME>'
+        )
+        rmatcher = re.compile(
+            '(?s)'                                      # make . match \n
+            '<TYPE>(?P<type>\S*)</TYPE>\n'              # store type
+            '<RANGE>(?P<range>.*?)</RANGE>\n'           # store range
+            '<FLAGS>(?P<flags>\S*)</FLAGS>\n'           # store flags
+            '<NICK>(?P<nick>.*?)</NICK>\n'              # store nick
+            '<BLURB>(?P<blurb>.*?)</BLURB>\n'           # store blurb
+            '<DEFAULT>(?P<default>.*?)</DEFAULT>\n'     # store default
+        )
+        for block in amatcher.findall(data):
+            nmatch = nmatcher.search(block)
+            if nmatch:
+                o = nmatch.group('object')
+                debug("Found object", o)
+                debug("Found arg", nmatch.group('arg'))
+                if not self._objects.has_key(o):
+                    object = Object(o)
+                    self._objects[o] = object
+
+                rmatch = rmatcher.search(block)
+                if rmatch:
+                    dict = rmatch.groupdict().copy()
+                    dict['name'] = nmatch.group('arg')
+                    arg = Arg(**dict)
+                    self._objects[o].add_arg(arg)
+                else:
+                    print "ERROR: could not match arg from block %s" % block
+
+    def get_data(self):
+        lines = []
+        for o in self._objects.values():
+            for a in o._args.values():
+                block = """<ARG>
+<NAME>%(object)s::%(name)s</NAME>
+<TYPE>%(type)s</TYPE>
+<RANGE>%(range)s</RANGE>
+<FLAGS>%(flags)s</FLAGS>
+<NICK>%(nick)s</NICK>
+<BLURB>%(blurb)s</BLURB>
+<DEFAULT>%(default)s</DEFAULT>
+</ARG>
+"""
+                d = a.dict.copy()
+                d['object'] = o.name
+                lines.append(block % d)
+
+        return "\n".join(lines) + '\n'
+
+class SingleLine(GDoc):
+    def __init__(self):
+        self._objects = []
+
+    def load_data(self, data):
+        """
+        Load the .interfaces/.prerequisites lines, merge duplicates
+        """
+        # split data on '\n'
+        lines = data.splitlines();
+        # merge them into self._objects
+        for line in lines:
+            if line not in self._objects:
+                self._objects.append(line)
+
+    def get_data(self):
+        lines = sorted(self._objects)
+        return "\n".join(lines) + '\n'
+
+def main(argv):
+    modulename = None
+    try:
+        modulename = argv[1]
+    except IndexError:
+        sys.stderr.write('Please provide a documentation module name\n')
+        sys.exit(1)
+
+    signals = Signals()
+    signals.load_file(modulename + '.signals')
+    signals.load_file(modulename + '.signals.new')
+    signals.save_file(modulename + '.signals', backup=True)
+    os.unlink(modulename + '.signals.new')
+
+    args = Args()
+    args.load_file(modulename + '.args')
+    args.load_file(modulename + '.args.new')
+    args.save_file(modulename + '.args', backup=True)
+    os.unlink(modulename + '.args.new')
+
+    ifaces = SingleLine()
+    ifaces.load_file(modulename + '.interfaces')
+    ifaces.load_file(modulename + '.interfaces.new')
+    ifaces.save_file(modulename + '.interfaces', backup=True)
+    os.unlink(modulename + '.interfaces.new')
+
+    prereq = SingleLine()
+    prereq.load_file(modulename + '.prerequisites')
+    prereq.load_file(modulename + '.prerequisites.new')
+    prereq.save_file(modulename + '.prerequisites', backup=True)
+    os.unlink(modulename + '.prerequisites.new')
+
+main(sys.argv)
diff --git a/common/upload-doc.mak b/common/upload-doc.mak
new file mode 100644
index 0000000..3bf9496
--- /dev/null
+++ b/common/upload-doc.mak
@@ -0,0 +1,66 @@
+# this snippet is to be included by both our docbook manuals
+# and gtk-doc API references
+
+# it adds an upload target to each of these dir's Makefiles
+
+# each Makefile.am should define the following variables:
+# - DOC: the base name of the documentation
+#        (faq, manual, pwg, gstreamer, gstreamer-libs)
+# - FORMATS: the formats in which DOC is output
+#            (html ps pdf)
+
+# if you want to use it, make sure your $HOME/.ssh/config file contains the
+# correct User entry for the Host entry for the DOC_SERVER
+
+# these variables define the location of the online docs
+DOC_SERVER = gstreamer.freedesktop.org
+DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc
+DOC_URL = $(DOC_SERVER):$(DOC_BASE)
+
+upload: $(FORMATS)
+	@if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Preparing docs for upload (rebasing cross-references) ..." ; \
+	  if test x$(builddir) != x$(srcdir); then \
+	    echo "make upload can only be used if srcdir == builddir"; \
+	    exit 1; \
+	  fi; \
+	  # gtkdoc-rebase sometimes gets confused, so reset everything to \
+	  # local links before rebasing to online links                   \
+	  gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \
+	  rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \
+	  echo "$$rebase" | grep -e "On-*line"; \
+	  for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \
+	    if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \
+	      echo "===============================================================================" ; \
+	      echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \
+	      echo " broken, so not uploading. Make sure the library's gtk-doc documentation is    " ; \
+	      echo " installed somewhere in /usr/share/gtk-doc.                                    " ; \
+	      echo "===============================================================================" ; \
+	      exit 1; \
+	    fi; \
+	  done; \
+	  export SRC="$$SRC html"; \
+	fi; \
+	if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
+	if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
+	\
+	# upload releases to both 0.10.X/ and head/ subdirectories \
+	if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
+	  export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
+	  echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	  rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	fi; \
+	\
+	export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
+	echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	\
+	if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \
+	  gtkdoc-rebase --html-dir=$(builddir)/html ; \
+	fi; \
+	echo Done
diff --git a/common/win32.mak b/common/win32.mak
new file mode 100644
index 0000000..94afaec
--- /dev/null
+++ b/common/win32.mak
@@ -0,0 +1,72 @@
+# various tests to make sure we dist the win32 stuff (for MSVC builds) right
+
+# the MANIFEST contains all win32 related files that should be disted
+win32 = $(shell cat $(top_srcdir)/win32/MANIFEST)
+
+# wildcard is apparently not portable to other makes, hence the use of find
+# these are library .def files with the symbols to export
+win32defs = $(shell find $(top_srcdir)/win32/common -name '*.def')
+
+# wildcard is apparently not portable to other makes, hence the use of find
+# these are files that need to be disted with CRLF line endings:
+win32crlf = $(shell find $(top_srcdir)/win32 -name '*.dsw' -o -name '*.dsp')
+
+win32-debug:
+	@echo; \
+	echo win32     = $(win32); \
+	echo; \
+	echo win32defs = $(win32defs); \
+	echo; \
+	echo win32crlf = $(win32crlf); \
+	echo
+
+win32-check-crlf:
+	@echo Checking win32 files for CR LF line endings ...; \
+	fail=0 ; \
+	for each in $(win32crlf) ; do \
+	  result=`perl -e 'print grep(/\r\n/,<>)' "$$each" | wc -l`; \
+	  if test "$$result" = 0 ; then \
+	    echo $$each must be fixed to have CRLF line endings ; \
+	    fail=1; \
+	  fi ; \
+	done ; \
+	exit $$fail
+
+# make sure all symbols we export on linux are defined in the win32 .def too
+# (don't care about other unixes for now, it's enough if it works on one of
+# the linux build bots; we assume .so )
+check-exports:
+	@fail=0 ; \
+	for l in $(win32defs); do \
+	  libbase=`basename "$$l" ".def"`; \
+	  libso=`find "$(top_builddir)" -name "$$libbase-@GST_MAJORMINOR@.so" | grep -v /_build/ | head -n1`; \
+	  libdef="$(top_srcdir)/win32/common/$$libbase.def"; \
+	  if test "x$$libso" != "x"; then \
+	    echo Checking symbols in $$libso; \
+	    if ! ($(top_srcdir)/common/check-exports $$libdef $$libso) ; then \
+	      fail=1; \
+	    fi; \
+	  fi; \
+	done ; \
+	if test $$fail != 0; then \
+	  echo '-----------------------------------------------------------'; \
+	  echo 'Run this to update the .def files:'; \
+	  echo 'make check-exports 2>&1 | patch -p1'; \
+	  echo '-----------------------------------------------------------'; \
+	fi; \
+	exit $$fail
+
+# complain about nonportable printf format strings (%lld, %llu, %zu etc.)
+check-nonportable-print-format:
+	@fail=0 ; \
+	loc=`find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'`; \
+	if test "x$$loc" != "x"; then \
+	  echo "Please fix the following print format strings:" ; \
+	  find "$(top_srcdir)" -name '*.c' | xargs grep -n -e '%[0-9]*ll[udx]' -e '%[0-9]*z[udx]'; \
+	  fail=1; \
+	fi; \
+	exit $$fail
+
+dist-hook: check-exports win32-check-crlf
+
+
diff --git a/compile b/compile
new file mode 100755
index 0000000..c0096a7
--- /dev/null
+++ b/compile
@@ -0,0 +1,143 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2009-10-06.20; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as `compile cc -o foo foo.c'.
+	# So we strip `-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..c2246a4
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1502 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2009-12-30'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	eval $set_cc_for_build
+	SUN_ARCH="i386"
+	# If there is a compiler, see if it is configured for 64-bit objects.
+	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+	# This test works for both compilers.
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		SUN_ARCH="x86_64"
+	    fi
+	fi
+	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[456])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep -q __LP64__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
+	echo i586-pc-haiku
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..6a69ed1
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,385 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* The implementation that should be used for integer audio resampling witll
+   be benchmarked at runtime */
+#undef AUDIORESAMPLE_FORMAT_AUTO
+
+/* The float implementation should be used for integer audio resampling */
+#undef AUDIORESAMPLE_FORMAT_FLOAT
+
+/* The int implementation should be used for integer audio resampling */
+#undef AUDIORESAMPLE_FORMAT_INT
+
+/* defined if cdda headers are in a cdda/ directory */
+#undef CDPARANOIA_HEADERS_IN_DIR
+
+/* Default audio sink */
+#undef DEFAULT_AUDIOSINK
+
+/* Default audio source */
+#undef DEFAULT_AUDIOSRC
+
+/* Default video sink */
+#undef DEFAULT_VIDEOSINK
+
+/* Default video source */
+#undef DEFAULT_VIDEOSRC
+
+/* Default visualizer */
+#undef DEFAULT_VISUALIZER
+
+/* Disable Orc */
+#undef DISABLE_ORC
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* gettext package name */
+#undef GETTEXT_PACKAGE
+
+/* The GIO library directory. */
+#undef GIO_LIBDIR
+
+/* The GIO modules directory. */
+#undef GIO_MODULE_DIR
+
+/* system wide data directory */
+#undef GST_DATADIR
+
+/* set to disable libxml2-dependent code in subparse */
+#undef GST_DISABLE_XML
+
+/* macro to use to show function name */
+#undef GST_FUNCTION
+
+/* Defined if gcov is enabled to force a rebuild due to config.h changing */
+#undef GST_GCOV_ENABLED
+
+/* plugin install helper script */
+#undef GST_INSTALL_PLUGINS_HELPER
+
+/* Default errorlevel to use */
+#undef GST_LEVEL_DEFAULT
+
+/* GStreamer license */
+#undef GST_LICENSE
+
+/* major/minor version */
+#undef GST_MAJORMINOR
+
+/* package name in plugins */
+#undef GST_PACKAGE_NAME
+
+/* package origin */
+#undef GST_PACKAGE_ORIGIN
+
+/* GStreamer package release date/time for plugins as YYYY-MM-DD */
+#undef GST_PACKAGE_RELEASE_DATETIME
+
+/* Define to enable ALSA (used by alsa). */
+#undef HAVE_ALSA
+
+/* Define to enable CDParanoia (used by cdparanoia). */
+#undef HAVE_CDPARANOIA
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the host CPU is an Alpha */
+#undef HAVE_CPU_ALPHA
+
+/* Define if the host CPU is an ARM */
+#undef HAVE_CPU_ARM
+
+/* Define if the host CPU is a CRIS */
+#undef HAVE_CPU_CRIS
+
+/* Define if the host CPU is a CRISv32 */
+#undef HAVE_CPU_CRISV32
+
+/* Define if the host CPU is a HPPA */
+#undef HAVE_CPU_HPPA
+
+/* Define if the host CPU is an x86 */
+#undef HAVE_CPU_I386
+
+/* Define if the host CPU is a IA64 */
+#undef HAVE_CPU_IA64
+
+/* Define if the host CPU is a M68K */
+#undef HAVE_CPU_M68K
+
+/* Define if the host CPU is a MIPS */
+#undef HAVE_CPU_MIPS
+
+/* Define if the host CPU is a PowerPC */
+#undef HAVE_CPU_PPC
+
+/* Define if the host CPU is a 64 bit PowerPC */
+#undef HAVE_CPU_PPC64
+
+/* Define if the host CPU is a S390 */
+#undef HAVE_CPU_S390
+
+/* Define if the host CPU is a SPARC */
+#undef HAVE_CPU_SPARC
+
+/* Define if the host CPU is a x86_64 */
+#undef HAVE_CPU_X86_64
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to enable building of experimental plug-ins. */
+#undef HAVE_EXPERIMENTAL
+
+/* Define to enable building of plug-ins with external deps. */
+#undef HAVE_EXTERNAL
+
+/* FIONREAD ioctl found in sys/filio.h */
+#undef HAVE_FIONREAD_IN_SYS_FILIO
+
+/* FIONREAD ioctl found in sys/ioclt.h */
+#undef HAVE_FIONREAD_IN_SYS_IOCTL
+
+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+#undef HAVE_FSEEKO
+
+/* defined if the compiler implements __func__ */
+#undef HAVE_FUNC
+
+/* defined if the compiler implements __FUNCTION__ */
+#undef HAVE_FUNCTION
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to enable GIO library (used by gio). */
+#undef HAVE_GIO
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#undef HAVE_GMTIME_R
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* make use of iso-codes for ISO-639 */
+#undef HAVE_ISO_CODES
+
+/* Define to enable integer vorbis plug-in (used by ivorbisdec). */
+#undef HAVE_IVORBIS
+
+/* Define to 1 if you have the `asound' library (-lasound). */
+#undef HAVE_LIBASOUND
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to enable libvisual visualization library (used by libvisual). */
+#undef HAVE_LIBVISUAL
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `log2' function. */
+#undef HAVE_LOG2
+
+/* Define if you have C99's lrint function. */
+#undef HAVE_LRINT
+
+/* Define if you have C99's lrintf function. */
+#undef HAVE_LRINTF
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to enable Xiph Ogg library (used by ogg). */
+#undef HAVE_OGG
+
+/* Use Orc */
+#undef HAVE_ORC
+
+/* Define to enable Pango font rendering (used by pango). */
+#undef HAVE_PANGO
+
+/* defined if the compiler implements __PRETTY_FUNCTION__ */
+#undef HAVE_PRETTY_FUNCTION
+
+/* Define to 1 if you have the <process.h> header file. */
+#undef HAVE_PROCESS_H
+
+/* Define if RDTSC is available */
+#undef HAVE_RDTSC
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to enable Xiph Theora video codec (used by theora). */
+#undef HAVE_THEORA
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if valgrind should be used */
+#undef HAVE_VALGRIND
+
+/* Define to enable Xiph Vorbis audio codec (used by vorbis). */
+#undef HAVE_VORBIS
+
+/* defined if vorbis_synthesis_restart is present */
+#undef HAVE_VORBIS_SYNTHESIS_RESTART
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#undef HAVE_WINSOCK2_H
+
+/* Define to enable X libraries and plugins (used by ximagesink). */
+#undef HAVE_X
+
+/* Define to enable X Shared Memory extension. */
+#undef HAVE_XSHM
+
+/* Define to enable X11 XVideo extensions (used by xvimagesink). */
+#undef HAVE_XVIDEO
+
+/* Define to enable zlib support for ID3 parsing in libgsttag. */
+#undef HAVE_ZLIB
+
+/* the host CPU */
+#undef HOST_CPU
+
+/* prefix */
+#undef ISO_CODES_PREFIX
+
+/* */
+#undef ISO_CODES_VERSION
+
+/* directory in which the detected libvisual's plugins are located */
+#undef LIBVISUAL_PLUGINSBASEDIR
+
+/* gettext locale dir */
+#undef LOCALEDIR
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define if you have no native hstrerror() function. */
+#undef NO_HSTRERROR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* directory where plugins are located */
+#undef PLUGINDIR
+
+/* The size of `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `void*', as computed by sizeof. */
+#undef SIZEOF_VOIDP
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* "Define if building for android" */
+#undef USE_TREMOLO
+
+/* Version number of package */
+#undef VERSION
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+#undef _LARGEFILE_SOURCE
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..c547c68
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,666 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2007 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | cygwin* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+        icc* | ecc*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    rdos*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    gnu* | linux* | k*bsd*-gnu)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            :
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    library_names_spec='$libname.a'
+    ;;
+  aix4* | aix5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  amigaos*)
+    library_names_spec='$libname.a'
+    ;;
+  beos*)
+    library_names_spec='$libname$shrext'
+    ;;
+  bsdi[45]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    library_names_spec='$libname$shrext'
+    ;;
+  dgux*)
+    library_names_spec='$libname$shrext'
+    ;;
+  freebsd1*)
+    ;;
+  freebsd* | dragonfly*)
+    case "$host_os" in
+      freebsd[123]*)
+        library_names_spec='$libname$shrext$versuffix' ;;
+      *)
+        library_names_spec='$libname$shrext' ;;
+    esac
+    ;;
+  gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    library_names_spec='$libname$shrext'
+    ;;
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  netbsd*)
+    library_names_spec='$libname$shrext'
+    ;;
+  newsos6)
+    library_names_spec='$libname$shrext'
+    ;;
+  nto-qnx*)
+    library_names_spec='$libname$shrext'
+    ;;
+  openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    library_names_spec='$libname.a'
+    ;;
+  osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv4*MP*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  uts4*)
+    library_names_spec='$libname$shrext'
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..c2d1257
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1714 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2010-01-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray | -microblaze)
+		os=
+		basic_machine=$1
+		;;
+        -bluegene*)
+	        os=-cnk
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile-* | tilegx-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+        cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+        microblaze)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+        # This must be matched before tile*.
+        tilegx*)
+		basic_machine=tilegx-unknown
+		os=-linux-gnu
+		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+        -auroraux)
+	        os=-auroraux
+		;;
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+        -nacl*)
+	        ;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+        mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-cnk*|-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..da61958
--- /dev/null
+++ b/configure
@@ -0,0 +1,34264 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67 for GStreamer Base Plug-ins 0.11.1.
+#
+# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	  # Cool, printf works
+	  :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	  export CONFIG_SHELL
+	  SHELL="$CONFIG_SHELL"
+	  export SHELL
+	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+	  # maybe with a smaller string...
+	  prev=:
+
+	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+	    then
+	      break
+	    fi
+	    prev="$cmd"
+	  done
+
+	  if test "$prev" != 'sed 50q "$0"'; then
+	    echo_test_string=`eval $prev`
+	    export echo_test_string
+	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	  else
+	    # Oops.  We lost completely, so just stick with echo.
+	    ECHO=echo
+	  fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GStreamer Base Plug-ins'
+PACKAGE_TARNAME='gst-plugins-base'
+PACKAGE_VERSION='0.11.1'
+PACKAGE_STRING='GStreamer Base Plug-ins 0.11.1'
+PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
+PACKAGE_URL=''
+
+ac_unique_file="gst/audiotestsrc/gstaudiotestsrc.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+gt_needs=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+GST_PLUGIN_LDFLAGS
+GST_LIB_LDFLAGS
+GST_ALL_LDFLAGS
+GST_CXXFLAGS
+GST_PLUGINS_BASE_CFLAGS
+GST_OPTION_CXXFLAGS
+GST_OPTION_CFLAGS
+DEPRECATED_CFLAGS
+PROFILE_CFLAGS
+HAVE_FT2_FALSE
+HAVE_FT2_TRUE
+FT2_CONFIG
+FT2_LIBS
+FT2_CFLAGS
+USE_VORBIS_FALSE
+USE_VORBIS_TRUE
+VORBISENC_LIBS
+VORBISFILE_LIBS
+VORBIS_LIBS
+VORBIS_CFLAGS
+USE_THEORA_FALSE
+USE_THEORA_TRUE
+THEORA_LIBS
+THEORA_CFLAGS
+USE_PANGO_FALSE
+USE_PANGO_TRUE
+PANGO_LIBS
+PANGO_CFLAGS
+USE_OGG_FALSE
+USE_OGG_TRUE
+OGG_LIBS
+OGG_CFLAGS
+USE_LIBVISUAL_FALSE
+USE_LIBVISUAL_TRUE
+LIBVISUAL_LIBS
+LIBVISUAL_CFLAGS
+USE_GIO_FALSE
+USE_GIO_TRUE
+GIO_LDFLAGS
+GIO_LIBS
+GIO_CFLAGS
+USE_IVORBIS_FALSE
+USE_IVORBIS_TRUE
+IVORBIS_LIBS
+IVORBIS_CFLAGS
+USE_CDPARANOIA_FALSE
+USE_CDPARANOIA_TRUE
+HAVE_CDPARANOIA
+CDPARANOIA_LIBS
+CDPARANOIA_CFLAGS
+USE_ALSA_FALSE
+USE_ALSA_TRUE
+ALSA_LIBS
+ALSA_CFLAGS
+USE_XSHM_FALSE
+USE_XSHM_TRUE
+XSHM_LIBS
+HAVE_XSHM
+USE_XVIDEO_FALSE
+USE_XVIDEO_TRUE
+XVIDEO_LIBS
+USE_X_FALSE
+USE_X_TRUE
+HAVE_X
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+XMKMF
+USE_ZLIB_FALSE
+USE_ZLIB_TRUE
+HAVE_ZLIB
+ZLIB_LIBS
+ZLIB_CFLAGS
+USE_ISO_CODES_FALSE
+USE_ISO_CODES_TRUE
+USE_XML_FALSE
+USE_XML_TRUE
+USE_PLUGIN_VOLUME_FALSE
+USE_PLUGIN_VOLUME_TRUE
+USE_PLUGIN_VIDEOSCALE_FALSE
+USE_PLUGIN_VIDEOSCALE_TRUE
+USE_PLUGIN_VIDEORATE_FALSE
+USE_PLUGIN_VIDEORATE_TRUE
+USE_PLUGIN_VIDEOTESTSRC_FALSE
+USE_PLUGIN_VIDEOTESTSRC_TRUE
+USE_PLUGIN_TYPEFIND_FALSE
+USE_PLUGIN_TYPEFIND_TRUE
+USE_PLUGIN_TCP_FALSE
+USE_PLUGIN_TCP_TRUE
+USE_PLUGIN_SUBPARSE_FALSE
+USE_PLUGIN_SUBPARSE_TRUE
+USE_PLUGIN_AUDIORESAMPLE_FALSE
+USE_PLUGIN_AUDIORESAMPLE_TRUE
+USE_PLUGIN_PLAYBACK_FALSE
+USE_PLUGIN_PLAYBACK_TRUE
+USE_PLUGIN_GDP_FALSE
+USE_PLUGIN_GDP_TRUE
+USE_PLUGIN_VIDEOCONVERT_FALSE
+USE_PLUGIN_VIDEOCONVERT_TRUE
+USE_PLUGIN_ENCODING_FALSE
+USE_PLUGIN_ENCODING_TRUE
+USE_PLUGIN_AUDIOTESTSRC_FALSE
+USE_PLUGIN_AUDIOTESTSRC_TRUE
+USE_PLUGIN_AUDIORATE_FALSE
+USE_PLUGIN_AUDIORATE_TRUE
+USE_PLUGIN_AUDIOCONVERT_FALSE
+USE_PLUGIN_AUDIOCONVERT_TRUE
+USE_PLUGIN_APP_FALSE
+USE_PLUGIN_APP_TRUE
+USE_PLUGIN_ADDER_FALSE
+USE_PLUGIN_ADDER_TRUE
+AUDIORESAMPLE_FORMAT_AUTO
+AUDIORESAMPLE_FORMAT_FLOAT
+AUDIORESAMPLE_FORMAT_INT
+DEFAULT_VISUALIZER
+DEFAULT_VIDEOSRC
+DEFAULT_VIDEOSINK
+DEFAULT_AUDIOSRC
+DEFAULT_AUDIOSINK
+GST_LEVEL_DEFAULT
+ERROR_CXXFLAGS
+WARNING_CXXFLAGS
+ERROR_CFLAGS
+WARNING_CFLAGS
+plugindir
+PLUGINDIR
+GST_LICENSE
+HAVE_LINUX_JOYSTICK_HEADERS_FALSE
+HAVE_LINUX_JOYSTICK_HEADERS_TRUE
+HAVE_QT_GV_FALSE
+HAVE_QT_GV_TRUE
+HAVE_QT_FALSE
+HAVE_QT_TRUE
+QT4_MOC
+QT_LIBS
+QT_CFLAGS
+HAVE_GTK_X11_FALSE
+HAVE_GTK_X11_TRUE
+HAVE_GTK_FALSE
+HAVE_GTK_TRUE
+GTK_X11_LIBS
+GTK_X11_CFLAGS
+GTK_LIBS
+GTK_CFLAGS
+GST_PREFIX
+GLIB_PREFIX
+HAVE_GST_CHECK_FALSE
+HAVE_GST_CHECK_TRUE
+GST_CHECK_LIBS
+GST_CHECK_CFLAGS
+GST_CONTROLLER_LIBS
+GST_CONTROLLER_CFLAGS
+GST_GDP_LIBS
+GST_GDP_CFLAGS
+GST_BASE_LIBS
+GST_BASE_CFLAGS
+GST_PLUGINS_DIR
+GST_TOOLS_DIR
+GST_LIBS
+GST_CFLAGS
+HAVE_ORCC_FALSE
+HAVE_ORCC_TRUE
+HAVE_ORC_FALSE
+HAVE_ORC_TRUE
+ORCC_FLAGS
+ORCC
+ORC_LIBS
+ORC_CFLAGS
+GLIB_LIBS
+GLIB_CFLAGS
+GLIB_REQ
+HSTRERROR_LIBS
+WIN32_LIBS
+HAVE_SYS_SOCKET_H_FALSE
+HAVE_SYS_SOCKET_H_TRUE
+HAVE_LIBXML_HTML_FALSE
+HAVE_LIBXML_HTML_TRUE
+LIBM
+ENABLE_PLUGIN_DOCS_FALSE
+ENABLE_PLUGIN_DOCS_TRUE
+pkgpyexecdir
+pyexecdir
+pkgpythondir
+pythondir
+PYTHON_PLATFORM
+PYTHON_EXEC_PREFIX
+PYTHON_PREFIX
+PYTHON_VERSION
+PYTHON
+GTK_DOC_USE_LIBTOOL_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+ENABLE_GTK_DOC_FALSE
+ENABLE_GTK_DOC_TRUE
+GTKDOC_CHECK
+HTML_DIR
+HAVE_INTROSPECTION_FALSE
+HAVE_INTROSPECTION_TRUE
+INTROSPECTION_MAKEFILE
+INTROSPECTION_LIBS
+INTROSPECTION_CFLAGS
+INTROSPECTION_TYPELIBDIR
+INTROSPECTION_GIRDIR
+INTROSPECTION_GENERATE
+INTROSPECTION_COMPILER
+INTROSPECTION_SCANNER
+HAVE_VALGRIND_FALSE
+HAVE_VALGRIND_TRUE
+VALGRIND_PATH
+HAVE_CXX_FALSE
+HAVE_CXX_TRUE
+CXXCPP
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXX
+HAVE_CPU_CRISV32_FALSE
+HAVE_CPU_CRISV32_TRUE
+HAVE_CPU_CRIS_FALSE
+HAVE_CPU_CRIS_TRUE
+HAVE_CPU_X86_64_FALSE
+HAVE_CPU_X86_64_TRUE
+HAVE_CPU_M68K_FALSE
+HAVE_CPU_M68K_TRUE
+HAVE_CPU_IA64_FALSE
+HAVE_CPU_IA64_TRUE
+HAVE_CPU_S390_FALSE
+HAVE_CPU_S390_TRUE
+HAVE_CPU_MIPS_FALSE
+HAVE_CPU_MIPS_TRUE
+HAVE_CPU_HPPA_FALSE
+HAVE_CPU_HPPA_TRUE
+HAVE_CPU_SPARC_FALSE
+HAVE_CPU_SPARC_TRUE
+HAVE_CPU_ARM_FALSE
+HAVE_CPU_ARM_TRUE
+HAVE_CPU_ALPHA_FALSE
+HAVE_CPU_ALPHA_TRUE
+HAVE_CPU_PPC64_FALSE
+HAVE_CPU_PPC64_TRUE
+HAVE_CPU_PPC_FALSE
+HAVE_CPU_PPC_TRUE
+HAVE_CPU_I386_FALSE
+HAVE_CPU_I386_TRUE
+BUILD_EXPERIMENTAL_FALSE
+BUILD_EXPERIMENTAL_TRUE
+USE_EXPERIMENTAL_FALSE
+USE_EXPERIMENTAL_TRUE
+BUILD_EXTERNAL_FALSE
+BUILD_EXTERNAL_TRUE
+USE_EXTERNAL_FALSE
+USE_EXTERNAL_TRUE
+GST_PLUGINS_NONPORTED
+GST_PLUGINS_SELECTED
+GST_PLUGINS_ALL
+GST_INSTALL_PLUGINS_HELPER
+GST_PKG_CONFIG_PATH
+GST_PACKAGE_ORIGIN
+GST_PACKAGE_NAME
+BUILD_EXAMPLES_FALSE
+BUILD_EXAMPLES_TRUE
+GST_GCOV_ENABLED_FALSE
+GST_GCOV_ENABLED_TRUE
+CCASFLAGS
+FFLAGS
+CXXFLAGS
+GCOV
+GCOV_LIBS
+GCOV_CFLAGS
+VALGRIND_LIBS
+VALGRIND_CFLAGS
+PKG_CONFIG
+LOCALEDIR
+GETTEXT_PACKAGE
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+ACLOCAL_AMFLAGS
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+GST_LT_LDFLAGS
+GST_LIBVERSION
+GST_AGE
+GST_REVISION
+GST_CURRENT
+GST_MAJORMINOR
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+PACKAGE_VERSION_RELEASE
+PACKAGE_VERSION_NANO
+PACKAGE_VERSION_MICRO
+PACKAGE_VERSION_MINOR
+PACKAGE_VERSION_MAJOR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_maintainer_mode
+enable_silent_rules
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+enable_dependency_tracking
+with_gnu_ld
+enable_libtool_lock
+with_autoconf
+with_autoheader
+with_automake
+with_aclocal
+enable_nls
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+enable_debug
+enable_profiling
+enable_valgrind
+enable_gcov
+enable_examples
+with_pkg_config_path
+with_package_name
+with_package_origin
+with_install_plugins_helper
+with_plugins
+enable_external
+enable_experimental
+enable_largefile
+enable_introspection
+with_html_dir
+enable_gtk_doc
+enable_gobject_cast_checks
+enable_glib_asserts
+enable_orc
+with_gtk
+enable_Bsymbolic
+with_default_audiosink
+with_default_audiosrc
+with_default_videosink
+with_default_videosrc
+with_default_visualizer
+with_audioresample_format
+enable_adder
+enable_app
+enable_audioconvert
+enable_audiorate
+enable_audiotestsrc
+enable_encoding
+enable_videoconvert
+enable_gdp
+enable_playback
+enable_audioresample
+enable_subparse
+enable_tcp
+enable_typefind
+enable_videotestsrc
+enable_videorate
+enable_videoscale
+enable_volume
+enable_iso_codes
+enable_zlib
+enable_x
+with_x
+enable_xvideo
+enable_xshm
+enable_alsa
+with_alsa_prefix
+with_alsa_inc_prefix
+enable_cdparanoia
+enable_ivorbis
+enable_gio
+enable_libvisual
+enable_ogg
+with_ogg
+with_ogg_libraries
+with_ogg_includes
+enable_oggtest
+enable_pango
+enable_theora
+enable_vorbis
+with_vorbis
+with_vorbis_libraries
+with_vorbis_includes
+enable_vorbistest
+with_ft_prefix
+with_ft_exec_prefix
+enable_freetypetest
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+PKG_CONFIG
+VALGRIND_CFLAGS
+VALGRIND_LIBS
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+GLIB_CFLAGS
+GLIB_LIBS
+ORC_CFLAGS
+ORC_LIBS
+GST_CFLAGS
+GST_LIBS
+GST_BASE_CFLAGS
+GST_BASE_LIBS
+GST_GDP_CFLAGS
+GST_GDP_LIBS
+GST_CONTROLLER_CFLAGS
+GST_CONTROLLER_LIBS
+GST_CHECK_CFLAGS
+GST_CHECK_LIBS
+GTK_CFLAGS
+GTK_LIBS
+GTK_X11_CFLAGS
+GTK_X11_LIBS
+QT_CFLAGS
+QT_LIBS
+ZLIB_CFLAGS
+ZLIB_LIBS
+XMKMF
+ALSA_CFLAGS
+ALSA_LIBS
+CDPARANOIA_CFLAGS
+CDPARANOIA_LIBS
+IVORBIS_CFLAGS
+IVORBIS_LIBS
+GIO_CFLAGS
+GIO_LIBS
+LIBVISUAL_CFLAGS
+LIBVISUAL_LIBS
+OGG_CFLAGS
+OGG_LIBS
+PANGO_CFLAGS
+PANGO_LIBS
+THEORA_CFLAGS
+THEORA_LIBS
+VORBIS_CFLAGS
+VORBIS_LIBS
+FT2_CFLAGS
+FT2_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures GStreamer Base Plug-ins 0.11.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root
+                          [DATAROOTDIR/doc/gst-plugins-base]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 0.11.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-nls           do not use Native Language Support
+  --disable-rpath         do not hardcode runtime library paths
+  --disable-debug         disable addition of -g debugging info
+  --enable-profiling      adds -pg to compiler commandline, for profiling
+  --disable-valgrind      disable run-time valgrind detection
+  --enable-gcov           compile with coverage profiling instrumentation (gcc
+                          only)
+  --disable-examples      disable building examples
+  --disable-external           disable building of plug-ins with external deps
+  --enable-experimental        enable building of experimental plug-ins
+  --disable-largefile     omit support for large files
+  --enable-introspection=[no/auto/yes]
+                          Enable introspection for this build
+  --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
+  --enable-gobject-cast-checks=[no/auto/yes]
+                          Enable GObject cast checks
+  --enable-glib-asserts=[no/auto/yes]
+                          Enable GLib assertion
+  --enable-orc            use Orc if installed
+  --disable-Bsymbolic     avoid linking with -Bsymbolic
+  --disable-adder         disable dependency-less adder plugin
+  --disable-app           disable dependency-less app plugin
+  --disable-audioconvert  disable dependency-less audioconvert plugin
+  --disable-audiorate     disable dependency-less audiorate plugin
+  --disable-audiotestsrc  disable dependency-less audiotestsrc plugin
+  --disable-encoding      disable dependency-less encoding plugin
+  --disable-videoconvert  disable dependency-less videoconvert plugin
+  --disable-gdp           disable dependency-less gdp plugin
+  --disable-playback      disable dependency-less playback plugin
+  --disable-audioresample disable dependency-less audioresample plugin
+  --disable-subparse      disable dependency-less subparse plugin
+  --disable-tcp           disable dependency-less tcp plugin
+  --disable-typefind      disable dependency-less typefind plugin
+  --disable-videotestsrc  disable dependency-less videotestsrc plugin
+  --disable-videorate     disable dependency-less videorate plugin
+  --disable-videoscale    disable dependency-less videoscale plugin
+  --disable-volume        disable dependency-less volume plugin
+  --enable-iso-codes      use iso-codes if installed
+  --disable-zlib               disable zlib support for ID3 parsing in libgsttag
+  --disable-x                  disable X libraries and plugins: ximagesink
+  --disable-xvideo             disable X11 XVideo extensions: xvimagesink
+  --disable-xshm               disable X Shared Memory extension
+  --disable-alsa               disable ALSA: alsa
+  --disable-cdparanoia         disable CDParanoia: cdparanoia
+  --disable-ivorbis            disable integer vorbis plug-in: ivorbisdec
+  --disable-gio                disable GIO library: gio
+  --disable-libvisual          disable libvisual visualization library: libvisual
+  --disable-ogg                disable Xiph Ogg library: ogg
+  --disable-oggtest       Do not try to compile and run a test Ogg program
+  --disable-pango              disable Pango font rendering: pango
+  --disable-theora             disable Xiph Theora video codec: theora
+  --disable-vorbis             disable Xiph Vorbis audio codec: vorbis
+  --disable-vorbistest       Do not try to compile and run a test Vorbis program
+  --disable-freetypetest  Do not try to compile and run
+                          a test FreeType program
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-autoconf         use a different autoconf for regeneration of
+                          Makefiles
+  --with-autoheader       use a different autoheader for regeneration of
+                          Makefiles
+  --with-automake         use a different automake for regeneration of
+                          Makefiles
+  --with-aclocal          use a different aclocal for regeneration of
+                          Makefiles
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+  --with-pkg-config-path  colon-separated list of pkg-config(1) dirs
+  --with-package-name     specify package name to use in plugins
+  --with-package-origin   specify package origin URL to use in plugins
+  --with-install-plugins-helper
+                          specify path of helper script to call to install
+                          plugins
+  --with-plugins          comma-separated list of dependencyless plug-ins to
+                          compile
+  --with-html-dir=PATH    path to installed docs
+  --with-gtk=3.0|2.0      which gtk+ version to compile against (default: 2.0)
+  --with-default-audiosink
+                          specify default audio sink
+  --with-default-audiosrc specify default audio source
+  --with-default-videosink
+                          specify default video sink
+  --with-default-videosrc specify default video source
+  --with-default-visualizer
+                          specify default visualizer
+  --with-audioresample-format
+                          Which implementation should be used for integer
+                          audio resampling, int/float/auto, (default is auto)
+  --with-x                use the X Window System
+  --with-alsa-prefix=PFX  prefix where Alsa library is installed(optional)
+  --with-alsa-inc-prefix=PFX
+                          prefix where include libraries are (optional)
+  --with-ogg=PFX   Prefix where libogg is installed (optional)
+  --with-ogg-libraries=DIR   Directory where libogg library is installed (optional)
+  --with-ogg-includes=DIR   Directory where libogg header files are installed (optional)
+  --with-vorbis=PFX   Prefix where libvorbis is installed (optional)
+  --with-vorbis-libraries=DIR   Directory where libvorbis library is installed (optional)
+  --with-vorbis-includes=DIR   Directory where libvorbis header files are installed (optional)
+  --with-ft-prefix=PREFIX
+                          Prefix where FreeType is installed (optional)
+  --with-ft-exec-prefix=PREFIX
+                          Exec prefix where FreeType is installed (optional)
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  VALGRIND_CFLAGS
+              C compiler flags for VALGRIND, overriding pkg-config
+  VALGRIND_LIBS
+              linker flags for VALGRIND, overriding pkg-config
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
+  GLIB_LIBS   linker flags for GLIB, overriding pkg-config
+  ORC_CFLAGS  C compiler flags for ORC, overriding pkg-config
+  ORC_LIBS    linker flags for ORC, overriding pkg-config
+  GST_CFLAGS  C compiler flags for GST, overriding pkg-config
+  GST_LIBS    linker flags for GST, overriding pkg-config
+  GST_BASE_CFLAGS
+              C compiler flags for GST_BASE, overriding pkg-config
+  GST_BASE_LIBS
+              linker flags for GST_BASE, overriding pkg-config
+  GST_GDP_CFLAGS
+              C compiler flags for GST_GDP, overriding pkg-config
+  GST_GDP_LIBS
+              linker flags for GST_GDP, overriding pkg-config
+  GST_CONTROLLER_CFLAGS
+              C compiler flags for GST_CONTROLLER, overriding pkg-config
+  GST_CONTROLLER_LIBS
+              linker flags for GST_CONTROLLER, overriding pkg-config
+  GST_CHECK_CFLAGS
+              C compiler flags for GST_CHECK, overriding pkg-config
+  GST_CHECK_LIBS
+              linker flags for GST_CHECK, overriding pkg-config
+  GTK_CFLAGS  C compiler flags for GTK, overriding pkg-config
+  GTK_LIBS    linker flags for GTK, overriding pkg-config
+  GTK_X11_CFLAGS
+              C compiler flags for GTK_X11, overriding pkg-config
+  GTK_X11_LIBS
+              linker flags for GTK_X11, overriding pkg-config
+  QT_CFLAGS   C compiler flags for QT, overriding pkg-config
+  QT_LIBS     linker flags for QT, overriding pkg-config
+  ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
+  ZLIB_LIBS   linker flags for ZLIB, overriding pkg-config
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config
+  ALSA_LIBS   linker flags for ALSA, overriding pkg-config
+  CDPARANOIA_CFLAGS
+              C compiler flags for CDPARANOIA, overriding pkg-config
+  CDPARANOIA_LIBS
+              linker flags for CDPARANOIA, overriding pkg-config
+  IVORBIS_CFLAGS
+              C compiler flags for IVORBIS, overriding pkg-config
+  IVORBIS_LIBS
+              linker flags for IVORBIS, overriding pkg-config
+  GIO_CFLAGS  C compiler flags for GIO, overriding pkg-config
+  GIO_LIBS    linker flags for GIO, overriding pkg-config
+  LIBVISUAL_CFLAGS
+              C compiler flags for LIBVISUAL, overriding pkg-config
+  LIBVISUAL_LIBS
+              linker flags for LIBVISUAL, overriding pkg-config
+  OGG_CFLAGS  C compiler flags for OGG, overriding pkg-config
+  OGG_LIBS    linker flags for OGG, overriding pkg-config
+  PANGO_CFLAGS
+              C compiler flags for PANGO, overriding pkg-config
+  PANGO_LIBS  linker flags for PANGO, overriding pkg-config
+  THEORA_CFLAGS
+              C compiler flags for THEORA, overriding pkg-config
+  THEORA_LIBS linker flags for THEORA, overriding pkg-config
+  VORBIS_CFLAGS
+              C compiler flags for VORBIS, overriding pkg-config
+  VORBIS_LIBS linker flags for VORBIS, overriding pkg-config
+  FT2_CFLAGS  C compiler flags for FT2, overriding pkg-config
+  FT2_LIBS    linker flags for FT2, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+GStreamer Base Plug-ins configure 0.11.1
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval "test \"\${$3+set}\"" = set; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------------------------------------------ ##
+## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer ##
+## ------------------------------------------------------------------------ ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+	return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GStreamer Base Plug-ins $as_me 0.11.1, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+gt_needs="$gt_needs "
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='gst-plugins-base'
+ VERSION='0.11.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+
+  PACKAGE_VERSION_MAJOR=$(echo 0.11.1 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 0.11.1 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 0.11.1 | cut -d'.' -f3)
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
+$as_echo_n "checking nano version... " >&6; }
+
+  NANO=$(echo 0.11.1 | cut -d'.' -f4)
+
+  if test x"$NANO" = x || test "x$NANO" = "x0" ; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
+$as_echo "0 (release)" >&6; }
+    NANO=0
+    PACKAGE_VERSION_RELEASE=1
+    GST_GIT="no"
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NANO" >&5
+$as_echo "$NANO" >&6; }
+    PACKAGE_VERSION_RELEASE=0.`date +%Y%m%d.%H%M%S`
+    if test "x$NANO" != "x1" ; then
+       GST_GIT="no"
+    else
+       GST_GIT="yes"
+    fi
+  fi
+  PACKAGE_VERSION_NANO=$NANO
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=0;;
+esac
+AM_BACKSLASH='\'
+
+
+GST_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
+GST_MAJORMINOR=0.11
+
+
+
+  GST_CURRENT=26
+  GST_REVISION=0
+  GST_AGE=0
+  GST_LIBVERSION=26:0:0
+
+
+
+
+
+  GST_LT_LDFLAGS="$GST_LT_LDFLAGS -version-info $GST_LIBVERSION"
+  if test ! -z ""
+  then
+    GST_LT_LDFLAGS="$GST_LT_LDFLAGS -release "
+  fi
+
+
+  enable_dlopen=yes
+
+
+
+
+
+
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AS="as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:5913: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5916: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:5919: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 7122 "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8647: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8651: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+	# IBM XL C 8.0/Fortran 10.1 on PPC
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8986: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8990: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9091: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9095: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9146: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9150: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec=
+	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+	link_all_deplibs=no
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec='$convenience'
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld='+b $libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+	pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11530 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11626 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+GST_REQ=0.11.1
+
+
+
+
+# Check whether --with-autoconf was given.
+if test "${with_autoconf+set}" = set; then :
+  withval=$with_autoconf;
+      unset AUTOCONF
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}${withval}"}
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Using $AUTOCONF as autoconf" >&5
+$as_echo "$as_me: Using $AUTOCONF as autoconf" >&6;}
+
+fi
+
+
+
+# Check whether --with-autoheader was given.
+if test "${with_autoheader+set}" = set; then :
+  withval=$with_autoheader;
+      unset AUTOHEADER
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}${withval}"}
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Using $AUTOHEADER as autoheader" >&5
+$as_echo "$as_me: Using $AUTOHEADER as autoheader" >&6;}
+
+fi
+
+
+
+# Check whether --with-automake was given.
+if test "${with_automake+set}" = set; then :
+  withval=$with_automake;
+      unset AUTOMAKE
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}${withval}"}
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Using $AUTOMAKE as automake" >&5
+$as_echo "$as_me: Using $AUTOMAKE as automake" >&6;}
+
+fi
+
+
+
+# Check whether --with-aclocal was given.
+if test "${with_aclocal+set}" = set; then :
+  withval=$with_aclocal;
+      unset ACLOCAL
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}${withval}"}
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Using $ACLOCAL as aclocal" >&5
+$as_echo "$as_me: Using $ACLOCAL as aclocal" >&6;}
+
+fi
+
+
+
+ACLOCAL_AMFLAGS="-I m4 -I common/m4"
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+      GETTEXT_MACRO_VERSION=0.17
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+    rm -f messages.po
+
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+        test -n "$localedir" || localedir='${datadir}/locale'
+
+
+    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+  ac_config_commands="$ac_config_commands po-directories"
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break ;;
+      *)
+	test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS= 	}"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBICONV_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+  fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gt_cv_func_CFLocaleCopyCurrent=yes
+else
+  gt_cv_func_CFLocaleCopyCurrent=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+
+
+
+
+
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval "test \"\${$gt_func_gnugettext_libc+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if test "${am_cv_func_iconv_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+            am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  am_cv_func_iconv_works=yes
+else
+  am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then :
+  withval=$with_libintl_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  LIBINTL_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='intl '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+              else
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBINTL_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+            LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval "test \"\${$gt_func_gnugettext_libintl+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$gt_func_gnugettext_libintl=yes"
+else
+  eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+      fi
+
+
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+    fi
+
+        POSUB=po
+  fi
+
+
+
+    INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+  if test "$USE_NLS" = "yes"; then
+    GETTEXT_PACKAGE=gst-plugins-base-$GST_MAJORMINOR
+  else
+    GETTEXT_PACKAGE=NULL
+  fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
+_ACEOF
+
+
+
+  EXP_VAR=LOCALEDIR
+  FROM_VAR=$datadir/locale
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix="$ac_default_prefix"
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var" = "x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  LOCALEDIR="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+cat >>confdefs.h <<_ACEOF
+#define LOCALEDIR "$LOCALEDIR"
+_ACEOF
+
+
+
+
+
+    # Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+  enableval=$enable_debug;
+      case "${enableval}" in
+        yes) USE_DEBUG=yes ;;
+        no)  USE_DEBUG=no ;;
+        *)   as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5  ;;
+      esac
+
+else
+  USE_DEBUG=yes
+fi
+
+
+  # Check whether --enable-profiling was given.
+if test "${enable_profiling+set}" = set; then :
+  enableval=$enable_profiling;
+      case "${enableval}" in
+        yes) USE_PROFILING=yes ;;
+        no)  USE_PROFILING=no ;;
+        *)   as_fn_error $? "bad value ${enableval} for --enable-profiling" "$LINENO" 5  ;;
+      esac
+
+else
+  USE_PROFILING=no
+fi
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+
+fi
+
+    # Check whether --enable-valgrind was given.
+if test "${enable_valgrind+set}" = set; then :
+  enableval=$enable_valgrind;
+      case "${enableval}" in
+        yes) USE_VALGRIND="$USE_DEBUG" ;;
+        no)  USE_VALGRIND=no ;;
+        *)   as_fn_error $? "bad value ${enableval} for --enable-valgrind" "$LINENO" 5  ;;
+      esac
+
+else
+  USE_VALGRIND="$USE_DEBUG"
+fi
+   VALGRIND_REQ="3.0"
+  if test "x$USE_VALGRIND" = xyes; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VALGRIND" >&5
+$as_echo_n "checking for VALGRIND... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VALGRIND_CFLAGS"; then
+        pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind >= $VALGRIND_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VALGRIND_LIBS"; then
+        pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind >= \$VALGRIND_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind >= $VALGRIND_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind >= $VALGRIND_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"`
+        else
+	        VALGRIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "valgrind >= $VALGRIND_REQ"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$VALGRIND_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                USE_VALGRIND="no"
+elif test $pkg_failed = untried; then
+	USE_VALGRIND="no"
+else
+	VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS
+	VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	USE_VALGRIND="yes"
+fi
+  fi
+  if test "x$USE_VALGRIND" = xyes; then
+
+$as_echo "#define HAVE_VALGRIND 1" >>confdefs.h
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Using extra code paths for valgrind" >&5
+$as_echo "$as_me: Using extra code paths for valgrind" >&6;}
+  fi
+
+
+  # Check whether --enable-gcov was given.
+if test "${enable_gcov+set}" = set; then :
+  enableval=$enable_gcov; enable_gcov=$enableval
+else
+  enable_gcov=no
+fi
+
+  if test x$enable_gcov = xyes ; then
+    if test "x$GCC" != "xyes"
+    then
+      as_fn_error $? "gcov only works if gcc is used" "$LINENO" 5
+    fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-fprofile-arcs\"" >&5
+$as_echo_n "checking to see if compiler understands \"-fprofile-arcs\"... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS "-fprofile-arcs""
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    GCOV_CFLAGS="$GCOV_CFLAGS -fprofile-arcs"
+    true
+  else
+    true
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands \"-ftest-coverage\"" >&5
+$as_echo_n "checking to see if compiler understands \"-ftest-coverage\"... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS "-ftest-coverage""
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    GCOV_CFLAGS="$GCOV_CFLAGS -ftest-coverage"
+    true
+  else
+    true
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+        GCOV_CFLAGS=`echo "$GCOV_CFLAGS" | sed -e 's/-O[0-9]*//g'`
+                GCOV_LIBS=-lgcov
+
+
+    GCOV=`echo $CC | sed s/gcc/gcov/g`
+
+
+    GST_GCOV_ENABLED=yes
+
+cat >>confdefs.h <<_ACEOF
+#define GST_GCOV_ENABLED 1
+_ACEOF
+
+        if test "x$GST_GCOV_ENABLED" = "xyes"
+    then
+      CFLAGS="-O0"
+
+      CXXFLAGS="-O0"
+
+      FFLAGS="-O0"
+
+      CCASFLAGS="-O0"
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&5
+$as_echo "$as_me: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&6;}
+    fi
+  fi
+   if test x$enable_gcov = xyes; then
+  GST_GCOV_ENABLED_TRUE=
+  GST_GCOV_ENABLED_FALSE='#'
+else
+  GST_GCOV_ENABLED_TRUE='#'
+  GST_GCOV_ENABLED_FALSE=
+fi
+
+
+
+
+  # Check whether --enable-examples was given.
+if test "${enable_examples+set}" = set; then :
+  enableval=$enable_examples;
+        case "${enableval}" in
+          yes) BUILD_EXAMPLES=yes ;;
+          no)  BUILD_EXAMPLES=no ;;
+          *)   as_fn_error $? "bad value ${enableval} for --disable-examples" "$LINENO" 5  ;;
+        esac
+
+else
+  BUILD_EXAMPLES=yes
+fi
+    if test "x$BUILD_EXAMPLES" = "xyes"; then
+  BUILD_EXAMPLES_TRUE=
+  BUILD_EXAMPLES_FALSE='#'
+else
+  BUILD_EXAMPLES_TRUE='#'
+  BUILD_EXAMPLES_FALSE=
+fi
+
+
+
+
+
+# Check whether --with-pkg-config-path was given.
+if test "${with_pkg_config_path+set}" = set; then :
+  withval=$with_pkg_config_path;
+       export PKG_CONFIG_PATH=${withval}
+       { $as_echo "$as_me:${as_lineno-$LINENO}: Set PKG_CONFIG_PATH to $PKG_CONFIG_PATH" >&5
+$as_echo "$as_me: Set PKG_CONFIG_PATH to $PKG_CONFIG_PATH" >&6;}
+
+fi
+
+
+
+
+# Check whether --with-package-name was given.
+if test "${with_package_name+set}" = set; then :
+  withval=$with_package_name;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-package-name" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-package-name" "$LINENO" 5  ;;
+        *)   GST_PACKAGE_NAME="${withval}" ;;
+      esac
+
+else
+
+      P=
+      if test "x$P" = "x"
+      then
+        P=$PACKAGE_NAME
+      fi
+
+      if test "x$PACKAGE_VERSION_NANO" = "x0"
+      then
+        GST_PACKAGE_NAME="$P source release"
+      else
+        if test "x$PACKAGE_VERSION_NANO" = "x1"
+        then
+          GST_PACKAGE_NAME="$P git"
+        else
+          GST_PACKAGE_NAME="$P prerelease"
+        fi
+      fi
+
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $GST_PACKAGE_NAME as package name" >&5
+$as_echo "$as_me: Using $GST_PACKAGE_NAME as package name" >&6;}
+
+cat >>confdefs.h <<_ACEOF
+#define GST_PACKAGE_NAME "$GST_PACKAGE_NAME"
+_ACEOF
+
+
+
+
+
+# Check whether --with-package-origin was given.
+if test "${with_package_origin+set}" = set; then :
+  withval=$with_package_origin;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-package-origin" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-package-origin" "$LINENO" 5  ;;
+        *)   GST_PACKAGE_ORIGIN="${withval}" ;;
+      esac
+
+else
+  GST_PACKAGE_ORIGIN="Unknown package origin"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $GST_PACKAGE_ORIGIN as package origin" >&5
+$as_echo "$as_me: Using $GST_PACKAGE_ORIGIN as package origin" >&6;}
+
+cat >>confdefs.h <<_ACEOF
+#define GST_PACKAGE_ORIGIN "$GST_PACKAGE_ORIGIN"
+_ACEOF
+
+
+
+
+
+  GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig"
+  if test "x$PKG_CONFIG_PATH" != "x"; then
+    GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH"
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&5
+$as_echo "$as_me: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&6;}
+
+
+
+# Check whether --with-install-plugins-helper was given.
+if test "${with_install_plugins_helper+set}" = set; then :
+  withval=$with_install_plugins_helper;
+    case "${withval}" in
+      yes) as_fn_error $? "bad value ${withval} for --with-install-plugins-helper" "$LINENO" 5  ;;
+      no)  as_fn_error $? "bad value ${withval} for --with-install-plugins-helper" "$LINENO" 5  ;;
+      *)   GST_INSTALL_PLUGINS_HELPER="${withval}" ;;
+    esac
+
+else
+
+
+  EXP_VAR=GST_INSTALL_PLUGINS_HELPER
+  FROM_VAR=${libexecdir}/gst-install-plugins-helper
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix="$ac_default_prefix"
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var" = "x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  GST_INSTALL_PLUGINS_HELPER="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Using $GST_INSTALL_PLUGINS_HELPER as plugin install helper" >&5
+$as_echo "$as_me: Using $GST_INSTALL_PLUGINS_HELPER as plugin install helper" >&6;}
+
+cat >>confdefs.h <<_ACEOF
+#define GST_INSTALL_PLUGINS_HELPER "$GST_INSTALL_PLUGINS_HELPER"
+_ACEOF
+
+
+
+
+
+# Check whether --with-plugins was given.
+if test "${with_plugins+set}" = set; then :
+  withval=$with_plugins; WITH_PLUGINS=$withval
+else
+  WITH_PLUGINS=
+fi
+
+
+  GST_PLUGINS_ALL=""
+  GST_PLUGINS_SELECTED=""
+  GST_PLUGINS_NONPORTED=""
+
+
+
+
+
+
+
+  echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: building of plug-ins with external deps ***" >&5
+$as_echo "$as_me: *** checking feature: building of plug-ins with external deps ***" >&6;}
+if test "x" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:  ***" >&5
+$as_echo "$as_me: *** for plug-ins:  ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_EXTERNAL" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-external was given.
+if test "${enable_external+set}" = set; then :
+  enableval=$enable_external;  case "${enableval}" in
+      yes) USE_EXTERNAL=yes;;
+      no) USE_EXTERNAL=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-external" "$LINENO" 5  ;;
+    esac
+else
+   USE_EXTERNAL=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_EXTERNAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: ***  pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " EXTERNAL " > /dev/null; then
+  USE_EXTERNAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  not ported" >&5
+$as_echo "$as_me: WARNING: ***  not ported" >&2;}
+fi
+
+
+if test x$USE_EXTERNAL = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_EXTERNAL=no
+    HAVE_EXTERNAL=yes
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_EXTERNAL = xno; then
+    USE_EXTERNAL=no
+  else
+    :
+  fi
+fi
+if test x$USE_EXTERNAL = xyes; then
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: building external plug-ins" >&5
+$as_echo "$as_me: building external plug-ins" >&6;}
+      BUILD_EXTERNAL="yes"
+
+  if test "x" != "x"; then
+    GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_EXTERNAL /**/" >>confdefs.h
+
+else
+  :
+  if test "x" != "x"; then
+    GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO"
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: all plug-ins with external dependencies will not be built" >&5
+$as_echo "$as_me: WARNING: all plug-ins with external dependencies will not be built" >&2;}
+      BUILD_EXTERNAL="no"
+
+fi
+ if test x$USE_EXTERNAL = xyes; then
+  USE_EXTERNAL_TRUE=
+  USE_EXTERNAL_FALSE='#'
+else
+  USE_EXTERNAL_TRUE='#'
+  USE_EXTERNAL_FALSE=
+fi
+
+
+  # make BUILD_EXTERNAL available to Makefile.am
+   if test "x$BUILD_EXTERNAL" = "xyes"; then
+  BUILD_EXTERNAL_TRUE=
+  BUILD_EXTERNAL_FALSE='#'
+else
+  BUILD_EXTERNAL_TRUE='#'
+  BUILD_EXTERNAL_FALSE=
+fi
+
+
+
+
+  echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: building of experimental plug-ins ***" >&5
+$as_echo "$as_me: *** checking feature: building of experimental plug-ins ***" >&6;}
+if test "x" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:  ***" >&5
+$as_echo "$as_me: *** for plug-ins:  ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_EXPERIMENTAL" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-experimental was given.
+if test "${enable_experimental+set}" = set; then :
+  enableval=$enable_experimental;  case "${enableval}" in
+      yes) USE_EXPERIMENTAL=yes;;
+      no) USE_EXPERIMENTAL=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-experimental" "$LINENO" 5  ;;
+    esac
+else
+   USE_EXPERIMENTAL=no
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_EXPERIMENTAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: ***  pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " EXPERIMENTAL " > /dev/null; then
+  USE_EXPERIMENTAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  not ported" >&5
+$as_echo "$as_me: WARNING: ***  not ported" >&2;}
+fi
+
+
+if test x$USE_EXPERIMENTAL = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_EXPERIMENTAL=no
+    HAVE_EXPERIMENTAL=yes
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_EXPERIMENTAL = xno; then
+    USE_EXPERIMENTAL=no
+  else
+    :
+  fi
+fi
+if test x$USE_EXPERIMENTAL = xyes; then
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: building experimental plug-ins" >&5
+$as_echo "$as_me: WARNING: building experimental plug-ins" >&2;}
+      BUILD_EXPERIMENTAL="yes"
+
+  if test "x" != "x"; then
+    GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_EXPERIMENTAL /**/" >>confdefs.h
+
+else
+  :
+  if test "x" != "x"; then
+    GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO"
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: not building experimental plug-ins" >&5
+$as_echo "$as_me: not building experimental plug-ins" >&6;}
+      BUILD_EXPERIMENTAL="no"
+
+fi
+ if test x$USE_EXPERIMENTAL = xyes; then
+  USE_EXPERIMENTAL_TRUE=
+  USE_EXPERIMENTAL_FALSE='#'
+else
+  USE_EXPERIMENTAL_TRUE='#'
+  USE_EXPERIMENTAL_FALSE=
+fi
+
+
+  # make BUILD_EXPERIMENTAL available to Makefile.am
+   if test "x$BUILD_EXPERIMENTAL" = "xyes"; then
+  BUILD_EXPERIMENTAL_TRUE=
+  BUILD_EXPERIMENTAL_FALSE='#'
+else
+  BUILD_EXPERIMENTAL_TRUE='#'
+  BUILD_EXPERIMENTAL_FALSE=
+fi
+
+
+
+
+
+
+
+    case "x${host_cpu}" in
+    xi?86 | xk? | xi?86_64)
+      case $host_os in
+         solaris*)
+            ac_fn_c_check_decl "$LINENO" "__i386" "ac_cv_have_decl___i386" "$ac_includes_default"
+if test "x$ac_cv_have_decl___i386" = x""yes; then :
+  I386_ABI="yes"
+else
+  I386_ABI="no"
+fi
+
+            ac_fn_c_check_decl "$LINENO" "__amd64" "ac_cv_have_decl___amd64" "$ac_includes_default"
+if test "x$ac_cv_have_decl___amd64" = x""yes; then :
+  AMD64_ABI="yes"
+else
+  AMD64_ABI="no"
+fi
+
+
+            if test "x$I386_ABI" = "xyes" ; then
+               HAVE_CPU_I386=yes
+
+$as_echo "#define HAVE_CPU_I386 1" >>confdefs.h
+
+            fi
+            if test "x$AMD64_ABI" = "xyes" ; then
+                HAVE_CPU_X86_64=yes
+
+$as_echo "#define HAVE_CPU_X86_64 1" >>confdefs.h
+
+            fi
+            ;;
+         *)
+            HAVE_CPU_I386=yes
+
+$as_echo "#define HAVE_CPU_I386 1" >>confdefs.h
+
+
+                                    case "x${host_cpu}" in
+              xi386 | xi486) ;;
+            *)
+
+$as_echo "#define HAVE_RDTSC 1" >>confdefs.h
+ ;;
+            esac
+            ;;
+      esac
+      ;;
+    xpowerpc)
+      HAVE_CPU_PPC=yes
+
+$as_echo "#define HAVE_CPU_PPC 1" >>confdefs.h
+ ;;
+    xpowerpc64)
+      HAVE_CPU_PPC64=yes
+
+$as_echo "#define HAVE_CPU_PPC64 1" >>confdefs.h
+ ;;
+    xalpha*)
+      HAVE_CPU_ALPHA=yes
+
+$as_echo "#define HAVE_CPU_ALPHA 1" >>confdefs.h
+ ;;
+    xarm*)
+      HAVE_CPU_ARM=yes
+
+$as_echo "#define HAVE_CPU_ARM 1" >>confdefs.h
+ ;;
+    xsparc*)
+      HAVE_CPU_SPARC=yes
+
+$as_echo "#define HAVE_CPU_SPARC 1" >>confdefs.h
+ ;;
+    xmips*)
+      HAVE_CPU_MIPS=yes
+
+$as_echo "#define HAVE_CPU_MIPS 1" >>confdefs.h
+ ;;
+    xhppa*)
+      HAVE_CPU_HPPA=yes
+
+$as_echo "#define HAVE_CPU_HPPA 1" >>confdefs.h
+ ;;
+    xs390*)
+      HAVE_CPU_S390=yes
+
+$as_echo "#define HAVE_CPU_S390 1" >>confdefs.h
+ ;;
+    xia64*)
+      HAVE_CPU_IA64=yes
+
+$as_echo "#define HAVE_CPU_IA64 1" >>confdefs.h
+ ;;
+    xm68k*)
+      HAVE_CPU_M68K=yes
+
+$as_echo "#define HAVE_CPU_M68K 1" >>confdefs.h
+ ;;
+    xx86_64)
+      HAVE_CPU_X86_64=yes
+
+$as_echo "#define HAVE_CPU_X86_64 1" >>confdefs.h
+ ;;
+    xcris)
+      HAVE_CPU_CRIS=yes
+
+$as_echo "#define HAVE_CPU_CRIS 1" >>confdefs.h
+ ;;
+    xcrisv32)
+      HAVE_CPU_CRISV32=yes
+
+$as_echo "#define HAVE_CPU_CRISV32 1" >>confdefs.h
+ ;;
+  esac
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5  ;;
+ esac
+
+
+   if test "x$HAVE_CPU_I386" = "xyes"; then
+  HAVE_CPU_I386_TRUE=
+  HAVE_CPU_I386_FALSE='#'
+else
+  HAVE_CPU_I386_TRUE='#'
+  HAVE_CPU_I386_FALSE=
+fi
+
+   if test "x$HAVE_CPU_PPC" = "xyes"; then
+  HAVE_CPU_PPC_TRUE=
+  HAVE_CPU_PPC_FALSE='#'
+else
+  HAVE_CPU_PPC_TRUE='#'
+  HAVE_CPU_PPC_FALSE=
+fi
+
+   if test "x$HAVE_CPU_PPC64" = "xyes"; then
+  HAVE_CPU_PPC64_TRUE=
+  HAVE_CPU_PPC64_FALSE='#'
+else
+  HAVE_CPU_PPC64_TRUE='#'
+  HAVE_CPU_PPC64_FALSE=
+fi
+
+   if test "x$HAVE_CPU_ALPHA" = "xyes"; then
+  HAVE_CPU_ALPHA_TRUE=
+  HAVE_CPU_ALPHA_FALSE='#'
+else
+  HAVE_CPU_ALPHA_TRUE='#'
+  HAVE_CPU_ALPHA_FALSE=
+fi
+
+   if test "x$HAVE_CPU_ARM" = "xyes"; then
+  HAVE_CPU_ARM_TRUE=
+  HAVE_CPU_ARM_FALSE='#'
+else
+  HAVE_CPU_ARM_TRUE='#'
+  HAVE_CPU_ARM_FALSE=
+fi
+
+   if test "x$HAVE_CPU_SPARC" = "xyes"; then
+  HAVE_CPU_SPARC_TRUE=
+  HAVE_CPU_SPARC_FALSE='#'
+else
+  HAVE_CPU_SPARC_TRUE='#'
+  HAVE_CPU_SPARC_FALSE=
+fi
+
+   if test "x$HAVE_CPU_HPPA" = "xyes"; then
+  HAVE_CPU_HPPA_TRUE=
+  HAVE_CPU_HPPA_FALSE='#'
+else
+  HAVE_CPU_HPPA_TRUE='#'
+  HAVE_CPU_HPPA_FALSE=
+fi
+
+   if test "x$HAVE_CPU_MIPS" = "xyes"; then
+  HAVE_CPU_MIPS_TRUE=
+  HAVE_CPU_MIPS_FALSE='#'
+else
+  HAVE_CPU_MIPS_TRUE='#'
+  HAVE_CPU_MIPS_FALSE=
+fi
+
+   if test "x$HAVE_CPU_S390" = "xyes"; then
+  HAVE_CPU_S390_TRUE=
+  HAVE_CPU_S390_FALSE='#'
+else
+  HAVE_CPU_S390_TRUE='#'
+  HAVE_CPU_S390_FALSE=
+fi
+
+   if test "x$HAVE_CPU_IA64" = "xyes"; then
+  HAVE_CPU_IA64_TRUE=
+  HAVE_CPU_IA64_FALSE='#'
+else
+  HAVE_CPU_IA64_TRUE='#'
+  HAVE_CPU_IA64_FALSE=
+fi
+
+   if test "x$HAVE_CPU_M68K" = "xyes"; then
+  HAVE_CPU_M68K_TRUE=
+  HAVE_CPU_M68K_FALSE='#'
+else
+  HAVE_CPU_M68K_TRUE='#'
+  HAVE_CPU_M68K_FALSE=
+fi
+
+   if test "x$HAVE_CPU_X86_64" = "xyes"; then
+  HAVE_CPU_X86_64_TRUE=
+  HAVE_CPU_X86_64_FALSE='#'
+else
+  HAVE_CPU_X86_64_TRUE='#'
+  HAVE_CPU_X86_64_FALSE=
+fi
+
+   if test "x$HAVE_CPU_CRIS" = "xyes"; then
+  HAVE_CPU_CRIS_TRUE=
+  HAVE_CPU_CRIS_FALSE='#'
+else
+  HAVE_CPU_CRIS_TRUE='#'
+  HAVE_CPU_CRIS_FALSE=
+fi
+
+   if test "x$HAVE_CPU_CRISV32" = "xyes"; then
+  HAVE_CPU_CRISV32_TRUE=
+  HAVE_CPU_CRISV32_FALSE='#'
+else
+  HAVE_CPU_CRISV32_TRUE='#'
+  HAVE_CPU_CRISV32_FALSE=
+fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HOST_CPU "$host_cpu"
+_ACEOF
+
+
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+   case $ac_cv_prog_cc_stdc in #(
+  no) :
+    ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if test "${ac_cv_prog_cc_c99+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case 's': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case 'd': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case 'f': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+	  || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_cv_prog_cc_stdc=no
+fi
+
+fi
+ ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
+  if test "${ac_cv_prog_cc_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+fi
+
+  case $ac_cv_prog_cc_stdc in #(
+  no) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;; #(
+  '') :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
+esac
+
+
+if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+	# cc works too.
+	:
+      else
+	# cc exists but doesn't like -o.
+	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+_lt_caught_CXX_error=yes; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec_CXX='$convenience'
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  whole_archive_flag_spec_CXX=''
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 will use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  xl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='echo'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=echo
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='echo'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC*)
+	    # IBM XL 8.0 on PPC
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | netbsdelf*-gnu)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:19037: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:19041: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:19136: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:19140: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:19188: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:19192: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs_CXX=no
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+	pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
+$as_echo "$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+ class Foo { int bar; };
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  working_cxx=yes
+else
+  working_cxx=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: working c++ compiler found: $working_cxx" >&5
+$as_echo "$as_me: working c++ compiler found: $working_cxx" >&6;}
+ if test "x$working_cxx" = "xyes"; then
+  HAVE_CXX_TRUE=
+  HAVE_CXX_FALSE='#'
+else
+  HAVE_CXX_TRUE='#'
+  HAVE_CXX_FALSE=
+fi
+
+
+# Extract the first word of "valgrind", so it can be a program name with args.
+set dummy valgrind; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_VALGRIND_PATH+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $VALGRIND_PATH in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_VALGRIND_PATH="$VALGRIND_PATH" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_VALGRIND_PATH="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_VALGRIND_PATH" && ac_cv_path_VALGRIND_PATH="no"
+  ;;
+esac
+fi
+VALGRIND_PATH=$ac_cv_path_VALGRIND_PATH
+if test -n "$VALGRIND_PATH"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND_PATH" >&5
+$as_echo "$VALGRIND_PATH" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! "x$VALGRIND_PATH" = "xno"; then
+  HAVE_VALGRIND_TRUE=
+  HAVE_VALGRIND_FALSE='#'
+else
+  HAVE_VALGRIND_TRUE='#'
+  HAVE_VALGRIND_FALSE=
+fi
+
+
+
+
+
+                # Check whether --enable-introspection was given.
+if test "${enable_introspection+set}" = set; then :
+  enableval=$enable_introspection;
+else
+  enable_introspection=auto
+fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5
+$as_echo_n "checking for gobject-introspection... " >&6; }
+
+        case $enable_introspection in #(
+  no) :
+            found_introspection="no (disabled, use --enable-introspection to enable)"
+     ;; #(
+      yes) :
+            if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  :
+else
+  as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5
+fi
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.9.12\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.9.12") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  found_introspection=yes
+else
+  as_fn_error $? "You need to have gobject-introspection >= 0.9.12 installed to build GStreamer Base Plug-ins" "$LINENO" 5
+fi
+     ;; #(
+      auto) :
+            if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.9.12\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.9.12") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  found_introspection=yes
+else
+  found_introspection=no
+fi
+     ;; #(
+  *) :
+                as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5
+     ;;
+esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5
+$as_echo "$found_introspection" >&6; }
+
+    INTROSPECTION_SCANNER=
+    INTROSPECTION_COMPILER=
+    INTROSPECTION_GENERATE=
+    INTROSPECTION_GIRDIR=
+    INTROSPECTION_TYPELIBDIR=
+    if test "x$found_introspection" = "xyes"; then
+       INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+       INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+       INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+       INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+       INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+    fi
+
+
+
+
+
+
+
+
+
+     if test "x$found_introspection" = "xyes"; then
+  HAVE_INTROSPECTION_TRUE=
+  HAVE_INTROSPECTION_FALSE='#'
+else
+  HAVE_INTROSPECTION_TRUE='#'
+  HAVE_INTROSPECTION_FALSE=
+fi
+
+
+
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then :
+  withval=$with_html_dir;
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi
+
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then :
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
+fi
+
+
+  if test x$enable_gtk_doc = xyes; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.3\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.3") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  :
+else
+  as_fn_error $? "You need to have gtk-doc >= 1.3 installed to build gtk-doc" "$LINENO" 5
+fi
+    if test -z "$SED"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+    fi
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
+  for ac_prog in gtkdoc-check
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_CHECK in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GTKDOC_CHECK" && break
+done
+
+
+   if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+   if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+
+
+
+    PYTHON_CANDIDATES="python python2.2 python2.1 python2.0 python2 \
+                     python1.6 python1.5"
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: Looking for Python version >= 2.1" >&5
+$as_echo "$as_me: Looking for Python version >= 2.1" >&6;}
+        prog="
+import sys, string
+minver = '2.1'
+# split string by '.' and convert to numeric
+minver_info = map(string.atoi, string.split(minver, '.'))
+# we can now do comparisons on the two lists:
+if sys.version_info >= tuple(minver_info):
+	sys.exit(0)
+else:
+	sys.exit(1)"
+
+    python_good=false
+    for python_candidate in $PYTHON_CANDIDATES; do
+      unset PYTHON
+      # Extract the first word of "$python_candidate", so it can be a program name with args.
+set dummy $python_candidate; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PYTHON+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ 1> /dev/null 2> /dev/null
+
+      if test "x$PYTHON" = "x"; then continue; fi
+
+      if $PYTHON -c "$prog" 1>&5 2>&5; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"$PYTHON\":" >&5
+$as_echo_n "checking \"$PYTHON\":... " >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: okay" >&5
+$as_echo "okay" >&6; }
+        python_good=true
+        break;
+      else
+                unset ac_cv_path_PYTHON
+      fi
+    done
+
+
+  if test "$python_good" != "true"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No suitable version of python found" >&5
+$as_echo "$as_me: WARNING: No suitable version of python found" >&2;}
+    PYTHON=
+  else
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking local Python configuration" >&5
+$as_echo_n "checking local Python configuration... " >&6; }
+
+
+
+    PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
+
+
+
+
+  PYTHON_PREFIX='${prefix}'
+
+
+  PYTHON_EXEC_PREFIX='${exec_prefix}'
+
+
+
+  PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
+
+
+
+
+
+  pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
+
+
+
+  pkgpythondir=\${pythondir}/$PACKAGE
+
+
+
+  pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
+
+
+
+  pkgpyexecdir=\${pyexecdir}/$PACKAGE
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: looks good" >&5
+$as_echo "looks good" >&6; }
+
+  fi
+
+
+
+  build_plugin_docs=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build plugin documentation" >&5
+$as_echo_n "checking whether to build plugin documentation... " >&6; }
+  if test x$enable_gtk_doc = xyes; then
+    build_plugin_docs=yes
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (gtk-doc disabled or not available)" >&5
+$as_echo "no (gtk-doc disabled or not available)" >&6; }
+  fi
+
+   if test x$build_plugin_docs = xyes; then
+  ENABLE_PLUGIN_DOCS_TRUE=
+  ENABLE_PLUGIN_DOCS_FALSE='#'
+else
+  ENABLE_PLUGIN_DOCS_TRUE='#'
+  ENABLE_PLUGIN_DOCS_FALSE=
+fi
+
+
+
+
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5
+$as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; }
+if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmw  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char _mwvalidcheckl ();
+int
+main ()
+{
+return _mwvalidcheckl ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mw__mwvalidcheckl=yes
+else
+  ac_cv_lib_mw__mwvalidcheckl=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5
+$as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; }
+if test "x$ac_cv_lib_mw__mwvalidcheckl" = x""yes; then :
+  LIBM="-lmw"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if test "${ac_cv_lib_m_cos+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cos ();
+int
+main ()
+{
+return cos ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_cos=yes
+else
+  ac_cv_lib_m_cos=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = x""yes; then :
+  LIBM="$LIBM -lm"
+fi
+
+  ;;
+*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5
+$as_echo_n "checking for cos in -lm... " >&6; }
+if test "${ac_cv_lib_m_cos+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cos ();
+int
+main ()
+{
+return cos ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_cos=yes
+else
+  ac_cv_lib_m_cos=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5
+$as_echo "$ac_cv_lib_m_cos" >&6; }
+if test "x$ac_cv_lib_m_cos" = x""yes; then :
+  LIBM="-lm"
+fi
+
+  ;;
+esac
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+ac_cppflags_save="$CPPFLAGS"
+CPPFLAGS="`$PKG_CONFIG --cflags libxml-2.0`"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <libxml/HTMLparser.h>
+
+int
+main ()
+{
+
+#ifndef LIBXML_HTML_ENABLED
+#error libxml2 has no HTML support
+#endif /* LIBXML_HTML_ENABLED */
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  HAVE_LIBXML_HTML="yes"
+else
+  HAVE_LIBXML_HTML="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CPPFLAGS="$ac_cppflags_save"
+ if test "x$HAVE_LIBXML_HTML" = "xyes"; then
+  HAVE_LIBXML_HTML_TRUE=
+  HAVE_LIBXML_HTML_FALSE='#'
+else
+  HAVE_LIBXML_HTML_TRUE='#'
+  HAVE_LIBXML_HTML_FALSE=
+fi
+
+
+for ac_header in sys/socket.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_SOCKET_H 1
+_ACEOF
+ HAVE_SYS_SOCKET_H="yes"
+else
+  HAVE_SYS_SOCKET_H="no"
+fi
+
+done
+
+ if test "x$HAVE_SYS_SOCKET_H" = "xyes"; then
+  HAVE_SYS_SOCKET_H_TRUE=
+  HAVE_SYS_SOCKET_H_FALSE='#'
+else
+  HAVE_SYS_SOCKET_H_TRUE='#'
+  HAVE_SYS_SOCKET_H_FALSE=
+fi
+
+
+for ac_header in winsock2.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_WINSOCK2_H 1
+_ACEOF
+ HAVE_WINSOCK2_H=yes
+fi
+
+done
+
+if test "x$HAVE_WINSOCK2_H" = "xyes"; then
+  WIN32_LIBS="-lws2_32"
+
+fi
+
+save_libs="$LIBS"
+ac_fn_c_check_func "$LINENO" "hstrerror" "ac_cv_func_hstrerror"
+if test "x$ac_cv_func_hstrerror" = x""yes; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hstrerror in -lresolv" >&5
+$as_echo_n "checking for hstrerror in -lresolv... " >&6; }
+if test "${ac_cv_lib_resolv_hstrerror+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolv  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char hstrerror ();
+int
+main ()
+{
+return hstrerror ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_resolv_hstrerror=yes
+else
+  ac_cv_lib_resolv_hstrerror=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_hstrerror" >&5
+$as_echo "$ac_cv_lib_resolv_hstrerror" >&6; }
+if test "x$ac_cv_lib_resolv_hstrerror" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRESOLV 1
+_ACEOF
+
+  LIBS="-lresolv $LIBS"
+
+else
+
+$as_echo "#define NO_HSTRERROR 1" >>confdefs.h
+
+fi
+
+fi
+
+HSTRERROR_LIBS=$LIBS
+
+LIBS="$save_libs"
+
+for ac_header in process.h sys/types.h sys/wait.h sys/stat.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# ------ AX CREATE STDINT H -------------------------------------
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5
+$as_echo_n "checking for stdint types... " >&6; }
+ac_stdint_h=`echo _stdint.h`
+# try to shortcircuit - if the default include path of the compiler
+# can find a "stdint.h" header then we assume that all compilers can.
+if test "${ac_cv_header_stdint_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS=""
+old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS=""
+old_CFLAGS="$CFLAGS"     ; CFLAGS=""
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+int
+main ()
+{
+int_least32_t v = 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_stdint_result="(assuming C99 compatible system)"
+ ac_cv_header_stdint_t="stdint.h";
+else
+  ac_cv_header_stdint_t=""
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then
+CFLAGS="-std=c99"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+int
+main ()
+{
+int_least32_t v = 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&5
+$as_echo "$as_me: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&2;}
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+CXXFLAGS="$old_CXXFLAGS"
+CPPFLAGS="$old_CPPFLAGS"
+CFLAGS="$old_CFLAGS"
+fi
+
+
+v="... $ac_cv_header_stdint_h"
+if test "$ac_stdint_h" = "stdint.h" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./stdint.h?)" >&5
+$as_echo "(are you sure you want them in ./stdint.h?)" >&6; }
+elif test "$ac_stdint_h" = "inttypes.h" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./inttypes.h?)" >&5
+$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; }
+elif test "_$ac_cv_header_stdint_t" = "_" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: (putting them into $ac_stdint_h)$v" >&5
+$as_echo "(putting them into $ac_stdint_h)$v" >&6; }
+else
+ ac_cv_header_stdint="$ac_cv_header_stdint_t"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint (shortcircuit)" >&5
+$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; }
+fi
+
+if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit..
+
+
+inttype_headers=`echo  | sed -e 's/,/ /g'`
+
+ac_cv_stdint_result="(no helpful system typedefs seen)"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5
+$as_echo_n "checking for stdint uintptr_t... " >&6; }
+if test "${ac_cv_header_stdint_x+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+ ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
+$as_echo "(..)" >&6; }
+  for i in    stdint.h inttypes.h sys/inttypes.h $inttype_headers
+  do
+   unset ac_cv_type_uintptr_t
+   unset ac_cv_type_uint64_t
+   ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i>
+"
+if test "x$ac_cv_type_uintptr_t" = x""yes; then :
+  ac_cv_header_stdint_x=$i
+else
+  continue
+fi
+
+   ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i>
+"
+if test "x$ac_cv_type_uint64_t" = x""yes; then :
+  and64="/uint64_t"
+else
+  and64=""
+fi
+
+   ac_cv_stdint_result="(seen uintptr_t$and64 in $i)"
+ break
+  done
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5
+$as_echo_n "checking for stdint uintptr_t... " >&6; }
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5
+$as_echo "$ac_cv_header_stdint_x" >&6; }
+
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5
+$as_echo_n "checking for stdint uint32_t... " >&6; }
+if test "${ac_cv_header_stdint_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+ ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
+$as_echo "(..)" >&6; }
+  for i in    inttypes.h sys/inttypes.h stdint.h $inttype_headers
+  do
+   unset ac_cv_type_uint32_t
+   unset ac_cv_type_uint64_t
+   ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i>
+"
+if test "x$ac_cv_type_uint32_t" = x""yes; then :
+  ac_cv_header_stdint_o=$i
+else
+  continue
+fi
+
+   ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i>
+"
+if test "x$ac_cv_type_uint64_t" = x""yes; then :
+  and64="/uint64_t"
+else
+  and64=""
+fi
+
+   ac_cv_stdint_result="(seen uint32_t$and64 in $i)"
+ break
+   break;
+  done
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5
+$as_echo_n "checking for stdint uint32_t... " >&6; }
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5
+$as_echo "$ac_cv_header_stdint_o" >&6; }
+
+fi
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+if test "_$ac_cv_header_stdint_o" = "_" ; then
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5
+$as_echo_n "checking for stdint u_int32_t... " >&6; }
+if test "${ac_cv_header_stdint_u+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+ ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
+$as_echo "(..)" >&6; }
+  for i in    sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do
+   unset ac_cv_type_u_int32_t
+   unset ac_cv_type_u_int64_t
+   ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i>
+"
+if test "x$ac_cv_type_u_int32_t" = x""yes; then :
+  ac_cv_header_stdint_u=$i
+else
+  continue
+fi
+
+   ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i>
+"
+if test "x$ac_cv_type_u_int64_t" = x""yes; then :
+  and64="/u_int64_t"
+else
+  and64=""
+fi
+
+   ac_cv_stdint_result="(seen u_int32_t$and64 in $i)"
+ break
+   break;
+  done
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5
+$as_echo_n "checking for stdint u_int32_t... " >&6; }
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5
+$as_echo "$ac_cv_header_stdint_u" >&6; }
+
+fi fi
+
+if test "_$ac_cv_header_stdint_x" = "_" ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint datatype model" >&5
+$as_echo_n "checking for stdint datatype model... " >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5
+$as_echo "(..)" >&6; }
+
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
+$as_echo_n "checking size of char... " >&6; }
+if test "${ac_cv_sizeof_char+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_char" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (char)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_char=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
+$as_echo "$ac_cv_sizeof_char" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+$as_echo_n "checking size of short... " >&6; }
+if test "${ac_cv_sizeof_short+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_short" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (short)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_short=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+$as_echo "$ac_cv_sizeof_short" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5
+$as_echo_n "checking size of void*... " >&6; }
+if test "${ac_cv_sizeof_voidp+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_voidp" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void*)
+See \`config.log' for more details" "$LINENO" 5 ; }
+   else
+     ac_cv_sizeof_voidp=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5
+$as_echo "$ac_cv_sizeof_voidp" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
+_ACEOF
+
+
+   ac_cv_char_data_model=""
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char"
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short"
+   ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int"
+   ac_cv_long_data_model=""
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int"
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long"
+   ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp"
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking data model" >&5
+$as_echo_n "checking data model... " >&6; }
+   case "$ac_cv_char_data_model/$ac_cv_long_data_model" in
+    122/242)     ac_cv_data_model="IP16"  ; n="standard 16bit machine" ;;
+    122/244)     ac_cv_data_model="LP32"  ; n="standard 32bit machine" ;;
+    122/*)       ac_cv_data_model="i16"   ; n="unusual int16 model" ;;
+    124/444)     ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;;
+    124/488)     ac_cv_data_model="LP64"  ; n="standard 64bit unixish" ;;
+    124/448)     ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;;
+    124/*)       ac_cv_data_model="i32"   ; n="unusual int32 model" ;;
+    128/888)     ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;;
+    128/*)       ac_cv_data_model="i64"   ; n="unusual int64 model" ;;
+    222/*2)      ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;;
+    333/*3)      ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;;
+    444/*4)      ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;;
+    666/*6)      ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;;
+    888/*8)      ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;;
+    222/*|333/*|444/*|666/*|888/*) :
+                 ac_cv_data_model="iDSP"  ; n="unusual dsptype" ;;
+     *)          ac_cv_data_model="none"  ; n="very unusual model" ;;
+   esac
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5
+$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; }
+
+fi
+
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_x"
+elif  test "_$ac_cv_header_stdint_o" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_o"
+elif  test "_$ac_cv_header_stdint_u" != "_" ; then
+   ac_cv_header_stdint="$ac_cv_header_stdint_u"
+else
+   ac_cv_header_stdint="stddef.h"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra inttypes in chosen header" >&5
+$as_echo_n "checking for extra inttypes in chosen header... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ($ac_cv_header_stdint)" >&5
+$as_echo "($ac_cv_header_stdint)" >&6; }
+unset ac_cv_type_int_least32_t
+unset ac_cv_type_int_fast32_t
+ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint>
+"
+if test "x$ac_cv_type_int_least32_t" = x""yes; then :
+
+fi
+
+ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint>
+"
+if test "x$ac_cv_type_int_fast32_t" = x""yes; then :
+
+fi
+
+ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint>
+"
+if test "x$ac_cv_type_intmax_t" = x""yes; then :
+
+fi
+
+
+fi # shortcircut to system "stdint.h"
+# ------------------ PREPARE VARIABLES ------------------------------
+if test "$GCC" = "yes" ; then
+ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1`
+else
+ac_cv_stdint_message="using $CC"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5
+$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; }
+
+# ----------------- DONE inttypes.h checks START header -------------
+ac_config_commands="$ac_config_commands $ac_stdint_h"
+
+
+
+for ac_func in localtime_r gmtime_r
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+LIBS_SAVE=$LIBS
+LIBS="$LIBS $LIBM"
+for ac_func in log2
+do :
+  ac_fn_c_check_func "$LINENO" "log2" "ac_cv_func_log2"
+if test "x$ac_cv_func_log2" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LOG2 1
+_ACEOF
+
+fi
+done
+
+LIBS=$LIBS_SAVE
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5
+$as_echo_n "checking for FIONREAD in sys/ioctl.h... " >&6; }
+  if test "${_cv_gst_fionread_in_sys_ioctl+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+int
+main ()
+{
+
+int x = FIONREAD;
+if ( x )
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  _cv_gst_fionread_in_sys_ioctl="yes"
+else
+  _cv_gst_fionread_in_sys_ioctl="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gst_fionread_in_sys_ioctl" >&5
+$as_echo "$_cv_gst_fionread_in_sys_ioctl" >&6; }
+
+  if test "$_cv_gst_fionread_in_sys_ioctl" = "yes"; then
+
+$as_echo "#define HAVE_FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h
+
+
+  else
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/filio.h" >&5
+$as_echo_n "checking for FIONREAD in sys/filio.h... " >&6; }
+    if test "${_cv_gst_fionread_in_sys_filio+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #include <sys/types.h>
+  #include <sys/filio.h>
+
+int
+main ()
+{
+
+  int x = FIONREAD;
+  if ( x )
+    return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  _cv_gst_fionread_in_sys_filio="yes"
+else
+  _cv_gst_fionread_in_sys_filio="no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gst_fionread_in_sys_filio" >&5
+$as_echo "$_cv_gst_fionread_in_sys_filio" >&6; }
+
+    if test "$_cv_gst_fionread_in_sys_filio" = "yes"; then
+
+$as_echo "#define HAVE_FIONREAD_IN_SYS_FILIO 1" >>confdefs.h
+
+    fi
+
+  fi
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_source+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
+int
+main ()
+{
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_sys_largefile_source=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGEFILE_SOURCE 1
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
+int
+main ()
+{
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_sys_largefile_source=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  ac_cv_sys_largefile_source=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
+$as_echo "$ac_cv_sys_largefile_source" >&6; }
+case $ac_cv_sys_largefile_source in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
+_ACEOF
+;;
+esac
+rm -rf conftest*
+
+# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
+# in glibc 2.1.3, but that breaks too many other things.
+# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
+if test $ac_cv_sys_largefile_source != unknown; then
+
+$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h
+
+fi
+
+
+save_libs=$LIBS
+LIBS="$LIBS $LIBM"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lrint" >&5
+$as_echo_n "checking for lrint... " >&6; }
+if test "${ac_cv_c99_lrint+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define		_ISOC9X_SOURCE	1
+#define 	_ISOC99_SOURCE	1
+#define		__USE_ISOC99	1
+#define 	__USE_ISOC9X	1
+#include	<math.h>
+int
+main ()
+{
+	int value = lrint (0.432) ;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_c99_lrint=yes
+else
+  ac_cv_c99_lrint=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c99_lrint" >&5
+$as_echo "$ac_cv_c99_lrint" >&6; }
+if test $ac_cv_c99_lrint = yes; then
+
+$as_echo "#define HAVE_LRINT 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lrintf" >&5
+$as_echo_n "checking for lrintf... " >&6; }
+if test "${ac_cv_c99_lrintf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define		_ISOC9X_SOURCE	1
+#define 	_ISOC99_SOURCE	1
+#define		__USE_ISOC99	1
+#define 	__USE_ISOC9X	1
+#include	<math.h>
+int
+main ()
+{
+	int value = lrintf (0.432) ;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_c99_lrintf=yes
+else
+  ac_cv_c99_lrintf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c99_lrintf" >&5
+$as_echo "$ac_cv_c99_lrintf" >&6; }
+if test $ac_cv_c99_lrintf = yes; then
+
+$as_echo "#define HAVE_LRINTF 1" >>confdefs.h
+
+fi
+
+LIBS=$save_libs
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC implements __PRETTY_FUNCTION__" >&5
+$as_echo_n "checking whether $CC implements __PRETTY_FUNCTION__... " >&6; }
+  if test "${gst_cv_have_pretty_function+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+printf("%s", __PRETTY_FUNCTION__);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gst_cv_have_pretty_function=yes
+else
+  gst_cv_have_pretty_function=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gst_cv_have_pretty_function" >&5
+$as_echo "$gst_cv_have_pretty_function" >&6; }
+  if test "$gst_cv_have_pretty_function" = yes; then
+
+$as_echo "#define HAVE_PRETTY_FUNCTION 1" >>confdefs.h
+
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC implements __FUNCTION__" >&5
+$as_echo_n "checking whether $CC implements __FUNCTION__... " >&6; }
+  if test "${gst_cv_have_function+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+printf("%s", __FUNCTION__);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gst_cv_have_function=yes
+else
+  gst_cv_have_function=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gst_cv_have_function" >&5
+$as_echo "$gst_cv_have_function" >&6; }
+  if test "$gst_cv_have_function" = yes; then
+
+$as_echo "#define HAVE_FUNCTION 1" >>confdefs.h
+
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC implements __func__" >&5
+$as_echo_n "checking whether $CC implements __func__... " >&6; }
+  if test "${gst_cv_have_func+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+printf("%s", __func__);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gst_cv_have_func=yes
+else
+  gst_cv_have_func=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gst_cv_have_func" >&5
+$as_echo "$gst_cv_have_func" >&6; }
+  if test "$gst_cv_have_func" = yes; then
+
+$as_echo "#define HAVE_FUNC 1" >>confdefs.h
+
+  fi
+
+  if test "$gst_cv_have_pretty_function" = yes; then
+    function=__PRETTY_FUNCTION__
+  else
+    if test "$gst_cv_have_function" = yes; then
+      function=__FUNCTION__
+    else
+      if test "$gst_cv_have_func" = yes; then
+        function=__func__
+      else
+        function=\"\"
+      fi
+    fi
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define GST_FUNCTION $function
+_ACEOF
+
+
+
+ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket"
+if test "x$ac_cv_func_socket" = x""yes; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+$as_echo_n "checking for socket in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_socket+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_socket=yes
+else
+  ac_cv_lib_socket_socket=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+$as_echo "$ac_cv_lib_socket_socket" >&6; }
+if test "x$ac_cv_lib_socket_socket" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+
+fi
+
+ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+
+
+
+
+
+
+    GLIB_REQ=2.26
+  if test "x$GLIB_REQ" = "x"
+  then
+    as_fn_error $? "Please specify a required version for GLib 2.0" "$LINENO" 5
+  fi
+
+
+
+  which="glib-2.0 >= $GLIB_REQ gobject-2.0 gthread-2.0 gmodule-no-export-2.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
+$as_echo_n "checking for GLIB... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLIB_CFLAGS"; then
+        pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLIB_LIBS"; then
+        pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLIB_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GLIB="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GLIB_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GLIB_PKG_ERRORS" >&5
+$as_echo "$as_me: $GLIB_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GLIB="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GLIB_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GLIB_PKG_ERRORS" >&5
+$as_echo "$as_me: $GLIB_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+	GLIB_LIBS=$pkg_cv_GLIB_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GLIB="yes"
+
+fi
+
+
+
+  if test "x$HAVE_GLIB" = "xno"; then
+    as_fn_error $? "This package requires GLib >= $GLIB_REQ to compile." "$LINENO" 5
+  fi
+
+        GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY"
+
+    if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED"
+  fi
+
+  # Check whether --enable-gobject-cast-checks was given.
+if test "${enable_gobject_cast_checks+set}" = set; then :
+  enableval=$enable_gobject_cast_checks;
+else
+  enable_gobject_cast_checks=auto
+fi
+
+
+  if test "x$enable_gobject_cast_checks" = "xauto"; then
+        if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+      enable_gobject_cast_checks=yes
+    else
+      enable_gobject_cast_checks=no
+    fi
+  fi
+
+  if test "x$enable_gobject_cast_checks" = "xno"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_CAST_CHECKS"
+  fi
+
+  # Check whether --enable-glib-asserts was given.
+if test "${enable_glib_asserts+set}" = set; then :
+  enableval=$enable_glib_asserts;
+else
+  enable_glib_assertions=auto
+fi
+
+
+  if test "x$enable_glib_assertions" = "xauto"; then
+        if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+      enable_glib_assertions=yes
+    else
+      enable_glib_assertions=no
+    fi
+  fi
+
+  if test "x$enable_glib_assertions" = "xno"; then
+    GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
+  fi
+
+
+  GIVEN_CFLAGS=$GLIB_CFLAGS
+  INCLUDE_DIRS=`echo | cpp -v 2>&1`
+
+      INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'`
+  for dir in $INCLUDE_DIRS; do
+        GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"`
+  done
+  GLIB_CFLAGS=$GIVEN_CFLAGS
+
+
+
+
+  ORC_REQ=0.4.11
+
+  # Check whether --enable-orc was given.
+if test "${enable_orc+set}" = set; then :
+  enableval=$enable_orc; case "${enableval}" in
+    auto) enable_orc=auto ;;
+    yes) enable_orc=yes ;;
+    no)  enable_orc=no ;;
+    *) as_fn_error $? "bad value ${enableval} for --enable-orc" "$LINENO" 5  ;;
+  esac
+
+else
+  enable_orc=auto
+fi
+
+  if test "x$enable_orc" != "xno" ; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ORC" >&5
+$as_echo_n "checking for ORC... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ORC_CFLAGS"; then
+        pkg_cv_ORC_CFLAGS="$ORC_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"orc-0.4 >= \$ORC_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ORC_CFLAGS=`$PKG_CONFIG --cflags "orc-0.4 >= $ORC_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ORC_LIBS"; then
+        pkg_cv_ORC_LIBS="$ORC_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"orc-0.4 >= \$ORC_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "orc-0.4 >= $ORC_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ORC_LIBS=`$PKG_CONFIG --libs "orc-0.4 >= $ORC_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ORC_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "orc-0.4 >= $ORC_REQ"`
+        else
+	        ORC_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "orc-0.4 >= $ORC_REQ"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ORC_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      if test "x$enable_orc" = "xyes" ; then
+        as_fn_error $? "--enable-orc specified, but Orc >= $ORC_REQ not found" "$LINENO" 5
+      fi
+
+$as_echo "#define DISABLE_ORC 1" >>confdefs.h
+
+      HAVE_ORC=no
+      HAVE_ORCC=no
+
+elif test $pkg_failed = untried; then
+
+      if test "x$enable_orc" = "xyes" ; then
+        as_fn_error $? "--enable-orc specified, but Orc >= $ORC_REQ not found" "$LINENO" 5
+      fi
+
+$as_echo "#define DISABLE_ORC 1" >>confdefs.h
+
+      HAVE_ORC=no
+      HAVE_ORCC=no
+
+else
+	ORC_CFLAGS=$pkg_cv_ORC_CFLAGS
+	ORC_LIBS=$pkg_cv_ORC_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_ORC 1" >>confdefs.h
+
+      HAVE_ORC=yes
+      if test "x$ORCC" = "x" ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usable orcc" >&5
+$as_echo_n "checking for usable orcc... " >&6; }
+        ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
+                        if $ORCC --version 1> /dev/null 2> /dev/null; then :
+
+else
+  ORCC=`which orcc`
+fi
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ORCC" >&5
+$as_echo "$ORCC" >&6; }
+      fi
+
+      ORCC_FLAGS="--compat $ORC_REQ"
+
+      if test "x$ORCC" = "x"; then :
+  HAVE_ORCC=no
+else
+  HAVE_ORCC=yes
+fi
+
+fi
+  else
+
+$as_echo "#define DISABLE_ORC 1" >>confdefs.h
+
+    HAVE_ORC=no
+    HAVE_ORCC=no
+  fi
+   if test "x$HAVE_ORC" = "xyes"; then
+  HAVE_ORC_TRUE=
+  HAVE_ORC_FALSE='#'
+else
+  HAVE_ORC_TRUE='#'
+  HAVE_ORC_FALSE=
+fi
+
+   if test "x$HAVE_ORCC" = "xyes"; then
+  HAVE_ORCC_TRUE=
+  HAVE_ORCC_FALSE='#'
+else
+  HAVE_ORCC_TRUE='#'
+  HAVE_ORCC_FALSE=
+fi
+
+
+
+
+
+
+  module=gstreamer-$GST_MAJORMINOR
+  minver=$GST_REQ
+  name="GStreamer"
+  required=yes
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST" >&5
+$as_echo_n "checking for GST... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_CFLAGS"; then
+        pkg_cv_GST_CFLAGS="$GST_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_LIBS"; then
+        pkg_cv_GST_LIBS="$GST_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_CFLAGS=$pkg_cv_GST_CFLAGS
+	GST_LIBS=$pkg_cv_GST_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST="yes"
+
+fi
+
+
+    if test -z $GST_TOOLS_DIR; then
+    GST_TOOLS_DIR=`$PKG_CONFIG --variable=toolsdir gstreamer-$GST_MAJORMINOR`
+    if test -z $GST_TOOLS_DIR; then
+      as_fn_error $? "no tools dir set in GStreamer pkg-config file, core upgrade needed." "$LINENO" 5
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: using GStreamer tools in $GST_TOOLS_DIR" >&5
+$as_echo "$as_me: using GStreamer tools in $GST_TOOLS_DIR" >&6;}
+
+
+        if test -z $GST_PLUGINS_DIR; then
+    GST_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-$GST_MAJORMINOR`
+    if test -z $GST_PLUGINS_DIR; then
+      as_fn_error $? "no pluginsdir set in GStreamer pkg-config file, core upgrade needed." "$LINENO" 5
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: using GStreamer plug-ins in $GST_PLUGINS_DIR" >&5
+$as_echo "$as_me: using GStreamer plug-ins in $GST_PLUGINS_DIR" >&6;}
+
+
+
+
+  module=gstreamer-base-$GST_MAJORMINOR
+  minver=$GST_REQ
+  name="GStreamer Base Libraries"
+  required=yes
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_BASE" >&5
+$as_echo_n "checking for GST_BASE... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_BASE_CFLAGS"; then
+        pkg_cv_GST_BASE_CFLAGS="$GST_BASE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_BASE_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_BASE_LIBS"; then
+        pkg_cv_GST_BASE_LIBS="$GST_BASE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_BASE_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_BASE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_BASE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_BASE_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_BASE="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_BASE_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_BASE_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_BASE="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_BASE_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_BASE_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_BASE_CFLAGS=$pkg_cv_GST_BASE_CFLAGS
+	GST_BASE_LIBS=$pkg_cv_GST_BASE_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_BASE="yes"
+
+fi
+
+
+
+
+
+  module=gstreamer-dataprotocol-$GST_MAJORMINOR
+  minver=$GST_REQ
+  name="GStreamer Data Protocol Library"
+  required=yes
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_GDP" >&5
+$as_echo_n "checking for GST_GDP... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_GDP_CFLAGS"; then
+        pkg_cv_GST_GDP_CFLAGS="$GST_GDP_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_GDP_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_GDP_LIBS"; then
+        pkg_cv_GST_GDP_LIBS="$GST_GDP_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_GDP_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_GDP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_GDP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_GDP_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_GDP="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_GDP_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_GDP_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_GDP="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_GDP_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_GDP_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_GDP_CFLAGS=$pkg_cv_GST_GDP_CFLAGS
+	GST_GDP_LIBS=$pkg_cv_GST_GDP_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_GDP="yes"
+
+fi
+
+
+
+
+
+  module=gstreamer-controller-$GST_MAJORMINOR
+  minver=$GST_REQ
+  name="GStreamer Controller Library"
+  required=yes
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_CONTROLLER" >&5
+$as_echo_n "checking for GST_CONTROLLER... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_CONTROLLER_CFLAGS"; then
+        pkg_cv_GST_CONTROLLER_CFLAGS="$GST_CONTROLLER_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_CONTROLLER_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_CONTROLLER_LIBS"; then
+        pkg_cv_GST_CONTROLLER_LIBS="$GST_CONTROLLER_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_CONTROLLER_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_CONTROLLER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_CONTROLLER_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_CONTROLLER="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_CONTROLLER_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_CONTROLLER_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_CONTROLLER="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_CONTROLLER_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_CONTROLLER_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_CONTROLLER_CFLAGS=$pkg_cv_GST_CONTROLLER_CFLAGS
+	GST_CONTROLLER_LIBS=$pkg_cv_GST_CONTROLLER_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_CONTROLLER="yes"
+
+fi
+
+
+
+
+
+  module=gstreamer-check-$GST_MAJORMINOR
+  minver=$GST_REQ
+  name="GStreamer Check unittest Library"
+  required=no
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_CHECK" >&5
+$as_echo_n "checking for GST_CHECK... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_CHECK_CFLAGS"; then
+        pkg_cv_GST_CHECK_CFLAGS="$GST_CHECK_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_CHECK_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_CHECK_LIBS"; then
+        pkg_cv_GST_CHECK_LIBS="$GST_CHECK_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_CHECK_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GST_CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_CHECK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_CHECK_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_CHECK="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_CHECK_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_CHECK_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_CHECK="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_CHECK_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_CHECK_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_CHECK_CFLAGS=$pkg_cv_GST_CHECK_CFLAGS
+	GST_CHECK_LIBS=$pkg_cv_GST_CHECK_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_CHECK="yes"
+
+fi
+
+
+
+ if test "x$HAVE_GST_CHECK" = "xyes"; then
+  HAVE_GST_CHECK_TRUE=
+  HAVE_GST_CHECK_FALSE='#'
+else
+  HAVE_GST_CHECK_TRUE='#'
+  HAVE_GST_CHECK_FALSE=
+fi
+
+
+GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_MAJORMINOR`"
+
+
+
+HAVE_GTK=no
+HAVE_GTK_X11=no
+GTK2_REQ=2.14.0
+GTK3_REQ=2.91.3
+if test "x$BUILD_EXAMPLES" = "xyes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which gtk+ version to compile examples against (optional)" >&5
+$as_echo_n "checking which gtk+ version to compile examples against (optional)... " >&6; }
+
+# Check whether --with-gtk was given.
+if test "${with_gtk+set}" = set; then :
+  withval=$with_gtk; case "$with_gtk" in
+        2.0) GTK_REQ=$GTK2_REQ ;;
+        3.0) GTK_REQ=$GTK3_REQ ;;
+        *) as_fn_error $? "invalid gtk+ version specified" "$LINENO" 5 ;;
+    esac
+else
+  with_gtk=2.0
+     GTK_REQ=$GTK2_REQ
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gtk (>= $GTK_REQ)" >&5
+$as_echo "$with_gtk (>= $GTK_REQ)" >&6; }
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
+$as_echo_n "checking for GTK... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GTK_CFLAGS"; then
+        pkg_cv_GTK_CFLAGS="$GTK_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-\$with_gtk >= \$GTK_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-$with_gtk >= $GTK_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-$with_gtk >= $GTK_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GTK_LIBS"; then
+        pkg_cv_GTK_LIBS="$GTK_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-\$with_gtk >= \$GTK_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-$with_gtk >= $GTK_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-$with_gtk >= $GTK_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-$with_gtk >= $GTK_REQ"`
+        else
+	        GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-$with_gtk >= $GTK_REQ"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTK_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_GTK=no
+elif test $pkg_failed = untried; then
+	HAVE_GTK=no
+else
+	GTK_CFLAGS=$pkg_cv_GTK_CFLAGS
+	GTK_LIBS=$pkg_cv_GTK_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_GTK=yes
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_X11" >&5
+$as_echo_n "checking for GTK_X11... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GTK_X11_CFLAGS"; then
+        pkg_cv_GTK_X11_CFLAGS="$GTK_X11_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-x11-\$with_gtk >= \$GTK_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-x11-$with_gtk >= $GTK_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTK_X11_CFLAGS=`$PKG_CONFIG --cflags "gtk+-x11-$with_gtk >= $GTK_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GTK_X11_LIBS"; then
+        pkg_cv_GTK_X11_LIBS="$GTK_X11_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-x11-\$with_gtk >= \$GTK_REQ\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-x11-$with_gtk >= $GTK_REQ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GTK_X11_LIBS=`$PKG_CONFIG --libs "gtk+-x11-$with_gtk >= $GTK_REQ" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTK_X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-x11-$with_gtk >= $GTK_REQ"`
+        else
+	        GTK_X11_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-x11-$with_gtk >= $GTK_REQ"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTK_X11_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_GTK_X11=no
+elif test $pkg_failed = untried; then
+	HAVE_GTK_X11=no
+else
+	GTK_X11_CFLAGS=$pkg_cv_GTK_X11_CFLAGS
+	GTK_X11_LIBS=$pkg_cv_GTK_X11_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_GTK_X11=yes
+fi
+
+
+fi
+ if test "x$HAVE_GTK" = "xyes"; then
+  HAVE_GTK_TRUE=
+  HAVE_GTK_FALSE='#'
+else
+  HAVE_GTK_TRUE='#'
+  HAVE_GTK_FALSE=
+fi
+
+ if test "x$HAVE_GTK_X11" = "xyes"; then
+  HAVE_GTK_X11_TRUE=
+  HAVE_GTK_X11_FALSE='#'
+else
+  HAVE_GTK_X11_TRUE='#'
+  HAVE_GTK_X11_FALSE=
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT" >&5
+$as_echo_n "checking for QT... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_CFLAGS"; then
+        pkg_cv_QT_CFLAGS="$QT_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.6") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "QtGui >= 4.6" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_LIBS"; then
+        pkg_cv_QT_LIBS="$QT_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.6") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "QtGui >= 4.6" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtGui >= 4.6"`
+        else
+	        QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtGui >= 4.6"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+  HAVE_QT_GV=no
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT" >&5
+$as_echo_n "checking for QT... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_CFLAGS"; then
+        pkg_cv_QT_CFLAGS="$QT_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "QtGui >= 4.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_LIBS"; then
+        pkg_cv_QT_LIBS="$QT_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "QtGui >= 4.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtGui >= 4.0"`
+        else
+	        QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtGui >= 4.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_QT=no
+elif test $pkg_failed = untried; then
+	HAVE_QT=no
+else
+	QT_CFLAGS=$pkg_cv_QT_CFLAGS
+	QT_LIBS=$pkg_cv_QT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_QT=yes
+fi
+
+elif test $pkg_failed = untried; then
+
+  HAVE_QT_GV=no
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT" >&5
+$as_echo_n "checking for QT... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_CFLAGS"; then
+        pkg_cv_QT_CFLAGS="$QT_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "QtGui >= 4.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$QT_LIBS"; then
+        pkg_cv_QT_LIBS="$QT_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "QtGui >= 4.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "QtGui >= 4.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtGui >= 4.0"`
+        else
+	        QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtGui >= 4.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$QT_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                HAVE_QT=no
+elif test $pkg_failed = untried; then
+	HAVE_QT=no
+else
+	QT_CFLAGS=$pkg_cv_QT_CFLAGS
+	QT_LIBS=$pkg_cv_QT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_QT=yes
+fi
+
+else
+	QT_CFLAGS=$pkg_cv_QT_CFLAGS
+	QT_LIBS=$pkg_cv_QT_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+  HAVE_QT_GV=yes
+  HAVE_QT=yes
+
+fi
+if test "x$HAVE_QT" = "xyes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking Qt moc" >&5
+$as_echo_n "checking Qt moc... " >&6; }
+  QT4_MOC=`$PKG_CONFIG --variable=moc_location QtGui`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QT4_MOC" >&5
+$as_echo "$QT4_MOC" >&6; }
+
+fi
+ if test "x$HAVE_QT" = "xyes"; then
+  HAVE_QT_TRUE=
+  HAVE_QT_FALSE='#'
+else
+  HAVE_QT_TRUE='#'
+  HAVE_QT_FALSE=
+fi
+
+ if test "x$HAVE_QT_GV" = "xyes"; then
+  HAVE_QT_GV_TRUE=
+  HAVE_QT_GV_FALSE='#'
+else
+  HAVE_QT_GV_TRUE='#'
+  HAVE_QT_GV_FALSE=
+fi
+
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+    #include <linux/input.h>
+    #include <linux/joystick.h>
+
+int
+main ()
+{
+
+    struct js_event js;
+    js.type = JS_EVENT_AXIS;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+  HAVE_LINUX_JOYSTICK_HEADERS="yes"
+
+else
+
+  HAVE_LINUX_JOYSTICK_HEADERS="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "x$HAVE_LINUX_JOYSTICK_HEADERS" = "xyes"; then
+  HAVE_LINUX_JOYSTICK_HEADERS_TRUE=
+  HAVE_LINUX_JOYSTICK_HEADERS_FALSE='#'
+else
+  HAVE_LINUX_JOYSTICK_HEADERS_TRUE='#'
+  HAVE_LINUX_JOYSTICK_HEADERS_FALSE=
+fi
+
+
+# Check whether --enable-Bsymbolic was given.
+if test "${enable_Bsymbolic+set}" = set; then :
+  enableval=$enable_Bsymbolic;
+else
+  SAVED_LDFLAGS="${LDFLAGS}"
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Bsymbolic-functions linker flag" >&5
+$as_echo_n "checking for -Bsymbolic-functions linker flag... " >&6; }
+               LDFLAGS=-Wl,-Bsymbolic-functions
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int main (void) { return 0; }
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                           enable_Bsymbolic=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                           enable_Bsymbolic=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+               LDFLAGS="${SAVED_LDFLAGS}"
+fi
+
+
+
+
+GST_LICENSE="LGPL"
+
+cat >>confdefs.h <<_ACEOF
+#define GST_LICENSE "$GST_LICENSE"
+_ACEOF
+
+
+
+
+
+  EXP_VAR=PLUGINDIR
+  FROM_VAR=${libdir}/gstreamer-$GST_MAJORMINOR
+
+    prefix_save=$prefix
+  exec_prefix_save=$exec_prefix
+
+    if test "x$prefix" = "xNONE"; then
+    prefix="$ac_default_prefix"
+  fi
+    if test "x$exec_prefix" = "xNONE"; then
+    exec_prefix=$prefix
+  fi
+
+  full_var="$FROM_VAR"
+    while true; do
+    new_full_var="`eval echo $full_var`"
+    if test "x$new_full_var" = "x$full_var"; then break; fi
+    full_var=$new_full_var
+  done
+
+    full_var=$new_full_var
+  PLUGINDIR="$full_var"
+
+
+    prefix=$prefix_save
+  exec_prefix=$exec_prefix_save
+
+
+cat >>confdefs.h <<_ACEOF
+#define PLUGINDIR "$PLUGINDIR"
+_ACEOF
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $PLUGINDIR as the plugin install location" >&5
+$as_echo "$as_me: Using $PLUGINDIR as the plugin install location" >&6;}
+
+    plugindir="\$(libdir)/gstreamer-$GST_MAJORMINOR"
+
+
+
+
+  if test "x$PACKAGE_VERSION_NANO" = "x0"; then
+
+      if test "xyes" = "xno" -o "xyes" = "x"; then
+    GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
+  elif test "xyes" = "xyes"; then
+            if ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME=yes
+    else
+            YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO   "${srcdir}/gst-plugins-base.doap" `;
+      if test "x$YYYY_MM_DD" != "x"; then
+        GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD
+      else
+        as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract
+            release date for release version  $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO  from  \"${srcdir}/gst-plugins-base.doap\" " "$LINENO" 5
+        GST_PACKAGE_RELEASE_DATETIME=""
+      fi
+    fi
+    elif ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    GST_PACKAGE_RELEASE_DATETIME=yes
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
+$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;}
+    GST_PACKAGE_RELEASE_DATETIME=""
+  fi
+
+  if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5
+$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;}
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5
+$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME"
+_ACEOF
+
+  fi
+
+  else
+
+      if test "xno" = "xno" -o "xno" = "x"; then
+    GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
+  elif test "xno" = "xyes"; then
+            if ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME=no
+    else
+            YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  `;
+      if test "x$YYYY_MM_DD" != "x"; then
+        GST_PACKAGE_RELEASE_DATETIME=$YYYY_MM_DD
+      else
+        as_fn_error $? "SET_PACKAGE_RELEASE_DATETIME: could not extract
+            release date for release version  from " "$LINENO" 5
+        GST_PACKAGE_RELEASE_DATETIME=""
+      fi
+    fi
+    elif ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    GST_PACKAGE_RELEASE_DATETIME=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
+$as_echo "$as_me: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&2;}
+    GST_PACKAGE_RELEASE_DATETIME=""
+  fi
+
+  if test "x$GST_PACKAGE_RELEASE_DATETIME" = "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&5
+$as_echo "$as_me: WARNING: Invalid package release date time: $GST_PACKAGE_RELEASE_DATETIME" >&2;}
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&5
+$as_echo "$as_me: Setting GST_PACKAGE_RELEASE_DATETIME to $GST_PACKAGE_RELEASE_DATETIME" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define GST_PACKAGE_RELEASE_DATETIME "$GST_PACKAGE_RELEASE_DATETIME"
+_ACEOF
+
+  fi
+
+  fi
+
+
+
+
+
+
+  WARNING_CFLAGS=""
+  ERROR_CFLAGS=""
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wall" >&5
+$as_echo_n "checking to see if compiler understands -Wall... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wall"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CFLAGS="$WARNING_CFLAGS -Wall"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wdeclaration-after-statement" >&5
+$as_echo_n "checking to see if compiler understands -Wdeclaration-after-statement... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CFLAGS="$WARNING_CFLAGS -Wdeclaration-after-statement"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wvla" >&5
+$as_echo_n "checking to see if compiler understands -Wvla... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wvla"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CFLAGS="$WARNING_CFLAGS -Wvla"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Wpointer-arith" >&5
+$as_echo_n "checking to see if compiler understands -Wpointer-arith... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Wpointer-arith"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CFLAGS="$WARNING_CFLAGS -Wpointer-arith"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+    if test "x$GST_GIT" != "xno"
+  then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -Werror" >&5
+$as_echo_n "checking to see if compiler understands -Werror... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -Werror"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CFLAGS="$ERROR_CFLAGS -Werror"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+        if test "x$ERROR_CFLAGS" = "x"
+    then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all" >&5
+$as_echo_n "checking to see if compiler understands -errwarn=%all... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -errwarn=%all"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+
+          ERROR_CFLAGS="-errwarn=%all"
+                                                                                for f in 'no%E_EMPTY_DECLARATION' \
+                   'no%E_STATEMENT_NOT_REACHED' \
+                   'no%E_ARGUEMENT_MISMATCH' \
+                   'no%E_MACRO_REDEFINED' \
+                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
+          do
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all,$f" >&5
+$as_echo_n "checking to see if compiler understands -errwarn=%all,$f... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -errwarn=%all,$f"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+
+              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
+
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+          done
+
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+    else
+                        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5
+$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-strict-aliasing"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing"
+    true
+  else
+
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+fi
+    fi
+  fi
+
+  if test "x
+    -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar -Wnested-externs " != "x"
+  then
+    UNSUPPORTED=""
+    list="
+    -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar -Wnested-externs "
+    for each in $list
+    do
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $each" >&5
+$as_echo_n "checking to see if compiler understands $each... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $each"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CFLAGS="$WARNING_CFLAGS $each"
+    true
+  else
+    UNSUPPORTED="$UNSUPPORTED $each"
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+    done
+    if test "X$UNSUPPORTED" != X ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: unsupported compiler flags: $UNSUPPORTED" >&5
+$as_echo "$as_me: unsupported compiler flags: $UNSUPPORTED" >&6;}
+    fi
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: set WARNING_CFLAGS to $WARNING_CFLAGS" >&5
+$as_echo "$as_me: set WARNING_CFLAGS to $WARNING_CFLAGS" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: set ERROR_CFLAGS to $ERROR_CFLAGS" >&5
+$as_echo "$as_me: set ERROR_CFLAGS to $ERROR_CFLAGS" >&6;}
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands " >&5
+$as_echo_n "checking to see if c++ compiler understands ... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS "
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+
+
+
+  ERROR_CXXFLAGS=""
+  WARNING_CXXFLAGS=""
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -Wall" >&5
+$as_echo_n "checking to see if c++ compiler understands -Wall... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -Wall"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CXXFLAGS="$WARNING_CXXFLAGS -Wall"
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+    if test "x$GST_GIT" != "xno"
+  then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -Werror" >&5
+$as_echo_n "checking to see if c++ compiler understands -Werror... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -Werror"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror"
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+    if test "x$ERROR_CXXFLAGS" != "x"
+    then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -Wno-non-virtual-dtor" >&5
+$as_echo_n "checking to see if c++ compiler understands -Wno-non-virtual-dtor... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -Wno-non-virtual-dtor"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-non-virtual-dtor"
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+				if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -fno-strict-aliasing" >&5
+$as_echo_n "checking to see if c++ compiler understands -fno-strict-aliasing... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -fno-strict-aliasing"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing"
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+fi
+    else
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all" >&5
+$as_echo_n "checking to see if c++ compiler understands -errwarn=%all... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -errwarn=%all"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all"
+    true
+  else
+
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+      if test "x$ERROR_CXXFLAGS" != "x"; then
+                                                                                for f in 'no%E_EMPTY_DECLARATION' \
+                 'no%E_STATEMENT_NOT_REACHED' \
+                 'no%E_ARGUEMENT_MISMATCH' \
+                 'no%E_MACRO_REDEFINED' \
+                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
+        do
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all,$f" >&5
+$as_echo_n "checking to see if c++ compiler understands -errwarn=%all,$f... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS -errwarn=%all,$f"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    ERROR_CXXFLAGS="$ERROR_CXXFLAGS
+    true
+  else
+    $f"
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+        done
+      fi
+    fi
+  fi
+
+  if test "x
+    -Wmissing-declarations -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar" != "x"
+  then
+    UNSUPPORTED=""
+    list="
+    -Wmissing-declarations -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar"
+    for each in $list
+    do
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands $each" >&5
+$as_echo_n "checking to see if c++ compiler understands $each... " >&6; }
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $each"
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    WARNING_CXXFLAGS="$WARNING_CXXFLAGS $each"
+    true
+  else
+    UNSUPPORTED="$UNSUPPORTED $each"
+    true
+  fi
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+    done
+    if test "X$UNSUPPORTED" != X ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: unsupported compiler flags: $UNSUPPORTED" >&5
+$as_echo "$as_me: unsupported compiler flags: $UNSUPPORTED" >&6;}
+    fi
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: set WARNING_CXXFLAGS to $WARNING_CXXFLAGS" >&5
+$as_echo "$as_me: set WARNING_CXXFLAGS to $WARNING_CXXFLAGS" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: set ERROR_CXXFLAGS to $ERROR_CXXFLAGS" >&5
+$as_echo "$as_me: set ERROR_CXXFLAGS to $ERROR_CXXFLAGS" >&6;}
+
+
+
+      if test "x$GST_GIT" = "xyes"; then
+    GST_LEVEL_DEFAULT=GST_LEVEL_ERROR
+  else
+    GST_LEVEL_DEFAULT=GST_LEVEL_NONE
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define GST_LEVEL_DEFAULT $GST_LEVEL_DEFAULT
+_ACEOF
+
+
+
+
+
+            DEFAULT_AUDIOSINK="autoaudiosink"
+  DEFAULT_VIDEOSINK="autovideosink"
+  DEFAULT_AUDIOSRC="alsasrc"
+  DEFAULT_VIDEOSRC="v4l2src"
+  DEFAULT_VISUALIZER="goom"
+  case "$host" in
+    *-sun-* | *pc-solaris* )
+      DEFAULT_AUDIOSRC="sunaudiosrc"
+      ;;
+    *-darwin* )
+      DEFAULT_AUDIOSRC="osxaudiosrc"
+      ;;
+  esac
+
+
+# Check whether --with-default-audiosink was given.
+if test "${with_default_audiosink+set}" = set; then :
+  withval=$with_default_audiosink;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-default-audiosink" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-default-audiosink" "$LINENO" 5  ;;
+        *)   DEFAULT_AUDIOSINK="${withval}" ;;
+      esac
+
+else
+
+      DEFAULT_AUDIOSINK="$DEFAULT_AUDIOSINK"
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $DEFAULT_AUDIOSINK as default audio sink" >&5
+$as_echo "$as_me: Using $DEFAULT_AUDIOSINK as default audio sink" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_AUDIOSINK "$DEFAULT_AUDIOSINK"
+_ACEOF
+
+
+
+# Check whether --with-default-audiosrc was given.
+if test "${with_default_audiosrc+set}" = set; then :
+  withval=$with_default_audiosrc;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-default-audiosrc" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-default-audiosrc" "$LINENO" 5  ;;
+        *)   DEFAULT_AUDIOSRC="${withval}" ;;
+      esac
+
+else
+
+      DEFAULT_AUDIOSRC="$DEFAULT_AUDIOSRC"
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $DEFAULT_AUDIOSRC as default audio source" >&5
+$as_echo "$as_me: Using $DEFAULT_AUDIOSRC as default audio source" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_AUDIOSRC "$DEFAULT_AUDIOSRC"
+_ACEOF
+
+
+
+# Check whether --with-default-videosink was given.
+if test "${with_default_videosink+set}" = set; then :
+  withval=$with_default_videosink;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-default-videosink" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-default-videosink" "$LINENO" 5  ;;
+        *)   DEFAULT_VIDEOSINK="${withval}" ;;
+      esac
+
+else
+
+      DEFAULT_VIDEOSINK="$DEFAULT_VIDEOSINK"
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $DEFAULT_VIDEOSINK as default video sink" >&5
+$as_echo "$as_me: Using $DEFAULT_VIDEOSINK as default video sink" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_VIDEOSINK "$DEFAULT_VIDEOSINK"
+_ACEOF
+
+
+
+# Check whether --with-default-videosrc was given.
+if test "${with_default_videosrc+set}" = set; then :
+  withval=$with_default_videosrc;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-default-videosrc" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-default-videosrc" "$LINENO" 5  ;;
+        *)   DEFAULT_VIDEOSRC="${withval}" ;;
+      esac
+
+else
+
+      DEFAULT_VIDEOSRC="$DEFAULT_VIDEOSRC"
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $DEFAULT_VIDEOSRC as default video source" >&5
+$as_echo "$as_me: Using $DEFAULT_VIDEOSRC as default video source" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_VIDEOSRC "$DEFAULT_VIDEOSRC"
+_ACEOF
+
+
+
+# Check whether --with-default-visualizer was given.
+if test "${with_default_visualizer+set}" = set; then :
+  withval=$with_default_visualizer;
+      case "${withval}" in
+        yes) as_fn_error $? "bad value ${withval} for --with-default-visualizer" "$LINENO" 5  ;;
+        no)  as_fn_error $? "bad value ${withval} for --with-default-visualizer" "$LINENO" 5  ;;
+        *)   DEFAULT_VISUALIZER="${withval}" ;;
+      esac
+
+else
+
+      DEFAULT_VISUALIZER="$DEFAULT_VISUALIZER"
+
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using $DEFAULT_VISUALIZER as default visualizer" >&5
+$as_echo "$as_me: Using $DEFAULT_VISUALIZER as default visualizer" >&6;}
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_VISUALIZER "$DEFAULT_VISUALIZER"
+_ACEOF
+
+
+
+GST_DATADIR="$GST_PREFIX/share"
+
+cat >>confdefs.h <<_ACEOF
+#define GST_DATADIR "$GST_DATADIR"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define GST_MAJORMINOR "$GST_MAJORMINOR"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which audio resample format to use for integer" >&5
+$as_echo_n "checking which audio resample format to use for integer... " >&6; }
+
+# Check whether --with-audioresample_format was given.
+if test "${with_audioresample_format+set}" = set; then :
+  withval=$with_audioresample_format; ac_cv_audioresample_format=$withval
+else
+  ac_cv_audioresample_format=auto
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_audioresample_format" >&5
+$as_echo "$ac_cv_audioresample_format" >&6; }
+case $ac_cv_audioresample_format in
+  int)
+
+$as_echo "#define AUDIORESAMPLE_FORMAT_INT 1" >>confdefs.h
+
+
+  ;;
+  float)
+
+$as_echo "#define AUDIORESAMPLE_FORMAT_FLOAT 1" >>confdefs.h
+
+
+  ;;
+  auto)
+
+$as_echo "#define AUDIORESAMPLE_FORMAT_AUTO 1" >>confdefs.h
+
+
+esac
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL adder"
+
+
+
+  # Check whether --enable-adder was given.
+if test "${enable_adder+set}" = set; then :
+  enableval=$enable_adder;
+      case "${enableval}" in
+        yes) gst_use_adder=yes ;;
+        no) gst_use_adder=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-adder" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_adder=yes
+fi
+
+  if test x$gst_use_adder = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin adder" >&5
+$as_echo "$as_me: disabling dependency-less plugin adder" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS adder"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " adder " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED adder"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " adder " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ adder / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " adder " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ adder / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " adder " > /dev/null; then
+  USE_PLUGIN_ADDER_TRUE=
+  USE_PLUGIN_ADDER_FALSE='#'
+else
+  USE_PLUGIN_ADDER_TRUE='#'
+  USE_PLUGIN_ADDER_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL app"
+
+
+
+  # Check whether --enable-app was given.
+if test "${enable_app+set}" = set; then :
+  enableval=$enable_app;
+      case "${enableval}" in
+        yes) gst_use_app=yes ;;
+        no) gst_use_app=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-app" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_app=yes
+fi
+
+  if test x$gst_use_app = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin app" >&5
+$as_echo "$as_me: disabling dependency-less plugin app" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS app"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " app " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED app"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " app " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ app / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " app " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ app / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " app " > /dev/null; then
+  USE_PLUGIN_APP_TRUE=
+  USE_PLUGIN_APP_FALSE='#'
+else
+  USE_PLUGIN_APP_TRUE='#'
+  USE_PLUGIN_APP_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL audioconvert"
+
+
+
+  # Check whether --enable-audioconvert was given.
+if test "${enable_audioconvert+set}" = set; then :
+  enableval=$enable_audioconvert;
+      case "${enableval}" in
+        yes) gst_use_audioconvert=yes ;;
+        no) gst_use_audioconvert=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-audioconvert" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_audioconvert=yes
+fi
+
+  if test x$gst_use_audioconvert = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin audioconvert" >&5
+$as_echo "$as_me: disabling dependency-less plugin audioconvert" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS audioconvert"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " audioconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED audioconvert"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " audioconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audioconvert / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " audioconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audioconvert / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " audioconvert " > /dev/null; then
+  USE_PLUGIN_AUDIOCONVERT_TRUE=
+  USE_PLUGIN_AUDIOCONVERT_FALSE='#'
+else
+  USE_PLUGIN_AUDIOCONVERT_TRUE='#'
+  USE_PLUGIN_AUDIOCONVERT_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL audiorate"
+
+
+
+  # Check whether --enable-audiorate was given.
+if test "${enable_audiorate+set}" = set; then :
+  enableval=$enable_audiorate;
+      case "${enableval}" in
+        yes) gst_use_audiorate=yes ;;
+        no) gst_use_audiorate=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-audiorate" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_audiorate=yes
+fi
+
+  if test x$gst_use_audiorate = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin audiorate" >&5
+$as_echo "$as_me: disabling dependency-less plugin audiorate" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS audiorate"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " audiorate " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED audiorate"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " audiorate " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audiorate / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " audiorate " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audiorate / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " audiorate " > /dev/null; then
+  USE_PLUGIN_AUDIORATE_TRUE=
+  USE_PLUGIN_AUDIORATE_FALSE='#'
+else
+  USE_PLUGIN_AUDIORATE_TRUE='#'
+  USE_PLUGIN_AUDIORATE_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL audiotestsrc"
+
+
+
+  # Check whether --enable-audiotestsrc was given.
+if test "${enable_audiotestsrc+set}" = set; then :
+  enableval=$enable_audiotestsrc;
+      case "${enableval}" in
+        yes) gst_use_audiotestsrc=yes ;;
+        no) gst_use_audiotestsrc=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-audiotestsrc" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_audiotestsrc=yes
+fi
+
+  if test x$gst_use_audiotestsrc = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin audiotestsrc" >&5
+$as_echo "$as_me: disabling dependency-less plugin audiotestsrc" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS audiotestsrc"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " audiotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED audiotestsrc"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " audiotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audiotestsrc / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " audiotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audiotestsrc / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " audiotestsrc " > /dev/null; then
+  USE_PLUGIN_AUDIOTESTSRC_TRUE=
+  USE_PLUGIN_AUDIOTESTSRC_FALSE='#'
+else
+  USE_PLUGIN_AUDIOTESTSRC_TRUE='#'
+  USE_PLUGIN_AUDIOTESTSRC_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL encoding"
+
+
+
+  # Check whether --enable-encoding was given.
+if test "${enable_encoding+set}" = set; then :
+  enableval=$enable_encoding;
+      case "${enableval}" in
+        yes) gst_use_encoding=yes ;;
+        no) gst_use_encoding=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-encoding" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_encoding=yes
+fi
+
+  if test x$gst_use_encoding = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin encoding" >&5
+$as_echo "$as_me: disabling dependency-less plugin encoding" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS encoding"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " encoding " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED encoding"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " encoding " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ encoding / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " encoding " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ encoding / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " encoding " > /dev/null; then
+  USE_PLUGIN_ENCODING_TRUE=
+  USE_PLUGIN_ENCODING_FALSE='#'
+else
+  USE_PLUGIN_ENCODING_TRUE='#'
+  USE_PLUGIN_ENCODING_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL videoconvert"
+
+
+
+  # Check whether --enable-videoconvert was given.
+if test "${enable_videoconvert+set}" = set; then :
+  enableval=$enable_videoconvert;
+      case "${enableval}" in
+        yes) gst_use_videoconvert=yes ;;
+        no) gst_use_videoconvert=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-videoconvert" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_videoconvert=yes
+fi
+
+  if test x$gst_use_videoconvert = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin videoconvert" >&5
+$as_echo "$as_me: disabling dependency-less plugin videoconvert" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS videoconvert"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " videoconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED videoconvert"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " videoconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoconvert / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " videoconvert " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoconvert / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " videoconvert " > /dev/null; then
+  USE_PLUGIN_VIDEOCONVERT_TRUE=
+  USE_PLUGIN_VIDEOCONVERT_FALSE='#'
+else
+  USE_PLUGIN_VIDEOCONVERT_TRUE='#'
+  USE_PLUGIN_VIDEOCONVERT_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL gdp"
+
+
+
+  # Check whether --enable-gdp was given.
+if test "${enable_gdp+set}" = set; then :
+  enableval=$enable_gdp;
+      case "${enableval}" in
+        yes) gst_use_gdp=yes ;;
+        no) gst_use_gdp=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-gdp" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_gdp=yes
+fi
+
+  if test x$gst_use_gdp = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin gdp" >&5
+$as_echo "$as_me: disabling dependency-less plugin gdp" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS gdp"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED gdp"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " gdp " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " gdp " > /dev/null; then
+  USE_PLUGIN_GDP_TRUE=
+  USE_PLUGIN_GDP_FALSE='#'
+else
+  USE_PLUGIN_GDP_TRUE='#'
+  USE_PLUGIN_GDP_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL playback"
+
+
+
+  # Check whether --enable-playback was given.
+if test "${enable_playback+set}" = set; then :
+  enableval=$enable_playback;
+      case "${enableval}" in
+        yes) gst_use_playback=yes ;;
+        no) gst_use_playback=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-playback" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_playback=yes
+fi
+
+  if test x$gst_use_playback = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin playback" >&5
+$as_echo "$as_me: disabling dependency-less plugin playback" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS playback"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " playback " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED playback"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " playback " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ playback / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " playback " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ playback / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " playback " > /dev/null; then
+  USE_PLUGIN_PLAYBACK_TRUE=
+  USE_PLUGIN_PLAYBACK_FALSE='#'
+else
+  USE_PLUGIN_PLAYBACK_TRUE='#'
+  USE_PLUGIN_PLAYBACK_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL audioresample"
+
+
+
+  # Check whether --enable-audioresample was given.
+if test "${enable_audioresample+set}" = set; then :
+  enableval=$enable_audioresample;
+      case "${enableval}" in
+        yes) gst_use_audioresample=yes ;;
+        no) gst_use_audioresample=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-audioresample" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_audioresample=yes
+fi
+
+  if test x$gst_use_audioresample = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin audioresample" >&5
+$as_echo "$as_me: disabling dependency-less plugin audioresample" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS audioresample"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " audioresample " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED audioresample"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " audioresample " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audioresample / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " audioresample " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ audioresample / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " audioresample " > /dev/null; then
+  USE_PLUGIN_AUDIORESAMPLE_TRUE=
+  USE_PLUGIN_AUDIORESAMPLE_FALSE='#'
+else
+  USE_PLUGIN_AUDIORESAMPLE_TRUE='#'
+  USE_PLUGIN_AUDIORESAMPLE_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL subparse"
+
+
+
+  # Check whether --enable-subparse was given.
+if test "${enable_subparse+set}" = set; then :
+  enableval=$enable_subparse;
+      case "${enableval}" in
+        yes) gst_use_subparse=yes ;;
+        no) gst_use_subparse=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-subparse" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_subparse=yes
+fi
+
+  if test x$gst_use_subparse = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin subparse" >&5
+$as_echo "$as_me: disabling dependency-less plugin subparse" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS subparse"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " subparse " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED subparse"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " subparse " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ subparse / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " subparse " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ subparse / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " subparse " > /dev/null; then
+  USE_PLUGIN_SUBPARSE_TRUE=
+  USE_PLUGIN_SUBPARSE_FALSE='#'
+else
+  USE_PLUGIN_SUBPARSE_TRUE='#'
+  USE_PLUGIN_SUBPARSE_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL tcp"
+
+
+
+  # Check whether --enable-tcp was given.
+if test "${enable_tcp+set}" = set; then :
+  enableval=$enable_tcp;
+      case "${enableval}" in
+        yes) gst_use_tcp=yes ;;
+        no) gst_use_tcp=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-tcp" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_tcp=yes
+fi
+
+  if test x$gst_use_tcp = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin tcp" >&5
+$as_echo "$as_me: disabling dependency-less plugin tcp" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS tcp"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " tcp " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED tcp"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " tcp " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ tcp / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " tcp " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ tcp / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " tcp " > /dev/null; then
+  USE_PLUGIN_TCP_TRUE=
+  USE_PLUGIN_TCP_FALSE='#'
+else
+  USE_PLUGIN_TCP_TRUE='#'
+  USE_PLUGIN_TCP_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL typefind"
+
+
+
+  # Check whether --enable-typefind was given.
+if test "${enable_typefind+set}" = set; then :
+  enableval=$enable_typefind;
+      case "${enableval}" in
+        yes) gst_use_typefind=yes ;;
+        no) gst_use_typefind=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-typefind" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_typefind=yes
+fi
+
+  if test x$gst_use_typefind = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin typefind" >&5
+$as_echo "$as_me: disabling dependency-less plugin typefind" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS typefind"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " typefind " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED typefind"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " typefind " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ typefind / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " typefind " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ typefind / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " typefind " > /dev/null; then
+  USE_PLUGIN_TYPEFIND_TRUE=
+  USE_PLUGIN_TYPEFIND_FALSE='#'
+else
+  USE_PLUGIN_TYPEFIND_TRUE='#'
+  USE_PLUGIN_TYPEFIND_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL videotestsrc"
+
+
+
+  # Check whether --enable-videotestsrc was given.
+if test "${enable_videotestsrc+set}" = set; then :
+  enableval=$enable_videotestsrc;
+      case "${enableval}" in
+        yes) gst_use_videotestsrc=yes ;;
+        no) gst_use_videotestsrc=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-videotestsrc" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_videotestsrc=yes
+fi
+
+  if test x$gst_use_videotestsrc = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin videotestsrc" >&5
+$as_echo "$as_me: disabling dependency-less plugin videotestsrc" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS videotestsrc"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " videotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED videotestsrc"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " videotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videotestsrc / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " videotestsrc " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videotestsrc / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " videotestsrc " > /dev/null; then
+  USE_PLUGIN_VIDEOTESTSRC_TRUE=
+  USE_PLUGIN_VIDEOTESTSRC_FALSE='#'
+else
+  USE_PLUGIN_VIDEOTESTSRC_TRUE='#'
+  USE_PLUGIN_VIDEOTESTSRC_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL videorate"
+
+
+
+  # Check whether --enable-videorate was given.
+if test "${enable_videorate+set}" = set; then :
+  enableval=$enable_videorate;
+      case "${enableval}" in
+        yes) gst_use_videorate=yes ;;
+        no) gst_use_videorate=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-videorate" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_videorate=yes
+fi
+
+  if test x$gst_use_videorate = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin videorate" >&5
+$as_echo "$as_me: disabling dependency-less plugin videorate" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS videorate"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " videorate " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED videorate"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " videorate " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videorate / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " videorate " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videorate / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " videorate " > /dev/null; then
+  USE_PLUGIN_VIDEORATE_TRUE=
+  USE_PLUGIN_VIDEORATE_FALSE='#'
+else
+  USE_PLUGIN_VIDEORATE_TRUE='#'
+  USE_PLUGIN_VIDEORATE_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL videoscale"
+
+
+
+  # Check whether --enable-videoscale was given.
+if test "${enable_videoscale+set}" = set; then :
+  enableval=$enable_videoscale;
+      case "${enableval}" in
+        yes) gst_use_videoscale=yes ;;
+        no) gst_use_videoscale=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-videoscale" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_videoscale=yes
+fi
+
+  if test x$gst_use_videoscale = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin videoscale" >&5
+$as_echo "$as_me: disabling dependency-less plugin videoscale" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS videoscale"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " videoscale " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED videoscale"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " videoscale " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoscale / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " videoscale " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ videoscale / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " videoscale " > /dev/null; then
+  USE_PLUGIN_VIDEOSCALE_TRUE=
+  USE_PLUGIN_VIDEOSCALE_FALSE='#'
+else
+  USE_PLUGIN_VIDEOSCALE_TRUE='#'
+  USE_PLUGIN_VIDEOSCALE_FALSE=
+fi
+
+
+
+  GST_PLUGINS_ALL="$GST_PLUGINS_ALL volume"
+
+
+
+  # Check whether --enable-volume was given.
+if test "${enable_volume+set}" = set; then :
+  enableval=$enable_volume;
+      case "${enableval}" in
+        yes) gst_use_volume=yes ;;
+        no) gst_use_volume=no ;;
+        *) as_fn_error $? "bad value ${enableval} for --enable-volume" "$LINENO" 5  ;;
+       esac
+
+else
+  gst_use_volume=yes
+fi
+
+  if test x$gst_use_volume = xno; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin volume" >&5
+$as_echo "$as_me: disabling dependency-less plugin volume" >&6;}
+    WITHOUT_PLUGINS="$WITHOUT_PLUGINS volume"
+  fi
+
+
+    if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " volume " > /dev/null; then
+    GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED volume"
+  fi
+    if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " volume " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ volume / /'`
+  fi
+    if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " volume " > /dev/null; then
+    GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ volume / /'`
+  fi
+   if echo " $GST_PLUGINS_SELECTED " | grep -i " volume " > /dev/null; then
+  USE_PLUGIN_VOLUME_TRUE=
+  USE_PLUGIN_VOLUME_FALSE='#'
+else
+  USE_PLUGIN_VOLUME_TRUE='#'
+  USE_PLUGIN_VOLUME_FALSE=
+fi
+
+
+
+ if false; then
+  USE_XML_TRUE=
+  USE_XML_FALSE='#'
+else
+  USE_XML_TRUE='#'
+  USE_XML_FALSE=
+fi
+
+
+$as_echo "#define GST_DISABLE_XML 1" >>confdefs.h
+
+
+if test "x$HAVE_LIBXML_HTML" != "xyes"; then
+
+  GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ subparse / /'`
+   if false; then
+  USE_PLUGIN_SUBPARSE_TRUE=
+  USE_PLUGIN_SUBPARSE_FALSE='#'
+else
+  USE_PLUGIN_SUBPARSE_TRUE='#'
+  USE_PLUGIN_SUBPARSE_FALSE=
+fi
+
+
+fi
+
+if test "x$HAVE_SYS_SOCKET_H" != "xyes"; then
+
+  GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ tcp / /'`
+   if false; then
+  USE_PLUGIN_TCP_TRUE=
+  USE_PLUGIN_TCP_FALSE='#'
+else
+  USE_PLUGIN_TCP_TRUE='#'
+  USE_PLUGIN_TCP_FALSE=
+fi
+
+
+fi
+
+# Check whether --enable-iso-codes was given.
+if test "${enable_iso_codes+set}" = set; then :
+  enableval=$enable_iso_codes; case "${enableval}" in
+  yes) enable_iso_codes=yes ;;
+  no)  enable_iso_codes=no ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-iso-codes" "$LINENO" 5  ;;
+esac
+
+else
+  enable_iso_codes=yes
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use iso-codes if they are available" >&5
+$as_echo_n "checking whether to use iso-codes if they are available... " >&6; }
+if test "x$enable_iso_codes" = "xyes"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  have_iso_codes=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iso-codes are available on this system" >&5
+$as_echo_n "checking whether iso-codes are available on this system... " >&6; }
+  if $PKG_CONFIG iso-codes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iso-codes has iso-639 domain" >&5
+$as_echo_n "checking whether iso-codes has iso-639 domain... " >&6; }
+    if $PKG_CONFIG --variable=domains iso-codes | $GREP -q 639 ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iso-codes prefix" >&5
+$as_echo_n "checking for iso-codes prefix... " >&6; }
+      ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
+      if test -d "$ISO_CODES_PREFIX"; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking ISO_CODES_PREFIX" >&5
+$as_echo_n "checking ISO_CODES_PREFIX... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ISO_CODES_PREFIX" >&5
+$as_echo "$ISO_CODES_PREFIX" >&6; }
+        ISO_639_DOMAIN="iso_639"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking ISO_639_DOMAIN" >&5
+$as_echo_n "checking ISO_639_DOMAIN... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ISO_639_DOMAIN" >&5
+$as_echo "$ISO_639_DOMAIN" >&6; }
+        have_iso_codes=yes
+
+$as_echo "#define HAVE_ISO_CODES 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define ISO_CODES_PREFIX "$ISO_CODES_PREFIX"
+_ACEOF
+
+        ISO_CODES_VERSION=`$PKG_CONFIG --modversion iso-codes`
+
+cat >>confdefs.h <<_ACEOF
+#define ISO_CODES_VERSION "$ISO_CODES_VERSION"
+_ACEOF
+
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      fi
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  fi
+   if test "x$have_iso_codes" = "xyes"; then
+  USE_ISO_CODES_TRUE=
+  USE_ISO_CODES_FALSE='#'
+else
+  USE_ISO_CODES_TRUE='#'
+  USE_ISO_CODES_FALSE=
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (disabled via --disable-iso-codes)" >&5
+$as_echo "no (disabled via --disable-iso-codes)" >&6; }
+   if false; then
+  USE_ISO_CODES_TRUE=
+  USE_ISO_CODES_FALSE='#'
+else
+  USE_ISO_CODES_TRUE='#'
+  USE_ISO_CODES_FALSE=
+fi
+
+fi
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: zlib support for ID3 parsing in libgsttag ***" >&5
+$as_echo "$as_me: *** checking feature: zlib support for ID3 parsing in libgsttag ***" >&6;}
+if test "x" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:  ***" >&5
+$as_echo "$as_me: *** for plug-ins:  ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_ZLIB" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-zlib was given.
+if test "${enable_zlib+set}" = set; then :
+  enableval=$enable_zlib;  case "${enableval}" in
+      yes) USE_ZLIB=yes;;
+      no) USE_ZLIB=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-zlib" "$LINENO" 5  ;;
+    esac
+else
+   USE_ZLIB=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_ZLIB="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: ***  pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " ZLIB " > /dev/null; then
+  USE_ZLIB="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  not ported" >&5
+$as_echo "$as_me: WARNING: ***  not ported" >&2;}
+fi
+
+
+if test x$USE_ZLIB = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_ZLIB=no
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZLIB" >&5
+$as_echo_n "checking for ZLIB... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ZLIB_CFLAGS"; then
+        pkg_cv_ZLIB_CFLAGS="$ZLIB_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" zlib \""; } >&5
+  ($PKG_CONFIG --exists --print-errors " zlib ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZLIB_CFLAGS=`$PKG_CONFIG --cflags " zlib " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ZLIB_LIBS"; then
+        pkg_cv_ZLIB_LIBS="$ZLIB_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" zlib \""; } >&5
+  ($PKG_CONFIG --exists --print-errors " zlib ") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ZLIB_LIBS=`$PKG_CONFIG --libs " zlib " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ZLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors " zlib "`
+        else
+	        ZLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors " zlib "`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ZLIB_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uncompress in -lz" >&5
+$as_echo_n "checking for uncompress in -lz... " >&6; }
+if test "${ac_cv_lib_z_uncompress+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char uncompress ();
+int
+main ()
+{
+return uncompress ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_z_uncompress=yes
+else
+  ac_cv_lib_z_uncompress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_uncompress" >&5
+$as_echo "$ac_cv_lib_z_uncompress" >&6; }
+if test "x$ac_cv_lib_z_uncompress" = x""yes; then :
+  HAVE_ZLIB=yes
+else
+  HAVE_ZLIB=no
+fi
+
+  if test "x$HAVE_ZLIB" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = x""yes; then :
+  :
+else
+  HAVE_ZLIB=no
+fi
+
+
+    if test "x$HAVE_ZLIB" = "xyes"; then
+
+        HAVE_ZLIB="yes"
+        ZLIB_LIBS="-lz"
+
+
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+
+elif test $pkg_failed = untried; then
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uncompress in -lz" >&5
+$as_echo_n "checking for uncompress in -lz... " >&6; }
+if test "${ac_cv_lib_z_uncompress+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char uncompress ();
+int
+main ()
+{
+return uncompress ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_z_uncompress=yes
+else
+  ac_cv_lib_z_uncompress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_uncompress" >&5
+$as_echo "$ac_cv_lib_z_uncompress" >&6; }
+if test "x$ac_cv_lib_z_uncompress" = x""yes; then :
+  HAVE_ZLIB=yes
+else
+  HAVE_ZLIB=no
+fi
+
+  if test "x$HAVE_ZLIB" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = x""yes; then :
+  :
+else
+  HAVE_ZLIB=no
+fi
+
+
+    if test "x$HAVE_ZLIB" = "xyes"; then
+
+        HAVE_ZLIB="yes"
+        ZLIB_LIBS="-lz"
+
+
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+
+else
+	ZLIB_CFLAGS=$pkg_cv_ZLIB_CFLAGS
+	ZLIB_LIBS=$pkg_cv_ZLIB_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_ZLIB="yes"
+
+fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_ZLIB = xno; then
+    USE_ZLIB=no
+  else
+    :
+  fi
+fi
+if test x$USE_ZLIB = xyes; then
+  :
+  if test "x" != "x"; then
+    GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_ZLIB /**/" >>confdefs.h
+
+else
+  :
+  if test "x" != "x"; then
+    GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_ZLIB = xyes; then
+  USE_ZLIB_TRUE=
+  USE_ZLIB_FALSE='#'
+else
+  USE_ZLIB_TRUE='#'
+  USE_ZLIB_FALSE=
+fi
+
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Checking libraries for plugins in sys/" >&5
+$as_echo "$as_me: Checking libraries for plugins in sys/" >&6;}
+echo
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
+    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+	@echo incroot='${INCROOT}'
+usrlibdir:
+	@echo usrlibdir='${USRLIBDIR}'
+libdir:
+	@echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl dylib la dll; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ac_x_includes= ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl dylib la dll; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+	ac_x_includes='$ac_x_includes'\
+	ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+	ac_x_includes='$x_includes'\
+	ac_x_libraries='$x_libraries'"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X libraries and plugins ***" >&5
+$as_echo "$as_me: *** checking feature: X libraries and plugins ***" >&6;}
+if test "xximagesink" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: ximagesink ***" >&5
+$as_echo "$as_me: *** for plug-ins: ximagesink ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_X" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-x was given.
+if test "${enable_x+set}" = set; then :
+  enableval=$enable_x;  case "${enableval}" in
+      yes) USE_X=yes;;
+      no) USE_X=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-x" "$LINENO" 5  ;;
+    esac
+else
+   USE_X=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_X="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ximagesink pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** ximagesink pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " X " > /dev/null; then
+  USE_X="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ximagesink not ported" >&5
+$as_echo "$as_me: WARNING: *** ximagesink not ported" >&2;}
+fi
+
+
+if test x$USE_X = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_X=no
+
+  if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	  X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = x""yes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+  ac_cflags_save="$CFLAGS"
+  ac_cppflags_save="$CPPFLAGS"
+  CFLAGS="$CFLAGS $X_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+    ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_X11_Xlib_h" = x""yes; then :
+  HAVE_X="yes"
+else
+  HAVE_X="no"
+fi
+
+
+
+  if test "x$HAVE_X" = "xno"
+  then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: cannot find X11 development files" >&5
+$as_echo "$as_me: cannot find X11 development files" >&6;}
+  else
+        X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS"
+            X_LIBS="$X_LIBS -lX11"
+
+
+  fi
+
+  CFLAGS="$ac_cflags_save"
+  CPPFLAGS="$ac_cppflags_save"
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_X = xno; then
+    USE_X=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: ximagesink" >&5
+$as_echo "$as_me: *** These plugins will be built: ximagesink" >&6;}
+  fi
+fi
+if test x$USE_X = xyes; then
+  :
+  if test "xximagesink" != "x"; then
+    GST_PLUGINS_YES="\tximagesink\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_X /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: ximagesink" >&5
+$as_echo "$as_me: *** These plugins will not be built: ximagesink" >&6;}
+  if test "xximagesink" != "x"; then
+    GST_PLUGINS_NO="\tximagesink\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_X = xyes; then
+  USE_X_TRUE=
+  USE_X_FALSE='#'
+else
+  USE_X_TRUE='#'
+  USE_X_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X11 XVideo extensions ***" >&5
+$as_echo "$as_me: *** checking feature: X11 XVideo extensions ***" >&6;}
+if test "xxvimagesink" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: xvimagesink ***" >&5
+$as_echo "$as_me: *** for plug-ins: xvimagesink ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_XVIDEO" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-xvideo was given.
+if test "${enable_xvideo+set}" = set; then :
+  enableval=$enable_xvideo;  case "${enableval}" in
+      yes) USE_XVIDEO=yes;;
+      no) USE_XVIDEO=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-xvideo" "$LINENO" 5  ;;
+    esac
+else
+   USE_XVIDEO=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_XVIDEO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** xvimagesink pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** xvimagesink pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " XVIDEO " > /dev/null; then
+  USE_XVIDEO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** xvimagesink not ported" >&5
+$as_echo "$as_me: WARNING: *** xvimagesink not ported" >&2;}
+fi
+
+
+if test x$USE_XVIDEO = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_XVIDEO=no
+
+
+  if test x$HAVE_X = xyes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv_pic" >&5
+$as_echo_n "checking for XvQueryExtension in -lXv_pic... " >&6; }
+if test "${ac_cv_lib_Xv_pic_XvQueryExtension+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXv_pic $X_LIBS -lXext $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XvQueryExtension ();
+int
+main ()
+{
+return XvQueryExtension ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_Xv_pic_XvQueryExtension=yes
+else
+  ac_cv_lib_Xv_pic_XvQueryExtension=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xv_pic_XvQueryExtension" >&5
+$as_echo "$ac_cv_lib_Xv_pic_XvQueryExtension" >&6; }
+if test "x$ac_cv_lib_Xv_pic_XvQueryExtension" = x""yes; then :
+  HAVE_XVIDEO="yes"
+else
+  HAVE_XVIDEO="no"
+fi
+
+
+    if test x$HAVE_XVIDEO = xyes; then
+      XVIDEO_LIBS="-lXv_pic -lXext"
+
+    else
+            if test x$HAVE_XVIDEO = xno; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv" >&5
+$as_echo_n "checking for XvQueryExtension in -lXv... " >&6; }
+if test "${ac_cv_lib_Xv_XvQueryExtension+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXv $X_LIBS -lXext $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XvQueryExtension ();
+int
+main ()
+{
+return XvQueryExtension ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_Xv_XvQueryExtension=yes
+else
+  ac_cv_lib_Xv_XvQueryExtension=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xv_XvQueryExtension" >&5
+$as_echo "$ac_cv_lib_Xv_XvQueryExtension" >&6; }
+if test "x$ac_cv_lib_Xv_XvQueryExtension" = x""yes; then :
+  HAVE_XVIDEO="yes"
+else
+  HAVE_XVIDEO="no"
+fi
+
+
+        if test x$HAVE_XVIDEO = xyes; then
+          XVIDEO_LIBS="-lXv -lXext"
+
+        fi
+      fi
+    fi
+  fi
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_XVIDEO = xno; then
+    USE_XVIDEO=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: xvimagesink" >&5
+$as_echo "$as_me: *** These plugins will be built: xvimagesink" >&6;}
+  fi
+fi
+if test x$USE_XVIDEO = xyes; then
+  :
+  if test "xxvimagesink" != "x"; then
+    GST_PLUGINS_YES="\txvimagesink\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_XVIDEO /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: xvimagesink" >&5
+$as_echo "$as_me: *** These plugins will not be built: xvimagesink" >&6;}
+  if test "xxvimagesink" != "x"; then
+    GST_PLUGINS_NO="\txvimagesink\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_XVIDEO = xyes; then
+  USE_XVIDEO_TRUE=
+  USE_XVIDEO_FALSE='#'
+else
+  USE_XVIDEO_TRUE='#'
+  USE_XVIDEO_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X Shared Memory extension ***" >&5
+$as_echo "$as_me: *** checking feature: X Shared Memory extension ***" >&6;}
+if test "x" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:  ***" >&5
+$as_echo "$as_me: *** for plug-ins:  ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_XSHM" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-xshm was given.
+if test "${enable_xshm+set}" = set; then :
+  enableval=$enable_xshm;  case "${enableval}" in
+      yes) USE_XSHM=yes;;
+      no) USE_XSHM=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-xshm" "$LINENO" 5  ;;
+    esac
+else
+   USE_XSHM=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_XSHM="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: ***  pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " XSHM " > /dev/null; then
+  USE_XSHM="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  not ported" >&5
+$as_echo "$as_me: WARNING: ***  not ported" >&2;}
+fi
+
+
+if test x$USE_XSHM = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_XSHM=no
+
+  if test x$HAVE_X = xyes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXext" >&5
+$as_echo_n "checking for XShmAttach in -lXext... " >&6; }
+if test "${ac_cv_lib_Xext_XShmAttach+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXext $X_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XShmAttach ();
+int
+main ()
+{
+return XShmAttach ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_Xext_XShmAttach=yes
+else
+  ac_cv_lib_Xext_XShmAttach=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XShmAttach" >&5
+$as_echo "$ac_cv_lib_Xext_XShmAttach" >&6; }
+if test "x$ac_cv_lib_Xext_XShmAttach" = x""yes; then :
+  HAVE_XSHM="yes"
+else
+  HAVE_XSHM="no"
+fi
+
+    if test "x$HAVE_XSHM" = "xyes"; then
+      XSHM_LIBS="-lXext"
+    else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXextSam" >&5
+$as_echo_n "checking for XShmAttach in -lXextSam... " >&6; }
+if test "${ac_cv_lib_XextSam_XShmAttach+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXextSam $X_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XShmAttach ();
+int
+main ()
+{
+return XShmAttach ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_XextSam_XShmAttach=yes
+else
+  ac_cv_lib_XextSam_XShmAttach=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmAttach" >&5
+$as_echo "$ac_cv_lib_XextSam_XShmAttach" >&6; }
+if test "x$ac_cv_lib_XextSam_XShmAttach" = x""yes; then :
+  HAVE_XSHM="yes"
+else
+  HAVE_XSHM="no"
+fi
+
+      if test "x$HAVE_XSHM" = "xyes"; then
+	XSHM_LIBS="-lXext -lXextSam"
+      fi
+    fi
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_XSHM = xno; then
+    USE_XSHM=no
+  else
+    :
+  fi
+fi
+if test x$USE_XSHM = xyes; then
+
+
+
+
+  if test "x" != "x"; then
+    GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_XSHM /**/" >>confdefs.h
+
+else
+  :
+  if test "x" != "x"; then
+    GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_XSHM = xyes; then
+  USE_XSHM_TRUE=
+  USE_XSHM_FALSE='#'
+else
+  USE_XSHM_TRUE='#'
+  USE_XSHM_FALSE=
+fi
+
+
+
+
+if test "x$BUILD_EXTERNAL" = "xyes"; then
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: Checking libraries for plugins in ext/" >&5
+$as_echo "$as_me: Checking libraries for plugins in ext/" >&6;}
+echo
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: ALSA ***" >&5
+$as_echo "$as_me: *** checking feature: ALSA ***" >&6;}
+if test "xalsa" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: alsa ***" >&5
+$as_echo "$as_me: *** for plug-ins: alsa ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_ALSA" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-alsa was given.
+if test "${enable_alsa+set}" = set; then :
+  enableval=$enable_alsa;  case "${enableval}" in
+      yes) USE_ALSA=yes;;
+      no) USE_ALSA=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-alsa" "$LINENO" 5  ;;
+    esac
+else
+   USE_ALSA=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_ALSA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** alsa pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** alsa pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " ALSA " > /dev/null; then
+  USE_ALSA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** alsa not ported" >&5
+$as_echo "$as_me: WARNING: *** alsa not ported" >&2;}
+fi
+
+
+if test x$USE_ALSA = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_ALSA=no
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5
+$as_echo_n "checking for ALSA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ALSA_CFLAGS"; then
+        pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "alsa >= 0.9.1") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 0.9.1" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ALSA_LIBS"; then
+        pkg_cv_ALSA_LIBS="$ALSA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "alsa >= 0.9.1") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa >= 0.9.1" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "alsa >= 0.9.1"`
+        else
+	        ALSA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "alsa >= 0.9.1"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ALSA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+    alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+
+# Check whether --with-alsa-prefix was given.
+if test "${with_alsa_prefix+set}" = set; then :
+  withval=$with_alsa_prefix; alsa_prefix="$withval"
+else
+  alsa_prefix=""
+fi
+
+
+
+# Check whether --with-alsa-inc-prefix was given.
+if test "${with_alsa_inc_prefix+set}" = set; then :
+  withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval"
+else
+  alsa_inc_prefix=""
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5
+$as_echo_n "checking for ALSA CFLAGS... " >&6; }
+if test "$alsa_inc_prefix" != "" ; then
+	ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix"
+	CFLAGS="$CFLAGS -I$alsa_inc_prefix"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5
+$as_echo "$ALSA_CFLAGS" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5
+$as_echo_n "checking for ALSA LDFLAGS... " >&6; }
+if test "$alsa_prefix" != "" ; then
+	ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix"
+	LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/  //'`
+LIBS="$ALSA_LIBS $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5
+$as_echo "$ALSA_LIBS" >&6; }
+
+min_alsa_version=0.9.1
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5
+$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; }
+no_alsa=""
+    alsa_min_major_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    alsa_min_minor_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    alsa_min_micro_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <alsa/asoundlib.h>
+
+int
+main ()
+{
+
+void main(void)
+{
+/* ensure backward compatibility */
+#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
+#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
+#endif
+#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR)
+#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR
+#endif
+#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR)
+#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR
+#endif
+
+#  if(SND_LIB_MAJOR > $alsa_min_major_version)
+  exit(0);
+#  else
+#    if(SND_LIB_MAJOR < $alsa_min_major_version)
+#       error not present
+#    endif
+
+#   if(SND_LIB_MINOR > $alsa_min_minor_version)
+  exit(0);
+#   else
+#     if(SND_LIB_MINOR < $alsa_min_minor_version)
+#          error not present
+#      endif
+
+#      if(SND_LIB_SUBMINOR < $alsa_min_micro_version)
+#        error not present
+#      endif
+#    endif
+#  endif
+exit(0);
+}
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5
+$as_echo "found." >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5
+$as_echo "not present." >&6; }
+
+   alsa_found=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+if test "x$enable_alsatest" = "xyes"; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_ctl_open in -lasound" >&5
+$as_echo_n "checking for snd_ctl_open in -lasound... " >&6; }
+if test "${ac_cv_lib_asound_snd_ctl_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lasound  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char snd_ctl_open ();
+int
+main ()
+{
+return snd_ctl_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_asound_snd_ctl_open=yes
+else
+  ac_cv_lib_asound_snd_ctl_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_ctl_open" >&5
+$as_echo "$ac_cv_lib_asound_snd_ctl_open" >&6; }
+if test "x$ac_cv_lib_asound_snd_ctl_open" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBASOUND 1
+_ACEOF
+
+  LIBS="-lasound $LIBS"
+
+else
+
+	 alsa_found=no
+
+fi
+
+fi
+
+if test "x$alsa_found" = "xyes" ; then
+   HAVE_ALSA="yes"
+   LIBS=`echo $LIBS | sed 's/-lasound//g'`
+   LIBS=`echo $LIBS | sed 's/  //'`
+   LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+   HAVE_ALSA="no"
+   CFLAGS="$alsa_save_CFLAGS"
+   LDFLAGS="$alsa_save_LDFLAGS"
+   LIBS="$alsa_save_LIBS"
+   ALSA_CFLAGS=""
+   ALSA_LIBS=""
+fi
+
+
+
+
+
+elif test $pkg_failed = untried; then
+
+    alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+
+# Check whether --with-alsa-prefix was given.
+if test "${with_alsa_prefix+set}" = set; then :
+  withval=$with_alsa_prefix; alsa_prefix="$withval"
+else
+  alsa_prefix=""
+fi
+
+
+
+# Check whether --with-alsa-inc-prefix was given.
+if test "${with_alsa_inc_prefix+set}" = set; then :
+  withval=$with_alsa_inc_prefix; alsa_inc_prefix="$withval"
+else
+  alsa_inc_prefix=""
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA CFLAGS" >&5
+$as_echo_n "checking for ALSA CFLAGS... " >&6; }
+if test "$alsa_inc_prefix" != "" ; then
+	ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix"
+	CFLAGS="$CFLAGS -I$alsa_inc_prefix"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_CFLAGS" >&5
+$as_echo "$ALSA_CFLAGS" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA LDFLAGS" >&5
+$as_echo_n "checking for ALSA LDFLAGS... " >&6; }
+if test "$alsa_prefix" != "" ; then
+	ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix"
+	LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/  //'`
+LIBS="$ALSA_LIBS $LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ALSA_LIBS" >&5
+$as_echo "$ALSA_LIBS" >&6; }
+
+min_alsa_version=0.9.1
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libasound headers version >= $min_alsa_version" >&5
+$as_echo_n "checking for libasound headers version >= $min_alsa_version... " >&6; }
+no_alsa=""
+    alsa_min_major_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    alsa_min_minor_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    alsa_min_micro_version=`echo $min_alsa_version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <alsa/asoundlib.h>
+
+int
+main ()
+{
+
+void main(void)
+{
+/* ensure backward compatibility */
+#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
+#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
+#endif
+#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR)
+#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR
+#endif
+#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR)
+#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR
+#endif
+
+#  if(SND_LIB_MAJOR > $alsa_min_major_version)
+  exit(0);
+#  else
+#    if(SND_LIB_MAJOR < $alsa_min_major_version)
+#       error not present
+#    endif
+
+#   if(SND_LIB_MINOR > $alsa_min_minor_version)
+  exit(0);
+#   else
+#     if(SND_LIB_MINOR < $alsa_min_minor_version)
+#          error not present
+#      endif
+
+#      if(SND_LIB_SUBMINOR < $alsa_min_micro_version)
+#        error not present
+#      endif
+#    endif
+#  endif
+exit(0);
+}
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: found." >&5
+$as_echo "found." >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: not present." >&5
+$as_echo "not present." >&6; }
+
+   alsa_found=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+if test "x$enable_alsatest" = "xyes"; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_ctl_open in -lasound" >&5
+$as_echo_n "checking for snd_ctl_open in -lasound... " >&6; }
+if test "${ac_cv_lib_asound_snd_ctl_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lasound  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char snd_ctl_open ();
+int
+main ()
+{
+return snd_ctl_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_asound_snd_ctl_open=yes
+else
+  ac_cv_lib_asound_snd_ctl_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_ctl_open" >&5
+$as_echo "$ac_cv_lib_asound_snd_ctl_open" >&6; }
+if test "x$ac_cv_lib_asound_snd_ctl_open" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBASOUND 1
+_ACEOF
+
+  LIBS="-lasound $LIBS"
+
+else
+
+	 alsa_found=no
+
+fi
+
+fi
+
+if test "x$alsa_found" = "xyes" ; then
+   HAVE_ALSA="yes"
+   LIBS=`echo $LIBS | sed 's/-lasound//g'`
+   LIBS=`echo $LIBS | sed 's/  //'`
+   LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+   HAVE_ALSA="no"
+   CFLAGS="$alsa_save_CFLAGS"
+   LDFLAGS="$alsa_save_LDFLAGS"
+   LIBS="$alsa_save_LIBS"
+   ALSA_CFLAGS=""
+   ALSA_LIBS=""
+fi
+
+
+
+
+
+else
+	ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS
+	ALSA_LIBS=$pkg_cv_ALSA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+    HAVE_ALSA="yes"
+
+
+
+fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_ALSA = xno; then
+    USE_ALSA=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: alsa" >&5
+$as_echo "$as_me: *** These plugins will be built: alsa" >&6;}
+  fi
+fi
+if test x$USE_ALSA = xyes; then
+  :
+  if test "xalsa" != "x"; then
+    GST_PLUGINS_YES="\talsa\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_ALSA /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: alsa" >&5
+$as_echo "$as_me: *** These plugins will not be built: alsa" >&6;}
+  if test "xalsa" != "x"; then
+    GST_PLUGINS_NO="\talsa\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_ALSA = xyes; then
+  USE_ALSA_TRUE=
+  USE_ALSA_FALSE='#'
+else
+  USE_ALSA_TRUE='#'
+  USE_ALSA_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: CDParanoia ***" >&5
+$as_echo "$as_me: *** checking feature: CDParanoia ***" >&6;}
+if test "xcdparanoia" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: cdparanoia ***" >&5
+$as_echo "$as_me: *** for plug-ins: cdparanoia ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_CDPARANOIA" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-cdparanoia was given.
+if test "${enable_cdparanoia+set}" = set; then :
+  enableval=$enable_cdparanoia;  case "${enableval}" in
+      yes) USE_CDPARANOIA=yes;;
+      no) USE_CDPARANOIA=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-cdparanoia" "$LINENO" 5  ;;
+    esac
+else
+   USE_CDPARANOIA=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_CDPARANOIA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** cdparanoia pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** cdparanoia pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " CDPARANOIA " > /dev/null; then
+  USE_CDPARANOIA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** cdparanoia not ported" >&5
+$as_echo "$as_me: WARNING: *** cdparanoia not ported" >&2;}
+fi
+
+
+if test x$USE_CDPARANOIA = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_CDPARANOIA=no
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CDPARANOIA" >&5
+$as_echo_n "checking for CDPARANOIA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CDPARANOIA_CFLAGS"; then
+        pkg_cv_CDPARANOIA_CFLAGS="$CDPARANOIA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cdparanoia-3 >= 10.2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cdparanoia-3 >= 10.2") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CDPARANOIA_CFLAGS=`$PKG_CONFIG --cflags "cdparanoia-3 >= 10.2" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CDPARANOIA_LIBS"; then
+        pkg_cv_CDPARANOIA_LIBS="$CDPARANOIA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cdparanoia-3 >= 10.2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "cdparanoia-3 >= 10.2") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_CDPARANOIA_LIBS=`$PKG_CONFIG --libs "cdparanoia-3 >= 10.2" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        CDPARANOIA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cdparanoia-3 >= 10.2"`
+        else
+	        CDPARANOIA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cdparanoia-3 >= 10.2"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$CDPARANOIA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cdda_open in -lcdda_interface" >&5
+$as_echo_n "checking for cdda_open in -lcdda_interface... " >&6; }
+if test "${ac_cv_lib_cdda_interface_cdda_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_interface -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cdda_open ();
+int
+main ()
+{
+return cdda_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_interface_cdda_open=yes
+else
+  ac_cv_lib_cdda_interface_cdda_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_interface_cdda_open" >&5
+$as_echo "$ac_cv_lib_cdda_interface_cdda_open" >&6; }
+if test "x$ac_cv_lib_cdda_interface_cdda_open" = x""yes; then :
+  HAVE_CDPARANOIA=yes
+else
+  HAVE_CDPARANOIA=no
+fi
+
+  if test "x$HAVE_CDPARANOIA" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "cdda_interface.h" "ac_cv_header_cdda_interface_h" "$ac_includes_default"
+if test "x$ac_cv_header_cdda_interface_h" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+
+    if test "x$HAVE_CDPARANOIA" = "xyes"; then
+            CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                        HEADER_DIR="no"
+                        FOUND_CDPARANOIA="yes"
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+    if test "x$FOUND_CDPARANOIA" != "xyes";
+    then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cdda_open in -lcdda_interface" >&5
+$as_echo_n "checking for cdda_open in -lcdda_interface... " >&6; }
+if test "${ac_cv_lib_cdda_interface_cdda_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_interface -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cdda_open ();
+int
+main ()
+{
+return cdda_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_interface_cdda_open=yes
+else
+  ac_cv_lib_cdda_interface_cdda_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_interface_cdda_open" >&5
+$as_echo "$ac_cv_lib_cdda_interface_cdda_open" >&6; }
+if test "x$ac_cv_lib_cdda_interface_cdda_open" = x""yes; then :
+  HAVE_CDPARANOIA=yes
+else
+  HAVE_CDPARANOIA=no
+fi
+
+  if test "x$HAVE_CDPARANOIA" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "cdda/cdda_interface.h" "ac_cv_header_cdda_cdda_interface_h" "$ac_includes_default"
+if test "x$ac_cv_header_cdda_cdda_interface_h" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+
+    if test "x$HAVE_CDPARANOIA" = "xyes"; then
+            CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                          HEADER_DIR="yes"
+                          FOUND_CDPARANOIA="yes"
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+    fi
+    if test "x$HEADER_DIR" = "xyes";
+    then
+
+cat >>confdefs.h <<_ACEOF
+#define CDPARANOIA_HEADERS_IN_DIR /**/
+_ACEOF
+
+    fi
+    if test "x$FOUND_CDPARANOIA" = "xyes";
+    then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for paranoia_cachemodel_size in -lcdda_paranoia" >&5
+$as_echo_n "checking for paranoia_cachemodel_size in -lcdda_paranoia... " >&6; }
+if test "${ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_paranoia -lcdda_interface $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char paranoia_cachemodel_size ();
+int
+main ()
+{
+return paranoia_cachemodel_size ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size=yes
+else
+  ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" >&5
+$as_echo "$ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" >&6; }
+if test "x$ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+    fi
+
+
+
+elif test $pkg_failed = untried; then
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cdda_open in -lcdda_interface" >&5
+$as_echo_n "checking for cdda_open in -lcdda_interface... " >&6; }
+if test "${ac_cv_lib_cdda_interface_cdda_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_interface -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cdda_open ();
+int
+main ()
+{
+return cdda_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_interface_cdda_open=yes
+else
+  ac_cv_lib_cdda_interface_cdda_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_interface_cdda_open" >&5
+$as_echo "$ac_cv_lib_cdda_interface_cdda_open" >&6; }
+if test "x$ac_cv_lib_cdda_interface_cdda_open" = x""yes; then :
+  HAVE_CDPARANOIA=yes
+else
+  HAVE_CDPARANOIA=no
+fi
+
+  if test "x$HAVE_CDPARANOIA" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "cdda_interface.h" "ac_cv_header_cdda_interface_h" "$ac_includes_default"
+if test "x$ac_cv_header_cdda_interface_h" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+
+    if test "x$HAVE_CDPARANOIA" = "xyes"; then
+            CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                        HEADER_DIR="no"
+                        FOUND_CDPARANOIA="yes"
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+    if test "x$FOUND_CDPARANOIA" != "xyes";
+    then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cdda_open in -lcdda_interface" >&5
+$as_echo_n "checking for cdda_open in -lcdda_interface... " >&6; }
+if test "${ac_cv_lib_cdda_interface_cdda_open+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_interface -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cdda_open ();
+int
+main ()
+{
+return cdda_open ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_interface_cdda_open=yes
+else
+  ac_cv_lib_cdda_interface_cdda_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_interface_cdda_open" >&5
+$as_echo "$ac_cv_lib_cdda_interface_cdda_open" >&6; }
+if test "x$ac_cv_lib_cdda_interface_cdda_open" = x""yes; then :
+  HAVE_CDPARANOIA=yes
+else
+  HAVE_CDPARANOIA=no
+fi
+
+  if test "x$HAVE_CDPARANOIA" = "xyes"; then
+    ac_fn_c_check_header_mongrel "$LINENO" "cdda/cdda_interface.h" "ac_cv_header_cdda_cdda_interface_h" "$ac_includes_default"
+if test "x$ac_cv_header_cdda_cdda_interface_h" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+
+    if test "x$HAVE_CDPARANOIA" = "xyes"; then
+            CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                          HEADER_DIR="yes"
+                          FOUND_CDPARANOIA="yes"
+    else
+      :
+    fi
+  else
+    :
+  fi
+
+
+
+    fi
+    if test "x$HEADER_DIR" = "xyes";
+    then
+
+cat >>confdefs.h <<_ACEOF
+#define CDPARANOIA_HEADERS_IN_DIR /**/
+_ACEOF
+
+    fi
+    if test "x$FOUND_CDPARANOIA" = "xyes";
+    then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for paranoia_cachemodel_size in -lcdda_paranoia" >&5
+$as_echo_n "checking for paranoia_cachemodel_size in -lcdda_paranoia... " >&6; }
+if test "${ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcdda_paranoia -lcdda_interface $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char paranoia_cachemodel_size ();
+int
+main ()
+{
+return paranoia_cachemodel_size ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size=yes
+else
+  ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" >&5
+$as_echo "$ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" >&6; }
+if test "x$ac_cv_lib_cdda_paranoia_paranoia_cachemodel_size" = x""yes; then :
+  :
+else
+  HAVE_CDPARANOIA=no
+fi
+
+    fi
+
+
+
+else
+	CDPARANOIA_CFLAGS=$pkg_cv_CDPARANOIA_CFLAGS
+	CDPARANOIA_LIBS=$pkg_cv_CDPARANOIA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+    HAVE_CDPARANOIA="yes"
+
+fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_CDPARANOIA = xno; then
+    USE_CDPARANOIA=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: cdparanoia" >&5
+$as_echo "$as_me: *** These plugins will be built: cdparanoia" >&6;}
+  fi
+fi
+if test x$USE_CDPARANOIA = xyes; then
+  :
+  if test "xcdparanoia" != "x"; then
+    GST_PLUGINS_YES="\tcdparanoia\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_CDPARANOIA /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: cdparanoia" >&5
+$as_echo "$as_me: *** These plugins will not be built: cdparanoia" >&6;}
+  if test "xcdparanoia" != "x"; then
+    GST_PLUGINS_NO="\tcdparanoia\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_CDPARANOIA = xyes; then
+  USE_CDPARANOIA_TRUE=
+  USE_CDPARANOIA_FALSE='#'
+else
+  USE_CDPARANOIA_TRUE='#'
+  USE_CDPARANOIA_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: integer vorbis plug-in ***" >&5
+$as_echo "$as_me: *** checking feature: integer vorbis plug-in ***" >&6;}
+if test "xivorbisdec" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: ivorbisdec ***" >&5
+$as_echo "$as_me: *** for plug-ins: ivorbisdec ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_IVORBIS" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-ivorbis was given.
+if test "${enable_ivorbis+set}" = set; then :
+  enableval=$enable_ivorbis;  case "${enableval}" in
+      yes) USE_IVORBIS=yes;;
+      no) USE_IVORBIS=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-ivorbis" "$LINENO" 5  ;;
+    esac
+else
+   USE_IVORBIS=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_IVORBIS="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ivorbisdec pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** ivorbisdec pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " IVORBIS " > /dev/null; then
+  USE_IVORBIS="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ivorbisdec not ported" >&5
+$as_echo "$as_me: WARNING: *** ivorbisdec not ported" >&2;}
+fi
+
+
+if test x$USE_IVORBIS = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_IVORBIS=no
+
+
+  which="vorbisidec"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IVORBIS" >&5
+$as_echo_n "checking for IVORBIS... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$IVORBIS_CFLAGS"; then
+        pkg_cv_IVORBIS_CFLAGS="$IVORBIS_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_IVORBIS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$IVORBIS_LIBS"; then
+        pkg_cv_IVORBIS_LIBS="$IVORBIS_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_IVORBIS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        IVORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        IVORBIS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$IVORBIS_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_IVORBIS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$IVORBIS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $IVORBIS_PKG_ERRORS" >&5
+$as_echo "$as_me: $IVORBIS_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_IVORBIS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$IVORBIS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $IVORBIS_PKG_ERRORS" >&5
+$as_echo "$as_me: $IVORBIS_PKG_ERRORS" >&6;}
+      fi
+
+else
+	IVORBIS_CFLAGS=$pkg_cv_IVORBIS_CFLAGS
+	IVORBIS_LIBS=$pkg_cv_IVORBIS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_IVORBIS="yes"
+
+fi
+
+
+  if test $HAVE_IVORBIS = no
+  then
+    IVORBIS_LIBS=
+    IVORBIS_CFLAGS=
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vorbis_block_init in -lvorbisidec" >&5
+$as_echo_n "checking for vorbis_block_init in -lvorbisidec... " >&6; }
+if test "${ac_cv_lib_vorbisidec_vorbis_block_init+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lvorbisidec  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char vorbis_block_init ();
+int
+main ()
+{
+return vorbis_block_init ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_vorbisidec_vorbis_block_init=yes
+else
+  ac_cv_lib_vorbisidec_vorbis_block_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vorbisidec_vorbis_block_init" >&5
+$as_echo "$ac_cv_lib_vorbisidec_vorbis_block_init" >&6; }
+if test "x$ac_cv_lib_vorbisidec_vorbis_block_init" = x""yes; then :
+  IVORBIS_LIBS=-lvorbisidec
+      HAVE_IVORBIS=yes
+      case $host in
+      arm-*-*)
+        IVORBIS_CFLAGS="-D_ARM_ASSEM_ $IVORBIS_CFLAGS"
+      esac
+
+else
+  HAVE_IVORBIS=no
+fi
+
+
+
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vorbis_dsp_pcmout in -lvorbisidec" >&5
+$as_echo_n "checking for vorbis_dsp_pcmout in -lvorbisidec... " >&6; }
+if test "${ac_cv_lib_vorbisidec_vorbis_dsp_pcmout+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lvorbisidec  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char vorbis_dsp_pcmout ();
+int
+main ()
+{
+return vorbis_dsp_pcmout ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_vorbisidec_vorbis_dsp_pcmout=yes
+else
+  ac_cv_lib_vorbisidec_vorbis_dsp_pcmout=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vorbisidec_vorbis_dsp_pcmout" >&5
+$as_echo "$ac_cv_lib_vorbisidec_vorbis_dsp_pcmout" >&6; }
+if test "x$ac_cv_lib_vorbisidec_vorbis_dsp_pcmout" = x""yes; then :
+
+$as_echo "#define USE_TREMOLO 1" >>confdefs.h
+
+else
+  USE_TREMOLO=no
+fi
+
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_IVORBIS = xno; then
+    USE_IVORBIS=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: ivorbisdec" >&5
+$as_echo "$as_me: *** These plugins will be built: ivorbisdec" >&6;}
+  fi
+fi
+if test x$USE_IVORBIS = xyes; then
+  :
+  if test "xivorbisdec" != "x"; then
+    GST_PLUGINS_YES="\tivorbisdec\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_IVORBIS /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: ivorbisdec" >&5
+$as_echo "$as_me: *** These plugins will not be built: ivorbisdec" >&6;}
+  if test "xivorbisdec" != "x"; then
+    GST_PLUGINS_NO="\tivorbisdec\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_IVORBIS = xyes; then
+  USE_IVORBIS_TRUE=
+  USE_IVORBIS_FALSE='#'
+else
+  USE_IVORBIS_TRUE='#'
+  USE_IVORBIS_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: GIO library ***" >&5
+$as_echo "$as_me: *** checking feature: GIO library ***" >&6;}
+if test "xgio" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: gio ***" >&5
+$as_echo "$as_me: *** for plug-ins: gio ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_GIO" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-gio was given.
+if test "${enable_gio+set}" = set; then :
+  enableval=$enable_gio;  case "${enableval}" in
+      yes) USE_GIO=yes;;
+      no) USE_GIO=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-gio" "$LINENO" 5  ;;
+    esac
+else
+   USE_GIO=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_GIO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** gio pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " GIO " > /dev/null; then
+  USE_GIO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio not ported" >&5
+$as_echo "$as_me: WARNING: *** gio not ported" >&2;}
+fi
+
+
+if test x$USE_GIO = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_GIO=no
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO" >&5
+$as_echo_n "checking for GIO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GIO_CFLAGS"; then
+        pkg_cv_GIO_CFLAGS="$GIO_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.16\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.16") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.16" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GIO_LIBS"; then
+        pkg_cv_GIO_LIBS="$GIO_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.16\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.16") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.16" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gio-2.0 >= 2.16"`
+        else
+	        GIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-2.0 >= 2.16"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GIO_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+    HAVE_GIO="no"
+
+elif test $pkg_failed = untried; then
+
+    HAVE_GIO="no"
+
+else
+	GIO_CFLAGS=$pkg_cv_GIO_CFLAGS
+	GIO_LIBS=$pkg_cv_GIO_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+    HAVE_GIO="yes"
+    GIO_MODULE_DIR="`$PKG_CONFIG --variable=giomoduledir gio-2.0`"
+
+cat >>confdefs.h <<_ACEOF
+#define GIO_MODULE_DIR "$GIO_MODULE_DIR"
+_ACEOF
+
+    GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`"
+
+cat >>confdefs.h <<_ACEOF
+#define GIO_LIBDIR "$GIO_LIBDIR"
+_ACEOF
+
+
+fi
+
+
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_GIO = xno; then
+    USE_GIO=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: gio" >&5
+$as_echo "$as_me: *** These plugins will be built: gio" >&6;}
+  fi
+fi
+if test x$USE_GIO = xyes; then
+  :
+  if test "xgio" != "x"; then
+    GST_PLUGINS_YES="\tgio\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_GIO /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: gio" >&5
+$as_echo "$as_me: *** These plugins will not be built: gio" >&6;}
+  if test "xgio" != "x"; then
+    GST_PLUGINS_NO="\tgio\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_GIO = xyes; then
+  USE_GIO_TRUE=
+  USE_GIO_FALSE='#'
+else
+  USE_GIO_TRUE='#'
+  USE_GIO_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: libvisual visualization library ***" >&5
+$as_echo "$as_me: *** checking feature: libvisual visualization library ***" >&6;}
+if test "xlibvisual" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: libvisual ***" >&5
+$as_echo "$as_me: *** for plug-ins: libvisual ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_LIBVISUAL" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-libvisual was given.
+if test "${enable_libvisual+set}" = set; then :
+  enableval=$enable_libvisual;  case "${enableval}" in
+      yes) USE_LIBVISUAL=yes;;
+      no) USE_LIBVISUAL=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-libvisual" "$LINENO" 5  ;;
+    esac
+else
+   USE_LIBVISUAL=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_LIBVISUAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** libvisual pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** libvisual pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " LIBVISUAL " > /dev/null; then
+  USE_LIBVISUAL="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** libvisual not ported" >&5
+$as_echo "$as_me: WARNING: *** libvisual not ported" >&2;}
+fi
+
+
+if test x$USE_LIBVISUAL = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_LIBVISUAL=no
+
+
+  which="libvisual-0.4 >= 0.4.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVISUAL" >&5
+$as_echo_n "checking for LIBVISUAL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBVISUAL_CFLAGS"; then
+        pkg_cv_LIBVISUAL_CFLAGS="$LIBVISUAL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBVISUAL_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBVISUAL_LIBS"; then
+        pkg_cv_LIBVISUAL_LIBS="$LIBVISUAL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBVISUAL_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LIBVISUAL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        LIBVISUAL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LIBVISUAL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_LIBVISUAL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$LIBVISUAL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $LIBVISUAL_PKG_ERRORS" >&5
+$as_echo "$as_me: $LIBVISUAL_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_LIBVISUAL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$LIBVISUAL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $LIBVISUAL_PKG_ERRORS" >&5
+$as_echo "$as_me: $LIBVISUAL_PKG_ERRORS" >&6;}
+      fi
+
+else
+	LIBVISUAL_CFLAGS=$pkg_cv_LIBVISUAL_CFLAGS
+	LIBVISUAL_LIBS=$pkg_cv_LIBVISUAL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_LIBVISUAL="yes"
+
+fi
+
+
+  if test $HAVE_LIBVISUAL = no
+  then
+
+  which="libvisual = 0.2.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBVISUAL" >&5
+$as_echo_n "checking for LIBVISUAL... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBVISUAL_CFLAGS"; then
+        pkg_cv_LIBVISUAL_CFLAGS="$LIBVISUAL_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBVISUAL_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBVISUAL_LIBS"; then
+        pkg_cv_LIBVISUAL_LIBS="$LIBVISUAL_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBVISUAL_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LIBVISUAL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        LIBVISUAL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LIBVISUAL_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_LIBVISUAL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$LIBVISUAL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $LIBVISUAL_PKG_ERRORS" >&5
+$as_echo "$as_me: $LIBVISUAL_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_LIBVISUAL="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$LIBVISUAL_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $LIBVISUAL_PKG_ERRORS" >&5
+$as_echo "$as_me: $LIBVISUAL_PKG_ERRORS" >&6;}
+      fi
+
+else
+	LIBVISUAL_CFLAGS=$pkg_cv_LIBVISUAL_CFLAGS
+	LIBVISUAL_LIBS=$pkg_cv_LIBVISUAL_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_LIBVISUAL="yes"
+
+fi
+
+
+    if test x$HAVE_LIBVISUAL = xyes; then
+      LIBVIS_PLUGINSDIR="`$PKG_CONFIG --variable=pluginsbasedir libvisual-0.2`"
+    fi
+  else
+    if test x$HAVE_LIBVISUAL = xyes; then
+      LIBVIS_PLUGINSDIR="`$PKG_CONFIG --variable=pluginsbasedir libvisual-0.4`"
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: libvisual pluginsdir: $LIBVIS_PLUGINSDIR" >&5
+$as_echo "$as_me: libvisual pluginsdir: $LIBVIS_PLUGINSDIR" >&6;}
+  if test x$LIBVIS_PLUGINSDIR != x; then
+
+cat >>confdefs.h <<_ACEOF
+#define LIBVISUAL_PLUGINSBASEDIR "$LIBVIS_PLUGINSDIR"
+_ACEOF
+
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_LIBVISUAL = xno; then
+    USE_LIBVISUAL=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: libvisual" >&5
+$as_echo "$as_me: *** These plugins will be built: libvisual" >&6;}
+  fi
+fi
+if test x$USE_LIBVISUAL = xyes; then
+  :
+  if test "xlibvisual" != "x"; then
+    GST_PLUGINS_YES="\tlibvisual\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_LIBVISUAL /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: libvisual" >&5
+$as_echo "$as_me: *** These plugins will not be built: libvisual" >&6;}
+  if test "xlibvisual" != "x"; then
+    GST_PLUGINS_NO="\tlibvisual\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_LIBVISUAL = xyes; then
+  USE_LIBVISUAL_TRUE=
+  USE_LIBVISUAL_FALSE='#'
+else
+  USE_LIBVISUAL_TRUE='#'
+  USE_LIBVISUAL_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Xiph Ogg library ***" >&5
+$as_echo "$as_me: *** checking feature: Xiph Ogg library ***" >&6;}
+if test "xogg" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: ogg ***" >&5
+$as_echo "$as_me: *** for plug-ins: ogg ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_OGG" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-ogg was given.
+if test "${enable_ogg+set}" = set; then :
+  enableval=$enable_ogg;  case "${enableval}" in
+      yes) USE_OGG=yes;;
+      no) USE_OGG=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-ogg" "$LINENO" 5  ;;
+    esac
+else
+   USE_OGG=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_OGG="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ogg pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** ogg pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " OGG " > /dev/null; then
+  USE_OGG="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ogg not ported" >&5
+$as_echo "$as_me: WARNING: *** ogg not ported" >&2;}
+fi
+
+
+if test x$USE_OGG = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_OGG=no
+
+
+  which="ogg >= 1.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OGG" >&5
+$as_echo_n "checking for OGG... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$OGG_CFLAGS"; then
+        pkg_cv_OGG_CFLAGS="$OGG_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_OGG_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$OGG_LIBS"; then
+        pkg_cv_OGG_LIBS="$OGG_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_OGG_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        OGG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        OGG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$OGG_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_OGG="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$OGG_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $OGG_PKG_ERRORS" >&5
+$as_echo "$as_me: $OGG_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_OGG="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$OGG_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $OGG_PKG_ERRORS" >&5
+$as_echo "$as_me: $OGG_PKG_ERRORS" >&6;}
+      fi
+
+else
+	OGG_CFLAGS=$pkg_cv_OGG_CFLAGS
+	OGG_LIBS=$pkg_cv_OGG_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_OGG="yes"
+
+fi
+
+
+  if test $HAVE_OGG = no
+  then
+
+# Check whether --with-ogg was given.
+if test "${with_ogg+set}" = set; then :
+  withval=$with_ogg; ogg_prefix="$withval"
+else
+  ogg_prefix=""
+fi
+
+
+# Check whether --with-ogg-libraries was given.
+if test "${with_ogg_libraries+set}" = set; then :
+  withval=$with_ogg_libraries; ogg_libraries="$withval"
+else
+  ogg_libraries=""
+fi
+
+
+# Check whether --with-ogg-includes was given.
+if test "${with_ogg_includes+set}" = set; then :
+  withval=$with_ogg_includes; ogg_includes="$withval"
+else
+  ogg_includes=""
+fi
+
+# Check whether --enable-oggtest was given.
+if test "${enable_oggtest+set}" = set; then :
+  enableval=$enable_oggtest;
+else
+  enable_oggtest=yes
+fi
+
+
+  if test "x$ogg_libraries" != "x" ; then
+    OGG_LIBS="-L$ogg_libraries"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE" ; then
+    OGG_LIBS="-L$prefix/lib"
+  fi
+
+  OGG_LIBS="$OGG_LIBS -logg"
+
+  if test "x$ogg_includes" != "x" ; then
+    OGG_CFLAGS="-I$ogg_includes"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_CFLAGS="-I$ogg_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    OGG_CFLAGS="-I$prefix/include"
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Ogg" >&5
+$as_echo_n "checking for Ogg... " >&6; }
+  no_ogg=""
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+      rm -f conf.oggtest
+      if test "$cross_compiling" = yes; then :
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  no_ogg=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "x" ; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+     HAVE_OGG="yes"
+  else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <ogg/ogg.h>
+
+int
+main ()
+{
+ return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+   echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+   echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed."
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     HAVE_OGG="no"
+  fi
+
+
+  rm -f conf.oggtest
+
+
+  GIVEN_CFLAGS=$OGG_CFLAGS
+  INCLUDE_DIRS=`echo | cpp -v 2>&1`
+
+      INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'`
+  for dir in $INCLUDE_DIRS; do
+        GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"`
+  done
+  OGG_CFLAGS=$GIVEN_CFLAGS
+
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_OGG = xno; then
+    USE_OGG=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: ogg" >&5
+$as_echo "$as_me: *** These plugins will be built: ogg" >&6;}
+  fi
+fi
+if test x$USE_OGG = xyes; then
+  :
+  if test "xogg" != "x"; then
+    GST_PLUGINS_YES="\togg\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_OGG /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: ogg" >&5
+$as_echo "$as_me: *** These plugins will not be built: ogg" >&6;}
+  if test "xogg" != "x"; then
+    GST_PLUGINS_NO="\togg\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_OGG = xyes; then
+  USE_OGG_TRUE=
+  USE_OGG_FALSE='#'
+else
+  USE_OGG_TRUE='#'
+  USE_OGG_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Pango font rendering ***" >&5
+$as_echo "$as_me: *** checking feature: Pango font rendering ***" >&6;}
+if test "xpango" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: pango ***" >&5
+$as_echo "$as_me: *** for plug-ins: pango ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_PANGO" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-pango was given.
+if test "${enable_pango+set}" = set; then :
+  enableval=$enable_pango;  case "${enableval}" in
+      yes) USE_PANGO=yes;;
+      no) USE_PANGO=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-pango" "$LINENO" 5  ;;
+    esac
+else
+   USE_PANGO=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_PANGO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** pango pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** pango pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " PANGO " > /dev/null; then
+  USE_PANGO="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** pango not ported" >&5
+$as_echo "$as_me: WARNING: *** pango not ported" >&2;}
+fi
+
+
+if test x$USE_PANGO = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_PANGO=no
+
+
+  which="pango >= 1.16.0  pangocairo >= 1.16.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGO" >&5
+$as_echo_n "checking for PANGO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$PANGO_CFLAGS"; then
+        pkg_cv_PANGO_CFLAGS="$PANGO_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_PANGO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$PANGO_LIBS"; then
+        pkg_cv_PANGO_LIBS="$PANGO_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_PANGO_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        PANGO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        PANGO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$PANGO_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_PANGO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$PANGO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $PANGO_PKG_ERRORS" >&5
+$as_echo "$as_me: $PANGO_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_PANGO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$PANGO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $PANGO_PKG_ERRORS" >&5
+$as_echo "$as_me: $PANGO_PKG_ERRORS" >&6;}
+      fi
+
+else
+	PANGO_CFLAGS=$pkg_cv_PANGO_CFLAGS
+	PANGO_LIBS=$pkg_cv_PANGO_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_PANGO="yes"
+
+fi
+
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_PANGO = xno; then
+    USE_PANGO=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: pango" >&5
+$as_echo "$as_me: *** These plugins will be built: pango" >&6;}
+  fi
+fi
+if test x$USE_PANGO = xyes; then
+  :
+  if test "xpango" != "x"; then
+    GST_PLUGINS_YES="\tpango\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_PANGO /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: pango" >&5
+$as_echo "$as_me: *** These plugins will not be built: pango" >&6;}
+  if test "xpango" != "x"; then
+    GST_PLUGINS_NO="\tpango\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_PANGO = xyes; then
+  USE_PANGO_TRUE=
+  USE_PANGO_FALSE='#'
+else
+  USE_PANGO_TRUE='#'
+  USE_PANGO_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Xiph Theora video codec ***" >&5
+$as_echo "$as_me: *** checking feature: Xiph Theora video codec ***" >&6;}
+if test "xtheora" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: theora ***" >&5
+$as_echo "$as_me: *** for plug-ins: theora ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_THEORA" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-theora was given.
+if test "${enable_theora+set}" = set; then :
+  enableval=$enable_theora;  case "${enableval}" in
+      yes) USE_THEORA=yes;;
+      no) USE_THEORA=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-theora" "$LINENO" 5  ;;
+    esac
+else
+   USE_THEORA=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_THEORA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** theora pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** theora pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " THEORA " > /dev/null; then
+  USE_THEORA="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** theora not ported" >&5
+$as_echo "$as_me: WARNING: *** theora not ported" >&2;}
+fi
+
+
+if test x$USE_THEORA = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_THEORA=no
+
+
+  which="theoradec >= 1.1 theoraenc >= 1.1"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for THEORA" >&5
+$as_echo_n "checking for THEORA... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$THEORA_CFLAGS"; then
+        pkg_cv_THEORA_CFLAGS="$THEORA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_THEORA_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$THEORA_LIBS"; then
+        pkg_cv_THEORA_LIBS="$THEORA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_THEORA_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        THEORA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        THEORA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$THEORA_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_THEORA="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$THEORA_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $THEORA_PKG_ERRORS" >&5
+$as_echo "$as_me: $THEORA_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_THEORA="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$THEORA_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $THEORA_PKG_ERRORS" >&5
+$as_echo "$as_me: $THEORA_PKG_ERRORS" >&6;}
+      fi
+
+else
+	THEORA_CFLAGS=$pkg_cv_THEORA_CFLAGS
+	THEORA_LIBS=$pkg_cv_THEORA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_THEORA="yes"
+
+fi
+
+
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_THEORA = xno; then
+    USE_THEORA=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: theora" >&5
+$as_echo "$as_me: *** These plugins will be built: theora" >&6;}
+  fi
+fi
+if test x$USE_THEORA = xyes; then
+  :
+  if test "xtheora" != "x"; then
+    GST_PLUGINS_YES="\ttheora\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_THEORA /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: theora" >&5
+$as_echo "$as_me: *** These plugins will not be built: theora" >&6;}
+  if test "xtheora" != "x"; then
+    GST_PLUGINS_NO="\ttheora\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_THEORA = xyes; then
+  USE_THEORA_TRUE=
+  USE_THEORA_FALSE='#'
+else
+  USE_THEORA_TRUE='#'
+  USE_THEORA_FALSE=
+fi
+
+
+
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Xiph Vorbis audio codec ***" >&5
+$as_echo "$as_me: *** checking feature: Xiph Vorbis audio codec ***" >&6;}
+if test "xvorbis" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: vorbis ***" >&5
+$as_echo "$as_me: *** for plug-ins: vorbis ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_VORBIS" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-vorbis was given.
+if test "${enable_vorbis+set}" = set; then :
+  enableval=$enable_vorbis;  case "${enableval}" in
+      yes) USE_VORBIS=yes;;
+      no) USE_VORBIS=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-vorbis" "$LINENO" 5  ;;
+    esac
+else
+   USE_VORBIS=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_VORBIS="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** vorbis pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** vorbis pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " VORBIS " > /dev/null; then
+  USE_VORBIS="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** vorbis not ported" >&5
+$as_echo "$as_me: WARNING: *** vorbis not ported" >&2;}
+fi
+
+
+if test x$USE_VORBIS = xyes; then
+
+  gst_check_save_LIBS=$LIBS
+  gst_check_save_LDFLAGS=$LDFLAGS
+  gst_check_save_CFLAGS=$CFLAGS
+  gst_check_save_CPPFLAGS=$CPPFLAGS
+  gst_check_save_CXXFLAGS=$CXXFLAGS
+
+  HAVE_VORBIS=no
+
+
+  which="vorbis >= 1.0 vorbisenc >= 1.0"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VORBIS" >&5
+$as_echo_n "checking for VORBIS... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VORBIS_CFLAGS"; then
+        pkg_cv_VORBIS_CFLAGS="$VORBIS_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VORBIS_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VORBIS_LIBS"; then
+        pkg_cv_VORBIS_LIBS="$VORBIS_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VORBIS_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        VORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        VORBIS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$VORBIS_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_VORBIS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$VORBIS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $VORBIS_PKG_ERRORS" >&5
+$as_echo "$as_me: $VORBIS_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_VORBIS="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$VORBIS_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $VORBIS_PKG_ERRORS" >&5
+$as_echo "$as_me: $VORBIS_PKG_ERRORS" >&6;}
+      fi
+
+else
+	VORBIS_CFLAGS=$pkg_cv_VORBIS_CFLAGS
+	VORBIS_LIBS=$pkg_cv_VORBIS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_VORBIS="yes"
+
+fi
+
+
+  if test $HAVE_VORBIS = no
+  then
+
+# Check whether --with-vorbis was given.
+if test "${with_vorbis+set}" = set; then :
+  withval=$with_vorbis; vorbis_prefix="$withval"
+else
+  vorbis_prefix=""
+fi
+
+
+# Check whether --with-vorbis-libraries was given.
+if test "${with_vorbis_libraries+set}" = set; then :
+  withval=$with_vorbis_libraries; vorbis_libraries="$withval"
+else
+  vorbis_libraries=""
+fi
+
+
+# Check whether --with-vorbis-includes was given.
+if test "${with_vorbis_includes+set}" = set; then :
+  withval=$with_vorbis_includes; vorbis_includes="$withval"
+else
+  vorbis_includes=""
+fi
+
+# Check whether --enable-vorbistest was given.
+if test "${enable_vorbistest+set}" = set; then :
+  enableval=$enable_vorbistest;
+else
+  enable_vorbistest=yes
+fi
+
+
+  if test "x$vorbis_libraries" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_libraries"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_LIBS="-L$prefix/lib"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBS -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  if test "x$vorbis_includes" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_includes"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_CFLAGS="-I$prefix/include"
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Vorbis" >&5
+$as_echo_n "checking for Vorbis... " >&6; }
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $VORBISENC_LIBS $OGG_LIBS"
+      rm -f conf.vorbistest
+      if test "$cross_compiling" = yes; then :
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+int main ()
+{
+    vorbis_block 	vb;
+    vorbis_dsp_state	vd;
+    vorbis_info		vi;
+
+    vorbis_info_init (&vi);
+    vorbis_encode_init (&vi, 2, 44100, -1, 128000, -1);
+    vorbis_analysis_init (&vd, &vi);
+    vorbis_block_init (&vd, &vb);
+    /* this function was added in 1.0rc3, so this is what we're testing for */
+    vorbis_bitrate_addblock (&vb);
+
+    /* this define was added in 1.0 final */
+#ifdef OV_ECTL_RATEMANAGE_SET
+    system("touch conf.vorbistest");
+    return 0;
+#else
+    return -1;
+#endif
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  no_vorbis=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+     HAVE_VORBIS="yes"
+  else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <vorbis/codec.h>
+
+int
+main ()
+{
+ return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+   echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+   echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed."
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     HAVE_VORBIS="no"
+  fi
+
+
+
+
+  rm -f conf.vorbistest
+
+
+  GIVEN_CFLAGS=$VORBIS_CFLAGS
+  INCLUDE_DIRS=`echo | cpp -v 2>&1`
+
+      INCLUDE_DIRS=`echo $INCLUDE_DIRS | sed -e 's/.*<...> search starts here://' | sed -e 's/End of search list.*//'`
+  for dir in $INCLUDE_DIRS; do
+        GIVEN_CFLAGS=`echo $GIVEN_CFLAGS | sed -e "s#-I$dir ##"`
+  done
+  VORBIS_CFLAGS=$GIVEN_CFLAGS
+
+  fi
+
+
+  LIBS=$gst_check_save_LIBS
+  LDFLAGS=$gst_check_save_LDFLAGS
+  CFLAGS=$gst_check_save_CFLAGS
+  CPPFLAGS=$gst_check_save_CPPFLAGS
+  CXXFLAGS=$gst_check_save_CXXFLAGS
+
+    if test x$HAVE_VORBIS = xno; then
+    USE_VORBIS=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: vorbis" >&5
+$as_echo "$as_me: *** These plugins will be built: vorbis" >&6;}
+  fi
+fi
+if test x$USE_VORBIS = xyes; then
+  :
+  if test "xvorbis" != "x"; then
+    GST_PLUGINS_YES="\tvorbis\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_VORBIS /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: vorbis" >&5
+$as_echo "$as_me: *** These plugins will not be built: vorbis" >&6;}
+  if test "xvorbis" != "x"; then
+    GST_PLUGINS_NO="\tvorbis\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_VORBIS = xyes; then
+  USE_VORBIS_TRUE=
+  USE_VORBIS_FALSE='#'
+else
+  USE_VORBIS_TRUE='#'
+  USE_VORBIS_FALSE=
+fi
+
+
+
+if test "x$HAVE_VORBIS" = "xyes"; then
+  ac_cflags_save="$CFLAGS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vorbis/codec.h>
+
+int
+main ()
+{
+
+vorbis_dsp_state *v;
+
+vorbis_synthesis_restart (v);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  HAVE_VSR=yes
+else
+  HAVE_VSR=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test "x$HAVE_VSR" = "xyes"; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VORBIS_SYNTHESIS_RESTART 1
+_ACEOF
+
+  fi
+  CFLAGS="$ac_cflags_save"
+fi
+
+else
+
+ if false; then
+  USE_ALSA_TRUE=
+  USE_ALSA_FALSE='#'
+else
+  USE_ALSA_TRUE='#'
+  USE_ALSA_FALSE=
+fi
+
+ if false; then
+  USE_CDPARANOIA_TRUE=
+  USE_CDPARANOIA_FALSE='#'
+else
+  USE_CDPARANOIA_TRUE='#'
+  USE_CDPARANOIA_FALSE=
+fi
+
+ if false; then
+  USE_GIO_TRUE=
+  USE_GIO_FALSE='#'
+else
+  USE_GIO_TRUE='#'
+  USE_GIO_FALSE=
+fi
+
+ if false; then
+  USE_IVORBIS_TRUE=
+  USE_IVORBIS_FALSE='#'
+else
+  USE_IVORBIS_TRUE='#'
+  USE_IVORBIS_FALSE=
+fi
+
+ if false; then
+  USE_LIBVISUAL_TRUE=
+  USE_LIBVISUAL_FALSE='#'
+else
+  USE_LIBVISUAL_TRUE='#'
+  USE_LIBVISUAL_FALSE=
+fi
+
+ if false; then
+  USE_OGG_TRUE=
+  USE_OGG_FALSE='#'
+else
+  USE_OGG_TRUE='#'
+  USE_OGG_FALSE=
+fi
+
+ if false; then
+  USE_PANGO_TRUE=
+  USE_PANGO_FALSE='#'
+else
+  USE_PANGO_TRUE='#'
+  USE_PANGO_FALSE=
+fi
+
+ if false; then
+  USE_THEORA_TRUE=
+  USE_THEORA_FALSE='#'
+else
+  USE_THEORA_TRUE='#'
+  USE_THEORA_FALSE=
+fi
+
+ if false; then
+  USE_VORBIS_TRUE=
+  USE_VORBIS_FALSE='#'
+else
+  USE_VORBIS_TRUE='#'
+  USE_VORBIS_FALSE=
+fi
+
+
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT2" >&5
+$as_echo_n "checking for FT2... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FT2_CFLAGS"; then
+        pkg_cv_FT2_CFLAGS="$FT2_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 2.0.9\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= 2.0.9") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FT2_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= 2.0.9" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FT2_LIBS"; then
+        pkg_cv_FT2_LIBS="$FT2_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 2.0.9\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2 >= 2.0.9") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_FT2_LIBS=`$PKG_CONFIG --libs "freetype2 >= 2.0.9" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        FT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "freetype2 >= 2.0.9"`
+        else
+	        FT2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2 >= 2.0.9"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$FT2_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
+# Check whether --with-ft-prefix was given.
+if test "${with_ft_prefix+set}" = set; then :
+  withval=$with_ft_prefix; ft_config_prefix="$withval"
+else
+  ft_config_prefix=""
+fi
+
+
+# Check whether --with-ft-exec-prefix was given.
+if test "${with_ft_exec_prefix+set}" = set; then :
+  withval=$with_ft_exec_prefix; ft_config_exec_prefix="$withval"
+else
+  ft_config_exec_prefix=""
+fi
+
+# Check whether --enable-freetypetest was given.
+if test "${enable_freetypetest+set}" = set; then :
+  enableval=$enable_freetypetest;
+else
+  enable_fttest=yes
+fi
+
+
+if test x$ft_config_exec_prefix != x ; then
+  ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+  fi
+fi
+if test x$ft_config_prefix != x ; then
+  ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+  fi
+fi
+# Extract the first word of "freetype-config", so it can be a program name with args.
+set dummy freetype-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FT2_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $FT2_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FT2_CONFIG="$FT2_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_FT2_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_FT2_CONFIG" && ac_cv_path_FT2_CONFIG="no"
+  ;;
+esac
+fi
+FT2_CONFIG=$ac_cv_path_FT2_CONFIG
+if test -n "$FT2_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FT2_CONFIG" >&5
+$as_echo "$FT2_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+min_ft_version=2.0.9
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeType - version >= $min_ft_version" >&5
+$as_echo_n "checking for FreeType - version >= $min_ft_version... " >&6; }
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+  no_ft=yes
+else
+  FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+  FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+  ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+  ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+  ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+  ft_min_major_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+  ft_min_minor_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+  ft_min_micro_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+  if test x$enable_fttest = xyes ; then
+    ft_config_is_lt=""
+    if test $ft_config_major_version -lt $ft_min_major_version ; then
+      ft_config_is_lt=yes
+    else
+      if test $ft_config_major_version -eq $ft_min_major_version ; then
+        if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+          ft_config_is_lt=yes
+        else
+          if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+            if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+              ft_config_is_lt=yes
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test x$ft_config_is_lt = xyes ; then
+      no_ft=yes
+    else
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $FT2_CFLAGS"
+      LIBS="$FT2_LIBS $LIBS"
+      if test "$cross_compiling" = yes; then :
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+  FT_Library library;
+  FT_Error error;
+
+  error = FT_Init_FreeType(&library);
+
+  if (error)
+    return 1;
+  else
+  {
+    FT_Done_FreeType(library);
+    return 0;
+  }
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  no_ft=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      CFLAGS="$ac_save_CFLAGS"
+      LIBS="$ac_save_LIBS"
+    fi             # test $ft_config_version -lt $ft_min_version
+  fi               # test x$enable_fttest = xyes
+fi                 # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   HAVE_FT2="yes"
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+   if test "$FT2_CONFIG" = "no" ; then
+     echo "*** The freetype-config script installed by FreeType 2 could not be found."
+     echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+     echo "*** your path, or set the FT2_CONFIG environment variable to the"
+     echo "*** full path to freetype-config."
+   else
+     if test x$ft_config_is_lt = xyes ; then
+       echo "*** Your installed version of the FreeType 2 library is too old."
+       echo "*** If you have different versions of FreeType 2, make sure that"
+       echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+       echo "*** are used, or set the FT2_CONFIG environment variable to the"
+       echo "*** full path to freetype-config."
+     else
+       echo "*** The FreeType test program failed to run.  If your system uses"
+       echo "*** shared libraries and they are installed outside the normal"
+       echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+       echo "*** (or whatever is appropiate for your system) is correctly set."
+     fi
+   fi
+   FT2_CFLAGS=""
+   FT2_LIBS=""
+   HAVE_FT2="no"
+fi
+
+
+
+
+elif test $pkg_failed = untried; then
+
+
+# Check whether --with-ft-prefix was given.
+if test "${with_ft_prefix+set}" = set; then :
+  withval=$with_ft_prefix; ft_config_prefix="$withval"
+else
+  ft_config_prefix=""
+fi
+
+
+# Check whether --with-ft-exec-prefix was given.
+if test "${with_ft_exec_prefix+set}" = set; then :
+  withval=$with_ft_exec_prefix; ft_config_exec_prefix="$withval"
+else
+  ft_config_exec_prefix=""
+fi
+
+# Check whether --enable-freetypetest was given.
+if test "${enable_freetypetest+set}" = set; then :
+  enableval=$enable_freetypetest;
+else
+  enable_fttest=yes
+fi
+
+
+if test x$ft_config_exec_prefix != x ; then
+  ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+  fi
+fi
+if test x$ft_config_prefix != x ; then
+  ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+  fi
+fi
+# Extract the first word of "freetype-config", so it can be a program name with args.
+set dummy freetype-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FT2_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $FT2_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FT2_CONFIG="$FT2_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_FT2_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_FT2_CONFIG" && ac_cv_path_FT2_CONFIG="no"
+  ;;
+esac
+fi
+FT2_CONFIG=$ac_cv_path_FT2_CONFIG
+if test -n "$FT2_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FT2_CONFIG" >&5
+$as_echo "$FT2_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+min_ft_version=2.0.9
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeType - version >= $min_ft_version" >&5
+$as_echo_n "checking for FreeType - version >= $min_ft_version... " >&6; }
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+  no_ft=yes
+else
+  FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+  FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+  ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+  ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+  ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+  ft_min_major_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+  ft_min_minor_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+  ft_min_micro_version=`echo $min_ft_version | \
+         sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+  if test x$enable_fttest = xyes ; then
+    ft_config_is_lt=""
+    if test $ft_config_major_version -lt $ft_min_major_version ; then
+      ft_config_is_lt=yes
+    else
+      if test $ft_config_major_version -eq $ft_min_major_version ; then
+        if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+          ft_config_is_lt=yes
+        else
+          if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+            if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+              ft_config_is_lt=yes
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test x$ft_config_is_lt = xyes ; then
+      no_ft=yes
+    else
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $FT2_CFLAGS"
+      LIBS="$FT2_LIBS $LIBS"
+      if test "$cross_compiling" = yes; then :
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+  FT_Library library;
+  FT_Error error;
+
+  error = FT_Init_FreeType(&library);
+
+  if (error)
+    return 1;
+  else
+  {
+    FT_Done_FreeType(library);
+    return 0;
+  }
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  no_ft=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      CFLAGS="$ac_save_CFLAGS"
+      LIBS="$ac_save_LIBS"
+    fi             # test $ft_config_version -lt $ft_min_version
+  fi               # test x$enable_fttest = xyes
+fi                 # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   HAVE_FT2="yes"
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+   if test "$FT2_CONFIG" = "no" ; then
+     echo "*** The freetype-config script installed by FreeType 2 could not be found."
+     echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+     echo "*** your path, or set the FT2_CONFIG environment variable to the"
+     echo "*** full path to freetype-config."
+   else
+     if test x$ft_config_is_lt = xyes ; then
+       echo "*** Your installed version of the FreeType 2 library is too old."
+       echo "*** If you have different versions of FreeType 2, make sure that"
+       echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+       echo "*** are used, or set the FT2_CONFIG environment variable to the"
+       echo "*** full path to freetype-config."
+     else
+       echo "*** The FreeType test program failed to run.  If your system uses"
+       echo "*** shared libraries and they are installed outside the normal"
+       echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+       echo "*** (or whatever is appropiate for your system) is correctly set."
+     fi
+   fi
+   FT2_CFLAGS=""
+   FT2_LIBS=""
+   HAVE_FT2="no"
+fi
+
+
+
+
+else
+	FT2_CFLAGS=$pkg_cv_FT2_CFLAGS
+	FT2_LIBS=$pkg_cv_FT2_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_FT2="yes"
+fi
+ if test "x$HAVE_FT2" = "xyes"; then
+  HAVE_FT2_TRUE=
+  HAVE_FT2_FALSE='#'
+else
+  HAVE_FT2_TRUE='#'
+  HAVE_FT2_FALSE=
+fi
+
+
+
+
+
+
+if test "x$USE_DEBUG" = xyes; then
+   PROFILE_CFLAGS="-g"
+fi
+
+
+if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+    DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
+else
+  DEPRECATED_CFLAGS=""
+fi
+
+
+GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
+GST_OPTION_CXXFLAGS="\$(WARNING_CXXFLAGS) \$(ERROR_CXXFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
+
+
+
+
+
+GST_PLUGINS_BASE_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
+
+
+GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
+GST_CXXFLAGS="$GLIB_CFLAGS $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CXXFLAGS)"
+GST_CFLAGS="$GLIB_CFLAGS $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
+
+
+GST_LIBS="$GST_LIBS \$(GCOV_LIBS)"
+
+
+GST_ALL_LDFLAGS="-no-undefined"
+if test "x${enable_Bsymbolic}" = "xyes"; then
+  GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
+fi
+
+
+GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
+
+
+GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^_*gst_plugin_desc.*' $GST_ALL_LDFLAGS"
+
+
+
+ac_config_files="$ac_config_files Makefile gst-plugins-base.spec gst/Makefile gst/adder/Makefile gst/app/Makefile gst/audioconvert/Makefile gst/audiorate/Makefile gst/audiotestsrc/Makefile gst/encoding/Makefile gst/videoconvert/Makefile gst/gdp/Makefile gst/playback/Makefile gst/audioresample/Makefile gst/subparse/Makefile gst/tcp/Makefile gst/typefind/Makefile gst/videotestsrc/Makefile gst/videorate/Makefile gst/videoscale/Makefile gst/volume/Makefile sys/Makefile sys/ximage/Makefile sys/xvimage/Makefile ext/Makefile ext/alsa/Makefile ext/cdparanoia/Makefile ext/gio/Makefile ext/libvisual/Makefile ext/ogg/Makefile ext/pango/Makefile ext/theora/Makefile ext/vorbis/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/audio/Makefile gst-libs/gst/app/Makefile gst-libs/gst/cdda/Makefile gst-libs/gst/fft/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/netbuffer/Makefile gst-libs/gst/riff/Makefile gst-libs/gst/rtp/Makefile gst-libs/gst/rtsp/Makefile gst-libs/gst/sdp/Makefile gst-libs/gst/tag/Makefile gst-libs/gst/pbutils/Makefile gst-libs/gst/pbutils/gstpluginsbaseversion.h gst-libs/gst/video/Makefile tools/Makefile pkgconfig/Makefile pkgconfig/gstreamer-audio.pc pkgconfig/gstreamer-audio-uninstalled.pc pkgconfig/gstreamer-app.pc pkgconfig/gstreamer-app-uninstalled.pc pkgconfig/gstreamer-cdda.pc pkgconfig/gstreamer-cdda-uninstalled.pc pkgconfig/gstreamer-fft.pc pkgconfig/gstreamer-fft-uninstalled.pc pkgconfig/gstreamer-interfaces.pc pkgconfig/gstreamer-interfaces-uninstalled.pc pkgconfig/gstreamer-netbuffer.pc pkgconfig/gstreamer-netbuffer-uninstalled.pc pkgconfig/gstreamer-pbutils.pc pkgconfig/gstreamer-pbutils-uninstalled.pc pkgconfig/gstreamer-riff.pc pkgconfig/gstreamer-riff-uninstalled.pc pkgconfig/gstreamer-rtp.pc pkgconfig/gstreamer-rtp-uninstalled.pc pkgconfig/gstreamer-rtsp.pc pkgconfig/gstreamer-rtsp-uninstalled.pc pkgconfig/gstreamer-sdp.pc pkgconfig/gstreamer-sdp-uninstalled.pc pkgconfig/gstreamer-tag.pc pkgconfig/gstreamer-tag-uninstalled.pc pkgconfig/gstreamer-video.pc pkgconfig/gstreamer-video-uninstalled.pc pkgconfig/gstreamer-plugins-base.pc pkgconfig/gstreamer-plugins-base-uninstalled.pc tests/Makefile tests/check/Makefile tests/examples/Makefile tests/examples/app/Makefile tests/examples/audio/Makefile tests/examples/dynamic/Makefile tests/examples/encoding/Makefile tests/examples/gio/Makefile tests/examples/overlay/Makefile tests/examples/seek/Makefile tests/examples/snapshot/Makefile tests/examples/playrec/Makefile tests/examples/volume/Makefile tests/files/Makefile tests/icles/Makefile tests/icles/playback/Makefile docs/Makefile docs/design/Makefile docs/libs/Makefile docs/plugins/Makefile docs/version.entities po/Makefile.in common/Makefile common/m4/Makefile m4/Makefile"
+
+
+sed \
+    -e 's/.*config.h.in.*autoheader.*/\/* Autogenerated config.h created for win32 Visual Studio builds *\/\n\n\/* PREFIX -- specifically added for Windows for easier moving *\/\n#define PREFIX "C:\\\\gstreamer"/' \
+    -e 's/.* GST_INSTALL_PLUGINS_HELPER/#define GST_INSTALL_PLUGINS_HELPER PREFIX "\\\\libexec\\\\gst-install-plugins-helper.exe"/' \
+    -e 's/.* GETTEXT_PACKAGE$/#define GETTEXT_PACKAGE "'$GETTEXT_PACKAGE'"/' \
+    -e 's/.* GST_DATADIR$/#define GST_DATADIR PREFIX "\\\\share"/' \
+    -e 's/.* GST_LEVEL_DEFAULT$/#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR/' \
+    -e 's/.* GST_LICENSE$/#define GST_LICENSE "'$GST_LICENSE'"/' \
+    -e 's/.* GST_MAJORMINOR$/#define GST_MAJORMINOR "'$GST_MAJORMINOR'"/' \
+    -e "s,.* GST_PACKAGE_NAME$,#define GST_PACKAGE_NAME \"${GST_PACKAGE_NAME}\"," \
+    -e 's/.* GST_PACKAGE_ORIGIN$/#define GST_PACKAGE_ORIGIN "Unknown package origin"/' \
+    -e "s,.* GST_PACKAGE_RELEASE_DATETIME$,#define GST_PACKAGE_RELEASE_DATETIME \"${GST_PACKAGE_RELEASE_DATETIME}\"," \
+    -e 's/.* HAVE_CPU_I386$/#define HAVE_CPU_I386 1/' \
+    -e 's/.* HAVE_FGETPOS$/#define HAVE_FGETPOS 1/' \
+    -e 's/.* HAVE_FSETPOS$/#define HAVE_FSETPOS 1/' \
+    -e 's/.* HAVE_ISO_CODES$/#undef HAVE_ISO_CODES/' \
+    -e 's/.* HAVE_LIBXML2$/#define HAVE_LIBXML2 1/' \
+    -e 's/.* HAVE_PROCESS_H$/#define HAVE_PROCESS_H 1/' \
+    -e 's/.* HAVE_STDLIB_H$/#define HAVE_STDLIB_H 1/' \
+    -e 's/.* HAVE_STRING_H$/#define HAVE_STRING_H 1/' \
+    -e 's/.* HAVE_SYS_STAT_H$/#define HAVE_SYS_STAT_H 1/' \
+    -e 's/.* HAVE_SYS_TYPES_H$/#define HAVE_SYS_TYPES_H 1/' \
+    -e 's/.* HAVE_WIN32$/#define HAVE_WIN32 1/' \
+    -e 's/.* HAVE_WINSOCK2_H$/#define HAVE_WINSOCK2_H 1/' \
+    -e 's/.* HOST_CPU$/#define HOST_CPU "i686"/' \
+    -e 's/.* ISO_CODES_PREFIX$/#undef ISO_CODES_PREFIX/' \
+    -e 's/.* ISO_CODES_VERSION$/#undef ISO_CODES_VERSION/' \
+    -e 's/.* LIBDIR$/#ifdef _DEBUG\n#  define LIBDIR PREFIX "\\\\debug\\\\lib"\n#else\n#  define LIBDIR PREFIX "\\\\lib"\n#endif/' \
+    -e 's/.* LOCALEDIR$/#define LOCALEDIR PREFIX "\\\\share\\\\locale"/' \
+    -e "s/.* PACKAGE$/#define PACKAGE \"$PACKAGE\"/" \
+    -e 's/.* PACKAGE_BUGREPORT$/#define PACKAGE_BUGREPORT "http:\/\/bugzilla.gnome.org\/enter_bug.cgi?product=GStreamer"/' \
+    -e "s/.* PACKAGE_NAME$/#define PACKAGE_NAME \"$PACKAGE_NAME\"/" \
+    -e "s/.* PACKAGE_STRING$/#define PACKAGE_STRING \"$PACKAGE_STRING\"/" \
+    -e 's/.* PACKAGE_TARNAME$/#define PACKAGE_TARNAME "'$PACKAGE_TARNAME'"/' \
+    -e 's/.* PACKAGE_VERSION$/#define PACKAGE_VERSION "'$PACKAGE_VERSION'"/' \
+    -e 's/.* PLUGINDIR$/#ifdef _DEBUG\n#  define PLUGINDIR PREFIX "\\\\debug\\\\lib\\\\gstreamer-0.11"\n#else\n#  define PLUGINDIR PREFIX "\\\\lib\\\\gstreamer-0.11"\n#endif/' \
+    -e 's/.* USE_BINARY_REGISTRY$/#define USE_BINARY_REGISTRY/' \
+    -e 's/.* VERSION$/#define VERSION "'$VERSION'"/' \
+    -e "s/.* DEFAULT_AUDIOSINK$/#define DEFAULT_AUDIOSINK \"directsoundsink\"/" \
+    -e "s/.* DEFAULT_VIDEOSINK$/#define DEFAULT_VIDEOSINK \"directdrawsink\"/" \
+    -e "s/.* DEFAULT_VISUALIZER$/#define DEFAULT_VISUALIZER \"goom\"/" \
+    config.h.in >win32/common/config.h-new
+
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GST_GCOV_ENABLED_TRUE}" && test -z "${GST_GCOV_ENABLED_FALSE}"; then
+  as_fn_error $? "conditional \"GST_GCOV_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_EXAMPLES_TRUE}" && test -z "${BUILD_EXAMPLES_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_EXAMPLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_EXTERNAL_TRUE}" && test -z "${USE_EXTERNAL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_EXTERNAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_EXTERNAL_TRUE}" && test -z "${BUILD_EXTERNAL_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_EXTERNAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_EXPERIMENTAL_TRUE}" && test -z "${USE_EXPERIMENTAL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_EXPERIMENTAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_EXPERIMENTAL_TRUE}" && test -z "${BUILD_EXPERIMENTAL_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_EXPERIMENTAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${HAVE_CPU_I386_TRUE}" && test -z "${HAVE_CPU_I386_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_I386\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_PPC_TRUE}" && test -z "${HAVE_CPU_PPC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_PPC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_PPC64_TRUE}" && test -z "${HAVE_CPU_PPC64_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_PPC64\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_ALPHA_TRUE}" && test -z "${HAVE_CPU_ALPHA_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_ALPHA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_ARM_TRUE}" && test -z "${HAVE_CPU_ARM_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_ARM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_SPARC_TRUE}" && test -z "${HAVE_CPU_SPARC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_SPARC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_HPPA_TRUE}" && test -z "${HAVE_CPU_HPPA_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_HPPA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_MIPS_TRUE}" && test -z "${HAVE_CPU_MIPS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_MIPS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_S390_TRUE}" && test -z "${HAVE_CPU_S390_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_S390\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_IA64_TRUE}" && test -z "${HAVE_CPU_IA64_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_IA64\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_M68K_TRUE}" && test -z "${HAVE_CPU_M68K_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_M68K\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_X86_64_TRUE}" && test -z "${HAVE_CPU_X86_64_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_X86_64\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_CRIS_TRUE}" && test -z "${HAVE_CPU_CRIS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_CRIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CPU_CRISV32_TRUE}" && test -z "${HAVE_CPU_CRISV32_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_CRISV32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CXX_TRUE}" && test -z "${HAVE_CXX_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_VALGRIND_TRUE}" && test -z "${HAVE_VALGRIND_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_VALGRIND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_INTROSPECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_PLUGIN_DOCS_TRUE}" && test -z "${ENABLE_PLUGIN_DOCS_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_PLUGIN_DOCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LIBXML_HTML_TRUE}" && test -z "${HAVE_LIBXML_HTML_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LIBXML_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_SYS_SOCKET_H_TRUE}" && test -z "${HAVE_SYS_SOCKET_H_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_SYS_SOCKET_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_ORC_TRUE}" && test -z "${HAVE_ORC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_ORC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_ORCC_TRUE}" && test -z "${HAVE_ORCC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_ORCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GST_CHECK_TRUE}" && test -z "${HAVE_GST_CHECK_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GST_CHECK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GTK_TRUE}" && test -z "${HAVE_GTK_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GTK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GTK_X11_TRUE}" && test -z "${HAVE_GTK_X11_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_GTK_X11\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_QT_TRUE}" && test -z "${HAVE_QT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_QT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_QT_GV_TRUE}" && test -z "${HAVE_QT_GV_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_QT_GV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LINUX_JOYSTICK_HEADERS_TRUE}" && test -z "${HAVE_LINUX_JOYSTICK_HEADERS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LINUX_JOYSTICK_HEADERS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_ADDER_TRUE}" && test -z "${USE_PLUGIN_ADDER_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_ADDER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_APP_TRUE}" && test -z "${USE_PLUGIN_APP_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_APP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_AUDIOCONVERT_TRUE}" && test -z "${USE_PLUGIN_AUDIOCONVERT_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_AUDIOCONVERT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_AUDIORATE_TRUE}" && test -z "${USE_PLUGIN_AUDIORATE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_AUDIORATE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_AUDIOTESTSRC_TRUE}" && test -z "${USE_PLUGIN_AUDIOTESTSRC_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_AUDIOTESTSRC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_ENCODING_TRUE}" && test -z "${USE_PLUGIN_ENCODING_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_ENCODING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_VIDEOCONVERT_TRUE}" && test -z "${USE_PLUGIN_VIDEOCONVERT_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VIDEOCONVERT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_GDP_TRUE}" && test -z "${USE_PLUGIN_GDP_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_GDP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_PLAYBACK_TRUE}" && test -z "${USE_PLUGIN_PLAYBACK_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_PLAYBACK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_AUDIORESAMPLE_TRUE}" && test -z "${USE_PLUGIN_AUDIORESAMPLE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_AUDIORESAMPLE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_SUBPARSE_TRUE}" && test -z "${USE_PLUGIN_SUBPARSE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_SUBPARSE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_TCP_TRUE}" && test -z "${USE_PLUGIN_TCP_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_TCP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_TYPEFIND_TRUE}" && test -z "${USE_PLUGIN_TYPEFIND_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_TYPEFIND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_VIDEOTESTSRC_TRUE}" && test -z "${USE_PLUGIN_VIDEOTESTSRC_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VIDEOTESTSRC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_VIDEORATE_TRUE}" && test -z "${USE_PLUGIN_VIDEORATE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VIDEORATE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_VIDEOSCALE_TRUE}" && test -z "${USE_PLUGIN_VIDEOSCALE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VIDEOSCALE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_VOLUME_TRUE}" && test -z "${USE_PLUGIN_VOLUME_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_VOLUME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_XML_TRUE}" && test -z "${USE_XML_FALSE}"; then
+  as_fn_error $? "conditional \"USE_XML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_SUBPARSE_TRUE}" && test -z "${USE_PLUGIN_SUBPARSE_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_SUBPARSE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PLUGIN_TCP_TRUE}" && test -z "${USE_PLUGIN_TCP_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PLUGIN_TCP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ISO_CODES_TRUE}" && test -z "${USE_ISO_CODES_FALSE}"; then
+  as_fn_error $? "conditional \"USE_ISO_CODES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ISO_CODES_TRUE}" && test -z "${USE_ISO_CODES_FALSE}"; then
+  as_fn_error $? "conditional \"USE_ISO_CODES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ZLIB_TRUE}" && test -z "${USE_ZLIB_FALSE}"; then
+  as_fn_error $? "conditional \"USE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_X_TRUE}" && test -z "${USE_X_FALSE}"; then
+  as_fn_error $? "conditional \"USE_X\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_XVIDEO_TRUE}" && test -z "${USE_XVIDEO_FALSE}"; then
+  as_fn_error $? "conditional \"USE_XVIDEO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_XSHM_TRUE}" && test -z "${USE_XSHM_FALSE}"; then
+  as_fn_error $? "conditional \"USE_XSHM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ALSA_TRUE}" && test -z "${USE_ALSA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_ALSA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_CDPARANOIA_TRUE}" && test -z "${USE_CDPARANOIA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_CDPARANOIA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_IVORBIS_TRUE}" && test -z "${USE_IVORBIS_FALSE}"; then
+  as_fn_error $? "conditional \"USE_IVORBIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_GIO_TRUE}" && test -z "${USE_GIO_FALSE}"; then
+  as_fn_error $? "conditional \"USE_GIO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_LIBVISUAL_TRUE}" && test -z "${USE_LIBVISUAL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBVISUAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_OGG_TRUE}" && test -z "${USE_OGG_FALSE}"; then
+  as_fn_error $? "conditional \"USE_OGG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PANGO_TRUE}" && test -z "${USE_PANGO_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PANGO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_THEORA_TRUE}" && test -z "${USE_THEORA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_THEORA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_VORBIS_TRUE}" && test -z "${USE_VORBIS_FALSE}"; then
+  as_fn_error $? "conditional \"USE_VORBIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ALSA_TRUE}" && test -z "${USE_ALSA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_ALSA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_CDPARANOIA_TRUE}" && test -z "${USE_CDPARANOIA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_CDPARANOIA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_GIO_TRUE}" && test -z "${USE_GIO_FALSE}"; then
+  as_fn_error $? "conditional \"USE_GIO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_IVORBIS_TRUE}" && test -z "${USE_IVORBIS_FALSE}"; then
+  as_fn_error $? "conditional \"USE_IVORBIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_LIBVISUAL_TRUE}" && test -z "${USE_LIBVISUAL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBVISUAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_OGG_TRUE}" && test -z "${USE_OGG_FALSE}"; then
+  as_fn_error $? "conditional \"USE_OGG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PANGO_TRUE}" && test -z "${USE_PANGO_FALSE}"; then
+  as_fn_error $? "conditional \"USE_PANGO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_THEORA_TRUE}" && test -z "${USE_THEORA_FALSE}"; then
+  as_fn_error $? "conditional \"USE_THEORA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_VORBIS_TRUE}" && test -z "${USE_VORBIS_FALSE}"; then
+  as_fn_error $? "conditional \"USE_VORBIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_FT2_TRUE}" && test -z "${HAVE_FT2_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_FT2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GStreamer Base Plug-ins $as_me 0.11.1, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+GStreamer Base Plug-ins config.status 0.11.1
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+
+# variables for create stdint.h replacement
+PACKAGE="$PACKAGE"
+VERSION="$VERSION"
+ac_stdint_h="$ac_stdint_h"
+_ac_stdint_h=`$as_echo "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp`
+ac_cv_stdint_message="$ac_cv_stdint_message"
+ac_cv_header_stdint_t="$ac_cv_header_stdint_t"
+ac_cv_header_stdint_x="$ac_cv_header_stdint_x"
+ac_cv_header_stdint_o="$ac_cv_header_stdint_o"
+ac_cv_header_stdint_u="$ac_cv_header_stdint_u"
+ac_cv_type_uint64_t="$ac_cv_type_uint64_t"
+ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t"
+ac_cv_char_data_model="$ac_cv_char_data_model"
+ac_cv_long_data_model="$ac_cv_long_data_model"
+ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t"
+ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t"
+ac_cv_type_intmax_t="$ac_cv_type_intmax_t"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+    "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "gst-plugins-base.spec") CONFIG_FILES="$CONFIG_FILES gst-plugins-base.spec" ;;
+    "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;;
+    "gst/adder/Makefile") CONFIG_FILES="$CONFIG_FILES gst/adder/Makefile" ;;
+    "gst/app/Makefile") CONFIG_FILES="$CONFIG_FILES gst/app/Makefile" ;;
+    "gst/audioconvert/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audioconvert/Makefile" ;;
+    "gst/audiorate/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audiorate/Makefile" ;;
+    "gst/audiotestsrc/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audiotestsrc/Makefile" ;;
+    "gst/encoding/Makefile") CONFIG_FILES="$CONFIG_FILES gst/encoding/Makefile" ;;
+    "gst/videoconvert/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videoconvert/Makefile" ;;
+    "gst/gdp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/gdp/Makefile" ;;
+    "gst/playback/Makefile") CONFIG_FILES="$CONFIG_FILES gst/playback/Makefile" ;;
+    "gst/audioresample/Makefile") CONFIG_FILES="$CONFIG_FILES gst/audioresample/Makefile" ;;
+    "gst/subparse/Makefile") CONFIG_FILES="$CONFIG_FILES gst/subparse/Makefile" ;;
+    "gst/tcp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/tcp/Makefile" ;;
+    "gst/typefind/Makefile") CONFIG_FILES="$CONFIG_FILES gst/typefind/Makefile" ;;
+    "gst/videotestsrc/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videotestsrc/Makefile" ;;
+    "gst/videorate/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videorate/Makefile" ;;
+    "gst/videoscale/Makefile") CONFIG_FILES="$CONFIG_FILES gst/videoscale/Makefile" ;;
+    "gst/volume/Makefile") CONFIG_FILES="$CONFIG_FILES gst/volume/Makefile" ;;
+    "sys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/Makefile" ;;
+    "sys/ximage/Makefile") CONFIG_FILES="$CONFIG_FILES sys/ximage/Makefile" ;;
+    "sys/xvimage/Makefile") CONFIG_FILES="$CONFIG_FILES sys/xvimage/Makefile" ;;
+    "ext/Makefile") CONFIG_FILES="$CONFIG_FILES ext/Makefile" ;;
+    "ext/alsa/Makefile") CONFIG_FILES="$CONFIG_FILES ext/alsa/Makefile" ;;
+    "ext/cdparanoia/Makefile") CONFIG_FILES="$CONFIG_FILES ext/cdparanoia/Makefile" ;;
+    "ext/gio/Makefile") CONFIG_FILES="$CONFIG_FILES ext/gio/Makefile" ;;
+    "ext/libvisual/Makefile") CONFIG_FILES="$CONFIG_FILES ext/libvisual/Makefile" ;;
+    "ext/ogg/Makefile") CONFIG_FILES="$CONFIG_FILES ext/ogg/Makefile" ;;
+    "ext/pango/Makefile") CONFIG_FILES="$CONFIG_FILES ext/pango/Makefile" ;;
+    "ext/theora/Makefile") CONFIG_FILES="$CONFIG_FILES ext/theora/Makefile" ;;
+    "ext/vorbis/Makefile") CONFIG_FILES="$CONFIG_FILES ext/vorbis/Makefile" ;;
+    "gst-libs/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/Makefile" ;;
+    "gst-libs/gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/Makefile" ;;
+    "gst-libs/gst/audio/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/audio/Makefile" ;;
+    "gst-libs/gst/app/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/app/Makefile" ;;
+    "gst-libs/gst/cdda/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/cdda/Makefile" ;;
+    "gst-libs/gst/fft/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/fft/Makefile" ;;
+    "gst-libs/gst/interfaces/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/interfaces/Makefile" ;;
+    "gst-libs/gst/netbuffer/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/netbuffer/Makefile" ;;
+    "gst-libs/gst/riff/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/riff/Makefile" ;;
+    "gst-libs/gst/rtp/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/rtp/Makefile" ;;
+    "gst-libs/gst/rtsp/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/rtsp/Makefile" ;;
+    "gst-libs/gst/sdp/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/sdp/Makefile" ;;
+    "gst-libs/gst/tag/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/tag/Makefile" ;;
+    "gst-libs/gst/pbutils/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/pbutils/Makefile" ;;
+    "gst-libs/gst/pbutils/gstpluginsbaseversion.h") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/pbutils/gstpluginsbaseversion.h" ;;
+    "gst-libs/gst/video/Makefile") CONFIG_FILES="$CONFIG_FILES gst-libs/gst/video/Makefile" ;;
+    "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+    "pkgconfig/Makefile") CONFIG_FILES="$CONFIG_FILES pkgconfig/Makefile" ;;
+    "pkgconfig/gstreamer-audio.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-audio.pc" ;;
+    "pkgconfig/gstreamer-audio-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-audio-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-app.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-app.pc" ;;
+    "pkgconfig/gstreamer-app-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-app-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-cdda.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-cdda.pc" ;;
+    "pkgconfig/gstreamer-cdda-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-cdda-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-fft.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-fft.pc" ;;
+    "pkgconfig/gstreamer-fft-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-fft-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-interfaces.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-interfaces.pc" ;;
+    "pkgconfig/gstreamer-interfaces-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-interfaces-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-netbuffer.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-netbuffer.pc" ;;
+    "pkgconfig/gstreamer-netbuffer-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-netbuffer-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-pbutils.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-pbutils.pc" ;;
+    "pkgconfig/gstreamer-pbutils-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-pbutils-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-riff.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-riff.pc" ;;
+    "pkgconfig/gstreamer-riff-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-riff-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-rtp.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-rtp.pc" ;;
+    "pkgconfig/gstreamer-rtp-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-rtp-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-rtsp.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-rtsp.pc" ;;
+    "pkgconfig/gstreamer-rtsp-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-rtsp-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-sdp.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-sdp.pc" ;;
+    "pkgconfig/gstreamer-sdp-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-sdp-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-tag.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-tag.pc" ;;
+    "pkgconfig/gstreamer-tag-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-tag-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-video.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-video.pc" ;;
+    "pkgconfig/gstreamer-video-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-video-uninstalled.pc" ;;
+    "pkgconfig/gstreamer-plugins-base.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-plugins-base.pc" ;;
+    "pkgconfig/gstreamer-plugins-base-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/gstreamer-plugins-base-uninstalled.pc" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "tests/check/Makefile") CONFIG_FILES="$CONFIG_FILES tests/check/Makefile" ;;
+    "tests/examples/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/Makefile" ;;
+    "tests/examples/app/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/app/Makefile" ;;
+    "tests/examples/audio/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/audio/Makefile" ;;
+    "tests/examples/dynamic/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/dynamic/Makefile" ;;
+    "tests/examples/encoding/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/encoding/Makefile" ;;
+    "tests/examples/gio/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/gio/Makefile" ;;
+    "tests/examples/overlay/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/overlay/Makefile" ;;
+    "tests/examples/seek/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/seek/Makefile" ;;
+    "tests/examples/snapshot/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/snapshot/Makefile" ;;
+    "tests/examples/playrec/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/playrec/Makefile" ;;
+    "tests/examples/volume/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/volume/Makefile" ;;
+    "tests/files/Makefile") CONFIG_FILES="$CONFIG_FILES tests/files/Makefile" ;;
+    "tests/icles/Makefile") CONFIG_FILES="$CONFIG_FILES tests/icles/Makefile" ;;
+    "tests/icles/playback/Makefile") CONFIG_FILES="$CONFIG_FILES tests/icles/playback/Makefile" ;;
+    "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+    "docs/design/Makefile") CONFIG_FILES="$CONFIG_FILES docs/design/Makefile" ;;
+    "docs/libs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libs/Makefile" ;;
+    "docs/plugins/Makefile") CONFIG_FILES="$CONFIG_FILES docs/plugins/Makefile" ;;
+    "docs/version.entities") CONFIG_FILES="$CONFIG_FILES docs/version.entities" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;;
+    "common/m4/Makefile") CONFIG_FILES="$CONFIG_FILES common/m4/Makefile" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+    "po-directories":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
+    "$ac_stdint_h":C)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_stdint_h : $_ac_stdint_h" >&5
+$as_echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;}
+ac_stdint=$tmp/_stdint.h
+
+echo "#ifndef" $_ac_stdint_h >$ac_stdint
+echo "#define" $_ac_stdint_h "1" >>$ac_stdint
+echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint
+echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint
+echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_t" != "_" ; then
+echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint
+echo "#include <stdint.h>" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+echo "#endif" >>$ac_stdint
+else
+
+cat >>$ac_stdint <<STDINT_EOF
+
+/* ................... shortcircuit part ........................... */
+
+#if defined HAVE_STDINT_H || defined _STDINT_HAVE_STDINT_H
+#include <stdint.h>
+#else
+#include <stddef.h>
+
+/* .................... configured part ............................ */
+
+STDINT_EOF
+
+echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint
+if test "_$ac_cv_header_stdint_x" != "_" ; then
+  ac_header="$ac_cv_header_stdint_x"
+  echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint
+fi
+
+echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint
+if  test "_$ac_cv_header_stdint_o" != "_" ; then
+  ac_header="$ac_cv_header_stdint_o"
+  echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint
+fi
+
+echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint
+if  test "_$ac_cv_header_stdint_u" != "_" ; then
+  ac_header="$ac_cv_header_stdint_u"
+  echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint
+else
+  echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint
+fi
+
+echo "" >>$ac_stdint
+
+if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then
+  echo "#include <$ac_header>" >>$ac_stdint
+  echo "" >>$ac_stdint
+fi fi
+
+echo "/* which 64bit typedef has been found */" >>$ac_stdint
+if test "$ac_cv_type_uint64_t" = "yes" ; then
+echo "#define   _STDINT_HAVE_UINT64_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint
+fi
+if test "$ac_cv_type_u_int64_t" = "yes" ; then
+echo "#define   _STDINT_HAVE_U_INT64_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* which type model has been detected */" >>$ac_stdint
+if test "_$ac_cv_char_data_model" != "_" ; then
+echo "#define   _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint
+echo "#define   _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint
+else
+echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint
+echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+echo "/* whether int_least types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_least32_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INT_LEAST32_T" "1"  >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint
+fi
+echo "/* whether int_fast types were detected */" >>$ac_stdint
+if test "$ac_cv_type_int_fast32_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint
+fi
+echo "/* whether intmax_t type was detected */" >>$ac_stdint
+if test "$ac_cv_type_intmax_t" = "yes"; then
+echo "#define   _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint
+else
+echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint
+fi
+echo "" >>$ac_stdint
+
+  cat >>$ac_stdint <<STDINT_EOF
+/* .................... detections part ............................ */
+
+/* whether we need to define bitspecific types from compiler base types */
+#ifndef _STDINT_HEADER_INTPTR
+#ifndef _STDINT_HEADER_UINT32
+#ifndef _STDINT_HEADER_U_INT32
+#define _STDINT_NEED_INT_MODEL_T
+#else
+#define _STDINT_HAVE_U_INT_TYPES
+#endif
+#endif
+#endif
+
+#ifdef _STDINT_HAVE_U_INT_TYPES
+#undef _STDINT_NEED_INT_MODEL_T
+#endif
+
+#ifdef  _STDINT_CHAR_MODEL
+#if     _STDINT_CHAR_MODEL+0 == 122 || _STDINT_CHAR_MODEL+0 == 124
+#ifndef _STDINT_BYTE_MODEL
+#define _STDINT_BYTE_MODEL 12
+#endif
+#endif
+#endif
+
+#ifndef _STDINT_HAVE_INT_LEAST32_T
+#define _STDINT_NEED_INT_LEAST_T
+#endif
+
+#ifndef _STDINT_HAVE_INT_FAST32_T
+#define _STDINT_NEED_INT_FAST_T
+#endif
+
+#ifndef _STDINT_HEADER_INTPTR
+#define _STDINT_NEED_INTPTR_T
+#ifndef _STDINT_HAVE_INTMAX_T
+#define _STDINT_NEED_INTMAX_T
+#endif
+#endif
+
+
+/* .................... definition part ............................ */
+
+/* some system headers have good uint64_t */
+#ifndef _HAVE_UINT64_T
+#if     defined _STDINT_HAVE_UINT64_T  || defined HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#elif   defined _STDINT_HAVE_U_INT64_T || defined HAVE_U_INT64_T
+#define _HAVE_UINT64_T
+typedef u_int64_t uint64_t;
+#endif
+#endif
+
+#ifndef _HAVE_UINT64_T
+/* .. here are some common heuristics using compiler runtime specifics */
+#if defined __STDC_VERSION__ && defined __STDC_VERSION__ >= 199901L
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+#elif !defined __STRICT_ANSI__
+#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__
+#define _HAVE_UINT64_T
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__
+/* note: all ELF-systems seem to have loff-support which needs 64-bit */
+#if !defined _NO_LONGLONG
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+#endif
+
+#elif defined __alpha || (defined __mips && defined _ABIN32)
+#if !defined _NO_LONGLONG
+typedef long int64_t;
+typedef unsigned long uint64_t;
+#endif
+  /* compiler/cpu type to define int64_t */
+#endif
+#endif
+#endif
+
+#if defined _STDINT_HAVE_U_INT_TYPES
+/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */
+typedef u_int8_t uint8_t;
+typedef u_int16_t uint16_t;
+typedef u_int32_t uint32_t;
+
+/* glibc compatibility */
+#ifndef __int8_t_defined
+#define __int8_t_defined
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INT_MODEL_T
+/* we must guess all the basic types. Apart from byte-adressable system, */
+/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */
+/* (btw, those nibble-addressable systems are way off, or so we assume) */
+
+
+#if defined _STDINT_BYTE_MODEL
+#if _STDINT_LONG_MODEL+0 == 242
+/* 2:4:2 =  IP16 = a normal 16-bit system                */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned long   uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          long    int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444
+/* 2:4:4 =  LP32 = a 32-bit system derived from a 16-bit */
+/* 4:4:4 = ILP32 = a normal 32-bit system                */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488
+/* 4:8:4 =  IP32 = a 32-bit system prepared for 64-bit    */
+/* 4:8:8 =  LP64 = a normal 64-bit system                 */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+/* this system has a "long" of 64bit */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+typedef unsigned long   uint64_t;
+typedef          long    int64_t;
+#endif
+#elif _STDINT_LONG_MODEL+0 == 448
+/*      LLP64   a 64-bit system derived from a 32-bit system */
+typedef unsigned char   uint8_t;
+typedef unsigned short  uint16_t;
+typedef unsigned int    uint32_t;
+#ifndef __int8_t_defined
+#define __int8_t_defined
+typedef          char    int8_t;
+typedef          short   int16_t;
+typedef          int     int32_t;
+#endif
+/* assuming the system has a "long long" */
+#ifndef _HAVE_UINT64_T
+#define _HAVE_UINT64_T
+#define _HAVE_LONGLONG_UINT64_T
+typedef unsigned long long uint64_t;
+typedef          long long  int64_t;
+#endif
+#else
+#define _STDINT_NO_INT32_T
+#endif
+#else
+#define _STDINT_NO_INT8_T
+#define _STDINT_NO_INT32_T
+#endif
+#endif
+
+/*
+ * quote from SunOS-5.8 sys/inttypes.h:
+ * Use at your own risk.  As of February 1996, the committee is squarely
+ * behind the fixed sized types; the "least" and "fast" types are still being
+ * discussed.  The probability that the "fast" types may be removed before
+ * the standard is finalized is high enough that they are not currently
+ * implemented.
+ */
+
+#if defined _STDINT_NEED_INT_LEAST_T
+typedef  int8_t    int_least8_t;
+typedef  int16_t   int_least16_t;
+typedef  int32_t   int_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef  int64_t   int_least64_t;
+#endif
+
+typedef uint8_t   uint_least8_t;
+typedef uint16_t  uint_least16_t;
+typedef uint32_t  uint_least32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t  uint_least64_t;
+#endif
+  /* least types */
+#endif
+
+#if defined _STDINT_NEED_INT_FAST_T
+typedef  int8_t    int_fast8_t;
+typedef  int       int_fast16_t;
+typedef  int32_t   int_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef  int64_t   int_fast64_t;
+#endif
+
+typedef uint8_t   uint_fast8_t;
+typedef unsigned  uint_fast16_t;
+typedef uint32_t  uint_fast32_t;
+#ifdef _HAVE_UINT64_T
+typedef uint64_t  uint_fast64_t;
+#endif
+  /* fast types */
+#endif
+
+#ifdef _STDINT_NEED_INTMAX_T
+#ifdef _HAVE_UINT64_T
+typedef  int64_t       intmax_t;
+typedef uint64_t      uintmax_t;
+#else
+typedef          long  intmax_t;
+typedef unsigned long uintmax_t;
+#endif
+#endif
+
+#ifdef _STDINT_NEED_INTPTR_T
+#ifndef __intptr_t_defined
+#define __intptr_t_defined
+/* we encourage using "long" to store pointer values, never use "int" ! */
+#if   _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484
+typedef  unsigned int   uintptr_t;
+typedef           int    intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444
+typedef  unsigned long  uintptr_t;
+typedef           long   intptr_t;
+#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T
+typedef        uint64_t uintptr_t;
+typedef         int64_t  intptr_t;
+#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */
+typedef  unsigned long  uintptr_t;
+typedef           long   intptr_t;
+#endif
+#endif
+#endif
+
+/* The ISO C99 standard specifies that in C++ implementations these
+   should only be defined if explicitly requested.  */
+#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
+#ifndef UINT32_C
+
+/* Signed.  */
+# define INT8_C(c)      c
+# define INT16_C(c)     c
+# define INT32_C(c)     c
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define INT64_C(c)    c ## L
+# else
+#  define INT64_C(c)    c ## LL
+# endif
+
+/* Unsigned.  */
+# define UINT8_C(c)     c ## U
+# define UINT16_C(c)    c ## U
+# define UINT32_C(c)    c ## U
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define UINT64_C(c)   c ## UL
+# else
+#  define UINT64_C(c)   c ## ULL
+# endif
+
+/* Maximal type.  */
+# ifdef _HAVE_LONGLONG_UINT64_T
+#  define INTMAX_C(c)   c ## L
+#  define UINTMAX_C(c)  c ## UL
+# else
+#  define INTMAX_C(c)   c ## LL
+#  define UINTMAX_C(c)  c ## ULL
+# endif
+
+  /* literalnumbers */
+#endif
+#endif
+
+/* These limits are merily those of a two complement byte-oriented system */
+
+/* Minimum of signed integral types.  */
+# define INT8_MIN               (-128)
+# define INT16_MIN              (-32767-1)
+# define INT32_MIN              (-2147483647-1)
+# define INT64_MIN              (-__INT64_C(9223372036854775807)-1)
+/* Maximum of signed integral types.  */
+# define INT8_MAX               (127)
+# define INT16_MAX              (32767)
+# define INT32_MAX              (2147483647)
+# define INT64_MAX              (__INT64_C(9223372036854775807))
+
+/* Maximum of unsigned integral types.  */
+# define UINT8_MAX              (255)
+# define UINT16_MAX             (65535)
+# define UINT32_MAX             (4294967295U)
+# define UINT64_MAX             (__UINT64_C(18446744073709551615))
+
+/* Minimum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MIN         INT8_MIN
+# define INT_LEAST16_MIN        INT16_MIN
+# define INT_LEAST32_MIN        INT32_MIN
+# define INT_LEAST64_MIN        INT64_MIN
+/* Maximum of signed integral types having a minimum size.  */
+# define INT_LEAST8_MAX         INT8_MAX
+# define INT_LEAST16_MAX        INT16_MAX
+# define INT_LEAST32_MAX        INT32_MAX
+# define INT_LEAST64_MAX        INT64_MAX
+
+/* Maximum of unsigned integral types having a minimum size.  */
+# define UINT_LEAST8_MAX        UINT8_MAX
+# define UINT_LEAST16_MAX       UINT16_MAX
+# define UINT_LEAST32_MAX       UINT32_MAX
+# define UINT_LEAST64_MAX       UINT64_MAX
+
+  /* shortcircuit*/
+#endif
+  /* once */
+#endif
+#endif
+STDINT_EOF
+fi
+    if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_stdint_h is unchanged" >&5
+$as_echo "$as_me: $ac_stdint_h is unchanged" >&6;}
+    else
+      ac_dir=`$as_dirname -- "$ac_stdint_h" ||
+$as_expr X"$ac_stdint_h" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_stdint_h" : 'X\(//\)[^/]' \| \
+	 X"$ac_stdint_h" : 'X\(//\)$' \| \
+	 X"$ac_stdint_h" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_stdint_h" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir="$ac_dir"; as_fn_mkdir_p
+      rm -f $ac_stdint_h
+      mv $ac_stdint $ac_stdint_h
+    fi
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+
+
+printf "configure: *** Plug-ins without external dependencies that will be built:\n"
+( for i in $GST_PLUGINS_SELECTED; do printf '\t'$i'\n'; done ) | sort
+printf "\n"
+
+printf "configure: *** Plug-ins without external dependencies that will NOT be built:\n"
+( for i in $GST_PLUGINS_ALL; do
+    case " $GST_PLUGINS_SELECTED " in
+      *\ $i\ *)
+	;;
+      *)
+	printf '\t'$i'\n'
+	;;
+    esac
+  done ) | sort
+printf "\n"
+
+printf "configure: *** Plug-ins that have NOT been ported:\n"
+( for i in $GST_PLUGINS_NONPORTED; do
+	printf '\t'$i'\n'
+  done ) | sort
+printf "\n"
+
+if test "x$BUILD_EXTERNAL" = "xno"; then
+  printf "configure: *** No plug-ins with external dependencies will be built\n"
+else
+  printf "configure: *** Plug-ins with dependencies that will be built:"
+  printf "$GST_PLUGINS_YES\n" | sort
+  printf "\n"
+  printf "configure: *** Plug-ins with dependencies that will NOT be built:"
+  printf "$GST_PLUGINS_NO\n" | sort
+  printf "\n"
+fi
+
+
+  if test "$HAVE_ORC" = yes ; then
+    printf "configure: *** Orc acceleration enabled.\n"
+  else
+    if test "x$enable_orc" = "xno" ; then
+      printf "configure: *** Orc acceleration disabled by --disable-orc.  Slower code paths\n"
+      printf "               will be used.\n"
+    else
+      printf "configure: *** Orc acceleration disabled.  Requires Orc >= $ORC_REQ, which was\n"
+      printf "               not found.  Slower code paths will be used.\n"
+    fi
+  fi
+  printf "\n"
+
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..7844148
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,1021 @@
+AC_PREREQ(2.60)
+
+dnl please read gstreamer/docs/random/autotools before changing this file
+
+dnl initialize autoconf
+dnl releases only do -Wall, git and prerelease does -Werror too
+dnl use a three digit version number for releases, and four for git/prerelease
+AC_INIT(GStreamer Base Plug-ins, 0.11.1,
+    http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
+    gst-plugins-base)
+
+AG_GST_INIT
+
+dnl initialize automake
+AM_INIT_AUTOMAKE([-Wno-portability 1.10])
+
+dnl define PACKAGE_VERSION_* variables
+AS_VERSION
+
+dnl check if this is a release version
+AS_NANO(GST_GIT="no", GST_GIT="yes")
+
+dnl can autoconf find the source ?
+AC_CONFIG_SRCDIR([gst/audiotestsrc/gstaudiotestsrc.c])
+
+dnl define the output header for config
+AM_CONFIG_HEADER([config.h])
+
+dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
+AM_MAINTAINER_MODE
+
+dnl sets host_* variables
+AC_CANONICAL_HOST
+
+dnl use pretty build output with automake >= 1.11
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],
+  [AM_DEFAULT_VERBOSITY=1
+   AC_SUBST(AM_DEFAULT_VERBOSITY)])
+
+dnl our libraries and install dirs use major.minor as a version
+GST_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
+dnl we override it here if we need to for the release candidate of new series
+GST_MAJORMINOR=0.11
+AC_SUBST(GST_MAJORMINOR)
+
+dnl CURRENT, REVISION, AGE
+dnl - library source changed -> increment REVISION
+dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
+dnl - interfaces added -> increment AGE
+dnl - interfaces removed -> AGE = 0
+dnl sets GST_LT_LDFLAGS
+AS_LIBTOOL(GST, 26, 0, 0)
+
+dnl FIXME: this macro doesn't actually work;
+dnl the generated libtool script has no support for the listed tags.
+dnl So this needs to be fixed first if we want to use this
+dnl AS_LIBTOOL_TAGS
+
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+
+dnl *** required versions of GStreamer stuff ***
+GST_REQ=0.11.1
+
+dnl *** autotools stuff ****
+
+dnl allow for different autotools
+AS_AUTOTOOLS_ALTERNATE
+
+dnl Add parameters for aclocal
+AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4")
+
+dnl set up gettext
+dnl the version check needs to stay here because autopoint greps for it
+AM_GNU_GETTEXT_VERSION([0.17])
+AM_GNU_GETTEXT([external])
+AG_GST_GETTEXT([gst-plugins-base-$GST_MAJORMINOR])
+
+dnl *** check for arguments to configure ***
+
+AG_GST_ARG_DEBUG
+AG_GST_ARG_PROFILING
+AG_GST_ARG_VALGRIND
+AG_GST_ARG_GCOV
+
+AG_GST_ARG_EXAMPLES
+
+AG_GST_ARG_WITH_PKG_CONFIG_PATH
+AG_GST_ARG_WITH_PACKAGE_NAME
+AG_GST_ARG_WITH_PACKAGE_ORIGIN
+
+AG_GST_PKG_CONFIG_PATH
+
+dnl let distro override plugin install helper path
+AC_ARG_WITH(install-plugins-helper,
+  AC_HELP_STRING([--with-install-plugins-helper],
+    [specify path of helper script to call to install plugins]),
+  [
+    case "${withval}" in
+      yes) AC_MSG_ERROR(bad value ${withval} for --with-install-plugins-helper) ;;
+      no)  AC_MSG_ERROR(bad value ${withval} for --with-install-plugins-helper) ;;
+      *)   GST_INSTALL_PLUGINS_HELPER="${withval}" ;;
+    esac
+  ],
+  [
+    dnl Default value
+    AS_AC_EXPAND(GST_INSTALL_PLUGINS_HELPER,${libexecdir}/gst-install-plugins-helper)
+  ]
+)
+AC_MSG_NOTICE(Using $GST_INSTALL_PLUGINS_HELPER as plugin install helper)
+AC_DEFINE_UNQUOTED(GST_INSTALL_PLUGINS_HELPER, "$GST_INSTALL_PLUGINS_HELPER",
+    [plugin install helper script])
+AC_SUBST(GST_INSTALL_PLUGINS_HELPER)
+
+AG_GST_ARG_WITH_PLUGINS
+
+AG_GST_ARG_ENABLE_EXTERNAL
+
+AG_GST_ARG_ENABLE_EXPERIMENTAL
+
+dnl *** checks for platform ***
+
+dnl * hardware/architecture *
+
+dnl common/m4/gst-arch.m4
+dnl check CPU type
+AG_GST_ARCH
+
+dnl check for large file support
+dnl affected plugins must include config.h
+AC_SYS_LARGEFILE
+
+dnl *** checks for programs ***
+
+dnl find a compiler
+AC_PROG_CC
+AC_PROG_CC_STDC
+
+dnl check if the compiler supports '-c' and '-o' options
+AM_PROG_CC_C_O
+
+dnl determine if c++ is available on this system
+AC_PROG_CXX
+dnl CXX may be set to some default even if no c++ compiler is available
+dnl (thanks autotools!), so just try to compile some c++ code to make sure
+AC_LANG_PUSH([C++])
+AC_TRY_COMPILE([ class Foo { int bar; };], , working_cxx=yes, working_cxx=no)
+AC_LANG_POP([C++])
+AC_MSG_NOTICE([working c++ compiler found: $working_cxx])
+AM_CONDITIONAL(HAVE_CXX, test "x$working_cxx" = "xyes")
+
+AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
+AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
+
+dnl check for gobject-introspection
+GOBJECT_INTROSPECTION_CHECK([0.9.12])
+
+dnl check for documentation tools
+GTK_DOC_CHECK([1.3])
+AS_PATH_PYTHON([2.1])
+AG_GST_PLUGIN_DOCS([1.3],[2.1])
+
+dnl *** checks for libraries ***
+
+dnl libm, for sin() etc.
+AC_CHECK_LIBM
+AC_SUBST(LIBM)
+
+dnl *** checks for header files ***
+
+dnl check if we have ANSI C header files
+AC_HEADER_STDC
+
+ac_cppflags_save="$CPPFLAGS"
+CPPFLAGS="`$PKG_CONFIG --cflags libxml-2.0`"
+AC_COMPILE_IFELSE(
+  AC_LANG_PROGRAM([
+#include <libxml/HTMLparser.h>
+                     ],[
+#ifndef LIBXML_HTML_ENABLED
+#error libxml2 has no HTML support
+#endif /* LIBXML_HTML_ENABLED */
+                   ]), HAVE_LIBXML_HTML="yes", HAVE_LIBXML_HTML="no")
+CPPFLAGS="$ac_cppflags_save"
+AM_CONDITIONAL(HAVE_LIBXML_HTML, test "x$HAVE_LIBXML_HTML" = "xyes")
+
+dnl used in gst/tcp
+AC_CHECK_HEADERS([sys/socket.h], 
+  HAVE_SYS_SOCKET_H="yes", HAVE_SYS_SOCKET_H="no")
+AM_CONDITIONAL(HAVE_SYS_SOCKET_H, test "x$HAVE_SYS_SOCKET_H" = "xyes")
+
+dnl used in gst-libs/gst/rtsp
+AC_CHECK_HEADERS([winsock2.h], HAVE_WINSOCK2_H=yes)
+if test "x$HAVE_WINSOCK2_H" = "xyes"; then
+  WIN32_LIBS="-lws2_32"
+  AC_SUBST(WIN32_LIBS)
+fi
+
+dnl check for hstrerror, for gst-libs/gst/rtsp
+save_libs="$LIBS"
+AC_CHECK_FUNC(hstrerror, ,
+    AC_CHECK_LIB(resolv, hstrerror, ,
+        [AC_DEFINE(NO_HSTRERROR, 1,
+             [Define if you have no native hstrerror() function.])]))
+HSTRERROR_LIBS=$LIBS
+AC_SUBST(HSTRERROR_LIBS)
+LIBS="$save_libs"
+
+dnl used in gst-libs/gst/pbutils and associated unit test
+AC_CHECK_HEADERS([process.h sys/types.h sys/wait.h sys/stat.h])
+
+dnl also, Windows does not have long long
+AX_CREATE_STDINT_H
+
+dnl *** checks for functions ***
+AC_CHECK_FUNCS([localtime_r gmtime_r])
+
+dnl *** checks for math functions ***
+LIBS_SAVE=$LIBS
+LIBS="$LIBS $LIBM"
+AC_CHECK_FUNCS(log2)
+LIBS=$LIBS_SAVE
+
+dnl *** checks for types/defines ***
+
+dnl Check for FIONREAD ioctl declaration
+dnl used in gst/tcp
+GST_CHECK_FIONREAD
+
+dnl *** checks for structures ***
+
+dnl *** checks for compiler characteristics ***
+
+dnl *** checks for library functions ***
+
+dnl check for fseeko()
+AC_FUNC_FSEEKO
+
+dnl Check for fast float to int casting as defined in C99
+dnl used to be used in gst-libs/gst/floatcast/floatcast.h (FIXME: still needed?)
+save_libs=$LIBS
+LIBS="$LIBS $LIBM"
+AC_C99_FUNC_LRINT
+AC_C99_FUNC_LRINTF
+LIBS=$save_libs
+
+dnl Check for a way to display the function name in debug output
+AG_GST_CHECK_FUNCTION
+
+dnl *** checks for socket and nsl libraries ***
+AC_CHECK_FUNC(socket,,[AC_CHECK_LIB(socket,socket)])
+AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
+
+dnl *** checks for dependency libraries ***
+
+dnl GLib is required
+AG_GST_GLIB_CHECK([2.26])
+
+ORC_CHECK([0.4.11])
+
+dnl checks for gstreamer
+dnl uninstalled is selected preferentially -- see pkg-config(1)
+AG_GST_CHECK_GST($GST_MAJORMINOR, [$GST_REQ], yes)
+AG_GST_CHECK_GST_BASE($GST_MAJORMINOR, [$GST_REQ], yes)
+AG_GST_CHECK_GST_GDP($GST_MAJORMINOR, [$GST_REQ], yes)
+AG_GST_CHECK_GST_CONTROLLER($GST_MAJORMINOR, [$GST_REQ], yes)
+AG_GST_CHECK_GST_CHECK($GST_MAJORMINOR, [$GST_REQ], no)
+AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
+
+dnl Check for documentation xrefs
+GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_MAJORMINOR`"
+AC_SUBST(GLIB_PREFIX)
+AC_SUBST(GST_PREFIX)
+
+dnl GTK is optional and only used in examples
+HAVE_GTK=no
+HAVE_GTK_X11=no
+GTK2_REQ=2.14.0
+GTK3_REQ=2.91.3
+if test "x$BUILD_EXAMPLES" = "xyes"; then
+  AC_MSG_CHECKING([which gtk+ version to compile examples against (optional)])
+  AC_ARG_WITH([gtk],
+    AC_HELP_STRING([--with-gtk=3.0|2.0],
+                   [which gtk+ version to compile against (default: 2.0)]),
+    [case "$with_gtk" in
+        2.0) GTK_REQ=$GTK2_REQ ;;
+        3.0) GTK_REQ=$GTK3_REQ ;;
+        *) AC_MSG_ERROR([invalid gtk+ version specified]);;
+    esac],
+    [with_gtk=2.0
+     GTK_REQ=$GTK2_REQ])
+  AC_MSG_RESULT([$with_gtk (>= $GTK_REQ)])
+  PKG_CHECK_MODULES(GTK, gtk+-$with_gtk >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
+  dnl some examples need gtk+-x11
+  PKG_CHECK_MODULES(GTK_X11, gtk+-x11-$with_gtk >= $GTK_REQ, HAVE_GTK_X11=yes, HAVE_GTK_X11=no)
+  AC_SUBST(GTK_LIBS)
+  AC_SUBST(GTK_CFLAGS)
+fi
+AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
+AM_CONDITIONAL(HAVE_GTK_X11, test "x$HAVE_GTK_X11" = "xyes")
+
+dnl QT is optional and only used in examples
+PKG_CHECK_MODULES(QT, QtGui >= 4.6, [
+  HAVE_QT_GV=yes
+  HAVE_QT=yes
+], [
+  HAVE_QT_GV=no
+  PKG_CHECK_MODULES(QT, QtGui >= 4.0, HAVE_QT=yes, HAVE_QT=no)
+])
+if test "x$HAVE_QT" = "xyes"; then
+  AC_MSG_CHECKING([Qt moc])
+  QT4_MOC=`$PKG_CONFIG --variable=moc_location QtGui`
+  AC_MSG_RESULT($QT4_MOC)
+  AC_SUBST(QT4_MOC)
+fi
+AM_CONDITIONAL(HAVE_QT, test "x$HAVE_QT" = "xyes")
+AM_CONDITIONAL(HAVE_QT_GV, test "x$HAVE_QT_GV" = "xyes")
+
+dnl chck for linux headers needed by the joystick seek example
+AC_COMPILE_IFELSE(
+[
+  AC_LANG_PROGRAM([
+    #include <linux/input.h>
+    #include <linux/joystick.h>
+  ],[
+    struct js_event js;
+    js.type = JS_EVENT_AXIS;
+  ])
+], [
+  HAVE_LINUX_JOYSTICK_HEADERS="yes"
+], [
+  HAVE_LINUX_JOYSTICK_HEADERS="no"
+])
+AM_CONDITIONAL(HAVE_LINUX_JOYSTICK_HEADERS, test "x$HAVE_LINUX_JOYSTICK_HEADERS" = "xyes")
+
+dnl Check for -Bsymbolic-functions linker flag used to avoid
+dnl intra-library PLT jumps, if available.
+AC_ARG_ENABLE(Bsymbolic,
+              [AC_HELP_STRING([--disable-Bsymbolic],
+                              [avoid linking with -Bsymbolic])],,
+              [SAVED_LDFLAGS="${LDFLAGS}"
+               AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
+               LDFLAGS=-Wl,-Bsymbolic-functions
+               AC_TRY_LINK([], [int main (void) { return 0; }],
+                           AC_MSG_RESULT(yes)
+                           enable_Bsymbolic=yes,
+                           AC_MSG_RESULT(no)
+                           enable_Bsymbolic=no)
+               LDFLAGS="${SAVED_LDFLAGS}"])
+
+
+dnl *** set variables based on configure arguments ***
+
+dnl set license and copyright notice
+GST_LICENSE="LGPL"
+AC_DEFINE_UNQUOTED(GST_LICENSE, "$GST_LICENSE", [GStreamer license])
+AC_SUBST(GST_LICENSE)
+
+dnl set location of plugin directory
+AG_GST_SET_PLUGINDIR
+
+dnl set release date/time
+AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO],
+  ["${srcdir}/gst-plugins-base.doap"],
+  [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO])
+
+dnl define an ERROR_CFLAGS Makefile variable
+dnl -Wformat-nonliteral - see ext/pango/gstclockoverlay.c and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39438
+AG_GST_SET_ERROR_CFLAGS($GST_GIT, [
+    -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar -Wnested-externs ])
+
+dnl define an ERROR_CXXFLAGS Makefile variable
+AG_GST_SET_ERROR_CXXFLAGS($GST_GIT, [
+    -Wmissing-declarations -Wredundant-decls -Wundef
+    -Wwrite-strings -Wformat-nonliteral -Wformat-security
+    -Winit-self -Wmissing-include-dirs -Waddress -Waggregate-return
+    -Wno-multichar])
+
+dnl define correct level for debugging messages
+AG_GST_SET_LEVEL_DEFAULT($GST_GIT)
+
+dnl used in examples
+AG_GST_DEFAULT_ELEMENTS
+
+dnl needed for encoding-target
+GST_DATADIR="$GST_PREFIX/share"
+AC_DEFINE_UNQUOTED(GST_DATADIR, "$GST_DATADIR", [system wide data directory])
+AC_DEFINE_UNQUOTED(GST_MAJORMINOR, "$GST_MAJORMINOR", [major/minor version])
+
+dnl behaviour of speex based audio resampler
+AC_MSG_CHECKING(which audio resample format to use for integer)
+AC_ARG_WITH([audioresample_format],
+        AS_HELP_STRING([--with-audioresample-format],[Which implementation should be used for integer audio resampling, int/float/auto, (default is auto)]),
+        [ac_cv_audioresample_format=$withval], [ac_cv_audioresample_format=auto])dnl
+AC_MSG_RESULT($ac_cv_audioresample_format)
+case $ac_cv_audioresample_format in
+  int)
+    AC_DEFINE(AUDIORESAMPLE_FORMAT_INT,1,[The int implementation should be used for integer audio resampling])
+    AC_SUBST(AUDIORESAMPLE_FORMAT_INT)
+  ;;
+  float)
+    AC_DEFINE(AUDIORESAMPLE_FORMAT_FLOAT,1,[The float implementation should be used for integer audio resampling])
+    AC_SUBST(AUDIORESAMPLE_FORMAT_FLOAT)
+  ;;
+  auto)
+    AC_DEFINE(AUDIORESAMPLE_FORMAT_AUTO,1,[The implementation that should be used for integer audio resampling witll be benchmarked at runtime])
+    AC_SUBST(AUDIORESAMPLE_FORMAT_AUTO)
+esac
+
+dnl *** plug-ins to include ***
+
+dnl these are all the gst plug-ins, compilable without additional libs
+AG_GST_CHECK_PLUGIN(adder)
+AG_GST_CHECK_PLUGIN(app)
+AG_GST_CHECK_PLUGIN(audioconvert)
+AG_GST_CHECK_PLUGIN(audiorate)
+AG_GST_CHECK_PLUGIN(audiotestsrc)
+AG_GST_CHECK_PLUGIN(encoding)
+AG_GST_CHECK_PLUGIN(videoconvert)
+AG_GST_CHECK_PLUGIN(gdp)
+AG_GST_CHECK_PLUGIN(playback)
+AG_GST_CHECK_PLUGIN(audioresample)
+AG_GST_CHECK_PLUGIN(subparse)
+AG_GST_CHECK_PLUGIN(tcp)
+AG_GST_CHECK_PLUGIN(typefind)
+AG_GST_CHECK_PLUGIN(videotestsrc)
+AG_GST_CHECK_PLUGIN(videorate)
+AG_GST_CHECK_PLUGIN(videoscale)
+AG_GST_CHECK_PLUGIN(volume)
+
+dnl FIXME 0.11: check for libxml, split subparse and move libxml parts to ext/
+AM_CONDITIONAL(USE_XML, false)
+AC_DEFINE([GST_DISABLE_XML], [1], [set to disable libxml2-dependent code in subparse])
+
+dnl disable plug-ins that require libxml2's HTML support if it is not available
+if test "x$HAVE_LIBXML_HTML" != "xyes"; then
+  AG_GST_DISABLE_PLUGIN(subparse)
+fi
+
+dnl disable plug-ins that require sys/socket.h if it is not available
+if test "x$HAVE_SYS_SOCKET_H" != "xyes"; then
+  AG_GST_DISABLE_PLUGIN(tcp)
+fi
+
+dnl iso-codes is optional, used by libgsttag
+AC_ARG_ENABLE(iso-codes,
+AC_HELP_STRING([--enable-iso-codes],[use iso-codes if installed]),
+[case "${enableval}" in
+  yes) enable_iso_codes=yes ;;
+  no)  enable_iso_codes=no ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-iso-codes) ;;
+esac
+],
+[enable_iso_codes=yes]) dnl Default value
+
+AC_MSG_CHECKING([whether to use iso-codes if they are available])
+if test "x$enable_iso_codes" = "xyes"; then
+  AC_MSG_RESULT([yes])
+  have_iso_codes=no
+  AC_MSG_CHECKING([whether iso-codes are available on this system])
+  if $PKG_CONFIG iso-codes; then
+    AC_MSG_RESULT([yes])
+    AC_MSG_CHECKING([whether iso-codes has iso-639 domain])
+    if $PKG_CONFIG --variable=domains iso-codes | $GREP -q 639 ; then
+      AC_MSG_RESULT([yes])
+      AC_MSG_CHECKING([for iso-codes prefix])
+      ISO_CODES_PREFIX=`$PKG_CONFIG --variable=prefix iso-codes`
+      if test -d "$ISO_CODES_PREFIX"; then
+        AC_MSG_RESULT([yes])
+        AC_MSG_CHECKING([ISO_CODES_PREFIX])
+        AC_MSG_RESULT([$ISO_CODES_PREFIX])
+        ISO_639_DOMAIN="iso_639"
+        AC_MSG_CHECKING([ISO_639_DOMAIN])
+        AC_MSG_RESULT([$ISO_639_DOMAIN])
+        have_iso_codes=yes
+        AC_DEFINE([HAVE_ISO_CODES], [1], [make use of iso-codes for ISO-639])
+        AC_DEFINE_UNQUOTED([ISO_CODES_PREFIX], ["$ISO_CODES_PREFIX"], [prefix])
+        ISO_CODES_VERSION=`$PKG_CONFIG --modversion iso-codes`
+        AC_DEFINE_UNQUOTED([ISO_CODES_VERSION], ["$ISO_CODES_VERSION"], [ ])
+      else
+        AC_MSG_RESULT([no])
+      fi
+    else
+      AC_MSG_RESULT([no])
+    fi
+  else
+    AC_MSG_RESULT([no])
+  fi
+  AM_CONDITIONAL(USE_ISO_CODES, test "x$have_iso_codes" = "xyes")
+else
+  AC_MSG_RESULT([no (disabled via --disable-iso-codes)])
+  AM_CONDITIONAL(USE_ISO_CODES, false)
+fi
+
+dnl *** zlib is optionally used by id3 tag parsing in libgsttag ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_ZLIB, true)
+AG_GST_CHECK_FEATURE(ZLIB, [zlib support for ID3 parsing in libgsttag],, [
+  PKG_CHECK_MODULES(ZLIB, [ zlib ], [
+      HAVE_ZLIB="yes"
+    ], [
+      AG_GST_CHECK_LIBHEADER(ZLIB, z, uncompress,, zlib.h, [
+        HAVE_ZLIB="yes"
+        ZLIB_LIBS="-lz"
+        AC_SUBST(ZLIB_LIBS)
+      ])
+    ])
+])
+
+dnl *** sys plug-ins ***
+
+echo
+AC_MSG_NOTICE([Checking libraries for plugins in sys/])
+echo
+
+dnl *** X11 ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_X, true)
+AG_GST_CHECK_FEATURE(X, [X libraries and plugins],
+                  [ximagesink], [
+  AC_PATH_XTRA
+  ac_cflags_save="$CFLAGS"
+  ac_cppflags_save="$CPPFLAGS"
+  CFLAGS="$CFLAGS $X_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+  dnl now try to find the HEADER
+  AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no")
+
+  if test "x$HAVE_X" = "xno"
+  then
+    AC_MSG_NOTICE([cannot find X11 development files])
+  else
+    dnl this is much more than we want
+    X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS"
+    dnl AC_PATH_XTRA only defines the path needed to find the X libs,
+    dnl it does not add the libs; therefore we add them here
+    X_LIBS="$X_LIBS -lX11"
+    AC_SUBST(X_CFLAGS)
+    AC_SUBST(X_LIBS)
+  fi
+  AC_SUBST(HAVE_X)
+  CFLAGS="$ac_cflags_save"
+  CPPFLAGS="$ac_cppflags_save"
+])
+  
+dnl Check for Xv extension
+translit(dnm, m, l) AM_CONDITIONAL(USE_XVIDEO, true)
+AG_GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions],
+                  [xvimagesink], [
+  AG_GST_CHECK_XV
+])
+
+dnl check for X Shm
+translit(dnm, m, l) AM_CONDITIONAL(USE_XSHM, true)
+AG_GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], , [
+  if test x$HAVE_X = xyes; then
+    AC_CHECK_LIB(Xext, XShmAttach, 
+		 HAVE_XSHM="yes", HAVE_XSHM="no",
+		 $X_LIBS) 
+    if test "x$HAVE_XSHM" = "xyes"; then
+      XSHM_LIBS="-lXext"
+    else
+      dnl On AIX, it is in XextSam instead, but we still need -lXext
+      AC_CHECK_LIB(XextSam, XShmAttach, 
+		   HAVE_XSHM="yes", HAVE_XSHM="no",
+		   $X_LIBS) 
+      if test "x$HAVE_XSHM" = "xyes"; then
+	XSHM_LIBS="-lXext -lXextSam"
+      fi
+    fi
+  fi
+], , [ 
+  AC_SUBST(HAVE_XSHM) 
+  AC_SUBST(XSHM_LIBS) 
+])
+
+dnl *** ext plug-ins ***
+dnl keep this list sorted alphabetically !
+
+if test "x$BUILD_EXTERNAL" = "xyes"; then
+
+echo
+AC_MSG_NOTICE([Checking libraries for plugins in ext/])
+echo
+
+dnl *** alsa ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_ALSA, true)
+AG_GST_CHECK_FEATURE(ALSA, [ALSA], alsa, [
+  PKG_CHECK_MODULES(ALSA, alsa >= 0.9.1, [
+    HAVE_ALSA="yes"
+    AC_SUBST(ALSA_CFLAGS)
+    AC_SUBST(ALSA_LIBS)
+  ], [
+    AM_PATH_ALSA(0.9.1, HAVE_ALSA="yes", HAVE_ALSA="no")
+  ])
+])
+
+dnl *** CDParanoia ***
+dnl Note: upstream has a pkg-config file only in post-10.2 SVN so far
+translit(dnm, m, l) AM_CONDITIONAL(USE_CDPARANOIA, true)
+AG_GST_CHECK_FEATURE(CDPARANOIA, [CDParanoia], cdparanoia, [
+  PKG_CHECK_MODULES(CDPARANOIA, cdparanoia-3 >= 10.2, [
+    HAVE_CDPARANOIA="yes"
+  ], [
+    AG_GST_CHECK_LIBHEADER(CDPARANOIA, cdda_interface, 
+                        cdda_open, -lm, 
+                        cdda_interface.h, 
+                        CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                        HEADER_DIR="no"
+                        FOUND_CDPARANOIA="yes")
+    if test "x$FOUND_CDPARANOIA" != "xyes";
+    then
+      AG_GST_CHECK_LIBHEADER(CDPARANOIA, cdda_interface, 
+                          cdda_open, -lm, 
+                          cdda/cdda_interface.h, 
+                          CDPARANOIA_LIBS="-lcdda_interface -lcdda_paranoia"
+                          HEADER_DIR="yes"
+                          FOUND_CDPARANOIA="yes")
+    fi
+    if test "x$HEADER_DIR" = "xyes";
+    then
+      AC_DEFINE_UNQUOTED(CDPARANOIA_HEADERS_IN_DIR, ,
+                         defined if cdda headers are in a cdda/ directory)
+    fi
+    if test "x$FOUND_CDPARANOIA" = "xyes";
+    then
+      AC_CHECK_LIB(cdda_paranoia,
+                   paranoia_cachemodel_size,
+                   : ,
+                   HAVE_CDPARANOIA=no,
+  		 [-lcdda_interface])
+    fi
+
+    AC_SUBST(CDPARANOIA_LIBS)
+  ])
+])
+dnl FIXME : add second check somehow if that is necessary
+dnl AC_CHECK_LIB(cdda_paranoia, paranoia_init, : , HAVE_CDPARANOIA=no, -lcdda_interface )
+dnl AC_CHECK_HEADER(cdda_paranoia.h, :, HAVE_CDPARANOIA=no)
+
+dnl *** ivorbis ***
+dnl AM_PATH_IVORBIS only takes two options
+translit(dnm, m, l) AM_CONDITIONAL(USE_IVORBIS, true)
+AG_GST_CHECK_FEATURE(IVORBIS, [integer vorbis plug-in], ivorbisdec, [
+  AG_GST_PKG_CHECK_MODULES(IVORBIS, vorbisidec)
+  if test $HAVE_IVORBIS = no
+  then
+    IVORBIS_LIBS=
+    IVORBIS_CFLAGS=
+    AC_CHECK_LIB(vorbisidec, vorbis_block_init,
+      [IVORBIS_LIBS=-lvorbisidec
+      HAVE_IVORBIS=yes
+      case $host in
+      arm-*-*)
+        IVORBIS_CFLAGS="-D_ARM_ASSEM_ $IVORBIS_CFLAGS"
+      esac
+      ],
+      HAVE_IVORBIS=no)
+    AC_SUBST(IVORBIS_LIBS)
+    AC_SUBST(IVORBIS_CFLAGS)
+  else
+    AC_CHECK_LIB(vorbisidec, vorbis_dsp_pcmout,
+      AC_DEFINE([USE_TREMOLO],1, "Define if building for android"),
+      USE_TREMOLO=no)
+  fi
+])
+
+dnl *** libgio ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_GIO, true)
+AG_GST_CHECK_FEATURE(GIO, [GIO library], gio, [
+  PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.16, [
+    HAVE_GIO="yes"
+    GIO_MODULE_DIR="`$PKG_CONFIG --variable=giomoduledir gio-2.0`"
+    AC_DEFINE_UNQUOTED(GIO_MODULE_DIR, "$GIO_MODULE_DIR",
+           [The GIO modules directory.])
+    GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`"
+    AC_DEFINE_UNQUOTED(GIO_LIBDIR, "$GIO_LIBDIR",
+           [The GIO library directory.])
+  ], [
+    HAVE_GIO="no"
+  ])
+  AC_SUBST(GIO_CFLAGS)
+  AC_SUBST(GIO_LIBS)
+  AC_SUBST(GIO_LDFLAGS)
+])
+
+dnl *** libvisual ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_LIBVISUAL, true)
+AG_GST_CHECK_FEATURE(LIBVISUAL, [libvisual visualization library], libvisual, [
+  AG_GST_PKG_CHECK_MODULES(LIBVISUAL, libvisual-0.4 >= 0.4.0)
+  if test $HAVE_LIBVISUAL = no
+  then
+    AG_GST_PKG_CHECK_MODULES(LIBVISUAL, libvisual = 0.2.0)
+    if test x$HAVE_LIBVISUAL = xyes; then
+      LIBVIS_PLUGINSDIR="`$PKG_CONFIG --variable=pluginsbasedir libvisual-0.2`"
+    fi
+  else
+    if test x$HAVE_LIBVISUAL = xyes; then
+      LIBVIS_PLUGINSDIR="`$PKG_CONFIG --variable=pluginsbasedir libvisual-0.4`"
+    fi
+  fi
+  AC_MSG_NOTICE([libvisual pluginsdir: $LIBVIS_PLUGINSDIR])
+  if test x$LIBVIS_PLUGINSDIR != x; then
+    AC_DEFINE_UNQUOTED(LIBVISUAL_PLUGINSBASEDIR,
+        "$LIBVIS_PLUGINSDIR",
+        [directory in which the detected libvisual's plugins are located])
+  fi
+])
+
+dnl *** ogg ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_OGG, true)
+AG_GST_CHECK_FEATURE(OGG, [Xiph Ogg library], ogg, [
+  AG_GST_PKG_CHECK_MODULES(OGG, ogg >= 1.0)
+  if test $HAVE_OGG = no
+  then
+    XIPH_PATH_OGG(HAVE_OGG="yes", HAVE_OGG="no")
+    AS_SCRUB_INCLUDE(OGG_CFLAGS)
+  fi
+])
+
+dnl *** pango ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true)
+AG_GST_CHECK_FEATURE(PANGO, [Pango font rendering], pango, [
+  AG_GST_PKG_CHECK_MODULES(PANGO, pango >= 1.16.0  pangocairo >= 1.16.0)
+])
+
+dnl *** theora ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_THEORA, true)
+AG_GST_CHECK_FEATURE(THEORA, [Xiph Theora video codec], theora, [
+  AG_GST_PKG_CHECK_MODULES(THEORA, theoradec >= 1.1 theoraenc >= 1.1)
+])
+
+dnl *** vorbis ***
+dnl AM_PATH_VORBIS only takes two options
+translit(dnm, m, l) AM_CONDITIONAL(USE_VORBIS, true)
+AG_GST_CHECK_FEATURE(VORBIS, [Xiph Vorbis audio codec], vorbis, [
+  AG_GST_PKG_CHECK_MODULES(VORBIS, vorbis >= 1.0 vorbisenc >= 1.0)
+  if test $HAVE_VORBIS = no
+  then
+    XIPH_PATH_VORBIS(HAVE_VORBIS="yes", HAVE_VORBIS="no")
+    AS_SCRUB_INCLUDE(VORBIS_CFLAGS)
+  fi
+])
+
+if test "x$HAVE_VORBIS" = "xyes"; then
+  ac_cflags_save="$CFLAGS"
+  AC_COMPILE_IFELSE(
+    AC_LANG_PROGRAM([
+#include <vorbis/codec.h>
+                     ],[
+vorbis_dsp_state *v;
+
+vorbis_synthesis_restart (v);
+                     ]), HAVE_VSR=yes, HAVE_VSR=no)
+  if test "x$HAVE_VSR" = "xyes"; then
+    AC_DEFINE_UNQUOTED(HAVE_VORBIS_SYNTHESIS_RESTART, 1,
+                       [defined if vorbis_synthesis_restart is present])
+  fi
+  CFLAGS="$ac_cflags_save"
+fi
+
+else
+
+dnl not building plugins with external dependencies,
+dnl but we still need to set the conditionals
+AM_CONDITIONAL(USE_ALSA, false)
+AM_CONDITIONAL(USE_CDPARANOIA, false)
+AM_CONDITIONAL(USE_GIO, false)
+AM_CONDITIONAL(USE_IVORBIS, false)
+AM_CONDITIONAL(USE_LIBVISUAL, false)
+AM_CONDITIONAL(USE_OGG, false)
+AM_CONDITIONAL(USE_PANGO, false)
+AM_CONDITIONAL(USE_THEORA, false)
+AM_CONDITIONAL(USE_VORBIS, false)
+
+fi dnl of EXT plugins
+
+dnl seeking needs freetype, so check for it here
+PKG_CHECK_MODULES(FT2, freetype2 >= 2.0.9, HAVE_FT2="yes", [
+  AC_CHECK_FT2(2.0.9, HAVE_FT2="yes", HAVE_FT2="no")
+])
+dnl make the HAVE_FT2 variable available to automake and Makefile.am
+AM_CONDITIONAL(HAVE_FT2, test "x$HAVE_FT2" = "xyes")
+AC_SUBST(FT2_CFLAGS)
+AC_SUBST(FT2_LIBS)
+
+dnl *** finalize CFLAGS, LDFLAGS, LIBS
+
+dnl Overview:
+dnl GST_OPTION_CFLAGS:  common flags for profiling, debugging, errors, ...
+dnl GST_*:              flags shared by built objects to link against GStreamer
+dnl GST_PLUGINS_BASE_CFLAGS: to link internally against the plugins base libs
+dnl                          (compare to other modules) or for i18n
+dnl GST_ALL_LDFLAGS:    linker flags shared by all
+dnl GST_LIB_LDFLAGS:    additional linker flags for all libaries
+dnl GST_LT_LDFLAGS:     library versioning of our libraries
+dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins
+
+dnl GST_OPTION_CFLAGS
+if test "x$USE_DEBUG" = xyes; then
+   PROFILE_CFLAGS="-g"
+fi
+AC_SUBST(PROFILE_CFLAGS)
+
+if test "x$PACKAGE_VERSION_NANO" = "x1"; then
+  dnl Define _only_ when compiling a git version (not pre-releases or releases)
+  DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
+else
+  DEPRECATED_CFLAGS=""
+fi
+AC_SUBST(DEPRECATED_CFLAGS)
+
+dnl every flag in GST_OPTION_CFLAGS and GST_OPTION_CXXFLAGS can be overridden
+dnl at make time with e.g. make ERROR_CFLAGS=""
+GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
+GST_OPTION_CXXFLAGS="\$(WARNING_CXXFLAGS) \$(ERROR_CXXFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
+AC_SUBST(GST_OPTION_CFLAGS)
+AC_SUBST(GST_OPTION_CXXFLAGS)
+
+dnl our libraries need to be versioned correctly
+AC_SUBST(GST_LT_LDFLAGS)
+
+dnl GST_PLUGINS_BASE_CFLAGS
+dnl prefer internal headers to already installed ones
+dnl also add builddir include for enumtypes and marshal
+GST_PLUGINS_BASE_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
+AC_SUBST(GST_PLUGINS_BASE_CFLAGS)
+
+dnl FIXME: do we want to rename to GST_ALL_* ?
+dnl add GST_OPTION_CFLAGS, but overridable
+GST_CFLAGS="$GST_CFLAGS -DGST_USE_UNSTABLE_API"
+GST_CXXFLAGS="$GLIB_CFLAGS $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CXXFLAGS)"
+GST_CFLAGS="$GLIB_CFLAGS $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
+AC_SUBST(GST_CFLAGS)
+AC_SUBST(GST_CXXFLAGS)
+dnl add GCOV libs because libtool strips -fprofile-arcs -ftest-coverage
+GST_LIBS="$GST_LIBS \$(GCOV_LIBS)"
+AC_SUBST(GST_LIBS)
+
+dnl LDFLAGS really should only contain flags, not libs - they get added before
+dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
+GST_ALL_LDFLAGS="-no-undefined"
+if test "x${enable_Bsymbolic}" = "xyes"; then
+  GST_ALL_LDFLAGS="$GST_ALL_LDFLAGS -Wl,-Bsymbolic-functions"
+fi
+AC_SUBST(GST_ALL_LDFLAGS)
+
+dnl GST_LIB_LDFLAGS
+dnl linker flags shared by all libraries
+dnl LDFLAGS modifier defining exported symbols from built libraries
+dnl (export _gst_foo but not __gst_foo)
+GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
+AC_SUBST(GST_LIB_LDFLAGS)
+
+dnl this really should only contain flags, not libs - they get added before
+dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
+GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_desc.*' $GST_ALL_LDFLAGS"
+AC_SUBST(GST_PLUGIN_LDFLAGS)
+
+dnl *** output files ***
+
+AC_CONFIG_FILES(
+Makefile
+gst-plugins-base.spec
+gst/Makefile
+gst/adder/Makefile
+gst/app/Makefile
+gst/audioconvert/Makefile
+gst/audiorate/Makefile
+gst/audiotestsrc/Makefile
+gst/encoding/Makefile
+gst/videoconvert/Makefile
+gst/gdp/Makefile
+gst/playback/Makefile
+gst/audioresample/Makefile
+gst/subparse/Makefile
+gst/tcp/Makefile
+gst/typefind/Makefile
+gst/videotestsrc/Makefile
+gst/videorate/Makefile
+gst/videoscale/Makefile
+gst/volume/Makefile
+sys/Makefile
+sys/ximage/Makefile
+sys/xvimage/Makefile
+ext/Makefile
+ext/alsa/Makefile
+ext/cdparanoia/Makefile
+ext/gio/Makefile
+ext/libvisual/Makefile
+ext/ogg/Makefile
+ext/pango/Makefile
+ext/theora/Makefile
+ext/vorbis/Makefile
+gst-libs/Makefile
+gst-libs/gst/Makefile
+gst-libs/gst/audio/Makefile
+gst-libs/gst/app/Makefile
+gst-libs/gst/cdda/Makefile
+gst-libs/gst/fft/Makefile
+gst-libs/gst/interfaces/Makefile
+gst-libs/gst/netbuffer/Makefile
+gst-libs/gst/riff/Makefile
+gst-libs/gst/rtp/Makefile
+gst-libs/gst/rtsp/Makefile
+gst-libs/gst/sdp/Makefile
+gst-libs/gst/tag/Makefile
+gst-libs/gst/pbutils/Makefile
+gst-libs/gst/pbutils/gstpluginsbaseversion.h
+gst-libs/gst/video/Makefile
+tools/Makefile
+pkgconfig/Makefile
+pkgconfig/gstreamer-audio.pc
+pkgconfig/gstreamer-audio-uninstalled.pc
+pkgconfig/gstreamer-app.pc
+pkgconfig/gstreamer-app-uninstalled.pc
+pkgconfig/gstreamer-cdda.pc
+pkgconfig/gstreamer-cdda-uninstalled.pc
+pkgconfig/gstreamer-fft.pc
+pkgconfig/gstreamer-fft-uninstalled.pc
+pkgconfig/gstreamer-interfaces.pc
+pkgconfig/gstreamer-interfaces-uninstalled.pc
+pkgconfig/gstreamer-netbuffer.pc
+pkgconfig/gstreamer-netbuffer-uninstalled.pc
+pkgconfig/gstreamer-pbutils.pc
+pkgconfig/gstreamer-pbutils-uninstalled.pc
+pkgconfig/gstreamer-riff.pc
+pkgconfig/gstreamer-riff-uninstalled.pc
+pkgconfig/gstreamer-rtp.pc
+pkgconfig/gstreamer-rtp-uninstalled.pc
+pkgconfig/gstreamer-rtsp.pc
+pkgconfig/gstreamer-rtsp-uninstalled.pc
+pkgconfig/gstreamer-sdp.pc
+pkgconfig/gstreamer-sdp-uninstalled.pc
+pkgconfig/gstreamer-tag.pc
+pkgconfig/gstreamer-tag-uninstalled.pc
+pkgconfig/gstreamer-video.pc
+pkgconfig/gstreamer-video-uninstalled.pc
+pkgconfig/gstreamer-plugins-base.pc
+pkgconfig/gstreamer-plugins-base-uninstalled.pc
+tests/Makefile
+tests/check/Makefile
+tests/examples/Makefile
+tests/examples/app/Makefile
+tests/examples/audio/Makefile
+tests/examples/dynamic/Makefile
+tests/examples/encoding/Makefile
+tests/examples/gio/Makefile
+tests/examples/overlay/Makefile
+tests/examples/seek/Makefile
+tests/examples/snapshot/Makefile
+tests/examples/playrec/Makefile
+tests/examples/volume/Makefile
+tests/files/Makefile
+tests/icles/Makefile
+tests/icles/playback/Makefile
+docs/Makefile
+docs/design/Makefile
+docs/libs/Makefile
+docs/plugins/Makefile
+docs/version.entities
+po/Makefile.in
+common/Makefile
+common/m4/Makefile
+m4/Makefile
+)
+
+dnl Create the config.h file for Visual Studio builds
+dnl Beware of spaces and /'s in some of the shell variable contents.
+sed \
+    -e 's/.*config.h.in.*autoheader.*/\/* Autogenerated config.h created for win32 Visual Studio builds *\/\n\n\/* PREFIX -- specifically added for Windows for easier moving *\/\n#define PREFIX "C:\\\\gstreamer"/' \
+    -e 's/.* GST_INSTALL_PLUGINS_HELPER/#define GST_INSTALL_PLUGINS_HELPER PREFIX "\\\\libexec\\\\gst-install-plugins-helper.exe"/' \
+    -e 's/.* GETTEXT_PACKAGE$/#define GETTEXT_PACKAGE "'$GETTEXT_PACKAGE'"/' \
+    -e 's/.* GST_DATADIR$/#define GST_DATADIR PREFIX "\\\\share"/' \
+    -e 's/.* GST_LEVEL_DEFAULT$/#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR/' \
+    -e 's/.* GST_LICENSE$/#define GST_LICENSE "'$GST_LICENSE'"/' \
+    -e 's/.* GST_MAJORMINOR$/#define GST_MAJORMINOR "'$GST_MAJORMINOR'"/' \
+    -e "s,.* GST_PACKAGE_NAME$,#define GST_PACKAGE_NAME \"${GST_PACKAGE_NAME}\"," \
+    -e 's/.* GST_PACKAGE_ORIGIN$/#define GST_PACKAGE_ORIGIN "Unknown package origin"/' \
+    -e "s,.* GST_PACKAGE_RELEASE_DATETIME$,#define GST_PACKAGE_RELEASE_DATETIME \"${GST_PACKAGE_RELEASE_DATETIME}\"," \
+    -e 's/.* HAVE_CPU_I386$/#define HAVE_CPU_I386 1/' \
+    -e 's/.* HAVE_FGETPOS$/#define HAVE_FGETPOS 1/' \
+    -e 's/.* HAVE_FSETPOS$/#define HAVE_FSETPOS 1/' \
+    -e 's/.* HAVE_ISO_CODES$/#undef HAVE_ISO_CODES/' \
+    -e 's/.* HAVE_LIBXML2$/#define HAVE_LIBXML2 1/' \
+    -e 's/.* HAVE_PROCESS_H$/#define HAVE_PROCESS_H 1/' \
+    -e 's/.* HAVE_STDLIB_H$/#define HAVE_STDLIB_H 1/' \
+    -e 's/.* HAVE_STRING_H$/#define HAVE_STRING_H 1/' \
+    -e 's/.* HAVE_SYS_STAT_H$/#define HAVE_SYS_STAT_H 1/' \
+    -e 's/.* HAVE_SYS_TYPES_H$/#define HAVE_SYS_TYPES_H 1/' \
+    -e 's/.* HAVE_WIN32$/#define HAVE_WIN32 1/' \
+    -e 's/.* HAVE_WINSOCK2_H$/#define HAVE_WINSOCK2_H 1/' \
+    -e 's/.* HOST_CPU$/#define HOST_CPU "i686"/' \
+    -e 's/.* ISO_CODES_PREFIX$/#undef ISO_CODES_PREFIX/' \
+    -e 's/.* ISO_CODES_VERSION$/#undef ISO_CODES_VERSION/' \
+    -e 's/.* LIBDIR$/#ifdef _DEBUG\n#  define LIBDIR PREFIX "\\\\debug\\\\lib"\n#else\n#  define LIBDIR PREFIX "\\\\lib"\n#endif/' \
+    -e 's/.* LOCALEDIR$/#define LOCALEDIR PREFIX "\\\\share\\\\locale"/' \
+    -e "s/.* PACKAGE$/#define PACKAGE \"$PACKAGE\"/" \
+    -e 's/.* PACKAGE_BUGREPORT$/#define PACKAGE_BUGREPORT "http:\/\/bugzilla.gnome.org\/enter_bug.cgi?product=GStreamer"/' \
+    -e "s/.* PACKAGE_NAME$/#define PACKAGE_NAME \"$PACKAGE_NAME\"/" \
+    -e "s/.* PACKAGE_STRING$/#define PACKAGE_STRING \"$PACKAGE_STRING\"/" \
+    -e 's/.* PACKAGE_TARNAME$/#define PACKAGE_TARNAME "'$PACKAGE_TARNAME'"/' \
+    -e 's/.* PACKAGE_VERSION$/#define PACKAGE_VERSION "'$PACKAGE_VERSION'"/' \
+    -e 's/.* PLUGINDIR$/#ifdef _DEBUG\n#  define PLUGINDIR PREFIX "\\\\debug\\\\lib\\\\gstreamer-0.11"\n#else\n#  define PLUGINDIR PREFIX "\\\\lib\\\\gstreamer-0.11"\n#endif/' \
+    -e 's/.* USE_BINARY_REGISTRY$/#define USE_BINARY_REGISTRY/' \
+    -e 's/.* VERSION$/#define VERSION "'$VERSION'"/' \
+    -e "s/.* DEFAULT_AUDIOSINK$/#define DEFAULT_AUDIOSINK \"directsoundsink\"/" \
+    -e "s/.* DEFAULT_VIDEOSINK$/#define DEFAULT_VIDEOSINK \"directdrawsink\"/" \
+    -e "s/.* DEFAULT_VISUALIZER$/#define DEFAULT_VISUALIZER \"goom\"/" \
+    config.h.in >win32/common/config.h-new
+
+
+
+AC_OUTPUT
+
+AG_GST_OUTPUT_PLUGINS
+ORC_OUTPUT
+
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..df8eea7
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,630 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
+# Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+	       s/^ *//
+	       s/ \\*$//
+	       s/$/:/
+	       p
+	     }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..b0d55f4
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,18 @@
+if ENABLE_GTK_DOC
+if ENABLE_PLUGIN_DOCS
+PLUGIN_DOCS_DIRS = plugins
+else
+PLUGIN_DOCS_DIRS =
+endif
+else
+PLUGIN_DOCS_DIRS = plugins
+endif
+
+SUBDIRS = design libs $(PLUGIN_DOCS_DIRS)
+DIST_SUBDIRS = design libs plugins
+
+EXTRA_DIST = \
+        version.entities.in
+
+upload:
+	@if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644
index 0000000..a7095a4
--- /dev/null
+++ b/docs/Makefile.in
@@ -0,0 +1,771 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/version.entities.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = version.entities
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@ENABLE_GTK_DOC_FALSE@PLUGIN_DOCS_DIRS = plugins
+@ENABLE_GTK_DOC_TRUE@@ENABLE_PLUGIN_DOCS_FALSE@PLUGIN_DOCS_DIRS = 
+@ENABLE_GTK_DOC_TRUE@@ENABLE_PLUGIN_DOCS_TRUE@PLUGIN_DOCS_DIRS = plugins
+SUBDIRS = design libs $(PLUGIN_DOCS_DIRS)
+DIST_SUBDIRS = design libs plugins
+EXTRA_DIST = \
+        version.entities.in
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+version.entities: $(top_builddir)/config.status $(srcdir)/version.entities.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+upload:
+	@if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/design/Makefile.am b/docs/design/Makefile.am
new file mode 100644
index 0000000..357af4c
--- /dev/null
+++ b/docs/design/Makefile.am
@@ -0,0 +1,11 @@
+SUBDIRS =
+
+
+EXTRA_DIST = \
+	design-audiosinks.txt      \
+	design-decodebin.txt       \
+	design-encoding.txt       \
+	design-orc-integration.txt \
+	draft-keyframe-force.txt   \
+	draft-va.txt               \
+	part-playbin2.txt
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
new file mode 100644
index 0000000..009becd
--- /dev/null
+++ b/docs/design/Makefile.in
@@ -0,0 +1,768 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs/design
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = 
+EXTRA_DIST = \
+	design-audiosinks.txt      \
+	design-decodebin.txt       \
+	design-encoding.txt       \
+	design-orc-integration.txt \
+	draft-keyframe-force.txt   \
+	draft-va.txt               \
+	part-playbin2.txt
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/design/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu docs/design/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/design/design-audiosinks.txt b/docs/design/design-audiosinks.txt
new file mode 100644
index 0000000..0a84a98
--- /dev/null
+++ b/docs/design/design-audiosinks.txt
@@ -0,0 +1,138 @@
+Audiosink design
+----------------
+
+Requirements:
+
+ - must operate chain based.
+   Most simple playback pipelines will push audio from the decoders
+   into the audio sink.
+ 
+ - must operate getrange based
+   Most professional audio applications will operate in a mode where
+   the audio sink pulls samples from the pipeline. This is typically
+   done in a callback from the audiosink requesting N samples. The
+   callback is either scheduled from a thread or from an interrupt
+   from the audio hardware device. 
+
+ - Exact sample accurate clocks.
+   the audiosink must be able to provide a clock that is sample 
+   accurate even if samples are dropped or when discontinuities are
+   found in the stream.
+
+ - Exact timing of playback.
+   The audiosink must be able to play samples at their exact times.
+
+ - use DMA access when possible.
+   When the hardware can do DMA we should use it. This should also
+   work over bufferpools to avoid data copying to/from kernel space.
+
+
+Design:
+
+ The design is based on a set of base classes and the concept of a
+ ringbuffer of samples.
+
+   +-----------+   - provide preroll, rendering, timing
+   + basesink  +   - caps nego
+   +-----+-----+
+         |
+   +-----V----------+   - manages ringbuffer
+   + baseaudiosink  +   - manages scheduling (push/pull)
+   +-----+----------+   - manages clock/query/seek
+         |              - manages scheduling of samples in the ringbuffer
+         |              - manages caps parsing
+         |
+   +-----V------+   - default ringbuffer implementation with a GThread
+   + audiosink  +   - subclasses provide open/read/close methods
+   +------------+
+
+  The ringbuffer is a contiguous piece of memory divided into segtotal
+  pieces of segments. Each segment has segsize bytes.
+
+         play position 
+           v          
+   +---+---+---+-------------------------------------+----------+
+   + 0 | 1 | 2 | ....                                | segtotal |
+   +---+---+---+-------------------------------------+----------+
+   <--->
+     segsize bytes = N samples * bytes_per_sample.
+
+  
+  The ringbuffer has a play position, which is expressed in
+  segments. The play position is where the device is currently reading
+  samples from the buffer.
+
+  The ringbuffer can be put to the PLAYING or STOPPED state. 
+  
+  In the STOPPED state no samples are played to the device and the play
+  pointer does not advance. 
+  
+  In the PLAYING state samples are written to the device and the ringbuffer 
+  should call a configurable callback after each segment is written to the
+  device. In this state the play pointer is advanced after each segment is
+  written.
+
+  A write operation to the ringbuffer will put new samples in the ringbuffer.
+  If there is not enough space in the ringbuffer, the write operation will 
+  block.  The playback of the buffer never stops, even if the buffer is 
+  empty. When the buffer is empty, silence is played by the device.
+
+  The ringbuffer is implemented with lockfree atomic operations, especially
+  on the reading side so that low-latency operations are possible.
+
+  Whenever new samples are to be put into the ringbuffer, the position of the
+  read pointer is taken. The required write position is taken and the diff
+  is made between the required qnd actual position. If the defference is <0,
+  the sample is too late. If the difference is bigger than segtotal, the
+  writing part has to wait for the play pointer to advance. 
+
+
+Scheduling:
+
+  - chain based mode:
+
+   In chain based mode, bytes are written into the ringbuffer. This operation
+   will eventually block when the ringbuffer is filled. 
+  
+   When no samples arrive in time, the ringbuffer will play silence. Each 
+   buffer that arrives will be placed into the ringbuffer at the correct 
+   times. This means that dropping samples or inserting silence is done
+   automatically and very accurate and independend of the play pointer.
+   
+   In this mode, the ringbuffer is usually kept as full as possible. When 
+   using a small buffer (small segsize and segtotal), the latency for audio 
+   to start from the sink to when it is played can be kept low but at least
+   one context switch has to be made between read and write.
+
+  - getrange based mode
+
+    In getrange based mode, the baseaudiosink will use the callback function
+    of the ringbuffer to get a segsize samples from the peer element. These
+    samples will then be placed in the ringbuffer at the next play position.
+    It is assumed that the getrange function returns fast enough to fill the
+    ringbuffer before the play pointer reaches the write pointer.
+  
+    In this mode, the ringbuffer is usually kept as empty as possible. There
+    is no context switch needed between the elements that create the samples
+    and the actual writing of the samples to the device.
+
+
+DMA mode:
+
+  - Elements that can do DMA based access to the audio device have to subclass
+    from the GstBaseAudioSink class and wrap the DMA ringbuffer in a subclass
+    of GstRingBuffer.
+    
+    The ringbuffer subclass should trigger a callback after writing or playing
+    each sample to the device. This callback can be triggered from a thread or
+    from a signal from the audio device. 
+
+
+Clocks:
+
+   The GstBaseAudioSink class will use the ringbuffer to act as a clock provider.
+   It can do this by using the play pointer and the delay to calculate the
+   clock time.
+  
+
+  
diff --git a/docs/design/design-decodebin.txt b/docs/design/design-decodebin.txt
new file mode 100644
index 0000000..7ca84b6
--- /dev/null
+++ b/docs/design/design-decodebin.txt
@@ -0,0 +1,274 @@
+Decodebin design
+
+GstDecodeBin
+------------
+
+Description:
+
+  Autoplug and decode to raw media
+
+  Input : single pad with ANY caps Output : Dynamic pads
+
+* Contents
+
+  _ a GstTypeFindElement connected to the single sink pad
+
+  _ optionally a demuxer/parser
+
+  _ optionally one or more DecodeGroup
+
+* Autoplugging
+
+  The goal is to reach 'target' caps (by default raw media).
+
+  This is done by using the GstCaps of a source pad and finding the available
+demuxers/decoders GstElement that can be linked to that pad.
+
+  The process starts with the source pad of typefind and stops when no more
+non-target caps are left. It is commonly done while pre-rolling, but can also
+happen whenever a new pad appears on any element.
+
+  Once a target caps has been found, that pad is ghosted and the
+'pad-added' signal is emitted.
+
+  If no compatible elements can be found for a GstCaps, the pad is ghosted and
+the 'unknown-type' signal is emitted.
+
+
+* Assisted auto-plugging
+
+  When starting the auto-plugging process for a given GstCaps, two signals are
+emitted in the following way in order to allow the application/user to assist or
+fine-tune the process.
+
+  _ 'autoplug-continue' :
+
+    gboolean user_function (GstElement * decodebin, GstPad *pad, GstCaps * caps)
+
+    This signal is fired at the very beginning with the source pad GstCaps. If
+  the callback returns TRUE, the process continues normally. If the callback
+  returns FALSE, then the GstCaps are considered as a target caps and the
+  autoplugging process stops.
+
+  - 'autoplug-factories' :
+
+    GValueArray user_function (GstElement* decodebin, GstPad* pad, 
+         GstCaps* caps);
+
+    Get a list of elementfactories for @pad with @caps. This function is used to
+    instruct decodebin2 of the elements it should try to autoplug. The default
+    behaviour when this function is not overridern is to get all elements that
+    can handle @caps from the registry sorted by rank.
+
+  - 'autoplug-select' :
+
+    gint user_function (GstElement* decodebin, GstPad* pad, GstCaps* caps,
+                GValueArray* factories);
+
+    This signal is fired once autoplugging has got a list of compatible
+  GstElementFactory. The signal is emitted with the GstCaps of the source pad
+  and a pointer on the GValueArray of compatible factories.
+
+    The callback should return the index of the elementfactory in @factories
+    that should be tried next.
+
+    If the callback returns -1, the autoplugging process will stop as if no
+  compatible factories were found.
+
+  The default implementation of this function will try to autoplug the first
+  factory of the list.
+
+* Target Caps
+
+  The target caps are a read/write GObject property of decodebin.
+
+  By default the target caps are:
+
+  _ Raw audio : audio/x-raw-int, audio/x-raw-float
+
+  _ and raw video : video/x-raw-rgb, video/x-raw-yuv
+
+  _ and Text : text/plain, text/x-pango-markup
+
+
+* media chain/group handling
+
+  When autoplugging, all streams coming out of a demuxer will be grouped in a
+DecodeGroup.
+
+  All new source pads created on that demuxer after it has emitted the
+'no-more-pads' signal will be put in another DecodeGroup.
+
+  Only one decodegroup can be active at any given time. If a new decodegroup is
+created while another one exists, that decodegroup will be set as blocking until
+the existing one has drained.
+
+
+
+DecodeGroup
+-----------
+
+Description:
+
+  Streams belonging to the same group/chain of a media file.
+
+* Contents
+
+  The DecodeGroup contains:
+
+  _ a GstMultiQueue to which all streams of a the media group are connected.
+
+  _ the eventual decoders which are autoplugged in order to produce the
+  requested target pads.
+
+* Proper group draining
+
+  The DecodeGroup takes care that all the streams in the group are completely
+drained (EOS has come through all source ghost pads).
+
+* Pre-roll and block
+
+  The DecodeGroup has a global blocking feature. If enabled, all the ghosted
+source pads for that group will be blocked.
+
+  A method is available to unblock all blocked pads for that group.
+ 
+
+
+GstMultiQueue
+-------------
+
+Description:
+
+  Multiple input-output data queue
+  
+  The GstMultiQueue achieves the same functionnality as GstQueue, with a few
+differences:
+
+  * Multiple streams handling.
+
+    The element handles queueing data on more than one stream at once. To
+  achieve such a feature it has request sink pads (sink_%d) and 'sometimes' src
+  pads (src_%d).
+
+    When requesting a given sinkpad, the associated srcpad for that stream will
+  be created. Ex: requesting sink_1 will generate src_1.
+
+
+  * Non-starvation on multiple streams.
+
+    If more than one stream is used with the element, the streams' queues will
+  be dynamically grown (up to a limit), in order to ensure that no stream is
+  risking data starvation. This guarantees that at any given time there are at
+  least N bytes queued and available for each individual stream.
+
+    If an EOS event comes through a srcpad, the associated queue should be
+  considered as 'not-empty' in the queue-size-growing algorithm.
+
+
+  * Non-linked srcpads graceful handling.
+
+    A GstTask is started for all srcpads when going to GST_STATE_PAUSED.
+
+    The task are blocking against a GCondition which will be fired in two
+  different cases:
+
+    _ When the associated queue has received a buffer.
+
+    _ When the associated queue was previously declared as 'not-linked' and the
+    first buffer of the queue is scheduled to be pushed synchronously in
+    relation to the order in which it arrived globally in the element (see
+    'Synchronous data pushing' below).
+
+    When woken up by the GCondition, the GstTask will try to push the next
+  GstBuffer/GstEvent on the queue. If pushing the GstBuffer/GstEvent returns
+  GST_FLOW_NOT_LINKED, then the associated queue is marked as 'not-linked'. If
+  pushing the GstBuffer/GstEvent succeeded the queue will no longer be marked as
+  'not-linked'.
+
+    If pushing on all srcpads returns GstFlowReturn different from GST_FLOW_OK,
+  then all the srcpads' tasks are stopped and subsequent pushes on sinkpads will
+  return GST_FLOW_NOT_LINKED.
+
+  * Synchronous data pushing for non-linked pads.
+
+    In order to better support dynamic switching between streams, the multiqueue
+  (unlike the current GStreamer queue) continues to push buffers on non-linked
+  pads rather than shutting down. 
+
+    In addition, to prevent a non-linked stream from very quickly consuming all
+  available buffers and thus 'racing ahead' of the other streams, the element
+  must ensure that buffers and inlined events for a non-linked stream are pushed
+  in the same order as they were received, relative to the other streams
+  controlled by the element. This means that a buffer cannot be pushed to a
+  non-linked pad any sooner than buffers in any other stream which were received
+  before it.
+
+
+=====================================
+ Parsers, decoders and auto-plugging
+=====================================
+
+This section has DRAFT status.
+
+Some media formats come in different "flavours" or "stream formats". These
+formats differ in the way the setup data and media data is signalled and/or
+packaged. An example for this is H.264 video, where there is a bytestream
+format (with codec setup data signalled inline and units prefixed by a sync
+code and packet length information) and a "raw" format where codec setup
+data is signalled out of band (via the caps) and the chunking is implicit
+in the way the buffers were muxed into a container, to mention just two of
+the possible variants.
+
+Especially on embedded platforms it is common that decoders can only
+handle one particular stream format, and not all of them.
+
+Where there are multiple stream formats, parsers are usually expected
+to be able to convert between the different formats. This will, if
+implemented correctly, work as expected in a static pipeline such as
+
+   ... ! parser ! decoder ! sink
+
+where the parser can query the decoder's capabilities even before
+processing the first piece of data, and configure itself to convert
+accordingly, if conversion is needed at all.
+
+In an auto-plugging context this is not so straight-forward though,
+because elements are plugged incrementally and not before the previous
+element has processes some data and decided what it will output exactly
+(unless the template caps are completely fixed, then it can continue
+right away, this is not always the case here though, see below). A
+parser will thus have to decide on *some* output format so auto-plugging
+can continue. It doesn't know anything about the available decoders and
+their capabilities though, so it's possible that it will choose a format
+that is not supported by any of the available decoders, or by the preferred
+decoder.
+
+If the parser had sufficiently concise but fixed source pad template caps,
+decodebin could continue to plug a decoder right away, allowing the
+parser to configure itself in the same way as it would with a static
+pipeline. This is not an option, unfortunately, because often the
+parser needs to process some data to determine e.g. the format's profile or
+other stream properties (resolution, sample rate, channel configuration, etc.),
+and there may be different decoders for different profiles (e.g. DSP codec
+for baseline profile, and software fallback for main/high profile; or a DSP
+codec only supporting certain resolutions, with a software fallback for
+unusual resolutions). So if decodebin just plugged the most highest-ranking
+decoder, that decoder might not be be able to handle the actual stream later
+on, which would yield an error (this is a data flow error then which would
+be hard to intercept and avoid in decodebin). In other words, we can't solve
+this issue by plugging a decoder right away with the parser.
+
+So decodebin needs to communicate to the parser the set of available decoder
+caps (which would contain the relevant capabilities/restrictions such as
+supported profiles, resolutions, etc.), after the usual "autoplug-*" signal
+filtering/sorting of course.
+
+This is done by plugging a capsfilter element right after the parser, and
+constructing set of filter caps from the list of available decoders (one
+appends at the end just the name(s) of the caps structures from the parser
+pad template caps to function as an 'ANY other' caps equivalent). This let
+the parser negotiate to a supported stream format in the same way as with
+the static pipeline mentioned above, but of course incur some overhead
+through the additional capsfilter element.
+
diff --git a/docs/design/design-encoding.txt b/docs/design/design-encoding.txt
new file mode 100644
index 0000000..dda79ad
--- /dev/null
+++ b/docs/design/design-encoding.txt
@@ -0,0 +1,571 @@
+Encoding and Muxing
+-------------------
+
+Summary
+-------
+ A. Problems
+ B. Goals
+ 1. EncodeBin
+ 2. Encoding Profile System
+ 3. Helper Library for Profiles
+ I. Use-cases researched
+
+
+A. Problems this proposal attempts to solve
+-------------------------------------------
+
+* Duplication of pipeline code for gstreamer-based applications
+  wishing to encode and or mux streams, leading to subtle differences
+  and inconsistencies accross those applications.
+
+* No unified system for describing encoding targets for applications
+  in a user-friendly way.
+
+* No unified system for creating encoding targets for applications,
+  resulting in duplication of code accross all applications,
+  differences and inconsistencies that come with that duplication,
+  and applications hardcoding element names and settings resulting in
+  poor portability.
+
+
+
+B. Goals
+--------
+
+1. Convenience encoding element
+
+  Create a convenience GstBin for encoding and muxing several streams,
+  hereafter called 'EncodeBin'.
+
+  This element will only contain one single property, which is a
+  profile.
+
+2. Define a encoding profile system
+
+2. Encoding profile helper library
+
+  Create a helper library to:
+  * create EncodeBin instances based on profiles, and
+  * help applications to create/load/save/browse those profiles.
+
+
+
+
+1. EncodeBin
+------------
+
+1.1 Proposed API
+----------------
+
+  EncodeBin is a GstBin subclass.
+
+  It implements the GstTagSetter interface, by which it will proxy the
+  calls to the muxer.
+
+  Only two introspectable property (i.e. usable without extra API):
+  * A GstEncodingProfile*
+  * The name of the profile to use
+
+  When a profile is selected, encodebin will:
+  * Add REQUEST sinkpads for all the GstStreamProfile
+  * Create the muxer and expose the source pad
+
+  Whenever a request pad is created, encodebin will:
+  * Create the chain of elements for that pad
+  * Ghost the sink pad
+  * Return that ghost pad
+
+  This allows reducing the code to the minimum for applications
+  wishing to encode a source for a given profile:
+
+  ...
+
+  encbin = gst_element_factory_make("encodebin, NULL);
+  g_object_set (encbin, "profile", "N900/H264 HQ", NULL);
+  gst_element_link (encbin, filesink);
+
+  ...
+
+  vsrcpad = gst_element_get_src_pad(source, "src1");
+  vsinkpad = gst_element_get_request_pad (encbin, "video_%d");
+  gst_pad_link(vsrcpad, vsinkpad);
+
+  ...
+
+
+1.2 Explanation of the Various stages in EncodeBin
+--------------------------------------------------
+
+  This describes the various stages which can happen in order to end
+  up with a multiplexed stream that can then be stored or streamed.
+
+1.2.1 Incoming streams
+
+  The streams fed to EncodeBin can be of various types:
+
+  * Video
+   * Uncompressed (but maybe subsampled)
+   * Compressed
+  * Audio
+   * Uncompressed (audio/x-raw-{int|float})
+   * Compressed
+  * Timed text
+  * Private streams
+
+
+1.2.2 Steps involved for raw video encoding
+
+(0) Incoming Stream
+
+(1) Transform raw video feed (optional)
+
+ Here we modify the various fundamental properties of a raw video
+ stream to be compatible with the intersection of:
+  * The encoder GstCaps and
+  * The specified "Stream Restriction" of the profile/target
+
+ The fundamental properties that can be modified are:
+  * width/height
+    This is done with a video scaler.
+    The DAR (Display Aspect Ratio) MUST be respected.
+    If needed, black borders can be added to comply with the target DAR.
+  * framerate
+  * format/colorspace/depth
+    All of this is done with a colorspace converter
+
+(2) Actual encoding (optional for raw streams)
+
+ An encoder (with some optional settings) is used.
+
+(3) Muxing
+
+ A muxer (with some optional settings) is used.
+
+(4) Outgoing encoded and muxed stream
+
+
+1.2.3 Steps involved for raw audio encoding
+
+ This is roughly the same as for raw video, expect for (1)
+
+(1) Transform raw audo feed (optional)
+
+ We modify the various fundamental properties of a raw audio stream to
+ be compatible with the intersection of:
+  * The encoder GstCaps and
+  * The specified "Stream Restriction" of the profile/target
+
+ The fundamental properties that can be modifier are:
+ * Number of channels
+ * Type of raw audio (integer or floating point)
+ * Depth (number of bits required to encode one sample)
+
+
+1.2.4 Steps involved for encoded audio/video streams
+
+ Steps (1) and (2) are replaced by a parser if a parser is available
+ for the given format.
+
+
+1.2.5 Steps involved for other streams
+
+ Other streams will just be forwarded as-is to the muxer, provided the
+ muxer accepts the stream type.
+
+ 
+
+
+2. Encoding Profile System
+--------------------------
+
+ This work is based on:
+ * The existing GstPreset system for elements [0]
+ * The gnome-media GConf audio profile system [1]
+ * The investigation done into device profiles by Arista and
+ Transmageddon [2 and 3]
+
+2.2 Terminology
+---------------
+
+* Encoding Target Category
+  A Target Category is a classification of devices/systems/use-cases
+  for encoding.
+
+  Such a classification is required in order for:
+  * Applications with a very-specific use-case to limit the number of
+    profiles they can offer the user. A screencasting application has
+    no use with the online services targets for example. 
+  * Offering the user some initial classification in the case of a
+    more generic encoding application (like a video editor or a
+    transcoder). 
+
+  Ex:
+   Consumer devices
+   Online service
+   Intermediate Editing Format
+   Screencast
+   Capture
+   Computer
+
+* Encoding Profile Target
+  A Profile Target describes a specific entity for which we wish to
+  encode.
+  A Profile Target must belong to at least one Target Category.
+  It will define at least one Encoding Profile.
+
+  Ex (with category):
+   Nokia N900 (Consumer device)
+   Sony PlayStation 3 (Consumer device)
+   Youtube (Online service)
+   DNxHD (Intermediate editing format)
+   HuffYUV (Screencast)
+   Theora (Computer)
+
+* Encoding Profile
+  A specific combination of muxer, encoders, presets and limitations.
+
+  Ex:
+   Nokia N900/H264 HQ
+   Ipod/High Quality
+   DVD/Pal
+   Youtube/High Quality
+   HTML5/Low Bandwith
+   DNxHD
+
+2.3 Encoding Profile
+--------------------
+
+An encoding profile requires the following information:
+
+ * Name
+   This string is not translatable and must be unique.
+   A recommendation to guarantee uniqueness of the naming could be:
+      <target>/<name>
+ * Description
+   This is a translatable string describing the profile
+ * Muxing format
+   This is a string containing the GStreamer media-type of the
+   container format.
+ * Muxing preset
+   This is an optional string describing the preset(s) to use on the
+   muxer.
+ * Multipass setting
+   This is a boolean describing whether the profile requires several
+   passes.
+ * List of Stream Profile
+
+2.3.1 Stream Profiles
+
+A Stream Profile consists of:
+
+ * Type
+   The type of stream profile (audio, video, text, private-data)
+ * Encoding Format
+   This is a string containing the GStreamer media-type of the encoding
+   format to be used. If encoding is not to be applied, the raw audio
+   media type will be used.
+ * Encoding preset
+   This is an optional string describing the preset(s) to use on the
+   encoder.
+ * Restriction
+   This is an optional GstCaps containing the restriction of the
+   stream that can be fed to the encoder.
+   This will generally containing restrictions in video
+   width/heigh/framerate or audio depth.
+ * presence
+   This is an integer specifying how many streams can be used in the
+   containing profile. 0 means that any number of streams can be
+   used.
+ * pass
+   This is an integer which is only meaningful if the multipass flag
+   has been set in the profile. If it has been set it indicates which
+   pass this Stream Profile corresponds to.
+ 
+2.4 Example profile
+-------------------
+
+The representation used here is XML only as an example. No decision is
+made as to which formatting to use for storing targets and profiles.
+
+<gst-encoding-target>
+  <name>Nokia N900</name>
+  <category>Consumer Device</category>
+  <profiles>
+    <profile>Nokia N900/H264 HQ</profile>
+    <profile>Nokia N900/MP3</profile>
+    <profile>Nokia N900/AAC</profile>
+  </profiles>
+</gst-encoding-target>
+
+<gst-encoding-profile>
+  <name>Nokia N900/H264 HQ</name>
+  <description>
+    High Quality H264/AAC for the Nokia N900
+  </description>
+  <format>video/quicktime,variant=iso</format>
+  <streams>
+    <stream-profile>
+      <type>audio</type>
+      <format>audio/mpeg,mpegversion=4</format>
+      <preset>Quality High/Main</preset>
+      <restriction>audio/x-raw-int,channels=[1,2]</restriction>
+      <presence>1</presence>
+    </stream-profile>
+    <stream-profile>
+      <type>video</type>
+      <format>video/x-h264</format>
+      <preset>Profile Baseline/Quality High</preset>
+      <restriction>
+        video/x-raw-yuv,width=[16, 800],\
+	height=[16, 480],framerate=[1/1, 30000/1001]
+      </restriction>
+      <presence>1</presence>
+    </stream-profile>
+  </streams>
+  
+</gst-encoding-profile>
+
+2.5 API
+-------
+  A proposed C API is contained in the gstprofile.h file in this directory.
+
+
+2.6 Modifications required in the existing GstPreset system
+-----------------------------------------------------------
+
+2.6.1. Temporary preset.
+
+  Currently a preset needs to be saved on disk in order to be
+  used.
+
+  This makes it impossible to have temporary presets (that exist only
+  during the lifetime of a process), which might be required in the
+  new proposed profile system
+
+2.6.2 Categorisation of presets.
+
+  Currently presets are just aliases of a group of property/value
+  without any meanings or explanation as to how they exclude each
+  other.
+
+  Take for example the H264 encoder. It can have presets for:
+  * passes (1,2 or 3 passes)
+  * profiles (Baseline, Main, ...)
+  * quality (Low, medium, High)
+
+  In order to programmatically know which presets exclude each other,
+  we here propose the categorisation of these presets.
+
+  This can be done in one of two ways
+  1. in the name (by making the name be [<category>:]<name>)
+    This would give for example: "Quality:High", "Profile:Baseline"
+  2. by adding a new _meta key
+    This would give for example: _meta/category:quality
+
+2.6.3 Aggregation of presets.
+
+  There can be more than one choice of presets to be done for an
+  element (quality, profile, pass).
+
+  This means that one can not currently describe the full
+  configuration of an element with a single string but with many.
+
+  The proposal here is to extend the GstPreset API to be able to set
+  all presets using one string and a well-known separator ('/').
+
+  This change only requires changes in the core preset handling code.
+
+  This would allow doing the following:
+  gst_preset_load_preset (h264enc,
+                          "pass:1/profile:baseline/quality:high");
+
+2.7 Points to be determined
+---------------------------
+
+  This document hasn't determined yet how to solve the following
+  problems:
+
+2.7.1 Storage of profiles
+
+  One proposal for storage would be to use a system wide directory
+  (like $prefix/share/gstreamer-0.10/profiles) and store XML files for
+  every individual profiles.
+
+  Users could then add their own profiles in ~/.gstreamer-0.10/profiles
+
+  This poses some limitations as to what to do if some applications
+  want to have some profiles limited to their own usage.
+
+
+3. Helper library for profiles
+------------------------------
+
+ These helper methods could also be added to existing libraries (like
+ GstPreset, GstPbUtils, ..).
+
+ The various API proposed are in the accompanying gstprofile.h file.
+
+3.1 Getting user-readable names for formats
+
+ This is already provided by GstPbUtils.
+
+3.2 Hierarchy of profiles
+
+ The goal is for applications to be able to present to the user a list
+ of combo-boxes for choosing their output profile:
+
+ [      Category      ]       # optional, depends on the application
+ [    Device/Site/..  ]       # optional, depends on the application
+ [      Profile       ]
+
+ Convenience methods are offered to easily get lists of categories,
+ devices, and profiles.
+
+3.3 Creating Profiles
+
+ The goal is for applications to be able to easily create profiles.
+
+ The applications needs to be able to have a fast/efficient way to:
+ * select a container format and see all compatible streams he can use
+ with it.
+ * select a codec format and see which container formats he can use
+ with it.
+
+ The remaining parts concern the restrictions to encoder
+ input.
+
+3.4 Ensuring availability of plugins for Profiles
+
+ When an application wishes to use a Profile, it should be able to
+ query whether it has all the needed plugins to use it.
+
+ This part will use GstPbUtils to query, and if needed install the
+ missing plugins through the installed distribution plugin installer.
+
+
+I. Use-cases researched
+-----------------------
+
+ This is a list of various use-cases where encoding/muxing is being
+ used.
+
+* Transcoding
+
+  The goal is to convert with as minimal loss of quality any input
+  file for a target use.
+  A specific variant of this is transmuxing (see below).
+
+  Example applications: Arista, Transmageddon
+
+* Rendering timelines
+
+  The incoming streams are a collection of various segments that need
+  to be rendered.
+  Those segments can vary in nature (i.e. the video width/height can
+  change).
+  This requires the use of identiy with the single-segment property
+  activated to transform the incoming collection of segments to a
+  single continuous segment.
+
+  Example applications: PiTiVi, Jokosher
+
+* Encoding of live sources
+
+  The major risk to take into account is the encoder not encoding the
+  incoming stream fast enough. This is outside of the scope of
+  encodebin, and should be solved by using queues between the sources
+  and encodebin, as well as implementing QoS in encoders and sources
+  (the encoders emitting QoS events, and the upstream elements
+  adapting themselves accordingly).
+
+  Example applications: camerabin, cheese
+
+* Screencasting applications
+
+  This is similar to encoding of live sources.
+  The difference being that due to the nature of the source (size and
+  amount/frequency of updates) one might want to do the encoding in
+  two parts:
+  * The actual live capture is encoded with a 'almost-lossless' codec
+  (such as huffyuv)
+  * Once the capture is done, the file created in the first step is
+  then rendered to the desired target format.
+
+  Fixing sources to only emit region-updates and having encoders
+  capable of encoding those streams would fix the need for the first
+  step but is outside of the scope of encodebin.
+
+  Example applications: Istanbul, gnome-shell, recordmydesktop
+
+* Live transcoding
+
+  This is the case of an incoming live stream which will be
+  broadcasted/transmitted live.
+  One issue to take into account is to reduce the encoding latency to
+  a minimum. This should mostly be done by picking low-latency
+  encoders.
+
+  Example applications: Rygel, Coherence
+
+* Transmuxing
+
+  Given a certain file, the aim is to remux the contents WITHOUT
+  decoding into either a different container format or the same
+  container format.
+  Remuxing into the same container format is useful when the file was
+  not created properly (for example, the index is missing).
+  Whenever available, parsers should be applied on the encoded streams
+  to validate and/or fix the streams before muxing them.
+
+  Metadata from the original file must be kept in the newly created
+  file.
+
+  Example applications: Arista, Transmaggedon
+
+* Loss-less cutting
+
+  Given a certain file, the aim is to extract a certain part of the
+  file without going through the process of decoding and re-encoding
+  that file.
+  This is similar to the transmuxing use-case.
+
+  Example applications: PiTiVi, Transmageddon, Arista, ...
+
+* Multi-pass encoding
+
+  Some encoders allow doing a multi-pass encoding.
+  The initial pass(es) are only used to collect encoding estimates and
+  are not actually muxed and outputted.
+  The final pass uses previously collected information, and the output
+  is then muxed and outputted.
+
+* Archiving and intermediary format
+
+  The requirement is to have lossless
+
+* CD ripping
+
+  Example applications: Sound-juicer
+
+* DVD ripping
+
+  Example application: Thoggen
+
+
+
+* Research links
+
+  Some of these are still active documents, some other not
+
+[0] GstPreset API documentation
+    http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html
+
+[1] gnome-media GConf profiles
+    http://www.gnome.org/~bmsmith/gconf-docs/C/gnome-media.html
+
+[2] Research on a Device Profile API
+    http://gstreamer.freedesktop.org/wiki/DeviceProfile
+
+[3] Research on defining presets usage
+    http://gstreamer.freedesktop.org/wiki/PresetDesign
+
diff --git a/docs/design/design-orc-integration.txt b/docs/design/design-orc-integration.txt
new file mode 100644
index 0000000..d5d146c
--- /dev/null
+++ b/docs/design/design-orc-integration.txt
@@ -0,0 +1,204 @@
+
+Orc Integration
+===============
+
+Sections
+--------
+
+ - About Orc
+ - Fast memcpy()
+ - Normal Usage
+ - Build Process
+ - Testing
+ - Orc Limitations
+
+
+About Orc
+---------
+
+Orc code can be in one of two forms: in .orc files that is converted
+by orcc to C code that calls liborc functions, or C code that calls
+liborc to create complex operations at runtime.  The former is mostly
+for functions with predetermined functionality.  The latter is for
+functionality that is determined at runtime, where writing .orc
+functions for all combinations would be prohibitive.  Orc also has
+a fast memcpy and memset which are useful independently.
+
+
+Fast memcpy()
+-------------
+
+*** This part is not integrated yet. ***
+
+Orc has built-in functions orc_memcpy() and orc_memset() that work
+like memcpy() and memset().  These are meant for large copies only.
+A reasonable cutoff for using orc_memcpy() instead of memcpy() is
+if the number of bytes is generally greater than 100.  DO NOT use
+orc_memcpy() if the typical is size is less than 20 bytes, especially
+if the size is known at compile time, as these cases are inlined by
+the compiler.
+
+(Example: sys/ximage/ximagesink.c)
+
+Add $(ORC_CFLAGS) to libgstximagesink_la_CFLAGS and $(ORC_LIBS) to
+libgstximagesink_la_LIBADD.  Then, in the source file, add:
+
+  #ifdef HAVE_ORC
+  #include <orc/orc.h>
+  #else
+  #define orc_memcpy(a,b,c) memcpy(a,b,c)
+  #endif
+
+Then switch relevant uses of memcpy() to orc_memcpy().
+
+The above example works whether or not Orc is enabled at compile
+time.
+
+
+Normal Usage
+------------
+
+The following lines are added near the top of Makefile.am for plugins
+that use Orc code in .orc files (this is for the volume plugin):
+
+  ORC_BASE=volume
+  include $(top_srcdir)/common/orc.mk
+
+Also add the generated source file to the plugin build:
+
+  nodist_libgstvolume_la_SOURCES = $(ORC_SOURCES)
+
+And of course, add $(ORC_CFLAGS) to libgstvolume_la_CFLAGS, and
+$(ORC_LIBS) to libgstvolume_la_LIBADD.
+
+The value assigned to ORC_BASE does not need to be related to
+the name of the plugin.
+
+
+Advanced Usage
+--------------
+
+The Holy Grail of Orc usage is to programmatically generate Orc code
+at runtime, have liborc compile it into binary code at runtime, and
+then execute this code.  Currently, the best example of this is in
+Schroedinger.  An example of how this would be used is audioconvert:
+given an input format, channel position manipulation, dithering and
+quantizing configuration, and output format, a Orc code generator
+would create an OrcProgram, add the appropriate instructions to do
+each step based on the configuration, and then compile the program.
+Sucessfully compiling the program would return a function pointer
+that can be called to perform the operation.
+
+This sort of advanced usage requires structural changes to current
+plugins (e.g., audioconvert) and will probably be developed
+incrementally.  Moreover, if such code is intended to be used without
+Orc as strict build/runtime requirement, two codepaths would need to
+be developed and tested.  For this reason, until GStreamer requires
+Orc, I think it's a good idea to restrict such advanced usage to the
+cog plugin in -bad, which requires Orc.
+
+
+Build Process
+-------------
+
+The goal of the build process is to make Orc non-essential for most
+developers and users.  This is not to say you shouldn't have Orc
+installed -- without it, you will get slow backup C code, just that
+people compiling GStreamer are not forced to switch from Liboil to
+Orc immediately.
+
+With Orc installed, the build process will use the Orc Compiler (orcc)
+to convert each .orc file into a temporary C source (tmp-orc.c) and a
+temporary header file (${name}orc.h if constructed from ${base}.orc).
+The C source file is compiled and linked to the plugin, and the header
+file is included by other source files in the plugin.
+
+If 'make orc-update' is run in the source directory, the files
+tmp-orc.c and ${base}orc.h are copied to ${base}orc-dist.c and
+${base}orc-dist.h respectively.  The -dist.[ch] files are automatically
+disted via orc.mk.  The -dist.[ch] files should be checked in to
+git whenever the .orc source is changed and checked in.  Example
+workflow:
+
+  edit .orc file
+  ... make, test, etc.
+  make orc-update
+  git add volume.orc volumeorc-dist.c volumeorc-dist.h
+  git commit
+
+At 'make dist' time, all of the .orc files are compiled, and then
+copied to their -dist.[ch] counterparts, and then the -dist.[ch]
+files are added to the dist directory.
+
+Without Orc installed (or --disable-orc given to configure), the
+-dist.[ch] files are copied to tmp-orc.c and ${name}orc.h.  When
+compiled Orc disabled, DISABLE_ORC is defined in config.h, and
+the C backup code is compiled.  This backup code is pure C, and
+does not include orc headers or require linking against liborc.
+
+The common/orc.mk build method is limited by the inflexibility of
+automake.  The file tmp-orc.c must be a fixed filename, using ORC_NAME
+to generate the filename does not work because it conflicts with
+automake's dependency generation.  Building multiple .orc files
+is not possible due to this restriction.
+
+
+Testing
+-------
+
+If you create another .orc file, please add it to
+tests/orc/Makefile.am.  This causes automatic test code to be
+generated and run during 'make check'.  Each function in the .orc
+file is tested by comparing the results of executing the run-time
+compiled code and the C backup function.
+
+
+Orc Limitations
+---------------
+
+audioconvert
+
+  Orc doesn't have a mechanism for generating random numbers, which
+  prevents its use as-is for dithering.  One way around this is to
+  generate suitable dithering values in one pass, then use those
+  values in a second Orc-based pass.
+
+  Orc doesn't handle 64-bit float, for no good reason.
+
+  Irrespective of Orc handling 64-bit float, it would be useful to
+  have a direct 32-bit float to 16-bit integer conversion.
+
+  audioconvert is a good candidate for programmatically generated
+  Orc code.
+
+  audioconvert enumerates functions in terms of big-endian vs.
+  little-endian.  Orc's functions are "native" and "swapped".
+  Programmatically generating code removes the need to worry about
+  this.
+
+  Orc doesn't handle 24-bit samples.  Fixing this is not a priority
+  (for ds).
+
+videoscale
+
+  Orc doesn't handle horizontal resampling yet.  The plan is to add
+  special sampling opcodes, for nearest, bilinear, and cubic
+  interpolation.
+
+videotestsrc
+
+  Lots of code in videotestsrc needs to be rewritten to be SIMD
+  (and Orc) friendly, e.g., stuff that uses oil_splat_u8().
+
+  A fast low-quality random number generator in Orc would be useful
+  here.
+
+volume
+  
+  Many of the comments on audioconvert apply here as well.
+
+  There are a bunch of FIXMEs in here that are due to misapplied
+  patches.
+
+
+
diff --git a/docs/design/draft-keyframe-force.txt b/docs/design/draft-keyframe-force.txt
new file mode 100644
index 0000000..8dd0f01
--- /dev/null
+++ b/docs/design/draft-keyframe-force.txt
@@ -0,0 +1,91 @@
+Forcing keyframes
+-----------------
+
+Consider the following use case:
+
+  We have a pipeline that performs video and audio capture from a live source,
+  compresses and muxes the streams and writes the resulting data into a file.
+
+  Inside the uncompressed video data we have a specific pattern inserted at
+  specific moments that should trigger a switch to a new file, meaning, we close
+  the existing file we are writing to and start writing to a new file.
+
+  We want the new file to start with a keyframe so that one can start decoding
+  the file immediatly.
+
+Components:
+
+  1) We need an element that is able to detect the pattern in the video stream.
+
+  2) We need to inform the video encoder that it should start encoding a keyframe
+     starting from exactly the frame with the pattern.
+
+  3) We need to inform the demuxer that it should flush out any pending data and
+     start creating the start of a new file with the keyframe as a first video
+     frame.
+
+  4) We need to inform the sink element that it should start writing to the next
+     file. This requires application interaction to instruct the sink of the new
+     filename. The application should also be free to ignore the boundary and
+     continue to write to the existing file. The application will typically use
+     an event pad probe to detect the custom event.
+
+Implementation:
+
+ The implementation would consist of generating a GST_EVENT_CUSTOM_DOWNSTREAM
+ event that marks the keyframe boundary. This event is inserted into the
+ pipeline by the application upon a certain trigger. In the above use case this
+ trigger would be given by the element that detects the pattern, in the form of
+ an element message.
+ 
+ The custom event would travel further downstream to instruct encoder, muxer and
+ sink about the possible switch.
+
+ The information passed in the event consists of:
+
+  name:  GstForceKeyUnit
+	 (G_TYPE_UINT64)"timestamp"    : the timestamp of the buffer that
+	                                 triggered the event.
+	 (G_TYPE_UINT64)"stream-time"  : the stream position that triggered the
+	                                 event.
+	 (G_TYPE_UINT64)"running-time" : the running time of the stream when the 
+	                                 event was triggered.
+	 (G_TYPE_BOOLEAN)"all-headers" : Send all headers, including those in
+                                         the caps or those sent at the start of
+                                         the stream.
+
+	 ....                          : optional other data fields.
+
+  Note that this event is purely informational, no element is required to
+  perform an action but it should forward the event downstream, just like any
+  other event it does not handle.
+
+  Elements understanding the event should behave as follows:
+
+  1) The video encoder receives the event before the next frame. Upon reception
+     of the event it schedules to encode the next frame as a keyframe. 
+     Before pushing out the encoded keyframe it must push the GstForceKeyUnit
+     event downstream.
+
+  2) The muxer receives the GstForceKeyUnit event and flushes out its current state,
+     preparing to produce data that can be used as a keyunit. Before pushing out
+     the new data it pushes the GstForceKeyUnit event downstream.
+
+  3) The application receives the GstForceKeyUnit on a sink padprobe of the sink
+     and reconfigures the sink to make it perform new actions after receiving
+     the next buffer. 
+
+
+Upstream
+--------
+
+When using RTP packets can get lost or receivers can be added at any time,
+they may request a new key frame.
+
+An downstream element sends an upstream "GstForceKeyUnit" event up the
+pipeline.
+
+When an element produces some kind of key unit in output, but has
+no such concept in its input (like an encoder that takes raw frames),
+it consumes the event (doesn't pass it upstream), and instead sends
+a downstream GstForceKeyUnit event and a new keyframe.
diff --git a/docs/design/draft-va.txt b/docs/design/draft-va.txt
new file mode 100644
index 0000000..a63a643
--- /dev/null
+++ b/docs/design/draft-va.txt
@@ -0,0 +1,111 @@
+Video Acceleration
+------------------
+
+Status:
+
+  DRAFT.
+  
+Purpose:
+
+  Provide an standarized generic way to introduce Video Acceleration APIs in
+  already available elements instead of duplicating those into specialized ones.
+  
+  Provide a mechanism for a light GstBuffer subclassing in order to be able
+  exchange VA related context and surfaces between elements.
+  
+  Provide some basic primitives to be used in the elements keeping
+  the implementation of those in the backends of the helper library.
+  
+  The motivation of this proposal is: 
+    - to avoid multiple duplicty of code
+    - to avoid the use of GstBuffer subclassing and be more close to GstBuffer2
+    - to avoid the overhead that's introduced with subclassing/GType checks 
+    - to permit multiple elements interact having a common standard
+
+Proposal:
+
+   video/x-raw-va
+   
+   Light subclassing embeding an structure in the data field of a standard
+   GstBuffer.
+   
+   struct {
+     context;
+     surface;
+     flags;
+     subpicture, x, y, w, h;
+     parent *
+     ...
+   } VASurface 
+        
+   GstVA helper library
+   --------------------
+   
+   Common API that it's implemented by a backend for each VA API. 
+   
+   +-------+      +---------------+
+   |       |----> | VDPAU backend |
+   | GstVA |      +---------------+
+   |       |      +---------------+
+   |       |----> | VAAPI backend |
+   +-------+      +---------------+
+   
+   gst_va_init () : Iterate in the backends and try to initialize those, stops
+   when a backend is able to be created.
+   
+   bool gst_va_available() : permit to query if there's VA available in runtime.
+   
+   GstBuffer * gst_va_buffer_new (vacontext, vasurface, vaflags, parent*, 
+     free_func*):
+   Create a new GstBuffer with the proper light subclass and store on it
+   the provided context, surface, flags...
+   - parent* and free_func* to implement a mechanism to return surfaces in 
+     the pool driven by parent.
+   
+   gst_va_buffer_get_context (GstBuffer *)
+   gst_va_buffer_get_surface (GstBuffer *)
+   gst_va_buffer_get_flags (GstBuffer *)
+   ....
+   Some public/private? accessors to be able recover fields from a VA GstBuffer
+   internal structure.
+   
+   Primitives:
+   
+   gst_va_render_display (GstBuffer * va, display, x, y, w, h, ...)
+   Put a surface in the screen at the specified position.
+
+   gst_va_render_pixmap (GstBuffer * va, pixmap *, w, h, ...)
+   Put a surface in a pixmap, to be used paired with GLX_texture_from_pixmap to
+   upload into a OpenGL texture.
+   
+   gst_va_render_memory (GstBuffer * va, planes *, strides *, w, h, ...) 
+   To pull back into main memory a VA surface.
+   
+   gst_va_buffer_associate_subpicture (GstBuffer * va, GstBuffer * subpicture,
+      x, y, w, h,...)
+   Take a reference of subpicture and keep it in va internal structure.
+  
+Use cases:
+
+   Instead of create a new specialized element for each API just change
+   a generic element once.
+   
+   To add support for a new API just have to create a new backend.
+
+   xvimagesink
+   -----------
+      
+   - In _setcaps negotiate accept VA kind of stream when gst_va_init and
+     gst_va_available tell us that we have hardware capable of it.
+   
+   - In _render when the buffers have the VA flag render display it with
+     gst_va_render_display()
+     
+   videomixer, dvdspu, textoverlay, ...
+   ------------------------------------
+
+   - In _setcaps negotiate accept VA kind of stream when gst_va_init and
+     gst_va_available tell us that we have hardware capable of it.
+   
+   - Use gst_va_buffer_associate_subpicture () where necessary.
+   
diff --git a/docs/design/part-playbin2.txt b/docs/design/part-playbin2.txt
new file mode 100644
index 0000000..195d048
--- /dev/null
+++ b/docs/design/part-playbin2.txt
@@ -0,0 +1,69 @@
+playbin2
+--------
+
+The purpose of this element is to decode and render the media contained in a
+given generic uri. The element extends GstPipeline and is typically used in
+playback situations.
+
+Required features:
+
+ - accept and play any valid uri. This includes
+   - rendering video/audio
+   - overlaying subtitles on the video
+ - optionally read external subtitle files
+ - allow for hardware (non raw) sinks
+ - selection of audio/video/subtitle streams based on language.
+ - perform network buffering/incremental download
+ - gapless playback
+ - support for visualisations with configurable sizes
+ - ability to reject files that are too big, or of a format that would require
+   too much CPU/memory usage.
+ - be very efficient with adding elements such as converters to reduce the
+   amount of negotiation that has to happen.
+ - handle chained oggs. This includes having support for dynamic pad add and
+   remove from a demuxer.
+
+Components
+----------
+
+* decodebin2
+
+ - performs the autoplugging of demuxers/decoders
+ - emits signals when for steering the autoplugging
+   - to decide if a non-raw media format is acceptable as output
+   - to sort the possible decoders for a non-raw format
+ - see also decodebin2 design doc
+
+* uridecodebin
+
+ - combination of a source to handle the given uri, an optional queueing element
+   and one or more decodebin2 elements to decode the non-raw streams.
+
+* playsink
+
+ - handles display of audio/video/text.
+ - has request audio/video/text input pad. There is only one sinkpad per type.
+   The requested pads define the configuration of the internal pipeline. 
+ - allows for setting audio/video sinks or does automatic sink selection.
+ - allows for configuration of visualisation element.
+ - allows for enable/disable of visualisation, audio and video.
+
+* playbin2
+
+ - combination of one or more uridecodebin elements to read the uri and subtitle
+   uri.
+ - support for queuing new media to support gapless playback.
+ - handles stream selection.
+ - uses playsink to display.
+ - selection of sinks and configuration of uridecodebin with raw output formats.
+
+
+Gapless playback
+----------------
+
+playbin2 has an "about-to-finish" signal. The application should configure a new
+uri (and optional suburi) in the callback. When the current media finishes, this
+new media will be played next.
+
+
+    
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
new file mode 100644
index 0000000..83e8039
--- /dev/null
+++ b/docs/libs/Makefile.am
@@ -0,0 +1,79 @@
+## Process this file with automake to produce Makefile.in
+
+# FIXME: fix the docs then remove this variable
+DOCS_ARE_INCOMPLETE_PLEASE_FIXME=yespleasedo
+
+# The name of the module, e.g. 'glib'.
+#DOC_MODULE=gst-plugins-libs-@GST_MAJORMINOR@
+DOC_MODULE=gst-plugins-base-libs
+
+# for upload-doc.mak
+DOC=gst-plugins-base-libs
+FORMATS=html
+html: html-build.stamp
+include $(top_srcdir)/common/upload-doc.mak
+
+# The top-level SGML file. Change it if you want.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code.
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR=$(top_srcdir)/gst-libs/gst
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS=--deprecated-guards="GST_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS=--sgml-mode  --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS=--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(GST_PREFIX)/share/gtk-doc/html
+
+# Used for dependencies.
+HFILE_GLOB=$(top_srcdir)/gst-libs/gst/*/*.h
+CFILE_GLOB=$(top_srcdir)/gst-libs/gst/*/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = pbutils-private.h gsttageditingprivate.h id3v2.h \
+	kiss_fft_f32.h kiss_fft_f64.h kiss_fftr_f32.h kiss_fftr_f64.h \
+	kiss_fftr_s16.h kiss_fftr_s32.h kiss_fft_s16.h kiss_fft_s32.h \
+	_kiss_fft_guts_f32.h _kiss_fft_guts_f64.h _kiss_fft_guts_s16.h \
+	_kiss_fft_guts_s16.h _kiss_fft_guts_s32.h _kiss_fft_guts_s32.h \
+	interfaces-marshal.h pbutils-marshal.h
+
+
+# Images to copy into HTML directory.
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files = compiling.sgml
+
+# Other files to distribute.
+extra_files =
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
+# contains GtkObjects/GObjects and you want to document signals and properties.
+GTKDOC_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) -DGST_USE_UNSTABLE_API
+GTKDOC_LIBS = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/sdp/libgstsdp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+  $(GST_BASE_LIBS)
+
+GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
+GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
+
+# If you need to override some of the declarations, place them in this file
+DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+
+include $(top_srcdir)/common/gtk-doc.mak
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
new file mode 100644
index 0000000..e9bc35f
--- /dev/null
+++ b/docs/libs/Makefile.in
@@ -0,0 +1,931 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# this snippet is to be included by both our docbook manuals
+# and gtk-doc API references
+
+# it adds an upload target to each of these dir's Makefiles
+
+# each Makefile.am should define the following variables:
+# - DOC: the base name of the documentation
+#        (faq, manual, pwg, gstreamer, gstreamer-libs)
+# - FORMATS: the formats in which DOC is output
+#            (html ps pdf)
+
+# if you want to use it, make sure your $HOME/.ssh/config file contains the
+# correct User entry for the Host entry for the DOC_SERVER
+
+###########################################################################
+# Everything below here is generic and you shouldn't need to change it.
+###########################################################################
+# thomas: except of course that we did
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gtk-doc.mak \
+	$(top_srcdir)/common/upload-doc.mak
+subdir = docs/libs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# FIXME: fix the docs then remove this variable
+DOCS_ARE_INCOMPLETE_PLEASE_FIXME = yespleasedo
+
+# The name of the module, e.g. 'glib'.
+#DOC_MODULE=gst-plugins-libs-@GST_MAJORMINOR@
+DOC_MODULE = gst-plugins-base-libs
+
+# for upload-doc.mak
+DOC = gst-plugins-base-libs
+FORMATS = html
+
+# these variables define the location of the online docs
+DOC_SERVER = gstreamer.freedesktop.org
+DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc
+DOC_URL = $(DOC_SERVER):$(DOC_BASE)
+
+# The top-level SGML file. Change it if you want.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code.
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR = $(top_srcdir)/gst-libs/gst
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS = --deprecated-guards="GST_DISABLE_DEPRECATED"
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS = --sgml-mode  --output-format=xml
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS = --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(GST_PREFIX)/share/gtk-doc/html
+
+
+# Used for dependencies.
+HFILE_GLOB = $(top_srcdir)/gst-libs/gst/*/*.h
+CFILE_GLOB = $(top_srcdir)/gst-libs/gst/*/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = pbutils-private.h gsttageditingprivate.h id3v2.h \
+	kiss_fft_f32.h kiss_fft_f64.h kiss_fftr_f32.h kiss_fftr_f64.h \
+	kiss_fftr_s16.h kiss_fftr_s32.h kiss_fft_s16.h kiss_fft_s32.h \
+	_kiss_fft_guts_f32.h _kiss_fft_guts_f64.h _kiss_fft_guts_s16.h \
+	_kiss_fft_guts_s16.h _kiss_fft_guts_s32.h _kiss_fft_guts_s32.h \
+	interfaces-marshal.h pbutils-marshal.h
+
+
+# Images to copy into HTML directory.
+HTML_IMAGES = 
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files = compiling.sgml
+
+# Other files to distribute.
+extra_files = 
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
+# contains GtkObjects/GObjects and you want to document signals and properties.
+GTKDOC_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) -DGST_USE_UNSTABLE_API
+GTKDOC_LIBS = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/sdp/libgstsdp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+  $(GST_BASE_LIBS)
+
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC)
+
+# If you need to override some of the declarations, place them in this file
+DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+
+# thomas: copied from glib-2
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+# thomas: make docs parallel installable
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@
+EXTRA_DIST = \
+	$(content_files)		\
+	$(extra_files)			\
+	$(HTML_IMAGES)			\
+	$(DOC_MAIN_SGML_FILE)		\
+	$(DOC_MODULE).types		\
+	$(DOC_OVERRIDES)		\
+	$(DOC_MODULE)-sections.txt
+
+DOC_STAMPS = \
+	setup-build.stamp		\
+	scan-build.stamp		\
+	sgml-build.stamp		\
+	html-build.stamp		\
+	sgml.stamp		\
+	html.stamp
+
+SCANOBJ_FILES = \
+	$(DOC_MODULE).args		\
+	$(DOC_MODULE).hierarchy		\
+	$(DOC_MODULE).interfaces		\
+	$(DOC_MODULE).prerequisites	\
+	$(DOC_MODULE).signals		\
+	.libs/$(DOC_MODULE)-scan.o
+
+REPORT_FILES = \
+	$(DOC_MODULE)-undocumented.txt \
+	$(DOC_MODULE)-undeclared.txt \
+	$(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) doc-registry.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu docs/libs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local dist-hook distclean \
+	distclean-generic distclean-libtool distclean-local distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-data-local install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-local mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-local
+
+html: html-build.stamp
+
+upload: $(FORMATS)
+	@if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Preparing docs for upload (rebasing cross-references) ..." ; \
+	  if test x$(builddir) != x$(srcdir); then \
+	    echo "make upload can only be used if srcdir == builddir"; \
+	    exit 1; \
+	  fi; \
+	  # gtkdoc-rebase sometimes gets confused, so reset everything to \
+	  # local links before rebasing to online links                   \
+	  gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \
+	  rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \
+	  echo "$$rebase" | grep -e "On-*line"; \
+	  for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \
+	    if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \
+	      echo "===============================================================================" ; \
+	      echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \
+	      echo " broken, so not uploading. Make sure the library's gtk-doc documentation is    " ; \
+	      echo " installed somewhere in /usr/share/gtk-doc.                                    " ; \
+	      echo "===============================================================================" ; \
+	      exit 1; \
+	    fi; \
+	  done; \
+	  export SRC="$$SRC html"; \
+	fi; \
+	if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
+	if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
+	\
+	# upload releases to both 0.10.X/ and head/ subdirectories \
+	if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
+	  export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
+	  echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	  rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	fi; \
+	\
+	export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
+	echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	\
+	if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \
+	  gtkdoc-rebase --html-dir=$(builddir)/html ; \
+	fi; \
+	echo Done
+
+@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+
+#### setup ####
+
+@ENABLE_GTK_DOC_TRUE@setup-build.stamp: $(content_files)
+@ENABLE_GTK_DOC_TRUE@	-@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+@ENABLE_GTK_DOC_TRUE@	    echo '  DOC   Preparing build'; \
+@ENABLE_GTK_DOC_TRUE@	    files=`echo $(DOC_MAIN_SGML_FILE) $(DOC_OVERRIDES) $(DOC_MODULE)-sections.txt $(DOC_MODULE).types $(content_files)`; \
+@ENABLE_GTK_DOC_TRUE@	    if test "x$$files" != "x" ; then \
+@ENABLE_GTK_DOC_TRUE@	        for file in $$files ; do \
+@ENABLE_GTK_DOC_TRUE@	            test -f $(abs_srcdir)/$$file && \
+@ENABLE_GTK_DOC_TRUE@	                cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+@ENABLE_GTK_DOC_TRUE@	        done; \
+@ENABLE_GTK_DOC_TRUE@	    fi; \
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_TRUE@	@touch setup-build.stamp
+
+#### scan ####
+
+# in the case of non-srcdir builds, the built gst directory gets added
+# to gtk-doc scanning; but only then, to avoid duplicates
+@ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Scanning header files'
+@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
+@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
+@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+@ENABLE_GTK_DOC_TRUE@	done ;							        \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-scan							\
+@ENABLE_GTK_DOC_TRUE@		$(SCAN_OPTIONS) $(EXTRA_HFILES)				\
+@ENABLE_GTK_DOC_TRUE@		--module=$(DOC_MODULE)					\
+@ENABLE_GTK_DOC_TRUE@		$${_source_dir}         				\
+@ENABLE_GTK_DOC_TRUE@		--ignore-headers="$(IGNORE_HFILES)"
+@ENABLE_GTK_DOC_TRUE@	@if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then	\
+@ENABLE_GTK_DOC_TRUE@	    echo "  DOC   Introspecting gobjects"; \
+@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_SYSTEM_PATH=`cd $(top_builddir) && pwd`		\
+@ENABLE_GTK_DOC_TRUE@	    GST_PLUGIN_PATH=						\
+@ENABLE_GTK_DOC_TRUE@	    GST_REGISTRY=doc-registry.xml				\
+@ENABLE_GTK_DOC_TRUE@	    $(GTKDOC_EXTRA_ENVIRONMENT)					\
+@ENABLE_GTK_DOC_TRUE@	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+@ENABLE_GTK_DOC_TRUE@	    CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)"				\
+@ENABLE_GTK_DOC_TRUE@	    LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
+@ENABLE_GTK_DOC_TRUE@	    gtkdoc-scangobj --type-init-func="gst_init(NULL,NULL)"	\
+@ENABLE_GTK_DOC_TRUE@	        --module=$(DOC_MODULE) ;				\
+@ENABLE_GTK_DOC_TRUE@	else								\
+@ENABLE_GTK_DOC_TRUE@	    for i in $(SCANOBJ_FILES) ; do				\
+@ENABLE_GTK_DOC_TRUE@	       test -f $$i || touch $$i ;				\
+@ENABLE_GTK_DOC_TRUE@	    done							\
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_TRUE@	@touch scan-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@true
+
+#### xml ####
+
+@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(expand_content_files)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
+@ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@true
+
+#### html ####
+
+@ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building HTML'
+@ENABLE_GTK_DOC_TRUE@	@rm -rf html
+@ENABLE_GTK_DOC_TRUE@	@mkdir html
+@ENABLE_GTK_DOC_TRUE@	@cp -pr xml html
+@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities ./
+@ENABLE_GTK_DOC_TRUE@	@mkhtml_options=""; \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+@ENABLE_GTK_DOC_TRUE@	if test "$(?)" = "0"; then \
+@ENABLE_GTK_DOC_TRUE@	  if test "x$(V)" = "x1"; then \
+@ENABLE_GTK_DOC_TRUE@	    mkhtml_options="$$mkhtml_options --verbose"; \
+@ENABLE_GTK_DOC_TRUE@	  fi; \
+@ENABLE_GTK_DOC_TRUE@	fi; \
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+@ENABLE_GTK_DOC_TRUE@	if test "$(?)" = "0"; then \
+@ENABLE_GTK_DOC_TRUE@	  mkhtml_options=--path="$(abs_srcdir)"; \
+@ENABLE_GTK_DOC_TRUE@	fi; \
+@ENABLE_GTK_DOC_TRUE@	cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+@ENABLE_GTK_DOC_TRUE@	@mv html/index.sgml html/index.sgml.bak
+@ENABLE_GTK_DOC_TRUE@	@$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml
+@ENABLE_GTK_DOC_TRUE@	@rm -f html/index.sgml.bak
+@ENABLE_GTK_DOC_TRUE@	@rm -rf html/xml
+@ENABLE_GTK_DOC_TRUE@	@rm -f version.entities
+@ENABLE_GTK_DOC_TRUE@	@test "x$(HTML_IMAGES)" = "x" ||  ( cd $(srcdir) && cp $(HTML_IMAGES) $(abs_builddir)/html )
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Fixing cross-references'
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@touch html-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@clean-local-gtkdoc:
+@ENABLE_GTK_DOC_TRUE@	@rm -rf xml tmpl html
+# clean files copied for nonsrcdir templates build
+@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then \
+@ENABLE_GTK_DOC_TRUE@	        rm -rf $(DOC_MODULE).types; \
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_FALSE@all-local:
+@ENABLE_GTK_DOC_FALSE@clean-local-gtkdoc:
+
+clean-local: clean-local-gtkdoc
+	@rm -f *~ *.bak
+	@rm -rf .libs
+
+distclean-local:
+	@rm -f $(REPORT_FILES) \
+	        $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	@rm -rf tmpl/*.sgml.bak
+	@rm -f $(DOC_MODULE).hierarchy
+	@rm -f *.stamp || true
+	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+	    rm -f $(DOC_MAIN_SGML_FILE) ; \
+	    rm -f $(DOC_OVERRIDES) ; \
+	    rm -f $(DOC_MODULE).types ; \
+	    rm -f $(DOC_MODULE).interfaces ; \
+	    rm -f $(DOC_MODULE).prerequisites ; \
+	    rm -f $(DOC_MODULE)-sections.txt ; \
+	    rm -f $(content_files) ; \
+	    rm -rf tmpl/*.sgml ; \
+	fi
+	@rm -rf *.o
+
+maintainer-clean-local: clean
+	@cd $(srcdir) && rm -rf html \
+		xml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+# thomas: make docs parallel installable; devhelp requires majorminor too
+install-data-local:
+	(installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \
+	if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \
+	  if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \
+	            $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
+	            $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \
+	  fi; \
+	  (which gtkdoc-rebase >/dev/null && \
+	    gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+	fi)
+uninstall-local:
+	if test -d $(DESTDIR)$(TARGET_DIR); then \
+	  rm -rf $(DESTDIR)$(TARGET_DIR)/*; \
+	  rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \
+	else \
+	  echo '-- Nothing to uninstall' ; \
+	fi;
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@	@false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/html
+	cp html/* $(distdir)/html
+	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+	cd $(distdir) && rm -f $(DISTCLEANFILES)
+	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# avoid spurious build errors when distchecking with -jN
+.NOTPARALLEL:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/libs/compiling.sgml b/docs/libs/compiling.sgml
new file mode 100644
index 0000000..70a130c
--- /dev/null
+++ b/docs/libs/compiling.sgml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY % version-entities SYSTEM "version.entities">
+%version-entities;
+]>
+<refentry id="compiling" revision="17 Jan 2002">
+<refmeta>
+<refentrytitle>Compiling</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>GStreamer-Base Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Compiling against the base plugins libraries</refname>
+<refpurpose>
+How to compile against the base plugins libraries
+</refpurpose>
+</refnamediv>
+
+<refsect1>
+<title>Compiling against the base plugins libraries</title>
+
+<para>
+To compile against these libraries, you need to tell the compiler where to 
+find the header files and libraries. This is done with the
+<application>pkg-config</application> utility.
+</para>
+<para>
+The following interactive shell session demonstrates how
+<application>pkg-config</application> is used:
+<programlisting>
+$ pkg-config --cflags gstreamer-plugins-base-&GST_MAJORMINOR;
+-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -pthread -I/usr/include/gstreamer-&GST_MAJORMINOR; -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2
+$ pkg-config --libs gstreamer-plugins-base-&GST_MAJORMINOR;
+-Wl,--export-dynamic -pthread -lgstreamer-&GST_MAJORMINOR; -lgobject-2.0 -lgmodule-2.0 -ldl -lgthread-2.0 -lxml2 -lpthread -lz -lm -lglib-2.0
+</programlisting>
+</para>
+
+<para>
+Note that, because of the number of libraries provided in this package,
+the pkg-config information <emphasis>does not add -l flags</emphasis> itself
+to choose the libraries to link to.  You must add these yourself to select
+which of the libraries you want to use.
+</para>
+</refsect1>
+
+</refentry>
diff --git a/docs/libs/gst-plugins-base-libs-docs.sgml b/docs/libs/gst-plugins-base-libs-docs.sgml
new file mode 100644
index 0000000..b470767
--- /dev/null
+++ b/docs/libs/gst-plugins-base-libs-docs.sgml
@@ -0,0 +1,238 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY % version-entities SYSTEM "version.entities">
+%version-entities;
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+  <bookinfo>
+    <title>GStreamer Base Plugins &GST_MAJORMINOR; Library Reference Manual</title>
+    <releaseinfo>
+      for GStreamer Base Library &GST_MAJORMINOR; (&GST_VERSION;)
+      <ulink role="online-location" url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/</ulink>.
+    </releaseinfo>
+  </bookinfo>
+
+  <part id="gstreamer-plugins-base">
+    <title>GStreamer Base Plugins Libraries</title>
+    <para>
+      This manual describes the libraries provided by the GStreamer Base Plugins
+      package.
+    </para>
+    <xi:include href="compiling.sgml" />
+
+    <chapter id="gstreamer-app">
+      <title>App Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstapp-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <para>
+      To use it the functionality, insert an appsrc or appsink element into a pipeline and call the appropriate functions on the element.
+      </para>
+      <xi:include href="xml/gstappsrc.xml" />
+      <xi:include href="xml/gstappsink.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-audio">
+      <title>Audio Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstaudio-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstaudio.xml" />
+      <xi:include href="xml/gstaudioclock.xml" />
+      <xi:include href="xml/gstaudiodecoder.xml" />
+      <xi:include href="xml/gstaudioencoder.xml" />
+      <xi:include href="xml/gstaudiofilter.xml" />
+      <xi:include href="xml/gstaudiomixerutils.xml" />
+      <xi:include href="xml/gstaudiosink.xml" />
+      <xi:include href="xml/gstaudiosrc.xml" />
+      <xi:include href="xml/gstbaseaudiosink.xml" />
+      <xi:include href="xml/gstbaseaudiosrc.xml" />
+      <xi:include href="xml/gstmultichannel.xml" />
+      <xi:include href="xml/gstringbuffer.xml" />
+      <xi:include href="xml/gstaudioiec61937.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-cdda">
+      <title>CDDA Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstcdda-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstcddabasesrc.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-ffft">
+      <title>FFT Library</title>
+      <para>
+        The gstfft library is based on
+        <ulink role="online-location" url="http://sourceforge.net/projects/kissfft">kissfft</ulink>
+        by Mark Borgerding.
+      </para>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstfft-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstfft.xml" />
+      <xi:include href="xml/gstffts16.xml" />
+      <xi:include href="xml/gstffts32.xml" />
+      <xi:include href="xml/gstfftf32.xml" />
+      <xi:include href="xml/gstfftf64.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-interfaces">
+      <title>Interfaces Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstinterfaces-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstcolorbalance.xml" />
+      <xi:include href="xml/gstcolorbalancechannel.xml" />
+      <xi:include href="xml/gstmixer.xml" />
+      <xi:include href="xml/gstmixeroptions.xml" />
+      <xi:include href="xml/gstmixertrack.xml" />
+      <xi:include href="xml/gstnavigation.xml" />
+      <xi:include href="xml/gstpropertyprobe.xml" />
+      <xi:include href="xml/gststreamvolume.xml" />
+      <xi:include href="xml/gsttuner.xml" />
+      <xi:include href="xml/gsttunerchannel.xml" />
+      <xi:include href="xml/gsttunernorm.xml" />
+      <xi:include href="xml/gstvideoorientation.xml" />
+      <xi:include href="xml/gstvideooverlay.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-netbuffer">
+      <title>Network Buffer Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstnetbuffer-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstnetbuffer.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-riff">
+      <title>Riff Media Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstriff-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstriff.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-rtp">
+      <title>RTP Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstrtp-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstbasertpaudiopayload.xml" />
+      <xi:include href="xml/gstbasertpdepayload.xml" />
+      <xi:include href="xml/gstbasertppayload.xml" />
+      <xi:include href="xml/gstrtpbuffer.xml" />
+      <xi:include href="xml/gstrtcpbuffer.xml" />
+      <xi:include href="xml/gstrtppayloads.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-rtsp">
+      <title>RTSP Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstrtsp-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstrtspbase64.xml" />
+      <xi:include href="xml/gstrtspconnection.xml" />
+      <xi:include href="xml/gstrtspdefs.xml" />
+      <xi:include href="xml/gstrtspextension.xml" />
+      <xi:include href="xml/gstrtspmessage.xml" />
+      <xi:include href="xml/gstrtsprange.xml" />
+      <xi:include href="xml/gstrtsptransport.xml" />
+      <xi:include href="xml/gstrtspurl.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-sdp">
+      <title>SDP Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstsdp-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstsdpmessage.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-tag">
+      <title>Tag Support Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgsttag-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gsttag.xml" />
+      <xi:include href="xml/gsttagvorbis.xml" />
+      <xi:include href="xml/gsttagid3.xml" />
+      <xi:include href="xml/gsttagexif.xml" />
+      <xi:include href="xml/gsttagxmp.xml" />
+      <xi:include href="xml/gsttagxmpwriter.xml" />
+      <xi:include href="xml/gsttagdemux.xml" />
+      <xi:include href="xml/gsttagmux.xml" />
+      <xi:include href="xml/gsttaglanguagecodes.xml" />
+      <xi:include href="xml/gsttaglicenses.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-base-utils">
+      <title>Base Utils Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstpbutils-&GST_MAJORMINOR;</filename> to the library
+        flags.
+      </para>
+      <xi:include href="xml/gstpbutils.xml" />
+      <xi:include href="xml/gstpluginsbaseversion.xml" />
+      <xi:include href="xml/gstpbutilscodecutils.xml" />
+      <xi:include href="xml/gstpbutilsdescriptions.xml" />
+      <xi:include href="xml/gstpbutilsmissingplugins.xml" />
+      <xi:include href="xml/gstpbutilsinstallplugins.xml" />
+      <xi:include href="xml/gstdiscoverer.xml" />
+      <xi:include href="xml/encoding-profile.xml" />
+    </chapter>
+
+    <chapter id="gstreamer-video">
+      <title>Video Library</title>
+      <para>
+        This library should be linked to by getting cflags and libs from
+        <filename>gstreamer-plugins-base-&GST_MAJORMINOR;.pc</filename> and adding
+        <filename>-lgstvideo-&GST_MAJORMINOR;</filename> to the library flags.
+      </para>
+      <xi:include href="xml/gstvideo.xml" />
+      <xi:include href="xml/gstvideofilter.xml" />
+      <xi:include href="xml/gstvideosink.xml" />
+    </chapter>
+  </part>
+
+  <part id="gstreamer-libs-hierarchy">
+    <title>Object Hierarchy</title>
+    <xi:include href="xml/tree_index.sgml" />
+  </part>
+
+  <index id="api-index-full">
+    <title>Index</title>
+    <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+  </index>
+  <index id="api-index-deprecated" role="deprecated">
+    <title>Index of deprecated API</title>
+    <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+  </index>
+
+  <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
diff --git a/docs/libs/gst-plugins-base-libs-overrides.txt b/docs/libs/gst-plugins-base-libs-overrides.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/libs/gst-plugins-base-libs-overrides.txt
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
new file mode 100644
index 0000000..6272fef
--- /dev/null
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -0,0 +1,2351 @@
+# app
+<SECTION>
+<FILE>gstappsrc</FILE>
+<TITLE>appsrc</TITLE>
+<INCLUDE>gst/app/gstappsrc.h</INCLUDE>
+GstAppStreamType
+gst_app_src_set_caps
+gst_app_src_get_caps
+gst_app_src_get_latency
+gst_app_src_set_latency
+gst_app_src_set_size
+gst_app_src_get_size
+gst_app_src_set_stream_type
+gst_app_src_get_stream_type
+gst_app_src_set_max_bytes
+gst_app_src_get_max_bytes
+gst_app_src_get_emit_signals
+gst_app_src_set_emit_signals
+GstAppSrcCallbacks
+gst_app_src_set_callbacks
+gst_app_src_push_buffer
+gst_app_src_end_of_stream
+<SUBSECTION Standard>
+GstAppSrcClass
+GST_APP_SRC
+GST_APP_SRC_CAST
+GST_IS_APP_SRC
+GST_TYPE_APP_SRC
+gst_app_src_get_type
+GST_APP_SRC_CLASS
+GST_IS_APP_SRC_CLASS
+GST_APP_BUFFER
+GST_APP_BUFFER_CLASS
+GST_IS_APP_BUFFER
+GST_IS_APP_BUFFER_CLASS
+GST_TYPE_APP_BUFFER
+GST_TYPE_APP_STREAM_TYPE
+gst_app_stream_type_get_type
+<SUBSECTION Private>
+GstAppSrc
+GstAppSrcPrivate
+GstAppBuffer
+GstAppBufferClass
+GstAppBufferFinalizeFunc
+gst_app_buffer_get_type
+gst_app_buffer_new
+</SECTION>
+
+<SECTION>
+<FILE>gstappsink</FILE>
+<TITLE>appsink</TITLE>
+<INCLUDE>gst/app/gstappsink.h</INCLUDE>
+gst_app_sink_set_caps
+gst_app_sink_get_caps
+gst_app_sink_is_eos
+gst_app_sink_set_emit_signals
+gst_app_sink_get_emit_signals
+gst_app_sink_set_max_buffers
+gst_app_sink_get_max_buffers
+gst_app_sink_set_drop
+gst_app_sink_get_drop
+gst_app_sink_pull_preroll
+gst_app_sink_pull_buffer
+gst_app_sink_pull_buffer_list
+GstAppSinkCallbacks
+gst_app_sink_set_callbacks
+<SUBSECTION Standard>
+GstAppSink
+GstAppSinkPrivate
+GstAppSinkClass
+GST_APP_SINK
+GST_APP_SINK_CAST
+GST_IS_APP_SINK
+GST_TYPE_APP_SINK
+gst_app_sink_get_type
+GST_APP_SINK_CLASS
+GST_IS_APP_SINK_CLASS
+</SECTION>
+
+# audio
+
+<SECTION>
+<FILE>gstaudio</FILE>
+<INCLUDE>gst/audio/audio.h</INCLUDE>
+GstAudioFlags
+GstAudioFormat
+GstAudioFormatFlags
+GstAudioFormatInfo
+GstAudioInfo
+gst_audio_info_init
+gst_audio_info_from_caps
+gst_audio_info_to_caps
+gst_audio_info_convert
+gst_audio_format_get_info
+GST_AUDIO_FORMAT_INFO_DEPTH
+GST_AUDIO_FORMAT_INFO_ENDIANNESS
+GST_AUDIO_FORMAT_INFO_FLAGS
+GST_AUDIO_FORMAT_INFO_FORMAT
+GST_AUDIO_FORMAT_INFO_IS_FLOAT
+GST_AUDIO_FORMAT_INFO_IS_INTEGER
+GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN
+GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN
+GST_AUDIO_FORMAT_INFO_IS_SIGNED
+GST_AUDIO_FORMAT_INFO_NAME
+GST_AUDIO_FORMAT_INFO_WIDTH
+GST_AUDIO_INFO_BPF
+GST_AUDIO_INFO_BPS
+GST_AUDIO_INFO_CHANNELS
+GST_AUDIO_INFO_DEPTH
+GST_AUDIO_INFO_FLAGS
+GST_AUDIO_INFO_FORMAT
+GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS
+GST_AUDIO_INFO_NAME
+GST_AUDIO_INFO_POSITION
+GST_AUDIO_INFO_RATE
+GST_AUDIO_INFO_WIDTH
+
+GST_FRAMES_TO_CLOCK_TIME
+GST_CLOCK_TIME_TO_FRAMES
+GST_AUDIO_DEF_RATE
+gst_audio_buffer_clip
+<SUBSECTION Standard>
+GST_TYPE_BUFFER_FORMAT
+GST_TYPE_BUFFER_FORMAT_TYPE
+gst_buffer_format_get_type
+gst_buffer_format_type_get_type
+<SUBSECTION Private>
+_GST_AUDIO_FORMAT_NE
+</SECTION>
+
+<SECTION>
+<FILE>gstaudioclock</FILE>
+<INCLUDE>gst/audio/gstaudioclock.h</INCLUDE>
+GstAudioClock
+GstAudioClockGetTimeFunc
+gst_audio_clock_new
+gst_audio_clock_new_full
+gst_audio_clock_adjust
+gst_audio_clock_get_time
+gst_audio_clock_reset
+gst_audio_clock_invalidate
+<SUBSECTION Standard>
+GstAudioClockClass
+GST_AUDIO_CLOCK
+GST_IS_AUDIO_CLOCK
+GST_TYPE_AUDIO_CLOCK
+gst_audio_clock_get_type
+GST_AUDIO_CLOCK_CLASS
+GST_IS_AUDIO_CLOCK_CLASS
+GST_AUDIO_CLOCK_CAST
+</SECTION>
+
+<SECTION>
+<FILE>gstaudiodecoder</FILE>
+<INCLUDE>gst/audio/gstaudiodecoder.h</INCLUDE>
+GstAudioDecoder
+GstAudioDecoderClass
+GST_AUDIO_DECODER_ERROR
+GST_AUDIO_DECODER_SINK_NAME
+GST_AUDIO_DECODER_SINK_PAD
+GST_AUDIO_DECODER_SRC_NAME
+GST_AUDIO_DECODER_SRC_PAD
+gst_audio_decoder_finish_frame
+gst_audio_decoder_get_audio_info
+gst_audio_decoder_get_byte_time
+gst_audio_decoder_get_delay
+gst_audio_decoder_get_latency
+gst_audio_decoder_get_max_errors
+gst_audio_decoder_get_min_latency
+gst_audio_decoder_get_parse_state
+gst_audio_decoder_get_plc
+gst_audio_decoder_get_plc_aware
+gst_audio_decoder_get_tolerance
+gst_audio_decoder_set_byte_time
+gst_audio_decoder_set_latency
+gst_audio_decoder_set_max_errors
+gst_audio_decoder_set_min_latency
+gst_audio_decoder_set_plc
+gst_audio_decoder_set_plc_aware
+gst_audio_decoder_set_tolerance
+<SUBSECTION Standard>
+GST_AUDIO_DECODER
+GST_IS_AUDIO_DECODER
+GST_TYPE_AUDIO_DECODER
+gst_audio_decoder_get_type
+GST_AUDIO_DECODER_CLASS
+GST_IS_AUDIO_DECODER_CLASS
+GST_AUDIO_DECODER_GET_CLASS
+GstAudioDecoderPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gstaudioencoder</FILE>
+<INCLUDE>gst/audio/gstaudioencoder.h</INCLUDE>
+GstAudioEncoder
+GstAudioEncoderClass
+GST_AUDIO_ENCODER_SEGMENT
+GST_AUDIO_ENCODER_SINK_NAME
+GST_AUDIO_ENCODER_SINK_PAD
+GST_AUDIO_ENCODER_SRC_NAME
+GST_AUDIO_ENCODER_SRC_PAD
+gst_audio_encoder_finish_frame
+gst_audio_encoder_get_audio_info
+gst_audio_encoder_get_frame_max
+gst_audio_encoder_get_frame_samples_min
+gst_audio_encoder_get_frame_samples_max
+gst_audio_encoder_get_hard_resync
+gst_audio_encoder_get_latency
+gst_audio_encoder_get_lookahead
+gst_audio_encoder_get_mark_granule
+gst_audio_encoder_get_perfect_timestamp
+gst_audio_encoder_get_tolerance
+gst_audio_encoder_proxy_getcaps
+gst_audio_encoder_set_frame_max
+gst_audio_encoder_set_frame_samples_min
+gst_audio_encoder_set_frame_samples_max
+gst_audio_encoder_set_hard_resync
+gst_audio_encoder_set_latency
+gst_audio_encoder_set_lookahead
+gst_audio_encoder_set_mark_granule
+gst_audio_encoder_set_perfect_timestamp
+gst_audio_encoder_set_tolerance
+<SUBSECTION Standard>
+GST_AUDIO_ENCODER
+GST_AUDIO_ENCODER_CAST
+GST_IS_AUDIO_ENCODER
+GST_TYPE_AUDIO_ENCODER
+gst_audio_encoder_get_type
+GST_AUDIO_ENCODER_CLASS
+GST_IS_AUDIO_ENCODER_CLASS
+GST_AUDIO_ENCODER_GET_CLASS
+GstAudioEncoderPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gstaudiofilter</FILE>
+<INCLUDE>gst/audio/gstaudiofilter.h</INCLUDE>
+GstAudioFilter
+GstAudioFilterClass
+gst_audio_filter_class_add_pad_templates
+<SUBSECTION Standard>
+GST_AUDIO_FILTER
+GST_IS_AUDIO_FILTER
+GST_TYPE_AUDIO_FILTER
+gst_audio_filter_get_type
+GST_AUDIO_FILTER_CLASS
+GST_IS_AUDIO_FILTER_CLASS
+GST_AUDIO_FILTER_CAST
+GST_AUDIO_FILTER_CLASS_CAST
+</SECTION>
+
+<SECTION>
+<FILE>gstaudiomixerutils</FILE>
+<INCLUDE>gst/audio/mixerutils.h</INCLUDE>
+GstAudioMixerFilterFunc
+gst_audio_default_registry_mixer_filter
+</SECTION>
+
+<SECTION>
+<FILE>gstaudiosink</FILE>
+<INCLUDE>gst/audio/gstaudiosink.h</INCLUDE>
+GstAudioSink
+GstAudioSinkClass
+<SUBSECTION Standard>
+GST_AUDIO_SINK
+GST_IS_AUDIO_SINK
+GST_TYPE_AUDIO_SINK
+gst_audio_sink_get_type
+GST_AUDIO_SINK_CLASS
+GST_IS_AUDIO_SINK_CLASS
+GST_AUDIO_SINK_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gstaudiosrc</FILE>
+<INCLUDE>gst/audio/gstaudiosrc.h</INCLUDE>
+GstAudioSrc
+GstAudioSrcClass
+<SUBSECTION Standard>
+GST_AUDIO_SRC
+GST_IS_AUDIO_SRC
+GST_TYPE_AUDIO_SRC
+gst_audio_src_get_type
+GST_AUDIO_SRC_CLASS
+GST_IS_AUDIO_SRC_CLASS
+GST_AUDIO_SRC_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gstbaseaudiosink</FILE>
+<INCLUDE>gst/audio/gstbaseaudiosink.h</INCLUDE>
+GstBaseAudioSink
+GstBaseAudioSinkClass
+GstBaseAudioSinkSlaveMethod
+
+GST_BASE_AUDIO_SINK_CLOCK
+GST_BASE_AUDIO_SINK_PAD
+gst_base_audio_sink_create_ringbuffer
+gst_base_audio_sink_set_provide_clock
+gst_base_audio_sink_get_provide_clock
+gst_base_audio_sink_set_slave_method
+gst_base_audio_sink_get_slave_method
+gst_base_audio_sink_get_drift_tolerance
+gst_base_audio_sink_set_drift_tolerance
+<SUBSECTION Standard>
+GST_BASE_AUDIO_SINK
+GST_IS_BASE_AUDIO_SINK
+GST_TYPE_BASE_AUDIO_SINK
+gst_base_audio_sink_get_type
+GST_BASE_AUDIO_SINK_CLASS
+GST_IS_BASE_AUDIO_SINK_CLASS
+GST_BASE_AUDIO_SINK_GET_CLASS
+GstBaseAudioSinkPrivate
+gst_base_audio_sink_slave_method_get_type
+GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD
+</SECTION>
+
+<SECTION>
+<FILE>gstbaseaudiosrc</FILE>
+<INCLUDE>gst/audio/gstbaseaudiosrc.h</INCLUDE>
+GstBaseAudioSrc
+GstBaseAudioSrcClass
+GstBaseAudioSrcSlaveMethod
+
+GST_BASE_AUDIO_SRC_CLOCK
+GST_BASE_AUDIO_SRC_PAD
+gst_base_audio_src_create_ringbuffer
+gst_base_audio_src_set_provide_clock
+gst_base_audio_src_get_provide_clock
+gst_base_audio_src_get_slave_method
+gst_base_audio_src_set_slave_method
+<SUBSECTION Standard>
+GstBaseAudioSrcPrivate
+GST_BASE_AUDIO_SRC
+GST_IS_BASE_AUDIO_SRC
+GST_TYPE_BASE_AUDIO_SRC
+gst_base_audio_src_get_type
+GST_BASE_AUDIO_SRC_CLASS
+GST_IS_BASE_AUDIO_SRC_CLASS
+GST_BASE_AUDIO_SRC_GET_CLASS
+gst_base_audio_src_slave_method_get_type
+GST_TYPE_BASE_AUDIO_SRC_SLAVE_METHOD
+</SECTION>
+
+<SECTION>
+<FILE>gstmultichannel</FILE>
+<INCLUDE>gst/audio/multichannel.h</INCLUDE>
+GstAudioChannelPosition
+gst_audio_fixate_channel_positions
+gst_audio_get_channel_positions
+gst_audio_set_caps_channel_positions_list
+gst_audio_set_channel_positions
+gst_audio_set_structure_channel_positions_list
+gst_audio_check_channel_positions
+<SUBSECTION Standard>
+GST_TYPE_AUDIO_CHANNEL_POSITION
+gst_audio_channel_position_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstringbuffer</FILE>
+<INCLUDE>gst/audio/gstringbuffer.h</INCLUDE>
+GstRingBuffer
+GstRingBufferClass
+GstRingBufferSpec
+GstRingBufferCallback
+GstRingBufferSegState
+GstRingBufferState
+GstBufferFormatType
+
+GST_RING_BUFFER_BROADCAST
+GST_RING_BUFFER_GET_COND
+GST_RING_BUFFER_SIGNAL
+GST_RING_BUFFER_WAIT
+
+gst_ring_buffer_set_callback
+
+gst_ring_buffer_acquire
+gst_ring_buffer_release
+gst_ring_buffer_is_acquired
+
+gst_ring_buffer_activate
+gst_ring_buffer_is_active
+
+gst_ring_buffer_start
+gst_ring_buffer_pause
+gst_ring_buffer_stop
+
+gst_ring_buffer_delay
+gst_ring_buffer_samples_done
+gst_ring_buffer_set_sample
+gst_ring_buffer_commit
+gst_ring_buffer_commit_full
+gst_ring_buffer_convert
+
+gst_ring_buffer_prepare_read
+gst_ring_buffer_read
+gst_ring_buffer_clear
+gst_ring_buffer_clear_all
+gst_ring_buffer_advance
+
+gst_ring_buffer_close_device
+gst_ring_buffer_open_device
+gst_ring_buffer_device_is_open
+
+gst_ring_buffer_may_start
+gst_ring_buffer_parse_caps
+gst_ring_buffer_set_flushing
+
+<SUBSECTION Standard>
+GST_TYPE_RING_BUFFER
+GST_RING_BUFFER
+GST_RING_BUFFER_CLASS
+GST_RING_BUFFER_GET_CLASS
+GST_IS_RING_BUFFER
+GST_IS_RING_BUFFER_CLASS
+GST_RING_BUFFER_CAST
+gst_ring_buffer_get_type
+GST_TYPE_RING_BUFFER_SEG_STATE
+gst_ring_buffer_seg_state_get_type
+GST_TYPE_RING_BUFFER_STATE
+gst_ring_buffer_state_get_type
+<SUBSECTION Private>
+gst_ring_buffer_debug_spec_buff
+gst_ring_buffer_debug_spec_caps
+</SECTION>
+
+<SECTION>
+<FILE>gstaudioiec61937</FILE>
+<INCLUDE>gst/audio/gstaudioiec61937.h</INCLUDE>
+gst_audio_iec61937_frame_size
+gst_audio_iec61937_payload
+</SECTION>
+
+
+# cdda
+
+<SECTION>
+<FILE>gstcddabasesrc</FILE>
+<INCLUDE>gst/cdda/gstcddabasesrc.h</INCLUDE>
+GstCddaBaseSrc
+GstCddaBaseSrcClass
+GstCddaBaseSrcTrack
+GstCddaBaseSrcMode
+gst_cdda_base_src_add_track
+<SUBSECTION Standard>
+GST_TYPE_CDDA_BASE_SRC_MODE
+gst_cdda_base_src_mode_get_type
+GST_CDDA_BASE_SRC
+GST_CDDA_BASE_SRC_CLASS
+GST_CDDA_BASE_SRC_GET_CLASS
+GST_IS_CDDA_BASE_SRC
+GST_IS_CDDA_BASE_SRC_CLASS
+GST_TYPE_CDDA_BASE_SRC
+gst_cdda_base_src_get_type
+</SECTION>
+
+# fft
+
+<SECTION>
+<FILE>gstfft</FILE>
+<INCLUDE>gst/fft/gstfft.h</INCLUDE>
+GstFFTWindow
+gst_fft_next_fast_length
+</SECTION>
+
+<SECTION>
+<FILE>gstffts16</FILE>
+<INCLUDE>gst/fft/gstffts16.h</INCLUDE>
+GstFFTS16
+GstFFTS16Complex
+gst_fft_s16_new
+gst_fft_s16_fft
+gst_fft_s16_inverse_fft
+gst_fft_s16_window
+gst_fft_s16_free
+<SUBSECTION Standard>
+kiss_fft_s16
+kiss_fft_s16_alloc
+kiss_fft_s16_cfg
+kiss_fft_s16_cleanup
+kiss_fft_s16_cpx
+kiss_fft_s16_free
+kiss_fft_s16_next_fast_size
+kiss_fft_s16_scalar
+kiss_fft_s16_stride
+KISS_FFT_S16_COS
+KISS_FFT_S16_MALLOC
+KISS_FFT_S16_SIN
+</SECTION>
+
+<SECTION>
+<FILE>gstffts32</FILE>
+<INCLUDE>gst/fft/gstffts32.h</INCLUDE>
+GstFFTS32
+GstFFTS32Complex
+gst_fft_s32_new
+gst_fft_s32_fft
+gst_fft_s32_inverse_fft
+gst_fft_s32_window
+gst_fft_s32_free
+<SUBSECTION Standard>
+kiss_fft_s32
+kiss_fft_s32_alloc
+kiss_fft_s32_cfg
+kiss_fft_s32_cleanup
+kiss_fft_s32_cpx
+kiss_fft_s32_free
+kiss_fft_s32_next_fast_size
+kiss_fft_s32_scalar
+kiss_fft_s32_stride
+KISS_FFT_S32_COS
+KISS_FFT_S32_MALLOC
+KISS_FFT_S32_SIN
+
+</SECTION>
+
+<SECTION>
+<FILE>gstfftf32</FILE>
+<INCLUDE>gst/fft/gstfftf32.h</INCLUDE>
+GstFFTF32
+GstFFTF32Complex
+gst_fft_f32_new
+gst_fft_f32_fft
+gst_fft_f32_inverse_fft
+gst_fft_f32_window
+gst_fft_f32_free
+<SUBSECTION Standard>
+kiss_fft_f32
+kiss_fft_f32_alloc
+kiss_fft_f32_cfg
+kiss_fft_f32_cleanup
+kiss_fft_f32_cpx
+kiss_fft_f32_free
+kiss_fft_f32_next_fast_size
+kiss_fft_f32_scalar
+kiss_fft_f32_stride
+KISS_FFT_F32_COS
+KISS_FFT_F32_MALLOC
+KISS_FFT_F32_SIN
+</SECTION>
+
+<SECTION>
+<FILE>gstfftf64</FILE>
+<INCLUDE>gst/fft/gstfftf64.h</INCLUDE>
+GstFFTF64
+GstFFTF64Complex
+gst_fft_f64_new
+gst_fft_f64_fft
+gst_fft_f64_inverse_fft
+gst_fft_f64_window
+gst_fft_f64_free
+<SUBSECTION Standard>
+kiss_fft_f64
+kiss_fft_f64_alloc
+kiss_fft_f64_cfg
+kiss_fft_f64_cleanup
+kiss_fft_f64_cpx
+kiss_fft_f64_free
+kiss_fft_f64_next_fast_size
+kiss_fft_f64_scalar
+kiss_fft_f64_stride
+KISS_FFT_F64_COS
+KISS_FFT_F64_MALLOC
+KISS_FFT_F64_SIN
+</SECTION>
+
+# interfaces
+
+<SECTION>
+<FILE>gstcolorbalance</FILE>
+<INCLUDE>gst/interfaces/color.h</INCLUDE>
+GstColorBalance
+GstColorBalanceClass
+GstColorBalanceType
+gst_color_balance_list_channels
+gst_color_balance_get_value
+gst_color_balance_set_value
+gst_color_balance_value_changed
+gst_color_balance_get_balance_type
+<SUBSECTION Standard>
+GST_COLOR_BALANCE
+GST_COLOR_BALANCE_CLASS
+GST_COLOR_BALANCE_GET_CLASS
+GST_COLOR_BALANCE_TYPE
+GST_IS_COLOR_BALANCE
+GST_IS_COLOR_BALANCE_CLASS
+GST_TYPE_COLOR_BALANCE
+GST_TYPE_COLOR_BALANCE_TYPE
+gst_color_balance_get_type
+gst_color_balance_type_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstcolorbalancechannel</FILE>
+<INCLUDE>gst/interfaces/colorbalancechannel.h</INCLUDE>
+GstColorBalanceChannel
+GstColorBalanceChannelClass
+<SUBSECTION Standard>
+GST_COLOR_BALANCE_CHANNEL
+GST_COLOR_BALANCE_CHANNEL_CLASS
+GST_IS_COLOR_BALANCE_CHANNEL
+GST_IS_COLOR_BALANCE_CHANNEL_CLASS
+GST_TYPE_COLOR_BALANCE_CHANNEL
+gst_color_balance_channel_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstmixer</FILE>
+<INCLUDE>gst/interfaces/mixer.h</INCLUDE>
+GstMixer
+GstMixerType
+GstMixerFlags
+GstMixerMessageType
+
+gst_mixer_list_tracks
+gst_mixer_get_volume
+gst_mixer_set_volume
+
+gst_mixer_set_mute
+gst_mixer_set_record
+gst_mixer_set_option
+
+gst_mixer_mute_toggled
+gst_mixer_record_toggled
+gst_mixer_volume_changed
+gst_mixer_option_changed
+gst_mixer_options_list_changed
+gst_mixer_get_option
+
+gst_mixer_mixer_changed
+
+gst_mixer_get_mixer_flags
+gst_mixer_get_mixer_type
+
+gst_mixer_message_get_type
+gst_mixer_message_parse_mute_toggled
+gst_mixer_message_parse_option_changed
+gst_mixer_message_parse_record_toggled
+gst_mixer_message_parse_volume_changed
+gst_mixer_message_parse_options_list_changed
+
+<SUBSECTION Standard>
+GstMixerClass
+GST_TYPE_MIXER
+GST_TYPE_MIXER_TYPE
+GST_TYPE_MIXER_FLAGS
+GST_TYPE_MIXER_MESSAGE_TYPE
+GST_MIXER
+GST_MIXER_CLASS
+GST_MIXER_GET_CLASS
+GST_MIXER_TYPE
+GST_IS_MIXER
+GST_IS_MIXER_CLASS
+GST_TYPE_STREAM_VOLUME_FORMAT
+gst_mixer_get_type
+gst_mixer_type_get_type
+gst_mixer_flags_get_type
+gst_mixer_message_type_get_type
+gst_stream_volume_format_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstmixeroptions</FILE>
+<INCLUDE>gst/interfaces/mixer.h</INCLUDE>
+GstMixerOptions
+gst_mixer_options_get_values
+<SUBSECTION Standard>
+GstMixerOptionsClass
+GST_TYPE_MIXER_OPTIONS
+GST_MIXER_OPTIONS
+GST_MIXER_OPTIONS_CLASS
+GST_IS_MIXER_OPTIONS
+GST_IS_MIXER_OPTIONS_CLASS
+GST_MIXER_OPTIONS_GET_CLASS
+gst_mixer_options_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstmixertrack</FILE>
+<INCLUDE>gst/interfaces/mixer.h</INCLUDE>
+GstMixerTrack
+GstMixerTrackFlags
+GST_MIXER_TRACK_HAS_FLAG
+<SUBSECTION Standard>
+GstMixerTrackClass
+GST_TYPE_MIXER_TRACK
+GST_TYPE_MIXER_TRACK_FLAGS
+GST_MIXER_TRACK
+GST_MIXER_TRACK_CLASS
+GST_IS_MIXER_TRACK
+GST_IS_MIXER_TRACK_CLASS
+gst_mixer_track_flags_get_type
+gst_mixer_track_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstnavigation</FILE>
+<INCLUDE>gst/interfaces/navigation.h</INCLUDE>
+GstNavigation
+GstNavigationInterface
+GstNavigationCommand
+GstNavigationEventType
+GstNavigationMessageType
+GstNavigationQueryType
+
+gst_navigation_send_event
+gst_navigation_send_key_event
+gst_navigation_send_mouse_event
+gst_navigation_send_command
+
+gst_navigation_event_parse_command
+gst_navigation_event_parse_key_event
+gst_navigation_event_parse_mouse_button_event
+gst_navigation_event_parse_mouse_move_event
+gst_navigation_message_get_type
+gst_navigation_message_new_angles_changed
+gst_navigation_message_new_commands_changed
+gst_navigation_message_new_mouse_over
+gst_navigation_message_parse_mouse_over
+gst_navigation_message_parse_angles_changed
+gst_navigation_query_new_angles
+gst_navigation_query_get_type
+gst_navigation_query_new_commands
+gst_navigation_query_parse_angles
+gst_navigation_query_parse_commands_length
+gst_navigation_query_parse_commands_nth
+gst_navigation_query_set_angles
+gst_navigation_query_set_commands
+gst_navigation_query_set_commandsv
+
+GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU
+GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU
+GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU
+GST_NAVIGATION_COMMAND_DVD_MENU
+GST_NAVIGATION_COMMAND_DVD_ROOT_MENU
+GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU
+GST_NAVIGATION_COMMAND_DVD_TITLE_MENU
+
+<SUBSECTION Standard>
+GST_TYPE_NAVIGATION
+GST_NAVIGATION
+GST_NAVIGATION_GET_IFACE
+GST_TYPE_NAVIGATION_COMMAND
+GST_TYPE_NAVIGATION_EVENT_TYPE
+GST_TYPE_NAVIGATION_MESSAGE_TYPE
+GST_TYPE_NAVIGATION_QUERY_TYPE
+GST_IS_NAVIGATION
+gst_navigation_get_type
+gst_navigation_event_get_type
+gst_navigation_event_type_get_type
+gst_navigation_message_type_get_type
+gst_navigation_query_type_get_type
+gst_navigation_command_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstpropertyprobe</FILE>
+<INCLUDE>gst/interfaces/propertyprobe.h</INCLUDE>
+GstPropertyProbe
+GstPropertyProbeInterface
+
+gst_property_probe_get_properties
+gst_property_probe_get_property
+gst_property_probe_get_values
+gst_property_probe_get_values_name
+gst_property_probe_needs_probe
+gst_property_probe_needs_probe_name
+gst_property_probe_probe_and_get_values
+gst_property_probe_probe_and_get_values_name
+gst_property_probe_probe_property
+gst_property_probe_probe_property_name
+<SUBSECTION Standard>
+GST_TYPE_PROPERTY_PROBE
+GST_PROPERTY_PROBE
+GST_PROPERTY_PROBE_GET_IFACE
+GST_IS_PROPERTY_PROBE
+gst_property_probe_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gststreamvolume</FILE>
+<INCLUDE>gst/interfaces/streamvolume.h</INCLUDE>
+GstStreamVolume
+GstStreamVolumeFormat
+
+gst_stream_volume_get_volume
+gst_stream_volume_set_volume
+
+gst_stream_volume_get_mute
+gst_stream_volume_set_mute
+
+gst_stream_volume_convert_volume
+
+<SUBSECTION Standard>
+GstStreamVolumeInterface
+GST_TYPE_STREAM_VOLUME
+GST_STREAM_VOLUME
+GST_STREAM_VOLUME_INTERFACE
+GST_STREAM_VOLUME_GET_INTERFACE
+GST_IS_STREAM_VOLUME
+GST_IS_STREAM_VOLUME_INTERFACE
+gst_stream_volume_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttuner</FILE>
+<INCLUDE>gst/interfaces/tuner.h</INCLUDE>
+GstTuner
+GstTunerClass
+
+gst_tuner_list_channels
+gst_tuner_get_channel
+gst_tuner_set_channel
+
+gst_tuner_list_norms
+gst_tuner_get_norm
+gst_tuner_set_norm
+
+gst_tuner_get_frequency
+gst_tuner_set_frequency
+gst_tuner_signal_strength
+
+gst_tuner_find_norm_by_name
+gst_tuner_find_channel_by_name
+
+gst_tuner_channel_changed
+gst_tuner_norm_changed
+gst_tuner_frequency_changed
+gst_tuner_signal_changed
+<SUBSECTION Standard>
+GST_TYPE_TUNER
+GST_TUNER
+GST_TUNER_CLASS
+GST_TUNER_GET_CLASS
+GST_IS_TUNER
+GST_IS_TUNER_CLASS
+gst_tuner_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttunerchannel</FILE>
+<INCLUDE>gst/interfaces/tuner.h</INCLUDE>
+GstTunerChannel
+GstTunerChannelFlags
+GST_TUNER_CHANNEL_HAS_FLAG
+<SUBSECTION Standard>
+GstTunerChannelClass
+GST_TYPE_TUNER_CHANNEL
+GST_TYPE_TUNER_CHANNEL_FLAGS
+GST_TUNER_CHANNEL
+GST_TUNER_CHANNEL_CLASS
+GST_IS_TUNER_CHANNEL
+GST_IS_TUNER_CHANNEL_CLASS
+gst_tuner_channel_flags_get_type
+gst_tuner_channel_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttunernorm</FILE>
+<INCLUDE>gst/interfaces/tuner.h</INCLUDE>
+GstTunerNorm
+<SUBSECTION Standard>
+GstTunerNormClass
+GST_TYPE_TUNER_NORM
+GST_TUNER_NORM
+GST_TUNER_NORM_CLASS
+GST_IS_TUNER_NORM
+GST_IS_TUNER_NORM_CLASS
+gst_tuner_norm_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstvideoorientation</FILE>
+<INCLUDE>gst/interfaces/videoorientation.h</INCLUDE>
+GstVideoOrientation
+GstVideoOrientationInterface
+gst_video_orientation_get_hcenter
+gst_video_orientation_get_hflip
+gst_video_orientation_get_vcenter
+gst_video_orientation_get_vflip
+gst_video_orientation_set_hcenter
+gst_video_orientation_set_hflip
+gst_video_orientation_set_vcenter
+gst_video_orientation_set_vflip
+<SUBSECTION Standard>
+GST_TYPE_VIDEO_ORIENTATION
+GST_VIDEO_ORIENTATION
+GST_IS_VIDEO_ORIENTATION
+GST_VIDEO_ORIENTATION_GET_IFACE
+gst_video_orientation_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstvideooverlay</FILE>
+<INCLUDE>gst/interfaces/videooverlay.h</INCLUDE>
+GstXOverlay
+GstXOverlayIface
+gst_video_overlay_got_window_handle
+gst_video_overlay_set_window_handle
+gst_video_overlay_prepare_window_handle
+gst_video_overlay_expose
+gst_video_overlay_handle_events
+gst_video_overlay_set_render_rectangle
+<SUBSECTION Standard>
+GST_TYPE_VIDEO_OVERLAY
+GST_VIDEO_OVERLAY
+GST_IS_VIDEO_OVERLAY
+GST_VIDEO_OVERLAY_GET_IFACE
+gst_video_overlay_get_type
+</SECTION>
+
+
+# netbuffer
+
+<SECTION>
+<FILE>gstnetbuffer</FILE>
+<INCLUDE>gst/netbuffer/gstnetbuffer.h</INCLUDE>
+GstNetBuffer
+GstNetType
+GST_NETADDRESS_MAX_LEN
+GstNetAddress
+
+gst_netbuffer_new
+gst_netaddress_get_net_type
+
+gst_netaddress_set_ip4_address
+gst_netaddress_get_ip4_address
+
+gst_netaddress_set_ip6_address
+gst_netaddress_get_ip6_address
+
+gst_netaddress_get_address_bytes
+gst_netaddress_set_address_bytes
+
+gst_netaddress_equal
+
+gst_netaddress_to_string
+<SUBSECTION Standard>
+GstNetBufferClass
+GST_TYPE_NETBUFFER
+GST_NETBUFFER
+GST_NETBUFFER_CLASS
+GST_NETBUFFER_GET_CLASS
+GST_IS_NETBUFFER
+GST_IS_NETBUFFER_CLASS
+gst_netbuffer_get_type
+</SECTION>
+
+
+# riff
+
+<SECTION>
+<FILE>gstriff</FILE>
+<INCLUDE>gst/riff/riff-media.h</INCLUDE>
+gst_riff_create_audio_caps
+gst_riff_create_audio_template_caps
+gst_riff_create_iavs_caps
+gst_riff_create_iavs_template_caps
+gst_riff_create_video_caps
+gst_riff_create_video_template_caps
+gst_riff_init
+gst_riff_parse_chunk
+gst_riff_parse_file_header
+gst_riff_parse_info
+gst_riff_parse_strf_auds
+gst_riff_parse_strf_iavs
+gst_riff_parse_strf_vids
+gst_riff_parse_strh
+gst_riff_read_chunk
+<SUBSECTION Standard>
+GST_RIFF_00
+GST_RIFF_0021
+GST_RIFF_0031
+GST_RIFF_0032
+GST_RIFF_00AM
+GST_RIFF_00__
+GST_RIFF_00db
+GST_RIFF_00dc
+GST_RIFF_00dx
+GST_RIFF_00id
+GST_RIFF_00iv
+GST_RIFF_00pc
+GST_RIFF_00rt
+GST_RIFF_00vc
+GST_RIFF_00xm
+GST_RIFF_00xx
+GST_RIFF_01
+GST_RIFF_01dc
+GST_RIFF_01pc
+GST_RIFF_01wb
+GST_RIFF_02
+GST_RIFF_03
+GST_RIFF_04
+GST_RIFF_05
+GST_RIFF_06
+GST_RIFF_07
+GST_RIFF_AURA
+GST_RIFF_BW10
+GST_RIFF_CCC
+GST_RIFF_CRAM
+GST_RIFF_CVID
+GST_RIFF_CYUV
+GST_RIFF_DIB
+GST_RIFF_DISP
+GST_RIFF_DIV3
+GST_RIFF_DMB1
+GST_RIFF_FCCH_MSVC
+GST_RIFF_FCCH_RLE
+GST_RIFF_FCCH_msvc
+GST_RIFF_FCC_auds
+GST_RIFF_FCC_iavs
+GST_RIFF_FCC_pads
+GST_RIFF_FCC_txts
+GST_RIFF_FCC_vidc
+GST_RIFF_FCC_vids
+GST_RIFF_FF00
+GST_RIFF_H263
+GST_RIFF_I420
+GST_RIFF_IDIT
+GST_RIFF_IJPG
+GST_RIFF_INFO_IARL
+GST_RIFF_INFO_IART
+GST_RIFF_INFO_ICMS
+GST_RIFF_INFO_ICMT
+GST_RIFF_INFO_ICOP
+GST_RIFF_INFO_ICRD
+GST_RIFF_INFO_ICRP
+GST_RIFF_INFO_IDIM
+GST_RIFF_INFO_IDPI
+GST_RIFF_INFO_IENG
+GST_RIFF_INFO_IGNR
+GST_RIFF_INFO_IKEY
+GST_RIFF_INFO_ILGT
+GST_RIFF_INFO_IMED
+GST_RIFF_INFO_INAM
+GST_RIFF_INFO_IPLT
+GST_RIFF_INFO_IPRD
+GST_RIFF_INFO_ISBJ
+GST_RIFF_INFO_ISFT
+GST_RIFF_INFO_ISHP
+GST_RIFF_INFO_ISRC
+GST_RIFF_INFO_ISRF
+GST_RIFF_INFO_ITCH
+GST_RIFF_ISBJ
+GST_RIFF_ISFT
+GST_RIFF_IV31
+GST_RIFF_IV32
+GST_RIFF_IV41
+GST_RIFF_IV50
+GST_RIFF_IYUV
+GST_RIFF_JPEG
+GST_RIFF_L263
+GST_RIFF_LIST_AVIX
+GST_RIFF_LIST_INFO
+GST_RIFF_LIST_adtl
+GST_RIFF_LIST_hdrl
+GST_RIFF_LIST_movi
+GST_RIFF_LIST_odml
+GST_RIFF_LIST_strl
+GST_RIFF_M263
+GST_RIFF_MJPG
+GST_RIFF_MPIX
+GST_RIFF_MVI1
+GST_RIFF_NONE
+GST_RIFF_PACK
+GST_RIFF_Q1_0
+GST_RIFF_RAW
+GST_RIFF_RGB
+GST_RIFF_RIFF_AVI
+GST_RIFF_RIFF_CDXA
+GST_RIFF_RIFF_WAVE
+GST_RIFF_RLE4
+GST_RIFF_RLE8
+GST_RIFF_RT21
+GST_RIFF_SFMC
+GST_RIFF_TAG_acid
+GST_RIFF_TAG_AVF0
+GST_RIFF_TAG_BEXT
+GST_RIFF_TAG_JUNK
+GST_RIFF_TAG_JUNQ
+GST_RIFF_TAG_LIST
+GST_RIFF_TAG_RIFF
+GST_RIFF_TAG_RIFX
+GST_RIFF_TAG_avih
+GST_RIFF_TAG_bext
+GST_RIFF_TAG_cue
+GST_RIFF_TAG_data
+GST_RIFF_TAG_dmlh
+GST_RIFF_TAG_fact
+GST_RIFF_TAG_fmt
+GST_RIFF_TAG_idx1
+GST_RIFF_TAG_plst
+GST_RIFF_TAG_strd
+GST_RIFF_TAG_strf
+GST_RIFF_TAG_strh
+GST_RIFF_TAG_strn
+GST_RIFF_TAG_vedt
+GST_RIFF_TRAN
+GST_RIFF_ULTI
+GST_RIFF_V422
+GST_RIFF_VDOW
+GST_RIFF_VIXL
+GST_RIFF_VSSH
+GST_RIFF_VYUY
+GST_RIFF_WHAM
+GST_RIFF_WINX
+GST_RIFF_WPY2
+GST_RIFF_XMPG
+GST_RIFF_Y41P
+GST_RIFF_YUV8
+GST_RIFF_YUV9
+GST_RIFF_YUY2
+GST_RIFF_YV12
+GST_RIFF_YVU9
+GST_RIFF_azpr
+GST_RIFF_bw10
+GST_RIFF_ccc
+GST_RIFF_cram
+GST_RIFF_cvid
+GST_RIFF_cyuv
+GST_RIFF_dmb1
+GST_RIFF_h263
+GST_RIFF_i263
+GST_RIFF_i420
+GST_RIFF_iv31
+GST_RIFF_iv32
+GST_RIFF_iv41
+GST_RIFF_iv50
+GST_RIFF_iyuv
+GST_RIFF_jpeg
+GST_RIFF_m263
+GST_RIFF_mJPG
+GST_RIFF_mvi1
+GST_RIFF_none
+GST_RIFF_pack
+GST_RIFF_rec
+GST_RIFF_rgb
+GST_RIFF_rle4
+GST_RIFF_rle8
+GST_RIFF_rpza
+GST_RIFF_rt21
+GST_RIFF_tran
+GST_RIFF_ulti
+GST_RIFF_v422
+GST_RIFF_vixl
+GST_RIFF_vyuy
+GST_RIFF_wham
+GST_RIFF_x263
+GST_RIFF_xmpg
+GST_RIFF_y41p
+GST_RIFF_yuy2
+GST_RIFF_yv12
+
+gst_riff_acid
+gst_riff_dmlh
+gst_riff_index_entry
+gst_riff_strf_auds
+gst_riff_strf_iavs
+gst_riff_strf_vids
+gst_riff_strh
+</SECTION>
+
+
+# rtp
+
+<SECTION>
+<FILE>gstbasertpaudiopayload</FILE>
+<INCLUDE>gst/rtp/gstbasertpaudiopayload.h</INCLUDE>
+GstBaseRTPAudioPayload
+GstBaseRTPAudioPayloadClass
+
+gst_base_rtp_audio_payload_set_frame_based
+gst_base_rtp_audio_payload_set_frame_options
+gst_base_rtp_audio_payload_set_sample_based
+gst_base_rtp_audio_payload_set_sample_options
+gst_base_rtp_audio_payload_get_adapter
+gst_base_rtp_audio_payload_push
+gst_base_rtp_audio_payload_flush
+gst_base_rtp_audio_payload_set_samplebits_options
+<SUBSECTION Standard>
+GST_TYPE_BASE_RTP_AUDIO_PAYLOAD
+GST_BASE_RTP_AUDIO_PAYLOAD
+GST_BASE_RTP_AUDIO_PAYLOAD_CLASS
+GST_IS_BASE_RTP_AUDIO_PAYLOAD
+GST_IS_BASE_RTP_AUDIO_PAYLOAD_CLASS
+GST_BASE_RTP_AUDIO_PAYLOAD_CAST
+gst_base_rtp_audio_payload_get_type
+GstBaseRTPAudioPayloadPrivate
+</SECTION>
+
+<SECTION>
+<FILE>gstbasertpdepayload</FILE>
+<INCLUDE>gst/rtp/gstbasertpdepayload.h</INCLUDE>
+GstBaseRTPDepayload
+GstBaseRTPDepayloadClass
+
+GST_BASE_RTP_DEPAYLOAD_SINKPAD
+GST_BASE_RTP_DEPAYLOAD_SRCPAD
+
+gst_base_rtp_depayload_push
+gst_base_rtp_depayload_push_ts
+gst_base_rtp_depayload_push_list
+
+<SUBSECTION Standard>
+GstBaseRTPDepayloadPrivate
+GST_TYPE_BASE_RTP_DEPAYLOAD
+GST_BASE_RTP_DEPAYLOAD
+GST_BASE_RTP_DEPAYLOAD_CLASS
+GST_BASE_RTP_DEPAYLOAD_GET_CLASS
+GST_IS_BASE_RTP_DEPAYLOAD
+GST_IS_BASE_RTP_DEPAYLOAD_CLASS
+GST_BASE_RTP_PAYLOAD_CAST
+gst_base_rtp_depayload_get_type
+GstBaseRTPPayloadPrivate
+
+<SUBSECTION Private>
+QUEUE_LOCK_INIT
+QUEUE_LOCK_FREE
+QUEUE_LOCK
+QUEUE_UNLOCK
+</SECTION>
+
+<SECTION>
+<FILE>gstbasertppayload</FILE>
+<INCLUDE>gst/rtp/gstbasertppayload.h</INCLUDE>
+GstBaseRTPPayload
+GstBaseRTPPayloadClass
+
+GST_BASE_RTP_PAYLOAD_MTU
+GST_BASE_RTP_PAYLOAD_PT
+GST_BASE_RTP_PAYLOAD_SINKPAD
+GST_BASE_RTP_PAYLOAD_SRCPAD
+
+gst_basertppayload_is_filled
+gst_basertppayload_push
+gst_basertppayload_push_list
+gst_basertppayload_set_options
+gst_basertppayload_set_outcaps
+<SUBSECTION Standard>
+GST_TYPE_BASE_RTP_PAYLOAD
+GST_BASE_RTP_PAYLOAD
+GST_BASE_RTP_PAYLOAD_CLASS
+GST_BASE_RTP_PAYLOAD_GET_CLASS
+GST_IS_BASE_RTP_PAYLOAD
+GST_IS_BASE_RTP_PAYLOAD_CLASS
+gst_basertppayload_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstrtcpbuffer</FILE>
+<INCLUDE>gst/rtp/gstrtcpbuffer.h</INCLUDE>
+
+GST_RTCP_VERSION
+
+GST_RTCP_MAX_SDES
+GST_RTCP_MAX_BYE_SSRC_COUNT
+GST_RTCP_MAX_RB_COUNT
+GST_RTCP_MAX_SDES_ITEM_COUNT
+GST_RTCP_VALID_MASK
+GST_RTCP_VALID_VALUE
+
+GstRTCPType
+GstRTCPPacket
+GstRTCPSDESType
+GstRTCPFBType
+
+gst_rtcp_buffer_new_take_data
+gst_rtcp_buffer_new_copy_data
+
+gst_rtcp_buffer_validate_data
+gst_rtcp_buffer_validate
+
+gst_rtcp_buffer_new
+gst_rtcp_buffer_end
+
+gst_rtcp_buffer_get_packet_count
+gst_rtcp_buffer_get_first_packet
+gst_rtcp_packet_move_to_next
+gst_rtcp_buffer_add_packet
+gst_rtcp_packet_remove
+
+gst_rtcp_packet_get_padding
+gst_rtcp_packet_get_count
+gst_rtcp_packet_get_type
+gst_rtcp_packet_get_length
+
+gst_rtcp_packet_sr_get_sender_info
+gst_rtcp_packet_sr_set_sender_info
+
+gst_rtcp_packet_rr_get_ssrc
+gst_rtcp_packet_rr_set_ssrc
+
+gst_rtcp_packet_get_rb_count
+gst_rtcp_packet_get_rb
+gst_rtcp_packet_add_rb
+gst_rtcp_packet_set_rb
+
+gst_rtcp_packet_sdes_get_item_count
+gst_rtcp_packet_sdes_first_item
+gst_rtcp_packet_sdes_next_item
+gst_rtcp_packet_sdes_get_ssrc
+gst_rtcp_packet_sdes_first_entry
+gst_rtcp_packet_sdes_next_entry
+gst_rtcp_packet_sdes_get_entry
+gst_rtcp_packet_sdes_copy_entry
+
+gst_rtcp_packet_sdes_add_item
+gst_rtcp_packet_sdes_add_entry
+
+gst_rtcp_packet_bye_get_ssrc_count
+gst_rtcp_packet_bye_get_nth_ssrc
+gst_rtcp_packet_bye_add_ssrc
+gst_rtcp_packet_bye_add_ssrcs
+
+gst_rtcp_packet_bye_get_reason_len
+gst_rtcp_packet_bye_get_reason
+gst_rtcp_packet_bye_set_reason
+
+gst_rtcp_packet_fb_get_type
+gst_rtcp_packet_fb_set_type
+
+gst_rtcp_packet_fb_get_sender_ssrc
+gst_rtcp_packet_fb_set_sender_ssrc
+
+gst_rtcp_packet_fb_get_media_ssrc
+gst_rtcp_packet_fb_set_media_ssrc
+
+gst_rtcp_packet_fb_get_fci_length
+gst_rtcp_packet_fb_set_fci_length
+gst_rtcp_packet_fb_get_fci
+
+gst_rtcp_ntp_to_unix
+gst_rtcp_unix_to_ntp
+
+gst_rtcp_sdes_name_to_type
+gst_rtcp_sdes_type_to_name
+
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>gstrtppayloads</FILE>
+<INCLUDE>gst/rtp/gstrtppayload.h</INCLUDE>
+GstRTPPayload
+GST_RTP_PAYLOAD_IS_DYNAMIC
+
+GstRTPPayloadInfo
+
+gst_rtp_payload_info_for_name
+gst_rtp_payload_info_for_pt
+
+<SUBSECTION Standard>
+GST_RTP_PAYLOAD_DYNAMIC_STRING
+GST_RTP_PAYLOAD_G723_53_STRING
+GST_RTP_PAYLOAD_G723_63_STRING
+GST_RTP_PAYLOAD_G728_STRING
+GST_RTP_PAYLOAD_G729_STRING
+GST_RTP_PAYLOAD_GSM_STRING
+GST_RTP_PAYLOAD_H263_STRING
+GST_RTP_PAYLOAD_L16_MONO_STRING
+GST_RTP_PAYLOAD_L16_STEREO_STRING
+GST_RTP_PAYLOAD_MPA_STRING
+GST_RTP_PAYLOAD_MPV_STRING
+GST_RTP_PAYLOAD_PCMA_STRING
+GST_RTP_PAYLOAD_PCMU_STRING
+GST_RTP_PAYLOAD_TS41_STRING
+GST_RTP_PAYLOAD_TS48_STRING
+GST_RTP_PAYLOAD_1016_STRING
+GST_RTP_PAYLOAD_CELLB_STRING
+GST_RTP_PAYLOAD_CN_STRING
+GST_RTP_PAYLOAD_DVI4_11025_STRING
+GST_RTP_PAYLOAD_DVI4_16000_STRING
+GST_RTP_PAYLOAD_DVI4_22050_STRING
+GST_RTP_PAYLOAD_DVI4_8000_STRING
+GST_RTP_PAYLOAD_G721_STRING
+GST_RTP_PAYLOAD_G722_STRING
+GST_RTP_PAYLOAD_G723_53
+GST_RTP_PAYLOAD_G723_63
+GST_RTP_PAYLOAD_G723_STRING
+GST_RTP_PAYLOAD_H261_STRING
+GST_RTP_PAYLOAD_JPEG_STRING
+GST_RTP_PAYLOAD_LPC_STRING
+GST_RTP_PAYLOAD_MP2T_STRING
+GST_RTP_PAYLOAD_NV_STRING
+GST_RTP_PAYLOAD_QCELP_STRING
+GST_RTP_PAYLOAD_TS41
+GST_RTP_PAYLOAD_TS48
+</SECTION>
+
+<SECTION>
+<FILE>gstrtpbuffer</FILE>
+<INCLUDE>gst/rtp/gstrtpbuffer.h</INCLUDE>
+
+GST_RTP_VERSION
+
+gst_rtp_buffer_allocate_data
+
+gst_rtp_buffer_new_take_data
+gst_rtp_buffer_new_copy_data
+gst_rtp_buffer_new_allocate
+gst_rtp_buffer_new_allocate_len
+gst_rtp_buffer_list_from_buffer
+
+gst_rtp_buffer_calc_header_len
+gst_rtp_buffer_calc_packet_len
+gst_rtp_buffer_calc_payload_len
+
+gst_rtp_buffer_validate
+gst_rtp_buffer_validate_data
+
+gst_rtp_buffer_set_packet_len
+gst_rtp_buffer_get_packet_len
+
+gst_rtp_buffer_get_header_len
+
+gst_rtp_buffer_get_version
+gst_rtp_buffer_set_version
+
+gst_rtp_buffer_get_padding
+gst_rtp_buffer_set_padding
+gst_rtp_buffer_pad_to
+
+gst_rtp_buffer_get_extension
+gst_rtp_buffer_set_extension
+gst_rtp_buffer_get_extension_data
+
+gst_rtp_buffer_get_ssrc
+gst_rtp_buffer_set_ssrc
+
+gst_rtp_buffer_get_csrc_count
+gst_rtp_buffer_get_csrc
+gst_rtp_buffer_set_csrc
+
+gst_rtp_buffer_get_marker
+gst_rtp_buffer_set_marker
+
+gst_rtp_buffer_get_payload_type
+gst_rtp_buffer_set_payload_type
+
+gst_rtp_buffer_get_seq
+gst_rtp_buffer_set_seq
+
+gst_rtp_buffer_get_timestamp
+gst_rtp_buffer_set_timestamp
+
+gst_rtp_buffer_get_payload_buffer
+gst_rtp_buffer_get_payload_subbuffer
+gst_rtp_buffer_get_payload_len
+gst_rtp_buffer_get_payload
+
+gst_rtp_buffer_default_clock_rate
+gst_rtp_buffer_compare_seqnum
+gst_rtp_buffer_ext_timestamp
+gst_rtp_buffer_set_extension_data
+
+gst_rtp_buffer_list_validate
+
+gst_rtp_buffer_list_get_payload_len
+
+gst_rtp_buffer_list_get_payload_type
+gst_rtp_buffer_list_set_payload_type
+
+gst_rtp_buffer_list_get_seq
+gst_rtp_buffer_list_set_seq
+
+gst_rtp_buffer_list_get_ssrc
+gst_rtp_buffer_list_set_ssrc
+
+gst_rtp_buffer_list_get_timestamp
+gst_rtp_buffer_list_set_timestamp
+
+gst_rtp_buffer_get_extension_onebyte_header
+gst_rtp_buffer_get_extension_twobytes_header
+gst_rtp_buffer_add_extension_onebyte_header
+gst_rtp_buffer_add_extension_twobytes_header
+
+gst_rtp_buffer_list_get_extension_onebyte_header
+gst_rtp_buffer_list_get_extension_twobytes_header
+gst_rtp_buffer_list_add_extension_onebyte_header
+gst_rtp_buffer_list_add_extension_twobytes_header
+</SECTION>
+
+# rtsp
+<SECTION>
+<FILE>gstrtspdefs</FILE>
+<INCLUDE>gst/rtsp/gstrtspdefs.h</INCLUDE>
+GST_RTSP_CHECK
+GST_RTSP_AUTH_MAX
+GstRTSPEvent
+GstRTSPResult
+GstRTSPFamily
+GstRTSPState
+GstRTSPVersion
+GstRTSPMethod
+GstRTSPAuthMethod
+GstRTSPHeaderField
+GstRTSPStatusCode
+gst_rtsp_strresult
+gst_rtsp_method_as_text
+gst_rtsp_version_as_text
+gst_rtsp_header_as_text
+gst_rtsp_header_allow_multiple
+gst_rtsp_status_as_text
+gst_rtsp_options_as_text
+gst_rtsp_find_header_field
+gst_rtsp_find_method
+<SUBSECTION Standard>
+GST_TYPE_RTSP_AUTH_METHOD
+GST_TYPE_RTSP_EVENT
+GST_TYPE_RTSP_FAMILY
+GST_TYPE_RTSP_HEADER_FIELD
+GST_TYPE_RTSP_LOWER_TRANS
+GST_TYPE_RTSP_METHOD
+GST_TYPE_RTSP_RESULT
+GST_TYPE_RTSP_STATE
+GST_TYPE_RTSP_STATUS_CODE
+GST_TYPE_RTSP_URL
+GST_TYPE_RTSP_VERSION
+gst_rtsp_event_get_type
+gst_rtsp_auth_method_get_type
+gst_rtsp_family_get_type
+gst_rtsp_method_get_type
+gst_rtsp_result_get_type
+gst_rtsp_state_get_type
+gst_rtsp_status_code_get_type
+gst_rtsp_version_get_type
+gst_rtsp_header_field_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstrtsptransport</FILE>
+<INCLUDE>gst/rtsp/gstrtsptransport.h</INCLUDE>
+GstRTSPTransMode
+GstRTSPProfile
+GstRTSPRange
+GstRTSPLowerTrans
+GstRTSPTransport
+gst_rtsp_transport_new
+gst_rtsp_transport_init
+gst_rtsp_transport_parse
+gst_rtsp_transport_as_text
+gst_rtsp_transport_get_mime
+gst_rtsp_transport_get_manager
+gst_rtsp_transport_free
+<SUBSECTION Standard>
+gst_rtsp_lower_trans_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstrtspbase64</FILE>
+<INCLUDE>gst/rtsp/gstrtspbase64.h</INCLUDE>
+gst_rtsp_base64_encode
+gst_rtsp_base64_decode_ip
+</SECTION>
+
+<SECTION>
+<FILE>gstrtspconnection</FILE>
+<INCLUDE>gst/rtsp/gstrtspconnection.h</INCLUDE>
+GstRTSPConnection
+gst_rtsp_connection_create
+gst_rtsp_connection_create_from_fd
+gst_rtsp_connection_accept
+gst_rtsp_connection_connect
+gst_rtsp_connection_close
+gst_rtsp_connection_free
+
+gst_rtsp_connection_read
+gst_rtsp_connection_write
+gst_rtsp_connection_poll
+
+gst_rtsp_connection_send
+gst_rtsp_connection_receive
+
+gst_rtsp_connection_next_timeout
+gst_rtsp_connection_reset_timeout
+
+gst_rtsp_connection_flush
+
+gst_rtsp_connection_set_auth
+gst_rtsp_connection_set_auth_param
+gst_rtsp_connection_clear_auth_params
+
+gst_rtsp_connection_set_qos_dscp
+
+gst_rtsp_connection_set_ip
+gst_rtsp_connection_get_ip
+
+gst_rtsp_connection_get_url
+
+gst_rtsp_connection_set_tunneled
+gst_rtsp_connection_is_tunneled
+
+gst_rtsp_connection_get_tunnelid
+gst_rtsp_connection_do_tunnel
+
+gst_rtsp_connection_get_readfd
+gst_rtsp_connection_get_writefd
+gst_rtsp_connection_set_http_mode
+gst_rtsp_connection_set_proxy
+
+GstRTSPWatch
+GstRTSPWatchFuncs
+gst_rtsp_watch_new
+gst_rtsp_watch_unref
+gst_rtsp_watch_attach
+gst_rtsp_watch_reset
+gst_rtsp_watch_queue_message
+gst_rtsp_watch_queue_data
+gst_rtsp_watch_send_message
+gst_rtsp_watch_write_data
+</SECTION>
+
+<SECTION>
+<FILE>gstrtspextension</FILE>
+<INCLUDE>gst/rtsp/gstrtspextension.h</INCLUDE>
+GstRTSPExtension
+GstRTSPExtensionInterface
+<SUBSECTION Standard>
+GST_IS_RTSP_EXTENSION
+GST_RTSP_EXTENSION
+GST_RTSP_EXTENSION_GET_IFACE
+GST_TYPE_RTSP_EXTENSION
+gst_rtsp_extension_after_send
+gst_rtsp_extension_before_send
+gst_rtsp_extension_configure_stream
+gst_rtsp_extension_detect_server
+gst_rtsp_extension_get_transports
+gst_rtsp_extension_parse_sdp
+gst_rtsp_extension_receive_request
+gst_rtsp_extension_send
+gst_rtsp_extension_setup_media
+gst_rtsp_extension_stream_select
+gst_rtsp_extension_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstrtspmessage</FILE>
+<INCLUDE>gst/rtsp/gstrtspmessage.h</INCLUDE>
+GstRTSPMsgType
+GstRTSPMessage
+gst_rtsp_message_new
+gst_rtsp_message_init
+gst_rtsp_message_unset
+gst_rtsp_message_free
+gst_rtsp_message_get_type
+gst_rtsp_message_new_request
+gst_rtsp_message_init_request
+gst_rtsp_message_parse_request
+gst_rtsp_message_new_response
+gst_rtsp_message_init_response
+gst_rtsp_message_parse_response
+gst_rtsp_message_new_data
+gst_rtsp_message_init_data
+gst_rtsp_message_parse_data
+gst_rtsp_message_add_header
+gst_rtsp_message_take_header
+gst_rtsp_message_remove_header
+gst_rtsp_message_get_header
+gst_rtsp_message_append_headers
+gst_rtsp_message_set_body
+gst_rtsp_message_take_body
+gst_rtsp_message_get_body
+gst_rtsp_message_steal_body
+gst_rtsp_message_dump
+</SECTION>
+
+<SECTION>
+<FILE>gstrtspurl</FILE>
+<INCLUDE>gst/rtsp/gstrtspurl.h</INCLUDE>
+GST_RTSP_DEFAULT_PORT
+GstRTSPUrl
+gst_rtsp_url_parse
+gst_rtsp_url_copy
+gst_rtsp_url_free
+gst_rtsp_url_get_request_uri
+gst_rtsp_url_set_port
+gst_rtsp_url_get_port
+gst_rtsp_url_decode_path_components
+<SUBSECTION Standard>
+gst_rtsp_url_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstrtsprange</FILE>
+<INCLUDE>gst/rtsp/gstrtsrange.h</INCLUDE>
+GstRTSPRangeUnit
+GstRTSPTimeRange
+GstRTSPTime
+GstRTSPTimeType
+gst_rtsp_range_parse
+gst_rtsp_range_to_string
+gst_rtsp_range_free
+</SECTION>
+
+# sdp
+<SECTION>
+<FILE>gstsdpmessage</FILE>
+<INCLUDE>gst/sdp/gstsdpmessage.h</INCLUDE>
+GstSDPResult
+GstSDPOrigin
+GstSDPConnection
+GST_SDP_BWTYPE_CT
+GST_SDP_BWTYPE_AS
+GST_SDP_BWTYPE_EXT_PREFIX
+GST_SDP_BWTYPE_RR
+GST_SDP_BWTYPE_RS
+GST_SDP_BWTYPE_TIAS
+GstSDPBandwidth
+GstSDPTime
+GstSDPZone
+GstSDPKey
+GstSDPAttribute
+GstSDPMedia
+GstSDPMessage
+gst_sdp_message_new
+gst_sdp_message_init
+gst_sdp_message_uninit
+gst_sdp_message_free
+
+gst_sdp_message_parse_buffer
+gst_sdp_message_as_text
+
+gst_sdp_message_parse_uri
+gst_sdp_message_as_uri
+
+gst_sdp_address_is_multicast
+
+gst_sdp_message_get_version
+gst_sdp_message_set_version
+gst_sdp_message_get_origin
+gst_sdp_message_set_origin
+gst_sdp_message_get_session_name
+gst_sdp_message_set_session_name
+gst_sdp_message_get_information
+gst_sdp_message_set_information
+gst_sdp_message_get_uri
+gst_sdp_message_set_uri
+gst_sdp_message_emails_len
+gst_sdp_message_get_email
+gst_sdp_message_add_email
+gst_sdp_message_phones_len
+gst_sdp_message_get_phone
+gst_sdp_message_add_phone
+gst_sdp_message_get_connection
+gst_sdp_message_set_connection
+gst_sdp_message_bandwidths_len
+gst_sdp_message_get_bandwidth
+gst_sdp_message_add_bandwidth
+gst_sdp_message_times_len
+gst_sdp_message_get_time
+gst_sdp_message_add_time
+gst_sdp_message_zones_len
+gst_sdp_message_get_zone
+gst_sdp_message_add_zone
+gst_sdp_message_get_key
+gst_sdp_message_set_key
+gst_sdp_message_attributes_len
+gst_sdp_message_get_attribute
+gst_sdp_message_get_attribute_val
+gst_sdp_message_get_attribute_val_n
+gst_sdp_message_add_attribute
+gst_sdp_message_medias_len
+gst_sdp_message_get_media
+gst_sdp_message_add_media
+gst_sdp_message_dump
+
+gst_sdp_media_new
+gst_sdp_media_init
+gst_sdp_media_uninit
+gst_sdp_media_free
+gst_sdp_media_get_media
+gst_sdp_media_set_media
+gst_sdp_media_get_port
+gst_sdp_media_get_num_ports
+gst_sdp_media_set_port_info
+gst_sdp_media_get_proto
+gst_sdp_media_set_proto
+gst_sdp_media_formats_len
+gst_sdp_media_get_format
+gst_sdp_media_add_format
+gst_sdp_media_get_information
+gst_sdp_media_set_information
+gst_sdp_media_connections_len
+gst_sdp_media_get_connection
+gst_sdp_media_add_connection
+gst_sdp_media_bandwidths_len
+gst_sdp_media_get_bandwidth
+gst_sdp_media_add_bandwidth
+gst_sdp_media_get_key
+gst_sdp_media_set_key
+gst_sdp_media_attributes_len
+gst_sdp_media_get_attribute
+gst_sdp_media_get_attribute_val
+gst_sdp_media_get_attribute_val_n
+gst_sdp_media_add_attribute
+gst_sdp_media_as_text
+</SECTION>
+
+# tag
+
+<SECTION>
+<FILE>gsttag</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+GST_TAG_MUSICBRAINZ_TRACKID
+GST_TAG_MUSICBRAINZ_ARTISTID
+GST_TAG_MUSICBRAINZ_ALBUMID
+GST_TAG_MUSICBRAINZ_ALBUMARTISTID
+GST_TAG_MUSICBRAINZ_TRMID
+GST_TAG_MUSICBRAINZ_SORTNAME
+GST_TAG_CDDA_CDDB_DISCID
+GST_TAG_CDDA_CDDB_DISCID_FULL
+GST_TAG_CDDA_MUSICBRAINZ_DISCID
+GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL
+GST_TAG_CDDA_TRACK_TAGS
+GST_TAG_CMML_CLIP
+GST_TAG_CMML_HEAD
+GST_TAG_CMML_STREAM
+GST_TAG_CAPTURING_SHUTTER_SPEED
+GST_TAG_CAPTURING_FOCAL_RATIO
+GST_TAG_CAPTURING_FOCAL_LENGTH
+GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO
+GST_TAG_CAPTURING_ISO_SPEED
+GST_TAG_CAPTURING_EXPOSURE_PROGRAM
+GST_TAG_CAPTURING_EXPOSURE_MODE
+GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE
+GST_TAG_CAPTURING_GAIN_ADJUSTMENT
+GST_TAG_CAPTURING_WHITE_BALANCE
+GST_TAG_CAPTURING_CONTRAST
+GST_TAG_CAPTURING_SATURATION
+GST_TAG_CAPTURING_SHARPNESS
+GST_TAG_CAPTURING_FLASH_FIRED
+GST_TAG_CAPTURING_FLASH_MODE
+GST_TAG_CAPTURING_METERING_MODE
+GST_TAG_CAPTURING_SOURCE
+GST_TAG_CAPTURING_EXPOSURE_COMPENSATION
+GST_TAG_IMAGE_HORIZONTAL_PPI
+GST_TAG_IMAGE_VERTICAL_PPI
+GST_TAG_ID3V2_HEADER_SIZE
+gst_tag_register_musicbrainz_tags
+gst_tag_freeform_string_to_utf8
+gst_tag_parse_extended_comment
+gst_tag_image_data_to_image_buffer
+GstTagImageType
+<SUBSECTION Standard>
+GST_TYPE_TAG_IMAGE_TYPE
+gst_tag_image_type_get_type
+<SUBSECTION Private>
+GstTagEntryMatch
+</SECTION>
+
+<SECTION>
+<FILE>gsttagvorbis</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+<SUBSECTION>
+gst_tag_from_vorbis_tag
+gst_tag_to_vorbis_tag
+gst_vorbis_tag_add
+gst_tag_to_vorbis_comments
+<SUBSECTION>
+gst_tag_list_from_vorbiscomment_buffer
+gst_tag_list_to_vorbiscomment_buffer
+<SUBSECTION Standard>
+gst_vorbis_tag_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttagid3</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+<SUBSECTION>
+gst_tag_id3_genre_count
+gst_tag_id3_genre_get
+gst_tag_list_new_from_id3v1
+gst_tag_from_id3_tag
+gst_tag_from_id3_user_tag
+gst_tag_to_id3_tag
+gst_tag_list_add_id3_image
+gst_tag_get_id3v2_tag_size
+gst_tag_list_from_id3v2_tag
+</SECTION>
+
+<SECTION>
+<FILE>gsttagxmp</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+gst_tag_list_from_xmp_buffer
+gst_tag_list_to_xmp_buffer
+gst_tag_list_to_xmp_buffer_full
+gst_tag_xmp_list_schemas
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>gsttagexif</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+gst_tag_list_to_exif_buffer
+gst_tag_list_to_exif_buffer_with_tiff_header
+gst_tag_list_from_exif_buffer
+gst_tag_list_from_exif_buffer_with_tiff_header
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>gsttagdemux</FILE>
+<INCLUDE>gst/tag/gsttagdemux.h</INCLUDE>
+GstTagDemux
+GstTagDemuxClass
+GstTagDemuxResult
+<SUBSECTION Standard>
+GstTagDemuxPrivate
+GST_IS_TAG_DEMUX
+GST_IS_TAG_DEMUX_CLASS
+GST_TAG_DEMUX
+GST_TAG_DEMUX_CLASS
+GST_TYPE_TAG_DEMUX
+GST_TYPE_TAG_DEMUX_RESULT
+gst_tag_demux_get_type
+gst_tag_demux_result_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttagmux</FILE>
+<INCLUDE>gst/tag/gsttagmux.h</INCLUDE>
+GstTagMux
+GstTagMuxClass
+<SUBSECTION Standard>
+GstTagMuxPrivate
+GST_IS_TAG_MUX
+GST_IS_TAG_MUX_CLASS
+GST_TAG_MUX
+GST_TAG_MUX_CLASS
+GST_TYPE_TAG_MUX
+gst_tag_mux_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttaglanguagecodes</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+gst_tag_get_language_codes
+gst_tag_get_language_name
+gst_tag_get_language_code
+gst_tag_get_language_code_iso_639_1
+gst_tag_get_language_code_iso_639_2B
+gst_tag_get_language_code_iso_639_2T
+</SECTION>
+
+<SECTION>
+<FILE>gsttaglicenses</FILE>
+<INCLUDE>gst/tag/tag.h</INCLUDE>
+GstTagLicenseFlags
+gst_tag_get_license_flags
+gst_tag_get_license_nick
+gst_tag_get_license_title
+gst_tag_get_license_description
+gst_tag_get_license_jurisdiction
+gst_tag_get_license_version
+gst_tag_get_licenses
+<SUBSECTION Standard>
+gst_tag_license_flags_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gsttagxmpwriter</FILE>
+gst_tag_xmp_writer_add_all_schemas
+gst_tag_xmp_writer_add_schema
+gst_tag_xmp_writer_has_schema
+gst_tag_xmp_writer_remove_schema
+gst_tag_xmp_writer_remove_all_schemas
+gst_tag_xmp_writer_tag_list_to_xmp_buffer
+<SUBSECTION Standard>
+GstTagXmpWriter
+GstTagXmpWriterInterface
+GST_TYPE_TAG_XMP_WRITER
+GST_TAG_XMP_WRITER
+GST_TAG_XMP_WRITER_INTERFACE
+GST_IS_TAG_XMP_WRITER
+GST_IS_TAG_XMP_WRITER_INTERFACE
+GST_TAG_XMP_WRITER_GET_INTERFACE
+gst_tag_xmp_writer_get_type
+</SECTION>
+
+# base utils
+
+<SECTION>
+<FILE>gstpbutils</FILE>
+<INCLUDE>gst/pbutils/pbutils.h</INCLUDE>
+<SUBSECTION>
+gst_pb_utils_init
+</SECTION>
+
+<SECTION>
+<FILE>gstpluginsbaseversion</FILE>
+<INCLUDE>gst/pbutils/gstpluginsbaseversion.h</INCLUDE>
+<SUBSECTION>
+GST_PLUGINS_BASE_VERSION_MAJOR
+GST_PLUGINS_BASE_VERSION_MINOR
+GST_PLUGINS_BASE_VERSION_MICRO
+GST_PLUGINS_BASE_VERSION_NANO
+GST_CHECK_PLUGINS_BASE_VERSION
+gst_plugins_base_version
+gst_plugins_base_version_string
+</SECTION>
+
+<SECTION>
+<FILE>gstpbutilsmissingplugins</FILE>
+<INCLUDE>gst/pbutils/missing-plugins.h</INCLUDE>
+<SUBSECTION>
+gst_missing_plugin_message_get_installer_detail
+gst_missing_plugin_message_get_description
+gst_is_missing_plugin_message
+<SUBSECTION>
+gst_missing_decoder_message_new
+gst_missing_encoder_message_new
+gst_missing_uri_source_message_new
+gst_missing_uri_sink_message_new
+gst_missing_element_message_new
+<SUBSECTION>
+gst_missing_uri_source_installer_detail_new
+gst_missing_uri_sink_installer_detail_new
+gst_missing_element_installer_detail_new
+gst_missing_decoder_installer_detail_new
+gst_missing_encoder_installer_detail_new
+</SECTION>
+
+<SECTION>
+<FILE>gstpbutilsinstallplugins</FILE>
+<INCLUDE>gst/pbutils/install-plugins.h</INCLUDE>
+<SUBSECTION>
+GstInstallPluginsReturn
+GstInstallPluginsResultFunc
+gst_install_plugins_async
+gst_install_plugins_sync
+gst_install_plugins_return_get_name
+gst_install_plugins_installation_in_progress
+gst_install_plugins_supported
+<SUBSECTION>
+GstInstallPluginsContext
+gst_install_plugins_context_new
+gst_install_plugins_context_free
+gst_install_plugins_context_set_xid
+<SUBSECTION Standard>
+GST_TYPE_INSTALL_PLUGINS_CONTEXT
+GST_TYPE_INSTALL_PLUGINS_RETURN
+gst_install_plugins_context_get_type
+gst_install_plugins_return_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstpbutilsdescriptions</FILE>
+<INCLUDE>gst/pbutils/descriptions.h</INCLUDE>
+<SUBSECTION>
+gst_pb_utils_get_source_description
+gst_pb_utils_get_sink_description
+gst_pb_utils_get_decoder_description
+gst_pb_utils_get_encoder_description
+gst_pb_utils_get_element_description
+<SUBSECTION>
+gst_pb_utils_add_codec_description_to_tag_list
+gst_pb_utils_get_codec_description
+</SECTION>
+
+<SECTION>
+<FILE>gstpbutilscodecutils</FILE>
+<INCLUDE>gst/pbutils/codec-utils.h</INCLUDE>
+<SUBSECTION>
+gst_codec_utils_aac_get_sample_rate_from_index
+gst_codec_utils_aac_get_profile
+gst_codec_utils_aac_get_level
+gst_codec_utils_aac_caps_set_level_and_profile
+<SUBSECTION>
+gst_codec_utils_h264_get_profile
+gst_codec_utils_h264_get_level
+gst_codec_utils_h264_caps_set_level_and_profile
+gst_codec_utils_h264_get_level_idc
+<SUBSECTION>
+gst_codec_utils_mpeg4video_get_profile
+gst_codec_utils_mpeg4video_get_level
+gst_codec_utils_mpeg4video_caps_set_level_and_profile
+</SECTION>
+
+<SECTION>
+<FILE>encoding-profile</FILE>
+<INCLUDE>gst/pbutils/encoding-profile.h</INCLUDE>
+GstEncodingProfile
+gst_encoding_profile_unref
+gst_encoding_profile_ref
+gst_encoding_profile_find
+gst_encoding_profile_get_name
+gst_encoding_profile_get_description
+gst_encoding_profile_get_format
+gst_encoding_profile_get_preset
+gst_encoding_profile_get_presence
+gst_encoding_profile_get_restriction
+gst_encoding_profile_set_name
+gst_encoding_profile_set_description
+gst_encoding_profile_set_format
+gst_encoding_profile_set_preset
+gst_encoding_profile_set_restriction
+gst_encoding_profile_set_presence
+gst_encoding_profile_is_equal
+gst_encoding_profile_get_input_caps
+gst_encoding_profile_get_type_nick
+<SUBSECTION container>
+GstEncodingContainerProfile
+gst_encoding_container_profile_new
+gst_encoding_container_profile_add_profile
+gst_encoding_container_profile_contains_profile
+gst_encoding_container_profile_get_profiles
+<SUBSECTION audio>
+GstEncodingAudioProfile
+gst_encoding_audio_profile_new
+<SUBSECTION video>
+GstEncodingVideoProfile
+gst_encoding_video_profile_new
+gst_encoding_video_profile_get_pass
+gst_encoding_video_profile_get_variableframerate
+gst_encoding_video_profile_set_pass
+gst_encoding_video_profile_set_variableframerate
+<SUBSECTION targets>
+GST_ENCODING_CATEGORY_DEVICE
+GST_ENCODING_CATEGORY_ONLINE_SERVICE
+GST_ENCODING_CATEGORY_STORAGE_EDITING
+GST_ENCODING_CATEGORY_CAPTURE
+GstEncodingTarget
+gst_encoding_target_unref
+gst_encoding_target_ref
+gst_encoding_target_new
+gst_encoding_target_get_name
+gst_encoding_target_get_category
+gst_encoding_target_get_description
+gst_encoding_target_get_profiles
+gst_encoding_target_get_profile
+gst_encoding_target_add_profile
+gst_encoding_target_save
+gst_encoding_target_save_to_file
+gst_encoding_target_load
+gst_encoding_target_load_from_file
+gst_encoding_list_all_targets
+gst_encoding_list_available_categories
+<SUBSECTION Standard>
+GST_ENCODING_PROFILE
+GST_IS_ENCODING_PROFILE
+GST_TYPE_ENCODING_PROFILE
+gst_encoding_profile_get_type
+GST_ENCODING_TARGET
+GST_IS_ENCODING_TARGET
+GST_TYPE_ENCODING_TARGET
+gst_encoding_target_get_type
+GstEncodingProfileClass
+GST_TYPE_ENCODING_CONTAINER_PROFILE
+GST_ENCODING_CONTAINER_PROFILE
+gst_encoding_container_profile_get_type
+GST_TYPE_ENCODING_VIDEO_PROFILE
+GST_ENCODING_VIDEO_PROFILE
+GST_IS_ENCODING_VIDEO_PROFILE
+GstEncodingVideoProfileClass
+gst_encoding_video_profile_get_type
+GST_TYPE_ENCODING_AUDIO_PROFILE
+GST_ENCODING_AUDIO_PROFILE
+GST_IS_ENCODING_AUDIO_PROFILE
+GstEncodingAudioProfileClass
+gst_encoding_audio_profile_get_type
+GST_IS_ENCODING_CONTAINER_PROFILE
+GstEncodingContainerProfileClass
+GstEncodingTargetClass
+</SECTION>
+
+
+
+# video
+
+<SECTION>
+<FILE>gstvideo</FILE>
+<INCLUDE>gst/video/video.h</INCLUDE>
+GST_VIDEO_FPS_RANGE
+GST_VIDEO_SIZE_RANGE
+GstVideoFormat
+gst_video_calculate_display_ratio
+gst_video_format_to_fourcc
+gst_video_format_from_fourcc
+gst_video_parse_caps_palette
+GstVideoConvertFrameCallback
+gst_video_convert_frame
+gst_video_convert_frame_async
+gst_video_event_new_still_frame
+gst_video_event_parse_still_frame
+<SUBSECTION Standard>
+gst_video_format_get_type
+GST_TYPE_VIDEO_FORMAT
+</SECTION>
+
+<SECTION>
+<FILE>gstvideofilter</FILE>
+<INCLUDE>gst/video/gstvideofilter.h</INCLUDE>
+GstVideoFilter
+GstVideoFilterClass
+<SUBSECTION Standard>
+GST_TYPE_VIDEO_FILTER
+GST_VIDEO_FILTER
+GST_VIDEO_FILTER_CLASS
+GST_VIDEO_FILTER_GET_CLASS
+GST_IS_VIDEO_FILTER
+GST_IS_VIDEO_FILTER_CLASS
+gst_video_filter_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstvideosink</FILE>
+<INCLUDE>gst/video/gstvideosink.h</INCLUDE>
+GstVideoSink
+GstVideoSinkClass
+GstVideoRectangle
+GST_VIDEO_SINK_HEIGHT
+GST_VIDEO_SINK_PAD
+GST_VIDEO_SINK_WIDTH
+gst_video_sink_center_rect
+<SUBSECTION Standard>
+GstVideoSinkPrivate
+GST_TYPE_VIDEO_SINK
+GST_VIDEO_SINK
+GST_VIDEO_SINK_CAST
+GST_VIDEO_SINK_CLASS
+GST_VIDEO_SINK_GET_CLASS
+GST_IS_VIDEO_SINK
+GST_IS_VIDEO_SINK_CLASS
+gst_video_sink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstdiscoverer</FILE>
+<INCLUDE>gst/pbutils/pbutils.h</INCLUDE>
+<SUBSECTION>
+GstDiscoverer
+gst_discoverer_new
+gst_discoverer_start
+gst_discoverer_stop
+gst_discoverer_discover_uri
+gst_discoverer_discover_uri_async
+<SUBSECTION>
+GstDiscovererInfo
+GstDiscovererResult
+gst_discoverer_info_get_duration
+gst_discoverer_info_get_misc
+gst_discoverer_info_get_result
+gst_discoverer_info_get_stream_info
+gst_discoverer_info_get_stream_list
+gst_discoverer_info_get_tags
+gst_discoverer_info_get_uri
+gst_discoverer_info_get_seekable
+gst_discoverer_info_ref
+gst_discoverer_info_unref
+<SUBSECTION>
+GstDiscovererStreamInfo
+GstDiscovererContainerInfo
+GstDiscovererAudioInfo
+GstDiscovererVideoInfo
+GstDiscovererSubtitleInfo
+gst_discoverer_stream_info_get_caps
+gst_discoverer_stream_info_get_misc
+gst_discoverer_stream_info_get_next
+gst_discoverer_stream_info_get_previous
+gst_discoverer_stream_info_get_tags
+gst_discoverer_stream_info_ref
+gst_discoverer_stream_info_unref
+gst_discoverer_stream_info_list_free
+gst_discoverer_stream_info_get_stream_type_nick
+gst_discoverer_info_get_audio_streams
+gst_discoverer_info_get_container_streams
+gst_discoverer_info_get_streams
+gst_discoverer_info_get_subtitle_streams
+gst_discoverer_info_get_video_streams
+gst_discoverer_audio_info_get_bitrate
+gst_discoverer_audio_info_get_channels
+gst_discoverer_audio_info_get_depth
+gst_discoverer_audio_info_get_language
+gst_discoverer_audio_info_get_max_bitrate
+gst_discoverer_audio_info_get_sample_rate
+gst_discoverer_container_info_get_streams
+gst_discoverer_subtitle_info_get_language
+gst_discoverer_video_info_get_bitrate
+gst_discoverer_video_info_get_depth
+gst_discoverer_video_info_get_framerate_denom
+gst_discoverer_video_info_get_framerate_num
+gst_discoverer_video_info_get_height
+gst_discoverer_video_info_is_interlaced
+gst_discoverer_video_info_is_image
+gst_discoverer_video_info_get_max_bitrate
+gst_discoverer_video_info_get_par_denom
+gst_discoverer_video_info_get_par_num
+gst_discoverer_video_info_get_width
+<SUBSECTION Standard>
+GST_DISCOVERER
+GST_DISCOVERER_AUDIO_INFO
+GST_DISCOVERER_CLASS
+GST_DISCOVERER_CONTAINER_INFO
+GST_DISCOVERER_INFO
+GST_DISCOVERER_STREAM_INFO
+GST_DISCOVERER_VIDEO_INFO
+GST_DISCOVERER_SUBTITLE_INFO
+GST_IS_DISCOVERER
+GST_IS_DISCOVERER_INFO
+GST_IS_DISCOVERER_AUDIO_INFO
+GST_IS_DISCOVERER_CLASS
+GST_IS_DISCOVERER_CONTAINER_INFO
+GST_IS_DISCOVERER_STREAM_INFO
+GST_IS_DISCOVERER_VIDEO_INFO
+GST_IS_DISCOVERER_SUBTITLE_INFO
+GST_TYPE_DISCOVERER
+GST_TYPE_DISCOVERER_AUDIO_INFO
+GST_TYPE_DISCOVERER_CONTAINER_INFO
+GST_TYPE_DISCOVERER_INFO
+GST_TYPE_DISCOVERER_RESULT
+GST_TYPE_DISCOVERER_STREAM_INFO
+GST_TYPE_DISCOVERER_VIDEO_INFO
+GST_TYPE_DISCOVERER_SUBTITLE_INFO
+GstDiscovererAudioInfoClass
+GstDiscovererClass
+GstDiscovererContainerInfoClass
+GstDiscovererPrivate
+GstDiscovererStreamInfoClass
+GstDiscovererVideoInfoClass
+GstDiscovererSubtitleInfoClass
+GstDiscovererInfoClass
+gst_discoverer_audio_info_get_type
+gst_discoverer_container_info_get_type
+gst_discoverer_get_type
+gst_discoverer_info_get_type
+gst_discoverer_info_copy
+gst_discoverer_result_get_type
+gst_discoverer_stream_info_get_type
+gst_discoverer_subtitle_info_get_type
+gst_discoverer_video_info_get_type
+</SECTION>
+
+# private
+
+<SECTION>
+<FILE>private</FILE>
+<SUBSECTION Private>
+bind_textdomain_codeset
+bindtextdomain
+dcgettext
+dcngettext
+dgettext
+dngettext
+gettext
+gettext_noop
+ngettext
+textdomain
+_
+N_
+</SECTION>
diff --git a/docs/libs/gst-plugins-base-libs.types b/docs/libs/gst-plugins-base-libs.types
new file mode 100644
index 0000000..cce4c91
--- /dev/null
+++ b/docs/libs/gst-plugins-base-libs.types
@@ -0,0 +1,76 @@
+#include <gst/gst.h>
+
+
+#include <gst/audio/gstaudioclock.h>
+gst_audio_clock_get_type
+#include <gst/audio/gstaudiodecoder.h>
+gst_audio_decoder_get_type
+#include <gst/audio/gstaudioencoder.h>
+gst_audio_encoder_get_type
+#include <gst/audio/gstaudiofilter.h>
+gst_audio_filter_get_type
+#include <gst/audio/gstaudiosink.h>
+gst_audio_sink_get_type
+#include <gst/audio/gstaudiosrc.h>
+gst_audio_src_get_type
+#include <gst/audio/gstbaseaudiosink.h>
+gst_base_audio_sink_get_type
+#include <gst/audio/gstbaseaudiosrc.h>
+gst_base_audio_src_get_type
+#include <gst/audio/gstringbuffer.h>
+gst_ring_buffer_get_type
+
+
+#include <gst/cdda/gstcddabasesrc.h>
+gst_cdda_base_src_get_type
+
+
+#include <gst/interfaces/colorbalance.h>
+gst_color_balance_get_type
+gst_color_balance_channel_get_type
+#include <gst/interfaces/mixer.h>
+gst_mixer_get_type
+gst_mixer_options_get_type
+gst_mixer_track_get_type
+#include <gst/interfaces/navigation.h>
+gst_navigation_get_type
+#include <gst/interfaces/propertyprobe.h>
+gst_property_probe_get_type
+#include <gst/interfaces/tuner.h>
+gst_tuner_get_type
+gst_tuner_channel_get_type
+gst_tuner_norm_get_type
+#include <gst/interfaces/streamvolume.h>
+gst_stream_volume_get_type
+#include <gst/interfaces/videoorientation.h>
+gst_video_orientation_get_type
+#include <gst/interfaces/videooverlay.h>
+gst_video_overlay_get_type
+
+
+#include <gst/rtp/gstbasertpdepayload.h>
+gst_base_rtp_depayload_get_type
+#include <gst/rtp/gstbasertppayload.h>
+gst_basertppayload_get_type
+#include <gst/rtp/gstbasertpaudiopayload.h>
+gst_base_rtp_audio_payload_get_type
+
+
+#include <gst/video/gstvideofilter.h>
+gst_video_filter_get_type
+#include <gst/video/gstvideosink.h>
+gst_video_sink_get_type
+
+#include <gst/pbutils/pbutils.h>
+gst_discoverer_get_type
+
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/pbutils/encoding-target.h>
+gst_encoding_profile_get_type
+gst_encoding_video_profile_get_type
+gst_encoding_video_profile_get_type
+gst_encoding_audio_profile_get_type
+gst_encoding_container_profile_get_type
+gst_encoding_target_get_type
+
+
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
new file mode 100644
index 0000000..b035e01
--- /dev/null
+++ b/docs/libs/html/annotation-glossary.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Annotation Glossary</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="prev" href="api-index-deprecated.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="api-index-deprecated.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td> </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#glsO">O</a>
+                      | 
+                   <a class="shortcut" href="#glsS">S</a>
+                      | 
+                   <a class="shortcut" href="#glsA">A</a>
+                      | 
+                   <a class="shortcut" href="#glsC">C</a>
+                      | 
+                   <a class="shortcut" href="#glsT">T</a>
+                      | 
+                   <a class="shortcut" href="#glsE">E</a>
+                      | 
+                   <a class="shortcut" href="#glsT">T</a>
+</td></tr>
+</table>
+<div class="glossary">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="annotation-glossary"></a>Annotation Glossary</h2></div></div></div>
+<a name="glsO"></a><h3 class="title">O</h3>
+<dt>
+<a name="annotation-glossterm-out"></a>out</dt>
+<dd><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsS"></a><h3 class="title">S</h3>
+<dt>
+<a name="annotation-glossterm-scope%20async"></a>scope async</dt>
+<dd><p>The callback is valid until first called.</p></dd>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt>
+<a name="annotation-glossterm-allow-none"></a>allow-none</dt>
+<dd><p>NULL is ok, both for passing and for returning.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt>
+<a name="annotation-glossterm-closure"></a>closure</dt>
+<dd><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt>
+<a name="annotation-glossterm-transfer%20none"></a>transfer none</dt>
+<dd><p>Don't free data after the code is done.</p></dd>
+<a name="glsE"></a><h3 class="title">E</h3>
+<dt>
+<a name="annotation-glossterm-element-type"></a>element-type</dt>
+<dd><p>Generics and defining elements of containers and arrays.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt>
+<a name="annotation-glossterm-transfer%20full"></a>transfer full</dt>
+<dd><p>Free data after the code is done.</p></dd>
+<dt>
+<a name="annotation-glossterm-type"></a>type</dt>
+<dd><p>Override the parsed C type with given type</p></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/api-index-deprecated.html b/docs/libs/html/api-index-deprecated.html
new file mode 100644
index 0000000..f7a2206
--- /dev/null
+++ b/docs/libs/html/api-index-deprecated.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of deprecated API</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="prev" href="api-index-full.html" title="Index">
+<link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="api-index-full.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#idxR">R</a>
+                      | 
+                   <a class="shortcut" href="#idxT">T</a>
+</td></tr>
+</table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="api-index-deprecated"></a>Index of deprecated API</h2></div></div></div>
+<a name="idx"></a><a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-decode-ip" title="gst_rtsp_base64_decode_ip ()">gst_rtsp_base64_decode_ip</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">gstrtspbase64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-encode" title="gst_rtsp_base64_encode ()">gst_rtsp_base64_encode</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">gstrtspbase64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-data" title="gst_rtsp_watch_queue_data ()">gst_rtsp_watch_queue_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-message" title="gst_rtsp_watch_queue_message ()">gst_rtsp_watch_queue_message</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<a name="idxT"></a><h3 class="title">T</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-SORTNAME:CAPS" title="GST_TAG_MUSICBRAINZ_SORTNAME">GST_TAG_MUSICBRAINZ_SORTNAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
new file mode 100644
index 0000000..9c8b623
--- /dev/null
+++ b/docs/libs/html/api-index-full.html
@@ -0,0 +1,4403 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="prev" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
+<link rel="next" href="api-index-deprecated.html" title="Index of deprecated API">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-libs-hierarchy.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="api-index-deprecated.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#idxA">A</a>
+                      | 
+                   <a class="shortcut" href="#idxB">B</a>
+                      | 
+                   <a class="shortcut" href="#idxC">C</a>
+                      | 
+                   <a class="shortcut" href="#idxD">D</a>
+                      | 
+                   <a class="shortcut" href="#idxE">E</a>
+                      | 
+                   <a class="shortcut" href="#idxF">F</a>
+                      | 
+                   <a class="shortcut" href="#idxI">I</a>
+                      | 
+                   <a class="shortcut" href="#idxM">M</a>
+                      | 
+                   <a class="shortcut" href="#idxN">N</a>
+                      | 
+                   <a class="shortcut" href="#idxP">P</a>
+                      | 
+                   <a class="shortcut" href="#idxR">R</a>
+                      | 
+                   <a class="shortcut" href="#idxS">S</a>
+                      | 
+                   <a class="shortcut" href="#idxT">T</a>
+                      | 
+                   <a class="shortcut" href="#idxV">V</a>
+</td></tr>
+</table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="api-index-full"></a>Index</h2></div></div></div>
+<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks" title="GstAppSinkCallbacks">GstAppSinkCallbacks</a>, struct in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks" title="GstAppSrcCallbacks">GstAppSrcCallbacks</a>, struct in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType">GstAppStreamType</a>, enum in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-caps" title="gst_app_sink_get_caps ()">gst_app_sink_get_caps</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-drop" title="gst_app_sink_get_drop ()">gst_app_sink_get_drop</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-emit-signals" title="gst_app_sink_get_emit_signals ()">gst_app_sink_get_emit_signals</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-max-buffers" title="gst_app_sink_get_max_buffers ()">gst_app_sink_get_max_buffers</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()">gst_app_sink_is_eos</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" title="gst_app_sink_pull_buffer ()">gst_app_sink_pull_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer-list" title="gst_app_sink_pull_buffer_list ()">gst_app_sink_pull_buffer_list</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" title="gst_app_sink_pull_preroll ()">gst_app_sink_pull_preroll</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-callbacks" title="gst_app_sink_set_callbacks ()">gst_app_sink_set_callbacks</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-caps" title="gst_app_sink_set_caps ()">gst_app_sink_set_caps</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-drop" title="gst_app_sink_set_drop ()">gst_app_sink_set_drop</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-emit-signals" title="gst_app_sink_set_emit_signals ()">gst_app_sink_set_emit_signals</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-max-buffers" title="gst_app_sink_set_max_buffers ()">gst_app_sink_set_max_buffers</a>, function in <a class="link" href="gst-plugins-base-libs-appsink.html" title="appsink">appsink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" title="gst_app_src_end_of_stream ()">gst_app_src_end_of_stream</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-caps" title="gst_app_src_get_caps ()">gst_app_src_get_caps</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-emit-signals" title="gst_app_src_get_emit_signals ()">gst_app_src_get_emit_signals</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-latency" title="gst_app_src_get_latency ()">gst_app_src_get_latency</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-max-bytes" title="gst_app_src_get_max_bytes ()">gst_app_src_get_max_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-size" title="gst_app_src_get_size ()">gst_app_src_get_size</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-stream-type" title="gst_app_src_get_stream_type ()">gst_app_src_get_stream_type</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer" title="gst_app_src_push_buffer ()">gst_app_src_push_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks" title="gst_app_src_set_callbacks ()">gst_app_src_set_callbacks</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-caps" title="gst_app_src_set_caps ()">gst_app_src_set_caps</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals" title="gst_app_src_set_emit_signals ()">gst_app_src_set_emit_signals</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-latency" title="gst_app_src_set_latency ()">gst_app_src_set_latency</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-max-bytes" title="gst_app_src_set_max_bytes ()">gst_app_src_set_max_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-size" title="gst_app_src_set_size ()">gst_app_src_set_size</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-stream-type" title="gst_app_src_set_stream_type ()">gst_app_src_set_stream_type</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition">GstAudioChannelPosition</a>, enum in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock-struct" title="struct GstAudioClock">GstAudioClock</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()">GstAudioClockGetTimeFunc</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct" title="struct GstAudioDecoder">GstAudioDecoder</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--min-latency" title='The "min-latency" property'>GstAudioDecoder:min-latency</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--plc" title='The "plc" property'>GstAudioDecoder:plc</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--tolerance" title='The "tolerance" property'>GstAudioDecoder:tolerance</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass" title="struct GstAudioDecoderClass">GstAudioDecoderClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder-struct" title="struct GstAudioEncoder">GstAudioEncoder</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--hard-resync" title='The "hard-resync" property'>GstAudioEncoder:hard-resync</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--mark-granule" title='The "mark-granule" property'>GstAudioEncoder:mark-granule</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--perfect-timestamp" title='The "perfect-timestamp" property'>GstAudioEncoder:perfect-timestamp</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--tolerance" title='The "tolerance" property'>GstAudioEncoder:tolerance</a>, object property in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoderClass" title="struct GstAudioEncoderClass">GstAudioEncoderClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct" title="struct GstAudioFilter">GstAudioFilter</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">gstaudiofilter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" title="struct GstAudioFilterClass">GstAudioFilterClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">gstaudiofilter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFlags" title="enum GstAudioFlags">GstAudioFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat">GstAudioFormat</a>, enum in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags" title="enum GstAudioFormatFlags">GstAudioFormatFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo">GstAudioFormatInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo">GstAudioInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc" title="GstAudioMixerFilterFunc ()">GstAudioMixerFilterFunc</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html" title="gstaudiomixerutils">gstaudiomixerutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink-struct" title="struct GstAudioSink">GstAudioSink</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">gstaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSinkClass" title="struct GstAudioSinkClass">GstAudioSinkClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">gstaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc-struct" title="struct GstAudioSrc">GstAudioSrc</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">gstaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrcClass" title="struct GstAudioSrcClass">GstAudioSrcClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">gstaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-buffer-clip" title="gst_audio_buffer_clip ()">gst_audio_buffer_clip</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-check-channel-positions" title="gst_audio_check_channel_positions ()">gst_audio_check_channel_positions</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-adjust" title="gst_audio_clock_adjust ()">gst_audio_clock_adjust</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-get-time" title="gst_audio_clock_get_time ()">gst_audio_clock_get_time</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-invalidate" title="gst_audio_clock_invalidate ()">gst_audio_clock_invalidate</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new" title="gst_audio_clock_new ()">gst_audio_clock_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new-full" title="gst_audio_clock_new_full ()">gst_audio_clock_new_full</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-reset" title="gst_audio_clock_reset ()">gst_audio_clock_reset</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-ERROR:CAPS" title="GST_AUDIO_DECODER_ERROR()">GST_AUDIO_DECODER_ERROR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-finish-frame" title="gst_audio_decoder_finish_frame ()">gst_audio_decoder_finish_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-audio-info" title="gst_audio_decoder_get_audio_info ()">gst_audio_decoder_get_audio_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-byte-time" title="gst_audio_decoder_get_byte_time ()">gst_audio_decoder_get_byte_time</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-delay" title="gst_audio_decoder_get_delay ()">gst_audio_decoder_get_delay</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-latency" title="gst_audio_decoder_get_latency ()">gst_audio_decoder_get_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-max-errors" title="gst_audio_decoder_get_max_errors ()">gst_audio_decoder_get_max_errors</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-min-latency" title="gst_audio_decoder_get_min_latency ()">gst_audio_decoder_get_min_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-parse-state" title="gst_audio_decoder_get_parse_state ()">gst_audio_decoder_get_parse_state</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc" title="gst_audio_decoder_get_plc ()">gst_audio_decoder_get_plc</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc-aware" title="gst_audio_decoder_get_plc_aware ()">gst_audio_decoder_get_plc_aware</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-tolerance" title="gst_audio_decoder_get_tolerance ()">gst_audio_decoder_get_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-byte-time" title="gst_audio_decoder_set_byte_time ()">gst_audio_decoder_set_byte_time</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-latency" title="gst_audio_decoder_set_latency ()">gst_audio_decoder_set_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-max-errors" title="gst_audio_decoder_set_max_errors ()">gst_audio_decoder_set_max_errors</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-min-latency" title="gst_audio_decoder_set_min_latency ()">gst_audio_decoder_set_min_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc" title="gst_audio_decoder_set_plc ()">gst_audio_decoder_set_plc</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware" title="gst_audio_decoder_set_plc_aware ()">gst_audio_decoder_set_plc_aware</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance" title="gst_audio_decoder_set_tolerance ()">gst_audio_decoder_set_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-NAME:CAPS" title="GST_AUDIO_DECODER_SINK_NAME">GST_AUDIO_DECODER_SINK_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-PAD:CAPS" title="GST_AUDIO_DECODER_SINK_PAD()">GST_AUDIO_DECODER_SINK_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-NAME:CAPS" title="GST_AUDIO_DECODER_SRC_NAME">GST_AUDIO_DECODER_SRC_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-PAD:CAPS" title="GST_AUDIO_DECODER_SRC_PAD()">GST_AUDIO_DECODER_SRC_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#gst-audio-default-registry-mixer-filter" title="gst_audio_default_registry_mixer_filter ()">gst_audio_default_registry_mixer_filter</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html" title="gstaudiomixerutils">gstaudiomixerutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-DEF-RATE:CAPS" title="GST_AUDIO_DEF_RATE">GST_AUDIO_DEF_RATE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-finish-frame" title="gst_audio_encoder_finish_frame ()">gst_audio_encoder_finish_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-audio-info" title="gst_audio_encoder_get_audio_info ()">gst_audio_encoder_get_audio_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-max" title="gst_audio_encoder_get_frame_max ()">gst_audio_encoder_get_frame_max</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-max" title="gst_audio_encoder_get_frame_samples_max ()">gst_audio_encoder_get_frame_samples_max</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-min" title="gst_audio_encoder_get_frame_samples_min ()">gst_audio_encoder_get_frame_samples_min</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-hard-resync" title="gst_audio_encoder_get_hard_resync ()">gst_audio_encoder_get_hard_resync</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-latency" title="gst_audio_encoder_get_latency ()">gst_audio_encoder_get_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-lookahead" title="gst_audio_encoder_get_lookahead ()">gst_audio_encoder_get_lookahead</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-mark-granule" title="gst_audio_encoder_get_mark_granule ()">gst_audio_encoder_get_mark_granule</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-perfect-timestamp" title="gst_audio_encoder_get_perfect_timestamp ()">gst_audio_encoder_get_perfect_timestamp</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-tolerance" title="gst_audio_encoder_get_tolerance ()">gst_audio_encoder_get_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-proxy-getcaps" title="gst_audio_encoder_proxy_getcaps ()">gst_audio_encoder_proxy_getcaps</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SEGMENT:CAPS" title="GST_AUDIO_ENCODER_SEGMENT()">GST_AUDIO_ENCODER_SEGMENT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-max" title="gst_audio_encoder_set_frame_max ()">gst_audio_encoder_set_frame_max</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-max" title="gst_audio_encoder_set_frame_samples_max ()">gst_audio_encoder_set_frame_samples_max</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-min" title="gst_audio_encoder_set_frame_samples_min ()">gst_audio_encoder_set_frame_samples_min</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-hard-resync" title="gst_audio_encoder_set_hard_resync ()">gst_audio_encoder_set_hard_resync</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-latency" title="gst_audio_encoder_set_latency ()">gst_audio_encoder_set_latency</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-lookahead" title="gst_audio_encoder_set_lookahead ()">gst_audio_encoder_set_lookahead</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-mark-granule" title="gst_audio_encoder_set_mark_granule ()">gst_audio_encoder_set_mark_granule</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-perfect-timestamp" title="gst_audio_encoder_set_perfect_timestamp ()">gst_audio_encoder_set_perfect_timestamp</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-tolerance" title="gst_audio_encoder_set_tolerance ()">gst_audio_encoder_set_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-NAME:CAPS" title="GST_AUDIO_ENCODER_SINK_NAME">GST_AUDIO_ENCODER_SINK_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-PAD:CAPS" title="GST_AUDIO_ENCODER_SINK_PAD()">GST_AUDIO_ENCODER_SINK_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-NAME:CAPS" title="GST_AUDIO_ENCODER_SRC_NAME">GST_AUDIO_ENCODER_SRC_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-PAD:CAPS" title="GST_AUDIO_ENCODER_SRC_PAD()">GST_AUDIO_ENCODER_SRC_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">gstaudioencoder</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#gst-audio-filter-class-add-pad-templates" title="gst_audio_filter_class_add_pad_templates ()">gst_audio_filter_class_add_pad_templates</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">gstaudiofilter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-fixate-channel-positions" title="gst_audio_fixate_channel_positions ()">gst_audio_fixate_channel_positions</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-format-get-info" title="gst_audio_format_get_info ()">gst_audio_format_get_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-DEPTH:CAPS" title="GST_AUDIO_FORMAT_INFO_DEPTH()">GST_AUDIO_FORMAT_INFO_DEPTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS" title="GST_AUDIO_FORMAT_INFO_ENDIANNESS()">GST_AUDIO_FORMAT_INFO_ENDIANNESS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FLAGS:CAPS" title="GST_AUDIO_FORMAT_INFO_FLAGS()">GST_AUDIO_FORMAT_INFO_FLAGS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FORMAT:CAPS" title="GST_AUDIO_FORMAT_INFO_FORMAT()">GST_AUDIO_FORMAT_INFO_FORMAT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN()">GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_FLOAT()">GST_AUDIO_FORMAT_INFO_IS_FLOAT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_INTEGER()">GST_AUDIO_FORMAT_INFO_IS_INTEGER</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN()">GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_SIGNED()">GST_AUDIO_FORMAT_INFO_IS_SIGNED</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-NAME:CAPS" title="GST_AUDIO_FORMAT_INFO_NAME()">GST_AUDIO_FORMAT_INFO_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-WIDTH:CAPS" title="GST_AUDIO_FORMAT_INFO_WIDTH()">GST_AUDIO_FORMAT_INFO_WIDTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-get-channel-positions" title="gst_audio_get_channel_positions ()">gst_audio_get_channel_positions</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-frame-size" title="gst_audio_iec61937_frame_size ()">gst_audio_iec61937_frame_size</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">gstaudioiec61937</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload" title="gst_audio_iec61937_payload ()">gst_audio_iec61937_payload</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">gstaudioiec61937</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPF:CAPS" title="GST_AUDIO_INFO_BPF()">GST_AUDIO_INFO_BPF</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPS:CAPS" title="GST_AUDIO_INFO_BPS()">GST_AUDIO_INFO_BPS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-CHANNELS:CAPS" title="GST_AUDIO_INFO_CHANNELS()">GST_AUDIO_INFO_CHANNELS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-convert" title="gst_audio_info_convert ()">gst_audio_info_convert</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-DEPTH:CAPS" title="GST_AUDIO_INFO_DEPTH()">GST_AUDIO_INFO_DEPTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FLAGS:CAPS" title="GST_AUDIO_INFO_FLAGS()">GST_AUDIO_INFO_FLAGS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FORMAT:CAPS" title="GST_AUDIO_INFO_FORMAT()">GST_AUDIO_INFO_FORMAT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-from-caps" title="gst_audio_info_from_caps ()">gst_audio_info_from_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS" title="GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS()">GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-init" title="gst_audio_info_init ()">gst_audio_info_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-NAME:CAPS" title="GST_AUDIO_INFO_NAME()">GST_AUDIO_INFO_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-POSITION:CAPS" title="GST_AUDIO_INFO_POSITION()">GST_AUDIO_INFO_POSITION</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-RATE:CAPS" title="GST_AUDIO_INFO_RATE()">GST_AUDIO_INFO_RATE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-to-caps" title="gst_audio_info_to_caps ()">gst_audio_info_to_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-WIDTH:CAPS" title="GST_AUDIO_INFO_WIDTH()">GST_AUDIO_INFO_WIDTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-caps-channel-positions-list" title="gst_audio_set_caps_channel_positions_list ()">gst_audio_set_caps_channel_positions_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-channel-positions" title="gst_audio_set_channel_positions ()">gst_audio_set_channel_positions</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-structure-channel-positions-list" title="gst_audio_set_structure_channel_positions_list ()">gst_audio_set_structure_channel_positions_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">gstmultichannel</a>
+</dt>
+<dd></dd>
+<a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink-struct" title="struct GstBaseAudioSink">GstBaseAudioSink</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--buffer-time" title='The "buffer-time" property'>GstBaseAudioSink:buffer-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--can-activate-pull" title='The "can-activate-pull" property'>GstBaseAudioSink:can-activate-pull</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--drift-tolerance" title='The "drift-tolerance" property'>GstBaseAudioSink:drift-tolerance</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--latency-time" title='The "latency-time" property'>GstBaseAudioSink:latency-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--provide-clock" title='The "provide-clock" property'>GstBaseAudioSink:provide-clock</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--slave-method" title='The "slave-method" property'>GstBaseAudioSink:slave-method</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkClass" title="struct GstBaseAudioSinkClass">GstBaseAudioSinkClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod">GstBaseAudioSinkSlaveMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc-struct" title="struct GstBaseAudioSrc">GstBaseAudioSrc</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-buffer-time" title='The "actual-buffer-time" property'>GstBaseAudioSrc:actual-buffer-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-latency-time" title='The "actual-latency-time" property'>GstBaseAudioSrc:actual-latency-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--buffer-time" title='The "buffer-time" property'>GstBaseAudioSrc:buffer-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--latency-time" title='The "latency-time" property'>GstBaseAudioSrc:latency-time</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--provide-clock" title='The "provide-clock" property'>GstBaseAudioSrc:provide-clock</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--slave-method" title='The "slave-method" property'>GstBaseAudioSrc:slave-method</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcClass" title="struct GstBaseAudioSrcClass">GstBaseAudioSrcClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod">GstBaseAudioSrcSlaveMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload-struct" title="struct GstBaseRTPAudioPayload">GstBaseRTPAudioPayload</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload--buffer-list" title='The "buffer-list" property'>GstBaseRTPAudioPayload:buffer-list</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayloadClass" title="struct GstBaseRTPAudioPayloadClass">GstBaseRTPAudioPayloadClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload-struct" title="struct GstBaseRTPDepayload">GstBaseRTPDepayload</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayloadClass" title="struct GstBaseRTPDepayloadClass">GstBaseRTPDepayloadClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload-struct" title="struct GstBaseRTPPayload">GstBaseRTPPayload</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--max-ptime" title='The "max-ptime" property'>GstBaseRTPPayload:max-ptime</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--min-ptime" title='The "min-ptime" property'>GstBaseRTPPayload:min-ptime</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--mtu" title='The "mtu" property'>GstBaseRTPPayload:mtu</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--perfect-rtptime" title='The "perfect-rtptime" property'>GstBaseRTPPayload:perfect-rtptime</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--pt" title='The "pt" property'>GstBaseRTPPayload:pt</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ptime-multiple" title='The "ptime-multiple" property'>GstBaseRTPPayload:ptime-multiple</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum" title='The "seqnum" property'>GstBaseRTPPayload:seqnum</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum-offset" title='The "seqnum-offset" property'>GstBaseRTPPayload:seqnum-offset</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ssrc" title='The "ssrc" property'>GstBaseRTPPayload:ssrc</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp" title='The "timestamp" property'>GstBaseRTPPayload:timestamp</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp-offset" title='The "timestamp-offset" property'>GstBaseRTPPayload:timestamp-offset</a>, object property in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayloadClass" title="struct GstBaseRTPPayloadClass">GstBaseRTPPayloadClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-is-filled" title="gst_basertppayload_is_filled ()">gst_basertppayload_is_filled</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push" title="gst_basertppayload_push ()">gst_basertppayload_push</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push-list" title="gst_basertppayload_push_list ()">gst_basertppayload_push_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-options" title="gst_basertppayload_set_options ()">gst_basertppayload_set_options</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-outcaps" title="gst_basertppayload_set_outcaps ()">gst_basertppayload_set_outcaps</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-CLOCK:CAPS" title="GST_BASE_AUDIO_SINK_CLOCK()">GST_BASE_AUDIO_SINK_CLOCK</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-create-ringbuffer" title="gst_base_audio_sink_create_ringbuffer ()">gst_base_audio_sink_create_ringbuffer</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-drift-tolerance" title="gst_base_audio_sink_get_drift_tolerance ()">gst_base_audio_sink_get_drift_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-provide-clock" title="gst_base_audio_sink_get_provide_clock ()">gst_base_audio_sink_get_provide_clock</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-slave-method" title="gst_base_audio_sink_get_slave_method ()">gst_base_audio_sink_get_slave_method</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-PAD:CAPS" title="GST_BASE_AUDIO_SINK_PAD()">GST_BASE_AUDIO_SINK_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-drift-tolerance" title="gst_base_audio_sink_set_drift_tolerance ()">gst_base_audio_sink_set_drift_tolerance</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-provide-clock" title="gst_base_audio_sink_set_provide_clock ()">gst_base_audio_sink_set_provide_clock</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-slave-method" title="gst_base_audio_sink_set_slave_method ()">gst_base_audio_sink_set_slave_method</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">gstbaseaudiosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-CLOCK:CAPS" title="GST_BASE_AUDIO_SRC_CLOCK()">GST_BASE_AUDIO_SRC_CLOCK</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-create-ringbuffer" title="gst_base_audio_src_create_ringbuffer ()">gst_base_audio_src_create_ringbuffer</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-provide-clock" title="gst_base_audio_src_get_provide_clock ()">gst_base_audio_src_get_provide_clock</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-slave-method" title="gst_base_audio_src_get_slave_method ()">gst_base_audio_src_get_slave_method</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-PAD:CAPS" title="GST_BASE_AUDIO_SRC_PAD()">GST_BASE_AUDIO_SRC_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-provide-clock" title="gst_base_audio_src_set_provide_clock ()">gst_base_audio_src_set_provide_clock</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-slave-method" title="gst_base_audio_src_set_slave_method ()">gst_base_audio_src_set_slave_method</a>, function in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">gstbaseaudiosrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-flush" title="gst_base_rtp_audio_payload_flush ()">gst_base_rtp_audio_payload_flush</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-get-adapter" title="gst_base_rtp_audio_payload_get_adapter ()">gst_base_rtp_audio_payload_get_adapter</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-push" title="gst_base_rtp_audio_payload_push ()">gst_base_rtp_audio_payload_push</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-based" title="gst_base_rtp_audio_payload_set_frame_based ()">gst_base_rtp_audio_payload_set_frame_based</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-options" title="gst_base_rtp_audio_payload_set_frame_options ()">gst_base_rtp_audio_payload_set_frame_options</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-samplebits-options" title="gst_base_rtp_audio_payload_set_samplebits_options ()">gst_base_rtp_audio_payload_set_samplebits_options</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-based" title="gst_base_rtp_audio_payload_set_sample_based ()">gst_base_rtp_audio_payload_set_sample_based</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-options" title="gst_base_rtp_audio_payload_set_sample_options ()">gst_base_rtp_audio_payload_set_sample_options</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">gstbasertpaudiopayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push" title="gst_base_rtp_depayload_push ()">gst_base_rtp_depayload_push</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-list" title="gst_base_rtp_depayload_push_list ()">gst_base_rtp_depayload_push_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-ts" title="gst_base_rtp_depayload_push_ts ()">gst_base_rtp_depayload_push_ts</a>, function in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS" title="GST_BASE_RTP_DEPAYLOAD_SINKPAD()">GST_BASE_RTP_DEPAYLOAD_SINKPAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS" title="GST_BASE_RTP_DEPAYLOAD_SRCPAD()">GST_BASE_RTP_DEPAYLOAD_SRCPAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">gstbasertpdepayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-MTU:CAPS" title="GST_BASE_RTP_PAYLOAD_MTU()">GST_BASE_RTP_PAYLOAD_MTU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-PT:CAPS" title="GST_BASE_RTP_PAYLOAD_PT()">GST_BASE_RTP_PAYLOAD_PT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS" title="GST_BASE_RTP_PAYLOAD_SINKPAD()">GST_BASE_RTP_PAYLOAD_SINKPAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS" title="GST_BASE_RTP_PAYLOAD_SRCPAD()">GST_BASE_RTP_PAYLOAD_SRCPAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">gstbasertppayload</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType" title="enum GstBufferFormatType">GstBufferFormatType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc-struct" title="struct GstCddaBaseSrc">GstCddaBaseSrc</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--device" title='The "device" property'>GstCddaBaseSrc:device</a>, object property in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--mode" title='The "mode" property'>GstCddaBaseSrc:mode</a>, object property in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--track" title='The "track" property'>GstCddaBaseSrc:track</a>, object property in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcClass" title="struct GstCddaBaseSrcClass">GstCddaBaseSrcClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode" title="enum GstCddaBaseSrcMode">GstCddaBaseSrcMode</a>, enum in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack" title="struct GstCddaBaseSrcTrack">GstCddaBaseSrcTrack</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#gst-cdda-base-src-add-track" title="gst_cdda_base_src_add_track ()">gst_cdda_base_src_add_track</a>, function in <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">gstcddabasesrc</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-CHECK-PLUGINS-BASE-VERSION:CAPS" title="GST_CHECK_PLUGINS_BASE_VERSION()">GST_CHECK_PLUGINS_BASE_VERSION</a>, macro in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-CLOCK-TIME-TO-FRAMES:CAPS" title="GST_CLOCK_TIME_TO_FRAMES()">GST_CLOCK_TIME_TO_FRAMES</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-caps-set-level-and-profile" title="gst_codec_utils_aac_caps_set_level_and_profile ()">gst_codec_utils_aac_caps_set_level_and_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level" title="gst_codec_utils_aac_get_level ()">gst_codec_utils_aac_get_level</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile" title="gst_codec_utils_aac_get_profile ()">gst_codec_utils_aac_get_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-sample-rate-from-index" title="gst_codec_utils_aac_get_sample_rate_from_index ()">gst_codec_utils_aac_get_sample_rate_from_index</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-caps-set-level-and-profile" title="gst_codec_utils_h264_caps_set_level_and_profile ()">gst_codec_utils_h264_caps_set_level_and_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level" title="gst_codec_utils_h264_get_level ()">gst_codec_utils_h264_get_level</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level-idc" title="gst_codec_utils_h264_get_level_idc ()">gst_codec_utils_h264_get_level_idc</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile" title="gst_codec_utils_h264_get_profile ()">gst_codec_utils_h264_get_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile" title="gst_codec_utils_mpeg4video_caps_set_level_and_profile ()">gst_codec_utils_mpeg4video_caps_set_level_and_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level" title="gst_codec_utils_mpeg4video_get_level ()">gst_codec_utils_mpeg4video_get_level</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile" title="gst_codec_utils_mpeg4video_get_profile ()">gst_codec_utils_mpeg4video_get_profile</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct" title="GstColorBalance">GstColorBalance</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed" title='The "value-changed" signal'>GstColorBalance::value-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-struct" title="struct GstColorBalanceChannel">GstColorBalanceChannel</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">gstcolorbalancechannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed" title='The "value-changed" signal'>GstColorBalanceChannel::value-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">gstcolorbalancechannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannelClass" title="struct GstColorBalanceChannelClass">GstColorBalanceChannelClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">gstcolorbalancechannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceClass" title="struct GstColorBalanceClass">GstColorBalanceClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType">GstColorBalanceType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-balance-type" title="gst_color_balance_get_balance_type ()">gst_color_balance_get_balance_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-value" title="gst_color_balance_get_value ()">gst_color_balance_get_value</a>, function in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-list-channels" title="gst_color_balance_list_channels ()">gst_color_balance_list_channels</a>, function in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-set-value" title="gst_color_balance_set_value ()">gst_color_balance_set_value</a>, function in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-value-changed" title="gst_color_balance_value_changed ()">gst_color_balance_value_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct" title="struct GstDiscoverer">GstDiscoverer</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-discovered" title='The "discovered" signal'>GstDiscoverer::discovered</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished" title='The "finished" signal'>GstDiscoverer::finished</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting" title='The "starting" signal'>GstDiscoverer::starting</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer--timeout" title='The "timeout" property'>GstDiscoverer:timeout</a>, object property in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo">GstDiscovererAudioInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo">GstDiscovererContainerInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct" title="GstDiscovererInfo">GstDiscovererInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult">GstDiscovererResult</a>, enum in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo">GstDiscovererStreamInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo">GstDiscovererSubtitleInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo">GstDiscovererVideoInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-bitrate" title="gst_discoverer_audio_info_get_bitrate ()">gst_discoverer_audio_info_get_bitrate</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-channels" title="gst_discoverer_audio_info_get_channels ()">gst_discoverer_audio_info_get_channels</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-depth" title="gst_discoverer_audio_info_get_depth ()">gst_discoverer_audio_info_get_depth</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-language" title="gst_discoverer_audio_info_get_language ()">gst_discoverer_audio_info_get_language</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-max-bitrate" title="gst_discoverer_audio_info_get_max_bitrate ()">gst_discoverer_audio_info_get_max_bitrate</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-sample-rate" title="gst_discoverer_audio_info_get_sample_rate ()">gst_discoverer_audio_info_get_sample_rate</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-container-info-get-streams" title="gst_discoverer_container_info_get_streams ()">gst_discoverer_container_info_get_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri" title="gst_discoverer_discover_uri ()">gst_discoverer_discover_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri-async" title="gst_discoverer_discover_uri_async ()">gst_discoverer_discover_uri_async</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-audio-streams" title="gst_discoverer_info_get_audio_streams ()">gst_discoverer_info_get_audio_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-container-streams" title="gst_discoverer_info_get_container_streams ()">gst_discoverer_info_get_container_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-duration" title="gst_discoverer_info_get_duration ()">gst_discoverer_info_get_duration</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-misc" title="gst_discoverer_info_get_misc ()">gst_discoverer_info_get_misc</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-result" title="gst_discoverer_info_get_result ()">gst_discoverer_info_get_result</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable" title="gst_discoverer_info_get_seekable ()">gst_discoverer_info_get_seekable</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-streams" title="gst_discoverer_info_get_streams ()">gst_discoverer_info_get_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-info" title="gst_discoverer_info_get_stream_info ()">gst_discoverer_info_get_stream_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-list" title="gst_discoverer_info_get_stream_list ()">gst_discoverer_info_get_stream_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-subtitle-streams" title="gst_discoverer_info_get_subtitle_streams ()">gst_discoverer_info_get_subtitle_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-tags" title="gst_discoverer_info_get_tags ()">gst_discoverer_info_get_tags</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-uri" title="gst_discoverer_info_get_uri ()">gst_discoverer_info_get_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-video-streams" title="gst_discoverer_info_get_video_streams ()">gst_discoverer_info_get_video_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref" title="gst_discoverer_info_ref()">gst_discoverer_info_ref</a>, macro in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref" title="gst_discoverer_info_unref()">gst_discoverer_info_unref</a>, macro in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-new" title="gst_discoverer_new ()">gst_discoverer_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start" title="gst_discoverer_start ()">gst_discoverer_start</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stop" title="gst_discoverer_stop ()">gst_discoverer_stop</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps" title="gst_discoverer_stream_info_get_caps ()">gst_discoverer_stream_info_get_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc" title="gst_discoverer_stream_info_get_misc ()">gst_discoverer_stream_info_get_misc</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next" title="gst_discoverer_stream_info_get_next ()">gst_discoverer_stream_info_get_next</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-previous" title="gst_discoverer_stream_info_get_previous ()">gst_discoverer_stream_info_get_previous</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-stream-type-nick" title="gst_discoverer_stream_info_get_stream_type_nick ()">gst_discoverer_stream_info_get_stream_type_nick</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-tags" title="gst_discoverer_stream_info_get_tags ()">gst_discoverer_stream_info_get_tags</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()">gst_discoverer_stream_info_list_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-ref" title="gst_discoverer_stream_info_ref()">gst_discoverer_stream_info_ref</a>, macro in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()">gst_discoverer_stream_info_unref</a>, macro in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-subtitle-info-get-language" title="gst_discoverer_subtitle_info_get_language ()">gst_discoverer_subtitle_info_get_language</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-bitrate" title="gst_discoverer_video_info_get_bitrate ()">gst_discoverer_video_info_get_bitrate</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-depth" title="gst_discoverer_video_info_get_depth ()">gst_discoverer_video_info_get_depth</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-denom" title="gst_discoverer_video_info_get_framerate_denom ()">gst_discoverer_video_info_get_framerate_denom</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-num" title="gst_discoverer_video_info_get_framerate_num ()">gst_discoverer_video_info_get_framerate_num</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-height" title="gst_discoverer_video_info_get_height ()">gst_discoverer_video_info_get_height</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-max-bitrate" title="gst_discoverer_video_info_get_max_bitrate ()">gst_discoverer_video_info_get_max_bitrate</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-denom" title="gst_discoverer_video_info_get_par_denom ()">gst_discoverer_video_info_get_par_denom</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-num" title="gst_discoverer_video_info_get_par_num ()">gst_discoverer_video_info_get_par_num</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-width" title="gst_discoverer_video_info_get_width ()">gst_discoverer_video_info_get_width</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-image" title="gst_discoverer_video_info_is_image ()">gst_discoverer_video_info_is_image</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-interlaced" title="gst_discoverer_video_info_is_interlaced ()">gst_discoverer_video_info_is_interlaced</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<a name="idxE"></a><h3 class="title">E</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile-struct" title="GstEncodingAudioProfile">GstEncodingAudioProfile</a>, struct in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile-struct" title="GstEncodingContainerProfile">GstEncodingContainerProfile</a>, struct in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile-struct" title="GstEncodingProfile">GstEncodingProfile</a>, struct in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget-struct" title="GstEncodingTarget">GstEncodingTarget</a>, struct in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile-struct" title="GstEncodingVideoProfile">GstEncodingVideoProfile</a>, struct in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-audio-profile-new" title="gst_encoding_audio_profile_new ()">gst_encoding_audio_profile_new</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-CAPTURE:CAPS" title="GST_ENCODING_CATEGORY_CAPTURE">GST_ENCODING_CATEGORY_CAPTURE</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE">GST_ENCODING_CATEGORY_DEVICE</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS" title="GST_ENCODING_CATEGORY_ONLINE_SERVICE">GST_ENCODING_CATEGORY_ONLINE_SERVICE</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS" title="GST_ENCODING_CATEGORY_STORAGE_EDITING">GST_ENCODING_CATEGORY_STORAGE_EDITING</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-add-profile" title="gst_encoding_container_profile_add_profile ()">gst_encoding_container_profile_add_profile</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-contains-profile" title="gst_encoding_container_profile_contains_profile ()">gst_encoding_container_profile_contains_profile</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-get-profiles" title="gst_encoding_container_profile_get_profiles ()">gst_encoding_container_profile_get_profiles</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new" title="gst_encoding_container_profile_new ()">gst_encoding_container_profile_new</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-all-targets" title="gst_encoding_list_all_targets ()">gst_encoding_list_all_targets</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-available-categories" title="gst_encoding_list_available_categories ()">gst_encoding_list_available_categories</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-find" title="gst_encoding_profile_find ()">gst_encoding_profile_find</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-description" title="gst_encoding_profile_get_description ()">gst_encoding_profile_get_description</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-format" title="gst_encoding_profile_get_format ()">gst_encoding_profile_get_format</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps" title="gst_encoding_profile_get_input_caps ()">gst_encoding_profile_get_input_caps</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-name" title="gst_encoding_profile_get_name ()">gst_encoding_profile_get_name</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-presence" title="gst_encoding_profile_get_presence ()">gst_encoding_profile_get_presence</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-preset" title="gst_encoding_profile_get_preset ()">gst_encoding_profile_get_preset</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" title="gst_encoding_profile_get_restriction ()">gst_encoding_profile_get_restriction</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick" title="gst_encoding_profile_get_type_nick ()">gst_encoding_profile_get_type_nick</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal" title="gst_encoding_profile_is_equal ()">gst_encoding_profile_is_equal</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref" title="gst_encoding_profile_ref()">gst_encoding_profile_ref</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description" title="gst_encoding_profile_set_description ()">gst_encoding_profile_set_description</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format" title="gst_encoding_profile_set_format ()">gst_encoding_profile_set_format</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name" title="gst_encoding_profile_set_name ()">gst_encoding_profile_set_name</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence" title="gst_encoding_profile_set_presence ()">gst_encoding_profile_set_presence</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset" title="gst_encoding_profile_set_preset ()">gst_encoding_profile_set_preset</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction" title="gst_encoding_profile_set_restriction ()">gst_encoding_profile_set_restriction</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref" title="gst_encoding_profile_unref()">gst_encoding_profile_unref</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-add-profile" title="gst_encoding_target_add_profile ()">gst_encoding_target_add_profile</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-category" title="gst_encoding_target_get_category ()">gst_encoding_target_get_category</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-description" title="gst_encoding_target_get_description ()">gst_encoding_target_get_description</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-name" title="gst_encoding_target_get_name ()">gst_encoding_target_get_name</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profile" title="gst_encoding_target_get_profile ()">gst_encoding_target_get_profile</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profiles" title="gst_encoding_target_get_profiles ()">gst_encoding_target_get_profiles</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load" title="gst_encoding_target_load ()">gst_encoding_target_load</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load-from-file" title="gst_encoding_target_load_from_file ()">gst_encoding_target_load_from_file</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-new" title="gst_encoding_target_new ()">gst_encoding_target_new</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-ref" title="gst_encoding_target_ref()">gst_encoding_target_ref</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save" title="gst_encoding_target_save ()">gst_encoding_target_save</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save-to-file" title="gst_encoding_target_save_to_file ()">gst_encoding_target_save_to_file</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-unref" title="gst_encoding_target_unref()">gst_encoding_target_unref</a>, macro in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-pass" title="gst_encoding_video_profile_get_pass ()">gst_encoding_video_profile_get_pass</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-variableframerate" title="gst_encoding_video_profile_get_variableframerate ()">gst_encoding_video_profile_get_variableframerate</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-new" title="gst_encoding_video_profile_new ()">gst_encoding_video_profile_new</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-pass" title="gst_encoding_video_profile_set_pass ()">gst_encoding_video_profile_set_pass</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate" title="gst_encoding_video_profile_set_variableframerate ()">gst_encoding_video_profile_set_variableframerate</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<a name="idxF"></a><h3 class="title">F</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32">GstFFTF32</a>, struct in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex">GstFFTF32Complex</a>, struct in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64">GstFFTF64</a>, struct in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex">GstFFTF64Complex</a>, struct in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16">GstFFTS16</a>, struct in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex">GstFFTS16Complex</a>, struct in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32">GstFFTS32</a>, struct in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex">GstFFTS32Complex</a>, struct in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow">GstFFTWindow</a>, enum in <a class="link" href="gst-plugins-base-libs-gstfft.html" title="gstfft">gstfft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft" title="gst_fft_f32_fft ()">gst_fft_f32_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-free" title="gst_fft_f32_free ()">gst_fft_f32_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft" title="gst_fft_f32_inverse_fft ()">gst_fft_f32_inverse_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()">gst_fft_f32_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-window" title="gst_fft_f32_window ()">gst_fft_f32_window</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-fft" title="gst_fft_f64_fft ()">gst_fft_f64_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-free" title="gst_fft_f64_free ()">gst_fft_f64_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-inverse-fft" title="gst_fft_f64_inverse_fft ()">gst_fft_f64_inverse_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()">gst_fft_f64_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-window" title="gst_fft_f64_window ()">gst_fft_f64_window</a>, function in <a class="link" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">gstfftf64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()">gst_fft_next_fast_length</a>, function in <a class="link" href="gst-plugins-base-libs-gstfft.html" title="gstfft">gstfft</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft" title="gst_fft_s16_fft ()">gst_fft_s16_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-free" title="gst_fft_s16_free ()">gst_fft_s16_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft" title="gst_fft_s16_inverse_fft ()">gst_fft_s16_inverse_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()">gst_fft_s16_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-window" title="gst_fft_s16_window ()">gst_fft_s16_window</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">gstffts16</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft" title="gst_fft_s32_fft ()">gst_fft_s32_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-free" title="gst_fft_s32_free ()">gst_fft_s32_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft" title="gst_fft_s32_inverse_fft ()">gst_fft_s32_inverse_fft</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()">gst_fft_s32_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-window" title="gst_fft_s32_window ()">gst_fft_s32_window</a>, function in <a class="link" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">gstffts32</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-FRAMES-TO-CLOCK-TIME:CAPS" title="GST_FRAMES_TO_CLOCK_TIME()">GST_FRAMES_TO_CLOCK_TIME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<a name="idxI"></a><h3 class="title">I</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext">GstInstallPluginsContext</a>, struct in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" title="GstInstallPluginsResultFunc ()">GstInstallPluginsResultFunc</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn">GstInstallPluginsReturn</a>, enum in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()">gst_install_plugins_async</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free" title="gst_install_plugins_context_free ()">gst_install_plugins_context_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new" title="gst_install_plugins_context_new ()">gst_install_plugins_context_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid" title="gst_install_plugins_context_set_xid ()">gst_install_plugins_context_set_xid</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-installation-in-progress" title="gst_install_plugins_installation_in_progress ()">gst_install_plugins_installation_in_progress</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-return-get-name" title="gst_install_plugins_return_get_name ()">gst_install_plugins_return_get_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-supported" title="gst_install_plugins_supported ()">gst_install_plugins_supported</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()">gst_install_plugins_sync</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message" title="gst_is_missing_plugin_message ()">gst_is_missing_plugin_message</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-installer-detail-new" title="gst_missing_decoder_installer_detail_new ()">gst_missing_decoder_installer_detail_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-message-new" title="gst_missing_decoder_message_new ()">gst_missing_decoder_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-installer-detail-new" title="gst_missing_element_installer_detail_new ()">gst_missing_element_installer_detail_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new" title="gst_missing_element_message_new ()">gst_missing_element_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-installer-detail-new" title="gst_missing_encoder_installer_detail_new ()">gst_missing_encoder_installer_detail_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-message-new" title="gst_missing_encoder_message_new ()">gst_missing_encoder_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()">gst_missing_plugin_message_get_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()">gst_missing_plugin_message_get_installer_detail</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-installer-detail-new" title="gst_missing_uri_sink_installer_detail_new ()">gst_missing_uri_sink_installer_detail_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-message-new" title="gst_missing_uri_sink_message_new ()">gst_missing_uri_sink_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-installer-detail-new" title="gst_missing_uri_source_installer_detail_new ()">gst_missing_uri_source_installer_detail_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-message-new" title="gst_missing_uri_source_message_new ()">gst_missing_uri_source_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-struct" title="GstMixer">GstMixer</a>, struct in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-mute-toggled" title='The "mute-toggled" signal'>GstMixer::mute-toggled</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-option-changed" title='The "option-changed" signal'>GstMixer::option-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-record-toggled" title='The "record-toggled" signal'>GstMixer::record-toggled</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-volume-changed" title='The "volume-changed" signal'>GstMixer::volume-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerFlags" title="enum GstMixerFlags">GstMixerFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerMessageType" title="enum GstMixerMessageType">GstMixerMessageType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions-struct" title="struct GstMixerOptions">GstMixerOptions</a>, struct in <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html" title="gstmixeroptions">gstmixeroptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack-struct" title="struct GstMixerTrack">GstMixerTrack</a>, struct in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--flags" title='The "flags" property'>GstMixerTrack:flags</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--index" title='The "index" property'>GstMixerTrack:index</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--label" title='The "label" property'>GstMixerTrack:label</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--max-volume" title='The "max-volume" property'>GstMixerTrack:max-volume</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--min-volume" title='The "min-volume" property'>GstMixerTrack:min-volume</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--num-channels" title='The "num-channels" property'>GstMixerTrack:num-channels</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--untranslated-label" title='The "untranslated-label" property'>GstMixerTrack:untranslated-label</a>, object property in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrackFlags" title="enum GstMixerTrackFlags">GstMixerTrackFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType">GstMixerType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-flags" title="gst_mixer_get_mixer_flags ()">gst_mixer_get_mixer_flags</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-type" title="gst_mixer_get_mixer_type ()">gst_mixer_get_mixer_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-option" title="gst_mixer_get_option ()">gst_mixer_get_option</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-volume" title="gst_mixer_get_volume ()">gst_mixer_get_volume</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-list-tracks" title="gst_mixer_list_tracks ()">gst_mixer_list_tracks</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-get-type" title="gst_mixer_message_get_type ()">gst_mixer_message_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-mute-toggled" title="gst_mixer_message_parse_mute_toggled ()">gst_mixer_message_parse_mute_toggled</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-options-list-changed" title="gst_mixer_message_parse_options_list_changed ()">gst_mixer_message_parse_options_list_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-option-changed" title="gst_mixer_message_parse_option_changed ()">gst_mixer_message_parse_option_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-record-toggled" title="gst_mixer_message_parse_record_toggled ()">gst_mixer_message_parse_record_toggled</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-volume-changed" title="gst_mixer_message_parse_volume_changed ()">gst_mixer_message_parse_volume_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-mixer-changed" title="gst_mixer_mixer_changed ()">gst_mixer_mixer_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-mute-toggled" title="gst_mixer_mute_toggled ()">gst_mixer_mute_toggled</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values" title="gst_mixer_options_get_values ()">gst_mixer_options_get_values</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html" title="gstmixeroptions">gstmixeroptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-options-list-changed" title="gst_mixer_options_list_changed ()">gst_mixer_options_list_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-option-changed" title="gst_mixer_option_changed ()">gst_mixer_option_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-record-toggled" title="gst_mixer_record_toggled ()">gst_mixer_record_toggled</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-mute" title="gst_mixer_set_mute ()">gst_mixer_set_mute</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-option" title="gst_mixer_set_option ()">gst_mixer_set_option</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-record" title="gst_mixer_set_record ()">gst_mixer_set_record</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-volume" title="gst_mixer_set_volume ()">gst_mixer_set_volume</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS" title="GST_MIXER_TRACK_HAS_FLAG()">GST_MIXER_TRACK_HAS_FLAG</a>, macro in <a class="link" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">gstmixertrack</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-volume-changed" title="gst_mixer_volume_changed ()">gst_mixer_volume_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">gstmixer</a>
+</dt>
+<dd></dd>
+<a name="idxN"></a><h3 class="title">N</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct" title="GstNavigation">GstNavigation</a>, struct in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand">GstNavigationCommand</a>, enum in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType" title="enum GstNavigationEventType">GstNavigationEventType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationInterface" title="struct GstNavigationInterface">GstNavigationInterface</a>, struct in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType">GstNavigationMessageType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType">GstNavigationQueryType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU">GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU">GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU">GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_MENU">GST_NAVIGATION_COMMAND_DVD_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_ROOT_MENU">GST_NAVIGATION_COMMAND_DVD_ROOT_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU">GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_TITLE_MENU">GST_NAVIGATION_COMMAND_DVD_TITLE_MENU</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-command" title="gst_navigation_event_parse_command ()">gst_navigation_event_parse_command</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event" title="gst_navigation_event_parse_key_event ()">gst_navigation_event_parse_key_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event" title="gst_navigation_event_parse_mouse_button_event ()">gst_navigation_event_parse_mouse_button_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-move-event" title="gst_navigation_event_parse_mouse_move_event ()">gst_navigation_event_parse_mouse_move_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type" title="gst_navigation_message_get_type ()">gst_navigation_message_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed" title="gst_navigation_message_new_angles_changed ()">gst_navigation_message_new_angles_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed" title="gst_navigation_message_new_commands_changed ()">gst_navigation_message_new_commands_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over" title="gst_navigation_message_new_mouse_over ()">gst_navigation_message_new_mouse_over</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed" title="gst_navigation_message_parse_angles_changed ()">gst_navigation_message_parse_angles_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" title="gst_navigation_message_parse_mouse_over ()">gst_navigation_message_parse_mouse_over</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type" title="gst_navigation_query_get_type ()">gst_navigation_query_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles" title="gst_navigation_query_new_angles ()">gst_navigation_query_new_angles</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands" title="gst_navigation_query_new_commands ()">gst_navigation_query_new_commands</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-angles" title="gst_navigation_query_parse_angles ()">gst_navigation_query_parse_angles</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-length" title="gst_navigation_query_parse_commands_length ()">gst_navigation_query_parse_commands_length</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-nth" title="gst_navigation_query_parse_commands_nth ()">gst_navigation_query_parse_commands_nth</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-angles" title="gst_navigation_query_set_angles ()">gst_navigation_query_set_angles</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commands" title="gst_navigation_query_set_commands ()">gst_navigation_query_set_commands</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commandsv" title="gst_navigation_query_set_commandsv ()">gst_navigation_query_set_commandsv</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-command" title="gst_navigation_send_command ()">gst_navigation_send_command</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-event" title="gst_navigation_send_event ()">gst_navigation_send_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-key-event" title="gst_navigation_send_key_event ()">gst_navigation_send_key_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-mouse-event" title="gst_navigation_send_mouse_event ()">gst_navigation_send_mouse_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress">GstNetAddress</a>, struct in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-equal" title="gst_netaddress_equal ()">gst_netaddress_equal</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-address-bytes" title="gst_netaddress_get_address_bytes ()">gst_netaddress_get_address_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip4-address" title="gst_netaddress_get_ip4_address ()">gst_netaddress_get_ip4_address</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip6-address" title="gst_netaddress_get_ip6_address ()">gst_netaddress_get_ip6_address</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-net-type" title="gst_netaddress_get_net_type ()">gst_netaddress_get_net_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GST-NETADDRESS-MAX-LEN:CAPS" title="GST_NETADDRESS_MAX_LEN">GST_NETADDRESS_MAX_LEN</a>, macro in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-address-bytes" title="gst_netaddress_set_address_bytes ()">gst_netaddress_set_address_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip4-address" title="gst_netaddress_set_ip4_address ()">gst_netaddress_set_ip4_address</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip6-address" title="gst_netaddress_set_ip6_address ()">gst_netaddress_set_ip6_address</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-to-string" title="gst_netaddress_to_string ()">gst_netaddress_to_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetBuffer" title="GstNetBuffer">GstNetBuffer</a>, struct in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType">GstNetType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">gstnetbuffer</a>
+</dt>
+<dd></dd>
+<a name="idxP"></a><h3 class="title">P</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list" title="gst_pb_utils_add_codec_description_to_tag_list ()">gst_pb_utils_add_codec_description_to_tag_list</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-codec-description" title="gst_pb_utils_get_codec_description ()">gst_pb_utils_get_codec_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-decoder-description" title="gst_pb_utils_get_decoder_description ()">gst_pb_utils_get_decoder_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-element-description" title="gst_pb_utils_get_element_description ()">gst_pb_utils_get_element_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-encoder-description" title="gst_pb_utils_get_encoder_description ()">gst_pb_utils_get_encoder_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-sink-description" title="gst_pb_utils_get_sink_description ()">gst_pb_utils_get_sink_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-source-description" title="gst_pb_utils_get_source_description ()">gst_pb_utils_get_source_description</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">gstpbutilsdescriptions</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init" title="gst_pb_utils_init ()">gst_pb_utils_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutils.html" title="gstpbutils">gstpbutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version" title="gst_plugins_base_version ()">gst_plugins_base_version</a>, function in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MAJOR:CAPS" title="GST_PLUGINS_BASE_VERSION_MAJOR">GST_PLUGINS_BASE_VERSION_MAJOR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MICRO:CAPS" title="GST_PLUGINS_BASE_VERSION_MICRO">GST_PLUGINS_BASE_VERSION_MICRO</a>, macro in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MINOR:CAPS" title="GST_PLUGINS_BASE_VERSION_MINOR">GST_PLUGINS_BASE_VERSION_MINOR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-NANO:CAPS" title="GST_PLUGINS_BASE_VERSION_NANO">GST_PLUGINS_BASE_VERSION_NANO</a>, macro in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version-string" title="gst_plugins_base_version_string ()">gst_plugins_base_version_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">gstpluginsbaseversion</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-struct" title="GstPropertyProbe">GstPropertyProbe</a>, struct in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-probe-needed" title='The "probe-needed" signal'>GstPropertyProbe::probe-needed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbeInterface" title="struct GstPropertyProbeInterface">GstPropertyProbeInterface</a>, struct in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-properties" title="gst_property_probe_get_properties ()">gst_property_probe_get_properties</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-property" title="gst_property_probe_get_property ()">gst_property_probe_get_property</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values" title="gst_property_probe_get_values ()">gst_property_probe_get_values</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values-name" title="gst_property_probe_get_values_name ()">gst_property_probe_get_values_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe" title="gst_property_probe_needs_probe ()">gst_property_probe_needs_probe</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe-name" title="gst_property_probe_needs_probe_name ()">gst_property_probe_needs_probe_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values" title="gst_property_probe_probe_and_get_values ()">gst_property_probe_probe_and_get_values</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values-name" title="gst_property_probe_probe_and_get_values_name ()">gst_property_probe_probe_and_get_values_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property" title="gst_property_probe_probe_property ()">gst_property_probe_probe_property</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property-name" title="gst_property_probe_probe_property_name ()">gst_property_probe_probe_property_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">gstpropertyprobe</a>
+</dt>
+<dd></dd>
+<a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-caps" title="gst_riff_create_audio_caps ()">gst_riff_create_audio_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-template-caps" title="gst_riff_create_audio_template_caps ()">gst_riff_create_audio_template_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-caps" title="gst_riff_create_iavs_caps ()">gst_riff_create_iavs_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-template-caps" title="gst_riff_create_iavs_template_caps ()">gst_riff_create_iavs_template_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-caps" title="gst_riff_create_video_caps ()">gst_riff_create_video_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-template-caps" title="gst_riff_create_video_template_caps ()">gst_riff_create_video_template_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-init" title="gst_riff_init ()">gst_riff_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-chunk" title="gst_riff_parse_chunk ()">gst_riff_parse_chunk</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-file-header" title="gst_riff_parse_file_header ()">gst_riff_parse_file_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-info" title="gst_riff_parse_info ()">gst_riff_parse_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-auds" title="gst_riff_parse_strf_auds ()">gst_riff_parse_strf_auds</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-iavs" title="gst_riff_parse_strf_iavs ()">gst_riff_parse_strf_iavs</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-vids" title="gst_riff_parse_strf_vids ()">gst_riff_parse_strf_vids</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strh" title="gst_riff_parse_strh ()">gst_riff_parse_strh</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-read-chunk" title="gst_riff_read_chunk ()">gst_riff_read_chunk</a>, function in <a class="link" href="gst-plugins-base-libs-gstriff.html" title="gstriff">gstriff</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer-struct" title="struct GstRingBuffer">GstRingBuffer</a>, struct in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback" title="GstRingBufferCallback ()">GstRingBufferCallback</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferClass" title="struct GstRingBufferClass">GstRingBufferClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState" title="enum GstRingBufferSegState">GstRingBufferSegState</a>, enum in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec">GstRingBufferSpec</a>, struct in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferState" title="enum GstRingBufferState">GstRingBufferState</a>, enum in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-acquire" title="gst_ring_buffer_acquire ()">gst_ring_buffer_acquire</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-activate" title="gst_ring_buffer_activate ()">gst_ring_buffer_activate</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-advance" title="gst_ring_buffer_advance ()">gst_ring_buffer_advance</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-BROADCAST:CAPS" title="GST_RING_BUFFER_BROADCAST()">GST_RING_BUFFER_BROADCAST</a>, macro in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear" title="gst_ring_buffer_clear ()">gst_ring_buffer_clear</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear-all" title="gst_ring_buffer_clear_all ()">gst_ring_buffer_clear_all</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-close-device" title="gst_ring_buffer_close_device ()">gst_ring_buffer_close_device</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit" title="gst_ring_buffer_commit ()">gst_ring_buffer_commit</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full" title="gst_ring_buffer_commit_full ()">gst_ring_buffer_commit_full</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-convert" title="gst_ring_buffer_convert ()">gst_ring_buffer_convert</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay" title="gst_ring_buffer_delay ()">gst_ring_buffer_delay</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-device-is-open" title="gst_ring_buffer_device_is_open ()">gst_ring_buffer_device_is_open</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-GET-COND:CAPS" title="GST_RING_BUFFER_GET_COND()">GST_RING_BUFFER_GET_COND</a>, macro in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-acquired" title="gst_ring_buffer_is_acquired ()">gst_ring_buffer_is_acquired</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-active" title="gst_ring_buffer_is_active ()">gst_ring_buffer_is_active</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-may-start" title="gst_ring_buffer_may_start ()">gst_ring_buffer_may_start</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-open-device" title="gst_ring_buffer_open_device ()">gst_ring_buffer_open_device</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-parse-caps" title="gst_ring_buffer_parse_caps ()">gst_ring_buffer_parse_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-pause" title="gst_ring_buffer_pause ()">gst_ring_buffer_pause</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-prepare-read" title="gst_ring_buffer_prepare_read ()">gst_ring_buffer_prepare_read</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-read" title="gst_ring_buffer_read ()">gst_ring_buffer_read</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release" title="gst_ring_buffer_release ()">gst_ring_buffer_release</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-samples-done" title="gst_ring_buffer_samples_done ()">gst_ring_buffer_samples_done</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback" title="gst_ring_buffer_set_callback ()">gst_ring_buffer_set_callback</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-flushing" title="gst_ring_buffer_set_flushing ()">gst_ring_buffer_set_flushing</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-sample" title="gst_ring_buffer_set_sample ()">gst_ring_buffer_set_sample</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-SIGNAL:CAPS" title="GST_RING_BUFFER_SIGNAL()">GST_RING_BUFFER_SIGNAL</a>, macro in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-start" title="gst_ring_buffer_start ()">gst_ring_buffer_start</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-stop" title="gst_ring_buffer_stop ()">gst_ring_buffer_stop</a>, function in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-WAIT:CAPS" title="GST_RING_BUFFER_WAIT()">GST_RING_BUFFER_WAIT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">gstringbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType">GstRTCPFBType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket">GstRTCPPacket</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType">GstRTCPSDESType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType">GstRTCPType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-add-packet" title="gst_rtcp_buffer_add_packet ()">gst_rtcp_buffer_add_packet</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet" title="gst_rtcp_buffer_get_first_packet ()">gst_rtcp_buffer_get_first_packet</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-packet-count" title="gst_rtcp_buffer_get_packet_count ()">gst_rtcp_buffer_get_packet_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new" title="gst_rtcp_buffer_new ()">gst_rtcp_buffer_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data" title="gst_rtcp_buffer_new_copy_data ()">gst_rtcp_buffer_new_copy_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data" title="gst_rtcp_buffer_new_take_data ()">gst_rtcp_buffer_new_take_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate" title="gst_rtcp_buffer_validate ()">gst_rtcp_buffer_validate</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()">gst_rtcp_buffer_validate_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT">GST_RTCP_MAX_BYE_SSRC_COUNT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS" title="GST_RTCP_MAX_RB_COUNT">GST_RTCP_MAX_RB_COUNT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES:CAPS" title="GST_RTCP_MAX_SDES">GST_RTCP_MAX_SDES</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS" title="GST_RTCP_MAX_SDES_ITEM_COUNT">GST_RTCP_MAX_SDES_ITEM_COUNT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-ntp-to-unix" title="gst_rtcp_ntp_to_unix ()">gst_rtcp_ntp_to_unix</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-add-rb" title="gst_rtcp_packet_add_rb ()">gst_rtcp_packet_add_rb</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrc" title="gst_rtcp_packet_bye_add_ssrc ()">gst_rtcp_packet_bye_add_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrcs" title="gst_rtcp_packet_bye_add_ssrcs ()">gst_rtcp_packet_bye_add_ssrcs</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-nth-ssrc" title="gst_rtcp_packet_bye_get_nth_ssrc ()">gst_rtcp_packet_bye_get_nth_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason" title="gst_rtcp_packet_bye_get_reason ()">gst_rtcp_packet_bye_get_reason</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason-len" title="gst_rtcp_packet_bye_get_reason_len ()">gst_rtcp_packet_bye_get_reason_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-ssrc-count" title="gst_rtcp_packet_bye_get_ssrc_count ()">gst_rtcp_packet_bye_get_ssrc_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-set-reason" title="gst_rtcp_packet_bye_set_reason ()">gst_rtcp_packet_bye_set_reason</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci" title="gst_rtcp_packet_fb_get_fci ()">gst_rtcp_packet_fb_get_fci</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci-length" title="gst_rtcp_packet_fb_get_fci_length ()">gst_rtcp_packet_fb_get_fci_length</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-media-ssrc" title="gst_rtcp_packet_fb_get_media_ssrc ()">gst_rtcp_packet_fb_get_media_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-sender-ssrc" title="gst_rtcp_packet_fb_get_sender_ssrc ()">gst_rtcp_packet_fb_get_sender_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-type" title="gst_rtcp_packet_fb_get_type ()">gst_rtcp_packet_fb_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-fci-length" title="gst_rtcp_packet_fb_set_fci_length ()">gst_rtcp_packet_fb_set_fci_length</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-media-ssrc" title="gst_rtcp_packet_fb_set_media_ssrc ()">gst_rtcp_packet_fb_set_media_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-sender-ssrc" title="gst_rtcp_packet_fb_set_sender_ssrc ()">gst_rtcp_packet_fb_set_sender_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-type" title="gst_rtcp_packet_fb_set_type ()">gst_rtcp_packet_fb_set_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-count" title="gst_rtcp_packet_get_count ()">gst_rtcp_packet_get_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-length" title="gst_rtcp_packet_get_length ()">gst_rtcp_packet_get_length</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-padding" title="gst_rtcp_packet_get_padding ()">gst_rtcp_packet_get_padding</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb" title="gst_rtcp_packet_get_rb ()">gst_rtcp_packet_get_rb</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb-count" title="gst_rtcp_packet_get_rb_count ()">gst_rtcp_packet_get_rb_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-type" title="gst_rtcp_packet_get_type ()">gst_rtcp_packet_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-move-to-next" title="gst_rtcp_packet_move_to_next ()">gst_rtcp_packet_move_to_next</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-remove" title="gst_rtcp_packet_remove ()">gst_rtcp_packet_remove</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-get-ssrc" title="gst_rtcp_packet_rr_get_ssrc ()">gst_rtcp_packet_rr_get_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-set-ssrc" title="gst_rtcp_packet_rr_set_ssrc ()">gst_rtcp_packet_rr_set_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-entry" title="gst_rtcp_packet_sdes_add_entry ()">gst_rtcp_packet_sdes_add_entry</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-item" title="gst_rtcp_packet_sdes_add_item ()">gst_rtcp_packet_sdes_add_item</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry" title="gst_rtcp_packet_sdes_copy_entry ()">gst_rtcp_packet_sdes_copy_entry</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-entry" title="gst_rtcp_packet_sdes_first_entry ()">gst_rtcp_packet_sdes_first_entry</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-item" title="gst_rtcp_packet_sdes_first_item ()">gst_rtcp_packet_sdes_first_item</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry" title="gst_rtcp_packet_sdes_get_entry ()">gst_rtcp_packet_sdes_get_entry</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-item-count" title="gst_rtcp_packet_sdes_get_item_count ()">gst_rtcp_packet_sdes_get_item_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-ssrc" title="gst_rtcp_packet_sdes_get_ssrc ()">gst_rtcp_packet_sdes_get_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-entry" title="gst_rtcp_packet_sdes_next_entry ()">gst_rtcp_packet_sdes_next_entry</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-item" title="gst_rtcp_packet_sdes_next_item ()">gst_rtcp_packet_sdes_next_item</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-set-rb" title="gst_rtcp_packet_set_rb ()">gst_rtcp_packet_set_rb</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-get-sender-info" title="gst_rtcp_packet_sr_get_sender_info ()">gst_rtcp_packet_sr_get_sender_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-set-sender-info" title="gst_rtcp_packet_sr_set_sender_info ()">gst_rtcp_packet_sr_set_sender_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-name-to-type" title="gst_rtcp_sdes_name_to_type ()">gst_rtcp_sdes_name_to_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-type-to-name" title="gst_rtcp_sdes_type_to_name ()">gst_rtcp_sdes_type_to_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-unix-to-ntp" title="gst_rtcp_unix_to_ntp ()">gst_rtcp_unix_to_ntp</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS" title="GST_RTCP_VALID_MASK">GST_RTCP_VALID_MASK</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS" title="GST_RTCP_VALID_VALUE">GST_RTCP_VALID_VALUE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VERSION:CAPS" title="GST_RTCP_VERSION">GST_RTCP_VERSION</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayload" title="enum GstRTPPayload">GstRTPPayload</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">gstrtppayloads</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo">GstRTPPayloadInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">gstrtppayloads</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header" title="gst_rtp_buffer_add_extension_onebyte_header ()">gst_rtp_buffer_add_extension_onebyte_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header" title="gst_rtp_buffer_add_extension_twobytes_header ()">gst_rtp_buffer_add_extension_twobytes_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-allocate-data" title="gst_rtp_buffer_allocate_data ()">gst_rtp_buffer_allocate_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-header-len" title="gst_rtp_buffer_calc_header_len ()">gst_rtp_buffer_calc_header_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-packet-len" title="gst_rtp_buffer_calc_packet_len ()">gst_rtp_buffer_calc_packet_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-payload-len" title="gst_rtp_buffer_calc_payload_len ()">gst_rtp_buffer_calc_payload_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum" title="gst_rtp_buffer_compare_seqnum ()">gst_rtp_buffer_compare_seqnum</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate" title="gst_rtp_buffer_default_clock_rate ()">gst_rtp_buffer_default_clock_rate</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-ext-timestamp" title="gst_rtp_buffer_ext_timestamp ()">gst_rtp_buffer_ext_timestamp</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc" title="gst_rtp_buffer_get_csrc ()">gst_rtp_buffer_get_csrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count" title="gst_rtp_buffer_get_csrc_count ()">gst_rtp_buffer_get_csrc_count</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension" title="gst_rtp_buffer_get_extension ()">gst_rtp_buffer_get_extension</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data" title="gst_rtp_buffer_get_extension_data ()">gst_rtp_buffer_get_extension_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-onebyte-header" title="gst_rtp_buffer_get_extension_onebyte_header ()">gst_rtp_buffer_get_extension_onebyte_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-twobytes-header" title="gst_rtp_buffer_get_extension_twobytes_header ()">gst_rtp_buffer_get_extension_twobytes_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-header-len" title="gst_rtp_buffer_get_header_len ()">gst_rtp_buffer_get_header_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-marker" title="gst_rtp_buffer_get_marker ()">gst_rtp_buffer_get_marker</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-packet-len" title="gst_rtp_buffer_get_packet_len ()">gst_rtp_buffer_get_packet_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-padding" title="gst_rtp_buffer_get_padding ()">gst_rtp_buffer_get_padding</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload" title="gst_rtp_buffer_get_payload ()">gst_rtp_buffer_get_payload</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer" title="gst_rtp_buffer_get_payload_buffer ()">gst_rtp_buffer_get_payload_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len" title="gst_rtp_buffer_get_payload_len ()">gst_rtp_buffer_get_payload_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer" title="gst_rtp_buffer_get_payload_subbuffer ()">gst_rtp_buffer_get_payload_subbuffer</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-type" title="gst_rtp_buffer_get_payload_type ()">gst_rtp_buffer_get_payload_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-seq" title="gst_rtp_buffer_get_seq ()">gst_rtp_buffer_get_seq</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc" title="gst_rtp_buffer_get_ssrc ()">gst_rtp_buffer_get_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-timestamp" title="gst_rtp_buffer_get_timestamp ()">gst_rtp_buffer_get_timestamp</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-version" title="gst_rtp_buffer_get_version ()">gst_rtp_buffer_get_version</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate" title="gst_rtp_buffer_new_allocate ()">gst_rtp_buffer_new_allocate</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate-len" title="gst_rtp_buffer_new_allocate_len ()">gst_rtp_buffer_new_allocate_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-copy-data" title="gst_rtp_buffer_new_copy_data ()">gst_rtp_buffer_new_copy_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-take-data" title="gst_rtp_buffer_new_take_data ()">gst_rtp_buffer_new_take_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-pad-to" title="gst_rtp_buffer_pad_to ()">gst_rtp_buffer_pad_to</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-csrc" title="gst_rtp_buffer_set_csrc ()">gst_rtp_buffer_set_csrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension" title="gst_rtp_buffer_set_extension ()">gst_rtp_buffer_set_extension</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension-data" title="gst_rtp_buffer_set_extension_data ()">gst_rtp_buffer_set_extension_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-marker" title="gst_rtp_buffer_set_marker ()">gst_rtp_buffer_set_marker</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-packet-len" title="gst_rtp_buffer_set_packet_len ()">gst_rtp_buffer_set_packet_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-padding" title="gst_rtp_buffer_set_padding ()">gst_rtp_buffer_set_padding</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-payload-type" title="gst_rtp_buffer_set_payload_type ()">gst_rtp_buffer_set_payload_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-seq" title="gst_rtp_buffer_set_seq ()">gst_rtp_buffer_set_seq</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc" title="gst_rtp_buffer_set_ssrc ()">gst_rtp_buffer_set_ssrc</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-timestamp" title="gst_rtp_buffer_set_timestamp ()">gst_rtp_buffer_set_timestamp</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-version" title="gst_rtp_buffer_set_version ()">gst_rtp_buffer_set_version</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate" title="gst_rtp_buffer_validate ()">gst_rtp_buffer_validate</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate-data" title="gst_rtp_buffer_validate_data ()">gst_rtp_buffer_validate_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-name" title="gst_rtp_payload_info_for_name ()">gst_rtp_payload_info_for_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">gstrtppayloads</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt" title="gst_rtp_payload_info_for_pt ()">gst_rtp_payload_info_for_pt</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">gstrtppayloads</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS" title="GST_RTP_PAYLOAD_IS_DYNAMIC()">GST_RTP_PAYLOAD_IS_DYNAMIC</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">gstrtppayloads</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-VERSION:CAPS" title="GST_RTP_VERSION">GST_RTP_VERSION</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod" title="enum GstRTSPAuthMethod">GstRTSPAuthMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection">GstRTSPConnection</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent">GstRTSPEvent</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension" title="GstRTSPExtension">GstRTSPExtension</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">gstrtspextension</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface" title="struct GstRTSPExtensionInterface">GstRTSPExtensionInterface</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">gstrtspextension</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily" title="enum GstRTSPFamily">GstRTSPFamily</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField">GstRTSPHeaderField</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans" title="enum GstRTSPLowerTrans">GstRTSPLowerTrans</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage">GstRTSPMessage</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod">GstRTSPMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType" title="enum GstRTSPMsgType">GstRTSPMsgType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile" title="enum GstRTSPProfile">GstRTSPProfile</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange">GstRTSPRange</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit" title="enum GstRTSPRangeUnit">GstRTSPRangeUnit</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult">GstRTSPResult</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPState" title="enum GstRTSPState">GstRTSPState</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode">GstRTSPStatusCode</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime" title="struct GstRTSPTime">GstRTSPTime</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange">GstRTSPTimeRange</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType" title="enum GstRTSPTimeType">GstRTSPTimeType</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode">GstRTSPTransMode</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport">GstRTSPTransport</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl">GstRTSPUrl</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion">GstRTSPVersion</a>, enum in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch">GstRTSPWatch</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs" title="GstRTSPWatchFuncs">GstRTSPWatchFuncs</a>, struct in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-MAX:CAPS" title="GST_RTSP_AUTH_MAX">GST_RTSP_AUTH_MAX</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-decode-ip" title="gst_rtsp_base64_decode_ip ()">gst_rtsp_base64_decode_ip</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">gstrtspbase64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-encode" title="gst_rtsp_base64_encode ()">gst_rtsp_base64_encode</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">gstrtspbase64</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-CHECK:CAPS" title="GST_RTSP_CHECK()">GST_RTSP_CHECK</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept" title="gst_rtsp_connection_accept ()">gst_rtsp_connection_accept</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-clear-auth-params" title="gst_rtsp_connection_clear_auth_params ()">gst_rtsp_connection_clear_auth_params</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close" title="gst_rtsp_connection_close ()">gst_rtsp_connection_close</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect" title="gst_rtsp_connection_connect ()">gst_rtsp_connection_connect</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create" title="gst_rtsp_connection_create ()">gst_rtsp_connection_create</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-fd" title="gst_rtsp_connection_create_from_fd ()">gst_rtsp_connection_create_from_fd</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" title="gst_rtsp_connection_do_tunnel ()">gst_rtsp_connection_do_tunnel</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()">gst_rtsp_connection_flush</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free" title="gst_rtsp_connection_free ()">gst_rtsp_connection_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-ip" title="gst_rtsp_connection_get_ip ()">gst_rtsp_connection_get_ip</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-readfd" title="gst_rtsp_connection_get_readfd ()">gst_rtsp_connection_get_readfd</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tunnelid" title="gst_rtsp_connection_get_tunnelid ()">gst_rtsp_connection_get_tunnelid</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-url" title="gst_rtsp_connection_get_url ()">gst_rtsp_connection_get_url</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-writefd" title="gst_rtsp_connection_get_writefd ()">gst_rtsp_connection_get_writefd</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-is-tunneled" title="gst_rtsp_connection_is_tunneled ()">gst_rtsp_connection_is_tunneled</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-next-timeout" title="gst_rtsp_connection_next_timeout ()">gst_rtsp_connection_next_timeout</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-poll" title="gst_rtsp_connection_poll ()">gst_rtsp_connection_poll</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read" title="gst_rtsp_connection_read ()">gst_rtsp_connection_read</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-receive" title="gst_rtsp_connection_receive ()">gst_rtsp_connection_receive</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-reset-timeout" title="gst_rtsp_connection_reset_timeout ()">gst_rtsp_connection_reset_timeout</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-send" title="gst_rtsp_connection_send ()">gst_rtsp_connection_send</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth" title="gst_rtsp_connection_set_auth ()">gst_rtsp_connection_set_auth</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth-param" title="gst_rtsp_connection_set_auth_param ()">gst_rtsp_connection_set_auth_param</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-http-mode" title="gst_rtsp_connection_set_http_mode ()">gst_rtsp_connection_set_http_mode</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-ip" title="gst_rtsp_connection_set_ip ()">gst_rtsp_connection_set_ip</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-proxy" title="gst_rtsp_connection_set_proxy ()">gst_rtsp_connection_set_proxy</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-qos-dscp" title="gst_rtsp_connection_set_qos_dscp ()">gst_rtsp_connection_set_qos_dscp</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tunneled" title="gst_rtsp_connection_set_tunneled ()">gst_rtsp_connection_set_tunneled</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-write" title="gst_rtsp_connection_write ()">gst_rtsp_connection_write</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GST-RTSP-DEFAULT-PORT:CAPS" title="GST_RTSP_DEFAULT_PORT">GST_RTSP_DEFAULT_PORT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-header-field" title="gst_rtsp_find_header_field ()">gst_rtsp_find_header_field</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-method" title="gst_rtsp_find_method ()">gst_rtsp_find_method</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-allow-multiple" title="gst_rtsp_header_allow_multiple ()">gst_rtsp_header_allow_multiple</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-as-text" title="gst_rtsp_header_as_text ()">gst_rtsp_header_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header" title="gst_rtsp_message_add_header ()">gst_rtsp_message_add_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers" title="gst_rtsp_message_append_headers ()">gst_rtsp_message_append_headers</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-dump" title="gst_rtsp_message_dump ()">gst_rtsp_message_dump</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()">gst_rtsp_message_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-body" title="gst_rtsp_message_get_body ()">gst_rtsp_message_get_body</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header" title="gst_rtsp_message_get_header ()">gst_rtsp_message_get_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-type" title="gst_rtsp_message_get_type ()">gst_rtsp_message_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init" title="gst_rtsp_message_init ()">gst_rtsp_message_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-data" title="gst_rtsp_message_init_data ()">gst_rtsp_message_init_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-request" title="gst_rtsp_message_init_request ()">gst_rtsp_message_init_request</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-response" title="gst_rtsp_message_init_response ()">gst_rtsp_message_init_response</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new" title="gst_rtsp_message_new ()">gst_rtsp_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-data" title="gst_rtsp_message_new_data ()">gst_rtsp_message_new_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-request" title="gst_rtsp_message_new_request ()">gst_rtsp_message_new_request</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-response" title="gst_rtsp_message_new_response ()">gst_rtsp_message_new_response</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-data" title="gst_rtsp_message_parse_data ()">gst_rtsp_message_parse_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-request" title="gst_rtsp_message_parse_request ()">gst_rtsp_message_parse_request</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-response" title="gst_rtsp_message_parse_response ()">gst_rtsp_message_parse_response</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header" title="gst_rtsp_message_remove_header ()">gst_rtsp_message_remove_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body" title="gst_rtsp_message_set_body ()">gst_rtsp_message_set_body</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-steal-body" title="gst_rtsp_message_steal_body ()">gst_rtsp_message_steal_body</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body" title="gst_rtsp_message_take_body ()">gst_rtsp_message_take_body</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header" title="gst_rtsp_message_take_header ()">gst_rtsp_message_take_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset" title="gst_rtsp_message_unset ()">gst_rtsp_message_unset</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-method-as-text" title="gst_rtsp_method_as_text ()">gst_rtsp_method_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-options-as-text" title="gst_rtsp_options_as_text ()">gst_rtsp_options_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-free" title="gst_rtsp_range_free ()">gst_rtsp_range_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-parse" title="gst_rtsp_range_parse ()">gst_rtsp_range_parse</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-to-string" title="gst_rtsp_range_to_string ()">gst_rtsp_range_to_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">gstrtsprange</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-status-as-text" title="gst_rtsp_status_as_text ()">gst_rtsp_status_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-strresult" title="gst_rtsp_strresult ()">gst_rtsp_strresult</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-as-text" title="gst_rtsp_transport_as_text ()">gst_rtsp_transport_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free" title="gst_rtsp_transport_free ()">gst_rtsp_transport_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-manager" title="gst_rtsp_transport_get_manager ()">gst_rtsp_transport_get_manager</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-mime" title="gst_rtsp_transport_get_mime ()">gst_rtsp_transport_get_mime</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-init" title="gst_rtsp_transport_init ()">gst_rtsp_transport_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-new" title="gst_rtsp_transport_new ()">gst_rtsp_transport_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-parse" title="gst_rtsp_transport_parse ()">gst_rtsp_transport_parse</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">gstrtsptransport</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-copy" title="gst_rtsp_url_copy ()">gst_rtsp_url_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-decode-path-components" title="gst_rtsp_url_decode_path_components ()">gst_rtsp_url_decode_path_components</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free" title="gst_rtsp_url_free ()">gst_rtsp_url_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-port" title="gst_rtsp_url_get_port ()">gst_rtsp_url_get_port</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-request-uri" title="gst_rtsp_url_get_request_uri ()">gst_rtsp_url_get_request_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-parse" title="gst_rtsp_url_parse ()">gst_rtsp_url_parse</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-set-port" title="gst_rtsp_url_set_port ()">gst_rtsp_url_set_port</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">gstrtspurl</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-version-as-text" title="gst_rtsp_version_as_text ()">gst_rtsp_version_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">gstrtspdefs</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach" title="gst_rtsp_watch_attach ()">gst_rtsp_watch_attach</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new" title="gst_rtsp_watch_new ()">gst_rtsp_watch_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-data" title="gst_rtsp_watch_queue_data ()">gst_rtsp_watch_queue_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-message" title="gst_rtsp_watch_queue_message ()">gst_rtsp_watch_queue_message</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-reset" title="gst_rtsp_watch_reset ()">gst_rtsp_watch_reset</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-send-message" title="gst_rtsp_watch_send_message ()">gst_rtsp_watch_send_message</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref" title="gst_rtsp_watch_unref ()">gst_rtsp_watch_unref</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data" title="gst_rtsp_watch_write_data ()">gst_rtsp_watch_write_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute">GstSDPAttribute</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth">GstSDPBandwidth</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection">GstSDPConnection</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey">GstSDPKey</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia">GstSDPMedia</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage">GstSDPMessage</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin">GstSDPOrigin</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult">GstSDPResult</a>, enum in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime">GstSDPTime</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone">GstSDPZone</a>, struct in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-address-is-multicast" title="gst_sdp_address_is_multicast ()">gst_sdp_address_is_multicast</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-AS:CAPS" title="GST_SDP_BWTYPE_AS">GST_SDP_BWTYPE_AS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-CT:CAPS" title="GST_SDP_BWTYPE_CT">GST_SDP_BWTYPE_CT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-EXT-PREFIX:CAPS" title="GST_SDP_BWTYPE_EXT_PREFIX">GST_SDP_BWTYPE_EXT_PREFIX</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RR:CAPS" title="GST_SDP_BWTYPE_RR">GST_SDP_BWTYPE_RR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RS:CAPS" title="GST_SDP_BWTYPE_RS">GST_SDP_BWTYPE_RS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-TIAS:CAPS" title="GST_SDP_BWTYPE_TIAS">GST_SDP_BWTYPE_TIAS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-attribute" title="gst_sdp_media_add_attribute ()">gst_sdp_media_add_attribute</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-bandwidth" title="gst_sdp_media_add_bandwidth ()">gst_sdp_media_add_bandwidth</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-connection" title="gst_sdp_media_add_connection ()">gst_sdp_media_add_connection</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-format" title="gst_sdp_media_add_format ()">gst_sdp_media_add_format</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-as-text" title="gst_sdp_media_as_text ()">gst_sdp_media_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-attributes-len" title="gst_sdp_media_attributes_len ()">gst_sdp_media_attributes_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-bandwidths-len" title="gst_sdp_media_bandwidths_len ()">gst_sdp_media_bandwidths_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-connections-len" title="gst_sdp_media_connections_len ()">gst_sdp_media_connections_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-formats-len" title="gst_sdp_media_formats_len ()">gst_sdp_media_formats_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free" title="gst_sdp_media_free ()">gst_sdp_media_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute" title="gst_sdp_media_get_attribute ()">gst_sdp_media_get_attribute</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val" title="gst_sdp_media_get_attribute_val ()">gst_sdp_media_get_attribute_val</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val-n" title="gst_sdp_media_get_attribute_val_n ()">gst_sdp_media_get_attribute_val_n</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-bandwidth" title="gst_sdp_media_get_bandwidth ()">gst_sdp_media_get_bandwidth</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-connection" title="gst_sdp_media_get_connection ()">gst_sdp_media_get_connection</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-format" title="gst_sdp_media_get_format ()">gst_sdp_media_get_format</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-information" title="gst_sdp_media_get_information ()">gst_sdp_media_get_information</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-key" title="gst_sdp_media_get_key ()">gst_sdp_media_get_key</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-media" title="gst_sdp_media_get_media ()">gst_sdp_media_get_media</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-num-ports" title="gst_sdp_media_get_num_ports ()">gst_sdp_media_get_num_ports</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-port" title="gst_sdp_media_get_port ()">gst_sdp_media_get_port</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-proto" title="gst_sdp_media_get_proto ()">gst_sdp_media_get_proto</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()">gst_sdp_media_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()">gst_sdp_media_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-information" title="gst_sdp_media_set_information ()">gst_sdp_media_set_information</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-key" title="gst_sdp_media_set_key ()">gst_sdp_media_set_key</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-media" title="gst_sdp_media_set_media ()">gst_sdp_media_set_media</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-port-info" title="gst_sdp_media_set_port_info ()">gst_sdp_media_set_port_info</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-proto" title="gst_sdp_media_set_proto ()">gst_sdp_media_set_proto</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit" title="gst_sdp_media_uninit ()">gst_sdp_media_uninit</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-attribute" title="gst_sdp_message_add_attribute ()">gst_sdp_message_add_attribute</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-bandwidth" title="gst_sdp_message_add_bandwidth ()">gst_sdp_message_add_bandwidth</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-email" title="gst_sdp_message_add_email ()">gst_sdp_message_add_email</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media" title="gst_sdp_message_add_media ()">gst_sdp_message_add_media</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-phone" title="gst_sdp_message_add_phone ()">gst_sdp_message_add_phone</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-time" title="gst_sdp_message_add_time ()">gst_sdp_message_add_time</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-zone" title="gst_sdp_message_add_zone ()">gst_sdp_message_add_zone</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-text" title="gst_sdp_message_as_text ()">gst_sdp_message_as_text</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-uri" title="gst_sdp_message_as_uri ()">gst_sdp_message_as_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-attributes-len" title="gst_sdp_message_attributes_len ()">gst_sdp_message_attributes_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-bandwidths-len" title="gst_sdp_message_bandwidths_len ()">gst_sdp_message_bandwidths_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump" title="gst_sdp_message_dump ()">gst_sdp_message_dump</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-emails-len" title="gst_sdp_message_emails_len ()">gst_sdp_message_emails_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free" title="gst_sdp_message_free ()">gst_sdp_message_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute" title="gst_sdp_message_get_attribute ()">gst_sdp_message_get_attribute</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val" title="gst_sdp_message_get_attribute_val ()">gst_sdp_message_get_attribute_val</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val-n" title="gst_sdp_message_get_attribute_val_n ()">gst_sdp_message_get_attribute_val_n</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-bandwidth" title="gst_sdp_message_get_bandwidth ()">gst_sdp_message_get_bandwidth</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-connection" title="gst_sdp_message_get_connection ()">gst_sdp_message_get_connection</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-email" title="gst_sdp_message_get_email ()">gst_sdp_message_get_email</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-information" title="gst_sdp_message_get_information ()">gst_sdp_message_get_information</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-key" title="gst_sdp_message_get_key ()">gst_sdp_message_get_key</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-media" title="gst_sdp_message_get_media ()">gst_sdp_message_get_media</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-origin" title="gst_sdp_message_get_origin ()">gst_sdp_message_get_origin</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-phone" title="gst_sdp_message_get_phone ()">gst_sdp_message_get_phone</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-session-name" title="gst_sdp_message_get_session_name ()">gst_sdp_message_get_session_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-time" title="gst_sdp_message_get_time ()">gst_sdp_message_get_time</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-uri" title="gst_sdp_message_get_uri ()">gst_sdp_message_get_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-version" title="gst_sdp_message_get_version ()">gst_sdp_message_get_version</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-zone" title="gst_sdp_message_get_zone ()">gst_sdp_message_get_zone</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init" title="gst_sdp_message_init ()">gst_sdp_message_init</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-medias-len" title="gst_sdp_message_medias_len ()">gst_sdp_message_medias_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()">gst_sdp_message_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-buffer" title="gst_sdp_message_parse_buffer ()">gst_sdp_message_parse_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-uri" title="gst_sdp_message_parse_uri ()">gst_sdp_message_parse_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-phones-len" title="gst_sdp_message_phones_len ()">gst_sdp_message_phones_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-connection" title="gst_sdp_message_set_connection ()">gst_sdp_message_set_connection</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-information" title="gst_sdp_message_set_information ()">gst_sdp_message_set_information</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-key" title="gst_sdp_message_set_key ()">gst_sdp_message_set_key</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-origin" title="gst_sdp_message_set_origin ()">gst_sdp_message_set_origin</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-session-name" title="gst_sdp_message_set_session_name ()">gst_sdp_message_set_session_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-uri" title="gst_sdp_message_set_uri ()">gst_sdp_message_set_uri</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-version" title="gst_sdp_message_set_version ()">gst_sdp_message_set_version</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-times-len" title="gst_sdp_message_times_len ()">gst_sdp_message_times_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit" title="gst_sdp_message_uninit ()">gst_sdp_message_uninit</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-zones-len" title="gst_sdp_message_zones_len ()">gst_sdp_message_zones_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume-struct" title="GstStreamVolume">GstStreamVolume</a>, struct in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--mute" title='The "mute" property'>GstStreamVolume:mute</a>, object property in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--volume" title='The "volume" property'>GstStreamVolume:volume</a>, object property in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat">GstStreamVolumeFormat</a>, enum in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume" title="gst_stream_volume_convert_volume ()">gst_stream_volume_convert_volume</a>, function in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute" title="gst_stream_volume_get_mute ()">gst_stream_volume_get_mute</a>, function in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume" title="gst_stream_volume_get_volume ()">gst_stream_volume_get_volume</a>, function in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-mute" title="gst_stream_volume_set_mute ()">gst_stream_volume_set_mute</a>, function in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume" title="gst_stream_volume_set_volume ()">gst_stream_volume_set_volume</a>, function in <a class="link" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">gststreamvolume</a>
+</dt>
+<dd></dd>
+<a name="idxT"></a><h3 class="title">T</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemux" title="struct GstTagDemux">GstTagDemux</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">gsttagdemux</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass" title="struct GstTagDemuxClass">GstTagDemuxClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">gsttagdemux</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult" title="enum GstTagDemuxResult">GstTagDemuxResult</a>, enum in <a class="link" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">gsttagdemux</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType">GstTagImageType</a>, enum in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags" title="enum GstTagLicenseFlags">GstTagLicenseFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMux" title="struct GstTagMux">GstTagMux</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">gsttagmux</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass" title="struct GstTagMuxClass">GstTagMuxClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">gsttagmux</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-CONTRAST:CAPS" title="GST_TAG_CAPTURING_CONTRAST">GST_TAG_CAPTURING_CONTRAST</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS" title="GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO">GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_COMPENSATION">GST_TAG_CAPTURING_EXPOSURE_COMPENSATION</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_MODE">GST_TAG_CAPTURING_EXPOSURE_MODE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_PROGRAM">GST_TAG_CAPTURING_EXPOSURE_PROGRAM</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-FIRED:CAPS" title="GST_TAG_CAPTURING_FLASH_FIRED">GST_TAG_CAPTURING_FLASH_FIRED</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-MODE:CAPS" title="GST_TAG_CAPTURING_FLASH_MODE">GST_TAG_CAPTURING_FLASH_MODE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS" title="GST_TAG_CAPTURING_FOCAL_LENGTH">GST_TAG_CAPTURING_FOCAL_LENGTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-RATIO:CAPS" title="GST_TAG_CAPTURING_FOCAL_RATIO">GST_TAG_CAPTURING_FOCAL_RATIO</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS" title="GST_TAG_CAPTURING_GAIN_ADJUSTMENT">GST_TAG_CAPTURING_GAIN_ADJUSTMENT</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-ISO-SPEED:CAPS" title="GST_TAG_CAPTURING_ISO_SPEED">GST_TAG_CAPTURING_ISO_SPEED</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-METERING-MODE:CAPS" title="GST_TAG_CAPTURING_METERING_MODE">GST_TAG_CAPTURING_METERING_MODE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SATURATION:CAPS" title="GST_TAG_CAPTURING_SATURATION">GST_TAG_CAPTURING_SATURATION</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS" title="GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE">GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHARPNESS:CAPS" title="GST_TAG_CAPTURING_SHARPNESS">GST_TAG_CAPTURING_SHARPNESS</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS" title="GST_TAG_CAPTURING_SHUTTER_SPEED">GST_TAG_CAPTURING_SHUTTER_SPEED</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SOURCE:CAPS" title="GST_TAG_CAPTURING_SOURCE">GST_TAG_CAPTURING_SOURCE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-WHITE-BALANCE:CAPS" title="GST_TAG_CAPTURING_WHITE_BALANCE">GST_TAG_CAPTURING_WHITE_BALANCE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID:CAPS" title="GST_TAG_CDDA_CDDB_DISCID">GST_TAG_CDDA_CDDB_DISCID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS" title="GST_TAG_CDDA_CDDB_DISCID_FULL">GST_TAG_CDDA_CDDB_DISCID_FULL</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID">GST_TAG_CDDA_MUSICBRAINZ_DISCID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL">GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-TRACK-TAGS:CAPS" title="GST_TAG_CDDA_TRACK_TAGS">GST_TAG_CDDA_TRACK_TAGS</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-CLIP:CAPS" title="GST_TAG_CMML_CLIP">GST_TAG_CMML_CLIP</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-HEAD:CAPS" title="GST_TAG_CMML_HEAD">GST_TAG_CMML_HEAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-STREAM:CAPS" title="GST_TAG_CMML_STREAM">GST_TAG_CMML_STREAM</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8" title="gst_tag_freeform_string_to_utf8 ()">gst_tag_freeform_string_to_utf8</a>, function in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-tag" title="gst_tag_from_id3_tag ()">gst_tag_from_id3_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-user-tag" title="gst_tag_from_id3_user_tag ()">gst_tag_from_id3_user_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag" title="gst_tag_from_vorbis_tag ()">gst_tag_from_vorbis_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-get-id3v2-tag-size" title="gst_tag_get_id3v2_tag_size ()">gst_tag_get_id3v2_tag_size</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code" title="gst_tag_get_language_code()">gst_tag_get_language_code</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-codes" title="gst_tag_get_language_codes ()">gst_tag_get_language_codes</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-1" title="gst_tag_get_language_code_iso_639_1 ()">gst_tag_get_language_code_iso_639_1</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2B" title="gst_tag_get_language_code_iso_639_2B ()">gst_tag_get_language_code_iso_639_2B</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2T" title="gst_tag_get_language_code_iso_639_2T ()">gst_tag_get_language_code_iso_639_2T</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-name" title="gst_tag_get_language_name ()">gst_tag_get_language_name</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">gsttaglanguagecodes</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses" title="gst_tag_get_licenses ()">gst_tag_get_licenses</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-description" title="gst_tag_get_license_description ()">gst_tag_get_license_description</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-flags" title="gst_tag_get_license_flags ()">gst_tag_get_license_flags</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-jurisdiction" title="gst_tag_get_license_jurisdiction ()">gst_tag_get_license_jurisdiction</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-nick" title="gst_tag_get_license_nick ()">gst_tag_get_license_nick</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-title" title="gst_tag_get_license_title ()">gst_tag_get_license_title</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-version" title="gst_tag_get_license_version ()">gst_tag_get_license_version</a>, function in <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">gsttaglicenses</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS" title="GST_TAG_ID3V2_HEADER_SIZE">GST_TAG_ID3V2_HEADER_SIZE</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-count" title="gst_tag_id3_genre_count ()">gst_tag_id3_genre_count</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-get" title="gst_tag_id3_genre_get ()">gst_tag_id3_genre_get</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer" title="gst_tag_image_data_to_image_buffer ()">gst_tag_image_data_to_image_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" title="GST_TAG_IMAGE_HORIZONTAL_PPI">GST_TAG_IMAGE_HORIZONTAL_PPI</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS" title="GST_TAG_IMAGE_VERTICAL_PPI">GST_TAG_IMAGE_VERTICAL_PPI</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-add-id3-image" title="gst_tag_list_add_id3_image ()">gst_tag_list_add_id3_image</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer" title="gst_tag_list_from_exif_buffer ()">gst_tag_list_from_exif_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">gsttagexif</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer-with-tiff-header" title="gst_tag_list_from_exif_buffer_with_tiff_header ()">gst_tag_list_from_exif_buffer_with_tiff_header</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">gsttagexif</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-from-id3v2-tag" title="gst_tag_list_from_id3v2_tag ()">gst_tag_list_from_id3v2_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment-buffer" title="gst_tag_list_from_vorbiscomment_buffer ()">gst_tag_list_from_vorbiscomment_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-from-xmp-buffer" title="gst_tag_list_from_xmp_buffer ()">gst_tag_list_from_xmp_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">gsttagxmp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-new-from-id3v1" title="gst_tag_list_new_from_id3v1 ()">gst_tag_list_new_from_id3v1</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer" title="gst_tag_list_to_exif_buffer ()">gst_tag_list_to_exif_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">gsttagexif</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer-with-tiff-header" title="gst_tag_list_to_exif_buffer_with_tiff_header ()">gst_tag_list_to_exif_buffer_with_tiff_header</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">gsttagexif</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-to-vorbiscomment-buffer" title="gst_tag_list_to_vorbiscomment_buffer ()">gst_tag_list_to_vorbiscomment_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer" title="gst_tag_list_to_xmp_buffer ()">gst_tag_list_to_xmp_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">gsttagxmp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer-full" title="gst_tag_list_to_xmp_buffer_full ()">gst_tag_list_to_xmp_buffer_full</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">gsttagxmp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS" title="GST_TAG_MUSICBRAINZ_ALBUMARTISTID">GST_TAG_MUSICBRAINZ_ALBUMARTISTID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMID:CAPS" title="GST_TAG_MUSICBRAINZ_ALBUMID">GST_TAG_MUSICBRAINZ_ALBUMID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS" title="GST_TAG_MUSICBRAINZ_ARTISTID">GST_TAG_MUSICBRAINZ_ARTISTID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-SORTNAME:CAPS" title="GST_TAG_MUSICBRAINZ_SORTNAME">GST_TAG_MUSICBRAINZ_SORTNAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS" title="GST_TAG_MUSICBRAINZ_TRACKID">GST_TAG_MUSICBRAINZ_TRACKID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRMID:CAPS" title="GST_TAG_MUSICBRAINZ_TRMID">GST_TAG_MUSICBRAINZ_TRMID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment" title="gst_tag_parse_extended_comment ()">gst_tag_parse_extended_comment</a>, function in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags" title="gst_tag_register_musicbrainz_tags ()">gst_tag_register_musicbrainz_tags</a>, function in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-to-id3-tag" title="gst_tag_to_id3_tag ()">gst_tag_to_id3_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">gsttagid3</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-comments" title="gst_tag_to_vorbis_comments ()">gst_tag_to_vorbis_comments</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-tag" title="gst_tag_to_vorbis_tag ()">gst_tag_to_vorbis_tag</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas" title="gst_tag_xmp_list_schemas ()">gst_tag_xmp_list_schemas</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">gsttagxmp</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-all-schemas" title="gst_tag_xmp_writer_add_all_schemas ()">gst_tag_xmp_writer_add_all_schemas</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-schema" title="gst_tag_xmp_writer_add_schema ()">gst_tag_xmp_writer_add_schema</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-has-schema" title="gst_tag_xmp_writer_has_schema ()">gst_tag_xmp_writer_has_schema</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-all-schemas" title="gst_tag_xmp_writer_remove_all_schemas ()">gst_tag_xmp_writer_remove_all_schemas</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-schema" title="gst_tag_xmp_writer_remove_schema ()">gst_tag_xmp_writer_remove_schema</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-tag-list-to-xmp-buffer" title="gst_tag_xmp_writer_tag_list_to_xmp_buffer ()">gst_tag_xmp_writer_tag_list_to_xmp_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">gsttagxmpwriter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-struct" title="GstTuner">GstTuner</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-channel-changed" title='The "channel-changed" signal'>GstTuner::channel-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-frequency-changed" title='The "frequency-changed" signal'>GstTuner::frequency-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-norm-changed" title='The "norm-changed" signal'>GstTuner::norm-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-signal-changed" title='The "signal-changed" signal'>GstTuner::signal-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-struct" title="struct GstTunerChannel">GstTunerChannel</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">gsttunerchannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-frequency-changed" title='The "frequency-changed" signal'>GstTunerChannel::frequency-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">gsttunerchannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-signal-changed" title='The "signal-changed" signal'>GstTunerChannel::signal-changed</a>, object signal in <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">gsttunerchannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags" title="enum GstTunerChannelFlags">GstTunerChannelFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">gsttunerchannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTunerClass" title="struct GstTunerClass">GstTunerClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm-struct" title="struct GstTunerNorm">GstTunerNorm</a>, struct in <a class="link" href="gst-plugins-base-libs-gsttunernorm.html" title="gsttunernorm">gsttunernorm</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-channel-changed" title="gst_tuner_channel_changed ()">gst_tuner_channel_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS" title="GST_TUNER_CHANNEL_HAS_FLAG()">GST_TUNER_CHANNEL_HAS_FLAG</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">gsttunerchannel</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-channel-by-name" title="gst_tuner_find_channel_by_name ()">gst_tuner_find_channel_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-norm-by-name" title="gst_tuner_find_norm_by_name ()">gst_tuner_find_norm_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-frequency-changed" title="gst_tuner_frequency_changed ()">gst_tuner_frequency_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-channel" title="gst_tuner_get_channel ()">gst_tuner_get_channel</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-frequency" title="gst_tuner_get_frequency ()">gst_tuner_get_frequency</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-norm" title="gst_tuner_get_norm ()">gst_tuner_get_norm</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-channels" title="gst_tuner_list_channels ()">gst_tuner_list_channels</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-norms" title="gst_tuner_list_norms ()">gst_tuner_list_norms</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-norm-changed" title="gst_tuner_norm_changed ()">gst_tuner_norm_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-channel" title="gst_tuner_set_channel ()">gst_tuner_set_channel</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency" title="gst_tuner_set_frequency ()">gst_tuner_set_frequency</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-norm" title="gst_tuner_set_norm ()">gst_tuner_set_norm</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-changed" title="gst_tuner_signal_changed ()">gst_tuner_signal_changed</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength" title="gst_tuner_signal_strength ()">gst_tuner_signal_strength</a>, function in <a class="link" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">gsttuner</a>
+</dt>
+<dd></dd>
+<a name="idxV"></a><h3 class="title">V</h3>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback" title="GstVideoConvertFrameCallback ()">GstVideoConvertFrameCallback</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct" title="struct GstVideoFilter">GstVideoFilter</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">gstvideofilter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass" title="struct GstVideoFilterClass">GstVideoFilterClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">gstvideofilter</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat">GstVideoFormat</a>, enum in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct" title="GstVideoOrientation">GstVideoOrientation</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface" title="struct GstVideoOrientationInterface">GstVideoOrientationInterface</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle">GstVideoRectangle</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct" title="struct GstVideoSink">GstVideoSink</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame" title='The "show-preroll-frame" property'>GstVideoSink:show-preroll-frame</a>, object property in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSinkClass" title="struct GstVideoSinkClass">GstVideoSinkClass</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio" title="gst_video_calculate_display_ratio ()">gst_video_calculate_display_ratio</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame" title="gst_video_convert_frame ()">gst_video_convert_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame-async" title="gst_video_convert_frame_async ()">gst_video_convert_frame_async</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()">gst_video_event_new_still_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame" title="gst_video_event_parse_still_frame ()">gst_video_event_parse_still_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-format-from-fourcc" title="gst_video_format_from_fourcc ()">gst_video_format_from_fourcc</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-format-to-fourcc" title="gst_video_format_to_fourcc ()">gst_video_format_to_fourcc</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FPS-RANGE:CAPS" title="GST_VIDEO_FPS_RANGE">GST_VIDEO_FPS_RANGE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hcenter" title="gst_video_orientation_get_hcenter ()">gst_video_orientation_get_hcenter</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hflip" title="gst_video_orientation_get_hflip ()">gst_video_orientation_get_hflip</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vcenter" title="gst_video_orientation_get_vcenter ()">gst_video_orientation_get_vcenter</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vflip" title="gst_video_orientation_get_vflip ()">gst_video_orientation_get_vflip</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hcenter" title="gst_video_orientation_set_hcenter ()">gst_video_orientation_set_hcenter</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hflip" title="gst_video_orientation_set_hflip ()">gst_video_orientation_set_hflip</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vcenter" title="gst_video_orientation_set_vcenter ()">gst_video_orientation_set_vcenter</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vflip" title="gst_video_orientation_set_vflip ()">gst_video_orientation_set_vflip</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose" title="gst_video_overlay_expose ()">gst_video_overlay_expose</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle" title="gst_video_overlay_got_window_handle ()">gst_video_overlay_got_window_handle</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-handle-events" title="gst_video_overlay_handle_events ()">gst_video_overlay_handle_events</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle" title="gst_video_overlay_prepare_window_handle ()">gst_video_overlay_prepare_window_handle</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-render-rectangle" title="gst_video_overlay_set_render_rectangle ()">gst_video_overlay_set_render_rectangle</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()">gst_video_overlay_set_window_handle</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">gstvideooverlay</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-parse-caps-palette" title="gst_video_parse_caps_palette ()">gst_video_parse_caps_palette</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#gst-video-sink-center-rect" title="gst_video_sink_center_rect ()">gst_video_sink_center_rect</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-HEIGHT:CAPS" title="GST_VIDEO_SINK_HEIGHT()">GST_VIDEO_SINK_HEIGHT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-PAD:CAPS" title="GST_VIDEO_SINK_PAD()">GST_VIDEO_SINK_PAD</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-WIDTH:CAPS" title="GST_VIDEO_SINK_WIDTH()">GST_VIDEO_SINK_WIDTH</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS" title="GST_VIDEO_SIZE_RANGE">GST_VIDEO_SIZE_RANGE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-vorbis-tag-add" title="gst_vorbis_tag_add ()">gst_vorbis_tag_add</a>, function in <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">gsttagvorbis</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html
new file mode 100644
index 0000000..0a45ce1
--- /dev/null
+++ b/docs/libs/html/compiling.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Compiling</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="next" href="gstreamer-app.html" title="App Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gstreamer-plugins-base.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-app.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="compiling"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Compiling</span></h2>
+<p>Compiling against the base plugins libraries — 
+How to compile against the base plugins libraries
+</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id444048"></a><h2>Compiling against the base plugins libraries</h2>
+<p>
+To compile against these libraries, you need to tell the compiler where to 
+find the header files and libraries. This is done with the
+<span class="application">pkg-config</span> utility.
+</p>
+<p>
+The following interactive shell session demonstrates how
+<span class="application">pkg-config</span> is used:
+</p>
+<pre class="programlisting">
+$ pkg-config --cflags gstreamer-plugins-base-0.11
+-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -pthread -I/usr/include/gstreamer-0.11 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2
+$ pkg-config --libs gstreamer-plugins-base-0.11
+-Wl,--export-dynamic -pthread -lgstreamer-0.11 -lgobject-2.0 -lgmodule-2.0 -ldl -lgthread-2.0 -lxml2 -lpthread -lz -lm -lglib-2.0
+</pre>
+<p>
+</p>
+<p>
+Note that, because of the number of libraries provided in this package,
+the pkg-config information <span class="emphasis"><em>does not add -l flags</em></span> itself
+to choose the libraries to link to.  You must add these yourself to select
+which of the libraries you want to use.
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-appsink.html b/docs/libs/html/gst-plugins-base-libs-appsink.html
new file mode 100644
index 0000000..de655e2
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-appsink.html
@@ -0,0 +1,559 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>appsink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-app.html" title="App Library">
+<link rel="prev" href="gst-plugins-base-libs-appsrc.html" title="appsrc">
+<link rel="next" href="gstreamer-audio.html" title="Audio Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-appsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-app.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-audio.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-appsink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-appsink.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-appsink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-appsink.top_of_page"></a>appsink</span></h2>
+<p>appsink — Easy way for applications to extract buffers from a
+    pipeline</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-appsink.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/app/gstappsink.h&gt;
+
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-caps" title="gst_app_sink_set_caps ()">gst_app_sink_set_caps</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-caps" title="gst_app_sink_get_caps ()">gst_app_sink_get_caps</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()">gst_app_sink_is_eos</a>                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-emit-signals" title="gst_app_sink_set_emit_signals ()">gst_app_sink_set_emit_signals</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> emit</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-emit-signals" title="gst_app_sink_get_emit_signals ()">gst_app_sink_get_emit_signals</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-max-buffers" title="gst_app_sink_set_max_buffers ()">gst_app_sink_set_max_buffers</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> max</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-max-buffers" title="gst_app_sink_get_max_buffers ()">gst_app_sink_get_max_buffers</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-drop" title="gst_app_sink_set_drop ()">gst_app_sink_set_drop</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> drop</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-get-drop" title="gst_app_sink_get_drop ()">gst_app_sink_get_drop</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" title="gst_app_sink_pull_preroll ()">gst_app_sink_pull_preroll</a>           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" title="gst_app_sink_pull_buffer ()">gst_app_sink_pull_buffer</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="returnvalue">GstBufferList</span></a> *     <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer-list" title="gst_app_sink_pull_buffer_list ()">gst_app_sink_pull_buffer_list</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);
+                    <a class="link" href="gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks" title="GstAppSinkCallbacks">GstAppSinkCallbacks</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-callbacks" title="gst_app_sink_set_callbacks ()">gst_app_sink_set_callbacks</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks" title="GstAppSinkCallbacks"><span class="type">GstAppSinkCallbacks</span></a> *callbacks</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsink.description"></a><h2>Description</h2>
+<p>
+Appsink is a sink plugin that supports many different methods for making
+the application get a handle on the GStreamer data in a pipeline. Unlike
+most GStreamer elements, Appsink provides external API functions.
+</p>
+<p>
+appsink can be used by linking to the gstappsink.h header file to access the
+methods or by using the appsink action signals and properties.
+</p>
+<p>
+The normal way of retrieving buffers from appsink is by using the
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" title="gst_app_sink_pull_buffer ()"><code class="function">gst_app_sink_pull_buffer()</code></a> and <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" title="gst_app_sink_pull_preroll ()"><code class="function">gst_app_sink_pull_preroll()</code></a> methods.
+These methods block until a buffer becomes available in the sink or when the
+sink is shut down or reaches EOS.
+</p>
+<p>
+Appsink will internally use a queue to collect buffers from the streaming
+thread. If the application is not pulling buffers fast enough, this queue
+will consume a lot of memory over time. The "max-buffers" property can be
+used to limit the queue size. The "drop" property controls whether the
+streaming thread blocks or if older buffers are dropped when the maximum
+queue size is reached. Note that blocking the streaming thread can negatively
+affect real-time performance and should be avoided.
+</p>
+<p>
+If a blocking behaviour is not desirable, setting the "emit-signals" property
+to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> will make appsink emit the "new-buffer" and "new-preroll" signals
+when a buffer can be pulled without blocking.
+</p>
+<p>
+The "caps" property on appsink can be used to control the formats that
+appsink can receive. This property can contain non-fixed caps, the format of
+the pulled buffers can be obtained by getting the buffer caps.
+</p>
+<p>
+If one of the pull-preroll or pull-buffer methods return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, the appsink
+is stopped or in the EOS state. You can check for the EOS state with the
+"eos" property or with the <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()"><code class="function">gst_app_sink_is_eos()</code></a> method.
+</p>
+<p>
+The eos signal can also be used to be informed when the EOS state is reached
+to avoid polling.
+</p>
+<p>
+Last reviewed on 2008-12-17 (0.10.22)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-app-sink-set-caps"></a><h3>gst_app_sink_set_caps ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_sink_set_caps               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Set the capabilities on the appsink element.  This function takes
+a copy of the caps structure. After calling this method, the sink will only
+accept caps that match <em class="parameter"><code>caps</code></em>. If <em class="parameter"><code>caps</code></em> is non-fixed, you must check the caps
+on the buffers to get the actual used caps.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>caps to set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-get-caps"></a><h3>gst_app_sink_get_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_app_sink_get_caps               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Get the configured caps on <em class="parameter"><code>appsink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> accepted by the sink. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-is-eos"></a><h3>gst_app_sink_is_eos ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_app_sink_is_eos                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Check if <em class="parameter"><code>appsink</code></em> is EOS, which is when no more buffers can be pulled because
+an EOS event was received.
+</p>
+<p>
+This function also returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> when the appsink is not in the PAUSED or
+PLAYING state.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if no more buffers can be pulled and the appsink is EOS.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-set-emit-signals"></a><h3>gst_app_sink_set_emit_signals ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_sink_set_emit_signals       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> emit</code></em>);</pre>
+<p>
+Make appsink emit the "new-preroll" and "new-buffer" signals. This option is
+by default disabled because signal emission is expensive and unneeded when
+the application prefers to operate in pull mode.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>emit</code></em> :</span></p></td>
+<td>the new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-get-emit-signals"></a><h3>gst_app_sink_get_emit_signals ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_app_sink_get_emit_signals       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Check if appsink will emit the "new-preroll" and "new-buffer" signals.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>appsink</code></em> is emiting the "new-preroll" and "new-buffer"
+signals.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-set-max-buffers"></a><h3>gst_app_sink_set_max_buffers ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_sink_set_max_buffers        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> max</code></em>);</pre>
+<p>
+Set the maximum amount of buffers that can be queued in <em class="parameter"><code>appsink</code></em>. After this
+amount of buffers are queued in appsink, any more buffers will block upstream
+elements until a buffer is pulled from <em class="parameter"><code>appsink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>the maximum number of buffers to queue</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-get-max-buffers"></a><h3>gst_app_sink_get_max_buffers ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_app_sink_get_max_buffers        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Get the maximum amount of buffers that can be queued in <em class="parameter"><code>appsink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The maximum amount of buffers that can be queued.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-set-drop"></a><h3>gst_app_sink_set_drop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_sink_set_drop               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> drop</code></em>);</pre>
+<p>
+Instruct <em class="parameter"><code>appsink</code></em> to drop old buffers when the maximum amount of queued
+buffers is reached.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drop</code></em> :</span></p></td>
+<td>the new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-get-drop"></a><h3>gst_app_sink_get_drop ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_app_sink_get_drop               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Check if <em class="parameter"><code>appsink</code></em> will drop old buffers when the maximum amount of queued
+buffers is reached.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>appsink</code></em> is dropping old buffers when the queue is
+filled.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-pull-preroll"></a><h3>gst_app_sink_pull_preroll ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_app_sink_pull_preroll           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+Get the last preroll buffer in <em class="parameter"><code>appsink</code></em>. This was the buffer that caused the
+appsink to preroll in the PAUSED state. This buffer can be pulled many times
+and remains available to the application even after EOS.
+</p>
+<p>
+This function is typically used when dealing with a pipeline in the PAUSED
+state. Calling this function after doing a seek will give the buffer right
+after the seek position.
+</p>
+<p>
+Note that the preroll buffer will also be returned as the first buffer
+when calling <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" title="gst_app_sink_pull_buffer ()"><code class="function">gst_app_sink_pull_buffer()</code></a>.
+</p>
+<p>
+If an EOS event was received before any buffers, this function returns
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Use <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()"><code class="function">gst_app_sink_is_eos()</code></a> to check for the EOS condition.
+</p>
+<p>
+This function blocks until a preroll buffer or EOS is received or the appsink
+element is set to the READY/NULL state.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> or NULL when the appsink is stopped or EOS.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-pull-buffer"></a><h3>gst_app_sink_pull_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_app_sink_pull_buffer            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+This function blocks until a buffer or EOS becomes available or the appsink
+element is set to the READY/NULL state.
+</p>
+<p>
+This function will only return buffers when the appsink is in the PLAYING
+state. All rendered buffers will be put in a queue so that the application
+can pull buffers at its own rate. Note that when the application does not
+pull buffers fast enough, the queued buffers could consume a lot of memory,
+especially when dealing with raw video frames.
+</p>
+<p>
+If an EOS event was received before any buffers, this function returns
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Use <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()"><code class="function">gst_app_sink_is_eos()</code></a> to check for the EOS condition.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> or NULL when the appsink is stopped or EOS.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-pull-buffer-list"></a><h3>gst_app_sink_pull_buffer_list ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="returnvalue">GstBufferList</span></a> *     gst_app_sink_pull_buffer_list       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>);</pre>
+<p>
+This function blocks until a buffer list or EOS becomes available or the
+appsink element is set to the READY/NULL state.
+</p>
+<p>
+This function will only return buffer lists when the appsink is in the
+PLAYING state. All rendered buffer lists will be put in a queue so that
+the application can pull buffer lists at its own rate. Note that when
+the application does not pull buffer lists fast enough, the queued buffer
+lists could consume a lot of memory, especially when dealing with raw
+video frames.
+</p>
+<p>
+If an EOS event was received before any buffer lists, this function returns
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Use <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" title="gst_app_sink_is_eos ()"><code class="function">gst_app_sink_is_eos()</code></a> to check for the EOS condition.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a> or NULL when the appsink is stopped or EOS.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSinkCallbacks"></a><h3>GstAppSinkCallbacks</h3>
+<pre class="programlisting">typedef struct {
+  void          (*eos)              (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_preroll)      (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_buffer)       (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_buffer_list)  (GstAppSink *sink, gpointer user_data);
+} GstAppSinkCallbacks;
+</pre>
+<p>
+A set of callbacks that can be installed on the appsink with
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-set-callbacks" title="gst_app_sink_set_callbacks ()"><code class="function">gst_app_sink_set_callbacks()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSinkCallbacks.eos"></a>eos</code></em> ()</span></p></td>
+<td>Called when the end-of-stream has been reached. This callback
+is called from the steaming thread.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSinkCallbacks.new-preroll"></a>new_preroll</code></em> ()</span></p></td>
+<td>Called when a new preroll buffer is available.
+This callback is called from the steaming thread.
+The new preroll buffer can be retrieved with
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" title="gst_app_sink_pull_preroll ()"><code class="function">gst_app_sink_pull_preroll()</code></a> either from this callback
+or from any other thread.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSinkCallbacks.new-buffer"></a>new_buffer</code></em> ()</span></p></td>
+<td>Called when a new buffer is available.
+This callback is called from the steaming thread.
+The new buffer can be retrieved with
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" title="gst_app_sink_pull_buffer ()"><code class="function">gst_app_sink_pull_buffer()</code></a> either from this callback
+or from any other thread.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSinkCallbacks.new-buffer-list"></a>new_buffer_list</code></em> ()</span></p></td>
+<td>Called when a new bufferlist is available.
+This callback is called from the steaming thread.
+The new bufferlist can be retrieved with
+<a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer-list" title="gst_app_sink_pull_buffer_list ()"><code class="function">gst_app_sink_pull_buffer_list()</code></a> either from this callback
+or from any other thread.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-sink-set-callbacks"></a><h3>gst_app_sink_set_callbacks ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_sink_set_callbacks          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *appsink</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks" title="GstAppSinkCallbacks"><span class="type">GstAppSinkCallbacks</span></a> *callbacks</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>
+Set callbacks which will be executed for each new preroll, new buffer and eos.
+This is an alternative to using the signals, it has lower overhead and is thus
+less expensive, but also less flexible.
+</p>
+<p>
+If callbacks are installed, no signals will be emited for performance
+reasons.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsink</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callbacks</code></em> :</span></p></td>
+<td>the callbacks</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>a user_data argument for the callbacks</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
+<td>a destroy notify function</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsink.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html"><span class="type">GstBaseSink</span></a>, appsrc
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-appsrc.html b/docs/libs/html/gst-plugins-base-libs-appsrc.html
new file mode 100644
index 0000000..cb18273
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-appsrc.html
@@ -0,0 +1,654 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>appsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-app.html" title="App Library">
+<link rel="prev" href="gstreamer-app.html" title="App Library">
+<link rel="next" href="gst-plugins-base-libs-appsink.html" title="appsink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-app.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-app.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-appsink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-appsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-appsrc.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-appsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-appsrc.top_of_page"></a>appsrc</span></h2>
+<p>appsrc — Easy way for applications to inject buffers into a
+    pipeline</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-appsrc.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/app/gstappsrc.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType">GstAppStreamType</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-caps" title="gst_app_src_set_caps ()">gst_app_src_set_caps</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-caps" title="gst_app_src_get_caps ()">gst_app_src_get_caps</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-latency" title="gst_app_src_get_latency ()">gst_app_src_get_latency</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *max</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-latency" title="gst_app_src_set_latency ()">gst_app_src_set_latency</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> max</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-size" title="gst_app_src_set_size ()">gst_app_src_set_size</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> size</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-size" title="gst_app_src_get_size ()">gst_app_src_get_size</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-stream-type" title="gst_app_src_set_stream_type ()">gst_app_src_set_stream_type</a>         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType"><span class="type">GstAppStreamType</span></a> type</code></em>);
+<a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType"><span class="returnvalue">GstAppStreamType</span></a>    <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-stream-type" title="gst_app_src_get_stream_type ()">gst_app_src_get_stream_type</a>         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-max-bytes" title="gst_app_src_set_max_bytes ()">gst_app_src_set_max_bytes</a>           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> max</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-max-bytes" title="gst_app_src_get_max_bytes ()">gst_app_src_get_max_bytes</a>           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-get-emit-signals" title="gst_app_src_get_emit_signals ()">gst_app_src_get_emit_signals</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals" title="gst_app_src_set_emit_signals ()">gst_app_src_set_emit_signals</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> emit</code></em>);
+                    <a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks" title="GstAppSrcCallbacks">GstAppSrcCallbacks</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks" title="gst_app_src_set_callbacks ()">gst_app_src_set_callbacks</a>           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks" title="GstAppSrcCallbacks"><span class="type">GstAppSrcCallbacks</span></a> *callbacks</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer" title="gst_app_src_push_buffer ()">gst_app_src_push_buffer</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" title="gst_app_src_end_of_stream ()">gst_app_src_end_of_stream</a>           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsrc.description"></a><h2>Description</h2>
+<p>
+The appsrc element can be used by applications to insert data into a
+GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+external API functions.
+</p>
+<p>
+appsrc can be used by linking with the libgstapp library to access the
+methods directly or by using the appsrc action signals.
+</p>
+<p>
+Before operating appsrc, the caps property must be set to a fixed caps
+describing the format of the data that will be pushed with appsrc. An
+exception to this is when pushing buffers with unknown caps, in which case no
+caps should be set. This is typically true of file-like sources that push raw
+byte buffers.
+</p>
+<p>
+The main way of handing data to the appsrc element is by calling the
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer" title="gst_app_src_push_buffer ()"><code class="function">gst_app_src_push_buffer()</code></a> method or by emiting the push-buffer action signal.
+This will put the buffer onto a queue from which appsrc will read from in its
+streaming thread. It is important to note that data transport will not happen
+from the thread that performed the push-buffer call.
+</p>
+<p>
+The "max-bytes" property controls how much data can be queued in appsrc
+before appsrc considers the queue full. A filled internal queue will always
+signal the "enough-data" signal, which signals the application that it should
+stop pushing data into appsrc. The "block" property will cause appsrc to
+block the push-buffer method until free data becomes available again.
+</p>
+<p>
+When the internal queue is running out of data, the "need-data" signal is
+emited, which signals the application that it should start pushing more data
+into appsrc.
+</p>
+<p>
+In addition to the "need-data" and "enough-data" signals, appsrc can emit the
+"seek-data" signal when the "stream-mode" property is set to "seekable" or
+"random-access". The signal argument will contain the new desired position in
+the stream expressed in the unit set with the "format" property. After
+receiving the seek-data signal, the application should push-buffers from the
+new position.
+</p>
+<p>
+These signals allow the application to operate the appsrc in two different
+ways:
+</p>
+<p>
+The push model, in which the application repeadedly calls the push-buffer method
+with a new buffer. Optionally, the queue size in the appsrc can be controlled
+with the enough-data and need-data signals by respectively stopping/starting
+the push-buffer calls. This is a typical mode of operation for the
+stream-type "stream" and "seekable". Use this model when implementing various
+network protocols or hardware devices.
+</p>
+<p>
+The pull model where the need-data signal triggers the next push-buffer call.
+This mode is typically used in the "random-access" stream-type. Use this
+model for file access or other randomly accessable sources. In this mode, a
+buffer of exactly the amount of bytes given by the need-data signal should be
+pushed into appsrc.
+</p>
+<p>
+In all modes, the size property on appsrc should contain the total stream
+size in bytes. Setting this property is mandatory in the random-access mode.
+For the stream and seekable modes, setting this property is optional but
+recommended.
+</p>
+<p>
+When the application is finished pushing data into appsrc, it should call
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" title="gst_app_src_end_of_stream ()"><code class="function">gst_app_src_end_of_stream()</code></a> or emit the end-of-stream action signal. After
+this call, no more buffers can be pushed into appsrc until a flushing seek
+happened or the state of the appsrc has gone through READY.
+</p>
+<p>
+Last reviewed on 2008-12-17 (0.10.10)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAppStreamType"></a><h3>enum GstAppStreamType</h3>
+<pre class="programlisting">typedef enum {
+  GST_APP_STREAM_TYPE_STREAM,
+  GST_APP_STREAM_TYPE_SEEKABLE,
+  GST_APP_STREAM_TYPE_RANDOM_ACCESS
+} GstAppStreamType;
+</pre>
+<p>
+The stream type.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-APP-STREAM-TYPE-STREAM:CAPS"></a><span class="term"><code class="literal">GST_APP_STREAM_TYPE_STREAM</code></span></p></td>
+<td>No seeking is supported in the stream, such as a
+live stream.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-APP-STREAM-TYPE-SEEKABLE:CAPS"></a><span class="term"><code class="literal">GST_APP_STREAM_TYPE_SEEKABLE</code></span></p></td>
+<td>The stream is seekable but seeking might not
+be very fast, such as data from a webserver. 
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS"></a><span class="term"><code class="literal">GST_APP_STREAM_TYPE_RANDOM_ACCESS</code></span></p></td>
+<td>The stream is seekable and seeking is fast,
+such as in a local file.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-caps"></a><h3>gst_app_src_set_caps ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_caps                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Set the capabilities on the appsrc element.  This function takes
+a copy of the caps structure. After calling this method, the source will
+only produce caps that match <em class="parameter"><code>caps</code></em>. <em class="parameter"><code>caps</code></em> must be fixed and the caps on the
+buffers must match the caps or left NULL.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>caps to set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-caps"></a><h3>gst_app_src_get_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_app_src_get_caps                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Get the configured caps on <em class="parameter"><code>appsrc</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> produced by the source. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-latency"></a><h3>gst_app_src_get_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_get_latency             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *max</code></em>);</pre>
+<p>
+Retrieve the min and max latencies in <em class="parameter"><code>min</code></em> and <em class="parameter"><code>max</code></em> respectively.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>the min latency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>the min latency</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-latency"></a><h3>gst_app_src_set_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_latency             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> max</code></em>);</pre>
+<p>
+Configure the <em class="parameter"><code>min</code></em> and <em class="parameter"><code>max</code></em> latency in <em class="parameter"><code>src</code></em>. If <em class="parameter"><code>min</code></em> is set to -1, the
+default latency calculations for pseudo-live sources will be used.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>the min latency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>the min latency</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-size"></a><h3>gst_app_src_set_size ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_size                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> size</code></em>);</pre>
+<p>
+Set the size of the stream in bytes. A value of -1 means that the size is
+not known.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size to set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-size"></a><h3>gst_app_src_get_size ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              gst_app_src_get_size                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Get the size of the stream in bytes. A value of -1 means that the size is
+not known.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the size of the stream previously set with <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-size" title="gst_app_src_set_size ()"><code class="function">gst_app_src_set_size()</code></a>;</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-stream-type"></a><h3>gst_app_src_set_stream_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_stream_type         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType"><span class="type">GstAppStreamType</span></a> type</code></em>);</pre>
+<p>
+Set the stream type on <em class="parameter"><code>appsrc</code></em>. For seekable streams, the "seek" signal must
+be connected to.
+</p>
+<p>
+A stream_type stream
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-stream-type"></a><h3>gst_app_src_get_stream_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppStreamType" title="enum GstAppStreamType"><span class="returnvalue">GstAppStreamType</span></a>    gst_app_src_get_stream_type         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Get the stream type. Control the stream type of <em class="parameter"><code>appsrc</code></em>
+with <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-stream-type" title="gst_app_src_set_stream_type ()"><code class="function">gst_app_src_set_stream_type()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the stream type.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-max-bytes"></a><h3>gst_app_src_set_max_bytes ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_max_bytes           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> max</code></em>);</pre>
+<p>
+Set the maximum amount of bytes that can be queued in <em class="parameter"><code>appsrc</code></em>.
+After the maximum amount of bytes are queued, <em class="parameter"><code>appsrc</code></em> will emit the
+"enough-data" signal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>the maximum number of bytes to queue</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-max-bytes"></a><h3>gst_app_src_get_max_bytes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             gst_app_src_get_max_bytes           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Get the maximum amount of bytes that can be queued in <em class="parameter"><code>appsrc</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The maximum amount of bytes that can be queued.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-get-emit-signals"></a><h3>gst_app_src_get_emit_signals ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_app_src_get_emit_signals        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Check if appsrc will emit the "new-preroll" and "new-buffer" signals.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>appsrc</code></em> is emiting the "new-preroll" and "new-buffer"
+signals.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-emit-signals"></a><h3>gst_app_src_set_emit_signals ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_emit_signals        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> emit</code></em>);</pre>
+<p>
+Make appsrc emit the "new-preroll" and "new-buffer" signals. This option is
+by default disabled because signal emission is expensive and unneeded when
+the application prefers to operate in pull mode.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>emit</code></em> :</span></p></td>
+<td>the new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrcCallbacks"></a><h3>GstAppSrcCallbacks</h3>
+<pre class="programlisting">typedef struct {
+  void      (*need_data)    (GstAppSrc *src, guint length, gpointer user_data);
+  void      (*enough_data)  (GstAppSrc *src, gpointer user_data);
+  gboolean  (*seek_data)    (GstAppSrc *src, guint64 offset, gpointer user_data);
+} GstAppSrcCallbacks;
+</pre>
+<p>
+A set of callbacks that can be installed on the appsrc with
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks" title="gst_app_src_set_callbacks ()"><code class="function">gst_app_src_set_callbacks()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSrcCallbacks.need-data"></a>need_data</code></em> ()</span></p></td>
+<td>Called when the appsrc needs more data. A buffer or EOS should be
+pushed to appsrc from this thread or another thread. <em class="parameter"><code>length</code></em> is just a hint
+and when it is set to -1, any number of bytes can be pushed into <em class="parameter"><code>appsrc</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSrcCallbacks.enough-data"></a>enough_data</code></em> ()</span></p></td>
+<td>Called when appsrc has enough data. It is recommended that the
+application stops calling push-buffer until the need_data callback is
+emited again to avoid excessive buffer queueing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAppSrcCallbacks.seek-data"></a>seek_data</code></em> ()</span></p></td>
+<td>Called when a seek should be performed to the offset.
+The next push-buffer should produce buffers from the new <em class="parameter"><code>offset</code></em>.
+This callback is only called for seekable stream types.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-set-callbacks"></a><h3>gst_app_src_set_callbacks ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_app_src_set_callbacks           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks" title="GstAppSrcCallbacks"><span class="type">GstAppSrcCallbacks</span></a> *callbacks</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>
+Set callbacks which will be executed when data is needed, enough data has
+been collected or when a seek should be performed.
+This is an alternative to using the signals, it has lower overhead and is thus
+less expensive, but also less flexible.
+</p>
+<p>
+If callbacks are installed, no signals will be emited for performance
+reasons.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callbacks</code></em> :</span></p></td>
+<td>the callbacks</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>a user_data argument for the callbacks</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
+<td>a destroy notify function</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-push-buffer"></a><h3>gst_app_src_push_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_app_src_push_buffer             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Adds a buffer to the queue of buffers that the appsrc element will
+push to its source pad.  This function takes ownership of the buffer.
+</p>
+<p>
+When the block property is TRUE, this function can block until free
+space becomes available in the queue.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> to push</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> when the buffer was successfuly queued.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-WRONG-STATE:CAPS"><span class="type">GST_FLOW_WRONG_STATE</span></a> when <em class="parameter"><code>appsrc</code></em> is not PAUSED or PLAYING.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-UNEXPECTED:CAPS"><span class="type">GST_FLOW_UNEXPECTED</span></a> when EOS occured.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-app-src-end-of-stream"></a><h3>gst_app_src_end_of_stream ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_app_src_end_of_stream           (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
+<p>
+Indicates to the appsrc element that the last buffer queued in the
+element is the last buffer of the stream.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appsrc</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> when the EOS was successfuly queued.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-WRONG-STATE:CAPS"><span class="type">GST_FLOW_WRONG_STATE</span></a> when <em class="parameter"><code>appsrc</code></em> is not PAUSED or PLAYING.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-appsrc.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html"><span class="type">GstBaseSrc</span></a>, appsink
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-encoding-profile.html b/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
new file mode 100644
index 0000000..48f1404
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
@@ -0,0 +1,1545 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>encoding-profile</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">
+<link rel="next" href="gstreamer-video.html" title="Video Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstdiscoverer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-video.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-encoding-profile.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-encoding-profile.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-encoding-profile.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-encoding-profile"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-encoding-profile.top_of_page"></a>encoding-profile</span></h2>
+<p>encoding-profile — Encoding profile library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-encoding-profile.synopsis"></a><h2>Synopsis</h2>
+<a name="GstEncodingProfile"></a><a name="GstEncodingContainerProfile"></a><a name="GstEncodingAudioProfile"></a><a name="GstEncodingVideoProfile"></a><a name="GstEncodingTarget"></a><pre class="synopsis">
+#include &lt;gst/pbutils/encoding-profile.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile-struct" title="GstEncodingProfile">GstEncodingProfile</a>;
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref" title="gst_encoding_profile_unref()">gst_encoding_profile_unref</a>          (profile)
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref" title="gst_encoding_profile_ref()">gst_encoding_profile_ref</a>            (profile)
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="returnvalue">GstEncodingProfile</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-find" title="gst_encoding_profile_find ()">gst_encoding_profile_find</a>          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *targetname</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *profilename</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-name" title="gst_encoding_profile_get_name ()">gst_encoding_profile_get_name</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-description" title="gst_encoding_profile_get_description ()">gst_encoding_profile_get_description</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-format" title="gst_encoding_profile_get_format ()">gst_encoding_profile_get_format</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-preset" title="gst_encoding_profile_get_preset ()">gst_encoding_profile_get_preset</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-presence" title="gst_encoding_profile_get_presence ()">gst_encoding_profile_get_presence</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" title="gst_encoding_profile_get_restriction ()">gst_encoding_profile_get_restriction</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name" title="gst_encoding_profile_set_name ()">gst_encoding_profile_set_name</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description" title="gst_encoding_profile_set_description ()">gst_encoding_profile_set_description</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format" title="gst_encoding_profile_set_format ()">gst_encoding_profile_set_format</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset" title="gst_encoding_profile_set_preset ()">gst_encoding_profile_set_preset</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction" title="gst_encoding_profile_set_restriction ()">gst_encoding_profile_set_restriction</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence" title="gst_encoding_profile_set_presence ()">gst_encoding_profile_set_presence</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal" title="gst_encoding_profile_is_equal ()">gst_encoding_profile_is_equal</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *a</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *b</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps" title="gst_encoding_profile_get_input_caps ()">gst_encoding_profile_get_input_caps</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick" title="gst_encoding_profile_get_type_nick ()">gst_encoding_profile_get_type_nick</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+
+                    <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile-struct" title="GstEncodingContainerProfile">GstEncodingContainerProfile</a>;
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="returnvalue">GstEncodingContainerProfile</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new" title="gst_encoding_container_profile_new ()">gst_encoding_container_profile_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-add-profile" title="gst_encoding_container_profile_add_profile ()">gst_encoding_container_profile_add_profile</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *container</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-contains-profile" title="gst_encoding_container_profile_contains_profile ()">gst_encoding_container_profile_contains_profile</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *container</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-get-profiles" title="gst_encoding_container_profile_get_profiles ()">gst_encoding_container_profile_get_profiles</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *profile</code></em>);
+
+                    <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile-struct" title="GstEncodingAudioProfile">GstEncodingAudioProfile</a>;
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="returnvalue">GstEncodingAudioProfile</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-audio-profile-new" title="gst_encoding_audio_profile_new ()">gst_encoding_audio_profile_new</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);
+
+                    <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile-struct" title="GstEncodingVideoProfile">GstEncodingVideoProfile</a>;
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="returnvalue">GstEncodingVideoProfile</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-new" title="gst_encoding_video_profile_new ()">gst_encoding_video_profile_new</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-pass" title="gst_encoding_video_profile_get_pass ()">gst_encoding_video_profile_get_pass</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-variableframerate" title="gst_encoding_video_profile_get_variableframerate ()">gst_encoding_video_profile_get_variableframerate</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-pass" title="gst_encoding_video_profile_set_pass ()">gst_encoding_video_profile_set_pass</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> pass</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate" title="gst_encoding_video_profile_set_variableframerate ()">gst_encoding_video_profile_set_variableframerate</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> variableframerate</code></em>);
+
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE">GST_ENCODING_CATEGORY_DEVICE</a>
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS" title="GST_ENCODING_CATEGORY_ONLINE_SERVICE">GST_ENCODING_CATEGORY_ONLINE_SERVICE</a>
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS" title="GST_ENCODING_CATEGORY_STORAGE_EDITING">GST_ENCODING_CATEGORY_STORAGE_EDITING</a>
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-CAPTURE:CAPS" title="GST_ENCODING_CATEGORY_CAPTURE">GST_ENCODING_CATEGORY_CAPTURE</a>
+                    <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget-struct" title="GstEncodingTarget">GstEncodingTarget</a>;
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-unref" title="gst_encoding_target_unref()">gst_encoding_target_unref</a>           (target)
+#define             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-ref" title="gst_encoding_target_ref()">gst_encoding_target_ref</a>             (target)
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-new" title="gst_encoding_target_new ()">gst_encoding_target_new</a>             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *profiles</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-name" title="gst_encoding_target_get_name ()">gst_encoding_target_get_name</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-category" title="gst_encoding_target_get_category ()">gst_encoding_target_get_category</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-description" title="gst_encoding_target_get_description ()">gst_encoding_target_get_description</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profiles" title="gst_encoding_target_get_profiles ()">gst_encoding_target_get_profiles</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="returnvalue">GstEncodingProfile</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profile" title="gst_encoding_target_get_profile ()">gst_encoding_target_get_profile</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-add-profile" title="gst_encoding_target_add_profile ()">gst_encoding_target_add_profile</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save" title="gst_encoding_target_save ()">gst_encoding_target_save</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save-to-file" title="gst_encoding_target_save_to_file ()">gst_encoding_target_save_to_file</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *filepath</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load" title="gst_encoding_target_load ()">gst_encoding_target_load</a>            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load-from-file" title="gst_encoding_target_load_from_file ()">gst_encoding_target_load_from_file</a>  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *filepath</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-all-targets" title="gst_encoding_list_all_targets ()">gst_encoding_list_all_targets</a>       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *categoryname</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-available-categories" title="gst_encoding_list_available_categories ()">gst_encoding_list_available_categories</a>
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-encoding-profile.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstEncodingProfile
+         +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile">GstEncodingVideoProfile</a>
+         +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile">GstEncodingAudioProfile</a>
+         +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile">GstEncodingContainerProfile</a>
+</pre>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">GstEncodingProfile</a>
+         +----GstEncodingContainerProfile
+</pre>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">GstEncodingProfile</a>
+         +----GstEncodingAudioProfile
+</pre>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">GstEncodingProfile</a>
+         +----GstEncodingVideoProfile
+</pre>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstEncodingTarget
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-encoding-profile.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id614507"></a><p>
+Functions to create and handle encoding profiles.
+</p>
+<p>
+Encoding profiles describe the media types and settings one wishes to use for
+an encoding process. The top-level profiles are commonly
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>(s) (which contains a user-readable name and
+description along with which container format to use). These, in turn,
+reference one or more <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>(s) which indicate which encoding
+format should be used on each individual streams.
+</p>
+<p>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>(s) can be provided to the 'encodebin' element, which will take
+care of selecting and setting up the required elements to produce an output stream
+conforming to the specifications of the profile.
+</p>
+<p>
+Unlike other systems, the encoding profiles do not specify which <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> to use
+for the various encoding and muxing steps, but instead relies on specifying the format
+one wishes to use.
+</p>
+<p>
+Encoding profiles can be created at runtime by the application or loaded from (and saved
+to) file using the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> API.
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id614570"></a><h3>Example: Creating a profile</h3>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+#include &lt;gst/pbutils/encoding-profile.h&gt;
+...
+GstEncodingProfile *
+create_ogg_theora_profile(void)
+{
+ GstEncodingContainerProfile *prof;
+ GstCaps *caps;
+
+ caps = gst_caps_from_string("application/ogg");
+ prof = gst_encoding_container_profile_new("Ogg audio/video",
+    "Standard OGG/THEORA/VORBIS",
+    caps, NULL);
+ gst_caps_unref (caps);
+
+ caps = gst_caps_from_string("video/x-theora");
+ gst_encoding_container_profile_add_profile(prof,
+      (GstEncodingProfile*) gst_encoding_video_profile_new(caps, NULL, NULL, 0));
+ gst_caps_unref (caps);
+
+ caps = gst_caps_from_string("audio/x-vorbis");
+ gst_encoding_container_profile_add_profile(prof,
+      (GstEncodingProfile*) gst_encoding_audio_profile_new(caps, NULL, NULL, 0));
+ gst_caps_unref (caps);
+
+ return (GstEncodingProfile*) prof;
+}
+
+
+</pre></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id614595"></a><h3>Example: Listing categories, targets and profiles</h3>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+#include &lt;gst/pbutils/encoding-profile.h&gt;
+...
+GstEncodingProfile *prof;
+GList *categories, *tmpc;
+GList *targets, *tmpt;
+...
+categories = gst_encoding_target_list_available_categories();
+
+... Show available categories to user ...
+
+for (tmpc = categories; tmpc; tmpc = tmpc-&gt;next) {
+  gchar *category = (gchar *) tmpc-&gt;data;
+
+  ... and we can list all targets within that category ...
+  
+  targets = gst_encoding_target_list_all (category);
+
+  ... and show a list to our users ...
+
+  g_list_foreach (targets, (GFunc) gst_encoding_target_unref, NULL);
+  g_list_free (targets);
+}
+
+g_list_foreach (categories, (GFunc) g_free, NULL);
+g_list_free (categories);
+
+...
+</pre></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-encoding-profile.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstEncodingProfile-struct"></a><h3>GstEncodingProfile</h3>
+<pre class="programlisting">typedef struct _GstEncodingProfile GstEncodingProfile;</pre>
+<p>
+The opaque base class object for all encoding profiles. This contains generic
+information like name, description, format and preset.
+</p>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-unref"></a><h3>gst_encoding_profile_unref()</h3>
+<pre class="programlisting">#define gst_encoding_profile_unref(profile) (g_object_unref ((GObject*) profile))
+</pre>
+<p>
+Decreases the reference count of the <em class="parameter"><code>profile</code></em>, possibly freeing the <em class="parameter"><code>profile</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-ref"></a><h3>gst_encoding_profile_ref()</h3>
+<pre class="programlisting">#define gst_encoding_profile_ref(profile) (g_object_ref ((GObject*) profile))
+</pre>
+<p>
+Increases the reference count of the <em class="parameter"><code>profile</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-find"></a><h3>gst_encoding_profile_find ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="returnvalue">GstEncodingProfile</span></a> * gst_encoding_profile_find          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *targetname</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *profilename</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>);</pre>
+<p>
+Find the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> with the specified name and category.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>targetname</code></em> :</span></p></td>
+<td>The name of the target. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profilename</code></em> :</span></p></td>
+<td>The name of the profile. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category</code></em> :</span></p></td>
+<td>The target category. Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The matching <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-name"></a><h3>gst_encoding_profile_get_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_profile_get_name       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of the profile, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-description"></a><h3>gst_encoding_profile_get_description ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_profile_get_description
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the description of the profile, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-format"></a><h3>gst_encoding_profile_get_format ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_encoding_profile_get_format     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the media format used
+in the profile. Unref after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-preset"></a><h3>gst_encoding_profile_get_preset ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_profile_get_preset     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html"><span class="type">GstPreset</span></a> to be used in the profile.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-presence"></a><h3>gst_encoding_profile_get_presence ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_encoding_profile_get_presence   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of times the profile is used in its parent
+container profile. If 0, it is not a mandatory stream.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-restriction"></a><h3>gst_encoding_profile_get_restriction ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_encoding_profile_get_restriction
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The restriction <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to apply before the encoder
+that will be used in the profile. The fields present in restriction caps are
+properties of the raw stream (that is before encoding), such as height and
+width for video and depth and sampling rate for audio. Does not apply to
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> (since there is no corresponding raw stream).
+Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Unref after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-name"></a><h3>gst_encoding_profile_set_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_name       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Set <em class="parameter"><code>name</code></em> as the given name for the <em class="parameter"><code>profile</code></em>. A copy of <em class="parameter"><code>name</code></em> will be made
+internally.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name to set on the profile</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-description"></a><h3>gst_encoding_profile_set_description ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_description
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>);</pre>
+<p>
+Set <em class="parameter"><code>description</code></em> as the given description for the <em class="parameter"><code>profile</code></em>. A copy of <em class="parameter"><code>description</code></em> will be made
+internally.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>description</code></em> :</span></p></td>
+<td>the description to set on the profile</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-format"></a><h3>gst_encoding_profile_set_format ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_format     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>);</pre>
+<p>
+Sets the media format used in the profile.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>the media format to use in the profile.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-preset"></a><h3>gst_encoding_profile_set_preset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_preset     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>);</pre>
+<p>
+Sets the preset to use for the profile.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>preset</code></em> :</span></p></td>
+<td>the element preset to use</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-restriction"></a><h3>gst_encoding_profile_set_restriction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_restriction
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>);</pre>
+<p>
+Set the restriction <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to apply before the encoder
+that will be used in the profile. See <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction" title="gst_encoding_profile_set_restriction ()"><code class="function">gst_encoding_profile_set_restriction()</code></a>
+for more about restrictions. Does not apply to <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em> :</span></p></td>
+<td>the restriction to apply</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-set-presence"></a><h3>gst_encoding_profile_set_presence ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_profile_set_presence   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);</pre>
+<p>
+Set the number of time the profile is used in its parent
+container profile. If 0, it is not a mandatory stream
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>presence</code></em> :</span></p></td>
+<td>the number of time the profile can be used</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-is-equal"></a><h3>gst_encoding_profile_is_equal ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_profile_is_equal       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *a</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *b</code></em>);</pre>
+<p>
+Checks whether the two <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> are equal
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>b</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>a</code></em> and <em class="parameter"><code>b</code></em> are equal, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-input-caps"></a><h3>gst_encoding_profile_get_input_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_encoding_profile_get_input_caps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<p>
+Computes the full output caps that this <em class="parameter"><code>profile</code></em> will be able to consume.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The full caps the given <em class="parameter"><code>profile</code></em> can consume. Call
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> when you are done with the caps. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-profile-get-type-nick"></a><h3>gst_encoding_profile_get_type_nick ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_profile_get_type_nick  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the human-readable name of the type of <em class="parameter"><code>profile</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodingContainerProfile-struct"></a><h3>GstEncodingContainerProfile</h3>
+<pre class="programlisting">typedef struct _GstEncodingContainerProfile GstEncodingContainerProfile;</pre>
+<p>
+Encoding profiles for containers. Keeps track of a list of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</p>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-container-profile-new"></a><h3>gst_encoding_container_profile_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="returnvalue">GstEncodingContainerProfile</span></a> * gst_encoding_container_profile_new
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>The name of the container profile, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>description</code></em> :</span></p></td>
+<td>The description of the container profile, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>The format to use for this profile</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>preset</code></em> :</span></p></td>
+<td>The preset to use for this profile</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-container-profile-add-profile"></a><h3>gst_encoding_container_profile_add_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_container_profile_add_profile
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *container</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<p>
+Add a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> to the list of profiles handled by <em class="parameter"><code>container</code></em>.
+</p>
+<p>
+No copy of <em class="parameter"><code>profile</code></em> will be made, if you wish to use it elsewhere after this
+method you should increment its reference count.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>container</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> to use</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> to add.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <em class="parameter"><code>stream</code></em> was properly added, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-container-profile-contains-profile"></a><h3>gst_encoding_container_profile_contains_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_container_profile_contains_profile
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *container</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>container</code></em> contains a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> identical to
+<em class="parameter"><code>profile</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>container</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>container</code></em> contains a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> identical
+to <em class="parameter"><code>profile</code></em>, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-container-profile-get-profiles"></a><h3>gst_encoding_container_profile_get_profiles ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_encoding_container_profile_get_profiles
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodingAudioProfile-struct"></a><h3>GstEncodingAudioProfile</h3>
+<pre class="programlisting">typedef struct _GstEncodingAudioProfile GstEncodingAudioProfile;</pre>
+<p>
+Variant of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> for audio streams.
+</p>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-audio-profile-new"></a><h3>gst_encoding_audio_profile_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="returnvalue">GstEncodingAudioProfile</span></a> * gst_encoding_audio_profile_new
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="type">GstEncodingAudioProfile</span></a>
+</p>
+<p>
+All provided allocatable arguments will be internally copied, so can be
+safely freed/unreferenced after calling this method.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>preset</code></em> :</span></p></td>
+<td>the preset(s) to use on the encoder, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> used to restrict the input to the encoder, can be
+NULL. See <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" title="gst_encoding_profile_get_restriction ()"><code class="function">gst_encoding_profile_get_restriction()</code></a> for more details.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>presence</code></em> :</span></p></td>
+<td>the number of time this stream must be used. 0 means any number of
+times (including never)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="type">GstEncodingAudioProfile</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodingVideoProfile-struct"></a><h3>GstEncodingVideoProfile</h3>
+<pre class="programlisting">typedef struct _GstEncodingVideoProfile GstEncodingVideoProfile;</pre>
+<p>
+Variant of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> for video streams, allows specifying the <em class="parameter"><code>pass</code></em>.
+</p>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-video-profile-new"></a><h3>gst_encoding_video_profile_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="returnvalue">GstEncodingVideoProfile</span></a> * gst_encoding_video_profile_new
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *format</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *restriction</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> presence</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>
+</p>
+<p>
+All provided allocatable arguments will be internally copied, so can be
+safely freed/unreferenced after calling this method.
+</p>
+<p>
+If you wish to control the pass number (in case of multi-pass scenarios),
+please refer to the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-pass" title="gst_encoding_video_profile_set_pass ()"><code class="function">gst_encoding_video_profile_set_pass()</code></a> documentation.
+</p>
+<p>
+If you wish to use/force a constant framerate please refer to the
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate" title="gst_encoding_video_profile_set_variableframerate ()"><code class="function">gst_encoding_video_profile_set_variableframerate()</code></a> documentation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>preset</code></em> :</span></p></td>
+<td>the preset(s) to use on the encoder, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>restriction</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> used to restrict the input to the encoder, can be
+NULL. See <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" title="gst_encoding_profile_get_restriction ()"><code class="function">gst_encoding_profile_get_restriction()</code></a> for more details.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>presence</code></em> :</span></p></td>
+<td>the number of time this stream must be used. 0 means any number of
+times (including never)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-video-profile-get-pass"></a><h3>gst_encoding_video_profile_get_pass ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_encoding_video_profile_get_pass (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prof</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The pass number if this is part of a multi-pass profile. Starts at
+1 for multi-pass. 0 if this is not a multi-pass profile</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-video-profile-get-variableframerate"></a><h3>gst_encoding_video_profile_get_variableframerate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_video_profile_get_variableframerate
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prof</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Whether non-constant video framerate is allowed for encoding.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-video-profile-set-pass"></a><h3>gst_encoding_video_profile_set_pass ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_video_profile_set_pass (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> pass</code></em>);</pre>
+<p>
+Sets the pass number of this video profile. The first pass profile should have
+this value set to 1. If this video profile isn't part of a multi-pass profile,
+you may set it to 0 (the default value).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prof</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pass</code></em> :</span></p></td>
+<td>the pass number for this profile</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-video-profile-set-variableframerate"></a><h3>gst_encoding_video_profile_set_variableframerate ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_encoding_video_profile_set_variableframerate
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> variableframerate</code></em>);</pre>
+<p>
+If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the incoming streamm will be allowed to have non-constant
+framerate. If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> (default value), then the incoming stream will
+be normalized by dropping/duplicating frames in order to produce a
+constance framerate.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prof</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>variableframerate</code></em> :</span></p></td>
+<td>a boolean</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-ENCODING-CATEGORY-DEVICE:CAPS"></a><h3>GST_ENCODING_CATEGORY_DEVICE</h3>
+<pre class="programlisting">#define GST_ENCODING_CATEGORY_DEVICE		"device"
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> category for device-specific targets.
+The name of the target will usually be the contructor and model of the device,
+and that target will contain <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfiles</span></a> suitable for that device.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS"></a><h3>GST_ENCODING_CATEGORY_ONLINE_SERVICE</h3>
+<pre class="programlisting">#define GST_ENCODING_CATEGORY_ONLINE_SERVICE "online-service"
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> category for online-services.
+The name of the target will usually be the name of the online service
+and that target will contain <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfiles</span></a> suitable for that online
+service.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS"></a><h3>GST_ENCODING_CATEGORY_STORAGE_EDITING</h3>
+<pre class="programlisting">#define GST_ENCODING_CATEGORY_STORAGE_EDITING   "storage-editing"
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> category for storage, archiving and editing targets.
+Those targets can be lossless and/or provide very fast random access content.
+The name of the target will usually be the container type or editing target,
+and that target will contain <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfiles</span></a> suitable for editing or
+storage.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-ENCODING-CATEGORY-CAPTURE:CAPS"></a><h3>GST_ENCODING_CATEGORY_CAPTURE</h3>
+<pre class="programlisting">#define GST_ENCODING_CATEGORY_CAPTURE		"capture"
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> category for recording and capture.
+Targets within this category are optimized for low latency encoding.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodingTarget-struct"></a><h3>GstEncodingTarget</h3>
+<pre class="programlisting">typedef struct _GstEncodingTarget GstEncodingTarget;</pre>
+<p>
+Collection of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> for a specific target or use-case.
+</p>
+<p>
+When being stored/loaded, targets come from a specific category, like
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>.
+</p>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-unref"></a><h3>gst_encoding_target_unref()</h3>
+<pre class="programlisting">#define             gst_encoding_target_unref(target)</pre>
+<p>
+Decreases the reference count of the <em class="parameter"><code>target</code></em>, possibly freeing it.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-ref"></a><h3>gst_encoding_target_ref()</h3>
+<pre class="programlisting">#define             gst_encoding_target_ref(target)</pre>
+<p>
+Increases the reference count of the <em class="parameter"><code>target</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-new"></a><h3>gst_encoding_target_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * gst_encoding_target_new             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *profiles</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>.
+</p>
+<p>
+The name and category can only consist of lowercase ASCII letters for the
+first character, followed by either lowercase ASCII letters, digits or
+hyphens ('-').
+</p>
+<p>
+The <em class="parameter"><code>category</code></em> <span class="emphasis"><em>should</em></span> be one of the existing
+well-defined categories, like <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>, but it
+<span class="emphasis"><em>can</em></span> be a application or user specific category if
+needed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>The name of the target.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category</code></em> :</span></p></td>
+<td>The name of the category to which this <em class="parameter"><code>target</code></em>
+belongs. For example: <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>description</code></em> :</span></p></td>
+<td>A description of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> in the
+current locale. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profiles</code></em> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.EncodingProfile]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
+there was an error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-name"></a><h3>gst_encoding_target_get_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_target_get_name        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The name of the <em class="parameter"><code>target</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-category"></a><h3>gst_encoding_target_get_category ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_target_get_category    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The category of the <em class="parameter"><code>target</code></em>. For example:
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-description"></a><h3>gst_encoding_target_get_description ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_encoding_target_get_description (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The description of the <em class="parameter"><code>target</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-profiles"></a><h3>gst_encoding_target_get_profiles ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_encoding_target_get_profiles    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>(s) this <em class="parameter"><code>target</code></em> handles. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.EncodingProfile]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-profile"></a><h3>gst_encoding_target_get_profile ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="returnvalue">GstEncodingProfile</span></a> * gst_encoding_target_get_profile    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the profile to retrieve</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The matching <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-add-profile"></a><h3>gst_encoding_target_add_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_target_add_profile     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+<p>
+Adds the given <em class="parameter"><code>profile</code></em> to the <em class="parameter"><code>target</code></em>. Each added profile must have
+a unique name within the profile.
+</p>
+<p>
+The <em class="parameter"><code>target</code></em> will steal a reference to the <em class="parameter"><code>profile</code></em>. If you wish to use
+the profile after calling this method, you should increase its reference
+count.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> to add a profile to</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>profile</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> to add. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the profile was added, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-save"></a><h3>gst_encoding_target_save ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_target_save            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Saves the <em class="parameter"><code>target</code></em> to a default user-local directory.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>If an error occured, this field will be filled in.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the target was correctly saved, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-save-to-file"></a><h3>gst_encoding_target_save_to_file ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_encoding_target_save_to_file    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *filepath</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Saves the <em class="parameter"><code>target</code></em> to the provided file location.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>target</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filepath</code></em> :</span></p></td>
+<td>the location to store the <em class="parameter"><code>target</code></em> at.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>If an error occured, this field will be filled in.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the target was correctly saved, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-load"></a><h3>gst_encoding_target_load ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * gst_encoding_target_load            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *category</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Searches for the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> with the given name, loads it
+and returns it.
+</p>
+<p>
+If the category name is specified only targets from that category will be
+searched for.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> to load.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>category</code></em> :</span></p></td>
+<td>the name of the target category, like
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>. Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>If an error occured, this field will be filled in.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> if available, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-load-from-file"></a><h3>gst_encoding_target_load_from_file ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="returnvalue">GstEncodingTarget</span></a> * gst_encoding_target_load_from_file  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *filepath</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Opens the provided file and returns the contained <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filepath</code></em> :</span></p></td>
+<td>The file location to load the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>If an error occured, this field will be filled in.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> contained in the file, else
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-list-all-targets"></a><h3>gst_encoding_list_all_targets ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_encoding_list_all_targets       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *categoryname</code></em>);</pre>
+<p>
+List all available <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> for the specified category, or all categories
+if <em class="parameter"><code>categoryname</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>categoryname</code></em> :</span></p></td>
+<td>The category, for ex: <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</span></a>.
+Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The list of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstEncodingTarget]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-list-available-categories"></a><h3>gst_encoding_list_available_categories ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_encoding_list_available_categories
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Lists all <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> categories present on disk.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list
+of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> categories. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar*]</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudio.html b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
new file mode 100644
index 0000000..e0a846a
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
@@ -0,0 +1,919 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudio</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gstreamer-audio.html" title="Audio Library">
+<link rel="next" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-audio.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudioclock.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudio.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudio.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudio"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudio.top_of_page"></a>gstaudio</span></h2>
+<p>gstaudio — Support library for audio elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudio.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/audio/audio.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFlags" title="enum GstAudioFlags">GstAudioFlags</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat">GstAudioFormat</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags" title="enum GstAudioFormatFlags">GstAudioFormatFlags</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo">GstAudioFormatInfo</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo">GstAudioInfo</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-init" title="gst_audio_info_init ()">gst_audio_info_init</a>                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-from-caps" title="gst_audio_info_from_caps ()">gst_audio_info_from_caps</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-to-caps" title="gst_audio_info_to_caps ()">gst_audio_info_to_caps</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-convert" title="gst_audio_info_convert ()">gst_audio_info_convert</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> src_val</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> *dest_val</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="returnvalue">GstAudioFormatInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-format-get-info" title="gst_audio_format_get_info ()">gst_audio_format_get_info</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> format</code></em>);
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-DEPTH:CAPS" title="GST_AUDIO_FORMAT_INFO_DEPTH()">GST_AUDIO_FORMAT_INFO_DEPTH</a>         (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS" title="GST_AUDIO_FORMAT_INFO_ENDIANNESS()">GST_AUDIO_FORMAT_INFO_ENDIANNESS</a>    (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FLAGS:CAPS" title="GST_AUDIO_FORMAT_INFO_FLAGS()">GST_AUDIO_FORMAT_INFO_FLAGS</a>         (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FORMAT:CAPS" title="GST_AUDIO_FORMAT_INFO_FORMAT()">GST_AUDIO_FORMAT_INFO_FORMAT</a>        (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_FLOAT()">GST_AUDIO_FORMAT_INFO_IS_FLOAT</a>      (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_INTEGER()">GST_AUDIO_FORMAT_INFO_IS_INTEGER</a>    (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN()">GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN</a> (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN()">GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN</a>(info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS" title="GST_AUDIO_FORMAT_INFO_IS_SIGNED()">GST_AUDIO_FORMAT_INFO_IS_SIGNED</a>     (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-NAME:CAPS" title="GST_AUDIO_FORMAT_INFO_NAME()">GST_AUDIO_FORMAT_INFO_NAME</a>          (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-WIDTH:CAPS" title="GST_AUDIO_FORMAT_INFO_WIDTH()">GST_AUDIO_FORMAT_INFO_WIDTH</a>         (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPF:CAPS" title="GST_AUDIO_INFO_BPF()">GST_AUDIO_INFO_BPF</a>                  (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPS:CAPS" title="GST_AUDIO_INFO_BPS()">GST_AUDIO_INFO_BPS</a>                  (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-CHANNELS:CAPS" title="GST_AUDIO_INFO_CHANNELS()">GST_AUDIO_INFO_CHANNELS</a>             (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-DEPTH:CAPS" title="GST_AUDIO_INFO_DEPTH()">GST_AUDIO_INFO_DEPTH</a>                (i)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FLAGS:CAPS" title="GST_AUDIO_INFO_FLAGS()">GST_AUDIO_INFO_FLAGS</a>                (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FORMAT:CAPS" title="GST_AUDIO_INFO_FORMAT()">GST_AUDIO_INFO_FORMAT</a>               (i)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS" title="GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS()">GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS</a>(info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-NAME:CAPS" title="GST_AUDIO_INFO_NAME()">GST_AUDIO_INFO_NAME</a>                 (i)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-POSITION:CAPS" title="GST_AUDIO_INFO_POSITION()">GST_AUDIO_INFO_POSITION</a>             (info,
+                                                         c)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-RATE:CAPS" title="GST_AUDIO_INFO_RATE()">GST_AUDIO_INFO_RATE</a>                 (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-WIDTH:CAPS" title="GST_AUDIO_INFO_WIDTH()">GST_AUDIO_INFO_WIDTH</a>                (i)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-FRAMES-TO-CLOCK-TIME:CAPS" title="GST_FRAMES_TO_CLOCK_TIME()">GST_FRAMES_TO_CLOCK_TIME</a>            (frames,
+                                                         rate)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-CLOCK-TIME-TO-FRAMES:CAPS" title="GST_CLOCK_TIME_TO_FRAMES()">GST_CLOCK_TIME_TO_FRAMES</a>            (clocktime,
+                                                         rate)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-DEF-RATE:CAPS" title="GST_AUDIO_DEF_RATE">GST_AUDIO_DEF_RATE</a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-buffer-clip" title="gst_audio_buffer_clip ()">gst_audio_buffer_clip</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> *segment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> rate</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> bpf</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudio.description"></a><h2>Description</h2>
+<p>
+This library contains some helper functions for audio elements.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudio.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioFlags"></a><h3>enum GstAudioFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUDIO_FLAG_NONE              = 0,
+  GST_AUDIO_FLAG_DEFAULT_POSITIONS = (1 &lt;&lt; 0)
+} GstAudioFlags;
+</pre>
+<p>
+Extra audio flags
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUDIO-FLAG-NONE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FLAG_NONE</code></span></p></td>
+<td>no valid flag
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FLAG-DEFAULT-POSITIONS:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FLAG_DEFAULT_POSITIONS</code></span></p></td>
+<td>position array
+    contains the default layout for the number of channels.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioFormat"></a><h3>enum GstAudioFormat</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUDIO_FORMAT_UNKNOWN,
+  /* 8 bit */
+  GST_AUDIO_FORMAT_S8,
+  GST_AUDIO_FORMAT_U8,
+  /* 16 bit */
+  GST_AUDIO_FORMAT_S16LE,
+  GST_AUDIO_FORMAT_S16BE,
+  GST_AUDIO_FORMAT_U16LE,
+  GST_AUDIO_FORMAT_U16BE,
+  /* 24 bit in low 3 bytes of 32 bits*/
+  GST_AUDIO_FORMAT_S24_32LE,
+  GST_AUDIO_FORMAT_S24_32BE,
+  GST_AUDIO_FORMAT_U24_32LE,
+  GST_AUDIO_FORMAT_U24_32BE,
+  /* 32 bit */
+  GST_AUDIO_FORMAT_S32LE,
+  GST_AUDIO_FORMAT_S32BE,
+  GST_AUDIO_FORMAT_U32LE,
+  GST_AUDIO_FORMAT_U32BE,
+  /* 24 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S24LE,
+  GST_AUDIO_FORMAT_S24BE,
+  GST_AUDIO_FORMAT_U24LE,
+  GST_AUDIO_FORMAT_U24BE,
+  /* 20 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S20LE,
+  GST_AUDIO_FORMAT_S20BE,
+  GST_AUDIO_FORMAT_U20LE,
+  GST_AUDIO_FORMAT_U20BE,
+  /* 18 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S18LE,
+  GST_AUDIO_FORMAT_S18BE,
+  GST_AUDIO_FORMAT_U18LE,
+  GST_AUDIO_FORMAT_U18BE,
+  /* float */
+  GST_AUDIO_FORMAT_F32LE,
+  GST_AUDIO_FORMAT_F32BE,
+  GST_AUDIO_FORMAT_F64LE,
+  GST_AUDIO_FORMAT_F64BE,
+  /* native endianness equivalents */
+  GST_AUDIO_FORMAT_S16 = _GST_AUDIO_FORMAT_NE(S16),
+  GST_AUDIO_FORMAT_U16 = _GST_AUDIO_FORMAT_NE(U16),
+  GST_AUDIO_FORMAT_S24_32 = _GST_AUDIO_FORMAT_NE(S24_32),
+  GST_AUDIO_FORMAT_U24_32 = _GST_AUDIO_FORMAT_NE(U24_32),
+  GST_AUDIO_FORMAT_S32 = _GST_AUDIO_FORMAT_NE(S32),
+  GST_AUDIO_FORMAT_U32 = _GST_AUDIO_FORMAT_NE(U32),
+  GST_AUDIO_FORMAT_S24 = _GST_AUDIO_FORMAT_NE(S24),
+  GST_AUDIO_FORMAT_U24 = _GST_AUDIO_FORMAT_NE(U24),
+  GST_AUDIO_FORMAT_S20 = _GST_AUDIO_FORMAT_NE(S20),
+  GST_AUDIO_FORMAT_U20 = _GST_AUDIO_FORMAT_NE(U20),
+  GST_AUDIO_FORMAT_S18 = _GST_AUDIO_FORMAT_NE(S18),
+  GST_AUDIO_FORMAT_U18 = _GST_AUDIO_FORMAT_NE(U18),
+  GST_AUDIO_FORMAT_F32 = _GST_AUDIO_FORMAT_NE(F32),
+  GST_AUDIO_FORMAT_F64 = _GST_AUDIO_FORMAT_NE(F64)
+} GstAudioFormat;
+</pre>
+<p>
+Enum value describing the most common audio formats.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_UNKNOWN</code></span></p></td>
+<td>unknown audio format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S8:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S8</code></span></p></td>
+<td>8 bits in 8 bits, signed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U8:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U8</code></span></p></td>
+<td>8 bits in 8 bits, unsigned
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S16LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S16LE</code></span></p></td>
+<td>16 bits in 16 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S16BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S16BE</code></span></p></td>
+<td>16 bits in 16 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U16LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U16LE</code></span></p></td>
+<td>16 bits in 16 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U16BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U16BE</code></span></p></td>
+<td>16 bits in 16 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24-32LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24_32LE</code></span></p></td>
+<td>24 bits in 32 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24-32BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24_32BE</code></span></p></td>
+<td>24 bits in 32 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24-32LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24_32LE</code></span></p></td>
+<td>24 bits in 32 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24-32BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24_32BE</code></span></p></td>
+<td>24 bits in 32 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S32LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S32LE</code></span></p></td>
+<td>32 bits in 32 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S32BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S32BE</code></span></p></td>
+<td>32 bits in 32 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U32LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U32LE</code></span></p></td>
+<td>32 bits in 32 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U32BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U32BE</code></span></p></td>
+<td>32 bits in 32 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24LE</code></span></p></td>
+<td>24 bits in 24 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24BE</code></span></p></td>
+<td>24 bits in 24 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24LE</code></span></p></td>
+<td>24 bits in 24 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24BE</code></span></p></td>
+<td>24 bits in 24 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S20LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S20LE</code></span></p></td>
+<td>20 bits in 24 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S20BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S20BE</code></span></p></td>
+<td>20 bits in 24 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U20LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U20LE</code></span></p></td>
+<td>20 bits in 24 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U20BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U20BE</code></span></p></td>
+<td>20 bits in 24 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S18LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S18LE</code></span></p></td>
+<td>18 bits in 24 bits, signed, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S18BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S18BE</code></span></p></td>
+<td>18 bits in 24 bits, signed, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U18LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U18LE</code></span></p></td>
+<td>18 bits in 24 bits, unsigned, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U18BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U18BE</code></span></p></td>
+<td>18 bits in 24 bits, unsigned, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F32LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F32LE</code></span></p></td>
+<td>32-bit floating point samples, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F32BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F32BE</code></span></p></td>
+<td>32-bit floating point samples, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F64LE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F64LE</code></span></p></td>
+<td>64-bit floating point samples, little endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F64BE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F64BE</code></span></p></td>
+<td>64-bit floating point samples, big endian
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S16:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S16</code></span></p></td>
+<td>16 bits in 16 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U16:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U16</code></span></p></td>
+<td>16 bits in 16 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24-32:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24_32</code></span></p></td>
+<td>24 bits in 32 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24-32:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24_32</code></span></p></td>
+<td>24 bits in 32 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S32:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S32</code></span></p></td>
+<td>32 bits in 32 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U32:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U32</code></span></p></td>
+<td>32 bits in 32 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S24:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S24</code></span></p></td>
+<td>24 bits in 24 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U24:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U24</code></span></p></td>
+<td>24 bits in 24 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S20:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S20</code></span></p></td>
+<td>20 bits in 24 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U20:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U20</code></span></p></td>
+<td>20 bits in 24 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-S18:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_S18</code></span></p></td>
+<td>18 bits in 24 bits, signed, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-U18:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_U18</code></span></p></td>
+<td>18 bits in 24 bits, unsigned, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F32:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F32</code></span></p></td>
+<td>32-bit floating point samples, native endianness
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-F64:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_F64</code></span></p></td>
+<td>64-bit floating point samples, native endianness
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioFormatFlags"></a><h3>enum GstAudioFormatFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUDIO_FORMAT_FLAG_INTEGER  = (1 &lt;&lt; 0),
+  GST_AUDIO_FORMAT_FLAG_FLOAT    = (1 &lt;&lt; 1),
+  GST_AUDIO_FORMAT_FLAG_SIGNED   = (1 &lt;&lt; 2),
+  GST_AUDIO_FORMAT_FLAG_COMPLEX  = (1 &lt;&lt; 4)
+} GstAudioFormatFlags;
+</pre>
+<p>
+The different audio flags that a format info can have.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_FLAG_INTEGER</code></span></p></td>
+<td>integer samples
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_FLAG_FLOAT</code></span></p></td>
+<td>float samples
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_FLAG_SIGNED</code></span></p></td>
+<td>signed samples
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_FORMAT_FLAG_COMPLEX</code></span></p></td>
+<td>complex layout
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioFormatInfo"></a><h3>struct GstAudioFormatInfo</h3>
+<pre class="programlisting">struct GstAudioFormatInfo {
+  GstAudioFormat format;
+  const gchar *name;
+  const gchar *description;
+  GstAudioFormatFlags flags;
+  gint endianness;
+  gint width;
+  gint depth;
+  guint8 silence[8];
+
+  GstAudioFormat unpack_format;
+  GstAudioFormatUnpack unpack_func;
+  GstAudioFormatPack pack_func;
+};
+</pre>
+<p>
+Information for an audio format.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.format"></a>format</code></em>;</span></p></td>
+<td><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a></td>
+</tr>
+<tr>
+<td><p><span class="term">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstAudioFormatInfo.name"></a>name</code></em>;</span></p></td>
+<td>string representation of the format</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstAudioFormatInfo.description"></a>description</code></em>;</span></p></td>
+<td>user readable description of the format</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags" title="enum GstAudioFormatFlags"><span class="type">GstAudioFormatFlags</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.flags"></a>flags</code></em>;</span></p></td>
+<td><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags" title="enum GstAudioFormatFlags"><span class="type">GstAudioFormatFlags</span></a></td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.endianness"></a>endianness</code></em>;</span></p></td>
+<td>the endianness</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.width"></a>width</code></em>;</span></p></td>
+<td>amount of bits used for one sample</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.depth"></a>depth</code></em>;</span></p></td>
+<td>amount of valid bits in <em class="parameter"><code>width</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.silence"></a>silence</code></em>[8];</span></p></td>
+<td>
+<em class="parameter"><code>width</code></em>/8 bytes with 1 silent sample</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> <em class="structfield"><code><a name="GstAudioFormatInfo.unpack-format"></a>unpack_format</code></em>;</span></p></td>
+<td>the format of the unpacked samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="type">GstAudioFormatUnpack</span> <em class="structfield"><code><a name="GstAudioFormatInfo.unpack-func"></a>unpack_func</code></em>;</span></p></td>
+<td>function to unpack samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="type">GstAudioFormatPack</span> <em class="structfield"><code><a name="GstAudioFormatInfo.pack-func"></a>pack_func</code></em>;</span></p></td>
+<td>function to pack samples</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioInfo"></a><h3>struct GstAudioInfo</h3>
+<pre class="programlisting">struct GstAudioInfo {
+  const GstAudioFormatInfo *finfo;
+  GstAudioFlags             flags;
+  gint                      rate;
+  gint                      channels;
+  gint                      bpf;
+  GstAudioChannelPosition   position[64];
+};
+</pre>
+<p>
+Information describing audio properties. This information can be filled
+in from GstCaps with <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-from-caps" title="gst_audio_info_from_caps ()"><code class="function">gst_audio_info_from_caps()</code></a>.
+</p>
+<p>
+Use the provided macros to access the info in this structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">const <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="type">GstAudioFormatInfo</span></a> *<em class="structfield"><code><a name="GstAudioInfo.finfo"></a>finfo</code></em>;</span></p></td>
+<td>the format info of the audio</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFlags" title="enum GstAudioFlags"><span class="type">GstAudioFlags</span></a> <em class="structfield"><code><a name="GstAudioInfo.flags"></a>flags</code></em>;</span></p></td>
+<td>additional audio flags</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioInfo.rate"></a>rate</code></em>;</span></p></td>
+<td>the audio sample rate</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioInfo.channels"></a>channels</code></em>;</span></p></td>
+<td>the number of channels</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstAudioInfo.bpf"></a>bpf</code></em>;</span></p></td>
+<td>the number of bytes for one frame, this is the size of one
+sample * <em class="parameter"><code>channels</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> <em class="structfield"><code><a name="GstAudioInfo.position"></a>position</code></em>[64];</span></p></td>
+<td>the positions for each channel</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-info-init"></a><h3>gst_audio_info_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_info_init                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>info</code></em> with default values.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-info-from-caps"></a><h3>gst_audio_info_from_caps ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_info_from_caps            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Parse <em class="parameter"><code>caps</code></em> and update <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>caps</code></em> could be parsed</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-info-to-caps"></a><h3>gst_audio_info_to_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_audio_info_to_caps              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>);</pre>
+<p>
+Convert the values of <em class="parameter"><code>info</code></em> into a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> containing the
+info of <em class="parameter"><code>info</code></em>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-info-convert"></a><h3>gst_audio_info_convert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_info_convert              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> src_val</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> *dest_val</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-format-get-info"></a><h3>gst_audio_format_get_info ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="returnvalue">GstAudioFormatInfo</span></a> * gst_audio_format_get_info    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> format</code></em>);</pre>
+<p>
+Get the <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="type">GstAudioFormatInfo</span></a> for <em class="parameter"><code>format</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="type">GstAudioFormatInfo</span></a> for <em class="parameter"><code>format</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-DEPTH:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_DEPTH()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_DEPTH(info)            ((info)-&gt;depth)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_ENDIANNESS()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_ENDIANNESS(info)       ((info)-&gt;endianness)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-FLAGS:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_FLAGS()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_FLAGS(info)            ((info)-&gt;flags)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-FORMAT:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_FORMAT()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_FORMAT(info)           ((info)-&gt;format)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_IS_FLOAT()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_IS_FLOAT(info)         !!((info)-&gt;flags &amp; GST_AUDIO_FORMAT_FLAG_FLOAT)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_IS_INTEGER()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_IS_INTEGER(info)       !!((info)-&gt;flags &amp; GST_AUDIO_FORMAT_FLAG_INTEGER)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN(info)    ((info)-&gt;endianness == G_BIG_ENDIAN)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN(info) ((info)-&gt;endianness == G_LITTLE_ENDIAN)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_IS_SIGNED()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_IS_SIGNED(info)        !!((info)-&gt;flags &amp; GST_AUDIO_FORMAT_FLAG_SIGNED)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-NAME:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_NAME()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_NAME(info)             ((info)-&gt;name)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-FORMAT-INFO-WIDTH:CAPS"></a><h3>GST_AUDIO_FORMAT_INFO_WIDTH()</h3>
+<pre class="programlisting">#define GST_AUDIO_FORMAT_INFO_WIDTH(info)            ((info)-&gt;width)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-BPF:CAPS"></a><h3>GST_AUDIO_INFO_BPF()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_BPF(info)             ((info)-&gt;bpf)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-BPS:CAPS"></a><h3>GST_AUDIO_INFO_BPS()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_BPS(info)             (GST_AUDIO_INFO_DEPTH(info) &gt;&gt; 3)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-CHANNELS:CAPS"></a><h3>GST_AUDIO_INFO_CHANNELS()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_CHANNELS(info)        ((info)-&gt;channels)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-DEPTH:CAPS"></a><h3>GST_AUDIO_INFO_DEPTH()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_DEPTH(i)              (GST_AUDIO_FORMAT_INFO_DEPTH((i)-&gt;finfo))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-FLAGS:CAPS"></a><h3>GST_AUDIO_INFO_FLAGS()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_FLAGS(info)           ((info)-&gt;flags)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-FORMAT:CAPS"></a><h3>GST_AUDIO_INFO_FORMAT()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_FORMAT(i)             (GST_AUDIO_FORMAT_INFO_FORMAT((i)-&gt;finfo))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS"></a><h3>GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS(info) ((info)-&gt;flags &amp; GST_AUDIO_FLAG_DEFAULT_POSITIONS)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-NAME:CAPS"></a><h3>GST_AUDIO_INFO_NAME()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_NAME(i)               (GST_AUDIO_FORMAT_INFO_NAME((i)-&gt;finfo))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-POSITION:CAPS"></a><h3>GST_AUDIO_INFO_POSITION()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_POSITION(info,c)      ((info)-&gt;position[c])
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-RATE:CAPS"></a><h3>GST_AUDIO_INFO_RATE()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_RATE(info)            ((info)-&gt;rate)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-INFO-WIDTH:CAPS"></a><h3>GST_AUDIO_INFO_WIDTH()</h3>
+<pre class="programlisting">#define GST_AUDIO_INFO_WIDTH(i)              (GST_AUDIO_FORMAT_INFO_WIDTH((i)-&gt;finfo))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-FRAMES-TO-CLOCK-TIME:CAPS"></a><h3>GST_FRAMES_TO_CLOCK_TIME()</h3>
+<pre class="programlisting">#define             GST_FRAMES_TO_CLOCK_TIME(frames, rate)</pre>
+<p>
+Calculate clocktime from sample <em class="parameter"><code>frames</code></em> and <em class="parameter"><code>rate</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frames</code></em> :</span></p></td>
+<td>sample frames</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rate</code></em> :</span></p></td>
+<td>sampling rate</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-CLOCK-TIME-TO-FRAMES:CAPS"></a><h3>GST_CLOCK_TIME_TO_FRAMES()</h3>
+<pre class="programlisting">#define             GST_CLOCK_TIME_TO_FRAMES(clocktime, rate)</pre>
+<p>
+Calculate frames from <em class="parameter"><code>clocktime</code></em> and sample <em class="parameter"><code>rate</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clocktime</code></em> :</span></p></td>
+<td>clock time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rate</code></em> :</span></p></td>
+<td>sampling rate</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DEF-RATE:CAPS"></a><h3>GST_AUDIO_DEF_RATE</h3>
+<pre class="programlisting">#define GST_AUDIO_DEF_RATE 44100
+</pre>
+<p>
+Standard sampling rate used in consumer audio.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-buffer-clip"></a><h3>gst_audio_buffer_clip ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_audio_buffer_clip               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> *segment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> rate</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> bpf</code></em>);</pre>
+<p>
+Clip the the buffer to the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><code class="literal">GstSegment</code></a>.
+</p>
+<p>
+After calling this function the caller does not own a reference to
+<em class="parameter"><code>buffer</code></em> anymore.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>The buffer to clip.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>segment</code></em> :</span></p></td>
+<td>Segment in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><code class="literal">GST_FORMAT_DEFAULT</code></a> to which
+the buffer should be clipped.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rate</code></em> :</span></p></td>
+<td>sample rate.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bpf</code></em> :</span></p></td>
+<td>size of one audio frame in bytes. This is the size of one sample
+* channels.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the buffer is completely outside the configured segment,
+otherwise the clipped buffer is returned.
+If the buffer has no timestamp, it is assumed to be inside the segment and
+is not clipped</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html b/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html
new file mode 100644
index 0000000..508118e
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudioclock</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">
+<link rel="next" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudio.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudiodecoder.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudioclock.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioclock.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioclock.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudioclock"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudioclock.top_of_page"></a>gstaudioclock</span></h2>
+<p>gstaudioclock — Helper object for implementing audio clocks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudioclock.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioClock"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudioclock.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock-struct" title="struct GstAudioClock">GstAudioClock</a>;
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        (<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()">*GstAudioClockGetTimeFunc</a>)         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new" title="gst_audio_clock_new ()">gst_audio_clock_new</a>                 (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new-full" title="gst_audio_clock_new_full ()">gst_audio_clock_new_full</a>            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-adjust" title="gst_audio_clock_adjust ()">gst_audio_clock_adjust</a>              (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-get-time" title="gst_audio_clock_get_time ()">gst_audio_clock_get_time</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-reset" title="gst_audio_clock_reset ()">gst_audio_clock_reset</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-invalidate" title="gst_audio_clock_invalidate ()">gst_audio_clock_invalidate</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioclock.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
+                           +----GstAudioClock
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioclock.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> makes it easy for elements to implement a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, they
+simply need to provide a function that returns the current clock time.
+</p>
+<p>
+This object is internally used to implement the clock in <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>.
+</p>
+<p>
+Last reviewed on 2006-09-27 (0.10.12)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioclock.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioClock-struct"></a><h3>struct GstAudioClock</h3>
+<pre class="programlisting">struct GstAudioClock;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioClockGetTimeFunc"></a><h3>GstAudioClockGetTimeFunc ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        (*GstAudioClockGetTimeFunc)         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+This function will be called whenever the current clock time needs to be
+calculated. If this function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>, the last reported
+time will be returned by the clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current time or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a> if the previous time should
+be used.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-new"></a><h3>gst_audio_clock_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          gst_audio_clock_new                 (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> instance. Whenever the clock time should be
+calculated it will call <em class="parameter"><code>func</code></em> with <em class="parameter"><code>user_data</code></em>. When <em class="parameter"><code>func</code></em> returns
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>, the clock will return the last reported time.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the clock</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>a function</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> casted to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-new-full"></a><h3>gst_audio_clock_new_full ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          gst_audio_clock_new_full            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> instance. Whenever the clock time should be
+calculated it will call <em class="parameter"><code>func</code></em> with <em class="parameter"><code>user_data</code></em>. When <em class="parameter"><code>func</code></em> returns
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>, the clock will return the last reported time.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the clock</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>a function</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>destroy_notify</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> for <em class="parameter"><code>user_data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> casted to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-adjust"></a><h3>gst_audio_clock_adjust ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_audio_clock_adjust              (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>);</pre>
+<p>
+Adjust <em class="parameter"><code>time</code></em> with the internal offset of the audio clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>time</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<em class="parameter"><code>time</code></em> adjusted with the internal offset.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-get-time"></a><h3>gst_audio_clock_get_time ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_audio_clock_get_time            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>);</pre>
+<p>
+Report the time as returned by the <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> without applying
+any offsets.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the time as reported by the time function of the audio clock</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-reset"></a><h3>gst_audio_clock_reset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_clock_reset               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> *clock</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>);</pre>
+<p>
+Inform <em class="parameter"><code>clock</code></em> that future calls to <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> will return values
+starting from <em class="parameter"><code>time</code></em>. The clock will update an internal offset to make sure that
+future calls to internal_time will return an increasing result as required by
+the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>time</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-clock-invalidate"></a><h3>gst_audio_clock_invalidate ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_clock_invalidate          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>);</pre>
+<p>
+Invalidate the clock function. Call this function when the provided
+<a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc" title="GstAudioClockGetTimeFunc ()"><span class="type">GstAudioClockGetTimeFunc</span></a> cannot be called anymore, for example, when the
+user_data becomes invalid.
+</p>
+<p>
+After calling this function, <em class="parameter"><code>clock</code></em> will return the last returned time for
+the rest of its lifetime.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioclock.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html"><span class="type">GstSystemClock</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
new file mode 100644
index 0000000..d76e5a7
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
@@ -0,0 +1,912 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudiodecoder</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">
+<link rel="next" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudioclock.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudioencoder.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudiodecoder.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiodecoder.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiodecoder.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiodecoder.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudiodecoder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudiodecoder.top_of_page"></a>gstaudiodecoder</span></h2>
+<p>gstaudiodecoder — Base class for audio decoders</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudiodecoder.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioDecoder"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudiodecoder.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct" title="struct GstAudioDecoder">GstAudioDecoder</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass" title="struct GstAudioDecoderClass">GstAudioDecoderClass</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-ERROR:CAPS" title="GST_AUDIO_DECODER_ERROR()">GST_AUDIO_DECODER_ERROR</a>             (el,
+                                                         weight,
+                                                         domain,
+                                                         code,
+                                                         text,
+                                                         debug,
+                                                         ret)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-NAME:CAPS" title="GST_AUDIO_DECODER_SINK_NAME">GST_AUDIO_DECODER_SINK_NAME</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-PAD:CAPS" title="GST_AUDIO_DECODER_SINK_PAD()">GST_AUDIO_DECODER_SINK_PAD</a>          (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-NAME:CAPS" title="GST_AUDIO_DECODER_SRC_NAME">GST_AUDIO_DECODER_SRC_NAME</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-PAD:CAPS" title="GST_AUDIO_DECODER_SRC_PAD()">GST_AUDIO_DECODER_SRC_PAD</a>           (obj)
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-finish-frame" title="gst_audio_decoder_finish_frame ()">gst_audio_decoder_finish_frame</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frames</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="returnvalue">GstAudioInfo</span></a> *      <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-audio-info" title="gst_audio_decoder_get_audio_info ()">gst_audio_decoder_get_audio_info</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-byte-time" title="gst_audio_decoder_get_byte_time ()">gst_audio_decoder_get_byte_time</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-delay" title="gst_audio_decoder_get_delay ()">gst_audio_decoder_get_delay</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-latency" title="gst_audio_decoder_get_latency ()">gst_audio_decoder_get_latency</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-max-errors" title="gst_audio_decoder_get_max_errors ()">gst_audio_decoder_get_max_errors</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-min-latency" title="gst_audio_decoder_get_min_latency ()">gst_audio_decoder_get_min_latency</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-parse-state" title="gst_audio_decoder_get_parse_state ()">gst_audio_decoder_get_parse_state</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *sync</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *eos</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc" title="gst_audio_decoder_get_plc ()">gst_audio_decoder_get_plc</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc-aware" title="gst_audio_decoder_get_plc_aware ()">gst_audio_decoder_get_plc_aware</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-tolerance" title="gst_audio_decoder_get_tolerance ()">gst_audio_decoder_get_tolerance</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-byte-time" title="gst_audio_decoder_set_byte_time ()">gst_audio_decoder_set_byte_time</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-latency" title="gst_audio_decoder_set_latency ()">gst_audio_decoder_set_latency</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-max-errors" title="gst_audio_decoder_set_max_errors ()">gst_audio_decoder_set_max_errors</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-min-latency" title="gst_audio_decoder_set_min_latency ()">gst_audio_decoder_set_min_latency</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc" title="gst_audio_decoder_set_plc ()">gst_audio_decoder_set_plc</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware" title="gst_audio_decoder_set_plc_aware ()">gst_audio_decoder_set_plc_aware</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> plc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance" title="gst_audio_decoder_set_tolerance ()">gst_audio_decoder_set_tolerance</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> tolerance</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstAudioDecoder
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--min-latency" title='The "min-latency" property'>min-latency</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--plc" title='The "plc" property'>plc</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--tolerance" title='The "tolerance" property'>tolerance</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.description"></a><h2>Description</h2>
+<p>
+This base class is for audio decoders turning encoded data into
+raw audio samples.
+</p>
+<p>
+GstAudioDecoder and subclass should cooperate as follows.
+</p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Configuration</b></p>
+<ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+    Initially, GstAudioDecoder calls <em class="parameter"><code>start</code></em> when the decoder element
+    is activated, which allows subclass to perform any global setup.
+    Base class (context) parameters can already be set according to subclass
+    capabilities (or possibly upon receive more information in subsequent
+    <em class="parameter"><code>set_format</code></em>).
+  </p></li>
+<li class="listitem"><p>
+    GstAudioDecoder calls <em class="parameter"><code>set_format</code></em> to inform subclass of the format
+    of input audio data that it is about to receive.
+    While unlikely, it might be called more than once, if changing input
+    parameters require reconfiguration.
+  </p></li>
+<li class="listitem"><p>
+    GstAudioDecoder calls <em class="parameter"><code>stop</code></em> at end of all processing.
+  </p></li>
+</ul>
+</div></li>
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Data processing</b></p>
+<ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+      Base class gathers input data, and optionally allows subclass
+      to parse this into subsequently manageable (as defined by subclass)
+      chunks.  Such chunks are subsequently referred to as 'frames',
+      though they may or may not correspond to 1 (or more) audio format frame.
+    </p></li>
+<li class="listitem"><p>
+      Input frame is provided to subclass' <em class="parameter"><code>handle_frame</code></em>.
+    </p></li>
+<li class="listitem"><p>
+      If codec processing results in decoded data, subclass should call
+      <em class="parameter"><code>gst_audio_decoder_finish_frame</code></em> to have decoded data pushed
+      downstream.
+    </p></li>
+<li class="listitem"><p>
+      Just prior to actually pushing a buffer downstream,
+      it is passed to <em class="parameter"><code>pre_push</code></em>.  Subclass should either use this callback
+      to arrange for additional downstream pushing or otherwise ensure such
+      custom pushing occurs after at least a method call has finished since
+      setting src pad caps.
+    </p></li>
+<li class="listitem"><p>
+      During the parsing process GstAudioDecoderClass will handle both
+      srcpad and sinkpad events. Sink events will be passed to subclass
+      if <em class="parameter"><code>event</code></em> callback has been provided.
+    </p></li>
+</ul>
+</div></li>
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Shutdown phase</b></p>
+<ul class="itemizedlist" type="disc"><li class="listitem"><p>
+    GstAudioDecoder class calls <em class="parameter"><code>stop</code></em> to inform the subclass that data
+    parsing will be stopped.
+  </p></li></ul>
+</div></li>
+</ol></div>
+<p>
+</p>
+<p>
+Subclass is responsible for providing pad template caps for
+source and sink pads. The pads need to be named "sink" and "src". It also
+needs to set the fixed caps on srcpad, when the format is ensured.  This
+is typically when base class calls subclass' <em class="parameter"><code>set_format</code></em> function, though
+it might be delayed until calling <em class="parameter"><code>gst_audio_decoder_finish_frame</code></em>.
+</p>
+<p>
+In summary, above process should have subclass concentrating on
+codec data processing while leaving other matters to base class,
+such as most notably timestamp handling.  While it may exert more control
+in this area (see e.g. <em class="parameter"><code>pre_push</code></em>), it is very much not recommended.
+</p>
+<p>
+In particular, base class will try to arrange for perfect output timestamps
+as much as possible while tracking upstream timestamps.
+To this end, if deviation between the next ideal expected perfect timestamp
+and upstream exceeds <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--tolerance" title='The "tolerance" property'><span class="type">"tolerance"</span></a>, then resync to upstream
+occurs (which would happen always if the tolerance mechanism is disabled).
+</p>
+<p>
+In non-live pipelines, baseclass can also (configurably) arrange for
+output buffer aggregation which may help to redue large(r) numbers of
+small(er) buffers being pushed and processed downstream.
+</p>
+<p>
+On the other hand, it should be noted that baseclass only provides limited
+seeking support (upon explicit subclass request), as full-fledged support
+should rather be left to upstream demuxer, parser or alike.  This simple
+approach caters for seeking and duration reporting using estimated input
+bitrates.
+</p>
+<p>
+Things that subclass need to take care of:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>Provide pad templates</p></li>
+<li class="listitem"><p>
+     Set source pad caps when appropriate
+  </p></li>
+<li class="listitem"><p>
+     Set user-configurable properties to sane defaults for format and
+     implementing codec at hand, and convey some subclass capabilities and
+     expectations in context.
+  </p></li>
+<li class="listitem"><p>
+     Accept data in <em class="parameter"><code>handle_frame</code></em> and provide encoded results to
+     <em class="parameter"><code>gst_audio_decoder_finish_frame</code></em>.  If it is prepared to perform
+     PLC, it should also accept NULL data in <em class="parameter"><code>handle_frame</code></em> and provide for
+     data for indicated duration.
+  </p></li>
+</ul></div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioDecoder-struct"></a><h3>struct GstAudioDecoder</h3>
+<pre class="programlisting">struct GstAudioDecoder;</pre>
+<p>
+The opaque <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> data structure.
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioDecoderClass"></a><h3>struct GstAudioDecoderClass</h3>
+<pre class="programlisting">struct GstAudioDecoderClass {
+  GstElementClass element_class;
+
+  /* virtual methods for subclasses */
+
+  gboolean      (*start)              (GstAudioDecoder *dec);
+
+  gboolean      (*stop)               (GstAudioDecoder *dec);
+
+  gboolean      (*set_format)         (GstAudioDecoder *dec,
+                                       GstCaps *caps);
+
+  GstFlowReturn (*parse)              (GstAudioDecoder *dec,
+                                       GstAdapter *adapter,
+                                       gint *offset, gint *length);
+
+  GstFlowReturn (*handle_frame)       (GstAudioDecoder *dec,
+                                       GstBuffer *buffer);
+
+  void          (*flush)              (GstAudioDecoder *dec, gboolean hard);
+
+  GstFlowReturn (*pre_push)           (GstAudioDecoder *dec,
+                                       GstBuffer **buffer);
+
+  gboolean      (*event)              (GstAudioDecoder *dec,
+                                       GstEvent *event);
+};
+</pre>
+<p>
+Subclasses can override any of the available virtual methods or not, as
+needed. At minimum <em class="parameter"><code>handle_frame</code></em> (and likely <em class="parameter"><code>set_format</code></em>) needs to be
+overridden.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstAudioDecoderClass.element-class"></a>element_class</code></em>;</span></p></td>
+<td>The parent class structure</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.start"></a>start</code></em> ()</span></p></td>
+<td>Optional.
+Called when the element starts processing.
+Allows opening external resources.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.stop"></a>stop</code></em> ()</span></p></td>
+<td>Optional.
+Called when the element stops processing.
+Allows closing external resources.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.set-format"></a>set_format</code></em> ()</span></p></td>
+<td>Notifies subclass of incoming data format (caps).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.parse"></a>parse</code></em> ()</span></p></td>
+<td>Optional.
+Allows chopping incoming data into manageable units (frames)
+for subsequent decoding.  This division is at subclass
+discretion and may or may not correspond to 1 (or more)
+frames as defined by audio format.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.handle-frame"></a>handle_frame</code></em> ()</span></p></td>
+<td>Provides input data (or NULL to clear any remaining data)
+to subclass.  Input data ref management is performed by
+base class, subclass should not care or intervene.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.flush"></a>flush</code></em> ()</span></p></td>
+<td>Optional.
+Instructs subclass to clear any codec caches and discard
+any pending samples and not yet returned encoded data.
+<em class="parameter"><code>hard</code></em> indicates whether a FLUSH is being processed,
+or otherwise a DISCONT (or conceptually similar).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.pre-push"></a>pre_push</code></em> ()</span></p></td>
+<td>Optional.
+Called just prior to pushing (encoded data) buffer downstream.
+Subclass has full discretionary access to buffer,
+and a not OK flow return will abort downstream pushing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioDecoderClass.event"></a>event</code></em> ()</span></p></td>
+<td>Optional.
+Event handler on the sink pad. This function should return
+TRUE if the event was handled and should be discarded
+(i.e. not unref'ed).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DECODER-ERROR:CAPS"></a><h3>GST_AUDIO_DECODER_ERROR()</h3>
+<pre class="programlisting">#define             GST_AUDIO_DECODER_ERROR(el, weight, domain, code, text, debug, ret)</pre>
+<p>
+Utility function that audio decoder elements can use in case they encountered
+a data processing error that may be fatal for the current "data unit" but
+need not prevent subsequent decoding.  Such errors are counted and if there
+are too many, as configured in the context's max_errors, the pipeline will
+post an error message and the application will be requested to stop further
+media processing.  Otherwise, it is considered a "glitch" and only a warning
+is logged. In either case, <em class="parameter"><code>ret</code></em> is set to the proper value to
+return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>el</code></em> :</span></p></td>
+<td>the base audio decoder element that generates the error</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>weight</code></em> :</span></p></td>
+<td>element defined weight of the error, added to error count</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>domain</code></em> :</span></p></td>
+<td>like CORE, LIBRARY, RESOURCE or STREAM (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstGError.html"><span class="type">gstreamer-GstGError</span></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>code</code></em> :</span></p></td>
+<td>error code defined for that domain (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstGError.html"><span class="type">gstreamer-GstGError</span></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>the message to display (format string and args enclosed in
+parentheses)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>debug</code></em> :</span></p></td>
+<td>debugging information for the message (format string and args
+enclosed in parentheses)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ret</code></em> :</span></p></td>
+<td>variable to receive return value</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DECODER-SINK-NAME:CAPS"></a><h3>GST_AUDIO_DECODER_SINK_NAME</h3>
+<pre class="programlisting">#define GST_AUDIO_DECODER_SINK_NAME    "sink"
+</pre>
+<p>
+The name of the templates for the sink pad.
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DECODER-SINK-PAD:CAPS"></a><h3>GST_AUDIO_DECODER_SINK_PAD()</h3>
+<pre class="programlisting">#define GST_AUDIO_DECODER_SINK_PAD(obj)        (((GstAudioDecoder *) (obj))-&gt;sinkpad)
+</pre>
+<p>
+Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>base audio codec instance</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DECODER-SRC-NAME:CAPS"></a><h3>GST_AUDIO_DECODER_SRC_NAME</h3>
+<pre class="programlisting">#define GST_AUDIO_DECODER_SRC_NAME     "src"
+</pre>
+<p>
+The name of the templates for the source pad.
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-DECODER-SRC-PAD:CAPS"></a><h3>GST_AUDIO_DECODER_SRC_PAD()</h3>
+<pre class="programlisting">#define GST_AUDIO_DECODER_SRC_PAD(obj)         (((GstAudioDecoder *) (obj))-&gt;srcpad)
+</pre>
+<p>
+Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>base audio codec instance</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-finish-frame"></a><h3>gst_audio_decoder_finish_frame ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_audio_decoder_finish_frame      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frames</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-audio-info"></a><h3>gst_audio_decoder_get_audio_info ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="returnvalue">GstAudioInfo</span></a> *      gst_audio_decoder_get_audio_info    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> describing the input audio format</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-byte-time"></a><h3>gst_audio_decoder_get_byte_time ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_decoder_get_byte_time     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured byte to time conversion setting</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-delay"></a><h3>gst_audio_decoder_get_delay ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_decoder_get_delay         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured decoder delay</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-latency"></a><h3>gst_audio_decoder_get_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_get_latency       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max</code></em>);</pre>
+<p>
+Sets the variables pointed to by <em class="parameter"><code>min</code></em> and <em class="parameter"><code>max</code></em> to the currently configured
+latency.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>a pointer to storage to hold minimum latency. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>a pointer to storage to hold maximum latency. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-max-errors"></a><h3>gst_audio_decoder_get_max_errors ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_decoder_get_max_errors    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured decoder tolerated error count.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-min-latency"></a><h3>gst_audio_decoder_get_min_latency ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              gst_audio_decoder_get_min_latency   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<p>
+Queries decoder's latency aggregation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>aggregation latency.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-parse-state"></a><h3>gst_audio_decoder_get_parse_state ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_get_parse_state   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *sync</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *eos</code></em>);</pre>
+<p>
+Return current parsing (sync and eos) state.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sync</code></em> :</span></p></td>
+<td>a pointer to a variable to hold the current sync state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>eos</code></em> :</span></p></td>
+<td>a pointer to a variable to hold the current eos state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-plc"></a><h3>gst_audio_decoder_get_plc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_decoder_get_plc           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<p>
+Queries decoder packet loss concealment handling.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if packet loss concealment is enabled.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-plc-aware"></a><h3>gst_audio_decoder_get_plc_aware ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_decoder_get_plc_aware     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured plc handling</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-get-tolerance"></a><h3>gst_audio_decoder_get_tolerance ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              gst_audio_decoder_get_tolerance     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
+<p>
+Queries current audio jitter tolerance threshold.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>decoder audio jitter tolerance threshold.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-byte-time"></a><h3>gst_audio_decoder_set_byte_time ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_byte_time     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Allows baseclass to perform byte to time estimated conversion.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>whether to enable byte to time conversion</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-latency"></a><h3>gst_audio_decoder_set_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_latency       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max</code></em>);</pre>
+<p>
+Sets decoder latency.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>minimum latency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>maximum latency</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-max-errors"></a><h3>gst_audio_decoder_set_max_errors ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_max_errors    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);</pre>
+<p>
+Sets numbers of tolerated decoder errors, where a tolerated one is then only
+warned about, but more than tolerated will lead to fatal error.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>max tolerated errors</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-min-latency"></a><h3>gst_audio_decoder_set_min_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_min_latency   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> num</code></em>);</pre>
+<p>
+Sets decoder minimum aggregation latency.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>new minimum latency</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-plc"></a><h3>gst_audio_decoder_set_plc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_plc           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enable or disable decoder packet loss concealment, provided subclass
+and codec are capable and allow handling plc.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-plc-aware"></a><h3>gst_audio_decoder_set_plc_aware ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_plc_aware     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> plc</code></em>);</pre>
+<p>
+Indicates whether or not subclass handles packet loss concealment (plc).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>plc</code></em> :</span></p></td>
+<td>new plc state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-set-tolerance"></a><h3>gst_audio_decoder_set_tolerance ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_decoder_set_tolerance     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> tolerance</code></em>);</pre>
+<p>
+Configures decoder audio jitter tolerance threshold.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dec</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tolerance</code></em> :</span></p></td>
+<td>new tolerance</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioDecoder--min-latency"></a><h3>The <code class="literal">"min-latency"</code> property</h3>
+<pre class="programlisting">  "min-latency"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Aggregate output data to a minimum of latency time (ns).</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioDecoder--plc"></a><h3>The <code class="literal">"plc"</code> property</h3>
+<pre class="programlisting">  "plc"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Perform packet loss concealment (if supported).</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioDecoder--tolerance"></a><h3>The <code class="literal">"tolerance"</code> property</h3>
+<pre class="programlisting">  "tolerance"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Perfect ts while timestamp jitter/imperfection within tolerance (ns).</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiodecoder.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
new file mode 100644
index 0000000..c9fb9c7
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
@@ -0,0 +1,964 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudioencoder</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">
+<link rel="next" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudiodecoder.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudiofilter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudioencoder.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioencoder.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioencoder.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioencoder.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioencoder.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudioencoder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudioencoder.top_of_page"></a>gstaudioencoder</span></h2>
+<p>gstaudioencoder — Base class for audio encoders</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudioencoder.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioEncoder"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudioencoder.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder-struct" title="struct GstAudioEncoder">GstAudioEncoder</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoderClass" title="struct GstAudioEncoderClass">GstAudioEncoderClass</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SEGMENT:CAPS" title="GST_AUDIO_ENCODER_SEGMENT()">GST_AUDIO_ENCODER_SEGMENT</a>           (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-NAME:CAPS" title="GST_AUDIO_ENCODER_SINK_NAME">GST_AUDIO_ENCODER_SINK_NAME</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-PAD:CAPS" title="GST_AUDIO_ENCODER_SINK_PAD()">GST_AUDIO_ENCODER_SINK_PAD</a>          (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-NAME:CAPS" title="GST_AUDIO_ENCODER_SRC_NAME">GST_AUDIO_ENCODER_SRC_NAME</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-PAD:CAPS" title="GST_AUDIO_ENCODER_SRC_PAD()">GST_AUDIO_ENCODER_SRC_PAD</a>           (obj)
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-finish-frame" title="gst_audio_encoder_finish_frame ()">gst_audio_encoder_finish_frame</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> samples</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="returnvalue">GstAudioInfo</span></a> *      <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-audio-info" title="gst_audio_encoder_get_audio_info ()">gst_audio_encoder_get_audio_info</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-max" title="gst_audio_encoder_get_frame_max ()">gst_audio_encoder_get_frame_max</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-min" title="gst_audio_encoder_get_frame_samples_min ()">gst_audio_encoder_get_frame_samples_min</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-max" title="gst_audio_encoder_get_frame_samples_max ()">gst_audio_encoder_get_frame_samples_max</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-hard-resync" title="gst_audio_encoder_get_hard_resync ()">gst_audio_encoder_get_hard_resync</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-latency" title="gst_audio_encoder_get_latency ()">gst_audio_encoder_get_latency</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-lookahead" title="gst_audio_encoder_get_lookahead ()">gst_audio_encoder_get_lookahead</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-mark-granule" title="gst_audio_encoder_get_mark_granule ()">gst_audio_encoder_get_mark_granule</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-perfect-timestamp" title="gst_audio_encoder_get_perfect_timestamp ()">gst_audio_encoder_get_perfect_timestamp</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-tolerance" title="gst_audio_encoder_get_tolerance ()">gst_audio_encoder_get_tolerance</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-proxy-getcaps" title="gst_audio_encoder_proxy_getcaps ()">gst_audio_encoder_proxy_getcaps</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-max" title="gst_audio_encoder_set_frame_max ()">gst_audio_encoder_set_frame_max</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-min" title="gst_audio_encoder_set_frame_samples_min ()">gst_audio_encoder_set_frame_samples_min</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-max" title="gst_audio_encoder_set_frame_samples_max ()">gst_audio_encoder_set_frame_samples_max</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-hard-resync" title="gst_audio_encoder_set_hard_resync ()">gst_audio_encoder_set_hard_resync</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-latency" title="gst_audio_encoder_set_latency ()">gst_audio_encoder_set_latency</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-lookahead" title="gst_audio_encoder_set_lookahead ()">gst_audio_encoder_set_lookahead</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-mark-granule" title="gst_audio_encoder_set_mark_granule ()">gst_audio_encoder_set_mark_granule</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-perfect-timestamp" title="gst_audio_encoder_set_perfect_timestamp ()">gst_audio_encoder_set_perfect_timestamp</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-tolerance" title="gst_audio_encoder_set_tolerance ()">gst_audio_encoder_set_tolerance</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> tolerance</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstAudioEncoder
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAudioEncoder implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html">GstPreset</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--hard-resync" title='The "hard-resync" property'>hard-resync</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--mark-granule" title='The "mark-granule" property'>mark-granule</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read
+  "<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--perfect-timestamp" title='The "perfect-timestamp" property'>perfect-timestamp</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--tolerance" title='The "tolerance" property'>tolerance</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.description"></a><h2>Description</h2>
+<p>
+This base class is for audio encoders turning raw audio samples into
+encoded audio data.
+</p>
+<p>
+GstAudioEncoder and subclass should cooperate as follows.
+</p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Configuration</b></p>
+<ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+    Initially, GstAudioEncoder calls <em class="parameter"><code>start</code></em> when the encoder element
+    is activated, which allows subclass to perform any global setup.
+  </p></li>
+<li class="listitem"><p>
+    GstAudioEncoder calls <em class="parameter"><code>set_format</code></em> to inform subclass of the format
+    of input audio data that it is about to receive.  Subclass should
+    setup for encoding and configure various base class parameters
+    appropriately, notably those directing desired input data handling.
+    While unlikely, it might be called more than once, if changing input
+    parameters require reconfiguration.
+  </p></li>
+<li class="listitem"><p>
+    GstAudioEncoder calls <em class="parameter"><code>stop</code></em> at end of all processing.
+  </p></li>
+</ul>
+</div></li>
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Data processing</b></p>
+<ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+      Base class gathers input sample data (as directed by the context's
+      frame_samples and frame_max) and provides this to subclass' <em class="parameter"><code>handle_frame</code></em>.
+    </p></li>
+<li class="listitem"><p>
+      If codec processing results in encoded data, subclass should call
+      <em class="parameter"><code>gst_audio_encoder_finish_frame</code></em> to have encoded data pushed
+      downstream.  Alternatively, it might also call to indicate dropped
+      (non-encoded) samples.
+    </p></li>
+<li class="listitem"><p>
+      Just prior to actually pushing a buffer downstream,
+      it is passed to <em class="parameter"><code>pre_push</code></em>.
+    </p></li>
+<li class="listitem"><p>
+      During the parsing process GstAudioEncoderClass will handle both
+      srcpad and sinkpad events. Sink events will be passed to subclass
+      if <em class="parameter"><code>event</code></em> callback has been provided.
+    </p></li>
+</ul>
+</div></li>
+<li class="listitem"><div class="itemizedlist">
+<p class="title"><b>Shutdown phase</b></p>
+<ul class="itemizedlist" type="disc"><li class="listitem"><p>
+    GstAudioEncoder class calls <em class="parameter"><code>stop</code></em> to inform the subclass that data
+    parsing will be stopped.
+  </p></li></ul>
+</div></li>
+</ol></div>
+<p>
+</p>
+<p>
+Subclass is responsible for providing pad template caps for
+source and sink pads. The pads need to be named "sink" and "src". It also 
+needs to set the fixed caps on srcpad, when the format is ensured.  This
+is typically when base class calls subclass' <em class="parameter"><code>set_format</code></em> function, though
+it might be delayed until calling <em class="parameter"><code>gst_audio_encoder_finish_frame</code></em>.
+</p>
+<p>
+In summary, above process should have subclass concentrating on
+codec data processing while leaving other matters to base class,
+such as most notably timestamp handling.  While it may exert more control
+in this area (see e.g. <em class="parameter"><code>pre_push</code></em>), it is very much not recommended.
+</p>
+<p>
+In particular, base class will either favor tracking upstream timestamps
+(at the possible expense of jitter) or aim to arrange for a perfect stream of
+output timestamps, depending on <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--perfect-timestamp" title='The "perfect-timestamp" property'><span class="type">"perfect-timestamp"</span></a>.
+However, in the latter case, the input may not be so perfect or ideal, which
+is handled as follows.  An input timestamp is compared with the expected
+timestamp as dictated by input sample stream and if the deviation is less
+than <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--tolerance" title='The "tolerance" property'><span class="type">"tolerance"</span></a>, the deviation is discarded.
+Otherwise, it is considered a discontuinity and subsequent output timestamp
+is resynced to the new position after performing configured discontinuity
+processing.  In the non-perfect-timestamp case, an upstream variation
+exceeding tolerance only leads to marking DISCONT on subsequent outgoing
+(while timestamps are adjusted to upstream regardless of variation).
+While DISCONT is also marked in the perfect-timestamp case, this one
+optionally (see <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--hard-resync" title='The "hard-resync" property'><span class="type">"hard-resync"</span></a>)
+performs some additional steps, such as clipping of (early) input samples
+or draining all currently remaining input data, depending on the direction
+of the discontuinity.
+</p>
+<p>
+If perfect timestamps are arranged, it is also possible to request baseclass
+(usually set by subclass) to provide additional buffer metadata (in OFFSET
+and OFFSET_END) fields according to granule defined semantics currently
+needed by oggmux.  Specifically, OFFSET is set to granulepos (= sample count
+including buffer) and OFFSET_END to corresponding timestamp (as determined
+by same sample count and sample rate).
+</p>
+<p>
+Things that subclass need to take care of:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>Provide pad templates</p></li>
+<li class="listitem"><p>
+     Set source pad caps when appropriate
+  </p></li>
+<li class="listitem"><p>
+     Inform base class of buffer processing needs using context's
+     frame_samples and frame_bytes.
+  </p></li>
+<li class="listitem"><p>
+     Set user-configurable properties to sane defaults for format and
+     implementing codec at hand, e.g. those controlling timestamp behaviour
+     and discontinuity processing.
+  </p></li>
+<li class="listitem"><p>
+     Accept data in <em class="parameter"><code>handle_frame</code></em> and provide encoded results to
+     <em class="parameter"><code>gst_audio_encoder_finish_frame</code></em>.
+  </p></li>
+</ul></div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioEncoder-struct"></a><h3>struct GstAudioEncoder</h3>
+<pre class="programlisting">struct GstAudioEncoder;</pre>
+<p>
+The opaque <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> data structure.
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioEncoderClass"></a><h3>struct GstAudioEncoderClass</h3>
+<pre class="programlisting">struct GstAudioEncoderClass {
+  GstElementClass element_class;
+
+  /* virtual methods for subclasses */
+
+  gboolean      (*start)              (GstAudioEncoder *enc);
+
+  gboolean      (*stop)               (GstAudioEncoder *enc);
+
+  gboolean      (*set_format)         (GstAudioEncoder *enc,
+                                       GstAudioInfo        *info);
+
+  GstFlowReturn (*handle_frame)       (GstAudioEncoder *enc,
+                                       GstBuffer *buffer);
+
+  void          (*flush)              (GstAudioEncoder *enc);
+
+  GstFlowReturn (*pre_push)           (GstAudioEncoder *enc,
+                                       GstBuffer **buffer);
+
+  gboolean      (*event)              (GstAudioEncoder *enc,
+                                       GstEvent *event);
+
+  GstCaps *     (*getcaps)            (GstAudioEncoder *enc, GstCaps *filter);
+};
+</pre>
+<p>
+Subclasses can override any of the available virtual methods or not, as
+needed. At minimum <em class="parameter"><code>set_format</code></em> and <em class="parameter"><code>handle_frame</code></em> needs to be overridden.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstAudioEncoderClass.element-class"></a>element_class</code></em>;</span></p></td>
+<td>The parent class structure</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.start"></a>start</code></em> ()</span></p></td>
+<td>Optional.
+Called when the element starts processing.
+Allows opening external resources.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.stop"></a>stop</code></em> ()</span></p></td>
+<td>Optional.
+Called when the element stops processing.
+Allows closing external resources.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.set-format"></a>set_format</code></em> ()</span></p></td>
+<td>Notifies subclass of incoming data format.
+GstAudioInfo contains the format according to provided caps.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.handle-frame"></a>handle_frame</code></em> ()</span></p></td>
+<td>Provides input samples (or NULL to clear any remaining data)
+according to directions as configured by the subclass
+using the API.  Input data ref management is performed
+by base class, subclass should not care or intervene.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.flush"></a>flush</code></em> ()</span></p></td>
+<td>Optional.
+Instructs subclass to clear any codec caches and discard
+any pending samples and not yet returned encoded data.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.pre-push"></a>pre_push</code></em> ()</span></p></td>
+<td>Optional.
+Called just prior to pushing (encoded data) buffer downstream.
+Subclass has full discretionary access to buffer,
+and a not OK flow return will abort downstream pushing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.event"></a>event</code></em> ()</span></p></td>
+<td>Optional.
+Event handler on the sink pad. This function should return
+TRUE if the event was handled and should be discarded
+(i.e. not unref'ed).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioEncoderClass.getcaps"></a>getcaps</code></em> ()</span></p></td>
+<td>Optional.
+Allows for a custom sink getcaps implementation (e.g.
+for multichannel input specification).  If not implemented,
+default returns gst_audio_encoder_proxy_getcaps
+applied to sink template caps.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-ENCODER-SEGMENT:CAPS"></a><h3>GST_AUDIO_ENCODER_SEGMENT()</h3>
+<pre class="programlisting">#define GST_AUDIO_ENCODER_SEGMENT(obj)     (GST_AUDIO_ENCODER_CAST (obj)-&gt;segment)
+</pre>
+<p>
+Gives the segment of the element.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>base parse instance</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-ENCODER-SINK-NAME:CAPS"></a><h3>GST_AUDIO_ENCODER_SINK_NAME</h3>
+<pre class="programlisting">#define GST_AUDIO_ENCODER_SINK_NAME "sink"
+</pre>
+<p>
+the name of the templates for the sink pad
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-ENCODER-SINK-PAD:CAPS"></a><h3>GST_AUDIO_ENCODER_SINK_PAD()</h3>
+<pre class="programlisting">#define GST_AUDIO_ENCODER_SINK_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)-&gt;sinkpad)
+</pre>
+<p>
+Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>base parse instance</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-ENCODER-SRC-NAME:CAPS"></a><h3>GST_AUDIO_ENCODER_SRC_NAME</h3>
+<pre class="programlisting">#define GST_AUDIO_ENCODER_SRC_NAME	        "src"
+</pre>
+<p>
+the name of the templates for the source pad
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-AUDIO-ENCODER-SRC-PAD:CAPS"></a><h3>GST_AUDIO_ENCODER_SRC_PAD()</h3>
+<pre class="programlisting">#define GST_AUDIO_ENCODER_SRC_PAD(obj) (GST_AUDIO_ENCODER_CAST (obj)-&gt;srcpad)
+</pre>
+<p>
+Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>base parse instance</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-finish-frame"></a><h3>gst_audio_encoder_finish_frame ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_audio_encoder_finish_frame      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> samples</code></em>);</pre>
+<p>
+Collects encoded data and pushes encoded data downstream.
+Source pad caps must be set when this is called.
+</p>
+<p>
+If <em class="parameter"><code>samples</code></em> &lt; 0, then best estimate is all samples provided to encoder
+(subclass) so far.  <em class="parameter"><code>buf</code></em> may be NULL, in which case next number of <em class="parameter"><code>samples</code></em>
+are considered discarded, e.g. as a result of discontinuous transmission,
+and a discontinuity is marked.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>encoded data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>samples</code></em> :</span></p></td>
+<td>number of samples (per channel) represented by encoded data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that should be escalated to caller (of caller)</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-audio-info"></a><h3>gst_audio_encoder_get_audio_info ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="returnvalue">GstAudioInfo</span></a> *      gst_audio_encoder_get_audio_info    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> describing the input audio format</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-frame-max"></a><h3>gst_audio_encoder_get_frame_max ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_encoder_get_frame_max     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured maximum handled frames</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-frame-samples-min"></a><h3>gst_audio_encoder_get_frame_samples_min ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_encoder_get_frame_samples_min
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently maximum requested samples per frame</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-frame-samples-max"></a><h3>gst_audio_encoder_get_frame_samples_max ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_encoder_get_frame_samples_max
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-hard-resync"></a><h3>gst_audio_encoder_get_hard_resync ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_encoder_get_hard_resync   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-latency"></a><h3>gst_audio_encoder_get_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_get_latency       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max</code></em>);</pre>
+<p>
+Sets the variables pointed to by <em class="parameter"><code>min</code></em> and <em class="parameter"><code>max</code></em> to the currently configured
+latency.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>a pointer to storage to hold minimum latency. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>a pointer to storage to hold maximum latency. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-lookahead"></a><h3>gst_audio_encoder_get_lookahead ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_audio_encoder_get_lookahead     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>currently configured encoder lookahead</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-mark-granule"></a><h3>gst_audio_encoder_get_mark_granule ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_encoder_get_mark_granule  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<p>
+Queries if the encoder will handle granule marking.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if granule marking is enabled.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-perfect-timestamp"></a><h3>gst_audio_encoder_get_perfect_timestamp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_encoder_get_perfect_timestamp
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<p>
+Queries encoder perfect timestamp behaviour.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if pefect timestamp setting enabled.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-get-tolerance"></a><h3>gst_audio_encoder_get_tolerance ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              gst_audio_encoder_get_tolerance     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
+<p>
+Queries current audio jitter tolerance threshold.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>encoder audio jitter tolerance threshold.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-proxy-getcaps"></a><h3>gst_audio_encoder_proxy_getcaps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_audio_encoder_proxy_getcaps     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Returns caps that express <em class="parameter"><code>caps</code></em> (or sink template caps if <em class="parameter"><code>caps</code></em> == NULL)
+restricted to channel/rate combinations supported by downstream elements
+(e.g. muxers).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>initial caps</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> owned by caller</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-frame-max"></a><h3>gst_audio_encoder_set_frame_max ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_frame_max     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);</pre>
+<p>
+Sets max number of frames accepted at once (assumed minimally 1).
+Requires <em class="parameter"><code>frame_samples_min</code></em> and <em class="parameter"><code>frame_samples_max</code></em> to be the equal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>number of frames</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-frame-samples-min"></a><h3>gst_audio_encoder_set_frame_samples_min ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_frame_samples_min
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);</pre>
+<p>
+Sets number of samples (per channel) subclass needs to be handed,
+at least or will be handed all available if 0.
+</p>
+<p>
+If an exact number of samples is required, <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-max" title="gst_audio_encoder_set_frame_samples_max ()"><code class="function">gst_audio_encoder_set_frame_samples_max()</code></a>
+must be called with the same number.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>number of samples per frame</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-frame-samples-max"></a><h3>gst_audio_encoder_set_frame_samples_max ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_frame_samples_max
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);</pre>
+<p>
+Sets number of samples (per channel) subclass needs to be handed,
+at most or will be handed all available if 0.
+</p>
+<p>
+If an exact number of samples is required, <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-min" title="gst_audio_encoder_set_frame_samples_min ()"><code class="function">gst_audio_encoder_set_frame_samples_min()</code></a>
+must be called with the same number.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>number of samples per frame</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-hard-resync"></a><h3>gst_audio_encoder_set_hard_resync ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_hard_resync   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-latency"></a><h3>gst_audio_encoder_set_latency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_latency       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max</code></em>);</pre>
+<p>
+Sets encoder latency.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>min</code></em> :</span></p></td>
+<td>minimum latency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>max</code></em> :</span></p></td>
+<td>maximum latency</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-lookahead"></a><h3>gst_audio_encoder_set_lookahead ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_lookahead     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num</code></em>);</pre>
+<p>
+Sets encoder lookahead (in units of input rate samples)
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>lookahead</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-mark-granule"></a><h3>gst_audio_encoder_set_mark_granule ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_mark_granule  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enable or disable encoder granule handling.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-perfect-timestamp"></a><h3>gst_audio_encoder_set_perfect_timestamp ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_perfect_timestamp
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);</pre>
+<p>
+Enable or disable encoder perfect output timestamp preference.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enabled</code></em> :</span></p></td>
+<td>new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-encoder-set-tolerance"></a><h3>gst_audio_encoder_set_tolerance ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_encoder_set_tolerance     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> tolerance</code></em>);</pre>
+<p>
+Configures encoder audio jitter tolerance threshold.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enc</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tolerance</code></em> :</span></p></td>
+<td>new tolerance</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioEncoder--hard-resync"></a><h3>The <code class="literal">"hard-resync"</code> property</h3>
+<pre class="programlisting">  "hard-resync"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Perform clipping and sample flushing upon discontinuity.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioEncoder--mark-granule"></a><h3>The <code class="literal">"mark-granule"</code> property</h3>
+<pre class="programlisting">  "mark-granule"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read</pre>
+<p>Apply granule semantics to buffer metadata (implies perfect-timestamp).</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioEncoder--perfect-timestamp"></a><h3>The <code class="literal">"perfect-timestamp"</code> property</h3>
+<pre class="programlisting">  "perfect-timestamp"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Favour perfect timestamps over tracking upstream timestamps.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioEncoder--tolerance"></a><h3>The <code class="literal">"tolerance"</code> property</h3>
+<pre class="programlisting">  "tolerance"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Consider discontinuity if timestamp jitter/imperfection exceeds tolerance (ns).</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 40000000</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioencoder.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html b/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html
new file mode 100644
index 0000000..c026875
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudiofilter</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">
+<link rel="next" href="gst-plugins-base-libs-gstaudiomixerutils.html" title="gstaudiomixerutils">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudioencoder.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudiomixerutils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudiofilter.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiofilter.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiofilter.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudiofilter"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudiofilter.top_of_page"></a>gstaudiofilter</span></h2>
+<p>gstaudiofilter — Base class for simple audio filters</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudiofilter.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioFilter"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudiofilter.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct" title="struct GstAudioFilter">GstAudioFilter</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" title="struct GstAudioFilterClass">GstAudioFilterClass</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#gst-audio-filter-class-add-pad-templates" title="gst_audio_filter_class_add_pad_templates ()">gst_audio_filter_class_add_pad_templates</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" title="struct GstAudioFilterClass"><span class="type">GstAudioFilterClass</span></a> *klass</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *allowed_caps</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiofilter.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----GstAudioFilter
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiofilter.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter"><span class="type">GstAudioFilter</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html"><span class="type">GstBaseTransform</span></a>-derived base class for simple audio
+filters, ie. those that output the same format that they get as input.
+</p>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter"><span class="type">GstAudioFilter</span></a> will parse the input format for you (with error checking)
+before calling your setup function. Also, elements deriving from
+<a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter"><span class="type">GstAudioFilter</span></a> may use <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#gst-audio-filter-class-add-pad-templates" title="gst_audio_filter_class_add_pad_templates ()"><code class="function">gst_audio_filter_class_add_pad_templates()</code></a> from
+their class_init function to easily configure the set of caps/formats that
+the element is able to handle.
+</p>
+<p>
+Derived classes should override the <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass.setup"><code class="function">GstAudioFilterClass.setup()</code></a> and
+<code class="function">GstBaseTransformClass.transform_ip()</code> and/or
+<code class="function">GstBaseTransformClass.transform()</code>
+virtual functions in their class_init function.
+</p>
+<p>
+Last reviewed on 2007-02-03 (0.10.11.1)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiofilter.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioFilter-struct"></a><h3>struct GstAudioFilter</h3>
+<pre class="programlisting">struct GstAudioFilter;</pre>
+<p>
+Base class for audio filters with the same format for input and output.
+</p>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioFilterClass"></a><h3>struct GstAudioFilterClass</h3>
+<pre class="programlisting">struct GstAudioFilterClass {
+  GstBaseTransformClass basetransformclass;
+
+  /* virtual function, called whenever the format changes */
+  gboolean  (*setup) (GstAudioFilter * filter, const GstAudioInfo * info);
+};
+</pre>
+<p>
+In addition to the <em class="parameter"><code>setup</code></em> virtual function, you should also override the
+GstBaseTransform::transform and/or GstBaseTransform::transform_ip virtual
+function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html#GstBaseTransformClass"><span class="type">GstBaseTransformClass</span></a> <em class="structfield"><code><a name="GstAudioFilterClass.basetransformclass"></a>basetransformclass</code></em>;</span></p></td>
+<td>parent class</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioFilterClass.setup"></a>setup</code></em> ()</span></p></td>
+<td>virtual function called whenever the format changes</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-filter-class-add-pad-templates"></a><h3>gst_audio_filter_class_add_pad_templates ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_filter_class_add_pad_templates
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" title="struct GstAudioFilterClass"><span class="type">GstAudioFilterClass</span></a> *klass</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *allowed_caps</code></em>);</pre>
+<p>
+Convenience function to add pad templates to this element class, with
+<em class="parameter"><code>allowed_caps</code></em> as the caps that can be handled.
+</p>
+<p>
+This function is usually used from within a GObject class_init function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
+<td>an <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" title="struct GstAudioFilterClass"><span class="type">GstAudioFilterClass</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>allowed_caps</code></em> :</span></p></td>
+<td>what formats the filter can handle, as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html b/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html
new file mode 100644
index 0000000..abbf5b4
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudioiec61937</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">
+<link rel="next" href="gstreamer-cdda.html" title="CDDA Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstringbuffer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-cdda.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudioiec61937.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudioiec61937.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudioiec61937"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudioiec61937.top_of_page"></a>gstaudioiec61937</span></h2>
+<p>gstaudioiec61937 — Utility functions for IEC 61937 payloading</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudioiec61937.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/audio/gstaudioiec61937.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-frame-size" title="gst_audio_iec61937_frame_size ()">gst_audio_iec61937_frame_size</a>       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload" title="gst_audio_iec61937_payload ()">gst_audio_iec61937_payload</a>          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> src_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *dst</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> dst_n</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioiec61937.description"></a><h2>Description</h2>
+<p>
+This module contains some helper functions for encapsulating various
+audio formats in IEC 61937 headers and padding.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudioiec61937.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-audio-iec61937-frame-size"></a><h3>gst_audio_iec61937_frame_size ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_audio_iec61937_frame_size       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);</pre>
+<p>
+Calculated the size of the buffer expected by <a class="link" href="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload" title="gst_audio_iec61937_payload ()"><code class="function">gst_audio_iec61937_payload()</code></a> for
+payloading type from <em class="parameter"><code>spec</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td>the ringbufer spec</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the size or 0 if the given <em class="parameter"><code>type</code></em> is not supported or cannot be
+payloaded.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.35</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-iec61937-payload"></a><h3>gst_audio_iec61937_payload ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_iec61937_payload          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> src_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *dst</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> dst_n</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);</pre>
+<p>
+Payloads <em class="parameter"><code>src</code></em> in the form specified by IEC 61937 for the type from <em class="parameter"><code>spec</code></em> and
+stores the result in <em class="parameter"><code>dst</code></em>. <em class="parameter"><code>src</code></em> must contain exactly one frame of data and
+the frame is not checked for errors.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a buffer containing the data to payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src_n</code></em> :</span></p></td>
+<td>size of <em class="parameter"><code>src</code></em> in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dst</code></em> :</span></p></td>
+<td>the destination buffer to store the payloaded contents in. Should not
+overlap with <em class="parameter"><code>src</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dst_n</code></em> :</span></p></td>
+<td>size of <em class="parameter"><code>dst</code></em> in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td>the ringbufer spec for <em class="parameter"><code>src</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>transfer-full: <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the payloading was successful, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.35</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiomixerutils.html b/docs/libs/html/gst-plugins-base-libs-gstaudiomixerutils.html
new file mode 100644
index 0000000..9c5dfb3
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiomixerutils.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudiomixerutils</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">
+<link rel="next" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudiofilter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudiosink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudiomixerutils.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiomixerutils.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudiomixerutils"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudiomixerutils.top_of_page"></a>gstaudiomixerutils</span></h2>
+<p>gstaudiomixerutils — utility functions to find available audio mixers
+                     from the plugin registry</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudiomixerutils.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/audio/mixerutils.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (<a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc" title="GstAudioMixerFilterFunc ()">*GstAudioMixerFilterFunc</a>)          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#gst-audio-default-registry-mixer-filter" title="gst_audio_default_registry_mixer_filter ()">gst_audio_default_registry_mixer_filter</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc" title="GstAudioMixerFilterFunc ()"><span class="type">GstAudioMixerFilterFunc</span></a> filter_func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> first</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiomixerutils.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id439560"></a><p>
+Provides some utility functions to detect available audio mixers
+on the system.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiomixerutils.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioMixerFilterFunc"></a><h3>GstAudioMixerFilterFunc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (*GstAudioMixerFilterFunc)          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Function that will be called by <a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#gst-audio-default-registry-mixer-filter" title="gst_audio_default_registry_mixer_filter ()"><code class="function">gst_audio_default_registry_mixer_filter()</code></a>
+so the caller can decide which mixer elements should be kept and returned.
+When the mixer element is passed to the callback function, it is opened
+and in READY state. If you decide to keep the element, you need to set it
+back to NULL state yourself (unless you want to keep it opened of course).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> implementing the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the element should be kept, FALSE otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-default-registry-mixer-filter"></a><h3>gst_audio_default_registry_mixer_filter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_audio_default_registry_mixer_filter
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc" title="GstAudioMixerFilterFunc ()"><span class="type">GstAudioMixerFilterFunc</span></a> filter_func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> first</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Utility function to find audio mixer elements.
+</p>
+<p>
+Will traverse the default plugin registry in order of plugin rank and
+find usable audio mixer elements. The caller may optionally fine-tune
+the selection by specifying a filter function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filter_func</code></em> :</span></p></td>
+<td>filter function, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>first</code></em> :</span></p></td>
+<td>set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if you only want the first suitable mixer element</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data to pass to the filter function</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of audio mixer <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>s. You must free each
+element in the list by setting it to NULL state and calling
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref"><code class="function">gst_object_unref()</code></a>. After that the list itself should be freed
+using <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free"><code class="function">g_list_free()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.2</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html b/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html
new file mode 100644
index 0000000..b4a492b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudiosink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudiomixerutils.html" title="gstaudiomixerutils">
+<link rel="next" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudiomixerutils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudiosrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudiosink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiosink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiosink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudiosink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudiosink.top_of_page"></a>gstaudiosink</span></h2>
+<p>gstaudiosink — Simple base class for audio sinks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudiosink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioSink"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudiosink.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink-struct" title="struct GstAudioSink">GstAudioSink</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSinkClass" title="struct GstAudioSinkClass">GstAudioSinkClass</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink">GstBaseAudioSink</a>
+                                 +----GstAudioSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosink.description"></a><h2>Description</h2>
+<p>
+This is the most simple base class for audio sinks that only requires
+subclasses to implement a set of simple functions:
+</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><code class="function">open()</code></span></p></td>
+<td><p>Open the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">prepare()</code></span></p></td>
+<td><p>Configure the device with the specified format.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">write()</code></span></p></td>
+<td><p>Write samples to the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">reset()</code></span></p></td>
+<td><p>Unblock writes and flush the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">delay()</code></span></p></td>
+<td><p>Get the number of samples written but not yet played 
+    by the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">unprepare()</code></span></p></td>
+<td><p>Undo operations done by prepare.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">close()</code></span></p></td>
+<td><p>Close the device.</p></td>
+</tr>
+</tbody>
+</table></div>
+<p>
+</p>
+<p>
+All scheduling of samples and timestamps is done in this base class
+together with <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> using a default implementation of a
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> that uses threads.
+</p>
+<p>
+Last reviewed on 2006-09-27 (0.10.12)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioSink-struct"></a><h3>struct GstAudioSink</h3>
+<pre class="programlisting">struct GstAudioSink;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioSinkClass"></a><h3>struct GstAudioSinkClass</h3>
+<pre class="programlisting">struct GstAudioSinkClass {
+  GstBaseAudioSinkClass parent_class;
+
+  /* vtable */
+
+  /* open the device with given specs */
+  gboolean (*open)      (GstAudioSink *sink);
+  /* prepare resources and state to operate with the given specs */
+  gboolean (*prepare)   (GstAudioSink *sink, GstRingBufferSpec *spec);
+  /* undo anything that was done in prepare() */
+  gboolean (*unprepare) (GstAudioSink *sink);
+  /* close the device */
+  gboolean (*close)     (GstAudioSink *sink);
+  /* write samples to the device */
+  gint     (*write)     (GstAudioSink *sink, gpointer data, guint length);
+  /* get number of samples queued in the device */
+  guint    (*delay)     (GstAudioSink *sink);
+  /* reset the audio device, unblock from a write */
+  void     (*reset)     (GstAudioSink *sink);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a> class. Override the vmethods to implement functionality.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkClass" title="struct GstBaseAudioSinkClass"><span class="type">GstBaseAudioSinkClass</span></a> <em class="structfield"><code><a name="GstAudioSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class structure.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.open"></a>open</code></em> ()</span></p></td>
+<td>Open the device. No configuration needs to be done at this point.
+This function is also used to check if the device is available.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.prepare"></a>prepare</code></em> ()</span></p></td>
+<td>Prepare the device to operate with the specified parameters.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.unprepare"></a>unprepare</code></em> ()</span></p></td>
+<td>Undo operations done in prepare.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.close"></a>close</code></em> ()</span></p></td>
+<td>Close the device.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.write"></a>write</code></em> ()</span></p></td>
+<td>Write data to the device.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.delay"></a>delay</code></em> ()</span></p></td>
+<td>Return how many samples are still in the device. This is used to
+drive the synchronisation.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSinkClass.reset"></a>reset</code></em> ()</span></p></td>
+<td>Returns as quickly as possible from a write and flush any pending
+samples from the device.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosink.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>, <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>, <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a>.
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html b/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html
new file mode 100644
index 0000000..64ba82b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstaudiosrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">
+<link rel="next" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudiosink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstbaseaudiosink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstaudiosrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiosrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstaudiosrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstaudiosrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstaudiosrc.top_of_page"></a>gstaudiosrc</span></h2>
+<p>gstaudiosrc — Simple base class for audio sources</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstaudiosrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioSrc"></a><pre class="synopsis">
+#include &lt;gst/audio/gstaudiosrc.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc-struct" title="struct GstAudioSrc">GstAudioSrc</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrcClass" title="struct GstAudioSrcClass">GstAudioSrcClass</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc">GstBaseAudioSrc</a>
+                                       +----GstAudioSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosrc.description"></a><h2>Description</h2>
+<p>
+This is the most simple base class for audio sources that only requires
+subclasses to implement a set of simple functions:
+</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><code class="function">open()</code></span></p></td>
+<td><p>Open the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">prepare()</code></span></p></td>
+<td><p>Configure the device with the specified format.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">read()</code></span></p></td>
+<td><p>Read samples from the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">reset()</code></span></p></td>
+<td><p>Unblock reads and flush the device.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">delay()</code></span></p></td>
+<td><p>Get the number of samples in the device but not yet read.
+    </p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">unprepare()</code></span></p></td>
+<td><p>Undo operations done by prepare.</p></td>
+</tr>
+<tr>
+<td><p><span class="term"><code class="function">close()</code></span></p></td>
+<td><p>Close the device.</p></td>
+</tr>
+</tbody>
+</table></div>
+<p>
+</p>
+<p>
+All scheduling of samples and timestamps is done in this base class
+together with <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> using a default implementation of a
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> that uses threads.
+</p>
+<p>
+Last reviewed on 2006-09-27 (0.10.12)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioSrc-struct"></a><h3>struct GstAudioSrc</h3>
+<pre class="programlisting">struct GstAudioSrc;</pre>
+<p>
+Base class for simple audio sources.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioSrcClass"></a><h3>struct GstAudioSrcClass</h3>
+<pre class="programlisting">struct GstAudioSrcClass {
+  GstBaseAudioSrcClass parent_class;
+
+  /* vtable */
+
+  /* open the device with given specs */
+  gboolean (*open)      (GstAudioSrc *src);
+  /* prepare resources and state to operate with the given specs */
+  gboolean (*prepare)   (GstAudioSrc *src, GstRingBufferSpec *spec);
+  /* undo anything that was done in prepare() */
+  gboolean (*unprepare) (GstAudioSrc *src);
+  /* close the device */
+  gboolean (*close)     (GstAudioSrc *src);
+  /* read samples from the device */
+  guint    (*read)      (GstAudioSrc *src, gpointer data, guint length);
+  /* get number of samples queued in the device */
+  guint    (*delay)     (GstAudioSrc *src);
+  /* reset the audio device, unblock from a write */
+  void     (*reset)     (GstAudioSrc *src);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc"><span class="type">GstAudioSrc</span></a> class. Override the vmethod to implement
+functionality.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcClass" title="struct GstBaseAudioSrcClass"><span class="type">GstBaseAudioSrcClass</span></a> <em class="structfield"><code><a name="GstAudioSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.open"></a>open</code></em> ()</span></p></td>
+<td>open the device with the specified caps</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.prepare"></a>prepare</code></em> ()</span></p></td>
+<td>configure device with format</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.unprepare"></a>unprepare</code></em> ()</span></p></td>
+<td>undo the configuration</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.close"></a>close</code></em> ()</span></p></td>
+<td>close the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.read"></a>read</code></em> ()</span></p></td>
+<td>read samples to the audio device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.delay"></a>delay</code></em> ()</span></p></td>
+<td>the number of samples queued in the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstAudioSrcClass.reset"></a>reset</code></em> ()</span></p></td>
+<td>unblock a read to the device and reset.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstaudiosrc.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>, <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>, <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc"><span class="type">GstAudioSrc</span></a>.
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosink.html b/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosink.html
new file mode 100644
index 0000000..62c4501
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosink.html
@@ -0,0 +1,458 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstbaseaudiosink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">
+<link rel="next" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudiosrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstbaseaudiosrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstbaseaudiosink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstbaseaudiosink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstbaseaudiosink.top_of_page"></a>gstbaseaudiosink</span></h2>
+<p>gstbaseaudiosink — Base class for audio sinks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstBaseAudioSink"></a><pre class="synopsis">
+#include &lt;gst/audio/gstbaseaudiosink.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink-struct" title="struct GstBaseAudioSink">GstBaseAudioSink</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkClass" title="struct GstBaseAudioSinkClass">GstBaseAudioSinkClass</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod">GstBaseAudioSinkSlaveMethod</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-CLOCK:CAPS" title="GST_BASE_AUDIO_SINK_CLOCK()">GST_BASE_AUDIO_SINK_CLOCK</a>           (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-PAD:CAPS" title="GST_BASE_AUDIO_SINK_PAD()">GST_BASE_AUDIO_SINK_PAD</a>             (obj)
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="returnvalue">GstRingBuffer</span></a> *     <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-create-ringbuffer" title="gst_base_audio_sink_create_ringbuffer ()">gst_base_audio_sink_create_ringbuffer</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-provide-clock" title="gst_base_audio_sink_set_provide_clock ()">gst_base_audio_sink_set_provide_clock</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> provide</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-provide-clock" title="gst_base_audio_sink_get_provide_clock ()">gst_base_audio_sink_get_provide_clock</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-slave-method" title="gst_base_audio_sink_set_slave_method ()">gst_base_audio_sink_set_slave_method</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="type">GstBaseAudioSinkSlaveMethod</span></a> method</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="returnvalue">GstBaseAudioSinkSlaveMethod</span></a> <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-slave-method" title="gst_base_audio_sink_get_slave_method ()">gst_base_audio_sink_get_slave_method</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-drift-tolerance" title="gst_base_audio_sink_get_drift_tolerance ()">gst_base_audio_sink_get_drift_tolerance</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-drift-tolerance" title="gst_base_audio_sink_set_drift_tolerance ()">gst_base_audio_sink_set_drift_tolerance</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> drift_tolerance</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstBaseAudioSink
+                                 +----<a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--buffer-time" title='The "buffer-time" property'>buffer-time</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--can-activate-pull" title='The "can-activate-pull" property'>can-activate-pull</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--drift-tolerance" title='The "drift-tolerance" property'>drift-tolerance</a>"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--latency-time" title='The "latency-time" property'>latency-time</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--provide-clock" title='The "provide-clock" property'>provide-clock</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--slave-method" title='The "slave-method" property'>slave-method</a>"             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="type">GstBaseAudioSinkSlaveMethod</span></a>  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.description"></a><h2>Description</h2>
+<p>
+This is the base class for audio sinks. Subclasses need to implement the
+::create_ringbuffer vmethod. This base class will then take care of
+writing samples to the ringbuffer, synchronisation, clipping and flushing.
+</p>
+<p>
+Last reviewed on 2006-09-27 (0.10.12)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstBaseAudioSink-struct"></a><h3>struct GstBaseAudioSink</h3>
+<pre class="programlisting">struct GstBaseAudioSink;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSinkClass"></a><h3>struct GstBaseAudioSinkClass</h3>
+<pre class="programlisting">struct GstBaseAudioSinkClass {
+  GstBaseSinkClass parent_class;
+
+  /* subclass ringbuffer allocation */
+  GstRingBuffer* (*create_ringbuffer)  (GstBaseAudioSink *sink);
+
+  /* subclass payloader */
+  GstBuffer*     (*payload)            (GstBaseAudioSink *sink,
+                                        GstBuffer        *buffer);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> class. Override the vmethod to implement
+functionality.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html#GstBaseSinkClass"><span class="type">GstBaseSinkClass</span></a> <em class="structfield"><code><a name="GstBaseAudioSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseAudioSinkClass.create-ringbuffer"></a>create_ringbuffer</code></em> ()</span></p></td>
+<td>create and return a <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to write to.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseAudioSinkClass.payload"></a>payload</code></em> ()</span></p></td>
+<td>payload data in a format suitable to write to the sink. If no
+payloading is required, returns a reffed copy of the original
+buffer, else returns the payloaded buffer with all other metadata
+copied. (Since: 0.10.35)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSinkSlaveMethod"></a><h3>enum GstBaseAudioSinkSlaveMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE,
+  GST_BASE_AUDIO_SINK_SLAVE_SKEW,
+  GST_BASE_AUDIO_SINK_SLAVE_NONE
+} GstBaseAudioSinkSlaveMethod;
+</pre>
+<p>
+Different possible clock slaving algorithms used when the internal audio
+clock is not selected as the pipeline master clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SINK-SLAVE-RESAMPLE:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE</code></span></p></td>
+<td>Resample to match the master clock
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SINK-SLAVE-SKEW:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SINK_SLAVE_SKEW</code></span></p></td>
+<td>Adjust playout pointer when master clock
+drifts too much.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SINK-SLAVE-NONE:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SINK_SLAVE_NONE</code></span></p></td>
+<td>No adjustment is done.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-AUDIO-SINK-CLOCK:CAPS"></a><h3>GST_BASE_AUDIO_SINK_CLOCK()</h3>
+<pre class="programlisting">#define GST_BASE_AUDIO_SINK_CLOCK(obj)   (GST_BASE_AUDIO_SINK (obj)-&gt;clock)
+</pre>
+<p>
+Get the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> of <em class="parameter"><code>obj</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-AUDIO-SINK-PAD:CAPS"></a><h3>GST_BASE_AUDIO_SINK_PAD()</h3>
+<pre class="programlisting">#define GST_BASE_AUDIO_SINK_PAD(obj)     (GST_BASE_SINK (obj)-&gt;sinkpad)
+</pre>
+<p>
+Get the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> of <em class="parameter"><code>obj</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-create-ringbuffer"></a><h3>gst_base_audio_sink_create_ringbuffer ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="returnvalue">GstRingBuffer</span></a> *     gst_base_audio_sink_create_ringbuffer
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);</pre>
+<p>
+Create and return the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> for <em class="parameter"><code>sink</code></em>. This function will call the
+::create_ringbuffer vmethod and will set <em class="parameter"><code>sink</code></em> as the parent of the returned
+buffer (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-set-parent"><code class="function">gst_object_set_parent()</code></a>).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new ringbuffer of <em class="parameter"><code>sink</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-set-provide-clock"></a><h3>gst_base_audio_sink_set_provide_clock ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_audio_sink_set_provide_clock
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> provide</code></em>);</pre>
+<p>
+Controls whether <em class="parameter"><code>sink</code></em> will provide a clock or not. If <em class="parameter"><code>provide</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-provide-clock"><code class="function">gst_element_provide_clock()</code></a> will return a clock that reflects the datarate
+of <em class="parameter"><code>sink</code></em>. If <em class="parameter"><code>provide</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-provide-clock"><code class="function">gst_element_provide_clock()</code></a> will return NULL.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>provide</code></em> :</span></p></td>
+<td>new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-get-provide-clock"></a><h3>gst_base_audio_sink_get_provide_clock ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_audio_sink_get_provide_clock
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);</pre>
+<p>
+Queries whether <em class="parameter"><code>sink</code></em> will provide a clock or not. See also
+gst_base_audio_sink_set_provide_clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>sink</code></em> will provide a clock.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-set-slave-method"></a><h3>gst_base_audio_sink_set_slave_method ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_audio_sink_set_slave_method
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="type">GstBaseAudioSinkSlaveMethod</span></a> method</code></em>);</pre>
+<p>
+Controls how clock slaving will be performed in <em class="parameter"><code>sink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>the new slave method</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-get-slave-method"></a><h3>gst_base_audio_sink_get_slave_method ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="returnvalue">GstBaseAudioSinkSlaveMethod</span></a> gst_base_audio_sink_get_slave_method
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);</pre>
+<p>
+Get the current slave method used by <em class="parameter"><code>sink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current slave method used by <em class="parameter"><code>sink</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-get-drift-tolerance"></a><h3>gst_base_audio_sink_get_drift_tolerance ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="returnvalue">gint64</span></a>              gst_base_audio_sink_get_drift_tolerance
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>);</pre>
+<p>
+Get the current drift tolerance, in microseconds, used by <em class="parameter"><code>sink</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current drift tolerance used by <em class="parameter"><code>sink</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-sink-set-drift-tolerance"></a><h3>gst_base_audio_sink_set_drift_tolerance ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_audio_sink_set_drift_tolerance
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> drift_tolerance</code></em>);</pre>
+<p>
+Controls the sink's drift tolerance.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sink</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drift_tolerance</code></em> :</span></p></td>
+<td>the new drift tolerance in microseconds</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstBaseAudioSink--buffer-time"></a><h3>The <code class="literal">"buffer-time"</code> property</h3>
+<pre class="programlisting">  "buffer-time"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Size of audio buffer in microseconds.</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 200000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSink--can-activate-pull"></a><h3>The <code class="literal">"can-activate-pull"</code> property</h3>
+<pre class="programlisting">  "can-activate-pull"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Allow pull-based scheduling.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSink--drift-tolerance"></a><h3>The <code class="literal">"drift-tolerance"</code> property</h3>
+<pre class="programlisting">  "drift-tolerance"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>
+Controls the amount of time in milliseconds that timestamps or clocks are allowed
+to drift before resynchronisation happens.
+</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 40000</p>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSink--latency-time"></a><h3>The <code class="literal">"latency-time"</code> property</h3>
+<pre class="programlisting">  "latency-time"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Audio latency in microseconds.</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 10000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSink--provide-clock"></a><h3>The <code class="literal">"provide-clock"</code> property</h3>
+<pre class="programlisting">  "provide-clock"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Provide a clock to be used as the global pipeline clock.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSink--slave-method"></a><h3>The <code class="literal">"slave-method"</code> property</h3>
+<pre class="programlisting">  "slave-method"             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod" title="enum GstBaseAudioSinkSlaveMethod"><span class="type">GstBaseAudioSinkSlaveMethod</span></a>  : Read / Write</pre>
+<p>Algorithm to use to match the rate of the masterclock.</p>
+<p>Default value: GST_BASE_AUDIO_SINK_SLAVE_SKEW</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosink.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a>, <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>.
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosrc.html b/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosrc.html
new file mode 100644
index 0000000..c36288b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstbaseaudiosrc.html
@@ -0,0 +1,402 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstbaseaudiosrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstbaseaudiosink.html" title="gstbaseaudiosink">
+<link rel="next" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstbaseaudiosink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstmultichannel.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstbaseaudiosrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbaseaudiosrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstbaseaudiosrc.top_of_page"></a>gstbaseaudiosrc</span></h2>
+<p>gstbaseaudiosrc — Base class for audio sources</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstBaseAudioSrc"></a><pre class="synopsis">
+#include &lt;gst/audio/gstbaseaudiosrc.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc-struct" title="struct GstBaseAudioSrc">GstBaseAudioSrc</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcClass" title="struct GstBaseAudioSrcClass">GstBaseAudioSrcClass</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod">GstBaseAudioSrcSlaveMethod</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-CLOCK:CAPS" title="GST_BASE_AUDIO_SRC_CLOCK()">GST_BASE_AUDIO_SRC_CLOCK</a>            (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-PAD:CAPS" title="GST_BASE_AUDIO_SRC_PAD()">GST_BASE_AUDIO_SRC_PAD</a>              (obj)
+<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="returnvalue">GstRingBuffer</span></a> *     <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-create-ringbuffer" title="gst_base_audio_src_create_ringbuffer ()">gst_base_audio_src_create_ringbuffer</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-provide-clock" title="gst_base_audio_src_set_provide_clock ()">gst_base_audio_src_set_provide_clock</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> provide</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-provide-clock" title="gst_base_audio_src_get_provide_clock ()">gst_base_audio_src_get_provide_clock</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="returnvalue">GstBaseAudioSrcSlaveMethod</span></a> <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-slave-method" title="gst_base_audio_src_get_slave_method ()">gst_base_audio_src_get_slave_method</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-slave-method" title="gst_base_audio_src_set_slave_method ()">gst_base_audio_src_set_slave_method</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="type">GstBaseAudioSrcSlaveMethod</span></a> method</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----GstBaseAudioSrc
+                                       +----<a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-buffer-time" title='The "actual-buffer-time" property'>actual-buffer-time</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-latency-time" title='The "actual-latency-time" property'>actual-latency-time</a>"      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--buffer-time" title='The "buffer-time" property'>buffer-time</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--latency-time" title='The "latency-time" property'>latency-time</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--provide-clock" title='The "provide-clock" property'>provide-clock</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--slave-method" title='The "slave-method" property'>slave-method</a>"             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="type">GstBaseAudioSrcSlaveMethod</span></a>  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.description"></a><h2>Description</h2>
+<p>
+This is the base class for audio sources. Subclasses need to implement the
+::create_ringbuffer vmethod. This base class will then take care of
+reading samples from the ringbuffer, synchronisation and flushing.
+</p>
+<p>
+Last reviewed on 2006-09-27 (0.10.12)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstBaseAudioSrc-struct"></a><h3>struct GstBaseAudioSrc</h3>
+<pre class="programlisting">struct GstBaseAudioSrc;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrcClass"></a><h3>struct GstBaseAudioSrcClass</h3>
+<pre class="programlisting">struct GstBaseAudioSrcClass {
+  GstPushSrcClass parent_class;
+
+  /* subclass ringbuffer allocation */
+  GstRingBuffer* (*create_ringbuffer)  (GstBaseAudioSrc *src);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> class. Override the vmethod to implement
+functionality.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><span class="type">GstPushSrcClass</span> <em class="structfield"><code><a name="GstBaseAudioSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseAudioSrcClass.create-ringbuffer"></a>create_ringbuffer</code></em> ()</span></p></td>
+<td>create and return a <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to read from.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrcSlaveMethod"></a><h3>enum GstBaseAudioSrcSlaveMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE,
+  GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP,
+  GST_BASE_AUDIO_SRC_SLAVE_SKEW,
+  GST_BASE_AUDIO_SRC_SLAVE_NONE
+} GstBaseAudioSrcSlaveMethod;
+</pre>
+<p>
+Different possible clock slaving algorithms when the internal audio clock was
+not selected as the pipeline clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SRC-SLAVE-RESAMPLE:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE</code></span></p></td>
+<td>Resample to match the master clock. 
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SRC-SLAVE-RETIMESTAMP:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP</code></span></p></td>
+<td>Retimestamp output buffers with master
+clock time.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SRC-SLAVE-SKEW:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SRC_SLAVE_SKEW</code></span></p></td>
+<td>Adjust capture pointer when master clock
+drifts too much.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BASE-AUDIO-SRC-SLAVE-NONE:CAPS"></a><span class="term"><code class="literal">GST_BASE_AUDIO_SRC_SLAVE_NONE</code></span></p></td>
+<td>No adjustment is done. 
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-AUDIO-SRC-CLOCK:CAPS"></a><h3>GST_BASE_AUDIO_SRC_CLOCK()</h3>
+<pre class="programlisting">#define GST_BASE_AUDIO_SRC_CLOCK(obj)    (GST_BASE_AUDIO_SRC (obj)-&gt;clock)
+</pre>
+<p>
+Get the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> of <em class="parameter"><code>obj</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-AUDIO-SRC-PAD:CAPS"></a><h3>GST_BASE_AUDIO_SRC_PAD()</h3>
+<pre class="programlisting">#define GST_BASE_AUDIO_SRC_PAD(obj)      (GST_BASE_SRC (obj)-&gt;srcpad)
+</pre>
+<p>
+Get the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> of <em class="parameter"><code>obj</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-src-create-ringbuffer"></a><h3>gst_base_audio_src_create_ringbuffer ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="returnvalue">GstRingBuffer</span></a> *     gst_base_audio_src_create_ringbuffer
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);</pre>
+<p>
+Create and return the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> for <em class="parameter"><code>src</code></em>. This function will call the
+::create_ringbuffer vmethod and will set <em class="parameter"><code>src</code></em> as the parent of the returned
+buffer (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-set-parent"><code class="function">gst_object_set_parent()</code></a>).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new ringbuffer of <em class="parameter"><code>src</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-src-set-provide-clock"></a><h3>gst_base_audio_src_set_provide_clock ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_audio_src_set_provide_clock
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> provide</code></em>);</pre>
+<p>
+Controls whether <em class="parameter"><code>src</code></em> will provide a clock or not. If <em class="parameter"><code>provide</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, 
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-provide-clock"><code class="function">gst_element_provide_clock()</code></a> will return a clock that reflects the datarate
+of <em class="parameter"><code>src</code></em>. If <em class="parameter"><code>provide</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-provide-clock"><code class="function">gst_element_provide_clock()</code></a> will return NULL.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>provide</code></em> :</span></p></td>
+<td>new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-src-get-provide-clock"></a><h3>gst_base_audio_src_get_provide_clock ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_audio_src_get_provide_clock
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);</pre>
+<p>
+Queries whether <em class="parameter"><code>src</code></em> will provide a clock or not. See also
+gst_base_audio_src_set_provide_clock.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>src</code></em> will provide a clock.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-src-get-slave-method"></a><h3>gst_base_audio_src_get_slave_method ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="returnvalue">GstBaseAudioSrcSlaveMethod</span></a> gst_base_audio_src_get_slave_method
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>);</pre>
+<p>
+Get the current slave method used by <em class="parameter"><code>src</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current slave method used by <em class="parameter"><code>src</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-audio-src-set-slave-method"></a><h3>gst_base_audio_src_set_slave_method ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_audio_src_set_slave_method (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="type">GstBaseAudioSrcSlaveMethod</span></a> method</code></em>);</pre>
+<p>
+Controls how clock slaving will be performed in <em class="parameter"><code>src</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc"><span class="type">GstBaseAudioSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>the new slave method</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--actual-buffer-time"></a><h3>The <code class="literal">"actual-buffer-time"</code> property</h3>
+<pre class="programlisting">  "actual-buffer-time"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read</pre>
+<p>
+Actual configured size of audio buffer in microseconds.
+</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--actual-latency-time"></a><h3>The <code class="literal">"actual-latency-time"</code> property</h3>
+<pre class="programlisting">  "actual-latency-time"      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read</pre>
+<p>
+Actual configured audio latency in microseconds.
+</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--buffer-time"></a><h3>The <code class="literal">"buffer-time"</code> property</h3>
+<pre class="programlisting">  "buffer-time"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Size of audio buffer in microseconds.</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 200000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--latency-time"></a><h3>The <code class="literal">"latency-time"</code> property</h3>
+<pre class="programlisting">  "latency-time"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Audio latency in microseconds.</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 10000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--provide-clock"></a><h3>The <code class="literal">"provide-clock"</code> property</h3>
+<pre class="programlisting">  "provide-clock"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Provide a clock to be used as the global pipeline clock.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseAudioSrc--slave-method"></a><h3>The <code class="literal">"slave-method"</code> property</h3>
+<pre class="programlisting">  "slave-method"             <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod" title="enum GstBaseAudioSrcSlaveMethod"><span class="type">GstBaseAudioSrcSlaveMethod</span></a>  : Read / Write</pre>
+<p>Algorithm to use to match the rate of the masterclock.</p>
+<p>Default value: GST_BASE_AUDIO_SRC_SLAVE_SKEW</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbaseaudiosrc.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc"><span class="type">GstAudioSrc</span></a>, <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>.
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstbasertpaudiopayload.html b/docs/libs/html/gst-plugins-base-libs-gstbasertpaudiopayload.html
new file mode 100644
index 0000000..52703fc
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstbasertpaudiopayload.html
@@ -0,0 +1,386 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstbasertpaudiopayload</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="next" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-rtp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstbasertpdepayload.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstbasertpaudiopayload.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertpaudiopayload.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertpaudiopayload.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertpaudiopayload.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstbasertpaudiopayload.top_of_page"></a>gstbasertpaudiopayload</span></h2>
+<p>gstbasertpaudiopayload — Base class for audio RTP payloader</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.synopsis"></a><h2>Synopsis</h2>
+<a name="GstBaseRTPAudioPayload"></a><pre class="synopsis">
+#include &lt;gst/rtp/gstbasertpaudiopayload.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload-struct" title="struct GstBaseRTPAudioPayload">GstBaseRTPAudioPayload</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayloadClass" title="struct GstBaseRTPAudioPayloadClass">GstBaseRTPAudioPayloadClass</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-based" title="gst_base_rtp_audio_payload_set_frame_based ()">gst_base_rtp_audio_payload_set_frame_based</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-options" title="gst_base_rtp_audio_payload_set_frame_options ()">gst_base_rtp_audio_payload_set_frame_options</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frame_duration</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frame_size</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-based" title="gst_base_rtp_audio_payload_set_sample_based ()">gst_base_rtp_audio_payload_set_sample_based</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-options" title="gst_base_rtp_audio_payload_set_sample_options ()">gst_base_rtp_audio_payload_set_sample_options</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sample_size</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html"><span class="returnvalue">GstAdapter</span></a> *        <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-get-adapter" title="gst_base_rtp_audio_payload_get_adapter ()">gst_base_rtp_audio_payload_get_adapter</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-push" title="gst_base_rtp_audio_payload_push ()">gst_base_rtp_audio_payload_push</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *baseaudiopayload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-flush" title="gst_base_rtp_audio_payload_flush ()">gst_base_rtp_audio_payload_flush</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *baseaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-samplebits-options" title="gst_base_rtp_audio_payload_set_samplebits_options ()">gst_base_rtp_audio_payload_set_samplebits_options</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sample_size</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload">GstBaseRTPPayload</a>
+                           +----GstBaseRTPAudioPayload
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload--buffer-list" title='The "buffer-list" property'>buffer-list</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.description"></a><h2>Description</h2>
+<p>
+Provides a base class for audio RTP payloaders for frame or sample based
+audio codecs (constant bitrate)
+</p>
+<p>
+This class derives from GstBaseRTPPayload. It can be used for payloading
+audio codecs. It will only work with constant bitrate codecs. It supports
+both frame based and sample based codecs. It takes care of packing up the
+audio data into RTP packets and filling up the headers accordingly. The
+payloading is done based on the maximum MTU (mtu) and the maximum time per
+packet (max-ptime). The general idea is to divide large data buffers into
+smaller RTP packets. The RTP packet size is the minimum of either the MTU,
+max-ptime (if set) or available data. The RTP packet size is always larger or
+equal to min-ptime (if set). If min-ptime is not set, any residual data is
+sent in a last RTP packet. In the case of frame based codecs, the resulting
+RTP packets always contain full frames.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id529590"></a><h3>Usage</h3>
+<p>
+To use this base class, your child element needs to call either
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-based" title="gst_base_rtp_audio_payload_set_frame_based ()"><code class="function">gst_base_rtp_audio_payload_set_frame_based()</code></a> or
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-based" title="gst_base_rtp_audio_payload_set_sample_based ()"><code class="function">gst_base_rtp_audio_payload_set_sample_based()</code></a>. This is usually done in the
+element's <code class="function">_init()</code> function. Then, the child element must call either
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-options" title="gst_base_rtp_audio_payload_set_frame_options ()"><code class="function">gst_base_rtp_audio_payload_set_frame_options()</code></a>,
+<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-options" title="gst_base_rtp_audio_payload_set_sample_options ()"><code class="function">gst_base_rtp_audio_payload_set_sample_options()</code></a> or
+gst_base_rtp_audio_payload_set_samplebits_options. Since
+GstBaseRTPAudioPayload derives from GstBaseRTPPayload, the child element
+must set any variables or call/override any functions required by that base
+class. The child element does not need to override any other functions
+specific to GstBaseRTPAudioPayload.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstBaseRTPAudioPayload-struct"></a><h3>struct GstBaseRTPAudioPayload</h3>
+<pre class="programlisting">struct GstBaseRTPAudioPayload;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPAudioPayloadClass"></a><h3>struct GstBaseRTPAudioPayloadClass</h3>
+<pre class="programlisting">struct GstBaseRTPAudioPayloadClass {
+  GstBaseRTPPayloadClass parent_class;
+};
+</pre>
+<p>
+Base class for audio RTP payloader.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayloadClass" title="struct GstBaseRTPPayloadClass"><span class="type">GstBaseRTPPayloadClass</span></a> <em class="structfield"><code><a name="GstBaseRTPAudioPayloadClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-set-frame-based"></a><h3>gst_base_rtp_audio_payload_set_frame_based ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_rtp_audio_payload_set_frame_based
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);</pre>
+<p>
+Tells <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> that the child element is for a frame based
+audio codec
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a pointer to the element.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-set-frame-options"></a><h3>gst_base_rtp_audio_payload_set_frame_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_rtp_audio_payload_set_frame_options
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frame_duration</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> frame_size</code></em>);</pre>
+<p>
+Sets the options for frame based audio codecs.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a pointer to the element.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame_duration</code></em> :</span></p></td>
+<td>The duraction of an audio frame in milliseconds.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frame_size</code></em> :</span></p></td>
+<td>The size of an audio frame in bytes.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-set-sample-based"></a><h3>gst_base_rtp_audio_payload_set_sample_based ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_rtp_audio_payload_set_sample_based
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);</pre>
+<p>
+Tells <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> that the child element is for a sample based
+audio codec
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a pointer to the element.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-set-sample-options"></a><h3>gst_base_rtp_audio_payload_set_sample_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_rtp_audio_payload_set_sample_options
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sample_size</code></em>);</pre>
+<p>
+Sets the options for sample based audio codecs.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a pointer to the element.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample_size</code></em> :</span></p></td>
+<td>Size per sample in bytes.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-get-adapter"></a><h3>gst_base_rtp_audio_payload_get_adapter ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html"><span class="returnvalue">GstAdapter</span></a> *        gst_base_rtp_audio_payload_get_adapter
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>);</pre>
+<p>
+Gets the internal adapter used by the depayloader.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html"><span class="type">GstAdapter</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-push"></a><h3>gst_base_rtp_audio_payload_push ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_rtp_audio_payload_push     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *baseaudiopayload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
+<p>
+Create an RTP buffer and store <em class="parameter"><code>payload_len</code></em> bytes of <em class="parameter"><code>data</code></em> as the
+payload. Set the timestamp on the new buffer to <em class="parameter"><code>timestamp</code></em> before pushing
+the buffer downstream.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>baseaudiopayload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data to set as payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_len</code></em> :</span></p></td>
+<td>length of payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timestamp</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-flush"></a><h3>gst_base_rtp_audio_payload_flush ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_rtp_audio_payload_flush    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *baseaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
+<p>
+Create an RTP buffer and store <em class="parameter"><code>payload_len</code></em> bytes of the adapter as the
+payload. Set the timestamp on the new buffer to <em class="parameter"><code>timestamp</code></em> before pushing
+the buffer downstream.
+</p>
+<p>
+If <em class="parameter"><code>payload_len</code></em> is -1, all pending bytes will be flushed. If <em class="parameter"><code>timestamp</code></em> is
+-1, the timestamp will be calculated automatically.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>baseaudiopayload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_len</code></em> :</span></p></td>
+<td>length of payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timestamp</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-audio-payload-set-samplebits-options"></a><h3>gst_base_rtp_audio_payload_set_samplebits_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_rtp_audio_payload_set_samplebits_options
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload"><span class="type">GstBaseRTPAudioPayload</span></a> *basertpaudiopayload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sample_size</code></em>);</pre>
+<p>
+Sets the options for sample based audio codecs.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>basertpaudiopayload</code></em> :</span></p></td>
+<td>a pointer to the element.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample_size</code></em> :</span></p></td>
+<td>Size per sample in bits.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpaudiopayload.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstBaseRTPAudioPayload--buffer-list"></a><h3>The <code class="literal">"buffer-list"</code> property</h3>
+<pre class="programlisting">  "buffer-list"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Use Buffer Lists.</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstbasertpdepayload.html b/docs/libs/html/gst-plugins-base-libs-gstbasertpdepayload.html
new file mode 100644
index 0000000..51dad49
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstbasertpdepayload.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstbasertpdepayload</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">
+<link rel="next" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstbasertpaudiopayload.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstbasertppayload.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstbasertpdepayload.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertpdepayload.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertpdepayload.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstbasertpdepayload"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstbasertpdepayload.top_of_page"></a>gstbasertpdepayload</span></h2>
+<p>gstbasertpdepayload — Base class for RTP depayloader</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstbasertpdepayload.synopsis"></a><h2>Synopsis</h2>
+<a name="GstBaseRTPDepayload"></a><pre class="synopsis">
+#include &lt;gst/rtp/gstbasertpdepayload.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload-struct" title="struct GstBaseRTPDepayload">GstBaseRTPDepayload</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayloadClass" title="struct GstBaseRTPDepayloadClass">GstBaseRTPDepayloadClass</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS" title="GST_BASE_RTP_DEPAYLOAD_SINKPAD()">GST_BASE_RTP_DEPAYLOAD_SINKPAD</a>      (depayload)
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS" title="GST_BASE_RTP_DEPAYLOAD_SRCPAD()">GST_BASE_RTP_DEPAYLOAD_SRCPAD</a>       (depayload)
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push" title="gst_base_rtp_depayload_push ()">gst_base_rtp_depayload_push</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *out_buf</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-ts" title="gst_base_rtp_depayload_push_ts ()">gst_base_rtp_depayload_push_ts</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *out_buf</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-list" title="gst_base_rtp_depayload_push_list ()">gst_base_rtp_depayload_push_list</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a> *out_list</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpdepayload.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstBaseRTPDepayload
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpdepayload.description"></a><h2>Description</h2>
+<p>
+Provides a base class for RTP depayloaders
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertpdepayload.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstBaseRTPDepayload-struct"></a><h3>struct GstBaseRTPDepayload</h3>
+<pre class="programlisting">struct GstBaseRTPDepayload;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPDepayloadClass"></a><h3>struct GstBaseRTPDepayloadClass</h3>
+<pre class="programlisting">struct GstBaseRTPDepayloadClass {
+  GstElementClass parent_class;
+
+  /* virtuals, inform the subclass of the caps. */
+  gboolean (*set_caps) (GstBaseRTPDepayload *filter, GstCaps *caps);
+
+  /* pure virtual function, child must use this to process incoming
+   * rtp packets. If the child returns a buffer without a valid timestamp,
+   * the timestamp of @in will be applied to the result buffer and the
+   * buffer will be pushed. If this function returns %NULL, nothing is
+   * pushed.  */
+  GstBuffer * (*process) (GstBaseRTPDepayload *base, GstBuffer *in);
+
+  /* non-pure function used to convert from RTP timestamp to GST timestamp
+   * this function is used by the child class before gst_pad_pushing */
+  void (*set_gst_timestamp) (GstBaseRTPDepayload *filter, guint32 timestamp, GstBuffer *buf);
+
+  /* non-pure function used to to signal the depayloader about packet loss. the
+   * timestamp and duration are the estimated values of the lost packet.
+   * The default implementation of this message pushes a segment update. */
+  gboolean (*packet_lost) (GstBaseRTPDepayload *filter, GstEvent *event);
+
+  /* the default implementation does the default actions for events but
+   * implementation can override.
+   * Since: 0.10.32   */
+  gboolean (*handle_event) (GstBaseRTPDepayload * filter, GstEvent * event);
+};
+</pre>
+<p>
+Base class for audio RTP payloader.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseRTPDepayloadClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPDepayloadClass.set-caps"></a>set_caps</code></em> ()</span></p></td>
+<td>configure the depayloader</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPDepayloadClass.process"></a>process</code></em> ()</span></p></td>
+<td>process incoming rtp packets</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPDepayloadClass.set-gst-timestamp"></a>set_gst_timestamp</code></em> ()</span></p></td>
+<td>convert from RTP timestamp to GST timestamp</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPDepayloadClass.packet-lost"></a>packet_lost</code></em> ()</span></p></td>
+<td>signal the depayloader about packet loss</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPDepayloadClass.handle-event"></a>handle_event</code></em> ()</span></p></td>
+<td>custom event handling</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS"></a><h3>GST_BASE_RTP_DEPAYLOAD_SINKPAD()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_DEPAYLOAD_SINKPAD(depayload) (GST_BASE_RTP_DEPAYLOAD (depayload)-&gt;sinkpad)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS"></a><h3>GST_BASE_RTP_DEPAYLOAD_SRCPAD()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_DEPAYLOAD_SRCPAD(depayload)  (GST_BASE_RTP_DEPAYLOAD (depayload)-&gt;srcpad)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-depayload-push"></a><h3>gst_base_rtp_depayload_push ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_rtp_depayload_push         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *out_buf</code></em>);</pre>
+<p>
+Push <em class="parameter"><code>out_buf</code></em> to the peer of <em class="parameter"><code>filter</code></em>. This function takes ownership of
+<em class="parameter"><code>out_buf</code></em>.
+</p>
+<p>
+Unlike <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-ts" title="gst_base_rtp_depayload_push_ts ()"><code class="function">gst_base_rtp_depayload_push_ts()</code></a>, this function will not apply
+any timestamp on the outgoing buffer. Subclasses should therefore timestamp
+outgoing buffers themselves.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_buf</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-depayload-push-ts"></a><h3>gst_base_rtp_depayload_push_ts ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_rtp_depayload_push_ts      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *out_buf</code></em>);</pre>
+<p>
+Push <em class="parameter"><code>out_buf</code></em> to the peer of <em class="parameter"><code>filter</code></em>. This function takes ownership of
+<em class="parameter"><code>out_buf</code></em>.
+</p>
+<p>
+Unlike <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push" title="gst_base_rtp_depayload_push ()"><code class="function">gst_base_rtp_depayload_push()</code></a>, this function will by default apply
+the last incomming timestamp on the outgoing buffer when it didn't have a
+timestamp already. The set_get_timestamp vmethod can be overwritten to change
+this behaviour (and take, for example, <em class="parameter"><code>timestamp</code></em> into account).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timestamp</code></em> :</span></p></td>
+<td>an RTP timestamp to apply</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_buf</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-base-rtp-depayload-push-list"></a><h3>gst_base_rtp_depayload_push_list ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_rtp_depayload_push_list    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a> *filter</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a> *out_list</code></em>);</pre>
+<p>
+Push <em class="parameter"><code>out_list</code></em> to the peer of <em class="parameter"><code>filter</code></em>. This function takes ownership of
+<em class="parameter"><code>out_list</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filter</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_list</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstbasertppayload.html b/docs/libs/html/gst-plugins-base-libs-gstbasertppayload.html
new file mode 100644
index 0000000..2c3acb0
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstbasertppayload.html
@@ -0,0 +1,494 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstbasertppayload</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstbasertpdepayload.html" title="gstbasertpdepayload">
+<link rel="next" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstbasertpdepayload.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtpbuffer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstbasertppayload.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertppayload.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertppayload.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstbasertppayload.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstbasertppayload"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstbasertppayload.top_of_page"></a>gstbasertppayload</span></h2>
+<p>gstbasertppayload — Base class for RTP payloader</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstbasertppayload.synopsis"></a><h2>Synopsis</h2>
+<a name="GstBaseRTPPayload"></a><pre class="synopsis">
+#include &lt;gst/rtp/gstbasertppayload.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload-struct" title="struct GstBaseRTPPayload">GstBaseRTPPayload</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayloadClass" title="struct GstBaseRTPPayloadClass">GstBaseRTPPayloadClass</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-MTU:CAPS" title="GST_BASE_RTP_PAYLOAD_MTU()">GST_BASE_RTP_PAYLOAD_MTU</a>            (payload)
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-PT:CAPS" title="GST_BASE_RTP_PAYLOAD_PT()">GST_BASE_RTP_PAYLOAD_PT</a>             (payload)
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS" title="GST_BASE_RTP_PAYLOAD_SINKPAD()">GST_BASE_RTP_PAYLOAD_SINKPAD</a>        (payload)
+#define             <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS" title="GST_BASE_RTP_PAYLOAD_SRCPAD()">GST_BASE_RTP_PAYLOAD_SRCPAD</a>         (payload)
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-is-filled" title="gst_basertppayload_is_filled ()">gst_basertppayload_is_filled</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> duration</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push" title="gst_basertppayload_push ()">gst_basertppayload_push</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push-list" title="gst_basertppayload_push_list ()">gst_basertppayload_push_list</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a> *list</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-options" title="gst_basertppayload_set_options ()">gst_basertppayload_set_options</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> dynamic</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *encoding_name</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> clock_rate</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-outcaps" title="gst_basertppayload_set_outcaps ()">gst_basertppayload_set_outcaps</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *fieldname</code></em>,
+                                                         <em class="parameter"><code>...</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertppayload.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstBaseRTPPayload
+                           +----<a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload">GstBaseRTPAudioPayload</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertppayload.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--max-ptime" title='The "max-ptime" property'>max-ptime</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--min-ptime" title='The "min-ptime" property'>min-ptime</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--mtu" title='The "mtu" property'>mtu</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--perfect-rtptime" title='The "perfect-rtptime" property'>perfect-rtptime</a>"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--pt" title='The "pt" property'>pt</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ptime-multiple" title='The "ptime-multiple" property'>ptime-multiple</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum" title='The "seqnum" property'>seqnum</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum-offset" title='The "seqnum-offset" property'>seqnum-offset</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ssrc" title='The "ssrc" property'>ssrc</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp" title='The "timestamp" property'>timestamp</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
+  "<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp-offset" title='The "timestamp-offset" property'>timestamp-offset</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertppayload.description"></a><h2>Description</h2>
+<p>
+Provides a base class for RTP payloaders
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertppayload.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstBaseRTPPayload-struct"></a><h3>struct GstBaseRTPPayload</h3>
+<pre class="programlisting">struct GstBaseRTPPayload;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayloadClass"></a><h3>struct GstBaseRTPPayloadClass</h3>
+<pre class="programlisting">struct GstBaseRTPPayloadClass {
+  GstElementClass parent_class;
+
+  /* query accepted caps */
+  GstCaps *     (*get_caps)             (GstBaseRTPPayload *payload, GstPad * pad, GstCaps * filter);
+  /* receive caps on the sink pad, configure the payloader. */
+  gboolean      (*set_caps)             (GstBaseRTPPayload *payload, GstCaps *caps);
+
+  /* handle a buffer, perform 0 or more gst_basertppayload_push() on
+   * the RTP buffers. This function takes ownership of the buffer. */
+  GstFlowReturn (*handle_buffer)        (GstBaseRTPPayload *payload,
+                                         GstBuffer *buffer);
+  gboolean      (*handle_event)         (GstBaseRTPPayload *payload, GstEvent * event);
+};
+</pre>
+<p>
+Base class for audio RTP payloader.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseRTPPayloadClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPPayloadClass.get-caps"></a>get_caps</code></em> ()</span></p></td>
+<td>get desired caps</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPPayloadClass.set-caps"></a>set_caps</code></em> ()</span></p></td>
+<td>configure the payloader</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPPayloadClass.handle-buffer"></a>handle_buffer</code></em> ()</span></p></td>
+<td>process data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstBaseRTPPayloadClass.handle-event"></a>handle_event</code></em> ()</span></p></td>
+<td>custom event handling</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-PAYLOAD-MTU:CAPS"></a><h3>GST_BASE_RTP_PAYLOAD_MTU()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_PAYLOAD_MTU(payload) (GST_BASE_RTP_PAYLOAD (payload)-&gt;mtu)
+</pre>
+<p>
+Get access to the configured MTU of <em class="parameter"><code>payload</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-PAYLOAD-PT:CAPS"></a><h3>GST_BASE_RTP_PAYLOAD_PT()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_PAYLOAD_PT(payload)  (GST_BASE_RTP_PAYLOAD (payload)-&gt;pt)
+</pre>
+<p>
+Get access to the configured payload type of <em class="parameter"><code>payload</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS"></a><h3>GST_BASE_RTP_PAYLOAD_SINKPAD()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_PAYLOAD_SINKPAD(payload) (GST_BASE_RTP_PAYLOAD (payload)-&gt;sinkpad)
+</pre>
+<p>
+Get access to the sinkpad of <em class="parameter"><code>payload</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS"></a><h3>GST_BASE_RTP_PAYLOAD_SRCPAD()</h3>
+<pre class="programlisting">#define GST_BASE_RTP_PAYLOAD_SRCPAD(payload)  (GST_BASE_RTP_PAYLOAD (payload)-&gt;srcpad)
+</pre>
+<p>
+Get access to the srcpad of <em class="parameter"><code>payload</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-basertppayload-is-filled"></a><h3>gst_basertppayload_is_filled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_basertppayload_is_filled        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> duration</code></em>);</pre>
+<p>
+Check if the packet with <em class="parameter"><code>size</code></em> and <em class="parameter"><code>duration</code></em> would exceed the configured
+maximum size.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>duration</code></em> :</span></p></td>
+<td>the duration of the packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the packet of <em class="parameter"><code>size</code></em> and <em class="parameter"><code>duration</code></em> would exceed the
+configured MTU or max_ptime.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-basertppayload-push"></a><h3>gst_basertppayload_push ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_basertppayload_push             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Push <em class="parameter"><code>buffer</code></em> to the peer element of the payloader. The SSRC, payload type,
+seqnum and timestamp of the RTP buffer will be updated first.
+</p>
+<p>
+This function takes ownership of <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-basertppayload-push-list"></a><h3>gst_basertppayload_push_list ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_basertppayload_push_list        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a> *list</code></em>);</pre>
+<p>
+Push <em class="parameter"><code>list</code></em> to the peer element of the payloader. The SSRC, payload type,
+seqnum and timestamp of the RTP buffer will be updated first.
+</p>
+<p>
+This function takes ownership of <em class="parameter"><code>list</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="type">GstBufferList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.24</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-basertppayload-set-options"></a><h3>gst_basertppayload_set_options ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_basertppayload_set_options      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> dynamic</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *encoding_name</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> clock_rate</code></em>);</pre>
+<p>
+Set the rtp options of the payloader. These options will be set in the caps
+of the payloader. Subclasses must call this method before calling
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push" title="gst_basertppayload_push ()"><code class="function">gst_basertppayload_push()</code></a> or <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-outcaps" title="gst_basertppayload_set_outcaps ()"><code class="function">gst_basertppayload_set_outcaps()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>the media type (typically "audio" or "video")</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dynamic</code></em> :</span></p></td>
+<td>if the payload type is dynamic</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>encoding_name</code></em> :</span></p></td>
+<td>the encoding name</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clock_rate</code></em> :</span></p></td>
+<td>the clock rate of the media</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-basertppayload-set-outcaps"></a><h3>gst_basertppayload_set_outcaps ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_basertppayload_set_outcaps      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a> *payload</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *fieldname</code></em>,
+                                                         <em class="parameter"><code>...</code></em>);</pre>
+<p>
+Configure the output caps with the optional parameters.
+</p>
+<p>
+Variable arguments should be in the form field name, field type
+(as a GType), value(s).  The last variable argument should be NULL.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fieldname</code></em> :</span></p></td>
+<td>the first field name or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
+<td>field values</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the caps could be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstbasertppayload.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--max-ptime"></a><h3>The <code class="literal">"max-ptime"</code> property</h3>
+<pre class="programlisting">  "max-ptime"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Maximum duration of the packet data in ns (-1 = unlimited up to MTU).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--min-ptime"></a><h3>The <code class="literal">"min-ptime"</code> property</h3>
+<pre class="programlisting">  "min-ptime"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Minimum duration of the packet data in ns (can't go above MTU).</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--mtu"></a><h3>The <code class="literal">"mtu"</code> property</h3>
+<pre class="programlisting">  "mtu"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Maximum size of one packet.</p>
+<p>Allowed values: &gt;= 28</p>
+<p>Default value: 1400</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--perfect-rtptime"></a><h3>The <code class="literal">"perfect-rtptime"</code> property</h3>
+<pre class="programlisting">  "perfect-rtptime"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Generate perfect RTP timestamps when possible.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--pt"></a><h3>The <code class="literal">"pt"</code> property</h3>
+<pre class="programlisting">  "pt"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>The payload type of the packets.</p>
+<p>Allowed values: &lt;= 128</p>
+<p>Default value: 96</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--ptime-multiple"></a><h3>The <code class="literal">"ptime-multiple"</code> property</h3>
+<pre class="programlisting">  "ptime-multiple"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Force buffers to be multiples of this duration in ns (0 disables).</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--seqnum"></a><h3>The <code class="literal">"seqnum"</code> property</h3>
+<pre class="programlisting">  "seqnum"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read</pre>
+<p>The RTP sequence number of the last processed packet.</p>
+<p>Allowed values: &lt;= 65535</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--seqnum-offset"></a><h3>The <code class="literal">"seqnum-offset"</code> property</h3>
+<pre class="programlisting">  "seqnum-offset"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Offset to add to all outgoing seqnum (-1 = random).</p>
+<p>Allowed values: [G_MAXULONG,65535]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--ssrc"></a><h3>The <code class="literal">"ssrc"</code> property</h3>
+<pre class="programlisting">  "ssrc"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>The SSRC of the packets (default == random).</p>
+<p>Default value: 4294967295</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--timestamp"></a><h3>The <code class="literal">"timestamp"</code> property</h3>
+<pre class="programlisting">  "timestamp"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read</pre>
+<p>The RTP timestamp of the last processed packet.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBaseRTPPayload--timestamp-offset"></a><h3>The <code class="literal">"timestamp-offset"</code> property</h3>
+<pre class="programlisting">  "timestamp-offset"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Offset to add to all outgoing timestamps (default = random).</p>
+<p>Default value: 4294967295</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcddabasesrc.html b/docs/libs/html/gst-plugins-base-libs-gstcddabasesrc.html
new file mode 100644
index 0000000..65a4a23
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstcddabasesrc.html
@@ -0,0 +1,316 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstcddabasesrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-cdda.html" title="CDDA Library">
+<link rel="prev" href="gstreamer-cdda.html" title="CDDA Library">
+<link rel="next" href="gstreamer-ffft.html" title="FFT Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-cdda.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-cdda.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-ffft.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstcddabasesrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcddabasesrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcddabasesrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcddabasesrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcddabasesrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstcddabasesrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstcddabasesrc.top_of_page"></a>gstcddabasesrc</span></h2>
+<p>gstcddabasesrc — Base class for CD digital audio (CDDA) sources</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstcddabasesrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstCddaBaseSrc"></a><pre class="synopsis">
+#include &lt;gst/cdda/gstcddabasesrc.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc-struct" title="struct GstCddaBaseSrc">GstCddaBaseSrc</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcClass" title="struct GstCddaBaseSrcClass">GstCddaBaseSrcClass</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack" title="struct GstCddaBaseSrcTrack">GstCddaBaseSrcTrack</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode" title="enum GstCddaBaseSrcMode">GstCddaBaseSrcMode</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#gst-cdda-base-src-add-track" title="gst_cdda_base_src_add_track ()">gst_cdda_base_src_add_track</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc"><span class="type">GstCddaBaseSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack" title="struct GstCddaBaseSrcTrack"><span class="type">GstCddaBaseSrcTrack</span></a> *track</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----GstCddaBaseSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstCddaBaseSrc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--device" title='The "device" property'>device</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--mode" title='The "mode" property'>mode</a>"                     <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode" title="enum GstCddaBaseSrcMode"><span class="type">GstCddaBaseSrcMode</span></a>    : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--track" title='The "track" property'>track</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id471435"></a><h3>Using GstCddaBaseSrc-based elements in applications</h3>
+<p>
+Provides a base class for CDDA sources, which handles things like seeking,
+querying, discid calculation, tags, and buffer timestamping.
+</p>
+<p>
+GstCddaBaseSrc registers two <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>s of its own, namely
+the "track" format and the "sector" format. Applications will usually
+only find the "track" format interesting. You can retrieve that <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>
+for use in seek events or queries with gst_format_get_by_nick("track").
+</p>
+<p>
+In order to query the number of tracks, for example, an application would
+set the CDDA source element to READY or PAUSED state and then query the
+the number of tracks via <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-query-duration"><code class="function">gst_element_query_duration()</code></a> using the track
+format acquired above. Applications can query the currently playing track
+in the same way.
+</p>
+<p>
+Alternatively, applications may retrieve the currently playing track and
+the total number of tracks from the taglist that will posted on the bus
+whenever the CD is opened or the currently playing track changes. The
+taglist will contain GST_TAG_TRACK_NUMBER and GST_TAG_TRACK_COUNT tags.
+</p>
+<p>
+Applications playing back CD audio using playbin and cdda://n URIs should
+issue a seek command in track format to change between tracks, rather than
+setting a new cdda://n+1 URI on playbin (as setting a new URI on playbin
+involves closing and re-opening the CD device, which is much much slower).
+</p>
+<p>
+CDDA sources will automatically emit a number of tags, details about which
+can be found in the libgsttag documentation. Those tags are:
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID:CAPS" title="GST_TAG_CDDA_CDDB_DISCID"><span class="type">GST_TAG_CDDA_CDDB_DISCID</span></a>, <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS" title="GST_TAG_CDDA_CDDB_DISCID_FULL"><span class="type">GST_TAG_CDDA_CDDB_DISCID_FULL</span></a>,
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID"><span class="type">GST_TAG_CDDA_MUSICBRAINZ_DISCID</span></a>, <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL"><span class="type">GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL</span></a>,
+among others.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstCddaBaseSrc-struct"></a><h3>struct GstCddaBaseSrc</h3>
+<pre class="programlisting">struct GstCddaBaseSrc;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCddaBaseSrcClass"></a><h3>struct GstCddaBaseSrcClass</h3>
+<pre class="programlisting">struct GstCddaBaseSrcClass {
+  GstPushSrcClass pushsrc_class;
+
+  /* open/close the CD device */
+  gboolean    (*open)               (GstCddaBaseSrc *src, const gchar *device);
+  void        (*close)              (GstCddaBaseSrc *src);
+
+  /* read one sector (LBA) */
+  GstBuffer * (*read_sector)        (GstCddaBaseSrc *src, gint sector);
+
+  /* return default device or NULL (optional) */
+  gchar *     (*get_default_device) (GstCddaBaseSrc *src);
+
+  /* return NULL-terminated string array of CD devices, or NULL (optional) */
+  gchar **    (*probe_devices)      (GstCddaBaseSrc *src);
+};
+</pre>
+<p>
+Cdda source base class.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><span class="type">GstPushSrcClass</span> <em class="structfield"><code><a name="GstCddaBaseSrcClass.pushsrc-class"></a>pushsrc_class</code></em>;</span></p></td>
+<td>the parent class</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstCddaBaseSrcClass.open"></a>open</code></em> ()</span></p></td>
+<td>opening the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstCddaBaseSrcClass.close"></a>close</code></em> ()</span></p></td>
+<td>closing the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstCddaBaseSrcClass.read-sector"></a>read_sector</code></em> ()</span></p></td>
+<td>reading a sector</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstCddaBaseSrcClass.get-default-device"></a>get_default_device</code></em> ()</span></p></td>
+<td>getting the default device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstCddaBaseSrcClass.probe-devices"></a>probe_devices</code></em> ()</span></p></td>
+<td>probing possible devices</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCddaBaseSrcTrack"></a><h3>struct GstCddaBaseSrcTrack</h3>
+<pre class="programlisting">struct GstCddaBaseSrcTrack {
+  gboolean     is_audio;      /* TRUE if this is an audio track             */
+  guint        num;           /* real track number (usually starts from 1)  */
+  guint        start;         /* first sector of track (LBA, not LSN!)      */
+  guint        end;           /* last sector of track  (LBA, not LSN!)      */
+  GstTagList  *tags;          /* NULL or tags for track (e.g. from cd-text) */
+};
+</pre>
+<p>
+CD track abstraction to communicate TOC entries to the base class.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstCddaBaseSrcTrack.is-audio"></a>is_audio</code></em>;</span></p></td>
+<td>Whether this is an audio track</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstCddaBaseSrcTrack.num"></a>num</code></em>;</span></p></td>
+<td>Track number in TOC (usually starts from 1, but not always)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstCddaBaseSrcTrack.start"></a>start</code></em>;</span></p></td>
+<td>The first sector of this track (LBA)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstCddaBaseSrcTrack.end"></a>end</code></em>;</span></p></td>
+<td>The last sector of this track (LBA)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *<em class="structfield"><code><a name="GstCddaBaseSrcTrack.tags"></a>tags</code></em>;</span></p></td>
+<td>Track-specific tags (e.g. from cd-text information), or NULL</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCddaBaseSrcMode"></a><h3>enum GstCddaBaseSrcMode</h3>
+<pre class="programlisting">typedef enum {
+  GST_CDDA_BASE_SRC_MODE_NORMAL,          /* stream = one track  */
+  GST_CDDA_BASE_SRC_MODE_CONTINUOUS       /* stream = whole disc */
+} GstCddaBaseSrcMode;
+</pre>
+<p>
+Mode in which the CD audio source operates. Influences timestamping,
+EOS handling and seeking.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-CDDA-BASE-SRC-MODE-NORMAL:CAPS"></a><span class="term"><code class="literal">GST_CDDA_BASE_SRC_MODE_NORMAL</code></span></p></td>
+<td>each single track is a stream
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CDDA-BASE-SRC-MODE-CONTINUOUS:CAPS"></a><span class="term"><code class="literal">GST_CDDA_BASE_SRC_MODE_CONTINUOUS</code></span></p></td>
+<td>the entire disc is a single stream
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-cdda-base-src-add-track"></a><h3>gst_cdda_base_src_add_track ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_cdda_base_src_add_track         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc"><span class="type">GstCddaBaseSrc</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack" title="struct GstCddaBaseSrcTrack"><span class="type">GstCddaBaseSrcTrack</span></a> *track</code></em>);</pre>
+<p>
+CDDA sources use this function from their start vfunc to announce the
+available data and audio tracks to the base source class. The caller
+should allocate <em class="parameter"><code>track</code></em> on the stack, the base source will do a shallow
+copy of the structure (and take ownership of the taglist if there is one).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc"><span class="type">GstCddaBaseSrc</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>address of <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack" title="struct GstCddaBaseSrcTrack"><span class="type">GstCddaBaseSrcTrack</span></a> to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>FALSE on error, otherwise TRUE.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcddabasesrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstCddaBaseSrc--device"></a><h3>The <code class="literal">"device"</code> property</h3>
+<pre class="programlisting">  "device"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>CD device location.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCddaBaseSrc--mode"></a><h3>The <code class="literal">"mode"</code> property</h3>
+<pre class="programlisting">  "mode"                     <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode" title="enum GstCddaBaseSrcMode"><span class="type">GstCddaBaseSrcMode</span></a>    : Read / Write</pre>
+<p>Mode.</p>
+<p>Default value: Stream consists of a single track</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCddaBaseSrc--track"></a><h3>The <code class="literal">"track"</code> property</h3>
+<pre class="programlisting">  "track"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Track.</p>
+<p>Allowed values: [1,99]</p>
+<p>Default value: 1</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
new file mode 100644
index 0000000..06a3bcb
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstcolorbalance</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="next" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-interfaces.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstcolorbalancechannel.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstcolorbalance.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalance.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalance.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalance.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstcolorbalance"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstcolorbalance.top_of_page"></a>gstcolorbalance</span></h2>
+<p>gstcolorbalance — Interface for adjusting color balance settings</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstcolorbalance.synopsis"></a><h2>Synopsis</h2>
+<a name="GstColorBalance"></a><pre class="synopsis">
+#include &lt;gst/interfaces/color.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct" title="GstColorBalance">GstColorBalance</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceClass" title="struct GstColorBalanceClass">GstColorBalanceClass</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType">GstColorBalanceType</a>;
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-list-channels" title="gst_color_balance_list_channels ()">gst_color_balance_list_channels</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-value" title="gst_color_balance_get_value ()">gst_color_balance_get_value</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-set-value" title="gst_color_balance_set_value ()">gst_color_balance_set_value</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-value-changed" title="gst_color_balance_value_changed ()">gst_color_balance_value_changed</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="returnvalue">GstColorBalanceType</span></a> <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-balance-type" title="gst_color_balance_get_balance_type ()">gst_color_balance_get_balance_type</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalance.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstColorBalance
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalance.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed" title='The "value-changed" signal'>value-changed</a>"                                  : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalance.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id487947"></a><p>
+This interface is implemented by elements which can perform some color
+balance operation on video frames they process. For example, modifying
+the brightness, contrast, hue or saturation.
+</p>
+<p>
+Example elements are 'xvimagesink' and 'colorbalance'
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalance.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstColorBalance-struct"></a><h3>GstColorBalance</h3>
+<pre class="programlisting">typedef struct _GstColorBalance GstColorBalance;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstColorBalanceClass"></a><h3>struct GstColorBalanceClass</h3>
+<pre class="programlisting">struct GstColorBalanceClass {
+  GTypeInterface klass;
+
+  GstColorBalanceType balance_type;
+
+  /* virtual functions */
+  const GList * (* list_channels) (GstColorBalance        *balance);
+
+  void          (* set_value)     (GstColorBalance        *balance,
+                                   GstColorBalanceChannel *channel,
+                                   gint                    value);
+  gint          (* get_value)     (GstColorBalance        *balance,
+                                   GstColorBalanceChannel *channel);
+
+  /* signals */
+  void (* value_changed) (GstColorBalance        *balance,
+                          GstColorBalanceChannel *channel,
+                          gint                    value);
+};
+</pre>
+<p>
+Color-balance interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstColorBalanceClass.klass"></a>klass</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="type">GstColorBalanceType</span></a> <em class="structfield"><code><a name="GstColorBalanceClass.balance-type"></a>balance_type</code></em>;</span></p></td>
+<td>implementation type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstColorBalanceClass.list-channels"></a>list_channels</code></em> ()</span></p></td>
+<td>list handled channels</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstColorBalanceClass.set-value"></a>set_value</code></em> ()</span></p></td>
+<td>set a channel value</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstColorBalanceClass.get-value"></a>get_value</code></em> ()</span></p></td>
+<td>get a channel value</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstColorBalanceClass.value-changed"></a>value_changed</code></em> ()</span></p></td>
+<td>default handler for value changed notification</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstColorBalanceType"></a><h3>enum GstColorBalanceType</h3>
+<pre class="programlisting">typedef enum {
+  GST_COLOR_BALANCE_HARDWARE,
+  GST_COLOR_BALANCE_SOFTWARE
+} GstColorBalanceType;
+</pre>
+<p>
+An enumeration indicating whether an element implements color balancing
+operations in software or in dedicated hardware. In general, dedicated
+hardware implementations (such as those provided by xvimagesink) are
+preferred.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-COLOR-BALANCE-HARDWARE:CAPS"></a><span class="term"><code class="literal">GST_COLOR_BALANCE_HARDWARE</code></span></p></td>
+<td>Color balance is implemented with dedicated
+        hardware.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-COLOR-BALANCE-SOFTWARE:CAPS"></a><span class="term"><code class="literal">GST_COLOR_BALANCE_SOFTWARE</code></span></p></td>
+<td>Color balance is implemented via software
+        processing.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-color-balance-list-channels"></a><h3>gst_color_balance_list_channels ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_color_balance_list_channels     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);</pre>
+<p>
+Retrieve a list of the available channels.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>balance</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A GList containing pointers to <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> objects.
+The list is owned by the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> instance and must not
+be freed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-color-balance-get-value"></a><h3>gst_color_balance_get_value ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_color_balance_get_value         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>);</pre>
+<p>
+Retrieve the current value of the indicated channel, between min_value
+and max_value.
+</p>
+<p>
+See Also: The <span class="type">GstColorBalanceChannel.min_value</span> and
+        <span class="type">GstColorBalanceChannel.max_value</span> members of the
+        <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>balance</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current value of the channel.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-color-balance-set-value"></a><h3>gst_color_balance_set_value ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_color_balance_set_value         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);</pre>
+<p>
+Sets the current value of the channel to the passed value, which must
+be between min_value and max_value.
+</p>
+<p>
+See Also: The <span class="type">GstColorBalanceChannel.min_value</span> and
+        <span class="type">GstColorBalanceChannel.max_value</span> members of the
+        <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>balance</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The new value for the channel.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-color-balance-value-changed"></a><h3>gst_color_balance_value_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_color_balance_value_changed     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> value</code></em>);</pre>
+<p>
+A helper function called by implementations of the GstColorBalance
+interface. It fires the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed" title='The "value-changed" signal'><span class="type">"value-changed"</span></a> signal on the
+instance, and the <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed" title='The "value-changed" signal'><span class="type">"value-changed"</span></a> signal on the
+channel object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>balance</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> whose value has changed</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The new value of the channel</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-color-balance-get-balance-type"></a><h3>gst_color_balance_get_balance_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="returnvalue">GstColorBalanceType</span></a> gst_color_balance_get_balance_type  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);</pre>
+<p>
+Get the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="type">GstColorBalanceType</span></a> of this implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>balance</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> implementation</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="type">GstColorBalanceType</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.24</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalance.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstColorBalance-value-changed"></a><h3>The <code class="literal">"value-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>        *colorbalance,
+                                                        <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                    value,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                user_data)         : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Fired when the value of the indicated channel has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>colorbalance</code></em> :</span></p></td>
+<td>The GstColorBalance instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The new value</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
new file mode 100644
index 0000000..308afd6
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstcolorbalancechannel</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">
+<link rel="next" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstcolorbalance.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstmixer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstcolorbalancechannel.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalancechannel.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalancechannel.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstcolorbalancechannel.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstcolorbalancechannel.top_of_page"></a>gstcolorbalancechannel</span></h2>
+<p>gstcolorbalancechannel — Object representing a channel from the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>
+        interface.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.synopsis"></a><h2>Synopsis</h2>
+<a name="GstColorBalanceChannel"></a><pre class="synopsis">
+#include &lt;gst/interfaces/colorbalancechannel.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-struct" title="struct GstColorBalanceChannel">GstColorBalanceChannel</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannelClass" title="struct GstColorBalanceChannelClass">GstColorBalanceChannelClass</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstColorBalanceChannel
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed" title='The "value-changed" signal'>value-changed</a>"                                  : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id494532"></a><p>The <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object represents a parameter
+for modifying the color balance implemented by an element providing the
+<a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> interface. For example, Hue or Saturation.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstColorBalanceChannel-struct"></a><h3>struct GstColorBalanceChannel</h3>
+<pre class="programlisting">struct GstColorBalanceChannel {
+  gchar  *label;
+  gint    min_value;
+  gint    max_value;
+};
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstColorBalanceChannel-struct.label"></a>label</code></em>;</span></p></td>
+<td>A string containing a descriptive name for this channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstColorBalanceChannel-struct.min-value"></a>min_value</code></em>;</span></p></td>
+<td>The minimum valid value for this channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstColorBalanceChannel-struct.max-value"></a>max_value</code></em>;</span></p></td>
+<td>The maximum valid value for this channel.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstColorBalanceChannelClass"></a><h3>struct GstColorBalanceChannelClass</h3>
+<pre class="programlisting">struct GstColorBalanceChannelClass {
+  GObjectClass parent;
+
+  /* signals */
+  void (* value_changed) (GstColorBalanceChannel *channel,
+                          gint                    value);
+};
+</pre>
+<p>
+Color-balance channel class.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> <em class="structfield"><code><a name="GstColorBalanceChannelClass.parent"></a>parent</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstColorBalanceChannelClass.value-changed"></a>value_changed</code></em> ()</span></p></td>
+<td>default handler for value changed notification</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstcolorbalancechannel.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstColorBalanceChannel-value-changed"></a><h3>The <code class="literal">"value-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> *channel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                    value,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Fired when the value of the indicated channel has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The new value</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html b/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html
new file mode 100644
index 0000000..f997b76
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html
@@ -0,0 +1,1532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstdiscoverer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">
+<link rel="next" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-encoding-profile.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstdiscoverer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstdiscoverer.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstdiscoverer.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstdiscoverer.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstdiscoverer.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstdiscoverer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstdiscoverer.top_of_page"></a>gstdiscoverer</span></h2>
+<p>gstdiscoverer — Utility for discovering information on URIs.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstdiscoverer.synopsis"></a><h2>Synopsis</h2>
+<a name="GstDiscoverer"></a><a name="GstDiscovererInfo"></a><pre class="synopsis">
+#include &lt;gst/pbutils/pbutils.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct" title="struct GstDiscoverer">GstDiscoverer</a>;
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="returnvalue">GstDiscoverer</span></a> *     <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-new" title="gst_discoverer_new ()">gst_discoverer_new</a>                  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start" title="gst_discoverer_start ()">gst_discoverer_start</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stop" title="gst_discoverer_stop ()">gst_discoverer_stop</a>                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="returnvalue">GstDiscovererInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri" title="gst_discoverer_discover_uri ()">gst_discoverer_discover_uri</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri-async" title="gst_discoverer_discover_uri_async ()">gst_discoverer_discover_uri_async</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);
+
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct" title="GstDiscovererInfo">GstDiscovererInfo</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult">GstDiscovererResult</a>;
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-duration" title="gst_discoverer_info_get_duration ()">gst_discoverer_info_get_duration</a>    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="returnvalue">GstStructure</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-misc" title="gst_discoverer_info_get_misc ()">gst_discoverer_info_get_misc</a>       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult"><span class="returnvalue">GstDiscovererResult</span></a> <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-result" title="gst_discoverer_info_get_result ()">gst_discoverer_info_get_result</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-info" title="gst_discoverer_info_get_stream_info ()">gst_discoverer_info_get_stream_info</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-list" title="gst_discoverer_info_get_stream_list ()">gst_discoverer_info_get_stream_list</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *  <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-tags" title="gst_discoverer_info_get_tags ()">gst_discoverer_info_get_tags</a>        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-uri" title="gst_discoverer_info_get_uri ()">gst_discoverer_info_get_uri</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable" title="gst_discoverer_info_get_seekable ()">gst_discoverer_info_get_seekable</a>    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+#define             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref" title="gst_discoverer_info_ref()">gst_discoverer_info_ref</a>             (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref" title="gst_discoverer_info_unref()">gst_discoverer_info_unref</a>           (info)
+
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo">GstDiscovererStreamInfo</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo">GstDiscovererContainerInfo</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo">GstDiscovererAudioInfo</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo">GstDiscovererVideoInfo</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo">GstDiscovererSubtitleInfo</a>;
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps" title="gst_discoverer_stream_info_get_caps ()">gst_discoverer_stream_info_get_caps</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="returnvalue">GstStructure</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc" title="gst_discoverer_stream_info_get_misc ()">gst_discoverer_stream_info_get_misc</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next" title="gst_discoverer_stream_info_get_next ()">gst_discoverer_stream_info_get_next</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-previous" title="gst_discoverer_stream_info_get_previous ()">gst_discoverer_stream_info_get_previous</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *  <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-tags" title="gst_discoverer_stream_info_get_tags ()">gst_discoverer_stream_info_get_tags</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+#define             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-ref" title="gst_discoverer_stream_info_ref()">gst_discoverer_stream_info_ref</a>      (info)
+#define             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()">gst_discoverer_stream_info_unref</a>    (info)
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()">gst_discoverer_stream_info_list_free</a>
+                                                        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *infos</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-stream-type-nick" title="gst_discoverer_stream_info_get_stream_type_nick ()">gst_discoverer_stream_info_get_stream_type_nick</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-audio-streams" title="gst_discoverer_info_get_audio_streams ()">gst_discoverer_info_get_audio_streams</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-container-streams" title="gst_discoverer_info_get_container_streams ()">gst_discoverer_info_get_container_streams</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-streams" title="gst_discoverer_info_get_streams ()">gst_discoverer_info_get_streams</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> streamtype</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-subtitle-streams" title="gst_discoverer_info_get_subtitle_streams ()">gst_discoverer_info_get_subtitle_streams</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-video-streams" title="gst_discoverer_info_get_video_streams ()">gst_discoverer_info_get_video_streams</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-bitrate" title="gst_discoverer_audio_info_get_bitrate ()">gst_discoverer_audio_info_get_bitrate</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-channels" title="gst_discoverer_audio_info_get_channels ()">gst_discoverer_audio_info_get_channels</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-depth" title="gst_discoverer_audio_info_get_depth ()">gst_discoverer_audio_info_get_depth</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-language" title="gst_discoverer_audio_info_get_language ()">gst_discoverer_audio_info_get_language</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-max-bitrate" title="gst_discoverer_audio_info_get_max_bitrate ()">gst_discoverer_audio_info_get_max_bitrate</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-sample-rate" title="gst_discoverer_audio_info_get_sample_rate ()">gst_discoverer_audio_info_get_sample_rate</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-container-info-get-streams" title="gst_discoverer_container_info_get_streams ()">gst_discoverer_container_info_get_streams</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> *info</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-subtitle-info-get-language" title="gst_discoverer_subtitle_info_get_language ()">gst_discoverer_subtitle_info_get_language</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-bitrate" title="gst_discoverer_video_info_get_bitrate ()">gst_discoverer_video_info_get_bitrate</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-depth" title="gst_discoverer_video_info_get_depth ()">gst_discoverer_video_info_get_depth</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-denom" title="gst_discoverer_video_info_get_framerate_denom ()">gst_discoverer_video_info_get_framerate_denom</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-num" title="gst_discoverer_video_info_get_framerate_num ()">gst_discoverer_video_info_get_framerate_num</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-height" title="gst_discoverer_video_info_get_height ()">gst_discoverer_video_info_get_height</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-interlaced" title="gst_discoverer_video_info_is_interlaced ()">gst_discoverer_video_info_is_interlaced</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-image" title="gst_discoverer_video_info_is_image ()">gst_discoverer_video_info_is_image</a>  (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-max-bitrate" title="gst_discoverer_video_info_get_max_bitrate ()">gst_discoverer_video_info_get_max_bitrate</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-denom" title="gst_discoverer_video_info_get_par_denom ()">gst_discoverer_video_info_get_par_denom</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-num" title="gst_discoverer_video_info_get_par_num ()">gst_discoverer_video_info_get_par_num</a>
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-width" title="gst_discoverer_video_info_get_width ()">gst_discoverer_video_info_get_width</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstDiscoverer
+</pre>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstDiscovererInfo
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer--timeout" title='The "timeout" property'>timeout</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-discovered" title='The "discovered" signal'>discovered</a>"                                     : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished" title='The "finished" signal'>finished</a>"                                       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting" title='The "starting" signal'>starting</a>"                                       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.description"></a><h2>Description</h2>
+<p>
+The <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> is a utility object which allows to get as much
+information as possible from one or many URIs.
+</p>
+<p>
+It provides two APIs, allowing usage in blocking or non-blocking mode.
+</p>
+<p>
+The blocking mode just requires calling <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri" title="gst_discoverer_discover_uri ()"><code class="function">gst_discoverer_discover_uri()</code></a>
+with the URI one wishes to discover.
+</p>
+<p>
+The non-blocking mode requires a running <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> in the default
+<a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a>, where one connects to the various signals, appends the
+URIs to be processed (through <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri-async" title="gst_discoverer_discover_uri_async ()"><code class="function">gst_discoverer_discover_uri_async()</code></a>) and then
+asks for the discovery to begin (through <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start" title="gst_discoverer_start ()"><code class="function">gst_discoverer_start()</code></a>).
+</p>
+<p>
+All the information is returned in a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> structure.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstDiscoverer-struct"></a><h3>struct GstDiscoverer</h3>
+<pre class="programlisting">struct GstDiscoverer;</pre>
+<p>
+The <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> structure.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-new"></a><h3>gst_discoverer_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="returnvalue">GstDiscoverer</span></a> *     gst_discoverer_new                  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> with the provided timeout.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>timeout per file, in nanoseconds. Allowed are values between
+one second (<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-SECOND:CAPS"><span class="type">GST_SECOND</span></a>) and one hour (3600 * <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-SECOND:CAPS"><span class="type">GST_SECOND</span></a>)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>err</code></em> :</span></p></td>
+<td>a pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>. can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>.
+If an error occurred when creating the discoverer, <em class="parameter"><code>err</code></em> will be set
+accordingly and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> will be returned. If <em class="parameter"><code>err</code></em> is set, the caller must
+free it when no longer needed using <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#g-error-free"><code class="function">g_error_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-start"></a><h3>gst_discoverer_start ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_discoverer_start                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>);</pre>
+<p>
+Allow asynchronous discovering of URIs to take place.
+A <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainLoop"><span class="type">GMainLoop</span></a> must be available for <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> to properly work in
+asynchronous mode.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stop"></a><h3>gst_discoverer_stop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_discoverer_stop                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>);</pre>
+<p>
+Stop the discovery of any pending URIs and clears the list of
+pending URIS (if any).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-discover-uri"></a><h3>gst_discoverer_discover_uri ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="returnvalue">GstDiscovererInfo</span></a> * gst_discoverer_discover_uri         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **err</code></em>);</pre>
+<p>
+Synchronously discovers the given <em class="parameter"><code>uri</code></em>.
+</p>
+<p>
+A copy of <em class="parameter"><code>uri</code></em> will be made internally, so the caller can safely <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+afterwards.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>The URI to run on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>err</code></em> :</span></p></td>
+<td>If an error occurred, this field will be filled in. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the result of the scanning. Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an
+error occurred. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-discover-uri-async"></a><h3>gst_discoverer_discover_uri_async ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_discoverer_discover_uri_async   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>
+Appends the given <em class="parameter"><code>uri</code></em> to the list of URIs to discoverer. The actual
+discovery of the <em class="parameter"><code>uri</code></em> will only take place if <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start" title="gst_discoverer_start ()"><code class="function">gst_discoverer_start()</code></a> has
+been called.
+</p>
+<p>
+A copy of <em class="parameter"><code>uri</code></em> will be made internally, so the caller can safely <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+afterwards.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>the URI to add.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <em class="parameter"><code>uri</code></em> was succesfully appended to the list of pending
+uris, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererInfo-struct"></a><h3>GstDiscovererInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererInfo GstDiscovererInfo;</pre>
+<p>
+Structure containing the information of a URI analyzed by <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererResult"></a><h3>enum GstDiscovererResult</h3>
+<pre class="programlisting">typedef enum {
+  GST_DISCOVERER_OK               = 0,
+  GST_DISCOVERER_URI_INVALID      = 1,
+  GST_DISCOVERER_ERROR            = 2,
+  GST_DISCOVERER_TIMEOUT          = 3,
+  GST_DISCOVERER_BUSY             = 4,
+  GST_DISCOVERER_MISSING_PLUGINS  = 5
+} GstDiscovererResult;
+</pre>
+<p>
+Result values for the discovery process.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-DISCOVERER-OK:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_OK</code></span></p></td>
+<td>The discovery was successful
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-DISCOVERER-URI-INVALID:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_URI_INVALID</code></span></p></td>
+<td>the URI is invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-DISCOVERER-ERROR:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_ERROR</code></span></p></td>
+<td>an error happened and the GError is set
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-DISCOVERER-TIMEOUT:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_TIMEOUT</code></span></p></td>
+<td>the discovery timed-out
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-DISCOVERER-BUSY:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_BUSY</code></span></p></td>
+<td>the discoverer was already discovering a file
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-DISCOVERER-MISSING-PLUGINS:CAPS"></a><span class="term"><code class="literal">GST_DISCOVERER_MISSING_PLUGINS</code></span></p></td>
+<td>Some plugins are missing for full discovery
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-duration"></a><h3>gst_discoverer_info_get_duration ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_discoverer_info_get_duration    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the duration of the URI in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> (nanoseconds).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-misc"></a><h3>gst_discoverer_info_get_misc ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="returnvalue">GstStructure</span></a> * gst_discoverer_info_get_misc       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Miscellaneous information stored as a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>
+(for example: information about missing plugins). If you wish to use the
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> after the life-time of <em class="parameter"><code>info</code></em>, you will need to copy it. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-result"></a><h3>gst_discoverer_info_get_result ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult"><span class="returnvalue">GstDiscovererResult</span></a> gst_discoverer_info_get_result      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the result of the discovery as a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult"><span class="type">GstDiscovererResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-stream-info"></a><h3>gst_discoverer_info_get_stream_info ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * gst_discoverer_info_get_stream_info
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the structure (or topology) of the URI as a
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>.
+This structure can be traversed to see the original hierarchy. Unref with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><code class="function">gst_discoverer_stream_info_unref()</code></a> after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-stream-list"></a><h3>gst_discoverer_info_get_stream_list ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_stream_list (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the list of
+all streams contained in the <span class="type">info</span>. Free after usage
+with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-tags"></a><h3>gst_discoverer_info_get_tags ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *  gst_discoverer_info_get_tags        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>all tags contained in the URI. If you wish to use
+the tags after the life-time of <em class="parameter"><code>info</code></em>, you will need to copy them. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-uri"></a><h3>gst_discoverer_info_get_uri ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_discoverer_info_get_uri         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the URI to which this information corresponds to.
+Copy it if you wish to use it after the life-time of <em class="parameter"><code>info</code></em>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-seekable"></a><h3>gst_discoverer_info_get_seekable ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_discoverer_info_get_seekable    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the wheter the URI is seekable.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-ref"></a><h3>gst_discoverer_info_ref()</h3>
+<pre class="programlisting">#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info))
+</pre>
+<p>
+Increments the reference count of <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the same <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> object</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-unref"></a><h3>gst_discoverer_info_unref()</h3>
+<pre class="programlisting">#define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info))
+</pre>
+<p>
+Decrements the reference count of <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererStreamInfo"></a><h3>GstDiscovererStreamInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;</pre>
+<p>
+Base structure for information concerning a media stream. Depending on the
+stream type, one can find more media-specific information in
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>, <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>, and
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a>.
+</p>
+<p>
+The <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> represents the topology of the stream. Siblings
+can be iterated over with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next" title="gst_discoverer_stream_info_get_next ()"><code class="function">gst_discoverer_stream_info_get_next()</code></a> and
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-previous" title="gst_discoverer_stream_info_get_previous ()"><code class="function">gst_discoverer_stream_info_get_previous()</code></a>. Children (sub-streams) of a
+stream can be accessed using the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> API.
+</p>
+<p>
+As a simple example, if you run <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> on an AVI file with one audio
+and one video stream, you will get a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a>
+corresponding to the AVI container, which in turn will have a
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> sub-stream and a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> sub-stream
+for the audio and video streams respectively.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererContainerInfo"></a><h3>GstDiscovererContainerInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo;</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> specific to container streams.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererAudioInfo"></a><h3>GstDiscovererAudioInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo;</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> specific to audio streams.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererVideoInfo"></a><h3>GstDiscovererVideoInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo;</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> specific to video streams (this includes images).
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscovererSubtitleInfo"></a><h3>GstDiscovererSubtitleInfo</h3>
+<pre class="programlisting">typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo;</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> specific to subtitle streams (this includes text and
+image based ones).
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-caps"></a><h3>gst_discoverer_stream_info_get_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_discoverer_stream_info_get_caps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> of the stream. Unref with
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><span class="type">gst_caps_unref</span></a> after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-misc"></a><h3>gst_discoverer_stream_info_get_misc ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="returnvalue">GstStructure</span></a> * gst_discoverer_stream_info_get_misc
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>additional information regarding the stream (for
+example codec version, profile, etc..). If you wish to use the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>
+after the life-time of <em class="parameter"><code>info</code></em> you will need to copy it. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-next"></a><h3>gst_discoverer_stream_info_get_next ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * gst_discoverer_stream_info_get_next
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the next <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+for final streams.
+Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></a> after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-previous"></a><h3>gst_discoverer_stream_info_get_previous ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> * gst_discoverer_stream_info_get_previous
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the previous <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain.
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for starting points. Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></a>
+after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-tags"></a><h3>gst_discoverer_stream_info_get_tags ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *  gst_discoverer_stream_info_get_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the tags contained in this stream. If you wish to
+use the tags after the life-time of <em class="parameter"><code>info</code></em> you will need to copy them. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-ref"></a><h3>gst_discoverer_stream_info_ref()</h3>
+<pre class="programlisting">#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
+</pre>
+<p>
+Increments the reference count of <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the same <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> object</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-unref"></a><h3>gst_discoverer_stream_info_unref()</h3>
+<pre class="programlisting">#define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info))
+</pre>
+<p>
+Decrements the reference count of <em class="parameter"><code>info</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-list-free"></a><h3>gst_discoverer_stream_info_list_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_discoverer_stream_info_list_free
+                                                        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *infos</code></em>);</pre>
+<p>
+Decrements the reference count of all contained <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+and fress the <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>infos</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-stream-info-get-stream-type-nick"></a><h3>gst_discoverer_stream_info_get_stream_type_nick ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_discoverer_stream_info_get_stream_type_nick
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a human readable name for the stream type of the given <em class="parameter"><code>info</code></em> (ex : "audio",
+"container",...).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-audio-streams"></a><h3>gst_discoverer_info_get_audio_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_audio_streams
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>
+Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-container-streams"></a><h3>gst_discoverer_info_get_container_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_container_streams
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>
+Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-streams"></a><h3>gst_discoverer_info_get_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_streams     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> streamtype</code></em>);</pre>
+<p>
+Finds the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> contained in <em class="parameter"><code>info</code></em> that match the
+given <em class="parameter"><code>streamtype</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>streamtype</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> derived from <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-subtitle-streams"></a><h3>gst_discoverer_info_get_subtitle_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_subtitle_streams
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>
+Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-video-streams"></a><h3>gst_discoverer_info_get_video_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_info_get_video_streams
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>
+Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+matching <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-bitrate"></a><h3>gst_discoverer_audio_info_get_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_audio_info_get_bitrate
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the average or nominal bitrate of the stream in bits/second.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-channels"></a><h3>gst_discoverer_audio_info_get_channels ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_audio_info_get_channels
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of channels in the stream.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-depth"></a><h3>gst_discoverer_audio_info_get_depth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_audio_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of bits used per sample in each channel.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-language"></a><h3>gst_discoverer_audio_info_get_language ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_discoverer_audio_info_get_language
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the language of the stream, or NULL if unknown.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-max-bitrate"></a><h3>gst_discoverer_audio_info_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_audio_info_get_max_bitrate
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the maximum bitrate of the stream in bits/second.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-sample-rate"></a><h3>gst_discoverer_audio_info_get_sample_rate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_audio_info_get_sample_rate
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the sample rate of the stream in Hertz.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-container-info-get-streams"></a><h3>gst_discoverer_container_info_get_streams ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_discoverer_container_info_get_streams
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the list of
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> this container stream offers.
+Free with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a> after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DiscovererStreamInfo]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-subtitle-info-get-language"></a><h3>gst_discoverer_subtitle_info_get_language ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_discoverer_subtitle_info_get_language
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the language of the stream, or NULL if unknown.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-bitrate"></a><h3>gst_discoverer_video_info_get_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_bitrate
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the average or nominal bitrate of the video stream in bits/second.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-depth"></a><h3>gst_discoverer_video_info_get_depth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the depth in bits of the video stream.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-framerate-denom"></a><h3>gst_discoverer_video_info_get_framerate_denom ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_framerate_denom
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the framerate of the video stream (denominator).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-framerate-num"></a><h3>gst_discoverer_video_info_get_framerate_num ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_framerate_num
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the framerate of the video stream (numerator).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-height"></a><h3>gst_discoverer_video_info_get_height ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_height
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the height of the video stream in pixels.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-is-interlaced"></a><h3>gst_discoverer_video_info_is_interlaced ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_discoverer_video_info_is_interlaced
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the stream is interlaced, else <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-is-image"></a><h3>gst_discoverer_video_info_is_image ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_discoverer_video_info_is_image  (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the video stream corresponds to an image (i.e. only contains
+one frame).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-max-bitrate"></a><h3>gst_discoverer_video_info_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_max_bitrate
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the maximum bitrate of the video stream in bits/second.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-par-denom"></a><h3>gst_discoverer_video_info_get_par_denom ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_par_denom
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the Pixel Aspect Ratio (PAR) of the video stream (denominator).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-par-num"></a><h3>gst_discoverer_video_info_get_par_num ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_par_num
+                                                        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the Pixel Aspect Ratio (PAR) of the video stream (numerator).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-width"></a><h3>gst_discoverer_video_info_get_width ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_discoverer_video_info_get_width (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the width of the video stream in pixels.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstDiscoverer--timeout"></a><h3>The <code class="literal">"timeout"</code> property</h3>
+<pre class="programlisting">  "timeout"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write / Construct</pre>
+<p>
+The duration (in nanoseconds) after which the discovery of an individual
+URI will timeout.
+</p>
+<p>
+If the discovery of a URI times out, the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-TIMEOUT:CAPS"><code class="literal">GST_DISCOVERER_TIMEOUT</code></a> will be
+set on the result flags.
+</p>
+<p>Allowed values: [1000000000,3600000000000]</p>
+<p>Default value: 15000000000</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstdiscoverer.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstDiscoverer-discovered"></a><h3>The <code class="literal">"discovered"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>     *discoverer,
+                                                        <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>            *error,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>           user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Will be emitted when all information on a URI could be discovered.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td>the results <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>, which will be non-NULL if an error
+occurred during discovery. <span class="annotation">[<acronym title="Override the parsed C type with given type"><span class="acronym">type</span></acronym> GLib.Error]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscoverer-finished"></a><h3>The <code class="literal">"finished"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Will be emitted when all pending URIs have been processed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDiscoverer-starting"></a><h3>The <code class="literal">"starting"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a> *discoverer,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Will be emitted when the discover starts analyzing the pending URIs
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>discoverer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer"><span class="type">GstDiscoverer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfft.html b/docs/libs/html/gst-plugins-base-libs-gstfft.html
new file mode 100644
index 0000000..8e5b2cb
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstfft.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstfft</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="prev" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="next" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-ffft.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-ffft.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstffts16.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstfft.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstfft.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstfft"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstfft.top_of_page"></a>gstfft</span></h2>
+<p>gstfft — General FFT functions and declarations</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstfft.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/fft/gstfft.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow">GstFFTWindow</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()">gst_fft_next_fast_length</a>            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfft.description"></a><h2>Description</h2>
+<p>
+This library includes general definitions and functions, useful for
+all typed FFT classes.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfft.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstFFTWindow"></a><h3>enum GstFFTWindow</h3>
+<pre class="programlisting">typedef enum {
+  GST_FFT_WINDOW_RECTANGULAR,
+  GST_FFT_WINDOW_HAMMING,
+  GST_FFT_WINDOW_HANN,
+  GST_FFT_WINDOW_BARTLETT,
+  GST_FFT_WINDOW_BLACKMAN
+} GstFFTWindow;
+</pre>
+<p>
+The various window functions available.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-FFT-WINDOW-RECTANGULAR:CAPS"></a><span class="term"><code class="literal">GST_FFT_WINDOW_RECTANGULAR</code></span></p></td>
+<td>Rectangular window
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-FFT-WINDOW-HAMMING:CAPS"></a><span class="term"><code class="literal">GST_FFT_WINDOW_HAMMING</code></span></p></td>
+<td>Hamming window
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-FFT-WINDOW-HANN:CAPS"></a><span class="term"><code class="literal">GST_FFT_WINDOW_HANN</code></span></p></td>
+<td>Hann (sometimes also called Hanning) window
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-FFT-WINDOW-BARTLETT:CAPS"></a><span class="term"><code class="literal">GST_FFT_WINDOW_BARTLETT</code></span></p></td>
+<td>Bartlett window
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-FFT-WINDOW-BLACKMAN:CAPS"></a><span class="term"><code class="literal">GST_FFT_WINDOW_BLACKMAN</code></span></p></td>
+<td>Blackman window
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-next-fast-length"></a><h3>gst_fft_next_fast_length ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_fft_next_fast_length            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n</code></em>);</pre>
+<p>
+Returns the next number to <em class="parameter"><code>n</code></em> that is entirely a product
+of 2, 3 and 5. Using this as the <em class="parameter"><code>len</code></em> parameter for
+the different GstFFT types will provide the best performance.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n</code></em> :</span></p></td>
+<td>Number for which the next fast length should be returned</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the next fast FFT length.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfftf32.html b/docs/libs/html/gst-plugins-base-libs-gstfftf32.html
new file mode 100644
index 0000000..7649c05
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstfftf32.html
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstfftf32</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="prev" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">
+<link rel="next" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstffts32.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-ffft.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstfftf64.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstfftf32.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstfftf32.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstfftf32"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstfftf32.top_of_page"></a>gstfftf32</span></h2>
+<p>gstfftf32 — FFT functions for 32 bit float samples</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstfftf32.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/fft/gstfftf32.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32">GstFFTF32</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex">GstFFTF32Complex</a>;
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="returnvalue">GstFFTF32</span></a> *         <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()">gst_fft_f32_new</a>                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft" title="gst_fft_f32_fft ()">gst_fft_f32_fft</a>                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex"><span class="type">GstFFTF32Complex</span></a> *freqdata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft" title="gst_fft_f32_inverse_fft ()">gst_fft_f32_inverse_fft</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex"><span class="type">GstFFTF32Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-window" title="gst_fft_f32_window ()">gst_fft_f32_window</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-free" title="gst_fft_f32_free ()">gst_fft_f32_free</a>                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfftf32.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> provides a FFT implementation and related functions for
+32 bit float samples. To use this call <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()"><code class="function">gst_fft_f32_new()</code></a> for
+allocating a <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance with the appropiate parameters and
+then call <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft" title="gst_fft_f32_fft ()"><code class="function">gst_fft_f32_fft()</code></a> or <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft" title="gst_fft_f32_inverse_fft ()"><code class="function">gst_fft_f32_inverse_fft()</code></a> to perform the
+FFT or inverse FFT on a buffer of samples.
+</p>
+<p>
+After use free the <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-free" title="gst_fft_f32_free ()"><code class="function">gst_fft_f32_free()</code></a>.
+</p>
+<p>
+For the best performance use <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a> to get a
+number that is entirely a product of 2, 3 and 5 and use this as the
+<em class="parameter"><code>len</code></em> parameter for <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()"><code class="function">gst_fft_f32_new()</code></a>.
+</p>
+<p>
+The <em class="parameter"><code>len</code></em> parameter specifies the number of samples in the time domain that
+will be processed or generated. The number of samples in the frequency domain
+is <em class="parameter"><code>len</code></em>/2 + 1. To get n samples in the frequency domain use 2*n - 2 as <em class="parameter"><code>len</code></em>.
+</p>
+<p>
+Before performing the FFT on time domain data it usually makes sense
+to apply a window function to it. For this <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-window" title="gst_fft_f32_window ()"><code class="function">gst_fft_f32_window()</code></a> can comfortably
+be used.
+</p>
+<p>
+Be aware, that you can't simply run <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft" title="gst_fft_f32_inverse_fft ()"><code class="function">gst_fft_f32_inverse_fft()</code></a> on the
+resulting frequency data of <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft" title="gst_fft_f32_fft ()"><code class="function">gst_fft_f32_fft()</code></a> to get the original data back.
+The relation between them is iFFT (FFT (x)) = x * nfft where nfft is the
+length of the FFT. This also has to be taken into account when calculation
+the magnitude of the frequency data.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfftf32.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstFFTF32"></a><h3>struct GstFFTF32</h3>
+<pre class="programlisting">struct GstFFTF32 {
+};
+</pre>
+<p>
+Instance structure for <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstFFTF32Complex"></a><h3>struct GstFFTF32Complex</h3>
+<pre class="programlisting">struct GstFFTF32Complex {
+  gfloat r;
+  gfloat i;
+};
+</pre>
+<p>
+Data type for complex numbers composed of
+32 bit float.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstFFTF32Complex.r"></a>r</code></em>;</span></p></td>
+<td>Real part</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstFFTF32Complex.i"></a>i</code></em>;</span></p></td>
+<td>Imaginary part</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f32-new"></a><h3>gst_fft_f32_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="returnvalue">GstFFTF32</span></a> *         gst_fft_f32_new                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);</pre>
+<p>
+This returns a new <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance with the given parameters. It makes
+sense to keep one instance for several calls for speed reasons.
+</p>
+<p>
+<em class="parameter"><code>len</code></em> must be even and to get the best performance a product of
+2, 3 and 5. To get the next number with this characteristics use
+<a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the FFT in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inverse</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance should be used for the inverse FFT</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f32-fft"></a><h3>gst_fft_f32_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f32_fft                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex"><span class="type">GstFFTF32Complex</span></a> *freqdata</code></em>);</pre>
+<p>
+This performs the FFT on <em class="parameter"><code>timedata</code></em> and puts the result in <em class="parameter"><code>freqdata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must have as many samples as specified with the <em class="parameter"><code>len</code></em> parameter while
+allocating the <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()"><code class="function">gst_fft_f32_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em>/2 + 1 <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex"><span class="type">GstFFTF32Complex</span></a> frequency
+domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Buffer of the samples in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the frequency domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f32-inverse-fft"></a><h3>gst_fft_f32_inverse_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f32_inverse_fft             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex" title="struct GstFFTF32Complex"><span class="type">GstFFTF32Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>);</pre>
+<p>
+This performs the inverse FFT on <em class="parameter"><code>freqdata</code></em> and puts the result in <em class="parameter"><code>timedata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must have <em class="parameter"><code>len</code></em>/2 + 1 samples, where <em class="parameter"><code>len</code></em> is the parameter specified
+while allocating the <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new" title="gst_fft_f32_new ()"><code class="function">gst_fft_f32_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em> time domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Buffer of the samples in the frequency domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the time domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f32-window"></a><h3>gst_fft_f32_window ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f32_window                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);</pre>
+<p>
+This calls the window function <em class="parameter"><code>window</code></em> on the <em class="parameter"><code>timedata</code></em> sample buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Time domain samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>window</code></em> :</span></p></td>
+<td>Window function to apply</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f32-free"></a><h3>gst_fft_f32_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f32_free                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> *self</code></em>);</pre>
+<p>
+This frees the memory allocated for <em class="parameter"><code>self</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="struct GstFFTF32"><span class="type">GstFFTF32</span></a> instance for this call</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfftf64.html b/docs/libs/html/gst-plugins-base-libs-gstfftf64.html
new file mode 100644
index 0000000..85ef842
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstfftf64.html
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstfftf64</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="prev" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">
+<link rel="next" href="gstreamer-interfaces.html" title="Interfaces Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstfftf32.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-ffft.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-interfaces.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstfftf64.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstfftf64.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstfftf64"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstfftf64.top_of_page"></a>gstfftf64</span></h2>
+<p>gstfftf64 — FFT functions for 64 bit float samples</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstfftf64.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/fft/gstfftf64.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64">GstFFTF64</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex">GstFFTF64Complex</a>;
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="returnvalue">GstFFTF64</span></a> *         <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()">gst_fft_f64_new</a>                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-fft" title="gst_fft_f64_fft ()">gst_fft_f64_fft</a>                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex"><span class="type">GstFFTF64Complex</span></a> *freqdata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-inverse-fft" title="gst_fft_f64_inverse_fft ()">gst_fft_f64_inverse_fft</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex"><span class="type">GstFFTF64Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-window" title="gst_fft_f64_window ()">gst_fft_f64_window</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-free" title="gst_fft_f64_free ()">gst_fft_f64_free</a>                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfftf64.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> provides a FFT implementation and related functions for
+64 bit float samples. To use this call <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()"><code class="function">gst_fft_f64_new()</code></a> for
+allocating a <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance with the appropiate parameters and
+then call <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-fft" title="gst_fft_f64_fft ()"><code class="function">gst_fft_f64_fft()</code></a> or <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-inverse-fft" title="gst_fft_f64_inverse_fft ()"><code class="function">gst_fft_f64_inverse_fft()</code></a> to perform the
+FFT or inverse FFT on a buffer of samples.
+</p>
+<p>
+After use free the <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-free" title="gst_fft_f64_free ()"><code class="function">gst_fft_f64_free()</code></a>.
+</p>
+<p>
+For the best performance use <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a> to get a
+number that is entirely a product of 2, 3 and 5 and use this as the
+<em class="parameter"><code>len</code></em> parameter for <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()"><code class="function">gst_fft_f64_new()</code></a>.
+</p>
+<p>
+The <em class="parameter"><code>len</code></em> parameter specifies the number of samples in the time domain that
+will be processed or generated. The number of samples in the frequency domain
+is <em class="parameter"><code>len</code></em>/2 + 1. To get n samples in the frequency domain use 2*n - 2 as <em class="parameter"><code>len</code></em>.
+</p>
+<p>
+Before performing the FFT on time domain data it usually makes sense
+to apply a window function to it. For this <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-window" title="gst_fft_f64_window ()"><code class="function">gst_fft_f64_window()</code></a> can comfortably
+be used.
+</p>
+<p>
+Be aware, that you can't simply run <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft" title="gst_fft_f32_inverse_fft ()"><code class="function">gst_fft_f32_inverse_fft()</code></a> on the
+resulting frequency data of <a class="link" href="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft" title="gst_fft_f32_fft ()"><code class="function">gst_fft_f32_fft()</code></a> to get the original data back.
+The relation between them is iFFT (FFT (x)) = x * nfft where nfft is the
+length of the FFT. This also has to be taken into account when calculation
+the magnitude of the frequency data.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstfftf64.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstFFTF64"></a><h3>struct GstFFTF64</h3>
+<pre class="programlisting">struct GstFFTF64 {
+};
+</pre>
+<p>
+Instance structure for <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstFFTF64Complex"></a><h3>struct GstFFTF64Complex</h3>
+<pre class="programlisting">struct GstFFTF64Complex {
+  gdouble r;
+  gdouble i;
+};
+</pre>
+<p>
+Data type for complex numbers composed of
+64 bit float.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> <em class="structfield"><code><a name="GstFFTF64Complex.r"></a>r</code></em>;</span></p></td>
+<td>Real part</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> <em class="structfield"><code><a name="GstFFTF64Complex.i"></a>i</code></em>;</span></p></td>
+<td>Imaginary part</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f64-new"></a><h3>gst_fft_f64_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="returnvalue">GstFFTF64</span></a> *         gst_fft_f64_new                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);</pre>
+<p>
+This returns a new <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance with the given parameters. It makes
+sense to keep one instance for several calls for speed reasons.
+</p>
+<p>
+<em class="parameter"><code>len</code></em> must be even and to get the best performance a product of
+2, 3 and 5. To get the next number with this characteristics use
+<a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the FFT in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inverse</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance should be used for the inverse FFT</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f64-fft"></a><h3>gst_fft_f64_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f64_fft                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex"><span class="type">GstFFTF64Complex</span></a> *freqdata</code></em>);</pre>
+<p>
+This performs the FFT on <em class="parameter"><code>timedata</code></em> and puts the result in <em class="parameter"><code>freqdata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must have as many samples as specified with the <em class="parameter"><code>len</code></em> parameter while
+allocating the <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()"><code class="function">gst_fft_f64_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em>/2 + 1 <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex"><span class="type">GstFFTF64Complex</span></a> frequency
+domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Buffer of the samples in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the frequency domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f64-inverse-fft"></a><h3>gst_fft_f64_inverse_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f64_inverse_fft             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex" title="struct GstFFTF64Complex"><span class="type">GstFFTF64Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>);</pre>
+<p>
+This performs the inverse FFT on <em class="parameter"><code>freqdata</code></em> and puts the result in <em class="parameter"><code>timedata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must have <em class="parameter"><code>len</code></em>/2 + 1 samples, where <em class="parameter"><code>len</code></em> is the parameter specified
+while allocating the <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new" title="gst_fft_f64_new ()"><code class="function">gst_fft_f64_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em> time domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Buffer of the samples in the frequency domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the time domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f64-window"></a><h3>gst_fft_f64_window ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f64_window                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);</pre>
+<p>
+This calls the window function <em class="parameter"><code>window</code></em> on the <em class="parameter"><code>timedata</code></em> sample buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Time domain samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>window</code></em> :</span></p></td>
+<td>Window function to apply</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-f64-free"></a><h3>gst_fft_f64_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_f64_free                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> *self</code></em>);</pre>
+<p>
+This frees the memory allocated for <em class="parameter"><code>self</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="struct GstFFTF64"><span class="type">GstFFTF64</span></a> instance for this call</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstffts16.html b/docs/libs/html/gst-plugins-base-libs-gstffts16.html
new file mode 100644
index 0000000..e8e2d46
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstffts16.html
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstffts16</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="prev" href="gst-plugins-base-libs-gstfft.html" title="gstfft">
+<link rel="next" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstfft.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-ffft.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstffts32.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstffts16.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstffts16.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstffts16"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstffts16.top_of_page"></a>gstffts16</span></h2>
+<p>gstffts16 — FFT functions for signed 16 bit integer samples</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstffts16.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/fft/gstffts16.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16">GstFFTS16</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex">GstFFTS16Complex</a>;
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="returnvalue">GstFFTS16</span></a> *         <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()">gst_fft_s16_new</a>                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft" title="gst_fft_s16_fft ()">gst_fft_s16_fft</a>                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex"><span class="type">GstFFTS16Complex</span></a> *freqdata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft" title="gst_fft_s16_inverse_fft ()">gst_fft_s16_inverse_fft</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex"><span class="type">GstFFTS16Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-window" title="gst_fft_s16_window ()">gst_fft_s16_window</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-free" title="gst_fft_s16_free ()">gst_fft_s16_free</a>                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstffts16.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> provides a FFT implementation and related functions for
+signed 16 bit integer samples. To use this call <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()"><code class="function">gst_fft_s16_new()</code></a> for
+allocating a <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance with the appropiate parameters and
+then call <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft" title="gst_fft_s16_fft ()"><code class="function">gst_fft_s16_fft()</code></a> or <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft" title="gst_fft_s16_inverse_fft ()"><code class="function">gst_fft_s16_inverse_fft()</code></a> to perform the
+FFT or inverse FFT on a buffer of samples.
+</p>
+<p>
+After use free the <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-free" title="gst_fft_s16_free ()"><code class="function">gst_fft_s16_free()</code></a>.
+</p>
+<p>
+For the best performance use <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a> to get a
+number that is entirely a product of 2, 3 and 5 and use this as the
+<em class="parameter"><code>len</code></em> parameter for <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()"><code class="function">gst_fft_s16_new()</code></a>.
+</p>
+<p>
+The <em class="parameter"><code>len</code></em> parameter specifies the number of samples in the time domain that
+will be processed or generated. The number of samples in the frequency domain
+is <em class="parameter"><code>len</code></em>/2 + 1. To get n samples in the frequency domain use 2*n - 2 as <em class="parameter"><code>len</code></em>.
+</p>
+<p>
+Before performing the FFT on time domain data it usually makes sense
+to apply a window function to it. For this <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-window" title="gst_fft_s16_window ()"><code class="function">gst_fft_s16_window()</code></a> can comfortably
+be used.
+</p>
+<p>
+Be aware, that you can't simply run <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft" title="gst_fft_s16_inverse_fft ()"><code class="function">gst_fft_s16_inverse_fft()</code></a> on the
+resulting frequency data of <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft" title="gst_fft_s16_fft ()"><code class="function">gst_fft_s16_fft()</code></a> to get the original data back.
+The relation between them is iFFT (FFT (x)) = x / nfft where nfft is the
+length of the FFT. This also has to be taken into account when calculation
+the magnitude of the frequency data.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstffts16.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstFFTS16"></a><h3>struct GstFFTS16</h3>
+<pre class="programlisting">struct GstFFTS16 {
+};
+</pre>
+<p>
+Instance structure for <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstFFTS16Complex"></a><h3>struct GstFFTS16Complex</h3>
+<pre class="programlisting">struct GstFFTS16Complex {
+  gint16 r;
+  gint16 i;
+};
+</pre>
+<p>
+Data type for complex numbers composed of
+signed 16 bit integers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> <em class="structfield"><code><a name="GstFFTS16Complex.r"></a>r</code></em>;</span></p></td>
+<td>Real part</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> <em class="structfield"><code><a name="GstFFTS16Complex.i"></a>i</code></em>;</span></p></td>
+<td>Imaginary part</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s16-new"></a><h3>gst_fft_s16_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="returnvalue">GstFFTS16</span></a> *         gst_fft_s16_new                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);</pre>
+<p>
+This returns a new <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance with the given parameters. It makes
+sense to keep one instance for several calls for speed reasons.
+</p>
+<p>
+<em class="parameter"><code>len</code></em> must be even and to get the best performance a product of
+2, 3 and 5. To get the next number with this characteristics use
+<a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the FFT in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inverse</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance should be used for the inverse FFT</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s16-fft"></a><h3>gst_fft_s16_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s16_fft                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex"><span class="type">GstFFTS16Complex</span></a> *freqdata</code></em>);</pre>
+<p>
+This performs the FFT on <em class="parameter"><code>timedata</code></em> and puts the result in <em class="parameter"><code>freqdata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must have as many samples as specified with the <em class="parameter"><code>len</code></em> parameter while
+allocating the <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()"><code class="function">gst_fft_s16_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em>/2 + 1 <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex"><span class="type">GstFFTS16Complex</span></a> frequency
+domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Buffer of the samples in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the frequency domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s16-inverse-fft"></a><h3>gst_fft_s16_inverse_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s16_inverse_fft             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex" title="struct GstFFTS16Complex"><span class="type">GstFFTS16Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>);</pre>
+<p>
+This performs the inverse FFT on <em class="parameter"><code>freqdata</code></em> and puts the result in <em class="parameter"><code>timedata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must have <em class="parameter"><code>len</code></em>/2 + 1 samples, where <em class="parameter"><code>len</code></em> is the parameter specified
+while allocating the <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new" title="gst_fft_s16_new ()"><code class="function">gst_fft_s16_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em> time domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Buffer of the samples in the frequency domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the time domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s16-window"></a><h3>gst_fft_s16_window ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s16_window                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);</pre>
+<p>
+This calls the window function <em class="parameter"><code>window</code></em> on the <em class="parameter"><code>timedata</code></em> sample buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Time domain samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>window</code></em> :</span></p></td>
+<td>Window function to apply</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s16-free"></a><h3>gst_fft_s16_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s16_free                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> *self</code></em>);</pre>
+<p>
+This frees the memory allocated for <em class="parameter"><code>self</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="struct GstFFTS16"><span class="type">GstFFTS16</span></a> instance for this call</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstffts32.html b/docs/libs/html/gst-plugins-base-libs-gstffts32.html
new file mode 100644
index 0000000..0da33e9
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstffts32.html
@@ -0,0 +1,285 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstffts32</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-ffft.html" title="FFT Library">
+<link rel="prev" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">
+<link rel="next" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstffts16.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-ffft.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstfftf32.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstffts32.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstffts32.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstffts32"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstffts32.top_of_page"></a>gstffts32</span></h2>
+<p>gstffts32 — FFT functions for signed 32 bit integer samples</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstffts32.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/fft/gstffts32.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32">GstFFTS32</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex">GstFFTS32Complex</a>;
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="returnvalue">GstFFTS32</span></a> *         <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()">gst_fft_s32_new</a>                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft" title="gst_fft_s32_fft ()">gst_fft_s32_fft</a>                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex"><span class="type">GstFFTS32Complex</span></a> *freqdata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft" title="gst_fft_s32_inverse_fft ()">gst_fft_s32_inverse_fft</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex"><span class="type">GstFFTS32Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-window" title="gst_fft_s32_window ()">gst_fft_s32_window</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-free" title="gst_fft_s32_free ()">gst_fft_s32_free</a>                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstffts32.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> provides a FFT implementation and related functions for
+signed 32 bit integer samples. To use this call <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()"><code class="function">gst_fft_s32_new()</code></a> for
+allocating a <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance with the appropiate parameters and
+then call <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft" title="gst_fft_s32_fft ()"><code class="function">gst_fft_s32_fft()</code></a> or <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft" title="gst_fft_s32_inverse_fft ()"><code class="function">gst_fft_s32_inverse_fft()</code></a> to perform the
+FFT or inverse FFT on a buffer of samples.
+</p>
+<p>
+After use free the <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-free" title="gst_fft_s32_free ()"><code class="function">gst_fft_s32_free()</code></a>.
+</p>
+<p>
+For the best performance use <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a> to get a
+number that is entirely a product of 2, 3 and 5 and use this as the
+<em class="parameter"><code>len</code></em> parameter for <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()"><code class="function">gst_fft_s32_new()</code></a>.
+</p>
+<p>
+The <em class="parameter"><code>len</code></em> parameter specifies the number of samples in the time domain that
+will be processed or generated. The number of samples in the frequency domain
+is <em class="parameter"><code>len</code></em>/2 + 1. To get n samples in the frequency domain use 2*n - 2 as <em class="parameter"><code>len</code></em>.
+</p>
+<p>
+Before performing the FFT on time domain data it usually makes sense
+to apply a window function to it. For this <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-window" title="gst_fft_s32_window ()"><code class="function">gst_fft_s32_window()</code></a> can comfortably
+be used.
+</p>
+<p>
+Be aware, that you can't simply run <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft" title="gst_fft_s32_inverse_fft ()"><code class="function">gst_fft_s32_inverse_fft()</code></a> on the
+resulting frequency data of <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft" title="gst_fft_s32_fft ()"><code class="function">gst_fft_s32_fft()</code></a> to get the original data back.
+The relation between them is iFFT (FFT (x)) = x / nfft where nfft is the
+length of the FFT. This also has to be taken into account when calculation
+the magnitude of the frequency data.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstffts32.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstFFTS32"></a><h3>struct GstFFTS32</h3>
+<pre class="programlisting">struct GstFFTS32 {
+};
+</pre>
+<p>
+Instance structure for <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstFFTS32Complex"></a><h3>struct GstFFTS32Complex</h3>
+<pre class="programlisting">struct GstFFTS32Complex {
+  gint32 r;
+  gint32 i;
+};
+</pre>
+<p>
+Data type for complex numbers composed of
+signed 32 bit integers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> <em class="structfield"><code><a name="GstFFTS32Complex.r"></a>r</code></em>;</span></p></td>
+<td>Real part</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> <em class="structfield"><code><a name="GstFFTS32Complex.i"></a>i</code></em>;</span></p></td>
+<td>Imaginary part</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s32-new"></a><h3>gst_fft_s32_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="returnvalue">GstFFTS32</span></a> *         gst_fft_s32_new                     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> inverse</code></em>);</pre>
+<p>
+This returns a new <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance with the given parameters. It makes
+sense to keep one instance for several calls for speed reasons.
+</p>
+<p>
+<em class="parameter"><code>len</code></em> must be even and to get the best performance a product of
+2, 3 and 5. To get the next number with this characteristics use
+<a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the FFT in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inverse</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance should be used for the inverse FFT</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s32-fft"></a><h3>gst_fft_s32_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s32_fft                     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex"><span class="type">GstFFTS32Complex</span></a> *freqdata</code></em>);</pre>
+<p>
+This performs the FFT on <em class="parameter"><code>timedata</code></em> and puts the result in <em class="parameter"><code>freqdata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must have as many samples as specified with the <em class="parameter"><code>len</code></em> parameter while
+allocating the <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()"><code class="function">gst_fft_s32_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em>/2 + 1 <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex"><span class="type">GstFFTS32Complex</span></a> frequency
+domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Buffer of the samples in the time domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the frequency domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s32-inverse-fft"></a><h3>gst_fft_s32_inverse_fft ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s32_inverse_fft             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex" title="struct GstFFTS32Complex"><span class="type">GstFFTS32Complex</span></a> *freqdata</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>);</pre>
+<p>
+This performs the inverse FFT on <em class="parameter"><code>freqdata</code></em> and puts the result in <em class="parameter"><code>timedata</code></em>.
+</p>
+<p>
+<em class="parameter"><code>freqdata</code></em> must have <em class="parameter"><code>len</code></em>/2 + 1 samples, where <em class="parameter"><code>len</code></em> is the parameter specified
+while allocating the <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance with <a class="link" href="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new" title="gst_fft_s32_new ()"><code class="function">gst_fft_s32_new()</code></a>.
+</p>
+<p>
+<em class="parameter"><code>timedata</code></em> must be large enough to hold <em class="parameter"><code>len</code></em> time domain samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>freqdata</code></em> :</span></p></td>
+<td>Buffer of the samples in the frequency domain</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Target buffer for the samples in the time domain</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s32-window"></a><h3>gst_fft_s32_window ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s32_window                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *timedata</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstfft.html#GstFFTWindow" title="enum GstFFTWindow"><span class="type">GstFFTWindow</span></a> window</code></em>);</pre>
+<p>
+This calls the window function <em class="parameter"><code>window</code></em> on the <em class="parameter"><code>timedata</code></em> sample buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance for this call</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timedata</code></em> :</span></p></td>
+<td>Time domain samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>window</code></em> :</span></p></td>
+<td>Window function to apply</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fft-s32-free"></a><h3>gst_fft_s32_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_fft_s32_free                    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> *self</code></em>);</pre>
+<p>
+This frees the memory allocated for <em class="parameter"><code>self</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="struct GstFFTS32"><span class="type">GstFFTS32</span></a> instance for this call</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstmixer.html b/docs/libs/html/gst-plugins-base-libs-gstmixer.html
new file mode 100644
index 0000000..a14a685
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstmixer.html
@@ -0,0 +1,963 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstmixer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">
+<link rel="next" href="gst-plugins-base-libs-gstmixeroptions.html" title="gstmixeroptions">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstcolorbalancechannel.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstmixeroptions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstmixer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixer.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixer.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixer.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstmixer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstmixer.top_of_page"></a>gstmixer</span></h2>
+<p>gstmixer — Interface for elements that provide mixer operations</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstmixer.synopsis"></a><h2>Synopsis</h2>
+<a name="GstMixer"></a><pre class="synopsis">
+#include &lt;gst/interfaces/mixer.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-struct" title="GstMixer">GstMixer</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType">GstMixerType</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerFlags" title="enum GstMixerFlags">GstMixerFlags</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerMessageType" title="enum GstMixerMessageType">GstMixerMessageType</a>;
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-list-tracks" title="gst_mixer_list_tracks ()">gst_mixer_list_tracks</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-volume" title="gst_mixer_get_volume ()">gst_mixer_get_volume</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-volume" title="gst_mixer_set_volume ()">gst_mixer_set_volume</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-mute" title="gst_mixer_set_mute ()">gst_mixer_set_mute</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-record" title="gst_mixer_set_record ()">gst_mixer_set_record</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> record</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-option" title="gst_mixer_set_option ()">gst_mixer_set_option</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-mute-toggled" title="gst_mixer_mute_toggled ()">gst_mixer_mute_toggled</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-record-toggled" title="gst_mixer_record_toggled ()">gst_mixer_record_toggled</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> record</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-volume-changed" title="gst_mixer_volume_changed ()">gst_mixer_volume_changed</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-option-changed" title="gst_mixer_option_changed ()">gst_mixer_option_changed</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-options-list-changed" title="gst_mixer_options_list_changed ()">gst_mixer_options_list_changed</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-option" title="gst_mixer_get_option ()">gst_mixer_get_option</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-mixer-changed" title="gst_mixer_mixer_changed ()">gst_mixer_mixer_changed</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerFlags" title="enum GstMixerFlags"><span class="returnvalue">GstMixerFlags</span></a>       <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-flags" title="gst_mixer_get_mixer_flags ()">gst_mixer_get_mixer_flags</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType"><span class="returnvalue">GstMixerType</span></a>        <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-type" title="gst_mixer_get_mixer_type ()">gst_mixer_get_mixer_type</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerMessageType" title="enum GstMixerMessageType"><span class="returnvalue">GstMixerMessageType</span></a> <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-get-type" title="gst_mixer_message_get_type ()">gst_mixer_message_get_type</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-mute-toggled" title="gst_mixer_message_parse_mute_toggled ()">gst_mixer_message_parse_mute_toggled</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *mute</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-option-changed" title="gst_mixer_message_parse_option_changed ()">gst_mixer_message_parse_option_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> **options</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-record-toggled" title="gst_mixer_message_parse_record_toggled ()">gst_mixer_message_parse_record_toggled</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *record</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-volume-changed" title="gst_mixer_message_parse_volume_changed ()">gst_mixer_message_parse_volume_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> **volumes</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *num_channels</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-options-list-changed" title="gst_mixer_message_parse_options_list_changed ()">gst_mixer_message_parse_options_list_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> **options</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstMixer
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-mute-toggled" title='The "mute-toggled" signal'>mute-toggled</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-option-changed" title='The "option-changed" signal'>option-changed</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-record-toggled" title='The "record-toggled" signal'>record-toggled</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer-volume-changed" title='The "volume-changed" signal'>volume-changed</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.description"></a><h2>Description</h2>
+<p>
+Basic interface for hardware mixer controls.
+</p>
+<p>
+Applications rarely need to use this interface, it is provided mainly
+for system-level mixer applets and the like. Volume control in playback
+applications should be done using a <code class="classname">volume</code>
+element or, if available, using the <span class="quote">“<span class="quote">volume</span>”</span> property of
+the audio sink element used (as provided by <code class="classname">pulsesink</code>
+for example), or even better: just use the <code class="classname">playbin2</code>
+element's <span class="quote">“<span class="quote">volume</span>”</span> property.
+</p>
+<p>
+Usage: In order to use the <code class="classname">GstMixer</code> interface, the
+element needs to be at least in READY state (so that the element has opened
+the mixer device). Once the element has been set to READY state or higher,
+it can be cast to a <code class="classname">GstMixer</code> using the GST_MIXER
+macro (in C) and the mixer API can be used.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstMixer-struct"></a><h3>GstMixer</h3>
+<pre class="programlisting">typedef struct _GstMixer GstMixer;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerType"></a><h3>enum GstMixerType</h3>
+<pre class="programlisting">typedef enum {
+  GST_MIXER_HARDWARE,
+  GST_MIXER_SOFTWARE
+} GstMixerType;
+</pre>
+<p>
+Mixer classification.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-MIXER-HARDWARE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_HARDWARE</code></span></p></td>
+<td>mixing is implemented with dedicated hardware.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-SOFTWARE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_SOFTWARE</code></span></p></td>
+<td>mixing is implemented via software processing.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerFlags"></a><h3>enum GstMixerFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_MIXER_FLAG_NONE                = 0,
+  GST_MIXER_FLAG_AUTO_NOTIFICATIONS  = (1&lt;&lt;0),
+  GST_MIXER_FLAG_HAS_WHITELIST       = (1&lt;&lt;1),
+  GST_MIXER_FLAG_GROUPING            = (1&lt;&lt;2),
+} GstMixerFlags;
+</pre>
+<p>
+Flags indicating which optional features are supported by a mixer
+implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-MIXER-FLAG-NONE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_FLAG_NONE</code></span></p></td>
+<td>No flags
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-FLAG-AUTO-NOTIFICATIONS:CAPS"></a><span class="term"><code class="literal">GST_MIXER_FLAG_AUTO_NOTIFICATIONS</code></span></p></td>
+<td>The mixer implementation automatically
+   sends notification messages.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-FLAG-HAS-WHITELIST:CAPS"></a><span class="term"><code class="literal">GST_MIXER_FLAG_HAS_WHITELIST</code></span></p></td>
+<td>The mixer implementation flags tracks that
+   should be displayed by default (whitelisted). Since: 0.10.23
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-FLAG-GROUPING:CAPS"></a><span class="term"><code class="literal">GST_MIXER_FLAG_GROUPING</code></span></p></td>
+<td>The mixer implementation will leave some controls
+   marked without either input or output.  Controls marked as input or
+   output should be grouped with input &amp; output sliders, even if they
+   are options or bare switches. Since: 0.10.23
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerMessageType"></a><h3>enum GstMixerMessageType</h3>
+<pre class="programlisting">typedef enum {
+  GST_MIXER_MESSAGE_INVALID,
+  GST_MIXER_MESSAGE_MUTE_TOGGLED,
+  GST_MIXER_MESSAGE_RECORD_TOGGLED,
+  GST_MIXER_MESSAGE_VOLUME_CHANGED,
+  GST_MIXER_MESSAGE_OPTION_CHANGED,
+  GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED,
+  GST_MIXER_MESSAGE_MIXER_CHANGED
+} GstMixerMessageType;
+</pre>
+<p>
+An enumeration for the type of a GstMixer message received on the bus
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_INVALID</code></span></p></td>
+<td>Not a GstMixer message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-MUTE-TOGGLED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_MUTE_TOGGLED</code></span></p></td>
+<td>A mute-toggled GstMixer message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-RECORD-TOGGLED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_RECORD_TOGGLED</code></span></p></td>
+<td>A record-toggled GstMixer message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-VOLUME-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_VOLUME_CHANGED</code></span></p></td>
+<td>A volume-changed GstMixer message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-OPTION-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_OPTION_CHANGED</code></span></p></td>
+<td>An option-changed GstMixer message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-OPTIONS-LIST-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED</code></span></p></td>
+<td>An options-list-changed
+    GstMixer message, posted when the list of available options for a
+    GstMixerOptions object has changed (Since: 0.10.18)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-MESSAGE-MIXER-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_MIXER_MESSAGE_MIXER_CHANGED</code></span></p></td>
+<td>A mixer-changed GstMixer message, posted
+    when the list of available mixer tracks has changed. The application
+    should re-build its interface in this case (Since: 0.10.18)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-list-tracks"></a><h3>gst_mixer_list_tracks ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_mixer_list_tracks               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);</pre>
+<p>
+Returns a list of available tracks for this mixer/element. Note
+that it is allowed for sink (output) elements to only provide
+the output tracks in this list. Likewise, for sources (inputs),
+it is allowed to only provide input elements in this list.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to get the tracks from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> consisting of zero or more <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTracks</span></a>.
+The list is owned by the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> instance and must not be freed
+or modified.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-get-volume"></a><h3>gst_mixer_get_volume ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_get_volume                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);</pre>
+<p>
+Get the current volume(s) on the given track.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the GstMixerTrack to get the volume from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volumes</code></em> :</span></p></td>
+<td>a pre-allocated array of integers (of size
+track-&gt;num_channels) to store the current volume
+of each channel in the given track in.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-set-volume"></a><h3>gst_mixer_set_volume ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_set_volume                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);</pre>
+<p>
+Sets the volume on each channel in a track. Short note about
+naming: a track is defined as one separate stream owned by
+the mixer/element, such as 'Line-in' or 'Microphone'. A
+channel is said to be a mono-stream inside this track. A
+stereo track thus contains two channels.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> to set the volume on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volumes</code></em> :</span></p></td>
+<td>an array of integers (of size track-&gt;num_channels)
+that gives the wanted volume for each channel in
+this track.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-set-mute"></a><h3>gst_mixer_set_mute ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_set_mute                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);</pre>
+<p>
+Mutes or unmutes the given channel. To find out whether a
+track is currently muted, use <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS" title="GST_MIXER_TRACK_HAS_FLAG()"><code class="function">GST_MIXER_TRACK_HAS_FLAG()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> to operate on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mute</code></em> :</span></p></td>
+<td>a boolean value indicating whether to turn on or off
+muting.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-set-record"></a><h3>gst_mixer_set_record ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_set_record                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> record</code></em>);</pre>
+<p>
+Enables or disables recording on the given track. Note that
+this is only possible on input tracks, not on output tracks
+(see <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS" title="GST_MIXER_TRACK_HAS_FLAG()"><code class="function">GST_MIXER_TRACK_HAS_FLAG()</code></a> and the GST_MIXER_TRACK_INPUT
+flag).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> to operate on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>record</code></em> :</span></p></td>
+<td>a boolean value that indicates whether to turn on
+or off recording.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-set-option"></a><h3>gst_mixer_set_option ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_set_option                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Sets a name/value option in the mixer to the requested value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the optionlist.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>opts</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> that we operate on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>The requested new option value.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-mute-toggled"></a><h3>gst_mixer_mute_toggled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_mute_toggled              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the given track
+has changed mute state.
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the GstMixerTrack that has change mute state.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mute</code></em> :</span></p></td>
+<td>the new state of the mute flag on the track</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-record-toggled"></a><h3>gst_mixer_record_toggled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_record_toggled            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> record</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the given track
+has changed recording state.
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the GstMixerTrack that has changed recording state.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>record</code></em> :</span></p></td>
+<td>the new state of the record flag on the track</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-volume-changed"></a><h3>gst_mixer_volume_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_volume_changed            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *volumes</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the volume(s) for the
+given track have changed.
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the track</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>the GstMixerTrack that has changed.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volumes</code></em> :</span></p></td>
+<td>Array of volume values, one per channel on the mixer track.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-option-changed"></a><h3>gst_mixer_option_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_option_changed            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the given options
+object has changed state. 
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the options</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>opts</code></em> :</span></p></td>
+<td>the GstMixerOptions that has changed value.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the new value of the GstMixerOptions.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-options-list-changed"></a><h3>gst_mixer_options_list_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_options_list_changed      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the list of possible
+options of a given options object has changed.
+</p>
+<p>
+The new options are not contained in the message on purpose. Applications
+should call <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values" title="gst_mixer_options_get_values ()"><code class="function">gst_mixer_options_get_values()</code></a> on <em class="parameter"><code>opts</code></em> to make <em class="parameter"><code>opts</code></em> update
+its internal state and obtain the new list of values.
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus
+for this to work.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the options</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>opts</code></em> :</span></p></td>
+<td>the GstMixerOptions whose list of values has changed</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-get-option"></a><h3>gst_mixer_get_option ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_mixer_get_option                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *opts</code></em>);</pre>
+<p>
+Get the current value of a name/value option in the mixer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the optionlist.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>opts</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> that we operate on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>current value of the name/value option.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-mixer-changed"></a><h3>gst_mixer_mixer_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_mixer_changed             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);</pre>
+<p>
+This function is called by the mixer implementation to produce
+a notification message on the bus indicating that the list of available
+mixer tracks for a given mixer object has changed. Applications should
+rebuild their interface when they receive this message.
+</p>
+<p>
+This function only works for GstElements that are implementing the
+GstMixer interface, and the element needs to have been provided a bus.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) which has changed</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-get-mixer-flags"></a><h3>gst_mixer_get_mixer_flags ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerFlags" title="enum GstMixerFlags"><span class="returnvalue">GstMixerFlags</span></a>       gst_mixer_get_mixer_flags           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);</pre>
+<p>
+Get the set of supported flags for this mixer implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> implementation</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A set of or-ed GstMixerFlags for supported features.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-get-mixer-type"></a><h3>gst_mixer_get_mixer_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType"><span class="returnvalue">GstMixerType</span></a>        gst_mixer_get_mixer_type            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> *mixer</code></em>);</pre>
+<p>
+Get the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType"><span class="type">GstMixerType</span></a> of this mixer implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a> implementation</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A the <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerType" title="enum GstMixerType"><span class="type">GstMixerType</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.24</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-get-type"></a><h3>gst_mixer_message_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixerMessageType" title="enum GstMixerMessageType"><span class="returnvalue">GstMixerMessageType</span></a> gst_mixer_message_get_type          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
+<p>
+Check a bus message to see if it is a GstMixer notification
+message and return the GstMixerMessageType identifying which
+type of notification it is.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A GstMessage to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The type of the GstMixerMessage, or GST_MIXER_MESSAGE_INVALID
+if the message is not a GstMixer notification.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-parse-mute-toggled"></a><h3>gst_mixer_message_parse_mute_toggled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_message_parse_mute_toggled
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *mute</code></em>);</pre>
+<p>
+Extracts the contents of a mute-toggled bus message. Reads
+the GstMixerTrack that has changed, and the new value of the mute
+flag.
+</p>
+<p>
+The GstMixerTrack remains valid until the message is freed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A mute-toggled change notification message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>Pointer to hold a GstMixerTrack object, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mute</code></em> :</span></p></td>
+<td>A pointer to a gboolean variable, or NULL.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-parse-option-changed"></a><h3>gst_mixer_message_parse_option_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_message_parse_option_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> **options</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>);</pre>
+<p>
+Extracts the GstMixerOptions and new value from a option-changed bus notification
+message.
+</p>
+<p>
+The options and value returned remain valid until the message is freed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A volume-changed change notification message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>options</code></em> :</span></p></td>
+<td>Pointer to hold a GstMixerOptions object, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>Result location to receive the new options value, or NULL.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-parse-record-toggled"></a><h3>gst_mixer_message_parse_record_toggled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_message_parse_record_toggled
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *record</code></em>);</pre>
+<p>
+Extracts the contents of a record-toggled bus message. Reads
+the GstMixerTrack that has changed, and the new value of the 
+recording flag.
+</p>
+<p>
+The GstMixerTrack remains valid until the message is freed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A record-toggled change notification message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>Pointer to hold a GstMixerTrack object, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>record</code></em> :</span></p></td>
+<td>A pointer to a gboolean variable, or NULL.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-parse-volume-changed"></a><h3>gst_mixer_message_parse_volume_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_message_parse_volume_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> **track</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> **volumes</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *num_channels</code></em>);</pre>
+<p>
+Parses a volume-changed notification message and extracts the track object
+it refers to, as well as an array of volumes and the size of the volumes array.
+</p>
+<p>
+The track object remains valid until the message is freed.
+</p>
+<p>
+The caller must free the array returned in the volumes parameter using g_free
+when they are done with it.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A volume-changed change notification message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>track</code></em> :</span></p></td>
+<td>Pointer to hold a GstMixerTrack object, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volumes</code></em> :</span></p></td>
+<td>A pointer to receive an array of gint values, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_channels</code></em> :</span></p></td>
+<td>Result location to receive the number of channels, or NULL.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.14</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-message-parse-options-list-changed"></a><h3>gst_mixer_message_parse_options_list_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_mixer_message_parse_options_list_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> **options</code></em>);</pre>
+<p>
+Extracts the GstMixerOptions whose value list has changed from an
+options-list-changed bus notification message.
+</p>
+<p>
+The options object returned remains valid until the message is freed. You
+do not need to unref it.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A volume-changed change notification message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>options</code></em> :</span></p></td>
+<td>Pointer to hold a GstMixerOptions object, or NULL.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstMixer-mute-toggled"></a><h3>The <code class="literal">"mute-toggled"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a>      *gstmixer,
+                                                        <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>       arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixer-option-changed"></a><h3>The <code class="literal">"option-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a>        *gstmixer,
+                                                        <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>           *arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixer-record-toggled"></a><h3>The <code class="literal">"record-toggled"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a>      *gstmixer,
+                                                        <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>       arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixer-volume-changed"></a><h3>The <code class="literal">"volume-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer"><span class="type">GstMixer</span></a>      *gstmixer,
+                                                        <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack"><span class="type">GstMixerTrack</span></a> *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>       user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixer.see-also"></a><h2>See Also</h2>
+alsamixer, oss4mixer, sunaudiomixer
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstmixeroptions.html b/docs/libs/html/gst-plugins-base-libs-gstmixeroptions.html
new file mode 100644
index 0000000..8180f78
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstmixeroptions.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstmixeroptions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstmixer.html" title="gstmixer">
+<link rel="next" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstmixer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstmixertrack.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstmixeroptions.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixeroptions.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixeroptions.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstmixeroptions"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstmixeroptions.top_of_page"></a>gstmixeroptions</span></h2>
+<p>gstmixeroptions — Multi-option mixer control</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstmixeroptions.synopsis"></a><h2>Synopsis</h2>
+<a name="GstMixerOptions"></a><pre class="synopsis">
+#include &lt;gst/interfaces/mixer.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions-struct" title="struct GstMixerOptions">GstMixerOptions</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values" title="gst_mixer_options_get_values ()">gst_mixer_options_get_values</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *mixer_options</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixeroptions.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack">GstMixerTrack</a>
+         +----GstMixerOptions
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixeroptions.description"></a><h2>Description</h2>
+<p>
+Mixer control object that allows switching between multiple options.
+Note that <code class="classname">GstMixerOptions</code> is a subclass of
+<code class="classname">GstMixerTrack</code>.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixeroptions.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstMixerOptions-struct"></a><h3>struct GstMixerOptions</h3>
+<pre class="programlisting">struct GstMixerOptions {
+  /* list of strings (do not access directly) (FIXME 0.11: make private) */
+  GList        *values;
+};
+</pre>
+<p>
+Mixer control object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *<em class="structfield"><code><a name="GstMixerOptions-struct.values"></a>values</code></em>;</span></p></td>
+<td>List of option strings. Do not access this member directly,
+always use <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values" title="gst_mixer_options_get_values ()"><code class="function">gst_mixer_options_get_values()</code></a> instead.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mixer-options-get-values"></a><h3>gst_mixer_options_get_values ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_mixer_options_get_values        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> *mixer_options</code></em>);</pre>
+<p>
+Get the values for the mixer option.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mixer_options</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions"><span class="type">GstMixerOptions</span></a> item that owns the values.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of strings with all the possible values for the mixer
+option. You must not free or modify the list or its contents, it belongs
+to the <em class="parameter"><code>mixer_options</code></em> object.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixeroptions.see-also"></a><h2>See Also</h2>
+GstMixer, GstMixerTrack
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstmixertrack.html b/docs/libs/html/gst-plugins-base-libs-gstmixertrack.html
new file mode 100644
index 0000000..3751f3d
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstmixertrack.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstmixertrack</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstmixeroptions.html" title="gstmixeroptions">
+<link rel="next" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstmixeroptions.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstnavigation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstmixertrack.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixertrack.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixertrack.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmixertrack.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstmixertrack"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstmixertrack.top_of_page"></a>gstmixertrack</span></h2>
+<p>gstmixertrack — Basic mixer control object (volume slider, switch)</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstmixertrack.synopsis"></a><h2>Synopsis</h2>
+<a name="GstMixerTrack"></a><pre class="synopsis">
+#include &lt;gst/interfaces/mixer.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack-struct" title="struct GstMixerTrack">GstMixerTrack</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrackFlags" title="enum GstMixerTrackFlags">GstMixerTrackFlags</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS" title="GST_MIXER_TRACK_HAS_FLAG()">GST_MIXER_TRACK_HAS_FLAG</a>            (channel,
+                                                         flag)
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstMixerTrack
+         +----<a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions">GstMixerOptions</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--flags" title='The "flags" property'>flags</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--index" title='The "index" property'>index</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write / Construct Only
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--label" title='The "label" property'>label</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--max-volume" title='The "max-volume" property'>max-volume</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--min-volume" title='The "min-volume" property'>min-volume</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--num-channels" title='The "num-channels" property'>num-channels</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read
+  "<a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--untranslated-label" title='The "untranslated-label" property'>untranslated-label</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct Only
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.description"></a><h2>Description</h2>
+<p>
+Basic mixer control object (note that it is a GObject and not a GstObject).
+</p>
+<p>
+A mixer track represents a single slider control of none, one or more
+channels. A mixer track with no channels is usually interpreted as a
+on/off switch control.
+</p>
+<p>
+Note the presence of both min_volume and max_volume fields. Applications
+must not assume that min_volume is 0 or max_volume is any particular
+value.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstMixerTrack-struct"></a><h3>struct GstMixerTrack</h3>
+<pre class="programlisting">struct GstMixerTrack;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrackFlags"></a><h3>enum GstMixerTrackFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_MIXER_TRACK_INPUT  = (1&lt;&lt;0),
+  GST_MIXER_TRACK_OUTPUT = (1&lt;&lt;1),
+  GST_MIXER_TRACK_MUTE   = (1&lt;&lt;2),
+  GST_MIXER_TRACK_RECORD = (1&lt;&lt;3),
+  GST_MIXER_TRACK_MASTER = (1&lt;&lt;4),
+  GST_MIXER_TRACK_SOFTWARE = (1&lt;&lt;5),
+  GST_MIXER_TRACK_NO_RECORD = (1&lt;&lt;6),
+  GST_MIXER_TRACK_NO_MUTE = (1&lt;&lt;7),
+  GST_MIXER_TRACK_WHITELIST = (1&lt;&lt;8),
+  GST_MIXER_TRACK_READONLY = (1&lt;&lt;9),
+  GST_MIXER_TRACK_WRITEONLY = (1&lt;&lt;10)
+} GstMixerTrackFlags;
+</pre>
+<p>
+Mixer track flags.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-INPUT:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_INPUT</code></span></p></td>
+<td>mixer track is for input
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-OUTPUT:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_OUTPUT</code></span></p></td>
+<td>mixer track is for output
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-MUTE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_MUTE</code></span></p></td>
+<td>input or output is muted
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-RECORD:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_RECORD</code></span></p></td>
+<td>input is audible in speakers attached to output
+    (for <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-INPUT:CAPS"><span class="type">GST_MIXER_TRACK_INPUT</span></a> mixer tracks only)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-MASTER:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_MASTER</code></span></p></td>
+<td>this mixer track is likely to be the master control
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-SOFTWARE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_SOFTWARE</code></span></p></td>
+<td>mixer track's' volume control is implemented
+    in software (as opposed to a hardware control)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-NO-RECORD:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_NO_RECORD</code></span></p></td>
+<td>input track lacks support for recordable.
+    Since: 0.10.23
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-NO-MUTE:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_NO_MUTE</code></span></p></td>
+<td>play track doesn't support mute. Since: 0.10.23
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-WHITELIST:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_WHITELIST</code></span></p></td>
+<td>track should be displayed "by default" in apps.
+    Since: 0.10.23
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-READONLY:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_READONLY</code></span></p></td>
+<td>track is read-only. Since: 0.10.25
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-MIXER-TRACK-WRITEONLY:CAPS"></a><span class="term"><code class="literal">GST_MIXER_TRACK_WRITEONLY</code></span></p></td>
+<td>track is write-only. Since: 0.10.25
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-MIXER-TRACK-HAS-FLAG:CAPS"></a><h3>GST_MIXER_TRACK_HAS_FLAG()</h3>
+<pre class="programlisting">#define             GST_MIXER_TRACK_HAS_FLAG(channel, flag)</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstMixerTrack--flags"></a><h3>The <code class="literal">"flags"</code> property</h3>
+<pre class="programlisting">  "flags"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read</pre>
+<p>Flags indicating the type of mixer track.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--index"></a><h3>The <code class="literal">"index"</code> property</h3>
+<pre class="programlisting">  "index"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write / Construct Only</pre>
+<p>
+Index of the mixer track, if available. Mixer track implementations
+must set this at construct time. This can be used to discern between
+multiple tracks with identical labels.
+</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.10.21</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--label"></a><h3>The <code class="literal">"label"</code> property</h3>
+<pre class="programlisting">  "label"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>The label assigned to the track (may be translated).</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--max-volume"></a><h3>The <code class="literal">"max-volume"</code> property</h3>
+<pre class="programlisting">  "max-volume"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read</pre>
+<p>The maximum possible volume level.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--min-volume"></a><h3>The <code class="literal">"min-volume"</code> property</h3>
+<pre class="programlisting">  "min-volume"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read</pre>
+<p>The minimum possible volume level.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--num-channels"></a><h3>The <code class="literal">"num-channels"</code> property</h3>
+<pre class="programlisting">  "num-channels"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read</pre>
+<p>The number of channels contained within the track.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMixerTrack--untranslated-label"></a><h3>The <code class="literal">"untranslated-label"</code> property</h3>
+<pre class="programlisting">  "untranslated-label"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct Only</pre>
+<p>
+The untranslated label of the mixer track, if available. Mixer track
+implementations must set this at construct time. Applications may find
+this useful to determine icons for various kind of tracks. However,
+applications mustn't make any assumptions about the naming of tracks,
+the untranslated labels are purely informational and may change.
+</p>
+<p>Default value: NULL</p>
+<p class="since">Since 0.10.13</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmixertrack.see-also"></a><h2>See Also</h2>
+GstMixer, GstMixerOptions
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstmultichannel.html b/docs/libs/html/gst-plugins-base-libs-gstmultichannel.html
new file mode 100644
index 0000000..fcb4c1b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstmultichannel.html
@@ -0,0 +1,438 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstmultichannel</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstbaseaudiosrc.html" title="gstbaseaudiosrc">
+<link rel="next" href="gst-plugins-base-libs-gstringbuffer.html" title="gstringbuffer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstbaseaudiosrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstringbuffer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstmultichannel.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstmultichannel.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstmultichannel"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstmultichannel.top_of_page"></a>gstmultichannel</span></h2>
+<p>gstmultichannel — Support for multichannel audio elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstmultichannel.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/audio/multichannel.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition">GstAudioChannelPosition</a>;
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="returnvalue">GstAudioChannelPosition</span></a> * <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-fixate-channel-positions" title="gst_audio_fixate_channel_positions ()">gst_audio_fixate_channel_positions</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="returnvalue">GstAudioChannelPosition</span></a> * <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-get-channel-positions" title="gst_audio_get_channel_positions ()">gst_audio_get_channel_positions</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-caps-channel-positions-list" title="gst_audio_set_caps_channel_positions_list ()">gst_audio_set_caps_channel_positions_list</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num_positions</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-channel-positions" title="gst_audio_set_channel_positions ()">gst_audio_set_channel_positions</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-structure-channel-positions-list" title="gst_audio_set_structure_channel_positions_list ()">gst_audio_set_structure_channel_positions_list</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num_positions</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#gst-audio-check-channel-positions" title="gst_audio_check_channel_positions ()">gst_audio_check_channel_positions</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> channels</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmultichannel.description"></a><h2>Description</h2>
+<p>
+This module contains some helper functions and a enum to work with
+multichannel audio.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstmultichannel.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioChannelPosition"></a><h3>enum GstAudioChannelPosition</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUDIO_CHANNEL_POSITION_INVALID = -1,
+
+  /* Main front speakers. Mono and left/right are mututally exclusive! */
+  GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+
+  /* rear. Left/right and center are mututally exclusive! */
+  GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+
+  /* subwoofer/low-frequency */
+  GST_AUDIO_CHANNEL_POSITION_LFE,
+
+  /* Center front speakers. Center and left/right_of_center cannot be
+   * used together! */
+  GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
+
+  /* sides */
+  GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+
+  GST_AUDIO_CHANNEL_POSITION_TOP_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER,
+
+  /* for multi-channel input and output with more than 8 channels,
+   * incompatible with all other positions, either all positions
+   * are defined or all positions are undefined, but can't mix'n'match  */
+  GST_AUDIO_CHANNEL_POSITION_NONE,
+} GstAudioChannelPosition;
+</pre>
+<p>
+Audio channel positions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_INVALID</code></span></p></td>
+<td>invalid position
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-MONO:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_MONO</code></span></p></td>
+<td>front mono
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT</code></span></p></td>
+<td>front left
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT</code></span></p></td>
+<td>front right
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_REAR_CENTER</code></span></p></td>
+<td>rear center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_REAR_LEFT</code></span></p></td>
+<td>rear left
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT</code></span></p></td>
+<td>rear right
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-LFE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_LFE</code></span></p></td>
+<td>subwoofer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER</code></span></p></td>
+<td>front center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER</code></span></p></td>
+<td>front left of center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER</code></span></p></td>
+<td>front right of center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT</code></span></p></td>
+<td>side left
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT</code></span></p></td>
+<td>side right
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_CENTER</code></span></p></td>
+<td>top center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT</code></span></p></td>
+<td>top front left
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT</code></span></p></td>
+<td>top front right
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER</code></span></p></td>
+<td>top front center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT</code></span></p></td>
+<td>top rear left
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT</code></span></p></td>
+<td>top rear right
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER</code></span></p></td>
+<td>top rear center
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-CHANNEL-POSITION-NONE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_CHANNEL_POSITION_NONE</code></span></p></td>
+<td>used for position-less channels, e.g.
+    from a sound card that records 1024 channels; mutually exclusive with
+    any other channel position
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-fixate-channel-positions"></a><h3>gst_audio_fixate_channel_positions ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="returnvalue">GstAudioChannelPosition</span></a> * gst_audio_fixate_channel_positions
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>);</pre>
+<p>
+Custom fixate function. Elements that implement some sort of
+channel conversion algorithm should use this function for
+fixating on GstAudioChannelPosition properties. It will take
+care of equal channel positioning (left/right). Caller <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>s
+the return value. The input properties may be (and are supposed
+to be) unfixed.
+Note that this function is mostly a hack because we currently
+have no way to add default fixation functions for new GTypes.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> containing a (possibly unfixed)
+"channel-positions" field.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>fixed values that the caller could use as a fixed
+set of <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> values.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-get-channel-positions"></a><h3>gst_audio_get_channel_positions ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="returnvalue">GstAudioChannelPosition</span></a> * gst_audio_get_channel_positions
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>);</pre>
+<p>
+Retrieves a number of (fixed!) audio channel positions from
+the provided <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> and returns it as a newly allocated
+array. The caller should <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> this array. The caller
+should also check that the members in this <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> are
+indeed "fixed" before calling this function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> to retrieve channel positions from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated array containing the channel
+positions as provided in the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>. Returns
+NULL on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-set-caps-channel-positions-list"></a><h3>gst_audio_set_caps_channel_positions_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_set_caps_channel_positions_list
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num_positions</code></em>);</pre>
+<p>
+Sets a (possibly non-fixed) list of possible audio channel
+positions (given in pos) on the given caps. Each of the
+structures of the caps, after this function has been called,
+will contain a "channel-positions" field with an array.
+Each value in the array will contain each of the values given
+in the pos array. Note that the size of the caps might be
+increased by this, since each structure with a "channel-
+positions" field needs to have a fixed "channels" field.
+The input caps is not required to have this.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to set the list of channel positions on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td>the array containing one or more possible audio
+channel positions that we should add in each value
+of the array in the given structure.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_positions</code></em> :</span></p></td>
+<td>the number of values in pos.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-set-channel-positions"></a><h3>gst_audio_set_channel_positions ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_set_channel_positions     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>);</pre>
+<p>
+Adds a "channel-positions" field to the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>,
+which will represent the channel positions as given in the
+provided <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> array.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> to set channel positions on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td>an array of channel positions. The number of members
+in this array should be equal to the (fixed!) number
+of the "channels" field in the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-set-structure-channel-positions-list"></a><h3>gst_audio_set_structure_channel_positions_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_audio_set_structure_channel_positions_list
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *str</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> num_positions</code></em>);</pre>
+<p>
+Sets a (possibly non-fixed) list of possible audio channel
+positions (given in pos) on the given structure. The
+structure, after this function has been called, will contain
+a "channel-positions" field with an array of the size of
+the "channels" field value in the given structure (note
+that this means that the channels field in the provided
+structure should be fixed!). Each value in the array will
+contain each of the values given in the pos array.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> to set the list of channel positions
+on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td>the array containing one or more possible audio
+channel positions that we should add in each value
+of the array in the given structure.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_positions</code></em> :</span></p></td>
+<td>the number of values in pos.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-check-channel-positions"></a><h3>gst_audio_check_channel_positions ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_audio_check_channel_positions   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a> *pos</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> channels</code></em>);</pre>
+<p>
+This functions checks if the given channel positions are valid. Channel
+positions are valid if:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>No channel positions appears twice or all positions are <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS"><code class="literal">GST_AUDIO_CHANNEL_POSITION_NONE</code></a>.
+  </p></li>
+<li class="listitem"><p>Either all or none of the channel positions are <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS"><code class="literal">GST_AUDIO_CHANNEL_POSITION_NONE</code></a>.
+  </p></li>
+<li class="listitem"><p><a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-MONO:CAPS"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_MONO</code></a> and <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT</code></a> or <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS"><code class="literal">GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT</code></a> don't appear together in the given positions.
+  </p></li>
+</ul></div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td>An array of <a class="link" href="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition" title="enum GstAudioChannelPosition"><span class="type">GstAudioChannelPosition</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channels</code></em> :</span></p></td>
+<td>The number of elements in <em class="parameter"><code>pos</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the given channel positions are valid
+and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstnavigation.html b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
new file mode 100644
index 0000000..d46cafb
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
@@ -0,0 +1,1202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstnavigation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstmixertrack.html" title="gstmixertrack">
+<link rel="next" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstmixertrack.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpropertyprobe.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstnavigation.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstnavigation.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstnavigation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstnavigation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstnavigation.top_of_page"></a>gstnavigation</span></h2>
+<p>gstnavigation — Interface for creating, sending and parsing navigation
+events.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstnavigation.synopsis"></a><h2>Synopsis</h2>
+<a name="GstNavigation"></a><pre class="synopsis">
+#include &lt;gst/interfaces/navigation.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct" title="GstNavigation">GstNavigation</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationInterface" title="struct GstNavigationInterface">GstNavigationInterface</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand">GstNavigationCommand</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType" title="enum GstNavigationEventType">GstNavigationEventType</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType">GstNavigationMessageType</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType">GstNavigationQueryType</a>;
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-event" title="gst_navigation_send_event ()">gst_navigation_send_event</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-key-event" title="gst_navigation_send_key_event ()">gst_navigation_send_key_event</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *event</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-mouse-event" title="gst_navigation_send_mouse_event ()">gst_navigation_send_mouse_event</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *event</code></em>,
+                                                         <em class="parameter"><code><span class="type">int</span> button</code></em>,
+                                                         <em class="parameter"><code><span class="type">double</span> x</code></em>,
+                                                         <em class="parameter"><code><span class="type">double</span> y</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-command" title="gst_navigation_send_command ()">gst_navigation_send_command</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> command</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-command" title="gst_navigation_event_parse_command ()">gst_navigation_event_parse_command</a>  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *command</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event" title="gst_navigation_event_parse_key_event ()">gst_navigation_event_parse_key_event</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **key</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event" title="gst_navigation_event_parse_mouse_button_event ()">gst_navigation_event_parse_mouse_button_event</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *button</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-move-event" title="gst_navigation_event_parse_mouse_move_event ()">gst_navigation_event_parse_mouse_move_event</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType"><span class="returnvalue">GstNavigationMessageType</span></a> <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type" title="gst_navigation_message_get_type ()">gst_navigation_message_get_type</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed" title="gst_navigation_message_new_angles_changed ()">gst_navigation_message_new_angles_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_angles</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed" title="gst_navigation_message_new_commands_changed ()">gst_navigation_message_new_commands_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over" title="gst_navigation_message_new_mouse_over ()">gst_navigation_message_new_mouse_over</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" title="gst_navigation_message_parse_mouse_over ()">gst_navigation_message_parse_mouse_over</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *active</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed" title="gst_navigation_message_parse_angles_changed ()">gst_navigation_message_parse_angles_changed</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_angles</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="returnvalue">GstQuery</span></a> *          <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles" title="gst_navigation_query_new_angles ()">gst_navigation_query_new_angles</a>     (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="returnvalue">GstNavigationQueryType</span></a> <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type" title="gst_navigation_query_get_type ()">gst_navigation_query_get_type</a>    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="returnvalue">GstQuery</span></a> *          <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands" title="gst_navigation_query_new_commands ()">gst_navigation_query_new_commands</a>   (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-angles" title="gst_navigation_query_parse_angles ()">gst_navigation_query_parse_angles</a>   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_angles</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-length" title="gst_navigation_query_parse_commands_length ()">gst_navigation_query_parse_commands_length</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_cmds</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-nth" title="gst_navigation_query_parse_commands_nth ()">gst_navigation_query_parse_commands_nth</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *cmd</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-angles" title="gst_navigation_query_set_angles ()">gst_navigation_query_set_angles</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_angles</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commands" title="gst_navigation_query_set_commands ()">gst_navigation_query_set_commands</a>   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_cmds</code></em>,
+                                                         <em class="parameter"><code>...</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commandsv" title="gst_navigation_query_set_commandsv ()">gst_navigation_query_set_commandsv</a>  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_cmds</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *cmds</code></em>);
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU">GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU">GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU">GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_MENU">GST_NAVIGATION_COMMAND_DVD_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_ROOT_MENU">GST_NAVIGATION_COMMAND_DVD_ROOT_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU">GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS" title="GST_NAVIGATION_COMMAND_DVD_TITLE_MENU">GST_NAVIGATION_COMMAND_DVD_TITLE_MENU</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstnavigation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstNavigation
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstnavigation.description"></a><h2>Description</h2>
+<p>
+The Navigation interface is used for creating and injecting navigation related
+events such as mouse button presses, cursor motion and key presses. The associated
+library also provides methods for parsing received events, and for sending and
+receiving navigation related bus events. One main usecase is DVD menu navigation.
+</p>
+<p>
+The main parts of the API are:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+The GstNavigation interface, implemented by elements which provide an application
+with the ability to create and inject navigation events into the pipeline.
+</p></li>
+<li class="listitem"><p>
+GstNavigation event handling API. GstNavigation events are created in response to
+calls on a GstNavigation interface implementation, and sent in the pipeline. Upstream
+elements can use the navigation event API functions to parse the contents of received
+messages.
+</p></li>
+<li class="listitem">
+<p>
+GstNavigation message handling API. GstNavigation messages may be sent on the message
+bus to inform applications of navigation related changes in the pipeline, such as the
+mouse moving over a clickable region, or the set of available angles changing.
+</p>
+<p>
+The GstNavigation message functions provide functions for creating and parsing
+custom bus messages for signalling GstNavigation changes.
+</p>
+</li>
+</ul></div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstnavigation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstNavigation-struct"></a><h3>GstNavigation</h3>
+<pre class="programlisting">typedef struct _GstNavigation GstNavigation;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNavigationInterface"></a><h3>struct GstNavigationInterface</h3>
+<pre class="programlisting">struct GstNavigationInterface {
+  GTypeInterface g_iface;
+
+  /* virtual functions */
+  void (*send_event) (GstNavigation *navigation, GstStructure *structure);
+};
+</pre>
+<p>
+Color-balance interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstNavigationInterface.g-iface"></a>g_iface</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstNavigationInterface.send-event"></a>send_event</code></em> ()</span></p></td>
+<td>sending a navigation event</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNavigationCommand"></a><h3>enum GstNavigationCommand</h3>
+<pre class="programlisting">typedef enum {
+  GST_NAVIGATION_COMMAND_INVALID  = 0,
+
+  GST_NAVIGATION_COMMAND_MENU1    = 1,
+  GST_NAVIGATION_COMMAND_MENU2    = 2,
+  GST_NAVIGATION_COMMAND_MENU3    = 3,
+  GST_NAVIGATION_COMMAND_MENU4    = 4,
+  GST_NAVIGATION_COMMAND_MENU5    = 5,
+  GST_NAVIGATION_COMMAND_MENU6    = 6,
+  GST_NAVIGATION_COMMAND_MENU7    = 7,
+
+  GST_NAVIGATION_COMMAND_LEFT     = 20,
+  GST_NAVIGATION_COMMAND_RIGHT    = 21,
+  GST_NAVIGATION_COMMAND_UP       = 22,
+  GST_NAVIGATION_COMMAND_DOWN     = 23,
+  GST_NAVIGATION_COMMAND_ACTIVATE = 24,
+
+  GST_NAVIGATION_COMMAND_PREV_ANGLE = 30,
+  GST_NAVIGATION_COMMAND_NEXT_ANGLE = 31
+} GstNavigationCommand;
+</pre>
+<p>
+A set of commands that may be issued to an element providing the
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> interface. The available commands can be queried via
+the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands" title="gst_navigation_query_new_commands ()"><code class="function">gst_navigation_query_new_commands()</code></a> query.
+</p>
+<p>
+For convenience in handling DVD navigation, the MENU commands are aliased as:
+   GST_NAVIGATION_COMMAND_DVD_MENU            = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU1</code></em>
+   GST_NAVIGATION_COMMAND_DVD_TITLE_MENU      = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU2</code></em>
+   GST_NAVIGATION_COMMAND_DVD_ROOT_MENU       = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU3</code></em>
+   GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU4</code></em>
+   GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU      = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU5</code></em>
+   GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU      = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU6</code></em>
+   GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU7</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-INVALID:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_INVALID</code></span></p></td>
+<td>An invalid command entry
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU1:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU1</code></span></p></td>
+<td>Execute navigation menu command 1. For DVD,
+this enters the DVD root menu, or exits back to the title from the menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU2:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU2</code></span></p></td>
+<td>Execute navigation menu command 2. For DVD,
+this jumps to the DVD title menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU3:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU3</code></span></p></td>
+<td>Execute navigation menu command 3. For DVD,
+this jumps into the DVD root menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU4:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU4</code></span></p></td>
+<td>Execute navigation menu command 4. For DVD,
+this jumps to the Subpicture menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU5:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU5</code></span></p></td>
+<td>Execute navigation menu command 5. For DVD,
+the jumps to the audio menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU6:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU6</code></span></p></td>
+<td>Execute navigation menu command 6. For DVD,
+this jumps to the angles menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-MENU7:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_MENU7</code></span></p></td>
+<td>Execute navigation menu command 7. For DVD,
+this jumps to the chapter menu.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-LEFT:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_LEFT</code></span></p></td>
+<td>Select the next button to the left in a menu,
+if such a button exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-RIGHT:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_RIGHT</code></span></p></td>
+<td>Select the next button to the right in a menu,
+if such a button exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-UP:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_UP</code></span></p></td>
+<td>Select the button above the current one in a
+menu, if such a button exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-DOWN:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_DOWN</code></span></p></td>
+<td>Select the button below the current one in a
+menu, if such a button exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-ACTIVATE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_ACTIVATE</code></span></p></td>
+<td>Activate (click) the currently selected
+button in a menu, if such a button exists.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_PREV_ANGLE</code></span></p></td>
+<td>Switch to the previous angle in a
+multiangle feature.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_COMMAND_NEXT_ANGLE</code></span></p></td>
+<td>Switch to the next angle in a multiangle
+feature.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNavigationEventType"></a><h3>enum GstNavigationEventType</h3>
+<pre class="programlisting">typedef enum {
+  GST_NAVIGATION_EVENT_INVALID                    = 0,
+  GST_NAVIGATION_EVENT_KEY_PRESS                  = 1,
+  GST_NAVIGATION_EVENT_KEY_RELEASE                = 2,
+  GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS         = 3,
+  GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE       = 4,
+  GST_NAVIGATION_EVENT_MOUSE_MOVE                 = 5,
+  GST_NAVIGATION_EVENT_COMMAND                    = 6
+} GstNavigationEventType;
+</pre>
+<p>
+Enum values for the various events that an element implementing the
+GstNavigation interface might send up the pipeline.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-INVALID:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_INVALID</code></span></p></td>
+<td>Returned from
+<code class="function">gst_navigation_event_get_type()</code> when the passed event is not a navigation event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-KEY-PRESS:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_KEY_PRESS</code></span></p></td>
+<td>A key press event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event" title="gst_navigation_event_parse_key_event ()"><code class="function">gst_navigation_event_parse_key_event()</code></a> to extract the details from the event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_KEY_RELEASE</code></span></p></td>
+<td>A key release event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event" title="gst_navigation_event_parse_key_event ()"><code class="function">gst_navigation_event_parse_key_event()</code></a> to extract the details from the event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS</code></span></p></td>
+<td>A mouse button press event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event" title="gst_navigation_event_parse_mouse_button_event ()"><code class="function">gst_navigation_event_parse_mouse_button_event()</code></a> to extract the details from the
+event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE</code></span></p></td>
+<td>A mouse button release event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event" title="gst_navigation_event_parse_mouse_button_event ()"><code class="function">gst_navigation_event_parse_mouse_button_event()</code></a> to extract the details from the
+event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_MOUSE_MOVE</code></span></p></td>
+<td>A mouse movement event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-move-event" title="gst_navigation_event_parse_mouse_move_event ()"><code class="function">gst_navigation_event_parse_mouse_move_event()</code></a> to extract the details from the
+event.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-EVENT-COMMAND:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_EVENT_COMMAND</code></span></p></td>
+<td>A navigation command event. Use
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-command" title="gst_navigation_event_parse_command ()"><code class="function">gst_navigation_event_parse_command()</code></a> to extract the details from the event.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNavigationMessageType"></a><h3>enum GstNavigationMessageType</h3>
+<pre class="programlisting">typedef enum {
+  GST_NAVIGATION_MESSAGE_INVALID,
+  GST_NAVIGATION_MESSAGE_MOUSE_OVER,
+  GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
+  GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
+} GstNavigationMessageType;
+</pre>
+<p>
+A set of notifications that may be received on the bus when navigation
+related status changes.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-NAVIGATION-MESSAGE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_MESSAGE_INVALID</code></span></p></td>
+<td>Returned from
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type" title="gst_navigation_message_get_type ()"><code class="function">gst_navigation_message_get_type()</code></a> when the passed message is not a
+navigation message.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_MESSAGE_MOUSE_OVER</code></span></p></td>
+<td>Sent when the mouse moves over or leaves a
+clickable region of the output, such as a DVD menu button.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED</code></span></p></td>
+<td>Sent when the set of available commands
+changes and should re-queried by interested applications.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_MESSAGE_ANGLES_CHANGED</code></span></p></td>
+<td>Sent when display angles in a multi-angle
+feature (such as a multiangle DVD) change - either angles have appeared or
+disappeared.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNavigationQueryType"></a><h3>enum GstNavigationQueryType</h3>
+<pre class="programlisting">typedef enum {
+  GST_NAVIGATION_QUERY_INVALID     = 0,
+  GST_NAVIGATION_QUERY_COMMANDS    = 1,
+  GST_NAVIGATION_QUERY_ANGLES      = 2
+} GstNavigationQueryType;
+</pre>
+<p>
+Tyoes of navigation interface queries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-NAVIGATION-QUERY-INVALID:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_QUERY_INVALID</code></span></p></td>
+<td>invalid query
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-QUERY-COMMANDS:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_QUERY_COMMANDS</code></span></p></td>
+<td>command query
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NAVIGATION-QUERY-ANGLES:CAPS"></a><span class="term"><code class="literal">GST_NAVIGATION_QUERY_ANGLES</code></span></p></td>
+<td>viewing angle query
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-send-event"></a><h3>gst_navigation_send_event ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_send_event           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-send-key-event"></a><h3>gst_navigation_send_key_event ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_send_key_event       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *event</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>navigation</code></em> :</span></p></td>
+<td>The navigation interface instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>The type of the key event. Recognised values are "key-press" and
+"key-release"</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>Character representation of the key. This is typically as produced
+by XKeysymToString.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-send-mouse-event"></a><h3>gst_navigation_send_mouse_event ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_send_mouse_event     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *event</code></em>,
+                                                         <em class="parameter"><code><span class="type">int</span> button</code></em>,
+                                                         <em class="parameter"><code><span class="type">double</span> x</code></em>,
+                                                         <em class="parameter"><code><span class="type">double</span> y</code></em>);</pre>
+<p>
+Sends a mouse event to the navigation interface. Mouse event coordinates
+are sent relative to the display space of the related output area. This is
+usually the size in pixels of the window associated with the element
+implementing the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>navigation</code></em> :</span></p></td>
+<td>The navigation interface instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>The type of mouse event, as a text string. Recognised values are
+"mouse-button-press", "mouse-button-release" and "mouse-move".</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>button</code></em> :</span></p></td>
+<td>The button number of the button being pressed or released. Pass 0
+for mouse-move events.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>The x coordinate of the mouse event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>The y coordinate of the mouse event.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-send-command"></a><h3>gst_navigation_send_command ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_send_command         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> *navigation</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> command</code></em>);</pre>
+<p>
+Sends the indicated command to the navigation interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>navigation</code></em> :</span></p></td>
+<td>The navigation interface instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>command</code></em> :</span></p></td>
+<td>The command to issue</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-event-parse-command"></a><h3>gst_navigation_event_parse_command ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_event_parse_command  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *command</code></em>);</pre>
+<p>
+Inspect a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> command event and retrieve the enum value of the
+associated command.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>command</code></em> :</span></p></td>
+<td>Pointer to GstNavigationCommand to receive the type of the
+navigation event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the navigation command could be extracted, otherwise FALSE.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-event-parse-key-event"></a><h3>gst_navigation_event_parse_key_event ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_event_parse_key_event
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **key</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>A pointer to a location to receive the string identifying the key
+press. The returned string is owned by the event, and valid only until the
+event is unreffed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-event-parse-mouse-button-event"></a><h3>gst_navigation_event_parse_mouse_button_event ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_event_parse_mouse_button_event
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *button</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);</pre>
+<p>
+Retrieve the details of either a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> mouse button press event or
+a mouse button release event. Determine which type the event is using
+<code class="function">gst_navigation_event_get_type()</code> to retrieve the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType" title="enum GstNavigationEventType"><span class="type">GstNavigationEventType</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>button</code></em> :</span></p></td>
+<td>Pointer to a gint that will receive the button number associated
+with the event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>Pointer to a gdouble to receive the x coordinate of the mouse button
+event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>Pointer to a gdouble to receive the y coordinate of the mouse button
+event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the button number and both coordinates could be extracted,
+otherwise FALSE.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-event-parse-mouse-move-event"></a><h3>gst_navigation_event_parse_mouse_move_event ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_event_parse_mouse_move_event
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);</pre>
+<p>
+Inspect a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> mouse movement event and extract the coordinates
+of the event.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>Pointer to a gdouble to receive the x coordinate of the mouse movement.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>Pointer to a gdouble to receive the y coordinate of the mouse movement.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if both coordinates could be extracted, otherwise FALSE.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-get-type"></a><h3>gst_navigation_message_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType"><span class="returnvalue">GstNavigationMessageType</span></a> gst_navigation_message_get_type
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>);</pre>
+<p>
+Check a bus message to see if it is a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> event, and return
+the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType"><span class="type">GstNavigationMessageType</span></a> identifying the type of the message if so.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The type of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_INVALID</span></a> if the message is not a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a>
+notification.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-new-angles-changed"></a><h3>gst_navigation_message_new_angles_changed ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_navigation_message_new_angles_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_angles</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_ANGLES_CHANGED</span></a> for notifying an application
+that the current angle, or current number of angles available in a
+multiangle video has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> to set as source of the new message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cur_angle</code></em> :</span></p></td>
+<td>The currently selected angle.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_angles</code></em> :</span></p></td>
+<td>The number of viewing angles now available.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-new-commands-changed"></a><h3>gst_navigation_message_new_commands_changed ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_navigation_message_new_commands_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED</span></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> to set as source of the new message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-new-mouse-over"></a><h3>gst_navigation_message_new_mouse_over ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_navigation_message_new_mouse_over
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_MOUSE_OVER</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> to set as source of the new message.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>active</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the mouse has entered a clickable area of the display.
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it over a non-clickable area.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-parse-mouse-over"></a><h3>gst_navigation_message_parse_mouse_over ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_message_parse_mouse_over
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *active</code></em>);</pre>
+<p>
+Parse a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message of type <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_MOUSE_OVER</span></a>
+and extract the active/inactive flag. If the mouse over event is marked
+active, it indicates that the mouse is over a clickable area.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>active</code></em> :</span></p></td>
+<td>A pointer to a gboolean to receive the active/inactive state,
+or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the message could be successfully parsed. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-parse-angles-changed"></a><h3>gst_navigation_message_parse_angles_changed ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_message_parse_angles_changed
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_angles</code></em>);</pre>
+<p>
+Parse a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message of type GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
+and extract the <em class="parameter"><code>cur_angle</code></em> and <em class="parameter"><code>n_angles</code></em> parameters.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> to inspect.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cur_angle</code></em> :</span></p></td>
+<td>A pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> to receive the new current angle number,
+or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_angles</code></em> :</span></p></td>
+<td>A pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> to receive the new angle count, or NULL.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the message could be successfully parsed. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-new-angles"></a><h3>gst_navigation_query_new_angles ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="returnvalue">GstQuery</span></a> *          gst_navigation_query_new_angles     (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> angles query. When executed, it will
+query the pipeline for the set of currently available angles, which may be
+greater than one in a multiangle video.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new query.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-get-type"></a><h3>gst_navigation_query_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="returnvalue">GstNavigationQueryType</span></a> gst_navigation_query_get_type    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
+<p>
+Inspect a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> and return the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="type">GstNavigationQueryType</span></a> associated with
+it if it is a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> query.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>The query to inspect</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="type">GstNavigationQueryType</span></a> of the query, or
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS"><span class="type">GST_NAVIGATION_QUERY_INVALID</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-new-commands"></a><h3>gst_navigation_query_new_commands ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="returnvalue">GstQuery</span></a> *          gst_navigation_query_new_commands   (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> commands query. When executed, it will
+query the pipeline for the set of currently available commands.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new query.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-parse-angles"></a><h3>gst_navigation_query_parse_angles ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_query_parse_angles   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_angles</code></em>);</pre>
+<p>
+Parse the current angle number in the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> angles <em class="parameter"><code>query</code></em> into the
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> pointed to by the <em class="parameter"><code>cur_angle</code></em> variable, and the number of available
+angles into the <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> pointed to by the <em class="parameter"><code>n_angles</code></em> variable.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cur_angle</code></em> :</span></p></td>
+<td>Pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> into which to store the currently selected
+angle value from the query, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_angles</code></em> :</span></p></td>
+<td>Pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> into which to store the number of angles
+value from the query, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the query could be successfully parsed. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-parse-commands-length"></a><h3>gst_navigation_query_parse_commands_length ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_query_parse_commands_length
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *n_cmds</code></em>);</pre>
+<p>
+Parse the number of commands in the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> commands <em class="parameter"><code>query</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_cmds</code></em> :</span></p></td>
+<td>the number of commands in this query.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the query could be successfully parsed. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-parse-commands-nth"></a><h3>gst_navigation_query_parse_commands_nth ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_navigation_query_parse_commands_nth
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *cmd</code></em>);</pre>
+<p>
+Parse the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> command query and retrieve the <em class="parameter"><code>nth</code></em> command from
+it into <em class="parameter"><code>cmd</code></em>. If the list contains less elements than <em class="parameter"><code>nth</code></em>, <em class="parameter"><code>cmd</code></em> will be
+set to <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS"><span class="type">GST_NAVIGATION_COMMAND_INVALID</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>the nth command to retrieve.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cmd</code></em> :</span></p></td>
+<td>a pointer to store the nth command into.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the query could be successfully parsed. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-set-angles"></a><h3>gst_navigation_query_set_angles ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_query_set_angles     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> cur_angle</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_angles</code></em>);</pre>
+<p>
+Set the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> angles query result field in <em class="parameter"><code>query</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cur_angle</code></em> :</span></p></td>
+<td>the current viewing angle to set.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_angles</code></em> :</span></p></td>
+<td>the number of viewing angles to set.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-set-commands"></a><h3>gst_navigation_query_set_commands ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_query_set_commands   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_cmds</code></em>,
+                                                         <em class="parameter"><code>...</code></em>);</pre>
+<p>
+Set the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> command query result fields in <em class="parameter"><code>query</code></em>. The number
+of commands passed must be equal to <em class="parameter"><code>n_commands</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_cmds</code></em> :</span></p></td>
+<td>the number of commands to set.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
+<td>A list of <em class="parameter"><code>GstNavigationCommand</code></em> values, <em class="parameter"><code>n_cmds</code></em> entries long.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-query-set-commandsv"></a><h3>gst_navigation_query_set_commandsv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_navigation_query_set_commandsv  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> *query</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> n_cmds</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> *cmds</code></em>);</pre>
+<p>
+Set the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> command query result fields in <em class="parameter"><code>query</code></em>. The number
+of commands passed must be equal to <em class="parameter"><code>n_commands</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>query</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_cmds</code></em> :</span></p></td>
+<td>the number of commands to set.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cmds</code></em> :</span></p></td>
+<td>An array containing <em class="parameter"><code>n_cmds</code></em> <em class="parameter"><code>GstNavigationCommand</code></em> values.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU      GST_NAVIGATION_COMMAND_MENU6
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU      GST_NAVIGATION_COMMAND_MENU5
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    GST_NAVIGATION_COMMAND_MENU7
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_MENU            GST_NAVIGATION_COMMAND_MENU1
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_ROOT_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_ROOT_MENU       GST_NAVIGATION_COMMAND_MENU3
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU GST_NAVIGATION_COMMAND_MENU4
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS"></a><h3>GST_NAVIGATION_COMMAND_DVD_TITLE_MENU</h3>
+<pre class="programlisting">#define GST_NAVIGATION_COMMAND_DVD_TITLE_MENU      GST_NAVIGATION_COMMAND_MENU2
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstnetbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstnetbuffer.html
new file mode 100644
index 0000000..bf5c732
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstnetbuffer.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstnetbuffer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-netbuffer.html" title="Network Buffer Library">
+<link rel="prev" href="gstreamer-netbuffer.html" title="Network Buffer Library">
+<link rel="next" href="gstreamer-riff.html" title="Riff Media Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-netbuffer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-netbuffer.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-riff.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstnetbuffer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstnetbuffer.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstnetbuffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstnetbuffer.top_of_page"></a>gstnetbuffer</span></h2>
+<p>gstnetbuffer — Buffer for use in network sources and sinks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstnetbuffer.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/netbuffer/gstnetbuffer.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetBuffer" title="GstNetBuffer">GstNetBuffer</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType">GstNetType</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GST-NETADDRESS-MAX-LEN:CAPS" title="GST_NETADDRESS_MAX_LEN">GST_NETADDRESS_MAX_LEN</a>
+struct              <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress">GstNetAddress</a>;
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType"><span class="returnvalue">GstNetType</span></a>          <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-net-type" title="gst_netaddress_get_net_type ()">gst_netaddress_get_net_type</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip4-address" title="gst_netaddress_set_ip4_address ()">gst_netaddress_set_ip4_address</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip4-address" title="gst_netaddress_get_ip4_address ()">gst_netaddress_get_ip4_address</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip6-address" title="gst_netaddress_set_ip6_address ()">gst_netaddress_set_ip6_address</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip6-address" title="gst_netaddress_get_ip6_address ()">gst_netaddress_get_ip6_address</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-address-bytes" title="gst_netaddress_get_address_bytes ()">gst_netaddress_get_address_bytes</a>    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-address-bytes" title="gst_netaddress_set_address_bytes ()">gst_netaddress_set_address_bytes</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType"><span class="type">GstNetType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-equal" title="gst_netaddress_equal ()">gst_netaddress_equal</a>                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr1</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr2</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-to-string" title="gst_netaddress_to_string ()">gst_netaddress_to_string</a>            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *dest</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> len</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstnetbuffer.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetBuffer" title="GstNetBuffer"><span class="type">GstNetBuffer</span></a> is a subclass of a normal <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> that contains two
+additional metadata fields of type <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> named 'to' and 'from'. The
+buffer can be used to store additional information about the origin of the
+buffer data and is used in various network elements to track the to and from
+addresses.
+</p>
+<p>
+Last reviewed on 2006-08-21 (0.10.10)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstnetbuffer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstNetBuffer"></a><h3>GstNetBuffer</h3>
+<pre class="programlisting">typedef struct _GstNetBuffer GstNetBuffer;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNetType"></a><h3>enum GstNetType</h3>
+<pre class="programlisting">typedef enum {
+  GST_NET_TYPE_UNKNOWN,
+  GST_NET_TYPE_IP4,
+  GST_NET_TYPE_IP6,
+} GstNetType;
+</pre>
+<p>
+The Address type used in <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-NET-TYPE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_NET_TYPE_UNKNOWN</code></span></p></td>
+<td>unknown address type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NET-TYPE-IP4:CAPS"></a><span class="term"><code class="literal">GST_NET_TYPE_IP4</code></span></p></td>
+<td>an IPv4 address type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-NET-TYPE-IP6:CAPS"></a><span class="term"><code class="literal">GST_NET_TYPE_IP6</code></span></p></td>
+<td>and IPv6 address type
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-NETADDRESS-MAX-LEN:CAPS"></a><h3>GST_NETADDRESS_MAX_LEN</h3>
+<pre class="programlisting">#define GST_NETADDRESS_MAX_LEN 64
+</pre>
+<p>
+The maximum length of a string representation of a GstNetAddress as produced
+by <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-to-string" title="gst_netaddress_to_string ()"><code class="function">gst_netaddress_to_string()</code></a>.
+</p>
+<p class="since">Since 0.10.24</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNetAddress"></a><h3>struct GstNetAddress</h3>
+<pre class="programlisting">struct GstNetAddress {
+};
+</pre>
+<p>
+An opaque network address as used in <span class="type">GstMetaNetAddress</span>.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-get-net-type"></a><h3>gst_netaddress_get_net_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType"><span class="returnvalue">GstNetType</span></a>          gst_netaddress_get_net_type         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>);</pre>
+<p>
+Get the type of address stored in <em class="parameter"><code>naddr</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the network type stored in <em class="parameter"><code>naddr</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-set-ip4-address"></a><h3>gst_netaddress_set_ip4_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_netaddress_set_ip4_address      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);</pre>
+<p>
+Set <em class="parameter"><code>naddr</code></em> with the IPv4 <em class="parameter"><code>address</code></em> and <em class="parameter"><code>port</code></em> pair.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> and <em class="parameter"><code>address</code></em> must be expressed in network byte order,
+use <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-htons"><code class="function">g_htons()</code></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-htonl"><code class="function">g_htonl()</code></a> to convert them to network byte order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>an IPv4 network address.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a port number to set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-get-ip4-address"></a><h3>gst_netaddress_get_ip4_address ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_netaddress_get_ip4_address      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);</pre>
+<p>
+Get the IPv4 address stored in <em class="parameter"><code>naddr</code></em> into <em class="parameter"><code>address</code></em>. This function requires
+that the address type of <em class="parameter"><code>naddr</code></em> is of type <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-IP4:CAPS"><span class="type">GST_NET_TYPE_IP4</span></a>.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> and <em class="parameter"><code>address</code></em> are expressed in network byte order, use
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-ntohs"><code class="function">g_ntohs()</code></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-ntohl"><code class="function">g_ntohl()</code></a> to convert them to host order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>a location to store the address.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a location to store the port.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the address could be retrieved.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-set-ip6-address"></a><h3>gst_netaddress_set_ip6_address ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_netaddress_set_ip6_address      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);</pre>
+<p>
+Set <em class="parameter"><code>naddr</code></em> with the IPv6 <em class="parameter"><code>address</code></em> and <em class="parameter"><code>port</code></em> pair.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> must be expressed in network byte order, use <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-htons"><code class="function">g_htons()</code></a> to convert
+it to network byte order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>an IPv6 network address.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a port number to set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-get-ip6-address"></a><h3>gst_netaddress_get_ip6_address ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_netaddress_get_ip6_address      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);</pre>
+<p>
+Get the IPv6 address stored in <em class="parameter"><code>naddr</code></em> into <em class="parameter"><code>address</code></em>.
+</p>
+<p>
+If <em class="parameter"><code>naddr</code></em> is of type GST_NET_TYPE_IP4, the transitional IP6 address is
+returned.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> is expressed in network byte order, use <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-ntohs"><code class="function">g_ntohs()</code></a> to convert
+it to host order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>a location to store the result.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a location to store the port.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the address could be retrieved.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-get-address-bytes"></a><h3>gst_netaddress_get_address_bytes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_netaddress_get_address_bytes    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);</pre>
+<p>
+Get just the address bytes stored in <em class="parameter"><code>naddr</code></em> into <em class="parameter"><code>address</code></em>.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> is expressed in network byte order, use <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-ntohs"><code class="function">g_ntohs()</code></a> to convert
+it to host order. IP4 addresses are also stored in network byte order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>a location to store the result.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a location to store the port.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>number of bytes actually copied</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-set-address-bytes"></a><h3>gst_netaddress_set_address_bytes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_netaddress_set_address_bytes    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetType" title="enum GstNetType"><span class="type">GstNetType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> address[16]</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);</pre>
+<p>
+Set just the address bytes stored in <em class="parameter"><code>naddr</code></em> into <em class="parameter"><code>address</code></em>.
+</p>
+<p>
+Note that <em class="parameter"><code>port</code></em> must be expressed in network byte order, use <a href="http://library.gnome.org/devel/glib/unstable/glib-Byte-Order-Macros.html#g-htons"><code class="function">g_htons()</code></a> to
+convert it to network byte order order. IP4 address bytes must also be
+stored in network byte order.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a network address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the address type (IPv4 or IPV6)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>a location to store the result.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>a location to store the port.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>number of bytes actually copied</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-equal"></a><h3>gst_netaddress_equal ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_netaddress_equal                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr1</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr2</code></em>);</pre>
+<p>
+Compare two <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> structures
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr1</code></em> :</span></p></td>
+<td>The first <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr2</code></em> :</span></p></td>
+<td>The second <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if they are identical, FALSE otherwise</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-netaddress-to-string"></a><h3>gst_netaddress_to_string ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_netaddress_to_string            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a> *naddr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *dest</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> len</code></em>);</pre>
+<p>
+Copies a string representation of <em class="parameter"><code>naddr</code></em> into <em class="parameter"><code>dest</code></em>. Up to <em class="parameter"><code>len</code></em> bytes are
+copied.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>naddr</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress" title="struct GstNetAddress"><span class="type">GstNetAddress</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest</code></em> :</span></p></td>
+<td>destination</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>len of <em class="parameter"><code>dest</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of bytes which would be produced if the buffer was large
+enough</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.24</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutils.html b/docs/libs/html/gst-plugins-base-libs-gstpbutils.html
new file mode 100644
index 0000000..da57d12
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutils.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpbutils</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="next" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-base-utils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpluginsbaseversion.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpbutils.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpbutils.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpbutils"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpbutils.top_of_page"></a>gstpbutils</span></h2>
+<p>gstpbutils — General Application and Plugin Utility Library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpbutils.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/pbutils.h&gt;
+
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init" title="gst_pb_utils_init ()">gst_pb_utils_init</a>                   (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutils.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id442245"></a><h3>Linking to this library</h3>
+<p>
+libgstpbutils is a general utility library for plugins and applications,
+available since gst-plugins-base 0.10.12. It currently provides the
+following:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+human-readable description strings of codecs, elements, sources, decoders,
+encoders, or sinks from decoder/encoder caps, element names, or protocol
+names.
+</p></li>
+<li class="listitem"><p>
+support for applications to initiate installation of missing plugins (if
+this is supported by the distribution or operating system used)
+</p></li>
+<li class="listitem"><p>
+API for GStreamer elements to create missing-plugin messages in order to
+communicate to the application that a certain type of plugin is missing
+(decoder, encoder, URI protocol source, URI protocol sink, named element)
+</p></li>
+<li class="listitem"><p>
+API for applications to recognise and handle missing-plugin messages
+</p></li>
+</ul></div>
+<p>
+You should obtain the required CFLAGS and LIBS using pkg-config on the
+gstreamer-plugins-base-0.10 module. You will then also need to add
+'-lgstpbutils-0.10' manually to your LIBS line.
+</p>
+<p>
+Before using any of its functions, applications and plugins must call
+<a class="link" href="gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init" title="gst_pb_utils_init ()"><code class="function">gst_pb_utils_init()</code></a> to initialise the library.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutils.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-pb-utils-init"></a><h3>gst_pb_utils_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_pb_utils_init                   (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Initialises the base utils support library. This function is not
+thread-safe. Applications should call it after calling <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init"><code class="function">gst_init()</code></a>,
+plugins should call it from their plugin_init function.
+</p>
+<p>
+This function may be called multiple times. It will do nothing if the
+library has already been initialised.
+</p>
+<p class="since">Since 0.10.12</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
new file mode 100644
index 0000000..4c498b3
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
@@ -0,0 +1,492 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpbutilscodecutils</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">
+<link rel="next" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpluginsbaseversion.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpbutilsdescriptions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpbutilscodecutils.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpbutilscodecutils.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpbutilscodecutils"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpbutilscodecutils.top_of_page"></a>gstpbutilscodecutils</span></h2>
+<p>gstpbutilscodecutils — Miscellaneous codec-specific utility functions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpbutilscodecutils.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/codec-utils.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-sample-rate-from-index" title="gst_codec_utils_aac_get_sample_rate_from_index ()">gst_codec_utils_aac_get_sample_rate_from_index</a>
+                                                        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> sr_idx</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile" title="gst_codec_utils_aac_get_profile ()">gst_codec_utils_aac_get_profile</a>     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level" title="gst_codec_utils_aac_get_level ()">gst_codec_utils_aac_get_level</a>       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-caps-set-level-and-profile" title="gst_codec_utils_aac_caps_set_level_and_profile ()">gst_codec_utils_aac_caps_set_level_and_profile</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile" title="gst_codec_utils_h264_get_profile ()">gst_codec_utils_h264_get_profile</a>    (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level" title="gst_codec_utils_h264_get_level ()">gst_codec_utils_h264_get_level</a>      (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-caps-set-level-and-profile" title="gst_codec_utils_h264_caps_set_level_and_profile ()">gst_codec_utils_h264_caps_set_level_and_profile</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level-idc" title="gst_codec_utils_h264_get_level_idc ()">gst_codec_utils_h264_get_level_idc</a>  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *level</code></em>);
+
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile" title="gst_codec_utils_mpeg4video_get_profile ()">gst_codec_utils_mpeg4video_get_profile</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level" title="gst_codec_utils_mpeg4video_get_level ()">gst_codec_utils_mpeg4video_get_level</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile" title="gst_codec_utils_mpeg4video_caps_set_level_and_profile ()">gst_codec_utils_mpeg4video_caps_set_level_and_profile</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilscodecutils.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id602451"></a><p>
+Provides codec-specific ulility functions such as functions to provide the
+codec profile and level in human-readable string form from header data.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilscodecutils.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-codec-utils-aac-get-sample-rate-from-index"></a><h3>gst_codec_utils_aac_get_sample_rate_from_index ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_codec_utils_aac_get_sample_rate_from_index
+                                                        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> sr_idx</code></em>);</pre>
+<p>
+Translates the sample rate index found in AAC headers to the actual sample
+rate.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sr_idx</code></em> :</span></p></td>
+<td>Sample rate index as from the AudioSpecificConfig (MPEG-4
+container) or ADTS frame header</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The sample rate if <em class="parameter"><code>sr_idx</code></em> is valid, 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-aac-get-profile"></a><h3>gst_codec_utils_aac_get_profile ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_aac_get_profile     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Returns the profile of the given AAC stream as a string. The profile is
+determined using the AudioObjectType field which is in the first 5 bits of
+<em class="parameter"><code>audio_config</code></em>.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+HE-AAC support has not yet been implemented.
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>audio_config</code></em> :</span></p></td>
+<td>a pointer to the AudioSpecificConfig as specified in the
+Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level" title="gst_codec_utils_aac_get_level ()"><code class="function">gst_codec_utils_aac_get_level()</code></a> for a more details).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of <em class="parameter"><code>audio_config</code></em> in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The profile as a const string and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the profile could not be
+determined.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-aac-get-level"></a><h3>gst_codec_utils_aac_get_level ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_aac_get_level       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Determines the level of a stream as defined in ISO/IEC 14496-3. For AAC LC
+streams, the constraints from the AAC audio profile are applied. For AAC
+Main, LTP, SSR and others, the Main profile is used.
+</p>
+<p>
+The <em class="parameter"><code>audio_config</code></em> parameter follows the following format, starting from the
+most significant bit of the first byte:
+</p>
+<p>
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+    Bit 0:4 contains the AudioObjectType
+  </p></li>
+<li class="listitem"><p>
+    Bit 5:8 contains the sample frequency index (if this is 0xf, then the
+            next 24 bits define the actual sample frequency, and subsequent
+            fields are appropriately shifted).
+   </p></li>
+<li class="listitem"><p>
+    Bit 9:12 contains the channel configuration
+  </p></li>
+</ul></div>
+<p>
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+HE-AAC support has not yet been implemented.
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>audio_config</code></em> :</span></p></td>
+<td>a pointer to the AudioSpecificConfig as specified in the
+Elementary Stream Descriptor (esds) in ISO/IEC 14496-1.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of <em class="parameter"><code>audio_config</code></em> in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The level as a const string and <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the level could not be
+determined.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-aac-caps-set-level-and-profile"></a><h3>gst_codec_utils_aac_caps_set_level_and_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_codec_utils_aac_caps_set_level_and_profile
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *audio_config</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Sets the level and profile on <em class="parameter"><code>caps</code></em> if it can be determined from
+<em class="parameter"><code>audio_config</code></em>. See <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level" title="gst_codec_utils_aac_get_level ()"><code class="function">gst_codec_utils_aac_get_level()</code></a> and
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile" title="gst_codec_utils_aac_get_profile ()"><code class="function">gst_codec_utils_aac_get_profile()</code></a> for more details on the parameters.
+<em class="parameter"><code>caps</code></em> must be audio/mpeg caps with an "mpegversion" field of either 2 or 4.
+If mpegversion is 4, the "base-profile" field is also set in <em class="parameter"><code>caps</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to which level and profile fields are to be added</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>audio_config</code></em> :</span></p></td>
+<td>a pointer to the AudioSpecificConfig as specified in the
+Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see
+below for a more details).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of <em class="parameter"><code>audio_config</code></em> in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the level and profile could be set, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-h264-get-profile"></a><h3>gst_codec_utils_h264_get_profile ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_h264_get_profile    (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Converts the profile indication (profile_idc) in the stream's
+sequence parameter set into a string. The SPS is expected to have the
+following format, as defined in the H.264 specification. The SPS is viewed
+as a bitstream here, with bit 0 being the most significant bit of the first
+byte.
+</p>
+<p>
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>Bit 0:7   - Profile indication</p></li>
+<li class="listitem"><p>Bit 8     - constraint_set0_flag</p></li>
+<li class="listitem"><p>Bit 9     - constraint_set1_flag</p></li>
+<li class="listitem"><p>Bit 10    - constraint_set2_flag</p></li>
+<li class="listitem"><p>Bit 11    - constraint_set3_flag</p></li>
+<li class="listitem"><p>Bit 12    - constraint_set3_flag</p></li>
+<li class="listitem"><p>Bit 13:15 - Reserved</p></li>
+<li class="listitem"><p>Bit 16:24 - Level indication</p></li>
+</ul></div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sps</code></em> :</span></p></td>
+<td>Pointer to the sequence parameter set for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The profile as a const string, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-h264-get-level"></a><h3>gst_codec_utils_h264_get_level ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_h264_get_level      (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Converts the level indication (level_idc) in the stream's
+sequence parameter set into a string. The SPS is expected to have the
+same format as for <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile" title="gst_codec_utils_h264_get_profile ()"><code class="function">gst_codec_utils_h264_get_profile()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sps</code></em> :</span></p></td>
+<td>Pointer to the sequence parameter set for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The level as a const string, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-h264-caps-set-level-and-profile"></a><h3>gst_codec_utils_h264_caps_set_level_and_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_codec_utils_h264_caps_set_level_and_profile
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *sps</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Sets the level and profile in <em class="parameter"><code>caps</code></em> if it can be determined from <em class="parameter"><code>sps</code></em>. See
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level" title="gst_codec_utils_h264_get_level ()"><code class="function">gst_codec_utils_h264_get_level()</code></a> and <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile" title="gst_codec_utils_h264_get_profile ()"><code class="function">gst_codec_utils_h264_get_profile()</code></a>
+for more details on the parameters.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to which the level and profile are to be added</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sps</code></em> :</span></p></td>
+<td>Pointer to the sequence parameter set for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the level and profile could be set, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-h264-get-level-idc"></a><h3>gst_codec_utils_h264_get_level_idc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_codec_utils_h264_get_level_idc  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *level</code></em>);</pre>
+<p>
+Transform a level string from the caps into the level_idc
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>level</code></em> :</span></p></td>
+<td>A level string from caps</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the level_idc or 0 if the level is unknown</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-mpeg4video-get-profile"></a><h3>gst_codec_utils_mpeg4video_get_profile ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_mpeg4video_get_profile
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Converts the profile indication in the stream's visual object sequence into
+a string. <em class="parameter"><code>vis_obj_seq</code></em> is expected to be the data following the visual
+object sequence start code. Only the first byte
+(profile_and_level_indication) is used.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vis_obj_seq</code></em> :</span></p></td>
+<td>Pointer to the visual object sequence for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The profile as a const string, or NULL if there is an error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-mpeg4video-get-level"></a><h3>gst_codec_utils_mpeg4video_get_level ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_codec_utils_mpeg4video_get_level
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Converts the level indication in the stream's visual object sequence into
+a string. <em class="parameter"><code>vis_obj_seq</code></em> is expected to be the data following the visual
+object sequence start code. Only the first byte
+(profile_and_level_indication) is used.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vis_obj_seq</code></em> :</span></p></td>
+<td>Pointer to the visual object sequence for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The level as a const string, or NULL if there is an error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-mpeg4video-caps-set-level-and-profile"></a><h3>gst_codec_utils_mpeg4video_caps_set_level_and_profile ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_codec_utils_mpeg4video_caps_set_level_and_profile
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *vis_obj_seq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Sets the level and profile in <em class="parameter"><code>caps</code></em> if it can be determined from
+<em class="parameter"><code>vis_obj_seq</code></em>. See <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level" title="gst_codec_utils_mpeg4video_get_level ()"><code class="function">gst_codec_utils_mpeg4video_get_level()</code></a> and
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile" title="gst_codec_utils_mpeg4video_get_profile ()"><code class="function">gst_codec_utils_mpeg4video_get_profile()</code></a> for more details on the
+parameters.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to which the level and profile are to be added</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vis_obj_seq</code></em> :</span></p></td>
+<td>Pointer to the visual object sequence for the stream.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Length of the data available in <em class="parameter"><code>sps</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the level and profile could be set, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html
new file mode 100644
index 0000000..6d139db
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpbutilsdescriptions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">
+<link rel="next" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpbutilscodecutils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpbutilsdescriptions.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpbutilsdescriptions.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpbutilsdescriptions"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpbutilsdescriptions.top_of_page"></a>gstpbutilsdescriptions</span></h2>
+<p>gstpbutilsdescriptions — Provides human-readable descriptions for caps/codecs
+and encoder, decoder, URI source and URI sink elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpbutilsdescriptions.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/descriptions.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-source-description" title="gst_pb_utils_get_source_description ()">gst_pb_utils_get_source_description</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-sink-description" title="gst_pb_utils_get_sink_description ()">gst_pb_utils_get_sink_description</a>   (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-decoder-description" title="gst_pb_utils_get_decoder_description ()">gst_pb_utils_get_decoder_description</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-encoder-description" title="gst_pb_utils_get_encoder_description ()">gst_pb_utils_get_encoder_description</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-element-description" title="gst_pb_utils_get_element_description ()">gst_pb_utils_get_element_description</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list" title="gst_pb_utils_add_codec_description_to_tag_list ()">gst_pb_utils_add_codec_description_to_tag_list</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *codec_tag</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-codec-description" title="gst_pb_utils_get_codec_description ()">gst_pb_utils_get_codec_description</a>  (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsdescriptions.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id585754"></a><p>
+The above functions provide human-readable strings for media formats
+and decoder/demuxer/depayloader/encoder/muxer/payloader elements for use
+in error dialogs or other messages shown to users.
+</p>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list" title="gst_pb_utils_add_codec_description_to_tag_list ()"><code class="function">gst_pb_utils_add_codec_description_to_tag_list()</code></a> is a utility function
+for demuxer and decoder elements to add audio/video codec tags from a
+given (fixed) <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsdescriptions.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-pb-utils-get-source-description"></a><h3>gst_pb_utils_get_source_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_source_description (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Returns a localised string describing a source element handling the protocol
+specified in <em class="parameter"><code>protocol</code></em>, for use in error dialogs or other messages to be
+seen by the user. Should never return NULL unless <em class="parameter"><code>protocol</code></em> is invalid.
+</p>
+<p>
+This function is mainly for internal use, applications would typically
+use <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a> to get a description of
+a missing feature from a missing-plugin message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the protocol the source element needs to handle, e.g. "http"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-get-sink-description"></a><h3>gst_pb_utils_get_sink_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_sink_description   (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Returns a localised string describing a sink element handling the protocol
+specified in <em class="parameter"><code>protocol</code></em>, for use in error dialogs or other messages to be
+seen by the user. Should never return NULL unless <em class="parameter"><code>protocol</code></em> is invalid.
+</p>
+<p>
+This function is mainly for internal use, applications would typically
+use <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a> to get a description of
+a missing feature from a missing-plugin message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the protocol the sink element needs to handle, e.g. "http"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-get-decoder-description"></a><h3>gst_pb_utils_get_decoder_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_decoder_description
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Returns a localised string describing an decoder for the format specified
+in <em class="parameter"><code>caps</code></em>, for use in error dialogs or other messages to be seen by the user.
+Should never return NULL unless <em class="parameter"><code>factory_name</code></em> or <em class="parameter"><code>caps</code></em> are invalid.
+</p>
+<p>
+This function is mainly for internal use, applications would typically
+use <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a> to get a description of
+a missing feature from a missing-plugin message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the (fixed) <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> for which an decoder description is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-get-encoder-description"></a><h3>gst_pb_utils_get_encoder_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_encoder_description
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Returns a localised string describing an encoder for the format specified
+in <em class="parameter"><code>caps</code></em>, for use in error dialogs or other messages to be seen by the user.
+Should never return NULL unless <em class="parameter"><code>factory_name</code></em> or <em class="parameter"><code>caps</code></em> are invalid.
+</p>
+<p>
+This function is mainly for internal use, applications would typically
+use <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a> to get a description of
+a missing feature from a missing-plugin message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the (fixed) <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> for which an encoder description is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-get-element-description"></a><h3>gst_pb_utils_get_element_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_element_description
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);</pre>
+<p>
+Returns a localised string describing the given element, for use in
+error dialogs or other messages to be seen by the user. Should never
+return NULL unless <em class="parameter"><code>factory_name</code></em> is invalid.
+</p>
+<p>
+This function is mainly for internal use, applications would typically
+use <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a> to get a description of
+a missing feature from a missing-plugin message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>factory_name</code></em> :</span></p></td>
+<td>the name of the element, e.g. "giosrc"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-add-codec-description-to-tag-list"></a><h3>gst_pb_utils_add_codec_description_to_tag_list ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_pb_utils_add_codec_description_to_tag_list
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *codec_tag</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Adds a codec tag describing the format specified by <em class="parameter"><code>caps</code></em> to <em class="parameter"><code>taglist</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>taglist</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>codec_tag</code></em> :</span></p></td>
+<td>a GStreamer codec tag such as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-AUDIO-CODEC:CAPS"><span class="type">GST_TAG_AUDIO_CODEC</span></a>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-VIDEO-CODEC:CAPS"><span class="type">GST_TAG_VIDEO_CODEC</span></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-CODEC:CAPS"><span class="type">GST_TAG_CODEC</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the (fixed) <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> for which a codec tag should be added.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if a codec tag was added, FALSE otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-pb-utils-get-codec-description"></a><h3>gst_pb_utils_get_codec_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_pb_utils_get_codec_description  (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Returns a localised (as far as this is possible) string describing the
+media format specified in <em class="parameter"><code>caps</code></em>, for use in error dialogs or other messages
+to be seen by the user. Should never return NULL unless <em class="parameter"><code>caps</code></em> is invalid.
+</p>
+<p>
+Also see the convenience function
+<a class="link" href="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list" title="gst_pb_utils_add_codec_description_to_tag_list ()"><code class="function">gst_pb_utils_add_codec_description_to_tag_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the (fixed) <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> for which an format description is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html
new file mode 100644
index 0000000..b912f5f
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html
@@ -0,0 +1,821 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpbutilsinstallplugins</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">
+<link rel="next" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstdiscoverer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpbutilsinstallplugins.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpbutilsinstallplugins.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpbutilsinstallplugins"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpbutilsinstallplugins.top_of_page"></a>gstpbutilsinstallplugins</span></h2>
+<p>gstpbutilsinstallplugins — Missing plugin installation support for applications</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpbutilsinstallplugins.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/install-plugins.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn">GstInstallPluginsReturn</a>;
+<span class="returnvalue">void</span>                (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" title="GstInstallPluginsResultFunc ()">*GstInstallPluginsResultFunc</a>)      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="type">GstInstallPluginsReturn</span></a> result</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="returnvalue">GstInstallPluginsReturn</span></a> <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()">gst_install_plugins_async</a>       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **details</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" title="GstInstallPluginsResultFunc ()"><span class="type">GstInstallPluginsResultFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="returnvalue">GstInstallPluginsReturn</span></a> <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()">gst_install_plugins_sync</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **details</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-return-get-name" title="gst_install_plugins_return_get_name ()">gst_install_plugins_return_get_name</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="type">GstInstallPluginsReturn</span></a> ret</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-installation-in-progress" title="gst_install_plugins_installation_in_progress ()">gst_install_plugins_installation_in_progress</a>
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-supported" title="gst_install_plugins_supported ()">gst_install_plugins_supported</a>       (<em class="parameter"><code><span class="type">void</span></code></em>);
+
+                    <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext">GstInstallPluginsContext</a>;
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="returnvalue">GstInstallPluginsContext</span></a> * <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new" title="gst_install_plugins_context_new ()">gst_install_plugins_context_new</a>
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free" title="gst_install_plugins_context_free ()">gst_install_plugins_context_free</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid" title="gst_install_plugins_context_set_xid ()">gst_install_plugins_context_set_xid</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> xid</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsinstallplugins.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id583118"></a><h3>Overview</h3>
+<p>
+Using this API, applications can request the installation of missing
+GStreamer plugins. These may be missing decoders/demuxers or encoders/muxers
+for a certain format, sources or sinks for a certain URI protocol
+(e.g. 'http'), or certain elements known by their element factory name
+('audioresample').
+</p>
+<p>
+Whether plugin installation is supported or not depends on the operating
+system and/or distribution in question. The vendor of the operating system
+needs to make sure the necessary hooks and mechanisms are in place for
+plugin installation to work. See below for more detailed information.
+</p>
+<p>
+From the application perspective, plugin installation is usually triggered
+either
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+when the application itself has found that it wants or needs to install a
+certain element
+</p></li>
+<li class="listitem"><p>
+when the application has been notified by an element (such as playbin or
+decodebin) that one or more plugins are missing <span class="emphasis"><em>and</em></span>
+the application has decided that it wants to install one or more of those
+missing plugins
+</p></li>
+</ul></div>
+<p>
+</p>
+<p>
+The install functions in this section all take one or more 'detail strings'.
+These detail strings contain information about the type of plugin that
+needs to be installed (decoder, encoder, source, sink, or named element),
+and some additional information such GStreamer version used and a
+human-readable description of the component to install for user dialogs.
+</p>
+<p>
+Applications should not concern themselves with the composition of the
+string itself. They should regard the string as if it was a shared secret
+between GStreamer and the plugin installer application.
+</p>
+<p>
+Detail strings can be obtained using the function
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()"><code class="function">gst_missing_plugin_message_get_installer_detail()</code></a> on a missing-plugin
+message. Such a message will either have been found by the application on
+a pipeline's <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>, or the application will have created it itself using
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new" title="gst_missing_element_message_new ()"><code class="function">gst_missing_element_message_new()</code></a>, <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-message-new" title="gst_missing_decoder_message_new ()"><code class="function">gst_missing_decoder_message_new()</code></a>,
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-message-new" title="gst_missing_encoder_message_new ()"><code class="function">gst_missing_encoder_message_new()</code></a>, <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-message-new" title="gst_missing_uri_sink_message_new ()"><code class="function">gst_missing_uri_sink_message_new()</code></a>, or
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-message-new" title="gst_missing_uri_source_message_new ()"><code class="function">gst_missing_uri_source_message_new()</code></a>.
+</p>
+<p>
+For each GStreamer element/plugin/component that should be installed, the
+application needs one of those 'installer detail' string mentioned in the
+previous section. This string can be obtained, as already mentioned above,
+from a missing-plugin message using the function
+<a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()"><code class="function">gst_missing_plugin_message_get_installer_detail()</code></a>. The missing-plugin
+message is either posted by another element and then found on the bus
+by the application, or the application has created it itself as described
+above.
+</p>
+<p>
+The application will then call <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a>, passing a
+NULL-terminated array of installer detail strings, and a function that
+should be called when the installation of the plugins has finished
+(successfully or not). Optionally, a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> created
+with <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new" title="gst_install_plugins_context_new ()"><code class="function">gst_install_plugins_context_new()</code></a> may be passed as well. This way
+additional optional arguments like the application window's XID can be
+passed to the external installer application.
+</p>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> will return almost immediately, with the
+return code indicating whether plugin installation was started or not.
+If the necessary hooks for plugin installation are in place and an
+external installer application has in fact been called, the passed in
+function will be called with a result code as soon as the external installer
+has finished. If the result code indicates that new plugins have been
+installed, the application will want to call <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-update-registry"><code class="function">gst_update_registry()</code></a> so the
+run-time plugin registry is updated and the new plugins are made available
+to the application.
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+A Gtk/GLib main loop must be running in order for the result function to
+be called when the external installer has finished. If this is not the case,
+make sure to regularly call
+<pre class="programlisting">
+g_main_context_iteration (NULL,FALSE);
+</pre>
+from your code.
+</div>
+<p>
+</p>
+<p>
+<span class="emphasis"><em>1. Installer hook</em></span>
+</p>
+<p>
+When GStreamer applications initiate plugin installation via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>, a pre-defined
+helper application will be called.
+</p>
+<p>
+The exact path of the helper application to be called is set at compile
+time, usually by the <code class="literal">./configure</code> script based on the
+install prefix. For a normal package build into the <code class="literal">/usr</code>
+prefix, this will usually default to
+<code class="filename">/usr/libexec/gst-install-plugins-helper</code> or
+<code class="filename">/usr/lib/gst-install-plugins-helper</code>.
+</p>
+<p>
+Vendors/distros who want to support GStreamer plugin installation should
+either provide such a helper script/application or use the
+<code class="literal">./configure</code> option
+<code class="literal">--with-install-plugins-helper=/path/to/installer</code> to
+make GStreamer call an installer of their own directly.
+</p>
+<p>
+It is strongly recommended that vendors provide a small helper application
+as interlocutor to the real installer though, even more so if command line
+argument munging is required to transform the command line arguments
+passed by GStreamer to the helper application into arguments that are
+understood by the real installer.
+</p>
+<p>
+The helper application path defined at compile time can be overriden at
+runtime by setting the <code class="envar">GST_INSTALL_PLUGINS_HELPER</code>
+environment variable. This can be useful for testing/debugging purposes.
+</p>
+<p>
+<span class="emphasis"><em>2. Arguments passed to the install helper</em></span>
+</p>
+<p>
+GStreamer will pass the following arguments to the install helper (this is
+in addition to the path of the executable itself, which is by convention
+argv[0]):
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+   none to many optional arguments in the form of
+   <code class="literal">--foo-bar=val</code>. Example:
+   <code class="literal">--transient-for=XID</code> where XID is the X Window ID of
+   the main window of the calling application (so the installer can make
+   itself transient to that window). Unknown optional arguments should
+   be ignored by the installer.
+ </p></li>
+<li class="listitem"><p>
+   one 'installer detail string' argument for each plugin to be installed;
+   these strings will have a <code class="literal">gstreamer</code> prefix; the
+   exact format of the detail string is explained below
+ </p></li>
+</ul></div>
+<p>
+</p>
+<p>
+<span class="emphasis"><em>3. Detail string describing the missing plugin</em></span>
+</p>
+<p>
+The string is in UTF-8 encoding and is made up of several fields, separated
+by '|' characters (but neither the first nor the last character is a '|').
+The fields are:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<p>
+   plugin system identifier, ie. "gstreamer"
+  </p>
+<p>
+   This identifier determines the format of the rest of the detail string.
+   Automatic plugin installers should not process detail strings with
+   unknown identifiers. This allows other plugin-based libraries to use
+   the same mechanism for their automatic plugin installation needs, or
+   for the format to be changed should it turn out to be insufficient.
+  </p>
+</li>
+<li class="listitem">
+<p>
+   plugin system version, e.g. "0.10"
+  </p>
+<p>
+   This is required so that when there is a GStreamer-0.12 or GStreamer-1.0
+   at some point in future, the different major versions can still co-exist
+   and use the same plugin install mechanism in the same way.
+  </p>
+</li>
+<li class="listitem">
+<p>
+   application identifier, e.g. "totem"
+  </p>
+<p>
+   This may also be in the form of "pid/12345" if the program name can't
+   be obtained for some reason.
+  </p>
+</li>
+<li class="listitem"><p>
+   human-readable localised description of the required component,
+   e.g. "Vorbis audio decoder"
+  </p></li>
+<li class="listitem">
+<p>
+   identifier string for the required component (see below for details about
+   how to map this to the package/plugin that needs installing), e.g.
+   </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem"><p>
+      urisource-$(PROTOCOL_REQUIRED), e.g. urisource-http or urisource-mms
+    </p></li>
+<li class="listitem"><p>
+      element-$(ELEMENT_REQUIRED), e.g. element-videoconvert
+    </p></li>
+<li class="listitem">
+<p>
+      decoder-$(CAPS_REQUIRED), e.g. (do read below for more details!):
+      </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="square">
+<li class="listitem"><p>decoder-audio/x-vorbis</p></li>
+<li class="listitem"><p>decoder-application/ogg</p></li>
+<li class="listitem"><p>decoder-audio/mpeg, mpegversion=(int)4</p></li>
+<li class="listitem"><p>decoder-video/mpeg, systemstream=(boolean)true, mpegversion=(int)2</p></li>
+</ul></div>
+<p>
+    </p>
+</li>
+<li class="listitem"><p>
+      encoder-$(CAPS_REQUIRED), e.g. encoder-audio/x-vorbis
+    </p></li>
+</ul></div>
+<p>
+  </p>
+</li>
+<li class="listitem"><p>
+    optional further fields not yet specified
+  </p></li>
+</ul></div>
+<p>
+</p>
+<p>
+An entire ID string might then look like this, for example:
+<code class="literal">
+gstreamer|0.10|totem|Vorbis audio decoder|decoder-audio/x-vorbis
+</code>
+</p>
+<p>
+Plugin installers parsing this ID string should expect further fields also
+separated by '|' symbols and either ignore them, warn the user, or error
+out when encountering them.
+</p>
+<p>
+Those unfamiliar with the GStreamer 'caps' system should note a few things
+about the caps string used in the above decoder/encoder case:
+  </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+      the first part ("video/mpeg") of the caps string is a GStreamer media
+      type and <span class="emphasis"><em>not</em></span> a MIME type. Wherever possible, the
+      GStreamer media type will be the same as the corresponding MIME type,
+      but often it is not.
+    </p></li>
+<li class="listitem"><p>
+      a caps string may or may not have additional comma-separated fields
+      of various types (as seen in the examples above)
+    </p></li>
+<li class="listitem">
+<p>
+      the caps string of a 'required' component (as above) will always have
+      fields with fixed values, whereas an introspected string (see below)
+      may have fields with non-fixed values. Compare for example:
+      </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem"><p>
+          <code class="literal">audio/mpeg, mpegversion=(int)4</code> vs.
+          <code class="literal">audio/mpeg, mpegversion=(int){2, 4}</code>
+        </p></li>
+<li class="listitem"><p>
+          <code class="literal">video/mpeg, mpegversion=(int)2</code> vs.
+          <code class="literal">video/mpeg, systemstream=(boolean){ true, false}, mpegversion=(int)[1, 2]</code>
+        </p></li>
+</ul></div>
+<p>
+    </p>
+</li>
+</ul></div>
+<p>
+</p>
+<p>
+<span class="emphasis"><em>4. Exit codes the installer should return</em></span>
+</p>
+<p>
+The installer should return one of the following exit codes when it exits:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+    0 if all of the requested plugins could be installed
+    (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-SUCCESS:CAPS"><span class="type">GST_INSTALL_PLUGINS_SUCCESS</span></a>)
+  </p></li>
+<li class="listitem"><p>
+    1 if no appropriate installation candidate for any of the requested
+    plugins could be found. Only return this if nothing has been installed
+    (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-NOT-FOUND:CAPS"><span class="type">GST_INSTALL_PLUGINS_NOT_FOUND</span></a>)
+  </p></li>
+<li class="listitem"><p>
+    2 if an error occured during the installation. The application will
+    assume that the user will already have seen an error message by the
+    installer in this case and will usually not show another one
+    (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-ERROR:CAPS"><span class="type">GST_INSTALL_PLUGINS_ERROR</span></a>)
+  </p></li>
+<li class="listitem"><p>
+    3 if some of the requested plugins could be installed, but not all
+    (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS"><span class="type">GST_INSTALL_PLUGINS_PARTIAL_SUCCESS</span></a>)
+  </p></li>
+<li class="listitem"><p>
+    4 if the user aborted the installation (<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-USER-ABORT:CAPS"><span class="type">GST_INSTALL_PLUGINS_USER_ABORT</span></a>)
+  </p></li>
+</ul></div>
+<p>
+</p>
+<p>
+<span class="emphasis"><em>5. How to map the required detail string to packages</em></span>
+</p>
+<p>
+It is up to the vendor to find mechanism to map required components from
+the detail string to the actual packages/plugins to install. This could
+be a hardcoded list of mappings, for example, or be part of the packaging
+system metadata.
+</p>
+<p>
+GStreamer plugin files can be introspected for this information. The
+<code class="literal">gst-inspect</code> utility has a special command line option
+that will output information similar to what is required. For example
+<span class="command"><strong>
+$ gst-inspect-0.10 --print-plugin-auto-install-info /path/to/libgstvorbis.so
+</strong></span>
+should output something along the lines of
+<code class="computeroutput">
+decoder-audio/x-vorbis
+element-vorbisdec
+element-vorbisenc
+element-vorbisparse
+element-vorbistag
+encoder-audio/x-vorbis
+</code>
+Note that in the encoder and decoder case the introspected caps can be more
+complex with additional fields, e.g.
+<code class="literal">audio/mpeg,mpegversion=(int){2,4}</code>, so they will not
+always exactly match the caps wanted by the application. It is up to the
+installer to deal with this (either by doing proper caps intersection using
+the GStreamer <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> API, or by only taking into account the media type).
+</p>
+<p>
+Another potential source of problems are plugins such as ladspa or
+libvisual where the list of elements depends on the installed
+ladspa/libvisual plugins at the time. This is also up to the distribution
+to handle (but usually not relevant for playback applications).
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsinstallplugins.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstInstallPluginsReturn"></a><h3>enum GstInstallPluginsReturn</h3>
+<pre class="programlisting">typedef enum {
+  /* Return codes from the installer. Returned by gst_install_plugins_sync(),
+   * or passed as result code to your #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_SUCCESS = 0,
+  GST_INSTALL_PLUGINS_NOT_FOUND = 1,
+  GST_INSTALL_PLUGINS_ERROR = 2,
+  GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3,
+  GST_INSTALL_PLUGINS_USER_ABORT = 4,
+
+  /* Returned by gst_install_plugins_sync(), or passed as result code to your
+   * #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_CRASHED = 100,
+  GST_INSTALL_PLUGINS_INVALID,
+
+  /* Return codes from starting the external helper, may be returned by both
+   * gst_install_plugins_sync() and gst_install_plugins_async(), but should
+   * never be seen by a #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_STARTED_OK = 200,
+  GST_INSTALL_PLUGINS_INTERNAL_FAILURE,
+  GST_INSTALL_PLUGINS_HELPER_MISSING,
+  GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS
+} GstInstallPluginsReturn;
+</pre>
+<p>
+Result codes returned by <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> and
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>, and also the result code passed to the
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" title="GstInstallPluginsResultFunc ()"><span class="type">GstInstallPluginsResultFunc</span></a> specified with <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a>.
+</p>
+<p>
+These codes indicate success or failure of starting an external installer
+program and to what extent the requested plugins could be installed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-SUCCESS:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_SUCCESS</code></span></p></td>
+<td>all of the requested plugins could be
+    installed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-NOT-FOUND:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_NOT_FOUND</code></span></p></td>
+<td>no appropriate installation candidate for
+    any of the requested plugins could be found. Only return this if nothing
+    has been installed. Return <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS"><span class="type">GST_INSTALL_PLUGINS_PARTIAL_SUCCESS</span></a> if
+    some (but not all) of the requested plugins could be installed.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-ERROR:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_ERROR</code></span></p></td>
+<td>an error occured during the installation. If
+    this happens, the  user has already seen an error message and another
+    one should not be displayed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_PARTIAL_SUCCESS</code></span></p></td>
+<td>some of the requested plugins could
+    be installed, but not all
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-USER-ABORT:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_USER_ABORT</code></span></p></td>
+<td>the user has aborted the installation
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-CRASHED:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_CRASHED</code></span></p></td>
+<td>the installer had an unclean exit code
+    (ie. death by signal)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-INVALID:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_INVALID</code></span></p></td>
+<td>the helper returned an invalid status code
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-STARTED-OK:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_STARTED_OK</code></span></p></td>
+<td>returned by <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> to
+    indicate that everything went fine so far and the provided callback
+    will be called with the result of the installation later
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_INTERNAL_FAILURE</code></span></p></td>
+<td>some internal failure has
+    occured when trying to start the installer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_HELPER_MISSING</code></span></p></td>
+<td>the helper script to call the
+    actual installer is not installed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS"></a><span class="term"><code class="literal">GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS</code></span></p></td>
+<td>a previously-started plugin
+    installation is still in progress, try again later
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstInstallPluginsResultFunc"></a><h3>GstInstallPluginsResultFunc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                (*GstInstallPluginsResultFunc)      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="type">GstInstallPluginsReturn</span></a> result</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+The prototype of the callback function that will be called once the
+external plugin installer program has returned. You only need to provide
+a callback function if you are using the asynchronous interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>whether the installation of the requested plugins succeeded or not</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>the user data passed to <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-async"></a><h3>gst_install_plugins_async ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="returnvalue">GstInstallPluginsReturn</span></a> gst_install_plugins_async       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **details</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" title="GstInstallPluginsResultFunc ()"><span class="type">GstInstallPluginsResultFunc</span></a> func</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Requests plugin installation without blocking. Once the plugins have been
+installed or installation has failed, <em class="parameter"><code>func</code></em> will be called with the result
+of the installation and your provided <em class="parameter"><code>user_data</code></em> pointer.
+</p>
+<p>
+This function requires a running GLib/Gtk main loop. If you are not
+running a GLib/Gtk main loop, make sure to regularly call
+g_main_context_iteration(NULL,FALSE).
+</p>
+<p>
+The installer strings that make up <em class="parameter"><code>detail</code></em> are typically obtained by
+calling <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()"><code class="function">gst_missing_plugin_message_get_installer_detail()</code></a> on missing-plugin
+messages that have been caught on a pipeline's bus or created by the
+application via the provided API, such as <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new" title="gst_missing_element_message_new ()"><code class="function">gst_missing_element_message_new()</code></a>.
+</p>
+<p>
+It is possible to request the installation of multiple missing plugins in
+one go (as might be required if there is a demuxer for a certain format
+installed but no suitable video decoder and no suitable audio decoder).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
+<td>NULL-terminated array of installer string details (see below)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td>the function to call when the installer program returns. <span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>the user data to pass to <em class="parameter"><code>func</code></em> when called, or NULL. <span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>result code whether an external installer could be started</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-sync"></a><h3>gst_install_plugins_sync ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="returnvalue">GstInstallPluginsReturn</span></a> gst_install_plugins_sync        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **details</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>);</pre>
+<p>
+Requests plugin installation and block until the plugins have been
+installed or installation has failed.
+</p>
+<p>
+This function should almost never be used, it only exists for cases where
+a non-GLib main loop is running and the user wants to run it in a separate
+thread and marshal the result back asynchronously into the main thread
+using the other non-GLib main loop. You should almost always use
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> instead of this function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
+<td>NULL-terminated array of installer string details</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the result of the installation.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-return-get-name"></a><h3>gst_install_plugins_return_get_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_install_plugins_return_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" title="enum GstInstallPluginsReturn"><span class="type">GstInstallPluginsReturn</span></a> ret</code></em>);</pre>
+<p>
+Convenience function to return the descriptive string associated
+with a status code.  This function returns English strings and
+should not be used for user messages. It is here only to assist
+in debugging.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ret</code></em> :</span></p></td>
+<td>the return status code</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a descriptive string for the status code in <em class="parameter"><code>ret</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-installation-in-progress"></a><h3>gst_install_plugins_installation_in_progress ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_install_plugins_installation_in_progress
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Checks whether plugin installation (initiated by this application only)
+is currently in progress.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if plugin installation is in progress, otherwise FALSE</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-supported"></a><h3>gst_install_plugins_supported ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_install_plugins_supported       (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Checks whether plugin installation is likely to be supported by the
+current environment. This currently only checks whether the helper script
+that is to be provided by the distribution or operating system vendor
+exists.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if plugin installation is likely to be supported.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstInstallPluginsContext"></a><h3>GstInstallPluginsContext</h3>
+<pre class="programlisting">typedef struct _GstInstallPluginsContext GstInstallPluginsContext;</pre>
+<p>
+Opaque context structure for the plugin installation. Use the provided
+API to set details on it.
+</p>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-new"></a><h3>gst_install_plugins_context_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="returnvalue">GstInstallPluginsContext</span></a> * gst_install_plugins_context_new
+                                                        (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Creates a new <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>. Free with
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free" title="gst_install_plugins_context_free ()"><code class="function">gst_install_plugins_context_free()</code></a> when no longer needed</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-free"></a><h3>gst_install_plugins_context_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_install_plugins_context_free    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>);</pre>
+<p>
+Frees a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-set-xid"></a><h3>gst_install_plugins_context_set_xid ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_install_plugins_context_set_xid (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> xid</code></em>);</pre>
+<p>
+This function is for X11-based applications (such as most Gtk/Qt
+applications on linux/unix) only. You can use it to tell the external
+installer the XID of your main application window. That way the installer
+can make its own window transient to your application window during the
+installation.
+</p>
+<p>
+If set, the XID will be passed to the installer via a --transient-for=XID
+command line option.
+</p>
+<p>
+Gtk+/Gnome application should be able to obtain the XID of the top-level
+window like this:
+</p>
+<pre class="programlisting">
+##include &lt;gtk/gtk.h&gt;
+##ifdef GDK_WINDOWING_X11
+##include &lt;gdk/gdkx.h&gt;
+##endif
+...
+##ifdef GDK_WINDOWING_X11
+  xid = GDK_WINDOW_XWINDOW (GTK_WIDGET (application_window)-&gt;window);
+##endif
+...
+</pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>xid</code></em> :</span></p></td>
+<td>the XWindow ID (XID) of the top-level application</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html
new file mode 100644
index 0000000..95f0f50
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html
@@ -0,0 +1,510 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpbutilsmissingplugins</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">
+<link rel="next" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpbutilsdescriptions.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpbutilsmissingplugins.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpbutilsmissingplugins.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpbutilsmissingplugins"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpbutilsmissingplugins.top_of_page"></a>gstpbutilsmissingplugins</span></h2>
+<p>gstpbutilsmissingplugins — Create, recognise and parse missing-plugins messages</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpbutilsmissingplugins.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/missing-plugins.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()">gst_missing_plugin_message_get_installer_detail</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()">gst_missing_plugin_message_get_description</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message" title="gst_is_missing_plugin_message ()">gst_is_missing_plugin_message</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);
+
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-message-new" title="gst_missing_decoder_message_new ()">gst_missing_decoder_message_new</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *decode_caps</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-message-new" title="gst_missing_encoder_message_new ()">gst_missing_encoder_message_new</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *encode_caps</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-message-new" title="gst_missing_uri_source_message_new ()">gst_missing_uri_source_message_new</a>  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-message-new" title="gst_missing_uri_sink_message_new ()">gst_missing_uri_sink_message_new</a>    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new" title="gst_missing_element_message_new ()">gst_missing_element_message_new</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-installer-detail-new" title="gst_missing_uri_source_installer_detail_new ()">gst_missing_uri_source_installer_detail_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-installer-detail-new" title="gst_missing_uri_sink_installer_detail_new ()">gst_missing_uri_sink_installer_detail_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-installer-detail-new" title="gst_missing_element_installer_detail_new ()">gst_missing_element_installer_detail_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-installer-detail-new" title="gst_missing_decoder_installer_detail_new ()">gst_missing_decoder_installer_detail_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *decode_caps</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-installer-detail-new" title="gst_missing_encoder_installer_detail_new ()">gst_missing_encoder_installer_detail_new</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *encode_caps</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsmissingplugins.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id605343"></a><p>
+Functions to create, recognise and parse missing-plugins messages for
+applications and elements.
+</p>
+<p>
+Missing-plugin messages are posted on the bus by elements like decodebin
+or playbin if they can't find an appropriate source element or decoder
+element. The application can use these messages for two things:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+    concise error/problem reporting to the user mentioning what exactly
+    is missing, see <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description" title="gst_missing_plugin_message_get_description ()"><code class="function">gst_missing_plugin_message_get_description()</code></a>
+  </p></li>
+<li class="listitem"><p>
+    initiate installation of missing plugins, see
+    <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail" title="gst_missing_plugin_message_get_installer_detail ()"><code class="function">gst_missing_plugin_message_get_installer_detail()</code></a> and
+    <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a>
+  </p></li>
+</ul></div>
+<p>
+</p>
+<p>
+Applications may also create missing-plugin messages themselves to install
+required elements that are missing, using the install mechanism mentioned
+above.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpbutilsmissingplugins.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-missing-plugin-message-get-installer-detail"></a><h3>gst_missing_plugin_message_get_installer_detail ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_plugin_message_get_installer_detail
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-plugin-message-get-description"></a><h3>gst_missing_plugin_message_get_description ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_plugin_message_get_description
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);</pre>
+<p>
+Returns a localised string describing the missing feature, for use in
+error dialogs and the like. Should never return NULL unless <em class="parameter"><code>msg</code></em> is not
+a valid missing-plugin message.
+</p>
+<p>
+This function is mainly for applications that need a human-readable string
+describing a missing plugin, given a previously collected missing-plugin
+message
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated description string, or NULL on error. Free
+string with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-is-missing-plugin-message"></a><h3>gst_is_missing_plugin_message ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_is_missing_plugin_message       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *msg</code></em>);</pre>
+<p>
+Checks whether <em class="parameter"><code>msg</code></em> is a missing plugins message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>msg</code></em> is a missing-plugins message, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-decoder-message-new"></a><h3>gst_missing_decoder_message_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_missing_decoder_message_new     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *decode_caps</code></em>);</pre>
+<p>
+Creates a missing-plugin message for <em class="parameter"><code>element</code></em> to notify the application
+that a decoder element for a particular set of (fixed) caps is missing.
+This function is mainly for use in plugins.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> posting the message</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>decode_caps</code></em> :</span></p></td>
+<td>the (fixed) caps for which a decoder element is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or NULL on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-encoder-message-new"></a><h3>gst_missing_encoder_message_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_missing_encoder_message_new     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *encode_caps</code></em>);</pre>
+<p>
+Creates a missing-plugin message for <em class="parameter"><code>element</code></em> to notify the application
+that an encoder element for a particular set of (fixed) caps is missing.
+This function is mainly for use in plugins.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> posting the message</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>encode_caps</code></em> :</span></p></td>
+<td>the (fixed) caps for which an encoder element is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or NULL on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-uri-source-message-new"></a><h3>gst_missing_uri_source_message_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_missing_uri_source_message_new  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Creates a missing-plugin message for <em class="parameter"><code>element</code></em> to notify the application
+that a source element for a particular URI protocol is missing. This
+function is mainly for use in plugins.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> posting the message</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the URI protocol the missing source needs to implement,
+e.g. "http" or "mms"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or NULL on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-uri-sink-message-new"></a><h3>gst_missing_uri_sink_message_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_missing_uri_sink_message_new    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Creates a missing-plugin message for <em class="parameter"><code>element</code></em> to notify the application
+that a sink element for a particular URI protocol is missing. This
+function is mainly for use in plugins.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> posting the message</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the URI protocol the missing sink needs to implement,
+e.g. "http" or "smb"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or NULL on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-element-message-new"></a><h3>gst_missing_element_message_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="returnvalue">GstMessage</span></a> *        gst_missing_element_message_new     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);</pre>
+<p>
+Creates a missing-plugin message for <em class="parameter"><code>element</code></em> to notify the application
+that a certain required element is missing. This function is mainly for
+use in plugins.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> posting the message</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>factory_name</code></em> :</span></p></td>
+<td>the name of the missing element (element factory),
+e.g. "videoscale" or "cdparanoiasrc"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a>, or NULL on error. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-uri-source-installer-detail-new"></a><h3>gst_missing_uri_source_installer_detail_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_uri_source_installer_detail_new
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions in
+the case where the application knows exactly what kind of plugin it is
+missing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the URI protocol the missing source needs to implement,
+e.g. "http" or "mms"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-uri-sink-installer-detail-new"></a><h3>gst_missing_uri_sink_installer_detail_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_uri_sink_installer_detail_new
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *protocol</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions in
+the case where the application knows exactly what kind of plugin it is
+missing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>protocol</code></em> :</span></p></td>
+<td>the URI protocol the missing source needs to implement,
+e.g. "http" or "mms"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-element-installer-detail-new"></a><h3>gst_missing_element_installer_detail_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_element_installer_detail_new
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory_name</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions in
+the case where the application knows exactly what kind of plugin it is
+missing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>factory_name</code></em> :</span></p></td>
+<td>the name of the missing element (element factory),
+e.g. "videoscale" or "cdparanoiasrc"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-decoder-installer-detail-new"></a><h3>gst_missing_decoder_installer_detail_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_decoder_installer_detail_new
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *decode_caps</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions in
+the case where the application knows exactly what kind of plugin it is
+missing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>decode_caps</code></em> :</span></p></td>
+<td>the (fixed) caps for which a decoder element is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-missing-encoder-installer-detail-new"></a><h3>gst_missing_encoder_installer_detail_new ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_missing_encoder_installer_detail_new
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *encode_caps</code></em>);</pre>
+<p>
+Returns an opaque string containing all the details about the missing
+element to be passed to an external installer called via
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" title="gst_install_plugins_async ()"><code class="function">gst_install_plugins_async()</code></a> or <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" title="gst_install_plugins_sync ()"><code class="function">gst_install_plugins_sync()</code></a>.
+</p>
+<p>
+This function is mainly for applications that call external plugin
+installation mechanisms using one of the two above-mentioned functions in
+the case where the application knows exactly what kind of plugin it is
+missing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>encode_caps</code></em> :</span></p></td>
+<td>the (fixed) caps for which an encoder element is needed</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated detail string, or NULL on error. Free string
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
new file mode 100644
index 0000000..6338efa
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpluginsbaseversion</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpbutils.html" title="gstpbutils">
+<link rel="next" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpbutils.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-base-utils.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpbutilscodecutils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpluginsbaseversion.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpluginsbaseversion.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpluginsbaseversion"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpluginsbaseversion.top_of_page"></a>gstpluginsbaseversion</span></h2>
+<p>gstpluginsbaseversion — GStreamer gst-plugins-base libraries version macros.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpluginsbaseversion.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/pbutils/gstpluginsbaseversion.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MAJOR:CAPS" title="GST_PLUGINS_BASE_VERSION_MAJOR">GST_PLUGINS_BASE_VERSION_MAJOR</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MINOR:CAPS" title="GST_PLUGINS_BASE_VERSION_MINOR">GST_PLUGINS_BASE_VERSION_MINOR</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MICRO:CAPS" title="GST_PLUGINS_BASE_VERSION_MICRO">GST_PLUGINS_BASE_VERSION_MICRO</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-NANO:CAPS" title="GST_PLUGINS_BASE_VERSION_NANO">GST_PLUGINS_BASE_VERSION_NANO</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-CHECK-PLUGINS-BASE-VERSION:CAPS" title="GST_CHECK_PLUGINS_BASE_VERSION()">GST_CHECK_PLUGINS_BASE_VERSION</a>      (major,
+                                                         minor,
+                                                         micro)
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version" title="gst_plugins_base_version ()">gst_plugins_base_version</a>            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *major</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *minor</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *micro</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *nano</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version-string" title="gst_plugins_base_version_string ()">gst_plugins_base_version_string</a>     (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpluginsbaseversion.description"></a><h2>Description</h2>
+<p>
+Use the GST_PLUGINS_BASE_VERSION_* macros e.g. to check what version of
+gst-plugins-base you are building against, and <a class="link" href="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version" title="gst_plugins_base_version ()"><code class="function">gst_plugins_base_version()</code></a>
+if you need to check at runtime what version of the gst-plugins-base
+libraries are being used / you are currently linked against.
+</p>
+<p>
+The version macros get defined by including &lt;gst/pbutils/pbutils.h&gt;.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpluginsbaseversion.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-PLUGINS-BASE-VERSION-MAJOR:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MAJOR</h3>
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MAJOR (0)
+</pre>
+<p>
+The major version of GStreamer's gst-plugins-base libraries at compile time.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-PLUGINS-BASE-VERSION-MINOR:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MINOR</h3>
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MINOR (11)
+</pre>
+<p>
+The minor version of GStreamer's gst-plugins-base libraries at compile time.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-PLUGINS-BASE-VERSION-MICRO:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MICRO</h3>
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (1)
+</pre>
+<p>
+The micro version of GStreamer's gst-plugins-base libraries at compile time.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-PLUGINS-BASE-VERSION-NANO:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_NANO</h3>
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_NANO (0)
+</pre>
+<p>
+The nano version of GStreamer's gst-plugins-base libraries at compile time.
+Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-CHECK-PLUGINS-BASE-VERSION:CAPS"></a><h3>GST_CHECK_PLUGINS_BASE_VERSION()</h3>
+<pre class="programlisting">#define             GST_CHECK_PLUGINS_BASE_VERSION(major,minor,micro)</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-plugins-base-version"></a><h3>gst_plugins_base_version ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_plugins_base_version            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *major</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *minor</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *micro</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *nano</code></em>);</pre>
+<p>
+Gets the version number of the GStreamer Plugins Base libraries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>major</code></em> :</span></p></td>
+<td>pointer to a guint to store the major version number, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>minor</code></em> :</span></p></td>
+<td>pointer to a guint to store the minor version number, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>micro</code></em> :</span></p></td>
+<td>pointer to a guint to store the micro version number, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nano</code></em> :</span></p></td>
+<td>pointer to a guint to store the nano version number, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-plugins-base-version-string"></a><h3>gst_plugins_base_version_string ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_plugins_base_version_string     (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+This function returns a string that is useful for describing this version
+of GStreamer's gst-plugins-base libraries to the outside world: user agent
+strings, logging, about dialogs ...
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated string describing this version of gst-plugins-base</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpropertyprobe.html b/docs/libs/html/gst-plugins-base-libs-gstpropertyprobe.html
new file mode 100644
index 0000000..81fa29b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstpropertyprobe.html
@@ -0,0 +1,449 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstpropertyprobe</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">
+<link rel="next" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstnavigation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gststreamvolume.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstpropertyprobe.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpropertyprobe.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpropertyprobe.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstpropertyprobe.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstpropertyprobe"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstpropertyprobe.top_of_page"></a>gstpropertyprobe</span></h2>
+<p>gstpropertyprobe — Interface for probing possible property values</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstpropertyprobe.synopsis"></a><h2>Synopsis</h2>
+<a name="GstPropertyProbe"></a><pre class="synopsis">
+#include &lt;gst/interfaces/propertyprobe.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-struct" title="GstPropertyProbe">GstPropertyProbe</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbeInterface" title="struct GstPropertyProbeInterface">GstPropertyProbeInterface</a>;
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-properties" title="gst_property_probe_get_properties ()">gst_property_probe_get_properties</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>);
+const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="returnvalue">GParamSpec</span></a> *  <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-property" title="gst_property_probe_get_property ()">gst_property_probe_get_property</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values" title="gst_property_probe_get_values ()">gst_property_probe_get_values</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values-name" title="gst_property_probe_get_values_name ()">gst_property_probe_get_values_name</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe" title="gst_property_probe_needs_probe ()">gst_property_probe_needs_probe</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe-name" title="gst_property_probe_needs_probe_name ()">gst_property_probe_needs_probe_name</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values" title="gst_property_probe_probe_and_get_values ()">gst_property_probe_probe_and_get_values</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values-name" title="gst_property_probe_probe_and_get_values_name ()">gst_property_probe_probe_and_get_values_name</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property" title="gst_property_probe_probe_property ()">gst_property_probe_probe_property</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property-name" title="gst_property_probe_probe_property_name ()">gst_property_probe_probe_property_name</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpropertyprobe.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstPropertyProbe
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpropertyprobe.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-probe-needed" title='The "probe-needed" signal'>probe-needed</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpropertyprobe.description"></a><h2>Description</h2>
+<p>
+The property probe is a way to autodetect allowed values for a GObject
+property. It's primary use is to autodetect device-names in several elements.
+</p>
+<p>
+The interface is implemented by many hardware sources and sinks.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpropertyprobe.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstPropertyProbe-struct"></a><h3>GstPropertyProbe</h3>
+<pre class="programlisting">typedef struct _GstPropertyProbe GstPropertyProbe;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> data structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPropertyProbeInterface"></a><h3>struct GstPropertyProbeInterface</h3>
+<pre class="programlisting">struct GstPropertyProbeInterface {
+  GTypeInterface klass;
+
+  /* signals */
+  void          (*probe_needed)   (GstPropertyProbe *probe,
+                                   const GParamSpec *pspec);
+
+  /* virtual functions */
+  const GList * (*get_properties) (GstPropertyProbe *probe);
+  gboolean      (*needs_probe)    (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+  void          (*probe_property) (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+  GValueArray * (*get_values)     (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstPropertyProbeInterface.klass"></a>klass</code></em>;</span></p></td>
+<td>parent interface type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstPropertyProbeInterface.probe-needed"></a>probe_needed</code></em> ()</span></p></td>
+<td>default signal handler</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstPropertyProbeInterface.get-properties"></a>get_properties</code></em> ()</span></p></td>
+<td>virtual method to get list of probable properties</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstPropertyProbeInterface.needs-probe"></a>needs_probe</code></em> ()</span></p></td>
+<td>virtual method to tell if probe need update</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstPropertyProbeInterface.probe-property"></a>probe_property</code></em> ()</span></p></td>
+<td>virtual method to probe a property</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstPropertyProbeInterface.get-values"></a>get_values</code></em> ()</span></p></td>
+<td>virtual method to get probe results for a property</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-get-properties"></a><h3>gst_property_probe_get_properties ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_property_probe_get_properties   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>);</pre>
+<p>
+Get a list of properties for which probing is supported.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> to get the properties for.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the list of properties for which probing is supported
+by this element.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-get-property"></a><h3>gst_property_probe_get_property ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="returnvalue">GParamSpec</span></a> *  gst_property_probe_get_property     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Get <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> for a property for which probing is supported.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> to get the properties for.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>name of the property.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> of <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-get-values"></a><h3>gst_property_probe_get_values ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       gst_property_probe_get_values       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);</pre>
+<p>
+Gets the possible (probed) values for the given property,
+requires the property to have been probed before.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
+<td>the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> property identifier.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of valid values for the given property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-get-values-name"></a><h3>gst_property_probe_get_values_name ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       gst_property_probe_get_values_name  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Same as <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values" title="gst_property_probe_get_values ()"><code class="function">gst_property_probe_get_values()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the property to get values for.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of valid values for the given property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-needs-probe"></a><h3>gst_property_probe_needs_probe ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_property_probe_needs_probe      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);</pre>
+<p>
+Checks whether a property needs a probe. This might be because
+the property wasn't initialized before, or because host setup
+changed. This might be, for example, because a new device was
+added, and thus device probing needs to be refreshed to display
+the new device.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object to which the given property belongs.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> that identifies the property to check.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the property needs a new probe, FALSE if not.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-needs-probe-name"></a><h3>gst_property_probe_needs_probe_name ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_property_probe_needs_probe_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Same as <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe" title="gst_property_probe_needs_probe ()"><code class="function">gst_property_probe_needs_probe()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object to which the given property belongs.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the property to check.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the property needs a new probe, FALSE if not.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-probe-and-get-values"></a><h3>gst_property_probe_probe_and_get_values ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       gst_property_probe_probe_and_get_values
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);</pre>
+<p>
+Check whether the given property requires a new probe. If so,
+fo the probe. After that, retrieve a value list. Meant as a
+utility function that wraps the above functions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
+<td>The <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> property identifier.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the list of valid values for this property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-probe-and-get-values-name"></a><h3>gst_property_probe_probe_and_get_values_name ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a> *       gst_property_probe_probe_and_get_values_name
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Same as <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values" title="gst_property_probe_probe_and_get_values ()"><code class="function">gst_property_probe_probe_and_get_values()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> object.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the property to get values for.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the list of valid values for this property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-probe-property"></a><h3>gst_property_probe_probe_property ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_property_probe_probe_property   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> *pspec</code></em>);</pre>
+<p>
+Runs a probe on the property specified by <em class="parameter"><code>pspec</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> to check.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> of the property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-property-probe-probe-property-name"></a><h3>gst_property_probe_probe_property_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_property_probe_probe_property_name
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *probe</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Runs a probe on the property specified by <em class="parameter"><code>name</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>probe</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> to check.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>name of the property.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstpropertyprobe.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstPropertyProbe-probe-needed"></a><h3>The <code class="literal">"probe-needed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe"><span class="type">GstPropertyProbe</span></a> *pspec,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>          arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>          user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> that needs a probe</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstriff.html b/docs/libs/html/gst-plugins-base-libs-gstriff.html
new file mode 100644
index 0000000..83b7f23
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstriff.html
@@ -0,0 +1,507 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstriff</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-riff.html" title="Riff Media Library">
+<link rel="prev" href="gstreamer-riff.html" title="Riff Media Library">
+<link rel="next" href="gstreamer-rtp.html" title="RTP Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-riff.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-riff.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-rtp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstriff.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstriff.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstriff"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstriff.top_of_page"></a>gstriff</span></h2>
+<p>gstriff — Riff fileformat utillity functions.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstriff.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/riff/riff-media.h&gt;
+
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-caps" title="gst_riff_create_audio_caps ()">gst_riff_create_audio_caps</a>          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> codec_id</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-auds"><span class="type">gst_riff_strf_auds</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-template-caps" title="gst_riff_create_audio_template_caps ()">gst_riff_create_audio_template_caps</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-caps" title="gst_riff_create_iavs_caps ()">gst_riff_create_iavs_caps</a>           (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> codec_fcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-iavs"><span class="type">gst_riff_strf_iavs</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-template-caps" title="gst_riff_create_iavs_template_caps ()">gst_riff_create_iavs_template_caps</a>  (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-caps" title="gst_riff_create_video_caps ()">gst_riff_create_video_caps</a>          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> codec_fcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-vids"><span class="type">gst_riff_strf_vids</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-template-caps" title="gst_riff_create_video_template_caps ()">gst_riff_create_video_template_caps</a> (<em class="parameter"><code><span class="type">void</span></code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-init" title="gst_riff_init ()">gst_riff_init</a>                       (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-chunk" title="gst_riff_parse_chunk ()">gst_riff_parse_chunk</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *fourcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **chunk_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-file-header" title="gst_riff_parse_file_header ()">gst_riff_parse_file_header</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *doctype</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-info" title="gst_riff_parse_info ()">gst_riff_parse_info</a>                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> **taglist</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-auds" title="gst_riff_parse_strf_auds ()">gst_riff_parse_strf_auds</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-auds"><span class="type">gst_riff_strf_auds</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-iavs" title="gst_riff_parse_strf_iavs ()">gst_riff_parse_strf_iavs</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-iavs"><span class="type">gst_riff_strf_iavs</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-vids" title="gst_riff_parse_strf_vids ()">gst_riff_parse_strf_vids</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-vids"><span class="type">gst_riff_strf_vids</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strh" title="gst_riff_parse_strh ()">gst_riff_parse_strh</a>                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> **strh</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gst-plugins-base-libs-gstriff.html#gst-riff-read-chunk" title="gst_riff_read_chunk ()">gst_riff_read_chunk</a>                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *tag</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **chunk_data</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstriff.description"></a><h2>Description</h2>
+<p>
+A collection of functions to handle riff base files, such as avi, wav and
+asf.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstriff.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-riff-create-audio-caps"></a><h3>gst_riff_create_audio_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_audio_caps          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> codec_id</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-auds"><span class="type">gst_riff_strf_auds</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-create-audio-template-caps"></a><h3>gst_riff_create_audio_template_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_audio_template_caps (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-create-iavs-caps"></a><h3>gst_riff_create_iavs_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_iavs_caps           (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> codec_fcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-iavs"><span class="type">gst_riff_strf_iavs</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-create-iavs-template-caps"></a><h3>gst_riff_create_iavs_template_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_iavs_template_caps  (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-create-video-caps"></a><h3>gst_riff_create_video_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_video_caps          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> codec_fcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> *strh</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-vids"><span class="type">gst_riff_strf_vids</span></a> *strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strf_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *strd_data</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> **codec_name</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>codec_fcc</code></em> :</span></p></td>
+<td>fourCC codec for this codec.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strh</code></em> :</span></p></td>
+<td>pointer to the strh stream header structure.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strf</code></em> :</span></p></td>
+<td>pointer to the strf stream header structure, including any
+data that is within the range of strf.size, but excluding any
+additional data withint this chunk but outside strf.size.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strf_data</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the additional data in the strf
+chunk outside reach of strf.size. Ususally a palette.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strd_data</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the data in the strd stream header
+chunk. Usually codec initialization data.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>codec_name</code></em> :</span></p></td>
+<td>if given, will be filled with a human-readable codec name.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-create-video-template-caps"></a><h3>gst_riff_create_video_template_caps ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_riff_create_video_template_caps (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-init"></a><h3>gst_riff_init ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_riff_init                       (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Initialize riff library.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-chunk"></a><h3>gst_riff_parse_chunk ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_chunk                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *fourcc</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **chunk_data</code></em>);</pre>
+<p>
+Reads a single chunk.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input buffer.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>offset</code></em> :</span></p></td>
+<td>offset in the buffer in the caller. Is incremented
+by the read size by this function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fourcc</code></em> :</span></p></td>
+<td>fourcc (returned by this function0 of the chunk.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>chunk_data</code></em> :</span></p></td>
+<td>buffer (returned by the function) containing the
+chunk data, which may be NULL if chunksize == 0</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>FALSE on error, TRUE otherwise</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-file-header"></a><h3>gst_riff_parse_file_header ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_file_header          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *doctype</code></em>);</pre>
+<p>
+Reads the first few bytes from the provided buffer, checks
+if this stream is a RIFF stream, and determines document type.
+This function takes ownership of <em class="parameter"><code>buf</code></em> so it should not be used anymore
+after calling this function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input buffer from which the file header will be parsed,
+should be at least 12 bytes long.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>doctype</code></em> :</span></p></td>
+<td>a fourcc (returned by this function) to indicate the
+type of document (according to the header).</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>FALSE if this is not a RIFF stream (in which case the
+caller should error out; we already throw an error), or TRUE
+if it is.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-info"></a><h3>gst_riff_parse_info ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_riff_parse_info                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> **taglist</code></em>);</pre>
+<p>
+Parses stream metadata from input data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input data to be used for parsing, stripped from header.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>taglist</code></em> :</span></p></td>
+<td>a pointer to a taglist (returned by this function)
+containing information about this stream. May be
+NULL if no supported tags were found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-strf-auds"></a><h3>gst_riff_parse_strf_auds ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_strf_auds            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-auds"><span class="type">gst_riff_strf_auds</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);</pre>
+<p>
+Parses an audio stream´s strf structure plus optionally some
+extradata from input data. This function takes ownership of <em class="parameter"><code>buf</code></em>.
+use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input data to be used for parsing, stripped from header.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strf</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a filled-in
+strf/auds structure. Caller should free it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a buffer
+containing extradata for this particular stream (e.g.
+codec initialization data).</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if parsing succeeded, otherwise FALSE. The stream
+should be skipped on error, but it is not fatal.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-strf-iavs"></a><h3>gst_riff_parse_strf_iavs ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_strf_iavs            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-iavs"><span class="type">gst_riff_strf_iavs</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);</pre>
+<p>
+Parses a interleaved (also known as "complex")  stream´s strf
+structure plus optionally some extradata from input data. This
+function takes ownership of <em class="parameter"><code>buf</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input data to be used for parsing, stripped from header.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strf</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a filled-in
+strf/iavs structure. Caller should free it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a buffer
+containing extradata for this particular stream (e.g.
+codec initialization data).</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if parsing succeeded, otherwise FALSE.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-strf-vids"></a><h3>gst_riff_parse_strf_vids ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_strf_vids            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strf-vids"><span class="type">gst_riff_strf_vids</span></a> **strf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **data</code></em>);</pre>
+<p>
+Parses a video stream´s strf structure plus optionally some
+extradata from input data. This function takes ownership of <em class="parameter"><code>buf</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input data to be used for parsing, stripped from header.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strf</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a filled-in
+strf/vids structure. Caller should free it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a buffer
+containing extradata for this particular stream (e.g.
+palette, codec initialization data).</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if parsing succeeded, otherwise FALSE. The stream
+should be skipped on error, but it is not fatal.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-parse-strh"></a><h3>gst_riff_parse_strh ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_riff_parse_strh                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstriff.html#gst-riff-strh"><span class="type">gst_riff_strh</span></a> **strh</code></em>);</pre>
+<p>
+Parses a strh structure from input data. Takes ownership of <em class="parameter"><code>buf</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging/error).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>input data to be used for parsing, stripped from header.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strh</code></em> :</span></p></td>
+<td>a pointer (returned by this function) to a filled-in
+strh structure. Caller should free it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if parsing succeeded, otherwise FALSE. The stream
+should be skipped on error, but it is not fatal.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-riff-read-chunk"></a><h3>gst_riff_read_chunk ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_riff_read_chunk                 (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *tag</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **chunk_data</code></em>);</pre>
+<p>
+Reads a single chunk of data. Since 0.10.8 'JUNK' chunks
+are skipped automatically.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>caller element (used for debugging).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>pad to pull data from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>offset</code></em> :</span></p></td>
+<td>offset to pull from, incremented by this function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag</code></em> :</span></p></td>
+<td>fourcc of the chunk (returned by this function).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>chunk_data</code></em> :</span></p></td>
+<td>buffer (returned by this function).</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>flow status.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstringbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstringbuffer.html
new file mode 100644
index 0000000..3520159
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstringbuffer.html
@@ -0,0 +1,1393 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstringbuffer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-audio.html" title="Audio Library">
+<link rel="prev" href="gst-plugins-base-libs-gstmultichannel.html" title="gstmultichannel">
+<link rel="next" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstmultichannel.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-audio.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudioiec61937.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstringbuffer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstringbuffer.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstringbuffer.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstringbuffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstringbuffer.top_of_page"></a>gstringbuffer</span></h2>
+<p>gstringbuffer — Base class for audio ringbuffer implementations</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstringbuffer.synopsis"></a><h2>Synopsis</h2>
+<a name="GstRingBuffer"></a><pre class="synopsis">
+#include &lt;gst/audio/gstringbuffer.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer-struct" title="struct GstRingBuffer">GstRingBuffer</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferClass" title="struct GstRingBufferClass">GstRingBufferClass</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec">GstRingBufferSpec</a>;
+<span class="returnvalue">void</span>                (<a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback" title="GstRingBufferCallback ()">*GstRingBufferCallback</a>)            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *rbuf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+enum                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState" title="enum GstRingBufferSegState">GstRingBufferSegState</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferState" title="enum GstRingBufferState">GstRingBufferState</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType" title="enum GstBufferFormatType">GstBufferFormatType</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-BROADCAST:CAPS" title="GST_RING_BUFFER_BROADCAST()">GST_RING_BUFFER_BROADCAST</a>           (buf)
+#define             <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-GET-COND:CAPS" title="GST_RING_BUFFER_GET_COND()">GST_RING_BUFFER_GET_COND</a>            (buf)
+#define             <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-SIGNAL:CAPS" title="GST_RING_BUFFER_SIGNAL()">GST_RING_BUFFER_SIGNAL</a>              (buf)
+#define             <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-WAIT:CAPS" title="GST_RING_BUFFER_WAIT()">GST_RING_BUFFER_WAIT</a>                (buf)
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback" title="gst_ring_buffer_set_callback ()">gst_ring_buffer_set_callback</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback" title="GstRingBufferCallback ()"><span class="type">GstRingBufferCallback</span></a> cb</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-acquire" title="gst_ring_buffer_acquire ()">gst_ring_buffer_acquire</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release" title="gst_ring_buffer_release ()">gst_ring_buffer_release</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-acquired" title="gst_ring_buffer_is_acquired ()">gst_ring_buffer_is_acquired</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-activate" title="gst_ring_buffer_activate ()">gst_ring_buffer_activate</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-active" title="gst_ring_buffer_is_active ()">gst_ring_buffer_is_active</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-start" title="gst_ring_buffer_start ()">gst_ring_buffer_start</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-pause" title="gst_ring_buffer_pause ()">gst_ring_buffer_pause</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-stop" title="gst_ring_buffer_stop ()">gst_ring_buffer_stop</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay" title="gst_ring_buffer_delay ()">gst_ring_buffer_delay</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-samples-done" title="gst_ring_buffer_samples_done ()">gst_ring_buffer_samples_done</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-sample" title="gst_ring_buffer_set_sample ()">gst_ring_buffer_set_sample</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit" title="gst_ring_buffer_commit ()">gst_ring_buffer_commit</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full" title="gst_ring_buffer_commit_full ()">gst_ring_buffer_commit_full</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> in_samples</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> out_samples</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *accum</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-convert" title="gst_ring_buffer_convert ()">gst_ring_buffer_convert</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> src_val</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> *dest_val</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-prepare-read" title="gst_ring_buffer_prepare_read ()">gst_ring_buffer_prepare_read</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *segment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **readptr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-read" title="gst_ring_buffer_read ()">gst_ring_buffer_read</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear" title="gst_ring_buffer_clear ()">gst_ring_buffer_clear</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> segment</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear-all" title="gst_ring_buffer_clear_all ()">gst_ring_buffer_clear_all</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-advance" title="gst_ring_buffer_advance ()">gst_ring_buffer_advance</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> advance</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-close-device" title="gst_ring_buffer_close_device ()">gst_ring_buffer_close_device</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-open-device" title="gst_ring_buffer_open_device ()">gst_ring_buffer_open_device</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-device-is-open" title="gst_ring_buffer_device_is_open ()">gst_ring_buffer_device_is_open</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-may-start" title="gst_ring_buffer_may_start ()">gst_ring_buffer_may_start</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> allowed</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-parse-caps" title="gst_ring_buffer_parse_caps ()">gst_ring_buffer_parse_caps</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-flushing" title="gst_ring_buffer_set_flushing ()">gst_ring_buffer_set_flushing</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flushing</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstringbuffer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----GstRingBuffer
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstringbuffer.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id484218"></a><p>
+This object is the base class for audio ringbuffers used by the base
+audio source and sink classes.
+</p>
+<p>
+The ringbuffer abstracts a circular buffer of data. One reader and
+one writer can operate on the data from different threads in a lockfree
+manner. The base class is sufficiently flexible to be used as an
+abstraction for DMA based ringbuffers as well as a pure software
+implementations.
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-02-02 (0.10.4)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstringbuffer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRingBuffer-struct"></a><h3>struct GstRingBuffer</h3>
+<pre class="programlisting">struct GstRingBuffer {
+  GCond                 *cond;
+  gboolean               open;
+  gboolean               acquired;
+  guint8                *memory;
+  gsize                  size;
+  GstRingBufferSpec      spec;
+  GstRingBufferSegState *segstate;
+  gint                   samples_per_seg;
+  guint8                *empty_seg;
+
+  gint                   state;
+  gint                   segdone;
+  gint                   segbase;
+  gint                   waiting;
+};
+</pre>
+<p>
+The ringbuffer base class structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html#GCond"><span class="type">GCond</span></a> *<em class="structfield"><code><a name="GstRingBuffer-struct.cond"></a>cond</code></em>;</span></p></td>
+<td>used to signal start/stop/pause/resume actions</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.open"></a>open</code></em>;</span></p></td>
+<td>boolean indicating that the ringbuffer is open</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.acquired"></a>acquired</code></em>;</span></p></td>
+<td>boolean indicating that the ringbuffer is acquired</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstRingBuffer-struct.memory"></a>memory</code></em>;</span></p></td>
+<td>data in the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.size"></a>size</code></em>;</span></p></td>
+<td>size of data in the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.spec"></a>spec</code></em>;</span></p></td>
+<td>format and layout of the ringbuffer data</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState" title="enum GstRingBufferSegState"><span class="type">GstRingBufferSegState</span></a> *<em class="structfield"><code><a name="GstRingBuffer-struct.segstate"></a>segstate</code></em>;</span></p></td>
+<td>status of each segment in the ringbuffer (unused)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.samples-per-seg"></a>samples_per_seg</code></em>;</span></p></td>
+<td>number of samples in one segment</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *<em class="structfield"><code><a name="GstRingBuffer-struct.empty-seg"></a>empty_seg</code></em>;</span></p></td>
+<td>pointer to memory holding one segment of silence samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.state"></a>state</code></em>;</span></p></td>
+<td>state of the buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.segdone"></a>segdone</code></em>;</span></p></td>
+<td>readpointer in the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.segbase"></a>segbase</code></em>;</span></p></td>
+<td>segment corresponding to segment 0 (unused)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBuffer-struct.waiting"></a>waiting</code></em>;</span></p></td>
+<td>is a reader or writer waiting for a free segment</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRingBufferClass"></a><h3>struct GstRingBufferClass</h3>
+<pre class="programlisting">struct GstRingBufferClass {
+  GstObjectClass parent_class;
+
+  gboolean     (*open_device)  (GstRingBuffer *buf);
+  gboolean     (*acquire)      (GstRingBuffer *buf, GstRingBufferSpec *spec);
+  gboolean     (*release)      (GstRingBuffer *buf);
+  gboolean     (*close_device) (GstRingBuffer *buf);
+
+  gboolean     (*start)        (GstRingBuffer *buf);
+  gboolean     (*pause)        (GstRingBuffer *buf);
+  gboolean     (*resume)       (GstRingBuffer *buf);
+  gboolean     (*stop)         (GstRingBuffer *buf);
+
+  guint        (*delay)        (GstRingBuffer *buf);
+
+  /* ABI added */
+  gboolean     (*activate)     (GstRingBuffer *buf, gboolean active);
+
+  guint        (*commit)       (GstRingBuffer * buf, guint64 *sample,
+                                guchar * data, gint in_samples,
+                                gint out_samples, gint * accum);
+
+  void         (*clear_all)    (GstRingBuffer * buf);
+};
+</pre>
+<p>
+The vmethods that subclasses can override to implement the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GstObjectClass"><span class="type">GstObjectClass</span></a> <em class="structfield"><code><a name="GstRingBufferClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>parent class</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.open-device"></a>open_device</code></em> ()</span></p></td>
+<td>open the device, don't set any params or allocate anything</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.acquire"></a>acquire</code></em> ()</span></p></td>
+<td>allocate the resources for the ringbuffer using the given spec</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.release"></a>release</code></em> ()</span></p></td>
+<td>free resources of the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.close-device"></a>close_device</code></em> ()</span></p></td>
+<td>close the device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.start"></a>start</code></em> ()</span></p></td>
+<td>start processing of samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.pause"></a>pause</code></em> ()</span></p></td>
+<td>pause processing of samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.resume"></a>resume</code></em> ()</span></p></td>
+<td>resume processing of samples after pause</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.stop"></a>stop</code></em> ()</span></p></td>
+<td>stop processing of samples</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.delay"></a>delay</code></em> ()</span></p></td>
+<td>get number of samples queued in device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.activate"></a>activate</code></em> ()</span></p></td>
+<td>activate the thread that starts pulling and monitoring the
+consumed segments in the device. Since 0.10.22</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.commit"></a>commit</code></em> ()</span></p></td>
+<td>write samples into the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRingBufferClass.clear-all"></a>clear_all</code></em> ()</span></p></td>
+<td>clear the entire ringbuffer Since 0.10.24</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRingBufferSpec"></a><h3>struct GstRingBufferSpec</h3>
+<pre class="programlisting">struct GstRingBufferSpec {
+  /* in */
+  GstCaps  *caps;               /* the caps of the buffer */
+
+  /* in/out */
+  GstBufferFormatType type;
+  GstAudioInfo        info;
+
+  guint64  latency_time;        /* the required/actual latency time, this is the
+				 * actual the size of one segment and the
+				 * minimum possible latency we can achieve. */
+  guint64  buffer_time;         /* the required/actual time of the buffer, this is
+				 * the total size of the buffer and maximum
+				 * latency we can compensate for. */
+  gint     segsize;             /* size of one buffer segment in bytes, this value
+				 * should be chosen to match latency_time as
+				 * well as possible. */
+  gint     segtotal;            /* total number of segments, this value is the
+				 * number of segments of @segsize and should be
+				 * chosen so that it matches buffer_time as
+				 * close as possible. */
+  /* ABI added 0.10.20 */
+  gint     seglatency;          /* number of segments queued in the lower
+				 * level device, defaults to segtotal. */
+};
+</pre>
+<p>
+The structure containing the format specification of the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *<em class="structfield"><code><a name="GstRingBufferSpec.caps"></a>caps</code></em>;</span></p></td>
+<td>The caps that generated the Spec.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType" title="enum GstBufferFormatType"><span class="type">GstBufferFormatType</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.type"></a>type</code></em>;</span></p></td>
+<td>the sample type</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.info"></a>info</code></em>;</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.latency-time"></a>latency_time</code></em>;</span></p></td>
+<td>the latency in microseconds</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.buffer-time"></a>buffer_time</code></em>;</span></p></td>
+<td>the total buffer size in microseconds</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.segsize"></a>segsize</code></em>;</span></p></td>
+<td>the size of one segment in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.segtotal"></a>segtotal</code></em>;</span></p></td>
+<td>the total number of segments</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRingBufferSpec.seglatency"></a>seglatency</code></em>;</span></p></td>
+<td>number of segments queued in the lower level device,
+defaults to segtotal</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRingBufferCallback"></a><h3>GstRingBufferCallback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                (*GstRingBufferCallback)            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *rbuf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+This function is set with <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback" title="gst_ring_buffer_set_callback ()"><code class="function">gst_ring_buffer_set_callback()</code></a> and is
+called to fill the memory at <em class="parameter"><code>data</code></em> with <em class="parameter"><code>len</code></em> bytes of samples.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rbuf</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>target to fill</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>amount to fill</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRingBufferSegState"></a><h3>enum GstRingBufferSegState</h3>
+<pre class="programlisting">typedef enum {
+  GST_SEGSTATE_INVALID,
+  GST_SEGSTATE_EMPTY,
+  GST_SEGSTATE_FILLED,
+  GST_SEGSTATE_PARTIAL
+} GstRingBufferSegState;
+</pre>
+<p>
+The state of a segment in the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-SEGSTATE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_SEGSTATE_INVALID</code></span></p></td>
+<td>The content of the segment is invalid
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SEGSTATE-EMPTY:CAPS"></a><span class="term"><code class="literal">GST_SEGSTATE_EMPTY</code></span></p></td>
+<td>The segment is empty
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SEGSTATE-FILLED:CAPS"></a><span class="term"><code class="literal">GST_SEGSTATE_FILLED</code></span></p></td>
+<td>The segment contains valid data
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SEGSTATE-PARTIAL:CAPS"></a><span class="term"><code class="literal">GST_SEGSTATE_PARTIAL</code></span></p></td>
+<td>The segment partially contains valid data
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRingBufferState"></a><h3>enum GstRingBufferState</h3>
+<pre class="programlisting">typedef enum {
+  GST_RING_BUFFER_STATE_STOPPED,
+  GST_RING_BUFFER_STATE_PAUSED,
+  GST_RING_BUFFER_STATE_STARTED
+} GstRingBufferState;
+</pre>
+<p>
+The state of the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RING-BUFFER-STATE-STOPPED:CAPS"></a><span class="term"><code class="literal">GST_RING_BUFFER_STATE_STOPPED</code></span></p></td>
+<td>The ringbuffer is stopped
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RING-BUFFER-STATE-PAUSED:CAPS"></a><span class="term"><code class="literal">GST_RING_BUFFER_STATE_PAUSED</code></span></p></td>
+<td>The ringbuffer is paused
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RING-BUFFER-STATE-STARTED:CAPS"></a><span class="term"><code class="literal">GST_RING_BUFFER_STATE_STARTED</code></span></p></td>
+<td>The ringbuffer is started
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstBufferFormatType"></a><h3>enum GstBufferFormatType</h3>
+<pre class="programlisting">typedef enum {
+  GST_BUFTYPE_RAW,
+  GST_BUFTYPE_MU_LAW,
+  GST_BUFTYPE_A_LAW,
+  GST_BUFTYPE_IMA_ADPCM,
+  GST_BUFTYPE_MPEG,
+  GST_BUFTYPE_GSM,
+  GST_BUFTYPE_IEC958,
+  GST_BUFTYPE_AC3,
+  GST_BUFTYPE_EAC3,
+  GST_BUFTYPE_DTS,
+  GST_BUFTYPE_MPEG2_AAC,
+  GST_BUFTYPE_MPEG4_AAC,
+} GstBufferFormatType;
+</pre>
+<p>
+The format of the samples in the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-BUFTYPE-RAW:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_RAW</code></span></p></td>
+<td>samples in linear or float
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-MU-LAW:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_MU_LAW</code></span></p></td>
+<td>samples in mulaw
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-A-LAW:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_A_LAW</code></span></p></td>
+<td>samples in alaw
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-IMA-ADPCM:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_IMA_ADPCM</code></span></p></td>
+<td>samples in ima adpcm
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-MPEG:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_MPEG</code></span></p></td>
+<td>samples in mpeg audio (but not AAC) format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-GSM:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_GSM</code></span></p></td>
+<td>samples in gsm format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-IEC958:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_IEC958</code></span></p></td>
+<td>samples in IEC958 frames (e.g. AC3)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-AC3:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_AC3</code></span></p></td>
+<td>samples in AC3 format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-EAC3:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_EAC3</code></span></p></td>
+<td>samples in EAC3 format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-DTS:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_DTS</code></span></p></td>
+<td>samples in DTS format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-MPEG2-AAC:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_MPEG2_AAC</code></span></p></td>
+<td>samples in MPEG-2 AAC format
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-BUFTYPE-MPEG4-AAC:CAPS"></a><span class="term"><code class="literal">GST_BUFTYPE_MPEG4_AAC</code></span></p></td>
+<td>samples in MPEG-4 AAC format
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RING-BUFFER-BROADCAST:CAPS"></a><h3>GST_RING_BUFFER_BROADCAST()</h3>
+<pre class="programlisting">#define GST_RING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_RING_BUFFER_GET_COND (buf)))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RING-BUFFER-GET-COND:CAPS"></a><h3>GST_RING_BUFFER_GET_COND()</h3>
+<pre class="programlisting">#define GST_RING_BUFFER_GET_COND(buf) (((GstRingBuffer *)buf)-&gt;cond)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RING-BUFFER-SIGNAL:CAPS"></a><h3>GST_RING_BUFFER_SIGNAL()</h3>
+<pre class="programlisting">#define GST_RING_BUFFER_SIGNAL(buf)   (g_cond_signal (GST_RING_BUFFER_GET_COND (buf)))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RING-BUFFER-WAIT:CAPS"></a><h3>GST_RING_BUFFER_WAIT()</h3>
+<pre class="programlisting">#define GST_RING_BUFFER_WAIT(buf)     (g_cond_wait (GST_RING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf)))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-set-callback"></a><h3>gst_ring_buffer_set_callback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_set_callback        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback" title="GstRingBufferCallback ()"><span class="type">GstRingBufferCallback</span></a> cb</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>
+Sets the given callback function on the buffer. This function
+will be called every time a segment has been written to a device.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to set the callback on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cb</code></em> :</span></p></td>
+<td>the callback to set</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data passed to the callback</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-acquire"></a><h3>gst_ring_buffer_acquire ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_acquire             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>);</pre>
+<p>
+Allocate the resources for the ringbuffer. This function fills
+in the data pointer of the ring buffer with a valid <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+to which samples can be written.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to acquire</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td>the specs of the buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be acquired, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-release"></a><h3>gst_ring_buffer_release ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_release             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Free the resources of the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to release</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be released, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-is-acquired"></a><h3>gst_ring_buffer_is_acquired ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_is_acquired         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Check if the ringbuffer is acquired and ready to use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to check</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the ringbuffer is acquired, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-activate"></a><h3>gst_ring_buffer_activate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_activate            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);</pre>
+<p>
+Activate <em class="parameter"><code>buf</code></em> to start or stop pulling data.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to activate</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>active</code></em> :</span></p></td>
+<td>the new mode</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be activated in the requested mode,
+FALSE on error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-is-active"></a><h3>gst_ring_buffer_is_active ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_is_active           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Check if <em class="parameter"><code>buf</code></em> is activated.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device is active.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-start"></a><h3>gst_ring_buffer_start ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_start               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Start processing samples from the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to start</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be started, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-pause"></a><h3>gst_ring_buffer_pause ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_pause               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Pause processing samples from the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to pause</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be paused, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-stop"></a><h3>gst_ring_buffer_stop ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_stop                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Stop processing samples from the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to stop</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be stopped, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-delay"></a><h3>gst_ring_buffer_delay ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_ring_buffer_delay               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Get the number of samples queued in the audio device. This is
+usually less than the segment size but can be bigger when the
+implementation uses another internal buffer between the audio
+device.
+</p>
+<p>
+For playback ringbuffers this is the amount of samples transfered from the
+ringbuffer to the device but still not played.
+</p>
+<p>
+For capture ringbuffers this is the amount of samples in the device that are
+not yet transfered to the ringbuffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to query</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of samples queued in the audio device.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-samples-done"></a><h3>gst_ring_buffer_samples_done ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             gst_ring_buffer_samples_done        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Get the number of samples that were processed by the ringbuffer
+since it was last started. This does not include the number of samples not
+yet processed (see <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay" title="gst_ring_buffer_delay ()"><code class="function">gst_ring_buffer_delay()</code></a>).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to query</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of samples processed by the ringbuffer.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-set-sample"></a><h3>gst_ring_buffer_set_sample ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_set_sample          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>);</pre>
+<p>
+Make sure that the next sample written to the device is
+accounted for as being the <em class="parameter"><code>sample</code></em> sample written to the
+device. This value will be used in reporting the current
+sample position of the ringbuffer.
+</p>
+<p>
+This function will also clear the buffer with silence.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to use</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample</code></em> :</span></p></td>
+<td>the sample number to set</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-commit"></a><h3>gst_ring_buffer_commit ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_ring_buffer_commit              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Same as <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full" title="gst_ring_buffer_commit_full ()"><code class="function">gst_ring_buffer_commit_full()</code></a> but with a in_samples and out_samples
+equal to <em class="parameter"><code>len</code></em>, ignoring accum.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample</code></em> :</span></p></td>
+<td>the sample position of the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the number of samples in the data to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of samples written to the ringbuffer or -1 on
+error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-commit-full"></a><h3>gst_ring_buffer_commit_full ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_ring_buffer_commit_full         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> in_samples</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> out_samples</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *accum</code></em>);</pre>
+<p>
+Commit <em class="parameter"><code>in_samples</code></em> samples pointed to by <em class="parameter"><code>data</code></em> to the ringbuffer <em class="parameter"><code>buf</code></em>. 
+</p>
+<p>
+<em class="parameter"><code>in_samples</code></em> and <em class="parameter"><code>out_samples</code></em> define the rate conversion to perform on the the
+samples in <em class="parameter"><code>data</code></em>. For negative rates, <em class="parameter"><code>out_samples</code></em> must be negative and
+<em class="parameter"><code>in_samples</code></em> positive.
+</p>
+<p>
+When <em class="parameter"><code>out_samples</code></em> is positive, the first sample will be written at position <em class="parameter"><code>sample</code></em>
+in the ringbuffer. When <em class="parameter"><code>out_samples</code></em> is negative, the last sample will be written to
+<em class="parameter"><code>sample</code></em> in reverse order.
+</p>
+<p>
+<em class="parameter"><code>out_samples</code></em> does not need to be a multiple of the segment size of the ringbuffer
+although it is recommended for optimal performance. 
+</p>
+<p>
+<em class="parameter"><code>accum</code></em> will hold a temporary accumulator used in rate conversion and should be
+set to 0 when this function is first called. In case the commit operation is
+interrupted, one can resume the processing by passing the previously returned
+<em class="parameter"><code>accum</code></em> value back to this function.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample</code></em> :</span></p></td>
+<td>the sample position of the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>in_samples</code></em> :</span></p></td>
+<td>the number of samples in the data to commit</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out_samples</code></em> :</span></p></td>
+<td>the number of samples to write to the ringbuffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>accum</code></em> :</span></p></td>
+<td>accumulator for rate conversion.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of samples written to the ringbuffer or -1 on error. The
+number of samples written can be less than <em class="parameter"><code>out_samples</code></em> when <em class="parameter"><code>buf</code></em> was interrupted
+with a flush or stop.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-convert"></a><h3>gst_ring_buffer_convert ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_convert             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> src_val</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a> *dest_val</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>src_val</code></em> in <em class="parameter"><code>src_fmt</code></em> to the equivalent value in <em class="parameter"><code>dest_fmt</code></em>. The result
+will be put in <em class="parameter"><code>dest_val</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src_fmt</code></em> :</span></p></td>
+<td>the source format</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src_val</code></em> :</span></p></td>
+<td>the source value</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest_fmt</code></em> :</span></p></td>
+<td>the destination format</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest_val</code></em> :</span></p></td>
+<td>a location to store the converted value</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the conversion succeeded.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-prepare-read"></a><h3>gst_ring_buffer_prepare_read ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_prepare_read        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *segment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **readptr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *len</code></em>);</pre>
+<p>
+Returns a pointer to memory where the data from segment <em class="parameter"><code>segment</code></em>
+can be found. This function is mostly used by subclasses.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to read from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>segment</code></em> :</span></p></td>
+<td>the segment to read</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>readptr</code></em> :</span></p></td>
+<td>the pointer to the memory where samples can be read</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the number of bytes to read</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>FALSE if the buffer is not started.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-read"></a><h3>gst_ring_buffer_read ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_ring_buffer_read                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> sample</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"><span class="type">guchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Read <em class="parameter"><code>len</code></em> samples from the ringbuffer into the memory pointed 
+to by <em class="parameter"><code>data</code></em>.
+The first sample should be read from position <em class="parameter"><code>sample</code></em> in
+the ringbuffer.
+</p>
+<p>
+<em class="parameter"><code>len</code></em> should not be a multiple of the segment size of the ringbuffer
+although it is recommended.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to read from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sample</code></em> :</span></p></td>
+<td>the sample position of the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>where the data should be read</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the number of samples in data to read</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of samples read from the ringbuffer or -1 on
+error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-clear"></a><h3>gst_ring_buffer_clear ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_clear               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> segment</code></em>);</pre>
+<p>
+Clear the given segment of the buffer with silence samples.
+This function is used by subclasses.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to clear</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>segment</code></em> :</span></p></td>
+<td>the segment to clear</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-clear-all"></a><h3>gst_ring_buffer_clear_all ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_clear_all           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Fill the ringbuffer with silence.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to clear</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-advance"></a><h3>gst_ring_buffer_advance ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_advance             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> advance</code></em>);</pre>
+<p>
+Subclasses should call this function to notify the fact that 
+<em class="parameter"><code>advance</code></em> segments are now processed by the device.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to advance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>advance</code></em> :</span></p></td>
+<td>the number of segments written</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-close-device"></a><h3>gst_ring_buffer_close_device ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_close_device        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Close the audio device associated with the ring buffer. The ring buffer
+should already have been released via <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release" title="gst_ring_buffer_release ()"><code class="function">gst_ring_buffer_release()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be closed, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-open-device"></a><h3>gst_ring_buffer_open_device ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_open_device         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Open the audio device associated with the ring buffer. Does not perform any
+setup on the device. You must open the device before acquiring the ring
+buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device could be opened, FALSE on error.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-device-is-open"></a><h3>gst_ring_buffer_device_is_open ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_device_is_open      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>);</pre>
+<p>
+Checks the status of the device associated with the ring buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the device was open, FALSE if it was closed.
+MT safe.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-may-start"></a><h3>gst_ring_buffer_may_start ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_may_start           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> allowed</code></em>);</pre>
+<p>
+Tell the ringbuffer that it is allowed to start playback when
+the ringbuffer is filled with samples. 
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>allowed</code></em> :</span></p></td>
+<td>the new value</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-parse-caps"></a><h3>gst_ring_buffer_parse_caps ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_ring_buffer_parse_caps          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec" title="struct GstRingBufferSpec"><span class="type">GstRingBufferSpec</span></a> *spec</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Parse <em class="parameter"><code>caps</code></em> into <em class="parameter"><code>spec</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td>a spec</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the caps could be parsed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-ring-buffer-set-flushing"></a><h3>gst_ring_buffer_set_flushing ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_ring_buffer_set_flushing        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flushing</code></em>);</pre>
+<p>
+Set the ringbuffer to flushing mode or normal mode.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer"><span class="type">GstRingBuffer</span></a> to flush</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flushing</code></em> :</span></p></td>
+<td>the new mode</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstringbuffer.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink"><span class="type">GstBaseAudioSink</span></a>, <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink"><span class="type">GstAudioSink</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html
new file mode 100644
index 0000000..af06d66
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html
@@ -0,0 +1,1961 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtcpbuffer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">
+<link rel="next" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtpbuffer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtppayloads.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtcpbuffer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtcpbuffer.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtcpbuffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtcpbuffer.top_of_page"></a>gstrtcpbuffer</span></h2>
+<p>gstrtcpbuffer — Helper methods for dealing with RTCP buffers</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtcpbuffer.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtp/gstrtcpbuffer.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VERSION:CAPS" title="GST_RTCP_VERSION">GST_RTCP_VERSION</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES:CAPS" title="GST_RTCP_MAX_SDES">GST_RTCP_MAX_SDES</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT">GST_RTCP_MAX_BYE_SSRC_COUNT</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS" title="GST_RTCP_MAX_RB_COUNT">GST_RTCP_MAX_RB_COUNT</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS" title="GST_RTCP_MAX_SDES_ITEM_COUNT">GST_RTCP_MAX_SDES_ITEM_COUNT</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS" title="GST_RTCP_VALID_MASK">GST_RTCP_VALID_MASK</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS" title="GST_RTCP_VALID_VALUE">GST_RTCP_VALID_VALUE</a>
+enum                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType">GstRTCPType</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket">GstRTCPPacket</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType">GstRTCPSDESType</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType">GstRTCPFBType</a>;
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data" title="gst_rtcp_buffer_new_take_data ()">gst_rtcp_buffer_new_take_data</a>       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data" title="gst_rtcp_buffer_new_copy_data ()">gst_rtcp_buffer_new_copy_data</a>       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()">gst_rtcp_buffer_validate_data</a>       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate" title="gst_rtcp_buffer_validate ()">gst_rtcp_buffer_validate</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new" title="gst_rtcp_buffer_new ()">gst_rtcp_buffer_new</a>                 (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> mtu</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-packet-count" title="gst_rtcp_buffer_get_packet_count ()">gst_rtcp_buffer_get_packet_count</a>    (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet" title="gst_rtcp_buffer_get_first_packet ()">gst_rtcp_buffer_get_first_packet</a>    (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-move-to-next" title="gst_rtcp_packet_move_to_next ()">gst_rtcp_packet_move_to_next</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-add-packet" title="gst_rtcp_buffer_add_packet ()">gst_rtcp_buffer_add_packet</a>          (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="type">GstRTCPType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-remove" title="gst_rtcp_packet_remove ()">gst_rtcp_packet_remove</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-padding" title="gst_rtcp_packet_get_padding ()">gst_rtcp_packet_get_padding</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-count" title="gst_rtcp_packet_get_count ()">gst_rtcp_packet_get_count</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="returnvalue">GstRTCPType</span></a>         <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-type" title="gst_rtcp_packet_get_type ()">gst_rtcp_packet_get_type</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-length" title="gst_rtcp_packet_get_length ()">gst_rtcp_packet_get_length</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-get-sender-info" title="gst_rtcp_packet_sr_get_sender_info ()">gst_rtcp_packet_sr_get_sender_info</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *ntptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *rtptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *packet_count</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *octet_count</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-set-sender-info" title="gst_rtcp_packet_sr_set_sender_info ()">gst_rtcp_packet_sr_set_sender_info</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> ntptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> rtptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> packet_count</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> octet_count</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-get-ssrc" title="gst_rtcp_packet_rr_get_ssrc ()">gst_rtcp_packet_rr_get_ssrc</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-set-ssrc" title="gst_rtcp_packet_rr_set_ssrc ()">gst_rtcp_packet_rr_set_ssrc</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb-count" title="gst_rtcp_packet_get_rb_count ()">gst_rtcp_packet_get_rb_count</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb" title="gst_rtcp_packet_get_rb ()">gst_rtcp_packet_get_rb</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *dlsr</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-add-rb" title="gst_rtcp_packet_add_rb ()">gst_rtcp_packet_add_rb</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dlsr</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-set-rb" title="gst_rtcp_packet_set_rb ()">gst_rtcp_packet_set_rb</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dlsr</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-item-count" title="gst_rtcp_packet_sdes_get_item_count ()">gst_rtcp_packet_sdes_get_item_count</a> (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-item" title="gst_rtcp_packet_sdes_first_item ()">gst_rtcp_packet_sdes_first_item</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-item" title="gst_rtcp_packet_sdes_next_item ()">gst_rtcp_packet_sdes_next_item</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-ssrc" title="gst_rtcp_packet_sdes_get_ssrc ()">gst_rtcp_packet_sdes_get_ssrc</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-entry" title="gst_rtcp_packet_sdes_first_entry ()">gst_rtcp_packet_sdes_first_entry</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-entry" title="gst_rtcp_packet_sdes_next_entry ()">gst_rtcp_packet_sdes_next_entry</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry" title="gst_rtcp_packet_sdes_get_entry ()">gst_rtcp_packet_sdes_get_entry</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> *type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry" title="gst_rtcp_packet_sdes_copy_entry ()">gst_rtcp_packet_sdes_copy_entry</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> *type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-item" title="gst_rtcp_packet_sdes_add_item ()">gst_rtcp_packet_sdes_add_item</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-entry" title="gst_rtcp_packet_sdes_add_entry ()">gst_rtcp_packet_sdes_add_entry</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> len</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-ssrc-count" title="gst_rtcp_packet_bye_get_ssrc_count ()">gst_rtcp_packet_bye_get_ssrc_count</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-nth-ssrc" title="gst_rtcp_packet_bye_get_nth_ssrc ()">gst_rtcp_packet_bye_get_nth_ssrc</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrc" title="gst_rtcp_packet_bye_add_ssrc ()">gst_rtcp_packet_bye_add_ssrc</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrcs" title="gst_rtcp_packet_bye_add_ssrcs ()">gst_rtcp_packet_bye_add_ssrcs</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason-len" title="gst_rtcp_packet_bye_get_reason_len ()">gst_rtcp_packet_bye_get_reason_len</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason" title="gst_rtcp_packet_bye_get_reason ()">gst_rtcp_packet_bye_get_reason</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-set-reason" title="gst_rtcp_packet_bye_set_reason ()">gst_rtcp_packet_bye_set_reason</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType"><span class="returnvalue">GstRTCPFBType</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-type" title="gst_rtcp_packet_fb_get_type ()">gst_rtcp_packet_fb_get_type</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-type" title="gst_rtcp_packet_fb_set_type ()">gst_rtcp_packet_fb_set_type</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType"><span class="type">GstRTCPFBType</span></a> type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-sender-ssrc" title="gst_rtcp_packet_fb_get_sender_ssrc ()">gst_rtcp_packet_fb_get_sender_ssrc</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-sender-ssrc" title="gst_rtcp_packet_fb_set_sender_ssrc ()">gst_rtcp_packet_fb_set_sender_ssrc</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-media-ssrc" title="gst_rtcp_packet_fb_get_media_ssrc ()">gst_rtcp_packet_fb_get_media_ssrc</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-media-ssrc" title="gst_rtcp_packet_fb_set_media_ssrc ()">gst_rtcp_packet_fb_set_media_ssrc</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci-length" title="gst_rtcp_packet_fb_get_fci_length ()">gst_rtcp_packet_fb_get_fci_length</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-fci-length" title="gst_rtcp_packet_fb_set_fci_length ()">gst_rtcp_packet_fb_set_fci_length</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> wordlen</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *            <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci" title="gst_rtcp_packet_fb_get_fci ()">gst_rtcp_packet_fb_get_fci</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-ntp-to-unix" title="gst_rtcp_ntp_to_unix ()">gst_rtcp_ntp_to_unix</a>                (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> ntptime</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-unix-to-ntp" title="gst_rtcp_unix_to_ntp ()">gst_rtcp_unix_to_ntp</a>                (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> unixtime</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="returnvalue">GstRTCPSDESType</span></a>     <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-name-to-type" title="gst_rtcp_sdes_name_to_type ()">gst_rtcp_sdes_name_to_type</a>          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-type-to-name" title="gst_rtcp_sdes_type_to_name ()">gst_rtcp_sdes_type_to_name</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> type</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtcpbuffer.description"></a><h2>Description</h2>
+<p>
+Note: The API in this module is not yet declared stable.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id539655"></a><p>
+The GstRTPCBuffer helper functions makes it easy to parse and create regular 
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> objects that contain compound RTCP packets. These buffers are typically
+of 'application/x-rtcp' <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+</p>
+<p>
+An RTCP buffer consists of 1 or more <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> structures that you can
+retrieve with <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet" title="gst_rtcp_buffer_get_first_packet ()"><code class="function">gst_rtcp_buffer_get_first_packet()</code></a>. <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> acts as a pointer
+into the RTCP buffer; you can move to the next packet with
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-move-to-next" title="gst_rtcp_packet_move_to_next ()"><code class="function">gst_rtcp_packet_move_to_next()</code></a>.
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2007-03-26 (0.10.13)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtcpbuffer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-RTCP-VERSION:CAPS"></a><h3>GST_RTCP_VERSION</h3>
+<pre class="programlisting">#define GST_RTCP_VERSION 2
+</pre>
+<p>
+The supported RTCP version 2.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-MAX-SDES:CAPS"></a><h3>GST_RTCP_MAX_SDES</h3>
+<pre class="programlisting">#define GST_RTCP_MAX_SDES 255
+</pre>
+<p>
+The maximum text length for an SDES item.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS"></a><h3>GST_RTCP_MAX_BYE_SSRC_COUNT</h3>
+<pre class="programlisting">#define GST_RTCP_MAX_BYE_SSRC_COUNT   31
+</pre>
+<p>
+The maximum amount of SSRCs in a BYE packet.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-MAX-RB-COUNT:CAPS"></a><h3>GST_RTCP_MAX_RB_COUNT</h3>
+<pre class="programlisting">#define GST_RTCP_MAX_RB_COUNT   31
+</pre>
+<p>
+The maximum amount of Receiver report blocks in RR and SR messages.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS"></a><h3>GST_RTCP_MAX_SDES_ITEM_COUNT</h3>
+<pre class="programlisting">#define GST_RTCP_MAX_SDES_ITEM_COUNT   31
+</pre>
+<p>
+The maximum amount of SDES items.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-VALID-MASK:CAPS"></a><h3>GST_RTCP_VALID_MASK</h3>
+<pre class="programlisting">#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
+</pre>
+<p>
+Mask for version, padding bit and packet type pair
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTCP-VALID-VALUE:CAPS"></a><h3>GST_RTCP_VALID_VALUE</h3>
+<pre class="programlisting">#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION &lt;&lt; 14) | GST_RTCP_TYPE_SR)
+</pre>
+<p>
+Valid value for the first two bytes of an RTCP packet after applying
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS" title="GST_RTCP_VALID_MASK"><span class="type">GST_RTCP_VALID_MASK</span></a> to them.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTCPType"></a><h3>enum GstRTCPType</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTCP_TYPE_INVALID = 0,
+  GST_RTCP_TYPE_SR      = 200,
+  GST_RTCP_TYPE_RR      = 201,
+  GST_RTCP_TYPE_SDES    = 202,
+  GST_RTCP_TYPE_BYE     = 203,
+  GST_RTCP_TYPE_APP     = 204,
+  GST_RTCP_TYPE_RTPFB   = 205,
+  GST_RTCP_TYPE_PSFB    = 206
+} GstRTCPType;
+</pre>
+<p>
+Different RTCP packet types.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_INVALID</code></span></p></td>
+<td>Invalid type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-SR:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_SR</code></span></p></td>
+<td>Sender report
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-RR:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_RR</code></span></p></td>
+<td>Receiver report
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-SDES:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_SDES</code></span></p></td>
+<td>Source description
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-BYE:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_BYE</code></span></p></td>
+<td>Goodbye
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-APP:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_APP</code></span></p></td>
+<td>Application defined
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-RTPFB:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_RTPFB</code></span></p></td>
+<td>Transport layer feedback. Since: 0.10.23
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-TYPE-PSFB:CAPS"></a><span class="term"><code class="literal">GST_RTCP_TYPE_PSFB</code></span></p></td>
+<td>Payload-specific feedback. Since: 0.10.23
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTCPPacket"></a><h3>struct GstRTCPPacket</h3>
+<pre class="programlisting">struct GstRTCPPacket {
+  GstRTCPBuffer *rtcp;
+  guint         offset;
+};
+</pre>
+<p>
+Data structure that points to a packet at <em class="parameter"><code>offset</code></em> in <em class="parameter"><code>buffer</code></em>. 
+The size of the structure is made public to allow stack allocations.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><span class="type">GstRTCPBuffer</span> *<em class="structfield"><code><a name="GstRTCPPacket.rtcp"></a>rtcp</code></em>;</span></p></td>
+<td></td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTCPPacket.offset"></a>offset</code></em>;</span></p></td>
+<td>offset of packet in buffer data</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTCPSDESType"></a><h3>enum GstRTCPSDESType</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTCP_SDES_INVALID  = -1,
+  GST_RTCP_SDES_END      = 0,
+  GST_RTCP_SDES_CNAME    = 1,
+  GST_RTCP_SDES_NAME     = 2,
+  GST_RTCP_SDES_EMAIL    = 3,
+  GST_RTCP_SDES_PHONE    = 4,
+  GST_RTCP_SDES_LOC      = 5,
+  GST_RTCP_SDES_TOOL     = 6,
+  GST_RTCP_SDES_NOTE     = 7,
+  GST_RTCP_SDES_PRIV     = 8
+} GstRTCPSDESType;
+</pre>
+<p>
+Different types of SDES content.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTCP-SDES-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_INVALID</code></span></p></td>
+<td>Invalid SDES entry
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-END:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_END</code></span></p></td>
+<td>End of SDES list
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-CNAME:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_CNAME</code></span></p></td>
+<td>Canonical name
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-NAME:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_NAME</code></span></p></td>
+<td>User name
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-EMAIL:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_EMAIL</code></span></p></td>
+<td>User's electronic mail address
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-PHONE:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_PHONE</code></span></p></td>
+<td>User's phone number
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-LOC:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_LOC</code></span></p></td>
+<td>Geographic user location
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-TOOL:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_TOOL</code></span></p></td>
+<td>Name of application or tool
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-NOTE:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_NOTE</code></span></p></td>
+<td>Notice about the source
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-SDES-PRIV:CAPS"></a><span class="term"><code class="literal">GST_RTCP_SDES_PRIV</code></span></p></td>
+<td>Private extensions
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTCPFBType"></a><h3>enum GstRTCPFBType</h3>
+<pre class="programlisting">typedef enum {
+  /* generic */
+  GST_RTCP_FB_TYPE_INVALID    = 0,
+  /* RTPFB types */
+  GST_RTCP_RTPFB_TYPE_NACK    = 1,
+  /* PSFB types */
+  GST_RTCP_PSFB_TYPE_PLI      = 1,
+  GST_RTCP_PSFB_TYPE_SLI      = 2,
+  GST_RTCP_PSFB_TYPE_RPSI     = 3,
+  GST_RTCP_PSFB_TYPE_AFB      = 15
+} GstRTCPFBType;
+</pre>
+<p>
+Different types of feedback messages.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTCP-FB-TYPE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTCP_FB_TYPE_INVALID</code></span></p></td>
+<td>Invalid type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-RTPFB-TYPE-NACK:CAPS"></a><span class="term"><code class="literal">GST_RTCP_RTPFB_TYPE_NACK</code></span></p></td>
+<td>Generic NACK
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-PSFB-TYPE-PLI:CAPS"></a><span class="term"><code class="literal">GST_RTCP_PSFB_TYPE_PLI</code></span></p></td>
+<td>Picture Loss Indication
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-PSFB-TYPE-SLI:CAPS"></a><span class="term"><code class="literal">GST_RTCP_PSFB_TYPE_SLI</code></span></p></td>
+<td>Slice Loss Indication
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-PSFB-TYPE-RPSI:CAPS"></a><span class="term"><code class="literal">GST_RTCP_PSFB_TYPE_RPSI</code></span></p></td>
+<td>Reference Picture Selection Indication
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTCP-PSFB-TYPE-AFB:CAPS"></a><span class="term"><code class="literal">GST_RTCP_PSFB_TYPE_AFB</code></span></p></td>
+<td>Application layer Feedback
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-new-take-data"></a><h3>gst_rtcp_buffer_new_take_data ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtcp_buffer_new_take_data       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Create a new buffer and set the data and size of the buffer to <em class="parameter"><code>data</code></em> and <em class="parameter"><code>len</code></em>
+respectively. <em class="parameter"><code>data</code></em> will be freed when the buffer is unreffed, so this
+function transfers ownership of <em class="parameter"><code>data</code></em> to the new buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data for the new buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer with <em class="parameter"><code>data</code></em> and of size <em class="parameter"><code>len</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-new-copy-data"></a><h3>gst_rtcp_buffer_new_copy_data ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtcp_buffer_new_copy_data       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Create a new buffer and set the data to a copy of <em class="parameter"><code>len</code></em>
+bytes of <em class="parameter"><code>data</code></em> and the size to <em class="parameter"><code>len</code></em>. The data will be freed when the buffer
+is freed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data for the new buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer with a copy of <em class="parameter"><code>data</code></em> and of size <em class="parameter"><code>len</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-validate-data"></a><h3>gst_rtcp_buffer_validate_data ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_buffer_validate_data       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Check if the <em class="parameter"><code>data</code></em> and <em class="parameter"><code>size</code></em> point to the data of a valid RTCP (compound)
+packet. 
+Use this function to validate a packet before using the other functions in
+this module.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of <em class="parameter"><code>data</code></em> to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the data points to a valid RTCP packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-validate"></a><h3>gst_rtcp_buffer_validate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_buffer_validate            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Check if the data pointed to by <em class="parameter"><code>buffer</code></em> is a valid RTCP packet using
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()"><code class="function">gst_rtcp_buffer_validate_data()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>the buffer to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> is a valid RTCP packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-new"></a><h3>gst_rtcp_buffer_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtcp_buffer_new                 (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> mtu</code></em>);</pre>
+<p>
+Create a new buffer for constructing RTCP packets. The packet will have a
+maximum size of <em class="parameter"><code>mtu</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mtu</code></em> :</span></p></td>
+<td>the maximum mtu size.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-get-packet-count"></a><h3>gst_rtcp_buffer_get_packet_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtcp_buffer_get_packet_count    (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>);</pre>
+<p>
+Get the number of RTCP packets in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a valid RTCP buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of RTCP packets in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-get-first-packet"></a><h3>gst_rtcp_buffer_get_first_packet ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_buffer_get_first_packet    (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Initialize a new <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> pointer that points to the first packet in
+<em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a valid RTCP buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the packet existed in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-move-to-next"></a><h3>gst_rtcp_packet_move_to_next ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_move_to_next        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Move the packet pointer <em class="parameter"><code>packet</code></em> to the next packet in the payload.
+Use <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet" title="gst_rtcp_buffer_get_first_packet ()"><code class="function">gst_rtcp_buffer_get_first_packet()</code></a> to initialize <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>packet</code></em> is pointing to a valid packet after calling this
+function.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-add-packet"></a><h3>gst_rtcp_buffer_add_packet ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_buffer_add_packet          (<em class="parameter"><code><span class="type">GstRTCPBuffer</span> *rtcp</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="type">GstRTCPType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Add a new packet of <em class="parameter"><code>type</code></em> to <em class="parameter"><code>buffer</code></em>. <em class="parameter"><code>packet</code></em> will point to the newly created 
+packet.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a valid RTCP buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="type">GstRTCPType</span></a> of the new packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>pointer to new packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the packet could be created. This function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+if the max mtu is exceeded for the buffer.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-remove"></a><h3>gst_rtcp_packet_remove ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_remove              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Removes the packet pointed to by <em class="parameter"><code>packet</code></em> and moves pointer to the next one
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>packet</code></em> is pointing to a valid packet after calling this
+function.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-padding"></a><h3>gst_rtcp_packet_get_padding ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_get_padding         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the packet padding of the packet pointed to by <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>If the packet has the padding bit set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-count"></a><h3>gst_rtcp_packet_get_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_rtcp_packet_get_count           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the count field in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The count field in <em class="parameter"><code>packet</code></em> or -1 if <em class="parameter"><code>packet</code></em> does not point to a
+valid packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-type"></a><h3>gst_rtcp_packet_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="returnvalue">GstRTCPType</span></a>         gst_rtcp_packet_get_type            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the packet type of the packet pointed to by <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The packet type or GST_RTCP_TYPE_INVALID when <em class="parameter"><code>packet</code></em> is not
+pointing to a valid packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-length"></a><h3>gst_rtcp_packet_get_length ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             gst_rtcp_packet_get_length          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the length field of <em class="parameter"><code>packet</code></em>. This is the length of the packet in 
+32-bit words minus one.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length field of <em class="parameter"><code>packet</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sr-get-sender-info"></a><h3>gst_rtcp_packet_sr_get_sender_info ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_sr_get_sender_info  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *ntptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *rtptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *packet_count</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *octet_count</code></em>);</pre>
+<p>
+Parse the SR sender info and store the values.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>result SSRC</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ntptime</code></em> :</span></p></td>
+<td>result NTP time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtptime</code></em> :</span></p></td>
+<td>result RTP time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet_count</code></em> :</span></p></td>
+<td>result packet count</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>octet_count</code></em> :</span></p></td>
+<td>result octect count</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sr-set-sender-info"></a><h3>gst_rtcp_packet_sr_set_sender_info ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_sr_set_sender_info  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> ntptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> rtptime</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> packet_count</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> octet_count</code></em>);</pre>
+<p>
+Set the given values in the SR packet <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>the SSRC</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ntptime</code></em> :</span></p></td>
+<td>the NTP time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtptime</code></em> :</span></p></td>
+<td>the RTP time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet_count</code></em> :</span></p></td>
+<td>the packet count</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>octet_count</code></em> :</span></p></td>
+<td>the octect count</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-rr-get-ssrc"></a><h3>gst_rtcp_packet_rr_get_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtcp_packet_rr_get_ssrc         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the ssrc field of the RR <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ssrc.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-rr-set-ssrc"></a><h3>gst_rtcp_packet_rr_set_ssrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_rr_set_ssrc         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Set the ssrc field of the RR <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>the SSRC to set</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-rb-count"></a><h3>gst_rtcp_packet_get_rb_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtcp_packet_get_rb_count        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the number of report blocks in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR or RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of report blocks in <em class="parameter"><code>packet</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-rb"></a><h3>gst_rtcp_packet_get_rb ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_get_rb              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> *packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *dlsr</code></em>);</pre>
+<p>
+Parse the values of the <em class="parameter"><code>nth</code></em> report block in <em class="parameter"><code>packet</code></em> and store the result in
+the values.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR or RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>the nth report block in <em class="parameter"><code>packet</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>result for data source being reported</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fractionlost</code></em> :</span></p></td>
+<td>result for fraction lost since last SR/RR</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packetslost</code></em> :</span></p></td>
+<td>result for the cumululative number of packets lost</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>exthighestseq</code></em> :</span></p></td>
+<td>result for the extended last sequence number received</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>jitter</code></em> :</span></p></td>
+<td>result for the interarrival jitter</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lsr</code></em> :</span></p></td>
+<td>result for the last SR packet from this source</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dlsr</code></em> :</span></p></td>
+<td>result for the delay since last SR packet</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-add-rb"></a><h3>gst_rtcp_packet_add_rb ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_add_rb              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dlsr</code></em>);</pre>
+<p>
+Add a new report block to <em class="parameter"><code>packet</code></em> with the given values.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR or RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>data source being reported</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fractionlost</code></em> :</span></p></td>
+<td>fraction lost since last SR/RR</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packetslost</code></em> :</span></p></td>
+<td>the cumululative number of packets lost</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>exthighestseq</code></em> :</span></p></td>
+<td>the extended last sequence number received</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>jitter</code></em> :</span></p></td>
+<td>the interarrival jitter</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lsr</code></em> :</span></p></td>
+<td>the last SR packet from this source</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dlsr</code></em> :</span></p></td>
+<td>the delay since last SR packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the packet was created. This function can return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+the max MTU is exceeded or the number of report blocks is greater than
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS" title="GST_RTCP_MAX_RB_COUNT"><span class="type">GST_RTCP_MAX_RB_COUNT</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-set-rb"></a><h3>gst_rtcp_packet_set_rb ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_set_rb              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> fractionlost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint32"><span class="type">gint32</span></a> packetslost</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> exthighestseq</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> jitter</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> lsr</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> dlsr</code></em>);</pre>
+<p>
+Set the <em class="parameter"><code>nth</code></em> new report block in <em class="parameter"><code>packet</code></em> with the given values.
+</p>
+<p>
+Note: Not implemented.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SR or RR <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>the nth report block to set</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>data source being reported</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fractionlost</code></em> :</span></p></td>
+<td>fraction lost since last SR/RR</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packetslost</code></em> :</span></p></td>
+<td>the cumululative number of packets lost</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>exthighestseq</code></em> :</span></p></td>
+<td>the extended last sequence number received</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>jitter</code></em> :</span></p></td>
+<td>the interarrival jitter</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lsr</code></em> :</span></p></td>
+<td>the last SR packet from this source</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dlsr</code></em> :</span></p></td>
+<td>the delay since last SR packet</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-get-item-count"></a><h3>gst_rtcp_packet_sdes_get_item_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtcp_packet_sdes_get_item_count (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the number of items in the SDES packet <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of items in <em class="parameter"><code>packet</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-first-item"></a><h3>gst_rtcp_packet_sdes_first_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_first_item     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Move to the first SDES item in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if there was a first item.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-next-item"></a><h3>gst_rtcp_packet_sdes_next_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_next_item      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Move to the next SDES item in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if there was a next item.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-get-ssrc"></a><h3>gst_rtcp_packet_sdes_get_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtcp_packet_sdes_get_ssrc       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the SSRC of the current SDES item.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the SSRC of the current item.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-first-entry"></a><h3>gst_rtcp_packet_sdes_first_entry ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_first_entry    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Move to the first SDES entry in the current item.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was a first entry.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-next-entry"></a><h3>gst_rtcp_packet_sdes_next_entry ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_next_entry     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Move to the next SDES entry in the current item.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was a next entry.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-get-entry"></a><h3>gst_rtcp_packet_sdes_get_entry ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_get_entry      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> *type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>);</pre>
+<p>
+Get the data of the current SDES item entry. <em class="parameter"><code>type</code></em> (when not NULL) will
+contain the type of the entry. <em class="parameter"><code>data</code></em> (when not NULL) will point to <em class="parameter"><code>len</code></em>
+bytes.
+</p>
+<p>
+When <em class="parameter"><code>type</code></em> refers to a text item, <em class="parameter"><code>data</code></em> will point to a UTF8 string. Note
+that this UTF8 string is NOT null-terminated. Use
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry" title="gst_rtcp_packet_sdes_copy_entry ()"><code class="function">gst_rtcp_packet_sdes_copy_entry()</code></a> to get a null-termined copy of the entry.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>result of the entry type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>result length of the entry data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>result entry data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was valid data.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-copy-entry"></a><h3>gst_rtcp_packet_sdes_copy_entry ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_copy_entry     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> *type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>);</pre>
+<p>
+This function is like <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry" title="gst_rtcp_packet_sdes_get_entry ()"><code class="function">gst_rtcp_packet_sdes_get_entry()</code></a> but it returns a
+null-terminated copy of the data instead. use <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>result of the entry type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>result length of the entry data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>result entry data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was valid data.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-add-item"></a><h3>gst_rtcp_packet_sdes_add_item ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_add_item       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Add a new SDES item for <em class="parameter"><code>ssrc</code></em> to <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>the SSRC of the new item to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the item could be added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the maximum amount of
+items has been exceeded for the SDES packet or the MTU has been reached.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-add-entry"></a><h3>gst_rtcp_packet_sdes_add_entry ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_sdes_add_entry      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> type</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> len</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>);</pre>
+<p>
+Add a new SDES entry to the current item in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> of the SDES entry</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the data length</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the item could be added, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the MTU has been
+reached.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-get-ssrc-count"></a><h3>gst_rtcp_packet_bye_get_ssrc_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtcp_packet_bye_get_ssrc_count  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the number of SSRC fields in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The number of SSRC fields in <em class="parameter"><code>packet</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-get-nth-ssrc"></a><h3>gst_rtcp_packet_bye_get_nth_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtcp_packet_bye_get_nth_ssrc    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);</pre>
+<p>
+Get the <em class="parameter"><code>nth</code></em> SSRC of the BYE <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>the nth SSRC to get</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The <em class="parameter"><code>nth</code></em> SSRC of <em class="parameter"><code>packet</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-add-ssrc"></a><h3>gst_rtcp_packet_bye_add_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_bye_add_ssrc        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Add <em class="parameter"><code>ssrc</code></em> to the BYE <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>an SSRC to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the ssrc was added. This function can return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+the max MTU is exceeded or the number of sources blocks is greater than
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT"><span class="type">GST_RTCP_MAX_BYE_SSRC_COUNT</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-add-ssrcs"></a><h3>gst_rtcp_packet_bye_add_ssrcs ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_bye_add_ssrcs       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *ssrc</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Adds <em class="parameter"><code>len</code></em> SSRCs in <em class="parameter"><code>ssrc</code></em> to BYE <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>an array of SSRCs to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of elements in <em class="parameter"><code>ssrc</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the all the SSRCs were added. This function can return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+the max MTU is exceeded or the number of sources blocks is greater than
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT"><span class="type">GST_RTCP_MAX_BYE_SSRC_COUNT</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-get-reason-len"></a><h3>gst_rtcp_packet_bye_get_reason_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_rtcp_packet_bye_get_reason_len  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the length of the reason string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length of the reason string or 0 when there is no reason string
+present.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-get-reason"></a><h3>gst_rtcp_packet_bye_get_reason ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtcp_packet_bye_get_reason      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the reason in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The reason for the BYE <em class="parameter"><code>packet</code></em> or NULL if the packet did not contain
+a reason string. The string must be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-bye-set-reason"></a><h3>gst_rtcp_packet_bye_set_reason ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_bye_set_reason      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>);</pre>
+<p>
+Set the reason string to <em class="parameter"><code>reason</code></em> in <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid BYE <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>a reason string</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the string could be set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-get-type"></a><h3>gst_rtcp_packet_fb_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType"><span class="returnvalue">GstRTCPFBType</span></a>       gst_rtcp_packet_fb_get_type         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the feedback message type of the FB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The feedback message type.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-set-type"></a><h3>gst_rtcp_packet_fb_set_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_fb_set_type         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType"><span class="type">GstRTCPFBType</span></a> type</code></em>);</pre>
+<p>
+Set the feedback message type of the FB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" title="enum GstRTCPFBType"><span class="type">GstRTCPFBType</span></a> to set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-get-sender-ssrc"></a><h3>gst_rtcp_packet_fb_get_sender_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtcp_packet_fb_get_sender_ssrc  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the sender SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the sender SSRC.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-set-sender-ssrc"></a><h3>gst_rtcp_packet_fb_set_sender_ssrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_fb_set_sender_ssrc  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Set the sender SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>a sender SSRC</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-get-media-ssrc"></a><h3>gst_rtcp_packet_fb_get_media_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtcp_packet_fb_get_media_ssrc   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the media SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the media SSRC.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-set-media-ssrc"></a><h3>gst_rtcp_packet_fb_set_media_ssrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtcp_packet_fb_set_media_ssrc   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Set the media SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>a media SSRC</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-get-fci-length"></a><h3>gst_rtcp_packet_fb_get_fci_length ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             gst_rtcp_packet_fb_get_fci_length   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the length of the Feedback Control Information attached to a
+RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length of the FCI in 32-bit words.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-set-fci-length"></a><h3>gst_rtcp_packet_fb_set_fci_length ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtcp_packet_fb_set_fci_length   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> wordlen</code></em>);</pre>
+<p>
+Set the length of the Feedback Control Information attached to a
+RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wordlen</code></em> :</span></p></td>
+<td>Length of the FCI in 32-bit words</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was enough space in the packet to add this much FCI</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-fb-get-fci"></a><h3>gst_rtcp_packet_fb_get_fci ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a> *            gst_rtcp_packet_fb_get_fci          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>
+Get the Feedback Control Information attached to a RTPFB or PSFB <em class="parameter"><code>packet</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet</code></em> :</span></p></td>
+<td>a valid RTPFB or PSFB <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a pointer to the FCI</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-ntp-to-unix"></a><h3>gst_rtcp_ntp_to_unix ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             gst_rtcp_ntp_to_unix                (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> ntptime</code></em>);</pre>
+<p>
+Converts an NTP time to UNIX nanoseconds. <em class="parameter"><code>ntptime</code></em> can typically be
+the NTP time of an SR RTCP message and contains, in the upper 32 bits, the
+number of seconds since 1900 and, in the lower 32 bits, the fractional
+seconds. The resulting value will be the number of nanoseconds since 1970.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ntptime</code></em> :</span></p></td>
+<td>an NTP timestamp</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the UNIX time for <em class="parameter"><code>ntptime</code></em> in nanoseconds.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-unix-to-ntp"></a><h3>gst_rtcp_unix_to_ntp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             gst_rtcp_unix_to_ntp                (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> unixtime</code></em>);</pre>
+<p>
+Converts a UNIX timestamp in nanoseconds to an NTP time. The caller should
+pass a value with nanoseconds since 1970. The NTP time will, in the upper
+32 bits, contain the number of seconds since 1900 and, in the lower 32
+bits, the fractional seconds. The resulting value can be used as an ntptime
+for constructing SR RTCP packets.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>unixtime</code></em> :</span></p></td>
+<td>an UNIX timestamp in nanoseconds</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the NTP time for <em class="parameter"><code>unixtime</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-sdes-name-to-type"></a><h3>gst_rtcp_sdes_name_to_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="returnvalue">GstRTCPSDESType</span></a>     gst_rtcp_sdes_name_to_type          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>name</code></em> into a <em class="parameter"><code>GstRTCPSDESType</code></em>. <em class="parameter"><code>name</code></em> is typically a key in a
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> containing SDES items.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>a SDES name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> for <em class="parameter"><code>name</code></em> or <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS"><span class="type">GST_RTCP_SDES_PRIV</span></a> when <em class="parameter"><code>name</code></em>
+is a private sdes item.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-sdes-type-to-name"></a><h3>gst_rtcp_sdes_type_to_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtcp_sdes_type_to_name          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> type</code></em>);</pre>
+<p>
+Converts <em class="parameter"><code>type</code></em> to the string equivalent. The string is typically used as a
+key in a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstStructure.html#GstStructure"><span class="type">GstStructure</span></a> containing SDES items.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the string equivalent of <em class="parameter"><code>type</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtcpbuffer.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>, <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a>, <span class="type">gstrtpbuffer</span>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html
new file mode 100644
index 0000000..25c9ecd
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html
@@ -0,0 +1,1447 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtpbuffer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstbasertppayload.html" title="gstbasertppayload">
+<link rel="next" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstbasertppayload.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtcpbuffer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtpbuffer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtpbuffer.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtpbuffer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtpbuffer.top_of_page"></a>gstrtpbuffer</span></h2>
+<p>gstrtpbuffer — Helper methods for dealing with RTP buffers</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtpbuffer.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtp/gstrtpbuffer.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-VERSION:CAPS" title="GST_RTP_VERSION">GST_RTP_VERSION</a>
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-allocate-data" title="gst_rtp_buffer_allocate_data ()">gst_rtp_buffer_allocate_data</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-take-data" title="gst_rtp_buffer_new_take_data ()">gst_rtp_buffer_new_take_data</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-copy-data" title="gst_rtp_buffer_new_copy_data ()">gst_rtp_buffer_new_copy_data</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate" title="gst_rtp_buffer_new_allocate ()">gst_rtp_buffer_new_allocate</a>         (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate-len" title="gst_rtp_buffer_new_allocate_len ()">gst_rtp_buffer_new_allocate_len</a>     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> packet_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-header-len" title="gst_rtp_buffer_calc_header_len ()">gst_rtp_buffer_calc_header_len</a>      (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-packet-len" title="gst_rtp_buffer_calc_packet_len ()">gst_rtp_buffer_calc_packet_len</a>      (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-payload-len" title="gst_rtp_buffer_calc_payload_len ()">gst_rtp_buffer_calc_payload_len</a>     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> packet_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate" title="gst_rtp_buffer_validate ()">gst_rtp_buffer_validate</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate-data" title="gst_rtp_buffer_validate_data ()">gst_rtp_buffer_validate_data</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-packet-len" title="gst_rtp_buffer_set_packet_len ()">gst_rtp_buffer_set_packet_len</a>       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-packet-len" title="gst_rtp_buffer_get_packet_len ()">gst_rtp_buffer_get_packet_len</a>       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-header-len" title="gst_rtp_buffer_get_header_len ()">gst_rtp_buffer_get_header_len</a>       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-version" title="gst_rtp_buffer_get_version ()">gst_rtp_buffer_get_version</a>          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-version" title="gst_rtp_buffer_set_version ()">gst_rtp_buffer_set_version</a>          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> version</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-padding" title="gst_rtp_buffer_get_padding ()">gst_rtp_buffer_get_padding</a>          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-padding" title="gst_rtp_buffer_set_padding ()">gst_rtp_buffer_set_padding</a>          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> padding</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-pad-to" title="gst_rtp_buffer_pad_to ()">gst_rtp_buffer_pad_to</a>               (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension" title="gst_rtp_buffer_get_extension ()">gst_rtp_buffer_get_extension</a>        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension" title="gst_rtp_buffer_set_extension ()">gst_rtp_buffer_set_extension</a>        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> extension</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data" title="gst_rtp_buffer_get_extension_data ()">gst_rtp_buffer_get_extension_data</a>   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *bits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *wordlen</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc" title="gst_rtp_buffer_get_ssrc ()">gst_rtp_buffer_get_ssrc</a>             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc" title="gst_rtp_buffer_set_ssrc ()">gst_rtp_buffer_set_ssrc</a>             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count" title="gst_rtp_buffer_get_csrc_count ()">gst_rtp_buffer_get_csrc_count</a>       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc" title="gst_rtp_buffer_get_csrc ()">gst_rtp_buffer_get_csrc</a>             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> idx</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-csrc" title="gst_rtp_buffer_set_csrc ()">gst_rtp_buffer_set_csrc</a>             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> idx</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> csrc</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-marker" title="gst_rtp_buffer_get_marker ()">gst_rtp_buffer_get_marker</a>           (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-marker" title="gst_rtp_buffer_set_marker ()">gst_rtp_buffer_set_marker</a>           (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> marker</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-type" title="gst_rtp_buffer_get_payload_type ()">gst_rtp_buffer_get_payload_type</a>     (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-payload-type" title="gst_rtp_buffer_set_payload_type ()">gst_rtp_buffer_set_payload_type</a>     (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-seq" title="gst_rtp_buffer_get_seq ()">gst_rtp_buffer_get_seq</a>              (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-seq" title="gst_rtp_buffer_set_seq ()">gst_rtp_buffer_set_seq</a>              (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seq</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-timestamp" title="gst_rtp_buffer_get_timestamp ()">gst_rtp_buffer_get_timestamp</a>        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-timestamp" title="gst_rtp_buffer_set_timestamp ()">gst_rtp_buffer_set_timestamp</a>        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer" title="gst_rtp_buffer_get_payload_buffer ()">gst_rtp_buffer_get_payload_buffer</a>   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer" title="gst_rtp_buffer_get_payload_subbuffer ()">gst_rtp_buffer_get_payload_subbuffer</a>
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len" title="gst_rtp_buffer_get_payload_len ()">gst_rtp_buffer_get_payload_len</a>      (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload" title="gst_rtp_buffer_get_payload ()">gst_rtp_buffer_get_payload</a>          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate" title="gst_rtp_buffer_default_clock_rate ()">gst_rtp_buffer_default_clock_rate</a>   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum" title="gst_rtp_buffer_compare_seqnum ()">gst_rtp_buffer_compare_seqnum</a>       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seqnum1</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seqnum2</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-ext-timestamp" title="gst_rtp_buffer_ext_timestamp ()">gst_rtp_buffer_ext_timestamp</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *exttimestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension-data" title="gst_rtp_buffer_set_extension_data ()">gst_rtp_buffer_set_extension_data</a>   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> bits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> length</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-onebyte-header" title="gst_rtp_buffer_get_extension_onebyte_header ()">gst_rtp_buffer_get_extension_onebyte_header</a>
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-twobytes-header" title="gst_rtp_buffer_get_extension_twobytes_header ()">gst_rtp_buffer_get_extension_twobytes_header</a>
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *appbits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header" title="gst_rtp_buffer_add_extension_onebyte_header ()">gst_rtp_buffer_add_extension_onebyte_header</a>
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header" title="gst_rtp_buffer_add_extension_twobytes_header ()">gst_rtp_buffer_add_extension_twobytes_header</a>
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> appbits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtpbuffer.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id535614"></a><p>
+The GstRTPBuffer helper functions makes it easy to parse and create regular 
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> objects that contain RTP payloads. These buffers are typically of
+'application/x-rtp' <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-07-17 (0.10.10)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtpbuffer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-RTP-VERSION:CAPS"></a><h3>GST_RTP_VERSION</h3>
+<pre class="programlisting">#define GST_RTP_VERSION 2
+</pre>
+<p>
+The supported RTP version 2.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-allocate-data"></a><h3>gst_rtp_buffer_allocate_data ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_allocate_data        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Allocate enough data in <em class="parameter"><code>buffer</code></em> to hold an RTP packet with <em class="parameter"><code>csrc_count</code></em> CSRCs,
+a payload length of <em class="parameter"><code>payload_len</code></em> and padding of <em class="parameter"><code>pad_len</code></em>.
+MALLOCDATA of <em class="parameter"><code>buffer</code></em> will be overwritten and will not be freed. 
+All other RTP header fields will be set to 0/FALSE.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_len</code></em> :</span></p></td>
+<td>the length of the payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad_len</code></em> :</span></p></td>
+<td>the amount of padding</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-new-take-data"></a><h3>gst_rtp_buffer_new_take_data ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_new_take_data        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);</pre>
+<p>
+Create a new buffer and set the data and size of the buffer to <em class="parameter"><code>data</code></em> and <em class="parameter"><code>len</code></em>
+respectively. <em class="parameter"><code>data</code></em> will be freed when the buffer is unreffed, so this
+function transfers ownership of <em class="parameter"><code>data</code></em> to the new buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data for the new buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer with <em class="parameter"><code>data</code></em> and of size <em class="parameter"><code>len</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-new-copy-data"></a><h3>gst_rtp_buffer_new_copy_data ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_new_copy_data        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);</pre>
+<p>
+Create a new buffer and set the data to a copy of <em class="parameter"><code>len</code></em>
+bytes of <em class="parameter"><code>data</code></em> and the size to <em class="parameter"><code>len</code></em>. The data will be freed when the buffer
+is freed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data for the new buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer with a copy of <em class="parameter"><code>data</code></em> and of size <em class="parameter"><code>len</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-new-allocate"></a><h3>gst_rtp_buffer_new_allocate ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_new_allocate         (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Allocate a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> with enough data to hold an RTP packet with
+<em class="parameter"><code>csrc_count</code></em> CSRCs, a payload length of <em class="parameter"><code>payload_len</code></em> and padding of <em class="parameter"><code>pad_len</code></em>.
+All other RTP header fields will be set to 0/FALSE.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_len</code></em> :</span></p></td>
+<td>the length of the payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad_len</code></em> :</span></p></td>
+<td>the amount of padding</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer that can hold an RTP packet with given
+parameters.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-new-allocate-len"></a><h3>gst_rtp_buffer_new_allocate_len ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_new_allocate_len     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> packet_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Create a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> that can hold an RTP packet that is exactly
+<em class="parameter"><code>packet_len</code></em> long. The length of the payload depends on <em class="parameter"><code>pad_len</code></em> and
+<em class="parameter"><code>csrc_count</code></em> and can be calculated with <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-payload-len" title="gst_rtp_buffer_calc_payload_len ()"><code class="function">gst_rtp_buffer_calc_payload_len()</code></a>.
+All RTP header fields will be set to 0/FALSE.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp_len</code></em> :</span></p></td>
+<td>the total length of the packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad_len</code></em> :</span></p></td>
+<td>the amount of padding</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A newly allocated buffer that can hold an RTP packet of <em class="parameter"><code>packet_len</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-calc-header-len"></a><h3>gst_rtp_buffer_calc_header_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_calc_header_len      (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Calculate the header length of an RTP packet with <em class="parameter"><code>csrc_count</code></em> CSRC entries.
+An RTP packet can have at most 15 CSRC entries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length of an RTP header with <em class="parameter"><code>csrc_count</code></em> CSRC entries.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-calc-packet-len"></a><h3>gst_rtp_buffer_calc_packet_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_calc_packet_len      (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> payload_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Calculate the total length of an RTP packet with a payload size of <em class="parameter"><code>payload_len</code></em>,
+a padding of <em class="parameter"><code>pad_len</code></em> and a <em class="parameter"><code>csrc_count</code></em> CSRC entries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_len</code></em> :</span></p></td>
+<td>the length of the payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad_len</code></em> :</span></p></td>
+<td>the amount of padding</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The total length of an RTP header with given parameters.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-calc-payload-len"></a><h3>gst_rtp_buffer_calc_payload_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_calc_payload_len     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> packet_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> pad_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> csrc_count</code></em>);</pre>
+<p>
+Calculate the length of the payload of an RTP packet with size <em class="parameter"><code>packet_len</code></em>,
+a padding of <em class="parameter"><code>pad_len</code></em> and a <em class="parameter"><code>csrc_count</code></em> CSRC entries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>packet_len</code></em> :</span></p></td>
+<td>the length of the total RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad_len</code></em> :</span></p></td>
+<td>the amount of padding</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc_count</code></em> :</span></p></td>
+<td>the number of CSRC entries</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length of the payload of an RTP packet  with given parameters.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-validate"></a><h3>gst_rtp_buffer_validate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_validate             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Check if the data pointed to by <em class="parameter"><code>buffer</code></em> is a valid RTP packet using
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate-data" title="gst_rtp_buffer_validate_data ()"><code class="function">gst_rtp_buffer_validate_data()</code></a>.
+Use this function to validate a packet before using the other functions in
+this module.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>the buffer to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> is a valid RTP packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-validate-data"></a><h3>gst_rtp_buffer_validate_data ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_validate_data        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);</pre>
+<p>
+Check if the <em class="parameter"><code>data</code></em> and <em class="parameter"><code>size</code></em> point to the data of a valid RTP packet.
+This function checks the length, version and padding of the packet data.
+Use this function to validate a packet before using the other functions in
+this module.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of <em class="parameter"><code>data</code></em> to validate</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the data points to a valid RTP packet.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-packet-len"></a><h3>gst_rtp_buffer_set_packet_len ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_packet_len       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Set the total <em class="parameter"><code>rtp</code></em> size to <em class="parameter"><code>len</code></em>. The data in the buffer will be made
+larger if needed. Any padding will be removed from the packet.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the new packet length</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-packet-len"></a><h3>gst_rtp_buffer_get_packet_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_get_packet_len       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Return the total length of the packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The total length of the packet in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-header-len"></a><h3>gst_rtp_buffer_get_header_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_get_header_len       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Return the total length of the header in <em class="parameter"><code>buffer</code></em>. This include the length of
+the fixed header, the CSRC list and the extension header.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The total length of the header in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-version"></a><h3>gst_rtp_buffer_get_version ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_rtp_buffer_get_version          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the version number of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The version of <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-version"></a><h3>gst_rtp_buffer_set_version ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_version          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> version</code></em>);</pre>
+<p>
+Set the version of the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>version</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>version</code></em> :</span></p></td>
+<td>the new version</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-padding"></a><h3>gst_rtp_buffer_get_padding ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_padding          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Check if the padding bit is set on the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> has the padding bit set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-padding"></a><h3>gst_rtp_buffer_set_padding ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_padding          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> padding</code></em>);</pre>
+<p>
+Set the padding bit on the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>padding</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>the buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>padding</code></em> :</span></p></td>
+<td>the new padding</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-pad-to"></a><h3>gst_rtp_buffer_pad_to ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_pad_to               (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Set the amount of padding in the RTP packet in <em class="parameter"><code>buffer</code></em> to
+<em class="parameter"><code>len</code></em>. If <em class="parameter"><code>len</code></em> is 0, the padding is removed.
+</p>
+<p>
+NOTE: This function does not work correctly.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the new amount of padding</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-extension"></a><h3>gst_rtp_buffer_get_extension ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_extension        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Check if the extension bit is set on the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> has the extension bit set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-extension"></a><h3>gst_rtp_buffer_set_extension ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_extension        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> extension</code></em>);</pre>
+<p>
+Set the extension bit on the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>extension</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extension</code></em> :</span></p></td>
+<td>the new extension</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-extension-data"></a><h3>gst_rtp_buffer_get_extension_data ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_extension_data   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *bits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *wordlen</code></em>);</pre>
+<p>
+Get the extension data. <em class="parameter"><code>bits</code></em> will contain the extension 16 bits of custom
+data. <em class="parameter"><code>data</code></em> will point to the data in the extension and <em class="parameter"><code>wordlen</code></em> will contain
+the length of <em class="parameter"><code>data</code></em> in 32 bits words.
+</p>
+<p>
+If <em class="parameter"><code>buffer</code></em> did not contain an extension, this function will return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+with <em class="parameter"><code>bits</code></em>, <em class="parameter"><code>data</code></em> and <em class="parameter"><code>wordlen</code></em> unchanged.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bits</code></em> :</span></p></td>
+<td>location for result bits</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wordlen</code></em> :</span></p></td>
+<td>location for length of <em class="parameter"><code>data</code></em> in 32 bits words</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> had the extension bit set.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-ssrc"></a><h3>gst_rtp_buffer_get_ssrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtp_buffer_get_ssrc             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the SSRC of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the SSRC of <em class="parameter"><code>buffer</code></em> in host order.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-ssrc"></a><h3>gst_rtp_buffer_set_ssrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_ssrc             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> ssrc</code></em>);</pre>
+<p>
+Set the SSRC on the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>ssrc</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ssrc</code></em> :</span></p></td>
+<td>the new SSRC</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-csrc-count"></a><h3>gst_rtp_buffer_get_csrc_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_rtp_buffer_get_csrc_count       (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the CSRC count of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CSRC count of <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-csrc"></a><h3>gst_rtp_buffer_get_csrc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtp_buffer_get_csrc             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> idx</code></em>);</pre>
+<p>
+Get the CSRC at index <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the index of the CSRC to get</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the CSRC at index <em class="parameter"><code>idx</code></em> in host order.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-csrc"></a><h3>gst_rtp_buffer_set_csrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_csrc             (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> idx</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> csrc</code></em>);</pre>
+<p>
+Modify the CSRC at index <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>csrc</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the CSRC index to set</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>csrc</code></em> :</span></p></td>
+<td>the CSRC in host order to set at <em class="parameter"><code>idx</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-marker"></a><h3>gst_rtp_buffer_get_marker ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_marker           (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Check if the marker bit is set on the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> has the marker bit set.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-marker"></a><h3>gst_rtp_buffer_set_marker ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_marker           (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> marker</code></em>);</pre>
+<p>
+Set the marker bit on the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>marker</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>marker</code></em> :</span></p></td>
+<td>the new marker</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload-type"></a><h3>gst_rtp_buffer_get_payload_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="returnvalue">guint8</span></a>              gst_rtp_buffer_get_payload_type     (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the payload type of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The payload type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-payload-type"></a><h3>gst_rtp_buffer_set_payload_type ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_payload_type     (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);</pre>
+<p>
+Set the payload type of the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>payload_type</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_type</code></em> :</span></p></td>
+<td>the new type</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-seq"></a><h3>gst_rtp_buffer_get_seq ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="returnvalue">guint16</span></a>             gst_rtp_buffer_get_seq              (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the sequence number of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The sequence number in host order.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-seq"></a><h3>gst_rtp_buffer_set_seq ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_seq              (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seq</code></em>);</pre>
+<p>
+Set the sequence number of the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>seq</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>seq</code></em> :</span></p></td>
+<td>the new sequence number</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-timestamp"></a><h3>gst_rtp_buffer_get_timestamp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtp_buffer_get_timestamp        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the timestamp of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The timestamp in host order.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-timestamp"></a><h3>gst_rtp_buffer_set_timestamp ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtp_buffer_set_timestamp        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>);</pre>
+<p>
+Set the timestamp of the RTP packet in <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>timestamp</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timestamp</code></em> :</span></p></td>
+<td>the new timestamp</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload-buffer"></a><h3>gst_rtp_buffer_get_payload_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_get_payload_buffer   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Create a buffer of the payload of the RTP packet in <em class="parameter"><code>buffer</code></em>. This function
+will internally create a subbuffer of <em class="parameter"><code>buffer</code></em> so that a memcpy can be
+avoided.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new buffer with the data of the payload.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload-subbuffer"></a><h3>gst_rtp_buffer_get_payload_subbuffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_rtp_buffer_get_payload_subbuffer
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> len</code></em>);</pre>
+<p>
+Create a subbuffer of the payload of the RTP packet in <em class="parameter"><code>buffer</code></em>. <em class="parameter"><code>offset</code></em> bytes
+are skipped in the payload and the subbuffer will be of size <em class="parameter"><code>len</code></em>.
+If <em class="parameter"><code>len</code></em> is -1 the total payload starting from <em class="parameter"><code>offset</code></em> if subbuffered.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>offset</code></em> :</span></p></td>
+<td>the offset in the payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length in the payload</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new buffer with the specified data of the payload.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload-len"></a><h3>gst_rtp_buffer_get_payload_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtp_buffer_get_payload_len      (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get the length of the payload of the RTP packet in <em class="parameter"><code>buffer</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The length of the payload in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload"></a><h3>gst_rtp_buffer_get_payload ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>            gst_rtp_buffer_get_payload          (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>);</pre>
+<p>
+Get a pointer to the payload data in <em class="parameter"><code>buffer</code></em>. This pointer is valid as long
+as a reference to <em class="parameter"><code>buffer</code></em> is held.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A pointer to the payload data in <em class="parameter"><code>buffer</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-default-clock-rate"></a><h3>gst_rtp_buffer_default_clock_rate ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_rtp_buffer_default_clock_rate   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);</pre>
+<p>
+Get the default clock-rate for the static payload type <em class="parameter"><code>payload_type</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_type</code></em> :</span></p></td>
+<td>the static payload type</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the default clock rate or -1 if the payload type is not static or
+the clock-rate is undefined.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-compare-seqnum"></a><h3>gst_rtp_buffer_compare_seqnum ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_rtp_buffer_compare_seqnum       (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seqnum1</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> seqnum2</code></em>);</pre>
+<p>
+Compare two sequence numbers, taking care of wraparounds. This function
+returns the difference between <em class="parameter"><code>seqnum1</code></em> and <em class="parameter"><code>seqnum2</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>seqnum1</code></em> :</span></p></td>
+<td>a sequence number</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>seqnum2</code></em> :</span></p></td>
+<td>a sequence number</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a negative value if <em class="parameter"><code>seqnum1</code></em> is bigger than <em class="parameter"><code>seqnum2</code></em>, 0 if they
+are equal or a positive value if <em class="parameter"><code>seqnum1</code></em> is smaller than <em class="parameter"><code>segnum2</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-ext-timestamp"></a><h3>gst_rtp_buffer_ext_timestamp ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="returnvalue">guint64</span></a>             gst_rtp_buffer_ext_timestamp        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> *exttimestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> timestamp</code></em>);</pre>
+<p>
+Update the <em class="parameter"><code>exttimestamp</code></em> field with <em class="parameter"><code>timestamp</code></em>. For the first call of the
+method, <em class="parameter"><code>exttimestamp</code></em> should point to a location with a value of -1.
+</p>
+<p>
+This function makes sure that the returned value is a constantly increasing
+value even in the case where there is a timestamp wraparound.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>exttimestamp</code></em> :</span></p></td>
+<td>a previous extended timestamp</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timestamp</code></em> :</span></p></td>
+<td>a new timestamp</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The extended timestamp of <em class="parameter"><code>timestamp</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-set-extension-data"></a><h3>gst_rtp_buffer_set_extension_data ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_set_extension_data   (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> bits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> length</code></em>);</pre>
+<p>
+Set the extension bit of the rtp buffer and fill in the <em class="parameter"><code>bits</code></em> and <em class="parameter"><code>length</code></em> of the
+extension header. It will refuse to set the extension data if the buffer is not
+large enough.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bits</code></em> :</span></p></td>
+<td>the bits specific for the extension</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>the length that counts the number of 32-bit words in
+the extension, excluding the extension header ( therefore zero is a valid length)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>True if done.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.18</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-extension-onebyte-header"></a><h3>gst_rtp_buffer_get_extension_onebyte_header ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_extension_onebyte_header
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);</pre>
+<p>
+Parses RFC 5285 style header extensions with a one byte header. It will
+return the nth extension with the requested id.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>The ID of the header extension to be read (between 1 and 14).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>Read the nth extension packet with the requested ID</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the data in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> had the requested header extension</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-extension-twobytes-header"></a><h3>gst_rtp_buffer_get_extension_twobytes_header ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_get_extension_twobytes_header
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *appbits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);</pre>
+<p>
+Parses RFC 5285 style header extensions with a two bytes header. It will
+return the nth extension with the requested id.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appbits</code></em> :</span></p></td>
+<td>Application specific bits</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>The ID of the header extension to be read (between 1 and 14).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>Read the nth extension packet with the requested ID</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the data in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if <em class="parameter"><code>buffer</code></em> had the requested header extension</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-add-extension-onebyte-header"></a><h3>gst_rtp_buffer_add_extension_onebyte_header ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_add_extension_onebyte_header
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>
+Adds a RFC 5285 header extension with a one byte header to the end of the
+RTP header. If there is already a RFC 5285 header extension with a one byte
+header, the new extension will be appended.
+It will not work if there is already a header extension that does not follow
+the mecanism described in RFC 5285 or if there is a header extension with
+a two bytes header as described in RFC 5285. In that case, use
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header" title="gst_rtp_buffer_add_extension_twobytes_header ()"><code class="function">gst_rtp_buffer_add_extension_twobytes_header()</code></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>The ID of the header extension (between 1 and 14).</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the data in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if header extension could be added</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-add-extension-twobytes-header"></a><h3>gst_rtp_buffer_add_extension_twobytes_header ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtp_buffer_add_extension_twobytes_header
+                                                        (<em class="parameter"><code><span class="type">GstRTPBuffer</span> *rtp</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> appbits</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> id</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>
+Adds a RFC 5285 header extension with a two bytes header to the end of the
+RTP header. If there is already a RFC 5285 header extension with a two bytes
+header, the new extension will be appended.
+It will not work if there is already a header extension that does not follow
+the mecanism described in RFC 5285 or if there is a header extension with
+a one byte header as described in RFC 5285. In that case, use
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header" title="gst_rtp_buffer_add_extension_onebyte_header ()"><code class="function">gst_rtp_buffer_add_extension_onebyte_header()</code></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtp</code></em> :</span></p></td>
+<td>the RTP packet</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>appbits</code></em> :</span></p></td>
+<td>Application specific bits</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>The ID of the header extension</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the data in bytes</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if header extension could be added</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtpbuffer.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload"><span class="type">GstBaseRTPPayload</span></a>, <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload"><span class="type">GstBaseRTPDepayload</span></a>, gstrtcpbuffer
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html b/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html
new file mode 100644
index 0000000..3ff01db
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html
@@ -0,0 +1,388 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtppayloads</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtp.html" title="RTP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">
+<link rel="next" href="gstreamer-rtsp.html" title="RTSP Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtcpbuffer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-rtsp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtppayloads.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtppayloads.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtppayloads"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtppayloads.top_of_page"></a>gstrtppayloads</span></h2>
+<p>gstrtppayloads — Helper methods for dealing with RTP payloads</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtppayloads.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtp/gstrtppayload.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayload" title="enum GstRTPPayload">GstRTPPayload</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS" title="GST_RTP_PAYLOAD_IS_DYNAMIC()">GST_RTP_PAYLOAD_IS_DYNAMIC</a>          (pt)
+struct              <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo">GstRTPPayloadInfo</a>;
+const <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="returnvalue">GstRTPPayloadInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-name" title="gst_rtp_payload_info_for_name ()">gst_rtp_payload_info_for_name</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *encoding_name</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="returnvalue">GstRTPPayloadInfo</span></a> * <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt" title="gst_rtp_payload_info_for_pt ()">gst_rtp_payload_info_for_pt</a>   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtppayloads.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id420172"></a><p>
+The GstRTPPayloads helper functions makes it easy to deal with static and dynamic
+payloads. Its main purpose is to retrieve properties such as the default clock-rate 
+and get session bandwidth information.
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2007-10-01 (0.10.15)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtppayloads.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTPPayload"></a><h3>enum GstRTPPayload</h3>
+<pre class="programlisting">typedef enum {
+  /* Audio: */
+  GST_RTP_PAYLOAD_PCMU = 0,
+  GST_RTP_PAYLOAD_1016 = 1, /* RFC 3551 says reserved */
+  GST_RTP_PAYLOAD_G721 = 2, /* RFC 3551 says reserved */
+  GST_RTP_PAYLOAD_GSM = 3,
+  GST_RTP_PAYLOAD_G723 = 4,
+  GST_RTP_PAYLOAD_DVI4_8000 = 5,
+  GST_RTP_PAYLOAD_DVI4_16000 = 6,
+  GST_RTP_PAYLOAD_LPC = 7,
+  GST_RTP_PAYLOAD_PCMA = 8,
+  GST_RTP_PAYLOAD_G722 = 9,
+  GST_RTP_PAYLOAD_L16_STEREO = 10,
+  GST_RTP_PAYLOAD_L16_MONO = 11,
+  GST_RTP_PAYLOAD_QCELP = 12,
+  GST_RTP_PAYLOAD_CN = 13,
+  GST_RTP_PAYLOAD_MPA = 14,
+  GST_RTP_PAYLOAD_G728 = 15,
+  GST_RTP_PAYLOAD_DVI4_11025 = 16,
+  GST_RTP_PAYLOAD_DVI4_22050 = 17,
+  GST_RTP_PAYLOAD_G729 = 18,   
+
+  /* Video: */
+
+  GST_RTP_PAYLOAD_CELLB = 25,
+  GST_RTP_PAYLOAD_JPEG = 26,
+  GST_RTP_PAYLOAD_NV = 28,
+  GST_RTP_PAYLOAD_H261 = 31,
+  GST_RTP_PAYLOAD_MPV = 32,
+  GST_RTP_PAYLOAD_MP2T = 33,
+  GST_RTP_PAYLOAD_H263 = 34,
+
+  /* BOTH */
+} GstRTPPayload;
+</pre>
+<p>
+Standard predefined fixed payload types.
+</p>
+<p>
+The official list is at:
+http://www.iana.org/assignments/rtp-parameters
+</p>
+<p>
+Audio:
+reserved: 19
+unassigned: 20-23, 
+</p>
+<p>
+Video:
+unassigned: 24, 27, 29, 30, 35-71, 77-95
+Reserved for RTCP conflict avoidance: 72-76
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-PCMU:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_PCMU</code></span></p></td>
+<td>ITU-T G.711. mu-law audio (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-1016:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_1016</code></span></p></td>
+<td>RFC 3551 says reserved
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-G721:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_G721</code></span></p></td>
+<td>RFC 3551 says reserved
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-GSM:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_GSM</code></span></p></td>
+<td>GSM audio
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-G723:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_G723</code></span></p></td>
+<td>ITU G.723.1 audio
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-DVI4-8000:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_DVI4_8000</code></span></p></td>
+<td>IMA ADPCM wave type (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-DVI4-16000:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_DVI4_16000</code></span></p></td>
+<td>IMA ADPCM wave type (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-LPC:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_LPC</code></span></p></td>
+<td>experimental linear predictive encoding
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-PCMA:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_PCMA</code></span></p></td>
+<td>ITU-T G.711 A-law audio (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-G722:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_G722</code></span></p></td>
+<td>ITU-T G.722 (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-L16-STEREO:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_L16_STEREO</code></span></p></td>
+<td>stereo PCM
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-L16-MONO:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_L16_MONO</code></span></p></td>
+<td>mono PCM
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-QCELP:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_QCELP</code></span></p></td>
+<td>EIA &amp; TIA standard IS-733
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-CN:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_CN</code></span></p></td>
+<td>Comfort Noise (RFC 3389)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-MPA:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_MPA</code></span></p></td>
+<td>Audio MPEG 1-3.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-G728:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_G728</code></span></p></td>
+<td>ITU-T G.728 Speech coder (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-DVI4-11025:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_DVI4_11025</code></span></p></td>
+<td>IMA ADPCM wave type (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-DVI4-22050:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_DVI4_22050</code></span></p></td>
+<td>IMA ADPCM wave type (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-G729:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_G729</code></span></p></td>
+<td>ITU-T G.729 Speech coder (RFC 3551)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-CELLB:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_CELLB</code></span></p></td>
+<td>See RFC 2029
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-JPEG:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_JPEG</code></span></p></td>
+<td>ISO Standards 10918-1 and 10918-2 (RFC 2435)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-NV:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_NV</code></span></p></td>
+<td>nv encoding by Ron Frederick
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-H261:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_H261</code></span></p></td>
+<td>ITU-T Recommendation H.261 (RFC 2032)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-MPV:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_MPV</code></span></p></td>
+<td>Video MPEG 1 &amp; 2 (RFC 2250)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-MP2T:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_MP2T</code></span></p></td>
+<td>MPEG-2 transport stream (RFC 2250)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTP-PAYLOAD-H263:CAPS"></a><span class="term"><code class="literal">GST_RTP_PAYLOAD_H263</code></span></p></td>
+<td>Video H263 (RFC 2190)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS"></a><h3>GST_RTP_PAYLOAD_IS_DYNAMIC()</h3>
+<pre class="programlisting">#define GST_RTP_PAYLOAD_IS_DYNAMIC(pt) ((pt) &gt;= 96 &amp;&amp; (pt) &lt;= 127)
+</pre>
+<p>
+Check if <em class="parameter"><code>pt</code></em> is a dynamic payload type.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>pt</code></em> :</span></p></td>
+<td>a payload type</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTPPayloadInfo"></a><h3>struct GstRTPPayloadInfo</h3>
+<pre class="programlisting">struct GstRTPPayloadInfo {
+  guint8       payload_type;
+  const gchar *media;
+  const gchar *encoding_name;
+  guint        clock_rate;
+  const gchar *encoding_parameters;
+  guint        bitrate;
+};
+</pre>
+<p>
+Structure holding default payload type information.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> <em class="structfield"><code><a name="GstRTPPayloadInfo.payload-type"></a>payload_type</code></em>;</span></p></td>
+<td>payload type, -1 means dynamic</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTPPayloadInfo.media"></a>media</code></em>;</span></p></td>
+<td>the media type(s), usually "audio", "video", "application", "text",
+"message".</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTPPayloadInfo.encoding-name"></a>encoding_name</code></em>;</span></p></td>
+<td>the encoding name of <em class="parameter"><code>pt</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTPPayloadInfo.clock-rate"></a>clock_rate</code></em>;</span></p></td>
+<td>default clock rate, 0 = unknown/variable</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTPPayloadInfo.encoding-parameters"></a>encoding_parameters</code></em>;</span></p></td>
+<td>encoding parameters. For audio this is the number of
+channels. NULL = not applicable.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTPPayloadInfo.bitrate"></a>bitrate</code></em>;</span></p></td>
+<td>the bitrate of the media. 0 = unknown/variable.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-payload-info-for-name"></a><h3>gst_rtp_payload_info_for_name ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="returnvalue">GstRTPPayloadInfo</span></a> * gst_rtp_payload_info_for_name (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *encoding_name</code></em>);</pre>
+<p>
+Get the <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> for <em class="parameter"><code>media</code></em> and <em class="parameter"><code>encoding_name</code></em>. This function is
+mostly used to get the default clock-rate and bandwidth for dynamic payload
+types specified with <em class="parameter"><code>media</code></em> and <em class="parameter"><code>encoding</code></em> name.
+</p>
+<p>
+The search for <em class="parameter"><code>encoding_name</code></em> will be performed in a case insensitve way.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>the media to find</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>encoding_name</code></em> :</span></p></td>
+<td>the encoding name to find</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> or NULL when no info could be found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-payload-info-for-pt"></a><h3>gst_rtp_payload_info_for_pt ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="returnvalue">GstRTPPayloadInfo</span></a> * gst_rtp_payload_info_for_pt   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> payload_type</code></em>);</pre>
+<p>
+Get the <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> for <em class="parameter"><code>payload_type</code></em>. This function is
+mostly used to get the default clock-rate and bandwidth for static payload
+types specified with <em class="parameter"><code>payload_type</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>payload_type</code></em> :</span></p></td>
+<td>the payload_type to find</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> or NULL when no info could be found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtppayloads.see-also"></a><h2>See Also</h2>
+gstrtpbuffer
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspbase64.html b/docs/libs/html/gst-plugins-base-libs-gstrtspbase64.html
new file mode 100644
index 0000000..8f15711
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspbase64.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspbase64</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="next" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-rtsp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspconnection.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspbase64.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspbase64.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspbase64"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspbase64.top_of_page"></a>gstrtspbase64</span></h2>
+<p>gstrtspbase64 — Helper functions to handle Base64</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspbase64.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspbase64.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-encode" title="gst_rtsp_base64_encode ()">gst_rtsp_base64_encode</a>              (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-decode-ip" title="gst_rtsp_base64_decode_ip ()">gst_rtsp_base64_decode_ip</a>           (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> *len</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspbase64.description"></a><h2>Description</h2>
+<p>
+Last reviewed on 2007-07-24 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspbase64.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-rtsp-base64-encode"></a><h3>gst_rtsp_base64_encode ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_base64_encode              (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> len</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">gst_rtsp_base64_encode</code> is deprecated and should not be used in newly-written code. Use <a href="http://library.gnome.org/devel/glib/unstable/glib-Base64-Encoding.html#g-base64-encode"><code class="function">g_base64_encode()</code></a></p>
+</div>
+<p>
+Encode a sequence of binary data into its Base-64 stringified representation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the binary data to encode</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>the length of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated, zero-terminated Base-64 encoded string
+representing <em class="parameter"><code>data</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-base64-decode-ip"></a><h3>gst_rtsp_base64_decode_ip ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_base64_decode_ip           (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> *len</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">gst_rtsp_base64_decode_ip</code> is deprecated and should not be used in newly-written code. use <a href="http://library.gnome.org/devel/glib/unstable/glib-Base64-Encoding.html#g-base64-decode-inplace"><code class="function">g_base64_decode_inplace()</code></a> instead.</p>
+</div>
+<p>
+Decode the base64 string pointed to by <em class="parameter"><code>data</code></em> in-place. When <em class="parameter"><code>len</code></em> is not <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+it will contain the length of the decoded data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the base64 encoded data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>location for output length or NULL</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
new file mode 100644
index 0000000..1943073
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
@@ -0,0 +1,1421 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspconnection</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">
+<link rel="next" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspbase64.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspdefs.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspconnection.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspconnection.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspconnection"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspconnection.top_of_page"></a>gstrtspconnection</span></h2>
+<p>gstrtspconnection — manage RTSP connections</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspconnection.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspconnection.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection">GstRTSPConnection</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create" title="gst_rtsp_connection_create ()">gst_rtsp_connection_create</a>          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-fd" title="gst_rtsp_connection_create_from_fd ()">gst_rtsp_connection_create_from_fd</a>  (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> fd</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ip</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *initial_buffer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept" title="gst_rtsp_connection_accept ()">gst_rtsp_connection_accept</a>          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sock</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect" title="gst_rtsp_connection_connect ()">gst_rtsp_connection_connect</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close" title="gst_rtsp_connection_close ()">gst_rtsp_connection_close</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free" title="gst_rtsp_connection_free ()">gst_rtsp_connection_free</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read" title="gst_rtsp_connection_read ()">gst_rtsp_connection_read</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-write" title="gst_rtsp_connection_write ()">gst_rtsp_connection_write</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-poll" title="gst_rtsp_connection_poll ()">gst_rtsp_connection_poll</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent"><span class="type">GstRTSPEvent</span></a> events</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent"><span class="type">GstRTSPEvent</span></a> *revents</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-send" title="gst_rtsp_connection_send ()">gst_rtsp_connection_send</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-receive" title="gst_rtsp_connection_receive ()">gst_rtsp_connection_receive</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-next-timeout" title="gst_rtsp_connection_next_timeout ()">gst_rtsp_connection_next_timeout</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-reset-timeout" title="gst_rtsp_connection_reset_timeout ()">gst_rtsp_connection_reset_timeout</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()">gst_rtsp_connection_flush</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flush</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth" title="gst_rtsp_connection_set_auth ()">gst_rtsp_connection_set_auth</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod" title="enum GstRTSPAuthMethod"><span class="type">GstRTSPAuthMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *user</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *pass</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth-param" title="gst_rtsp_connection_set_auth_param ()">gst_rtsp_connection_set_auth_param</a>  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-clear-auth-params" title="gst_rtsp_connection_clear_auth_params ()">gst_rtsp_connection_clear_auth_params</a>
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-qos-dscp" title="gst_rtsp_connection_set_qos_dscp ()">gst_rtsp_connection_set_qos_dscp</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> qos_dscp</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-ip" title="gst_rtsp_connection_set_ip ()">gst_rtsp_connection_set_ip</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ip</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-ip" title="gst_rtsp_connection_get_ip ()">gst_rtsp_connection_get_ip</a>          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *        <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-url" title="gst_rtsp_connection_get_url ()">gst_rtsp_connection_get_url</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tunneled" title="gst_rtsp_connection_set_tunneled ()">gst_rtsp_connection_set_tunneled</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> tunneled</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-is-tunneled" title="gst_rtsp_connection_is_tunneled ()">gst_rtsp_connection_is_tunneled</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tunnelid" title="gst_rtsp_connection_get_tunnelid ()">gst_rtsp_connection_get_tunnelid</a>    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" title="gst_rtsp_connection_do_tunnel ()">gst_rtsp_connection_do_tunnel</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn2</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-readfd" title="gst_rtsp_connection_get_readfd ()">gst_rtsp_connection_get_readfd</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-writefd" title="gst_rtsp_connection_get_writefd ()">gst_rtsp_connection_get_writefd</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-http-mode" title="gst_rtsp_connection_set_http_mode ()">gst_rtsp_connection_set_http_mode</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enable</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-proxy" title="gst_rtsp_connection_set_proxy ()">gst_rtsp_connection_set_proxy</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *host</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>);
+                    <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch">GstRTSPWatch</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs" title="GstRTSPWatchFuncs">GstRTSPWatchFuncs</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="returnvalue">GstRTSPWatch</span></a> *      <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new" title="gst_rtsp_watch_new ()">gst_rtsp_watch_new</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs" title="GstRTSPWatchFuncs"><span class="type">GstRTSPWatchFuncs</span></a> *funcs</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref" title="gst_rtsp_watch_unref ()">gst_rtsp_watch_unref</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach" title="gst_rtsp_watch_attach ()">gst_rtsp_watch_attach</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *context</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-reset" title="gst_rtsp_watch_reset ()">gst_rtsp_watch_reset</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-message" title="gst_rtsp_watch_queue_message ()">gst_rtsp_watch_queue_message</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-data" title="gst_rtsp_watch_queue_data ()">gst_rtsp_watch_queue_data</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-send-message" title="gst_rtsp_watch_send_message ()">gst_rtsp_watch_send_message</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *id</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data" title="gst_rtsp_watch_write_data ()">gst_rtsp_watch_write_data</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *id</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspconnection.description"></a><h2>Description</h2>
+<p>
+This object manages the RTSP connection to the server. It provides function
+to receive and send bytes and messages.
+ 
+Last reviewed on 2007-07-24 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspconnection.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTSPConnection"></a><h3>GstRTSPConnection</h3>
+<pre class="programlisting">typedef struct _GstRTSPConnection GstRTSPConnection;</pre>
+<p>
+Opaque RTSP connection object.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-create"></a><h3>gst_rtsp_connection_create ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_create          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);</pre>
+<p>
+Create a newly allocated <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> from <em class="parameter"><code>url</code></em> and store it in <em class="parameter"><code>conn</code></em>.
+The connection will not yet attempt to connect to <em class="parameter"><code>url</code></em>, use
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect" title="gst_rtsp_connection_connect ()"><code class="function">gst_rtsp_connection_connect()</code></a>.
+</p>
+<p>
+A copy of <em class="parameter"><code>url</code></em> will be made.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>storage for a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em> contains a valid connection.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-create-from-fd"></a><h3>gst_rtsp_connection_create_from_fd ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_create_from_fd  (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> fd</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ip</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *initial_buffer</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> for handling communication on the existing
+file descriptor <em class="parameter"><code>fd</code></em>. The <em class="parameter"><code>initial_buffer</code></em> contains any data already read from
+<em class="parameter"><code>fd</code></em> which should be used before starting to read new data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>a file descriptor</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ip</code></em> :</span></p></td>
+<td>the IP address of the other end</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>the port used by the other end</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>initial_buffer</code></em> :</span></p></td>
+<td>data already read from <em class="parameter"><code>fd</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>storage for a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em> contains a valid connection.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-accept"></a><h3>gst_rtsp_connection_accept ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_accept          (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sock</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> **conn</code></em>);</pre>
+<p>
+Accept a new connection on <em class="parameter"><code>sock</code></em> and create a new <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> for
+handling communication on new socket.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sock</code></em> :</span></p></td>
+<td>a socket</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>storage for a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em> contains a valid connection.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-connect"></a><h3>gst_rtsp_connection_connect ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_connect         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Attempt to connect to the url of <em class="parameter"><code>conn</code></em> made with
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create" title="gst_rtsp_connection_create ()"><code class="function">gst_rtsp_connection_create()</code></a>. If <em class="parameter"><code>timeout</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> this function can block
+forever. If <em class="parameter"><code>timeout</code></em> contains a valid timeout, this function will return
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS"><span class="type">GST_RTSP_ETIMEOUT</span></a> after the timeout expired.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> timeout</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when a connection could be made.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-close"></a><h3>gst_rtsp_connection_close ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_close           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Close the connected <em class="parameter"><code>conn</code></em>. After this call, the connection is in the same
+state as when it was first created.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-free"></a><h3>gst_rtsp_connection_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_free            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Close and free <em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-read"></a><h3>gst_rtsp_connection_read ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_read            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Attempt to read <em class="parameter"><code>size</code></em> bytes into <em class="parameter"><code>data</code></em> from the connected <em class="parameter"><code>conn</code></em>, blocking up to
+the specified <em class="parameter"><code>timeout</code></em>. <em class="parameter"><code>timeout</code></em> can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function
+might block forever.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to read</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout value or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-write"></a><h3>gst_rtsp_connection_write ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_write           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Attempt to write <em class="parameter"><code>size</code></em> bytes of <em class="parameter"><code>data</code></em> to the connected <em class="parameter"><code>conn</code></em>, blocking up to
+the specified <em class="parameter"><code>timeout</code></em>. <em class="parameter"><code>timeout</code></em> can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function
+might block forever.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to write</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout value or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-poll"></a><h3>gst_rtsp_connection_poll ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_poll            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent"><span class="type">GstRTSPEvent</span></a> events</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent"><span class="type">GstRTSPEvent</span></a> *revents</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Wait up to the specified <em class="parameter"><code>timeout</code></em> for the connection to become available for
+at least one of the operations specified in <em class="parameter"><code>events</code></em>. When the function returns
+with <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>, <em class="parameter"><code>revents</code></em> will contain a bitmask of available operations on
+<em class="parameter"><code>conn</code></em>.
+</p>
+<p>
+<em class="parameter"><code>timeout</code></em> can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function might block forever.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>events</code></em> :</span></p></td>
+<td>a bitmask of <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent"><span class="type">GstRTSPEvent</span></a> flags to check</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>revents</code></em> :</span></p></td>
+<td>location for result flags</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-send"></a><h3>gst_rtsp_connection_send ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_send            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Attempt to send <em class="parameter"><code>message</code></em> to the connected <em class="parameter"><code>conn</code></em>, blocking up to
+the specified <em class="parameter"><code>timeout</code></em>. <em class="parameter"><code>timeout</code></em> can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function
+might block forever.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>the message to send</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout value or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-receive"></a><h3>gst_rtsp_connection_receive ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_receive         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Attempt to read into <em class="parameter"><code>message</code></em> from the connected <em class="parameter"><code>conn</code></em>, blocking up to
+the specified <em class="parameter"><code>timeout</code></em>. <em class="parameter"><code>timeout</code></em> can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function
+might block forever.
+</p>
+<p>
+This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>the message to read</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout value or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-next-timeout"></a><h3>gst_rtsp_connection_next_timeout ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_next_timeout    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>);</pre>
+<p>
+Calculate the next timeout for <em class="parameter"><code>conn</code></em>, storing the result in <em class="parameter"><code>timeout</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>a timeout</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-reset-timeout"></a><h3>gst_rtsp_connection_reset_timeout ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_reset_timeout   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Reset the timeout of <em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-flush"></a><h3>gst_rtsp_connection_flush ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_flush           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flush</code></em>);</pre>
+<p>
+Start or stop the flushing action on <em class="parameter"><code>conn</code></em>. When flushing, all current
+and future actions on <em class="parameter"><code>conn</code></em> will return <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"><span class="type">GST_RTSP_EINTR</span></a> until the connection
+is set to non-flushing mode again.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flush</code></em> :</span></p></td>
+<td>start or stop the flush</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-auth"></a><h3>gst_rtsp_connection_set_auth ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_set_auth        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod" title="enum GstRTSPAuthMethod"><span class="type">GstRTSPAuthMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *user</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *pass</code></em>);</pre>
+<p>
+Configure <em class="parameter"><code>conn</code></em> for authentication mode <em class="parameter"><code>method</code></em> with <em class="parameter"><code>user</code></em> and <em class="parameter"><code>pass</code></em> as the
+user and password respectively.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>authentication method</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user</code></em> :</span></p></td>
+<td>the user</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pass</code></em> :</span></p></td>
+<td>the password</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-auth-param"></a><h3>gst_rtsp_connection_set_auth_param ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_connection_set_auth_param  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *param</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Setup <em class="parameter"><code>conn</code></em> with authentication directives. This is not necesary for
+methods <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-NONE:CAPS"><span class="type">GST_RTSP_AUTH_NONE</span></a> and <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-BASIC:CAPS"><span class="type">GST_RTSP_AUTH_BASIC</span></a>. For
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-DIGEST:CAPS"><span class="type">GST_RTSP_AUTH_DIGEST</span></a>, directives should be taken from the digest challenge
+in the WWW-Authenticate response header and can include realm, domain,
+nonce, opaque, stale, algorithm, qop as per RFC2617.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>param</code></em> :</span></p></td>
+<td>authentication directive</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>value</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-clear-auth-params"></a><h3>gst_rtsp_connection_clear_auth_params ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_connection_clear_auth_params
+                                                        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Clear the list of authentication directives stored in <em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-qos-dscp"></a><h3>gst_rtsp_connection_set_qos_dscp ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_set_qos_dscp    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> qos_dscp</code></em>);</pre>
+<p>
+Configure <em class="parameter"><code>conn</code></em> to use the specified DSCP value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>qos_dscp</code></em> :</span></p></td>
+<td>DSCP value</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-ip"></a><h3>gst_rtsp_connection_set_ip ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_connection_set_ip          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ip</code></em>);</pre>
+<p>
+Set the IP address of the server.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ip</code></em> :</span></p></td>
+<td>an ip address</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-ip"></a><h3>gst_rtsp_connection_get_ip ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_connection_get_ip          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Retrieve the IP address of the other end of <em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The IP address as a string. this value remains valid until the
+connection is closed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-url"></a><h3>gst_rtsp_connection_get_url ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *        gst_rtsp_connection_get_url         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Retrieve the URL of the other end of <em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The URL. This value remains valid until the
+connection is freed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-tunneled"></a><h3>gst_rtsp_connection_set_tunneled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_connection_set_tunneled    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> tunneled</code></em>);</pre>
+<p>
+Set the HTTP tunneling state of the connection. This must be configured before
+the <em class="parameter"><code>conn</code></em> is connected.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tunneled</code></em> :</span></p></td>
+<td>the new state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-is-tunneled"></a><h3>gst_rtsp_connection_is_tunneled ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtsp_connection_is_tunneled     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Get the tunneling state of the connection.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>if <em class="parameter"><code>conn</code></em> is using HTTP tunneling.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-tunnelid"></a><h3>gst_rtsp_connection_get_tunnelid ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_connection_get_tunnelid    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Get the tunnel session id the connection.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>returns a non-empty string if <em class="parameter"><code>conn</code></em> is being tunneled over HTTP.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-do-tunnel"></a><h3>gst_rtsp_connection_do_tunnel ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_do_tunnel       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn2</code></em>);</pre>
+<p>
+If <em class="parameter"><code>conn</code></em> received the first tunnel connection and <em class="parameter"><code>conn2</code></em> received
+the second tunnel connection, link the two connections together so that
+<em class="parameter"><code>conn</code></em> manages the tunneled connection.
+</p>
+<p>
+After this call, <em class="parameter"><code>conn2</code></em> cannot be used anymore and must be freed with
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free" title="gst_rtsp_connection_free ()"><code class="function">gst_rtsp_connection_free()</code></a>.
+</p>
+<p>
+If <em class="parameter"><code>conn2</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then only the base64 decoding context will be setup for
+<em class="parameter"><code>conn</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn2</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>return GST_RTSP_OK on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-readfd"></a><h3>gst_rtsp_connection_get_readfd ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_rtsp_connection_get_readfd      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Get the file descriptor for reading.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the file descriptor used for reading or -1 on error. The file
+descriptor remains valid until the connection is closed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-writefd"></a><h3>gst_rtsp_connection_get_writefd ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_rtsp_connection_get_writefd     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>
+Get the file descriptor for writing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the file descriptor used for writing or -1 on error. The file
+descriptor remains valid until the connection is closed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-http-mode"></a><h3>gst_rtsp_connection_set_http_mode ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_connection_set_http_mode   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enable</code></em>);</pre>
+<p>
+By setting the HTTP mode to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> the message parsing will support HTTP
+messages in addition to the RTSP messages. It will also disable the
+automatic handling of setting up an HTTP tunnel.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enable</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable manual HTTP mode</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-proxy"></a><h3>gst_rtsp_connection_set_proxy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_connection_set_proxy       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *host</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>);</pre>
+<p>
+Set the proxy host and port.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>host</code></em> :</span></p></td>
+<td>the proxy host</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>the proxy port</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPWatch"></a><h3>GstRTSPWatch</h3>
+<pre class="programlisting">typedef struct _GstRTSPWatch GstRTSPWatch;</pre>
+<p>
+Opaque RTSP watch object that can be used for asynchronous RTSP
+operations.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPWatchFuncs"></a><h3>GstRTSPWatchFuncs</h3>
+<pre class="programlisting">typedef struct {
+  GstRTSPResult     (*message_received) (GstRTSPWatch *watch, GstRTSPMessage *message,
+                                         gpointer user_data);
+  GstRTSPResult     (*message_sent)     (GstRTSPWatch *watch, guint id,
+                                         gpointer user_data);
+  GstRTSPResult     (*closed)           (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*error)            (GstRTSPWatch *watch, GstRTSPResult result,
+                                         gpointer user_data);
+  GstRTSPStatusCode (*tunnel_start)     (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*tunnel_complete)  (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*error_full)       (GstRTSPWatch *watch, GstRTSPResult result,
+                                         GstRTSPMessage *message, guint id,
+                                         gpointer user_data);
+  GstRTSPResult     (*tunnel_lost)      (GstRTSPWatch *watch, gpointer user_data);
+} GstRTSPWatchFuncs;
+</pre>
+<p>
+Callback functions from a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.message-received"></a>message_received</code></em> ()</span></p></td>
+<td>callback when a message was received</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.message-sent"></a>message_sent</code></em> ()</span></p></td>
+<td>callback when a message was sent</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.closed"></a>closed</code></em> ()</span></p></td>
+<td>callback when the connection is closed</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.error"></a>error</code></em> ()</span></p></td>
+<td>callback when an error occured</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.tunnel-start"></a>tunnel_start</code></em> ()</span></p></td>
+<td>a client started a tunneled connection. The tunnelid of the
+connection must be saved.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.tunnel-complete"></a>tunnel_complete</code></em> ()</span></p></td>
+<td>a client finished a tunneled connection. In this callback
+you usually pair the tunnelid of this connection with the saved one using
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" title="gst_rtsp_connection_do_tunnel ()"><code class="function">gst_rtsp_connection_do_tunnel()</code></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.error-full"></a>error_full</code></em> ()</span></p></td>
+<td>callback when an error occured with more information than
+the <em class="parameter"><code>error</code></em> callback. Since 0.10.25</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstRTSPWatchFuncs.tunnel-lost"></a>tunnel_lost</code></em> ()</span></p></td>
+<td>callback when the post connection of a tunnel is closed.
+Since 0.10.29</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-new"></a><h3>gst_rtsp_watch_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="returnvalue">GstRTSPWatch</span></a> *      gst_rtsp_watch_new                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs" title="GstRTSPWatchFuncs"><span class="type">GstRTSPWatchFuncs</span></a> *funcs</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
+<p>
+Create a watch object for <em class="parameter"><code>conn</code></em>. The functions provided in <em class="parameter"><code>funcs</code></em> will be
+called with <em class="parameter"><code>user_data</code></em> when activity happened on the watch.
+</p>
+<p>
+The new watch is usually created so that it can be attached to a
+maincontext with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach" title="gst_rtsp_watch_attach ()"><code class="function">gst_rtsp_watch_attach()</code></a>. 
+</p>
+<p>
+<em class="parameter"><code>conn</code></em> must exist for the entire lifetime of the watch.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>conn</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>funcs</code></em> :</span></p></td>
+<td>watch functions</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data to pass to <em class="parameter"><code>funcs</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
+<td>notify when <em class="parameter"><code>user_data</code></em> is not referenced anymore</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> that can be used for asynchronous RTSP
+communication. Free with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref" title="gst_rtsp_watch_unref ()"><code class="function">gst_rtsp_watch_unref()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-unref"></a><h3>gst_rtsp_watch_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_watch_unref                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>);</pre>
+<p>
+Decreases the reference count of <em class="parameter"><code>watch</code></em> by one. If the resulting reference
+count is zero the watch and associated memory will be destroyed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-attach"></a><h3>gst_rtsp_watch_attach ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtsp_watch_attach               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *context</code></em>);</pre>
+<p>
+Adds a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> to a context so that it will be executed within that context.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td>a GMainContext (if NULL, the default context will be used)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the ID (greater than 0) for the watch within the GMainContext.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-reset"></a><h3>gst_rtsp_watch_reset ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_watch_reset                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>);</pre>
+<p>
+Reset <em class="parameter"><code>watch</code></em>, this is usually called after <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" title="gst_rtsp_connection_do_tunnel ()"><code class="function">gst_rtsp_connection_do_tunnel()</code></a>
+when the file descriptors of the connection might have changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-queue-message"></a><h3>gst_rtsp_watch_queue_message ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtsp_watch_queue_message        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">gst_rtsp_watch_queue_message</code> is deprecated and should not be used in newly-written code. Use <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-send-message" title="gst_rtsp_watch_send_message ()"><code class="function">gst_rtsp_watch_send_message()</code></a></p>
+</div>
+<p>
+Queue a <em class="parameter"><code>message</code></em> for transmission in <em class="parameter"><code>watch</code></em>. The contents of this
+message will be serialized and transmitted when the connection of the
+<em class="parameter"><code>watch</code></em> becomes writable.
+</p>
+<p>
+The return value of this function will be used as the id argument in the
+message_sent callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an id.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-queue-data"></a><h3>gst_rtsp_watch_queue_data ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_rtsp_watch_queue_data           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">gst_rtsp_watch_queue_data</code> is deprecated and should not be used in newly-written code. Use <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data" title="gst_rtsp_watch_write_data ()"><code class="function">gst_rtsp_watch_write_data()</code></a></p>
+</div>
+<p>
+Queue <em class="parameter"><code>data</code></em> for transmission in <em class="parameter"><code>watch</code></em>. It will be transmitted when the
+connection of the <em class="parameter"><code>watch</code></em> becomes writable.
+</p>
+<p>
+This function will take ownership of <em class="parameter"><code>data</code></em> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> it after use.
+</p>
+<p>
+The return value of this function will be used as the id argument in the
+message_sent callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to queue</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>an id.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.24</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-send-message"></a><h3>gst_rtsp_watch_send_message ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_watch_send_message         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *id</code></em>);</pre>
+<p>
+Send a <em class="parameter"><code>message</code></em> using the connection of the <em class="parameter"><code>watch</code></em>. If it cannot be sent
+immediately, it will be queued for transmission in <em class="parameter"><code>watch</code></em>. The contents of
+<em class="parameter"><code>message</code></em> will then be serialized and transmitted when the connection of the
+<em class="parameter"><code>watch</code></em> becomes writable. In case the <em class="parameter"><code>message</code></em> is queued, the ID returned in
+<em class="parameter"><code>id</code></em> will be non-zero and used as the ID argument in the message_sent
+callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>location for a message ID or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-write-data"></a><h3>gst_rtsp_watch_write_data ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_watch_write_data           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *id</code></em>);</pre>
+<p>
+Write <em class="parameter"><code>data</code></em> using the connection of the <em class="parameter"><code>watch</code></em>. If it cannot be sent
+immediately, it will be queued for transmission in <em class="parameter"><code>watch</code></em>. The contents of
+<em class="parameter"><code>message</code></em> will then be serialized and transmitted when the connection of the
+<em class="parameter"><code>watch</code></em> becomes writable. In case the <em class="parameter"><code>message</code></em> is queued, the ID returned in
+<em class="parameter"><code>id</code></em> will be non-zero and used as the ID argument in the message_sent
+callback.
+</p>
+<p>
+This function will take ownership of <em class="parameter"><code>data</code></em> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> it after use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>watch</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data to queue</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>location for a message ID or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspconnection.see-also"></a><h2>See Also</h2>
+gstrtspurl
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html b/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html
new file mode 100644
index 0000000..0b78628
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html
@@ -0,0 +1,738 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspdefs</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">
+<link rel="next" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspconnection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspextension.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspdefs.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspdefs.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspdefs"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspdefs.top_of_page"></a>gstrtspdefs</span></h2>
+<p>gstrtspdefs — common RTSP defines</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspdefs.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspdefs.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-CHECK:CAPS" title="GST_RTSP_CHECK()">GST_RTSP_CHECK</a>                      (stmt,
+                                                         label)
+#define             <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-MAX:CAPS" title="GST_RTSP_AUTH_MAX">GST_RTSP_AUTH_MAX</a>
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent" title="enum GstRTSPEvent">GstRTSPEvent</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult">GstRTSPResult</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily" title="enum GstRTSPFamily">GstRTSPFamily</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPState" title="enum GstRTSPState">GstRTSPState</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion">GstRTSPVersion</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod">GstRTSPMethod</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod" title="enum GstRTSPAuthMethod">GstRTSPAuthMethod</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField">GstRTSPHeaderField</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode">GstRTSPStatusCode</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-strresult" title="gst_rtsp_strresult ()">gst_rtsp_strresult</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a> result</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-method-as-text" title="gst_rtsp_method_as_text ()">gst_rtsp_method_as_text</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-version-as-text" title="gst_rtsp_version_as_text ()">gst_rtsp_version_as_text</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> version</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-as-text" title="gst_rtsp_header_as_text ()">gst_rtsp_header_as_text</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-allow-multiple" title="gst_rtsp_header_allow_multiple ()">gst_rtsp_header_allow_multiple</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-status-as-text" title="gst_rtsp_status_as_text ()">gst_rtsp_status_as_text</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-options-as-text" title="gst_rtsp_options_as_text ()">gst_rtsp_options_as_text</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> options</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="returnvalue">GstRTSPHeaderField</span></a>  <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-header-field" title="gst_rtsp_find_header_field ()">gst_rtsp_find_header_field</a>          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *header</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="returnvalue">GstRTSPMethod</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-method" title="gst_rtsp_find_method ()">gst_rtsp_find_method</a>                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *method</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspdefs.description"></a><h2>Description</h2>
+<p>
+Provides common defines for the RTSP library. 
+ 
+Last reviewed on 2007-07-24 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspdefs.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-RTSP-CHECK:CAPS"></a><h3>GST_RTSP_CHECK()</h3>
+<pre class="programlisting">#define             GST_RTSP_CHECK(stmt, label)</pre>
+<p>
+Macro that checks the return value of <em class="parameter"><code>stmt</code></em> and jumps to <em class="parameter"><code>label</code></em> when it does
+not equal <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stmt</code></em> :</span></p></td>
+<td>a statement</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>label</code></em> :</span></p></td>
+<td>a label</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-RTSP-AUTH-MAX:CAPS"></a><h3>GST_RTSP_AUTH_MAX</h3>
+<pre class="programlisting">#define GST_RTSP_AUTH_MAX GST_RTSP_AUTH_DIGEST
+</pre>
+<p>
+Strongest available authentication method
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPEvent"></a><h3>enum GstRTSPEvent</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_EV_READ  = (1 &lt;&lt; 0),
+  GST_RTSP_EV_WRITE = (1 &lt;&lt; 1)
+} GstRTSPEvent;
+</pre>
+<p>
+The possible events for the connection.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-EV-READ:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EV_READ</code></span></p></td>
+<td>connection is readable
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EV-WRITE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EV_WRITE</code></span></p></td>
+<td>connection is writable
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPResult"></a><h3>enum GstRTSPResult</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_OK          =  0,
+  /* errors */
+  GST_RTSP_ERROR       = -1,
+  GST_RTSP_EINVAL      = -2,
+  GST_RTSP_EINTR       = -3,
+  GST_RTSP_ENOMEM      = -4,
+  GST_RTSP_ERESOLV     = -5,
+  GST_RTSP_ENOTIMPL    = -6,
+  GST_RTSP_ESYS        = -7,
+  GST_RTSP_EPARSE      = -8,
+  GST_RTSP_EWSASTART   = -9,
+  GST_RTSP_EWSAVERSION = -10,
+  GST_RTSP_EEOF        = -11,
+  GST_RTSP_ENET        = -12,
+  GST_RTSP_ENOTIP      = -13,
+  GST_RTSP_ETIMEOUT    = -14,
+  GST_RTSP_ETGET       = -15,
+  GST_RTSP_ETPOST      = -16,
+
+  GST_RTSP_ELAST       = -17
+} GstRTSPResult;
+</pre>
+<p>
+Result codes from the RTSP functions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-OK:CAPS"></a><span class="term"><code class="literal">GST_RTSP_OK</code></span></p></td>
+<td>no error
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ERROR:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ERROR</code></span></p></td>
+<td>some unspecified error occured
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EINVAL:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EINVAL</code></span></p></td>
+<td>invalid arguments were provided to a function
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EINTR:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EINTR</code></span></p></td>
+<td>an operation was canceled
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ENOMEM:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ENOMEM</code></span></p></td>
+<td>no memory was available for the operation
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ERESOLV:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ERESOLV</code></span></p></td>
+<td>a host resolve error occured
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ENOTIMPL:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ENOTIMPL</code></span></p></td>
+<td>function not implemented
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ESYS:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ESYS</code></span></p></td>
+<td>a system error occured, errno contains more details
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EPARSE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EPARSE</code></span></p></td>
+<td>a persing error occured
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EWSASTART:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EWSASTART</code></span></p></td>
+<td>windows networking could not start
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EWSAVERSION:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EWSAVERSION</code></span></p></td>
+<td>windows networking stack has wrong version
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-EEOF:CAPS"></a><span class="term"><code class="literal">GST_RTSP_EEOF</code></span></p></td>
+<td>end-of-file was reached
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ENET:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ENET</code></span></p></td>
+<td>a network problem occured, h_errno contains more details
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ENOTIP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ENOTIP</code></span></p></td>
+<td>the host is not an IP host
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ETIMEOUT:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ETIMEOUT</code></span></p></td>
+<td>a timeout occured
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ETGET:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ETGET</code></span></p></td>
+<td>the tunnel GET request has been performed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ETPOST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ETPOST</code></span></p></td>
+<td>the tunnel POST request has been performed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ELAST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ELAST</code></span></p></td>
+<td>last error
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPFamily"></a><h3>enum GstRTSPFamily</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_FAM_NONE,
+  GST_RTSP_FAM_INET,
+  GST_RTSP_FAM_INET6
+} GstRTSPFamily;
+</pre>
+<p>
+The possible network families.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-FAM-NONE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_FAM_NONE</code></span></p></td>
+<td>unknown network family
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-FAM-INET:CAPS"></a><span class="term"><code class="literal">GST_RTSP_FAM_INET</code></span></p></td>
+<td>internet
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-FAM-INET6:CAPS"></a><span class="term"><code class="literal">GST_RTSP_FAM_INET6</code></span></p></td>
+<td>internet V6
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPState"></a><h3>enum GstRTSPState</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_STATE_INVALID,
+  GST_RTSP_STATE_INIT,
+  GST_RTSP_STATE_READY,
+  GST_RTSP_STATE_SEEKING,
+  GST_RTSP_STATE_PLAYING,
+  GST_RTSP_STATE_RECORDING
+} GstRTSPState;
+</pre>
+<p>
+The different RTSP states.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-STATE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_INVALID</code></span></p></td>
+<td>invalid state
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-STATE-INIT:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_INIT</code></span></p></td>
+<td>initializing
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-STATE-READY:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_READY</code></span></p></td>
+<td>ready for operation
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-STATE-SEEKING:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_SEEKING</code></span></p></td>
+<td>seeking in progress
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-STATE-PLAYING:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_PLAYING</code></span></p></td>
+<td>playing
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-STATE-RECORDING:CAPS"></a><span class="term"><code class="literal">GST_RTSP_STATE_RECORDING</code></span></p></td>
+<td>recording
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPVersion"></a><h3>enum GstRTSPVersion</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_VERSION_INVALID = 0x00,
+  GST_RTSP_VERSION_1_0     = 0x10,
+  GST_RTSP_VERSION_1_1     = 0x11
+} GstRTSPVersion;
+</pre>
+<p>
+The supported RTSP versions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-VERSION-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTSP_VERSION_INVALID</code></span></p></td>
+<td>unknown/invalid version
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-VERSION-1-0:CAPS"></a><span class="term"><code class="literal">GST_RTSP_VERSION_1_0</code></span></p></td>
+<td>version 1.0
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-VERSION-1-1:CAPS"></a><span class="term"><code class="literal">GST_RTSP_VERSION_1_1</code></span></p></td>
+<td>version 1.1. Since 0.10.25
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPMethod"></a><h3>enum GstRTSPMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_INVALID          = 0,
+  GST_RTSP_DESCRIBE         = (1 &lt;&lt;  0),
+  GST_RTSP_ANNOUNCE         = (1 &lt;&lt;  1),
+  GST_RTSP_GET_PARAMETER    = (1 &lt;&lt;  2),
+  GST_RTSP_OPTIONS          = (1 &lt;&lt;  3),
+  GST_RTSP_PAUSE            = (1 &lt;&lt;  4),
+  GST_RTSP_PLAY             = (1 &lt;&lt;  5),
+  GST_RTSP_RECORD           = (1 &lt;&lt;  6),
+  GST_RTSP_REDIRECT         = (1 &lt;&lt;  7),
+  GST_RTSP_SETUP            = (1 &lt;&lt;  8),
+  GST_RTSP_SET_PARAMETER    = (1 &lt;&lt;  9),
+  GST_RTSP_TEARDOWN         = (1 &lt;&lt; 10),
+  GST_RTSP_GET              = (1 &lt;&lt; 11),
+  GST_RTSP_POST             = (1 &lt;&lt; 12)
+} GstRTSPMethod;
+</pre>
+<p>
+The different supported RTSP methods.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTSP_INVALID</code></span></p></td>
+<td>invalid method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-DESCRIBE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_DESCRIBE</code></span></p></td>
+<td>the DESCRIBE method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-ANNOUNCE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_ANNOUNCE</code></span></p></td>
+<td>the ANNOUNCE method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-GET-PARAMETER:CAPS"></a><span class="term"><code class="literal">GST_RTSP_GET_PARAMETER</code></span></p></td>
+<td>the GET_PARAMETER method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-OPTIONS:CAPS"></a><span class="term"><code class="literal">GST_RTSP_OPTIONS</code></span></p></td>
+<td>the OPTIONS method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-PAUSE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_PAUSE</code></span></p></td>
+<td>the PAUSE method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-PLAY:CAPS"></a><span class="term"><code class="literal">GST_RTSP_PLAY</code></span></p></td>
+<td>the PLAY method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-RECORD:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RECORD</code></span></p></td>
+<td>the RECORD method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-REDIRECT:CAPS"></a><span class="term"><code class="literal">GST_RTSP_REDIRECT</code></span></p></td>
+<td>the REDIRECT method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-SETUP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_SETUP</code></span></p></td>
+<td>the SETUP method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-SET-PARAMETER:CAPS"></a><span class="term"><code class="literal">GST_RTSP_SET_PARAMETER</code></span></p></td>
+<td>the SET_PARAMETER method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-TEARDOWN:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TEARDOWN</code></span></p></td>
+<td>the TEARDOWN method
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-GET:CAPS"></a><span class="term"><code class="literal">GST_RTSP_GET</code></span></p></td>
+<td>the GET method (HTTP). Since 0.10.25
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-POST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_POST</code></span></p></td>
+<td>the POST method (HTTP). Since 0.10.25
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPAuthMethod"></a><h3>enum GstRTSPAuthMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_AUTH_NONE    = 0x00,
+  GST_RTSP_AUTH_BASIC   = 0x01,
+  GST_RTSP_AUTH_DIGEST  = 0x02
+} GstRTSPAuthMethod;
+</pre>
+<p>
+Authentication methods, ordered by strength
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-AUTH-NONE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_AUTH_NONE</code></span></p></td>
+<td>no authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-AUTH-BASIC:CAPS"></a><span class="term"><code class="literal">GST_RTSP_AUTH_BASIC</code></span></p></td>
+<td>basic authentication
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-AUTH-DIGEST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_AUTH_DIGEST</code></span></p></td>
+<td>digest authentication
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPHeaderField"></a><h3>enum GstRTSPHeaderField</h3>
+<pre class="programlisting">typedef enum {
+} GstRTSPHeaderField;
+</pre>
+<p>
+Enumeration of rtsp header fields.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPStatusCode"></a><h3>enum GstRTSPStatusCode</h3>
+<pre class="programlisting">typedef enum {
+} GstRTSPStatusCode;
+</pre>
+<p>
+Enumeration of rtsp status codes.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-strresult"></a><h3>gst_rtsp_strresult ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_strresult                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a> result</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>result</code></em> in a human readable string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly allocated string. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-method-as-text"></a><h3>gst_rtsp_method_as_text ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_method_as_text             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>method</code></em> to a string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string representation of <em class="parameter"><code>method</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-version-as-text"></a><h3>gst_rtsp_version_as_text ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_version_as_text            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> version</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>version</code></em> to a string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>version</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string representation of <em class="parameter"><code>version</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-header-as-text"></a><h3>gst_rtsp_header_as_text ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_header_as_text             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>field</code></em> to a string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string representation of <em class="parameter"><code>field</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-header-allow-multiple"></a><h3>gst_rtsp_header_allow_multiple ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_rtsp_header_allow_multiple      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>);</pre>
+<p>
+Check whether <em class="parameter"><code>field</code></em> may appear multiple times in a message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if multiple headers are allowed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-status-as-text"></a><h3>gst_rtsp_status_as_text ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_rtsp_status_as_text             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>code</code></em> to a string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>code</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string representation of <em class="parameter"><code>code</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-options-as-text"></a><h3>gst_rtsp_options_as_text ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_options_as_text            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> options</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>options</code></em> to a string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>options</code></em> :</span></p></td>
+<td>one or more <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new string of <em class="parameter"><code>options</code></em>. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-find-header-field"></a><h3>gst_rtsp_find_header_field ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="returnvalue">GstRTSPHeaderField</span></a>  gst_rtsp_find_header_field          (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *header</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>header</code></em> to a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>header</code></em> :</span></p></td>
+<td>a header string</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> for <em class="parameter"><code>header</code></em> or <span class="type">GST_RTSP_HDR_INVALID</span> if the
+header field is unknown.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-find-method"></a><h3>gst_rtsp_find_method ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="returnvalue">GstRTSPMethod</span></a>       gst_rtsp_find_method                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *method</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>method</code></em> to a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>a method</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> for <em class="parameter"><code>method</code></em> or <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS"><span class="type">GST_RTSP_INVALID</span></a> if the
+method is unknown.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspdefs.see-also"></a><h2>See Also</h2>
+gstrtspurl, gstrtspconnection
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html b/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html
new file mode 100644
index 0000000..57a0517
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspextension</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">
+<link rel="next" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspdefs.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspmessage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspextension.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspextension.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspextension"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspextension.top_of_page"></a>gstrtspextension</span></h2>
+<p>gstrtspextension — Interface for extending RTSP protocols</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspextension.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspextension.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension" title="GstRTSPExtension">GstRTSPExtension</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface" title="struct GstRTSPExtensionInterface">GstRTSPExtensionInterface</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspextension.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id434543"></a><p>
+ This interface is implemented e.g. by the Windows Media Streaming RTSP
+ exentension (rtspwms) and the RealMedia RTSP extension (rtspreal).
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2007-07-25 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspextension.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTSPExtension"></a><h3>GstRTSPExtension</h3>
+<pre class="programlisting">typedef struct _GstRTSPExtension GstRTSPExtension;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPExtensionInterface"></a><h3>struct GstRTSPExtensionInterface</h3>
+<pre class="programlisting">struct GstRTSPExtensionInterface {
+  GTypeInterface parent;
+
+  /* vfunctions */
+  gboolean      (*detect_server)    (GstRTSPExtension *ext, GstRTSPMessage *resp);
+
+  GstRTSPResult (*before_send)      (GstRTSPExtension *ext, GstRTSPMessage *req);
+  GstRTSPResult (*after_send)       (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);
+
+  GstRTSPResult (*parse_sdp)        (GstRTSPExtension *ext, GstSDPMessage *sdp, GstStructure *s);
+  GstRTSPResult (*setup_media)      (GstRTSPExtension *ext, GstSDPMedia *media);
+
+  gboolean      (*configure_stream) (GstRTSPExtension *ext, GstCaps *caps);
+
+  GstRTSPResult (*get_transports)   (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, gchar **transport);
+
+  GstRTSPResult (*stream_select)    (GstRTSPExtension *ext, GstRTSPUrl *url);
+
+  /* signals */
+  GstRTSPResult (*send)             (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);
+
+  /* ABI: more vfunctions added later */
+  GstRTSPResult (*receive_request)  (GstRTSPExtension *ext, GstRTSPMessage *req);
+};
+</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html b/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html
new file mode 100644
index 0000000..3c814a7
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html
@@ -0,0 +1,988 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspmessage</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">
+<link rel="next" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspextension.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtsprange.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspmessage.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspmessage.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspmessage"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspmessage.top_of_page"></a>gstrtspmessage</span></h2>
+<p>gstrtspmessage — RTSP messages</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspmessage.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspmessage.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType" title="enum GstRTSPMsgType">GstRTSPMsgType</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage">GstRTSPMessage</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new" title="gst_rtsp_message_new ()">gst_rtsp_message_new</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init" title="gst_rtsp_message_init ()">gst_rtsp_message_init</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset" title="gst_rtsp_message_unset ()">gst_rtsp_message_unset</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()">gst_rtsp_message_free</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType" title="enum GstRTSPMsgType"><span class="returnvalue">GstRTSPMsgType</span></a>      <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-type" title="gst_rtsp_message_get_type ()">gst_rtsp_message_get_type</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-request" title="gst_rtsp_message_new_request ()">gst_rtsp_message_new_request</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-request" title="gst_rtsp_message_init_request ()">gst_rtsp_message_init_request</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-request" title="gst_rtsp_message_parse_request ()">gst_rtsp_message_parse_request</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> *method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **uri</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> *version</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-response" title="gst_rtsp_message_new_response ()">gst_rtsp_message_new_response</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *request</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-response" title="gst_rtsp_message_init_response ()">gst_rtsp_message_init_response</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *request</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-response" title="gst_rtsp_message_parse_response ()">gst_rtsp_message_parse_response</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> *code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **reason</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> *version</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-data" title="gst_rtsp_message_new_data ()">gst_rtsp_message_new_data</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-data" title="gst_rtsp_message_init_data ()">gst_rtsp_message_init_data</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-data" title="gst_rtsp_message_parse_data ()">gst_rtsp_message_parse_data</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header" title="gst_rtsp_message_add_header ()">gst_rtsp_message_add_header</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header" title="gst_rtsp_message_take_header ()">gst_rtsp_message_take_header</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header" title="gst_rtsp_message_remove_header ()">gst_rtsp_message_remove_header</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> indx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header" title="gst_rtsp_message_get_header ()">gst_rtsp_message_get_header</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> indx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers" title="gst_rtsp_message_append_headers ()">gst_rtsp_message_append_headers</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"><span class="type">GString</span></a> *str</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body" title="gst_rtsp_message_set_body ()">gst_rtsp_message_set_body</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body" title="gst_rtsp_message_take_body ()">gst_rtsp_message_take_body</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-body" title="gst_rtsp_message_get_body ()">gst_rtsp_message_get_body</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-steal-body" title="gst_rtsp_message_steal_body ()">gst_rtsp_message_steal_body</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-dump" title="gst_rtsp_message_dump ()">gst_rtsp_message_dump</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspmessage.description"></a><h2>Description</h2>
+<p>
+Provides methods for creating and parsing request, response and data messages.
+ 
+Last reviewed on 2007-07-25 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspmessage.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTSPMsgType"></a><h3>enum GstRTSPMsgType</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_MESSAGE_INVALID,
+  GST_RTSP_MESSAGE_REQUEST,
+  GST_RTSP_MESSAGE_RESPONSE,
+  GST_RTSP_MESSAGE_HTTP_REQUEST,
+  GST_RTSP_MESSAGE_HTTP_RESPONSE,
+  GST_RTSP_MESSAGE_DATA
+} GstRTSPMsgType;
+</pre>
+<p>
+The type of a message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-INVALID:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_INVALID</code></span></p></td>
+<td>invalid message type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-REQUEST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_REQUEST</code></span></p></td>
+<td>RTSP request message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-RESPONSE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_RESPONSE</code></span></p></td>
+<td>RTSP response message
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_HTTP_REQUEST</code></span></p></td>
+<td>HTTP request message. Since 0.10.25
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_HTTP_RESPONSE</code></span></p></td>
+<td>HTTP response message. Since 0.10.25
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-MESSAGE-DATA:CAPS"></a><span class="term"><code class="literal">GST_RTSP_MESSAGE_DATA</code></span></p></td>
+<td>data message
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPMessage"></a><h3>struct GstRTSPMessage</h3>
+<pre class="programlisting">struct GstRTSPMessage {
+  GstRTSPMsgType    type;
+
+  union {
+    struct {
+      GstRTSPMethod      method;
+      gchar             *uri;
+      GstRTSPVersion     version;
+    } request;
+    struct {
+      GstRTSPStatusCode  code;
+      gchar             *reason;
+      GstRTSPVersion     version;
+    } response;
+    struct {
+      guint8             channel;
+    } data;
+  } type_data;
+};
+</pre>
+<p>
+An RTSP message containing request, response or data messages. Depending on
+the <em class="parameter"><code>type</code></em>, the appropriate structure may be accessed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType" title="enum GstRTSPMsgType"><span class="type">GstRTSPMsgType</span></a> <em class="structfield"><code><a name="GstRTSPMessage.type"></a>type</code></em>;</span></p></td>
+<td>the message type</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-new"></a><h3>gst_rtsp_message_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_new                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>);</pre>
+<p>
+Create a new initialized <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>. Free with <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()"><code class="function">gst_rtsp_message_free()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a location for the new <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-init"></a><h3>gst_rtsp_message_init ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_init               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>msg</code></em>. This function is mostly used when <em class="parameter"><code>msg</code></em> is allocated on the
+stack. The reverse operation of this is <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset" title="gst_rtsp_message_unset ()"><code class="function">gst_rtsp_message_unset()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-unset"></a><h3>gst_rtsp_message_unset ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_unset              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Unset the contents of <em class="parameter"><code>msg</code></em> so that it becomes an uninitialized
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> again. This function is mostly used in combination with 
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-request" title="gst_rtsp_message_init_request ()"><code class="function">gst_rtsp_message_init_request()</code></a>, <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-response" title="gst_rtsp_message_init_response ()"><code class="function">gst_rtsp_message_init_response()</code></a> and
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-data" title="gst_rtsp_message_init_data ()"><code class="function">gst_rtsp_message_init_data()</code></a> on stack allocated <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> structures.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-free"></a><h3>gst_rtsp_message_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_free               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Free the memory used by <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-get-type"></a><h3>gst_rtsp_message_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType" title="enum GstRTSPMsgType"><span class="returnvalue">GstRTSPMsgType</span></a>      gst_rtsp_message_get_type           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the message type of <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the message type.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-new-request"></a><h3>gst_rtsp_message_new_request ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_new_request        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>
+Create a new <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> with <em class="parameter"><code>method</code></em> and <em class="parameter"><code>uri</code></em> and store the result
+request message in <em class="parameter"><code>msg</code></em>. Free with <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()"><code class="function">gst_rtsp_message_free()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a location for the new <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>the request method to use</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>the uri of the request</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-init-request"></a><h3>gst_rtsp_message_init_request ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_init_request       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>msg</code></em> as a request message with <em class="parameter"><code>method</code></em> and <em class="parameter"><code>uri</code></em>. To clear <em class="parameter"><code>msg</code></em>
+again, use <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset" title="gst_rtsp_message_unset ()"><code class="function">gst_rtsp_message_unset()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>the request method to use</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>the uri of the request</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-parse-request"></a><h3>gst_rtsp_message_parse_request ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_parse_request      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> *method</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **uri</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> *version</code></em>);</pre>
+<p>
+Parse the request message <em class="parameter"><code>msg</code></em> and store the values <em class="parameter"><code>method</code></em>, <em class="parameter"><code>uri</code></em> and
+<em class="parameter"><code>version</code></em>. The result locations can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if one is not interested in its
+value.
+</p>
+<p>
+<em class="parameter"><code>uri</code></em> remains valid for as long as <em class="parameter"><code>msg</code></em> is valid and unchanged.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>method</code></em> :</span></p></td>
+<td>location to hold the method</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>location to hold the uri</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>version</code></em> :</span></p></td>
+<td>location to hold the version</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-new-response"></a><h3>gst_rtsp_message_new_response ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_new_response       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *request</code></em>);</pre>
+<p>
+Create a new response <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> with <em class="parameter"><code>code</code></em> and <em class="parameter"><code>reason</code></em> and store the
+result message in <em class="parameter"><code>msg</code></em>. Free with <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()"><code class="function">gst_rtsp_message_free()</code></a>.
+</p>
+<p>
+When <em class="parameter"><code>reason</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the default reason for <em class="parameter"><code>code</code></em> will be used.
+</p>
+<p>
+When <em class="parameter"><code>request</code></em> is not <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the relevant headers will be copied to the new
+response message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a location for the new <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>code</code></em> :</span></p></td>
+<td>the status code</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>the status reason or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>request</code></em> :</span></p></td>
+<td>the request that triggered the response or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-init-response"></a><h3>gst_rtsp_message_init_response ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_init_response      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *reason</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *request</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>msg</code></em> with <em class="parameter"><code>code</code></em> and <em class="parameter"><code>reason</code></em>.
+</p>
+<p>
+When <em class="parameter"><code>reason</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the default reason for <em class="parameter"><code>code</code></em> will be used.
+</p>
+<p>
+When <em class="parameter"><code>request</code></em> is not <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the relevant headers will be copied to the new
+response message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>code</code></em> :</span></p></td>
+<td>the status code</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>the status reason or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>request</code></em> :</span></p></td>
+<td>the request that triggered the response or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-parse-response"></a><h3>gst_rtsp_message_parse_response ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_parse_response     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode" title="enum GstRTSPStatusCode"><span class="type">GstRTSPStatusCode</span></a> *code</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **reason</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion" title="enum GstRTSPVersion"><span class="type">GstRTSPVersion</span></a> *version</code></em>);</pre>
+<p>
+Parse the response message <em class="parameter"><code>msg</code></em> and store the values <em class="parameter"><code>code</code></em>, <em class="parameter"><code>reason</code></em> and
+<em class="parameter"><code>version</code></em>. The result locations can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if one is not interested in its
+value.
+</p>
+<p>
+<em class="parameter"><code>reason</code></em> remains valid for as long as <em class="parameter"><code>msg</code></em> is valid and unchanged.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>code</code></em> :</span></p></td>
+<td>location to hold the status code</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
+<td>location to hold the status reason</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>version</code></em> :</span></p></td>
+<td>location to hold the version</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-new-data"></a><h3>gst_rtsp_message_new_data ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_new_data           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> **msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel</code></em>);</pre>
+<p>
+Create a new data <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> with <em class="parameter"><code>channel</code></em> and store the
+result message in <em class="parameter"><code>msg</code></em>. Free with <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free" title="gst_rtsp_message_free ()"><code class="function">gst_rtsp_message_free()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a location for the new <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>the channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-init-data"></a><h3>gst_rtsp_message_init_data ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_init_data          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel</code></em>);</pre>
+<p>
+Initialize a new data <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> for <em class="parameter"><code>channel</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>a channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-parse-data"></a><h3>gst_rtsp_message_parse_data ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_parse_data         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel</code></em>);</pre>
+<p>
+Parse the data message <em class="parameter"><code>msg</code></em> and store the channel in <em class="parameter"><code>channel</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>location to hold the channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-add-header"></a><h3>gst_rtsp_message_add_header ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_add_header         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Add a header with key <em class="parameter"><code>field</code></em> and <em class="parameter"><code>value</code></em> to <em class="parameter"><code>msg</code></em>. This function takes a copy
+of <em class="parameter"><code>value</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value of the header</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-take-header"></a><h3>gst_rtsp_message_take_header ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_take_header        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Add a header with key <em class="parameter"><code>field</code></em> and <em class="parameter"><code>value</code></em> to <em class="parameter"><code>msg</code></em>. This function takes
+ownership of <em class="parameter"><code>value</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value of the header</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-remove-header"></a><h3>gst_rtsp_message_remove_header ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_remove_header      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> indx</code></em>);</pre>
+<p>
+Remove the <em class="parameter"><code>indx</code></em> header with key <em class="parameter"><code>field</code></em> from <em class="parameter"><code>msg</code></em>. If <em class="parameter"><code>indx</code></em> equals -1, all
+headers will be removed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>indx</code></em> :</span></p></td>
+<td>the index of the header</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-get-header"></a><h3>gst_rtsp_message_get_header ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_get_header         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> field</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> indx</code></em>);</pre>
+<p>
+Get the <em class="parameter"><code>indx</code></em> header value with key <em class="parameter"><code>field</code></em> from <em class="parameter"><code>msg</code></em>. The result in <em class="parameter"><code>value</code></em>
+stays valid as long as it remains present in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>pointer to hold the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>indx</code></em> :</span></p></td>
+<td>the index of the header</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>field</code></em> was found, <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS"><span class="type">GST_RTSP_ENOTIMPL</span></a> if the key
+was not found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-append-headers"></a><h3>gst_rtsp_message_append_headers ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_append_headers     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"><span class="type">GString</span></a> *str</code></em>);</pre>
+<p>
+Append the currently configured headers in <em class="parameter"><code>msg</code></em> to the <a href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"><span class="type">GString</span></a> <em class="parameter"><code>str</code></em> suitable
+for transmission.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>a string</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-set-body"></a><h3>gst_rtsp_message_set_body ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_set_body           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>
+Set the body of <em class="parameter"><code>msg</code></em> to a copy of <em class="parameter"><code>data</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-take-body"></a><h3>gst_rtsp_message_take_body ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_take_body          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>
+Set the body of <em class="parameter"><code>msg</code></em> to <em class="parameter"><code>data</code></em> and <em class="parameter"><code>size</code></em>. This method takes ownership of
+<em class="parameter"><code>data</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-get-body"></a><h3>gst_rtsp_message_get_body ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_get_body           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);</pre>
+<p>
+Get the body of <em class="parameter"><code>msg</code></em>. <em class="parameter"><code>data</code></em> remains valid for as long as <em class="parameter"><code>msg</code></em> is valid and
+unchanged.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>location for the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-steal-body"></a><h3>gst_rtsp_message_steal_body ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_steal_body         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> **data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *size</code></em>);</pre>
+<p>
+Take the body of <em class="parameter"><code>msg</code></em> and store it in <em class="parameter"><code>data</code></em> and <em class="parameter"><code>size</code></em>. After this method,
+the body and size of <em class="parameter"><code>msg</code></em> will be set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> and 0 respectively.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>location for the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>location for the size of <em class="parameter"><code>data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-dump"></a><h3>gst_rtsp_message_dump ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_message_dump               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Dump the contents of <em class="parameter"><code>msg</code></em> to stdout.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspmessage.see-also"></a><h2>See Also</h2>
+gstrtspconnection
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html b/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html
new file mode 100644
index 0000000..fa6ad22
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtsprange</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">
+<link rel="next" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspmessage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtsptransport.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtsprange.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtsprange.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtsprange"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtsprange.top_of_page"></a>gstrtsprange</span></h2>
+<p>gstrtsprange — dealing with time ranges</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtsprange.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtsrange.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit" title="enum GstRTSPRangeUnit">GstRTSPRangeUnit</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange">GstRTSPTimeRange</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime" title="struct GstRTSPTime">GstRTSPTime</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType" title="enum GstRTSPTimeType">GstRTSPTimeType</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-parse" title="gst_rtsp_range_parse ()">gst_rtsp_range_parse</a>                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *rangestr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> **range</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-to-string" title="gst_rtsp_range_to_string ()">gst_rtsp_range_to_string</a>            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> *range</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-free" title="gst_rtsp_range_free ()">gst_rtsp_range_free</a>                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> *range</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtsprange.description"></a><h2>Description</h2>
+<p>
+Provides helper functions to deal with time ranges.
+ 
+Last reviewed on 2007-07-25 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtsprange.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTSPRangeUnit"></a><h3>enum GstRTSPRangeUnit</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_RANGE_SMPTE,
+  GST_RTSP_RANGE_SMPTE_30_DROP,
+  GST_RTSP_RANGE_SMPTE_25,
+  GST_RTSP_RANGE_NPT,
+  GST_RTSP_RANGE_CLOCK
+} GstRTSPRangeUnit;
+</pre>
+<p>
+Different possible time range units.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-RANGE-SMPTE:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RANGE_SMPTE</code></span></p></td>
+<td>SMPTE timecode
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-RANGE-SMPTE-30-DROP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RANGE_SMPTE_30_DROP</code></span></p></td>
+<td>29.97 frames per second
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-RANGE-SMPTE-25:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RANGE_SMPTE_25</code></span></p></td>
+<td>25 frames per second
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-RANGE-NPT:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RANGE_NPT</code></span></p></td>
+<td>Normal play time 
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-RANGE-CLOCK:CAPS"></a><span class="term"><code class="literal">GST_RTSP_RANGE_CLOCK</code></span></p></td>
+<td>Absolute time expressed as ISO 8601 timestamps
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPTimeRange"></a><h3>struct GstRTSPTimeRange</h3>
+<pre class="programlisting">struct GstRTSPTimeRange {
+  GstRTSPRangeUnit unit;
+
+  GstRTSPTime min;
+  GstRTSPTime max;
+};
+</pre>
+<p>
+A time range.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit" title="enum GstRTSPRangeUnit"><span class="type">GstRTSPRangeUnit</span></a> <em class="structfield"><code><a name="GstRTSPTimeRange.unit"></a>unit</code></em>;</span></p></td>
+<td>the time units used</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime" title="struct GstRTSPTime"><span class="type">GstRTSPTime</span></a> <em class="structfield"><code><a name="GstRTSPTimeRange.min"></a>min</code></em>;</span></p></td>
+<td>the minimum interval</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime" title="struct GstRTSPTime"><span class="type">GstRTSPTime</span></a> <em class="structfield"><code><a name="GstRTSPTimeRange.max"></a>max</code></em>;</span></p></td>
+<td>the maximum interval</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPTime"></a><h3>struct GstRTSPTime</h3>
+<pre class="programlisting">struct GstRTSPTime {
+  GstRTSPTimeType type;
+  gdouble         seconds;
+};
+</pre>
+<p>
+A time indication.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType" title="enum GstRTSPTimeType"><span class="type">GstRTSPTimeType</span></a> <em class="structfield"><code><a name="GstRTSPTime.type"></a>type</code></em>;</span></p></td>
+<td>the time of the time</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> <em class="structfield"><code><a name="GstRTSPTime.seconds"></a>seconds</code></em>;</span></p></td>
+<td>seconds when <em class="parameter"><code>type</code></em> is GST_RTSP_TIME_SECONDS</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPTimeType"></a><h3>enum GstRTSPTimeType</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_TIME_SECONDS,
+  GST_RTSP_TIME_NOW,
+  GST_RTSP_TIME_END
+} GstRTSPTimeType;
+</pre>
+<p>
+Possible time types.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-TIME-SECONDS:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TIME_SECONDS</code></span></p></td>
+<td>seconds
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-TIME-NOW:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TIME_NOW</code></span></p></td>
+<td>now
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-TIME-END:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TIME_END</code></span></p></td>
+<td>end
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-range-parse"></a><h3>gst_rtsp_range_parse ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_range_parse                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *rangestr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> **range</code></em>);</pre>
+<p>
+Parse <em class="parameter"><code>rangestr</code></em> to a <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rangestr</code></em> :</span></p></td>
+<td>a range string to parse</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em> :</span></p></td>
+<td>location to hold the <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-range-to-string"></a><h3>gst_rtsp_range_to_string ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_range_to_string            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> *range</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>range</code></em> into a string representation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The string representation of <em class="parameter"><code>range</code></em>. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.23</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-range-free"></a><h3>gst_rtsp_range_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_range_free                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a> *range</code></em>);</pre>
+<p>
+Free the memory alocated by <em class="parameter"><code>range</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>range</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange" title="struct GstRTSPTimeRange"><span class="type">GstRTSPTimeRange</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html b/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html
new file mode 100644
index 0000000..620f399
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html
@@ -0,0 +1,498 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtsptransport</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">
+<link rel="next" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtsprange.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspurl.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtsptransport.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtsptransport.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtsptransport"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtsptransport.top_of_page"></a>gstrtsptransport</span></h2>
+<p>gstrtsptransport — dealing with RTSP transports</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtsptransport.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtsptransport.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode">GstRTSPTransMode</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile" title="enum GstRTSPProfile">GstRTSPProfile</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange">GstRTSPRange</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans" title="enum GstRTSPLowerTrans">GstRTSPLowerTrans</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport">GstRTSPTransport</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-new" title="gst_rtsp_transport_new ()">gst_rtsp_transport_new</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> **transport</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-init" title="gst_rtsp_transport_init ()">gst_rtsp_transport_init</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-parse" title="gst_rtsp_transport_parse ()">gst_rtsp_transport_parse</a>            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *str</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-as-text" title="gst_rtsp_transport_as_text ()">gst_rtsp_transport_as_text</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-mime" title="gst_rtsp_transport_get_mime ()">gst_rtsp_transport_get_mime</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a> trans</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **mime</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-manager" title="gst_rtsp_transport_get_manager ()">gst_rtsp_transport_get_manager</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a> trans</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **manager</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> option</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free" title="gst_rtsp_transport_free ()">gst_rtsp_transport_free</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtsptransport.description"></a><h2>Description</h2>
+<p>
+Provides helper functions to deal with RTSP transport strings.
+ 
+Last reviewed on 2007-07-25 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtsptransport.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstRTSPTransMode"></a><h3>enum GstRTSPTransMode</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_TRANS_UNKNOWN =  0,
+  GST_RTSP_TRANS_RTP     = (1 &lt;&lt; 0),
+  GST_RTSP_TRANS_RDT     = (1 &lt;&lt; 1)
+} GstRTSPTransMode;
+</pre>
+<p>
+The transfer mode to use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-TRANS-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TRANS_UNKNOWN</code></span></p></td>
+<td>invalid tansport mode
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-TRANS-RTP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TRANS_RTP</code></span></p></td>
+<td>transfer RTP data
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-TRANS-RDT:CAPS"></a><span class="term"><code class="literal">GST_RTSP_TRANS_RDT</code></span></p></td>
+<td>transfer RDT (RealMedia) data
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPProfile"></a><h3>enum GstRTSPProfile</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_PROFILE_UNKNOWN =  0,
+  GST_RTSP_PROFILE_AVP     = (1 &lt;&lt; 0),
+  GST_RTSP_PROFILE_SAVP    = (1 &lt;&lt; 1)
+} GstRTSPProfile;
+</pre>
+<p>
+The transfer profile to use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-PROFILE-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_RTSP_PROFILE_UNKNOWN</code></span></p></td>
+<td>invalid profile
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-PROFILE-AVP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_PROFILE_AVP</code></span></p></td>
+<td>the Audio/Visual profile
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-PROFILE-SAVP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_PROFILE_SAVP</code></span></p></td>
+<td>the secure Audio/Visual profile
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPRange"></a><h3>struct GstRTSPRange</h3>
+<pre class="programlisting">struct GstRTSPRange {
+  gint min;
+  gint max;
+};
+</pre>
+<p>
+A type to specify a range.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRTSPRange.min"></a>min</code></em>;</span></p></td>
+<td>minimum value of the range</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstRTSPRange.max"></a>max</code></em>;</span></p></td>
+<td>maximum value of the range</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPLowerTrans"></a><h3>enum GstRTSPLowerTrans</h3>
+<pre class="programlisting">typedef enum {
+  GST_RTSP_LOWER_TRANS_UNKNOWN   = 0,
+  GST_RTSP_LOWER_TRANS_UDP       = (1 &lt;&lt; 0),
+  GST_RTSP_LOWER_TRANS_UDP_MCAST = (1 &lt;&lt; 1),
+  GST_RTSP_LOWER_TRANS_TCP       = (1 &lt;&lt; 2),
+  GST_RTSP_LOWER_TRANS_HTTP      = (1 &lt;&lt; 4)
+} GstRTSPLowerTrans;
+</pre>
+<p>
+The different transport methods.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_RTSP_LOWER_TRANS_UNKNOWN</code></span></p></td>
+<td>invalid transport flag
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-LOWER-TRANS-UDP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_LOWER_TRANS_UDP</code></span></p></td>
+<td>stream data over UDP
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS"></a><span class="term"><code class="literal">GST_RTSP_LOWER_TRANS_UDP_MCAST</code></span></p></td>
+<td>stream data over UDP multicast
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-LOWER-TRANS-TCP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_LOWER_TRANS_TCP</code></span></p></td>
+<td>stream data over TCP
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RTSP-LOWER-TRANS-HTTP:CAPS"></a><span class="term"><code class="literal">GST_RTSP_LOWER_TRANS_HTTP</code></span></p></td>
+<td>stream data tunneled over HTTP. Since: 0.10.23
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPTransport"></a><h3>struct GstRTSPTransport</h3>
+<pre class="programlisting">struct GstRTSPTransport {
+  GstRTSPTransMode  trans;
+  GstRTSPProfile    profile;
+  GstRTSPLowerTrans lower_transport;
+
+  gchar         *destination;
+  gchar         *source;
+  guint          layers;
+  gboolean       mode_play;
+  gboolean       mode_record;
+  gboolean       append;
+  GstRTSPRange   interleaved;
+
+  /* multicast specific */
+  guint  ttl;
+
+  /* UDP specific */
+  GstRTSPRange   port;
+  GstRTSPRange   client_port;
+  GstRTSPRange   server_port;
+  /* RTP specific */
+  guint          ssrc;
+};
+</pre>
+<p>
+A structure holding the RTSP transport values.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a> <em class="structfield"><code><a name="GstRTSPTransport.trans"></a>trans</code></em>;</span></p></td>
+<td>the transport mode</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile" title="enum GstRTSPProfile"><span class="type">GstRTSPProfile</span></a> <em class="structfield"><code><a name="GstRTSPTransport.profile"></a>profile</code></em>;</span></p></td>
+<td>the tansport profile</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans" title="enum GstRTSPLowerTrans"><span class="type">GstRTSPLowerTrans</span></a> <em class="structfield"><code><a name="GstRTSPTransport.lower-transport"></a>lower_transport</code></em>;</span></p></td>
+<td>the lower transport</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPTransport.destination"></a>destination</code></em>;</span></p></td>
+<td>the destination ip/hostname</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPTransport.source"></a>source</code></em>;</span></p></td>
+<td>the source ip/hostname</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTSPTransport.layers"></a>layers</code></em>;</span></p></td>
+<td>the number of layers</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstRTSPTransport.mode-play"></a>mode_play</code></em>;</span></p></td>
+<td>if play mode was selected</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstRTSPTransport.mode-record"></a>mode_record</code></em>;</span></p></td>
+<td>if record mode was selected</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> <em class="structfield"><code><a name="GstRTSPTransport.append"></a>append</code></em>;</span></p></td>
+<td>is append mode was selected</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange"><span class="type">GstRTSPRange</span></a> <em class="structfield"><code><a name="GstRTSPTransport.interleaved"></a>interleaved</code></em>;</span></p></td>
+<td>the interleave range</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTSPTransport.ttl"></a>ttl</code></em>;</span></p></td>
+<td>the time to live for multicast UDP</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange"><span class="type">GstRTSPRange</span></a> <em class="structfield"><code><a name="GstRTSPTransport.port"></a>port</code></em>;</span></p></td>
+<td>the port pair for multicast sessions</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange"><span class="type">GstRTSPRange</span></a> <em class="structfield"><code><a name="GstRTSPTransport.client-port"></a>client_port</code></em>;</span></p></td>
+<td>the client port pair for receiving data</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange" title="struct GstRTSPRange"><span class="type">GstRTSPRange</span></a> <em class="structfield"><code><a name="GstRTSPTransport.server-port"></a>server_port</code></em>;</span></p></td>
+<td>the server port pair for receiving data</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstRTSPTransport.ssrc"></a>ssrc</code></em>;</span></p></td>
+<td>the ssrc that the sender/receiver will use</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-new"></a><h3>gst_rtsp_transport_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_new              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> **transport</code></em>);</pre>
+<p>
+Allocate a new initialized <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>. Use <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free" title="gst_rtsp_transport_free ()"><code class="function">gst_rtsp_transport_free()</code></a>
+after usage.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>transport</code></em> :</span></p></td>
+<td>location to hold the new <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-init"></a><h3>gst_rtsp_transport_init ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_init             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>transport</code></em> so that it can be used.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>transport</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-parse"></a><h3>gst_rtsp_transport_parse ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_parse            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *str</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);</pre>
+<p>
+Parse the RTSP transport string <em class="parameter"><code>str</code></em> into <em class="parameter"><code>transport</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>a transport string</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>transport</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-as-text"></a><h3>gst_rtsp_transport_as_text ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_transport_as_text          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);</pre>
+<p>
+Convert <em class="parameter"><code>transport</code></em> into a string that can be used to signal the transport in
+an RTSP SETUP response.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>transport</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string describing the RTSP transport or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> when the transport
+is invalid.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-get-mime"></a><h3>gst_rtsp_transport_get_mime ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_get_mime         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a> trans</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **mime</code></em>);</pre>
+<p>
+Get the mime type of the transport mode <em class="parameter"><code>trans</code></em>. This mime type is typically
+used to generate <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on buffers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trans</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mime</code></em> :</span></p></td>
+<td>location to hold the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-get-manager"></a><h3>gst_rtsp_transport_get_manager ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_get_manager      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a> trans</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **manager</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> option</code></em>);</pre>
+<p>
+Get the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> that can handle the buffers transported over <em class="parameter"><code>trans</code></em>.
+</p>
+<p>
+It is possible that there are several managers available, use <em class="parameter"><code>option</code></em> to
+selected one.
+</p>
+<p>
+<em class="parameter"><code>manager</code></em> will contain an element name or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> when no manager is
+needed/available for <em class="parameter"><code>trans</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trans</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode" title="enum GstRTSPTransMode"><span class="type">GstRTSPTransMode</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>manager</code></em> :</span></p></td>
+<td>location to hold the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>option</code></em> :</span></p></td>
+<td>option index.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-transport-free"></a><h3>gst_rtsp_transport_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_transport_free             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a> *transport</code></em>);</pre>
+<p>
+Free the memory used by <em class="parameter"><code>transport</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>transport</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport" title="struct GstRTSPTransport"><span class="type">GstRTSPTransport</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html b/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html
new file mode 100644
index 0000000..9cc2dea
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html
@@ -0,0 +1,315 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstrtspurl</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
+<link rel="prev" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">
+<link rel="next" href="gstreamer-sdp.html" title="SDP Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtsptransport.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-rtsp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-sdp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstrtspurl.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstrtspurl.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstrtspurl"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtspurl.top_of_page"></a>gstrtspurl</span></h2>
+<p>gstrtspurl — handling RTSP urls</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstrtspurl.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/rtsp/gstrtspurl.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GST-RTSP-DEFAULT-PORT:CAPS" title="GST_RTSP_DEFAULT_PORT">GST_RTSP_DEFAULT_PORT</a>
+struct              <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl">GstRTSPUrl</a>;
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-parse" title="gst_rtsp_url_parse ()">gst_rtsp_url_parse</a>                  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *urlstr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> **url</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *        <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-copy" title="gst_rtsp_url_copy ()">gst_rtsp_url_copy</a>                   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free" title="gst_rtsp_url_free ()">gst_rtsp_url_free</a>                   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-request-uri" title="gst_rtsp_url_get_request_uri ()">gst_rtsp_url_get_request_uri</a>        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-set-port" title="gst_rtsp_url_set_port ()">gst_rtsp_url_set_port</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-port" title="gst_rtsp_url_get_port ()">gst_rtsp_url_get_port</a>               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-decode-path-components" title="gst_rtsp_url_decode_path_components ()">gst_rtsp_url_decode_path_components</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspurl.description"></a><h2>Description</h2>
+<p>
+Provides helper functions to handle RTSP urls.
+ 
+Last reviewed on 2007-07-25 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtspurl.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-RTSP-DEFAULT-PORT:CAPS"></a><h3>GST_RTSP_DEFAULT_PORT</h3>
+<pre class="programlisting">#define GST_RTSP_DEFAULT_PORT       554
+</pre>
+<p>
+The default RTSP port to connect to.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPUrl"></a><h3>struct GstRTSPUrl</h3>
+<pre class="programlisting">struct GstRTSPUrl {
+  GstRTSPLowerTrans  transports;
+  GstRTSPFamily      family;
+  gchar             *user;
+  gchar             *passwd;
+  gchar             *host;
+  guint16            port;
+  gchar             *abspath;
+  gchar             *query;
+};
+</pre>
+<p>
+This structure contains the result of a parsed RTSP URL
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans" title="enum GstRTSPLowerTrans"><span class="type">GstRTSPLowerTrans</span></a> <em class="structfield"><code><a name="GstRTSPUrl.transports"></a>transports</code></em>;</span></p></td>
+<td>the transports allowed</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily" title="enum GstRTSPFamily"><span class="type">GstRTSPFamily</span></a> <em class="structfield"><code><a name="GstRTSPUrl.family"></a>family</code></em>;</span></p></td>
+<td>the family</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPUrl.user"></a>user</code></em>;</span></p></td>
+<td>the user</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPUrl.passwd"></a>passwd</code></em>;</span></p></td>
+<td>the password</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPUrl.host"></a>host</code></em>;</span></p></td>
+<td>the host</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> <em class="structfield"><code><a name="GstRTSPUrl.port"></a>port</code></em>;</span></p></td>
+<td>the port</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPUrl.abspath"></a>abspath</code></em>;</span></p></td>
+<td>the absolute path</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstRTSPUrl.query"></a>query</code></em>;</span></p></td>
+<td>additional query parameters</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-parse"></a><h3>gst_rtsp_url_parse ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_url_parse                  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *urlstr</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> **url</code></em>);</pre>
+<p>
+Parse the RTSP <em class="parameter"><code>urlstr</code></em> into a newly allocated <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>. Free after usage
+with <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free" title="gst_rtsp_url_free ()"><code class="function">gst_rtsp_url_free()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>urlstr</code></em> :</span></p></td>
+<td>the url string to parse</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>location to hold the result.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-copy"></a><h3>gst_rtsp_url_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *        gst_rtsp_url_copy                   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre>
+<p>
+Make a copy of <em class="parameter"><code>url</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a copy of <em class="parameter"><code>url</code></em>. Free with <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free" title="gst_rtsp_url_free ()"><code class="function">gst_rtsp_url_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.22</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-free"></a><h3>gst_rtsp_url_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_rtsp_url_free                   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre>
+<p>
+Free the memory used by <em class="parameter"><code>url</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-get-request-uri"></a><h3>gst_rtsp_url_get_request_uri ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_rtsp_url_get_request_uri        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre>
+<p>
+Get a newly allocated string describing the request URI for <em class="parameter"><code>url</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string with the request URI. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-set-port"></a><h3>gst_rtsp_url_set_port ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_url_set_port               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> port</code></em>);</pre>
+<p>
+Set the port number in <em class="parameter"><code>url</code></em> to <em class="parameter"><code>port</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>the port</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-get-port"></a><h3>gst_rtsp_url_get_port ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>       gst_rtsp_url_get_port               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *port</code></em>);</pre>
+<p>
+Get the port number of <em class="parameter"><code>url</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>location to hold the port</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-url-decode-path-components"></a><h3>gst_rtsp_url_decode_path_components ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            gst_rtsp_url_decode_path_components (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre>
+<p>
+Splits the path of <em class="parameter"><code>url</code></em> on '/' boundaries, decoding the resulting components,
+</p>
+<p>
+The decoding performed by this routine is "URI decoding", as defined in RFC
+3986, commonly known as percent-decoding. For example, a string "foo%2fbar"
+will decode to "foo/bar" -- the %2f being replaced by the corresponding byte
+with hex value 0x2f. Note that there is no guarantee that the resulting byte
+sequence is valid in any given encoding. As a special case, %00 is not
+unescaped to NUL, as that would prematurely terminate the string.
+</p>
+<p>
+Also note that since paths usually start with a slash, the first component
+will usually be the empty string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>url</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string vector. <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a> after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html b/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html
new file mode 100644
index 0000000..8d516a1
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html
@@ -0,0 +1,2788 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstsdpmessage</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-sdp.html" title="SDP Library">
+<link rel="prev" href="gstreamer-sdp.html" title="SDP Library">
+<link rel="next" href="gstreamer-tag.html" title="Tag Support Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-sdp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-sdp.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-tag.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstsdpmessage.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstsdpmessage.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstsdpmessage"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstsdpmessage.top_of_page"></a>gstsdpmessage</span></h2>
+<p>gstsdpmessage — Helper methods for dealing with SDP messages</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstsdpmessage.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/sdp/gstsdpmessage.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult">GstSDPResult</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin">GstSDPOrigin</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection">GstSDPConnection</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-CT:CAPS" title="GST_SDP_BWTYPE_CT">GST_SDP_BWTYPE_CT</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-AS:CAPS" title="GST_SDP_BWTYPE_AS">GST_SDP_BWTYPE_AS</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-EXT-PREFIX:CAPS" title="GST_SDP_BWTYPE_EXT_PREFIX">GST_SDP_BWTYPE_EXT_PREFIX</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RR:CAPS" title="GST_SDP_BWTYPE_RR">GST_SDP_BWTYPE_RR</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RS:CAPS" title="GST_SDP_BWTYPE_RS">GST_SDP_BWTYPE_RS</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-TIAS:CAPS" title="GST_SDP_BWTYPE_TIAS">GST_SDP_BWTYPE_TIAS</a>
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth">GstSDPBandwidth</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime">GstSDPTime</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone">GstSDPZone</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey">GstSDPKey</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute">GstSDPAttribute</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia">GstSDPMedia</a>;
+                    <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage">GstSDPMessage</a>;
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()">gst_sdp_message_new</a>                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> **msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init" title="gst_sdp_message_init ()">gst_sdp_message_init</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit" title="gst_sdp_message_uninit ()">gst_sdp_message_uninit</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free" title="gst_sdp_message_free ()">gst_sdp_message_free</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-buffer" title="gst_sdp_message_parse_buffer ()">gst_sdp_message_parse_buffer</a>        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-text" title="gst_sdp_message_as_text ()">gst_sdp_message_as_text</a>             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-uri" title="gst_sdp_message_parse_uri ()">gst_sdp_message_parse_uri</a>           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-uri" title="gst_sdp_message_as_uri ()">gst_sdp_message_as_uri</a>              (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *scheme</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-address-is-multicast" title="gst_sdp_address_is_multicast ()">gst_sdp_address_is_multicast</a>        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addr</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-version" title="gst_sdp_message_get_version ()">gst_sdp_message_get_version</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-version" title="gst_sdp_message_set_version ()">gst_sdp_message_set_version</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *version</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin"><span class="returnvalue">GstSDPOrigin</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-origin" title="gst_sdp_message_get_origin ()">gst_sdp_message_get_origin</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-origin" title="gst_sdp_message_set_origin ()">gst_sdp_message_set_origin</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *username</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *sess_id</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *sess_version</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addr</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-session-name" title="gst_sdp_message_get_session_name ()">gst_sdp_message_get_session_name</a>    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-session-name" title="gst_sdp_message_set_session_name ()">gst_sdp_message_set_session_name</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *session_name</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-information" title="gst_sdp_message_get_information ()">gst_sdp_message_get_information</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-information" title="gst_sdp_message_set_information ()">gst_sdp_message_set_information</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *information</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-uri" title="gst_sdp_message_get_uri ()">gst_sdp_message_get_uri</a>             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-uri" title="gst_sdp_message_set_uri ()">gst_sdp_message_set_uri</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-emails-len" title="gst_sdp_message_emails_len ()">gst_sdp_message_emails_len</a>          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-email" title="gst_sdp_message_get_email ()">gst_sdp_message_get_email</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-email" title="gst_sdp_message_add_email ()">gst_sdp_message_add_email</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *email</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-phones-len" title="gst_sdp_message_phones_len ()">gst_sdp_message_phones_len</a>          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-phone" title="gst_sdp_message_get_phone ()">gst_sdp_message_get_phone</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-phone" title="gst_sdp_message_add_phone ()">gst_sdp_message_add_phone</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *phone</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="returnvalue">GstSDPConnection</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-connection" title="gst_sdp_message_get_connection ()">gst_sdp_message_get_connection</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-connection" title="gst_sdp_message_set_connection ()">gst_sdp_message_set_connection</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> ttl</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> addr_number</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-bandwidths-len" title="gst_sdp_message_bandwidths_len ()">gst_sdp_message_bandwidths_len</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="returnvalue">GstSDPBandwidth</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-bandwidth" title="gst_sdp_message_get_bandwidth ()">gst_sdp_message_get_bandwidth</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-bandwidth" title="gst_sdp_message_add_bandwidth ()">gst_sdp_message_add_bandwidth</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *bwtype</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-times-len" title="gst_sdp_message_times_len ()">gst_sdp_message_times_len</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime"><span class="returnvalue">GstSDPTime</span></a> *  <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-time" title="gst_sdp_message_get_time ()">gst_sdp_message_get_time</a>            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-time" title="gst_sdp_message_add_time ()">gst_sdp_message_add_time</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *start</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *stop</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **repeat</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-zones-len" title="gst_sdp_message_zones_len ()">gst_sdp_message_zones_len</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone"><span class="returnvalue">GstSDPZone</span></a> *  <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-zone" title="gst_sdp_message_get_zone ()">gst_sdp_message_get_zone</a>            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-zone" title="gst_sdp_message_add_zone ()">gst_sdp_message_add_zone</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *adj_time</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *typed_time</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="returnvalue">GstSDPKey</span></a> *   <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-key" title="gst_sdp_message_get_key ()">gst_sdp_message_get_key</a>             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-key" title="gst_sdp_message_set_key ()">gst_sdp_message_set_key</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-attributes-len" title="gst_sdp_message_attributes_len ()">gst_sdp_message_attributes_len</a>      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="returnvalue">GstSDPAttribute</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute" title="gst_sdp_message_get_attribute ()">gst_sdp_message_get_attribute</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val" title="gst_sdp_message_get_attribute_val ()">gst_sdp_message_get_attribute_val</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val-n" title="gst_sdp_message_get_attribute_val_n ()">gst_sdp_message_get_attribute_val_n</a> (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-attribute" title="gst_sdp_message_add_attribute ()">gst_sdp_message_add_attribute</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-medias-len" title="gst_sdp_message_medias_len ()">gst_sdp_message_medias_len</a>          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="returnvalue">GstSDPMedia</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-media" title="gst_sdp_message_get_media ()">gst_sdp_message_get_media</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media" title="gst_sdp_message_add_media ()">gst_sdp_message_add_media</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump" title="gst_sdp_message_dump ()">gst_sdp_message_dump</a>                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()">gst_sdp_media_new</a>                   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> **media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()">gst_sdp_media_init</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit" title="gst_sdp_media_uninit ()">gst_sdp_media_uninit</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free" title="gst_sdp_media_free ()">gst_sdp_media_free</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-media" title="gst_sdp_media_get_media ()">gst_sdp_media_get_media</a>             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-media" title="gst_sdp_media_set_media ()">gst_sdp_media_set_media</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *med</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-port" title="gst_sdp_media_get_port ()">gst_sdp_media_get_port</a>              (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-num-ports" title="gst_sdp_media_get_num_ports ()">gst_sdp_media_get_num_ports</a>         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-port-info" title="gst_sdp_media_set_port_info ()">gst_sdp_media_set_port_info</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> num_ports</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-proto" title="gst_sdp_media_get_proto ()">gst_sdp_media_get_proto</a>             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-proto" title="gst_sdp_media_set_proto ()">gst_sdp_media_set_proto</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *proto</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-formats-len" title="gst_sdp_media_formats_len ()">gst_sdp_media_formats_len</a>           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-format" title="gst_sdp_media_get_format ()">gst_sdp_media_get_format</a>            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-format" title="gst_sdp_media_add_format ()">gst_sdp_media_add_format</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-information" title="gst_sdp_media_get_information ()">gst_sdp_media_get_information</a>       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-information" title="gst_sdp_media_set_information ()">gst_sdp_media_set_information</a>       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *information</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-connections-len" title="gst_sdp_media_connections_len ()">gst_sdp_media_connections_len</a>       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="returnvalue">GstSDPConnection</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-connection" title="gst_sdp_media_get_connection ()">gst_sdp_media_get_connection</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-connection" title="gst_sdp_media_add_connection ()">gst_sdp_media_add_connection</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> ttl</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> addr_number</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-bandwidths-len" title="gst_sdp_media_bandwidths_len ()">gst_sdp_media_bandwidths_len</a>        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="returnvalue">GstSDPBandwidth</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-bandwidth" title="gst_sdp_media_get_bandwidth ()">gst_sdp_media_get_bandwidth</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-bandwidth" title="gst_sdp_media_add_bandwidth ()">gst_sdp_media_add_bandwidth</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *bwtype</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="returnvalue">GstSDPKey</span></a> *   <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-key" title="gst_sdp_media_get_key ()">gst_sdp_media_get_key</a>               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-key" title="gst_sdp_media_set_key ()">gst_sdp_media_set_key</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-attributes-len" title="gst_sdp_media_attributes_len ()">gst_sdp_media_attributes_len</a>        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="returnvalue">GstSDPAttribute</span></a> * <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute" title="gst_sdp_media_get_attribute ()">gst_sdp_media_get_attribute</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val" title="gst_sdp_media_get_attribute_val ()">gst_sdp_media_get_attribute_val</a>     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val-n" title="gst_sdp_media_get_attribute_val_n ()">gst_sdp_media_get_attribute_val_n</a>   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-attribute" title="gst_sdp_media_add_attribute ()">gst_sdp_media_add_attribute</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-as-text" title="gst_sdp_media_as_text ()">gst_sdp_media_as_text</a>               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstsdpmessage.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id590545"></a><p>
+The GstSDPMessage helper functions makes it easy to parse and create SDP
+messages.
+</p>
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2007-07-24 (0.10.14)
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstsdpmessage.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstSDPResult"></a><h3>enum GstSDPResult</h3>
+<pre class="programlisting">typedef enum {
+  GST_SDP_OK     = 0,
+  GST_SDP_EINVAL = -1
+} GstSDPResult;
+</pre>
+<p>
+Return values for the SDP functions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-SDP-OK:CAPS"></a><span class="term"><code class="literal">GST_SDP_OK</code></span></p></td>
+<td>A successful return value
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SDP-EINVAL:CAPS"></a><span class="term"><code class="literal">GST_SDP_EINVAL</code></span></p></td>
+<td>a function was given invalid parameters
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPOrigin"></a><h3>GstSDPOrigin</h3>
+<pre class="programlisting">typedef struct {
+  gchar *username;
+  gchar *sess_id;
+  gchar *sess_version;
+  gchar *nettype;
+  gchar *addrtype;
+  gchar *addr;
+} GstSDPOrigin;
+</pre>
+<p>
+The contents of the SDP "o=" field which gives the originator of the session
+(their username and the address of the user's host) plus a session id and
+session version number.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.username"></a>username</code></em>;</span></p></td>
+<td>the user's login on the originating host, or it is "-"
+if the originating host does not support the concept of user ids.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.sess-id"></a>sess_id</code></em>;</span></p></td>
+<td>is a numeric string such that the tuple of <em class="parameter"><code>username</code></em>, <em class="parameter"><code>sess_id</code></em>,
+<em class="parameter"><code>nettype</code></em>, <em class="parameter"><code>addrtype</code></em> and <em class="parameter"><code>addr</code></em> form a globally unique identifier for the
+session.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.sess-version"></a>sess_version</code></em>;</span></p></td>
+<td>a version number for this announcement</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.nettype"></a>nettype</code></em>;</span></p></td>
+<td>the type of network. "IN" is defined to have the meaning
+"Internet".</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.addrtype"></a>addrtype</code></em>;</span></p></td>
+<td>the type of <em class="parameter"><code>addr</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPOrigin.addr"></a>addr</code></em>;</span></p></td>
+<td>the globally unique address of the machine from which the session was
+created.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPConnection"></a><h3>GstSDPConnection</h3>
+<pre class="programlisting">typedef struct {
+  gchar *nettype;
+  gchar *addrtype;
+  gchar *address;
+  guint  ttl;
+  guint  addr_number;
+} GstSDPConnection;
+</pre>
+<p>
+The contents of the SDP "c=" field which contains connection data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPConnection.nettype"></a>nettype</code></em>;</span></p></td>
+<td>the type of network. "IN" is defined to have the meaning
+"Internet".</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPConnection.addrtype"></a>addrtype</code></em>;</span></p></td>
+<td>the type of <em class="parameter"><code>address</code></em>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPConnection.address"></a>address</code></em>;</span></p></td>
+<td>the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstSDPConnection.ttl"></a>ttl</code></em>;</span></p></td>
+<td>the time to live of the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstSDPConnection.addr-number"></a>addr_number</code></em>;</span></p></td>
+<td>the number of layers</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-CT:CAPS"></a><h3>GST_SDP_BWTYPE_CT</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_CT               "CT"
+</pre>
+<p>
+The Conference Total bandwidth modifier.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-AS:CAPS"></a><h3>GST_SDP_BWTYPE_AS</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_AS               "AS"
+</pre>
+<p>
+The Application-Specific Maximum bandwidth modifier.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-EXT-PREFIX:CAPS"></a><h3>GST_SDP_BWTYPE_EXT_PREFIX</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_EXT_PREFIX       "X-"
+</pre>
+<p>
+The extension prefix bandwidth modifier.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-RR:CAPS"></a><h3>GST_SDP_BWTYPE_RR</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_RR               "RR"
+</pre>
+<p>
+RTCP bandwidth allocated to data receivers (RFC 3556).
+</p>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-RS:CAPS"></a><h3>GST_SDP_BWTYPE_RS</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_RS               "RS"
+</pre>
+<p>
+RTCP bandwidth allocated to active data senders (RFC 3556).
+</p>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-SDP-BWTYPE-TIAS:CAPS"></a><h3>GST_SDP_BWTYPE_TIAS</h3>
+<pre class="programlisting">#define GST_SDP_BWTYPE_TIAS             "TIAS"
+</pre>
+<p>
+Transport Independent Application Specific Maximum bandwidth (RFC 3890).
+</p>
+<p class="since">Since 0.10.30</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPBandwidth"></a><h3>GstSDPBandwidth</h3>
+<pre class="programlisting">typedef struct {
+  gchar *bwtype;
+  guint  bandwidth;
+} GstSDPBandwidth;
+</pre>
+<p>
+The contents of the SDP "b=" field which specifies the proposed bandwidth to
+be used by the session or media.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPBandwidth.bwtype"></a>bwtype</code></em>;</span></p></td>
+<td>the bandwidth modifier type</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstSDPBandwidth.bandwidth"></a>bandwidth</code></em>;</span></p></td>
+<td>the bandwidth in kilobits per second</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPTime"></a><h3>GstSDPTime</h3>
+<pre class="programlisting">typedef struct {
+  gchar  *start;
+  gchar  *stop;
+  GArray *repeat;
+} GstSDPTime;
+</pre>
+<p>
+The contents of the SDP "t=" field which specify the start and stop times for
+a conference session.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPTime.start"></a>start</code></em>;</span></p></td>
+<td>start time for the conference. The value is the decimal
+representation of Network Time Protocol (NTP) time values in seconds</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPTime.stop"></a>stop</code></em>;</span></p></td>
+<td>stop time for the conference. The value is the decimal
+representation of Network Time Protocol (NTP) time values in seconds</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPTime.repeat"></a>repeat</code></em>;</span></p></td>
+<td>repeat times for a session</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPZone"></a><h3>GstSDPZone</h3>
+<pre class="programlisting">typedef struct {
+  gchar *time;
+  gchar *typed_time;
+} GstSDPZone;
+</pre>
+<p>
+The contents of the SDP "z=" field which allows the sender to
+specify a list of time zone adjustments and offsets from the base
+time.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPZone.time"></a>time</code></em>;</span></p></td>
+<td>the NTP time that a time zone adjustment happens</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPZone.typed-time"></a>typed_time</code></em>;</span></p></td>
+<td>the offset from the time when the session was first scheduled</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPKey"></a><h3>GstSDPKey</h3>
+<pre class="programlisting">typedef struct {
+  gchar *type;
+  gchar *data;
+} GstSDPKey;
+</pre>
+<p>
+The contents of the SDP "k=" field which is used to convey encryption
+keys.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPKey.type"></a>type</code></em>;</span></p></td>
+<td>the encryption type</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPKey.data"></a>data</code></em>;</span></p></td>
+<td>the encryption data</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPAttribute"></a><h3>GstSDPAttribute</h3>
+<pre class="programlisting">typedef struct {
+  gchar *key;
+  gchar *value;
+} GstSDPAttribute;
+</pre>
+<p>
+The contents of the SDP "a=" field which contains a key/value pair.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPAttribute.key"></a>key</code></em>;</span></p></td>
+<td>the attribute key</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPAttribute.value"></a>value</code></em>;</span></p></td>
+<td>the attribute value or NULL when it was a property attribute</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPMedia"></a><h3>GstSDPMedia</h3>
+<pre class="programlisting">typedef struct {
+  gchar            *media;
+  guint             port;
+  guint             num_ports;
+  gchar            *proto;
+  GArray           *fmts;
+  gchar            *information;
+  GArray           *connections;
+  GArray           *bandwidths;
+  GstSDPKey         key;
+  GArray           *attributes;
+} GstSDPMedia;
+</pre>
+<p>
+The contents of the SDP "m=" field with all related fields.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMedia.media"></a>media</code></em>;</span></p></td>
+<td>the media type</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstSDPMedia.port"></a>port</code></em>;</span></p></td>
+<td>the transport port to which the media stream will be sent</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstSDPMedia.num-ports"></a>num_ports</code></em>;</span></p></td>
+<td>the number of ports or -1 if only one port was specified</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMedia.proto"></a>proto</code></em>;</span></p></td>
+<td>the transport protocol</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMedia.fmts"></a>fmts</code></em>;</span></p></td>
+<td>an array of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> formats</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMedia.information"></a>information</code></em>;</span></p></td>
+<td>the media title</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMedia.connections"></a>connections</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> with media connection information</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMedia.bandwidths"></a>bandwidths</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> with media bandwidth information</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a> <em class="structfield"><code><a name="GstSDPMedia.key"></a>key</code></em>;</span></p></td>
+<td>the encryption key</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMedia.attributes"></a>attributes</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> with the additional media attributes</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSDPMessage"></a><h3>GstSDPMessage</h3>
+<pre class="programlisting">typedef struct {
+  gchar            *version;
+  GstSDPOrigin      origin;
+  gchar            *session_name;
+  gchar            *information;
+  gchar            *uri;
+  GArray           *emails;
+  GArray           *phones;
+  GstSDPConnection  connection;
+  GArray           *bandwidths;
+  GArray           *times;
+  GArray           *zones;
+  GstSDPKey         key;
+  GArray           *attributes;
+  GArray           *medias;
+} GstSDPMessage;
+</pre>
+<p>
+The contents of the SDP message.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMessage.version"></a>version</code></em>;</span></p></td>
+<td>the protocol version</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin"><span class="type">GstSDPOrigin</span></a> <em class="structfield"><code><a name="GstSDPMessage.origin"></a>origin</code></em>;</span></p></td>
+<td>owner/creator and session identifier</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMessage.session-name"></a>session_name</code></em>;</span></p></td>
+<td>session name</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMessage.information"></a>information</code></em>;</span></p></td>
+<td>session information</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstSDPMessage.uri"></a>uri</code></em>;</span></p></td>
+<td>URI of description</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.emails"></a>emails</code></em>;</span></p></td>
+<td>array of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> with email addresses</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.phones"></a>phones</code></em>;</span></p></td>
+<td>array of <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> with phone numbers</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> <em class="structfield"><code><a name="GstSDPMessage.connection"></a>connection</code></em>;</span></p></td>
+<td>connection information for the session</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.bandwidths"></a>bandwidths</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> with bandwidth information</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.times"></a>times</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime"><span class="type">GstSDPTime</span></a> with time descriptions</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.zones"></a>zones</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone"><span class="type">GstSDPZone</span></a> with time zone adjustments</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a> <em class="structfield"><code><a name="GstSDPMessage.key"></a>key</code></em>;</span></p></td>
+<td>encryption key</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.attributes"></a>attributes</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> with session attributes</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstSDPMessage.medias"></a>medias</code></em>;</span></p></td>
+<td>array of <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> with media descriptions</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-new"></a><h3>gst_sdp_message_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_new                 (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> **msg</code></em>);</pre>
+<p>
+Allocate a new GstSDPMessage and store the result in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>pointer to new <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-init"></a><h3>gst_sdp_message_init ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_init                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>msg</code></em> so that its contents are as if it was freshly allocated
+with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()"><code class="function">gst_sdp_message_new()</code></a>. This function is mostly used to initialize a message
+allocated on the stack. <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit" title="gst_sdp_message_uninit ()"><code class="function">gst_sdp_message_uninit()</code></a> undoes this operation.
+</p>
+<p>
+When this function is invoked on newly allocated data (with malloc or on the
+stack), its contents should be set to 0 before calling this function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-uninit"></a><h3>gst_sdp_message_uninit ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_uninit              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Free all resources allocated in <em class="parameter"><code>msg</code></em>. <em class="parameter"><code>msg</code></em> should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>msg</code></em> was allocated on the
+stack and initialized with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init" title="gst_sdp_message_init ()"><code class="function">gst_sdp_message_init()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-free"></a><h3>gst_sdp_message_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_free                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Free all resources allocated by <em class="parameter"><code>msg</code></em>. <em class="parameter"><code>msg</code></em> should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>msg</code></em> was dynamically
+allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()"><code class="function">gst_sdp_message_new()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-parse-buffer"></a><h3>gst_sdp_message_parse_buffer ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_parse_buffer        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Parse the contents of <em class="parameter"><code>size</code></em> bytes pointed to by <em class="parameter"><code>data</code></em> and store the result in
+<em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the start of the buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>the size of the buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>the result <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-as-text"></a><h3>gst_sdp_message_as_text ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_sdp_message_as_text             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Convert the contents of <em class="parameter"><code>msg</code></em> to a text string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A dynamically allocated string representing the SDP description.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-parse-uri"></a><h3>gst_sdp_message_parse_uri ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_parse_uri           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Parse the null-terminated <em class="parameter"><code>uri</code></em> and store the result in <em class="parameter"><code>msg</code></em>.
+</p>
+<p>
+The uri should be of the form:
+</p>
+<p>
+ scheme://[address[:ttl=ttl][:noa=noa]]/[sessionname]
+              [<span class="type">type</span>=value *[&amp;type=value]]
+</p>
+<p>
+ where value is url encoded. This looslely resembles
+ http://tools.ietf.org/html/draft-fujikawa-sdp-url-01
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>the start of the uri</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>the result <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a> on success.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-as-uri"></a><h3>gst_sdp_message_as_uri ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_sdp_message_as_uri              (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *scheme</code></em>,
+                                                         <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Creates a uri from <em class="parameter"><code>msg</code></em> with the given <em class="parameter"><code>scheme</code></em>. The uri has the format:
+</p>
+<p>
+ <em class="parameter"><code>scheme</code></em>:///[<span class="type">type</span>=value *[&amp;type=value]]
+</p>
+<p>
+ Where each value is url encoded.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scheme</code></em> :</span></p></td>
+<td>the uri scheme</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a uri for <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-address-is-multicast"></a><h3>gst_sdp_address_is_multicast ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_sdp_address_is_multicast        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addr</code></em>);</pre>
+<p>
+Check if the given <em class="parameter"><code>addr</code></em> is a multicast address.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nettype</code></em> :</span></p></td>
+<td>a network type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addrtype</code></em> :</span></p></td>
+<td>an address type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>an address</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE when <em class="parameter"><code>addr</code></em> is multicast.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-version"></a><h3>gst_sdp_message_get_version ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_version         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the version in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-version"></a><h3>gst_sdp_message_set_version ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_version         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *version</code></em>);</pre>
+<p>
+Set the version in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>version</code></em> :</span></p></td>
+<td>the version</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-origin"></a><h3>gst_sdp_message_get_origin ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin"><span class="returnvalue">GstSDPOrigin</span></a> * gst_sdp_message_get_origin         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the origin of <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin"><span class="type">GstSDPOrigin</span></a>. The result remains valid as long as <em class="parameter"><code>msg</code></em> is valid.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-origin"></a><h3>gst_sdp_message_set_origin ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_origin          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *username</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *sess_id</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *sess_version</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addr</code></em>);</pre>
+<p>
+Configure the SDP origin in <em class="parameter"><code>msg</code></em> with the given parameters.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>username</code></em> :</span></p></td>
+<td>the user name</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sess_id</code></em> :</span></p></td>
+<td>a session id</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sess_version</code></em> :</span></p></td>
+<td>a session version</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nettype</code></em> :</span></p></td>
+<td>a network type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addrtype</code></em> :</span></p></td>
+<td>an address type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr</code></em> :</span></p></td>
+<td>an address</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-session-name"></a><h3>gst_sdp_message_get_session_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_session_name    (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the session name in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-session-name"></a><h3>gst_sdp_message_set_session_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_session_name    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *session_name</code></em>);</pre>
+<p>
+Set the session name in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>session_name</code></em> :</span></p></td>
+<td>the session name</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-information"></a><h3>gst_sdp_message_get_information ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_information     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the information in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-information"></a><h3>gst_sdp_message_set_information ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_information     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *information</code></em>);</pre>
+<p>
+Set the information in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>information</code></em> :</span></p></td>
+<td>the information</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-uri"></a><h3>gst_sdp_message_get_uri ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_uri             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the URI in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-uri"></a><h3>gst_sdp_message_set_uri ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_uri             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>
+Set the URI in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>uri</code></em> :</span></p></td>
+<td>the URI</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-emails-len"></a><h3>gst_sdp_message_emails_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_emails_len          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of emails in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of emails in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-email"></a><h3>gst_sdp_message_get_email ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_email           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the email with number <em class="parameter"><code>idx</code></em> from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>an email index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the email at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-email"></a><h3>gst_sdp_message_add_email ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_email           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *email</code></em>);</pre>
+<p>
+Add <em class="parameter"><code>email</code></em> to the list of emails in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>email</code></em> :</span></p></td>
+<td>an email</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-phones-len"></a><h3>gst_sdp_message_phones_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_phones_len          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of phones in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of phones in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-phone"></a><h3>gst_sdp_message_get_phone ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_phone           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the phone with number <em class="parameter"><code>idx</code></em> from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>a phone index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the phone at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-phone"></a><h3>gst_sdp_message_add_phone ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_phone           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *phone</code></em>);</pre>
+<p>
+Add <em class="parameter"><code>phone</code></em> to the list of phones in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>phone</code></em> :</span></p></td>
+<td>a phone</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-connection"></a><h3>gst_sdp_message_get_connection ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="returnvalue">GstSDPConnection</span></a> * gst_sdp_message_get_connection (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the connection of <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a>. The result remains valid as long as <em class="parameter"><code>msg</code></em> is valid.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-connection"></a><h3>gst_sdp_message_set_connection ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_connection      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> ttl</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> addr_number</code></em>);</pre>
+<p>
+Configure the SDP connection in <em class="parameter"><code>msg</code></em> with the given parameters.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nettype</code></em> :</span></p></td>
+<td>the type of network. "IN" is defined to have the meaning
+"Internet".</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addrtype</code></em> :</span></p></td>
+<td>the type of address.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ttl</code></em> :</span></p></td>
+<td>the time to live of the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr_number</code></em> :</span></p></td>
+<td>the number of layers</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-bandwidths-len"></a><h3>gst_sdp_message_bandwidths_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_bandwidths_len      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of bandwidth information in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of bandwidth information in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-bandwidth"></a><h3>gst_sdp_message_get_bandwidth ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="returnvalue">GstSDPBandwidth</span></a> * gst_sdp_message_get_bandwidth   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the bandwidth at index <em class="parameter"><code>idx</code></em> from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the bandwidth index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-bandwidth"></a><h3>gst_sdp_message_add_bandwidth ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_bandwidth       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *bwtype</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth</code></em>);</pre>
+<p>
+Add the specified bandwidth information to <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bwtype</code></em> :</span></p></td>
+<td>the bandwidth modifier type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bandwidth</code></em> :</span></p></td>
+<td>the bandwidth in kilobits per second</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-times-len"></a><h3>gst_sdp_message_times_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_times_len           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of time information entries in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of time information entries in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-time"></a><h3>gst_sdp_message_get_time ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime"><span class="returnvalue">GstSDPTime</span></a> *  gst_sdp_message_get_time            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get time information with index <em class="parameter"><code>idx</code></em> from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the time index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime"><span class="type">GstSDPTime</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-time"></a><h3>gst_sdp_message_add_time ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_time            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *start</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *stop</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **repeat</code></em>);</pre>
+<p>
+Add time information <em class="parameter"><code>start</code></em> and <em class="parameter"><code>stop</code></em> to <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start</code></em> :</span></p></td>
+<td>the start time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stop</code></em> :</span></p></td>
+<td>the stop time</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>repeat</code></em> :</span></p></td>
+<td>the repeat times</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-zones-len"></a><h3>gst_sdp_message_zones_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_zones_len           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of time zone information entries in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of time zone information entries in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-zone"></a><h3>gst_sdp_message_get_zone ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone"><span class="returnvalue">GstSDPZone</span></a> *  gst_sdp_message_get_zone            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get time zone information with index <em class="parameter"><code>idx</code></em> from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the zone index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone"><span class="type">GstSDPZone</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-zone"></a><h3>gst_sdp_message_add_zone ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_zone            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *adj_time</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *typed_time</code></em>);</pre>
+<p>
+Add time zone information to <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>adj_time</code></em> :</span></p></td>
+<td>the NTP time that a time zone adjustment happens</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>typed_time</code></em> :</span></p></td>
+<td>the offset from the time when the session was first scheduled</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-key"></a><h3>gst_sdp_message_get_key ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="returnvalue">GstSDPKey</span></a> *   gst_sdp_message_get_key             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the encryption information from <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-set-key"></a><h3>gst_sdp_message_set_key ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_set_key             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>);</pre>
+<p>
+Adds the encryption information to <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the encryption type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the encryption data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-attributes-len"></a><h3>gst_sdp_message_attributes_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_attributes_len      (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of attributes in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of attributes in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-attribute"></a><h3>gst_sdp_message_get_attribute ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="returnvalue">GstSDPAttribute</span></a> * gst_sdp_message_get_attribute   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the attribute at position <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-attribute-val"></a><h3>gst_sdp_message_get_attribute_val ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_attribute_val   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
+<p>
+Get the first attribute with key <em class="parameter"><code>key</code></em> in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the key</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the attribute value of the first attribute with <em class="parameter"><code>key</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-attribute-val-n"></a><h3>gst_sdp_message_get_attribute_val_n ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_message_get_attribute_val_n (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);</pre>
+<p>
+Get the <em class="parameter"><code>nth</code></em> attribute with key <em class="parameter"><code>key</code></em> in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the key</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>the index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the attribute value of the <em class="parameter"><code>nth</code></em> attribute with <em class="parameter"><code>key</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-attribute"></a><h3>gst_sdp_message_add_attribute ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_attribute       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Add the attribute with <em class="parameter"><code>key</code></em> and <em class="parameter"><code>value</code></em> to <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>the key</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>the value</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<em class="parameter"><code>GST_SDP_OK</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-medias-len"></a><h3>gst_sdp_message_medias_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_message_medias_len          (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Get the number of media descriptions in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of media descriptions in <em class="parameter"><code>msg</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-get-media"></a><h3>gst_sdp_message_get_media ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="returnvalue">GstSDPMedia</span></a> * gst_sdp_message_get_media           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the media description at index <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>msg</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>the index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-add-media"></a><h3>gst_sdp_message_add_media ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_add_media           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Adds <em class="parameter"><code>media</code></em> to the array of medias in <em class="parameter"><code>msg</code></em>. This function takes ownership of
+the contents of <em class="parameter"><code>media</code></em> so that <em class="parameter"><code>media</code></em> will have to be reinitialized with
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()"><code class="function">gst_sdp_media_init()</code></a> before it can be used again.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> to add</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-dump"></a><h3>gst_sdp_message_dump ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_message_dump                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>
+Dump the parsed contents of <em class="parameter"><code>msg</code></em> to stdout.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>msg</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-new"></a><h3>gst_sdp_media_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_new                   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> **media</code></em>);</pre>
+<p>
+Allocate a new GstSDPMedia and store the result in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>pointer to new <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-init"></a><h3>gst_sdp_media_init ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_init                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Initialize <em class="parameter"><code>media</code></em> so that its contents are as if it was freshly allocated
+with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()"><code class="function">gst_sdp_media_new()</code></a>. This function is mostly used to initialize a media
+allocated on the stack. <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit" title="gst_sdp_media_uninit ()"><code class="function">gst_sdp_media_uninit()</code></a> undoes this operation.
+</p>
+<p>
+When this function is invoked on newly allocated data (with malloc or on the
+stack), its contents should be set to 0 before calling this function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-uninit"></a><h3>gst_sdp_media_uninit ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_uninit                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Free all resources allocated in <em class="parameter"><code>media</code></em>. <em class="parameter"><code>media</code></em> should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>media</code></em> was allocated on the
+stack and initialized with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()"><code class="function">gst_sdp_media_init()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-free"></a><h3>gst_sdp_media_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_free                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Free all resources allocated by <em class="parameter"><code>media</code></em>. <em class="parameter"><code>media</code></em> should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>media</code></em> was dynamically
+allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()"><code class="function">gst_sdp_media_new()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-media"></a><h3>gst_sdp_media_get_media ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_media             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the media description of <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the media description.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-set-media"></a><h3>gst_sdp_media_set_media ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_set_media             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *med</code></em>);</pre>
+<p>
+Set the media description of <em class="parameter"><code>media</code></em> to <em class="parameter"><code>med</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>med</code></em> :</span></p></td>
+<td>the media description</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-port"></a><h3>gst_sdp_media_get_port ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_get_port              (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the port number for <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the port number of <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-num-ports"></a><h3>gst_sdp_media_get_num_ports ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_get_num_ports         (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the number of ports for <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of ports for <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-set-port-info"></a><h3>gst_sdp_media_set_port_info ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_set_port_info         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> num_ports</code></em>);</pre>
+<p>
+Set the port information in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>port</code></em> :</span></p></td>
+<td>the port number</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_ports</code></em> :</span></p></td>
+<td>the number of ports</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-proto"></a><h3>gst_sdp_media_get_proto ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_proto             (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the transport protocol of <em class="parameter"><code>media</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the transport protocol of <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-set-proto"></a><h3>gst_sdp_media_set_proto ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_set_proto             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *proto</code></em>);</pre>
+<p>
+Set the media transport protocol of <em class="parameter"><code>media</code></em> to <em class="parameter"><code>proto</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>proto</code></em> :</span></p></td>
+<td>the media transport protocol</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-formats-len"></a><h3>gst_sdp_media_formats_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_formats_len           (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the number of formats in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of formats in <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-format"></a><h3>gst_sdp_media_get_format ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_format            (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the format information at position <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>an index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the format at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-add-format"></a><h3>gst_sdp_media_add_format ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_add_format            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *format</code></em>);</pre>
+<p>
+Add the format information to <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>the format</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-information"></a><h3>gst_sdp_media_get_information ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_information       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the information of <em class="parameter"><code>media</code></em>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the information of <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-set-information"></a><h3>gst_sdp_media_set_information ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_set_information       (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *information</code></em>);</pre>
+<p>
+Set the media information of <em class="parameter"><code>media</code></em> to <em class="parameter"><code>information</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>information</code></em> :</span></p></td>
+<td>the media information</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-connections-len"></a><h3>gst_sdp_media_connections_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_connections_len       (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the number of connection fields in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of connections in <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-connection"></a><h3>gst_sdp_media_get_connection ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="returnvalue">GstSDPConnection</span></a> * gst_sdp_media_get_connection   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the connection at position <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>an index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-add-connection"></a><h3>gst_sdp_media_add_connection ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_add_connection        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *nettype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *addrtype</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> ttl</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> addr_number</code></em>);</pre>
+<p>
+Add the given connection parameters to <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nettype</code></em> :</span></p></td>
+<td>the type of network. "IN" is defined to have the meaning
+"Internet".</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addrtype</code></em> :</span></p></td>
+<td>the type of address.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
+<td>the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ttl</code></em> :</span></p></td>
+<td>the time to live of the address</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>addr_number</code></em> :</span></p></td>
+<td>the number of layers</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-bandwidths-len"></a><h3>gst_sdp_media_bandwidths_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_bandwidths_len        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the number of bandwidth fields in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of bandwidths in <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-bandwidth"></a><h3>gst_sdp_media_get_bandwidth ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="returnvalue">GstSDPBandwidth</span></a> * gst_sdp_media_get_bandwidth     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the bandwidth at position <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>an index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-add-bandwidth"></a><h3>gst_sdp_media_add_bandwidth ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_add_bandwidth         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *bwtype</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> bandwidth</code></em>);</pre>
+<p>
+Add the bandwidth information with <em class="parameter"><code>bwtype</code></em> and <em class="parameter"><code>bandwidth</code></em> to <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bwtype</code></em> :</span></p></td>
+<td>the bandwidth modifier type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bandwidth</code></em> :</span></p></td>
+<td>the bandwidth in kilobits per second</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-key"></a><h3>gst_sdp_media_get_key ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="returnvalue">GstSDPKey</span></a> *   gst_sdp_media_get_key               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the encryption information from <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-set-key"></a><h3>gst_sdp_media_set_key ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_set_key               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>);</pre>
+<p>
+Adds the encryption information to <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the encryption type</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the encryption data</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-attributes-len"></a><h3>gst_sdp_media_attributes_len ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_sdp_media_attributes_len        (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Get the number of attribute fields in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of attributes in <em class="parameter"><code>media</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-attribute"></a><h3>gst_sdp_media_get_attribute ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="returnvalue">GstSDPAttribute</span></a> * gst_sdp_media_get_attribute     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> idx</code></em>);</pre>
+<p>
+Get the attribute at position <em class="parameter"><code>idx</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>idx</code></em> :</span></p></td>
+<td>an index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> at position <em class="parameter"><code>idx</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-attribute-val"></a><h3>gst_sdp_media_get_attribute_val ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_attribute_val     (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
+<p>
+Get the first attribute value for <em class="parameter"><code>key</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a key</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the first attribute value for <em class="parameter"><code>key</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-attribute-val-n"></a><h3>gst_sdp_media_get_attribute_val_n ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_sdp_media_get_attribute_val_n   (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> nth</code></em>);</pre>
+<p>
+Get the <em class="parameter"><code>nth</code></em> attribute value for <em class="parameter"><code>key</code></em> in <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a key</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nth</code></em> :</span></p></td>
+<td>an index</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <em class="parameter"><code>nth</code></em> attribute value.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-add-attribute"></a><h3>gst_sdp_media_add_attribute ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>        gst_sdp_media_add_attribute         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Add the attribute with <em class="parameter"><code>key</code></em> and <em class="parameter"><code>value</code></em> to <em class="parameter"><code>media</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>a key</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a value</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-as-text"></a><h3>gst_sdp_media_as_text ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_sdp_media_as_text               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>
+Convert the contents of <em class="parameter"><code>media</code></em> to a text string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>media</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A dynamically allocated string representing the media.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html b/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html
new file mode 100644
index 0000000..2c744ef
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gststreamvolume</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstpropertyprobe.html" title="gstpropertyprobe">
+<link rel="next" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstpropertyprobe.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttuner.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gststreamvolume.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gststreamvolume.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gststreamvolume.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gststreamvolume.prerequisites" class="shortcut">Prerequisites</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gststreamvolume.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gststreamvolume"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gststreamvolume.top_of_page"></a>gststreamvolume</span></h2>
+<p>gststreamvolume — Interface for elements that provide a stream volume</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gststreamvolume.synopsis"></a><h2>Synopsis</h2>
+<a name="GstStreamVolume"></a><pre class="synopsis">
+#include &lt;gst/interfaces/streamvolume.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume-struct" title="GstStreamVolume">GstStreamVolume</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat">GstStreamVolumeFormat</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>             <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume" title="gst_stream_volume_get_volume ()">gst_stream_volume_get_volume</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> format</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume" title="gst_stream_volume_set_volume ()">gst_stream_volume_set_volume</a>        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> format</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute" title="gst_stream_volume_get_mute ()">gst_stream_volume_get_mute</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-mute" title="gst_stream_volume_set_mute ()">gst_stream_volume_set_mute</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>             <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume" title="gst_stream_volume_convert_volume ()">gst_stream_volume_convert_volume</a>    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> from</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> to</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstStreamVolume
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.prerequisites"></a><h2>Prerequisites</h2>
+<p>
+GstStreamVolume requires
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--mute" title='The "mute" property'>mute</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--volume" title='The "volume" property'>volume</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id504808"></a><p>
+This interface is implemented by elements that provide a stream volume. Examples for
+such elements are <span class="type">volume</span> and <span class="type">playbin2</span>.
+</p>
+<p>
+Applications can use this interface to get or set the current stream volume. For this
+the "volume" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> property can be used or the helper functions <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume" title="gst_stream_volume_set_volume ()"><code class="function">gst_stream_volume_set_volume()</code></a>
+and <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume" title="gst_stream_volume_get_volume ()"><code class="function">gst_stream_volume_get_volume()</code></a>. This volume is always a linear factor, i.e. 0.0 is muted
+1.0 is 100%. For showing the volume in a GUI it might make sense to convert it to
+a different format by using <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume" title="gst_stream_volume_convert_volume ()"><code class="function">gst_stream_volume_convert_volume()</code></a>. Volume sliders should usually
+use a cubic volume.
+</p>
+<p>
+Separate from the volume the stream can also be muted by the "mute" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> property or
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-mute" title="gst_stream_volume_set_mute ()"><code class="function">gst_stream_volume_set_mute()</code></a> and <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute" title="gst_stream_volume_get_mute ()"><code class="function">gst_stream_volume_get_mute()</code></a>.
+</p>
+<p>
+Elements that provide some kind of stream volume should implement the "volume" and
+"mute" <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> properties and handle setting and getting of them properly.
+The volume property is defined to be a linear volume factor.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstStreamVolume-struct"></a><h3>GstStreamVolume</h3>
+<pre class="programlisting">typedef struct _GstStreamVolume GstStreamVolume;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstStreamVolumeFormat"></a><h3>enum GstStreamVolumeFormat</h3>
+<pre class="programlisting">typedef enum {
+  GST_STREAM_VOLUME_FORMAT_LINEAR = 0,
+  GST_STREAM_VOLUME_FORMAT_CUBIC,
+  GST_STREAM_VOLUME_FORMAT_DB
+} GstStreamVolumeFormat;
+</pre>
+<p>
+Different representations of a stream volume. <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume" title="gst_stream_volume_convert_volume ()"><code class="function">gst_stream_volume_convert_volume()</code></a>
+allows to convert between the different representations.
+</p>
+<p>
+Formulas to convert from a linear to a cubic or dB volume are
+cbrt(val) and 20 * log10 (val).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS"></a><span class="term"><code class="literal">GST_STREAM_VOLUME_FORMAT_LINEAR</code></span></p></td>
+<td>Linear scale factor, 1.0 = 100%
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS"></a><span class="term"><code class="literal">GST_STREAM_VOLUME_FORMAT_CUBIC</code></span></p></td>
+<td>Cubic volume scale
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-STREAM-VOLUME-FORMAT-DB:CAPS"></a><span class="term"><code class="literal">GST_STREAM_VOLUME_FORMAT_DB</code></span></p></td>
+<td>Logarithmic volume scale (dB, amplitude not power)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-volume-get-volume"></a><h3>gst_stream_volume_get_volume ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>             gst_stream_volume_get_volume        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> format</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volume</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> that should be used</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> which should be returned</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current stream volume as linear factor</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-volume-set-volume"></a><h3>gst_stream_volume_set_volume ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_stream_volume_set_volume        (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> format</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volume</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> that should be used</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> of <em class="parameter"><code>val</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>Linear volume factor that should be set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-volume-get-mute"></a><h3>gst_stream_volume_get_mute ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_stream_volume_get_mute          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volume</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> that should be used</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the stream is muted</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-volume-set-mute"></a><h3>gst_stream_volume_set_mute ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_stream_volume_set_mute          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> *volume</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> mute</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>volume</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume"><span class="type">GstStreamVolume</span></a> that should be used</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mute</code></em> :</span></p></td>
+<td>Mute state that should be set</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-stream-volume-convert-volume"></a><h3>gst_stream_volume_convert_volume ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>             gst_stream_volume_convert_volume    (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> from</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> to</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> val</code></em>);</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>from</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> to convert from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" title="enum GstStreamVolumeFormat"><span class="type">GstStreamVolumeFormat</span></a> to convert to</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>val</code></em> :</span></p></td>
+<td>Volume in <em class="parameter"><code>from</code></em> format that should be converted</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the converted volume</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.25</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gststreamvolume.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstStreamVolume--mute"></a><h3>The <code class="literal">"mute"</code> property</h3>
+<pre class="programlisting">  "mute"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Mute the audio channel without changing the volume.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstStreamVolume--volume"></a><h3>The <code class="literal">"volume"</code> property</h3>
+<pre class="programlisting">  "volume"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Linear volume factor, 1.0=100%.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 1</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttag.html b/docs/libs/html/gst-plugins-base-libs-gsttag.html
new file mode 100644
index 0000000..882113f
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttag.html
@@ -0,0 +1,852 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttag</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="next" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-tag.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagvorbis.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttag.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttag.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttag"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttag.top_of_page"></a>gsttag</span></h2>
+<p>gsttag — additional tag definitions for plugins and applications</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttag.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS" title="GST_TAG_MUSICBRAINZ_TRACKID">GST_TAG_MUSICBRAINZ_TRACKID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS" title="GST_TAG_MUSICBRAINZ_ARTISTID">GST_TAG_MUSICBRAINZ_ARTISTID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMID:CAPS" title="GST_TAG_MUSICBRAINZ_ALBUMID">GST_TAG_MUSICBRAINZ_ALBUMID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS" title="GST_TAG_MUSICBRAINZ_ALBUMARTISTID">GST_TAG_MUSICBRAINZ_ALBUMARTISTID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRMID:CAPS" title="GST_TAG_MUSICBRAINZ_TRMID">GST_TAG_MUSICBRAINZ_TRMID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-SORTNAME:CAPS" title="GST_TAG_MUSICBRAINZ_SORTNAME">GST_TAG_MUSICBRAINZ_SORTNAME</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID:CAPS" title="GST_TAG_CDDA_CDDB_DISCID">GST_TAG_CDDA_CDDB_DISCID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS" title="GST_TAG_CDDA_CDDB_DISCID_FULL">GST_TAG_CDDA_CDDB_DISCID_FULL</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID">GST_TAG_CDDA_MUSICBRAINZ_DISCID</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS" title="GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL">GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-TRACK-TAGS:CAPS" title="GST_TAG_CDDA_TRACK_TAGS">GST_TAG_CDDA_TRACK_TAGS</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-CLIP:CAPS" title="GST_TAG_CMML_CLIP">GST_TAG_CMML_CLIP</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-HEAD:CAPS" title="GST_TAG_CMML_HEAD">GST_TAG_CMML_HEAD</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-STREAM:CAPS" title="GST_TAG_CMML_STREAM">GST_TAG_CMML_STREAM</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS" title="GST_TAG_CAPTURING_SHUTTER_SPEED">GST_TAG_CAPTURING_SHUTTER_SPEED</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-RATIO:CAPS" title="GST_TAG_CAPTURING_FOCAL_RATIO">GST_TAG_CAPTURING_FOCAL_RATIO</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS" title="GST_TAG_CAPTURING_FOCAL_LENGTH">GST_TAG_CAPTURING_FOCAL_LENGTH</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS" title="GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO">GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-ISO-SPEED:CAPS" title="GST_TAG_CAPTURING_ISO_SPEED">GST_TAG_CAPTURING_ISO_SPEED</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_PROGRAM">GST_TAG_CAPTURING_EXPOSURE_PROGRAM</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_MODE">GST_TAG_CAPTURING_EXPOSURE_MODE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS" title="GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE">GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS" title="GST_TAG_CAPTURING_GAIN_ADJUSTMENT">GST_TAG_CAPTURING_GAIN_ADJUSTMENT</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-WHITE-BALANCE:CAPS" title="GST_TAG_CAPTURING_WHITE_BALANCE">GST_TAG_CAPTURING_WHITE_BALANCE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-CONTRAST:CAPS" title="GST_TAG_CAPTURING_CONTRAST">GST_TAG_CAPTURING_CONTRAST</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SATURATION:CAPS" title="GST_TAG_CAPTURING_SATURATION">GST_TAG_CAPTURING_SATURATION</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHARPNESS:CAPS" title="GST_TAG_CAPTURING_SHARPNESS">GST_TAG_CAPTURING_SHARPNESS</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-FIRED:CAPS" title="GST_TAG_CAPTURING_FLASH_FIRED">GST_TAG_CAPTURING_FLASH_FIRED</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-MODE:CAPS" title="GST_TAG_CAPTURING_FLASH_MODE">GST_TAG_CAPTURING_FLASH_MODE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-METERING-MODE:CAPS" title="GST_TAG_CAPTURING_METERING_MODE">GST_TAG_CAPTURING_METERING_MODE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SOURCE:CAPS" title="GST_TAG_CAPTURING_SOURCE">GST_TAG_CAPTURING_SOURCE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS" title="GST_TAG_CAPTURING_EXPOSURE_COMPENSATION">GST_TAG_CAPTURING_EXPOSURE_COMPENSATION</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" title="GST_TAG_IMAGE_HORIZONTAL_PPI">GST_TAG_IMAGE_HORIZONTAL_PPI</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS" title="GST_TAG_IMAGE_VERTICAL_PPI">GST_TAG_IMAGE_VERTICAL_PPI</a>
+#define             <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS" title="GST_TAG_ID3V2_HEADER_SIZE">GST_TAG_ID3V2_HEADER_SIZE</a>
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags" title="gst_tag_register_musicbrainz_tags ()">gst_tag_register_musicbrainz_tags</a>   (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8" title="gst_tag_freeform_string_to_utf8 ()">gst_tag_freeform_string_to_utf8</a>     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> size</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **env_vars</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment" title="gst_tag_parse_extended_comment ()">gst_tag_parse_extended_comment</a>      (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ext_comment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> fail_if_no_key</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer" title="gst_tag_image_data_to_image_buffer ()">gst_tag_image_data_to_image_buffer</a>  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *image_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> image_data_len</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType"><span class="type">GstTagImageType</span></a> image_type</code></em>);
+enum                <a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType">GstTagImageType</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttag.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id587777"></a><p>
+Contains additional standardized GStreamer tag definitions for plugins
+and applications, and functions to register them with the GStreamer
+tag system.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttag.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-TRACKID:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_TRACKID</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_TRACKID "musicbrainz-trackid"
+</pre>
+<p>
+MusicBrainz track ID
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-ARTISTID:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_ARTISTID</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_ARTISTID "musicbrainz-artistid"
+</pre>
+<p>
+MusicBrainz artist ID
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-ALBUMID:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_ALBUMID</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_ALBUMID "musicbrainz-albumid"
+</pre>
+<p>
+MusicBrainz album ID
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_ALBUMARTISTID</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_ALBUMARTISTID "musicbrainz-albumartistid"
+</pre>
+<p>
+MusicBrainz album artist ID
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-TRMID:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_TRMID</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_TRMID "musicbrainz-trmid"
+</pre>
+<p>
+MusicBrainz track TRM ID
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-MUSICBRAINZ-SORTNAME:CAPS"></a><h3>GST_TAG_MUSICBRAINZ_SORTNAME</h3>
+<pre class="programlisting">#define GST_TAG_MUSICBRAINZ_SORTNAME GST_TAG_ARTIST_SORTNAME
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">GST_TAG_MUSICBRAINZ_SORTNAME</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+MusicBrainz artist sort name
+</p>
+<p>
+Deprecated.  Use GST_TAG_ARTIST_SORTNAME instead.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CDDA-CDDB-DISCID:CAPS"></a><h3>GST_TAG_CDDA_CDDB_DISCID</h3>
+<pre class="programlisting">#define GST_TAG_CDDA_CDDB_DISCID              "discid"
+</pre>
+<p>
+CDDB disc id in its short form (e.g. 'aa063d0f')
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS"></a><h3>GST_TAG_CDDA_CDDB_DISCID_FULL</h3>
+<pre class="programlisting">#define GST_TAG_CDDA_CDDB_DISCID_FULL         "discid-full"
+</pre>
+<p>
+CDDB disc id including all details
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS"></a><h3>GST_TAG_CDDA_MUSICBRAINZ_DISCID</h3>
+<pre class="programlisting">#define GST_TAG_CDDA_MUSICBRAINZ_DISCID       "musicbrainz-discid"
+</pre>
+<p>
+Musicbrainz disc id (e.g. 'ahg7JUcfR3vCYBphSDIogOOWrr0-')
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS"></a><h3>GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL</h3>
+<pre class="programlisting">#define GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL  "musicbrainz-discid-full"
+</pre>
+<p>
+Musicbrainz disc id details
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CDDA-TRACK-TAGS:CAPS"></a><h3>GST_TAG_CDDA_TRACK_TAGS</h3>
+<pre class="programlisting">#define GST_TAG_CDDA_TRACK_TAGS               "track-tags"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CMML-CLIP:CAPS"></a><h3>GST_TAG_CMML_CLIP</h3>
+<pre class="programlisting">#define GST_TAG_CMML_CLIP "cmml-clip"
+</pre>
+<p>
+Annodex CMML clip element tag
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CMML-HEAD:CAPS"></a><h3>GST_TAG_CMML_HEAD</h3>
+<pre class="programlisting">#define GST_TAG_CMML_HEAD "cmml-head"
+</pre>
+<p>
+Annodex CMML head element tag
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CMML-STREAM:CAPS"></a><h3>GST_TAG_CMML_STREAM</h3>
+<pre class="programlisting">#define GST_TAG_CMML_STREAM "cmml-stream"
+</pre>
+<p>
+Annodex CMML stream element tag
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS"></a><h3>GST_TAG_CAPTURING_SHUTTER_SPEED</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_SHUTTER_SPEED        "capturing-shutter-speed"
+</pre>
+<p>
+Shutter speed used when capturing an image, in seconds. (fraction)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-FOCAL-RATIO:CAPS"></a><h3>GST_TAG_CAPTURING_FOCAL_RATIO</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_FOCAL_RATIO          "capturing-focal-ratio"
+</pre>
+<p>
+Focal ratio (f-number) used when capturing an image. (double)
+</p>
+<p>
+The value stored is the denominator of the focal ratio (f-number).
+For example, if this tag value is 2, the focal ratio is f/2.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS"></a><h3>GST_TAG_CAPTURING_FOCAL_LENGTH</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_FOCAL_LENGTH         "capturing-focal-length"
+</pre>
+<p>
+Focal length used when capturing an image, in mm. (double)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS"></a><h3>GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO   "capturing-digital-zoom-ratio"
+</pre>
+<p>
+Digital zoom ratio used when capturing an image. (double)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-ISO-SPEED:CAPS"></a><h3>GST_TAG_CAPTURING_ISO_SPEED</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_ISO_SPEED           "capturing-iso-speed"
+</pre>
+<p>
+ISO speed used when capturing an image. (integer)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS"></a><h3>GST_TAG_CAPTURING_EXPOSURE_PROGRAM</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_EXPOSURE_PROGRAM     "capturing-exposure-program"
+</pre>
+<p>
+Type of exposure control used when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+  "undefined"
+  "manual"
+  "normal" - automatically controlled
+  "aperture-priority" - user selects aperture value
+  "shutter-priority" - user selects shutter speed
+  "creative" - biased towards depth of field
+  "action" - biased towards fast shutter speed
+  "portrait" - closeup, leaving background out of focus
+  "landscape" - landscape photos, background in focus
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS"></a><h3>GST_TAG_CAPTURING_EXPOSURE_MODE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_EXPOSURE_MODE       "capturing-exposure-mode"
+</pre>
+<p>
+Exposure mode used when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+  "auto-exposure"
+  "manual-exposure"
+  "auto-bracket"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS"></a><h3>GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE  "capturing-scene-capture-type"
+</pre>
+<p>
+Scene mode used when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+  "standard"
+  "landscape"
+  "portrait"
+  "night-scene"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS"></a><h3>GST_TAG_CAPTURING_GAIN_ADJUSTMENT</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_GAIN_ADJUSTMENT     "capturing-gain-adjustment"
+</pre>
+<p>
+Gain adjustment applied to an image. (string)
+</p>
+<p>
+The allowed values are:
+  "none"
+  "low-gain-up"
+  "high-gain-up"
+  "low-gain-down"
+  "high-gain-down"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-WHITE-BALANCE:CAPS"></a><h3>GST_TAG_CAPTURING_WHITE_BALANCE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_WHITE_BALANCE       "capturing-white-balance"
+</pre>
+<p>
+White balance mode used when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+  "auto"
+  "manual"
+  "daylight"
+  "cloudy"
+  "tungsten"
+  "fluorescent"
+  "fluorescent h" (newer daylight-calibrated fluorescents)
+  "flash"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-CONTRAST:CAPS"></a><h3>GST_TAG_CAPTURING_CONTRAST</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_CONTRAST            "capturing-contrast"
+</pre>
+<p>
+Direction of contrast processing applied when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+ "normal"
+ "soft"
+ "hard"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-SATURATION:CAPS"></a><h3>GST_TAG_CAPTURING_SATURATION</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_SATURATION          "capturing-saturation"
+</pre>
+<p>
+Direction of saturation processing applied when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+ "normal"
+ "low-saturation"
+ "high-saturation"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-SHARPNESS:CAPS"></a><h3>GST_TAG_CAPTURING_SHARPNESS</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_SHARPNESS          "capturing-sharpness"
+</pre>
+<p>
+Direction of sharpness processing applied when capturing an image. (string)
+</p>
+<p>
+The allowed values are:
+ "normal"
+ "soft"
+ "hard"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-FLASH-FIRED:CAPS"></a><h3>GST_TAG_CAPTURING_FLASH_FIRED</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_FLASH_FIRED         "capturing-flash-fired"
+</pre>
+<p>
+If flash was fired during the capture of an image. (boolean)
+</p>
+<p>
+Note that if this tag isn't present, it should not be assumed that
+the flash did not fire. It should be treated as unknown.
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-FLASH-MODE:CAPS"></a><h3>GST_TAG_CAPTURING_FLASH_MODE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_FLASH_MODE         "capturing-flash-mode"
+</pre>
+<p>
+The flash mode selected during the capture of an image. (string)
+</p>
+<p>
+The allowed values are:
+ "auto"
+ "always"
+ "never"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-METERING-MODE:CAPS"></a><h3>GST_TAG_CAPTURING_METERING_MODE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_METERING_MODE      "capturing-metering-mode"
+</pre>
+<p>
+Defines the way a camera determines the exposure. (string)
+</p>
+<p>
+The allowed values are:
+  "unknown"
+  "average"
+  "center-weighted-average"
+  "spot"
+  "multi-spot"
+  "pattern"
+  "partial"
+  "other"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-SOURCE:CAPS"></a><h3>GST_TAG_CAPTURING_SOURCE</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_SOURCE             "capturing-source"
+</pre>
+<p>
+Indicates the source of capture. The device/medium used to do the
+capture. (string)
+</p>
+<p>
+Allowed values are:
+  "dsc" (= digital still camera)
+  "transparent-scanner"
+  "reflex-scanner"
+  "other"
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS"></a><h3>GST_TAG_CAPTURING_EXPOSURE_COMPENSATION</h3>
+<pre class="programlisting">#define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation"
+</pre>
+<p>
+Exposure compensation using when capturing an image in EV. (double)
+</p>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS"></a><h3>GST_TAG_IMAGE_HORIZONTAL_PPI</h3>
+<pre class="programlisting">#define GST_TAG_IMAGE_HORIZONTAL_PPI         "image-horizontal-ppi"
+</pre>
+<p>
+Media (image/video) intended horizontal pixel density in ppi. (double)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-IMAGE-VERTICAL-PPI:CAPS"></a><h3>GST_TAG_IMAGE_VERTICAL_PPI</h3>
+<pre class="programlisting">#define GST_TAG_IMAGE_VERTICAL_PPI           "image-vertical-ppi"
+</pre>
+<p>
+Media (image/video) intended vertical pixel density in ppi. (double)
+</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TAG-ID3V2-HEADER-SIZE:CAPS"></a><h3>GST_TAG_ID3V2_HEADER_SIZE</h3>
+<pre class="programlisting">#define GST_TAG_ID3V2_HEADER_SIZE            10
+</pre>
+<p>
+ID3V2 header size considered minimum input for some functions such as
+<a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-from-id3v2-tag" title="gst_tag_list_from_id3v2_tag ()"><code class="function">gst_tag_list_from_id3v2_tag()</code></a> and <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-get-id3v2-tag-size" title="gst_tag_get_id3v2_tag_size ()"><code class="function">gst_tag_get_id3v2_tag_size()</code></a> for example.
+</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-register-musicbrainz-tags"></a><h3>gst_tag_register_musicbrainz_tags ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tag_register_musicbrainz_tags   (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Registers additional musicbrainz-specific tags with the GStreamer tag
+system. Plugins and applications that use these tags should call this
+function before using them. Can be called multiple times.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-freeform-string-to-utf8"></a><h3>gst_tag_freeform_string_to_utf8 ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *             gst_tag_freeform_string_to_utf8     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> size</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **env_vars</code></em>);</pre>
+<p>
+Convenience function to read a string with unknown character encoding. If
+the string is already in UTF-8 encoding, it will be returned right away.
+If not it tries to detect byte-order-mark for UTF-16/32 cases and use that.
+Otherwise, the environment will be searched for a number of environment
+variables (whose names are specified in the NULL-terminated string array
+<em class="parameter"><code>env_vars</code></em>) containing a list of character encodings to try/use. If none
+are specified, the current locale will be tried. If that also doesn't work,
+WINDOWS-1252/ISO-8859-1 is assumed (which will almost always succeed).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>string data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td>length of string data, or -1 if the string is NUL-terminated</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>env_vars</code></em> :</span></p></td>
+<td>a NULL-terminated string array of environment variable names,
+or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated string in UTF-8 encoding, or NULL</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.13</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-parse-extended-comment"></a><h3>gst_tag_parse_extended_comment ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_tag_parse_extended_comment      (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *ext_comment</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **key</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **lang</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> fail_if_no_key</code></em>);</pre>
+<p>
+Convenience function to parse a GST_TAG_EXTENDED_COMMENT string and
+separate it into its components.
+</p>
+<p>
+If successful, <em class="parameter"><code>key</code></em>, <em class="parameter"><code>lang</code></em> and/or <em class="parameter"><code>value</code></em> will be set to newly allocated
+strings that you need to free with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when done. <em class="parameter"><code>key</code></em> and <em class="parameter"><code>lang</code></em>
+may also be set to NULL by this function if there is no key or no language
+code in the extended comment string.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ext_comment</code></em> :</span></p></td>
+<td>an extended comment string, see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-EXTENDED-COMMENT:CAPS"><span class="type">GST_TAG_EXTENDED_COMMENT</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td>return location for the comment description key, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lang</code></em> :</span></p></td>
+<td>return location for the comment ISO-639 language code, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>return location for the actual comment string, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fail_if_no_key</code></em> :</span></p></td>
+<td>whether to fail if strings are not in key=value form</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>TRUE if the string could be parsed, otherwise FALSE</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.10</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-image-data-to-image-buffer"></a><h3>gst_tag_image_data_to_image_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_image_data_to_image_buffer  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *image_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> image_data_len</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType"><span class="type">GstTagImageType</span></a> image_type</code></em>);</pre>
+<p>
+Helper function for tag-reading plugins to create a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> suitable to
+add to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> as an image tag (such as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-IMAGE:CAPS"><span class="type">GST_TAG_IMAGE</span></a> or
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-PREVIEW-IMAGE:CAPS"><span class="type">GST_TAG_PREVIEW_IMAGE</span></a>) from the encoded image data and an (optional) image
+type.
+</p>
+<p>
+Background: cover art and other images in tags are usually stored as a
+blob of binary image data, often accompanied by a MIME type or some other
+content type string (e.g. 'png', 'jpeg', 'jpg'). Sometimes there is also an
+'image type' to indicate what kind of image this is (e.g. front cover,
+back cover, artist, etc.). The image data may also be an URI to the image
+rather than the image itself.
+</p>
+<p>
+In GStreamer, image tags are <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>s containing the raw image
+data, with the buffer caps describing the content type of the image
+(e.g. image/jpeg, image/png, text/uri-list). The buffer caps may contain
+an additional 'image-type' field of <span class="type">GST_TYPE_TAG_IMAGE_TYPE</span> to describe
+the type of image (front cover, back cover etc.). <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-PREVIEW-IMAGE:CAPS"><span class="type">GST_TAG_PREVIEW_IMAGE</span></a>
+tags should not carry an image type, their type is already indicated via
+the special tag name.
+</p>
+<p>
+This function will do various checks and typefind the encoded image
+data (we can't trust the declared mime type).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>image_data</code></em> :</span></p></td>
+<td>the (encoded) image</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>image_data_len</code></em> :</span></p></td>
+<td>the length of the encoded image data at <em class="parameter"><code>image_data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>image_type</code></em> :</span></p></td>
+<td>type of the image, or <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS"><span class="type">GST_TAG_IMAGE_TYPE_UNDEFINED</span></a>. Pass
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS"><span class="type">GST_TAG_IMAGE_TYPE_NONE</span></a> if no image type should be set at all (e.g.
+for preview images)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a newly-allocated image buffer for use in tag lists, or NULL</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTagImageType"></a><h3>enum GstTagImageType</h3>
+<pre class="programlisting">typedef enum {
+  GST_TAG_IMAGE_TYPE_NONE = -1,
+  GST_TAG_IMAGE_TYPE_UNDEFINED = 0,
+  GST_TAG_IMAGE_TYPE_FRONT_COVER,
+  GST_TAG_IMAGE_TYPE_BACK_COVER,
+  GST_TAG_IMAGE_TYPE_LEAFLET_PAGE,
+  GST_TAG_IMAGE_TYPE_MEDIUM,
+  GST_TAG_IMAGE_TYPE_LEAD_ARTIST,
+  GST_TAG_IMAGE_TYPE_ARTIST,
+  GST_TAG_IMAGE_TYPE_CONDUCTOR,
+  GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA,
+  GST_TAG_IMAGE_TYPE_COMPOSER,
+  GST_TAG_IMAGE_TYPE_LYRICIST,
+  GST_TAG_IMAGE_TYPE_RECORDING_LOCATION,
+  GST_TAG_IMAGE_TYPE_DURING_RECORDING,
+  GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE,
+  GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE,
+  GST_TAG_IMAGE_TYPE_FISH,
+  GST_TAG_IMAGE_TYPE_ILLUSTRATION,
+  GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO,
+  GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO
+} GstTagImageType;
+</pre>
+<p>
+Type of image contained in an image tag (specified as field in
+the image buffer's caps structure)
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-NONE:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_NONE</code></span></p></td>
+<td>No image type. Can be used to
+     tell functions such as <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer" title="gst_tag_image_data_to_image_buffer ()"><code class="function">gst_tag_image_data_to_image_buffer()</code></a> that no
+     image type should be set. (Since: 0.10.20)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_UNDEFINED</code></span></p></td>
+<td>Undefined/other image type
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_FRONT_COVER</code></span></p></td>
+<td>Cover (front)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_BACK_COVER</code></span></p></td>
+<td>Cover (back)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_LEAFLET_PAGE</code></span></p></td>
+<td>Leaflet page
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-MEDIUM:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_MEDIUM</code></span></p></td>
+<td>Medium (e.g. label side of CD)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_LEAD_ARTIST</code></span></p></td>
+<td>Lead artist/lead performer/soloist
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-ARTIST:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_ARTIST</code></span></p></td>
+<td>Artist/performer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_CONDUCTOR</code></span></p></td>
+<td>Conductor
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA</code></span></p></td>
+<td>Band/orchestra
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-COMPOSER:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_COMPOSER</code></span></p></td>
+<td>Composer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-LYRICIST:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_LYRICIST</code></span></p></td>
+<td>Lyricist/text writer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_RECORDING_LOCATION</code></span></p></td>
+<td>Recording location
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_DURING_RECORDING</code></span></p></td>
+<td>During recording
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE</code></span></p></td>
+<td>During performance
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE</code></span></p></td>
+<td>Movie/video screen capture
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-FISH:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_FISH</code></span></p></td>
+<td>A fish as funny as the ID3v2 spec
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_ILLUSTRATION</code></span></p></td>
+<td>Illustration
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO</code></span></p></td>
+<td>Band/artist logotype
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS"></a><span class="term"><code class="literal">GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO</code></span></p></td>
+<td>Publisher/studio logotype
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.9</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttag.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html b/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html
new file mode 100644
index 0000000..95d183c
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagdemux</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">
+<link rel="next" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagxmpwriter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagmux.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagdemux.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagdemux.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagdemux"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagdemux.top_of_page"></a>gsttagdemux</span></h2>
+<p>gsttagdemux — Base class for demuxing tags that are in chunks
+                    directly at the beginning or at the end of a file</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagdemux.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/gsttagdemux.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemux" title="struct GstTagDemux">GstTagDemux</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass" title="struct GstTagDemuxClass">GstTagDemuxClass</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult" title="enum GstTagDemuxResult">GstTagDemuxResult</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagdemux.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id453782"></a><h3>Deriving from GstTagDemux</h3>
+<p>
+Provides a base class for demuxing tags at the beginning or end of a
+stream and handles things like typefinding, querying, seeking, and
+different modes of operation (chain-based, pull_range-based, and providing
+downstream elements with random access if upstream supports that). The tag
+is stripped from the output, and all offsets are adjusted for the tag
+sizes, so that to the downstream element the stream will appear as if
+there was no tag at all. Also, once the tag has been parsed, GstTagDemux
+will try to determine the media type of the resulting stream and add a
+source pad with the appropriate caps in order to facilitate auto-plugging.
+</p>
+<p>
+Subclasses have to do four things:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+ In their base init function, they must add a pad template for the sink
+ pad to the element class, describing the media type they can parse in
+ the caps of the pad template.
+ </p></li>
+<li class="listitem"><p>
+ In their class init function, they must override
+ GST_TAG_DEMUX_CLASS(demux_klass)-&gt;identify_tag with their own identify
+ function.
+ </p></li>
+<li class="listitem"><p>
+ In their class init function, they must override
+ GST_TAG_DEMUX_CLASS(demux_klass)-&gt;parse_tag with their own parse
+ function.
+ </p></li>
+<li class="listitem"><p>
+ In their class init function, they must also set
+ GST_TAG_DEMUX_CLASS(demux_klass)-&gt;min_start_size and/or 
+ GST_TAG_DEMUX_CLASS(demux_klass)-&gt;min_end_size to the minimum size required
+ for the identify function to decide whether the stream has a supported tag
+ or not. A class parsing ID3v1 tags, for example, would set min_end_size to
+ 128 bytes.
+ </p></li>
+</ul></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagdemux.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTagDemux"></a><h3>struct GstTagDemux</h3>
+<pre class="programlisting">struct GstTagDemux {
+  GstElement element;
+};
+</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemux" title="struct GstTagDemux"><span class="type">GstTagDemux</span></a> structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstTagDemux.element"></a>element</code></em>;</span></p></td>
+<td>parent element</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTagDemuxClass"></a><h3>struct GstTagDemuxClass</h3>
+<pre class="programlisting">struct GstTagDemuxClass {
+  GstElementClass parent_class;
+
+  /* minimum size required to identify a tag at the start and determine
+   * its total size */
+  guint                  min_start_size;
+
+  /* minimum size required to identify a tag at the end and determine
+   * its total size */
+  guint                  min_end_size;
+
+  /* vtable */
+
+  /* identify tag and determine the size required to parse the tag */
+  gboolean               (*identify_tag)  (GstTagDemux * demux,
+                                           GstBuffer   * buffer,
+                                           gboolean      start_tag,
+                                           guint       * tag_size);
+
+  /* parse the tag once it is identified and its size is known */
+  GstTagDemuxResult      (*parse_tag)     (GstTagDemux * demux,
+                                           GstBuffer   * buffer,
+                                           gboolean      start_tag,
+                                           guint       * tag_size,
+                                           GstTagList ** tags);
+
+  /* merge start and end tags (optional) */
+  GstTagList *           (*merge_tags)    (GstTagDemux      * demux,
+                                           const GstTagList * start_tags,
+                                           const GstTagList * end_tags);
+};
+</pre>
+<p>
+The <a class="link" href="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass" title="struct GstTagDemuxClass"><span class="type">GstTagDemuxClass</span></a> structure.  See documentation at beginning of section
+for details about what subclasses need to override and do.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstTagDemuxClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstTagDemuxClass.min-start-size"></a>min_start_size</code></em>;</span></p></td>
+<td>minimum size required to identify a tag at the start and
+determine its total size. Set to 0 if not interested in start tags.
+Subclasses should set this in their class_init function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstTagDemuxClass.min-end-size"></a>min_end_size</code></em>;</span></p></td>
+<td>minimum size required to identify a tag at the end and
+determine its total size. Set to 0 if not interested in end tags.
+Subclasses should set this in their class_init function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTagDemuxClass.identify-tag"></a>identify_tag</code></em> ()</span></p></td>
+<td>identify tag and determine the size required to parse the
+tag. Buffer may be larger than the specified minimum size.
+Subclassed MUST override this vfunc in their class_init function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTagDemuxClass.parse-tag"></a>parse_tag</code></em> ()</span></p></td>
+<td>parse the tag. Buffer will be exactly of the size determined by
+the identify_tag vfunc before. The parse_tag vfunc may change the size
+stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a
+larger or smaller buffer. It is also permitted to adjust the tag_size to a
+smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go.
+Subclassed MUST override the parse_tag vfunc in their class_init function.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTagDemuxClass.merge-tags"></a>merge_tags</code></em> ()</span></p></td>
+<td>merge start and end tags. Subclasses may want to override this
+vfunc to allow prioritising of start or end tag according to user
+preference.  Note that both start_tags and end_tags may be NULL. By default
+start tags are prefered over end tags.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTagDemuxResult"></a><h3>enum GstTagDemuxResult</h3>
+<pre class="programlisting">typedef enum {
+  GST_TAG_DEMUX_RESULT_BROKEN_TAG,
+  GST_TAG_DEMUX_RESULT_AGAIN,
+  GST_TAG_DEMUX_RESULT_OK
+} GstTagDemuxResult;
+</pre>
+<p>
+Result values from the parse_tag virtual function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS"></a><span class="term"><code class="literal">GST_TAG_DEMUX_RESULT_BROKEN_TAG</code></span></p></td>
+<td>cannot parse tag, just skip it
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-DEMUX-RESULT-AGAIN:CAPS"></a><span class="term"><code class="literal">GST_TAG_DEMUX_RESULT_AGAIN</code></span></p></td>
+<td>call again with less or more data
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-DEMUX-RESULT-OK:CAPS"></a><span class="term"><code class="literal">GST_TAG_DEMUX_RESULT_OK</code></span></p></td>
+<td>parsed tag successfully
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.15</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagdemux.see-also"></a><h2>See Also</h2>
+GstApeDemux, GstID3Demux
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagexif.html b/docs/libs/html/gst-plugins-base-libs-gsttagexif.html
new file mode 100644
index 0000000..b2d6b90
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagexif.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagexif</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">
+<link rel="next" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagid3.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagxmp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagexif.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagexif.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagexif"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagexif.top_of_page"></a>gsttagexif</span></h2>
+<p>gsttagexif — tag mappings and support functions for plugins
+                    dealing with exif tags</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagexif.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer" title="gst_tag_list_to_exif_buffer ()">gst_tag_list_to_exif_buffer</a>         (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> byte_order</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> base_offset</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer-with-tiff-header" title="gst_tag_list_to_exif_buffer_with_tiff_header ()">gst_tag_list_to_exif_buffer_with_tiff_header</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer" title="gst_tag_list_from_exif_buffer ()">gst_tag_list_from_exif_buffer</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> byte_order</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> base_offset</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer-with-tiff-header" title="gst_tag_list_from_exif_buffer_with_tiff_header ()">gst_tag_list_from_exif_buffer_with_tiff_header</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagexif.description"></a><h2>Description</h2>
+<p>
+Contains utility function to parse <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>s from exif
+buffers and to create exif buffers from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>s
+</p>
+<p>
+Note that next IFD fields on the created exif buffers are set to 0.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagexif.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-list-to-exif-buffer"></a><h3>gst_tag_list_to_exif_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_list_to_exif_buffer         (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> byte_order</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> base_offset</code></em>);</pre>
+<p>
+Formats the tags in taglist on exif format. The resulting buffer contains
+the tags IFD and is followed by the data pointed by the tag entries.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>taglist</code></em> :</span></p></td>
+<td>The taglist</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>byte_order</code></em> :</span></p></td>
+<td>byte order used in writing (G_LITTLE_ENDIAN or G_BIG_ENDIAN)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_offset</code></em> :</span></p></td>
+<td>Offset from the tiff header first byte</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A GstBuffer containing the tag entries followed by the tag data</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.30</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-to-exif-buffer-with-tiff-header"></a><h3>gst_tag_list_to_exif_buffer_with_tiff_header ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_list_to_exif_buffer_with_tiff_header
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>);</pre>
+<p>
+Formats the tags in taglist into exif structure, a tiff header
+is put in the beginning of the buffer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>taglist</code></em> :</span></p></td>
+<td>The taglist</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A GstBuffer containing the data</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.30</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-from-exif-buffer"></a><h3>gst_tag_list_from_exif_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_from_exif_buffer       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> byte_order</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> base_offset</code></em>);</pre>
+<p>
+Parses the IFD and IFD tags data contained in the buffer and puts it
+on a taglist. The base_offset is used to subtract from the offset in
+the tag entries and be able to get the offset relative to the buffer
+start
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>The exif buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>byte_order</code></em> :</span></p></td>
+<td>byte order of the data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_offset</code></em> :</span></p></td>
+<td>Offset from the tiff header to this buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The parsed taglist</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.30</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-from-exif-buffer-with-tiff-header"></a><h3>gst_tag_list_from_exif_buffer_with_tiff_header ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_from_exif_buffer_with_tiff_header
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Parses the exif tags starting with a tiff header structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>The exif buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The taglist</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.30</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagexif.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagid3.html b/docs/libs/html/gst-plugins-base-libs-gsttagid3.html
new file mode 100644
index 0000000..1032c72
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagid3.html
@@ -0,0 +1,301 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagid3</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">
+<link rel="next" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagvorbis.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagexif.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagid3.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagid3.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagid3"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagid3.top_of_page"></a>gsttagid3</span></h2>
+<p>gsttagid3 — tag mappings and support functions for plugins
+                    dealing with ID3v1 and ID3v2 tags</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagid3.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-count" title="gst_tag_id3_genre_count ()">gst_tag_id3_genre_count</a>             (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-get" title="gst_tag_id3_genre_get ()">gst_tag_id3_genre_get</a>               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-new-from-id3v1" title="gst_tag_list_new_from_id3v1 ()">gst_tag_list_new_from_id3v1</a>         (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-tag" title="gst_tag_from_id3_tag ()">gst_tag_from_id3_tag</a>                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id3_tag</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-user-tag" title="gst_tag_from_id3_user_tag ()">gst_tag_from_id3_user_tag</a>           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id3_user_tag</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-to-id3-tag" title="gst_tag_to_id3_tag ()">gst_tag_to_id3_tag</a>                  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *gst_tag</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-add-id3-image" title="gst_tag_list_add_id3_image ()">gst_tag_list_add_id3_image</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *tag_list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *image_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> image_data_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id3_picture_type</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-get-id3v2-tag-size" title="gst_tag_get_id3v2_tag_size ()">gst_tag_get_id3v2_tag_size</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-from-id3v2-tag" title="gst_tag_list_from_id3v2_tag ()">gst_tag_list_from_id3v2_tag</a>         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagid3.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id587290"></a><p>
+Contains various utility functions for plugins to parse or create
+ID3 tags and map ID3v2 identifiers to and from GStreamer identifiers.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagid3.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-id3-genre-count"></a><h3>gst_tag_id3_genre_count ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_tag_id3_genre_count             (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Gets the number of ID3v1 genres that can be identified. Winamp genres are 
+included.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the number of ID3v1 genres that can be identified</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-id3-genre-get"></a><h3>gst_tag_id3_genre_get ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_id3_genre_get               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id</code></em>);</pre>
+<p>
+Gets the ID3v1 genre name for a given ID.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td>ID of genre to query</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the genre or NULL if no genre is associated with that ID.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-new-from-id3v1"></a><h3>gst_tag_list_new_from_id3v1 ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_new_from_id3v1         (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *data</code></em>);</pre>
+<p>
+Parses the data containing an ID3v1 tag and returns a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> from the
+parsed data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>128 bytes of data containing the ID3v1 tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new tag list or NULL if the data was not an ID3v1 tag.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-from-id3-tag"></a><h3>gst_tag_from_id3_tag ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_from_id3_tag                (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id3_tag</code></em>);</pre>
+<p>
+Looks up the GStreamer tag for a ID3v2 tag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id3_tag</code></em> :</span></p></td>
+<td>ID3v2 tag to convert to GStreamer tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The corresponding GStreamer tag or NULL if none exists.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-from-id3-user-tag"></a><h3>gst_tag_from_id3_user_tag ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_from_id3_user_tag           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *type</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id3_user_tag</code></em>);</pre>
+<p>
+Looks up the GStreamer tag for an ID3v2 user tag (e.g. description in
+TXXX frame or owner in UFID frame).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>the type of ID3v2 user tag (e.g. "TXXX" or "UDIF")</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id3_user_tag</code></em> :</span></p></td>
+<td>ID3v2 user tag to convert to GStreamer tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The corresponding GStreamer tag or NULL if none exists.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-to-id3-tag"></a><h3>gst_tag_to_id3_tag ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_to_id3_tag                  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *gst_tag</code></em>);</pre>
+<p>
+Looks up the ID3v2 tag for a GStreamer tag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gst_tag</code></em> :</span></p></td>
+<td>GStreamer tag to convert to vorbiscomment tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The corresponding ID3v2 tag or NULL if none exists.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-add-id3-image"></a><h3>gst_tag_list_add_id3_image ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_tag_list_add_id3_image          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *tag_list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *image_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> image_data_len</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id3_picture_type</code></em>);</pre>
+<p>
+Adds an image from an ID3 APIC frame (or similar, such as used in FLAC)
+to the given tag list. Also see <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer" title="gst_tag_image_data_to_image_buffer ()"><code class="function">gst_tag_image_data_to_image_buffer()</code></a> for
+more information on image tags in GStreamer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag_list</code></em> :</span></p></td>
+<td>a tag list</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>image_data</code></em> :</span></p></td>
+<td>the (encoded) image</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>image_data_len</code></em> :</span></p></td>
+<td>the length of the encoded image data at <em class="parameter"><code>image_data</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id3_picture_type</code></em> :</span></p></td>
+<td>picture type as per the ID3 (v2.4.0) specification for
+the APIC frame (0 = unknown/other)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the image was processed, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.20</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-id3v2-tag-size"></a><h3>gst_tag_get_id3v2_tag_size ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gst_tag_get_id3v2_tag_size          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Determines size of an ID3v2 tag on buffer containing at least ID3v2 header,
+i.e. at least <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS" title="GST_TAG_ID3V2_HEADER_SIZE"><span class="type">GST_TAG_ID3V2_HEADER_SIZE</span></a> (10) bytes;
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer holding ID3v2 tag (or at least the start of one)</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Size of tag, or 0 if header is invalid or too small.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-from-id3v2-tag"></a><h3>gst_tag_list_from_id3v2_tag ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_from_id3v2_tag         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Creates a new tag list that contains the information parsed out of a
+ID3 tag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer to convert</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> with all tags that could be extracted from the
+given vorbiscomment buffer or NULL on error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagid3.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html b/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html
new file mode 100644
index 0000000..6544dc8
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttaglanguagecodes</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">
+<link rel="next" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagmux.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttaglicenses.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttaglanguagecodes.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttaglanguagecodes.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttaglanguagecodes"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttaglanguagecodes.top_of_page"></a>gsttaglanguagecodes</span></h2>
+<p>gsttaglanguagecodes — mappings for ISO-639 language codes and names</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttaglanguagecodes.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-codes" title="gst_tag_get_language_codes ()">gst_tag_get_language_codes</a>          (<em class="parameter"><code><span class="type">void</span></code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-name" title="gst_tag_get_language_name ()">gst_tag_get_language_name</a>           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *language_code</code></em>);
+#define             <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code" title="gst_tag_get_language_code()">gst_tag_get_language_code</a>           (lang_code)
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-1" title="gst_tag_get_language_code_iso_639_1 ()">gst_tag_get_language_code_iso_639_1</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2B" title="gst_tag_get_language_code_iso_639_2B ()">gst_tag_get_language_code_iso_639_2B</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2T" title="gst_tag_get_language_code_iso_639_2T ()">gst_tag_get_language_code_iso_639_2T</a>
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglanguagecodes.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id577297"></a><p>
+Provides helper functions to convert between the various ISO-639 language
+codes, and to map language codes to language names.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglanguagecodes.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-get-language-codes"></a><h3>gst_tag_get_language_codes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            gst_tag_get_language_codes          (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Returns a list of known language codes (in form of two-letter ISO-639-1
+codes). This is useful for UIs to build a list of available languages for
+tagging purposes (e.g. to tag an audio track appropriately in a video or
+audio editor).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>NULL-terminated string array with two-letter language codes. Free
+with <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a> when no longer needed.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-language-name"></a><h3>gst_tag_get_language_name ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_language_name           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *language_code</code></em>);</pre>
+<p>
+Returns the name of the language given an ISO-639 language code, such
+as often found in a GST_TAG_LANGUAGE tag. The name will be translated
+according to the current locale (if the library was built against the
+iso-codes package, otherwise the English name will be returned).
+</p>
+<p>
+Language codes are case-sensitive and expected to be lower case.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_code</code></em> :</span></p></td>
+<td>two or three-letter ISO-639 language code</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>language name in UTF-8 format, or NULL if <em class="parameter"><code>language_code</code></em> could
+not be mapped to a language name. The returned string must not be
+modified and does not need to freed; it will stay valid until the
+application is terminated.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-language-code"></a><h3>gst_tag_get_language_code()</h3>
+<pre class="programlisting">#define             gst_tag_get_language_code(lang_code)</pre>
+<p>
+Convenience macro wrapping <a class="link" href="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-1" title="gst_tag_get_language_code_iso_639_1 ()"><code class="function">gst_tag_get_language_code_iso_639_1()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>lang_code</code></em> :</span></p></td>
+<td>ISO-639 language code (e.g. "deu" or "ger" or "de")</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-language-code-iso-639-1"></a><h3>gst_tag_get_language_code_iso_639_1 ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_language_code_iso_639_1 (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);</pre>
+<p>
+Returns two-letter ISO-639-1 language code given a three-letter ISO-639-2
+language code or two-letter ISO-639-1 language code (both are accepted for
+convenience).
+</p>
+<p>
+Language codes are case-sensitive and expected to be lower case.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lang_code</code></em> :</span></p></td>
+<td>ISO-639 language code (e.g. "deu" or "ger" or "de")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>two-letter ISO-639-1 language code string that maps to <em class="parameter"><code>lang_code</code></em>,
+or NULL if no mapping is known. The returned string must not be
+modified or freed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-language-code-iso-639-2B"></a><h3>gst_tag_get_language_code_iso_639_2B ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_language_code_iso_639_2B
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);</pre>
+<p>
+Returns three-letter ISO-639-2 "bibliographic" language code given a
+two-letter ISO-639-1 language code or a three-letter ISO-639-2 language
+code (both are accepted for convenience).
+</p>
+<p>
+The "bibliographic" code is derived from the English name of the language
+(e.g. "ger" for German instead of "de" or "deu"). In most scenarios, the
+"terminological" codes are prefered.
+</p>
+<p>
+Language codes are case-sensitive and expected to be lower case.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lang_code</code></em> :</span></p></td>
+<td>ISO-639 language code (e.g. "deu" or "ger" or "de")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>three-letter ISO-639-2 language code string that maps to <em class="parameter"><code>lang_code</code></em>,
+or NULL if no mapping is known. The returned string must not be
+modified or freed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-language-code-iso-639-2T"></a><h3>gst_tag_get_language_code_iso_639_2T ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_language_code_iso_639_2T
+                                                        (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *lang_code</code></em>);</pre>
+<p>
+Returns three-letter ISO-639-2 "terminological" language code given a
+two-letter ISO-639-1 language code or a three-letter ISO-639-2 language
+code (both are accepted for convenience).
+</p>
+<p>
+The "terminological" code is derived from the local name of the language
+(e.g. "deu" for German instead of "ger"). In most scenarios, the
+"terminological" codes are prefered over the "bibliographic" ones.
+</p>
+<p>
+Language codes are case-sensitive and expected to be lower case.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lang_code</code></em> :</span></p></td>
+<td>ISO-639 language code (e.g. "deu" or "ger" or "de")</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>three-letter ISO-639-2 language code string that maps to <em class="parameter"><code>lang_code</code></em>,
+or NULL if no mapping is known. The returned string must not be
+modified or freed.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglanguagecodes.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html b/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html
new file mode 100644
index 0000000..402caa9
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttaglicenses</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">
+<link rel="next" href="gstreamer-base-utils.html" title="Base Utils Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttaglanguagecodes.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-base-utils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttaglicenses.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttaglicenses.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttaglicenses"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttaglicenses.top_of_page"></a>gsttaglicenses</span></h2>
+<p>gsttaglicenses — utility functions for Creative Commons licenses</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttaglicenses.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+enum                <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags" title="enum GstTagLicenseFlags">GstTagLicenseFlags</a>;
+<a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags" title="enum GstTagLicenseFlags"><span class="returnvalue">GstTagLicenseFlags</span></a>  <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-flags" title="gst_tag_get_license_flags ()">gst_tag_get_license_flags</a>           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-nick" title="gst_tag_get_license_nick ()">gst_tag_get_license_nick</a>            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-title" title="gst_tag_get_license_title ()">gst_tag_get_license_title</a>           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-description" title="gst_tag_get_license_description ()">gst_tag_get_license_description</a>     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-jurisdiction" title="gst_tag_get_license_jurisdiction ()">gst_tag_get_license_jurisdiction</a>    (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-version" title="gst_tag_get_license_version ()">gst_tag_get_license_version</a>         (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            <a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses" title="gst_tag_get_licenses ()">gst_tag_get_licenses</a>                (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglicenses.description"></a><h2>Description</h2>
+<p>
+Provides information about Creative Commons media licenses, which are
+often expressed in media files as a license URI in tags. Also useful
+for applications creating media files, in case the user wants to license
+the content under a Creative Commons license.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglicenses.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTagLicenseFlags"></a><h3>enum GstTagLicenseFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_TAG_LICENSE_PERMITS_REPRODUCTION             = (1 &lt;&lt; 0),
+  GST_TAG_LICENSE_PERMITS_DISTRIBUTION             = (1 &lt;&lt; 1),
+  GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS         = (1 &lt;&lt; 2),
+  GST_TAG_LICENSE_PERMITS_SHARING                  = (1 &lt;&lt; 3),
+
+  GST_TAG_LICENSE_REQUIRES_NOTICE                  = (1 &lt;&lt; 8),
+  GST_TAG_LICENSE_REQUIRES_ATTRIBUTION             = (1 &lt;&lt; 9),
+  GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE             = (1 &lt;&lt; 10),
+  GST_TAG_LICENSE_REQUIRES_SOURCE_CODE             = (1 &lt;&lt; 11),
+  GST_TAG_LICENSE_REQUIRES_COPYLEFT                = (1 &lt;&lt; 12),
+  GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT         = (1 &lt;&lt; 13),
+
+  GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE         = (1 &lt;&lt; 16),
+  GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE = (1 &lt;&lt; 17),
+
+  GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE         = (1 &lt;&lt; 24),
+  GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE = (1 &lt;&lt; 25)
+} GstTagLicenseFlags;
+</pre>
+<p>
+See http://creativecommons.org/ns for more information.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PERMITS_REPRODUCTION</code></span></p></td>
+<td>making multiple copies
+    is allowed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PERMITS_DISTRIBUTION</code></span></p></td>
+<td>distribution, public display
+    and public performance are allowed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS</code></span></p></td>
+<td>distribution of derivative
+    works is allowed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PERMITS-SHARING:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PERMITS_SHARING</code></span></p></td>
+<td>commercial derivatives are allowed,
+    but only non-commercial distribution is allowed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_NOTICE</code></span></p></td>
+<td>copyright and license notices
+    must be kept intact
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_ATTRIBUTION</code></span></p></td>
+<td>credit must be given to
+    copyright holder and/or author
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE</code></span></p></td>
+<td>derivative works must be
+    licensed under the same terms or compatible terms as the original work
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_SOURCE_CODE</code></span></p></td>
+<td>source code (the preferred
+    form for making modifications) must be provided when exercising some
+    rights granted by the license
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_COPYLEFT</code></span></p></td>
+<td>derivative and combined works
+    must be licensed under specified terms, similar to those of the original
+    work
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT</code></span></p></td>
+<td>derivative works must be
+    licensed under specified terms, with at least the same conditions as
+    the original work; combinations with the work may be licensed under
+    different terms
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE</code></span></p></td>
+<td>exercising rights for
+    commercial purposes is prohibited
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE</code></span></p></td>
+<td>use in a
+    non-developing country is prohibited
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE</code></span></p></td>
+<td>this license was created
+    by the Creative Commons project
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS"></a><span class="term"><code class="literal">GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE</code></span></p></td>
+<td>this license was
+    created by the Free Software Foundation (FSF)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-flags"></a><h3>gst_tag_get_license_flags ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags" title="enum GstTagLicenseFlags"><span class="returnvalue">GstTagLicenseFlags</span></a>  gst_tag_get_license_flags           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the flags of a license, which describe most of the features of
+a license in their most general form.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the flags of the license, or 0 if the license is unknown</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-nick"></a><h3>gst_tag_get_license_nick ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_license_nick            (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the nick name of a license, which is a short (untranslated) string
+such as e.g. "CC BY-NC-ND 2.0 UK".
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the nick name of the license, or NULL if the license is unknown</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-title"></a><h3>gst_tag_get_license_title ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_license_title           (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the title of a license, which is a short translated description
+of the license's features (generally not very pretty though).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the title of the license, or NULL if the license is unknown or
+no title is available.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-description"></a><h3>gst_tag_get_license_description ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_license_description     (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the description of a license, which is a translated description
+of the license's main features.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the description of the license, or NULL if the license is unknown
+or a description is not available.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-jurisdiction"></a><h3>gst_tag_get_license_jurisdiction ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_license_jurisdiction    (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the jurisdiction code of a license. This is usually a two-letter
+ISO 3166-1 alpha-2 code, but there is also the special case of Scotland,
+for which no code exists and which is thus represented as "scotland".
+</p>
+<p>
+Known jurisdictions: ar, at, au, be, bg, br, ca, ch, cl, cn, co, de,
+dk, es, fi, fr, hr, hu, il, in, it, jp, kr, mk, mt, mx, my, nl, pe, pl,
+pt, scotland, se, si, tw, uk, us, za.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the jurisdiction code of the license, or NULL if the license is
+unknown or is not specific to a particular jurisdiction.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-license-version"></a><h3>gst_tag_get_license_version ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_get_license_version         (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *license_ref</code></em>);</pre>
+<p>
+Get the version of a license.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>license_ref</code></em> :</span></p></td>
+<td>a license reference string in form of a URI,
+e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the version of the license, or NULL if the license is not known or
+has no version</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-get-licenses"></a><h3>gst_tag_get_licenses ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **            gst_tag_get_licenses                (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Returns a list of known license references (in form of URIs). This is
+useful for UIs to build a list of available licenses for tagging purposes
+(e.g. to tag an audio track appropriately in a video or audio editor, or
+an image in a camera application).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>NULL-terminated array of license strings. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a>
+when no longer needed.</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttaglicenses.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagmux.html b/docs/libs/html/gst-plugins-base-libs-gsttagmux.html
new file mode 100644
index 0000000..a46a6ff
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagmux.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagmux</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">
+<link rel="next" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagdemux.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttaglanguagecodes.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagmux.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagmux.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagmux"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagmux.top_of_page"></a>gsttagmux</span></h2>
+<p>gsttagmux — Base class for adding tags that are in one single chunk
+                    directly at the beginning or at the end of a file</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagmux.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/gsttagmux.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMux" title="struct GstTagMux">GstTagMux</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass" title="struct GstTagMuxClass">GstTagMuxClass</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagmux.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id428505"></a><h3>Deriving from GstTagMux</h3>
+<p>
+Provides a base class for adding tags at the beginning or end of a
+stream.
+</p>
+<p>
+Subclasses have to do the following things:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+ In their base init function, they must add pad templates for the sink
+ pad and the source pad to the element class, describing the media type
+ they accept and output in the caps of the pad template.
+ </p></li>
+<li class="listitem"><p>
+ In their class init function, they must override the
+ GST_TAG_MUX_CLASS(mux_klass)-&gt;render_start_tag and/or
+ GST_TAG_MUX_CLASS(mux_klass)-&gt;render_end_tag vfuncs and set up a render
+ function.
+ </p></li>
+</ul></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+<p>
+Since 0.10.36
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagmux.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTagMux"></a><h3>struct GstTagMux</h3>
+<pre class="programlisting">struct GstTagMux {
+  GstElement    element;
+};
+</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMux" title="struct GstTagMux"><span class="type">GstTagMux</span></a> structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstTagMux.element"></a>element</code></em>;</span></p></td>
+<td>parent element</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTagMuxClass"></a><h3>struct GstTagMuxClass</h3>
+<pre class="programlisting">struct GstTagMuxClass {
+  GstElementClass parent_class;
+
+  /* vfuncs */
+  GstBuffer  * (*render_start_tag) (GstTagMux * mux, const GstTagList * tag_list);
+  GstBuffer  * (*render_end_tag)   (GstTagMux * mux, const GstTagList * tag_list);
+};
+</pre>
+<p>
+The <a class="link" href="gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass" title="struct GstTagMuxClass"><span class="type">GstTagMuxClass</span></a> structure. Subclasses need to override at least one
+of the two render vfuncs.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstTagMuxClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTagMuxClass.render-start-tag"></a>render_start_tag</code></em> ()</span></p></td>
+<td>create a tag buffer to add to the beginning of the
+input stream given a tag list, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTagMuxClass.render-end-tag"></a>render_end_tag</code></em> ()</span></p></td>
+<td>create a tag buffer to add to the end of the
+input stream given a tag list, or NULL</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagmux.see-also"></a><h2>See Also</h2>
+GstApeMux, GstId3Mux
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html b/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html
new file mode 100644
index 0000000..4076771
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagvorbis</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttag.html" title="gsttag">
+<link rel="next" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttag.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagid3.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagvorbis.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagvorbis.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagvorbis"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagvorbis.top_of_page"></a>gsttagvorbis</span></h2>
+<p>gsttagvorbis — tag mappings and support functions for plugins
+                    dealing with vorbiscomments</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagvorbis.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag" title="gst_tag_from_vorbis_tag ()">gst_tag_from_vorbis_tag</a>             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *vorbis_tag</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-tag" title="gst_tag_to_vorbis_tag ()">gst_tag_to_vorbis_tag</a>               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *gst_tag</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-vorbis-tag-add" title="gst_vorbis_tag_add ()">gst_vorbis_tag_add</a>                  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *tag</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-comments" title="gst_tag_to_vorbis_comments ()">gst_tag_to_vorbis_comments</a>          (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *tag</code></em>);
+
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment-buffer" title="gst_tag_list_from_vorbiscomment_buffer ()">gst_tag_list_from_vorbiscomment_buffer</a>
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *id_data</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id_data_length</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **vendor_string</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-to-vorbiscomment-buffer" title="gst_tag_list_to_vorbiscomment_buffer ()">gst_tag_list_to_vorbiscomment_buffer</a>
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *id_data</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id_data_length</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *vendor_string</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagvorbis.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id586856"></a><p>
+Contains various utility functions for plugins to parse or create
+vorbiscomments and map them to and from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>s.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagvorbis.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-from-vorbis-tag"></a><h3>gst_tag_from_vorbis_tag ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_from_vorbis_tag             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *vorbis_tag</code></em>);</pre>
+<p>
+Looks up the GStreamer tag for a vorbiscomment tag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vorbis_tag</code></em> :</span></p></td>
+<td>vorbiscomment tag to convert to GStreamer tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The corresponding GStreamer tag or NULL if none exists.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-to-vorbis-tag"></a><h3>gst_tag_to_vorbis_tag ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *       gst_tag_to_vorbis_tag               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *gst_tag</code></em>);</pre>
+<p>
+Looks up the vorbiscomment tag for a GStreamer tag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gst_tag</code></em> :</span></p></td>
+<td>GStreamer tag to convert to vorbiscomment tag</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The corresponding vorbiscomment tag or NULL if none exists.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-vorbis-tag-add"></a><h3>gst_vorbis_tag_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_vorbis_tag_add                  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *tag</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>
+Convenience function using <a class="link" href="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag" title="gst_tag_from_vorbis_tag ()"><code class="function">gst_tag_from_vorbis_tag()</code></a>, parsing
+a vorbis comment string into the right type and adding it to the
+given taglist <em class="parameter"><code>list</code></em>.
+</p>
+<p>
+Unknown vorbiscomment tags will be added to the tag list in form
+of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-EXTENDED-COMMENT:CAPS"><span class="type">GST_TAG_EXTENDED_COMMENT</span></a> (since 0.10.10 at least).
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag</code></em> :</span></p></td>
+<td>a vorbiscomment tag string (key in key=value), must be valid UTF-8</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td>a vorbiscomment value string (value in key=value), must be valid UTF-8</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-to-vorbis-comments"></a><h3>gst_tag_to_vorbis_comments ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_tag_to_vorbis_comments          (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *tag</code></em>);</pre>
+<p>
+Creates a new tag list that contains the information parsed out of a
+vorbiscomment packet.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag</code></em> :</span></p></td>
+<td>a GStreamer tag identifier, such as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GST-TAG-ARTIST:CAPS"><span class="type">GST_TAG_ARTIST</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of newly-allowcated key=value strings. Free with
+g_list_foreach (list, (GFunc) g_free, NULL) plus g_list_free (list)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-from-vorbiscomment-buffer"></a><h3>gst_tag_list_from_vorbiscomment_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_from_vorbiscomment_buffer
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *id_data</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id_data_length</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **vendor_string</code></em>);</pre>
+<p>
+Creates a new tag list that contains the information parsed out of a
+vorbiscomment packet.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer to convert</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id_data</code></em> :</span></p></td>
+<td>identification data at start of stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id_data_length</code></em> :</span></p></td>
+<td>length of identification data</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vendor_string</code></em> :</span></p></td>
+<td>pointer to a string that should take the vendor string
+of this vorbis comment or NULL if you don't need it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> with all tags that could be extracted from the
+given vorbiscomment buffer or NULL on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-to-vorbiscomment-buffer"></a><h3>gst_tag_list_to_vorbiscomment_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_list_to_vorbiscomment_buffer
+                                                        (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *id_data</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> id_data_length</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *vendor_string</code></em>);</pre>
+<p>
+Creates a new vorbiscomment buffer from a tag list.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>tag list to convert</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id_data</code></em> :</span></p></td>
+<td>identification data at start of stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id_data_length</code></em> :</span></p></td>
+<td>length of identification data, may be 0 if <em class="parameter"><code>id_data</code></em> is NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vendor_string</code></em> :</span></p></td>
+<td>string that describes the vendor string or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing a vorbiscomment buffer with all tags
+that could be converted from the given tag list.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagvorbis.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html b/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html
new file mode 100644
index 0000000..84bca1f
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagxmp</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">
+<link rel="next" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagexif.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagxmpwriter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagxmp.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagxmp.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagxmp"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagxmp.top_of_page"></a>gsttagxmp</span></h2>
+<p>gsttagxmp — tag mappings and support functions for plugins
+                    dealing with xmp packets</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagxmp.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/tag/tag.h&gt;
+
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        <a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-from-xmp-buffer" title="gst_tag_list_from_xmp_buffer ()">gst_tag_list_from_xmp_buffer</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer" title="gst_tag_list_to_xmp_buffer ()">gst_tag_list_to_xmp_buffer</a>          (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer-full" title="gst_tag_list_to_xmp_buffer_full ()">gst_tag_list_to_xmp_buffer_full</a>     (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **schemas</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **      <a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas" title="gst_tag_xmp_list_schemas ()">gst_tag_xmp_list_schemas</a>            (<em class="parameter"><code><span class="type">void</span></code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagxmp.description"></a><h2>Description</h2>
+<p>
+Contains various utility functions for plugins to parse or create
+xmp packets and map them to and from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>s.
+</p>
+<p>
+Please note that the xmp parser is very lightweight and not strict at all.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagxmp.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-list-from-xmp-buffer"></a><h3>gst_tag_list_from_xmp_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="returnvalue">GstTagList</span></a> *        gst_tag_list_from_xmp_buffer        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>);</pre>
+<p>
+Parse a xmp packet into a taglist.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td>buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>new taglist or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, free the list when done</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.29</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-to-xmp-buffer"></a><h3>gst_tag_list_to_xmp_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_list_to_xmp_buffer          (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>);</pre>
+<p>
+Formats a taglist as a xmp packet.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>tags</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>read_only</code></em> :</span></p></td>
+<td>does the container forbid inplace editing</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>new buffer or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, unref the buffer when done</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.29</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-list-to-xmp-buffer-full"></a><h3>gst_tag_list_to_xmp_buffer_full ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_list_to_xmp_buffer_full     (<em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *list</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **schemas</code></em>);</pre>
+<p>
+Formats a taglist as a xmp packet using only the selected
+schemas. An empty list (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>) means that all schemas should
+be used
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>tags</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>read_only</code></em> :</span></p></td>
+<td>does the container forbid inplace editing</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>schemas</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of schemas to be used on serialization</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>new buffer or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, unref the buffer when done</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-list-schemas"></a><h3>gst_tag_xmp_list_schemas ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **      gst_tag_xmp_list_schemas            (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>
+Gets the list of supported schemas in the xmp lib
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of strings with the schema names</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagxmp.see-also"></a><h2>See Also</h2>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html b/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html
new file mode 100644
index 0000000..d56548a
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttagxmpwriter</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">
+<link rel="next" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttagxmp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-tag.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttagdemux.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttagxmpwriter.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttagxmpwriter.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttagxmpwriter"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttagxmpwriter.top_of_page"></a>gsttagxmpwriter</span></h2>
+<p>gsttagxmpwriter — Interface for elements that provide XMP serialization</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttagxmpwriter.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"><span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-all-schemas" title="gst_tag_xmp_writer_add_all_schemas ()">gst_tag_xmp_writer_add_all_schemas</a>  (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-schema" title="gst_tag_xmp_writer_add_schema ()">gst_tag_xmp_writer_add_schema</a>       (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-has-schema" title="gst_tag_xmp_writer_has_schema ()">gst_tag_xmp_writer_has_schema</a>       (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-schema" title="gst_tag_xmp_writer_remove_schema ()">gst_tag_xmp_writer_remove_schema</a>    (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-all-schemas" title="gst_tag_xmp_writer_remove_all_schemas ()">gst_tag_xmp_writer_remove_all_schemas</a>
+                                                        (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-tag-list-to-xmp-buffer" title="gst_tag_xmp_writer_tag_list_to_xmp_buffer ()">gst_tag_xmp_writer_tag_list_to_xmp_buffer</a>
+                                                        (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagxmpwriter.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id579853"></a><p>
+This interface is implemented by elements that are able to do XMP serialization. Examples for
+such elements are <span class="type">jifmux</span> and <span class="type">qtmux</span>.
+</p>
+<p>
+Applications can use this interface to configure which XMP schemas should be used when serializing
+tags into XMP. Schemas are represented by their names, a full list of the supported schemas can be
+obtained from <a class="link" href="gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas" title="gst_tag_xmp_list_schemas ()"><code class="function">gst_tag_xmp_list_schemas()</code></a>. By default, all schemas are used.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttagxmpwriter.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-add-all-schemas"></a><h3>gst_tag_xmp_writer_add_all_schemas ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tag_xmp_writer_add_all_schemas  (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>);</pre>
+<p>
+Adds all available XMP schemas to the configuration. Meaning that
+all will be used.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <span class="type">GstTagXmpWriter</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-add-schema"></a><h3>gst_tag_xmp_writer_add_schema ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tag_xmp_writer_add_schema       (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);</pre>
+<p>
+Adds <em class="parameter"><code>schema</code></em> to the list schemas
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <span class="type">GstTagXmpWriter</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>schema</code></em> :</span></p></td>
+<td>the schema to be added</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-has-schema"></a><h3>gst_tag_xmp_writer_has_schema ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_tag_xmp_writer_has_schema       (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);</pre>
+<p>
+Checks if <em class="parameter"><code>schema</code></em> is going to be used
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <span class="type">GstTagXmpWriter</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>schema</code></em> :</span></p></td>
+<td>the schema to test</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if it is going to be used</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-remove-schema"></a><h3>gst_tag_xmp_writer_remove_schema ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tag_xmp_writer_remove_schema    (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *schema</code></em>);</pre>
+<p>
+Removes a schema from the list of schemas to use. Nothing is done if
+the schema wasn't in the list
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <span class="type">GstTagXmpWriter</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>schema</code></em> :</span></p></td>
+<td>the schema to remove</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-remove-all-schemas"></a><h3>gst_tag_xmp_writer_remove_all_schemas ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tag_xmp_writer_remove_all_schemas
+                                                        (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>);</pre>
+<p>
+Removes all schemas from the list of schemas to use. Meaning that no
+XMP will be generated.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>config</code></em> :</span></p></td>
+<td>a <span class="type">GstTagXmpWriter</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-xmp-writer-tag-list-to-xmp-buffer"></a><h3>gst_tag_xmp_writer_tag_list_to_xmp_buffer ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_tag_xmp_writer_tag_list_to_xmp_buffer
+                                                        (<em class="parameter"><code><span class="type">GstTagXmpWriter</span> *config</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a> *taglist</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> read_only</code></em>);</pre>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttuner.html b/docs/libs/html/gst-plugins-base-libs-gsttuner.html
new file mode 100644
index 0000000..249acd4
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttuner.html
@@ -0,0 +1,777 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttuner</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">
+<link rel="next" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gststreamvolume.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttunerchannel.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttuner.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttuner.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttuner.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttuner.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttuner"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttuner.top_of_page"></a>gsttuner</span></h2>
+<p>gsttuner — Interface for elements providing tuner operations</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttuner.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTuner"></a><pre class="synopsis">
+#include &lt;gst/interfaces/tuner.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-struct" title="GstTuner">GstTuner</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTunerClass" title="struct GstTunerClass">GstTunerClass</a>;
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-channels" title="gst_tuner_list_channels ()">gst_tuner_list_channels</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="returnvalue">GstTunerChannel</span></a> *   <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-channel" title="gst_tuner_get_channel ()">gst_tuner_get_channel</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-channel" title="gst_tuner_set_channel ()">gst_tuner_set_channel</a>               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);
+const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-norms" title="gst_tuner_list_norms ()">gst_tuner_list_norms</a>                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);
+<a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="returnvalue">GstTunerNorm</span></a> *      <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-norm" title="gst_tuner_get_norm ()">gst_tuner_get_norm</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-norm" title="gst_tuner_set_norm ()">gst_tuner_set_norm</a>                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> *norm</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>              <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-frequency" title="gst_tuner_get_frequency ()">gst_tuner_get_frequency</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency" title="gst_tuner_set_frequency ()">gst_tuner_set_frequency</a>             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> frequency</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength" title="gst_tuner_signal_strength ()">gst_tuner_signal_strength</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);
+<a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="returnvalue">GstTunerNorm</span></a> *      <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-norm-by-name" title="gst_tuner_find_norm_by_name ()">gst_tuner_find_norm_by_name</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *norm</code></em>);
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="returnvalue">GstTunerChannel</span></a> *   <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-channel-by-name" title="gst_tuner_find_channel_by_name ()">gst_tuner_find_channel_by_name</a>      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *channel</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-channel-changed" title="gst_tuner_channel_changed ()">gst_tuner_channel_changed</a>           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-norm-changed" title="gst_tuner_norm_changed ()">gst_tuner_norm_changed</a>              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> *norm</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-frequency-changed" title="gst_tuner_frequency_changed ()">gst_tuner_frequency_changed</a>         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> frequency</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-changed" title="gst_tuner_signal_changed ()">gst_tuner_signal_changed</a>            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> signal</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttuner.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstTuner
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttuner.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-channel-changed" title='The "channel-changed" signal'>channel-changed</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-frequency-changed" title='The "frequency-changed" signal'>frequency-changed</a>"                              : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-norm-changed" title='The "norm-changed" signal'>norm-changed</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-signal-changed" title='The "signal-changed" signal'>signal-changed</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttuner.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id516504"></a><p>
+The GstTuner interface is provided by elements that have the ability to
+tune into multiple input signals, for example TV or radio capture cards.
+</p>
+<p>
+The interpretation of 'tuning into' an input stream depends on the element
+implementing the interface. For v4lsrc, it might imply selection of an
+input source and/or frequency to be configured on a TV card. Another 
+GstTuner implementation might be to allow selection of an active input pad
+from multiple input pads.
+</p>
+<p>
+That said, the GstTuner interface functions are biased toward the
+TV capture scenario.
+</p>
+<p>
+The general parameters provided are for configuration are:
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">Selection of a current <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>. The current channel
+represents the input source (e.g. Composite, S-Video etc for TV capture).
+</li>
+<li class="listitem">The <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> for the channel. The norm chooses the
+interpretation of the incoming signal for the current channel. For example,
+PAL or NTSC, or more specific variants there-of.
+</li>
+<li class="listitem">Channel frequency. If the current channel has the ability to tune
+between multiple frequencies (if it has the GST_TUNER_CHANNEL_FREQUENCY flag)
+then the frequency can be changed/retrieved via the
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency" title="gst_tuner_set_frequency ()"><code class="function">gst_tuner_set_frequency()</code></a> and <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-frequency" title="gst_tuner_get_frequency ()"><code class="function">gst_tuner_get_frequency()</code></a> methods.
+</li>
+</ul></div>
+<p>
+</p>
+<p>
+Where applicable, the signal strength can be retrieved and/or monitored
+via a signal.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttuner.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTuner-struct"></a><h3>GstTuner</h3>
+<pre class="programlisting">typedef struct _GstTuner GstTuner;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTunerClass"></a><h3>struct GstTunerClass</h3>
+<pre class="programlisting">struct GstTunerClass {
+  GTypeInterface klass;
+
+  /* virtual functions */
+  const GList * (* list_channels)   (GstTuner        *tuner);
+  void          (* set_channel)     (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+  GstTunerChannel *
+                (* get_channel)     (GstTuner        *tuner);
+
+  const GList * (* list_norms)      (GstTuner        *tuner);
+  void          (* set_norm)        (GstTuner        *tuner,
+                                     GstTunerNorm    *norm);
+  GstTunerNorm *(* get_norm)        (GstTuner        *tuner);
+
+  void          (* set_frequency)   (GstTuner        *tuner,
+                                     GstTunerChannel *channel,
+                                     gulong           frequency);
+  gulong        (* get_frequency)   (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+  gint          (* signal_strength) (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+
+  /* signals */
+  void (*channel_changed)   (GstTuner        *tuner,
+                             GstTunerChannel *channel);
+  void (*norm_changed)      (GstTuner        *tuner,
+                             GstTunerNorm    *norm);
+  void (*frequency_changed) (GstTuner        *tuner,
+                             GstTunerChannel *channel,
+                             gulong           frequency);
+  void (*signal_changed)    (GstTuner        *tuner,
+                             GstTunerChannel *channel,
+                             gint             signal);
+};
+</pre>
+<p>
+Tuner interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstTunerClass.klass"></a>klass</code></em>;</span></p></td>
+<td>the parent interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.list-channels"></a>list_channels</code></em> ()</span></p></td>
+<td>list available channels</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.set-channel"></a>set_channel</code></em> ()</span></p></td>
+<td>set to a channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.get-channel"></a>get_channel</code></em> ()</span></p></td>
+<td>return the current channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.list-norms"></a>list_norms</code></em> ()</span></p></td>
+<td>list available norms</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.set-norm"></a>set_norm</code></em> ()</span></p></td>
+<td>set a norm</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.get-norm"></a>get_norm</code></em> ()</span></p></td>
+<td>return the current norm</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.set-frequency"></a>set_frequency</code></em> ()</span></p></td>
+<td>set the frequency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.get-frequency"></a>get_frequency</code></em> ()</span></p></td>
+<td>return the current frequency</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.signal-strength"></a>signal_strength</code></em> ()</span></p></td>
+<td>get the signal strength</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.channel-changed"></a>channel_changed</code></em> ()</span></p></td>
+<td>default handler for channel changed notification</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.norm-changed"></a>norm_changed</code></em> ()</span></p></td>
+<td>default handler for norm changed notification</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.frequency-changed"></a>frequency_changed</code></em> ()</span></p></td>
+<td>default handler for frequency changed notification</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstTunerClass.signal-changed"></a>signal_changed</code></em> ()</span></p></td>
+<td>default handler for signal-strength changed notification</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-list-channels"></a><h3>gst_tuner_list_channels ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_tuner_list_channels             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);</pre>
+<p>
+Retrieve a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannels</span></a> available
+(e.g. 'composite', 's-video', ...) from the given tuner object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to get the channels from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of channels available on this tuner. The list is
+owned by the GstTuner and must not be freed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-get-channel"></a><h3>gst_tuner_get_channel ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="returnvalue">GstTunerChannel</span></a> *   gst_tuner_get_channel               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);</pre>
+<p>
+Retrieve the current channel from the tuner.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to get the current channel from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current channel of the tuner object.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-set-channel"></a><h3>gst_tuner_set_channel ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_set_channel               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);</pre>
+<p>
+Tunes the object to the given channel, which should be one of the
+channels returned by <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-channels" title="gst_tuner_list_channels ()"><code class="function">gst_tuner_list_channels()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>the channel to tune to.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-list-norms"></a><h3>gst_tuner_list_norms ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *       gst_tuner_list_norms                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);</pre>
+<p>
+Retrieve a GList of available <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> settings for the currently
+tuned channel on the given tuner object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (*a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to get the list of norms from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A list of norms available on the current channel for this
+tuner object. The list is owned by the GstTuner and must not
+be freed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-get-norm"></a><h3>gst_tuner_get_norm ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="returnvalue">GstTunerNorm</span></a> *      gst_tuner_get_norm                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>);</pre>
+<p>
+Get the current video norm from the given tuner object for the
+currently selected channel.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to get the current norm from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current norm.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-set-norm"></a><h3>gst_tuner_set_norm ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_set_norm                  (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> *norm</code></em>);</pre>
+<p>
+Changes the video norm on this tuner to the given norm, which should be
+one of the norms returned by <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-norms" title="gst_tuner_list_norms ()"><code class="function">gst_tuner_list_norms()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) to set the norm on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>norm</code></em> :</span></p></td>
+<td>the norm to use for the current channel.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-get-frequency"></a><h3>gst_tuner_get_frequency ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="returnvalue">gulong</span></a>              gst_tuner_get_frequency             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);</pre>
+<p>
+Retrieve the current frequency from the given channel. As for
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency" title="gst_tuner_set_frequency ()"><code class="function">gst_tuner_set_frequency()</code></a>, the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> must support frequency
+operations, as indicated by the GST_TUNER_CHANNEL_FREQUENCY flag.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the given channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> to retrieve the frequency from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The current frequency, or 0 on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-set-frequency"></a><h3>gst_tuner_set_frequency ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_set_frequency             (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> frequency</code></em>);</pre>
+<p>
+Sets a tuning frequency on the given tuner/channel. Note that this
+requires the given channel to be a "tuning" channel, which can be
+checked using <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS" title="GST_TUNER_CHANNEL_HAS_FLAG()"><code class="function">GST_TUNER_CHANNEL_HAS_FLAG()</code></a>, with the proper flag
+being GST_TUNER_CHANNEL_FREQUENCY.
+</p>
+<p>
+The frequency is in Hz, with minimum steps indicated by the 
+frequency_multiplicator provided in the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>. The
+valid range is provided in the min_frequency and max_frequency properties
+of the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the given channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> to set the frequency on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frequency</code></em> :</span></p></td>
+<td>The frequency to tune in to.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-signal-strength"></a><h3>gst_tuner_signal_strength ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                gst_tuner_signal_strength           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);</pre>
+<p>
+Get the strength of the signal on this channel. Note that this
+requires the current channel to be a "tuning" channel, i.e. a
+channel on which frequency can be set. This can be checked using
+<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS" title="GST_TUNER_CHANNEL_HAS_FLAG()"><code class="function">GST_TUNER_CHANNEL_HAS_FLAG()</code></a>, and the appropriate flag to check
+for is GST_TUNER_CHANNEL_FREQUENCY.
+</p>
+<p>
+The valid range of the signal strength is indicated in the 
+min_signal and max_signal properties of the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> (a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>) that owns the given channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> to get the signal strength from.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>Signal strength, or 0 on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-find-norm-by-name"></a><h3>gst_tuner_find_norm_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="returnvalue">GstTunerNorm</span></a> *      gst_tuner_find_norm_by_name         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *norm</code></em>);</pre>
+<p>
+Look up a <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> by name.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>norm</code></em> :</span></p></td>
+<td>A string containing the name of a <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a>, or NULL if no norm with the provided name
+is available.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-find-channel-by-name"></a><h3>gst_tuner_find_channel_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="returnvalue">GstTunerChannel</span></a> *   gst_tuner_find_channel_by_name      (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *channel</code></em>);</pre>
+<p>
+Look up a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> by name.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A string containing the name of a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>, or NULL if no channel with the provided name
+is available.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-channel-changed"></a><h3>gst_tuner_channel_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_channel_changed           (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>);</pre>
+<p>
+Called by elements implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface when the
+current channel changes. Fires the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-channel-changed" title='The "channel-changed" signal'><span class="type">"channel-changed"</span></a> signal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> instance</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-norm-changed"></a><h3>gst_tuner_norm_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_norm_changed              (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> *norm</code></em>);</pre>
+<p>
+Called by elements implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface when the
+current norm changes. Fires the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-norm-changed" title='The "norm-changed" signal'><span class="type">"norm-changed"</span></a> signal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>norm</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> instance</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-frequency-changed"></a><h3>gst_tuner_frequency_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_frequency_changed         (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> frequency</code></em>);</pre>
+<p>
+Called by elements implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface when the
+configured frequency changes. Fires the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-frequency-changed" title='The "frequency-changed" signal'><span class="type">"frequency-changed"</span></a>
+signal on the tuner, and the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-frequency-changed" title='The "frequency-changed" signal'><span class="type">"frequency-changed"</span></a> signal
+on the channel.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The current <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frequency</code></em> :</span></p></td>
+<td>The new frequency setting</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tuner-signal-changed"></a><h3>gst_tuner_signal_changed ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_tuner_signal_changed            (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> *tuner</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> signal</code></em>);</pre>
+<p>
+Called by elements implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface when the
+incoming signal strength changes. Fires the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner-signal-changed" title='The "signal-changed" signal'><span class="type">"signal-changed"</span></a>
+signal on the tuner and the <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-signal-changed" title='The "signal-changed" signal'><span class="type">"signal-changed"</span></a> signal on 
+the channel.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The current <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>signal</code></em> :</span></p></td>
+<td>The new signal strength</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttuner.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstTuner-channel-changed"></a><h3>The <code class="literal">"channel-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>        *tuner,
+                                                        <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the current <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The element providing the GstTuner interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The new configured channel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTuner-frequency-changed"></a><h3>The <code class="literal">"frequency-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>        *tuner,
+                                                        <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *frequency,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a>           arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the current frequency has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The element providing the GstTuner interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frequency</code></em> :</span></p></td>
+<td>The new frequency (an unsigned long)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTuner-norm-changed"></a><h3>The <code class="literal">"norm-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>     *tuner,
+                                                        <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> *norm,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the current <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The element providing the GstTuner interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>norm</code></em> :</span></p></td>
+<td>The new configured norm.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTuner-signal-changed"></a><h3>The <code class="literal">"signal-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>        *tuner,
+                                                        <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *channel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>             signal,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the signal strength has changed.
+</p>
+<p>
+See Also: <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength" title="gst_tuner_signal_strength ()"><code class="function">gst_tuner_signal_strength()</code></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tuner</code></em> :</span></p></td>
+<td>The element providing the GstTuner interface</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>The current <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>signal</code></em> :</span></p></td>
+<td>The new signal strength (an integer)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttunerchannel.html b/docs/libs/html/gst-plugins-base-libs-gsttunerchannel.html
new file mode 100644
index 0000000..9745dc1
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttunerchannel.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttunerchannel</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttuner.html" title="gsttuner">
+<link rel="next" href="gst-plugins-base-libs-gsttunernorm.html" title="gsttunernorm">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttuner.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttunernorm.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttunerchannel.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttunerchannel.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttunerchannel.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttunerchannel.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttunerchannel"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttunerchannel.top_of_page"></a>gsttunerchannel</span></h2>
+<p>gsttunerchannel — A channel from an element implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>
+interface.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttunerchannel.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTunerChannel"></a><pre class="synopsis">
+#include &lt;gst/interfaces/tuner.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-struct" title="struct GstTunerChannel">GstTunerChannel</a>;
+enum                <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags" title="enum GstTunerChannelFlags">GstTunerChannelFlags</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS" title="GST_TUNER_CHANNEL_HAS_FLAG()">GST_TUNER_CHANNEL_HAS_FLAG</a>          (channel,
+                                                         flag)
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunerchannel.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstTunerChannel
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunerchannel.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-frequency-changed" title='The "frequency-changed" signal'>frequency-changed</a>"                              : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-signal-changed" title='The "signal-changed" signal'>signal-changed</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunerchannel.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id451732"></a><p>The <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> object is provided by an element implementing
+the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface.
+</p>
+<p>
+GstTunerChannel provides a name and flags to determine the type and
+capabilities of the channel. If the GST_TUNER_CHANNEL_FREQUENCY flag is
+set, then the channel also information about the minimum and maximum
+frequency, and range of the reported signal strength.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunerchannel.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTunerChannel-struct"></a><h3>struct GstTunerChannel</h3>
+<pre class="programlisting">struct GstTunerChannel {
+  gchar               *label;
+  GstTunerChannelFlags flags;
+  gfloat               freq_multiplicator;
+  gulong               min_frequency;
+  gulong               max_frequency;
+  gint                 min_signal;
+  gint                 max_signal;
+};
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstTunerChannel-struct.label"></a>label</code></em>;</span></p></td>
+<td>A string containing a descriptive name for this channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags" title="enum GstTunerChannelFlags"><span class="type">GstTunerChannelFlags</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.flags"></a>flags</code></em>;</span></p></td>
+<td>A set of <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags" title="enum GstTunerChannelFlags"><span class="type">GstTunerChannelFlags</span></a> for this channel</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.freq-multiplicator"></a>freq_multiplicator</code></em>;</span></p></td>
+<td>The step size (in Hz) for the frequency setting.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.min-frequency"></a>min_frequency</code></em>;</span></p></td>
+<td>Minimum valid frequency setting (in Hz).</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.max-frequency"></a>max_frequency</code></em>;</span></p></td>
+<td>Maximum valid frequency setting (in Hz).</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.min-signal"></a>min_signal</code></em>;</span></p></td>
+<td>Minimum reported signal strength value.</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstTunerChannel-struct.max-signal"></a>max_signal</code></em>;</span></p></td>
+<td>Maximum reported signal strength value.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTunerChannelFlags"></a><h3>enum GstTunerChannelFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_TUNER_CHANNEL_INPUT     = (1&lt;&lt;0),
+  GST_TUNER_CHANNEL_OUTPUT    = (1&lt;&lt;1),
+  GST_TUNER_CHANNEL_FREQUENCY = (1&lt;&lt;2),
+  GST_TUNER_CHANNEL_AUDIO     = (1&lt;&lt;3)
+} GstTunerChannelFlags;
+</pre>
+<p>
+An enumeration for flags indicating the available capabilities
+of a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-TUNER-CHANNEL-INPUT:CAPS"></a><span class="term"><code class="literal">GST_TUNER_CHANNEL_INPUT</code></span></p></td>
+<td>The channel is for input
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TUNER-CHANNEL-OUTPUT:CAPS"></a><span class="term"><code class="literal">GST_TUNER_CHANNEL_OUTPUT</code></span></p></td>
+<td>The channel is for output
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TUNER-CHANNEL-FREQUENCY:CAPS"></a><span class="term"><code class="literal">GST_TUNER_CHANNEL_FREQUENCY</code></span></p></td>
+<td>The channel has a frequency setting
+                              and signal strength.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TUNER-CHANNEL-AUDIO:CAPS"></a><span class="term"><code class="literal">GST_TUNER_CHANNEL_AUDIO</code></span></p></td>
+<td>The channel carries audio.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-TUNER-CHANNEL-HAS-FLAG:CAPS"></a><h3>GST_TUNER_CHANNEL_HAS_FLAG()</h3>
+<pre class="programlisting">#define             GST_TUNER_CHANNEL_HAS_FLAG(channel, flag)</pre>
+<p>
+Macro to check if the given flag is set on a channel
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>channel</code></em> :</span></p></td>
+<td>A <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
+<td>The flag to check for</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunerchannel.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstTunerChannel-frequency-changed"></a><h3>The <code class="literal">"frequency-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *tunerchannel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"><span class="type">gulong</span></a>           frequency,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)         : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the current frequency has changed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tunerchannel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>frequency</code></em> :</span></p></td>
+<td>The new frequency (an unsigned long)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTunerChannel-signal-changed"></a><h3>The <code class="literal">"signal-changed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a> *tunerchannel,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>             signal,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)         : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Reports that the signal strength has changed.
+</p>
+<p>
+See Also: <a class="link" href="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength" title="gst_tuner_signal_strength ()"><code class="function">gst_tuner_signal_strength()</code></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tunerchannel</code></em> :</span></p></td>
+<td>The <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>signal</code></em> :</span></p></td>
+<td>The new signal strength (an integer)</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttunernorm.html b/docs/libs/html/gst-plugins-base-libs-gsttunernorm.html
new file mode 100644
index 0000000..97b2cca
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gsttunernorm.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gsttunernorm</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttunerchannel.html" title="gsttunerchannel">
+<link rel="next" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttunerchannel.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideoorientation.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gsttunernorm.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttunernorm.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gsttunernorm.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gsttunernorm"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gsttunernorm.top_of_page"></a>gsttunernorm</span></h2>
+<p>gsttunernorm — Encapsulates information about the data format(s)
+for a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gsttunernorm.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTunerNorm"></a><pre class="synopsis">
+#include &lt;gst/interfaces/tuner.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm-struct" title="struct GstTunerNorm">GstTunerNorm</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunernorm.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----GstTunerNorm
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunernorm.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id445343"></a><p>The <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm"><span class="type">GstTunerNorm</span></a> object is created by an element implementing the
+<a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a> interface and encapsulates the selection of a capture/output format
+for a selected <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gsttunernorm.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTunerNorm-struct"></a><h3>struct GstTunerNorm</h3>
+<pre class="programlisting">struct GstTunerNorm {
+  gchar  *label;
+  GValue  framerate;
+};
+</pre>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstTunerNorm-struct.label"></a>label</code></em>;</span></p></td>
+<td>A string containing a descriptive name for the norm</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> <em class="structfield"><code><a name="GstTunerNorm-struct.framerate"></a>framerate</code></em>;</span></p></td>
+<td>A GValue containing the framerate associated with this norm,
+if any. (May be unset).</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideo.html b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
new file mode 100644
index 0000000..4b7f549
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
@@ -0,0 +1,706 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideo</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gstreamer-video.html" title="Video Library">
+<link rel="next" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gstreamer-video.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-video.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideofilter.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstvideo.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideo.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstvideo"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideo.top_of_page"></a>gstvideo</span></h2>
+<p>gstvideo — Support library for video operations</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstvideo.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/video/video.h&gt;
+
+#define             <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FPS-RANGE:CAPS" title="GST_VIDEO_FPS_RANGE">GST_VIDEO_FPS_RANGE</a>
+#define             <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS" title="GST_VIDEO_SIZE_RANGE">GST_VIDEO_SIZE_RANGE</a>
+enum                <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat">GstVideoFormat</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio" title="gst_video_calculate_display_ratio ()">gst_video_calculate_display_ratio</a>   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *dar_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *dar_d</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_width</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_height</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_par_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_par_d</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> display_par_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> display_par_d</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-format-to-fourcc" title="gst_video_format_to_fourcc ()">gst_video_format_to_fourcc</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</code></em>);
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="returnvalue">GstVideoFormat</span></a>      <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-format-from-fourcc" title="gst_video_format_from_fourcc ()">gst_video_format_from_fourcc</a>        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> fourcc</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-parse-caps-palette" title="gst_video_parse_caps_palette ()">gst_video_parse_caps_palette</a>        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+<span class="returnvalue">void</span>                (<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback" title="GstVideoConvertFrameCallback ()">*GstVideoConvertFrameCallback</a>)     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame" title="gst_video_convert_frame ()">gst_video_convert_frame</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *from_caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *to_caps</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame-async" title="gst_video_convert_frame_async ()">gst_video_convert_frame_async</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *from_caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *to_caps</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback" title="GstVideoConvertFrameCallback ()"><span class="type">GstVideoConvertFrameCallback</span></a> callback</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="returnvalue">GstEvent</span></a> *          <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()">gst_video_event_new_still_frame</a>     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> in_still</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame" title="gst_video_event_parse_still_frame ()">gst_video_event_parse_still_frame</a>   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *in_still</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideo.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id625709"></a><p>
+This library contains some helper functions and includes the
+videosink and videofilter base classes.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideo.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GST-VIDEO-FPS-RANGE:CAPS"></a><h3>GST_VIDEO_FPS_RANGE</h3>
+<pre class="programlisting">#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-SIZE-RANGE:CAPS"></a><h3>GST_VIDEO_SIZE_RANGE</h3>
+<pre class="programlisting">#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]"
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoFormat"></a><h3>enum GstVideoFormat</h3>
+<pre class="programlisting">typedef enum {
+  GST_VIDEO_FORMAT_UNKNOWN,
+  GST_VIDEO_FORMAT_I420,
+  GST_VIDEO_FORMAT_YV12,
+  GST_VIDEO_FORMAT_YUY2,
+  GST_VIDEO_FORMAT_UYVY,
+  GST_VIDEO_FORMAT_AYUV,
+  GST_VIDEO_FORMAT_RGBx,
+  GST_VIDEO_FORMAT_BGRx,
+  GST_VIDEO_FORMAT_xRGB,
+  GST_VIDEO_FORMAT_xBGR,
+  GST_VIDEO_FORMAT_RGBA,
+  GST_VIDEO_FORMAT_BGRA,
+  GST_VIDEO_FORMAT_ARGB,
+  GST_VIDEO_FORMAT_ABGR,
+  GST_VIDEO_FORMAT_RGB,
+  GST_VIDEO_FORMAT_BGR,
+  GST_VIDEO_FORMAT_Y41B,
+  GST_VIDEO_FORMAT_Y42B,
+  GST_VIDEO_FORMAT_YVYU,
+  GST_VIDEO_FORMAT_Y444,
+  GST_VIDEO_FORMAT_v210,
+  GST_VIDEO_FORMAT_v216,
+  GST_VIDEO_FORMAT_NV12,
+  GST_VIDEO_FORMAT_NV21,
+  GST_VIDEO_FORMAT_GRAY8,
+  GST_VIDEO_FORMAT_GRAY16_BE,
+  GST_VIDEO_FORMAT_GRAY16_LE,
+  GST_VIDEO_FORMAT_v308,
+  GST_VIDEO_FORMAT_Y800,
+  GST_VIDEO_FORMAT_Y16,
+  GST_VIDEO_FORMAT_RGB16,
+  GST_VIDEO_FORMAT_BGR16,
+  GST_VIDEO_FORMAT_RGB15,
+  GST_VIDEO_FORMAT_BGR15,
+  GST_VIDEO_FORMAT_UYVP,
+  GST_VIDEO_FORMAT_A420,
+  GST_VIDEO_FORMAT_RGB8_PALETTED,
+  GST_VIDEO_FORMAT_YUV9,
+  GST_VIDEO_FORMAT_YVU9,
+  GST_VIDEO_FORMAT_IYU1,
+  GST_VIDEO_FORMAT_ARGB64,
+  GST_VIDEO_FORMAT_AYUV64,
+  GST_VIDEO_FORMAT_r210
+} GstVideoFormat;
+</pre>
+<p>
+Enum value describing the most common video formats.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-UNKNOWN:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_UNKNOWN</code></span></p></td>
+<td>Unknown or unset video format id
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-I420:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_I420</code></span></p></td>
+<td>planar 4:2:0 YUV
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-YV12:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_YV12</code></span></p></td>
+<td>planar 4:2:0 YVU (like I420 but UV planes swapped)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-YUY2:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_YUY2</code></span></p></td>
+<td>packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-UYVY:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_UYVY</code></span></p></td>
+<td>packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-AYUV:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_AYUV</code></span></p></td>
+<td>packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGBx"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGBx</code></span></p></td>
+<td>sparse rgb packed into 32 bit, space last
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-BGRx"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_BGRx</code></span></p></td>
+<td>sparse reverse rgb packed into 32 bit, space last
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-xRGB"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_xRGB</code></span></p></td>
+<td>sparse rgb packed into 32 bit, space first
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-xBGR"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_xBGR</code></span></p></td>
+<td>sparse reverse rgb packed into 32 bit, space first
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGBA:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGBA</code></span></p></td>
+<td>rgb with alpha channel last
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-BGRA:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_BGRA</code></span></p></td>
+<td>reverse rgb with alpha channel last
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-ARGB:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_ARGB</code></span></p></td>
+<td>rgb with alpha channel first
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-ABGR:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_ABGR</code></span></p></td>
+<td>reverse rgb with alpha channel first
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGB:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGB</code></span></p></td>
+<td>rgb
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-BGR:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_BGR</code></span></p></td>
+<td>reverse rgb
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-Y41B:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_Y41B</code></span></p></td>
+<td>planar 4:1:1 YUV (Since: 0.10.18)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-Y42B:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_Y42B</code></span></p></td>
+<td>planar 4:2:2 YUV (Since: 0.10.18)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-YVYU:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_YVYU</code></span></p></td>
+<td>packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) (Since: 0.10.23)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-Y444:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_Y444</code></span></p></td>
+<td>planar 4:4:4 YUV (Since: 0.10.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-v210"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_v210</code></span></p></td>
+<td>packed 4:2:2 10-bit YUV, complex format (Since: 0.10.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-v216"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_v216</code></span></p></td>
+<td>packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order (Since: 0.10.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-NV12:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_NV12</code></span></p></td>
+<td>planar 4:2:0 YUV with interleaved UV plane (Since: 0.10.26)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-NV21:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_NV21</code></span></p></td>
+<td>planar 4:2:0 YUV with interleaved VU plane (Since: 0.10.26)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-GRAY8:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_GRAY8</code></span></p></td>
+<td>8-bit grayscale (Since: 0.10.29)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-GRAY16-BE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_GRAY16_BE</code></span></p></td>
+<td>16-bit grayscale, most significant byte first (Since: 0.10.29)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-GRAY16-LE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_GRAY16_LE</code></span></p></td>
+<td>16-bit grayscale, least significant byte first (Since: 0.10.29)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-v308"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_v308</code></span></p></td>
+<td>packed 4:4:4 YUV (Since: 0.10.29)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-Y800:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_Y800</code></span></p></td>
+<td>same as GST_VIDEO_FORMAT_GRAY8 (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-Y16:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_Y16</code></span></p></td>
+<td>same as GST_VIDEO_FORMAT_GRAY16_LE (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGB16:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGB16</code></span></p></td>
+<td>rgb 5-6-5 bits per component (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-BGR16:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_BGR16</code></span></p></td>
+<td>reverse rgb 5-6-5 bits per component (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGB15:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGB15</code></span></p></td>
+<td>rgb 5-5-5 bits per component (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-BGR15:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_BGR15</code></span></p></td>
+<td>reverse rgb 5-5-5 bits per component (Since: 0.10.30)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-UYVP:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_UYVP</code></span></p></td>
+<td>packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) (Since: 0.10.31)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-A420:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_A420</code></span></p></td>
+<td>planar 4:4:2:0 AYUV (Since: 0.10.31)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-RGB8-PALETTED:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_RGB8_PALETTED</code></span></p></td>
+<td>8-bit paletted RGB (Since: 0.10.32)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-YUV9:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_YUV9</code></span></p></td>
+<td>planar 4:1:0 YUV (Since: 0.10.32)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-YVU9:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_YVU9</code></span></p></td>
+<td>planar 4:1:0 YUV (like YUV9 but UV planes swapped) (Since: 0.10.32)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-IYU1:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_IYU1</code></span></p></td>
+<td>packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) (Since: 0.10.32)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-ARGB64:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_ARGB64</code></span></p></td>
+<td>rgb with alpha channel first, 16 bits per channel (Since: 0.10.33)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-AYUV64:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_AYUV64</code></span></p></td>
+<td>packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) (Since: 0.10.33)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-FORMAT-r210"></a><span class="term"><code class="literal">GST_VIDEO_FORMAT_r210</code></span></p></td>
+<td>packed 4:4:4 RGB, 10 bits per channel (Since: 0.10.33)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-calculate-display-ratio"></a><h3>gst_video_calculate_display_ratio ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_calculate_display_ratio   (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *dar_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> *dar_d</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_width</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_height</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_par_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> video_par_d</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> display_par_n</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> display_par_d</code></em>);</pre>
+<p>
+Given the Pixel Aspect Ratio and size of an input video frame, and the
+pixel aspect ratio of the intended display device, calculates the actual
+display ratio the video will be rendered with.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dar_n</code></em> :</span></p></td>
+<td>Numerator of the calculated display_ratio</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dar_d</code></em> :</span></p></td>
+<td>Denominator of the calculated display_ratio</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_width</code></em> :</span></p></td>
+<td>Width of the video frame in pixels</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_height</code></em> :</span></p></td>
+<td>Height of the video frame in pixels</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_par_n</code></em> :</span></p></td>
+<td>Numerator of the pixel aspect ratio of the input video.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_par_d</code></em> :</span></p></td>
+<td>Denominator of the pixel aspect ratio of the input video.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display_par_n</code></em> :</span></p></td>
+<td>Numerator of the pixel aspect ratio of the display device</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display_par_d</code></em> :</span></p></td>
+<td>Denominator of the pixel aspect ratio of the display device</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A boolean indicating success and a calculated Display Ratio in the
+dar_n and dar_d parameters.
+The return value is FALSE in the case of integer overflow or other error.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-format-to-fourcc"></a><h3>gst_video_format_to_fourcc ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>             gst_video_format_to_fourcc          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</code></em>);</pre>
+<p>
+Converts a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> value into the corresponding FOURCC.  Only
+a few YUV formats have corresponding FOURCC values.  If <em class="parameter"><code>format</code></em> has
+no corresponding FOURCC value, 0 is returned.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>format</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> video format</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the FOURCC corresponding to <em class="parameter"><code>format</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-format-from-fourcc"></a><h3>gst_video_format_from_fourcc ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="returnvalue">GstVideoFormat</span></a>      gst_video_format_from_fourcc        (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> fourcc</code></em>);</pre>
+<p>
+Converts a FOURCC value into the corresponding <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a>.
+If the FOURCC cannot be represented by <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a>,
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS"><span class="type">GST_VIDEO_FORMAT_UNKNOWN</span></a> is returned.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fourcc</code></em> :</span></p></td>
+<td>a FOURCC value representing raw YUV video</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> describing the FOURCC value</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.16</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-parse-caps-palette"></a><h3>gst_video_parse_caps_palette ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_video_parse_caps_palette        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>
+Returns the palette data from the caps as a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. For
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB8-PALETTED:CAPS"><span class="type">GST_VIDEO_FORMAT_RGB8_PALETTED</span></a> this is containing 256 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a>
+values, each containing ARGB colors in native endianness.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to parse</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the palette data. Unref after usage.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.32</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvertFrameCallback"></a><h3>GstVideoConvertFrameCallback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                (*GstVideoConvertFrameCallback)     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> *error</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-convert-frame"></a><h3>gst_video_convert_frame ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_video_convert_frame             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *from_caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *to_caps</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
+<p>
+Converts a raw video buffer into the specified output caps.
+</p>
+<p>
+The output caps can be any raw video formats or any image formats (jpeg, png, ...).
+</p>
+<p>
+The width, height and pixel-aspect-ratio can also be specified in the output caps.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>from_caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to convert from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to_caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to convert to</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>the maximum amount of time allowed for the processing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>pointer to a <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>. Can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The converted <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error happened (in which case <em class="parameter"><code>err</code></em>
+will point to the <a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>).</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-convert-frame-async"></a><h3>gst_video_convert_frame_async ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_convert_frame_async       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *from_caps</code></em>,
+                                                         <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *to_caps</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timeout</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback" title="GstVideoConvertFrameCallback ()"><span class="type">GstVideoConvertFrameCallback</span></a> callback</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy_notify</code></em>);</pre>
+<p>
+Converts a raw video buffer into the specified output caps.
+</p>
+<p>
+The output caps can be any raw video formats or any image formats (jpeg, png, ...).
+</p>
+<p>
+The width, height and pixel-aspect-ratio can also be specified in the output caps.
+</p>
+<p>
+<em class="parameter"><code>callback</code></em> will be called after conversion, when an error occured or if conversion didn't
+finish after <em class="parameter"><code>timeout</code></em>. <em class="parameter"><code>callback</code></em> will always be called from the thread default
+<a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><code class="literal">GMainContext</code></a>, see <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-context-get-thread-default"><code class="function">g_main_context_get_thread_default()</code></a>. If GLib before 2.22 is used,
+this will always be the global default main context.
+</p>
+<p>
+<em class="parameter"><code>destroy_notify</code></em> will be called after the callback was called and <em class="parameter"><code>user_data</code></em> is not needed
+anymore.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>from_caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to convert from</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to_caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> to convert to</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>timeout</code></em> :</span></p></td>
+<td>the maximum amount of time allowed for the processing.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback" title="GstVideoConvertFrameCallback ()"><code class="literal">GstVideoConvertFrameCallback</code></a> that will be called after conversion.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>extra data that will be passed to the <em class="parameter"><code>callback</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>destroy_notify</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><code class="literal">GDestroyNotify</code></a> to be called after <em class="parameter"><code>user_data</code></em> is not needed anymore</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-event-new-still-frame"></a><h3>gst_video_event_new_still_frame ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="returnvalue">GstEvent</span></a> *          gst_video_event_new_still_frame     (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> in_still</code></em>);</pre>
+<p>
+Creates a new Still Frame event. If <em class="parameter"><code>in_still</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the event
+represents the start of a still frame sequence. If it is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, then
+the event ends a still frame sequence.
+</p>
+<p>
+To parse an event created by <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()"><code class="function">gst_video_event_new_still_frame()</code></a> use
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame" title="gst_video_event_parse_still_frame ()"><code class="function">gst_video_event_parse_still_frame()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>in_still</code></em> :</span></p></td>
+<td>boolean value for the still-frame state of the event.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>The new GstEvent</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-event-parse-still-frame"></a><h3>gst_video_event_parse_still_frame ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_event_parse_still_frame   (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *in_still</code></em>);</pre>
+<p>
+Parse a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a>, identify if it is a Still Frame event, and
+return the still-frame state from the event if it is.
+If the event represents the start of a still frame, the in_still
+variable will be set to TRUE, otherwise FALSE. It is OK to pass NULL for the
+in_still variable order to just check whether the event is a valid still-frame
+event.
+</p>
+<p>
+Create a still frame event using <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()"><code class="function">gst_video_event_new_still_frame()</code></a>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> to parse</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>in_still</code></em> :</span></p></td>
+<td>A boolean to receive the still-frame status from the event, or NULL</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the event is a valid still-frame event. <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.26</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
new file mode 100644
index 0000000..b32ad9b
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideofilter</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">
+<link rel="next" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideo.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-video.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideosink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstvideofilter.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideofilter.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideofilter.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstvideofilter"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideofilter.top_of_page"></a>gstvideofilter</span></h2>
+<p>gstvideofilter — Base class for video filters</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstvideofilter.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoFilter"></a><pre class="synopsis">
+#include &lt;gst/video/gstvideofilter.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct" title="struct GstVideoFilter">GstVideoFilter</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass" title="struct GstVideoFilterClass">GstVideoFilterClass</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideofilter.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----GstVideoFilter
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideofilter.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id583206"></a><p>
+Provides useful functions and a base class for video filters.
+</p>
+<p>
+The videofilter will by default enable QoS on the parent GstBaseTransform
+to implement frame dropping.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideofilter.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoFilter-struct"></a><h3>struct GstVideoFilter</h3>
+<pre class="programlisting">struct GstVideoFilter;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoFilterClass"></a><h3>struct GstVideoFilterClass</h3>
+<pre class="programlisting">struct GstVideoFilterClass {
+  GstBaseTransformClass parent_class;
+};
+</pre>
+<p>
+The video filter class structure.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html#GstBaseTransformClass"><span class="type">GstBaseTransformClass</span></a> <em class="structfield"><code><a name="GstVideoFilterClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class structure</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
new file mode 100644
index 0000000..b3d334a
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
@@ -0,0 +1,402 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideoorientation</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gsttunernorm.html" title="gsttunernorm">
+<link rel="next" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttunernorm.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideooverlay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstvideoorientation.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideoorientation.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideoorientation.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstvideoorientation"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideoorientation.top_of_page"></a>gstvideoorientation</span></h2>
+<p>gstvideoorientation — Interface for elements providing video orientation
+controls</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstvideoorientation.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoOrientation"></a><pre class="synopsis">
+#include &lt;gst/interfaces/videoorientation.h&gt;
+
+                    <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct" title="GstVideoOrientation">GstVideoOrientation</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface" title="struct GstVideoOrientationInterface">GstVideoOrientationInterface</a>;
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hcenter" title="gst_video_orientation_get_hcenter ()">gst_video_orientation_get_hcenter</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hflip" title="gst_video_orientation_get_hflip ()">gst_video_orientation_get_hflip</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vcenter" title="gst_video_orientation_get_vcenter ()">gst_video_orientation_get_vcenter</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vflip" title="gst_video_orientation_get_vflip ()">gst_video_orientation_get_vflip</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hcenter" title="gst_video_orientation_set_hcenter ()">gst_video_orientation_set_hcenter</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hflip" title="gst_video_orientation_set_hflip ()">gst_video_orientation_set_hflip</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vcenter" title="gst_video_orientation_set_vcenter ()">gst_video_orientation_set_vcenter</a>   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vflip" title="gst_video_orientation_set_vflip ()">gst_video_orientation_set_vflip</a>     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoorientation.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----GstVideoOrientation
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoorientation.description"></a><h2>Description</h2>
+<p>
+The interface allows unified access to control flipping and autocenter
+operation of video-sources or operators.
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoorientation.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoOrientation-struct"></a><h3>GstVideoOrientation</h3>
+<pre class="programlisting">typedef struct _GstVideoOrientation GstVideoOrientation;</pre>
+<p>
+Opaque <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> data structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoOrientationInterface"></a><h3>struct GstVideoOrientationInterface</h3>
+<pre class="programlisting">struct GstVideoOrientationInterface {
+  GTypeInterface parent;
+
+  /* FIXME 0.11: fix awkward API? add some kind of get_supported flags thing
+   * and then just return booleans/int from all vfuncs requiring the caller
+   * to check the flags first */
+
+  /* virtual functions */
+  gboolean (* get_hflip)   (GstVideoOrientation *video_orientation, gboolean *flip);
+  gboolean (* get_vflip)   (GstVideoOrientation *video_orientation, gboolean *flip);
+  gboolean (* get_hcenter) (GstVideoOrientation *video_orientation, gint *center);
+  gboolean (* get_vcenter) (GstVideoOrientation *video_orientation, gint *center);
+
+  gboolean (* set_hflip)   (GstVideoOrientation *video_orientation, gboolean flip);
+  gboolean (* set_vflip)   (GstVideoOrientation *video_orientation, gboolean flip);
+  gboolean (* set_hcenter) (GstVideoOrientation *video_orientation, gint center);
+  gboolean (* set_vcenter) (GstVideoOrientation *video_orientation, gint center);
+};
+</pre>
+<p>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface" title="struct GstVideoOrientationInterface"><span class="type">GstVideoOrientationInterface</span></a> interface.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstVideoOrientationInterface.parent"></a>parent</code></em>;</span></p></td>
+<td>parent interface type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.get-hflip"></a>get_hflip</code></em> ()</span></p></td>
+<td>virtual method to get horizontal flipping state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.get-vflip"></a>get_vflip</code></em> ()</span></p></td>
+<td>virtual method to get vertical flipping state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.get-hcenter"></a>get_hcenter</code></em> ()</span></p></td>
+<td>virtual method to get horizontal centering state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.get-vcenter"></a>get_vcenter</code></em> ()</span></p></td>
+<td>virtual method to get vertical centering state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.set-hflip"></a>set_hflip</code></em> ()</span></p></td>
+<td>virtual method to set horizontal flipping state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.set-vflip"></a>set_vflip</code></em> ()</span></p></td>
+<td>virtual method to set vertical flipping state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.set-hcenter"></a>set_hcenter</code></em> ()</span></p></td>
+<td>virtual method to set horizontal centering state</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoOrientationInterface.set-vcenter"></a>set_vcenter</code></em> ()</span></p></td>
+<td>virtual method to set vertical centering state</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-get-hcenter"></a><h3>gst_video_orientation_get_hcenter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_get_hcenter   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);</pre>
+<p>
+Get the horizontal centering offset from the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>center</code></em> :</span></p></td>
+<td>return location for the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports centering</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-get-hflip"></a><h3>gst_video_orientation_get_hflip ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_get_hflip     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);</pre>
+<p>
+Get the horizontal flipping state (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) from the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flip</code></em> :</span></p></td>
+<td>return location for the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports flipping</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-get-vcenter"></a><h3>gst_video_orientation_get_vcenter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_get_vcenter   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);</pre>
+<p>
+Get the vertical centering offset from the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>center</code></em> :</span></p></td>
+<td>return location for the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports centering</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-get-vflip"></a><h3>gst_video_orientation_get_vflip ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_get_vflip     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);</pre>
+<p>
+Get the vertical flipping state (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) from the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flip</code></em> :</span></p></td>
+<td>return location for the result</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports flipping</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-set-hcenter"></a><h3>gst_video_orientation_set_hcenter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_set_hcenter   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);</pre>
+<p>
+Set the horizontal centering offset for the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>center</code></em> :</span></p></td>
+<td>centering offset</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports centering</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-set-hflip"></a><h3>gst_video_orientation_set_hflip ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_set_hflip     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);</pre>
+<p>
+Set the horizontal flipping state (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) for the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flip</code></em> :</span></p></td>
+<td>use flipping</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports flipping</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-set-vcenter"></a><h3>gst_video_orientation_set_vcenter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_set_vcenter   (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);</pre>
+<p>
+Set the vertical centering offset for the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>center</code></em> :</span></p></td>
+<td>centering offset</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports centering</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-orientation-set-vflip"></a><h3>gst_video_orientation_set_vflip ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_orientation_set_vflip     (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> *video_orientation</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);</pre>
+<p>
+Set the vertical flipping state (<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) for the given object.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>video_orientation</code></em> :</span></p></td>
+<td>
+<a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation"><span class="type">GstVideoOrientation</span></a> interface of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flip</code></em> :</span></p></td>
+<td>use flipping</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in case the element supports flipping</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.11</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
new file mode 100644
index 0000000..b4059b2
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
@@ -0,0 +1,520 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideooverlay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-interfaces.html" title="Interfaces Library">
+<link rel="prev" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">
+<link rel="next" href="gstreamer-netbuffer.html" title="Network Buffer Library">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideoorientation.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-interfaces.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-netbuffer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstvideooverlay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideooverlay.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstvideooverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideooverlay.top_of_page"></a>gstvideooverlay</span></h2>
+<p>gstvideooverlay — Interface for setting/getting a window system resource
+   on elements supporting it to configure a window into which to render a
+   video.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstvideooverlay.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#include &lt;gst/interfaces/videooverlay.h&gt;
+
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle" title="gst_video_overlay_got_window_handle ()">gst_video_overlay_got_window_handle</a> (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()">gst_video_overlay_set_window_handle</a> (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle" title="gst_video_overlay_prepare_window_handle ()">gst_video_overlay_prepare_window_handle</a>
+                                                        (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose" title="gst_video_overlay_expose ()">gst_video_overlay_expose</a>            (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-handle-events" title="gst_video_overlay_handle_events ()">gst_video_overlay_handle_events</a>     (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> handle_events</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-render-rectangle" title="gst_video_overlay_set_render_rectangle ()">gst_video_overlay_set_render_rectangle</a>
+                                                        (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> y</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideooverlay.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id511383"></a><p>
+The <span class="type">GstVideoOverlay</span> interface is used for 2 main purposes :
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem"><p>
+To get a grab on the Window where the video sink element is going to render.
+This is achieved by either being informed about the Window identifier that
+the video sink element generated, or by forcing the video sink element to use
+a specific Window identifier for rendering.
+</p></li>
+<li class="listitem"><p>
+To force a redrawing of the latest video frame the video sink element
+displayed on the Window. Indeed if the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> is in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a>
+state, moving the Window around will damage its content. Application
+developers will want to handle the Expose events themselves and force the
+video sink element to refresh the Window's content.
+</p></li>
+</ul></div>
+<p>
+</p>
+<p>
+Using the Window created by the video sink is probably the simplest scenario,
+in some cases, though, it might not be flexible enough for application
+developers if they need to catch events such as mouse moves and button
+clicks.
+</p>
+<p>
+Setting a specific Window identifier on the video sink element is the most
+flexible solution but it has some issues. Indeed the application needs to set
+its Window identifier at the right time to avoid internal Window creation
+from the video sink element. To solve this issue a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> is posted on
+the bus to inform the application that it should set the Window identifier
+immediately. Here is an example on how to do that correctly:
+</p>
+<div class="informalexample"><pre class="programlisting">
+static GstBusSyncReply
+create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+ // ignore anything but 'prepare-window-handle' element messages
+ if (!gst_is_video_overlay_prepare_window_handle_message (message))
+   return GST_BUS_PASS;
+
+ win = XCreateSimpleWindow (disp, root, 0, 0, 320, 240, 0, 0, 0);
+
+ XSetWindowBackgroundPixmap (disp, win, None);
+
+ XMapRaised (disp, win);
+
+ XSync (disp, FALSE);
+
+ gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message)),
+     win);
+
+ gst_message_unref (message);
+
+ return GST_BUS_DROP;
+}
+...
+int
+main (int argc, char **argv)
+{
+...
+ bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+ gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, pipeline);
+...
+}
+</pre></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id511467"></a><h3>Two basic usage scenarios</h3>
+<p>
+There are two basic usage scenarios: in the simplest case, the application
+knows exactly what particular element is used for video output, which is
+usually the case when the application creates the videosink to use
+(e.g. <span class="type">xvimagesink</span>, <span class="type">ximagesink</span>, etc.) itself; in this case, the application
+can just create the videosink element, create and realize the window to
+render the video on and then call <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> directly
+with the XID or native window handle, before starting up the pipeline.
+</p>
+<p>
+In the other and more common case, the application does not know in advance
+what GStreamer video sink element will be used for video output. This is
+usually the case when an element such as <span class="type">autovideosink</span> or <span class="type">gconfvideosink</span>
+is used. In this case, the video sink element itself is created
+asynchronously from a GStreamer streaming thread some time after the
+pipeline has been started up. When that happens, however, the video sink
+will need to know right then whether to render onto an already existing
+application window or whether to create its own window. This is when it
+posts a prepare-window-handle message, and that is also why this message needs
+to be handled in a sync bus handler which will be called from the streaming
+thread directly (because the video sink will need an answer right then).
+</p>
+<p>
+As response to the prepare-window-handle element message in the bus sync
+handler, the application may use <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> to tell
+the video sink to render onto an existing window surface. At this point the
+application should already have obtained the window handle / XID, so it
+just needs to set it. It is generally not advisable to call any GUI toolkit
+functions or window system functions from the streaming thread in which the
+prepare-window-handle message is handled, because most GUI toolkits and
+windowing systems are not thread-safe at all and a lot of care would be
+required to co-ordinate the toolkit and window system calls of the
+different threads (Gtk+ users please note: prior to Gtk+ 2.18
+<a href="http://library.gnome.org/devel/gdk/gdk3-X-Window-System-Interaction.html#GDK-WINDOW-XID:CAPS"><code class="function">GDK_WINDOW_XID()</code></a> was just a simple structure access, so generally fine to do
+within the bus sync handler; this macro was changed to a function call in
+Gtk+ 2.18 and later, which is likely to cause problems when called from a
+sync handler; see below for a better approach without <a href="http://library.gnome.org/devel/gdk/gdk3-X-Window-System-Interaction.html#GDK-WINDOW-XID:CAPS"><code class="function">GDK_WINDOW_XID()</code></a>
+used in the callback).
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id519984"></a><h3>GstVideoOverlay and Gtk+</h3>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+#include &lt;gtk/gtk.h&gt;
+#ifdef GDK_WINDOWING_X11
+#include &lt;gdk/gdkx.h&gt;  // for GDK_WINDOW_XID
+#endif
+...
+static gulong video_window_xid = 0;
+...
+static GstBusSyncReply
+bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+ // ignore anything but 'prepare-window-handle' element messages
+ if (!gst_is_video_overlay_prepare_window_handle_message (message))
+   return GST_BUS_PASS;
+
+ if (video_window_xid != 0) {
+   GstVideoOverlay *xoverlay;
+
+   // GST_MESSAGE_SRC (message) will be the video sink element
+   xoverlay = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
+   gst_video_overlay_set_window_handle (xoverlay, video_window_xid);
+ } else {
+   g_warning ("Should have obtained video_window_xid by now!");
+ }
+
+ gst_message_unref (message);
+ return GST_BUS_DROP;
+}
+...
+static void
+video_widget_realize_cb (GtkWidget * widget, gpointer data)
+{
+#if GTK_CHECK_VERSION(2,18,0)
+  // This is here just for pedagogical purposes, GDK_WINDOW_XID will call
+  // it as well in newer Gtk versions
+  if (!gdk_window_ensure_native (widget-&gt;window))
+    g_error ("Couldn't create native window needed for GstVideoOverlay!");
+#endif
+
+#ifdef GDK_WINDOWING_X11
+  video_window_xid = GDK_WINDOW_XID (video_window-&gt;window);
+#endif
+}
+...
+int
+main (int argc, char **argv)
+{
+  GtkWidget *video_window;
+  GtkWidget *app_window;
+  ...
+  app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  ...
+  video_window = gtk_drawing_area_new ();
+  g_signal_connect (video_window, "realize",
+      G_CALLBACK (video_widget_realize_cb), NULL);
+  gtk_widget_set_double_buffered (video_window, FALSE);
+  ...
+  // usually the video_window will not be directly embedded into the
+  // application window like this, but there will be many other widgets
+  // and the video window will be embedded in one of them instead
+  gtk_container_add (GTK_CONTAINER (ap_window), video_window);
+  ...
+  // show the GUI
+  gtk_widget_show_all (app_window);
+
+  // realize window now so that the video window gets created and we can
+  // obtain its XID before the pipeline is started up and the videosink
+  // asks for the XID of the window to render onto
+  gtk_widget_realize (window);
+
+  // we should have the XID now
+  g_assert (video_window_xid != 0);
+  ...
+  // set up sync handler for setting the xid once the pipeline is started
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, NULL);
+  gst_object_unref (bus);
+  ...
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  ...
+}
+</pre></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id520023"></a><h3>GstVideoOverlay and Qt</h3>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+#include &lt;glib.h&gt;
+#include &lt;gst/gst.h&gt;
+#include &lt;gst/interfaces/videooverlay.h&gt;
+
+#include &lt;QApplication&gt;
+#include &lt;QTimer&gt;
+#include &lt;QWidget&gt;
+
+int main(int argc, char *argv[])
+{
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gst_init (&amp;argc, &amp;argv);
+  QApplication app(argc, argv);
+  app.connect(&amp;app, SIGNAL(lastWindowClosed()), &amp;app, SLOT(quit ()));
+
+  // prepare the pipeline
+
+  GstElement *pipeline = gst_pipeline_new ("xvoverlay");
+  GstElement *src = gst_element_factory_make ("videotestsrc", NULL);
+  GstElement *sink = gst_element_factory_make ("xvimagesink", NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+
+  // prepare the ui
+
+  QWidget window;
+  window.resize(320, 240);
+  window.show();
+
+  WId xwinid = window.winId();
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), xwinid);
+
+  // run the pipeline
+
+  GstStateChangeReturn sret = gst_element_set_state (pipeline,
+      GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE) {
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    // Exit application
+    QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
+  }
+
+  int ret = app.exec();
+
+  window.hide();
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return ret;
+}
+</pre></div>
+<p>
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideooverlay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="gst-video-overlay-got-window-handle"></a><h3>gst_video_overlay_got_window_handle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_overlay_got_window_handle (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);</pre>
+<p>
+This will post a "have-window-handle" element message on the bus.
+</p>
+<p>
+This function should only be used by video overlay plugin developers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span> which got a window</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>handle</code></em> :</span></p></td>
+<td>a platform-specific handle referencing the window</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-overlay-set-window-handle"></a><h3>gst_video_overlay_set_window_handle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_overlay_set_window_handle (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);</pre>
+<p>
+This will call the video overlay's set_window_handle method. You
+should use this method to tell to a XOverlay to display video output to a
+specific window (e.g. an XWindow on X11). Passing 0 as the  <em class="parameter"><code>handle</code></em> will
+tell the overlay to stop using that window and create an internal one.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span> to set the window on.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>handle</code></em> :</span></p></td>
+<td>a handle referencing the window.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-overlay-prepare-window-handle"></a><h3>gst_video_overlay_prepare_window_handle ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_overlay_prepare_window_handle
+                                                        (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>);</pre>
+<p>
+This will post a "prepare-window-handle" element message on the bus
+to give applications an opportunity to call
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> before a plugin creates its own
+window.
+</p>
+<p>
+This function should only be used by video overlay plugin developers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span> which does not yet have an Window handle set</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-overlay-expose"></a><h3>gst_video_overlay_expose ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_overlay_expose            (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>);</pre>
+<p>
+Tell an overlay that it has been exposed. This will redraw the current frame
+in the drawable even if the pipeline is PAUSED.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span> to expose.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-overlay-handle-events"></a><h3>gst_video_overlay_handle_events ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_overlay_handle_events     (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> handle_events</code></em>);</pre>
+<p>
+Tell an overlay that it should handle events from the window system. These
+events are forwared upstream as navigation events. In some window system,
+events are not propagated in the window hierarchy if a client is listening
+for them. This method allows you to disable events handling completely
+from the XOverlay.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span> to expose.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>handle_events</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> indicating if events should be handled or not.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-overlay-set-render-rectangle"></a><h3>gst_video_overlay_set_render_rectangle ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_video_overlay_set_render_rectangle
+                                                        (<em class="parameter"><code><span class="type">GstVideoOverlay</span> *overlay</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> x</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> y</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre>
+<p>
+Configure a subregion as a video target within the window set by
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a>. If this is not used or not supported
+the video will fill the area of the window set as the overlay to 100%.
+By specifying the rectangle, the video can be overlayed to a specific region
+of that window only. After setting the new rectangle one should call
+<a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose" title="gst_video_overlay_expose ()"><code class="function">gst_video_overlay_expose()</code></a> to force a redraw. To unset the region pass -1 for
+the <em class="parameter"><code>width</code></em> and <em class="parameter"><code>height</code></em> parameters.
+</p>
+<p>
+This method is needed for non fullscreen video overlay in UI toolkits that
+do not support subwindows.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>overlay</code></em> :</span></p></td>
+<td>a <span class="type">GstVideoOverlay</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>the horizontal offset of the render area inside the window</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>the vertical offset of the render area inside the window</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td>the width of the render area inside the window</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td>the height of the render area inside the window</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not supported by the sink.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.29</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideosink.html b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
new file mode 100644
index 0000000..1ffb6ba
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideosink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
+<link rel="next" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideofilter.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-video.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gstreamer-libs-hierarchy.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-libs-gstvideosink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideosink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideosink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-libs-gstvideosink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-gstvideosink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideosink.top_of_page"></a>gstvideosink</span></h2>
+<p>gstvideosink — Base class for video sinks</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-libs-gstvideosink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoSink"></a><pre class="synopsis">
+#include &lt;gst/video/gstvideosink.h&gt;
+
+struct              <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct" title="struct GstVideoSink">GstVideoSink</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSinkClass" title="struct GstVideoSinkClass">GstVideoSinkClass</a>;
+struct              <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle">GstVideoRectangle</a>;
+#define             <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-HEIGHT:CAPS" title="GST_VIDEO_SINK_HEIGHT()">GST_VIDEO_SINK_HEIGHT</a>               (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-PAD:CAPS" title="GST_VIDEO_SINK_PAD()">GST_VIDEO_SINK_PAD</a>                  (obj)
+#define             <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-WIDTH:CAPS" title="GST_VIDEO_SINK_WIDTH()">GST_VIDEO_SINK_WIDTH</a>                (obj)
+<span class="returnvalue">void</span>                <a class="link" href="gst-plugins-base-libs-gstvideosink.html#gst-video-sink-center-rect" title="gst_video_sink_center_rect ()">gst_video_sink_center_rect</a>          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> dst</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> *result</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> scaling</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideosink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstVideoSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideosink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame" title='The "show-preroll-frame" property'>show-preroll-frame</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideosink.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id618482"></a><p>
+Provides useful functions and a base class for video sinks. 
+</p>
+<p>
+GstVideoSink will configure the default base sink to drop frames that
+arrive later than 20ms as this is considered the default threshold for
+observing out-of-sync frames.
+</p>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideosink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoSink-struct"></a><h3>struct GstVideoSink</h3>
+<pre class="programlisting">struct GstVideoSink {
+  gint width, height;
+};
+</pre>
+<p>
+The video sink instance structure. Derived video sinks should set the
+<em class="parameter"><code>height</code></em> and <em class="parameter"><code>width</code></em> members.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoSink-struct.width"></a>width</code></em>;</span></p></td>
+<td>video width (derived class needs to set this)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoSink-struct.height"></a>height</code></em>;</span></p></td>
+<td>video height (derived class needs to set this)</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoSinkClass"></a><h3>struct GstVideoSinkClass</h3>
+<pre class="programlisting">struct GstVideoSinkClass {
+  GstBaseSinkClass parent_class;
+
+  GstFlowReturn  (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf);
+};
+</pre>
+<p>
+The video sink class structure. Derived classes should override the
+<em class="parameter"><code>show_frame</code></em> virtual function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html#GstBaseSinkClass"><span class="type">GstBaseSinkClass</span></a> <em class="structfield"><code><a name="GstVideoSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td>the parent class structure</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstVideoSinkClass.show-frame"></a>show_frame</code></em> ()</span></p></td>
+<td>render a video frame. Maps to <code class="function">GstBaseSinkClass.render()</code> and
+<code class="function">GstBaseSinkClass.preroll()</code> vfuncs. Rendering during preroll will be
+suppressed if the <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame" title='The "show-preroll-frame" property'><span class="type">"show-preroll-frame"</span></a> property is set to
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>. Since: 0.10.25</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRectangle"></a><h3>struct GstVideoRectangle</h3>
+<pre class="programlisting">struct GstVideoRectangle {
+  gint x;
+  gint y;
+  gint w;
+  gint h;
+};
+</pre>
+<p>
+Helper structure representing a rectangular area.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoRectangle.x"></a>x</code></em>;</span></p></td>
+<td>X coordinate of rectangle's top-left point</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoRectangle.y"></a>y</code></em>;</span></p></td>
+<td>Y coordinate of rectangle's top-left point</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoRectangle.w"></a>w</code></em>;</span></p></td>
+<td>width of the rectangle</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoRectangle.h"></a>h</code></em>;</span></p></td>
+<td>height of the rectangle</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-SINK-HEIGHT:CAPS"></a><h3>GST_VIDEO_SINK_HEIGHT()</h3>
+<pre class="programlisting">#define GST_VIDEO_SINK_HEIGHT(obj) (GST_VIDEO_SINK_CAST (obj)-&gt;height)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-SINK-PAD:CAPS"></a><h3>GST_VIDEO_SINK_PAD()</h3>
+<pre class="programlisting">#define GST_VIDEO_SINK_PAD(obj) GST_BASE_SINK_PAD(obj)
+</pre>
+<p>
+Get the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> of <em class="parameter"><code>obj</code></em>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink"><span class="type">GstVideoSink</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-SINK-WIDTH:CAPS"></a><h3>GST_VIDEO_SINK_WIDTH()</h3>
+<pre class="programlisting">#define GST_VIDEO_SINK_WIDTH(obj) (GST_VIDEO_SINK_CAST (obj)-&gt;width)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-sink-center-rect"></a><h3>gst_video_sink_center_rect ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_video_sink_center_rect          (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> src</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> dst</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> *result</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> scaling</code></em>);</pre>
+<p>
+Takes <em class="parameter"><code>src</code></em> rectangle and position it at the center of <em class="parameter"><code>dst</code></em> rectangle with or
+without <em class="parameter"><code>scaling</code></em>. It handles clipping if the <em class="parameter"><code>src</code></em> rectangle is bigger than
+the <em class="parameter"><code>dst</code></em> one and <em class="parameter"><code>scaling</code></em> is set to FALSE.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> describing the source area</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dst</code></em> :</span></p></td>
+<td>the <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> describing the destination area</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
+<td>a pointer to a <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle" title="struct GstVideoRectangle"><span class="type">GstVideoRectangle</span></a> which will receive the result area</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scaling</code></em> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> indicating if scaling should be applied or not</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideosink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVideoSink--show-preroll-frame"></a><h3>The <code class="literal">"show-preroll-frame"</code> property</h3>
+<pre class="programlisting">  "show-preroll-frame"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write / Construct</pre>
+<p>
+Whether to show video frames during preroll. If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>, video
+frames will only be rendered in PLAYING state.
+</p>
+<p>Default value: TRUE</p>
+<p class="since">Since 0.10.25</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs.devhelp2 b/docs/libs/html/gst-plugins-base-libs.devhelp2
new file mode 100644
index 0000000..adb3315
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs.devhelp2
@@ -0,0 +1,1628 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GStreamer Base Plugins 0.11 Library Reference Manual" link="index.html" author="" name="gst-plugins-base-libs" version="2" language="c">
+  <chapters>
+    <sub name="GStreamer Base Plugins Libraries" link="gstreamer-plugins-base.html">
+      <sub name="Compiling" link="compiling.html"/>
+      <sub name="App Library" link="gstreamer-app.html">
+        <sub name="appsrc" link="gst-plugins-base-libs-appsrc.html"/>
+        <sub name="appsink" link="gst-plugins-base-libs-appsink.html"/>
+      </sub>
+      <sub name="Audio Library" link="gstreamer-audio.html">
+        <sub name="gstaudio" link="gst-plugins-base-libs-gstaudio.html"/>
+        <sub name="gstaudioclock" link="gst-plugins-base-libs-gstaudioclock.html"/>
+        <sub name="gstaudiodecoder" link="gst-plugins-base-libs-gstaudiodecoder.html"/>
+        <sub name="gstaudioencoder" link="gst-plugins-base-libs-gstaudioencoder.html"/>
+        <sub name="gstaudiofilter" link="gst-plugins-base-libs-gstaudiofilter.html"/>
+        <sub name="gstaudiomixerutils" link="gst-plugins-base-libs-gstaudiomixerutils.html"/>
+        <sub name="gstaudiosink" link="gst-plugins-base-libs-gstaudiosink.html"/>
+        <sub name="gstaudiosrc" link="gst-plugins-base-libs-gstaudiosrc.html"/>
+        <sub name="gstbaseaudiosink" link="gst-plugins-base-libs-gstbaseaudiosink.html"/>
+        <sub name="gstbaseaudiosrc" link="gst-plugins-base-libs-gstbaseaudiosrc.html"/>
+        <sub name="gstmultichannel" link="gst-plugins-base-libs-gstmultichannel.html"/>
+        <sub name="gstringbuffer" link="gst-plugins-base-libs-gstringbuffer.html"/>
+        <sub name="gstaudioiec61937" link="gst-plugins-base-libs-gstaudioiec61937.html"/>
+      </sub>
+      <sub name="CDDA Library" link="gstreamer-cdda.html">
+        <sub name="gstcddabasesrc" link="gst-plugins-base-libs-gstcddabasesrc.html"/>
+      </sub>
+      <sub name="FFT Library" link="gstreamer-ffft.html">
+        <sub name="gstfft" link="gst-plugins-base-libs-gstfft.html"/>
+        <sub name="gstffts16" link="gst-plugins-base-libs-gstffts16.html"/>
+        <sub name="gstffts32" link="gst-plugins-base-libs-gstffts32.html"/>
+        <sub name="gstfftf32" link="gst-plugins-base-libs-gstfftf32.html"/>
+        <sub name="gstfftf64" link="gst-plugins-base-libs-gstfftf64.html"/>
+      </sub>
+      <sub name="Interfaces Library" link="gstreamer-interfaces.html">
+        <sub name="gstcolorbalance" link="gst-plugins-base-libs-gstcolorbalance.html"/>
+        <sub name="gstcolorbalancechannel" link="gst-plugins-base-libs-gstcolorbalancechannel.html"/>
+        <sub name="gstmixer" link="gst-plugins-base-libs-gstmixer.html"/>
+        <sub name="gstmixeroptions" link="gst-plugins-base-libs-gstmixeroptions.html"/>
+        <sub name="gstmixertrack" link="gst-plugins-base-libs-gstmixertrack.html"/>
+        <sub name="gstnavigation" link="gst-plugins-base-libs-gstnavigation.html"/>
+        <sub name="gstpropertyprobe" link="gst-plugins-base-libs-gstpropertyprobe.html"/>
+        <sub name="gststreamvolume" link="gst-plugins-base-libs-gststreamvolume.html"/>
+        <sub name="gsttuner" link="gst-plugins-base-libs-gsttuner.html"/>
+        <sub name="gsttunerchannel" link="gst-plugins-base-libs-gsttunerchannel.html"/>
+        <sub name="gsttunernorm" link="gst-plugins-base-libs-gsttunernorm.html"/>
+        <sub name="gstvideoorientation" link="gst-plugins-base-libs-gstvideoorientation.html"/>
+        <sub name="gstvideooverlay" link="gst-plugins-base-libs-gstvideooverlay.html"/>
+      </sub>
+      <sub name="Network Buffer Library" link="gstreamer-netbuffer.html">
+        <sub name="gstnetbuffer" link="gst-plugins-base-libs-gstnetbuffer.html"/>
+      </sub>
+      <sub name="Riff Media Library" link="gstreamer-riff.html">
+        <sub name="gstriff" link="gst-plugins-base-libs-gstriff.html"/>
+      </sub>
+      <sub name="RTP Library" link="gstreamer-rtp.html">
+        <sub name="gstbasertpaudiopayload" link="gst-plugins-base-libs-gstbasertpaudiopayload.html"/>
+        <sub name="gstbasertpdepayload" link="gst-plugins-base-libs-gstbasertpdepayload.html"/>
+        <sub name="gstbasertppayload" link="gst-plugins-base-libs-gstbasertppayload.html"/>
+        <sub name="gstrtpbuffer" link="gst-plugins-base-libs-gstrtpbuffer.html"/>
+        <sub name="gstrtcpbuffer" link="gst-plugins-base-libs-gstrtcpbuffer.html"/>
+        <sub name="gstrtppayloads" link="gst-plugins-base-libs-gstrtppayloads.html"/>
+      </sub>
+      <sub name="RTSP Library" link="gstreamer-rtsp.html">
+        <sub name="gstrtspbase64" link="gst-plugins-base-libs-gstrtspbase64.html"/>
+        <sub name="gstrtspconnection" link="gst-plugins-base-libs-gstrtspconnection.html"/>
+        <sub name="gstrtspdefs" link="gst-plugins-base-libs-gstrtspdefs.html"/>
+        <sub name="gstrtspextension" link="gst-plugins-base-libs-gstrtspextension.html"/>
+        <sub name="gstrtspmessage" link="gst-plugins-base-libs-gstrtspmessage.html"/>
+        <sub name="gstrtsprange" link="gst-plugins-base-libs-gstrtsprange.html"/>
+        <sub name="gstrtsptransport" link="gst-plugins-base-libs-gstrtsptransport.html"/>
+        <sub name="gstrtspurl" link="gst-plugins-base-libs-gstrtspurl.html"/>
+      </sub>
+      <sub name="SDP Library" link="gstreamer-sdp.html">
+        <sub name="gstsdpmessage" link="gst-plugins-base-libs-gstsdpmessage.html"/>
+      </sub>
+      <sub name="Tag Support Library" link="gstreamer-tag.html">
+        <sub name="gsttag" link="gst-plugins-base-libs-gsttag.html"/>
+        <sub name="gsttagvorbis" link="gst-plugins-base-libs-gsttagvorbis.html"/>
+        <sub name="gsttagid3" link="gst-plugins-base-libs-gsttagid3.html"/>
+        <sub name="gsttagexif" link="gst-plugins-base-libs-gsttagexif.html"/>
+        <sub name="gsttagxmp" link="gst-plugins-base-libs-gsttagxmp.html"/>
+        <sub name="gsttagxmpwriter" link="gst-plugins-base-libs-gsttagxmpwriter.html"/>
+        <sub name="gsttagdemux" link="gst-plugins-base-libs-gsttagdemux.html"/>
+        <sub name="gsttagmux" link="gst-plugins-base-libs-gsttagmux.html"/>
+        <sub name="gsttaglanguagecodes" link="gst-plugins-base-libs-gsttaglanguagecodes.html"/>
+        <sub name="gsttaglicenses" link="gst-plugins-base-libs-gsttaglicenses.html"/>
+      </sub>
+      <sub name="Base Utils Library" link="gstreamer-base-utils.html">
+        <sub name="gstpbutils" link="gst-plugins-base-libs-gstpbutils.html"/>
+        <sub name="gstpluginsbaseversion" link="gst-plugins-base-libs-gstpluginsbaseversion.html"/>
+        <sub name="gstpbutilscodecutils" link="gst-plugins-base-libs-gstpbutilscodecutils.html"/>
+        <sub name="gstpbutilsdescriptions" link="gst-plugins-base-libs-gstpbutilsdescriptions.html"/>
+        <sub name="gstpbutilsmissingplugins" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html"/>
+        <sub name="gstpbutilsinstallplugins" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html"/>
+        <sub name="gstdiscoverer" link="gst-plugins-base-libs-gstdiscoverer.html"/>
+        <sub name="encoding-profile" link="gst-plugins-base-libs-encoding-profile.html"/>
+      </sub>
+      <sub name="Video Library" link="gstreamer-video.html">
+        <sub name="gstvideo" link="gst-plugins-base-libs-gstvideo.html"/>
+        <sub name="gstvideofilter" link="gst-plugins-base-libs-gstvideofilter.html"/>
+        <sub name="gstvideosink" link="gst-plugins-base-libs-gstvideosink.html"/>
+      </sub>
+    </sub>
+    <sub name="Object Hierarchy" link="gstreamer-libs-hierarchy.html"/>
+    <sub name="Index" link="api-index-full.html"/>
+    <sub name="Index of deprecated API" link="api-index-deprecated.html"/>
+    <sub name="Annotation Glossary" link="annotation-glossary.html"/>
+  </chapters>
+  <functions>
+    <keyword type="enum" name="enum GstAppStreamType" link="gst-plugins-base-libs-appsrc.html#GstAppStreamType"/>
+    <keyword type="function" name="gst_app_src_set_caps ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-caps" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_caps ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-caps" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_latency ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-latency" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_set_latency ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-latency" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_set_size ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-size" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_size ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-size" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_set_stream_type ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-stream-type" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_stream_type ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-stream-type" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_set_max_bytes ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-max-bytes" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_max_bytes ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-max-bytes" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_get_emit_signals ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-emit-signals" since="0.10.23"/>
+    <keyword type="function" name="gst_app_src_set_emit_signals ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals" since="0.10.23"/>
+    <keyword type="struct" name="GstAppSrcCallbacks" link="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks" since="0.10.23"/>
+    <keyword type="function" name="gst_app_src_set_callbacks ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks" since="0.10.23"/>
+    <keyword type="function" name="gst_app_src_push_buffer ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer" since="0.10.22"/>
+    <keyword type="function" name="gst_app_src_end_of_stream ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_set_caps ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-set-caps" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_get_caps ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-get-caps" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_is_eos ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_set_emit_signals ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-set-emit-signals" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_get_emit_signals ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-get-emit-signals" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_set_max_buffers ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-set-max-buffers" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_get_max_buffers ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-get-max-buffers" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_set_drop ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-set-drop" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_get_drop ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-get-drop" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_pull_preroll ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_pull_buffer ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer" since="0.10.22"/>
+    <keyword type="function" name="gst_app_sink_pull_buffer_list ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer-list"/>
+    <keyword type="struct" name="GstAppSinkCallbacks" link="gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks" since="0.10.23"/>
+    <keyword type="function" name="gst_app_sink_set_callbacks ()" link="gst-plugins-base-libs-appsink.html#gst-app-sink-set-callbacks" since="0.10.23"/>
+    <keyword type="enum" name="enum GstAudioFlags" link="gst-plugins-base-libs-gstaudio.html#GstAudioFlags"/>
+    <keyword type="enum" name="enum GstAudioFormat" link="gst-plugins-base-libs-gstaudio.html#GstAudioFormat"/>
+    <keyword type="enum" name="enum GstAudioFormatFlags" link="gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags"/>
+    <keyword type="struct" name="struct GstAudioFormatInfo" link="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo"/>
+    <keyword type="struct" name="struct GstAudioInfo" link="gst-plugins-base-libs-gstaudio.html#GstAudioInfo"/>
+    <keyword type="function" name="gst_audio_info_init ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-info-init"/>
+    <keyword type="function" name="gst_audio_info_from_caps ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-info-from-caps"/>
+    <keyword type="function" name="gst_audio_info_to_caps ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-info-to-caps"/>
+    <keyword type="function" name="gst_audio_info_convert ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-info-convert"/>
+    <keyword type="function" name="gst_audio_format_get_info ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-format-get-info"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_DEPTH()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-DEPTH:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_ENDIANNESS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_FLAGS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FLAGS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_FORMAT()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FORMAT:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_IS_FLOAT()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_IS_INTEGER()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_IS_SIGNED()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_NAME()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-NAME:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_FORMAT_INFO_WIDTH()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-WIDTH:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_BPF()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPF:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_BPS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_CHANNELS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-CHANNELS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_DEPTH()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-DEPTH:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_FLAGS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FLAGS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_FORMAT()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FORMAT:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_NAME()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-NAME:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_POSITION()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-POSITION:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_RATE()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-RATE:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_INFO_WIDTH()" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-WIDTH:CAPS"/>
+    <keyword type="macro" name="GST_FRAMES_TO_CLOCK_TIME()" link="gst-plugins-base-libs-gstaudio.html#GST-FRAMES-TO-CLOCK-TIME:CAPS"/>
+    <keyword type="macro" name="GST_CLOCK_TIME_TO_FRAMES()" link="gst-plugins-base-libs-gstaudio.html#GST-CLOCK-TIME-TO-FRAMES:CAPS"/>
+    <keyword type="macro" name="GST_AUDIO_DEF_RATE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-DEF-RATE:CAPS"/>
+    <keyword type="function" name="gst_audio_buffer_clip ()" link="gst-plugins-base-libs-gstaudio.html#gst-audio-buffer-clip" since="0.10.14"/>
+    <keyword type="struct" name="struct GstAudioClock" link="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock-struct"/>
+    <keyword type="function" name="GstAudioClockGetTimeFunc ()" link="gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc"/>
+    <keyword type="function" name="gst_audio_clock_new ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new"/>
+    <keyword type="function" name="gst_audio_clock_new_full ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new-full" since="0.10.31"/>
+    <keyword type="function" name="gst_audio_clock_adjust ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-adjust" since="0.10.23"/>
+    <keyword type="function" name="gst_audio_clock_get_time ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-get-time" since="0.10.23"/>
+    <keyword type="function" name="gst_audio_clock_reset ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-reset"/>
+    <keyword type="function" name="gst_audio_clock_invalidate ()" link="gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-invalidate" since="0.10.31"/>
+    <keyword type="struct" name="struct GstAudioDecoder" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct"/>
+    <keyword type="struct" name="struct GstAudioDecoderClass" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_DECODER_ERROR()" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-ERROR:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_DECODER_SINK_NAME" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-NAME:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_DECODER_SINK_PAD()" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-PAD:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_DECODER_SRC_NAME" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-NAME:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_DECODER_SRC_PAD()" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-PAD:CAPS" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_finish_frame ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-finish-frame"/>
+    <keyword type="function" name="gst_audio_decoder_get_audio_info ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-audio-info" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_byte_time ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-byte-time" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_delay ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-delay" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_latency ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_max_errors ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-max-errors" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_min_latency ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-min-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_parse_state ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-parse-state" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_plc ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_plc_aware ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc-aware" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_get_tolerance ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-tolerance" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_byte_time ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-byte-time" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_latency ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_max_errors ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-max-errors" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_min_latency ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-min-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_plc ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_plc_aware ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_decoder_set_tolerance ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance" since="0.10.36"/>
+    <keyword type="property" name="The &quot;min-latency&quot; property" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--min-latency"/>
+    <keyword type="property" name="The &quot;plc&quot; property" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--plc"/>
+    <keyword type="property" name="The &quot;tolerance&quot; property" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--tolerance"/>
+    <keyword type="struct" name="struct GstAudioEncoder" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder-struct"/>
+    <keyword type="struct" name="struct GstAudioEncoderClass" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoderClass" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_ENCODER_SEGMENT()" link="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SEGMENT:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_ENCODER_SINK_NAME" link="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-NAME:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_ENCODER_SINK_PAD()" link="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-PAD:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_ENCODER_SRC_NAME" link="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-NAME:CAPS" since="0.10.36"/>
+    <keyword type="macro" name="GST_AUDIO_ENCODER_SRC_PAD()" link="gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-PAD:CAPS" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_finish_frame ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-finish-frame" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_audio_info ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-audio-info" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_frame_max ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-max" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_frame_samples_min ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-min" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_frame_samples_max ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-max"/>
+    <keyword type="function" name="gst_audio_encoder_get_hard_resync ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-hard-resync"/>
+    <keyword type="function" name="gst_audio_encoder_get_latency ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_lookahead ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-lookahead"/>
+    <keyword type="function" name="gst_audio_encoder_get_mark_granule ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-mark-granule" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_perfect_timestamp ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-perfect-timestamp" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_get_tolerance ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-tolerance" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_proxy_getcaps ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-proxy-getcaps" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_frame_max ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-max" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_frame_samples_min ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-min" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_frame_samples_max ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-max" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_hard_resync ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-hard-resync"/>
+    <keyword type="function" name="gst_audio_encoder_set_latency ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-latency" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_lookahead ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-lookahead" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_mark_granule ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-mark-granule" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_perfect_timestamp ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-perfect-timestamp" since="0.10.36"/>
+    <keyword type="function" name="gst_audio_encoder_set_tolerance ()" link="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-tolerance" since="0.10.36"/>
+    <keyword type="property" name="The &quot;hard-resync&quot; property" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--hard-resync"/>
+    <keyword type="property" name="The &quot;mark-granule&quot; property" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--mark-granule"/>
+    <keyword type="property" name="The &quot;perfect-timestamp&quot; property" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--perfect-timestamp"/>
+    <keyword type="property" name="The &quot;tolerance&quot; property" link="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--tolerance"/>
+    <keyword type="struct" name="struct GstAudioFilter" link="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct"/>
+    <keyword type="struct" name="struct GstAudioFilterClass" link="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass" since="0.10.12"/>
+    <keyword type="function" name="gst_audio_filter_class_add_pad_templates ()" link="gst-plugins-base-libs-gstaudiofilter.html#gst-audio-filter-class-add-pad-templates" since="0.10.12"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstaudiomixerutils.html#id439560"/>
+    <keyword type="function" name="GstAudioMixerFilterFunc ()" link="gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc"/>
+    <keyword type="function" name="gst_audio_default_registry_mixer_filter ()" link="gst-plugins-base-libs-gstaudiomixerutils.html#gst-audio-default-registry-mixer-filter" since="0.10.2"/>
+    <keyword type="struct" name="struct GstAudioSink" link="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink-struct"/>
+    <keyword type="struct" name="struct GstAudioSinkClass" link="gst-plugins-base-libs-gstaudiosink.html#GstAudioSinkClass"/>
+    <keyword type="struct" name="struct GstAudioSrc" link="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc-struct"/>
+    <keyword type="struct" name="struct GstAudioSrcClass" link="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrcClass"/>
+    <keyword type="struct" name="struct GstBaseAudioSink" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink-struct"/>
+    <keyword type="struct" name="struct GstBaseAudioSinkClass" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkClass"/>
+    <keyword type="enum" name="enum GstBaseAudioSinkSlaveMethod" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod"/>
+    <keyword type="macro" name="GST_BASE_AUDIO_SINK_CLOCK()" link="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-CLOCK:CAPS"/>
+    <keyword type="macro" name="GST_BASE_AUDIO_SINK_PAD()" link="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-PAD:CAPS"/>
+    <keyword type="function" name="gst_base_audio_sink_create_ringbuffer ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-create-ringbuffer"/>
+    <keyword type="function" name="gst_base_audio_sink_set_provide_clock ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-provide-clock" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_sink_get_provide_clock ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-provide-clock" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_sink_set_slave_method ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-slave-method" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_sink_get_slave_method ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-slave-method" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_sink_get_drift_tolerance ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-drift-tolerance" since="0.10.31"/>
+    <keyword type="function" name="gst_base_audio_sink_set_drift_tolerance ()" link="gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-drift-tolerance" since="0.10.31"/>
+    <keyword type="property" name="The &quot;buffer-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--buffer-time"/>
+    <keyword type="property" name="The &quot;can-activate-pull&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--can-activate-pull"/>
+    <keyword type="property" name="The &quot;drift-tolerance&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--drift-tolerance"/>
+    <keyword type="property" name="The &quot;latency-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--latency-time"/>
+    <keyword type="property" name="The &quot;provide-clock&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--provide-clock"/>
+    <keyword type="property" name="The &quot;slave-method&quot; property" link="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--slave-method"/>
+    <keyword type="struct" name="struct GstBaseAudioSrc" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc-struct"/>
+    <keyword type="struct" name="struct GstBaseAudioSrcClass" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcClass"/>
+    <keyword type="enum" name="enum GstBaseAudioSrcSlaveMethod" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod"/>
+    <keyword type="macro" name="GST_BASE_AUDIO_SRC_CLOCK()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-CLOCK:CAPS"/>
+    <keyword type="macro" name="GST_BASE_AUDIO_SRC_PAD()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-PAD:CAPS"/>
+    <keyword type="function" name="gst_base_audio_src_create_ringbuffer ()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-create-ringbuffer"/>
+    <keyword type="function" name="gst_base_audio_src_set_provide_clock ()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-provide-clock" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_src_get_provide_clock ()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-provide-clock" since="0.10.16"/>
+    <keyword type="function" name="gst_base_audio_src_get_slave_method ()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-slave-method" since="0.10.20"/>
+    <keyword type="function" name="gst_base_audio_src_set_slave_method ()" link="gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-slave-method" since="0.10.20"/>
+    <keyword type="property" name="The &quot;actual-buffer-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-buffer-time"/>
+    <keyword type="property" name="The &quot;actual-latency-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-latency-time"/>
+    <keyword type="property" name="The &quot;buffer-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--buffer-time"/>
+    <keyword type="property" name="The &quot;latency-time&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--latency-time"/>
+    <keyword type="property" name="The &quot;provide-clock&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--provide-clock"/>
+    <keyword type="property" name="The &quot;slave-method&quot; property" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--slave-method"/>
+    <keyword type="enum" name="enum GstAudioChannelPosition" link="gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition"/>
+    <keyword type="function" name="gst_audio_fixate_channel_positions ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-fixate-channel-positions"/>
+    <keyword type="function" name="gst_audio_get_channel_positions ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-get-channel-positions"/>
+    <keyword type="function" name="gst_audio_set_caps_channel_positions_list ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-caps-channel-positions-list"/>
+    <keyword type="function" name="gst_audio_set_channel_positions ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-channel-positions"/>
+    <keyword type="function" name="gst_audio_set_structure_channel_positions_list ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-structure-channel-positions-list"/>
+    <keyword type="function" name="gst_audio_check_channel_positions ()" link="gst-plugins-base-libs-gstmultichannel.html#gst-audio-check-channel-positions" since="0.10.20"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstringbuffer.html#id484218"/>
+    <keyword type="struct" name="struct GstRingBuffer" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer-struct"/>
+    <keyword type="struct" name="struct GstRingBufferClass" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferClass"/>
+    <keyword type="struct" name="struct GstRingBufferSpec" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec"/>
+    <keyword type="function" name="GstRingBufferCallback ()" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback"/>
+    <keyword type="enum" name="enum GstRingBufferSegState" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState"/>
+    <keyword type="enum" name="enum GstRingBufferState" link="gst-plugins-base-libs-gstringbuffer.html#GstRingBufferState"/>
+    <keyword type="enum" name="enum GstBufferFormatType" link="gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType"/>
+    <keyword type="macro" name="GST_RING_BUFFER_BROADCAST()" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-BROADCAST:CAPS"/>
+    <keyword type="macro" name="GST_RING_BUFFER_GET_COND()" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-GET-COND:CAPS"/>
+    <keyword type="macro" name="GST_RING_BUFFER_SIGNAL()" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-SIGNAL:CAPS"/>
+    <keyword type="macro" name="GST_RING_BUFFER_WAIT()" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-WAIT:CAPS"/>
+    <keyword type="function" name="gst_ring_buffer_set_callback ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback"/>
+    <keyword type="function" name="gst_ring_buffer_acquire ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-acquire"/>
+    <keyword type="function" name="gst_ring_buffer_release ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release"/>
+    <keyword type="function" name="gst_ring_buffer_is_acquired ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-acquired"/>
+    <keyword type="function" name="gst_ring_buffer_activate ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-activate" since="0.10.22."/>
+    <keyword type="function" name="gst_ring_buffer_is_active ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-active" since="0.10.22."/>
+    <keyword type="function" name="gst_ring_buffer_start ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-start"/>
+    <keyword type="function" name="gst_ring_buffer_pause ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-pause"/>
+    <keyword type="function" name="gst_ring_buffer_stop ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-stop"/>
+    <keyword type="function" name="gst_ring_buffer_delay ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay"/>
+    <keyword type="function" name="gst_ring_buffer_samples_done ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-samples-done"/>
+    <keyword type="function" name="gst_ring_buffer_set_sample ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-sample"/>
+    <keyword type="function" name="gst_ring_buffer_commit ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit"/>
+    <keyword type="function" name="gst_ring_buffer_commit_full ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full" since="0.10.11."/>
+    <keyword type="function" name="gst_ring_buffer_convert ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-convert" since="0.10.22."/>
+    <keyword type="function" name="gst_ring_buffer_prepare_read ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-prepare-read"/>
+    <keyword type="function" name="gst_ring_buffer_read ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-read"/>
+    <keyword type="function" name="gst_ring_buffer_clear ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear"/>
+    <keyword type="function" name="gst_ring_buffer_clear_all ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear-all"/>
+    <keyword type="function" name="gst_ring_buffer_advance ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-advance"/>
+    <keyword type="function" name="gst_ring_buffer_close_device ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-close-device"/>
+    <keyword type="function" name="gst_ring_buffer_open_device ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-open-device"/>
+    <keyword type="function" name="gst_ring_buffer_device_is_open ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-device-is-open"/>
+    <keyword type="function" name="gst_ring_buffer_may_start ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-may-start" since="0.10.6"/>
+    <keyword type="function" name="gst_ring_buffer_parse_caps ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-parse-caps"/>
+    <keyword type="function" name="gst_ring_buffer_set_flushing ()" link="gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-flushing"/>
+    <keyword type="function" name="gst_audio_iec61937_frame_size ()" link="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-frame-size" since="0.10.35"/>
+    <keyword type="function" name="gst_audio_iec61937_payload ()" link="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload" since="0.10.35"/>
+    <keyword type="" name="Using GstCddaBaseSrc-based elements in applications" link="gst-plugins-base-libs-gstcddabasesrc.html#id471435"/>
+    <keyword type="struct" name="struct GstCddaBaseSrc" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc-struct"/>
+    <keyword type="struct" name="struct GstCddaBaseSrcClass" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcClass"/>
+    <keyword type="struct" name="struct GstCddaBaseSrcTrack" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack"/>
+    <keyword type="enum" name="enum GstCddaBaseSrcMode" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode"/>
+    <keyword type="function" name="gst_cdda_base_src_add_track ()" link="gst-plugins-base-libs-gstcddabasesrc.html#gst-cdda-base-src-add-track"/>
+    <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--device"/>
+    <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--mode"/>
+    <keyword type="property" name="The &quot;track&quot; property" link="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--track"/>
+    <keyword type="enum" name="enum GstFFTWindow" link="gst-plugins-base-libs-gstfft.html#GstFFTWindow"/>
+    <keyword type="function" name="gst_fft_next_fast_length ()" link="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length"/>
+    <keyword type="struct" name="struct GstFFTS16" link="gst-plugins-base-libs-gstffts16.html#GstFFTS16"/>
+    <keyword type="struct" name="struct GstFFTS16Complex" link="gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex"/>
+    <keyword type="function" name="gst_fft_s16_new ()" link="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new"/>
+    <keyword type="function" name="gst_fft_s16_fft ()" link="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft"/>
+    <keyword type="function" name="gst_fft_s16_inverse_fft ()" link="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft"/>
+    <keyword type="function" name="gst_fft_s16_window ()" link="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-window"/>
+    <keyword type="function" name="gst_fft_s16_free ()" link="gst-plugins-base-libs-gstffts16.html#gst-fft-s16-free"/>
+    <keyword type="struct" name="struct GstFFTS32" link="gst-plugins-base-libs-gstffts32.html#GstFFTS32"/>
+    <keyword type="struct" name="struct GstFFTS32Complex" link="gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex"/>
+    <keyword type="function" name="gst_fft_s32_new ()" link="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new"/>
+    <keyword type="function" name="gst_fft_s32_fft ()" link="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft"/>
+    <keyword type="function" name="gst_fft_s32_inverse_fft ()" link="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft"/>
+    <keyword type="function" name="gst_fft_s32_window ()" link="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-window"/>
+    <keyword type="function" name="gst_fft_s32_free ()" link="gst-plugins-base-libs-gstffts32.html#gst-fft-s32-free"/>
+    <keyword type="struct" name="struct GstFFTF32" link="gst-plugins-base-libs-gstfftf32.html#GstFFTF32"/>
+    <keyword type="struct" name="struct GstFFTF32Complex" link="gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex"/>
+    <keyword type="function" name="gst_fft_f32_new ()" link="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new"/>
+    <keyword type="function" name="gst_fft_f32_fft ()" link="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft"/>
+    <keyword type="function" name="gst_fft_f32_inverse_fft ()" link="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft"/>
+    <keyword type="function" name="gst_fft_f32_window ()" link="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-window"/>
+    <keyword type="function" name="gst_fft_f32_free ()" link="gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-free"/>
+    <keyword type="struct" name="struct GstFFTF64" link="gst-plugins-base-libs-gstfftf64.html#GstFFTF64"/>
+    <keyword type="struct" name="struct GstFFTF64Complex" link="gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex"/>
+    <keyword type="function" name="gst_fft_f64_new ()" link="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new"/>
+    <keyword type="function" name="gst_fft_f64_fft ()" link="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-fft"/>
+    <keyword type="function" name="gst_fft_f64_inverse_fft ()" link="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-inverse-fft"/>
+    <keyword type="function" name="gst_fft_f64_window ()" link="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-window"/>
+    <keyword type="function" name="gst_fft_f64_free ()" link="gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-free"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstcolorbalance.html#id487947"/>
+    <keyword type="struct" name="GstColorBalance" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct"/>
+    <keyword type="struct" name="struct GstColorBalanceClass" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceClass"/>
+    <keyword type="enum" name="enum GstColorBalanceType" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType"/>
+    <keyword type="function" name="gst_color_balance_list_channels ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-list-channels"/>
+    <keyword type="function" name="gst_color_balance_get_value ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-value"/>
+    <keyword type="function" name="gst_color_balance_set_value ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-set-value"/>
+    <keyword type="function" name="gst_color_balance_value_changed ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-value-changed"/>
+    <keyword type="function" name="gst_color_balance_get_balance_type ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-balance-type" since="0.10.24"/>
+    <keyword type="signal" name="The &quot;value-changed&quot; signal" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstcolorbalancechannel.html#id494532"/>
+    <keyword type="struct" name="struct GstColorBalanceChannel" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-struct"/>
+    <keyword type="struct" name="struct GstColorBalanceChannelClass" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannelClass"/>
+    <keyword type="signal" name="The &quot;value-changed&quot; signal" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed"/>
+    <keyword type="struct" name="GstMixer" link="gst-plugins-base-libs-gstmixer.html#GstMixer-struct"/>
+    <keyword type="enum" name="enum GstMixerType" link="gst-plugins-base-libs-gstmixer.html#GstMixerType"/>
+    <keyword type="enum" name="enum GstMixerFlags" link="gst-plugins-base-libs-gstmixer.html#GstMixerFlags" since="0.10.14"/>
+    <keyword type="enum" name="enum GstMixerMessageType" link="gst-plugins-base-libs-gstmixer.html#GstMixerMessageType" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_list_tracks ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-list-tracks"/>
+    <keyword type="function" name="gst_mixer_get_volume ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-volume"/>
+    <keyword type="function" name="gst_mixer_set_volume ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-volume"/>
+    <keyword type="function" name="gst_mixer_set_mute ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-mute"/>
+    <keyword type="function" name="gst_mixer_set_record ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-record"/>
+    <keyword type="function" name="gst_mixer_set_option ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-set-option"/>
+    <keyword type="function" name="gst_mixer_mute_toggled ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-mute-toggled"/>
+    <keyword type="function" name="gst_mixer_record_toggled ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-record-toggled"/>
+    <keyword type="function" name="gst_mixer_volume_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-volume-changed"/>
+    <keyword type="function" name="gst_mixer_option_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-option-changed"/>
+    <keyword type="function" name="gst_mixer_options_list_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-options-list-changed" since="0.10.18"/>
+    <keyword type="function" name="gst_mixer_get_option ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-option"/>
+    <keyword type="function" name="gst_mixer_mixer_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-mixer-changed" since="0.10.18"/>
+    <keyword type="function" name="gst_mixer_get_mixer_flags ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-flags"/>
+    <keyword type="function" name="gst_mixer_get_mixer_type ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-type" since="0.10.24"/>
+    <keyword type="function" name="gst_mixer_message_get_type ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-get-type" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_message_parse_mute_toggled ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-mute-toggled" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_message_parse_option_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-option-changed" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_message_parse_record_toggled ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-record-toggled" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_message_parse_volume_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-volume-changed" since="0.10.14"/>
+    <keyword type="function" name="gst_mixer_message_parse_options_list_changed ()" link="gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-options-list-changed" since="0.10.18"/>
+    <keyword type="signal" name="The &quot;mute-toggled&quot; signal" link="gst-plugins-base-libs-gstmixer.html#GstMixer-mute-toggled"/>
+    <keyword type="signal" name="The &quot;option-changed&quot; signal" link="gst-plugins-base-libs-gstmixer.html#GstMixer-option-changed"/>
+    <keyword type="signal" name="The &quot;record-toggled&quot; signal" link="gst-plugins-base-libs-gstmixer.html#GstMixer-record-toggled"/>
+    <keyword type="signal" name="The &quot;volume-changed&quot; signal" link="gst-plugins-base-libs-gstmixer.html#GstMixer-volume-changed"/>
+    <keyword type="struct" name="struct GstMixerOptions" link="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions-struct"/>
+    <keyword type="function" name="gst_mixer_options_get_values ()" link="gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values"/>
+    <keyword type="struct" name="struct GstMixerTrack" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack-struct"/>
+    <keyword type="enum" name="enum GstMixerTrackFlags" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrackFlags"/>
+    <keyword type="macro" name="GST_MIXER_TRACK_HAS_FLAG()" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS"/>
+    <keyword type="property" name="The &quot;flags&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--flags"/>
+    <keyword type="property" name="The &quot;index&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--index"/>
+    <keyword type="property" name="The &quot;label&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--label"/>
+    <keyword type="property" name="The &quot;max-volume&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--max-volume"/>
+    <keyword type="property" name="The &quot;min-volume&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--min-volume"/>
+    <keyword type="property" name="The &quot;num-channels&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--num-channels"/>
+    <keyword type="property" name="The &quot;untranslated-label&quot; property" link="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--untranslated-label"/>
+    <keyword type="struct" name="GstNavigation" link="gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct"/>
+    <keyword type="struct" name="struct GstNavigationInterface" link="gst-plugins-base-libs-gstnavigation.html#GstNavigationInterface"/>
+    <keyword type="enum" name="enum GstNavigationCommand" link="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" since="0.10.23"/>
+    <keyword type="enum" name="enum GstNavigationEventType" link="gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType" since="0.10.23"/>
+    <keyword type="enum" name="enum GstNavigationMessageType" link="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" since="0.10.23"/>
+    <keyword type="enum" name="enum GstNavigationQueryType" link="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType"/>
+    <keyword type="function" name="gst_navigation_send_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-event"/>
+    <keyword type="function" name="gst_navigation_send_key_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-key-event"/>
+    <keyword type="function" name="gst_navigation_send_mouse_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-mouse-event"/>
+    <keyword type="function" name="gst_navigation_send_command ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-command" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_event_parse_command ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-command" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_event_parse_key_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_event_parse_mouse_button_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_event_parse_mouse_move_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-move-event" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_get_type ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_new_angles_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_new_commands_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_new_mouse_over ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_parse_mouse_over ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_message_parse_angles_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_new_angles ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_get_type ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_new_commands ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_parse_angles ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-angles" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_parse_commands_length ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-length" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_parse_commands_nth ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-nth" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_set_angles ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-angles" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_set_commands ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commands" since="0.10.23"/>
+    <keyword type="function" name="gst_navigation_query_set_commandsv ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commandsv" since="0.10.23"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_ROOT_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS"/>
+    <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_TITLE_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS"/>
+    <keyword type="struct" name="GstPropertyProbe" link="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-struct"/>
+    <keyword type="struct" name="struct GstPropertyProbeInterface" link="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbeInterface"/>
+    <keyword type="function" name="gst_property_probe_get_properties ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-properties"/>
+    <keyword type="function" name="gst_property_probe_get_property ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-property"/>
+    <keyword type="function" name="gst_property_probe_get_values ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values"/>
+    <keyword type="function" name="gst_property_probe_get_values_name ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values-name"/>
+    <keyword type="function" name="gst_property_probe_needs_probe ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe"/>
+    <keyword type="function" name="gst_property_probe_needs_probe_name ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe-name"/>
+    <keyword type="function" name="gst_property_probe_probe_and_get_values ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values"/>
+    <keyword type="function" name="gst_property_probe_probe_and_get_values_name ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values-name"/>
+    <keyword type="function" name="gst_property_probe_probe_property ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property"/>
+    <keyword type="function" name="gst_property_probe_probe_property_name ()" link="gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property-name"/>
+    <keyword type="signal" name="The &quot;probe-needed&quot; signal" link="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-probe-needed"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gststreamvolume.html#id504808"/>
+    <keyword type="struct" name="GstStreamVolume" link="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume-struct"/>
+    <keyword type="enum" name="enum GstStreamVolumeFormat" link="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat" since="0.10.25"/>
+    <keyword type="function" name="gst_stream_volume_get_volume ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume" since="0.10.25"/>
+    <keyword type="function" name="gst_stream_volume_set_volume ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume" since="0.10.25"/>
+    <keyword type="function" name="gst_stream_volume_get_mute ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute" since="0.10.25"/>
+    <keyword type="function" name="gst_stream_volume_set_mute ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-mute" since="0.10.25"/>
+    <keyword type="function" name="gst_stream_volume_convert_volume ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume" since="0.10.25"/>
+    <keyword type="property" name="The &quot;mute&quot; property" link="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--mute"/>
+    <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--volume"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttuner.html#id516504"/>
+    <keyword type="struct" name="GstTuner" link="gst-plugins-base-libs-gsttuner.html#GstTuner-struct"/>
+    <keyword type="struct" name="struct GstTunerClass" link="gst-plugins-base-libs-gsttuner.html#GstTunerClass"/>
+    <keyword type="function" name="gst_tuner_list_channels ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-channels"/>
+    <keyword type="function" name="gst_tuner_get_channel ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-channel"/>
+    <keyword type="function" name="gst_tuner_set_channel ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-channel"/>
+    <keyword type="function" name="gst_tuner_list_norms ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-list-norms"/>
+    <keyword type="function" name="gst_tuner_get_norm ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-norm"/>
+    <keyword type="function" name="gst_tuner_set_norm ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-norm"/>
+    <keyword type="function" name="gst_tuner_get_frequency ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-get-frequency"/>
+    <keyword type="function" name="gst_tuner_set_frequency ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency"/>
+    <keyword type="function" name="gst_tuner_signal_strength ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength"/>
+    <keyword type="function" name="gst_tuner_find_norm_by_name ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-norm-by-name"/>
+    <keyword type="function" name="gst_tuner_find_channel_by_name ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-find-channel-by-name"/>
+    <keyword type="function" name="gst_tuner_channel_changed ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-channel-changed"/>
+    <keyword type="function" name="gst_tuner_norm_changed ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-norm-changed"/>
+    <keyword type="function" name="gst_tuner_frequency_changed ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-frequency-changed"/>
+    <keyword type="function" name="gst_tuner_signal_changed ()" link="gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-changed"/>
+    <keyword type="signal" name="The &quot;channel-changed&quot; signal" link="gst-plugins-base-libs-gsttuner.html#GstTuner-channel-changed"/>
+    <keyword type="signal" name="The &quot;frequency-changed&quot; signal" link="gst-plugins-base-libs-gsttuner.html#GstTuner-frequency-changed"/>
+    <keyword type="signal" name="The &quot;norm-changed&quot; signal" link="gst-plugins-base-libs-gsttuner.html#GstTuner-norm-changed"/>
+    <keyword type="signal" name="The &quot;signal-changed&quot; signal" link="gst-plugins-base-libs-gsttuner.html#GstTuner-signal-changed"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttunerchannel.html#id451732"/>
+    <keyword type="struct" name="struct GstTunerChannel" link="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-struct"/>
+    <keyword type="enum" name="enum GstTunerChannelFlags" link="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags"/>
+    <keyword type="macro" name="GST_TUNER_CHANNEL_HAS_FLAG()" link="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS"/>
+    <keyword type="signal" name="The &quot;frequency-changed&quot; signal" link="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-frequency-changed"/>
+    <keyword type="signal" name="The &quot;signal-changed&quot; signal" link="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-signal-changed"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttunernorm.html#id445343"/>
+    <keyword type="struct" name="struct GstTunerNorm" link="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm-struct"/>
+    <keyword type="struct" name="GstVideoOrientation" link="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct"/>
+    <keyword type="struct" name="struct GstVideoOrientationInterface" link="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface"/>
+    <keyword type="function" name="gst_video_orientation_get_hcenter ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hcenter" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_get_hflip ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hflip" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_get_vcenter ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vcenter" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_get_vflip ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vflip" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_set_hcenter ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hcenter" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_set_hflip ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hflip" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_set_vcenter ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vcenter" since="0.10.11"/>
+    <keyword type="function" name="gst_video_orientation_set_vflip ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vflip" since="0.10.11"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstvideooverlay.html#id511383"/>
+    <keyword type="" name="Two basic usage scenarios" link="gst-plugins-base-libs-gstvideooverlay.html#id511467"/>
+    <keyword type="" name="GstVideoOverlay and Gtk+" link="gst-plugins-base-libs-gstvideooverlay.html#id519984"/>
+    <keyword type="" name="GstVideoOverlay and Qt" link="gst-plugins-base-libs-gstvideooverlay.html#id520023"/>
+    <keyword type="function" name="gst_video_overlay_got_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle"/>
+    <keyword type="function" name="gst_video_overlay_set_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" since="0.10.31"/>
+    <keyword type="function" name="gst_video_overlay_prepare_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle"/>
+    <keyword type="function" name="gst_video_overlay_expose ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose"/>
+    <keyword type="function" name="gst_video_overlay_handle_events ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-handle-events" since="0.10.12"/>
+    <keyword type="function" name="gst_video_overlay_set_render_rectangle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-render-rectangle" since="0.10.29"/>
+    <keyword type="struct" name="GstNetBuffer" link="gst-plugins-base-libs-gstnetbuffer.html#GstNetBuffer"/>
+    <keyword type="enum" name="enum GstNetType" link="gst-plugins-base-libs-gstnetbuffer.html#GstNetType"/>
+    <keyword type="macro" name="GST_NETADDRESS_MAX_LEN" link="gst-plugins-base-libs-gstnetbuffer.html#GST-NETADDRESS-MAX-LEN:CAPS" since="0.10.24"/>
+    <keyword type="struct" name="struct GstNetAddress" link="gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress"/>
+    <keyword type="function" name="gst_netaddress_get_net_type ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-net-type"/>
+    <keyword type="function" name="gst_netaddress_set_ip4_address ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip4-address"/>
+    <keyword type="function" name="gst_netaddress_get_ip4_address ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip4-address"/>
+    <keyword type="function" name="gst_netaddress_set_ip6_address ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip6-address"/>
+    <keyword type="function" name="gst_netaddress_get_ip6_address ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip6-address"/>
+    <keyword type="function" name="gst_netaddress_get_address_bytes ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-address-bytes" since="0.10.22"/>
+    <keyword type="function" name="gst_netaddress_set_address_bytes ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-address-bytes" since="0.10.22"/>
+    <keyword type="function" name="gst_netaddress_equal ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-equal" since="0.10.18"/>
+    <keyword type="function" name="gst_netaddress_to_string ()" link="gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-to-string" since="0.10.24"/>
+    <keyword type="function" name="gst_riff_create_audio_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-caps"/>
+    <keyword type="function" name="gst_riff_create_audio_template_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-template-caps"/>
+    <keyword type="function" name="gst_riff_create_iavs_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-caps"/>
+    <keyword type="function" name="gst_riff_create_iavs_template_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-template-caps"/>
+    <keyword type="function" name="gst_riff_create_video_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-caps"/>
+    <keyword type="function" name="gst_riff_create_video_template_caps ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-create-video-template-caps"/>
+    <keyword type="function" name="gst_riff_init ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-init"/>
+    <keyword type="function" name="gst_riff_parse_chunk ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-chunk"/>
+    <keyword type="function" name="gst_riff_parse_file_header ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-file-header"/>
+    <keyword type="function" name="gst_riff_parse_info ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-info"/>
+    <keyword type="function" name="gst_riff_parse_strf_auds ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-auds"/>
+    <keyword type="function" name="gst_riff_parse_strf_iavs ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-iavs"/>
+    <keyword type="function" name="gst_riff_parse_strf_vids ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-vids"/>
+    <keyword type="function" name="gst_riff_parse_strh ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strh"/>
+    <keyword type="function" name="gst_riff_read_chunk ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-read-chunk"/>
+    <keyword type="" name="Usage" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#id529590"/>
+    <keyword type="struct" name="struct GstBaseRTPAudioPayload" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload-struct"/>
+    <keyword type="struct" name="struct GstBaseRTPAudioPayloadClass" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayloadClass"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_set_frame_based ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-based"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_set_frame_options ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-options"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_set_sample_based ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-based"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_set_sample_options ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-options"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_get_adapter ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-get-adapter" since="0.10.13"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_push ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-push" since="0.10.13"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_flush ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-flush" since="0.10.25"/>
+    <keyword type="function" name="gst_base_rtp_audio_payload_set_samplebits_options ()" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-samplebits-options" since="0.10.18"/>
+    <keyword type="property" name="The &quot;buffer-list&quot; property" link="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload--buffer-list"/>
+    <keyword type="struct" name="struct GstBaseRTPDepayload" link="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload-struct"/>
+    <keyword type="struct" name="struct GstBaseRTPDepayloadClass" link="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayloadClass"/>
+    <keyword type="macro" name="GST_BASE_RTP_DEPAYLOAD_SINKPAD()" link="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS"/>
+    <keyword type="macro" name="GST_BASE_RTP_DEPAYLOAD_SRCPAD()" link="gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS"/>
+    <keyword type="function" name="gst_base_rtp_depayload_push ()" link="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push"/>
+    <keyword type="function" name="gst_base_rtp_depayload_push_ts ()" link="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-ts"/>
+    <keyword type="function" name="gst_base_rtp_depayload_push_list ()" link="gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-list" since="0.10.32"/>
+    <keyword type="struct" name="struct GstBaseRTPPayload" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload-struct"/>
+    <keyword type="struct" name="struct GstBaseRTPPayloadClass" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayloadClass"/>
+    <keyword type="macro" name="GST_BASE_RTP_PAYLOAD_MTU()" link="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-MTU:CAPS"/>
+    <keyword type="macro" name="GST_BASE_RTP_PAYLOAD_PT()" link="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-PT:CAPS"/>
+    <keyword type="macro" name="GST_BASE_RTP_PAYLOAD_SINKPAD()" link="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS"/>
+    <keyword type="macro" name="GST_BASE_RTP_PAYLOAD_SRCPAD()" link="gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS"/>
+    <keyword type="function" name="gst_basertppayload_is_filled ()" link="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-is-filled"/>
+    <keyword type="function" name="gst_basertppayload_push ()" link="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push"/>
+    <keyword type="function" name="gst_basertppayload_push_list ()" link="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push-list" since="0.10.24"/>
+    <keyword type="function" name="gst_basertppayload_set_options ()" link="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-options"/>
+    <keyword type="function" name="gst_basertppayload_set_outcaps ()" link="gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-outcaps"/>
+    <keyword type="property" name="The &quot;max-ptime&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--max-ptime"/>
+    <keyword type="property" name="The &quot;min-ptime&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--min-ptime"/>
+    <keyword type="property" name="The &quot;mtu&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--mtu"/>
+    <keyword type="property" name="The &quot;perfect-rtptime&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--perfect-rtptime"/>
+    <keyword type="property" name="The &quot;pt&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--pt"/>
+    <keyword type="property" name="The &quot;ptime-multiple&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ptime-multiple"/>
+    <keyword type="property" name="The &quot;seqnum&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum"/>
+    <keyword type="property" name="The &quot;seqnum-offset&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum-offset"/>
+    <keyword type="property" name="The &quot;ssrc&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ssrc"/>
+    <keyword type="property" name="The &quot;timestamp&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp"/>
+    <keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp-offset"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstrtpbuffer.html#id535614"/>
+    <keyword type="macro" name="GST_RTP_VERSION" link="gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-VERSION:CAPS"/>
+    <keyword type="function" name="gst_rtp_buffer_allocate_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-allocate-data"/>
+    <keyword type="function" name="gst_rtp_buffer_new_take_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-take-data"/>
+    <keyword type="function" name="gst_rtp_buffer_new_copy_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-copy-data"/>
+    <keyword type="function" name="gst_rtp_buffer_new_allocate ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate"/>
+    <keyword type="function" name="gst_rtp_buffer_new_allocate_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate-len"/>
+    <keyword type="function" name="gst_rtp_buffer_calc_header_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-header-len"/>
+    <keyword type="function" name="gst_rtp_buffer_calc_packet_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-packet-len"/>
+    <keyword type="function" name="gst_rtp_buffer_calc_payload_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-payload-len"/>
+    <keyword type="function" name="gst_rtp_buffer_validate ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate"/>
+    <keyword type="function" name="gst_rtp_buffer_validate_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate-data"/>
+    <keyword type="function" name="gst_rtp_buffer_set_packet_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-packet-len"/>
+    <keyword type="function" name="gst_rtp_buffer_get_packet_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-packet-len"/>
+    <keyword type="function" name="gst_rtp_buffer_get_header_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-header-len"/>
+    <keyword type="function" name="gst_rtp_buffer_get_version ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-version"/>
+    <keyword type="function" name="gst_rtp_buffer_set_version ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-version"/>
+    <keyword type="function" name="gst_rtp_buffer_get_padding ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-padding"/>
+    <keyword type="function" name="gst_rtp_buffer_set_padding ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-padding"/>
+    <keyword type="function" name="gst_rtp_buffer_pad_to ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-pad-to"/>
+    <keyword type="function" name="gst_rtp_buffer_get_extension ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension"/>
+    <keyword type="function" name="gst_rtp_buffer_set_extension ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension"/>
+    <keyword type="function" name="gst_rtp_buffer_get_extension_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data" since="0.10.15"/>
+    <keyword type="function" name="gst_rtp_buffer_get_ssrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc"/>
+    <keyword type="function" name="gst_rtp_buffer_set_ssrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc"/>
+    <keyword type="function" name="gst_rtp_buffer_get_csrc_count ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count"/>
+    <keyword type="function" name="gst_rtp_buffer_get_csrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc"/>
+    <keyword type="function" name="gst_rtp_buffer_set_csrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-csrc"/>
+    <keyword type="function" name="gst_rtp_buffer_get_marker ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-marker"/>
+    <keyword type="function" name="gst_rtp_buffer_set_marker ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-marker"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload_type ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-type"/>
+    <keyword type="function" name="gst_rtp_buffer_set_payload_type ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-payload-type"/>
+    <keyword type="function" name="gst_rtp_buffer_get_seq ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-seq"/>
+    <keyword type="function" name="gst_rtp_buffer_set_seq ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-seq"/>
+    <keyword type="function" name="gst_rtp_buffer_get_timestamp ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-timestamp"/>
+    <keyword type="function" name="gst_rtp_buffer_set_timestamp ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-timestamp"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload_buffer ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload_subbuffer ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer" since="0.10.10"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload"/>
+    <keyword type="function" name="gst_rtp_buffer_default_clock_rate ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate" since="0.10.13"/>
+    <keyword type="function" name="gst_rtp_buffer_compare_seqnum ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum" since="0.10.15"/>
+    <keyword type="function" name="gst_rtp_buffer_ext_timestamp ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-ext-timestamp" since="0.10.15"/>
+    <keyword type="function" name="gst_rtp_buffer_set_extension_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension-data" since="0.10.18"/>
+    <keyword type="function" name="gst_rtp_buffer_get_extension_onebyte_header ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-onebyte-header" since="0.10.31"/>
+    <keyword type="function" name="gst_rtp_buffer_get_extension_twobytes_header ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-twobytes-header" since="0.10.31"/>
+    <keyword type="function" name="gst_rtp_buffer_add_extension_onebyte_header ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header" since="0.10.31"/>
+    <keyword type="function" name="gst_rtp_buffer_add_extension_twobytes_header ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header" since="0.10.31"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstrtcpbuffer.html#id539655"/>
+    <keyword type="macro" name="GST_RTCP_VERSION" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VERSION:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_MAX_SDES" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_MAX_BYE_SSRC_COUNT" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_MAX_RB_COUNT" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_MAX_SDES_ITEM_COUNT" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_VALID_MASK" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS"/>
+    <keyword type="macro" name="GST_RTCP_VALID_VALUE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS"/>
+    <keyword type="enum" name="enum GstRTCPType" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType"/>
+    <keyword type="struct" name="struct GstRTCPPacket" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket"/>
+    <keyword type="enum" name="enum GstRTCPSDESType" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType"/>
+    <keyword type="enum" name="enum GstRTCPFBType" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_buffer_new_take_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data"/>
+    <keyword type="function" name="gst_rtcp_buffer_new_copy_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data"/>
+    <keyword type="function" name="gst_rtcp_buffer_validate_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data"/>
+    <keyword type="function" name="gst_rtcp_buffer_validate ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate"/>
+    <keyword type="function" name="gst_rtcp_buffer_new ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new"/>
+    <keyword type="function" name="gst_rtcp_buffer_get_packet_count ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-packet-count"/>
+    <keyword type="function" name="gst_rtcp_buffer_get_first_packet ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet"/>
+    <keyword type="function" name="gst_rtcp_packet_move_to_next ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-move-to-next"/>
+    <keyword type="function" name="gst_rtcp_buffer_add_packet ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-add-packet"/>
+    <keyword type="function" name="gst_rtcp_packet_remove ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-remove"/>
+    <keyword type="function" name="gst_rtcp_packet_get_padding ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-padding"/>
+    <keyword type="function" name="gst_rtcp_packet_get_count ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-count"/>
+    <keyword type="function" name="gst_rtcp_packet_get_type ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-type"/>
+    <keyword type="function" name="gst_rtcp_packet_get_length ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-length"/>
+    <keyword type="function" name="gst_rtcp_packet_sr_get_sender_info ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-get-sender-info"/>
+    <keyword type="function" name="gst_rtcp_packet_sr_set_sender_info ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-set-sender-info"/>
+    <keyword type="function" name="gst_rtcp_packet_rr_get_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-get-ssrc"/>
+    <keyword type="function" name="gst_rtcp_packet_rr_set_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-set-ssrc"/>
+    <keyword type="function" name="gst_rtcp_packet_get_rb_count ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb-count"/>
+    <keyword type="function" name="gst_rtcp_packet_get_rb ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb"/>
+    <keyword type="function" name="gst_rtcp_packet_add_rb ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-add-rb"/>
+    <keyword type="function" name="gst_rtcp_packet_set_rb ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-set-rb"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_get_item_count ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-item-count"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_first_item ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-item"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_next_item ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-item"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_get_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-ssrc"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_first_entry ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-entry"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_next_entry ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-entry"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_get_entry ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_copy_entry ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_add_item ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-item"/>
+    <keyword type="function" name="gst_rtcp_packet_sdes_add_entry ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-entry"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_get_ssrc_count ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-ssrc-count"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_get_nth_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-nth-ssrc"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_add_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrc"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_add_ssrcs ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrcs"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_get_reason_len ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason-len"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_get_reason ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason"/>
+    <keyword type="function" name="gst_rtcp_packet_bye_set_reason ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-set-reason"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_get_type ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-type" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_set_type ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-type" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_get_sender_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-sender-ssrc" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_set_sender_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-sender-ssrc" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_get_media_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-media-ssrc" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_set_media_ssrc ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-media-ssrc" since="0.10.23"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_get_fci_length ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci-length" since="0.10.31"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_set_fci_length ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-fci-length" since="0.10.31"/>
+    <keyword type="function" name="gst_rtcp_packet_fb_get_fci ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci" since="0.10.31"/>
+    <keyword type="function" name="gst_rtcp_ntp_to_unix ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-ntp-to-unix"/>
+    <keyword type="function" name="gst_rtcp_unix_to_ntp ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-unix-to-ntp"/>
+    <keyword type="function" name="gst_rtcp_sdes_name_to_type ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-name-to-type" since="0.10.26"/>
+    <keyword type="function" name="gst_rtcp_sdes_type_to_name ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-type-to-name" since="0.10.26"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstrtppayloads.html#id420172"/>
+    <keyword type="enum" name="enum GstRTPPayload" link="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayload"/>
+    <keyword type="macro" name="GST_RTP_PAYLOAD_IS_DYNAMIC()" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS"/>
+    <keyword type="struct" name="struct GstRTPPayloadInfo" link="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo"/>
+    <keyword type="function" name="gst_rtp_payload_info_for_name ()" link="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-name"/>
+    <keyword type="function" name="gst_rtp_payload_info_for_pt ()" link="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt"/>
+    <keyword type="function" name="gst_rtsp_base64_encode ()" link="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-encode" deprecated="Use g_base64_encode()"/>
+    <keyword type="function" name="gst_rtsp_base64_decode_ip ()" link="gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-decode-ip" deprecated="use g_base64_decode_inplace() instead."/>
+    <keyword type="struct" name="GstRTSPConnection" link="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection"/>
+    <keyword type="function" name="gst_rtsp_connection_create ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create"/>
+    <keyword type="function" name="gst_rtsp_connection_create_from_fd ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-fd" since="0.10.25"/>
+    <keyword type="function" name="gst_rtsp_connection_accept ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_connect ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect"/>
+    <keyword type="function" name="gst_rtsp_connection_close ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close"/>
+    <keyword type="function" name="gst_rtsp_connection_free ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free"/>
+    <keyword type="function" name="gst_rtsp_connection_read ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read"/>
+    <keyword type="function" name="gst_rtsp_connection_write ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-write"/>
+    <keyword type="function" name="gst_rtsp_connection_poll ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-poll" since="0.10.15"/>
+    <keyword type="function" name="gst_rtsp_connection_send ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-send"/>
+    <keyword type="function" name="gst_rtsp_connection_receive ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-receive"/>
+    <keyword type="function" name="gst_rtsp_connection_next_timeout ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-next-timeout"/>
+    <keyword type="function" name="gst_rtsp_connection_reset_timeout ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-reset-timeout"/>
+    <keyword type="function" name="gst_rtsp_connection_flush ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush"/>
+    <keyword type="function" name="gst_rtsp_connection_set_auth ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth"/>
+    <keyword type="function" name="gst_rtsp_connection_set_auth_param ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth-param" since="0.10.20"/>
+    <keyword type="function" name="gst_rtsp_connection_clear_auth_params ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-clear-auth-params" since="0.10.20"/>
+    <keyword type="function" name="gst_rtsp_connection_set_qos_dscp ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-qos-dscp" since="0.10.20"/>
+    <keyword type="function" name="gst_rtsp_connection_set_ip ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-ip" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_get_ip ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-ip" since="0.10.20"/>
+    <keyword type="function" name="gst_rtsp_connection_get_url ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-url" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_set_tunneled ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tunneled" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_is_tunneled ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-is-tunneled" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_get_tunnelid ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tunnelid" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_do_tunnel ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_get_readfd ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-readfd" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_get_writefd ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-writefd" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_connection_set_http_mode ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-http-mode" since="0.10.25"/>
+    <keyword type="function" name="gst_rtsp_connection_set_proxy ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-proxy" since="0.10.23"/>
+    <keyword type="struct" name="GstRTSPWatch" link="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch"/>
+    <keyword type="struct" name="GstRTSPWatchFuncs" link="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_new ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_unref ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_attach ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_reset ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-reset" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_queue_message ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-message" deprecated="Use gst_rtsp_watch_send_message()" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_watch_queue_data ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-data" deprecated="Use gst_rtsp_watch_write_data()" since="0.10.24"/>
+    <keyword type="function" name="gst_rtsp_watch_send_message ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-send-message" since="0.10.25"/>
+    <keyword type="function" name="gst_rtsp_watch_write_data ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data" since="0.10.25"/>
+    <keyword type="macro" name="GST_RTSP_CHECK()" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-CHECK:CAPS"/>
+    <keyword type="macro" name="GST_RTSP_AUTH_MAX" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-MAX:CAPS"/>
+    <keyword type="enum" name="enum GstRTSPEvent" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent"/>
+    <keyword type="enum" name="enum GstRTSPResult" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult"/>
+    <keyword type="enum" name="enum GstRTSPFamily" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily"/>
+    <keyword type="enum" name="enum GstRTSPState" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPState"/>
+    <keyword type="enum" name="enum GstRTSPVersion" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion"/>
+    <keyword type="enum" name="enum GstRTSPMethod" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod"/>
+    <keyword type="enum" name="enum GstRTSPAuthMethod" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod"/>
+    <keyword type="enum" name="enum GstRTSPHeaderField" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField"/>
+    <keyword type="enum" name="enum GstRTSPStatusCode" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode"/>
+    <keyword type="function" name="gst_rtsp_strresult ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-strresult"/>
+    <keyword type="function" name="gst_rtsp_method_as_text ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-method-as-text"/>
+    <keyword type="function" name="gst_rtsp_version_as_text ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-version-as-text"/>
+    <keyword type="function" name="gst_rtsp_header_as_text ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-as-text"/>
+    <keyword type="function" name="gst_rtsp_header_allow_multiple ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-allow-multiple" since="0.10.25"/>
+    <keyword type="function" name="gst_rtsp_status_as_text ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-status-as-text"/>
+    <keyword type="function" name="gst_rtsp_options_as_text ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-options-as-text" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_find_header_field ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-header-field"/>
+    <keyword type="function" name="gst_rtsp_find_method ()" link="gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-method"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstrtspextension.html#id434543"/>
+    <keyword type="struct" name="GstRTSPExtension" link="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension"/>
+    <keyword type="struct" name="struct GstRTSPExtensionInterface" link="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface"/>
+    <keyword type="enum" name="enum GstRTSPMsgType" link="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType"/>
+    <keyword type="struct" name="struct GstRTSPMessage" link="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage"/>
+    <keyword type="function" name="gst_rtsp_message_new ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new"/>
+    <keyword type="function" name="gst_rtsp_message_init ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init"/>
+    <keyword type="function" name="gst_rtsp_message_unset ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset"/>
+    <keyword type="function" name="gst_rtsp_message_free ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free"/>
+    <keyword type="function" name="gst_rtsp_message_get_type ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-type"/>
+    <keyword type="function" name="gst_rtsp_message_new_request ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-request"/>
+    <keyword type="function" name="gst_rtsp_message_init_request ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-request"/>
+    <keyword type="function" name="gst_rtsp_message_parse_request ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-request"/>
+    <keyword type="function" name="gst_rtsp_message_new_response ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-response"/>
+    <keyword type="function" name="gst_rtsp_message_init_response ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-response"/>
+    <keyword type="function" name="gst_rtsp_message_parse_response ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-response"/>
+    <keyword type="function" name="gst_rtsp_message_new_data ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-data"/>
+    <keyword type="function" name="gst_rtsp_message_init_data ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-data"/>
+    <keyword type="function" name="gst_rtsp_message_parse_data ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-data"/>
+    <keyword type="function" name="gst_rtsp_message_add_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header"/>
+    <keyword type="function" name="gst_rtsp_message_take_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_message_remove_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header"/>
+    <keyword type="function" name="gst_rtsp_message_get_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header"/>
+    <keyword type="function" name="gst_rtsp_message_append_headers ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers"/>
+    <keyword type="function" name="gst_rtsp_message_set_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body"/>
+    <keyword type="function" name="gst_rtsp_message_take_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body"/>
+    <keyword type="function" name="gst_rtsp_message_get_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-body"/>
+    <keyword type="function" name="gst_rtsp_message_steal_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-steal-body"/>
+    <keyword type="function" name="gst_rtsp_message_dump ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-dump"/>
+    <keyword type="enum" name="enum GstRTSPRangeUnit" link="gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit"/>
+    <keyword type="struct" name="struct GstRTSPTimeRange" link="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange"/>
+    <keyword type="struct" name="struct GstRTSPTime" link="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime"/>
+    <keyword type="enum" name="enum GstRTSPTimeType" link="gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType"/>
+    <keyword type="function" name="gst_rtsp_range_parse ()" link="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-parse"/>
+    <keyword type="function" name="gst_rtsp_range_to_string ()" link="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-to-string" since="0.10.23"/>
+    <keyword type="function" name="gst_rtsp_range_free ()" link="gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-free"/>
+    <keyword type="enum" name="enum GstRTSPTransMode" link="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode"/>
+    <keyword type="enum" name="enum GstRTSPProfile" link="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile"/>
+    <keyword type="struct" name="struct GstRTSPRange" link="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange"/>
+    <keyword type="enum" name="enum GstRTSPLowerTrans" link="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans"/>
+    <keyword type="struct" name="struct GstRTSPTransport" link="gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport"/>
+    <keyword type="function" name="gst_rtsp_transport_new ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-new"/>
+    <keyword type="function" name="gst_rtsp_transport_init ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-init"/>
+    <keyword type="function" name="gst_rtsp_transport_parse ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-parse"/>
+    <keyword type="function" name="gst_rtsp_transport_as_text ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-as-text"/>
+    <keyword type="function" name="gst_rtsp_transport_get_mime ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-mime"/>
+    <keyword type="function" name="gst_rtsp_transport_get_manager ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-manager"/>
+    <keyword type="function" name="gst_rtsp_transport_free ()" link="gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free"/>
+    <keyword type="macro" name="GST_RTSP_DEFAULT_PORT" link="gst-plugins-base-libs-gstrtspurl.html#GST-RTSP-DEFAULT-PORT:CAPS"/>
+    <keyword type="struct" name="struct GstRTSPUrl" link="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl"/>
+    <keyword type="function" name="gst_rtsp_url_parse ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-parse"/>
+    <keyword type="function" name="gst_rtsp_url_copy ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-copy" since="0.10.22"/>
+    <keyword type="function" name="gst_rtsp_url_free ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free"/>
+    <keyword type="function" name="gst_rtsp_url_get_request_uri ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-request-uri"/>
+    <keyword type="function" name="gst_rtsp_url_set_port ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-set-port"/>
+    <keyword type="function" name="gst_rtsp_url_get_port ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-port"/>
+    <keyword type="function" name="gst_rtsp_url_decode_path_components ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-decode-path-components" since="0.10.32"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstsdpmessage.html#id590545"/>
+    <keyword type="enum" name="enum GstSDPResult" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult"/>
+    <keyword type="struct" name="GstSDPOrigin" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin"/>
+    <keyword type="struct" name="GstSDPConnection" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_CT" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-CT:CAPS"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_AS" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-AS:CAPS"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_EXT_PREFIX" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-EXT-PREFIX:CAPS"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_RR" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RR:CAPS" since="0.10.15"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_RS" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RS:CAPS" since="0.10.15"/>
+    <keyword type="macro" name="GST_SDP_BWTYPE_TIAS" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-TIAS:CAPS" since="0.10.30"/>
+    <keyword type="struct" name="GstSDPBandwidth" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth"/>
+    <keyword type="struct" name="GstSDPTime" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime"/>
+    <keyword type="struct" name="GstSDPZone" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone"/>
+    <keyword type="struct" name="GstSDPKey" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey"/>
+    <keyword type="struct" name="GstSDPAttribute" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute"/>
+    <keyword type="struct" name="GstSDPMedia" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia"/>
+    <keyword type="struct" name="GstSDPMessage" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage"/>
+    <keyword type="function" name="gst_sdp_message_new ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new"/>
+    <keyword type="function" name="gst_sdp_message_init ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init"/>
+    <keyword type="function" name="gst_sdp_message_uninit ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit"/>
+    <keyword type="function" name="gst_sdp_message_free ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free"/>
+    <keyword type="function" name="gst_sdp_message_parse_buffer ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-buffer"/>
+    <keyword type="function" name="gst_sdp_message_as_text ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-text"/>
+    <keyword type="function" name="gst_sdp_message_parse_uri ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-uri" since="0.10.31"/>
+    <keyword type="function" name="gst_sdp_message_as_uri ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-uri" since="0.10.31"/>
+    <keyword type="function" name="gst_sdp_address_is_multicast ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-address-is-multicast" since="0.10.32"/>
+    <keyword type="function" name="gst_sdp_message_get_version ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-version"/>
+    <keyword type="function" name="gst_sdp_message_set_version ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-version"/>
+    <keyword type="function" name="gst_sdp_message_get_origin ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-origin"/>
+    <keyword type="function" name="gst_sdp_message_set_origin ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-origin"/>
+    <keyword type="function" name="gst_sdp_message_get_session_name ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-session-name"/>
+    <keyword type="function" name="gst_sdp_message_set_session_name ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-session-name"/>
+    <keyword type="function" name="gst_sdp_message_get_information ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-information"/>
+    <keyword type="function" name="gst_sdp_message_set_information ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-information"/>
+    <keyword type="function" name="gst_sdp_message_get_uri ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-uri"/>
+    <keyword type="function" name="gst_sdp_message_set_uri ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-uri"/>
+    <keyword type="function" name="gst_sdp_message_emails_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-emails-len"/>
+    <keyword type="function" name="gst_sdp_message_get_email ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-email"/>
+    <keyword type="function" name="gst_sdp_message_add_email ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-email"/>
+    <keyword type="function" name="gst_sdp_message_phones_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-phones-len"/>
+    <keyword type="function" name="gst_sdp_message_get_phone ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-phone"/>
+    <keyword type="function" name="gst_sdp_message_add_phone ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-phone"/>
+    <keyword type="function" name="gst_sdp_message_get_connection ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-connection"/>
+    <keyword type="function" name="gst_sdp_message_set_connection ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-connection"/>
+    <keyword type="function" name="gst_sdp_message_bandwidths_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-bandwidths-len"/>
+    <keyword type="function" name="gst_sdp_message_get_bandwidth ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-bandwidth"/>
+    <keyword type="function" name="gst_sdp_message_add_bandwidth ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-bandwidth"/>
+    <keyword type="function" name="gst_sdp_message_times_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-times-len"/>
+    <keyword type="function" name="gst_sdp_message_get_time ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-time"/>
+    <keyword type="function" name="gst_sdp_message_add_time ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-time"/>
+    <keyword type="function" name="gst_sdp_message_zones_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-zones-len"/>
+    <keyword type="function" name="gst_sdp_message_get_zone ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-zone"/>
+    <keyword type="function" name="gst_sdp_message_add_zone ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-zone"/>
+    <keyword type="function" name="gst_sdp_message_get_key ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-key"/>
+    <keyword type="function" name="gst_sdp_message_set_key ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-key"/>
+    <keyword type="function" name="gst_sdp_message_attributes_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-attributes-len"/>
+    <keyword type="function" name="gst_sdp_message_get_attribute ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute"/>
+    <keyword type="function" name="gst_sdp_message_get_attribute_val ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val"/>
+    <keyword type="function" name="gst_sdp_message_get_attribute_val_n ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val-n"/>
+    <keyword type="function" name="gst_sdp_message_add_attribute ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-attribute"/>
+    <keyword type="function" name="gst_sdp_message_medias_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-medias-len"/>
+    <keyword type="function" name="gst_sdp_message_get_media ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-media"/>
+    <keyword type="function" name="gst_sdp_message_add_media ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media"/>
+    <keyword type="function" name="gst_sdp_message_dump ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump"/>
+    <keyword type="function" name="gst_sdp_media_new ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new"/>
+    <keyword type="function" name="gst_sdp_media_init ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init"/>
+    <keyword type="function" name="gst_sdp_media_uninit ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit"/>
+    <keyword type="function" name="gst_sdp_media_free ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free"/>
+    <keyword type="function" name="gst_sdp_media_get_media ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-media"/>
+    <keyword type="function" name="gst_sdp_media_set_media ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-media"/>
+    <keyword type="function" name="gst_sdp_media_get_port ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-port"/>
+    <keyword type="function" name="gst_sdp_media_get_num_ports ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-num-ports"/>
+    <keyword type="function" name="gst_sdp_media_set_port_info ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-port-info"/>
+    <keyword type="function" name="gst_sdp_media_get_proto ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-proto"/>
+    <keyword type="function" name="gst_sdp_media_set_proto ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-proto"/>
+    <keyword type="function" name="gst_sdp_media_formats_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-formats-len"/>
+    <keyword type="function" name="gst_sdp_media_get_format ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-format"/>
+    <keyword type="function" name="gst_sdp_media_add_format ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-format"/>
+    <keyword type="function" name="gst_sdp_media_get_information ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-information"/>
+    <keyword type="function" name="gst_sdp_media_set_information ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-information"/>
+    <keyword type="function" name="gst_sdp_media_connections_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-connections-len"/>
+    <keyword type="function" name="gst_sdp_media_get_connection ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-connection"/>
+    <keyword type="function" name="gst_sdp_media_add_connection ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-connection"/>
+    <keyword type="function" name="gst_sdp_media_bandwidths_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-bandwidths-len"/>
+    <keyword type="function" name="gst_sdp_media_get_bandwidth ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-bandwidth"/>
+    <keyword type="function" name="gst_sdp_media_add_bandwidth ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-bandwidth"/>
+    <keyword type="function" name="gst_sdp_media_get_key ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-key"/>
+    <keyword type="function" name="gst_sdp_media_set_key ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-key"/>
+    <keyword type="function" name="gst_sdp_media_attributes_len ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-attributes-len"/>
+    <keyword type="function" name="gst_sdp_media_get_attribute ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute"/>
+    <keyword type="function" name="gst_sdp_media_get_attribute_val ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val"/>
+    <keyword type="function" name="gst_sdp_media_get_attribute_val_n ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val-n"/>
+    <keyword type="function" name="gst_sdp_media_add_attribute ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-attribute"/>
+    <keyword type="function" name="gst_sdp_media_as_text ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-as-text"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttag.html#id587777"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_TRACKID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_ARTISTID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_ALBUMID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_ALBUMARTISTID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_TRMID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRMID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICBRAINZ_SORTNAME" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-SORTNAME:CAPS" deprecated=""/>
+    <keyword type="macro" name="GST_TAG_CDDA_CDDB_DISCID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CDDA_CDDB_DISCID_FULL" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CDDA_MUSICBRAINZ_DISCID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CDDA_TRACK_TAGS" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-TRACK-TAGS:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CMML_CLIP" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-CLIP:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CMML_HEAD" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-HEAD:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CMML_STREAM" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-STREAM:CAPS"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_SHUTTER_SPEED" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_FOCAL_RATIO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-RATIO:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_FOCAL_LENGTH" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_ISO_SPEED" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-ISO-SPEED:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_EXPOSURE_PROGRAM" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_EXPOSURE_MODE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_GAIN_ADJUSTMENT" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_WHITE_BALANCE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-WHITE-BALANCE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_CONTRAST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-CONTRAST:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_SATURATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SATURATION:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_SHARPNESS" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHARPNESS:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_FLASH_FIRED" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-FIRED:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_FLASH_MODE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-MODE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_METERING_MODE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-METERING-MODE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_SOURCE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SOURCE:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_CAPTURING_EXPOSURE_COMPENSATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS" since="0.10.33"/>
+    <keyword type="macro" name="GST_TAG_IMAGE_HORIZONTAL_PPI" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_IMAGE_VERTICAL_PPI" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_TAG_ID3V2_HEADER_SIZE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_register_musicbrainz_tags ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags"/>
+    <keyword type="function" name="gst_tag_freeform_string_to_utf8 ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8" since="0.10.13"/>
+    <keyword type="function" name="gst_tag_parse_extended_comment ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment" since="0.10.10"/>
+    <keyword type="function" name="gst_tag_image_data_to_image_buffer ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer" since="0.10.20"/>
+    <keyword type="enum" name="enum GstTagImageType" link="gst-plugins-base-libs-gsttag.html#GstTagImageType" since="0.10.9"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttagvorbis.html#id586856"/>
+    <keyword type="function" name="gst_tag_from_vorbis_tag ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag"/>
+    <keyword type="function" name="gst_tag_to_vorbis_tag ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-tag"/>
+    <keyword type="function" name="gst_vorbis_tag_add ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-vorbis-tag-add"/>
+    <keyword type="function" name="gst_tag_to_vorbis_comments ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-comments"/>
+    <keyword type="function" name="gst_tag_list_from_vorbiscomment_buffer ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment-buffer"/>
+    <keyword type="function" name="gst_tag_list_to_vorbiscomment_buffer ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-to-vorbiscomment-buffer"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttagid3.html#id587290"/>
+    <keyword type="function" name="gst_tag_id3_genre_count ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-count"/>
+    <keyword type="function" name="gst_tag_id3_genre_get ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-get"/>
+    <keyword type="function" name="gst_tag_list_new_from_id3v1 ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-new-from-id3v1"/>
+    <keyword type="function" name="gst_tag_from_id3_tag ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-tag"/>
+    <keyword type="function" name="gst_tag_from_id3_user_tag ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-user-tag"/>
+    <keyword type="function" name="gst_tag_to_id3_tag ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-to-id3-tag"/>
+    <keyword type="function" name="gst_tag_list_add_id3_image ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-add-id3-image" since="0.10.20"/>
+    <keyword type="function" name="gst_tag_get_id3v2_tag_size ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-get-id3v2-tag-size" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_list_from_id3v2_tag ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-from-id3v2-tag" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_list_to_exif_buffer ()" link="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer" since="0.10.30"/>
+    <keyword type="function" name="gst_tag_list_to_exif_buffer_with_tiff_header ()" link="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer-with-tiff-header" since="0.10.30"/>
+    <keyword type="function" name="gst_tag_list_from_exif_buffer ()" link="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer" since="0.10.30"/>
+    <keyword type="function" name="gst_tag_list_from_exif_buffer_with_tiff_header ()" link="gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer-with-tiff-header" since="0.10.30"/>
+    <keyword type="function" name="gst_tag_list_from_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-from-xmp-buffer" since="0.10.29"/>
+    <keyword type="function" name="gst_tag_list_to_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer" since="0.10.29"/>
+    <keyword type="function" name="gst_tag_list_to_xmp_buffer_full ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer-full" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_list_schemas ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas" since="0.10.33"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttagxmpwriter.html#id579853"/>
+    <keyword type="function" name="gst_tag_xmp_writer_add_all_schemas ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-all-schemas" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_writer_add_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-schema" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_writer_has_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-has-schema" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_writer_remove_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-schema" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_writer_remove_all_schemas ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-all-schemas" since="0.10.33"/>
+    <keyword type="function" name="gst_tag_xmp_writer_tag_list_to_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-tag-list-to-xmp-buffer"/>
+    <keyword type="" name="Deriving from GstTagDemux" link="gst-plugins-base-libs-gsttagdemux.html#id453782"/>
+    <keyword type="struct" name="struct GstTagDemux" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemux" since="0.10.15"/>
+    <keyword type="struct" name="struct GstTagDemuxClass" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass" since="0.10.15"/>
+    <keyword type="enum" name="enum GstTagDemuxResult" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult" since="0.10.15"/>
+    <keyword type="" name="Deriving from GstTagMux" link="gst-plugins-base-libs-gsttagmux.html#id428505"/>
+    <keyword type="struct" name="struct GstTagMux" link="gst-plugins-base-libs-gsttagmux.html#GstTagMux" since="0.10.36"/>
+    <keyword type="struct" name="struct GstTagMuxClass" link="gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass" since="0.10.36"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gsttaglanguagecodes.html#id577297"/>
+    <keyword type="function" name="gst_tag_get_language_codes ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-codes" since="0.10.26"/>
+    <keyword type="function" name="gst_tag_get_language_name ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-name" since="0.10.26"/>
+    <keyword type="macro" name="gst_tag_get_language_code()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code" since="0.10.26"/>
+    <keyword type="function" name="gst_tag_get_language_code_iso_639_1 ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-1" since="0.10.26"/>
+    <keyword type="function" name="gst_tag_get_language_code_iso_639_2B ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2B" since="0.10.26"/>
+    <keyword type="function" name="gst_tag_get_language_code_iso_639_2T ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2T" since="0.10.26"/>
+    <keyword type="enum" name="enum GstTagLicenseFlags" link="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_flags ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-flags" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_nick ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-nick" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_title ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-title" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_description ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-description" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_jurisdiction ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-jurisdiction" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_license_version ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-version" since="0.10.36"/>
+    <keyword type="function" name="gst_tag_get_licenses ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses" since="0.10.36"/>
+    <keyword type="" name="Linking to this library" link="gst-plugins-base-libs-gstpbutils.html#id442245"/>
+    <keyword type="function" name="gst_pb_utils_init ()" link="gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init" since="0.10.12"/>
+    <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_MAJOR" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MAJOR:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_MINOR" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MINOR:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_MICRO" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MICRO:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_NANO" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-NANO:CAPS" since="0.10.31"/>
+    <keyword type="macro" name="GST_CHECK_PLUGINS_BASE_VERSION()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-CHECK-PLUGINS-BASE-VERSION:CAPS"/>
+    <keyword type="function" name="gst_plugins_base_version ()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version" since="0.10.31"/>
+    <keyword type="function" name="gst_plugins_base_version_string ()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version-string" since="0.10.31"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilscodecutils.html#id602451"/>
+    <keyword type="function" name="gst_codec_utils_aac_get_sample_rate_from_index ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-sample-rate-from-index" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_aac_get_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_aac_get_level ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_aac_caps_set_level_and_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-caps-set-level-and-profile" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_h264_get_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_h264_get_level ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_h264_caps_set_level_and_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-caps-set-level-and-profile" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_h264_get_level_idc ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level-idc" since="0.10.36"/>
+    <keyword type="function" name="gst_codec_utils_mpeg4video_get_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_mpeg4video_get_level ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level" since="0.10.31"/>
+    <keyword type="function" name="gst_codec_utils_mpeg4video_caps_set_level_and_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile" since="0.10.31"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#id585754"/>
+    <keyword type="function" name="gst_pb_utils_get_source_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-source-description"/>
+    <keyword type="function" name="gst_pb_utils_get_sink_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-sink-description"/>
+    <keyword type="function" name="gst_pb_utils_get_decoder_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-decoder-description"/>
+    <keyword type="function" name="gst_pb_utils_get_encoder_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-encoder-description"/>
+    <keyword type="function" name="gst_pb_utils_get_element_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-element-description"/>
+    <keyword type="function" name="gst_pb_utils_add_codec_description_to_tag_list ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list"/>
+    <keyword type="function" name="gst_pb_utils_get_codec_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-codec-description"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#id605343"/>
+    <keyword type="function" name="gst_missing_plugin_message_get_installer_detail ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail"/>
+    <keyword type="function" name="gst_missing_plugin_message_get_description ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description"/>
+    <keyword type="function" name="gst_is_missing_plugin_message ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message"/>
+    <keyword type="function" name="gst_missing_decoder_message_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-message-new"/>
+    <keyword type="function" name="gst_missing_encoder_message_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-message-new"/>
+    <keyword type="function" name="gst_missing_uri_source_message_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-message-new"/>
+    <keyword type="function" name="gst_missing_uri_sink_message_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-message-new"/>
+    <keyword type="function" name="gst_missing_element_message_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new"/>
+    <keyword type="function" name="gst_missing_uri_source_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-installer-detail-new" since="0.10.15"/>
+    <keyword type="function" name="gst_missing_uri_sink_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-installer-detail-new" since="0.10.15"/>
+    <keyword type="function" name="gst_missing_element_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-installer-detail-new" since="0.10.15"/>
+    <keyword type="function" name="gst_missing_decoder_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-installer-detail-new" since="0.10.15"/>
+    <keyword type="function" name="gst_missing_encoder_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-installer-detail-new" since="0.10.15"/>
+    <keyword type="" name="Overview" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#id583118"/>
+    <keyword type="enum" name="enum GstInstallPluginsReturn" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn" since="0.10.12"/>
+    <keyword type="function" name="GstInstallPluginsResultFunc ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_async ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_sync ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_return_get_name ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-return-get-name" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_installation_in_progress ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-installation-in-progress" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_supported ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-supported" since="0.10.15"/>
+    <keyword type="struct" name="GstInstallPluginsContext" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_context_new ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_context_free ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free" since="0.10.12"/>
+    <keyword type="function" name="gst_install_plugins_context_set_xid ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid" since="0.10.12"/>
+    <keyword type="struct" name="struct GstDiscoverer" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct"/>
+    <keyword type="function" name="gst_discoverer_new ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-new" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_start ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stop ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stop" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_discover_uri ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_discover_uri_async ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri-async" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct"/>
+    <keyword type="enum" name="enum GstDiscovererResult" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_duration ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-duration" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_misc ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-misc" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_result ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-result" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_stream_info ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-info" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_stream_list ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-list" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_tags ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-tags" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_uri ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-uri" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_seekable ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable" since="0.10.32"/>
+    <keyword type="macro" name="gst_discoverer_info_ref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref" since="0.10.31"/>
+    <keyword type="macro" name="gst_discoverer_info_unref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererStreamInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererContainerInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererAudioInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererVideoInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" since="0.10.31"/>
+    <keyword type="struct" name="GstDiscovererSubtitleInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" since="0.10.36"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_caps ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_misc ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_next ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_previous ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-previous" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_tags ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-tags" since="0.10.31"/>
+    <keyword type="macro" name="gst_discoverer_stream_info_ref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-ref" since="0.10.31"/>
+    <keyword type="macro" name="gst_discoverer_stream_info_unref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_stream_info_list_free ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free"/>
+    <keyword type="function" name="gst_discoverer_stream_info_get_stream_type_nick ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-stream-type-nick" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_audio_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-audio-streams" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_container_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-container-streams" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-streams" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_info_get_subtitle_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-subtitle-streams" since="0.10.36"/>
+    <keyword type="function" name="gst_discoverer_info_get_video_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-video-streams" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_bitrate ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-bitrate" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_channels ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-channels" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_depth ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-depth" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_language ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-language" since="0.10.36"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_max_bitrate ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-max-bitrate" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_audio_info_get_sample_rate ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-sample-rate" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_container_info_get_streams ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-container-info-get-streams" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_subtitle_info_get_language ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-subtitle-info-get-language" since="0.10.36"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_bitrate ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-bitrate" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_depth ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-depth" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_framerate_denom ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-denom" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_framerate_num ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-num" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_height ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-height" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_is_interlaced ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-interlaced" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_is_image ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-image" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_max_bitrate ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-max-bitrate" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_par_denom ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-denom" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_par_num ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-num" since="0.10.31"/>
+    <keyword type="function" name="gst_discoverer_video_info_get_width ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-width" since="0.10.31"/>
+    <keyword type="property" name="The &quot;timeout&quot; property" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer--timeout"/>
+    <keyword type="signal" name="The &quot;discovered&quot; signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-discovered"/>
+    <keyword type="signal" name="The &quot;finished&quot; signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished"/>
+    <keyword type="signal" name="The &quot;starting&quot; signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-encoding-profile.html#id614507"/>
+    <keyword type="" name="Example: Creating a profile" link="gst-plugins-base-libs-encoding-profile.html#id614570"/>
+    <keyword type="" name="Example: Listing categories, targets and profiles" link="gst-plugins-base-libs-encoding-profile.html#id614595"/>
+    <keyword type="struct" name="GstEncodingProfile" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile-struct"/>
+    <keyword type="macro" name="gst_encoding_profile_unref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref" since="0.10.32"/>
+    <keyword type="macro" name="gst_encoding_profile_ref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_find ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-find" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_name ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-name" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_description ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-description" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_format ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-format" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_preset ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-preset" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_presence ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-presence" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_restriction ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_name ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_description ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_format ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_preset ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_restriction ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_set_presence ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_is_equal ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_input_caps ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_profile_get_type_nick ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick" since="0.10.32"/>
+    <keyword type="struct" name="GstEncodingContainerProfile" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile-struct"/>
+    <keyword type="function" name="gst_encoding_container_profile_new ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_container_profile_add_profile ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-add-profile" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_container_profile_contains_profile ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-contains-profile" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_container_profile_get_profiles ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-get-profiles"/>
+    <keyword type="struct" name="GstEncodingAudioProfile" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile-struct"/>
+    <keyword type="function" name="gst_encoding_audio_profile_new ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-audio-profile-new" since="0.10.32"/>
+    <keyword type="struct" name="GstEncodingVideoProfile" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile-struct"/>
+    <keyword type="function" name="gst_encoding_video_profile_new ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-new" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_video_profile_get_pass ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-pass" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_video_profile_get_variableframerate ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-variableframerate" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_video_profile_set_pass ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-pass" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_video_profile_set_variableframerate ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate" since="0.10.32"/>
+    <keyword type="macro" name="GST_ENCODING_CATEGORY_DEVICE" link="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS"/>
+    <keyword type="macro" name="GST_ENCODING_CATEGORY_ONLINE_SERVICE" link="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS"/>
+    <keyword type="macro" name="GST_ENCODING_CATEGORY_STORAGE_EDITING" link="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS"/>
+    <keyword type="macro" name="GST_ENCODING_CATEGORY_CAPTURE" link="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-CAPTURE:CAPS"/>
+    <keyword type="struct" name="GstEncodingTarget" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget-struct"/>
+    <keyword type="macro" name="gst_encoding_target_unref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-unref" since="0.10.32"/>
+    <keyword type="macro" name="gst_encoding_target_ref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-ref" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_new ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-new" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_get_name ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-name" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_get_category ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-category" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_get_description ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-description" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_get_profiles ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profiles" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_get_profile ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profile" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_add_profile ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-add-profile" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_save ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_save_to_file ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save-to-file" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_load ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_target_load_from_file ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load-from-file" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_list_all_targets ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-all-targets" since="0.10.32"/>
+    <keyword type="function" name="gst_encoding_list_available_categories ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-available-categories" since="0.10.32"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstvideo.html#id625709"/>
+    <keyword type="macro" name="GST_VIDEO_FPS_RANGE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FPS-RANGE:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_SIZE_RANGE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS"/>
+    <keyword type="enum" name="enum GstVideoFormat" link="gst-plugins-base-libs-gstvideo.html#GstVideoFormat"/>
+    <keyword type="function" name="gst_video_calculate_display_ratio ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio" since="0.10.7"/>
+    <keyword type="function" name="gst_video_format_to_fourcc ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-format-to-fourcc" since="0.10.16"/>
+    <keyword type="function" name="gst_video_format_from_fourcc ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-format-from-fourcc" since="0.10.16"/>
+    <keyword type="function" name="gst_video_parse_caps_palette ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-parse-caps-palette" since="0.10.32"/>
+    <keyword type="function" name="GstVideoConvertFrameCallback ()" link="gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback"/>
+    <keyword type="function" name="gst_video_convert_frame ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame" since="0.10.31"/>
+    <keyword type="function" name="gst_video_convert_frame_async ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame-async" since="0.10.31"/>
+    <keyword type="function" name="gst_video_event_new_still_frame ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" since="0.10.26"/>
+    <keyword type="function" name="gst_video_event_parse_still_frame ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame" since="0.10.26"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstvideofilter.html#id583206"/>
+    <keyword type="struct" name="struct GstVideoFilter" link="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct"/>
+    <keyword type="struct" name="struct GstVideoFilterClass" link="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass"/>
+    <keyword type="" name="" link="gst-plugins-base-libs-gstvideosink.html#id618482"/>
+    <keyword type="struct" name="struct GstVideoSink" link="gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct"/>
+    <keyword type="struct" name="struct GstVideoSinkClass" link="gst-plugins-base-libs-gstvideosink.html#GstVideoSinkClass"/>
+    <keyword type="struct" name="struct GstVideoRectangle" link="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle"/>
+    <keyword type="macro" name="GST_VIDEO_SINK_HEIGHT()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-HEIGHT:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_SINK_PAD()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-PAD:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_SINK_WIDTH()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-WIDTH:CAPS"/>
+    <keyword type="function" name="gst_video_sink_center_rect ()" link="gst-plugins-base-libs-gstvideosink.html#gst-video-sink-center-rect"/>
+    <keyword type="property" name="The &quot;show-preroll-frame&quot; property" link="gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_STREAM" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-STREAM:CAPS"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_SEEKABLE" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-SEEKABLE:CAPS"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_RANDOM_ACCESS" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FLAG_NONE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FLAG_DEFAULT_POSITIONS" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-DEFAULT-POSITIONS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_UNKNOWN" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S8" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S8:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U8" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U8:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_INTEGER" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_FLOAT" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_SIGNED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_COMPLEX" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE" link="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-RESAMPLE:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SINK_SLAVE_SKEW" link="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-SKEW:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SINK_SLAVE_NONE" link="gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-RESAMPLE:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-RETIMESTAMP:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SRC_SLAVE_SKEW" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-SKEW:CAPS"/>
+    <keyword type="constant" name="GST_BASE_AUDIO_SRC_SLAVE_NONE" link="gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_INVALID" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_MONO" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-MONO:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_LEFT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_LFE" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-LFE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_NONE" link="gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS"/>
+    <keyword type="constant" name="GST_SEGSTATE_INVALID" link="gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_SEGSTATE_EMPTY" link="gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-EMPTY:CAPS"/>
+    <keyword type="constant" name="GST_SEGSTATE_FILLED" link="gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-FILLED:CAPS"/>
+    <keyword type="constant" name="GST_SEGSTATE_PARTIAL" link="gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-PARTIAL:CAPS"/>
+    <keyword type="constant" name="GST_RING_BUFFER_STATE_STOPPED" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-STOPPED:CAPS"/>
+    <keyword type="constant" name="GST_RING_BUFFER_STATE_PAUSED" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-PAUSED:CAPS"/>
+    <keyword type="constant" name="GST_RING_BUFFER_STATE_STARTED" link="gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-STARTED:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_RAW" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-RAW:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_MU_LAW" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MU-LAW:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_A_LAW" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-A-LAW:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_IMA_ADPCM" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-IMA-ADPCM:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_MPEG" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_GSM" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-GSM:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_IEC958" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-IEC958:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_AC3" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-AC3:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_EAC3" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-EAC3:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_DTS" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-DTS:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_MPEG2_AAC" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG2-AAC:CAPS"/>
+    <keyword type="constant" name="GST_BUFTYPE_MPEG4_AAC" link="gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG4-AAC:CAPS"/>
+    <keyword type="constant" name="GST_CDDA_BASE_SRC_MODE_NORMAL" link="gst-plugins-base-libs-gstcddabasesrc.html#GST-CDDA-BASE-SRC-MODE-NORMAL:CAPS"/>
+    <keyword type="constant" name="GST_CDDA_BASE_SRC_MODE_CONTINUOUS" link="gst-plugins-base-libs-gstcddabasesrc.html#GST-CDDA-BASE-SRC-MODE-CONTINUOUS:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_RECTANGULAR" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-RECTANGULAR:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_HAMMING" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HAMMING:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_HANN" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HANN:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_BARTLETT" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BARTLETT:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_BLACKMAN" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BLACKMAN:CAPS"/>
+    <keyword type="constant" name="GST_COLOR_BALANCE_HARDWARE" link="gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-HARDWARE:CAPS"/>
+    <keyword type="constant" name="GST_COLOR_BALANCE_SOFTWARE" link="gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-SOFTWARE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_HARDWARE" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-HARDWARE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_SOFTWARE" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-SOFTWARE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_FLAG_NONE" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_FLAG_AUTO_NOTIFICATIONS" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-AUTO-NOTIFICATIONS:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_FLAG_HAS_WHITELIST" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-HAS-WHITELIST:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_FLAG_GROUPING" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-GROUPING:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_INVALID" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_MUTE_TOGGLED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-MUTE-TOGGLED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_RECORD_TOGGLED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-RECORD-TOGGLED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_VOLUME_CHANGED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-VOLUME-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_OPTION_CHANGED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-OPTION-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-OPTIONS-LIST-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_MESSAGE_MIXER_CHANGED" link="gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-MIXER-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_INPUT" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-INPUT:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_OUTPUT" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-OUTPUT:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_MUTE" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-MUTE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_RECORD" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-RECORD:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_MASTER" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-MASTER:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_SOFTWARE" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-SOFTWARE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_NO_RECORD" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-NO-RECORD:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_NO_MUTE" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-NO-MUTE:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_WHITELIST" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-WHITELIST:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_READONLY" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-READONLY:CAPS"/>
+    <keyword type="constant" name="GST_MIXER_TRACK_WRITEONLY" link="gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-WRITEONLY:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU1" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU1:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU2" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU2:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU3" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU3:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU4" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU4:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU5" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU5:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU6" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU6:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU7" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU7:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_LEFT" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_RIGHT" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_UP" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-UP:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_DOWN" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DOWN:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_ACTIVATE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-ACTIVATE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_PREV_ANGLE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_NEXT_ANGLE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_KEY_PRESS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-PRESS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_KEY_RELEASE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_MOVE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_COMMAND" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-COMMAND:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_MOUSE_OVER" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_ANGLES_CHANGED" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_COMMANDS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-COMMANDS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_ANGLES" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-ANGLES:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_LINEAR" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_CUBIC" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_DB" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-DB:CAPS"/>
+    <keyword type="constant" name="GST_TUNER_CHANNEL_INPUT" link="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-INPUT:CAPS"/>
+    <keyword type="constant" name="GST_TUNER_CHANNEL_OUTPUT" link="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-OUTPUT:CAPS"/>
+    <keyword type="constant" name="GST_TUNER_CHANNEL_FREQUENCY" link="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-FREQUENCY:CAPS"/>
+    <keyword type="constant" name="GST_TUNER_CHANNEL_AUDIO" link="gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_NET_TYPE_UNKNOWN" link="gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_NET_TYPE_IP4" link="gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-IP4:CAPS"/>
+    <keyword type="constant" name="GST_NET_TYPE_IP6" link="gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-IP6:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_SR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_RR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_SDES" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SDES:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_BYE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-BYE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_APP" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-APP:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_RTPFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RTPFB:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_PSFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-PSFB:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_END" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-END:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_CNAME" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-CNAME:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_NAME" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NAME:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_EMAIL" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-EMAIL:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_PHONE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PHONE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_LOC" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-LOC:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_TOOL" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-TOOL:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_NOTE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NOTE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_PRIV" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_FB_TYPE_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-FB-TYPE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_RTPFB_TYPE_NACK" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-NACK:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_PLI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-PLI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_SLI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-SLI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_RPSI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-RPSI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_AFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-AFB:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_PCMU" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMU:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_1016" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-1016:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G721" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G721:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_GSM" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-GSM:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G723" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G723:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_8000" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-8000:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_16000" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-16000:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_LPC" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-LPC:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_PCMA" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMA:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G722" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G722:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_L16_STEREO" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-STEREO:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_L16_MONO" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-MONO:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_QCELP" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-QCELP:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_CN" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CN:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MPA" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPA:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G728" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G728:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_11025" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-11025:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_22050" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-22050:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G729" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G729:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_CELLB" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CELLB:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_JPEG" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-JPEG:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_NV" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-NV:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_H261" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H261:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MPV" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPV:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MP2T" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MP2T:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_H263" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H263:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EV_READ" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-READ:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EV_WRITE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-WRITE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_OK" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ERROR" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EINVAL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINVAL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EINTR" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOMEM" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ERESOLV" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERESOLV:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOTIMPL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ESYS" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ESYS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EPARSE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EPARSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EWSASTART" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSASTART:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EWSAVERSION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSAVERSION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EEOF" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EEOF:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOTIP" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETIMEOUT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETGET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETGET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETPOST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETPOST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ELAST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ELAST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_NONE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_INET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_INET6" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET6:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_INIT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INIT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_READY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-READY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_SEEKING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-SEEKING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_PLAYING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-PLAYING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_RECORDING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-RECORDING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_1_0" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-0:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_1_1" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-1:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_DESCRIBE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-DESCRIBE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ANNOUNCE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ANNOUNCE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_GET_PARAMETER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET-PARAMETER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_OPTIONS" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OPTIONS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PAUSE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PAUSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PLAY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PLAY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RECORD" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-RECORD:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_REDIRECT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-REDIRECT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_SETUP" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SETUP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_SET_PARAMETER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SET-PARAMETER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TEARDOWN" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-TEARDOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_GET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_POST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-POST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_NONE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_BASIC" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-BASIC:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_DIGEST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-DIGEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_INVALID" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_REQUEST" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_RESPONSE" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_HTTP_REQUEST" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_HTTP_RESPONSE" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_DATA" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-DATA:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE_30_DROP" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-30-DROP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE_25" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-25:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_NPT" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-NPT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_CLOCK" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-CLOCK:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_SECONDS" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-SECONDS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_NOW" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-NOW:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_END" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-END:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_RTP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RTP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_RDT" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RDT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_AVP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_SAVP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UDP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UDP_MCAST" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_TCP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TCP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_HTTP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-HTTP:CAPS"/>
+    <keyword type="constant" name="GST_SDP_OK" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"/>
+    <keyword type="constant" name="GST_SDP_EINVAL" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-EINVAL:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_NONE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_UNDEFINED" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_FRONT_COVER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BACK_COVER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LEAFLET_PAGE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_MEDIUM" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-MEDIUM:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LEAD_ARTIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_ARTIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ARTIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_CONDUCTOR" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_COMPOSER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-COMPOSER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LYRICIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LYRICIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_RECORDING_LOCATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_DURING_RECORDING" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_FISH" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FISH:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_ILLUSTRATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_BROKEN_TAG" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_AGAIN" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-AGAIN:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_OK" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-OK:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_REPRODUCTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_DISTRIBUTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_SHARING" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-SHARING:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_NOTICE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_ATTRIBUTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_SOURCE_CODE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_COPYLEFT" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_SUCCESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-SUCCESS:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_NOT_FOUND" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-NOT-FOUND:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_ERROR" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_PARTIAL_SUCCESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_USER_ABORT" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-USER-ABORT:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_CRASHED" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-CRASHED:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INVALID" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_STARTED_OK" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-STARTED-OK:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INTERNAL_FAILURE" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_HELPER_MISSING" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_OK" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-OK:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_URI_INVALID" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-URI-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_ERROR" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_TIMEOUT" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-TIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_BUSY" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-BUSY:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_MISSING_PLUGINS" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-MISSING-PLUGINS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I420" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YV12" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YV12:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YUY2" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUY2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UYVY" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVY:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_AYUV" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGBx" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBx"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGRx" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRx"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_xRGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xRGB"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_xBGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xBGR"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGBA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGRA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ARGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ABGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ABGR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y41B" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y41B:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y42B" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y42B:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YVYU" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVYU:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y444" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v210" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v210"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v216" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v216"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV12" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV21" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV21:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY8" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY8:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY16_BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY16_LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v308" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v308"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y800" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y800:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB15" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB15:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR15" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR15:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UYVP" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A420" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB8_PALETTED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB8-PALETTED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YUV9" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUV9:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YVU9" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVU9:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_IYU1" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-IYU1:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ARGB64" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB64:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_AYUV64" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV64:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_r210" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-r210"/>
+  </functions>
+</book>
diff --git a/docs/libs/html/gstreamer-app.html b/docs/libs/html/gstreamer-app.html
new file mode 100644
index 0000000..4c2b7df
--- /dev/null
+++ b/docs/libs/html/gstreamer-app.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>App Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="compiling.html" title="Compiling">
+<link rel="next" href="gst-plugins-base-libs-appsrc.html" title="appsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="compiling.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-appsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-app"></a>App Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsrc.html">appsrc</a></span><span class="refpurpose"> — Easy way for applications to inject buffers into a
+    pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsink.html">appsink</a></span><span class="refpurpose"> — Easy way for applications to extract buffers from a
+    pipeline</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstapp-0.11</code> to the library flags.
+      </p>
+<p>
+      To use it the functionality, insert an appsrc or appsink element into a pipeline and call the appropriate functions on the element.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-audio.html b/docs/libs/html/gstreamer-audio.html
new file mode 100644
index 0000000..045707a
--- /dev/null
+++ b/docs/libs/html/gstreamer-audio.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Audio Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-appsink.html" title="appsink">
+<link rel="next" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-appsink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstaudio.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-audio"></a>Audio Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudio.html">gstaudio</a></span><span class="refpurpose"> — Support library for audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioclock.html">gstaudioclock</a></span><span class="refpurpose"> — Helper object for implementing audio clocks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiodecoder.html">gstaudiodecoder</a></span><span class="refpurpose"> — Base class for audio decoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioencoder.html">gstaudioencoder</a></span><span class="refpurpose"> — Base class for audio encoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiofilter.html">gstaudiofilter</a></span><span class="refpurpose"> — Base class for simple audio filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiomixerutils.html">gstaudiomixerutils</a></span><span class="refpurpose"> — utility functions to find available audio mixers
+                     from the plugin registry</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosink.html">gstaudiosink</a></span><span class="refpurpose"> — Simple base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosrc.html">gstaudiosrc</a></span><span class="refpurpose"> — Simple base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosink.html">gstbaseaudiosink</a></span><span class="refpurpose"> — Base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosrc.html">gstbaseaudiosrc</a></span><span class="refpurpose"> — Base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmultichannel.html">gstmultichannel</a></span><span class="refpurpose"> — Support for multichannel audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstringbuffer.html">gstringbuffer</a></span><span class="refpurpose"> — Base class for audio ringbuffer implementations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioiec61937.html">gstaudioiec61937</a></span><span class="refpurpose"> — Utility functions for IEC 61937 payloading</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstaudio-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-base-utils.html b/docs/libs/html/gstreamer-base-utils.html
new file mode 100644
index 0000000..4a56e71
--- /dev/null
+++ b/docs/libs/html/gstreamer-base-utils.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Base Utils Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">
+<link rel="next" href="gst-plugins-base-libs-gstpbutils.html" title="gstpbutils">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gsttaglicenses.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstpbutils.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-base-utils"></a>Base Utils Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutils.html">gstpbutils</a></span><span class="refpurpose"> — General Application and Plugin Utility Library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpluginsbaseversion.html">gstpluginsbaseversion</a></span><span class="refpurpose"> — GStreamer gst-plugins-base libraries version macros.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilscodecutils.html">gstpbutilscodecutils</a></span><span class="refpurpose"> — Miscellaneous codec-specific utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsdescriptions.html">gstpbutilsdescriptions</a></span><span class="refpurpose"> — Provides human-readable descriptions for caps/codecs
+and encoder, decoder, URI source and URI sink elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsmissingplugins.html">gstpbutilsmissingplugins</a></span><span class="refpurpose"> — Create, recognise and parse missing-plugins messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsinstallplugins.html">gstpbutilsinstallplugins</a></span><span class="refpurpose"> — Missing plugin installation support for applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstdiscoverer.html">gstdiscoverer</a></span><span class="refpurpose"> — Utility for discovering information on URIs.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-encoding-profile.html">encoding-profile</a></span><span class="refpurpose"> — Encoding profile library</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstpbutils-0.11</code> to the library
+        flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-cdda.html b/docs/libs/html/gstreamer-cdda.html
new file mode 100644
index 0000000..523ef20
--- /dev/null
+++ b/docs/libs/html/gstreamer-cdda.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>CDDA Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">
+<link rel="next" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstaudioiec61937.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstcddabasesrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-cdda"></a>CDDA Library</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcddabasesrc.html">gstcddabasesrc</a></span><span class="refpurpose"> — Base class for CD digital audio (CDDA) sources</span>
+</dt></dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstcdda-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-ffft.html b/docs/libs/html/gstreamer-ffft.html
new file mode 100644
index 0000000..19ed4b3
--- /dev/null
+++ b/docs/libs/html/gstreamer-ffft.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>FFT Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstcddabasesrc.html" title="gstcddabasesrc">
+<link rel="next" href="gst-plugins-base-libs-gstfft.html" title="gstfft">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstcddabasesrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstfft.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-ffft"></a>FFT Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfft.html">gstfft</a></span><span class="refpurpose"> — General FFT functions and declarations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts16.html">gstffts16</a></span><span class="refpurpose"> — FFT functions for signed 16 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts32.html">gstffts32</a></span><span class="refpurpose"> — FFT functions for signed 32 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf32.html">gstfftf32</a></span><span class="refpurpose"> — FFT functions for 32 bit float samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf64.html">gstfftf64</a></span><span class="refpurpose"> — FFT functions for 64 bit float samples</span>
+</dt>
+</dl></div>
+<p>
+        The gstfft library is based on
+        <a class="ulink" href="http://sourceforge.net/projects/kissfft" target="_top">kissfft</a>
+        by Mark Borgerding.
+      </p>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstfft-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-interfaces.html b/docs/libs/html/gstreamer-interfaces.html
new file mode 100644
index 0000000..bd0c40c
--- /dev/null
+++ b/docs/libs/html/gstreamer-interfaces.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Interfaces Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">
+<link rel="next" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstfftf64.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstcolorbalance.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-interfaces"></a>Interfaces Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>
+        interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixer.html">gstmixer</a></span><span class="refpurpose"> — Interface for elements that provide mixer operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixeroptions.html">gstmixeroptions</a></span><span class="refpurpose"> — Multi-option mixer control</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixertrack.html">gstmixertrack</a></span><span class="refpurpose"> — Basic mixer control object (volume slider, switch)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnavigation.html">gstnavigation</a></span><span class="refpurpose"> — Interface for creating, sending and parsing navigation
+events.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpropertyprobe.html">gstpropertyprobe</a></span><span class="refpurpose"> — Interface for probing possible property values</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gststreamvolume.html">gststreamvolume</a></span><span class="refpurpose"> — Interface for elements that provide a stream volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttuner.html">gsttuner</a></span><span class="refpurpose"> — Interface for elements providing tuner operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunerchannel.html">gsttunerchannel</a></span><span class="refpurpose"> — A channel from an element implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>
+interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunernorm.html">gsttunernorm</a></span><span class="refpurpose"> — Encapsulates information about the data format(s)
+for a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoorientation.html">gstvideoorientation</a></span><span class="refpurpose"> — Interface for elements providing video orientation
+controls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlay.html">gstvideooverlay</a></span><span class="refpurpose"> — Interface for setting/getting a window system resource
+   on elements supporting it to configure a window into which to render a
+   video.</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstinterfaces-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-libs-hierarchy.html b/docs/libs/html/gstreamer-libs-hierarchy.html
new file mode 100644
index 0000000..0a8d01e
--- /dev/null
+++ b/docs/libs/html/gstreamer-libs-hierarchy.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Part II. Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="prev" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">
+<link rel="next" href="api-index-full.html" title="Index">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideosink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="gstreamer-libs-hierarchy"></a>Part II. Object Hierarchy</h1></div></div></div>
+<pre class="screen">
+    <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+        <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+            <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                    <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">GstAudioDecoder</a>
+                    <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder">GstAudioEncoder</a>
+                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                        <a class="link" href="gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter">GstAudioFilter</a>
+                        <a class="link" href="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
+                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                        <a class="link" href="gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink">GstBaseAudioSink</a>
+                            <a class="link" href="gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
+                        <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink">GstVideoSink</a>
+                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                            <a class="link" href="gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc">GstBaseAudioSrc</a>
+                                <a class="link" href="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+                            <a class="link" href="gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc">GstCddaBaseSrc</a>
+                    <a class="link" href="gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload">GstBaseRTPDepayload</a>
+                    <a class="link" href="gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload">GstBaseRTPPayload</a>
+                        <a class="link" href="gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload">GstBaseRTPAudioPayload</a>
+                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
+                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
+                        <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock">GstAudioClock</a>
+                <a class="link" href="gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">GstRingBuffer</a>
+        <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel">GstColorBalanceChannel</a>
+        <a class="link" href="gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack">GstMixerTrack</a>
+            <a class="link" href="gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions">GstMixerOptions</a>
+        <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel">GstTunerChannel</a>
+        <a class="link" href="gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm">GstTunerNorm</a>
+        <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer">GstDiscoverer</a>
+        <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">GstEncodingProfile</a>
+            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile">GstEncodingVideoProfile</a>
+            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile">GstEncodingAudioProfile</a>
+            <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile">GstEncodingContainerProfile</a>
+        <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget">GstEncodingTarget</a>
+        <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo">GstDiscovererInfo</a>
+    GInterface
+        <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a>
+        <a class="link" href="gst-plugins-base-libs-gstmixer.html#GstMixer">GstMixer</a>
+        <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>
+        <a class="link" href="gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">GstPropertyProbe</a>
+        <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner">GstTuner</a>
+        <a class="link" href="gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume">GstStreamVolume</a>
+        <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">GstVideoOrientation</a>
+</pre>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-netbuffer.html b/docs/libs/html/gstreamer-netbuffer.html
new file mode 100644
index 0000000..231967b
--- /dev/null
+++ b/docs/libs/html/gstreamer-netbuffer.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Network Buffer Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">
+<link rel="next" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideooverlay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstnetbuffer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-netbuffer"></a>Network Buffer Library</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnetbuffer.html">gstnetbuffer</a></span><span class="refpurpose"> — Buffer for use in network sources and sinks</span>
+</dt></dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstnetbuffer-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-plugins-base.html b/docs/libs/html/gstreamer-plugins-base.html
new file mode 100644
index 0000000..c31ea29
--- /dev/null
+++ b/docs/libs/html/gstreamer-plugins-base.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Part I. GStreamer Base Plugins Libraries</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="prev" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="next" href="compiling.html" title="Compiling">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="compiling.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="part">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="gstreamer-plugins-base"></a>Part I. GStreamer Base Plugins Libraries</h1></div></div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt>
+<span class="refentrytitle"><a href="compiling.html">Compiling</a></span><span class="refpurpose"> — 
+How to compile against the base plugins libraries
+</span>
+</dt>
+<dt><span class="chapter"><a href="gstreamer-app.html">App Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsrc.html">appsrc</a></span><span class="refpurpose"> — Easy way for applications to inject buffers into a
+    pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsink.html">appsink</a></span><span class="refpurpose"> — Easy way for applications to extract buffers from a
+    pipeline</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-audio.html">Audio Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudio.html">gstaudio</a></span><span class="refpurpose"> — Support library for audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioclock.html">gstaudioclock</a></span><span class="refpurpose"> — Helper object for implementing audio clocks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiodecoder.html">gstaudiodecoder</a></span><span class="refpurpose"> — Base class for audio decoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioencoder.html">gstaudioencoder</a></span><span class="refpurpose"> — Base class for audio encoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiofilter.html">gstaudiofilter</a></span><span class="refpurpose"> — Base class for simple audio filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiomixerutils.html">gstaudiomixerutils</a></span><span class="refpurpose"> — utility functions to find available audio mixers
+                     from the plugin registry</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosink.html">gstaudiosink</a></span><span class="refpurpose"> — Simple base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosrc.html">gstaudiosrc</a></span><span class="refpurpose"> — Simple base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosink.html">gstbaseaudiosink</a></span><span class="refpurpose"> — Base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosrc.html">gstbaseaudiosrc</a></span><span class="refpurpose"> — Base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmultichannel.html">gstmultichannel</a></span><span class="refpurpose"> — Support for multichannel audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstringbuffer.html">gstringbuffer</a></span><span class="refpurpose"> — Base class for audio ringbuffer implementations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioiec61937.html">gstaudioiec61937</a></span><span class="refpurpose"> — Utility functions for IEC 61937 payloading</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-cdda.html">CDDA Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcddabasesrc.html">gstcddabasesrc</a></span><span class="refpurpose"> — Base class for CD digital audio (CDDA) sources</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-ffft.html">FFT Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfft.html">gstfft</a></span><span class="refpurpose"> — General FFT functions and declarations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts16.html">gstffts16</a></span><span class="refpurpose"> — FFT functions for signed 16 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts32.html">gstffts32</a></span><span class="refpurpose"> — FFT functions for signed 32 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf32.html">gstfftf32</a></span><span class="refpurpose"> — FFT functions for 32 bit float samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf64.html">gstfftf64</a></span><span class="refpurpose"> — FFT functions for 64 bit float samples</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-interfaces.html">Interfaces Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>
+        interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixer.html">gstmixer</a></span><span class="refpurpose"> — Interface for elements that provide mixer operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixeroptions.html">gstmixeroptions</a></span><span class="refpurpose"> — Multi-option mixer control</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixertrack.html">gstmixertrack</a></span><span class="refpurpose"> — Basic mixer control object (volume slider, switch)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnavigation.html">gstnavigation</a></span><span class="refpurpose"> — Interface for creating, sending and parsing navigation
+events.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpropertyprobe.html">gstpropertyprobe</a></span><span class="refpurpose"> — Interface for probing possible property values</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gststreamvolume.html">gststreamvolume</a></span><span class="refpurpose"> — Interface for elements that provide a stream volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttuner.html">gsttuner</a></span><span class="refpurpose"> — Interface for elements providing tuner operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunerchannel.html">gsttunerchannel</a></span><span class="refpurpose"> — A channel from an element implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>
+interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunernorm.html">gsttunernorm</a></span><span class="refpurpose"> — Encapsulates information about the data format(s)
+for a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoorientation.html">gstvideoorientation</a></span><span class="refpurpose"> — Interface for elements providing video orientation
+controls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlay.html">gstvideooverlay</a></span><span class="refpurpose"> — Interface for setting/getting a window system resource
+   on elements supporting it to configure a window into which to render a
+   video.</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-netbuffer.html">Network Buffer Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnetbuffer.html">gstnetbuffer</a></span><span class="refpurpose"> — Buffer for use in network sources and sinks</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-riff.html">Riff Media Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstriff.html">gstriff</a></span><span class="refpurpose"> — Riff fileformat utillity functions.</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-rtp.html">RTP Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpaudiopayload.html">gstbasertpaudiopayload</a></span><span class="refpurpose"> — Base class for audio RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpdepayload.html">gstbasertpdepayload</a></span><span class="refpurpose"> — Base class for RTP depayloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertppayload.html">gstbasertppayload</a></span><span class="refpurpose"> — Base class for RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtpbuffer.html">gstrtpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtcpbuffer.html">gstrtcpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTCP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-rtsp.html">RTSP Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspbase64.html">gstrtspbase64</a></span><span class="refpurpose"> — Helper functions to handle Base64</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspconnection.html">gstrtspconnection</a></span><span class="refpurpose"> — manage RTSP connections</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspdefs.html">gstrtspdefs</a></span><span class="refpurpose"> — common RTSP defines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspextension.html">gstrtspextension</a></span><span class="refpurpose"> — Interface for extending RTSP protocols</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspmessage.html">gstrtspmessage</a></span><span class="refpurpose"> — RTSP messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsprange.html">gstrtsprange</a></span><span class="refpurpose"> — dealing with time ranges</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsptransport.html">gstrtsptransport</a></span><span class="refpurpose"> — dealing with RTSP transports</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspurl.html">gstrtspurl</a></span><span class="refpurpose"> — handling RTSP urls</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-sdp.html">SDP Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstsdpmessage.html">gstsdpmessage</a></span><span class="refpurpose"> — Helper methods for dealing with SDP messages</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-tag.html">Tag Support Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttag.html">gsttag</a></span><span class="refpurpose"> — additional tag definitions for plugins and applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagvorbis.html">gsttagvorbis</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with vorbiscomments</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagid3.html">gsttagid3</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with ID3v1 and ID3v2 tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagexif.html">gsttagexif</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with exif tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmp.html">gsttagxmp</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with xmp packets</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmpwriter.html">gsttagxmpwriter</a></span><span class="refpurpose"> — Interface for elements that provide XMP serialization</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagdemux.html">gsttagdemux</a></span><span class="refpurpose"> — Base class for demuxing tags that are in chunks
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagmux.html">gsttagmux</a></span><span class="refpurpose"> — Base class for adding tags that are in one single chunk
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglanguagecodes.html">gsttaglanguagecodes</a></span><span class="refpurpose"> — mappings for ISO-639 language codes and names</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglicenses.html">gsttaglicenses</a></span><span class="refpurpose"> — utility functions for Creative Commons licenses</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-base-utils.html">Base Utils Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutils.html">gstpbutils</a></span><span class="refpurpose"> — General Application and Plugin Utility Library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpluginsbaseversion.html">gstpluginsbaseversion</a></span><span class="refpurpose"> — GStreamer gst-plugins-base libraries version macros.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilscodecutils.html">gstpbutilscodecutils</a></span><span class="refpurpose"> — Miscellaneous codec-specific utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsdescriptions.html">gstpbutilsdescriptions</a></span><span class="refpurpose"> — Provides human-readable descriptions for caps/codecs
+and encoder, decoder, URI source and URI sink elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsmissingplugins.html">gstpbutilsmissingplugins</a></span><span class="refpurpose"> — Create, recognise and parse missing-plugins messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsinstallplugins.html">gstpbutilsinstallplugins</a></span><span class="refpurpose"> — Missing plugin installation support for applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstdiscoverer.html">gstdiscoverer</a></span><span class="refpurpose"> — Utility for discovering information on URIs.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-encoding-profile.html">encoding-profile</a></span><span class="refpurpose"> — Encoding profile library</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-video.html">Video Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideo.html">gstvideo</a></span><span class="refpurpose"> — Support library for video operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
+</dt>
+</dl></dd>
+</dl>
+</div>
+<p>
+      This manual describes the libraries provided by the GStreamer Base Plugins
+      package.
+    </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-riff.html b/docs/libs/html/gstreamer-riff.html
new file mode 100644
index 0000000..81ea693
--- /dev/null
+++ b/docs/libs/html/gstreamer-riff.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Riff Media Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstnetbuffer.html" title="gstnetbuffer">
+<link rel="next" href="gst-plugins-base-libs-gstriff.html" title="gstriff">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstnetbuffer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstriff.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-riff"></a>Riff Media Library</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstriff.html">gstriff</a></span><span class="refpurpose"> — Riff fileformat utillity functions.</span>
+</dt></dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstriff-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-rtp.html b/docs/libs/html/gstreamer-rtp.html
new file mode 100644
index 0000000..d2d507d
--- /dev/null
+++ b/docs/libs/html/gstreamer-rtp.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RTP Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstriff.html" title="gstriff">
+<link rel="next" href="gst-plugins-base-libs-gstbasertpaudiopayload.html" title="gstbasertpaudiopayload">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstriff.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstbasertpaudiopayload.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-rtp"></a>RTP Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpaudiopayload.html">gstbasertpaudiopayload</a></span><span class="refpurpose"> — Base class for audio RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpdepayload.html">gstbasertpdepayload</a></span><span class="refpurpose"> — Base class for RTP depayloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertppayload.html">gstbasertppayload</a></span><span class="refpurpose"> — Base class for RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtpbuffer.html">gstrtpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtcpbuffer.html">gstrtcpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTCP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstrtp-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-rtsp.html b/docs/libs/html/gstreamer-rtsp.html
new file mode 100644
index 0000000..6e6651d
--- /dev/null
+++ b/docs/libs/html/gstreamer-rtsp.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RTSP Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">
+<link rel="next" href="gst-plugins-base-libs-gstrtspbase64.html" title="gstrtspbase64">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtppayloads.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstrtspbase64.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-rtsp"></a>RTSP Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspbase64.html">gstrtspbase64</a></span><span class="refpurpose"> — Helper functions to handle Base64</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspconnection.html">gstrtspconnection</a></span><span class="refpurpose"> — manage RTSP connections</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspdefs.html">gstrtspdefs</a></span><span class="refpurpose"> — common RTSP defines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspextension.html">gstrtspextension</a></span><span class="refpurpose"> — Interface for extending RTSP protocols</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspmessage.html">gstrtspmessage</a></span><span class="refpurpose"> — RTSP messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsprange.html">gstrtsprange</a></span><span class="refpurpose"> — dealing with time ranges</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsptransport.html">gstrtsptransport</a></span><span class="refpurpose"> — dealing with RTSP transports</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspurl.html">gstrtspurl</a></span><span class="refpurpose"> — handling RTSP urls</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstrtsp-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-sdp.html b/docs/libs/html/gstreamer-sdp.html
new file mode 100644
index 0000000..f997111
--- /dev/null
+++ b/docs/libs/html/gstreamer-sdp.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SDP Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">
+<link rel="next" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstrtspurl.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstsdpmessage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-sdp"></a>SDP Library</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstsdpmessage.html">gstsdpmessage</a></span><span class="refpurpose"> — Helper methods for dealing with SDP messages</span>
+</dt></dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstsdp-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-tag.html b/docs/libs/html/gstreamer-tag.html
new file mode 100644
index 0000000..3337b30
--- /dev/null
+++ b/docs/libs/html/gstreamer-tag.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Tag Support Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">
+<link rel="next" href="gst-plugins-base-libs-gsttag.html" title="gsttag">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-gstsdpmessage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gsttag.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-tag"></a>Tag Support Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttag.html">gsttag</a></span><span class="refpurpose"> — additional tag definitions for plugins and applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagvorbis.html">gsttagvorbis</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with vorbiscomments</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagid3.html">gsttagid3</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with ID3v1 and ID3v2 tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagexif.html">gsttagexif</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with exif tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmp.html">gsttagxmp</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with xmp packets</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmpwriter.html">gsttagxmpwriter</a></span><span class="refpurpose"> — Interface for elements that provide XMP serialization</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagdemux.html">gsttagdemux</a></span><span class="refpurpose"> — Base class for demuxing tags that are in chunks
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagmux.html">gsttagmux</a></span><span class="refpurpose"> — Base class for adding tags that are in one single chunk
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglanguagecodes.html">gsttaglanguagecodes</a></span><span class="refpurpose"> — mappings for ISO-639 language codes and names</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglicenses.html">gsttaglicenses</a></span><span class="refpurpose"> — utility functions for Creative Commons licenses</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgsttag-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-video.html b/docs/libs/html/gstreamer-video.html
new file mode 100644
index 0000000..069a917
--- /dev/null
+++ b/docs/libs/html/gstreamer-video.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Video Library</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<link rel="prev" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">
+<link rel="next" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-libs-encoding-profile.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="gstreamer-plugins-base.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Library Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideo.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="gstreamer-video"></a>Video Library</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideo.html">gstvideo</a></span><span class="refpurpose"> — Support library for video operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
+</dt>
+</dl></div>
+<p>
+        This library should be linked to by getting cflags and libs from
+        <code class="filename">gstreamer-plugins-base-0.11.pc</code> and adding
+        <code class="filename">-lgstvideo-0.11</code> to the library flags.
+      </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/home.png b/docs/libs/html/home.png
new file mode 100644
index 0000000..1700361
--- /dev/null
+++ b/docs/libs/html/home.png
Binary files differ
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
new file mode 100644
index 0000000..87dafdb
--- /dev/null
+++ b/docs/libs/html/index.html
@@ -0,0 +1,307 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GStreamer Base Plugins 0.11 Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Library Reference Manual">
+<link rel="next" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Base Plugins 0.11 Library Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+      for GStreamer Base Library 0.11 (0.11.1)
+      <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/</a>.
+    </p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="part"><a href="gstreamer-plugins-base.html">I. GStreamer Base Plugins Libraries</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="compiling.html">Compiling</a></span><span class="refpurpose"> — 
+How to compile against the base plugins libraries
+</span>
+</dt>
+<dt><span class="chapter"><a href="gstreamer-app.html">App Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsrc.html">appsrc</a></span><span class="refpurpose"> — Easy way for applications to inject buffers into a
+    pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-appsink.html">appsink</a></span><span class="refpurpose"> — Easy way for applications to extract buffers from a
+    pipeline</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-audio.html">Audio Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudio.html">gstaudio</a></span><span class="refpurpose"> — Support library for audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioclock.html">gstaudioclock</a></span><span class="refpurpose"> — Helper object for implementing audio clocks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiodecoder.html">gstaudiodecoder</a></span><span class="refpurpose"> — Base class for audio decoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioencoder.html">gstaudioencoder</a></span><span class="refpurpose"> — Base class for audio encoders</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiofilter.html">gstaudiofilter</a></span><span class="refpurpose"> — Base class for simple audio filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiomixerutils.html">gstaudiomixerutils</a></span><span class="refpurpose"> — utility functions to find available audio mixers
+                     from the plugin registry</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosink.html">gstaudiosink</a></span><span class="refpurpose"> — Simple base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudiosrc.html">gstaudiosrc</a></span><span class="refpurpose"> — Simple base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosink.html">gstbaseaudiosink</a></span><span class="refpurpose"> — Base class for audio sinks</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbaseaudiosrc.html">gstbaseaudiosrc</a></span><span class="refpurpose"> — Base class for audio sources</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmultichannel.html">gstmultichannel</a></span><span class="refpurpose"> — Support for multichannel audio elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstringbuffer.html">gstringbuffer</a></span><span class="refpurpose"> — Base class for audio ringbuffer implementations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstaudioiec61937.html">gstaudioiec61937</a></span><span class="refpurpose"> — Utility functions for IEC 61937 payloading</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-cdda.html">CDDA Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcddabasesrc.html">gstcddabasesrc</a></span><span class="refpurpose"> — Base class for CD digital audio (CDDA) sources</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-ffft.html">FFT Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfft.html">gstfft</a></span><span class="refpurpose"> — General FFT functions and declarations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts16.html">gstffts16</a></span><span class="refpurpose"> — FFT functions for signed 16 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstffts32.html">gstffts32</a></span><span class="refpurpose"> — FFT functions for signed 32 bit integer samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf32.html">gstfftf32</a></span><span class="refpurpose"> — FFT functions for 32 bit float samples</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstfftf64.html">gstfftf64</a></span><span class="refpurpose"> — FFT functions for 64 bit float samples</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-interfaces.html">Interfaces Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>
+        interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixer.html">gstmixer</a></span><span class="refpurpose"> — Interface for elements that provide mixer operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixeroptions.html">gstmixeroptions</a></span><span class="refpurpose"> — Multi-option mixer control</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstmixertrack.html">gstmixertrack</a></span><span class="refpurpose"> — Basic mixer control object (volume slider, switch)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnavigation.html">gstnavigation</a></span><span class="refpurpose"> — Interface for creating, sending and parsing navigation
+events.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpropertyprobe.html">gstpropertyprobe</a></span><span class="refpurpose"> — Interface for probing possible property values</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gststreamvolume.html">gststreamvolume</a></span><span class="refpurpose"> — Interface for elements that provide a stream volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttuner.html">gsttuner</a></span><span class="refpurpose"> — Interface for elements providing tuner operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunerchannel.html">gsttunerchannel</a></span><span class="refpurpose"> — A channel from an element implementing the <a class="link" href="gst-plugins-base-libs-gsttuner.html#GstTuner"><span class="type">GstTuner</span></a>
+interface.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttunernorm.html">gsttunernorm</a></span><span class="refpurpose"> — Encapsulates information about the data format(s)
+for a <a class="link" href="gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel"><span class="type">GstTunerChannel</span></a>.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoorientation.html">gstvideoorientation</a></span><span class="refpurpose"> — Interface for elements providing video orientation
+controls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlay.html">gstvideooverlay</a></span><span class="refpurpose"> — Interface for setting/getting a window system resource
+   on elements supporting it to configure a window into which to render a
+   video.</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-netbuffer.html">Network Buffer Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstnetbuffer.html">gstnetbuffer</a></span><span class="refpurpose"> — Buffer for use in network sources and sinks</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-riff.html">Riff Media Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstriff.html">gstriff</a></span><span class="refpurpose"> — Riff fileformat utillity functions.</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-rtp.html">RTP Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpaudiopayload.html">gstbasertpaudiopayload</a></span><span class="refpurpose"> — Base class for audio RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertpdepayload.html">gstbasertpdepayload</a></span><span class="refpurpose"> — Base class for RTP depayloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstbasertppayload.html">gstbasertppayload</a></span><span class="refpurpose"> — Base class for RTP payloader</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtpbuffer.html">gstrtpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtcpbuffer.html">gstrtcpbuffer</a></span><span class="refpurpose"> — Helper methods for dealing with RTCP buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-rtsp.html">RTSP Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspbase64.html">gstrtspbase64</a></span><span class="refpurpose"> — Helper functions to handle Base64</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspconnection.html">gstrtspconnection</a></span><span class="refpurpose"> — manage RTSP connections</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspdefs.html">gstrtspdefs</a></span><span class="refpurpose"> — common RTSP defines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspextension.html">gstrtspextension</a></span><span class="refpurpose"> — Interface for extending RTSP protocols</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspmessage.html">gstrtspmessage</a></span><span class="refpurpose"> — RTSP messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsprange.html">gstrtsprange</a></span><span class="refpurpose"> — dealing with time ranges</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtsptransport.html">gstrtsptransport</a></span><span class="refpurpose"> — dealing with RTSP transports</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtspurl.html">gstrtspurl</a></span><span class="refpurpose"> — handling RTSP urls</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-sdp.html">SDP Library</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstsdpmessage.html">gstsdpmessage</a></span><span class="refpurpose"> — Helper methods for dealing with SDP messages</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="gstreamer-tag.html">Tag Support Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttag.html">gsttag</a></span><span class="refpurpose"> — additional tag definitions for plugins and applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagvorbis.html">gsttagvorbis</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with vorbiscomments</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagid3.html">gsttagid3</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with ID3v1 and ID3v2 tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagexif.html">gsttagexif</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with exif tags</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmp.html">gsttagxmp</a></span><span class="refpurpose"> — tag mappings and support functions for plugins
+                    dealing with xmp packets</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagxmpwriter.html">gsttagxmpwriter</a></span><span class="refpurpose"> — Interface for elements that provide XMP serialization</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagdemux.html">gsttagdemux</a></span><span class="refpurpose"> — Base class for demuxing tags that are in chunks
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttagmux.html">gsttagmux</a></span><span class="refpurpose"> — Base class for adding tags that are in one single chunk
+                    directly at the beginning or at the end of a file</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglanguagecodes.html">gsttaglanguagecodes</a></span><span class="refpurpose"> — mappings for ISO-639 language codes and names</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gsttaglicenses.html">gsttaglicenses</a></span><span class="refpurpose"> — utility functions for Creative Commons licenses</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-base-utils.html">Base Utils Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutils.html">gstpbutils</a></span><span class="refpurpose"> — General Application and Plugin Utility Library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpluginsbaseversion.html">gstpluginsbaseversion</a></span><span class="refpurpose"> — GStreamer gst-plugins-base libraries version macros.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilscodecutils.html">gstpbutilscodecutils</a></span><span class="refpurpose"> — Miscellaneous codec-specific utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsdescriptions.html">gstpbutilsdescriptions</a></span><span class="refpurpose"> — Provides human-readable descriptions for caps/codecs
+and encoder, decoder, URI source and URI sink elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsmissingplugins.html">gstpbutilsmissingplugins</a></span><span class="refpurpose"> — Create, recognise and parse missing-plugins messages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstpbutilsinstallplugins.html">gstpbutilsinstallplugins</a></span><span class="refpurpose"> — Missing plugin installation support for applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstdiscoverer.html">gstdiscoverer</a></span><span class="refpurpose"> — Utility for discovering information on URIs.</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-encoding-profile.html">encoding-profile</a></span><span class="refpurpose"> — Encoding profile library</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="gstreamer-video.html">Video Library</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideo.html">gstvideo</a></span><span class="refpurpose"> — Support library for video operations</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
+</dt>
+</dl></dd>
+</dl></dd>
+<dt><span class="part"><a href="gstreamer-libs-hierarchy.html">II. Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="api-index-full.html">Index</a></span></dt>
+<dt><span class="index"><a href="api-index-deprecated.html">Index of deprecated API</a></span></dt>
+<dt><span class="glossary"><a href="annotation-glossary.html">Annotation Glossary</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
new file mode 100644
index 0000000..d86f6e3
--- /dev/null
+++ b/docs/libs/html/index.sgml
@@ -0,0 +1,1906 @@
+<ONLINE href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/">
+<ANCHOR id="compiling" href="gst-plugins-base-libs-0.11/compiling.html">
+<ANCHOR id="gst-plugins-base-libs-appsrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html">
+<ANCHOR id="gst-plugins-base-libs-appsrc.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.synopsis">
+<ANCHOR id="gst-plugins-base-libs-appsrc.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.description">
+<ANCHOR id="gst-plugins-base-libs-appsrc.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.details">
+<ANCHOR id="GstAppStreamType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GstAppStreamType">
+<ANCHOR id="GST-APP-STREAM-TYPE-STREAM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-STREAM:CAPS">
+<ANCHOR id="GST-APP-STREAM-TYPE-SEEKABLE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-SEEKABLE:CAPS">
+<ANCHOR id="GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS">
+<ANCHOR id="gst-app-src-set-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-caps">
+<ANCHOR id="gst-app-src-get-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-caps">
+<ANCHOR id="gst-app-src-get-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-latency">
+<ANCHOR id="gst-app-src-set-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-latency">
+<ANCHOR id="gst-app-src-set-size" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-size">
+<ANCHOR id="gst-app-src-get-size" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-size">
+<ANCHOR id="gst-app-src-set-stream-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-stream-type">
+<ANCHOR id="gst-app-src-get-stream-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-stream-type">
+<ANCHOR id="gst-app-src-set-max-bytes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-max-bytes">
+<ANCHOR id="gst-app-src-get-max-bytes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-max-bytes">
+<ANCHOR id="gst-app-src-get-emit-signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-get-emit-signals">
+<ANCHOR id="gst-app-src-set-emit-signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals">
+<ANCHOR id="GstAppSrcCallbacks" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks">
+<ANCHOR id="gst-app-src-set-callbacks" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks">
+<ANCHOR id="gst-app-src-push-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer">
+<ANCHOR id="gst-app-src-end-of-stream" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream">
+<ANCHOR id="gst-plugins-base-libs-appsrc.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.see-also">
+<ANCHOR id="gst-plugins-base-libs-appsink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html">
+<ANCHOR id="gst-plugins-base-libs-appsink.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-plugins-base-libs-appsink.synopsis">
+<ANCHOR id="gst-plugins-base-libs-appsink.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-plugins-base-libs-appsink.description">
+<ANCHOR id="gst-plugins-base-libs-appsink.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-plugins-base-libs-appsink.details">
+<ANCHOR id="gst-app-sink-set-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-set-caps">
+<ANCHOR id="gst-app-sink-get-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-get-caps">
+<ANCHOR id="gst-app-sink-is-eos" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-is-eos">
+<ANCHOR id="gst-app-sink-set-emit-signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-set-emit-signals">
+<ANCHOR id="gst-app-sink-get-emit-signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-get-emit-signals">
+<ANCHOR id="gst-app-sink-set-max-buffers" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-set-max-buffers">
+<ANCHOR id="gst-app-sink-get-max-buffers" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-get-max-buffers">
+<ANCHOR id="gst-app-sink-set-drop" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-set-drop">
+<ANCHOR id="gst-app-sink-get-drop" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-get-drop">
+<ANCHOR id="gst-app-sink-pull-preroll" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll">
+<ANCHOR id="gst-app-sink-pull-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer">
+<ANCHOR id="gst-app-sink-pull-buffer-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-pull-buffer-list">
+<ANCHOR id="GstAppSinkCallbacks" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#GstAppSinkCallbacks">
+<ANCHOR id="gst-app-sink-set-callbacks" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-app-sink-set-callbacks">
+<ANCHOR id="gst-plugins-base-libs-appsink.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html#gst-plugins-base-libs-appsink.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudio" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudio.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-plugins-base-libs-gstaudio.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstaudio.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-plugins-base-libs-gstaudio.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudio.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-plugins-base-libs-gstaudio.details">
+<ANCHOR id="GstAudioFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GstAudioFlags">
+<ANCHOR id="GST-AUDIO-FLAG-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-NONE:CAPS">
+<ANCHOR id="GST-AUDIO-FLAG-DEFAULT-POSITIONS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-DEFAULT-POSITIONS:CAPS">
+<ANCHOR id="GstAudioFormat" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GstAudioFormat">
+<ANCHOR id="GST-AUDIO-FORMAT-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S8:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S8:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U8:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U8:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64:CAPS">
+<ANCHOR id="GstAudioFormatFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS">
+<ANCHOR id="GstAudioFormatInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo">
+<ANCHOR id="GstAudioInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GstAudioInfo">
+<ANCHOR id="gst-audio-info-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-info-init">
+<ANCHOR id="gst-audio-info-from-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-info-from-caps">
+<ANCHOR id="gst-audio-info-to-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-info-to-caps">
+<ANCHOR id="gst-audio-info-convert" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-info-convert">
+<ANCHOR id="gst-audio-format-get-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-format-get-info">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-DEPTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-DEPTH:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-ENDIANNESS:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-FLAGS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FLAGS:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-FORMAT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-FORMAT:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-FLOAT:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-INTEGER:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-BIG-ENDIAN:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-LITTLE-ENDIAN:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-IS-SIGNED:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-INFO-WIDTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-INFO-WIDTH:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-BPF:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPF:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-BPS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-BPS:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-CHANNELS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-CHANNELS:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-DEPTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-DEPTH:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-FLAGS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FLAGS:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-FORMAT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-FORMAT:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-HAS-DEFAULT-POSITIONS:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-POSITION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-POSITION:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-RATE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-RATE:CAPS">
+<ANCHOR id="GST-AUDIO-INFO-WIDTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-INFO-WIDTH:CAPS">
+<ANCHOR id="GST-FRAMES-TO-CLOCK-TIME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-FRAMES-TO-CLOCK-TIME:CAPS">
+<ANCHOR id="GST-CLOCK-TIME-TO-FRAMES:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-CLOCK-TIME-TO-FRAMES:CAPS">
+<ANCHOR id="GST-AUDIO-DEF-RATE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-DEF-RATE:CAPS">
+<ANCHOR id="gst-audio-buffer-clip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudio.html#gst-audio-buffer-clip">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-plugins-base-libs-gstaudioclock.synopsis">
+<ANCHOR id="GstAudioClock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#GstAudioClock">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-plugins-base-libs-gstaudioclock.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-plugins-base-libs-gstaudioclock.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-plugins-base-libs-gstaudioclock.details">
+<ANCHOR id="GstAudioClock-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#GstAudioClock-struct">
+<ANCHOR id="GstAudioClockGetTimeFunc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#GstAudioClockGetTimeFunc">
+<ANCHOR id="gst-audio-clock-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new">
+<ANCHOR id="gst-audio-clock-new-full" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-new-full">
+<ANCHOR id="gst-audio-clock-adjust" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-adjust">
+<ANCHOR id="gst-audio-clock-get-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-get-time">
+<ANCHOR id="gst-audio-clock-reset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-reset">
+<ANCHOR id="gst-audio-clock-invalidate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-audio-clock-invalidate">
+<ANCHOR id="gst-plugins-base-libs-gstaudioclock.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioclock.html#gst-plugins-base-libs-gstaudioclock.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.synopsis">
+<ANCHOR id="GstAudioDecoder" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.properties">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.details">
+<ANCHOR id="GstAudioDecoder-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct">
+<ANCHOR id="GstAudioDecoderClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass">
+<ANCHOR id="GST-AUDIO-DECODER-ERROR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-ERROR:CAPS">
+<ANCHOR id="GST-AUDIO-DECODER-SINK-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-DECODER-SINK-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-PAD:CAPS">
+<ANCHOR id="GST-AUDIO-DECODER-SRC-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-DECODER-SRC-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SRC-PAD:CAPS">
+<ANCHOR id="gst-audio-decoder-finish-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-finish-frame">
+<ANCHOR id="gst-audio-decoder-get-audio-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-audio-info">
+<ANCHOR id="gst-audio-decoder-get-byte-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-byte-time">
+<ANCHOR id="gst-audio-decoder-get-delay" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-delay">
+<ANCHOR id="gst-audio-decoder-get-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-latency">
+<ANCHOR id="gst-audio-decoder-get-max-errors" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-max-errors">
+<ANCHOR id="gst-audio-decoder-get-min-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-min-latency">
+<ANCHOR id="gst-audio-decoder-get-parse-state" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-parse-state">
+<ANCHOR id="gst-audio-decoder-get-plc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc">
+<ANCHOR id="gst-audio-decoder-get-plc-aware" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-plc-aware">
+<ANCHOR id="gst-audio-decoder-get-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-get-tolerance">
+<ANCHOR id="gst-audio-decoder-set-byte-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-byte-time">
+<ANCHOR id="gst-audio-decoder-set-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-latency">
+<ANCHOR id="gst-audio-decoder-set-max-errors" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-max-errors">
+<ANCHOR id="gst-audio-decoder-set-min-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-min-latency">
+<ANCHOR id="gst-audio-decoder-set-plc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc">
+<ANCHOR id="gst-audio-decoder-set-plc-aware" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware">
+<ANCHOR id="gst-audio-decoder-set-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.property-details">
+<ANCHOR id="GstAudioDecoder--min-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--min-latency">
+<ANCHOR id="GstAudioDecoder--plc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--plc">
+<ANCHOR id="GstAudioDecoder--tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder--tolerance">
+<ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.synopsis">
+<ANCHOR id="GstAudioEncoder" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.implemented-interfaces" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.properties">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.details">
+<ANCHOR id="GstAudioEncoder-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder-struct">
+<ANCHOR id="GstAudioEncoderClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoderClass">
+<ANCHOR id="GST-AUDIO-ENCODER-SEGMENT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SEGMENT:CAPS">
+<ANCHOR id="GST-AUDIO-ENCODER-SINK-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-ENCODER-SINK-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SINK-PAD:CAPS">
+<ANCHOR id="GST-AUDIO-ENCODER-SRC-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-NAME:CAPS">
+<ANCHOR id="GST-AUDIO-ENCODER-SRC-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GST-AUDIO-ENCODER-SRC-PAD:CAPS">
+<ANCHOR id="gst-audio-encoder-finish-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-finish-frame">
+<ANCHOR id="gst-audio-encoder-get-audio-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-audio-info">
+<ANCHOR id="gst-audio-encoder-get-frame-max" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-max">
+<ANCHOR id="gst-audio-encoder-get-frame-samples-min" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-min">
+<ANCHOR id="gst-audio-encoder-get-frame-samples-max" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-frame-samples-max">
+<ANCHOR id="gst-audio-encoder-get-hard-resync" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-hard-resync">
+<ANCHOR id="gst-audio-encoder-get-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-latency">
+<ANCHOR id="gst-audio-encoder-get-lookahead" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-lookahead">
+<ANCHOR id="gst-audio-encoder-get-mark-granule" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-mark-granule">
+<ANCHOR id="gst-audio-encoder-get-perfect-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-perfect-timestamp">
+<ANCHOR id="gst-audio-encoder-get-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-get-tolerance">
+<ANCHOR id="gst-audio-encoder-proxy-getcaps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-proxy-getcaps">
+<ANCHOR id="gst-audio-encoder-set-frame-max" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-max">
+<ANCHOR id="gst-audio-encoder-set-frame-samples-min" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-min">
+<ANCHOR id="gst-audio-encoder-set-frame-samples-max" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-frame-samples-max">
+<ANCHOR id="gst-audio-encoder-set-hard-resync" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-hard-resync">
+<ANCHOR id="gst-audio-encoder-set-latency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-latency">
+<ANCHOR id="gst-audio-encoder-set-lookahead" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-lookahead">
+<ANCHOR id="gst-audio-encoder-set-mark-granule" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-mark-granule">
+<ANCHOR id="gst-audio-encoder-set-perfect-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-perfect-timestamp">
+<ANCHOR id="gst-audio-encoder-set-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-set-tolerance">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.property-details">
+<ANCHOR id="GstAudioEncoder--hard-resync" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--hard-resync">
+<ANCHOR id="GstAudioEncoder--mark-granule" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--mark-granule">
+<ANCHOR id="GstAudioEncoder--perfect-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--perfect-timestamp">
+<ANCHOR id="GstAudioEncoder--tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder--tolerance">
+<ANCHOR id="gst-plugins-base-libs-gstaudioencoder.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioencoder.html#gst-plugins-base-libs-gstaudioencoder.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudiofilter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudiofilter.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#gst-plugins-base-libs-gstaudiofilter.synopsis">
+<ANCHOR id="GstAudioFilter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter">
+<ANCHOR id="gst-plugins-base-libs-gstaudiofilter.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#gst-plugins-base-libs-gstaudiofilter.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudiofilter.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#gst-plugins-base-libs-gstaudiofilter.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudiofilter.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#gst-plugins-base-libs-gstaudiofilter.details">
+<ANCHOR id="GstAudioFilter-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter-struct">
+<ANCHOR id="GstAudioFilterClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilterClass">
+<ANCHOR id="gst-audio-filter-class-add-pad-templates" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#gst-audio-filter-class-add-pad-templates">
+<ANCHOR id="gst-plugins-base-libs-gstaudiomixerutils" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudiomixerutils.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html#gst-plugins-base-libs-gstaudiomixerutils.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstaudiomixerutils.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html#gst-plugins-base-libs-gstaudiomixerutils.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudiomixerutils.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html#gst-plugins-base-libs-gstaudiomixerutils.details">
+<ANCHOR id="GstAudioMixerFilterFunc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html#GstAudioMixerFilterFunc">
+<ANCHOR id="gst-audio-default-registry-mixer-filter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiomixerutils.html#gst-audio-default-registry-mixer-filter">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#gst-plugins-base-libs-gstaudiosink.synopsis">
+<ANCHOR id="GstAudioSink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#gst-plugins-base-libs-gstaudiosink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#gst-plugins-base-libs-gstaudiosink.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#gst-plugins-base-libs-gstaudiosink.details">
+<ANCHOR id="GstAudioSink-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink-struct">
+<ANCHOR id="GstAudioSinkClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#GstAudioSinkClass">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosink.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#gst-plugins-base-libs-gstaudiosink.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#gst-plugins-base-libs-gstaudiosrc.synopsis">
+<ANCHOR id="GstAudioSrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#gst-plugins-base-libs-gstaudiosrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#gst-plugins-base-libs-gstaudiosrc.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#gst-plugins-base-libs-gstaudiosrc.details">
+<ANCHOR id="GstAudioSrc-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc-struct">
+<ANCHOR id="GstAudioSrcClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrcClass">
+<ANCHOR id="gst-plugins-base-libs-gstaudiosrc.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#gst-plugins-base-libs-gstaudiosrc.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.synopsis">
+<ANCHOR id="GstBaseAudioSink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.properties">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.description">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.details">
+<ANCHOR id="GstBaseAudioSink-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink-struct">
+<ANCHOR id="GstBaseAudioSinkClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkClass">
+<ANCHOR id="GstBaseAudioSinkSlaveMethod" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSinkSlaveMethod">
+<ANCHOR id="GST-BASE-AUDIO-SINK-SLAVE-RESAMPLE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-RESAMPLE:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SINK-SLAVE-SKEW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-SKEW:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SINK-SLAVE-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-SLAVE-NONE:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SINK-CLOCK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-CLOCK:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SINK-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GST-BASE-AUDIO-SINK-PAD:CAPS">
+<ANCHOR id="gst-base-audio-sink-create-ringbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-create-ringbuffer">
+<ANCHOR id="gst-base-audio-sink-set-provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-provide-clock">
+<ANCHOR id="gst-base-audio-sink-get-provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-provide-clock">
+<ANCHOR id="gst-base-audio-sink-set-slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-slave-method">
+<ANCHOR id="gst-base-audio-sink-get-slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-slave-method">
+<ANCHOR id="gst-base-audio-sink-get-drift-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-get-drift-tolerance">
+<ANCHOR id="gst-base-audio-sink-set-drift-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-base-audio-sink-set-drift-tolerance">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.property-details">
+<ANCHOR id="GstBaseAudioSink--buffer-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--buffer-time">
+<ANCHOR id="GstBaseAudioSink--can-activate-pull" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--can-activate-pull">
+<ANCHOR id="GstBaseAudioSink--drift-tolerance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--drift-tolerance">
+<ANCHOR id="GstBaseAudioSink--latency-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--latency-time">
+<ANCHOR id="GstBaseAudioSink--provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--provide-clock">
+<ANCHOR id="GstBaseAudioSink--slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink--slave-method">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosink.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#gst-plugins-base-libs-gstbaseaudiosink.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.synopsis">
+<ANCHOR id="GstBaseAudioSrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.properties">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.description">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.details">
+<ANCHOR id="GstBaseAudioSrc-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc-struct">
+<ANCHOR id="GstBaseAudioSrcClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcClass">
+<ANCHOR id="GstBaseAudioSrcSlaveMethod" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrcSlaveMethod">
+<ANCHOR id="GST-BASE-AUDIO-SRC-SLAVE-RESAMPLE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-RESAMPLE:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SRC-SLAVE-RETIMESTAMP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-RETIMESTAMP:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SRC-SLAVE-SKEW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-SKEW:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SRC-SLAVE-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-SLAVE-NONE:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SRC-CLOCK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-CLOCK:CAPS">
+<ANCHOR id="GST-BASE-AUDIO-SRC-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GST-BASE-AUDIO-SRC-PAD:CAPS">
+<ANCHOR id="gst-base-audio-src-create-ringbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-create-ringbuffer">
+<ANCHOR id="gst-base-audio-src-set-provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-provide-clock">
+<ANCHOR id="gst-base-audio-src-get-provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-provide-clock">
+<ANCHOR id="gst-base-audio-src-get-slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-get-slave-method">
+<ANCHOR id="gst-base-audio-src-set-slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-base-audio-src-set-slave-method">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.property-details">
+<ANCHOR id="GstBaseAudioSrc--actual-buffer-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-buffer-time">
+<ANCHOR id="GstBaseAudioSrc--actual-latency-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--actual-latency-time">
+<ANCHOR id="GstBaseAudioSrc--buffer-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--buffer-time">
+<ANCHOR id="GstBaseAudioSrc--latency-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--latency-time">
+<ANCHOR id="GstBaseAudioSrc--provide-clock" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--provide-clock">
+<ANCHOR id="GstBaseAudioSrc--slave-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc--slave-method">
+<ANCHOR id="gst-plugins-base-libs-gstbaseaudiosrc.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#gst-plugins-base-libs-gstbaseaudiosrc.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstmultichannel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html">
+<ANCHOR id="gst-plugins-base-libs-gstmultichannel.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-plugins-base-libs-gstmultichannel.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstmultichannel.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-plugins-base-libs-gstmultichannel.description">
+<ANCHOR id="gst-plugins-base-libs-gstmultichannel.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-plugins-base-libs-gstmultichannel.details">
+<ANCHOR id="GstAudioChannelPosition" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GstAudioChannelPosition">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-MONO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-MONO:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-LFE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-LFE:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS">
+<ANCHOR id="gst-audio-fixate-channel-positions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-fixate-channel-positions">
+<ANCHOR id="gst-audio-get-channel-positions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-get-channel-positions">
+<ANCHOR id="gst-audio-set-caps-channel-positions-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-caps-channel-positions-list">
+<ANCHOR id="gst-audio-set-channel-positions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-channel-positions">
+<ANCHOR id="gst-audio-set-structure-channel-positions-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-set-structure-channel-positions-list">
+<ANCHOR id="gst-audio-check-channel-positions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmultichannel.html#gst-audio-check-channel-positions">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-plugins-base-libs-gstringbuffer.synopsis">
+<ANCHOR id="GstRingBuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-plugins-base-libs-gstringbuffer.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-plugins-base-libs-gstringbuffer.description">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-plugins-base-libs-gstringbuffer.details">
+<ANCHOR id="GstRingBuffer-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBuffer-struct">
+<ANCHOR id="GstRingBufferClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBufferClass">
+<ANCHOR id="GstRingBufferSpec" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSpec">
+<ANCHOR id="GstRingBufferCallback" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBufferCallback">
+<ANCHOR id="GstRingBufferSegState" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBufferSegState">
+<ANCHOR id="GST-SEGSTATE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-INVALID:CAPS">
+<ANCHOR id="GST-SEGSTATE-EMPTY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-EMPTY:CAPS">
+<ANCHOR id="GST-SEGSTATE-FILLED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-FILLED:CAPS">
+<ANCHOR id="GST-SEGSTATE-PARTIAL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-SEGSTATE-PARTIAL:CAPS">
+<ANCHOR id="GstRingBufferState" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstRingBufferState">
+<ANCHOR id="GST-RING-BUFFER-STATE-STOPPED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-STOPPED:CAPS">
+<ANCHOR id="GST-RING-BUFFER-STATE-PAUSED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-PAUSED:CAPS">
+<ANCHOR id="GST-RING-BUFFER-STATE-STARTED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-STATE-STARTED:CAPS">
+<ANCHOR id="GstBufferFormatType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GstBufferFormatType">
+<ANCHOR id="GST-BUFTYPE-RAW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-RAW:CAPS">
+<ANCHOR id="GST-BUFTYPE-MU-LAW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MU-LAW:CAPS">
+<ANCHOR id="GST-BUFTYPE-A-LAW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-A-LAW:CAPS">
+<ANCHOR id="GST-BUFTYPE-IMA-ADPCM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-IMA-ADPCM:CAPS">
+<ANCHOR id="GST-BUFTYPE-MPEG:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG:CAPS">
+<ANCHOR id="GST-BUFTYPE-GSM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-GSM:CAPS">
+<ANCHOR id="GST-BUFTYPE-IEC958:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-IEC958:CAPS">
+<ANCHOR id="GST-BUFTYPE-AC3:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-AC3:CAPS">
+<ANCHOR id="GST-BUFTYPE-EAC3:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-EAC3:CAPS">
+<ANCHOR id="GST-BUFTYPE-DTS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-DTS:CAPS">
+<ANCHOR id="GST-BUFTYPE-MPEG2-AAC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG2-AAC:CAPS">
+<ANCHOR id="GST-BUFTYPE-MPEG4-AAC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-BUFTYPE-MPEG4-AAC:CAPS">
+<ANCHOR id="GST-RING-BUFFER-BROADCAST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-BROADCAST:CAPS">
+<ANCHOR id="GST-RING-BUFFER-GET-COND:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-GET-COND:CAPS">
+<ANCHOR id="GST-RING-BUFFER-SIGNAL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-SIGNAL:CAPS">
+<ANCHOR id="GST-RING-BUFFER-WAIT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#GST-RING-BUFFER-WAIT:CAPS">
+<ANCHOR id="gst-ring-buffer-set-callback" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-callback">
+<ANCHOR id="gst-ring-buffer-acquire" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-acquire">
+<ANCHOR id="gst-ring-buffer-release" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-release">
+<ANCHOR id="gst-ring-buffer-is-acquired" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-acquired">
+<ANCHOR id="gst-ring-buffer-activate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-activate">
+<ANCHOR id="gst-ring-buffer-is-active" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-is-active">
+<ANCHOR id="gst-ring-buffer-start" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-start">
+<ANCHOR id="gst-ring-buffer-pause" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-pause">
+<ANCHOR id="gst-ring-buffer-stop" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-stop">
+<ANCHOR id="gst-ring-buffer-delay" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-delay">
+<ANCHOR id="gst-ring-buffer-samples-done" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-samples-done">
+<ANCHOR id="gst-ring-buffer-set-sample" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-sample">
+<ANCHOR id="gst-ring-buffer-commit" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit">
+<ANCHOR id="gst-ring-buffer-commit-full" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-commit-full">
+<ANCHOR id="gst-ring-buffer-convert" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-convert">
+<ANCHOR id="gst-ring-buffer-prepare-read" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-prepare-read">
+<ANCHOR id="gst-ring-buffer-read" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-read">
+<ANCHOR id="gst-ring-buffer-clear" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear">
+<ANCHOR id="gst-ring-buffer-clear-all" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-clear-all">
+<ANCHOR id="gst-ring-buffer-advance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-advance">
+<ANCHOR id="gst-ring-buffer-close-device" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-close-device">
+<ANCHOR id="gst-ring-buffer-open-device" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-open-device">
+<ANCHOR id="gst-ring-buffer-device-is-open" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-device-is-open">
+<ANCHOR id="gst-ring-buffer-may-start" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-may-start">
+<ANCHOR id="gst-ring-buffer-parse-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-parse-caps">
+<ANCHOR id="gst-ring-buffer-set-flushing" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-ring-buffer-set-flushing">
+<ANCHOR id="gst-plugins-base-libs-gstringbuffer.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstringbuffer.html#gst-plugins-base-libs-gstringbuffer.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstaudioiec61937" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html">
+<ANCHOR id="gst-plugins-base-libs-gstaudioiec61937.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html#gst-plugins-base-libs-gstaudioiec61937.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstaudioiec61937.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html#gst-plugins-base-libs-gstaudioiec61937.description">
+<ANCHOR id="gst-plugins-base-libs-gstaudioiec61937.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html#gst-plugins-base-libs-gstaudioiec61937.details">
+<ANCHOR id="gst-audio-iec61937-frame-size" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-frame-size">
+<ANCHOR id="gst-audio-iec61937-payload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.synopsis">
+<ANCHOR id="GstCddaBaseSrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.implemented-interfaces" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.properties">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.description">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.details">
+<ANCHOR id="GstCddaBaseSrc-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc-struct">
+<ANCHOR id="GstCddaBaseSrcClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcClass">
+<ANCHOR id="GstCddaBaseSrcTrack" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcTrack">
+<ANCHOR id="GstCddaBaseSrcMode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrcMode">
+<ANCHOR id="GST-CDDA-BASE-SRC-MODE-NORMAL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GST-CDDA-BASE-SRC-MODE-NORMAL:CAPS">
+<ANCHOR id="GST-CDDA-BASE-SRC-MODE-CONTINUOUS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GST-CDDA-BASE-SRC-MODE-CONTINUOUS:CAPS">
+<ANCHOR id="gst-cdda-base-src-add-track" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-cdda-base-src-add-track">
+<ANCHOR id="gst-plugins-base-libs-gstcddabasesrc.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#gst-plugins-base-libs-gstcddabasesrc.property-details">
+<ANCHOR id="GstCddaBaseSrc--device" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--device">
+<ANCHOR id="GstCddaBaseSrc--mode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--mode">
+<ANCHOR id="GstCddaBaseSrc--track" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc--track">
+<ANCHOR id="gst-plugins-base-libs-gstfft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html">
+<ANCHOR id="gst-plugins-base-libs-gstfft.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#gst-plugins-base-libs-gstfft.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstfft.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#gst-plugins-base-libs-gstfft.description">
+<ANCHOR id="gst-plugins-base-libs-gstfft.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#gst-plugins-base-libs-gstfft.details">
+<ANCHOR id="GstFFTWindow" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GstFFTWindow">
+<ANCHOR id="GST-FFT-WINDOW-RECTANGULAR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-RECTANGULAR:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-HAMMING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HAMMING:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-HANN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HANN:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-BARTLETT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BARTLETT:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-BLACKMAN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BLACKMAN:CAPS">
+<ANCHOR id="gst-fft-next-fast-length" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length">
+<ANCHOR id="gst-plugins-base-libs-gstffts16" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html">
+<ANCHOR id="gst-plugins-base-libs-gstffts16.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-plugins-base-libs-gstffts16.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstffts16.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-plugins-base-libs-gstffts16.description">
+<ANCHOR id="gst-plugins-base-libs-gstffts16.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-plugins-base-libs-gstffts16.details">
+<ANCHOR id="GstFFTS16" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#GstFFTS16">
+<ANCHOR id="GstFFTS16Complex" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#GstFFTS16Complex">
+<ANCHOR id="gst-fft-s16-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-fft-s16-new">
+<ANCHOR id="gst-fft-s16-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-fft-s16-fft">
+<ANCHOR id="gst-fft-s16-inverse-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-fft-s16-inverse-fft">
+<ANCHOR id="gst-fft-s16-window" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-fft-s16-window">
+<ANCHOR id="gst-fft-s16-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts16.html#gst-fft-s16-free">
+<ANCHOR id="gst-plugins-base-libs-gstffts32" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html">
+<ANCHOR id="gst-plugins-base-libs-gstffts32.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-plugins-base-libs-gstffts32.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstffts32.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-plugins-base-libs-gstffts32.description">
+<ANCHOR id="gst-plugins-base-libs-gstffts32.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-plugins-base-libs-gstffts32.details">
+<ANCHOR id="GstFFTS32" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#GstFFTS32">
+<ANCHOR id="GstFFTS32Complex" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#GstFFTS32Complex">
+<ANCHOR id="gst-fft-s32-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-fft-s32-new">
+<ANCHOR id="gst-fft-s32-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-fft-s32-fft">
+<ANCHOR id="gst-fft-s32-inverse-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-fft-s32-inverse-fft">
+<ANCHOR id="gst-fft-s32-window" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-fft-s32-window">
+<ANCHOR id="gst-fft-s32-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstffts32.html#gst-fft-s32-free">
+<ANCHOR id="gst-plugins-base-libs-gstfftf32" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html">
+<ANCHOR id="gst-plugins-base-libs-gstfftf32.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-plugins-base-libs-gstfftf32.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstfftf32.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-plugins-base-libs-gstfftf32.description">
+<ANCHOR id="gst-plugins-base-libs-gstfftf32.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-plugins-base-libs-gstfftf32.details">
+<ANCHOR id="GstFFTF32" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#GstFFTF32">
+<ANCHOR id="GstFFTF32Complex" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#GstFFTF32Complex">
+<ANCHOR id="gst-fft-f32-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-new">
+<ANCHOR id="gst-fft-f32-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-fft">
+<ANCHOR id="gst-fft-f32-inverse-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-inverse-fft">
+<ANCHOR id="gst-fft-f32-window" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-window">
+<ANCHOR id="gst-fft-f32-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf32.html#gst-fft-f32-free">
+<ANCHOR id="gst-plugins-base-libs-gstfftf64" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html">
+<ANCHOR id="gst-plugins-base-libs-gstfftf64.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-plugins-base-libs-gstfftf64.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstfftf64.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-plugins-base-libs-gstfftf64.description">
+<ANCHOR id="gst-plugins-base-libs-gstfftf64.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-plugins-base-libs-gstfftf64.details">
+<ANCHOR id="GstFFTF64" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#GstFFTF64">
+<ANCHOR id="GstFFTF64Complex" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#GstFFTF64Complex">
+<ANCHOR id="gst-fft-f64-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-new">
+<ANCHOR id="gst-fft-f64-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-fft">
+<ANCHOR id="gst-fft-f64-inverse-fft" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-inverse-fft">
+<ANCHOR id="gst-fft-f64-window" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-window">
+<ANCHOR id="gst-fft-f64-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstfftf64.html#gst-fft-f64-free">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.synopsis">
+<ANCHOR id="GstColorBalance" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.signals">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.description">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.details">
+<ANCHOR id="GstColorBalance-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct">
+<ANCHOR id="GstColorBalanceClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceClass">
+<ANCHOR id="GstColorBalanceType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType">
+<ANCHOR id="GST-COLOR-BALANCE-HARDWARE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-HARDWARE:CAPS">
+<ANCHOR id="GST-COLOR-BALANCE-SOFTWARE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-SOFTWARE:CAPS">
+<ANCHOR id="gst-color-balance-list-channels" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-list-channels">
+<ANCHOR id="gst-color-balance-get-value" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-value">
+<ANCHOR id="gst-color-balance-set-value" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-set-value">
+<ANCHOR id="gst-color-balance-value-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-value-changed">
+<ANCHOR id="gst-color-balance-get-balance-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-balance-type">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalance.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.signal-details">
+<ANCHOR id="GstColorBalance-value-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.synopsis">
+<ANCHOR id="GstColorBalanceChannel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.signals">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.description">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.details">
+<ANCHOR id="GstColorBalanceChannel-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-struct">
+<ANCHOR id="GstColorBalanceChannelClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannelClass">
+<ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#gst-plugins-base-libs-gstcolorbalancechannel.signal-details">
+<ANCHOR id="GstColorBalanceChannel-value-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed">
+<ANCHOR id="gst-plugins-base-libs-gstmixer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.synopsis">
+<ANCHOR id="GstMixer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.signals">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.description">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.details">
+<ANCHOR id="GstMixer-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer-struct">
+<ANCHOR id="GstMixerType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixerType">
+<ANCHOR id="GST-MIXER-HARDWARE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-HARDWARE:CAPS">
+<ANCHOR id="GST-MIXER-SOFTWARE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-SOFTWARE:CAPS">
+<ANCHOR id="GstMixerFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixerFlags">
+<ANCHOR id="GST-MIXER-FLAG-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-NONE:CAPS">
+<ANCHOR id="GST-MIXER-FLAG-AUTO-NOTIFICATIONS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-AUTO-NOTIFICATIONS:CAPS">
+<ANCHOR id="GST-MIXER-FLAG-HAS-WHITELIST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-HAS-WHITELIST:CAPS">
+<ANCHOR id="GST-MIXER-FLAG-GROUPING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-FLAG-GROUPING:CAPS">
+<ANCHOR id="GstMixerMessageType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixerMessageType">
+<ANCHOR id="GST-MIXER-MESSAGE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-INVALID:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-MUTE-TOGGLED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-MUTE-TOGGLED:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-RECORD-TOGGLED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-RECORD-TOGGLED:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-VOLUME-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-VOLUME-CHANGED:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-OPTION-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-OPTION-CHANGED:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-OPTIONS-LIST-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-OPTIONS-LIST-CHANGED:CAPS">
+<ANCHOR id="GST-MIXER-MESSAGE-MIXER-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GST-MIXER-MESSAGE-MIXER-CHANGED:CAPS">
+<ANCHOR id="gst-mixer-list-tracks" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-list-tracks">
+<ANCHOR id="gst-mixer-get-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-get-volume">
+<ANCHOR id="gst-mixer-set-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-set-volume">
+<ANCHOR id="gst-mixer-set-mute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-set-mute">
+<ANCHOR id="gst-mixer-set-record" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-set-record">
+<ANCHOR id="gst-mixer-set-option" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-set-option">
+<ANCHOR id="gst-mixer-mute-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-mute-toggled">
+<ANCHOR id="gst-mixer-record-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-record-toggled">
+<ANCHOR id="gst-mixer-volume-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-volume-changed">
+<ANCHOR id="gst-mixer-option-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-option-changed">
+<ANCHOR id="gst-mixer-options-list-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-options-list-changed">
+<ANCHOR id="gst-mixer-get-option" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-get-option">
+<ANCHOR id="gst-mixer-mixer-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-mixer-changed">
+<ANCHOR id="gst-mixer-get-mixer-flags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-flags">
+<ANCHOR id="gst-mixer-get-mixer-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-get-mixer-type">
+<ANCHOR id="gst-mixer-message-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-get-type">
+<ANCHOR id="gst-mixer-message-parse-mute-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-mute-toggled">
+<ANCHOR id="gst-mixer-message-parse-option-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-option-changed">
+<ANCHOR id="gst-mixer-message-parse-record-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-record-toggled">
+<ANCHOR id="gst-mixer-message-parse-volume-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-volume-changed">
+<ANCHOR id="gst-mixer-message-parse-options-list-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-mixer-message-parse-options-list-changed">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.signal-details">
+<ANCHOR id="GstMixer-mute-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer-mute-toggled">
+<ANCHOR id="GstMixer-option-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer-option-changed">
+<ANCHOR id="GstMixer-record-toggled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer-record-toggled">
+<ANCHOR id="GstMixer-volume-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer-volume-changed">
+<ANCHOR id="gst-plugins-base-libs-gstmixer.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#gst-plugins-base-libs-gstmixer.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-plugins-base-libs-gstmixeroptions.synopsis">
+<ANCHOR id="GstMixerOptions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-plugins-base-libs-gstmixeroptions.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-plugins-base-libs-gstmixeroptions.description">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-plugins-base-libs-gstmixeroptions.details">
+<ANCHOR id="GstMixerOptions-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#GstMixerOptions-struct">
+<ANCHOR id="gst-mixer-options-get-values" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-mixer-options-get-values">
+<ANCHOR id="gst-plugins-base-libs-gstmixeroptions.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixeroptions.html#gst-plugins-base-libs-gstmixeroptions.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.synopsis">
+<ANCHOR id="GstMixerTrack" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.properties">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.description">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.details">
+<ANCHOR id="GstMixerTrack-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack-struct">
+<ANCHOR id="GstMixerTrackFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrackFlags">
+<ANCHOR id="GST-MIXER-TRACK-INPUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-INPUT:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-OUTPUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-OUTPUT:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-MUTE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-MUTE:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-RECORD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-RECORD:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-MASTER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-MASTER:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-SOFTWARE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-SOFTWARE:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-NO-RECORD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-NO-RECORD:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-NO-MUTE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-NO-MUTE:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-WHITELIST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-WHITELIST:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-READONLY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-READONLY:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-WRITEONLY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-WRITEONLY:CAPS">
+<ANCHOR id="GST-MIXER-TRACK-HAS-FLAG:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GST-MIXER-TRACK-HAS-FLAG:CAPS">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.property-details">
+<ANCHOR id="GstMixerTrack--flags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--flags">
+<ANCHOR id="GstMixerTrack--index" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--index">
+<ANCHOR id="GstMixerTrack--label" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--label">
+<ANCHOR id="GstMixerTrack--max-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--max-volume">
+<ANCHOR id="GstMixerTrack--min-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--min-volume">
+<ANCHOR id="GstMixerTrack--num-channels" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--num-channels">
+<ANCHOR id="GstMixerTrack--untranslated-label" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#GstMixerTrack--untranslated-label">
+<ANCHOR id="gst-plugins-base-libs-gstmixertrack.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixertrack.html#gst-plugins-base-libs-gstmixertrack.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstnavigation" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html">
+<ANCHOR id="gst-plugins-base-libs-gstnavigation.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-plugins-base-libs-gstnavigation.synopsis">
+<ANCHOR id="GstNavigation" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigation">
+<ANCHOR id="gst-plugins-base-libs-gstnavigation.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-plugins-base-libs-gstnavigation.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstnavigation.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-plugins-base-libs-gstnavigation.description">
+<ANCHOR id="gst-plugins-base-libs-gstnavigation.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-plugins-base-libs-gstnavigation.details">
+<ANCHOR id="GstNavigation-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct">
+<ANCHOR id="GstNavigationInterface" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigationInterface">
+<ANCHOR id="GstNavigationCommand" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand">
+<ANCHOR id="GST-NAVIGATION-COMMAND-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU1:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU1:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU2:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU2:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU3:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU3:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU4:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU4:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU5:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU5:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU6:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU6:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU7:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU7:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-LEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-LEFT:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-RIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-RIGHT:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-UP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-UP:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DOWN:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-ACTIVATE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-ACTIVATE:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS">
+<ANCHOR id="GstNavigationEventType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType">
+<ANCHOR id="GST-NAVIGATION-EVENT-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-KEY-PRESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-PRESS:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-COMMAND:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-COMMAND:CAPS">
+<ANCHOR id="GstNavigationMessageType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS">
+<ANCHOR id="GstNavigationQueryType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType">
+<ANCHOR id="GST-NAVIGATION-QUERY-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-QUERY-COMMANDS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-COMMANDS:CAPS">
+<ANCHOR id="GST-NAVIGATION-QUERY-ANGLES:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-ANGLES:CAPS">
+<ANCHOR id="gst-navigation-send-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-event">
+<ANCHOR id="gst-navigation-send-key-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-key-event">
+<ANCHOR id="gst-navigation-send-mouse-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-mouse-event">
+<ANCHOR id="gst-navigation-send-command" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-send-command">
+<ANCHOR id="gst-navigation-event-parse-command" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-command">
+<ANCHOR id="gst-navigation-event-parse-key-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-key-event">
+<ANCHOR id="gst-navigation-event-parse-mouse-button-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-button-event">
+<ANCHOR id="gst-navigation-event-parse-mouse-move-event" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-event-parse-mouse-move-event">
+<ANCHOR id="gst-navigation-message-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type">
+<ANCHOR id="gst-navigation-message-new-angles-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed">
+<ANCHOR id="gst-navigation-message-new-commands-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed">
+<ANCHOR id="gst-navigation-message-new-mouse-over" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over">
+<ANCHOR id="gst-navigation-message-parse-mouse-over" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over">
+<ANCHOR id="gst-navigation-message-parse-angles-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed">
+<ANCHOR id="gst-navigation-query-new-angles" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles">
+<ANCHOR id="gst-navigation-query-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type">
+<ANCHOR id="gst-navigation-query-new-commands" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands">
+<ANCHOR id="gst-navigation-query-parse-angles" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-angles">
+<ANCHOR id="gst-navigation-query-parse-commands-length" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-length">
+<ANCHOR id="gst-navigation-query-parse-commands-nth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-parse-commands-nth">
+<ANCHOR id="gst-navigation-query-set-angles" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-angles">
+<ANCHOR id="gst-navigation-query-set-commands" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commands">
+<ANCHOR id="gst-navigation-query-set-commandsv" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-set-commandsv">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.synopsis">
+<ANCHOR id="GstPropertyProbe" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.signals">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.description">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.details">
+<ANCHOR id="GstPropertyProbe-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-struct">
+<ANCHOR id="GstPropertyProbeInterface" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbeInterface">
+<ANCHOR id="gst-property-probe-get-properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-properties">
+<ANCHOR id="gst-property-probe-get-property" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-property">
+<ANCHOR id="gst-property-probe-get-values" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values">
+<ANCHOR id="gst-property-probe-get-values-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-get-values-name">
+<ANCHOR id="gst-property-probe-needs-probe" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe">
+<ANCHOR id="gst-property-probe-needs-probe-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-needs-probe-name">
+<ANCHOR id="gst-property-probe-probe-and-get-values" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values">
+<ANCHOR id="gst-property-probe-probe-and-get-values-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-and-get-values-name">
+<ANCHOR id="gst-property-probe-probe-property" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property">
+<ANCHOR id="gst-property-probe-probe-property-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-property-probe-probe-property-name">
+<ANCHOR id="gst-plugins-base-libs-gstpropertyprobe.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#gst-plugins-base-libs-gstpropertyprobe.signal-details">
+<ANCHOR id="GstPropertyProbe-probe-needed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe-probe-needed">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.synopsis">
+<ANCHOR id="GstStreamVolume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.prerequisites" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.prerequisites">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.properties">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.description">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.details">
+<ANCHOR id="GstStreamVolume-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume-struct">
+<ANCHOR id="GstStreamVolumeFormat" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-DB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-DB:CAPS">
+<ANCHOR id="gst-stream-volume-get-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume">
+<ANCHOR id="gst-stream-volume-set-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume">
+<ANCHOR id="gst-stream-volume-get-mute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute">
+<ANCHOR id="gst-stream-volume-set-mute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-mute">
+<ANCHOR id="gst-stream-volume-convert-volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-convert-volume">
+<ANCHOR id="gst-plugins-base-libs-gststreamvolume.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.property-details">
+<ANCHOR id="GstStreamVolume--mute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--mute">
+<ANCHOR id="GstStreamVolume--volume" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--volume">
+<ANCHOR id="gst-plugins-base-libs-gsttuner" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.synopsis">
+<ANCHOR id="GstTuner" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.signals">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.description">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.details">
+<ANCHOR id="GstTuner-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner-struct">
+<ANCHOR id="GstTunerClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTunerClass">
+<ANCHOR id="gst-tuner-list-channels" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-list-channels">
+<ANCHOR id="gst-tuner-get-channel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-get-channel">
+<ANCHOR id="gst-tuner-set-channel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-set-channel">
+<ANCHOR id="gst-tuner-list-norms" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-list-norms">
+<ANCHOR id="gst-tuner-get-norm" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-get-norm">
+<ANCHOR id="gst-tuner-set-norm" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-set-norm">
+<ANCHOR id="gst-tuner-get-frequency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-get-frequency">
+<ANCHOR id="gst-tuner-set-frequency" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-set-frequency">
+<ANCHOR id="gst-tuner-signal-strength" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-strength">
+<ANCHOR id="gst-tuner-find-norm-by-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-find-norm-by-name">
+<ANCHOR id="gst-tuner-find-channel-by-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-find-channel-by-name">
+<ANCHOR id="gst-tuner-channel-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-channel-changed">
+<ANCHOR id="gst-tuner-norm-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-norm-changed">
+<ANCHOR id="gst-tuner-frequency-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-frequency-changed">
+<ANCHOR id="gst-tuner-signal-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-tuner-signal-changed">
+<ANCHOR id="gst-plugins-base-libs-gsttuner.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#gst-plugins-base-libs-gsttuner.signal-details">
+<ANCHOR id="GstTuner-channel-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner-channel-changed">
+<ANCHOR id="GstTuner-frequency-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner-frequency-changed">
+<ANCHOR id="GstTuner-norm-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner-norm-changed">
+<ANCHOR id="GstTuner-signal-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttuner.html#GstTuner-signal-changed">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.synopsis">
+<ANCHOR id="GstTunerChannel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.signals">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.description">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.details">
+<ANCHOR id="GstTunerChannel-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-struct">
+<ANCHOR id="GstTunerChannelFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannelFlags">
+<ANCHOR id="GST-TUNER-CHANNEL-INPUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-INPUT:CAPS">
+<ANCHOR id="GST-TUNER-CHANNEL-OUTPUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-OUTPUT:CAPS">
+<ANCHOR id="GST-TUNER-CHANNEL-FREQUENCY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-FREQUENCY:CAPS">
+<ANCHOR id="GST-TUNER-CHANNEL-AUDIO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-AUDIO:CAPS">
+<ANCHOR id="GST-TUNER-CHANNEL-HAS-FLAG:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GST-TUNER-CHANNEL-HAS-FLAG:CAPS">
+<ANCHOR id="gst-plugins-base-libs-gsttunerchannel.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#gst-plugins-base-libs-gsttunerchannel.signal-details">
+<ANCHOR id="GstTunerChannel-frequency-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-frequency-changed">
+<ANCHOR id="GstTunerChannel-signal-changed" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunerchannel.html#GstTunerChannel-signal-changed">
+<ANCHOR id="gst-plugins-base-libs-gsttunernorm" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html">
+<ANCHOR id="gst-plugins-base-libs-gsttunernorm.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#gst-plugins-base-libs-gsttunernorm.synopsis">
+<ANCHOR id="GstTunerNorm" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm">
+<ANCHOR id="gst-plugins-base-libs-gsttunernorm.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#gst-plugins-base-libs-gsttunernorm.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gsttunernorm.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#gst-plugins-base-libs-gsttunernorm.description">
+<ANCHOR id="gst-plugins-base-libs-gsttunernorm.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#gst-plugins-base-libs-gsttunernorm.details">
+<ANCHOR id="GstTunerNorm-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttunernorm.html#GstTunerNorm-struct">
+<ANCHOR id="gst-plugins-base-libs-gstvideoorientation" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideoorientation.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-plugins-base-libs-gstvideoorientation.synopsis">
+<ANCHOR id="GstVideoOrientation" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation">
+<ANCHOR id="gst-plugins-base-libs-gstvideoorientation.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-plugins-base-libs-gstvideoorientation.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstvideoorientation.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-plugins-base-libs-gstvideoorientation.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideoorientation.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-plugins-base-libs-gstvideoorientation.details">
+<ANCHOR id="GstVideoOrientation-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct">
+<ANCHOR id="GstVideoOrientationInterface" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface">
+<ANCHOR id="gst-video-orientation-get-hcenter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hcenter">
+<ANCHOR id="gst-video-orientation-get-hflip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hflip">
+<ANCHOR id="gst-video-orientation-get-vcenter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vcenter">
+<ANCHOR id="gst-video-orientation-get-vflip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-vflip">
+<ANCHOR id="gst-video-orientation-set-hcenter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hcenter">
+<ANCHOR id="gst-video-orientation-set-hflip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-hflip">
+<ANCHOR id="gst-video-orientation-set-vcenter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vcenter">
+<ANCHOR id="gst-video-orientation-set-vflip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vflip">
+<ANCHOR id="gst-plugins-base-libs-gstvideooverlay" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideooverlay.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-plugins-base-libs-gstvideooverlay.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstvideooverlay.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-plugins-base-libs-gstvideooverlay.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideooverlay.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-plugins-base-libs-gstvideooverlay.details">
+<ANCHOR id="gst-video-overlay-got-window-handle" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle">
+<ANCHOR id="gst-video-overlay-set-window-handle" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle">
+<ANCHOR id="gst-video-overlay-prepare-window-handle" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle">
+<ANCHOR id="gst-video-overlay-expose" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose">
+<ANCHOR id="gst-video-overlay-handle-events" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-handle-events">
+<ANCHOR id="gst-video-overlay-set-render-rectangle" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-render-rectangle">
+<ANCHOR id="gst-plugins-base-libs-gstnetbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html">
+<ANCHOR id="gst-plugins-base-libs-gstnetbuffer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-plugins-base-libs-gstnetbuffer.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstnetbuffer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-plugins-base-libs-gstnetbuffer.description">
+<ANCHOR id="gst-plugins-base-libs-gstnetbuffer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-plugins-base-libs-gstnetbuffer.details">
+<ANCHOR id="GstNetBuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GstNetBuffer">
+<ANCHOR id="GstNetType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GstNetType">
+<ANCHOR id="GST-NET-TYPE-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-UNKNOWN:CAPS">
+<ANCHOR id="GST-NET-TYPE-IP4:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-IP4:CAPS">
+<ANCHOR id="GST-NET-TYPE-IP6:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GST-NET-TYPE-IP6:CAPS">
+<ANCHOR id="GST-NETADDRESS-MAX-LEN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GST-NETADDRESS-MAX-LEN:CAPS">
+<ANCHOR id="GstNetAddress" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#GstNetAddress">
+<ANCHOR id="gst-netaddress-get-net-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-net-type">
+<ANCHOR id="gst-netaddress-set-ip4-address" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip4-address">
+<ANCHOR id="gst-netaddress-get-ip4-address" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip4-address">
+<ANCHOR id="gst-netaddress-set-ip6-address" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-ip6-address">
+<ANCHOR id="gst-netaddress-get-ip6-address" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-ip6-address">
+<ANCHOR id="gst-netaddress-get-address-bytes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-get-address-bytes">
+<ANCHOR id="gst-netaddress-set-address-bytes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-set-address-bytes">
+<ANCHOR id="gst-netaddress-equal" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-equal">
+<ANCHOR id="gst-netaddress-to-string" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnetbuffer.html#gst-netaddress-to-string">
+<ANCHOR id="gst-plugins-base-libs-gstriff" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html">
+<ANCHOR id="gst-plugins-base-libs-gstriff.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-plugins-base-libs-gstriff.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstriff.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-plugins-base-libs-gstriff.description">
+<ANCHOR id="gst-plugins-base-libs-gstriff.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-plugins-base-libs-gstriff.details">
+<ANCHOR id="gst-riff-create-audio-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-caps">
+<ANCHOR id="gst-riff-create-audio-template-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-audio-template-caps">
+<ANCHOR id="gst-riff-create-iavs-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-caps">
+<ANCHOR id="gst-riff-create-iavs-template-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-iavs-template-caps">
+<ANCHOR id="gst-riff-create-video-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-video-caps">
+<ANCHOR id="gst-riff-create-video-template-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-create-video-template-caps">
+<ANCHOR id="gst-riff-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-init">
+<ANCHOR id="gst-riff-parse-chunk" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-chunk">
+<ANCHOR id="gst-riff-parse-file-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-file-header">
+<ANCHOR id="gst-riff-parse-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-info">
+<ANCHOR id="gst-riff-parse-strf-auds" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-auds">
+<ANCHOR id="gst-riff-parse-strf-iavs" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-iavs">
+<ANCHOR id="gst-riff-parse-strf-vids" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-vids">
+<ANCHOR id="gst-riff-parse-strh" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-parse-strh">
+<ANCHOR id="gst-riff-read-chunk" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstriff.html#gst-riff-read-chunk">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.synopsis">
+<ANCHOR id="GstBaseRTPAudioPayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.properties">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.description">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.details">
+<ANCHOR id="GstBaseRTPAudioPayload-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload-struct">
+<ANCHOR id="GstBaseRTPAudioPayloadClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayloadClass">
+<ANCHOR id="gst-base-rtp-audio-payload-set-frame-based" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-based">
+<ANCHOR id="gst-base-rtp-audio-payload-set-frame-options" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-frame-options">
+<ANCHOR id="gst-base-rtp-audio-payload-set-sample-based" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-based">
+<ANCHOR id="gst-base-rtp-audio-payload-set-sample-options" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-sample-options">
+<ANCHOR id="gst-base-rtp-audio-payload-get-adapter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-get-adapter">
+<ANCHOR id="gst-base-rtp-audio-payload-push" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-push">
+<ANCHOR id="gst-base-rtp-audio-payload-flush" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-flush">
+<ANCHOR id="gst-base-rtp-audio-payload-set-samplebits-options" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-base-rtp-audio-payload-set-samplebits-options">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpaudiopayload.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#gst-plugins-base-libs-gstbasertpaudiopayload.property-details">
+<ANCHOR id="GstBaseRTPAudioPayload--buffer-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpaudiopayload.html#GstBaseRTPAudioPayload--buffer-list">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpdepayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpdepayload.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-plugins-base-libs-gstbasertpdepayload.synopsis">
+<ANCHOR id="GstBaseRTPDepayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpdepayload.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-plugins-base-libs-gstbasertpdepayload.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpdepayload.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-plugins-base-libs-gstbasertpdepayload.description">
+<ANCHOR id="gst-plugins-base-libs-gstbasertpdepayload.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-plugins-base-libs-gstbasertpdepayload.details">
+<ANCHOR id="GstBaseRTPDepayload-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayload-struct">
+<ANCHOR id="GstBaseRTPDepayloadClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#GstBaseRTPDepayloadClass">
+<ANCHOR id="GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SINKPAD:CAPS">
+<ANCHOR id="GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#GST-BASE-RTP-DEPAYLOAD-SRCPAD:CAPS">
+<ANCHOR id="gst-base-rtp-depayload-push" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push">
+<ANCHOR id="gst-base-rtp-depayload-push-ts" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-ts">
+<ANCHOR id="gst-base-rtp-depayload-push-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertpdepayload.html#gst-base-rtp-depayload-push-list">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.synopsis">
+<ANCHOR id="GstBaseRTPPayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.properties">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.description">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.details">
+<ANCHOR id="GstBaseRTPPayload-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload-struct">
+<ANCHOR id="GstBaseRTPPayloadClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayloadClass">
+<ANCHOR id="GST-BASE-RTP-PAYLOAD-MTU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-MTU:CAPS">
+<ANCHOR id="GST-BASE-RTP-PAYLOAD-PT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-PT:CAPS">
+<ANCHOR id="GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SINKPAD:CAPS">
+<ANCHOR id="GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GST-BASE-RTP-PAYLOAD-SRCPAD:CAPS">
+<ANCHOR id="gst-basertppayload-is-filled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-is-filled">
+<ANCHOR id="gst-basertppayload-push" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push">
+<ANCHOR id="gst-basertppayload-push-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-push-list">
+<ANCHOR id="gst-basertppayload-set-options" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-options">
+<ANCHOR id="gst-basertppayload-set-outcaps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-basertppayload-set-outcaps">
+<ANCHOR id="gst-plugins-base-libs-gstbasertppayload.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#gst-plugins-base-libs-gstbasertppayload.property-details">
+<ANCHOR id="GstBaseRTPPayload--max-ptime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--max-ptime">
+<ANCHOR id="GstBaseRTPPayload--min-ptime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--min-ptime">
+<ANCHOR id="GstBaseRTPPayload--mtu" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--mtu">
+<ANCHOR id="GstBaseRTPPayload--perfect-rtptime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--perfect-rtptime">
+<ANCHOR id="GstBaseRTPPayload--pt" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--pt">
+<ANCHOR id="GstBaseRTPPayload--ptime-multiple" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ptime-multiple">
+<ANCHOR id="GstBaseRTPPayload--seqnum" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum">
+<ANCHOR id="GstBaseRTPPayload--seqnum-offset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--seqnum-offset">
+<ANCHOR id="GstBaseRTPPayload--ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--ssrc">
+<ANCHOR id="GstBaseRTPPayload--timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp">
+<ANCHOR id="GstBaseRTPPayload--timestamp-offset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbasertppayload.html#GstBaseRTPPayload--timestamp-offset">
+<ANCHOR id="gst-plugins-base-libs-gstrtpbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtpbuffer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-plugins-base-libs-gstrtpbuffer.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtpbuffer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-plugins-base-libs-gstrtpbuffer.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtpbuffer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-plugins-base-libs-gstrtpbuffer.details">
+<ANCHOR id="GST-RTP-VERSION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-VERSION:CAPS">
+<ANCHOR id="gst-rtp-buffer-allocate-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-allocate-data">
+<ANCHOR id="gst-rtp-buffer-new-take-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-take-data">
+<ANCHOR id="gst-rtp-buffer-new-copy-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-copy-data">
+<ANCHOR id="gst-rtp-buffer-new-allocate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate">
+<ANCHOR id="gst-rtp-buffer-new-allocate-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-allocate-len">
+<ANCHOR id="gst-rtp-buffer-calc-header-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-header-len">
+<ANCHOR id="gst-rtp-buffer-calc-packet-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-packet-len">
+<ANCHOR id="gst-rtp-buffer-calc-payload-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-calc-payload-len">
+<ANCHOR id="gst-rtp-buffer-validate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate">
+<ANCHOR id="gst-rtp-buffer-validate-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-validate-data">
+<ANCHOR id="gst-rtp-buffer-set-packet-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-packet-len">
+<ANCHOR id="gst-rtp-buffer-get-packet-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-packet-len">
+<ANCHOR id="gst-rtp-buffer-get-header-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-header-len">
+<ANCHOR id="gst-rtp-buffer-get-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-version">
+<ANCHOR id="gst-rtp-buffer-set-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-version">
+<ANCHOR id="gst-rtp-buffer-get-padding" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-padding">
+<ANCHOR id="gst-rtp-buffer-set-padding" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-padding">
+<ANCHOR id="gst-rtp-buffer-pad-to" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-pad-to">
+<ANCHOR id="gst-rtp-buffer-get-extension" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension">
+<ANCHOR id="gst-rtp-buffer-set-extension" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension">
+<ANCHOR id="gst-rtp-buffer-get-extension-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data">
+<ANCHOR id="gst-rtp-buffer-get-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc">
+<ANCHOR id="gst-rtp-buffer-set-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc">
+<ANCHOR id="gst-rtp-buffer-get-csrc-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count">
+<ANCHOR id="gst-rtp-buffer-get-csrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc">
+<ANCHOR id="gst-rtp-buffer-set-csrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-csrc">
+<ANCHOR id="gst-rtp-buffer-get-marker" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-marker">
+<ANCHOR id="gst-rtp-buffer-set-marker" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-marker">
+<ANCHOR id="gst-rtp-buffer-get-payload-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-type">
+<ANCHOR id="gst-rtp-buffer-set-payload-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-payload-type">
+<ANCHOR id="gst-rtp-buffer-get-seq" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-seq">
+<ANCHOR id="gst-rtp-buffer-set-seq" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-seq">
+<ANCHOR id="gst-rtp-buffer-get-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-timestamp">
+<ANCHOR id="gst-rtp-buffer-set-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-timestamp">
+<ANCHOR id="gst-rtp-buffer-get-payload-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer">
+<ANCHOR id="gst-rtp-buffer-get-payload-subbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer">
+<ANCHOR id="gst-rtp-buffer-get-payload-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len">
+<ANCHOR id="gst-rtp-buffer-get-payload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload">
+<ANCHOR id="gst-rtp-buffer-default-clock-rate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate">
+<ANCHOR id="gst-rtp-buffer-compare-seqnum" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum">
+<ANCHOR id="gst-rtp-buffer-ext-timestamp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-ext-timestamp">
+<ANCHOR id="gst-rtp-buffer-set-extension-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension-data">
+<ANCHOR id="gst-rtp-buffer-get-extension-onebyte-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-onebyte-header">
+<ANCHOR id="gst-rtp-buffer-get-extension-twobytes-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-twobytes-header">
+<ANCHOR id="gst-rtp-buffer-add-extension-onebyte-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header">
+<ANCHOR id="gst-rtp-buffer-add-extension-twobytes-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header">
+<ANCHOR id="gst-plugins-base-libs-gstrtpbuffer.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtpbuffer.html#gst-plugins-base-libs-gstrtpbuffer.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-plugins-base-libs-gstrtcpbuffer.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-plugins-base-libs-gstrtcpbuffer.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-plugins-base-libs-gstrtcpbuffer.details">
+<ANCHOR id="GST-RTCP-VERSION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VERSION:CAPS">
+<ANCHOR id="GST-RTCP-MAX-SDES:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES:CAPS">
+<ANCHOR id="GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS">
+<ANCHOR id="GST-RTCP-MAX-RB-COUNT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS">
+<ANCHOR id="GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS">
+<ANCHOR id="GST-RTCP-VALID-MASK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS">
+<ANCHOR id="GST-RTCP-VALID-VALUE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS">
+<ANCHOR id="GstRTCPType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType">
+<ANCHOR id="GST-RTCP-TYPE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-SR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SR:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-RR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RR:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-SDES:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SDES:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-BYE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-BYE:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-APP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-APP:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-RTPFB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RTPFB:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-PSFB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-PSFB:CAPS">
+<ANCHOR id="GstRTCPPacket" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket">
+<ANCHOR id="GstRTCPSDESType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType">
+<ANCHOR id="GST-RTCP-SDES-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-SDES-END:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-END:CAPS">
+<ANCHOR id="GST-RTCP-SDES-CNAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-CNAME:CAPS">
+<ANCHOR id="GST-RTCP-SDES-NAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NAME:CAPS">
+<ANCHOR id="GST-RTCP-SDES-EMAIL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-EMAIL:CAPS">
+<ANCHOR id="GST-RTCP-SDES-PHONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PHONE:CAPS">
+<ANCHOR id="GST-RTCP-SDES-LOC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-LOC:CAPS">
+<ANCHOR id="GST-RTCP-SDES-TOOL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-TOOL:CAPS">
+<ANCHOR id="GST-RTCP-SDES-NOTE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NOTE:CAPS">
+<ANCHOR id="GST-RTCP-SDES-PRIV:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS">
+<ANCHOR id="GstRTCPFBType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType">
+<ANCHOR id="GST-RTCP-FB-TYPE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-FB-TYPE-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-RTPFB-TYPE-NACK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-NACK:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-PLI:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-PLI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-SLI:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-SLI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-RPSI:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-RPSI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-AFB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-AFB:CAPS">
+<ANCHOR id="gst-rtcp-buffer-new-take-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data">
+<ANCHOR id="gst-rtcp-buffer-new-copy-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data">
+<ANCHOR id="gst-rtcp-buffer-validate-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data">
+<ANCHOR id="gst-rtcp-buffer-validate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate">
+<ANCHOR id="gst-rtcp-buffer-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new">
+<ANCHOR id="gst-rtcp-buffer-get-packet-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-packet-count">
+<ANCHOR id="gst-rtcp-buffer-get-first-packet" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet">
+<ANCHOR id="gst-rtcp-packet-move-to-next" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-move-to-next">
+<ANCHOR id="gst-rtcp-buffer-add-packet" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-add-packet">
+<ANCHOR id="gst-rtcp-packet-remove" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-remove">
+<ANCHOR id="gst-rtcp-packet-get-padding" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-padding">
+<ANCHOR id="gst-rtcp-packet-get-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-count">
+<ANCHOR id="gst-rtcp-packet-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-type">
+<ANCHOR id="gst-rtcp-packet-get-length" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-length">
+<ANCHOR id="gst-rtcp-packet-sr-get-sender-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-get-sender-info">
+<ANCHOR id="gst-rtcp-packet-sr-set-sender-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sr-set-sender-info">
+<ANCHOR id="gst-rtcp-packet-rr-get-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-get-ssrc">
+<ANCHOR id="gst-rtcp-packet-rr-set-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-rr-set-ssrc">
+<ANCHOR id="gst-rtcp-packet-get-rb-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb-count">
+<ANCHOR id="gst-rtcp-packet-get-rb" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-get-rb">
+<ANCHOR id="gst-rtcp-packet-add-rb" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-add-rb">
+<ANCHOR id="gst-rtcp-packet-set-rb" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-set-rb">
+<ANCHOR id="gst-rtcp-packet-sdes-get-item-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-item-count">
+<ANCHOR id="gst-rtcp-packet-sdes-first-item" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-item">
+<ANCHOR id="gst-rtcp-packet-sdes-next-item" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-item">
+<ANCHOR id="gst-rtcp-packet-sdes-get-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-ssrc">
+<ANCHOR id="gst-rtcp-packet-sdes-first-entry" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-first-entry">
+<ANCHOR id="gst-rtcp-packet-sdes-next-entry" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-next-entry">
+<ANCHOR id="gst-rtcp-packet-sdes-get-entry" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry">
+<ANCHOR id="gst-rtcp-packet-sdes-copy-entry" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry">
+<ANCHOR id="gst-rtcp-packet-sdes-add-item" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-item">
+<ANCHOR id="gst-rtcp-packet-sdes-add-entry" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-add-entry">
+<ANCHOR id="gst-rtcp-packet-bye-get-ssrc-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-ssrc-count">
+<ANCHOR id="gst-rtcp-packet-bye-get-nth-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-nth-ssrc">
+<ANCHOR id="gst-rtcp-packet-bye-add-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrc">
+<ANCHOR id="gst-rtcp-packet-bye-add-ssrcs" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-add-ssrcs">
+<ANCHOR id="gst-rtcp-packet-bye-get-reason-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason-len">
+<ANCHOR id="gst-rtcp-packet-bye-get-reason" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-get-reason">
+<ANCHOR id="gst-rtcp-packet-bye-set-reason" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-bye-set-reason">
+<ANCHOR id="gst-rtcp-packet-fb-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-type">
+<ANCHOR id="gst-rtcp-packet-fb-set-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-type">
+<ANCHOR id="gst-rtcp-packet-fb-get-sender-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-sender-ssrc">
+<ANCHOR id="gst-rtcp-packet-fb-set-sender-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-sender-ssrc">
+<ANCHOR id="gst-rtcp-packet-fb-get-media-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-media-ssrc">
+<ANCHOR id="gst-rtcp-packet-fb-set-media-ssrc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-media-ssrc">
+<ANCHOR id="gst-rtcp-packet-fb-get-fci-length" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci-length">
+<ANCHOR id="gst-rtcp-packet-fb-set-fci-length" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-set-fci-length">
+<ANCHOR id="gst-rtcp-packet-fb-get-fci" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-fb-get-fci">
+<ANCHOR id="gst-rtcp-ntp-to-unix" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-ntp-to-unix">
+<ANCHOR id="gst-rtcp-unix-to-ntp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-unix-to-ntp">
+<ANCHOR id="gst-rtcp-sdes-name-to-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-name-to-type">
+<ANCHOR id="gst-rtcp-sdes-type-to-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-sdes-type-to-name">
+<ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtcpbuffer.html#gst-plugins-base-libs-gstrtcpbuffer.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtppayloads" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtppayloads.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtppayloads.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtppayloads.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.details">
+<ANCHOR id="GstRTPPayload" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayload">
+<ANCHOR id="GST-RTP-PAYLOAD-PCMU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMU:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-1016:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-1016:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G721:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G721:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-GSM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-GSM:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G723:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G723:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-8000:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-8000:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-16000:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-16000:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-LPC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-LPC:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-PCMA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMA:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G722:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G722:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-L16-STEREO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-STEREO:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-L16-MONO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-MONO:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-QCELP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-QCELP:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-CN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CN:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MPA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPA:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G728:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G728:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-11025:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-11025:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-22050:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-22050:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G729:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G729:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-CELLB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CELLB:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-JPEG:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-JPEG:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-NV:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-NV:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-H261:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H261:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MPV:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPV:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MP2T:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MP2T:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-H263:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H263:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS">
+<ANCHOR id="GstRTPPayloadInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo">
+<ANCHOR id="gst-rtp-payload-info-for-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-name">
+<ANCHOR id="gst-rtp-payload-info-for-pt" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt">
+<ANCHOR id="gst-plugins-base-libs-gstrtppayloads.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtspbase64" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspbase64.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html#gst-plugins-base-libs-gstrtspbase64.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspbase64.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html#gst-plugins-base-libs-gstrtspbase64.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspbase64.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html#gst-plugins-base-libs-gstrtspbase64.details">
+<ANCHOR id="gst-rtsp-base64-encode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-encode">
+<ANCHOR id="gst-rtsp-base64-decode-ip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspbase64.html#gst-rtsp-base64-decode-ip">
+<ANCHOR id="gst-plugins-base-libs-gstrtspconnection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspconnection.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspconnection.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspconnection.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.details">
+<ANCHOR id="GstRTSPConnection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection">
+<ANCHOR id="gst-rtsp-connection-create" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create">
+<ANCHOR id="gst-rtsp-connection-create-from-fd" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-fd">
+<ANCHOR id="gst-rtsp-connection-accept" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept">
+<ANCHOR id="gst-rtsp-connection-connect" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect">
+<ANCHOR id="gst-rtsp-connection-close" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close">
+<ANCHOR id="gst-rtsp-connection-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free">
+<ANCHOR id="gst-rtsp-connection-read" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read">
+<ANCHOR id="gst-rtsp-connection-write" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-write">
+<ANCHOR id="gst-rtsp-connection-poll" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-poll">
+<ANCHOR id="gst-rtsp-connection-send" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-send">
+<ANCHOR id="gst-rtsp-connection-receive" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-receive">
+<ANCHOR id="gst-rtsp-connection-next-timeout" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-next-timeout">
+<ANCHOR id="gst-rtsp-connection-reset-timeout" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-reset-timeout">
+<ANCHOR id="gst-rtsp-connection-flush" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush">
+<ANCHOR id="gst-rtsp-connection-set-auth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth">
+<ANCHOR id="gst-rtsp-connection-set-auth-param" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-auth-param">
+<ANCHOR id="gst-rtsp-connection-clear-auth-params" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-clear-auth-params">
+<ANCHOR id="gst-rtsp-connection-set-qos-dscp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-qos-dscp">
+<ANCHOR id="gst-rtsp-connection-set-ip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-ip">
+<ANCHOR id="gst-rtsp-connection-get-ip" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-ip">
+<ANCHOR id="gst-rtsp-connection-get-url" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-url">
+<ANCHOR id="gst-rtsp-connection-set-tunneled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tunneled">
+<ANCHOR id="gst-rtsp-connection-is-tunneled" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-is-tunneled">
+<ANCHOR id="gst-rtsp-connection-get-tunnelid" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tunnelid">
+<ANCHOR id="gst-rtsp-connection-do-tunnel" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel">
+<ANCHOR id="gst-rtsp-connection-get-readfd" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-readfd">
+<ANCHOR id="gst-rtsp-connection-get-writefd" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-writefd">
+<ANCHOR id="gst-rtsp-connection-set-http-mode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-http-mode">
+<ANCHOR id="gst-rtsp-connection-set-proxy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-proxy">
+<ANCHOR id="GstRTSPWatch" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch">
+<ANCHOR id="GstRTSPWatchFuncs" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatchFuncs">
+<ANCHOR id="gst-rtsp-watch-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new">
+<ANCHOR id="gst-rtsp-watch-unref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref">
+<ANCHOR id="gst-rtsp-watch-attach" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach">
+<ANCHOR id="gst-rtsp-watch-reset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-reset">
+<ANCHOR id="gst-rtsp-watch-queue-message" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-message">
+<ANCHOR id="gst-rtsp-watch-queue-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-queue-data">
+<ANCHOR id="gst-rtsp-watch-send-message" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-send-message">
+<ANCHOR id="gst-rtsp-watch-write-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data">
+<ANCHOR id="gst-plugins-base-libs-gstrtspconnection.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtspdefs" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspdefs.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspdefs.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspdefs.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.details">
+<ANCHOR id="GST-RTSP-CHECK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-CHECK:CAPS">
+<ANCHOR id="GST-RTSP-AUTH-MAX:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-MAX:CAPS">
+<ANCHOR id="GstRTSPEvent" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent">
+<ANCHOR id="GST-RTSP-EV-READ:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-READ:CAPS">
+<ANCHOR id="GST-RTSP-EV-WRITE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-WRITE:CAPS">
+<ANCHOR id="GstRTSPResult" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult">
+<ANCHOR id="GST-RTSP-OK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS">
+<ANCHOR id="GST-RTSP-ERROR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERROR:CAPS">
+<ANCHOR id="GST-RTSP-EINVAL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINVAL:CAPS">
+<ANCHOR id="GST-RTSP-EINTR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS">
+<ANCHOR id="GST-RTSP-ENOMEM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS">
+<ANCHOR id="GST-RTSP-ERESOLV:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERESOLV:CAPS">
+<ANCHOR id="GST-RTSP-ENOTIMPL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS">
+<ANCHOR id="GST-RTSP-ESYS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ESYS:CAPS">
+<ANCHOR id="GST-RTSP-EPARSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EPARSE:CAPS">
+<ANCHOR id="GST-RTSP-EWSASTART:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSASTART:CAPS">
+<ANCHOR id="GST-RTSP-EWSAVERSION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSAVERSION:CAPS">
+<ANCHOR id="GST-RTSP-EEOF:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EEOF:CAPS">
+<ANCHOR id="GST-RTSP-ENET:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENET:CAPS">
+<ANCHOR id="GST-RTSP-ENOTIP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIP:CAPS">
+<ANCHOR id="GST-RTSP-ETIMEOUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS">
+<ANCHOR id="GST-RTSP-ETGET:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETGET:CAPS">
+<ANCHOR id="GST-RTSP-ETPOST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETPOST:CAPS">
+<ANCHOR id="GST-RTSP-ELAST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ELAST:CAPS">
+<ANCHOR id="GstRTSPFamily" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily">
+<ANCHOR id="GST-RTSP-FAM-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-NONE:CAPS">
+<ANCHOR id="GST-RTSP-FAM-INET:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET:CAPS">
+<ANCHOR id="GST-RTSP-FAM-INET6:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET6:CAPS">
+<ANCHOR id="GstRTSPState" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPState">
+<ANCHOR id="GST-RTSP-STATE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-STATE-INIT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INIT:CAPS">
+<ANCHOR id="GST-RTSP-STATE-READY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-READY:CAPS">
+<ANCHOR id="GST-RTSP-STATE-SEEKING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-SEEKING:CAPS">
+<ANCHOR id="GST-RTSP-STATE-PLAYING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-PLAYING:CAPS">
+<ANCHOR id="GST-RTSP-STATE-RECORDING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-RECORDING:CAPS">
+<ANCHOR id="GstRTSPVersion" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion">
+<ANCHOR id="GST-RTSP-VERSION-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-VERSION-1-0:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-0:CAPS">
+<ANCHOR id="GST-RTSP-VERSION-1-1:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-1:CAPS">
+<ANCHOR id="GstRTSPMethod" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod">
+<ANCHOR id="GST-RTSP-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-DESCRIBE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-DESCRIBE:CAPS">
+<ANCHOR id="GST-RTSP-ANNOUNCE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ANNOUNCE:CAPS">
+<ANCHOR id="GST-RTSP-GET-PARAMETER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET-PARAMETER:CAPS">
+<ANCHOR id="GST-RTSP-OPTIONS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OPTIONS:CAPS">
+<ANCHOR id="GST-RTSP-PAUSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PAUSE:CAPS">
+<ANCHOR id="GST-RTSP-PLAY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PLAY:CAPS">
+<ANCHOR id="GST-RTSP-RECORD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-RECORD:CAPS">
+<ANCHOR id="GST-RTSP-REDIRECT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-REDIRECT:CAPS">
+<ANCHOR id="GST-RTSP-SETUP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SETUP:CAPS">
+<ANCHOR id="GST-RTSP-SET-PARAMETER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SET-PARAMETER:CAPS">
+<ANCHOR id="GST-RTSP-TEARDOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-TEARDOWN:CAPS">
+<ANCHOR id="GST-RTSP-GET:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET:CAPS">
+<ANCHOR id="GST-RTSP-POST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-POST:CAPS">
+<ANCHOR id="GstRTSPAuthMethod" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod">
+<ANCHOR id="GST-RTSP-AUTH-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-NONE:CAPS">
+<ANCHOR id="GST-RTSP-AUTH-BASIC:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-BASIC:CAPS">
+<ANCHOR id="GST-RTSP-AUTH-DIGEST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-DIGEST:CAPS">
+<ANCHOR id="GstRTSPHeaderField" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField">
+<ANCHOR id="GstRTSPStatusCode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode">
+<ANCHOR id="gst-rtsp-strresult" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-strresult">
+<ANCHOR id="gst-rtsp-method-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-method-as-text">
+<ANCHOR id="gst-rtsp-version-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-version-as-text">
+<ANCHOR id="gst-rtsp-header-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-as-text">
+<ANCHOR id="gst-rtsp-header-allow-multiple" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-header-allow-multiple">
+<ANCHOR id="gst-rtsp-status-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-status-as-text">
+<ANCHOR id="gst-rtsp-options-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-options-as-text">
+<ANCHOR id="gst-rtsp-find-header-field" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-header-field">
+<ANCHOR id="gst-rtsp-find-method" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-rtsp-find-method">
+<ANCHOR id="gst-plugins-base-libs-gstrtspdefs.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtspextension" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspextension.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html#gst-plugins-base-libs-gstrtspextension.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspextension.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html#gst-plugins-base-libs-gstrtspextension.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspextension.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html#gst-plugins-base-libs-gstrtspextension.details">
+<ANCHOR id="GstRTSPExtension" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension">
+<ANCHOR id="GstRTSPExtensionInterface" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface">
+<ANCHOR id="gst-plugins-base-libs-gstrtspmessage" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspmessage.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspmessage.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspmessage.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.details">
+<ANCHOR id="GstRTSPMsgType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType">
+<ANCHOR id="GST-RTSP-MESSAGE-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-REQUEST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-RESPONSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-DATA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-DATA:CAPS">
+<ANCHOR id="GstRTSPMessage" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage">
+<ANCHOR id="gst-rtsp-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new">
+<ANCHOR id="gst-rtsp-message-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init">
+<ANCHOR id="gst-rtsp-message-unset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset">
+<ANCHOR id="gst-rtsp-message-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-free">
+<ANCHOR id="gst-rtsp-message-get-type" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-type">
+<ANCHOR id="gst-rtsp-message-new-request" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-request">
+<ANCHOR id="gst-rtsp-message-init-request" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-request">
+<ANCHOR id="gst-rtsp-message-parse-request" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-request">
+<ANCHOR id="gst-rtsp-message-new-response" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-response">
+<ANCHOR id="gst-rtsp-message-init-response" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-response">
+<ANCHOR id="gst-rtsp-message-parse-response" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-response">
+<ANCHOR id="gst-rtsp-message-new-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new-data">
+<ANCHOR id="gst-rtsp-message-init-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-init-data">
+<ANCHOR id="gst-rtsp-message-parse-data" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-parse-data">
+<ANCHOR id="gst-rtsp-message-add-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header">
+<ANCHOR id="gst-rtsp-message-take-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header">
+<ANCHOR id="gst-rtsp-message-remove-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header">
+<ANCHOR id="gst-rtsp-message-get-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header">
+<ANCHOR id="gst-rtsp-message-append-headers" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers">
+<ANCHOR id="gst-rtsp-message-set-body" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body">
+<ANCHOR id="gst-rtsp-message-take-body" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body">
+<ANCHOR id="gst-rtsp-message-get-body" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-body">
+<ANCHOR id="gst-rtsp-message-steal-body" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-steal-body">
+<ANCHOR id="gst-rtsp-message-dump" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-dump">
+<ANCHOR id="gst-plugins-base-libs-gstrtspmessage.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstrtsprange" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtsprange.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-plugins-base-libs-gstrtsprange.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtsprange.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-plugins-base-libs-gstrtsprange.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtsprange.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-plugins-base-libs-gstrtsprange.details">
+<ANCHOR id="GstRTSPRangeUnit" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE-30-DROP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-30-DROP:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE-25:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-25:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-NPT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-NPT:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-CLOCK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-CLOCK:CAPS">
+<ANCHOR id="GstRTSPTimeRange" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange">
+<ANCHOR id="GstRTSPTime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime">
+<ANCHOR id="GstRTSPTimeType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType">
+<ANCHOR id="GST-RTSP-TIME-SECONDS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-SECONDS:CAPS">
+<ANCHOR id="GST-RTSP-TIME-NOW:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-NOW:CAPS">
+<ANCHOR id="GST-RTSP-TIME-END:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-END:CAPS">
+<ANCHOR id="gst-rtsp-range-parse" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-parse">
+<ANCHOR id="gst-rtsp-range-to-string" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-to-string">
+<ANCHOR id="gst-rtsp-range-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-free">
+<ANCHOR id="gst-plugins-base-libs-gstrtsptransport" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtsptransport.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtsptransport.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtsptransport.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.details">
+<ANCHOR id="GstRTSPTransMode" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode">
+<ANCHOR id="GST-RTSP-TRANS-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-TRANS-RTP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RTP:CAPS">
+<ANCHOR id="GST-RTSP-TRANS-RDT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RDT:CAPS">
+<ANCHOR id="GstRTSPProfile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile">
+<ANCHOR id="GST-RTSP-PROFILE-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-AVP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVP:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-SAVP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVP:CAPS">
+<ANCHOR id="GstRTSPRange" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange">
+<ANCHOR id="GstRTSPLowerTrans" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UDP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-TCP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TCP:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-HTTP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-HTTP:CAPS">
+<ANCHOR id="GstRTSPTransport" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport">
+<ANCHOR id="gst-rtsp-transport-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-new">
+<ANCHOR id="gst-rtsp-transport-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-init">
+<ANCHOR id="gst-rtsp-transport-parse" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-parse">
+<ANCHOR id="gst-rtsp-transport-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-as-text">
+<ANCHOR id="gst-rtsp-transport-get-mime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-mime">
+<ANCHOR id="gst-rtsp-transport-get-manager" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-get-manager">
+<ANCHOR id="gst-rtsp-transport-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free">
+<ANCHOR id="gst-plugins-base-libs-gstrtspurl" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html">
+<ANCHOR id="gst-plugins-base-libs-gstrtspurl.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-plugins-base-libs-gstrtspurl.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstrtspurl.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-plugins-base-libs-gstrtspurl.description">
+<ANCHOR id="gst-plugins-base-libs-gstrtspurl.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-plugins-base-libs-gstrtspurl.details">
+<ANCHOR id="GST-RTSP-DEFAULT-PORT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#GST-RTSP-DEFAULT-PORT:CAPS">
+<ANCHOR id="GstRTSPUrl" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl">
+<ANCHOR id="gst-rtsp-url-parse" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-parse">
+<ANCHOR id="gst-rtsp-url-copy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-copy">
+<ANCHOR id="gst-rtsp-url-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free">
+<ANCHOR id="gst-rtsp-url-get-request-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-request-uri">
+<ANCHOR id="gst-rtsp-url-set-port" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-set-port">
+<ANCHOR id="gst-rtsp-url-get-port" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-get-port">
+<ANCHOR id="gst-rtsp-url-decode-path-components" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-decode-path-components">
+<ANCHOR id="gst-plugins-base-libs-gstsdpmessage" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html">
+<ANCHOR id="gst-plugins-base-libs-gstsdpmessage.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-plugins-base-libs-gstsdpmessage.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstsdpmessage.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-plugins-base-libs-gstsdpmessage.description">
+<ANCHOR id="gst-plugins-base-libs-gstsdpmessage.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-plugins-base-libs-gstsdpmessage.details">
+<ANCHOR id="GstSDPResult" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult">
+<ANCHOR id="GST-SDP-OK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS">
+<ANCHOR id="GST-SDP-EINVAL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-EINVAL:CAPS">
+<ANCHOR id="GstSDPOrigin" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin">
+<ANCHOR id="GstSDPConnection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection">
+<ANCHOR id="GST-SDP-BWTYPE-CT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-CT:CAPS">
+<ANCHOR id="GST-SDP-BWTYPE-AS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-AS:CAPS">
+<ANCHOR id="GST-SDP-BWTYPE-EXT-PREFIX:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-EXT-PREFIX:CAPS">
+<ANCHOR id="GST-SDP-BWTYPE-RR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RR:CAPS">
+<ANCHOR id="GST-SDP-BWTYPE-RS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-RS:CAPS">
+<ANCHOR id="GST-SDP-BWTYPE-TIAS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-TIAS:CAPS">
+<ANCHOR id="GstSDPBandwidth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth">
+<ANCHOR id="GstSDPTime" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime">
+<ANCHOR id="GstSDPZone" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone">
+<ANCHOR id="GstSDPKey" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey">
+<ANCHOR id="GstSDPAttribute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute">
+<ANCHOR id="GstSDPMedia" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia">
+<ANCHOR id="GstSDPMessage" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage">
+<ANCHOR id="gst-sdp-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new">
+<ANCHOR id="gst-sdp-message-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init">
+<ANCHOR id="gst-sdp-message-uninit" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit">
+<ANCHOR id="gst-sdp-message-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free">
+<ANCHOR id="gst-sdp-message-parse-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-buffer">
+<ANCHOR id="gst-sdp-message-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-text">
+<ANCHOR id="gst-sdp-message-parse-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-parse-uri">
+<ANCHOR id="gst-sdp-message-as-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-as-uri">
+<ANCHOR id="gst-sdp-address-is-multicast" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-address-is-multicast">
+<ANCHOR id="gst-sdp-message-get-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-version">
+<ANCHOR id="gst-sdp-message-set-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-version">
+<ANCHOR id="gst-sdp-message-get-origin" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-origin">
+<ANCHOR id="gst-sdp-message-set-origin" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-origin">
+<ANCHOR id="gst-sdp-message-get-session-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-session-name">
+<ANCHOR id="gst-sdp-message-set-session-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-session-name">
+<ANCHOR id="gst-sdp-message-get-information" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-information">
+<ANCHOR id="gst-sdp-message-set-information" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-information">
+<ANCHOR id="gst-sdp-message-get-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-uri">
+<ANCHOR id="gst-sdp-message-set-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-uri">
+<ANCHOR id="gst-sdp-message-emails-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-emails-len">
+<ANCHOR id="gst-sdp-message-get-email" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-email">
+<ANCHOR id="gst-sdp-message-add-email" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-email">
+<ANCHOR id="gst-sdp-message-phones-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-phones-len">
+<ANCHOR id="gst-sdp-message-get-phone" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-phone">
+<ANCHOR id="gst-sdp-message-add-phone" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-phone">
+<ANCHOR id="gst-sdp-message-get-connection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-connection">
+<ANCHOR id="gst-sdp-message-set-connection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-connection">
+<ANCHOR id="gst-sdp-message-bandwidths-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-bandwidths-len">
+<ANCHOR id="gst-sdp-message-get-bandwidth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-bandwidth">
+<ANCHOR id="gst-sdp-message-add-bandwidth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-bandwidth">
+<ANCHOR id="gst-sdp-message-times-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-times-len">
+<ANCHOR id="gst-sdp-message-get-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-time">
+<ANCHOR id="gst-sdp-message-add-time" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-time">
+<ANCHOR id="gst-sdp-message-zones-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-zones-len">
+<ANCHOR id="gst-sdp-message-get-zone" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-zone">
+<ANCHOR id="gst-sdp-message-add-zone" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-zone">
+<ANCHOR id="gst-sdp-message-get-key" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-key">
+<ANCHOR id="gst-sdp-message-set-key" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-set-key">
+<ANCHOR id="gst-sdp-message-attributes-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-attributes-len">
+<ANCHOR id="gst-sdp-message-get-attribute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute">
+<ANCHOR id="gst-sdp-message-get-attribute-val" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val">
+<ANCHOR id="gst-sdp-message-get-attribute-val-n" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-attribute-val-n">
+<ANCHOR id="gst-sdp-message-add-attribute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-attribute">
+<ANCHOR id="gst-sdp-message-medias-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-medias-len">
+<ANCHOR id="gst-sdp-message-get-media" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-get-media">
+<ANCHOR id="gst-sdp-message-add-media" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media">
+<ANCHOR id="gst-sdp-message-dump" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump">
+<ANCHOR id="gst-sdp-media-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new">
+<ANCHOR id="gst-sdp-media-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init">
+<ANCHOR id="gst-sdp-media-uninit" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit">
+<ANCHOR id="gst-sdp-media-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free">
+<ANCHOR id="gst-sdp-media-get-media" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-media">
+<ANCHOR id="gst-sdp-media-set-media" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-media">
+<ANCHOR id="gst-sdp-media-get-port" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-port">
+<ANCHOR id="gst-sdp-media-get-num-ports" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-num-ports">
+<ANCHOR id="gst-sdp-media-set-port-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-port-info">
+<ANCHOR id="gst-sdp-media-get-proto" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-proto">
+<ANCHOR id="gst-sdp-media-set-proto" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-proto">
+<ANCHOR id="gst-sdp-media-formats-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-formats-len">
+<ANCHOR id="gst-sdp-media-get-format" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-format">
+<ANCHOR id="gst-sdp-media-add-format" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-format">
+<ANCHOR id="gst-sdp-media-get-information" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-information">
+<ANCHOR id="gst-sdp-media-set-information" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-information">
+<ANCHOR id="gst-sdp-media-connections-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-connections-len">
+<ANCHOR id="gst-sdp-media-get-connection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-connection">
+<ANCHOR id="gst-sdp-media-add-connection" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-connection">
+<ANCHOR id="gst-sdp-media-bandwidths-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-bandwidths-len">
+<ANCHOR id="gst-sdp-media-get-bandwidth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-bandwidth">
+<ANCHOR id="gst-sdp-media-add-bandwidth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-bandwidth">
+<ANCHOR id="gst-sdp-media-get-key" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-key">
+<ANCHOR id="gst-sdp-media-set-key" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-set-key">
+<ANCHOR id="gst-sdp-media-attributes-len" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-attributes-len">
+<ANCHOR id="gst-sdp-media-get-attribute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute">
+<ANCHOR id="gst-sdp-media-get-attribute-val" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val">
+<ANCHOR id="gst-sdp-media-get-attribute-val-n" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-get-attribute-val-n">
+<ANCHOR id="gst-sdp-media-add-attribute" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-attribute">
+<ANCHOR id="gst-sdp-media-as-text" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-as-text">
+<ANCHOR id="gst-plugins-base-libs-gsttag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html">
+<ANCHOR id="gst-plugins-base-libs-gsttag.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttag.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.description">
+<ANCHOR id="gst-plugins-base-libs-gsttag.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.details">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-TRACKID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-ARTISTID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-ALBUMID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMID:CAPS">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-TRMID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRMID:CAPS">
+<ANCHOR id="GST-TAG-MUSICBRAINZ-SORTNAME:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-SORTNAME:CAPS">
+<ANCHOR id="GST-TAG-CDDA-CDDB-DISCID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID:CAPS">
+<ANCHOR id="GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-CDDB-DISCID-FULL:CAPS">
+<ANCHOR id="GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID:CAPS">
+<ANCHOR id="GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-MUSICBRAINZ-DISCID-FULL:CAPS">
+<ANCHOR id="GST-TAG-CDDA-TRACK-TAGS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CDDA-TRACK-TAGS:CAPS">
+<ANCHOR id="GST-TAG-CMML-CLIP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-CLIP:CAPS">
+<ANCHOR id="GST-TAG-CMML-HEAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-HEAD:CAPS">
+<ANCHOR id="GST-TAG-CMML-STREAM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CMML-STREAM:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHUTTER-SPEED:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-FOCAL-RATIO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-RATIO:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FOCAL-LENGTH:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-DIGITAL-ZOOM-RATIO:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-ISO-SPEED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-ISO-SPEED:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-PROGRAM:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-MODE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SCENE-CAPTURE-TYPE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-GAIN-ADJUSTMENT:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-WHITE-BALANCE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-WHITE-BALANCE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-CONTRAST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-CONTRAST:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-SATURATION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SATURATION:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-SHARPNESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SHARPNESS:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-FLASH-FIRED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-FIRED:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-FLASH-MODE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-FLASH-MODE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-METERING-MODE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-METERING-MODE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-SOURCE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-SOURCE:CAPS">
+<ANCHOR id="GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-CAPTURING-EXPOSURE-COMPENSATION:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-VERTICAL-PPI:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS">
+<ANCHOR id="GST-TAG-ID3V2-HEADER-SIZE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS">
+<ANCHOR id="gst-tag-register-musicbrainz-tags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags">
+<ANCHOR id="gst-tag-freeform-string-to-utf8" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8">
+<ANCHOR id="gst-tag-parse-extended-comment" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment">
+<ANCHOR id="gst-tag-image-data-to-image-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-buffer">
+<ANCHOR id="GstTagImageType" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GstTagImageType">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-NONE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-MEDIUM:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-MEDIUM:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-ARTIST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ARTIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-COMPOSER:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-COMPOSER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LYRICIST:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LYRICIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-FISH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FISH:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS">
+<ANCHOR id="gst-plugins-base-libs-gsttag.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagvorbis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagvorbis.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-plugins-base-libs-gsttagvorbis.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagvorbis.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-plugins-base-libs-gsttagvorbis.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagvorbis.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-plugins-base-libs-gsttagvorbis.details">
+<ANCHOR id="gst-tag-from-vorbis-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag">
+<ANCHOR id="gst-tag-to-vorbis-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-tag">
+<ANCHOR id="gst-vorbis-tag-add" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-vorbis-tag-add">
+<ANCHOR id="gst-tag-to-vorbis-comments" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-comments">
+<ANCHOR id="gst-tag-list-from-vorbiscomment-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment-buffer">
+<ANCHOR id="gst-tag-list-to-vorbiscomment-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-to-vorbiscomment-buffer">
+<ANCHOR id="gst-plugins-base-libs-gsttagvorbis.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagvorbis.html#gst-plugins-base-libs-gsttagvorbis.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagid3" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagid3.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-plugins-base-libs-gsttagid3.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagid3.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-plugins-base-libs-gsttagid3.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagid3.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-plugins-base-libs-gsttagid3.details">
+<ANCHOR id="gst-tag-id3-genre-count" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-count">
+<ANCHOR id="gst-tag-id3-genre-get" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-get">
+<ANCHOR id="gst-tag-list-new-from-id3v1" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-list-new-from-id3v1">
+<ANCHOR id="gst-tag-from-id3-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-tag">
+<ANCHOR id="gst-tag-from-id3-user-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-from-id3-user-tag">
+<ANCHOR id="gst-tag-to-id3-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-to-id3-tag">
+<ANCHOR id="gst-tag-list-add-id3-image" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-list-add-id3-image">
+<ANCHOR id="gst-tag-get-id3v2-tag-size" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-get-id3v2-tag-size">
+<ANCHOR id="gst-tag-list-from-id3v2-tag" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-tag-list-from-id3v2-tag">
+<ANCHOR id="gst-plugins-base-libs-gsttagid3.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagid3.html#gst-plugins-base-libs-gsttagid3.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagexif" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagexif.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-plugins-base-libs-gsttagexif.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagexif.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-plugins-base-libs-gsttagexif.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagexif.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-plugins-base-libs-gsttagexif.details">
+<ANCHOR id="gst-tag-list-to-exif-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer">
+<ANCHOR id="gst-tag-list-to-exif-buffer-with-tiff-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-tag-list-to-exif-buffer-with-tiff-header">
+<ANCHOR id="gst-tag-list-from-exif-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer">
+<ANCHOR id="gst-tag-list-from-exif-buffer-with-tiff-header" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-tag-list-from-exif-buffer-with-tiff-header">
+<ANCHOR id="gst-plugins-base-libs-gsttagexif.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagexif.html#gst-plugins-base-libs-gsttagexif.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmp" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmp.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-plugins-base-libs-gsttagxmp.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmp.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-plugins-base-libs-gsttagxmp.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmp.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-plugins-base-libs-gsttagxmp.details">
+<ANCHOR id="gst-tag-list-from-xmp-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-from-xmp-buffer">
+<ANCHOR id="gst-tag-list-to-xmp-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer">
+<ANCHOR id="gst-tag-list-to-xmp-buffer-full" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer-full">
+<ANCHOR id="gst-tag-xmp-list-schemas" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmp.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmp.html#gst-plugins-base-libs-gsttagxmp.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmpwriter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmpwriter.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-plugins-base-libs-gsttagxmpwriter.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmpwriter.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-plugins-base-libs-gsttagxmpwriter.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagxmpwriter.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-plugins-base-libs-gsttagxmpwriter.details">
+<ANCHOR id="gst-tag-xmp-writer-add-all-schemas" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-all-schemas">
+<ANCHOR id="gst-tag-xmp-writer-add-schema" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-schema">
+<ANCHOR id="gst-tag-xmp-writer-has-schema" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-has-schema">
+<ANCHOR id="gst-tag-xmp-writer-remove-schema" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-schema">
+<ANCHOR id="gst-tag-xmp-writer-remove-all-schemas" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-all-schemas">
+<ANCHOR id="gst-tag-xmp-writer-tag-list-to-xmp-buffer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-tag-list-to-xmp-buffer">
+<ANCHOR id="gst-plugins-base-libs-gsttagdemux" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagdemux.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#gst-plugins-base-libs-gsttagdemux.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagdemux.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#gst-plugins-base-libs-gsttagdemux.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagdemux.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#gst-plugins-base-libs-gsttagdemux.details">
+<ANCHOR id="GstTagDemux" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GstTagDemux">
+<ANCHOR id="GstTagDemuxClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass">
+<ANCHOR id="GstTagDemuxResult" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-AGAIN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-AGAIN:CAPS">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-OK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-OK:CAPS">
+<ANCHOR id="gst-plugins-base-libs-gsttagdemux.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagdemux.html#gst-plugins-base-libs-gsttagdemux.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttagmux" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html">
+<ANCHOR id="gst-plugins-base-libs-gsttagmux.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#gst-plugins-base-libs-gsttagmux.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttagmux.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#gst-plugins-base-libs-gsttagmux.description">
+<ANCHOR id="gst-plugins-base-libs-gsttagmux.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#gst-plugins-base-libs-gsttagmux.details">
+<ANCHOR id="GstTagMux" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#GstTagMux">
+<ANCHOR id="GstTagMuxClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass">
+<ANCHOR id="gst-plugins-base-libs-gsttagmux.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttagmux.html#gst-plugins-base-libs-gsttagmux.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttaglanguagecodes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html">
+<ANCHOR id="gst-plugins-base-libs-gsttaglanguagecodes.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-plugins-base-libs-gsttaglanguagecodes.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttaglanguagecodes.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-plugins-base-libs-gsttaglanguagecodes.description">
+<ANCHOR id="gst-plugins-base-libs-gsttaglanguagecodes.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-plugins-base-libs-gsttaglanguagecodes.details">
+<ANCHOR id="gst-tag-get-language-codes" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-codes">
+<ANCHOR id="gst-tag-get-language-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-name">
+<ANCHOR id="gst-tag-get-language-code" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code">
+<ANCHOR id="gst-tag-get-language-code-iso-639-1" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-1">
+<ANCHOR id="gst-tag-get-language-code-iso-639-2B" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2B">
+<ANCHOR id="gst-tag-get-language-code-iso-639-2T" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code-iso-639-2T">
+<ANCHOR id="gst-plugins-base-libs-gsttaglanguagecodes.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglanguagecodes.html#gst-plugins-base-libs-gsttaglanguagecodes.see-also">
+<ANCHOR id="gst-plugins-base-libs-gsttaglicenses" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html">
+<ANCHOR id="gst-plugins-base-libs-gsttaglicenses.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gsttaglicenses.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.description">
+<ANCHOR id="gst-plugins-base-libs-gsttaglicenses.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.details">
+<ANCHOR id="GstTagLicenseFlags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-SHARING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-SHARING:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS">
+<ANCHOR id="gst-tag-get-license-flags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-flags">
+<ANCHOR id="gst-tag-get-license-nick" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-nick">
+<ANCHOR id="gst-tag-get-license-title" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-title">
+<ANCHOR id="gst-tag-get-license-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-description">
+<ANCHOR id="gst-tag-get-license-jurisdiction" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-jurisdiction">
+<ANCHOR id="gst-tag-get-license-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-version">
+<ANCHOR id="gst-tag-get-licenses" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses">
+<ANCHOR id="gst-plugins-base-libs-gsttaglicenses.see-also" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.see-also">
+<ANCHOR id="gst-plugins-base-libs-gstpbutils" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutils.html">
+<ANCHOR id="gst-plugins-base-libs-gstpbutils.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutils.html#gst-plugins-base-libs-gstpbutils.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpbutils.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutils.html#gst-plugins-base-libs-gstpbutils.description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutils.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutils.html#gst-plugins-base-libs-gstpbutils.details">
+<ANCHOR id="gst-pb-utils-init" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init">
+<ANCHOR id="gst-plugins-base-libs-gstpluginsbaseversion" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html">
+<ANCHOR id="gst-plugins-base-libs-gstpluginsbaseversion.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-libs-gstpluginsbaseversion.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpluginsbaseversion.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-libs-gstpluginsbaseversion.description">
+<ANCHOR id="gst-plugins-base-libs-gstpluginsbaseversion.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-libs-gstpluginsbaseversion.details">
+<ANCHOR id="GST-PLUGINS-BASE-VERSION-MAJOR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MAJOR:CAPS">
+<ANCHOR id="GST-PLUGINS-BASE-VERSION-MINOR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MINOR:CAPS">
+<ANCHOR id="GST-PLUGINS-BASE-VERSION-MICRO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MICRO:CAPS">
+<ANCHOR id="GST-PLUGINS-BASE-VERSION-NANO:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-NANO:CAPS">
+<ANCHOR id="GST-CHECK-PLUGINS-BASE-VERSION:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#GST-CHECK-PLUGINS-BASE-VERSION:CAPS">
+<ANCHOR id="gst-plugins-base-version" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version">
+<ANCHOR id="gst-plugins-base-version-string" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version-string">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilscodecutils" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilscodecutils.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-plugins-base-libs-gstpbutilscodecutils.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilscodecutils.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-plugins-base-libs-gstpbutilscodecutils.description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilscodecutils.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-plugins-base-libs-gstpbutilscodecutils.details">
+<ANCHOR id="gst-codec-utils-aac-get-sample-rate-from-index" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-sample-rate-from-index">
+<ANCHOR id="gst-codec-utils-aac-get-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile">
+<ANCHOR id="gst-codec-utils-aac-get-level" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-level">
+<ANCHOR id="gst-codec-utils-aac-caps-set-level-and-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-caps-set-level-and-profile">
+<ANCHOR id="gst-codec-utils-h264-get-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-profile">
+<ANCHOR id="gst-codec-utils-h264-get-level" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level">
+<ANCHOR id="gst-codec-utils-h264-caps-set-level-and-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-caps-set-level-and-profile">
+<ANCHOR id="gst-codec-utils-h264-get-level-idc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-h264-get-level-idc">
+<ANCHOR id="gst-codec-utils-mpeg4video-get-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile">
+<ANCHOR id="gst-codec-utils-mpeg4video-get-level" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level">
+<ANCHOR id="gst-codec-utils-mpeg4video-caps-set-level-and-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-plugins-base-libs-gstpbutilsdescriptions.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-plugins-base-libs-gstpbutilsdescriptions.description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-plugins-base-libs-gstpbutilsdescriptions.details">
+<ANCHOR id="gst-pb-utils-get-source-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-source-description">
+<ANCHOR id="gst-pb-utils-get-sink-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-sink-description">
+<ANCHOR id="gst-pb-utils-get-decoder-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-decoder-description">
+<ANCHOR id="gst-pb-utils-get-encoder-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-encoder-description">
+<ANCHOR id="gst-pb-utils-get-element-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-element-description">
+<ANCHOR id="gst-pb-utils-add-codec-description-to-tag-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list">
+<ANCHOR id="gst-pb-utils-get-codec-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-codec-description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsmissingplugins" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsmissingplugins.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-plugins-base-libs-gstpbutilsmissingplugins.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsmissingplugins.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-plugins-base-libs-gstpbutilsmissingplugins.description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsmissingplugins.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-plugins-base-libs-gstpbutilsmissingplugins.details">
+<ANCHOR id="gst-missing-plugin-message-get-installer-detail" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail">
+<ANCHOR id="gst-missing-plugin-message-get-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description">
+<ANCHOR id="gst-is-missing-plugin-message" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message">
+<ANCHOR id="gst-missing-decoder-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-message-new">
+<ANCHOR id="gst-missing-encoder-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-message-new">
+<ANCHOR id="gst-missing-uri-source-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-message-new">
+<ANCHOR id="gst-missing-uri-sink-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-message-new">
+<ANCHOR id="gst-missing-element-message-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-message-new">
+<ANCHOR id="gst-missing-uri-source-installer-detail-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-source-installer-detail-new">
+<ANCHOR id="gst-missing-uri-sink-installer-detail-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-uri-sink-installer-detail-new">
+<ANCHOR id="gst-missing-element-installer-detail-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-installer-detail-new">
+<ANCHOR id="gst-missing-decoder-installer-detail-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-installer-detail-new">
+<ANCHOR id="gst-missing-encoder-installer-detail-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-installer-detail-new">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsinstallplugins" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsinstallplugins.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-plugins-base-libs-gstpbutilsinstallplugins.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsinstallplugins.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-plugins-base-libs-gstpbutilsinstallplugins.description">
+<ANCHOR id="gst-plugins-base-libs-gstpbutilsinstallplugins.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-plugins-base-libs-gstpbutilsinstallplugins.details">
+<ANCHOR id="GstInstallPluginsReturn" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn">
+<ANCHOR id="GST-INSTALL-PLUGINS-SUCCESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-SUCCESS:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-NOT-FOUND:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-NOT-FOUND:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-ERROR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-ERROR:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-USER-ABORT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-USER-ABORT:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-CRASHED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-CRASHED:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INVALID:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-STARTED-OK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-STARTED-OK:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS">
+<ANCHOR id="GstInstallPluginsResultFunc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc">
+<ANCHOR id="gst-install-plugins-async" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async">
+<ANCHOR id="gst-install-plugins-sync" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync">
+<ANCHOR id="gst-install-plugins-return-get-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-return-get-name">
+<ANCHOR id="gst-install-plugins-installation-in-progress" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-installation-in-progress">
+<ANCHOR id="gst-install-plugins-supported" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-supported">
+<ANCHOR id="GstInstallPluginsContext" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext">
+<ANCHOR id="gst-install-plugins-context-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new">
+<ANCHOR id="gst-install-plugins-context-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free">
+<ANCHOR id="gst-install-plugins-context-set-xid" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.synopsis">
+<ANCHOR id="GstDiscoverer" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer">
+<ANCHOR id="GstDiscovererInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.properties">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.signals" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.signals">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.description">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.details">
+<ANCHOR id="GstDiscoverer-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct">
+<ANCHOR id="gst-discoverer-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-new">
+<ANCHOR id="gst-discoverer-start" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-start">
+<ANCHOR id="gst-discoverer-stop" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stop">
+<ANCHOR id="gst-discoverer-discover-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri">
+<ANCHOR id="gst-discoverer-discover-uri-async" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-discover-uri-async">
+<ANCHOR id="GstDiscovererInfo-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct">
+<ANCHOR id="GstDiscovererResult" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult">
+<ANCHOR id="GST-DISCOVERER-OK:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-OK:CAPS">
+<ANCHOR id="GST-DISCOVERER-URI-INVALID:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-URI-INVALID:CAPS">
+<ANCHOR id="GST-DISCOVERER-ERROR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-ERROR:CAPS">
+<ANCHOR id="GST-DISCOVERER-TIMEOUT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-TIMEOUT:CAPS">
+<ANCHOR id="GST-DISCOVERER-BUSY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-BUSY:CAPS">
+<ANCHOR id="GST-DISCOVERER-MISSING-PLUGINS:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-MISSING-PLUGINS:CAPS">
+<ANCHOR id="gst-discoverer-info-get-duration" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-duration">
+<ANCHOR id="gst-discoverer-info-get-misc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-misc">
+<ANCHOR id="gst-discoverer-info-get-result" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-result">
+<ANCHOR id="gst-discoverer-info-get-stream-info" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-info">
+<ANCHOR id="gst-discoverer-info-get-stream-list" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-stream-list">
+<ANCHOR id="gst-discoverer-info-get-tags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-tags">
+<ANCHOR id="gst-discoverer-info-get-uri" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-uri">
+<ANCHOR id="gst-discoverer-info-get-seekable" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable">
+<ANCHOR id="gst-discoverer-info-ref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref">
+<ANCHOR id="gst-discoverer-info-unref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref">
+<ANCHOR id="GstDiscovererStreamInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo">
+<ANCHOR id="GstDiscovererContainerInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo">
+<ANCHOR id="GstDiscovererAudioInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo">
+<ANCHOR id="GstDiscovererVideoInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo">
+<ANCHOR id="GstDiscovererSubtitleInfo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo">
+<ANCHOR id="gst-discoverer-stream-info-get-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps">
+<ANCHOR id="gst-discoverer-stream-info-get-misc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc">
+<ANCHOR id="gst-discoverer-stream-info-get-next" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next">
+<ANCHOR id="gst-discoverer-stream-info-get-previous" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-previous">
+<ANCHOR id="gst-discoverer-stream-info-get-tags" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-tags">
+<ANCHOR id="gst-discoverer-stream-info-ref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-ref">
+<ANCHOR id="gst-discoverer-stream-info-unref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref">
+<ANCHOR id="gst-discoverer-stream-info-list-free" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free">
+<ANCHOR id="gst-discoverer-stream-info-get-stream-type-nick" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-stream-type-nick">
+<ANCHOR id="gst-discoverer-info-get-audio-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-audio-streams">
+<ANCHOR id="gst-discoverer-info-get-container-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-container-streams">
+<ANCHOR id="gst-discoverer-info-get-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-streams">
+<ANCHOR id="gst-discoverer-info-get-subtitle-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-subtitle-streams">
+<ANCHOR id="gst-discoverer-info-get-video-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-video-streams">
+<ANCHOR id="gst-discoverer-audio-info-get-bitrate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-bitrate">
+<ANCHOR id="gst-discoverer-audio-info-get-channels" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-channels">
+<ANCHOR id="gst-discoverer-audio-info-get-depth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-depth">
+<ANCHOR id="gst-discoverer-audio-info-get-language" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-language">
+<ANCHOR id="gst-discoverer-audio-info-get-max-bitrate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-max-bitrate">
+<ANCHOR id="gst-discoverer-audio-info-get-sample-rate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-audio-info-get-sample-rate">
+<ANCHOR id="gst-discoverer-container-info-get-streams" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-container-info-get-streams">
+<ANCHOR id="gst-discoverer-subtitle-info-get-language" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-subtitle-info-get-language">
+<ANCHOR id="gst-discoverer-video-info-get-bitrate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-bitrate">
+<ANCHOR id="gst-discoverer-video-info-get-depth" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-depth">
+<ANCHOR id="gst-discoverer-video-info-get-framerate-denom" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-denom">
+<ANCHOR id="gst-discoverer-video-info-get-framerate-num" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-framerate-num">
+<ANCHOR id="gst-discoverer-video-info-get-height" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-height">
+<ANCHOR id="gst-discoverer-video-info-is-interlaced" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-interlaced">
+<ANCHOR id="gst-discoverer-video-info-is-image" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-is-image">
+<ANCHOR id="gst-discoverer-video-info-get-max-bitrate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-max-bitrate">
+<ANCHOR id="gst-discoverer-video-info-get-par-denom" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-denom">
+<ANCHOR id="gst-discoverer-video-info-get-par-num" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-par-num">
+<ANCHOR id="gst-discoverer-video-info-get-width" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-video-info-get-width">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.property-details">
+<ANCHOR id="GstDiscoverer--timeout" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer--timeout">
+<ANCHOR id="gst-plugins-base-libs-gstdiscoverer.signal-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.signal-details">
+<ANCHOR id="GstDiscoverer-discovered" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-discovered">
+<ANCHOR id="GstDiscoverer-finished" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished">
+<ANCHOR id="GstDiscoverer-starting" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting">
+<ANCHOR id="gst-plugins-base-libs-encoding-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html">
+<ANCHOR id="gst-plugins-base-libs-encoding-profile.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.synopsis">
+<ANCHOR id="GstEncodingProfile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">
+<ANCHOR id="GstEncodingContainerProfile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile">
+<ANCHOR id="GstEncodingAudioProfile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile">
+<ANCHOR id="GstEncodingVideoProfile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile">
+<ANCHOR id="GstEncodingTarget" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget">
+<ANCHOR id="gst-plugins-base-libs-encoding-profile.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-encoding-profile.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.description">
+<ANCHOR id="gst-plugins-base-libs-encoding-profile.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.details">
+<ANCHOR id="GstEncodingProfile-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile-struct">
+<ANCHOR id="gst-encoding-profile-unref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref">
+<ANCHOR id="gst-encoding-profile-ref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref">
+<ANCHOR id="gst-encoding-profile-find" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-find">
+<ANCHOR id="gst-encoding-profile-get-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-name">
+<ANCHOR id="gst-encoding-profile-get-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-description">
+<ANCHOR id="gst-encoding-profile-get-format" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-format">
+<ANCHOR id="gst-encoding-profile-get-preset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-preset">
+<ANCHOR id="gst-encoding-profile-get-presence" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-presence">
+<ANCHOR id="gst-encoding-profile-get-restriction" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction">
+<ANCHOR id="gst-encoding-profile-set-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name">
+<ANCHOR id="gst-encoding-profile-set-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description">
+<ANCHOR id="gst-encoding-profile-set-format" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format">
+<ANCHOR id="gst-encoding-profile-set-preset" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset">
+<ANCHOR id="gst-encoding-profile-set-restriction" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction">
+<ANCHOR id="gst-encoding-profile-set-presence" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence">
+<ANCHOR id="gst-encoding-profile-is-equal" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal">
+<ANCHOR id="gst-encoding-profile-get-input-caps" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps">
+<ANCHOR id="gst-encoding-profile-get-type-nick" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick">
+<ANCHOR id="GstEncodingContainerProfile-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile-struct">
+<ANCHOR id="gst-encoding-container-profile-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new">
+<ANCHOR id="gst-encoding-container-profile-add-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-add-profile">
+<ANCHOR id="gst-encoding-container-profile-contains-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-contains-profile">
+<ANCHOR id="gst-encoding-container-profile-get-profiles" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-get-profiles">
+<ANCHOR id="GstEncodingAudioProfile-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile-struct">
+<ANCHOR id="gst-encoding-audio-profile-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-audio-profile-new">
+<ANCHOR id="GstEncodingVideoProfile-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile-struct">
+<ANCHOR id="gst-encoding-video-profile-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-new">
+<ANCHOR id="gst-encoding-video-profile-get-pass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-pass">
+<ANCHOR id="gst-encoding-video-profile-get-variableframerate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-get-variableframerate">
+<ANCHOR id="gst-encoding-video-profile-set-pass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-pass">
+<ANCHOR id="gst-encoding-video-profile-set-variableframerate" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate">
+<ANCHOR id="GST-ENCODING-CATEGORY-DEVICE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS">
+<ANCHOR id="GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-ONLINE-SERVICE:CAPS">
+<ANCHOR id="GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-STORAGE-EDITING:CAPS">
+<ANCHOR id="GST-ENCODING-CATEGORY-CAPTURE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-CAPTURE:CAPS">
+<ANCHOR id="GstEncodingTarget-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget-struct">
+<ANCHOR id="gst-encoding-target-unref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-unref">
+<ANCHOR id="gst-encoding-target-ref" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-ref">
+<ANCHOR id="gst-encoding-target-new" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-new">
+<ANCHOR id="gst-encoding-target-get-name" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-name">
+<ANCHOR id="gst-encoding-target-get-category" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-category">
+<ANCHOR id="gst-encoding-target-get-description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-description">
+<ANCHOR id="gst-encoding-target-get-profiles" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profiles">
+<ANCHOR id="gst-encoding-target-get-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-get-profile">
+<ANCHOR id="gst-encoding-target-add-profile" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-add-profile">
+<ANCHOR id="gst-encoding-target-save" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save">
+<ANCHOR id="gst-encoding-target-save-to-file" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-save-to-file">
+<ANCHOR id="gst-encoding-target-load" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load">
+<ANCHOR id="gst-encoding-target-load-from-file" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-target-load-from-file">
+<ANCHOR id="gst-encoding-list-all-targets" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-all-targets">
+<ANCHOR id="gst-encoding-list-available-categories" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#gst-encoding-list-available-categories">
+<ANCHOR id="gst-plugins-base-libs-gstvideo" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideo.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.synopsis">
+<ANCHOR id="gst-plugins-base-libs-gstvideo.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideo.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.details">
+<ANCHOR id="GST-VIDEO-FPS-RANGE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FPS-RANGE:CAPS">
+<ANCHOR id="GST-VIDEO-SIZE-RANGE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS">
+<ANCHOR id="GstVideoFormat" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GstVideoFormat">
+<ANCHOR id="GST-VIDEO-FORMAT-UNKNOWN:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-I420:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YV12:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YV12:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YUY2:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUY2:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-UYVY:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVY:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-AYUV:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGBx" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBx">
+<ANCHOR id="GST-VIDEO-FORMAT-BGRx" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRx">
+<ANCHOR id="GST-VIDEO-FORMAT-xRGB" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xRGB">
+<ANCHOR id="GST-VIDEO-FORMAT-xBGR" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xBGR">
+<ANCHOR id="GST-VIDEO-FORMAT-RGBA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBA:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGRA:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRA:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ARGB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ABGR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ABGR:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y41B:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y41B:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y42B:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y42B:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YVYU:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVYU:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y444:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-v210" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v210">
+<ANCHOR id="GST-VIDEO-FORMAT-v216" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v216">
+<ANCHOR id="GST-VIDEO-FORMAT-NV12:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV21:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV21:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY8:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY8:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY16-BE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY16-LE:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-v308" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v308">
+<ANCHOR id="GST-VIDEO-FORMAT-Y800:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y800:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y16:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB16:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR16:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB15:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB15:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR15:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR15:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-UYVP:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVP:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A420:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB8-PALETTED:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB8-PALETTED:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YUV9:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUV9:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YVU9:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVU9:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-IYU1:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-IYU1:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ARGB64:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB64:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-AYUV64:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV64:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-r210" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-r210">
+<ANCHOR id="gst-video-calculate-display-ratio" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio">
+<ANCHOR id="gst-video-format-to-fourcc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-format-to-fourcc">
+<ANCHOR id="gst-video-format-from-fourcc" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-format-from-fourcc">
+<ANCHOR id="gst-video-parse-caps-palette" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-parse-caps-palette">
+<ANCHOR id="GstVideoConvertFrameCallback" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#GstVideoConvertFrameCallback">
+<ANCHOR id="gst-video-convert-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame">
+<ANCHOR id="gst-video-convert-frame-async" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-convert-frame-async">
+<ANCHOR id="gst-video-event-new-still-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame">
+<ANCHOR id="gst-video-event-parse-still-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame">
+<ANCHOR id="gst-plugins-base-libs-gstvideofilter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideofilter.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#gst-plugins-base-libs-gstvideofilter.synopsis">
+<ANCHOR id="GstVideoFilter" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">
+<ANCHOR id="gst-plugins-base-libs-gstvideofilter.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#gst-plugins-base-libs-gstvideofilter.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstvideofilter.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#gst-plugins-base-libs-gstvideofilter.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideofilter.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#gst-plugins-base-libs-gstvideofilter.details">
+<ANCHOR id="GstVideoFilter-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct">
+<ANCHOR id="GstVideoFilterClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.synopsis" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.synopsis">
+<ANCHOR id="GstVideoSink" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSink">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.object-hierarchy" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.properties" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.properties">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.description" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.details">
+<ANCHOR id="GstVideoSink-struct" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct">
+<ANCHOR id="GstVideoSinkClass" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSinkClass">
+<ANCHOR id="GstVideoRectangle" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle">
+<ANCHOR id="GST-VIDEO-SINK-HEIGHT:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-HEIGHT:CAPS">
+<ANCHOR id="GST-VIDEO-SINK-PAD:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-PAD:CAPS">
+<ANCHOR id="GST-VIDEO-SINK-WIDTH:CAPS" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-WIDTH:CAPS">
+<ANCHOR id="gst-video-sink-center-rect" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-video-sink-center-rect">
+<ANCHOR id="gst-plugins-base-libs-gstvideosink.property-details" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.property-details">
+<ANCHOR id="GstVideoSink--show-preroll-frame" href="gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame">
+<ANCHOR id="annotation-glossterm-out" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-out">
+<ANCHOR id="annotation-glossterm-scope async" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-scope async">
+<ANCHOR id="annotation-glossterm-allow-none" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-closure" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-closure">
+<ANCHOR id="annotation-glossterm-transfer none" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-element-type" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-element-type">
+<ANCHOR id="annotation-glossterm-transfer full" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-type" href="gst-plugins-base-libs-0.11/annotation-glossary.html#annotation-glossterm-type">
diff --git a/docs/libs/html/left.png b/docs/libs/html/left.png
new file mode 100644
index 0000000..2d05b3d
--- /dev/null
+++ b/docs/libs/html/left.png
Binary files differ
diff --git a/docs/libs/html/right.png b/docs/libs/html/right.png
new file mode 100644
index 0000000..92832e3
--- /dev/null
+++ b/docs/libs/html/right.png
Binary files differ
diff --git a/docs/libs/html/style.css b/docs/libs/html/style.css
new file mode 100644
index 0000000..d6f6c26
--- /dev/null
+++ b/docs/libs/html/style.css
@@ -0,0 +1,266 @@
+.synopsis, .classsynopsis
+{
+  /* tango:aluminium 1/2 */
+  background: #eeeeec;
+  border: solid 1px #d3d7cf;
+  padding: 0.5em;
+}
+.programlisting
+{
+  /* tango:sky blue 0/1 */
+  background: #e6f3ff;
+  border: solid 1px #729fcf;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+    
+  }
+  /* this is needed so that the local anchors are displayed below the naviagtion */
+  div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+  {
+    display: inline-block;
+    position: relative;
+    top:-5em;
+  }
+  /* this seems to be a bug in the xsl style sheets when generating indexes */
+  div.index div.index
+  {
+    top: 0em;
+  }
+  /* make space for the fixed navigation bar and add space at the bottom so that
+   * link targets appear somewhat close to top
+   */
+  body
+  {
+    padding-top: 3.2em;
+    padding-bottom: 20em;
+  }
+  /* style and size the navigation bar */
+  table.navigation#top
+  {
+    position: fixed;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+    z-index: 10;
+  }
+  .navigation a, .navigation a:visited
+  {
+    /* tango:scarlet red 3 */
+    color: #a40000;
+  }
+  .navigation a:hover
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+  }
+  td.shortcuts
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+
+a, a:visited
+{
+  text-decoration: none;
+  /* tango:sky blue 2 */
+  color: #3465a4;
+}
+a:hover
+{
+  text-decoration: underline;
+  /* tango:sky blue 1 */
+  color: #729fcf;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  /* tango:aluminium 2 */
+  background-color: #d3d7cf;
+}
+
+hr
+{
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  background: #babdb6;
+  border: none 0px;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  text-align: center;
+  font-size: 80%;
+}
+
+.warning
+{
+  /* tango:orange 0/1 */
+  background: #ffeed9;
+  border-color: #ffb04f;
+}
+.note
+{
+  /* tango:chameleon 0/0.5 */
+  background: #d8ffb2;
+  border-color: #abf562;
+}
+.note, .warning
+{
+  padding: 0.5em;
+  border-width: 1px;
+  border-style: solid;
+}
+.note h3, .warning h3
+{
+  margin-top: 0.0em
+}
+.note p, .warning p
+{
+  margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+  float: right;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+.annotation
+{
+  /* tango:aluminium 5 */
+  color: #555753;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket   { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment    { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function   { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword    { color: #4e9a06; } /* tango: chameleon 3  */
+.listing_code .programlisting .linenum    { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal     { color: #000000; }
+.listing_code .programlisting .number     { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc    { color: #204a87; } /* tango: sky blue 3  */
+.listing_code .programlisting .string     { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type       { color: #000000; }
+.listing_code .programlisting .type a     { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol     { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+  /* tango:sky blue 1 */
+  border: solid 1px #729fcf;
+  padding: 0px;
+}
+
+.listing_lines, .listing_code {
+  margin-top: 0px;
+  margin-bottom: 0px;
+  padding: 0.5em;
+}
+.listing_lines {
+  /* tango:sky blue 0.5 */
+  background: #a6c5e3;
+  /* tango:aluminium 6 */
+  color: #2e3436;
+}
+.listing_code {
+  /* tango:sky blue 0 */
+  background: #e6f3ff;
+}
+.listing_code .programlisting {
+  /* override from previous */
+  border: none 0px;
+  padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+  margin: 0px;
+}
+
diff --git a/docs/libs/html/up.png b/docs/libs/html/up.png
new file mode 100644
index 0000000..85b3e2a
--- /dev/null
+++ b/docs/libs/html/up.png
Binary files differ
diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
new file mode 100644
index 0000000..60111f3
--- /dev/null
+++ b/docs/plugins/Makefile.am
@@ -0,0 +1,121 @@
+GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj
+
+## Process this file with automake to produce Makefile.in
+
+# The name of the module, e.g. 'glib'.
+#DOC_MODULE=gst-plugins-libs-@GST_MAJORMINOR@
+MODULE=gst-plugins-base
+DOC_MODULE=$(MODULE)-plugins
+
+# for upload-doc.mak
+DOC=$(MODULE)-plugins
+FORMATS=html
+html: html-build.stamp
+include $(top_srcdir)/common/upload-doc.mak
+
+# The top-level SGML file. Change it if you want.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code.
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR = $(top_srcdir)/gst $(top_srcdir)/ext $(top_srcdir)/sys
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS=--sgml-mode
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS=--extra-dir=$(top_builddir)/docs/libs/html \
+	--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(GST_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(datadir)/gtk-doc/html
+
+# Used for dependencies.
+HFILE_GLOB=$(top_srcdir)/gst/*/*.h $(top_srcdir)/ext/*/*.h $(top_srcdir)/sys/*/*.h
+CFILE_GLOB=$(top_srcdir)/gst/*/*.c $(top_srcdir)/ext/*/*.c $(top_srcdir)/sys/*/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = avcodec.h dsputil.h arch.h speex_resampler.h speex_resampler_wrapper.h fixed_arm4.h fixed_arm5e.h fixed_bfin.h fixed_debug.h fixed_generic.h resample_sse.h
+IGNORE_CFILES = utils.c mem.c imgconvert.c
+
+# we add all .h files of elements that have signals/args we want
+# sadly this also pulls in the private methods - maybe we should
+# move those around in the source ?
+# also, we should add some stuff here conditionally based on whether
+# or not the plugin will actually build
+# but I'm not sure about that - it might be this Just Works given that
+# the registry won't have the element
+
+EXTRA_HFILES = \
+	$(top_srcdir)/ext/alsa/gstalsamixerelement.h \
+	$(top_srcdir)/ext/alsa/gstalsasink.h \
+	$(top_srcdir)/ext/alsa/gstalsasrc.h \
+	$(top_srcdir)/ext/cdparanoia/gstcdparanoiasrc.h \
+	$(top_srcdir)/ext/gio/gstgiosink.h \
+	$(top_srcdir)/ext/gio/gstgiosrc.h \
+	$(top_srcdir)/ext/gio/gstgiostreamsink.h \
+	$(top_srcdir)/ext/gio/gstgiostreamsrc.h \
+	$(top_srcdir)/ext/ogg/gstoggdemux.h \
+	$(top_srcdir)/ext/ogg/gstoggmux.h \
+	$(top_srcdir)/ext/pango/gstclockoverlay.h \
+	$(top_srcdir)/ext/pango/gsttextoverlay.h \
+	$(top_srcdir)/ext/pango/gsttextrender.h \
+	$(top_srcdir)/ext/pango/gsttimeoverlay.h \
+	$(top_srcdir)/ext/theora/gsttheoradec.h \
+	$(top_srcdir)/ext/theora/gsttheoraenc.h \
+	$(top_srcdir)/ext/theora/gsttheoraparse.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisdec.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisenc.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisparse.h \
+	$(top_srcdir)/ext/vorbis/gstvorbistag.h \
+	$(top_srcdir)/gst/adder/gstadder.h \
+	$(top_srcdir)/gst/audioconvert/audioconvert.h \
+	$(top_srcdir)/gst/audioconvert/gstaudioconvert.h \
+	$(top_srcdir)/gst/audiotestsrc/gstaudiotestsrc.h \
+	$(top_srcdir)/gst/encoding/gstencodebin.h \
+	$(top_srcdir)/gst/gdp/gstgdpdepay.h \
+	$(top_srcdir)/gst/gdp/gstgdppay.h \
+	$(top_srcdir)/gst/playback/gstplay-enum.h \
+	$(top_srcdir)/gst/playback/gstsubtitleoverlay.h \
+	$(top_srcdir)/gst/audiorate/gstaudiorate.h \
+	$(top_srcdir)/gst/audioresample/gstaudioresample.h \
+	$(top_srcdir)/gst/tcp/gstmultifdsink.h \
+	$(top_srcdir)/gst/tcp/gsttcpclientsrc.h \
+	$(top_srcdir)/gst/tcp/gsttcpclientsink.h \
+	$(top_srcdir)/gst/tcp/gsttcpserversrc.h \
+	$(top_srcdir)/gst/tcp/gsttcpserversink.h \
+	$(top_builddir)/gst/tcp/gsttcp-enumtypes.h \
+	$(top_srcdir)/gst/tcp/gsttcp.h \
+	$(top_srcdir)/gst/videorate/gstvideorate.h \
+	$(top_srcdir)/gst/videoscale/gstvideoscale.h \
+	$(top_srcdir)/gst/videotestsrc/gstvideotestsrc.h \
+	$(top_srcdir)/gst/volume/gstvolume.h \
+	$(top_srcdir)/sys/ximage/ximagesink.h \
+	$(top_srcdir)/sys/xvimage/xvimagesink.h \
+	$(top_srcdir)/gst-libs/gst/app/gstappsrc.h \
+	$(top_srcdir)/gst-libs/gst/app/gstappsink.h
+
+# Images to copy into HTML directory.
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files =
+
+# Other files to distribute.
+extra_files =
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
+# contains GtkObjects/GObjects and you want to document signals and properties.
+GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs
+GTKDOC_LIBS = $(GST_BASE_LIBS)
+
+GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
+GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
+
+# If you need to override some of the declarations, place them in this file
+DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+
+include $(top_srcdir)/common/gtk-doc-plugins.mak
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
new file mode 100644
index 0000000..785309e
--- /dev/null
+++ b/docs/plugins/Makefile.in
@@ -0,0 +1,1127 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# this snippet is to be included by both our docbook manuals
+# and gtk-doc API references
+
+# it adds an upload target to each of these dir's Makefiles
+
+# each Makefile.am should define the following variables:
+# - DOC: the base name of the documentation
+#        (faq, manual, pwg, gstreamer, gstreamer-libs)
+# - FORMATS: the formats in which DOC is output
+#            (html ps pdf)
+
+# if you want to use it, make sure your $HOME/.ssh/config file contains the
+# correct User entry for the Host entry for the DOC_SERVER
+
+# This is an include file specifically tuned for building documentation
+# for GStreamer plug-ins
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gtk-doc-plugins.mak \
+	$(top_srcdir)/common/upload-doc.mak
+subdir = docs/plugins
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj
+
+# The name of the module, e.g. 'glib'.
+#DOC_MODULE=gst-plugins-libs-@GST_MAJORMINOR@
+MODULE = gst-plugins-base
+DOC_MODULE = $(MODULE)-plugins
+
+# for upload-doc.mak
+DOC = $(MODULE)-plugins
+FORMATS = html
+
+# these variables define the location of the online docs
+DOC_SERVER = gstreamer.freedesktop.org
+DOC_BASE = /srv/gstreamer.freedesktop.org/www/data/doc
+DOC_URL = $(DOC_SERVER):$(DOC_BASE)
+
+# The top-level SGML file. Change it if you want.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code.
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR = $(top_srcdir)/gst $(top_srcdir)/ext $(top_srcdir)/sys
+
+# Extra options to supply to gtkdoc-scan.
+SCAN_OPTIONS = 
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS = --sgml-mode
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS = --extra-dir=$(top_builddir)/docs/libs/html \
+	--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(GST_PREFIX)/share/gtk-doc/html \
+	--extra-dir=$(datadir)/gtk-doc/html
+
+
+# Used for dependencies.
+HFILE_GLOB = $(top_srcdir)/gst/*/*.h $(top_srcdir)/ext/*/*.h $(top_srcdir)/sys/*/*.h
+CFILE_GLOB = $(top_srcdir)/gst/*/*.c $(top_srcdir)/ext/*/*.c $(top_srcdir)/sys/*/*.c
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = avcodec.h dsputil.h arch.h speex_resampler.h speex_resampler_wrapper.h fixed_arm4.h fixed_arm5e.h fixed_bfin.h fixed_debug.h fixed_generic.h resample_sse.h
+IGNORE_CFILES = utils.c mem.c imgconvert.c
+
+# we add all .h files of elements that have signals/args we want
+# sadly this also pulls in the private methods - maybe we should
+# move those around in the source ?
+# also, we should add some stuff here conditionally based on whether
+# or not the plugin will actually build
+# but I'm not sure about that - it might be this Just Works given that
+# the registry won't have the element
+EXTRA_HFILES = \
+	$(top_srcdir)/ext/alsa/gstalsamixerelement.h \
+	$(top_srcdir)/ext/alsa/gstalsasink.h \
+	$(top_srcdir)/ext/alsa/gstalsasrc.h \
+	$(top_srcdir)/ext/cdparanoia/gstcdparanoiasrc.h \
+	$(top_srcdir)/ext/gio/gstgiosink.h \
+	$(top_srcdir)/ext/gio/gstgiosrc.h \
+	$(top_srcdir)/ext/gio/gstgiostreamsink.h \
+	$(top_srcdir)/ext/gio/gstgiostreamsrc.h \
+	$(top_srcdir)/ext/ogg/gstoggdemux.h \
+	$(top_srcdir)/ext/ogg/gstoggmux.h \
+	$(top_srcdir)/ext/pango/gstclockoverlay.h \
+	$(top_srcdir)/ext/pango/gsttextoverlay.h \
+	$(top_srcdir)/ext/pango/gsttextrender.h \
+	$(top_srcdir)/ext/pango/gsttimeoverlay.h \
+	$(top_srcdir)/ext/theora/gsttheoradec.h \
+	$(top_srcdir)/ext/theora/gsttheoraenc.h \
+	$(top_srcdir)/ext/theora/gsttheoraparse.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisdec.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisenc.h \
+	$(top_srcdir)/ext/vorbis/gstvorbisparse.h \
+	$(top_srcdir)/ext/vorbis/gstvorbistag.h \
+	$(top_srcdir)/gst/adder/gstadder.h \
+	$(top_srcdir)/gst/audioconvert/audioconvert.h \
+	$(top_srcdir)/gst/audioconvert/gstaudioconvert.h \
+	$(top_srcdir)/gst/audiotestsrc/gstaudiotestsrc.h \
+	$(top_srcdir)/gst/encoding/gstencodebin.h \
+	$(top_srcdir)/gst/gdp/gstgdpdepay.h \
+	$(top_srcdir)/gst/gdp/gstgdppay.h \
+	$(top_srcdir)/gst/playback/gstplay-enum.h \
+	$(top_srcdir)/gst/playback/gstsubtitleoverlay.h \
+	$(top_srcdir)/gst/audiorate/gstaudiorate.h \
+	$(top_srcdir)/gst/audioresample/gstaudioresample.h \
+	$(top_srcdir)/gst/tcp/gstmultifdsink.h \
+	$(top_srcdir)/gst/tcp/gsttcpclientsrc.h \
+	$(top_srcdir)/gst/tcp/gsttcpclientsink.h \
+	$(top_srcdir)/gst/tcp/gsttcpserversrc.h \
+	$(top_srcdir)/gst/tcp/gsttcpserversink.h \
+	$(top_builddir)/gst/tcp/gsttcp-enumtypes.h \
+	$(top_srcdir)/gst/tcp/gsttcp.h \
+	$(top_srcdir)/gst/videorate/gstvideorate.h \
+	$(top_srcdir)/gst/videoscale/gstvideoscale.h \
+	$(top_srcdir)/gst/videotestsrc/gstvideotestsrc.h \
+	$(top_srcdir)/gst/volume/gstvolume.h \
+	$(top_srcdir)/sys/ximage/ximagesink.h \
+	$(top_srcdir)/sys/xvimage/xvimagesink.h \
+	$(top_srcdir)/gst-libs/gst/app/gstappsrc.h \
+	$(top_srcdir)/gst-libs/gst/app/gstappsink.h
+
+
+# Images to copy into HTML directory.
+HTML_IMAGES = 
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files = 
+
+# Other files to distribute.
+extra_files = 
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
+# contains GtkObjects/GObjects and you want to document signals and properties.
+GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs
+GTKDOC_LIBS = $(GST_BASE_LIBS)
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC)
+
+# If you need to override some of the declarations, place them in this file
+DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+# thomas: make docs parallel installable
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@
+MAINTAINER_DOC_STAMPS = \
+	scanobj-build.stamp
+
+EXTRA_DIST = \
+	$(MAINTAINER_DOC_STAMPS)		\
+	$(srcdir)/inspect/*.xml		\
+	$(SCANOBJ_FILES)		\
+	$(content_files)		\
+	$(extra_files)			\
+	$(HTML_IMAGES)			\
+	$(DOC_MAIN_SGML_FILE)	\
+	$(DOC_OVERRIDES)		\
+	$(DOC_MODULE)-sections.txt
+
+
+# we don't add scanobj-build.stamp here since they are built manually by docs
+# maintainers and result is commited to git
+DOC_STAMPS = \
+	scan-build.stamp		\
+	tmpl-build.stamp		\
+	sgml-build.stamp		\
+	html-build.stamp		\
+	scan.stamp			\
+	tmpl.stamp			\
+	sgml.stamp			\
+	html.stamp
+
+
+# files generated/updated by gtkdoc-scangobj
+SCANOBJ_FILES = \
+	$(DOC_MODULE).args              \
+	$(DOC_MODULE).hierarchy         \
+	$(DOC_MODULE).interfaces        \
+	$(DOC_MODULE).prerequisites     \
+	$(DOC_MODULE).signals           \
+	$(DOC_MODULE).types
+
+SCANOBJ_FILES_O = \
+	.libs/$(DOC_MODULE)-scan.o
+
+
+# files generated/updated by gtkdoc-scan
+SCAN_FILES = \
+	$(DOC_MODULE)-sections.txt	\
+	$(DOC_MODULE)-overrides.txt	\
+	$(DOC_MODULE)-decl.txt		\
+	$(DOC_MODULE)-decl-list.txt
+
+REPORT_FILES = \
+	$(DOC_MODULE)-undocumented.txt \
+	$(DOC_MODULE)-undeclared.txt \
+	$(DOC_MODULE)-unused.txt
+
+CLEANFILES = \
+	$(SCANOBJ_FILES_O) \
+	$(REPORT_FILES) \
+	$(DOC_STAMPS) \
+	inspect-registry.xml
+
+INSPECT_DIR = inspect
+
+### inspect GStreamer plug-ins; done by documentation maintainer ###
+
+# only look at the plugins in this module when building inspect .xml stuff
+@ENABLE_GTK_DOC_TRUE@INSPECT_REGISTRY = $(top_builddir)/docs/plugins/inspect-registry.xml
+@ENABLE_GTK_DOC_TRUE@INSPECT_ENVIRONMENT = \
+@ENABLE_GTK_DOC_TRUE@	LC_ALL=C \
+@ENABLE_GTK_DOC_TRUE@	GST_PLUGIN_SYSTEM_PATH= \
+@ENABLE_GTK_DOC_TRUE@	GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(top_builddir)/plugins:$(top_builddir)/src:$(top_builddir)/gnl \
+@ENABLE_GTK_DOC_TRUE@	GST_REGISTRY=$(INSPECT_REGISTRY) \
+@ENABLE_GTK_DOC_TRUE@	PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@ENABLE_GTK_DOC_TRUE@	$(INSPECT_EXTRA_ENVIRONMENT)
+
+MAINTAINERCLEANFILES = $(MAINTAINER_DOC_STAMPS)
+
+# wildcard is apparently not portable to other makes, hence the use of find
+inspect_files = $(shell find $(srcdir)/$(INSPECT_DIR) -name '*.xml')
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/plugins/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu docs/plugins/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local dist-hook distclean \
+	distclean-generic distclean-libtool distclean-local distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-data-local install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-local
+
+html: html-build.stamp
+
+upload: $(FORMATS)
+	@if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Preparing docs for upload (rebasing cross-references) ..." ; \
+	  if test x$(builddir) != x$(srcdir); then \
+	    echo "make upload can only be used if srcdir == builddir"; \
+	    exit 1; \
+	  fi; \
+	  # gtkdoc-rebase sometimes gets confused, so reset everything to \
+	  # local links before rebasing to online links                   \
+	  gtkdoc-rebase --html-dir=$(builddir)/html 2>/dev/null 2>/dev/null ; \
+	  rebase=`gtkdoc-rebase --verbose --online --html-dir=$(builddir)/html` ; \
+	  echo "$$rebase" | grep -e "On-*line"; \
+	  for req in glib gobject gstreamer gstreamer-libs gst-plugins-base-libs; do \
+	    if ! ( echo "$$rebase" | grep -i -e "On-*line.*/$$req/" ); then \
+	      echo "===============================================================================" ; \
+	      echo " Could not determine online location for $$req docs. Cross-referencing will be " ; \
+	      echo " broken, so not uploading. Make sure the library's gtk-doc documentation is    " ; \
+	      echo " installed somewhere in /usr/share/gtk-doc.                                    " ; \
+	      echo "===============================================================================" ; \
+	      exit 1; \
+	    fi; \
+	  done; \
+	  export SRC="$$SRC html"; \
+	fi; \
+	if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
+	if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
+	\
+	# upload releases to both 0.10.X/ and head/ subdirectories \
+	if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
+	  export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
+	  echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	  rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	  ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	fi; \
+	\
+	export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
+	echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) mkdir -p $$DIR; \
+	rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+	ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
+	\
+	if echo $(FORMATS) | grep html > /dev/null; then \
+	  echo "Un-preparing docs for upload (rebasing cross-references) ..." ; \
+	  gtkdoc-rebase --html-dir=$(builddir)/html ; \
+	fi; \
+	echo Done
+
+help:
+	@echo
+	@echo "If you are a doc maintainer, run 'make update' to update"
+	@echo "the documentation files maintained in git"
+	@echo
+	@echo Other useful make targets:
+	@echo
+	@echo  check-inspected-versions: make sure the inspected plugin info
+	@echo                            is up to date before a release
+	@echo
+
+# update the stuff maintained by doc maintainers
+update:
+	$(MAKE) scanobj-update
+	$(MAKE) check-outdated-docs
+
+@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+
+#### scan gobjects; done by documentation maintainer ####
+@ENABLE_GTK_DOC_TRUE@scanobj-update:
+@ENABLE_GTK_DOC_TRUE@	-rm scanobj-build.stamp
+@ENABLE_GTK_DOC_TRUE@	$(MAKE) scanobj-build.stamp
+
+# gstdoc-scanobj produces 5 output files (.new)
+# scangobj-merge.py merges them into the file which we commit later
+# TODO: also merge the hierarchy
+@ENABLE_GTK_DOC_TRUE@scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles)
+@ENABLE_GTK_DOC_TRUE@	@echo "  DOC   Introspecting gobjects"
+@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
+@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+@ENABLE_GTK_DOC_TRUE@	    do								\
+@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+@ENABLE_GTK_DOC_TRUE@	    done;							\
+@ENABLE_GTK_DOC_TRUE@	fi;								\
+@ENABLE_GTK_DOC_TRUE@	mkdir -p $(INSPECT_DIR); \
+@ENABLE_GTK_DOC_TRUE@	scanobj_options=""; \
+@ENABLE_GTK_DOC_TRUE@	if test "x$(V)" = "x1"; then \
+@ENABLE_GTK_DOC_TRUE@	    scanobj_options="--verbose"; \
+@ENABLE_GTK_DOC_TRUE@	fi; \
+@ENABLE_GTK_DOC_TRUE@	$(INSPECT_ENVIRONMENT) 					\
+@ENABLE_GTK_DOC_TRUE@	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+@ENABLE_GTK_DOC_TRUE@	CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)"	\
+@ENABLE_GTK_DOC_TRUE@	LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
+@ENABLE_GTK_DOC_TRUE@	$(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)"	\
+@ENABLE_GTK_DOC_TRUE@	    --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) &&		\
+@ENABLE_GTK_DOC_TRUE@	    echo "  DOC   Merging introspection data" && \
+@ENABLE_GTK_DOC_TRUE@	    $(PYTHON)						\
+@ENABLE_GTK_DOC_TRUE@	    $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE);	\
+@ENABLE_GTK_DOC_TRUE@	if test x"$(srcdir)" != x. ; then				\
+@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES);					\
+@ENABLE_GTK_DOC_TRUE@	    do								\
+@ENABLE_GTK_DOC_TRUE@	        cmp -s ./$$f $(srcdir)/$$f || cp ./$$f $(srcdir)/ ;		\
+@ENABLE_GTK_DOC_TRUE@	    done;							\
+@ENABLE_GTK_DOC_TRUE@	fi;								\
+@ENABLE_GTK_DOC_TRUE@	touch scanobj-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(SCANOBJ_FILES_O): scan-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@true
+
+### scan headers; done on every build ###
+@ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(EXTRA_HFILES) $(basefiles) scanobj-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Scanning header files'
+@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
+@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+@ENABLE_GTK_DOC_TRUE@	    do								\
+@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+@ENABLE_GTK_DOC_TRUE@	    done;							\
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_TRUE@	@_source_dir='' ;						\
+@ENABLE_GTK_DOC_TRUE@	for i in $(DOC_SOURCE_DIR) ; do					\
+@ENABLE_GTK_DOC_TRUE@	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
+@ENABLE_GTK_DOC_TRUE@	done ;							        \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-scan							\
+@ENABLE_GTK_DOC_TRUE@	    $(SCAN_OPTIONS) $(EXTRA_HFILES)				\
+@ENABLE_GTK_DOC_TRUE@	    --module=$(DOC_MODULE)					\
+@ENABLE_GTK_DOC_TRUE@	    $${_source_dir}             				\
+@ENABLE_GTK_DOC_TRUE@	    --ignore-headers="$(IGNORE_HFILES)";			\
+@ENABLE_GTK_DOC_TRUE@	touch scan-build.stamp
+
+#### update templates; done on every build ####
+
+# in a non-srcdir build, we need to copy files from the previous step
+# and the files from previous runs of this step
+@ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Rebuilding template files'
+@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
+@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
+@ENABLE_GTK_DOC_TRUE@	    do								\
+@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
+@ENABLE_GTK_DOC_TRUE@	    done;							\
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mktmpl --module=$(DOC_MODULE)
+@ENABLE_GTK_DOC_TRUE@	@$(PYTHON) \
+@ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl
+@ENABLE_GTK_DOC_TRUE@	@touch tmpl-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@true
+
+#### xml ####
+
+@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building XML'
+@ENABLE_GTK_DOC_TRUE@	@-mkdir -p xml
+@ENABLE_GTK_DOC_TRUE@	@for a in $(srcdir)/$(INSPECT_DIR)/*.xml; do \
+@ENABLE_GTK_DOC_TRUE@	    xsltproc --stringparam module $(MODULE) \
+@ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/plugins.xsl $$a > xml/`basename $$a`; done
+@ENABLE_GTK_DOC_TRUE@	@for f in $(EXAMPLE_CFILES); do \
+@ENABLE_GTK_DOC_TRUE@		$(PYTHON) $(top_srcdir)/common/c-to-xml.py $$f > xml/element-`basename $$f .c`.xml; done
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mkdb \
+@ENABLE_GTK_DOC_TRUE@		--module=$(DOC_MODULE) \
+@ENABLE_GTK_DOC_TRUE@		--source-dir=$(DOC_SOURCE_DIR) \
+@ENABLE_GTK_DOC_TRUE@		 --expand-content-files="$(expand_content_files)" \
+@ENABLE_GTK_DOC_TRUE@		--main-sgml-file=$(srcdir)/$(DOC_MAIN_SGML_FILE) \
+@ENABLE_GTK_DOC_TRUE@		--output-format=xml \
+@ENABLE_GTK_DOC_TRUE@		--ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
+@ENABLE_GTK_DOC_TRUE@		$(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
+@ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
+@ENABLE_GTK_DOC_TRUE@	@true
+
+#### html ####
+
+@ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Building HTML'
+@ENABLE_GTK_DOC_TRUE@	@rm -rf html
+@ENABLE_GTK_DOC_TRUE@	@mkdir html
+@ENABLE_GTK_DOC_TRUE@	@cp $(srcdir)/$(DOC_MAIN_SGML_FILE) html
+@ENABLE_GTK_DOC_TRUE@	@for f in $(content_files); do cp $(srcdir)/$$f html; done
+@ENABLE_GTK_DOC_TRUE@	@cp -pr xml html
+@ENABLE_GTK_DOC_TRUE@	@cp ../version.entities html
+@ENABLE_GTK_DOC_TRUE@	@mkhtml_options=""; \
+@ENABLE_GTK_DOC_TRUE@	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+@ENABLE_GTK_DOC_TRUE@	if test "$(?)" = "0"; then \
+@ENABLE_GTK_DOC_TRUE@	  if test "x$(V)" = "x1"; then \
+@ENABLE_GTK_DOC_TRUE@	    mkhtml_options="$$mkhtml_options --verbose"; \
+@ENABLE_GTK_DOC_TRUE@	  fi; \
+@ENABLE_GTK_DOC_TRUE@	fi; \
+@ENABLE_GTK_DOC_TRUE@	cd html && gtkdoc-mkhtml $$mkhtml_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE)
+@ENABLE_GTK_DOC_TRUE@	@mv html/index.sgml html/index.sgml.bak
+@ENABLE_GTK_DOC_TRUE@	@$(SED) "s/ href=\"$(DOC_MODULE)\// href=\"$(DOC_MODULE)-@GST_MAJORMINOR@\//g" html/index.sgml.bak >html/index.sgml
+@ENABLE_GTK_DOC_TRUE@	@rm -f html/index.sgml.bak
+@ENABLE_GTK_DOC_TRUE@	@rm -f html/$(DOC_MAIN_SGML_FILE)
+@ENABLE_GTK_DOC_TRUE@	@rm -rf html/xml
+@ENABLE_GTK_DOC_TRUE@	@rm -f html/version.entities
+@ENABLE_GTK_DOC_TRUE@	@test "x$(HTML_IMAGES)" = "x" || for i in "" $(HTML_IMAGES) ; do \
+@ENABLE_GTK_DOC_TRUE@	    if test "$$i" != ""; then cp $(srcdir)/$$i html ; fi; done
+@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Fixing cross-references'
+@ENABLE_GTK_DOC_TRUE@	@gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@touch html-build.stamp
+
+@ENABLE_GTK_DOC_TRUE@clean-local-gtkdoc:
+@ENABLE_GTK_DOC_TRUE@	@rm -rf xml tmpl html
+# clean files copied for nonsrcdir templates build
+@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then \
+@ENABLE_GTK_DOC_TRUE@	    rm -rf $(SCANOBJ_FILES) $(SCAN_FILES) $(REPORT_FILES) \
+@ENABLE_GTK_DOC_TRUE@	        $(MAINTAINER_DOC_STAMPS); \
+@ENABLE_GTK_DOC_TRUE@	fi
+@ENABLE_GTK_DOC_FALSE@all-local:
+@ENABLE_GTK_DOC_FALSE@clean-local-gtkdoc:
+
+clean-local: clean-local-gtkdoc
+	@rm -f *~ *.bak
+	@rm -rf .libs
+
+distclean-local:
+	@rm -f $(REPORT_FILES) \
+	        $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+	@rm -rf tmpl/*.sgml.bak
+	@rm -f $(DOC_MODULE).hierarchy
+	@rm -f *.stamp || true
+	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+	    rm -f $(DOC_MODULE)-docs.sgml ; \
+	    rm -f $(DOC_MODULE).types ; \
+	    rm -f $(DOC_MODULE).interfaces ; \
+	    rm -f $(DOC_MODULE)-overrides.txt ; \
+	    rm -f $(DOC_MODULE).prerequisites ; \
+	    rm -f $(DOC_MODULE)-sections.txt ; \
+	    rm -rf tmpl/*.sgml ; \
+	    rm -rf $(INSPECT_DIR); \
+	fi
+	@rm -rf *.o
+
+# thomas: make docs parallel installable; devhelp requires majorminor too
+install-data-local:
+	(installfiles=`echo $(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css`; \
+	if test "$$installfiles" = '$(builddir)/html/*.sgml $(builddir)/html/*.html $(builddir)/html/*.png $(builddir)/html/*.css'; \
+	then echo '-- Nothing to install' ; \
+	else \
+	  $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+	  for i in $$installfiles; do \
+	    echo '-- Installing '$$i ; \
+	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	  done; \
+	  pngfiles=`echo ./html/*.png`; \
+	  if test "$$pngfiles" != './html/*.png'; then \
+	    for i in $$pngfiles; do \
+	      echo '-- Installing '$$i ; \
+	      $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+	    done; \
+	  fi; \
+	  echo '-- Installing $(builddir)/html/$(DOC_MODULE).devhelp2' ; \
+	  if test -e $(builddir)/html/$(DOC_MODULE).devhelp2; then \
+	            $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
+	            $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_MAJORMINOR@.devhelp2; \
+	  fi; \
+	  (which gtkdoc-rebase >/dev/null && \
+	    gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+	fi)
+uninstall-local:
+	if test -d $(DESTDIR)$(TARGET_DIR); then \
+	  rm -rf $(DESTDIR)$(TARGET_DIR)/*; \
+	  rmdir -p $(DESTDIR)$(TARGET_DIR) 2>/dev/null || true; \
+	else \
+	  echo '-- Nothing to uninstall' ; \
+	fi;
+
+#
+# Checks
+#
+@ENABLE_GTK_DOC_TRUE@check-hierarchy: $(DOC_MODULE).hierarchy
+@ENABLE_GTK_DOC_TRUE@	@if grep '	' $(DOC_MODULE).hierarchy; then \
+@ENABLE_GTK_DOC_TRUE@	    echo "$(DOC_MODULE).hierarchy contains tabs, please fix"; \
+@ENABLE_GTK_DOC_TRUE@	    /bin/false; \
+@ENABLE_GTK_DOC_TRUE@	fi
+
+@ENABLE_GTK_DOC_TRUE@check: check-hierarchy
+
+check-inspected-versions:
+	@echo Checking plugin versions of inspected plugin data ...; \
+	fail=0 ; \
+	for each in $(inspect_files) ; do \
+	  if (grep -H '<version>' $$each | grep -v '<version>$(VERSION)'); then \
+	    echo $$each should be fixed to say version $(VERSION) or be removed ; \
+	    echo "sed -i -e 's/<version.*version>/<version>$(VERSION)<\/version>/'" $$each; \
+	    echo ; \
+	    fail=1; \
+	  fi ; \
+	done ; \
+	exit $$fail
+
+check-outdated-docs:
+	$(AM_V_GEN)echo Checking for outdated plugin inspect data ...; \
+	fail=0 ; \
+	if [ -d $(top_srcdir)/.git/ ]; then \
+	  files=`find $(srcdir)/inspect/ -name '*xml'`; \
+	  for f in $$files; do \
+	    ver=`grep '<version>$(PACKAGE_VERSION)</version>' $$f`; \
+	    if test "x$$ver" = "x"; then \
+	      plugin=`echo $$f | sed -e 's/^.*plugin-//' -e 's/.xml//'`; \
+	      # echo "Checking $$plugin $$f"; \
+	      pushd "$(top_srcdir)" >/dev/null; \
+	      pinit=`git grep -A3 GST_PLUGIN_DEFINE -- ext/ gst/ sys/ | grep "\"$$plugin\""`; \
+	      popd >/dev/null; \
+	      # echo "[$$pinit]"; \
+	      if test "x$$pinit" = "x"; then \
+	        printf " **** outdated docs for plugin %-15s: %s\n" $$plugin $$f; \
+	        fail=1; \
+	      fi; \
+	    fi; \
+	  done; \
+	fi ; \
+	exit $$fail
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@	@echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@	@false
+
+# FIXME: decide whether we want to dist generated html or not
+# also this only works, if the project has been build before
+# we could dist html only if its there, but that might lead to missing html in
+# tarballs
+dist-hook: dist-check-gtkdoc dist-hook-local
+	mkdir $(distdir)/html
+	cp html/* $(distdir)/html
+	-cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+	-cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+	cd $(distdir) && rm -f $(DISTCLEANFILES)
+	-gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs check-outdated-docs inspect
+
+# avoid spurious build errors when distchecking with -jN
+.NOTPARALLEL:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/plugins/gst-plugins-base-plugins-docs.sgml b/docs/plugins/gst-plugins-base-plugins-docs.sgml
new file mode 100644
index 0000000..e121096
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins-docs.sgml
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY % version-entities SYSTEM "version.entities">
+%version-entities;
+]>
+
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+  <bookinfo>
+    <title>GStreamer Base Plugins &GST_MAJORMINOR; Plugins Reference Manual</title>
+    <releaseinfo>
+      for GStreamer Base Plugins &GST_MAJORMINOR; (&GST_VERSION;)
+      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/</ulink>.
+    </releaseinfo>
+  </bookinfo>
+
+  <chapter>
+    <title>gst-plugins-base Elements</title>
+    <xi:include href="xml/element-adder.xml" />
+    <xi:include href="xml/element-appsrc.xml" />
+    <xi:include href="xml/element-appsink.xml" />
+    <xi:include href="xml/element-alsamixer.xml" />
+    <xi:include href="xml/element-alsasink.xml" />
+    <xi:include href="xml/element-alsasrc.xml" />
+    <xi:include href="xml/element-audioconvert.xml" />
+    <xi:include href="xml/element-audiorate.xml" />
+    <xi:include href="xml/element-audioresample.xml" />
+    <xi:include href="xml/element-audiotestsrc.xml" />
+    <xi:include href="xml/element-cdparanoiasrc.xml" />
+    <xi:include href="xml/element-clockoverlay.xml" />
+    <xi:include href="xml/element-decodebin.xml" />
+    <xi:include href="xml/element-decodebin2.xml" />
+    <xi:include href="xml/element-encodebin.xml" />
+    <xi:include href="xml/element-videoconvert.xml" />
+    <xi:include href="xml/element-gdpdepay.xml" />
+    <xi:include href="xml/element-gdppay.xml" />
+    <xi:include href="xml/element-giosink.xml" />
+    <xi:include href="xml/element-giosrc.xml" />
+    <xi:include href="xml/element-giostreamsink.xml" />
+    <xi:include href="xml/element-giostreamsrc.xml" />
+    <xi:include href="xml/element-multifdsink.xml" />
+    <xi:include href="xml/element-oggdemux.xml" />
+    <xi:include href="xml/element-oggmux.xml" />
+    <xi:include href="xml/element-playbin.xml" />
+    <xi:include href="xml/element-playbin2.xml" />
+    <xi:include href="xml/element-subtitleoverlay.xml" />
+    <xi:include href="xml/element-tcpclientsrc.xml" />
+    <xi:include href="xml/element-tcpclientsink.xml" />
+    <xi:include href="xml/element-tcpserversrc.xml" />
+    <xi:include href="xml/element-tcpserversink.xml" />
+    <xi:include href="xml/element-textoverlay.xml" />
+    <xi:include href="xml/element-textrender.xml" />
+    <xi:include href="xml/element-theoradec.xml" />
+    <xi:include href="xml/element-theoraenc.xml" />
+    <xi:include href="xml/element-theoraparse.xml" />
+    <xi:include href="xml/element-timeoverlay.xml" />
+    <xi:include href="xml/element-uridecodebin.xml" />
+    <xi:include href="xml/element-videorate.xml" />
+    <xi:include href="xml/element-videoscale.xml" />
+    <xi:include href="xml/element-videotestsrc.xml" />
+    <xi:include href="xml/element-volume.xml" />
+    <xi:include href="xml/element-vorbisdec.xml" />
+    <xi:include href="xml/element-vorbisenc.xml" />
+    <xi:include href="xml/element-vorbisparse.xml" />
+    <xi:include href="xml/element-vorbistag.xml" />
+    <xi:include href="xml/element-ximagesink.xml" />
+    <xi:include href="xml/element-xvimagesink.xml" />
+  </chapter>
+
+  <chapter>
+    <title>gst-plugins-base Plugins</title>
+    <xi:include href="xml/plugin-adder.xml" />
+    <xi:include href="xml/plugin-alsa.xml" />
+    <xi:include href="xml/plugin-app.xml" />
+    <xi:include href="xml/plugin-audioconvert.xml" />
+    <xi:include href="xml/plugin-audiorate.xml" />
+    <xi:include href="xml/plugin-audioresample.xml" />
+    <xi:include href="xml/plugin-audiotestsrc.xml" />
+    <xi:include href="xml/plugin-cdparanoia.xml" />
+    <xi:include href="xml/plugin-decodebin.xml" />
+    <xi:include href="xml/plugin-encoding.xml" />
+    <xi:include href="xml/plugin-videoconvert.xml" />
+    <xi:include href="xml/plugin-gdp.xml" />
+    <xi:include href="xml/plugin-gio.xml" />
+    <xi:include href="xml/plugin-libvisual.xml" />
+    <xi:include href="xml/plugin-ogg.xml" />
+    <xi:include href="xml/plugin-pango.xml" />
+    <xi:include href="xml/plugin-playback.xml" />
+    <xi:include href="xml/plugin-subparse.xml" />
+    <xi:include href="xml/plugin-tcp.xml" />
+    <xi:include href="xml/plugin-theora.xml" />
+    <xi:include href="xml/plugin-typefindfunctions.xml" />
+    <xi:include href="xml/plugin-uridecodebin.xml" />
+    <xi:include href="xml/plugin-videorate.xml" />
+    <xi:include href="xml/plugin-videoscale.xml" />
+    <xi:include href="xml/plugin-videotestsrc.xml" />
+    <xi:include href="xml/plugin-volume.xml" />
+    <xi:include href="xml/plugin-vorbis.xml" />
+    <xi:include href="xml/plugin-ximagesink.xml" />
+    <xi:include href="xml/plugin-xvimagesink.xml" />
+  </chapter>
+
+  <chapter>
+    <title>gst-plugins-base Classes</title>
+    <xi:include href="xml/gstplaybasebin.xml" />
+  </chapter>
+</book>
+
diff --git a/docs/plugins/gst-plugins-base-plugins-overrides.txt b/docs/plugins/gst-plugins-base-plugins-overrides.txt
new file mode 100644
index 0000000..57b5802
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins-overrides.txt
@@ -0,0 +1,30 @@
+<STRUCT>
+<NAME>GstDecodeBin</NAME>
+struct _GstDecodeBin {
+};
+</STRUCT>
+<STRUCT>
+<NAME>GstDecodeBin2</NAME>
+struct _GstDecodeBin2 {
+};
+</STRUCT>
+<STRUCT>
+<NAME>GstPlayBaseBin</NAME>
+struct _GstPlayBaseBin {
+};
+</STRUCT>
+<STRUCT>
+<NAME>GstPlayBin</NAME>
+struct _GstPlayBin {
+};
+</STRUCT>
+<STRUCT>
+<NAME>GstPlayBin2</NAME>
+struct _GstPlayBin2 {
+};
+</STRUCT>
+<STRUCT>
+<NAME>GstURIDecodeBin</NAME>
+struct _GstURIDecodeBin {
+};
+</STRUCT>
diff --git a/docs/plugins/gst-plugins-base-plugins-sections.txt b/docs/plugins/gst-plugins-base-plugins-sections.txt
new file mode 100644
index 0000000..b9fde4d
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins-sections.txt
@@ -0,0 +1,791 @@
+<SECTION>
+<FILE>element-adder</FILE>
+<TITLE>adder</TITLE>
+GstAdder
+<SUBSECTION Standard>
+GST_ADDER
+GST_IS_ADDER
+GST_TYPE_ADDER
+GST_ADDER_CLASS
+GST_IS_ADDER_CLASS
+GST_ADDER_GET_CLASS
+gst_adder_get_type
+GstAdderClass
+GstAdderFormat
+GstAdderFunction
+GstAdderInputChannel
+</SECTION>
+
+<SECTION>
+<FILE>element-appsrc</FILE>
+<TITLE>appsrc</TITLE>
+GstAppSrc
+<SUBSECTION Standard>
+gst_app_src_set_caps
+gst_app_src_get_caps
+gst_app_src_set_size
+gst_app_src_get_size
+gst_app_src_set_stream_type
+gst_app_src_get_stream_type
+gst_app_src_set_max_bytes
+gst_app_src_get_max_bytes
+gst_app_src_set_latency
+gst_app_src_get_latency
+gst_app_src_set_emit_signals
+gst_app_src_get_emit_signals
+gst_app_src_push_buffer
+gst_app_src_end_of_stream
+GstAppSrcCallbacks
+gst_app_src_set_callbacks
+
+GstAppSrcClass
+GstAppSrcPrivate
+GstAppStreamType
+GST_APP_SRC
+GST_IS_APP_SRC
+GST_TYPE_APP_SRC
+gst_app_src_get_type
+GST_APP_SRC_CLASS
+GST_IS_APP_SRC_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-appsink</FILE>
+<TITLE>appsink</TITLE>
+GstAppSink
+<SUBSECTION Standard>
+gst_app_sink_set_caps
+gst_app_sink_get_caps
+gst_app_sink_is_eos
+gst_app_sink_set_emit_signals
+gst_app_sink_get_emit_signals
+gst_app_sink_set_max_buffers
+gst_app_sink_get_max_buffers
+gst_app_sink_set_drop
+gst_app_sink_get_drop
+gst_app_sink_pull_preroll
+gst_app_sink_pull_buffer
+gst_app_sink_set_callbacks
+GstAppSinkClass
+GstAppSinkPrivate
+GstAppSinkCallbacks
+GST_APP_SINK
+GST_IS_APP_SINK
+GST_TYPE_APP_SINK
+gst_app_sink_get_type
+GST_APP_SINK_CLASS
+GST_IS_APP_SINK_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-alsamixer</FILE>
+<TITLE>alsamixer</TITLE>
+GstAlsaMixerElement
+<SUBSECTION Standard>
+GstAlsaMixerElementClass
+GST_ALSA_MIXER_ELEMENT
+GST_IS_ALSA_MIXER_ELEMENT
+GST_TYPE_ALSA_MIXER_ELEMENT
+gst_alsa_mixer_element_get_type
+GST_ALSA_MIXER_ELEMENT_CLASS
+GST_IS_ALSA_MIXER_ELEMENT_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-alsasink</FILE>
+<TITLE>alsasink</TITLE>
+GstAlsaSink
+<SUBSECTION Standard>
+GstAlsaSinkClass
+GST_ALSA_SINK
+GST_ALSA_SINK_CAST
+GST_IS_ALSA_SINK
+GST_TYPE_ALSA_SINK
+GST_ALSA_SINK_CLASS
+GST_IS_ALSA_SINK_CLASS
+GST_ALSA_SINK_GET_LOCK
+GST_ALSA_SINK_LOCK
+GST_ALSA_SINK_UNLOCK
+gst_alsasink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-alsasrc</FILE>
+<TITLE>alsasrc</TITLE>
+GstAlsaSrc
+<SUBSECTION Standard>
+GstAlsaSrcClass
+GST_ALSA_SRC
+GST_IS_ALSA_SRC
+GST_TYPE_ALSA_SRC
+GST_ALSA_SRC_CLASS
+GST_IS_ALSA_SRC_CLASS
+GST_ALSA_SRC_CAST
+GST_ALSA_SRC_GET_LOCK
+GST_ALSA_SRC_LOCK
+GST_ALSA_SRC_UNLOCK
+gst_alsasrc_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-audioconvert</FILE>
+<TITLE>audioconvert</TITLE>
+GstAudioConvert
+GstAudioConvertDithering
+GstAudioConvertNoiseShaping
+<SUBSECTION Standard>
+GST_AUDIO_CONVERT
+GST_AUDIO_CONVERT_CLASS
+GST_IS_AUDIO_CONVERT
+GST_IS_AUDIO_CONVERT_CLASS
+GST_TYPE_AUDIO_CONVERT
+GstAudioConvertClass
+AudioConvertCtx
+AudioConvertFmt
+AudioConvertMix
+AudioConvertPack
+AudioConvertQuantize
+AudioConvertUnpack
+audio_convert_clean_context
+audio_convert_clean_fmt
+audio_convert_convert
+audio_convert_get_sizes
+audio_convert_prepare_context
+</SECTION>
+
+<SECTION>
+<FILE>element-audiorate</FILE>
+<TITLE>audiorate</TITLE>
+GstAudioRate
+<SUBSECTION Standard>
+GST_AUDIO_RATE
+GST_IS_AUDIO_RATE
+GST_TYPE_AUDIO_RATE
+gst_audio_rate_get_type
+GST_AUDIO_RATE_CLASS
+GST_IS_AUDIO_RATE_CLASS
+GstAudioRateClass
+</SECTION>
+
+<SECTION>
+<FILE>element-audioresample</FILE>
+<TITLE>audioresample</TITLE>
+GstAudioResample
+<SUBSECTION Standard>
+GST_AUDIO_RESAMPLE
+GST_IS_AUDIO_RESAMPLE
+GST_TYPE_AUDIO_RESAMPLE
+gst_audio_resample_get_type
+GST_AUDIO_RESAMPLE_CLASS
+GST_IS_AUDIO_RESAMPLE_CLASS
+GstAudioResampleClass
+</SECTION>
+
+<SECTION>
+<FILE>element-audiotestsrc</FILE>
+<TITLE>audiotestsrc</TITLE>
+GstAudioTestSrc
+GstAudioTestSrcWave
+<SUBSECTION Standard>
+GST_AUDIO_TEST_SRC
+GST_AUDIO_TEST_SRC_CLASS
+GST_IS_AUDIO_TEST_SRC
+GST_IS_AUDIO_TEST_SRC_CLASS
+GST_TYPE_AUDIO_TEST_SRC
+GstAudioTestSrcClass
+GstAudioTestSrcFormat
+gst_audio_test_src_get_type
+GstPinkNoise
+PINK_MAX_RANDOM_ROWS
+PINK_RANDOM_BITS
+PINK_RANDOM_SHIFT
+ProcessFunc
+</SECTION>
+
+<SECTION>
+<FILE>element-cdparanoiasrc</FILE>
+<TITLE>cdparanoiasrc</TITLE>
+GstCdParanoiaSrc
+<SUBSECTION Standard>
+GstCdParanoiaSrcClass
+GST_CD_PARANOIA_SRC
+GST_CD_PARANOIA_SRC_CLASS
+GST_CD_PARANOIA_SRC_GET_CLASS
+GST_IS_CD_PARANOIA_SRC
+GST_IS_CD_PARANOIA_SRC_CLASS
+GST_TYPE_CD_PARANOIA_SRC
+gst_cd_paranoia_src_get_type
+size16
+size32
+</SECTION>
+
+<SECTION>
+<FILE>element-clockoverlay</FILE>
+<TITLE>clockoverlay</TITLE>
+GstClockOverlay
+<SUBSECTION Standard>
+GST_CLOCK_OVERLAY
+GST_CLOCK_OVERLAY_CLASS
+GST_IS_CLOCK_OVERLAY
+GST_IS_CLOCK_OVERLAY_CLASS
+GST_TYPE_CLOCK_OVERLAY
+GstClockOverlayClass
+gst_clock_overlay_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-decodebin</FILE>
+<TITLE>decodebin</TITLE>
+GstDecodeBin
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>element-decodebin</FILE>
+<TITLE>decodebin</TITLE>
+GstDecodeBin
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>element-encodebin</FILE>
+<TITLE>encodebin</TITLE>
+GstEncodeBin
+<SUBSECTION Standard>
+GST_ENCODE_BIN
+GST_ENCODE_BIN_CLASS
+GST_IS_ENCODE_BIN
+GST_IS_ENCODE_BIN_CLASS
+GST_TYPE_ENCODE_BIN
+GstEncodeBinClass
+gst_encode_bin_get_type
+</SECTION>
+
+
+
+<SECTION>
+<FILE>element-videoconvert</FILE>
+<TITLE>videoconvert</TITLE>
+GstVideoConvert
+<SUBSECTION Standard>
+GST_VIDEO_CONVERT
+GST_VIDEO_CONVERT_CLASS
+GST_IS_VIDEO_CONVERT_
+GST_IS_VIDEO_CONVERT_CLASS
+GST_TYPE_VIDEO_CONVERT_
+GstVideoConvertClass
+</SECTION>
+
+<SECTION>
+<FILE>element-gdpdepay</FILE>
+<TITLE>gdpdepay</TITLE>
+GstGDPDepay
+<SUBSECTION Standard>
+GstGDPDepayClass
+GstGDPDepayState
+GST_GDP_DEPAY
+GST_GDP_DEPAY_CLASS
+GST_IS_GDP_DEPAY
+GST_IS_GDP_DEPAY_CLASS
+GST_TYPE_GDP_DEPAY
+gst_gdp_depay_plugin_init
+</SECTION>
+
+<SECTION>
+<FILE>element-gdppay</FILE>
+<TITLE>gdppay</TITLE>
+GstGDPPay
+<SUBSECTION Standard>
+GstGDPPayClass
+GST_GDP_PAY
+GST_GDP_PAY_CLASS
+GST_IS_GDP_PAY
+GST_IS_GDP_PAY_CLASS
+GST_TYPE_GDP_PAY
+gst_gdp_pay_plugin_init
+</SECTION>
+
+<SECTION>
+<FILE>element-giosink</FILE>
+<TITLE>giosink</TITLE>
+GstGioSink
+<SUBSECTION Standard>
+GstGioSinkClass
+GST_GIO_SINK
+GST_GIO_SINK_CLASS
+GST_IS_GIO_SINK
+GST_IS_GIO_SINK_CLASS
+GST_TYPE_GIO_SINK
+gst_gio_sink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-giosrc</FILE>
+<TITLE>giosrc</TITLE>
+GstGioSrc
+<SUBSECTION Standard>
+GstGioSrcClass
+GST_GIO_SRC
+GST_GIO_SRC_CLASS
+GST_IS_GIO_SRC
+GST_IS_GIO_SRC_CLASS
+GST_TYPE_GIO_SRC
+gst_gio_src_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-giostreamsink</FILE>
+<TITLE>giostreamsink</TITLE>
+GstGioStreamSink
+<SUBSECTION Standard>
+GstGioStreamSinkClass
+GST_GIO_STREAM_SINK
+GST_GIO_STREAM_SINK_CLASS
+GST_IS_GIO_STREAM_SINK
+GST_IS_GIO_STREAM_SINK_CLASS
+GST_TYPE_GIO_STREAM_SINK
+gst_gio_stream_sink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-giostreamsrc</FILE>
+<TITLE>giostreamsrc</TITLE>
+GstGioStreamSrc
+<SUBSECTION Standard>
+GstGioStreamSrcClass
+GST_GIO_STREAM_SRC
+GST_GIO_STREAM_SRC_CLASS
+GST_IS_GIO_STREAM_SRC
+GST_IS_GIO_STREAM_SRC_CLASS
+GST_TYPE_GIO_STREAM_SRC
+gst_gio_stream_src_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-multifdsink</FILE>
+<TITLE>multifdsink</TITLE>
+GstMultiFdSink
+GstRecoverPolicy
+GstSyncMethod
+GstClientStatus
+GstTCPProtocol
+GstTCPUnitType
+<SUBSECTION Standard>
+CLIENTS_LOCK
+CLIENTS_LOCK_FREE
+CLIENTS_LOCK_INIT
+CLIENTS_UNLOCK
+GST_TYPE_MULTI_FD_SINK
+GST_IS_MULTI_FD_SINK
+GST_IS_MULTI_FD_SINK_CLASS
+GST_MULTI_FD_SINK
+GST_MULTI_FD_SINK_CLASS
+GST_MULTI_FD_SINK_GET_CLASS
+GstTCPClient
+GstMultiFdSinkFlags
+GstMultiFdSinkClass
+gst_multi_fd_sink_add
+gst_multi_fd_sink_add_full
+gst_multi_fd_sink_clear
+gst_multi_fd_sink_get_stats
+gst_multi_fd_sink_get_type
+gst_multi_fd_sink_remove
+gst_multi_fd_sink_remove_flush
+GST_TYPE_TCP_PROTOCOL
+gst_tcp_protocol_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-oggdemux</FILE>
+<TITLE>oggdemux</TITLE>
+GstOggDemux
+<SUBSECTION Standard>
+GST_OGG_DEMUX
+GST_OGG_DEMUX_CLASS
+GST_IS_OGG_DEMUX
+GST_IS_OGG_DEMUX_CLASS
+GST_TYPE_OGG_DEMUX
+GstOggDemuxClass
+GST_IS_OGG_PAD
+GST_IS_OGG_PAD_CLASS
+GST_OGG_PAD
+GST_OGG_PAD_CLASS
+GST_TYPE_OGG_PAD
+GstOggChain
+GstOggPad
+GstOggPadClass
+GstOggPadMode
+GstOggPadState
+</SECTION>
+
+<SECTION>
+<FILE>element-oggmux</FILE>
+<TITLE>oggmux</TITLE>
+GstOggMux
+<SUBSECTION Standard>
+gst_ogg_mux_get_type
+GST_OGG_MUX
+GST_OGG_MUX_CLASS
+GST_IS_OGG_MUX
+GST_IS_OGG_MUX_CLASS
+GST_TYPE_OGG_MUX
+GstOggMuxClass
+</SECTION>
+
+<SECTION>
+<FILE>element-playbin</FILE>
+<TITLE>playbin</TITLE>
+GstPlayBin
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
+<FILE>element-playbin</FILE>
+<TITLE>playbin</TITLE>
+GstPlayBin
+GstPlayFlags
+<SUBSECTION Standard>
+gst_play_flags_get_type
+GST_TYPE_PLAY_FLAGS
+</SECTION>
+
+<SECTION>
+<FILE>element-subtitleoverlay</FILE>
+<TITLE>subtitleoverlay</TITLE>
+GstSubtitleOverlay
+<SUBSECTION Standard>
+GstSubtitleOverlayClass
+
+GST_IS_SUBTITLE_OVERLAY
+GST_IS_SUBTITLE_OVERLAY_CLASS
+GST_SUBTITLE_OVERLAY
+GST_SUBTITLE_OVERLAY_CAST
+GST_SUBTITLE_OVERLAY_CLASS
+GST_SUBTITLE_OVERLAY_LOCK
+GST_SUBTITLE_OVERLAY_UNLOCK
+GST_TYPE_SUBTITLE_OVERLAY
+gst_subtitle_overlay_plugin_init
+gst_subtitle_overlay_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-tcpclientsrc</FILE>
+<TITLE>tcpclientsrc</TITLE>
+GstTCPClientSrc
+<SUBSECTION Standard>
+GstTCPClientSrcClass
+GST_TCP_CLIENT_SRC
+GST_TCP_CLIENT_SINK_CLASS
+GstTCPClientSrcFlags
+GST_TYPE_TCP_CLIENT_SRC
+gst_tcp_client_src_get_type
+GST_IS_TCP_CLIENT_SRC_CLASS
+GST_IS_TCP_CLIENT_SRC
+</SECTION>
+
+<SECTION>
+<FILE>element-tcpclientsink</FILE>
+<TITLE>tcpclientsink</TITLE>
+GstTCPClientSink
+<SUBSECTION Standard>
+GstTCPClientSinkClass
+GST_TCP_CLIENT_SINK
+GST_TCP_CLIENT_SRC_CLASS
+GstTCPClientSinkFlags
+GST_TYPE_TCP_CLIENT_SINK
+gst_tcp_client_sink_get_type
+GST_IS_TCP_CLIENT_SINK_CLASS
+GST_IS_TCP_CLIENT_SINK
+</SECTION>
+
+<SECTION>
+<FILE>element-tcpserversrc</FILE>
+<TITLE>tcpserversrc</TITLE>
+GstTCPServerSrc
+<SUBSECTION Standard>
+GstTCPServerSrcClass
+GST_TCP_SERVER_SRC
+GST_TCP_SERVER_SRC_CLASS
+GstTCPServerSrcFlags
+GST_TYPE_TCP_SERVER_SRC
+gst_tcp_server_src_get_type
+GST_IS_TCP_SERVER_SRC_CLASS
+GST_IS_TCP_SERVER_SRC
+</SECTION>
+
+<SECTION>
+<FILE>element-tcpserversink</FILE>
+<TITLE>tcpserversink</TITLE>
+GstTCPServerSink
+<SUBSECTION Standard>
+GstTCPServerSinkClass
+GST_TCP_SERVER_SINK
+GST_TCP_SERVER_SINK_CLASS
+GstTCPServerSinkFlags
+GST_TYPE_TCP_SERVER_SINK
+gst_tcp_server_sink_get_type
+GST_IS_TCP_SERVER_SINK_CLASS
+GST_IS_TCP_SERVER_SINK
+TCP_DEFAULT_HOST
+TCP_DEFAULT_PORT
+TCP_HIGHEST_PORT
+gst_tcp_gdp_read_buffer
+gst_tcp_gdp_read_caps
+gst_tcp_gdp_read_event
+gst_tcp_gdp_write_buffer
+gst_tcp_gdp_write_caps
+gst_tcp_gdp_write_event
+gst_tcp_host_to_ip
+gst_tcp_read_buffer
+gst_tcp_socket_close
+gst_tcp_socket_write
+</SECTION>
+
+<SECTION>
+<FILE>element-textoverlay</FILE>
+<TITLE>textoverlay</TITLE>
+GstTextOverlay
+GstTextOverlayVAlign
+GstTextOverlayHAlign
+GstTextOverlayWrapMode
+<SUBSECTION Standard>
+GST_TEXT_OVERLAY
+GST_TEXT_OVERLAY_CLASS
+GST_TEXT_OVERLAY_GET_CLASS
+GST_IS_TEXT_OVERLAY
+GST_IS_TEXT_OVERLAY_CLASS
+GST_TYPE_TEXT_OVERLAY
+GstTextOverlayClass
+gst_text_overlay_get_type
+GstTextOverlayLineAlign
+</SECTION>
+
+<SECTION>
+<FILE>element-textrender</FILE>
+<TITLE>textrender</TITLE>
+GstTextRender
+<SUBSECTION Standard>
+GST_TEXT_RENDER
+GST_TEXT_RENDER_CLASS
+GST_TEXT_RENDER_GET_CLASS
+GST_IS_TEXT_RENDER
+GST_IS_TEXT_RENDER_CLASS
+GST_TYPE_TEXT_RENDER
+GstTextRenderClass
+gst_text_render_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-theoradec</FILE>
+<TITLE>theoradec</TITLE>
+GstTheoraDec
+<SUBSECTION Standard>
+GST_THEORA_DEC
+GST_IS_THEORA_DEC
+GST_TYPE_THEORA_DEC
+GST_THEORA_DEC_CLASS
+GST_IS_THEORA_DEC_CLASS
+GstTheoraDecClass
+</SECTION>
+
+<SECTION>
+<FILE>element-theoraenc</FILE>
+<TITLE>theoraenc</TITLE>
+GstTheoraEnc
+GstTheoraEncBorderMode
+<SUBSECTION Standard>
+GST_THEORA_ENC
+GST_THEORA_ENC_CLASS
+GST_IS_THEORA_ENC
+GST_IS_THEORA_ENC_CLASS
+GST_TYPE_THEORA_ENC
+GstTheoraEncClass
+</SECTION>
+
+<SECTION>
+<FILE>element-theoraparse</FILE>
+<TITLE>theoraparse</TITLE>
+GstTheoraParse
+<SUBSECTION Standard>
+GstTheoraParseClass
+GST_THEORA_PARSE
+GST_IS_THEORA_PARSE
+GST_TYPE_THEORA_PARSE
+gst_theora_parse_get_type
+GST_THEORA_PARSE_CLASS
+GST_IS_THEORA_PARSE_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-timeoverlay</FILE>
+<TITLE>timeoverlay</TITLE>
+GstTimeOverlay
+<SUBSECTION Standard>
+GST_TIME_OVERLAY
+GST_TIME_OVERLAY_CLASS
+GST_IS_TIME_OVERLAY
+GST_IS_TIME_OVERLAY_CLASS
+GST_TYPE_TIME_OVERLAY
+GstTimeOverlayClass
+gst_time_overlay_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-uridecodebin</FILE>
+<TITLE>uridecodebin</TITLE>
+GstURIDecodeBin
+GstAutoplugSelectResult
+<SUBSECTION Standard>
+GST_TYPE_AUTOPLUG_SELECT_RESULT
+gst_autoplug_select_result_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-videorate</FILE>
+<TITLE>videorate</TITLE>
+GstVideoRate
+<SUBSECTION Standard>
+GstVideoRateClass
+GST_VIDEO_RATE
+GST_IS_VIDEO_RATE
+GST_TYPE_VIDEO_RATE
+GST_VIDEO_RATE_CLASS
+GST_IS_VIDEO_RATE_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-videoscale</FILE>
+<TITLE>videoscale</TITLE>
+GstVideoScale
+GstVideoScaleMethod
+<SUBSECTION Standard>
+GstVideoScaleClass
+GST_CAT_DEFAULT
+GST_VIDEO_SCALE
+GST_IS_VIDEO_SCALE
+GST_TYPE_VIDEO_SCALE
+gst_video_scale_get_type
+GST_VIDEO_SCALE_CLASS
+GST_IS_VIDEO_SCALE_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-videotestsrc</FILE>
+<TITLE>videotestsrc</TITLE>
+GstVideoTestSrc
+GstVideoTestSrcPattern
+GstVideoTestSrcColorSpec
+<SUBSECTION Standard>
+GST_VIDEO_TEST_SRC
+GST_VIDEO_TEST_SRC_CLASS
+GST_IS_VIDEO_TEST_SRC
+GST_IS_VIDEO_TEST_SRC_CLASS
+GST_TYPE_VIDEO_TEST_SRC
+GstVideoTestSrcClass
+gst_video_test_src_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-volume</FILE>
+<TITLE>volume</TITLE>
+GstVolume
+<SUBSECTION Standard>
+GST_VOLUME
+GST_VOLUME_CLASS
+GST_IS_VOLUME
+GST_IS_VOLUME_CLASS
+GST_TYPE_VOLUME
+GstVolumeClass
+gst_volume_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-vorbisdec</FILE>
+<TITLE>vorbisdec</TITLE>
+GstVorbisDec
+<SUBSECTION Standard>
+GstVorbisDecClass
+GST_VORBIS_DEC
+GST_IS_VORBIS_DEC
+GST_TYPE_VORBIS_DEC
+gst_vorbis_dec_get_type
+GST_VORBIS_DEC_CLASS
+GST_IS_VORBIS_DEC_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-vorbisenc</FILE>
+<TITLE>vorbisenc</TITLE>
+GstVorbisEnc
+<SUBSECTION Standard>
+GstVorbisEncClass
+GST_IS_VORBISENC
+GST_VORBISENC_CLASS
+GST_VORBISENC
+GST_TYPE_VORBISENC
+GST_IS_VORBISENC_CLASS
+gst_vorbis_enc_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-vorbisparse</FILE>
+<TITLE>vorbisparse</TITLE>
+GstVorbisParse
+<SUBSECTION Standard>
+GstVorbisParseClass
+GST_VORBIS_PARSE
+GST_IS_VORBIS_PARSE
+GST_TYPE_VORBIS_PARSE
+gst_vorbis_parse_get_type
+GST_VORBIS_PARSE_CLASS
+GST_IS_VORBIS_PARSE_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-vorbistag</FILE>
+<TITLE>vorbistag</TITLE>
+GstVorbisTag
+<SUBSECTION Standard>
+GstVorbisTagClass
+GST_VORBIS_TAG
+GST_IS_VORBIS_TAG
+GST_TYPE_VORBIS_TAG
+gst_vorbis_tag_get_type
+GST_VORBIS_TAG_CLASS
+GST_IS_VORBIS_TAG_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>element-ximagesink</FILE>
+<TITLE>ximagesink</TITLE>
+GstXImageSink
+<SUBSECTION Standard>
+GST_XIMAGESINK
+GST_XIMAGESINK_CLASS
+GST_IS_XIMAGESINK
+GST_IS_XIMAGESINK_CLASS
+GST_TYPE_XIMAGESINK
+gst_ximagesink_get_type
+GstXImageBuffer
+GstXImageBufferClass
+GstXImageSinkClass
+GstXContext
+GstXWindow
+</SECTION>
+
+<SECTION>
+<FILE>element-xvimagesink</FILE>
+<TITLE>xvimagesink</TITLE>
+GstXvImageSink
+<SUBSECTION Standard>
+GST_XVIMAGESINK
+GST_XVIMAGESINK_CLASS
+GST_IS_XVIMAGESINK
+GST_IS_XVIMAGESINK_CLASS
+GST_TYPE_XVIMAGESINK
+gst_xvimagesink_get_type
+GstXvImageBuffer
+GstXvImageBufferClass
+GstXvImageFormat
+GstXvImageSinkClass
+</SECTION>
diff --git a/docs/plugins/gst-plugins-base-plugins.args b/docs/plugins/gst-plugins-base-plugins.args
new file mode 100644
index 0000000..ffb6e3f
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.args
@@ -0,0 +1,3510 @@
+<ARG>
+<NAME>GstXvImageSink::brightness</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1000,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Brightness</NICK>
+<BLURB>The brightness of the video.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::contrast</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1000,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Contrast</NICK>
+<BLURB>The contrast of the video.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::display</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Display</NICK>
+<BLURB>X Display name.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::hue</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1000,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Hue</NICK>
+<BLURB>The hue of the video.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::pixel-aspect-ratio</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Pixel Aspect Ratio</NICK>
+<BLURB>The pixel aspect ratio of the device.</BLURB>
+<DEFAULT>"1/1"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::saturation</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1000,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Saturation</NICK>
+<BLURB>The saturation of the video.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::synchronous</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Synchronous</NICK>
+<BLURB>When enabled, runs the X display in synchronous mode. (used only for debugging).</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::force-aspect-ratio</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Force aspect ratio</NICK>
+<BLURB>When enabled, scaling will respect original aspect ratio.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::device</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Adaptor number</NICK>
+<BLURB>The number of the video adaptor.</BLURB>
+<DEFAULT>"0"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::device-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Adaptor name</NICK>
+<BLURB>The name of the video adaptor.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::handle-events</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Handle XEvents</NICK>
+<BLURB>When enabled, XEvents will be selected and handled.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::double-buffer</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Double-buffer</NICK>
+<BLURB>Whether to double-buffer the output.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::handle-expose</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Handle expose</NICK>
+<BLURB>When enabled, the current frame will always be drawn in response to X Expose events.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::autopaint-colorkey</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Autofill with colorkey</NICK>
+<BLURB>Whether to autofill overlay with colorkey.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::colorkey</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Colorkey</NICK>
+<BLURB>Color to use for the overlay mask.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::draw-borders</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Colorkey</NICK>
+<BLURB>Draw black borders to fill unused area in force-aspect-ratio mode.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::window-height</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>window-height</NICK>
+<BLURB>Height of the window.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXvImageSink::window-width</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>window-width</NICK>
+<BLURB>Width of the window.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::display</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Display</NICK>
+<BLURB>X Display name.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::pixel-aspect-ratio</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Pixel Aspect Ratio</NICK>
+<BLURB>The pixel aspect ratio of the device.</BLURB>
+<DEFAULT>"1/1"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::synchronous</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Synchronous</NICK>
+<BLURB>When enabled, runs the X display in synchronous mode. (used only for debugging).</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::force-aspect-ratio</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Force aspect ratio</NICK>
+<BLURB>When enabled, reverse caps negotiation (scaling) will respect original aspect ratio.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::handle-events</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Handle XEvents</NICK>
+<BLURB>When enabled, XEvents will be selected and handled.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::handle-expose</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Handle expose</NICK>
+<BLURB>When enabled, the current frame will always be drawn in response to X Expose events.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::window-height</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>window-height</NICK>
+<BLURB>Height of the window.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstXImageSink::window-width</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>window-width</NICK>
+<BLURB>Width of the window.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstV4lSrc::autoprobe</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Autoprobe</NICK>
+<BLURB>Whether the device should be probed for all possible features.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstV4lSrc::autoprobe-fps</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Autoprobe FPS</NICK>
+<BLURB>Whether the device should be probed for framerates.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstV4lSrc::copy-mode</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Copy mode</NICK>
+<BLURB>Whether to send out copies of buffers, or direct pointers to the mmap region.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstV4lSrc::timestamp-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Timestamp offset</NICK>
+<BLURB>A time offset subtracted from timestamps set on buffers (in ns).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioresample::filter-length</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>filter length</NICK>
+<BLURB>Length of the resample filter.</BLURB>
+<DEFAULT>16</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVolume::mute</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mute</NICK>
+<BLURB>mute channel.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVolume::volume</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume</NICK>
+<BLURB>volume factor, 1.0=100%.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::pattern</NAME>
+<TYPE>GstVideoTestSrcPattern</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Pattern</NICK>
+<BLURB>Type of test pattern to generate.</BLURB>
+<DEFAULT>SMPTE 100% color bars</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::timestamp-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Timestamp offset</NICK>
+<BLURB>An offset added to timestamps set on buffers (in ns).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::is-live</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Is Live</NICK>
+<BLURB>Whether to act as a live source.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::peer-alloc</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Peer Alloc</NICK>
+<BLURB>Ask the peer to allocate an output buffer.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::colorspec</NAME>
+<TYPE>GstVideoTestSrcColorSpec</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Color Specification</NICK>
+<BLURB>Generate video in the given color specification (Deprecated: use a caps filter with video/x-raw-yuv,color-matrix="sdtv" or "hdtv" instead).</BLURB>
+<DEFAULT>ITU-R Rec. BT.601</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::k0</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate zero order phase</NICK>
+<BLURB>Zoneplate zero order phase, for generating plain fields or phase offsets.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kt</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 1st order t phase</NICK>
+<BLURB>Zoneplate 1st order t phase, for generating phase rotation as a function of time.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kt2</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 2nd order t phase</NICK>
+<BLURB>Zoneplate 2nd order t phase, t*t/256 cycles per picture.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kx</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 1st order x phase</NICK>
+<BLURB>Zoneplate 1st order x phase, for generating constant horizontal frequencies.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kx2</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 2nd order x phase</NICK>
+<BLURB>Zoneplate 2nd order x phase, normalised to kx2/256 cycles per horizontal pixel at width/2 from origin.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kxt</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate x*t product phase</NICK>
+<BLURB>Zoneplate x*t product phase, normalised to kxy/256 cycles per vertical pixel at width/2 from origin.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kxy</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate x*y product phase</NICK>
+<BLURB>Zoneplate x*y product phase.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::ky</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 1st order y phase</NICK>
+<BLURB>Zoneplate 1st order y phase, for generating contant vertical frequencies.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::ky2</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 2nd order y phase</NICK>
+<BLURB>Zoneplate 2nd order y phase, normailsed to ky2/256 cycles per vertical pixel at height/2 from origin.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::kyt</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate y*t product phase</NICK>
+<BLURB>Zoneplate y*t product phase.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::xoffset</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 2nd order products x offset</NICK>
+<BLURB>Zoneplate 2nd order products x offset.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::yoffset</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Zoneplate 2nd order products y offset</NICK>
+<BLURB>Zoneplate 2nd order products y offset.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::background-color</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Background Color</NICK>
+<BLURB>Background color to use (big-endian ARGB).</BLURB>
+<DEFAULT>4278190080</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::foreground-color</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Foreground Color</NICK>
+<BLURB>Foreground color to use (big-endian ARGB).</BLURB>
+<DEFAULT>4294967295</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoTestSrc::horizontal-speed</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Horizontal Speed</NICK>
+<BLURB>Scroll image number of pixels per frame (positive is scroll to the left).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoscale::method</NAME>
+<TYPE>GstVideoscaleMethod</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>method</NICK>
+<BLURB>method.</BLURB>
+<DEFAULT>Nearest Neighbour</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::drop</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Drop</NICK>
+<BLURB>Number of dropped frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::duplicate</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Duplicate</NICK>
+<BLURB>Number of duplicated frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::in</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>In</NICK>
+<BLURB>Number of input frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::new-pref</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>New Pref</NICK>
+<BLURB>Value indicating how much to prefer new frames.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::out</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Out</NICK>
+<BLURB>Number of output frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideorate::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>silent</NICK>
+<BLURB>Don't emit notify for dropped and duplicated frames.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSink::host</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Host</NICK>
+<BLURB>The host/IP to send the packets to.</BLURB>
+<DEFAULT>"localhost"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSink::port</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,65535]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Port</NICK>
+<BLURB>The port to send the packets to.</BLURB>
+<DEFAULT>4953</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSink::protocol</NAME>
+<TYPE>GstTCPProtocol</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Protocol</NICK>
+<BLURB>The protocol to wrap data in.</BLURB>
+<DEFAULT>GST_TCP_PROTOCOL_NONE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSrc::host</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Host</NICK>
+<BLURB>The host IP address to receive packets from.</BLURB>
+<DEFAULT>"localhost"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSrc::port</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,65535]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Port</NICK>
+<BLURB>The port to receive packets from.</BLURB>
+<DEFAULT>4953</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPClientSrc::protocol</NAME>
+<TYPE>GstTCPProtocol</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Protocol</NICK>
+<BLURB>The protocol to wrap data in.</BLURB>
+<DEFAULT>GST_TCP_PROTOCOL_NONE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPServerSink::host</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>host</NICK>
+<BLURB>The host/IP to send the packets to.</BLURB>
+<DEFAULT>"localhost"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPServerSink::port</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,65535]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>port</NICK>
+<BLURB>The port to send the packets to.</BLURB>
+<DEFAULT>4953</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPServerSrc::host</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Host</NICK>
+<BLURB>The hostname to listen as.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPServerSrc::port</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,65535]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Port</NICK>
+<BLURB>The port to listen to.</BLURB>
+<DEFAULT>4953</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTCPServerSrc::protocol</NAME>
+<TYPE>GstTCPProtocol</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Protocol</NICK>
+<BLURB>The protocol to wrap data in.</BLURB>
+<DEFAULT>GST_TCP_PROTOCOL_NONE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::buffers-max</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffers max</NICK>
+<BLURB>max number of buffers to queue for a client (-1 = no limit).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::buffers-queued</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Buffers queued</NICK>
+<BLURB>Number of buffers currently queued.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::buffers-soft-max</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffers soft max</NICK>
+<BLURB>Recover client when going over this limit (-1 = no limit).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::bytes-served</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Bytes served</NICK>
+<BLURB>Total number of bytes send to all clients.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::bytes-to-serve</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Bytes to serve</NICK>
+<BLURB>Number of bytes received to serve to clients.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::mode</NAME>
+<TYPE>GstFDSetMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mode</NICK>
+<BLURB>The mode for selecting activity on the fds (deprecated).</BLURB>
+<DEFAULT>Poll</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::protocol</NAME>
+<TYPE>GstTCPProtocol</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Protocol</NICK>
+<BLURB>The protocol to wrap data in. GDP protocol here is deprecated. Please use gdppay element.</BLURB>
+<DEFAULT>GST_TCP_PROTOCOL_NONE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::recover-policy</NAME>
+<TYPE>GstRecoverPolicy</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Recover Policy</NICK>
+<BLURB>How to recover when client reaches the soft max.</BLURB>
+<DEFAULT>Do not try to recover</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::sync-clients</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sync clients</NICK>
+<BLURB>(DEPRECATED) Sync clients to a keyframe.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::sync-method</NAME>
+<TYPE>GstSyncMethod</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sync Method</NICK>
+<BLURB>How to sync new clients to the stream.</BLURB>
+<DEFAULT>Serve starting from the latest buffer</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::timeout</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Timeout</NICK>
+<BLURB>Maximum inactivity timeout in nanoseconds for a client (0 = no limit).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::buffers-min</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffers min</NICK>
+<BLURB>min number of buffers to queue (-1 = as few as possible).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::burst-unit</NAME>
+<TYPE>GstTCPUnitType</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Burst unit</NICK>
+<BLURB>The format of the burst units (when sync-method is burst[[-with]-keyframe]).</BLURB>
+<DEFAULT>Undefined</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::burst-value</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Burst value</NICK>
+<BLURB>The amount of burst expressed in burst-unit.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::bytes-min</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Bytes min</NICK>
+<BLURB>min number of bytes to queue (-1 = as little as possible).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::time-min</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Time min</NICK>
+<BLURB>min number of time to queue (-1 = as little as possible).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::unit-type</NAME>
+<TYPE>GstTCPUnitType</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Units type</NICK>
+<BLURB>The unit to measure the max/soft-max/queued properties.</BLURB>
+<DEFAULT>Buffers</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::units-max</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Units max</NICK>
+<BLURB>max number of units to queue (-1 = no limit).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::units-soft-max</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Units soft max</NICK>
+<BLURB>Recover client when going over this limit (-1 = no limit).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::qos-dscp</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,63]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>QoS diff srv code point</NICK>
+<BLURB>Quality of Service, differentiated services code point (-1 default).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::handle-read</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Handle Read</NICK>
+<BLURB>Handle client reads and discard the data.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::resend-streamheader</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Resend streamheader</NICK>
+<BLURB>Resend the streamheader if it changes in the caps.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiFdSink::num-fds</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Number of fds</NICK>
+<BLURB>The current number of client file descriptors.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin::threaded</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Threaded</NICK>
+<BLURB>Use threads.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin::sink-caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sink Caps</NICK>
+<BLURB>The caps of the input data. (NULL = use typefind element).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::audio-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Audio Sink</NICK>
+<BLURB>the audio output element to use (NULL = default sink).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::frame</NAME>
+<TYPE>GstBuffer*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Frame</NICK>
+<BLURB>The last frame (NULL = no video available).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::subtitle-font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>Subtitle font description</NICK>
+<BLURB>Pango font description of font to be used for subtitle rendering.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::video-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Video Sink</NICK>
+<BLURB>the video output element to use (NULL = default sink).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::vis-plugin</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Vis plugin</NICK>
+<BLURB>the visualization element to use (NULL = none).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::volume</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>volume</NICK>
+<BLURB>volume.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::connection-speed</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Connection Speed</NICK>
+<BLURB>Network connection speed in kbps (0 = unknown).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudiorate::add</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Add</NICK>
+<BLURB>Number of added samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudiorate::drop</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Drop</NICK>
+<BLURB>Number of dropped samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudiorate::in</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>In</NICK>
+<BLURB>Number of input samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudiorate::out</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Out</NICK>
+<BLURB>Number of output samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudiorate::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>silent</NICK>
+<BLURB>Don't emit notify for dropped and duplicated frames.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,250001]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Target Bitrate</NICK>
+<BLURB>Attempt to encode at a bitrate averaging this (in bps). This uses the bitrate management engine, and is not recommended for most users. Quality is a better alternative. (-1 == disabled).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::last-message</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>last-message</NICK>
+<BLURB>The last status message.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::managed</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Managed</NICK>
+<BLURB>Enable bitrate management engine.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::max-bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,250001]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum Bitrate</NICK>
+<BLURB>Specify a maximum bitrate (in bps). Useful for streaming applications. (-1 == disabled).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::min-bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,250001]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Minimum Bitrate</NICK>
+<BLURB>Specify a minimum bitrate (in bps). Useful for encoding for a fixed-size channel. (-1 == disabled).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVorbisEnc::quality</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[-0.1,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Quality</NICK>
+<BLURB>Specify quality instead of specifying a particular bitrate.</BLURB>
+<DEFAULT>0.3</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraDec::crop</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Crop</NICK>
+<BLURB>Crop the image to the visible region.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::bitrate</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,16777215]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Bitrate</NICK>
+<BLURB>Compressed video bitrate (kbps).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::border</NAME>
+<TYPE>GstTheoraEncBorderMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Border</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>Black Border</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::center</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Center</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::keyframe-auto</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Keyframe Auto</NICK>
+<BLURB>Automatic keyframe detection.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::keyframe-force</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[1,32768]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Keyframe force</NICK>
+<BLURB>Force keyframe every N frames.</BLURB>
+<DEFAULT>64</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::keyframe-freq</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[1,32768]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Keyframe frequency</NICK>
+<BLURB>Keyframe frequency.</BLURB>
+<DEFAULT>64</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::keyframe-mindistance</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[1,32768]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Keyframe mindistance</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>8</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::keyframe-threshold</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,32768]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Keyframe threshold</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>80</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::noise-sensitivity</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,32768]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Noise sensitivity</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::quality</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,63]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Quality</NICK>
+<BLURB>Video quality.</BLURB>
+<DEFAULT>48</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::quick</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Quick</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::sharpness</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sharpness</NICK>
+<BLURB>ignored and kept for API compat only.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::speed-level</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,2]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Speed level</NICK>
+<BLURB>Controls the amount of analysis performed when encoding. Higher values trade compression quality for speed. This property requires libtheora version >= 1.0, and the maximum value may vary based on encoder version.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::cap-overflow</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>VP3 Compatible</NICK>
+<BLURB>Enable capping of bit reservoir overflows.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::cap-underflow</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>VP3 Compatible</NICK>
+<BLURB>Enable capping of bit reservoir underflows.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::drop-frames</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>VP3 Compatible</NICK>
+<BLURB>Allow or disallow frame dropping.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::rate-buffer</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Rate Control Buffer</NICK>
+<BLURB>Sets the size of the rate control buffer, in units of frames.  The default value of 0 instructs the encoder to automatically select an appropriate value.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::vp3-compatible</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>VP3 Compatible</NICK>
+<BLURB>Disables non-VP3 compatible features.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::multipass-cache-file</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Multipass Cache File</NICK>
+<BLURB>Multipass cache file.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraEnc::multipass-mode</NAME>
+<TYPE>GstTheoraEncMultipassMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Multipass mode</NICK>
+<BLURB>Single pass or first/second pass.</BLURB>
+<DEFAULT>Single pass</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::handle</NAME>
+<TYPE>GnomeVFSHandle*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>GnomeVFSHandle</NICK>
+<BLURB>Handle for GnomeVFS.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::iradio-genre</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>iradio-genre</NICK>
+<BLURB>Genre of the stream.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::iradio-mode</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>iradio-mode</NICK>
+<BLURB>Enable internet radio mode (extraction of shoutcast/icecast metadata).</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::iradio-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>iradio-name</NICK>
+<BLURB>Name of the stream.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::iradio-title</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>iradio-title</NICK>
+<BLURB>Name of currently playing song.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::iradio-url</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>iradio-url</NICK>
+<BLURB>Homepage URL for radio stream.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::location</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>File Location</NICK>
+<BLURB>Location of the file to read.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSrc::random-access</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>random-mode</NICK>
+<BLURB>Enable random file access.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstOggMux::max-delay</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max delay</NICK>
+<BLURB>Maximum delay in multiplexing streams.</BLURB>
+<DEFAULT>500000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstOggMux::max-page-delay</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max page delay</NICK>
+<BLURB>Maximum delay for sending out a page.</BLURB>
+<DEFAULT>500000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSrc::device</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Device</NICK>
+<BLURB>ALSA device, as defined in an asound configuration file.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSrc::device-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Device name</NICK>
+<BLURB>Human-readable name of the sound device.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSrc::card-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Card name</NICK>
+<BLURB>Human-readable name of the sound card.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSink::device</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Device</NICK>
+<BLURB>ALSA device, as defined in an asound configuration file.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSink::device-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Device name</NICK>
+<BLURB>Human-readable name of the sound device.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaSink::card-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Card name</NICK>
+<BLURB>Human-readable name of the sound card.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::freq</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,20000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Frequency</NICK>
+<BLURB>Frequency of test signal.</BLURB>
+<DEFAULT>440</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::is-live</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Is Live</NICK>
+<BLURB>Whether to act as a live source.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::samplesperbuffer</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Samples per buffer</NICK>
+<BLURB>Number of samples in each outgoing buffer.</BLURB>
+<DEFAULT>1024</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::timestamp-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Timestamp offset</NICK>
+<BLURB>An offset added to timestamps set on buffers (in ns).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::volume</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume</NICK>
+<BLURB>Volume of test signal.</BLURB>
+<DEFAULT>0.8</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::wave</NAME>
+<TYPE>GstAudioTestSrcWave</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Waveform</NICK>
+<BLURB>Oscillator waveform.</BLURB>
+<DEFAULT>Sine</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::can-activate-pull</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Can activate pull</NICK>
+<BLURB>Can activate in pull mode.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioTestSrc::can-activate-push</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Can activate push</NICK>
+<BLURB>Can activate in push mode.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoScale::method</NAME>
+<TYPE>GstVideoScaleMethod</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>method</NICK>
+<BLURB>method.</BLURB>
+<DEFAULT>Bilinear</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoScale::add-borders</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Add Borders</NICK>
+<BLURB>Add black borders if necessary to keep the display aspect ratio.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::drop</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Drop</NICK>
+<BLURB>Number of dropped frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::duplicate</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Duplicate</NICK>
+<BLURB>Number of duplicated frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::in</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>In</NICK>
+<BLURB>Number of input frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::new-pref</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>New Pref</NICK>
+<BLURB>Value indicating how much to prefer new frames (unused).</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::out</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Out</NICK>
+<BLURB>Number of output frames.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>silent</NICK>
+<BLURB>Don't emit notify for dropped and duplicated frames.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::skip-to-first</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Skip to first buffer</NICK>
+<BLURB>Don't produce buffers before the first one we receive.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::average-period</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXINT64</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Period over which to average</NICK>
+<BLURB>Period over which to average the framerate (in ns) (0 = disabled).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoRate::drop-only</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Only Drop</NICK>
+<BLURB>Only drop frames, no duplicates are produced.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::add</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Add</NICK>
+<BLURB>Number of added samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::drop</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Drop</NICK>
+<BLURB>Number of dropped samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::in</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>In</NICK>
+<BLURB>Number of input samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::out</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Out</NICK>
+<BLURB>Number of output samples.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>silent</NICK>
+<BLURB>Don't emit notify for dropped and duplicated frames.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::tolerance</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>tolerance</NICK>
+<BLURB>Only act if timestamp jitter/imperfection exceeds indicated tolerance (ns).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioRate::skip-to-first</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Skip to first buffer</NICK>
+<BLURB>Don't produce buffers before the first one we receive.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>font description</NICK>
+<BLURB>Pango font description of font to be used for rendering. See documentation of pango_font_description_from_string for syntax.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::halignment</NAME>
+<TYPE>GstTextRenderHAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>horizontal alignment</NICK>
+<BLURB>Horizontal alignment of the text.</BLURB>
+<DEFAULT>center</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::line-alignment</NAME>
+<TYPE>GstTextRenderLineAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>line alignment</NICK>
+<BLURB>Alignment of text lines relative to each other.</BLURB>
+<DEFAULT>center</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::valignment</NAME>
+<TYPE>GstTextRenderVAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical alignment</NICK>
+<BLURB>Vertical alignment of the text.</BLURB>
+<DEFAULT>baseline</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::xpad</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>horizontal paddding</NICK>
+<BLURB>Horizontal paddding when using left/right alignment.</BLURB>
+<DEFAULT>25</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextRender::ypad</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical padding</NICK>
+<BLURB>Vertical padding when using top/bottom alignment.</BLURB>
+<DEFAULT>25</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::deltax</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>X position modifier</NICK>
+<BLURB>Shift X position to the left or to the right. Unit is pixels.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::deltay</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Y position modifier</NICK>
+<BLURB>Shift Y position up or down. Unit is pixels.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>font description</NICK>
+<BLURB>Pango font description of font to be used for rendering. See documentation of pango_font_description_from_string for syntax.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::halign</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>horizontal alignment</NICK>
+<BLURB>Horizontal alignment of the text (deprecated; use halignment).</BLURB>
+<DEFAULT>"center"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::shaded-background</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>shaded background</NICK>
+<BLURB>Whether to shade the background under the text area.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::text</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>text</NICK>
+<BLURB>Text to be display.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::valign</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>vertical alignment</NICK>
+<BLURB>Vertical alignment of the text (deprecated; use valignment).</BLURB>
+<DEFAULT>"baseline"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::wrap-mode</NAME>
+<TYPE>GstTextOverlayWrapMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>wrap mode</NICK>
+<BLURB>Whether to wrap the text and if so how.</BLURB>
+<DEFAULT>wordchar</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::xpad</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>horizontal paddding</NICK>
+<BLURB>Horizontal paddding when using left/right alignment.</BLURB>
+<DEFAULT>25</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::ypad</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical padding</NICK>
+<BLURB>Vertical padding when using top/bottom alignment.</BLURB>
+<DEFAULT>25</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::halignment</NAME>
+<TYPE>GstTextOverlayHAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>horizontal alignment</NICK>
+<BLURB>Horizontal alignment of the text.</BLURB>
+<DEFAULT>center</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::valignment</NAME>
+<TYPE>GstTextOverlayVAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical alignment</NICK>
+<BLURB>Vertical alignment of the text.</BLURB>
+<DEFAULT>baseline</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::line-alignment</NAME>
+<TYPE>GstTextOverlayLineAlign</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>line alignment</NICK>
+<BLURB>Alignment of text lines relative to each other.</BLURB>
+<DEFAULT>center</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>silent</NICK>
+<BLURB>Whether to render the text string.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::wait-text</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Wait Text</NICK>
+<BLURB>Whether to wait for subtitles.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::auto-resize</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>auto resize</NICK>
+<BLURB>Automatically adjust font size to screen-size.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::vertical-render</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical render</NICK>
+<BLURB>Vertical Render.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::color</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Color</NICK>
+<BLURB>Color to use for text (big-endian ARGB).</BLURB>
+<DEFAULT>4294967295</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::xpos</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>horizontal position</NICK>
+<BLURB>Horizontal position when using position alignment.</BLURB>
+<DEFAULT>0.5</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTextOverlay::ypos</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>vertical position</NICK>
+<BLURB>Vertical position when using position alignment.</BLURB>
+<DEFAULT>0.5</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::abort-on-skip</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Abort on skip</NICK>
+<BLURB>Abort on imperfect reads/skips.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::default-sectors</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,100]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Default sectors</NICK>
+<BLURB>Force default number of sectors in read to n sectors.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::device</NAME>
+<TYPE>gchararray</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Device</NICK>
+<BLURB>CD device location.</BLURB>
+<DEFAULT>"/dev/cdrom"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::discid</NAME>
+<TYPE>gchararray</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>discid</NICK>
+<BLURB>The dics id.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::endian</NAME>
+<TYPE>GstParanoiaEndian</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Endian</NICK>
+<BLURB>Force endian on drive.</BLURB>
+<DEFAULT>treat drive as little endian</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::generic-device</NAME>
+<TYPE>gchararray</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Generic device</NICK>
+<BLURB>Use specified generic scsi device.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::never-skip</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Never skip</NICK>
+<BLURB>never accept any less than perfect data reconstruction (don't allow 'V's) but if [n] is given, skip after [n] retries without progress.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::paranoia-mode</NAME>
+<TYPE>GstParanoiaMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Paranoia mode</NICK>
+<BLURB>Type of checking to perform.</BLURB>
+<DEFAULT>Disable paranoid checking</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::read-speed</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Read speed</NICK>
+<BLURB>Read from device at specified speed.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::search-overlap</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,75]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Search overlap</NICK>
+<BLURB>Force minimum overlap search during verification to n sectors.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::toc-bias</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>TOC bias</NICK>
+<BLURB>Assume that the beginning offset of track 1 as reported in the TOC will be addressed as LBA 0.  Necessary for some Toshiba drives to get track boundaries.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>CDParanoia::toc-offset</NAME>
+<TYPE>gint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>TOC offset</NICK>
+<BLURB>Add <n> sectors to the values reported.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaMixerElement::device</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Device</NICK>
+<BLURB>ALSA device, as defined in an asound configuration file.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAlsaMixerElement::device-name</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Device name</NICK>
+<BLURB>Human-readable name of the sound device.</BLURB>
+<DEFAULT>""</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSink::handle</NAME>
+<TYPE>GnomeVFSHandle*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>GnomeVFSHandle</NICK>
+<BLURB>Handle for GnomeVFS.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSink::location</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>File Location</NICK>
+<BLURB>Location of the file to write.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGnomeVFSSink::uri</NAME>
+<TYPE>GnomeVFSURI*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>GnomeVFSURI</NICK>
+<BLURB>URI for GnomeVFS.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCdParanoiaSrc::generic-device</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Generic device</NICK>
+<BLURB>Use specified generic scsi device.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCdParanoiaSrc::paranoia-mode</NAME>
+<TYPE>GstCdParanoiaMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Paranoia mode</NICK>
+<BLURB>Type of checking to perform.</BLURB>
+<DEFAULT>PARANOIA_MODE_FRAGMENT</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCdParanoiaSrc::read-speed</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Read speed</NICK>
+<BLURB>Read from device at specified speed.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCdParanoiaSrc::search-overlap</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[-1,75]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Search overlap</NICK>
+<BLURB>Force minimum overlap search during verification to n sectors.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstCdParanoiaSrc::cache-size</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Cache size</NICK>
+<BLURB>Set CD cache size to n sectors (-1 = auto).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSubParse::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle charset encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 or any other Unicode encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSubParse::video-fps</NAME>
+<TYPE>GstFraction</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Video framerate</NICK>
+<BLURB>Framerate of the video stream. This is needed by some subtitle formats to synchronize subtitles and video properly. If not set and the subtitle format requires it subtitles may be out of sync.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTheoraParse::synchronization-points</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Synchronization points</NICK>
+<BLURB>An array of (granuletime, buffertime) pairs.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGDPPay::crc-header</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>CRC Header</NICK>
+<BLURB>Calculate and store a CRC checksum on the header.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGDPPay::crc-payload</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>CRC Payload</NICK>
+<BLURB>Calculate and store a CRC checksum on the payload.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGDPPay::version</NAME>
+<TYPE>GstDPVersion</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Version</NICK>
+<BLURB>Version of the GStreamer Data Protocol.</BLURB>
+<DEFAULT>GST_DP_VERSION_1_0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Caps</NICK>
+<BLURB>The caps on which to stop decoding.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::sink-caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sink Caps</NICK>
+<BLURB>The caps of the input data. (NULL = use typefind element).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::high-percent</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,100]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>High percent</NICK>
+<BLURB>High threshold for buffering to finish.</BLURB>
+<DEFAULT>99</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::low-percent</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,100]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Low percent</NICK>
+<BLURB>Low threshold for buffering to start.</BLURB>
+<DEFAULT>10</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::max-size-buffers</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (buffers)</NICK>
+<BLURB>Max. number of buffers in the queue (0=automatic).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::max-size-bytes</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (bytes)</NICK>
+<BLURB>Max. amount of bytes in the queue (0=automatic).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::max-size-time</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (ns)</NICK>
+<BLURB>Max. amount of data in the queue (in ns, 0=automatic).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::use-buffering</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use Buffering</NICK>
+<BLURB>Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::post-stream-topology</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Post Stream Topology</NICK>
+<BLURB>Post stream-topology messages.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstDecodeBin2::expose-all-streams</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Expose All Streams</NICK>
+<BLURB>Expose all streams, including those of unknown type or that don't match the 'caps' property.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::uri</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>URI</NICK>
+<BLURB>URI to decode.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::connection-speed</NAME>
+<TYPE>guint</TYPE>
+<RANGE><= 4294967</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Connection Speed</NICK>
+<BLURB>Network connection speed in kbps (0 = unknown).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Caps</NICK>
+<BLURB>The caps on which to stop decoding. (NULL = default).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::source</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Source</NICK>
+<BLURB>Source object used.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::buffer-duration</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffer duration (ns)</NICK>
+<BLURB>Buffer duration when buffering streams (-1 default value).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::buffer-size</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffer size (bytes)</NICK>
+<BLURB>Buffer size when buffering streams (-1 default value).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::download</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Download</NICK>
+<BLURB>Attempt download buffering when buffering network streams.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::use-buffering</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use Buffering</NICK>
+<BLURB>Perform buffering on demuxed/parsed media.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::expose-all-streams</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Expose All Streams</NICK>
+<BLURB>Expose all streams, including those of unknown type or that don't match the 'caps' property.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstURIDecodeBin::ring-buffer-max-size</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXULONG</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. ring buffer size (bytes)</NICK>
+<BLURB>Max. amount of data in the ring buffer (bytes, 0 = ring buffer disabled).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::current-level-buffers</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Current level (buffers)</NICK>
+<BLURB>Current number of buffers in the queue.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::current-level-bytes</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Current level (kB)</NICK>
+<BLURB>Current amount of data in the queue (bytes).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::current-level-time</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Current level (ns)</NICK>
+<BLURB>Current amount of data in the queue (in ns).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::high-percent</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,100]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>High percent</NICK>
+<BLURB>High threshold for buffering to finish.</BLURB>
+<DEFAULT>99</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::low-percent</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,100]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Low percent</NICK>
+<BLURB>Low threshold for buffering to start.</BLURB>
+<DEFAULT>10</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::max-size-buffers</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (buffers)</NICK>
+<BLURB>Max. number of buffers in the queue (0=disable).</BLURB>
+<DEFAULT>100</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::max-size-bytes</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (kB)</NICK>
+<BLURB>Max. amount of data in the queue (bytes, 0=disable).</BLURB>
+<DEFAULT>2097152</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::max-size-time</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (ns)</NICK>
+<BLURB>Max. amount of data in the queue (in ns, 0=disable).</BLURB>
+<DEFAULT>2000000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::temp-location</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Temporary File Location</NICK>
+<BLURB>Location to store temporary files in (Deprecated: Only read this property, use temp-tmpl to configure the name template).</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::use-buffering</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use buffering</NICK>
+<BLURB>Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::use-rate-estimate</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use Rate Estimate</NICK>
+<BLURB>Estimate the bitrate of the stream to calculate time level.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstQueue2::temp-template</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Temporary File Template</NICK>
+<BLURB>File template to store temporary files in, should contain directory and XXXXXX. (NULL == disabled).</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioConvert::dithering</NAME>
+<TYPE>GstAudioConvertDithering</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Dithering</NICK>
+<BLURB>Selects between different dithering methods.</BLURB>
+<DEFAULT>Triangular dithering (default)</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioConvert::noise-shaping</NAME>
+<TYPE>GstAudioConvertNoiseShaping</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Noise shaping</NICK>
+<BLURB>Selects between different noise shaping methods.</BLURB>
+<DEFAULT>No noise shaping (default)</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::audio-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Audio Sink</NICK>
+<BLURB>the audio output element to use (NULL = default sink).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::connection-speed</NAME>
+<TYPE>guint</TYPE>
+<RANGE><= 4294967</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Connection Speed</NICK>
+<BLURB>Network connection speed in kbps (0 = unknown).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::current-audio</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current audio</NICK>
+<BLURB>Currently playing audio stream (-1 = auto).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::current-text</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current Text</NICK>
+<BLURB>Currently playing text stream (-1 = auto).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::current-video</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current Video</NICK>
+<BLURB>Currently playing video stream (-1 = auto).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::flags</NAME>
+<TYPE>GstPlayFlags</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Flags</NICK>
+<BLURB>Flags to control behaviour.</BLURB>
+<DEFAULT>Render the video stream|Render the audio stream|Render subtitles|Use software volume</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::frame</NAME>
+<TYPE>GstBuffer*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Frame</NICK>
+<BLURB>The last frame (NULL = no video available).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::n-audio</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Number Audio</NICK>
+<BLURB>Total number of audio streams.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::n-text</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Number Text</NICK>
+<BLURB>Total number of text streams.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::n-video</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Number Video</NICK>
+<BLURB>Total number of video streams.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::source</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Source</NICK>
+<BLURB>Source element.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::subtitle-font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>Subtitle font description</NICK>
+<BLURB>Pango font description of font to be used for subtitle rendering.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::suburi</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>.sub-URI</NICK>
+<BLURB>Optional URI of a subtitle.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::uri</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>URI</NICK>
+<BLURB>URI of the media to play.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::video-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Video Sink</NICK>
+<BLURB>the video output element to use (NULL = default sink).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::vis-plugin</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Vis plugin</NICK>
+<BLURB>the visualization element to use (NULL = default).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::volume</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume</NICK>
+<BLURB>The audio volume, 1.0=100%.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::mute</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mute</NICK>
+<BLURB>Mute the audio channel without changing the volume.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::buffer-duration</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffer duration (ns)</NICK>
+<BLURB>Buffer duration when buffering network streams.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::buffer-size</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Buffer size (bytes)</NICK>
+<BLURB>Buffer size when buffering network streams.</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::text-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Text plugin</NICK>
+<BLURB>the text output element to use (NULL = default textoverlay).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::subpic-sink</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Subpicture plugin</NICK>
+<BLURB>the subpicture output element to use (NULL = default dvdspu).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::av-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>AV Offset</NICK>
+<BLURB>The synchronisation offset between audio and video in nanoseconds.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin2::ring-buffer-max-size</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXULONG</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. ring buffer size (bytes)</NICK>
+<BLURB>Max. amount of data in the ring buffer (bytes, 0 = ring buffer disabled).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioSink::location</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Location</NICK>
+<BLURB>URI location to write to.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioSink::file</NAME>
+<TYPE>GFile*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>File</NICK>
+<BLURB>GFile to write to.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioSrc::location</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Location</NICK>
+<BLURB>URI location to read from.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioSrc::file</NAME>
+<TYPE>GFile*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>File</NICK>
+<BLURB>GFile to read from.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioStreamSink::stream</NAME>
+<TYPE>GOutputStream*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Stream</NICK>
+<BLURB>Stream to write to.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstGioStreamSrc::stream</NAME>
+<TYPE>GInputStream*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Stream</NICK>
+<BLURB>Stream to read from.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::connection-speed</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Connection Speed</NICK>
+<BLURB>Network connection speed in kbps (0 = unknown).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::current-audio</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current audio</NICK>
+<BLURB>Currently playing audio stream (-1 = none).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::current-text</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current text</NICK>
+<BLURB>Currently playing text stream (-1 = none).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::current-video</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Current video</NICK>
+<BLURB>Currently playing video stream (-1 = none).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::nstreams</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>r</FLAGS>
+<NICK>NStreams</NICK>
+<BLURB>number of streams.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::queue-min-threshold</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXINT64</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Queue min threshold</NICK>
+<BLURB>Buffering low threshold of internal queues in nanoseconds.</BLURB>
+<DEFAULT>900000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::queue-size</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXINT64</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Queue size</NICK>
+<BLURB>Size of internal queues in nanoseconds.</BLURB>
+<DEFAULT>3000000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::queue-threshold</NAME>
+<TYPE>guint64</TYPE>
+<RANGE><= G_MAXINT64</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Queue threshold</NICK>
+<BLURB>Buffering threshold of internal queues in nanoseconds.</BLURB>
+<DEFAULT>2850000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::source</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Source</NICK>
+<BLURB>Source element.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::stream-info</NAME>
+<TYPE>gpointer</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Stream info</NICK>
+<BLURB>List of streaminfo.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::stream-info-value-array</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>StreamInfo GValueArray</NICK>
+<BLURB>value array of streaminfo.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::suburi</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>.sub-URI</NICK>
+<BLURB>Optional URI of a subtitle.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBaseBin::uri</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>URI</NICK>
+<BLURB>URI of the media to play.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSpeexResample::filter-length</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Filter length</NICK>
+<BLURB>DEPRECATED, DON'T USE THIS! Length of the resample filter.</BLURB>
+<DEFAULT>64</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSpeexResample::quality</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Quality</NICK>
+<BLURB>Resample quality with 0 being the lowest and 10 being the best.</BLURB>
+<DEFAULT>4</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstClockOverlay::time-format</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Date/Time Format</NICK>
+<BLURB>Format to use for time and date value, as in strftime.</BLURB>
+<DEFAULT>"%H:%M:%S"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSink::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Caps</NICK>
+<BLURB>The allowed caps for the sink pad.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSink::drop</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Drop</NICK>
+<BLURB>Drop old buffers when the buffer queue is filled.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSink::emit-signals</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Emit signals</NICK>
+<BLURB>Emit new-preroll, new-buffer and new-buffer-list signals.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSink::eos</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>EOS</NICK>
+<BLURB>Check if the sink is EOS or not started.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSink::max-buffers</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max Buffers</NICK>
+<BLURB>The maximum number of buffers to queue internally (0 = unlimited).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::block</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Block</NICK>
+<BLURB>Block push-buffer when max-bytes are queued.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Caps</NICK>
+<BLURB>The allowed caps for the src pad.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::format</NAME>
+<TYPE>GstFormat</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Format</NICK>
+<BLURB>The format of the segment events and seek.</BLURB>
+<DEFAULT>GST_FORMAT_BYTES</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::is-live</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Is Live</NICK>
+<BLURB>Whether to act as a live source.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::max-bytes</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max bytes</NICK>
+<BLURB>The maximum number of bytes to queue internally (0 = unlimited).</BLURB>
+<DEFAULT>200000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::max-latency</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max Latency</NICK>
+<BLURB>The maximum latency (-1 = unlimited).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::min-latency</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Min Latency</NICK>
+<BLURB>The minimum latency (-1 = default).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::size</NAME>
+<TYPE>gint64</TYPE>
+<RANGE>>= -1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Size</NICK>
+<BLURB>The size of the data stream in bytes (-1 if unknown).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::stream-type</NAME>
+<TYPE>GstAppStreamType</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Stream Type</NICK>
+<BLURB>the type of the stream.</BLURB>
+<DEFAULT>GST_APP_STREAM_TYPE_STREAM</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::emit-signals</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Emit signals</NICK>
+<BLURB>Emit need-data, enough-data and seek-data signals.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAppSrc::min-percent</NAME>
+<TYPE>guint</TYPE>
+<RANGE><= 100</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Min Percent</NICK>
+<BLURB>Emit need-data when queued bytes drops below this percent of max-bytes.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioResample::filter-length</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Filter length</NICK>
+<BLURB>Length of the resample filter.</BLURB>
+<DEFAULT>64</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAudioResample::quality</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Quality</NICK>
+<BLURB>Resample quality with 0 being the lowest and 10 being the best.</BLURB>
+<DEFAULT>4</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstAdder::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Target caps</NICK>
+<BLURB>Set target format for mixing (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::flags</NAME>
+<TYPE>GstPlayFlags</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Flags</NICK>
+<BLURB>Flags to control behaviour.</BLURB>
+<DEFAULT>Render the video stream|Render the audio stream|Render subtitles|Use software volume</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::mute</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mute</NICK>
+<BLURB>Mute the audio channel without changing the volume.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::subtitle-font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>w</FLAGS>
+<NICK>Subtitle font description</NICK>
+<BLURB>Pango font description of font to be used for subtitle rendering.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::vis-plugin</NAME>
+<TYPE>GstElement*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Vis plugin</NICK>
+<BLURB>the visualization element to use (NULL = default).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::volume</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Volume</NICK>
+<BLURB>The audio volume, 1.0=100%.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::av-offset</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>AV Offset</NICK>
+<BLURB>The synchronisation offset between audio and video in nanoseconds.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlaySink::frame</NAME>
+<TYPE>GstBuffer*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Frame</NICK>
+<BLURB>The last frame (NULL = no video available).</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSubtitleOverlay::font-desc</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Subtitle font description</NICK>
+<BLURB>Pango font description of font to be used for subtitle rendering.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSubtitleOverlay::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Silent</NICK>
+<BLURB>Whether to show subtitles.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSubtitleOverlay::subtitle-encoding</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>subtitle encoding</NICK>
+<BLURB>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::audio-jitter-tolerance</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Audio jitter tolerance</NICK>
+<BLURB>Amount of timestamp jitter/imperfection to allow on audio streams before inserting/dropping samples (ns).</BLURB>
+<DEFAULT>20000000</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::avoid-reencoding</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Avoid re-encoding</NICK>
+<BLURB>Whether to re-encode portions of compatible video streams that lay on segment boundaries.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::profile</NAME>
+<TYPE>GstEncodingProfile*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Profile</NICK>
+<BLURB>The GstEncodingProfile to use.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::queue-buffers-max</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (buffers)</NICK>
+<BLURB>Max. number of buffers in the queue (0=disable).</BLURB>
+<DEFAULT>200</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::queue-bytes-max</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (kB)</NICK>
+<BLURB>Max. amount of data in the queue (bytes, 0=disable).</BLURB>
+<DEFAULT>10485760</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEncodeBin::queue-time-max</NAME>
+<TYPE>guint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max. size (ns)</NICK>
+<BLURB>Max. amount of data in the queue (in ns, 0=disable).</BLURB>
+<DEFAULT>1000000000</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-base-plugins.hierarchy b/docs/plugins/gst-plugins-base-plugins.hierarchy
new file mode 100644
index 0000000..d28dd63
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.hierarchy
@@ -0,0 +1,139 @@
+GObject
+  GInitiallyUnowned
+    GstObject
+      GstPad
+      GstPadTemplate
+      GstPluginFeature
+        GstElementFactory
+        GstTypeFindFactory
+        GstIndexFactory
+      GstElement
+        GstBin
+          GstPipeline
+            GstPlayBaseBin
+              GstPlayBin
+            GstPlayBin2
+          GstEncodeBin
+          GstDecodeBin
+          GstPlaySink
+          GstSubtitleOverlay
+          GstDecodeBin2
+          GstURIDecodeBin
+        GstVisual
+          GstVisualjess
+          GstVisualbumpscope
+          GstVisualcorona
+          GstVisualinfinite
+          GstVisualjakdaw
+          GstVisuallv_analyzer
+          GstVisuallv_scope
+          GstVisualoinksie
+        GstBaseSrc
+          GstGnomeVFSSrc
+          GstGioBaseSrc
+            GstGioSrc
+            GstGioStreamSrc
+          GstPushSrc
+            GstCddaBaseSrc
+              GstCdParanoiaSrc
+            GstBaseAudioSrc
+              GstAudioSrc
+                GstAlsaSrc
+            GstV4lElement
+              GstV4lSrc
+            GstVideoTestSrc
+            GstTCPClientSrc
+            GstTCPServerSrc
+          GstAppSrc
+          GstAudioTestSrc
+        GstBaseSink
+          GstGnomeVFSSink
+          GstGioBaseSink
+            GstGioSink
+            GstGioStreamSink
+          GstBaseAudioSink
+            GstAudioSink
+              GstAlsaSink
+          GstVideoSink
+            GstXvImageSink
+            GstXImageSink
+          GstAppSink
+          GstTCPClientSink
+          GstMultiFdSink
+            GstTCPServerSink
+        GstTheoraDec
+        GstTheoraEnc
+        GstTheoraParse
+        GstBaseTextOverlay
+          GstTextOverlay
+          GstTimeOverlay
+          GstClockOverlay
+        GstTextRender
+        GstOggDemux
+        GstOggMux
+        GstOgmParse
+          GstOgmAudioParse
+          GstOgmVideoParse
+          GstOgmTextParse
+        GstOggParse
+        GstOggAviParse
+        GstVorbisEnc
+        GstVorbisDec
+        GstVorbisParse
+          GstVorbisTag
+        GstAlsaMixerElement
+        GstSubParse
+        GstSsaParse
+        GstBaseTransform
+          GstAudioFilter
+            GstVolume
+          GstVideoFilter
+            GstVideoScale
+            GstFFMpegCsp
+          GstAudioResample
+          GstAudioConvert
+        GstGDPDepay
+        GstGDPPay
+        GstAudioRate
+        GstAdder
+        GstVideoRate
+        GstStreamSelector
+      GstBus
+      GstTask
+      GstTaskPool
+      GstClock
+        GstSystemClock
+          GstAudioClock
+      GstPlugin
+      GstRegistry
+      GstRingBuffer
+        GstAudioSrcRingBuffer
+        GstAudioSinkRingBuffer
+  GstMixerTrack
+  GstStreamInfo
+  GstEncodingProfile
+  GstTunerNorm
+  GstTunerChannel
+  GstColorBalanceChannel
+  PangoFontMap
+    PangoFcFontMap
+      PangoCairoFcFontMap
+  PangoContext
+  GInputStream
+  GOutputStream
+GInterface
+  GTypePlugin
+  GstChildProxy
+  GstURIHandler
+  GstPreset
+  GstTagSetter
+  GstImplementsInterface
+  GstMixer
+  GstPropertyProbe
+  GstNavigation
+  GstXOverlay
+  GstColorBalance
+  GstTuner
+  GstStreamVolume
+  PangoCairoFontMap
+  GFile
diff --git a/docs/plugins/gst-plugins-base-plugins.interfaces b/docs/plugins/gst-plugins-base-plugins.interfaces
new file mode 100644
index 0000000..4b602b1
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.interfaces
@@ -0,0 +1,32 @@
+GstBin GstChildProxy
+GstPipeline GstChildProxy
+GstPlayBaseBin GstChildProxy
+GstPlayBin GstChildProxy
+GstPlayBin2 GstChildProxy GstStreamVolume
+GstEncodeBin GstChildProxy
+GstDecodeBin GstChildProxy
+GstPlaySink GstChildProxy
+GstSubtitleOverlay GstChildProxy
+GstDecodeBin2 GstChildProxy
+GstURIDecodeBin GstChildProxy
+GstGnomeVFSSrc GstURIHandler
+GstGioSrc GstURIHandler
+GstCddaBaseSrc GstURIHandler
+GstCdParanoiaSrc GstURIHandler
+GstAlsaSrc GstImplementsInterface GstMixer GstPropertyProbe
+GstV4lElement GstImplementsInterface GstTuner GstXOverlay GstColorBalance GstPropertyProbe
+GstV4lSrc GstImplementsInterface GstTuner GstXOverlay GstColorBalance GstPropertyProbe
+GstAppSrc GstURIHandler
+GstGnomeVFSSink GstURIHandler
+GstGioSink GstURIHandler
+GstAlsaSink GstPropertyProbe
+GstXvImageSink GstImplementsInterface GstNavigation GstXOverlay GstColorBalance GstPropertyProbe
+GstXImageSink GstImplementsInterface GstNavigation GstXOverlay
+GstAppSink GstURIHandler
+GstTheoraEnc GstPreset
+GstOggMux GstPreset
+GstVorbisEnc GstTagSetter GstPreset
+GstVorbisTag GstTagSetter
+GstAlsaMixerElement GstImplementsInterface GstMixer GstPropertyProbe
+GstVolume GstImplementsInterface GstMixer GstStreamVolume
+PangoCairoFcFontMap PangoCairoFontMap
diff --git a/docs/plugins/gst-plugins-base-plugins.prerequisites b/docs/plugins/gst-plugins-base-plugins.prerequisites
new file mode 100644
index 0000000..176f319
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.prerequisites
@@ -0,0 +1,10 @@
+GstChildProxy GstObject
+GstTagSetter GstElement
+GstImplementsInterface GstElement
+GstMixer GstImplementsInterface GstElement
+GstXOverlay GstImplementsInterface GstElement
+GstColorBalance GstImplementsInterface GstElement
+GstTuner GstImplementsInterface GstElement
+GstStreamVolume GObject
+PangoCairoFontMap PangoFontMap
+GFile GObject
diff --git a/docs/plugins/gst-plugins-base-plugins.signals b/docs/plugins/gst-plugins-base-plugins.signals
new file mode 100644
index 0000000..67d8e8d
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.signals
@@ -0,0 +1,507 @@
+<SIGNAL>
+<NAME>GstMultiFdSink::add</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::clear</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::client-added</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::client-removed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+GstClientStatus  arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::get-stats</NAME>
+<RETURNS>GValueArray*</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::remove</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::client-fd-removed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::add-full</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+GstSyncMethod  arg2
+GstTCPUnitType  arg3
+guint64  arg4
+GstTCPUnitType  arg5
+guint64  arg6
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstMultiFdSink::remove-flush</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstMultiFdSink *gstmultifdsink
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin::new-decoded-pad</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin *gstdecodebin
+GstPad *arg1
+gboolean  arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin::removed-decoded-pad</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin *gstdecodebin
+GstPad *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin::unknown-type</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin *gstdecodebin
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>CDParanoia::smilie-change</NAME>
+<RETURNS>void</RETURNS>
+CDParanoia *cdparanoia
+gchar *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>CDParanoia::transport-error</NAME>
+<RETURNS>void</RETURNS>
+CDParanoia *cdparanoia
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>CDParanoia::uncorrected-error</NAME>
+<RETURNS>void</RETURNS>
+CDParanoia *cdparanoia
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstGnomeVFSSink::allow-overwrite</NAME>
+<RETURNS>gboolean</RETURNS>
+<FLAGS>c</FLAGS>
+GstGnomeVFSSink *gstgnomevfssink
+GnomeVFSURI *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstCdParanoiaSrc::transport-error</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstCdParanoiaSrc *gstcdparanoiasrc
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstCdParanoiaSrc::uncorrected-error</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstCdParanoiaSrc *gstcdparanoiasrc
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::autoplug-continue</NAME>
+<RETURNS>gboolean</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::autoplug-sort</NAME>
+<RETURNS>GValueArray*</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+GstCaps *arg2
+GValueArray *arg3
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::new-decoded-pad</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+gboolean  arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::removed-decoded-pad</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::unknown-type</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::autoplug-factories</NAME>
+<RETURNS>GValueArray*</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::autoplug-select</NAME>
+<RETURNS>GstAutoplugSelectResult</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+GstPad *arg1
+GstCaps *arg2
+GstElementFactory *arg3
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstDecodeBin2::drained</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstDecodeBin2 *gstdecodebin2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::autoplug-continue</NAME>
+<RETURNS>gboolean</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::autoplug-factories</NAME>
+<RETURNS>GValueArray*</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::autoplug-select</NAME>
+<RETURNS>GstAutoplugSelectResult</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstPad *arg1
+GstCaps *arg2
+GstElementFactory *arg3
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::unknown-type</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstPad *arg1
+GstCaps *arg2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::drained</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::autoplug-sort</NAME>
+<RETURNS>GValueArray*</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstPad *arg1
+GstCaps *arg2
+GValueArray *arg3
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstURIDecodeBin::source-setup</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstURIDecodeBin *gsturidecodebin
+GstElement *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::about-to-finish</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::audio-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-audio-tags</NAME>
+<RETURNS>GstTagList*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-text-tags</NAME>
+<RETURNS>GstTagList*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-video-tags</NAME>
+<RETURNS>GstTagList*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::text-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::video-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::convert-frame</NAME>
+<RETURNS>GstBuffer*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+GstCaps *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-audio-pad</NAME>
+<RETURNS>GstPad*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-text-pad</NAME>
+<RETURNS>GstPad*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::get-video-pad</NAME>
+<RETURNS>GstPad*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::audio-tags-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::text-tags-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::video-tags-changed</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+gint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlayBin2::source-setup</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstPlayBin2 *gstplaybin2
+GstElement *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::eos</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::new-buffer</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::new-preroll</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::pull-buffer</NAME>
+<RETURNS>GstBuffer*</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::pull-preroll</NAME>
+<RETURNS>GstBuffer*</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::new-buffer-list</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSink::pull-buffer-list</NAME>
+<RETURNS>GstBufferList*</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSink *gstappsink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSrc::end-of-stream</NAME>
+<RETURNS>GstFlowReturn</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSrc *gstappsrc
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSrc::enough-data</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSrc *gstappsrc
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSrc::need-data</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSrc *gstappsrc
+guint  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSrc::push-buffer</NAME>
+<RETURNS>GstFlowReturn</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSrc *gstappsrc
+GstBuffer *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstAppSrc::seek-data</NAME>
+<RETURNS>gboolean</RETURNS>
+<FLAGS>l</FLAGS>
+GstAppSrc *gstappsrc
+guint64  arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlaySink::reconfigure</NAME>
+<RETURNS>gboolean</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlaySink *gstplaysink
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstPlaySink::convert-frame</NAME>
+<RETURNS>GstBuffer*</RETURNS>
+<FLAGS>la</FLAGS>
+GstPlaySink *gstplaysink
+GstCaps *arg1
+</SIGNAL>
+
+<SIGNAL>
+<NAME>GstEncodeBin::request-pad</NAME>
+<RETURNS>GstPad*</RETURNS>
+<FLAGS>la</FLAGS>
+GstEncodeBin *gstencodebin
+GstCaps *arg1
+</SIGNAL>
+
diff --git a/docs/plugins/gst-plugins-base-plugins.types b/docs/plugins/gst-plugins-base-plugins.types
new file mode 100644
index 0000000..9f4950e
--- /dev/null
+++ b/docs/plugins/gst-plugins-base-plugins.types
@@ -0,0 +1 @@
+#include <gst/gst.h>
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
new file mode 100644
index 0000000..5a32aee
--- /dev/null
+++ b/docs/plugins/html/ch01.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gst-plugins-base Elements</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="prev" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="next" href="gst-plugins-base-plugins-adder.html" title="adder">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-adder.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id435033"></a>gst-plugins-base Elements</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"> — Add N audio channels together</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"> — Allow the application to feed buffers to a pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"> — Allow the application to get access to raw buffer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsamixer.html">alsamixer</a></span><span class="refpurpose"> — Control sound input and output levels with ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"> — Output to a sound card via ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"> — Read from a sound card via ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"> — Overlays the current clock time on a video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"> — Autoplug and decode to raw media</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"> — Convenience encoding/muxing element</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-gdpdepay.html">gdpdepay</a></span><span class="refpurpose"> — Depayloads GStreamer Data Protocol buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-gdppay.html">gdppay</a></span><span class="refpurpose"> — Payloads GStreamer Data Protocol buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"> — Write to any GIO-supported location</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"> — Read from any GIO-supported location</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"> — Write to any GIO stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"> — Read from any GIO stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"> — Send data to multiple filedescriptors</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"> — demux ogg streams (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"> — mux ogg streams (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"> — Autoplug and play media from an uri</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"> — Overlays a video stream with subtitles</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"> — Send data as a client over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"> — Receive data as a server over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"> — Send data as a server over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"> — Adds text strings on top of a video buffer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"> — Renders a text string to an image bitmap</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"> — decode raw theora streams to raw YUV video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"> — encode raw YUV video to a theora stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"> — parse raw theora streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"> — Overlays buffer time stamps on a video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — Autoplug and decode an URI to raw media</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"> — Set volume on audio/raw streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"> — decode raw vorbis streams to float audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"> — Encodes audio in Vorbis format</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"> — parse raw vorbis streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"> — Retags vorbis streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — A standard X based videosink</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — A Xv based videosink</span>
+</dt>
+</dl></div>
+<span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span><span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
new file mode 100644
index 0000000..55ab127
--- /dev/null
+++ b/docs/plugins/html/ch02.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gst-plugins-base Plugins</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="prev" href="gst-plugins-base-plugins-xvimagesink.html" title="xvimagesink">
+<link rel="next" href="gst-plugins-base-plugins-plugin-adder.html" title="adder">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-xvimagesink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-adder.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id434348"></a>gst-plugins-base Plugins</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose"> — <a name="plugin-adder"></a>Adds multiple streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose"> — <a name="plugin-alsa"></a>ALSA plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose"> — <a name="plugin-app"></a>Elements used to communicate with applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — <a name="plugin-audioconvert"></a>Convert audio to different formats</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose"> — <a name="plugin-audiorate"></a>Adjusts audio frames</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose"> — <a name="plugin-audioresample"></a>Resamples audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — <a name="plugin-audiotestsrc"></a>Creates audio test signals of given frequency and volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose"> — <a name="plugin-cdparanoia"></a>Read audio from CD in paranoid mode</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-decodebin.html">decodebin</a></span><span class="refpurpose"> — <a name="plugin-decodebin"></a>decoder bin</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose"> — <a name="plugin-encoding"></a>various encoding-related elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gdp.html">gdp</a></span><span class="refpurpose"> — <a name="plugin-gdp"></a>Payload/depayload GDP packets</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose"> — <a name="plugin-gio"></a>GIO elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose"> — <a name="plugin-libvisual"></a>libvisual visualization plugins</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose"> — <a name="plugin-ogg"></a>ogg stream manipulation (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose"> — <a name="plugin-pango"></a>Pango-based text rendering and overlay</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose"> — <a name="plugin-playback"></a>various playback elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose"> — <a name="plugin-subparse"></a>Subtitle parsing</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose"> — <a name="plugin-tcp"></a>transfer data over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose"> — <a name="plugin-theora"></a>Theora plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose"> — <a name="plugin-typefindfunctions"></a>default typefind functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — <a name="plugin-uridecodebin"></a>URI Decoder bin</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose"> — <a name="plugin-videorate"></a>Adjusts video frames</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose"> — <a name="plugin-videoscale"></a>Resizes video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — <a name="plugin-videotestsrc"></a>Creates a test video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose"> — <a name="plugin-volume"></a>plugin for controlling audio volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose"> — <a name="plugin-vorbis"></a>Vorbis plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — <a name="plugin-ximagesink"></a>X11 video output element based on standard Xlib calls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — <a name="plugin-xvimagesink"></a>XFree86 video output plugin using Xv extension</span>
+</dt>
+</dl></div>
+<span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html
new file mode 100644
index 0000000..4a140db
--- /dev/null
+++ b/docs/plugins/html/ch03.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gst-plugins-base Classes</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-xvimagesink.html" title="xvimagesink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-xvimagesink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td> </td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id434484"></a>gst-plugins-base Classes</h2></div></div></div>
+<span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-adder.html b/docs/plugins/html/gst-plugins-base-plugins-adder.html
new file mode 100644
index 0000000..094375b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-adder.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>adder</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="next" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-appsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-adder.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-adder.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-adder.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-adder.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-adder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-adder.top_of_page"></a>adder</span></h2>
+<p>adder — Add N audio channels together</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-adder.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAdder"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-adder.html#GstAdder-struct" title="struct GstAdder">GstAdder</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-adder.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstAdder
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-adder.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-adder.html#GstAdder--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-adder.description"></a><h2>Description</h2>
+<p>
+The adder allows to mix several streams into one by adding the data.
+Mixed data is clamped to the min/max values of the data format.
+</p>
+<p>
+The adder currently mixes all data received on the sinkpads as soon as
+possible without trying to synchronize the streams.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id473522"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch audiotestsrc freq=100 ! adder name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
+</pre></div> This pipeline produces two sine waves mixed together.
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-05-09 (0.10.7)
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id473497"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-adder.html#plugin-adder">adder</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id500681"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-adder.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAdder-struct"></a><h3>struct GstAdder</h3>
+<pre class="programlisting">struct GstAdder;</pre>
+<p>
+The adder object structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-adder.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAdder--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<p>Set target format for mixing (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object.</p>
+<p class="since">Since 0.10.24</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsamixer.html b/docs/plugins/html/gst-plugins-base-plugins-alsamixer.html
new file mode 100644
index 0000000..3293e51
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsamixer.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>alsamixer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-appsink.html" title="appsink">
+<link rel="next" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-appsink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-alsasink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-alsamixer.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsamixer.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsamixer.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsamixer.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsamixer.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-alsamixer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-alsamixer.top_of_page"></a>alsamixer</span></h2>
+<p>alsamixer — Control sound input and output levels with ALSA</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-alsamixer.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAlsaMixerElement"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement-struct" title="struct GstAlsaMixerElement">GstAlsaMixerElement</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstAlsaMixerElement
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAlsaMixerElement implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer">GstMixer</a> and  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">GstPropertyProbe</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device" title='The "device" property'>device</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device-name" title='The "device-name" property'>device-name</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id475040"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-alsa.html#plugin-alsa">alsa</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Leif Johnson &lt;leif@ambient.2y.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id475102"></a><h3>Element Pads</h3>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAlsaMixerElement-struct"></a><h3>struct GstAlsaMixerElement</h3>
+<pre class="programlisting">struct GstAlsaMixerElement;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamixer.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAlsaMixerElement--device"></a><h3>The <code class="literal">"device"</code> property</h3>
+<pre class="programlisting">  "device"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>ALSA device, as defined in an asound configuration file.</p>
+<p>Default value: "default"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAlsaMixerElement--device-name"></a><h3>The <code class="literal">"device-name"</code> property</h3>
+<pre class="programlisting">  "device-name"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>Human-readable name of the sound device.</p>
+<p>Default value: ""</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasink.html b/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
new file mode 100644
index 0000000..37b8d48
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>alsasink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-alsamixer.html" title="alsamixer">
+<link rel="next" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-alsamixer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-alsasrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-alsasink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasink.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-alsasink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-alsasink.top_of_page"></a>alsasink</span></h2>
+<p>alsasink — Output to a sound card via ALSA</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-alsasink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAlsaSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct" title="struct GstAlsaSink">GstAlsaSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosink.html#GstBaseAudioSink">GstBaseAudioSink</a>
+                                 +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosink.html#GstAudioSink">GstAudioSink</a>
+                                       +----GstAlsaSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAlsaSink implements
+ <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">GstPropertyProbe</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device" title='The "device" property'>device</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name" title='The "device-name" property'>device-name</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name" title='The "card-name" property'>card-name</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id500156"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-alsa.html#plugin-alsa">alsa</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id514777"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)24, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, signed=(boolean){ true, false }, width=(int)8, depth=(int)8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-iec958</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAlsaSink-struct"></a><h3>struct GstAlsaSink</h3>
+<pre class="programlisting">struct GstAlsaSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAlsaSink--device"></a><h3>The <code class="literal">"device"</code> property</h3>
+<pre class="programlisting">  "device"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>ALSA device, as defined in an asound configuration file.</p>
+<p>Default value: "default"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAlsaSink--device-name"></a><h3>The <code class="literal">"device-name"</code> property</h3>
+<pre class="programlisting">  "device-name"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>Human-readable name of the sound device.</p>
+<p>Default value: ""</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAlsaSink--card-name"></a><h3>The <code class="literal">"card-name"</code> property</h3>
+<pre class="programlisting">  "card-name"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>Human-readable name of the sound card.</p>
+<p>Default value: ""</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
new file mode 100644
index 0000000..e430887
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>alsasrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">
+<link rel="next" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-alsasink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-audioconvert.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-alsasrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-alsasrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-alsasrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-alsasrc.top_of_page"></a>alsasrc</span></h2>
+<p>alsasrc — Read from a sound card via ALSA</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-alsasrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAlsaSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct" title="struct GstAlsaSrc">GstAlsaSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstbaseaudiosrc.html#GstBaseAudioSrc">GstBaseAudioSrc</a>
+                                       +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc">GstAudioSrc</a>
+                                             +----GstAlsaSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAlsaSrc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer">GstMixer</a> and  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">GstPropertyProbe</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device" title='The "device" property'>device</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name" title='The "device-name" property'>device-name</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name" title='The "card-name" property'>card-name</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id486142"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-alsa.html#plugin-alsa">alsa</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id515248"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)24, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, signed=(boolean){ true, false }, width=(int)8, depth=(int)8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAlsaSrc-struct"></a><h3>struct GstAlsaSrc</h3>
+<pre class="programlisting">struct GstAlsaSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsasrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAlsaSrc--device"></a><h3>The <code class="literal">"device"</code> property</h3>
+<pre class="programlisting">  "device"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>ALSA device, as defined in an asound configuration file.</p>
+<p>Default value: "default"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAlsaSrc--device-name"></a><h3>The <code class="literal">"device-name"</code> property</h3>
+<pre class="programlisting">  "device-name"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>Human-readable name of the sound device.</p>
+<p>Default value: ""</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAlsaSrc--card-name"></a><h3>The <code class="literal">"card-name"</code> property</h3>
+<pre class="programlisting">  "card-name"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>Human-readable name of the sound card.</p>
+<p>Default value: ""</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsink.html b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
new file mode 100644
index 0000000..bbbf61d
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
@@ -0,0 +1,354 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>appsink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
+<link rel="next" href="gst-plugins-base-plugins-alsamixer.html" title="alsamixer">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-appsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-alsamixer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-appsink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsink.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsink.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsink.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-appsink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-appsink.top_of_page"></a>appsink</span></h2>
+<p>appsink — Allow the application to get access to raw buffer</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-appsink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAppSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-struct" title="struct GstAppSink">GstAppSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstAppSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAppSink implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink--drop" title='The "drop" property'>drop</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals" title='The "emit-signals" property'>emit-signals</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink--eos" title='The "eos" property'>eos</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers" title='The "max-buffers" property'>max-buffers</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-eos" title='The "eos" signal'>eos</a>"                                            : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer" title='The "new-buffer" signal'>new-buffer</a>"                                     : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll" title='The "new-preroll" signal'>new-preroll</a>"                                    : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer" title='The "pull-buffer" signal'>pull-buffer</a>"                                    : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll" title='The "pull-preroll" signal'>pull-preroll</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer-list" title='The "new-buffer-list" signal'>new-buffer-list</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer-list" title='The "pull-buffer-list" signal'>pull-buffer-list</a>"                               : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.description"></a><h2>Description</h2>
+<p>
+Appsink is a sink plugin that supports many different methods for making
+the application get a handle on the GStreamer data in a pipeline. Unlike
+most GStreamer elements, Appsink provides external API functions.
+</p>
+<p>
+For the documentation of the API, please see the
+<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsink.html">libgstapp</a> section in
+the GStreamer Plugins Base Libraries documentation.
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id513544"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-app.html#plugin-app">app</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David Schleef &lt;ds@schleef.org&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Sink</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id513605"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAppSink-struct"></a><h3>struct GstAppSink</h3>
+<pre class="programlisting">struct GstAppSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAppSink--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<p>The allowed caps for the sink pad.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink--drop"></a><h3>The <code class="literal">"drop"</code> property</h3>
+<pre class="programlisting">  "drop"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Drop old buffers when the buffer queue is filled.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink--emit-signals"></a><h3>The <code class="literal">"emit-signals"</code> property</h3>
+<pre class="programlisting">  "emit-signals"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Emit new-preroll, new-buffer and new-buffer-list signals.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink--eos"></a><h3>The <code class="literal">"eos"</code> property</h3>
+<pre class="programlisting">  "eos"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read</pre>
+<p>Check if the sink is EOS or not started.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink--max-buffers"></a><h3>The <code class="literal">"max-buffers"</code> property</h3>
+<pre class="programlisting">  "max-buffers"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>The maximum number of buffers to queue internally (0 = unlimited).</p>
+<p>Default value: 0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsink.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstAppSink-eos"></a><h3>The <code class="literal">"eos"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-new-buffer"></a><h3>The <code class="literal">"new-buffer"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-new-preroll"></a><h3>The <code class="literal">"new-preroll"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-pull-buffer"></a><h3>The <code class="literal">"pull-buffer"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a>*          user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-pull-preroll"></a><h3>The <code class="literal">"pull-preroll"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a>*          user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-new-buffer-list"></a><h3>The <code class="literal">"new-buffer-list"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSink-pull-buffer-list"></a><h3>The <code class="literal">"pull-buffer-list"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferList.html#GstBufferList"><span class="returnvalue">GstBufferList</span></a>*      user_function                      (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsink</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsrc.html b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
new file mode 100644
index 0000000..9138340
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
@@ -0,0 +1,365 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>appsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-adder.html" title="adder">
+<link rel="next" href="gst-plugins-base-plugins-appsink.html" title="appsink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-adder.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-appsink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-appsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsrc.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-appsrc.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-appsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-appsrc.top_of_page"></a>appsrc</span></h2>
+<p>appsrc — Allow the application to feed buffers to a pipeline</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-appsrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAppSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-struct" title="struct GstAppSrc">GstAppSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----GstAppSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstAppSrc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--block" title='The "block" property'>block</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--format" title='The "format" property'>format</a>"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--is-live" title='The "is-live" property'>is-live</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-bytes" title='The "max-bytes" property'>max-bytes</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-latency" title='The "max-latency" property'>max-latency</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-latency" title='The "min-latency" property'>min-latency</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--size" title='The "size" property'>size</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--stream-type" title='The "stream-type" property'>stream-type</a>"              <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GstAppStreamType"><span class="type">GstAppStreamType</span></a>      : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--emit-signals" title='The "emit-signals" property'>emit-signals</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-percent" title='The "min-percent" property'>min-percent</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-end-of-stream" title='The "end-of-stream" signal'>end-of-stream</a>"                                  : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-enough-data" title='The "enough-data" signal'>enough-data</a>"                                    : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data" title='The "need-data" signal'>need-data</a>"                                      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer" title='The "push-buffer" signal'>push-buffer</a>"                                    : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data" title='The "seek-data" signal'>seek-data</a>"                                      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.description"></a><h2>Description</h2>
+<p>
+The appsrc element can be used by applications to insert data into a
+GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+external API functions.
+</p>
+<p>
+For the documentation of the API, please see the
+<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html">libgstapp</a> section in the
+GStreamer Plugins Base Libraries documentation.
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id507510"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-app.html#plugin-app">app</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David Schleef &lt;ds@schleef.org&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Source</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id507572"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAppSrc-struct"></a><h3>struct GstAppSrc</h3>
+<pre class="programlisting">struct GstAppSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAppSrc--block"></a><h3>The <code class="literal">"block"</code> property</h3>
+<pre class="programlisting">  "block"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Block push-buffer when max-bytes are queued.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<p>The allowed caps for the src pad.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--format"></a><h3>The <code class="literal">"format"</code> property</h3>
+<pre class="programlisting">  "format"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write</pre>
+<p>The format of the segment events and seek.</p>
+<p>Default value: GST_FORMAT_BYTES</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--is-live"></a><h3>The <code class="literal">"is-live"</code> property</h3>
+<pre class="programlisting">  "is-live"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to act as a live source.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--max-bytes"></a><h3>The <code class="literal">"max-bytes"</code> property</h3>
+<pre class="programlisting">  "max-bytes"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>The maximum number of bytes to queue internally (0 = unlimited).</p>
+<p>Default value: 200000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--max-latency"></a><h3>The <code class="literal">"max-latency"</code> property</h3>
+<pre class="programlisting">  "max-latency"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>The maximum latency (-1 = unlimited).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--min-latency"></a><h3>The <code class="literal">"min-latency"</code> property</h3>
+<pre class="programlisting">  "min-latency"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>The minimum latency (-1 = default).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--size"></a><h3>The <code class="literal">"size"</code> property</h3>
+<pre class="programlisting">  "size"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>The size of the data stream in bytes (-1 if unknown).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--stream-type"></a><h3>The <code class="literal">"stream-type"</code> property</h3>
+<pre class="programlisting">  "stream-type"              <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-appsrc.html#GstAppStreamType"><span class="type">GstAppStreamType</span></a>      : Read / Write</pre>
+<p>the type of the stream.</p>
+<p>Default value: GST_APP_STREAM_TYPE_STREAM</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--emit-signals"></a><h3>The <code class="literal">"emit-signals"</code> property</h3>
+<pre class="programlisting">  "emit-signals"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Emit need-data, enough-data and seek-data signals.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc--min-percent"></a><h3>The <code class="literal">"min-percent"</code> property</h3>
+<pre class="programlisting">  "min-percent"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Emit need-data when queued bytes drops below this percent of max-bytes.</p>
+<p>Allowed values: &lt;= 100</p>
+<p>Default value: 0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-appsrc.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstAppSrc-end-of-stream"></a><h3>The <code class="literal">"end-of-stream"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       user_function                      (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc-enough-data"></a><h3>The <code class="literal">"enough-data"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc-need-data"></a><h3>The <code class="literal">"need-data"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>      arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc-push-buffer"></a><h3>The <code class="literal">"push-buffer"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       user_function                      (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc-seek-data"></a><h3>The <code class="literal">"seek-data"</code> signal</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            user_function                      (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>    arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstappsrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
new file mode 100644
index 0000000..8c8352b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audioconvert</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
+<link rel="next" href="gst-plugins-base-plugins-audiorate.html" title="audiorate">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-alsasrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-audiorate.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-audioconvert.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioconvert.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioconvert.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioconvert.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-audioconvert"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audioconvert.top_of_page"></a>audioconvert</span></h2>
+<p>audioconvert — Convert audio to different formats</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-audioconvert.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioConvert"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert-struct" title="struct GstAudioConvert">GstAudioConvert</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering">GstAudioConvertDithering</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping">GstAudioConvertNoiseShaping</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioconvert.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----GstAudioConvert
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioconvert.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering" title='The "dithering" property'>dithering</a>"                <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering"><span class="type">GstAudioConvertDithering</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping" title='The "noise-shaping" property'>noise-shaping</a>"            <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping"><span class="type">GstAudioConvertNoiseShaping</span></a>  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioconvert.description"></a><h2>Description</h2>
+<p>
+Audioconvert converts raw audio buffers between various possible formats.
+It supports integer to float conversion, width/depth conversion,
+signedness and endianness conversion and channel transformations.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id516683"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
+</pre></div> This pipeline converts audio to 8-bit.  The level element shows that
+the output levels still match the one for a sine wave.
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v -m audiotestsrc ! audioconvert ! vorbisenc ! fakesink silent=TRUE
+</pre></div> The vorbis encoder takes float audio data instead of the integer data
+generated by audiotestsrc.
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-03-02 (0.10.4)
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id514682"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-audioconvert.html#plugin-audioconvert">audioconvert</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Benjamin Otte &lt;otte@gnome.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Converter/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id492892"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)64</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)24, depth=(int)[ 1, 24 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)16, depth=(int)[ 1, 16 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)8, depth=(int)[ 1, 8 ], signed=(boolean){ true, false }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)64</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)24, depth=(int)[ 1, 24 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)16, depth=(int)[ 1, 16 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)8, depth=(int)[ 1, 8 ], signed=(boolean){ true, false }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioconvert.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioConvert-struct"></a><h3>struct GstAudioConvert</h3>
+<pre class="programlisting">struct GstAudioConvert;</pre>
+<p>
+The audioconvert object structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioConvertDithering"></a><h3>enum GstAudioConvertDithering</h3>
+<pre class="programlisting">typedef enum {
+  DITHER_NONE = 0,
+  DITHER_RPDF,
+  DITHER_TPDF,
+  DITHER_TPDF_HF
+} GstAudioConvertDithering;
+</pre>
+<p>
+Set of available dithering methods when converting audio.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="DITHER-NONE:CAPS"></a><span class="term"><code class="literal">DITHER_NONE</code></span></p></td>
+<td>No dithering
+</td>
+</tr>
+<tr>
+<td><p><a name="DITHER-RPDF:CAPS"></a><span class="term"><code class="literal">DITHER_RPDF</code></span></p></td>
+<td>Rectangular dithering
+</td>
+</tr>
+<tr>
+<td><p><a name="DITHER-TPDF:CAPS"></a><span class="term"><code class="literal">DITHER_TPDF</code></span></p></td>
+<td>Triangular dithering (default)
+</td>
+</tr>
+<tr>
+<td><p><a name="DITHER-TPDF-HF:CAPS"></a><span class="term"><code class="literal">DITHER_TPDF_HF</code></span></p></td>
+<td>High frequency triangular dithering
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioConvertNoiseShaping"></a><h3>enum GstAudioConvertNoiseShaping</h3>
+<pre class="programlisting">typedef enum {
+  NOISE_SHAPING_NONE = 0,
+  NOISE_SHAPING_ERROR_FEEDBACK,
+  NOISE_SHAPING_SIMPLE,
+  NOISE_SHAPING_MEDIUM,
+  NOISE_SHAPING_HIGH
+} GstAudioConvertNoiseShaping;
+</pre>
+<p>
+Set of available noise shaping methods
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="NOISE-SHAPING-NONE:CAPS"></a><span class="term"><code class="literal">NOISE_SHAPING_NONE</code></span></p></td>
+<td>No noise shaping (default)
+</td>
+</tr>
+<tr>
+<td><p><a name="NOISE-SHAPING-ERROR-FEEDBACK:CAPS"></a><span class="term"><code class="literal">NOISE_SHAPING_ERROR_FEEDBACK</code></span></p></td>
+<td>Error feedback
+</td>
+</tr>
+<tr>
+<td><p><a name="NOISE-SHAPING-SIMPLE:CAPS"></a><span class="term"><code class="literal">NOISE_SHAPING_SIMPLE</code></span></p></td>
+<td>Simple 2-pole noise shaping
+</td>
+</tr>
+<tr>
+<td><p><a name="NOISE-SHAPING-MEDIUM:CAPS"></a><span class="term"><code class="literal">NOISE_SHAPING_MEDIUM</code></span></p></td>
+<td>Medium 5-pole noise shaping
+</td>
+</tr>
+<tr>
+<td><p><a name="NOISE-SHAPING-HIGH:CAPS"></a><span class="term"><code class="literal">NOISE_SHAPING_HIGH</code></span></p></td>
+<td>High 8-pole noise shaping
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioconvert.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioConvert--dithering"></a><h3>The <code class="literal">"dithering"</code> property</h3>
+<pre class="programlisting">  "dithering"                <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering"><span class="type">GstAudioConvertDithering</span></a>  : Read / Write</pre>
+<p>Selects between different dithering methods.</p>
+<p>Default value: Triangular dithering (default)</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioConvert--noise-shaping"></a><h3>The <code class="literal">"noise-shaping"</code> property</h3>
+<pre class="programlisting">  "noise-shaping"            <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping"><span class="type">GstAudioConvertNoiseShaping</span></a>  : Read / Write</pre>
+<p>Selects between different noise shaping methods.</p>
+<p>Default value: No noise shaping (default)</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
new file mode 100644
index 0000000..8dd4b52
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audiorate</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">
+<link rel="next" href="gst-plugins-base-plugins-audioresample.html" title="audioresample">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-audioconvert.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-audioresample.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-audiorate.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiorate.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiorate.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiorate.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-audiorate"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audiorate.top_of_page"></a>audiorate</span></h2>
+<p>audiorate — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-audiorate.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioRate"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate-struct" title="struct GstAudioRate">GstAudioRate</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstAudioRate
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--add" title='The "add" property'>add</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop" title='The "drop" property'>drop</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--in" title='The "in" property'>in</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--out" title='The "out" property'>out</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--silent" title='The "silent" property'>silent</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--tolerance" title='The "tolerance" property'>tolerance</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--skip-to-first" title='The "skip-to-first" property'>skip-to-first</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.description"></a><h2>Description</h2>
+<p>
+This element takes an incoming stream of timestamped raw audio frames and
+produces a perfect stream by inserting or dropping samples as needed.
+</p>
+<p>
+This operation may be of use to link to elements that require or otherwise
+implicitly assume a perfect stream as they do not store timestamps,
+but derive this by some means (e.g. bitrate for some AVI cases).
+</p>
+<p>
+The properties <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--in" title='The "in" property'><span class="type">"in"</span></a>, <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--out" title='The "out" property'><span class="type">"out"</span></a>, <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--add" title='The "add" property'><span class="type">"add"</span></a>
+and <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop" title='The "drop" property'><span class="type">"drop"</span></a> can be read to obtain information about number of
+input samples, output samples, dropped samples (i.e. the number of unused
+input samples) and inserted samples (i.e. the number of samples added to
+stream).
+</p>
+<p>
+When the <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--silent" title='The "silent" property'><span class="type">"silent"</span></a> property is set to FALSE, a GObject property
+notification will be emitted whenever one of the <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--add" title='The "add" property'><span class="type">"add"</span></a> or
+<a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop" title='The "drop" property'><span class="type">"drop"</span></a> values changes.
+This can potentially cause performance degradation.
+Note that property notification will happen from the streaming thread, so
+applications should be prepared for this.
+</p>
+<p>
+If the <a class="link" href="gst-plugins-base-plugins-audiorate.html#GstAudioRate--tolerance" title='The "tolerance" property'><span class="type">"tolerance"</span></a> property is non-zero, and an incoming buffer's
+timestamp deviates less than the property indicates from what would make a
+'perfect time', then no samples will be added or dropped.
+Note that the output is still guaranteed to be a perfect stream, which means
+that the incoming data is then simply shifted (by less than the indicated
+tolerance) to a perfect time.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id517721"></a><h3>Example pipelines</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v alsasrc ! audiorate ! wavenc ! filesink location=alsa.wav
+</pre></div> Capture audio from an ALSA device, and turn it into a perfect stream
+for saving in a raw audio file.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id517744"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-audiorate.html#plugin-audiorate">audiorate</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id517806"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioRate-struct"></a><h3>struct GstAudioRate</h3>
+<pre class="programlisting">struct GstAudioRate;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioRate--add"></a><h3>The <code class="literal">"add"</code> property</h3>
+<pre class="programlisting">  "add"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of added samples.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--drop"></a><h3>The <code class="literal">"drop"</code> property</h3>
+<pre class="programlisting">  "drop"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of dropped samples.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--in"></a><h3>The <code class="literal">"in"</code> property</h3>
+<pre class="programlisting">  "in"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of input samples.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--out"></a><h3>The <code class="literal">"out"</code> property</h3>
+<pre class="programlisting">  "out"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of output samples.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--silent"></a><h3>The <code class="literal">"silent"</code> property</h3>
+<pre class="programlisting">  "silent"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Don't emit notify for dropped and duplicated frames.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--tolerance"></a><h3>The <code class="literal">"tolerance"</code> property</h3>
+<pre class="programlisting">  "tolerance"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>
+The difference between incoming timestamp and next timestamp must exceed
+the given value for audiorate to add or drop samples.
+</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.10.26</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioRate--skip-to-first"></a><h3>The <code class="literal">"skip-to-first"</code> property</h3>
+<pre class="programlisting">  "skip-to-first"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>
+Don't produce buffers before the first one we receive.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.10.33</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiorate.see-also"></a><h2>See Also</h2>
+<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate"><span class="type">GstVideoRate</span></a>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
new file mode 100644
index 0000000..bf75f41
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audioresample</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-audiorate.html" title="audiorate">
+<link rel="next" href="gst-plugins-base-plugins-audiotestsrc.html" title="audiotestsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-audiorate.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-audiotestsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-audioresample.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioresample.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioresample.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audioresample.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-audioresample"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audioresample.top_of_page"></a>audioresample</span></h2>
+<p>audioresample — Resamples audio</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-audioresample.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioResample"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-audioresample.html#GstAudioResample-struct" title="struct GstAudioResample">GstAudioResample</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioresample.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----GstAudioResample
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioresample.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-audioresample.html#GstAudioResample--filter-length" title='The "filter-length" property'>filter-length</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audioresample.html#GstAudioResample--quality" title='The "quality" property'>quality</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write / Construct
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioresample.description"></a><h2>Description</h2>
+<p>
+audioresample resamples raw audio buffers to different sample rates using
+a configurable windowing function to enhance quality.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id497912"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! alsasink
+</pre></div> Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa.
+To create the Ogg/Vorbis file refer to the documentation of vorbisenc.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id497906"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-audioresample.html#plugin-audioresample">audioresample</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Converter/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id494031"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioresample.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioResample-struct"></a><h3>struct GstAudioResample</h3>
+<pre class="programlisting">struct GstAudioResample;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audioresample.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioResample--filter-length"></a><h3>The <code class="literal">"filter-length"</code> property</h3>
+<pre class="programlisting">  "filter-length"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Length of the resample filter.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 64</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioResample--quality"></a><h3>The <code class="literal">"quality"</code> property</h3>
+<pre class="programlisting">  "quality"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write / Construct</pre>
+<p>Resample quality with 0 being the lowest and 10 being the best.</p>
+<p>Allowed values: [0,10]</p>
+<p>Default value: 4</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
new file mode 100644
index 0000000..fa2b51a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
@@ -0,0 +1,324 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audiotestsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-audioresample.html" title="audioresample">
+<link rel="next" href="gst-plugins-base-plugins-cdparanoiasrc.html" title="cdparanoiasrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-audioresample.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-cdparanoiasrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-audiotestsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiotestsrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiotestsrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-audiotestsrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-audiotestsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audiotestsrc.top_of_page"></a>audiotestsrc</span></h2>
+<p>audiotestsrc — Creates audio test signals of given frequency and volume</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-audiotestsrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstAudioTestSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc-struct" title="struct GstAudioTestSrc">GstAudioTestSrc</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave" title="enum GstAudioTestSrcWave">GstAudioTestSrcWave</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiotestsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----GstAudioTestSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiotestsrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--freq" title='The "freq" property'>freq</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--is-live" title='The "is-live" property'>is-live</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--samplesperbuffer" title='The "samplesperbuffer" property'>samplesperbuffer</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--timestamp-offset" title='The "timestamp-offset" property'>timestamp-offset</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--volume" title='The "volume" property'>volume</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--wave" title='The "wave" property'>wave</a>"                     <a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave" title="enum GstAudioTestSrcWave"><span class="type">GstAudioTestSrcWave</span></a>   : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-pull" title='The "can-activate-pull" property'>can-activate-pull</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-push" title='The "can-activate-push" property'>can-activate-push</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiotestsrc.description"></a><h2>Description</h2>
+<p>
+AudioTestSrc can be used to generate basic audio signals. It support several
+different waveforms and allows to set the base frequency and volume.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id519060"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch audiotestsrc ! audioconvert ! alsasink
+</pre></div> This pipeline produces a sine with default frequency, 440 Hz, and the
+default volume, 0.8 (relative to a maximum 1.0).
+<div class="informalexample"><pre class="programlisting">
+gst-launch audiotestsrc wave=2 freq=200 ! audioconvert ! tee name=t ! queue ! alsasink t. ! queue ! libvisual_lv_scope ! videoconvert ! xvimagesink
+</pre></div> In this example a saw wave is generated. The wave is shown using a
+scope visualizer from libvisual, allowing you to visually verify that
+the saw wave is correct.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id519093"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-audiotestsrc.html#plugin-audiotestsrc">audiotestsrc</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Stefan Kost &lt;ensonic@users.sf.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id519155"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-float, endianness=(int)1234, width=(int){ 32, 64 }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiotestsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstAudioTestSrc-struct"></a><h3>struct GstAudioTestSrc</h3>
+<pre class="programlisting">struct GstAudioTestSrc;</pre>
+<p>
+audiotestsrc object structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrcWave"></a><h3>enum GstAudioTestSrcWave</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUDIO_TEST_SRC_WAVE_SINE,
+  GST_AUDIO_TEST_SRC_WAVE_SQUARE,
+  GST_AUDIO_TEST_SRC_WAVE_SAW,
+  GST_AUDIO_TEST_SRC_WAVE_TRIANGLE,
+  GST_AUDIO_TEST_SRC_WAVE_SILENCE,
+  GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_SINE_TAB,
+  GST_AUDIO_TEST_SRC_WAVE_TICKS,
+  GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_RED_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE
+} GstAudioTestSrcWave;
+</pre>
+<p>
+Different types of supported sound waves.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_SINE</code></span></p></td>
+<td>a sine wave
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_SQUARE</code></span></p></td>
+<td>a square wave
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_SAW</code></span></p></td>
+<td>a saw wave
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_TRIANGLE</code></span></p></td>
+<td>a tringle wave
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_SILENCE</code></span></p></td>
+<td>silence
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE</code></span></p></td>
+<td>white uniform noise
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE</code></span></p></td>
+<td>pink noise
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_SINE_TAB</code></span></p></td>
+<td>sine wave using a table
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_TICKS</code></span></p></td>
+<td>periodic ticks
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE</code></span></p></td>
+<td>white (zero mean) Gaussian noise;  volume sets the standard deviation of the noise in units of the range of values of the sample type, e.g. volume=0.1 produces noise with a standard deviation of 0.1*32767=3277 with 16-bit integer samples, or 0.1*1.0=0.1 with floating-point samples.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_RED_NOISE</code></span></p></td>
+<td>red (brownian) noise
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE</code></span></p></td>
+<td>spectraly inverted pink noise
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS"></a><span class="term"><code class="literal">GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE</code></span></p></td>
+<td>spectraly inverted red (brownian) noise
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-audiotestsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAudioTestSrc--freq"></a><h3>The <code class="literal">"freq"</code> property</h3>
+<pre class="programlisting">  "freq"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Frequency of test signal.</p>
+<p>Allowed values: [0,20000]</p>
+<p>Default value: 440</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--is-live"></a><h3>The <code class="literal">"is-live"</code> property</h3>
+<pre class="programlisting">  "is-live"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to act as a live source.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--samplesperbuffer"></a><h3>The <code class="literal">"samplesperbuffer"</code> property</h3>
+<pre class="programlisting">  "samplesperbuffer"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Number of samples in each outgoing buffer.</p>
+<p>Allowed values: &gt;= 1</p>
+<p>Default value: 1024</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--timestamp-offset"></a><h3>The <code class="literal">"timestamp-offset"</code> property</h3>
+<pre class="programlisting">  "timestamp-offset"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>An offset added to timestamps set on buffers (in ns).</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--volume"></a><h3>The <code class="literal">"volume"</code> property</h3>
+<pre class="programlisting">  "volume"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Volume of test signal.</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--wave"></a><h3>The <code class="literal">"wave"</code> property</h3>
+<pre class="programlisting">  "wave"                     <a class="link" href="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave" title="enum GstAudioTestSrcWave"><span class="type">GstAudioTestSrcWave</span></a>   : Read / Write</pre>
+<p>Oscillator waveform.</p>
+<p>Default value: Sine</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--can-activate-pull"></a><h3>The <code class="literal">"can-activate-pull"</code> property</h3>
+<pre class="programlisting">  "can-activate-pull"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Can activate in pull mode.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioTestSrc--can-activate-push"></a><h3>The <code class="literal">"can-activate-push"</code> property</h3>
+<pre class="programlisting">  "can-activate-push"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Can activate in push mode.</p>
+<p>Default value: TRUE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
new file mode 100644
index 0000000..66a2e75
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>cdparanoiasrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-audiotestsrc.html" title="audiotestsrc">
+<link rel="next" href="gst-plugins-base-plugins-clockoverlay.html" title="clockoverlay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-audiotestsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-clockoverlay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-cdparanoiasrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-cdparanoiasrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-cdparanoiasrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-cdparanoiasrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-cdparanoiasrc.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-cdparanoiasrc.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-cdparanoiasrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-cdparanoiasrc.top_of_page"></a>cdparanoiasrc</span></h2>
+<p>cdparanoiasrc — Read audio from CD in paranoid mode</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstCdParanoiaSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-struct" title="struct GstCdParanoiaSrc">GstCdParanoiaSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcddabasesrc.html#GstCddaBaseSrc">GstCddaBaseSrc</a>
+                                       +----GstCdParanoiaSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstCdParanoiaSrc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--generic-device" title='The "generic-device" property'>generic-device</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--paranoia-mode" title='The "paranoia-mode" property'>paranoia-mode</a>"            <span class="type">GstCdParanoiaMode</span>     : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--read-speed" title='The "read-speed" property'>read-speed</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--search-overlap" title='The "search-overlap" property'>search-overlap</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--cache-size" title='The "cache-size" property'>cache-size</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-transport-error" title='The "transport-error" signal'>transport-error</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-uncorrected-error" title='The "uncorrected-error" signal'>uncorrected-error</a>"                              : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id520071"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-cdparanoia.html#plugin-cdparanoia">cdparanoia</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/File</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id520133"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc-struct"></a><h3>struct GstCdParanoiaSrc</h3>
+<pre class="programlisting">struct GstCdParanoiaSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc--generic-device"></a><h3>The <code class="literal">"generic-device"</code> property</h3>
+<pre class="programlisting">  "generic-device"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Use specified generic scsi device.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc--paranoia-mode"></a><h3>The <code class="literal">"paranoia-mode"</code> property</h3>
+<pre class="programlisting">  "paranoia-mode"            <span class="type">GstCdParanoiaMode</span>     : Read / Write</pre>
+<p>Type of checking to perform.</p>
+<p>Default value: PARANOIA_MODE_FRAGMENT</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc--read-speed"></a><h3>The <code class="literal">"read-speed"</code> property</h3>
+<pre class="programlisting">  "read-speed"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Read from device at specified speed.</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc--search-overlap"></a><h3>The <code class="literal">"search-overlap"</code> property</h3>
+<pre class="programlisting">  "search-overlap"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Force minimum overlap search during verification to n sectors.</p>
+<p>Allowed values: [-1,75]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc--cache-size"></a><h3>The <code class="literal">"cache-size"</code> property</h3>
+<pre class="programlisting">  "cache-size"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Set CD cache size to n sectors (-1 = auto).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-cdparanoiasrc.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc-transport-error"></a><h3>The <code class="literal">"transport-error"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc"><span class="type">GstCdParanoiaSrc</span></a> *gstcdparanoiasrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>              arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>          user_data)             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstcdparanoiasrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCdParanoiaSrc-uncorrected-error"></a><h3>The <code class="literal">"uncorrected-error"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc"><span class="type">GstCdParanoiaSrc</span></a> *gstcdparanoiasrc,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>              arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>          user_data)             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstcdparanoiasrc</code></em> :</span></p></td>
+<td>the object which received the signal.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
new file mode 100644
index 0000000..385561e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>clockoverlay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-cdparanoiasrc.html" title="cdparanoiasrc">
+<link rel="next" href="gst-plugins-base-plugins-decodebin.html" title="decodebin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-cdparanoiasrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-decodebin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-clockoverlay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-clockoverlay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-clockoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-clockoverlay.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-clockoverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-clockoverlay.top_of_page"></a>clockoverlay</span></h2>
+<p>clockoverlay — Overlays the current clock time on a video stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-clockoverlay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstClockOverlay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay-struct" title="struct GstClockOverlay">GstClockOverlay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-clockoverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstBaseTextOverlay
+                           +----GstClockOverlay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-clockoverlay.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay--time-format" title='The "time-format" property'>time-format</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-clockoverlay.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id520875"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-pango.html#plugin-pango">pango</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Tim-Philipp Müller &lt;tim@centricular.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Editor/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id520820"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>video_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-clockoverlay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstClockOverlay-struct"></a><h3>struct GstClockOverlay</h3>
+<pre class="programlisting">struct GstClockOverlay;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-clockoverlay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstClockOverlay--time-format"></a><h3>The <code class="literal">"time-format"</code> property</h3>
+<pre class="programlisting">  "time-format"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Format to use for time and date value, as in strftime.</p>
+<p>Default value: "%H:%M:%S"</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-decodebin.html b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
new file mode 100644
index 0000000..63efb2f
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>decodebin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-clockoverlay.html" title="clockoverlay">
+<link rel="next" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-clockoverlay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-encodebin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-decodebin.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-decodebin.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-decodebin.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-decodebin.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-decodebin.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-decodebin.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-decodebin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-decodebin.top_of_page"></a>decodebin</span></h2>
+<p>decodebin — Autoplug and decode to raw media</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-decodebin.synopsis"></a><h2>Synopsis</h2>
+<a name="GstDecodeBin"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-struct" title="struct GstDecodeBin">GstDecodeBin</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+                           +----GstDecodeBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstDecodeBin implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--threaded" title='The "threaded" property'>threaded</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--sink-caps" title='The "sink-caps" property'>sink-caps</a>"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-new-decoded-pad" title='The "new-decoded-pad" signal'>new-decoded-pad</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-removed-decoded-pad" title='The "removed-decoded-pad" signal'>removed-decoded-pad</a>"                            : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-unknown-type" title='The "unknown-type" signal'>unknown-type</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.description"></a><h2>Description</h2>
+<p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html"><span class="type">GstBin</span></a> that auto-magically constructs a decoding pipeline using available
+decoders and demuxers via auto-plugging.
+</p>
+<p>
+When using decodebin in your application, connect a signal handler to
+<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-new-decoded-pad" title='The "new-decoded-pad" signal'><span class="type">"new-decoded-pad"</span></a> and connect your sinks from within the
+callback function.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+This element is deprecated and no longer supported. You should use the
+<span class="type">uridecodebin</span> or <span class="type">decodebin2</span> element instead (or, even better: <span class="type">playbin2</span>).
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id522627"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-decodebin.html#plugin-decodebin">decodebin</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Bin/Decoder</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id522690"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstDecodeBin-struct"></a><h3>struct GstDecodeBin</h3>
+<pre class="programlisting">struct GstDecodeBin;</pre>
+<p>
+Auto-plugging decoder element structure
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstDecodeBin--threaded"></a><h3>The <code class="literal">"threaded"</code> property</h3>
+<pre class="programlisting">  "threaded"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Use threads.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDecodeBin--sink-caps"></a><h3>The <code class="literal">"sink-caps"</code> property</h3>
+<pre class="programlisting">  "sink-caps"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<p>The caps of the input data. (NULL = use typefind element).</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-decodebin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstDecodeBin-new-decoded-pad"></a><h3>The <code class="literal">"new-decoded-pad"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin"><span class="type">GstDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>       *pad,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>      islast,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal gets emitted as soon as a new pad of the same type as one of
+the valid 'raw' types is added.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The decodebin</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The newly created pad</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>islast</code></em> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if this is the last pad to be added. Deprecated.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDecodeBin-removed-decoded-pad"></a><h3>The <code class="literal">"removed-decoded-pad"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin"><span class="type">GstDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>       *pad,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted when a 'final' caps pad has been removed.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The decodebin</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The pad that was removed</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDecodeBin-unknown-type"></a><h3>The <code class="literal">"unknown-type"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin"><span class="type">GstDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>       *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>      *caps,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted when a pad for which there is no further possible
+decoding is added to the decodebin.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The decodebin</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The new pad containing caps that cannot be resolved to a 'final'
+stream type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> of the pad that cannot be resolved.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-encodebin.html b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
new file mode 100644
index 0000000..42ef3eb
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
@@ -0,0 +1,376 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>encodebin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-decodebin.html" title="decodebin">
+<link rel="next" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-decodebin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videoconvert.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-encodebin.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-encodebin.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-encodebin.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-encodebin.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-encodebin.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-encodebin.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-encodebin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-encodebin.top_of_page"></a>encodebin</span></h2>
+<p>encodebin — Convenience encoding/muxing element</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-encodebin.synopsis"></a><h2>Synopsis</h2>
+<a name="GstEncodeBin"></a><pre class="synopsis">                    <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-struct" title="GstEncodeBin">GstEncodeBin</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+                           +----GstEncodeBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstEncodeBin implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--audio-jitter-tolerance" title='The "audio-jitter-tolerance" property'>audio-jitter-tolerance</a>"   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--avoid-reencoding" title='The "avoid-reencoding" property'>avoid-reencoding</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--profile" title='The "profile" property'>profile</a>"                  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>*   : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-buffers-max" title='The "queue-buffers-max" property'>queue-buffers-max</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-bytes-max" title='The "queue-bytes-max" property'>queue-bytes-max</a>"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-time-max" title='The "queue-time-max" property'>queue-time-max</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad" title='The "request-pad" signal'>request-pad</a>"                                    : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.description"></a><h2>Description</h2>
+<p>
+EncodeBin provides a bin for encoding/muxing various streams according to
+a specified <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>.
+</p>
+<p>
+Based on the profile that was set (via the <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--profile" title='The "profile" property'><span class="type">"profile"</span></a> property),
+EncodeBin will internally select and configure the required elements
+(encoders, muxers, but also audio and video converters) so that you can
+provide it raw or pre-encoded streams of data in input and have your
+encoded/muxed/converted stream in output.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id511302"></a><h3>Features</h3>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+Automatic encoder and muxer selection based on elements available on the
+system.
+</li>
+<li class="listitem">
+Conversion of raw audio/video streams (scaling, framerate conversion,
+colorspace conversion, samplerate conversion) to conform to the profile
+output format.
+</li>
+<li class="listitem">
+Variable number of streams. If the presence property for a stream encoding
+profile is 0, you can request any number of sink pads for it via the
+standard request pad gstreamer API or the <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad" title='The "request-pad" signal'><span class="type">"request-pad"</span></a> action
+signal.
+</li>
+<li class="listitem">
+Avoid reencoding (passthrough). If the input stream is already encoded and is
+compatible with what the <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> expects, then the stream won't
+be re-encoded but just passed through downstream to the muxer or the output.
+</li>
+<li class="listitem">
+Mix pre-encoded and raw streams as input. In addition to the passthrough
+feature above, you can feed both raw audio/video *AND* already-encoded data
+to a pad. <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin"><span class="type">GstEncodeBin</span></a> will take care of passing through the compatible
+segments and re-encoding the segments of media that need encoding.
+</li>
+<li class="listitem">
+Standard behaviour is to use a <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> to have both
+encoding and muxing performed. But you can also provide a single stream
+profile (like <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="type">GstEncodingAudioProfile</span></a>) to only have the encoding done and
+handle the encoded output yourself.
+</li>
+<li class="listitem">
+Audio imperfection corrections. Incoming audio streams can have non perfect
+timestamps (jitter), like the streams coming from ASF files. <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin"><span class="type">GstEncodeBin</span></a>
+will automatically fix those imperfections for you. See
+<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--audio-jitter-tolerance" title='The "audio-jitter-tolerance" property'><span class="type">"audio-jitter-tolerance"</span></a> for more details.
+</li>
+<li class="listitem">
+Variable or Constant video framerate. If your <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> has
+the variableframerate property deactivated (default), then the incoming
+raw video stream will be retimestampped in order to produce a constant
+framerate.
+</li>
+<li class="listitem">
+Cross-boundary re-encoding. When feeding compatible pre-encoded streams that
+fall on segment boundaries, and for supported formats (right now only H263),
+the GOP will be decoded/reencoded when needed to produce an encoded output
+that fits exactly within the request GstSegment.
+</li>
+<li class="listitem">
+Missing plugin support. If a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> is missing to encode/mux to the
+request profile formats, a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> will be posted on the
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>, allowing systems that support the missing-plugin system to offer the
+user a way to install the missing element.
+</li>
+</ul></div>
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id524019"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-encoding.html#plugin-encoding">encoding</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Bin/Encoder</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id524080"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>audio_%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>private_%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>video_%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstEncodeBin-struct"></a><h3>GstEncodeBin</h3>
+<pre class="programlisting">typedef struct _GstEncodeBin GstEncodeBin;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstEncodeBin--audio-jitter-tolerance"></a><h3>The <code class="literal">"audio-jitter-tolerance"</code> property</h3>
+<pre class="programlisting">  "audio-jitter-tolerance"   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Amount of timestamp jitter/imperfection to allow on audio streams before inserting/dropping samples (ns).</p>
+<p>Default value: 20000000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodeBin--avoid-reencoding"></a><h3>The <code class="literal">"avoid-reencoding"</code> property</h3>
+<pre class="programlisting">  "avoid-reencoding"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to re-encode portions of compatible video streams that lay on segment boundaries.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodeBin--profile"></a><h3>The <code class="literal">"profile"</code> property</h3>
+<pre class="programlisting">  "profile"                  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>*   : Read / Write</pre>
+<p>
+The <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> to use. This property must be set before going
+to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a> or higher.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodeBin--queue-buffers-max"></a><h3>The <code class="literal">"queue-buffers-max"</code> property</h3>
+<pre class="programlisting">  "queue-buffers-max"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Max. number of buffers in the queue (0=disable).</p>
+<p>Default value: 200</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodeBin--queue-bytes-max"></a><h3>The <code class="literal">"queue-bytes-max"</code> property</h3>
+<pre class="programlisting">  "queue-bytes-max"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Max. amount of data in the queue (bytes, 0=disable).</p>
+<p>Default value: 10485760</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstEncodeBin--queue-time-max"></a><h3>The <code class="literal">"queue-time-max"</code> property</h3>
+<pre class="programlisting">  "queue-time-max"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Max. amount of data in the queue (in ns, 0=disable).</p>
+<p>Default value: 1000000000</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-encodebin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstEncodeBin-request-pad"></a><h3>The <code class="literal">"request-pad"</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*             user_function                      (<a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin"><span class="type">GstEncodeBin</span></a> *encodebin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>      *caps,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>      user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Use this method to request an unused sink request <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> that can take the
+provided <em class="parameter"><code>caps</code></em> as input. You must release the pad with
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-release-request-pad"><code class="function">gst_element_release_request_pad()</code></a> when you are done with it.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>encodebin</code></em> :</span></p></td>
+<td>a <a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin"><span class="type">GstEncodeBin</span></a> instance</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> could be
+created or is available.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-gdpdepay.html b/docs/plugins/html/gst-plugins-base-plugins-gdpdepay.html
new file mode 100644
index 0000000..a811aa9
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-gdpdepay.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gdpdepay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
+<link rel="next" href="gst-plugins-base-plugins-gdppay.html" title="gdppay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-videoconvert.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-gdppay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-gdpdepay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-gdpdepay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-gdpdepay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-gdpdepay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-gdpdepay.top_of_page"></a>gdpdepay</span></h2>
+<p>gdpdepay — Depayloads GStreamer Data Protocol buffers</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-gdpdepay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGDPDepay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-gdpdepay.html#GstGDPDepay-struct" title="struct GstGDPDepay">GstGDPDepay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdpdepay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstGDPDepay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdpdepay.description"></a><h2>Description</h2>
+<p>
+This element depayloads GStreamer Data Protocol buffers back to deserialized
+buffers and events.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id477795"></a><div class="informalexample"><pre class="programlisting">
+gst-launch -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink
+</pre></div> This pipeline plays back a serialized video stream as created in the
+example for gdppay.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id505139"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gdp.html#plugin-gdp">gdp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>GDP/Depayloader</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id498695"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>application/x-gdp</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdpdepay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGDPDepay-struct"></a><h3>struct GstGDPDepay</h3>
+<pre class="programlisting">struct GstGDPDepay;</pre>
+<p>
+Private gdpdepay element structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdpdepay.see-also"></a><h2>See Also</h2>
+gdppay
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-gdppay.html b/docs/plugins/html/gst-plugins-base-plugins-gdppay.html
new file mode 100644
index 0000000..7f936c7
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-gdppay.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gdppay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-gdpdepay.html" title="gdpdepay">
+<link rel="next" href="gst-plugins-base-plugins-giosink.html" title="giosink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-gdpdepay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-giosink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-gdppay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-gdppay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-gdppay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-gdppay.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-gdppay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-gdppay.top_of_page"></a>gdppay</span></h2>
+<p>gdppay — Payloads GStreamer Data Protocol buffers</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-gdppay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGDPPay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-gdppay.html#GstGDPPay-struct" title="struct GstGDPPay">GstGDPPay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstGDPPay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-header" title='The "crc-header" property'>crc-header</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-payload" title='The "crc-payload" property'>crc-payload</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-gdppay.html#GstGDPPay--version" title='The "version" property'>version</a>"                  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-gstdataprotocol.html#GstDPVersion"><span class="type">GstDPVersion</span></a>          : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.description"></a><h2>Description</h2>
+<p>
+This element payloads GStreamer buffers and events using the
+GStreamer Data Protocol.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id497584"></a><div class="informalexample"><pre class="programlisting">
+gst-launch -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp
+</pre></div> This pipeline creates a serialized video stream that can be played back
+with the example shown in gdpdepay.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id504604"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gdp.html#plugin-gdp">gdp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>GDP/Payloader</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id521730"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>application/x-gdp</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGDPPay-struct"></a><h3>struct GstGDPPay</h3>
+<pre class="programlisting">struct GstGDPPay;</pre>
+<p>
+Private gdppay element structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGDPPay--crc-header"></a><h3>The <code class="literal">"crc-header"</code> property</h3>
+<pre class="programlisting">  "crc-header"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Calculate and store a CRC checksum on the header.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGDPPay--crc-payload"></a><h3>The <code class="literal">"crc-payload"</code> property</h3>
+<pre class="programlisting">  "crc-payload"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Calculate and store a CRC checksum on the payload.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGDPPay--version"></a><h3>The <code class="literal">"version"</code> property</h3>
+<pre class="programlisting">  "version"                  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-gstdataprotocol.html#GstDPVersion"><span class="type">GstDPVersion</span></a>          : Read / Write</pre>
+<p>Version of the GStreamer Data Protocol.</p>
+<p>Default value: GST_DP_VERSION_1_0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-gdppay.see-also"></a><h2>See Also</h2>
+gdpdepay
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosink.html b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
new file mode 100644
index 0000000..31f0cf0
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>giosink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-gdppay.html" title="gdppay">
+<link rel="next" href="gst-plugins-base-plugins-giosrc.html" title="giosrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-gdppay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-giosrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-giosink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosink.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-giosink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giosink.top_of_page"></a>giosink</span></h2>
+<p>giosink — Write to any GIO-supported location</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-giosink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGioSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-giosink.html#GstGioSink-struct" title="struct GstGioSink">GstGioSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstGioBaseSink
+                                 +----GstGioSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGioSink implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-giosink.html#GstGioSink--location" title='The "location" property'>location</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-giosink.html#GstGioSink--file" title='The "file" property'>file</a>"                     <a href="http://library.gnome.org/devel/gio/unstable/GFile.html"><span class="type">GFile</span></a>*                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id488791"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gio.html#plugin-gio">gio</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>René Stadler &lt;mail@renestadler.de&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/File</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id525824"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGioSink-struct"></a><h3>struct GstGioSink</h3>
+<pre class="programlisting">struct GstGioSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGioSink--location"></a><h3>The <code class="literal">"location"</code> property</h3>
+<pre class="programlisting">  "location"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>URI location to write to.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGioSink--file"></a><h3>The <code class="literal">"file"</code> property</h3>
+<pre class="programlisting">  "file"                     <a href="http://library.gnome.org/devel/gio/unstable/GFile.html"><span class="type">GFile</span></a>*                : Read / Write</pre>
+<p>GFile to write to.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosrc.html b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
new file mode 100644
index 0000000..5532348
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>giosrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-giosink.html" title="giosink">
+<link rel="next" href="gst-plugins-base-plugins-giostreamsink.html" title="giostreamsink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-giosink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-giostreamsink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-giosrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giosrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-giosrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giosrc.top_of_page"></a>giosrc</span></h2>
+<p>giosrc — Read from any GIO-supported location</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-giosrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGioSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-giosrc.html#GstGioSrc-struct" title="struct GstGioSrc">GstGioSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----GstGioBaseSrc
+                                 +----GstGioSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstGioSrc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-giosrc.html#GstGioSrc--location" title='The "location" property'>location</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-giosrc.html#GstGioSrc--file" title='The "file" property'>file</a>"                     <a href="http://library.gnome.org/devel/gio/unstable/GFile.html"><span class="type">GFile</span></a>*                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id488494"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gio.html#plugin-gio">gio</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>René Stadler &lt;mail@renestadler.de&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/File</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id525447"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGioSrc-struct"></a><h3>struct GstGioSrc</h3>
+<pre class="programlisting">struct GstGioSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giosrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGioSrc--location"></a><h3>The <code class="literal">"location"</code> property</h3>
+<pre class="programlisting">  "location"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>URI location to read from.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstGioSrc--file"></a><h3>The <code class="literal">"file"</code> property</h3>
+<pre class="programlisting">  "file"                     <a href="http://library.gnome.org/devel/gio/unstable/GFile.html"><span class="type">GFile</span></a>*                : Read / Write</pre>
+<p>GFile to read from.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
new file mode 100644
index 0000000..fffd1b3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>giostreamsink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-giosrc.html" title="giosrc">
+<link rel="next" href="gst-plugins-base-plugins-giostreamsrc.html" title="giostreamsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-giosrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-giostreamsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-giostreamsink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-giostreamsink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giostreamsink.top_of_page"></a>giostreamsink</span></h2>
+<p>giostreamsink — Write to any GIO stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-giostreamsink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGioStreamSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink-struct" title="struct GstGioStreamSink">GstGioStreamSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstGioBaseSink
+                                 +----GstGioStreamSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink--stream" title='The "stream" property'>stream</a>"                   <a href="http://library.gnome.org/devel/gio/unstable/GOutputStream.html"><span class="type">GOutputStream</span></a>*        : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsink.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id521076"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gio.html#plugin-gio">gio</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id525229"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGioStreamSink-struct"></a><h3>struct GstGioStreamSink</h3>
+<pre class="programlisting">struct GstGioStreamSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGioStreamSink--stream"></a><h3>The <code class="literal">"stream"</code> property</h3>
+<pre class="programlisting">  "stream"                   <a href="http://library.gnome.org/devel/gio/unstable/GOutputStream.html"><span class="type">GOutputStream</span></a>*        : Read / Write</pre>
+<p>Stream to write to.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
new file mode 100644
index 0000000..ca196cb
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>giostreamsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-giostreamsink.html" title="giostreamsink">
+<link rel="next" href="gst-plugins-base-plugins-multifdsink.html" title="multifdsink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-giostreamsink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-multifdsink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-giostreamsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-giostreamsrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-giostreamsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giostreamsrc.top_of_page"></a>giostreamsrc</span></h2>
+<p>giostreamsrc — Read from any GIO stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-giostreamsrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstGioStreamSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc-struct" title="struct GstGioStreamSrc">GstGioStreamSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----GstGioBaseSrc
+                                 +----GstGioStreamSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc--stream" title='The "stream" property'>stream</a>"                   <a href="http://library.gnome.org/devel/gio/unstable/GInputStream.html"><span class="type">GInputStream</span></a>*         : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsrc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id527868"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-gio.html#plugin-gio">gio</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id480417"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstGioStreamSrc-struct"></a><h3>struct GstGioStreamSrc</h3>
+<pre class="programlisting">struct GstGioStreamSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-giostreamsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstGioStreamSrc--stream"></a><h3>The <code class="literal">"stream"</code> property</h3>
+<pre class="programlisting">  "stream"                   <a href="http://library.gnome.org/devel/gio/unstable/GInputStream.html"><span class="type">GInputStream</span></a>*         : Read / Write</pre>
+<p>Stream to read from.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
new file mode 100644
index 0000000..2730e30
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
@@ -0,0 +1,935 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>multifdsink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-giostreamsrc.html" title="giostreamsrc">
+<link rel="next" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-giostreamsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-oggdemux.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-multifdsink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-multifdsink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-multifdsink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-multifdsink.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-multifdsink.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-multifdsink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-multifdsink.top_of_page"></a>multifdsink</span></h2>
+<p>multifdsink — Send data to multiple filedescriptors</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-multifdsink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstMultiFdSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-struct" title="struct GstMultiFdSink">GstMultiFdSink</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy" title="enum GstRecoverPolicy">GstRecoverPolicy</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod" title="enum GstSyncMethod">GstSyncMethod</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstClientStatus" title="enum GstClientStatus">GstClientStatus</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType">GstTCPUnitType</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstMultiFdSink
+                                 +----<a class="link" href="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink">GstTCPServerSink</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-max" title='The "buffers-max" property'>buffers-max</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-queued" title='The "buffers-queued" property'>buffers-queued</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-soft-max" title='The "buffers-soft-max" property'>buffers-soft-max</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-served" title='The "bytes-served" property'>bytes-served</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-to-serve" title='The "bytes-to-serve" property'>bytes-to-serve</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--mode" title='The "mode" property'>mode</a>"                     <span class="type">GstFDSetMode</span>          : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--protocol" title='The "protocol" property'>protocol</a>"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--recover-policy" title='The "recover-policy" property'>recover-policy</a>"           <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy" title="enum GstRecoverPolicy"><span class="type">GstRecoverPolicy</span></a>      : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-clients" title='The "sync-clients" property'>sync-clients</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-method" title='The "sync-method" property'>sync-method</a>"              <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod" title="enum GstSyncMethod"><span class="type">GstSyncMethod</span></a>         : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--timeout" title='The "timeout" property'>timeout</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-min" title='The "buffers-min" property'>buffers-min</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-unit" title='The "burst-unit" property'>burst-unit</a>"               <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>        : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-value" title='The "burst-value" property'>burst-value</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-min" title='The "bytes-min" property'>bytes-min</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--time-min" title='The "time-min" property'>time-min</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--unit-type" title='The "unit-type" property'>unit-type</a>"                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>        : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-max" title='The "units-max" property'>units-max</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-soft-max" title='The "units-soft-max" property'>units-soft-max</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--qos-dscp" title='The "qos-dscp" property'>qos-dscp</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--handle-read" title='The "handle-read" property'>handle-read</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--resend-streamheader" title='The "resend-streamheader" property'>resend-streamheader</a>"      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--num-fds" title='The "num-fds" property'>num-fds</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add" title='The "add" signal'>add</a>"                                            : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-clear" title='The "clear" signal'>clear</a>"                                          : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-added" title='The "client-added" signal'>client-added</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title='The "client-removed" signal'>client-removed</a>"                                 : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-get-stats" title='The "get-stats" signal'>get-stats</a>"                                      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove" title='The "remove" signal'>remove</a>"                                         : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed" title='The "client-fd-removed" signal'>client-fd-removed</a>"                              : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full" title='The "add-full" signal'>add-full</a>"                                       : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush" title='The "remove-flush" signal'>remove-flush</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.description"></a><h2>Description</h2>
+<p>
+This plugin writes incoming data to a set of file descriptors. The
+file descriptors can be added to multifdsink by emitting the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add" title='The "add" signal'><span class="type">"add"</span></a> signal. 
+For each descriptor added, the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-added" title='The "client-added" signal'><span class="type">"client-added"</span></a> signal will be called.
+</p>
+<p>
+As of version 0.10.8, a client can also be added with the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full" title='The "add-full" signal'><span class="type">"add-full"</span></a> signal
+that allows for more control over what and how much data a client 
+initially receives.
+</p>
+<p>
+Clients can be removed from multifdsink by emitting the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove" title='The "remove" signal'><span class="type">"remove"</span></a> signal. For
+each descriptor removed, the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title='The "client-removed" signal'><span class="type">"client-removed"</span></a> signal will be called. The
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title='The "client-removed" signal'><span class="type">"client-removed"</span></a> signal can also be fired when multifdsink decides that a
+client is not active anymore or, depending on the value of the
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--recover-policy" title='The "recover-policy" property'><span class="type">"recover-policy"</span></a> property, if the client is reading too slowly.
+In all cases, multifdsink will never close a file descriptor itself.
+The user of multifdsink is responsible for closing all file descriptors.
+This can for example be done in response to the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed" title='The "client-fd-removed" signal'><span class="type">"client-fd-removed"</span></a> signal.
+Note that multifdsink still has a reference to the file descriptor when the
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title='The "client-removed" signal'><span class="type">"client-removed"</span></a> signal is emitted, so that "get-stats" can be performed on
+the descriptor; it is therefore not safe to close the file descriptor in
+the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title='The "client-removed" signal'><span class="type">"client-removed"</span></a> signal handler, and you should use the 
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed" title='The "client-fd-removed" signal'><span class="type">"client-fd-removed"</span></a> signal to safely close the fd.
+</p>
+<p>
+Multifdsink internally keeps a queue of the incoming buffers and uses a
+separate thread to send the buffers to the clients. This ensures that no
+client write can block the pipeline and that clients can read with different
+speeds.
+</p>
+<p>
+When adding a client to multifdsink, the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-method" title='The "sync-method" property'><span class="type">"sync-method"</span></a> property will define
+which buffer in the queued buffers will be sent first to the client. Clients 
+can be sent the most recent buffer (which might not be decodable by the 
+client if it is not a keyframe), the next keyframe received in 
+multifdsink (which can take some time depending on the keyframe rate), or the
+last received keyframe (which will cause a simple burst-on-connect). 
+Multifdsink will always keep at least one keyframe in its internal buffers
+when the sync-mode is set to latest-keyframe.
+</p>
+<p>
+As of version 0.10.8, there are additional values for the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-method" title='The "sync-method" property'><span class="type">"sync-method"</span></a> 
+property to allow finer control over burst-on-connect behaviour. By selecting
+the 'burst' method a minimum burst size can be chosen, 'burst-keyframe'
+additionally requires that the burst begin with a keyframe, and 
+'burst-with-keyframe' attempts to burst beginning with a keyframe, but will
+prefer a minimum burst size even if it requires not starting with a keyframe.
+</p>
+<p>
+Multifdsink can be instructed to keep at least a minimum amount of data
+expressed in time or byte units in its internal queues with the the 
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--time-min" title='The "time-min" property'><span class="type">"time-min"</span></a> and <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-min" title='The "bytes-min" property'><span class="type">"bytes-min"</span></a> properties respectively.
+These properties are useful if the application adds clients with the 
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full" title='The "add-full" signal'><span class="type">"add-full"</span></a> signal to make sure that a burst connect can
+actually be honored. 
+</p>
+<p>
+When streaming data, clients are allowed to read at a different rate than
+the rate at which multifdsink receives data. If the client is reading too
+fast, no data will be send to the client until multifdsink receives more
+data. If the client, however, reads too slowly, data for that client will be 
+queued up in multifdsink. Two properties control the amount of data 
+(buffers) that is queued in multifdsink: <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-max" title='The "buffers-max" property'><span class="type">"buffers-max"</span></a> and 
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-soft-max" title='The "buffers-soft-max" property'><span class="type">"buffers-soft-max"</span></a>. A client that falls behind by
+<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-max" title='The "buffers-max" property'><span class="type">"buffers-max"</span></a> is removed from multifdsink forcibly.
+</p>
+<p>
+A client with a lag of at least <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-soft-max" title='The "buffers-soft-max" property'><span class="type">"buffers-soft-max"</span></a> enters the recovery
+procedure which is controlled with the <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--recover-policy" title='The "recover-policy" property'><span class="type">"recover-policy"</span></a> property.
+A recover policy of NONE will do nothing, RESYNC_LATEST will send the most recently
+received buffer as the next buffer for the client, RESYNC_SOFT_LIMIT
+positions the client to the soft limit in the buffer queue and
+RESYNC_KEYFRAME positions the client at the most recent keyframe in the
+buffer queue.
+</p>
+<p>
+multifdsink will by default synchronize on the clock before serving the 
+buffers to the clients. This behaviour can be disabled by setting the sync 
+property to FALSE. Multifdsink will by default not do QoS and will never
+drop late buffers.
+</p>
+<p>
+Last reviewed on 2006-09-12 (0.10.10)
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id528543"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id528604"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstMultiFdSink-struct"></a><h3>struct GstMultiFdSink</h3>
+<pre class="programlisting">struct GstMultiFdSink;</pre>
+<p>
+The multifdsink object structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstRecoverPolicy"></a><h3>enum GstRecoverPolicy</h3>
+<pre class="programlisting">typedef enum {
+  GST_RECOVER_POLICY_NONE,
+  GST_RECOVER_POLICY_RESYNC_LATEST,
+  GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT,
+  GST_RECOVER_POLICY_RESYNC_KEYFRAME
+} GstRecoverPolicy;
+</pre>
+<p>
+Possible values for the recovery procedure to use when a client consumes
+data too slow and has a backlag of more that soft-limit buffers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-RECOVER-POLICY-NONE:CAPS"></a><span class="term"><code class="literal">GST_RECOVER_POLICY_NONE</code></span></p></td>
+<td>no recovering is done
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RECOVER-POLICY-RESYNC-LATEST:CAPS"></a><span class="term"><code class="literal">GST_RECOVER_POLICY_RESYNC_LATEST</code></span></p></td>
+<td>client is moved to last buffer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS"></a><span class="term"><code class="literal">GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT</code></span></p></td>
+<td>client is moved to the soft limit
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS"></a><span class="term"><code class="literal">GST_RECOVER_POLICY_RESYNC_KEYFRAME</code></span></p></td>
+<td>client is moved to latest keyframe
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSyncMethod"></a><h3>enum GstSyncMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_SYNC_METHOD_LATEST,
+  GST_SYNC_METHOD_NEXT_KEYFRAME,
+  GST_SYNC_METHOD_LATEST_KEYFRAME,
+  GST_SYNC_METHOD_BURST,
+  GST_SYNC_METHOD_BURST_KEYFRAME,
+  GST_SYNC_METHOD_BURST_WITH_KEYFRAME
+} GstSyncMethod;
+</pre>
+<p>
+This enum defines the selection of the first buffer that is sent
+to a new client.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-LATEST:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_LATEST</code></span></p></td>
+<td>client receives most recent buffer
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_NEXT_KEYFRAME</code></span></p></td>
+<td>client receives next keyframe
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_LATEST_KEYFRAME</code></span></p></td>
+<td>client receives latest keyframe (burst)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-BURST:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_BURST</code></span></p></td>
+<td>client receives specific amount of data
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-BURST-KEYFRAME:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_BURST_KEYFRAME</code></span></p></td>
+<td>client receives specific amount of data 
+                                       starting from latest keyframe
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS"></a><span class="term"><code class="literal">GST_SYNC_METHOD_BURST_WITH_KEYFRAME</code></span></p></td>
+<td>client receives specific amount of data from
+                                       a keyframe, or if there is not enough data after
+                                       the keyframe, starting before the keyframe
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstClientStatus"></a><h3>enum GstClientStatus</h3>
+<pre class="programlisting">typedef enum {
+  GST_CLIENT_STATUS_OK          = 0,
+  GST_CLIENT_STATUS_CLOSED      = 1,
+  GST_CLIENT_STATUS_REMOVED     = 2,
+  GST_CLIENT_STATUS_SLOW        = 3,
+  GST_CLIENT_STATUS_ERROR       = 4,
+  GST_CLIENT_STATUS_DUPLICATE   = 5,
+  GST_CLIENT_STATUS_FLUSHING    = 6
+} GstClientStatus;
+</pre>
+<p>
+This specifies the reason why a client was removed from
+multifdsink and is received in the "client-removed" signal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-OK:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_OK</code></span></p></td>
+<td>client is ok
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-CLOSED:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_CLOSED</code></span></p></td>
+<td>client closed the socket
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-REMOVED:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_REMOVED</code></span></p></td>
+<td>client is removed
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-SLOW:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_SLOW</code></span></p></td>
+<td>client is too slow
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-ERROR:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_ERROR</code></span></p></td>
+<td>client is in error
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-DUPLICATE:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_DUPLICATE</code></span></p></td>
+<td>same client added twice
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-CLIENT-STATUS-FLUSHING:CAPS"></a><span class="term"><code class="literal">GST_CLIENT_STATUS_FLUSHING</code></span></p></td>
+<td>client is flushing out the remaining buffers.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPUnitType"></a><h3>enum GstTCPUnitType</h3>
+<pre class="programlisting">typedef enum {
+  GST_TCP_UNIT_TYPE_UNDEFINED,
+  GST_TCP_UNIT_TYPE_BUFFERS,
+  GST_TCP_UNIT_TYPE_TIME,
+  GST_TCP_UNIT_TYPE_BYTES
+} GstTCPUnitType;
+</pre>
+<p>
+The units used to specify limits.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-TCP-UNIT-TYPE-UNDEFINED:CAPS"></a><span class="term"><code class="literal">GST_TCP_UNIT_TYPE_UNDEFINED</code></span></p></td>
+<td>undefined
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TCP-UNIT-TYPE-BUFFERS:CAPS"></a><span class="term"><code class="literal">GST_TCP_UNIT_TYPE_BUFFERS</code></span></p></td>
+<td>buffers
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TCP-UNIT-TYPE-TIME:CAPS"></a><span class="term"><code class="literal">GST_TCP_UNIT_TYPE_TIME</code></span></p></td>
+<td>timeunits (in nanoseconds)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-TCP-UNIT-TYPE-BYTES:CAPS"></a><span class="term"><code class="literal">GST_TCP_UNIT_TYPE_BYTES</code></span></p></td>
+<td>bytes
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstMultiFdSink--buffers-max"></a><h3>The <code class="literal">"buffers-max"</code> property</h3>
+<pre class="programlisting">  "buffers-max"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>max number of buffers to queue for a client (-1 = no limit).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--buffers-queued"></a><h3>The <code class="literal">"buffers-queued"</code> property</h3>
+<pre class="programlisting">  "buffers-queued"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read</pre>
+<p>Number of buffers currently queued.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--buffers-soft-max"></a><h3>The <code class="literal">"buffers-soft-max"</code> property</h3>
+<pre class="programlisting">  "buffers-soft-max"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Recover client when going over this limit (-1 = no limit).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--bytes-served"></a><h3>The <code class="literal">"bytes-served"</code> property</h3>
+<pre class="programlisting">  "bytes-served"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Total number of bytes send to all clients.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--bytes-to-serve"></a><h3>The <code class="literal">"bytes-to-serve"</code> property</h3>
+<pre class="programlisting">  "bytes-to-serve"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of bytes received to serve to clients.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--mode"></a><h3>The <code class="literal">"mode"</code> property</h3>
+<pre class="programlisting">  "mode"                     <span class="type">GstFDSetMode</span>          : Read / Write</pre>
+<p>The mode for selecting activity on the fds (deprecated).</p>
+<p>Default value: Poll</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--protocol"></a><h3>The <code class="literal">"protocol"</code> property</h3>
+<pre class="programlisting">  "protocol"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write</pre>
+<p>The protocol to wrap data in. GDP protocol here is deprecated. Please use gdppay element.</p>
+<p>Default value: GST_TCP_PROTOCOL_NONE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--recover-policy"></a><h3>The <code class="literal">"recover-policy"</code> property</h3>
+<pre class="programlisting">  "recover-policy"           <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy" title="enum GstRecoverPolicy"><span class="type">GstRecoverPolicy</span></a>      : Read / Write</pre>
+<p>How to recover when client reaches the soft max.</p>
+<p>Default value: Do not try to recover</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--sync-clients"></a><h3>The <code class="literal">"sync-clients"</code> property</h3>
+<pre class="programlisting">  "sync-clients"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>(DEPRECATED) Sync clients to a keyframe.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--sync-method"></a><h3>The <code class="literal">"sync-method"</code> property</h3>
+<pre class="programlisting">  "sync-method"              <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod" title="enum GstSyncMethod"><span class="type">GstSyncMethod</span></a>         : Read / Write</pre>
+<p>How to sync new clients to the stream.</p>
+<p>Default value: Serve starting from the latest buffer</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--timeout"></a><h3>The <code class="literal">"timeout"</code> property</h3>
+<pre class="programlisting">  "timeout"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Maximum inactivity timeout in nanoseconds for a client (0 = no limit).</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--buffers-min"></a><h3>The <code class="literal">"buffers-min"</code> property</h3>
+<pre class="programlisting">  "buffers-min"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>min number of buffers to queue (-1 = as few as possible).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--burst-unit"></a><h3>The <code class="literal">"burst-unit"</code> property</h3>
+<pre class="programlisting">  "burst-unit"               <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>        : Read / Write</pre>
+<p>The format of the burst units (when sync-method is burst[[-with]-keyframe]).</p>
+<p>Default value: Undefined</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--burst-value"></a><h3>The <code class="literal">"burst-value"</code> property</h3>
+<pre class="programlisting">  "burst-value"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>The amount of burst expressed in burst-unit.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--bytes-min"></a><h3>The <code class="literal">"bytes-min"</code> property</h3>
+<pre class="programlisting">  "bytes-min"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>min number of bytes to queue (-1 = as little as possible).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--time-min"></a><h3>The <code class="literal">"time-min"</code> property</h3>
+<pre class="programlisting">  "time-min"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>min number of time to queue (-1 = as little as possible).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--unit-type"></a><h3>The <code class="literal">"unit-type"</code> property</h3>
+<pre class="programlisting">  "unit-type"                <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>        : Read / Write</pre>
+<p>The unit to measure the max/soft-max/queued properties.</p>
+<p>Default value: Buffers</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--units-max"></a><h3>The <code class="literal">"units-max"</code> property</h3>
+<pre class="programlisting">  "units-max"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>max number of units to queue (-1 = no limit).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--units-soft-max"></a><h3>The <code class="literal">"units-soft-max"</code> property</h3>
+<pre class="programlisting">  "units-soft-max"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Recover client when going over this limit (-1 = no limit).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--qos-dscp"></a><h3>The <code class="literal">"qos-dscp"</code> property</h3>
+<pre class="programlisting">  "qos-dscp"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Quality of Service, differentiated services code point (-1 default).</p>
+<p>Allowed values: [-1,63]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--handle-read"></a><h3>The <code class="literal">"handle-read"</code> property</h3>
+<pre class="programlisting">  "handle-read"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Handle client reads and discard the data.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--resend-streamheader"></a><h3>The <code class="literal">"resend-streamheader"</code> property</h3>
+<pre class="programlisting">  "resend-streamheader"      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Resend the streamheader if it changes in the caps.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink--num-fds"></a><h3>The <code class="literal">"num-fds"</code> property</h3>
+<pre class="programlisting">  "num-fds"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read</pre>
+<p>The current number of client file descriptors.</p>
+<p>Default value: 0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstMultiFdSink-add"></a><h3>The <code class="literal">"add"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Hand the given open file descriptor to multifdsink to write to.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor to add to multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-clear"></a><h3>The <code class="literal">"clear"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Remove all file descriptors from multifdsink.  Since multifdsink did not
+open fd's itself, it does not explicitly close the fd.  The application
+should do so by connecting to the client-fd-removed callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-client-added"></a><h3>The <code class="literal">"client-added"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+The given file descriptor was added to multifdsink. This signal will
+be emitted from the streaming thread so application should be prepared
+for that.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element that emitted this signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor that was added to multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-client-removed"></a><h3>The <code class="literal">"client-removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstClientStatus" title="enum GstClientStatus"><span class="type">GstClientStatus</span></a> status,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+The given file descriptor is about to be removed from multifdsink. This
+signal will be emitted from the streaming thread so applications should
+be prepared for that.
+</p>
+<p>
+<em class="parameter"><code>gstmultifdsink</code></em> still holds a handle to <em class="parameter"><code>fd</code></em> so it is possible to call
+the get-stats signal from this callback. For the same reason it is
+not safe to <code class="function">close()</code> and reuse <em class="parameter"><code>fd</code></em> in this callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element that emitted this signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor that is to be removed from multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>status</code></em> :</span></p></td>
+<td>the reason why the client was removed</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-get-stats"></a><h3>The <code class="literal">"get-stats"</code> signal</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*        user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Get statistics about <em class="parameter"><code>fd</code></em>. This function returns a GValueArray to ease
+automatic wrapping for bindings.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor to get stats of from multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a GValueArray with the statistics. The array contains guint64
+values that represent respectively: total number of bytes sent, time
+when the client was added, time when the client was
+disconnected/removed, time the client is/was active, last activity
+time (in epoch seconds), number of buffers dropped.
+All times are expressed in nanoseconds (GstClockTime).
+The array can be 0-length if the client was not found.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-remove"></a><h3>The <code class="literal">"remove"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Remove the given open file descriptor from multifdsink.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor to remove from multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-client-fd-removed"></a><h3>The <code class="literal">"client-fd-removed"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+The given file descriptor was removed from multifdsink. This signal will
+be emitted from the streaming thread so applications should be prepared
+for that.
+</p>
+<p>
+In this callback, <em class="parameter"><code>gstmultifdsink</code></em> has removed all the information
+associated with <em class="parameter"><code>fd</code></em> and it is therefore not possible to call get-stats
+with <em class="parameter"><code>fd</code></em>. It is however safe to <code class="function">close()</code> and reuse <em class="parameter"><code>fd</code></em> in the callback.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element that emitted this signal</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor that was removed from multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.7</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-add-full"></a><h3>The <code class="literal">"add-full"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod" title="enum GstSyncMethod"><span class="type">GstSyncMethod</span></a>   sync,
+                                                        <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>  unit_type_min,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>         value_min,
+                                                        <a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType" title="enum GstTCPUnitType"><span class="type">GstTCPUnitType</span></a>  unit_type_max,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>         value_max,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Hand the given open file descriptor to multifdsink to write to and
+specify the burst parameters for the new connection.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor to add to multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sync</code></em> :</span></p></td>
+<td>the sync method to use</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>unit_type_min</code></em> :</span></p></td>
+<td>the unit-type of <em class="parameter"><code>value_min</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value_min</code></em> :</span></p></td>
+<td>the minimum amount of data to burst expressed in
+<em class="parameter"><code>unit_type_min</code></em> units.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>unit_type_max</code></em> :</span></p></td>
+<td>the unit-type of <em class="parameter"><code>value_max</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value_max</code></em> :</span></p></td>
+<td>the maximum amount of data to burst expressed in
+<em class="parameter"><code>unit_type_max</code></em> units.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiFdSink-remove-flush"></a><h3>The <code class="literal">"remove-flush"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink"><span class="type">GstMultiFdSink</span></a> *gstmultifdsink,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>            fd,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS"><code class="literal">Action</code></a></pre>
+<p>
+Remove the given open file descriptor from multifdsink after flushing all
+the pending data to the fd.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gstmultifdsink</code></em> :</span></p></td>
+<td>the multifdsink element to emit this signal on</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>the file descriptor to remove from multifdsink</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-multifdsink.see-also"></a><h2>See Also</h2>
+tcpserversink
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
new file mode 100644
index 0000000..dc47472
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>oggdemux</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-multifdsink.html" title="multifdsink">
+<link rel="next" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-multifdsink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-oggmux.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-oggdemux.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggdemux.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggdemux.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-oggdemux"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggdemux.top_of_page"></a>oggdemux</span></h2>
+<p>oggdemux — demux ogg streams (info about ogg: http://xiph.org)</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-oggdemux.synopsis"></a><h2>Synopsis</h2>
+<a name="GstOggDemux"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-oggdemux.html#GstOggDemux-struct" title="struct GstOggDemux">GstOggDemux</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggdemux.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstOggDemux
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggdemux.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id489789"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Demuxer</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id484410"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>application/ogg</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-annodex</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src_%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggdemux.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstOggDemux-struct"></a><h3>struct GstOggDemux</h3>
+<pre class="programlisting">struct GstOggDemux;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggmux.html b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
new file mode 100644
index 0000000..4c340c2
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>oggmux</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">
+<link rel="next" href="gst-plugins-base-plugins-playbin.html" title="playbin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-oggdemux.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-playbin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-oggmux.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggmux.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggmux.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggmux.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-oggmux.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-oggmux"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggmux.top_of_page"></a>oggmux</span></h2>
+<p>oggmux — mux ogg streams (info about ogg: http://xiph.org)</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-oggmux.synopsis"></a><h2>Synopsis</h2>
+<a name="GstOggMux"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-oggmux.html#GstOggMux-struct" title="struct GstOggMux">GstOggMux</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstOggMux
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstOggMux implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html">GstPreset</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-delay" title='The "max-delay" property'>max-delay</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-page-delay" title='The "max-page-delay" property'>max-page-delay</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id533167"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Muxer</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id512151"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink_%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>request</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-theora</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-vorbis</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-flac</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-speex</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-celt</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-ogm-video</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-ogm-audio</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-dirac</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-smoke</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp8</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> text/x-cmml, encoded=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> subtitle/x-kate</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-kate</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>application/ogg</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstOggMux-struct"></a><h3>struct GstOggMux</h3>
+<pre class="programlisting">struct GstOggMux;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggmux.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstOggMux--max-delay"></a><h3>The <code class="literal">"max-delay"</code> property</h3>
+<pre class="programlisting">  "max-delay"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Maximum delay in multiplexing streams.</p>
+<p>Default value: 500000000</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstOggMux--max-page-delay"></a><h3>The <code class="literal">"max-page-delay"</code> property</h3>
+<pre class="programlisting">  "max-page-delay"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Maximum delay for sending out a page.</p>
+<p>Default value: 500000000</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-playbin.html b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
new file mode 100644
index 0000000..f7ce4ea
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
@@ -0,0 +1,492 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>playbin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">
+<link rel="next" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-oggmux.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-subtitleoverlay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-playbin.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-playbin.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-playbin.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-playbin.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-playbin.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-playbin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-playbin.top_of_page"></a>playbin</span></h2>
+<p>playbin — Autoplug and play media from an uri</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-playbin.synopsis"></a><h2>Synopsis</h2>
+<a name="GstPlayBin"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-struct" title="struct GstPlayBin">GstPlayBin</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayFlags" title="enum GstPlayFlags">GstPlayFlags</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html">GstPipeline</a>
+                                 +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/GstPlayBaseBin.html">GstPlayBaseBin</a>
+                                       +----GstPlayBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstPlayBin implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink" title='The "audio-sink" property'>audio-sink</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--frame" title='The "frame" property'>frame</a>"                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>*            : Read
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--subtitle-font-desc" title='The "subtitle-font-desc" property'>subtitle-font-desc</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink" title='The "video-sink" property'>video-sink</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--vis-plugin" title='The "vis-plugin" property'>vis-plugin</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--volume" title='The "volume" property'>volume</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--connection-speed" title='The "connection-speed" property'>connection-speed</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.description"></a><h2>Description</h2>
+<p>
+Playbin provides a stand-alone everything-in-one abstraction for an
+audio and/or video player.
+</p>
+<p>
+Playbin can handle both audio and video files and features
+</p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+automatic file type recognition and based on that automatic
+selection and usage of the right audio/video/subtitle demuxers/decoders
+</li>
+<li class="listitem">
+visualisations for audio files
+</li>
+<li class="listitem">
+subtitle support for video files. Subtitles can be store in external
+files.
+</li>
+<li class="listitem">
+stream selection between different video/audio/subtitles streams
+</li>
+<li class="listitem">
+meta info (tag) extraction
+</li>
+<li class="listitem">
+easy access to the last video frame
+</li>
+<li class="listitem">
+buffering when playing streams over a network
+</li>
+<li class="listitem">
+volume control with mute option
+</li>
+</ul></div>
+<p>
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id535719"></a><h3>Usage</h3>
+<p>
+A playbin element can be created just like any other element using
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a>. The file/URI to play should be set via the <span class="type">"uri"</span>
+property. This must be an absolute URI, relative file paths are not allowed.
+Example URIs are file:///home/joe/movie.avi or http://www.joedoe.com/foo.ogg
+</p>
+<p>
+Playbin is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>. It will notify the application of everything
+that's happening (errors, end of stream, tags found, state changes, etc.)
+by posting messages on its <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a>. The application needs to watch the
+bus.
+</p>
+<p>
+Playback can be initiated by setting the element to PLAYING state using
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-set-state"><code class="function">gst_element_set_state()</code></a>. Note that the state change will take place in
+the background in a separate thread, when the function returns playback
+is probably not happening yet and any errors might not have occured yet.
+Applications using playbin should ideally be written to deal with things
+completely asynchroneous.
+</p>
+<p>
+When playback has finished (an EOS message has been received on the bus)
+or an error has occured (an ERROR message has been received on the bus) or
+the user wants to play a different track, playbin should be set back to
+READY or NULL state, then the <span class="type">"uri"</span> property should be set to the
+new location and then playbin be set to PLAYING state again.
+</p>
+<p>
+Seeking can be done using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-seek-simple"><code class="function">gst_element_seek_simple()</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-seek"><code class="function">gst_element_seek()</code></a>
+on the playbin element. Again, the seek will not be executed
+instantaneously, but will be done in a background thread. When the seek
+call returns the seek will most likely still be in process. An application
+may wait for the seek to finish (or fail) using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-state"><code class="function">gst_element_get_state()</code></a> with
+-1 as the timeout, but this will block the user interface and is not
+recommended at all.
+</p>
+<p>
+Applications may query the current position and duration of the stream
+via <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-query-position"><code class="function">gst_element_query_position()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-query-duration"><code class="function">gst_element_query_duration()</code></a> and
+setting the format passed to GST_FORMAT_TIME. If the query was successful,
+the duration or position will have been returned in units of nanoseconds.
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531133"></a><h3>Advanced Usage: specifying the audio and video sink</h3>
+<p>
+By default, if no audio sink or video sink has been specified via the
+<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink" title='The "audio-sink" property'><span class="type">"audio-sink"</span></a> or <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink" title='The "video-sink" property'><span class="type">"video-sink"</span></a> property, playbin will use the autoaudiosink
+and autovideosink elements to find the first-best available output method.
+This should work in most cases, but is not always desirable. Often either
+the user or application might want to specify more explicitly what to use
+for audio and video output.
+</p>
+<p>
+If the application wants more control over how audio or video should be
+output, it may create the audio/video sink elements itself (for example
+using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a>) and provide them to playbin using the
+<a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink" title='The "audio-sink" property'><span class="type">"audio-sink"</span></a> or <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink" title='The "video-sink" property'><span class="type">"video-sink"</span></a> property.
+</p>
+<p>
+GNOME-based applications, for example, will usually want to create
+gconfaudiosink and gconfvideosink elements and make playbin use those,
+so that output happens to whatever the user has configured in the GNOME
+Multimedia System Selector configuration dialog.
+</p>
+<p>
+The sink elements do not necessarily need to be ready-made sinks. It is
+possible to create container elements that look like a sink to playbin,
+but in reality contain a number of custom elements linked together. This
+can be achieved by creating a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html"><span class="type">GstBin</span></a> and putting elements in there and
+linking them, and then creating a sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstGhostPad.html"><span class="type">GstGhostPad</span></a> for the bin and pointing
+it to the sink pad of the first element within the bin. This can be used
+for a number of purposes, for example to force output to a particular
+format or to modify or observe the data before it is output.
+</p>
+<p>
+It is also possible to 'suppress' audio and/or video output by using
+'fakesink' elements (or capture it from there using the fakesink element's
+"handoff" signal, which, nota bene, is fired from the streaming thread!).
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531221"></a><h3>Retrieving Tags and Other Meta Data</h3>
+<p>
+Most of the common meta data (artist, title, etc.) can be retrieved by
+watching for TAG messages on the pipeline's bus (see above).
+</p>
+<p>
+Other more specific meta information like width/height/framerate of video
+streams or samplerate/number of channels of audio streams can be obtained
+from the negotiated caps on the sink pads of the sinks.
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531239"></a><h3>Buffering</h3>
+Playbin handles buffering automatically for the most part, but applications
+need to handle parts of the buffering process as well. Whenever playbin is
+buffering, it will post BUFFERING messages on the bus with a percentage
+value that shows the progress of the buffering process. Applications need
+to set playbin to PLAYING or PAUSED state in response to these messages.
+They may also want to convey the buffering progress to the user in some
+way. Here is how to extract the percentage information from the message
+(requires GStreamer &gt;= 0.10.11):
+<div class="informalexample"><pre class="programlisting">
+switch (GST_MESSAGE_TYPE (msg)) {
+  case GST_MESSAGE_BUFFERING: {
+    gint percent = 0;
+    gst_message_parse_buffering (msg, &amp;percent);
+    g_print ("Buffering (%%u percent done)", percent);
+    break;
+  }
+  ...
+}
+</pre></div>
+Note that applications should keep/set the pipeline in the PAUSED state when
+a BUFFERING message is received with a buffer percent value &lt; 100 and set
+the pipeline back to PLAYING state when a BUFFERING message with a value
+of 100 percent is received (if PLAYING is the desired state, that is).
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531262"></a><h3>Embedding the video window in your application</h3>
+By default, playbin (or rather the video sinks used) will create their own
+window. Applications will usually want to force output to a window of their
+own, however. This can be done using the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstxoverlay.html#GstXOverlay"><span class="type">GstXOverlay</span></a> interface, which most
+video sinks implement. See the documentation there for more details.
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531278"></a><h3>Specifying which CD/DVD device to use</h3>
+The device to use for CDs/DVDs needs to be set on the source element
+playbin creates before it is opened. The only way to do this at the moment
+is to connect to playbin's "notify::source" signal, which will be emitted
+by playbin when it has created the source element for a particular URI.
+In the signal callback you can check if the source element has a "device"
+property and set it appropriately. In future ways might be added to specify
+the device as part of the URI, but at the time of writing this is not
+possible yet.
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531290"></a><h3>Handling redirects</h3>
+<p>
+Some elements may post 'redirect' messages on the bus to tell the
+application to open another location. These are element messages containing
+a structure named 'redirect' along with a 'new-location' field of string
+type. The new location may be a relative or an absolute URI. Examples
+for such redirects can be found in many quicktime movie trailers.
+</p>
+</div>
+<p>
+</p>
+<hr>
+<div class="refsect2">
+<a name="id531304"></a><h3>Examples</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v playbin uri=file:///path/to/somefile.avi
+</pre></div> This will play back the given AVI video file, given that the video and
+audio decoders required to decode the content are installed. Since no
+special audio sink or video sink is supplied (not possible via gst-launch),
+playbin will try to find a suitable audio and video sink automatically
+using the autoaudiosink and autovideosink elements.
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v playbin uri=cdda://4
+</pre></div> This will play back track 4 on an audio CD in your disc drive (assuming
+the drive is detected automatically by the plugin).
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v playbin uri=dvd://1
+</pre></div> This will play back title 1 of a DVD in your disc drive (assuming
+the drive is detected automatically by the plugin).
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id531345"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-playback.html#plugin-playback">playback</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Bin/Player</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id531407"></a><h3>Element Pads</h3>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstPlayBin-struct"></a><h3>struct GstPlayBin</h3>
+<pre class="programlisting">struct GstPlayBin;</pre>
+<p>
+playbin element structure
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayFlags"></a><h3>enum GstPlayFlags</h3>
+<pre class="programlisting">typedef enum {
+  GST_PLAY_FLAG_VIDEO         = (1 &lt;&lt; 0),
+  GST_PLAY_FLAG_AUDIO         = (1 &lt;&lt; 1),
+  GST_PLAY_FLAG_TEXT          = (1 &lt;&lt; 2),
+  GST_PLAY_FLAG_VIS           = (1 &lt;&lt; 3),
+  GST_PLAY_FLAG_SOFT_VOLUME   = (1 &lt;&lt; 4),
+  GST_PLAY_FLAG_NATIVE_AUDIO  = (1 &lt;&lt; 5),
+  GST_PLAY_FLAG_NATIVE_VIDEO  = (1 &lt;&lt; 6),
+  GST_PLAY_FLAG_DOWNLOAD      = (1 &lt;&lt; 7),
+  GST_PLAY_FLAG_BUFFERING     = (1 &lt;&lt; 8),
+  GST_PLAY_FLAG_DEINTERLACE   = (1 &lt;&lt; 9)
+} GstPlayFlags;
+</pre>
+<p>
+Extra flags to configure the behaviour of the sinks.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-VIDEO:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_VIDEO</code></span></p></td>
+<td>Enable rendering of the video stream
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-AUDIO:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_AUDIO</code></span></p></td>
+<td>Enable rendering of the audio stream
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-TEXT:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_TEXT</code></span></p></td>
+<td>Enable rendering of subtitles
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-VIS:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_VIS</code></span></p></td>
+<td>Enable rendering of visualisations when there is
+      no video stream.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-SOFT-VOLUME:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_SOFT_VOLUME</code></span></p></td>
+<td>Use software volume
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-NATIVE-AUDIO:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_NATIVE_AUDIO</code></span></p></td>
+<td>only allow native audio formats, this omits
+  configuration of audioconvert and audioresample.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-NATIVE-VIDEO:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_NATIVE_VIDEO</code></span></p></td>
+<td>only allow native video formats, this omits
+  configuration of videoconvert and videoscale.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-DOWNLOAD:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_DOWNLOAD</code></span></p></td>
+<td>enable progressice download buffering for selected
+  formats.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-BUFFERING:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_BUFFERING</code></span></p></td>
+<td>enable buffering of the demuxed or parsed data.
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-PLAY-FLAG-DEINTERLACE:CAPS"></a><span class="term"><code class="literal">GST_PLAY_FLAG_DEINTERLACE</code></span></p></td>
+<td>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-playbin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstPlayBin--audio-sink"></a><h3>The <code class="literal">"audio-sink"</code> property</h3>
+<pre class="programlisting">  "audio-sink"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write</pre>
+<p>the audio output element to use (NULL = default sink).</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--frame"></a><h3>The <code class="literal">"frame"</code> property</h3>
+<pre class="programlisting">  "frame"                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>*            : Read</pre>
+<p>
+Get the currently rendered or prerolled frame in the video sink.
+The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on the buffer will describe the format of the buffer.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--subtitle-font-desc"></a><h3>The <code class="literal">"subtitle-font-desc"</code> property</h3>
+<pre class="programlisting">  "subtitle-font-desc"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write</pre>
+<p>Pango font description of font to be used for subtitle rendering.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--video-sink"></a><h3>The <code class="literal">"video-sink"</code> property</h3>
+<pre class="programlisting">  "video-sink"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write</pre>
+<p>the video output element to use (NULL = default sink).</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--vis-plugin"></a><h3>The <code class="literal">"vis-plugin"</code> property</h3>
+<pre class="programlisting">  "vis-plugin"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read / Write</pre>
+<p>the visualization element to use (NULL = none).</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--volume"></a><h3>The <code class="literal">"volume"</code> property</h3>
+<pre class="programlisting">  "volume"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>
+Get or set the current audio stream volume. 1.0 means 100%,
+0.0 means mute. This uses a linear volume scale.
+</p>
+<p>Allowed values: [0,10]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--connection-speed"></a><h3>The <code class="literal">"connection-speed"</code> property</h3>
+<pre class="programlisting">  "connection-speed"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Network connection speed in kbps (0 = unknown).</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
new file mode 100644
index 0000000..05d67d8
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>adder</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="next" href="gst-plugins-base-plugins-plugin-alsa.html" title="alsa">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="ch02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-alsa.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-adder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">adder</span></h2>
+<p>adder — <a name="plugin-adder"></a>Adds multiple streams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id527559"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstadder.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id487672"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-adder.html" title="adder">adder</a></span></p></td>
+<td>Add N audio channels together</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
new file mode 100644
index 0000000..db2e25c
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>alsa</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-adder.html" title="adder">
+<link rel="next" href="gst-plugins-base-plugins-plugin-app.html" title="app">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-adder.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-app.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-alsa"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">alsa</span></h2>
+<p>alsa — <a name="plugin-alsa"></a>ALSA plugin library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id483711"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstalsa.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id511020"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-alsamixer.html" title="alsamixer">alsamixer</a></span></p></td>
+<td>Control sound input and output levels with ALSA</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">alsasink</a></span></p></td>
+<td>Output to a sound card via ALSA</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">alsasrc</a></span></p></td>
+<td>Read from a sound card via ALSA</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
new file mode 100644
index 0000000..c935ee7
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>app</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-alsa.html" title="alsa">
+<link rel="next" href="gst-plugins-base-plugins-plugin-audioconvert.html" title="audioconvert">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-alsa.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-audioconvert.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-app"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">app</span></h2>
+<p>app — <a name="plugin-app"></a>Elements used to communicate with applications</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id553259"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstapp.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id502882"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-appsink.html" title="appsink">appsink</a></span></p></td>
+<td>Allow the application to get access to raw buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">appsrc</a></span></p></td>
+<td>Allow the application to feed buffers to a pipeline</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
new file mode 100644
index 0000000..5b02bd3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audioconvert</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-app.html" title="app">
+<link rel="next" href="gst-plugins-base-plugins-plugin-audiorate.html" title="audiorate">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-app.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-audiorate.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-audioconvert"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">audioconvert</span></h2>
+<p>audioconvert — <a name="plugin-audioconvert"></a>Convert audio to different formats</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id488278"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstaudioconvert.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id486075"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">audioconvert</a></span></p></td>
+<td>Convert audio to different formats</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
new file mode 100644
index 0000000..46f19fa
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audiorate</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-audioconvert.html" title="audioconvert">
+<link rel="next" href="gst-plugins-base-plugins-plugin-audioresample.html" title="audioresample">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-audioconvert.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-audioresample.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-audiorate"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">audiorate</span></h2>
+<p>audiorate — <a name="plugin-audiorate"></a>Adjusts audio frames</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id555558"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstaudiorate.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id477744"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-audiorate.html" title="audiorate">audiorate</a></span></p></td>
+<td>Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
new file mode 100644
index 0000000..b6a3d0a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audioresample</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-audiorate.html" title="audiorate">
+<link rel="next" href="gst-plugins-base-plugins-plugin-audiotestsrc.html" title="audiotestsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-audiorate.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-audiotestsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-audioresample"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">audioresample</span></h2>
+<p>audioresample — <a name="plugin-audioresample"></a>Resamples audio</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id505318"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstaudioresample.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id504917"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-audioresample.html" title="audioresample">audioresample</a></span></p></td>
+<td>Resamples audio</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
new file mode 100644
index 0000000..1c049b8
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>audiotestsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-audioresample.html" title="audioresample">
+<link rel="next" href="gst-plugins-base-plugins-plugin-cdparanoia.html" title="cdparanoia">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-audioresample.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-cdparanoia.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-audiotestsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">audiotestsrc</span></h2>
+<p>audiotestsrc — <a name="plugin-audiotestsrc"></a>Creates audio test signals of given frequency and volume</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id496539"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstaudiotestsrc.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id486711"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-audiotestsrc.html" title="audiotestsrc">audiotestsrc</a></span></p></td>
+<td>Creates audio test signals of given frequency and volume</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
new file mode 100644
index 0000000..68af7d3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>cdparanoia</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-audiotestsrc.html" title="audiotestsrc">
+<link rel="next" href="gst-plugins-base-plugins-plugin-decodebin.html" title="decodebin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-audiotestsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-decodebin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-cdparanoia"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">cdparanoia</span></h2>
+<p>cdparanoia — <a name="plugin-cdparanoia"></a>Read audio from CD in paranoid mode</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id498811"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstcdparanoia.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id483696"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html" title="cdparanoiasrc">cdparanoiasrc</a></span></p></td>
+<td>Read audio from CD in paranoid mode</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-decodebin.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-decodebin.html
new file mode 100644
index 0000000..778e4e0
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-decodebin.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>decodebin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-cdparanoia.html" title="cdparanoia">
+<link rel="next" href="gst-plugins-base-plugins-plugin-encoding.html" title="encoding">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-cdparanoia.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-encoding.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-decodebin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">decodebin</span></h2>
+<p>decodebin — <a name="plugin-decodebin"></a>decoder bin</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id516425"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstdecodebin.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id491462"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-decodebin.html" title="decodebin">decodebin</a></span></p></td>
+<td>Autoplug and decode to raw media</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
new file mode 100644
index 0000000..9c64e8b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>encoding</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-decodebin.html" title="decodebin">
+<link rel="next" href="gst-plugins-base-plugins-plugin-gdp.html" title="gdp">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-decodebin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-gdp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-encoding"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">encoding</span></h2>
+<p>encoding — <a name="plugin-encoding"></a>various encoding-related elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id476189"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstencodebin.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id477980"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">encodebin</a></span></p></td>
+<td>Convenience encoding/muxing element</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-gdp.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-gdp.html
new file mode 100644
index 0000000..f2a67ae
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gdp.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gdp</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-encoding.html" title="encoding">
+<link rel="next" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-encoding.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-gio.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-gdp"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">gdp</span></h2>
+<p>gdp — <a name="plugin-gdp"></a>Payload/depayload GDP packets</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id484938"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstgdp.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id494507"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-gdpdepay.html" title="gdpdepay">gdpdepay</a></span></p></td>
+<td>Depayloads GStreamer Data Protocol buffers</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-gdppay.html" title="gdppay">gdppay</a></span></p></td>
+<td>Payloads GStreamer Data Protocol buffers</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
new file mode 100644
index 0000000..737a0de
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gio</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-gdp.html" title="gdp">
+<link rel="next" href="gst-plugins-base-plugins-plugin-libvisual.html" title="libvisual">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-gdp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-libvisual.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-gio"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">gio</span></h2>
+<p>gio — <a name="plugin-gio"></a>GIO elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id486594"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstgio.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id511488"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-giosink.html" title="giosink">giosink</a></span></p></td>
+<td>Write to any GIO-supported location</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-giosrc.html" title="giosrc">giosrc</a></span></p></td>
+<td>Read from any GIO-supported location</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-giostreamsink.html" title="giostreamsink">giostreamsink</a></span></p></td>
+<td>Write to any GIO stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-giostreamsrc.html" title="giostreamsrc">giostreamsrc</a></span></p></td>
+<td>Read from any GIO stream</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
new file mode 100644
index 0000000..d2adc59
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libvisual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
+<link rel="next" href="gst-plugins-base-plugins-plugin-ogg.html" title="ogg">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-gio.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-ogg.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-libvisual"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">libvisual</span></h2>
+<p>libvisual — <a name="plugin-libvisual"></a>libvisual visualization plugins</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id555355"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstlibvisual.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id501091"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">libvisual_bumpscope</span></p></td>
+<td>Bumpscope visual plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_corona</span></p></td>
+<td>Libvisual corona plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_infinite</span></p></td>
+<td>Infinite visual plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_jakdaw</span></p></td>
+<td>jakdaw visual plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_jess</span></p></td>
+<td>Jess visual plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_lv_analyzer</span></p></td>
+<td>Libvisual analyzer plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_lv_scope</span></p></td>
+<td>Libvisual scope plugin</td>
+</tr>
+<tr>
+<td><p><span class="term">libvisual_oinksie</span></p></td>
+<td>Libvisual Oinksie visual plugin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
new file mode 100644
index 0000000..bdce776
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ogg</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-libvisual.html" title="libvisual">
+<link rel="next" href="gst-plugins-base-plugins-plugin-pango.html" title="pango">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-libvisual.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-pango.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-ogg"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ogg</span></h2>
+<p>ogg — <a name="plugin-ogg"></a>ogg stream manipulation (info about ogg: http://xiph.org)</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id506149"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstogg.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id504464"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">oggaviparse</span></p></td>
+<td>parse an ogg avi stream into pages (info about ogg: http://xiph.org)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">oggdemux</a></span></p></td>
+<td>demux ogg streams (info about ogg: http://xiph.org)</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">oggmux</a></span></p></td>
+<td>mux ogg streams (info about ogg: http://xiph.org)</td>
+</tr>
+<tr>
+<td><p><span class="term">oggparse</span></p></td>
+<td>parse ogg streams into pages (info about ogg: http://xiph.org)</td>
+</tr>
+<tr>
+<td><p><span class="term">ogmaudioparse</span></p></td>
+<td>parse an OGM audio header and stream</td>
+</tr>
+<tr>
+<td><p><span class="term">ogmtextparse</span></p></td>
+<td>parse an OGM text header and stream</td>
+</tr>
+<tr>
+<td><p><span class="term">ogmvideoparse</span></p></td>
+<td>parse an OGM video header and stream</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
new file mode 100644
index 0000000..9cfb723
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>pango</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-ogg.html" title="ogg">
+<link rel="next" href="gst-plugins-base-plugins-plugin-playback.html" title="playback">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-ogg.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-playback.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-pango"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">pango</span></h2>
+<p>pango — <a name="plugin-pango"></a>Pango-based text rendering and overlay</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id479749"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstpango.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id488334"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-clockoverlay.html" title="clockoverlay">clockoverlay</a></span></p></td>
+<td>Overlays the current clock time on a video stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">textoverlay</a></span></p></td>
+<td>Adds text strings on top of a video buffer</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-textrender.html" title="textrender">textrender</a></span></p></td>
+<td>Renders a text string to an image bitmap</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-timeoverlay.html" title="timeoverlay">timeoverlay</a></span></p></td>
+<td>Overlays buffer time stamps on a video stream</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
new file mode 100644
index 0000000..e26e123
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>playback</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-pango.html" title="pango">
+<link rel="next" href="gst-plugins-base-plugins-plugin-subparse.html" title="subparse">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-pango.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-subparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-playback"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">playback</span></h2>
+<p>playback — <a name="plugin-playback"></a>various playback elements</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id556321"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstplaybin.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id495440"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-playbin.html" title="playbin">playbin</a></span></p></td>
+<td>Autoplug and play media from an uri</td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-playbin2.html">playbin2</a></span></p></td>
+<td>Autoplug and play media from an uri</td>
+</tr>
+<tr>
+<td><p><span class="term">playsink</span></p></td>
+<td>Convenience sink for multiple streams</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">subtitleoverlay</a></span></p></td>
+<td>Overlays a video stream with subtitles</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
new file mode 100644
index 0000000..26d0f0e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>subparse</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-playback.html" title="playback">
+<link rel="next" href="gst-plugins-base-plugins-plugin-tcp.html" title="tcp">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-playback.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-tcp.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-subparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">subparse</span></h2>
+<p>subparse — <a name="plugin-subparse"></a>Subtitle parsing</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id473973"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstsubparse.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id478655"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">ssaparse</span></p></td>
+<td>Parses SSA subtitle streams</td>
+</tr>
+<tr>
+<td><p><span class="term">subparse</span></p></td>
+<td>Parses subtitle (.sub) files into text streams</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
new file mode 100644
index 0000000..fac189a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>tcp</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-subparse.html" title="subparse">
+<link rel="next" href="gst-plugins-base-plugins-plugin-theora.html" title="theora">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-subparse.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-theora.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-tcp"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">tcp</span></h2>
+<p>tcp — <a name="plugin-tcp"></a>transfer data over the network via TCP</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id540291"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgsttcp.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id492678"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-multifdsink.html" title="multifdsink">multifdsink</a></span></p></td>
+<td>Send data to multiple filedescriptors</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">tcpclientsink</a></span></p></td>
+<td>Send data as a client over the network via TCP</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">tcpclientsrc</a></span></p></td>
+<td>Receive data as a client over the network via TCP</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">tcpserversink</a></span></p></td>
+<td>Send data as a server over the network via TCP</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">tcpserversrc</a></span></p></td>
+<td>Receive data as a server over the network via TCP</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
new file mode 100644
index 0000000..dbaa753
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>theora</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-tcp.html" title="tcp">
+<link rel="next" href="gst-plugins-base-plugins-plugin-typefindfunctions.html" title="typefindfunctions">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-tcp.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-typefindfunctions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-theora"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">theora</span></h2>
+<p>theora — <a name="plugin-theora"></a>Theora plugin library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id516302"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgsttheora.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id530180"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-theoradec.html" title="theoradec">theoradec</a></span></p></td>
+<td>decode raw theora streams to raw YUV video</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-theoraenc.html" title="theoraenc">theoraenc</a></span></p></td>
+<td>encode raw YUV video to a theora stream</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-theoraparse.html" title="theoraparse">theoraparse</a></span></p></td>
+<td>parse raw theora streams</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
new file mode 100644
index 0000000..e2608e6
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>typefindfunctions</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-theora.html" title="theora">
+<link rel="next" href="gst-plugins-base-plugins-plugin-uridecodebin.html" title="uridecodebin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-theora.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-uridecodebin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-typefindfunctions"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">typefindfunctions</span></h2>
+<p>typefindfunctions — <a name="plugin-typefindfunctions"></a>default typefind functions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id493664"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgsttypefindfunctions.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id504039"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-uridecodebin.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-uridecodebin.html
new file mode 100644
index 0000000..d113d97
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-uridecodebin.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>uridecodebin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-typefindfunctions.html" title="typefindfunctions">
+<link rel="next" href="gst-plugins-base-plugins-plugin-videorate.html" title="videorate">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-typefindfunctions.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videorate.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-uridecodebin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">uridecodebin</span></h2>
+<p>uridecodebin — <a name="plugin-uridecodebin"></a>URI Decoder bin</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id559524"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstdecodebin2.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id482194"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-decodebin2.html">decodebin2</a></span></p></td>
+<td>Autoplug and decode to raw media</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">uridecodebin</a></span></p></td>
+<td>Autoplug and decode an URI to raw media</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
new file mode 100644
index 0000000..cef5573
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videorate</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-uridecodebin.html" title="uridecodebin">
+<link rel="next" href="gst-plugins-base-plugins-plugin-videoscale.html" title="videoscale">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-uridecodebin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videoscale.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-videorate"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">videorate</span></h2>
+<p>videorate — <a name="plugin-videorate"></a>Adjusts video frames</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id477644"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstvideorate.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id478952"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-videorate.html" title="videorate">videorate</a></span></p></td>
+<td>Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
new file mode 100644
index 0000000..2f87b69
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videoscale</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-videorate.html" title="videorate">
+<link rel="next" href="gst-plugins-base-plugins-plugin-videotestsrc.html" title="videotestsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-videorate.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videotestsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-videoscale"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">videoscale</span></h2>
+<p>videoscale — <a name="plugin-videoscale"></a>Resizes video</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id515897"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstvideoscale.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id490377"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">videoscale</a></span></p></td>
+<td>Resizes video</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
new file mode 100644
index 0000000..ce8080d
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videotestsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-videoscale.html" title="videoscale">
+<link rel="next" href="gst-plugins-base-plugins-plugin-volume.html" title="volume">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-videoscale.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-volume.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-videotestsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">videotestsrc</span></h2>
+<p>videotestsrc — <a name="plugin-videotestsrc"></a>Creates a test video stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id474320"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstvideotestsrc.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id500216"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-videotestsrc.html" title="videotestsrc">videotestsrc</a></span></p></td>
+<td>Creates a test video stream</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
new file mode 100644
index 0000000..3a17310
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>volume</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-videotestsrc.html" title="videotestsrc">
+<link rel="next" href="gst-plugins-base-plugins-plugin-vorbis.html" title="vorbis">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-videotestsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-vorbis.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-volume"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">volume</span></h2>
+<p>volume — <a name="plugin-volume"></a>plugin for controlling audio volume</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id491352"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstvolume.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id481139"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-volume.html" title="volume">volume</a></span></p></td>
+<td>Set volume on audio/raw streams</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
new file mode 100644
index 0000000..5693e7e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>vorbis</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-volume.html" title="volume">
+<link rel="next" href="gst-plugins-base-plugins-plugin-ximagesink.html" title="ximagesink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-volume.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-ximagesink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-vorbis"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">vorbis</span></h2>
+<p>vorbis — <a name="plugin-vorbis"></a>Vorbis plugin library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id510918"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstvorbis.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id490918"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-vorbisdec.html" title="vorbisdec">vorbisdec</a></span></p></td>
+<td>decode raw vorbis streams to float audio</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-vorbisenc.html" title="vorbisenc">vorbisenc</a></span></p></td>
+<td>Encodes audio in Vorbis format</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-vorbisparse.html" title="vorbisparse">vorbisparse</a></span></p></td>
+<td>parse raw vorbis streams</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-vorbistag.html" title="vorbistag">vorbistag</a></span></p></td>
+<td>Retags vorbis streams</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
new file mode 100644
index 0000000..32f466a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ximagesink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-vorbis.html" title="vorbis">
+<link rel="next" href="gst-plugins-base-plugins-plugin-xvimagesink.html" title="xvimagesink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-vorbis.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-xvimagesink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-ximagesink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ximagesink</span></h2>
+<p>ximagesink — <a name="plugin-ximagesink"></a>X11 video output element based on standard Xlib calls</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id501258"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstximagesink.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id496268"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-ximagesink.html" title="ximagesink">ximagesink</a></span></p></td>
+<td>A standard X based videosink</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
new file mode 100644
index 0000000..99a4540
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>xvimagesink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-ximagesink.html" title="ximagesink">
+<link rel="next" href="ch03.html" title="gst-plugins-base Classes">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-ximagesink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="ch03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-xvimagesink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">xvimagesink</span></h2>
+<p>xvimagesink — <a name="plugin-xvimagesink"></a>XFree86 video output plugin using Xv extension</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id487828"></a><h2>Plugin Information</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">filename</span></p></td>
+<td>libgstxvimagesink.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>0.10.35.1</td>
+</tr>
+<tr>
+<td><p><span class="term">run-time license</span></p></td>
+<td>LGPL</td>
+</tr>
+<tr>
+<td><p><span class="term">package</span></p></td>
+<td>GStreamer Base Plug-ins git</td>
+</tr>
+<tr>
+<td><p><span class="term">origin</span></p></td>
+<td>Unknown package origin</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="id535615"></a><h2>Elements</h2>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-xvimagesink.html" title="xvimagesink">xvimagesink</a></span></p></td>
+<td>A Xv based videosink</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
new file mode 100644
index 0000000..1ea2759
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>subtitleoverlay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-playbin.html" title="playbin">
+<link rel="next" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-playbin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-subtitleoverlay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-subtitleoverlay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-subtitleoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-subtitleoverlay.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-subtitleoverlay.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-subtitleoverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-subtitleoverlay.top_of_page"></a>subtitleoverlay</span></h2>
+<p>subtitleoverlay — Overlays a video stream with subtitles</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-subtitleoverlay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstSubtitleOverlay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay-struct" title="struct GstSubtitleOverlay">GstSubtitleOverlay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+                           +----GstSubtitleOverlay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstSubtitleOverlay implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--font-desc" title='The "font-desc" property'>font-desc</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--silent" title='The "silent" property'>silent</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--subtitle-encoding" title='The "subtitle-encoding" property'>subtitle-encoding</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.description"></a><h2>Description</h2>
+<p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html"><span class="type">GstBin</span></a> that auto-magically overlays a video stream with subtitles by
+autoplugging the required elements.
+</p>
+<p>
+It supports raw, timestamped text, different textual subtitle formats and
+DVD subpicture subtitles.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id479357"></a><h3>Examples</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v filesrc location=test.mkv ! matroskademux name=demux ! "video/x-h264" ! queue2 ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! "video/x-dvd-subpicture" ! queue2 ! overlay.
+</pre></div> This will play back the given Matroska file with h264 video and subpicture subtitles.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id489687"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-playback.html#plugin-playback">playback</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Video/Overlay/Subtitle</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id534893"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>subtitle_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>video_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstSubtitleOverlay-struct"></a><h3>struct GstSubtitleOverlay</h3>
+<pre class="programlisting">struct GstSubtitleOverlay;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subtitleoverlay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstSubtitleOverlay--font-desc"></a><h3>The <code class="literal">"font-desc"</code> property</h3>
+<pre class="programlisting">  "font-desc"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Pango font description of font to be used for subtitle rendering.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSubtitleOverlay--silent"></a><h3>The <code class="literal">"silent"</code> property</h3>
+<pre class="programlisting">  "silent"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to show subtitles.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSubtitleOverlay--subtitle-encoding"></a><h3>The <code class="literal">"subtitle-encoding"</code> property</h3>
+<pre class="programlisting">  "subtitle-encoding"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
new file mode 100644
index 0000000..9d69a5b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>tcpclientsink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
+<link rel="next" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpclientsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-tcpclientsink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-tcpclientsink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpclientsink.top_of_page"></a>tcpclientsink</span></h2>
+<p>tcpclientsink — Send data as a client over the network via TCP</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-tcpclientsink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTCPClientSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink-struct" title="struct GstTCPClientSink">GstTCPClientSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----GstTCPClientSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--host" title='The "host" property'>host</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--port" title='The "port" property'>port</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--protocol" title='The "protocol" property'>protocol</a>"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id530053"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+# server:
+nc -l -p 3000
+# client:
+gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+</pre></div> everything you type in the client is shown on the server
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id530076"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id530319"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTCPClientSink-struct"></a><h3>struct GstTCPClientSink</h3>
+<pre class="programlisting">struct GstTCPClientSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTCPClientSink--host"></a><h3>The <code class="literal">"host"</code> property</h3>
+<pre class="programlisting">  "host"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The host/IP to send the packets to.</p>
+<p>Default value: "localhost"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPClientSink--port"></a><h3>The <code class="literal">"port"</code> property</h3>
+<pre class="programlisting">  "port"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The port to send the packets to.</p>
+<p>Allowed values: [0,65535]</p>
+<p>Default value: 4953</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPClientSink--protocol"></a><h3>The <code class="literal">"protocol"</code> property</h3>
+<pre class="programlisting">  "protocol"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write</pre>
+<p>The protocol to wrap data in.</p>
+<p>Default value: GST_TCP_PROTOCOL_NONE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsink.see-also"></a><h2>See Also</h2>
+<span class="type">tcpclientsrc</span>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
new file mode 100644
index 0000000..c6eaf9c
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>tcpclientsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
+<link rel="next" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-subtitleoverlay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-tcpclientsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpclientsrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-tcpclientsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpclientsrc.top_of_page"></a>tcpclientsrc</span></h2>
+<p>tcpclientsrc — Receive data as a client over the network via TCP</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-tcpclientsrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTCPClientSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct" title="struct GstTCPClientSrc">GstTCPClientSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----GstTCPClientSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host" title='The "host" property'>host</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port" title='The "port" property'>port</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--protocol" title='The "protocol" property'>protocol</a>"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id535377"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+# server:
+nc -l -p 3000
+# client:
+gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+</pre></div> everything you type in the server is shown on the client
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id535400"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id530891"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTCPClientSrc-struct"></a><h3>struct GstTCPClientSrc</h3>
+<pre class="programlisting">struct GstTCPClientSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTCPClientSrc--host"></a><h3>The <code class="literal">"host"</code> property</h3>
+<pre class="programlisting">  "host"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The host IP address to receive packets from.</p>
+<p>Default value: "localhost"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPClientSrc--port"></a><h3>The <code class="literal">"port"</code> property</h3>
+<pre class="programlisting">  "port"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The port to receive packets from.</p>
+<p>Allowed values: [0,65535]</p>
+<p>Default value: 4953</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPClientSrc--protocol"></a><h3>The <code class="literal">"protocol"</code> property</h3>
+<pre class="programlisting">  "protocol"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write</pre>
+<p>The protocol to wrap data in.</p>
+<p>Default value: GST_TCP_PROTOCOL_NONE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpclientsrc.see-also"></a><h2>See Also</h2>
+<span class="type">tcpclientsink</span>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
new file mode 100644
index 0000000..c60dfb6
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>tcpserversink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
+<link rel="next" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpserversrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-textoverlay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-tcpserversink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-tcpserversink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpserversink.top_of_page"></a>tcpserversink</span></h2>
+<p>tcpserversink — Send data as a server over the network via TCP</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-tcpserversink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTCPServerSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink-struct" title="struct GstTCPServerSink">GstTCPServerSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----<a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink">GstMultiFdSink</a>
+                                 +----GstTCPServerSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--host" title='The "host" property'>host</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--port" title='The "port" property'>port</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id533005"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+# server:
+gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
+# client:
+gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+</pre></div>
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id533028"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id487079"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTCPServerSink-struct"></a><h3>struct GstTCPServerSink</h3>
+<pre class="programlisting">struct GstTCPServerSink;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTCPServerSink--host"></a><h3>The <code class="literal">"host"</code> property</h3>
+<pre class="programlisting">  "host"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The host/IP to send the packets to.</p>
+<p>Default value: "localhost"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPServerSink--port"></a><h3>The <code class="literal">"port"</code> property</h3>
+<pre class="programlisting">  "port"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The port to send the packets to.</p>
+<p>Allowed values: [0,65535]</p>
+<p>Default value: 4953</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversink.see-also"></a><h2>See Also</h2>
+<span class="type">multifdsink</span>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
new file mode 100644
index 0000000..d63d808
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>tcpserversrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
+<link rel="next" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpclientsink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-tcpserversrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-tcpserversrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-tcpserversrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpserversrc.top_of_page"></a>tcpserversrc</span></h2>
+<p>tcpserversrc — Receive data as a server over the network via TCP</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-tcpserversrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTCPServerSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct" title="struct GstTCPServerSrc">GstTCPServerSrc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----GstTCPServerSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host" title='The "host" property'>host</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port" title='The "port" property'>port</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--protocol" title='The "protocol" property'>protocol</a>"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.description"></a><h2>Description</h2>
+<p>
+</p>
+<div class="refsect2">
+<a name="id532197"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+# server:
+gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
+# client:
+gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+</pre></div>
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id532220"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id535478"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTCPServerSrc-struct"></a><h3>struct GstTCPServerSrc</h3>
+<pre class="programlisting">struct GstTCPServerSrc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTCPServerSrc--host"></a><h3>The <code class="literal">"host"</code> property</h3>
+<pre class="programlisting">  "host"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The hostname to listen as.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPServerSrc--port"></a><h3>The <code class="literal">"port"</code> property</h3>
+<pre class="programlisting">  "port"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The port to listen to.</p>
+<p>Allowed values: [0,65535]</p>
+<p>Default value: 4953</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTCPServerSrc--protocol"></a><h3>The <code class="literal">"protocol"</code> property</h3>
+<pre class="programlisting">  "protocol"                 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-multifdsink.html#GstTCPProtocol"><span class="type">GstTCPProtocol</span></a>        : Read / Write</pre>
+<p>The protocol to wrap data in.</p>
+<p>Default value: GST_TCP_PROTOCOL_NONE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-tcpserversrc.see-also"></a><h2>See Also</h2>
+<span class="type">tcpserversink</span>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
new file mode 100644
index 0000000..2ef3dad
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
@@ -0,0 +1,408 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>textoverlay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
+<link rel="next" href="gst-plugins-base-plugins-textrender.html" title="textrender">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpserversink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-textrender.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-textoverlay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textoverlay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textoverlay.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-textoverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-textoverlay.top_of_page"></a>textoverlay</span></h2>
+<p>textoverlay — Adds text strings on top of a video buffer</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-textoverlay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTextOverlay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay-struct" title="struct GstTextOverlay">GstTextOverlay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textoverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstBaseTextOverlay
+                           +----GstTextOverlay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textoverlay.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltax" title='The "deltax" property'>deltax</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltay" title='The "deltay" property'>deltay</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--font-desc" title='The "font-desc" property'>font-desc</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halign" title='The "halign" property'>halign</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--shaded-background" title='The "shaded-background" property'>shaded-background</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--text" title='The "text" property'>text</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valign" title='The "valign" property'>valign</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wrap-mode" title='The "wrap-mode" property'>wrap-mode</a>"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayWrapMode"><span class="type">GstTextOverlayWrapMode</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpad" title='The "xpad" property'>xpad</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypad" title='The "ypad" property'>ypad</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halignment" title='The "halignment" property'>halignment</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayHAlign"><span class="type">GstTextOverlayHAlign</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valignment" title='The "valignment" property'>valignment</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayVAlign"><span class="type">GstTextOverlayVAlign</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--line-alignment" title='The "line-alignment" property'>line-alignment</a>"           <span class="type">GstTextOverlayLineAlign</span>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--silent" title='The "silent" property'>silent</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wait-text" title='The "wait-text" property'>wait-text</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--auto-resize" title='The "auto-resize" property'>auto-resize</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--vertical-render" title='The "vertical-render" property'>vertical-render</a>"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--color" title='The "color" property'>color</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpos" title='The "xpos" property'>xpos</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypos" title='The "ypos" property'>ypos</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textoverlay.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id492124"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-pango.html#plugin-pango">pango</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David Schleef &lt;ds@schleef.org&gt;, Zeeshan Ali &lt;zeeshan.ali@nokia.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Editor/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id494648"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>text_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>text/x-pango-markup</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> text/plain</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>video_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textoverlay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTextOverlay-struct"></a><h3>struct GstTextOverlay</h3>
+<pre class="programlisting">struct GstTextOverlay;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textoverlay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTextOverlay--deltax"></a><h3>The <code class="literal">"deltax"</code> property</h3>
+<pre class="programlisting">  "deltax"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Shift X position to the left or to the right. Unit is pixels.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--deltay"></a><h3>The <code class="literal">"deltay"</code> property</h3>
+<pre class="programlisting">  "deltay"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Shift Y position up or down. Unit is pixels.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--font-desc"></a><h3>The <code class="literal">"font-desc"</code> property</h3>
+<pre class="programlisting">  "font-desc"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write</pre>
+<p>Pango font description of font to be used for rendering. See documentation of pango_font_description_from_string for syntax.</p>
+<p>Default value: ""</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--halign"></a><h3>The <code class="literal">"halign"</code> property</h3>
+<pre class="programlisting">  "halign"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write</pre>
+<p>Horizontal alignment of the text (deprecated; use halignment).</p>
+<p>Default value: "center"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--shaded-background"></a><h3>The <code class="literal">"shaded-background"</code> property</h3>
+<pre class="programlisting">  "shaded-background"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to shade the background under the text area.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--text"></a><h3>The <code class="literal">"text"</code> property</h3>
+<pre class="programlisting">  "text"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Text to be display.</p>
+<p>Default value: ""</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--valign"></a><h3>The <code class="literal">"valign"</code> property</h3>
+<pre class="programlisting">  "valign"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write</pre>
+<p>Vertical alignment of the text (deprecated; use valignment).</p>
+<p>Default value: "baseline"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--wrap-mode"></a><h3>The <code class="literal">"wrap-mode"</code> property</h3>
+<pre class="programlisting">  "wrap-mode"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayWrapMode"><span class="type">GstTextOverlayWrapMode</span></a>  : Read / Write</pre>
+<p>Whether to wrap the text and if so how.</p>
+<p>Default value: wordchar</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--xpad"></a><h3>The <code class="literal">"xpad"</code> property</h3>
+<pre class="programlisting">  "xpad"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Horizontal paddding when using left/right alignment.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--ypad"></a><h3>The <code class="literal">"ypad"</code> property</h3>
+<pre class="programlisting">  "ypad"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Vertical padding when using top/bottom alignment.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--halignment"></a><h3>The <code class="literal">"halignment"</code> property</h3>
+<pre class="programlisting">  "halignment"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayHAlign"><span class="type">GstTextOverlayHAlign</span></a>  : Read / Write</pre>
+<p>Horizontal alignment of the text.</p>
+<p>Default value: center</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--valignment"></a><h3>The <code class="literal">"valignment"</code> property</h3>
+<pre class="programlisting">  "valignment"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-textoverlay.html#GstTextOverlayVAlign"><span class="type">GstTextOverlayVAlign</span></a>  : Read / Write</pre>
+<p>Vertical alignment of the text.</p>
+<p>Default value: baseline</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--line-alignment"></a><h3>The <code class="literal">"line-alignment"</code> property</h3>
+<pre class="programlisting">  "line-alignment"           <span class="type">GstTextOverlayLineAlign</span>  : Read / Write</pre>
+<p>Alignment of text lines relative to each other.</p>
+<p>Default value: center</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--silent"></a><h3>The <code class="literal">"silent"</code> property</h3>
+<pre class="programlisting">  "silent"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to render the text string.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--wait-text"></a><h3>The <code class="literal">"wait-text"</code> property</h3>
+<pre class="programlisting">  "wait-text"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to wait for subtitles.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--auto-resize"></a><h3>The <code class="literal">"auto-resize"</code> property</h3>
+<pre class="programlisting">  "auto-resize"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Automatically adjust font size to screen-size.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--vertical-render"></a><h3>The <code class="literal">"vertical-render"</code> property</h3>
+<pre class="programlisting">  "vertical-render"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Vertical Render.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--color"></a><h3>The <code class="literal">"color"</code> property</h3>
+<pre class="programlisting">  "color"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Color to use for text (big-endian ARGB).</p>
+<p>Default value: 4294967295</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--xpos"></a><h3>The <code class="literal">"xpos"</code> property</h3>
+<pre class="programlisting">  "xpos"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Horizontal position when using position alignment.</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextOverlay--ypos"></a><h3>The <code class="literal">"ypos"</code> property</h3>
+<pre class="programlisting">  "ypos"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Vertical position when using position alignment.</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.5</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textrender.html b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
new file mode 100644
index 0000000..2347049
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>textrender</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">
+<link rel="next" href="gst-plugins-base-plugins-theoradec.html" title="theoradec">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-textoverlay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-theoradec.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-textrender.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textrender.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textrender.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-textrender.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-textrender"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-textrender.top_of_page"></a>textrender</span></h2>
+<p>textrender — Renders a text string to an image bitmap</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-textrender.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTextRender"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender-struct" title="struct GstTextRender">GstTextRender</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textrender.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstTextRender
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textrender.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--font-desc" title='The "font-desc" property'>font-desc</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--halignment" title='The "halignment" property'>halignment</a>"               <span class="type">GstTextRenderHAlign</span>   : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--line-alignment" title='The "line-alignment" property'>line-alignment</a>"           <span class="type">GstTextRenderLineAlign</span>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--valignment" title='The "valignment" property'>valignment</a>"               <span class="type">GstTextRenderVAlign</span>   : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--xpad" title='The "xpad" property'>xpad</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-textrender.html#GstTextRender--ypad" title='The "ypad" property'>ypad</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textrender.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id475160"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-pango.html#plugin-pango">pango</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Editor/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id538258"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>text/x-pango-markup</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> text/plain</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textrender.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTextRender-struct"></a><h3>struct GstTextRender</h3>
+<pre class="programlisting">struct GstTextRender;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-textrender.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTextRender--font-desc"></a><h3>The <code class="literal">"font-desc"</code> property</h3>
+<pre class="programlisting">  "font-desc"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Write</pre>
+<p>Pango font description of font to be used for rendering. See documentation of pango_font_description_from_string for syntax.</p>
+<p>Default value: ""</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextRender--halignment"></a><h3>The <code class="literal">"halignment"</code> property</h3>
+<pre class="programlisting">  "halignment"               <span class="type">GstTextRenderHAlign</span>   : Read / Write</pre>
+<p>Horizontal alignment of the text.</p>
+<p>Default value: center</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextRender--line-alignment"></a><h3>The <code class="literal">"line-alignment"</code> property</h3>
+<pre class="programlisting">  "line-alignment"           <span class="type">GstTextRenderLineAlign</span>  : Read / Write</pre>
+<p>Alignment of text lines relative to each other.</p>
+<p>Default value: center</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextRender--valignment"></a><h3>The <code class="literal">"valignment"</code> property</h3>
+<pre class="programlisting">  "valignment"               <span class="type">GstTextRenderVAlign</span>   : Read / Write</pre>
+<p>Vertical alignment of the text.</p>
+<p>Default value: baseline</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextRender--xpad"></a><h3>The <code class="literal">"xpad"</code> property</h3>
+<pre class="programlisting">  "xpad"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Horizontal paddding when using left/right alignment.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTextRender--ypad"></a><h3>The <code class="literal">"ypad"</code> property</h3>
+<pre class="programlisting">  "ypad"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Vertical padding when using top/bottom alignment.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 25</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoradec.html b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
new file mode 100644
index 0000000..245b950
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>theoradec</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-textrender.html" title="textrender">
+<link rel="next" href="gst-plugins-base-plugins-theoraenc.html" title="theoraenc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-textrender.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-theoraenc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-theoradec.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoradec.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoradec.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoradec.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-theoradec"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoradec.top_of_page"></a>theoradec</span></h2>
+<p>theoradec — decode raw theora streams to raw YUV video</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-theoradec.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTheoraDec"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-theoradec.html#GstTheoraDec-struct" title="struct GstTheoraDec">GstTheoraDec</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoradec.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstTheoraDec
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoradec.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-theoradec.html#GstTheoraDec--crop" title='The "crop" property'>crop</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoradec.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id487813"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-theora.html#plugin-theora">theora</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Benjamin Otte &lt;otte@gnome.org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Decoder/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id536181"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-theora</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv, format=(fourcc){ I420, Y42B, Y444 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoradec.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTheoraDec-struct"></a><h3>struct GstTheoraDec</h3>
+<pre class="programlisting">struct GstTheoraDec;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoradec.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTheoraDec--crop"></a><h3>The <code class="literal">"crop"</code> property</h3>
+<pre class="programlisting">  "crop"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Crop the image to the visible region.</p>
+<p>Default value: TRUE</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
new file mode 100644
index 0000000..69f62fa
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
@@ -0,0 +1,345 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>theoraenc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-theoradec.html" title="theoradec">
+<link rel="next" href="gst-plugins-base-plugins-theoraparse.html" title="theoraparse">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-theoradec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-theoraparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-theoraenc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraenc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraenc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraenc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraenc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-theoraenc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoraenc.top_of_page"></a>theoraenc</span></h2>
+<p>theoraenc — encode raw YUV video to a theora stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-theoraenc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTheoraEnc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct" title="struct GstTheoraEnc">GstTheoraEnc</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncBorderMode" title="enum GstTheoraEncBorderMode">GstTheoraEncBorderMode</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstTheoraEnc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstTheoraEnc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html">GstPreset</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--bitrate" title='The "bitrate" property'>bitrate</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--border" title='The "border" property'>border</a>"                   <a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncBorderMode" title="enum GstTheoraEncBorderMode"><span class="type">GstTheoraEncBorderMode</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--center" title='The "center" property'>center</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-auto" title='The "keyframe-auto" property'>keyframe-auto</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-force" title='The "keyframe-force" property'>keyframe-force</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-freq" title='The "keyframe-freq" property'>keyframe-freq</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-mindistance" title='The "keyframe-mindistance" property'>keyframe-mindistance</a>"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-threshold" title='The "keyframe-threshold" property'>keyframe-threshold</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--noise-sensitivity" title='The "noise-sensitivity" property'>noise-sensitivity</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quality" title='The "quality" property'>quality</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quick" title='The "quick" property'>quick</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--sharpness" title='The "sharpness" property'>sharpness</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--speed-level" title='The "speed-level" property'>speed-level</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write / Construct
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-overflow" title='The "cap-overflow" property'>cap-overflow</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-underflow" title='The "cap-underflow" property'>cap-underflow</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--drop-frames" title='The "drop-frames" property'>drop-frames</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--rate-buffer" title='The "rate-buffer" property'>rate-buffer</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--vp3-compatible" title='The "vp3-compatible" property'>vp3-compatible</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-cache-file" title='The "multipass-cache-file" property'>multipass-cache-file</a>"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-mode" title='The "multipass-mode" property'>multipass-mode</a>"           <span class="type">GstTheoraEncMultipassMode</span>  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id542106"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-theora.html#plugin-theora">theora</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Encoder/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id542168"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv, format=(fourcc){ I420, Y42B, Y444 }, framerate=(fraction)[ 1/2147483647, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-theora</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTheoraEnc-struct"></a><h3>struct GstTheoraEnc</h3>
+<pre class="programlisting">struct GstTheoraEnc;</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEncBorderMode"></a><h3>enum GstTheoraEncBorderMode</h3>
+<pre class="programlisting">typedef enum {
+  BORDER_NONE,
+  BORDER_BLACK,
+  BORDER_MIRROR
+} GstTheoraEncBorderMode;
+</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraenc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTheoraEnc--bitrate"></a><h3>The <code class="literal">"bitrate"</code> property</h3>
+<pre class="programlisting">  "bitrate"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Compressed video bitrate (kbps).</p>
+<p>Allowed values: [0,16777215]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--border"></a><h3>The <code class="literal">"border"</code> property</h3>
+<pre class="programlisting">  "border"                   <a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncBorderMode" title="enum GstTheoraEncBorderMode"><span class="type">GstTheoraEncBorderMode</span></a>  : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Default value: Black Border</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--center"></a><h3>The <code class="literal">"center"</code> property</h3>
+<pre class="programlisting">  "center"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--keyframe-auto"></a><h3>The <code class="literal">"keyframe-auto"</code> property</h3>
+<pre class="programlisting">  "keyframe-auto"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Automatic keyframe detection.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--keyframe-force"></a><h3>The <code class="literal">"keyframe-force"</code> property</h3>
+<pre class="programlisting">  "keyframe-force"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Force keyframe every N frames.</p>
+<p>Allowed values: [1,32768]</p>
+<p>Default value: 64</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--keyframe-freq"></a><h3>The <code class="literal">"keyframe-freq"</code> property</h3>
+<pre class="programlisting">  "keyframe-freq"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Keyframe frequency.</p>
+<p>Allowed values: [1,32768]</p>
+<p>Default value: 64</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--keyframe-mindistance"></a><h3>The <code class="literal">"keyframe-mindistance"</code> property</h3>
+<pre class="programlisting">  "keyframe-mindistance"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Allowed values: [1,32768]</p>
+<p>Default value: 8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--keyframe-threshold"></a><h3>The <code class="literal">"keyframe-threshold"</code> property</h3>
+<pre class="programlisting">  "keyframe-threshold"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Allowed values: [0,32768]</p>
+<p>Default value: 80</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--noise-sensitivity"></a><h3>The <code class="literal">"noise-sensitivity"</code> property</h3>
+<pre class="programlisting">  "noise-sensitivity"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Allowed values: [0,32768]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--quality"></a><h3>The <code class="literal">"quality"</code> property</h3>
+<pre class="programlisting">  "quality"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Video quality.</p>
+<p>Allowed values: [0,63]</p>
+<p>Default value: 48</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--quick"></a><h3>The <code class="literal">"quick"</code> property</h3>
+<pre class="programlisting">  "quick"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--sharpness"></a><h3>The <code class="literal">"sharpness"</code> property</h3>
+<pre class="programlisting">  "sharpness"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>ignored and kept for API compat only.</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--speed-level"></a><h3>The <code class="literal">"speed-level"</code> property</h3>
+<pre class="programlisting">  "speed-level"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write / Construct</pre>
+<p>Controls the amount of analysis performed when encoding. Higher values trade compression quality for speed. This property requires libtheora version &gt;= 1.0, and the maximum value may vary based on encoder version.</p>
+<p>Allowed values: [0,2]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--cap-overflow"></a><h3>The <code class="literal">"cap-overflow"</code> property</h3>
+<pre class="programlisting">  "cap-overflow"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Enable capping of bit reservoir overflows.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--cap-underflow"></a><h3>The <code class="literal">"cap-underflow"</code> property</h3>
+<pre class="programlisting">  "cap-underflow"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Enable capping of bit reservoir underflows.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--drop-frames"></a><h3>The <code class="literal">"drop-frames"</code> property</h3>
+<pre class="programlisting">  "drop-frames"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Allow or disallow frame dropping.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--rate-buffer"></a><h3>The <code class="literal">"rate-buffer"</code> property</h3>
+<pre class="programlisting">  "rate-buffer"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Sets the size of the rate control buffer, in units of frames.  The default value of 0 instructs the encoder to automatically select an appropriate value.</p>
+<p>Allowed values: [0,1000]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--vp3-compatible"></a><h3>The <code class="literal">"vp3-compatible"</code> property</h3>
+<pre class="programlisting">  "vp3-compatible"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Disables non-VP3 compatible features.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--multipass-cache-file"></a><h3>The <code class="literal">"multipass-cache-file"</code> property</h3>
+<pre class="programlisting">  "multipass-cache-file"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Multipass cache file.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEnc--multipass-mode"></a><h3>The <code class="literal">"multipass-mode"</code> property</h3>
+<pre class="programlisting">  "multipass-mode"           <span class="type">GstTheoraEncMultipassMode</span>  : Read / Write</pre>
+<p>Single pass or first/second pass.</p>
+<p>Default value: Single pass</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
new file mode 100644
index 0000000..4e38458
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>theoraparse</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-theoraenc.html" title="theoraenc">
+<link rel="next" href="gst-plugins-base-plugins-timeoverlay.html" title="timeoverlay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-theoraenc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-timeoverlay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-theoraparse.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraparse.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraparse.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-theoraparse.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-theoraparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoraparse.top_of_page"></a>theoraparse</span></h2>
+<p>theoraparse — parse raw theora streams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-theoraparse.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTheoraParse"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-theoraparse.html#GstTheoraParse-struct" title="struct GstTheoraParse">GstTheoraParse</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstTheoraParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraparse.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-theoraparse.html#GstTheoraParse--synchronization-points" title='The "synchronization-points" property'>synchronization-points</a>"   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>*          : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id489696"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-theora.html#plugin-theora">theora</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Andy Wingo &lt;wingo@pobox.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id536676"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-theora</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-theora</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraparse.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTheoraParse-struct"></a><h3>struct GstTheoraParse</h3>
+<pre class="programlisting">struct GstTheoraParse;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-theoraparse.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTheoraParse--synchronization-points"></a><h3>The <code class="literal">"synchronization-points"</code> property</h3>
+<pre class="programlisting">  "synchronization-points"   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>*          : Read / Write</pre>
+<p>An array of (granuletime, buffertime) pairs.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
new file mode 100644
index 0000000..36f6cc5
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>timeoverlay</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-theoraparse.html" title="theoraparse">
+<link rel="next" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-theoraparse.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-uridecodebin.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-timeoverlay.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-timeoverlay.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-timeoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-timeoverlay"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-timeoverlay.top_of_page"></a>timeoverlay</span></h2>
+<p>timeoverlay — Overlays buffer time stamps on a video stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-timeoverlay.synopsis"></a><h2>Synopsis</h2>
+<a name="GstTimeOverlay"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct" title="struct GstTimeOverlay">GstTimeOverlay</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-timeoverlay.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstBaseTextOverlay
+                           +----GstTimeOverlay
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-timeoverlay.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id530207"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-pango.html#plugin-pango">pango</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Tim-Philipp Müller &lt;tim@centricular.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Editor/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id538141"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>video_sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-timeoverlay.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstTimeOverlay-struct"></a><h3>struct GstTimeOverlay</h3>
+<pre class="programlisting">struct GstTimeOverlay;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
new file mode 100644
index 0000000..9477620
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
@@ -0,0 +1,609 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>uridecodebin</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-timeoverlay.html" title="timeoverlay">
+<link rel="next" href="gst-plugins-base-plugins-videorate.html" title="videorate">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-timeoverlay.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videorate.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-uridecodebin.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-uridecodebin.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-uridecodebin.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-uridecodebin.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-uridecodebin.properties" class="shortcut">Properties</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-uridecodebin.signals" class="shortcut">Signals</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-uridecodebin"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-uridecodebin.top_of_page"></a>uridecodebin</span></h2>
+<p>uridecodebin — Autoplug and decode an URI to raw media</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-uridecodebin.synopsis"></a><h2>Synopsis</h2>
+<a name="GstURIDecodeBin"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-struct" title="struct GstURIDecodeBin">GstURIDecodeBin</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult" title="enum GstAutoplugSelectResult">GstAutoplugSelectResult</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+                           +----GstURIDecodeBin
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstURIDecodeBin implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstChildProxy.html">GstChildProxy</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--uri" title='The "uri" property'>uri</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--connection-speed" title='The "connection-speed" property'>connection-speed</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--subtitle-encoding" title='The "subtitle-encoding" property'>subtitle-encoding</a>"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--source" title='The "source" property'>source</a>"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-duration" title='The "buffer-duration" property'>buffer-duration</a>"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-size" title='The "buffer-size" property'>buffer-size</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--download" title='The "download" property'>download</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--use-buffering" title='The "use-buffering" property'>use-buffering</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--expose-all-streams" title='The "expose-all-streams" property'>expose-all-streams</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--ring-buffer-max-size" title='The "ring-buffer-max-size" property'>ring-buffer-max-size</a>"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.signals"></a><h2>Signals</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-continue" title='The "autoplug-continue" signal'>autoplug-continue</a>"                              : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-factories" title='The "autoplug-factories" signal'>autoplug-factories</a>"                             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-select" title='The "autoplug-select" signal'>autoplug-select</a>"                                : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type" title='The "unknown-type" signal'>unknown-type</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained" title='The "drained" signal'>drained</a>"                                        : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-sort" title='The "autoplug-sort" signal'>autoplug-sort</a>"                                  : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup" title='The "source-setup" signal'>source-setup</a>"                                   : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.description"></a><h2>Description</h2>
+<p>
+Decodes data from a URI into raw media. It selects a source element that can
+handle the given <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--uri" title='The "uri" property'><span class="type">"uri"</span></a> scheme and connects it to a decodebin.
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id544408"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-uridecodebin.html#plugin-uridecodebin">uridecodebin</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Generic/Bin/Decoder</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id544471"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src%d</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstURIDecodeBin-struct"></a><h3>struct GstURIDecodeBin</h3>
+<pre class="programlisting">struct GstURIDecodeBin;</pre>
+<p>
+uridecodebin element struct
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstAutoplugSelectResult"></a><h3>enum GstAutoplugSelectResult</h3>
+<pre class="programlisting">typedef enum {
+  GST_AUTOPLUG_SELECT_TRY,
+  GST_AUTOPLUG_SELECT_EXPOSE,
+  GST_AUTOPLUG_SELECT_SKIP
+} GstAutoplugSelectResult;
+</pre>
+<p>
+return values for the autoplug-select signal.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-AUTOPLUG-SELECT-TRY:CAPS"></a><span class="term"><code class="literal">GST_AUTOPLUG_SELECT_TRY</code></span></p></td>
+<td>try to autoplug the current factory
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUTOPLUG-SELECT-EXPOSE:CAPS"></a><span class="term"><code class="literal">GST_AUTOPLUG_SELECT_EXPOSE</code></span></p></td>
+<td>expose the pad as a raw stream
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-AUTOPLUG-SELECT-SKIP:CAPS"></a><span class="term"><code class="literal">GST_AUTOPLUG_SELECT_SKIP</code></span></p></td>
+<td>skip the current factory
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstURIDecodeBin--uri"></a><h3>The <code class="literal">"uri"</code> property</h3>
+<pre class="programlisting">  "uri"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>URI to decode.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--connection-speed"></a><h3>The <code class="literal">"connection-speed"</code> property</h3>
+<pre class="programlisting">  "connection-speed"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>Network connection speed in kbps (0 = unknown).</p>
+<p>Allowed values: &lt;= 4294967</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<p>The caps on which to stop decoding. (NULL = default).</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--subtitle-encoding"></a><h3>The <code class="literal">"subtitle-encoding"</code> property</h3>
+<pre class="programlisting">  "subtitle-encoding"        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>Encoding to assume if input subtitles are not in UTF-8 encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--source"></a><h3>The <code class="literal">"source"</code> property</h3>
+<pre class="programlisting">  "source"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>*           : Read</pre>
+<p>Source object used.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--buffer-duration"></a><h3>The <code class="literal">"buffer-duration"</code> property</h3>
+<pre class="programlisting">  "buffer-duration"          <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>Buffer duration when buffering streams (-1 default value).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--buffer-size"></a><h3>The <code class="literal">"buffer-size"</code> property</h3>
+<pre class="programlisting">  "buffer-size"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Buffer size when buffering streams (-1 default value).</p>
+<p>Allowed values: &gt;= -1</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--download"></a><h3>The <code class="literal">"download"</code> property</h3>
+<pre class="programlisting">  "download"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Attempt download buffering when buffering network streams.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--use-buffering"></a><h3>The <code class="literal">"use-buffering"</code> property</h3>
+<pre class="programlisting">  "use-buffering"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Perform buffering on demuxed/parsed media.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--expose-all-streams"></a><h3>The <code class="literal">"expose-all-streams"</code> property</h3>
+<pre class="programlisting">  "expose-all-streams"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Expose all streams, including those of unknown type or that don't match the 'caps' property.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin--ring-buffer-max-size"></a><h3>The <code class="literal">"ring-buffer-max-size"</code> property</h3>
+<pre class="programlisting">  "ring-buffer-max-size"     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>Max. amount of data in the ring buffer (bytes, 0 = ring buffer disabled).</p>
+<p>Allowed values: &lt;= G_MAXULONG</p>
+<p>Default value: 0</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-uridecodebin.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstURIDecodeBin-autoplug-continue"></a><h3>The <code class="literal">"autoplug-continue"</code> signal</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>          *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>         *caps,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted whenever uridecodebin finds a new stream. It is
+emitted before looking for any elements that can handle that stream.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+  Invocation of signal handlers stops after the first signal handler
+returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>. Signal handlers are invoked in the order they were
+  connected in.
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> found.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if you wish uridecodebin to look for elements that can
+handle the given <em class="parameter"><code>caps</code></em>. If <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>, those caps will be considered as
+final and the pad will be exposed as such (see 'pad-added' signal of
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>).</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-autoplug-factories"></a><h3>The <code class="literal">"autoplug-factories"</code> signal</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*        user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>          *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>         *caps,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This function is emited when an array of possible factories for <em class="parameter"><code>caps</code></em> on
+<em class="parameter"><code>pad</code></em> is needed. Uridecodebin will by default return an array with all
+compatible factories, sorted by rank.
+</p>
+<p>
+If this function returns NULL, <em class="parameter"><code>pad</code></em> will be exposed as a final caps.
+</p>
+<p>
+If this function returns an empty array, the pad will be considered as
+having an unhandled type media type.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+  Only the signal handler that is connected first will ever by invoked.
+  Don't connect signal handlers with the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
+  signal, they will never be invoked!
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> found.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>* with a list of factories to try. The factories are
+by default tried in the returned order or based on the index returned by
+"autoplug-select".</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-autoplug-select"></a><h3>The <code class="literal">"autoplug-select"</code> signal</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult" title="enum GstAutoplugSelectResult"><span class="returnvalue">GstAutoplugSelectResult</span></a>user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a>   *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>            *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>           *caps,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> *factory,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>           user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted once uridecodebin has found all the possible
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> that can be used to handle the given <em class="parameter"><code>caps</code></em>. For each of
+those factories, this signal is emited.
+</p>
+<p>
+The signal handler should return a <span class="type">GST_TYPE_AUTOPLUG_SELECT_RESULT</span> enum
+value indicating what decodebin should do next.
+</p>
+<p>
+A value of <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"><span class="type">GST_AUTOPLUG_SELECT_TRY</span></a> will try to autoplug an element from
+<em class="parameter"><code>factory</code></em>.
+</p>
+<p>
+A value of <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-EXPOSE:CAPS"><span class="type">GST_AUTOPLUG_SELECT_EXPOSE</span></a> will expose <em class="parameter"><code>pad</code></em> without plugging
+any element to it.
+</p>
+<p>
+A value of <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-SKIP:CAPS"><span class="type">GST_AUTOPLUG_SELECT_SKIP</span></a> will skip <em class="parameter"><code>factory</code></em> and move to the
+next factory.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+  Only the signal handler that is connected first will ever by invoked.
+  Don't connect signal handlers with the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
+  signal, they will never be invoked!
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>factory</code></em> :</span></p></td>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> to use.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <span class="type">GST_TYPE_AUTOPLUG_SELECT_RESULT</span> that indicates the required
+operation. The default handler will always return
+<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"><span class="type">GST_AUTOPLUG_SELECT_TRY</span></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-unknown-type"></a><h3>The <code class="literal">"unknown-type"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>          *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>         *caps,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted when a pad for which there is no further possible
+decoding is added to the uridecodebin.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>the new pad containing caps that cannot be resolved to a 'final'.
+stream type.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> of the pad that cannot be resolved.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-drained"></a><h3>The <code class="literal">"drained"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *arg0,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted when the data for the current uri is played.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-autoplug-sort"></a><h3>The <code class="literal">"autoplug-sort"</code> signal</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*        user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>          *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>         *caps,
+                                                        <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>     *factories,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+Once decodebin has found the possible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> objects to try
+for <em class="parameter"><code>caps</code></em> on <em class="parameter"><code>pad</code></em>, this signal is emited. The purpose of the signal is for
+the application to perform additional sorting or filtering on the element
+factory array.
+</p>
+<p>
+The callee should copy and modify <em class="parameter"><code>factories</code></em> or return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if the
+order should not change.
+</p>
+<p>
+</p>
+<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Note</h3>
+  Invocation of signal handlers stops after one signal handler has
+  returned something else than <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>. Signal handlers are invoked in
+  the order they were connected in.
+  Don't connect signal handlers with the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
+  signal, they will never be invoked!
+</div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>The uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>factories</code></em> :</span></p></td>
+<td>A <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> of possible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> to use.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>A new sorted array of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> objects.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstURIDecodeBin-source-setup"></a><h3>The <code class="literal">"source-setup"</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin"><span class="type">GstURIDecodeBin</span></a> *bin,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>      *source,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
+<p>
+This signal is emitted after the source element has been created, so
+it can be configured by setting additional properties (e.g. set a
+proxy server for an http source, or set the device and read speed for
+an audio cd source). This is functionally equivalent to connecting to
+the notify::source signal, but more convenient.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bin</code></em> :</span></p></td>
+<td>the uridecodebin.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
+<td>source element</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td>user data set when the signal handler was connected.</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 0.10.33</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
new file mode 100644
index 0000000..e1c7e9e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videoconvert</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">
+<link rel="next" href="gst-plugins-base-plugins-gdpdepay.html" title="gdpdepay">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-encodebin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-gdpdepay.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-videoconvert.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videoconvert.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-videoconvert"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videoconvert.top_of_page"></a>videoconvert</span></h2>
+<p>videoconvert</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-videoconvert.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert" title="struct GstVideoConvert">GstVideoConvert</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoconvert.description"></a><h2>Description</h2>
+<p>
+Convert video frames between a great variety of video formats.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id503871"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v videotestsrc ! video/x-raw,format=\(fourcc\)YUY2 ! videoconvert ! ximagesink
+</pre></div>
+</div>
+<p>
+</p>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoconvert.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoConvert"></a><h3>struct GstVideoConvert</h3>
+<pre class="programlisting">struct GstVideoConvert {
+  GstVideoFilter element;
+
+  GstVideoInfo from_info;
+  GstVideoInfo to_info;
+  gboolean negotiated;
+
+  ColorSpaceColorSpec from_spec;
+  ColorSpaceColorSpec to_spec;
+
+  VideoConvert *convert;
+  gboolean dither;
+};
+</pre>
+<p>
+Opaque object data structure.
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
new file mode 100644
index 0000000..d955753
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videorate</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">
+<link rel="next" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-uridecodebin.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videoscale.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-videorate.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videorate.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videorate.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videorate.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-videorate"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videorate.top_of_page"></a>videorate</span></h2>
+<p>videorate — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-videorate.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoRate"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate-struct" title="struct GstVideoRate">GstVideoRate</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videorate.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstVideoRate
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videorate.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title='The "drop" property'>drop</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title='The "duplicate" property'>duplicate</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--in" title='The "in" property'>in</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--new-pref" title='The "new-pref" property'>new-pref</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--out" title='The "out" property'>out</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent" title='The "silent" property'>silent</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--skip-to-first" title='The "skip-to-first" property'>skip-to-first</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--average-period" title='The "average-period" property'>average-period</a>"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop-only" title='The "drop-only" property'>drop-only</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videorate.description"></a><h2>Description</h2>
+<p>
+This element takes an incoming stream of timestamped video frames.
+It will produce a perfect stream that matches the source pad's framerate.
+</p>
+<p>
+The correction is performed by dropping and duplicating frames, no fancy
+algorithm is used to interpolate frames (yet).
+</p>
+<p>
+By default the element will simply negotiate the same framerate on its
+source and sink pad.
+</p>
+<p>
+This operation is useful to link to elements that require a perfect stream.
+Typical examples are formats that do not store timestamps for video frames,
+but only store a framerate, like Ogg and AVI.
+</p>
+<p>
+A conversion to a specific framerate can be forced by using filtered caps on
+the source pad.
+</p>
+<p>
+The properties <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--in" title='The "in" property'><span class="type">"in"</span></a>, <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--out" title='The "out" property'><span class="type">"out"</span></a>, <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title='The "duplicate" property'><span class="type">"duplicate"</span></a>
+and <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title='The "drop" property'><span class="type">"drop"</span></a> can be read to obtain information about number of
+input frames, output frames, dropped frames (i.e. the number of unused input
+frames) and duplicated frames (i.e. the number of times an input frame was
+duplicated, beside being used normally).
+</p>
+<p>
+An input stream that needs no adjustments will thus never have dropped or
+duplicated frames.
+</p>
+<p>
+When the <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent" title='The "silent" property'><span class="type">"silent"</span></a> property is set to FALSE, a GObject property
+notification will be emitted whenever one of the <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title='The "duplicate" property'><span class="type">"duplicate"</span></a> or
+<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title='The "drop" property'><span class="type">"drop"</span></a> values changes.
+This can potentially cause performance degradation.
+Note that property notification will happen from the streaming thread, so
+applications should be prepared for this.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id512718"></a><h3>Example pipelines</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videorate ! video/x-raw,framerate=15/1 ! xvimagesink
+</pre></div> Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing.
+To create the test Ogg/Theora file refer to the documentation of theoraenc.
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
+</pre></div> Capture video from a V4L device, and adjust the stream to 12.5 fps before
+encoding to Ogg/Theora.
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-09-02 (0.10.11)
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id547163"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-videorate.html#plugin-videorate">videorate</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id547225"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/jpeg</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/png</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/jpeg</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/png</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videorate.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoRate-struct"></a><h3>struct GstVideoRate</h3>
+<pre class="programlisting">struct GstVideoRate;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videorate.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVideoRate--drop"></a><h3>The <code class="literal">"drop"</code> property</h3>
+<pre class="programlisting">  "drop"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of dropped frames.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--duplicate"></a><h3>The <code class="literal">"duplicate"</code> property</h3>
+<pre class="programlisting">  "duplicate"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of duplicated frames.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--in"></a><h3>The <code class="literal">"in"</code> property</h3>
+<pre class="programlisting">  "in"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of input frames.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--new-pref"></a><h3>The <code class="literal">"new-pref"</code> property</h3>
+<pre class="programlisting">  "new-pref"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>Value indicating how much to prefer new frames (unused).</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--out"></a><h3>The <code class="literal">"out"</code> property</h3>
+<pre class="programlisting">  "out"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Number of output frames.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--silent"></a><h3>The <code class="literal">"silent"</code> property</h3>
+<pre class="programlisting">  "silent"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Don't emit notify for dropped and duplicated frames.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--skip-to-first"></a><h3>The <code class="literal">"skip-to-first"</code> property</h3>
+<pre class="programlisting">  "skip-to-first"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>
+Don't produce buffers before the first one we receive.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.10.25</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--average-period"></a><h3>The <code class="literal">"average-period"</code> property</h3>
+<pre class="programlisting">  "average-period"           <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read / Write</pre>
+<p>
+Arrange for maximum framerate by dropping frames beyond a certain framerate,
+where the framerate is calculated using a moving average over the
+configured.
+</p>
+<p>Allowed values: &lt;= G_MAXINT64</p>
+<p>Default value: 0</p>
+<p class="since">Since 0.10.36</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoRate--drop-only"></a><h3>The <code class="literal">"drop-only"</code> property</h3>
+<pre class="programlisting">  "drop-only"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>
+Only drop frames, no duplicates are produced.
+</p>
+<p>Default value: FALSE</p>
+<p class="since">Since 0.10.36</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
new file mode 100644
index 0000000..40b8fde
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
@@ -0,0 +1,480 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videoscale</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-videorate.html" title="videorate">
+<link rel="next" href="gst-plugins-base-plugins-videotestsrc.html" title="videotestsrc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-videorate.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videotestsrc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-videoscale.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videoscale.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videoscale.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videoscale.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-videoscale"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videoscale.top_of_page"></a>videoscale</span></h2>
+<p>videoscale — Resizes video</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-videoscale.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoScale"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScale-struct" title="struct GstVideoScale">GstVideoScale</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod" title="enum GstVideoScaleMethod">GstVideoScaleMethod</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">GstVideoFilter</a>
+                                 +----GstVideoScale
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScale--method" title='The "method" property'>method</a>"                   <a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod" title="enum GstVideoScaleMethod"><span class="type">GstVideoScaleMethod</span></a>   : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScale--add-borders" title='The "add-borders" property'>add-borders</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.description"></a><h2>Description</h2>
+<p>
+This element resizes video frames. By default the element will try to
+negotiate to the same size on the source and sinkpad so that no scaling
+is needed. It is therefore safe to insert this element in a pipeline to
+get more robust behaviour without any cost if no scaling is needed.
+</p>
+<p>
+This element supports a wide range of color spaces including various YUV and
+RGB formats and is therefore generally able to operate anywhere in a
+pipeline.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id543783"></a><h3>Example pipelines</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! ximagesink
+</pre></div> Decode an Ogg/Theora and display the video using ximagesink. Since
+ximagesink cannot perform scaling, the video scaling will be performed by
+videoscale when you resize the video window.
+To create the test Ogg/Theora file refer to the documentation of theoraenc.
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw, width=50 ! xvimagesink
+</pre></div> Decode an Ogg/Theora and display the video using xvimagesink with a width
+of 50.
+</div>
+<p>
+</p>
+<p>
+Last reviewed on 2006-03-02 (0.10.4)
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id543753"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-videoscale.html#plugin-videoscale">videoscale</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim.taymans@chello.be&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Converter/Video/Scaler</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id543694"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)v308, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, depth=(int)15, endianness=(int)1234, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y16 , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y8  , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)GREY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AY64, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)64, depth=(int)64, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)v308, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, depth=(int)15, endianness=(int)1234, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y16 , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y8  , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)GREY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AY64, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)64, depth=(int)64, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoScale-struct"></a><h3>struct GstVideoScale</h3>
+<pre class="programlisting">struct GstVideoScale;</pre>
+<p>
+Opaque data structure
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoScaleMethod"></a><h3>enum GstVideoScaleMethod</h3>
+<pre class="programlisting">typedef enum {
+  GST_VIDEO_SCALE_NEAREST,
+  GST_VIDEO_SCALE_BILINEAR,
+  GST_VIDEO_SCALE_4TAP,
+  GST_VIDEO_SCALE_LANCZOS
+} GstVideoScaleMethod;
+</pre>
+<p>
+The videoscale method to use.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-VIDEO-SCALE-NEAREST:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_SCALE_NEAREST</code></span></p></td>
+<td>use nearest neighbour scaling (fast and ugly)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-SCALE-BILINEAR:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_SCALE_BILINEAR</code></span></p></td>
+<td>use bilinear scaling (slower but prettier).
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-SCALE-4TAP:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_SCALE_4TAP</code></span></p></td>
+<td>use a 4-tap filter for scaling (slow).
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-SCALE-LANCZOS:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_SCALE_LANCZOS</code></span></p></td>
+<td>use a multitap Lanczos filter for scaling (slow).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVideoScale--method"></a><h3>The <code class="literal">"method"</code> property</h3>
+<pre class="programlisting">  "method"                   <a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod" title="enum GstVideoScaleMethod"><span class="type">GstVideoScaleMethod</span></a>   : Read / Write</pre>
+<p>method.</p>
+<p>Default value: Bilinear</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoScale--add-borders"></a><h3>The <code class="literal">"add-borders"</code> property</h3>
+<pre class="programlisting">  "add-borders"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Add black borders if necessary to keep the display aspect ratio.</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videoscale.see-also"></a><h2>See Also</h2>
+videorate, videoconvert
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
new file mode 100644
index 0000000..c5d5265
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
@@ -0,0 +1,628 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>videotestsrc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">
+<link rel="next" href="gst-plugins-base-plugins-volume.html" title="volume">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-videoscale.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-volume.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-videotestsrc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videotestsrc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videotestsrc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-videotestsrc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-videotestsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videotestsrc.top_of_page"></a>videotestsrc</span></h2>
+<p>videotestsrc — Creates a test video stream</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-videotestsrc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVideoTestSrc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc-struct" title="struct GstVideoTestSrc">GstVideoTestSrc</a>;
+enum                <a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern" title="enum GstVideoTestSrcPattern">GstVideoTestSrcPattern</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videotestsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                                 +----GstVideoTestSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videotestsrc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--pattern" title='The "pattern" property'>pattern</a>"                  <a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern" title="enum GstVideoTestSrcPattern"><span class="type">GstVideoTestSrcPattern</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--timestamp-offset" title='The "timestamp-offset" property'>timestamp-offset</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--is-live" title='The "is-live" property'>is-live</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--peer-alloc" title='The "peer-alloc" property'>peer-alloc</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--colorspec" title='The "colorspec" property'>colorspec</a>"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcColorSpec"><span class="type">GstVideoTestSrcColorSpec</span></a>  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--k0" title='The "k0" property'>k0</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt" title='The "kt" property'>kt</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt2" title='The "kt2" property'>kt2</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx" title='The "kx" property'>kx</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx2" title='The "kx2" property'>kx2</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxt" title='The "kxt" property'>kxt</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxy" title='The "kxy" property'>kxy</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky" title='The "ky" property'>ky</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky2" title='The "ky2" property'>ky2</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kyt" title='The "kyt" property'>kyt</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--xoffset" title='The "xoffset" property'>xoffset</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--yoffset" title='The "yoffset" property'>yoffset</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--background-color" title='The "background-color" property'>background-color</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--foreground-color" title='The "foreground-color" property'>foreground-color</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--horizontal-speed" title='The "horizontal-speed" property'>horizontal-speed</a>"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videotestsrc.description"></a><h2>Description</h2>
+<p>
+The videotestsrc element is used to produce test video data in a wide variaty
+of formats. The video test data produced can be controlled with the "pattern"
+property.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id550571"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v videotestsrc pattern=snow ! ximagesink
+</pre></div> Shows random noise in an X window.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id550552"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-videotestsrc.html#plugin-videotestsrc">videotestsrc</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>David A. Schleef &lt;ds@schleef.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id550478"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)UYVY, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YVYU, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)v308, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AYUV, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)v210, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)v216, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)UYVP, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)AY64, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YVU9, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YUV9, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)YV12, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)I420, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)NV12, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)NV21, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y41B, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y42B, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y444, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, endianness=(int)4321, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)24, endianness=(int)4321, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, endianness=(int)1234, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)16, endianness=(int)1234, depth=(int)15, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-rgb, bpp=(int)64, endianness=(int)4321, depth=(int)64, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-bayer, format=(string)bggr, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-bayer, format=(string)rggb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-bayer, format=(string)grbg, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-bayer, format=(string)gbrg, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videotestsrc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVideoTestSrc-struct"></a><h3>struct GstVideoTestSrc</h3>
+<pre class="programlisting">struct GstVideoTestSrc;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrcPattern"></a><h3>enum GstVideoTestSrcPattern</h3>
+<pre class="programlisting">typedef enum {
+  GST_VIDEO_TEST_SRC_SMPTE,
+  GST_VIDEO_TEST_SRC_SNOW,
+  GST_VIDEO_TEST_SRC_BLACK,
+  GST_VIDEO_TEST_SRC_WHITE,
+  GST_VIDEO_TEST_SRC_RED,
+  GST_VIDEO_TEST_SRC_GREEN,
+  GST_VIDEO_TEST_SRC_BLUE,
+  GST_VIDEO_TEST_SRC_CHECKERS1,
+  GST_VIDEO_TEST_SRC_CHECKERS2,
+  GST_VIDEO_TEST_SRC_CHECKERS4,
+  GST_VIDEO_TEST_SRC_CHECKERS8,
+  GST_VIDEO_TEST_SRC_CIRCULAR,
+  GST_VIDEO_TEST_SRC_BLINK,
+  GST_VIDEO_TEST_SRC_SMPTE75,
+  GST_VIDEO_TEST_SRC_ZONE_PLATE,
+  GST_VIDEO_TEST_SRC_GAMUT,
+  GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE,
+  GST_VIDEO_TEST_SRC_SOLID,
+  GST_VIDEO_TEST_SRC_BALL,
+  GST_VIDEO_TEST_SRC_SMPTE100,
+  GST_VIDEO_TEST_SRC_BAR
+} GstVideoTestSrcPattern;
+</pre>
+<p>
+The test pattern to produce.
+</p>
+<p>
+The Gamut pattern creates a checkerboard pattern of colors at the
+edge of the YCbCr gamut and nearby colors that are out of gamut.
+The pattern is divided into 4 regions: black, white, red, and blue.
+After conversion to RGB, the out-of-gamut colors should be converted
+to the same value as their in-gamut neighbors.  If the checkerboard
+pattern is still visible after conversion, this indicates a faulty
+conversion.  Image manipulation, such as adjusting contrast or
+brightness, can also cause the pattern to be visible.
+</p>
+<p>
+The Zone Plate pattern is based on BBC R&amp;D Report 1978/23, and can
+be used to test spatial frequency response of a system.  This
+pattern generator is controlled by the xoffset and yoffset parameters
+and also by all the parameters starting with 'k'.  The default
+parameters produce a grey pattern.  Try 'videotestsrc
+pattern=zone-plate kx2=20 ky2=20 kt=1' to produce something
+interesting.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-SMPTE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_SMPTE</code></span></p></td>
+<td>A standard SMPTE test pattern
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-SNOW:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_SNOW</code></span></p></td>
+<td>Random noise
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-BLACK:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_BLACK</code></span></p></td>
+<td>A black image
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-WHITE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_WHITE</code></span></p></td>
+<td>A white image
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-RED:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_RED</code></span></p></td>
+<td>A red image
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-GREEN:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_GREEN</code></span></p></td>
+<td>A green image
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-BLUE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_BLUE</code></span></p></td>
+<td>A blue image
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CHECKERS1:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CHECKERS1</code></span></p></td>
+<td>Checkers pattern (1px)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CHECKERS2:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CHECKERS2</code></span></p></td>
+<td>Checkers pattern (2px)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CHECKERS4:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CHECKERS4</code></span></p></td>
+<td>Checkers pattern (4px)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CHECKERS8:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CHECKERS8</code></span></p></td>
+<td>Checkers pattern (8px)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CIRCULAR:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CIRCULAR</code></span></p></td>
+<td>Circular pattern
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-BLINK:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_BLINK</code></span></p></td>
+<td>Alternate between black and white
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-SMPTE75:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_SMPTE75</code></span></p></td>
+<td>SMPTE test pattern (75% color bars)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_ZONE_PLATE</code></span></p></td>
+<td>Zone plate
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-GAMUT:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_GAMUT</code></span></p></td>
+<td>Gamut checking pattern
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE</code></span></p></td>
+<td>Chroma zone plate
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-SOLID:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_SOLID</code></span></p></td>
+<td>
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-BALL:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_BALL</code></span></p></td>
+<td>Moving ball
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-SMPTE100:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_SMPTE100</code></span></p></td>
+<td>SMPTE test pattern (100% color bars)
+</td>
+</tr>
+<tr>
+<td><p><a name="GST-VIDEO-TEST-SRC-BAR:CAPS"></a><span class="term"><code class="literal">GST_VIDEO_TEST_SRC_BAR</code></span></p></td>
+<td>Bar with foreground color
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-videotestsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVideoTestSrc--pattern"></a><h3>The <code class="literal">"pattern"</code> property</h3>
+<pre class="programlisting">  "pattern"                  <a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern" title="enum GstVideoTestSrcPattern"><span class="type">GstVideoTestSrcPattern</span></a>  : Read / Write</pre>
+<p>Type of test pattern to generate.</p>
+<p>Default value: SMPTE 100% color bars</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--timestamp-offset"></a><h3>The <code class="literal">"timestamp-offset"</code> property</h3>
+<pre class="programlisting">  "timestamp-offset"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint64"><span class="type">gint64</span></a>                : Read / Write</pre>
+<p>An offset added to timestamps set on buffers (in ns).</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--is-live"></a><h3>The <code class="literal">"is-live"</code> property</h3>
+<pre class="programlisting">  "is-live"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to act as a live source.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--peer-alloc"></a><h3>The <code class="literal">"peer-alloc"</code> property</h3>
+<pre class="programlisting">  "peer-alloc"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Ask the peer to allocate an output buffer.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--colorspec"></a><h3>The <code class="literal">"colorspec"</code> property</h3>
+<pre class="programlisting">  "colorspec"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcColorSpec"><span class="type">GstVideoTestSrcColorSpec</span></a>  : Read / Write</pre>
+<p>Generate video in the given color specification (Deprecated: use a caps filter with video/x-raw-yuv,color-matrix="sdtv" or "hdtv" instead).</p>
+<p>Default value: ITU-R Rec. BT.601</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--k0"></a><h3>The <code class="literal">"k0"</code> property</h3>
+<pre class="programlisting">  "k0"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate zero order phase, for generating plain fields or phase offsets.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kt"></a><h3>The <code class="literal">"kt"</code> property</h3>
+<pre class="programlisting">  "kt"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 1st order t phase, for generating phase rotation as a function of time.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kt2"></a><h3>The <code class="literal">"kt2"</code> property</h3>
+<pre class="programlisting">  "kt2"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 2nd order t phase, t*t/256 cycles per picture.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kx"></a><h3>The <code class="literal">"kx"</code> property</h3>
+<pre class="programlisting">  "kx"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 1st order x phase, for generating constant horizontal frequencies.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kx2"></a><h3>The <code class="literal">"kx2"</code> property</h3>
+<pre class="programlisting">  "kx2"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 2nd order x phase, normalised to kx2/256 cycles per horizontal pixel at width/2 from origin.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kxt"></a><h3>The <code class="literal">"kxt"</code> property</h3>
+<pre class="programlisting">  "kxt"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate x*t product phase, normalised to kxy/256 cycles per vertical pixel at width/2 from origin.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kxy"></a><h3>The <code class="literal">"kxy"</code> property</h3>
+<pre class="programlisting">  "kxy"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate x*y product phase.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--ky"></a><h3>The <code class="literal">"ky"</code> property</h3>
+<pre class="programlisting">  "ky"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 1st order y phase, for generating contant vertical frequencies.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--ky2"></a><h3>The <code class="literal">"ky2"</code> property</h3>
+<pre class="programlisting">  "ky2"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 2nd order y phase, normailsed to ky2/256 cycles per vertical pixel at height/2 from origin.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--kyt"></a><h3>The <code class="literal">"kyt"</code> property</h3>
+<pre class="programlisting">  "kyt"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate y*t product phase.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--xoffset"></a><h3>The <code class="literal">"xoffset"</code> property</h3>
+<pre class="programlisting">  "xoffset"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 2nd order products x offset.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--yoffset"></a><h3>The <code class="literal">"yoffset"</code> property</h3>
+<pre class="programlisting">  "yoffset"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Zoneplate 2nd order products y offset.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--background-color"></a><h3>The <code class="literal">"background-color"</code> property</h3>
+<pre class="programlisting">  "background-color"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>
+Color to use for background color of some patterns.  Default is
+black (0xff000000).
+</p>
+<p>Default value: 4278190080</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--foreground-color"></a><h3>The <code class="literal">"foreground-color"</code> property</h3>
+<pre class="programlisting">  "foreground-color"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
+<p>
+Color to use for solid-color pattern and foreground color of other
+patterns.  Default is white (0xffffffff).
+</p>
+<p>Default value: 4294967295</p>
+<p class="since">Since 0.10.31</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoTestSrc--horizontal-speed"></a><h3>The <code class="literal">"horizontal-speed"</code> property</h3>
+<pre class="programlisting">  "horizontal-speed"         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Scroll image number of pixels per frame (positive is scroll to the left).</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-volume.html b/docs/plugins/html/gst-plugins-base-plugins-volume.html
new file mode 100644
index 0000000..7cdeb15
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-volume.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>volume</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-videotestsrc.html" title="videotestsrc">
+<link rel="next" href="gst-plugins-base-plugins-vorbisdec.html" title="vorbisdec">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-videotestsrc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-vorbisdec.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-volume.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-volume.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-volume.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-volume.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-volume.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-volume"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-volume.top_of_page"></a>volume</span></h2>
+<p>volume — Set volume on audio/raw streams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-volume.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVolume"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-volume.html#GstVolume-struct" title="struct GstVolume">GstVolume</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+                           +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstaudiofilter.html#GstAudioFilter">GstAudioFilter</a>
+                                 +----GstVolume
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVolume implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstmixer.html#GstMixer">GstMixer</a> and  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume">GstStreamVolume</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-volume.html#GstVolume--mute" title='The "mute" property'>mute</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-volume.html#GstVolume--volume" title='The "volume" property'>volume</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.description"></a><h2>Description</h2>
+<p>
+The volume element changes the volume of the audio data.
+</p>
+<p>
+</p>
+<div class="refsect2">
+<a name="id523359"></a><h3>Example launch line</h3>
+<div class="informalexample"><pre class="programlisting">
+gst-launch -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
+</pre></div> This pipeline shows that the level of audiotestsrc has been halved
+(peak values are around -6 dB and RMS around -9 dB) compared to
+the same pipeline without the volume element.
+</div>
+<p>
+</p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id499668"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-volume.html#plugin-volume">volume</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Andy Wingo &lt;wingo@pobox.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Filter/Effect/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id496503"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVolume-struct"></a><h3>struct GstVolume</h3>
+<pre class="programlisting">struct GstVolume;</pre>
+<p>
+Opaque data structure.
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-volume.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVolume--mute"></a><h3>The <code class="literal">"mute"</code> property</h3>
+<pre class="programlisting">  "mute"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>mute channel.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVolume--volume"></a><h3>The <code class="literal">"volume"</code> property</h3>
+<pre class="programlisting">  "volume"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>               : Read / Write</pre>
+<p>volume factor, 1.0=100%.</p>
+<p>Allowed values: [0,10]</p>
+<p>Default value: 1</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
new file mode 100644
index 0000000..a944122
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>vorbisdec</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-volume.html" title="volume">
+<link rel="next" href="gst-plugins-base-plugins-vorbisenc.html" title="vorbisenc">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-volume.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-vorbisenc.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-vorbisdec.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisdec.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisdec.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-vorbisdec"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisdec.top_of_page"></a>vorbisdec</span></h2>
+<p>vorbisdec — decode raw vorbis streams to float audio</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-vorbisdec.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVorbisDec"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-vorbisdec.html#GstVorbisDec-struct" title="struct GstVorbisDec">GstVorbisDec</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisdec.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstVorbisDec
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisdec.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id487196"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-vorbis.html#plugin-vorbis">vorbis</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Benjamin Otte &lt;otte@gnome.org&gt;, Chris Lord &lt;chris@openedhand.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Decoder/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id506258"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 256 ], endianness=(int)1234, width=(int)32</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisdec.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVorbisDec-struct"></a><h3>struct GstVorbisDec</h3>
+<pre class="programlisting">struct GstVorbisDec;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
new file mode 100644
index 0000000..238372b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>vorbisenc</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-vorbisdec.html" title="vorbisdec">
+<link rel="next" href="gst-plugins-base-plugins-vorbisparse.html" title="vorbisparse">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-vorbisdec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-vorbisparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-vorbisenc.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisenc.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisenc.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisenc.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisenc.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-vorbisenc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisenc.top_of_page"></a>vorbisenc</span></h2>
+<p>vorbisenc — Encodes audio in Vorbis format</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-vorbisenc.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVorbisEnc"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc-struct" title="struct GstVorbisEnc">GstVorbisEnc</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstVorbisEnc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVorbisEnc implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html">GstPreset</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--bitrate" title='The "bitrate" property'>bitrate</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--last-message" title='The "last-message" property'>last-message</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--managed" title='The "managed" property'>managed</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--max-bitrate" title='The "max-bitrate" property'>max-bitrate</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--min-bitrate" title='The "min-bitrate" property'>min-bitrate</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--quality" title='The "quality" property'>quality</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a>                : Read / Write
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id548991"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-vorbis.html#plugin-vorbis">vorbis</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Monty &lt;monty@xiph.org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Encoder/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id552484"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw-float, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 256 ], endianness=(int)1234, width=(int)32</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVorbisEnc-struct"></a><h3>struct GstVorbisEnc</h3>
+<pre class="programlisting">struct GstVorbisEnc;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisenc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstVorbisEnc--bitrate"></a><h3>The <code class="literal">"bitrate"</code> property</h3>
+<pre class="programlisting">  "bitrate"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Attempt to encode at a bitrate averaging this (in bps). This uses the bitrate management engine, and is not recommended for most users. Quality is a better alternative. (-1 == disabled).</p>
+<p>Allowed values: [-1,250001]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVorbisEnc--last-message"></a><h3>The <code class="literal">"last-message"</code> property</h3>
+<pre class="programlisting">  "last-message"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>The last status message.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVorbisEnc--managed"></a><h3>The <code class="literal">"managed"</code> property</h3>
+<pre class="programlisting">  "managed"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Enable bitrate management engine.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVorbisEnc--max-bitrate"></a><h3>The <code class="literal">"max-bitrate"</code> property</h3>
+<pre class="programlisting">  "max-bitrate"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Specify a maximum bitrate (in bps). Useful for streaming applications. (-1 == disabled).</p>
+<p>Allowed values: [-1,250001]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVorbisEnc--min-bitrate"></a><h3>The <code class="literal">"min-bitrate"</code> property</h3>
+<pre class="programlisting">  "min-bitrate"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Specify a minimum bitrate (in bps). Useful for encoding for a fixed-size channel. (-1 == disabled).</p>
+<p>Allowed values: [-1,250001]</p>
+<p>Default value: -1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVorbisEnc--quality"></a><h3>The <code class="literal">"quality"</code> property</h3>
+<pre class="programlisting">  "quality"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a>                : Read / Write</pre>
+<p>Specify quality instead of specifying a particular bitrate.</p>
+<p>Allowed values: [-0.1,1]</p>
+<p>Default value: 0.3</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
new file mode 100644
index 0000000..074f436
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>vorbisparse</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-vorbisenc.html" title="vorbisenc">
+<link rel="next" href="gst-plugins-base-plugins-vorbistag.html" title="vorbistag">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-vorbisenc.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-vorbistag.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-vorbisparse.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisparse.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbisparse.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-vorbisparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisparse.top_of_page"></a>vorbisparse</span></h2>
+<p>vorbisparse — parse raw vorbis streams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-vorbisparse.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVorbisParse"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse-struct" title="struct GstVorbisParse">GstVorbisParse</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisparse.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----GstVorbisParse
+                           +----<a class="link" href="gst-plugins-base-plugins-vorbistag.html#GstVorbisTag">GstVorbisTag</a>
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id511403"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-vorbis.html#plugin-vorbis">vorbis</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id473624"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbisparse.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVorbisParse-struct"></a><h3>struct GstVorbisParse</h3>
+<pre class="programlisting">struct GstVorbisParse;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
new file mode 100644
index 0000000..303b68a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>vorbistag</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-vorbisparse.html" title="vorbisparse">
+<link rel="next" href="gst-plugins-base-plugins-ximagesink.html" title="ximagesink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-vorbisparse.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-ximagesink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-vorbistag.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbistag.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbistag.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-vorbistag.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-vorbistag"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbistag.top_of_page"></a>vorbistag</span></h2>
+<p>vorbistag — Retags vorbis streams</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-vorbistag.synopsis"></a><h2>Synopsis</h2>
+<a name="GstVorbisTag"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-vorbistag.html#GstVorbisTag-struct" title="struct GstVorbisTag">GstVorbisTag</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbistag.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a class="link" href="gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse">GstVorbisParse</a>
+                           +----GstVorbisTag
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbistag.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVorbisTag implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html">GstTagSetter</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbistag.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id476646"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-vorbis.html#plugin-vorbis">vorbis</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>James Livingston &lt;doclivingston@gmail.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Formatter/Metadata</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id551251"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-vorbistag.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstVorbisTag-struct"></a><h3>struct GstVorbisTag</h3>
+<pre class="programlisting">struct GstVorbisTag;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
new file mode 100644
index 0000000..2e17d8b
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ximagesink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-vorbistag.html" title="vorbistag">
+<link rel="next" href="gst-plugins-base-plugins-xvimagesink.html" title="xvimagesink">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-vorbistag.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-base-plugins-xvimagesink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-ximagesink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-ximagesink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-ximagesink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-ximagesink.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-ximagesink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-ximagesink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ximagesink.top_of_page"></a>ximagesink</span></h2>
+<p>ximagesink — A standard X based videosink</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-ximagesink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstXImageSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink-struct" title="struct GstXImageSink">GstXImageSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSink">GstVideoSink</a>
+                                 +----GstXImageSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstXImageSink implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstxoverlay.html#GstXOverlay">GstXOverlay</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--display" title='The "display" property'>display</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--pixel-aspect-ratio" title='The "pixel-aspect-ratio" property'>pixel-aspect-ratio</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--synchronous" title='The "synchronous" property'>synchronous</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--force-aspect-ratio" title='The "force-aspect-ratio" property'>force-aspect-ratio</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-events" title='The "handle-events" property'>handle-events</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-expose" title='The "handle-expose" property'>handle-expose</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-height" title='The "window-height" property'>window-height</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-width" title='The "window-width" property'>window-width</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id554711"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-ximagesink.html#plugin-ximagesink">ximagesink</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Moutte &lt;julien@moutte.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id554773"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstXImageSink-struct"></a><h3>struct GstXImageSink</h3>
+<pre class="programlisting">struct GstXImageSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ximagesink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstXImageSink--display"></a><h3>The <code class="literal">"display"</code> property</h3>
+<pre class="programlisting">  "display"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>X Display name.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--pixel-aspect-ratio"></a><h3>The <code class="literal">"pixel-aspect-ratio"</code> property</h3>
+<pre class="programlisting">  "pixel-aspect-ratio"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The pixel aspect ratio of the device.</p>
+<p>Default value: "1/1"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--synchronous"></a><h3>The <code class="literal">"synchronous"</code> property</h3>
+<pre class="programlisting">  "synchronous"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, runs the X display in synchronous mode. (used only for debugging).</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--force-aspect-ratio"></a><h3>The <code class="literal">"force-aspect-ratio"</code> property</h3>
+<pre class="programlisting">  "force-aspect-ratio"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, reverse caps negotiation (scaling) will respect original aspect ratio.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--handle-events"></a><h3>The <code class="literal">"handle-events"</code> property</h3>
+<pre class="programlisting">  "handle-events"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, XEvents will be selected and handled.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--handle-expose"></a><h3>The <code class="literal">"handle-expose"</code> property</h3>
+<pre class="programlisting">  "handle-expose"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, the current frame will always be drawn in response to X Expose events.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--window-height"></a><h3>The <code class="literal">"window-height"</code> property</h3>
+<pre class="programlisting">  "window-height"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Height of the window.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXImageSink--window-width"></a><h3>The <code class="literal">"window-width"</code> property</h3>
+<pre class="programlisting">  "window-width"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Width of the window.</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
new file mode 100644
index 0000000..ddd7f01
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
@@ -0,0 +1,295 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>xvimagesink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-ximagesink.html" title="ximagesink">
+<link rel="next" href="ch02.html" title="gst-plugins-base Plugins">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-base-plugins-ximagesink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Base Plugins 0.11 Plugins Reference Manual</th>
+<td><a accesskey="n" href="ch02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-base-plugins-xvimagesink.synopsis" class="shortcut">Top</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-xvimagesink.description" class="shortcut">Description</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-xvimagesink.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-xvimagesink.implemented-interfaces" class="shortcut">Implemented Interfaces</a>
+                   | 
+                  <a href="#gst-plugins-base-plugins-xvimagesink.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-xvimagesink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-xvimagesink.top_of_page"></a>xvimagesink</span></h2>
+<p>xvimagesink — A Xv based videosink</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-base-plugins-xvimagesink.synopsis"></a><h2>Synopsis</h2>
+<a name="GstXvImageSink"></a><pre class="synopsis">struct              <a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink-struct" title="struct GstXvImageSink">GstXvImageSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+   +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                           +----<a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstvideosink.html#GstVideoSink">GstVideoSink</a>
+                                 +----GstXvImageSink
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstXvImageSink implements
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstnavigation.html#GstNavigation">GstNavigation</a>,  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstxoverlay.html#GstXOverlay">GstXOverlay</a>,  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance">GstColorBalance</a> and  <a href="../gst-plugins-base-libs-0.11/gst-plugins-base-libs-gstpropertyprobe.html#GstPropertyProbe">GstPropertyProbe</a>.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--brightness" title='The "brightness" property'>brightness</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--contrast" title='The "contrast" property'>contrast</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--display" title='The "display" property'>display</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--hue" title='The "hue" property'>hue</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--pixel-aspect-ratio" title='The "pixel-aspect-ratio" property'>pixel-aspect-ratio</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--saturation" title='The "saturation" property'>saturation</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--synchronous" title='The "synchronous" property'>synchronous</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--force-aspect-ratio" title='The "force-aspect-ratio" property'>force-aspect-ratio</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device" title='The "device" property'>device</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device-name" title='The "device-name" property'>device-name</a>"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-events" title='The "handle-events" property'>handle-events</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--double-buffer" title='The "double-buffer" property'>double-buffer</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-expose" title='The "handle-expose" property'>handle-expose</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--autopaint-colorkey" title='The "autopaint-colorkey" property'>autopaint-colorkey</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--colorkey" title='The "colorkey" property'>colorkey</a>"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--draw-borders" title='The "draw-borders" property'>draw-borders</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-height" title='The "window-height" property'>window-height</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+  "<a class="link" href="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-width" title='The "window-width" property'>window-width</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id557132"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-xvimagesink.html#plugin-xvimagesink">xvimagesink</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Julien Moutte &lt;julien@moutte.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Sink/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id557194"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/x-raw-rgb, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstXvImageSink-struct"></a><h3>struct GstXvImageSink</h3>
+<pre class="programlisting">struct GstXvImageSink;</pre>
+<p>
+</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-xvimagesink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstXvImageSink--brightness"></a><h3>The <code class="literal">"brightness"</code> property</h3>
+<pre class="programlisting">  "brightness"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The brightness of the video.</p>
+<p>Allowed values: [-1000,1000]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--contrast"></a><h3>The <code class="literal">"contrast"</code> property</h3>
+<pre class="programlisting">  "contrast"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The contrast of the video.</p>
+<p>Allowed values: [-1000,1000]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--display"></a><h3>The <code class="literal">"display"</code> property</h3>
+<pre class="programlisting">  "display"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>X Display name.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--hue"></a><h3>The <code class="literal">"hue"</code> property</h3>
+<pre class="programlisting">  "hue"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The hue of the video.</p>
+<p>Allowed values: [-1000,1000]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--pixel-aspect-ratio"></a><h3>The <code class="literal">"pixel-aspect-ratio"</code> property</h3>
+<pre class="programlisting">  "pixel-aspect-ratio"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The pixel aspect ratio of the device.</p>
+<p>Default value: "1/1"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--saturation"></a><h3>The <code class="literal">"saturation"</code> property</h3>
+<pre class="programlisting">  "saturation"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>The saturation of the video.</p>
+<p>Allowed values: [-1000,1000]</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--synchronous"></a><h3>The <code class="literal">"synchronous"</code> property</h3>
+<pre class="programlisting">  "synchronous"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, runs the X display in synchronous mode. (used only for debugging).</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--force-aspect-ratio"></a><h3>The <code class="literal">"force-aspect-ratio"</code> property</h3>
+<pre class="programlisting">  "force-aspect-ratio"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, scaling will respect original aspect ratio.</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--device"></a><h3>The <code class="literal">"device"</code> property</h3>
+<pre class="programlisting">  "device"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
+<p>The number of the video adaptor.</p>
+<p>Default value: "0"</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--device-name"></a><h3>The <code class="literal">"device-name"</code> property</h3>
+<pre class="programlisting">  "device-name"              <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
+<p>The name of the video adaptor.</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--handle-events"></a><h3>The <code class="literal">"handle-events"</code> property</h3>
+<pre class="programlisting">  "handle-events"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, XEvents will be selected and handled.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--double-buffer"></a><h3>The <code class="literal">"double-buffer"</code> property</h3>
+<pre class="programlisting">  "double-buffer"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to double-buffer the output.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--handle-expose"></a><h3>The <code class="literal">"handle-expose"</code> property</h3>
+<pre class="programlisting">  "handle-expose"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>When enabled, the current frame will always be drawn in response to X Expose events.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--autopaint-colorkey"></a><h3>The <code class="literal">"autopaint-colorkey"</code> property</h3>
+<pre class="programlisting">  "autopaint-colorkey"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Whether to autofill overlay with colorkey.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--colorkey"></a><h3>The <code class="literal">"colorkey"</code> property</h3>
+<pre class="programlisting">  "colorkey"                 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write</pre>
+<p>Color to use for the overlay mask.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--draw-borders"></a><h3>The <code class="literal">"draw-borders"</code> property</h3>
+<pre class="programlisting">  "draw-borders"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
+<p>Draw black borders to fill unused area in force-aspect-ratio mode.</p>
+<p>Default value: TRUE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--window-height"></a><h3>The <code class="literal">"window-height"</code> property</h3>
+<pre class="programlisting">  "window-height"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Height of the window.</p>
+<p>Default value: 0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstXvImageSink--window-width"></a><h3>The <code class="literal">"window-width"</code> property</h3>
+<pre class="programlisting">  "window-width"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a>               : Read</pre>
+<p>Width of the window.</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins.devhelp2 b/docs/plugins/html/gst-plugins-base-plugins.devhelp2
new file mode 100644
index 0000000..1020971
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins.devhelp2
@@ -0,0 +1,617 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GStreamer Base Plugins 0.11 Plugins Reference Manual" link="index.html" author="" name="gst-plugins-base-plugins" version="2" language="c">
+  <chapters>
+    <sub name="gst-plugins-base Elements" link="ch01.html">
+      <sub name="adder" link="gst-plugins-base-plugins-adder.html"/>
+      <sub name="appsrc" link="gst-plugins-base-plugins-appsrc.html"/>
+      <sub name="appsink" link="gst-plugins-base-plugins-appsink.html"/>
+      <sub name="alsamixer" link="gst-plugins-base-plugins-alsamixer.html"/>
+      <sub name="alsasink" link="gst-plugins-base-plugins-alsasink.html"/>
+      <sub name="alsasrc" link="gst-plugins-base-plugins-alsasrc.html"/>
+      <sub name="audioconvert" link="gst-plugins-base-plugins-audioconvert.html"/>
+      <sub name="audiorate" link="gst-plugins-base-plugins-audiorate.html"/>
+      <sub name="audioresample" link="gst-plugins-base-plugins-audioresample.html"/>
+      <sub name="audiotestsrc" link="gst-plugins-base-plugins-audiotestsrc.html"/>
+      <sub name="cdparanoiasrc" link="gst-plugins-base-plugins-cdparanoiasrc.html"/>
+      <sub name="clockoverlay" link="gst-plugins-base-plugins-clockoverlay.html"/>
+      <sub name="decodebin" link="gst-plugins-base-plugins-decodebin.html"/>
+      <sub name="encodebin" link="gst-plugins-base-plugins-encodebin.html"/>
+      <sub name="videoconvert" link="gst-plugins-base-plugins-videoconvert.html"/>
+      <sub name="gdpdepay" link="gst-plugins-base-plugins-gdpdepay.html"/>
+      <sub name="gdppay" link="gst-plugins-base-plugins-gdppay.html"/>
+      <sub name="giosink" link="gst-plugins-base-plugins-giosink.html"/>
+      <sub name="giosrc" link="gst-plugins-base-plugins-giosrc.html"/>
+      <sub name="giostreamsink" link="gst-plugins-base-plugins-giostreamsink.html"/>
+      <sub name="giostreamsrc" link="gst-plugins-base-plugins-giostreamsrc.html"/>
+      <sub name="multifdsink" link="gst-plugins-base-plugins-multifdsink.html"/>
+      <sub name="oggdemux" link="gst-plugins-base-plugins-oggdemux.html"/>
+      <sub name="oggmux" link="gst-plugins-base-plugins-oggmux.html"/>
+      <sub name="playbin" link="gst-plugins-base-plugins-playbin.html"/>
+      <sub name="subtitleoverlay" link="gst-plugins-base-plugins-subtitleoverlay.html"/>
+      <sub name="tcpclientsrc" link="gst-plugins-base-plugins-tcpclientsrc.html"/>
+      <sub name="tcpclientsink" link="gst-plugins-base-plugins-tcpclientsink.html"/>
+      <sub name="tcpserversrc" link="gst-plugins-base-plugins-tcpserversrc.html"/>
+      <sub name="tcpserversink" link="gst-plugins-base-plugins-tcpserversink.html"/>
+      <sub name="textoverlay" link="gst-plugins-base-plugins-textoverlay.html"/>
+      <sub name="textrender" link="gst-plugins-base-plugins-textrender.html"/>
+      <sub name="theoradec" link="gst-plugins-base-plugins-theoradec.html"/>
+      <sub name="theoraenc" link="gst-plugins-base-plugins-theoraenc.html"/>
+      <sub name="theoraparse" link="gst-plugins-base-plugins-theoraparse.html"/>
+      <sub name="timeoverlay" link="gst-plugins-base-plugins-timeoverlay.html"/>
+      <sub name="uridecodebin" link="gst-plugins-base-plugins-uridecodebin.html"/>
+      <sub name="videorate" link="gst-plugins-base-plugins-videorate.html"/>
+      <sub name="videoscale" link="gst-plugins-base-plugins-videoscale.html"/>
+      <sub name="videotestsrc" link="gst-plugins-base-plugins-videotestsrc.html"/>
+      <sub name="volume" link="gst-plugins-base-plugins-volume.html"/>
+      <sub name="vorbisdec" link="gst-plugins-base-plugins-vorbisdec.html"/>
+      <sub name="vorbisenc" link="gst-plugins-base-plugins-vorbisenc.html"/>
+      <sub name="vorbisparse" link="gst-plugins-base-plugins-vorbisparse.html"/>
+      <sub name="vorbistag" link="gst-plugins-base-plugins-vorbistag.html"/>
+      <sub name="ximagesink" link="gst-plugins-base-plugins-ximagesink.html"/>
+      <sub name="xvimagesink" link="gst-plugins-base-plugins-xvimagesink.html"/>
+    </sub>
+    <sub name="gst-plugins-base Plugins" link="ch02.html">
+      <sub name="adder" link="gst-plugins-base-plugins-plugin-adder.html"/>
+      <sub name="alsa" link="gst-plugins-base-plugins-plugin-alsa.html"/>
+      <sub name="app" link="gst-plugins-base-plugins-plugin-app.html"/>
+      <sub name="audioconvert" link="gst-plugins-base-plugins-plugin-audioconvert.html"/>
+      <sub name="audiorate" link="gst-plugins-base-plugins-plugin-audiorate.html"/>
+      <sub name="audioresample" link="gst-plugins-base-plugins-plugin-audioresample.html"/>
+      <sub name="audiotestsrc" link="gst-plugins-base-plugins-plugin-audiotestsrc.html"/>
+      <sub name="cdparanoia" link="gst-plugins-base-plugins-plugin-cdparanoia.html"/>
+      <sub name="decodebin" link="gst-plugins-base-plugins-plugin-decodebin.html"/>
+      <sub name="encoding" link="gst-plugins-base-plugins-plugin-encoding.html"/>
+      <sub name="gdp" link="gst-plugins-base-plugins-plugin-gdp.html"/>
+      <sub name="gio" link="gst-plugins-base-plugins-plugin-gio.html"/>
+      <sub name="libvisual" link="gst-plugins-base-plugins-plugin-libvisual.html"/>
+      <sub name="ogg" link="gst-plugins-base-plugins-plugin-ogg.html"/>
+      <sub name="pango" link="gst-plugins-base-plugins-plugin-pango.html"/>
+      <sub name="playback" link="gst-plugins-base-plugins-plugin-playback.html"/>
+      <sub name="subparse" link="gst-plugins-base-plugins-plugin-subparse.html"/>
+      <sub name="tcp" link="gst-plugins-base-plugins-plugin-tcp.html"/>
+      <sub name="theora" link="gst-plugins-base-plugins-plugin-theora.html"/>
+      <sub name="typefindfunctions" link="gst-plugins-base-plugins-plugin-typefindfunctions.html"/>
+      <sub name="uridecodebin" link="gst-plugins-base-plugins-plugin-uridecodebin.html"/>
+      <sub name="videorate" link="gst-plugins-base-plugins-plugin-videorate.html"/>
+      <sub name="videoscale" link="gst-plugins-base-plugins-plugin-videoscale.html"/>
+      <sub name="videotestsrc" link="gst-plugins-base-plugins-plugin-videotestsrc.html"/>
+      <sub name="volume" link="gst-plugins-base-plugins-plugin-volume.html"/>
+      <sub name="vorbis" link="gst-plugins-base-plugins-plugin-vorbis.html"/>
+      <sub name="ximagesink" link="gst-plugins-base-plugins-plugin-ximagesink.html"/>
+      <sub name="xvimagesink" link="gst-plugins-base-plugins-plugin-xvimagesink.html"/>
+    </sub>
+    <sub name="gst-plugins-base Classes" link="ch03.html"/>
+  </chapters>
+  <functions>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-adder.html#id473522"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-adder.html#id473497"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-adder.html#id500681"/>
+    <keyword type="struct" name="struct GstAdder" link="gst-plugins-base-plugins-adder.html#GstAdder-struct"/>
+    <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-base-plugins-adder.html#GstAdder--caps"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-appsrc.html#id507510"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-appsrc.html#id507572"/>
+    <keyword type="struct" name="struct GstAppSrc" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-struct"/>
+    <keyword type="property" name="The &quot;block&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--block"/>
+    <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--caps"/>
+    <keyword type="property" name="The &quot;format&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--format"/>
+    <keyword type="property" name="The &quot;is-live&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--is-live"/>
+    <keyword type="property" name="The &quot;max-bytes&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-bytes"/>
+    <keyword type="property" name="The &quot;max-latency&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-latency"/>
+    <keyword type="property" name="The &quot;min-latency&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-latency"/>
+    <keyword type="property" name="The &quot;size&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--size"/>
+    <keyword type="property" name="The &quot;stream-type&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--stream-type"/>
+    <keyword type="property" name="The &quot;emit-signals&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--emit-signals"/>
+    <keyword type="property" name="The &quot;min-percent&quot; property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-percent"/>
+    <keyword type="signal" name="The &quot;end-of-stream&quot; signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-end-of-stream"/>
+    <keyword type="signal" name="The &quot;enough-data&quot; signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-enough-data"/>
+    <keyword type="signal" name="The &quot;need-data&quot; signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data"/>
+    <keyword type="signal" name="The &quot;push-buffer&quot; signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer"/>
+    <keyword type="signal" name="The &quot;seek-data&quot; signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-appsink.html#id513544"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-appsink.html#id513605"/>
+    <keyword type="struct" name="struct GstAppSink" link="gst-plugins-base-plugins-appsink.html#GstAppSink-struct"/>
+    <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--caps"/>
+    <keyword type="property" name="The &quot;drop&quot; property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--drop"/>
+    <keyword type="property" name="The &quot;emit-signals&quot; property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals"/>
+    <keyword type="property" name="The &quot;eos&quot; property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--eos"/>
+    <keyword type="property" name="The &quot;max-buffers&quot; property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers"/>
+    <keyword type="signal" name="The &quot;eos&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-eos"/>
+    <keyword type="signal" name="The &quot;new-buffer&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer"/>
+    <keyword type="signal" name="The &quot;new-preroll&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll"/>
+    <keyword type="signal" name="The &quot;pull-buffer&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer"/>
+    <keyword type="signal" name="The &quot;pull-preroll&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll"/>
+    <keyword type="signal" name="The &quot;new-buffer-list&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer-list"/>
+    <keyword type="signal" name="The &quot;pull-buffer-list&quot; signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer-list"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-alsamixer.html#id475040"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-alsamixer.html#id475102"/>
+    <keyword type="struct" name="struct GstAlsaMixerElement" link="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement-struct"/>
+    <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device"/>
+    <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device-name"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-alsasink.html#id500156"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-alsasink.html#id514777"/>
+    <keyword type="struct" name="struct GstAlsaSink" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct"/>
+    <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device"/>
+    <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name"/>
+    <keyword type="property" name="The &quot;card-name&quot; property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-alsasrc.html#id486142"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-alsasrc.html#id515248"/>
+    <keyword type="struct" name="struct GstAlsaSrc" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct"/>
+    <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device"/>
+    <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name"/>
+    <keyword type="property" name="The &quot;card-name&quot; property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audioconvert.html#id516683"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audioconvert.html#id514682"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audioconvert.html#id492892"/>
+    <keyword type="struct" name="struct GstAudioConvert" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert-struct"/>
+    <keyword type="enum" name="enum GstAudioConvertDithering" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering"/>
+    <keyword type="enum" name="enum GstAudioConvertNoiseShaping" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping"/>
+    <keyword type="property" name="The &quot;dithering&quot; property" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering"/>
+    <keyword type="property" name="The &quot;noise-shaping&quot; property" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-audiorate.html#id517721"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audiorate.html#id517744"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audiorate.html#id517806"/>
+    <keyword type="struct" name="struct GstAudioRate" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate-struct"/>
+    <keyword type="property" name="The &quot;add&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--add"/>
+    <keyword type="property" name="The &quot;drop&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop"/>
+    <keyword type="property" name="The &quot;in&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--in"/>
+    <keyword type="property" name="The &quot;out&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--out"/>
+    <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--silent"/>
+    <keyword type="property" name="The &quot;tolerance&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--tolerance"/>
+    <keyword type="property" name="The &quot;skip-to-first&quot; property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--skip-to-first"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audioresample.html#id497912"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audioresample.html#id497906"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audioresample.html#id494031"/>
+    <keyword type="struct" name="struct GstAudioResample" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample-struct"/>
+    <keyword type="property" name="The &quot;filter-length&quot; property" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample--filter-length"/>
+    <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample--quality"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audiotestsrc.html#id519060"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audiotestsrc.html#id519093"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audiotestsrc.html#id519155"/>
+    <keyword type="struct" name="struct GstAudioTestSrc" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc-struct"/>
+    <keyword type="enum" name="enum GstAudioTestSrcWave" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave"/>
+    <keyword type="property" name="The &quot;freq&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--freq"/>
+    <keyword type="property" name="The &quot;is-live&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--is-live"/>
+    <keyword type="property" name="The &quot;samplesperbuffer&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--samplesperbuffer"/>
+    <keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--timestamp-offset"/>
+    <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--volume"/>
+    <keyword type="property" name="The &quot;wave&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--wave"/>
+    <keyword type="property" name="The &quot;can-activate-pull&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-pull"/>
+    <keyword type="property" name="The &quot;can-activate-push&quot; property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-push"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-cdparanoiasrc.html#id520071"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-cdparanoiasrc.html#id520133"/>
+    <keyword type="struct" name="struct GstCdParanoiaSrc" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-struct"/>
+    <keyword type="property" name="The &quot;generic-device&quot; property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--generic-device"/>
+    <keyword type="property" name="The &quot;paranoia-mode&quot; property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--paranoia-mode"/>
+    <keyword type="property" name="The &quot;read-speed&quot; property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--read-speed"/>
+    <keyword type="property" name="The &quot;search-overlap&quot; property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--search-overlap"/>
+    <keyword type="property" name="The &quot;cache-size&quot; property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--cache-size"/>
+    <keyword type="signal" name="The &quot;transport-error&quot; signal" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-transport-error"/>
+    <keyword type="signal" name="The &quot;uncorrected-error&quot; signal" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-uncorrected-error"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-clockoverlay.html#id520875"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-clockoverlay.html#id520820"/>
+    <keyword type="struct" name="struct GstClockOverlay" link="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay-struct"/>
+    <keyword type="property" name="The &quot;time-format&quot; property" link="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay--time-format"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-decodebin.html#id522627"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-decodebin.html#id522690"/>
+    <keyword type="struct" name="struct GstDecodeBin" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-struct"/>
+    <keyword type="property" name="The &quot;threaded&quot; property" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--threaded"/>
+    <keyword type="property" name="The &quot;sink-caps&quot; property" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--sink-caps"/>
+    <keyword type="signal" name="The &quot;new-decoded-pad&quot; signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-new-decoded-pad"/>
+    <keyword type="signal" name="The &quot;removed-decoded-pad&quot; signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-removed-decoded-pad"/>
+    <keyword type="signal" name="The &quot;unknown-type&quot; signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-unknown-type"/>
+    <keyword type="" name="Features" link="gst-plugins-base-plugins-encodebin.html#id511302"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-encodebin.html#id524019"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-encodebin.html#id524080"/>
+    <keyword type="struct" name="GstEncodeBin" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-struct"/>
+    <keyword type="property" name="The &quot;audio-jitter-tolerance&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--audio-jitter-tolerance"/>
+    <keyword type="property" name="The &quot;avoid-reencoding&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--avoid-reencoding"/>
+    <keyword type="property" name="The &quot;profile&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--profile"/>
+    <keyword type="property" name="The &quot;queue-buffers-max&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-buffers-max"/>
+    <keyword type="property" name="The &quot;queue-bytes-max&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-bytes-max"/>
+    <keyword type="property" name="The &quot;queue-time-max&quot; property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-time-max"/>
+    <keyword type="signal" name="The &quot;request-pad&quot; signal" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-videoconvert.html#id503871"/>
+    <keyword type="struct" name="struct GstVideoConvert" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert"/>
+    <keyword type="" name="" link="gst-plugins-base-plugins-gdpdepay.html#id477795"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-gdpdepay.html#id505139"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-gdpdepay.html#id498695"/>
+    <keyword type="struct" name="struct GstGDPDepay" link="gst-plugins-base-plugins-gdpdepay.html#GstGDPDepay-struct"/>
+    <keyword type="" name="" link="gst-plugins-base-plugins-gdppay.html#id497584"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-gdppay.html#id504604"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-gdppay.html#id521730"/>
+    <keyword type="struct" name="struct GstGDPPay" link="gst-plugins-base-plugins-gdppay.html#GstGDPPay-struct"/>
+    <keyword type="property" name="The &quot;crc-header&quot; property" link="gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-header"/>
+    <keyword type="property" name="The &quot;crc-payload&quot; property" link="gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-payload"/>
+    <keyword type="property" name="The &quot;version&quot; property" link="gst-plugins-base-plugins-gdppay.html#GstGDPPay--version"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giosink.html#id488791"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giosink.html#id525824"/>
+    <keyword type="struct" name="struct GstGioSink" link="gst-plugins-base-plugins-giosink.html#GstGioSink-struct"/>
+    <keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-base-plugins-giosink.html#GstGioSink--location"/>
+    <keyword type="property" name="The &quot;file&quot; property" link="gst-plugins-base-plugins-giosink.html#GstGioSink--file"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giosrc.html#id488494"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giosrc.html#id525447"/>
+    <keyword type="struct" name="struct GstGioSrc" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc-struct"/>
+    <keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc--location"/>
+    <keyword type="property" name="The &quot;file&quot; property" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc--file"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giostreamsink.html#id521076"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giostreamsink.html#id525229"/>
+    <keyword type="struct" name="struct GstGioStreamSink" link="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink-struct"/>
+    <keyword type="property" name="The &quot;stream&quot; property" link="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink--stream"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giostreamsrc.html#id527868"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giostreamsrc.html#id480417"/>
+    <keyword type="struct" name="struct GstGioStreamSrc" link="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc-struct"/>
+    <keyword type="property" name="The &quot;stream&quot; property" link="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc--stream"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-multifdsink.html#id528543"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-multifdsink.html#id528604"/>
+    <keyword type="struct" name="struct GstMultiFdSink" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-struct"/>
+    <keyword type="enum" name="enum GstRecoverPolicy" link="gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy"/>
+    <keyword type="enum" name="enum GstSyncMethod" link="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod"/>
+    <keyword type="enum" name="enum GstClientStatus" link="gst-plugins-base-plugins-multifdsink.html#GstClientStatus"/>
+    <keyword type="enum" name="enum GstTCPUnitType" link="gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType"/>
+    <keyword type="property" name="The &quot;buffers-max&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-max"/>
+    <keyword type="property" name="The &quot;buffers-queued&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-queued"/>
+    <keyword type="property" name="The &quot;buffers-soft-max&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-soft-max"/>
+    <keyword type="property" name="The &quot;bytes-served&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-served"/>
+    <keyword type="property" name="The &quot;bytes-to-serve&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-to-serve"/>
+    <keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--mode"/>
+    <keyword type="property" name="The &quot;protocol&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--protocol"/>
+    <keyword type="property" name="The &quot;recover-policy&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--recover-policy"/>
+    <keyword type="property" name="The &quot;sync-clients&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-clients"/>
+    <keyword type="property" name="The &quot;sync-method&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-method"/>
+    <keyword type="property" name="The &quot;timeout&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--timeout"/>
+    <keyword type="property" name="The &quot;buffers-min&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-min"/>
+    <keyword type="property" name="The &quot;burst-unit&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-unit"/>
+    <keyword type="property" name="The &quot;burst-value&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-value"/>
+    <keyword type="property" name="The &quot;bytes-min&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-min"/>
+    <keyword type="property" name="The &quot;time-min&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--time-min"/>
+    <keyword type="property" name="The &quot;unit-type&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--unit-type"/>
+    <keyword type="property" name="The &quot;units-max&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-max"/>
+    <keyword type="property" name="The &quot;units-soft-max&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-soft-max"/>
+    <keyword type="property" name="The &quot;qos-dscp&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--qos-dscp"/>
+    <keyword type="property" name="The &quot;handle-read&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--handle-read"/>
+    <keyword type="property" name="The &quot;resend-streamheader&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--resend-streamheader"/>
+    <keyword type="property" name="The &quot;num-fds&quot; property" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--num-fds"/>
+    <keyword type="signal" name="The &quot;add&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add"/>
+    <keyword type="signal" name="The &quot;clear&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-clear"/>
+    <keyword type="signal" name="The &quot;client-added&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-added"/>
+    <keyword type="signal" name="The &quot;client-removed&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed"/>
+    <keyword type="signal" name="The &quot;get-stats&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-get-stats"/>
+    <keyword type="signal" name="The &quot;remove&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove"/>
+    <keyword type="signal" name="The &quot;client-fd-removed&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed"/>
+    <keyword type="signal" name="The &quot;add-full&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full"/>
+    <keyword type="signal" name="The &quot;remove-flush&quot; signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-oggdemux.html#id489789"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-oggdemux.html#id484410"/>
+    <keyword type="struct" name="struct GstOggDemux" link="gst-plugins-base-plugins-oggdemux.html#GstOggDemux-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-oggmux.html#id533167"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-oggmux.html#id512151"/>
+    <keyword type="struct" name="struct GstOggMux" link="gst-plugins-base-plugins-oggmux.html#GstOggMux-struct"/>
+    <keyword type="property" name="The &quot;max-delay&quot; property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-delay"/>
+    <keyword type="property" name="The &quot;max-page-delay&quot; property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-page-delay"/>
+    <keyword type="" name="Usage" link="gst-plugins-base-plugins-playbin.html#id535719"/>
+    <keyword type="" name="Advanced Usage: specifying the audio and video sink" link="gst-plugins-base-plugins-playbin.html#id531133"/>
+    <keyword type="" name="Retrieving Tags and Other Meta Data" link="gst-plugins-base-plugins-playbin.html#id531221"/>
+    <keyword type="" name="Buffering" link="gst-plugins-base-plugins-playbin.html#id531239"/>
+    <keyword type="" name="Embedding the video window in your application" link="gst-plugins-base-plugins-playbin.html#id531262"/>
+    <keyword type="" name="Specifying which CD/DVD device to use" link="gst-plugins-base-plugins-playbin.html#id531278"/>
+    <keyword type="" name="Handling redirects" link="gst-plugins-base-plugins-playbin.html#id531290"/>
+    <keyword type="" name="Examples" link="gst-plugins-base-plugins-playbin.html#id531304"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-playbin.html#id531345"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-playbin.html#id531407"/>
+    <keyword type="struct" name="struct GstPlayBin" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-struct"/>
+    <keyword type="enum" name="enum GstPlayFlags" link="gst-plugins-base-plugins-playbin.html#GstPlayFlags"/>
+    <keyword type="property" name="The &quot;audio-sink&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink"/>
+    <keyword type="property" name="The &quot;frame&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--frame"/>
+    <keyword type="property" name="The &quot;subtitle-font-desc&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--subtitle-font-desc"/>
+    <keyword type="property" name="The &quot;video-sink&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink"/>
+    <keyword type="property" name="The &quot;vis-plugin&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--vis-plugin"/>
+    <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--volume"/>
+    <keyword type="property" name="The &quot;connection-speed&quot; property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--connection-speed"/>
+    <keyword type="" name="Examples" link="gst-plugins-base-plugins-subtitleoverlay.html#id479357"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-subtitleoverlay.html#id489687"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-subtitleoverlay.html#id534893"/>
+    <keyword type="struct" name="struct GstSubtitleOverlay" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay-struct"/>
+    <keyword type="property" name="The &quot;font-desc&quot; property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--font-desc"/>
+    <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--silent"/>
+    <keyword type="property" name="The &quot;subtitle-encoding&quot; property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--subtitle-encoding"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpclientsrc.html#id535377"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpclientsrc.html#id535400"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpclientsrc.html#id530891"/>
+    <keyword type="struct" name="struct GstTCPClientSrc" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct"/>
+    <keyword type="property" name="The &quot;host&quot; property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host"/>
+    <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port"/>
+    <keyword type="property" name="The &quot;protocol&quot; property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--protocol"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpclientsink.html#id530053"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpclientsink.html#id530076"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpclientsink.html#id530319"/>
+    <keyword type="struct" name="struct GstTCPClientSink" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink-struct"/>
+    <keyword type="property" name="The &quot;host&quot; property" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--host"/>
+    <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--port"/>
+    <keyword type="property" name="The &quot;protocol&quot; property" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--protocol"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpserversrc.html#id532197"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpserversrc.html#id532220"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpserversrc.html#id535478"/>
+    <keyword type="struct" name="struct GstTCPServerSrc" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct"/>
+    <keyword type="property" name="The &quot;host&quot; property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host"/>
+    <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port"/>
+    <keyword type="property" name="The &quot;protocol&quot; property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--protocol"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpserversink.html#id533005"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpserversink.html#id533028"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpserversink.html#id487079"/>
+    <keyword type="struct" name="struct GstTCPServerSink" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink-struct"/>
+    <keyword type="property" name="The &quot;host&quot; property" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--host"/>
+    <keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--port"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-textoverlay.html#id492124"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-textoverlay.html#id494648"/>
+    <keyword type="struct" name="struct GstTextOverlay" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay-struct"/>
+    <keyword type="property" name="The &quot;deltax&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltax"/>
+    <keyword type="property" name="The &quot;deltay&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltay"/>
+    <keyword type="property" name="The &quot;font-desc&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--font-desc"/>
+    <keyword type="property" name="The &quot;halign&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halign"/>
+    <keyword type="property" name="The &quot;shaded-background&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--shaded-background"/>
+    <keyword type="property" name="The &quot;text&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--text"/>
+    <keyword type="property" name="The &quot;valign&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valign"/>
+    <keyword type="property" name="The &quot;wrap-mode&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wrap-mode"/>
+    <keyword type="property" name="The &quot;xpad&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpad"/>
+    <keyword type="property" name="The &quot;ypad&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypad"/>
+    <keyword type="property" name="The &quot;halignment&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halignment"/>
+    <keyword type="property" name="The &quot;valignment&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valignment"/>
+    <keyword type="property" name="The &quot;line-alignment&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--line-alignment"/>
+    <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--silent"/>
+    <keyword type="property" name="The &quot;wait-text&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wait-text"/>
+    <keyword type="property" name="The &quot;auto-resize&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--auto-resize"/>
+    <keyword type="property" name="The &quot;vertical-render&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--vertical-render"/>
+    <keyword type="property" name="The &quot;color&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--color"/>
+    <keyword type="property" name="The &quot;xpos&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpos"/>
+    <keyword type="property" name="The &quot;ypos&quot; property" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypos"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-textrender.html#id475160"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-textrender.html#id538258"/>
+    <keyword type="struct" name="struct GstTextRender" link="gst-plugins-base-plugins-textrender.html#GstTextRender-struct"/>
+    <keyword type="property" name="The &quot;font-desc&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--font-desc"/>
+    <keyword type="property" name="The &quot;halignment&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--halignment"/>
+    <keyword type="property" name="The &quot;line-alignment&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--line-alignment"/>
+    <keyword type="property" name="The &quot;valignment&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--valignment"/>
+    <keyword type="property" name="The &quot;xpad&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--xpad"/>
+    <keyword type="property" name="The &quot;ypad&quot; property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--ypad"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoradec.html#id487813"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoradec.html#id536181"/>
+    <keyword type="struct" name="struct GstTheoraDec" link="gst-plugins-base-plugins-theoradec.html#GstTheoraDec-struct"/>
+    <keyword type="property" name="The &quot;crop&quot; property" link="gst-plugins-base-plugins-theoradec.html#GstTheoraDec--crop"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoraenc.html#id542106"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoraenc.html#id542168"/>
+    <keyword type="struct" name="struct GstTheoraEnc" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct"/>
+    <keyword type="enum" name="enum GstTheoraEncBorderMode" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncBorderMode"/>
+    <keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--bitrate"/>
+    <keyword type="property" name="The &quot;border&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--border"/>
+    <keyword type="property" name="The &quot;center&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--center"/>
+    <keyword type="property" name="The &quot;keyframe-auto&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-auto"/>
+    <keyword type="property" name="The &quot;keyframe-force&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-force"/>
+    <keyword type="property" name="The &quot;keyframe-freq&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-freq"/>
+    <keyword type="property" name="The &quot;keyframe-mindistance&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-mindistance"/>
+    <keyword type="property" name="The &quot;keyframe-threshold&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-threshold"/>
+    <keyword type="property" name="The &quot;noise-sensitivity&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--noise-sensitivity"/>
+    <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quality"/>
+    <keyword type="property" name="The &quot;quick&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quick"/>
+    <keyword type="property" name="The &quot;sharpness&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--sharpness"/>
+    <keyword type="property" name="The &quot;speed-level&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--speed-level"/>
+    <keyword type="property" name="The &quot;cap-overflow&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-overflow"/>
+    <keyword type="property" name="The &quot;cap-underflow&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-underflow"/>
+    <keyword type="property" name="The &quot;drop-frames&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--drop-frames"/>
+    <keyword type="property" name="The &quot;rate-buffer&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--rate-buffer"/>
+    <keyword type="property" name="The &quot;vp3-compatible&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--vp3-compatible"/>
+    <keyword type="property" name="The &quot;multipass-cache-file&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-cache-file"/>
+    <keyword type="property" name="The &quot;multipass-mode&quot; property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-mode"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoraparse.html#id489696"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoraparse.html#id536676"/>
+    <keyword type="struct" name="struct GstTheoraParse" link="gst-plugins-base-plugins-theoraparse.html#GstTheoraParse-struct"/>
+    <keyword type="property" name="The &quot;synchronization-points&quot; property" link="gst-plugins-base-plugins-theoraparse.html#GstTheoraParse--synchronization-points"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-timeoverlay.html#id530207"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-timeoverlay.html#id538141"/>
+    <keyword type="struct" name="struct GstTimeOverlay" link="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-uridecodebin.html#id544408"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-uridecodebin.html#id544471"/>
+    <keyword type="struct" name="struct GstURIDecodeBin" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-struct"/>
+    <keyword type="enum" name="enum GstAutoplugSelectResult" link="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult"/>
+    <keyword type="property" name="The &quot;uri&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--uri"/>
+    <keyword type="property" name="The &quot;connection-speed&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--connection-speed"/>
+    <keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--caps"/>
+    <keyword type="property" name="The &quot;subtitle-encoding&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--subtitle-encoding"/>
+    <keyword type="property" name="The &quot;source&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--source"/>
+    <keyword type="property" name="The &quot;buffer-duration&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-duration"/>
+    <keyword type="property" name="The &quot;buffer-size&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-size"/>
+    <keyword type="property" name="The &quot;download&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--download"/>
+    <keyword type="property" name="The &quot;use-buffering&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--use-buffering"/>
+    <keyword type="property" name="The &quot;expose-all-streams&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--expose-all-streams"/>
+    <keyword type="property" name="The &quot;ring-buffer-max-size&quot; property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--ring-buffer-max-size"/>
+    <keyword type="signal" name="The &quot;autoplug-continue&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-continue"/>
+    <keyword type="signal" name="The &quot;autoplug-factories&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-factories"/>
+    <keyword type="signal" name="The &quot;autoplug-select&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-select"/>
+    <keyword type="signal" name="The &quot;unknown-type&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type"/>
+    <keyword type="signal" name="The &quot;drained&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained"/>
+    <keyword type="signal" name="The &quot;autoplug-sort&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-sort"/>
+    <keyword type="signal" name="The &quot;source-setup&quot; signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-videorate.html#id512718"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videorate.html#id547163"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videorate.html#id547225"/>
+    <keyword type="struct" name="struct GstVideoRate" link="gst-plugins-base-plugins-videorate.html#GstVideoRate-struct"/>
+    <keyword type="property" name="The &quot;drop&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop"/>
+    <keyword type="property" name="The &quot;duplicate&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate"/>
+    <keyword type="property" name="The &quot;in&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--in"/>
+    <keyword type="property" name="The &quot;new-pref&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--new-pref"/>
+    <keyword type="property" name="The &quot;out&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--out"/>
+    <keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent"/>
+    <keyword type="property" name="The &quot;skip-to-first&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--skip-to-first"/>
+    <keyword type="property" name="The &quot;average-period&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--average-period"/>
+    <keyword type="property" name="The &quot;drop-only&quot; property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop-only"/>
+    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-videoscale.html#id543783"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videoscale.html#id543753"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videoscale.html#id543694"/>
+    <keyword type="struct" name="struct GstVideoScale" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale-struct"/>
+    <keyword type="enum" name="enum GstVideoScaleMethod" link="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod"/>
+    <keyword type="property" name="The &quot;method&quot; property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--method"/>
+    <keyword type="property" name="The &quot;add-borders&quot; property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--add-borders"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-videotestsrc.html#id550571"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videotestsrc.html#id550552"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videotestsrc.html#id550478"/>
+    <keyword type="struct" name="struct GstVideoTestSrc" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc-struct"/>
+    <keyword type="enum" name="enum GstVideoTestSrcPattern" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern"/>
+    <keyword type="property" name="The &quot;pattern&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--pattern"/>
+    <keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--timestamp-offset"/>
+    <keyword type="property" name="The &quot;is-live&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--is-live"/>
+    <keyword type="property" name="The &quot;peer-alloc&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--peer-alloc"/>
+    <keyword type="property" name="The &quot;colorspec&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--colorspec"/>
+    <keyword type="property" name="The &quot;k0&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--k0"/>
+    <keyword type="property" name="The &quot;kt&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt"/>
+    <keyword type="property" name="The &quot;kt2&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt2"/>
+    <keyword type="property" name="The &quot;kx&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx"/>
+    <keyword type="property" name="The &quot;kx2&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx2"/>
+    <keyword type="property" name="The &quot;kxt&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxt"/>
+    <keyword type="property" name="The &quot;kxy&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxy"/>
+    <keyword type="property" name="The &quot;ky&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky"/>
+    <keyword type="property" name="The &quot;ky2&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky2"/>
+    <keyword type="property" name="The &quot;kyt&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kyt"/>
+    <keyword type="property" name="The &quot;xoffset&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--xoffset"/>
+    <keyword type="property" name="The &quot;yoffset&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--yoffset"/>
+    <keyword type="property" name="The &quot;background-color&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--background-color"/>
+    <keyword type="property" name="The &quot;foreground-color&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--foreground-color"/>
+    <keyword type="property" name="The &quot;horizontal-speed&quot; property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--horizontal-speed"/>
+    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-volume.html#id523359"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-volume.html#id499668"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-volume.html#id496503"/>
+    <keyword type="struct" name="struct GstVolume" link="gst-plugins-base-plugins-volume.html#GstVolume-struct"/>
+    <keyword type="property" name="The &quot;mute&quot; property" link="gst-plugins-base-plugins-volume.html#GstVolume--mute"/>
+    <keyword type="property" name="The &quot;volume&quot; property" link="gst-plugins-base-plugins-volume.html#GstVolume--volume"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisdec.html#id487196"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisdec.html#id506258"/>
+    <keyword type="struct" name="struct GstVorbisDec" link="gst-plugins-base-plugins-vorbisdec.html#GstVorbisDec-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisenc.html#id548991"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisenc.html#id552484"/>
+    <keyword type="struct" name="struct GstVorbisEnc" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc-struct"/>
+    <keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--bitrate"/>
+    <keyword type="property" name="The &quot;last-message&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--last-message"/>
+    <keyword type="property" name="The &quot;managed&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--managed"/>
+    <keyword type="property" name="The &quot;max-bitrate&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--max-bitrate"/>
+    <keyword type="property" name="The &quot;min-bitrate&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--min-bitrate"/>
+    <keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--quality"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisparse.html#id511403"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisparse.html#id473624"/>
+    <keyword type="struct" name="struct GstVorbisParse" link="gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbistag.html#id476646"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbistag.html#id551251"/>
+    <keyword type="struct" name="struct GstVorbisTag" link="gst-plugins-base-plugins-vorbistag.html#GstVorbisTag-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-ximagesink.html#id554711"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-ximagesink.html#id554773"/>
+    <keyword type="struct" name="struct GstXImageSink" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink-struct"/>
+    <keyword type="property" name="The &quot;display&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--display"/>
+    <keyword type="property" name="The &quot;pixel-aspect-ratio&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--pixel-aspect-ratio"/>
+    <keyword type="property" name="The &quot;synchronous&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--synchronous"/>
+    <keyword type="property" name="The &quot;force-aspect-ratio&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--force-aspect-ratio"/>
+    <keyword type="property" name="The &quot;handle-events&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-events"/>
+    <keyword type="property" name="The &quot;handle-expose&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-expose"/>
+    <keyword type="property" name="The &quot;window-height&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-height"/>
+    <keyword type="property" name="The &quot;window-width&quot; property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-width"/>
+    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-xvimagesink.html#id557132"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-xvimagesink.html#id557194"/>
+    <keyword type="struct" name="struct GstXvImageSink" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink-struct"/>
+    <keyword type="property" name="The &quot;brightness&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--brightness"/>
+    <keyword type="property" name="The &quot;contrast&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--contrast"/>
+    <keyword type="property" name="The &quot;display&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--display"/>
+    <keyword type="property" name="The &quot;hue&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--hue"/>
+    <keyword type="property" name="The &quot;pixel-aspect-ratio&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--pixel-aspect-ratio"/>
+    <keyword type="property" name="The &quot;saturation&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--saturation"/>
+    <keyword type="property" name="The &quot;synchronous&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--synchronous"/>
+    <keyword type="property" name="The &quot;force-aspect-ratio&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--force-aspect-ratio"/>
+    <keyword type="property" name="The &quot;device&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device"/>
+    <keyword type="property" name="The &quot;device-name&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device-name"/>
+    <keyword type="property" name="The &quot;handle-events&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-events"/>
+    <keyword type="property" name="The &quot;double-buffer&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--double-buffer"/>
+    <keyword type="property" name="The &quot;handle-expose&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-expose"/>
+    <keyword type="property" name="The &quot;autopaint-colorkey&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--autopaint-colorkey"/>
+    <keyword type="property" name="The &quot;colorkey&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--colorkey"/>
+    <keyword type="property" name="The &quot;draw-borders&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--draw-borders"/>
+    <keyword type="property" name="The &quot;window-height&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-height"/>
+    <keyword type="property" name="The &quot;window-width&quot; property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-width"/>
+    <keyword type="constant" name="DITHER_NONE" link="gst-plugins-base-plugins-audioconvert.html#DITHER-NONE:CAPS"/>
+    <keyword type="constant" name="DITHER_RPDF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-RPDF:CAPS"/>
+    <keyword type="constant" name="DITHER_TPDF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF:CAPS"/>
+    <keyword type="constant" name="DITHER_TPDF_HF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF-HF:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_NONE" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-NONE:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_ERROR_FEEDBACK" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-ERROR-FEEDBACK:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_SIMPLE" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-SIMPLE:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_MEDIUM" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-MEDIUM:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_HIGH" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-HIGH:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SINE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SQUARE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SAW" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_TRIANGLE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SILENCE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SINE_TAB" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_TICKS" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_RED_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_NONE" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_LATEST" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_NEXT_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_WITH_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_OK" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-OK:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_CLOSED" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-CLOSED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_REMOVED" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-REMOVED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_SLOW" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-SLOW:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_ERROR" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_DUPLICATE" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_FLUSHING" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS"/>
+    <keyword type="constant" name="GST_TCP_UNIT_TYPE_UNDEFINED" link="gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-UNDEFINED:CAPS"/>
+    <keyword type="constant" name="GST_TCP_UNIT_TYPE_BUFFERS" link="gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-BUFFERS:CAPS"/>
+    <keyword type="constant" name="GST_TCP_UNIT_TYPE_TIME" link="gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-TIME:CAPS"/>
+    <keyword type="constant" name="GST_TCP_UNIT_TYPE_BYTES" link="gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-BYTES:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_VIDEO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIDEO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_AUDIO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_TEXT" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-TEXT:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_VIS" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIS:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_SOFT_VOLUME" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-VOLUME:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_NATIVE_AUDIO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_NATIVE_VIDEO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-VIDEO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_DOWNLOAD" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DOWNLOAD:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_BUFFERING" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-BUFFERING:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_DEINTERLACE" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DEINTERLACE:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_TRY" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_EXPOSE" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-EXPOSE:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_SKIP" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-SKIP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_NEAREST" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-NEAREST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_BILINEAR" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_4TAP" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-4TAP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_LANCZOS" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-LANCZOS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SNOW" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SNOW:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLACK" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLACK:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_WHITE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-WHITE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_RED" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-RED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_GREEN" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GREEN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLUE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLUE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS1" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS1:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS2" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS4" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS4:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS8" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS8:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CIRCULAR" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CIRCULAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLINK" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLINK:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE75" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE75:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_ZONE_PLATE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_GAMUT" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GAMUT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SOLID" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SOLID:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BALL" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BALL:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE100" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE100:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BAR" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BAR:CAPS"/>
+  </functions>
+</book>
diff --git a/docs/plugins/html/home.png b/docs/plugins/html/home.png
new file mode 100644
index 0000000..1700361
--- /dev/null
+++ b/docs/plugins/html/home.png
Binary files differ
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
new file mode 100644
index 0000000..2acc032
--- /dev/null
+++ b/docs/plugins/html/index.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GStreamer Base Plugins 0.11 Plugins Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GStreamer Base Plugins 0.11 Plugins Reference Manual">
+<link rel="next" href="ch01.html" title="gst-plugins-base Elements">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Base Plugins 0.11 Plugins Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">
+      for GStreamer Base Plugins 0.11 (0.11.1)
+      The latest version of this documentation can be found on-line at
+      <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/</a>.
+    </p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.html">gst-plugins-base Elements</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"> — Add N audio channels together</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"> — Allow the application to feed buffers to a pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"> — Allow the application to get access to raw buffer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsamixer.html">alsamixer</a></span><span class="refpurpose"> — Control sound input and output levels with ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"> — Output to a sound card via ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"> — Read from a sound card via ALSA</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"> — Overlays the current clock time on a video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"> — Autoplug and decode to raw media</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"> — Convenience encoding/muxing element</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-gdpdepay.html">gdpdepay</a></span><span class="refpurpose"> — Depayloads GStreamer Data Protocol buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-gdppay.html">gdppay</a></span><span class="refpurpose"> — Payloads GStreamer Data Protocol buffers</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"> — Write to any GIO-supported location</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"> — Read from any GIO-supported location</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"> — Write to any GIO stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"> — Read from any GIO stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"> — Send data to multiple filedescriptors</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"> — demux ogg streams (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"> — mux ogg streams (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"> — Autoplug and play media from an uri</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"> — Overlays a video stream with subtitles</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"> — Send data as a client over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"> — Receive data as a server over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"> — Send data as a server over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"> — Adds text strings on top of a video buffer</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"> — Renders a text string to an image bitmap</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"> — decode raw theora streams to raw YUV video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"> — encode raw YUV video to a theora stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"> — parse raw theora streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"> — Overlays buffer time stamps on a video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — Autoplug and decode an URI to raw media</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"> — Set volume on audio/raw streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"> — decode raw vorbis streams to float audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"> — Encodes audio in Vorbis format</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"> — parse raw vorbis streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"> — Retags vorbis streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — A standard X based videosink</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — A Xv based videosink</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch02.html">gst-plugins-base Plugins</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose"> — <a name="plugin-adder"></a>Adds multiple streams</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose"> — <a name="plugin-alsa"></a>ALSA plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose"> — <a name="plugin-app"></a>Elements used to communicate with applications</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — <a name="plugin-audioconvert"></a>Convert audio to different formats</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose"> — <a name="plugin-audiorate"></a>Adjusts audio frames</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose"> — <a name="plugin-audioresample"></a>Resamples audio</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — <a name="plugin-audiotestsrc"></a>Creates audio test signals of given frequency and volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose"> — <a name="plugin-cdparanoia"></a>Read audio from CD in paranoid mode</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-decodebin.html">decodebin</a></span><span class="refpurpose"> — <a name="plugin-decodebin"></a>decoder bin</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose"> — <a name="plugin-encoding"></a>various encoding-related elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gdp.html">gdp</a></span><span class="refpurpose"> — <a name="plugin-gdp"></a>Payload/depayload GDP packets</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose"> — <a name="plugin-gio"></a>GIO elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose"> — <a name="plugin-libvisual"></a>libvisual visualization plugins</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose"> — <a name="plugin-ogg"></a>ogg stream manipulation (info about ogg: http://xiph.org)</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose"> — <a name="plugin-pango"></a>Pango-based text rendering and overlay</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose"> — <a name="plugin-playback"></a>various playback elements</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose"> — <a name="plugin-subparse"></a>Subtitle parsing</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose"> — <a name="plugin-tcp"></a>transfer data over the network via TCP</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose"> — <a name="plugin-theora"></a>Theora plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose"> — <a name="plugin-typefindfunctions"></a>default typefind functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — <a name="plugin-uridecodebin"></a>URI Decoder bin</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose"> — <a name="plugin-videorate"></a>Adjusts video frames</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose"> — <a name="plugin-videoscale"></a>Resizes video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — <a name="plugin-videotestsrc"></a>Creates a test video stream</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose"> — <a name="plugin-volume"></a>plugin for controlling audio volume</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose"> — <a name="plugin-vorbis"></a>Vorbis plugin library</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — <a name="plugin-ximagesink"></a>X11 video output element based on standard Xlib calls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — <a name="plugin-xvimagesink"></a>XFree86 video output plugin using Xv extension</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="ch03.html">gst-plugins-base Classes</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.18</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
new file mode 100644
index 0000000..133c406
--- /dev/null
+++ b/docs/plugins/html/index.sgml
@@ -0,0 +1,871 @@
+<ONLINE href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/">
+<ANCHOR id="gst-plugins-base-plugins-adder" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html">
+<ANCHOR id="gst-plugins-base-plugins-adder.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.synopsis">
+<ANCHOR id="GstAdder" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#GstAdder">
+<ANCHOR id="gst-plugins-base-plugins-adder.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-adder.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.properties">
+<ANCHOR id="gst-plugins-base-plugins-adder.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.description">
+<ANCHOR id="gst-plugins-base-plugins-adder.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.details">
+<ANCHOR id="GstAdder-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#GstAdder-struct">
+<ANCHOR id="gst-plugins-base-plugins-adder.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.property-details">
+<ANCHOR id="GstAdder--caps" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-adder.html#GstAdder--caps">
+<ANCHOR id="gst-plugins-base-plugins-appsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.synopsis">
+<ANCHOR id="GstAppSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.signals">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.details">
+<ANCHOR id="GstAppSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.property-details">
+<ANCHOR id="GstAppSrc--block" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--block">
+<ANCHOR id="GstAppSrc--caps" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--caps">
+<ANCHOR id="GstAppSrc--format" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--format">
+<ANCHOR id="GstAppSrc--is-live" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--is-live">
+<ANCHOR id="GstAppSrc--max-bytes" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-bytes">
+<ANCHOR id="GstAppSrc--max-latency" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--max-latency">
+<ANCHOR id="GstAppSrc--min-latency" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-latency">
+<ANCHOR id="GstAppSrc--size" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--size">
+<ANCHOR id="GstAppSrc--stream-type" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--stream-type">
+<ANCHOR id="GstAppSrc--emit-signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--emit-signals">
+<ANCHOR id="GstAppSrc--min-percent" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc--min-percent">
+<ANCHOR id="gst-plugins-base-plugins-appsrc.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.signal-details">
+<ANCHOR id="GstAppSrc-end-of-stream" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-end-of-stream">
+<ANCHOR id="GstAppSrc-enough-data" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-enough-data">
+<ANCHOR id="GstAppSrc-need-data" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data">
+<ANCHOR id="GstAppSrc-push-buffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer">
+<ANCHOR id="GstAppSrc-seek-data" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data">
+<ANCHOR id="gst-plugins-base-plugins-appsink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html">
+<ANCHOR id="gst-plugins-base-plugins-appsink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.synopsis">
+<ANCHOR id="GstAppSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink">
+<ANCHOR id="gst-plugins-base-plugins-appsink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-appsink.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-appsink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.properties">
+<ANCHOR id="gst-plugins-base-plugins-appsink.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signals">
+<ANCHOR id="gst-plugins-base-plugins-appsink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.description">
+<ANCHOR id="gst-plugins-base-plugins-appsink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.details">
+<ANCHOR id="GstAppSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-appsink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.property-details">
+<ANCHOR id="GstAppSink--caps" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink--caps">
+<ANCHOR id="GstAppSink--drop" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink--drop">
+<ANCHOR id="GstAppSink--emit-signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals">
+<ANCHOR id="GstAppSink--eos" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink--eos">
+<ANCHOR id="GstAppSink--max-buffers" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers">
+<ANCHOR id="gst-plugins-base-plugins-appsink.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signal-details">
+<ANCHOR id="GstAppSink-eos" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-eos">
+<ANCHOR id="GstAppSink-new-buffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer">
+<ANCHOR id="GstAppSink-new-preroll" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll">
+<ANCHOR id="GstAppSink-pull-buffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer">
+<ANCHOR id="GstAppSink-pull-preroll" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll">
+<ANCHOR id="GstAppSink-new-buffer-list" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-new-buffer-list">
+<ANCHOR id="GstAppSink-pull-buffer-list" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-buffer-list">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.synopsis">
+<ANCHOR id="GstAlsaMixerElement" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.properties">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.description">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.details">
+<ANCHOR id="GstAlsaMixerElement-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsamixer.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#gst-plugins-base-plugins-alsamixer.property-details">
+<ANCHOR id="GstAlsaMixerElement--device" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device">
+<ANCHOR id="GstAlsaMixerElement--device-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsamixer.html#GstAlsaMixerElement--device-name">
+<ANCHOR id="gst-plugins-base-plugins-alsasink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.synopsis">
+<ANCHOR id="GstAlsaSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#GstAlsaSink">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.properties">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.description">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.details">
+<ANCHOR id="GstAlsaSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.property-details">
+<ANCHOR id="GstAlsaSink--device" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device">
+<ANCHOR id="GstAlsaSink--device-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name">
+<ANCHOR id="GstAlsaSink--card-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.synopsis">
+<ANCHOR id="GstAlsaSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.description">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.details">
+<ANCHOR id="GstAlsaSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.property-details">
+<ANCHOR id="GstAlsaSrc--device" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device">
+<ANCHOR id="GstAlsaSrc--device-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name">
+<ANCHOR id="GstAlsaSrc--card-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.synopsis">
+<ANCHOR id="GstAudioConvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.properties">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.description">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.details">
+<ANCHOR id="GstAudioConvert-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert-struct">
+<ANCHOR id="GstAudioConvertDithering" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering">
+<ANCHOR id="DITHER-NONE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#DITHER-NONE:CAPS">
+<ANCHOR id="DITHER-RPDF:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#DITHER-RPDF:CAPS">
+<ANCHOR id="DITHER-TPDF:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF:CAPS">
+<ANCHOR id="DITHER-TPDF-HF:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF-HF:CAPS">
+<ANCHOR id="GstAudioConvertNoiseShaping" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping">
+<ANCHOR id="NOISE-SHAPING-NONE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-NONE:CAPS">
+<ANCHOR id="NOISE-SHAPING-ERROR-FEEDBACK:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-ERROR-FEEDBACK:CAPS">
+<ANCHOR id="NOISE-SHAPING-SIMPLE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-SIMPLE:CAPS">
+<ANCHOR id="NOISE-SHAPING-MEDIUM:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-MEDIUM:CAPS">
+<ANCHOR id="NOISE-SHAPING-HIGH:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-HIGH:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-audioconvert.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.property-details">
+<ANCHOR id="GstAudioConvert--dithering" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering">
+<ANCHOR id="GstAudioConvert--noise-shaping" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping">
+<ANCHOR id="gst-plugins-base-plugins-audiorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.synopsis">
+<ANCHOR id="GstAudioRate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.properties">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.description">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.details">
+<ANCHOR id="GstAudioRate-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate-struct">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.property-details">
+<ANCHOR id="GstAudioRate--add" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--add">
+<ANCHOR id="GstAudioRate--drop" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop">
+<ANCHOR id="GstAudioRate--in" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--in">
+<ANCHOR id="GstAudioRate--out" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--out">
+<ANCHOR id="GstAudioRate--silent" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--silent">
+<ANCHOR id="GstAudioRate--tolerance" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--tolerance">
+<ANCHOR id="GstAudioRate--skip-to-first" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#GstAudioRate--skip-to-first">
+<ANCHOR id="gst-plugins-base-plugins-audiorate.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiorate.html#gst-plugins-base-plugins-audiorate.see-also">
+<ANCHOR id="gst-plugins-base-plugins-audioresample" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.synopsis">
+<ANCHOR id="GstAudioResample" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#GstAudioResample">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.properties">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.description">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.details">
+<ANCHOR id="GstAudioResample-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#GstAudioResample-struct">
+<ANCHOR id="gst-plugins-base-plugins-audioresample.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#gst-plugins-base-plugins-audioresample.property-details">
+<ANCHOR id="GstAudioResample--filter-length" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#GstAudioResample--filter-length">
+<ANCHOR id="GstAudioResample--quality" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audioresample.html#GstAudioResample--quality">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.synopsis">
+<ANCHOR id="GstAudioTestSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.details">
+<ANCHOR id="GstAudioTestSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc-struct">
+<ANCHOR id="GstAudioTestSrcWave" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-audiotestsrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.property-details">
+<ANCHOR id="GstAudioTestSrc--freq" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--freq">
+<ANCHOR id="GstAudioTestSrc--is-live" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--is-live">
+<ANCHOR id="GstAudioTestSrc--samplesperbuffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--samplesperbuffer">
+<ANCHOR id="GstAudioTestSrc--timestamp-offset" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--timestamp-offset">
+<ANCHOR id="GstAudioTestSrc--volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--volume">
+<ANCHOR id="GstAudioTestSrc--wave" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--wave">
+<ANCHOR id="GstAudioTestSrc--can-activate-pull" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-pull">
+<ANCHOR id="GstAudioTestSrc--can-activate-push" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-push">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.synopsis">
+<ANCHOR id="GstCdParanoiaSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.signals">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.description">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.details">
+<ANCHOR id="GstCdParanoiaSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.property-details">
+<ANCHOR id="GstCdParanoiaSrc--generic-device" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--generic-device">
+<ANCHOR id="GstCdParanoiaSrc--paranoia-mode" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--paranoia-mode">
+<ANCHOR id="GstCdParanoiaSrc--read-speed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--read-speed">
+<ANCHOR id="GstCdParanoiaSrc--search-overlap" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--search-overlap">
+<ANCHOR id="GstCdParanoiaSrc--cache-size" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--cache-size">
+<ANCHOR id="gst-plugins-base-plugins-cdparanoiasrc.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#gst-plugins-base-plugins-cdparanoiasrc.signal-details">
+<ANCHOR id="GstCdParanoiaSrc-transport-error" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-transport-error">
+<ANCHOR id="GstCdParanoiaSrc-uncorrected-error" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-uncorrected-error">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.synopsis">
+<ANCHOR id="GstClockOverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.properties">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.description">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.details">
+<ANCHOR id="GstClockOverlay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay-struct">
+<ANCHOR id="gst-plugins-base-plugins-clockoverlay.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#gst-plugins-base-plugins-clockoverlay.property-details">
+<ANCHOR id="GstClockOverlay--time-format" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay--time-format">
+<ANCHOR id="gst-plugins-base-plugins-decodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.synopsis">
+<ANCHOR id="GstDecodeBin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.properties">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.signals">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.description">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.details">
+<ANCHOR id="GstDecodeBin-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin-struct">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.property-details">
+<ANCHOR id="GstDecodeBin--threaded" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin--threaded">
+<ANCHOR id="GstDecodeBin--sink-caps" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin--sink-caps">
+<ANCHOR id="gst-plugins-base-plugins-decodebin.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#gst-plugins-base-plugins-decodebin.signal-details">
+<ANCHOR id="GstDecodeBin-new-decoded-pad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin-new-decoded-pad">
+<ANCHOR id="GstDecodeBin-removed-decoded-pad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin-removed-decoded-pad">
+<ANCHOR id="GstDecodeBin-unknown-type" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-decodebin.html#GstDecodeBin-unknown-type">
+<ANCHOR id="gst-plugins-base-plugins-encodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.synopsis">
+<ANCHOR id="GstEncodeBin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.properties">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.signals">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.description">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.details">
+<ANCHOR id="GstEncodeBin-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin-struct">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.property-details">
+<ANCHOR id="GstEncodeBin--audio-jitter-tolerance" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--audio-jitter-tolerance">
+<ANCHOR id="GstEncodeBin--avoid-reencoding" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--avoid-reencoding">
+<ANCHOR id="GstEncodeBin--profile" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--profile">
+<ANCHOR id="GstEncodeBin--queue-buffers-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-buffers-max">
+<ANCHOR id="GstEncodeBin--queue-bytes-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-bytes-max">
+<ANCHOR id="GstEncodeBin--queue-time-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-time-max">
+<ANCHOR id="gst-plugins-base-plugins-encodebin.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.signal-details">
+<ANCHOR id="GstEncodeBin-request-pad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoconvert.html">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.synopsis">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.description">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.details">
+<ANCHOR id="GstVideoConvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#gst-plugins-base-plugins-gdpdepay.synopsis">
+<ANCHOR id="GstGDPDepay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#GstGDPDepay">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#gst-plugins-base-plugins-gdpdepay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#gst-plugins-base-plugins-gdpdepay.description">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#gst-plugins-base-plugins-gdpdepay.details">
+<ANCHOR id="GstGDPDepay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#GstGDPDepay-struct">
+<ANCHOR id="gst-plugins-base-plugins-gdpdepay.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdpdepay.html#gst-plugins-base-plugins-gdpdepay.see-also">
+<ANCHOR id="gst-plugins-base-plugins-gdppay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.synopsis">
+<ANCHOR id="GstGDPPay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#GstGDPPay">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.properties">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.description">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.details">
+<ANCHOR id="GstGDPPay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#GstGDPPay-struct">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.property-details">
+<ANCHOR id="GstGDPPay--crc-header" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-header">
+<ANCHOR id="GstGDPPay--crc-payload" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#GstGDPPay--crc-payload">
+<ANCHOR id="GstGDPPay--version" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#GstGDPPay--version">
+<ANCHOR id="gst-plugins-base-plugins-gdppay.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-gdppay.html#gst-plugins-base-plugins-gdppay.see-also">
+<ANCHOR id="gst-plugins-base-plugins-giosink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html">
+<ANCHOR id="gst-plugins-base-plugins-giosink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.synopsis">
+<ANCHOR id="GstGioSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#GstGioSink">
+<ANCHOR id="gst-plugins-base-plugins-giosink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-giosink.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-giosink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.properties">
+<ANCHOR id="gst-plugins-base-plugins-giosink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.description">
+<ANCHOR id="gst-plugins-base-plugins-giosink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.details">
+<ANCHOR id="GstGioSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#GstGioSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-giosink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.property-details">
+<ANCHOR id="GstGioSink--location" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#GstGioSink--location">
+<ANCHOR id="GstGioSink--file" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosink.html#GstGioSink--file">
+<ANCHOR id="gst-plugins-base-plugins-giosrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.synopsis">
+<ANCHOR id="GstGioSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#GstGioSrc">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.description">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.details">
+<ANCHOR id="GstGioSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#GstGioSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-giosrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#gst-plugins-base-plugins-giosrc.property-details">
+<ANCHOR id="GstGioSrc--location" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#GstGioSrc--location">
+<ANCHOR id="GstGioSrc--file" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giosrc.html#GstGioSrc--file">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.synopsis">
+<ANCHOR id="GstGioStreamSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.properties">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.description">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.details">
+<ANCHOR id="GstGioStreamSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#gst-plugins-base-plugins-giostreamsink.property-details">
+<ANCHOR id="GstGioStreamSink--stream" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink--stream">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.synopsis">
+<ANCHOR id="GstGioStreamSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.details">
+<ANCHOR id="GstGioStreamSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-giostreamsrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#gst-plugins-base-plugins-giostreamsrc.property-details">
+<ANCHOR id="GstGioStreamSrc--stream" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc--stream">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.synopsis">
+<ANCHOR id="GstMultiFdSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.properties">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.signals">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.description">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.details">
+<ANCHOR id="GstMultiFdSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-struct">
+<ANCHOR id="GstRecoverPolicy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy">
+<ANCHOR id="GST-RECOVER-POLICY-NONE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-NONE:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-LATEST:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS">
+<ANCHOR id="GstSyncMethod" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstSyncMethod">
+<ANCHOR id="GST-SYNC-METHOD-LATEST:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS">
+<ANCHOR id="GstClientStatus" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstClientStatus">
+<ANCHOR id="GST-CLIENT-STATUS-OK:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-OK:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-CLOSED:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-CLOSED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-REMOVED:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-REMOVED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-SLOW:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-SLOW:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-ERROR:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-ERROR:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-DUPLICATE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-FLUSHING:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS">
+<ANCHOR id="GstTCPUnitType" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstTCPUnitType">
+<ANCHOR id="GST-TCP-UNIT-TYPE-UNDEFINED:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-UNDEFINED:CAPS">
+<ANCHOR id="GST-TCP-UNIT-TYPE-BUFFERS:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-BUFFERS:CAPS">
+<ANCHOR id="GST-TCP-UNIT-TYPE-TIME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-TIME:CAPS">
+<ANCHOR id="GST-TCP-UNIT-TYPE-BYTES:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GST-TCP-UNIT-TYPE-BYTES:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.property-details">
+<ANCHOR id="GstMultiFdSink--buffers-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-max">
+<ANCHOR id="GstMultiFdSink--buffers-queued" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-queued">
+<ANCHOR id="GstMultiFdSink--buffers-soft-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-soft-max">
+<ANCHOR id="GstMultiFdSink--bytes-served" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-served">
+<ANCHOR id="GstMultiFdSink--bytes-to-serve" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-to-serve">
+<ANCHOR id="GstMultiFdSink--mode" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--mode">
+<ANCHOR id="GstMultiFdSink--protocol" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--protocol">
+<ANCHOR id="GstMultiFdSink--recover-policy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--recover-policy">
+<ANCHOR id="GstMultiFdSink--sync-clients" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-clients">
+<ANCHOR id="GstMultiFdSink--sync-method" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--sync-method">
+<ANCHOR id="GstMultiFdSink--timeout" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--timeout">
+<ANCHOR id="GstMultiFdSink--buffers-min" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--buffers-min">
+<ANCHOR id="GstMultiFdSink--burst-unit" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-unit">
+<ANCHOR id="GstMultiFdSink--burst-value" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--burst-value">
+<ANCHOR id="GstMultiFdSink--bytes-min" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--bytes-min">
+<ANCHOR id="GstMultiFdSink--time-min" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--time-min">
+<ANCHOR id="GstMultiFdSink--unit-type" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--unit-type">
+<ANCHOR id="GstMultiFdSink--units-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-max">
+<ANCHOR id="GstMultiFdSink--units-soft-max" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--units-soft-max">
+<ANCHOR id="GstMultiFdSink--qos-dscp" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--qos-dscp">
+<ANCHOR id="GstMultiFdSink--handle-read" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--handle-read">
+<ANCHOR id="GstMultiFdSink--resend-streamheader" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--resend-streamheader">
+<ANCHOR id="GstMultiFdSink--num-fds" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--num-fds">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.signal-details">
+<ANCHOR id="GstMultiFdSink-add" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add">
+<ANCHOR id="GstMultiFdSink-clear" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-clear">
+<ANCHOR id="GstMultiFdSink-client-added" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-added">
+<ANCHOR id="GstMultiFdSink-client-removed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed">
+<ANCHOR id="GstMultiFdSink-get-stats" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-get-stats">
+<ANCHOR id="GstMultiFdSink-remove" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove">
+<ANCHOR id="GstMultiFdSink-client-fd-removed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed">
+<ANCHOR id="GstMultiFdSink-add-full" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full">
+<ANCHOR id="GstMultiFdSink-remove-flush" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush">
+<ANCHOR id="gst-plugins-base-plugins-multifdsink.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.see-also">
+<ANCHOR id="gst-plugins-base-plugins-oggdemux" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html">
+<ANCHOR id="gst-plugins-base-plugins-oggdemux.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#gst-plugins-base-plugins-oggdemux.synopsis">
+<ANCHOR id="GstOggDemux" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#GstOggDemux">
+<ANCHOR id="gst-plugins-base-plugins-oggdemux.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#gst-plugins-base-plugins-oggdemux.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-oggdemux.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#gst-plugins-base-plugins-oggdemux.description">
+<ANCHOR id="gst-plugins-base-plugins-oggdemux.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#gst-plugins-base-plugins-oggdemux.details">
+<ANCHOR id="GstOggDemux-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggdemux.html#GstOggDemux-struct">
+<ANCHOR id="gst-plugins-base-plugins-oggmux" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.synopsis">
+<ANCHOR id="GstOggMux" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#GstOggMux">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.properties">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.description">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.details">
+<ANCHOR id="GstOggMux-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#GstOggMux-struct">
+<ANCHOR id="gst-plugins-base-plugins-oggmux.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#gst-plugins-base-plugins-oggmux.property-details">
+<ANCHOR id="GstOggMux--max-delay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#GstOggMux--max-delay">
+<ANCHOR id="GstOggMux--max-page-delay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-oggmux.html#GstOggMux--max-page-delay">
+<ANCHOR id="gst-plugins-base-plugins-playbin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html">
+<ANCHOR id="gst-plugins-base-plugins-playbin.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.synopsis">
+<ANCHOR id="GstPlayBin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin">
+<ANCHOR id="gst-plugins-base-plugins-playbin.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-playbin.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-playbin.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.properties">
+<ANCHOR id="gst-plugins-base-plugins-playbin.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.description">
+<ANCHOR id="gst-plugins-base-plugins-playbin.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.details">
+<ANCHOR id="GstPlayBin-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin-struct">
+<ANCHOR id="GstPlayFlags" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayFlags">
+<ANCHOR id="GST-PLAY-FLAG-VIDEO:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIDEO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-AUDIO:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-AUDIO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-TEXT:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-TEXT:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-VIS:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIS:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-SOFT-VOLUME:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-VOLUME:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-NATIVE-AUDIO:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-AUDIO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-NATIVE-VIDEO:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-VIDEO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-DOWNLOAD:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DOWNLOAD:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-BUFFERING:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-BUFFERING:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-DEINTERLACE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DEINTERLACE:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-playbin.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.property-details">
+<ANCHOR id="GstPlayBin--audio-sink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink">
+<ANCHOR id="GstPlayBin--frame" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--frame">
+<ANCHOR id="GstPlayBin--subtitle-font-desc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--subtitle-font-desc">
+<ANCHOR id="GstPlayBin--video-sink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink">
+<ANCHOR id="GstPlayBin--vis-plugin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--vis-plugin">
+<ANCHOR id="GstPlayBin--volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--volume">
+<ANCHOR id="GstPlayBin--connection-speed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-playbin.html#GstPlayBin--connection-speed">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.synopsis">
+<ANCHOR id="GstSubtitleOverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.properties">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.description">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.details">
+<ANCHOR id="GstSubtitleOverlay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay-struct">
+<ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.property-details">
+<ANCHOR id="GstSubtitleOverlay--font-desc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--font-desc">
+<ANCHOR id="GstSubtitleOverlay--silent" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--silent">
+<ANCHOR id="GstSubtitleOverlay--subtitle-encoding" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--subtitle-encoding">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.synopsis">
+<ANCHOR id="GstTCPClientSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.details">
+<ANCHOR id="GstTCPClientSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.property-details">
+<ANCHOR id="GstTCPClientSrc--host" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host">
+<ANCHOR id="GstTCPClientSrc--port" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port">
+<ANCHOR id="GstTCPClientSrc--protocol" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--protocol">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.see-also">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.synopsis">
+<ANCHOR id="GstTCPClientSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.properties">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.details">
+<ANCHOR id="GstTCPClientSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.property-details">
+<ANCHOR id="GstTCPClientSink--host" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--host">
+<ANCHOR id="GstTCPClientSink--port" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--port">
+<ANCHOR id="GstTCPClientSink--protocol" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--protocol">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsink.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.see-also">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.synopsis">
+<ANCHOR id="GstTCPServerSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.details">
+<ANCHOR id="GstTCPServerSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.property-details">
+<ANCHOR id="GstTCPServerSrc--host" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host">
+<ANCHOR id="GstTCPServerSrc--port" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port">
+<ANCHOR id="GstTCPServerSrc--protocol" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--protocol">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.see-also">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.synopsis">
+<ANCHOR id="GstTCPServerSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.properties">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.details">
+<ANCHOR id="GstTCPServerSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.property-details">
+<ANCHOR id="GstTCPServerSink--host" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--host">
+<ANCHOR id="GstTCPServerSink--port" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--port">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversink.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.see-also">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.synopsis">
+<ANCHOR id="GstTextOverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.properties">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.description">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.details">
+<ANCHOR id="GstTextOverlay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay-struct">
+<ANCHOR id="gst-plugins-base-plugins-textoverlay.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.property-details">
+<ANCHOR id="GstTextOverlay--deltax" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltax">
+<ANCHOR id="GstTextOverlay--deltay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--deltay">
+<ANCHOR id="GstTextOverlay--font-desc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--font-desc">
+<ANCHOR id="GstTextOverlay--halign" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halign">
+<ANCHOR id="GstTextOverlay--shaded-background" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--shaded-background">
+<ANCHOR id="GstTextOverlay--text" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--text">
+<ANCHOR id="GstTextOverlay--valign" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valign">
+<ANCHOR id="GstTextOverlay--wrap-mode" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wrap-mode">
+<ANCHOR id="GstTextOverlay--xpad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpad">
+<ANCHOR id="GstTextOverlay--ypad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypad">
+<ANCHOR id="GstTextOverlay--halignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--halignment">
+<ANCHOR id="GstTextOverlay--valignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--valignment">
+<ANCHOR id="GstTextOverlay--line-alignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--line-alignment">
+<ANCHOR id="GstTextOverlay--silent" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--silent">
+<ANCHOR id="GstTextOverlay--wait-text" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--wait-text">
+<ANCHOR id="GstTextOverlay--auto-resize" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--auto-resize">
+<ANCHOR id="GstTextOverlay--vertical-render" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--vertical-render">
+<ANCHOR id="GstTextOverlay--color" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--color">
+<ANCHOR id="GstTextOverlay--xpos" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--xpos">
+<ANCHOR id="GstTextOverlay--ypos" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay--ypos">
+<ANCHOR id="gst-plugins-base-plugins-textrender" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html">
+<ANCHOR id="gst-plugins-base-plugins-textrender.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.synopsis">
+<ANCHOR id="GstTextRender" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender">
+<ANCHOR id="gst-plugins-base-plugins-textrender.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-textrender.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.properties">
+<ANCHOR id="gst-plugins-base-plugins-textrender.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.description">
+<ANCHOR id="gst-plugins-base-plugins-textrender.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.details">
+<ANCHOR id="GstTextRender-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender-struct">
+<ANCHOR id="gst-plugins-base-plugins-textrender.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#gst-plugins-base-plugins-textrender.property-details">
+<ANCHOR id="GstTextRender--font-desc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--font-desc">
+<ANCHOR id="GstTextRender--halignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--halignment">
+<ANCHOR id="GstTextRender--line-alignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--line-alignment">
+<ANCHOR id="GstTextRender--valignment" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--valignment">
+<ANCHOR id="GstTextRender--xpad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--xpad">
+<ANCHOR id="GstTextRender--ypad" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-textrender.html#GstTextRender--ypad">
+<ANCHOR id="gst-plugins-base-plugins-theoradec" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.synopsis">
+<ANCHOR id="GstTheoraDec" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#GstTheoraDec">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.properties">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.description">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.details">
+<ANCHOR id="GstTheoraDec-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#GstTheoraDec-struct">
+<ANCHOR id="gst-plugins-base-plugins-theoradec.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#gst-plugins-base-plugins-theoradec.property-details">
+<ANCHOR id="GstTheoraDec--crop" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoradec.html#GstTheoraDec--crop">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.synopsis">
+<ANCHOR id="GstTheoraEnc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.properties">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.description">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.details">
+<ANCHOR id="GstTheoraEnc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct">
+<ANCHOR id="GstTheoraEncBorderMode" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEncBorderMode">
+<ANCHOR id="gst-plugins-base-plugins-theoraenc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.property-details">
+<ANCHOR id="GstTheoraEnc--bitrate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--bitrate">
+<ANCHOR id="GstTheoraEnc--border" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--border">
+<ANCHOR id="GstTheoraEnc--center" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--center">
+<ANCHOR id="GstTheoraEnc--keyframe-auto" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-auto">
+<ANCHOR id="GstTheoraEnc--keyframe-force" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-force">
+<ANCHOR id="GstTheoraEnc--keyframe-freq" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-freq">
+<ANCHOR id="GstTheoraEnc--keyframe-mindistance" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-mindistance">
+<ANCHOR id="GstTheoraEnc--keyframe-threshold" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--keyframe-threshold">
+<ANCHOR id="GstTheoraEnc--noise-sensitivity" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--noise-sensitivity">
+<ANCHOR id="GstTheoraEnc--quality" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quality">
+<ANCHOR id="GstTheoraEnc--quick" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--quick">
+<ANCHOR id="GstTheoraEnc--sharpness" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--sharpness">
+<ANCHOR id="GstTheoraEnc--speed-level" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--speed-level">
+<ANCHOR id="GstTheoraEnc--cap-overflow" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-overflow">
+<ANCHOR id="GstTheoraEnc--cap-underflow" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-underflow">
+<ANCHOR id="GstTheoraEnc--drop-frames" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--drop-frames">
+<ANCHOR id="GstTheoraEnc--rate-buffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--rate-buffer">
+<ANCHOR id="GstTheoraEnc--vp3-compatible" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--vp3-compatible">
+<ANCHOR id="GstTheoraEnc--multipass-cache-file" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-cache-file">
+<ANCHOR id="GstTheoraEnc--multipass-mode" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-mode">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.synopsis">
+<ANCHOR id="GstTheoraParse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#GstTheoraParse">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.properties">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.description">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.details">
+<ANCHOR id="GstTheoraParse-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#GstTheoraParse-struct">
+<ANCHOR id="gst-plugins-base-plugins-theoraparse.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.property-details">
+<ANCHOR id="GstTheoraParse--synchronization-points" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-theoraparse.html#GstTheoraParse--synchronization-points">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.synopsis">
+<ANCHOR id="GstTimeOverlay" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.description">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.details">
+<ANCHOR id="GstTimeOverlay-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.synopsis">
+<ANCHOR id="GstURIDecodeBin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.properties">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.signals" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.signals">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.description">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.details">
+<ANCHOR id="GstURIDecodeBin-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-struct">
+<ANCHOR id="GstAutoplugSelectResult" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult">
+<ANCHOR id="GST-AUTOPLUG-SELECT-TRY:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS">
+<ANCHOR id="GST-AUTOPLUG-SELECT-EXPOSE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-EXPOSE:CAPS">
+<ANCHOR id="GST-AUTOPLUG-SELECT-SKIP:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-SKIP:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.property-details">
+<ANCHOR id="GstURIDecodeBin--uri" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--uri">
+<ANCHOR id="GstURIDecodeBin--connection-speed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--connection-speed">
+<ANCHOR id="GstURIDecodeBin--caps" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--caps">
+<ANCHOR id="GstURIDecodeBin--subtitle-encoding" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--subtitle-encoding">
+<ANCHOR id="GstURIDecodeBin--source" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--source">
+<ANCHOR id="GstURIDecodeBin--buffer-duration" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-duration">
+<ANCHOR id="GstURIDecodeBin--buffer-size" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-size">
+<ANCHOR id="GstURIDecodeBin--download" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--download">
+<ANCHOR id="GstURIDecodeBin--use-buffering" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--use-buffering">
+<ANCHOR id="GstURIDecodeBin--expose-all-streams" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--expose-all-streams">
+<ANCHOR id="GstURIDecodeBin--ring-buffer-max-size" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--ring-buffer-max-size">
+<ANCHOR id="gst-plugins-base-plugins-uridecodebin.signal-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.signal-details">
+<ANCHOR id="GstURIDecodeBin-autoplug-continue" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-continue">
+<ANCHOR id="GstURIDecodeBin-autoplug-factories" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-factories">
+<ANCHOR id="GstURIDecodeBin-autoplug-select" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-select">
+<ANCHOR id="GstURIDecodeBin-unknown-type" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type">
+<ANCHOR id="GstURIDecodeBin-drained" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained">
+<ANCHOR id="GstURIDecodeBin-autoplug-sort" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-sort">
+<ANCHOR id="GstURIDecodeBin-source-setup" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup">
+<ANCHOR id="gst-plugins-base-plugins-videorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html">
+<ANCHOR id="gst-plugins-base-plugins-videorate.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.synopsis">
+<ANCHOR id="GstVideoRate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate">
+<ANCHOR id="gst-plugins-base-plugins-videorate.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-videorate.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.properties">
+<ANCHOR id="gst-plugins-base-plugins-videorate.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.description">
+<ANCHOR id="gst-plugins-base-plugins-videorate.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.details">
+<ANCHOR id="GstVideoRate-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate-struct">
+<ANCHOR id="gst-plugins-base-plugins-videorate.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.property-details">
+<ANCHOR id="GstVideoRate--drop" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--drop">
+<ANCHOR id="GstVideoRate--duplicate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate">
+<ANCHOR id="GstVideoRate--in" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--in">
+<ANCHOR id="GstVideoRate--new-pref" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--new-pref">
+<ANCHOR id="GstVideoRate--out" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--out">
+<ANCHOR id="GstVideoRate--silent" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--silent">
+<ANCHOR id="GstVideoRate--skip-to-first" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--skip-to-first">
+<ANCHOR id="GstVideoRate--average-period" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--average-period">
+<ANCHOR id="GstVideoRate--drop-only" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videorate.html#GstVideoRate--drop-only">
+<ANCHOR id="gst-plugins-base-plugins-videoscale" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.synopsis">
+<ANCHOR id="GstVideoScale" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GstVideoScale">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.properties">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.description">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.details">
+<ANCHOR id="GstVideoScale-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GstVideoScale-struct">
+<ANCHOR id="GstVideoScaleMethod" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod">
+<ANCHOR id="GST-VIDEO-SCALE-NEAREST:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-NEAREST:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-BILINEAR:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-4TAP:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-4TAP:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-LANCZOS:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-LANCZOS:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.property-details">
+<ANCHOR id="GstVideoScale--method" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GstVideoScale--method">
+<ANCHOR id="GstVideoScale--add-borders" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#GstVideoScale--add-borders">
+<ANCHOR id="gst-plugins-base-plugins-videoscale.see-also" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.see-also">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.synopsis">
+<ANCHOR id="GstVideoTestSrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.details">
+<ANCHOR id="GstVideoTestSrc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc-struct">
+<ANCHOR id="GstVideoTestSrcPattern" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SNOW:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SNOW:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLACK:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLACK:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-WHITE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-WHITE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-RED:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-RED:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-GREEN:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GREEN:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLUE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLUE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS1:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS1:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS2:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS2:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS4:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS4:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS8:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS8:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CIRCULAR:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CIRCULAR:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLINK:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLINK:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE75:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE75:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-GAMUT:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GAMUT:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SOLID:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SOLID:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BALL:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BALL:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE100:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE100:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BAR:CAPS" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BAR:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-videotestsrc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.property-details">
+<ANCHOR id="GstVideoTestSrc--pattern" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--pattern">
+<ANCHOR id="GstVideoTestSrc--timestamp-offset" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--timestamp-offset">
+<ANCHOR id="GstVideoTestSrc--is-live" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--is-live">
+<ANCHOR id="GstVideoTestSrc--peer-alloc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--peer-alloc">
+<ANCHOR id="GstVideoTestSrc--colorspec" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--colorspec">
+<ANCHOR id="GstVideoTestSrc--k0" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--k0">
+<ANCHOR id="GstVideoTestSrc--kt" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt">
+<ANCHOR id="GstVideoTestSrc--kt2" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kt2">
+<ANCHOR id="GstVideoTestSrc--kx" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx">
+<ANCHOR id="GstVideoTestSrc--kx2" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kx2">
+<ANCHOR id="GstVideoTestSrc--kxt" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxt">
+<ANCHOR id="GstVideoTestSrc--kxy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kxy">
+<ANCHOR id="GstVideoTestSrc--ky" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky">
+<ANCHOR id="GstVideoTestSrc--ky2" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--ky2">
+<ANCHOR id="GstVideoTestSrc--kyt" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--kyt">
+<ANCHOR id="GstVideoTestSrc--xoffset" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--xoffset">
+<ANCHOR id="GstVideoTestSrc--yoffset" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--yoffset">
+<ANCHOR id="GstVideoTestSrc--background-color" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--background-color">
+<ANCHOR id="GstVideoTestSrc--foreground-color" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--foreground-color">
+<ANCHOR id="GstVideoTestSrc--horizontal-speed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--horizontal-speed">
+<ANCHOR id="gst-plugins-base-plugins-volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html">
+<ANCHOR id="gst-plugins-base-plugins-volume.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.synopsis">
+<ANCHOR id="GstVolume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#GstVolume">
+<ANCHOR id="gst-plugins-base-plugins-volume.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-volume.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-volume.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.properties">
+<ANCHOR id="gst-plugins-base-plugins-volume.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.description">
+<ANCHOR id="gst-plugins-base-plugins-volume.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.details">
+<ANCHOR id="GstVolume-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#GstVolume-struct">
+<ANCHOR id="gst-plugins-base-plugins-volume.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#gst-plugins-base-plugins-volume.property-details">
+<ANCHOR id="GstVolume--mute" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#GstVolume--mute">
+<ANCHOR id="GstVolume--volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-volume.html#GstVolume--volume">
+<ANCHOR id="gst-plugins-base-plugins-vorbisdec" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html">
+<ANCHOR id="gst-plugins-base-plugins-vorbisdec.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#gst-plugins-base-plugins-vorbisdec.synopsis">
+<ANCHOR id="GstVorbisDec" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#GstVorbisDec">
+<ANCHOR id="gst-plugins-base-plugins-vorbisdec.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#gst-plugins-base-plugins-vorbisdec.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-vorbisdec.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#gst-plugins-base-plugins-vorbisdec.description">
+<ANCHOR id="gst-plugins-base-plugins-vorbisdec.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#gst-plugins-base-plugins-vorbisdec.details">
+<ANCHOR id="GstVorbisDec-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisdec.html#GstVorbisDec-struct">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.synopsis">
+<ANCHOR id="GstVorbisEnc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.properties">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.description">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.details">
+<ANCHOR id="GstVorbisEnc-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc-struct">
+<ANCHOR id="gst-plugins-base-plugins-vorbisenc.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#gst-plugins-base-plugins-vorbisenc.property-details">
+<ANCHOR id="GstVorbisEnc--bitrate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--bitrate">
+<ANCHOR id="GstVorbisEnc--last-message" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--last-message">
+<ANCHOR id="GstVorbisEnc--managed" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--managed">
+<ANCHOR id="GstVorbisEnc--max-bitrate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--max-bitrate">
+<ANCHOR id="GstVorbisEnc--min-bitrate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--min-bitrate">
+<ANCHOR id="GstVorbisEnc--quality" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--quality">
+<ANCHOR id="gst-plugins-base-plugins-vorbisparse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html">
+<ANCHOR id="gst-plugins-base-plugins-vorbisparse.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#gst-plugins-base-plugins-vorbisparse.synopsis">
+<ANCHOR id="GstVorbisParse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse">
+<ANCHOR id="gst-plugins-base-plugins-vorbisparse.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#gst-plugins-base-plugins-vorbisparse.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-vorbisparse.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#gst-plugins-base-plugins-vorbisparse.description">
+<ANCHOR id="gst-plugins-base-plugins-vorbisparse.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#gst-plugins-base-plugins-vorbisparse.details">
+<ANCHOR id="GstVorbisParse-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse-struct">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#gst-plugins-base-plugins-vorbistag.synopsis">
+<ANCHOR id="GstVorbisTag" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#GstVorbisTag">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#gst-plugins-base-plugins-vorbistag.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#gst-plugins-base-plugins-vorbistag.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#gst-plugins-base-plugins-vorbistag.description">
+<ANCHOR id="gst-plugins-base-plugins-vorbistag.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#gst-plugins-base-plugins-vorbistag.details">
+<ANCHOR id="GstVorbisTag-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-vorbistag.html#GstVorbisTag-struct">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.synopsis">
+<ANCHOR id="GstXImageSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.properties">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.description">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.details">
+<ANCHOR id="GstXImageSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-ximagesink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#gst-plugins-base-plugins-ximagesink.property-details">
+<ANCHOR id="GstXImageSink--display" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--display">
+<ANCHOR id="GstXImageSink--pixel-aspect-ratio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--pixel-aspect-ratio">
+<ANCHOR id="GstXImageSink--synchronous" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--synchronous">
+<ANCHOR id="GstXImageSink--force-aspect-ratio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--force-aspect-ratio">
+<ANCHOR id="GstXImageSink--handle-events" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-events">
+<ANCHOR id="GstXImageSink--handle-expose" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--handle-expose">
+<ANCHOR id="GstXImageSink--window-height" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-height">
+<ANCHOR id="GstXImageSink--window-width" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-width">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.synopsis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.synopsis">
+<ANCHOR id="GstXvImageSink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.object-hierarchy" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.implemented-interfaces" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.properties" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.properties">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.description" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.description">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.details">
+<ANCHOR id="GstXvImageSink-struct" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-xvimagesink.property-details" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#gst-plugins-base-plugins-xvimagesink.property-details">
+<ANCHOR id="GstXvImageSink--brightness" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--brightness">
+<ANCHOR id="GstXvImageSink--contrast" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--contrast">
+<ANCHOR id="GstXvImageSink--display" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--display">
+<ANCHOR id="GstXvImageSink--hue" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--hue">
+<ANCHOR id="GstXvImageSink--pixel-aspect-ratio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--pixel-aspect-ratio">
+<ANCHOR id="GstXvImageSink--saturation" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--saturation">
+<ANCHOR id="GstXvImageSink--synchronous" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--synchronous">
+<ANCHOR id="GstXvImageSink--force-aspect-ratio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--force-aspect-ratio">
+<ANCHOR id="GstXvImageSink--device" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device">
+<ANCHOR id="GstXvImageSink--device-name" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--device-name">
+<ANCHOR id="GstXvImageSink--handle-events" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-events">
+<ANCHOR id="GstXvImageSink--double-buffer" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--double-buffer">
+<ANCHOR id="GstXvImageSink--handle-expose" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--handle-expose">
+<ANCHOR id="GstXvImageSink--autopaint-colorkey" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--autopaint-colorkey">
+<ANCHOR id="GstXvImageSink--colorkey" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--colorkey">
+<ANCHOR id="GstXvImageSink--draw-borders" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--draw-borders">
+<ANCHOR id="GstXvImageSink--window-height" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-height">
+<ANCHOR id="GstXvImageSink--window-width" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-width">
+<ANCHOR id="gst-plugins-base-plugins-plugin-adder" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-adder.html">
+<ANCHOR id="plugin-adder" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-adder.html#plugin-adder">
+<ANCHOR id="gst-plugins-base-plugins-plugin-alsa" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-alsa.html">
+<ANCHOR id="plugin-alsa" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-alsa.html#plugin-alsa">
+<ANCHOR id="gst-plugins-base-plugins-plugin-app" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-app.html">
+<ANCHOR id="plugin-app" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-app.html#plugin-app">
+<ANCHOR id="gst-plugins-base-plugins-plugin-audioconvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audioconvert.html">
+<ANCHOR id="plugin-audioconvert" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audioconvert.html#plugin-audioconvert">
+<ANCHOR id="gst-plugins-base-plugins-plugin-audiorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audiorate.html">
+<ANCHOR id="plugin-audiorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audiorate.html#plugin-audiorate">
+<ANCHOR id="gst-plugins-base-plugins-plugin-audioresample" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audioresample.html">
+<ANCHOR id="plugin-audioresample" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audioresample.html#plugin-audioresample">
+<ANCHOR id="gst-plugins-base-plugins-plugin-audiotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audiotestsrc.html">
+<ANCHOR id="plugin-audiotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-audiotestsrc.html#plugin-audiotestsrc">
+<ANCHOR id="gst-plugins-base-plugins-plugin-cdparanoia" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-cdparanoia.html">
+<ANCHOR id="plugin-cdparanoia" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-cdparanoia.html#plugin-cdparanoia">
+<ANCHOR id="gst-plugins-base-plugins-plugin-decodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-decodebin.html">
+<ANCHOR id="plugin-decodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-decodebin.html#plugin-decodebin">
+<ANCHOR id="gst-plugins-base-plugins-plugin-encoding" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-encoding.html">
+<ANCHOR id="plugin-encoding" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-encoding.html#plugin-encoding">
+<ANCHOR id="gst-plugins-base-plugins-plugin-gdp" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-gdp.html">
+<ANCHOR id="plugin-gdp" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-gdp.html#plugin-gdp">
+<ANCHOR id="gst-plugins-base-plugins-plugin-gio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-gio.html">
+<ANCHOR id="plugin-gio" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-gio.html#plugin-gio">
+<ANCHOR id="gst-plugins-base-plugins-plugin-libvisual" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-libvisual.html">
+<ANCHOR id="plugin-libvisual" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-libvisual.html#plugin-libvisual">
+<ANCHOR id="gst-plugins-base-plugins-plugin-ogg" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-ogg.html">
+<ANCHOR id="plugin-ogg" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-ogg.html#plugin-ogg">
+<ANCHOR id="gst-plugins-base-plugins-plugin-pango" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-pango.html">
+<ANCHOR id="plugin-pango" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-pango.html#plugin-pango">
+<ANCHOR id="gst-plugins-base-plugins-plugin-playback" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-playback.html">
+<ANCHOR id="plugin-playback" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-playback.html#plugin-playback">
+<ANCHOR id="gst-plugins-base-plugins-plugin-subparse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-subparse.html">
+<ANCHOR id="plugin-subparse" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-subparse.html#plugin-subparse">
+<ANCHOR id="gst-plugins-base-plugins-plugin-tcp" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-tcp.html">
+<ANCHOR id="plugin-tcp" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-tcp.html#plugin-tcp">
+<ANCHOR id="gst-plugins-base-plugins-plugin-theora" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-theora.html">
+<ANCHOR id="plugin-theora" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-theora.html#plugin-theora">
+<ANCHOR id="gst-plugins-base-plugins-plugin-typefindfunctions" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-typefindfunctions.html">
+<ANCHOR id="plugin-typefindfunctions" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-typefindfunctions.html#plugin-typefindfunctions">
+<ANCHOR id="gst-plugins-base-plugins-plugin-uridecodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-uridecodebin.html">
+<ANCHOR id="plugin-uridecodebin" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-uridecodebin.html#plugin-uridecodebin">
+<ANCHOR id="gst-plugins-base-plugins-plugin-videorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videorate.html">
+<ANCHOR id="plugin-videorate" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videorate.html#plugin-videorate">
+<ANCHOR id="gst-plugins-base-plugins-plugin-videoscale" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videoscale.html">
+<ANCHOR id="plugin-videoscale" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videoscale.html#plugin-videoscale">
+<ANCHOR id="gst-plugins-base-plugins-plugin-videotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videotestsrc.html">
+<ANCHOR id="plugin-videotestsrc" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-videotestsrc.html#plugin-videotestsrc">
+<ANCHOR id="gst-plugins-base-plugins-plugin-volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-volume.html">
+<ANCHOR id="plugin-volume" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-volume.html#plugin-volume">
+<ANCHOR id="gst-plugins-base-plugins-plugin-vorbis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-vorbis.html">
+<ANCHOR id="plugin-vorbis" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-vorbis.html#plugin-vorbis">
+<ANCHOR id="gst-plugins-base-plugins-plugin-ximagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-ximagesink.html">
+<ANCHOR id="plugin-ximagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-ximagesink.html#plugin-ximagesink">
+<ANCHOR id="gst-plugins-base-plugins-plugin-xvimagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-xvimagesink.html">
+<ANCHOR id="plugin-xvimagesink" href="gst-plugins-base-plugins-0.11/gst-plugins-base-plugins-plugin-xvimagesink.html#plugin-xvimagesink">
diff --git a/docs/plugins/html/left.png b/docs/plugins/html/left.png
new file mode 100644
index 0000000..2d05b3d
--- /dev/null
+++ b/docs/plugins/html/left.png
Binary files differ
diff --git a/docs/plugins/html/right.png b/docs/plugins/html/right.png
new file mode 100644
index 0000000..92832e3
--- /dev/null
+++ b/docs/plugins/html/right.png
Binary files differ
diff --git a/docs/plugins/html/style.css b/docs/plugins/html/style.css
new file mode 100644
index 0000000..d6f6c26
--- /dev/null
+++ b/docs/plugins/html/style.css
@@ -0,0 +1,266 @@
+.synopsis, .classsynopsis
+{
+  /* tango:aluminium 1/2 */
+  background: #eeeeec;
+  border: solid 1px #d3d7cf;
+  padding: 0.5em;
+}
+.programlisting
+{
+  /* tango:sky blue 0/1 */
+  background: #e6f3ff;
+  border: solid 1px #729fcf;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+    
+  }
+  /* this is needed so that the local anchors are displayed below the naviagtion */
+  div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+  {
+    display: inline-block;
+    position: relative;
+    top:-5em;
+  }
+  /* this seems to be a bug in the xsl style sheets when generating indexes */
+  div.index div.index
+  {
+    top: 0em;
+  }
+  /* make space for the fixed navigation bar and add space at the bottom so that
+   * link targets appear somewhat close to top
+   */
+  body
+  {
+    padding-top: 3.2em;
+    padding-bottom: 20em;
+  }
+  /* style and size the navigation bar */
+  table.navigation#top
+  {
+    position: fixed;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+    z-index: 10;
+  }
+  .navigation a, .navigation a:visited
+  {
+    /* tango:scarlet red 3 */
+    color: #a40000;
+  }
+  .navigation a:hover
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+  }
+  td.shortcuts
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+
+a, a:visited
+{
+  text-decoration: none;
+  /* tango:sky blue 2 */
+  color: #3465a4;
+}
+a:hover
+{
+  text-decoration: underline;
+  /* tango:sky blue 1 */
+  color: #729fcf;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+  /* tango:aluminium 3 */
+  border: solid 1px #babdb6;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  /* tango:aluminium 2 */
+  background-color: #d3d7cf;
+}
+
+hr
+{
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  background: #babdb6;
+  border: none 0px;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  text-align: center;
+  font-size: 80%;
+}
+
+.warning
+{
+  /* tango:orange 0/1 */
+  background: #ffeed9;
+  border-color: #ffb04f;
+}
+.note
+{
+  /* tango:chameleon 0/0.5 */
+  background: #d8ffb2;
+  border-color: #abf562;
+}
+.note, .warning
+{
+  padding: 0.5em;
+  border-width: 1px;
+  border-style: solid;
+}
+.note h3, .warning h3
+{
+  margin-top: 0.0em
+}
+.note p, .warning p
+{
+  margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+  float: right;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+.annotation
+{
+  /* tango:aluminium 5 */
+  color: #555753;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket   { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment    { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function   { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword    { color: #4e9a06; } /* tango: chameleon 3  */
+.listing_code .programlisting .linenum    { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal     { color: #000000; }
+.listing_code .programlisting .number     { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc    { color: #204a87; } /* tango: sky blue 3  */
+.listing_code .programlisting .string     { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type       { color: #000000; }
+.listing_code .programlisting .type a     { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol     { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+  /* tango:sky blue 1 */
+  border: solid 1px #729fcf;
+  padding: 0px;
+}
+
+.listing_lines, .listing_code {
+  margin-top: 0px;
+  margin-bottom: 0px;
+  padding: 0.5em;
+}
+.listing_lines {
+  /* tango:sky blue 0.5 */
+  background: #a6c5e3;
+  /* tango:aluminium 6 */
+  color: #2e3436;
+}
+.listing_code {
+  /* tango:sky blue 0 */
+  background: #e6f3ff;
+}
+.listing_code .programlisting {
+  /* override from previous */
+  border: none 0px;
+  padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+  margin: 0px;
+}
+
diff --git a/docs/plugins/html/up.png b/docs/plugins/html/up.png
new file mode 100644
index 0000000..85b3e2a
--- /dev/null
+++ b/docs/plugins/html/up.png
Binary files differ
diff --git a/docs/plugins/inspect/plugin-adder.xml b/docs/plugins/inspect/plugin-adder.xml
new file mode 100644
index 0000000..526d9c0
--- /dev/null
+++ b/docs/plugins/inspect/plugin-adder.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>adder</name>
+  <description>Adds multiple streams</description>
+  <filename>../../gst/adder/.libs/libgstadder.so</filename>
+  <basename>libgstadder.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>adder</name>
+      <longname>Adder</longname>
+      <class>Generic/Audio</class>
+      <description>Add N audio channels together</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-alsa.xml b/docs/plugins/inspect/plugin-alsa.xml
new file mode 100644
index 0000000..d1623e8
--- /dev/null
+++ b/docs/plugins/inspect/plugin-alsa.xml
@@ -0,0 +1,52 @@
+<plugin>
+  <name>alsa</name>
+  <description>ALSA plugin library</description>
+  <filename>../../ext/alsa/.libs/libgstalsa.so</filename>
+  <basename>libgstalsa.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>alsamixer</name>
+      <longname>Alsa mixer</longname>
+      <class>Generic/Audio</class>
+      <description>Control sound input and output levels with ALSA</description>
+      <author>Leif Johnson &lt;leif@ambient.2y.net&gt;</author>
+      <pads>
+      </pads>
+    </element>
+    <element>
+      <name>alsasink</name>
+      <longname>Audio sink (ALSA)</longname>
+      <class>Sink/Audio</class>
+      <description>Output to a sound card via ALSA</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)24, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, signed=(boolean){ true, false }, width=(int)8, depth=(int)8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-iec958</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>alsasrc</name>
+      <longname>Audio source (ALSA)</longname>
+      <class>Source/Audio</class>
+      <description>Read from a sound card via ALSA</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)32, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)24, depth=(int)24, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, endianness=(int){ 1234, 4321 }, signed=(boolean){ true, false }, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]; audio/x-raw-int, signed=(boolean){ true, false }, width=(int)8, depth=(int)8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-app.xml b/docs/plugins/inspect/plugin-app.xml
new file mode 100644
index 0000000..2648f4a
--- /dev/null
+++ b/docs/plugins/inspect/plugin-app.xml
@@ -0,0 +1,43 @@
+<plugin>
+  <name>app</name>
+  <description>Elements used to communicate with applications</description>
+  <filename>../../gst/app/.libs/libgstapp.so</filename>
+  <basename>libgstapp.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>appsink</name>
+      <longname>AppSink</longname>
+      <class>Generic/Sink</class>
+      <description>Allow the application to get access to raw buffer</description>
+      <author>David Schleef &lt;ds@schleef.org&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>appsrc</name>
+      <longname>AppSrc</longname>
+      <class>Generic/Source</class>
+      <description>Allow the application to feed buffers to a pipeline</description>
+      <author>David Schleef &lt;ds@schleef.org&gt;, Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-audioconvert.xml b/docs/plugins/inspect/plugin-audioconvert.xml
new file mode 100644
index 0000000..1bdd233
--- /dev/null
+++ b/docs/plugins/inspect/plugin-audioconvert.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>audioconvert</name>
+  <description>Convert audio to different formats</description>
+  <filename>../../gst/audioconvert/.libs/libgstaudioconvert.so</filename>
+  <basename>libgstaudioconvert.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>audioconvert</name>
+      <longname>Audio converter</longname>
+      <class>Filter/Converter/Audio</class>
+      <description>Convert audio to different formats</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)64; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)24, depth=(int)[ 1, 24 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)16, depth=(int)[ 1, 16 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)8, depth=(int)[ 1, 8 ], signed=(boolean){ true, false }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)64; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)32, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)24, depth=(int)[ 1, 24 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)16, depth=(int)[ 1, 16 ], signed=(boolean){ true, false }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int)8, depth=(int)[ 1, 8 ], signed=(boolean){ true, false }</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-audiorate.xml b/docs/plugins/inspect/plugin-audiorate.xml
new file mode 100644
index 0000000..4c32e10
--- /dev/null
+++ b/docs/plugins/inspect/plugin-audiorate.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>audiorate</name>
+  <description>Adjusts audio frames</description>
+  <filename>../../gst/audiorate/.libs/libgstaudiorate.so</filename>
+  <basename>libgstaudiorate.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>audiorate</name>
+      <longname>Audio rate adjuster</longname>
+      <class>Filter/Effect/Audio</class>
+      <description>Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-audioresample.xml b/docs/plugins/inspect/plugin-audioresample.xml
new file mode 100644
index 0000000..062caf3
--- /dev/null
+++ b/docs/plugins/inspect/plugin-audioresample.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>audioresample</name>
+  <description>Resamples audio</description>
+  <filename>../../gst/audioresample/.libs/libgstaudioresample.so</filename>
+  <basename>libgstaudioresample.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>audioresample</name>
+      <longname>Audio resampler</longname>
+      <class>Filter/Converter/Audio</class>
+      <description>Resamples audio</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-audiotestsrc.xml b/docs/plugins/inspect/plugin-audiotestsrc.xml
new file mode 100644
index 0000000..5190389
--- /dev/null
+++ b/docs/plugins/inspect/plugin-audiotestsrc.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>audiotestsrc</name>
+  <description>Creates audio test signals of given frequency and volume</description>
+  <filename>../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so</filename>
+  <basename>libgstaudiotestsrc.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>audiotestsrc</name>
+      <longname>Audio test source</longname>
+      <class>Source/Audio</class>
+      <description>Creates audio test signals of given frequency and volume</description>
+      <author>Stefan Kost &lt;ensonic@users.sf.net&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]; audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]; audio/x-raw-float, endianness=(int)1234, width=(int){ 32, 64 }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-cdparanoia.xml b/docs/plugins/inspect/plugin-cdparanoia.xml
new file mode 100644
index 0000000..2dae88d
--- /dev/null
+++ b/docs/plugins/inspect/plugin-cdparanoia.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>cdparanoia</name>
+  <description>Read audio from CD in paranoid mode</description>
+  <filename>../../ext/cdparanoia/.libs/libgstcdparanoia.so</filename>
+  <basename>libgstcdparanoia.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>cdparanoiasrc</name>
+      <longname>CD Audio (cdda) Source, Paranoia IV</longname>
+      <class>Source/File</class>
+      <description>Read audio from CD in paranoid mode</description>
+      <author>Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-decodebin.xml b/docs/plugins/inspect/plugin-decodebin.xml
new file mode 100644
index 0000000..e8f7814
--- /dev/null
+++ b/docs/plugins/inspect/plugin-decodebin.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>decodebin</name>
+  <description>decoder bin</description>
+  <filename>../../gst/playback/.libs/libgstdecodebin.so</filename>
+  <basename>libgstdecodebin.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>decodebin</name>
+      <longname>Decoder Bin</longname>
+      <class>Generic/Bin/Decoder</class>
+      <description>Autoplug and decode to raw media</description>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src%d</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-encoding.xml b/docs/plugins/inspect/plugin-encoding.xml
new file mode 100644
index 0000000..0a97277
--- /dev/null
+++ b/docs/plugins/inspect/plugin-encoding.xml
@@ -0,0 +1,46 @@
+<plugin>
+  <name>encoding</name>
+  <description>various encoding-related elements</description>
+  <filename>../../gst/encoding/.libs/libgstencodebin.so</filename>
+  <basename>libgstencodebin.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>encodebin</name>
+      <longname>Encoder Bin</longname>
+      <class>Generic/Bin/Encoder</class>
+      <description>Convenience encoding/muxing element</description>
+      <author>Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>private_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>video_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-gdp.xml b/docs/plugins/inspect/plugin-gdp.xml
new file mode 100644
index 0000000..72b08b8
--- /dev/null
+++ b/docs/plugins/inspect/plugin-gdp.xml
@@ -0,0 +1,55 @@
+<plugin>
+  <name>gdp</name>
+  <description>Payload/depayload GDP packets</description>
+  <filename>../../gst/gdp/.libs/libgstgdp.so</filename>
+  <basename>libgstgdp.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>gdpdepay</name>
+      <longname>GDP Depayloader</longname>
+      <class>GDP/Depayloader</class>
+      <description>Depayloads GStreamer Data Protocol buffers</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-gdp</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>gdppay</name>
+      <longname>GDP Payloader</longname>
+      <class>GDP/Payloader</class>
+      <description>Payloads GStreamer Data Protocol buffers</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>application/x-gdp</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-gio.xml b/docs/plugins/inspect/plugin-gio.xml
new file mode 100644
index 0000000..d531e9f
--- /dev/null
+++ b/docs/plugins/inspect/plugin-gio.xml
@@ -0,0 +1,73 @@
+<plugin>
+  <name>gio</name>
+  <description>GIO elements</description>
+  <filename>../../ext/gio/.libs/libgstgio.so</filename>
+  <basename>libgstgio.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>giosink</name>
+      <longname>GIO sink</longname>
+      <class>Sink/File</class>
+      <description>Write to any GIO-supported location</description>
+      <author>René Stadler &lt;mail@renestadler.de&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>giosrc</name>
+      <longname>GIO source</longname>
+      <class>Source/File</class>
+      <description>Read from any GIO-supported location</description>
+      <author>René Stadler &lt;mail@renestadler.de&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>giostreamsink</name>
+      <longname>GIO stream sink</longname>
+      <class>Sink</class>
+      <description>Write to any GIO stream</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>giostreamsrc</name>
+      <longname>GIO stream source</longname>
+      <class>Source</class>
+      <description>Read from any GIO stream</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-libvisual.xml b/docs/plugins/inspect/plugin-libvisual.xml
new file mode 100644
index 0000000..0c477f0
--- /dev/null
+++ b/docs/plugins/inspect/plugin-libvisual.xml
@@ -0,0 +1,181 @@
+<plugin>
+  <name>libvisual</name>
+  <description>libvisual visualization plugins</description>
+  <filename>../../ext/libvisual/.libs/libgstlibvisual.so</filename>
+  <basename>libgstlibvisual.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>libvisual_bumpscope</name>
+      <longname>libvisual Bumpscope plugin plugin v.0.0.1</longname>
+      <class>Visualization</class>
+      <description>Bumpscope visual plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_corona</name>
+      <longname>libvisual libvisual corona plugin plugin v.0.1</longname>
+      <class>Visualization</class>
+      <description>Libvisual corona plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_infinite</name>
+      <longname>libvisual infinite plugin plugin v.0.1</longname>
+      <class>Visualization</class>
+      <description>Infinite visual plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_jakdaw</name>
+      <longname>libvisual Jakdaw plugin plugin v.0.0.1</longname>
+      <class>Visualization</class>
+      <description>jakdaw visual plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_jess</name>
+      <longname>libvisual jess plugin plugin v.0.1</longname>
+      <class>Visualization</class>
+      <description>Jess visual plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_lv_analyzer</name>
+      <longname>libvisual libvisual analyzer plugin v.1.0</longname>
+      <class>Visualization</class>
+      <description>Libvisual analyzer plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_lv_scope</name>
+      <longname>libvisual libvisual scope plugin v.0.1</longname>
+      <class>Visualization</class>
+      <description>Libvisual scope plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>libvisual_oinksie</name>
+      <longname>libvisual oinksie plugin plugin v.0.1</longname>
+      <class>Visualization</class>
+      <description>Libvisual Oinksie visual plugin</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int){ 1, 2 }, rate=(int){ 8000, 11250, 22500, 32000, 44100, 48000, 96000 }</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-ogg.xml b/docs/plugins/inspect/plugin-ogg.xml
new file mode 100644
index 0000000..80ac5d2
--- /dev/null
+++ b/docs/plugins/inspect/plugin-ogg.xml
@@ -0,0 +1,160 @@
+<plugin>
+  <name>ogg</name>
+  <description>ogg stream manipulation (info about ogg: http://xiph.org)</description>
+  <filename>../../ext/ogg/.libs/libgstogg.so</filename>
+  <basename>libgstogg.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>oggaviparse</name>
+      <longname>Ogg AVI parser</longname>
+      <class>Codec/Parser</class>
+      <description>parse an ogg avi stream into pages (info about ogg: http://xiph.org)</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-ogg-avi</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>oggdemux</name>
+      <longname>Ogg demuxer</longname>
+      <class>Codec/Demuxer</class>
+      <description>demux ogg streams (info about ogg: http://xiph.org)</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/ogg; application/x-annodex</details>
+        </caps>
+        <caps>
+          <name>src_%d</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>oggmux</name>
+      <longname>Ogg muxer</longname>
+      <class>Codec/Muxer</class>
+      <description>mux ogg streams (info about ogg: http://xiph.org)</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink_%d</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>video/x-theora; audio/x-vorbis; audio/x-flac; audio/x-speex; audio/x-celt; application/x-ogm-video; application/x-ogm-audio; video/x-dirac; video/x-smoke; video/x-vp8; text/x-cmml, encoded=(boolean)true; subtitle/x-kate; application/x-kate</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>application/ogg</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>oggparse</name>
+      <longname>Ogg parser</longname>
+      <class>Codec/Parser</class>
+      <description>parse ogg streams into pages (info about ogg: http://xiph.org)</description>
+      <author>Michael Smith &lt;msmith@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/ogg</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>application/ogg</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>ogmaudioparse</name>
+      <longname>OGM audio stream parser</longname>
+      <class>Codec/Decoder/Audio</class>
+      <description>parse an OGM audio header and stream</description>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-ogm-audio</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-raw-int, endianness=(int)1234, signed=(boolean){ true, false }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]; audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]; audio/x-dts; audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]; audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-raw-float, endianness=(int)1234, width=(int){ 32, 64 }, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/AMR, rate=(int)8000, channels=(int)1; audio/AMR-WB, rate=(int)16000, channels=(int)1; audio/x-siren; application/x-ogg-avi</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>ogmtextparse</name>
+      <longname>OGM text stream parser</longname>
+      <class>Codec/Decoder/Subtitle</class>
+      <description>parse an OGM text header and stream</description>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-ogm-text</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>text/plain</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>ogmvideoparse</name>
+      <longname>OGM video stream parser</longname>
+      <class>Codec/Decoder/Video</class>
+      <description>parse an OGM video header and stream</description>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-ogm-video</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>video/x-3ivx, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-rgb, bpp=(int){ 8, 24, 32 }, depth=(int){ 8, 24 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xvid, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-pango.xml b/docs/plugins/inspect/plugin-pango.xml
new file mode 100644
index 0000000..16834c7
--- /dev/null
+++ b/docs/plugins/inspect/plugin-pango.xml
@@ -0,0 +1,103 @@
+<plugin>
+  <name>pango</name>
+  <description>Pango-based text rendering and overlay</description>
+  <filename>../../ext/pango/.libs/libgstpango.so</filename>
+  <basename>libgstpango.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>clockoverlay</name>
+      <longname>Clock overlay</longname>
+      <class>Filter/Editor/Video</class>
+      <description>Overlays the current clock time on a video stream</description>
+      <author>Tim-Philipp Müller &lt;tim@centricular.net&gt;</author>
+      <pads>
+        <caps>
+          <name>video_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>textoverlay</name>
+      <longname>Text overlay</longname>
+      <class>Filter/Editor/Video</class>
+      <description>Adds text strings on top of a video buffer</description>
+      <author>David Schleef &lt;ds@schleef.org&gt;, Zeeshan Ali &lt;zeeshan.ali@nokia.com&gt;</author>
+      <pads>
+        <caps>
+          <name>text_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>text/x-pango-markup; text/plain</details>
+        </caps>
+        <caps>
+          <name>video_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>textrender</name>
+      <longname>Text renderer</longname>
+      <class>Filter/Editor/Video</class>
+      <description>Renders a text string to an image bitmap</description>
+      <author>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>text/x-pango-markup; text/plain</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>timeoverlay</name>
+      <longname>Time overlay</longname>
+      <class>Filter/Editor/Video</class>
+      <description>Overlays buffer time stamps on a video stream</description>
+      <author>Tim-Philipp Müller &lt;tim@centricular.net&gt;</author>
+      <pads>
+        <caps>
+          <name>video_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc){ AYUV, I420, UYVY, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-playback.xml b/docs/plugins/inspect/plugin-playback.xml
new file mode 100644
index 0000000..cbd683c
--- /dev/null
+++ b/docs/plugins/inspect/plugin-playback.xml
@@ -0,0 +1,97 @@
+<plugin>
+  <name>playback</name>
+  <description>various playback elements</description>
+  <filename>../../gst/playback/.libs/libgstplaybin.so</filename>
+  <basename>libgstplaybin.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>playbin</name>
+      <longname>Player Bin</longname>
+      <class>Generic/Bin/Player</class>
+      <description>Autoplug and play media from an uri</description>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+      </pads>
+    </element>
+    <element>
+      <name>playbin2</name>
+      <longname>Player Bin 2</longname>
+      <class>Generic/Bin/Player</class>
+      <description>Autoplug and play media from an uri</description>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+      </pads>
+    </element>
+    <element>
+      <name>playsink</name>
+      <longname>Player Sink</longname>
+      <class>Generic/Bin/Sink</class>
+      <description>Convenience sink for multiple streams</description>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>audio_raw_sink</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>audio_sink</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>text_sink</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>video_raw_sink</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>video_sink</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>subtitleoverlay</name>
+      <longname>Subtitle Overlay</longname>
+      <class>Video/Overlay/Subtitle</class>
+      <description>Overlays a video stream with subtitles</description>
+      <author>Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>subtitle_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>video_sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-subparse.xml b/docs/plugins/inspect/plugin-subparse.xml
new file mode 100644
index 0000000..f219927
--- /dev/null
+++ b/docs/plugins/inspect/plugin-subparse.xml
@@ -0,0 +1,55 @@
+<plugin>
+  <name>subparse</name>
+  <description>Subtitle parsing</description>
+  <filename>../../gst/subparse/.libs/libgstsubparse.so</filename>
+  <basename>libgstsubparse.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>ssaparse</name>
+      <longname>SSA Subtitle Parser</longname>
+      <class>Codec/Parser/Subtitle</class>
+      <description>Parses SSA subtitle streams</description>
+      <author>Tim-Philipp Müller &lt;tim centricular net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-ssa; application/x-ass</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>text/x-pango-markup</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>subparse</name>
+      <longname>Subtitle parser</longname>
+      <class>Codec/Parser/Subtitle</class>
+      <description>Parses subtitle (.sub) files into text streams</description>
+      <author>Gustavo J. A. M. Carneiro &lt;gjc@inescporto.pt&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>application/x-subtitle; application/x-subtitle-sami; application/x-subtitle-tmplayer; application/x-subtitle-mpl2; application/x-subtitle-dks; application/x-subtitle-qttext</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>text/plain; text/x-pango-markup</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-tcp.xml b/docs/plugins/inspect/plugin-tcp.xml
new file mode 100644
index 0000000..8cb63ca
--- /dev/null
+++ b/docs/plugins/inspect/plugin-tcp.xml
@@ -0,0 +1,88 @@
+<plugin>
+  <name>tcp</name>
+  <description>transfer data over the network via TCP</description>
+  <filename>../../gst/tcp/.libs/libgsttcp.so</filename>
+  <basename>libgsttcp.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>multifdsink</name>
+      <longname>Multi filedescriptor sink</longname>
+      <class>Sink/Network</class>
+      <description>Send data to multiple filedescriptors</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>tcpclientsink</name>
+      <longname>TCP client sink</longname>
+      <class>Sink/Network</class>
+      <description>Send data as a client over the network via TCP</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>tcpclientsrc</name>
+      <longname>TCP client source</longname>
+      <class>Source/Network</class>
+      <description>Receive data as a client over the network via TCP</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>tcpserversink</name>
+      <longname>TCP server sink</longname>
+      <class>Sink/Network</class>
+      <description>Send data as a server over the network via TCP</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>tcpserversrc</name>
+      <longname>TCP server source</longname>
+      <class>Source/Network</class>
+      <description>Receive data as a server over the network via TCP</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-theora.xml b/docs/plugins/inspect/plugin-theora.xml
new file mode 100644
index 0000000..4563c60
--- /dev/null
+++ b/docs/plugins/inspect/plugin-theora.xml
@@ -0,0 +1,76 @@
+<plugin>
+  <name>theora</name>
+  <description>Theora plugin library</description>
+  <filename>../../ext/theora/.libs/libgsttheora.so</filename>
+  <basename>libgsttheora.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>theoradec</name>
+      <longname>Theora video decoder</longname>
+      <class>Codec/Decoder/Video</class>
+      <description>decode raw theora streams to raw YUV video</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-theora</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv, format=(fourcc){ I420, Y42B, Y444 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>theoraenc</name>
+      <longname>Theora video encoder</longname>
+      <class>Codec/Encoder/Video</class>
+      <description>encode raw YUV video to a theora stream</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv, format=(fourcc){ I420, Y42B, Y444 }, framerate=(fraction)[ 1/2147483647, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-theora</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>theoraparse</name>
+      <longname>Theora video parser</longname>
+      <class>Codec/Parser/Video</class>
+      <description>parse raw theora streams</description>
+      <author>Andy Wingo &lt;wingo@pobox.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-theora</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-theora</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-typefindfunctions.xml b/docs/plugins/inspect/plugin-typefindfunctions.xml
new file mode 100644
index 0000000..f2d430d
--- /dev/null
+++ b/docs/plugins/inspect/plugin-typefindfunctions.xml
@@ -0,0 +1,13 @@
+<plugin>
+  <name>typefindfunctions</name>
+  <description>default typefind functions</description>
+  <filename>../../gst/typefind/.libs/libgsttypefindfunctions.so</filename>
+  <basename>libgsttypefindfunctions.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-uridecodebin.xml b/docs/plugins/inspect/plugin-uridecodebin.xml
new file mode 100644
index 0000000..87ec73d
--- /dev/null
+++ b/docs/plugins/inspect/plugin-uridecodebin.xml
@@ -0,0 +1,49 @@
+<plugin>
+  <name>uridecodebin</name>
+  <description>URI Decoder bin</description>
+  <filename>../../gst/playback/.libs/libgstdecodebin2.so</filename>
+  <basename>libgstdecodebin2.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>decodebin2</name>
+      <longname>Decoder Bin</longname>
+      <class>Generic/Bin/Decoder</class>
+      <description>Autoplug and decode to raw media</description>
+      <author>Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;, Sebastian Dröge &lt;sebastian.droege@collabora.co.uk&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src%d</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>uridecodebin</name>
+      <longname>URI Decoder</longname>
+      <class>Generic/Bin/Decoder</class>
+      <description>Autoplug and decode an URI to raw media</description>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>src%d</name>
+          <direction>source</direction>
+          <presence>sometimes</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-videorate.xml b/docs/plugins/inspect/plugin-videorate.xml
new file mode 100644
index 0000000..df79cae
--- /dev/null
+++ b/docs/plugins/inspect/plugin-videorate.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>videorate</name>
+  <description>Adjusts video frames</description>
+  <filename>../../gst/videorate/.libs/libgstvideorate.so</filename>
+  <basename>libgstvideorate.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>videorate</name>
+      <longname>Video rate adjuster</longname>
+      <class>Filter/Effect/Video</class>
+      <description>Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</description>
+      <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv; video/x-raw-rgb; video/x-raw-gray; image/jpeg; image/png</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv; video/x-raw-rgb; video/x-raw-gray; image/jpeg; image/png</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-videoscale.xml b/docs/plugins/inspect/plugin-videoscale.xml
new file mode 100644
index 0000000..af87c24
--- /dev/null
+++ b/docs/plugins/inspect/plugin-videoscale.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>videoscale</name>
+  <description>Resizes video</description>
+  <filename>../../gst/videoscale/.libs/libgstvideoscale.so</filename>
+  <basename>libgstvideoscale.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>videoscale</name>
+      <longname>Video scaler</longname>
+      <class>Filter/Converter/Video/Scaler</class>
+      <description>Resizes video</description>
+      <author>Wim Taymans &lt;wim.taymans@chello.be&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)v308, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)15, endianness=(int)1234, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y16 , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y8  , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)GREY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AY64, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)64, depth=(int)64, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)v308, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)16, endianness=(int)1234, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, depth=(int)15, endianness=(int)1234, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y16 , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y8  , width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)GREY, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AY64, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)64, depth=(int)64, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-videotestsrc.xml b/docs/plugins/inspect/plugin-videotestsrc.xml
new file mode 100644
index 0000000..73a26d0
--- /dev/null
+++ b/docs/plugins/inspect/plugin-videotestsrc.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>videotestsrc</name>
+  <description>Creates a test video stream</description>
+  <filename>../../gst/videotestsrc/.libs/libgstvideotestsrc.so</filename>
+  <basename>libgstvideotestsrc.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>videotestsrc</name>
+      <longname>Video test source</longname>
+      <class>Source/Video</class>
+      <description>Creates a test video stream</description>
+      <author>David A. Schleef &lt;ds@schleef.org&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>video/x-raw-yuv, format=(fourcc)YUY2, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVYU, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)v308, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AYUV, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)v210, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)v216, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVP, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)AY64, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVU9, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUV9, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)NV12, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)NV21, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y41B, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y42B, color-matrix=(string){ sdtv, hdtv }, chroma-site=(string){ mpeg2, jpeg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y444, color-matrix=(string){ sdtv, hdtv }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y800, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)24, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, endianness=(int)4321, depth=(int)32, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, endianness=(int)4321, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, endianness=(int)4321, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, endianness=(int)1234, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)16, endianness=(int)1234, depth=(int)15, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)64, endianness=(int)4321, depth=(int)64, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-bayer, format=(string)bggr, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-bayer, format=(string)rggb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-bayer, format=(string)grbg, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-bayer, format=(string)gbrg, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-volume.xml b/docs/plugins/inspect/plugin-volume.xml
new file mode 100644
index 0000000..02d15ee
--- /dev/null
+++ b/docs/plugins/inspect/plugin-volume.xml
@@ -0,0 +1,34 @@
+<plugin>
+  <name>volume</name>
+  <description>plugin for controlling audio volume</description>
+  <filename>../../gst/volume/.libs/libgstvolume.so</filename>
+  <basename>libgstvolume.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>volume</name>
+      <longname>Volume</longname>
+      <class>Filter/Effect/Audio</class>
+      <description>Set volume on audio/raw streams</description>
+      <author>Andy Wingo &lt;wingo@pobox.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int){ 32, 64 }; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true; audio/x-raw-int, channels=(int)[ 1, 2147483647 ], rate=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-vorbis.xml b/docs/plugins/inspect/plugin-vorbis.xml
new file mode 100644
index 0000000..3f4f3e4
--- /dev/null
+++ b/docs/plugins/inspect/plugin-vorbis.xml
@@ -0,0 +1,97 @@
+<plugin>
+  <name>vorbis</name>
+  <description>Vorbis plugin library</description>
+  <filename>../../ext/vorbis/.libs/libgstvorbis.so</filename>
+  <basename>libgstvorbis.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>vorbisdec</name>
+      <longname>Vorbis audio decoder</longname>
+      <class>Codec/Decoder/Audio</class>
+      <description>decode raw vorbis streams to float audio</description>
+      <author>Benjamin Otte &lt;otte@gnome.org&gt;, Chris Lord &lt;chris@openedhand.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 256 ], endianness=(int)1234, width=(int)32</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>vorbisenc</name>
+      <longname>Vorbis audio encoder</longname>
+      <class>Codec/Encoder/Audio</class>
+      <description>Encodes audio in Vorbis format</description>
+      <author>Monty &lt;monty@xiph.org&gt;, Wim Taymans &lt;wim@fluendo.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-raw-float, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 256 ], endianness=(int)1234, width=(int)32</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>vorbisparse</name>
+      <longname>VorbisParse</longname>
+      <class>Codec/Parser/Audio</class>
+      <description>parse raw vorbis streams</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
+      <name>vorbistag</name>
+      <longname>VorbisTag</longname>
+      <class>Formatter/Metadata</class>
+      <description>Retags vorbis streams</description>
+      <author>James Livingston &lt;doclivingston@gmail.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-vorbis</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-ximagesink.xml b/docs/plugins/inspect/plugin-ximagesink.xml
new file mode 100644
index 0000000..58dbc00
--- /dev/null
+++ b/docs/plugins/inspect/plugin-ximagesink.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>ximagesink</name>
+  <description>X11 video output element based on standard Xlib calls</description>
+  <filename>../../sys/ximage/.libs/libgstximagesink.so</filename>
+  <basename>libgstximagesink.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>ximagesink</name>
+      <longname>Video sink</longname>
+      <class>Sink/Video</class>
+      <description>A standard X based videosink</description>
+      <author>Julien Moutte &lt;julien@moutte.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/inspect/plugin-xvimagesink.xml b/docs/plugins/inspect/plugin-xvimagesink.xml
new file mode 100644
index 0000000..a72b6a9
--- /dev/null
+++ b/docs/plugins/inspect/plugin-xvimagesink.xml
@@ -0,0 +1,28 @@
+<plugin>
+  <name>xvimagesink</name>
+  <description>XFree86 video output plugin using Xv extension</description>
+  <filename>../../sys/xvimage/.libs/libgstxvimagesink.so</filename>
+  <basename>libgstxvimagesink.so</basename>
+  <version>0.10.35.1</version>
+  <license>LGPL</license>
+  <source>gst-plugins-base</source>
+  <package>GStreamer Base Plug-ins git</package>
+  <origin>Unknown package origin</origin>
+  <elements>
+    <element>
+      <name>xvimagesink</name>
+      <longname>Video sink</longname>
+      <class>Sink/Video</class>
+      <description>A Xv based videosink</description>
+      <author>Julien Moutte &lt;julien@moutte.net&gt;</author>
+      <pads>
+        <caps>
+          <name>sink</name>
+          <direction>sink</direction>
+          <presence>always</presence>
+          <details>video/x-raw-rgb, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+        </caps>
+      </pads>
+    </element>
+  </elements>
+</plugin>
diff --git a/docs/plugins/scanobj-build.stamp b/docs/plugins/scanobj-build.stamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/plugins/scanobj-build.stamp
diff --git a/docs/version.entities.in b/docs/version.entities.in
new file mode 100644
index 0000000..79a6898
--- /dev/null
+++ b/docs/version.entities.in
@@ -0,0 +1,2 @@
+<!ENTITY GST_MAJORMINOR "@GST_MAJORMINOR@">
+<!ENTITY GST_VERSION "@VERSION@">
diff --git a/ext/Makefile.am b/ext/Makefile.am
new file mode 100644
index 0000000..f793d4b
--- /dev/null
+++ b/ext/Makefile.am
@@ -0,0 +1,77 @@
+if USE_ALSA
+ALSA_DIR=alsa
+else
+ALSA_DIR=
+endif
+
+if USE_CDPARANOIA
+CDPARANOIA_DIR=cdparanoia
+else
+CDPARANOIA_DIR=
+endif
+
+if USE_GIO
+GIO_DIR=gio
+else
+GIO_DIR=
+endif
+
+if USE_LIBVISUAL
+LIBVISUAL_DIR=libvisual
+else
+LIBVISUAL_DIR=
+endif
+
+if USE_OGG
+OGG_DIR=ogg
+else
+OGG_DIR=
+endif
+
+if USE_PANGO
+PANGO_DIR = pango
+else
+PANGO_DIR =
+endif
+
+if USE_VORBIS
+VORBIS_DIR=vorbis
+endif
+
+if USE_IVORBIS
+VORBIS_DIR=vorbis
+endif
+
+if !USE_VORBIS
+if !USE_IVORBIS
+VORBIS_DIR=
+endif
+endif
+
+if USE_THEORA
+THEORA_DIR=theora
+else
+THEORA_DIR=
+endif
+
+SUBDIRS = \
+  $(ALSA_DIR) \
+  $(CDPARANOIA_DIR) \
+  $(GIO_DIR) \
+  $(LIBVISUAL_DIR) \
+  $(OGG_DIR) \
+  $(PANGO_DIR) \
+  $(THEORA_DIR) \
+  $(VORBIS_DIR)
+
+DIST_SUBDIRS = \
+  alsa \
+  cdparanoia \
+  gio \
+  libvisual \
+  ogg \
+  pango \
+  theora \
+  vorbis
+
+include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/ext/Makefile.in b/ext/Makefile.in
new file mode 100644
index 0000000..bc731d5
--- /dev/null
+++ b/ext/Makefile.in
@@ -0,0 +1,809 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# include this at the end of $MODULE/ext/Makefile.am to force make to
+# build subdirectories in parallel when make -jN is used. We will end up
+# descending into all subdirectories a second time, but only after the first
+# (parallel) run has finished, so it should go right through the second time.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
+subdir = ext
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_ALSA_FALSE@ALSA_DIR = 
+@USE_ALSA_TRUE@ALSA_DIR = alsa
+@USE_CDPARANOIA_FALSE@CDPARANOIA_DIR = 
+@USE_CDPARANOIA_TRUE@CDPARANOIA_DIR = cdparanoia
+@USE_GIO_FALSE@GIO_DIR = 
+@USE_GIO_TRUE@GIO_DIR = gio
+@USE_LIBVISUAL_FALSE@LIBVISUAL_DIR = 
+@USE_LIBVISUAL_TRUE@LIBVISUAL_DIR = libvisual
+@USE_OGG_FALSE@OGG_DIR = 
+@USE_OGG_TRUE@OGG_DIR = ogg
+@USE_PANGO_FALSE@PANGO_DIR = 
+@USE_PANGO_TRUE@PANGO_DIR = pango
+@USE_IVORBIS_FALSE@@USE_VORBIS_FALSE@VORBIS_DIR = 
+@USE_IVORBIS_TRUE@VORBIS_DIR = vorbis
+@USE_VORBIS_TRUE@VORBIS_DIR = vorbis
+@USE_THEORA_FALSE@THEORA_DIR = 
+@USE_THEORA_TRUE@THEORA_DIR = theora
+SUBDIRS = \
+  $(ALSA_DIR) \
+  $(CDPARANOIA_DIR) \
+  $(GIO_DIR) \
+  $(LIBVISUAL_DIR) \
+  $(OGG_DIR) \
+  $(PANGO_DIR) \
+  $(THEORA_DIR) \
+  $(VORBIS_DIR)
+
+DIST_SUBDIRS = \
+  alsa \
+  cdparanoia \
+  gio \
+  libvisual \
+  ogg \
+  pango \
+  theora \
+  vorbis
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+.PHONY: independent-subdirs $(SUBDIRS)
+
+independent-subdirs: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/alsa/Makefile.am b/ext/alsa/Makefile.am
new file mode 100644
index 0000000..38cde48
--- /dev/null
+++ b/ext/alsa/Makefile.am
@@ -0,0 +1,36 @@
+plugin_LTLIBRARIES = libgstalsa.la
+
+libgstalsa_la_SOURCES = \
+	gstalsadeviceprobe.c \
+	gstalsamixer.c	\
+	gstalsamixerelement.c \
+	gstalsamixertrack.c \
+	gstalsamixeroptions.c \
+	gstalsaplugin.c \
+	gstalsasink.c 	\
+	gstalsasrc.c \
+	gstalsa.c
+
+libgstalsa_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ALSA_CFLAGS)
+libgstalsa_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la 	\
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(ALSA_LIBS)
+
+libgstalsa_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstalsa_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	gstalsa.h \
+	gstalsadeviceprobe.h \
+	gstalsamixer.h \
+	gstalsamixerelement.h \
+	gstalsamixertrack.h \
+	gstalsamixeroptions.h \
+	gstalsasrc.h \
+	gstalsasink.h
diff --git a/ext/alsa/Makefile.in b/ext/alsa/Makefile.in
new file mode 100644
index 0000000..794c763
--- /dev/null
+++ b/ext/alsa/Makefile.in
@@ -0,0 +1,863 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/alsa
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstalsa_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstalsa_la_OBJECTS = libgstalsa_la-gstalsadeviceprobe.lo \
+	libgstalsa_la-gstalsamixer.lo \
+	libgstalsa_la-gstalsamixerelement.lo \
+	libgstalsa_la-gstalsamixertrack.lo \
+	libgstalsa_la-gstalsamixeroptions.lo \
+	libgstalsa_la-gstalsaplugin.lo libgstalsa_la-gstalsasink.lo \
+	libgstalsa_la-gstalsasrc.lo libgstalsa_la-gstalsa.lo
+libgstalsa_la_OBJECTS = $(am_libgstalsa_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstalsa_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstalsa_la_CFLAGS) $(CFLAGS) \
+	$(libgstalsa_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstalsa_la_SOURCES)
+DIST_SOURCES = $(libgstalsa_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstalsa.la
+libgstalsa_la_SOURCES = \
+	gstalsadeviceprobe.c \
+	gstalsamixer.c	\
+	gstalsamixerelement.c \
+	gstalsamixertrack.c \
+	gstalsamixeroptions.c \
+	gstalsaplugin.c \
+	gstalsasink.c 	\
+	gstalsasrc.c \
+	gstalsa.c
+
+libgstalsa_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ALSA_CFLAGS)
+
+libgstalsa_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la 	\
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(ALSA_LIBS)
+
+libgstalsa_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstalsa_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstalsa.h \
+	gstalsadeviceprobe.h \
+	gstalsamixer.h \
+	gstalsamixerelement.h \
+	gstalsamixertrack.h \
+	gstalsamixeroptions.h \
+	gstalsasrc.h \
+	gstalsasink.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/alsa/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/alsa/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstalsa.la: $(libgstalsa_la_OBJECTS) $(libgstalsa_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstalsa_la_LINK) -rpath $(plugindir) $(libgstalsa_la_OBJECTS) $(libgstalsa_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsadeviceprobe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsamixer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsamixerelement.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsamixeroptions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsamixertrack.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsaplugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsasink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsasrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstalsa_la-gstalsadeviceprobe.lo: gstalsadeviceprobe.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsadeviceprobe.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsadeviceprobe.Tpo -c -o libgstalsa_la-gstalsadeviceprobe.lo `test -f 'gstalsadeviceprobe.c' || echo '$(srcdir)/'`gstalsadeviceprobe.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsadeviceprobe.Tpo $(DEPDIR)/libgstalsa_la-gstalsadeviceprobe.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsadeviceprobe.c' object='libgstalsa_la-gstalsadeviceprobe.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsadeviceprobe.lo `test -f 'gstalsadeviceprobe.c' || echo '$(srcdir)/'`gstalsadeviceprobe.c
+
+libgstalsa_la-gstalsamixer.lo: gstalsamixer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsamixer.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsamixer.Tpo -c -o libgstalsa_la-gstalsamixer.lo `test -f 'gstalsamixer.c' || echo '$(srcdir)/'`gstalsamixer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsamixer.Tpo $(DEPDIR)/libgstalsa_la-gstalsamixer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsamixer.c' object='libgstalsa_la-gstalsamixer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsamixer.lo `test -f 'gstalsamixer.c' || echo '$(srcdir)/'`gstalsamixer.c
+
+libgstalsa_la-gstalsamixerelement.lo: gstalsamixerelement.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsamixerelement.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsamixerelement.Tpo -c -o libgstalsa_la-gstalsamixerelement.lo `test -f 'gstalsamixerelement.c' || echo '$(srcdir)/'`gstalsamixerelement.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsamixerelement.Tpo $(DEPDIR)/libgstalsa_la-gstalsamixerelement.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsamixerelement.c' object='libgstalsa_la-gstalsamixerelement.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsamixerelement.lo `test -f 'gstalsamixerelement.c' || echo '$(srcdir)/'`gstalsamixerelement.c
+
+libgstalsa_la-gstalsamixertrack.lo: gstalsamixertrack.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsamixertrack.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsamixertrack.Tpo -c -o libgstalsa_la-gstalsamixertrack.lo `test -f 'gstalsamixertrack.c' || echo '$(srcdir)/'`gstalsamixertrack.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsamixertrack.Tpo $(DEPDIR)/libgstalsa_la-gstalsamixertrack.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsamixertrack.c' object='libgstalsa_la-gstalsamixertrack.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsamixertrack.lo `test -f 'gstalsamixertrack.c' || echo '$(srcdir)/'`gstalsamixertrack.c
+
+libgstalsa_la-gstalsamixeroptions.lo: gstalsamixeroptions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsamixeroptions.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsamixeroptions.Tpo -c -o libgstalsa_la-gstalsamixeroptions.lo `test -f 'gstalsamixeroptions.c' || echo '$(srcdir)/'`gstalsamixeroptions.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsamixeroptions.Tpo $(DEPDIR)/libgstalsa_la-gstalsamixeroptions.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsamixeroptions.c' object='libgstalsa_la-gstalsamixeroptions.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsamixeroptions.lo `test -f 'gstalsamixeroptions.c' || echo '$(srcdir)/'`gstalsamixeroptions.c
+
+libgstalsa_la-gstalsaplugin.lo: gstalsaplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsaplugin.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsaplugin.Tpo -c -o libgstalsa_la-gstalsaplugin.lo `test -f 'gstalsaplugin.c' || echo '$(srcdir)/'`gstalsaplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsaplugin.Tpo $(DEPDIR)/libgstalsa_la-gstalsaplugin.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsaplugin.c' object='libgstalsa_la-gstalsaplugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsaplugin.lo `test -f 'gstalsaplugin.c' || echo '$(srcdir)/'`gstalsaplugin.c
+
+libgstalsa_la-gstalsasink.lo: gstalsasink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsasink.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsasink.Tpo -c -o libgstalsa_la-gstalsasink.lo `test -f 'gstalsasink.c' || echo '$(srcdir)/'`gstalsasink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsasink.Tpo $(DEPDIR)/libgstalsa_la-gstalsasink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsasink.c' object='libgstalsa_la-gstalsasink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsasink.lo `test -f 'gstalsasink.c' || echo '$(srcdir)/'`gstalsasink.c
+
+libgstalsa_la-gstalsasrc.lo: gstalsasrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsasrc.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsasrc.Tpo -c -o libgstalsa_la-gstalsasrc.lo `test -f 'gstalsasrc.c' || echo '$(srcdir)/'`gstalsasrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsasrc.Tpo $(DEPDIR)/libgstalsa_la-gstalsasrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsasrc.c' object='libgstalsa_la-gstalsasrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsasrc.lo `test -f 'gstalsasrc.c' || echo '$(srcdir)/'`gstalsasrc.c
+
+libgstalsa_la-gstalsa.lo: gstalsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsa.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsa.Tpo -c -o libgstalsa_la-gstalsa.lo `test -f 'gstalsa.c' || echo '$(srcdir)/'`gstalsa.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsa.Tpo $(DEPDIR)/libgstalsa_la-gstalsa.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstalsa.c' object='libgstalsa_la-gstalsa.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsa.lo `test -f 'gstalsa.c' || echo '$(srcdir)/'`gstalsa.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c
new file mode 100644
index 0000000..60f3f3e
--- /dev/null
+++ b/ext/alsa/gstalsa.c
@@ -0,0 +1,578 @@
+/* Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "gstalsa.h"
+
+#include <gst/audio/audio.h>
+
+static GstCaps *
+gst_alsa_detect_rates (GstObject * obj, snd_pcm_hw_params_t * hw_params,
+    GstCaps * in_caps)
+{
+  GstCaps *caps;
+  guint min, max;
+  gint err, dir, min_rate, max_rate, i;
+
+  GST_LOG_OBJECT (obj, "probing sample rates ...");
+
+  if ((err = snd_pcm_hw_params_get_rate_min (hw_params, &min, &dir)) < 0)
+    goto min_rate_err;
+
+  if ((err = snd_pcm_hw_params_get_rate_max (hw_params, &max, &dir)) < 0)
+    goto max_rate_err;
+
+  min_rate = min;
+  max_rate = max;
+
+  if (min_rate < 4000)
+    min_rate = 4000;            /* random 'sensible minimum' */
+
+  if (max_rate <= 0)
+    max_rate = G_MAXINT;        /* or maybe just use 192400 or so? */
+  else if (max_rate > 0 && max_rate < 4000)
+    max_rate = MAX (4000, min_rate);
+
+  GST_DEBUG_OBJECT (obj, "Min. rate = %u (%d)", min_rate, min);
+  GST_DEBUG_OBJECT (obj, "Max. rate = %u (%d)", max_rate, max);
+
+  caps = gst_caps_make_writable (in_caps);
+
+  for (i = 0; i < gst_caps_get_size (caps); ++i) {
+    GstStructure *s;
+
+    s = gst_caps_get_structure (caps, i);
+    if (min_rate == max_rate) {
+      gst_structure_set (s, "rate", G_TYPE_INT, min_rate, NULL);
+    } else {
+      gst_structure_set (s, "rate", GST_TYPE_INT_RANGE,
+          min_rate, max_rate, NULL);
+    }
+  }
+
+  return caps;
+
+  /* ERRORS */
+min_rate_err:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query minimum sample rate: %s",
+        snd_strerror (err));
+    gst_caps_unref (in_caps);
+    return NULL;
+  }
+max_rate_err:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query maximum sample rate: %s",
+        snd_strerror (err));
+    gst_caps_unref (in_caps);
+    return NULL;
+  }
+}
+
+static const struct
+{
+  const int width;
+  const int depth;
+  const int sformat;
+  const int uformat;
+} pcmformats[] = {
+  {
+  8, 8, SND_PCM_FORMAT_S8, SND_PCM_FORMAT_U8}, {
+  16, 16, SND_PCM_FORMAT_S16, SND_PCM_FORMAT_U16}, {
+  32, 24, SND_PCM_FORMAT_S24, SND_PCM_FORMAT_U24}, {
+#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)   /* no endian-unspecific enum available */
+  24, 24, SND_PCM_FORMAT_S24_3LE, SND_PCM_FORMAT_U24_3LE}, {
+#else
+  24, 24, SND_PCM_FORMAT_S24_3BE, SND_PCM_FORMAT_U24_3BE}, {
+#endif
+  32, 32, SND_PCM_FORMAT_S32, SND_PCM_FORMAT_U32}
+};
+
+static GstCaps *
+gst_alsa_detect_formats (GstObject * obj, snd_pcm_hw_params_t * hw_params,
+    GstCaps * in_caps)
+{
+  snd_pcm_format_mask_t *mask;
+  GstStructure *s;
+  GstCaps *caps;
+  gint i;
+
+  snd_pcm_format_mask_malloc (&mask);
+  snd_pcm_hw_params_get_format_mask (hw_params, mask);
+
+  caps = gst_caps_new_empty ();
+
+  for (i = 0; i < gst_caps_get_size (in_caps); ++i) {
+    GstStructure *scopy;
+    const gchar *str;
+    GstAudioFormat format;
+    const GstAudioFormatInfo *finfo;
+    gint w, width = 0, depth = 0;
+
+    s = gst_caps_get_structure (in_caps, i);
+    if (!gst_structure_has_name (s, "audio/x-raw")) {
+      GST_WARNING_OBJECT (obj, "skipping non-raw format");
+      continue;
+    }
+
+    str = gst_structure_get_string (s, "format");
+    if (str == NULL)
+      continue;
+
+    format = gst_audio_format_from_string (str);
+    if (format == GST_AUDIO_FORMAT_UNKNOWN)
+      continue;
+
+    finfo = gst_audio_format_get_info (format);
+
+    width = GST_AUDIO_FORMAT_INFO_WIDTH (finfo);
+    depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
+
+    for (w = 0; w < G_N_ELEMENTS (pcmformats); w++)
+      if (pcmformats[w].width == width && pcmformats[w].depth == depth)
+        break;
+    if (w == G_N_ELEMENTS (pcmformats))
+      continue;                 /* Unknown format */
+
+    if (snd_pcm_format_mask_test (mask, pcmformats[w].sformat) &&
+        snd_pcm_format_mask_test (mask, pcmformats[w].uformat)) {
+      scopy = gst_structure_copy (s);
+    } else if (snd_pcm_format_mask_test (mask, pcmformats[w].sformat)) {
+      scopy = gst_structure_copy (s);
+      /* FIXME, remove unsigned version */
+    } else if (snd_pcm_format_mask_test (mask, pcmformats[w].uformat)) {
+      scopy = gst_structure_copy (s);
+      /* FIXME, remove signed version */
+    } else {
+      scopy = NULL;
+    }
+    if (scopy) {
+      gst_caps_append_structure (caps, scopy);
+    }
+  }
+
+  snd_pcm_format_mask_free (mask);
+  gst_caps_unref (in_caps);
+  return caps;
+}
+
+/* we don't have channel mappings for more than this many channels */
+#define GST_ALSA_MAX_CHANNELS 8
+
+static GstStructure *
+get_channel_free_structure (const GstStructure * in_structure)
+{
+  GstStructure *s = gst_structure_copy (in_structure);
+
+  gst_structure_remove_field (s, "channels");
+  return s;
+}
+
+static void
+caps_add_channel_configuration (GstCaps * caps,
+    const GstStructure * in_structure, gint min_chans, gint max_chans)
+{
+  GstAudioChannelPosition pos[8] = {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+    GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+    GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+    GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+    GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+    GST_AUDIO_CHANNEL_POSITION_LFE,
+    GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+    GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT
+  };
+  GstStructure *s = NULL;
+  gint c;
+
+  if (min_chans == max_chans && max_chans <= 2) {
+    s = get_channel_free_structure (in_structure);
+    gst_structure_set (s, "channels", G_TYPE_INT, max_chans, NULL);
+    gst_caps_append_structure (caps, s);
+    return;
+  }
+
+  g_assert (min_chans >= 1);
+
+  /* mono and stereo don't need channel configurations */
+  if (min_chans == 2) {
+    s = get_channel_free_structure (in_structure);
+    gst_structure_set (s, "channels", G_TYPE_INT, 2, NULL);
+    gst_caps_append_structure (caps, s);
+  } else if (min_chans == 1 && max_chans >= 2) {
+    s = get_channel_free_structure (in_structure);
+    gst_structure_set (s, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+    gst_caps_append_structure (caps, s);
+  }
+
+  /* don't know whether to use 2.1 or 3.0 here - but I suspect
+   * alsa might work around that/fix it somehow. Can we tell alsa
+   * what our channel layout is like? */
+  if (max_chans >= 3 && min_chans <= 3) {
+    GstAudioChannelPosition pos_21[3] = {
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE
+    };
+
+    s = get_channel_free_structure (in_structure);
+    gst_structure_set (s, "channels", G_TYPE_INT, 3, NULL);
+    gst_audio_set_channel_positions (s, pos_21);
+    gst_caps_append_structure (caps, s);
+  }
+
+  /* everything else (4, 6, 8 channels) needs a channel layout */
+  for (c = MAX (4, min_chans); c <= 8; c += 2) {
+    if (max_chans >= c) {
+      s = get_channel_free_structure (in_structure);
+      gst_structure_set (s, "channels", G_TYPE_INT, c, NULL);
+      gst_audio_set_channel_positions (s, pos);
+      gst_caps_append_structure (caps, s);
+    }
+  }
+
+  for (c = MAX (9, min_chans); c <= max_chans; ++c) {
+    GstAudioChannelPosition *ch_layout;
+    guint i;
+
+    ch_layout = g_new (GstAudioChannelPosition, c);
+    for (i = 0; i < c; ++i) {
+      ch_layout[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
+    }
+    s = get_channel_free_structure (in_structure);
+    gst_structure_set (s, "channels", G_TYPE_INT, c, NULL);
+    gst_audio_set_channel_positions (s, ch_layout);
+    gst_caps_append_structure (caps, s);
+    g_free (ch_layout);
+  }
+}
+
+static GstCaps *
+gst_alsa_detect_channels (GstObject * obj, snd_pcm_hw_params_t * hw_params,
+    GstCaps * in_caps)
+{
+  GstCaps *caps;
+  guint min, max;
+  gint min_chans, max_chans;
+  gint err, i;
+
+  GST_LOG_OBJECT (obj, "probing channels ...");
+
+  if ((err = snd_pcm_hw_params_get_channels_min (hw_params, &min)) < 0)
+    goto min_chan_error;
+
+  if ((err = snd_pcm_hw_params_get_channels_max (hw_params, &max)) < 0)
+    goto max_chan_error;
+
+  /* note: the above functions may return (guint) -1 */
+  min_chans = min;
+  max_chans = max;
+
+  if (min_chans < 0) {
+    min_chans = 1;
+    max_chans = GST_ALSA_MAX_CHANNELS;
+  } else if (max_chans < 0) {
+    max_chans = GST_ALSA_MAX_CHANNELS;
+  }
+
+  if (min_chans > max_chans) {
+    gint temp;
+
+    GST_WARNING_OBJECT (obj, "minimum channels > maximum channels (%d > %d), "
+        "please fix your soundcard drivers", min, max);
+    temp = min_chans;
+    min_chans = max_chans;
+    max_chans = temp;
+  }
+
+  /* pro cards seem to return large numbers for min_channels */
+  if (min_chans > GST_ALSA_MAX_CHANNELS) {
+    GST_DEBUG_OBJECT (obj, "min_chans = %u, looks like a pro card", min_chans);
+    if (max_chans < min_chans) {
+      max_chans = min_chans;
+    } else {
+      /* only support [max_chans; max_chans] for these cards for now
+       * to avoid inflating the source caps with loads of structures ... */
+      min_chans = max_chans;
+    }
+  } else {
+    min_chans = MAX (min_chans, 1);
+    max_chans = MIN (GST_ALSA_MAX_CHANNELS, max_chans);
+  }
+
+  GST_DEBUG_OBJECT (obj, "Min. channels = %d (%d)", min_chans, min);
+  GST_DEBUG_OBJECT (obj, "Max. channels = %d (%d)", max_chans, max);
+
+  caps = gst_caps_new_empty ();
+
+  for (i = 0; i < gst_caps_get_size (in_caps); ++i) {
+    GstStructure *s;
+    GType field_type;
+    gint c_min = min_chans;
+    gint c_max = max_chans;
+
+    s = gst_caps_get_structure (in_caps, i);
+    /* the template caps might limit the number of channels (like alsasrc),
+     * in which case we don't want to return a superset, so hack around this
+     * for the two common cases where the channels are either a fixed number
+     * or a min/max range). Example: alsasrc template has channels = [1,2] and 
+     * the detection will claim to support 8 channels for device 'plughw:0' */
+    field_type = gst_structure_get_field_type (s, "channels");
+    if (field_type == G_TYPE_INT) {
+      gst_structure_get_int (s, "channels", &c_min);
+      gst_structure_get_int (s, "channels", &c_max);
+    } else if (field_type == GST_TYPE_INT_RANGE) {
+      const GValue *val;
+
+      val = gst_structure_get_value (s, "channels");
+      c_min = CLAMP (gst_value_get_int_range_min (val), min_chans, max_chans);
+      c_max = CLAMP (gst_value_get_int_range_max (val), min_chans, max_chans);
+    } else {
+      c_min = min_chans;
+      c_max = max_chans;
+    }
+
+    caps_add_channel_configuration (caps, s, c_min, c_max);
+  }
+
+  gst_caps_unref (in_caps);
+
+  return caps;
+
+  /* ERRORS */
+min_chan_error:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query minimum channel count: %s",
+        snd_strerror (err));
+    return NULL;
+  }
+max_chan_error:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query maximum channel count: %s",
+        snd_strerror (err));
+    return NULL;
+  }
+}
+
+snd_pcm_t *
+gst_alsa_open_iec958_pcm (GstObject * obj)
+{
+  char *iec958_pcm_name = NULL;
+  snd_pcm_t *pcm = NULL;
+  int res;
+  char devstr[256];             /* Storage for local 'default' device string */
+
+  /*
+   * Try and open our default iec958 device. Fall back to searching on card x
+   * if this fails, which should only happen on older alsa setups
+   */
+
+  /* The string will be one of these:
+   * SPDIF_CON: Non-audio flag not set:
+   *    spdif:{AES0 0x0 AES1 0x82 AES2 0x0 AES3 0x2}
+   * SPDIF_CON: Non-audio flag set:
+   *    spdif:{AES0 0x2 AES1 0x82 AES2 0x0 AES3 0x2}
+   */
+  sprintf (devstr,
+      "iec958:{AES0 0x%02x AES1 0x%02x AES2 0x%02x AES3 0x%02x}",
+      IEC958_AES0_CON_EMPHASIS_NONE | IEC958_AES0_NONAUDIO,
+      IEC958_AES1_CON_ORIGINAL | IEC958_AES1_CON_PCM_CODER,
+      0, IEC958_AES3_CON_FS_48000);
+
+  GST_DEBUG_OBJECT (obj, "Generated device string \"%s\"", devstr);
+  iec958_pcm_name = devstr;
+
+  res = snd_pcm_open (&pcm, iec958_pcm_name, SND_PCM_STREAM_PLAYBACK, 0);
+  if (G_UNLIKELY (res < 0)) {
+    GST_DEBUG_OBJECT (obj, "failed opening IEC958 device: %s",
+        snd_strerror (res));
+    pcm = NULL;
+  }
+
+  return pcm;
+}
+
+
+/*
+ * gst_alsa_probe_supported_formats:
+ *
+ * Takes the template caps and returns the subset which is actually
+ * supported by this device.
+ *
+ */
+
+GstCaps *
+gst_alsa_probe_supported_formats (GstObject * obj, snd_pcm_t * handle,
+    const GstCaps * template_caps)
+{
+  snd_pcm_hw_params_t *hw_params;
+  snd_pcm_stream_t stream_type;
+  GstCaps *caps;
+  gint err;
+
+  snd_pcm_hw_params_malloc (&hw_params);
+  if ((err = snd_pcm_hw_params_any (handle, hw_params)) < 0)
+    goto error;
+
+  stream_type = snd_pcm_stream (handle);
+
+  caps = gst_caps_copy (template_caps);
+
+  if (!(caps = gst_alsa_detect_formats (obj, hw_params, caps)))
+    goto subroutine_error;
+
+  if (!(caps = gst_alsa_detect_rates (obj, hw_params, caps)))
+    goto subroutine_error;
+
+  if (!(caps = gst_alsa_detect_channels (obj, hw_params, caps)))
+    goto subroutine_error;
+
+  /* Try opening IEC958 device to see if we can support that format (playback
+   * only for now but we could add SPDIF capture later) */
+  if (stream_type == SND_PCM_STREAM_PLAYBACK) {
+    snd_pcm_t *pcm = gst_alsa_open_iec958_pcm (obj);
+
+    if (G_LIKELY (pcm)) {
+      gst_caps_append (caps, gst_caps_new_simple ("audio/x-iec958", NULL));
+      snd_pcm_close (pcm);
+    }
+  }
+
+  snd_pcm_hw_params_free (hw_params);
+  return caps;
+
+  /* ERRORS */
+error:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query formats: %s", snd_strerror (err));
+    snd_pcm_hw_params_free (hw_params);
+    return NULL;
+  }
+subroutine_error:
+  {
+    GST_ERROR_OBJECT (obj, "failed to query formats");
+    snd_pcm_hw_params_free (hw_params);
+    return NULL;
+  }
+}
+
+/* returns the card name when the device number is unknown or -1 */
+static gchar *
+gst_alsa_find_device_name_no_handle (GstObject * obj, const gchar * devcard,
+    gint device_num, snd_pcm_stream_t stream)
+{
+  snd_ctl_card_info_t *info = NULL;
+  snd_ctl_t *ctl = NULL;
+  gchar *ret = NULL;
+  gint dev = -1;
+
+  GST_LOG_OBJECT (obj, "[%s] device=%d", devcard, device_num);
+
+  if (snd_ctl_open (&ctl, devcard, 0) < 0)
+    return NULL;
+
+  snd_ctl_card_info_malloc (&info);
+  if (snd_ctl_card_info (ctl, info) < 0)
+    goto done;
+
+  if (device_num != -1) {
+    while (snd_ctl_pcm_next_device (ctl, &dev) == 0 && dev >= 0) {
+      if (dev == device_num) {
+        snd_pcm_info_t *pcminfo;
+
+        snd_pcm_info_malloc (&pcminfo);
+        snd_pcm_info_set_device (pcminfo, dev);
+        snd_pcm_info_set_subdevice (pcminfo, 0);
+        snd_pcm_info_set_stream (pcminfo, stream);
+        if (snd_ctl_pcm_info (ctl, pcminfo) < 0) {
+          snd_pcm_info_free (pcminfo);
+          break;
+        }
+
+        ret = (gchar *) snd_pcm_info_get_name (pcminfo);
+        if (ret) {
+          ret = g_strdup (ret);
+          GST_LOG_OBJECT (obj, "name from pcminfo: %s", ret);
+        }
+        snd_pcm_info_free (pcminfo);
+        if (ret)
+          break;
+      }
+    }
+  }
+
+  if (ret == NULL) {
+    char *name = NULL;
+    gint card;
+
+    GST_LOG_OBJECT (obj, "trying card name");
+    card = snd_ctl_card_info_get_card (info);
+    snd_card_get_name (card, &name);
+    ret = g_strdup (name);
+    free (name);
+  }
+
+done:
+  snd_ctl_card_info_free (info);
+  snd_ctl_close (ctl);
+
+  return ret;
+}
+
+gchar *
+gst_alsa_find_card_name (GstObject * obj, const gchar * devcard,
+    snd_pcm_stream_t stream)
+{
+  return gst_alsa_find_device_name_no_handle (obj, devcard, -1, stream);
+}
+
+gchar *
+gst_alsa_find_device_name (GstObject * obj, const gchar * device,
+    snd_pcm_t * handle, snd_pcm_stream_t stream)
+{
+  gchar *ret = NULL;
+
+  if (device != NULL) {
+    gchar *dev, *comma;
+    gint devnum;
+
+    GST_LOG_OBJECT (obj, "Trying to get device name from string '%s'", device);
+
+    /* only want name:card bit, but not devices and subdevices */
+    dev = g_strdup (device);
+    if ((comma = strchr (dev, ','))) {
+      *comma = '\0';
+      devnum = atoi (comma + 1);
+      ret = gst_alsa_find_device_name_no_handle (obj, dev, devnum, stream);
+    }
+    g_free (dev);
+  }
+
+  if (ret == NULL && handle != NULL) {
+    snd_pcm_info_t *info;
+
+    GST_LOG_OBJECT (obj, "Trying to get device name from open handle");
+    snd_pcm_info_malloc (&info);
+    snd_pcm_info (handle, info);
+    ret = g_strdup (snd_pcm_info_get_name (info));
+    snd_pcm_info_free (info);
+  }
+
+  GST_LOG_OBJECT (obj, "Device name for device '%s': %s",
+      GST_STR_NULL (device), GST_STR_NULL (ret));
+
+  return ret;
+}
diff --git a/ext/alsa/gstalsa.h b/ext/alsa/gstalsa.h
new file mode 100644
index 0000000..92466d2
--- /dev/null
+++ b/ext/alsa/gstalsa.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2001 CodeFactory AB
+ * Copyright (C) 2001 Thomas Nyberg <thomas@codefactory.se>
+ * Copyright (C) 2001-2002 Andy Wingo <apwingo@eos.ncsu.edu>
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GST_ALSA_H__
+#define __GST_ALSA_H__
+
+
+#define ALSA_PCM_NEW_HW_PARAMS_API
+#define ALSA_PCM_NEW_SW_PARAMS_API
+
+#include <alsa/asoundlib.h>
+#include <alsa/control.h>
+#include <alsa/error.h>
+#include <gst/gst.h>
+
+#define GST_CHECK_ALSA_VERSION(major,minor,micro) \
+    (SND_LIB_MAJOR > (major) || \
+     (SND_LIB_MAJOR == (major) && SND_LIB_MINOR > (minor)) || \
+     (SND_LIB_MAJOR == (major) && SND_LIB_MINOR == (minor) && \
+      SND_LIB_SUBMINOR >= (micro)))
+
+GST_DEBUG_CATEGORY_EXTERN (alsa_debug);
+#define GST_CAT_DEFAULT alsa_debug
+
+snd_pcm_t * gst_alsa_open_iec958_pcm (GstObject * obj);
+
+GstCaps * gst_alsa_probe_supported_formats (GstObject      * obj,
+                                            snd_pcm_t      * handle,
+                                            const GstCaps  * template_caps);
+
+gchar   * gst_alsa_find_device_name (GstObject        * obj,
+                                     const gchar      * device,
+                                     snd_pcm_t        * handle,
+                                     snd_pcm_stream_t   stream);
+
+gchar *   gst_alsa_find_card_name   (GstObject        * obj,
+                                     const gchar      * devcard,
+                                     snd_pcm_stream_t   stream);
+
+
+#endif /* __GST_ALSA_H__ */
diff --git a/ext/alsa/gstalsadeviceprobe.c b/ext/alsa/gstalsadeviceprobe.c
new file mode 100644
index 0000000..97d5f5e
--- /dev/null
+++ b/ext/alsa/gstalsadeviceprobe.c
@@ -0,0 +1,210 @@
+/* Copyright (C) 2001 CodeFactory AB
+ * Copyright (C) 2001 Thomas Nyberg <thomas@codefactory.se>
+ * Copyright (C) 2001-2002 Andy Wingo <apwingo@eos.ncsu.edu>
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ * Copyright (C) 2005 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstalsadeviceprobe.h"
+#include "gst/interfaces/propertyprobe.h"
+
+G_LOCK_DEFINE_STATIC (probe_lock);
+
+static const GList *
+gst_alsa_device_property_probe_get_properties (GstPropertyProbe * probe)
+{
+  GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
+  static GList *list = NULL;
+
+  G_LOCK (probe_lock);
+
+  if (!list) {
+    GParamSpec *pspec;
+
+    pspec = g_object_class_find_property (klass, "device");
+    list = g_list_append (NULL, pspec);
+  }
+
+  G_UNLOCK (probe_lock);
+
+  return list;
+}
+
+static GList *
+gst_alsa_get_device_list (snd_pcm_stream_t stream)
+{
+  snd_ctl_t *handle;
+  int card, dev;
+  snd_ctl_card_info_t *info;
+  snd_pcm_info_t *pcminfo;
+  gboolean mixer = (stream == -1);
+  GList *list = NULL;
+
+  if (stream == -1)
+    stream = 0;
+
+  snd_ctl_card_info_malloc (&info);
+  snd_pcm_info_malloc (&pcminfo);
+  card = -1;
+
+  if (snd_card_next (&card) < 0 || card < 0) {
+    /* no soundcard found */
+    GST_WARNING ("No soundcard found");
+    goto beach;
+  }
+
+  while (card >= 0) {
+    gchar name[32];
+
+    g_snprintf (name, sizeof (name), "hw:%d", card);
+    if (snd_ctl_open (&handle, name, 0) < 0) {
+      goto next_card;
+    }
+    if (snd_ctl_card_info (handle, info) < 0) {
+      snd_ctl_close (handle);
+      goto next_card;
+    }
+
+    if (mixer) {
+      list = g_list_append (list, g_strdup (name));
+    } else {
+      dev = -1;
+      while (1) {
+        gchar *gst_device;
+
+        snd_ctl_pcm_next_device (handle, &dev);
+
+        if (dev < 0)
+          break;
+        snd_pcm_info_set_device (pcminfo, dev);
+        snd_pcm_info_set_subdevice (pcminfo, 0);
+        snd_pcm_info_set_stream (pcminfo, stream);
+        if (snd_ctl_pcm_info (handle, pcminfo) < 0) {
+          continue;
+        }
+
+        gst_device = g_strdup_printf ("hw:%d,%d", card, dev);
+        list = g_list_append (list, gst_device);
+      }
+    }
+    snd_ctl_close (handle);
+  next_card:
+    if (snd_card_next (&card) < 0) {
+      break;
+    }
+  }
+
+beach:
+  snd_ctl_card_info_free (info);
+  snd_pcm_info_free (pcminfo);
+
+  return list;
+}
+
+static void
+gst_alsa_device_property_probe_probe_property (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  if (!g_str_equal (pspec->name, "device")) {
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+  }
+}
+
+static gboolean
+gst_alsa_device_property_probe_needs_probe (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  /* don't cache probed data */
+  return TRUE;
+}
+
+static GValueArray *
+gst_alsa_device_property_probe_get_values (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  GstElementClass *klass;
+  const GList *templates;
+  snd_pcm_stream_t mode = -1;
+  GValueArray *array;
+  GValue value = { 0, };
+  GList *l, *list;
+
+  if (!g_str_equal (pspec->name, "device")) {
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+    return NULL;
+  }
+
+  klass = GST_ELEMENT_GET_CLASS (GST_ELEMENT (probe));
+
+  /* I'm pretty sure ALSA has a good way to do this. However, their cool
+   * auto-generated documentation is pretty much useless if you try to
+   * do function-wise look-ups. */
+  /* we assume one pad template at max [zero=mixer] */
+  templates = gst_element_class_get_pad_template_list (klass);
+  if (templates) {
+    if (GST_PAD_TEMPLATE_DIRECTION (templates->data) == GST_PAD_SRC)
+      mode = SND_PCM_STREAM_CAPTURE;
+    else
+      mode = SND_PCM_STREAM_PLAYBACK;
+  }
+
+  list = gst_alsa_get_device_list (mode);
+
+  if (list == NULL) {
+    GST_LOG_OBJECT (probe, "No devices found");
+    return NULL;
+  }
+
+  array = g_value_array_new (g_list_length (list));
+  g_value_init (&value, G_TYPE_STRING);
+  for (l = list; l != NULL; l = l->next) {
+    GST_LOG_OBJECT (probe, "Found device: %s", (gchar *) l->data);
+    g_value_take_string (&value, (gchar *) l->data);
+    l->data = NULL;
+    g_value_array_append (array, &value);
+  }
+  g_value_unset (&value);
+  g_list_free (list);
+
+  return array;
+}
+
+static void
+gst_alsa_property_probe_interface_init (GstPropertyProbeInterface * iface)
+{
+  iface->get_properties = gst_alsa_device_property_probe_get_properties;
+  iface->probe_property = gst_alsa_device_property_probe_probe_property;
+  iface->needs_probe = gst_alsa_device_property_probe_needs_probe;
+  iface->get_values = gst_alsa_device_property_probe_get_values;
+}
+
+void
+gst_alsa_type_add_device_property_probe_interface (GType type)
+{
+  static const GInterfaceInfo probe_iface_info = {
+    (GInterfaceInitFunc) gst_alsa_property_probe_interface_init,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_PROPERTY_PROBE,
+      &probe_iface_info);
+}
diff --git a/ext/alsa/gstalsadeviceprobe.h b/ext/alsa/gstalsadeviceprobe.h
new file mode 100644
index 0000000..b60b0fe
--- /dev/null
+++ b/ext/alsa/gstalsadeviceprobe.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2001 CodeFactory AB
+ * Copyright (C) 2001 Thomas Nyberg <thomas@codefactory.se>
+ * Copyright (C) 2001-2002 Andy Wingo <apwingo@eos.ncsu.edu>
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __GST_ALSA_DEVICE_PROBE_H__
+#define __GST_ALSA_DEVICE_PROBE_H__
+
+#include "gstalsa.h"
+
+G_BEGIN_DECLS
+
+void      gst_alsa_type_add_device_property_probe_interface (GType type);
+
+G_END_DECLS
+
+#endif /* __GST_ALSA_DEVICE_PROBE_H__ */
+
diff --git a/ext/alsa/gstalsamixer.c b/ext/alsa/gstalsamixer.c
new file mode 100644
index 0000000..b30a7bb
--- /dev/null
+++ b/ext/alsa/gstalsamixer.c
@@ -0,0 +1,957 @@
+/* ALSA mixer implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-alsamixer
+ * @see_also: alsasink, alsasrc
+ *
+ * This element controls various aspects such as the volume and balance
+ * of an audio device using the ALSA api.
+ *
+ * The application should query and use the interfaces provided by this 
+ * element to control the device.
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstalsamixer.h"
+#include <errno.h>
+
+static void gst_alsa_mixer_update_option (GstAlsaMixer * mixer,
+    GstAlsaMixerOptions * alsa_opts);
+static void gst_alsa_mixer_update_track (GstAlsaMixer * mixer,
+    GstAlsaMixerTrack * alsa_track);
+static int gst_alsa_mixer_handle_callback (snd_mixer_t * handle,
+    unsigned int mask, snd_mixer_elem_t * elem);
+
+/* First some utils, then the mixer implementation */
+static gboolean
+gst_alsa_mixer_open (GstAlsaMixer * mixer)
+{
+  gint err;
+  snd_ctl_t *ctl;
+  snd_ctl_card_info_t *card_info;
+
+  g_return_val_if_fail (mixer->handle == NULL, FALSE);
+
+  /* open and initialize the mixer device */
+  err = snd_mixer_open (&mixer->handle, 0);
+  if (err < 0 || mixer->handle == NULL)
+    goto open_failed;
+
+  if ((err = snd_mixer_attach (mixer->handle, mixer->device)) < 0) {
+    GST_WARNING ("Cannot open mixer for sound device '%s': %s", mixer->device,
+        snd_strerror (err));
+    goto error;
+  }
+
+  if ((err = snd_mixer_selem_register (mixer->handle, NULL, NULL)) < 0) {
+    GST_WARNING ("Cannot register mixer elements: %s", snd_strerror (err));
+    goto error;
+  }
+
+  if ((err = snd_mixer_load (mixer->handle)) < 0) {
+    GST_WARNING ("Cannot load mixer settings: %s", snd_strerror (err));
+    goto error;
+  }
+
+  snd_mixer_set_callback_private (mixer->handle, mixer);
+  snd_mixer_set_callback (mixer->handle, gst_alsa_mixer_handle_callback);
+
+  /* now get the device name, any of this is not fatal */
+  g_free (mixer->cardname);
+  if ((err = snd_ctl_open (&ctl, mixer->device, 0)) < 0) {
+    GST_WARNING ("Cannot open CTL: %s", snd_strerror (err));
+    goto no_card_name;
+  }
+
+  snd_ctl_card_info_malloc (&card_info);
+  if ((err = snd_ctl_card_info (ctl, card_info)) < 0) {
+    GST_WARNING ("Cannot get card info: %s", snd_strerror (err));
+    snd_ctl_close (ctl);
+    goto no_card_name;
+  }
+
+  mixer->cardname = g_strdup (snd_ctl_card_info_get_name (card_info));
+  GST_DEBUG ("Card name = %s", GST_STR_NULL (mixer->cardname));
+  snd_ctl_card_info_free (card_info);
+  snd_ctl_close (ctl);
+
+no_card_name:
+  if (mixer->cardname == NULL) {
+    mixer->cardname = g_strdup ("Unknown");
+    GST_DEBUG ("Cannot find card name");
+  }
+
+  GST_INFO ("Successfully opened mixer for device '%s'.", mixer->device);
+
+  return TRUE;
+
+  /* ERROR */
+open_failed:
+  {
+    GST_WARNING ("Cannot open mixer: %s", snd_strerror (err));
+    mixer->handle = NULL;
+    return FALSE;
+  }
+error:
+  {
+    snd_mixer_close (mixer->handle);
+    mixer->handle = NULL;
+    return FALSE;
+  }
+}
+
+static snd_mixer_elem_t *
+gst_alsa_mixer_find_master_mixer (GstAlsaMixer * mixer, snd_mixer_t * handle)
+{
+  snd_mixer_elem_t *element;
+  gint i, count;
+
+  count = snd_mixer_get_count (handle);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  /* Check if we have a playback mixer labelled as 'Master' */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        strcmp (snd_mixer_selem_get_name (element), "Master") == 0) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have a playback mixer labelled as 'Front' */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        strcmp (snd_mixer_selem_get_name (element), "Front") == 0) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have a playback mixer labelled as 'PCM' */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        strcmp (snd_mixer_selem_get_name (element), "PCM") == 0) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have a playback mixer labelled as 'Speaker' */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        strcmp (snd_mixer_selem_get_name (element), "Speaker") == 0) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have a playback mixer with both volume and switch that
+   * is not mono */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        snd_mixer_selem_has_playback_switch (element) &&
+        !snd_mixer_selem_is_playback_mono (element)) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, check if we have any playback mixer with both volume and switch */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element) &&
+        snd_mixer_selem_has_playback_switch (element)) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  /* If not, take any playback mixer with a volume control */
+  element = snd_mixer_first_elem (handle);
+  for (i = 0; i < count; i++) {
+    if (snd_mixer_selem_has_playback_volume (element)) {
+      g_static_rec_mutex_unlock (mixer->rec_mutex);
+      return element;
+    }
+    element = snd_mixer_elem_next (element);
+  }
+
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+  /* Looks like we're out of luck ... */
+  return NULL;
+}
+
+static void
+gst_alsa_mixer_update (GstAlsaMixer * mixer, snd_mixer_elem_t * elem)
+{
+  GList *item;
+
+  g_return_if_fail (mixer != NULL);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  for (item = mixer->tracklist; item != NULL; item = item->next) {
+    if (GST_IS_ALSA_MIXER_TRACK (item->data)) {
+      if (elem && (GST_ALSA_MIXER_TRACK (item->data)->element != elem))
+        continue;
+
+      gst_alsa_mixer_update_track (mixer, GST_ALSA_MIXER_TRACK (item->data));
+    } else if (GST_IS_ALSA_MIXER_OPTIONS (item->data)) {
+      if (elem && (GST_ALSA_MIXER_OPTIONS (item->data)->element != elem))
+        continue;
+
+      gst_alsa_mixer_update_option (mixer, GST_ALSA_MIXER_OPTIONS (item->data));
+    }
+  }
+
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+static int
+gst_alsa_mixer_elem_handle_callback (snd_mixer_elem_t * elem, unsigned int mask)
+{
+  GstAlsaMixer *mixer =
+      (GstAlsaMixer *) snd_mixer_elem_get_callback_private (elem);
+
+  GST_LOG ("ALSA elem cb");
+
+  g_return_val_if_fail (mixer != NULL, 1);
+
+  gst_alsa_mixer_update (mixer, elem);
+
+  return 0;
+}
+
+static int
+gst_alsa_mixer_handle_callback (snd_mixer_t * handle, unsigned int mask,
+    snd_mixer_elem_t * elem)
+{
+  GstAlsaMixer *mixer =
+      (GstAlsaMixer *) snd_mixer_get_callback_private (handle);
+
+  GST_LOG ("ALSA cb");
+
+  g_return_val_if_fail (mixer != NULL, 1);
+
+  /* Hopefully won't be call recursively and will handle pending elem events */
+  snd_mixer_handle_events (mixer->handle);
+
+  gst_alsa_mixer_update (mixer, elem);
+
+  return 0;
+}
+
+static void
+gst_alsa_mixer_ensure_track_list (GstAlsaMixer * mixer)
+{
+  gint i, count;
+  snd_mixer_elem_t *element, *master;
+  GList *item;
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  if (mixer->tracklist)
+    return;
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  master = gst_alsa_mixer_find_master_mixer (mixer, mixer->handle);
+
+  count = snd_mixer_get_count (mixer->handle);
+  element = snd_mixer_first_elem (mixer->handle);
+
+  /* build track list
+   *
+   * Some ALSA tracks may have playback and capture capabilities.
+   * Here we model them as two separate GStreamer tracks.
+   */
+
+  for (i = 0; i < count; i++) {
+    GstMixerTrack *play_track = NULL;
+    GstMixerTrack *cap_track = NULL;
+    const gchar *name;
+    GList *item;
+    gint samename = 0;
+
+    name = snd_mixer_selem_get_name (element);
+
+    /* prevent dup names */
+    for (item = mixer->tracklist; item != NULL; item = item->next) {
+      snd_mixer_elem_t *temp;
+
+      if (GST_IS_ALSA_MIXER_OPTIONS (item->data))
+        temp = GST_ALSA_MIXER_OPTIONS (item->data)->element;
+      else
+        temp = GST_ALSA_MIXER_TRACK (item->data)->element;
+
+      if (strcmp (name, snd_mixer_selem_get_name (temp)) == 0)
+        samename++;
+    }
+
+    GST_LOG ("[%s] probing element #%u, mixer->dir=%u", name, i, mixer->dir);
+
+    if (mixer->dir & GST_ALSA_MIXER_PLAYBACK) {
+      gboolean has_playback_switch, has_playback_volume;
+
+      has_playback_switch = snd_mixer_selem_has_playback_switch (element);
+      has_playback_volume = snd_mixer_selem_has_playback_volume (element);
+
+      GST_LOG ("[%s] PLAYBACK: has_playback_volume=%d, has_playback_switch=%d"
+          "%s", name, has_playback_volume, has_playback_switch,
+          (element == master) ? " MASTER" : "");
+
+      if (has_playback_volume) {
+        gint flags = GST_MIXER_TRACK_OUTPUT;
+
+        if (element == master)
+          flags |= GST_MIXER_TRACK_MASTER;
+
+        play_track = gst_alsa_mixer_track_new (element, samename, i,
+            flags, FALSE, NULL, FALSE);
+
+      } else if (has_playback_switch) {
+        /* simple mute switch */
+        play_track = gst_alsa_mixer_track_new (element, samename, i,
+            GST_MIXER_TRACK_OUTPUT, TRUE, NULL, FALSE);
+      }
+
+      if (snd_mixer_selem_is_enumerated (element)) {
+        GstMixerOptions *opts = gst_alsa_mixer_options_new (element, i);
+
+        GST_LOG ("[%s] is enumerated (%d)", name, i);
+        mixer->tracklist = g_list_append (mixer->tracklist, opts);
+      }
+    }
+
+    if (mixer->dir & GST_ALSA_MIXER_CAPTURE) {
+      gboolean has_capture_switch, has_common_switch;
+      gboolean has_capture_volume, has_common_volume;
+
+      has_capture_switch = snd_mixer_selem_has_capture_switch (element);
+      has_common_switch = snd_mixer_selem_has_common_switch (element);
+      has_capture_volume = snd_mixer_selem_has_capture_volume (element);
+      has_common_volume = snd_mixer_selem_has_common_volume (element);
+
+      GST_LOG ("[%s] CAPTURE: has_capture_volume=%d, has_common_volume=%d, "
+          "has_capture_switch=%d, has_common_switch=%d, play_track=%p", name,
+          has_capture_volume, has_common_volume, has_capture_switch,
+          has_common_switch, play_track);
+
+      if (has_capture_volume && !(play_track && has_common_volume)) {
+        cap_track = gst_alsa_mixer_track_new (element, samename, i,
+            GST_MIXER_TRACK_INPUT, FALSE, NULL, play_track != NULL);
+      } else if (has_capture_switch && !(play_track && has_common_switch)) {
+        cap_track = gst_alsa_mixer_track_new (element, samename, i,
+            GST_MIXER_TRACK_INPUT, TRUE, NULL, play_track != NULL);
+      }
+    }
+
+
+    if (play_track && cap_track) {
+      GST_ALSA_MIXER_TRACK (play_track)->shared_mute =
+          GST_ALSA_MIXER_TRACK (cap_track);
+      GST_ALSA_MIXER_TRACK (cap_track)->shared_mute =
+          GST_ALSA_MIXER_TRACK (play_track);
+    }
+
+    if (play_track)
+      mixer->tracklist = g_list_append (mixer->tracklist, play_track);
+
+    if (cap_track)
+      mixer->tracklist = g_list_append (mixer->tracklist, cap_track);
+
+    element = snd_mixer_elem_next (element);
+  }
+
+  for (item = mixer->tracklist; item != NULL; item = item->next) {
+    snd_mixer_elem_t *temp;
+
+    if (GST_IS_ALSA_MIXER_OPTIONS (item->data))
+      temp = GST_ALSA_MIXER_OPTIONS (item->data)->element;
+    else
+      temp = GST_ALSA_MIXER_TRACK (item->data)->element;
+
+    snd_mixer_elem_set_callback (temp, gst_alsa_mixer_elem_handle_callback);
+    snd_mixer_elem_set_callback_private (temp, mixer);
+  }
+
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+static void
+task_monitor_alsa (gpointer data)
+{
+  struct pollfd *pfds;
+  int nfds, rnfds;
+  unsigned short revents;
+  GstAlsaMixer *mixer = (GstAlsaMixer *) data;
+  gint ret;
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  nfds = snd_mixer_poll_descriptors_count (mixer->handle);
+  if (nfds <= 0) {
+    GST_ERROR ("snd_mixer_poll_descriptors_count <= 0: %d", nfds);
+    /* FIXME: sleep ? stop monitoring ? */
+    g_static_rec_mutex_unlock (mixer->rec_mutex);
+    return;
+  }
+
+  pfds = g_newa (struct pollfd, nfds + 1);
+  rnfds = snd_mixer_poll_descriptors (mixer->handle, pfds, nfds);
+  g_assert (rnfds <= nfds);
+
+  if (rnfds < 0) {
+    GST_ELEMENT_ERROR (mixer, RESOURCE, READ, (NULL), ("alsa error: %s",
+            snd_strerror (rnfds)));
+    gst_task_pause (mixer->task);
+    g_static_rec_mutex_unlock (mixer->rec_mutex);
+    return;
+  }
+
+  pfds[rnfds].fd = mixer->pfd[0];
+  pfds[rnfds].events = POLLIN | POLLPRI | POLLHUP | POLLERR;
+  pfds[rnfds].revents = 0;
+
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+
+  GST_LOG ("task loop");
+  ret = poll (pfds, rnfds + 1, -1);
+
+  if (ret < 0) {
+    GST_ELEMENT_ERROR (mixer, RESOURCE, READ, (NULL), GST_ERROR_SYSTEM);
+    gst_task_pause (mixer->task);
+    return;
+  }
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  ret =
+      snd_mixer_poll_descriptors_revents (mixer->handle, pfds, nfds, &revents);
+  if (ret < 0) {
+    GST_ELEMENT_ERROR (mixer, RESOURCE, READ, (NULL), ("alsa error: %s",
+            snd_strerror (ret)));
+    gst_task_pause (mixer->task);
+  } else if (revents & (POLLIN | POLLPRI)) {
+    GST_DEBUG ("Handling events");
+    snd_mixer_handle_events (mixer->handle);
+  } else if (revents & (POLLERR | POLLNVAL | POLLHUP)) {
+    GST_ELEMENT_ERROR (mixer, RESOURCE, READ, (NULL), (NULL));
+    gst_task_pause (mixer->task);
+  }
+
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+/* API */
+
+GstAlsaMixer *
+gst_alsa_mixer_new (const char *device, GstAlsaMixerDirection dir)
+{
+  GstAlsaMixer *ret = NULL;
+
+  g_return_val_if_fail (device != NULL, NULL);
+
+  ret = g_new0 (GstAlsaMixer, 1);
+
+  if (pipe (ret->pfd) == -1)
+    goto error;
+
+  ret->rec_mutex = g_new (GStaticRecMutex, 1);
+  g_static_rec_mutex_init (ret->rec_mutex);
+
+  ret->task_mutex = g_new (GStaticRecMutex, 1);
+  g_static_rec_mutex_init (ret->task_mutex);
+
+  ret->task = gst_task_create (task_monitor_alsa, ret);
+  gst_task_set_lock (ret->task, ret->task_mutex);
+
+  ret->device = g_strdup (device);
+  ret->dir = dir;
+
+  if (!gst_alsa_mixer_open (ret))
+    goto error;
+
+  if (gst_task_start (ret->task) == FALSE) {
+    GST_WARNING ("Could not start alsamixer task");
+  }
+
+  return ret;
+
+  /* ERRORS */
+error:
+  {
+    gst_alsa_mixer_free (ret);
+    return NULL;
+  }
+}
+
+void
+gst_alsa_mixer_free (GstAlsaMixer * mixer)
+{
+  g_return_if_fail (mixer != NULL);
+
+  if (mixer->task) {
+    if (write (mixer->pfd[1], "stop", 5) <= 0) {
+      GST_ERROR ("Cannot send " "stop" " to alsamixer task");
+      close (mixer->pfd[1]);
+      mixer->pfd[1] = -1;
+    }
+
+    if (gst_task_join (mixer->task) == FALSE) {
+      GST_ERROR ("Cannot join alsamixer task");
+    }
+
+    gst_object_unref (mixer->task);
+    mixer->task = NULL;
+  }
+
+  g_static_rec_mutex_free (mixer->task_mutex);
+  g_free (mixer->task_mutex);
+  mixer->task_mutex = NULL;
+
+  if (mixer->pfd[0] > 0) {
+    close (mixer->pfd[0]);
+    mixer->pfd[0] = -1;
+  }
+
+  if (mixer->pfd[1] > 0) {
+    close (mixer->pfd[1]);
+    mixer->pfd[1] = -1;
+  }
+
+  if (mixer->interface) {
+    g_object_unref (G_OBJECT (mixer->interface));
+    mixer->interface = NULL;
+  }
+
+  if (mixer->device) {
+    g_free (mixer->device);
+    mixer->device = NULL;
+  }
+
+  if (mixer->cardname) {
+    g_free (mixer->cardname);
+    mixer->cardname = NULL;
+  }
+
+  if (mixer->tracklist) {
+    g_list_foreach (mixer->tracklist, (GFunc) g_object_unref, NULL);
+    g_list_free (mixer->tracklist);
+    mixer->tracklist = NULL;
+  }
+
+  if (mixer->handle) {
+    snd_mixer_close (mixer->handle);
+    mixer->handle = NULL;
+  }
+
+  g_static_rec_mutex_free (mixer->rec_mutex);
+  g_free (mixer->rec_mutex);
+  mixer->rec_mutex = NULL;
+
+  g_free (mixer);
+}
+
+const GList *
+gst_alsa_mixer_list_tracks (GstAlsaMixer * mixer)
+{
+  g_return_val_if_fail (mixer->handle != NULL, NULL);
+
+  gst_alsa_mixer_ensure_track_list (mixer);
+
+  return (const GList *) mixer->tracklist;
+}
+
+void
+gst_alsa_mixer_get_volume (GstAlsaMixer * mixer, GstMixerTrack * track,
+    gint * volumes)
+{
+  gint i;
+  GstAlsaMixerTrack *alsa_track = GST_ALSA_MIXER_TRACK (track);
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  if (track->flags & GST_MIXER_TRACK_OUTPUT) {  /* return playback volume */
+
+    /* Is emulated mute flag activated? */
+    if (track->flags & GST_MIXER_TRACK_MUTE &&
+        !(alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_PSWITCH)) {
+      for (i = 0; i < track->num_channels; i++)
+        volumes[i] = alsa_track->volumes[i];
+    } else {
+      for (i = 0; i < track->num_channels; i++) {
+        long tmp = 0;
+
+        snd_mixer_selem_get_playback_volume (alsa_track->element, i, &tmp);
+        alsa_track->volumes[i] = volumes[i] = (gint) tmp;
+      }
+    }
+
+  } else if (track->flags & GST_MIXER_TRACK_INPUT) {    /* return capture volume */
+
+    /* Is emulated record flag activated? */
+    if (alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_CSWITCH ||
+        track->flags & GST_MIXER_TRACK_RECORD) {
+      for (i = 0; i < track->num_channels; i++) {
+        long tmp = 0;
+
+        snd_mixer_selem_get_capture_volume (alsa_track->element, i, &tmp);
+        alsa_track->volumes[i] = volumes[i] = (gint) tmp;
+      }
+    } else {
+      for (i = 0; i < track->num_channels; i++)
+        volumes[i] = alsa_track->volumes[i];
+    }
+  }
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+static gboolean
+check_if_volumes_are_the_same (guint num_channels, gint * volumes)
+{
+  guint i;
+
+  if (num_channels <= 1)
+    return TRUE;
+
+  for (i = 1; i < num_channels; i++) {
+    if (volumes[i] != volumes[0])
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+void
+gst_alsa_mixer_set_volume (GstAlsaMixer * mixer, GstMixerTrack * track,
+    gint * volumes)
+{
+  GstAlsaMixerTrack *alsa_track = GST_ALSA_MIXER_TRACK (track);
+  gint i;
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  if (track->flags & GST_MIXER_TRACK_OUTPUT) {
+
+    /* Is emulated mute flag activated? */
+    if (track->flags & GST_MIXER_TRACK_MUTE &&
+        !(alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_PSWITCH)) {
+      for (i = 0; i < track->num_channels; i++)
+        alsa_track->volumes[i] = volumes[i];
+    } else {
+      if (check_if_volumes_are_the_same (track->num_channels, volumes)) {
+        snd_mixer_selem_set_playback_volume_all (alsa_track->element,
+            volumes[0]);
+        for (i = 0; i < track->num_channels; i++)
+          alsa_track->volumes[i] = volumes[0];
+      } else {
+        for (i = 0; i < track->num_channels; i++) {
+          alsa_track->volumes[i] = volumes[i];
+          snd_mixer_selem_set_playback_volume (alsa_track->element, i,
+              volumes[i]);
+        }
+      }
+    }
+
+  } else if (track->flags & GST_MIXER_TRACK_INPUT) {
+
+    /* Is emulated record flag activated? */
+    if (track->flags & GST_MIXER_TRACK_RECORD ||
+        alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_CSWITCH) {
+      if (check_if_volumes_are_the_same (track->num_channels, volumes)) {
+        snd_mixer_selem_set_capture_volume_all (alsa_track->element,
+            volumes[0]);
+        for (i = 0; i < track->num_channels; i++)
+          alsa_track->volumes[i] = volumes[0];
+      } else {
+        for (i = 0; i < track->num_channels; i++) {
+          alsa_track->volumes[i] = volumes[i];
+          snd_mixer_selem_set_capture_volume (alsa_track->element, i,
+              volumes[i]);
+        }
+      }
+    } else {
+      for (i = 0; i < track->num_channels; i++)
+        alsa_track->volumes[i] = volumes[i];
+    }
+  }
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+void
+gst_alsa_mixer_set_mute (GstAlsaMixer * mixer, GstMixerTrack * track,
+    gboolean mute)
+{
+  GstAlsaMixerTrack *alsa_track = GST_ALSA_MIXER_TRACK (track);
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  if (! !(mute) == ! !(track->flags & GST_MIXER_TRACK_MUTE)) {
+    g_static_rec_mutex_unlock (mixer->rec_mutex);
+    return;
+  }
+  if (mute) {
+    track->flags |= GST_MIXER_TRACK_MUTE;
+
+    if (alsa_track->shared_mute)
+      ((GstMixerTrack *) (alsa_track->shared_mute))->flags |=
+          GST_MIXER_TRACK_MUTE;
+  } else {
+    track->flags &= ~GST_MIXER_TRACK_MUTE;
+
+    if (alsa_track->shared_mute)
+      ((GstMixerTrack *) (alsa_track->shared_mute))->flags &=
+          ~GST_MIXER_TRACK_MUTE;
+  }
+
+  if (alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_PSWITCH) {
+    snd_mixer_selem_set_playback_switch_all (alsa_track->element, mute ? 0 : 1);
+  } else {
+    gint i;
+    GstAlsaMixerTrack *ctrl_track;
+
+    if ((track->flags & GST_MIXER_TRACK_INPUT)
+        && alsa_track->shared_mute != NULL)
+      ctrl_track = alsa_track->shared_mute;
+    else
+      ctrl_track = alsa_track;
+
+    for (i = 0; i < ((GstMixerTrack *) ctrl_track)->num_channels; i++) {
+      long vol =
+          mute ? ((GstMixerTrack *) ctrl_track)->
+          min_volume : ctrl_track->volumes[i];
+      snd_mixer_selem_set_playback_volume (ctrl_track->element, i, vol);
+    }
+  }
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+void
+gst_alsa_mixer_set_record (GstAlsaMixer * mixer,
+    GstMixerTrack * track, gboolean record)
+{
+  GstAlsaMixerTrack *alsa_track = GST_ALSA_MIXER_TRACK (track);
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  if (! !(record) == ! !(track->flags & GST_MIXER_TRACK_RECORD)) {
+    g_static_rec_mutex_unlock (mixer->rec_mutex);
+    return;
+  }
+
+  if (record) {
+    track->flags |= GST_MIXER_TRACK_RECORD;
+  } else {
+    track->flags &= ~GST_MIXER_TRACK_RECORD;
+  }
+
+  if (alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_CSWITCH) {
+    snd_mixer_selem_set_capture_switch_all (alsa_track->element,
+        record ? 1 : 0);
+
+    /* update all tracks in same exlusive cswitch group */
+    if (alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_CSWITCH_EXCL) {
+      GList *item;
+
+      for (item = mixer->tracklist; item != NULL; item = item->next) {
+
+        if (GST_IS_ALSA_MIXER_TRACK (item->data)) {
+          GstAlsaMixerTrack *item_alsa_track =
+              GST_ALSA_MIXER_TRACK (item->data);
+
+          if (item_alsa_track->alsa_flags & GST_ALSA_MIXER_TRACK_CSWITCH_EXCL &&
+              item_alsa_track->capture_group == alsa_track->capture_group) {
+            gst_alsa_mixer_track_update (item_alsa_track);
+          }
+        }
+      }
+    }
+  } else {
+    gint i;
+
+    for (i = 0; i < track->num_channels; i++) {
+      long vol = record ? alsa_track->volumes[i] : track->min_volume;
+
+      snd_mixer_selem_set_capture_volume (alsa_track->element, i, vol);
+    }
+  }
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+void
+gst_alsa_mixer_set_option (GstAlsaMixer * mixer,
+    GstMixerOptions * opts, gchar * value)
+{
+  gint idx = -1, n = 0;
+  GList *item;
+  GstAlsaMixerOptions *alsa_opts = GST_ALSA_MIXER_OPTIONS (opts);
+
+  g_return_if_fail (mixer->handle != NULL);
+
+  for (item = opts->values; item != NULL; item = item->next, n++) {
+    if (!strcmp (item->data, value)) {
+      idx = n;
+      break;
+    }
+  }
+  if (idx == -1)
+    return;
+
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+  snd_mixer_selem_set_enum_item (alsa_opts->element, 0, idx);
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+}
+
+const gchar *
+gst_alsa_mixer_get_option (GstAlsaMixer * mixer, GstMixerOptions * opts)
+{
+  gint ret;
+  guint idx;
+  GstAlsaMixerOptions *alsa_opts = GST_ALSA_MIXER_OPTIONS (opts);
+
+  g_return_val_if_fail (mixer->handle != NULL, NULL);
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+  ret = snd_mixer_selem_get_enum_item (alsa_opts->element, 0, &idx);
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+  if (ret == 0)
+    return g_list_nth_data (opts->values, idx);
+  else
+    return snd_strerror (ret);  /* feeble attempt at error handling */
+}
+
+GstMixerFlags
+gst_alsa_mixer_get_mixer_flags (GstAlsaMixer * mixer)
+{
+  g_return_val_if_fail (mixer != NULL, GST_MIXER_FLAG_NONE);
+
+  return GST_MIXER_FLAG_AUTO_NOTIFICATIONS;
+}
+
+static void
+gst_alsa_mixer_update_option (GstAlsaMixer * mixer,
+    GstAlsaMixerOptions * alsa_opts)
+{
+  gint ret;
+  guint idx;
+  /* const */ gchar *option;
+
+  if (mixer->interface == NULL) {
+    GST_WARNING ("Cannot send update notifications, no GstMixer * given");
+    return;
+  }
+  g_static_rec_mutex_lock (mixer->rec_mutex);
+  ret = snd_mixer_selem_get_enum_item (alsa_opts->element, 0, &idx);
+  g_static_rec_mutex_unlock (mixer->rec_mutex);
+  if (ret == 0) {
+    option = g_list_nth_data (GST_MIXER_OPTIONS (alsa_opts)->values, idx);
+    gst_mixer_option_changed (mixer->interface, GST_MIXER_OPTIONS (alsa_opts),
+        option);
+  }
+}
+
+static void
+gst_alsa_mixer_update_track (GstAlsaMixer * mixer,
+    GstAlsaMixerTrack * alsa_track)
+{
+  GstMixerTrack *track = (GstMixerTrack *) alsa_track;
+  gboolean old_mute;
+  gboolean old_record;
+  gint i, n_channels;
+  gint *old_volumes;
+
+  GST_DEBUG ("Updating track %" GST_PTR_FORMAT, alsa_track);
+
+  if (mixer->interface == NULL) {
+    GST_WARNING ("Cannot send update notifications, no GstMixer * given");
+    return;
+  }
+
+  old_mute = ! !(GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE));
+  old_record = ! !(GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_RECORD));
+  old_volumes = g_new (gint, track->num_channels);
+  n_channels = track->num_channels;
+  memcpy (old_volumes, alsa_track->volumes,
+      sizeof (gint) * track->num_channels);
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  if (old_record !=
+      ! !(GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_RECORD))) {
+    gst_mixer_record_toggled (mixer->interface, track,
+        ! !GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_RECORD));
+  }
+  if (old_mute != ! !(GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE))) {
+    gst_mixer_mute_toggled (mixer->interface, track,
+        ! !GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MUTE));
+  }
+
+  n_channels = MIN (n_channels, track->num_channels);
+  for (i = 0; i < n_channels; i++) {
+    if (old_volumes[i] != alsa_track->volumes[i]) {
+      gst_mixer_volume_changed (mixer->interface, track, alsa_track->volumes);
+      break;
+    }
+  }
+  g_free (old_volumes);
+}
+
+/* utility function for gstalsamixerelement to set the interface */
+void
+_gst_alsa_mixer_set_interface (GstAlsaMixer * mixer, GstMixer * interface)
+{
+  g_return_if_fail (mixer != NULL && mixer->interface == NULL);
+  g_return_if_fail (interface != NULL);
+
+  mixer->interface = g_object_ref (G_OBJECT (interface));
+}
diff --git a/ext/alsa/gstalsamixer.h b/ext/alsa/gstalsamixer.h
new file mode 100644
index 0000000..3165ff5
--- /dev/null
+++ b/ext/alsa/gstalsamixer.h
@@ -0,0 +1,209 @@
+/* ALSA mixer interface implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GST_ALSA_MIXER_H__
+#define __GST_ALSA_MIXER_H__
+
+
+#include "gstalsa.h"
+
+#include <gst/interfaces/mixer.h>
+#include "gstalsamixeroptions.h"
+#include "gstalsamixertrack.h"
+
+
+G_BEGIN_DECLS
+
+/* This does not get you what you think it does, use obj->mixer   */
+/* #define GST_ALSA_MIXER(obj)             ((GstAlsaMixer*)(obj)) */
+
+typedef struct _GstAlsaMixer GstAlsaMixer;
+
+typedef enum {
+  GST_ALSA_MIXER_CAPTURE = 1<<0,
+  GST_ALSA_MIXER_PLAYBACK = 1<<1,
+  GST_ALSA_MIXER_ALL = GST_ALSA_MIXER_CAPTURE | GST_ALSA_MIXER_PLAYBACK
+} GstAlsaMixerDirection;
+
+/**
+ * GstAlsaMixer:
+ *
+ * Opaque data structure
+ */
+struct _GstAlsaMixer
+{
+  GList *               tracklist;      /* list of available tracks */
+
+  snd_mixer_t *         handle;
+
+  GstTask *		task;
+  GStaticRecMutex *	task_mutex;
+  GStaticRecMutex *	rec_mutex;
+
+  int			pfd[2];
+
+  GstMixer *		interface;
+  gchar *               device;
+  gchar *               cardname;
+
+  GstAlsaMixerDirection dir;
+};
+
+
+GstAlsaMixer*   gst_alsa_mixer_new              (const gchar *device,
+                                                 GstAlsaMixerDirection dir);
+void            gst_alsa_mixer_free             (GstAlsaMixer *mixer);
+
+const GList*    gst_alsa_mixer_list_tracks      (GstAlsaMixer * mixer);
+void            gst_alsa_mixer_set_volume       (GstAlsaMixer * mixer,
+                                                 GstMixerTrack * track,
+                                                 gint * volumes);
+void            gst_alsa_mixer_get_volume       (GstAlsaMixer * mixer,
+                                                 GstMixerTrack * track,
+                                                 gint * volumes);
+void            gst_alsa_mixer_set_record       (GstAlsaMixer * mixer,
+                                                 GstMixerTrack * track,
+                                                 gboolean record);
+void            gst_alsa_mixer_set_mute         (GstAlsaMixer * mixer,
+                                                 GstMixerTrack * track,
+                                                 gboolean mute);
+void            gst_alsa_mixer_set_option       (GstAlsaMixer * mixer,
+                                                 GstMixerOptions * opts,
+                                                 gchar * value);
+const gchar*    gst_alsa_mixer_get_option       (GstAlsaMixer * mixer,
+                                                 GstMixerOptions * opts);
+void		_gst_alsa_mixer_set_interface   (GstAlsaMixer * mixer,
+						 GstMixer * interface);
+GstMixerFlags   gst_alsa_mixer_get_mixer_flags  (GstAlsaMixer *mixer);
+
+#define GST_IMPLEMENT_ALSA_MIXER_METHODS(Type, interface_as_function)           \
+static const GList*                                                             \
+interface_as_function ## _list_tracks (GstMixer * mixer)                        \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_val_if_fail (this != NULL, NULL);                                    \
+  g_return_val_if_fail (this->mixer != NULL, NULL);                             \
+                                                                                \
+  return gst_alsa_mixer_list_tracks (this->mixer);                              \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _set_volume (GstMixer * mixer, GstMixerTrack * track,  \
+    gint * volumes)                                                             \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_if_fail (this != NULL);                                              \
+  g_return_if_fail (this->mixer != NULL);                                       \
+                                                                                \
+  gst_alsa_mixer_set_volume (this->mixer, track, volumes);                      \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _get_volume (GstMixer * mixer, GstMixerTrack * track,  \
+    gint * volumes)                                                             \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_if_fail (this != NULL);                                              \
+  g_return_if_fail (this->mixer != NULL);                                       \
+                                                                                \
+  gst_alsa_mixer_get_volume (this->mixer, track, volumes);                      \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _set_record (GstMixer * mixer, GstMixerTrack * track,  \
+    gboolean record)                                                            \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_if_fail (this != NULL);                                              \
+  g_return_if_fail (this->mixer != NULL);                                       \
+                                                                                \
+  gst_alsa_mixer_set_record (this->mixer, track, record);                       \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _set_mute (GstMixer * mixer, GstMixerTrack * track,    \
+    gboolean mute)                                                              \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_if_fail (this != NULL);                                              \
+  g_return_if_fail (this->mixer != NULL);                                       \
+                                                                                \
+  gst_alsa_mixer_set_mute (this->mixer, track, mute);                           \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _set_option (GstMixer * mixer, GstMixerOptions * opts, \
+    gchar * value)                                                              \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_if_fail (this != NULL);                                              \
+  g_return_if_fail (this->mixer != NULL);                                       \
+                                                                                \
+  gst_alsa_mixer_set_option (this->mixer, opts, value);                         \
+}                                                                               \
+                                                                                \
+static const gchar*                                                             \
+interface_as_function ## _get_option (GstMixer * mixer, GstMixerOptions * opts) \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_val_if_fail (this != NULL, NULL);                                    \
+  g_return_val_if_fail (this->mixer != NULL, NULL);                             \
+                                                                                \
+  return gst_alsa_mixer_get_option (this->mixer, opts);                         \
+}                                                                               \
+                                                                                \
+static GstMixerFlags                                                            \
+interface_as_function ## _get_mixer_flags (GstMixer * mixer)                    \
+{                                                                               \
+  Type *this = (Type*) mixer;                                                   \
+                                                                                \
+  g_return_val_if_fail (this != NULL, GST_MIXER_FLAG_NONE);                     \
+  g_return_val_if_fail (this->mixer != NULL, GST_MIXER_FLAG_NONE);              \
+                                                                                \
+  return gst_alsa_mixer_get_mixer_flags (this->mixer);                          \
+}                                                                               \
+                                                                                \
+static void                                                                     \
+interface_as_function ## _interface_init (GstMixerClass * klass)                \
+{                                                                               \
+  GST_MIXER_TYPE (klass) = GST_MIXER_HARDWARE;                                  \
+                                                                                \
+  /* set up the interface hooks */                                              \
+  klass->list_tracks = interface_as_function ## _list_tracks;                   \
+  klass->set_volume = interface_as_function ## _set_volume;                     \
+  klass->get_volume = interface_as_function ## _get_volume;                     \
+  klass->set_mute = interface_as_function ## _set_mute;                         \
+  klass->set_record = interface_as_function ## _set_record;                     \
+  klass->set_option = interface_as_function ## _set_option;                     \
+  klass->get_option = interface_as_function ## _get_option;                     \
+  klass->get_mixer_flags = interface_as_function ## _get_mixer_flags;           \
+}
+
+
+G_END_DECLS
+
+
+#endif /* __GST_ALSA_MIXER_H__ */
diff --git a/ext/alsa/gstalsamixerelement.c b/ext/alsa/gstalsamixerelement.c
new file mode 100644
index 0000000..1993cc4
--- /dev/null
+++ b/ext/alsa/gstalsamixerelement.c
@@ -0,0 +1,216 @@
+/* ALSA mixer implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstalsamixerelement.h"
+#include "gstalsadeviceprobe.h"
+
+#define DEFAULT_PROP_DEVICE          "default"
+#define DEFAULT_PROP_DEVICE_NAME     ""
+
+enum
+{
+  PROP_0,
+  PROP_DEVICE,
+  PROP_DEVICE_NAME
+};
+
+static void gst_alsa_mixer_element_init_interfaces (GType type);
+#define gst_alsa_mixer_element_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAlsaMixerElement, gst_alsa_mixer_element,
+    GST_TYPE_ELEMENT,
+    gst_alsa_mixer_element_init_interfaces (g_define_type_id));
+
+/* massive macro that takes care of all the GstMixer stuff */
+GST_IMPLEMENT_ALSA_MIXER_METHODS (GstAlsaMixerElement, gst_alsa_mixer_element);
+
+static void gst_alsa_mixer_element_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+static void gst_alsa_mixer_element_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_alsa_mixer_element_finalize (GObject * object);
+
+static GstStateChangeReturn gst_alsa_mixer_element_change_state (GstElement
+    * element, GstStateChange transition);
+
+static void
+gst_alsa_mixer_element_init_interfaces (GType type)
+{
+  static const GInterfaceInfo mixer_iface_info = {
+    (GInterfaceInitFunc) gst_alsa_mixer_element_interface_init,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_MIXER, &mixer_iface_info);
+
+  gst_alsa_type_add_device_property_probe_interface (type);
+}
+
+static void
+gst_alsa_mixer_element_class_init (GstAlsaMixerElementClass * klass)
+{
+  GstElementClass *element_class;
+  GObjectClass *gobject_class;
+
+  element_class = (GstElementClass *) klass;
+  gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = gst_alsa_mixer_element_finalize;
+  gobject_class->get_property = gst_alsa_mixer_element_get_property;
+  gobject_class->set_property = gst_alsa_mixer_element_set_property;
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE,
+      g_param_spec_string ("device", "Device",
+          "ALSA device, as defined in an asound configuration file",
+          DEFAULT_PROP_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+      g_param_spec_string ("device-name", "Device name",
+          "Human-readable name of the sound device",
+          DEFAULT_PROP_DEVICE_NAME, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (element_class,
+      "Alsa mixer", "Generic/Audio",
+      "Control sound input and output levels with ALSA",
+      "Leif Johnson <leif@ambient.2y.net>");
+
+  element_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_alsa_mixer_element_change_state);
+}
+
+static void
+gst_alsa_mixer_element_finalize (GObject * obj)
+{
+  GstAlsaMixerElement *this = GST_ALSA_MIXER_ELEMENT (obj);
+
+  g_free (this->device);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_alsa_mixer_element_init (GstAlsaMixerElement * this)
+{
+  this->mixer = NULL;
+  this->device = g_strdup (DEFAULT_PROP_DEVICE);
+}
+
+static void
+gst_alsa_mixer_element_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAlsaMixerElement *this = GST_ALSA_MIXER_ELEMENT (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:{
+      GST_OBJECT_LOCK (this);
+      g_free (this->device);
+      this->device = g_value_dup_string (value);
+      /* make sure we never set NULL, this is nice when we want to open the
+       * device. */
+      if (this->device == NULL)
+        this->device = g_strdup (DEFAULT_PROP_DEVICE);
+      GST_OBJECT_UNLOCK (this);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_alsa_mixer_element_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAlsaMixerElement *this = GST_ALSA_MIXER_ELEMENT (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:{
+      GST_OBJECT_LOCK (this);
+      g_value_set_string (value, this->device);
+      GST_OBJECT_UNLOCK (this);
+      break;
+    }
+    case PROP_DEVICE_NAME:{
+      GST_OBJECT_LOCK (this);
+      if (this->mixer) {
+        g_value_set_string (value, this->mixer->cardname);
+      } else {
+        g_value_set_string (value, NULL);
+      }
+      GST_OBJECT_UNLOCK (this);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_alsa_mixer_element_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstAlsaMixerElement *this = GST_ALSA_MIXER_ELEMENT (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (!this->mixer) {
+        this->mixer = gst_alsa_mixer_new (this->device, GST_ALSA_MIXER_ALL);
+        if (!this->mixer)
+          goto open_failed;
+        _gst_alsa_mixer_set_interface (this->mixer, GST_MIXER (element));
+      }
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      if (this->mixer) {
+        gst_alsa_mixer_free (this->mixer);
+        this->mixer = NULL;
+      }
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+
+  /* ERRORS */
+open_failed:
+  {
+    GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ_WRITE, (NULL),
+        ("Failed to open alsa mixer device '%s'", this->device));
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
diff --git a/ext/alsa/gstalsamixerelement.h b/ext/alsa/gstalsamixerelement.h
new file mode 100644
index 0000000..16cb245
--- /dev/null
+++ b/ext/alsa/gstalsamixerelement.h
@@ -0,0 +1,61 @@
+/* ALSA mixer interface implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GST_ALSA_MIXER_ELEMENT_H__
+#define __GST_ALSA_MIXER_ELEMENT_H__
+
+
+#include "gstalsa.h"
+#include "gstalsamixer.h"
+
+G_BEGIN_DECLS
+
+#define GST_ALSA_MIXER_ELEMENT(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_MIXER_ELEMENT,GstAlsaMixerElement))
+#define GST_ALSA_MIXER_ELEMENT_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_MIXER_ELEMENT,GstAlsaMixerElementClass))
+#define GST_IS_ALSA_MIXER_ELEMENT(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_MIXER_ELEMENT))
+#define GST_IS_ALSA_MIXER_ELEMENT_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_MIXER_ELEMENT))
+#define GST_TYPE_ALSA_MIXER_ELEMENT             (gst_alsa_mixer_element_get_type())
+
+typedef struct _GstAlsaMixerElement GstAlsaMixerElement;
+typedef struct _GstAlsaMixerElementClass GstAlsaMixerElementClass;
+
+/**
+ * GstAlsaMixerElement
+ *
+ * Opaque datastructure.
+ */
+struct _GstAlsaMixerElement {
+  GstElement            parent;
+
+  GstAlsaMixer          *mixer;
+  gchar                 *device;
+};
+
+struct _GstAlsaMixerElementClass {
+  GstElementClass       parent;
+};
+
+
+GType           gst_alsa_mixer_element_get_type         (void);
+
+
+G_END_DECLS
+
+
+#endif /* __GST_ALSA_MIXER_ELEMENT_H__ */
diff --git a/ext/alsa/gstalsamixeroptions.c b/ext/alsa/gstalsamixeroptions.c
new file mode 100644
index 0000000..20bb89d
--- /dev/null
+++ b/ext/alsa/gstalsamixeroptions.c
@@ -0,0 +1,109 @@
+/* ALSA mixer object implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstalsamixeroptions.h"
+
+static void gst_alsa_mixer_options_init (GstAlsaMixerOptions * alsa_opts);
+static void gst_alsa_mixer_options_class_init (gpointer g_class,
+    gpointer class_data);
+
+static GstMixerOptionsClass *parent_class = NULL;
+
+GType
+gst_alsa_mixer_options_get_type (void)
+{
+  static GType opts_type = 0;
+
+  if (!opts_type) {
+    static const GTypeInfo opts_info = {
+      sizeof (GstAlsaMixerOptionsClass),
+      NULL,
+      NULL,
+      gst_alsa_mixer_options_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAlsaMixerOptions),
+      0,
+      (GInstanceInitFunc) gst_alsa_mixer_options_init,
+    };
+
+    opts_type =
+        g_type_register_static (GST_TYPE_MIXER_OPTIONS, "GstAlsaMixerOptions",
+        &opts_info, 0);
+  }
+
+  return opts_type;
+}
+
+static void
+gst_alsa_mixer_options_class_init (gpointer g_class, gpointer class_data)
+{
+  parent_class = g_type_class_peek_parent (g_class);
+}
+
+static void
+gst_alsa_mixer_options_init (GstAlsaMixerOptions * alsa_opts)
+{
+}
+
+GstMixerOptions *
+gst_alsa_mixer_options_new (snd_mixer_elem_t * element, gint track_num)
+{
+  GstMixerOptions *opts;
+  GstAlsaMixerOptions *alsa_opts;
+  GstMixerTrack *track;
+  const gchar *label;
+  guint index;
+  gint num, i;
+  gchar str[256];
+
+  label = snd_mixer_selem_get_name (element);
+  index = snd_mixer_selem_get_index (element);
+
+  GST_LOG ("[%s,%u]", label, index);
+
+  opts = g_object_new (GST_ALSA_MIXER_OPTIONS_TYPE,
+      "untranslated-label", label, "index", index, NULL);
+  alsa_opts = (GstAlsaMixerOptions *) opts;
+  track = (GstMixerTrack *) opts;
+
+  /* set basic information */
+  track->label = g_strdup (label);      /* FIXME: translate this? */
+  track->num_channels = 0;
+  track->flags = 0;
+  alsa_opts->element = element;
+  alsa_opts->track_num = track_num;
+
+  /* get enumerations for switch/options object */
+  num = snd_mixer_selem_get_enum_items (element);
+  for (i = 0; i < num; i++) {
+    if (snd_mixer_selem_get_enum_item_name (element, i, 255, str) < 0) {
+      g_object_unref (G_OBJECT (alsa_opts));
+      return NULL;
+    }
+
+    opts->values = g_list_append (opts->values, g_strdup (str));
+  }
+
+  return opts;
+}
diff --git a/ext/alsa/gstalsamixeroptions.h b/ext/alsa/gstalsamixeroptions.h
new file mode 100644
index 0000000..b3c36c0
--- /dev/null
+++ b/ext/alsa/gstalsamixeroptions.h
@@ -0,0 +1,62 @@
+/* ALSA mixer options object.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GST_ALSA_MIXER_OPTIONS_H__
+#define __GST_ALSA_MIXER_OPTIONS_H__
+
+
+#include "gstalsa.h"
+#include <gst/interfaces/mixeroptions.h>
+
+
+G_BEGIN_DECLS
+
+
+#define GST_ALSA_MIXER_OPTIONS_TYPE             (gst_alsa_mixer_options_get_type ())
+#define GST_ALSA_MIXER_OPTIONS(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_MIXER_OPTIONS,GstAlsaMixerOptions))
+#define GST_ALSA_MIXER_OPTIONS_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_MIXER_OPTIONS,GstAlsaMixerOptionsClass))
+#define GST_IS_ALSA_MIXER_OPTIONS(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_MIXER_OPTIONS))
+#define GST_IS_ALSA_MIXER_OPTIONS_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_MIXER_OPTIONS))
+#define GST_TYPE_ALSA_MIXER_OPTIONS             (gst_alsa_mixer_options_get_type())
+
+
+typedef struct _GstAlsaMixerOptions GstAlsaMixerOptions;
+typedef struct _GstAlsaMixerOptionsClass GstAlsaMixerOptionsClass;
+
+
+struct _GstAlsaMixerOptions {
+  GstMixerOptions        parent;
+  snd_mixer_elem_t      *element; /* the ALSA mixer element for this track */
+  gint                  track_num;
+};
+
+struct _GstAlsaMixerOptionsClass {
+  GstMixerOptionsClass parent;
+};
+
+
+GType           gst_alsa_mixer_options_get_type (void);
+GstMixerOptions *gst_alsa_mixer_options_new     (snd_mixer_elem_t *     element,
+                                                 gint                   track_num);
+
+
+G_END_DECLS
+
+
+#endif /* __GST_ALSA_MIXER_OPTIONS_H__ */
diff --git a/ext/alsa/gstalsamixertrack.c b/ext/alsa/gstalsamixertrack.c
new file mode 100644
index 0000000..dea8ef0
--- /dev/null
+++ b/ext/alsa/gstalsamixertrack.c
@@ -0,0 +1,356 @@
+/* ALSA mixer track implementation.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+
+#include "gstalsamixertrack.h"
+
+static void gst_alsa_mixer_track_init (GstAlsaMixerTrack * alsa_track);
+static void gst_alsa_mixer_track_class_init (gpointer g_class,
+    gpointer class_data);
+
+static GstMixerTrackClass *parent_class = NULL;
+
+GType
+gst_alsa_mixer_track_get_type (void)
+{
+  static GType track_type = 0;
+
+  if (!track_type) {
+    static const GTypeInfo track_info = {
+      sizeof (GstAlsaMixerTrackClass),
+      NULL,
+      NULL,
+      gst_alsa_mixer_track_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAlsaMixerTrack),
+      0,
+      (GInstanceInitFunc) gst_alsa_mixer_track_init,
+      NULL
+    };
+
+    track_type =
+        g_type_register_static (GST_TYPE_MIXER_TRACK, "GstAlsaMixerTrack",
+        &track_info, 0);
+  }
+
+  return track_type;
+}
+
+static void
+gst_alsa_mixer_track_class_init (gpointer g_class, gpointer class_data)
+{
+  parent_class = g_type_class_peek_parent (g_class);
+}
+
+static void
+gst_alsa_mixer_track_init (GstAlsaMixerTrack * alsa_track)
+{
+}
+
+static void
+gst_alsa_mixer_track_update_alsa_capabilities (GstAlsaMixerTrack * alsa_track)
+{
+  alsa_track->alsa_flags = 0;
+  alsa_track->capture_group = -1;
+
+  /* common flags */
+  if (snd_mixer_selem_has_common_volume (alsa_track->element))
+    alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_VOLUME;
+
+  if (snd_mixer_selem_has_common_switch (alsa_track->element))
+    alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_SWITCH;
+
+  /* Since we create two separate mixer track objects for alsa elements that
+   * support both playback and capture, we're going to 'hide' the alsa flags
+   * that don't pertain to this mixer track from alsa_flags, otherwise
+   * gst_alsa_mixer_track_update() is going to do things we don't want */
+
+  /* playback flags */
+  if ((GST_MIXER_TRACK (alsa_track)->flags & GST_MIXER_TRACK_OUTPUT)) {
+    if (snd_mixer_selem_has_playback_volume (alsa_track->element))
+      alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_PVOLUME;
+
+    if (snd_mixer_selem_has_playback_switch (alsa_track->element))
+      alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_PSWITCH;
+  }
+
+  /* capture flags */
+  if ((GST_MIXER_TRACK (alsa_track)->flags & GST_MIXER_TRACK_INPUT)) {
+    if (snd_mixer_selem_has_capture_volume (alsa_track->element))
+      alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_CVOLUME;
+
+    if (snd_mixer_selem_has_capture_switch (alsa_track->element)) {
+      alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_CSWITCH;
+
+      if (snd_mixer_selem_has_capture_switch_exclusive (alsa_track->element)) {
+        alsa_track->alsa_flags |= GST_ALSA_MIXER_TRACK_CSWITCH_EXCL;
+        alsa_track->capture_group =
+            snd_mixer_selem_get_capture_group (alsa_track->element);
+      }
+    }
+  }
+
+  GST_LOG ("[%s] alsa_flags=0x%08x, capture_group=%d",
+      snd_mixer_selem_get_name (alsa_track->element),
+      alsa_track->alsa_flags, alsa_track->capture_group);
+}
+
+inline static gboolean
+alsa_track_has_cap (GstAlsaMixerTrack * alsa_track, guint32 flag)
+{
+  return ((alsa_track->alsa_flags & flag) != 0);
+}
+
+GstMixerTrack *
+gst_alsa_mixer_track_new (snd_mixer_elem_t * element,
+    gint num, gint track_num, gint flags, gboolean sw,
+    GstAlsaMixerTrack * shared_mute_track, gboolean append_capture)
+{
+  GstAlsaMixerTrack *alsa_track;
+  GstMixerTrack *track;
+  const gchar *name;
+  guint index;
+  const gchar *label;
+  gint i;
+  long min = 0, max = 0;
+  const struct
+  {
+    const gchar orig[12];
+    const gchar trans[12];
+  } alsa_track_labels[] = {
+    {
+    "Master", N_("Master")}, {
+    "Bass", N_("Bass")}, {
+    "Treble", N_("Treble")}, {
+    "PCM", N_("PCM")}, {
+    "Synth", N_("Synth")}, {
+    "Line", N_("Line-in")}, {
+    "CD", N_("CD")}, {
+    "Mic", N_("Microphone")}, {
+    "PC Speaker", N_("PC Speaker")}, {
+    "Playback", N_("Playback")}, {
+    "Capture", N_("Capture")}
+  };
+
+  name = snd_mixer_selem_get_name (element);
+  index = snd_mixer_selem_get_index (element);
+
+  GST_LOG
+      ("[%s,%u] num=%d,track_num=%d,flags=0x%08x,sw=%s,shared_mute_track=%p",
+      name, index, num, track_num, flags, (sw) ? "true" : "false",
+      shared_mute_track);
+
+  track = (GstMixerTrack *) g_object_new (GST_ALSA_MIXER_TRACK_TYPE,
+      "untranslated-label", name, "index", index, NULL);
+
+  alsa_track = (GstAlsaMixerTrack *) track;
+
+  GST_LOG ("[%s] created new mixer track %p", name, track);
+
+  /* This reflects the assumptions used for GstAlsaMixerTrack */
+  if (!(! !(flags & GST_MIXER_TRACK_OUTPUT) ^ ! !(flags &
+              GST_MIXER_TRACK_INPUT))) {
+    GST_ERROR ("Mixer track must be either output or input!");
+    g_return_val_if_reached (NULL);
+  }
+
+  track->flags = flags;
+  alsa_track->element = element;
+  alsa_track->shared_mute = shared_mute_track;
+  alsa_track->track_num = track_num;
+  alsa_track->alsa_channels = 0;
+
+  gst_alsa_mixer_track_update_alsa_capabilities (alsa_track);
+
+  if (flags & GST_MIXER_TRACK_OUTPUT) {
+    while (alsa_track->alsa_channels < GST_ALSA_MAX_CHANNELS &&
+        snd_mixer_selem_has_playback_channel (element,
+            alsa_track->alsa_channels)) {
+      alsa_track->alsa_channels++;
+    }
+    GST_LOG ("[%s] %d output channels", name, alsa_track->alsa_channels);
+  } else if (flags & GST_MIXER_TRACK_INPUT) {
+    while (alsa_track->alsa_channels < GST_ALSA_MAX_CHANNELS &&
+        snd_mixer_selem_has_capture_channel (element,
+            alsa_track->alsa_channels)) {
+      alsa_track->alsa_channels++;
+    }
+    GST_LOG ("[%s] %d input channels", name, alsa_track->alsa_channels);
+  } else {
+    g_assert_not_reached ();
+  }
+
+  if (sw)
+    track->num_channels = 0;
+  else
+    track->num_channels = alsa_track->alsa_channels;
+
+  /* translate the name if we can */
+  label = name;
+  for (i = 0; i < G_N_ELEMENTS (alsa_track_labels); ++i) {
+    if (g_utf8_collate (label, alsa_track_labels[i].orig) == 0) {
+      label = _(alsa_track_labels[i].trans);
+      break;
+    }
+  }
+
+  if (num == 0) {
+    track->label = g_strdup_printf ("%s%s%s", label,
+        append_capture ? " " : "", append_capture ? _("Capture") : "");
+  } else {
+    track->label = g_strdup_printf ("%s%s%s %d", label,
+        append_capture ? " " : "", append_capture ? _("Capture") : "", num);
+  }
+
+  /* set volume information */
+  if (track->num_channels > 0) {
+    if ((flags & GST_MIXER_TRACK_OUTPUT))
+      snd_mixer_selem_get_playback_volume_range (element, &min, &max);
+    else
+      snd_mixer_selem_get_capture_volume_range (element, &min, &max);
+  }
+  track->min_volume = (gint) min;
+  track->max_volume = (gint) max;
+
+  for (i = 0; i < track->num_channels; i++) {
+    long tmp = 0;
+
+    if (flags & GST_MIXER_TRACK_OUTPUT)
+      snd_mixer_selem_get_playback_volume (element, i, &tmp);
+    else
+      snd_mixer_selem_get_capture_volume (element, i, &tmp);
+
+    alsa_track->volumes[i] = (gint) tmp;
+  }
+
+  gst_alsa_mixer_track_update (alsa_track);
+
+  return track;
+}
+
+void
+gst_alsa_mixer_track_update (GstAlsaMixerTrack * alsa_track)
+{
+  GstMixerTrack *track = (GstMixerTrack *) alsa_track;
+  gint i;
+  gint audible = !(track->flags & GST_MIXER_TRACK_MUTE);
+
+  if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_PVOLUME)) {
+    /* update playback volume */
+    for (i = 0; i < track->num_channels; i++) {
+      long vol = 0;
+
+      snd_mixer_selem_get_playback_volume (alsa_track->element, i, &vol);
+      alsa_track->volumes[i] = (gint) vol;
+    }
+  }
+
+  if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_CVOLUME)) {
+    /* update capture volume */
+    for (i = 0; i < track->num_channels; i++) {
+      long vol = 0;
+
+      snd_mixer_selem_get_capture_volume (alsa_track->element, i, &vol);
+      alsa_track->volumes[i] = (gint) vol;
+    }
+  }
+
+  /* Any updates in flags? */
+  if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_PSWITCH)) {
+    int v = 0;
+
+    audible = 0;
+    for (i = 0; i < alsa_track->alsa_channels; ++i) {
+      snd_mixer_selem_get_playback_switch (alsa_track->element, i, &v);
+      audible += v;
+    }
+
+  } else if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_PVOLUME) &&
+      track->flags & GST_MIXER_TRACK_MUTE) {
+    /* check if user has raised volume with a parallel running application */
+
+    for (i = 0; i < track->num_channels; i++) {
+      long vol = 0;
+
+      snd_mixer_selem_get_playback_volume (alsa_track->element, i, &vol);
+
+      if (vol > track->min_volume) {
+        audible = 1;
+        break;
+      }
+    }
+  }
+
+  if (! !(audible) != !(track->flags & GST_MIXER_TRACK_MUTE)) {
+    if (audible) {
+      track->flags &= ~GST_MIXER_TRACK_MUTE;
+
+      if (alsa_track->shared_mute)
+        ((GstMixerTrack *) (alsa_track->shared_mute))->flags &=
+            ~GST_MIXER_TRACK_MUTE;
+    } else {
+      track->flags |= GST_MIXER_TRACK_MUTE;
+
+      if (alsa_track->shared_mute)
+        ((GstMixerTrack *) (alsa_track->shared_mute))->flags |=
+            GST_MIXER_TRACK_MUTE;
+    }
+  }
+
+  if (track->flags & GST_MIXER_TRACK_INPUT) {
+    gint recording = track->flags & GST_MIXER_TRACK_RECORD;
+
+    if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_CSWITCH)) {
+      int v = 0;
+
+      recording = 0;
+      for (i = 0; i < alsa_track->alsa_channels; ++i) {
+        snd_mixer_selem_get_capture_switch (alsa_track->element, i, &v);
+        recording += v;
+      }
+
+    } else if (alsa_track_has_cap (alsa_track, GST_ALSA_MIXER_TRACK_CVOLUME) &&
+        !(track->flags & GST_MIXER_TRACK_RECORD)) {
+      /* check if user has raised volume with a parallel running application */
+
+      for (i = 0; i < track->num_channels; i++) {
+        long vol = 0;
+
+        snd_mixer_selem_get_capture_volume (alsa_track->element, i, &vol);
+
+        if (vol > track->min_volume) {
+          recording = 1;
+          break;
+        }
+      }
+    }
+
+    if (recording)
+      track->flags |= GST_MIXER_TRACK_RECORD;
+    else
+      track->flags &= ~GST_MIXER_TRACK_RECORD;
+  }
+
+}
diff --git a/ext/alsa/gstalsamixertrack.h b/ext/alsa/gstalsamixertrack.h
new file mode 100644
index 0000000..acc64cb
--- /dev/null
+++ b/ext/alsa/gstalsamixertrack.h
@@ -0,0 +1,79 @@
+/* ALSA mixer track object.
+ * Copyright (C) 2003 Leif Johnson <leif@ambient.2y.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#ifndef __GST_ALSA_MIXER_TRACK_H__
+#define __GST_ALSA_MIXER_TRACK_H__
+
+
+#include "gstalsa.h"
+#include <gst/interfaces/mixertrack.h>
+
+
+G_BEGIN_DECLS
+
+
+#define GST_ALSA_MIXER_TRACK_TYPE               (gst_alsa_mixer_track_get_type ())
+#define GST_ALSA_MIXER_TRACK(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_MIXER_TRACK,GstAlsaMixerTrack))
+#define GST_ALSA_MIXER_TRACK_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_MIXER_TRACK,GstAlsaMixerTrackClass))
+#define GST_IS_ALSA_MIXER_TRACK(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_MIXER_TRACK))
+#define GST_IS_ALSA_MIXER_TRACK_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_MIXER_TRACK))
+#define GST_TYPE_ALSA_MIXER_TRACK               (gst_alsa_mixer_track_get_type())
+
+typedef struct _GstAlsaMixerTrack GstAlsaMixerTrack;
+typedef struct _GstAlsaMixerTrackClass GstAlsaMixerTrackClass;
+
+#define GST_ALSA_MIXER_TRACK_VOLUME         (1<<0)           /* common volume */
+#define GST_ALSA_MIXER_TRACK_PVOLUME        (1<<1)
+#define GST_ALSA_MIXER_TRACK_CVOLUME        (1<<2)
+#define GST_ALSA_MIXER_TRACK_SWITCH         (1<<3)           /* common switch */
+#define GST_ALSA_MIXER_TRACK_PSWITCH        (1<<4)
+#define GST_ALSA_MIXER_TRACK_CSWITCH        (1<<5)
+#define GST_ALSA_MIXER_TRACK_CSWITCH_EXCL   (1<<6)
+
+#define GST_ALSA_MAX_CHANNELS   (SND_MIXER_SCHN_LAST+1)
+
+struct _GstAlsaMixerTrack {
+  GstMixerTrack          parent;
+  snd_mixer_elem_t      *element;    /* the ALSA mixer element for this track */
+  GstAlsaMixerTrack     *shared_mute;  
+  gint                  track_num;
+  guint32               alsa_flags;                /* alsa track capabilities */
+  gint                  alsa_channels;  
+  gint                  capture_group;  
+  gint                  volumes[GST_ALSA_MAX_CHANNELS];
+};
+
+struct _GstAlsaMixerTrackClass {
+  GstMixerTrackClass parent;
+};
+
+GType           gst_alsa_mixer_track_get_type   (void);
+GstMixerTrack * gst_alsa_mixer_track_new        (snd_mixer_elem_t *     element,
+                                                 gint                   num,
+                                                 gint                   track_num,
+                                                 gint                   flags,
+                                                 gboolean               sw,  /* is simple switch? */
+                                                 GstAlsaMixerTrack *    shared_mute_track,
+                                                 gboolean               label_append_capture);
+void            gst_alsa_mixer_track_update      (GstAlsaMixerTrack * alsa_track);
+
+G_END_DECLS
+
+
+#endif /* __GST_ALSA_MIXER_TRACK_H__ */
diff --git a/ext/alsa/gstalsaplugin.c b/ext/alsa/gstalsaplugin.c
new file mode 100644
index 0000000..69f539d
--- /dev/null
+++ b/ext/alsa/gstalsaplugin.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2001 CodeFactory AB
+ * Copyright (C) 2001 Thomas Nyberg <thomas@codefactory.se>
+ * Copyright (C) 2001-2002 Andy Wingo <apwingo@eos.ncsu.edu>
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstalsasink.h"
+#include "gstalsasrc.h"
+#include "gstalsamixerelement.h"
+
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY (alsa_debug);
+
+/* ALSA debugging wrapper */
+static void
+gst_alsa_error_wrapper (const char *file, int line, const char *function,
+    int err, const char *fmt, ...)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  va_list args;
+  gchar *str;
+
+  va_start (args, fmt);
+  str = g_strdup_vprintf (fmt, args);
+  va_end (args);
+  /* FIXME: use GST_LEVEL_ERROR here? Currently warning is used because we're 
+   * able to catch enough of the errors that would be printed otherwise
+   */
+  gst_debug_log (alsa_debug, GST_LEVEL_WARNING, file, function, line, NULL,
+      "alsalib error: %s%s%s", str, err ? ": " : "",
+      err ? snd_strerror (err) : "");
+  g_free (str);
+#endif
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  int err;
+
+  if (!gst_element_register (plugin, "alsamixer", GST_RANK_NONE,
+          GST_TYPE_ALSA_MIXER_ELEMENT))
+    return FALSE;
+  if (!gst_element_register (plugin, "alsasrc", GST_RANK_PRIMARY,
+          GST_TYPE_ALSA_SRC))
+    return FALSE;
+  if (!gst_element_register (plugin, "alsasink", GST_RANK_PRIMARY,
+          GST_TYPE_ALSA_SINK))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (alsa_debug, "alsa", 0, "alsa plugins");
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  err = snd_lib_error_set_handler (gst_alsa_error_wrapper);
+  if (err != 0)
+    GST_WARNING ("failed to set alsa error handler");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "alsa",
+    "ALSA plugin library",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/alsa/gstalsasink.c b/ext/alsa/gstalsasink.c
new file mode 100644
index 0000000..8b1e627
--- /dev/null
+++ b/ext/alsa/gstalsasink.c
@@ -0,0 +1,1002 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * gstalsasink.c:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-alsasink
+ * @see_also: alsasrc, alsamixer
+ *
+ * This element renders raw audio samples using the ALSA api.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! alsasink
+ * ]| Play an Ogg/Vorbis file.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <getopt.h>
+#include <alsa/asoundlib.h>
+
+#include "gstalsa.h"
+#include "gstalsasink.h"
+#include "gstalsadeviceprobe.h"
+
+#include <gst/gst-i18n-plugin.h>
+
+#define DEFAULT_DEVICE		"default"
+#define DEFAULT_DEVICE_NAME	""
+#define DEFAULT_CARD_NAME	""
+#define SPDIF_PERIOD_SIZE 1536
+#define SPDIF_BUFFER_SIZE 15360
+
+enum
+{
+  PROP_0,
+  PROP_DEVICE,
+  PROP_DEVICE_NAME,
+  PROP_CARD_NAME,
+  PROP_LAST
+};
+
+static void gst_alsasink_init_interfaces (GType type);
+#define gst_alsasink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAlsaSink, gst_alsasink,
+    GST_TYPE_AUDIO_SINK, gst_alsasink_init_interfaces (g_define_type_id));
+
+static void gst_alsasink_finalise (GObject * object);
+static void gst_alsasink_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_alsasink_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstCaps *gst_alsasink_getcaps (GstBaseSink * bsink, GstCaps * filter);
+
+static gboolean gst_alsasink_open (GstAudioSink * asink);
+static gboolean gst_alsasink_prepare (GstAudioSink * asink,
+    GstRingBufferSpec * spec);
+static gboolean gst_alsasink_unprepare (GstAudioSink * asink);
+static gboolean gst_alsasink_close (GstAudioSink * asink);
+static gint gst_alsasink_write (GstAudioSink * asink, gpointer data,
+    guint length);
+static guint gst_alsasink_delay (GstAudioSink * asink);
+static void gst_alsasink_reset (GstAudioSink * asink);
+
+static gint output_ref;         /* 0    */
+static snd_output_t *output;    /* NULL */
+static GStaticMutex output_mutex = G_STATIC_MUTEX_INIT;
+
+static GstStaticPadTemplate alsasink_sink_factory =
+    GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "formats = (string) " GST_AUDIO_FORMATS_ALL ", "
+        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]; "
+        "audio/x-iec958")
+    );
+
+static void
+gst_alsasink_finalise (GObject * object)
+{
+  GstAlsaSink *sink = GST_ALSA_SINK (object);
+
+  g_free (sink->device);
+  g_mutex_free (sink->alsa_lock);
+
+  g_static_mutex_lock (&output_mutex);
+  --output_ref;
+  if (output_ref == 0) {
+    snd_output_close (output);
+    output = NULL;
+  }
+  g_static_mutex_unlock (&output_mutex);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_alsasink_init_interfaces (GType type)
+{
+  gst_alsa_type_add_device_property_probe_interface (type);
+}
+
+static void
+gst_alsasink_class_init (GstAlsaSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+  GstAudioSinkClass *gstaudiosink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+  gstaudiosink_class = (GstAudioSinkClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_alsasink_finalise;
+  gobject_class->get_property = gst_alsasink_get_property;
+  gobject_class->set_property = gst_alsasink_set_property;
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Audio sink (ALSA)", "Sink/Audio",
+      "Output to a sound card via ALSA", "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&alsasink_sink_factory));
+
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_alsasink_getcaps);
+
+  gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_alsasink_open);
+  gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_alsasink_prepare);
+  gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_alsasink_unprepare);
+  gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_alsasink_close);
+  gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_alsasink_write);
+  gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_alsasink_delay);
+  gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_alsasink_reset);
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE,
+      g_param_spec_string ("device", "Device",
+          "ALSA device, as defined in an asound configuration file",
+          DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+      g_param_spec_string ("device-name", "Device name",
+          "Human-readable name of the sound device", DEFAULT_DEVICE_NAME,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CARD_NAME,
+      g_param_spec_string ("card-name", "Card name",
+          "Human-readable name of the sound card", DEFAULT_CARD_NAME,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_alsasink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAlsaSink *sink;
+
+  sink = GST_ALSA_SINK (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+      g_free (sink->device);
+      sink->device = g_value_dup_string (value);
+      /* setting NULL restores the default device */
+      if (sink->device == NULL) {
+        sink->device = g_strdup (DEFAULT_DEVICE);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_alsasink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAlsaSink *sink;
+
+  sink = GST_ALSA_SINK (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+      g_value_set_string (value, sink->device);
+      break;
+    case PROP_DEVICE_NAME:
+      g_value_take_string (value,
+          gst_alsa_find_device_name (GST_OBJECT_CAST (sink),
+              sink->device, sink->handle, SND_PCM_STREAM_PLAYBACK));
+      break;
+    case PROP_CARD_NAME:
+      g_value_take_string (value,
+          gst_alsa_find_card_name (GST_OBJECT_CAST (sink),
+              sink->device, SND_PCM_STREAM_PLAYBACK));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_alsasink_init (GstAlsaSink * alsasink)
+{
+  GST_DEBUG_OBJECT (alsasink, "initializing alsasink");
+
+  alsasink->device = g_strdup (DEFAULT_DEVICE);
+  alsasink->handle = NULL;
+  alsasink->cached_caps = NULL;
+  alsasink->alsa_lock = g_mutex_new ();
+
+  g_static_mutex_lock (&output_mutex);
+  if (output_ref == 0) {
+    snd_output_stdio_attach (&output, stdout, 0);
+    ++output_ref;
+  }
+  g_static_mutex_unlock (&output_mutex);
+}
+
+#define CHECK(call, error) \
+G_STMT_START {                  \
+if ((err = call) < 0)           \
+  goto error;                   \
+} G_STMT_END;
+
+static GstCaps *
+gst_alsasink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+{
+  GstElementClass *element_class;
+  GstPadTemplate *pad_template;
+  GstAlsaSink *sink = GST_ALSA_SINK (bsink);
+  GstCaps *caps, *templ_caps;
+
+  if (sink->handle == NULL) {
+    GST_DEBUG_OBJECT (sink, "device not open, using template caps");
+    return NULL;                /* base class will get template caps for us */
+  }
+
+  if (sink->cached_caps) {
+    GST_LOG_OBJECT (sink, "Returning cached caps");
+    if (filter)
+      return gst_caps_intersect_full (filter, sink->cached_caps,
+          GST_CAPS_INTERSECT_FIRST);
+    else
+      return gst_caps_ref (sink->cached_caps);
+  }
+
+  element_class = GST_ELEMENT_GET_CLASS (sink);
+  pad_template = gst_element_class_get_pad_template (element_class, "sink");
+  g_return_val_if_fail (pad_template != NULL, NULL);
+
+  templ_caps = gst_pad_template_get_caps (pad_template);
+  caps = gst_alsa_probe_supported_formats (GST_OBJECT (sink), sink->handle,
+      templ_caps);
+  gst_caps_unref (templ_caps);
+
+  if (caps) {
+    sink->cached_caps = gst_caps_ref (caps);
+  }
+
+  GST_INFO_OBJECT (sink, "returning caps %" GST_PTR_FORMAT, caps);
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    return intersection;
+  } else {
+    return caps;
+  }
+}
+
+static int
+set_hwparams (GstAlsaSink * alsa)
+{
+  guint rrate;
+  gint err;
+  snd_pcm_hw_params_t *params;
+  guint period_time, buffer_time;
+
+  snd_pcm_hw_params_malloc (&params);
+
+  GST_DEBUG_OBJECT (alsa, "Negotiating to %d channels @ %d Hz (format = %s) "
+      "SPDIF (%d)", alsa->channels, alsa->rate,
+      snd_pcm_format_name (alsa->format), alsa->iec958);
+
+  /* start with requested values, if we cannot configure alsa for those values,
+   * we set these values to -1, which will leave the default alsa values */
+  buffer_time = alsa->buffer_time;
+  period_time = alsa->period_time;
+
+retry:
+  /* choose all parameters */
+  CHECK (snd_pcm_hw_params_any (alsa->handle, params), no_config);
+  /* set the interleaved read/write format */
+  CHECK (snd_pcm_hw_params_set_access (alsa->handle, params, alsa->access),
+      wrong_access);
+  /* set the sample format */
+  if (alsa->iec958) {
+    /* Try to use big endian first else fallback to le and swap bytes */
+    if (snd_pcm_hw_params_set_format (alsa->handle, params, alsa->format) < 0) {
+      alsa->format = SND_PCM_FORMAT_S16_LE;
+      alsa->need_swap = TRUE;
+      GST_DEBUG_OBJECT (alsa, "falling back to little endian with swapping");
+    } else {
+      alsa->need_swap = FALSE;
+    }
+  }
+  CHECK (snd_pcm_hw_params_set_format (alsa->handle, params, alsa->format),
+      no_sample_format);
+  /* set the count of channels */
+  CHECK (snd_pcm_hw_params_set_channels (alsa->handle, params, alsa->channels),
+      no_channels);
+  /* set the stream rate */
+  rrate = alsa->rate;
+  CHECK (snd_pcm_hw_params_set_rate_near (alsa->handle, params, &rrate, NULL),
+      no_rate);
+  if (rrate != alsa->rate)
+    goto rate_match;
+
+#ifndef GST_DISABLE_GST_DEBUG
+  /* get and dump some limits */
+  {
+    guint min, max;
+
+    snd_pcm_hw_params_get_buffer_time_min (params, &min, NULL);
+    snd_pcm_hw_params_get_buffer_time_max (params, &max, NULL);
+
+    GST_DEBUG_OBJECT (alsa, "buffer time %u, min %u, max %u",
+        alsa->buffer_time, min, max);
+
+    snd_pcm_hw_params_get_period_time_min (params, &min, NULL);
+    snd_pcm_hw_params_get_period_time_max (params, &max, NULL);
+
+    GST_DEBUG_OBJECT (alsa, "period time %u, min %u, max %u",
+        alsa->period_time, min, max);
+
+    snd_pcm_hw_params_get_periods_min (params, &min, NULL);
+    snd_pcm_hw_params_get_periods_max (params, &max, NULL);
+
+    GST_DEBUG_OBJECT (alsa, "periods min %u, max %u", min, max);
+  }
+#endif
+
+  /* now try to configure the buffer time and period time, if one
+   * of those fail, we fall back to the defaults and emit a warning. */
+  if (buffer_time != -1 && !alsa->iec958) {
+    /* set the buffer time */
+    if ((err = snd_pcm_hw_params_set_buffer_time_near (alsa->handle, params,
+                &buffer_time, NULL)) < 0) {
+      GST_ELEMENT_WARNING (alsa, RESOURCE, SETTINGS, (NULL),
+          ("Unable to set buffer time %i for playback: %s",
+              buffer_time, snd_strerror (err)));
+      /* disable buffer_time the next round */
+      buffer_time = -1;
+      goto retry;
+    }
+    GST_DEBUG_OBJECT (alsa, "buffer time %u", buffer_time);
+  }
+  if (period_time != -1 && !alsa->iec958) {
+    /* set the period time */
+    if ((err = snd_pcm_hw_params_set_period_time_near (alsa->handle, params,
+                &period_time, NULL)) < 0) {
+      GST_ELEMENT_WARNING (alsa, RESOURCE, SETTINGS, (NULL),
+          ("Unable to set period time %i for playback: %s",
+              period_time, snd_strerror (err)));
+      /* disable period_time the next round */
+      period_time = -1;
+      goto retry;
+    }
+    GST_DEBUG_OBJECT (alsa, "period time %u", period_time);
+  }
+
+  /* Set buffer size and period size manually for SPDIF */
+  if (G_UNLIKELY (alsa->iec958)) {
+    snd_pcm_uframes_t buffer_size = SPDIF_BUFFER_SIZE;
+    snd_pcm_uframes_t period_size = SPDIF_PERIOD_SIZE;
+
+    CHECK (snd_pcm_hw_params_set_buffer_size_near (alsa->handle, params,
+            &buffer_size), buffer_size);
+    CHECK (snd_pcm_hw_params_set_period_size_near (alsa->handle, params,
+            &period_size, NULL), period_size);
+  }
+
+  /* write the parameters to device */
+  CHECK (snd_pcm_hw_params (alsa->handle, params), set_hw_params);
+
+  /* now get the configured values */
+  CHECK (snd_pcm_hw_params_get_buffer_size (params, &alsa->buffer_size),
+      buffer_size);
+  CHECK (snd_pcm_hw_params_get_period_size (params, &alsa->period_size, NULL),
+      period_size);
+
+  GST_DEBUG_OBJECT (alsa, "buffer size %lu, period size %lu", alsa->buffer_size,
+      alsa->period_size);
+
+  snd_pcm_hw_params_free (params);
+  return 0;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Broken configuration for playback: no configurations available: %s",
+            snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+wrong_access:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Access type not available for playback: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_sample_format:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Sample format not available for playback: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_channels:
+  {
+    gchar *msg = NULL;
+
+    if ((alsa->channels) == 1)
+      msg = g_strdup (_("Could not open device for playback in mono mode."));
+    if ((alsa->channels) == 2)
+      msg = g_strdup (_("Could not open device for playback in stereo mode."));
+    if ((alsa->channels) > 2)
+      msg =
+          g_strdup_printf (_
+          ("Could not open device for playback in %d-channel mode."),
+          alsa->channels);
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, ("%s", msg),
+        ("%s", snd_strerror (err)));
+    g_free (msg);
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_rate:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Rate %iHz not available for playback: %s",
+            alsa->rate, snd_strerror (err)));
+    return err;
+  }
+rate_match:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Rate doesn't match (requested %iHz, get %iHz)", alsa->rate, err));
+    snd_pcm_hw_params_free (params);
+    return -EINVAL;
+  }
+buffer_size:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to get buffer size for playback: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+period_size:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to get period size for playback: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+set_hw_params:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set hw params for playback: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+}
+
+static int
+set_swparams (GstAlsaSink * alsa)
+{
+  int err;
+  snd_pcm_sw_params_t *params;
+
+  snd_pcm_sw_params_malloc (&params);
+
+  /* get the current swparams */
+  CHECK (snd_pcm_sw_params_current (alsa->handle, params), no_config);
+  /* start the transfer when the buffer is almost full: */
+  /* (buffer_size / avail_min) * avail_min */
+  CHECK (snd_pcm_sw_params_set_start_threshold (alsa->handle, params,
+          (alsa->buffer_size / alsa->period_size) * alsa->period_size),
+      start_threshold);
+
+  /* allow the transfer when at least period_size samples can be processed */
+  CHECK (snd_pcm_sw_params_set_avail_min (alsa->handle, params,
+          alsa->period_size), set_avail);
+
+#if GST_CHECK_ALSA_VERSION(1,0,16)
+  /* snd_pcm_sw_params_set_xfer_align() is deprecated, alignment is always 1 */
+#else
+  /* align all transfers to 1 sample */
+  CHECK (snd_pcm_sw_params_set_xfer_align (alsa->handle, params, 1), set_align);
+#endif
+
+  /* write the parameters to the playback device */
+  CHECK (snd_pcm_sw_params (alsa->handle, params), set_sw_params);
+
+  snd_pcm_sw_params_free (params);
+  return 0;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to determine current swparams for playback: %s",
+            snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+start_threshold:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set start threshold mode for playback: %s",
+            snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+set_avail:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set avail min for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+#if !GST_CHECK_ALSA_VERSION(1,0,16)
+set_align:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set transfer align for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+#endif
+set_sw_params:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set sw params for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+}
+
+static gboolean
+alsasink_parse_spec (GstAlsaSink * alsa, GstRingBufferSpec * spec)
+{
+  /* Initialize our boolean */
+  alsa->iec958 = FALSE;
+
+  switch (spec->type) {
+    case GST_BUFTYPE_RAW:
+      switch (GST_AUDIO_INFO_FORMAT (&spec->info)) {
+        case GST_AUDIO_FORMAT_U8:
+          alsa->format = SND_PCM_FORMAT_U8;
+          break;
+        case GST_AUDIO_FORMAT_S8:
+          alsa->format = SND_PCM_FORMAT_S8;
+          break;
+        case GST_AUDIO_FORMAT_S16LE:
+          alsa->format = SND_PCM_FORMAT_S16_LE;
+          break;
+        case GST_AUDIO_FORMAT_S16BE:
+          alsa->format = SND_PCM_FORMAT_S16_BE;
+          break;
+        case GST_AUDIO_FORMAT_U16LE:
+          alsa->format = SND_PCM_FORMAT_U16_LE;
+          break;
+        case GST_AUDIO_FORMAT_U16BE:
+          alsa->format = SND_PCM_FORMAT_U16_BE;
+          break;
+        case GST_AUDIO_FORMAT_S24_32LE:
+          alsa->format = SND_PCM_FORMAT_S24_LE;
+          break;
+        case GST_AUDIO_FORMAT_S24_32BE:
+          alsa->format = SND_PCM_FORMAT_S24_BE;
+          break;
+        case GST_AUDIO_FORMAT_U24_32LE:
+          alsa->format = SND_PCM_FORMAT_U24_LE;
+          break;
+        case GST_AUDIO_FORMAT_U24_32BE:
+          alsa->format = SND_PCM_FORMAT_U24_BE;
+          break;
+        case GST_AUDIO_FORMAT_S32LE:
+          alsa->format = SND_PCM_FORMAT_S32_LE;
+          break;
+        case GST_AUDIO_FORMAT_S32BE:
+          alsa->format = SND_PCM_FORMAT_S32_BE;
+          break;
+        case GST_AUDIO_FORMAT_U32LE:
+          alsa->format = SND_PCM_FORMAT_U32_LE;
+          break;
+        case GST_AUDIO_FORMAT_U32BE:
+          alsa->format = SND_PCM_FORMAT_U32_BE;
+          break;
+        case GST_AUDIO_FORMAT_S24LE:
+          alsa->format = SND_PCM_FORMAT_S24_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S24BE:
+          alsa->format = SND_PCM_FORMAT_S24_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U24LE:
+          alsa->format = SND_PCM_FORMAT_U24_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U24BE:
+          alsa->format = SND_PCM_FORMAT_U24_3BE;
+          break;
+        case GST_AUDIO_FORMAT_S20LE:
+          alsa->format = SND_PCM_FORMAT_S20_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S20BE:
+          alsa->format = SND_PCM_FORMAT_S20_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U20LE:
+          alsa->format = SND_PCM_FORMAT_U20_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U20BE:
+          alsa->format = SND_PCM_FORMAT_U20_3BE;
+          break;
+        case GST_AUDIO_FORMAT_S18LE:
+          alsa->format = SND_PCM_FORMAT_S18_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S18BE:
+          alsa->format = SND_PCM_FORMAT_S18_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U18LE:
+          alsa->format = SND_PCM_FORMAT_U18_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U18BE:
+          alsa->format = SND_PCM_FORMAT_U18_3BE;
+          break;
+        case GST_AUDIO_FORMAT_F32LE:
+          alsa->format = SND_PCM_FORMAT_FLOAT_LE;
+          break;
+        case GST_AUDIO_FORMAT_F32BE:
+          alsa->format = SND_PCM_FORMAT_FLOAT_BE;
+          break;
+        case GST_AUDIO_FORMAT_F64LE:
+          alsa->format = SND_PCM_FORMAT_FLOAT64_LE;
+          break;
+        case GST_AUDIO_FORMAT_F64BE:
+          alsa->format = SND_PCM_FORMAT_FLOAT64_BE;
+          break;
+        default:
+          goto error;
+      }
+      break;
+    case GST_BUFTYPE_A_LAW:
+      alsa->format = SND_PCM_FORMAT_A_LAW;
+      break;
+    case GST_BUFTYPE_MU_LAW:
+      alsa->format = SND_PCM_FORMAT_MU_LAW;
+      break;
+    case GST_BUFTYPE_IEC958:
+      alsa->format = SND_PCM_FORMAT_S16_BE;
+      alsa->iec958 = TRUE;
+      break;
+    default:
+      goto error;
+
+  }
+  alsa->rate = GST_AUDIO_INFO_RATE (&spec->info);
+  alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
+  alsa->buffer_time = spec->buffer_time;
+  alsa->period_time = spec->latency_time;
+  alsa->access = SND_PCM_ACCESS_RW_INTERLEAVED;
+
+  return TRUE;
+
+  /* ERRORS */
+error:
+  {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasink_open (GstAudioSink * asink)
+{
+  GstAlsaSink *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  /* open in non-blocking mode, we'll use snd_pcm_wait() for space to become
+   * available. */
+  CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_PLAYBACK,
+          SND_PCM_NONBLOCK), open_error);
+  GST_LOG_OBJECT (alsa, "Opened device %s", alsa->device);
+
+  return TRUE;
+
+  /* ERRORS */
+open_error:
+  {
+    if (err == -EBUSY) {
+      GST_ELEMENT_ERROR (alsa, RESOURCE, BUSY,
+          (_("Could not open audio device for playback. "
+                  "Device is being used by another application.")),
+          ("Device '%s' is busy", alsa->device));
+    } else {
+      GST_ELEMENT_ERROR (alsa, RESOURCE, OPEN_WRITE,
+          (_("Could not open audio device for playback.")),
+          ("Playback open error on device '%s': %s", alsa->device,
+              snd_strerror (err)));
+    }
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
+{
+  GstAlsaSink *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  if (spec->type == GST_BUFTYPE_IEC958) {
+    snd_pcm_close (alsa->handle);
+    alsa->handle = gst_alsa_open_iec958_pcm (GST_OBJECT (alsa));
+    if (G_UNLIKELY (!alsa->handle)) {
+      goto no_iec958;
+    }
+  }
+
+  if (!alsasink_parse_spec (alsa, spec))
+    goto spec_parse;
+
+  CHECK (set_hwparams (alsa), hw_params_failed);
+  CHECK (set_swparams (alsa), sw_params_failed);
+
+  alsa->bpf = GST_AUDIO_INFO_BPF (&spec->info);
+  spec->segsize = alsa->period_size * alsa->bpf;
+  spec->segtotal = alsa->buffer_size / alsa->period_size;
+
+  {
+    snd_output_t *out_buf = NULL;
+    char *msg = NULL;
+
+    snd_output_buffer_open (&out_buf);
+    snd_pcm_dump_hw_setup (alsa->handle, out_buf);
+    snd_output_buffer_string (out_buf, &msg);
+    GST_DEBUG_OBJECT (alsa, "Hardware setup: \n%s", msg);
+    snd_output_close (out_buf);
+    snd_output_buffer_open (&out_buf);
+    snd_pcm_dump_sw_setup (alsa->handle, out_buf);
+    snd_output_buffer_string (out_buf, &msg);
+    GST_DEBUG_OBJECT (alsa, "Software setup: \n%s", msg);
+    snd_output_close (out_buf);
+  }
+
+  return TRUE;
+
+  /* ERRORS */
+no_iec958:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, OPEN_WRITE, (NULL),
+        ("Could not open IEC958 (SPDIF) device for playback"));
+    return FALSE;
+  }
+spec_parse:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Error parsing spec"));
+    return FALSE;
+  }
+hw_params_failed:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Setting of hwparams failed: %s", snd_strerror (err)));
+    return FALSE;
+  }
+sw_params_failed:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Setting of swparams failed: %s", snd_strerror (err)));
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasink_unprepare (GstAudioSink * asink)
+{
+  GstAlsaSink *alsa;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  snd_pcm_drop (alsa->handle);
+  snd_pcm_hw_free (alsa->handle);
+
+  return TRUE;
+}
+
+static gboolean
+gst_alsasink_close (GstAudioSink * asink)
+{
+  GstAlsaSink *alsa = GST_ALSA_SINK (asink);
+
+  if (alsa->handle) {
+    snd_pcm_close (alsa->handle);
+    alsa->handle = NULL;
+  }
+  gst_caps_replace (&alsa->cached_caps, NULL);
+
+  return TRUE;
+}
+
+
+/*
+ *   Underrun and suspend recovery
+ */
+static gint
+xrun_recovery (GstAlsaSink * alsa, snd_pcm_t * handle, gint err)
+{
+  GST_DEBUG_OBJECT (alsa, "xrun recovery %d", err);
+
+  if (err == -EPIPE) {          /* under-run */
+    err = snd_pcm_prepare (handle);
+    if (err < 0)
+      GST_WARNING_OBJECT (alsa,
+          "Can't recovery from underrun, prepare failed: %s",
+          snd_strerror (err));
+    return 0;
+  } else if (err == -ESTRPIPE) {
+    while ((err = snd_pcm_resume (handle)) == -EAGAIN)
+      g_usleep (100);           /* wait until the suspend flag is released */
+
+    if (err < 0) {
+      err = snd_pcm_prepare (handle);
+      if (err < 0)
+        GST_WARNING_OBJECT (alsa,
+            "Can't recovery from suspend, prepare failed: %s",
+            snd_strerror (err));
+    }
+    return 0;
+  }
+  return err;
+}
+
+static gint
+gst_alsasink_write (GstAudioSink * asink, gpointer data, guint length)
+{
+  GstAlsaSink *alsa;
+  gint err;
+  gint cptr;
+  gint16 *ptr = data;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  if (alsa->iec958 && alsa->need_swap) {
+    guint i;
+
+    GST_DEBUG_OBJECT (asink, "swapping bytes");
+    for (i = 0; i < length / 2; i++) {
+      ptr[i] = GUINT16_SWAP_LE_BE (ptr[i]);
+    }
+  }
+
+  GST_LOG_OBJECT (asink, "received audio samples buffer of %u bytes", length);
+
+  cptr = length / alsa->bpf;
+
+  GST_ALSA_SINK_LOCK (asink);
+  while (cptr > 0) {
+    /* start by doing a blocking wait for free space. Set the timeout
+     * to 4 times the period time */
+    err = snd_pcm_wait (alsa->handle, (4 * alsa->period_time / 1000));
+    if (err < 0) {
+      GST_DEBUG_OBJECT (asink, "wait error, %d", err);
+    } else {
+      err = snd_pcm_writei (alsa->handle, ptr, cptr);
+    }
+
+    GST_DEBUG_OBJECT (asink, "written %d frames out of %d", err, cptr);
+    if (err < 0) {
+      GST_DEBUG_OBJECT (asink, "Write error: %s", snd_strerror (err));
+      if (err == -EAGAIN) {
+        continue;
+      } else if (xrun_recovery (alsa, alsa->handle, err) < 0) {
+        goto write_error;
+      }
+      continue;
+    }
+
+    ptr += snd_pcm_frames_to_bytes (alsa->handle, err);
+    cptr -= err;
+  }
+  GST_ALSA_SINK_UNLOCK (asink);
+
+  return length - (cptr * alsa->bpf);
+
+write_error:
+  {
+    GST_ALSA_SINK_UNLOCK (asink);
+    return length;              /* skip one period */
+  }
+}
+
+static guint
+gst_alsasink_delay (GstAudioSink * asink)
+{
+  GstAlsaSink *alsa;
+  snd_pcm_sframes_t delay;
+  int res;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  res = snd_pcm_delay (alsa->handle, &delay);
+  if (G_UNLIKELY (res < 0)) {
+    /* on errors, report 0 delay */
+    GST_DEBUG_OBJECT (alsa, "snd_pcm_delay returned %d", res);
+    delay = 0;
+  }
+  if (G_UNLIKELY (delay < 0)) {
+    /* make sure we never return a negative delay */
+    GST_WARNING_OBJECT (alsa, "snd_pcm_delay returned negative delay");
+    delay = 0;
+  }
+
+  return delay;
+}
+
+static void
+gst_alsasink_reset (GstAudioSink * asink)
+{
+  GstAlsaSink *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SINK (asink);
+
+  GST_ALSA_SINK_LOCK (asink);
+  GST_DEBUG_OBJECT (alsa, "drop");
+  CHECK (snd_pcm_drop (alsa->handle), drop_error);
+  GST_DEBUG_OBJECT (alsa, "prepare");
+  CHECK (snd_pcm_prepare (alsa->handle), prepare_error);
+  GST_DEBUG_OBJECT (alsa, "reset done");
+  GST_ALSA_SINK_UNLOCK (asink);
+
+  return;
+
+  /* ERRORS */
+drop_error:
+  {
+    GST_ERROR_OBJECT (alsa, "alsa-reset: pcm drop error: %s",
+        snd_strerror (err));
+    GST_ALSA_SINK_UNLOCK (asink);
+    return;
+  }
+prepare_error:
+  {
+    GST_ERROR_OBJECT (alsa, "alsa-reset: pcm prepare error: %s",
+        snd_strerror (err));
+    GST_ALSA_SINK_UNLOCK (asink);
+    return;
+  }
+}
diff --git a/ext/alsa/gstalsasink.h b/ext/alsa/gstalsasink.h
new file mode 100644
index 0000000..a4bcdbe
--- /dev/null
+++ b/ext/alsa/gstalsasink.h
@@ -0,0 +1,86 @@
+/* GStreamer
+ * Copyright (C)  2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstalsasink.h: 
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_ALSASINK_H__
+#define __GST_ALSASINK_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiosink.h>
+#include <alsa/asoundlib.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ALSA_SINK            (gst_alsasink_get_type())
+#define GST_ALSA_SINK(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_SINK,GstAlsaSink))
+#define GST_ALSA_SINK_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_SINK,GstAlsaSinkClass))
+#define GST_IS_ALSA_SINK(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_SINK))
+#define GST_IS_ALSA_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_SINK))
+#define GST_ALSA_SINK_CAST(obj)       ((GstAlsaSink *) (obj))
+
+typedef struct _GstAlsaSink GstAlsaSink;
+typedef struct _GstAlsaSinkClass GstAlsaSinkClass;
+
+#define GST_ALSA_SINK_GET_LOCK(obj)	(GST_ALSA_SINK_CAST (obj)->alsa_lock)
+#define GST_ALSA_SINK_LOCK(obj)	        (g_mutex_lock (GST_ALSA_SINK_GET_LOCK (obj)))
+#define GST_ALSA_SINK_UNLOCK(obj)	(g_mutex_unlock (GST_ALSA_SINK_GET_LOCK (obj)))
+
+/**
+ * GstAlsaSink:
+ *
+ * Opaque data structure
+ */
+struct _GstAlsaSink {
+  GstAudioSink    sink;
+
+  gchar                 *device;
+
+  snd_pcm_t             *handle;
+  snd_pcm_hw_params_t   *hwparams;
+  snd_pcm_sw_params_t   *swparams;
+
+  snd_pcm_access_t access;
+  snd_pcm_format_t format;
+  guint rate;
+  guint channels;
+  gint bpf;
+  gboolean iec958;
+  gboolean need_swap;
+
+  guint buffer_time;
+  guint period_time;
+  snd_pcm_uframes_t buffer_size;
+  snd_pcm_uframes_t period_size;
+
+  GstCaps *cached_caps;
+
+  GMutex *alsa_lock;
+};
+
+struct _GstAlsaSinkClass {
+  GstAudioSinkClass parent_class;
+};
+
+GType gst_alsasink_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_ALSASINK_H__ */
diff --git a/ext/alsa/gstalsasrc.c b/ext/alsa/gstalsasrc.c
new file mode 100644
index 0000000..cba9504
--- /dev/null
+++ b/ext/alsa/gstalsasrc.c
@@ -0,0 +1,996 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstalsasrc.c:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-alsasrc
+ * @see_also: alsasink, alsamixer
+ *
+ * This element reads data from an audio card using the ALSA API.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
+ * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <getopt.h>
+#include <alsa/asoundlib.h>
+
+#include "gstalsasrc.h"
+#include "gstalsadeviceprobe.h"
+
+#include <gst/gst-i18n-plugin.h>
+
+#define DEFAULT_PROP_DEVICE		"default"
+#define DEFAULT_PROP_DEVICE_NAME	""
+#define DEFAULT_PROP_CARD_NAME	        ""
+
+enum
+{
+  PROP_0,
+  PROP_DEVICE,
+  PROP_DEVICE_NAME,
+  PROP_CARD_NAME,
+  PROP_LAST
+};
+
+static void gst_alsasrc_init_interfaces (GType type);
+#define gst_alsasrc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAlsaSrc, gst_alsasrc,
+    GST_TYPE_AUDIO_SRC, gst_alsasrc_init_interfaces (g_define_type_id));
+
+GST_IMPLEMENT_ALSA_MIXER_METHODS (GstAlsaSrc, gst_alsasrc_mixer);
+
+static void gst_alsasrc_finalize (GObject * object);
+static void gst_alsasrc_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_alsasrc_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstCaps *gst_alsasrc_getcaps (GstBaseSrc * bsrc, GstCaps * filter);
+
+static gboolean gst_alsasrc_open (GstAudioSrc * asrc);
+static gboolean gst_alsasrc_prepare (GstAudioSrc * asrc,
+    GstRingBufferSpec * spec);
+static gboolean gst_alsasrc_unprepare (GstAudioSrc * asrc);
+static gboolean gst_alsasrc_close (GstAudioSrc * asrc);
+static guint gst_alsasrc_read (GstAudioSrc * asrc, gpointer data, guint length);
+static guint gst_alsasrc_delay (GstAudioSrc * asrc);
+static void gst_alsasrc_reset (GstAudioSrc * asrc);
+static GstStateChangeReturn gst_alsasrc_change_state (GstElement * element,
+    GstStateChange transition);
+static GstFlowReturn gst_alsasrc_create (GstBaseSrc * bsrc, guint64 offset,
+    guint length, GstBuffer ** outbuf);
+static GstClockTime gst_alsasrc_get_timestamp (GstAlsaSrc * src);
+
+
+/* AlsaSrc signals and args */
+enum
+{
+  LAST_SIGNAL
+};
+
+#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+# define ALSA_SRC_FACTORY_ENDIANNESS   "LITTLE_ENDIAN, BIG_ENDIAN"
+#else
+# define ALSA_SRC_FACTORY_ENDIANNESS   "BIG_ENDIAN, LITTLE_ENDIAN"
+#endif
+
+static GstStaticPadTemplate alsasrc_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_FORMATS_ALL ", "
+        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]")
+    );
+
+static void
+gst_alsasrc_finalize (GObject * object)
+{
+  GstAlsaSrc *src = GST_ALSA_SRC (object);
+
+  g_free (src->device);
+  g_mutex_free (src->alsa_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_alsasrc_init_interfaces (GType type)
+{
+  static const GInterfaceInfo mixer_iface_info = {
+    (GInterfaceInitFunc) gst_alsasrc_mixer_interface_init,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_MIXER, &mixer_iface_info);
+
+  gst_alsa_type_add_device_property_probe_interface (type);
+}
+
+static void
+gst_alsasrc_class_init (GstAlsaSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstAudioSrcClass *gstaudiosrc_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstaudiosrc_class = (GstAudioSrcClass *) klass;
+
+  gobject_class->finalize = gst_alsasrc_finalize;
+  gobject_class->get_property = gst_alsasrc_get_property;
+  gobject_class->set_property = gst_alsasrc_set_property;
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Audio source (ALSA)", "Source/Audio",
+      "Read from a sound card via ALSA", "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&alsasrc_src_factory));
+
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_alsasrc_change_state);
+
+  gstbasesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_alsasrc_getcaps);
+  gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_alsasrc_create);
+
+  gstaudiosrc_class->open = GST_DEBUG_FUNCPTR (gst_alsasrc_open);
+  gstaudiosrc_class->prepare = GST_DEBUG_FUNCPTR (gst_alsasrc_prepare);
+  gstaudiosrc_class->unprepare = GST_DEBUG_FUNCPTR (gst_alsasrc_unprepare);
+  gstaudiosrc_class->close = GST_DEBUG_FUNCPTR (gst_alsasrc_close);
+  gstaudiosrc_class->read = GST_DEBUG_FUNCPTR (gst_alsasrc_read);
+  gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_alsasrc_delay);
+  gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_alsasrc_reset);
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE,
+      g_param_spec_string ("device", "Device",
+          "ALSA device, as defined in an asound configuration file",
+          DEFAULT_PROP_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+      g_param_spec_string ("device-name", "Device name",
+          "Human-readable name of the sound device",
+          DEFAULT_PROP_DEVICE_NAME, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CARD_NAME,
+      g_param_spec_string ("card-name", "Card name",
+          "Human-readable name of the sound card",
+          DEFAULT_PROP_CARD_NAME, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+}
+
+static GstClockTime
+gst_alsasrc_get_timestamp (GstAlsaSrc * src)
+{
+  snd_pcm_status_t *status;
+  snd_htimestamp_t tstamp;
+  GstClockTime timestamp;
+  snd_pcm_uframes_t availmax;
+
+  GST_DEBUG_OBJECT (src, "Getting alsa timestamp!");
+
+  if (!src) {
+    GST_ERROR_OBJECT (src, "No alsa handle created yet !");
+    return 0;
+  }
+
+  if (snd_pcm_status_malloc (&status) != 0) {
+    GST_ERROR_OBJECT (src, "snd_pcm_status_malloc failed");
+  }
+
+  if (snd_pcm_status (src->handle, status) != 0) {
+    GST_ERROR_OBJECT (src, "snd_pcm_status failed");
+  }
+
+  /* get high resolution time stamp from driver */
+  snd_pcm_status_get_htstamp (status, &tstamp);
+  timestamp = GST_TIMESPEC_TO_TIME (tstamp);
+
+  /* Max available frames sets the depth of the buffer */
+  availmax = snd_pcm_status_get_avail_max (status);
+
+  /* Compensate the fact that the timestamp references the last sample */
+  timestamp -= gst_util_uint64_scale_int (availmax * 2, GST_SECOND, src->rate);
+  /* Compensate for the delay until the package is available */
+  timestamp += gst_util_uint64_scale_int (snd_pcm_status_get_delay (status),
+      GST_SECOND, src->rate);
+
+  snd_pcm_status_free (status);
+
+  GST_DEBUG_OBJECT (src, "ALSA timestamp : %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+  return timestamp;
+}
+
+static void
+gst_alsasrc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAlsaSrc *src;
+
+  src = GST_ALSA_SRC (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+      g_free (src->device);
+      src->device = g_value_dup_string (value);
+      if (src->device == NULL) {
+        src->device = g_strdup (DEFAULT_PROP_DEVICE);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_alsasrc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAlsaSrc *src;
+
+  src = GST_ALSA_SRC (object);
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+      g_value_set_string (value, src->device);
+      break;
+    case PROP_DEVICE_NAME:
+      g_value_take_string (value,
+          gst_alsa_find_device_name (GST_OBJECT_CAST (src),
+              src->device, src->handle, SND_PCM_STREAM_CAPTURE));
+      break;
+    case PROP_CARD_NAME:
+      g_value_take_string (value,
+          gst_alsa_find_card_name (GST_OBJECT_CAST (src),
+              src->device, SND_PCM_STREAM_CAPTURE));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_alsasrc_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (element);
+  GstAlsaSrc *asrc = GST_ALSA_SRC (element);
+  GstClock *clk;
+
+  switch (transition) {
+      /* Show the compiler that we care */
+    case GST_STATE_CHANGE_NULL_TO_READY:
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      clk = src->clock;
+      asrc->driver_timestamps = FALSE;
+      if (GST_IS_SYSTEM_CLOCK (clk)) {
+        gint clocktype;
+        g_object_get (clk, "clock-type", &clocktype, NULL);
+        if (clocktype == GST_CLOCK_TYPE_MONOTONIC) {
+          asrc->driver_timestamps = TRUE;
+        }
+      }
+      break;
+  }
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_alsasrc_create (GstBaseSrc * bsrc, guint64 offset, guint length,
+    GstBuffer ** outbuf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstAlsaSrc *asrc = GST_ALSA_SRC (bsrc);
+
+  ret =
+      GST_BASE_SRC_CLASS (parent_class)->create (bsrc, offset, length, outbuf);
+  if (asrc->driver_timestamps == TRUE && *outbuf) {
+    GST_BUFFER_TIMESTAMP (*outbuf) =
+        gst_alsasrc_get_timestamp ((GstAlsaSrc *) bsrc);
+  }
+
+  return ret;
+}
+
+static void
+gst_alsasrc_init (GstAlsaSrc * alsasrc)
+{
+  GST_DEBUG_OBJECT (alsasrc, "initializing");
+
+  alsasrc->device = g_strdup (DEFAULT_PROP_DEVICE);
+  alsasrc->cached_caps = NULL;
+  alsasrc->driver_timestamps = FALSE;
+
+  alsasrc->alsa_lock = g_mutex_new ();
+}
+
+#define CHECK(call, error) \
+G_STMT_START {                  \
+if ((err = call) < 0)           \
+  goto error;                   \
+} G_STMT_END;
+
+
+static GstCaps *
+gst_alsasrc_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
+{
+  GstElementClass *element_class;
+  GstPadTemplate *pad_template;
+  GstAlsaSrc *src;
+  GstCaps *caps, *templ_caps;
+
+  src = GST_ALSA_SRC (bsrc);
+
+  if (src->handle == NULL) {
+    GST_DEBUG_OBJECT (src, "device not open, using template caps");
+    return NULL;                /* base class will get template caps for us */
+  }
+
+  if (src->cached_caps) {
+    GST_LOG_OBJECT (src, "Returning cached caps");
+    if (filter)
+      return gst_caps_intersect_full (filter, src->cached_caps,
+          GST_CAPS_INTERSECT_FIRST);
+    else
+      return gst_caps_ref (src->cached_caps);
+  }
+
+  element_class = GST_ELEMENT_GET_CLASS (src);
+  pad_template = gst_element_class_get_pad_template (element_class, "src");
+  g_return_val_if_fail (pad_template != NULL, NULL);
+
+  templ_caps = gst_pad_template_get_caps (pad_template);
+  caps = gst_alsa_probe_supported_formats (GST_OBJECT (src), src->handle,
+      templ_caps);
+  gst_caps_unref (templ_caps);
+
+  if (caps) {
+    src->cached_caps = gst_caps_ref (caps);
+  }
+
+  GST_INFO_OBJECT (src, "returning caps %" GST_PTR_FORMAT, caps);
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    return intersection;
+  } else {
+    return caps;
+  }
+}
+
+static int
+set_hwparams (GstAlsaSrc * alsa)
+{
+  guint rrate;
+  gint err;
+  snd_pcm_hw_params_t *params;
+
+  snd_pcm_hw_params_malloc (&params);
+
+  /* choose all parameters */
+  CHECK (snd_pcm_hw_params_any (alsa->handle, params), no_config);
+  /* set the interleaved read/write format */
+  CHECK (snd_pcm_hw_params_set_access (alsa->handle, params, alsa->access),
+      wrong_access);
+  /* set the sample format */
+  CHECK (snd_pcm_hw_params_set_format (alsa->handle, params, alsa->format),
+      no_sample_format);
+  /* set the count of channels */
+  CHECK (snd_pcm_hw_params_set_channels (alsa->handle, params, alsa->channels),
+      no_channels);
+  /* set the stream rate */
+  rrate = alsa->rate;
+  CHECK (snd_pcm_hw_params_set_rate_near (alsa->handle, params, &rrate, NULL),
+      no_rate);
+  if (rrate != alsa->rate)
+    goto rate_match;
+
+  if (alsa->buffer_time != -1) {
+    /* set the buffer time */
+    CHECK (snd_pcm_hw_params_set_buffer_time_near (alsa->handle, params,
+            &alsa->buffer_time, NULL), buffer_time);
+  }
+  if (alsa->period_time != -1) {
+    /* set the period time */
+    CHECK (snd_pcm_hw_params_set_period_time_near (alsa->handle, params,
+            &alsa->period_time, NULL), period_time);
+  }
+
+  /* write the parameters to device */
+  CHECK (snd_pcm_hw_params (alsa->handle, params), set_hw_params);
+
+  CHECK (snd_pcm_hw_params_get_buffer_size (params, &alsa->buffer_size),
+      buffer_size);
+
+  CHECK (snd_pcm_hw_params_get_period_size (params, &alsa->period_size, NULL),
+      period_size);
+
+  snd_pcm_hw_params_free (params);
+  return 0;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Broken configuration for recording: no configurations available: %s",
+            snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+wrong_access:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Access type not available for recording: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_sample_format:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Sample format not available for recording: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_channels:
+  {
+    gchar *msg = NULL;
+
+    if ((alsa->channels) == 1)
+      msg = g_strdup (_("Could not open device for recording in mono mode."));
+    if ((alsa->channels) == 2)
+      msg = g_strdup (_("Could not open device for recording in stereo mode."));
+    if ((alsa->channels) > 2)
+      msg =
+          g_strdup_printf (_
+          ("Could not open device for recording in %d-channel mode"),
+          alsa->channels);
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, ("%s", msg),
+        ("%s", snd_strerror (err)));
+    g_free (msg);
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+no_rate:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Rate %iHz not available for recording: %s",
+            alsa->rate, snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+rate_match:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Rate doesn't match (requested %iHz, get %iHz)", alsa->rate, err));
+    snd_pcm_hw_params_free (params);
+    return -EINVAL;
+  }
+buffer_time:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set buffer time %i for recording: %s",
+            alsa->buffer_time, snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+buffer_size:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to get buffer size for recording: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+period_time:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set period time %i for recording: %s", alsa->period_time,
+            snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+period_size:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to get period size for recording: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+set_hw_params:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set hw params for recording: %s", snd_strerror (err)));
+    snd_pcm_hw_params_free (params);
+    return err;
+  }
+}
+
+static int
+set_swparams (GstAlsaSrc * alsa)
+{
+  int err;
+  snd_pcm_sw_params_t *params;
+
+  snd_pcm_sw_params_malloc (&params);
+
+  /* get the current swparams */
+  CHECK (snd_pcm_sw_params_current (alsa->handle, params), no_config);
+  /* allow the transfer when at least period_size samples can be processed */
+  CHECK (snd_pcm_sw_params_set_avail_min (alsa->handle, params,
+          alsa->period_size), set_avail);
+  /* start the transfer on first read */
+  CHECK (snd_pcm_sw_params_set_start_threshold (alsa->handle, params,
+          0), start_threshold);
+
+#if GST_CHECK_ALSA_VERSION(1,0,16)
+  /* snd_pcm_sw_params_set_xfer_align() is deprecated, alignment is always 1 */
+#else
+  /* align all transfers to 1 sample */
+  CHECK (snd_pcm_sw_params_set_xfer_align (alsa->handle, params, 1), set_align);
+#endif
+
+  /* write the parameters to the recording device */
+  CHECK (snd_pcm_sw_params (alsa->handle, params), set_sw_params);
+
+  snd_pcm_sw_params_free (params);
+  return 0;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to determine current swparams for playback: %s",
+            snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+start_threshold:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set start threshold mode for playback: %s",
+            snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+set_avail:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set avail min for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+#if !GST_CHECK_ALSA_VERSION(1,0,16)
+set_align:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set transfer align for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+#endif
+set_sw_params:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Unable to set sw params for playback: %s", snd_strerror (err)));
+    snd_pcm_sw_params_free (params);
+    return err;
+  }
+}
+
+static gboolean
+alsasrc_parse_spec (GstAlsaSrc * alsa, GstRingBufferSpec * spec)
+{
+  switch (spec->type) {
+    case GST_BUFTYPE_RAW:
+      switch (GST_AUDIO_INFO_FORMAT (&spec->info)) {
+        case GST_AUDIO_FORMAT_U8:
+          alsa->format = SND_PCM_FORMAT_U8;
+          break;
+        case GST_AUDIO_FORMAT_S8:
+          alsa->format = SND_PCM_FORMAT_S8;
+          break;
+        case GST_AUDIO_FORMAT_S16LE:
+          alsa->format = SND_PCM_FORMAT_S16_LE;
+          break;
+        case GST_AUDIO_FORMAT_S16BE:
+          alsa->format = SND_PCM_FORMAT_S16_BE;
+          break;
+        case GST_AUDIO_FORMAT_U16LE:
+          alsa->format = SND_PCM_FORMAT_U16_LE;
+          break;
+        case GST_AUDIO_FORMAT_U16BE:
+          alsa->format = SND_PCM_FORMAT_U16_BE;
+          break;
+        case GST_AUDIO_FORMAT_S24_32LE:
+          alsa->format = SND_PCM_FORMAT_S24_LE;
+          break;
+        case GST_AUDIO_FORMAT_S24_32BE:
+          alsa->format = SND_PCM_FORMAT_S24_BE;
+          break;
+        case GST_AUDIO_FORMAT_U24_32LE:
+          alsa->format = SND_PCM_FORMAT_U24_LE;
+          break;
+        case GST_AUDIO_FORMAT_U24_32BE:
+          alsa->format = SND_PCM_FORMAT_U24_BE;
+          break;
+        case GST_AUDIO_FORMAT_S32LE:
+          alsa->format = SND_PCM_FORMAT_S32_LE;
+          break;
+        case GST_AUDIO_FORMAT_S32BE:
+          alsa->format = SND_PCM_FORMAT_S32_BE;
+          break;
+        case GST_AUDIO_FORMAT_U32LE:
+          alsa->format = SND_PCM_FORMAT_U32_LE;
+          break;
+        case GST_AUDIO_FORMAT_U32BE:
+          alsa->format = SND_PCM_FORMAT_U32_BE;
+          break;
+        case GST_AUDIO_FORMAT_S24LE:
+          alsa->format = SND_PCM_FORMAT_S24_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S24BE:
+          alsa->format = SND_PCM_FORMAT_S24_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U24LE:
+          alsa->format = SND_PCM_FORMAT_U24_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U24BE:
+          alsa->format = SND_PCM_FORMAT_U24_3BE;
+          break;
+        case GST_AUDIO_FORMAT_S20LE:
+          alsa->format = SND_PCM_FORMAT_S20_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S20BE:
+          alsa->format = SND_PCM_FORMAT_S20_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U20LE:
+          alsa->format = SND_PCM_FORMAT_U20_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U20BE:
+          alsa->format = SND_PCM_FORMAT_U20_3BE;
+          break;
+        case GST_AUDIO_FORMAT_S18LE:
+          alsa->format = SND_PCM_FORMAT_S18_3LE;
+          break;
+        case GST_AUDIO_FORMAT_S18BE:
+          alsa->format = SND_PCM_FORMAT_S18_3BE;
+          break;
+        case GST_AUDIO_FORMAT_U18LE:
+          alsa->format = SND_PCM_FORMAT_U18_3LE;
+          break;
+        case GST_AUDIO_FORMAT_U18BE:
+          alsa->format = SND_PCM_FORMAT_U18_3BE;
+          break;
+        case GST_AUDIO_FORMAT_F32LE:
+          alsa->format = SND_PCM_FORMAT_FLOAT_LE;
+          break;
+        case GST_AUDIO_FORMAT_F32BE:
+          alsa->format = SND_PCM_FORMAT_FLOAT_BE;
+          break;
+        case GST_AUDIO_FORMAT_F64LE:
+          alsa->format = SND_PCM_FORMAT_FLOAT64_LE;
+          break;
+        case GST_AUDIO_FORMAT_F64BE:
+          alsa->format = SND_PCM_FORMAT_FLOAT64_BE;
+          break;
+        default:
+          goto error;
+      }
+      break;
+    case GST_BUFTYPE_A_LAW:
+      alsa->format = SND_PCM_FORMAT_A_LAW;
+      break;
+    case GST_BUFTYPE_MU_LAW:
+      alsa->format = SND_PCM_FORMAT_MU_LAW;
+      break;
+    default:
+      goto error;
+
+  }
+  alsa->rate = GST_AUDIO_INFO_RATE (&spec->info);
+  alsa->channels = GST_AUDIO_INFO_CHANNELS (&spec->info);
+  alsa->buffer_time = spec->buffer_time;
+  alsa->period_time = spec->latency_time;
+  alsa->access = SND_PCM_ACCESS_RW_INTERLEAVED;
+
+  return TRUE;
+
+  /* ERRORS */
+error:
+  {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasrc_open (GstAudioSrc * asrc)
+{
+  GstAlsaSrc *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_CAPTURE,
+          SND_PCM_NONBLOCK), open_error);
+
+  if (!alsa->mixer)
+    alsa->mixer = gst_alsa_mixer_new (alsa->device, GST_ALSA_MIXER_CAPTURE);
+
+  return TRUE;
+
+  /* ERRORS */
+open_error:
+  {
+    if (err == -EBUSY) {
+      GST_ELEMENT_ERROR (alsa, RESOURCE, BUSY,
+          (_("Could not open audio device for recording. "
+                  "Device is being used by another application.")),
+          ("Device '%s' is busy", alsa->device));
+    } else {
+      GST_ELEMENT_ERROR (alsa, RESOURCE, OPEN_READ,
+          (_("Could not open audio device for recording.")),
+          ("Recording open error on device '%s': %s", alsa->device,
+              snd_strerror (err)));
+    }
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasrc_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
+{
+  GstAlsaSrc *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  if (!alsasrc_parse_spec (alsa, spec))
+    goto spec_parse;
+
+  CHECK (snd_pcm_nonblock (alsa->handle, 0), non_block);
+
+  CHECK (set_hwparams (alsa), hw_params_failed);
+  CHECK (set_swparams (alsa), sw_params_failed);
+  CHECK (snd_pcm_prepare (alsa->handle), prepare_failed);
+
+  alsa->bpf = GST_AUDIO_INFO_BPF (&spec->info);
+  spec->segsize = alsa->period_size * alsa->bpf;
+  spec->segtotal = alsa->buffer_size / alsa->period_size;
+
+  return TRUE;
+
+  /* ERRORS */
+spec_parse:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Error parsing spec"));
+    return FALSE;
+  }
+non_block:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Could not set device to blocking: %s", snd_strerror (err)));
+    return FALSE;
+  }
+hw_params_failed:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Setting of hwparams failed: %s", snd_strerror (err)));
+    return FALSE;
+  }
+sw_params_failed:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Setting of swparams failed: %s", snd_strerror (err)));
+    return FALSE;
+  }
+prepare_failed:
+  {
+    GST_ELEMENT_ERROR (alsa, RESOURCE, SETTINGS, (NULL),
+        ("Prepare failed: %s", snd_strerror (err)));
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_alsasrc_unprepare (GstAudioSrc * asrc)
+{
+  GstAlsaSrc *alsa;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  snd_pcm_drop (alsa->handle);
+  snd_pcm_hw_free (alsa->handle);
+  snd_pcm_nonblock (alsa->handle, 1);
+
+  return TRUE;
+}
+
+static gboolean
+gst_alsasrc_close (GstAudioSrc * asrc)
+{
+  GstAlsaSrc *alsa = GST_ALSA_SRC (asrc);
+
+  snd_pcm_close (alsa->handle);
+  alsa->handle = NULL;
+
+  if (alsa->mixer) {
+    gst_alsa_mixer_free (alsa->mixer);
+    alsa->mixer = NULL;
+  }
+
+  gst_caps_replace (&alsa->cached_caps, NULL);
+
+  return TRUE;
+}
+
+/*
+ *   Underrun and suspend recovery
+ */
+static gint
+xrun_recovery (GstAlsaSrc * alsa, snd_pcm_t * handle, gint err)
+{
+  GST_DEBUG_OBJECT (alsa, "xrun recovery %d", err);
+
+  if (err == -EPIPE) {          /* under-run */
+    err = snd_pcm_prepare (handle);
+    if (err < 0)
+      GST_WARNING_OBJECT (alsa,
+          "Can't recovery from underrun, prepare failed: %s",
+          snd_strerror (err));
+    return 0;
+  } else if (err == -ESTRPIPE) {
+    while ((err = snd_pcm_resume (handle)) == -EAGAIN)
+      g_usleep (100);           /* wait until the suspend flag is released */
+
+    if (err < 0) {
+      err = snd_pcm_prepare (handle);
+      if (err < 0)
+        GST_WARNING_OBJECT (alsa,
+            "Can't recovery from suspend, prepare failed: %s",
+            snd_strerror (err));
+    }
+    return 0;
+  }
+  return err;
+}
+
+static guint
+gst_alsasrc_read (GstAudioSrc * asrc, gpointer data, guint length)
+{
+  GstAlsaSrc *alsa;
+  gint err;
+  gint cptr;
+  gint16 *ptr;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  cptr = length / alsa->bpf;
+  ptr = data;
+
+  GST_ALSA_SRC_LOCK (asrc);
+  while (cptr > 0) {
+    if ((err = snd_pcm_readi (alsa->handle, ptr, cptr)) < 0) {
+      if (err == -EAGAIN) {
+        GST_DEBUG_OBJECT (asrc, "Read error: %s", snd_strerror (err));
+        continue;
+      } else if (xrun_recovery (alsa, alsa->handle, err) < 0) {
+        goto read_error;
+      }
+      continue;
+    }
+
+    ptr += err * alsa->channels;
+    cptr -= err;
+  }
+  GST_ALSA_SRC_UNLOCK (asrc);
+
+  return length - (cptr * alsa->bpf);
+
+read_error:
+  {
+    GST_ALSA_SRC_UNLOCK (asrc);
+    return length;              /* skip one period */
+  }
+}
+
+static guint
+gst_alsasrc_delay (GstAudioSrc * asrc)
+{
+  GstAlsaSrc *alsa;
+  snd_pcm_sframes_t delay;
+  int res;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  res = snd_pcm_delay (alsa->handle, &delay);
+  if (G_UNLIKELY (res < 0)) {
+    GST_DEBUG_OBJECT (alsa, "snd_pcm_delay returned %d", res);
+    delay = 0;
+  }
+
+  return CLAMP (delay, 0, alsa->buffer_size);
+}
+
+static void
+gst_alsasrc_reset (GstAudioSrc * asrc)
+{
+  GstAlsaSrc *alsa;
+  gint err;
+
+  alsa = GST_ALSA_SRC (asrc);
+
+  GST_ALSA_SRC_LOCK (asrc);
+  GST_DEBUG_OBJECT (alsa, "drop");
+  CHECK (snd_pcm_drop (alsa->handle), drop_error);
+  GST_DEBUG_OBJECT (alsa, "prepare");
+  CHECK (snd_pcm_prepare (alsa->handle), prepare_error);
+  GST_DEBUG_OBJECT (alsa, "reset done");
+  GST_ALSA_SRC_UNLOCK (asrc);
+
+  return;
+
+  /* ERRORS */
+drop_error:
+  {
+    GST_ERROR_OBJECT (alsa, "alsa-reset: pcm drop error: %s",
+        snd_strerror (err));
+    GST_ALSA_SRC_UNLOCK (asrc);
+    return;
+  }
+prepare_error:
+  {
+    GST_ERROR_OBJECT (alsa, "alsa-reset: pcm prepare error: %s",
+        snd_strerror (err));
+    GST_ALSA_SRC_UNLOCK (asrc);
+    return;
+  }
+}
diff --git a/ext/alsa/gstalsasrc.h b/ext/alsa/gstalsasrc.h
new file mode 100644
index 0000000..de33833
--- /dev/null
+++ b/ext/alsa/gstalsasrc.h
@@ -0,0 +1,87 @@
+/* GStreamer
+ * Copyright (C)  2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstalsasrc.h: 
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_ALSASRC_H__
+#define __GST_ALSASRC_H__
+
+#include <gst/audio/gstaudiosrc.h>
+#include "gstalsa.h"
+#include "gstalsamixer.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ALSA_SRC            (gst_alsasrc_get_type())
+#define GST_ALSA_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_SRC,GstAlsaSrc))
+#define GST_ALSA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_SRC,GstAlsaSrcClass))
+#define GST_IS_ALSA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_SRC))
+#define GST_IS_ALSA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_SRC))
+#define GST_ALSA_SRC_CAST(obj)       ((GstAlsaSrc *)(obj))
+
+#define GST_ALSA_SRC_GET_LOCK(obj)  (GST_ALSA_SRC_CAST (obj)->alsa_lock)
+#define GST_ALSA_SRC_LOCK(obj)      (g_mutex_lock (GST_ALSA_SRC_GET_LOCK (obj)))
+#define GST_ALSA_SRC_UNLOCK(obj)    (g_mutex_unlock (GST_ALSA_SRC_GET_LOCK (obj)))
+
+typedef struct _GstAlsaSrc GstAlsaSrc;
+typedef struct _GstAlsaSrcClass GstAlsaSrcClass;
+
+/**
+ * GstAlsaSrc:
+ *
+ * Opaque data structure
+ */
+struct _GstAlsaSrc {
+  GstAudioSrc           src;
+
+  gchar                 *device;
+
+  snd_pcm_t             *handle;
+  snd_pcm_hw_params_t   *hwparams;
+  snd_pcm_sw_params_t   *swparams;
+
+  GstCaps               *cached_caps;
+
+  snd_pcm_access_t      access;
+  snd_pcm_format_t      format;
+  guint                 rate;
+  guint                 channels;
+  gint                  bpf;
+  gboolean              driver_timestamps;
+
+  guint                 buffer_time;
+  guint                 period_time;
+  snd_pcm_uframes_t     buffer_size;
+  snd_pcm_uframes_t     period_size;
+
+  GstAlsaMixer          *mixer;
+
+  GMutex                *alsa_lock;
+};
+
+struct _GstAlsaSrcClass {
+  GstAudioSrcClass parent_class;
+};
+
+GType gst_alsasrc_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_ALSASRC_H__ */
diff --git a/ext/cdparanoia/Makefile.am b/ext/cdparanoia/Makefile.am
new file mode 100644
index 0000000..e2a2238
--- /dev/null
+++ b/ext/cdparanoia/Makefile.am
@@ -0,0 +1,17 @@
+plugin_LTLIBRARIES = libgstcdparanoia.la
+
+libgstcdparanoia_la_SOURCES = gstcdparanoiasrc.c
+libgstcdparanoia_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(CDPARANOIA_CFLAGS)
+libgstcdparanoia_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(CDPARANOIA_LIBS)
+libgstcdparanoia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstcdparanoia_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstcdparanoiasrc.h
diff --git a/ext/cdparanoia/Makefile.in b/ext/cdparanoia/Makefile.in
new file mode 100644
index 0000000..30a4cd6
--- /dev/null
+++ b/ext/cdparanoia/Makefile.in
@@ -0,0 +1,767 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/cdparanoia
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstcdparanoia_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/cdda/libgstcdda-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstcdparanoia_la_OBJECTS =  \
+	libgstcdparanoia_la-gstcdparanoiasrc.lo
+libgstcdparanoia_la_OBJECTS = $(am_libgstcdparanoia_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstcdparanoia_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstcdparanoia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstcdparanoia_la_CFLAGS) $(CFLAGS) \
+	$(libgstcdparanoia_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstcdparanoia_la_SOURCES)
+DIST_SOURCES = $(libgstcdparanoia_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstcdparanoia.la
+libgstcdparanoia_la_SOURCES = gstcdparanoiasrc.c
+libgstcdparanoia_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(CDPARANOIA_CFLAGS)
+
+libgstcdparanoia_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(CDPARANOIA_LIBS)
+
+libgstcdparanoia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstcdparanoia_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstcdparanoiasrc.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/cdparanoia/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/cdparanoia/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstcdparanoia.la: $(libgstcdparanoia_la_OBJECTS) $(libgstcdparanoia_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstcdparanoia_la_LINK) -rpath $(plugindir) $(libgstcdparanoia_la_OBJECTS) $(libgstcdparanoia_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcdparanoia_la-gstcdparanoiasrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstcdparanoia_la-gstcdparanoiasrc.lo: gstcdparanoiasrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcdparanoia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcdparanoia_la_CFLAGS) $(CFLAGS) -MT libgstcdparanoia_la-gstcdparanoiasrc.lo -MD -MP -MF $(DEPDIR)/libgstcdparanoia_la-gstcdparanoiasrc.Tpo -c -o libgstcdparanoia_la-gstcdparanoiasrc.lo `test -f 'gstcdparanoiasrc.c' || echo '$(srcdir)/'`gstcdparanoiasrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcdparanoia_la-gstcdparanoiasrc.Tpo $(DEPDIR)/libgstcdparanoia_la-gstcdparanoiasrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstcdparanoiasrc.c' object='libgstcdparanoia_la-gstcdparanoiasrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcdparanoia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcdparanoia_la_CFLAGS) $(CFLAGS) -c -o libgstcdparanoia_la-gstcdparanoiasrc.lo `test -f 'gstcdparanoiasrc.c' || echo '$(srcdir)/'`gstcdparanoiasrc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/cdparanoia/gstcdparanoiasrc.c b/ext/cdparanoia/gstcdparanoiasrc.c
new file mode 100644
index 0000000..200f589
--- /dev/null
+++ b/ext/cdparanoia/gstcdparanoiasrc.c
@@ -0,0 +1,535 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *               <2005> Wim Taymans <wim@fluendo.com>
+ *               <2005> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <errno.h>
+
+#include "gstcdparanoiasrc.h"
+#include "gst/gst-i18n-plugin.h"
+
+enum
+{
+  TRANSPORT_ERROR,
+  UNCORRECTED_ERROR,
+  NUM_SIGNALS
+};
+
+enum
+{
+  PROP_0,
+  PROP_READ_SPEED,
+  PROP_PARANOIA_MODE,
+  PROP_SEARCH_OVERLAP,
+  PROP_GENERIC_DEVICE,
+  PROP_CACHE_SIZE
+};
+
+#define DEFAULT_READ_SPEED              -1
+#define DEFAULT_SEARCH_OVERLAP          -1
+#define DEFAULT_PARANOIA_MODE            PARANOIA_MODE_FRAGMENT
+#define DEFAULT_GENERIC_DEVICE           NULL
+#define DEFAULT_CACHE_SIZE              -1
+
+GST_DEBUG_CATEGORY_STATIC (gst_cd_paranoia_src_debug);
+#define GST_CAT_DEFAULT gst_cd_paranoia_src_debug
+
+#define gst_cd_paranoia_src_parent_class parent_class
+G_DEFINE_TYPE (GstCdParanoiaSrc, gst_cd_paranoia_src, GST_TYPE_CDDA_BASE_SRC);
+
+static void gst_cd_paranoia_src_finalize (GObject * obj);
+static void gst_cd_paranoia_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_cd_paranoia_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static GstBuffer *gst_cd_paranoia_src_read_sector (GstCddaBaseSrc * src,
+    gint sector);
+static gboolean gst_cd_paranoia_src_open (GstCddaBaseSrc * src,
+    const gchar * device);
+static void gst_cd_paranoia_src_close (GstCddaBaseSrc * src);
+
+/* We use these to serialize calls to paranoia_read() among several
+ * cdparanoiasrc instances. We do this because it's the only reasonably
+ * easy way to find out the calling object from within the paranoia
+ * callback, and we need the object instance in there to emit our signals */
+static GstCdParanoiaSrc *cur_cb_source;
+static GStaticMutex cur_cb_mutex = G_STATIC_MUTEX_INIT;
+
+static gint cdpsrc_signals[NUM_SIGNALS];        /* all 0 */
+
+#define GST_TYPE_CD_PARANOIA_MODE (gst_cd_paranoia_mode_get_type())
+static GType
+gst_cd_paranoia_mode_get_type (void)
+{
+  static const GFlagsValue paranoia_modes[] = {
+    {PARANOIA_MODE_DISABLE, "PARANOIA_MODE_DISABLE", "disable"},
+    {PARANOIA_MODE_FRAGMENT, "PARANOIA_MODE_FRAGMENT", "fragment"},
+    {PARANOIA_MODE_OVERLAP, "PARANOIA_MODE_OVERLAP", "overlap"},
+    {PARANOIA_MODE_SCRATCH, "PARANOIA_MODE_SCRATCH", "scratch"},
+    {PARANOIA_MODE_REPAIR, "PARANOIA_MODE_REPAIR", "repair"},
+    {PARANOIA_MODE_FULL, "PARANOIA_MODE_FULL", "full"},
+    {0, NULL, NULL},
+  };
+
+  static GType type;            /* 0 */
+
+  if (!type) {
+    type = g_flags_register_static ("GstCdParanoiaMode", paranoia_modes);
+  }
+
+  return type;
+}
+
+static void
+gst_cd_paranoia_src_init (GstCdParanoiaSrc * src)
+{
+  src->d = NULL;
+  src->p = NULL;
+  src->next_sector = -1;
+
+  src->search_overlap = DEFAULT_SEARCH_OVERLAP;
+  src->paranoia_mode = DEFAULT_PARANOIA_MODE;
+  src->read_speed = DEFAULT_READ_SPEED;
+  src->generic_device = g_strdup (DEFAULT_GENERIC_DEVICE);
+  src->cache_size = DEFAULT_CACHE_SIZE;
+}
+
+static void
+gst_cd_paranoia_src_class_init (GstCdParanoiaSrcClass * klass)
+{
+  GstCddaBaseSrcClass *cddabasesrc_class = GST_CDDA_BASE_SRC_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = gst_cd_paranoia_src_set_property;
+  gobject_class->get_property = gst_cd_paranoia_src_get_property;
+  gobject_class->finalize = gst_cd_paranoia_src_finalize;
+
+  gst_element_class_set_details_simple (element_class,
+      "CD Audio (cdda) Source, Paranoia IV", "Source/File",
+      "Read audio from CD in paranoid mode",
+      "Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim@fluendo.com>");
+
+  cddabasesrc_class->open = gst_cd_paranoia_src_open;
+  cddabasesrc_class->close = gst_cd_paranoia_src_close;
+  cddabasesrc_class->read_sector = gst_cd_paranoia_src_read_sector;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_GENERIC_DEVICE,
+      g_param_spec_string ("generic-device", "Generic device",
+          "Use specified generic scsi device", DEFAULT_GENERIC_DEVICE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_READ_SPEED,
+      g_param_spec_int ("read-speed", "Read speed",
+          "Read from device at specified speed", -1, G_MAXINT,
+          DEFAULT_READ_SPEED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PARANOIA_MODE,
+      g_param_spec_flags ("paranoia-mode", "Paranoia mode",
+          "Type of checking to perform", GST_TYPE_CD_PARANOIA_MODE,
+          DEFAULT_PARANOIA_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SEARCH_OVERLAP,
+      g_param_spec_int ("search-overlap", "Search overlap",
+          "Force minimum overlap search during verification to n sectors", -1,
+          75, DEFAULT_SEARCH_OVERLAP,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstCdParanoiaSrc:cache-size
+   *
+   * Set CD cache size to n sectors (-1 = auto)
+   *
+   * Since: 0.10.24
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CACHE_SIZE,
+      g_param_spec_int ("cache-size", "Cache size",
+          "Set CD cache size to n sectors (-1 = auto)", -1,
+          G_MAXINT, DEFAULT_CACHE_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /* FIXME: we don't really want signals for this, but messages on the bus,
+   * but then we can't check any longer whether anyone is interested in them */
+  /**
+   * GstCdParanoiaSrc::transport-error
+   * @cdparanoia: The CdParanoia instance
+   * @sector: The sector number at which the error was encountered.
+   *
+   * This signal is emitted whenever an error occurs while reading.
+   * CdParanoia will attempt to recover the data.
+   */
+  cdpsrc_signals[TRANSPORT_ERROR] =
+      g_signal_new ("transport-error", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstCdParanoiaSrcClass, transport_error),
+      NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+  /**
+   * GstCdParanoiaSrc::uncorrected-error
+   * @cdparanoia: The CdParanoia instance
+   * @sector: The sector number at which the error was encountered.
+   *
+   * This signal is emitted whenever an uncorrectable error occurs while
+   * reading. The data could not be read.
+   */
+  cdpsrc_signals[UNCORRECTED_ERROR] =
+      g_signal_new ("uncorrected-error", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstCdParanoiaSrcClass, uncorrected_error),
+      NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+static gboolean
+gst_cd_paranoia_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (cddabasesrc);
+  gint i, cache_size;
+
+  GST_DEBUG_OBJECT (src, "trying to open device %s (generic-device=%s) ...",
+      device, GST_STR_NULL (src->generic_device));
+
+  /* find the device */
+  if (src->generic_device != NULL) {
+    src->d = cdda_identify_scsi (src->generic_device, device, FALSE, NULL);
+  } else {
+    if (device != NULL) {
+      src->d = cdda_identify (device, FALSE, NULL);
+    } else {
+      src->d = cdda_identify ("/dev/cdrom", FALSE, NULL);
+    }
+  }
+
+  /* fail if the device couldn't be found */
+  if (src->d == NULL)
+    goto no_device;
+
+  /* set verbosity mode */
+  cdda_verbose_set (src->d, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT);
+
+  /* open the disc */
+  if (cdda_open (src->d))
+    goto open_failed;
+
+  if (src->read_speed != -1) {
+    cdda_speed_set (src->d, src->read_speed);
+  }
+
+  for (i = 1; i < src->d->tracks + 1; i++) {
+    GstCddaBaseSrcTrack track = { 0, };
+
+    track.num = i;
+    track.is_audio = IS_AUDIO (src->d, i - 1);
+    track.start = cdda_track_firstsector (src->d, i);
+    track.end = cdda_track_lastsector (src->d, i);
+    track.tags = NULL;
+
+    gst_cdda_base_src_add_track (GST_CDDA_BASE_SRC (src), &track);
+  }
+
+  /* create the paranoia struct and set it up */
+  src->p = paranoia_init (src->d);
+  if (src->p == NULL)
+    goto init_failed;
+
+  paranoia_modeset (src->p, src->paranoia_mode);
+  GST_INFO_OBJECT (src, "set paranoia mode to 0x%02x", src->paranoia_mode);
+
+  if (src->search_overlap != -1) {
+    paranoia_overlapset (src->p, src->search_overlap);
+    GST_INFO_OBJECT (src, "search overlap set to %u", src->search_overlap);
+  }
+
+  cache_size = src->cache_size;
+  if (cache_size == -1) {
+    /* if paranoia mode is low (the default), assume we're doing playback */
+    if (src->paranoia_mode <= PARANOIA_MODE_FRAGMENT)
+      cache_size = 150;
+    else
+      cache_size = paranoia_cachemodel_size (src->p, -1);
+  }
+  paranoia_cachemodel_size (src->p, cache_size);
+  GST_INFO_OBJECT (src, "set cachemodel size to %u", cache_size);
+
+  src->next_sector = -1;
+
+  return TRUE;
+
+  /* ERRORS */
+no_device:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open CD device for reading.")), ("cdda_identify failed"));
+    return FALSE;
+  }
+open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open CD device for reading.")), ("cdda_open failed"));
+    cdda_close (src->d);
+    src->d = NULL;
+    return FALSE;
+  }
+init_failed:
+  {
+    GST_ELEMENT_ERROR (src, LIBRARY, INIT,
+        ("failed to initialize paranoia"), ("failed to initialize paranoia"));
+    return FALSE;
+  }
+}
+
+static void
+gst_cd_paranoia_src_close (GstCddaBaseSrc * cddabasesrc)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (cddabasesrc);
+
+  if (src->p) {
+    paranoia_free (src->p);
+    src->p = NULL;
+  }
+
+  if (src->d) {
+    cdda_close (src->d);
+    src->d = NULL;
+  }
+
+  src->next_sector = -1;
+}
+
+static void
+gst_cd_paranoia_dummy_callback (long inpos, int function)
+{
+  /* Used by instanced where no one is interested what's happening here */
+}
+
+static void
+gst_cd_paranoia_paranoia_callback (long inpos, int function)
+{
+  GstCdParanoiaSrc *src = cur_cb_source;
+  gint sector = (gint) (inpos / CD_FRAMEWORDS);
+
+  switch (function) {
+    case PARANOIA_CB_SKIP:
+      GST_INFO_OBJECT (src, "Skip at sector %d", sector);
+      g_signal_emit (src, cdpsrc_signals[UNCORRECTED_ERROR], 0, sector);
+      break;
+    case PARANOIA_CB_READERR:
+      GST_INFO_OBJECT (src, "Transport error at sector %d", sector);
+      g_signal_emit (src, cdpsrc_signals[TRANSPORT_ERROR], 0, sector);
+      break;
+    default:
+      break;
+  }
+}
+
+static gboolean
+gst_cd_paranoia_src_signal_is_being_watched (GstCdParanoiaSrc * src, gint sig)
+{
+  return g_signal_has_handler_pending (src, cdpsrc_signals[sig], 0, FALSE);
+}
+
+static GstBuffer *
+gst_cd_paranoia_src_read_sector (GstCddaBaseSrc * cddabasesrc, gint sector)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (cddabasesrc);
+  GstBuffer *buf;
+  gboolean do_serialize;
+  gint16 *cdda_buf;
+
+#if 0
+  /* Do we really need to output this? (tpm) */
+  /* Due to possible autocorrections of start sectors of audio tracks on 
+   * multisession cds, we can maybe not compute the correct discid.
+   * So issue a warning.
+   * See cdparanoia/interface/common-interface.c:FixupTOC */
+  if (src->d && src->d->cd_extra) {
+    g_message
+        ("DiscID on multisession discs might be broken. Use at own risk.");
+  }
+#endif
+
+  if (src->next_sector == -1 || src->next_sector != sector) {
+    if (paranoia_seek (src->p, sector, SEEK_SET) == -1)
+      goto seek_failed;
+
+    GST_DEBUG_OBJECT (src, "successfully seeked to sector %d", sector);
+    src->next_sector = sector;
+  }
+
+  do_serialize =
+      gst_cd_paranoia_src_signal_is_being_watched (src, TRANSPORT_ERROR) ||
+      gst_cd_paranoia_src_signal_is_being_watched (src, UNCORRECTED_ERROR);
+
+  if (do_serialize) {
+    GST_LOG_OBJECT (src, "Signal handlers connected, serialising access");
+    g_static_mutex_lock (&cur_cb_mutex);
+    GST_LOG_OBJECT (src, "Got lock");
+    cur_cb_source = src;
+
+    cdda_buf = paranoia_read (src->p, gst_cd_paranoia_paranoia_callback);
+
+    cur_cb_source = NULL;
+    GST_LOG_OBJECT (src, "Releasing lock");
+    g_static_mutex_unlock (&cur_cb_mutex);
+  } else {
+    cdda_buf = paranoia_read (src->p, gst_cd_paranoia_dummy_callback);
+  }
+
+  if (cdda_buf == NULL)
+    goto read_failed;
+
+  buf = gst_buffer_new_and_alloc (CD_FRAMESIZE_RAW);
+  gst_buffer_fill (buf, 0, cdda_buf, CD_FRAMESIZE_RAW);
+
+  /* cdda base class will take care of timestamping etc. */
+  ++src->next_sector;
+
+  return buf;
+
+  /* ERRORS */
+seek_failed:
+  {
+    GST_WARNING_OBJECT (src, "seek to sector %d failed!", sector);
+    GST_ELEMENT_ERROR (src, RESOURCE, SEEK,
+        (_("Could not seek CD.")),
+        ("paranoia_seek to %d failed: %s", sector, g_strerror (errno)));
+    return NULL;
+  }
+read_failed:
+  {
+    GST_WARNING_OBJECT (src, "read at sector %d failed!", sector);
+    GST_ELEMENT_ERROR (src, RESOURCE, READ,
+        (_("Could not read CD.")),
+        ("paranoia_read at %d failed: %s", sector, g_strerror (errno)));
+    return NULL;
+  }
+}
+
+static void
+gst_cd_paranoia_src_finalize (GObject * obj)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (obj);
+
+  g_free (src->generic_device);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_cd_paranoia_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+
+  switch (prop_id) {
+    case PROP_GENERIC_DEVICE:{
+      g_free (src->generic_device);
+      src->generic_device = g_value_dup_string (value);
+      if (src->generic_device && src->generic_device[0] == '\0') {
+        g_free (src->generic_device);
+        src->generic_device = NULL;
+      }
+      break;
+    }
+    case PROP_READ_SPEED:{
+      src->read_speed = g_value_get_int (value);
+      if (src->read_speed == 0)
+        src->read_speed = -1;
+      break;
+    }
+    case PROP_PARANOIA_MODE:{
+      src->paranoia_mode = g_value_get_flags (value) & PARANOIA_MODE_FULL;
+      break;
+    }
+    case PROP_SEARCH_OVERLAP:{
+      src->search_overlap = g_value_get_int (value);
+      break;
+    }
+    case PROP_CACHE_SIZE:{
+      src->cache_size = g_value_get_int (value);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static void
+gst_cd_paranoia_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstCdParanoiaSrc *src = GST_CD_PARANOIA_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+
+  switch (prop_id) {
+    case PROP_READ_SPEED:
+      g_value_set_int (value, src->read_speed);
+      break;
+    case PROP_PARANOIA_MODE:
+      g_value_set_flags (value, src->paranoia_mode);
+      break;
+    case PROP_GENERIC_DEVICE:
+      g_value_set_string (value, src->generic_device);
+      break;
+    case PROP_SEARCH_OVERLAP:
+      g_value_set_int (value, src->search_overlap);
+      break;
+    case PROP_CACHE_SIZE:
+      g_value_set_int (value, src->cache_size);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_cd_paranoia_src_debug, "cdparanoiasrc", 0,
+      "CD Paranoia Source");
+
+  if (!gst_element_register (plugin, "cdparanoiasrc", GST_RANK_SECONDARY,
+          GST_TYPE_CD_PARANOIA_SRC))
+    return FALSE;
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "cdparanoia",
+    "Read audio from CD in paranoid mode",
+    plugin_init, GST_PLUGINS_BASE_VERSION, "LGPL", GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN)
diff --git a/ext/cdparanoia/gstcdparanoiasrc.h b/ext/cdparanoia/gstcdparanoiasrc.h
new file mode 100644
index 0000000..e61dff8
--- /dev/null
+++ b/ext/cdparanoia/gstcdparanoiasrc.h
@@ -0,0 +1,106 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_CD_PARANOIA_SRC_H__
+#define __GST_CD_PARANOIA_SRC_H__
+
+#include "gst/cdda/gstcddabasesrc.h"
+
+G_BEGIN_DECLS
+
+#define size16 gint16
+#define size32 gint32
+
+/* on OSX the cdparanoia headers include IOKit framework headers (in particular
+ * SCSICmds_INQUIRY_Definitions.h) which define a structure that has a member
+ * named VERSION, so we must #undef VERSION here for things to compile on OSX */
+static char GST_PLUGINS_BASE_VERSION[] = VERSION;
+#undef VERSION
+
+#ifdef CDPARANOIA_HEADERS_IN_DIR
+  #include <cdda/cdda_interface.h>
+  #include <cdda/cdda_paranoia.h>
+#else
+  #include <cdda_interface.h>
+  #include <cdda_paranoia.h>
+#endif
+
+#define GST_TYPE_CD_PARANOIA_SRC            (gst_cd_paranoia_src_get_type())
+#define GST_CD_PARANOIA_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CD_PARANOIA_SRC,GstCdParanoiaSrc))
+#define GST_CD_PARANOIA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CD_PARANOIA_SRC,GstCdParanoiaSrcClass))
+#define GST_IS_CD_PARANOIA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CD_PARANOIA_SRC))
+#define GST_IS_CD_PARANOIA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CD_PARANOIA_SRC))
+#define GST_CD_PARANOIA_SRC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CDDA_BASAE_SRC, GstCdParanoiaSrcClass))
+
+typedef struct _GstCdParanoiaSrc GstCdParanoiaSrc;
+typedef struct _GstCdParanoiaSrcClass GstCdParanoiaSrcClass;
+
+/**
+ * GstCdParanoiaSrc:
+ *
+ * The cdparanoia object structure.
+ */
+struct _GstCdParanoiaSrc {
+  GstCddaBaseSrc   cddabasesrc;
+
+  /*< private >*/
+  cdrom_drive     *d;
+  cdrom_paranoia  *p;
+
+  gint             next_sector; /* -1 or next sector we expect to
+                                 * read, so we know when to do a seek */
+
+  gint             paranoia_mode;
+  gint             read_speed;
+  gint             search_overlap;
+  gint             cache_size;
+
+  gchar           *generic_device;
+};
+
+struct _GstCdParanoiaSrcClass {
+  GstCddaBaseSrcClass parent_class;
+
+  /* signal callbacks */
+  /**
+   * GstCdParanoiaSrcClass::transport-error:
+   * @src: the GstCddaBaseSrc source element object
+   * @sector: the sector at which the error happened
+   *
+   * This signal is emitted when a sector could not be read
+   * because of a transport error.
+   */
+  void (*transport_error)	(GstCdParanoiaSrc * src, gint sector);
+  /**
+   * GstCdParanoiaSrcClass::uncorrected-error:
+   * @src: the GstCddaBaseSrc source element object
+   * @sector: the sector at which the error happened
+   *
+   * This signal is emitted when a sector could not be read
+   * because of a transport error.
+   */
+  void (*uncorrected_error)	(GstCdParanoiaSrc * src, gint sector);
+};
+
+GType    gst_cd_paranoia_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_CD_PARANOIA_SRC_H__ */
+
diff --git a/ext/gio/Makefile.am b/ext/gio/Makefile.am
new file mode 100644
index 0000000..f4b1611
--- /dev/null
+++ b/ext/gio/Makefile.am
@@ -0,0 +1,29 @@
+# plugindir is set in configure
+
+plugin_LTLIBRARIES = libgstgio.la
+
+# sources used to compile this plug-in
+libgstgio_la_SOURCES = \
+		gstgio.c \
+		gstgiobasesink.c \
+		gstgiobasesrc.c \
+		gstgiosink.c \
+		gstgiosrc.c \
+		gstgiostreamsink.c \
+		gstgiostreamsrc.c
+
+libgstgio_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgstgio_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
+libgstgio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GIO_LDFLAGS)
+libgstgio_la_LIBTOOLFLAGS = --tag=disable-static
+
+# headers we need but don't want installed
+noinst_HEADERS = \
+		gstgio.h \
+		gstgiobasesink.h \
+		gstgiobasesrc.h \
+		gstgiosink.h \
+		gstgiosrc.h \
+		gstgiostreamsink.h \
+		gstgiostreamsrc.h
+
diff --git a/ext/gio/Makefile.in b/ext/gio/Makefile.in
new file mode 100644
index 0000000..b34d805
--- /dev/null
+++ b/ext/gio/Makefile.in
@@ -0,0 +1,835 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# plugindir is set in configure
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/gio
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstgio_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstgio_la_OBJECTS = libgstgio_la-gstgio.lo \
+	libgstgio_la-gstgiobasesink.lo libgstgio_la-gstgiobasesrc.lo \
+	libgstgio_la-gstgiosink.lo libgstgio_la-gstgiosrc.lo \
+	libgstgio_la-gstgiostreamsink.lo \
+	libgstgio_la-gstgiostreamsrc.lo
+libgstgio_la_OBJECTS = $(am_libgstgio_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstgio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstgio_la_CFLAGS) $(CFLAGS) \
+	$(libgstgio_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstgio_la_SOURCES)
+DIST_SOURCES = $(libgstgio_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstgio.la
+
+# sources used to compile this plug-in
+libgstgio_la_SOURCES = \
+		gstgio.c \
+		gstgiobasesink.c \
+		gstgiobasesrc.c \
+		gstgiosink.c \
+		gstgiosrc.c \
+		gstgiostreamsink.c \
+		gstgiostreamsrc.c
+
+libgstgio_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgstgio_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
+libgstgio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(GIO_LDFLAGS)
+libgstgio_la_LIBTOOLFLAGS = --tag=disable-static
+
+# headers we need but don't want installed
+noinst_HEADERS = \
+		gstgio.h \
+		gstgiobasesink.h \
+		gstgiobasesrc.h \
+		gstgiosink.h \
+		gstgiosrc.h \
+		gstgiostreamsink.h \
+		gstgiostreamsrc.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/gio/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/gio/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstgio.la: $(libgstgio_la_OBJECTS) $(libgstgio_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstgio_la_LINK) -rpath $(plugindir) $(libgstgio_la_OBJECTS) $(libgstgio_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiobasesink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiobasesrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiosink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiosrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiostreamsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgio_la-gstgiostreamsrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstgio_la-gstgio.lo: gstgio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgio.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgio.Tpo -c -o libgstgio_la-gstgio.lo `test -f 'gstgio.c' || echo '$(srcdir)/'`gstgio.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgio.Tpo $(DEPDIR)/libgstgio_la-gstgio.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgio.c' object='libgstgio_la-gstgio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgio.lo `test -f 'gstgio.c' || echo '$(srcdir)/'`gstgio.c
+
+libgstgio_la-gstgiobasesink.lo: gstgiobasesink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiobasesink.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiobasesink.Tpo -c -o libgstgio_la-gstgiobasesink.lo `test -f 'gstgiobasesink.c' || echo '$(srcdir)/'`gstgiobasesink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiobasesink.Tpo $(DEPDIR)/libgstgio_la-gstgiobasesink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiobasesink.c' object='libgstgio_la-gstgiobasesink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiobasesink.lo `test -f 'gstgiobasesink.c' || echo '$(srcdir)/'`gstgiobasesink.c
+
+libgstgio_la-gstgiobasesrc.lo: gstgiobasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiobasesrc.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiobasesrc.Tpo -c -o libgstgio_la-gstgiobasesrc.lo `test -f 'gstgiobasesrc.c' || echo '$(srcdir)/'`gstgiobasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiobasesrc.Tpo $(DEPDIR)/libgstgio_la-gstgiobasesrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiobasesrc.c' object='libgstgio_la-gstgiobasesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiobasesrc.lo `test -f 'gstgiobasesrc.c' || echo '$(srcdir)/'`gstgiobasesrc.c
+
+libgstgio_la-gstgiosink.lo: gstgiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiosink.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiosink.Tpo -c -o libgstgio_la-gstgiosink.lo `test -f 'gstgiosink.c' || echo '$(srcdir)/'`gstgiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiosink.Tpo $(DEPDIR)/libgstgio_la-gstgiosink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiosink.c' object='libgstgio_la-gstgiosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiosink.lo `test -f 'gstgiosink.c' || echo '$(srcdir)/'`gstgiosink.c
+
+libgstgio_la-gstgiosrc.lo: gstgiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiosrc.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiosrc.Tpo -c -o libgstgio_la-gstgiosrc.lo `test -f 'gstgiosrc.c' || echo '$(srcdir)/'`gstgiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiosrc.Tpo $(DEPDIR)/libgstgio_la-gstgiosrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiosrc.c' object='libgstgio_la-gstgiosrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiosrc.lo `test -f 'gstgiosrc.c' || echo '$(srcdir)/'`gstgiosrc.c
+
+libgstgio_la-gstgiostreamsink.lo: gstgiostreamsink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiostreamsink.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiostreamsink.Tpo -c -o libgstgio_la-gstgiostreamsink.lo `test -f 'gstgiostreamsink.c' || echo '$(srcdir)/'`gstgiostreamsink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiostreamsink.Tpo $(DEPDIR)/libgstgio_la-gstgiostreamsink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiostreamsink.c' object='libgstgio_la-gstgiostreamsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiostreamsink.lo `test -f 'gstgiostreamsink.c' || echo '$(srcdir)/'`gstgiostreamsink.c
+
+libgstgio_la-gstgiostreamsrc.lo: gstgiostreamsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -MT libgstgio_la-gstgiostreamsrc.lo -MD -MP -MF $(DEPDIR)/libgstgio_la-gstgiostreamsrc.Tpo -c -o libgstgio_la-gstgiostreamsrc.lo `test -f 'gstgiostreamsrc.c' || echo '$(srcdir)/'`gstgiostreamsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgio_la-gstgiostreamsrc.Tpo $(DEPDIR)/libgstgio_la-gstgiostreamsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgiostreamsrc.c' object='libgstgio_la-gstgiostreamsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgio_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgio_la_CFLAGS) $(CFLAGS) -c -o libgstgio_la-gstgiostreamsrc.lo `test -f 'gstgiostreamsrc.c' || echo '$(srcdir)/'`gstgiostreamsrc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/gio/gstgio.c b/ext/gio/gstgio.c
new file mode 100644
index 0000000..35c8b85
--- /dev/null
+++ b/ext/gio/gstgio.c
@@ -0,0 +1,259 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstgio.h"
+#include "gstgiosink.h"
+#include "gstgiosrc.h"
+#include "gstgiostreamsink.h"
+#include "gstgiostreamsrc.h"
+
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_debug);
+#define GST_CAT_DEFAULT gst_gio_debug
+
+/* @func_name: Name of the GIO function, for debugging messages.
+ * @err: Error location.  *err may be NULL, but err must be non-NULL.
+ * @ret: Flow return location.  May be NULL.  Is set to either #GST_FLOW_ERROR
+ * or #GST_FLOW_WRONG_STATE.
+ *
+ * Returns: TRUE to indicate a handled error.  Error at given location err will
+ * be freed and *err will be set to NULL.  A FALSE return indicates an unhandled
+ * error: The err location is unchanged and guaranteed to be != NULL.  ret, if
+ * given, is set to GST_FLOW_ERROR.
+ */
+gboolean
+gst_gio_error (gpointer element, const gchar * func_name, GError ** err,
+    GstFlowReturn * ret)
+{
+  gboolean handled = TRUE;
+
+  if (ret)
+    *ret = GST_FLOW_ERROR;
+
+  if (GST_GIO_ERROR_MATCHES (*err, CANCELLED)) {
+    GST_DEBUG_OBJECT (element, "blocking I/O call cancelled (%s)", func_name);
+    if (ret)
+      *ret = GST_FLOW_WRONG_STATE;
+  } else if (*err != NULL) {
+    handled = FALSE;
+  } else {
+    GST_ELEMENT_ERROR (element, LIBRARY, FAILED, (NULL),
+        ("%s call failed without error set", func_name));
+  }
+
+  if (handled)
+    g_clear_error (err);
+
+  return handled;
+}
+
+GstFlowReturn
+gst_gio_seek (gpointer element, GSeekable * stream, guint64 offset,
+    GCancellable * cancel)
+{
+  gboolean success;
+  GstFlowReturn ret;
+  GError *err = NULL;
+
+  GST_LOG_OBJECT (element, "seeking to offset %" G_GINT64_FORMAT, offset);
+
+  success = g_seekable_seek (stream, offset, G_SEEK_SET, cancel, &err);
+
+  if (success)
+    ret = GST_FLOW_OK;
+  else if (!gst_gio_error (element, "g_seekable_seek", &err, &ret)) {
+    GST_ELEMENT_ERROR (element, RESOURCE, SEEK, (NULL),
+        ("Could not seek: %s", err->message));
+    g_clear_error (&err);
+  }
+
+  return ret;
+}
+
+static gpointer
+_internal_get_supported_protocols (gpointer data)
+{
+  const gchar *const *schemes;
+  gchar **our_schemes;
+  guint num;
+  gint i, j;
+
+  schemes = g_vfs_get_supported_uri_schemes (g_vfs_get_default ());
+  num = g_strv_length ((gchar **) schemes);
+
+  if (num == 0) {
+    GST_WARNING ("No GIO supported URI schemes found");
+    return NULL;
+  }
+
+  our_schemes = g_new0 (gchar *, num + 1);
+
+  /* - Filter http/https as we can't support the icy stuff with GIO.
+   *   Use souphttpsrc if you need that.
+   * - Filter cdda as it doesn't support musicbrainz stuff and everything
+   *   else one expects from a cdda source. Use cdparanoiasrc or cdiosrc
+   *   for cdda.
+   */
+  for (i = 0, j = 0; i < num; i++) {
+    if (strcmp (schemes[i], "http") == 0 || strcmp (schemes[i], "https") == 0
+        || strcmp (schemes[i], "cdda") == 0)
+      continue;
+
+    our_schemes[j] = g_strdup (schemes[i]);
+    j++;
+  }
+
+  return our_schemes;
+}
+
+static gchar **
+gst_gio_get_supported_protocols (void)
+{
+  static GOnce once = G_ONCE_INIT;
+
+  g_once (&once, _internal_get_supported_protocols, NULL);
+  return (gchar **) once.retval;
+}
+
+static GstURIType
+gst_gio_uri_handler_get_type_sink (GType type)
+{
+  return GST_URI_SINK;
+}
+
+static GstURIType
+gst_gio_uri_handler_get_type_src (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static gchar **
+gst_gio_uri_handler_get_protocols (GType type)
+{
+  static gchar **protocols = NULL;
+
+  if (!protocols)
+    protocols = gst_gio_get_supported_protocols ();
+
+  return protocols;
+}
+
+static const gchar *
+gst_gio_uri_handler_get_uri (GstURIHandler * handler)
+{
+  GstElement *element = GST_ELEMENT (handler);
+  const gchar *uri;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+
+  g_object_get (G_OBJECT (element), "location", &uri, NULL);
+
+  return uri;
+}
+
+static gboolean
+gst_gio_uri_handler_set_uri (GstURIHandler * handler, const gchar * uri)
+{
+  GstElement *element = GST_ELEMENT (handler);
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+
+  if (GST_STATE (element) == GST_STATE_PLAYING ||
+      GST_STATE (element) == GST_STATE_PAUSED)
+    return FALSE;
+
+  g_object_set (G_OBJECT (element), "location", uri, NULL);
+
+  return TRUE;
+}
+
+static void
+gst_gio_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+  gboolean sink = GPOINTER_TO_INT (iface_data); /* See in do_init below. */
+
+  if (sink)
+    iface->get_type = gst_gio_uri_handler_get_type_sink;
+  else
+    iface->get_type = gst_gio_uri_handler_get_type_src;
+  iface->get_protocols = gst_gio_uri_handler_get_protocols;
+  iface->get_uri = gst_gio_uri_handler_get_uri;
+  iface->set_uri = gst_gio_uri_handler_set_uri;
+}
+
+void
+gst_gio_uri_handler_do_init (GType type)
+{
+  GInterfaceInfo uri_handler_info = {
+    gst_gio_uri_handler_init,
+    NULL,
+    NULL
+  };
+
+  /* Store information for uri_handler_init to use for distinguishing the
+   * element types.  This lets us use a single interface implementation for both
+   * classes. */
+  uri_handler_info.interface_data = GINT_TO_POINTER (g_type_is_a (type,
+          GST_TYPE_BASE_SINK));
+
+  g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &uri_handler_info);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = TRUE;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_debug, "gio", 0, "GIO elements");
+
+  gst_plugin_add_dependency_simple (plugin, NULL, GIO_MODULE_DIR, NULL,
+      GST_PLUGIN_DEPENDENCY_FLAG_NONE);
+  gst_plugin_add_dependency_simple (plugin, "LD_LIBRARY_PATH", GIO_LIBDIR,
+      "gvfsd", GST_PLUGIN_DEPENDENCY_FLAG_NONE);
+
+  /* FIXME: Rank is MARGINAL for now, should be at least SECONDARY+1 in the future
+   * to replace gnomevfssink/src. For testing purposes PRIMARY+1 one makes sense
+   * so it gets autoplugged and preferred over filesrc/sink. */
+
+  ret &= gst_element_register (plugin, "giosink", GST_RANK_SECONDARY,
+      GST_TYPE_GIO_SINK);
+
+  ret &= gst_element_register (plugin, "giosrc", GST_RANK_SECONDARY,
+      GST_TYPE_GIO_SRC);
+
+  ret &= gst_element_register (plugin, "giostreamsink", GST_RANK_NONE,
+      GST_TYPE_GIO_STREAM_SINK);
+
+  ret &= gst_element_register (plugin, "giostreamsrc", GST_RANK_NONE,
+      GST_TYPE_GIO_STREAM_SRC);
+
+  return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, "gio",
+    "GIO elements", plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN)
diff --git a/ext/gio/gstgio.h b/ext/gio/gstgio.h
new file mode 100644
index 0000000..01183e1
--- /dev/null
+++ b/ext/gio/gstgio.h
@@ -0,0 +1,42 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_H__
+#define __GST_GIO_H__
+
+#include <gio/gio.h>
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_GIO_ERROR_MATCHES(err, code) g_error_matches (err, G_IO_ERROR, G_IO_ERROR_##code)
+
+#define GST_GIO_STREAM_IS_SEEKABLE(stream) (G_IS_SEEKABLE (stream) && g_seekable_can_seek (G_SEEKABLE (stream)))
+
+gboolean gst_gio_error (gpointer element, const gchar *func_name,
+    GError **err, GstFlowReturn *ret);
+GstFlowReturn gst_gio_seek (gpointer element, GSeekable *stream, guint64 offset,
+    GCancellable *cancel);
+void gst_gio_uri_handler_do_init (GType type);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_H__ */
diff --git a/ext/gio/gstgiobasesink.c b/ext/gio/gstgiobasesink.c
new file mode 100644
index 0000000..110f84a
--- /dev/null
+++ b/ext/gio/gstgiobasesink.c
@@ -0,0 +1,344 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiobasesink.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_base_sink_debug);
+#define GST_CAT_DEFAULT gst_gio_base_sink_debug
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+#define gst_gio_base_sink_parent_class parent_class
+G_DEFINE_TYPE (GstGioBaseSink, gst_gio_base_sink, GST_TYPE_BASE_SINK);
+
+static void gst_gio_base_sink_finalize (GObject * object);
+static gboolean gst_gio_base_sink_start (GstBaseSink * base_sink);
+static gboolean gst_gio_base_sink_stop (GstBaseSink * base_sink);
+static gboolean gst_gio_base_sink_unlock (GstBaseSink * base_sink);
+static gboolean gst_gio_base_sink_unlock_stop (GstBaseSink * base_sink);
+static gboolean gst_gio_base_sink_event (GstBaseSink * base_sink,
+    GstEvent * event);
+static GstFlowReturn gst_gio_base_sink_render (GstBaseSink * base_sink,
+    GstBuffer * buffer);
+static gboolean gst_gio_base_sink_query (GstBaseSink * bsink, GstQuery * query);
+
+static void
+gst_gio_base_sink_class_init (GstGioBaseSinkClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstBaseSinkClass *gstbasesink_class = (GstBaseSinkClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_base_sink_debug, "gio_base_sink", 0,
+      "GIO base sink");
+
+  gobject_class->finalize = gst_gio_base_sink_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sink_factory));
+
+  gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_gio_base_sink_start);
+  gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_gio_base_sink_stop);
+  gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_gio_base_sink_unlock);
+  gstbasesink_class->unlock_stop =
+      GST_DEBUG_FUNCPTR (gst_gio_base_sink_unlock_stop);
+  gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_gio_base_sink_query);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_gio_base_sink_event);
+  gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_gio_base_sink_render);
+}
+
+static void
+gst_gio_base_sink_init (GstGioBaseSink * sink)
+{
+  gst_base_sink_set_sync (GST_BASE_SINK (sink), FALSE);
+
+  sink->cancel = g_cancellable_new ();
+}
+
+static void
+gst_gio_base_sink_finalize (GObject * object)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (object);
+
+  if (sink->cancel) {
+    g_object_unref (sink->cancel);
+    sink->cancel = NULL;
+  }
+
+  if (sink->stream) {
+    g_object_unref (sink->stream);
+    sink->stream = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static gboolean
+gst_gio_base_sink_start (GstBaseSink * base_sink)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+  GstGioBaseSinkClass *gbsink_class = GST_GIO_BASE_SINK_GET_CLASS (sink);
+
+  sink->position = 0;
+
+  /* FIXME: This will likely block */
+  sink->stream = gbsink_class->get_stream (sink);
+  if (G_UNLIKELY (!G_IS_OUTPUT_STREAM (sink->stream))) {
+    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+        ("No output stream provided by subclass"));
+    return FALSE;
+  } else if (G_UNLIKELY (g_output_stream_is_closed (sink->stream))) {
+    GST_ELEMENT_ERROR (sink, LIBRARY, FAILED, (NULL),
+        ("Output stream is already closed"));
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (sink, "started sink");
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_sink_stop (GstBaseSink * base_sink)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+  GstGioBaseSinkClass *klass = GST_GIO_BASE_SINK_GET_CLASS (sink);
+  gboolean success;
+  GError *err = NULL;
+
+  if (klass->close_on_stop && G_IS_OUTPUT_STREAM (sink->stream)) {
+    GST_DEBUG_OBJECT (sink, "closing stream");
+
+    /* FIXME: can block but unfortunately we can't use async operations
+     * here because they require a running main loop */
+    success = g_output_stream_close (sink->stream, sink->cancel, &err);
+
+    if (!success && !gst_gio_error (sink, "g_output_stream_close", &err, NULL)) {
+      GST_ELEMENT_WARNING (sink, RESOURCE, CLOSE, (NULL),
+          ("gio_output_stream_close failed: %s", err->message));
+      g_clear_error (&err);
+    } else if (!success) {
+      GST_ELEMENT_WARNING (sink, RESOURCE, CLOSE, (NULL),
+          ("g_output_stream_close failed"));
+    } else {
+      GST_DEBUG_OBJECT (sink, "g_outut_stream_close succeeded");
+    }
+
+    g_object_unref (sink->stream);
+    sink->stream = NULL;
+  } else {
+    success = g_output_stream_flush (sink->stream, sink->cancel, &err);
+
+    if (!success && !gst_gio_error (sink, "g_output_stream_flush", &err, NULL)) {
+      GST_ELEMENT_WARNING (sink, RESOURCE, CLOSE, (NULL),
+          ("gio_output_stream_flush failed: %s", err->message));
+      g_clear_error (&err);
+    } else if (!success) {
+      GST_ELEMENT_WARNING (sink, RESOURCE, CLOSE, (NULL),
+          ("g_output_stream_flush failed"));
+    } else {
+      GST_DEBUG_OBJECT (sink, "g_outut_stream_flush succeeded");
+    }
+
+    g_object_unref (sink->stream);
+    sink->stream = NULL;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_sink_unlock (GstBaseSink * base_sink)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+
+  GST_LOG_OBJECT (sink, "triggering cancellation");
+
+  g_cancellable_cancel (sink->cancel);
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_sink_unlock_stop (GstBaseSink * base_sink)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+
+  GST_LOG_OBJECT (sink, "resetting cancellable");
+
+  g_cancellable_reset (sink->cancel);
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_sink_event (GstBaseSink * base_sink, GstEvent * event)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  if (sink->stream == NULL)
+    return TRUE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      if (G_IS_OUTPUT_STREAM (sink->stream)) {
+        const GstSegment *segment;
+
+        gst_event_parse_segment (event, &segment);
+
+        if (segment->format != GST_FORMAT_BYTES) {
+          GST_WARNING_OBJECT (sink, "ignored SEGMENT event in %s format",
+              gst_format_get_name (segment->format));
+          break;
+        }
+
+        if (GST_GIO_STREAM_IS_SEEKABLE (sink->stream)) {
+          ret = gst_gio_seek (sink, G_SEEKABLE (sink->stream), segment->start,
+              sink->cancel);
+          if (ret == GST_FLOW_OK)
+            sink->position = segment->start;
+        } else {
+          ret = GST_FLOW_NOT_SUPPORTED;
+        }
+      }
+      break;
+
+    case GST_EVENT_EOS:
+    case GST_EVENT_FLUSH_START:
+      if (G_IS_OUTPUT_STREAM (sink->stream)) {
+        gboolean success;
+        GError *err = NULL;
+
+        success = g_output_stream_flush (sink->stream, sink->cancel, &err);
+
+        if (!success && !gst_gio_error (sink, "g_output_stream_flush", &err,
+                &ret)) {
+          GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+              ("flush failed: %s", err->message));
+          g_clear_error (&err);
+        }
+      }
+      break;
+
+    default:
+      break;
+  }
+
+  return (ret == GST_FLOW_OK);
+}
+
+static GstFlowReturn
+gst_gio_base_sink_render (GstBaseSink * base_sink, GstBuffer * buffer)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (base_sink);
+  gssize written;
+  guint8 *data;
+  gsize size;
+  gboolean success;
+  GError *err = NULL;
+
+  g_return_val_if_fail (G_IS_OUTPUT_STREAM (sink->stream), GST_FLOW_ERROR);
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  GST_LOG_OBJECT (sink,
+      "writing %" G_GSIZE_FORMAT " bytes to offset %" G_GUINT64_FORMAT, size,
+      sink->position);
+
+  written =
+      g_output_stream_write (sink->stream, data, size, sink->cancel, &err);
+  gst_buffer_unmap (buffer, data, size);
+
+  success = (written >= 0);
+
+  if (G_UNLIKELY (success && written < size)) {
+    /* FIXME: Can this happen?  Should we handle it gracefully?  gnomevfssink
+     * doesn't... */
+    GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+        ("Could not write to stream: (short write, only %"
+            G_GSSIZE_FORMAT " bytes of %" G_GSIZE_FORMAT " bytes written)",
+            written, size));
+    return GST_FLOW_ERROR;
+  }
+
+  if (success) {
+    sink->position += written;
+    return GST_FLOW_OK;
+
+  } else {
+    GstFlowReturn ret;
+
+    if (!gst_gio_error (sink, "g_output_stream_write", &err, &ret)) {
+      if (GST_GIO_ERROR_MATCHES (err, NO_SPACE)) {
+        GST_ELEMENT_ERROR (sink, RESOURCE, NO_SPACE_LEFT, (NULL),
+            ("Could not write to stream: %s", err->message));
+      } else {
+        GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+            ("Could not write to stream: %s", err->message));
+      }
+      g_clear_error (&err);
+    }
+
+    return ret;
+  }
+}
+
+static gboolean
+gst_gio_base_sink_query (GstBaseSink * bsink, GstQuery * query)
+{
+  GstGioBaseSink *sink = GST_GIO_BASE_SINK (bsink);
+  GstFormat format;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+      gst_query_parse_position (query, &format, NULL);
+      switch (format) {
+        case GST_FORMAT_BYTES:
+        case GST_FORMAT_DEFAULT:
+          gst_query_set_position (query, GST_FORMAT_BYTES, sink->position);
+          return TRUE;
+        default:
+          return FALSE;
+      }
+    case GST_QUERY_FORMATS:
+      gst_query_set_formats (query, 2, GST_FORMAT_DEFAULT, GST_FORMAT_BYTES);
+      return TRUE;
+    case GST_QUERY_URI:
+      if (GST_IS_URI_HANDLER (sink)) {
+        const gchar *uri;
+
+        uri = gst_uri_handler_get_uri (GST_URI_HANDLER (sink));
+        gst_query_set_uri (query, uri);
+        return TRUE;
+      }
+      return FALSE;
+    default:
+      return GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
+  }
+}
diff --git a/ext/gio/gstgiobasesink.h b/ext/gio/gstgiobasesink.h
new file mode 100644
index 0000000..7f13a85
--- /dev/null
+++ b/ext/gio/gstgiobasesink.h
@@ -0,0 +1,71 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_BASE_SINK_H__
+#define __GST_GIO_BASE_SINK_H__
+
+#include "gstgio.h"
+
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_BASE_SINK \
+  (gst_gio_base_sink_get_type())
+#define GST_GIO_BASE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_BASE_SINK,GstGioBaseSink))
+#define GST_GIO_BASE_SINK_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GIO_BASE_SINK, GstGioBaseSinkClass))
+#define GST_GIO_BASE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_BASE_SINK,GstGioBaseSinkClass))
+#define GST_IS_GIO_BASE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_BASE_SINK))
+#define GST_IS_GIO_BASE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_BASE_SINK))
+
+typedef struct _GstGioBaseSink      GstGioBaseSink;
+typedef struct _GstGioBaseSinkClass GstGioBaseSinkClass;
+
+struct _GstGioBaseSink
+{
+  GstBaseSink sink;
+
+  /* < protected > */
+  GCancellable *cancel;
+  guint64 position;
+
+  /* < private > */
+  GOutputStream *stream;
+};
+
+struct _GstGioBaseSinkClass 
+{
+  GstBaseSinkClass parent_class;
+
+  GOutputStream * (*get_stream) (GstGioBaseSink *bsink);
+  gboolean close_on_stop;
+};
+
+GType gst_gio_base_sink_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_BASE_SINK_H__ */
diff --git a/ext/gio/gstgiobasesrc.c b/ext/gio/gstgiobasesrc.c
new file mode 100644
index 0000000..7987d99
--- /dev/null
+++ b/ext/gio/gstgiobasesrc.c
@@ -0,0 +1,433 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiobasesrc.h"
+
+#include <gst/base/gsttypefindhelper.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_base_src_debug);
+#define GST_CAT_DEFAULT gst_gio_base_src_debug
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+#define gst_gio_base_src_parent_class parent_class
+G_DEFINE_TYPE (GstGioBaseSrc, gst_gio_base_src, GST_TYPE_BASE_SRC);
+
+static void gst_gio_base_src_finalize (GObject * object);
+
+static gboolean gst_gio_base_src_start (GstBaseSrc * base_src);
+static gboolean gst_gio_base_src_stop (GstBaseSrc * base_src);
+static gboolean gst_gio_base_src_get_size (GstBaseSrc * base_src,
+    guint64 * size);
+static gboolean gst_gio_base_src_is_seekable (GstBaseSrc * base_src);
+static gboolean gst_gio_base_src_unlock (GstBaseSrc * base_src);
+static gboolean gst_gio_base_src_unlock_stop (GstBaseSrc * base_src);
+static GstFlowReturn gst_gio_base_src_create (GstBaseSrc * base_src,
+    guint64 offset, guint size, GstBuffer ** buf);
+static gboolean gst_gio_base_src_query (GstBaseSrc * base_src,
+    GstQuery * query);
+
+static void
+gst_gio_base_src_class_init (GstGioBaseSrcClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_base_src_debug, "gio_base_src", 0,
+      "GIO base source");
+
+  gobject_class->finalize = gst_gio_base_src_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&src_factory));
+
+  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_gio_base_src_start);
+  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_gio_base_src_stop);
+  gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_gio_base_src_get_size);
+  gstbasesrc_class->is_seekable =
+      GST_DEBUG_FUNCPTR (gst_gio_base_src_is_seekable);
+  gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_gio_base_src_unlock);
+  gstbasesrc_class->unlock_stop =
+      GST_DEBUG_FUNCPTR (gst_gio_base_src_unlock_stop);
+  gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_gio_base_src_create);
+  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_gio_base_src_query);
+}
+
+static void
+gst_gio_base_src_init (GstGioBaseSrc * src)
+{
+  src->cancel = g_cancellable_new ();
+}
+
+static void
+gst_gio_base_src_finalize (GObject * object)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (object);
+
+  if (src->cancel) {
+    g_object_unref (src->cancel);
+    src->cancel = NULL;
+  }
+
+  if (src->stream) {
+    g_object_unref (src->stream);
+    src->stream = NULL;
+  }
+
+  if (src->cache) {
+    gst_buffer_unref (src->cache);
+    src->cache = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static gboolean
+gst_gio_base_src_start (GstBaseSrc * base_src)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+  GstGioBaseSrcClass *gbsrc_class = GST_GIO_BASE_SRC_GET_CLASS (src);
+
+  src->position = 0;
+
+  /* FIXME: This will likely block */
+  src->stream = gbsrc_class->get_stream (src);
+  if (G_UNLIKELY (!G_IS_INPUT_STREAM (src->stream))) {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+        ("No input stream provided by subclass"));
+    return FALSE;
+  } else if (G_UNLIKELY (g_input_stream_is_closed (src->stream))) {
+    GST_ELEMENT_ERROR (src, LIBRARY, FAILED, (NULL),
+        ("Input stream is already closed"));
+    return FALSE;
+  }
+
+  if (G_IS_SEEKABLE (src->stream))
+    src->position = g_seekable_tell (G_SEEKABLE (src->stream));
+
+  GST_DEBUG_OBJECT (src, "started source");
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_src_stop (GstBaseSrc * base_src)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+  GstGioBaseSrcClass *klass = GST_GIO_BASE_SRC_GET_CLASS (src);
+  gboolean success;
+  GError *err = NULL;
+
+  if (klass->close_on_stop && G_IS_INPUT_STREAM (src->stream)) {
+    GST_DEBUG_OBJECT (src, "closing stream");
+
+    /* FIXME: can block but unfortunately we can't use async operations
+     * here because they require a running main loop */
+    success = g_input_stream_close (src->stream, src->cancel, &err);
+
+    if (!success && !gst_gio_error (src, "g_input_stream_close", &err, NULL)) {
+      GST_ELEMENT_WARNING (src, RESOURCE, CLOSE, (NULL),
+          ("g_input_stream_close failed: %s", err->message));
+      g_clear_error (&err);
+    } else if (!success) {
+      GST_ELEMENT_WARNING (src, RESOURCE, CLOSE, (NULL),
+          ("g_input_stream_close failed"));
+    } else {
+      GST_DEBUG_OBJECT (src, "g_input_stream_close succeeded");
+    }
+
+    g_object_unref (src->stream);
+    src->stream = NULL;
+  } else {
+    g_object_unref (src->stream);
+    src->stream = NULL;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_src_get_size (GstBaseSrc * base_src, guint64 * size)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+
+  if (G_IS_FILE_INPUT_STREAM (src->stream)) {
+    GFileInfo *info;
+    GError *err = NULL;
+
+    info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (src->stream),
+        G_FILE_ATTRIBUTE_STANDARD_SIZE, src->cancel, &err);
+
+    if (info != NULL) {
+      *size = g_file_info_get_size (info);
+      g_object_unref (info);
+      GST_DEBUG_OBJECT (src, "found size: %" G_GUINT64_FORMAT, *size);
+      return TRUE;
+    }
+
+    if (!gst_gio_error (src, "g_file_input_stream_query_info", &err, NULL)) {
+
+      if (GST_GIO_ERROR_MATCHES (err, NOT_SUPPORTED))
+        GST_DEBUG_OBJECT (src, "size information not available");
+      else
+        GST_WARNING_OBJECT (src, "size information retrieval failed: %s",
+            err->message);
+
+      g_clear_error (&err);
+    }
+  }
+
+  if (GST_GIO_STREAM_IS_SEEKABLE (src->stream)) {
+    goffset old;
+    goffset stream_size;
+    gboolean ret;
+    GSeekable *seekable = G_SEEKABLE (src->stream);
+    GError *err = NULL;
+
+    old = g_seekable_tell (seekable);
+
+    ret = g_seekable_seek (seekable, 0, G_SEEK_END, src->cancel, &err);
+    if (!ret) {
+      if (!gst_gio_error (src, "g_seekable_seek", &err, NULL)) {
+        if (GST_GIO_ERROR_MATCHES (err, NOT_SUPPORTED))
+          GST_DEBUG_OBJECT (src,
+              "Seeking to the end of stream is not supported");
+        else
+          GST_WARNING_OBJECT (src, "Seeking to end of stream failed: %s",
+              err->message);
+        g_clear_error (&err);
+      } else {
+        GST_WARNING_OBJECT (src, "Seeking to end of stream failed");
+      }
+      return FALSE;
+    }
+
+    stream_size = g_seekable_tell (seekable);
+
+    ret = g_seekable_seek (seekable, old, G_SEEK_SET, src->cancel, &err);
+    if (!ret) {
+      if (!gst_gio_error (src, "g_seekable_seek", &err, NULL)) {
+        if (GST_GIO_ERROR_MATCHES (err, NOT_SUPPORTED))
+          GST_ERROR_OBJECT (src, "Seeking to the old position not supported");
+        else
+          GST_ERROR_OBJECT (src, "Seeking to the old position failed: %s",
+              err->message);
+        g_clear_error (&err);
+      } else {
+        GST_ERROR_OBJECT (src, "Seeking to the old position faile");
+      }
+      return FALSE;
+    }
+
+    if (stream_size >= 0) {
+      *size = stream_size;
+      return TRUE;
+    }
+  }
+
+  return FALSE;
+}
+
+static gboolean
+gst_gio_base_src_is_seekable (GstBaseSrc * base_src)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+  gboolean seekable;
+
+  seekable = GST_GIO_STREAM_IS_SEEKABLE (src->stream);
+
+  GST_DEBUG_OBJECT (src, "can seek: %d", seekable);
+
+  return seekable;
+}
+
+static gboolean
+gst_gio_base_src_unlock (GstBaseSrc * base_src)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+
+  GST_LOG_OBJECT (src, "triggering cancellation");
+
+  g_cancellable_cancel (src->cancel);
+
+  return TRUE;
+}
+
+static gboolean
+gst_gio_base_src_unlock_stop (GstBaseSrc * base_src)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+
+  GST_LOG_OBJECT (src, "resetting cancellable");
+
+  g_cancellable_reset (src->cancel);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_gio_base_src_create (GstBaseSrc * base_src, guint64 offset, guint size,
+    GstBuffer ** buf_return)
+{
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+  GstBuffer *buf;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  g_return_val_if_fail (G_IS_INPUT_STREAM (src->stream), GST_FLOW_ERROR);
+
+  /* If we have the requested part in our cache take a subbuffer of that,
+   * otherwise fill the cache again with at least 4096 bytes from the
+   * requested offset and return a subbuffer of that.
+   *
+   * We need caching because every read/seek operation will need to go
+   * over DBus if our backend is GVfs and this is painfully slow. */
+  if (src->cache && offset >= GST_BUFFER_OFFSET (src->cache) &&
+      offset + size <= GST_BUFFER_OFFSET_END (src->cache)) {
+    GST_DEBUG_OBJECT (src, "Creating subbuffer from cached buffer: offset %"
+        G_GUINT64_FORMAT " length %u", offset, size);
+
+    buf = gst_buffer_copy_region (src->cache, GST_BUFFER_COPY_ALL,
+        offset - GST_BUFFER_OFFSET (src->cache), size);
+
+    GST_BUFFER_OFFSET (buf) = offset;
+    GST_BUFFER_OFFSET_END (buf) = offset + size;
+  } else {
+    guint cachesize = MAX (4096, size);
+    guint8 *bdata;
+    gssize read, res;
+    gboolean success, eos;
+    GError *err = NULL;
+
+    if (src->cache) {
+      gst_buffer_unref (src->cache);
+      src->cache = NULL;
+    }
+
+    if (G_UNLIKELY (offset != src->position)) {
+      if (!GST_GIO_STREAM_IS_SEEKABLE (src->stream))
+        return GST_FLOW_NOT_SUPPORTED;
+
+      GST_DEBUG_OBJECT (src, "Seeking to position %" G_GUINT64_FORMAT, offset);
+      ret = gst_gio_seek (src, G_SEEKABLE (src->stream), offset, src->cancel);
+
+      if (ret == GST_FLOW_OK)
+        src->position = offset;
+      else
+        return ret;
+    }
+
+    src->cache = gst_buffer_new_and_alloc (cachesize);
+    if (G_UNLIKELY (src->cache == NULL)) {
+      GST_ERROR_OBJECT (src, "Failed to allocate %u bytes", cachesize);
+      return GST_FLOW_ERROR;
+    }
+
+    GST_LOG_OBJECT (src, "Reading %u bytes from offset %" G_GUINT64_FORMAT,
+        cachesize, offset);
+
+    /* GIO sometimes gives less bytes than requested although
+     * it's not at the end of file. SMB for example only
+     * supports reads up to 64k. So we loop here until we get at
+     * at least the requested amount of bytes or a read returns
+     * nothing. */
+    bdata = gst_buffer_map (src->cache, NULL, NULL, GST_MAP_WRITE);
+    read = 0;
+    while (size - read > 0 && (res =
+            g_input_stream_read (G_INPUT_STREAM (src->stream),
+                bdata + read, cachesize - read, src->cancel, &err)) > 0) {
+      read += res;
+    }
+    gst_buffer_unmap (src->cache, bdata, read);
+
+    success = (read >= 0);
+    eos = (cachesize > 0 && read == 0);
+
+    if (!success && !gst_gio_error (src, "g_input_stream_read", &err, &ret)) {
+      GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+          ("Could not read from stream: %s", err->message));
+      g_clear_error (&err);
+    }
+
+    if (success && !eos) {
+      src->position += read;
+
+      GST_BUFFER_OFFSET (src->cache) = offset;
+      GST_BUFFER_OFFSET_END (src->cache) = offset + read;
+
+      GST_DEBUG_OBJECT (src, "Read successful");
+      GST_DEBUG_OBJECT (src, "Creating subbuffer from new "
+          "cached buffer: offset %" G_GUINT64_FORMAT " length %u", offset,
+          size);
+
+      buf =
+          gst_buffer_copy_region (src->cache, GST_BUFFER_COPY_ALL, 0, MIN (size,
+              read));
+
+      GST_BUFFER_OFFSET (buf) = offset;
+      GST_BUFFER_OFFSET_END (buf) = offset + MIN (size, read);
+    } else {
+      GST_DEBUG_OBJECT (src, "Read not successful");
+      gst_buffer_unref (src->cache);
+      src->cache = NULL;
+      buf = NULL;
+    }
+
+    if (eos)
+      ret = GST_FLOW_UNEXPECTED;
+  }
+
+  *buf_return = buf;
+
+  return ret;
+}
+
+static gboolean
+gst_gio_base_src_query (GstBaseSrc * base_src, GstQuery * query)
+{
+  gboolean ret = FALSE;
+  GstGioBaseSrc *src = GST_GIO_BASE_SRC (base_src);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_URI:
+      if (GST_IS_URI_HANDLER (src)) {
+        const gchar *uri = gst_uri_handler_get_uri (GST_URI_HANDLER (src));
+        gst_query_set_uri (query, uri);
+        ret = TRUE;
+      }
+      break;
+    default:
+      ret = FALSE;
+      break;
+  }
+
+  if (!ret)
+    ret = GST_BASE_SRC_CLASS (parent_class)->query (base_src, query);
+
+  return ret;
+}
diff --git a/ext/gio/gstgiobasesrc.h b/ext/gio/gstgiobasesrc.h
new file mode 100644
index 0000000..7a14859
--- /dev/null
+++ b/ext/gio/gstgiobasesrc.h
@@ -0,0 +1,72 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_BASE_SRC_H__
+#define __GST_GIO_BASE_SRC_H__
+
+#include "gstgio.h"
+
+#include <gst/base/gstbasesrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_BASE_SRC \
+  (gst_gio_base_src_get_type())
+#define GST_GIO_BASE_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_BASE_SRC,GstGioBaseSrc))
+#define GST_GIO_BASE_SRC_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GIO_BASE_SRC, GstGioBaseSrcClass))
+#define GST_GIO_BASE_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_BASE_SRC,GstGioBaseSrcClass))
+#define GST_IS_GIO_BASE_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_BASE_SRC))
+#define GST_IS_GIO_BASE_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_BASE_SRC))
+
+typedef struct _GstGioBaseSrc      GstGioBaseSrc;
+typedef struct _GstGioBaseSrcClass GstGioBaseSrcClass;
+
+struct _GstGioBaseSrc
+{
+  GstBaseSrc src;
+  
+  /* < protected > */
+  GCancellable *cancel;
+  guint64 position;
+
+  /* < private > */
+  GInputStream *stream;
+  GstBuffer *cache;
+};
+
+struct _GstGioBaseSrcClass 
+{
+  GstBaseSrcClass parent_class;
+
+  GInputStream * (*get_stream) (GstGioBaseSrc *bsrc);
+  gboolean close_on_stop;
+};
+
+GType gst_gio_base_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_BASE_SRC_H__ */
diff --git a/ext/gio/gstgiosink.c b/ext/gio/gstgiosink.c
new file mode 100644
index 0000000..fe7a23f
--- /dev/null
+++ b/ext/gio/gstgiosink.c
@@ -0,0 +1,315 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-giosink
+ * @see_also: #GstFileSink, #GstGnomeVFSSink, #GstGioSrc
+ *
+ * This plugin writes incoming data to a local or remote location specified
+ * by an URI. This location can be specified using any protocol supported by
+ * the GIO library or it's VFS backends. Common protocols are 'file', 'ftp',
+ * or 'smb'.
+ *
+ * If the URI or #GFile already exists giosink will post a message of
+ * type %GST_MESSAGE_ELEMENT with name "file-exists" on the bus. The message
+ * also contains the #GFile and the corresponding URI.
+ * Applications can use the "file-exists" message to notify the user about
+ * the problem and to set a different target location or to remove the
+ * existing file. Note that right after the "file-exists" message a normal
+ * error message is posted on the bus which should be ignored if "file-exists"
+ * is handled by the application, for example by calling
+ * gst_bus_set_flushing(bus, TRUE) after the "file-exists" message was
+ * received and gst_bus_set_flushing(bus, FALSE) after the problem is
+ * resolved.
+ *
+ * Similar to the "file-exist" message a "not-mounted" message is posted
+ * on the bus if the target location is not mounted yet and needs to be
+ * mounted. This message can be used by application to mount the location
+ * and retry after the location was mounted successfully.
+ * 
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz
+ * ]| The above pipeline will simply copy a local file. Instead of giosink,
+ * we could just as well have used the filesink element here.
+ * |[
+ * gst-launch -v filesrc location=foo.mp3 ! mad ! flacenc ! giosink location=smb://othercomputer/foo.flac
+ * ]| The above pipeline will re-encode an mp3 file into FLAC format and store
+ * it on a remote host using the Samba protocol.
+ * |[
+ * gst-launch -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg
+ * ]| The above pipeline will encode a 440Hz sine wave to Ogg Vorbis and stores
+ * it in the home directory of user foo.
+ * </refsect2>
+ */
+
+/* FIXME: We would like to mount the enclosing volume of an URL
+ *        if it isn't mounted yet but this is possible async-only.
+ *        Unfortunately this requires a running main loop from the
+ *        default context and we can't guarantuee this!
+ *
+ *        We would also like to do authentication while mounting.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiosink.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_sink_debug);
+#define GST_CAT_DEFAULT gst_gio_sink_debug
+
+/* Filter signals and args */
+enum
+{
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_LOCATION,
+  PROP_FILE
+};
+
+#define gst_gio_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGioSink, gst_gio_sink, GST_TYPE_GIO_BASE_SINK,
+    gst_gio_uri_handler_do_init (g_define_type_id));
+
+static void gst_gio_sink_finalize (GObject * object);
+static void gst_gio_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gio_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GOutputStream *gst_gio_sink_get_stream (GstGioBaseSink * base_sink);
+
+static void
+gst_gio_sink_class_init (GstGioSinkClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstGioBaseSinkClass *gstgiobasesink_class = (GstGioBaseSinkClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_sink_debug, "gio_sink", 0, "GIO sink");
+
+  gobject_class->finalize = gst_gio_sink_finalize;
+  gobject_class->set_property = gst_gio_sink_set_property;
+  gobject_class->get_property = gst_gio_sink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_LOCATION,
+      g_param_spec_string ("location", "Location", "URI location to write to",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstGioSink:file
+   *
+   * %GFile to write to.
+   * 
+   * Since: 0.10.20
+   **/
+  g_object_class_install_property (gobject_class, PROP_FILE,
+      g_param_spec_object ("file", "File", "GFile to write to",
+          G_TYPE_FILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class, "GIO sink",
+      "Sink/File",
+      "Write to any GIO-supported location",
+      "Ren\xc3\xa9 Stadler <mail@renestadler.de>, "
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstgiobasesink_class->get_stream =
+      GST_DEBUG_FUNCPTR (gst_gio_sink_get_stream);
+  gstgiobasesink_class->close_on_stop = TRUE;
+}
+
+static void
+gst_gio_sink_init (GstGioSink * sink)
+{
+}
+
+static void
+gst_gio_sink_finalize (GObject * object)
+{
+  GstGioSink *sink = GST_GIO_SINK (object);
+
+  if (sink->file) {
+    g_object_unref (sink->file);
+    sink->file = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_gio_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGioSink *sink = GST_GIO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:{
+      const gchar *uri = NULL;
+
+      if (GST_STATE (sink) == GST_STATE_PLAYING ||
+          GST_STATE (sink) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new location or GFile not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      GST_OBJECT_LOCK (GST_OBJECT (sink));
+      if (sink->file)
+        g_object_unref (sink->file);
+
+      uri = g_value_get_string (value);
+
+      if (uri) {
+        sink->file = g_file_new_for_uri (uri);
+
+        if (!sink->file) {
+          GST_ERROR ("Could not create GFile for URI '%s'", uri);
+        }
+      } else {
+        sink->file = NULL;
+      }
+      GST_OBJECT_UNLOCK (GST_OBJECT (sink));
+      break;
+    }
+    case PROP_FILE:
+      if (GST_STATE (sink) == GST_STATE_PLAYING ||
+          GST_STATE (sink) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new location or GFile not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      GST_OBJECT_LOCK (GST_OBJECT (sink));
+      if (sink->file)
+        g_object_unref (sink->file);
+
+      sink->file = g_value_dup_object (value);
+
+      GST_OBJECT_UNLOCK (GST_OBJECT (sink));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gio_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGioSink *sink = GST_GIO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:{
+      gchar *uri;
+
+      GST_OBJECT_LOCK (GST_OBJECT (sink));
+      if (sink->file) {
+        uri = g_file_get_uri (sink->file);
+        g_value_set_string (value, uri);
+        g_free (uri);
+      } else {
+        g_value_set_string (value, NULL);
+      }
+      GST_OBJECT_UNLOCK (GST_OBJECT (sink));
+      break;
+    }
+    case PROP_FILE:
+      GST_OBJECT_LOCK (GST_OBJECT (sink));
+      g_value_set_object (value, sink->file);
+      GST_OBJECT_UNLOCK (GST_OBJECT (sink));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GOutputStream *
+gst_gio_sink_get_stream (GstGioBaseSink * bsink)
+{
+  GstGioSink *sink = GST_GIO_SINK (bsink);
+  GOutputStream *stream;
+  GCancellable *cancel = GST_GIO_BASE_SINK (sink)->cancel;
+  GError *err = NULL;
+  gchar *uri;
+
+  if (sink->file == NULL) {
+    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+        ("No location or GFile given"));
+    return NULL;
+  }
+
+  uri = g_file_get_uri (sink->file);
+  if (!uri)
+    uri = g_strdup ("(null)");
+
+  stream =
+      G_OUTPUT_STREAM (g_file_create (sink->file, G_FILE_CREATE_NONE, cancel,
+          &err));
+
+  if (!stream) {
+    if (!gst_gio_error (sink, "g_file_create", &err, NULL)) {
+      /*if (GST_GIO_ERROR_MATCHES (err, EXISTS)) */
+      /* FIXME: Retry with replace if overwrite == TRUE! */
+
+      if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND)) {
+        GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND, (NULL),
+            ("Could not open location %s for writing: %s", uri, err->message));
+      } else if (GST_GIO_ERROR_MATCHES (err, EXISTS)) {
+        gst_element_post_message (GST_ELEMENT_CAST (sink),
+            gst_message_new_element (GST_OBJECT_CAST (sink),
+                gst_structure_new ("file-exists", "file", G_TYPE_FILE,
+                    sink->file, "uri", G_TYPE_STRING, uri, NULL)));
+
+        GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+            ("Location %s already exists: %s", uri, err->message));
+      } else if (GST_GIO_ERROR_MATCHES (err, NOT_MOUNTED)) {
+        gst_element_post_message (GST_ELEMENT_CAST (sink),
+            gst_message_new_element (GST_OBJECT_CAST (sink),
+                gst_structure_new ("not-mounted", "file", G_TYPE_FILE,
+                    sink->file, "uri", G_TYPE_STRING, uri, NULL)));
+
+        GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+            ("Location %s not mounted: %s", uri, err->message));
+      } else {
+        GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+            ("Could not open location %s for writing: %s", uri, err->message));
+      }
+
+      g_clear_error (&err);
+    }
+    g_free (uri);
+    return NULL;
+  }
+
+  GST_DEBUG_OBJECT (sink, "opened location %s", uri);
+
+  g_free (uri);
+
+  return stream;
+}
diff --git a/ext/gio/gstgiosink.h b/ext/gio/gstgiosink.h
new file mode 100644
index 0000000..494d5db
--- /dev/null
+++ b/ext/gio/gstgiosink.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_SINK_H__
+#define __GST_GIO_SINK_H__
+
+#include "gstgio.h"
+#include "gstgiobasesink.h"
+
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_SINK \
+  (gst_gio_sink_get_type())
+#define GST_GIO_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_SINK,GstGioSink))
+#define GST_GIO_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_SINK,GstGioSinkClass))
+#define GST_IS_GIO_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_SINK))
+#define GST_IS_GIO_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_SINK))
+
+typedef struct _GstGioSink      GstGioSink;
+typedef struct _GstGioSinkClass GstGioSinkClass;
+
+/**
+ * GstGioSink:
+ *
+ * Opaque data structure.
+ */
+struct _GstGioSink
+{
+  GstGioBaseSink sink;
+
+  /*< private >*/
+  GFile *file;
+};
+
+struct _GstGioSinkClass 
+{
+  GstGioBaseSinkClass parent_class;
+};
+
+GType gst_gio_sink_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_SINK_H__ */
diff --git a/ext/gio/gstgiosrc.c b/ext/gio/gstgiosrc.c
new file mode 100644
index 0000000..5e077ad
--- /dev/null
+++ b/ext/gio/gstgiosrc.c
@@ -0,0 +1,345 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-giosrc
+ * @see_also: #GstFileSrc, #GstGnomeVFSSrc, #GstGioSink
+ *
+ * This plugin reads data from a local or remote location specified
+ * by an URI. This location can be specified using any protocol supported by
+ * the GIO library or it's VFS backends. Common protocols are 'file', 'http',
+ * 'ftp', or 'smb'.
+ *
+ * If an URI or #GFile is not mounted giosrc will post a message of type
+ * %GST_MESSAGE_ELEMENT with name "not-mounted" on the bus. The message
+ * also contains the #GFile and the corresponding URI.
+ * Applications can use the "not-mounted" message to mount the #GFile
+ * by calling g_file_mount_enclosing_volume() and then restart the
+ * pipeline after the mounting has succeeded. Note that right after the
+ * "not-mounted" message a normal error message is posted on the bus which
+ * should be ignored if "not-mounted" is handled by the application, for
+ * example by calling gst_bus_set_flushing(bus, TRUE) after the "not-mounted"
+ * message was received and gst_bus_set_flushing(bus, FALSE) after the
+ * mounting was successful.
+ *
+ * <refsect2>
+ * <title>Example launch lines</title>
+ * |[
+ * gst-launch -v giosrc location=file:///home/joe/foo.xyz ! fakesink
+ * ]| The above pipeline will simply read a local file and do nothing with the
+ * data read. Instead of giosrc, we could just as well have used the
+ * filesrc element here.
+ * |[
+ * gst-launch -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz
+ * ]| The above pipeline will copy a file from a remote host to the local file
+ * system using the Samba protocol.
+ * |[
+ * gst-launch -v giosrc location=http://music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioresample ! alsasink
+ * ]| The above pipeline will read and decode and play an mp3 file from a
+ * web server using the http protocol.
+ * </refsect2>
+ */
+
+/* FIXME: We would like to mount the enclosing volume of an URL
+ *        if it isn't mounted yet but this is possible async-only.
+ *        Unfortunately this requires a running main loop from the
+ *        default context and we can't guarantuee this!
+ *
+ *        We would also like to do authentication while mounting.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiosrc.h"
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_src_debug);
+#define GST_CAT_DEFAULT gst_gio_src_debug
+
+enum
+{
+  PROP_0,
+  PROP_LOCATION,
+  PROP_FILE
+};
+
+#define gst_gio_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGioSrc, gst_gio_src,
+    GST_TYPE_GIO_BASE_SRC, gst_gio_uri_handler_do_init (g_define_type_id));
+
+static void gst_gio_src_finalize (GObject * object);
+
+static void gst_gio_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gio_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GInputStream *gst_gio_src_get_stream (GstGioBaseSrc * bsrc);
+
+static gboolean gst_gio_src_query (GstBaseSrc * base_src, GstQuery * query);
+
+static void
+gst_gio_src_class_init (GstGioSrcClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass;
+  GstGioBaseSrcClass *gstgiobasesrc_class = (GstGioBaseSrcClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_src_debug, "gio_src", 0, "GIO source");
+
+  gobject_class->finalize = gst_gio_src_finalize;
+  gobject_class->set_property = gst_gio_src_set_property;
+  gobject_class->get_property = gst_gio_src_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_LOCATION,
+      g_param_spec_string ("location", "Location", "URI location to read from",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstGioSrc:file
+   * 
+   * %GFile to read from.
+   * 
+   * Since: 0.10.20
+   **/
+  g_object_class_install_property (gobject_class, PROP_FILE,
+      g_param_spec_object ("file", "File", "GFile to read from",
+          G_TYPE_FILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class, "GIO source",
+      "Source/File",
+      "Read from any GIO-supported location",
+      "Ren\xc3\xa9 Stadler <mail@renestadler.de>, "
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_gio_src_query);
+
+  gstgiobasesrc_class->get_stream = GST_DEBUG_FUNCPTR (gst_gio_src_get_stream);
+  gstgiobasesrc_class->close_on_stop = TRUE;
+}
+
+static void
+gst_gio_src_init (GstGioSrc * src)
+{
+}
+
+static void
+gst_gio_src_finalize (GObject * object)
+{
+  GstGioSrc *src = GST_GIO_SRC (object);
+
+  if (src->file) {
+    g_object_unref (src->file);
+    src->file = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_gio_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGioSrc *src = GST_GIO_SRC (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:{
+      const gchar *uri = NULL;
+
+      if (GST_STATE (src) == GST_STATE_PLAYING ||
+          GST_STATE (src) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new location or GFile not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      GST_OBJECT_LOCK (GST_OBJECT (src));
+      if (src->file)
+        g_object_unref (src->file);
+
+      uri = g_value_get_string (value);
+
+      if (uri) {
+        src->file = g_file_new_for_uri (uri);
+
+        if (!src->file) {
+          GST_ERROR ("Could not create GFile for URI '%s'", uri);
+        }
+      } else {
+        src->file = NULL;
+      }
+      GST_OBJECT_UNLOCK (GST_OBJECT (src));
+      break;
+    }
+    case PROP_FILE:
+      if (GST_STATE (src) == GST_STATE_PLAYING ||
+          GST_STATE (src) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new location or GFile not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      GST_OBJECT_LOCK (GST_OBJECT (src));
+      if (src->file)
+        g_object_unref (src->file);
+
+      src->file = g_value_dup_object (value);
+
+      GST_OBJECT_UNLOCK (GST_OBJECT (src));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gio_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGioSrc *src = GST_GIO_SRC (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:{
+      gchar *uri;
+
+      GST_OBJECT_LOCK (GST_OBJECT (src));
+      if (src->file) {
+        uri = g_file_get_uri (src->file);
+        g_value_set_string (value, uri);
+        g_free (uri);
+      } else {
+        g_value_set_string (value, NULL);
+      }
+      GST_OBJECT_UNLOCK (GST_OBJECT (src));
+      break;
+    }
+    case PROP_FILE:
+      GST_OBJECT_LOCK (GST_OBJECT (src));
+      g_value_set_object (value, src->file);
+      GST_OBJECT_UNLOCK (GST_OBJECT (src));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_gio_src_query (GstBaseSrc * base_src, GstQuery * query)
+{
+  gboolean res;
+  GstGioSrc *src = GST_GIO_SRC (base_src);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_SCHEDULING:
+    {
+      gchar *scheme;
+      gboolean pull_mode;
+
+      pull_mode = FALSE;
+      if (src->file == NULL)
+        goto forward_parent;
+
+      scheme = g_file_get_uri_scheme (src->file);
+      if (scheme == NULL)
+        goto forward_parent;
+
+      if (strcmp (scheme, "file") == 0) {
+        GST_LOG_OBJECT (src, "local URI, assuming random access is possible");
+        pull_mode = TRUE;
+      } else if (strcmp (scheme, "http") == 0 || strcmp (scheme, "https") == 0) {
+        GST_LOG_OBJECT (src, "blacklisted protocol '%s', "
+            "no random access possible", scheme);
+      } else {
+        GST_LOG_OBJECT (src, "unhandled protocol '%s', asking parent", scheme);
+        goto forward_parent;
+      }
+      g_free (scheme);
+
+      gst_query_set_scheduling (query, pull_mode, pull_mode, FALSE, 1, -1, 1);
+      res = TRUE;
+      break;
+    }
+    default:
+    forward_parent:
+      res = GST_CALL_PARENT_WITH_DEFAULT (GST_BASE_SRC_CLASS,
+          query, (base_src, query), FALSE);
+      break;
+  }
+
+  return res;
+}
+
+static GInputStream *
+gst_gio_src_get_stream (GstGioBaseSrc * bsrc)
+{
+  GstGioSrc *src = GST_GIO_SRC (bsrc);
+  GError *err = NULL;
+  GInputStream *stream;
+  GCancellable *cancel = bsrc->cancel;
+  gchar *uri = NULL;
+
+  if (src->file == NULL) {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+        ("No location or GFile given"));
+    return NULL;
+  }
+
+  uri = g_file_get_uri (src->file);
+  if (!uri)
+    uri = g_strdup ("(null)");
+
+  stream = G_INPUT_STREAM (g_file_read (src->file, cancel, &err));
+
+  if (stream == NULL && !gst_gio_error (src, "g_file_read", &err, NULL)) {
+    if (GST_GIO_ERROR_MATCHES (err, NOT_FOUND)) {
+      GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL),
+          ("Could not open location %s for reading: %s", uri, err->message));
+    } else if (GST_GIO_ERROR_MATCHES (err, NOT_MOUNTED)) {
+      gst_element_post_message (GST_ELEMENT_CAST (src),
+          gst_message_new_element (GST_OBJECT_CAST (src),
+              gst_structure_new ("not-mounted", "file", G_TYPE_FILE, src->file,
+                  "uri", G_TYPE_STRING, uri, NULL)));
+
+      GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+          ("Location %s not mounted: %s", uri, err->message));
+    } else {
+      GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+          ("Could not open location %s for reading: %s", uri, err->message));
+    }
+
+    g_free (uri);
+    g_clear_error (&err);
+    return NULL;
+  } else if (stream == NULL) {
+    g_free (uri);
+    return NULL;
+  }
+
+  GST_DEBUG_OBJECT (src, "opened location %s", uri);
+  g_free (uri);
+
+  return stream;
+}
diff --git a/ext/gio/gstgiosrc.h b/ext/gio/gstgiosrc.h
new file mode 100644
index 0000000..080d3d8
--- /dev/null
+++ b/ext/gio/gstgiosrc.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_SRC_H__
+#define __GST_GIO_SRC_H__
+
+#include "gstgio.h"
+#include "gstgiobasesrc.h"
+
+#include <gst/base/gstbasesrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_SRC \
+  (gst_gio_src_get_type())
+#define GST_GIO_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_SRC,GstGioSrc))
+#define GST_GIO_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_SRC,GstGioSrcClass))
+#define GST_IS_GIO_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_SRC))
+#define GST_IS_GIO_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_SRC))
+
+typedef struct _GstGioSrc      GstGioSrc;
+typedef struct _GstGioSrcClass GstGioSrcClass;
+
+/**
+ * GstGioSrc:
+ *
+ * Opaque data structure.
+ */
+struct _GstGioSrc
+{
+  GstGioBaseSrc src;
+  
+  /*< private >*/
+  GFile *file;
+};
+
+struct _GstGioSrcClass 
+{
+  GstGioBaseSrcClass parent_class;
+};
+
+GType gst_gio_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_SRC_H__ */
diff --git a/ext/gio/gstgiostreamsink.c b/ext/gio/gstgiostreamsink.c
new file mode 100644
index 0000000..a76a1e2
--- /dev/null
+++ b/ext/gio/gstgiostreamsink.c
@@ -0,0 +1,192 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-giostreamsink
+ *
+ * This plugin writes incoming data to a custom GIO #GOutputStream.
+ *
+ * It can, for example, be used to write a stream to memory with a
+ * #GMemoryOuputStream or to write to a file with a #GFileOuputStream.
+ *
+ * <refsect2>
+ * <title>Example code</title>
+ * <para>
+ * The following example writes the received data to a #GMemoryOutputStream.
+ * |[
+
+#include &lt;gst/gst.h&gt;
+#include &lt;gio/gio.h&gt;
+
+...
+
+GstElement *sink;
+GMemoryOuputStream *stream;
+// out_data will contain the received data
+guint8 *out_data;
+
+...
+
+stream = G_MEMORY_OUTPUT_STREAM (g_memory_output_stream_new (NULL, 0,
+          (GReallocFunc) g_realloc, (GDestroyNotify) g_free));
+sink = gst_element_factory_make ("giostreamsink", "sink");
+g_object_set (G_OBJECT (sink), "stream", stream, NULL);
+
+...
+
+// after processing get the written data
+out_data = g_memory_ouput_stream_get_data (G_MEMORY_OUTPUT_STREAM (stream));
+
+...
+
+ * ]|
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiostreamsink.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_stream_sink_debug);
+#define GST_CAT_DEFAULT gst_gio_stream_sink_debug
+
+/* Filter signals and args */
+enum
+{
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_STREAM
+};
+
+#define gst_gio_stream_sink_parent_class parent_class
+G_DEFINE_TYPE (GstGioStreamSink, gst_gio_stream_sink, GST_TYPE_GIO_BASE_SINK);
+
+static void gst_gio_stream_sink_finalize (GObject * object);
+static void gst_gio_stream_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gio_stream_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GOutputStream *gst_gio_stream_sink_get_stream (GstGioBaseSink * bsink);
+
+static void
+gst_gio_stream_sink_class_init (GstGioStreamSinkClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstGioBaseSinkClass *ggbsink_class = (GstGioBaseSinkClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_stream_sink_debug, "gio_stream_sink", 0,
+      "GIO stream sink");
+
+  gobject_class->finalize = gst_gio_stream_sink_finalize;
+  gobject_class->set_property = gst_gio_stream_sink_set_property;
+  gobject_class->get_property = gst_gio_stream_sink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_STREAM,
+      g_param_spec_object ("stream", "Stream", "Stream to write to",
+          G_TYPE_OUTPUT_STREAM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class, "GIO stream sink",
+      "Sink",
+      "Write to any GIO stream",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  ggbsink_class->get_stream =
+      GST_DEBUG_FUNCPTR (gst_gio_stream_sink_get_stream);
+}
+
+static void
+gst_gio_stream_sink_init (GstGioStreamSink * sink)
+{
+}
+
+static void
+gst_gio_stream_sink_finalize (GObject * object)
+{
+  GstGioStreamSink *sink = GST_GIO_STREAM_SINK (object);
+
+  if (sink->stream) {
+    g_object_unref (sink->stream);
+    sink->stream = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_gio_stream_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGioStreamSink *sink = GST_GIO_STREAM_SINK (object);
+
+  switch (prop_id) {
+    case PROP_STREAM:{
+      GObject *stream;
+
+      if (GST_STATE (sink) == GST_STATE_PLAYING ||
+          GST_STATE (sink) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new stream not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      stream = g_value_dup_object (value);
+      if (sink->stream)
+        g_object_unref (sink->stream);
+      sink->stream = G_OUTPUT_STREAM (stream);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gio_stream_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGioStreamSink *sink = GST_GIO_STREAM_SINK (object);
+
+  switch (prop_id) {
+    case PROP_STREAM:
+      g_value_set_object (value, GST_GIO_BASE_SINK (sink)->stream);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GOutputStream *
+gst_gio_stream_sink_get_stream (GstGioBaseSink * bsink)
+{
+  GstGioStreamSink *sink = GST_GIO_STREAM_SINK (bsink);
+
+  return (sink->stream) ? g_object_ref (sink->stream) : NULL;
+}
diff --git a/ext/gio/gstgiostreamsink.h b/ext/gio/gstgiostreamsink.h
new file mode 100644
index 0000000..5e6206b
--- /dev/null
+++ b/ext/gio/gstgiostreamsink.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_STREAM_SINK_H__
+#define __GST_GIO_STREAM_SINK_H__
+
+#include "gstgio.h"
+#include "gstgiobasesink.h"
+
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_STREAM_SINK \
+  (gst_gio_stream_sink_get_type())
+#define GST_GIO_STREAM_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_STREAM_SINK,GstGioStreamSink))
+#define GST_GIO_STREAM_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_STREAM_SINK,GstGioStreamSinkClass))
+#define GST_IS_GIO_STREAM_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_STREAM_SINK))
+#define GST_IS_GIO_STREAM_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_STREAM_SINK))
+
+typedef struct _GstGioStreamSink      GstGioStreamSink;
+typedef struct _GstGioStreamSinkClass GstGioStreamSinkClass;
+
+/**
+ * GstGioStreamSink:
+ *
+ * Opaque data structure.
+ */
+struct _GstGioStreamSink
+{
+  GstGioBaseSink sink;
+  
+  /* < private > */
+  GOutputStream *stream;
+};
+
+struct _GstGioStreamSinkClass 
+{
+  GstGioBaseSinkClass parent_class;
+};
+
+GType gst_gio_stream_sink_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_STREAM_SINK_H__ */
diff --git a/ext/gio/gstgiostreamsrc.c b/ext/gio/gstgiostreamsrc.c
new file mode 100644
index 0000000..600f347
--- /dev/null
+++ b/ext/gio/gstgiostreamsrc.c
@@ -0,0 +1,186 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-giostreamsrc
+ *
+ * This plugin reads data from a custom GIO #GInputStream.
+ *
+ * It can, for example, be used to read data from memory with a
+ * #GMemoryInputStream or to read from a file with a
+ * #GFileInputStream.
+ *
+ * <refsect2>
+ * <title>Example code</title>
+ * <para>
+ * The following example reads data from a #GMemoryInputStream.
+ * |[
+
+#include &lt;gst/gst.h&gt;
+#include &lt;gio/gio.h&gt;
+
+...
+
+GstElement *src;
+GMemoryInputStream *stream;
+// in_data will contain the data to send
+guint8 *in_data;
+gint i;
+
+...
+in_data = g_new (guint8, 512);
+for (i = 0; i < 512; i++)
+  in_data[i] = i % 256;
+
+stream = G_MEMORY_INPUT_STREAM (g_memory_input_stream_new_from_data (in_data, 512,
+          (GDestroyNotify) g_free));
+src = gst_element_factory_make ("giostreamsrc", "src");
+g_object_set (G_OBJECT (src), "stream", stream, NULL);
+
+...
+
+ * ]|
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gstgiostreamsrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_gio_stream_src_debug);
+#define GST_CAT_DEFAULT gst_gio_stream_src_debug
+
+enum
+{
+  PROP_0,
+  PROP_STREAM
+};
+
+#define gst_gio_stream_src_parent_class parent_class
+G_DEFINE_TYPE (GstGioStreamSrc, gst_gio_stream_src, GST_TYPE_GIO_BASE_SRC);
+
+static void gst_gio_stream_src_finalize (GObject * object);
+static void gst_gio_stream_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gio_stream_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GInputStream *gst_gio_stream_src_get_stream (GstGioBaseSrc * bsrc);
+
+static void
+gst_gio_stream_src_class_init (GstGioStreamSrcClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstGioBaseSrcClass *gstgiobasesrc_class = (GstGioBaseSrcClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_gio_stream_src_debug, "gio_stream_src", 0,
+      "GIO source");
+
+  gobject_class->finalize = gst_gio_stream_src_finalize;
+  gobject_class->set_property = gst_gio_stream_src_set_property;
+  gobject_class->get_property = gst_gio_stream_src_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_STREAM,
+      g_param_spec_object ("stream", "Stream", "Stream to read from",
+          G_TYPE_INPUT_STREAM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class, "GIO stream source",
+      "Source",
+      "Read from any GIO stream",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstgiobasesrc_class->get_stream =
+      GST_DEBUG_FUNCPTR (gst_gio_stream_src_get_stream);
+}
+
+static void
+gst_gio_stream_src_init (GstGioStreamSrc * src)
+{
+}
+
+static void
+gst_gio_stream_src_finalize (GObject * object)
+{
+  GstGioStreamSrc *src = GST_GIO_STREAM_SRC (object);
+
+  if (src->stream) {
+    g_object_unref (src->stream);
+    src->stream = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_gio_stream_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGioStreamSrc *src = GST_GIO_STREAM_SRC (object);
+
+  switch (prop_id) {
+    case PROP_STREAM:{
+      GObject *stream;
+
+      if (GST_STATE (src) == GST_STATE_PLAYING ||
+          GST_STATE (src) == GST_STATE_PAUSED) {
+        GST_WARNING
+            ("Setting a new stream not supported in PLAYING or PAUSED state");
+        break;
+      }
+
+      stream = g_value_dup_object (value);
+      if (src->stream)
+        g_object_unref (src->stream);
+      src->stream = G_INPUT_STREAM (stream);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gio_stream_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGioStreamSrc *src = GST_GIO_STREAM_SRC (object);
+
+  switch (prop_id) {
+    case PROP_STREAM:
+      g_value_set_object (value, src->stream);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GInputStream *
+gst_gio_stream_src_get_stream (GstGioBaseSrc * bsrc)
+{
+  GstGioStreamSrc *src = GST_GIO_STREAM_SRC (bsrc);
+
+  return (src->stream) ? g_object_ref (src->stream) : NULL;
+}
diff --git a/ext/gio/gstgiostreamsrc.h b/ext/gio/gstgiostreamsrc.h
new file mode 100644
index 0000000..975a277
--- /dev/null
+++ b/ext/gio/gstgiostreamsrc.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
+ * Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GIO_STREAM_SRC_H__
+#define __GST_GIO_STREAM_SRC_H__
+
+#include "gstgio.h"
+#include "gstgiobasesrc.h"
+
+#include <gst/base/gstbasesrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GIO_STREAM_SRC \
+  (gst_gio_stream_src_get_type())
+#define GST_GIO_STREAM_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_STREAM_SRC,GstGioStreamSrc))
+#define GST_GIO_STREAM_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_STREAM_SRC,GstGioStreamSrcClass))
+#define GST_IS_GIO_STREAM_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_STREAM_SRC))
+#define GST_IS_GIO_STREAM_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_STREAM_SRC))
+
+typedef struct _GstGioStreamSrc      GstGioStreamSrc;
+typedef struct _GstGioStreamSrcClass GstGioStreamSrcClass;
+
+/**
+ * GstGioStreamSrc:
+ *
+ * Opaque data structure.
+ */
+struct _GstGioStreamSrc
+{
+  GstGioBaseSrc src;
+
+  /* < private > */
+  GInputStream *stream;
+};
+
+struct _GstGioStreamSrcClass 
+{
+  GstGioBaseSrcClass parent_class;
+};
+
+GType gst_gio_stream_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GIO_STREAM_SRC_H__ */
diff --git a/ext/libvisual/Makefile.am b/ext/libvisual/Makefile.am
new file mode 100644
index 0000000..27431e5
--- /dev/null
+++ b/ext/libvisual/Makefile.am
@@ -0,0 +1,10 @@
+plugin_LTLIBRARIES = libgstlibvisual.la
+
+libgstlibvisual_la_SOURCES = visual.c 
+libgstlibvisual_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS)
+libgstlibvisual_la_LIBADD = \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(LIBVISUAL_LIBS)
+libgstlibvisual_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstlibvisual_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
new file mode 100644
index 0000000..13b96b8
--- /dev/null
+++ b/ext/libvisual/Makefile.in
@@ -0,0 +1,754 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/libvisual
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstlibvisual_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstlibvisual_la_OBJECTS = libgstlibvisual_la-visual.lo
+libgstlibvisual_la_OBJECTS = $(am_libgstlibvisual_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstlibvisual_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) \
+	$(libgstlibvisual_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstlibvisual_la_SOURCES)
+DIST_SOURCES = $(libgstlibvisual_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstlibvisual.la
+libgstlibvisual_la_SOURCES = visual.c 
+libgstlibvisual_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS)
+libgstlibvisual_la_LIBADD = \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(LIBVISUAL_LIBS)
+
+libgstlibvisual_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstlibvisual_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/libvisual/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/libvisual/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstlibvisual.la: $(libgstlibvisual_la_OBJECTS) $(libgstlibvisual_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstlibvisual_la_LINK) -rpath $(plugindir) $(libgstlibvisual_la_OBJECTS) $(libgstlibvisual_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstlibvisual_la-visual.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstlibvisual_la-visual.lo: visual.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) -MT libgstlibvisual_la-visual.lo -MD -MP -MF $(DEPDIR)/libgstlibvisual_la-visual.Tpo -c -o libgstlibvisual_la-visual.lo `test -f 'visual.c' || echo '$(srcdir)/'`visual.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstlibvisual_la-visual.Tpo $(DEPDIR)/libgstlibvisual_la-visual.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='visual.c' object='libgstlibvisual_la-visual.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) -c -o libgstlibvisual_la-visual.lo `test -f 'visual.c' || echo '$(srcdir)/'`visual.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/libvisual/visual.c b/ext/libvisual/visual.c
new file mode 100644
index 0000000..14c0e96
--- /dev/null
+++ b/ext/libvisual/visual.c
@@ -0,0 +1,1104 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <otte@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/video/video.h>
+#include <gst/audio/audio.h>
+#include <libvisual/libvisual.h>
+
+#define GST_TYPE_VISUAL (gst_visual_get_type())
+#define GST_IS_VISUAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VISUAL))
+#define GST_VISUAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VISUAL,GstVisual))
+#define GST_IS_VISUAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VISUAL))
+#define GST_VISUAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VISUAL,GstVisualClass))
+#define GST_VISUAL_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VISUAL, GstVisualClass))
+
+typedef struct _GstVisual GstVisual;
+typedef struct _GstVisualClass GstVisualClass;
+
+GST_DEBUG_CATEGORY_STATIC (libvisual_debug);
+#define GST_CAT_DEFAULT (libvisual_debug)
+
+/* amounf of samples before we can feed libvisual */
+#define VISUAL_SAMPLES  512
+
+#define DEFAULT_WIDTH   320
+#define DEFAULT_HEIGHT  240
+#define DEFAULT_FPS_N   25
+#define DEFAULT_FPS_D   1
+
+struct _GstVisual
+{
+  GstElement element;
+
+  /* pads */
+  GstPad *sinkpad;
+  GstPad *srcpad;
+  GstSegment segment;
+
+  /* libvisual stuff */
+  VisAudio *audio;
+  VisVideo *video;
+  VisActor *actor;
+
+  /* audio/video state */
+  GstAudioInfo info;
+
+  /* framerate numerator & denominator */
+  gint fps_n;
+  gint fps_d;
+  gint width;
+  gint height;
+  GstClockTime duration;
+  guint outsize;
+  GstBufferPool *pool;
+
+  /* samples per frame based on caps */
+  guint spf;
+
+  /* state stuff */
+  GstAdapter *adapter;
+  guint count;
+
+  /* QoS stuff *//* with LOCK */
+  gdouble proportion;
+  GstClockTime earliest_time;
+};
+
+struct _GstVisualClass
+{
+  GstElementClass parent_class;
+
+  VisPluginRef *plugin;
+};
+
+GType gst_visual_get_type (void);
+
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (" { "
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+            "\"xRGB\", " "\"RGB\", "
+#else
+            "\"BGRx\", " "\"BGR\", "
+#endif
+            "\"RGB16\" } "))
+    );
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "channels = (int) { 1, 2 }, "
+#if defined(VISUAL_API_VERSION) && VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
+        "rate = (int) { 8000, 11250, 22500, 32000, 44100, 48000, 96000 }"
+#else
+        "rate = (int) [ 1000, MAX ]"
+#endif
+    )
+    );
+
+
+static void gst_visual_class_init (gpointer g_class, gpointer class_data);
+static void gst_visual_init (GstVisual * visual);
+static void gst_visual_finalize (GObject * object);
+
+static GstStateChangeReturn gst_visual_change_state (GstElement * element,
+    GstStateChange transition);
+static GstFlowReturn gst_visual_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_visual_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_visual_src_event (GstPad * pad, GstEvent * event);
+
+static gboolean gst_visual_src_query (GstPad * pad, GstQuery * query);
+
+static gboolean gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps);
+static GstCaps *gst_visual_getcaps (GstPad * pad, GstCaps * filter);
+static void libvisual_log_handler (const char *message, const char *funcname,
+    void *priv);
+
+static GstElementClass *parent_class = NULL;
+
+GType
+gst_visual_get_type (void)
+{
+  static GType type = 0;
+
+  if (G_UNLIKELY (type == 0)) {
+    static const GTypeInfo info = {
+      sizeof (GstVisualClass),
+      NULL,
+      NULL,
+      gst_visual_class_init,
+      NULL,
+      NULL,
+      sizeof (GstVisual),
+      0,
+      (GInstanceInitFunc) gst_visual_init,
+    };
+
+    type = g_type_register_static (GST_TYPE_ELEMENT, "GstVisual", &info, 0);
+  }
+  return type;
+}
+
+static void
+libvisual_log_handler (const char *message, const char *funcname, void *priv)
+{
+  GST_CAT_LEVEL_LOG (libvisual_debug, (GstDebugLevel) (priv), NULL, "%s - %s",
+      funcname, message);
+}
+
+static void
+gst_visual_class_init (gpointer g_class, gpointer class_data)
+{
+  GstVisualClass *klass = GST_VISUAL_CLASS (g_class);
+  GstElementClass *element = GST_ELEMENT_CLASS (g_class);
+  GObjectClass *object = G_OBJECT_CLASS (g_class);
+
+  klass->plugin = class_data;
+
+  element->change_state = gst_visual_change_state;
+
+  if (class_data == NULL) {
+    parent_class = g_type_class_peek_parent (g_class);
+  } else {
+    char *longname = g_strdup_printf ("libvisual %s plugin v.%s",
+        klass->plugin->info->name, klass->plugin->info->version);
+
+    /* FIXME: improve to only register what plugin supports? */
+    gst_element_class_add_pad_template (element,
+        gst_static_pad_template_get (&src_template));
+    gst_element_class_add_pad_template (element,
+        gst_static_pad_template_get (&sink_template));
+
+    gst_element_class_set_details_simple (element,
+        longname, "Visualization",
+        klass->plugin->info->about, "Benjamin Otte <otte@gnome.org>");
+
+    g_free (longname);
+  }
+
+  object->finalize = gst_visual_finalize;
+}
+
+static void
+gst_visual_init (GstVisual * visual)
+{
+  /* create the sink and src pads */
+  visual->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+  gst_pad_set_chain_function (visual->sinkpad, gst_visual_chain);
+  gst_pad_set_event_function (visual->sinkpad, gst_visual_sink_event);
+  gst_element_add_pad (GST_ELEMENT (visual), visual->sinkpad);
+
+  visual->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+  gst_pad_set_getcaps_function (visual->srcpad, gst_visual_getcaps);
+  gst_pad_set_event_function (visual->srcpad, gst_visual_src_event);
+  gst_pad_set_query_function (visual->srcpad, gst_visual_src_query);
+  gst_element_add_pad (GST_ELEMENT (visual), visual->srcpad);
+
+  visual->adapter = gst_adapter_new ();
+}
+
+static void
+gst_visual_clear_actors (GstVisual * visual)
+{
+  if (visual->actor) {
+    visual_object_unref (VISUAL_OBJECT (visual->actor));
+    visual->actor = NULL;
+  }
+  if (visual->video) {
+    visual_object_unref (VISUAL_OBJECT (visual->video));
+    visual->video = NULL;
+  }
+  if (visual->audio) {
+    visual_object_unref (VISUAL_OBJECT (visual->audio));
+    visual->audio = NULL;
+  }
+}
+
+static void
+gst_visual_finalize (GObject * object)
+{
+  GstVisual *visual = GST_VISUAL (object);
+
+  g_object_unref (visual->adapter);
+  if (visual->pool)
+    gst_object_unref (visual->pool);
+  gst_visual_clear_actors (visual);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_visual_reset (GstVisual * visual)
+{
+  gst_adapter_clear (visual->adapter);
+  gst_segment_init (&visual->segment, GST_FORMAT_UNDEFINED);
+
+  GST_OBJECT_LOCK (visual);
+  visual->proportion = 1.0;
+  visual->earliest_time = -1;
+  GST_OBJECT_UNLOCK (visual);
+}
+
+static GstCaps *
+gst_visual_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstCaps *ret;
+  GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad));
+  int depths;
+
+  if (!visual->actor) {
+    ret = gst_pad_get_pad_template_caps (visual->srcpad);
+    goto beach;
+  }
+
+  ret = gst_caps_new_empty ();
+  depths = visual_actor_get_supported_depth (visual->actor);
+  if (depths < 0) {
+    /* FIXME: set an error */
+    goto beach;
+  }
+  if (depths == VISUAL_VIDEO_DEPTH_GL) {
+    /* We can't handle GL only plugins */
+    goto beach;
+  }
+
+  GST_DEBUG_OBJECT (visual, "libvisual plugin supports depths %u (0x%04x)",
+      depths, depths);
+  /* if (depths & VISUAL_VIDEO_DEPTH_32BIT) Always supports 32bit output */
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  gst_caps_append (ret, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("xRGB")));
+#else
+  gst_caps_append (ret, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("BGRx")));
+#endif
+
+  if (depths & VISUAL_VIDEO_DEPTH_24BIT) {
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+    gst_caps_append (ret, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGB")));
+#else
+    gst_caps_append (ret, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("BGR")));
+#endif
+  }
+  if (depths & VISUAL_VIDEO_DEPTH_16BIT) {
+    gst_caps_append (ret, gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGB16")));
+  }
+
+beach:
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (ret);
+    ret = intersection;
+  }
+
+  GST_DEBUG_OBJECT (visual, "returning caps %" GST_PTR_FORMAT, ret);
+  gst_object_unref (visual);
+  return ret;
+}
+
+static gboolean
+gst_visual_src_setcaps (GstVisual * visual, GstCaps * caps)
+{
+  gboolean res;
+  GstStructure *structure;
+  gint depth, pitch, rate;
+  const gchar *fmt;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  GST_DEBUG_OBJECT (visual, "src pad got caps %" GST_PTR_FORMAT, caps);
+
+  if (!gst_structure_get_int (structure, "width", &visual->width))
+    goto error;
+  if (!gst_structure_get_int (structure, "height", &visual->height))
+    goto error;
+  if (!(fmt = gst_structure_get_string (structure, "format")))
+    goto error;
+  if (!gst_structure_get_fraction (structure, "framerate", &visual->fps_n,
+          &visual->fps_d))
+    goto error;
+
+  if (!strcmp (fmt, "BGR") || !strcmp (fmt, "RGB"))
+    depth = 24;
+  else if (!strcmp (fmt, "BGRx") || !strcmp (fmt, "xRGB"))
+    depth = 32;
+  else
+    depth = 16;
+
+  visual_video_set_depth (visual->video,
+      visual_video_depth_enum_from_value (depth));
+  visual_video_set_dimension (visual->video, visual->width, visual->height);
+  pitch = GST_ROUND_UP_4 (visual->width * visual->video->bpp);
+  visual_video_set_pitch (visual->video, pitch);
+  visual_actor_video_negotiate (visual->actor, 0, FALSE, FALSE);
+
+  rate = GST_AUDIO_INFO_RATE (&visual->info);
+
+  /* precalc some values */
+  visual->outsize = visual->video->height * pitch;
+  visual->spf = gst_util_uint64_scale_int (rate, visual->fps_d, visual->fps_n);
+  visual->duration =
+      gst_util_uint64_scale_int (GST_SECOND, visual->fps_d, visual->fps_n);
+
+  res = gst_pad_push_event (visual->srcpad, gst_event_new_caps (caps));
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (visual, "error parsing caps");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps)
+{
+  GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad));
+  GstAudioInfo info;
+  gint rate;
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto invalid_caps;
+
+  visual->info = info;
+
+  rate = GST_AUDIO_INFO_RATE (&info);
+
+  /* this is how many samples we need to fill one frame at the requested
+   * framerate. */
+  if (visual->fps_n != 0) {
+    visual->spf =
+        gst_util_uint64_scale_int (rate, visual->fps_d, visual->fps_n);
+  }
+
+  gst_object_unref (visual);
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_caps:
+  {
+    GST_ERROR_OBJECT (visual, "invalid caps received");
+    gst_object_unref (visual);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_vis_src_negotiate (GstVisual * visual)
+{
+  GstCaps *othercaps, *target;
+  GstStructure *structure;
+  GstCaps *caps;
+  GstQuery *query;
+  GstBufferPool *pool = NULL;
+  guint size, min, max, prefix, alignment;
+
+  caps = gst_pad_get_caps (visual->srcpad, NULL);
+
+  /* see what the peer can do */
+  othercaps = gst_pad_peer_get_caps (visual->srcpad, caps);
+  if (othercaps) {
+    target = othercaps;
+    gst_caps_unref (caps);
+
+    if (gst_caps_is_empty (target))
+      goto no_format;
+
+    target = gst_caps_make_writable (target);
+    gst_caps_truncate (target);
+  } else {
+    /* need a copy, we'll be modifying it when fixating */
+    target = gst_caps_copy (caps);
+    gst_caps_unref (caps);
+  }
+  GST_DEBUG_OBJECT (visual, "before fixate caps %" GST_PTR_FORMAT, target);
+
+  /* fixate in case something is not fixed. This does nothing if the value is
+   * already fixed. For video we always try to fixate to something like
+   * 320x240x25 by convention. */
+  structure = gst_caps_get_structure (target, 0);
+  gst_structure_fixate_field_nearest_int (structure, "width", DEFAULT_WIDTH);
+  gst_structure_fixate_field_nearest_int (structure, "height", DEFAULT_HEIGHT);
+  gst_structure_fixate_field_nearest_fraction (structure, "framerate",
+      DEFAULT_FPS_N, DEFAULT_FPS_D);
+
+  gst_pad_fixate_caps (visual->srcpad, target);
+
+  GST_DEBUG_OBJECT (visual, "after fixate caps %" GST_PTR_FORMAT, target);
+
+  gst_visual_src_setcaps (visual, target);
+
+  /* try to get a bufferpool now */
+  /* find a pool for the negotiated caps now */
+  query = gst_query_new_allocation (target, TRUE);
+
+  if (gst_pad_peer_query (visual->srcpad, query)) {
+    /* we got configuration from our peer, parse them */
+    gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+        &alignment, &pool);
+  } else {
+    size = visual->outsize;
+    min = max = 0;
+    prefix = 0;
+    alignment = 0;
+  }
+
+  if (pool == NULL) {
+    GstStructure *config;
+
+    /* we did not get a pool, make one ourselves then */
+    pool = gst_buffer_pool_new ();
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_set (config, target, size, min, max, prefix,
+        alignment);
+    gst_buffer_pool_set_config (pool, config);
+  }
+
+  if (visual->pool)
+    gst_object_unref (visual->pool);
+  visual->pool = pool;
+
+  /* and activate */
+  gst_buffer_pool_set_active (pool, TRUE);
+
+  gst_caps_unref (target);
+
+  return TRUE;
+
+  /* ERRORS */
+no_format:
+  {
+    GST_ELEMENT_ERROR (visual, STREAM, FORMAT, (NULL),
+        ("could not negotiate output format"));
+    gst_caps_unref (target);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_visual_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstVisual *visual;
+  gboolean res;
+
+  visual = GST_VISUAL (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      res = gst_pad_push_event (visual->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      /* reset QoS and adapter. */
+      gst_visual_reset (visual);
+      res = gst_pad_push_event (visual->srcpad, event);
+      break;
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_visual_sink_setcaps (pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      /* the newsegment values are used to clip the input samples
+       * and to convert the incomming timestamps to running time so
+       * we can do QoS */
+      gst_event_copy_segment (event, &visual->segment);
+
+      /* and forward */
+      res = gst_pad_push_event (visual->srcpad, event);
+      break;
+    }
+    default:
+      res = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (visual);
+  return res;
+}
+
+static gboolean
+gst_visual_src_event (GstPad * pad, GstEvent * event)
+{
+  GstVisual *visual;
+  gboolean res;
+
+  visual = GST_VISUAL (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_QOS:
+    {
+      gdouble proportion;
+      GstClockTimeDiff diff;
+      GstClockTime timestamp;
+
+      gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
+
+      /* save stuff for the _chain function */
+      GST_OBJECT_LOCK (visual);
+      visual->proportion = proportion;
+      if (diff >= 0)
+        /* we're late, this is a good estimate for next displayable
+         * frame (see part-qos.txt) */
+        visual->earliest_time = timestamp + 2 * diff + visual->duration;
+      else
+        visual->earliest_time = timestamp + diff;
+
+      GST_OBJECT_UNLOCK (visual);
+
+      res = gst_pad_push_event (visual->sinkpad, event);
+      break;
+    }
+    case GST_EVENT_RECONFIGURE:
+      /* dont't forward */
+      gst_event_unref (event);
+      res = TRUE;
+      break;
+    default:
+      res = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (visual);
+  return res;
+}
+
+static gboolean
+gst_visual_src_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res;
+  GstVisual *visual;
+
+  visual = GST_VISUAL (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      /* We need to send the query upstream and add the returned latency to our
+       * own */
+      GstClockTime min_latency, max_latency;
+      gboolean us_live;
+      GstClockTime our_latency;
+      guint max_samples;
+
+      if ((res = gst_pad_peer_query (visual->sinkpad, query))) {
+        gst_query_parse_latency (query, &us_live, &min_latency, &max_latency);
+
+        GST_DEBUG_OBJECT (visual, "Peer latency: min %"
+            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+        /* the max samples we must buffer buffer */
+        max_samples = MAX (VISUAL_SAMPLES, visual->spf);
+        our_latency =
+            gst_util_uint64_scale_int (max_samples, GST_SECOND,
+            GST_AUDIO_INFO_RATE (&visual->info));
+
+        GST_DEBUG_OBJECT (visual, "Our latency: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (our_latency));
+
+        /* we add some latency but only if we need to buffer more than what
+         * upstream gives us */
+        min_latency += our_latency;
+        if (max_latency != -1)
+          max_latency += our_latency;
+
+        GST_DEBUG_OBJECT (visual, "Calculated total latency : min %"
+            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+        gst_query_set_latency (query, TRUE, min_latency, max_latency);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_peer_query (visual->sinkpad, query);
+      break;
+  }
+
+  gst_object_unref (visual);
+
+  return res;
+}
+
+/* Make sure we are negotiated */
+static GstFlowReturn
+ensure_negotiated (GstVisual * visual)
+{
+  gboolean reconfigure;
+
+  GST_OBJECT_LOCK (visual->srcpad);
+  reconfigure = GST_PAD_NEEDS_RECONFIGURE (visual->srcpad);
+  GST_OBJECT_FLAG_UNSET (visual->srcpad, GST_PAD_NEED_RECONFIGURE);
+  GST_OBJECT_UNLOCK (visual->srcpad);
+
+  /* we don't know an output format yet, pick one */
+  if (reconfigure || !gst_pad_has_current_caps (visual->srcpad)) {
+    if (!gst_vis_src_negotiate (visual))
+      return GST_FLOW_NOT_NEGOTIATED;
+  }
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_visual_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstBuffer *outbuf = NULL;
+  guint i;
+  GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad));
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint avail;
+  gint bpf, rate, channels;
+
+  GST_DEBUG_OBJECT (visual, "chain function called");
+
+  /* Make sure have an output format */
+  ret = ensure_negotiated (visual);
+  if (ret != GST_FLOW_OK) {
+    gst_buffer_unref (buffer);
+    goto beach;
+  }
+
+  /* resync on DISCONT */
+  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
+    gst_adapter_clear (visual->adapter);
+  }
+
+  rate = GST_AUDIO_INFO_RATE (&visual->info);
+  bpf = GST_AUDIO_INFO_BPF (&visual->info);
+  channels = GST_AUDIO_INFO_CHANNELS (&visual->info);
+
+  GST_DEBUG_OBJECT (visual,
+      "Input buffer has %d samples, time=%" G_GUINT64_FORMAT,
+      gst_buffer_get_size (buffer) / bpf, GST_BUFFER_TIMESTAMP (buffer));
+
+  gst_adapter_push (visual->adapter, buffer);
+
+  while (TRUE) {
+    gboolean need_skip;
+    const guint16 *data;
+    guint64 dist, timestamp;
+    guint8 *outdata;
+    gsize outsize;
+
+    GST_DEBUG_OBJECT (visual, "processing buffer");
+
+    avail = gst_adapter_available (visual->adapter);
+    GST_DEBUG_OBJECT (visual, "avail now %u", avail);
+
+    /* we need at least VISUAL_SAMPLES samples */
+    if (avail < VISUAL_SAMPLES * bpf)
+      break;
+
+    /* we need at least enough samples to make one frame */
+    if (avail < visual->spf * bpf)
+      break;
+
+    /* get timestamp of the current adapter byte */
+    timestamp = gst_adapter_prev_timestamp (visual->adapter, &dist);
+    if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+      /* convert bytes to time */
+      dist /= bpf;
+      timestamp += gst_util_uint64_scale_int (dist, GST_SECOND, rate);
+    }
+
+    if (timestamp != -1) {
+      gint64 qostime;
+
+      /* QoS is done on running time */
+      qostime = gst_segment_to_running_time (&visual->segment, GST_FORMAT_TIME,
+          timestamp);
+      qostime += visual->duration;
+
+      GST_OBJECT_LOCK (visual);
+      /* check for QoS, don't compute buffers that are known to be late */
+      need_skip = visual->earliest_time != -1 &&
+          qostime <= visual->earliest_time;
+      GST_OBJECT_UNLOCK (visual);
+
+      if (need_skip) {
+        GST_WARNING_OBJECT (visual,
+            "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (qostime), GST_TIME_ARGS (visual->earliest_time));
+        goto skip;
+      }
+    }
+
+    /* Read VISUAL_SAMPLES samples per channel */
+    data =
+        (const guint16 *) gst_adapter_map (visual->adapter,
+        VISUAL_SAMPLES * bpf);
+
+#if defined(VISUAL_API_VERSION) && VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
+    {
+      VisBuffer *lbuf, *rbuf;
+      guint16 ldata[VISUAL_SAMPLES], rdata[VISUAL_SAMPLES];
+      VisAudioSampleRateType vrate;
+
+      lbuf = visual_buffer_new_with_buffer (ldata, sizeof (ldata), NULL);
+      rbuf = visual_buffer_new_with_buffer (rdata, sizeof (rdata), NULL);
+
+      if (channels == 2) {
+        for (i = 0; i < VISUAL_SAMPLES; i++) {
+          ldata[i] = *data++;
+          rdata[i] = *data++;
+        }
+      } else {
+        for (i = 0; i < VISUAL_SAMPLES; i++) {
+          ldata[i] = *data;
+          rdata[i] = *data++;
+        }
+      }
+
+      switch (rate) {
+        case 8000:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_8000;
+          break;
+        case 11250:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_11250;
+          break;
+        case 22500:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_22500;
+          break;
+        case 32000:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_32000;
+          break;
+        case 44100:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_44100;
+          break;
+        case 48000:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_48000;
+          break;
+        case 96000:
+          vrate = VISUAL_AUDIO_SAMPLE_RATE_96000;
+          break;
+        default:
+          visual_object_unref (VISUAL_OBJECT (lbuf));
+          visual_object_unref (VISUAL_OBJECT (rbuf));
+          GST_ERROR_OBJECT (visual, "unsupported rate %d", rate);
+          ret = GST_FLOW_ERROR;
+          goto beach;
+          break;
+      }
+
+      visual_audio_samplepool_input_channel (visual->audio->samplepool,
+          lbuf,
+          vrate, VISUAL_AUDIO_SAMPLE_FORMAT_S16,
+          (char *) VISUAL_AUDIO_CHANNEL_LEFT);
+      visual_audio_samplepool_input_channel (visual->audio->samplepool, rbuf,
+          vrate, VISUAL_AUDIO_SAMPLE_FORMAT_S16,
+          (char *) VISUAL_AUDIO_CHANNEL_RIGHT);
+
+      visual_object_unref (VISUAL_OBJECT (lbuf));
+      visual_object_unref (VISUAL_OBJECT (rbuf));
+
+    }
+#else
+    if (visual->channels == 2) {
+      for (i = 0; i < VISUAL_SAMPLES; i++) {
+        visual->audio->plugpcm[0][i] = *data++;
+        visual->audio->plugpcm[1][i] = *data++;
+      }
+    } else {
+      for (i = 0; i < VISUAL_SAMPLES; i++) {
+        visual->audio->plugpcm[0][i] = *data;
+        visual->audio->plugpcm[1][i] = *data++;
+      }
+    }
+#endif
+
+    /* alloc a buffer if we don't have one yet, this happens
+     * when we pushed a buffer in this while loop before */
+    if (outbuf == NULL) {
+      GST_DEBUG_OBJECT (visual, "allocating output buffer");
+      ret = gst_buffer_pool_acquire_buffer (visual->pool, &outbuf, NULL);
+      if (ret != GST_FLOW_OK) {
+        gst_adapter_unmap (visual->adapter, 0);
+        goto beach;
+      }
+    }
+    outdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE);
+    visual_video_set_buffer (visual->video, outdata);
+    visual_audio_analyze (visual->audio);
+    visual_actor_run (visual->actor, visual->audio);
+    visual_video_set_buffer (visual->video, NULL);
+    gst_buffer_unmap (outbuf, outdata, outsize);
+    GST_DEBUG_OBJECT (visual, "rendered one frame");
+
+    gst_adapter_unmap (visual->adapter, 0);
+
+    GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+    GST_BUFFER_DURATION (outbuf) = visual->duration;
+
+    ret = gst_pad_push (visual->srcpad, outbuf);
+    outbuf = NULL;
+
+  skip:
+    GST_DEBUG_OBJECT (visual, "finished frame, flushing %u samples from input",
+        visual->spf);
+
+    /* Flush out the number of samples per frame */
+    gst_adapter_flush (visual->adapter, visual->spf * bpf);
+
+    /* quit the loop if something was wrong */
+    if (ret != GST_FLOW_OK)
+      break;
+  }
+
+beach:
+
+  if (outbuf != NULL)
+    gst_buffer_unref (outbuf);
+
+  gst_object_unref (visual);
+
+  return ret;
+}
+
+static GstStateChangeReturn
+gst_visual_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVisual *visual = GST_VISUAL (element);
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      visual->actor =
+          visual_actor_new (GST_VISUAL_GET_CLASS (visual)->plugin->info->
+          plugname);
+      visual->video = visual_video_new ();
+      visual->audio = visual_audio_new ();
+      /* can't have a play without actors */
+      if (!visual->actor || !visual->video)
+        goto no_actors;
+
+      if (visual_actor_realize (visual->actor) != 0)
+        goto no_realize;
+
+      visual_actor_set_video (visual->actor, visual->video);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      gst_visual_reset (visual);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (visual->pool) {
+        gst_buffer_pool_set_active (visual->pool, FALSE);
+        gst_object_unref (visual->pool);
+        visual->pool = NULL;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_visual_clear_actors (visual);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+
+  /* ERRORS */
+no_actors:
+  {
+    GST_ELEMENT_ERROR (visual, LIBRARY, INIT, (NULL),
+        ("could not create actors"));
+    gst_visual_clear_actors (visual);
+    return GST_STATE_CHANGE_FAILURE;
+  }
+no_realize:
+  {
+    GST_ELEMENT_ERROR (visual, LIBRARY, INIT, (NULL),
+        ("could not realize actor"));
+    gst_visual_clear_actors (visual);
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
+
+static void
+make_valid_name (char *name)
+{
+  /*
+   * Replace invalid chars with _ in the type name
+   */
+  static const gchar extra_chars[] = "-_+";
+  gchar *p = name;
+
+  for (; *p; p++) {
+    int valid = ((p[0] >= 'A' && p[0] <= 'Z') ||
+        (p[0] >= 'a' && p[0] <= 'z') ||
+        (p[0] >= '0' && p[0] <= '9') || strchr (extra_chars, p[0]));
+    if (!valid)
+      *p = '_';
+  }
+}
+
+static gboolean
+gst_visual_actor_plugin_is_gl (VisObject * plugin, const gchar * name)
+{
+  gboolean is_gl;
+  gint depth;
+
+#if !defined(VISUAL_API_VERSION)
+
+  depth = VISUAL_PLUGIN_ACTOR (plugin)->depth;
+  is_gl = (depth == VISUAL_VIDEO_DEPTH_GL);
+
+#elif VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
+
+  depth = VISUAL_ACTOR_PLUGIN (plugin)->vidoptions.depth;
+  /* FIXME: how to figure this out correctly in 0.4? */
+  is_gl = (depth & VISUAL_VIDEO_DEPTH_GL) == VISUAL_VIDEO_DEPTH_GL;
+
+#else
+# error what libvisual version is this?
+#endif
+
+  if (!is_gl) {
+    GST_DEBUG ("plugin %s is not a GL plugin (%d), registering", name, depth);
+  } else {
+    GST_DEBUG ("plugin %s is a GL plugin (%d), ignoring", name, depth);
+  }
+
+  return is_gl;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  guint i, count;
+  VisList *list;
+
+  GST_DEBUG_CATEGORY_INIT (libvisual_debug, "libvisual", 0,
+      "libvisual audio visualisations");
+
+#ifdef LIBVISUAL_PLUGINSBASEDIR
+  gst_plugin_add_dependency_simple (plugin, "HOME/.libvisual/actor",
+      LIBVISUAL_PLUGINSBASEDIR "/actor", NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
+#endif
+
+  visual_log_set_verboseness (VISUAL_LOG_VERBOSENESS_LOW);
+  visual_log_set_info_handler (libvisual_log_handler, (void *) GST_LEVEL_INFO);
+  visual_log_set_warning_handler (libvisual_log_handler,
+      (void *) GST_LEVEL_WARNING);
+  visual_log_set_critical_handler (libvisual_log_handler,
+      (void *) GST_LEVEL_ERROR);
+  visual_log_set_error_handler (libvisual_log_handler,
+      (void *) GST_LEVEL_ERROR);
+
+  if (!visual_is_initialized ())
+    if (visual_init (NULL, NULL) != 0)
+      return FALSE;
+
+  list = visual_actor_get_list ();
+
+#if !defined(VISUAL_API_VERSION)
+  count = visual_list_count (list);
+#elif VISUAL_API_VERSION >= 4000 && VISUAL_API_VERSION < 5000
+  count = visual_collection_size (VISUAL_COLLECTION (list));
+#endif
+
+  for (i = 0; i < count; i++) {
+    VisPluginRef *ref = visual_list_get (list, i);
+    VisPluginData *visplugin = NULL;
+    gboolean skip = FALSE;
+    GType type;
+    gchar *name;
+    GTypeInfo info = {
+      sizeof (GstVisualClass),
+      NULL,
+      NULL,
+      gst_visual_class_init,
+      NULL,
+      ref,
+      sizeof (GstVisual),
+      0,
+      NULL
+    };
+
+    visplugin = visual_plugin_load (ref);
+
+    if (ref->info->plugname == NULL)
+      continue;
+
+    /* Blacklist some plugins */
+    if (strcmp (ref->info->plugname, "gstreamer") == 0 ||
+        strcmp (ref->info->plugname, "gdkpixbuf") == 0) {
+      skip = TRUE;
+    } else {
+      /* Ignore plugins that only support GL output for now */
+      skip = gst_visual_actor_plugin_is_gl (visplugin->info->plugin,
+          visplugin->info->plugname);
+    }
+
+    visual_plugin_unload (visplugin);
+
+    if (!skip) {
+      name = g_strdup_printf ("GstVisual%s", ref->info->plugname);
+      make_valid_name (name);
+      type = g_type_register_static (GST_TYPE_VISUAL, name, &info, 0);
+      g_free (name);
+
+      name = g_strdup_printf ("libvisual_%s", ref->info->plugname);
+      make_valid_name (name);
+      if (!gst_element_register (plugin, name, GST_RANK_NONE, type)) {
+        g_free (name);
+        return FALSE;
+      }
+      g_free (name);
+    }
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "libvisual",
+    "libvisual visualization plugins",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/ogg/Makefile.am b/ext/ogg/Makefile.am
new file mode 100644
index 0000000..3d23821
--- /dev/null
+++ b/ext/ogg/Makefile.am
@@ -0,0 +1,45 @@
+plugin_LTLIBRARIES = libgstogg.la
+
+libgstogg_la_SOURCES = \
+	gstogg.c \
+	gstoggdemux.c \
+	gstoggmux.c \
+	gstogmparse.c \
+	gstoggaviparse.c \
+	gstoggparse.c \
+	gstoggstream.c \
+	dirac_parse.c \
+	vorbis_parse.c
+
+noinst_HEADERS = \
+	gstogg.h \
+	gstoggdemux.h \
+	gstoggmux.h \
+	gstoggstream.h \
+	dirac_parse.h \
+	vorbis_parse.h
+
+libgstogg_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(OGG_CFLAGS)
+libgstogg_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(OGG_LIBS)
+libgstogg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstogg_la_LIBTOOLFLAGS = --tag=disable-static
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstogg -:SHARED libgstogg \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstogg_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \
+	 -:LDFLAGS $(libgstogg_la_LDFLAGS) \
+	           $(libgstogg_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/ext/ogg/Makefile.in b/ext/ogg/Makefile.in
new file mode 100644
index 0000000..5a4904a
--- /dev/null
+++ b/ext/ogg/Makefile.in
@@ -0,0 +1,870 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/ogg
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstogg_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstogg_la_OBJECTS = libgstogg_la-gstogg.lo \
+	libgstogg_la-gstoggdemux.lo libgstogg_la-gstoggmux.lo \
+	libgstogg_la-gstogmparse.lo libgstogg_la-gstoggaviparse.lo \
+	libgstogg_la-gstoggparse.lo libgstogg_la-gstoggstream.lo \
+	libgstogg_la-dirac_parse.lo libgstogg_la-vorbis_parse.lo
+libgstogg_la_OBJECTS = $(am_libgstogg_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstogg_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstogg_la_CFLAGS) $(CFLAGS) \
+	$(libgstogg_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstogg_la_SOURCES)
+DIST_SOURCES = $(libgstogg_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstogg.la
+libgstogg_la_SOURCES = \
+	gstogg.c \
+	gstoggdemux.c \
+	gstoggmux.c \
+	gstogmparse.c \
+	gstoggaviparse.c \
+	gstoggparse.c \
+	gstoggstream.c \
+	dirac_parse.c \
+	vorbis_parse.c
+
+noinst_HEADERS = \
+	gstogg.h \
+	gstoggdemux.h \
+	gstoggmux.h \
+	gstoggstream.h \
+	dirac_parse.h \
+	vorbis_parse.h
+
+libgstogg_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(OGG_CFLAGS)
+libgstogg_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(OGG_LIBS)
+
+libgstogg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstogg_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/ogg/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/ogg/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstogg.la: $(libgstogg_la_OBJECTS) $(libgstogg_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstogg_la_LINK) -rpath $(plugindir) $(libgstogg_la_OBJECTS) $(libgstogg_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-dirac_parse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstogg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstoggaviparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstoggdemux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstoggmux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstoggparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstoggstream.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-gstogmparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstogg_la-vorbis_parse.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstogg_la-gstogg.lo: gstogg.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstogg.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstogg.Tpo -c -o libgstogg_la-gstogg.lo `test -f 'gstogg.c' || echo '$(srcdir)/'`gstogg.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstogg.Tpo $(DEPDIR)/libgstogg_la-gstogg.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstogg.c' object='libgstogg_la-gstogg.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstogg.lo `test -f 'gstogg.c' || echo '$(srcdir)/'`gstogg.c
+
+libgstogg_la-gstoggdemux.lo: gstoggdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstoggdemux.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstoggdemux.Tpo -c -o libgstogg_la-gstoggdemux.lo `test -f 'gstoggdemux.c' || echo '$(srcdir)/'`gstoggdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstoggdemux.Tpo $(DEPDIR)/libgstogg_la-gstoggdemux.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstoggdemux.c' object='libgstogg_la-gstoggdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstoggdemux.lo `test -f 'gstoggdemux.c' || echo '$(srcdir)/'`gstoggdemux.c
+
+libgstogg_la-gstoggmux.lo: gstoggmux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstoggmux.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstoggmux.Tpo -c -o libgstogg_la-gstoggmux.lo `test -f 'gstoggmux.c' || echo '$(srcdir)/'`gstoggmux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstoggmux.Tpo $(DEPDIR)/libgstogg_la-gstoggmux.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstoggmux.c' object='libgstogg_la-gstoggmux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstoggmux.lo `test -f 'gstoggmux.c' || echo '$(srcdir)/'`gstoggmux.c
+
+libgstogg_la-gstogmparse.lo: gstogmparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstogmparse.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstogmparse.Tpo -c -o libgstogg_la-gstogmparse.lo `test -f 'gstogmparse.c' || echo '$(srcdir)/'`gstogmparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstogmparse.Tpo $(DEPDIR)/libgstogg_la-gstogmparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstogmparse.c' object='libgstogg_la-gstogmparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstogmparse.lo `test -f 'gstogmparse.c' || echo '$(srcdir)/'`gstogmparse.c
+
+libgstogg_la-gstoggaviparse.lo: gstoggaviparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstoggaviparse.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstoggaviparse.Tpo -c -o libgstogg_la-gstoggaviparse.lo `test -f 'gstoggaviparse.c' || echo '$(srcdir)/'`gstoggaviparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstoggaviparse.Tpo $(DEPDIR)/libgstogg_la-gstoggaviparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstoggaviparse.c' object='libgstogg_la-gstoggaviparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstoggaviparse.lo `test -f 'gstoggaviparse.c' || echo '$(srcdir)/'`gstoggaviparse.c
+
+libgstogg_la-gstoggparse.lo: gstoggparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstoggparse.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstoggparse.Tpo -c -o libgstogg_la-gstoggparse.lo `test -f 'gstoggparse.c' || echo '$(srcdir)/'`gstoggparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstoggparse.Tpo $(DEPDIR)/libgstogg_la-gstoggparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstoggparse.c' object='libgstogg_la-gstoggparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstoggparse.lo `test -f 'gstoggparse.c' || echo '$(srcdir)/'`gstoggparse.c
+
+libgstogg_la-gstoggstream.lo: gstoggstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-gstoggstream.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-gstoggstream.Tpo -c -o libgstogg_la-gstoggstream.lo `test -f 'gstoggstream.c' || echo '$(srcdir)/'`gstoggstream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-gstoggstream.Tpo $(DEPDIR)/libgstogg_la-gstoggstream.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstoggstream.c' object='libgstogg_la-gstoggstream.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-gstoggstream.lo `test -f 'gstoggstream.c' || echo '$(srcdir)/'`gstoggstream.c
+
+libgstogg_la-dirac_parse.lo: dirac_parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-dirac_parse.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-dirac_parse.Tpo -c -o libgstogg_la-dirac_parse.lo `test -f 'dirac_parse.c' || echo '$(srcdir)/'`dirac_parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-dirac_parse.Tpo $(DEPDIR)/libgstogg_la-dirac_parse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dirac_parse.c' object='libgstogg_la-dirac_parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-dirac_parse.lo `test -f 'dirac_parse.c' || echo '$(srcdir)/'`dirac_parse.c
+
+libgstogg_la-vorbis_parse.lo: vorbis_parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -MT libgstogg_la-vorbis_parse.lo -MD -MP -MF $(DEPDIR)/libgstogg_la-vorbis_parse.Tpo -c -o libgstogg_la-vorbis_parse.lo `test -f 'vorbis_parse.c' || echo '$(srcdir)/'`vorbis_parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstogg_la-vorbis_parse.Tpo $(DEPDIR)/libgstogg_la-vorbis_parse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vorbis_parse.c' object='libgstogg_la-vorbis_parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstogg_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstogg_la_CFLAGS) $(CFLAGS) -c -o libgstogg_la-vorbis_parse.lo `test -f 'vorbis_parse.c' || echo '$(srcdir)/'`vorbis_parse.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstogg -:SHARED libgstogg \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstogg_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \
+	 -:LDFLAGS $(libgstogg_la_LDFLAGS) \
+	           $(libgstogg_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/ogg/README b/ext/ogg/README
new file mode 100644
index 0000000..da449e1
--- /dev/null
+++ b/ext/ogg/README
@@ -0,0 +1,366 @@
+This document describes some things to know about the Ogg format, as well
+as implementation details in GStreamer.
+
+INTRODUCTION
+============
+
+ogg and the granulepos
+----------------------
+
+An ogg stream contains pages with a serial number and a granulepos.
+The granulepos is a 64 bit signed integer.  It is a value that in some way
+represents a time since the start of the stream.
+The interpretation as such is however both codec-specific and
+stream-specific.
+
+ogg has no notion of time: it only knows about bytes and granulepos values
+on pages.
+
+The granule position is just a number; the only guarantee for a valid ogg
+stream is that within a logical stream, this number never decreases.
+
+While logically a granulepos value can be constructed for every ogg packet,
+the page is marked with only one granulepos value: the granulepos of the
+last packet to end on that page.
+
+theora and the granulepos
+-------------------------
+
+The granulepos in theora is an encoding of the frame number of the last
+key frame ("i frame"), and the number of frames since the last key frame
+("p frame").  The granulepos is constructed as the sum of the first number,
+shifted to the left for granuleshift bits, and the second number:
+granulepos = (pframe << granuleshift) + iframe
+
+(This means that given a framenumber or a timestamp, one cannot generate
+ the one and only granulepos for that page; several granulepos possibilities
+ correspond to this frame number.  You also need the last keyframe, as well
+ as the granuleshift.
+ However, given a granulepos, the theora codec can still map that to a
+ unique timestamp and frame number for that theora stream)
+
+ Note: currently theora stores the "presentation time" as the granulepos;
+       ie. a first data page with one packet contains one video frame and
+       will be marked with 0/0.  Changing that to be 1/0 (so that it
+       represents the number of decodable frames up to that point, like
+       for Vorbis) is being discussed.
+
+vorbis and granulepos
+---------------------
+
+In Vorbis, the granulepos represents the number of samples that can be
+decoded from all packets up to that point.
+
+In GStreamer, the vorbisenc elements produces a stream where:
+- OFFSET is the time corresponding to the granulepos
+  number of bytes produced before
+- OFFSET_END is the granulepos of the produced vorbis buffer
+- TIMESTAMP is the timestamp matching the begin of the buffer
+- DURATION is set to the length in time of the buffer
+
+Ogg media mapping
+-----------------
+
+Ogg defines a mapping for each media type that it embeds.
+
+For Vorbis:
+
+  - 3 header pages, with granulepos 0.
+     - 1 page with 1 packet header identification
+     - N pages with 2 packets comments and codebooks
+  - granulepos is samplenumber of next page
+  - one packet can contain a variable number of samples but one frame
+    that should be handed to the vorbis decoder.
+  
+For Theora
+     
+  - 3 header pages, with granulepos 0.
+     - 1 page with 1 packet header identification
+     - N pages with 2 packets comments and codebooks
+  - granulepos is framenumber of last packet in page, where framenumber
+    is a combination of keyframe number and p frames since keyframe.
+  - one packet contains 1 frame
+  
+
+
+
+DEMUXING
+========
+
+ogg demuxer
+-----------
+
+This ogg demuxer has two modes of operation, which both share a significant
+amount of code. The first mode is the streaming mode which is automatically 
+selected when the demuxer is connected to a non-getrange based element. When 
+connected to a getrange based element the ogg demuxer can do full seeking
+with great efficiency.
+
+1) the streaming mode.
+
+In this mode, the ogg demuxer receives buffers in the _chain() function which
+are then simply submited to the ogg sync layer. Pages are then processed when
+the sync layer detects them, pads are created for new chains and packets are
+sent to the peer elements of the pads.
+
+In this mode, no seeking is possible. This is the typical case when the
+stream is read from a network source.
+
+In this mode, no setup is done at startup, the pages are just read and decoded.
+A new logical chain is detected when one of the pages has the BOS flag set. At
+this point the existing pads are removed and new pads are created for all the
+logical streams in this new chain.
+  
+
+2) the random access mode.
+
+  In this mode, the ogg file is first scanned to detect the position and length
+of all chains. This scanning is performed using a recursive binary search
+algorithm that is explained below.
+
+    find_chains(start, end)
+    {
+      ret1 = read_next_pages (start);
+      ret2 = read_prev_page (end);
+      
+      if (WAS_HEADER (ret1)) {
+      }
+      else {
+      }
+
+    }
+
+  a) read first and last pages
+
+   start                                                      end
+    V                                                          V 
+    +-----------------------+-------------+--------------------+
+    |  111                  |  222        |  333               |
+   BOS                     BOS           BOS                  EOS
+
+   
+   after reading start, serial 111, BOS, chain[0] = 111
+   after reading end,   serial 333, EOS
+
+   start serialno != end serialno, binary search start, (end-start)/2
+
+   start                    bisect                            end
+    V                         V                                V 
+    +-----------------------+-------------+--------------------+
+    |  111                  |  222        |  333               |
+
+   
+   after reading start, serial 111, BOS, chain[0] = 111
+   after reading end,   serial 222, EOS
+
+   while (
+
+
+
+testcases
+---------
+    
+ a) stream without BOS
+
+    +----------------------------------------------------------+
+       111                                                     |
+                                                              EOS
+
+ b) chained stream, first chain without BOS
+  
+    +-------------------+--------------------------------------+
+       111              | 222                                  |
+                       BOS                                    EOS
+
+
+ c) chained stream
+  
+    +-------------------+--------------------------------------+
+    |  111              | 222                                  |
+   BOS                 BOS                                    EOS
+
+
+ d) chained stream, second without BOS
+
+    +-------------------+--------------------------------------+
+    |  111              | 222                                  |
+   BOS                                                        EOS
+
+What can an ogg demuxer do?
+---------------------------
+
+An ogg demuxer can read pages and get the granulepos from them.
+It can ask the decoder elements to convert a granulepos to time.
+
+An ogg demuxer can also get the granulepos of the first and the last page of a
+stream to get the start and end timestamp of that stream.
+It can also get the length in bytes of the stream
+(when the peer is seekable, that is).
+
+An ogg demuxer is therefore basically able to seek to any byte position and
+timestamp.
+
+When asked to seek to a given granulepos, the ogg demuxer should always convert
+the value to a timestamp using the peer decoder element conversion function. It
+can then binary search the file to eventually end up on the page with the given
+granule pos or a granulepos with the same timestamp.
+
+Seeking in ogg currently
+------------------------
+
+When seeking in an ogg, the decoders can choose to forward the seek event as a
+granulepos or a timestamp to the ogg demuxer.
+
+In the case of a granulepos, the ogg demuxer will seek back to the beginning of
+the stream and skip pages until it finds one with the requested timestamp.
+
+In the case of a timestamp, the ogg demuxer also seeks back to the beginning of
+the stream. For each page it reads, it asks the decoder element to convert the
+granulepos back to a timestamp. The ogg demuxer keeps on skipping pages until
+the page has a timestamp bigger or equal to the requested one.
+
+It is therefore important that the decoder elements in vorbis can convert a
+granulepos into a timestamp or never seek on timestamp on the oggdemuxer.
+
+The default format on the oggdemuxer source pads is currently defined as a the
+granulepos of the packets, it is also the value of the OFFSET field in the
+GstBuffer.
+
+MUXING
+======
+
+Oggmux
+------
+
+The ogg muxer's job is to output complete Ogg pages such that the absolute
+time represented by the valid (ie, not -1) granulepos values on those pages
+never decreases. This has to be true for all logical streams in the group at
+the same time.
+
+To achieve this, encoders are required to pass along the exact time that the
+granulepos represents for each ogg packet that it pushes to the ogg muxer.
+This is ESSENTIAL: without this exact time representation of the granulepos,
+the muxer can not produce valid streams.
+
+The ogg muxer has a packet queue per sink pad.  From this queue a page can
+be flushed when:
+  - total byte size of queued packets exceeds a given value
+  - total time duration of queued packets exceeds a given value
+  - total byte size of queued packets exceeds maximum Ogg page size
+  - eos of the pad
+  - encoder sent a command to flush out an ogg page after this new packet
+    (in 0.8, through a flush event; in 0.10, with a GstOggBuffer)
+  - muxer wants a flush to happen (so it can output pages)
+
+The ogg muxer also has a page queue per sink pad.  This queue collects
+Ogg pages from the corresponding packet queue.  Each page is also marked
+with the timestamp that the granulepos in the header represents.
+
+A page can be flushed from this collection of page queues when:
+- ideally, every page queue has at least one page with a valid granulepos
+  -> choose the page, from all queues, with the lowest timestamp value
+- if not, muxer can wait if the following limits aren't reached:
+  - total byte size of any page queue exceeds a limit
+  - total time duration of any page queue exceeds a limit
+- if this limit is reached, then:
+  - request a page flush from packet queue to page queue for each queue
+    that does not have pages
+  - now take the page from all queues with the lowest timestamp value
+  - make sure all later-coming data is marked as old, either to be still
+    output (but producing an invalid stream, though it can be fixed later)
+    or dropped (which means it's gone forever)
+
+The oggmuxer uses the offset fields to fill in the granulepos in the pages.
+
+GStreamer implementation details
+--------------------------------
+As said before, the basic rule is that the ogg muxer needs an exact time
+representation for each granulepos.  This needs to be provided by the encoder.
+
+Potential problems are:
+ - initial offsets for a raw stream need to be preserved somehow.  Example:
+   if the first audio sample has time 0.5, the granulepos in the vorbis encoder
+   needs to be adjusted to take this into account.
+ - initial offsets may need be on rate boundaries.  Example:
+   if the framerate is 5 fps, and the first video frame has time 0.1 s, the
+   granulepos cannot correctly represent this timestamp.
+   This can be handled out-of-band (initial offset in another muxing format,
+   skeleton track with initial offsets, ...)
+
+Given that the basic rule for muxing is that the muxer needs an exact timestamp
+matching the granulepos, we need some way of communicating this time value
+from encoders to the Ogg muxer.  So we need a mechanism to communicate
+a granulepos and its time representation for each GstBuffer.
+
+(This is an instance of a more generic problem - having a way to attach
+ more fields to a GstBuffer)
+
+Possible ways:
+- setting TIMESTAMP to this value: bad - this value represents the end time
+  of the buffer, and thus conflicts with GStreamer's idea of what TIMESTAMP
+  is.  This would cause problems muxing the encoded stream in other muxing
+  formats, or for streaming.  Note that this is what was done in GStreamer 0.8
+- setting DURATION to GP_TIME - TIMESTAMP: bad - this breaks the concept of
+  duration for this frame.  Take the video example above; each buffer would
+  have a correct timestamp, but always a 0.1 s duration as opposed to the
+  correct 0.2 s duration
+- subclassing GstBuffer: clean, but requires a common header used between
+  ogg muxer and all encoders that can be muxed into ogg.  Also, what if
+  a format can be muxed into more than one container, and they each have
+  their own "extra" info to communicate ?
+- adding key/value pairs to GstBuffer: clean, but requires changes to
+  core.  Also, the overhead of allocating e.g. a GstStructure for *each* buffer
+  may be expensive.
+- "cheating":
+  - abuse OFFSET to store the timestamp matching this granulepos
+  - abuse OFFSET_END to store the granulepos value
+  The drawback here is that before, it made sense to use OFFSET and OFFSET_END
+  to store a byte count.  Given that this is not used for anything critical
+  (you can't store a raw theora or vorbis stream in a file anyway),
+  this is what's being done for now.
+
+In practice
+-----------
+- all encoders of formats that can be muxed into Ogg produce a stream where:
+  - OFFSET is abused to be the timestamp corresponding exactly to the
+    granulepos
+  - OFFSET_END is abused to be the granulepos of the encoded theora buffer
+  - TIMESTAMP is the timestamp matching the begin of the buffer
+  - DURATION is the length in time of the buffer
+
+- initial delays should be handled in the GStreamer encoders by mangling
+  the granulepos of the encoded packet to take the delay into account as
+  best as possible and store that in OFFSET;
+  this then brings TIMESTAMP + DURATION to within less
+  than a frame period of the granulepos's time representation
+  The ogg muxer will then create new ogg packets with this OFFSET as
+  the granulepos.  So in effect, the granulepos produced by the encoders
+  does not get used directly.
+
+TODO
+----
+- decide on a proper mechanism for communicating extra per-buffer fields
+- the ogg muxer sets timestamp and duration on outgoing ogg pages based on
+  timestamp/duration of incoming ogg packets.
+  Note that:
+  - since the ogg muxer *has* to output pages sorted by gp time, representing
+    end time of the page, this means that the buffer's timestamps are not
+    necessarily monotonically increasing
+  - timestamp + duration of buffers don't match up; the duration represents
+    the length of the ogg page *for that stream*.  Hence, for a normal
+    two-stream file, the sum of all durations is twice the length of the
+    muxed file.
+
+TESTING
+-------
+Proper muxing can be tested by generating test files with command lines like:
+- video and audio start from 0:
+gst-launch -v videotestsrc ! theoraenc ! oggmux audiotestsrc ! audioconvert ! vorbisenc ! identity ! oggmux0. oggmux0. ! filesink location=test.ogg
+
+- video starts after audio:
+gst-launch -v videotestsrc timestamp-offset=500000000 ! theoraenc ! oggmux audiotestsrc ! audioconvert ! vorbisenc ! identity ! oggmux0. oggmux0. ! filesink location=test.ogg
+
+- audio starts after video:
+gst-launch -v videotestsrc ! theoraenc ! oggmux audiotestsrc timestamp-offset=500000000 ! audioconvert ! vorbisenc ! identity ! oggmux0. oggmux0. ! filesink location=test.ogg
+
+The resulting files can be verified with oggz-validate for correctness.
diff --git a/ext/ogg/dirac_parse.c b/ext/ogg/dirac_parse.c
new file mode 100644
index 0000000..3a3193d
--- /dev/null
+++ b/ext/ogg/dirac_parse.c
@@ -0,0 +1,498 @@
+
+#include "dirac_parse.h"
+#include <string.h>
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+
+typedef struct _Unpack Unpack;
+
+struct _Unpack
+{
+  unsigned char *data;
+  int n_bits_left;
+  int index;
+  int guard_bit;
+};
+
+static void schro_unpack_init_with_data (Unpack * unpack, unsigned char *data,
+    int n_bytes, unsigned int guard_bit);
+
+static unsigned int schro_unpack_decode_bit (Unpack * unpack);
+static unsigned int schro_unpack_decode_uint (Unpack * unpack);
+
+
+void schro_video_format_set_std_video_format (DiracSequenceHeader * format,
+    int index);
+void schro_video_format_set_std_frame_rate (DiracSequenceHeader * format,
+    int index);
+void schro_video_format_set_std_aspect_ratio (DiracSequenceHeader * format,
+    int index);
+void schro_video_format_set_std_signal_range (DiracSequenceHeader * format,
+    int index);
+void schro_video_format_set_std_colour_spec (DiracSequenceHeader * format,
+    int index);
+
+
+
+
+int
+dirac_sequence_header_parse (DiracSequenceHeader * header,
+    unsigned char *data, int n_bytes)
+{
+  int bit;
+  int index;
+  Unpack _unpack;
+  Unpack *unpack = &_unpack;
+  int major_version;
+  int minor_version;
+  int profile;
+  int level;
+
+  memset (header, 0, sizeof (*header));
+
+  schro_unpack_init_with_data (unpack, data, n_bytes, 1);
+
+  /* parse parameters */
+  major_version = schro_unpack_decode_uint (unpack);
+  minor_version = schro_unpack_decode_uint (unpack);
+  profile = schro_unpack_decode_uint (unpack);
+  level = schro_unpack_decode_uint (unpack);
+
+  /* base video header */
+  index = schro_unpack_decode_uint (unpack);
+  schro_video_format_set_std_video_format (header, index);
+
+  header->major_version = major_version;
+  header->minor_version = minor_version;
+  header->profile = profile;
+  header->level = level;
+
+  /* source parameters */
+  /* frame dimensions */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    header->width = schro_unpack_decode_uint (unpack);
+    header->height = schro_unpack_decode_uint (unpack);
+  }
+
+  /* chroma header */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    header->chroma_format = schro_unpack_decode_uint (unpack);
+  }
+
+  /* scan header */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    header->interlaced = schro_unpack_decode_uint (unpack);
+  }
+
+  /* frame rate */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    index = schro_unpack_decode_uint (unpack);
+    if (index == 0) {
+      header->frame_rate_numerator = schro_unpack_decode_uint (unpack);
+      header->frame_rate_denominator = schro_unpack_decode_uint (unpack);
+    } else {
+      schro_video_format_set_std_frame_rate (header, index);
+    }
+  }
+
+  /* aspect ratio */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    index = schro_unpack_decode_uint (unpack);
+    if (index == 0) {
+      header->aspect_ratio_numerator = schro_unpack_decode_uint (unpack);
+      header->aspect_ratio_denominator = schro_unpack_decode_uint (unpack);
+    } else {
+      schro_video_format_set_std_aspect_ratio (header, index);
+    }
+  }
+
+  /* clean area */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    header->clean_width = schro_unpack_decode_uint (unpack);
+    header->clean_height = schro_unpack_decode_uint (unpack);
+    header->left_offset = schro_unpack_decode_uint (unpack);
+    header->top_offset = schro_unpack_decode_uint (unpack);
+  }
+
+  /* signal range */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    index = schro_unpack_decode_uint (unpack);
+    if (index == 0) {
+      header->luma_offset = schro_unpack_decode_uint (unpack);
+      header->luma_excursion = schro_unpack_decode_uint (unpack);
+      header->chroma_offset = schro_unpack_decode_uint (unpack);
+      header->chroma_excursion = schro_unpack_decode_uint (unpack);
+    } else {
+      schro_video_format_set_std_signal_range (header, index);
+    }
+  }
+
+  /* colour spec */
+  bit = schro_unpack_decode_bit (unpack);
+  if (bit) {
+    index = schro_unpack_decode_uint (unpack);
+    schro_video_format_set_std_colour_spec (header, index);
+    if (index == 0) {
+      /* colour primaries */
+      bit = schro_unpack_decode_bit (unpack);
+      if (bit) {
+        header->colour_primaries = schro_unpack_decode_uint (unpack);
+      }
+      /* colour matrix */
+      bit = schro_unpack_decode_bit (unpack);
+      if (bit) {
+        header->colour_matrix = schro_unpack_decode_uint (unpack);
+      }
+      /* transfer function */
+      bit = schro_unpack_decode_bit (unpack);
+      if (bit) {
+        header->transfer_function = schro_unpack_decode_uint (unpack);
+      }
+    }
+  }
+
+  header->interlaced_coding = schro_unpack_decode_uint (unpack);
+
+  return 1;
+}
+
+/* standard stuff */
+
+static DiracSequenceHeader schro_video_formats[] = {
+  {0, 0, 0, 0,
+        0,                      /* custom */
+        640, 480, SCHRO_CHROMA_420,
+        FALSE, FALSE,
+        24000, 1001, 1, 1,
+        640, 480, 0, 0,
+        0, 255, 128, 255,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        1,                      /* QSIF525 */
+        176, 120, SCHRO_CHROMA_420,
+        FALSE, FALSE,
+        15000, 1001, 10, 11,
+        176, 120, 0, 0,
+        0, 255, 128, 255,
+      1, 1, 0},
+  {0, 0, 0, 0,
+        2,                      /* QCIF */
+        176, 144, SCHRO_CHROMA_420,
+        FALSE, TRUE,
+        25, 2, 12, 11,
+        176, 144, 0, 0,
+        0, 255, 128, 255,
+      2, 1, 0},
+  {0, 0, 0, 0,
+        3,                      /* SIF525 */
+        352, 240, SCHRO_CHROMA_420,
+        FALSE, FALSE,
+        15000, 1001, 10, 11,
+        352, 240, 0, 0,
+        0, 255, 128, 255,
+      1, 1, 0},
+  {0, 0, 0, 0,
+        4,                      /* CIF */
+        352, 288, SCHRO_CHROMA_420,
+        FALSE, TRUE,
+        25, 2, 12, 11,
+        352, 288, 0, 0,
+        0, 255, 128, 255,
+      2, 1, 0},
+  {0, 0, 0, 0,
+        5,                      /* 4SIF525 */
+        704, 480, SCHRO_CHROMA_420,
+        FALSE, FALSE,
+        15000, 1001, 10, 11,
+        704, 480, 0, 0,
+        0, 255, 128, 255,
+      1, 1, 0},
+  {0, 0, 0, 0,
+        6,                      /* 4CIF */
+        704, 576, SCHRO_CHROMA_420,
+        FALSE, TRUE,
+        25, 2, 12, 11,
+        704, 576, 0, 0,
+        0, 255, 128, 255,
+      2, 1, 0},
+  {0, 0, 0, 0,
+        7,                      /* SD480I-60 */
+        720, 480, SCHRO_CHROMA_422,
+        TRUE, FALSE,
+        30000, 1001, 10, 11,
+        704, 480, 8, 0,
+        64, 876, 512, 896,
+      1, 1, 0},
+  {0, 0, 0, 0,
+        8,                      /* SD576I-50 */
+        720, 576, SCHRO_CHROMA_422,
+        TRUE, TRUE,
+        25, 1, 12, 11,
+        704, 576, 8, 0,
+        64, 876, 512, 896,
+      2, 1, 0},
+  {0, 0, 0, 0,
+        9,                      /* HD720P-60 */
+        1280, 720, SCHRO_CHROMA_422,
+        FALSE, TRUE,
+        60000, 1001, 1, 1,
+        1280, 720, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        10,                     /* HD720P-50 */
+        1280, 720, SCHRO_CHROMA_422,
+        FALSE, TRUE,
+        50, 1, 1, 1,
+        1280, 720, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        11,                     /* HD1080I-60 */
+        1920, 1080, SCHRO_CHROMA_422,
+        TRUE, TRUE,
+        30000, 1001, 1, 1,
+        1920, 1080, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        12,                     /* HD1080I-50 */
+        1920, 1080, SCHRO_CHROMA_422,
+        TRUE, TRUE,
+        25, 1, 1, 1,
+        1920, 1080, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        13,                     /* HD1080P-60 */
+        1920, 1080, SCHRO_CHROMA_422,
+        FALSE, TRUE,
+        60000, 1001, 1, 1,
+        1920, 1080, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        14,                     /* HD1080P-50 */
+        1920, 1080, SCHRO_CHROMA_422,
+        FALSE, TRUE,
+        50, 1, 1, 1,
+        1920, 1080, 0, 0,
+        64, 876, 512, 896,
+      0, 0, 0},
+  {0, 0, 0, 0,
+        15,                     /* DC2K */
+        2048, 1080, SCHRO_CHROMA_444,
+        FALSE, TRUE,
+        24, 1, 1, 1,
+        2048, 1080, 0, 0,
+        256, 3504, 2048, 3584,
+      3, 0, 0},
+  {0, 0, 0, 0,
+        16,                     /* DC4K */
+        4096, 2160, SCHRO_CHROMA_444,
+        FALSE, TRUE,
+        24, 1, 1, 1,
+        2048, 1536, 0, 0,
+        256, 3504, 2048, 3584,
+      3, 0, 0},
+};
+
+void
+schro_video_format_set_std_video_format (DiracSequenceHeader * format,
+    int index)
+{
+
+  if (index < 0 || index >= ARRAY_SIZE (schro_video_formats)) {
+    return;
+  }
+
+  memcpy (format, schro_video_formats + index, sizeof (DiracSequenceHeader));
+}
+
+typedef struct _SchroFrameRate SchroFrameRate;
+struct _SchroFrameRate
+{
+  int numerator;
+  int denominator;
+};
+
+static SchroFrameRate schro_frame_rates[] = {
+  {0, 0},
+  {24000, 1001},
+  {24, 1},
+  {25, 1},
+  {30000, 1001},
+  {30, 1},
+  {50, 1},
+  {60000, 1001},
+  {60, 1},
+  {15000, 1001},
+  {25, 2}
+};
+
+void
+schro_video_format_set_std_frame_rate (DiracSequenceHeader * format, int index)
+{
+  if (index < 1 || index >= ARRAY_SIZE (schro_frame_rates)) {
+    return;
+  }
+
+  format->frame_rate_numerator = schro_frame_rates[index].numerator;
+  format->frame_rate_denominator = schro_frame_rates[index].denominator;
+}
+
+typedef struct _SchroPixelAspectRatio SchroPixelAspectRatio;
+struct _SchroPixelAspectRatio
+{
+  int numerator;
+  int denominator;
+};
+
+static const SchroPixelAspectRatio schro_aspect_ratios[] = {
+  {0, 0},
+  {1, 1},
+  {10, 11},
+  {12, 11},
+  {40, 33},
+  {16, 11},
+  {4, 3}
+};
+
+void
+schro_video_format_set_std_aspect_ratio (DiracSequenceHeader * format,
+    int index)
+{
+  if (index < 1 || index >= ARRAY_SIZE (schro_aspect_ratios)) {
+    return;
+  }
+
+  format->aspect_ratio_numerator = schro_aspect_ratios[index].numerator;
+  format->aspect_ratio_denominator = schro_aspect_ratios[index].denominator;
+
+}
+
+typedef struct _SchroSignalRangeStruct SchroSignalRangeStruct;
+struct _SchroSignalRangeStruct
+{
+  int luma_offset;
+  int luma_excursion;
+  int chroma_offset;
+  int chroma_excursion;
+};
+
+static const SchroSignalRangeStruct schro_signal_ranges[] = {
+  {0, 0, 0, 0},
+  {0, 255, 128, 255},
+  {16, 219, 128, 224},
+  {64, 876, 512, 896},
+  {256, 3504, 2048, 3584}
+};
+
+void
+schro_video_format_set_std_signal_range (DiracSequenceHeader * format, int i)
+{
+  if (i < 1 || i >= ARRAY_SIZE (schro_signal_ranges)) {
+    return;
+  }
+
+  format->luma_offset = schro_signal_ranges[i].luma_offset;
+  format->luma_excursion = schro_signal_ranges[i].luma_excursion;
+  format->chroma_offset = schro_signal_ranges[i].chroma_offset;
+  format->chroma_excursion = schro_signal_ranges[i].chroma_excursion;
+}
+
+typedef struct _SchroColourSpecStruct SchroColourSpecStruct;
+struct _SchroColourSpecStruct
+{
+  int colour_primaries;
+  int colour_matrix;
+  int transfer_function;
+};
+
+static const SchroColourSpecStruct schro_colour_specs[] = {
+  {                             /* Custom */
+        SCHRO_COLOUR_PRIMARY_HDTV,
+        SCHRO_COLOUR_MATRIX_HDTV,
+      SCHRO_TRANSFER_CHAR_TV_GAMMA},
+  {                             /* SDTV 525 */
+        SCHRO_COLOUR_PRIMARY_SDTV_525,
+        SCHRO_COLOUR_MATRIX_SDTV,
+      SCHRO_TRANSFER_CHAR_TV_GAMMA},
+  {                             /* SDTV 625 */
+        SCHRO_COLOUR_PRIMARY_SDTV_625,
+        SCHRO_COLOUR_MATRIX_SDTV,
+      SCHRO_TRANSFER_CHAR_TV_GAMMA},
+  {                             /* HDTV */
+        SCHRO_COLOUR_PRIMARY_HDTV,
+        SCHRO_COLOUR_MATRIX_HDTV,
+      SCHRO_TRANSFER_CHAR_TV_GAMMA},
+  {                             /* Cinema */
+        SCHRO_COLOUR_PRIMARY_CINEMA,
+        SCHRO_COLOUR_MATRIX_HDTV,
+      SCHRO_TRANSFER_CHAR_TV_GAMMA}
+};
+
+void
+schro_video_format_set_std_colour_spec (DiracSequenceHeader * format, int i)
+{
+  if (i < 0 || i >= ARRAY_SIZE (schro_colour_specs)) {
+    return;
+  }
+
+  format->colour_primaries = schro_colour_specs[i].colour_primaries;
+  format->colour_matrix = schro_colour_specs[i].colour_matrix;
+  format->transfer_function = schro_colour_specs[i].transfer_function;
+}
+
+
+/* unpack */
+
+static void
+schro_unpack_init_with_data (Unpack * unpack, unsigned char *data,
+    int n_bytes, unsigned int guard_bit)
+{
+  memset (unpack, 0, sizeof (Unpack));
+
+  unpack->data = data;
+  unpack->n_bits_left = 8 * n_bytes;
+  unpack->guard_bit = guard_bit;
+}
+
+static unsigned int
+schro_unpack_decode_bit (Unpack * unpack)
+{
+  int bit;
+
+  if (unpack->n_bits_left < 1) {
+    return unpack->guard_bit;
+  }
+  bit = (unpack->data[unpack->index >> 3] >> (7 - (unpack->index & 7))) & 1;
+  unpack->index++;
+  unpack->n_bits_left--;
+
+  return bit;
+}
+
+static unsigned int
+schro_unpack_decode_uint (Unpack * unpack)
+{
+  int count;
+  int value;
+
+  count = 0;
+  value = 0;
+  while (!schro_unpack_decode_bit (unpack)) {
+    count++;
+    value <<= 1;
+    value |= schro_unpack_decode_bit (unpack);
+  }
+
+  return (1 << count) - 1 + value;
+}
diff --git a/ext/ogg/dirac_parse.h b/ext/ogg/dirac_parse.h
new file mode 100644
index 0000000..9dc4ffe
--- /dev/null
+++ b/ext/ogg/dirac_parse.h
@@ -0,0 +1,178 @@
+
+#ifndef __DIRAC_PARSE_H__
+#define __DIRAC_PARSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+typedef enum _SchroParseCode {
+  SCHRO_PARSE_CODE_SEQUENCE_HEADER = 0x00,
+  SCHRO_PARSE_CODE_END_OF_SEQUENCE = 0x10,
+  SCHRO_PARSE_CODE_AUXILIARY_DATA = 0x20,
+  SCHRO_PARSE_CODE_PADDING = 0x30,
+
+  SCHRO_PARSE_CODE_INTRA_REF = 0x0c,
+  SCHRO_PARSE_CODE_INTRA_NON_REF = 0x08,
+  SCHRO_PARSE_CODE_INTRA_REF_NOARITH = 0x4c,
+  SCHRO_PARSE_CODE_INTRA_NON_REF_NOARITH = 0x48,
+
+  SCHRO_PARSE_CODE_INTER_REF_1 = 0x0d,
+  SCHRO_PARSE_CODE_INTER_REF_1_NOARITH = 0x4d,
+  SCHRO_PARSE_CODE_INTER_REF_2 = 0x0e,
+  SCHRO_PARSE_CODE_INTER_REF_2_NOARITH = 0x4e,
+
+  SCHRO_PARSE_CODE_INTER_NON_REF_1 = 0x09,
+  SCHRO_PARSE_CODE_INTER_NON_REF_1_NOARITH = 0x49,
+  SCHRO_PARSE_CODE_INTER_NON_REF_2 = 0x0a,
+  SCHRO_PARSE_CODE_INTER_NON_REF_2_NOARITH = 0x4a,
+
+  SCHRO_PARSE_CODE_LD_INTRA_REF = 0xcc,
+  SCHRO_PARSE_CODE_LD_INTRA_NON_REF = 0xc8
+} SchroParseCode;
+
+#define SCHRO_PARSE_CODE_PICTURE(is_ref,n_refs,is_lowdelay,is_noarith) \
+  (8 | ((is_ref)<<2) | (n_refs) | ((is_lowdelay)<<7) | ((is_noarith)<<6))
+
+#define SCHRO_PARSE_CODE_IS_SEQ_HEADER(x) ((x) == SCHRO_PARSE_CODE_SEQUENCE_HEADER)
+#define SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE(x) ((x) == SCHRO_PARSE_CODE_END_OF_SEQUENCE)
+#define SCHRO_PARSE_CODE_IS_AUXILIARY_DATA(x) ((x) == SCHRO_PARSE_CODE_AUXILIARY_DATA)
+#define SCHRO_PARSE_CODE_IS_PADDING(x) ((x) == SCHRO_PARSE_CODE_PADDING)
+#define SCHRO_PARSE_CODE_IS_PICTURE(x) ((x) & 0x8)
+#define SCHRO_PARSE_CODE_IS_LOW_DELAY(x) (((x) & 0x88) == 0x88)
+#define SCHRO_PARSE_CODE_IS_CORE_SYNTAX(x) (((x) & 0x88) == 0x08)
+#define SCHRO_PARSE_CODE_USING_AC(x) (((x) & 0x48) == 0x08)
+#define SCHRO_PARSE_CODE_IS_REFERENCE(x) (((x) & 0xc) == 0x0c)
+#define SCHRO_PARSE_CODE_IS_NON_REFERENCE(x) (((x) & 0xc) == 0x08)
+#define SCHRO_PARSE_CODE_NUM_REFS(x) ((x) & 0x3)
+#define SCHRO_PARSE_CODE_IS_INTRA(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) == 0)
+#define SCHRO_PARSE_CODE_IS_INTER(x) (SCHRO_PARSE_CODE_IS_PICTURE(x) && SCHRO_PARSE_CODE_NUM_REFS(x) > 0)
+
+#define SCHRO_PARSE_HEADER_SIZE (4+1+4+4)
+
+typedef enum _SchroVideoFormatEnum {
+  SCHRO_VIDEO_FORMAT_CUSTOM = 0,
+  SCHRO_VIDEO_FORMAT_QSIF,
+  SCHRO_VIDEO_FORMAT_QCIF,
+  SCHRO_VIDEO_FORMAT_SIF,
+  SCHRO_VIDEO_FORMAT_CIF,
+  SCHRO_VIDEO_FORMAT_4SIF,
+  SCHRO_VIDEO_FORMAT_4CIF,
+  SCHRO_VIDEO_FORMAT_SD480I_60,
+  SCHRO_VIDEO_FORMAT_SD576I_50,
+  SCHRO_VIDEO_FORMAT_HD720P_60,
+  SCHRO_VIDEO_FORMAT_HD720P_50,
+  SCHRO_VIDEO_FORMAT_HD1080I_60,
+  SCHRO_VIDEO_FORMAT_HD1080I_50,
+  SCHRO_VIDEO_FORMAT_HD1080P_60,
+  SCHRO_VIDEO_FORMAT_HD1080P_50,
+  SCHRO_VIDEO_FORMAT_DC2K_24,
+  SCHRO_VIDEO_FORMAT_DC4K_24
+} SchroVideoFormatEnum;
+
+typedef enum _SchroChromaFormat {
+  SCHRO_CHROMA_444 = 0,
+  SCHRO_CHROMA_422,
+  SCHRO_CHROMA_420
+} SchroChromaFormat;
+
+#define SCHRO_CHROMA_FORMAT_H_SHIFT(format) (((format) == SCHRO_CHROMA_444)?0:1)
+#define SCHRO_CHROMA_FORMAT_V_SHIFT(format) (((format) == SCHRO_CHROMA_420)?1:0)
+
+typedef enum _SchroSignalRange {
+  SCHRO_SIGNAL_RANGE_CUSTOM = 0,
+  SCHRO_SIGNAL_RANGE_8BIT_FULL = 1,
+  SCHRO_SIGNAL_RANGE_8BIT_VIDEO = 2,
+  SCHRO_SIGNAL_RANGE_10BIT_VIDEO = 3,
+  SCHRO_SIGNAL_RANGE_12BIT_VIDEO = 4
+} SchroSignalRange;
+
+typedef enum _SchroColourSpec {
+  SCHRO_COLOUR_SPEC_CUSTOM = 0,
+  SCHRO_COLOUR_SPEC_SDTV_525 = 1,
+  SCHRO_COLOUR_SPEC_SDTV_625 = 2,
+  SCHRO_COLOUR_SPEC_HDTV = 3,
+  SCHRO_COLOUR_SPEC_CINEMA = 4
+} SchroColourSpec;
+
+typedef enum _SchroColourPrimaries {
+  SCHRO_COLOUR_PRIMARY_HDTV = 0,
+  SCHRO_COLOUR_PRIMARY_SDTV_525 = 1,
+  SCHRO_COLOUR_PRIMARY_SDTV_625 = 2,
+  SCHRO_COLOUR_PRIMARY_CINEMA = 3
+} SchroColourPrimaries;
+
+typedef enum _SchroColourMatrix {
+  SCHRO_COLOUR_MATRIX_HDTV = 0,
+  SCHRO_COLOUR_MATRIX_SDTV = 1,
+  SCHRO_COLOUR_MATRIX_REVERSIBLE = 2
+}SchroColourMatrix;
+
+typedef enum _SchroTransferFunction {
+  SCHRO_TRANSFER_CHAR_TV_GAMMA = 0,
+  SCHRO_TRANSFER_CHAR_EXTENDED_GAMUT = 1,
+  SCHRO_TRANSFER_CHAR_LINEAR = 2,
+  SCHRO_TRANSFER_CHAR_DCI_GAMMA = 3
+} SchroTransferFunction;
+
+
+
+typedef struct _DiracSequenceHeader DiracSequenceHeader;
+
+struct _DiracSequenceHeader {
+  int major_version;
+  int minor_version;
+  int profile;
+  int level;
+
+  int index;
+  int width;
+  int height;
+  int chroma_format;
+  
+  int interlaced;
+  int top_field_first;
+  
+  int frame_rate_numerator;
+  int frame_rate_denominator;
+  int aspect_ratio_numerator;
+  int aspect_ratio_denominator;
+    
+  int clean_width;
+  int clean_height;
+  int left_offset;
+  int top_offset;
+    
+  int luma_offset;
+  int luma_excursion;
+  int chroma_offset;
+  int chroma_excursion;
+    
+  int colour_primaries;
+  int colour_matrix;
+  int transfer_function;
+
+  int interlaced_coding;
+
+  int unused0;
+  int unused1;
+  int unused2;
+};  
+
+
+int dirac_sequence_header_parse (DiracSequenceHeader *header,
+    unsigned char *data, int length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/ext/ogg/gstogg.c b/ext/ogg/gstogg.c
new file mode 100644
index 0000000..d1f16b8
--- /dev/null
+++ b/ext/ogg/gstogg.c
@@ -0,0 +1,46 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include "gstogg.h"
+#include "gstoggdemux.h"
+#include "gstoggmux.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_ogg_demux_plugin_init (plugin);
+  gst_ogg_mux_plugin_init (plugin);
+  gst_ogm_parse_plugin_init (plugin);
+  gst_ogg_parse_plugin_init (plugin);
+  gst_ogg_avi_parse_plugin_init (plugin);
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "ogg",
+    "ogg stream manipulation (info about ogg: http://xiph.org)",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/ogg/gstogg.h b/ext/ogg/gstogg.h
new file mode 100644
index 0000000..6f1393c
--- /dev/null
+++ b/ext/ogg/gstogg.h
@@ -0,0 +1,31 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * gstoggdemux.c: ogg stream demuxer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_OGG_H__
+#define __GST_OGG_H__
+
+#include <gst/gst.h>
+
+gboolean gst_ogm_parse_plugin_init (GstPlugin * plugin);
+gboolean gst_ogg_parse_plugin_init (GstPlugin * plugin);
+gboolean gst_ogg_avi_parse_plugin_init (GstPlugin * plugin);
+
+#endif /* __GST_OGG_H__ */
diff --git a/ext/ogg/gstoggaviparse.c b/ext/ogg/gstoggaviparse.c
new file mode 100644
index 0000000..3a2b892
--- /dev/null
+++ b/ext/ogg/gstoggaviparse.c
@@ -0,0 +1,485 @@
+/* GStreamer
+ * Copyright (C) 2006 Wim Taymans <wim@fluendo.com>
+ *
+ * gstoggaviparse.c: ogg avi stream parser
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Ogg in AVI is mostly done for vorbis audio. In the codec_data we receive the
+ * first 3 packets of the raw vorbis data. On the sinkpad we receive full-blown Ogg
+ * pages. 
+ * Before extracting the packets out of the ogg pages, we push the raw vorbis
+ * header packets to the decoder.
+ * We don't use the incomming timestamps but use the ganulepos on the ogg pages
+ * directly.
+ * This parser only does ogg/vorbis for now.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst.h>
+#include <ogg/ogg.h>
+#include <string.h>
+
+#include "gstogg.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_ogg_avi_parse_debug);
+#define GST_CAT_DEFAULT gst_ogg_avi_parse_debug
+
+#define GST_TYPE_OGG_AVI_PARSE (gst_ogg_avi_parse_get_type())
+#define GST_OGG_AVI_PARSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OGG_AVI_PARSE, GstOggAviParse))
+#define GST_OGG_AVI_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OGG_AVI_PARSE, GstOggAviParse))
+#define GST_IS_OGG_AVI_PARSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_AVI_PARSE))
+#define GST_IS_OGG_AVI_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_AVI_PARSE))
+
+static GType gst_ogg_avi_parse_get_type (void);
+
+typedef struct _GstOggAviParse GstOggAviParse;
+typedef struct _GstOggAviParseClass GstOggAviParseClass;
+
+struct _GstOggAviParse
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  gboolean discont;
+  gint serial;
+
+  ogg_sync_state sync;
+  ogg_stream_state stream;
+};
+
+struct _GstOggAviParseClass
+{
+  GstElementClass parent_class;
+};
+
+static void gst_ogg_avi_parse_base_init (gpointer g_class);
+static void gst_ogg_avi_parse_class_init (GstOggAviParseClass * klass);
+static void gst_ogg_avi_parse_init (GstOggAviParse * ogg);
+static GstElementClass *parent_class = NULL;
+
+static GType
+gst_ogg_avi_parse_get_type (void)
+{
+  static GType ogg_avi_parse_type = 0;
+
+  if (!ogg_avi_parse_type) {
+    static const GTypeInfo ogg_avi_parse_info = {
+      sizeof (GstOggAviParseClass),
+      gst_ogg_avi_parse_base_init,
+      NULL,
+      (GClassInitFunc) gst_ogg_avi_parse_class_init,
+      NULL,
+      NULL,
+      sizeof (GstOggAviParse),
+      0,
+      (GInstanceInitFunc) gst_ogg_avi_parse_init,
+    };
+
+    ogg_avi_parse_type =
+        g_type_register_static (GST_TYPE_ELEMENT, "GstOggAviParse",
+        &ogg_avi_parse_info, 0);
+  }
+  return ogg_avi_parse_type;
+}
+
+enum
+{
+  PROP_0
+};
+
+static GstStaticPadTemplate ogg_avi_parse_src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-vorbis")
+    );
+
+static GstStaticPadTemplate ogg_avi_parse_sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-ogg-avi")
+    );
+
+static void gst_ogg_avi_parse_finalize (GObject * object);
+static GstStateChangeReturn gst_ogg_avi_parse_change_state (GstElement *
+    element, GstStateChange transition);
+static gboolean gst_ogg_avi_parse_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_ogg_avi_parse_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_ogg_avi_parse_setcaps (GstPad * pad, GstCaps * caps);
+
+static void
+gst_ogg_avi_parse_base_init (gpointer g_class)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+  gst_element_class_set_details_simple (element_class,
+      "Ogg AVI parser", "Codec/Parser",
+      "parse an ogg avi stream into pages (info about ogg: http://xiph.org)",
+      "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&ogg_avi_parse_sink_template_factory));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&ogg_avi_parse_src_template_factory));
+}
+
+static void
+gst_ogg_avi_parse_class_init (GstOggAviParseClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gstelement_class->change_state = gst_ogg_avi_parse_change_state;
+
+  gobject_class->finalize = gst_ogg_avi_parse_finalize;
+}
+
+static void
+gst_ogg_avi_parse_init (GstOggAviParse * ogg)
+{
+  /* create the sink and source pads */
+  ogg->sinkpad =
+      gst_pad_new_from_static_template (&ogg_avi_parse_sink_template_factory,
+      "sink");
+  gst_pad_set_event_function (ogg->sinkpad, gst_ogg_avi_parse_event);
+  gst_pad_set_chain_function (ogg->sinkpad, gst_ogg_avi_parse_chain);
+  gst_element_add_pad (GST_ELEMENT (ogg), ogg->sinkpad);
+
+  ogg->srcpad =
+      gst_pad_new_from_static_template (&ogg_avi_parse_src_template_factory,
+      "src");
+  gst_pad_use_fixed_caps (ogg->srcpad);
+  gst_element_add_pad (GST_ELEMENT (ogg), ogg->srcpad);
+}
+
+static void
+gst_ogg_avi_parse_finalize (GObject * object)
+{
+  GstOggAviParse *ogg = GST_OGG_AVI_PARSE (object);
+
+  GST_LOG_OBJECT (ogg, "Disposing of object %p", ogg);
+
+  ogg_sync_clear (&ogg->sync);
+  ogg_stream_clear (&ogg->stream);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_ogg_avi_parse_setcaps (GstPad * pad, GstCaps * caps)
+{
+  GstOggAviParse *ogg;
+  GstStructure *structure;
+  const GValue *codec_data;
+  GstBuffer *buffer;
+  guint8 *data, *ptr;
+  gsize size, left;
+  guint32 sizes[3];
+  GstCaps *outcaps;
+  gint i, offs;
+
+  ogg = GST_OGG_AVI_PARSE (GST_OBJECT_PARENT (pad));
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* take codec data */
+  codec_data = gst_structure_get_value (structure, "codec_data");
+  if (codec_data == NULL)
+    goto no_data;
+
+  /* only buffers are valid */
+  if (G_VALUE_TYPE (codec_data) != GST_TYPE_BUFFER)
+    goto wrong_format;
+
+  /* Now parse the data */
+  buffer = gst_value_get_buffer (codec_data);
+
+  /* first 22 bytes are bits_per_sample, channel_mask, GUID
+   * Then we get 3 LE guint32 with the 3 header sizes
+   * then we get the bytes of the 3 headers. */
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  ptr = data;
+  left = size;
+
+  GST_LOG_OBJECT (ogg, "configuring codec_data of size %" G_GSIZE_FORMAT, left);
+
+  /* skip headers */
+  ptr += 22;
+  left -= 22;
+
+  /* we need at least 12 bytes for the packet sizes of the 3 headers */
+  if (left < 12)
+    goto buffer_too_small;
+
+  /* read sizes of the 3 headers */
+  sizes[0] = GST_READ_UINT32_LE (ptr);
+  sizes[1] = GST_READ_UINT32_LE (ptr + 4);
+  sizes[2] = GST_READ_UINT32_LE (ptr + 8);
+
+  GST_DEBUG_OBJECT (ogg, "header sizes: %u %u %u", sizes[0], sizes[1],
+      sizes[2]);
+
+  left -= 12;
+
+  /* and we need at least enough data for all the headers */
+  if (left < sizes[0] + sizes[1] + sizes[2])
+    goto buffer_too_small;
+
+  /* set caps */
+  outcaps = gst_caps_new_simple ("audio/x-vorbis", NULL);
+  gst_pad_push_event (ogg->srcpad, gst_event_new_caps (outcaps));
+  gst_caps_unref (outcaps);
+
+  /* copy header data */
+  offs = 34;
+  for (i = 0; i < 3; i++) {
+    GstBuffer *out;
+
+    /* now output the raw vorbis header packets */
+    out = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offs, sizes[i]);
+    gst_pad_push (ogg->srcpad, out);
+
+    offs += sizes[i];
+  }
+  gst_buffer_unmap (buffer, data, size);
+
+  return TRUE;
+
+  /* ERRORS */
+no_data:
+  {
+    GST_DEBUG_OBJECT (ogg, "no codec_data found in caps");
+    return FALSE;
+  }
+wrong_format:
+  {
+    GST_DEBUG_OBJECT (ogg, "codec_data is not a buffer");
+    return FALSE;
+  }
+buffer_too_small:
+  {
+    GST_DEBUG_OBJECT (ogg, "codec_data is too small");
+    gst_buffer_unmap (buffer, data, size);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ogg_avi_parse_event (GstPad * pad, GstEvent * event)
+{
+  GstOggAviParse *ogg;
+  gboolean ret;
+
+  ogg = GST_OGG_AVI_PARSE (GST_OBJECT_PARENT (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_ogg_avi_parse_setcaps (pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_FLUSH_START:
+      ret = gst_pad_push_event (ogg->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      ogg_sync_reset (&ogg->sync);
+      ogg_stream_reset (&ogg->stream);
+      ogg->discont = TRUE;
+      ret = gst_pad_push_event (ogg->srcpad, event);
+      break;
+    default:
+      ret = gst_pad_push_event (ogg->srcpad, event);
+      break;
+  }
+  return ret;
+}
+
+static GstFlowReturn
+gst_ogg_avi_parse_push_packet (GstOggAviParse * ogg, ogg_packet * packet)
+{
+  GstBuffer *buffer;
+  GstFlowReturn result;
+
+  /* allocate space for header and body */
+  buffer = gst_buffer_new_and_alloc (packet->bytes);
+  gst_buffer_fill (buffer, 0, packet->packet, packet->bytes);
+
+  GST_LOG_OBJECT (ogg, "created buffer %p from page", buffer);
+
+  GST_BUFFER_OFFSET_END (buffer) = packet->granulepos;
+
+  if (ogg->discont) {
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+    ogg->discont = FALSE;
+  }
+
+  result = gst_pad_push (ogg->srcpad, buffer);
+
+  return result;
+}
+
+static GstFlowReturn
+gst_ogg_avi_parse_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+  GstOggAviParse *ogg;
+  guint size;
+  gchar *oggbuf;
+  gint ret = -1;
+
+  ogg = GST_OGG_AVI_PARSE (GST_OBJECT_PARENT (pad));
+
+  size = gst_buffer_get_size (buffer);
+
+  GST_LOG_OBJECT (ogg, "Chain function received buffer of size %d", size);
+
+  if (GST_BUFFER_IS_DISCONT (buffer)) {
+    ogg_sync_reset (&ogg->sync);
+    ogg->discont = TRUE;
+  }
+
+  /* write data to sync layer */
+  oggbuf = ogg_sync_buffer (&ogg->sync, size);
+  gst_buffer_extract (buffer, 0, oggbuf, size);
+  ogg_sync_wrote (&ogg->sync, size);
+  gst_buffer_unref (buffer);
+
+  /* try to get as many packets out of the stream as possible */
+  do {
+    ogg_page page;
+
+    /* try to swap out a page */
+    ret = ogg_sync_pageout (&ogg->sync, &page);
+    if (ret == 0) {
+      GST_DEBUG_OBJECT (ogg, "need more data");
+      break;
+    } else if (ret == -1) {
+      GST_DEBUG_OBJECT (ogg, "discont in pages");
+      ogg->discont = TRUE;
+    } else {
+      /* new unknown stream, init the ogg stream with the serial number of the
+       * page. */
+      if (ogg->serial == -1) {
+        ogg->serial = ogg_page_serialno (&page);
+        ogg_stream_init (&ogg->stream, ogg->serial);
+      }
+
+      /* submit page */
+      if (ogg_stream_pagein (&ogg->stream, &page) != 0) {
+        GST_WARNING_OBJECT (ogg, "ogg stream choked on page resetting stream");
+        ogg_sync_reset (&ogg->sync);
+        ogg->discont = TRUE;
+        continue;
+      }
+
+      /* try to get as many packets as possible out of the page */
+      do {
+        ogg_packet packet;
+
+        ret = ogg_stream_packetout (&ogg->stream, &packet);
+        GST_LOG_OBJECT (ogg, "packetout gave %d", ret);
+        switch (ret) {
+          case 0:
+            break;
+          case -1:
+            /* out of sync, We mark a DISCONT. */
+            ogg->discont = TRUE;
+            break;
+          case 1:
+            result = gst_ogg_avi_parse_push_packet (ogg, &packet);
+            if (result != GST_FLOW_OK)
+              goto done;
+            break;
+          default:
+            GST_WARNING_OBJECT (ogg,
+                "invalid return value %d for ogg_stream_packetout, resetting stream",
+                ret);
+            break;
+        }
+      }
+      while (ret != 0);
+    }
+  }
+  while (ret != 0);
+
+done:
+  return result;
+}
+
+static GstStateChangeReturn
+gst_ogg_avi_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstOggAviParse *ogg;
+  GstStateChangeReturn result = GST_STATE_CHANGE_FAILURE;
+
+  ogg = GST_OGG_AVI_PARSE (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      ogg_sync_init (&ogg->sync);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      ogg_sync_reset (&ogg->sync);
+      ogg_stream_reset (&ogg->stream);
+      ogg->serial = -1;
+      ogg->discont = TRUE;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  result = parent_class->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      ogg_sync_clear (&ogg->sync);
+      break;
+    default:
+      break;
+  }
+  return result;
+}
+
+gboolean
+gst_ogg_avi_parse_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_ogg_avi_parse_debug, "oggaviparse", 0,
+      "ogg avi parser");
+
+  return gst_element_register (plugin, "oggaviparse", GST_RANK_PRIMARY,
+      GST_TYPE_OGG_AVI_PARSE);
+}
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
new file mode 100644
index 0000000..31d4255
--- /dev/null
+++ b/ext/ogg/gstoggdemux.c
@@ -0,0 +1,4505 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * gstoggdemux.c: ogg stream demuxer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-oggdemux
+ * @see_also: <link linkend="gst-plugins-base-plugins-oggmux">oggmux</link>
+ *
+ * This element demuxes ogg files into their encoded audio and video components.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=test.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink
+ * ]| Decodes the vorbis audio stored inside an ogg container.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-12-30 (0.10.5)
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <string.h>
+#include <gst/gst-i18n-plugin.h>
+#include <gst/tag/tag.h>
+
+#include "gstoggdemux.h"
+
+#define CHUNKSIZE (8500)        /* this is out of vorbisfile */
+
+/* we hope we get a granpos within this many bytes off the end */
+#define DURATION_CHUNK_OFFSET (64*1024)
+
+/* stop duration checks within this much of EOS */
+#define EOS_AVOIDANCE_THRESHOLD 8192
+
+#define GST_FLOW_LIMIT GST_FLOW_CUSTOM_ERROR
+#define GST_FLOW_SKIP_PUSH GST_FLOW_CUSTOM_SUCCESS_1
+
+#define GST_CHAIN_LOCK(ogg)     g_mutex_lock((ogg)->chain_lock)
+#define GST_CHAIN_UNLOCK(ogg)   g_mutex_unlock((ogg)->chain_lock)
+
+#define GST_PUSH_LOCK(ogg)                  \
+  do {                                      \
+    GST_TRACE_OBJECT(ogg, "Push lock");     \
+    g_mutex_lock((ogg)->push_lock);         \
+  } while(0)
+
+#define GST_PUSH_UNLOCK(ogg)                \
+  do {                                      \
+    GST_TRACE_OBJECT(ogg, "Push unlock");   \
+    g_mutex_unlock((ogg)->push_lock);       \
+  } while(0)
+
+GST_DEBUG_CATEGORY (gst_ogg_demux_debug);
+GST_DEBUG_CATEGORY (gst_ogg_demux_setup_debug);
+#define GST_CAT_DEFAULT gst_ogg_demux_debug
+
+
+static ogg_packet *
+_ogg_packet_copy (const ogg_packet * packet)
+{
+  ogg_packet *ret = g_slice_new (ogg_packet);
+
+  *ret = *packet;
+  ret->packet = g_memdup (packet->packet, packet->bytes);
+
+  return ret;
+}
+
+static void
+_ogg_packet_free (ogg_packet * packet)
+{
+  g_free (packet->packet);
+  g_slice_free (ogg_packet, packet);
+}
+
+static ogg_page *
+gst_ogg_page_copy (ogg_page * page)
+{
+  ogg_page *p = g_slice_new (ogg_page);
+
+  /* make a copy of the page */
+  p->header = g_memdup (page->header, page->header_len);
+  p->header_len = page->header_len;
+  p->body = g_memdup (page->body, page->body_len);
+  p->body_len = page->body_len;
+
+  return p;
+}
+
+static void
+gst_ogg_page_free (ogg_page * page)
+{
+  g_free (page->header);
+  g_free (page->body);
+  g_slice_free (ogg_page, page);
+}
+
+static gboolean gst_ogg_demux_collect_chain_info (GstOggDemux * ogg,
+    GstOggChain * chain);
+static gboolean gst_ogg_demux_activate_chain (GstOggDemux * ogg,
+    GstOggChain * chain, GstEvent * event);
+static void gst_ogg_pad_mark_discont (GstOggPad * pad);
+static void gst_ogg_chain_mark_discont (GstOggChain * chain);
+
+static gboolean gst_ogg_demux_perform_seek (GstOggDemux * ogg,
+    GstEvent * event);
+static gboolean gst_ogg_demux_receive_event (GstElement * element,
+    GstEvent * event);
+
+static void gst_ogg_pad_dispose (GObject * object);
+static void gst_ogg_pad_finalize (GObject * object);
+
+static const GstQueryType *gst_ogg_pad_query_types (GstPad * pad);
+static gboolean gst_ogg_pad_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_ogg_pad_event (GstPad * pad, GstEvent * event);
+static GstOggPad *gst_ogg_chain_get_stream (GstOggChain * chain,
+    guint32 serialno);
+
+static GstFlowReturn gst_ogg_demux_combine_flows (GstOggDemux * ogg,
+    GstOggPad * pad, GstFlowReturn ret);
+static void gst_ogg_demux_sync_streams (GstOggDemux * ogg);
+
+GstCaps *gst_ogg_demux_set_header_on_caps (GstOggDemux * ogg,
+    GstCaps * caps, GList * headers);
+static gboolean gst_ogg_demux_send_event (GstOggDemux * ogg, GstEvent * event);
+static gboolean gst_ogg_demux_perform_seek_push (GstOggDemux * ogg,
+    GstEvent * event);
+static gboolean gst_ogg_demux_check_duration_push (GstOggDemux * ogg,
+    GstSeekFlags flags, GstEvent * event);
+
+GType gst_ogg_pad_get_type (void);
+G_DEFINE_TYPE (GstOggPad, gst_ogg_pad, GST_TYPE_PAD);
+
+static void
+gst_ogg_pad_class_init (GstOggPadClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  gobject_class->dispose = gst_ogg_pad_dispose;
+  gobject_class->finalize = gst_ogg_pad_finalize;
+}
+
+static void
+gst_ogg_pad_init (GstOggPad * pad)
+{
+  gst_pad_set_event_function (GST_PAD (pad),
+      GST_DEBUG_FUNCPTR (gst_ogg_pad_event));
+  gst_pad_set_query_type_function (GST_PAD (pad),
+      GST_DEBUG_FUNCPTR (gst_ogg_pad_query_types));
+  gst_pad_set_query_function (GST_PAD (pad),
+      GST_DEBUG_FUNCPTR (gst_ogg_pad_src_query));
+  gst_pad_use_fixed_caps (GST_PAD (pad));
+
+  pad->mode = GST_OGG_PAD_MODE_INIT;
+
+  pad->current_granule = -1;
+  pad->keyframe_granule = -1;
+
+  pad->start_time = GST_CLOCK_TIME_NONE;
+
+  pad->position = GST_CLOCK_TIME_NONE;
+
+  pad->have_type = FALSE;
+  pad->continued = NULL;
+  pad->map.headers = NULL;
+  pad->map.queued = NULL;
+
+  pad->map.granulerate_n = 0;
+  pad->map.granulerate_d = 0;
+  pad->map.granuleshift = -1;
+}
+
+static void
+gst_ogg_pad_dispose (GObject * object)
+{
+  GstOggPad *pad = GST_OGG_PAD (object);
+
+  pad->chain = NULL;
+  pad->ogg = NULL;
+
+  g_list_foreach (pad->map.headers, (GFunc) _ogg_packet_free, NULL);
+  g_list_free (pad->map.headers);
+  pad->map.headers = NULL;
+  g_list_foreach (pad->map.queued, (GFunc) _ogg_packet_free, NULL);
+  g_list_free (pad->map.queued);
+  pad->map.queued = NULL;
+
+  g_free (pad->map.index);
+  pad->map.index = NULL;
+
+  /* clear continued pages */
+  g_list_foreach (pad->continued, (GFunc) gst_ogg_page_free, NULL);
+  g_list_free (pad->continued);
+  pad->continued = NULL;
+
+  if (pad->map.caps) {
+    gst_caps_unref (pad->map.caps);
+    pad->map.caps = NULL;
+  }
+
+  if (pad->map.taglist) {
+    gst_tag_list_free (pad->map.taglist);
+    pad->map.taglist = NULL;
+  }
+
+  ogg_stream_reset (&pad->map.stream);
+
+  G_OBJECT_CLASS (gst_ogg_pad_parent_class)->dispose (object);
+}
+
+static void
+gst_ogg_pad_finalize (GObject * object)
+{
+  GstOggPad *pad = GST_OGG_PAD (object);
+
+  ogg_stream_clear (&pad->map.stream);
+
+  G_OBJECT_CLASS (gst_ogg_pad_parent_class)->finalize (object);
+}
+
+static const GstQueryType *
+gst_ogg_pad_query_types (GstPad * pad)
+{
+  static const GstQueryType query_types[] = {
+    GST_QUERY_DURATION,
+    GST_QUERY_SEEKING,
+    0
+  };
+
+  return query_types;
+}
+
+static gboolean
+gst_ogg_pad_src_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res = TRUE;
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:
+    {
+      GstFormat format;
+      gint64 total_time = -1;
+
+      gst_query_parse_duration (query, &format, NULL);
+      /* can only get position in time */
+      if (format != GST_FORMAT_TIME)
+        goto wrong_format;
+
+      if (ogg->total_time != -1) {
+        /* we can return the total length */
+        total_time = ogg->total_time;
+      } else {
+        gint bitrate = ogg->bitrate;
+
+        /* try with length and bitrate */
+        if (bitrate > 0) {
+          GstQuery *uquery;
+
+          /* ask upstream for total length in bytes */
+          uquery = gst_query_new_duration (GST_FORMAT_BYTES);
+          if (gst_pad_peer_query (ogg->sinkpad, uquery)) {
+            gint64 length;
+
+            gst_query_parse_duration (uquery, NULL, &length);
+
+            /* estimate using the bitrate */
+            total_time =
+                gst_util_uint64_scale (length, 8 * GST_SECOND, bitrate);
+
+            GST_LOG_OBJECT (ogg,
+                "length: %" G_GINT64_FORMAT ", bitrate %d, total_time %"
+                GST_TIME_FORMAT, length, bitrate, GST_TIME_ARGS (total_time));
+          }
+          gst_query_unref (uquery);
+        }
+      }
+
+      gst_query_set_duration (query, GST_FORMAT_TIME, total_time);
+      break;
+    }
+    case GST_QUERY_SEEKING:
+    {
+      GstFormat format;
+
+      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+      if (format == GST_FORMAT_TIME) {
+        gboolean seekable = FALSE;
+        gint64 stop = -1;
+
+        if (ogg->pullmode) {
+          seekable = TRUE;
+          stop = ogg->total_time;
+        } else if (ogg->current_chain->streams->len) {
+          gint i;
+
+          seekable = FALSE;
+          for (i = 0; i < ogg->current_chain->streams->len; i++) {
+            GstOggPad *pad =
+                g_array_index (ogg->current_chain->streams, GstOggPad *, i);
+
+            seekable = TRUE;
+            if (pad->map.index != NULL && pad->map.n_index != 0) {
+              GstOggIndex *idx;
+              GstClockTime idx_time;
+
+              idx = &pad->map.index[pad->map.n_index - 1];
+              idx_time =
+                  gst_util_uint64_scale (idx->timestamp, GST_SECOND,
+                  pad->map.kp_denom);
+              if (stop == -1)
+                stop = idx_time;
+              else
+                stop = MAX (idx_time, stop);
+            } else {
+              stop = -1;        /* we've no clue, sadly, without seeking */
+            }
+          }
+        }
+
+        gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, 0, stop);
+      } else {
+        res = FALSE;
+      }
+      break;
+    }
+
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+done:
+  gst_object_unref (ogg);
+
+  return res;
+
+  /* ERRORS */
+wrong_format:
+  {
+    GST_DEBUG_OBJECT (ogg, "only query duration on TIME is supported");
+    res = FALSE;
+    goto done;
+  }
+}
+
+static gboolean
+gst_ogg_demux_receive_event (GstElement * element, GstEvent * event)
+{
+  gboolean res;
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (element);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      /* now do the seek */
+      res = gst_ogg_demux_perform_seek (ogg, event);
+      gst_event_unref (event);
+      break;
+    default:
+      GST_DEBUG_OBJECT (ogg, "We only handle seek events here");
+      goto error;
+  }
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (ogg, "error handling event");
+    gst_event_unref (event);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ogg_pad_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res;
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      /* now do the seek */
+      res = gst_ogg_demux_perform_seek (ogg, event);
+      gst_event_unref (event);
+      break;
+    default:
+      res = gst_pad_event_default (pad, event);
+      break;
+  }
+  gst_object_unref (ogg);
+
+  return res;
+}
+
+static void
+gst_ogg_pad_reset (GstOggPad * pad)
+{
+  ogg_stream_reset (&pad->map.stream);
+
+  GST_DEBUG_OBJECT (pad, "doing reset");
+
+  /* clear continued pages */
+  g_list_foreach (pad->continued, (GFunc) gst_ogg_page_free, NULL);
+  g_list_free (pad->continued);
+  pad->continued = NULL;
+
+  pad->last_ret = GST_FLOW_OK;
+  pad->position = GST_CLOCK_TIME_NONE;
+  pad->current_granule = -1;
+  pad->keyframe_granule = -1;
+  pad->is_eos = FALSE;
+}
+
+/* queue data, basically takes the packet, puts it in a buffer and store the
+ * buffer in the queued list.  */
+static GstFlowReturn
+gst_ogg_demux_queue_data (GstOggPad * pad, ogg_packet * packet)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  GstOggDemux *ogg = pad->ogg;
+#endif
+
+  GST_DEBUG_OBJECT (ogg, "%p queueing data serial %08x",
+      pad, pad->map.serialno);
+
+  pad->map.queued = g_list_append (pad->map.queued, _ogg_packet_copy (packet));
+
+  /* we are ok now */
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet,
+    gboolean push_headers)
+{
+  GstBuffer *buf = NULL;
+  GstFlowReturn ret, cret;
+  GstOggDemux *ogg = pad->ogg;
+  gint64 current_time;
+  GstOggChain *chain;
+  gint64 duration;
+  gint offset;
+  gint trim;
+  GstClockTime out_timestamp, out_duration;
+  guint64 out_offset, out_offset_end;
+  gboolean delta_unit = FALSE;
+
+  cret = GST_FLOW_OK;
+
+  GST_PUSH_LOCK (ogg);
+  if (!ogg->pullmode && ogg->push_state == PUSH_PLAYING
+      && ogg->push_time_length == GST_CLOCK_TIME_NONE
+      && !ogg->push_disable_seeking) {
+    if (!ogg->building_chain) {
+      /* we got all headers, now try to get duration */
+      if (!gst_ogg_demux_check_duration_push (ogg, GST_SEEK_FLAG_FLUSH, NULL)) {
+        GST_PUSH_UNLOCK (ogg);
+        return GST_FLOW_OK;
+      }
+    }
+    GST_PUSH_UNLOCK (ogg);
+    return GST_FLOW_OK;
+  }
+  GST_PUSH_UNLOCK (ogg);
+
+  GST_DEBUG_OBJECT (ogg,
+      "%p streaming to peer serial %08x", pad, pad->map.serialno);
+
+  if (pad->map.is_ogm) {
+    const guint8 *data;
+    long bytes;
+
+    data = packet->packet;
+    bytes = packet->bytes;
+
+    if (bytes < 1)
+      goto empty_packet;
+
+    if ((data[0] & 1) || (data[0] & 3 && pad->map.is_ogm_text)) {
+      /* We don't push header packets for OGM */
+      goto done;
+    }
+
+    offset = 1 + (((data[0] & 0xc0) >> 6) | ((data[0] & 0x02) << 1));
+    delta_unit = (((data[0] & 0x08) >> 3) == 0);
+
+    trim = 0;
+
+    /* Strip trailing \0 for subtitles */
+    if (pad->map.is_ogm_text) {
+      while (bytes && data[bytes - 1] == 0) {
+        trim++;
+        bytes--;
+      }
+    }
+  } else if (pad->map.is_vp8) {
+    if ((packet->bytes >= 7 && memcmp (packet->packet, "OVP80\2 ", 7) == 0) ||
+        packet->b_o_s ||
+        (packet->bytes >= 5 && memcmp (packet->packet, "OVP80", 5) == 0)) {
+      /* We don't push header packets for VP8 */
+      goto done;
+    }
+    offset = 0;
+    trim = 0;
+  } else {
+    offset = 0;
+    trim = 0;
+  }
+
+  /* get timing info for the packet */
+  if (gst_ogg_stream_packet_is_header (&pad->map, packet)) {
+    duration = 0;
+    GST_DEBUG_OBJECT (ogg, "packet is header");
+  } else {
+    duration = gst_ogg_stream_get_packet_duration (&pad->map, packet);
+    GST_DEBUG_OBJECT (ogg, "packet duration %" G_GUINT64_FORMAT, duration);
+  }
+
+  if (packet->b_o_s) {
+    out_timestamp = GST_CLOCK_TIME_NONE;
+    out_duration = GST_CLOCK_TIME_NONE;
+    out_offset = 0;
+    out_offset_end = -1;
+  } else {
+    if (packet->granulepos != -1) {
+      pad->current_granule = gst_ogg_stream_granulepos_to_granule (&pad->map,
+          packet->granulepos);
+      pad->keyframe_granule =
+          gst_ogg_stream_granulepos_to_key_granule (&pad->map,
+          packet->granulepos);
+      GST_DEBUG_OBJECT (ogg, "new granule %" G_GUINT64_FORMAT,
+          pad->current_granule);
+    } else if (ogg->segment.rate > 0.0 && pad->current_granule != -1) {
+      pad->current_granule += duration;
+      GST_DEBUG_OBJECT (ogg, "interpollating granule %" G_GUINT64_FORMAT,
+          pad->current_granule);
+    }
+    if (ogg->segment.rate < 0.0 && packet->granulepos == -1) {
+      /* negative rates, only set timestamp on the packets with a granulepos */
+      out_timestamp = -1;
+      out_duration = -1;
+      out_offset = -1;
+      out_offset_end = -1;
+    } else {
+      /* we only push buffers after we have a valid granule. This is done so that
+       * we nicely skip packets without a timestamp after a seek. This is ok
+       * because we base or seek on the packet after the page with the smaller
+       * timestamp. */
+      if (pad->current_granule == -1)
+        goto no_timestamp;
+
+      if (pad->map.is_ogm) {
+        out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
+            pad->current_granule);
+        out_duration = gst_util_uint64_scale (duration,
+            GST_SECOND * pad->map.granulerate_d, pad->map.granulerate_n);
+      } else if (pad->map.is_sparse) {
+        out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
+            pad->current_granule);
+        if (duration == GST_CLOCK_TIME_NONE) {
+          out_duration = GST_CLOCK_TIME_NONE;
+        } else {
+          out_duration = gst_util_uint64_scale (duration,
+              GST_SECOND * pad->map.granulerate_d, pad->map.granulerate_n);
+        }
+      } else {
+        out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
+            pad->current_granule - duration);
+        out_duration =
+            gst_ogg_stream_granule_to_time (&pad->map,
+            pad->current_granule) - out_timestamp;
+      }
+      out_offset_end =
+          gst_ogg_stream_granule_to_granulepos (&pad->map,
+          pad->current_granule, pad->keyframe_granule);
+      out_offset =
+          gst_ogg_stream_granule_to_time (&pad->map, pad->current_granule);
+    }
+  }
+
+  if (pad->map.is_ogm_text) {
+    /* check for invalid buffer sizes */
+    if (G_UNLIKELY (offset + trim >= packet->bytes))
+      goto empty_packet;
+  }
+
+  if (!pad->added)
+    goto not_added;
+
+  buf = gst_buffer_new_and_alloc (packet->bytes - offset - trim);
+
+  /* set delta flag for OGM content */
+  if (delta_unit)
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+  /* copy packet in buffer */
+  gst_buffer_fill (buf, 0, packet->packet + offset,
+      packet->bytes - offset - trim);
+
+  GST_BUFFER_TIMESTAMP (buf) = out_timestamp;
+  GST_BUFFER_DURATION (buf) = out_duration;
+  GST_BUFFER_OFFSET (buf) = out_offset;
+  GST_BUFFER_OFFSET_END (buf) = out_offset_end;
+
+  /* Mark discont on the buffer */
+  if (pad->discont) {
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+    pad->discont = FALSE;
+  }
+
+  pad->position = ogg->segment.position;
+
+  /* don't push the header packets when we are asked to skip them */
+  if (!packet->b_o_s || push_headers) {
+    ret = gst_pad_push (GST_PAD_CAST (pad), buf);
+    buf = NULL;
+
+    /* combine flows */
+    cret = gst_ogg_demux_combine_flows (ogg, pad, ret);
+  }
+
+  /* we're done with skeleton stuff */
+  if (pad->map.is_skeleton)
+    goto done;
+
+  /* check if valid granulepos, then we can calculate the current
+   * position. We know the granule for each packet but we only want to update
+   * the position when we have a valid granulepos on the packet because else
+   * our time jumps around for the different streams. */
+  if (packet->granulepos < 0)
+    goto done;
+
+  /* convert to time */
+  current_time = gst_ogg_stream_get_end_time_for_granulepos (&pad->map,
+      packet->granulepos);
+
+  /* convert to stream time */
+  if ((chain = pad->chain)) {
+    gint64 chain_start = 0;
+
+    if (chain->segment_start != GST_CLOCK_TIME_NONE)
+      chain_start = chain->segment_start;
+
+    current_time = current_time - chain_start + chain->begin_time;
+  }
+
+  /* and store as the current position */
+  ogg->segment.position = current_time;
+
+  GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (current_time));
+
+  /* check stream eos */
+  if ((ogg->segment.rate > 0.0 && ogg->segment.stop != GST_CLOCK_TIME_NONE &&
+          current_time > ogg->segment.stop) ||
+      (ogg->segment.rate < 0.0 && ogg->segment.start != GST_CLOCK_TIME_NONE &&
+          current_time < ogg->segment.start)) {
+    GST_DEBUG_OBJECT (ogg, "marking pad %p EOS", pad);
+    pad->is_eos = TRUE;
+  }
+
+done:
+  if (buf)
+    gst_buffer_unref (buf);
+  /* return combined flow result */
+  return cret;
+
+  /* special cases */
+empty_packet:
+  {
+    GST_DEBUG_OBJECT (ogg, "Skipping empty packet");
+    goto done;
+  }
+
+no_timestamp:
+  {
+    GST_DEBUG_OBJECT (ogg, "skipping packet: no valid granule found yet");
+    goto done;
+  }
+not_added:
+  {
+    GST_DEBUG_OBJECT (ogg, "pad not added yet");
+    goto done;
+  }
+}
+
+static guint64
+gst_ogg_demux_collect_start_time (GstOggDemux * ogg, GstOggChain * chain)
+{
+  gint i;
+  guint64 start_time = G_MAXUINT64;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.is_skeleton)
+      continue;
+
+    /*  can do this if the pad start time is not defined */
+    GST_DEBUG_OBJECT (ogg, "Pad %08x (%s) start time is %" GST_TIME_FORMAT,
+        pad->map.serialno, gst_ogg_stream_get_media_type (&pad->map),
+        GST_TIME_ARGS (pad->start_time));
+    if (pad->start_time == GST_CLOCK_TIME_NONE) {
+      if (!pad->map.is_sparse) {
+        start_time = G_MAXUINT64;
+        break;
+      }
+    } else {
+      start_time = MIN (start_time, pad->start_time);
+    }
+  }
+  return start_time;
+}
+
+static GstClockTime
+gst_ogg_demux_collect_sync_time (GstOggDemux * ogg, GstOggChain * chain)
+{
+  gint i;
+  GstClockTime sync_time = GST_CLOCK_TIME_NONE;
+
+  if (!chain) {
+    GST_WARNING_OBJECT (ogg, "No chain!");
+    return GST_CLOCK_TIME_NONE;
+  }
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.is_sparse)
+      continue;
+
+    if (pad->push_sync_time == GST_CLOCK_TIME_NONE) {
+      sync_time = GST_CLOCK_TIME_NONE;
+      break;
+    } else {
+      if (sync_time == GST_CLOCK_TIME_NONE)
+        sync_time = pad->push_sync_time;
+      else
+        sync_time = MAX (sync_time, pad->push_sync_time);
+    }
+  }
+  return sync_time;
+}
+
+/* submit a packet to the oggpad, this function will run the
+ * typefind code for the pad if this is the first packet for this
+ * stream 
+ */
+static GstFlowReturn
+gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
+{
+  gint64 granule;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  GstOggDemux *ogg = pad->ogg;
+
+  GST_DEBUG_OBJECT (ogg, "%p submit packet serial %08x",
+      pad, pad->map.serialno);
+
+  if (!pad->have_type) {
+    pad->have_type = gst_ogg_stream_setup_map (&pad->map, packet);
+    if (!pad->have_type) {
+      pad->map.caps = gst_caps_new_simple ("application/x-unknown", NULL);
+    }
+    if (pad->map.is_skeleton) {
+      GST_DEBUG_OBJECT (ogg, "we have a fishead");
+      /* copy values over to global ogg level */
+      ogg->basetime = pad->map.basetime;
+      ogg->prestime = pad->map.prestime;
+
+      /* use total time to update the total ogg time */
+      if (ogg->total_time == -1) {
+        ogg->total_time = pad->map.total_time;
+      } else if (pad->map.total_time > 0) {
+        ogg->total_time = MAX (ogg->total_time, pad->map.total_time);
+      }
+    }
+    if (pad->map.caps) {
+      gst_pad_set_caps (GST_PAD (pad), pad->map.caps);
+    } else {
+      GST_WARNING_OBJECT (ogg, "stream parser didn't create src pad caps");
+    }
+  }
+
+  if (pad->map.is_skeleton) {
+    guint32 serialno;
+    GstOggPad *skel_pad;
+    GstOggSkeleton type;
+
+    /* try to parse the serialno first */
+    if (gst_ogg_map_parse_fisbone (&pad->map, packet->packet, packet->bytes,
+            &serialno, &type)) {
+
+      GST_DEBUG_OBJECT (pad->ogg,
+          "got skeleton packet for stream 0x%08x", serialno);
+
+      skel_pad = gst_ogg_chain_get_stream (pad->chain, serialno);
+      if (skel_pad) {
+        switch (type) {
+          case GST_OGG_SKELETON_FISBONE:
+            /* parse the remainder of the fisbone in the pad with the serialno,
+             * note that we ignore the start_time as this is usually wrong for
+             * live streams */
+            gst_ogg_map_add_fisbone (&skel_pad->map, &pad->map, packet->packet,
+                packet->bytes, NULL);
+            break;
+          case GST_OGG_SKELETON_INDEX:
+            gst_ogg_map_add_index (&skel_pad->map, &pad->map, packet->packet,
+                packet->bytes);
+
+            /* use total time to update the total ogg time */
+            if (ogg->total_time == -1) {
+              ogg->total_time = skel_pad->map.total_time;
+            } else if (skel_pad->map.total_time > 0) {
+              ogg->total_time = MAX (ogg->total_time, skel_pad->map.total_time);
+            }
+            break;
+          default:
+            break;
+        }
+
+      } else {
+        GST_WARNING_OBJECT (pad->ogg,
+            "found skeleton fisbone for an unknown stream 0x%08x", serialno);
+      }
+    }
+  }
+
+  granule = gst_ogg_stream_granulepos_to_granule (&pad->map,
+      packet->granulepos);
+  if (granule != -1) {
+    GST_DEBUG_OBJECT (ogg, "%p has granulepos %" G_GINT64_FORMAT, pad, granule);
+    pad->current_granule = granule;
+  }
+
+  /* restart header packet count when seeing a b_o_s page;
+   * particularly useful following a seek or even following chain finding */
+  if (packet->b_o_s) {
+    GST_DEBUG_OBJECT (ogg, "b_o_s packet, resetting header packet count");
+    pad->map.n_header_packets_seen = 0;
+    if (!pad->map.have_headers) {
+      GST_DEBUG_OBJECT (ogg, "clearing header packets");
+      g_list_foreach (pad->map.headers, (GFunc) _ogg_packet_free, NULL);
+      g_list_free (pad->map.headers);
+      pad->map.headers = NULL;
+    }
+  }
+
+  /* Overload the value of b_o_s in ogg_packet with a flag whether or
+   * not this is a header packet.  Maybe some day this could be cleaned
+   * up.  */
+  packet->b_o_s = gst_ogg_stream_packet_is_header (&pad->map, packet);
+  if (!packet->b_o_s) {
+    GST_DEBUG ("found non-header packet");
+    pad->map.have_headers = TRUE;
+    if (pad->start_time == GST_CLOCK_TIME_NONE) {
+      gint64 duration = gst_ogg_stream_get_packet_duration (&pad->map, packet);
+      GST_DEBUG ("duration %" G_GINT64_FORMAT, duration);
+      if (duration != -1) {
+        pad->map.accumulated_granule += duration;
+        GST_DEBUG ("accumulated granule %" G_GINT64_FORMAT,
+            pad->map.accumulated_granule);
+      }
+
+      if (packet->granulepos != -1) {
+        ogg_int64_t start_granule;
+        gint64 granule;
+
+        granule = gst_ogg_stream_granulepos_to_granule (&pad->map,
+            packet->granulepos);
+
+        if (granule > pad->map.accumulated_granule)
+          start_granule = granule - pad->map.accumulated_granule;
+        else
+          start_granule = 0;
+
+        pad->start_time = gst_ogg_stream_granule_to_time (&pad->map,
+            start_granule);
+        GST_DEBUG_OBJECT (ogg,
+            "start time %" GST_TIME_FORMAT " (%" GST_TIME_FORMAT ") for %s",
+            GST_TIME_ARGS (pad->start_time), GST_TIME_ARGS (pad->start_time),
+            gst_ogg_stream_get_media_type (&pad->map));
+      } else {
+        packet->granulepos = gst_ogg_stream_granule_to_granulepos (&pad->map,
+            pad->map.accumulated_granule, pad->keyframe_granule);
+      }
+    }
+  } else {
+    /* look for tags in header packet (before inc header count) */
+    gst_ogg_stream_extract_tags (&pad->map, packet);
+    pad->map.n_header_packets_seen++;
+    if (!pad->map.have_headers) {
+      pad->map.headers =
+          g_list_append (pad->map.headers, _ogg_packet_copy (packet));
+      GST_DEBUG ("keeping header packet %d", pad->map.n_header_packets_seen);
+    }
+  }
+
+  /* we know the start_time of the pad data, see if we
+   * can activate the complete chain if this is a dynamic
+   * chain. We need all the headers too for this. */
+  if (pad->start_time != GST_CLOCK_TIME_NONE && pad->map.have_headers) {
+    GstOggChain *chain = pad->chain;
+
+    /* check if complete chain has start time */
+    if (chain == ogg->building_chain) {
+      GstEvent *event = NULL;
+
+      if (ogg->resync) {
+        guint64 start_time;
+
+        GST_DEBUG_OBJECT (ogg, "need to resync");
+
+        /* when we need to resync after a seek, we wait until we have received
+         * timestamps on all streams */
+        start_time = gst_ogg_demux_collect_start_time (ogg, chain);
+
+        if (start_time != G_MAXUINT64) {
+          gint64 segment_time;
+          GstSegment segment;
+
+          GST_DEBUG_OBJECT (ogg, "start_time:  %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (start_time));
+
+          if (chain->segment_start < start_time)
+            segment_time =
+                (start_time - chain->segment_start) + chain->begin_time;
+          else
+            segment_time = chain->begin_time;
+
+          /* create the newsegment event we are going to send out */
+          gst_segment_init (&segment, GST_FORMAT_TIME);
+
+          GST_PUSH_LOCK (ogg);
+          if (!ogg->pullmode && ogg->push_state == PUSH_LINEAR2) {
+            /* if we are fast forwarding to the actual seek target,
+               ensure previous frames are clipped */
+            GST_DEBUG_OBJECT (ogg,
+                "Resynced, starting segment at %" GST_TIME_FORMAT
+                ", start_time %" GST_TIME_FORMAT,
+                GST_TIME_ARGS (ogg->push_seek_time_original_target),
+                GST_TIME_ARGS (start_time));
+            segment.rate = ogg->push_seek_rate;
+            segment.start = ogg->push_seek_time_original_target;
+            segment.stop = -1;
+            segment.time = ogg->push_seek_time_original_target;
+            event = gst_event_new_segment (&segment);
+            ogg->push_state = PUSH_PLAYING;
+          } else {
+            segment.rate = ogg->segment.rate;
+            segment.applied_rate = ogg->segment.applied_rate;
+            segment.start = start_time;
+            segment.stop = chain->segment_stop;
+            segment.time = segment_time;
+            event = gst_event_new_segment (&segment);
+          }
+          GST_PUSH_UNLOCK (ogg);
+
+          ogg->resync = FALSE;
+        }
+      } else {
+        /* see if we have enough info to activate the chain, we have enough info
+         * when all streams have a valid start time. */
+        if (gst_ogg_demux_collect_chain_info (ogg, chain)) {
+          GstSegment segment;
+
+          GST_DEBUG_OBJECT (ogg, "segment_start: %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (chain->segment_start));
+          GST_DEBUG_OBJECT (ogg, "segment_stop:  %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (chain->segment_stop));
+          GST_DEBUG_OBJECT (ogg, "segment_time:  %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (chain->begin_time));
+
+          /* create the newsegment event we are going to send out */
+          gst_segment_init (&segment, GST_FORMAT_TIME);
+          segment.rate = ogg->segment.rate;
+          segment.applied_rate = ogg->segment.applied_rate;
+          segment.start = chain->segment_start;
+          segment.stop = chain->segment_stop;
+          segment.time = chain->begin_time;
+          event = gst_event_new_segment (&segment);
+        }
+      }
+
+      if (event) {
+        gst_event_set_seqnum (event, ogg->seqnum);
+
+        gst_ogg_demux_activate_chain (ogg, chain, event);
+
+        ogg->building_chain = NULL;
+      }
+    }
+  }
+
+  /* if we are building a chain, store buffer for when we activate
+   * it. This path is taken if we operate in streaming mode. */
+  if (ogg->building_chain) {
+    /* bos packets where stored in the header list so we can discard
+     * them here*/
+    if (!packet->b_o_s)
+      ret = gst_ogg_demux_queue_data (pad, packet);
+  }
+  /* else we are completely streaming to the peer */
+  else {
+    ret = gst_ogg_demux_chain_peer (pad, packet, !ogg->pullmode);
+  }
+  return ret;
+}
+
+/* flush at most @npackets from the stream layer. All packets if 
+ * @npackets is 0;
+ */
+static GstFlowReturn
+gst_ogg_pad_stream_out (GstOggPad * pad, gint npackets)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+  gboolean done = FALSE;
+  GstOggDemux *ogg;
+
+  ogg = pad->ogg;
+
+  while (!done) {
+    int ret;
+    ogg_packet packet;
+
+    ret = ogg_stream_packetout (&pad->map.stream, &packet);
+    switch (ret) {
+      case 0:
+        GST_LOG_OBJECT (ogg, "packetout done");
+        done = TRUE;
+        break;
+      case -1:
+        GST_LOG_OBJECT (ogg, "packetout discont");
+        if (!pad->map.is_sparse) {
+          gst_ogg_chain_mark_discont (pad->chain);
+        } else {
+          gst_ogg_pad_mark_discont (pad);
+        }
+        break;
+      case 1:
+        GST_LOG_OBJECT (ogg, "packetout gave packet of size %ld", packet.bytes);
+        result = gst_ogg_pad_submit_packet (pad, &packet);
+        /* not linked is not a problem, it's possible that we are still
+         * collecting headers and that we don't have exposed the pads yet */
+        if (result == GST_FLOW_NOT_LINKED)
+          break;
+        else if (result <= GST_FLOW_UNEXPECTED)
+          goto could_not_submit;
+        break;
+      default:
+        GST_WARNING_OBJECT (ogg,
+            "invalid return value %d for ogg_stream_packetout, resetting stream",
+            ret);
+        gst_ogg_pad_reset (pad);
+        break;
+    }
+    if (npackets > 0) {
+      npackets--;
+      done = (npackets == 0);
+    }
+  }
+  return result;
+
+  /* ERRORS */
+could_not_submit:
+  {
+    GST_WARNING_OBJECT (ogg,
+        "could not submit packet for stream %08x, "
+        "error: %d", pad->map.serialno, result);
+    gst_ogg_pad_reset (pad);
+    return result;
+  }
+}
+
+static void
+gst_ogg_demux_setup_bisection_bounds (GstOggDemux * ogg)
+{
+  if (ogg->push_last_seek_time >= ogg->push_seek_time_target) {
+    GST_DEBUG_OBJECT (ogg, "We overshot by %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (ogg->push_last_seek_time - ogg->push_seek_time_target));
+    ogg->push_offset1 = ogg->push_last_seek_offset;
+    ogg->push_time1 = ogg->push_last_seek_time;
+  } else {
+    GST_DEBUG_OBJECT (ogg, "We undershot by %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (ogg->push_seek_time_target - ogg->push_last_seek_time));
+    ogg->push_offset0 = ogg->push_last_seek_offset;
+    ogg->push_time0 = ogg->push_last_seek_time;
+  }
+}
+
+static gint64
+gst_ogg_demux_estimate_bisection_target (GstOggDemux * ogg)
+{
+  gint64 best;
+  gint64 segment_bitrate;
+
+  /* we might not know the length of the stream in time,
+     so push_time1 might not be set */
+  GST_DEBUG_OBJECT (ogg,
+      "push time 1: %" GST_TIME_FORMAT ", dbytes %" G_GINT64_FORMAT,
+      GST_TIME_ARGS (ogg->push_time1), ogg->push_offset1 - ogg->push_offset0);
+  if (ogg->push_time1 == GST_CLOCK_TIME_NONE) {
+    GST_DEBUG_OBJECT (ogg,
+        "New segment to consider: bytes %" G_GINT64_FORMAT " %" G_GINT64_FORMAT
+        ", time %" GST_TIME_FORMAT " (open ended)", ogg->push_offset0,
+        ogg->push_offset1, GST_TIME_ARGS (ogg->push_time0));
+    if (ogg->push_last_seek_time == ogg->push_start_time) {
+      /* if we're at start and don't know the end time, we can't estimate
+         bitrate, so get the nominal declared bitrate as a failsafe, or some
+         random constant which will be discarded after we made a (probably
+         dire) first guess */
+      segment_bitrate = (ogg->bitrate > 0 ? ogg->bitrate : 1000);
+    } else {
+      segment_bitrate =
+          gst_util_uint64_scale (ogg->push_last_seek_offset - 0,
+          8 * GST_SECOND, ogg->push_last_seek_time - ogg->push_start_time);
+    }
+    best =
+        ogg->push_offset0 +
+        gst_util_uint64_scale (ogg->push_seek_time_target - ogg->push_time0,
+        segment_bitrate, 8 * GST_SECOND);
+  } else {
+    GST_DEBUG_OBJECT (ogg,
+        "New segment to consider: bytes %" G_GINT64_FORMAT " %" G_GINT64_FORMAT
+        ", time %" GST_TIME_FORMAT " %" GST_TIME_FORMAT, ogg->push_offset0,
+        ogg->push_offset1, GST_TIME_ARGS (ogg->push_time0),
+        GST_TIME_ARGS (ogg->push_time1));
+    if (ogg->push_time0 == ogg->push_time1) {
+      best = ogg->push_offset0;
+    } else {
+      segment_bitrate =
+          gst_util_uint64_scale (ogg->push_offset1 - ogg->push_offset0,
+          8 * GST_SECOND, ogg->push_time1 - ogg->push_time0);
+      GST_DEBUG_OBJECT (ogg,
+          "Local bitrate on the %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT
+          " segment: %" G_GINT64_FORMAT, GST_TIME_ARGS (ogg->push_time0),
+          GST_TIME_ARGS (ogg->push_time1), segment_bitrate);
+      best =
+          ogg->push_offset0 +
+          gst_util_uint64_scale (ogg->push_seek_time_target - ogg->push_time0,
+          segment_bitrate, 8 * GST_SECOND);
+    }
+  }
+
+  /* offset by typical page size */
+  best -= CHUNKSIZE;
+  if (best < ogg->push_offset0)
+    best = ogg->push_offset0;
+  if (best < 0)
+    best = 0;
+
+  return best;
+}
+
+static void
+gst_ogg_demux_record_keyframe_time (GstOggDemux * ogg, GstOggPad * pad,
+    ogg_int64_t granpos)
+{
+  gint64 kf_granule;
+  GstClockTime kf_time;
+
+  kf_granule = gst_ogg_stream_granulepos_to_key_granule (&pad->map, granpos);
+  kf_time = gst_ogg_stream_granule_to_time (&pad->map, kf_granule);
+
+  pad->push_kf_time = kf_time;
+}
+
+/* returns the earliest keyframe time for all non sparse pads in the chain,
+ * if known, and GST_CLOCK_TIME_NONE if not */
+static GstClockTime
+gst_ogg_demux_get_earliest_keyframe_time (GstOggDemux * ogg)
+{
+  GstClockTime t = GST_CLOCK_TIME_NONE;
+  GstOggChain *chain = ogg->building_chain;
+  int i;
+
+  if (!chain) {
+    GST_WARNING_OBJECT (ogg, "No chain!");
+    return GST_CLOCK_TIME_NONE;
+  }
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.is_sparse)
+      continue;
+    if (pad->push_kf_time == GST_CLOCK_TIME_NONE)
+      return GST_CLOCK_TIME_NONE;
+    if (t == GST_CLOCK_TIME_NONE || pad->push_kf_time < t)
+      t = pad->push_kf_time;
+  }
+
+  return t;
+}
+
+/* MUST be called with the push lock locked, and will unlock it
+   regardless of return value. */
+static GstFlowReturn
+gst_ogg_demux_seek_back_after_push_duration_check_unlock (GstOggDemux * ogg)
+{
+  GstEvent *event;
+
+  /* Get the delayed event, if any */
+  event = ogg->push_mode_seek_delayed_event;
+  ogg->push_mode_seek_delayed_event = NULL;
+
+  ogg->push_state = PUSH_PLAYING;
+
+  GST_PUSH_UNLOCK (ogg);
+
+  if (event) {
+    /* If there is one, perform it */
+    gst_ogg_demux_perform_seek_push (ogg, event);
+  } else {
+    /* If there wasn't, seek back at start to start normal playback */
+    GST_INFO_OBJECT (ogg, "Seeking back to 0 after duration check");
+    event = gst_event_new_seek (1.0, GST_FORMAT_BYTES,
+        GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
+        GST_SEEK_TYPE_SET, 1, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+    if (!gst_pad_push_event (ogg->sinkpad, event)) {
+      GST_WARNING_OBJECT (ogg, "Failed seeking back to start");
+      return GST_FLOW_ERROR;
+    }
+  }
+
+  return GST_FLOW_OK;
+}
+
+static gboolean
+gst_ogg_pad_handle_push_mode_state (GstOggPad * pad, ogg_page * page)
+{
+  GstOggDemux *ogg = pad->ogg;
+  ogg_int64_t granpos = ogg_page_granulepos (page);
+
+  GST_PUSH_LOCK (ogg);
+  if (granpos >= 0) {
+    if (ogg->push_start_time == GST_CLOCK_TIME_NONE) {
+      ogg->push_start_time =
+          gst_ogg_stream_get_start_time_for_granulepos (&pad->map, granpos);
+      GST_DEBUG_OBJECT (ogg, "Stream start time: %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (ogg->push_start_time));
+    }
+    ogg->push_time_offset =
+        gst_ogg_stream_get_end_time_for_granulepos (&pad->map, granpos);
+    if (ogg->push_time_offset > 0) {
+      GST_DEBUG_OBJECT (ogg, "Bitrate since start: %" G_GUINT64_FORMAT,
+          gst_util_uint64_scale (ogg->push_byte_offset, 8 * GST_SECOND,
+              ogg->push_time_offset));
+    }
+
+    if (ogg->push_state == PUSH_DURATION) {
+      GstClockTime t =
+          gst_ogg_stream_get_end_time_for_granulepos (&pad->map, granpos);
+
+      if (ogg->total_time == GST_CLOCK_TIME_NONE || t > ogg->total_time) {
+        GST_DEBUG_OBJECT (ogg, "New total time: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (t));
+        ogg->total_time = t;
+        ogg->push_time_length = t;
+      }
+
+      /* If we were determining the duration of the stream, we're now done,
+         and can get back to sending the original event we delayed.
+         We stop a bit before the end of the stream, as if we get a EOS
+         event and there is a queue2 upstream (such as when using playbin2),
+         it will pause the task *after* we come back from the EOS handler,
+         so we cannot prevent the pausing by issuing a seek. */
+      if (ogg->push_byte_offset + EOS_AVOIDANCE_THRESHOLD >=
+          ogg->push_byte_length) {
+        GstMessage *message;
+        GstFlowReturn res;
+
+        /* tell the pipeline we've just found out the duration */
+        GST_INFO_OBJECT (ogg, "New duration found: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (ogg->total_time));
+        message =
+            gst_message_new_duration (GST_OBJECT (ogg), GST_FORMAT_TIME,
+            ogg->total_time);
+        gst_element_post_message (GST_ELEMENT (ogg), message);
+
+        GST_DEBUG_OBJECT (ogg,
+            "We're close enough to the end, and we're scared "
+            "to get too close, seeking back to start");
+
+        res = gst_ogg_demux_seek_back_after_push_duration_check_unlock (ogg);
+        if (res != GST_FLOW_OK)
+          return res;
+        return GST_FLOW_SKIP_PUSH;
+      } else {
+        GST_PUSH_UNLOCK (ogg);
+      }
+      return GST_FLOW_SKIP_PUSH;
+    }
+  }
+
+  /* if we're seeking, look at time, and decide what to do */
+  if (ogg->push_state != PUSH_PLAYING && ogg->push_state != PUSH_LINEAR2) {
+    GstClockTime t;
+    gint64 best = -1;
+    GstEvent *sevent;
+    int res;
+    gboolean close_enough;
+
+    /* ignore -1 granpos when seeking, we want to sync on a real granpos */
+    if (granpos < 0) {
+      GST_PUSH_UNLOCK (ogg);
+      if (ogg_stream_pagein (&pad->map.stream, page) != 0)
+        goto choked;
+      return GST_FLOW_SKIP_PUSH;
+    }
+
+    t = gst_ogg_stream_get_end_time_for_granulepos (&pad->map, granpos);
+
+    if (ogg->push_state == PUSH_BISECT1 || ogg->push_state == PUSH_BISECT2) {
+      GstClockTime sync_time;
+
+      if (pad->push_sync_time == GST_CLOCK_TIME_NONE)
+        pad->push_sync_time = t;
+      GST_DEBUG_OBJECT (ogg, "Got timestamp %" GST_TIME_FORMAT " for %s",
+          GST_TIME_ARGS (t), gst_ogg_stream_get_media_type (&pad->map));
+      sync_time = gst_ogg_demux_collect_sync_time (ogg, ogg->building_chain);
+      if (sync_time == GST_CLOCK_TIME_NONE) {
+        GST_PUSH_UNLOCK (ogg);
+        GST_DEBUG_OBJECT (ogg,
+            "Not enough timing info collected for sync, waiting for more");
+        if (ogg_stream_pagein (&pad->map.stream, page) != 0)
+          goto choked;
+        return GST_FLOW_SKIP_PUSH;
+      }
+      ogg->push_last_seek_time = sync_time;
+
+      GST_DEBUG_OBJECT (ogg,
+          "Bisection just seeked at %" G_GINT64_FORMAT ", time %"
+          GST_TIME_FORMAT ", target was %" GST_TIME_FORMAT,
+          ogg->push_last_seek_offset,
+          GST_TIME_ARGS (ogg->push_last_seek_time),
+          GST_TIME_ARGS (ogg->push_seek_time_target));
+
+      if (ogg->push_time1 != GST_CLOCK_TIME_NONE) {
+        GST_DEBUG_OBJECT (ogg,
+            "Interval was %" G_GINT64_FORMAT " - %" G_GINT64_FORMAT " (%"
+            G_GINT64_FORMAT "), time %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT
+            " (%" GST_TIME_FORMAT ")", ogg->push_offset0, ogg->push_offset1,
+            ogg->push_offset1 - ogg->push_offset0,
+            GST_TIME_ARGS (ogg->push_time0), GST_TIME_ARGS (ogg->push_time1),
+            GST_TIME_ARGS (ogg->push_time1 - ogg->push_time0));
+      } else {
+        GST_DEBUG_OBJECT (ogg,
+            "Interval was %" G_GINT64_FORMAT " - %" G_GINT64_FORMAT " (%"
+            G_GINT64_FORMAT "), time %" GST_TIME_FORMAT " - unknown",
+            ogg->push_offset0, ogg->push_offset1,
+            ogg->push_offset1 - ogg->push_offset0,
+            GST_TIME_ARGS (ogg->push_time0));
+      }
+
+      gst_ogg_demux_setup_bisection_bounds (ogg);
+
+      best = gst_ogg_demux_estimate_bisection_target (ogg);
+
+      if (ogg->push_seek_time_target == 0) {
+        GST_DEBUG_OBJECT (ogg, "Seeking to 0, deemed close enough");
+        close_enough = (ogg->push_last_seek_time == 0);
+      } else {
+        /* TODO: make this dependent on framerate ? */
+        GstClockTime threshold = GST_SECOND / 2;
+
+        /* We want to be within half a second before the target */
+        if (threshold > ogg->push_seek_time_target)
+          threshold = ogg->push_seek_time_target;
+        close_enough = ogg->push_last_seek_time < ogg->push_seek_time_target
+            && ogg->push_last_seek_time >=
+            ogg->push_seek_time_target - threshold;
+        GST_DEBUG_OBJECT (ogg,
+            "testing if we're close enough: %" GST_TIME_FORMAT " <= %"
+            GST_TIME_FORMAT " < %" GST_TIME_FORMAT " ? %s",
+            GST_TIME_ARGS (ogg->push_seek_time_target - threshold),
+            GST_TIME_ARGS (ogg->push_last_seek_time),
+            GST_TIME_ARGS (ogg->push_seek_time_target),
+            close_enough ? "Yes" : "No");
+      }
+
+      if (close_enough || best == ogg->push_last_seek_offset) {
+        if (ogg->push_state == PUSH_BISECT1) {
+          /* we now know the time segment we'll have to search for
+             the second bisection */
+          ogg->push_time0 = ogg->push_start_time;
+          ogg->push_offset0 = 0;
+
+          GST_DEBUG_OBJECT (ogg,
+              "Seek to %" GST_TIME_FORMAT
+              " (%lx) done, now gathering pages for all non-sparse streams",
+              GST_TIME_ARGS (ogg->push_seek_time_target), (long) granpos);
+          ogg->push_state = PUSH_LINEAR1;
+        } else {
+          /* If we're asked for an accurate seek, we'll go forward till
+             we get to the original seek target time, else we'll just drop
+             here at the keyframe */
+          if (ogg->push_seek_flags & GST_SEEK_FLAG_ACCURATE) {
+            GST_INFO_OBJECT (ogg,
+                "Seek to keyframe at %" GST_TIME_FORMAT " done (we're at %"
+                GST_TIME_FORMAT "), skipping to original target (%"
+                GST_TIME_FORMAT ")",
+                GST_TIME_ARGS (ogg->push_seek_time_target),
+                GST_TIME_ARGS (sync_time),
+                GST_TIME_ARGS (ogg->push_seek_time_original_target));
+            ogg->push_state = PUSH_LINEAR2;
+          } else {
+            GST_DEBUG_OBJECT (ogg, "Seek to keyframe done, playing");
+
+            /* we're synced to the seek target, so flush stream and stuff
+               any queued pages into the stream so we start decoding there */
+            ogg->push_state = PUSH_PLAYING;
+          }
+          GST_INFO_OBJECT (ogg, "Bisection needed %d + %d steps",
+              ogg->push_bisection_steps[0], ogg->push_bisection_steps[1]);
+        }
+      }
+    } else if (ogg->push_state == PUSH_LINEAR1) {
+      if (pad->push_kf_time == GST_CLOCK_TIME_NONE) {
+        GstClockTime earliest_keyframe_time;
+
+        gst_ogg_demux_record_keyframe_time (ogg, pad, granpos);
+        GST_DEBUG_OBJECT (ogg,
+            "Previous keyframe for %s stream at %" GST_TIME_FORMAT,
+            gst_ogg_stream_get_media_type (&pad->map),
+            GST_TIME_ARGS (pad->push_kf_time));
+        earliest_keyframe_time = gst_ogg_demux_get_earliest_keyframe_time (ogg);
+        if (earliest_keyframe_time != GST_CLOCK_TIME_NONE) {
+          GST_DEBUG_OBJECT (ogg,
+              "All non sparse streams now have a previous keyframe time,"
+              "bisecting again to %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (earliest_keyframe_time));
+          ogg->push_seek_time_target = earliest_keyframe_time;
+
+          ogg->push_state = PUSH_BISECT2;
+          best = gst_ogg_demux_estimate_bisection_target (ogg);
+        }
+      }
+    }
+
+    if (ogg->push_state == PUSH_BISECT1 || ogg->push_state == PUSH_BISECT2) {
+      gint i;
+
+      ogg_sync_reset (&ogg->sync);
+      for (i = 0; i < ogg->building_chain->streams->len; i++) {
+        GstOggPad *pad =
+            g_array_index (ogg->building_chain->streams, GstOggPad *, i);
+
+        pad->push_sync_time = GST_CLOCK_TIME_NONE;
+        ogg_stream_reset (&pad->map.stream);
+      }
+
+      GST_DEBUG_OBJECT (ogg,
+          "seeking to %" G_GINT64_FORMAT " - %" G_GINT64_FORMAT, best,
+          (gint64) - 1);
+      /* do seek */
+      g_assert (best != -1);
+      ogg->push_bisection_steps[ogg->push_state == PUSH_BISECT2 ? 1 : 0]++;
+      sevent =
+          gst_event_new_seek (ogg->push_seek_rate, GST_FORMAT_BYTES,
+          ogg->push_seek_flags, GST_SEEK_TYPE_SET, best,
+          GST_SEEK_TYPE_NONE, -1);
+
+      GST_PUSH_UNLOCK (ogg);
+      res = gst_pad_push_event (ogg->sinkpad, sevent);
+      if (!res) {
+        /* We failed to send the seek event, notify the pipeline */
+        GST_ELEMENT_ERROR (ogg, RESOURCE, SEEK, (NULL), ("Failed to seek"));
+        return GST_FLOW_ERROR;
+      }
+      return GST_FLOW_SKIP_PUSH;
+    }
+
+    if (ogg->push_state != PUSH_PLAYING) {
+      GST_PUSH_UNLOCK (ogg);
+      return GST_FLOW_SKIP_PUSH;
+    }
+  }
+  GST_PUSH_UNLOCK (ogg);
+
+  return GST_FLOW_OK;
+
+choked:
+  {
+    GST_WARNING_OBJECT (ogg,
+        "ogg stream choked on page (serial %08x), "
+        "resetting stream", pad->map.serialno);
+    gst_ogg_pad_reset (pad);
+    /* we continue to recover */
+    return GST_FLOW_SKIP_PUSH;
+  }
+}
+
+/* submit a page to an oggpad, this function will then submit all
+ * the packets in the page.
+ */
+static GstFlowReturn
+gst_ogg_pad_submit_page (GstOggPad * pad, ogg_page * page)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+  GstOggDemux *ogg;
+  gboolean continued = FALSE;
+
+  ogg = pad->ogg;
+
+  /* for negative rates we read pages backwards and must therefore be careful
+   * with continued pages */
+  if (ogg->segment.rate < 0.0) {
+    gint npackets;
+
+    continued = ogg_page_continued (page);
+
+    /* number of completed packets in the page */
+    npackets = ogg_page_packets (page);
+    if (!continued) {
+      /* page is not continued so it contains at least one packet start. It's
+       * possible that no packet ends on this page (npackets == 0). In that
+       * case, the next (continued) page(s) we kept contain the remainder of the
+       * packets. We mark npackets=1 to make us start decoding the pages in the
+       * remainder of the algorithm. */
+      if (npackets == 0)
+        npackets = 1;
+    }
+    GST_LOG_OBJECT (ogg, "continued: %d, %d packets", continued, npackets);
+
+    if (npackets == 0) {
+      GST_LOG_OBJECT (ogg, "no decodable packets, we need a previous page");
+      goto done;
+    }
+  }
+
+  /* keep track of time in push mode */
+  if (!ogg->pullmode) {
+    result = gst_ogg_pad_handle_push_mode_state (pad, page);
+    if (result == GST_FLOW_SKIP_PUSH)
+      return GST_FLOW_OK;
+    if (result != GST_FLOW_OK)
+      return result;
+  }
+
+  if (ogg_stream_pagein (&pad->map.stream, page) != 0)
+    goto choked;
+
+  /* flush all packets in the stream layer, this might not give a packet if
+   * the page had no packets finishing on the page (npackets == 0). */
+  result = gst_ogg_pad_stream_out (pad, 0);
+
+  if (pad->continued) {
+    ogg_packet packet;
+
+    /* now send the continued pages to the stream layer */
+    while (pad->continued) {
+      ogg_page *p = (ogg_page *) pad->continued->data;
+
+      GST_LOG_OBJECT (ogg, "submitting continued page %p", p);
+      if (ogg_stream_pagein (&pad->map.stream, p) != 0)
+        goto choked;
+
+      pad->continued = g_list_delete_link (pad->continued, pad->continued);
+
+      /* free the page */
+      gst_ogg_page_free (p);
+    }
+
+    GST_LOG_OBJECT (ogg, "flushing last continued packet");
+    /* flush 1 continued packet in the stream layer */
+    result = gst_ogg_pad_stream_out (pad, 1);
+
+    /* flush all remaining packets, we pushed them in the previous round.
+     * We don't use _reset() because we still want to get the discont when
+     * we submit a next page. */
+    while (ogg_stream_packetout (&pad->map.stream, &packet) != 0);
+  }
+
+done:
+  /* keep continued pages (only in reverse mode) */
+  if (continued) {
+    ogg_page *p = gst_ogg_page_copy (page);
+
+    GST_LOG_OBJECT (ogg, "keeping continued page %p", p);
+    pad->continued = g_list_prepend (pad->continued, p);
+  }
+
+  return result;
+
+choked:
+  {
+    GST_WARNING_OBJECT (ogg,
+        "ogg stream choked on page (serial %08x), "
+        "resetting stream", pad->map.serialno);
+    gst_ogg_pad_reset (pad);
+    /* we continue to recover */
+    return GST_FLOW_OK;
+  }
+}
+
+
+static GstOggChain *
+gst_ogg_chain_new (GstOggDemux * ogg)
+{
+  GstOggChain *chain = g_slice_new0 (GstOggChain);
+
+  GST_DEBUG_OBJECT (ogg, "creating new chain %p", chain);
+  chain->ogg = ogg;
+  chain->offset = -1;
+  chain->bytes = -1;
+  chain->have_bos = FALSE;
+  chain->streams = g_array_new (FALSE, TRUE, sizeof (GstOggPad *));
+  chain->begin_time = GST_CLOCK_TIME_NONE;
+  chain->segment_start = GST_CLOCK_TIME_NONE;
+  chain->segment_stop = GST_CLOCK_TIME_NONE;
+  chain->total_time = GST_CLOCK_TIME_NONE;
+
+  return chain;
+}
+
+static void
+gst_ogg_chain_free (GstOggChain * chain)
+{
+  gint i;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    gst_object_unref (pad);
+  }
+  g_array_free (chain->streams, TRUE);
+  g_slice_free (GstOggChain, chain);
+}
+
+static void
+gst_ogg_pad_mark_discont (GstOggPad * pad)
+{
+  pad->discont = TRUE;
+  pad->map.last_size = 0;
+}
+
+static void
+gst_ogg_chain_mark_discont (GstOggChain * chain)
+{
+  gint i;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    gst_ogg_pad_mark_discont (pad);
+  }
+}
+
+static void
+gst_ogg_chain_reset (GstOggChain * chain)
+{
+  gint i;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    gst_ogg_pad_reset (pad);
+  }
+}
+
+static GstOggPad *
+gst_ogg_chain_new_stream (GstOggChain * chain, guint32 serialno)
+{
+  GstOggPad *ret;
+  GstTagList *list;
+  gchar *name;
+
+  GST_DEBUG_OBJECT (chain->ogg,
+      "creating new stream %08x in chain %p", serialno, chain);
+
+  ret = g_object_new (GST_TYPE_OGG_PAD, NULL);
+  /* we own this one */
+  gst_object_ref_sink (ret);
+
+  GST_PAD_DIRECTION (ret) = GST_PAD_SRC;
+  gst_ogg_pad_mark_discont (ret);
+
+  ret->chain = chain;
+  ret->ogg = chain->ogg;
+
+  ret->map.serialno = serialno;
+  if (ogg_stream_init (&ret->map.stream, serialno) != 0)
+    goto init_failed;
+
+  name = g_strdup_printf ("serial_%08x", serialno);
+  gst_object_set_name (GST_OBJECT (ret), name);
+  g_free (name);
+
+  /* FIXME: either do something with it or remove it */
+  list = gst_tag_list_new ();
+  gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_SERIAL, serialno,
+      NULL);
+  gst_tag_list_free (list);
+
+  GST_DEBUG_OBJECT (chain->ogg,
+      "created new ogg src %p for stream with serial %08x", ret, serialno);
+
+  g_array_append_val (chain->streams, ret);
+  gst_pad_set_active (GST_PAD_CAST (ret), TRUE);
+
+  return ret;
+
+  /* ERRORS */
+init_failed:
+  {
+    GST_ERROR ("Could not initialize ogg_stream struct for serial %08x",
+        serialno);
+    gst_object_unref (ret);
+    return NULL;
+  }
+}
+
+static GstOggPad *
+gst_ogg_chain_get_stream (GstOggChain * chain, guint32 serialno)
+{
+  gint i;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.serialno == serialno)
+      return pad;
+  }
+  return NULL;
+}
+
+static gboolean
+gst_ogg_chain_has_stream (GstOggChain * chain, guint32 serialno)
+{
+  return gst_ogg_chain_get_stream (chain, serialno) != NULL;
+}
+
+/* signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0
+      /* FILL ME */
+};
+
+static GstStaticPadTemplate ogg_demux_src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src_%d",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate ogg_demux_sink_template_factory =
+    GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/ogg; application/x-annodex")
+    );
+
+static void gst_ogg_demux_finalize (GObject * object);
+
+static GstFlowReturn gst_ogg_demux_read_chain (GstOggDemux * ogg,
+    GstOggChain ** chain);
+static GstFlowReturn gst_ogg_demux_read_end_chain (GstOggDemux * ogg,
+    GstOggChain * chain);
+
+static gboolean gst_ogg_demux_sink_event (GstPad * pad, GstEvent * event);
+static void gst_ogg_demux_loop (GstOggPad * pad);
+static GstFlowReturn gst_ogg_demux_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_ogg_demux_sink_activate (GstPad * sinkpad);
+static gboolean gst_ogg_demux_sink_activate_pull (GstPad * sinkpad,
+    gboolean active);
+static gboolean gst_ogg_demux_sink_activate_push (GstPad * sinkpad,
+    gboolean active);
+static GstStateChangeReturn gst_ogg_demux_change_state (GstElement * element,
+    GstStateChange transition);
+
+static void gst_ogg_print (GstOggDemux * demux);
+
+#define gst_ogg_demux_parent_class parent_class
+G_DEFINE_TYPE (GstOggDemux, gst_ogg_demux, GST_TYPE_ELEMENT);
+
+static void
+gst_ogg_demux_class_init (GstOggDemuxClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Ogg demuxer", "Codec/Demuxer",
+      "demux ogg streams (info about ogg: http://xiph.org)",
+      "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&ogg_demux_sink_template_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&ogg_demux_src_template_factory));
+
+  gstelement_class->change_state = gst_ogg_demux_change_state;
+  gstelement_class->send_event = gst_ogg_demux_receive_event;
+
+  gobject_class->finalize = gst_ogg_demux_finalize;
+}
+
+static void
+gst_ogg_demux_init (GstOggDemux * ogg)
+{
+  /* create the sink pad */
+  ogg->sinkpad =
+      gst_pad_new_from_static_template (&ogg_demux_sink_template_factory,
+      "sink");
+
+  gst_pad_set_event_function (ogg->sinkpad, gst_ogg_demux_sink_event);
+  gst_pad_set_chain_function (ogg->sinkpad, gst_ogg_demux_chain);
+  gst_pad_set_activate_function (ogg->sinkpad, gst_ogg_demux_sink_activate);
+  gst_pad_set_activatepull_function (ogg->sinkpad,
+      gst_ogg_demux_sink_activate_pull);
+  gst_pad_set_activatepush_function (ogg->sinkpad,
+      gst_ogg_demux_sink_activate_push);
+  gst_element_add_pad (GST_ELEMENT (ogg), ogg->sinkpad);
+
+  ogg->chain_lock = g_mutex_new ();
+  ogg->push_lock = g_mutex_new ();
+  ogg->chains = g_array_new (FALSE, TRUE, sizeof (GstOggChain *));
+
+  ogg->newsegment = NULL;
+}
+
+static void
+gst_ogg_demux_finalize (GObject * object)
+{
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (object);
+
+  g_array_free (ogg->chains, TRUE);
+  g_mutex_free (ogg->chain_lock);
+  g_mutex_free (ogg->push_lock);
+  ogg_sync_clear (&ogg->sync);
+
+  if (ogg->newsegment)
+    gst_event_unref (ogg->newsegment);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_ogg_demux_reset_streams (GstOggDemux * ogg)
+{
+  GstOggChain *chain;
+  guint i;
+
+  chain = ogg->current_chain;
+  if (chain == NULL)
+    return;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, i);
+
+    stream->start_time = -1;
+    stream->map.accumulated_granule = 0;
+  }
+  ogg->building_chain = chain;
+  GST_DEBUG_OBJECT (ogg, "Resetting current chain");
+  ogg->current_chain = NULL;
+  ogg->resync = TRUE;
+}
+
+static gboolean
+gst_ogg_demux_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res;
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      res = gst_ogg_demux_send_event (ogg, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      GST_DEBUG_OBJECT (ogg, "got a flush stop event");
+      ogg_sync_reset (&ogg->sync);
+      res = gst_ogg_demux_send_event (ogg, event);
+      if (ogg->pullmode || ogg->push_state != PUSH_DURATION) {
+        /* it's starting to feel reaaaally dirty :(
+           if we're on a spliced seek to get duration, don't reset streams,
+           we'll need them for the delayed seek */
+        gst_ogg_demux_reset_streams (ogg);
+      }
+      break;
+    case GST_EVENT_SEGMENT:
+      GST_DEBUG_OBJECT (ogg, "got a new segment event");
+      {
+        GstSegment segment;
+
+        gst_event_copy_segment (event, &segment);
+
+        if (segment.format == GST_FORMAT_BYTES) {
+          GST_PUSH_LOCK (ogg);
+          ogg->push_byte_offset = segment.start;
+          ogg->push_last_seek_offset = segment.start;
+          GST_PUSH_UNLOCK (ogg);
+        } else {
+          GST_WARNING_OBJECT (ogg, "unexpected segment format: %s",
+              gst_format_get_name (segment.format));
+        }
+      }
+      gst_event_unref (event);
+      res = TRUE;
+      break;
+    case GST_EVENT_EOS:
+    {
+      GST_DEBUG_OBJECT (ogg, "got an EOS event");
+#if 0
+      /* This would be what is needed (recover from EOS by going on to
+         the next step (issue the delayed seek)), but it does not work
+         if there is a queue2 upstream - see more details comment in
+         gst_ogg_pad_submit_page.
+         If I could find a way to bypass queue2 behavior, this should
+         be enabled. */
+      GST_PUSH_LOCK (ogg);
+      if (ogg->push_state == PUSH_DURATION) {
+        GST_DEBUG_OBJECT (ogg, "Got EOS while determining length");
+        res = gst_ogg_demux_seek_back_after_push_duration_check_unlock (ogg);
+        if (res != GST_FLOW_OK) {
+          GST_DEBUG_OBJECT (ogg, "Error seeking back after duration check: %d",
+              res);
+        }
+        break;
+      }
+      GST_PUSH_UNLOCK (ogg);
+#endif
+      res = gst_ogg_demux_send_event (ogg, event);
+      if (ogg->current_chain == NULL) {
+        GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL),
+            ("can't get first chain"));
+      }
+      break;
+    }
+    default:
+      res = gst_ogg_demux_send_event (ogg, event);
+      break;
+  }
+  gst_object_unref (ogg);
+
+  return res;
+}
+
+/* submit the given buffer to the ogg sync */
+static GstFlowReturn
+gst_ogg_demux_submit_buffer (GstOggDemux * ogg, GstBuffer * buffer)
+{
+  gsize size;
+  gchar *oggbuffer;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  size = gst_buffer_get_size (buffer);
+  GST_DEBUG_OBJECT (ogg, "submitting %" G_GSIZE_FORMAT " bytes", size);
+  if (G_UNLIKELY (size == 0))
+    goto done;
+
+  oggbuffer = ogg_sync_buffer (&ogg->sync, size);
+  if (G_UNLIKELY (oggbuffer == NULL))
+    goto no_buffer;
+
+  gst_buffer_extract (buffer, 0, oggbuffer, size);
+
+  if (G_UNLIKELY (ogg_sync_wrote (&ogg->sync, size) < 0))
+    goto write_failed;
+
+  if (!ogg->pullmode) {
+    GST_PUSH_LOCK (ogg);
+    ogg->push_byte_offset += size;
+    GST_PUSH_UNLOCK (ogg);
+  }
+
+done:
+  gst_buffer_unref (buffer);
+
+  return ret;
+
+  /* ERRORS */
+no_buffer:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DECODE,
+        (NULL), ("failed to get ogg sync buffer"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+write_failed:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DECODE, (NULL),
+        ("failed to write %" G_GSIZE_FORMAT " bytes to the sync buffer", size));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+/* in random access mode this code updates the current read position
+ * and resets the ogg sync buffer so that the next read will happen
+ * from this new location.
+ */
+static void
+gst_ogg_demux_seek (GstOggDemux * ogg, gint64 offset)
+{
+  GST_LOG_OBJECT (ogg, "seeking to %" G_GINT64_FORMAT, offset);
+
+  ogg->offset = offset;
+  ogg->read_offset = offset;
+  ogg_sync_reset (&ogg->sync);
+}
+
+/* read more data from the current offset and submit to
+ * the ogg sync layer.
+ */
+static GstFlowReturn
+gst_ogg_demux_get_data (GstOggDemux * ogg, gint64 end_offset)
+{
+  GstFlowReturn ret;
+  GstBuffer *buffer;
+
+  GST_LOG_OBJECT (ogg,
+      "get data %" G_GINT64_FORMAT " %" G_GINT64_FORMAT " %" G_GINT64_FORMAT,
+      ogg->read_offset, ogg->length, end_offset);
+
+  if (end_offset > 0 && ogg->read_offset >= end_offset)
+    goto boundary_reached;
+
+  if (ogg->read_offset == ogg->length)
+    goto eos;
+
+  ret = gst_pad_pull_range (ogg->sinkpad, ogg->read_offset, CHUNKSIZE, &buffer);
+  if (ret != GST_FLOW_OK)
+    goto error;
+
+  ogg->read_offset += gst_buffer_get_size (buffer);
+
+  ret = gst_ogg_demux_submit_buffer (ogg, buffer);
+
+  return ret;
+
+  /* ERROR */
+boundary_reached:
+  {
+    GST_LOG_OBJECT (ogg, "reached boundary");
+    return GST_FLOW_LIMIT;
+  }
+eos:
+  {
+    GST_LOG_OBJECT (ogg, "reached EOS");
+    return GST_FLOW_UNEXPECTED;
+  }
+error:
+  {
+    GST_WARNING_OBJECT (ogg, "got %d (%s) from pull range", ret,
+        gst_flow_get_name (ret));
+    return ret;
+  }
+}
+
+/* Read the next page from the current offset.
+ * boundary: number of bytes ahead we allow looking for;
+ * -1 if no boundary
+ *
+ * @offset will contain the offset the next page starts at when this function
+ * returns GST_FLOW_OK.
+ *
+ * GST_FLOW_UNEXPECTED is returned on EOS.
+ *
+ * GST_FLOW_LIMIT is returned when we did not find a page before the
+ * boundary. If @boundary is -1, this is never returned.
+ *
+ * Any other error returned while retrieving data from the peer is returned as
+ * is.
+ */
+static GstFlowReturn
+gst_ogg_demux_get_next_page (GstOggDemux * ogg, ogg_page * og,
+    gint64 boundary, gint64 * offset)
+{
+  gint64 end_offset = -1;
+  GstFlowReturn ret;
+
+  GST_LOG_OBJECT (ogg,
+      "get next page, current offset %" G_GINT64_FORMAT ", bytes boundary %"
+      G_GINT64_FORMAT, ogg->offset, boundary);
+
+  if (boundary >= 0)
+    end_offset = ogg->offset + boundary;
+
+  while (TRUE) {
+    glong more;
+
+    if (end_offset > 0 && ogg->offset >= end_offset)
+      goto boundary_reached;
+
+    more = ogg_sync_pageseek (&ogg->sync, og);
+
+    GST_LOG_OBJECT (ogg, "pageseek gave %ld", more);
+
+    if (more < 0) {
+      /* skipped n bytes */
+      ogg->offset -= more;
+      GST_LOG_OBJECT (ogg, "skipped %ld bytes, offset %" G_GINT64_FORMAT,
+          more, ogg->offset);
+    } else if (more == 0) {
+      /* we need more data */
+      if (boundary == 0)
+        goto boundary_reached;
+
+      GST_LOG_OBJECT (ogg, "need more data");
+      ret = gst_ogg_demux_get_data (ogg, end_offset);
+      if (ret != GST_FLOW_OK)
+        break;
+    } else {
+      gint64 res_offset = ogg->offset;
+
+      /* got a page.  Return the offset at the page beginning,
+         advance the internal offset past the page end */
+      if (offset)
+        *offset = res_offset;
+      ret = GST_FLOW_OK;
+
+      ogg->offset += more;
+
+      GST_LOG_OBJECT (ogg,
+          "got page at %" G_GINT64_FORMAT ", serial %08x, end at %"
+          G_GINT64_FORMAT ", granule %" G_GINT64_FORMAT, res_offset,
+          ogg_page_serialno (og), ogg->offset,
+          (gint64) ogg_page_granulepos (og));
+      break;
+    }
+  }
+  GST_LOG_OBJECT (ogg, "returning %d", ret);
+
+  return ret;
+
+  /* ERRORS */
+boundary_reached:
+  {
+    GST_LOG_OBJECT (ogg,
+        "offset %" G_GINT64_FORMAT " >= end_offset %" G_GINT64_FORMAT,
+        ogg->offset, end_offset);
+    return GST_FLOW_LIMIT;
+  }
+}
+
+/* from the current offset, find the previous page, seeking backwards
+ * until we find the page. 
+ */
+static GstFlowReturn
+gst_ogg_demux_get_prev_page (GstOggDemux * ogg, ogg_page * og, gint64 * offset)
+{
+  GstFlowReturn ret;
+  gint64 begin = ogg->offset;
+  gint64 end = begin;
+  gint64 cur_offset = -1;
+
+  GST_LOG_OBJECT (ogg, "getting page before %" G_GINT64_FORMAT, begin);
+
+  while (cur_offset == -1) {
+    begin -= CHUNKSIZE;
+    if (begin < 0)
+      begin = 0;
+
+    /* seek CHUNKSIZE back */
+    gst_ogg_demux_seek (ogg, begin);
+
+    /* now continue reading until we run out of data, if we find a page
+     * start, we save it. It might not be the final page as there could be
+     * another page after this one. */
+    while (ogg->offset < end) {
+      gint64 new_offset;
+
+      ret =
+          gst_ogg_demux_get_next_page (ogg, og, end - ogg->offset, &new_offset);
+      /* we hit the upper limit, offset contains the last page start */
+      if (ret == GST_FLOW_LIMIT) {
+        GST_LOG_OBJECT (ogg, "hit limit");
+        break;
+      }
+      /* something went wrong */
+      if (ret == GST_FLOW_UNEXPECTED) {
+        new_offset = 0;
+        GST_LOG_OBJECT (ogg, "got unexpected");
+      } else if (ret != GST_FLOW_OK) {
+        GST_LOG_OBJECT (ogg, "got error %d", ret);
+        return ret;
+      }
+
+      GST_LOG_OBJECT (ogg, "found page at %" G_GINT64_FORMAT, new_offset);
+
+      /* offset is next page start */
+      cur_offset = new_offset;
+    }
+  }
+
+  GST_LOG_OBJECT (ogg, "found previous page at %" G_GINT64_FORMAT, cur_offset);
+
+  /* we have the offset.  Actually snork and hold the page now */
+  gst_ogg_demux_seek (ogg, cur_offset);
+  ret = gst_ogg_demux_get_next_page (ogg, og, -1, NULL);
+  if (ret != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (ogg, "can't get last page at %" G_GINT64_FORMAT,
+        cur_offset);
+    /* this shouldn't be possible */
+    return ret;
+  }
+
+  if (offset)
+    *offset = cur_offset;
+
+  return ret;
+}
+
+static gboolean
+gst_ogg_demux_deactivate_current_chain (GstOggDemux * ogg)
+{
+  gint i;
+  GstOggChain *chain = ogg->current_chain;
+
+  if (chain == NULL)
+    return TRUE;
+
+  GST_DEBUG_OBJECT (ogg, "deactivating chain %p", chain);
+
+  /* send EOS on all the pads */
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+    GstEvent *event;
+
+    if (!pad->added)
+      continue;
+
+    event = gst_event_new_eos ();
+    gst_event_set_seqnum (event, ogg->seqnum);
+    gst_pad_push_event (GST_PAD_CAST (pad), event);
+
+    GST_DEBUG_OBJECT (ogg, "removing pad %" GST_PTR_FORMAT, pad);
+
+    /* deactivate first */
+    gst_pad_set_active (GST_PAD_CAST (pad), FALSE);
+
+    gst_element_remove_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad));
+
+    pad->added = FALSE;
+  }
+  /* With push mode seeking implemented, we can now seek back to the chain,
+     so we do not destroy it */
+  GST_DEBUG_OBJECT (ogg, "Resetting current chain");
+  ogg->current_chain = NULL;
+
+  return TRUE;
+}
+
+GstCaps *
+gst_ogg_demux_set_header_on_caps (GstOggDemux * ogg, GstCaps * caps,
+    GList * headers)
+{
+  GstStructure *structure;
+  GValue array = { 0 };
+
+  GST_LOG_OBJECT (ogg, "caps: %" GST_PTR_FORMAT, caps);
+
+  if (G_UNLIKELY (!caps))
+    return NULL;
+  if (G_UNLIKELY (!headers))
+    return NULL;
+
+  caps = gst_caps_make_writable (caps);
+  structure = gst_caps_get_structure (caps, 0);
+
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  while (headers) {
+    GValue value = { 0 };
+    GstBuffer *buffer;
+    ogg_packet *op = headers->data;
+    g_assert (op);
+    buffer = gst_buffer_new_and_alloc (op->bytes);
+    gst_buffer_fill (buffer, 0, op->packet, op->bytes);
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_IN_CAPS);
+    g_value_init (&value, GST_TYPE_BUFFER);
+    gst_value_take_buffer (&value, buffer);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+    headers = headers->next;
+  }
+
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&array);
+  GST_LOG_OBJECT (ogg, "here are the newly set caps: %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static void
+gst_ogg_demux_push_queued_buffers (GstOggDemux * ogg, GstOggPad * pad)
+{
+  GList *walk;
+
+  /* push queued packets */
+  for (walk = pad->map.queued; walk; walk = g_list_next (walk)) {
+    ogg_packet *p = walk->data;
+
+    gst_ogg_demux_chain_peer (pad, p, TRUE);
+    _ogg_packet_free (p);
+  }
+  /* and free the queued buffers */
+  g_list_free (pad->map.queued);
+  pad->map.queued = NULL;
+}
+
+static gboolean
+gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain,
+    GstEvent * event)
+{
+  gint i;
+  gint bitrate, idx_bitrate;
+
+  g_return_val_if_fail (chain != NULL, FALSE);
+
+  if (chain == ogg->current_chain) {
+    if (event)
+      gst_event_unref (event);
+
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+      gst_ogg_demux_push_queued_buffers (ogg, pad);
+    }
+    return TRUE;
+  }
+
+
+  GST_DEBUG_OBJECT (ogg, "activating chain %p", chain);
+
+  bitrate = idx_bitrate = 0;
+
+  /* first add the pads */
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad;
+
+    pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.idx_bitrate)
+      idx_bitrate = MAX (idx_bitrate, pad->map.idx_bitrate);
+
+    bitrate += pad->map.bitrate;
+
+    /* mark discont */
+    gst_ogg_pad_mark_discont (pad);
+    pad->last_ret = GST_FLOW_OK;
+
+    if (pad->map.is_skeleton || pad->added
+        || !gst_pad_has_current_caps (GST_PAD_CAST (pad)))
+      continue;
+
+    GST_DEBUG_OBJECT (ogg, "adding pad %" GST_PTR_FORMAT, pad);
+
+    /* activate first */
+    gst_pad_set_active (GST_PAD_CAST (pad), TRUE);
+
+    gst_element_add_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad));
+    pad->added = TRUE;
+  }
+  /* prefer the index bitrate over the ones encoded in the streams */
+  ogg->bitrate = (idx_bitrate ? idx_bitrate : bitrate);
+
+  /* after adding the new pads, remove the old pads */
+  gst_ogg_demux_deactivate_current_chain (ogg);
+
+  GST_DEBUG_OBJECT (ogg, "Setting current chain to %p", chain);
+  ogg->current_chain = chain;
+
+  /* we are finished now */
+  gst_element_no_more_pads (GST_ELEMENT (ogg));
+
+  /* FIXME, must be sent from the streaming thread */
+  if (event) {
+    gst_ogg_demux_send_event (ogg, event);
+
+    gst_element_found_tags (GST_ELEMENT_CAST (ogg),
+        gst_tag_list_new_full (GST_TAG_CONTAINER_FORMAT, "Ogg", NULL));
+  }
+
+  GST_DEBUG_OBJECT (ogg, "starting chain");
+
+  /* then send out any headers and queued packets */
+  for (i = 0; i < chain->streams->len; i++) {
+    GList *walk;
+    GstOggPad *pad;
+
+    pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    /* FIXME also streaming thread */
+    if (pad->map.taglist) {
+      GST_DEBUG_OBJECT (ogg, "pushing tags");
+      gst_element_found_tags_for_pad (GST_ELEMENT_CAST (ogg),
+          GST_PAD_CAST (pad), pad->map.taglist);
+      pad->map.taglist = NULL;
+    }
+
+    /* Set headers on caps */
+    pad->map.caps =
+        gst_ogg_demux_set_header_on_caps (ogg, pad->map.caps, pad->map.headers);
+    gst_pad_set_caps (GST_PAD_CAST (pad), pad->map.caps);
+
+    GST_DEBUG_OBJECT (ogg, "pushing headers");
+    /* push headers */
+    for (walk = pad->map.headers; walk; walk = g_list_next (walk)) {
+      ogg_packet *p = walk->data;
+
+      gst_ogg_demux_chain_peer (pad, p, TRUE);
+    }
+
+    GST_DEBUG_OBJECT (ogg, "pushing queued buffers");
+    gst_ogg_demux_push_queued_buffers (ogg, pad);
+  }
+  return TRUE;
+}
+
+static gboolean
+do_binary_search (GstOggDemux * ogg, GstOggChain * chain, gint64 begin,
+    gint64 end, gint64 begintime, gint64 endtime, gint64 target,
+    gint64 * offset)
+{
+  gint64 best;
+  GstFlowReturn ret;
+  gint64 result = 0;
+
+  best = begin;
+
+  GST_DEBUG_OBJECT (ogg,
+      "chain offset %" G_GINT64_FORMAT ", end offset %" G_GINT64_FORMAT,
+      begin, end);
+  GST_DEBUG_OBJECT (ogg,
+      "chain begin time %" GST_TIME_FORMAT ", end time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (begintime), GST_TIME_ARGS (endtime));
+  GST_DEBUG_OBJECT (ogg, "target %" GST_TIME_FORMAT, GST_TIME_ARGS (target));
+
+  /* perform the seek */
+  while (begin < end) {
+    gint64 bisect;
+
+    if ((end - begin < CHUNKSIZE) || (endtime == begintime)) {
+      bisect = begin;
+    } else {
+      /* take a (pretty decent) guess, avoiding overflow */
+      gint64 rate = (end - begin) * GST_MSECOND / (endtime - begintime);
+
+      bisect = (target - begintime) / GST_MSECOND * rate + begin - CHUNKSIZE;
+
+      if (bisect <= begin)
+        bisect = begin;
+      GST_DEBUG_OBJECT (ogg, "Initial guess: %" G_GINT64_FORMAT, bisect);
+    }
+    gst_ogg_demux_seek (ogg, bisect);
+
+    while (begin < end) {
+      ogg_page og;
+
+      GST_DEBUG_OBJECT (ogg,
+          "after seek, bisect %" G_GINT64_FORMAT ", begin %" G_GINT64_FORMAT
+          ", end %" G_GINT64_FORMAT, bisect, begin, end);
+
+      ret = gst_ogg_demux_get_next_page (ogg, &og, end - ogg->offset, &result);
+      GST_LOG_OBJECT (ogg, "looking for next page returned %" G_GINT64_FORMAT,
+          result);
+
+      if (ret == GST_FLOW_LIMIT) {
+        /* we hit the upper limit, go back a bit */
+        if (bisect <= begin + 1) {
+          end = begin;          /* found it */
+        } else {
+          if (bisect == 0)
+            goto seek_error;
+
+          bisect -= CHUNKSIZE;
+          if (bisect <= begin)
+            bisect = begin + 1;
+
+          gst_ogg_demux_seek (ogg, bisect);
+        }
+      } else if (ret == GST_FLOW_OK) {
+        /* found offset of next ogg page */
+        gint64 granulepos;
+        GstClockTime granuletime;
+        GstOggPad *pad;
+
+        /* get the granulepos */
+        GST_LOG_OBJECT (ogg, "found next ogg page at %" G_GINT64_FORMAT,
+            result);
+        granulepos = ogg_page_granulepos (&og);
+        if (granulepos == -1) {
+          GST_LOG_OBJECT (ogg, "granulepos of next page is -1");
+          continue;
+        }
+
+        /* get the stream */
+        pad = gst_ogg_chain_get_stream (chain, ogg_page_serialno (&og));
+        if (pad == NULL || pad->map.is_skeleton)
+          continue;
+
+        /* convert granulepos to time */
+        granuletime = gst_ogg_stream_get_end_time_for_granulepos (&pad->map,
+            granulepos);
+        if (granuletime < pad->start_time)
+          continue;
+
+        GST_LOG_OBJECT (ogg, "granulepos %" G_GINT64_FORMAT " maps to time %"
+            GST_TIME_FORMAT, granulepos, GST_TIME_ARGS (granuletime));
+
+        granuletime -= pad->start_time;
+        granuletime += chain->begin_time;
+
+        GST_DEBUG_OBJECT (ogg,
+            "found page with granule %" G_GINT64_FORMAT " and time %"
+            GST_TIME_FORMAT, granulepos, GST_TIME_ARGS (granuletime));
+
+        if (granuletime < target) {
+          best = result;        /* raw offset of packet with granulepos */
+          begin = ogg->offset;  /* raw offset of next page */
+          begintime = granuletime;
+
+          bisect = begin;       /* *not* begin + 1 */
+        } else {
+          if (bisect <= begin + 1) {
+            end = begin;        /* found it */
+          } else {
+            if (end == ogg->offset) {   /* we're pretty close - we'd be stuck in */
+              end = result;
+              bisect -= CHUNKSIZE;      /* an endless loop otherwise. */
+              if (bisect <= begin)
+                bisect = begin + 1;
+              gst_ogg_demux_seek (ogg, bisect);
+            } else {
+              end = result;
+              endtime = granuletime;
+              break;
+            }
+          }
+        }
+      } else
+        goto seek_error;
+    }
+  }
+  GST_DEBUG_OBJECT (ogg, "seeking to %" G_GINT64_FORMAT, best);
+  gst_ogg_demux_seek (ogg, best);
+  *offset = best;
+
+  return TRUE;
+
+  /* ERRORS */
+seek_error:
+  {
+    GST_DEBUG_OBJECT (ogg, "got a seek error");
+    return FALSE;
+  }
+}
+
+static gboolean
+do_index_search (GstOggDemux * ogg, GstOggChain * chain, gint64 begin,
+    gint64 end, gint64 begintime, gint64 endtime, gint64 target,
+    gint64 * p_offset, gint64 * p_timestamp)
+{
+  guint i;
+  guint64 timestamp, offset;
+  guint64 r_timestamp, r_offset;
+  gboolean result = FALSE;
+
+  target -= begintime;
+
+  r_offset = -1;
+  r_timestamp = -1;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    timestamp = target;
+    if (gst_ogg_map_search_index (&pad->map, TRUE, &timestamp, &offset)) {
+      GST_INFO ("found %" G_GUINT64_FORMAT " at offset %" G_GUINT64_FORMAT,
+          timestamp, offset);
+
+      if (r_offset == -1 || offset < r_offset) {
+        r_offset = offset;
+        r_timestamp = timestamp;
+      }
+      result |= TRUE;
+    }
+  }
+
+  if (p_timestamp)
+    *p_timestamp = r_timestamp;
+  if (p_offset)
+    *p_offset = r_offset;
+
+  return result;
+}
+
+/*
+ * do seek to time @position, return FALSE or chain and TRUE
+ */
+static gboolean
+gst_ogg_demux_do_seek (GstOggDemux * ogg, GstSegment * segment,
+    gboolean accurate, gboolean keyframe, GstOggChain ** rchain)
+{
+  guint64 position;
+  GstOggChain *chain = NULL;
+  gint64 begin, end;
+  gint64 begintime, endtime;
+  gint64 target, keytarget;
+  gint64 best;
+  gint64 total;
+  gint64 result = 0;
+  GstFlowReturn ret;
+  gint i, pending, len;
+  gboolean first_parsed_page = TRUE;
+
+  position = segment->position;
+
+  /* first find the chain to search in */
+  total = ogg->total_time;
+  if (ogg->chains->len == 0)
+    goto no_chains;
+
+  for (i = ogg->chains->len - 1; i >= 0; i--) {
+    chain = g_array_index (ogg->chains, GstOggChain *, i);
+    total -= chain->total_time;
+    if (position >= total)
+      break;
+  }
+
+  /* first step, locate page containing the required data */
+  begin = chain->offset;
+  end = chain->end_offset;
+  begintime = chain->begin_time;
+  endtime = begintime + chain->total_time;
+  target = position - total + begintime;
+
+  if (!do_binary_search (ogg, chain, begin, end, begintime, endtime, target,
+          &best))
+    goto seek_error;
+
+  /* second step: find pages for all streams, we use the keyframe_granule to keep
+   * track of which ones we saw. If we have seen a page for each stream we can
+   * calculate the positions of each keyframe. */
+  GST_DEBUG_OBJECT (ogg, "find keyframes");
+  len = pending = chain->streams->len;
+
+  /* figure out where the keyframes are */
+  keytarget = target;
+
+  while (TRUE) {
+    ogg_page og;
+    gint64 granulepos;
+    GstOggPad *pad;
+    GstClockTime keyframe_time, granule_time;
+
+    ret = gst_ogg_demux_get_next_page (ogg, &og, end - ogg->offset, &result);
+    GST_LOG_OBJECT (ogg, "looking for next page returned %" G_GINT64_FORMAT,
+        result);
+    if (ret == GST_FLOW_LIMIT) {
+      GST_LOG_OBJECT (ogg, "reached limit");
+      break;
+    } else if (ret != GST_FLOW_OK)
+      goto seek_error;
+
+    /* get the stream */
+    pad = gst_ogg_chain_get_stream (chain, ogg_page_serialno (&og));
+    if (pad == NULL)
+      continue;
+
+    if (pad->map.is_skeleton)
+      goto next;
+
+    granulepos = ogg_page_granulepos (&og);
+    if (granulepos == -1 || granulepos == 0) {
+      GST_LOG_OBJECT (ogg, "granulepos of next page is -1");
+      continue;
+    }
+
+    /* we only do this the first time we pass here */
+    if (first_parsed_page) {
+      /* Now that we have a time reference from the page, we can check
+       * whether all streams still have pages from here on.
+       *
+       * This would be more elegant before the loop, but getting the page from
+       * there without breaking anything would be more costly */
+      granule_time = gst_ogg_stream_get_end_time_for_granulepos (&pad->map,
+          granulepos);
+      for (i = 0; i < len; i++) {
+        GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, i);
+
+        if (stream == pad)
+          /* we already know we have at least one page (the current one)
+           * for this stream */
+          continue;
+
+        if (granule_time > stream->map.total_time)
+          /* we won't encounter any more pages of this stream, so we don't
+           * try finding a key frame for it */
+          pending--;
+      }
+      first_parsed_page = FALSE;
+    }
+
+
+    /* in reverse we want to go past the page with the lower timestamp */
+    if (segment->rate < 0.0) {
+      /* get time for this pad */
+      granule_time = gst_ogg_stream_get_end_time_for_granulepos (&pad->map,
+          granulepos);
+
+      GST_LOG_OBJECT (ogg,
+          "looking at page with ts %" GST_TIME_FORMAT ", target %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (granule_time),
+          GST_TIME_ARGS (target));
+      if (granule_time < target)
+        continue;
+    }
+
+    /* we've seen this pad before */
+    if (pad->keyframe_granule != -1)
+      continue;
+
+    /* convert granule of this pad to the granule of the keyframe */
+    pad->keyframe_granule =
+        gst_ogg_stream_granulepos_to_key_granule (&pad->map, granulepos);
+    GST_LOG_OBJECT (ogg, "marking stream granule %" G_GINT64_FORMAT,
+        pad->keyframe_granule);
+
+    /* get time of the keyframe */
+    keyframe_time =
+        gst_ogg_stream_granule_to_time (&pad->map, pad->keyframe_granule);
+    GST_LOG_OBJECT (ogg,
+        "stream %08x granule time %" GST_TIME_FORMAT,
+        pad->map.serialno, GST_TIME_ARGS (keyframe_time));
+
+    /* collect smallest value */
+    if (keyframe_time != -1) {
+      keyframe_time += begintime;
+      if (keyframe_time < keytarget)
+        keytarget = keyframe_time;
+    }
+
+  next:
+    pending--;
+    if (pending == 0)
+      break;
+  }
+
+  /* for negative rates we will get to the keyframe backwards */
+  if (segment->rate < 0.0)
+    goto done;
+
+  if (keytarget != target) {
+    GST_LOG_OBJECT (ogg, "final seek to target %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (keytarget));
+
+    /* last step, seek to the location of the keyframe */
+    if (!do_binary_search (ogg, chain, begin, end, begintime, endtime,
+            keytarget, &best))
+      goto seek_error;
+  } else {
+    /* seek back to previous position */
+    GST_LOG_OBJECT (ogg, "keyframe on target");
+    gst_ogg_demux_seek (ogg, best);
+  }
+
+done:
+  if (keyframe) {
+    if (segment->rate > 0.0)
+      segment->time = keytarget;
+    segment->position = keytarget - begintime;
+  }
+
+  *rchain = chain;
+
+  return TRUE;
+
+no_chains:
+  {
+    GST_DEBUG_OBJECT (ogg, "no chains");
+    return FALSE;
+  }
+seek_error:
+  {
+    GST_DEBUG_OBJECT (ogg, "got a seek error");
+    return FALSE;
+  }
+}
+
+/* does not take ownership of the event */
+static gboolean
+gst_ogg_demux_perform_seek_pull (GstOggDemux * ogg, GstEvent * event)
+{
+  GstOggChain *chain = NULL;
+  gboolean res;
+  gboolean flush, accurate, keyframe;
+  GstFormat format;
+  gdouble rate;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  gint64 cur, stop;
+  gboolean update;
+  guint32 seqnum;
+  GstEvent *tevent;
+
+  if (event) {
+    GST_DEBUG_OBJECT (ogg, "seek with event");
+
+    gst_event_parse_seek (event, &rate, &format, &flags,
+        &cur_type, &cur, &stop_type, &stop);
+
+    /* we can only seek on time */
+    if (format != GST_FORMAT_TIME) {
+      GST_DEBUG_OBJECT (ogg, "can only seek on TIME");
+      goto error;
+    }
+    seqnum = gst_event_get_seqnum (event);
+  } else {
+    GST_DEBUG_OBJECT (ogg, "seek without event");
+
+    flags = 0;
+    rate = 1.0;
+    seqnum = gst_util_seqnum_next ();
+  }
+
+  GST_DEBUG_OBJECT (ogg, "seek, rate %g", rate);
+
+  flush = flags & GST_SEEK_FLAG_FLUSH;
+  accurate = flags & GST_SEEK_FLAG_ACCURATE;
+  keyframe = flags & GST_SEEK_FLAG_KEY_UNIT;
+
+  /* first step is to unlock the streaming thread if it is
+   * blocked in a chain call, we do this by starting the flush. because
+   * we cannot yet hold any streaming lock, we have to protect the chains
+   * with their own lock. */
+  if (flush) {
+    gint i;
+
+    tevent = gst_event_new_flush_start ();
+    gst_event_set_seqnum (tevent, seqnum);
+
+    gst_event_ref (tevent);
+    gst_pad_push_event (ogg->sinkpad, tevent);
+
+    GST_CHAIN_LOCK (ogg);
+    for (i = 0; i < ogg->chains->len; i++) {
+      GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+      gint j;
+
+      for (j = 0; j < chain->streams->len; j++) {
+        GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, j);
+
+        gst_event_ref (tevent);
+        gst_pad_push_event (GST_PAD (pad), tevent);
+      }
+    }
+    GST_CHAIN_UNLOCK (ogg);
+
+    gst_event_unref (tevent);
+  } else {
+    gst_pad_pause_task (ogg->sinkpad);
+  }
+
+  /* now grab the stream lock so that streaming cannot continue, for
+   * non flushing seeks when the element is in PAUSED this could block
+   * forever. */
+  GST_PAD_STREAM_LOCK (ogg->sinkpad);
+
+  if (event) {
+    gst_segment_do_seek (&ogg->segment, rate, format, flags,
+        cur_type, cur, stop_type, stop, &update);
+  }
+
+  GST_DEBUG_OBJECT (ogg, "segment positions set to %" GST_TIME_FORMAT "-%"
+      GST_TIME_FORMAT, GST_TIME_ARGS (ogg->segment.start),
+      GST_TIME_ARGS (ogg->segment.stop));
+
+  /* we need to stop flushing on the srcpad as we're going to use it
+   * next. We can do this as we have the STREAM lock now. */
+  if (flush) {
+    tevent = gst_event_new_flush_stop (TRUE);
+    gst_event_set_seqnum (tevent, seqnum);
+    gst_pad_push_event (ogg->sinkpad, tevent);
+  }
+
+  {
+    gint i;
+
+    /* reset all ogg streams now, need to do this from within the lock to
+     * make sure the streaming thread is not messing with the stream */
+    for (i = 0; i < ogg->chains->len; i++) {
+      GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+
+      gst_ogg_chain_reset (chain);
+    }
+  }
+
+  /* for reverse we will already seek accurately */
+  res = gst_ogg_demux_do_seek (ogg, &ogg->segment, accurate, keyframe, &chain);
+
+  /* seek failed, make sure we continue the current chain */
+  if (!res) {
+    GST_DEBUG_OBJECT (ogg, "seek failed");
+    chain = ogg->current_chain;
+  } else {
+    GST_DEBUG_OBJECT (ogg, "seek success");
+  }
+
+  if (!chain)
+    goto no_chain;
+
+  /* now we have a new position, prepare for streaming again */
+  {
+    GstEvent *event;
+    gint64 stop;
+    gint64 start;
+    gint64 position, begin_time;
+    GstSegment segment;
+
+    /* we have to send the flush to the old chain, not the new one */
+    if (flush) {
+      tevent = gst_event_new_flush_stop (TRUE);
+      gst_event_set_seqnum (tevent, seqnum);
+      gst_ogg_demux_send_event (ogg, tevent);
+    }
+
+    /* we need this to see how far inside the chain we need to start */
+    if (chain->begin_time != GST_CLOCK_TIME_NONE)
+      begin_time = chain->begin_time;
+    else
+      begin_time = 0;
+
+    /* segment.start gives the start over all chains, we calculate the amount
+     * of time into this chain we need to start */
+    start = ogg->segment.start - begin_time;
+    if (chain->segment_start != GST_CLOCK_TIME_NONE)
+      start += chain->segment_start;
+
+    if ((stop = ogg->segment.stop) == -1)
+      stop = ogg->segment.duration;
+
+    /* segment.stop gives the stop time over all chains, calculate the amount of
+     * time we need to stop in this chain */
+    if (stop != -1) {
+      if (stop > begin_time)
+        stop -= begin_time;
+      else
+        stop = 0;
+      stop += chain->segment_start;
+      /* we must stop when this chain ends and switch to the next chain to play
+       * the remainder of the segment. */
+      stop = MIN (stop, chain->segment_stop);
+    }
+
+    position = ogg->segment.position;
+    if (chain->segment_start != GST_CLOCK_TIME_NONE)
+      position += chain->segment_start;
+
+    gst_segment_copy_into (&ogg->segment, &segment);
+
+    /* create the segment event we are going to send out */
+    if (ogg->segment.rate >= 0.0) {
+      segment.start = position;
+      segment.stop = stop;
+    } else {
+      segment.start = start;
+      segment.stop = position;
+    }
+    event = gst_event_new_segment (&segment);
+    gst_event_set_seqnum (event, seqnum);
+
+    if (chain != ogg->current_chain) {
+      /* switch to different chain, send segment on new chain */
+      gst_ogg_demux_activate_chain (ogg, chain, event);
+    } else {
+      /* mark discont and send segment on current chain */
+      gst_ogg_chain_mark_discont (chain);
+      /* This event should be sent from the streaming thread (sink pad task) */
+      if (ogg->newsegment)
+        gst_event_unref (ogg->newsegment);
+      ogg->newsegment = event;
+    }
+
+    /* notify start of new segment */
+    if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+      GstMessage *message;
+
+      message = gst_message_new_segment_start (GST_OBJECT (ogg),
+          GST_FORMAT_TIME, ogg->segment.position);
+      gst_message_set_seqnum (message, seqnum);
+
+      gst_element_post_message (GST_ELEMENT (ogg), message);
+    }
+
+    ogg->seqnum = seqnum;
+    /* restart our task since it might have been stopped when we did the 
+     * flush. */
+    gst_pad_start_task (ogg->sinkpad, (GstTaskFunction) gst_ogg_demux_loop,
+        ogg->sinkpad);
+  }
+
+  /* streaming can continue now */
+  GST_PAD_STREAM_UNLOCK (ogg->sinkpad);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (ogg, "seek failed");
+    return FALSE;
+  }
+no_chain:
+  {
+    GST_DEBUG_OBJECT (ogg, "no chain to seek in");
+    GST_PAD_STREAM_UNLOCK (ogg->sinkpad);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ogg_demux_get_duration_push (GstOggDemux * ogg, int flags)
+{
+  /* In push mode, we get to the end of the stream to get the duration */
+  gint64 position;
+  GstEvent *sevent;
+  gboolean res;
+
+  /* A full Ogg page can be almost 64 KB. There's no guarantee that there'll be a
+     granpos there, but it's fairly likely */
+  position =
+      ogg->push_byte_length - DURATION_CHUNK_OFFSET - EOS_AVOIDANCE_THRESHOLD;
+  if (position < 0)
+    position = 0;
+
+  GST_DEBUG_OBJECT (ogg,
+      "Getting duration, seeking near the end, to %" G_GINT64_FORMAT, position);
+  ogg->push_state = PUSH_DURATION;
+  /* do not read the last byte */
+  sevent = gst_event_new_seek (1.0, GST_FORMAT_BYTES, flags, GST_SEEK_TYPE_SET,
+      position, GST_SEEK_TYPE_SET, ogg->push_byte_length - 1);
+  res = gst_pad_push_event (ogg->sinkpad, sevent);
+  if (res) {
+    GST_DEBUG_OBJECT (ogg, "Seek succesful");
+    return TRUE;
+  } else {
+    GST_INFO_OBJECT (ogg, "Seek failed, duration will stay unknown");
+    ogg->push_state = PUSH_PLAYING;
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ogg_demux_check_duration_push (GstOggDemux * ogg, GstSeekFlags flags,
+    GstEvent * event)
+{
+  if (ogg->push_byte_length < 0) {
+    GstPad *peer;
+
+    GST_DEBUG_OBJECT (ogg, "Trying to find byte/time length");
+    if ((peer = gst_pad_get_peer (ogg->sinkpad)) != NULL) {
+      gint64 length;
+      int res;
+
+      res = gst_pad_query_duration (peer, GST_FORMAT_BYTES, &length);
+      if (res && length > 0) {
+        ogg->push_byte_length = length;
+        GST_DEBUG_OBJECT (ogg,
+            "File byte length %" G_GINT64_FORMAT, ogg->push_byte_length);
+      }
+      res = gst_pad_query_duration (peer, GST_FORMAT_TIME, &length);
+      gst_object_unref (peer);
+      if (res && length >= 0) {
+        ogg->push_time_length = length;
+        GST_DEBUG_OBJECT (ogg, "File time length %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (ogg->push_time_length));
+      } else if (!ogg->push_disable_seeking) {
+        gboolean res;
+
+        res = gst_ogg_demux_get_duration_push (ogg, flags);
+        if (res) {
+          GST_DEBUG_OBJECT (ogg,
+              "File time length unknown, trying to determine");
+          ogg->push_mode_seek_delayed_event = NULL;
+          if (event) {
+            GST_DEBUG_OBJECT (ogg,
+                "Let me intercept this innocent looking seek request");
+            ogg->push_mode_seek_delayed_event = gst_event_copy (event);
+          }
+          return FALSE;
+        }
+      }
+    }
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_ogg_demux_perform_seek_push (GstOggDemux * ogg, GstEvent * event)
+{
+  gint bitrate;
+  gboolean res = TRUE;
+  GstFormat format;
+  gdouble rate;
+  GstSeekFlags flags;
+  GstSeekType start_type, stop_type;
+  gint64 start, stop;
+  GstEvent *sevent;
+  GstOggChain *chain;
+  gint64 best, best_time;
+  gint i;
+
+  GST_DEBUG_OBJECT (ogg, "Push mode seek request received");
+
+  gst_event_parse_seek (event, &rate, &format, &flags,
+      &start_type, &start, &stop_type, &stop);
+
+  if (format != GST_FORMAT_TIME) {
+    GST_DEBUG_OBJECT (ogg, "can only seek on TIME");
+    goto error;
+  }
+
+  if (start_type != GST_SEEK_TYPE_SET) {
+    GST_DEBUG_OBJECT (ogg, "can only seek to a SET target");
+    goto error;
+  }
+
+  if (!(flags & GST_SEEK_FLAG_FLUSH)) {
+    GST_DEBUG_OBJECT (ogg, "can only do flushing seeks");
+    goto error;
+  }
+
+  GST_DEBUG_OBJECT (ogg, "Push mode seek request: %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (start));
+
+  chain = ogg->current_chain;
+  if (!chain) {
+    GST_WARNING_OBJECT (ogg, "No chain to seek on");
+    goto error;
+  }
+
+  /* start accessing push_* members */
+  GST_PUSH_LOCK (ogg);
+
+  /* not if we disabled seeking (chained streams) */
+  if (ogg->push_disable_seeking) {
+    GST_DEBUG_OBJECT (ogg, "Seeking disabled");
+    goto error_locked;
+  }
+
+  /* not when we're trying to work out duration */
+  if (ogg->push_state == PUSH_DURATION) {
+    GST_DEBUG_OBJECT (ogg, "Busy working out duration, try again later");
+    goto error_locked;
+  }
+
+  /* actually, not if we're doing any seeking already */
+  if (ogg->push_state != PUSH_PLAYING) {
+    GST_DEBUG_OBJECT (ogg, "Already doing some seeking, try again later");
+    goto error_locked;
+  }
+
+  /* on the first seek, get length if we can */
+  if (!gst_ogg_demux_check_duration_push (ogg, flags, event)) {
+    GST_PUSH_UNLOCK (ogg);
+    return FALSE;
+  }
+
+  if (do_index_search (ogg, chain, 0, -1, 0, -1, start, &best, &best_time)) {
+    /* the index gave some result */
+    GST_DEBUG_OBJECT (ogg,
+        "found offset %" G_GINT64_FORMAT " with time %" G_GUINT64_FORMAT,
+        best, best_time);
+  } else {
+    if (ogg->push_time_length > 0) {
+      /* if we know the time length, we know the full segment bitrate */
+      GST_DEBUG_OBJECT (ogg, "Using real file bitrate");
+      bitrate =
+          gst_util_uint64_scale (ogg->push_byte_length, 8 * GST_SECOND,
+          ogg->push_time_length);
+    } else if (ogg->push_time_offset > 0) {
+      /* get a first approximation using known bitrate to the current position */
+      GST_DEBUG_OBJECT (ogg, "Using file bitrate so far");
+      bitrate =
+          gst_util_uint64_scale (ogg->push_byte_offset, 8 * GST_SECOND,
+          ogg->push_time_offset);
+    } else if (ogg->bitrate > 0) {
+      /* nominal bitrate is better than nothing, even if it lies often */
+      GST_DEBUG_OBJECT (ogg, "Using nominal bitrate");
+      bitrate = ogg->bitrate;
+    } else {
+      /* meh */
+      GST_DEBUG_OBJECT (ogg,
+          "At stream start, and no nominal bitrate, using some random magic "
+          "number to seed");
+      /* the bisection, once started, should give us a better approximation */
+      bitrate = 1000;
+    }
+    best = gst_util_uint64_scale (start, bitrate, 8 * GST_SECOND);
+  }
+
+  /* offset by typical page length, and ensure our best guess is within
+     reasonable bounds */
+  best -= CHUNKSIZE;
+  if (best < 0)
+    best = 0;
+  if (ogg->push_byte_length > 0 && best >= ogg->push_byte_length)
+    best = ogg->push_byte_length - 1;
+
+  /* set up bisection search */
+  ogg->push_offset0 = 0;
+  ogg->push_offset1 = ogg->push_byte_length - 1;
+  ogg->push_time0 = ogg->push_start_time;
+  ogg->push_time1 = ogg->push_time_length;
+  ogg->push_seek_time_target = start;
+  ogg->push_seek_time_original_target = start;
+  ogg->push_state = PUSH_BISECT1;
+
+  /* reset pad push mode seeking state */
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+    pad->push_kf_time = GST_CLOCK_TIME_NONE;
+    pad->push_sync_time = GST_CLOCK_TIME_NONE;
+  }
+
+  GST_DEBUG_OBJECT (ogg,
+      "Setting up bisection search for %" G_GINT64_FORMAT " - %" G_GINT64_FORMAT
+      " (time %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")", ogg->push_offset0,
+      ogg->push_offset1, GST_TIME_ARGS (ogg->push_time0),
+      GST_TIME_ARGS (ogg->push_time1));
+  GST_DEBUG_OBJECT (ogg,
+      "Target time is %" GST_TIME_FORMAT ", best first guess is %"
+      G_GINT64_FORMAT, GST_TIME_ARGS (ogg->push_seek_time_target), best);
+
+  ogg->push_seek_rate = rate;
+  ogg->push_seek_flags = flags;
+  ogg->push_mode_seek_delayed_event = NULL;
+  ogg->push_bisection_steps[0] = 1;
+  ogg->push_bisection_steps[1] = 0;
+  sevent = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+      start_type, best, GST_SEEK_TYPE_NONE, -1);
+
+  GST_PUSH_UNLOCK (ogg);
+  res = gst_pad_push_event (ogg->sinkpad, sevent);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (ogg, "seek failed");
+    return FALSE;
+  }
+
+error_locked:
+  GST_PUSH_UNLOCK (ogg);
+  goto error;
+}
+
+static gboolean
+gst_ogg_demux_perform_seek (GstOggDemux * ogg, GstEvent * event)
+{
+  gboolean res;
+
+  if (ogg->pullmode) {
+    res = gst_ogg_demux_perform_seek_pull (ogg, event);
+  } else {
+    res = gst_ogg_demux_perform_seek_push (ogg, event);
+  }
+  return res;
+}
+
+
+/* finds each bitstream link one at a time using a bisection search
+ * (has to begin by knowing the offset of the lb's initial page).
+ * Recurses for each link so it can alloc the link storage after
+ * finding them all, then unroll and fill the cache at the same time
+ */
+static GstFlowReturn
+gst_ogg_demux_bisect_forward_serialno (GstOggDemux * ogg,
+    gint64 begin, gint64 searched, gint64 end, GstOggChain * chain, glong m)
+{
+  gint64 endsearched = end;
+  gint64 next = end;
+  ogg_page og;
+  GstFlowReturn ret;
+  gint64 offset;
+  GstOggChain *nextchain;
+
+  GST_LOG_OBJECT (ogg,
+      "bisect begin: %" G_GINT64_FORMAT ", searched: %" G_GINT64_FORMAT
+      ", end %" G_GINT64_FORMAT ", chain: %p", begin, searched, end, chain);
+
+  /* the below guards against garbage seperating the last and
+   * first pages of two links. */
+  while (searched < endsearched) {
+    gint64 bisect;
+
+    if (endsearched - searched < CHUNKSIZE) {
+      bisect = searched;
+    } else {
+      bisect = (searched + endsearched) / 2;
+    }
+
+    gst_ogg_demux_seek (ogg, bisect);
+    ret = gst_ogg_demux_get_next_page (ogg, &og, -1, &offset);
+
+    if (ret == GST_FLOW_UNEXPECTED) {
+      endsearched = bisect;
+    } else if (ret == GST_FLOW_OK) {
+      guint32 serial = ogg_page_serialno (&og);
+
+      if (!gst_ogg_chain_has_stream (chain, serial)) {
+        endsearched = bisect;
+        next = offset;
+      } else {
+        searched = offset + og.header_len + og.body_len;
+      }
+    } else
+      return ret;
+  }
+
+  GST_LOG_OBJECT (ogg, "current chain ends at %" G_GINT64_FORMAT, searched);
+
+  chain->end_offset = searched;
+  ret = gst_ogg_demux_read_end_chain (ogg, chain);
+  if (ret != GST_FLOW_OK)
+    return ret;
+
+  GST_LOG_OBJECT (ogg, "found begin at %" G_GINT64_FORMAT, next);
+
+  gst_ogg_demux_seek (ogg, next);
+  ret = gst_ogg_demux_read_chain (ogg, &nextchain);
+  if (ret == GST_FLOW_UNEXPECTED) {
+    nextchain = NULL;
+    ret = GST_FLOW_OK;
+    GST_LOG_OBJECT (ogg, "no next chain");
+  } else if (ret != GST_FLOW_OK)
+    goto done;
+
+  if (searched < end && nextchain != NULL) {
+    ret = gst_ogg_demux_bisect_forward_serialno (ogg, next, ogg->offset,
+        end, nextchain, m + 1);
+    if (ret != GST_FLOW_OK)
+      goto done;
+  }
+  GST_LOG_OBJECT (ogg, "adding chain %p", chain);
+
+  g_array_insert_val (ogg->chains, 0, chain);
+
+done:
+  return ret;
+}
+
+/* read a chain from the ogg file. This code will
+ * read all BOS pages and will create and return a GstOggChain 
+ * structure with the results. 
+ * 
+ * This function will also read N pages from each stream in the
+ * chain and submit them to the decoders. When the decoder has
+ * decoded the first buffer, we know the timestamp of the first
+ * page in the chain.
+ */
+static GstFlowReturn
+gst_ogg_demux_read_chain (GstOggDemux * ogg, GstOggChain ** res_chain)
+{
+  GstFlowReturn ret;
+  GstOggChain *chain = NULL;
+  gint64 offset = ogg->offset;
+  ogg_page og;
+  gboolean done;
+  gint i;
+
+  GST_LOG_OBJECT (ogg, "reading chain at %" G_GINT64_FORMAT, offset);
+
+  /* first read the BOS pages, do typefind on them, create
+   * the decoders, send data to the decoders. */
+  while (TRUE) {
+    GstOggPad *pad;
+    guint32 serial;
+
+    ret = gst_ogg_demux_get_next_page (ogg, &og, -1, NULL);
+    if (ret != GST_FLOW_OK) {
+      if (ret == GST_FLOW_UNEXPECTED) {
+        GST_DEBUG_OBJECT (ogg, "Reached EOS, done reading end chain");
+      } else {
+        GST_WARNING_OBJECT (ogg, "problem reading BOS page: ret=%d", ret);
+      }
+      break;
+    }
+    if (!ogg_page_bos (&og)) {
+      GST_INFO_OBJECT (ogg, "page is not BOS page, all streams identified");
+      /* if we did not find a chain yet, assume this is a bogus stream and
+       * ignore it */
+      if (!chain) {
+        GST_WARNING_OBJECT (ogg, "No chain found, no Ogg data in stream ?");
+        ret = GST_FLOW_UNEXPECTED;
+      }
+      break;
+    }
+
+    if (chain == NULL) {
+      chain = gst_ogg_chain_new (ogg);
+      chain->offset = offset;
+    }
+
+    serial = ogg_page_serialno (&og);
+    if (gst_ogg_chain_get_stream (chain, serial) != NULL) {
+      GST_WARNING_OBJECT (ogg,
+          "found serial %08x BOS page twice, ignoring", serial);
+      continue;
+    }
+
+    pad = gst_ogg_chain_new_stream (chain, serial);
+    gst_ogg_pad_submit_page (pad, &og);
+  }
+
+  if (ret != GST_FLOW_OK || chain == NULL) {
+    if (ret == GST_FLOW_OK) {
+      GST_WARNING_OBJECT (ogg, "no chain was found");
+      ret = GST_FLOW_ERROR;
+    } else if (ret != GST_FLOW_UNEXPECTED) {
+      GST_WARNING_OBJECT (ogg, "failed to read chain");
+    } else {
+      GST_DEBUG_OBJECT (ogg, "done reading chains");
+    }
+    if (chain) {
+      gst_ogg_chain_free (chain);
+    }
+    if (res_chain)
+      *res_chain = NULL;
+    return ret;
+  }
+
+  chain->have_bos = TRUE;
+  GST_LOG_OBJECT (ogg, "read bos pages, init decoder now");
+
+  /* now read pages until we receive a buffer from each of the
+   * stream decoders, this will tell us the timestamp of the
+   * first packet in the chain then */
+
+  /* save the offset to the first non bos page in the chain: if searching for
+   * pad->first_time we read past the end of the chain, we'll seek back to this
+   * position
+   */
+  offset = ogg->offset;
+
+  done = FALSE;
+  while (!done) {
+    guint32 serial;
+    gboolean known_serial = FALSE;
+    GstFlowReturn ret;
+
+    serial = ogg_page_serialno (&og);
+    done = TRUE;
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+      GST_LOG_OBJECT (ogg,
+          "serial %08x time %" GST_TIME_FORMAT,
+          pad->map.serialno, GST_TIME_ARGS (pad->start_time));
+
+      if (pad->map.serialno == serial) {
+        known_serial = TRUE;
+
+        /* submit the page now, this will fill in the start_time when the
+         * internal decoder finds it */
+        gst_ogg_pad_submit_page (pad, &og);
+
+        if (!pad->map.is_skeleton && pad->start_time == -1
+            && ogg_page_eos (&og)) {
+          /* got EOS on a pad before we could find its start_time.
+           * We have no chance of finding a start_time for every pad so
+           * stop searching for the other start_time(s).
+           */
+          done = TRUE;
+          break;
+        }
+      }
+      /* the timestamp will be filled in when we submit the pages */
+      if (!pad->map.is_sparse)
+        done &= (pad->start_time != GST_CLOCK_TIME_NONE);
+
+      GST_LOG_OBJECT (ogg, "done %08x now %d", pad->map.serialno, done);
+    }
+
+    /* we read a page not belonging to the current chain: seek back to the
+     * beginning of the chain
+     */
+    if (!known_serial) {
+      GST_LOG_OBJECT (ogg, "unknown serial %08x", serial);
+      gst_ogg_demux_seek (ogg, offset);
+      break;
+    }
+
+    if (!done) {
+      ret = gst_ogg_demux_get_next_page (ogg, &og, -1, NULL);
+      if (ret != GST_FLOW_OK)
+        break;
+    }
+  }
+  GST_LOG_OBJECT (ogg, "done reading chain");
+  /* now we can fill in the missing info using queries */
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+    if (pad->map.is_skeleton)
+      continue;
+
+    pad->mode = GST_OGG_PAD_MODE_STREAMING;
+  }
+
+  if (res_chain)
+    *res_chain = chain;
+
+  return GST_FLOW_OK;
+}
+
+/* read the last pages from the ogg stream to get the final
+ * page end_offsets.
+ */
+static GstFlowReturn
+gst_ogg_demux_read_end_chain (GstOggDemux * ogg, GstOggChain * chain)
+{
+  gint64 begin = chain->end_offset;
+  gint64 end = begin;
+  gint64 last_granule = -1;
+  GstOggPad *last_pad = NULL;
+  GstFlowReturn ret;
+  gboolean done = FALSE;
+  ogg_page og;
+  gint i;
+
+  while (!done) {
+    begin -= CHUNKSIZE;
+    if (begin < 0)
+      begin = 0;
+
+    gst_ogg_demux_seek (ogg, begin);
+
+    /* now continue reading until we run out of data, if we find a page
+     * start, we save it. It might not be the final page as there could be
+     * another page after this one. */
+    while (ogg->offset < end) {
+      ret = gst_ogg_demux_get_next_page (ogg, &og, end - ogg->offset, NULL);
+
+      if (ret == GST_FLOW_LIMIT)
+        break;
+      if (ret != GST_FLOW_OK)
+        return ret;
+
+      for (i = 0; i < chain->streams->len; i++) {
+        GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+        if (pad->map.is_skeleton)
+          continue;
+
+        if (pad->map.serialno == ogg_page_serialno (&og)) {
+          gint64 granulepos = ogg_page_granulepos (&og);
+
+          if (granulepos != -1) {
+            last_granule = granulepos;
+            last_pad = pad;
+            done = TRUE;
+          }
+          break;
+        }
+      }
+    }
+  }
+
+  if (last_pad) {
+    chain->segment_stop =
+        gst_ogg_stream_get_end_time_for_granulepos (&last_pad->map,
+        last_granule);
+  } else {
+    chain->segment_stop = GST_CLOCK_TIME_NONE;
+  }
+
+  GST_INFO ("segment stop %" G_GUINT64_FORMAT, chain->segment_stop);
+
+  return GST_FLOW_OK;
+}
+
+/* find a pad with a given serial number
+ */
+static GstOggPad *
+gst_ogg_demux_find_pad (GstOggDemux * ogg, guint32 serialno)
+{
+  GstOggPad *pad;
+  gint i;
+
+  /* first look in building chain if any */
+  if (ogg->building_chain) {
+    pad = gst_ogg_chain_get_stream (ogg->building_chain, serialno);
+    if (pad)
+      return pad;
+  }
+
+  /* then look in current chain if any */
+  if (ogg->current_chain) {
+    pad = gst_ogg_chain_get_stream (ogg->current_chain, serialno);
+    if (pad)
+      return pad;
+  }
+
+  for (i = 0; i < ogg->chains->len; i++) {
+    GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+
+    pad = gst_ogg_chain_get_stream (chain, serialno);
+    if (pad)
+      return pad;
+  }
+  return NULL;
+}
+
+/* find a chain with a given serial number
+ */
+static GstOggChain *
+gst_ogg_demux_find_chain (GstOggDemux * ogg, guint32 serialno)
+{
+  GstOggPad *pad;
+
+  pad = gst_ogg_demux_find_pad (ogg, serialno);
+  if (pad) {
+    return pad->chain;
+  }
+  return NULL;
+}
+
+/* returns TRUE if all streams have valid start time */
+static gboolean
+gst_ogg_demux_collect_chain_info (GstOggDemux * ogg, GstOggChain * chain)
+{
+  gboolean res = TRUE;
+
+  chain->total_time = GST_CLOCK_TIME_NONE;
+  GST_DEBUG_OBJECT (ogg, "trying to collect chain info");
+
+  /* see if we have a start time on all streams */
+  chain->segment_start = gst_ogg_demux_collect_start_time (ogg, chain);
+
+  if (chain->segment_start == G_MAXUINT64) {
+    /* not yet, stream some more data */
+    res = FALSE;
+  } else if (chain->segment_stop != GST_CLOCK_TIME_NONE) {
+    /* we can calculate a total time */
+    chain->total_time = chain->segment_stop - chain->segment_start;
+  }
+
+  GST_DEBUG ("total time %" G_GUINT64_FORMAT, chain->total_time);
+
+  GST_DEBUG_OBJECT (ogg, "return %d", res);
+
+  return res;
+}
+
+static void
+gst_ogg_demux_collect_info (GstOggDemux * ogg)
+{
+  gint i;
+
+  /* collect all info */
+  ogg->total_time = 0;
+
+  for (i = 0; i < ogg->chains->len; i++) {
+    GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+
+    chain->begin_time = ogg->total_time;
+
+    gst_ogg_demux_collect_chain_info (ogg, chain);
+
+    ogg->total_time += chain->total_time;
+  }
+  ogg->segment.duration = ogg->total_time;
+}
+
+/* find all the chains in the ogg file, this reads the first and
+ * last page of the ogg stream, if they match then the ogg file has
+ * just one chain, else we do a binary search for all chains.
+ */
+static GstFlowReturn
+gst_ogg_demux_find_chains (GstOggDemux * ogg)
+{
+  ogg_page og;
+  GstPad *peer;
+  gboolean res;
+  guint32 serialno;
+  GstOggChain *chain;
+  GstFlowReturn ret;
+
+  /* get peer to figure out length */
+  if ((peer = gst_pad_get_peer (ogg->sinkpad)) == NULL)
+    goto no_peer;
+
+  /* find length to read last page, we store this for later use. */
+  res = gst_pad_query_duration (peer, GST_FORMAT_BYTES, &ogg->length);
+  gst_object_unref (peer);
+  if (!res || ogg->length <= 0)
+    goto no_length;
+
+  GST_DEBUG_OBJECT (ogg, "file length %" G_GINT64_FORMAT, ogg->length);
+
+  /* read chain from offset 0, this is the first chain of the
+   * ogg file. */
+  gst_ogg_demux_seek (ogg, 0);
+  ret = gst_ogg_demux_read_chain (ogg, &chain);
+  if (ret != GST_FLOW_OK)
+    goto no_first_chain;
+
+  /* read page from end offset, we use this page to check if its serial
+   * number is contained in the first chain. If this is the case then
+   * this ogg is not a chained ogg and we can skip the scanning. */
+  gst_ogg_demux_seek (ogg, ogg->length);
+  ret = gst_ogg_demux_get_prev_page (ogg, &og, NULL);
+  if (ret != GST_FLOW_OK)
+    goto no_last_page;
+
+  serialno = ogg_page_serialno (&og);
+
+  if (!gst_ogg_chain_has_stream (chain, serialno)) {
+    /* the last page is not in the first stream, this means we should
+     * find all the chains in this chained ogg. */
+    ret =
+        gst_ogg_demux_bisect_forward_serialno (ogg, 0, 0, ogg->length, chain,
+        0);
+  } else {
+    /* we still call this function here but with an empty range so that
+     * we can reuse the setup code in this routine. */
+    ret =
+        gst_ogg_demux_bisect_forward_serialno (ogg, 0, ogg->length,
+        ogg->length, chain, 0);
+  }
+  if (ret != GST_FLOW_OK)
+    goto done;
+
+  /* all fine, collect and print */
+  gst_ogg_demux_collect_info (ogg);
+
+  /* dump our chains and streams */
+  gst_ogg_print (ogg);
+
+done:
+  return ret;
+
+  /*** error cases ***/
+no_peer:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), ("we don't have a peer"));
+    return GST_FLOW_NOT_LINKED;
+  }
+no_length:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), ("can't get file length"));
+    return GST_FLOW_NOT_SUPPORTED;
+  }
+no_first_chain:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL), ("can't get first chain"));
+    return GST_FLOW_ERROR;
+  }
+no_last_page:
+  {
+    GST_DEBUG_OBJECT (ogg, "can't get last page");
+    if (chain)
+      gst_ogg_chain_free (chain);
+    return ret;
+  }
+}
+
+static GstFlowReturn
+gst_ogg_demux_handle_page (GstOggDemux * ogg, ogg_page * page)
+{
+  GstOggPad *pad;
+  gint64 granule;
+  guint32 serialno;
+  GstFlowReturn result = GST_FLOW_OK;
+
+  serialno = ogg_page_serialno (page);
+  granule = ogg_page_granulepos (page);
+
+  GST_LOG_OBJECT (ogg,
+      "processing ogg page (serial %08x, "
+      "pageno %ld, granulepos %" G_GINT64_FORMAT ", bos %d)", serialno,
+      ogg_page_pageno (page), granule, ogg_page_bos (page));
+
+  if (ogg_page_bos (page)) {
+    GstOggChain *chain;
+
+    /* first page */
+    /* see if we know about the chain already */
+    chain = gst_ogg_demux_find_chain (ogg, serialno);
+    if (chain) {
+      GstEvent *event;
+      gint64 start = 0;
+      GstSegment segment;
+
+      if (chain->segment_start != GST_CLOCK_TIME_NONE)
+        start = chain->segment_start;
+
+      /* create the newsegment event we are going to send out */
+      gst_segment_copy_into (&ogg->segment, &segment);
+      segment.start = start;
+      segment.stop = chain->segment_stop;
+      segment.time = chain->begin_time;
+      event = gst_event_new_segment (&segment);
+      gst_event_set_seqnum (event, ogg->seqnum);
+
+      GST_DEBUG_OBJECT (ogg,
+          "segment: start %" GST_TIME_FORMAT ", stop %" GST_TIME_FORMAT
+          ", time %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
+          GST_TIME_ARGS (chain->segment_stop),
+          GST_TIME_ARGS (chain->begin_time));
+
+      /* activate it as it means we have a non-header, this will also deactivate
+       * the currently running chain. */
+      gst_ogg_demux_activate_chain (ogg, chain, event);
+      pad = gst_ogg_demux_find_pad (ogg, serialno);
+    } else {
+      GstClockTime chain_time;
+      gint64 current_time;
+
+      /* this can only happen in push mode */
+      if (ogg->pullmode)
+        goto unknown_chain;
+
+      current_time = ogg->segment.position;
+
+      /* time of new chain is current time */
+      chain_time = current_time;
+
+      if (ogg->building_chain == NULL) {
+        GstOggChain *newchain;
+
+        newchain = gst_ogg_chain_new (ogg);
+        newchain->offset = 0;
+        /* set new chain begin time aligned with end time of old chain */
+        newchain->begin_time = chain_time;
+        GST_DEBUG_OBJECT (ogg, "new chain, begin time %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (chain_time));
+
+        /* and this is the one we are building now */
+        ogg->building_chain = newchain;
+      }
+      pad = gst_ogg_chain_new_stream (ogg->building_chain, serialno);
+    }
+  } else {
+    pad = gst_ogg_demux_find_pad (ogg, serialno);
+  }
+  if (pad) {
+    result = gst_ogg_pad_submit_page (pad, page);
+  } else {
+    GST_PUSH_LOCK (ogg);
+    if (!ogg->pullmode && !ogg->push_disable_seeking) {
+      /* no pad while probing for duration, we must have a chained stream,
+         and we don't support them, so back off */
+      GST_INFO_OBJECT (ogg, "We seem to have a chained stream, we won't seek");
+      if (ogg->push_state == PUSH_DURATION) {
+        GstFlowReturn res;
+
+        res = gst_ogg_demux_seek_back_after_push_duration_check_unlock (ogg);
+        if (res != GST_FLOW_OK)
+          return res;
+      }
+
+      /* only once we seeked back */
+      GST_PUSH_LOCK (ogg);
+      ogg->push_disable_seeking = TRUE;
+    } else {
+      GST_PUSH_UNLOCK (ogg);
+      /* no pad. This means an ogg page without bos has been seen for this
+       * serialno. we just ignore it but post a warning... */
+      GST_ELEMENT_WARNING (ogg, STREAM, DECODE,
+          (NULL), ("unknown ogg pad for serial %08x detected", serialno));
+      return GST_FLOW_OK;
+    }
+    GST_PUSH_UNLOCK (ogg);
+  }
+  return result;
+
+  /* ERRORS */
+unknown_chain:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DECODE,
+        (NULL), ("unknown ogg chain for serial %08x detected", serialno));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* streaming mode, receive a buffer, parse it, create pads for
+ * the serialno, submit pages and packets to the oggpads
+ */
+static GstFlowReturn
+gst_ogg_demux_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstOggDemux *ogg;
+  gint ret = 0;
+  GstFlowReturn result = GST_FLOW_OK;
+
+  ogg = GST_OGG_DEMUX (GST_OBJECT_PARENT (pad));
+
+  GST_DEBUG_OBJECT (ogg, "enter");
+  result = gst_ogg_demux_submit_buffer (ogg, buffer);
+  if (result < 0) {
+    GST_DEBUG_OBJECT (ogg, "gst_ogg_demux_submit_buffer returned %d", result);
+  }
+
+  while (result == GST_FLOW_OK) {
+    ogg_page page;
+
+    ret = ogg_sync_pageout (&ogg->sync, &page);
+    if (ret == 0)
+      /* need more data */
+      break;
+    if (ret == -1) {
+      /* discontinuity in the pages */
+      GST_DEBUG_OBJECT (ogg, "discont in page found, continuing");
+    } else {
+      result = gst_ogg_demux_handle_page (ogg, &page);
+      if (result < 0) {
+        GST_DEBUG_OBJECT (ogg, "gst_ogg_demux_handle_page returned %d", result);
+      }
+    }
+  }
+  if (ret == 0 || result == GST_FLOW_OK) {
+    gst_ogg_demux_sync_streams (ogg);
+  }
+  GST_DEBUG_OBJECT (ogg, "leave with %d", result);
+  return result;
+}
+
+static gboolean
+gst_ogg_demux_send_event (GstOggDemux * ogg, GstEvent * event)
+{
+  GstOggChain *chain = ogg->current_chain;
+  gboolean res = TRUE;
+
+  if (!chain)
+    chain = ogg->building_chain;
+
+  if (chain) {
+    gint i;
+
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+
+      gst_event_ref (event);
+      GST_DEBUG_OBJECT (pad, "Pushing event %" GST_PTR_FORMAT, event);
+      res &= gst_pad_push_event (GST_PAD (pad), event);
+    }
+  } else {
+    GST_WARNING_OBJECT (ogg, "No chain to forward event to");
+  }
+  gst_event_unref (event);
+
+  return res;
+}
+
+static GstFlowReturn
+gst_ogg_demux_combine_flows (GstOggDemux * ogg, GstOggPad * pad,
+    GstFlowReturn ret)
+{
+  GstOggChain *chain;
+
+  /* store the value */
+  pad->last_ret = ret;
+
+  /* any other error that is not-linked can be returned right
+   * away */
+  if (ret != GST_FLOW_NOT_LINKED)
+    goto done;
+
+  /* only return NOT_LINKED if all other pads returned NOT_LINKED */
+  chain = ogg->current_chain;
+  if (chain) {
+    gint i;
+
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *opad = g_array_index (chain->streams, GstOggPad *, i);
+
+      ret = opad->last_ret;
+      /* some other return value (must be SUCCESS but we can return
+       * other values as well) */
+      if (ret != GST_FLOW_NOT_LINKED)
+        goto done;
+    }
+    /* if we get here, all other pads were unlinked and we return
+     * NOT_LINKED then */
+  }
+done:
+  return ret;
+}
+
+/* returns TRUE if all streams in current chain reached EOS, FALSE otherwise */
+static gboolean
+gst_ogg_demux_check_eos (GstOggDemux * ogg)
+{
+  GstOggChain *chain;
+  gboolean eos = TRUE;
+
+  chain = ogg->current_chain;
+  if (G_LIKELY (chain)) {
+    gint i;
+
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *opad = g_array_index (chain->streams, GstOggPad *, i);
+
+      eos = eos && opad->is_eos;
+    }
+  } else {
+    eos = FALSE;
+  }
+
+  return eos;
+}
+
+static GstFlowReturn
+gst_ogg_demux_loop_forward (GstOggDemux * ogg)
+{
+  GstFlowReturn ret;
+  GstBuffer *buffer;
+
+  if (ogg->offset == ogg->length) {
+    GST_LOG_OBJECT (ogg, "no more data to pull %" G_GINT64_FORMAT
+        " == %" G_GINT64_FORMAT, ogg->offset, ogg->length);
+    ret = GST_FLOW_UNEXPECTED;
+    goto done;
+  }
+
+  GST_LOG_OBJECT (ogg, "pull data %" G_GINT64_FORMAT, ogg->offset);
+  ret = gst_pad_pull_range (ogg->sinkpad, ogg->offset, CHUNKSIZE, &buffer);
+  if (ret != GST_FLOW_OK) {
+    GST_LOG_OBJECT (ogg, "Failed pull_range");
+    goto done;
+  }
+
+  ogg->offset += gst_buffer_get_size (buffer);
+
+  if (G_UNLIKELY (ogg->newsegment)) {
+    gst_ogg_demux_send_event (ogg, ogg->newsegment);
+    ogg->newsegment = NULL;
+  }
+
+  ret = gst_ogg_demux_chain (ogg->sinkpad, buffer);
+  if (ret != GST_FLOW_OK) {
+    GST_LOG_OBJECT (ogg, "Failed demux_chain");
+    goto done;
+  }
+
+  /* check for the end of the segment */
+  if (gst_ogg_demux_check_eos (ogg)) {
+    GST_LOG_OBJECT (ogg, "got EOS");
+    ret = GST_FLOW_UNEXPECTED;
+    goto done;
+  }
+done:
+  return ret;
+}
+
+/* reverse mode.
+ *
+ * We read the pages backwards and send the packets forwards. The first packet
+ * in the page will be pushed with the DISCONT flag set.
+ *
+ * Special care has to be taken for continued pages, which we can only decode
+ * when we have the previous page(s).
+ */
+static GstFlowReturn
+gst_ogg_demux_loop_reverse (GstOggDemux * ogg)
+{
+  GstFlowReturn ret;
+  ogg_page page;
+  gint64 offset;
+
+  if (ogg->offset == 0) {
+    GST_LOG_OBJECT (ogg, "no more data to pull %" G_GINT64_FORMAT
+        " == 0", ogg->offset);
+    ret = GST_FLOW_UNEXPECTED;
+    goto done;
+  }
+
+  GST_LOG_OBJECT (ogg, "read page from %" G_GINT64_FORMAT, ogg->offset);
+  ret = gst_ogg_demux_get_prev_page (ogg, &page, &offset);
+  if (ret != GST_FLOW_OK)
+    goto done;
+
+  ogg->offset = offset;
+
+  if (G_UNLIKELY (ogg->newsegment)) {
+    gst_ogg_demux_send_event (ogg, ogg->newsegment);
+    ogg->newsegment = NULL;
+  }
+
+  ret = gst_ogg_demux_handle_page (ogg, &page);
+  if (ret != GST_FLOW_OK)
+    goto done;
+
+  /* check for the end of the segment */
+  if (gst_ogg_demux_check_eos (ogg)) {
+    GST_LOG_OBJECT (ogg, "got EOS");
+    ret = GST_FLOW_UNEXPECTED;
+    goto done;
+  }
+done:
+  return ret;
+}
+
+static void
+gst_ogg_demux_sync_streams (GstOggDemux * ogg)
+{
+  GstClockTime cur;
+  GstOggChain *chain;
+  guint i;
+
+  chain = ogg->current_chain;
+  cur = ogg->segment.position;
+  if (chain == NULL || cur == -1)
+    return;
+
+  for (i = 0; i < chain->streams->len; i++) {
+    GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, i);
+
+    /* Theoretically, we should be doing this for all streams, but we're only
+     * doing it for known-to-be-sparse streams at the moment in order not to
+     * break things for wrongly-muxed streams (like we used to produce once) */
+    if (stream->map.is_sparse && stream->position != GST_CLOCK_TIME_NONE) {
+
+      /* Does this stream lag? Random threshold of 2 seconds */
+      if (GST_CLOCK_DIFF (stream->position, cur) > (2 * GST_SECOND)) {
+        GST_DEBUG_OBJECT (stream, "synchronizing stream with others by "
+            "advancing time from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (stream->position), GST_TIME_ARGS (cur));
+
+        stream->position = cur;
+
+#if 0
+        ogg->segment.base += cur - stream->position;
+        /* advance stream time (FIXME: is this right, esp. time_pos?) */
+        gst_pad_push_event (GST_PAD_CAST (stream),
+            gst_event_new_new_segment (TRUE, ogg->segment.rate,
+                ogg->segment.applied_rate,
+                GST_FORMAT_TIME, stream->position, -1, stream->position));
+#endif
+      }
+    }
+  }
+}
+
+/* random access code
+ *
+ * - first find all the chains and streams by scanning the file.
+ * - then get and chain buffers, just like the streaming case.
+ * - when seeking, we can use the chain info to perform the seek.
+ */
+static void
+gst_ogg_demux_loop (GstOggPad * pad)
+{
+  GstOggDemux *ogg;
+  GstFlowReturn ret;
+  GstEvent *event;
+
+  ogg = GST_OGG_DEMUX (GST_OBJECT_PARENT (pad));
+
+  if (ogg->need_chains) {
+    gboolean res;
+
+    /* this is the only place where we write chains and thus need to lock. */
+    GST_CHAIN_LOCK (ogg);
+    ret = gst_ogg_demux_find_chains (ogg);
+    GST_CHAIN_UNLOCK (ogg);
+    if (ret != GST_FLOW_OK)
+      goto chain_read_failed;
+
+    ogg->need_chains = FALSE;
+
+    GST_OBJECT_LOCK (ogg);
+    ogg->running = TRUE;
+    event = ogg->event;
+    ogg->event = NULL;
+    GST_OBJECT_UNLOCK (ogg);
+
+    /* and seek to configured positions without FLUSH */
+    res = gst_ogg_demux_perform_seek_pull (ogg, event);
+    if (event)
+      gst_event_unref (event);
+
+    if (!res)
+      goto seek_failed;
+  }
+
+  if (ogg->segment.rate >= 0.0)
+    ret = gst_ogg_demux_loop_forward (ogg);
+  else
+    ret = gst_ogg_demux_loop_reverse (ogg);
+
+  if (ret != GST_FLOW_OK)
+    goto pause;
+
+  gst_ogg_demux_sync_streams (ogg);
+  return;
+
+  /* ERRORS */
+chain_read_failed:
+  {
+    /* error was posted */
+    goto pause;
+  }
+seek_failed:
+  {
+    GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL),
+        ("failed to start demuxing ogg"));
+    ret = GST_FLOW_ERROR;
+    goto pause;
+  }
+pause:
+  {
+    const gchar *reason = gst_flow_get_name (ret);
+    GstEvent *event = NULL;
+
+    GST_LOG_OBJECT (ogg, "pausing task, reason %s", reason);
+    gst_pad_pause_task (ogg->sinkpad);
+
+    if (ret == GST_FLOW_UNEXPECTED) {
+      /* perform EOS logic */
+      if (ogg->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+        gint64 stop;
+        GstMessage *message;
+
+        /* for segment playback we need to post when (in stream time)
+         * we stopped, this is either stop (when set) or the duration. */
+        if ((stop = ogg->segment.stop) == -1)
+          stop = ogg->segment.duration;
+
+        GST_LOG_OBJECT (ogg, "Sending segment done, at end of segment");
+        message =
+            gst_message_new_segment_done (GST_OBJECT (ogg), GST_FORMAT_TIME,
+            stop);
+        gst_message_set_seqnum (message, ogg->seqnum);
+
+        gst_element_post_message (GST_ELEMENT (ogg), message);
+      } else {
+        /* normal playback, send EOS to all linked pads */
+        GST_LOG_OBJECT (ogg, "Sending EOS, at end of stream");
+        event = gst_event_new_eos ();
+      }
+    } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
+      GST_ELEMENT_ERROR (ogg, STREAM, FAILED,
+          (_("Internal data stream error.")),
+          ("stream stopped, reason %s", reason));
+      event = gst_event_new_eos ();
+    }
+
+    /* For wrong-state we still want to pause the task and stop
+     * but no error message or other things are necessary.
+     * wrong-state is no real error and will be caused by flushing,
+     * e.g. because of a flushing seek.
+     */
+    if (event) {
+      gst_event_set_seqnum (event, ogg->seqnum);
+      gst_ogg_demux_send_event (ogg, event);
+    }
+    return;
+  }
+}
+
+static void
+gst_ogg_demux_clear_chains (GstOggDemux * ogg)
+{
+  gint i;
+
+  gst_ogg_demux_deactivate_current_chain (ogg);
+
+  GST_CHAIN_LOCK (ogg);
+  for (i = 0; i < ogg->chains->len; i++) {
+    GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+
+    gst_ogg_chain_free (chain);
+  }
+  ogg->chains = g_array_set_size (ogg->chains, 0);
+  GST_CHAIN_UNLOCK (ogg);
+}
+
+/* this function is called when the pad is activated and should start
+ * processing data.
+ *
+ * We check if we can do random access to decide if we work push or
+ * pull based.
+ */
+static gboolean
+gst_ogg_demux_sink_activate (GstPad * sinkpad)
+{
+  GstQuery *query;
+  gboolean pull_mode;
+
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (sinkpad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  gst_query_parse_scheduling (query, &pull_mode, NULL, NULL, NULL, NULL, NULL);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  GST_DEBUG_OBJECT (sinkpad, "activating pull");
+  return gst_pad_activate_pull (sinkpad, TRUE);
+
+activate_push:
+  {
+    GST_DEBUG_OBJECT (sinkpad, "activating push");
+    return gst_pad_activate_push (sinkpad, TRUE);
+  }
+}
+
+/* this function gets called when we activate ourselves in push mode.
+ * We cannot seek (ourselves) in the stream */
+static gboolean
+gst_ogg_demux_sink_activate_push (GstPad * sinkpad, gboolean active)
+{
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (GST_OBJECT_PARENT (sinkpad));
+
+  ogg->pullmode = FALSE;
+  ogg->resync = FALSE;
+
+  return TRUE;
+}
+
+/* this function gets called when we activate ourselves in pull mode.
+ * We can perform  random access to the resource and we start a task
+ * to start reading */
+static gboolean
+gst_ogg_demux_sink_activate_pull (GstPad * sinkpad, gboolean active)
+{
+  GstOggDemux *ogg;
+
+  ogg = GST_OGG_DEMUX (GST_OBJECT_PARENT (sinkpad));
+
+  if (active) {
+    ogg->need_chains = TRUE;
+    ogg->pullmode = TRUE;
+
+    return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_ogg_demux_loop,
+        sinkpad);
+  } else {
+    return gst_pad_stop_task (sinkpad);
+  }
+}
+
+static GstStateChangeReturn
+gst_ogg_demux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstOggDemux *ogg;
+  GstStateChangeReturn result = GST_STATE_CHANGE_FAILURE;
+
+  ogg = GST_OGG_DEMUX (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      ogg->basetime = 0;
+      ogg_sync_init (&ogg->sync);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      ogg_sync_reset (&ogg->sync);
+      ogg->running = FALSE;
+      ogg->bitrate = 0;
+      ogg->total_time = -1;
+      GST_PUSH_LOCK (ogg);
+      ogg->push_byte_offset = 0;
+      ogg->push_byte_length = -1;
+      ogg->push_time_length = GST_CLOCK_TIME_NONE;
+      ogg->push_time_offset = GST_CLOCK_TIME_NONE;
+      ogg->push_disable_seeking = FALSE;
+      ogg->push_state = PUSH_PLAYING;
+      GST_PUSH_UNLOCK (ogg);
+      gst_segment_init (&ogg->segment, GST_FORMAT_TIME);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_ogg_demux_clear_chains (ogg);
+      GST_OBJECT_LOCK (ogg);
+      ogg->running = FALSE;
+      GST_OBJECT_UNLOCK (ogg);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      ogg_sync_clear (&ogg->sync);
+      break;
+    default:
+      break;
+  }
+  return result;
+}
+
+gboolean
+gst_ogg_demux_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_ogg_demux_debug, "oggdemux", 0, "ogg demuxer");
+  GST_DEBUG_CATEGORY_INIT (gst_ogg_demux_setup_debug, "oggdemux_setup", 0,
+      "ogg demuxer setup stage when parsing pipeline");
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  return gst_element_register (plugin, "oggdemux", GST_RANK_PRIMARY,
+      GST_TYPE_OGG_DEMUX);
+}
+
+/* prints all info about the element */
+#undef GST_CAT_DEFAULT
+#define GST_CAT_DEFAULT gst_ogg_demux_setup_debug
+
+#ifdef GST_DISABLE_GST_DEBUG
+
+static void
+gst_ogg_print (GstOggDemux * ogg)
+{
+  /* NOP */
+}
+
+#else /* !GST_DISABLE_GST_DEBUG */
+
+static void
+gst_ogg_print (GstOggDemux * ogg)
+{
+  guint j, i;
+
+  GST_INFO_OBJECT (ogg, "%u chains", ogg->chains->len);
+  GST_INFO_OBJECT (ogg, " total time: %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (ogg->total_time));
+
+  for (i = 0; i < ogg->chains->len; i++) {
+    GstOggChain *chain = g_array_index (ogg->chains, GstOggChain *, i);
+
+    GST_INFO_OBJECT (ogg, " chain %d (%u streams):", i, chain->streams->len);
+    GST_INFO_OBJECT (ogg,
+        "  offset: %" G_GINT64_FORMAT " - %" G_GINT64_FORMAT, chain->offset,
+        chain->end_offset);
+    GST_INFO_OBJECT (ogg, "  begin time: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (chain->begin_time));
+    GST_INFO_OBJECT (ogg, "  total time: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (chain->total_time));
+    GST_INFO_OBJECT (ogg, "  segment start: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (chain->segment_start));
+    GST_INFO_OBJECT (ogg, "  segment stop:  %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (chain->segment_stop));
+
+    for (j = 0; j < chain->streams->len; j++) {
+      GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, j);
+
+      GST_INFO_OBJECT (ogg, "  stream %08x: %s", stream->map.serialno,
+          gst_ogg_stream_get_media_type (&stream->map));
+      GST_INFO_OBJECT (ogg, "   start time:       %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (stream->start_time));
+    }
+  }
+}
+#endif /* GST_DISABLE_GST_DEBUG */
diff --git a/ext/ogg/gstoggdemux.h b/ext/ogg/gstoggdemux.h
new file mode 100644
index 0000000..050caf2
--- /dev/null
+++ b/ext/ogg/gstoggdemux.h
@@ -0,0 +1,204 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * gstoggdemux.c: ogg stream demuxer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_OGG_DEMUX_H__
+#define __GST_OGG_DEMUX_H__
+
+#include <ogg/ogg.h>
+
+#include <gst/gst.h>
+
+#include "gstoggstream.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_OGG_PAD (gst_ogg_pad_get_type())
+#define GST_OGG_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OGG_PAD, GstOggPad))
+#define GST_OGG_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OGG_PAD, GstOggPad))
+#define GST_IS_OGG_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_PAD))
+#define GST_IS_OGG_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_PAD))
+
+typedef struct _GstOggPad GstOggPad;
+typedef struct _GstOggPadClass GstOggPadClass;
+
+#define GST_TYPE_OGG_DEMUX (gst_ogg_demux_get_type())
+#define GST_OGG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OGG_DEMUX, GstOggDemux))
+#define GST_OGG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OGG_DEMUX, GstOggDemux))
+#define GST_IS_OGG_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_DEMUX))
+#define GST_IS_OGG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_DEMUX))
+
+GType gst_ogg_demux_get_type (void);
+
+typedef struct _GstOggDemux GstOggDemux;
+typedef struct _GstOggDemuxClass GstOggDemuxClass;
+typedef struct _GstOggChain GstOggChain;
+
+/* all information needed for one ogg chain (relevant for chained bitstreams) */
+struct _GstOggChain
+{
+  GstOggDemux *ogg;
+
+  gint64 offset;                /* starting offset of chain */
+  gint64 end_offset;            /* end offset of chain */
+  gint64 bytes;                 /* number of bytes */
+
+  gboolean have_bos;
+
+  GArray *streams;
+
+  GstClockTime total_time;      /* the total time of this chain, this is the MAX of
+                                   the totals of all streams */
+  GstClockTime begin_time;      /* when this chain starts in the stream */
+
+  GstClockTime segment_start;   /* the timestamp of the first sample, this is the MIN of
+                                   the start times of all streams. */
+  GstClockTime segment_stop;    /* the timestamp of the last page, this is the MAX of the
+                                   streams. */
+};
+
+/* different modes for the pad */
+typedef enum
+{
+  GST_OGG_PAD_MODE_INIT,        /* we are feeding our internal decoder to get info */
+  GST_OGG_PAD_MODE_STREAMING,   /* we are streaming buffers to the outside */
+} GstOggPadMode;
+
+/* all information needed for one ogg stream */
+struct _GstOggPad
+{
+  GstPad pad;                   /* subclass GstPad */
+
+  gboolean have_type;
+  GstOggPadMode mode;
+
+  GstOggChain *chain;           /* the chain we are part of */
+  GstOggDemux *ogg;             /* the ogg demuxer we are part of */
+
+  GstOggStream map;
+
+  gint64 packetno;
+  gint64 current_granule;
+  gint64 keyframe_granule;
+
+  GstClockTime start_time;      /* the timestamp of the first sample */
+
+  gint64 first_granule;         /* the granulepos of first page == first sample in next page */
+  GstClockTime first_time;      /* the timestamp of the second page or granuletime of first page */
+
+  GstClockTime position;        /* position when last push occured; used to detect when we
+                                 * need to send a newsegment update event for sparse streams */
+
+  GList *continued;
+
+  gboolean discont;
+  GstFlowReturn last_ret;       /* last return of _pad_push() */
+  gboolean is_eos;
+
+  gboolean added;
+
+  /* push mode seeking */
+  GstClockTime push_kf_time;
+  GstClockTime push_sync_time;
+};
+
+struct _GstOggPadClass
+{
+  GstPadClass parent_class;
+};
+
+/**
+ * GstOggDemux:
+ *
+ * The ogg demuxer object structure.
+ */
+struct _GstOggDemux
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+
+  gint64 length;
+  gint64 read_offset;
+  gint64 offset;
+
+  gboolean pullmode;
+  gboolean running;
+
+  gboolean need_chains;
+  gboolean resync;
+
+  /* state */
+  GMutex *chain_lock;           /* we need the lock to protect the chains */
+  GArray *chains;               /* list of chains we know */
+  GstClockTime total_time;
+  gint bitrate;                 /* bitrate of the current chain */
+
+  GstOggChain *current_chain;
+  GstOggChain *building_chain;
+
+  /* playback start/stop positions */
+  GstSegment segment;
+  guint32  seqnum;
+
+  GstEvent *event;
+  GstEvent *newsegment;         /* pending newsegment to be sent from _loop */
+
+  /* annodex stuff */
+  gint64 basetime;
+  gint64 prestime;
+
+  /* push mode seeking support */
+  GMutex *push_lock; /* we need the lock to protect the push mode variables */
+  gint64 push_byte_offset; /* where were are at in the stream, in bytes */
+  gint64 push_byte_length; /* length in bytes of the stream, -1 if unknown */
+  GstClockTime push_time_length; /* length in time of the stream */
+  GstClockTime push_start_time; /* start time of the stream */
+  GstClockTime push_time_offset; /* where were are at in the stream, in time */
+  enum { PUSH_PLAYING, PUSH_DURATION, PUSH_BISECT1, PUSH_LINEAR1, PUSH_BISECT2, PUSH_LINEAR2 } push_state;
+
+  GstClockTime push_seek_time_original_target;
+  GstClockTime push_seek_time_target;
+  gint64 push_last_seek_offset;
+  GstClockTime push_last_seek_time;
+  gint64 push_offset0, push_offset1; /* bisection search offset bounds */
+  GstClockTime push_time0, push_time1; /* bisection search time bounds */
+
+  double push_seek_rate;
+  GstSeekFlags push_seek_flags;
+  GstEvent *push_mode_seek_delayed_event;
+  gboolean push_disable_seeking;
+
+  gint push_bisection_steps[2];
+
+  /* ogg stuff */
+  ogg_sync_state sync;
+};
+
+struct _GstOggDemuxClass
+{
+  GstElementClass parent_class;
+};
+
+gboolean gst_ogg_demux_plugin_init (GstPlugin * plugin);
+
+G_END_DECLS
+
+#endif /* __GST_OGG_DEMUX_H__ */
diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c
new file mode 100644
index 0000000..a0ac3cb
--- /dev/null
+++ b/ext/ogg/gstoggmux.c
@@ -0,0 +1,2057 @@
+/* OGG muxer plugin for GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-oggmux
+ * @see_also: <link linkend="gst-plugins-base-plugins-oggdemux">oggdemux</link>
+ *
+ * This element merges streams (audio and video) into ogg files.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch v4l2src num-buffers=500 ! video/x-raw,width=320,height=240 ! videoconvert ! theoraenc ! oggmux ! filesink location=video.ogg
+ * ]| Encodes a video stream captured from a v4l2-compatible camera to Ogg/Theora
+ * (the encoding will stop automatically after 500 frames)
+ * </refsect2>
+ *
+ * Last reviewed on 2008-02-06 (0.10.17)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/base/gstcollectpads.h>
+#include <gst/base/gstbytewriter.h>
+#include <gst/tag/tag.h>
+
+#include "gstoggmux.h"
+
+/* memcpy - if someone knows a way to get rid of it, please speak up
+ * note: the ogg docs even say you need this... */
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>             /* rand, srand, atoi */
+
+GST_DEBUG_CATEGORY_STATIC (gst_ogg_mux_debug);
+#define GST_CAT_DEFAULT gst_ogg_mux_debug
+
+/* This isn't generally what you'd want with an end-time macro, because
+   technically the end time of a buffer with invalid duration is invalid. But
+   for sorting ogg pages this is what we want. */
+#define GST_BUFFER_END_TIME(buf) \
+    (GST_BUFFER_DURATION_IS_VALID (buf) \
+    ? GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf) \
+    : GST_BUFFER_TIMESTAMP (buf))
+
+#define GST_GP_FORMAT "[gp %8" G_GINT64_FORMAT "]"
+#define GST_GP_CAST(_gp) ((gint64) _gp)
+
+typedef enum
+{
+  GST_OGG_FLAG_BOS = GST_ELEMENT_FLAG_LAST,
+  GST_OGG_FLAG_EOS
+}
+GstOggFlag;
+
+/* OggMux signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+/* set to 0.5 seconds by default */
+#define DEFAULT_MAX_DELAY       G_GINT64_CONSTANT(500000000)
+#define DEFAULT_MAX_PAGE_DELAY  G_GINT64_CONSTANT(500000000)
+#define DEFAULT_MAX_TOLERANCE   G_GINT64_CONSTANT(40000000)
+#define DEFAULT_SKELETON        FALSE
+
+enum
+{
+  ARG_0,
+  ARG_MAX_DELAY,
+  ARG_MAX_PAGE_DELAY,
+  ARG_MAX_TOLERANCE,
+  ARG_SKELETON
+};
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/ogg")
+    );
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS ("video/x-theora; "
+        "audio/x-vorbis; audio/x-flac; audio/x-speex; audio/x-celt; "
+        "application/x-ogm-video; application/x-ogm-audio; video/x-dirac; "
+        "video/x-smoke; video/x-vp8; text/x-cmml, encoded = (boolean) TRUE; "
+        "subtitle/x-kate; application/x-kate")
+    );
+
+static void gst_ogg_mux_finalize (GObject * object);
+
+static GstFlowReturn
+gst_ogg_mux_collected (GstCollectPads * pads, GstOggMux * ogg_mux);
+static gboolean gst_ogg_mux_handle_src_event (GstPad * pad, GstEvent * event);
+static GstPad *gst_ogg_mux_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_ogg_mux_release_pad (GstElement * element, GstPad * pad);
+
+static void gst_ogg_mux_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_ogg_mux_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_ogg_mux_change_state (GstElement * element,
+    GstStateChange transition);
+
+/*static guint gst_ogg_mux_signals[LAST_SIGNAL] = { 0 }; */
+#define gst_ogg_mux_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstOggMux, gst_ogg_mux, GST_TYPE_ELEMENT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));
+
+static void
+gst_ogg_mux_class_init (GstOggMuxClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_ogg_mux_finalize;
+  gobject_class->get_property = gst_ogg_mux_get_property;
+  gobject_class->set_property = gst_ogg_mux_set_property;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sink_factory));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Ogg muxer", "Codec/Muxer",
+      "mux ogg streams (info about ogg: http://xiph.org)",
+      "Wim Taymans <wim@fluendo.com>");
+
+  gstelement_class->request_new_pad = gst_ogg_mux_request_new_pad;
+  gstelement_class->release_pad = gst_ogg_mux_release_pad;
+
+  g_object_class_install_property (gobject_class, ARG_MAX_DELAY,
+      g_param_spec_uint64 ("max-delay", "Max delay",
+          "Maximum delay in multiplexing streams", 0, G_MAXUINT64,
+          DEFAULT_MAX_DELAY,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_MAX_PAGE_DELAY,
+      g_param_spec_uint64 ("max-page-delay", "Max page delay",
+          "Maximum delay for sending out a page", 0, G_MAXUINT64,
+          DEFAULT_MAX_PAGE_DELAY,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_MAX_TOLERANCE,
+      g_param_spec_uint64 ("max-tolerance", "Max time tolerance",
+          "Maximum timestamp difference for maintaining perfect granules",
+          0, G_MAXUINT64, DEFAULT_MAX_TOLERANCE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_SKELETON,
+      g_param_spec_boolean ("skeleton", "Skeleton",
+          "Whether to include a Skeleton track",
+          DEFAULT_SKELETON,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->change_state = gst_ogg_mux_change_state;
+
+}
+
+#if 0
+static const GstEventMask *
+gst_ogg_mux_get_sink_event_masks (GstPad * pad)
+{
+  static const GstEventMask gst_ogg_mux_sink_event_masks[] = {
+    {GST_EVENT_EOS, 0},
+    {GST_EVENT_DISCONTINUOUS, 0},
+    {0,}
+  };
+
+  return gst_ogg_mux_sink_event_masks;
+}
+#endif
+
+static void
+gst_ogg_mux_clear (GstOggMux * ogg_mux)
+{
+  ogg_mux->pulling = NULL;
+  ogg_mux->need_headers = TRUE;
+  ogg_mux->delta_pad = NULL;
+  ogg_mux->offset = 0;
+  ogg_mux->next_ts = 0;
+  ogg_mux->last_ts = GST_CLOCK_TIME_NONE;
+}
+
+static void
+gst_ogg_mux_init (GstOggMux * ogg_mux)
+{
+  GstElementClass *klass = GST_ELEMENT_GET_CLASS (ogg_mux);
+
+  ogg_mux->srcpad =
+      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
+          "src"), "src");
+  gst_pad_set_event_function (ogg_mux->srcpad, gst_ogg_mux_handle_src_event);
+  gst_element_add_pad (GST_ELEMENT (ogg_mux), ogg_mux->srcpad);
+
+  GST_OBJECT_FLAG_SET (GST_ELEMENT (ogg_mux), GST_OGG_FLAG_BOS);
+
+  /* seed random number generator for creation of serial numbers */
+  srand (time (NULL));
+
+  ogg_mux->collect = gst_collect_pads_new ();
+  gst_collect_pads_set_function (ogg_mux->collect,
+      (GstCollectPadsFunction) GST_DEBUG_FUNCPTR (gst_ogg_mux_collected),
+      ogg_mux);
+
+  ogg_mux->max_delay = DEFAULT_MAX_DELAY;
+  ogg_mux->max_page_delay = DEFAULT_MAX_PAGE_DELAY;
+  ogg_mux->max_tolerance = DEFAULT_MAX_TOLERANCE;
+
+  gst_ogg_mux_clear (ogg_mux);
+}
+
+static void
+gst_ogg_mux_finalize (GObject * object)
+{
+  GstOggMux *ogg_mux;
+
+  ogg_mux = GST_OGG_MUX (object);
+
+  if (ogg_mux->collect) {
+    gst_object_unref (ogg_mux->collect);
+    ogg_mux->collect = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_ogg_mux_ogg_pad_destroy_notify (GstCollectData * data)
+{
+  GstOggPadData *oggpad = (GstOggPadData *) data;
+  GstBuffer *buf;
+
+  ogg_stream_clear (&oggpad->map.stream);
+  gst_caps_replace (&oggpad->map.caps, NULL);
+
+  if (oggpad->pagebuffers) {
+    while ((buf = g_queue_pop_head (oggpad->pagebuffers)) != NULL) {
+      gst_buffer_unref (buf);
+    }
+    g_queue_free (oggpad->pagebuffers);
+    oggpad->pagebuffers = NULL;
+  }
+}
+
+static GstPadLinkReturn
+gst_ogg_mux_sinkconnect (GstPad * pad, GstPad * peer)
+{
+  GstOggMux *ogg_mux;
+
+  ogg_mux = GST_OGG_MUX (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (ogg_mux, "sinkconnect triggered on %s", GST_PAD_NAME (pad));
+
+  gst_object_unref (ogg_mux);
+
+  return GST_PAD_LINK_OK;
+}
+
+static gboolean
+gst_ogg_mux_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstOggMux *ogg_mux = GST_OGG_MUX (gst_pad_get_parent (pad));
+  GstOggPadData *ogg_pad = (GstOggPadData *) gst_pad_get_element_private (pad);
+  gboolean ret = FALSE;
+
+  GST_DEBUG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      /* We don't support non time NEWSEGMENT events */
+      if (segment->format != GST_FORMAT_TIME) {
+        gst_event_unref (event);
+        event = NULL;
+        break;
+      }
+
+      gst_segment_copy_into (segment, &ogg_pad->segment);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:{
+      gst_segment_init (&ogg_pad->segment, GST_FORMAT_TIME);
+      break;
+    }
+    case GST_EVENT_TAG:{
+      GstTagList *tags;
+
+      gst_event_parse_tag (event, &tags);
+      tags = gst_tag_list_merge (ogg_pad->tags, tags, GST_TAG_MERGE_APPEND);
+      if (ogg_pad->tags)
+        gst_tag_list_free (ogg_pad->tags);
+      ogg_pad->tags = tags;
+
+      GST_DEBUG_OBJECT (ogg_mux, "Got tags %" GST_PTR_FORMAT, ogg_pad->tags);
+      break;
+    }
+    default:
+      break;
+  }
+
+  /* now GstCollectPads can take care of the rest, e.g. EOS */
+  if (event != NULL)
+    ret = ogg_pad->collect_event (pad, event);
+
+  gst_object_unref (ogg_mux);
+  return ret;
+}
+
+static gboolean
+gst_ogg_mux_is_serialno_present (GstOggMux * ogg_mux, guint32 serialno)
+{
+  GSList *walk;
+
+  walk = ogg_mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad = (GstOggPadData *) walk->data;
+    if (pad->map.serialno == serialno)
+      return TRUE;
+    walk = walk->next;
+  }
+
+  return FALSE;
+}
+
+static guint32
+gst_ogg_mux_generate_serialno (GstOggMux * ogg_mux)
+{
+  guint32 serialno;
+
+  do {
+    serialno = g_random_int_range (0, G_MAXINT32);
+  } while (gst_ogg_mux_is_serialno_present (ogg_mux, serialno));
+
+  return serialno;
+}
+
+static GstPad *
+gst_ogg_mux_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * req_name, const GstCaps * caps)
+{
+  GstOggMux *ogg_mux;
+  GstPad *newpad;
+  GstElementClass *klass;
+
+  g_return_val_if_fail (templ != NULL, NULL);
+
+  if (templ->direction != GST_PAD_SINK)
+    goto wrong_direction;
+
+  g_return_val_if_fail (GST_IS_OGG_MUX (element), NULL);
+  ogg_mux = GST_OGG_MUX (element);
+
+  klass = GST_ELEMENT_GET_CLASS (element);
+
+  if (templ != gst_element_class_get_pad_template (klass, "sink_%d"))
+    goto wrong_template;
+
+  {
+    guint32 serial;
+    gchar *name;
+
+    if (req_name == NULL || strlen (req_name) < 6) {
+      /* no name given when requesting the pad, use random serial number */
+      serial = gst_ogg_mux_generate_serialno (ogg_mux);
+    } else {
+      /* parse serial number from requested padname */
+      unsigned long long_serial;
+      char *endptr = NULL;
+      long_serial = strtoul (&req_name[5], &endptr, 10);
+      if ((endptr && *endptr) || (long_serial & ~0xffffffff)) {
+        GST_WARNING_OBJECT (ogg_mux, "Invalid serial number specification: %s",
+            req_name + 5);
+        return NULL;
+      }
+      serial = (guint32) long_serial;
+    }
+    /* create new pad with the name */
+    GST_DEBUG_OBJECT (ogg_mux, "Creating new pad for serial %d", serial);
+    name = g_strdup_printf ("sink_%d", serial);
+    newpad = gst_pad_new_from_template (templ, name);
+    g_free (name);
+
+    /* construct our own wrapper data structure for the pad to
+     * keep track of its status */
+    {
+      GstOggPadData *oggpad;
+
+      oggpad = (GstOggPadData *)
+          gst_collect_pads_add_pad_full (ogg_mux->collect, newpad,
+          sizeof (GstOggPadData), gst_ogg_mux_ogg_pad_destroy_notify);
+      ogg_mux->active_pads++;
+
+      oggpad->map.serialno = serial;
+      ogg_stream_init (&oggpad->map.stream, oggpad->map.serialno);
+      oggpad->packetno = 0;
+      oggpad->pageno = 0;
+      oggpad->eos = FALSE;
+      /* we assume there will be some control data first for this pad */
+      oggpad->state = GST_OGG_PAD_STATE_CONTROL;
+      oggpad->new_page = TRUE;
+      oggpad->first_delta = FALSE;
+      oggpad->prev_delta = FALSE;
+      oggpad->data_pushed = FALSE;
+      oggpad->pagebuffers = g_queue_new ();
+      oggpad->map.headers = NULL;
+      oggpad->map.queued = NULL;
+      oggpad->next_granule = 0;
+      oggpad->keyframe_granule = -1;
+
+      gst_segment_init (&oggpad->segment, GST_FORMAT_TIME);
+
+      oggpad->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (newpad);
+      gst_pad_set_event_function (newpad,
+          GST_DEBUG_FUNCPTR (gst_ogg_mux_sink_event));
+    }
+  }
+
+  /* setup some pad functions */
+  gst_pad_set_link_function (newpad, gst_ogg_mux_sinkconnect);
+
+  /* dd the pad to the element */
+  gst_element_add_pad (element, newpad);
+
+  return newpad;
+
+  /* ERRORS */
+wrong_direction:
+  {
+    g_warning ("ogg_mux: request pad that is not a SINK pad\n");
+    return NULL;
+  }
+wrong_template:
+  {
+    g_warning ("ogg_mux: this is not our template!\n");
+    return NULL;
+  }
+}
+
+static void
+gst_ogg_mux_release_pad (GstElement * element, GstPad * pad)
+{
+  GstOggMux *ogg_mux;
+
+  ogg_mux = GST_OGG_MUX (gst_pad_get_parent (pad));
+
+  gst_collect_pads_remove_pad (ogg_mux->collect, pad);
+  gst_element_remove_pad (element, pad);
+
+  gst_object_unref (ogg_mux);
+}
+
+/* handle events */
+static gboolean
+gst_ogg_mux_handle_src_event (GstPad * pad, GstEvent * event)
+{
+  GstEventType type;
+
+  type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
+
+  switch (type) {
+    case GST_EVENT_SEEK:
+      /* disable seeking for now */
+      return FALSE;
+    default:
+      break;
+  }
+
+  return gst_pad_event_default (pad, event);
+}
+
+static GstBuffer *
+gst_ogg_mux_buffer_from_page (GstOggMux * mux, ogg_page * page, gboolean delta)
+{
+  GstBuffer *buffer;
+
+  /* allocate space for header and body */
+  buffer = gst_buffer_new_and_alloc (page->header_len + page->body_len);
+  gst_buffer_fill (buffer, 0, page->header, page->header_len);
+  gst_buffer_fill (buffer, page->header_len, page->body, page->body_len);
+
+  /* Here we set granulepos as our OFFSET_END to give easy direct access to
+   * this value later. Before we push it, we reset this to OFFSET + SIZE
+   * (see gst_ogg_mux_push_buffer). */
+  GST_BUFFER_OFFSET_END (buffer) = ogg_page_granulepos (page);
+  if (delta)
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+
+  GST_LOG_OBJECT (mux, GST_GP_FORMAT
+      " created buffer %p from ogg page",
+      GST_GP_CAST (ogg_page_granulepos (page)), buffer);
+
+  return buffer;
+}
+
+static GstFlowReturn
+gst_ogg_mux_push_buffer (GstOggMux * mux, GstBuffer * buffer,
+    GstOggPadData * oggpad)
+{
+  /* fix up OFFSET and OFFSET_END again */
+  GST_BUFFER_OFFSET (buffer) = mux->offset;
+  mux->offset += gst_buffer_get_size (buffer);
+  GST_BUFFER_OFFSET_END (buffer) = mux->offset;
+
+  /* Ensure we have monotonically increasing timestamps in the output. */
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
+    gint64 run_time = GST_BUFFER_TIMESTAMP (buffer);
+    if (mux->last_ts != GST_CLOCK_TIME_NONE && run_time < mux->last_ts)
+      GST_BUFFER_TIMESTAMP (buffer) = mux->last_ts;
+    else
+      mux->last_ts = run_time;
+  }
+
+  return gst_pad_push (mux->srcpad, buffer);
+}
+
+/* if all queues have at least one page, dequeue the page with the lowest
+ * timestamp */
+static gboolean
+gst_ogg_mux_dequeue_page (GstOggMux * mux, GstFlowReturn * flowret)
+{
+  GSList *walk;
+  GstOggPadData *opad = NULL;   /* "oldest" pad */
+  GstClockTime oldest = GST_CLOCK_TIME_NONE;
+  GstBuffer *buf = NULL;
+  gboolean ret = FALSE;
+
+  *flowret = GST_FLOW_OK;
+
+  walk = mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad = (GstOggPadData *) walk->data;
+
+    /* We need each queue to either be at EOS, or have one or more pages
+     * available with a set granulepos (i.e. not -1), otherwise we don't have
+     * enough data yet to determine which stream needs to go next for correct
+     * time ordering. */
+    if (pad->pagebuffers->length == 0) {
+      if (pad->eos) {
+        GST_LOG_OBJECT (pad->collect.pad,
+            "pad is EOS, skipping for dequeue decision");
+      } else {
+        GST_LOG_OBJECT (pad->collect.pad,
+            "no pages in this queue, can't dequeue");
+        return FALSE;
+      }
+    } else {
+      /* We then need to check for a non-negative granulepos */
+      int i;
+      gboolean valid = FALSE;
+
+      for (i = 0; i < pad->pagebuffers->length; i++) {
+        buf = g_queue_peek_nth (pad->pagebuffers, i);
+        /* Here we check the OFFSET_END, which is actually temporarily the
+         * granulepos value for this buffer */
+        if (GST_BUFFER_OFFSET_END (buf) != -1) {
+          valid = TRUE;
+          break;
+        }
+      }
+      if (!valid) {
+        GST_LOG_OBJECT (pad->collect.pad,
+            "No page timestamps in queue, can't dequeue");
+        return FALSE;
+      }
+    }
+
+    walk = g_slist_next (walk);
+  }
+
+  walk = mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad = (GstOggPadData *) walk->data;
+
+    /* any page with a granulepos of -1 can be pushed immediately.
+     * TODO: it CAN be, but it seems silly to do so? */
+    buf = g_queue_peek_head (pad->pagebuffers);
+    while (buf && GST_BUFFER_OFFSET_END (buf) == -1) {
+      GST_LOG_OBJECT (pad->collect.pad, "[gp        -1] pushing page");
+      g_queue_pop_head (pad->pagebuffers);
+      *flowret = gst_ogg_mux_push_buffer (mux, buf, pad);
+      buf = g_queue_peek_head (pad->pagebuffers);
+      ret = TRUE;
+    }
+
+    if (buf) {
+      /* if no oldest buffer yet, take this one */
+      if (oldest == GST_CLOCK_TIME_NONE) {
+        GST_LOG_OBJECT (mux, "no oldest yet, taking buffer %p from pad %"
+            GST_PTR_FORMAT " with gp time %" GST_TIME_FORMAT,
+            buf, pad->collect.pad, GST_TIME_ARGS (GST_BUFFER_OFFSET (buf)));
+        oldest = GST_BUFFER_OFFSET (buf);
+        opad = pad;
+      } else {
+        /* if we have an oldest, compare with this one */
+        if (GST_BUFFER_OFFSET (buf) < oldest) {
+          GST_LOG_OBJECT (mux, "older buffer %p, taking from pad %"
+              GST_PTR_FORMAT " with gp time %" GST_TIME_FORMAT,
+              buf, pad->collect.pad, GST_TIME_ARGS (GST_BUFFER_OFFSET (buf)));
+          oldest = GST_BUFFER_OFFSET (buf);
+          opad = pad;
+        }
+      }
+    }
+    walk = g_slist_next (walk);
+  }
+
+  if (oldest != GST_CLOCK_TIME_NONE) {
+    g_assert (opad);
+    buf = g_queue_pop_head (opad->pagebuffers);
+    GST_LOG_OBJECT (opad->collect.pad,
+        GST_GP_FORMAT " pushing oldest page buffer %p (granulepos time %"
+        GST_TIME_FORMAT ")", GST_BUFFER_OFFSET_END (buf), buf,
+        GST_TIME_ARGS (GST_BUFFER_OFFSET (buf)));
+    *flowret = gst_ogg_mux_push_buffer (mux, buf, opad);
+    ret = TRUE;
+  }
+
+  return ret;
+}
+
+/* put the given ogg page on a per-pad queue, timestamping it correctly.
+ * after that, dequeue and push as many pages as possible.
+ * Caller should make sure:
+ * pad->timestamp     was set with the timestamp of the first packet put
+ *                    on the page
+ * pad->timestamp_end was set with the timestamp + duration of the last packet
+ *                    put on the page
+ * pad->gp_time       was set with the time matching the gp of the last
+ *                    packet put on the page
+ *
+ * will also reset timestamp and timestamp_end, so caller func can restart
+ * counting.
+ */
+static GstFlowReturn
+gst_ogg_mux_pad_queue_page (GstOggMux * mux, GstOggPadData * pad,
+    ogg_page * page, gboolean delta)
+{
+  GstFlowReturn ret;
+  GstBuffer *buffer = gst_ogg_mux_buffer_from_page (mux, page, delta);
+
+  /* take the timestamp of the first packet on this page */
+  GST_BUFFER_TIMESTAMP (buffer) = pad->timestamp;
+  GST_BUFFER_DURATION (buffer) = pad->timestamp_end - pad->timestamp;
+  /* take the gp time of the last completed packet on this page */
+  GST_BUFFER_OFFSET (buffer) = pad->gp_time;
+
+  /* the next page will start where the current page's end time leaves off */
+  pad->timestamp = pad->timestamp_end;
+
+  g_queue_push_tail (pad->pagebuffers, buffer);
+  GST_LOG_OBJECT (pad->collect.pad, GST_GP_FORMAT
+      " queued buffer page %p (gp time %"
+      GST_TIME_FORMAT ", timestamp %" GST_TIME_FORMAT
+      "), %d page buffers queued", GST_GP_CAST (ogg_page_granulepos (page)),
+      buffer, GST_TIME_ARGS (GST_BUFFER_OFFSET (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      g_queue_get_length (pad->pagebuffers));
+
+  while (gst_ogg_mux_dequeue_page (mux, &ret)) {
+    if (ret != GST_FLOW_OK)
+      break;
+  }
+
+  return ret;
+}
+
+/*
+ * Given two pads, compare the buffers queued on it.
+ * Returns:
+ *  0 if they have an equal priority
+ * -1 if the first is better
+ *  1 if the second is better
+ * Priority decided by: a) validity, b) older timestamp, c) smaller number
+ * of muxed pages
+ */
+static gint
+gst_ogg_mux_compare_pads (GstOggMux * ogg_mux, GstOggPadData * first,
+    GstOggPadData * second)
+{
+  guint64 firsttime, secondtime;
+
+  /* if the first pad doesn't contain anything or is even NULL, return
+   * the second pad as best candidate and vice versa */
+  if (first == NULL)
+    return 1;
+  if (second == NULL)
+    return -1;
+
+  /* no timestamp on first buffer, it must go first */
+  firsttime = GST_BUFFER_TIMESTAMP (first->buffer);
+  if (firsttime == GST_CLOCK_TIME_NONE)
+    return -1;
+
+  /* no timestamp on second buffer, it must go first */
+  secondtime = GST_BUFFER_TIMESTAMP (second->buffer);
+  if (secondtime == GST_CLOCK_TIME_NONE)
+    return 1;
+
+  /* first buffer has higher timestamp, second one should go first */
+  if (secondtime < firsttime)
+    return 1;
+  /* second buffer has higher timestamp, first one should go first */
+  else if (secondtime > firsttime)
+    return -1;
+  else {
+    /* buffers with equal timestamps, prefer the pad that has the
+     * least number of pages muxed */
+    if (second->pageno < first->pageno)
+      return 1;
+    else if (second->pageno > first->pageno)
+      return -1;
+  }
+
+  /* same priority if all of the above failed */
+  return 0;
+}
+
+static GstBuffer *
+gst_ogg_mux_decorate_buffer (GstOggMux * ogg_mux, GstOggPadData * pad,
+    GstBuffer * buf)
+{
+  GstClockTime time;
+  gint64 duration, granule, limit;
+  GstClockTime next_time;
+  GstClockTimeDiff diff;
+  ogg_packet packet;
+  gsize size;
+
+  /* ensure messing with metadata is ok */
+  buf = gst_buffer_make_writable (buf);
+
+  /* convert time to running time, so we need no longer bother about that */
+  time = GST_BUFFER_TIMESTAMP (buf);
+  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (time))) {
+    time = gst_segment_to_running_time (&pad->segment, GST_FORMAT_TIME, time);
+    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) {
+      gst_buffer_unref (buf);
+      return NULL;
+    } else {
+      GST_BUFFER_TIMESTAMP (buf) = time;
+    }
+  }
+
+  /* now come up with granulepos stuff corresponding to time */
+  if (!pad->have_type ||
+      pad->map.granulerate_n <= 0 || pad->map.granulerate_d <= 0)
+    goto no_granule;
+
+  packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  duration = gst_ogg_stream_get_packet_duration (&pad->map, &packet);
+  gst_buffer_unmap (buf, packet.packet, size);
+
+  /* give up if no duration can be determined, relying on upstream */
+  if (G_UNLIKELY (duration < 0)) {
+    /* well, if some day we really could handle sparse input ... */
+    if (pad->map.is_sparse) {
+      limit = 1;
+      diff = 2;
+      goto resync;
+    }
+    GST_WARNING_OBJECT (pad->collect.pad,
+        "failed to determine packet duration");
+    goto no_granule;
+  }
+
+  GST_LOG_OBJECT (pad->collect.pad, "buffer ts %" GST_TIME_FORMAT
+      ", duration %" GST_TIME_FORMAT ", granule duration %" G_GINT64_FORMAT,
+      GST_TIME_ARGS (time), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
+      duration);
+
+  /* determine granule corresponding to time,
+   * using the inverse of oggdemux' granule -> time */
+
+  /* see if interpolated granule matches good enough */
+  granule = pad->next_granule;
+  next_time = gst_ogg_stream_granule_to_time (&pad->map, pad->next_granule);
+  diff = GST_CLOCK_DIFF (next_time, time);
+
+  /* we tolerate deviation up to configured or within granule granularity */
+  limit = gst_ogg_stream_granule_to_time (&pad->map, 1) / 2;
+  limit = MAX (limit, ogg_mux->max_tolerance);
+
+  GST_LOG_OBJECT (pad->collect.pad, "expected granule %" G_GINT64_FORMAT " == "
+      "time %" GST_TIME_FORMAT " --> ts diff %" GST_TIME_FORMAT
+      " < tolerance %" GST_TIME_FORMAT " (?)",
+      granule, GST_TIME_ARGS (next_time), GST_TIME_ARGS (ABS (diff)),
+      GST_TIME_ARGS (limit));
+
+resync:
+  /* if not good enough, determine granule based on time */
+  if (diff > limit || diff < -limit) {
+    granule = gst_util_uint64_scale_round (time, pad->map.granulerate_n,
+        GST_SECOND * pad->map.granulerate_d);
+    GST_DEBUG_OBJECT (pad->collect.pad,
+        "resyncing to determined granule %" G_GINT64_FORMAT, granule);
+  }
+
+  if (pad->map.is_ogm || pad->map.is_sparse) {
+    pad->next_granule = granule;
+  } else {
+    granule += duration;
+    pad->next_granule = granule;
+  }
+
+  /* track previous keyframe */
+  if (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT))
+    pad->keyframe_granule = granule;
+
+  /* determine corresponding time and granulepos */
+  GST_BUFFER_OFFSET (buf) = gst_ogg_stream_granule_to_time (&pad->map, granule);
+  GST_BUFFER_OFFSET_END (buf) =
+      gst_ogg_stream_granule_to_granulepos (&pad->map, granule,
+      pad->keyframe_granule);
+
+  return buf;
+
+  /* ERRORS */
+no_granule:
+  {
+    GST_DEBUG_OBJECT (pad->collect.pad, "could not determine granulepos, "
+        "falling back to upstream provided metadata");
+    return buf;
+  }
+}
+
+
+/* make sure at least one buffer is queued on all pads, two if possible
+ * 
+ * if pad->buffer == NULL, pad->next_buffer !=  NULL, then
+ *   we do not know if the buffer is the last or not
+ * if pad->buffer != NULL, pad->next_buffer != NULL, then
+ *   pad->buffer is not the last buffer for the pad
+ * if pad->buffer != NULL, pad->next_buffer == NULL, then
+ *   pad->buffer if the last buffer for the pad
+ * 
+ * returns a pointer to an oggpad that holds the best buffer, or
+ * NULL when no pad was usable. "best" means the buffer marked
+ * with the lowest timestamp. If best->buffer == NULL then either
+ * we're at EOS (popped = FALSE), or a buffer got dropped, so retry. */
+static GstOggPadData *
+gst_ogg_mux_queue_pads (GstOggMux * ogg_mux, gboolean * popped)
+{
+  GstOggPadData *bestpad = NULL;
+  GSList *walk;
+
+  *popped = FALSE;
+
+  /* try to make sure we have a buffer from each usable pad first */
+  walk = ogg_mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad;
+    GstCollectData *data;
+
+    data = (GstCollectData *) walk->data;
+    pad = (GstOggPadData *) data;
+
+    walk = g_slist_next (walk);
+
+    GST_LOG_OBJECT (data->pad, "looking at pad for buffer");
+
+    /* try to get a new buffer for this pad if needed and possible */
+    if (pad->buffer == NULL) {
+      GstBuffer *buf;
+
+      buf = gst_collect_pads_pop (ogg_mux->collect, data);
+      GST_LOG_OBJECT (data->pad, "popped buffer %" GST_PTR_FORMAT, buf);
+
+      /* On EOS we get a NULL buffer */
+      if (buf != NULL) {
+        *popped = TRUE;
+
+        if (ogg_mux->delta_pad == NULL &&
+            GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT))
+          ogg_mux->delta_pad = pad;
+
+        /* if we need headers */
+        if (pad->state == GST_OGG_PAD_STATE_CONTROL) {
+          /* and we have one */
+          ogg_packet packet;
+          gboolean is_header;
+          gsize size;
+
+          packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+          packet.bytes = size;
+
+          /* if we're not yet in data mode, ensure we're setup on the first packet */
+          if (!pad->have_type) {
+            GstCaps *caps;
+
+            /* Use headers in caps, if any; this will allow us to be resilient
+             * to starting streams on the fly, and some streams (like VP8
+             * at least) do not send headers packets, as other muxers don't
+             * expect/need them. */
+            caps = gst_pad_get_current_caps (GST_PAD_CAST (data->pad));
+            pad->have_type =
+                gst_ogg_stream_setup_map_from_caps_headers (&pad->map, caps);
+
+            if (!pad->have_type) {
+              /* fallback on the packet */
+              pad->have_type = gst_ogg_stream_setup_map (&pad->map, &packet);
+            }
+            if (!pad->have_type) {
+              GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream "
+                  "(pad caps: %" GST_PTR_FORMAT ")", caps);
+            } else {
+              GST_DEBUG_OBJECT (pad, "caps detected: %" GST_PTR_FORMAT,
+                  pad->map.caps);
+            }
+            if (caps)
+              gst_caps_unref (caps);
+          }
+
+          if (pad->have_type)
+            is_header = gst_ogg_stream_packet_is_header (&pad->map, &packet);
+          else                  /* fallback (FIXME 0.11: remove IN_CAPS hack) */
+            is_header = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
+
+          gst_buffer_unmap (buf, packet.packet, size);
+
+          if (is_header) {
+            GST_DEBUG_OBJECT (ogg_mux,
+                "got header buffer in control state, ignoring");
+            /* just ignore */
+            pad->map.n_header_packets_seen++;
+            gst_buffer_unref (buf);
+            buf = NULL;
+          } else {
+            GST_DEBUG_OBJECT (ogg_mux,
+                "got data buffer in control state, switching to data mode");
+            /* this is a data buffer so switch to data state */
+            pad->state = GST_OGG_PAD_STATE_DATA;
+
+            /* check if this type of stream allows generating granulepos
+             * metadata here, if not, upstream will have to provide */
+            if (gst_ogg_stream_granule_to_granulepos (&pad->map, 1, 1) < 0) {
+              GST_WARNING_OBJECT (data->pad, "can not generate metadata; "
+                  "relying on upstream");
+              /* disable metadata code path, otherwise not used anyway */
+              pad->map.granulerate_n = 0;
+            }
+          }
+        }
+
+        /* so now we should have a real data packet;
+         * see that it is properly decorated */
+        if (G_LIKELY (buf)) {
+          buf = gst_ogg_mux_decorate_buffer (ogg_mux, pad, buf);
+          if (G_UNLIKELY (!buf))
+            GST_DEBUG_OBJECT (data->pad, "buffer clipped");
+        }
+      }
+
+      pad->buffer = buf;
+    }
+
+    /* we should have a buffer now, see if it is the best pad to
+     * pull on */
+    if (pad->buffer) {
+      if (gst_ogg_mux_compare_pads (ogg_mux, bestpad, pad) > 0) {
+        GST_LOG_OBJECT (data->pad,
+            "new best pad, with buffer %" GST_PTR_FORMAT, pad->buffer);
+
+        bestpad = pad;
+      }
+    }
+  }
+
+  return bestpad;
+}
+
+static GList *
+gst_ogg_mux_get_headers (GstOggPadData * pad)
+{
+  GList *res = NULL;
+  GstStructure *structure;
+  GstCaps *caps;
+  GstPad *thepad;
+
+  thepad = pad->collect.pad;
+
+  GST_LOG_OBJECT (thepad, "getting headers");
+
+  caps = gst_pad_get_current_caps (thepad);
+  if (caps != NULL) {
+    const GValue *streamheader;
+
+    structure = gst_caps_get_structure (caps, 0);
+    streamheader = gst_structure_get_value (structure, "streamheader");
+    if (streamheader != NULL) {
+      GST_LOG_OBJECT (thepad, "got header");
+      if (G_VALUE_TYPE (streamheader) == GST_TYPE_ARRAY) {
+        GArray *bufarr = g_value_peek_pointer (streamheader);
+        gint i;
+
+        GST_LOG_OBJECT (thepad, "got fixed list");
+
+        for (i = 0; i < bufarr->len; i++) {
+          GValue *bufval = &g_array_index (bufarr, GValue, i);
+
+          GST_LOG_OBJECT (thepad, "item %d", i);
+          if (G_VALUE_TYPE (bufval) == GST_TYPE_BUFFER) {
+            GstBuffer *buf = g_value_peek_pointer (bufval);
+
+            GST_LOG_OBJECT (thepad, "adding item %d to header list", i);
+
+            gst_buffer_ref (buf);
+            res = g_list_append (res, buf);
+          }
+        }
+      } else {
+        GST_LOG_OBJECT (thepad, "streamheader is not fixed list");
+      }
+
+    } else if (gst_structure_has_name (structure, "video/x-dirac")) {
+      res = g_list_append (res, pad->buffer);
+      pad->buffer = NULL;
+    } else {
+      GST_LOG_OBJECT (thepad, "caps don't have streamheader");
+    }
+    gst_caps_unref (caps);
+  } else {
+    GST_LOG_OBJECT (thepad, "got empty caps as negotiated format");
+  }
+  return res;
+}
+
+static GstCaps *
+gst_ogg_mux_set_header_on_caps (GstCaps * caps, GList * buffers)
+{
+  GstStructure *structure;
+  GValue array = { 0 };
+  GList *walk = buffers;
+
+  caps = gst_caps_make_writable (caps);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* put buffers in a fixed list */
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  while (walk) {
+    GstBuffer *buf = GST_BUFFER (walk->data);
+    GstBuffer *copy;
+    GValue value = { 0 };
+
+    walk = walk->next;
+
+    /* mark buffer */
+    GST_LOG ("Setting IN_CAPS on buffer of length %" G_GSIZE_FORMAT,
+        gst_buffer_get_size (buf));
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
+
+    g_value_init (&value, GST_TYPE_BUFFER);
+    copy = gst_buffer_copy (buf);
+    gst_value_set_buffer (&value, copy);
+    gst_buffer_unref (copy);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+  }
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&array);
+
+  return caps;
+}
+
+static void
+gst_ogg_mux_create_header_packet_with_flags (ogg_packet * packet,
+    gboolean bos, gboolean eos)
+{
+  packet->granulepos = 0;
+  /* mark BOS and packet number */
+  packet->b_o_s = bos;
+  /* mark EOS */
+  packet->e_o_s = eos;
+}
+
+static void
+gst_ogg_mux_create_header_packet (ogg_packet * packet, GstOggPadData * pad)
+{
+  gst_ogg_mux_create_header_packet_with_flags (packet, pad->packetno == 0, 0);
+  packet->packetno = pad->packetno++;
+}
+
+static void
+gst_ogg_mux_submit_skeleton_header_packet (GstOggMux * mux,
+    ogg_stream_state * os, GstBuffer * buf, gboolean bos, gboolean eos)
+{
+  ogg_packet packet;
+  gsize size;
+
+  packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  gst_ogg_mux_create_header_packet_with_flags (&packet, bos, eos);
+  ogg_stream_packetin (os, &packet);
+  gst_buffer_unref (buf);
+}
+
+static void
+gst_ogg_mux_make_fishead (GstOggMux * mux, ogg_stream_state * os)
+{
+  GstByteWriter bw;
+  GstBuffer *fishead;
+
+  GST_DEBUG_OBJECT (mux, "Creating fishead");
+
+  gst_byte_writer_init_with_size (&bw, 64, TRUE);
+  gst_byte_writer_put_string_utf8 (&bw, "fishead");
+  gst_byte_writer_put_int16_le (&bw, 3);        /* version major */
+  gst_byte_writer_put_int16_le (&bw, 0);        /* version minor */
+  gst_byte_writer_put_int64_le (&bw, 0);        /* presentation time numerator */
+  gst_byte_writer_put_int64_le (&bw, 1000);     /* ...and denominator */
+  gst_byte_writer_put_int64_le (&bw, 0);        /* base time numerator */
+  gst_byte_writer_put_int64_le (&bw, 1000);     /* ...and denominator */
+  gst_byte_writer_fill (&bw, ' ', 20);  /* UTC time */
+  g_assert (gst_byte_writer_get_pos (&bw) == 64);
+  fishead = gst_byte_writer_reset_and_get_buffer (&bw);
+  gst_ogg_mux_submit_skeleton_header_packet (mux, os, fishead, 1, 0);
+}
+
+static void
+gst_ogg_mux_byte_writer_put_string_utf8 (GstByteWriter * bw, const char *s)
+{
+  gst_byte_writer_put_data (bw, (const guint8 *) s, strlen (s));
+}
+
+static void
+gst_ogg_mux_add_fisbone_message_header (GstOggMux * mux, GstByteWriter * bw,
+    const char *tag, const char *value)
+{
+  /* It is valid to pass NULL as the value to omit the tag */
+  if (!value)
+    return;
+  GST_DEBUG_OBJECT (mux, "Adding fisbone message header %s: %s", tag, value);
+  gst_ogg_mux_byte_writer_put_string_utf8 (bw, tag);
+  gst_ogg_mux_byte_writer_put_string_utf8 (bw, ": ");
+  gst_ogg_mux_byte_writer_put_string_utf8 (bw, value);
+  gst_ogg_mux_byte_writer_put_string_utf8 (bw, "\r\n");
+}
+
+static void
+gst_ogg_mux_add_fisbone_message_header_from_tags (GstOggMux * mux,
+    GstByteWriter * bw, const char *header, const char *tag,
+    const GstTagList * tags)
+{
+  GString *s;
+  guint size = gst_tag_list_get_tag_size (tags, tag), n;
+  GST_DEBUG_OBJECT (mux, "Found %u tags for name %s", size, tag);
+  if (size == 0)
+    return;
+  s = g_string_new ("");
+  for (n = 0; n < size; ++n) {
+    gchar *tmp;
+    if (n)
+      g_string_append (s, ", ");
+    gst_tag_list_get_string_index (tags, tag, n, &tmp);
+    g_string_append (s, tmp);
+    g_free (tmp);
+  }
+  gst_ogg_mux_add_fisbone_message_header (mux, bw, header, s->str);
+  g_string_free (s, TRUE);
+}
+
+/* This is a basic placeholder to generate roles for the tracks.
+   For tracks with more than one video, both video tracks will get
+   tagged with a "video/main" role, but we have no way of knowing
+   which one is the main one, if any. We could just pick one. For
+   audio, it's more complicated as we don't know which is music,
+   which is dubbing, etc. For kate, we could take a pretty good
+   guess based on the category, as role essentially is category.
+   For now, leave this as is. */
+static const char *
+gst_ogg_mux_get_default_role (GstOggPadData * pad)
+{
+  const char *type = gst_ogg_stream_get_media_type (&pad->map);
+  if (type) {
+    if (!strncmp (type, "video/", strlen ("video/")))
+      return "video/main";
+    if (!strncmp (type, "audio/", strlen ("audio/")))
+      return "audio/main";
+    if (!strcmp (type + strlen (type) - strlen ("kate"), "kate"))
+      return "text/caption";
+  }
+  return NULL;
+}
+
+static void
+gst_ogg_mux_make_fisbone (GstOggMux * mux, ogg_stream_state * os,
+    GstOggPadData * pad)
+{
+  GstByteWriter bw;
+
+  GST_DEBUG_OBJECT (mux,
+      "Creating %s fisbone for serial %08x",
+      gst_ogg_stream_get_media_type (&pad->map), pad->map.serialno);
+
+  gst_byte_writer_init (&bw);
+  gst_byte_writer_put_string_utf8 (&bw, "fisbone");
+  gst_byte_writer_put_int32_le (&bw, 44);       /* offset to message headers */
+  gst_byte_writer_put_uint32_le (&bw, pad->map.serialno);
+  gst_byte_writer_put_uint32_le (&bw, pad->map.n_header_packets);
+  gst_byte_writer_put_uint64_le (&bw, pad->map.granulerate_n);
+  gst_byte_writer_put_uint64_le (&bw, pad->map.granulerate_d);
+  gst_byte_writer_put_uint64_le (&bw, 0);       /* base granule */
+  gst_byte_writer_put_uint32_le (&bw, pad->map.preroll);
+  gst_byte_writer_put_uint8 (&bw, pad->map.granuleshift);
+  gst_byte_writer_fill (&bw, 0, 3);     /* padding */
+  /* message header fields - MIME type for now */
+  gst_ogg_mux_add_fisbone_message_header (mux, &bw, "Content-Type",
+      gst_ogg_stream_get_media_type (&pad->map));
+  gst_ogg_mux_add_fisbone_message_header (mux, &bw, "Role",
+      gst_ogg_mux_get_default_role (pad));
+  gst_ogg_mux_add_fisbone_message_header_from_tags (mux, &bw, "Language",
+      GST_TAG_LANGUAGE_CODE, pad->tags);
+  gst_ogg_mux_add_fisbone_message_header_from_tags (mux, &bw, "Title",
+      GST_TAG_TITLE, pad->tags);
+
+  gst_ogg_mux_submit_skeleton_header_packet (mux, os,
+      gst_byte_writer_reset_and_get_buffer (&bw), 0, 0);
+}
+
+static void
+gst_ogg_mux_make_fistail (GstOggMux * mux, ogg_stream_state * os)
+{
+  GST_DEBUG_OBJECT (mux, "Creating fistail");
+
+  gst_ogg_mux_submit_skeleton_header_packet (mux, os,
+      gst_buffer_new_and_alloc (0), 0, 1);
+}
+
+/*
+ * For each pad we need to write out one (small) header in one
+ * page that allows decoders to identify the type of the stream.
+ * After that we need to write out all extra info for the decoders.
+ * In the case of a codec that also needs data as configuration, we can
+ * find that info in the streamcaps. 
+ * After writing the headers we must start a new page for the data.
+ */
+static GstFlowReturn
+gst_ogg_mux_send_headers (GstOggMux * mux)
+{
+  GSList *walk;
+  GList *hbufs, *hwalk;
+  GstCaps *caps;
+  GstFlowReturn ret;
+  ogg_page page;
+  ogg_stream_state skeleton_stream;
+
+  hbufs = NULL;
+  ret = GST_FLOW_OK;
+
+  GST_LOG_OBJECT (mux, "collecting headers");
+
+  walk = mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad;
+    GstPad *thepad;
+
+    pad = (GstOggPadData *) walk->data;
+    thepad = pad->collect.pad;
+
+    walk = g_slist_next (walk);
+
+    GST_LOG_OBJECT (mux, "looking at pad %s:%s", GST_DEBUG_PAD_NAME (thepad));
+
+    /* if the pad has no buffer, we don't care */
+    if (pad->buffer == NULL)
+      continue;
+
+    /* now figure out the headers */
+    pad->map.headers = gst_ogg_mux_get_headers (pad);
+  }
+
+  GST_LOG_OBJECT (mux, "creating BOS pages");
+  walk = mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad;
+    GstBuffer *buf;
+    ogg_packet packet;
+    GstPad *thepad;
+    GstCaps *caps;
+    GstStructure *structure;
+    GstBuffer *hbuf;
+    gsize size;
+
+    pad = (GstOggPadData *) walk->data;
+    thepad = pad->collect.pad;
+    caps = gst_pad_get_current_caps (thepad);
+    structure = gst_caps_get_structure (caps, 0);
+
+    walk = walk->next;
+
+    pad->packetno = 0;
+
+    GST_LOG_OBJECT (thepad, "looping over headers");
+
+    if (pad->map.headers) {
+      buf = GST_BUFFER (pad->map.headers->data);
+      pad->map.headers = g_list_remove (pad->map.headers, buf);
+    } else if (pad->buffer) {
+      buf = pad->buffer;
+      gst_buffer_ref (buf);
+    } else {
+      /* fixme -- should be caught in the previous list traversal. */
+      GST_OBJECT_LOCK (thepad);
+      g_critical ("No headers or buffers on pad %s:%s",
+          GST_DEBUG_PAD_NAME (thepad));
+      GST_OBJECT_UNLOCK (thepad);
+      continue;
+    }
+
+    /* create a packet from the buffer */
+    packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+    packet.bytes = size;
+
+    gst_ogg_mux_create_header_packet (&packet, pad);
+
+    /* swap the packet in */
+    ogg_stream_packetin (&pad->map.stream, &packet);
+
+    gst_buffer_unmap (buf, packet.packet, size);
+    gst_buffer_unref (buf);
+
+    GST_LOG_OBJECT (thepad, "flushing out BOS page");
+    if (!ogg_stream_flush (&pad->map.stream, &page))
+      g_critical ("Could not flush BOS page");
+
+    hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+
+    GST_LOG_OBJECT (mux, "swapped out page with mime type %s",
+        gst_structure_get_name (structure));
+
+    /* quick hack: put video pages at the front.
+     * Ideally, we would have a settable enum for which Ogg
+     * profile we work with, and order based on that.
+     * (FIXME: if there is more than one video stream, shouldn't we only put
+     * one's BOS into the first page, followed by an audio stream's BOS, and
+     * only then followed by the remaining video and audio streams?) */
+    if (pad->map.is_video) {
+      GST_DEBUG_OBJECT (thepad, "putting %s page at the front",
+          gst_structure_get_name (structure));
+      hbufs = g_list_prepend (hbufs, hbuf);
+    } else {
+      hbufs = g_list_append (hbufs, hbuf);
+    }
+
+    gst_caps_unref (caps);
+  }
+
+  /* The Skeleton BOS goes first - even before the video that went first before */
+  if (mux->use_skeleton) {
+    ogg_stream_init (&skeleton_stream, gst_ogg_mux_generate_serialno (mux));
+    gst_ogg_mux_make_fishead (mux, &skeleton_stream);
+    while (ogg_stream_flush (&skeleton_stream, &page) > 0) {
+      GstBuffer *hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+      hbufs = g_list_append (hbufs, hbuf);
+    }
+  }
+
+  GST_LOG_OBJECT (mux, "creating next headers");
+  walk = mux->collect->data;
+  while (walk) {
+    GstOggPadData *pad;
+    GstPad *thepad;
+
+    pad = (GstOggPadData *) walk->data;
+    thepad = pad->collect.pad;
+
+    walk = walk->next;
+
+    if (mux->use_skeleton)
+      gst_ogg_mux_make_fisbone (mux, &skeleton_stream, pad);
+
+    GST_LOG_OBJECT (mux, "looping over headers for pad %s:%s",
+        GST_DEBUG_PAD_NAME (thepad));
+
+    hwalk = pad->map.headers;
+    while (hwalk) {
+      GstBuffer *buf = GST_BUFFER (hwalk->data);
+      ogg_packet packet;
+      ogg_page page;
+      gsize size;
+
+      hwalk = hwalk->next;
+
+      /* create a packet from the buffer */
+      packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+      packet.bytes = size;
+
+      gst_ogg_mux_create_header_packet (&packet, pad);
+
+      /* swap the packet in */
+      ogg_stream_packetin (&pad->map.stream, &packet);
+      gst_buffer_unmap (buf, packet.packet, size);
+      gst_buffer_unref (buf);
+
+      /* if last header, flush page */
+      if (hwalk == NULL) {
+        GST_LOG_OBJECT (mux,
+            "flushing page as packet %" G_GUINT64_FORMAT " is first or "
+            "last packet", (guint64) packet.packetno);
+        while (ogg_stream_flush (&pad->map.stream, &page)) {
+          GstBuffer *hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+
+          GST_LOG_OBJECT (mux, "swapped out page");
+          hbufs = g_list_append (hbufs, hbuf);
+        }
+      } else {
+        GST_LOG_OBJECT (mux, "try to swap out page");
+        /* just try to swap out a page then */
+        while (ogg_stream_pageout (&pad->map.stream, &page) > 0) {
+          GstBuffer *hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+
+          GST_LOG_OBJECT (mux, "swapped out page");
+          hbufs = g_list_append (hbufs, hbuf);
+        }
+      }
+    }
+    g_list_free (pad->map.headers);
+    pad->map.headers = NULL;
+  }
+
+  if (mux->use_skeleton) {
+    /* flush accumulated fisbones, the fistail must be on a separate page */
+    while (ogg_stream_flush (&skeleton_stream, &page) > 0) {
+      GstBuffer *hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+      hbufs = g_list_append (hbufs, hbuf);
+    }
+    gst_ogg_mux_make_fistail (mux, &skeleton_stream);
+    while (ogg_stream_flush (&skeleton_stream, &page) > 0) {
+      GstBuffer *hbuf = gst_ogg_mux_buffer_from_page (mux, &page, FALSE);
+      hbufs = g_list_append (hbufs, hbuf);
+    }
+    ogg_stream_clear (&skeleton_stream);
+  }
+
+  /* hbufs holds all buffers for the headers now */
+
+  /* create caps with the buffers */
+  caps = gst_pad_get_caps (mux->srcpad, NULL);
+  if (caps) {
+    caps = gst_ogg_mux_set_header_on_caps (caps, hbufs);
+    gst_pad_set_caps (mux->srcpad, caps);
+    gst_caps_unref (caps);
+  }
+  /* and send the buffers */
+  while (hbufs != NULL) {
+    GstBuffer *buf = GST_BUFFER (hbufs->data);
+
+    hbufs = g_list_delete_link (hbufs, hbufs);
+
+    if ((ret = gst_ogg_mux_push_buffer (mux, buf, NULL)) != GST_FLOW_OK)
+      break;
+  }
+  /* free any remaining nodes/buffers in case we couldn't push them */
+  g_list_foreach (hbufs, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (hbufs);
+
+  return ret;
+}
+
+/* this function is called to process data on the best pending pad.
+ *
+ * basic idea:
+ *
+ * 1) store the selected pad and keep on pulling until we fill a
+ *    complete ogg page or the ogg page is filled above the max-delay
+ *    threshold. This is needed because the ogg spec says that
+ *    you should fill a complete page with data from the same logical
+ *    stream. When the page is filled, go back to 1).
+ * 2) before filling a page, read ahead one more buffer to see if this
+ *    packet is the last of the stream. We need to do this because the ogg
+ *    spec mandates that the last packet should have the EOS flag set before
+ *    sending it to ogg. if pad->buffer is NULL we need to wait to find out
+ *    whether there are any more buffers.
+ * 3) pages get queued on a per-pad queue. Every time a page is queued, a
+ *    dequeue is called, which will dequeue the oldest page on any pad, provided
+ *    that ALL pads have at least one marked page in the queue (or remaining
+ *    pads are at EOS)
+ */
+static GstFlowReturn
+gst_ogg_mux_process_best_pad (GstOggMux * ogg_mux, GstOggPadData * best)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  gboolean delta_unit;
+  gint64 granulepos = 0;
+  GstClockTime timestamp, gp_time;
+  GstBuffer *next_buf;
+
+  GST_LOG_OBJECT (ogg_mux, "best pad %" GST_PTR_FORMAT
+      ", currently pulling from %" GST_PTR_FORMAT, best->collect.pad,
+      ogg_mux->pulling ? ogg_mux->pulling->collect.pad : NULL);
+
+  if (ogg_mux->pulling) {
+    next_buf = gst_collect_pads_peek (ogg_mux->collect,
+        &ogg_mux->pulling->collect);
+    if (next_buf) {
+      ogg_mux->pulling->eos = FALSE;
+      gst_buffer_unref (next_buf);
+    } else {
+      GST_DEBUG_OBJECT (ogg_mux->pulling->collect.pad, "setting eos to true");
+      ogg_mux->pulling->eos = TRUE;
+    }
+  }
+
+  /* We could end up pushing from the best pad instead, so check that
+   * as well */
+  if (best && best != ogg_mux->pulling) {
+    next_buf = gst_collect_pads_peek (ogg_mux->collect, &best->collect);
+    if (next_buf) {
+      best->eos = FALSE;
+      gst_buffer_unref (next_buf);
+    } else {
+      GST_DEBUG_OBJECT (best->collect.pad, "setting eos to true");
+      best->eos = TRUE;
+    }
+  }
+
+  /* if we were already pulling from one pad, but the new "best" buffer is
+   * from another pad, we need to check if we have reason to flush a page
+   * for the pad we were pulling from before */
+  if (ogg_mux->pulling && best &&
+      ogg_mux->pulling != best && ogg_mux->pulling->buffer) {
+    GstOggPadData *pad = ogg_mux->pulling;
+    GstClockTime last_ts = GST_BUFFER_END_TIME (pad->buffer);
+
+    /* if the next packet in the current page is going to make the page
+     * too long, we need to flush */
+    if (last_ts > ogg_mux->next_ts + ogg_mux->max_delay) {
+      ogg_page page;
+
+      GST_LOG_OBJECT (pad->collect.pad,
+          GST_GP_FORMAT " stored packet %" G_GINT64_FORMAT
+          " will make page too long, flushing",
+          GST_BUFFER_OFFSET_END (pad->buffer),
+          (gint64) pad->map.stream.packetno);
+
+      while (ogg_stream_flush (&pad->map.stream, &page)) {
+        /* end time of this page is the timestamp of the next buffer */
+        ogg_mux->pulling->timestamp_end = GST_BUFFER_TIMESTAMP (pad->buffer);
+        /* Place page into the per-pad queue */
+        ret = gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page,
+            pad->first_delta);
+        /* increment the page number counter */
+        pad->pageno++;
+        /* mark other pages as delta */
+        pad->first_delta = TRUE;
+      }
+      pad->new_page = TRUE;
+      ogg_mux->pulling = NULL;
+    }
+  }
+
+  /* if we don't know which pad to pull on, use the best one */
+  if (ogg_mux->pulling == NULL) {
+    ogg_mux->pulling = best;
+    GST_LOG_OBJECT (ogg_mux->pulling->collect.pad, "pulling from best pad");
+
+    /* remember timestamp and gp time of first buffer for this new pad */
+    if (ogg_mux->pulling != NULL) {
+      ogg_mux->next_ts = GST_BUFFER_TIMESTAMP (ogg_mux->pulling->buffer);
+      GST_LOG_OBJECT (ogg_mux->pulling->collect.pad, "updated times, next ts %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (ogg_mux->next_ts));
+    } else {
+      /* no pad to pull on, send EOS */
+      gst_pad_push_event (ogg_mux->srcpad, gst_event_new_eos ());
+      return GST_FLOW_WRONG_STATE;
+    }
+  }
+
+  if (ogg_mux->need_headers) {
+    ret = gst_ogg_mux_send_headers (ogg_mux);
+    ogg_mux->need_headers = FALSE;
+  }
+
+  /* we are pulling from a pad, continue to do so until a page
+   * has been filled and queued */
+  if (ogg_mux->pulling != NULL) {
+    ogg_packet packet;
+    ogg_page page;
+    GstBuffer *buf, *tmpbuf;
+    GstOggPadData *pad = ogg_mux->pulling;
+    gint64 duration;
+    gboolean force_flush;
+    gsize size;
+
+    GST_LOG_OBJECT (ogg_mux->pulling->collect.pad, "pulling from pad");
+
+    /* now see if we have a buffer */
+    buf = pad->buffer;
+    if (buf == NULL) {
+      GST_DEBUG_OBJECT (ogg_mux, "pad was EOS");
+      ogg_mux->pulling = NULL;
+      return GST_FLOW_OK;
+    }
+
+    delta_unit = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+    duration = GST_BUFFER_DURATION (buf);
+
+    /* if the current "next timestamp" on the pad is unset, then this is the
+     * first packet on the new page.  Update our pad's page timestamp */
+    if (ogg_mux->pulling->timestamp == GST_CLOCK_TIME_NONE) {
+      ogg_mux->pulling->timestamp = GST_BUFFER_TIMESTAMP (buf);
+      GST_LOG_OBJECT (ogg_mux->pulling->collect.pad,
+          "updated pad timestamp to %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+    }
+    /* create a packet from the buffer */
+    packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+    packet.bytes = size;
+    packet.granulepos = GST_BUFFER_OFFSET_END (buf);
+    if (packet.granulepos == -1)
+      packet.granulepos = 0;
+    /* mark BOS and packet number */
+    packet.b_o_s = (pad->packetno == 0);
+    packet.packetno = pad->packetno++;
+    GST_LOG_OBJECT (pad->collect.pad, GST_GP_FORMAT
+        " packet %" G_GINT64_FORMAT " (%ld bytes) created from buffer",
+        GST_GP_CAST (packet.granulepos), (gint64) packet.packetno,
+        packet.bytes);
+
+    packet.e_o_s = ogg_mux->pulling->eos ? 1 : 0;
+    tmpbuf = NULL;
+
+    /* we flush when we see a new keyframe */
+    force_flush = (pad->prev_delta && !delta_unit)
+        || pad->map.always_flush_page;
+    if (duration != -1) {
+      pad->duration += duration;
+      /* if page duration exceeds max, flush page */
+      if (pad->duration > ogg_mux->max_page_delay) {
+        force_flush = TRUE;
+        pad->duration = 0;
+      }
+    }
+
+    if (GST_BUFFER_IS_DISCONT (buf)) {
+      if (pad->data_pushed) {
+        GST_LOG_OBJECT (pad->collect.pad, "got discont");
+        packet.packetno++;
+        /* No public API for this; hack things in */
+        pad->map.stream.pageno++;
+        force_flush = TRUE;
+      } else {
+        GST_LOG_OBJECT (pad->collect.pad, "discont at stream start");
+      }
+    }
+
+    /* flush the currently built page if necessary */
+    if (force_flush) {
+      GST_LOG_OBJECT (pad->collect.pad,
+          GST_GP_FORMAT " forced flush of page before this packet",
+          GST_BUFFER_OFFSET_END (pad->buffer));
+      while (ogg_stream_flush (&pad->map.stream, &page)) {
+        /* end time of this page is the timestamp of the next buffer */
+        ogg_mux->pulling->timestamp_end = GST_BUFFER_TIMESTAMP (pad->buffer);
+        ret = gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page,
+            pad->first_delta);
+
+        /* increment the page number counter */
+        pad->pageno++;
+        /* mark other pages as delta */
+        pad->first_delta = TRUE;
+      }
+      pad->new_page = TRUE;
+    }
+
+    /* if this is the first packet of a new page figure out the delta flag */
+    if (pad->new_page) {
+      if (delta_unit) {
+        /* mark the page as delta */
+        pad->first_delta = TRUE;
+      } else {
+        /* got a keyframe */
+        if (ogg_mux->delta_pad == pad) {
+          /* if we get it on the pad with deltaunits,
+           * we mark the page as non delta */
+          pad->first_delta = FALSE;
+        } else if (ogg_mux->delta_pad != NULL) {
+          /* if there are pads with delta frames, we
+           * must mark this one as delta */
+          pad->first_delta = TRUE;
+        } else {
+          pad->first_delta = FALSE;
+        }
+      }
+      pad->new_page = FALSE;
+    }
+
+    /* save key unit to track delta->key unit transitions */
+    pad->prev_delta = delta_unit;
+
+    /* swap the packet in */
+    if (packet.e_o_s == 1)
+      GST_DEBUG_OBJECT (pad->collect.pad, "swapping in EOS packet");
+    if (packet.b_o_s == 1)
+      GST_DEBUG_OBJECT (pad->collect.pad, "swapping in BOS packet");
+
+    ogg_stream_packetin (&pad->map.stream, &packet);
+    gst_buffer_unmap (buf, packet.packet, size);
+    pad->data_pushed = TRUE;
+
+    gp_time = GST_BUFFER_OFFSET (pad->buffer);
+    granulepos = GST_BUFFER_OFFSET_END (pad->buffer);
+    timestamp = GST_BUFFER_TIMESTAMP (pad->buffer);
+
+    GST_LOG_OBJECT (pad->collect.pad,
+        GST_GP_FORMAT " packet %" G_GINT64_FORMAT ", gp time %"
+        GST_TIME_FORMAT ", timestamp %" GST_TIME_FORMAT " packetin'd",
+        granulepos, (gint64) packet.packetno, GST_TIME_ARGS (gp_time),
+        GST_TIME_ARGS (timestamp));
+    /* don't need the old buffer anymore */
+    gst_buffer_unref (pad->buffer);
+    /* store new readahead buffer */
+    pad->buffer = tmpbuf;
+
+    /* let ogg write out the pages now. The packet we got could end
+     * up in more than one page so we need to write them all */
+    if (ogg_stream_pageout (&pad->map.stream, &page) > 0) {
+      /* we have a new page, so we need to timestamp it correctly.
+       * if this fresh packet ends on this page, then the page's granulepos
+       * comes from that packet, and we should set this buffer's timestamp */
+
+      GST_LOG_OBJECT (pad->collect.pad,
+          GST_GP_FORMAT " packet %" G_GINT64_FORMAT ", time %"
+          GST_TIME_FORMAT ") caused new page",
+          granulepos, (gint64) packet.packetno, GST_TIME_ARGS (timestamp));
+      GST_LOG_OBJECT (pad->collect.pad,
+          GST_GP_FORMAT " new page %ld",
+          GST_GP_CAST (ogg_page_granulepos (&page)), pad->map.stream.pageno);
+
+      if (ogg_page_granulepos (&page) == granulepos) {
+        /* the packet we streamed in finishes on the current page,
+         * because the page's granulepos is the granulepos of the last
+         * packet completed on that page,
+         * so update the timestamp that we will give to the page */
+        GST_LOG_OBJECT (pad->collect.pad,
+            GST_GP_FORMAT
+            " packet finishes on current page, updating gp time to %"
+            GST_TIME_FORMAT, granulepos, GST_TIME_ARGS (gp_time));
+        pad->gp_time = gp_time;
+      } else {
+        GST_LOG_OBJECT (pad->collect.pad,
+            GST_GP_FORMAT
+            " packet spans beyond current page, keeping old gp time %"
+            GST_TIME_FORMAT, granulepos, GST_TIME_ARGS (pad->gp_time));
+      }
+
+      /* push the page */
+      /* end time of this page is the timestamp of the next buffer */
+      pad->timestamp_end = timestamp;
+      ret = gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page, pad->first_delta);
+      pad->pageno++;
+      /* mark next pages as delta */
+      pad->first_delta = TRUE;
+
+      /* use an inner loop here to flush the remaining pages and
+       * mark them as delta frames as well */
+      while (ogg_stream_pageout (&pad->map.stream, &page) > 0) {
+        if (ogg_page_granulepos (&page) == granulepos) {
+          /* the page has taken up the new packet completely, which means
+           * the packet ends the page and we can update the gp time
+           * before pushing out */
+          pad->gp_time = gp_time;
+        }
+
+        /* we have a complete page now, we can push the page
+         * and make sure to pull on a new pad the next time around */
+        ret = gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page,
+            pad->first_delta);
+        /* increment the page number counter */
+        pad->pageno++;
+      }
+      /* need a new page as well */
+      pad->new_page = TRUE;
+      pad->duration = 0;
+      /* we're done pulling on this pad, make sure to choose a new
+       * pad for pulling in the next iteration */
+      ogg_mux->pulling = NULL;
+    }
+
+    /* Update the gp time, if necessary, since any future page will have at
+     * least this gp time.
+     */
+    if (pad->gp_time < gp_time) {
+      pad->gp_time = gp_time;
+      GST_LOG_OBJECT (pad->collect.pad,
+          "Updated running gp time of pad %" GST_PTR_FORMAT
+          " to %" GST_TIME_FORMAT, pad->collect.pad, GST_TIME_ARGS (gp_time));
+    }
+  }
+
+  return ret;
+}
+
+/* all_pads_eos:
+ *
+ * Checks if all pads are EOS'd by peeking.
+ *
+ * Returns TRUE if all pads are EOS.
+ */
+static gboolean
+all_pads_eos (GstCollectPads * pads)
+{
+  GSList *walk;
+
+  walk = pads->data;
+  while (walk) {
+    GstOggPadData *oggpad = (GstOggPadData *) walk->data;
+
+    GST_DEBUG_OBJECT (oggpad->collect.pad,
+        "oggpad %p eos %d", oggpad, oggpad->eos);
+
+    if (oggpad->eos == FALSE)
+      return FALSE;
+
+    walk = g_slist_next (walk);
+  }
+
+  return TRUE;
+}
+
+/* This function is called when there is data on all pads.
+ * 
+ * It finds a pad to pull on, this is done by looking at the buffers
+ * to decide which one to use, and using the 'oldest' one first. It then calls
+ * gst_ogg_mux_process_best_pad() to process as much data as possible.
+ * 
+ * If all the pads have received EOS, it flushes out all data by continually
+ * getting the best pad and calling gst_ogg_mux_process_best_pad() until they
+ * are all empty, and then sends EOS.
+ */
+static GstFlowReturn
+gst_ogg_mux_collected (GstCollectPads * pads, GstOggMux * ogg_mux)
+{
+  GstOggPadData *best;
+  GstFlowReturn ret;
+  gboolean popped;
+
+  GST_LOG_OBJECT (ogg_mux, "collected");
+
+  /* queue buffers on all pads; find a buffer with the lowest timestamp */
+  best = gst_ogg_mux_queue_pads (ogg_mux, &popped);
+
+  if (popped)
+    return GST_FLOW_OK;
+
+  if (best == NULL || best->buffer == NULL) {
+    /* This is not supposed to happen */
+    return GST_FLOW_ERROR;
+  }
+
+  ret = gst_ogg_mux_process_best_pad (ogg_mux, best);
+
+  if (best->eos && all_pads_eos (pads)) {
+    gst_pad_push_event (ogg_mux->srcpad, gst_event_new_eos ());
+    return GST_FLOW_UNEXPECTED;
+  }
+
+  return ret;
+}
+
+static void
+gst_ogg_mux_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstOggMux *ogg_mux;
+
+  ogg_mux = GST_OGG_MUX (object);
+
+  switch (prop_id) {
+    case ARG_MAX_DELAY:
+      g_value_set_uint64 (value, ogg_mux->max_delay);
+      break;
+    case ARG_MAX_PAGE_DELAY:
+      g_value_set_uint64 (value, ogg_mux->max_page_delay);
+      break;
+    case ARG_MAX_TOLERANCE:
+      g_value_set_uint64 (value, ogg_mux->max_tolerance);
+      break;
+    case ARG_SKELETON:
+      g_value_set_boolean (value, ogg_mux->use_skeleton);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_ogg_mux_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstOggMux *ogg_mux;
+
+  ogg_mux = GST_OGG_MUX (object);
+
+  switch (prop_id) {
+    case ARG_MAX_DELAY:
+      ogg_mux->max_delay = g_value_get_uint64 (value);
+      break;
+    case ARG_MAX_PAGE_DELAY:
+      ogg_mux->max_page_delay = g_value_get_uint64 (value);
+      break;
+    case ARG_MAX_TOLERANCE:
+      ogg_mux->max_tolerance = g_value_get_uint64 (value);
+      break;
+    case ARG_SKELETON:
+      ogg_mux->use_skeleton = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* reset all variables in the ogg pads. */
+static void
+gst_ogg_mux_init_collectpads (GstCollectPads * collect)
+{
+  GSList *walk;
+
+  walk = collect->data;
+  while (walk) {
+    GstOggPadData *oggpad = (GstOggPadData *) walk->data;
+
+    ogg_stream_init (&oggpad->map.stream, oggpad->map.serialno);
+    oggpad->packetno = 0;
+    oggpad->pageno = 0;
+    oggpad->eos = FALSE;
+    /* we assume there will be some control data first for this pad */
+    oggpad->state = GST_OGG_PAD_STATE_CONTROL;
+    oggpad->new_page = TRUE;
+    oggpad->first_delta = FALSE;
+    oggpad->prev_delta = FALSE;
+    oggpad->data_pushed = FALSE;
+    oggpad->pagebuffers = g_queue_new ();
+
+    gst_segment_init (&oggpad->segment, GST_FORMAT_TIME);
+
+    walk = g_slist_next (walk);
+  }
+}
+
+/* Clear all buffers from the collectpads object */
+static void
+gst_ogg_mux_clear_collectpads (GstCollectPads * collect)
+{
+  GSList *walk;
+
+  for (walk = collect->data; walk; walk = g_slist_next (walk)) {
+    GstOggPadData *oggpad = (GstOggPadData *) walk->data;
+    GstBuffer *buf;
+
+    ogg_stream_clear (&oggpad->map.stream);
+
+    while ((buf = g_queue_pop_head (oggpad->pagebuffers)) != NULL) {
+      gst_buffer_unref (buf);
+    }
+    g_queue_free (oggpad->pagebuffers);
+    oggpad->pagebuffers = NULL;
+
+    if (oggpad->buffer) {
+      gst_buffer_unref (oggpad->buffer);
+      oggpad->buffer = NULL;
+    }
+
+    if (oggpad->tags) {
+      gst_tag_list_free (oggpad->tags);
+      oggpad->tags = NULL;
+    }
+
+    gst_segment_init (&oggpad->segment, GST_FORMAT_TIME);
+  }
+}
+
+static GstStateChangeReturn
+gst_ogg_mux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstOggMux *ogg_mux;
+  GstStateChangeReturn ret;
+
+  ogg_mux = GST_OGG_MUX (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      gst_ogg_mux_clear (ogg_mux);
+      gst_ogg_mux_init_collectpads (ogg_mux->collect);
+      gst_collect_pads_start (ogg_mux->collect);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_collect_pads_stop (ogg_mux->collect);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_ogg_mux_clear_collectpads (ogg_mux->collect);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+gboolean
+gst_ogg_mux_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_ogg_mux_debug, "oggmux", 0, "ogg muxer");
+
+  return gst_element_register (plugin, "oggmux", GST_RANK_PRIMARY,
+      GST_TYPE_OGG_MUX);
+}
diff --git a/ext/ogg/gstoggmux.h b/ext/ogg/gstoggmux.h
new file mode 100644
index 0000000..1e2e8a9
--- /dev/null
+++ b/ext/ogg/gstoggmux.h
@@ -0,0 +1,148 @@
+/* OGG muxer plugin for GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_OGG_MUX_H__
+#define __GST_OGGEMUX_H__
+
+#include <ogg/ogg.h>
+
+#include <gst/gst.h>
+#include <gst/base/gstcollectpads.h>
+#include "gstoggstream.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_OGG_MUX (gst_ogg_mux_get_type())
+#define GST_OGG_MUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OGG_MUX, GstOggMux))
+#define GST_OGG_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OGG_MUX, GstOggMux))
+#define GST_IS_OGG_MUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_MUX))
+#define GST_IS_OGG_MUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_MUX))
+
+typedef struct _GstOggMux GstOggMux;
+typedef struct _GstOggMuxClass GstOggMuxClass;
+
+typedef enum
+{
+  GST_OGG_PAD_STATE_CONTROL = 0,
+  GST_OGG_PAD_STATE_DATA = 1
+}
+GstOggPadState;
+
+/* all information needed for one ogg stream */
+typedef struct
+{
+  GstCollectData collect;       /* we extend the CollectData */
+
+  GstOggStream map;
+  gboolean have_type;
+
+  GstSegment segment;
+
+  GstBuffer *buffer;            /* the first waiting buffer for the pad */
+
+  gint64 packetno;              /* number of next packet */
+  gint64 pageno;                /* number of next page */
+  guint64 duration;             /* duration of current page */
+  gboolean eos;
+  gint64 offset;
+  GstClockTime timestamp;       /* timestamp of the first packet on the next
+                                 * page to be dequeued */
+  GstClockTime timestamp_end;   /* end timestamp of last complete packet on
+                                   the next page to be dequeued */
+  GstClockTime gp_time;         /* time corresponding to the gp value of the
+                                   last complete packet on the next page to be
+                                   dequeued */
+
+  GstOggPadState state;         /* state of the pad */
+
+  GQueue *pagebuffers;          /* List of pages in buffers ready for pushing */
+
+  gboolean new_page;            /* starting a new page */
+  gboolean first_delta;         /* was the first packet in the page a delta */
+  gboolean prev_delta;          /* was the previous buffer a delta frame */
+  gboolean data_pushed;         /* whether we pushed data already */
+
+  gint64  next_granule;         /* expected granule of next buffer ts */
+  gint64  keyframe_granule;     /* granule of last preceding keyframe */
+
+  GstPadEventFunction collect_event;
+
+  GstTagList *tags;
+}
+GstOggPadData;
+
+/**
+ * GstOggMux:
+ *
+ * The ogg muxer object structure.
+ */
+struct _GstOggMux
+{
+  GstElement element;
+
+  /* source pad */
+  GstPad *srcpad;
+
+  /* sinkpads */
+  GstCollectPads *collect;
+
+  /* number of pads which have not received EOS */
+  gint active_pads;
+
+  /* the pad we are currently using to fill a page */
+  GstOggPadData *pulling;
+
+  /* next timestamp for the page */
+  GstClockTime next_ts;
+
+  /* Last timestamp actually output on src pad */
+  GstClockTime last_ts;
+
+  /* offset in stream */
+  guint64 offset;
+
+  /* need_headers */
+  gboolean need_headers;
+
+  guint64 max_delay;
+  guint64 max_page_delay;
+  guint64 max_tolerance;
+
+  GstOggPadData *delta_pad;     /* when a delta frame is detected on a stream, we mark
+                                   pages as delta frames up to the page that has the
+                                   keyframe */
+
+
+  /* whether to create a skeleton track */
+  gboolean use_skeleton;
+};
+
+struct _GstOggMuxClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_ogg_mux_get_type (void);
+
+gboolean gst_ogg_mux_plugin_init (GstPlugin * plugin);
+
+G_END_DECLS
+
+#endif /* __GST_OGG_MUX_H__ */
diff --git a/ext/ogg/gstoggparse.c b/ext/ogg/gstoggparse.c
new file mode 100644
index 0000000..1c12bdf
--- /dev/null
+++ b/ext/ogg/gstoggparse.c
@@ -0,0 +1,750 @@
+/* GStreamer
+ * Copyright (C) 2005 Michael Smith <msmith@fluendo.com>
+ *
+ * gstoggparse.c: ogg stream parser
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* This ogg parser is essentially a subset of the ogg demuxer - rather than
+ * fully demuxing into packets, we only parse out the pages, create one
+ * GstBuffer per page, set all the appropriate flags on those pages, set caps
+ * appropriately (particularly the 'streamheader' which gives all the header
+ * pages required for initialing decode).
+ *
+ * It's dramatically simpler than the full demuxer as it does not  support 
+ * seeking.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst.h>
+#include <ogg/ogg.h>
+#include <string.h>
+
+#include "gstogg.h"
+#include "gstoggstream.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_ogg_parse_debug);
+#define GST_CAT_DEFAULT gst_ogg_parse_debug
+
+#define GST_TYPE_OGG_PARSE (gst_ogg_parse_get_type())
+#define GST_OGG_PARSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OGG_PARSE, GstOggParse))
+#define GST_OGG_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OGG_PARSE, GstOggParse))
+#define GST_IS_OGG_PARSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_PARSE))
+#define GST_IS_OGG_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_PARSE))
+
+static GType gst_ogg_parse_get_type (void);
+
+typedef struct _GstOggParse GstOggParse;
+typedef struct _GstOggParseClass GstOggParseClass;
+
+struct _GstOggParse
+{
+  GstElement element;
+
+  GstPad *sinkpad;              /* Sink pad we're reading data from */
+
+  GstPad *srcpad;               /* Source pad we're writing to */
+
+  GSList *oggstreams;           /* list of GstOggStreams for known streams */
+
+  gint64 offset;                /* Current stream offset */
+
+  gboolean in_headers;          /* Set if we're reading headers for streams */
+
+  gboolean last_page_not_bos;   /* Set if we've seen a non-BOS page */
+
+  ogg_sync_state sync;          /* Ogg page synchronisation */
+
+  GstCaps *caps;                /* Our src caps */
+
+  GstOggStream *video_stream;   /* Stream used to construct delta_unit flags */
+};
+
+struct _GstOggParseClass
+{
+  GstElementClass parent_class;
+};
+
+static void gst_ogg_parse_base_init (gpointer g_class);
+static void gst_ogg_parse_class_init (GstOggParseClass * klass);
+static void gst_ogg_parse_init (GstOggParse * ogg);
+static GstElementClass *parent_class = NULL;
+
+static GType
+gst_ogg_parse_get_type (void)
+{
+  static GType ogg_parse_type = 0;
+
+  if (!ogg_parse_type) {
+    static const GTypeInfo ogg_parse_info = {
+      sizeof (GstOggParseClass),
+      gst_ogg_parse_base_init,
+      NULL,
+      (GClassInitFunc) gst_ogg_parse_class_init,
+      NULL,
+      NULL,
+      sizeof (GstOggParse),
+      0,
+      (GInstanceInitFunc) gst_ogg_parse_init,
+    };
+
+    ogg_parse_type = g_type_register_static (GST_TYPE_ELEMENT, "GstOggParse",
+        &ogg_parse_info, 0);
+  }
+  return ogg_parse_type;
+}
+
+static void
+free_stream (GstOggStream * stream)
+{
+  g_list_foreach (stream->headers, (GFunc) gst_mini_object_unref, NULL);
+  g_list_foreach (stream->unknown_pages, (GFunc) gst_mini_object_unref, NULL);
+  g_list_foreach (stream->stored_buffers, (GFunc) gst_mini_object_unref, NULL);
+
+  g_slice_free (GstOggStream, stream);
+}
+
+static void
+gst_ogg_parse_delete_all_streams (GstOggParse * ogg)
+{
+  g_slist_foreach (ogg->oggstreams, (GFunc) free_stream, NULL);
+  g_slist_free (ogg->oggstreams);
+  ogg->oggstreams = NULL;
+}
+
+static GstOggStream *
+gst_ogg_parse_new_stream (GstOggParse * parser, ogg_page * page)
+{
+  GstOggStream *stream;
+  ogg_packet packet;
+  int ret;
+  guint32 serialno;
+
+  serialno = ogg_page_serialno (page);
+
+  GST_DEBUG_OBJECT (parser, "creating new stream %08x", serialno);
+
+  stream = g_slice_new0 (GstOggStream);
+
+  stream->serialno = serialno;
+  stream->in_headers = 1;
+
+  if (ogg_stream_init (&stream->stream, serialno) != 0) {
+    GST_ERROR ("Could not initialize ogg_stream struct for serial %08x.",
+        serialno);
+    return NULL;
+  }
+
+  /* FIXME check return */
+  ogg_stream_pagein (&stream->stream, page);
+
+  /* FIXME check return */
+  ret = ogg_stream_packetout (&stream->stream, &packet);
+  if (ret == 1) {
+    gst_ogg_stream_setup_map (stream, &packet);
+    if (stream->is_video) {
+      parser->video_stream = stream;
+    }
+  }
+
+  parser->oggstreams = g_slist_append (parser->oggstreams, stream);
+
+  return stream;
+}
+
+static GstOggStream *
+gst_ogg_parse_find_stream (GstOggParse * parser, guint32 serialno)
+{
+  GSList *l;
+
+  for (l = parser->oggstreams; l != NULL; l = l->next) {
+    GstOggStream *stream = (GstOggStream *) l->data;
+
+    if (stream->serialno == serialno)
+      return stream;
+  }
+  return NULL;
+}
+
+/* signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0
+      /* FILL ME */
+};
+
+static GstStaticPadTemplate ogg_parse_src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/ogg")
+    );
+
+static GstStaticPadTemplate ogg_parse_sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/ogg")
+    );
+
+static void gst_ogg_parse_dispose (GObject * object);
+static GstStateChangeReturn gst_ogg_parse_change_state (GstElement * element,
+    GstStateChange transition);
+static GstFlowReturn gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer);
+
+static void
+gst_ogg_parse_base_init (gpointer g_class)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+  gst_element_class_set_details_simple (element_class,
+      "Ogg parser", "Codec/Parser",
+      "parse ogg streams into pages (info about ogg: http://xiph.org)",
+      "Michael Smith <msmith@fluendo.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&ogg_parse_sink_template_factory));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&ogg_parse_src_template_factory));
+}
+
+static void
+gst_ogg_parse_class_init (GstOggParseClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gstelement_class->change_state = gst_ogg_parse_change_state;
+
+  gobject_class->dispose = gst_ogg_parse_dispose;
+}
+
+static void
+gst_ogg_parse_init (GstOggParse * ogg)
+{
+  /* create the sink and source pads */
+  ogg->sinkpad =
+      gst_pad_new_from_static_template (&ogg_parse_sink_template_factory,
+      "sink");
+  ogg->srcpad =
+      gst_pad_new_from_static_template (&ogg_parse_src_template_factory, "src");
+
+  /* TODO: Are there any events we must handle? */
+  /* gst_pad_set_event_function (ogg->sinkpad, gst_ogg_parse_handle_event); */
+  gst_pad_set_chain_function (ogg->sinkpad, gst_ogg_parse_chain);
+
+  gst_element_add_pad (GST_ELEMENT (ogg), ogg->sinkpad);
+  gst_element_add_pad (GST_ELEMENT (ogg), ogg->srcpad);
+
+  ogg->oggstreams = NULL;
+}
+
+static void
+gst_ogg_parse_dispose (GObject * object)
+{
+  GstOggParse *ogg = GST_OGG_PARSE (object);
+
+  GST_LOG_OBJECT (ogg, "Disposing of object %p", ogg);
+
+  ogg_sync_clear (&ogg->sync);
+  gst_ogg_parse_delete_all_streams (ogg);
+
+  if (ogg->caps) {
+    gst_caps_unref (ogg->caps);
+    ogg->caps = NULL;
+  }
+
+  if (G_OBJECT_CLASS (parent_class)->dispose)
+    G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+/* submit the given buffer to the ogg sync */
+static GstFlowReturn
+gst_ogg_parse_submit_buffer (GstOggParse * ogg, GstBuffer * buffer)
+{
+  gsize size;
+  guint8 *data;
+  gchar *oggbuffer;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  GST_DEBUG_OBJECT (ogg, "submitting %" G_GSIZE_FORMAT " bytes", size);
+  if (G_UNLIKELY (size == 0))
+    goto done;
+
+  oggbuffer = ogg_sync_buffer (&ogg->sync, size);
+  if (G_UNLIKELY (oggbuffer == NULL)) {
+    GST_ELEMENT_ERROR (ogg, STREAM, DECODE,
+        (NULL), ("failed to get ogg sync buffer"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+
+  memcpy (oggbuffer, data, size);
+  if (G_UNLIKELY (ogg_sync_wrote (&ogg->sync, size) < 0)) {
+    GST_ELEMENT_ERROR (ogg, STREAM, DECODE, (NULL),
+        ("failed to write %" G_GSIZE_FORMAT " bytes to the sync buffer", size));
+    ret = GST_FLOW_ERROR;
+  }
+
+done:
+  gst_buffer_unmap (buffer, data, size);
+  gst_buffer_unref (buffer);
+
+  return ret;
+}
+
+static void
+gst_ogg_parse_append_header (GValue * array, GstBuffer * buf)
+{
+  GValue value = { 0 };
+  /* We require a copy to avoid circular refcounts */
+  GstBuffer *buffer = gst_buffer_copy (buf);
+
+  GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
+
+  g_value_init (&value, GST_TYPE_BUFFER);
+  gst_value_set_buffer (&value, buffer);
+  gst_value_array_append_value (array, &value);
+  g_value_unset (&value);
+
+}
+
+typedef enum
+{
+  PAGE_HEADER,                  /* Header page */
+  PAGE_DATA,                    /* Data page */
+  PAGE_PENDING,                 /* We don't know yet, we'll have to see some future pages */
+} page_type;
+
+static page_type
+gst_ogg_parse_is_header (GstOggParse * ogg, GstOggStream * stream,
+    ogg_page * page)
+{
+  ogg_int64_t gpos = ogg_page_granulepos (page);
+
+  if (gpos < 0)
+    return PAGE_PENDING;
+
+  /* This is good enough for now, but technically requires codec-specific
+   * behaviour to be perfect. This is where we need the mooted library for 
+   * this stuff, which nobody has written.
+   */
+  if (gpos > 0)
+    return PAGE_DATA;
+  else
+    return PAGE_HEADER;
+}
+
+static GstBuffer *
+gst_ogg_parse_buffer_from_page (ogg_page * page,
+    guint64 offset, GstClockTime timestamp)
+{
+  int size = page->header_len + page->body_len;
+  GstBuffer *buf = gst_buffer_new_and_alloc (size);
+
+  gst_buffer_fill (buf, 0, page->header, page->header_len);
+  gst_buffer_fill (buf, page->header_len, page->body, page->body_len);
+
+  GST_BUFFER_TIMESTAMP (buf) = timestamp;
+  GST_BUFFER_OFFSET (buf) = offset;
+  GST_BUFFER_OFFSET_END (buf) = offset + size;
+
+  return buf;
+}
+
+
+/* Reads in buffers, parses them, reframes into one-buffer-per-ogg-page, submits
+ * pages to output pad.
+ */
+static GstFlowReturn
+gst_ogg_parse_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstOggParse *ogg;
+  GstFlowReturn result = GST_FLOW_OK;
+  gint ret = -1;
+  guint32 serialno;
+  GstBuffer *pagebuffer;
+  GstClockTime buffertimestamp = GST_BUFFER_TIMESTAMP (buffer);
+
+  ogg = GST_OGG_PARSE (GST_OBJECT_PARENT (pad));
+
+  GST_LOG_OBJECT (ogg,
+      "Chain function received buffer of size %" G_GSIZE_FORMAT,
+      gst_buffer_get_size (buffer));
+
+  gst_ogg_parse_submit_buffer (ogg, buffer);
+
+  while (ret != 0 && result == GST_FLOW_OK) {
+    ogg_page page;
+
+    /* We use ogg_sync_pageseek() rather than ogg_sync_pageout() so that we can
+     * track how many bytes the ogg layer discarded (in the case of sync errors,
+     * etc.); this allows us to accurately track the current stream offset
+     */
+    ret = ogg_sync_pageseek (&ogg->sync, &page);
+    if (ret == 0) {
+      /* need more data, that's fine... */
+      break;
+    } else if (ret < 0) {
+      /* discontinuity; track how many bytes we skipped (-ret) */
+      ogg->offset -= ret;
+    } else {
+      gint64 granule = ogg_page_granulepos (&page);
+#ifndef GST_DISABLE_GST_DEBUG
+      int bos = ogg_page_bos (&page);
+#endif
+      guint64 startoffset = ogg->offset;
+      GstOggStream *stream;
+      gboolean keyframe;
+
+      serialno = ogg_page_serialno (&page);
+      stream = gst_ogg_parse_find_stream (ogg, serialno);
+
+      GST_LOG_OBJECT (ogg, "Timestamping outgoing buffer as %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (buffertimestamp));
+
+      if (stream) {
+        buffertimestamp = gst_ogg_stream_get_end_time_for_granulepos (stream,
+            granule);
+        if (ogg->video_stream) {
+          if (stream == ogg->video_stream) {
+            keyframe = gst_ogg_stream_granulepos_is_key_frame (stream, granule);
+          } else {
+            keyframe = FALSE;
+          }
+        } else {
+          keyframe = TRUE;
+        }
+      } else {
+        buffertimestamp = GST_CLOCK_TIME_NONE;
+        keyframe = TRUE;
+      }
+      pagebuffer = gst_ogg_parse_buffer_from_page (&page, startoffset,
+          buffertimestamp);
+
+      /* We read out 'ret' bytes, so we set the next offset appropriately */
+      ogg->offset += ret;
+
+      GST_LOG_OBJECT (ogg,
+          "processing ogg page (serial %08x, pageno %ld, "
+          "granule pos %" G_GUINT64_FORMAT ", bos %d, offset %"
+          G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT ") keyframe=%d",
+          serialno, ogg_page_pageno (&page),
+          granule, bos, startoffset, ogg->offset, keyframe);
+
+      if (ogg_page_bos (&page)) {
+        /* If we've seen this serialno before, this is technically an error,
+         * we log this case but accept it - this one replaces the previous
+         * stream with this serialno. We can do this since we're streaming, and
+         * not supporting seeking...
+         */
+        GstOggStream *stream = gst_ogg_parse_find_stream (ogg, serialno);
+
+        if (stream != NULL) {
+          GST_LOG_OBJECT (ogg, "Incorrect stream; repeats serial number %08x "
+              "at offset %" G_GINT64_FORMAT, serialno, ogg->offset);
+        }
+
+        if (ogg->last_page_not_bos) {
+          GST_LOG_OBJECT (ogg, "Deleting all referenced streams, found a new "
+              "chain starting with serial %u", serialno);
+          gst_ogg_parse_delete_all_streams (ogg);
+        }
+
+        stream = gst_ogg_parse_new_stream (ogg, &page);
+
+        ogg->last_page_not_bos = FALSE;
+
+        gst_buffer_ref (pagebuffer);
+        stream->headers = g_list_append (stream->headers, pagebuffer);
+
+        if (!ogg->in_headers) {
+          GST_LOG_OBJECT (ogg,
+              "Found start of new chain at offset %" G_GUINT64_FORMAT,
+              startoffset);
+          ogg->in_headers = 1;
+        }
+
+        /* For now, we just keep the header buffer in the stream->headers list;
+         * it actually gets output once we've collected the entire set
+         */
+      } else {
+        /* Non-BOS page. Either: we're outside headers, and this isn't a 
+         * header (normal data), outside headers and this is (error!), inside
+         * headers, this is (append header), or inside headers and this isn't 
+         * (we've found the end of headers; flush the lot!)
+         *
+         * Before that, we flag that the last page seen (this one) was not a 
+         * BOS page; that way we know that when we next see a BOS page it's a
+         * new chain, and we can flush all existing streams.
+         */
+        page_type type;
+        GstOggStream *stream = gst_ogg_parse_find_stream (ogg, serialno);
+
+        if (!stream) {
+          GST_LOG_OBJECT (ogg,
+              "Non-BOS page unexpectedly found at %" G_GINT64_FORMAT,
+              ogg->offset);
+          goto failure;
+        }
+
+        ogg->last_page_not_bos = TRUE;
+
+        type = gst_ogg_parse_is_header (ogg, stream, &page);
+
+        if (type == PAGE_PENDING && ogg->in_headers) {
+          gst_buffer_ref (pagebuffer);
+
+          stream->unknown_pages = g_list_append (stream->unknown_pages,
+              pagebuffer);
+        } else if (type == PAGE_HEADER) {
+          if (!ogg->in_headers) {
+            GST_LOG_OBJECT (ogg, "Header page unexpectedly found outside "
+                "headers at offset %" G_GINT64_FORMAT, ogg->offset);
+            goto failure;
+          } else {
+            /* Append the header to the buffer list, after any unknown previous
+             * pages
+             */
+            stream->headers = g_list_concat (stream->headers,
+                stream->unknown_pages);
+            g_list_free (stream->unknown_pages);
+            gst_buffer_ref (pagebuffer);
+            stream->headers = g_list_append (stream->headers, pagebuffer);
+          }
+        } else {                /* PAGE_DATA, or PAGE_PENDING but outside headers */
+          if (ogg->in_headers) {
+            /* First non-header page... set caps, flush headers.
+             *
+             * First up, we build a single GValue list of all the pagebuffers
+             * we're using for the headers, in order.
+             * Then we set this on the caps structure. Then we can start pushing
+             * buffers for the headers, and finally we send this non-header
+             * page.
+             */
+            GstCaps *caps;
+            GstStructure *structure;
+            GValue array = { 0 };
+            gint count = 0;
+            gboolean found_pending_headers = FALSE;
+            GSList *l;
+
+            g_value_init (&array, GST_TYPE_ARRAY);
+
+            for (l = ogg->oggstreams; l != NULL; l = l->next) {
+              GstOggStream *stream = (GstOggStream *) l->data;
+
+              if (g_list_length (stream->headers) == 0) {
+                GST_LOG_OBJECT (ogg, "No primary header found for stream %08x",
+                    stream->serialno);
+                goto failure;
+              }
+
+              gst_ogg_parse_append_header (&array,
+                  GST_BUFFER (stream->headers->data));
+              count++;
+            }
+
+            for (l = ogg->oggstreams; l != NULL; l = l->next) {
+              GstOggStream *stream = (GstOggStream *) l->data;
+              GList *j;
+
+              /* already appended the first header, now do headers 2-N */
+              for (j = stream->headers->next; j != NULL; j = j->next) {
+                gst_ogg_parse_append_header (&array, GST_BUFFER (j->data));
+                count++;
+              }
+            }
+
+            caps = gst_pad_get_caps (ogg->srcpad, NULL);
+            caps = gst_caps_make_writable (caps);
+
+            structure = gst_caps_get_structure (caps, 0);
+            gst_structure_set_value (structure, "streamheader", &array);
+
+            gst_pad_set_caps (ogg->srcpad, caps);
+
+            g_value_unset (&array);
+
+            if (ogg->caps)
+              gst_caps_unref (ogg->caps);
+            ogg->caps = caps;
+
+            GST_LOG_OBJECT (ogg, "Set \"streamheader\" caps with %d buffers "
+                "(one per page)", count);
+
+            /* Now, we do the same thing, but push buffers... */
+            for (l = ogg->oggstreams; l != NULL; l = l->next) {
+              GstOggStream *stream = (GstOggStream *) l->data;
+              GstBuffer *buf = GST_BUFFER (stream->headers->data);
+
+              result = gst_pad_push (ogg->srcpad, buf);
+              if (result != GST_FLOW_OK)
+                return result;
+            }
+            for (l = ogg->oggstreams; l != NULL; l = l->next) {
+              GstOggStream *stream = (GstOggStream *) l->data;
+              GList *j;
+
+              /* pushed the first one for each stream already, now do 2-N */
+              for (j = stream->headers->next; j != NULL; j = j->next) {
+                GstBuffer *buf = GST_BUFFER (j->data);
+
+                result = gst_pad_push (ogg->srcpad, buf);
+                if (result != GST_FLOW_OK)
+                  return result;
+              }
+            }
+
+            ogg->in_headers = 0;
+
+            /* And finally the pending data pages */
+            for (l = ogg->oggstreams; l != NULL; l = l->next) {
+              GstOggStream *stream = (GstOggStream *) l->data;
+              GList *k;
+
+              if (stream->unknown_pages == NULL)
+                continue;
+
+              if (found_pending_headers) {
+                GST_WARNING_OBJECT (ogg, "Incorrectly muxed headers found at "
+                    "approximate offset %" G_GINT64_FORMAT, ogg->offset);
+              }
+              found_pending_headers = TRUE;
+
+              GST_LOG_OBJECT (ogg, "Pushing %d pending pages after headers",
+                  g_list_length (stream->unknown_pages) + 1);
+
+              for (k = stream->unknown_pages; k != NULL; k = k->next) {
+                GstBuffer *buf = GST_BUFFER (k->data);
+
+                result = gst_pad_push (ogg->srcpad, buf);
+                if (result != GST_FLOW_OK)
+                  return result;
+              }
+              g_list_foreach (stream->unknown_pages,
+                  (GFunc) gst_mini_object_unref, NULL);
+              g_list_free (stream->unknown_pages);
+              stream->unknown_pages = NULL;
+            }
+          }
+
+          if (granule == -1) {
+            stream->stored_buffers = g_list_append (stream->stored_buffers,
+                pagebuffer);
+          } else {
+            while (stream->stored_buffers) {
+              GstBuffer *buf = stream->stored_buffers->data;
+
+              buf = gst_buffer_make_writable (buf);
+
+              GST_BUFFER_TIMESTAMP (buf) = buffertimestamp;
+              if (!keyframe) {
+                GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+              } else {
+                keyframe = FALSE;
+              }
+
+              result = gst_pad_push (ogg->srcpad, buf);
+              if (result != GST_FLOW_OK)
+                return result;
+
+              stream->stored_buffers =
+                  g_list_delete_link (stream->stored_buffers,
+                  stream->stored_buffers);
+            }
+
+            pagebuffer = gst_buffer_make_writable (pagebuffer);
+            if (!keyframe) {
+              GST_BUFFER_FLAG_SET (pagebuffer, GST_BUFFER_FLAG_DELTA_UNIT);
+            } else {
+              keyframe = FALSE;
+            }
+
+            result = gst_pad_push (ogg->srcpad, pagebuffer);
+            if (result != GST_FLOW_OK)
+              return result;
+          }
+        }
+      }
+    }
+  }
+
+  return result;
+
+failure:
+  gst_pad_push_event (GST_PAD (ogg->srcpad), gst_event_new_eos ());
+  return GST_FLOW_ERROR;
+}
+
+static GstStateChangeReturn
+gst_ogg_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstOggParse *ogg;
+  GstStateChangeReturn result = GST_STATE_CHANGE_FAILURE;
+
+  ogg = GST_OGG_PARSE (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      ogg_sync_init (&ogg->sync);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      ogg_sync_reset (&ogg->sync);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  result = parent_class->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      ogg_sync_clear (&ogg->sync);
+      break;
+    default:
+      break;
+  }
+  return result;
+}
+
+gboolean
+gst_ogg_parse_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_ogg_parse_debug, "oggparse", 0, "ogg parser");
+
+  return gst_element_register (plugin, "oggparse", GST_RANK_NONE,
+      GST_TYPE_OGG_PARSE);
+}
diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c
new file mode 100644
index 0000000..e20c568
--- /dev/null
+++ b/ext/ogg/gstoggstream.c
@@ -0,0 +1,2131 @@
+/* GStreamer Ogg Granulepos Mapping Utility Functions
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2009 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstoggstream.h"
+#include "dirac_parse.h"
+#include "vorbis_parse.h"
+
+#include <gst/riff/riff-media.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_ogg_demux_debug);
+GST_DEBUG_CATEGORY_EXTERN (gst_ogg_demux_setup_debug);
+#define GST_CAT_DEFAULT gst_ogg_demux_debug
+
+typedef struct _GstOggMap GstOggMap;
+
+typedef gboolean (*GstOggMapSetupFunc) (GstOggStream * pad,
+    ogg_packet * packet);
+typedef GstClockTime (*GstOggMapToTimeFunc) (GstOggStream * pad,
+    gint64 granulepos);
+typedef gint64 (*GstOggMapToGranuleFunc) (GstOggStream * pad,
+    gint64 granulepos);
+typedef gint64 (*GstOggMapToGranuleposFunc) (GstOggStream * pad,
+    gint64 granule, gint64 keyframe_granule);
+
+/* returns TRUE if the granulepos denotes a key frame */
+typedef gboolean (*GstOggMapIsKeyFrameFunc) (GstOggStream * pad,
+    gint64 granulepos);
+
+/* returns TRUE if the given packet is a stream header packet */
+typedef gboolean (*GstOggMapIsHeaderPacketFunc) (GstOggStream * pad,
+    ogg_packet * packet);
+typedef gint64 (*GstOggMapPacketDurationFunc) (GstOggStream * pad,
+    ogg_packet * packet);
+typedef void (*GstOggMapExtractTagsFunc) (GstOggStream * pad,
+    ogg_packet * packet);
+
+typedef gint64 (*GstOggMapGranuleposToKeyGranuleFunc) (GstOggStream * pad,
+    gint64 granulepos);
+
+#define SKELETON_FISBONE_MIN_SIZE  52
+#define SKELETON_FISHEAD_3_3_MIN_SIZE 112
+#define SKELETON_FISHEAD_4_0_MIN_SIZE 80
+
+struct _GstOggMap
+{
+  const gchar *id;
+  int id_length;
+  int min_packet_size;
+  const gchar *media_type;
+  GstOggMapSetupFunc setup_func;
+  GstOggMapToGranuleFunc granulepos_to_granule_func;
+  GstOggMapToGranuleposFunc granule_to_granulepos_func;
+  GstOggMapIsKeyFrameFunc is_key_frame_func;
+  GstOggMapIsHeaderPacketFunc is_header_func;
+  GstOggMapPacketDurationFunc packet_duration_func;
+  GstOggMapGranuleposToKeyGranuleFunc granulepos_to_key_granule_func;
+  GstOggMapExtractTagsFunc extract_tags_func;
+};
+
+extern const GstOggMap mappers[];
+
+GstClockTime
+gst_ogg_stream_get_packet_start_time (GstOggStream * pad, ogg_packet * packet)
+{
+  int duration;
+
+  if (packet->granulepos == -1) {
+    return GST_CLOCK_TIME_NONE;
+  }
+
+  duration = gst_ogg_stream_get_packet_duration (pad, packet);
+  if (duration == -1) {
+    return GST_CLOCK_TIME_NONE;
+  }
+
+  return gst_ogg_stream_granule_to_time (pad,
+      gst_ogg_stream_granulepos_to_granule (pad,
+          packet->granulepos) - duration);
+}
+
+GstClockTime
+gst_ogg_stream_get_start_time_for_granulepos (GstOggStream * pad,
+    gint64 granulepos)
+{
+  if (pad->frame_size == 0)
+    return GST_CLOCK_TIME_NONE;
+
+  return gst_ogg_stream_granule_to_time (pad,
+      gst_ogg_stream_granulepos_to_granule (pad, granulepos));
+}
+
+GstClockTime
+gst_ogg_stream_get_end_time_for_granulepos (GstOggStream * pad,
+    gint64 granulepos)
+{
+  return gst_ogg_stream_granule_to_time (pad,
+      gst_ogg_stream_granulepos_to_granule (pad, granulepos));
+}
+
+GstClockTime
+gst_ogg_stream_granule_to_time (GstOggStream * pad, gint64 granule)
+{
+  if (granule == 0 || pad->granulerate_n == 0 || pad->granulerate_d == 0)
+    return 0;
+
+  return gst_util_uint64_scale (granule, GST_SECOND * pad->granulerate_d,
+      pad->granulerate_n);
+}
+
+gint64
+gst_ogg_stream_granulepos_to_granule (GstOggStream * pad, gint64 granulepos)
+{
+  if (granulepos == -1 || granulepos == 0) {
+    return granulepos;
+  }
+
+  if (mappers[pad->map].granulepos_to_granule_func == NULL) {
+    GST_WARNING ("Failed to convert %s granulepos to granule",
+        gst_ogg_stream_get_media_type (pad));
+    return -1;
+  }
+
+  return mappers[pad->map].granulepos_to_granule_func (pad, granulepos);
+}
+
+gint64
+gst_ogg_stream_granulepos_to_key_granule (GstOggStream * pad, gint64 granulepos)
+{
+  if (mappers[pad->map].granulepos_to_key_granule_func)
+    return mappers[pad->map].granulepos_to_key_granule_func (pad, granulepos);
+
+  if (granulepos == -1 || granulepos == 0) {
+    return granulepos;
+  }
+
+  return granulepos >> pad->granuleshift;
+}
+
+gint64
+gst_ogg_stream_granule_to_granulepos (GstOggStream * pad, gint64 granule,
+    gint64 keyframe_granule)
+{
+  if (granule == -1 || granule == 0) {
+    return granule;
+  }
+
+  if (mappers[pad->map].granule_to_granulepos_func == NULL) {
+    GST_WARNING ("Failed to convert %s granule to granulepos",
+        gst_ogg_stream_get_media_type (pad));
+    return -1;
+  }
+
+  return mappers[pad->map].granule_to_granulepos_func (pad, granule,
+      keyframe_granule);
+}
+
+gboolean
+gst_ogg_stream_granulepos_is_key_frame (GstOggStream * pad, gint64 granulepos)
+{
+  if (granulepos == -1) {
+    return FALSE;
+  }
+
+  if (mappers[pad->map].is_key_frame_func == NULL) {
+    GST_WARNING ("Failed to determine keyframeness for %s granulepos",
+        gst_ogg_stream_get_media_type (pad));
+    return FALSE;
+  }
+
+  return mappers[pad->map].is_key_frame_func (pad, granulepos);
+}
+
+gboolean
+gst_ogg_stream_packet_is_header (GstOggStream * pad, ogg_packet * packet)
+{
+  if (mappers[pad->map].is_header_func == NULL) {
+    GST_WARNING ("Failed to determine headerness of %s packet",
+        gst_ogg_stream_get_media_type (pad));
+    return FALSE;
+  }
+
+  return mappers[pad->map].is_header_func (pad, packet);
+}
+
+gint64
+gst_ogg_stream_get_packet_duration (GstOggStream * pad, ogg_packet * packet)
+{
+  if (mappers[pad->map].packet_duration_func == NULL) {
+    GST_WARNING ("Failed to determine %s packet duration",
+        gst_ogg_stream_get_media_type (pad));
+    return -1;
+  }
+
+  return mappers[pad->map].packet_duration_func (pad, packet);
+}
+
+
+void
+gst_ogg_stream_extract_tags (GstOggStream * pad, ogg_packet * packet)
+{
+  if (mappers[pad->map].extract_tags_func == NULL) {
+    GST_DEBUG ("No tag extraction");
+    return;
+  }
+
+  mappers[pad->map].extract_tags_func (pad, packet);
+}
+
+const char *
+gst_ogg_stream_get_media_type (GstOggStream * pad)
+{
+  const GstCaps *caps = pad->caps;
+  const GstStructure *structure;
+  if (!caps)
+    return NULL;
+  structure = gst_caps_get_structure (caps, 0);
+  if (!structure)
+    return NULL;
+  return gst_structure_get_name (structure);
+}
+
+/* some generic functions */
+
+static gboolean
+is_keyframe_true (GstOggStream * pad, gint64 granulepos)
+{
+  return TRUE;
+}
+
+static gint64
+granulepos_to_granule_default (GstOggStream * pad, gint64 granulepos)
+{
+  gint64 keyindex, keyoffset;
+
+  if (pad->granuleshift != 0) {
+    keyindex = granulepos >> pad->granuleshift;
+    keyoffset = granulepos - (keyindex << pad->granuleshift);
+    return keyindex + keyoffset;
+  } else {
+    return granulepos;
+  }
+}
+
+
+static gint64
+granule_to_granulepos_default (GstOggStream * pad, gint64 granule,
+    gint64 keyframe_granule)
+{
+  gint64 keyoffset;
+
+  if (pad->granuleshift != 0) {
+    /* If we don't know where the previous keyframe is yet, assume it is
+       at 0 or 1, depending on bitstream version. If nothing else, this
+       avoids getting negative granpos back. */
+    if (keyframe_granule < 0)
+      keyframe_granule = pad->theora_has_zero_keyoffset ? 0 : 1;
+    keyoffset = granule - keyframe_granule;
+    return (keyframe_granule << pad->granuleshift) | keyoffset;
+  } else {
+    return granule;
+  }
+}
+
+#ifdef unused
+static gboolean
+is_header_unknown (GstOggStream * pad, ogg_packet * packet)
+{
+  GST_WARNING ("don't know how to detect header");
+  return FALSE;
+}
+#endif
+
+static gboolean
+is_header_true (GstOggStream * pad, ogg_packet * packet)
+{
+  return TRUE;
+}
+
+static gboolean
+is_header_count (GstOggStream * pad, ogg_packet * packet)
+{
+  if (pad->n_header_packets_seen < pad->n_header_packets) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static gint64
+packet_duration_constant (GstOggStream * pad, ogg_packet * packet)
+{
+  return pad->frame_size;
+}
+
+/* helper: extracts tags from vorbis comment ogg packet.
+ * Returns result in *tags after free'ing existing *tags (if any) */
+static gboolean
+tag_list_from_vorbiscomment_packet (ogg_packet * packet,
+    const guint8 * id_data, const guint id_data_length, GstTagList ** tags)
+{
+  gchar *encoder = NULL;
+  GstTagList *list;
+  gboolean ret = TRUE;
+
+  g_return_val_if_fail (tags != NULL, FALSE);
+
+  list = gst_tag_list_from_vorbiscomment (packet->packet, packet->bytes,
+      id_data, id_data_length, &encoder);
+
+  if (!list) {
+    GST_WARNING ("failed to decode vorbis comments");
+    ret = FALSE;
+    goto exit;
+  }
+
+  if (encoder) {
+    if (encoder[0])
+      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder,
+          NULL);
+    g_free (encoder);
+  }
+
+exit:
+  if (*tags)
+    gst_tag_list_free (*tags);
+  *tags = list;
+
+  return ret;
+}
+
+/* theora */
+
+static gboolean
+setup_theora_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint w, h, par_d, par_n;
+  guint8 vmaj, vmin, vrev;
+
+  vmaj = data[7];
+  vmin = data[8];
+  vrev = data[9];
+
+  w = GST_READ_UINT24_BE (data + 14) & 0xFFFFFF;
+  h = GST_READ_UINT24_BE (data + 17) & 0xFFFFFF;
+
+  pad->granulerate_n = GST_READ_UINT32_BE (data + 22);
+  pad->granulerate_d = GST_READ_UINT32_BE (data + 26);
+
+  par_n = GST_READ_UINT24_BE (data + 30);
+  par_d = GST_READ_UINT24_BE (data + 33);
+
+  GST_LOG ("fps = %d/%d, PAR = %u/%u, width = %u, height = %u",
+      pad->granulerate_n, pad->granulerate_d, par_n, par_d, w, h);
+
+  /* 2 bits + 3 bits = 5 bits KFGSHIFT */
+  pad->granuleshift = ((GST_READ_UINT8 (data + 40) & 0x03) << 3) +
+      (GST_READ_UINT8 (data + 41) >> 5);
+
+  pad->is_video = TRUE;
+  pad->n_header_packets = 3;
+  pad->frame_size = 1;
+
+  pad->bitrate = GST_READ_UINT24_BE (data + 37);
+  GST_LOG ("bit rate: %d", pad->bitrate);
+
+  if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
+    GST_WARNING ("frame rate %d/%d", pad->granulerate_n, pad->granulerate_d);
+    return FALSE;
+  }
+
+  /* The interpretation of the granule position has changed with 3.2.1.
+     The granule is now made from the number of frames encoded, rather than
+     the index of the frame being encoded - so there is a difference of 1. */
+  pad->theora_has_zero_keyoffset =
+      ((vmaj << 16) | (vmin << 8) | vrev) < 0x030201;
+
+  pad->caps = gst_caps_new_simple ("video/x-theora", NULL);
+
+  if (w > 0 && h > 0) {
+    gst_caps_set_simple (pad->caps, "width", G_TYPE_INT, w, "height",
+        G_TYPE_INT, h, NULL);
+  }
+
+  /* PAR of 0:N, N:0 and 0:0 is allowed and maps to 1:1 */
+  if (par_n == 0 || par_d == 0)
+    par_n = par_d = 1;
+
+  /* only add framerate now so caps look prettier, with width/height first */
+  gst_caps_set_simple (pad->caps, "framerate", GST_TYPE_FRACTION,
+      pad->granulerate_n, pad->granulerate_d, "pixel-aspect-ratio",
+      GST_TYPE_FRACTION, par_n, par_d, NULL);
+
+  return TRUE;
+}
+
+static gint64
+granulepos_to_granule_theora (GstOggStream * pad, gint64 granulepos)
+{
+  gint64 keyindex, keyoffset;
+
+  if (pad->granuleshift != 0) {
+    keyindex = granulepos >> pad->granuleshift;
+    keyoffset = granulepos - (keyindex << pad->granuleshift);
+    if (pad->theora_has_zero_keyoffset) {
+      keyoffset++;
+    }
+    return keyindex + keyoffset;
+  } else {
+    return granulepos;
+  }
+}
+
+static gboolean
+is_keyframe_theora (GstOggStream * pad, gint64 granulepos)
+{
+  gint64 frame_mask;
+
+  if (granulepos == (gint64) - 1)
+    return FALSE;
+
+  frame_mask = (1 << pad->granuleshift) - 1;
+
+  return ((granulepos & frame_mask) == 0);
+}
+
+static gboolean
+is_header_theora (GstOggStream * pad, ogg_packet * packet)
+{
+  return (packet->bytes > 0 && (packet->packet[0] & 0x80) == 0x80);
+}
+
+static void
+extract_tags_theora (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes > 0 && packet->packet[0] == 0x81) {
+    tag_list_from_vorbiscomment_packet (packet,
+        (const guint8 *) "\201theora", 7, &pad->taglist);
+
+    if (!pad->taglist)
+      pad->taglist = gst_tag_list_new ();
+
+    if (pad->bitrate)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_BITRATE, (guint) pad->bitrate, NULL);
+  }
+}
+
+/* dirac */
+
+static gboolean
+setup_dirac_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  int ret;
+  DiracSequenceHeader header;
+
+  ret = dirac_sequence_header_parse (&header, packet->packet + 13,
+      packet->bytes - 13);
+  if (ret == 0) {
+    GST_DEBUG ("Failed to parse Dirac sequence header");
+    return FALSE;
+  }
+
+  pad->is_video = TRUE;
+  pad->always_flush_page = TRUE;
+  pad->granulerate_n = header.frame_rate_numerator * 2;
+  pad->granulerate_d = header.frame_rate_denominator;
+  pad->granuleshift = 22;
+  pad->n_header_packets = 1;
+  pad->frame_size = 2;
+
+  if (header.interlaced_coding != 0) {
+    GST_DEBUG ("non-progressive Dirac coding not implemented");
+    return FALSE;
+  }
+
+  pad->caps = gst_caps_new_simple ("video/x-dirac",
+      "width", G_TYPE_INT, header.width,
+      "height", G_TYPE_INT, header.height,
+      "interlaced", G_TYPE_BOOLEAN, header.interlaced,
+      "pixel-aspect-ratio", GST_TYPE_FRACTION,
+      header.aspect_ratio_numerator, header.aspect_ratio_denominator,
+      "framerate", GST_TYPE_FRACTION, header.frame_rate_numerator,
+      header.frame_rate_denominator, NULL);
+
+  return TRUE;
+}
+
+#define OGG_DIRAC_GRANULE_LOW_MASK ((1<<22) - 1)
+static gboolean
+is_keyframe_dirac (GstOggStream * pad, gint64 granulepos)
+{
+  int dist_h;
+  int dist_l;
+  int dist;
+
+  if (granulepos == -1)
+    return -1;
+
+  dist_h = (granulepos >> 22) & 0xff;
+  dist_l = granulepos & 0xff;
+  dist = (dist_h << 8) | dist_l;
+
+  return (dist == 0);
+}
+
+static gint64
+granulepos_to_granule_dirac (GstOggStream * pad, gint64 gp)
+{
+  gint64 pt;
+  int delay;
+  gint64 dt;
+
+  pt = ((gp >> 22) + (gp & OGG_DIRAC_GRANULE_LOW_MASK)) >> 9;
+  delay = (gp >> 9) & 0x1fff;
+  dt = pt - delay;
+
+  GST_DEBUG ("pt %" G_GINT64_FORMAT " delay %d", pt, delay);
+
+  return dt + 4;
+}
+
+static gint64
+granule_to_granulepos_dirac (GstOggStream * pad, gint64 granule,
+    gint64 keyframe_granule)
+{
+  /* This conversion requires knowing more details about the Dirac
+   * stream. */
+  return -1;
+}
+
+static gint64
+granulepos_to_key_granule_dirac (GstOggStream * pad, gint64 gp)
+{
+  gint64 pt;
+  int dist_h;
+  int dist_l;
+  int dist;
+  int delay;
+  gint64 dt;
+
+  if (gp == -1 || gp == 0)
+    return gp;
+
+  pt = ((gp >> 22) + (gp & OGG_DIRAC_GRANULE_LOW_MASK)) >> 9;
+  dist_h = (gp >> 22) & 0xff;
+  dist_l = gp & 0xff;
+  dist = (dist_h << 8) | dist_l;
+  delay = (gp >> 9) & 0x1fff;
+  dt = pt - delay;
+
+  return dt - 2 * dist + 4;
+}
+
+/* VP8 */
+
+static gboolean
+setup_vp8_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  gint width, height, par_n, par_d, fps_n, fps_d;
+
+  if (packet->bytes < 26) {
+    GST_DEBUG ("Failed to parse VP8 BOS page");
+    return FALSE;
+  }
+
+  width = GST_READ_UINT16_BE (packet->packet + 8);
+  height = GST_READ_UINT16_BE (packet->packet + 10);
+  par_n = GST_READ_UINT24_BE (packet->packet + 12);
+  par_d = GST_READ_UINT24_BE (packet->packet + 15);
+  fps_n = GST_READ_UINT32_BE (packet->packet + 18);
+  fps_d = GST_READ_UINT32_BE (packet->packet + 22);
+
+  pad->is_video = TRUE;
+  pad->is_vp8 = TRUE;
+  pad->granulerate_n = fps_n;
+  pad->granulerate_d = fps_d;
+  pad->n_header_packets = 2;
+  pad->frame_size = 1;
+
+  pad->caps = gst_caps_new_simple ("video/x-vp8",
+      "width", G_TYPE_INT, width,
+      "height", G_TYPE_INT, height,
+      "pixel-aspect-ratio", GST_TYPE_FRACTION,
+      par_n, par_d, "framerate", GST_TYPE_FRACTION, fps_n, fps_d, NULL);
+
+  return TRUE;
+}
+
+static gboolean
+is_keyframe_vp8 (GstOggStream * pad, gint64 granulepos)
+{
+  guint64 gpos = granulepos;
+
+  if (granulepos == -1)
+    return FALSE;
+
+  /* Get rid of flags */
+  gpos >>= 3;
+
+  return ((gpos & 0x07ffffff) == 0);
+}
+
+static gint64
+granulepos_to_granule_vp8 (GstOggStream * pad, gint64 gpos)
+{
+  guint64 gp = (guint64) gpos;
+  guint32 pt;
+  guint32 dist;
+
+  pt = (gp >> 32);
+  dist = (gp >> 3) & 0x07ffffff;
+
+  GST_DEBUG ("pt %u, dist %u", pt, dist);
+
+  return pt;
+}
+
+static gint64
+granule_to_granulepos_vp8 (GstOggStream * pad, gint64 granule,
+    gint64 keyframe_granule)
+{
+  /* FIXME: This requires to look into the content of the packets
+   * because the simple granule counter doesn't know about invisible
+   * frames...
+   */
+  return -1;
+}
+
+/* Check if this packet contains an invisible frame or not */
+static gint64
+packet_duration_vp8 (GstOggStream * pad, ogg_packet * packet)
+{
+  guint32 hdr;
+
+  if (packet->bytes < 3)
+    return 0;
+
+  hdr = GST_READ_UINT24_LE (packet->packet);
+
+  return (((hdr >> 4) & 1) != 0) ? 1 : 0;
+}
+
+static gint64
+granulepos_to_key_granule_vp8 (GstOggStream * pad, gint64 granulepos)
+{
+  guint64 gp = granulepos;
+  guint64 pts = (gp >> 32);
+  guint32 dist = (gp >> 3) & 0x07ffffff;
+
+  if (granulepos == -1 || granulepos == 0)
+    return granulepos;
+
+  if (dist > pts)
+    return 0;
+
+  return pts - dist;
+}
+
+static gboolean
+is_header_vp8 (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes >= 5 && packet->packet[0] == 0x4F &&
+      packet->packet[1] == 0x56 && packet->packet[2] == 0x50 &&
+      packet->packet[3] == 0x38 && packet->packet[4] == 0x30)
+    return TRUE;
+  return FALSE;
+}
+
+static void
+extract_tags_vp8 (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes >= 7 && memcmp (packet->packet, "OVP80\2 ", 7) == 0) {
+    tag_list_from_vorbiscomment_packet (packet,
+        (const guint8 *) "OVP80\2 ", 7, &pad->taglist);
+  }
+}
+
+/* vorbis */
+
+static gboolean
+setup_vorbis_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint chans;
+
+  data += 1 + 6;
+  pad->version = GST_READ_UINT32_LE (data);
+  data += 4;
+  chans = GST_READ_UINT8 (data);
+  data += 1;
+  pad->granulerate_n = GST_READ_UINT32_LE (data);
+  pad->granulerate_d = 1;
+  pad->granuleshift = 0;
+  pad->preroll = 2;
+  pad->last_size = 0;
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+
+  data += 4;
+  pad->bitrate_upper = GST_READ_UINT32_LE (data);
+  data += 4;
+  pad->bitrate_nominal = GST_READ_UINT32_LE (data);
+  data += 4;
+  pad->bitrate_lower = GST_READ_UINT32_LE (data);
+
+  if (pad->bitrate_nominal > 0)
+    pad->bitrate = pad->bitrate_nominal;
+
+  if (pad->bitrate_upper > 0 && !pad->bitrate)
+    pad->bitrate = pad->bitrate_upper;
+
+  if (pad->bitrate_lower > 0 && !pad->bitrate)
+    pad->bitrate = pad->bitrate_lower;
+
+  GST_LOG ("bit rate: %d", pad->bitrate);
+
+  pad->n_header_packets = 3;
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  parse_vorbis_header_packet (pad, packet);
+
+  pad->caps = gst_caps_new_simple ("audio/x-vorbis",
+      "rate", G_TYPE_INT, pad->granulerate_n, "channels", G_TYPE_INT, chans,
+      NULL);
+
+  return TRUE;
+}
+
+static gboolean
+is_header_vorbis (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes > 0 && (packet->packet[0] & 0x01) == 0)
+    return FALSE;
+
+  if (packet->packet[0] == 5) {
+    parse_vorbis_setup_packet (pad, packet);
+  }
+
+  return TRUE;
+}
+
+static void
+extract_tags_vorbis (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes == 0 || (packet->packet[0] & 0x01) == 0)
+    return;
+
+  if (((guint8 *) (packet->packet))[0] == 0x03) {
+    tag_list_from_vorbiscomment_packet (packet,
+        (const guint8 *) "\003vorbis", 7, &pad->taglist);
+
+    if (!pad->taglist)
+      pad->taglist = gst_tag_list_new ();
+
+    gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_ENCODER_VERSION, pad->version, NULL);
+
+    if (pad->bitrate_nominal > 0)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_NOMINAL_BITRATE, (guint) pad->bitrate_nominal, NULL);
+
+    if (pad->bitrate_upper > 0)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_MAXIMUM_BITRATE, (guint) pad->bitrate_upper, NULL);
+
+    if (pad->bitrate_lower > 0)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_MINIMUM_BITRATE, (guint) pad->bitrate_lower, NULL);
+
+    if (pad->bitrate)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_BITRATE, (guint) pad->bitrate, NULL);
+  }
+}
+
+static gint64
+packet_duration_vorbis (GstOggStream * pad, ogg_packet * packet)
+{
+  int mode;
+  int size;
+  int duration;
+
+  if (packet->bytes == 0 || packet->packet[0] & 1)
+    return 0;
+
+  mode = (packet->packet[0] >> 1) & ((1 << pad->vorbis_log2_num_modes) - 1);
+  size = pad->vorbis_mode_sizes[mode] ? pad->long_size : pad->short_size;
+
+  if (pad->last_size == 0) {
+    duration = 0;
+  } else {
+    duration = pad->last_size / 4 + size / 4;
+  }
+  pad->last_size = size;
+
+  GST_DEBUG ("duration %d", (int) duration);
+
+  return duration;
+}
+
+/* speex */
+
+
+static gboolean
+setup_speex_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint chans;
+
+  data += 8 + 20 + 4 + 4;
+  pad->granulerate_n = GST_READ_UINT32_LE (data);
+  pad->granulerate_d = 1;
+  pad->granuleshift = 0;
+
+  data += 4 + 4 + 4;
+  chans = GST_READ_UINT32_LE (data);
+  data += 4;
+  pad->bitrate = GST_READ_UINT32_LE (data);
+
+  GST_LOG ("sample rate: %d, channels: %u", pad->granulerate_n, chans);
+  GST_LOG ("bit rate: %d", pad->bitrate);
+
+  pad->n_header_packets = GST_READ_UINT32_LE (packet->packet + 68) + 2;
+  pad->frame_size = GST_READ_UINT32_LE (packet->packet + 64) *
+      GST_READ_UINT32_LE (packet->packet + 56);
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  pad->caps = gst_caps_new_simple ("audio/x-speex", "rate", G_TYPE_INT,
+      pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
+
+  return TRUE;
+}
+
+static void
+extract_tags_count (GstOggStream * pad, ogg_packet * packet)
+{
+  /* packet 2 must be comment packet */
+  if (packet->bytes > 0 && pad->n_header_packets_seen == 1) {
+    tag_list_from_vorbiscomment_packet (packet, NULL, 0, &pad->taglist);
+
+    if (!pad->taglist)
+      pad->taglist = gst_tag_list_new ();
+
+    if (pad->bitrate)
+      gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_BITRATE, (guint) pad->bitrate, NULL);
+  }
+}
+
+
+/* flac */
+
+static gboolean
+setup_fLaC_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  pad->granulerate_n = 0;
+  pad->granulerate_d = 1;
+  pad->granuleshift = 0;
+
+  pad->n_header_packets = 3;
+
+  pad->caps = gst_caps_new_simple ("audio/x-flac", NULL);
+
+  return TRUE;
+}
+
+static gboolean
+is_header_fLaC (GstOggStream * pad, ogg_packet * packet)
+{
+  if (pad->n_header_packets_seen == 1) {
+    pad->granulerate_n = (packet->packet[14] << 12) |
+        (packet->packet[15] << 4) | ((packet->packet[16] >> 4) & 0xf);
+  }
+
+  if (pad->n_header_packets_seen < pad->n_header_packets) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+static gboolean
+setup_flac_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint chans;
+
+  /* see http://flac.sourceforge.net/ogg_mapping.html */
+
+  pad->granulerate_n = (GST_READ_UINT32_BE (data + 27) & 0xFFFFF000) >> 12;
+  pad->granulerate_d = 1;
+  pad->granuleshift = 0;
+  chans = ((GST_READ_UINT32_BE (data + 27) & 0x00000E00) >> 9) + 1;
+
+  GST_DEBUG ("sample rate: %d, channels: %u", pad->granulerate_n, chans);
+
+  pad->n_header_packets = GST_READ_UINT16_BE (packet->packet + 7);
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  pad->caps = gst_caps_new_simple ("audio/x-flac", "rate", G_TYPE_INT,
+      pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
+
+  return TRUE;
+}
+
+static gboolean
+is_header_flac (GstOggStream * pad, ogg_packet * packet)
+{
+  return (packet->bytes > 0 && (packet->packet[0] != 0xff));
+}
+
+static gint64
+packet_duration_flac (GstOggStream * pad, ogg_packet * packet)
+{
+  int block_size_index;
+
+  if (packet->bytes < 4)
+    return -1;
+
+  block_size_index = packet->packet[2] >> 4;
+  if (block_size_index == 1)
+    return 192;
+  if (block_size_index >= 2 && block_size_index <= 5) {
+    return 576 << (block_size_index - 2);
+  }
+  if (block_size_index >= 8) {
+    return 256 << (block_size_index - 8);
+  }
+  if (block_size_index == 6 || block_size_index == 7) {
+    guint len, bytes = (block_size_index - 6) + 1;
+    guint8 tmp;
+
+    if (packet->bytes < 4 + 1 + bytes)
+      return -1;
+    tmp = packet->packet[4];
+    /* utf-8 prefix */
+    len = 0;
+    while (tmp & 0x80) {
+      len++;
+      tmp <<= 1;
+    }
+    if (len == 2)
+      return -1;
+    if (len == 0)
+      len++;
+    if (packet->bytes < 4 + len + bytes)
+      return -1;
+    if (bytes == 1) {
+      return packet->packet[4 + len] + 1;
+    } else {
+      return GST_READ_UINT16_BE (packet->packet + 4 + len) + 1;
+    }
+  }
+  return -1;
+}
+
+static void
+extract_tags_flac (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes > 4 && ((packet->packet[0] & 0x7F) == 0x4)) {
+    tag_list_from_vorbiscomment_packet (packet,
+        packet->packet, 4, &pad->taglist);
+  }
+}
+
+/* fishead */
+
+static gboolean
+setup_fishead_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data;
+  gint64 prestime_n, prestime_d;
+  gint64 basetime_n, basetime_d;
+
+  data = packet->packet;
+
+  data += 8;                    /* header */
+
+  pad->skeleton_major = GST_READ_UINT16_LE (data);
+  data += 2;
+  pad->skeleton_minor = GST_READ_UINT16_LE (data);
+  data += 2;
+
+  prestime_n = (gint64) GST_READ_UINT64_LE (data);
+  data += 8;
+  prestime_d = (gint64) GST_READ_UINT64_LE (data);
+  data += 8;
+  basetime_n = (gint64) GST_READ_UINT64_LE (data);
+  data += 8;
+  basetime_d = (gint64) GST_READ_UINT64_LE (data);
+  data += 8;
+
+  /* FIXME: we don't use basetime anywhere in the demuxer! */
+  if (basetime_d != 0)
+    pad->basetime = gst_util_uint64_scale (GST_SECOND, basetime_n, basetime_d);
+  else
+    pad->basetime = -1;
+
+  if (prestime_d != 0)
+    pad->prestime = gst_util_uint64_scale (GST_SECOND, prestime_n, prestime_d);
+  else
+    pad->prestime = -1;
+
+  /* Ogg Skeleton 3.3+ streams provide additional information in the header */
+  if (packet->bytes >= SKELETON_FISHEAD_3_3_MIN_SIZE && pad->skeleton_major == 3
+      && pad->skeleton_minor > 0) {
+    gint64 firstsampletime_n, firstsampletime_d;
+    gint64 lastsampletime_n, lastsampletime_d;
+    gint64 firstsampletime, lastsampletime;
+    guint64 segment_length, content_offset;
+
+    firstsampletime_n = GST_READ_UINT64_LE (data + 64);
+    firstsampletime_d = GST_READ_UINT64_LE (data + 72);
+    lastsampletime_n = GST_READ_UINT64_LE (data + 80);
+    lastsampletime_d = GST_READ_UINT64_LE (data + 88);
+    segment_length = GST_READ_UINT64_LE (data + 96);
+    content_offset = GST_READ_UINT64_LE (data + 104);
+
+    GST_INFO ("firstsampletime %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT,
+        firstsampletime_n, firstsampletime_d);
+    GST_INFO ("lastsampletime %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT,
+        lastsampletime_n, lastsampletime_d);
+    GST_INFO ("segment length %" G_GUINT64_FORMAT, segment_length);
+    GST_INFO ("content offset %" G_GUINT64_FORMAT, content_offset);
+
+    if (firstsampletime_d > 0)
+      firstsampletime = gst_util_uint64_scale (GST_SECOND,
+          firstsampletime_n, firstsampletime_d);
+    else
+      firstsampletime = 0;
+
+    if (lastsampletime_d > 0)
+      lastsampletime = gst_util_uint64_scale (GST_SECOND,
+          lastsampletime_n, lastsampletime_d);
+    else
+      lastsampletime = 0;
+
+    if (lastsampletime > firstsampletime)
+      pad->total_time = lastsampletime - firstsampletime;
+    else
+      pad->total_time = -1;
+
+    GST_INFO ("skeleton fishead parsed total: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (pad->total_time));
+  } else if (packet->bytes >= SKELETON_FISHEAD_4_0_MIN_SIZE
+      && pad->skeleton_major == 4) {
+    guint64 segment_length, content_offset;
+
+    segment_length = GST_READ_UINT64_LE (data + 64);
+    content_offset = GST_READ_UINT64_LE (data + 72);
+
+    GST_INFO ("segment length %" G_GUINT64_FORMAT, segment_length);
+    GST_INFO ("content offset %" G_GUINT64_FORMAT, content_offset);
+  } else {
+    pad->total_time = -1;
+  }
+
+  GST_INFO ("skeleton fishead %u.%u parsed (basetime: %" GST_TIME_FORMAT
+      ", prestime: %" GST_TIME_FORMAT ")", pad->skeleton_major,
+      pad->skeleton_minor, GST_TIME_ARGS (pad->basetime),
+      GST_TIME_ARGS (pad->prestime));
+
+  pad->is_skeleton = TRUE;
+  pad->is_sparse = TRUE;
+
+  pad->caps = gst_caps_new_simple ("application/x-ogg-skeleton", NULL);
+
+  return TRUE;
+}
+
+gboolean
+gst_ogg_map_parse_fisbone (GstOggStream * pad, const guint8 * data, guint size,
+    guint32 * serialno, GstOggSkeleton * type)
+{
+  GstOggSkeleton stype;
+  guint serial_offset;
+
+  if (size != 0 && size < SKELETON_FISBONE_MIN_SIZE) {
+    GST_WARNING ("small fisbone packet of size %d, ignoring", size);
+    return FALSE;
+  }
+
+  if (size == 0) {
+    /* Skeleton EOS packet is zero bytes */
+    return FALSE;
+  } else if (memcmp (data, "fisbone\0", 8) == 0) {
+    GST_INFO ("got fisbone packet");
+    stype = GST_OGG_SKELETON_FISBONE;
+    serial_offset = 12;
+  } else if (memcmp (data, "index\0", 6) == 0) {
+    GST_INFO ("got index packet");
+    stype = GST_OGG_SKELETON_INDEX;
+    serial_offset = 6;
+  } else if (memcmp (data, "fishead\0", 8) == 0) {
+    return FALSE;
+  } else {
+    GST_WARNING ("unknown skeleton packet \"%10.10s\"", data);
+    return FALSE;
+  }
+
+  if (serialno)
+    *serialno = GST_READ_UINT32_LE (data + serial_offset);
+
+  if (type)
+    *type = stype;
+
+  return TRUE;
+}
+
+gboolean
+gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad,
+    const guint8 * data, guint size, GstClockTime * p_start_time)
+{
+  GstClockTime start_time;
+  gint64 start_granule;
+
+  if (pad->have_fisbone) {
+    GST_DEBUG ("already have fisbone, ignoring second one");
+    return FALSE;
+  }
+
+  /* skip "fisbone\0" + headers offset + serialno + num headers */
+  data += 8 + 4 + 4 + 4;
+
+  pad->have_fisbone = TRUE;
+
+  /* We don't overwrite whatever was set before by the format-specific
+     setup: skeleton contains wrong information sometimes, and the codec
+     headers are authoritative.
+     So we only gather information that was not already filled out by
+     the mapper setup. This should hopefully allow handling unknown
+     streams a bit better, while not trashing correct setup from bad
+     skeleton data. */
+  if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
+    pad->granulerate_n = GST_READ_UINT64_LE (data);
+    pad->granulerate_d = GST_READ_UINT64_LE (data + 8);
+  }
+  if (pad->granuleshift < 0) {
+    pad->granuleshift = GST_READ_UINT8 (data + 28);
+  }
+
+  start_granule = GST_READ_UINT64_LE (data + 16);
+  pad->preroll = GST_READ_UINT32_LE (data + 24);
+
+  start_time = granulepos_to_granule_default (pad, start_granule);
+
+  GST_INFO ("skeleton fisbone parsed "
+      "(start time: %" GST_TIME_FORMAT
+      " granulerate_n: %d granulerate_d: %d "
+      " preroll: %" G_GUINT32_FORMAT " granuleshift: %d)",
+      GST_TIME_ARGS (start_time),
+      pad->granulerate_n, pad->granulerate_d, pad->preroll, pad->granuleshift);
+
+  if (p_start_time)
+    *p_start_time = start_time;
+
+  return TRUE;
+}
+
+static gboolean
+read_vlc (const guint8 ** data, guint * size, guint64 * result)
+{
+  gint shift = 0;
+  guint8 byte;
+
+  *result = 0;
+
+  do {
+    if (G_UNLIKELY (*size < 1))
+      return FALSE;
+
+    byte = **data;
+    *result |= ((byte & 0x7f) << shift);
+    shift += 7;
+
+    (*data)++;
+    (*size)--;
+  } while ((byte & 0x80) != 0x80);
+
+  return TRUE;
+}
+
+gboolean
+gst_ogg_map_add_index (GstOggStream * pad, GstOggStream * skel_pad,
+    const guint8 * data, guint size)
+{
+  guint64 i, n_keypoints, isize;
+  guint64 offset, timestamp;
+  guint64 offset_d, timestamp_d;
+
+  if (pad->index) {
+    GST_DEBUG ("already have index, ignoring second one");
+    return TRUE;
+  }
+
+  if ((skel_pad->skeleton_major == 3 && size < 26) ||
+      (skel_pad->skeleton_major == 4 && size < 62)) {
+    GST_WARNING ("small index packet of size %u, ignoring", size);
+    return FALSE;
+  }
+
+  /* skip "index\0" + serialno */
+  data += 6 + 4;
+  size -= 6 + 4;
+
+  n_keypoints = GST_READ_UINT64_LE (data);
+
+  data += 8;
+  size -= 8;
+
+  pad->kp_denom = GST_READ_UINT64_LE (data);
+  if (pad->kp_denom == 0)
+    pad->kp_denom = 1;
+
+  data += 8;
+  size -= 8;
+
+  if (skel_pad->skeleton_major == 4) {
+    gint64 firstsampletime_n;
+    gint64 lastsampletime_n;
+    gint64 firstsampletime, lastsampletime;
+
+    firstsampletime_n = GST_READ_UINT64_LE (data + 0);
+    lastsampletime_n = GST_READ_UINT64_LE (data + 8);
+
+    GST_INFO ("firstsampletime %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT,
+        firstsampletime_n, pad->kp_denom);
+    GST_INFO ("lastsampletime %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT,
+        lastsampletime_n, pad->kp_denom);
+
+    firstsampletime = gst_util_uint64_scale (GST_SECOND,
+        firstsampletime_n, pad->kp_denom);
+    lastsampletime = gst_util_uint64_scale (GST_SECOND,
+        lastsampletime_n, pad->kp_denom);
+
+    if (lastsampletime > firstsampletime)
+      pad->total_time = lastsampletime - firstsampletime;
+    else
+      pad->total_time = -1;
+
+    GST_INFO ("skeleton index parsed total: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (pad->total_time));
+
+    data += 16;
+    size -= 16;
+  }
+
+  GST_INFO ("skeleton index has %" G_GUINT64_FORMAT " keypoints, denom: %"
+      G_GINT64_FORMAT, n_keypoints, pad->kp_denom);
+
+  pad->index = g_try_new (GstOggIndex, n_keypoints);
+  if (!pad->index)
+    return FALSE;
+
+  isize = 0;
+  offset = 0;
+  timestamp = 0;
+
+  for (i = 0; i < n_keypoints; i++) {
+    /* read deltas */
+    if (!read_vlc (&data, &size, &offset_d))
+      break;
+    if (!read_vlc (&data, &size, &timestamp_d))
+      break;
+
+    offset += offset_d;
+    timestamp += timestamp_d;
+
+    pad->index[i].offset = offset;
+    pad->index[i].timestamp = timestamp;
+    isize++;
+
+    GST_INFO ("offset %" G_GUINT64_FORMAT " time %" G_GUINT64_FORMAT, offset,
+        timestamp);
+  }
+  if (isize != n_keypoints) {
+    GST_WARNING ("truncated index, expected %" G_GUINT64_FORMAT ", found %"
+        G_GUINT64_FORMAT, n_keypoints, isize);
+  }
+  pad->n_index = isize;
+  /* try to use the index to estimate the bitrate */
+  if (isize > 2) {
+    guint64 so, eo, st, et, b, t;
+
+    /* get start and end offset and timestamps */
+    so = pad->index[0].offset;
+    st = pad->index[0].timestamp;
+    eo = pad->index[isize - 1].offset;
+    et = pad->index[isize - 1].timestamp;
+
+    b = eo - so;
+    t = et - st;
+
+    GST_DEBUG ("bytes/time %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, b, t);
+
+    /* this is the total stream bitrate according to this index */
+    pad->idx_bitrate = gst_util_uint64_scale (8 * b, pad->kp_denom, t);
+
+    GST_DEBUG ("bitrate %" G_GUINT64_FORMAT, pad->idx_bitrate);
+  }
+
+  return TRUE;
+}
+
+static gint
+gst_ogg_index_compare (const GstOggIndex * index, const guint64 * ts,
+    gpointer user_data)
+{
+  if (index->timestamp < *ts)
+    return -1;
+  else if (index->timestamp > *ts)
+    return 1;
+  else
+    return 0;
+}
+
+gboolean
+gst_ogg_map_search_index (GstOggStream * pad, gboolean before,
+    guint64 * timestamp, guint64 * offset)
+{
+  guint64 n_index;
+  guint64 ts;
+  GstOggIndex *best;
+
+  n_index = pad->n_index;
+  if (n_index == 0 || pad->index == NULL)
+    return FALSE;
+
+  ts = gst_util_uint64_scale (*timestamp, pad->kp_denom, GST_SECOND);
+  GST_INFO ("timestamp %" G_GUINT64_FORMAT, ts);
+
+  best =
+      gst_util_array_binary_search (pad->index, n_index, sizeof (GstOggIndex),
+      (GCompareDataFunc) gst_ogg_index_compare, GST_SEARCH_MODE_BEFORE, &ts,
+      NULL);
+
+  if (best == NULL)
+    return FALSE;
+
+  GST_INFO ("found at index %u", (guint) (best - pad->index));
+
+  if (offset)
+    *offset = best->offset;
+  if (timestamp)
+    *timestamp =
+        gst_util_uint64_scale (best->timestamp, GST_SECOND, pad->kp_denom);
+
+  return TRUE;
+}
+
+/* Do we need these for something?
+ * ogm->hdr.size = GST_READ_UINT32_LE (&data[13]);
+ * ogm->hdr.time_unit = GST_READ_UINT64_LE (&data[17]);
+ * ogm->hdr.samples_per_unit = GST_READ_UINT64_LE (&data[25]);
+ * ogm->hdr.default_len = GST_READ_UINT32_LE (&data[33]);
+ * ogm->hdr.buffersize = GST_READ_UINT32_LE (&data[37]);
+ * ogm->hdr.bits_per_sample = GST_READ_UINT32_LE (&data[41]);
+ */
+
+static gboolean
+is_header_ogm (GstOggStream * pad, ogg_packet * packet)
+{
+  if (packet->bytes >= 1 && (packet->packet[0] & 0x01))
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+extract_tags_ogm (GstOggStream * pad, ogg_packet * packet)
+{
+  if (!(packet->packet[0] & 1) && (packet->packet[0] & 3 && pad->is_ogm_text)) {
+    tag_list_from_vorbiscomment_packet (packet,
+        (const guint8 *) "\003vorbis", 7, &pad->taglist);
+  }
+}
+
+static gint64
+packet_duration_ogm (GstOggStream * pad, ogg_packet * packet)
+{
+  const guint8 *data;
+  int samples;
+  int offset;
+  int n;
+
+  data = packet->packet;
+  offset = 1 + (((data[0] & 0xc0) >> 6) | ((data[0] & 0x02) << 1));
+
+  if (offset > packet->bytes) {
+    GST_ERROR ("buffer too small");
+    return -1;
+  }
+
+  samples = 0;
+  for (n = offset - 1; n > 0; n--) {
+    samples = (samples << 8) | data[n];
+  }
+
+  return samples;
+}
+
+static gboolean
+setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint32 fourcc;
+  gchar *fstr;
+
+  pad->granulerate_n = GST_READ_UINT64_LE (data + 25);
+  pad->granulerate_d = 1;
+
+  fourcc = GST_READ_UINT32_LE (data + 9);
+  fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  GST_DEBUG ("fourcc: %s", fstr);
+
+  pad->caps = gst_riff_create_audio_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
+
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  if (pad->caps) {
+    gst_caps_set_simple (pad->caps,
+        "rate", G_TYPE_INT, pad->granulerate_n, NULL);
+  } else {
+    pad->caps = gst_caps_new_simple ("audio/x-ogm-unknown",
+        "fourcc", G_TYPE_STRING, fstr,
+        "rate", G_TYPE_INT, pad->granulerate_n, NULL);
+  }
+  g_free (fstr);
+
+  pad->n_header_packets = 1;
+  pad->is_ogm = TRUE;
+
+  return TRUE;
+}
+
+static gboolean
+setup_ogmvideo_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  guint32 fourcc;
+  int width, height;
+  gint64 time_unit;
+  gchar *fstr;
+
+  GST_DEBUG ("time unit %d", GST_READ_UINT32_LE (data + 16));
+  GST_DEBUG ("samples per unit %d", GST_READ_UINT32_LE (data + 24));
+
+  pad->is_video = TRUE;
+  pad->granulerate_n = 10000000;
+  time_unit = GST_READ_UINT64_LE (data + 17);
+  if (time_unit > G_MAXINT || time_unit < G_MININT) {
+    GST_WARNING ("timeunit is out of range");
+  }
+  pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT);
+
+  GST_LOG ("fps = %d/%d = %.3f",
+      pad->granulerate_n, pad->granulerate_d,
+      (double) pad->granulerate_n / pad->granulerate_d);
+
+  fourcc = GST_READ_UINT32_LE (data + 9);
+  width = GST_READ_UINT32_LE (data + 45);
+  height = GST_READ_UINT32_LE (data + 49);
+  fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+  GST_DEBUG ("fourcc: %s", fstr);
+
+  pad->caps = gst_riff_create_video_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
+
+  if (pad->caps == NULL) {
+    pad->caps = gst_caps_new_simple ("video/x-ogm-unknown",
+        "fourcc", G_TYPE_STRING, fstr,
+        "framerate", GST_TYPE_FRACTION, pad->granulerate_n,
+        pad->granulerate_d, NULL);
+  } else {
+    gst_caps_set_simple (pad->caps,
+        "framerate", GST_TYPE_FRACTION, pad->granulerate_n,
+        pad->granulerate_d,
+        "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
+  }
+  GST_DEBUG ("caps: %" GST_PTR_FORMAT, pad->caps);
+  g_free (fstr);
+
+  pad->n_header_packets = 1;
+  pad->frame_size = 1;
+  pad->is_ogm = TRUE;
+
+  return TRUE;
+}
+
+static gboolean
+setup_ogmtext_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  gint64 time_unit;
+
+  pad->granulerate_n = 10000000;
+  time_unit = GST_READ_UINT64_LE (data + 17);
+  if (time_unit > G_MAXINT || time_unit < G_MININT) {
+    GST_WARNING ("timeunit is out of range");
+  }
+  pad->granulerate_d = (gint) CLAMP (time_unit, G_MININT, G_MAXINT);
+
+  GST_LOG ("fps = %d/%d = %.3f",
+      pad->granulerate_n, pad->granulerate_d,
+      (double) pad->granulerate_n / pad->granulerate_d);
+
+  if (pad->granulerate_d <= 0)
+    return FALSE;
+
+  pad->caps = gst_caps_new_simple ("text/plain", NULL);
+
+  pad->n_header_packets = 1;
+  pad->is_ogm = TRUE;
+  pad->is_ogm_text = TRUE;
+  pad->is_sparse = TRUE;
+
+  return TRUE;
+}
+
+/* PCM */
+
+#define OGGPCM_FMT_S8 0x00000000        /* Signed integer 8 bit */
+#define OGGPCM_FMT_U8 0x00000001        /* Unsigned integer 8 bit */
+#define OGGPCM_FMT_S16_LE 0x00000002    /* Signed integer 16 bit little endian */
+#define OGGPCM_FMT_S16_BE 0x00000003    /* Signed integer 16 bit big endian */
+#define OGGPCM_FMT_S24_LE 0x00000004    /* Signed integer 24 bit little endian */
+#define OGGPCM_FMT_S24_BE 0x00000005    /* Signed integer 24 bit big endian */
+#define OGGPCM_FMT_S32_LE 0x00000006    /* Signed integer 32 bit little endian */
+#define OGGPCM_FMT_S32_BE 0x00000007    /* Signed integer 32 bit big endian */
+
+#define OGGPCM_FMT_ULAW 0x00000010      /* G.711 u-law encoding (8 bit) */
+#define OGGPCM_FMT_ALAW 0x00000011      /* G.711 A-law encoding (8 bit) */
+
+#define OGGPCM_FMT_FLT32_LE 0x00000020  /* IEEE Float [-1,1] 32 bit little endian */
+#define OGGPCM_FMT_FLT32_BE 0x00000021  /* IEEE Float [-1,1] 32 bit big endian */
+#define OGGPCM_FMT_FLT64_LE 0x00000022  /* IEEE Float [-1,1] 64 bit little endian */
+#define OGGPCM_FMT_FLT64_BE 0x00000023  /* IEEE Float [-1,1] 64 bit big endian */
+
+
+static gboolean
+setup_pcm_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  int format;
+  int channels;
+  GstCaps *caps;
+
+  pad->granulerate_n = GST_READ_UINT32_LE (data + 16);
+  pad->granulerate_d = 1;
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+
+  format = GST_READ_UINT32_LE (data + 12);
+  channels = GST_READ_UINT8 (data + 21);
+
+  pad->n_header_packets = 2 + GST_READ_UINT32_LE (data + 24);
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  switch (format) {
+    case OGGPCM_FMT_S8:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S8", NULL);
+      break;
+    case OGGPCM_FMT_U8:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "U8", NULL);
+      break;
+    case OGGPCM_FMT_S16_LE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S16LE", NULL);
+      break;
+    case OGGPCM_FMT_S16_BE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S16BE", NULL);
+      break;
+    case OGGPCM_FMT_S24_LE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S24LE", NULL);
+      break;
+    case OGGPCM_FMT_S24_BE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S24BE", NULL);
+      break;
+    case OGGPCM_FMT_S32_LE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S32LE", NULL);
+      break;
+    case OGGPCM_FMT_S32_BE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "S32BE", NULL);
+      break;
+    case OGGPCM_FMT_ULAW:
+      caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
+      break;
+    case OGGPCM_FMT_ALAW:
+      caps = gst_caps_new_simple ("audio/x-alaw", NULL);
+      break;
+    case OGGPCM_FMT_FLT32_LE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "F32LE", NULL);
+      break;
+    case OGGPCM_FMT_FLT32_BE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "F32BE", NULL);
+      break;
+    case OGGPCM_FMT_FLT64_LE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "F64LE", NULL);
+      break;
+    case OGGPCM_FMT_FLT64_BE:
+      caps = gst_caps_new_simple ("audio/x-raw",
+          "format", G_TYPE_STRING, "F64BE", NULL);
+      break;
+    default:
+      return FALSE;
+  }
+
+  gst_caps_set_simple (caps,
+      "rate", G_TYPE_INT, pad->granulerate_n,
+      "channels", G_TYPE_INT, channels, NULL);
+  pad->caps = caps;
+
+  return TRUE;
+}
+
+/* cmml */
+
+static gboolean
+setup_cmml_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+
+  pad->granulerate_n = GST_READ_UINT64_LE (data + 12);
+  pad->granulerate_d = GST_READ_UINT64_LE (data + 20);
+  pad->granuleshift = data[28];
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+
+  pad->n_header_packets = 3;
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  data += 4 + (4 + 4 + 4);
+  GST_DEBUG ("blocksize0: %u", 1 << (data[0] >> 4));
+  GST_DEBUG ("blocksize1: %u", 1 << (data[0] & 0x0F));
+
+  pad->caps = gst_caps_new_simple ("text/x-cmml", NULL);
+  pad->always_flush_page = TRUE;
+  pad->is_sparse = TRUE;
+
+  return TRUE;
+}
+
+/* celt */
+
+static gboolean
+setup_celt_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+
+  pad->granulerate_n = GST_READ_UINT32_LE (data + 36);
+  pad->granulerate_d = 1;
+  pad->granuleshift = 0;
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+
+  pad->frame_size = GST_READ_UINT32_LE (packet->packet + 44);
+  pad->n_header_packets = GST_READ_UINT32_LE (packet->packet + 56) + 2;
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  pad->caps = gst_caps_new_simple ("audio/x-celt",
+      "rate", G_TYPE_INT, pad->granulerate_n, NULL);
+
+  return TRUE;
+}
+
+/* kate */
+
+static gboolean
+setup_kate_mapper (GstOggStream * pad, ogg_packet * packet)
+{
+  guint8 *data = packet->packet;
+  const char *category;
+
+  if (packet->bytes < 64)
+    return FALSE;
+
+  pad->granulerate_n = GST_READ_UINT32_LE (data + 24);
+  pad->granulerate_d = GST_READ_UINT32_LE (data + 28);
+  pad->granuleshift = GST_READ_UINT8 (data + 15);
+  GST_LOG ("sample rate: %d", pad->granulerate_n);
+
+  pad->n_header_packets = GST_READ_UINT8 (data + 11);
+  GST_LOG ("kate header packets: %d", pad->n_header_packets);
+
+  if (pad->granulerate_n == 0)
+    return FALSE;
+
+  category = (const char *) data + 48;
+  if (strcmp (category, "subtitles") == 0 || strcmp (category, "SUB") == 0 ||
+      strcmp (category, "spu-subtitles") == 0 ||
+      strcmp (category, "K-SPU") == 0) {
+    pad->caps = gst_caps_new_simple ("subtitle/x-kate", NULL);
+  } else {
+    pad->caps = gst_caps_new_simple ("application/x-kate", NULL);
+  }
+
+  pad->is_sparse = TRUE;
+  pad->always_flush_page = TRUE;
+
+  return TRUE;
+}
+
+static gint64
+packet_duration_kate (GstOggStream * pad, ogg_packet * packet)
+{
+  gint64 duration;
+
+  if (packet->bytes < 1)
+    return 0;
+
+  switch (packet->packet[0]) {
+    case 0x00:                 /* text data */
+      if (packet->bytes < 1 + 8 * 2) {
+        duration = 0;
+      } else {
+        duration = GST_READ_UINT64_LE (packet->packet + 1 + 8);
+        if (duration < 0)
+          duration = 0;
+      }
+      break;
+    default:
+      duration = GST_CLOCK_TIME_NONE;
+      break;
+  }
+
+  return duration;
+}
+
+static void
+extract_tags_kate (GstOggStream * pad, ogg_packet * packet)
+{
+  GstTagList *list = NULL;
+
+  if (packet->bytes <= 0)
+    return;
+
+  switch (packet->packet[0]) {
+    case 0x80:{
+      const gchar *canonical;
+      char language[16];
+
+      if (packet->bytes < 64) {
+        GST_WARNING ("Kate ID header packet is less than 64 bytes, ignored");
+        break;
+      }
+
+      /* the language tag is 16 bytes at offset 32, ensure NUL terminator */
+      memcpy (language, packet->packet + 32, 16);
+      language[15] = 0;
+
+      /* language is an ISO 639-1 code or RFC 3066 language code, we
+       * truncate to ISO 639-1 */
+      g_strdelimit (language, NULL, '\0');
+      canonical = gst_tag_get_language_code_iso_639_1 (language);
+      if (canonical) {
+        list = gst_tag_list_new_full (GST_TAG_LANGUAGE_CODE, canonical, NULL);
+      } else {
+        GST_WARNING ("Unknown or invalid language code %s, ignored", language);
+      }
+      break;
+    }
+    case 0x81:
+      tag_list_from_vorbiscomment_packet (packet,
+          (const guint8 *) "\201kate\0\0\0\0", 9, &list);
+      break;
+    default:
+      break;
+  }
+
+  if (list) {
+    if (pad->taglist) {
+      /* ensure the comment packet cannot override the category/language
+         from the identification header */
+      gst_tag_list_insert (pad->taglist, list, GST_TAG_MERGE_KEEP_ALL);
+    } else
+      pad->taglist = list;
+  }
+}
+
+
+/* *INDENT-OFF* */
+/* indent hates our freedoms */
+const GstOggMap mappers[] = {
+  {
+    "\200theora", 7, 42,
+    "video/x-theora",
+    setup_theora_mapper,
+    granulepos_to_granule_theora,
+    granule_to_granulepos_default,
+    is_keyframe_theora,
+    is_header_theora,
+    packet_duration_constant,
+    NULL,
+    extract_tags_theora
+  },
+  {
+    "\001vorbis", 7, 22,
+    "audio/x-vorbis",
+    setup_vorbis_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_vorbis,
+    packet_duration_vorbis,
+    NULL,
+    extract_tags_vorbis
+  },
+  {
+    "Speex", 5, 80,
+    "audio/x-speex",
+    setup_speex_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_count,
+    packet_duration_constant,
+    NULL,
+    extract_tags_count
+  },
+  {
+    "PCM     ", 8, 0,
+    "audio/x-raw",
+    setup_pcm_mapper,
+    NULL,
+    NULL,
+    NULL,
+    is_header_count,
+    NULL,
+    NULL,
+    NULL
+  },
+  {
+    "CMML\0\0\0\0", 8, 0,
+    "text/x-cmml",
+    setup_cmml_mapper,
+    NULL,
+    NULL,
+    NULL,
+    is_header_count,
+    NULL,
+    NULL,
+    NULL
+  },
+  {
+    "Annodex", 7, 0,
+    "application/x-annodex",
+    setup_fishead_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    NULL,
+    is_header_count,
+    NULL,
+    NULL,
+    NULL
+  },
+  {
+    "fishead", 7, 64,
+    "application/octet-stream",
+    setup_fishead_mapper,
+    NULL,
+    NULL,
+    NULL,
+    is_header_true,
+    NULL,
+    NULL,
+    NULL
+  },
+  {
+    "fLaC", 4, 0,
+    "audio/x-flac",
+    setup_fLaC_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_fLaC,
+    packet_duration_flac,
+    NULL,
+    NULL
+  },
+  {
+    "\177FLAC", 5, 36,
+    "audio/x-flac",
+    setup_flac_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_flac,
+    packet_duration_flac,
+    NULL,
+    extract_tags_flac
+  },
+  {
+    "AnxData", 7, 0,
+    "application/octet-stream",
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+  },
+  {
+    "CELT    ", 8, 0,
+    "audio/x-celt",
+    setup_celt_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    NULL,
+    is_header_count,
+    packet_duration_constant,
+    NULL,
+    extract_tags_count
+  },
+  {
+    "\200kate\0\0\0", 8, 0,
+    "text/x-kate",
+    setup_kate_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    NULL,
+    is_header_count,
+    packet_duration_kate,
+    NULL,
+    extract_tags_kate
+  },
+  {
+    "BBCD\0", 5, 13,
+    "video/x-dirac",
+    setup_dirac_mapper,
+    granulepos_to_granule_dirac,
+    granule_to_granulepos_dirac,
+    is_keyframe_dirac,
+    is_header_count,
+    packet_duration_constant,
+    granulepos_to_key_granule_dirac,
+    NULL
+  },
+  {
+    "OVP80\1\1", 7, 4,
+    "video/x-vp8",
+    setup_vp8_mapper,
+    granulepos_to_granule_vp8,
+    granule_to_granulepos_vp8,
+    is_keyframe_vp8,
+    is_header_vp8,
+    packet_duration_vp8,
+    granulepos_to_key_granule_vp8,
+    extract_tags_vp8
+  },
+  {
+    "\001audio\0\0\0", 9, 53,
+    "application/x-ogm-audio",
+    setup_ogmaudio_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_ogm,
+    packet_duration_ogm,
+    NULL,
+    NULL
+  },
+  {
+    "\001video\0\0\0", 9, 53,
+    "application/x-ogm-video",
+    setup_ogmvideo_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    NULL,
+    is_header_ogm,
+    packet_duration_constant,
+    NULL,
+    NULL
+  },
+  {
+    "\001text\0\0\0", 9, 9,
+    "application/x-ogm-text",
+    setup_ogmtext_mapper,
+    granulepos_to_granule_default,
+    granule_to_granulepos_default,
+    is_keyframe_true,
+    is_header_ogm,
+    packet_duration_ogm,
+    NULL,
+    extract_tags_ogm
+  }
+};
+/* *INDENT-ON* */
+
+gboolean
+gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet * packet)
+{
+  int i;
+  gboolean ret;
+
+  for (i = 0; i < G_N_ELEMENTS (mappers); i++) {
+    if (packet->bytes >= mappers[i].min_packet_size &&
+        packet->bytes >= mappers[i].id_length &&
+        memcmp (packet->packet, mappers[i].id, mappers[i].id_length) == 0) {
+
+      GST_DEBUG ("found mapper for '%s'", mappers[i].id);
+
+      if (mappers[i].setup_func)
+        ret = mappers[i].setup_func (pad, packet);
+      else
+        continue;
+
+      if (ret) {
+        GST_DEBUG ("got stream type %" GST_PTR_FORMAT, pad->caps);
+        pad->map = i;
+        return TRUE;
+      } else {
+        GST_WARNING ("mapper '%s' did not accept setup header",
+            mappers[i].media_type);
+      }
+    }
+  }
+
+  return FALSE;
+}
+
+gboolean
+gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad,
+    const GstCaps * caps)
+{
+  GstBuffer *buf;
+  const GstStructure *structure;
+  const GValue *streamheader;
+  const GValue *first_element;
+  ogg_packet packet;
+  guint8 *data;
+  gsize size;
+  gboolean ret;
+
+  GST_INFO ("Checking streamheader on caps %" GST_PTR_FORMAT, caps);
+
+  if (caps == NULL)
+    return FALSE;
+
+  structure = gst_caps_get_structure (caps, 0);
+  streamheader = gst_structure_get_value (structure, "streamheader");
+
+  if (streamheader == NULL) {
+    GST_LOG ("no streamheader field in caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+
+  if (!GST_VALUE_HOLDS_ARRAY (streamheader)) {
+    GST_ERROR ("streamheader field not an array, caps: %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+
+  if (gst_value_array_get_size (streamheader) == 0) {
+    GST_ERROR ("empty streamheader field in caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+
+  first_element = gst_value_array_get_value (streamheader, 0);
+
+  if (!GST_VALUE_HOLDS_BUFFER (first_element)) {
+    GST_ERROR ("first streamheader not a buffer, caps: %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+
+  buf = gst_value_get_buffer (first_element);
+  if (buf == NULL) {
+    GST_ERROR ("no first streamheader buffer");
+    return FALSE;
+  }
+
+  data = gst_buffer_map (buf, &size, 0, GST_MAP_READ);
+  if (data == NULL || size == 0) {
+    GST_ERROR ("invalid first streamheader buffer");
+    return FALSE;
+  }
+
+  GST_MEMDUMP ("streamheader", data, size);
+
+  packet.packet = data;
+  packet.bytes = size;
+
+  GST_INFO ("Found headers on caps, using those to determine type");
+  ret = gst_ogg_stream_setup_map (pad, &packet);
+
+  gst_buffer_unmap (buf, data, size);
+
+  return ret;
+}
diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h
new file mode 100644
index 0000000..d6c4de6
--- /dev/null
+++ b/ext/ogg/gstoggstream.h
@@ -0,0 +1,142 @@
+/* GStreamer
+ * Copyright (C) 2009 David Schleef <ds@schleef.org>
+ *
+ * gstoggstream.h: header for GstOggStream
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_OGG_STREAM_H__
+#define __GST_OGG_STREAM_H__
+
+#include <ogg/ogg.h>
+
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+  GST_OGG_SKELETON_FISBONE,
+  GST_OGG_SKELETON_INDEX,
+} GstOggSkeleton;
+
+typedef struct {
+  guint64 offset;
+  guint64 timestamp;
+} GstOggIndex;
+
+typedef struct _GstOggStream GstOggStream;
+
+struct _GstOggStream
+{
+  ogg_stream_state stream;
+
+  guint32 serialno;
+  GList *headers;
+  gboolean have_headers;
+  GList *queued;
+
+  /* for oggparse */
+  gboolean in_headers;
+  GList *unknown_pages;
+  GList *stored_buffers;
+
+  gint map;
+  gboolean is_skeleton;
+  gboolean have_fisbone;
+  gint granulerate_n;
+  gint granulerate_d;
+  guint32 preroll;
+  guint granuleshift;
+  gint n_header_packets;
+  gint n_header_packets_seen;
+  gint64 accumulated_granule;
+  gint frame_size;
+  gint bitrate;
+  guint64 total_time;
+  gboolean is_sparse;
+
+  GstCaps *caps;
+
+  gboolean is_video;
+  gboolean always_flush_page;
+
+  /* vorbis stuff */
+  int nln_increments[4];
+  int nsn_increment;
+  int short_size;
+  int long_size;
+  int vorbis_log2_num_modes;
+  int vorbis_mode_sizes[256];
+  int last_size;
+  int version;
+  gint bitrate_upper;
+  gint bitrate_nominal;
+  gint bitrate_lower;
+  GstTagList *taglist;
+  /* theora stuff */
+  gboolean theora_has_zero_keyoffset;
+  /* VP8 stuff */
+  gboolean is_vp8;
+  /* OGM stuff */
+  gboolean is_ogm;
+  gboolean is_ogm_text;
+  /* fishead stuff */
+  guint16 skeleton_major, skeleton_minor;
+  gint64 prestime;
+  gint64 basetime;
+  /* index */
+  guint n_index;
+  GstOggIndex *index;
+  guint64 kp_denom;
+  guint64 idx_bitrate;
+};
+
+
+gboolean gst_ogg_stream_setup_map (GstOggStream * pad, ogg_packet *packet);
+gboolean gst_ogg_stream_setup_map_from_caps_headers (GstOggStream * pad,
+    const GstCaps * caps);
+GstClockTime gst_ogg_stream_get_end_time_for_granulepos (GstOggStream *pad,
+    gint64 granulepos);
+GstClockTime gst_ogg_stream_get_start_time_for_granulepos (GstOggStream *pad,
+    gint64 granulepos);
+GstClockTime gst_ogg_stream_granule_to_time (GstOggStream *pad, gint64 granule);
+gint64 gst_ogg_stream_granulepos_to_granule (GstOggStream * pad, gint64 granulepos);
+gint64 gst_ogg_stream_granulepos_to_key_granule (GstOggStream * pad, gint64 granulepos);
+gint64 gst_ogg_stream_granule_to_granulepos (GstOggStream * pad, gint64 granule, gint64 keyframe_granule);
+GstClockTime gst_ogg_stream_get_packet_start_time (GstOggStream *pad,
+    ogg_packet *packet);
+gboolean gst_ogg_stream_granulepos_is_key_frame (GstOggStream *pad,
+    gint64 granulepos);
+gboolean gst_ogg_stream_packet_is_header (GstOggStream *pad, ogg_packet *packet);
+gint64 gst_ogg_stream_get_packet_duration (GstOggStream * pad, ogg_packet *packet);
+void gst_ogg_stream_extract_tags (GstOggStream * pad, ogg_packet * packet);
+const char *gst_ogg_stream_get_media_type (GstOggStream * pad);
+
+gboolean gst_ogg_map_parse_fisbone (GstOggStream * pad, const guint8 * data, guint size,
+    guint32 * serialno, GstOggSkeleton *type);
+gboolean gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad, const guint8 * data, guint size,
+    GstClockTime * p_start_time);
+gboolean gst_ogg_map_add_index (GstOggStream * pad, GstOggStream * skel_pad, const guint8 * data, guint size);
+gboolean gst_ogg_map_search_index (GstOggStream * pad, gboolean before, guint64 *timestamp, guint64 *offset);
+
+
+
+
+G_END_DECLS
+
+#endif /* __GST_OGG_STREAM_H__ */
diff --git a/ext/ogg/gstogmparse.c b/ext/ogg/gstogmparse.c
new file mode 100644
index 0000000..b81856a
--- /dev/null
+++ b/ext/ogg/gstogmparse.c
@@ -0,0 +1,968 @@
+/* GStreamer OGM parsing
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+#include <gst/riff/riff-media.h>
+#include <gst/riff/riff-read.h>
+
+#include "gstogg.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_ogm_parse_debug);
+#define GST_CAT_DEFAULT gst_ogm_parse_debug
+
+#define GST_TYPE_OGM_VIDEO_PARSE (gst_ogm_video_parse_get_type())
+#define GST_IS_OGM_VIDEO_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_OGM_VIDEO_PARSE))
+
+#define GST_TYPE_OGM_AUDIO_PARSE (gst_ogm_audio_parse_get_type())
+#define GST_IS_OGM_AUDIO_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_OGM_AUDIO_PARSE))
+
+#define GST_TYPE_OGM_TEXT_PARSE (gst_ogm_text_parse_get_type())
+#define GST_IS_OGM_TEXT_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_OGM_TEXT_PARSE))
+
+#define GST_TYPE_OGM_PARSE (gst_ogm_parse_get_type())
+#define GST_OGM_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_OGM_PARSE, GstOgmParse))
+#define GST_OGM_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_OGM_PARSE, GstOgmParse))
+#define GST_IS_OGM_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_OGM_PARSE))
+#define GST_IS_OGM_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_OGM_PARSE))
+#define GST_OGM_PARSE_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_OGM_PARSE, GstOgmParseClass))
+
+typedef struct _stream_header_video
+{
+  gint32 width;
+  gint32 height;
+} stream_header_video;
+
+typedef struct _stream_header_audio
+{
+  gint16 channels;
+  gint16 blockalign;
+  gint32 avgbytespersec;
+} stream_header_audio;
+
+/* sizeof(stream_header) might differ due to structure packing and
+ * alignment differences on some architectures, so not using that */
+#define OGM_STREAM_HEADER_SIZE (8+4+4+8+8+4+4+4+8)
+
+typedef struct _stream_header
+{
+  gchar streamtype[8];
+  gchar subtype[4 + 1];
+
+  /* size of the structure */
+  gint32 size;
+
+  /* in reference time */
+  gint64 time_unit;
+
+  gint64 samples_per_unit;
+
+  /* in media time */
+  gint32 default_len;
+
+  gint32 buffersize;
+  gint32 bits_per_sample;
+
+  union
+  {
+    stream_header_video video;
+    stream_header_audio audio;
+    /* text has no additional data */
+  } s;
+} stream_header;
+
+typedef struct _GstOgmParse
+{
+  GstElement element;
+
+  /* pads */
+  GstPad *srcpad, *sinkpad;
+  GstPadTemplate *srcpadtempl;
+
+  /* we need to cache events that we receive before creating the source pad */
+  GList *cached_events;
+
+  /* audio or video */
+  stream_header hdr;
+
+  /* expected next granulepos (used for timestamp guessing) */
+  guint64 next_granulepos;
+} GstOgmParse;
+
+typedef struct _GstOgmParseClass
+{
+  GstElementClass parent_class;
+} GstOgmParseClass;
+
+static GstStaticPadTemplate sink_factory_video =
+GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-ogm-video"));
+static GstStaticPadTemplate sink_factory_audio =
+GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-ogm-audio"));
+static GstStaticPadTemplate sink_factory_text =
+GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-ogm-text"));
+static GstPadTemplate *video_src_templ, *audio_src_templ, *text_src_templ;
+
+static GType gst_ogm_audio_parse_get_type (void);
+static GType gst_ogm_video_parse_get_type (void);
+static GType gst_ogm_text_parse_get_type (void);
+static GType gst_ogm_parse_get_type (void);
+
+static void gst_ogm_audio_parse_base_init (GstOgmParseClass * klass);
+static void gst_ogm_video_parse_base_init (GstOgmParseClass * klass);
+static void gst_ogm_text_parse_base_init (GstOgmParseClass * klass);
+static void gst_ogm_parse_class_init (GstOgmParseClass * klass);
+static void gst_ogm_parse_init (GstOgmParse * ogm);
+static void gst_ogm_video_parse_init (GstOgmParse * ogm);
+static void gst_ogm_audio_parse_init (GstOgmParse * ogm);
+static void gst_ogm_text_parse_init (GstOgmParse * ogm);
+
+static const GstQueryType *gst_ogm_parse_get_sink_querytypes (GstPad * pad);
+static gboolean gst_ogm_parse_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_ogm_parse_sink_query (GstPad * pad, GstQuery * query);
+static gboolean gst_ogm_parse_sink_convert (GstPad * pad, GstFormat src_format,
+    gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
+
+static GstFlowReturn gst_ogm_parse_chain (GstPad * pad, GstBuffer * buffer);
+
+static GstStateChangeReturn gst_ogm_parse_change_state (GstElement * element,
+    GstStateChange transition);
+
+static GstElementClass *parent_class = NULL;
+
+static GType
+gst_ogm_parse_get_type (void)
+{
+  static GType ogm_parse_type = 0;
+
+  if (!ogm_parse_type) {
+    static const GTypeInfo ogm_parse_info = {
+      sizeof (GstOgmParseClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_ogm_parse_class_init,
+      NULL,
+      NULL,
+      sizeof (GstOgmParse),
+      0,
+      (GInstanceInitFunc) gst_ogm_parse_init,
+    };
+
+    ogm_parse_type =
+        g_type_register_static (GST_TYPE_ELEMENT,
+        "GstOgmParse", &ogm_parse_info, 0);
+  }
+
+  return ogm_parse_type;
+}
+
+static GType
+gst_ogm_audio_parse_get_type (void)
+{
+  static GType ogm_audio_parse_type = 0;
+
+  if (!ogm_audio_parse_type) {
+    static const GTypeInfo ogm_audio_parse_info = {
+      sizeof (GstOgmParseClass),
+      (GBaseInitFunc) gst_ogm_audio_parse_base_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      sizeof (GstOgmParse),
+      0,
+      (GInstanceInitFunc) gst_ogm_audio_parse_init,
+    };
+
+    ogm_audio_parse_type =
+        g_type_register_static (GST_TYPE_OGM_PARSE,
+        "GstOgmAudioParse", &ogm_audio_parse_info, 0);
+  }
+
+  return ogm_audio_parse_type;
+}
+
+static GType
+gst_ogm_video_parse_get_type (void)
+{
+  static GType ogm_video_parse_type = 0;
+
+  if (!ogm_video_parse_type) {
+    static const GTypeInfo ogm_video_parse_info = {
+      sizeof (GstOgmParseClass),
+      (GBaseInitFunc) gst_ogm_video_parse_base_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      sizeof (GstOgmParse),
+      0,
+      (GInstanceInitFunc) gst_ogm_video_parse_init,
+    };
+
+    ogm_video_parse_type =
+        g_type_register_static (GST_TYPE_OGM_PARSE,
+        "GstOgmVideoParse", &ogm_video_parse_info, 0);
+  }
+
+  return ogm_video_parse_type;
+}
+
+static GType
+gst_ogm_text_parse_get_type (void)
+{
+  static GType ogm_text_parse_type = 0;
+
+  if (!ogm_text_parse_type) {
+    static const GTypeInfo ogm_text_parse_info = {
+      sizeof (GstOgmParseClass),
+      (GBaseInitFunc) gst_ogm_text_parse_base_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      sizeof (GstOgmParse),
+      0,
+      (GInstanceInitFunc) gst_ogm_text_parse_init,
+    };
+
+    ogm_text_parse_type =
+        g_type_register_static (GST_TYPE_OGM_PARSE,
+        "GstOgmTextParse", &ogm_text_parse_info, 0);
+  }
+
+  return ogm_text_parse_type;
+}
+
+static void
+gst_ogm_audio_parse_base_init (GstOgmParseClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstCaps *caps = gst_riff_create_audio_template_caps ();
+
+  gst_element_class_set_details_simple (element_class,
+      "OGM audio stream parser", "Codec/Decoder/Audio",
+      "parse an OGM audio header and stream",
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_factory_audio));
+  audio_src_templ = gst_pad_template_new ("src",
+      GST_PAD_SRC, GST_PAD_SOMETIMES, caps);
+  gst_element_class_add_pad_template (element_class, audio_src_templ);
+  gst_caps_unref (caps);
+}
+
+static void
+gst_ogm_video_parse_base_init (GstOgmParseClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstCaps *caps = gst_riff_create_video_template_caps ();
+
+  gst_element_class_set_details_simple (element_class,
+      "OGM video stream parser", "Codec/Decoder/Video",
+      "parse an OGM video header and stream",
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_factory_video));
+  video_src_templ = gst_pad_template_new ("src",
+      GST_PAD_SRC, GST_PAD_SOMETIMES, caps);
+  gst_element_class_add_pad_template (element_class, video_src_templ);
+  gst_caps_unref (caps);
+}
+
+static void
+gst_ogm_text_parse_base_init (GstOgmParseClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstCaps *caps = gst_caps_new_simple ("text/plain", NULL, NULL);
+
+  gst_element_class_set_details_simple (element_class,
+      "OGM text stream parser", "Codec/Decoder/Subtitle",
+      "parse an OGM text header and stream",
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_factory_text));
+  text_src_templ = gst_pad_template_new ("src",
+      GST_PAD_SRC, GST_PAD_SOMETIMES, caps);
+  gst_element_class_add_pad_template (element_class, text_src_templ);
+  gst_caps_unref (caps);
+}
+
+static void
+gst_ogm_parse_class_init (GstOgmParseClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_change_state);
+}
+
+static void
+gst_ogm_parse_init (GstOgmParse * ogm)
+{
+  memset (&ogm->hdr, 0, sizeof (ogm->hdr));
+  ogm->next_granulepos = 0;
+  ogm->srcpad = NULL;
+  ogm->cached_events = NULL;
+}
+
+static void
+gst_ogm_audio_parse_init (GstOgmParse * ogm)
+{
+  ogm->sinkpad = gst_pad_new_from_static_template (&sink_factory_audio, "sink");
+  gst_pad_set_query_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_query));
+  gst_pad_set_chain_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_chain));
+  gst_pad_set_event_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (ogm), ogm->sinkpad);
+
+  ogm->srcpad = NULL;
+  ogm->srcpadtempl = audio_src_templ;
+}
+
+static void
+gst_ogm_video_parse_init (GstOgmParse * ogm)
+{
+  ogm->sinkpad = gst_pad_new_from_static_template (&sink_factory_video, "sink");
+  gst_pad_set_query_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_query));
+  gst_pad_set_chain_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_chain));
+  gst_pad_set_event_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (ogm), ogm->sinkpad);
+
+  ogm->srcpad = NULL;
+  ogm->srcpadtempl = video_src_templ;
+}
+
+static void
+gst_ogm_text_parse_init (GstOgmParse * ogm)
+{
+  ogm->sinkpad = gst_pad_new_from_static_template (&sink_factory_text, "sink");
+  gst_pad_set_query_type_function (ogm->sinkpad,
+      gst_ogm_parse_get_sink_querytypes);
+  gst_pad_set_query_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_query));
+  gst_pad_set_chain_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_chain));
+  gst_pad_set_event_function (ogm->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ogm_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (ogm), ogm->sinkpad);
+
+  ogm->srcpad = NULL;
+  ogm->srcpadtempl = text_src_templ;
+}
+
+static const GstQueryType *
+gst_ogm_parse_get_sink_querytypes (GstPad * pad)
+{
+  static const GstQueryType types[] = {
+    GST_QUERY_POSITION,
+    0
+  };
+
+  return types;
+}
+
+static gboolean
+gst_ogm_parse_sink_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = FALSE;
+  GstOgmParse *ogm = GST_OGM_PARSE (gst_pad_get_parent (pad));
+
+  switch (src_format) {
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          switch (ogm->hdr.streamtype[0]) {
+            case 'a':
+              *dest_value = GST_SECOND * src_value / ogm->hdr.samples_per_unit;
+              res = TRUE;
+              break;
+            case 'v':
+            case 't':
+              *dest_value = (GST_SECOND / 10000000) *
+                  ogm->hdr.time_unit * src_value;
+              res = TRUE;
+              break;
+            default:
+              break;
+          }
+          break;
+        default:
+          break;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          switch (ogm->hdr.streamtype[0]) {
+            case 'a':
+              *dest_value = ogm->hdr.samples_per_unit * src_value / GST_SECOND;
+              res = TRUE;
+              break;
+            case 'v':
+            case 't':
+              *dest_value = src_value /
+                  ((GST_SECOND / 10000000) * ogm->hdr.time_unit);
+              res = TRUE;
+              break;
+            default:
+              break;
+          }
+          break;
+        default:
+          break;
+      }
+      break;
+    default:
+      break;
+  }
+
+  gst_object_unref (ogm);
+  return res;
+}
+
+static gboolean
+gst_ogm_parse_sink_query (GstPad * pad, GstQuery * query)
+{
+  GstOgmParse *ogm = GST_OGM_PARSE (gst_pad_get_parent (pad));
+  GstFormat format;
+  gboolean res = FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      gint64 val;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      if (format != GST_FORMAT_DEFAULT && format != GST_FORMAT_TIME)
+        break;
+
+      if ((res = gst_ogm_parse_sink_convert (pad,
+                  GST_FORMAT_DEFAULT, ogm->next_granulepos, &format, &val))) {
+        /* don't know the total length here.. */
+        gst_query_set_position (query, format, val);
+      }
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      /* peel off input */
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if ((res = gst_ogm_parse_sink_convert (pad, src_fmt, src_val,
+                  &dest_fmt, &dest_val))) {
+        gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+  gst_object_unref (ogm);
+  return res;
+}
+
+static GstFlowReturn
+gst_ogm_parse_stream_header (GstOgmParse * ogm, const guint8 * data, guint size)
+{
+  GstCaps *caps = NULL;
+
+  /* stream header */
+  if (size < OGM_STREAM_HEADER_SIZE)
+    goto buffer_too_small;
+
+  if (!memcmp (data, "video\000\000\000", 8)) {
+    ogm->hdr.s.video.width = GST_READ_UINT32_LE (&data[44]);
+    ogm->hdr.s.video.height = GST_READ_UINT32_LE (&data[48]);
+  } else if (!memcmp (data, "audio\000\000\000", 8)) {
+    ogm->hdr.s.audio.channels = GST_READ_UINT32_LE (&data[44]);
+    ogm->hdr.s.audio.blockalign = GST_READ_UINT32_LE (&data[46]);
+    ogm->hdr.s.audio.avgbytespersec = GST_READ_UINT32_LE (&data[48]);
+  } else if (!memcmp (data, "text\000\000\000\000", 8)) {
+    /* nothing here */
+  } else {
+    goto cannot_decode;
+  }
+  memcpy (ogm->hdr.streamtype, &data[0], 8);
+  memcpy (ogm->hdr.subtype, &data[8], 4);
+  ogm->hdr.subtype[4] = '\0';
+  ogm->hdr.size = GST_READ_UINT32_LE (&data[12]);
+  ogm->hdr.time_unit = GST_READ_UINT64_LE (&data[16]);
+  ogm->hdr.samples_per_unit = GST_READ_UINT64_LE (&data[24]);
+  ogm->hdr.default_len = GST_READ_UINT32_LE (&data[32]);
+  ogm->hdr.buffersize = GST_READ_UINT32_LE (&data[36]);
+  ogm->hdr.bits_per_sample = GST_READ_UINT32_LE (&data[40]);
+
+  switch (ogm->hdr.streamtype[0]) {
+    case 'a':{
+      guint codec_id = 0;
+
+      if (sscanf (ogm->hdr.subtype, "%04x", &codec_id) != 1) {
+        GST_WARNING_OBJECT (ogm, "cannot parse subtype %s", ogm->hdr.subtype);
+      }
+
+      caps =
+          gst_riff_create_audio_caps (codec_id, NULL, NULL, NULL, NULL, NULL);
+
+      if (caps == NULL) {
+        GST_WARNING_OBJECT (ogm, "no audio caps for codec %u found", codec_id);
+        caps = gst_caps_new_simple ("audio/x-ogm-unknown", "codec_id",
+            G_TYPE_INT, (gint) codec_id, NULL);
+      }
+
+      gst_caps_set_simple (caps,
+          "channels", G_TYPE_INT, ogm->hdr.s.audio.channels,
+          "rate", G_TYPE_INT, ogm->hdr.samples_per_unit, NULL);
+
+      GST_LOG_OBJECT (ogm, "Type: %s, subtype: 0x%04x, channels: %d, "
+          "samplerate: %d, blockalign: %d, bps: %d, caps = %" GST_PTR_FORMAT,
+          ogm->hdr.streamtype, codec_id, ogm->hdr.s.audio.channels,
+          (gint) ogm->hdr.samples_per_unit, ogm->hdr.s.audio.blockalign,
+          ogm->hdr.s.audio.avgbytespersec, caps);
+      break;
+    }
+    case 'v':{
+      guint32 fourcc;
+      gint time_unit;
+
+      fourcc = GST_MAKE_FOURCC (ogm->hdr.subtype[0],
+          ogm->hdr.subtype[1], ogm->hdr.subtype[2], ogm->hdr.subtype[3]);
+
+      caps = gst_riff_create_video_caps (fourcc, NULL, NULL, NULL, NULL, NULL);
+
+      if (caps == NULL) {
+        GST_WARNING_OBJECT (ogm, "could not find video caps for fourcc %"
+            GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
+        caps = gst_caps_new_simple ("video/x-ogm-unknown", "fourcc",
+            G_TYPE_STRING, ogm->hdr.subtype, NULL);
+        break;
+      }
+
+      GST_LOG_OBJECT (ogm, "Type: %s, subtype: %" GST_FOURCC_FORMAT
+          ", size: %dx%d, timeunit: %" G_GINT64_FORMAT
+          " (fps: %lf), s/u: %" G_GINT64_FORMAT ", "
+          "def.len: %d, bufsize: %d, bps: %d, caps = %" GST_PTR_FORMAT,
+          ogm->hdr.streamtype, GST_FOURCC_ARGS (fourcc),
+          ogm->hdr.s.video.width, ogm->hdr.s.video.height,
+          ogm->hdr.time_unit, 10000000. / ogm->hdr.time_unit,
+          ogm->hdr.samples_per_unit, ogm->hdr.default_len,
+          ogm->hdr.buffersize, ogm->hdr.bits_per_sample, caps);
+
+      /* GST_TYPE_FRACTION contains gint */
+      if (ogm->hdr.time_unit > G_MAXINT || ogm->hdr.time_unit < G_MININT)
+        GST_WARNING_OBJECT (ogm, "timeunit is out of range");
+
+      time_unit = (gint) CLAMP (ogm->hdr.time_unit, G_MININT, G_MAXINT);
+      gst_caps_set_simple (caps,
+          "width", G_TYPE_INT, ogm->hdr.s.video.width,
+          "height", G_TYPE_INT, ogm->hdr.s.video.height,
+          "framerate", GST_TYPE_FRACTION, 10000000, time_unit, NULL);
+      break;
+    }
+    case 't':{
+      GST_LOG_OBJECT (ogm, "Type: %s, s/u: %" G_GINT64_FORMAT
+          ", timeunit=%" G_GINT64_FORMAT,
+          ogm->hdr.streamtype, ogm->hdr.samples_per_unit, ogm->hdr.time_unit);
+      caps = gst_caps_new_simple ("text/plain", NULL);
+      break;
+    }
+    default:
+      g_assert_not_reached ();
+  }
+
+  if (caps == NULL)
+    goto cannot_decode;
+
+  if (ogm->srcpad) {
+    GstCaps *current_caps = gst_pad_get_current_caps (ogm->srcpad);
+
+    if (current_caps) {
+      if (caps && !gst_caps_is_equal (current_caps, caps)) {
+        GST_WARNING_OBJECT (ogm, "Already an existing pad %s:%s",
+            GST_DEBUG_PAD_NAME (ogm->srcpad));
+        gst_pad_set_active (ogm->srcpad, FALSE);
+        gst_element_remove_pad (GST_ELEMENT (ogm), ogm->srcpad);
+        ogm->srcpad = NULL;
+      } else {
+        GST_DEBUG_OBJECT (ogm, "Existing pad has the same caps, do nothing");
+      }
+      gst_caps_unref (current_caps);
+    }
+  }
+
+  if (ogm->srcpad == NULL) {
+    GList *l, *cached_events;
+
+    ogm->srcpad = gst_pad_new_from_template (ogm->srcpadtempl, "src");
+    gst_pad_use_fixed_caps (ogm->srcpad);
+    gst_pad_set_active (ogm->srcpad, TRUE);
+    gst_pad_set_caps (ogm->srcpad, caps);
+    gst_element_add_pad (GST_ELEMENT (ogm), ogm->srcpad);
+    GST_INFO_OBJECT (ogm, "Added pad %s:%s with caps %" GST_PTR_FORMAT,
+        GST_DEBUG_PAD_NAME (ogm->srcpad), caps);
+
+    GST_OBJECT_LOCK (ogm);
+    cached_events = ogm->cached_events;
+    ogm->cached_events = NULL;
+    GST_OBJECT_UNLOCK (ogm);
+
+    for (l = cached_events; l; l = l->next) {
+      GstEvent *event = GST_EVENT_CAST (l->data);
+
+      GST_DEBUG_OBJECT (ogm, "Pushing cached event %" GST_PTR_FORMAT, event);
+      gst_pad_push_event (ogm->srcpad, event);
+    }
+    g_list_free (cached_events);
+
+    {
+      GstTagList *tags;
+
+      tags = gst_tag_list_new ();
+      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_SUBTITLE_CODEC,
+          "Ogm", NULL);
+      gst_element_found_tags_for_pad (GST_ELEMENT (ogm), ogm->srcpad, tags);
+    }
+  }
+
+  gst_caps_unref (caps);
+
+  return GST_FLOW_OK;
+
+/* ERRORS */
+buffer_too_small:
+  {
+    GST_ELEMENT_ERROR (ogm, STREAM, WRONG_TYPE, ("Buffer too small"), (NULL));
+    return GST_FLOW_ERROR;
+  }
+cannot_decode:
+  {
+    GST_ELEMENT_ERROR (ogm, STREAM, DECODE, (NULL), ("unknown ogm format"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_ogm_parse_comment_packet (GstOgmParse * ogm, GstBuffer * buf)
+{
+  GstFlowReturn ret;
+
+  if (ogm->srcpad == NULL) {
+    GST_DEBUG ("no source pad");
+    return GST_FLOW_WRONG_STATE;
+  }
+
+  /* if this is not a subtitle stream, push the vorbiscomment packet
+   * on downstream, the respective decoder will handle it; if it is
+   * a subtitle stream, we will have to handle the comment ourself */
+  if (ogm->hdr.streamtype[0] == 't') {
+    GstTagList *tags;
+
+    tags = gst_tag_list_from_vorbiscomment_buffer (buf,
+        (guint8 *) "\003vorbis", 7, NULL);
+
+    if (tags) {
+      GST_DEBUG_OBJECT (ogm, "tags = %" GST_PTR_FORMAT, tags);
+      gst_element_found_tags_for_pad (GST_ELEMENT (ogm), ogm->srcpad, tags);
+    } else {
+      GST_DEBUG_OBJECT (ogm, "failed to extract tags from vorbis comment");
+    }
+    /* do not push packet downstream, just let parent unref it */
+    ret = GST_FLOW_OK;
+  } else {
+    ret = gst_pad_push (ogm->srcpad, buf);
+  }
+
+  return ret;
+}
+
+static void
+gst_ogm_text_parse_strip_trailing_zeroes (GstOgmParse * ogm, GstBuffer * buf)
+{
+  guint8 *data;
+  gsize size;
+
+  g_assert (gst_buffer_is_writable (buf));
+
+  /* zeroes are not valid UTF-8 characters, so strip them from output */
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_WRITE);
+  while (size > 0 && data[size - 1] == '\0') {
+    --size;
+  }
+  gst_buffer_unmap (buf, data, size);
+}
+
+static GstFlowReturn
+gst_ogm_parse_data_packet (GstOgmParse * ogm, GstBuffer * buf,
+    const guint8 * data, gsize size)
+{
+  GstFlowReturn ret;
+  GstBuffer *sbuf;
+  gboolean keyframe;
+  guint len, n, xsize = 0;
+
+  if ((data[0] & 0x01) != 0)
+    goto invalid_startcode;
+
+  /* data - push on */
+  len = ((data[0] & 0xc0) >> 6) | ((data[0] & 0x02) << 1);
+  keyframe = (((data[0] & 0x08) >> 3) != 0);
+
+  if ((1 + len) > size)
+    goto buffer_too_small;
+
+  for (n = len; n > 0; n--) {
+    xsize = (xsize << 8) | data[n];
+  }
+
+  GST_LOG_OBJECT (ogm, "[0x%02x] samples: %d, hdrbytes: %d, datasize: %"
+      G_GSIZE_FORMAT, data[0], xsize, len, size - len - 1);
+
+  sbuf =
+      gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, len + 1,
+      size - len - 1);
+
+  if (GST_BUFFER_OFFSET_END_IS_VALID (buf))
+    ogm->next_granulepos = GST_BUFFER_OFFSET_END (buf);
+
+  switch (ogm->hdr.streamtype[0]) {
+    case 't':
+    case 'v':{
+      GstClockTime ts, next_ts;
+      guint samples;
+
+      samples = (ogm->hdr.streamtype[0] == 'v') ? 1 : xsize;
+
+      if (!keyframe) {
+        GST_BUFFER_FLAG_SET (sbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+      }
+
+      /* shouldn't this be granulepos - samples? (tpm) */
+      ts = gst_util_uint64_scale (ogm->next_granulepos,
+          ogm->hdr.time_unit * GST_SECOND, 10000000);
+      next_ts = gst_util_uint64_scale (ogm->next_granulepos + samples,
+          ogm->hdr.time_unit * GST_SECOND, 10000000);
+
+      GST_BUFFER_TIMESTAMP (sbuf) = ts;
+      GST_BUFFER_DURATION (sbuf) = next_ts - ts;
+
+      ogm->next_granulepos += samples;
+
+      if (ogm->hdr.streamtype[0] == 't') {
+        gst_ogm_text_parse_strip_trailing_zeroes (ogm, sbuf);
+      }
+      break;
+    }
+    case 'a':{
+      GstClockTime ts, next_ts;
+
+      /* shouldn't this be granulepos - samples? (tpm) */
+      ts = gst_util_uint64_scale_int (ogm->next_granulepos,
+          GST_SECOND, ogm->hdr.samples_per_unit);
+      next_ts = gst_util_uint64_scale_int (ogm->next_granulepos + xsize,
+          GST_SECOND, ogm->hdr.samples_per_unit);
+
+      GST_BUFFER_TIMESTAMP (sbuf) = ts;
+      GST_BUFFER_DURATION (sbuf) = next_ts - ts;
+
+      ogm->next_granulepos += xsize;
+      break;
+    }
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+
+  if (ogm->srcpad) {
+    GST_LOG_OBJECT (ogm, "Pushing buffer with ts=%" GST_TIME_FORMAT,
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (sbuf)));
+    ret = gst_pad_push (ogm->srcpad, sbuf);
+    if (ret != GST_FLOW_OK) {
+      GST_DEBUG_OBJECT (ogm, "Flow on %s:%s = %s",
+          GST_DEBUG_PAD_NAME (ogm->srcpad), gst_flow_get_name (ret));
+    }
+  } else {
+    ret = GST_FLOW_WRONG_STATE;
+  }
+
+  return ret;
+
+/* ERRORS */
+invalid_startcode:
+  {
+    GST_ELEMENT_ERROR (ogm, STREAM, DECODE, (NULL),
+        ("unexpected packet startcode 0x%02x", data[0]));
+    return GST_FLOW_ERROR;
+  }
+buffer_too_small:
+  {
+    GST_ELEMENT_ERROR (ogm, STREAM, DECODE, (NULL),
+        ("buffer too small, len+1=%u, size=%" G_GSIZE_FORMAT, len + 1, size));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_ogm_parse_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstOgmParse *ogm = GST_OGM_PARSE (GST_PAD_PARENT (pad));
+  guint8 *data;
+  gsize size;
+
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  if (size < 1)
+    goto buffer_too_small;
+
+  GST_LOG_OBJECT (ogm, "Packet with start code 0x%02x", data[0]);
+
+  switch (data[0]) {
+    case 0x01:{
+      ret = gst_ogm_parse_stream_header (ogm, data + 1, size - 1);
+      break;
+    }
+    case 0x03:{
+      ret = gst_ogm_parse_comment_packet (ogm, buf);
+      break;
+    }
+    default:{
+      ret = gst_ogm_parse_data_packet (ogm, buf, data, size);
+      break;
+    }
+  }
+
+  gst_buffer_unmap (buf, data, size);
+  gst_buffer_unref (buf);
+
+  if (ret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (ogm, "Flow: %s", gst_flow_get_name (ret));
+  }
+
+  return ret;
+
+/* ERRORS */
+buffer_too_small:
+  {
+    GST_ELEMENT_ERROR (ogm, STREAM, DECODE, (NULL), ("buffer too small"));
+    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unref (buf);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_ogm_parse_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstOgmParse *ogm = GST_OGM_PARSE (gst_pad_get_parent (pad));
+  gboolean res;
+
+  GST_LOG_OBJECT (ogm, "processing %s event", GST_EVENT_TYPE_NAME (event));
+
+  GST_OBJECT_LOCK (ogm);
+  if (ogm->srcpad == NULL) {
+    ogm->cached_events = g_list_append (ogm->cached_events, event);
+    GST_OBJECT_UNLOCK (ogm);
+    res = TRUE;
+  } else {
+    GST_OBJECT_UNLOCK (ogm);
+    res = gst_pad_event_default (pad, event);
+  }
+
+  gst_object_unref (ogm);
+  return res;
+}
+
+static GstStateChangeReturn
+gst_ogm_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstOgmParse *ogm = GST_OGM_PARSE (element);
+
+  ret = parent_class->change_state (element, transition);
+  if (ret != GST_STATE_CHANGE_SUCCESS)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (ogm->srcpad) {
+        gst_pad_set_active (ogm->srcpad, FALSE);
+        gst_element_remove_pad (element, ogm->srcpad);
+        ogm->srcpad = NULL;
+      }
+      memset (&ogm->hdr, 0, sizeof (ogm->hdr));
+      ogm->next_granulepos = 0;
+      g_list_foreach (ogm->cached_events, (GFunc) gst_mini_object_unref, NULL);
+      g_list_free (ogm->cached_events);
+      ogm->cached_events = NULL;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+gboolean
+gst_ogm_parse_plugin_init (GstPlugin * plugin)
+{
+  gst_riff_init ();
+
+  GST_DEBUG_CATEGORY_INIT (gst_ogm_parse_debug, "ogmparse", 0, "ogm parser");
+
+  return gst_element_register (plugin, "ogmaudioparse", GST_RANK_PRIMARY,
+      GST_TYPE_OGM_AUDIO_PARSE) &&
+      gst_element_register (plugin, "ogmvideoparse", GST_RANK_PRIMARY,
+      GST_TYPE_OGM_VIDEO_PARSE) &&
+      gst_element_register (plugin, "ogmtextparse", GST_RANK_PRIMARY,
+      GST_TYPE_OGM_TEXT_PARSE);
+}
diff --git a/ext/ogg/vorbis_parse.c b/ext/ogg/vorbis_parse.c
new file mode 100644
index 0000000..844f18b
--- /dev/null
+++ b/ext/ogg/vorbis_parse.c
@@ -0,0 +1,240 @@
+/*
+   This file borrowed from liboggz
+ */
+/*
+   Copyright (C) 2003 Commonwealth Scientific and Industrial Research
+   Organisation (CSIRO) Australia
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+   - Neither the name of CSIRO Australia nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE ORGANISATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * oggz_auto.c
+ *
+ * Conrad Parker <conrad@annodex.net>
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstoggstream.h"
+#include "vorbis_parse.h"
+
+/*
+ * Vorbis packets can be short or long, and each packet overlaps the previous
+ * and next packets.  The granulepos of a packet is always the last sample
+ * that is completely decoded at the end of decoding that packet - i.e. the
+ * last packet before the first overlapping packet.  If the sizes of packets
+ * are 's' and 'l', then the increment will depend on the previous and next
+ * packet types:
+ *  v                             prev<<1 | next
+ * lll:           l/2             3
+ * lls:           3l/4 - s/4      2
+ * lsl:           s/2
+ * lss:           s/2
+ * sll:           l/4 + s/4       1
+ * sls:           l/2             0
+ * ssl:           s/2
+ * sss:           s/2
+ *
+ * The previous and next packet types can be inferred from the current packet
+ * (additional information is not required)
+ *
+ * The two blocksizes can be determined from the first header packet, by reading
+ * byte 28.  1 << (packet[28] >> 4) == long_size.
+ * 1 << (packet[28] & 0xF) == short_size.
+ *
+ * (see http://xiph.org/vorbis/doc/Vorbis_I_spec.html for specification)
+ */
+
+
+void
+parse_vorbis_header_packet (GstOggStream * pad, ogg_packet * packet)
+{
+  /*
+   * on the first (b_o_s) packet, determine the long and short sizes,
+   * and then calculate l/2, l/4 - s/4, 3 * l/4 - s/4, l/2 - s/2 and s/2
+   */
+  int short_size;
+  int long_size;
+
+  long_size = 1 << (packet->packet[28] >> 4);
+  short_size = 1 << (packet->packet[28] & 0xF);
+
+  pad->nln_increments[3] = long_size >> 1;
+  pad->nln_increments[2] = 3 * (long_size >> 2) - (short_size >> 2);
+  pad->nln_increments[1] = (long_size >> 2) + (short_size >> 2);
+  pad->nln_increments[0] = pad->nln_increments[3];
+  pad->short_size = short_size;
+  pad->long_size = long_size;
+  pad->nsn_increment = short_size >> 1;
+}
+
+void
+parse_vorbis_setup_packet (GstOggStream * pad, ogg_packet * op)
+{
+  /*
+   * the code pages, a whole bunch of other fairly useless stuff, AND,
+   * RIGHT AT THE END (of a bunch of variable-length compressed rubbish that
+   * basically has only one actual set of values that everyone uses BUT YOU
+   * CAN'T BE SURE OF THAT, OH NO YOU CAN'T) is the only piece of data that's
+   * actually useful to us - the packet modes (because it's inconceivable to
+   * think people might want _just that_ and nothing else, you know, for
+   * seeking and stuff).
+   *
+   * Fortunately, because of the mandate that non-used bits must be zero
+   * at the end of the packet, we might be able to sneakily work backwards
+   * and find out the information we need (namely a mapping of modes to
+   * packet sizes)
+   */
+  unsigned char *current_pos = &op->packet[op->bytes - 1];
+  int offset;
+  int size;
+  int size_check;
+  int *mode_size_ptr;
+  int i;
+  int ii;
+
+  /*
+   * This is the format of the mode data at the end of the packet for all
+   * Vorbis Version 1 :
+   *
+   * [ 6:number_of_modes ]
+   * [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
+   * [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
+   * [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
+   * [ 1:framing(1) ]
+   *
+   * e.g.:
+   *
+   *              <-
+   * 0 0 0 0 0 1 0 0
+   * 0 0 1 0 0 0 0 0
+   * 0 0 1 0 0 0 0 0
+   * 0 0 1|0 0 0 0 0
+   * 0 0 0 0|0|0 0 0
+   * 0 0 0 0 0 0 0 0
+   * 0 0 0 0|0 0 0 0
+   * 0 0 0 0 0 0 0 0
+   * 0 0 0 0|0 0 0 0
+   * 0 0 0|1|0 0 0 0 |
+   * 0 0 0 0 0 0 0 0 V
+   * 0 0 0|0 0 0 0 0
+   * 0 0 0 0 0 0 0 0
+   * 0 0 1|0 0 0 0 0
+   * 0 0|1|0 0 0 0 0
+   *
+   *
+   * i.e. each entry is an important bit, 32 bits of 0, 8 bits of blah, a
+   * bit of 1.
+   * Let's find our last 1 bit first.
+   *
+   */
+
+  size = 0;
+
+  offset = 8;
+  while (!((1 << --offset) & *current_pos)) {
+    if (offset == 0) {
+      offset = 8;
+      current_pos -= 1;
+    }
+  }
+
+  while (1) {
+
+    /*
+     * from current_pos-5:(offset+1) to current_pos-1:(offset+1) should
+     * be zero
+     */
+    offset = (offset + 7) % 8;
+    if (offset == 7)
+      current_pos -= 1;
+
+    if (((current_pos[-5] & ~((1 << (offset + 1)) - 1)) != 0)
+        ||
+        current_pos[-4] != 0
+        ||
+        current_pos[-3] != 0
+        ||
+        current_pos[-2] != 0
+        || ((current_pos[-1] & ((1 << (offset + 1)) - 1)) != 0)
+        ) {
+      break;
+    }
+
+    size += 1;
+
+    current_pos -= 5;
+
+  }
+
+  /* Give ourselves a chance to recover if we went back too far by using
+   * the size check. */
+  for (ii = 0; ii < 2; ii++) {
+    if (offset > 4) {
+      size_check = (current_pos[0] >> (offset - 5)) & 0x3F;
+    } else {
+      /* mask part of byte from current_pos */
+      size_check = (current_pos[0] & ((1 << (offset + 1)) - 1));
+      /* shift to appropriate position */
+      size_check <<= (5 - offset);
+      /* or in part of byte from current_pos - 1 */
+      size_check |= (current_pos[-1] & ~((1 << (offset + 3)) - 1)) >>
+          (offset + 3);
+    }
+
+    size_check += 1;
+    if (size_check == size) {
+      break;
+    }
+    offset = (offset + 1) % 8;
+    if (offset == 0)
+      current_pos += 1;
+    current_pos += 5;
+    size -= 1;
+  }
+
+  /* Store mode size information in our info struct */
+  i = -1;
+  while ((1 << (++i)) < size);
+  pad->vorbis_log2_num_modes = i;
+
+  mode_size_ptr = pad->vorbis_mode_sizes;
+
+  for (i = 0; i < size; i++) {
+    offset = (offset + 1) % 8;
+    if (offset == 0)
+      current_pos += 1;
+    *mode_size_ptr++ = (current_pos[0] >> offset) & 0x1;
+    current_pos += 5;
+  }
+
+}
diff --git a/ext/ogg/vorbis_parse.h b/ext/ogg/vorbis_parse.h
new file mode 100644
index 0000000..9a8781b
--- /dev/null
+++ b/ext/ogg/vorbis_parse.h
@@ -0,0 +1,30 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * gstoggdemux.c: ogg stream demuxer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VORBIS_PARSE_H__
+#define __GST_VORBIS_PARSE_H__
+
+#include <gst/gst.h>
+
+void parse_vorbis_header_packet (GstOggStream * pad, ogg_packet * packet);
+void parse_vorbis_setup_packet (GstOggStream * pad, ogg_packet * op);
+
+#endif /* __GST_VORBIS_PARSE_H__ */
diff --git a/ext/pango/Makefile.am b/ext/pango/Makefile.am
new file mode 100644
index 0000000..86c8612
--- /dev/null
+++ b/ext/pango/Makefile.am
@@ -0,0 +1,31 @@
+plugin_LTLIBRARIES = libgstpango.la
+
+noinst_HEADERS = \
+        gstbasetextoverlay.h \
+	gstclockoverlay.h \
+	gsttextoverlay.h \
+	gsttextrender.h \
+	gsttimeoverlay.h
+
+libgstpango_la_SOURCES = \
+	gstbasetextoverlay.c \
+	gstclockoverlay.c \
+	gsttextoverlay.c \
+	gsttextrender.c \
+	gsttimeoverlay.c
+
+libgstpango_la_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CONTROLLER_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(PANGO_CFLAGS)
+libgstpango_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_LIBS) \
+	$(PANGO_LIBS)
+libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstpango_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/ext/pango/Makefile.in b/ext/pango/Makefile.in
new file mode 100644
index 0000000..dc936d2
--- /dev/null
+++ b/ext/pango/Makefile.in
@@ -0,0 +1,820 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/pango
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstpango_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstpango_la_OBJECTS = libgstpango_la-gstbasetextoverlay.lo \
+	libgstpango_la-gstclockoverlay.lo \
+	libgstpango_la-gsttextoverlay.lo \
+	libgstpango_la-gsttextrender.lo \
+	libgstpango_la-gsttimeoverlay.lo
+libgstpango_la_OBJECTS = $(am_libgstpango_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstpango_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstpango_la_CFLAGS) $(CFLAGS) \
+	$(libgstpango_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstpango_la_SOURCES)
+DIST_SOURCES = $(libgstpango_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstpango.la
+noinst_HEADERS = \
+        gstbasetextoverlay.h \
+	gstclockoverlay.h \
+	gsttextoverlay.h \
+	gsttextrender.h \
+	gsttimeoverlay.h
+
+libgstpango_la_SOURCES = \
+	gstbasetextoverlay.c \
+	gstclockoverlay.c \
+	gsttextoverlay.c \
+	gsttextrender.c \
+	gsttimeoverlay.c
+
+libgstpango_la_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CONTROLLER_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(PANGO_CFLAGS)
+
+libgstpango_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_LIBS) \
+	$(PANGO_LIBS)
+
+libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstpango_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/pango/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/pango/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstpango.la: $(libgstpango_la_OBJECTS) $(libgstpango_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstpango_la_LINK) -rpath $(plugindir) $(libgstpango_la_OBJECTS) $(libgstpango_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpango_la-gstbasetextoverlay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpango_la-gstclockoverlay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpango_la-gsttextoverlay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpango_la-gsttextrender.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpango_la-gsttimeoverlay.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstpango_la-gstbasetextoverlay.lo: gstbasetextoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -MT libgstpango_la-gstbasetextoverlay.lo -MD -MP -MF $(DEPDIR)/libgstpango_la-gstbasetextoverlay.Tpo -c -o libgstpango_la-gstbasetextoverlay.lo `test -f 'gstbasetextoverlay.c' || echo '$(srcdir)/'`gstbasetextoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpango_la-gstbasetextoverlay.Tpo $(DEPDIR)/libgstpango_la-gstbasetextoverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbasetextoverlay.c' object='libgstpango_la-gstbasetextoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -c -o libgstpango_la-gstbasetextoverlay.lo `test -f 'gstbasetextoverlay.c' || echo '$(srcdir)/'`gstbasetextoverlay.c
+
+libgstpango_la-gstclockoverlay.lo: gstclockoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -MT libgstpango_la-gstclockoverlay.lo -MD -MP -MF $(DEPDIR)/libgstpango_la-gstclockoverlay.Tpo -c -o libgstpango_la-gstclockoverlay.lo `test -f 'gstclockoverlay.c' || echo '$(srcdir)/'`gstclockoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpango_la-gstclockoverlay.Tpo $(DEPDIR)/libgstpango_la-gstclockoverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstclockoverlay.c' object='libgstpango_la-gstclockoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -c -o libgstpango_la-gstclockoverlay.lo `test -f 'gstclockoverlay.c' || echo '$(srcdir)/'`gstclockoverlay.c
+
+libgstpango_la-gsttextoverlay.lo: gsttextoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -MT libgstpango_la-gsttextoverlay.lo -MD -MP -MF $(DEPDIR)/libgstpango_la-gsttextoverlay.Tpo -c -o libgstpango_la-gsttextoverlay.lo `test -f 'gsttextoverlay.c' || echo '$(srcdir)/'`gsttextoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpango_la-gsttextoverlay.Tpo $(DEPDIR)/libgstpango_la-gsttextoverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttextoverlay.c' object='libgstpango_la-gsttextoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -c -o libgstpango_la-gsttextoverlay.lo `test -f 'gsttextoverlay.c' || echo '$(srcdir)/'`gsttextoverlay.c
+
+libgstpango_la-gsttextrender.lo: gsttextrender.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -MT libgstpango_la-gsttextrender.lo -MD -MP -MF $(DEPDIR)/libgstpango_la-gsttextrender.Tpo -c -o libgstpango_la-gsttextrender.lo `test -f 'gsttextrender.c' || echo '$(srcdir)/'`gsttextrender.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpango_la-gsttextrender.Tpo $(DEPDIR)/libgstpango_la-gsttextrender.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttextrender.c' object='libgstpango_la-gsttextrender.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -c -o libgstpango_la-gsttextrender.lo `test -f 'gsttextrender.c' || echo '$(srcdir)/'`gsttextrender.c
+
+libgstpango_la-gsttimeoverlay.lo: gsttimeoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -MT libgstpango_la-gsttimeoverlay.lo -MD -MP -MF $(DEPDIR)/libgstpango_la-gsttimeoverlay.Tpo -c -o libgstpango_la-gsttimeoverlay.lo `test -f 'gsttimeoverlay.c' || echo '$(srcdir)/'`gsttimeoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpango_la-gsttimeoverlay.Tpo $(DEPDIR)/libgstpango_la-gsttimeoverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttimeoverlay.c' object='libgstpango_la-gsttimeoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstpango_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpango_la_CFLAGS) $(CFLAGS) -c -o libgstpango_la-gsttimeoverlay.lo `test -f 'gsttimeoverlay.c' || echo '$(srcdir)/'`gsttimeoverlay.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c
new file mode 100644
index 0000000..936da8d
--- /dev/null
+++ b/ext/pango/gstbasetextoverlay.c
@@ -0,0 +1,2799 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ * Copyright (C) <2006> Julien Moutte <julien@moutte.net>
+ * Copyright (C) <2006> Zeeshan Ali <zeeshan.ali@nokia.com>
+ * Copyright (C) <2006-2008> Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) <2009> Young-Ho Cha <ganadist@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-textoverlay
+ * @see_also: #GstTextRender, #GstClockOverlay, #GstTimeOverlay, #GstSubParse
+ *
+ * This plugin renders text on top of a video stream. This can be either
+ * static text or text from buffers received on the text sink pad, e.g.
+ * as produced by the subparse element. If the text sink pad is not linked,
+ * the text set via the "text" property will be rendered. If the text sink
+ * pad is linked, text will be rendered as it is received on that pad,
+ * honouring and matching the buffer timestamps of both input streams.
+ *
+ * The text can contain newline characters and text wrapping is enabled by
+ * default.
+ *
+ * <refsect2>
+ * <title>Example launch lines</title>
+ * |[
+ * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink
+ * ]| Here is a simple pipeline that displays a static text in the top left
+ * corner of the video picture
+ * |[
+ * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt.   videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink
+ * ]| Here is another pipeline that displays subtitles from an .srt subtitle
+ * file, centered at the bottom of the picture and with a rectangular shading
+ * around the text in the background:
+ * <para>
+ * If you do not have such a subtitle file, create one looking like this
+ * in a text editor:
+ * |[
+ * 1
+ * 00:00:03,000 --> 00:00:05,000
+ * Hello? (3-5s)
+ *
+ * 2
+ * 00:00:08,000 --> 00:00:13,000
+ * Yes, this is a subtitle. Don&apos;t
+ * you like it? (8-13s)
+ *
+ * 3
+ * 00:00:18,826 --> 00:01:02,886
+ * Uh? What are you talking about?
+ * I don&apos;t understand  (18-62s)
+ * ]|
+ * </para>
+ * </refsect2>
+ */
+
+/* FIXME: alloc segment as part of instance struct */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/video/video.h>
+
+#include "gstbasetextoverlay.h"
+#include "gsttextoverlay.h"
+#include "gsttimeoverlay.h"
+#include "gstclockoverlay.h"
+#include "gsttextrender.h"
+#include <string.h>
+
+/* FIXME:
+ *  - use proper strides and offset for I420
+ *  - if text is wider than the video picture, it does not get
+ *    clipped properly during blitting (if wrapping is disabled)
+ *  - make 'shading_value' a property (or enum:  light/normal/dark/verydark)?
+ */
+
+GST_DEBUG_CATEGORY (pango_debug);
+#define GST_CAT_DEFAULT pango_debug
+
+#define DEFAULT_PROP_TEXT 	""
+#define DEFAULT_PROP_SHADING	FALSE
+#define DEFAULT_PROP_VALIGNMENT	GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE
+#define DEFAULT_PROP_HALIGNMENT	GST_BASE_TEXT_OVERLAY_HALIGN_CENTER
+#define DEFAULT_PROP_VALIGN	"baseline"
+#define DEFAULT_PROP_HALIGN	"center"
+#define DEFAULT_PROP_XPAD	25
+#define DEFAULT_PROP_YPAD	25
+#define DEFAULT_PROP_DELTAX	0
+#define DEFAULT_PROP_DELTAY	0
+#define DEFAULT_PROP_XPOS       0.5
+#define DEFAULT_PROP_YPOS       0.5
+#define DEFAULT_PROP_WRAP_MODE  GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR
+#define DEFAULT_PROP_FONT_DESC	""
+#define DEFAULT_PROP_SILENT	FALSE
+#define DEFAULT_PROP_LINE_ALIGNMENT GST_BASE_TEXT_OVERLAY_LINE_ALIGN_CENTER
+#define DEFAULT_PROP_WAIT_TEXT	TRUE
+#define DEFAULT_PROP_AUTO_ADJUST_SIZE TRUE
+#define DEFAULT_PROP_VERTICAL_RENDER  FALSE
+#define DEFAULT_PROP_COLOR      0xffffffff
+#define DEFAULT_PROP_OUTLINE_COLOR 0xff000000
+
+/* make a property of me */
+#define DEFAULT_SHADING_VALUE    -80
+
+#define MINIMUM_OUTLINE_OFFSET 1.0
+#define DEFAULT_SCALE_BASIS    640
+
+#define COMP_Y(ret, r, g, b) \
+{ \
+   ret = (int) (((19595 * r) >> 16) + ((38470 * g) >> 16) + ((7471 * b) >> 16)); \
+   ret = CLAMP (ret, 0, 255); \
+}
+
+#define COMP_U(ret, r, g, b) \
+{ \
+   ret = (int) (-((11059 * r) >> 16) - ((21709 * g) >> 16) + ((32768 * b) >> 16) + 128); \
+   ret = CLAMP (ret, 0, 255); \
+}
+
+#define COMP_V(ret, r, g, b) \
+{ \
+   ret = (int) (((32768 * r) >> 16) - ((27439 * g) >> 16) - ((5329 * b) >> 16) + 128); \
+   ret = CLAMP (ret, 0, 255); \
+}
+
+#define BLEND(ret, alpha, v0, v1) \
+{ \
+	ret = (v0 * alpha + v1 * (255 - alpha)) / 255; \
+}
+
+#define OVER(ret, alphaA, Ca, alphaB, Cb, alphaNew)	\
+{ \
+    gint _tmp; \
+    _tmp = (Ca * alphaA + Cb * alphaB * (255 - alphaA) / 255) / alphaNew; \
+    ret = CLAMP (_tmp, 0, 255); \
+}
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+# define CAIRO_ARGB_A 3
+# define CAIRO_ARGB_R 2
+# define CAIRO_ARGB_G 1
+# define CAIRO_ARGB_B 0
+#else
+# define CAIRO_ARGB_A 0
+# define CAIRO_ARGB_R 1
+# define CAIRO_ARGB_G 2
+# define CAIRO_ARGB_B 3
+#endif
+
+enum
+{
+  PROP_0,
+  PROP_TEXT,
+  PROP_SHADING,
+  PROP_VALIGN,                  /* deprecated */
+  PROP_HALIGN,                  /* deprecated */
+  PROP_HALIGNMENT,
+  PROP_VALIGNMENT,
+  PROP_XPAD,
+  PROP_YPAD,
+  PROP_DELTAX,
+  PROP_DELTAY,
+  PROP_XPOS,
+  PROP_YPOS,
+  PROP_WRAP_MODE,
+  PROP_FONT_DESC,
+  PROP_SILENT,
+  PROP_LINE_ALIGNMENT,
+  PROP_WAIT_TEXT,
+  PROP_AUTO_ADJUST_SIZE,
+  PROP_VERTICAL_RENDER,
+  PROP_COLOR,
+  PROP_SHADOW,
+  PROP_OUTLINE_COLOR,
+  PROP_LAST
+};
+
+#define VIDEO_FORMATS "{ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, AYUV, I420, UYVY, NV12, NV21 } "
+
+static GstStaticPadTemplate src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS))
+    );
+
+static GstStaticPadTemplate video_sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("video_sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS))
+    );
+
+#define GST_TYPE_BASE_TEXT_OVERLAY_VALIGN (gst_base_text_overlay_valign_get_type())
+static GType
+gst_base_text_overlay_valign_get_type (void)
+{
+  static GType base_text_overlay_valign_type = 0;
+  static const GEnumValue base_text_overlay_valign[] = {
+    {GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE, "baseline", "baseline"},
+    {GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM, "bottom", "bottom"},
+    {GST_BASE_TEXT_OVERLAY_VALIGN_TOP, "top", "top"},
+    {GST_BASE_TEXT_OVERLAY_VALIGN_POS, "position", "position"},
+    {GST_BASE_TEXT_OVERLAY_VALIGN_CENTER, "center", "center"},
+    {0, NULL, NULL},
+  };
+
+  if (!base_text_overlay_valign_type) {
+    base_text_overlay_valign_type =
+        g_enum_register_static ("GstBaseTextOverlayVAlign",
+        base_text_overlay_valign);
+  }
+  return base_text_overlay_valign_type;
+}
+
+#define GST_TYPE_BASE_TEXT_OVERLAY_HALIGN (gst_base_text_overlay_halign_get_type())
+static GType
+gst_base_text_overlay_halign_get_type (void)
+{
+  static GType base_text_overlay_halign_type = 0;
+  static const GEnumValue base_text_overlay_halign[] = {
+    {GST_BASE_TEXT_OVERLAY_HALIGN_LEFT, "left", "left"},
+    {GST_BASE_TEXT_OVERLAY_HALIGN_CENTER, "center", "center"},
+    {GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT, "right", "right"},
+    {GST_BASE_TEXT_OVERLAY_HALIGN_POS, "position", "position"},
+    {0, NULL, NULL},
+  };
+
+  if (!base_text_overlay_halign_type) {
+    base_text_overlay_halign_type =
+        g_enum_register_static ("GstBaseTextOverlayHAlign",
+        base_text_overlay_halign);
+  }
+  return base_text_overlay_halign_type;
+}
+
+
+#define GST_TYPE_BASE_TEXT_OVERLAY_WRAP_MODE (gst_base_text_overlay_wrap_mode_get_type())
+static GType
+gst_base_text_overlay_wrap_mode_get_type (void)
+{
+  static GType base_text_overlay_wrap_mode_type = 0;
+  static const GEnumValue base_text_overlay_wrap_mode[] = {
+    {GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE, "none", "none"},
+    {GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD, "word", "word"},
+    {GST_BASE_TEXT_OVERLAY_WRAP_MODE_CHAR, "char", "char"},
+    {GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR, "wordchar", "wordchar"},
+    {0, NULL, NULL},
+  };
+
+  if (!base_text_overlay_wrap_mode_type) {
+    base_text_overlay_wrap_mode_type =
+        g_enum_register_static ("GstBaseTextOverlayWrapMode",
+        base_text_overlay_wrap_mode);
+  }
+  return base_text_overlay_wrap_mode_type;
+}
+
+#define GST_TYPE_BASE_TEXT_OVERLAY_LINE_ALIGN (gst_base_text_overlay_line_align_get_type())
+static GType
+gst_base_text_overlay_line_align_get_type (void)
+{
+  static GType base_text_overlay_line_align_type = 0;
+  static const GEnumValue base_text_overlay_line_align[] = {
+    {GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT, "left", "left"},
+    {GST_BASE_TEXT_OVERLAY_LINE_ALIGN_CENTER, "center", "center"},
+    {GST_BASE_TEXT_OVERLAY_LINE_ALIGN_RIGHT, "right", "right"},
+    {0, NULL, NULL}
+  };
+
+  if (!base_text_overlay_line_align_type) {
+    base_text_overlay_line_align_type =
+        g_enum_register_static ("GstBaseTextOverlayLineAlign",
+        base_text_overlay_line_align);
+  }
+  return base_text_overlay_line_align_type;
+}
+
+#define GST_BASE_TEXT_OVERLAY_GET_COND(ov) (((GstBaseTextOverlay *)ov)->cond)
+#define GST_BASE_TEXT_OVERLAY_WAIT(ov)     (g_cond_wait (GST_BASE_TEXT_OVERLAY_GET_COND (ov), GST_OBJECT_GET_LOCK (ov)))
+#define GST_BASE_TEXT_OVERLAY_SIGNAL(ov)   (g_cond_signal (GST_BASE_TEXT_OVERLAY_GET_COND (ov)))
+#define GST_BASE_TEXT_OVERLAY_BROADCAST(ov)(g_cond_broadcast (GST_BASE_TEXT_OVERLAY_GET_COND (ov)))
+
+static GstElementClass *parent_class = NULL;
+static void gst_base_text_overlay_base_init (gpointer g_class);
+static void gst_base_text_overlay_class_init (GstBaseTextOverlayClass * klass);
+static void gst_base_text_overlay_init (GstBaseTextOverlay * overlay,
+    GstBaseTextOverlayClass * klass);
+
+static GstStateChangeReturn gst_base_text_overlay_change_state (GstElement *
+    element, GstStateChange transition);
+
+static GstCaps *gst_base_text_overlay_getcaps (GstPad * pad, GstCaps * filter);
+static gboolean gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay,
+    GstCaps * caps);
+static gboolean gst_base_text_overlay_setcaps_txt (GstBaseTextOverlay * overlay,
+    GstCaps * caps);
+static gboolean gst_base_text_overlay_src_event (GstPad * pad,
+    GstEvent * event);
+static gboolean gst_base_text_overlay_src_query (GstPad * pad,
+    GstQuery * query);
+
+static gboolean gst_base_text_overlay_video_event (GstPad * pad,
+    GstEvent * event);
+static GstFlowReturn gst_base_text_overlay_video_chain (GstPad * pad,
+    GstBuffer * buffer);
+
+static gboolean gst_base_text_overlay_text_event (GstPad * pad,
+    GstEvent * event);
+static GstFlowReturn gst_base_text_overlay_text_chain (GstPad * pad,
+    GstBuffer * buffer);
+static GstPadLinkReturn gst_base_text_overlay_text_pad_link (GstPad * pad,
+    GstPad * peer);
+static void gst_base_text_overlay_text_pad_unlink (GstPad * pad);
+static void gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay);
+static void gst_base_text_overlay_update_render_mode (GstBaseTextOverlay *
+    overlay);
+
+static void gst_base_text_overlay_finalize (GObject * object);
+static void gst_base_text_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_base_text_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void
+gst_base_text_overlay_adjust_values_with_fontdesc (GstBaseTextOverlay * overlay,
+    PangoFontDescription * desc);
+
+GType
+gst_base_text_overlay_get_type (void)
+{
+  static GType type = 0;
+
+  if (g_once_init_enter ((gsize *) & type)) {
+    static const GTypeInfo info = {
+      sizeof (GstBaseTextOverlayClass),
+      (GBaseInitFunc) gst_base_text_overlay_base_init,
+      NULL,
+      (GClassInitFunc) gst_base_text_overlay_class_init,
+      NULL,
+      NULL,
+      sizeof (GstBaseTextOverlay),
+      0,
+      (GInstanceInitFunc) gst_base_text_overlay_init,
+    };
+
+    g_once_init_leave ((gsize *) & type,
+        g_type_register_static (GST_TYPE_ELEMENT, "GstBaseTextOverlay", &info,
+            0));
+  }
+
+  return type;
+}
+
+static gchar *
+gst_base_text_overlay_get_text (GstBaseTextOverlay * overlay,
+    GstBuffer * video_frame)
+{
+  return g_strdup (overlay->default_text);
+}
+
+static void
+gst_base_text_overlay_base_init (gpointer g_class)
+{
+  GstBaseTextOverlayClass *klass = GST_BASE_TEXT_OVERLAY_CLASS (g_class);
+  PangoFontMap *fontmap;
+
+  /* Only lock for the subclasses here, the base class
+   * doesn't have this mutex yet and it's not necessary
+   * here */
+  if (klass->pango_lock)
+    g_mutex_lock (klass->pango_lock);
+  fontmap = pango_cairo_font_map_get_default ();
+  klass->pango_context =
+      pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+  if (klass->pango_lock)
+    g_mutex_unlock (klass->pango_lock);
+}
+
+static void
+gst_base_text_overlay_class_init (GstBaseTextOverlayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_base_text_overlay_finalize;
+  gobject_class->set_property = gst_base_text_overlay_set_property;
+  gobject_class->get_property = gst_base_text_overlay_get_property;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&src_template_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&video_sink_template_factory));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_change_state);
+
+  klass->pango_lock = g_mutex_new ();
+
+  klass->get_text = gst_base_text_overlay_get_text;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TEXT,
+      g_param_spec_string ("text", "text",
+          "Text to be display.", DEFAULT_PROP_TEXT,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SHADING,
+      g_param_spec_boolean ("shaded-background", "shaded background",
+          "Whether to shade the background under the text area",
+          DEFAULT_PROP_SHADING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VALIGNMENT,
+      g_param_spec_enum ("valignment", "vertical alignment",
+          "Vertical alignment of the text", GST_TYPE_BASE_TEXT_OVERLAY_VALIGN,
+          DEFAULT_PROP_VALIGNMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_HALIGNMENT,
+      g_param_spec_enum ("halignment", "horizontal alignment",
+          "Horizontal alignment of the text", GST_TYPE_BASE_TEXT_OVERLAY_HALIGN,
+          DEFAULT_PROP_HALIGNMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VALIGN,
+      g_param_spec_string ("valign", "vertical alignment",
+          "Vertical alignment of the text (deprecated; use valignment)",
+          DEFAULT_PROP_VALIGN, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_HALIGN,
+      g_param_spec_string ("halign", "horizontal alignment",
+          "Horizontal alignment of the text (deprecated; use halignment)",
+          DEFAULT_PROP_HALIGN, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_XPAD,
+      g_param_spec_int ("xpad", "horizontal paddding",
+          "Horizontal paddding when using left/right alignment", 0, G_MAXINT,
+          DEFAULT_PROP_XPAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_YPAD,
+      g_param_spec_int ("ypad", "vertical padding",
+          "Vertical padding when using top/bottom alignment", 0, G_MAXINT,
+          DEFAULT_PROP_YPAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DELTAX,
+      g_param_spec_int ("deltax", "X position modifier",
+          "Shift X position to the left or to the right. Unit is pixels.",
+          G_MININT, G_MAXINT, DEFAULT_PROP_DELTAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DELTAY,
+      g_param_spec_int ("deltay", "Y position modifier",
+          "Shift Y position up or down. Unit is pixels.", G_MININT, G_MAXINT,
+          DEFAULT_PROP_DELTAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:xpos
+   *
+   * Horizontal position of the rendered text when using positioned alignment.
+   *
+   * Since: 0.10.31
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_XPOS,
+      g_param_spec_double ("xpos", "horizontal position",
+          "Horizontal position when using position alignment", 0, 1.0,
+          DEFAULT_PROP_XPOS,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:ypos
+   *
+   * Vertical position of the rendered text when using positioned alignment.
+   *
+   * Since: 0.10.31
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_YPOS,
+      g_param_spec_double ("ypos", "vertical position",
+          "Vertical position when using position alignment", 0, 1.0,
+          DEFAULT_PROP_YPOS,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WRAP_MODE,
+      g_param_spec_enum ("wrap-mode", "wrap mode",
+          "Whether to wrap the text and if so how.",
+          GST_TYPE_BASE_TEXT_OVERLAY_WRAP_MODE, DEFAULT_PROP_WRAP_MODE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FONT_DESC,
+      g_param_spec_string ("font-desc", "font description",
+          "Pango font description of font to be used for rendering. "
+          "See documentation of pango_font_description_from_string "
+          "for syntax.", DEFAULT_PROP_FONT_DESC,
+          G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:color
+   *
+   * Color of the rendered text.
+   *
+   * Since: 0.10.31
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_COLOR,
+      g_param_spec_uint ("color", "Color",
+          "Color to use for text (big-endian ARGB).", 0, G_MAXUINT32,
+          DEFAULT_PROP_COLOR,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstTextOverlay:outline-color
+   *
+   * Color of the outline of the rendered text.
+   *
+   * Since: 0.10.35
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_OUTLINE_COLOR,
+      g_param_spec_uint ("outline-color", "Text Outline Color",
+          "Color to use for outline the text (big-endian ARGB).", 0,
+          G_MAXUINT32, DEFAULT_PROP_OUTLINE_COLOR,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstBaseTextOverlay:line-alignment
+   *
+   * Alignment of text lines relative to each other (for multi-line text)
+   *
+   * Since: 0.10.15
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LINE_ALIGNMENT,
+      g_param_spec_enum ("line-alignment", "line alignment",
+          "Alignment of text lines relative to each other.",
+          GST_TYPE_BASE_TEXT_OVERLAY_LINE_ALIGN, DEFAULT_PROP_LINE_ALIGNMENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:silent
+   *
+   * If set, no text is rendered. Useful to switch off text rendering
+   * temporarily without removing the textoverlay element from the pipeline.
+   *
+   * Since: 0.10.15
+   **/
+  /* FIXME 0.11: rename to "visible" or "text-visible" or "render-text" */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SILENT,
+      g_param_spec_boolean ("silent", "silent",
+          "Whether to render the text string",
+          DEFAULT_PROP_SILENT,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:wait-text
+   *
+   * If set, the video will block until a subtitle is received on the text pad.
+   * If video and subtitles are sent in sync, like from the same demuxer, this
+   * property should be set.
+   *
+   * Since: 0.10.20
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_WAIT_TEXT,
+      g_param_spec_boolean ("wait-text", "Wait Text",
+          "Whether to wait for subtitles",
+          DEFAULT_PROP_WAIT_TEXT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass),
+      PROP_AUTO_ADJUST_SIZE, g_param_spec_boolean ("auto-resize", "auto resize",
+          "Automatically adjust font size to screen-size.",
+          DEFAULT_PROP_AUTO_ADJUST_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VERTICAL_RENDER,
+      g_param_spec_boolean ("vertical-render", "vertical render",
+          "Vertical Render.", DEFAULT_PROP_VERTICAL_RENDER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_base_text_overlay_finalize (GObject * object)
+{
+  GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object);
+
+  g_free (overlay->default_text);
+
+  if (overlay->text_image) {
+    g_free (overlay->text_image);
+    overlay->text_image = NULL;
+  }
+
+  if (overlay->layout) {
+    g_object_unref (overlay->layout);
+    overlay->layout = NULL;
+  }
+
+  if (overlay->text_buffer) {
+    gst_buffer_unref (overlay->text_buffer);
+    overlay->text_buffer = NULL;
+  }
+
+  if (overlay->cond) {
+    g_cond_free (overlay->cond);
+    overlay->cond = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_base_text_overlay_init (GstBaseTextOverlay * overlay,
+    GstBaseTextOverlayClass * klass)
+{
+  GstPadTemplate *template;
+  PangoFontDescription *desc;
+
+  /* video sink */
+  template = gst_static_pad_template_get (&video_sink_template_factory);
+  overlay->video_sinkpad = gst_pad_new_from_template (template, "video_sink");
+  gst_object_unref (template);
+  gst_pad_set_getcaps_function (overlay->video_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_getcaps));
+  gst_pad_set_event_function (overlay->video_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_video_event));
+  gst_pad_set_chain_function (overlay->video_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_video_chain));
+  gst_element_add_pad (GST_ELEMENT (overlay), overlay->video_sinkpad);
+
+  template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass),
+      "text_sink");
+  if (template) {
+    /* text sink */
+    overlay->text_sinkpad = gst_pad_new_from_template (template, "text_sink");
+    gst_object_unref (template);
+
+    gst_pad_set_event_function (overlay->text_sinkpad,
+        GST_DEBUG_FUNCPTR (gst_base_text_overlay_text_event));
+    gst_pad_set_chain_function (overlay->text_sinkpad,
+        GST_DEBUG_FUNCPTR (gst_base_text_overlay_text_chain));
+    gst_pad_set_link_function (overlay->text_sinkpad,
+        GST_DEBUG_FUNCPTR (gst_base_text_overlay_text_pad_link));
+    gst_pad_set_unlink_function (overlay->text_sinkpad,
+        GST_DEBUG_FUNCPTR (gst_base_text_overlay_text_pad_unlink));
+    gst_element_add_pad (GST_ELEMENT (overlay), overlay->text_sinkpad);
+  }
+
+  /* (video) source */
+  template = gst_static_pad_template_get (&src_template_factory);
+  overlay->srcpad = gst_pad_new_from_template (template, "src");
+  gst_object_unref (template);
+  gst_pad_set_getcaps_function (overlay->srcpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_getcaps));
+  gst_pad_set_event_function (overlay->srcpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_src_event));
+  gst_pad_set_query_function (overlay->srcpad,
+      GST_DEBUG_FUNCPTR (gst_base_text_overlay_src_query));
+  gst_element_add_pad (GST_ELEMENT (overlay), overlay->srcpad);
+
+  g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+  overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT;
+  overlay->layout =
+      pango_layout_new (GST_BASE_TEXT_OVERLAY_GET_CLASS
+      (overlay)->pango_context);
+  desc =
+      pango_context_get_font_description (GST_BASE_TEXT_OVERLAY_GET_CLASS
+      (overlay)->pango_context);
+  gst_base_text_overlay_adjust_values_with_fontdesc (overlay, desc);
+
+  overlay->color = DEFAULT_PROP_COLOR;
+  overlay->outline_color = DEFAULT_PROP_OUTLINE_COLOR;
+  overlay->halign = DEFAULT_PROP_HALIGNMENT;
+  overlay->valign = DEFAULT_PROP_VALIGNMENT;
+  overlay->xpad = DEFAULT_PROP_XPAD;
+  overlay->ypad = DEFAULT_PROP_YPAD;
+  overlay->deltax = DEFAULT_PROP_DELTAX;
+  overlay->deltay = DEFAULT_PROP_DELTAY;
+  overlay->xpos = DEFAULT_PROP_XPOS;
+  overlay->ypos = DEFAULT_PROP_YPOS;
+
+  overlay->wrap_mode = DEFAULT_PROP_WRAP_MODE;
+
+  overlay->want_shading = DEFAULT_PROP_SHADING;
+  overlay->shading_value = DEFAULT_SHADING_VALUE;
+  overlay->silent = DEFAULT_PROP_SILENT;
+  overlay->wait_text = DEFAULT_PROP_WAIT_TEXT;
+  overlay->auto_adjust_size = DEFAULT_PROP_AUTO_ADJUST_SIZE;
+
+  overlay->default_text = g_strdup (DEFAULT_PROP_TEXT);
+  overlay->need_render = TRUE;
+  overlay->text_image = NULL;
+  overlay->use_vertical_render = DEFAULT_PROP_VERTICAL_RENDER;
+  gst_base_text_overlay_update_render_mode (overlay);
+
+  overlay->text_buffer = NULL;
+  overlay->text_linked = FALSE;
+  overlay->cond = g_cond_new ();
+  gst_segment_init (&overlay->segment, GST_FORMAT_TIME);
+  g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+}
+
+static void
+gst_base_text_overlay_update_wrap_mode (GstBaseTextOverlay * overlay)
+{
+  if (overlay->wrap_mode == GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE) {
+    GST_DEBUG_OBJECT (overlay, "Set wrap mode NONE");
+    pango_layout_set_width (overlay->layout, -1);
+  } else {
+    int width;
+
+    if (overlay->auto_adjust_size) {
+      width = DEFAULT_SCALE_BASIS * PANGO_SCALE;
+      if (overlay->use_vertical_render) {
+        width = width * (overlay->height - overlay->ypad * 2) / overlay->width;
+      }
+    } else {
+      width =
+          (overlay->use_vertical_render ? overlay->height : overlay->width) *
+          PANGO_SCALE;
+    }
+
+    GST_DEBUG_OBJECT (overlay, "Set layout width %d", overlay->width);
+    GST_DEBUG_OBJECT (overlay, "Set wrap mode    %d", overlay->wrap_mode);
+    pango_layout_set_width (overlay->layout, width);
+    pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode);
+  }
+}
+
+static void
+gst_base_text_overlay_update_render_mode (GstBaseTextOverlay * overlay)
+{
+  PangoMatrix matrix = PANGO_MATRIX_INIT;
+  PangoContext *context = pango_layout_get_context (overlay->layout);
+
+  if (overlay->use_vertical_render) {
+    pango_matrix_rotate (&matrix, -90);
+    pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO);
+    pango_context_set_matrix (context, &matrix);
+    pango_layout_set_alignment (overlay->layout, PANGO_ALIGN_LEFT);
+  } else {
+    pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH);
+    pango_context_set_matrix (context, &matrix);
+    pango_layout_set_alignment (overlay->layout, overlay->line_align);
+  }
+}
+
+static gboolean
+gst_base_text_overlay_setcaps_txt (GstBaseTextOverlay * overlay, GstCaps * caps)
+{
+  GstStructure *structure;
+
+  structure = gst_caps_get_structure (caps, 0);
+  overlay->have_pango_markup =
+      gst_structure_has_name (structure, "text/x-pango-markup");
+
+  return TRUE;
+}
+
+/* FIXME: upstream nego (e.g. when the video window is resized) */
+
+static gboolean
+gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay, GstCaps * caps)
+{
+  GstVideoInfo info;
+  gboolean ret = FALSE;
+
+  if (!gst_video_info_from_caps (&info, caps))
+    goto invalid_caps;
+
+  overlay->info = info;
+  overlay->format = GST_VIDEO_INFO_FORMAT (&info);
+  overlay->width = GST_VIDEO_INFO_WIDTH (&info);
+  overlay->height = GST_VIDEO_INFO_HEIGHT (&info);
+
+  ret = gst_pad_push_event (overlay->srcpad, gst_event_new_caps (caps));
+
+  if (ret) {
+    GST_OBJECT_LOCK (overlay);
+    g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+    gst_base_text_overlay_update_wrap_mode (overlay);
+    g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+    GST_OBJECT_UNLOCK (overlay);
+  }
+
+  return ret;
+
+  /* ERRORS */
+invalid_caps:
+  {
+    GST_DEBUG_OBJECT (overlay, "could not parse caps");
+    return FALSE;
+  }
+}
+
+static void
+gst_base_text_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object);
+
+  GST_OBJECT_LOCK (overlay);
+  switch (prop_id) {
+    case PROP_TEXT:
+      g_free (overlay->default_text);
+      overlay->default_text = g_value_dup_string (value);
+      overlay->need_render = TRUE;
+      break;
+    case PROP_SHADING:
+      overlay->want_shading = g_value_get_boolean (value);
+      break;
+    case PROP_XPAD:
+      overlay->xpad = g_value_get_int (value);
+      break;
+    case PROP_YPAD:
+      overlay->ypad = g_value_get_int (value);
+      break;
+    case PROP_DELTAX:
+      overlay->deltax = g_value_get_int (value);
+      break;
+    case PROP_DELTAY:
+      overlay->deltay = g_value_get_int (value);
+      break;
+    case PROP_XPOS:
+      overlay->xpos = g_value_get_double (value);
+      break;
+    case PROP_YPOS:
+      overlay->ypos = g_value_get_double (value);
+      break;
+    case PROP_HALIGN:{
+      const gchar *s = g_value_get_string (value);
+
+      if (s && g_ascii_strcasecmp (s, "left") == 0)
+        overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_LEFT;
+      else if (s && g_ascii_strcasecmp (s, "center") == 0)
+        overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_CENTER;
+      else if (s && g_ascii_strcasecmp (s, "right") == 0)
+        overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT;
+      else
+        g_warning ("Invalid value '%s' for textoverlay property 'halign'",
+            GST_STR_NULL (s));
+      break;
+    }
+    case PROP_VALIGN:{
+      const gchar *s = g_value_get_string (value);
+
+      if (s && g_ascii_strcasecmp (s, "baseline") == 0)
+        overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE;
+      else if (s && g_ascii_strcasecmp (s, "bottom") == 0)
+        overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM;
+      else if (s && g_ascii_strcasecmp (s, "top") == 0)
+        overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
+      else
+        g_warning ("Invalid value '%s' for textoverlay property 'valign'",
+            GST_STR_NULL (s));
+      break;
+    }
+    case PROP_VALIGNMENT:
+      overlay->valign = g_value_get_enum (value);
+      break;
+    case PROP_HALIGNMENT:
+      overlay->halign = g_value_get_enum (value);
+      break;
+    case PROP_WRAP_MODE:
+      overlay->wrap_mode = g_value_get_enum (value);
+      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      gst_base_text_overlay_update_wrap_mode (overlay);
+      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      break;
+    case PROP_FONT_DESC:
+    {
+      PangoFontDescription *desc;
+      const gchar *fontdesc_str;
+
+      fontdesc_str = g_value_get_string (value);
+      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      desc = pango_font_description_from_string (fontdesc_str);
+      if (desc) {
+        GST_LOG_OBJECT (overlay, "font description set: %s", fontdesc_str);
+        pango_layout_set_font_description (overlay->layout, desc);
+        gst_base_text_overlay_adjust_values_with_fontdesc (overlay, desc);
+        pango_font_description_free (desc);
+      } else {
+        GST_WARNING_OBJECT (overlay, "font description parse failed: %s",
+            fontdesc_str);
+      }
+      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      break;
+    }
+    case PROP_COLOR:
+      overlay->color = g_value_get_uint (value);
+      break;
+    case PROP_OUTLINE_COLOR:
+      overlay->outline_color = g_value_get_uint (value);
+      break;
+    case PROP_SILENT:
+      overlay->silent = g_value_get_boolean (value);
+      break;
+    case PROP_LINE_ALIGNMENT:
+      overlay->line_align = g_value_get_enum (value);
+      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      pango_layout_set_alignment (overlay->layout,
+          (PangoAlignment) overlay->line_align);
+      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      break;
+    case PROP_WAIT_TEXT:
+      overlay->wait_text = g_value_get_boolean (value);
+      break;
+    case PROP_AUTO_ADJUST_SIZE:
+      overlay->auto_adjust_size = g_value_get_boolean (value);
+      overlay->need_render = TRUE;
+      break;
+    case PROP_VERTICAL_RENDER:
+      overlay->use_vertical_render = g_value_get_boolean (value);
+      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      gst_base_text_overlay_update_render_mode (overlay);
+      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      overlay->need_render = TRUE;
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  overlay->need_render = TRUE;
+  GST_OBJECT_UNLOCK (overlay);
+}
+
+static void
+gst_base_text_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object);
+
+  GST_OBJECT_LOCK (overlay);
+  switch (prop_id) {
+    case PROP_TEXT:
+      g_value_set_string (value, overlay->default_text);
+      break;
+    case PROP_SHADING:
+      g_value_set_boolean (value, overlay->want_shading);
+      break;
+    case PROP_XPAD:
+      g_value_set_int (value, overlay->xpad);
+      break;
+    case PROP_YPAD:
+      g_value_set_int (value, overlay->ypad);
+      break;
+    case PROP_DELTAX:
+      g_value_set_int (value, overlay->deltax);
+      break;
+    case PROP_DELTAY:
+      g_value_set_int (value, overlay->deltay);
+      break;
+    case PROP_XPOS:
+      g_value_set_double (value, overlay->xpos);
+      break;
+    case PROP_YPOS:
+      g_value_set_double (value, overlay->ypos);
+      break;
+    case PROP_VALIGNMENT:
+      g_value_set_enum (value, overlay->valign);
+      break;
+    case PROP_HALIGNMENT:
+      g_value_set_enum (value, overlay->halign);
+      break;
+    case PROP_WRAP_MODE:
+      g_value_set_enum (value, overlay->wrap_mode);
+      break;
+    case PROP_SILENT:
+      g_value_set_boolean (value, overlay->silent);
+      break;
+    case PROP_LINE_ALIGNMENT:
+      g_value_set_enum (value, overlay->line_align);
+      break;
+    case PROP_WAIT_TEXT:
+      g_value_set_boolean (value, overlay->wait_text);
+      break;
+    case PROP_AUTO_ADJUST_SIZE:
+      g_value_set_boolean (value, overlay->auto_adjust_size);
+      break;
+    case PROP_VERTICAL_RENDER:
+      g_value_set_boolean (value, overlay->use_vertical_render);
+      break;
+    case PROP_COLOR:
+      g_value_set_uint (value, overlay->color);
+      break;
+    case PROP_OUTLINE_COLOR:
+      g_value_set_uint (value, overlay->outline_color);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  overlay->need_render = TRUE;
+  GST_OBJECT_UNLOCK (overlay);
+}
+
+static gboolean
+gst_base_text_overlay_src_query (GstPad * pad, GstQuery * query)
+{
+  gboolean ret = FALSE;
+  GstBaseTextOverlay *overlay = NULL;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay))
+    return FALSE;
+
+  ret = gst_pad_peer_query (overlay->video_sinkpad, query);
+
+  gst_object_unref (overlay);
+
+  return ret;
+}
+
+static gboolean
+gst_base_text_overlay_src_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret = FALSE;
+  GstBaseTextOverlay *overlay = NULL;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:{
+      GstSeekFlags flags;
+
+      /* We don't handle seek if we have not text pad */
+      if (!overlay->text_linked) {
+        GST_DEBUG_OBJECT (overlay, "seek received, pushing upstream");
+        ret = gst_pad_push_event (overlay->video_sinkpad, event);
+        goto beach;
+      }
+
+      GST_DEBUG_OBJECT (overlay, "seek received, driving from here");
+
+      gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
+
+      /* Flush downstream, only for flushing seek */
+      if (flags & GST_SEEK_FLAG_FLUSH)
+        gst_pad_push_event (overlay->srcpad, gst_event_new_flush_start ());
+
+      /* Mark ourself as flushing, unblock chains */
+      GST_OBJECT_LOCK (overlay);
+      overlay->video_flushing = TRUE;
+      overlay->text_flushing = TRUE;
+      gst_base_text_overlay_pop_text (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+
+      /* Seek on each sink pad */
+      gst_event_ref (event);
+      ret = gst_pad_push_event (overlay->video_sinkpad, event);
+      if (ret) {
+        ret = gst_pad_push_event (overlay->text_sinkpad, event);
+      } else {
+        gst_event_unref (event);
+      }
+      break;
+    }
+    default:
+      if (overlay->text_linked) {
+        gst_event_ref (event);
+        ret = gst_pad_push_event (overlay->video_sinkpad, event);
+        gst_pad_push_event (overlay->text_sinkpad, event);
+      } else {
+        ret = gst_pad_push_event (overlay->video_sinkpad, event);
+      }
+      break;
+  }
+
+beach:
+  gst_object_unref (overlay);
+
+  return ret;
+}
+
+static GstCaps *
+gst_base_text_overlay_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstBaseTextOverlay *overlay;
+  GstPad *otherpad;
+  GstCaps *caps;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay))
+    return gst_caps_copy (gst_pad_get_pad_template_caps (pad));
+
+  if (pad == overlay->srcpad)
+    otherpad = overlay->video_sinkpad;
+  else
+    otherpad = overlay->srcpad;
+
+  /* we can do what the peer can */
+  caps = gst_pad_peer_get_caps (otherpad, filter);
+  if (caps) {
+    GstCaps *temp, *templ;
+
+    GST_DEBUG_OBJECT (pad, "peer caps  %" GST_PTR_FORMAT, caps);
+
+    /* filtered against our padtemplate */
+    templ = gst_pad_get_pad_template_caps (otherpad);
+    GST_DEBUG_OBJECT (pad, "our template  %" GST_PTR_FORMAT, templ);
+    temp = gst_caps_intersect_full (caps, templ, GST_CAPS_INTERSECT_FIRST);
+    GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, temp);
+    gst_caps_unref (caps);
+    gst_caps_unref (templ);
+    /* this is what we can do */
+    caps = temp;
+  } else {
+    /* no peer, our padtemplate is enough then */
+    caps = gst_pad_get_pad_template_caps (pad);
+    if (filter) {
+      GstCaps *intersection;
+
+      intersection =
+          gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+      gst_caps_unref (caps);
+      caps = intersection;
+    }
+  }
+
+  GST_DEBUG_OBJECT (overlay, "returning  %" GST_PTR_FORMAT, caps);
+
+  gst_object_unref (overlay);
+
+  return caps;
+}
+
+static void
+gst_base_text_overlay_adjust_values_with_fontdesc (GstBaseTextOverlay * overlay,
+    PangoFontDescription * desc)
+{
+  gint font_size = pango_font_description_get_size (desc) / PANGO_SCALE;
+  overlay->shadow_offset = (double) (font_size) / 13.0;
+  overlay->outline_offset = (double) (font_size) / 15.0;
+  if (overlay->outline_offset < MINIMUM_OUTLINE_OFFSET)
+    overlay->outline_offset = MINIMUM_OUTLINE_OFFSET;
+}
+
+#define CAIRO_UNPREMULTIPLY(a,r,g,b) G_STMT_START { \
+  b = (a > 0) ? MIN ((b * 255 + a / 2) / a, 255) : 0; \
+  g = (a > 0) ? MIN ((g * 255 + a / 2) / a, 255) : 0; \
+  r = (a > 0) ? MIN ((r * 255 + a / 2) / a, 255) : 0; \
+} G_STMT_END
+
+static inline void
+gst_base_text_overlay_blit_1 (GstBaseTextOverlay * overlay, guchar * dest,
+    gint xpos, gint ypos, guchar * text_image, guint dest_stride)
+{
+  gint i, j = 0;
+  gint x, y;
+  guchar r, g, b, a;
+  guchar *pimage;
+  guchar *py;
+  gint width = overlay->image_width;
+  gint height = overlay->image_height;
+
+  if (xpos < 0) {
+    xpos = 0;
+  }
+
+  if (xpos + width > overlay->width) {
+    width = overlay->width - xpos;
+  }
+
+  if (ypos + height > overlay->height) {
+    height = overlay->height - ypos;
+  }
+
+  dest += (ypos / 1) * dest_stride;
+
+  for (i = 0; i < height; i++) {
+    pimage = text_image + 4 * (i * overlay->image_width);
+    py = dest + i * dest_stride + xpos;
+    for (j = 0; j < width; j++) {
+      b = pimage[CAIRO_ARGB_B];
+      g = pimage[CAIRO_ARGB_G];
+      r = pimage[CAIRO_ARGB_R];
+      a = pimage[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a, r, g, b);
+
+      pimage += 4;
+      if (a == 0) {
+        py++;
+        continue;
+      }
+      COMP_Y (y, r, g, b);
+      x = *py;
+      BLEND (*py++, a, y, x);
+    }
+  }
+}
+
+static inline void
+gst_base_text_overlay_blit_sub2x2cbcr (GstBaseTextOverlay * overlay,
+    guchar * destcb, guchar * destcr, gint xpos, gint ypos, guchar * text_image,
+    guint destcb_stride, guint destcr_stride, guint pix_stride)
+{
+  gint i, j;
+  gint x, cb, cr;
+  gushort r, g, b, a;
+  gushort r1, g1, b1, a1;
+  guchar *pimage1, *pimage2;
+  guchar *pcb, *pcr;
+  gint width = overlay->image_width - 2;
+  gint height = overlay->image_height - 2;
+
+  xpos *= pix_stride;
+
+  if (xpos < 0) {
+    xpos = 0;
+  }
+
+  if (xpos + width > overlay->width) {
+    width = overlay->width - xpos;
+  }
+
+  if (ypos + height > overlay->height) {
+    height = overlay->height - ypos;
+  }
+
+  destcb += (ypos / 2) * destcb_stride;
+  destcr += (ypos / 2) * destcr_stride;
+
+  for (i = 0; i < height; i += 2) {
+    pimage1 = text_image + 4 * (i * overlay->image_width);
+    pimage2 = pimage1 + 4 * overlay->image_width;
+    pcb = destcb + (i / 2) * destcb_stride + xpos / 2;
+    pcr = destcr + (i / 2) * destcr_stride + xpos / 2;
+    for (j = 0; j < width; j += 2) {
+      b = pimage1[CAIRO_ARGB_B];
+      g = pimage1[CAIRO_ARGB_G];
+      r = pimage1[CAIRO_ARGB_R];
+      a = pimage1[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a, r, g, b);
+      pimage1 += 4;
+
+      b1 = pimage1[CAIRO_ARGB_B];
+      g1 = pimage1[CAIRO_ARGB_G];
+      r1 = pimage1[CAIRO_ARGB_R];
+      a1 = pimage1[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
+      b += b1;
+      g += g1;
+      r += r1;
+      a += a1;
+      pimage1 += 4;
+
+      b1 = pimage2[CAIRO_ARGB_B];
+      g1 = pimage2[CAIRO_ARGB_G];
+      r1 = pimage2[CAIRO_ARGB_R];
+      a1 = pimage2[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
+      b += b1;
+      g += g1;
+      r += r1;
+      a += a1;
+      pimage2 += 4;
+
+      /* + 2 for rounding */
+      b1 = pimage2[CAIRO_ARGB_B];
+      g1 = pimage2[CAIRO_ARGB_G];
+      r1 = pimage2[CAIRO_ARGB_R];
+      a1 = pimage2[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
+      b += b1 + 2;
+      g += g1 + 2;
+      r += r1 + 2;
+      a += a1 + 2;
+      pimage2 += 4;
+
+      b /= 4;
+      g /= 4;
+      r /= 4;
+      a /= 4;
+
+      if (a == 0) {
+        pcb += pix_stride;
+        pcr += pix_stride;
+        continue;
+      }
+      COMP_U (cb, r, g, b);
+      COMP_V (cr, r, g, b);
+
+      x = *pcb;
+      BLEND (*pcb, a, cb, x);
+      x = *pcr;
+      BLEND (*pcr, a, cr, x);
+
+      pcb += pix_stride;
+      pcr += pix_stride;
+    }
+  }
+}
+
+static void
+gst_base_text_overlay_render_pangocairo (GstBaseTextOverlay * overlay,
+    const gchar * string, gint textlen)
+{
+  cairo_t *cr;
+  cairo_surface_t *surface;
+  PangoRectangle ink_rect, logical_rect;
+  cairo_matrix_t cairo_matrix;
+  int width, height;
+  double scalef = 1.0;
+  double a, r, g, b;
+
+  g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+
+  if (overlay->auto_adjust_size) {
+    /* 640 pixel is default */
+    scalef = (double) (overlay->width) / DEFAULT_SCALE_BASIS;
+  }
+  pango_layout_set_width (overlay->layout, -1);
+  /* set text on pango layout */
+  pango_layout_set_markup (overlay->layout, string, textlen);
+
+  /* get subtitle image size */
+  pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect);
+
+  width = (logical_rect.width + overlay->shadow_offset) * scalef;
+
+  if (width + overlay->deltax >
+      (overlay->use_vertical_render ? overlay->height : overlay->width)) {
+    /*
+     * subtitle image width is larger then overlay width
+     * so rearrange overlay wrap mode.
+     */
+    gst_base_text_overlay_update_wrap_mode (overlay);
+    pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect);
+    width = overlay->width;
+  }
+
+  height =
+      (logical_rect.height + logical_rect.y + overlay->shadow_offset) * scalef;
+  if (height > overlay->height) {
+    height = overlay->height;
+  }
+  if (overlay->use_vertical_render) {
+    PangoRectangle rect;
+    PangoContext *context;
+    PangoMatrix matrix = PANGO_MATRIX_INIT;
+    int tmp;
+
+    context = pango_layout_get_context (overlay->layout);
+
+    pango_matrix_rotate (&matrix, -90);
+
+    rect.x = rect.y = 0;
+    rect.width = width;
+    rect.height = height;
+    pango_matrix_transform_pixel_rectangle (&matrix, &rect);
+    matrix.x0 = -rect.x;
+    matrix.y0 = -rect.y;
+
+    pango_context_set_matrix (context, &matrix);
+
+    cairo_matrix.xx = matrix.xx;
+    cairo_matrix.yx = matrix.yx;
+    cairo_matrix.xy = matrix.xy;
+    cairo_matrix.yy = matrix.yy;
+    cairo_matrix.x0 = matrix.x0;
+    cairo_matrix.y0 = matrix.y0;
+    cairo_matrix_scale (&cairo_matrix, scalef, scalef);
+
+    tmp = height;
+    height = width;
+    width = tmp;
+  } else {
+    cairo_matrix_init_scale (&cairo_matrix, scalef, scalef);
+  }
+
+  /* reallocate surface */
+  overlay->text_image = g_realloc (overlay->text_image, 4 * width * height);
+
+  surface = cairo_image_surface_create_for_data (overlay->text_image,
+      CAIRO_FORMAT_ARGB32, width, height, width * 4);
+  cr = cairo_create (surface);
+
+  /* clear surface */
+  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (cr);
+
+  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+
+  if (overlay->want_shading)
+    cairo_paint_with_alpha (cr, overlay->shading_value);
+
+  /* apply transformations */
+  cairo_set_matrix (cr, &cairo_matrix);
+
+  /* FIXME: We use show_layout everywhere except for the surface
+   * because it's really faster and internally does all kinds of
+   * caching. Unfortunately we have to paint to a cairo path for
+   * the outline and this is slow. Once Pango supports user fonts
+   * we should use them, see
+   * https://bugzilla.gnome.org/show_bug.cgi?id=598695
+   *
+   * Idea would the be, to create a cairo user font that
+   * does shadow, outline, text painting in the
+   * render_glyph function.
+   */
+
+  /* draw shadow text */
+  cairo_save (cr);
+  cairo_translate (cr, overlay->shadow_offset, overlay->shadow_offset);
+  cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5);
+  pango_cairo_show_layout (cr, overlay->layout);
+  cairo_restore (cr);
+
+  a = (overlay->outline_color >> 24) & 0xff;
+  r = (overlay->outline_color >> 16) & 0xff;
+  g = (overlay->outline_color >> 8) & 0xff;
+  b = (overlay->outline_color >> 0) & 0xff;
+
+  /* draw outline text */
+  cairo_save (cr);
+  cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0);
+  cairo_set_line_width (cr, overlay->outline_offset);
+  pango_cairo_layout_path (cr, overlay->layout);
+  cairo_stroke (cr);
+  cairo_restore (cr);
+
+  a = (overlay->color >> 24) & 0xff;
+  r = (overlay->color >> 16) & 0xff;
+  g = (overlay->color >> 8) & 0xff;
+  b = (overlay->color >> 0) & 0xff;
+
+  /* draw text */
+  cairo_save (cr);
+  cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0);
+  pango_cairo_show_layout (cr, overlay->layout);
+  cairo_restore (cr);
+
+  cairo_destroy (cr);
+  cairo_surface_destroy (surface);
+  overlay->image_width = width;
+  overlay->image_height = height;
+  overlay->baseline_y = ink_rect.y;
+  g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+}
+
+#define BOX_XPAD         6
+#define BOX_YPAD         6
+
+static inline void
+gst_base_text_overlay_shade_planar_Y (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint x0, gint x1, gint y0, gint y1)
+{
+  gint i, j, dest_stride;
+  guint8 *dest_ptr;
+
+  dest_stride = dest->info.stride[0];
+  dest_ptr = dest->data[0];
+
+  x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
+  x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width);
+
+  y0 = CLAMP (y0 - BOX_YPAD, 0, overlay->height);
+  y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height);
+
+  for (i = y0; i < y1; ++i) {
+    for (j = x0; j < x1; ++j) {
+      gint y = dest_ptr[(i * dest_stride) + j] + overlay->shading_value;
+
+      dest_ptr[(i * dest_stride) + j] = CLAMP (y, 0, 255);
+    }
+  }
+}
+
+static inline void
+gst_base_text_overlay_shade_packed_Y (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint x0, gint x1, gint y0, gint y1)
+{
+  gint i, j;
+  guint dest_stride, pixel_stride;
+  guint8 *dest_ptr;
+
+  dest_stride = GST_VIDEO_FRAME_COMP_STRIDE (dest, 0);
+  dest_ptr = GST_VIDEO_FRAME_COMP_DATA (dest, 0);
+  pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (dest, 0);
+
+  x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
+  x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width);
+
+  y0 = CLAMP (y0 - BOX_YPAD, 0, overlay->height);
+  y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height);
+
+  if (x0 != 0)
+    x0 = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (dest->info.finfo, 0, x0);
+  if (x1 != 0)
+    x1 = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (dest->info.finfo, 0, x1);
+
+  if (y0 != 0)
+    y0 = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (dest->info.finfo, 0, y0);
+  if (y1 != 0)
+    y1 = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (dest->info.finfo, 0, y1);
+
+  for (i = y0; i < y1; i++) {
+    for (j = x0; j < x1; j++) {
+      gint y;
+      gint y_pos;
+
+      y_pos = (i * dest_stride) + j * pixel_stride;
+      y = dest_ptr[y_pos] + overlay->shading_value;
+
+      dest_ptr[y_pos] = CLAMP (y, 0, 255);
+    }
+  }
+}
+
+#define gst_base_text_overlay_shade_BGRx gst_base_text_overlay_shade_xRGB
+#define gst_base_text_overlay_shade_RGBx gst_base_text_overlay_shade_xRGB
+#define gst_base_text_overlay_shade_xBGR gst_base_text_overlay_shade_xRGB
+static inline void
+gst_base_text_overlay_shade_xRGB (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint x0, gint x1, gint y0, gint y1)
+{
+  gint i, j;
+  guint8 *dest_ptr;
+
+  dest_ptr = dest->data[0];
+
+  x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
+  x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width);
+
+  y0 = CLAMP (y0 - BOX_YPAD, 0, overlay->height);
+  y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height);
+
+  for (i = y0; i < y1; i++) {
+    for (j = x0; j < x1; j++) {
+      gint y, y_pos, k;
+
+      y_pos = (i * 4 * overlay->width) + j * 4;
+      for (k = 0; k < 4; k++) {
+        y = dest_ptr[y_pos + k] + overlay->shading_value;
+        dest_ptr[y_pos + k] = CLAMP (y, 0, 255);
+      }
+    }
+  }
+}
+
+#define ARGB_SHADE_FUNCTION(name, OFFSET)	\
+static inline void \
+gst_base_text_overlay_shade_##name (GstBaseTextOverlay * overlay, GstVideoFrame * dest, \
+gint x0, gint x1, gint y0, gint y1) \
+{ \
+  gint i, j;\
+  guint8 *dest_ptr;\
+  \
+  dest_ptr = dest->data[0];\
+  \
+  x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);\
+  x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width);\
+  \
+  y0 = CLAMP (y0 - BOX_YPAD, 0, overlay->height);\
+  y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height);\
+  \
+  for (i = y0; i < y1; i++) {\
+    for (j = x0; j < x1; j++) {\
+      gint y, y_pos, k;\
+      y_pos = (i * 4 * overlay->width) + j * 4;\
+      for (k = OFFSET; k < 3+OFFSET; k++) {\
+        y = dest_ptr[y_pos + k] + overlay->shading_value;\
+        dest_ptr[y_pos + k] = CLAMP (y, 0, 255);\
+      }\
+    }\
+  }\
+}
+ARGB_SHADE_FUNCTION (ARGB, 1);
+ARGB_SHADE_FUNCTION (ABGR, 1);
+ARGB_SHADE_FUNCTION (RGBA, 0);
+ARGB_SHADE_FUNCTION (BGRA, 0);
+
+
+/* FIXME:
+ *  - use proper strides and offset for I420
+ *  - don't draw over the edge of the picture (try a longer
+ *    text with a huge font size)
+ */
+
+static inline void
+gst_base_text_overlay_blit_NV12_NV21 (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint xpos, gint ypos)
+{
+  int y_stride, u_stride, v_stride;
+  guint8 *y_pixels, *u_pixels, *v_pixels;
+
+  /* because U/V is 2x2 subsampled, we need to round, either up or down,
+   * to a boundary of integer number of U/V pixels:
+   */
+  xpos = GST_ROUND_UP_2 (xpos);
+  ypos = GST_ROUND_UP_2 (ypos);
+
+  y_pixels = dest->data[0];
+  u_pixels = dest->data[1];
+  v_pixels = dest->data[2];
+  y_stride = dest->info.stride[0];
+  u_stride = dest->info.stride[1];
+  v_stride = dest->info.stride[2];
+
+  gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
+      overlay->text_image, y_stride);
+  gst_base_text_overlay_blit_sub2x2cbcr (overlay, u_pixels,
+      v_pixels, xpos, ypos, overlay->text_image, u_stride, v_stride, 2);
+}
+
+static inline void
+gst_base_text_overlay_blit_I420 (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint xpos, gint ypos)
+{
+  int y_stride, u_stride, v_stride;
+  guint8 *y_pixels, *u_pixels, *v_pixels;
+
+  /* because U/V is 2x2 subsampled, we need to round, either up or down,
+   * to a boundary of integer number of U/V pixels:
+   */
+  xpos = GST_ROUND_UP_2 (xpos);
+  ypos = GST_ROUND_UP_2 (ypos);
+
+  y_pixels = dest->data[0];
+  u_pixels = dest->data[1];
+  v_pixels = dest->data[2];
+  y_stride = dest->info.stride[0];
+  u_stride = dest->info.stride[1];
+  v_stride = dest->info.stride[2];
+
+  gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
+      overlay->text_image, y_stride);
+  gst_base_text_overlay_blit_sub2x2cbcr (overlay, u_pixels,
+      v_pixels, xpos, ypos, overlay->text_image, u_stride, v_stride, 1);
+}
+
+static inline void
+gst_base_text_overlay_blit_UYVY (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint xpos, gint ypos)
+{
+  int a0, r0, g0, b0;
+  int a1, r1, g1, b1;
+  int y0, y1, u, v;
+  int i, j;
+  int h, w;
+  guchar *pimage, *dest_ptr;
+  guint8 *yuv_pixels;
+
+  yuv_pixels = dest->data[0];
+
+  /* because U/V is 2x horizontally subsampled, we need to round to a
+   * boundary of integer number of U/V pixels in x dimension:
+   */
+  xpos = GST_ROUND_UP_2 (xpos);
+
+  w = overlay->image_width - 2;
+  h = overlay->image_height - 2;
+
+  if (xpos < 0) {
+    xpos = 0;
+  }
+
+  if (xpos + w > overlay->width) {
+    w = overlay->width - xpos;
+  }
+
+  if (ypos + h > overlay->height) {
+    h = overlay->height - ypos;
+  }
+
+  for (i = 0; i < h; i++) {
+    pimage = overlay->text_image + i * overlay->image_width * 4;
+    dest_ptr = yuv_pixels + (i + ypos) * overlay->width * 2 + xpos * 2;
+    for (j = 0; j < w; j += 2) {
+      b0 = pimage[CAIRO_ARGB_B];
+      g0 = pimage[CAIRO_ARGB_G];
+      r0 = pimage[CAIRO_ARGB_R];
+      a0 = pimage[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a0, r0, g0, b0);
+      pimage += 4;
+
+      b1 = pimage[CAIRO_ARGB_B];
+      g1 = pimage[CAIRO_ARGB_G];
+      r1 = pimage[CAIRO_ARGB_R];
+      a1 = pimage[CAIRO_ARGB_A];
+      CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
+      pimage += 4;
+
+      a0 += a1 + 2;
+      a0 /= 2;
+      if (a0 == 0) {
+        dest_ptr += 4;
+        continue;
+      }
+
+      COMP_Y (y0, r0, g0, b0);
+      COMP_Y (y1, r1, g1, b1);
+
+      b0 += b1 + 2;
+      g0 += g1 + 2;
+      r0 += r1 + 2;
+
+      b0 /= 2;
+      g0 /= 2;
+      r0 /= 2;
+
+      COMP_U (u, r0, g0, b0);
+      COMP_V (v, r0, g0, b0);
+
+      BLEND (*dest_ptr, a0, u, *dest_ptr);
+      dest_ptr++;
+      BLEND (*dest_ptr, a0, y0, *dest_ptr);
+      dest_ptr++;
+      BLEND (*dest_ptr, a0, v, *dest_ptr);
+      dest_ptr++;
+      BLEND (*dest_ptr, a0, y1, *dest_ptr);
+      dest_ptr++;
+    }
+  }
+}
+
+static inline void
+gst_base_text_overlay_blit_AYUV (GstBaseTextOverlay * overlay,
+    GstVideoFrame * dest, gint xpos, gint ypos)
+{
+  int a, r, g, b, a1;
+  int y, u, v;
+  int i, j;
+  int h, w;
+  guchar *pimage, *dest_ptr;
+  guint8 *rgb_pixels;
+
+  rgb_pixels = dest->data[0];
+
+  w = overlay->image_width;
+  h = overlay->image_height;
+
+  if (xpos < 0) {
+    xpos = 0;
+  }
+
+  if (xpos + w > overlay->width) {
+    w = overlay->width - xpos;
+  }
+
+  if (ypos + h > overlay->height) {
+    h = overlay->height - ypos;
+  }
+
+  for (i = 0; i < h; i++) {
+    pimage = overlay->text_image + i * overlay->image_width * 4;
+    dest_ptr = rgb_pixels + (i + ypos) * 4 * overlay->width + xpos * 4;
+    for (j = 0; j < w; j++) {
+      a = pimage[CAIRO_ARGB_A];
+      b = pimage[CAIRO_ARGB_B];
+      g = pimage[CAIRO_ARGB_G];
+      r = pimage[CAIRO_ARGB_R];
+
+      CAIRO_UNPREMULTIPLY (a, r, g, b);
+
+      // convert background to yuv
+      COMP_Y (y, r, g, b);
+      COMP_U (u, r, g, b);
+      COMP_V (v, r, g, b);
+
+      // preform text "OVER" background alpha compositing
+      a1 = a + (dest_ptr[0] * (255 - a)) / 255 + 1;     // add 1 to prevent divide by 0
+      OVER (dest_ptr[1], a, y, dest_ptr[0], dest_ptr[1], a1);
+      OVER (dest_ptr[2], a, u, dest_ptr[0], dest_ptr[2], a1);
+      OVER (dest_ptr[3], a, v, dest_ptr[0], dest_ptr[3], a1);
+      dest_ptr[0] = a1 - 1;     // remove the temporary 1 we added
+
+      pimage += 4;
+      dest_ptr += 4;
+    }
+  }
+}
+
+#define xRGB_BLIT_FUNCTION(name, R, G, B) \
+static inline void \
+gst_base_text_overlay_blit_##name (GstBaseTextOverlay * overlay, \
+    GstVideoFrame * dest, gint xpos, gint ypos) \
+{ \
+  int a, r, g, b; \
+  int i, j; \
+  int h, w; \
+  guchar *pimage, *dest_ptr; \
+  guint8 *rgb_pixels;\
+  \
+  rgb_pixels = dest->data[0];\
+  \
+  w = overlay->image_width; \
+  h = overlay->image_height; \
+  \
+  if (xpos < 0) { \
+    xpos = 0; \
+  } \
+  \
+  if (xpos + w > overlay->width) { \
+    w = overlay->width - xpos; \
+  } \
+  \
+  if (ypos + h > overlay->height) { \
+    h = overlay->height - ypos; \
+  } \
+  \
+  for (i = 0; i < h; i++) { \
+    pimage = overlay->text_image + i * overlay->image_width * 4; \
+    dest_ptr = rgb_pixels + (i + ypos) * 4 * overlay->width + xpos * 4; \
+    for (j = 0; j < w; j++) { \
+      a = pimage[CAIRO_ARGB_A]; \
+      b = pimage[CAIRO_ARGB_B]; \
+      g = pimage[CAIRO_ARGB_G]; \
+      r = pimage[CAIRO_ARGB_R]; \
+      CAIRO_UNPREMULTIPLY (a, r, g, b); \
+      b = (b*a + dest_ptr[B] * (255-a)) / 255; \
+      g = (g*a + dest_ptr[G] * (255-a)) / 255; \
+      r = (r*a + dest_ptr[R] * (255-a)) / 255; \
+      \
+      dest_ptr[B] = b; \
+      dest_ptr[G] = g; \
+      dest_ptr[R] = r; \
+      pimage += 4; \
+      dest_ptr += 4; \
+    } \
+  } \
+}
+xRGB_BLIT_FUNCTION (xRGB, 1, 2, 3);
+xRGB_BLIT_FUNCTION (BGRx, 2, 1, 0);
+xRGB_BLIT_FUNCTION (xBGR, 3, 2, 1);
+xRGB_BLIT_FUNCTION (RGBx, 0, 1, 2);
+
+#define ARGB_BLIT_FUNCTION(name, A, R, G, B)	\
+static inline void \
+gst_base_text_overlay_blit_##name (GstBaseTextOverlay * overlay, \
+    GstVideoFrame * dest, gint xpos, gint ypos) \
+{ \
+  int a, r, g, b, a1;				\
+  int i, j; \
+  int h, w; \
+  guchar *pimage, *dest_ptr; \
+  guint8 *rgb_pixels;\
+  \
+  rgb_pixels = dest->data[0];\
+  \
+  w = overlay->image_width; \
+  h = overlay->image_height; \
+  \
+  if (xpos < 0) { \
+    xpos = 0; \
+  } \
+  \
+  if (xpos + w > overlay->width) { \
+    w = overlay->width - xpos; \
+  } \
+  \
+  if (ypos + h > overlay->height) { \
+    h = overlay->height - ypos; \
+  } \
+  \
+  for (i = 0; i < h; i++) { \
+    pimage = overlay->text_image + i * overlay->image_width * 4; \
+    dest_ptr = rgb_pixels + (i + ypos) * 4 * overlay->width + xpos * 4; \
+    for (j = 0; j < w; j++) { \
+      a = pimage[CAIRO_ARGB_A]; \
+      b = pimage[CAIRO_ARGB_B]; \
+      g = pimage[CAIRO_ARGB_G]; \
+      r = pimage[CAIRO_ARGB_R]; \
+      CAIRO_UNPREMULTIPLY (a, r, g, b); \
+      a1 = a + (dest_ptr[A] * (255 - a)) / 255 + 1; \
+      OVER (dest_ptr[R], a, r, dest_ptr[0], dest_ptr[R], a1); \
+      OVER (dest_ptr[G], a, g, dest_ptr[0], dest_ptr[G], a1); \
+      OVER (dest_ptr[B], a, b, dest_ptr[0], dest_ptr[B], a1); \
+      dest_ptr[A] = a1 - 1; \
+      pimage += 4; \
+      dest_ptr += 4; \
+    } \
+  } \
+}
+ARGB_BLIT_FUNCTION (RGBA, 3, 0, 1, 2);
+ARGB_BLIT_FUNCTION (BGRA, 3, 2, 1, 0);
+ARGB_BLIT_FUNCTION (ARGB, 0, 1, 2, 3);
+ARGB_BLIT_FUNCTION (ABGR, 0, 3, 2, 1);
+
+static void
+gst_base_text_overlay_render_text (GstBaseTextOverlay * overlay,
+    const gchar * text, gint textlen)
+{
+  gchar *string;
+
+  if (!overlay->need_render) {
+    GST_DEBUG ("Using previously rendered text.");
+    return;
+  }
+
+  /* -1 is the whole string */
+  if (text != NULL && textlen < 0) {
+    textlen = strlen (text);
+  }
+
+  if (text != NULL) {
+    string = g_strndup (text, textlen);
+  } else {                      /* empty string */
+    string = g_strdup (" ");
+  }
+  g_strdelimit (string, "\r\t", ' ');
+  textlen = strlen (string);
+
+  /* FIXME: should we check for UTF-8 here? */
+
+  GST_DEBUG ("Rendering '%s'", string);
+  gst_base_text_overlay_render_pangocairo (overlay, string, textlen);
+
+  g_free (string);
+
+  overlay->need_render = FALSE;
+}
+
+static GstFlowReturn
+gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay,
+    GstBuffer * video_frame)
+{
+  gint xpos, ypos;
+  gint width, height;
+  GstBaseTextOverlayVAlign valign;
+  GstBaseTextOverlayHAlign halign;
+  GstVideoFrame frame;
+
+  width = overlay->image_width;
+  height = overlay->image_height;
+
+  video_frame = gst_buffer_make_writable (video_frame);
+
+  if (!gst_video_frame_map (&frame, &overlay->info, video_frame, GST_MAP_WRITE))
+    goto invalid_frame;
+
+  if (overlay->use_vertical_render)
+    halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT;
+  else
+    halign = overlay->halign;
+
+  switch (halign) {
+    case GST_BASE_TEXT_OVERLAY_HALIGN_LEFT:
+      xpos = overlay->xpad;
+      break;
+    case GST_BASE_TEXT_OVERLAY_HALIGN_CENTER:
+      xpos = (overlay->width - width) / 2;
+      break;
+    case GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT:
+      xpos = overlay->width - width - overlay->xpad;
+      break;
+    case GST_BASE_TEXT_OVERLAY_HALIGN_POS:
+      xpos = (gint) (overlay->width * overlay->xpos) - width / 2;
+      xpos = CLAMP (xpos, 0, overlay->width - width);
+      if (xpos < 0)
+        xpos = 0;
+      break;
+    default:
+      xpos = 0;
+  }
+  xpos += overlay->deltax;
+
+  if (overlay->use_vertical_render)
+    valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
+  else
+    valign = overlay->valign;
+
+  switch (valign) {
+    case GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM:
+      ypos = overlay->height - height - overlay->ypad;
+      break;
+    case GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE:
+      ypos = overlay->height - (height + overlay->ypad);
+      break;
+    case GST_BASE_TEXT_OVERLAY_VALIGN_TOP:
+      ypos = overlay->ypad;
+      break;
+    case GST_BASE_TEXT_OVERLAY_VALIGN_POS:
+      ypos = (gint) (overlay->height * overlay->ypos) - height / 2;
+      ypos = CLAMP (ypos, 0, overlay->height - height);
+      break;
+    case GST_BASE_TEXT_OVERLAY_VALIGN_CENTER:
+      ypos = (overlay->height - height) / 2;
+      break;
+    default:
+      ypos = overlay->ypad;
+      break;
+  }
+  ypos += overlay->deltay;
+
+  /* shaded background box */
+  if (overlay->want_shading) {
+    switch (overlay->format) {
+      case GST_VIDEO_FORMAT_I420:
+      case GST_VIDEO_FORMAT_NV12:
+      case GST_VIDEO_FORMAT_NV21:
+        gst_base_text_overlay_shade_planar_Y (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_AYUV:
+      case GST_VIDEO_FORMAT_UYVY:
+        gst_base_text_overlay_shade_packed_Y (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_xRGB:
+        gst_base_text_overlay_shade_xRGB (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_xBGR:
+        gst_base_text_overlay_shade_xBGR (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_BGRx:
+        gst_base_text_overlay_shade_BGRx (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_RGBx:
+        gst_base_text_overlay_shade_RGBx (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_ARGB:
+        gst_base_text_overlay_shade_ARGB (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_ABGR:
+        gst_base_text_overlay_shade_ABGR (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_RGBA:
+        gst_base_text_overlay_shade_RGBA (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      case GST_VIDEO_FORMAT_BGRA:
+        gst_base_text_overlay_shade_BGRA (overlay, &frame,
+            xpos, xpos + overlay->image_width,
+            ypos, ypos + overlay->image_height);
+        break;
+      default:
+        g_assert_not_reached ();
+    }
+  }
+
+  if (ypos < 0)
+    ypos = 0;
+
+  if (overlay->text_image) {
+    switch (overlay->format) {
+      case GST_VIDEO_FORMAT_I420:
+        gst_base_text_overlay_blit_I420 (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_NV12:
+      case GST_VIDEO_FORMAT_NV21:
+        gst_base_text_overlay_blit_NV12_NV21 (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_UYVY:
+        gst_base_text_overlay_blit_UYVY (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_AYUV:
+        gst_base_text_overlay_blit_AYUV (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_BGRx:
+        gst_base_text_overlay_blit_BGRx (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_xRGB:
+        gst_base_text_overlay_blit_xRGB (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_RGBx:
+        gst_base_text_overlay_blit_RGBx (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_xBGR:
+        gst_base_text_overlay_blit_xBGR (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_ARGB:
+        gst_base_text_overlay_blit_ARGB (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_ABGR:
+        gst_base_text_overlay_blit_ABGR (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_RGBA:
+        gst_base_text_overlay_blit_RGBA (overlay, &frame, xpos, ypos);
+        break;
+      case GST_VIDEO_FORMAT_BGRA:
+        gst_base_text_overlay_blit_BGRA (overlay, &frame, xpos, ypos);
+        break;
+      default:
+        g_assert_not_reached ();
+    }
+  }
+  gst_video_frame_unmap (&frame);
+
+  return gst_pad_push (overlay->srcpad, video_frame);
+
+  /* ERRORS */
+invalid_frame:
+  {
+    GST_DEBUG_OBJECT (overlay, "received invalid buffer");
+    return GST_FLOW_OK;
+  }
+}
+
+static GstPadLinkReturn
+gst_base_text_overlay_text_pad_link (GstPad * pad, GstPad * peer)
+{
+  GstBaseTextOverlay *overlay;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay))
+    return GST_PAD_LINK_REFUSED;
+
+  GST_DEBUG_OBJECT (overlay, "Text pad linked");
+
+  overlay->text_linked = TRUE;
+
+  gst_object_unref (overlay);
+
+  return GST_PAD_LINK_OK;
+}
+
+static void
+gst_base_text_overlay_text_pad_unlink (GstPad * pad)
+{
+  GstBaseTextOverlay *overlay;
+
+  /* don't use gst_pad_get_parent() here, will deadlock */
+  overlay = GST_BASE_TEXT_OVERLAY (GST_PAD_PARENT (pad));
+
+  GST_DEBUG_OBJECT (overlay, "Text pad unlinked");
+
+  overlay->text_linked = FALSE;
+
+  gst_segment_init (&overlay->text_segment, GST_FORMAT_UNDEFINED);
+}
+
+static gboolean
+gst_base_text_overlay_text_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret = FALSE;
+  GstBaseTextOverlay *overlay = NULL;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  GST_LOG_OBJECT (pad, "received event %s", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_base_text_overlay_setcaps_txt (overlay, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      overlay->text_eos = FALSE;
+
+      gst_event_parse_segment (event, &segment);
+
+      if (segment->format == GST_FORMAT_TIME) {
+        GST_OBJECT_LOCK (overlay);
+        gst_segment_copy_into (segment, &overlay->text_segment);
+        GST_DEBUG_OBJECT (overlay, "TEXT SEGMENT now: %" GST_SEGMENT_FORMAT,
+            &overlay->text_segment);
+        GST_OBJECT_UNLOCK (overlay);
+      } else {
+        GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL),
+            ("received non-TIME newsegment event on text input"));
+      }
+
+      gst_event_unref (event);
+      ret = TRUE;
+
+      /* wake up the video chain, it might be waiting for a text buffer or
+       * a text segment update */
+      GST_OBJECT_LOCK (overlay);
+      GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      GST_OBJECT_LOCK (overlay);
+      GST_INFO_OBJECT (overlay, "text flush stop");
+      overlay->text_flushing = FALSE;
+      overlay->text_eos = FALSE;
+      gst_base_text_overlay_pop_text (overlay);
+      gst_segment_init (&overlay->text_segment, GST_FORMAT_TIME);
+      GST_OBJECT_UNLOCK (overlay);
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    case GST_EVENT_FLUSH_START:
+      GST_OBJECT_LOCK (overlay);
+      GST_INFO_OBJECT (overlay, "text flush start");
+      overlay->text_flushing = TRUE;
+      GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    case GST_EVENT_EOS:
+      GST_OBJECT_LOCK (overlay);
+      overlay->text_eos = TRUE;
+      GST_INFO_OBJECT (overlay, "text EOS");
+      /* wake up the video chain, it might be waiting for a text buffer or
+       * a text segment update */
+      GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (overlay);
+
+  return ret;
+}
+
+static gboolean
+gst_base_text_overlay_video_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret = FALSE;
+  GstBaseTextOverlay *overlay = NULL;
+
+  overlay = GST_BASE_TEXT_OVERLAY (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (!overlay)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (pad, "received event %s", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_base_text_overlay_setcaps (overlay, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      GST_DEBUG_OBJECT (overlay, "received new segment");
+
+      gst_event_parse_segment (event, &segment);
+
+      if (segment->format == GST_FORMAT_TIME) {
+        GST_DEBUG_OBJECT (overlay, "VIDEO SEGMENT now: %" GST_SEGMENT_FORMAT,
+            &overlay->segment);
+
+        gst_segment_copy_into (segment, &overlay->segment);
+      } else {
+        GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL),
+            ("received non-TIME newsegment event on video input"));
+      }
+
+      ret = gst_pad_event_default (pad, event);
+      break;
+    }
+    case GST_EVENT_EOS:
+      GST_OBJECT_LOCK (overlay);
+      GST_INFO_OBJECT (overlay, "video EOS");
+      overlay->video_eos = TRUE;
+      GST_OBJECT_UNLOCK (overlay);
+      ret = gst_pad_event_default (pad, event);
+      break;
+    case GST_EVENT_FLUSH_START:
+      GST_OBJECT_LOCK (overlay);
+      GST_INFO_OBJECT (overlay, "video flush start");
+      overlay->video_flushing = TRUE;
+      GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+      ret = gst_pad_event_default (pad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      GST_OBJECT_LOCK (overlay);
+      GST_INFO_OBJECT (overlay, "video flush stop");
+      overlay->video_flushing = FALSE;
+      overlay->video_eos = FALSE;
+      gst_segment_init (&overlay->segment, GST_FORMAT_TIME);
+      GST_OBJECT_UNLOCK (overlay);
+      ret = gst_pad_event_default (pad, event);
+      break;
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (overlay);
+
+  return ret;
+}
+
+/* Called with lock held */
+static void
+gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay)
+{
+  g_return_if_fail (GST_IS_BASE_TEXT_OVERLAY (overlay));
+
+  if (overlay->text_buffer) {
+    GST_DEBUG_OBJECT (overlay, "releasing text buffer %p",
+        overlay->text_buffer);
+    gst_buffer_unref (overlay->text_buffer);
+    overlay->text_buffer = NULL;
+  }
+
+  /* Let the text task know we used that buffer */
+  GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+}
+
+/* We receive text buffers here. If they are out of segment we just ignore them.
+   If the buffer is in our segment we keep it internally except if another one
+   is already waiting here, in that case we wait that it gets kicked out */
+static GstFlowReturn
+gst_base_text_overlay_text_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBaseTextOverlay *overlay = NULL;
+  gboolean in_seg = FALSE;
+  guint64 clip_start = 0, clip_stop = 0;
+
+  overlay = GST_BASE_TEXT_OVERLAY (GST_PAD_PARENT (pad));
+
+  GST_OBJECT_LOCK (overlay);
+
+  if (overlay->text_flushing) {
+    GST_OBJECT_UNLOCK (overlay);
+    ret = GST_FLOW_WRONG_STATE;
+    GST_LOG_OBJECT (overlay, "text flushing");
+    goto beach;
+  }
+
+  if (overlay->text_eos) {
+    GST_OBJECT_UNLOCK (overlay);
+    ret = GST_FLOW_UNEXPECTED;
+    GST_LOG_OBJECT (overlay, "text EOS");
+    goto beach;
+  }
+
+  GST_LOG_OBJECT (overlay, "%" GST_SEGMENT_FORMAT "  BUFFER: ts=%"
+      GST_TIME_FORMAT ", end=%" GST_TIME_FORMAT, &overlay->segment,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer) +
+          GST_BUFFER_DURATION (buffer)));
+
+  if (G_LIKELY (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))) {
+    GstClockTime stop;
+
+    if (G_LIKELY (GST_BUFFER_DURATION_IS_VALID (buffer)))
+      stop = GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer);
+    else
+      stop = GST_CLOCK_TIME_NONE;
+
+    in_seg = gst_segment_clip (&overlay->text_segment, GST_FORMAT_TIME,
+        GST_BUFFER_TIMESTAMP (buffer), stop, &clip_start, &clip_stop);
+  } else {
+    in_seg = TRUE;
+  }
+
+  if (in_seg) {
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
+      GST_BUFFER_TIMESTAMP (buffer) = clip_start;
+    else if (GST_BUFFER_DURATION_IS_VALID (buffer))
+      GST_BUFFER_DURATION (buffer) = clip_stop - clip_start;
+
+    /* Wait for the previous buffer to go away */
+    while (overlay->text_buffer != NULL) {
+      GST_DEBUG ("Pad %s:%s has a buffer queued, waiting",
+          GST_DEBUG_PAD_NAME (pad));
+      GST_BASE_TEXT_OVERLAY_WAIT (overlay);
+      GST_DEBUG ("Pad %s:%s resuming", GST_DEBUG_PAD_NAME (pad));
+      if (overlay->text_flushing) {
+        GST_OBJECT_UNLOCK (overlay);
+        ret = GST_FLOW_WRONG_STATE;
+        goto beach;
+      }
+    }
+
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
+      overlay->text_segment.position = clip_start;
+
+    overlay->text_buffer = buffer;
+    /* That's a new text buffer we need to render */
+    overlay->need_render = TRUE;
+
+    /* in case the video chain is waiting for a text buffer, wake it up */
+    GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
+  }
+
+  GST_OBJECT_UNLOCK (overlay);
+
+beach:
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_base_text_overlay_video_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstBaseTextOverlayClass *klass;
+  GstBaseTextOverlay *overlay;
+  GstFlowReturn ret = GST_FLOW_OK;
+  gboolean in_seg = FALSE;
+  guint64 start, stop, clip_start = 0, clip_stop = 0;
+  gchar *text = NULL;
+
+  overlay = GST_BASE_TEXT_OVERLAY (GST_PAD_PARENT (pad));
+  klass = GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay);
+
+  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
+    goto missing_timestamp;
+
+  /* ignore buffers that are outside of the current segment */
+  start = GST_BUFFER_TIMESTAMP (buffer);
+
+  if (!GST_BUFFER_DURATION_IS_VALID (buffer)) {
+    stop = GST_CLOCK_TIME_NONE;
+  } else {
+    stop = start + GST_BUFFER_DURATION (buffer);
+  }
+
+  GST_LOG_OBJECT (overlay, "%" GST_SEGMENT_FORMAT "  BUFFER: ts=%"
+      GST_TIME_FORMAT ", end=%" GST_TIME_FORMAT, &overlay->segment,
+      GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
+
+  /* segment_clip() will adjust start unconditionally to segment_start if
+   * no stop time is provided, so handle this ourselves */
+  if (stop == GST_CLOCK_TIME_NONE && start < overlay->segment.start)
+    goto out_of_segment;
+
+  in_seg = gst_segment_clip (&overlay->segment, GST_FORMAT_TIME, start, stop,
+      &clip_start, &clip_stop);
+
+  if (!in_seg)
+    goto out_of_segment;
+
+  /* if the buffer is only partially in the segment, fix up stamps */
+  if (clip_start != start || (stop != -1 && clip_stop != stop)) {
+    GST_DEBUG_OBJECT (overlay, "clipping buffer timestamp/duration to segment");
+    buffer = gst_buffer_make_writable (buffer);
+    GST_BUFFER_TIMESTAMP (buffer) = clip_start;
+    if (stop != -1)
+      GST_BUFFER_DURATION (buffer) = clip_stop - clip_start;
+  }
+
+  /* now, after we've done the clipping, fix up end time if there's no
+   * duration (we only use those estimated values internally though, we
+   * don't want to set bogus values on the buffer itself) */
+  if (stop == -1) {
+    GstCaps *caps;
+    GstStructure *s;
+    gint fps_num, fps_denom;
+
+    /* FIXME, store this in setcaps */
+    caps = gst_pad_get_current_caps (pad);
+    s = gst_caps_get_structure (caps, 0);
+    if (gst_structure_get_fraction (s, "framerate", &fps_num, &fps_denom) &&
+        fps_num && fps_denom) {
+      GST_DEBUG_OBJECT (overlay, "estimating duration based on framerate");
+      stop = start + gst_util_uint64_scale_int (GST_SECOND, fps_denom, fps_num);
+    } else {
+      GST_WARNING_OBJECT (overlay, "no duration, assuming minimal duration");
+      stop = start + 1;         /* we need to assume some interval */
+    }
+    gst_caps_unref (caps);
+  }
+
+  gst_object_sync_values (G_OBJECT (overlay), GST_BUFFER_TIMESTAMP (buffer));
+
+wait_for_text_buf:
+
+  GST_OBJECT_LOCK (overlay);
+
+  if (overlay->video_flushing)
+    goto flushing;
+
+  if (overlay->video_eos)
+    goto have_eos;
+
+  if (overlay->silent) {
+    GST_OBJECT_UNLOCK (overlay);
+    ret = gst_pad_push (overlay->srcpad, buffer);
+
+    /* Update position */
+    overlay->segment.position = clip_start;
+
+    return ret;
+  }
+
+  /* Text pad not linked, rendering internal text */
+  if (!overlay->text_linked) {
+    if (klass->get_text) {
+      text = klass->get_text (overlay, buffer);
+    } else {
+      text = g_strdup (overlay->default_text);
+    }
+
+    GST_LOG_OBJECT (overlay, "Text pad not linked, rendering default "
+        "text: '%s'", GST_STR_NULL (text));
+
+    GST_OBJECT_UNLOCK (overlay);
+
+    if (text != NULL && *text != '\0') {
+      /* Render and push */
+      gst_base_text_overlay_render_text (overlay, text, -1);
+      ret = gst_base_text_overlay_push_frame (overlay, buffer);
+    } else {
+      /* Invalid or empty string */
+      ret = gst_pad_push (overlay->srcpad, buffer);
+    }
+  } else {
+    /* Text pad linked, check if we have a text buffer queued */
+    if (overlay->text_buffer) {
+      gboolean pop_text = FALSE, valid_text_time = TRUE;
+      GstClockTime text_start = GST_CLOCK_TIME_NONE;
+      GstClockTime text_end = GST_CLOCK_TIME_NONE;
+      GstClockTime text_running_time = GST_CLOCK_TIME_NONE;
+      GstClockTime text_running_time_end = GST_CLOCK_TIME_NONE;
+      GstClockTime vid_running_time, vid_running_time_end;
+
+      /* if the text buffer isn't stamped right, pop it off the
+       * queue and display it for the current video frame only */
+      if (!GST_BUFFER_TIMESTAMP_IS_VALID (overlay->text_buffer) ||
+          !GST_BUFFER_DURATION_IS_VALID (overlay->text_buffer)) {
+        GST_WARNING_OBJECT (overlay,
+            "Got text buffer with invalid timestamp or duration");
+        pop_text = TRUE;
+        valid_text_time = FALSE;
+      } else {
+        text_start = GST_BUFFER_TIMESTAMP (overlay->text_buffer);
+        text_end = text_start + GST_BUFFER_DURATION (overlay->text_buffer);
+      }
+
+      vid_running_time =
+          gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME,
+          start);
+      vid_running_time_end =
+          gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME,
+          stop);
+
+      /* If timestamp and duration are valid */
+      if (valid_text_time) {
+        text_running_time =
+            gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME,
+            text_start);
+        text_running_time_end =
+            gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME,
+            text_end);
+      }
+
+      GST_LOG_OBJECT (overlay, "T: %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (text_running_time),
+          GST_TIME_ARGS (text_running_time_end));
+      GST_LOG_OBJECT (overlay, "V: %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (vid_running_time),
+          GST_TIME_ARGS (vid_running_time_end));
+
+      /* Text too old or in the future */
+      if (valid_text_time && text_running_time_end <= vid_running_time) {
+        /* text buffer too old, get rid of it and do nothing  */
+        GST_LOG_OBJECT (overlay, "text buffer too old, popping");
+        pop_text = FALSE;
+        gst_base_text_overlay_pop_text (overlay);
+        GST_OBJECT_UNLOCK (overlay);
+        goto wait_for_text_buf;
+      } else if (valid_text_time && vid_running_time_end <= text_running_time) {
+        GST_LOG_OBJECT (overlay, "text in future, pushing video buf");
+        GST_OBJECT_UNLOCK (overlay);
+        /* Push the video frame */
+        ret = gst_pad_push (overlay->srcpad, buffer);
+      } else {
+        gchar *in_text, *otext;
+        gsize in_size, osize;
+
+        otext =
+            gst_buffer_map (overlay->text_buffer, &osize, NULL, GST_MAP_READ);
+        in_text = otext;
+        in_size = osize;
+
+        /* g_markup_escape_text() absolutely requires valid UTF8 input, it
+         * might crash otherwise. We don't fall back on GST_SUBTITLE_ENCODING
+         * here on purpose, this is something that needs fixing upstream */
+        if (!g_utf8_validate (in_text, in_size, NULL)) {
+          const gchar *end = NULL;
+
+          GST_WARNING_OBJECT (overlay, "received invalid UTF-8");
+          in_text = g_strndup (in_text, in_size);
+          while (!g_utf8_validate (in_text, in_size, &end) && end)
+            *((gchar *) end) = '*';
+        }
+
+        /* Get the string */
+        if (overlay->have_pango_markup) {
+          text = g_strndup (in_text, in_size);
+        } else {
+          text = g_markup_escape_text (in_text, in_size);
+        }
+
+        if (text != NULL && *text != '\0') {
+          gint text_len = strlen (text);
+
+          while (text_len > 0 && (text[text_len - 1] == '\n' ||
+                  text[text_len - 1] == '\r')) {
+            --text_len;
+          }
+          GST_DEBUG_OBJECT (overlay, "Rendering text '%*s'", text_len, text);
+          gst_base_text_overlay_render_text (overlay, text, text_len);
+        } else {
+          GST_DEBUG_OBJECT (overlay, "No text to render (empty buffer)");
+          gst_base_text_overlay_render_text (overlay, " ", 1);
+        }
+        gst_buffer_unmap (overlay->text_buffer, otext, osize);
+
+        if (in_text != otext)
+          g_free (in_text);
+
+        GST_OBJECT_UNLOCK (overlay);
+        ret = gst_base_text_overlay_push_frame (overlay, buffer);
+
+        if (valid_text_time && text_running_time_end <= vid_running_time_end) {
+          GST_LOG_OBJECT (overlay, "text buffer not needed any longer");
+          pop_text = TRUE;
+        }
+      }
+      if (pop_text) {
+        GST_OBJECT_LOCK (overlay);
+        gst_base_text_overlay_pop_text (overlay);
+        GST_OBJECT_UNLOCK (overlay);
+      }
+    } else {
+      gboolean wait_for_text_buf = TRUE;
+
+      if (overlay->text_eos)
+        wait_for_text_buf = FALSE;
+
+      if (!overlay->wait_text)
+        wait_for_text_buf = FALSE;
+
+      /* Text pad linked, but no text buffer available - what now? */
+      if (overlay->text_segment.format == GST_FORMAT_TIME) {
+        GstClockTime text_start_running_time, text_position_running_time;
+        GstClockTime vid_running_time;
+
+        vid_running_time =
+            gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME,
+            GST_BUFFER_TIMESTAMP (buffer));
+        text_start_running_time =
+            gst_segment_to_running_time (&overlay->text_segment,
+            GST_FORMAT_TIME, overlay->text_segment.start);
+        text_position_running_time =
+            gst_segment_to_running_time (&overlay->text_segment,
+            GST_FORMAT_TIME, overlay->text_segment.position);
+
+        if ((GST_CLOCK_TIME_IS_VALID (text_start_running_time) &&
+                vid_running_time < text_start_running_time) ||
+            (GST_CLOCK_TIME_IS_VALID (text_position_running_time) &&
+                vid_running_time < text_position_running_time)) {
+          wait_for_text_buf = FALSE;
+        }
+      }
+
+      if (wait_for_text_buf) {
+        GST_DEBUG_OBJECT (overlay, "no text buffer, need to wait for one");
+        GST_BASE_TEXT_OVERLAY_WAIT (overlay);
+        GST_DEBUG_OBJECT (overlay, "resuming");
+        GST_OBJECT_UNLOCK (overlay);
+        goto wait_for_text_buf;
+      } else {
+        GST_OBJECT_UNLOCK (overlay);
+        GST_LOG_OBJECT (overlay, "no need to wait for a text buffer");
+        ret = gst_pad_push (overlay->srcpad, buffer);
+      }
+    }
+  }
+
+  g_free (text);
+
+  /* Update position */
+  overlay->segment.position = clip_start;
+
+  return ret;
+
+missing_timestamp:
+  {
+    GST_WARNING_OBJECT (overlay, "buffer without timestamp, discarding");
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  }
+
+flushing:
+  {
+    GST_OBJECT_UNLOCK (overlay);
+    GST_DEBUG_OBJECT (overlay, "flushing, discarding buffer");
+    gst_buffer_unref (buffer);
+    return GST_FLOW_WRONG_STATE;
+  }
+have_eos:
+  {
+    GST_OBJECT_UNLOCK (overlay);
+    GST_DEBUG_OBJECT (overlay, "eos, discarding buffer");
+    gst_buffer_unref (buffer);
+    return GST_FLOW_UNEXPECTED;
+  }
+out_of_segment:
+  {
+    GST_DEBUG_OBJECT (overlay, "buffer out of segment, discarding");
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  }
+}
+
+static GstStateChangeReturn
+gst_base_text_overlay_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_OBJECT_LOCK (overlay);
+      overlay->text_flushing = TRUE;
+      overlay->video_flushing = TRUE;
+      /* pop_text will broadcast on the GCond and thus also make the video
+       * chain exit if it's waiting for a text buffer */
+      gst_base_text_overlay_pop_text (overlay);
+      GST_OBJECT_UNLOCK (overlay);
+      break;
+    default:
+      break;
+  }
+
+  ret = parent_class->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_OBJECT_LOCK (overlay);
+      overlay->text_flushing = FALSE;
+      overlay->video_flushing = FALSE;
+      overlay->video_eos = FALSE;
+      overlay->text_eos = FALSE;
+      gst_segment_init (&overlay->segment, GST_FORMAT_TIME);
+      gst_segment_init (&overlay->text_segment, GST_FORMAT_TIME);
+      GST_OBJECT_UNLOCK (overlay);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_controller_init (NULL, NULL);
+
+  if (!gst_element_register (plugin, "textoverlay", GST_RANK_NONE,
+          GST_TYPE_TEXT_OVERLAY) ||
+      !gst_element_register (plugin, "timeoverlay", GST_RANK_NONE,
+          GST_TYPE_TIME_OVERLAY) ||
+      !gst_element_register (plugin, "clockoverlay", GST_RANK_NONE,
+          GST_TYPE_CLOCK_OVERLAY) ||
+      !gst_element_register (plugin, "textrender", GST_RANK_NONE,
+          GST_TYPE_TEXT_RENDER)) {
+    return FALSE;
+  }
+
+  /*texttestsrc_plugin_init(module, plugin); */
+
+  GST_DEBUG_CATEGORY_INIT (pango_debug, "pango", 0, "Pango elements");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR,
+    "pango", "Pango-based text rendering and overlay", plugin_init,
+    VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/pango/gstbasetextoverlay.h b/ext/pango/gstbasetextoverlay.h
new file mode 100644
index 0000000..b7db8de
--- /dev/null
+++ b/ext/pango/gstbasetextoverlay.h
@@ -0,0 +1,170 @@
+#ifndef __GST_BASE_TEXT_OVERLAY_H__
+#define __GST_BASE_TEXT_OVERLAY_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/controller/gstcontroller.h>
+#include <pango/pangocairo.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_BASE_TEXT_OVERLAY            (gst_base_text_overlay_get_type())
+#define GST_BASE_TEXT_OVERLAY(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),\
+                                         GST_TYPE_BASE_TEXT_OVERLAY, GstBaseTextOverlay))
+#define GST_BASE_TEXT_OVERLAY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),\
+                                         GST_TYPE_BASE_TEXT_OVERLAY,GstBaseTextOverlayClass))
+#define GST_BASE_TEXT_OVERLAY_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),\
+                                         GST_TYPE_BASE_TEXT_OVERLAY, GstBaseTextOverlayClass))
+#define GST_IS_BASE_TEXT_OVERLAY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
+                                         GST_TYPE_BASE_TEXT_OVERLAY))
+#define GST_IS_BASE_TEXT_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
+                                         GST_TYPE_BASE_TEXT_OVERLAY))
+
+typedef struct _GstBaseTextOverlay      GstBaseTextOverlay;
+typedef struct _GstBaseTextOverlayClass GstBaseTextOverlayClass;
+
+/**
+ * GstBaseTextOverlayVAlign:
+ * @GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE: draw text on the baseline
+ * @GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM: draw text on the bottom
+ * @GST_BASE_TEXT_OVERLAY_VALIGN_TOP: draw text on top
+ * @GST_BASE_TEXT_OVERLAY_VALIGN_POS: draw text according to the #GstBaseTextOverlay:ypos property
+ * @GST_BASE_TEXT_OVERLAY_VALIGN_CENTER: draw text vertically centered
+ *
+ * Vertical alignment of the text.
+ */
+typedef enum {
+    GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE,
+    GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM,
+    GST_BASE_TEXT_OVERLAY_VALIGN_TOP,
+    GST_BASE_TEXT_OVERLAY_VALIGN_POS,
+    GST_BASE_TEXT_OVERLAY_VALIGN_CENTER
+} GstBaseTextOverlayVAlign;
+
+/**
+ * GstBaseTextOverlayHAlign:
+ * @GST_BASE_TEXT_OVERLAY_HALIGN_LEFT: align text left
+ * @GST_BASE_TEXT_OVERLAY_HALIGN_CENTER: align text center
+ * @GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT: align text right
+ * @GST_BASE_TEXT_OVERLAY_HALIGN_POS: position text according to the #GstBaseTextOverlay:xpos property
+ *
+ * Horizontal alignment of the text.
+ */
+/* FIXME 0.11: remove GST_BASE_TEXT_OVERLAY_HALIGN_UNUSED */
+typedef enum {
+    GST_BASE_TEXT_OVERLAY_HALIGN_LEFT,
+    GST_BASE_TEXT_OVERLAY_HALIGN_CENTER,
+    GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT,
+    GST_BASE_TEXT_OVERLAY_HALIGN_UNUSED,
+    GST_BASE_TEXT_OVERLAY_HALIGN_POS
+} GstBaseTextOverlayHAlign;
+
+/**
+ * GstBaseTextOverlayWrapMode:
+ * @GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE: no wrapping
+ * @GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD: do word wrapping
+ * @GST_BASE_TEXT_OVERLAY_WRAP_MODE_CHAR: do char wrapping
+ * @GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR: do word and char wrapping
+ *
+ * Whether to wrap the text and if so how.
+ */
+typedef enum {
+    GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE = -1,
+    GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD = PANGO_WRAP_WORD,
+    GST_BASE_TEXT_OVERLAY_WRAP_MODE_CHAR = PANGO_WRAP_CHAR,
+    GST_BASE_TEXT_OVERLAY_WRAP_MODE_WORD_CHAR = PANGO_WRAP_WORD_CHAR
+} GstBaseTextOverlayWrapMode;
+
+/**
+ * GstBaseTextOverlayLineAlign:
+ * @GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT: lines are left-aligned
+ * @GST_BASE_TEXT_OVERLAY_LINE_ALIGN_CENTER: lines are center-aligned
+ * @GST_BASE_TEXT_OVERLAY_LINE_ALIGN_RIGHT: lines are right-aligned
+ *
+ * Alignment of text lines relative to each other
+ */
+typedef enum {
+    GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT = PANGO_ALIGN_LEFT,
+    GST_BASE_TEXT_OVERLAY_LINE_ALIGN_CENTER = PANGO_ALIGN_CENTER,
+    GST_BASE_TEXT_OVERLAY_LINE_ALIGN_RIGHT = PANGO_ALIGN_RIGHT
+} GstBaseTextOverlayLineAlign;
+
+/**
+ * GstBaseTextOverlay:
+ *
+ * Opaque textoverlay object structure
+ */
+struct _GstBaseTextOverlay {
+    GstElement               element;
+
+    GstPad                  *video_sinkpad;
+    GstPad                  *text_sinkpad;
+    GstPad                  *srcpad;
+
+    GstSegment               segment;
+    GstSegment               text_segment;
+    GstBuffer               *text_buffer;
+    gboolean                text_linked;
+    gboolean                video_flushing;
+    gboolean                video_eos;
+    gboolean                text_flushing;
+    gboolean                text_eos;
+
+    GCond                   *cond;  /* to signal removal of a queued text
+                                     * buffer, arrival of a text buffer,
+                                     * a text segment update, or a change
+                                     * in status (e.g. shutdown, flushing) */
+
+    GstVideoInfo             info;
+    GstVideoFormat           format;
+    gint                     width;
+    gint                     height;
+
+    GstBaseTextOverlayVAlign     valign;
+    GstBaseTextOverlayHAlign     halign;
+    GstBaseTextOverlayWrapMode   wrap_mode;
+    GstBaseTextOverlayLineAlign  line_align;
+
+    gint                     xpad;
+    gint                     ypad;
+    gint                     deltax;
+    gint                     deltay;
+    gdouble                  xpos;
+    gdouble                  ypos;
+    gchar                   *default_text;
+    gboolean                 want_shading;
+    gboolean                 silent;
+    gboolean                 wait_text;
+    guint                    color, outline_color;
+
+    PangoLayout             *layout;
+    gdouble                  shadow_offset;
+    gdouble                  outline_offset;
+    guchar                  *text_image;
+    gint                     image_width;
+    gint                     image_height;
+    gint                     baseline_y;
+
+    gboolean                 auto_adjust_size;
+    gboolean                 need_render;
+
+    gint                     shading_value;  /* for timeoverlay subclass */
+
+    gboolean                 have_pango_markup;
+    gboolean                 use_vertical_render;
+};
+
+struct _GstBaseTextOverlayClass {
+    GstElementClass parent_class;
+
+    PangoContext *pango_context;
+    GMutex       *pango_lock;
+
+    gchar *     (*get_text) (GstBaseTextOverlay *overlay, GstBuffer *video_frame);
+};
+
+GType gst_base_text_overlay_get_type(void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __GST_BASE_TEXT_OVERLAY_H */
diff --git a/ext/pango/gstclockoverlay.c b/ext/pango/gstclockoverlay.c
new file mode 100644
index 0000000..4841274
--- /dev/null
+++ b/ext/pango/gstclockoverlay.c
@@ -0,0 +1,244 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-clockoverlay
+ * @see_also: #GstBaseTextOverlay, #GstTimeOverlay
+ *
+ * This element overlays the current clock time on top of a video
+ * stream. You can position the text and configure the font details
+ * using the properties of the #GstBaseTextOverlay class. By default, the
+ * time is displayed in the top left corner of the picture, with some
+ * padding to the left and to the top.
+ *
+ * <refsect2>
+ * <title>Example launch lines</title>
+ * |[
+ * gst-launch -v videotestsrc ! clockoverlay ! xvimagesink
+ * ]| Display the current time in the top left corner of the video picture
+ * |[
+ * gst-launch -v videotestsrc ! clockoverlay halign=right valign=bottom text="Edge City" shaded-background=true ! videoconvert ! ximagesink
+ * ]| Another pipeline that displays the current time with some leading
+ * text in the bottom right corner of the video picture, with the background
+ * of the text being shaded in order to make it more legible on top of a
+ * bright video background.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gstclockoverlay.h>
+#include <gst/video/video.h>
+#include <time.h>
+
+
+#define DEFAULT_PROP_TIMEFORMAT 	"%H:%M:%S"
+
+enum
+{
+  PROP_0,
+  PROP_TIMEFORMAT,
+  PROP_LAST
+};
+
+#define gst_clock_overlay_parent_class parent_class
+G_DEFINE_TYPE (GstClockOverlay, gst_clock_overlay, GST_TYPE_BASE_TEXT_OVERLAY);
+
+static void gst_clock_overlay_finalize (GObject * object);
+static void gst_clock_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_clock_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static gchar *
+gst_clock_overlay_render_time (GstClockOverlay * overlay)
+{
+  struct tm *t;
+  time_t now;
+  gchar buf[256];
+
+#ifdef HAVE_LOCALTIME_R
+  struct tm dummy;
+#endif
+
+  now = time (NULL);
+
+#ifdef HAVE_LOCALTIME_R
+  /* Need to call tzset explicitly when calling localtime_r for changes
+     to the timezone between calls to be visible.  */
+  tzset ();
+  t = localtime_r (&now, &dummy);
+#else
+  /* on win32 this apparently returns a per-thread struct which would be fine */
+  t = localtime (&now);
+#endif
+
+  if (t == NULL)
+    return g_strdup ("--:--:--");
+
+  if (strftime (buf, sizeof (buf), overlay->format, t) == 0)
+    return g_strdup ("");
+  return g_strdup (buf);
+}
+
+/* Called with lock held */
+static gchar *
+gst_clock_overlay_get_text (GstBaseTextOverlay * overlay,
+    GstBuffer * video_frame)
+{
+  gchar *time_str, *txt, *ret;
+  GstClockOverlay *clock_overlay = GST_CLOCK_OVERLAY (overlay);
+
+  txt = g_strdup (overlay->default_text);
+
+  time_str = gst_clock_overlay_render_time (clock_overlay);
+  if (txt != NULL && *txt != '\0') {
+    ret = g_strdup_printf ("%s %s", txt, time_str);
+  } else {
+    ret = time_str;
+    time_str = NULL;
+  }
+
+  if (g_strcmp0 (ret, clock_overlay->text)) {
+    overlay->need_render = TRUE;
+    g_free (clock_overlay->text);
+    clock_overlay->text = g_strdup (ret);
+  }
+
+  g_free (txt);
+  g_free (time_str);
+
+  return ret;
+}
+
+static void
+gst_clock_overlay_class_init (GstClockOverlayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseTextOverlayClass *gsttextoverlay_class;
+  PangoContext *context;
+  PangoFontDescription *font_description;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gsttextoverlay_class = (GstBaseTextOverlayClass *) klass;
+
+  gobject_class->finalize = gst_clock_overlay_finalize;
+  gobject_class->set_property = gst_clock_overlay_set_property;
+  gobject_class->get_property = gst_clock_overlay_get_property;
+
+  gst_element_class_set_details_simple (gstelement_class, "Clock overlay",
+      "Filter/Editor/Video",
+      "Overlays the current clock time on a video stream",
+      "Tim-Philipp Müller <tim@centricular.net>");
+
+  gsttextoverlay_class->get_text = gst_clock_overlay_get_text;
+
+  g_object_class_install_property (gobject_class, PROP_TIMEFORMAT,
+      g_param_spec_string ("time-format", "Date/Time Format",
+          "Format to use for time and date value, as in strftime.",
+          DEFAULT_PROP_TIMEFORMAT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_mutex_lock (gsttextoverlay_class->pango_lock);
+  context = gsttextoverlay_class->pango_context;
+
+  pango_context_set_language (context, pango_language_from_string ("en_US"));
+  pango_context_set_base_dir (context, PANGO_DIRECTION_LTR);
+
+  font_description = pango_font_description_new ();
+  pango_font_description_set_family_static (font_description, "Monospace");
+  pango_font_description_set_style (font_description, PANGO_STYLE_NORMAL);
+  pango_font_description_set_variant (font_description, PANGO_VARIANT_NORMAL);
+  pango_font_description_set_weight (font_description, PANGO_WEIGHT_NORMAL);
+  pango_font_description_set_stretch (font_description, PANGO_STRETCH_NORMAL);
+  pango_font_description_set_size (font_description, 18 * PANGO_SCALE);
+  pango_context_set_font_description (context, font_description);
+  pango_font_description_free (font_description);
+  g_mutex_unlock (gsttextoverlay_class->pango_lock);
+}
+
+
+static void
+gst_clock_overlay_finalize (GObject * object)
+{
+  GstClockOverlay *overlay = GST_CLOCK_OVERLAY (object);
+
+  g_free (overlay->format);
+  g_free (overlay->text);
+  overlay->format = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+static void
+gst_clock_overlay_init (GstClockOverlay * overlay)
+{
+  GstBaseTextOverlay *textoverlay;
+
+  textoverlay = GST_BASE_TEXT_OVERLAY (overlay);
+
+  textoverlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
+  textoverlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_LEFT;
+
+  overlay->format = g_strdup (DEFAULT_PROP_TIMEFORMAT);
+}
+
+
+static void
+gst_clock_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstClockOverlay *overlay = GST_CLOCK_OVERLAY (object);
+
+  GST_OBJECT_LOCK (overlay);
+  switch (prop_id) {
+    case PROP_TIMEFORMAT:
+      g_free (overlay->format);
+      overlay->format = g_value_dup_string (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (overlay);
+}
+
+
+static void
+gst_clock_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstClockOverlay *overlay = GST_CLOCK_OVERLAY (object);
+
+  GST_OBJECT_LOCK (overlay);
+  switch (prop_id) {
+    case PROP_TIMEFORMAT:
+      g_value_set_string (value, overlay->format);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (overlay);
+}
diff --git a/ext/pango/gstclockoverlay.h b/ext/pango/gstclockoverlay.h
new file mode 100644
index 0000000..09ca2d3
--- /dev/null
+++ b/ext/pango/gstclockoverlay.h
@@ -0,0 +1,81 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_CLOCK_OVERLAY_H__
+#define __GST_CLOCK_OVERLAY_H__
+
+#include "gstbasetextoverlay.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_CLOCK_OVERLAY \
+  (gst_clock_overlay_get_type())
+#define GST_CLOCK_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CLOCK_OVERLAY,GstClockOverlay))
+#define GST_CLOCK_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CLOCK_OVERLAY,GstClockOverlayClass))
+#define GST_IS_CLOCK_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CLOCK_OVERLAY))
+#define GST_IS_CLOCK_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CLOCK_OVERLAY))
+
+typedef struct _GstClockOverlay GstClockOverlay;
+typedef struct _GstClockOverlayClass GstClockOverlayClass;
+
+/**
+ * GstClockOverlay:
+ *
+ * Opaque clockoverlay data structure.
+ */
+struct _GstClockOverlay {
+  GstBaseTextOverlay textoverlay;
+  gchar         *format; /* as in strftime () */
+  gchar         *text;
+};
+
+struct _GstClockOverlayClass {
+  GstBaseTextOverlayClass parent_class;
+};
+
+GType gst_clock_overlay_get_type (void);
+
+
+/* This is a hack hat allows us to use nonliterals for strftime without
+ * triggering a warning from -Wformat-nonliteral. We need to allow this
+ * because we export the format string as a property of the element.
+ * For the inspiration of this and a discussion of why this is necessary,
+ * see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39438
+ */
+#ifdef __GNUC__
+#pragma GCC system_header
+static size_t my_strftime(char *s, size_t max, const char *format,
+                          const struct tm *tm)
+{
+  return strftime (s, max, format, tm);
+}
+#define strftime my_strftime
+#endif
+
+
+G_END_DECLS
+
+#endif /* __GST_CLOCK_OVERLAY_H__ */
+
diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c
new file mode 100644
index 0000000..9f8c7bf
--- /dev/null
+++ b/ext/pango/gsttextoverlay.c
@@ -0,0 +1,114 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ * Copyright (C) <2006> Julien Moutte <julien@moutte.net>
+ * Copyright (C) <2006> Zeeshan Ali <zeeshan.ali@nokia.com>
+ * Copyright (C) <2006-2008> Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) <2009> Young-Ho Cha <ganadist@gmail.com>
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-textoverlay
+ * @see_also: #GstTextRender, #GstTextOverlay, #GstTimeOverlay, #GstSubParse
+ *
+ * This plugin renders text on top of a video stream. This can be either
+ * static text or text from buffers received on the text sink pad, e.g.
+ * as produced by the subparse element. If the text sink pad is not linked,
+ * the text set via the "text" property will be rendered. If the text sink
+ * pad is linked, text will be rendered as it is received on that pad,
+ * honouring and matching the buffer timestamps of both input streams.
+ *
+ * The text can contain newline characters and text wrapping is enabled by
+ * default.
+ *
+ * <refsect2>
+ * <title>Example launch lines</title>
+ * |[
+ * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink
+ * ]| Here is a simple pipeline that displays a static text in the top left
+ * corner of the video picture
+ * |[
+ * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt.   videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink
+ * ]| Here is another pipeline that displays subtitles from an .srt subtitle
+ * file, centered at the bottom of the picture and with a rectangular shading
+ * around the text in the background:
+ * <para>
+ * If you do not have such a subtitle file, create one looking like this
+ * in a text editor:
+ * |[
+ * 1
+ * 00:00:03,000 --> 00:00:05,000
+ * Hello? (3-5s)
+ *
+ * 2
+ * 00:00:08,000 --> 00:00:13,000
+ * Yes, this is a subtitle. Don&apos;t
+ * you like it? (8-13s)
+ *
+ * 3
+ * 00:00:18,826 --> 00:01:02,886
+ * Uh? What are you talking about?
+ * I don&apos;t understand  (18-62s)
+ * ]|
+ * One can also feed arbitrary live text into the element:
+ * |[
+ * gst-launch fdsrc fd=0 ! text/plain ! txt. videotestsrc ! \
+ * textoverlay  name=txt shaded-background=yes font-desc="Serif 40" wait-text=false ! \
+ * xvimagesink
+ * ]| This shows new text as entered on the terminal (stdin). This is not suited
+ * for subtitles as the test overlay is not timed. Subtitles should use
+ * timestamped formats. For the above use case one can also read the text from
+ * the application as set the #GstTextOverlay:text property.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gsttextoverlay.h>
+
+static GstStaticPadTemplate text_sink_template_factory =
+    GST_STATIC_PAD_TEMPLATE ("text_sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("text/x-pango-markup; text/plain")
+    );
+
+G_DEFINE_TYPE (GstTextOverlay, gst_text_overlay, GST_TYPE_BASE_TEXT_OVERLAY);
+
+static void
+gst_text_overlay_class_init (GstTextOverlayClass * klass)
+{
+  GstElementClass *element_class = (GstElementClass *) klass;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&text_sink_template_factory));
+
+  gst_element_class_set_details_simple (element_class, "Text overlay",
+      "Filter/Editor/Video",
+      "Adds text strings on top of a video buffer",
+      "David Schleef <ds@schleef.org>, " "Zeeshan Ali <zeeshan.ali@nokia.com>");
+}
+
+static void
+gst_text_overlay_init (GstTextOverlay * overlay)
+{
+}
diff --git a/ext/pango/gsttextoverlay.h b/ext/pango/gsttextoverlay.h
new file mode 100644
index 0000000..c1dab86
--- /dev/null
+++ b/ext/pango/gsttextoverlay.h
@@ -0,0 +1,60 @@
+/* GStreamer
+ * Copyright (C) 2011 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TEXT_OVERLAY_H__
+#define __GST_TEXT_OVERLAY_H__
+
+#include "gstbasetextoverlay.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TEXT_OVERLAY \
+  (gst_text_overlay_get_type())
+#define GST_TEXT_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEXT_OVERLAY,GstTextOverlay))
+#define GST_TEXT_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEXT_OVERLAY,GstTextOverlayClass))
+#define GST_IS_TEXT_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TEXT_OVERLAY))
+#define GST_IS_TEXT_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TEXT_OVERLAY))
+
+typedef struct _GstTextOverlay GstTextOverlay;
+typedef struct _GstTextOverlayClass GstTextOverlayClass;
+
+/**
+ * GstTextOverlay:
+ *
+ * Opaque textoverlay data structure.
+ */
+struct _GstTextOverlay {
+  GstBaseTextOverlay parent;
+};
+
+struct _GstTextOverlayClass {
+  GstBaseTextOverlayClass parent_class;
+};
+
+GType gst_text_overlay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TEXT_OVERLAY_H__ */
+
diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c
new file mode 100644
index 0000000..a029acb
--- /dev/null
+++ b/ext/pango/gsttextrender.c
@@ -0,0 +1,709 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ * Copyright (C) <2009> Young-Ho Cha <ganadist@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+/**
+ * SECTION:element-textrender
+ * @see_also: #GstTextOverlay
+ *
+ * This plugin renders text received on the text sink pad to a video
+ * buffer (retaining the alpha channel), so it can later be overlayed
+ * on top of video streams using other elements.
+ *
+ * The text can contain newline characters. (FIXME: What about text 
+ * wrapping? It does not make sense in this context)
+ *
+ * <refsect2>
+ * <title>Example launch lines</title>
+ * |[
+ * gst-launch -v filesrc location=subtitles.srt ! subparse ! textrender ! xvimagesink
+ * ]|
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+#include "gsttextrender.h"
+#include <string.h>
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+# define CAIRO_ARGB_A 3
+# define CAIRO_ARGB_R 2
+# define CAIRO_ARGB_G 1
+# define CAIRO_ARGB_B 0
+#else
+# define CAIRO_ARGB_A 0
+# define CAIRO_ARGB_R 1
+# define CAIRO_ARGB_G 2
+# define CAIRO_ARGB_B 3
+#endif
+
+GST_DEBUG_CATEGORY_EXTERN (pango_debug);
+#define GST_CAT_DEFAULT pango_debug
+
+#define MINIMUM_OUTLINE_OFFSET 1.0
+
+#define DEFAULT_PROP_VALIGNMENT GST_TEXT_RENDER_VALIGN_BASELINE
+#define DEFAULT_PROP_HALIGNMENT GST_TEXT_RENDER_HALIGN_CENTER
+#define DEFAULT_PROP_LINE_ALIGNMENT GST_TEXT_RENDER_LINE_ALIGN_CENTER
+#define DEFAULT_PROP_XPAD       25
+#define DEFAULT_PROP_YPAD       25
+
+#define DEFAULT_RENDER_WIDTH 720
+#define DEFAULT_RENDER_HEIGHT 576
+
+enum
+{
+  PROP_0,
+  PROP_HALIGNMENT,
+  PROP_VALIGNMENT,
+  PROP_LINE_ALIGNMENT,
+  PROP_XPAD,
+  PROP_YPAD,
+  PROP_FONT_DESC
+};
+
+#define VIDEO_FORMATS "{ AYUV, ARGB } "
+
+static GstStaticPadTemplate src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (VIDEO_FORMATS))
+    );
+
+static GstStaticPadTemplate sink_template_factory =
+    GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("text/x-pango-markup; text/plain")
+    );
+
+#define GST_TYPE_TEXT_RENDER_VALIGN (gst_text_render_valign_get_type())
+static GType
+gst_text_render_valign_get_type (void)
+{
+  static GType text_render_valign_type = 0;
+  static const GEnumValue text_render_valign[] = {
+    {GST_TEXT_RENDER_VALIGN_BASELINE, "baseline", "baseline"},
+    {GST_TEXT_RENDER_VALIGN_BOTTOM, "bottom", "bottom"},
+    {GST_TEXT_RENDER_VALIGN_TOP, "top", "top"},
+    {0, NULL, NULL},
+  };
+
+  if (!text_render_valign_type) {
+    text_render_valign_type =
+        g_enum_register_static ("GstTextRenderVAlign", text_render_valign);
+  }
+  return text_render_valign_type;
+}
+
+#define GST_TYPE_TEXT_RENDER_HALIGN (gst_text_render_halign_get_type())
+static GType
+gst_text_render_halign_get_type (void)
+{
+  static GType text_render_halign_type = 0;
+  static const GEnumValue text_render_halign[] = {
+    {GST_TEXT_RENDER_HALIGN_LEFT, "left", "left"},
+    {GST_TEXT_RENDER_HALIGN_CENTER, "center", "center"},
+    {GST_TEXT_RENDER_HALIGN_RIGHT, "right", "right"},
+    {0, NULL, NULL},
+  };
+
+  if (!text_render_halign_type) {
+    text_render_halign_type =
+        g_enum_register_static ("GstTextRenderHAlign", text_render_halign);
+  }
+  return text_render_halign_type;
+}
+
+#define GST_TYPE_TEXT_RENDER_LINE_ALIGN (gst_text_render_line_align_get_type())
+static GType
+gst_text_render_line_align_get_type (void)
+{
+  static GType text_render_line_align_type = 0;
+  static const GEnumValue text_render_line_align[] = {
+    {GST_TEXT_RENDER_LINE_ALIGN_LEFT, "left", "left"},
+    {GST_TEXT_RENDER_LINE_ALIGN_CENTER, "center", "center"},
+    {GST_TEXT_RENDER_LINE_ALIGN_RIGHT, "right", "right"},
+    {0, NULL, NULL}
+  };
+
+  if (!text_render_line_align_type) {
+    text_render_line_align_type =
+        g_enum_register_static ("GstTextRenderLineAlign",
+        text_render_line_align);
+  }
+  return text_render_line_align_type;
+}
+
+static void gst_text_render_adjust_values_with_fontdesc (GstTextRender *
+    render, PangoFontDescription * desc);
+
+#define gst_text_render_parent_class parent_class
+G_DEFINE_TYPE (GstTextRender, gst_text_render, GST_TYPE_ELEMENT);
+
+static void gst_text_render_finalize (GObject * object);
+static void gst_text_render_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_text_render_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static void
+gst_text_render_class_init (GstTextRenderClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  PangoFontMap *fontmap;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_text_render_finalize;
+  gobject_class->set_property = gst_text_render_set_property;
+  gobject_class->get_property = gst_text_render_get_property;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&src_template_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sink_template_factory));
+
+  gst_element_class_set_details_simple (gstelement_class, "Text renderer",
+      "Filter/Editor/Video",
+      "Renders a text string to an image bitmap",
+      "David Schleef <ds@schleef.org>, "
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  fontmap = pango_cairo_font_map_get_default ();
+  klass->pango_context =
+      pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FONT_DESC,
+      g_param_spec_string ("font-desc", "font description",
+          "Pango font description of font "
+          "to be used for rendering. "
+          "See documentation of "
+          "pango_font_description_from_string"
+          " for syntax.", "", G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VALIGNMENT,
+      g_param_spec_enum ("valignment", "vertical alignment",
+          "Vertical alignment of the text", GST_TYPE_TEXT_RENDER_VALIGN,
+          DEFAULT_PROP_VALIGNMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_HALIGNMENT,
+      g_param_spec_enum ("halignment", "horizontal alignment",
+          "Horizontal alignment of the text", GST_TYPE_TEXT_RENDER_HALIGN,
+          DEFAULT_PROP_HALIGNMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_XPAD,
+      g_param_spec_int ("xpad", "horizontal paddding",
+          "Horizontal paddding when using left/right alignment", 0, G_MAXINT,
+          DEFAULT_PROP_XPAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_YPAD,
+      g_param_spec_int ("ypad", "vertical padding",
+          "Vertical padding when using top/bottom alignment", 0, G_MAXINT,
+          DEFAULT_PROP_YPAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_LINE_ALIGNMENT,
+      g_param_spec_enum ("line-alignment", "line alignment",
+          "Alignment of text lines relative to each other.",
+          GST_TYPE_TEXT_RENDER_LINE_ALIGN, DEFAULT_PROP_LINE_ALIGNMENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_text_render_adjust_values_with_fontdesc (GstTextRender * render,
+    PangoFontDescription * desc)
+{
+  gint font_size = pango_font_description_get_size (desc) / PANGO_SCALE;
+
+  render->shadow_offset = (double) (font_size) / 13.0;
+  render->outline_offset = (double) (font_size) / 15.0;
+  if (render->outline_offset < MINIMUM_OUTLINE_OFFSET)
+    render->outline_offset = MINIMUM_OUTLINE_OFFSET;
+}
+
+static void
+gst_text_render_render_pangocairo (GstTextRender * render)
+{
+  cairo_t *cr;
+  cairo_surface_t *surface;
+  cairo_t *cr_shadow;
+  cairo_surface_t *surface_shadow;
+  PangoRectangle ink_rect, logical_rect;
+  gint width, height;
+
+  pango_layout_get_pixel_extents (render->layout, &ink_rect, &logical_rect);
+
+  width = logical_rect.width + render->shadow_offset;
+  height = logical_rect.height + logical_rect.y + render->shadow_offset;
+
+  surface_shadow = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
+  cr_shadow = cairo_create (surface_shadow);
+
+  /* clear shadow surface */
+  cairo_set_operator (cr_shadow, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (cr_shadow);
+  cairo_set_operator (cr_shadow, CAIRO_OPERATOR_OVER);
+
+  /* draw shadow text */
+  cairo_save (cr_shadow);
+  cairo_set_source_rgba (cr_shadow, 0.0, 0.0, 0.0, 0.5);
+  cairo_translate (cr_shadow, render->shadow_offset, render->shadow_offset);
+  pango_cairo_show_layout (cr_shadow, render->layout);
+  cairo_restore (cr_shadow);
+
+  /* draw outline text */
+  cairo_save (cr_shadow);
+  cairo_set_source_rgb (cr_shadow, 0.0, 0.0, 0.0);
+  cairo_set_line_width (cr_shadow, render->outline_offset);
+  pango_cairo_layout_path (cr_shadow, render->layout);
+  cairo_stroke (cr_shadow);
+  cairo_restore (cr_shadow);
+
+  cairo_destroy (cr_shadow);
+
+  render->text_image = g_realloc (render->text_image, 4 * width * height);
+
+  surface = cairo_image_surface_create_for_data (render->text_image,
+      CAIRO_FORMAT_ARGB32, width, height, width * 4);
+  cr = cairo_create (surface);
+  cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (cr);
+  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+
+  /* set default color */
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+
+  cairo_save (cr);
+  /* draw text */
+  pango_cairo_show_layout (cr, render->layout);
+  cairo_restore (cr);
+
+  /* composite shadow with offset */
+  cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
+  cairo_set_source_surface (cr, surface_shadow, 0.0, 0.0);
+  cairo_paint (cr);
+
+  cairo_destroy (cr);
+  cairo_surface_destroy (surface_shadow);
+  cairo_surface_destroy (surface);
+  render->image_width = width;
+  render->image_height = height;
+}
+
+static void
+gst_text_render_check_argb (GstTextRender * render)
+{
+  GstCaps *peer_caps;
+  peer_caps = gst_pad_get_allowed_caps (render->srcpad);
+  if (G_LIKELY (peer_caps)) {
+    guint i = 0, n = 0;
+
+    n = gst_caps_get_size (peer_caps);
+    GST_DEBUG_OBJECT (render, "peer allowed caps (%u structure(s)) are %"
+        GST_PTR_FORMAT, n, peer_caps);
+
+    /* Check if AYUV or ARGB is first */
+    for (i = 0; i < n; i++) {
+      GstStructure *s;
+      GstVideoFormat vformat;
+      const GstVideoFormatInfo *info;
+      const gchar *fmt;
+
+      s = gst_caps_get_structure (peer_caps, i);
+      if (!gst_structure_has_name (s, "video/x-raw"))
+        continue;
+
+      fmt = gst_structure_get_string (s, "format");
+      if (fmt == NULL)
+        continue;
+
+      vformat = gst_video_format_from_string (fmt);
+      info = gst_video_format_get_info (vformat);
+      if (info == NULL)
+        continue;
+
+      render->use_ARGB = GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info);
+    }
+    gst_caps_unref (peer_caps);
+  }
+}
+
+static gboolean
+gst_text_render_src_setcaps (GstTextRender * render, GstCaps * caps)
+{
+  GstStructure *structure;
+  gboolean ret;
+  gint width = 0, height = 0;
+
+  structure = gst_caps_get_structure (caps, 0);
+  gst_structure_get_int (structure, "width", &width);
+  gst_structure_get_int (structure, "height", &height);
+
+  GST_DEBUG_OBJECT (render, "Got caps %" GST_PTR_FORMAT, caps);
+
+  if (width >= render->image_width && height >= render->image_height) {
+    render->width = width;
+    render->height = height;
+  }
+
+  gst_text_render_check_argb (render);
+
+  ret = gst_pad_push_event (render->srcpad, gst_event_new_caps (caps));
+
+  return ret;
+}
+
+static void
+gst_text_render_fixate_caps (GstPad * pad, GstCaps * caps)
+{
+  GstTextRender *render = GST_TEXT_RENDER (gst_pad_get_parent (pad));
+  GstStructure *s = gst_caps_get_structure (caps, 0);
+
+  GST_DEBUG ("Fixating caps %" GST_PTR_FORMAT, caps);
+  gst_structure_fixate_field_nearest_int (s, "width", MAX (render->image_width,
+          DEFAULT_RENDER_WIDTH));
+  gst_structure_fixate_field_nearest_int (s, "height",
+      MAX (render->image_height + render->ypad, DEFAULT_RENDER_HEIGHT));
+  GST_DEBUG ("Fixated to    %" GST_PTR_FORMAT, caps);
+
+  gst_object_unref (render);
+}
+
+#define CAIRO_UNPREMULTIPLY(a,r,g,b) G_STMT_START { \
+  b = (a > 0) ? MIN ((b * 255 + a / 2) / a, 255) : 0; \
+  g = (a > 0) ? MIN ((g * 255 + a / 2) / a, 255) : 0; \
+  r = (a > 0) ? MIN ((r * 255 + a / 2) / a, 255) : 0; \
+} G_STMT_END
+
+static void
+gst_text_renderer_image_to_ayuv (GstTextRender * render, guchar * pixbuf,
+    int xpos, int ypos, int stride)
+{
+  int y;                        /* text bitmap coordinates */
+  guchar *p, *bitp;
+  guchar a, r, g, b;
+  int width, height;
+
+  width = render->image_width;
+  height = render->image_height;
+
+  for (y = 0; y < height && ypos + y < render->height; y++) {
+    int n;
+    p = pixbuf + (ypos + y) * stride + xpos * 4;
+    bitp = render->text_image + y * width * 4;
+    for (n = 0; n < width && n < render->width; n++) {
+      b = bitp[CAIRO_ARGB_B];
+      g = bitp[CAIRO_ARGB_G];
+      r = bitp[CAIRO_ARGB_R];
+      a = bitp[CAIRO_ARGB_A];
+      bitp += 4;
+
+      /* Cairo uses pre-multiplied ARGB, unpremultiply it */
+      CAIRO_UNPREMULTIPLY (a, r, g, b);
+
+      *p++ = a;
+      *p++ = CLAMP ((int) (((19595 * r) >> 16) + ((38470 * g) >> 16) +
+              ((7471 * b) >> 16)), 0, 255);
+      *p++ = CLAMP ((int) (-((11059 * r) >> 16) - ((21709 * g) >> 16) +
+              ((32768 * b) >> 16) + 128), 0, 255);
+      *p++ = CLAMP ((int) (((32768 * r) >> 16) - ((27439 * g) >> 16) -
+              ((5329 * b) >> 16) + 128), 0, 255);
+    }
+  }
+}
+
+static void
+gst_text_renderer_image_to_argb (GstTextRender * render, guchar * pixbuf,
+    int xpos, int ypos, int stride)
+{
+  int i, j;
+  guchar *p, *bitp;
+  int width, height;
+
+  width = render->image_width;
+  height = render->image_height;
+
+  for (i = 0; i < height && ypos + i < render->height; i++) {
+    p = pixbuf + (ypos + i) * stride + xpos * 4;
+    bitp = render->text_image + i * width * 4;
+    for (j = 0; j < width && j < render->width; j++) {
+      p[0] = bitp[CAIRO_ARGB_A];
+      p[1] = bitp[CAIRO_ARGB_R];
+      p[2] = bitp[CAIRO_ARGB_G];
+      p[3] = bitp[CAIRO_ARGB_B];
+
+      /* Cairo uses pre-multiplied ARGB, unpremultiply it */
+      CAIRO_UNPREMULTIPLY (p[0], p[1], p[2], p[3]);
+
+      bitp += 4;
+      p += 4;
+    }
+  }
+}
+
+static GstFlowReturn
+gst_text_render_chain (GstPad * pad, GstBuffer * inbuf)
+{
+  GstTextRender *render;
+  GstFlowReturn ret;
+  GstBuffer *outbuf;
+  GstCaps *caps = NULL, *padcaps;
+  guint8 *data;
+  gsize size;
+  gint n;
+  gint xpos, ypos;
+
+  render = GST_TEXT_RENDER (gst_pad_get_parent (pad));
+
+  data = gst_buffer_map (inbuf, &size, NULL, GST_MAP_READ);
+
+  /* somehow pango barfs over "\0" buffers... */
+  while (size > 0 &&
+      (data[size - 1] == '\r' ||
+          data[size - 1] == '\n' || data[size - 1] == '\0')) {
+    size--;
+  }
+
+  /* render text */
+  GST_DEBUG ("rendering '%*s'", (gint) size, data);
+  pango_layout_set_markup (render->layout, (gchar *) data, size);
+  gst_text_render_render_pangocairo (render);
+  gst_buffer_unmap (inbuf, data, size);
+
+  gst_text_render_check_argb (render);
+
+  padcaps = gst_pad_get_caps (render->srcpad, NULL);
+  caps = gst_pad_peer_get_caps (render->srcpad, padcaps);
+  gst_caps_unref (padcaps);
+
+  if (!caps || gst_caps_is_empty (caps)) {
+    GST_ELEMENT_ERROR (render, CORE, NEGOTIATION, (NULL), (NULL));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+
+  gst_caps_truncate (caps);
+  gst_pad_fixate_caps (render->srcpad, caps);
+
+  if (!gst_text_render_src_setcaps (render, caps)) {
+    GST_ELEMENT_ERROR (render, CORE, NEGOTIATION, (NULL), (NULL));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+
+  GST_DEBUG ("Allocating buffer WxH = %dx%d", render->width, render->height);
+  outbuf = gst_buffer_new_and_alloc (render->width * render->height * 4);
+
+  gst_buffer_copy_into (outbuf, inbuf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+  data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE);
+
+  if (render->use_ARGB) {
+    memset (data, 0, render->width * render->height * 4);
+  } else {
+    for (n = 0; n < render->width * render->height; n++) {
+      data[n * 4] = data[n * 4 + 1] = 0;
+      data[n * 4 + 2] = data[n * 4 + 3] = 128;
+    }
+  }
+
+  switch (render->halign) {
+    case GST_TEXT_RENDER_HALIGN_LEFT:
+      xpos = render->xpad;
+      break;
+    case GST_TEXT_RENDER_HALIGN_CENTER:
+      xpos = (render->width - render->image_width) / 2;
+      break;
+    case GST_TEXT_RENDER_HALIGN_RIGHT:
+      xpos = render->width - render->image_width - render->xpad;
+      break;
+    default:
+      xpos = 0;
+  }
+
+  switch (render->valign) {
+    case GST_TEXT_RENDER_VALIGN_BOTTOM:
+      ypos = render->height - render->image_height - render->ypad;
+      break;
+    case GST_TEXT_RENDER_VALIGN_BASELINE:
+      ypos = render->height - (render->image_height + render->ypad);
+      break;
+    case GST_TEXT_RENDER_VALIGN_TOP:
+      ypos = render->ypad;
+      break;
+    default:
+      ypos = render->ypad;
+      break;
+  }
+
+  if (render->text_image) {
+    if (render->use_ARGB) {
+      gst_text_renderer_image_to_argb (render, data, xpos, ypos,
+          render->width * 4);
+    } else {
+      gst_text_renderer_image_to_ayuv (render, data, xpos, ypos,
+          render->width * 4);
+    }
+  }
+  gst_buffer_unmap (outbuf, data, size);
+
+  ret = gst_pad_push (render->srcpad, outbuf);
+
+done:
+  if (caps)
+    gst_caps_unref (caps);
+  gst_buffer_unref (inbuf);
+  gst_object_unref (render);
+  return ret;
+}
+
+static void
+gst_text_render_finalize (GObject * object)
+{
+  GstTextRender *render = GST_TEXT_RENDER (object);
+
+  g_free (render->text_image);
+
+  if (render->layout)
+    g_object_unref (render->layout);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_text_render_init (GstTextRender * render)
+{
+  GstPadTemplate *template;
+
+  /* sink */
+  template = gst_static_pad_template_get (&sink_template_factory);
+  render->sinkpad = gst_pad_new_from_template (template, "sink");
+  gst_object_unref (template);
+  gst_pad_set_chain_function (render->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_text_render_chain));
+  gst_element_add_pad (GST_ELEMENT (render), render->sinkpad);
+
+  /* source */
+  template = gst_static_pad_template_get (&src_template_factory);
+  render->srcpad = gst_pad_new_from_template (template, "src");
+  gst_object_unref (template);
+  gst_pad_set_fixatecaps_function (render->srcpad,
+      GST_DEBUG_FUNCPTR (gst_text_render_fixate_caps));
+
+  gst_element_add_pad (GST_ELEMENT (render), render->srcpad);
+
+  render->line_align = DEFAULT_PROP_LINE_ALIGNMENT;
+  render->layout =
+      pango_layout_new (GST_TEXT_RENDER_GET_CLASS (render)->pango_context);
+  pango_layout_set_alignment (render->layout,
+      (PangoAlignment) render->line_align);
+
+  render->halign = DEFAULT_PROP_HALIGNMENT;
+  render->valign = DEFAULT_PROP_VALIGNMENT;
+  render->xpad = DEFAULT_PROP_XPAD;
+  render->ypad = DEFAULT_PROP_YPAD;
+
+  render->width = DEFAULT_RENDER_WIDTH;
+  render->height = DEFAULT_RENDER_HEIGHT;
+
+  render->use_ARGB = FALSE;
+}
+
+static void
+gst_text_render_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTextRender *render = GST_TEXT_RENDER (object);
+
+  switch (prop_id) {
+    case PROP_VALIGNMENT:
+      render->valign = g_value_get_enum (value);
+      break;
+    case PROP_HALIGNMENT:
+      render->halign = g_value_get_enum (value);
+      break;
+    case PROP_LINE_ALIGNMENT:
+      render->line_align = g_value_get_enum (value);
+      pango_layout_set_alignment (render->layout,
+          (PangoAlignment) render->line_align);
+      break;
+    case PROP_XPAD:
+      render->xpad = g_value_get_int (value);
+      break;
+    case PROP_YPAD:
+      render->ypad = g_value_get_int (value);
+      break;
+    case PROP_FONT_DESC:
+    {
+      PangoFontDescription *desc;
+
+      desc = pango_font_description_from_string (g_value_get_string (value));
+      if (desc) {
+        GST_LOG ("font description set: %s", g_value_get_string (value));
+        GST_OBJECT_LOCK (render);
+        pango_layout_set_font_description (render->layout, desc);
+        gst_text_render_adjust_values_with_fontdesc (render, desc);
+        pango_font_description_free (desc);
+        gst_text_render_render_pangocairo (render);
+        GST_OBJECT_UNLOCK (render);
+      } else {
+        GST_WARNING ("font description parse failed: %s",
+            g_value_get_string (value));
+      }
+      break;
+    }
+
+    default:
+      break;
+  }
+}
+
+static void
+gst_text_render_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTextRender *render = GST_TEXT_RENDER (object);
+
+  switch (prop_id) {
+    case PROP_VALIGNMENT:
+      g_value_set_enum (value, render->valign);
+      break;
+    case PROP_HALIGNMENT:
+      g_value_set_enum (value, render->halign);
+      break;
+    case PROP_LINE_ALIGNMENT:
+      g_value_set_enum (value, render->line_align);
+      break;
+    case PROP_XPAD:
+      g_value_set_int (value, render->xpad);
+      break;
+    case PROP_YPAD:
+      g_value_set_int (value, render->ypad);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/ext/pango/gsttextrender.h b/ext/pango/gsttextrender.h
new file mode 100644
index 0000000..66d37db
--- /dev/null
+++ b/ext/pango/gsttextrender.h
@@ -0,0 +1,104 @@
+#ifndef __GST_TEXT_RENDER_H__
+#define __GST_TEXT_RENDER_H__
+
+#include <gst/gst.h>
+#include <pango/pangocairo.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TEXT_RENDER            (gst_text_render_get_type())
+#define GST_TEXT_RENDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),\
+                                        GST_TYPE_TEXT_RENDER, GstTextRender))
+#define GST_TEXT_RENDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),\
+                                        GST_TYPE_TEXT_RENDER, GstTextRenderClass))
+#define GST_TEXT_RENDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),\
+                                        GST_TYPE_TEXT_RENDER, GstTextRenderClass))
+#define GST_IS_TEXT_RENDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),\
+                                        GST_TYPE_TEXT_RENDER))
+#define GST_IS_TEXT_RENDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),\
+                                        GST_TYPE_TEXT_RENDER))
+
+typedef struct _GstTextRender      GstTextRender;
+typedef struct _GstTextRenderClass GstTextRenderClass;
+
+/**
+ * GstTextRenderVAlign:
+ * @GST_TEXT_RENDER_VALIGN_BASELINE: draw text on the baseline
+ * @GST_TEXT_RENDER_VALIGN_BOTTOM: draw text on the bottom
+ * @GST_TEXT_RENDER_VALIGN_TOP: draw test on top
+ *
+ * Vertical alignment of the text.
+ */
+typedef enum {
+    GST_TEXT_RENDER_VALIGN_BASELINE,
+    GST_TEXT_RENDER_VALIGN_BOTTOM,
+    GST_TEXT_RENDER_VALIGN_TOP
+} GstTextRenderVAlign;
+
+/**
+ * GstTextRenderHAlign:
+ * @GST_TEXT_RENDER_HALIGN_LEFT: align text left
+ * @GST_TEXT_RENDER_HALIGN_CENTER: align text center
+ * @GST_TEXT_RENDER_HALIGN_RIGHT: align text right
+ *
+ * Horizontal alignment of the text.
+ */
+typedef enum {
+    GST_TEXT_RENDER_HALIGN_LEFT,
+    GST_TEXT_RENDER_HALIGN_CENTER,
+    GST_TEXT_RENDER_HALIGN_RIGHT
+} GstTextRenderHAlign;
+
+/**
+ * GstTextRenderLineAlign:
+ * @GST_TEXT_RENDER_LINE_ALIGN_LEFT: lines are left-aligned
+ * @GST_TEXT_RENDER_LINE_ALIGN_CENTER: lines are center-aligned
+ * @GST_TEXT_RENDER_LINE_ALIGN_RIGHT: lines are right-aligned
+ *
+ * Alignment of text lines relative to each other
+ */
+typedef enum {
+    GST_TEXT_RENDER_LINE_ALIGN_LEFT = PANGO_ALIGN_LEFT,
+    GST_TEXT_RENDER_LINE_ALIGN_CENTER = PANGO_ALIGN_CENTER,
+    GST_TEXT_RENDER_LINE_ALIGN_RIGHT = PANGO_ALIGN_RIGHT
+} GstTextRenderLineAlign;
+
+/**
+ * GstTextRender:
+ *
+ * Opaque textrender data structure.
+ */
+struct _GstTextRender {
+    GstElement            element;
+
+    GstPad               *sinkpad, *srcpad;
+    gint                  width;
+    gint                  height;
+    PangoLayout          *layout;
+    gdouble               shadow_offset;
+    gdouble               outline_offset;
+    guchar               *text_image;
+    gint                  image_width;
+    gint                  image_height;
+    gint                  baseline_y;
+    gboolean              use_ARGB;
+
+    GstTextRenderVAlign     valign;
+    GstTextRenderHAlign     halign;
+    GstTextRenderLineAlign  line_align;
+
+    gint xpad;
+    gint ypad;
+};
+
+struct _GstTextRenderClass {
+    GstElementClass parent_class;
+
+    PangoContext *pango_context;
+};
+
+GType gst_text_render_get_type(void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __GST_TEXT_RENDER_H */
diff --git a/ext/pango/gsttimeoverlay.c b/ext/pango/gsttimeoverlay.c
new file mode 100644
index 0000000..3617361
--- /dev/null
+++ b/ext/pango/gsttimeoverlay.c
@@ -0,0 +1,150 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-timeoverlay
+ * @see_also: #GstBaseTextOverlay, #GstClockOverlay
+ *
+ * This element overlays the buffer time stamps of a video stream on
+ * top of itself. You can position the text and configure the font details
+ * using the properties of the #GstBaseTextOverlay class. By default, the
+ * time stamp is displayed in the top left corner of the picture, with some
+ * padding to the left and to the top.
+ *
+ * <refsect2>
+ * |[
+ * gst-launch -v videotestsrc ! timeoverlay ! xvimagesink
+ * ]| Display the time stamps in the top left
+ * corner of the video picture.
+ * |[
+ * gst-launch -v videotestsrc ! timeoverlay halign=right valign=bottom text="Stream time:" shaded-background=true ! xvimagesink
+ * ]| Another pipeline that displays the time stamps with some leading
+ * text in the bottom right corner of the video picture, with the background
+ * of the text being shaded in order to make it more legible on top of a
+ * bright video background.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/video/video.h>
+
+#include <gsttimeoverlay.h>
+
+#define gst_time_overlay_parent_class parent_class
+G_DEFINE_TYPE (GstTimeOverlay, gst_time_overlay, GST_TYPE_BASE_TEXT_OVERLAY);
+
+static gchar *
+gst_time_overlay_render_time (GstTimeOverlay * overlay, GstClockTime time)
+{
+  guint hours, mins, secs, msecs;
+
+  if (!GST_CLOCK_TIME_IS_VALID (time))
+    return g_strdup ("");
+
+  hours = (guint) (time / (GST_SECOND * 60 * 60));
+  mins = (guint) ((time / (GST_SECOND * 60)) % 60);
+  secs = (guint) ((time / GST_SECOND) % 60);
+  msecs = (guint) ((time % GST_SECOND) / (1000 * 1000));
+
+  return g_strdup_printf ("%u:%02u:%02u.%03u", hours, mins, secs, msecs);
+}
+
+/* Called with lock held */
+static gchar *
+gst_time_overlay_get_text (GstBaseTextOverlay * overlay,
+    GstBuffer * video_frame)
+{
+  GstClockTime time = GST_BUFFER_TIMESTAMP (video_frame);
+  gchar *time_str, *txt, *ret;
+
+  overlay->need_render = TRUE;
+
+  if (!GST_CLOCK_TIME_IS_VALID (time)) {
+    GST_DEBUG ("buffer without valid timestamp");
+    return g_strdup ("");
+  }
+
+  GST_DEBUG ("buffer with timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (time));
+
+  txt = g_strdup (overlay->default_text);
+
+  time_str = gst_time_overlay_render_time (GST_TIME_OVERLAY (overlay), time);
+  if (txt != NULL && *txt != '\0') {
+    ret = g_strdup_printf ("%s %s", txt, time_str);
+  } else {
+    ret = time_str;
+    time_str = NULL;
+  }
+
+  g_free (txt);
+  g_free (time_str);
+
+  return ret;
+}
+
+static void
+gst_time_overlay_class_init (GstTimeOverlayClass * klass)
+{
+  GstElementClass *gstelement_class;
+  GstBaseTextOverlayClass *gsttextoverlay_class;
+  PangoContext *context;
+  PangoFontDescription *font_description;
+
+  gsttextoverlay_class = (GstBaseTextOverlayClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gst_element_class_set_details_simple (gstelement_class, "Time overlay",
+      "Filter/Editor/Video",
+      "Overlays buffer time stamps on a video stream",
+      "Tim-Philipp Müller <tim@centricular.net>");
+
+  gsttextoverlay_class->get_text = gst_time_overlay_get_text;
+
+  g_mutex_lock (gsttextoverlay_class->pango_lock);
+  context = gsttextoverlay_class->pango_context;
+
+  pango_context_set_language (context, pango_language_from_string ("en_US"));
+  pango_context_set_base_dir (context, PANGO_DIRECTION_LTR);
+
+  font_description = pango_font_description_new ();
+  pango_font_description_set_family_static (font_description, "Monospace");
+  pango_font_description_set_style (font_description, PANGO_STYLE_NORMAL);
+  pango_font_description_set_variant (font_description, PANGO_VARIANT_NORMAL);
+  pango_font_description_set_weight (font_description, PANGO_WEIGHT_NORMAL);
+  pango_font_description_set_stretch (font_description, PANGO_STRETCH_NORMAL);
+  pango_font_description_set_size (font_description, 18 * PANGO_SCALE);
+  pango_context_set_font_description (context, font_description);
+  pango_font_description_free (font_description);
+  g_mutex_unlock (gsttextoverlay_class->pango_lock);
+}
+
+static void
+gst_time_overlay_init (GstTimeOverlay * overlay)
+{
+  GstBaseTextOverlay *textoverlay;
+
+  textoverlay = GST_BASE_TEXT_OVERLAY (overlay);
+
+  textoverlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
+  textoverlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_LEFT;
+}
diff --git a/ext/pango/gsttimeoverlay.h b/ext/pango/gsttimeoverlay.h
new file mode 100644
index 0000000..dbce8ff
--- /dev/null
+++ b/ext/pango/gsttimeoverlay.h
@@ -0,0 +1,61 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TIME_OVERLAY_H__
+#define __GST_TIME_OVERLAY_H__
+
+#include "gstbasetextoverlay.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TIME_OVERLAY \
+  (gst_time_overlay_get_type())
+#define GST_TIME_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TIME_OVERLAY,GstTimeOverlay))
+#define GST_TIME_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TIME_OVERLAY,GstTimeOverlayClass))
+#define GST_IS_TIME_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIME_OVERLAY))
+#define GST_IS_TIME_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TIME_OVERLAY))
+
+typedef struct _GstTimeOverlay GstTimeOverlay;
+typedef struct _GstTimeOverlayClass GstTimeOverlayClass;
+
+/**
+ * GstTimeOverlay:
+ *
+ * Opaque timeoverlay data structure.
+ */
+struct _GstTimeOverlay {
+  GstBaseTextOverlay textoverlay;
+};
+
+struct _GstTimeOverlayClass {
+  GstBaseTextOverlayClass parent_class;
+};
+
+GType gst_time_overlay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TIME_OVERLAY_H__ */
+
diff --git a/ext/theora/Makefile.am b/ext/theora/Makefile.am
new file mode 100644
index 0000000..c4a5eec
--- /dev/null
+++ b/ext/theora/Makefile.am
@@ -0,0 +1,21 @@
+plugin_LTLIBRARIES = libgsttheora.la
+
+noinst_HEADERS = gsttheoraenc.h \
+		 gsttheoradec.h \
+		 gsttheoraparse.h
+
+libgsttheora_la_SOURCES = gsttheora.c \
+			  gsttheoraenc.c \
+			  gsttheoradec.c \
+			  gsttheoraparse.c
+
+libgsttheora_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(THEORA_CFLAGS)
+libgsttheora_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(THEORA_LIBS)
+libgsttheora_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttheora_la_LIBTOOLFLAGS = --tag=disable-static
+
diff --git a/ext/theora/Makefile.in b/ext/theora/Makefile.in
new file mode 100644
index 0000000..dc2e47d
--- /dev/null
+++ b/ext/theora/Makefile.in
@@ -0,0 +1,800 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ext/theora
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgsttheora_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgsttheora_la_OBJECTS = libgsttheora_la-gsttheora.lo \
+	libgsttheora_la-gsttheoraenc.lo \
+	libgsttheora_la-gsttheoradec.lo \
+	libgsttheora_la-gsttheoraparse.lo
+libgsttheora_la_OBJECTS = $(am_libgsttheora_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgsttheora_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgsttheora_la_CFLAGS) $(CFLAGS) \
+	$(libgsttheora_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgsttheora_la_SOURCES)
+DIST_SOURCES = $(libgsttheora_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgsttheora.la
+noinst_HEADERS = gsttheoraenc.h \
+		 gsttheoradec.h \
+		 gsttheoraparse.h
+
+libgsttheora_la_SOURCES = gsttheora.c \
+			  gsttheoraenc.c \
+			  gsttheoradec.c \
+			  gsttheoraparse.c
+
+libgsttheora_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(THEORA_CFLAGS)
+libgsttheora_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(THEORA_LIBS)
+
+libgsttheora_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttheora_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/theora/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/theora/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgsttheora.la: $(libgsttheora_la_OBJECTS) $(libgsttheora_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsttheora_la_LINK) -rpath $(plugindir) $(libgsttheora_la_OBJECTS) $(libgsttheora_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttheora_la-gsttheora.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttheora_la-gsttheoradec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttheora_la-gsttheoraenc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttheora_la-gsttheoraparse.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgsttheora_la-gsttheora.lo: gsttheora.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -MT libgsttheora_la-gsttheora.lo -MD -MP -MF $(DEPDIR)/libgsttheora_la-gsttheora.Tpo -c -o libgsttheora_la-gsttheora.lo `test -f 'gsttheora.c' || echo '$(srcdir)/'`gsttheora.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttheora_la-gsttheora.Tpo $(DEPDIR)/libgsttheora_la-gsttheora.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttheora.c' object='libgsttheora_la-gsttheora.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -c -o libgsttheora_la-gsttheora.lo `test -f 'gsttheora.c' || echo '$(srcdir)/'`gsttheora.c
+
+libgsttheora_la-gsttheoraenc.lo: gsttheoraenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -MT libgsttheora_la-gsttheoraenc.lo -MD -MP -MF $(DEPDIR)/libgsttheora_la-gsttheoraenc.Tpo -c -o libgsttheora_la-gsttheoraenc.lo `test -f 'gsttheoraenc.c' || echo '$(srcdir)/'`gsttheoraenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttheora_la-gsttheoraenc.Tpo $(DEPDIR)/libgsttheora_la-gsttheoraenc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttheoraenc.c' object='libgsttheora_la-gsttheoraenc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -c -o libgsttheora_la-gsttheoraenc.lo `test -f 'gsttheoraenc.c' || echo '$(srcdir)/'`gsttheoraenc.c
+
+libgsttheora_la-gsttheoradec.lo: gsttheoradec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -MT libgsttheora_la-gsttheoradec.lo -MD -MP -MF $(DEPDIR)/libgsttheora_la-gsttheoradec.Tpo -c -o libgsttheora_la-gsttheoradec.lo `test -f 'gsttheoradec.c' || echo '$(srcdir)/'`gsttheoradec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttheora_la-gsttheoradec.Tpo $(DEPDIR)/libgsttheora_la-gsttheoradec.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttheoradec.c' object='libgsttheora_la-gsttheoradec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -c -o libgsttheora_la-gsttheoradec.lo `test -f 'gsttheoradec.c' || echo '$(srcdir)/'`gsttheoradec.c
+
+libgsttheora_la-gsttheoraparse.lo: gsttheoraparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -MT libgsttheora_la-gsttheoraparse.lo -MD -MP -MF $(DEPDIR)/libgsttheora_la-gsttheoraparse.Tpo -c -o libgsttheora_la-gsttheoraparse.lo `test -f 'gsttheoraparse.c' || echo '$(srcdir)/'`gsttheoraparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttheora_la-gsttheoraparse.Tpo $(DEPDIR)/libgsttheora_la-gsttheoraparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttheoraparse.c' object='libgsttheora_la-gsttheoraparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttheora_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttheora_la_CFLAGS) $(CFLAGS) -c -o libgsttheora_la-gsttheoraparse.lo `test -f 'gsttheoraparse.c' || echo '$(srcdir)/'`gsttheoraparse.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/theora/gsttheora.c b/ext/theora/gsttheora.c
new file mode 100644
index 0000000..37f3211
--- /dev/null
+++ b/ext/theora/gsttheora.c
@@ -0,0 +1,52 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+extern GType gst_theora_dec_get_type (void);
+extern GType gst_theora_enc_get_type (void);
+extern GType gst_theora_parse_get_type (void);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "theoradec", GST_RANK_PRIMARY,
+          gst_theora_dec_get_type ()))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "theoraenc", GST_RANK_PRIMARY,
+          gst_theora_enc_get_type ()))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "theoraparse", GST_RANK_NONE,
+          gst_theora_parse_get_type ()))
+    return FALSE;
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "theora",
+    "Theora plugin library",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/theora/gsttheoradec.c b/ext/theora/gsttheoradec.c
new file mode 100644
index 0000000..a7418b8
--- /dev/null
+++ b/ext/theora/gsttheoradec.c
@@ -0,0 +1,1723 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-theoradec
+ * @see_also: theoraenc, oggdemux
+ *
+ * This element decodes theora streams into raw video
+ * <ulink url="http://www.theora.org/">Theora</ulink> is a royalty-free
+ * video codec maintained by the <ulink url="http://www.xiph.org/">Xiph.org
+ * Foundation</ulink>, based on the VP3 codec.
+ *
+ * <refsect2>
+ * <title>Example pipeline</title>
+ * |[
+ * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! xvimagesink
+ * ]| This example pipeline will decode an ogg stream and decodes the theora video. Refer to
+ * the theoraenc example to create the ogg file.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gsttheoradec.h"
+#include <gst/tag/tag.h>
+#include <gst/video/video.h>
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+#define GST_CAT_DEFAULT theoradec_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+#define THEORA_DEF_CROP         TRUE
+#define THEORA_DEF_TELEMETRY_MV 0
+#define THEORA_DEF_TELEMETRY_MBMODE 0
+#define THEORA_DEF_TELEMETRY_QI 0
+#define THEORA_DEF_TELEMETRY_BITS 0
+
+enum
+{
+  PROP_0,
+  PROP_CROP,
+  PROP_TELEMETRY_MV,
+  PROP_TELEMETRY_MBMODE,
+  PROP_TELEMETRY_QI,
+  PROP_TELEMETRY_BITS
+};
+
+static GstStaticPadTemplate theora_dec_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "format = (string) { I420, Y42B, Y444 }, "
+        "framerate = (fraction) [0/1, MAX], "
+        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]")
+    );
+
+static GstStaticPadTemplate theora_dec_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-theora")
+    );
+
+#define gst_theora_dec_parent_class parent_class
+G_DEFINE_TYPE (GstTheoraDec, gst_theora_dec, GST_TYPE_ELEMENT);
+
+static void theora_dec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void theora_dec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+
+static gboolean theora_dec_setcaps (GstTheoraDec * dec, GstCaps * caps);
+static gboolean theora_dec_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn theora_dec_chain (GstPad * pad, GstBuffer * buffer);
+static GstStateChangeReturn theora_dec_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean theora_dec_src_event (GstPad * pad, GstEvent * event);
+static gboolean theora_dec_src_query (GstPad * pad, GstQuery * query);
+static gboolean theora_dec_src_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value);
+
+#if 0
+static const GstFormat *theora_get_formats (GstPad * pad);
+#endif
+#if 0
+static const GstEventMask *theora_get_event_masks (GstPad * pad);
+#endif
+static const GstQueryType *theora_get_query_types (GstPad * pad);
+
+static gboolean
+gst_theora_dec_ctl_is_supported (int req)
+{
+  /* should return TH_EFAULT or TH_EINVAL if supported, and TH_EIMPL if not */
+  return (th_decode_ctl (NULL, req, NULL, 0) != TH_EIMPL);
+}
+
+static void
+gst_theora_dec_class_init (GstTheoraDecClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->set_property = theora_dec_set_property;
+  gobject_class->get_property = theora_dec_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_CROP,
+      g_param_spec_boolean ("crop", "Crop",
+          "Crop the image to the visible region", THEORA_DEF_CROP,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_MV)) {
+    g_object_class_install_property (gobject_class, PROP_TELEMETRY_MV,
+        g_param_spec_int ("visualize-motion-vectors",
+            "Visualize motion vectors",
+            "Show motion vector selection overlaid on image. "
+            "Value gives a mask for motion vector (MV) modes to show",
+            0, 0xffff, THEORA_DEF_TELEMETRY_MV,
+            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  }
+
+  if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_MBMODE)) {
+    g_object_class_install_property (gobject_class, PROP_TELEMETRY_MBMODE,
+        g_param_spec_int ("visualize-macroblock-modes",
+            "Visualize macroblock modes",
+            "Show macroblock mode selection overlaid on image. "
+            "Value gives a mask for macroblock (MB) modes to show",
+            0, 0xffff, THEORA_DEF_TELEMETRY_MBMODE,
+            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  }
+
+  if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_QI)) {
+    g_object_class_install_property (gobject_class, PROP_TELEMETRY_QI,
+        g_param_spec_int ("visualize-quantization-modes",
+            "Visualize adaptive quantization modes",
+            "Show adaptive quantization mode selection overlaid on image. "
+            "Value gives a mask for quantization (QI) modes to show",
+            0, 0xffff, THEORA_DEF_TELEMETRY_QI,
+            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  }
+
+  if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_BITS)) {
+    /* FIXME: make this a boolean instead? The value scales the bars so
+     * they're less wide. Default is to use full width, and anything else
+     * doesn't seem particularly useful, since the smaller bars just disappear
+     * then (they almost disappear for a value of 2 already). */
+    g_object_class_install_property (gobject_class, PROP_TELEMETRY_BITS,
+        g_param_spec_int ("visualize-bit-usage",
+            "Visualize bitstream usage breakdown",
+            "Sets the bitstream breakdown visualization mode. "
+            "Values influence the width of the bit usage bars to show",
+            0, 0xff, THEORA_DEF_TELEMETRY_BITS,
+            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  }
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_dec_src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_dec_sink_factory));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Theora video decoder", "Codec/Decoder/Video",
+      "decode raw theora streams to raw YUV video",
+      "Benjamin Otte <otte@gnome.org>, Wim Taymans <wim@fluendo.com>");
+
+  gstelement_class->change_state = theora_dec_change_state;
+
+  GST_DEBUG_CATEGORY_INIT (theoradec_debug, "theoradec", 0, "Theora decoder");
+}
+
+static void
+gst_theora_dec_init (GstTheoraDec * dec)
+{
+  dec->sinkpad =
+      gst_pad_new_from_static_template (&theora_dec_sink_factory, "sink");
+  gst_pad_set_event_function (dec->sinkpad, theora_dec_sink_event);
+  gst_pad_set_chain_function (dec->sinkpad, theora_dec_chain);
+  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
+
+  dec->srcpad =
+      gst_pad_new_from_static_template (&theora_dec_src_factory, "src");
+  gst_pad_set_event_function (dec->srcpad, theora_dec_src_event);
+  gst_pad_set_query_type_function (dec->srcpad, theora_get_query_types);
+  gst_pad_set_query_function (dec->srcpad, theora_dec_src_query);
+  gst_pad_use_fixed_caps (dec->srcpad);
+
+  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
+
+  dec->crop = THEORA_DEF_CROP;
+  dec->telemetry_mv = THEORA_DEF_TELEMETRY_MV;
+  dec->telemetry_mbmode = THEORA_DEF_TELEMETRY_MBMODE;
+  dec->telemetry_qi = THEORA_DEF_TELEMETRY_QI;
+  dec->telemetry_bits = THEORA_DEF_TELEMETRY_BITS;
+  dec->gather = NULL;
+  dec->decode = NULL;
+  dec->queued = NULL;
+  dec->pendingevents = NULL;
+}
+
+static void
+gst_theora_dec_reset (GstTheoraDec * dec)
+{
+  dec->need_keyframe = TRUE;
+  dec->last_timestamp = -1;
+  dec->discont = TRUE;
+  dec->frame_nr = -1;
+  dec->seqnum = gst_util_seqnum_next ();
+  dec->dropped = 0;
+  dec->processed = 0;
+  gst_segment_init (&dec->segment, GST_FORMAT_TIME);
+
+  GST_OBJECT_LOCK (dec);
+  dec->proportion = 1.0;
+  dec->earliest_time = -1;
+  GST_OBJECT_UNLOCK (dec);
+
+  g_list_foreach (dec->queued, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->queued);
+  dec->queued = NULL;
+  g_list_foreach (dec->gather, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->gather);
+  dec->gather = NULL;
+  g_list_foreach (dec->decode, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->decode);
+  dec->decode = NULL;
+  g_list_foreach (dec->pendingevents, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->pendingevents);
+  dec->pendingevents = NULL;
+
+  if (dec->tags) {
+    gst_tag_list_free (dec->tags);
+    dec->tags = NULL;
+  }
+}
+
+#if 0
+static const GstFormat *
+theora_get_formats (GstPad * pad)
+{
+  static GstFormat src_formats[] = {
+    GST_FORMAT_DEFAULT,         /* frames in this case */
+    GST_FORMAT_TIME,
+    GST_FORMAT_BYTES,
+    0
+  };
+  static GstFormat sink_formats[] = {
+    GST_FORMAT_DEFAULT,
+    GST_FORMAT_TIME,
+    0
+  };
+
+  return (GST_PAD_IS_SRC (pad) ? src_formats : sink_formats);
+}
+#endif
+
+#if 0
+static const GstEventMask *
+theora_get_event_masks (GstPad * pad)
+{
+  static const GstEventMask theora_src_event_masks[] = {
+    {GST_EVENT_SEEK, GST_SEEK_METHOD_SET | GST_SEEK_FLAG_FLUSH},
+    {0,}
+  };
+
+  return theora_src_event_masks;
+}
+#endif
+
+static const GstQueryType *
+theora_get_query_types (GstPad * pad)
+{
+  static const GstQueryType theora_src_query_types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    GST_QUERY_CONVERT,
+    0
+  };
+
+  return theora_src_query_types;
+}
+
+
+static gboolean
+theora_dec_src_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstTheoraDec *dec;
+  guint64 scale = 1;
+
+  if (src_format == *dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  /* we need the info part before we can done something */
+  if (!dec->have_header)
+    goto no_header;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          *dest_value = gst_util_uint64_scale_int (src_value, 8,
+              dec->info.pic_height * dec->info.pic_width * dec->output_bpp);
+          break;
+        case GST_FORMAT_TIME:
+          /* seems like a rather silly conversion, implement me if you like */
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          scale =
+              dec->output_bpp * (dec->info.pic_width * dec->info.pic_height) /
+              8;
+        case GST_FORMAT_DEFAULT:
+          *dest_value = scale * gst_util_uint64_scale (src_value,
+              dec->info.fps_numerator, dec->info.fps_denominator * GST_SECOND);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale (src_value,
+              GST_SECOND * dec->info.fps_denominator, dec->info.fps_numerator);
+          break;
+        case GST_FORMAT_BYTES:
+          *dest_value = gst_util_uint64_scale_int (src_value,
+              dec->output_bpp * dec->info.pic_width * dec->info.pic_height, 8);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+done:
+  gst_object_unref (dec);
+  return res;
+
+  /* ERRORS */
+no_header:
+  {
+    GST_DEBUG_OBJECT (dec, "no header yet, cannot convert");
+    res = FALSE;
+    goto done;
+  }
+}
+
+#if 0
+static gboolean
+theora_dec_sink_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstTheoraDec *dec;
+
+  if (src_format == *dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  /* we need the info part before we can done something */
+  if (!dec->have_header)
+    goto no_header;
+
+  switch (src_format) {
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = _theora_granule_start_time (dec, src_value);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+        {
+          guint rest;
+
+          /* framecount */
+          *dest_value = gst_util_uint64_scale (src_value,
+              dec->info.fps_numerator, GST_SECOND * dec->info.fps_denominator);
+
+          /* funny way of calculating granulepos in theora */
+          rest = *dest_value / dec->info.keyframe_granule_shift;
+          *dest_value -= rest;
+          *dest_value <<= dec->granule_shift;
+          *dest_value += rest;
+          break;
+        }
+        default:
+          res = FALSE;
+          break;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+done:
+  gst_object_unref (dec);
+  return res;
+
+  /* ERRORS */
+no_header:
+  {
+    GST_DEBUG_OBJECT (dec, "no header yet, cannot convert");
+    res = FALSE;
+    goto done;
+  }
+}
+#endif
+
+static gboolean
+theora_dec_src_query (GstPad * pad, GstQuery * query)
+{
+  GstTheoraDec *dec;
+
+  gboolean res = FALSE;
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      gint64 value;
+      GstFormat format;
+      gint64 time;
+
+      /* parse format */
+      gst_query_parse_position (query, &format, NULL);
+
+      time = dec->last_timestamp;
+      time = gst_segment_to_stream_time (&dec->segment, GST_FORMAT_TIME, time);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: our time: %" GST_TIME_FORMAT, query, GST_TIME_ARGS (time));
+
+      if (!(res =
+              theora_dec_src_convert (pad, GST_FORMAT_TIME, time, &format,
+                  &value)))
+        goto error;
+
+      gst_query_set_position (query, format, value);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: we return %" G_GINT64_FORMAT " (format %u)", query, value,
+          format);
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      /* forward to peer for total */
+      res = gst_pad_peer_query (dec->sinkpad, query);
+      if (!res)
+        goto error;
+
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              theora_dec_src_convert (pad, src_fmt, src_val, &dest_fmt,
+                  &dest_val)))
+        goto error;
+
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (dec, "query failed");
+    goto done;
+  }
+}
+
+static gboolean
+theora_dec_src_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = TRUE;
+  GstTheoraDec *dec;
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstFormat format, tformat;
+      gdouble rate;
+      GstEvent *real_seek;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
+      gint64 tcur, tstop;
+      guint32 seqnum;
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
+      seqnum = gst_event_get_seqnum (event);
+      gst_event_unref (event);
+
+      /* we have to ask our peer to seek to time here as we know
+       * nothing about how to generate a granulepos from the src
+       * formats or anything.
+       * 
+       * First bring the requested format to time 
+       */
+      tformat = GST_FORMAT_TIME;
+      if (!(res = theora_dec_src_convert (pad, format, cur, &tformat, &tcur)))
+        goto convert_error;
+      if (!(res = theora_dec_src_convert (pad, format, stop, &tformat, &tstop)))
+        goto convert_error;
+
+      /* then seek with time on the peer */
+      real_seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+          flags, cur_type, tcur, stop_type, tstop);
+      gst_event_set_seqnum (real_seek, seqnum);
+
+      res = gst_pad_push_event (dec->sinkpad, real_seek);
+      break;
+    }
+    case GST_EVENT_QOS:
+    {
+      gdouble proportion;
+      GstClockTimeDiff diff;
+      GstClockTime timestamp;
+
+      gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
+
+      /* we cannot randomly skip frame decoding since we don't have
+       * B frames. we can however use the timestamp and diff to not
+       * push late frames. This would at least save us the time to
+       * crop/memcpy the data. */
+      GST_OBJECT_LOCK (dec);
+      dec->proportion = proportion;
+      dec->earliest_time = timestamp + diff;
+      GST_OBJECT_UNLOCK (dec);
+
+      GST_DEBUG_OBJECT (dec, "got QoS %" GST_TIME_FORMAT ", %" G_GINT64_FORMAT,
+          GST_TIME_ARGS (timestamp), diff);
+
+      res = gst_pad_push_event (dec->sinkpad, event);
+      break;
+    }
+    default:
+      res = gst_pad_push_event (dec->sinkpad, event);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+convert_error:
+  {
+    GST_DEBUG_OBJECT (dec, "could not convert format");
+    goto done;
+  }
+}
+
+static gboolean
+theora_dec_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret = FALSE;
+  GstTheoraDec *dec;
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  GST_LOG_OBJECT (dec, "handling event");
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      gst_theora_dec_reset (dec);
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_EOS:
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      /* we need TIME format */
+      if (segment->format != GST_FORMAT_TIME)
+        goto newseg_wrong_format;
+
+      GST_DEBUG_OBJECT (dec, "segment: %" GST_SEGMENT_FORMAT, segment);
+
+      /* now configure the values */
+      gst_segment_copy_into (segment, &dec->segment);
+      dec->seqnum = gst_event_get_seqnum (event);
+
+      /* We don't forward this unless/until the decoder is initialised */
+      if (dec->have_header) {
+        ret = gst_pad_push_event (dec->srcpad, event);
+      } else {
+        dec->pendingevents = g_list_append (dec->pendingevents, event);
+        ret = TRUE;
+      }
+      break;
+    }
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = theora_dec_setcaps (dec, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_TAG:
+    {
+      if (dec->have_header)
+        /* and forward */
+        ret = gst_pad_push_event (dec->srcpad, event);
+      else {
+        /* store it to send once we're initialized */
+        dec->pendingevents = g_list_append (dec->pendingevents, event);
+        ret = TRUE;
+      }
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return ret;
+
+  /* ERRORS */
+newseg_wrong_format:
+  {
+    GST_DEBUG_OBJECT (dec, "received non TIME newsegment");
+    gst_event_unref (event);
+    goto done;
+  }
+}
+
+static gboolean
+theora_dec_setcaps (GstTheoraDec * dec, GstCaps * caps)
+{
+  GstStructure *s;
+  const GValue *codec_data;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  /* parse the par, this overrides the encoded par */
+  dec->have_par = gst_structure_get_fraction (s, "pixel-aspect-ratio",
+      &dec->par_num, &dec->par_den);
+
+  if ((codec_data = gst_structure_get_value (s, "codec_data"))) {
+    if (G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) {
+      GstBuffer *buffer;
+      guint8 *data, *ptr;
+      gsize size, left;
+      guint offset;
+
+      buffer = gst_value_get_buffer (codec_data);
+
+      offset = 0;
+      data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+      ptr = data;
+      left = size;
+
+      while (left > 2) {
+        guint psize;
+        GstBuffer *buf;
+
+        psize = (ptr[0] << 8) | ptr[1];
+        /* skip header */
+        ptr += 2;
+        left -= 2;
+        offset += 2;
+
+        /* make sure we don't read too much */
+        psize = MIN (psize, left);
+
+        buf =
+            gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offset, psize);
+
+        /* first buffer is a discont buffer */
+        if (offset == 2)
+          GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+
+        /* now feed it to the decoder we can ignore the error */
+        theora_dec_chain (dec->sinkpad, buf);
+
+        /* skip the data */
+        left -= psize;
+        ptr += psize;
+        offset += psize;
+      }
+      gst_buffer_unmap (buffer, data, size);
+    }
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+theora_handle_comment_packet (GstTheoraDec * dec, ogg_packet * packet)
+{
+  gchar *encoder = NULL;
+  GstTagList *list;
+
+  GST_DEBUG_OBJECT (dec, "parsing comment packet");
+
+  list =
+      gst_tag_list_from_vorbiscomment (packet->packet, packet->bytes,
+      (guint8 *) "\201theora", 7, &encoder);
+
+  if (!list) {
+    GST_ERROR_OBJECT (dec, "couldn't decode comments");
+    list = gst_tag_list_new ();
+  }
+  if (encoder) {
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+        GST_TAG_ENCODER, encoder, NULL);
+    g_free (encoder);
+  }
+  gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+      GST_TAG_ENCODER_VERSION, dec->info.version_major,
+      GST_TAG_VIDEO_CODEC, "Theora", NULL);
+
+  if (dec->info.target_bitrate > 0) {
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+        GST_TAG_BITRATE, dec->info.target_bitrate,
+        GST_TAG_NOMINAL_BITRATE, dec->info.target_bitrate, NULL);
+  }
+
+  dec->tags = list;
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+theora_negotiate_pool (GstTheoraDec * dec, GstCaps * caps, GstVideoInfo * info)
+{
+  GstQuery *query;
+  GstBufferPool *pool = NULL;
+  guint size, min, max, prefix, alignment;
+  GstStructure *config;
+
+  /* find a pool for the negotiated caps now */
+  query = gst_query_new_allocation (caps, TRUE);
+
+  if (gst_pad_peer_query (dec->srcpad, query)) {
+    GST_DEBUG_OBJECT (dec, "got downstream ALLOCATION hints");
+    /* we got configuration from our peer, parse them */
+    gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+        &alignment, &pool);
+    size = MAX (size, info->size);
+  } else {
+    GST_DEBUG_OBJECT (dec, "didn't get downstream ALLOCATION hints");
+    size = info->size;
+    min = max = 0;
+    prefix = 0;
+    alignment = 0;
+  }
+
+  if (pool == NULL) {
+    /* we did not get a pool, make one ourselves then */
+    pool = gst_buffer_pool_new ();
+  }
+
+  if (dec->pool)
+    gst_object_unref (dec->pool);
+  dec->pool = pool;
+
+  config = gst_buffer_pool_get_config (pool);
+  gst_buffer_pool_config_set (config, caps, size, min, max, prefix, alignment);
+  /* just set the option, if the pool can support it we will transparently use
+   * it through the video info API. We could also see if the pool support this
+   * option and only activate it then. */
+  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_META_VIDEO);
+
+  /* check if downstream supports cropping */
+  dec->use_cropping =
+      gst_query_has_allocation_meta (query, GST_META_API_VIDEO_CROP);
+
+  gst_buffer_pool_set_config (pool, config);
+  /* and activate */
+  gst_buffer_pool_set_active (pool, TRUE);
+
+  gst_query_unref (query);
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+theora_handle_type_packet (GstTheoraDec * dec, ogg_packet * packet)
+{
+  GstCaps *caps;
+  GstVideoFormat format;
+  gint width, height;
+  gint par_num, par_den;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GList *walk;
+
+  GST_DEBUG_OBJECT (dec, "fps %d/%d, PAR %d/%d",
+      dec->info.fps_numerator, dec->info.fps_denominator,
+      dec->info.aspect_numerator, dec->info.aspect_denominator);
+
+  /* calculate par
+   * the info.aspect_* values reflect PAR;
+   * 0:x and x:0 are allowed and can be interpreted as 1:1.
+   */
+  if (dec->have_par) {
+    /* we had a par on the sink caps, override the encoded par */
+    GST_DEBUG_OBJECT (dec, "overriding with input PAR");
+    par_num = dec->par_num;
+    par_den = dec->par_den;
+  } else {
+    /* take encoded par */
+    par_num = dec->info.aspect_numerator;
+    par_den = dec->info.aspect_denominator;
+  }
+  if (par_num == 0 || par_den == 0) {
+    par_num = par_den = 1;
+  }
+  /* theora has:
+   *
+   *  width/height : dimension of the encoded frame 
+   *  pic_width/pic_height : dimension of the visible part
+   *  pic_x/pic_y : offset in encoded frame where visible part starts
+   */
+  GST_DEBUG_OBJECT (dec, "dimension %dx%d, PAR %d/%d", dec->info.pic_width,
+      dec->info.pic_height, par_num, par_den);
+  GST_DEBUG_OBJECT (dec, "frame dimension %dx%d, offset %d:%d",
+      dec->info.pic_width, dec->info.pic_height,
+      dec->info.pic_x, dec->info.pic_y);
+
+  switch (dec->info.pixel_fmt) {
+    case TH_PF_444:
+      dec->output_bpp = 24;
+      format = GST_VIDEO_FORMAT_Y444;
+      break;
+    case TH_PF_420:
+      dec->output_bpp = 12;     /* Average bits per pixel. */
+      format = GST_VIDEO_FORMAT_I420;
+      break;
+    case TH_PF_422:
+      dec->output_bpp = 16;
+      format = GST_VIDEO_FORMAT_Y42B;
+      break;
+    default:
+      goto invalid_format;
+  }
+
+  if (dec->crop) {
+    width = dec->info.pic_width;
+    height = dec->info.pic_height;
+    dec->offset_x = dec->info.pic_x;
+    dec->offset_y = dec->info.pic_y;
+    /* Ensure correct offsets in chroma for formats that need it
+     * by rounding the offset. libtheora will add proper pixels,
+     * so no need to handle them ourselves. */
+    if (dec->offset_x & 1 && dec->info.pixel_fmt != TH_PF_444) {
+      dec->offset_x--;
+    }
+    if (dec->offset_y & 1 && dec->info.pixel_fmt == TH_PF_420) {
+      dec->offset_y--;
+    }
+  } else {
+    /* no cropping, use the encoded dimensions */
+    width = dec->info.frame_width;
+    height = dec->info.frame_height;
+    dec->offset_x = 0;
+    dec->offset_y = 0;
+  }
+
+  GST_DEBUG_OBJECT (dec, "after fixup frame dimension %dx%d, offset %d:%d",
+      width, height, dec->offset_x, dec->offset_y);
+
+  /* done */
+  dec->decoder = th_decode_alloc (&dec->info, dec->setup);
+
+  if (th_decode_ctl (dec->decoder, TH_DECCTL_SET_TELEMETRY_MV,
+          &dec->telemetry_mv, sizeof (dec->telemetry_mv)) != TH_EIMPL) {
+    GST_WARNING_OBJECT (dec, "Could not enable MV visualisation");
+  }
+  if (th_decode_ctl (dec->decoder, TH_DECCTL_SET_TELEMETRY_MBMODE,
+          &dec->telemetry_mbmode, sizeof (dec->telemetry_mbmode)) != TH_EIMPL) {
+    GST_WARNING_OBJECT (dec, "Could not enable MB mode visualisation");
+  }
+  if (th_decode_ctl (dec->decoder, TH_DECCTL_SET_TELEMETRY_QI,
+          &dec->telemetry_qi, sizeof (dec->telemetry_qi)) != TH_EIMPL) {
+    GST_WARNING_OBJECT (dec, "Could not enable QI mode visualisation");
+  }
+  if (th_decode_ctl (dec->decoder, TH_DECCTL_SET_TELEMETRY_BITS,
+          &dec->telemetry_bits, sizeof (dec->telemetry_bits)) != TH_EIMPL) {
+    GST_WARNING_OBJECT (dec, "Could not enable BITS mode visualisation");
+  }
+
+  gst_video_info_set_format (&dec->vinfo, format, width, height);
+  dec->vinfo.fps_n = dec->info.fps_numerator;
+  dec->vinfo.fps_d = dec->info.fps_denominator;
+  dec->vinfo.par_n = par_num;
+  dec->vinfo.par_d = par_den;
+
+  /* these values are for all versions of the colorspace specified in the
+   * theora info */
+  dec->vinfo.chroma_site = GST_VIDEO_CHROMA_SITE_JPEG;
+  dec->vinfo.colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
+  dec->vinfo.colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
+  dec->vinfo.colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+  switch (dec->info.colorspace) {
+    case TH_CS_ITU_REC_470M:
+      dec->vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
+      break;
+    case TH_CS_ITU_REC_470BG:
+      dec->vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
+      break;
+    default:
+      dec->vinfo.colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
+      break;
+  }
+
+  caps = gst_video_info_to_caps (&dec->vinfo);
+  gst_pad_set_caps (dec->srcpad, caps);
+  gst_caps_unref (caps);
+
+  /* negotiate a bufferpool */
+  if ((ret = theora_negotiate_pool (dec, caps, &dec->vinfo)) != GST_FLOW_OK)
+    goto no_bufferpool;
+
+  dec->have_header = TRUE;
+
+  if (dec->pendingevents) {
+    for (walk = dec->pendingevents; walk; walk = g_list_next (walk))
+      gst_pad_push_event (dec->srcpad, GST_EVENT_CAST (walk->data));
+    g_list_free (dec->pendingevents);
+    dec->pendingevents = NULL;
+  }
+
+  if (dec->tags) {
+    gst_element_found_tags_for_pad (GST_ELEMENT_CAST (dec), dec->srcpad,
+        dec->tags);
+    dec->tags = NULL;
+  }
+
+  return ret;
+
+  /* ERRORS */
+invalid_format:
+  {
+    GST_ERROR_OBJECT (dec, "Invalid pixel format %d", dec->info.pixel_fmt);
+    return GST_FLOW_ERROR;
+  }
+no_bufferpool:
+  {
+    return ret;
+  }
+}
+
+static GstFlowReturn
+theora_handle_header_packet (GstTheoraDec * dec, ogg_packet * packet)
+{
+  GstFlowReturn res;
+  int ret;
+
+  GST_DEBUG_OBJECT (dec, "parsing header packet");
+
+  ret = th_decode_headerin (&dec->info, &dec->comment, &dec->setup, packet);
+  if (ret < 0)
+    goto header_read_error;
+
+  switch (packet->packet[0]) {
+    case 0x81:
+      res = theora_handle_comment_packet (dec, packet);
+      break;
+    case 0x82:
+      res = theora_handle_type_packet (dec, packet);
+      break;
+    default:
+      /* ignore */
+      g_warning ("unknown theora header packet found");
+    case 0x80:
+      /* nothing special, this is the identification header */
+      res = GST_FLOW_OK;
+      break;
+  }
+  return res;
+
+  /* ERRORS */
+header_read_error:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE,
+        (NULL), ("couldn't read header packet"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* returns TRUE if buffer is within segment, else FALSE.
+ * if Buffer is on segment border, it's timestamp and duration will be clipped */
+static gboolean
+clip_buffer (GstTheoraDec * dec, GstBuffer * buf)
+{
+  gboolean res = TRUE;
+  GstClockTime in_ts, in_dur, stop;
+  guint64 cstart, cstop;
+
+  in_ts = GST_BUFFER_TIMESTAMP (buf);
+  in_dur = GST_BUFFER_DURATION (buf);
+
+  GST_LOG_OBJECT (dec,
+      "timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT,
+      GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur));
+
+  /* can't clip without TIME segment */
+  if (dec->segment.format != GST_FORMAT_TIME)
+    goto beach;
+
+  /* we need a start time */
+  if (!GST_CLOCK_TIME_IS_VALID (in_ts))
+    goto beach;
+
+  /* generate valid stop, if duration unknown, we have unknown stop */
+  stop =
+      GST_CLOCK_TIME_IS_VALID (in_dur) ? (in_ts + in_dur) : GST_CLOCK_TIME_NONE;
+
+  /* now clip */
+  if (!(res = gst_segment_clip (&dec->segment, GST_FORMAT_TIME,
+              in_ts, stop, &cstart, &cstop)))
+    goto beach;
+
+  /* update timestamp and possibly duration if the clipped stop time is
+   * valid */
+  GST_BUFFER_TIMESTAMP (buf) = cstart;
+  if (GST_CLOCK_TIME_IS_VALID (cstop))
+    GST_BUFFER_DURATION (buf) = cstop - cstart;
+
+beach:
+  GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : ""));
+  return res;
+}
+
+static GstFlowReturn
+theora_dec_push_forward (GstTheoraDec * dec, GstBuffer * buf)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+
+  if (clip_buffer (dec, buf)) {
+    if (dec->discont) {
+      GST_LOG_OBJECT (dec, "setting DISCONT");
+      GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+      dec->discont = FALSE;
+    }
+    result = gst_pad_push (dec->srcpad, buf);
+  } else {
+    gst_buffer_unref (buf);
+  }
+
+  return result;
+}
+
+static GstFlowReturn
+theora_dec_push_reverse (GstTheoraDec * dec, GstBuffer * buf)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+
+  dec->queued = g_list_prepend (dec->queued, buf);
+
+  return result;
+}
+
+/* Allocate buffer and copy image data into Y444 format */
+static GstFlowReturn
+theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out)
+{
+  gint width, height, stride;
+  gint pic_width, pic_height;
+  GstFlowReturn result;
+  int i, comp;
+  guint8 *dest, *src;
+  GstVideoFrame frame;
+  GstMetaVideoCrop *crop;
+  gint offset_x, offset_y;
+
+  if (gst_pad_check_reconfigure (dec->srcpad)) {
+    GstCaps *caps;
+
+    caps = gst_pad_get_current_caps (dec->srcpad);
+    theora_negotiate_pool (dec, caps, &dec->vinfo);
+    gst_caps_unref (caps);
+  }
+
+  result = gst_buffer_pool_acquire_buffer (dec->pool, out, NULL);
+  if (G_UNLIKELY (result != GST_FLOW_OK))
+    goto no_buffer;
+
+  if (!gst_video_frame_map (&frame, &dec->vinfo, *out, GST_MAP_WRITE))
+    goto invalid_frame;
+
+  if (dec->crop && !dec->use_cropping) {
+    /* we need to crop the hard way */
+    offset_x = dec->info.pic_x;
+    offset_y = dec->info.pic_y;
+    pic_width = dec->info.pic_width;
+    pic_height = dec->info.pic_height;
+    /* Ensure correct offsets in chroma for formats that need it
+     * by rounding the offset. libtheora will add proper pixels,
+     * so no need to handle them ourselves. */
+    if (offset_x & 1 && dec->info.pixel_fmt != TH_PF_444)
+      offset_x--;
+    if (offset_y & 1 && dec->info.pixel_fmt == TH_PF_420)
+      offset_y--;
+  } else {
+    /* copy the whole frame */
+    offset_x = 0;
+    offset_y = 0;
+    pic_width = dec->info.frame_width;
+    pic_height = dec->info.frame_height;
+
+    if (dec->use_cropping) {
+      crop = gst_buffer_add_meta_video_crop (*out);
+      /* we can do things slightly more efficient when we know that
+       * downstream understands clipping */
+      crop->x = dec->info.pic_x;
+      crop->y = dec->info.pic_y;
+      crop->width = dec->info.pic_width;
+      crop->height = dec->info.pic_height;
+    }
+  }
+
+  for (comp = 0; comp < 3; comp++) {
+    width =
+        GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame.info.finfo, comp, pic_width);
+    height =
+        GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame.info.finfo, comp, pic_height);
+    stride = GST_VIDEO_FRAME_COMP_STRIDE (&frame, comp);
+    dest = GST_VIDEO_FRAME_COMP_DATA (&frame, comp);
+
+    src = buf[comp].data;
+    src += ((height == pic_height) ? offset_y : offset_y / 2)
+        * buf[comp].stride;
+    src += (width == pic_width) ? offset_x : offset_x / 2;
+
+    for (i = 0; i < height; i++) {
+      memcpy (dest, src, width);
+
+      dest += stride;
+      src += buf[comp].stride;
+    }
+  }
+  gst_video_frame_unmap (&frame);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+no_buffer:
+  {
+    GST_DEBUG_OBJECT (dec, "could not get buffer, reason: %s",
+        gst_flow_get_name (result));
+    return result;
+  }
+invalid_frame:
+  {
+    GST_DEBUG_OBJECT (dec, "could not map video frame");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+theora_handle_data_packet (GstTheoraDec * dec, ogg_packet * packet,
+    GstClockTime outtime, GstClockTime outdur)
+{
+  /* normal data packet */
+  th_ycbcr_buffer buf;
+  GstBuffer *out;
+  gboolean keyframe;
+  GstFlowReturn result;
+  ogg_int64_t gp;
+
+  if (G_UNLIKELY (!dec->have_header))
+    goto not_initialized;
+
+  /* get timestamp and durations */
+  if (outtime == -1)
+    outtime = dec->last_timestamp;
+  if (outdur == -1)
+    outdur = gst_util_uint64_scale_int (GST_SECOND, dec->info.fps_denominator,
+        dec->info.fps_numerator);
+
+  /* calculate expected next timestamp */
+  if (outtime != -1 && outdur != -1)
+    dec->last_timestamp = outtime + outdur;
+
+  /* the second most significant bit of the first data byte is cleared 
+   * for keyframes. We can only check it if it's not a zero-length packet. */
+  keyframe = packet->bytes && ((packet->packet[0] & 0x40) == 0);
+  if (G_UNLIKELY (keyframe)) {
+    GST_DEBUG_OBJECT (dec, "we have a keyframe");
+    dec->need_keyframe = FALSE;
+  } else if (G_UNLIKELY (dec->need_keyframe)) {
+    goto dropping;
+  }
+
+  GST_DEBUG_OBJECT (dec, "parsing data packet");
+
+  /* this does the decoding */
+  if (G_UNLIKELY (th_decode_packetin (dec->decoder, packet, &gp) < 0))
+    goto decode_error;
+
+  if (outtime != -1) {
+    gboolean need_skip;
+    GstClockTime running_time;
+    GstClockTime earliest_time;
+    gdouble proportion;
+
+    /* qos needs to be done on running time */
+    running_time = gst_segment_to_running_time (&dec->segment, GST_FORMAT_TIME,
+        outtime);
+
+    GST_OBJECT_LOCK (dec);
+    proportion = dec->proportion;
+    earliest_time = dec->earliest_time;
+    /* check for QoS, don't perform the last steps of getting and
+     * pushing the buffers that are known to be late. */
+    need_skip = earliest_time != -1 && running_time <= earliest_time;
+    GST_OBJECT_UNLOCK (dec);
+
+    if (need_skip) {
+      GstMessage *qos_msg;
+      guint64 stream_time;
+      gint64 jitter;
+
+      GST_DEBUG_OBJECT (dec, "skipping decoding: qostime %"
+          GST_TIME_FORMAT " <= %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (running_time), GST_TIME_ARGS (earliest_time));
+
+      dec->dropped++;
+
+      stream_time =
+          gst_segment_to_stream_time (&dec->segment, GST_FORMAT_TIME, outtime);
+      jitter = GST_CLOCK_DIFF (running_time, earliest_time);
+
+      qos_msg =
+          gst_message_new_qos (GST_OBJECT_CAST (dec), FALSE, running_time,
+          stream_time, outtime, outdur);
+      gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
+      gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
+          dec->processed, dec->dropped);
+      gst_element_post_message (GST_ELEMENT_CAST (dec), qos_msg);
+
+      goto dropping_qos;
+    }
+  }
+
+  /* this does postprocessing and set up the decoded frame
+   * pointers in our yuv variable */
+  if (G_UNLIKELY (th_decode_ycbcr_out (dec->decoder, buf) < 0))
+    goto no_yuv;
+
+  if (G_UNLIKELY ((buf[0].width != dec->info.frame_width)
+          || (buf[0].height != dec->info.frame_height)))
+    goto wrong_dimensions;
+
+  result = theora_handle_image (dec, buf, &out);
+  if (result != GST_FLOW_OK)
+    return result;
+
+  GST_BUFFER_OFFSET (out) = dec->frame_nr;
+  if (dec->frame_nr != -1)
+    dec->frame_nr++;
+  GST_BUFFER_OFFSET_END (out) = dec->frame_nr;
+
+  GST_BUFFER_TIMESTAMP (out) = outtime;
+  GST_BUFFER_DURATION (out) = outdur;
+
+  dec->processed++;
+
+  if (dec->segment.rate >= 0.0)
+    result = theora_dec_push_forward (dec, out);
+  else
+    result = theora_dec_push_reverse (dec, out);
+
+  return result;
+
+  /* ERRORS */
+not_initialized:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE,
+        (NULL), ("no header sent yet"));
+    return GST_FLOW_ERROR;
+  }
+dropping:
+  {
+    GST_WARNING_OBJECT (dec, "dropping frame because we need a keyframe");
+    dec->discont = TRUE;
+    return GST_FLOW_OK;
+  }
+dropping_qos:
+  {
+    if (dec->frame_nr != -1)
+      dec->frame_nr++;
+    dec->discont = TRUE;
+    GST_WARNING_OBJECT (dec, "dropping frame because of QoS");
+    return GST_FLOW_OK;
+  }
+decode_error:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE,
+        (NULL), ("theora decoder did not decode data packet"));
+    return GST_FLOW_ERROR;
+  }
+no_yuv:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE,
+        (NULL), ("couldn't read out YUV image"));
+    return GST_FLOW_ERROR;
+  }
+wrong_dimensions:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, FORMAT,
+        (NULL), ("dimensions of image do not match header"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+theora_dec_decode_buffer (GstTheoraDec * dec, GstBuffer * buf)
+{
+  ogg_packet packet;
+  GstFlowReturn result = GST_FLOW_OK;
+  GstClockTime timestamp, duration;
+  gsize size;
+
+  /* make ogg_packet out of the buffer */
+  packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  packet.granulepos = -1;
+  packet.packetno = 0;          /* we don't really care */
+  packet.b_o_s = dec->have_header ? 0 : 1;
+  /* EOS does not matter for the decoder */
+  packet.e_o_s = 0;
+
+  GST_LOG_OBJECT (dec, "decode buffer of size %ld", packet.bytes);
+
+  /* save last seem timestamp for interpolating the next timestamps using the
+   * framerate when we need to */
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+  duration = GST_BUFFER_DURATION (buf);
+
+  GST_DEBUG_OBJECT (dec, "header=%02x, outtime=%" GST_TIME_FORMAT,
+      packet.bytes ? packet.packet[0] : -1, GST_TIME_ARGS (timestamp));
+
+  /* switch depending on packet type. A zero byte packet is always a data
+   * packet; we don't dereference it in that case. */
+  if (packet.bytes && packet.packet[0] & 0x80) {
+    if (dec->have_header) {
+      GST_WARNING_OBJECT (GST_OBJECT (dec), "Ignoring header");
+      goto done;
+    }
+    result = theora_handle_header_packet (dec, &packet);
+  } else {
+    result = theora_handle_data_packet (dec, &packet, timestamp, duration);
+  }
+done:
+  gst_buffer_unmap (buf, packet.packet, size);
+
+  return result;
+}
+
+/* For reverse playback we use a technique that can be used for
+ * any keyframe based video codec.
+ *
+ * Input:
+ *  Buffer decoding order:  7  8  9  4  5  6  1  2  3  EOS
+ *  Keyframe flag:                      K        K
+ *  Discont flag:           D        D        D
+ *
+ * - Each Discont marks a discont in the decoding order.
+ * - The keyframes mark where we can start decoding.
+ *
+ * First we prepend incomming buffers to the gather queue, whenever we receive
+ * a discont, we flush out the gather queue.
+ *
+ * The above data will be accumulated in the gather queue like this:
+ *
+ *   gather queue:  9  8  7
+ *                        D
+ *
+ * Whe buffer 4 is received (with a DISCONT), we flush the gather queue like
+ * this:
+ *
+ *   while (gather)
+ *     take head of queue and prepend to decode queue.
+ *     if we copied a keyframe, decode the decode queue.
+ *
+ * After we flushed the gather queue, we add 4 to the (now empty) gather queue.
+ * We get the following situation:
+ *
+ *  gather queue:    4
+ *  decode queue:    7  8  9
+ *
+ * After we received 5 (Keyframe) and 6:
+ *
+ *  gather queue:    6  5  4
+ *  decode queue:    7  8  9
+ *
+ * When we receive 1 (DISCONT) which triggers a flush of the gather queue:
+ *
+ *   Copy head of the gather queue (6) to decode queue:
+ *
+ *    gather queue:    5  4
+ *    decode queue:    6  7  8  9
+ *
+ *   Copy head of the gather queue (5) to decode queue. This is a keyframe so we
+ *   can start decoding.
+ *
+ *    gather queue:    4
+ *    decode queue:    5  6  7  8  9
+ *
+ *   Decode frames in decode queue, store raw decoded data in output queue, we
+ *   can take the head of the decode queue and prepend the decoded result in the
+ *   output queue:
+ *
+ *    gather queue:    4
+ *    decode queue:    
+ *    output queue:    9  8  7  6  5
+ *
+ *   Now output all the frames in the output queue, picking a frame from the
+ *   head of the queue.
+ *
+ *   Copy head of the gather queue (4) to decode queue, we flushed the gather
+ *   queue and can now store input buffer in the gather queue:
+ *
+ *    gather queue:    1
+ *    decode queue:    4
+ *
+ *  When we receive EOS, the queue looks like:
+ *
+ *    gather queue:    3  2  1
+ *    decode queue:    4
+ *
+ *  Fill decode queue, first keyframe we copy is 2:
+ *
+ *    gather queue:    1
+ *    decode queue:    2  3  4
+ *
+ *  Decoded output:
+ *
+ *    gather queue:    1
+ *    decode queue:    
+ *    output queue:    4  3  2
+ *
+ *  Leftover buffer 1 cannot be decoded and must be discarded.
+ */
+static GstFlowReturn
+theora_dec_flush_decode (GstTheoraDec * dec)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+
+  while (dec->decode) {
+    GstBuffer *buf = GST_BUFFER_CAST (dec->decode->data);
+
+    GST_DEBUG_OBJECT (dec, "decoding buffer %p, ts %" GST_TIME_FORMAT,
+        buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+    /* decode buffer, prepend to output queue */
+    res = theora_dec_decode_buffer (dec, buf);
+
+    /* don't need it anymore now */
+    gst_buffer_unref (buf);
+
+    dec->decode = g_list_delete_link (dec->decode, dec->decode);
+  }
+  while (dec->queued) {
+    GstBuffer *buf = GST_BUFFER_CAST (dec->queued->data);
+
+    /* iterate ouput queue an push downstream */
+    res = gst_pad_push (dec->srcpad, buf);
+
+    dec->queued = g_list_delete_link (dec->queued, dec->queued);
+  }
+
+  return res;
+}
+
+static GstFlowReturn
+theora_dec_chain_reverse (GstTheoraDec * dec, gboolean discont, GstBuffer * buf)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+
+  /* if we have a discont, move buffers to the decode list */
+  if (G_UNLIKELY (discont)) {
+    GST_DEBUG_OBJECT (dec, "received discont,gathering buffers");
+    while (dec->gather) {
+      GstBuffer *gbuf;
+      guint8 data[1];
+
+      gbuf = GST_BUFFER_CAST (dec->gather->data);
+      /* remove from the gather list */
+      dec->gather = g_list_delete_link (dec->gather, dec->gather);
+      /* copy to decode queue */
+      dec->decode = g_list_prepend (dec->decode, gbuf);
+
+      /* if we copied a keyframe, flush and decode the decode queue */
+      if (gst_buffer_extract (gbuf, 0, data, 1) == 1) {
+        if ((data[0] & 0x40) == 0) {
+          GST_DEBUG_OBJECT (dec, "copied keyframe");
+          res = theora_dec_flush_decode (dec);
+        }
+      }
+    }
+  }
+
+  /* add buffer to gather queue */
+  GST_DEBUG_OBJECT (dec, "gathering buffer %p, size %" G_GSIZE_FORMAT, buf,
+      gst_buffer_get_size (buf));
+  dec->gather = g_list_prepend (dec->gather, buf);
+
+  return res;
+}
+
+static GstFlowReturn
+theora_dec_chain_forward (GstTheoraDec * dec, gboolean discont,
+    GstBuffer * buffer)
+{
+  GstFlowReturn result;
+
+  result = theora_dec_decode_buffer (dec, buffer);
+
+  gst_buffer_unref (buffer);
+
+  return result;
+}
+
+static GstFlowReturn
+theora_dec_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstTheoraDec *dec;
+  GstFlowReturn res;
+  gboolean discont;
+
+  dec = GST_THEORA_DEC (gst_pad_get_parent (pad));
+
+  /* peel of DISCONT flag */
+  discont = GST_BUFFER_IS_DISCONT (buf);
+
+  /* resync on DISCONT */
+  if (G_UNLIKELY (discont)) {
+    GST_DEBUG_OBJECT (dec, "received DISCONT buffer");
+    dec->need_keyframe = TRUE;
+    dec->last_timestamp = -1;
+    dec->discont = TRUE;
+  }
+
+  if (dec->segment.rate > 0.0)
+    res = theora_dec_chain_forward (dec, discont, buf);
+  else
+    res = theora_dec_chain_reverse (dec, discont, buf);
+
+  gst_object_unref (dec);
+
+  return res;
+}
+
+static GstStateChangeReturn
+theora_dec_change_state (GstElement * element, GstStateChange transition)
+{
+  GstTheoraDec *dec = GST_THEORA_DEC (element);
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      th_info_clear (&dec->info);
+      th_comment_clear (&dec->comment);
+      GST_DEBUG_OBJECT (dec, "Setting have_header to FALSE in READY->PAUSED");
+      dec->have_header = FALSE;
+      dec->have_par = FALSE;
+      gst_theora_dec_reset (dec);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      th_info_clear (&dec->info);
+      th_comment_clear (&dec->comment);
+      th_setup_free (dec->setup);
+      dec->setup = NULL;
+      th_decode_free (dec->decoder);
+      dec->decoder = NULL;
+      gst_theora_dec_reset (dec);
+      if (dec->pool) {
+        gst_buffer_pool_set_active (dec->pool, FALSE);
+        gst_object_unref (dec->pool);
+        dec->pool = NULL;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+theora_dec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTheoraDec *dec = GST_THEORA_DEC (object);
+
+  switch (prop_id) {
+    case PROP_CROP:
+      dec->crop = g_value_get_boolean (value);
+      break;
+    case PROP_TELEMETRY_MV:
+      dec->telemetry_mv = g_value_get_int (value);
+      break;
+    case PROP_TELEMETRY_MBMODE:
+      dec->telemetry_mbmode = g_value_get_int (value);
+      break;
+    case PROP_TELEMETRY_QI:
+      dec->telemetry_qi = g_value_get_int (value);
+      break;
+    case PROP_TELEMETRY_BITS:
+      dec->telemetry_bits = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+theora_dec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTheoraDec *dec = GST_THEORA_DEC (object);
+
+  switch (prop_id) {
+    case PROP_CROP:
+      g_value_set_boolean (value, dec->crop);
+      break;
+    case PROP_TELEMETRY_MV:
+      g_value_set_int (value, dec->telemetry_mv);
+      break;
+    case PROP_TELEMETRY_MBMODE:
+      g_value_set_int (value, dec->telemetry_mbmode);
+      break;
+    case PROP_TELEMETRY_QI:
+      g_value_set_int (value, dec->telemetry_qi);
+      break;
+    case PROP_TELEMETRY_BITS:
+      g_value_set_int (value, dec->telemetry_bits);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/ext/theora/gsttheoradec.h b/ext/theora/gsttheoradec.h
new file mode 100644
index 0000000..720eb49
--- /dev/null
+++ b/ext/theora/gsttheoradec.h
@@ -0,0 +1,123 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_THEORADEC_H__
+#define __GST_THEORADEC_H__
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <theora/theoradec.h>
+#include <string.h>
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_THEORA_DEC \
+  (gst_theora_dec_get_type())
+#define GST_THEORA_DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_THEORA_DEC,GstTheoraDec))
+#define GST_THEORA_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_THEORA_DEC,GstTheoraDecClass))
+#define GST_IS_THEORA_DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_THEORA_DEC))
+#define GST_IS_THEORA_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_THEORA_DEC))
+
+typedef struct _GstTheoraDec GstTheoraDec;
+typedef struct _GstTheoraDecClass GstTheoraDecClass;
+
+/**
+ * GstTheoraDec:
+ *
+ * Opaque object data structure.
+ */
+struct _GstTheoraDec
+{
+  GstElement element;
+
+  /* Pads */
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  /* theora decoder state */
+  th_dec_ctx *decoder;
+  th_setup_info *setup;
+  th_info info;
+  th_comment comment;
+
+  gboolean have_header;
+
+  GstClockTime last_timestamp;
+  guint64 frame_nr;
+  gboolean need_keyframe;
+  GstVideoInfo vinfo;
+
+  gint offset_x, offset_y;
+  gint output_bpp;
+  GstBufferPool *pool;
+  gboolean use_cropping;
+
+  /* telemetry debuging options */
+  gint telemetry_mv;
+  gint telemetry_mbmode;
+  gint telemetry_qi;
+  gint telemetry_bits;
+
+  gboolean crop;
+
+  /* list of buffers that need timestamps */
+  GList *queued;
+  /* list of raw output buffers */
+  GList *output;
+  /* gather/decode queues for reverse playback */
+  GList *gather;
+  GList *decode;
+  GList *pendingevents;
+
+  GstTagList *tags;
+
+  /* segment info */ /* with STREAM_LOCK */
+  GstSegment segment;
+  gboolean discont;
+  guint32 seqnum;
+
+  /* QoS stuff */ /* with LOCK*/
+  gdouble proportion;
+  GstClockTime earliest_time;
+  guint64 processed;
+  guint64 dropped;
+
+  gboolean have_par;
+  gint par_num;
+  gint par_den;
+};
+
+struct _GstTheoraDecClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_theora_dec_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_THEORADEC_H__ */
diff --git a/ext/theora/gsttheoraenc.c b/ext/theora/gsttheoraenc.c
new file mode 100644
index 0000000..40cba12
--- /dev/null
+++ b/ext/theora/gsttheoraenc.c
@@ -0,0 +1,1609 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-theoraenc
+ * @see_also: theoradec, oggmux
+ *
+ * This element encodes raw video into a Theora stream.
+ * <ulink url="http://www.theora.org/">Theora</ulink> is a royalty-free
+ * video codec maintained by the <ulink url="http://www.xiph.org/">Xiph.org
+ * Foundation</ulink>, based on the VP3 codec.
+ *
+ * The theora codec internally only supports encoding of images that are a
+ * multiple of 16 pixels in both X and Y direction. It is however perfectly
+ * possible to encode images with other dimensions because an arbitrary
+ * rectangular cropping region can be set up. This element will automatically
+ * set up a correct cropping region if the dimensions are not multiples of 16
+ * pixels.
+ *
+ * To control the quality of the encoding, the #GstTheoraEnc::bitrate and
+ * #GstTheoraEnc::quality properties can be used. These two properties are
+ * mutualy exclusive. Setting the bitrate property will produce a constant
+ * bitrate (CBR) stream while setting the quality property will produce a
+ * variable bitrate (VBR) stream.
+ *
+ * <refsect2>
+ * <title>Example pipeline</title>
+ * |[
+ * gst-launch -v videotestsrc num-buffers=1000 ! theoraenc ! oggmux ! filesink location=videotestsrc.ogg
+ * ]| This example pipeline will encode a test video source to theora muxed in an
+ * ogg container. Refer to the theoradec documentation to decode the create
+ * stream.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttheoraenc.h"
+
+#include <string.h>
+#include <stdlib.h>             /* free */
+
+#include <gst/tag/tag.h>
+
+#define GST_CAT_DEFAULT theoraenc_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+#define GST_TYPE_BORDER_MODE (gst_border_mode_get_type())
+static GType
+gst_border_mode_get_type (void)
+{
+  static GType border_mode_type = 0;
+  static const GEnumValue border_mode[] = {
+    {BORDER_NONE, "No Border", "none"},
+    {BORDER_BLACK, "Black Border", "black"},
+    {BORDER_MIRROR, "Mirror image in borders", "mirror"},
+    {0, NULL, NULL},
+  };
+
+  if (!border_mode_type) {
+    border_mode_type =
+        g_enum_register_static ("GstTheoraEncBorderMode", border_mode);
+  }
+  return border_mode_type;
+}
+
+#define GST_TYPE_MULTIPASS_MODE (gst_multipass_mode_get_type())
+static GType
+gst_multipass_mode_get_type (void)
+{
+  static GType multipass_mode_type = 0;
+  static const GEnumValue multipass_mode[] = {
+    {MULTIPASS_MODE_SINGLE_PASS, "Single pass", "single-pass"},
+    {MULTIPASS_MODE_FIRST_PASS, "First pass", "first-pass"},
+    {MULTIPASS_MODE_SECOND_PASS, "Second pass", "second-pass"},
+    {0, NULL, NULL},
+  };
+
+  if (!multipass_mode_type) {
+    multipass_mode_type =
+        g_enum_register_static ("GstTheoraEncMultipassMode", multipass_mode);
+  }
+  return multipass_mode_type;
+}
+
+/* taken from theora/lib/toplevel.c */
+static int
+_ilog (unsigned int v)
+{
+  int ret = 0;
+
+  while (v) {
+    ret++;
+    v >>= 1;
+  }
+  return (ret);
+}
+
+#define THEORA_DEF_BITRATE              0
+#define THEORA_DEF_QUALITY              48
+#define THEORA_DEF_KEYFRAME_AUTO        TRUE
+#define THEORA_DEF_KEYFRAME_FREQ        64
+#define THEORA_DEF_KEYFRAME_FREQ_FORCE  64
+#define THEORA_DEF_SPEEDLEVEL           1
+#define THEORA_DEF_VP3_COMPATIBLE       FALSE
+#define THEORA_DEF_DROP_FRAMES          TRUE
+#define THEORA_DEF_CAP_OVERFLOW         TRUE
+#define THEORA_DEF_CAP_UNDERFLOW        FALSE
+#define THEORA_DEF_RATE_BUFFER          0
+#define THEORA_DEF_MULTIPASS_CACHE_FILE NULL
+#define THEORA_DEF_MULTIPASS_MODE       MULTIPASS_MODE_SINGLE_PASS
+enum
+{
+  PROP_0,
+  PROP_CENTER,
+  PROP_BORDER,
+  PROP_BITRATE,
+  PROP_QUALITY,
+  PROP_QUICK,
+  PROP_KEYFRAME_AUTO,
+  PROP_KEYFRAME_FREQ,
+  PROP_KEYFRAME_FREQ_FORCE,
+  PROP_KEYFRAME_THRESHOLD,
+  PROP_KEYFRAME_MINDISTANCE,
+  PROP_NOISE_SENSITIVITY,
+  PROP_SHARPNESS,
+  PROP_SPEEDLEVEL,
+  PROP_VP3_COMPATIBLE,
+  PROP_DROP_FRAMES,
+  PROP_CAP_OVERFLOW,
+  PROP_CAP_UNDERFLOW,
+  PROP_RATE_BUFFER,
+  PROP_MULTIPASS_CACHE_FILE,
+  PROP_MULTIPASS_MODE
+      /* FILL ME */
+};
+
+/* this function does a straight granulepos -> timestamp conversion */
+static GstClockTime
+granulepos_to_timestamp (GstTheoraEnc * theoraenc, ogg_int64_t granulepos)
+{
+  guint64 iframe, pframe;
+  int shift = theoraenc->info.keyframe_granule_shift;
+
+  if (granulepos < 0)
+    return GST_CLOCK_TIME_NONE;
+
+  iframe = granulepos >> shift;
+  pframe = granulepos - (iframe << shift);
+
+  /* num and den are 32 bit, so we can safely multiply with GST_SECOND */
+  return gst_util_uint64_scale ((guint64) (iframe + pframe),
+      GST_SECOND * theoraenc->info.fps_denominator,
+      theoraenc->info.fps_numerator);
+}
+
+/* Generate a dummy encoder context for use in th_encode_ctl queries
+   Release with th_encode_free()
+   This and the next routine from theora/examples/libtheora_info.c */
+static th_enc_ctx *
+dummy_encode_ctx (void)
+{
+  th_enc_ctx *ctx;
+  th_info info;
+
+  /* set the minimal video parameters */
+  th_info_init (&info);
+  info.frame_width = 320;
+  info.frame_height = 240;
+  info.fps_numerator = 1;
+  info.fps_denominator = 1;
+
+  /* allocate and initialize a context object */
+  ctx = th_encode_alloc (&info);
+  if (!ctx)
+    GST_WARNING ("Failed to allocate dummy encoder context.");
+
+  /* clear the info struct */
+  th_info_clear (&info);
+
+  return ctx;
+}
+
+/* Query the current and maximum values for the 'speed level' setting.
+   This can be used to ask the encoder to trade off encoding quality
+   vs. performance cost, for example to adapt to realtime constraints. */
+static int
+check_speed_level (th_enc_ctx * ctx, int *current, int *max)
+{
+  int ret;
+
+  /* query the current speed level */
+  ret = th_encode_ctl (ctx, TH_ENCCTL_GET_SPLEVEL, current, sizeof (int));
+  if (ret) {
+    GST_WARNING ("Error %d getting current speed level.", ret);
+    return ret;
+  }
+  /* query the maximum speed level, which varies by encoder version */
+  ret = th_encode_ctl (ctx, TH_ENCCTL_GET_SPLEVEL_MAX, max, sizeof (int));
+  if (ret) {
+    GST_WARNING ("Error %d getting maximum speed level.", ret);
+    return ret;
+  }
+
+  return 0;
+}
+
+static GstStaticPadTemplate theora_enc_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "format = (string) { I420, Y42B, Y444 }, "
+        "framerate = (fraction) [1/MAX, MAX], "
+        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]")
+    );
+
+static GstStaticPadTemplate theora_enc_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-theora")
+    );
+
+#define gst_theora_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTheoraEnc, gst_theora_enc,
+    GST_TYPE_ELEMENT, G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));
+
+static GstCaps *theora_enc_src_caps;
+
+static gboolean theora_enc_sink_event (GstPad * pad, GstEvent * event);
+static gboolean theora_enc_src_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn theora_enc_chain (GstPad * pad, GstBuffer * buffer);
+static GstStateChangeReturn theora_enc_change_state (GstElement * element,
+    GstStateChange transition);
+static GstCaps *theora_enc_sink_getcaps (GstPad * pad, GstCaps * filter);
+static gboolean theora_enc_sink_setcaps (GstTheoraEnc * enc, GstCaps * caps);
+static void theora_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void theora_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void theora_enc_finalize (GObject * object);
+
+static gboolean theora_enc_write_multipass_cache (GstTheoraEnc * enc,
+    gboolean begin, gboolean eos);
+
+static char *theora_enc_get_supported_formats (void);
+
+static void
+gst_theora_enc_class_init (GstTheoraEncClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+  char *caps_string;
+
+  /* query runtime encoder properties */
+  th_enc_ctx *th_ctx;
+  int default_speed_level = THEORA_DEF_SPEEDLEVEL;
+  int max_speed_level = default_speed_level;
+
+  GST_DEBUG_CATEGORY_INIT (theoraenc_debug, "theoraenc", 0, "Theora encoder");
+
+  th_ctx = dummy_encode_ctx ();
+  if (th_ctx) {
+    if (!check_speed_level (th_ctx, &default_speed_level, &max_speed_level))
+      GST_WARNING
+          ("Failed to determine settings for the speed-level property.");
+    th_encode_free (th_ctx);
+  }
+
+  gobject_class->set_property = theora_enc_set_property;
+  gobject_class->get_property = theora_enc_get_property;
+  gobject_class->finalize = theora_enc_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_CENTER,
+      g_param_spec_boolean ("center", "Center",
+          "ignored and kept for API compat only", TRUE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BORDER,
+      g_param_spec_enum ("border", "Border",
+          "ignored and kept for API compat only",
+          GST_TYPE_BORDER_MODE, BORDER_BLACK,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /* general encoding stream options */
+  g_object_class_install_property (gobject_class, PROP_BITRATE,
+      g_param_spec_int ("bitrate", "Bitrate", "Compressed video bitrate (kbps)",
+          0, (1 << 24) - 1, THEORA_DEF_BITRATE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+          GST_PARAM_MUTABLE_PLAYING));
+  g_object_class_install_property (gobject_class, PROP_QUALITY,
+      g_param_spec_int ("quality", "Quality", "Video quality", 0, 63,
+          THEORA_DEF_QUALITY,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+          GST_PARAM_MUTABLE_PLAYING));
+  g_object_class_install_property (gobject_class, PROP_QUICK,
+      g_param_spec_boolean ("quick", "Quick",
+          "ignored and kept for API compat only", TRUE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KEYFRAME_AUTO,
+      g_param_spec_boolean ("keyframe-auto", "Keyframe Auto",
+          "Automatic keyframe detection", THEORA_DEF_KEYFRAME_AUTO,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KEYFRAME_FREQ,
+      g_param_spec_int ("keyframe-freq", "Keyframe frequency",
+          "Keyframe frequency", 1, 32768, THEORA_DEF_KEYFRAME_FREQ,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KEYFRAME_FREQ_FORCE,
+      g_param_spec_int ("keyframe-force", "Keyframe force",
+          "Force keyframe every N frames", 1, 32768,
+          THEORA_DEF_KEYFRAME_FREQ_FORCE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KEYFRAME_THRESHOLD,
+      g_param_spec_int ("keyframe-threshold", "Keyframe threshold",
+          "ignored and kept for API compat only", 0, 32768, 80,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KEYFRAME_MINDISTANCE,
+      g_param_spec_int ("keyframe-mindistance", "Keyframe mindistance",
+          "ignored and kept for API compat only", 1, 32768, 8,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_NOISE_SENSITIVITY,
+      g_param_spec_int ("noise-sensitivity", "Noise sensitivity",
+          "ignored and kept for API compat only", 0, 32768, 1,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SHARPNESS,
+      g_param_spec_int ("sharpness", "Sharpness",
+          "ignored and kept for API compat only", 0, 2, 0,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SPEEDLEVEL,
+      g_param_spec_int ("speed-level", "Speed level",
+          "Controls the amount of analysis performed when encoding."
+          " Higher values trade compression quality for speed."
+          " This property requires libtheora version >= 1.0"
+          ", and the maximum value may vary based on encoder version.",
+          0, max_speed_level, default_speed_level,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+          G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_VP3_COMPATIBLE,
+      g_param_spec_boolean ("vp3-compatible", "VP3 Compatible",
+          "Disables non-VP3 compatible features",
+          THEORA_DEF_VP3_COMPATIBLE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_DROP_FRAMES,
+      g_param_spec_boolean ("drop-frames", "Drop Frames",
+          "Allow or disallow frame dropping",
+          THEORA_DEF_DROP_FRAMES,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CAP_OVERFLOW,
+      g_param_spec_boolean ("cap-overflow", "Cap Overflow",
+          "Enable capping of bit reservoir overflows",
+          THEORA_DEF_CAP_OVERFLOW,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CAP_UNDERFLOW,
+      g_param_spec_boolean ("cap-underflow", "Cap Underflow",
+          "Enable capping of bit reservoir underflows",
+          THEORA_DEF_CAP_UNDERFLOW,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_RATE_BUFFER,
+      g_param_spec_int ("rate-buffer", "Rate Control Buffer",
+          "Sets the size of the rate control buffer, in units of frames.  "
+          "The default value of 0 instructs the encoder to automatically "
+          "select an appropriate value",
+          0, 1000, THEORA_DEF_RATE_BUFFER,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_MULTIPASS_CACHE_FILE,
+      g_param_spec_string ("multipass-cache-file", "Multipass Cache File",
+          "Multipass cache file", THEORA_DEF_MULTIPASS_CACHE_FILE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_MULTIPASS_MODE,
+      g_param_spec_enum ("multipass-mode", "Multipass mode",
+          "Single pass or first/second pass", GST_TYPE_MULTIPASS_MODE,
+          THEORA_DEF_MULTIPASS_MODE,
+          (GParamFlags) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_enc_src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_enc_sink_factory));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Theora video encoder", "Codec/Encoder/Video",
+      "encode raw YUV video to a theora stream",
+      "Wim Taymans <wim@fluendo.com>");
+
+  caps_string = g_strdup_printf ("video/x-raw, "
+      "format = (string) { %s }, "
+      "framerate = (fraction) [1/MAX, MAX], "
+      "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]",
+      theora_enc_get_supported_formats ());
+  theora_enc_src_caps = gst_caps_from_string (caps_string);
+  g_free (caps_string);
+
+  gstelement_class->change_state = theora_enc_change_state;
+}
+
+static void
+gst_theora_enc_init (GstTheoraEnc * enc)
+{
+  enc->sinkpad =
+      gst_pad_new_from_static_template (&theora_enc_sink_factory, "sink");
+  gst_pad_set_chain_function (enc->sinkpad, theora_enc_chain);
+  gst_pad_set_event_function (enc->sinkpad, theora_enc_sink_event);
+  gst_pad_set_getcaps_function (enc->sinkpad, theora_enc_sink_getcaps);
+  gst_element_add_pad (GST_ELEMENT (enc), enc->sinkpad);
+
+  enc->srcpad =
+      gst_pad_new_from_static_template (&theora_enc_src_factory, "src");
+  gst_pad_set_event_function (enc->srcpad, theora_enc_src_event);
+  gst_pad_use_fixed_caps (enc->srcpad);
+  gst_element_add_pad (GST_ELEMENT (enc), enc->srcpad);
+
+  gst_segment_init (&enc->segment, GST_FORMAT_UNDEFINED);
+
+  enc->video_bitrate = THEORA_DEF_BITRATE;
+  enc->video_quality = THEORA_DEF_QUALITY;
+  enc->keyframe_auto = THEORA_DEF_KEYFRAME_AUTO;
+  enc->keyframe_freq = THEORA_DEF_KEYFRAME_FREQ;
+  enc->keyframe_force = THEORA_DEF_KEYFRAME_FREQ_FORCE;
+
+  enc->expected_ts = GST_CLOCK_TIME_NONE;
+
+  /* enc->speed_level is set to the libtheora default by the constructor */
+  enc->vp3_compatible = THEORA_DEF_VP3_COMPATIBLE;
+  enc->drop_frames = THEORA_DEF_DROP_FRAMES;
+  enc->cap_overflow = THEORA_DEF_CAP_OVERFLOW;
+  enc->cap_underflow = THEORA_DEF_CAP_UNDERFLOW;
+  enc->rate_buffer = THEORA_DEF_RATE_BUFFER;
+
+  enc->multipass_mode = THEORA_DEF_MULTIPASS_MODE;
+  enc->multipass_cache_file = THEORA_DEF_MULTIPASS_CACHE_FILE;
+}
+
+static void
+theora_enc_clear_multipass_cache (GstTheoraEnc * enc)
+{
+  if (enc->multipass_cache_fd) {
+    g_io_channel_shutdown (enc->multipass_cache_fd, TRUE, NULL);
+    g_io_channel_unref (enc->multipass_cache_fd);
+    enc->multipass_cache_fd = NULL;
+  }
+
+  if (enc->multipass_cache_adapter) {
+    gst_object_unref (enc->multipass_cache_adapter);
+    enc->multipass_cache_adapter = NULL;
+  }
+}
+
+static void
+theora_enc_finalize (GObject * object)
+{
+  GstTheoraEnc *enc = GST_THEORA_ENC (object);
+
+  GST_DEBUG_OBJECT (enc, "Finalizing");
+  if (enc->encoder)
+    th_encode_free (enc->encoder);
+  th_comment_clear (&enc->comment);
+  th_info_clear (&enc->info);
+  g_free (enc->multipass_cache_file);
+
+  theora_enc_clear_multipass_cache (enc);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+theora_enc_reset (GstTheoraEnc * enc)
+{
+  ogg_uint32_t keyframe_force;
+  int rate_flags;
+
+  GST_OBJECT_LOCK (enc);
+  enc->info.target_bitrate = enc->video_bitrate;
+  if (enc->quality_changed) {
+    enc->info.quality = enc->video_quality;
+  } else {
+    if (enc->video_bitrate == 0) {
+      enc->info.quality = enc->video_quality;
+    }
+  }
+  enc->bitrate_changed = FALSE;
+  enc->quality_changed = FALSE;
+  GST_OBJECT_UNLOCK (enc);
+
+  if (enc->encoder)
+    th_encode_free (enc->encoder);
+  enc->encoder = th_encode_alloc (&enc->info);
+  /* We ensure this function cannot fail. */
+  g_assert (enc->encoder != NULL);
+  th_encode_ctl (enc->encoder, TH_ENCCTL_SET_SPLEVEL, &enc->speed_level,
+      sizeof (enc->speed_level));
+  th_encode_ctl (enc->encoder, TH_ENCCTL_SET_VP3_COMPATIBLE,
+      &enc->vp3_compatible, sizeof (enc->vp3_compatible));
+
+  rate_flags = 0;
+  if (enc->drop_frames)
+    rate_flags |= TH_RATECTL_DROP_FRAMES;
+  if (enc->drop_frames)
+    rate_flags |= TH_RATECTL_CAP_OVERFLOW;
+  if (enc->drop_frames)
+    rate_flags |= TH_RATECTL_CAP_UNDERFLOW;
+  th_encode_ctl (enc->encoder, TH_ENCCTL_SET_RATE_FLAGS,
+      &rate_flags, sizeof (rate_flags));
+
+  if (enc->rate_buffer) {
+    th_encode_ctl (enc->encoder, TH_ENCCTL_SET_RATE_BUFFER,
+        &enc->rate_buffer, sizeof (enc->rate_buffer));
+  } else {
+    /* FIXME */
+  }
+
+  keyframe_force = enc->keyframe_auto ?
+      enc->keyframe_force : enc->keyframe_freq;
+  th_encode_ctl (enc->encoder, TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE,
+      &keyframe_force, sizeof (keyframe_force));
+
+  /* Get placeholder data */
+  if (enc->multipass_cache_fd
+      && enc->multipass_mode == MULTIPASS_MODE_FIRST_PASS)
+    theora_enc_write_multipass_cache (enc, TRUE, FALSE);
+}
+
+static void
+theora_enc_clear (GstTheoraEnc * enc)
+{
+  enc->packetno = 0;
+  enc->bytes_out = 0;
+  enc->granulepos_offset = 0;
+  enc->timestamp_offset = 0;
+
+  enc->next_ts = GST_CLOCK_TIME_NONE;
+  enc->next_discont = FALSE;
+  enc->expected_ts = GST_CLOCK_TIME_NONE;
+}
+
+static char *
+theora_enc_get_supported_formats (void)
+{
+  th_enc_ctx *encoder;
+  th_info info;
+  struct
+  {
+    th_pixel_fmt pixelformat;
+    const char *fourcc;
+  } formats[] = {
+    {
+    TH_PF_420, "I420"}, {
+    TH_PF_422, "Y42B"}, {
+    TH_PF_444, "Y444"}
+  };
+  GString *string = NULL;
+  guint i;
+
+  th_info_init (&info);
+  info.frame_width = 16;
+  info.frame_height = 16;
+  info.fps_numerator = 25;
+  info.fps_denominator = 1;
+  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+    info.pixel_fmt = formats[i].pixelformat;
+
+    encoder = th_encode_alloc (&info);
+    if (encoder == NULL)
+      continue;
+
+    GST_LOG ("format %s is supported", formats[i].fourcc);
+    th_encode_free (encoder);
+
+    if (string == NULL) {
+      string = g_string_new (formats[i].fourcc);
+    } else {
+      g_string_append (string, ", ");
+      g_string_append (string, formats[i].fourcc);
+    }
+  }
+  th_info_clear (&info);
+
+  return string == NULL ? NULL : g_string_free (string, FALSE);
+}
+
+static GstCaps *
+theora_enc_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstTheoraEnc *encoder;
+  GstPad *peer;
+  GstCaps *caps;
+
+  /* If we already have caps return them */
+  if ((caps = gst_pad_get_current_caps (pad)) != NULL)
+    return caps;
+
+  encoder = GST_THEORA_ENC (gst_pad_get_parent (pad));
+  if (!encoder)
+    return gst_caps_new_empty ();
+
+  peer = gst_pad_get_peer (encoder->srcpad);
+  if (peer) {
+    const GstCaps *templ_caps;
+    GstCaps *peer_caps, *tmp_caps;
+    GstStructure *s;
+    guint i, n;
+
+    peer_caps = gst_pad_get_caps (peer, NULL);
+
+    /* Translate peercaps to YUV */
+    peer_caps = gst_caps_make_writable (peer_caps);
+    n = gst_caps_get_size (peer_caps);
+    for (i = 0; i < n; i++) {
+      s = gst_caps_get_structure (peer_caps, i);
+
+      gst_structure_set_name (s, "video/x-raw");
+      gst_structure_remove_field (s, "streamheader");
+    }
+
+    templ_caps = gst_pad_get_pad_template_caps (pad);
+
+    tmp_caps = gst_caps_intersect (peer_caps, templ_caps);
+    caps = gst_caps_intersect (tmp_caps, theora_enc_src_caps);
+    gst_caps_unref (tmp_caps);
+    gst_caps_unref (peer_caps);
+    gst_object_unref (peer);
+    peer = NULL;
+  } else {
+    caps = gst_caps_ref (theora_enc_src_caps);
+  }
+
+  gst_object_unref (encoder);
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = intersection;
+  }
+
+  return caps;
+}
+
+static gboolean
+theora_enc_sink_setcaps (GstTheoraEnc * enc, GstCaps * caps)
+{
+  GstVideoInfo info;
+
+  th_info_clear (&enc->info);
+  th_info_init (&enc->info);
+
+  if (!gst_video_info_from_caps (&info, caps))
+    goto invalid_caps;
+
+  enc->vinfo = info;
+
+  /* Theora has a divisible-by-sixteen restriction for the encoded video size but
+   * we can define a picture area using pic_width/pic_height */
+  enc->info.frame_width = GST_ROUND_UP_16 (info.width);
+  enc->info.frame_height = GST_ROUND_UP_16 (info.height);
+  enc->info.pic_width = info.width;
+  enc->info.pic_height = info.height;
+
+  switch (GST_VIDEO_INFO_FORMAT (&info)) {
+    case GST_VIDEO_FORMAT_I420:
+      enc->info.pixel_fmt = TH_PF_420;
+      break;
+    case GST_VIDEO_FORMAT_Y42B:
+      enc->info.pixel_fmt = TH_PF_422;
+      break;
+    case GST_VIDEO_FORMAT_Y444:
+      enc->info.pixel_fmt = TH_PF_444;
+      break;
+    default:
+      g_assert_not_reached ();
+  }
+
+  enc->info.fps_numerator = info.fps_n;
+  enc->info.fps_denominator = info.fps_d;
+
+  enc->info.aspect_numerator = info.par_n;
+  enc->info.aspect_denominator = info.par_d;
+#if 0
+  /* setting them to 0 indicates that the decoder can chose a good aspect
+   * ratio, defaulting to 1/1 */
+  enc->info.aspect_numerator = 0;
+  enc->par_n = 1;
+  enc->info.aspect_denominator = 0;
+  enc->par_d = 1;
+#endif
+
+  enc->info.colorspace = TH_CS_UNSPECIFIED;
+
+  /* as done in theora */
+  enc->info.keyframe_granule_shift = _ilog (enc->keyframe_force - 1);
+  GST_DEBUG_OBJECT (enc,
+      "keyframe_frequency_force is %d, granule shift is %d",
+      enc->keyframe_force, enc->info.keyframe_granule_shift);
+
+  theora_enc_reset (enc);
+  enc->initialised = TRUE;
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_caps:
+  {
+    GST_DEBUG_OBJECT (enc, "could not parse caps");
+    return FALSE;
+  }
+}
+
+static guint64
+granulepos_add (guint64 granulepos, guint64 addend, gint shift)
+{
+  guint64 iframe, pframe;
+
+  iframe = granulepos >> shift;
+  pframe = granulepos - (iframe << shift);
+  iframe += addend;
+
+  return (iframe << shift) + pframe;
+}
+
+/* prepare a buffer for transmission by passing data through libtheora */
+static GstFlowReturn
+theora_buffer_from_packet (GstTheoraEnc * enc, ogg_packet * packet,
+    GstClockTime timestamp, GstClockTime running_time,
+    GstClockTime duration, GstBuffer ** buffer)
+{
+  GstBuffer *buf;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  buf = gst_buffer_new_and_alloc (packet->bytes);
+  if (!buf) {
+    GST_WARNING_OBJECT (enc, "Could not allocate buffer");
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+
+  gst_buffer_fill (buf, 0, packet->packet, packet->bytes);
+  /* see ext/ogg/README; OFFSET_END takes "our" granulepos, OFFSET its
+   * time representation */
+  GST_BUFFER_OFFSET_END (buf) =
+      granulepos_add (packet->granulepos, enc->granulepos_offset,
+      enc->info.keyframe_granule_shift);
+  GST_BUFFER_OFFSET (buf) = granulepos_to_timestamp (enc,
+      GST_BUFFER_OFFSET_END (buf));
+
+  GST_BUFFER_TIMESTAMP (buf) = timestamp;
+  GST_BUFFER_DURATION (buf) = duration;
+
+  if (enc->next_discont) {
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+    enc->next_discont = FALSE;
+  }
+
+  /* the second most significant bit of the first data byte is cleared
+   * for keyframes */
+  if (packet->bytes > 0 && (packet->packet[0] & 0x40) == 0) {
+    GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+  } else {
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+  }
+  enc->packetno++;
+
+done:
+  *buffer = buf;
+  return ret;
+}
+
+/* push out the buffer and do internal bookkeeping */
+static GstFlowReturn
+theora_push_buffer (GstTheoraEnc * enc, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+
+  enc->bytes_out += gst_buffer_get_size (buffer);
+
+  ret = gst_pad_push (enc->srcpad, buffer);
+
+  return ret;
+}
+
+static GstFlowReturn
+theora_push_packet (GstTheoraEnc * enc, ogg_packet * packet,
+    GstClockTime timestamp, GstClockTime running_time, GstClockTime duration)
+{
+  GstBuffer *buf;
+  GstFlowReturn ret;
+
+  ret =
+      theora_buffer_from_packet (enc, packet, timestamp, running_time, duration,
+      &buf);
+  if (ret == GST_FLOW_OK)
+    ret = theora_push_buffer (enc, buf);
+
+  return ret;
+}
+
+static GstCaps *
+theora_set_header_on_caps (GstCaps * caps, GSList * buffers)
+{
+  GstStructure *structure;
+  GValue array = { 0 };
+  GValue value = { 0 };
+  GstBuffer *buffer;
+  GSList *walk;
+
+  caps = gst_caps_make_writable (caps);
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* put copies of the buffers in a fixed list */
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  for (walk = buffers; walk; walk = walk->next) {
+    buffer = walk->data;
+
+    /* mark buffer */
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_IN_CAPS);
+
+    /* Copy buffer, because we can't use the original -
+     * it creates a circular refcount with the caps<->buffers */
+    buffer = gst_buffer_copy (buffer);
+
+    g_value_init (&value, GST_TYPE_BUFFER);
+    gst_value_set_buffer (&value, buffer);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+
+    /* Unref our copy */
+    gst_buffer_unref (buffer);
+  }
+
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&array);
+
+  return caps;
+}
+
+static void
+theora_enc_force_keyframe (GstTheoraEnc * enc)
+{
+  GstClockTime next_ts;
+
+  /* make sure timestamps increment after resetting the decoder */
+  next_ts = enc->next_ts + enc->timestamp_offset;
+
+  theora_enc_reset (enc);
+  enc->granulepos_offset =
+      gst_util_uint64_scale (next_ts, enc->vinfo.fps_n,
+      GST_SECOND * enc->vinfo.fps_d);
+  enc->timestamp_offset = next_ts;
+  enc->next_ts = 0;
+}
+
+static gboolean
+theora_enc_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstTheoraEnc *enc;
+  ogg_packet op;
+  gboolean res;
+
+  enc = GST_THEORA_ENC (GST_PAD_PARENT (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = theora_enc_sink_setcaps (enc, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &enc->segment);
+
+      res = gst_pad_push_event (enc->srcpad, event);
+      break;
+    }
+    case GST_EVENT_EOS:
+      if (enc->initialised) {
+        /* push last packet with eos flag, should not be called */
+        while (th_encode_packetout (enc->encoder, 1, &op)) {
+          GstClockTime next_time =
+              th_granule_time (enc->encoder, op.granulepos) * GST_SECOND;
+
+          theora_push_packet (enc, &op, GST_CLOCK_TIME_NONE, enc->next_ts,
+              next_time - enc->next_ts);
+          enc->next_ts = next_time;
+        }
+      }
+      if (enc->initialised && enc->multipass_cache_fd
+          && enc->multipass_mode == MULTIPASS_MODE_FIRST_PASS)
+        theora_enc_write_multipass_cache (enc, TRUE, TRUE);
+
+      theora_enc_clear_multipass_cache (enc);
+
+      res = gst_pad_push_event (enc->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&enc->segment, GST_FORMAT_UNDEFINED);
+      res = gst_pad_push_event (enc->srcpad, event);
+      break;
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+    {
+      const GstStructure *s;
+
+      s = gst_event_get_structure (event);
+
+      if (gst_structure_has_name (s, "GstForceKeyUnit"))
+        theora_enc_force_keyframe (enc);
+      res = gst_pad_push_event (enc->srcpad, event);
+      break;
+    }
+    default:
+      res = gst_pad_push_event (enc->srcpad, event);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+theora_enc_src_event (GstPad * pad, GstEvent * event)
+{
+  GstTheoraEnc *enc;
+  gboolean res = TRUE;
+
+  enc = GST_THEORA_ENC (GST_PAD_PARENT (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CUSTOM_UPSTREAM:
+    {
+      const GstStructure *s;
+
+      s = gst_event_get_structure (event);
+
+      if (gst_structure_has_name (s, "GstForceKeyUnit")) {
+        GST_OBJECT_LOCK (enc);
+        enc->force_keyframe = TRUE;
+        GST_OBJECT_UNLOCK (enc);
+        /* consume the event */
+        res = TRUE;
+        gst_event_unref (event);
+      } else {
+        res = gst_pad_push_event (enc->sinkpad, event);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_push_event (enc->sinkpad, event);
+      break;
+  }
+
+  return res;
+}
+
+static gboolean
+theora_enc_is_discontinuous (GstTheoraEnc * enc, GstClockTime timestamp,
+    GstClockTime duration)
+{
+  GstClockTimeDiff max_diff;
+  gboolean ret = FALSE;
+
+  /* Allow 3/4 a frame off */
+  max_diff = (enc->info.fps_denominator * GST_SECOND * 3) /
+      (enc->info.fps_numerator * 4);
+
+  if (timestamp != GST_CLOCK_TIME_NONE
+      && enc->expected_ts != GST_CLOCK_TIME_NONE) {
+    if ((GstClockTimeDiff) (timestamp - enc->expected_ts) > max_diff) {
+      GST_DEBUG_OBJECT (enc, "Incoming TS %" GST_TIME_FORMAT
+          " exceeds expected value %" GST_TIME_FORMAT
+          " by too much, marking discontinuity",
+          GST_TIME_ARGS (timestamp), GST_TIME_ARGS (enc->expected_ts));
+      ret = TRUE;
+    }
+  }
+
+  if (GST_CLOCK_TIME_IS_VALID (duration))
+    enc->expected_ts = timestamp + duration;
+  else
+    enc->expected_ts = GST_CLOCK_TIME_NONE;
+
+  return ret;
+}
+
+static void
+theora_enc_init_buffer (th_ycbcr_buffer buf, GstVideoFrame * frame)
+{
+  guint i;
+
+  /* According to Theora developer Timothy Terriberry, the Theora 
+   * encoder will not use memory outside of pic_width/height, even when
+   * the frame size is bigger. The values outside this region will be encoded
+   * to default values.
+   * Due to this, setting the frame's width/height as the buffer width/height
+   * is perfectly ok, even though it does not strictly look ok.
+   */
+  for (i = 0; i < 3; i++) {
+    buf[i].width = GST_VIDEO_FRAME_COMP_WIDTH (frame, i);
+    buf[i].height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, i);
+    buf[i].data = GST_VIDEO_FRAME_COMP_DATA (frame, i);
+    buf[i].stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, i);
+  }
+}
+
+static gboolean
+theora_enc_read_multipass_cache (GstTheoraEnc * enc)
+{
+  GstBuffer *cache_buf;
+  const guint8 *cache_data;
+  gsize bytes_read = 0;
+  gint bytes_consumed = 0;
+  GIOStatus stat = G_IO_STATUS_NORMAL;
+  gboolean done = FALSE;
+
+  while (!done) {
+    if (gst_adapter_available (enc->multipass_cache_adapter) == 0) {
+      guint8 *data;
+      gsize size;
+
+      cache_buf = gst_buffer_new_and_alloc (512);
+
+      data = gst_buffer_map (cache_buf, &size, NULL, GST_MAP_READ);
+      stat = g_io_channel_read_chars (enc->multipass_cache_fd,
+          (gchar *) data, size, &bytes_read, NULL);
+
+      if (bytes_read <= 0) {
+        gst_buffer_unmap (cache_buf, data, 0);
+        gst_buffer_unref (cache_buf);
+        break;
+      } else {
+        gst_buffer_unmap (cache_buf, data, bytes_read);
+        gst_adapter_push (enc->multipass_cache_adapter, cache_buf);
+      }
+    }
+    if (gst_adapter_available (enc->multipass_cache_adapter) == 0)
+      break;
+
+    bytes_read =
+        MIN (gst_adapter_available (enc->multipass_cache_adapter), 512);
+
+    cache_data = gst_adapter_map (enc->multipass_cache_adapter, bytes_read);
+
+    bytes_consumed =
+        th_encode_ctl (enc->encoder, TH_ENCCTL_2PASS_IN, (guint8 *) cache_data,
+        bytes_read);
+    gst_adapter_unmap (enc->multipass_cache_adapter, 0);
+
+    done = bytes_consumed <= 0;
+    if (bytes_consumed > 0)
+      gst_adapter_flush (enc->multipass_cache_adapter, bytes_consumed);
+  }
+
+  if (stat == G_IO_STATUS_ERROR || (stat == G_IO_STATUS_EOF && bytes_read == 0)
+      || bytes_consumed < 0) {
+    GST_ELEMENT_ERROR (enc, RESOURCE, READ, (NULL),
+        ("Failed to read multipass cache file"));
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+theora_enc_write_multipass_cache (GstTheoraEnc * enc, gboolean begin,
+    gboolean eos)
+{
+  GError *err = NULL;
+  GIOStatus stat = G_IO_STATUS_NORMAL;
+  gint bytes_read = 0;
+  gsize bytes_written = 0;
+  gchar *buf;
+
+  if (begin)
+    stat = g_io_channel_seek_position (enc->multipass_cache_fd, 0, G_SEEK_SET,
+        &err);
+  if (stat != G_IO_STATUS_ERROR) {
+    do {
+      bytes_read =
+          th_encode_ctl (enc->encoder, TH_ENCCTL_2PASS_OUT, &buf, sizeof (buf));
+      if (bytes_read > 0)
+        g_io_channel_write_chars (enc->multipass_cache_fd, buf, bytes_read,
+            &bytes_written, NULL);
+    } while (bytes_read > 0 && bytes_written > 0);
+
+  }
+
+  if (stat == G_IO_STATUS_ERROR || bytes_read < 0) {
+    if (begin) {
+      if (eos)
+        GST_ELEMENT_WARNING (enc, RESOURCE, WRITE, (NULL),
+            ("Failed to seek to beginning of multipass cache file: %s",
+                err->message));
+      else
+        GST_ELEMENT_ERROR (enc, RESOURCE, WRITE, (NULL),
+            ("Failed to seek to beginning of multipass cache file: %s",
+                err->message));
+    } else {
+      GST_ELEMENT_ERROR (enc, RESOURCE, WRITE, (NULL),
+          ("Failed to write multipass cache file"));
+    }
+    if (err)
+      g_error_free (err);
+
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static GstFlowReturn
+theora_enc_encode_and_push (GstTheoraEnc * enc, ogg_packet op,
+    GstClockTime timestamp, GstClockTime running_time,
+    GstClockTime duration, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+  th_ycbcr_buffer ycbcr;
+  gint res;
+  GstVideoFrame frame;
+
+  gst_video_frame_map (&frame, &enc->vinfo, buffer, GST_MAP_READ);
+  theora_enc_init_buffer (ycbcr, &frame);
+
+  if (theora_enc_is_discontinuous (enc, running_time, duration)) {
+    theora_enc_reset (enc);
+    enc->granulepos_offset =
+        gst_util_uint64_scale (running_time, enc->vinfo.fps_n,
+        GST_SECOND * enc->vinfo.fps_d);
+    enc->timestamp_offset = running_time;
+    enc->next_ts = 0;
+    enc->next_discont = TRUE;
+  }
+
+  if (enc->multipass_cache_fd
+      && enc->multipass_mode == MULTIPASS_MODE_SECOND_PASS) {
+    if (!theora_enc_read_multipass_cache (enc)) {
+      ret = GST_FLOW_ERROR;
+      goto multipass_read_failed;
+    }
+  }
+
+  res = th_encode_ycbcr_in (enc->encoder, ycbcr);
+  /* none of the failure cases can happen here */
+  g_assert (res == 0);
+
+  if (enc->multipass_cache_fd
+      && enc->multipass_mode == MULTIPASS_MODE_FIRST_PASS) {
+    if (!theora_enc_write_multipass_cache (enc, FALSE, FALSE)) {
+      ret = GST_FLOW_ERROR;
+      goto multipass_write_failed;
+    }
+  }
+
+  ret = GST_FLOW_OK;
+  while (th_encode_packetout (enc->encoder, 0, &op)) {
+    GstClockTime next_time;
+
+    next_time = th_granule_time (enc->encoder, op.granulepos) * GST_SECOND;
+
+    ret =
+        theora_push_packet (enc, &op, timestamp, enc->next_ts,
+        next_time - enc->next_ts);
+
+    enc->next_ts = next_time;
+    if (ret != GST_FLOW_OK)
+      goto data_push;
+  }
+
+done:
+  gst_video_frame_unmap (&frame);
+  gst_buffer_unref (buffer);
+
+  return ret;
+
+  /* ERRORS */
+multipass_read_failed:
+  {
+    GST_DEBUG_OBJECT (enc, "multipass read failed");
+    goto done;
+  }
+multipass_write_failed:
+  {
+    GST_DEBUG_OBJECT (enc, "multipass write failed");
+    goto done;
+  }
+data_push:
+  {
+    GST_DEBUG_OBJECT (enc, "error pushing buffer: %s", gst_flow_get_name (ret));
+    goto done;
+  }
+}
+
+static GstFlowReturn
+theora_enc_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstTheoraEnc *enc;
+  ogg_packet op;
+  GstClockTime timestamp, duration, running_time;
+  GstFlowReturn ret;
+  gboolean force_keyframe;
+
+  enc = GST_THEORA_ENC (GST_PAD_PARENT (pad));
+
+  /* we keep track of two timelines.
+   * - The timestamps from the incomming buffers, which we copy to the outgoing
+   *   encoded buffers as-is. We need to do this as we simply forward the
+   *   newsegment events.
+   * - The running_time of the buffers, which we use to construct the granulepos
+   *   in the packets.
+   */
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  duration = GST_BUFFER_DURATION (buffer);
+
+  running_time =
+      gst_segment_to_running_time (&enc->segment, GST_FORMAT_TIME, timestamp);
+  if ((gint64) running_time < 0) {
+    GST_DEBUG_OBJECT (enc, "Dropping buffer, timestamp: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  }
+
+  GST_OBJECT_LOCK (enc);
+  if (enc->bitrate_changed) {
+    long int bitrate = enc->video_bitrate;
+
+    th_encode_ctl (enc->encoder, TH_ENCCTL_SET_BITRATE, &bitrate,
+        sizeof (long int));
+    enc->bitrate_changed = FALSE;
+  }
+
+  if (enc->quality_changed) {
+    long int quality = enc->video_quality;
+
+    th_encode_ctl (enc->encoder, TH_ENCCTL_SET_QUALITY, &quality,
+        sizeof (long int));
+    enc->quality_changed = FALSE;
+  }
+
+  /* see if we need to schedule a keyframe */
+  force_keyframe = enc->force_keyframe;
+  enc->force_keyframe = FALSE;
+  GST_OBJECT_UNLOCK (enc);
+
+  if (force_keyframe) {
+    GstClockTime stream_time;
+    GstStructure *s;
+
+    stream_time = gst_segment_to_stream_time (&enc->segment,
+        GST_FORMAT_TIME, timestamp);
+
+    s = gst_structure_new ("GstForceKeyUnit",
+        "timestamp", G_TYPE_UINT64, timestamp,
+        "stream-time", G_TYPE_UINT64, stream_time,
+        "running-time", G_TYPE_UINT64, running_time, NULL);
+
+    theora_enc_force_keyframe (enc);
+
+    gst_pad_push_event (enc->srcpad,
+        gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s));
+  }
+
+  /* make sure we copy the discont flag to the next outgoing buffer when it's
+   * set on the incomming buffer */
+  if (GST_BUFFER_IS_DISCONT (buffer)) {
+    enc->next_discont = TRUE;
+  }
+
+  if (enc->packetno == 0) {
+    /* no packets written yet, setup headers */
+    GstCaps *caps;
+    GstBuffer *buf;
+    GSList *buffers = NULL;
+    int result;
+
+    enc->granulepos_offset = 0;
+    enc->timestamp_offset = 0;
+
+    GST_DEBUG_OBJECT (enc, "output headers");
+    /* Theora streams begin with three headers; the initial header (with
+       most of the codec setup parameters) which is mandated by the Ogg
+       bitstream spec.  The second header holds any comment fields.  The
+       third header holds the bitstream codebook.  We merely need to
+       make the headers, then pass them to libtheora one at a time;
+       libtheora handles the additional Ogg bitstream constraints */
+
+    /* create the remaining theora headers */
+    th_comment_clear (&enc->comment);
+    th_comment_init (&enc->comment);
+
+    while ((result =
+            th_encode_flushheader (enc->encoder, &enc->comment, &op)) > 0) {
+      ret =
+          theora_buffer_from_packet (enc, &op, GST_CLOCK_TIME_NONE,
+          GST_CLOCK_TIME_NONE, GST_CLOCK_TIME_NONE, &buf);
+      if (ret != GST_FLOW_OK) {
+        goto header_buffer_alloc;
+      }
+      buffers = g_slist_prepend (buffers, buf);
+    }
+    if (result < 0) {
+      g_slist_foreach (buffers, (GFunc) gst_buffer_unref, NULL);
+      g_slist_free (buffers);
+      goto encoder_disabled;
+    }
+
+    buffers = g_slist_reverse (buffers);
+
+    /* mark buffers and put on caps */
+    caps = gst_caps_new_simple ("video/x-theora",
+        "width", G_TYPE_INT, enc->vinfo.width,
+        "height", G_TYPE_INT, enc->vinfo.height,
+        "framerate", GST_TYPE_FRACTION, enc->vinfo.fps_n, enc->vinfo.fps_d,
+        "pixel-aspect-ratio", GST_TYPE_FRACTION, enc->vinfo.par_n,
+        enc->vinfo.par_d, NULL);
+    caps = theora_set_header_on_caps (caps, buffers);
+    GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps);
+    gst_pad_set_caps (enc->srcpad, caps);
+    gst_caps_unref (caps);
+
+    /* push out the header buffers */
+    while (buffers) {
+      buf = buffers->data;
+      buffers = g_slist_delete_link (buffers, buffers);
+      if ((ret = theora_push_buffer (enc, buf)) != GST_FLOW_OK) {
+        g_slist_foreach (buffers, (GFunc) gst_buffer_unref, NULL);
+        g_slist_free (buffers);
+        goto header_push;
+      }
+    }
+
+    enc->granulepos_offset =
+        gst_util_uint64_scale (running_time, enc->vinfo.fps_n,
+        GST_SECOND * enc->vinfo.fps_d);
+    enc->timestamp_offset = running_time;
+    enc->next_ts = 0;
+  }
+
+  ret = theora_enc_encode_and_push (enc, op, timestamp, running_time, duration,
+      buffer);
+
+  return ret;
+
+  /* ERRORS */
+header_buffer_alloc:
+  {
+    gst_buffer_unref (buffer);
+    return ret;
+  }
+header_push:
+  {
+    gst_buffer_unref (buffer);
+    return ret;
+  }
+encoder_disabled:
+  {
+    GST_ELEMENT_ERROR (enc, STREAM, ENCODE, (NULL),
+        ("libtheora has been compiled with the encoder disabled"));
+    gst_buffer_unref (buffer);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstStateChangeReturn
+theora_enc_change_state (GstElement * element, GstStateChange transition)
+{
+  GstTheoraEnc *enc;
+  GstStateChangeReturn ret;
+
+  enc = GST_THEORA_ENC (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_DEBUG_OBJECT (enc, "READY->PAUSED Initing theora state");
+      th_info_init (&enc->info);
+      th_comment_init (&enc->comment);
+      enc->packetno = 0;
+      enc->force_keyframe = FALSE;
+
+      if (enc->multipass_mode >= MULTIPASS_MODE_FIRST_PASS) {
+        GError *err = NULL;
+
+        if (!enc->multipass_cache_file) {
+          ret = GST_STATE_CHANGE_FAILURE;
+          GST_ELEMENT_ERROR (enc, LIBRARY, SETTINGS, (NULL), (NULL));
+          return ret;
+        }
+        enc->multipass_cache_fd =
+            g_io_channel_new_file (enc->multipass_cache_file,
+            (enc->multipass_mode == MULTIPASS_MODE_FIRST_PASS ? "w" : "r"),
+            &err);
+
+        if (enc->multipass_mode == MULTIPASS_MODE_SECOND_PASS)
+          enc->multipass_cache_adapter = gst_adapter_new ();
+
+        if (!enc->multipass_cache_fd) {
+          ret = GST_STATE_CHANGE_FAILURE;
+          GST_ELEMENT_ERROR (enc, RESOURCE, OPEN_READ, (NULL),
+              ("Failed to open multipass cache file: %s", err->message));
+          g_error_free (err);
+          return ret;
+        }
+
+        g_io_channel_set_encoding (enc->multipass_cache_fd, NULL, NULL);
+      }
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (enc, "PAUSED->READY Clearing theora state");
+      if (enc->encoder) {
+        th_encode_free (enc->encoder);
+        enc->encoder = NULL;
+      }
+      th_comment_clear (&enc->comment);
+      th_info_clear (&enc->info);
+
+      theora_enc_clear (enc);
+      enc->initialised = FALSE;
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+theora_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTheoraEnc *enc = GST_THEORA_ENC (object);
+
+  switch (prop_id) {
+    case PROP_CENTER:
+    case PROP_BORDER:
+    case PROP_QUICK:
+    case PROP_KEYFRAME_THRESHOLD:
+    case PROP_KEYFRAME_MINDISTANCE:
+    case PROP_NOISE_SENSITIVITY:
+    case PROP_SHARPNESS:
+      /* kept for API compat, but ignored */
+      break;
+    case PROP_BITRATE:
+      GST_OBJECT_LOCK (enc);
+      enc->video_bitrate = g_value_get_int (value) * 1000;
+      enc->bitrate_changed = TRUE;
+      GST_OBJECT_UNLOCK (enc);
+      break;
+    case PROP_QUALITY:
+      GST_OBJECT_LOCK (enc);
+      if (GST_STATE (enc) >= GST_STATE_PAUSED && enc->video_bitrate > 0) {
+        GST_WARNING_OBJECT (object, "Can't change from bitrate to quality mode"
+            " while playing");
+      } else {
+        enc->video_quality = g_value_get_int (value);
+        enc->video_bitrate = 0;
+        enc->quality_changed = TRUE;
+      }
+      GST_OBJECT_UNLOCK (enc);
+      break;
+    case PROP_KEYFRAME_AUTO:
+      enc->keyframe_auto = g_value_get_boolean (value);
+      break;
+    case PROP_KEYFRAME_FREQ:
+      enc->keyframe_freq = g_value_get_int (value);
+      break;
+    case PROP_KEYFRAME_FREQ_FORCE:
+      enc->keyframe_force = g_value_get_int (value);
+      break;
+    case PROP_SPEEDLEVEL:
+      enc->speed_level = g_value_get_int (value);
+      if (enc->encoder) {
+        th_encode_ctl (enc->encoder, TH_ENCCTL_SET_SPLEVEL, &enc->speed_level,
+            sizeof (enc->speed_level));
+      }
+      break;
+    case PROP_VP3_COMPATIBLE:
+      enc->vp3_compatible = g_value_get_boolean (value);
+      break;
+    case PROP_DROP_FRAMES:
+      enc->drop_frames = g_value_get_boolean (value);
+      break;
+    case PROP_CAP_OVERFLOW:
+      enc->cap_overflow = g_value_get_boolean (value);
+      break;
+    case PROP_CAP_UNDERFLOW:
+      enc->cap_underflow = g_value_get_boolean (value);
+      break;
+    case PROP_RATE_BUFFER:
+      enc->rate_buffer = g_value_get_int (value);
+      break;
+    case PROP_MULTIPASS_CACHE_FILE:
+      enc->multipass_cache_file = g_value_dup_string (value);
+      break;
+    case PROP_MULTIPASS_MODE:
+      enc->multipass_mode = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+theora_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTheoraEnc *enc = GST_THEORA_ENC (object);
+
+  switch (prop_id) {
+    case PROP_CENTER:
+      g_value_set_boolean (value, TRUE);
+      break;
+    case PROP_BORDER:
+      g_value_set_enum (value, BORDER_BLACK);
+      break;
+    case PROP_BITRATE:
+      GST_OBJECT_LOCK (enc);
+      g_value_set_int (value, enc->video_bitrate / 1000);
+      GST_OBJECT_UNLOCK (enc);
+      break;
+    case PROP_QUALITY:
+      GST_OBJECT_LOCK (enc);
+      g_value_set_int (value, enc->video_quality);
+      GST_OBJECT_UNLOCK (enc);
+      break;
+    case PROP_QUICK:
+      g_value_set_boolean (value, TRUE);
+      break;
+    case PROP_KEYFRAME_AUTO:
+      g_value_set_boolean (value, enc->keyframe_auto);
+      break;
+    case PROP_KEYFRAME_FREQ:
+      g_value_set_int (value, enc->keyframe_freq);
+      break;
+    case PROP_KEYFRAME_FREQ_FORCE:
+      g_value_set_int (value, enc->keyframe_force);
+      break;
+    case PROP_KEYFRAME_THRESHOLD:
+      g_value_set_int (value, 80);
+      break;
+    case PROP_KEYFRAME_MINDISTANCE:
+      g_value_set_int (value, 8);
+      break;
+    case PROP_NOISE_SENSITIVITY:
+      g_value_set_int (value, 1);
+      break;
+    case PROP_SHARPNESS:
+      g_value_set_int (value, 0);
+      break;
+    case PROP_SPEEDLEVEL:
+      g_value_set_int (value, enc->speed_level);
+      break;
+    case PROP_VP3_COMPATIBLE:
+      g_value_set_boolean (value, enc->vp3_compatible);
+      break;
+    case PROP_DROP_FRAMES:
+      g_value_set_boolean (value, enc->drop_frames);
+      break;
+    case PROP_CAP_OVERFLOW:
+      g_value_set_boolean (value, enc->cap_overflow);
+      break;
+    case PROP_CAP_UNDERFLOW:
+      g_value_set_boolean (value, enc->cap_underflow);
+      break;
+    case PROP_RATE_BUFFER:
+      g_value_set_int (value, enc->rate_buffer);
+      break;
+    case PROP_MULTIPASS_CACHE_FILE:
+      g_value_set_string (value, enc->multipass_cache_file);
+      break;
+    case PROP_MULTIPASS_MODE:
+      g_value_set_enum (value, enc->multipass_mode);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/ext/theora/gsttheoraenc.h b/ext/theora/gsttheoraenc.h
new file mode 100644
index 0000000..8df35de
--- /dev/null
+++ b/ext/theora/gsttheoraenc.h
@@ -0,0 +1,141 @@
+/* GStreamer
+ * Copyright (C) 2004 Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_THEORAENC_H__
+#define __GST_THEORAENC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <theora/theoraenc.h>
+
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_THEORA_ENC \
+  (gst_theora_enc_get_type())
+#define GST_THEORA_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_THEORA_ENC,GstTheoraEnc))
+#define GST_THEORA_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_THEORA_ENC,GstTheoraEncClass))
+#define GST_IS_THEORA_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_THEORA_ENC))
+#define GST_IS_THEORA_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_THEORA_ENC))
+
+typedef struct _GstTheoraEnc GstTheoraEnc;
+typedef struct _GstTheoraEncClass GstTheoraEncClass;
+
+/**
+ * GstTheoraEncBorderMode:
+ * @BORDER_NONE: no border
+ * @BORDER_BLACK: black border
+ * @BORDER_MIRROR: Mirror image in border
+ *
+ * Border color to add when sizes not multiple of 16. 
+ */ 
+typedef enum
+{
+  BORDER_NONE,
+  BORDER_BLACK,
+  BORDER_MIRROR
+}
+GstTheoraEncBorderMode;
+
+/**
+ * GstTheoraEncMultipassMode:
+ * @MULTIPASS_MODE_SINGLE_PASS: Single pass encoding
+ * @MULTIPASS_MODE_FIRST_PASS: First pass of two pass encoding
+ * @MULTIPASS_MODE_SECOND_PASS: Second pass of two pass encoding
+ *
+ */
+typedef enum
+{
+  MULTIPASS_MODE_SINGLE_PASS,
+  MULTIPASS_MODE_FIRST_PASS,
+  MULTIPASS_MODE_SECOND_PASS
+} GstTheoraEncMultipassMode;
+
+/**
+ * GstTheoraEnc:
+ *
+ * Opaque data structure.
+ */
+struct _GstTheoraEnc
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  GstSegment segment;
+
+  ogg_stream_state to;
+
+  th_enc_ctx *encoder;
+  th_info info;
+  th_comment comment;
+  gboolean initialised;
+
+  gint video_bitrate;           /* bitrate target for Theora video */
+  gboolean bitrate_changed;
+  gint video_quality;           /* Theora quality selector 0 = low, 63 = high */
+  gboolean quality_changed;
+  gboolean keyframe_auto;
+  gint keyframe_freq;
+  gint keyframe_force;
+
+  GstVideoInfo vinfo;
+  gint info_width, info_height;
+  GstClockTime next_ts;
+
+  GstClockTime expected_ts;
+  gboolean next_discont;
+
+  gboolean force_keyframe;
+
+  guint packetno;
+  guint64 bytes_out;
+  guint64 granulepos_offset;
+  guint64 timestamp_offset;
+
+  gint speed_level;
+  gboolean vp3_compatible;
+  gboolean drop_frames;
+  gboolean cap_overflow;
+  gboolean cap_underflow;
+  int rate_buffer;
+
+  GstTheoraEncMultipassMode multipass_mode;
+  GIOChannel *multipass_cache_fd;
+  GstAdapter *multipass_cache_adapter;
+  gchar *multipass_cache_file;
+};
+
+struct _GstTheoraEncClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_theora_enc_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_THEORAENC_H__ */
+
diff --git a/ext/theora/gsttheoraparse.c b/ext/theora/gsttheoraparse.c
new file mode 100644
index 0000000..25b046f
--- /dev/null
+++ b/ext/theora/gsttheoraparse.c
@@ -0,0 +1,936 @@
+/* GStreamer
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2006 Andy Wingo <wingo@pobox.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-theoraparse
+ * @see_also: theoradec, oggdemux, vorbisparse
+ *
+ * The theoraparse element will parse the header packets of the Theora
+ * stream and put them as the streamheader in the caps. This is used in the
+ * multifdsink case where you want to stream live theora streams to multiple
+ * clients, each client has to receive the streamheaders first before they can
+ * consume the theora packets.
+ *
+ * This element also makes sure that the buffers that it pushes out are properly
+ * timestamped and that their offset and offset_end are set. The buffers that
+ * theoraparse outputs have all of the metadata that oggmux expects to receive,
+ * which allows you to (for example) remux an ogg/theora file.
+ *
+ * In addition, this element allows you to fix badly synchronized streams. You
+ * pass in an array of (granule time, buffer time) synchronization points via
+ * the synchronization-points GValueArray property, and this element will adjust
+ * the granulepos values that it outputs. The adjustment will be made by
+ * offsetting all buffers that it outputs by a specified amount, and updating
+ * that offset from the value array whenever a keyframe is processed.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=video.ogg ! oggdemux ! theoraparse ! fakesink
+ * ]| This pipeline shows that the streamheader is set in the caps, and that each
+ * buffer has the timestamp, duration, offset, and offset_end set.
+ * |[
+ * gst-launch filesrc location=video.ogg ! oggdemux ! theoraparse \
+ *            ! oggmux ! filesink location=video-remuxed.ogg
+ * ]| This pipeline shows remuxing. video-remuxed.ogg might not be exactly the same
+ * as video.ogg, but they should produce exactly the same decoded data.
+ * </refsect2>
+ *
+ * Last reviewed on 2008-05-28 (0.10.20)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gsttheoraparse.h"
+
+#define GST_CAT_DEFAULT theoraparse_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+static GstStaticPadTemplate theora_parse_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-theora")
+    );
+
+static GstStaticPadTemplate theora_parse_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-theora")
+    );
+
+enum
+{
+  PROP_0,
+  PROP_SYNCHRONIZATION_POINTS
+};
+
+#define gst_theora_parse_parent_class parent_class
+G_DEFINE_TYPE (GstTheoraParse, gst_theora_parse, GST_TYPE_ELEMENT);
+
+static void theora_parse_dispose (GObject * object);
+static void theora_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void theora_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+
+static GstFlowReturn theora_parse_chain (GstPad * pad, GstBuffer * buffer);
+static GstStateChangeReturn theora_parse_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean theora_parse_sink_event (GstPad * pad, GstEvent * event);
+static gboolean theora_parse_src_query (GstPad * pad, GstQuery * query);
+
+static void
+gst_theora_parse_class_init (GstTheoraParseClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->dispose = theora_parse_dispose;
+  gobject_class->get_property = theora_parse_get_property;
+  gobject_class->set_property = theora_parse_set_property;
+
+  /**
+   * GstTheoraParse:sychronization-points
+   *
+   * An array of (granuletime, buffertime) pairs
+   *
+   * Since: 0.10.10
+   */
+  g_object_class_install_property (gobject_class, PROP_SYNCHRONIZATION_POINTS,
+      g_param_spec_value_array ("synchronization-points",
+          "Synchronization points",
+          "An array of (granuletime, buffertime) pairs",
+          g_param_spec_uint64 ("time", "Time",
+              "Time (either granuletime or buffertime)", 0, G_MAXUINT64, 0,
+              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_parse_src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&theora_parse_sink_factory));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Theora video parser", "Codec/Parser/Video",
+      "parse raw theora streams", "Andy Wingo <wingo@pobox.com>");
+
+  gstelement_class->change_state = theora_parse_change_state;
+
+  GST_DEBUG_CATEGORY_INIT (theoraparse_debug, "theoraparse", 0,
+      "Theora parser");
+}
+
+static void
+gst_theora_parse_init (GstTheoraParse * parse)
+{
+  parse->sinkpad =
+      gst_pad_new_from_static_template (&theora_parse_sink_factory, "sink");
+  gst_pad_set_chain_function (parse->sinkpad, theora_parse_chain);
+  gst_pad_set_event_function (parse->sinkpad, theora_parse_sink_event);
+  gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+
+  parse->srcpad =
+      gst_pad_new_from_static_template (&theora_parse_src_factory, "src");
+  gst_pad_set_query_function (parse->srcpad, theora_parse_src_query);
+  gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
+}
+
+static void
+theora_parse_dispose (GObject * object)
+{
+  GstTheoraParse *parse = GST_THEORA_PARSE (object);
+
+  g_free (parse->times);
+  parse->times = NULL;
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+theora_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTheoraParse *parse = GST_THEORA_PARSE (object);
+
+  switch (prop_id) {
+    case PROP_SYNCHRONIZATION_POINTS:
+    {
+      GValueArray *array;
+      guint i;
+
+      array = g_value_get_boxed (value);
+
+      if (array) {
+        if (array->n_values % 2)
+          goto odd_values;
+
+        g_free (parse->times);
+        parse->times = g_new (GstClockTime, array->n_values);
+        parse->npairs = array->n_values / 2;
+        for (i = 0; i < array->n_values; i++)
+          parse->times[i] = g_value_get_uint64 (&array->values[i]);
+      } else {
+        g_free (parse->times);
+        parse->npairs = 0;
+      }
+    }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  return;
+
+odd_values:
+  {
+    g_critical ("expected an even number of time values for "
+        "synchronization-points");
+    return;
+  }
+}
+
+static void
+theora_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTheoraParse *parse = GST_THEORA_PARSE (object);
+
+  switch (prop_id) {
+    case PROP_SYNCHRONIZATION_POINTS:
+    {
+      GValueArray *array = NULL;
+      guint i;
+
+      array = g_value_array_new (parse->npairs * 2);
+
+      for (i = 0; i < parse->npairs; i++) {
+        GValue v = { 0, };
+
+        g_value_init (&v, G_TYPE_UINT64);
+        g_value_set_uint64 (&v, parse->times[i * 2]);
+        g_value_array_append (array, &v);
+        g_value_set_uint64 (&v, parse->times[i * 2 + 1]);
+        g_value_array_append (array, &v);
+        g_value_unset (&v);
+      }
+
+      g_value_set_boxed (value, array);
+    }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+theora_parse_set_header_on_caps (GstTheoraParse * parse, GstCaps * caps)
+{
+  GstBuffer **bufs;
+  GstStructure *structure;
+  gint i;
+  GValue array = { 0 };
+  GValue value = { 0 };
+
+  bufs = parse->streamheader;
+  structure = gst_caps_get_structure (caps, 0);
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  for (i = 0; i < 3; i++) {
+    if (bufs[i] == NULL)
+      continue;
+
+    bufs[i] = gst_buffer_make_writable (bufs[i]);
+    GST_BUFFER_FLAG_SET (bufs[i], GST_BUFFER_FLAG_IN_CAPS);
+
+    g_value_init (&value, GST_TYPE_BUFFER);
+    gst_value_set_buffer (&value, bufs[i]);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+  }
+
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&array);
+}
+
+/* two tasks to do here: set the streamheader on the caps, and use libtheora to
+   parse the headers */
+static void
+theora_parse_set_streamheader (GstTheoraParse * parse)
+{
+  GstCaps *caps;
+  gint i;
+  guint32 bitstream_version;
+  th_setup_info *setup = NULL;
+
+  g_assert (!parse->streamheader_received);
+
+  caps = gst_caps_make_writable (gst_pad_get_caps (parse->srcpad, NULL));
+  theora_parse_set_header_on_caps (parse, caps);
+  GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps);
+  gst_pad_set_caps (parse->srcpad, caps);
+  gst_caps_unref (caps);
+
+  for (i = 0; i < 3; i++) {
+    ogg_packet packet;
+    GstBuffer *buf;
+    int ret;
+    gsize size;
+
+    buf = parse->streamheader[i];
+    if (buf == NULL)
+      continue;
+
+    packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+    packet.bytes = size;
+    packet.granulepos = GST_BUFFER_OFFSET_END (buf);
+    packet.packetno = i + 1;
+    packet.e_o_s = 0;
+    packet.b_o_s = (i == 0);
+    ret = th_decode_headerin (&parse->info, &parse->comment, &setup, &packet);
+    gst_buffer_unmap (buf, packet.packet, size);
+    if (ret < 0) {
+      GST_WARNING_OBJECT (parse, "Failed to decode Theora header %d: %d\n",
+          i + 1, ret);
+    }
+  }
+  if (setup) {
+    th_setup_free (setup);
+  }
+
+  parse->fps_n = parse->info.fps_numerator;
+  parse->fps_d = parse->info.fps_denominator;
+  parse->shift = parse->info.keyframe_granule_shift;
+
+  /* With libtheora-1.0beta1 the granulepos scheme was changed:
+   * where earlier the granulepos refered to the index/beginning
+   * of a frame, it now refers to the end, which matches the use
+   * in vorbis/speex. We check the bitstream version from the header so
+   * we know which way to interpret the incoming granuepos
+   */
+  bitstream_version = (parse->info.version_major << 16) |
+      (parse->info.version_minor << 8) | parse->info.version_subminor;
+  parse->is_old_bitstream = (bitstream_version <= 0x00030200);
+
+  parse->streamheader_received = TRUE;
+}
+
+static void
+theora_parse_drain_event_queue (GstTheoraParse * parse)
+{
+  while (parse->event_queue->length) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (parse->event_queue));
+    gst_pad_event_default (parse->sinkpad, event);
+  }
+}
+
+static void
+theora_parse_push_headers (GstTheoraParse * parse)
+{
+  gint i;
+
+  theora_parse_drain_event_queue (parse);
+
+  if (!parse->streamheader_received)
+    theora_parse_set_streamheader (parse);
+
+  /* ignore return values, we pass along the result of pushing data packets only
+   */
+  for (i = 0; i < 3; i++) {
+    GstBuffer *buf;
+
+    if ((buf = parse->streamheader[i])) {
+      gst_pad_push (parse->srcpad, buf);
+      parse->streamheader[i] = NULL;
+    }
+  }
+}
+
+static void
+theora_parse_clear_queue (GstTheoraParse * parse)
+{
+  while (parse->buffer_queue->length) {
+    GstBuffer *buf;
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+    gst_buffer_unref (buf);
+  }
+  while (parse->event_queue->length) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (parse->event_queue));
+    gst_event_unref (event);
+  }
+}
+
+static gint64
+make_granulepos (GstTheoraParse * parse, gint64 keyframe, gint64 frame)
+{
+  gint64 iframe;
+
+  if (keyframe == -1)
+    keyframe = 0;
+  /* If using newer theora, offset the granulepos by +1, see comment in
+   * theora_parse_set_streamheader.
+   * 
+   * We don't increment keyframe directly, as internally we always index frames
+   * starting from 0 and we do some sanity checking below. */
+  if (!parse->is_old_bitstream)
+    iframe = keyframe + 1;
+  else
+    iframe = keyframe;
+
+  g_return_val_if_fail (frame >= keyframe, -1);
+  g_return_val_if_fail (frame - keyframe < 1 << parse->shift, -1);
+
+  return (iframe << parse->shift) + (frame - keyframe);
+}
+
+static void
+parse_granulepos (GstTheoraParse * parse, gint64 granulepos,
+    gint64 * keyframe, gint64 * frame)
+{
+  gint64 kf;
+
+  kf = granulepos >> parse->shift;
+  /* If using newer theora, offset the granulepos by -1, see comment
+   * in theora_parse_set_streamheader */
+  if (!parse->is_old_bitstream)
+    kf -= 1;
+  if (keyframe)
+    *keyframe = kf;
+  if (frame)
+    *frame = kf + (granulepos & ((1 << parse->shift) - 1));
+}
+
+static gboolean
+is_keyframe (GstBuffer * buf)
+{
+  gsize size;
+  guint8 data[1];
+
+  size = gst_buffer_get_size (buf);
+  if (size == 0)
+    return FALSE;
+
+  gst_buffer_extract (buf, 0, data, 1);
+
+  return ((data[0] & 0x40) == 0);
+}
+
+static void
+theora_parse_munge_granulepos (GstTheoraParse * parse, GstBuffer * buf,
+    gint64 keyframe, gint64 frame)
+{
+  gint64 frames_diff;
+  GstClockTimeDiff time_diff;
+
+  if (keyframe == frame) {
+    gint i;
+
+    /* update granule_offset */
+    for (i = 0; i < parse->npairs; i++) {
+      if (parse->times[i * 2] >= GST_BUFFER_OFFSET (buf))
+        break;
+    }
+    if (i > 0) {
+      /* time_diff gets reset below */
+      time_diff = parse->times[i * 2 - 1] - parse->times[i * 2 - 2];
+      parse->granule_offset = gst_util_uint64_scale (time_diff,
+          parse->fps_n, parse->fps_d * GST_SECOND);
+      parse->granule_offset <<= parse->shift;
+    }
+  }
+
+  frames_diff = parse->granule_offset >> parse->shift;
+  time_diff = gst_util_uint64_scale_int (GST_SECOND * frames_diff,
+      parse->fps_d, parse->fps_n);
+
+  GST_DEBUG_OBJECT (parse, "offsetting theora stream by %" G_GINT64_FORMAT
+      " frames (%" GST_TIME_FORMAT ")", frames_diff, GST_TIME_ARGS (time_diff));
+
+  GST_BUFFER_OFFSET_END (buf) += parse->granule_offset;
+  GST_BUFFER_OFFSET (buf) += time_diff;
+  GST_BUFFER_TIMESTAMP (buf) += time_diff;
+}
+
+static GstFlowReturn
+theora_parse_push_buffer (GstTheoraParse * parse, GstBuffer * buf,
+    gint64 keyframe, gint64 frame)
+{
+
+  GstClockTime this_time, next_time;
+
+  this_time = gst_util_uint64_scale_int (GST_SECOND * frame,
+      parse->fps_d, parse->fps_n);
+
+  next_time = gst_util_uint64_scale_int (GST_SECOND * (frame + 1),
+      parse->fps_d, parse->fps_n);
+
+  GST_BUFFER_OFFSET_END (buf) = make_granulepos (parse, keyframe, frame);
+  GST_BUFFER_OFFSET (buf) = this_time;
+  GST_BUFFER_TIMESTAMP (buf) = this_time;
+  GST_BUFFER_DURATION (buf) = next_time - this_time;
+
+  if (parse->times)
+    theora_parse_munge_granulepos (parse, buf, keyframe, frame);
+
+  GST_DEBUG_OBJECT (parse, "pushing buffer with granulepos %" G_GINT64_FORMAT
+      "|%" G_GINT64_FORMAT, keyframe, frame - keyframe);
+
+  return gst_pad_push (parse->srcpad, buf);
+}
+
+static GstFlowReturn
+theora_parse_drain_queue_prematurely (GstTheoraParse * parse)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  /* got an EOS event, make sure to push out any buffers that were in the queue
+   * -- won't normally be the case, but this catches the
+   * didn't-get-a-granulepos-on-the-last-packet case. Assuming a continuous
+   * stream. */
+
+  GST_DEBUG_OBJECT (parse, "got EOS, draining queue");
+
+  /* if we get an eos before pushing the streamheaders, drain our events before
+   * eos */
+  theora_parse_drain_event_queue (parse);
+
+  while (!g_queue_is_empty (parse->buffer_queue)) {
+    GstBuffer *buf;
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+
+    parse->prev_frame++;
+
+    if (is_keyframe (buf))
+      /* we have a keyframe */
+      parse->prev_keyframe = parse->prev_frame;
+    else
+      GST_BUFFER_FLAGS (buf) |= GST_BUFFER_FLAG_DELTA_UNIT;
+
+    if (parse->prev_keyframe < 0) {
+      if (GST_BUFFER_OFFSET_END_IS_VALID (buf)) {
+        parse_granulepos (parse, GST_BUFFER_OFFSET_END (buf),
+            &parse->prev_keyframe, NULL);
+      } else {
+        /* No previous keyframe known; can't extract one from this frame. That
+         * means we can't do any valid output for this frame, just continue to
+         * the next frame.
+         */
+        gst_buffer_unref (buf);
+        continue;
+      }
+    }
+
+    ret = theora_parse_push_buffer (parse, buf, parse->prev_keyframe,
+        parse->prev_frame);
+
+    if (ret != GST_FLOW_OK)
+      goto done;
+  }
+
+done:
+  return ret;
+}
+
+static GstFlowReturn
+theora_parse_drain_queue (GstTheoraParse * parse, gint64 granulepos)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  gint64 keyframe, prev_frame, frame;
+
+  parse_granulepos (parse, granulepos, &keyframe, &frame);
+
+  GST_DEBUG ("draining queue of length %d",
+      g_queue_get_length (parse->buffer_queue));
+
+  GST_LOG_OBJECT (parse, "gp %" G_GINT64_FORMAT ", kf %" G_GINT64_FORMAT
+      ", frame %" G_GINT64_FORMAT, granulepos, keyframe, frame);
+
+  prev_frame = frame - g_queue_get_length (parse->buffer_queue);
+
+  GST_LOG_OBJECT (parse,
+      "new prev %" G_GINT64_FORMAT ", prev %" G_GINT64_FORMAT, prev_frame,
+      parse->prev_frame);
+
+  if (prev_frame < parse->prev_frame) {
+    GST_WARNING ("jumped %" G_GINT64_FORMAT
+        " frames backwards! not sure what to do here",
+        parse->prev_frame - prev_frame);
+    parse->prev_frame = prev_frame;
+  } else if (prev_frame > parse->prev_frame) {
+    GST_INFO ("discontinuity detected (%" G_GINT64_FORMAT
+        " frames)", prev_frame - parse->prev_frame);
+    if (keyframe <= prev_frame && keyframe > parse->prev_keyframe)
+      parse->prev_keyframe = keyframe;
+    parse->prev_frame = prev_frame;
+  }
+
+  while (!g_queue_is_empty (parse->buffer_queue)) {
+    GstBuffer *buf;
+
+    parse->prev_frame++;
+    g_assert (parse->prev_frame >= 0);
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+
+    if (is_keyframe (buf))
+      /* we have a keyframe */
+      parse->prev_keyframe = parse->prev_frame;
+    else
+      GST_BUFFER_FLAGS (buf) |= GST_BUFFER_FLAG_DELTA_UNIT;
+
+    ret = theora_parse_push_buffer (parse, buf, parse->prev_keyframe,
+        parse->prev_frame);
+
+    if (ret != GST_FLOW_OK)
+      goto done;
+  }
+
+done:
+  return ret;
+}
+
+static GstFlowReturn
+theora_parse_queue_buffer (GstTheoraParse * parse, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  buf = gst_buffer_make_writable (buf);
+
+  g_queue_push_tail (parse->buffer_queue, buf);
+
+  if (GST_BUFFER_OFFSET_END_IS_VALID (buf)) {
+    if (parse->prev_keyframe < 0) {
+      parse_granulepos (parse, GST_BUFFER_OFFSET_END (buf),
+          &parse->prev_keyframe, NULL);
+    }
+    ret = theora_parse_drain_queue (parse, GST_BUFFER_OFFSET_END (buf));
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+theora_parse_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+  GstTheoraParse *parse;
+  guint8 *data, header;
+  gsize size;
+  gboolean have_header;
+
+  parse = GST_THEORA_PARSE (gst_pad_get_parent (pad));
+
+  have_header = FALSE;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  header = data[0];
+  gst_buffer_unmap (buffer, data, size);
+
+  if (size >= 1) {
+    if (header & 0x80)
+      have_header = TRUE;
+  }
+
+  if (have_header) {
+    if (parse->send_streamheader) {
+      /* we need to collect the headers still */
+      /* so put it on the streamheader list and return */
+      if (header >= 0x80 && header <= 0x82)
+        parse->streamheader[header - 0x80] = buffer;
+    }
+    ret = GST_FLOW_OK;
+  } else {
+    /* data packet, push the headers we collected before */
+    if (parse->send_streamheader) {
+      theora_parse_push_headers (parse);
+      parse->send_streamheader = FALSE;
+    }
+
+    ret = theora_parse_queue_buffer (parse, buffer);
+  }
+
+  gst_object_unref (parse);
+
+  return ret;
+}
+
+static gboolean
+theora_parse_queue_event (GstTheoraParse * parse, GstEvent * event)
+{
+  g_queue_push_tail (parse->event_queue, event);
+  return TRUE;
+}
+
+static gboolean
+theora_parse_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret;
+  GstTheoraParse *parse;
+
+  parse = GST_THEORA_PARSE (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      theora_parse_clear_queue (parse);
+      parse->prev_keyframe = -1;
+      parse->prev_frame = -1;
+      ret = gst_pad_event_default (pad, event);
+      break;
+    case GST_EVENT_EOS:
+      theora_parse_drain_queue_prematurely (parse);
+      ret = gst_pad_event_default (pad, event);
+      break;
+    default:
+      if (parse->send_streamheader && GST_EVENT_IS_SERIALIZED (event))
+        ret = theora_parse_queue_event (parse, event);
+      else
+        ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (parse);
+
+  return ret;
+}
+
+static gboolean
+theora_parse_src_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstTheoraParse *parse;
+  guint64 scale = 1;
+
+  if (src_format == *dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  parse = GST_THEORA_PARSE (gst_pad_get_parent (pad));
+
+  /* we need the info part before we can done something */
+  if (!parse->streamheader_received)
+    goto no_header;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          *dest_value = gst_util_uint64_scale_int (src_value, 2,
+              parse->info.pic_height * parse->info.pic_width * 3);
+          break;
+        case GST_FORMAT_TIME:
+          /* seems like a rather silly conversion, implement me if you like */
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          scale = 3 * (parse->info.pic_width * parse->info.pic_height) / 2;
+        case GST_FORMAT_DEFAULT:
+          *dest_value = scale * gst_util_uint64_scale (src_value,
+              parse->info.fps_numerator,
+              parse->info.fps_denominator * GST_SECOND);
+          break;
+        default:
+          GST_DEBUG_OBJECT (parse, "cannot convert to format %s",
+              gst_format_get_name (*dest_format));
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale (src_value,
+              GST_SECOND * parse->info.fps_denominator,
+              parse->info.fps_numerator);
+          break;
+        case GST_FORMAT_BYTES:
+          *dest_value = gst_util_uint64_scale_int (src_value,
+              3 * parse->info.pic_width * parse->info.pic_height, 2);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+done:
+  gst_object_unref (parse);
+  return res;
+
+  /* ERRORS */
+no_header:
+  {
+    GST_DEBUG_OBJECT (parse, "no header yet, cannot convert");
+    res = FALSE;
+    goto done;
+  }
+}
+
+static gboolean
+theora_parse_src_query (GstPad * pad, GstQuery * query)
+{
+  GstTheoraParse *parse;
+
+  gboolean res = FALSE;
+
+  parse = GST_THEORA_PARSE (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      gint64 frame, value;
+      GstFormat my_format, format;
+      gint64 time;
+
+      frame = parse->prev_frame;
+
+      GST_LOG_OBJECT (parse,
+          "query %p: we have current frame: %" G_GINT64_FORMAT, query, frame);
+
+      /* parse format */
+      gst_query_parse_position (query, &format, NULL);
+
+      /* and convert to the final format in two steps with time as the 
+       * intermediate step */
+      my_format = GST_FORMAT_TIME;
+      if (!(res =
+              theora_parse_src_convert (parse->sinkpad, GST_FORMAT_DEFAULT,
+                  frame, &my_format, &time)))
+        goto error;
+
+      /* fixme: handle segments
+         time = (time - parse->segment.start) + parse->segment.time;
+       */
+
+      GST_LOG_OBJECT (parse,
+          "query %p: our time: %" GST_TIME_FORMAT " (conv to %s)",
+          query, GST_TIME_ARGS (time), gst_format_get_name (format));
+
+      if (!(res =
+              theora_parse_src_convert (pad, my_format, time, &format, &value)))
+        goto error;
+
+      gst_query_set_position (query, format, value);
+
+      GST_LOG_OBJECT (parse,
+          "query %p: we return %" G_GINT64_FORMAT " (format %u)", query, value,
+          format);
+
+      break;
+    }
+    case GST_QUERY_DURATION:
+      /* forward to peer for total */
+      if (!(res = gst_pad_query (GST_PAD_PEER (parse->sinkpad), query)))
+        goto error;
+      break;
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              theora_parse_src_convert (pad, src_fmt, src_val, &dest_fmt,
+                  &dest_val)))
+        goto error;
+
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+done:
+  gst_object_unref (parse);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (parse, "query failed");
+    goto done;
+  }
+}
+
+static GstStateChangeReturn
+theora_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstTheoraParse *parse = GST_THEORA_PARSE (element);
+  GstStateChangeReturn ret;
+  gint i;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      th_info_init (&parse->info);
+      th_comment_init (&parse->comment);
+      parse->send_streamheader = TRUE;
+      parse->buffer_queue = g_queue_new ();
+      parse->event_queue = g_queue_new ();
+      parse->prev_keyframe = -1;
+      parse->prev_frame = -1;
+      parse->granule_offset = 0;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      th_info_clear (&parse->info);
+      th_comment_clear (&parse->comment);
+      theora_parse_clear_queue (parse);
+      g_queue_free (parse->buffer_queue);
+      g_queue_free (parse->event_queue);
+      parse->buffer_queue = NULL;
+      for (i = 0; i < 3; i++) {
+        if (parse->streamheader[i]) {
+          gst_buffer_unref (parse->streamheader[i]);
+          parse->streamheader[i] = NULL;
+        }
+      }
+      parse->streamheader_received = FALSE;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/ext/theora/gsttheoraparse.h b/ext/theora/gsttheoraparse.h
new file mode 100644
index 0000000..8314287
--- /dev/null
+++ b/ext/theora/gsttheoraparse.h
@@ -0,0 +1,87 @@
+/* -*- c-basic-offset: 2 -*-
+ * GStreamer
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2006 Andy Wingo <wingo@pobox.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_THEORA_PARSE_H__
+#define __GST_THEORA_PARSE_H__
+
+
+#include <gst/gst.h>
+#include <theora/theoradec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_THEORA_PARSE \
+  (gst_theora_parse_get_type())
+#define GST_THEORA_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_THEORA_PARSE,GstTheoraParse))
+#define GST_THEORA_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_THEORA_PARSE,GstTheoraParseClass))
+#define GST_IS_THEORA_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_THEORA_PARSE))
+#define GST_IS_THEORA_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_THEORA_PARSE))
+
+typedef struct _GstTheoraParse GstTheoraParse;
+typedef struct _GstTheoraParseClass GstTheoraParseClass;
+
+/**
+ * GstTheoraParse:
+ *
+ * Opaque data structure.
+ */
+struct _GstTheoraParse {
+  GstElement            element;
+
+  GstPad *              sinkpad;
+  GstPad *              srcpad;
+
+  gboolean              send_streamheader;
+  gboolean              streamheader_received;
+  gboolean		is_old_bitstream;
+  GstBuffer *		streamheader[3];
+
+  GQueue *		event_queue;
+  GQueue *		buffer_queue;
+
+  th_info		info;
+  th_comment            comment;
+
+  gint64		prev_frame;
+  gint64		prev_keyframe;
+  guint32		fps_n;
+  guint32		fps_d;
+  gint			shift;
+  gint64		granule_offset;
+
+  GstClockTime		*times;
+  gint			npairs;
+};
+
+struct _GstTheoraParseClass {
+  GstElementClass parent_class;
+};
+
+GType gst_theora_parse_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_THEORA_PARSE_H__ */
diff --git a/ext/vorbis/Makefile.am b/ext/vorbis/Makefile.am
new file mode 100644
index 0000000..7c18ff1
--- /dev/null
+++ b/ext/vorbis/Makefile.am
@@ -0,0 +1,60 @@
+plugin_LTLIBRARIES =
+
+if USE_VORBIS
+plugin_LTLIBRARIES += libgstvorbis.la
+
+libgstvorbis_la_SOURCES = gstvorbis.c \
+			  gstvorbisdec.c \
+			  gstvorbisdeclib.c \
+			  gstvorbisenc.c \
+			  gstvorbisparse.c \
+			  gstvorbistag.c \
+			  gstvorbiscommon.c
+
+libgstvorbis_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(VORBIS_CFLAGS)
+## AM_PATH_VORBIS also sets VORBISENC_LIBS
+libgstvorbis_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) \
+	$(VORBIS_LIBS) $(VORBISENC_LIBS)
+libgstvorbis_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvorbis_la_LIBTOOLFLAGS = --tag=disable-static
+endif
+
+if USE_IVORBIS
+plugin_LTLIBRARIES += libgstivorbisdec.la
+
+libgstivorbisdec_la_SOURCES = gstivorbisdec.c \
+	gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+libgstivorbisdec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+	-DTREMOR $(IVORBIS_CFLAGS)
+libgstivorbisdec_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) $(IVORBIS_LIBS)
+libgstivorbisdec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstivorbisdec_la_LIBTOOLFLAGS = --tag=disable-static
+endif
+
+noinst_HEADERS = gstvorbisenc.h \
+		 gstvorbisdec.h \
+		 gstvorbisdeclib.h \
+		 gstvorbisparse.h \
+		 gstvorbistag.h \
+		 gstvorbiscommon.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstivorbisdec_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \
+	 -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \
+	           $(libgstivorbisdec_la_LIBADD) \
+		   -lvorbisidec \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/ext/vorbis/Makefile.in b/ext/vorbis/Makefile.in
new file mode 100644
index 0000000..d0c1d7d
--- /dev/null
+++ b/ext/vorbis/Makefile.in
@@ -0,0 +1,925 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_VORBIS_TRUE@am__append_1 = libgstvorbis.la
+@USE_IVORBIS_TRUE@am__append_2 = libgstivorbisdec.la
+subdir = ext/vorbis
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+@USE_IVORBIS_TRUE@	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+@USE_IVORBIS_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__libgstivorbisdec_la_SOURCES_DIST = gstivorbisdec.c gstvorbisdec.c \
+	gstvorbisdeclib.c gstvorbiscommon.c
+@USE_IVORBIS_TRUE@am_libgstivorbisdec_la_OBJECTS =  \
+@USE_IVORBIS_TRUE@	libgstivorbisdec_la-gstivorbisdec.lo \
+@USE_IVORBIS_TRUE@	libgstivorbisdec_la-gstvorbisdec.lo \
+@USE_IVORBIS_TRUE@	libgstivorbisdec_la-gstvorbisdeclib.lo \
+@USE_IVORBIS_TRUE@	libgstivorbisdec_la-gstvorbiscommon.lo
+libgstivorbisdec_la_OBJECTS = $(am_libgstivorbisdec_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstivorbisdec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) \
+	$(libgstivorbisdec_la_LDFLAGS) $(LDFLAGS) -o $@
+@USE_IVORBIS_TRUE@am_libgstivorbisdec_la_rpath = -rpath $(plugindir)
+@USE_VORBIS_TRUE@libgstvorbis_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+@USE_VORBIS_TRUE@	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+@USE_VORBIS_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@USE_VORBIS_TRUE@	$(am__DEPENDENCIES_1)
+am__libgstvorbis_la_SOURCES_DIST = gstvorbis.c gstvorbisdec.c \
+	gstvorbisdeclib.c gstvorbisenc.c gstvorbisparse.c \
+	gstvorbistag.c gstvorbiscommon.c
+@USE_VORBIS_TRUE@am_libgstvorbis_la_OBJECTS =  \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbis.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbisdec.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbisdeclib.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbisenc.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbisparse.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbistag.lo \
+@USE_VORBIS_TRUE@	libgstvorbis_la-gstvorbiscommon.lo
+libgstvorbis_la_OBJECTS = $(am_libgstvorbis_la_OBJECTS)
+libgstvorbis_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstvorbis_la_CFLAGS) $(CFLAGS) \
+	$(libgstvorbis_la_LDFLAGS) $(LDFLAGS) -o $@
+@USE_VORBIS_TRUE@am_libgstvorbis_la_rpath = -rpath $(plugindir)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstivorbisdec_la_SOURCES) $(libgstvorbis_la_SOURCES)
+DIST_SOURCES = $(am__libgstivorbisdec_la_SOURCES_DIST) \
+	$(am__libgstvorbis_la_SOURCES_DIST)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = $(am__append_1) $(am__append_2)
+@USE_VORBIS_TRUE@libgstvorbis_la_SOURCES = gstvorbis.c \
+@USE_VORBIS_TRUE@			  gstvorbisdec.c \
+@USE_VORBIS_TRUE@			  gstvorbisdeclib.c \
+@USE_VORBIS_TRUE@			  gstvorbisenc.c \
+@USE_VORBIS_TRUE@			  gstvorbisparse.c \
+@USE_VORBIS_TRUE@			  gstvorbistag.c \
+@USE_VORBIS_TRUE@			  gstvorbiscommon.c
+
+@USE_VORBIS_TRUE@libgstvorbis_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(VORBIS_CFLAGS)
+@USE_VORBIS_TRUE@libgstvorbis_la_LIBADD = \
+@USE_VORBIS_TRUE@	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+@USE_VORBIS_TRUE@	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+@USE_VORBIS_TRUE@	$(GST_LIBS) \
+@USE_VORBIS_TRUE@	$(VORBIS_LIBS) $(VORBISENC_LIBS)
+
+@USE_VORBIS_TRUE@libgstvorbis_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+@USE_VORBIS_TRUE@libgstvorbis_la_LIBTOOLFLAGS = --tag=disable-static
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_SOURCES = gstivorbisdec.c \
+@USE_IVORBIS_TRUE@	gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+@USE_IVORBIS_TRUE@	-DTREMOR $(IVORBIS_CFLAGS)
+
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_LIBADD = \
+@USE_IVORBIS_TRUE@	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+@USE_IVORBIS_TRUE@	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+@USE_IVORBIS_TRUE@	$(GST_LIBS) $(IVORBIS_LIBS)
+
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+@USE_IVORBIS_TRUE@libgstivorbisdec_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstvorbisenc.h \
+		 gstvorbisdec.h \
+		 gstvorbisdeclib.h \
+		 gstvorbisparse.h \
+		 gstvorbistag.h \
+		 gstvorbiscommon.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/vorbis/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu ext/vorbis/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstivorbisdec.la: $(libgstivorbisdec_la_OBJECTS) $(libgstivorbisdec_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstivorbisdec_la_LINK) $(am_libgstivorbisdec_la_rpath) $(libgstivorbisdec_la_OBJECTS) $(libgstivorbisdec_la_LIBADD) $(LIBS)
+libgstvorbis.la: $(libgstvorbis_la_OBJECTS) $(libgstvorbis_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvorbis_la_LINK) $(am_libgstvorbis_la_rpath) $(libgstvorbis_la_OBJECTS) $(libgstvorbis_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstivorbisdec_la-gstivorbisdec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstivorbisdec_la-gstvorbiscommon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstivorbisdec_la-gstvorbisdec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstivorbisdec_la-gstvorbisdeclib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbis.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbiscommon.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbisdec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbisdeclib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbisenc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbisparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvorbis_la-gstvorbistag.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstivorbisdec_la-gstivorbisdec.lo: gstivorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -MT libgstivorbisdec_la-gstivorbisdec.lo -MD -MP -MF $(DEPDIR)/libgstivorbisdec_la-gstivorbisdec.Tpo -c -o libgstivorbisdec_la-gstivorbisdec.lo `test -f 'gstivorbisdec.c' || echo '$(srcdir)/'`gstivorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstivorbisdec_la-gstivorbisdec.Tpo $(DEPDIR)/libgstivorbisdec_la-gstivorbisdec.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstivorbisdec.c' object='libgstivorbisdec_la-gstivorbisdec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -c -o libgstivorbisdec_la-gstivorbisdec.lo `test -f 'gstivorbisdec.c' || echo '$(srcdir)/'`gstivorbisdec.c
+
+libgstivorbisdec_la-gstvorbisdec.lo: gstvorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -MT libgstivorbisdec_la-gstvorbisdec.lo -MD -MP -MF $(DEPDIR)/libgstivorbisdec_la-gstvorbisdec.Tpo -c -o libgstivorbisdec_la-gstvorbisdec.lo `test -f 'gstvorbisdec.c' || echo '$(srcdir)/'`gstvorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstivorbisdec_la-gstvorbisdec.Tpo $(DEPDIR)/libgstivorbisdec_la-gstvorbisdec.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisdec.c' object='libgstivorbisdec_la-gstvorbisdec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -c -o libgstivorbisdec_la-gstvorbisdec.lo `test -f 'gstvorbisdec.c' || echo '$(srcdir)/'`gstvorbisdec.c
+
+libgstivorbisdec_la-gstvorbisdeclib.lo: gstvorbisdeclib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -MT libgstivorbisdec_la-gstvorbisdeclib.lo -MD -MP -MF $(DEPDIR)/libgstivorbisdec_la-gstvorbisdeclib.Tpo -c -o libgstivorbisdec_la-gstvorbisdeclib.lo `test -f 'gstvorbisdeclib.c' || echo '$(srcdir)/'`gstvorbisdeclib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstivorbisdec_la-gstvorbisdeclib.Tpo $(DEPDIR)/libgstivorbisdec_la-gstvorbisdeclib.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisdeclib.c' object='libgstivorbisdec_la-gstvorbisdeclib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -c -o libgstivorbisdec_la-gstvorbisdeclib.lo `test -f 'gstvorbisdeclib.c' || echo '$(srcdir)/'`gstvorbisdeclib.c
+
+libgstivorbisdec_la-gstvorbiscommon.lo: gstvorbiscommon.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -MT libgstivorbisdec_la-gstvorbiscommon.lo -MD -MP -MF $(DEPDIR)/libgstivorbisdec_la-gstvorbiscommon.Tpo -c -o libgstivorbisdec_la-gstvorbiscommon.lo `test -f 'gstvorbiscommon.c' || echo '$(srcdir)/'`gstvorbiscommon.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstivorbisdec_la-gstvorbiscommon.Tpo $(DEPDIR)/libgstivorbisdec_la-gstvorbiscommon.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbiscommon.c' object='libgstivorbisdec_la-gstvorbiscommon.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstivorbisdec_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstivorbisdec_la_CFLAGS) $(CFLAGS) -c -o libgstivorbisdec_la-gstvorbiscommon.lo `test -f 'gstvorbiscommon.c' || echo '$(srcdir)/'`gstvorbiscommon.c
+
+libgstvorbis_la-gstvorbis.lo: gstvorbis.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbis.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbis.Tpo -c -o libgstvorbis_la-gstvorbis.lo `test -f 'gstvorbis.c' || echo '$(srcdir)/'`gstvorbis.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbis.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbis.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbis.c' object='libgstvorbis_la-gstvorbis.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbis.lo `test -f 'gstvorbis.c' || echo '$(srcdir)/'`gstvorbis.c
+
+libgstvorbis_la-gstvorbisdec.lo: gstvorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbisdec.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbisdec.Tpo -c -o libgstvorbis_la-gstvorbisdec.lo `test -f 'gstvorbisdec.c' || echo '$(srcdir)/'`gstvorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbisdec.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbisdec.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisdec.c' object='libgstvorbis_la-gstvorbisdec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbisdec.lo `test -f 'gstvorbisdec.c' || echo '$(srcdir)/'`gstvorbisdec.c
+
+libgstvorbis_la-gstvorbisdeclib.lo: gstvorbisdeclib.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbisdeclib.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbisdeclib.Tpo -c -o libgstvorbis_la-gstvorbisdeclib.lo `test -f 'gstvorbisdeclib.c' || echo '$(srcdir)/'`gstvorbisdeclib.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbisdeclib.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbisdeclib.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisdeclib.c' object='libgstvorbis_la-gstvorbisdeclib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbisdeclib.lo `test -f 'gstvorbisdeclib.c' || echo '$(srcdir)/'`gstvorbisdeclib.c
+
+libgstvorbis_la-gstvorbisenc.lo: gstvorbisenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbisenc.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbisenc.Tpo -c -o libgstvorbis_la-gstvorbisenc.lo `test -f 'gstvorbisenc.c' || echo '$(srcdir)/'`gstvorbisenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbisenc.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbisenc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisenc.c' object='libgstvorbis_la-gstvorbisenc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbisenc.lo `test -f 'gstvorbisenc.c' || echo '$(srcdir)/'`gstvorbisenc.c
+
+libgstvorbis_la-gstvorbisparse.lo: gstvorbisparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbisparse.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbisparse.Tpo -c -o libgstvorbis_la-gstvorbisparse.lo `test -f 'gstvorbisparse.c' || echo '$(srcdir)/'`gstvorbisparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbisparse.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbisparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbisparse.c' object='libgstvorbis_la-gstvorbisparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbisparse.lo `test -f 'gstvorbisparse.c' || echo '$(srcdir)/'`gstvorbisparse.c
+
+libgstvorbis_la-gstvorbistag.lo: gstvorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbistag.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbistag.Tpo -c -o libgstvorbis_la-gstvorbistag.lo `test -f 'gstvorbistag.c' || echo '$(srcdir)/'`gstvorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbistag.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbistag.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbistag.c' object='libgstvorbis_la-gstvorbistag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbistag.lo `test -f 'gstvorbistag.c' || echo '$(srcdir)/'`gstvorbistag.c
+
+libgstvorbis_la-gstvorbiscommon.lo: gstvorbiscommon.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -MT libgstvorbis_la-gstvorbiscommon.lo -MD -MP -MF $(DEPDIR)/libgstvorbis_la-gstvorbiscommon.Tpo -c -o libgstvorbis_la-gstvorbiscommon.lo `test -f 'gstvorbiscommon.c' || echo '$(srcdir)/'`gstvorbiscommon.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvorbis_la-gstvorbiscommon.Tpo $(DEPDIR)/libgstvorbis_la-gstvorbiscommon.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbiscommon.c' object='libgstvorbis_la-gstvorbiscommon.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvorbis_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvorbis_la_CFLAGS) $(CFLAGS) -c -o libgstvorbis_la-gstvorbiscommon.lo `test -f 'gstvorbiscommon.c' || echo '$(srcdir)/'`gstvorbiscommon.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstivorbisdec_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \
+	 -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \
+	           $(libgstivorbisdec_la_LIBADD) \
+		   -lvorbisidec \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/vorbis/README b/ext/vorbis/README
new file mode 100644
index 0000000..6b31510
--- /dev/null
+++ b/ext/vorbis/README
@@ -0,0 +1,16 @@
+oggvorbisenc : encodes to vorbis inside an ogg stream. This is not the
+               GStreamer way of doing things and should be removed for 
+	       0.9. It is still called "vorbisenc" for backward compatibility
+	       reasons. It also takes integer audio as input.
+vorbisenc :    Encodes to a raw vorbis stream and should be used together
+ 	       with an ogg muxer such as "oggmux" it is called "rawvorbisenc".
+	       It also takes raw float samples as input.
+
+TODO for 0.9:
+
+- remove oggvorbisenc.c and oggvorbisenc.h
+- remove references to oggvorbisenc.[ch] in the Makefile and in vorbis.c
+- remove the element vorbisenc.
+- rename the element rawvorbisenc to vorbisenc.
+
+
diff --git a/ext/vorbis/gstivorbisdec.c b/ext/vorbis/gstivorbisdec.c
new file mode 100644
index 0000000..d938238
--- /dev/null
+++ b/ext/vorbis/gstivorbisdec.c
@@ -0,0 +1,47 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvorbisdec.h"
+
+GST_DEBUG_CATEGORY (vorbisdec_debug);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+
+  /* if tremor is around, there is probably good reason for it, so preferred */
+  if (!gst_element_register (plugin, "ivorbisdec", GST_RANK_SECONDARY,
+          gst_vorbis_dec_get_type ()))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (vorbisdec_debug, "ivorbisdec", 0,
+      "vorbis decoding element (integer decoder)");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "ivorbisdec",
+    "Vorbis Tremor decoder",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/vorbis/gstvorbis.c b/ext/vorbis/gstvorbis.c
new file mode 100644
index 0000000..f710aaa
--- /dev/null
+++ b/ext/vorbis/gstvorbis.c
@@ -0,0 +1,73 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gst/tag/tag.h"
+
+#include "gstvorbisenc.h"
+#include "gstvorbisdec.h"
+#include "gstvorbisparse.h"
+#include "gstvorbistag.h"
+
+GST_DEBUG_CATEGORY (vorbisenc_debug);
+GST_DEBUG_CATEGORY (vorbisdec_debug);
+GST_DEBUG_CATEGORY (vorbisparse_debug);
+GST_DEBUG_CATEGORY (vorbistag_debug);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "vorbisenc", GST_RANK_PRIMARY,
+          GST_TYPE_VORBISENC))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "vorbisdec", GST_RANK_PRIMARY,
+          gst_vorbis_dec_get_type ()))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "vorbisparse", GST_RANK_NONE,
+          gst_vorbis_parse_get_type ()))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "vorbistag", GST_RANK_NONE,
+          gst_vorbis_tag_get_type ()))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (vorbisenc_debug, "vorbisenc", 0,
+      "vorbis encoding element");
+  GST_DEBUG_CATEGORY_INIT (vorbisdec_debug, "vorbisdec", 0,
+      "vorbis decoding element");
+  GST_DEBUG_CATEGORY_INIT (vorbisparse_debug, "vorbisparse", 0,
+      "vorbis parsing element");
+  GST_DEBUG_CATEGORY_INIT (vorbistag_debug, "vorbistag", 0,
+      "vorbis tagging element");
+
+  gst_tag_register_musicbrainz_tags ();
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "vorbis",
+    "Vorbis plugin library",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/vorbis/gstvorbiscommon.c b/ext/vorbis/gstvorbiscommon.c
new file mode 100644
index 0000000..c4dd408
--- /dev/null
+++ b/ext/vorbis/gstvorbiscommon.c
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvorbiscommon.h"
+
+/* http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9 */
+const GstAudioChannelPosition gst_vorbis_channel_positions[][8] = {
+  {                             /* Mono */
+      GST_AUDIO_CHANNEL_POSITION_FRONT_MONO},
+  {                             /* Stereo */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  {                             /* Stereo + Centre */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  {                             /* Quadraphonic */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  {                             /* Stereo + Centre + rear stereo */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  {                             /* Full 5.1 Surround */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+      },
+  {                             /* 6.1 Surround, in Vorbis spec since 2010-01-13 */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_LFE},
+  {                             /* 7.1 Surround, in Vorbis spec since 2010-01-13 */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE},
+};
diff --git a/ext/vorbis/gstvorbiscommon.h b/ext/vorbis/gstvorbiscommon.h
new file mode 100644
index 0000000..563b8f7
--- /dev/null
+++ b/ext/vorbis/gstvorbiscommon.h
@@ -0,0 +1,28 @@
+/* GStreamer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VORBIS_COMMON_H__
+#define __GST_VORBIS_COMMON_H__
+
+#include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+
+extern const GstAudioChannelPosition gst_vorbis_channel_positions[][8];
+
+#endif /* __GST_VORBIS_COMMON_H__ */
diff --git a/ext/vorbis/gstvorbisdec.c b/ext/vorbis/gstvorbisdec.c
new file mode 100644
index 0000000..d4225e8
--- /dev/null
+++ b/ext/vorbis/gstvorbisdec.c
@@ -0,0 +1,1317 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-vorbisdec
+ * @see_also: vorbisenc, oggdemux
+ *
+ * This element decodes a Vorbis stream to raw float audio.
+ * <ulink url="http://www.vorbis.com/">Vorbis</ulink> is a royalty-free
+ * audio codec maintained by the <ulink url="http://www.xiph.org/">Xiph.org
+ * Foundation</ulink>.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink
+ * ]| Decode an Ogg/Vorbis. To create an Ogg/Vorbis file refer to the documentation of vorbisenc.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstvorbisdec.h"
+#include <string.h>
+#include <gst/audio/audio.h>
+#include <gst/tag/tag.h>
+#include <gst/audio/multichannel.h>
+
+#include "gstvorbiscommon.h"
+
+GST_DEBUG_CATEGORY_EXTERN (vorbisdec_debug);
+#define GST_CAT_DEFAULT vorbisdec_debug
+
+static GstStaticPadTemplate vorbis_dec_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_VORBIS_DEC_SRC_CAPS);
+
+static GstStaticPadTemplate vorbis_dec_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-vorbis")
+    );
+
+#define gst_vorbis_dec_parent_class parent_class
+G_DEFINE_TYPE (GST_VORBIS_DEC_GLIB_TYPE_NAME, gst_vorbis_dec, GST_TYPE_ELEMENT);
+
+static void vorbis_dec_finalize (GObject * object);
+static gboolean vorbis_dec_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn vorbis_dec_chain (GstPad * pad, GstBuffer * buffer);
+static GstFlowReturn vorbis_dec_chain_forward (GstVorbisDec * vd,
+    gboolean discont, GstBuffer * buffer);
+static GstFlowReturn vorbis_dec_chain_reverse (GstVorbisDec * vd,
+    gboolean discont, GstBuffer * buf);
+static GstStateChangeReturn vorbis_dec_change_state (GstElement * element,
+    GstStateChange transition);
+
+static gboolean vorbis_dec_src_event (GstPad * pad, GstEvent * event);
+static gboolean vorbis_dec_src_query (GstPad * pad, GstQuery * query);
+static gboolean vorbis_dec_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat dest_format, gint64 * dest_value);
+
+static gboolean vorbis_dec_sink_query (GstPad * pad, GstQuery * query);
+
+static void
+gst_vorbis_dec_class_init (GstVorbisDecClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->finalize = vorbis_dec_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_dec_src_factory));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_dec_sink_factory));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Vorbis audio decoder", "Codec/Decoder/Audio",
+      GST_VORBIS_DEC_DESCRIPTION,
+      "Benjamin Otte <otte@gnome.org>, Chris Lord <chris@openedhand.com>");
+
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (vorbis_dec_change_state);
+}
+
+static const GstQueryType *
+vorbis_get_query_types (GstPad * pad)
+{
+  static const GstQueryType vorbis_dec_src_query_types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    GST_QUERY_CONVERT,
+    0
+  };
+
+  return vorbis_dec_src_query_types;
+}
+
+static void
+gst_vorbis_dec_init (GstVorbisDec * dec)
+{
+  dec->sinkpad = gst_pad_new_from_static_template (&vorbis_dec_sink_factory,
+      "sink");
+
+  gst_pad_set_event_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (vorbis_dec_sink_event));
+  gst_pad_set_chain_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (vorbis_dec_chain));
+  gst_pad_set_query_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (vorbis_dec_sink_query));
+  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
+
+  dec->srcpad = gst_pad_new_from_static_template (&vorbis_dec_src_factory,
+      "src");
+
+  gst_pad_set_event_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (vorbis_dec_src_event));
+  gst_pad_set_query_type_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (vorbis_get_query_types));
+  gst_pad_set_query_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (vorbis_dec_src_query));
+  gst_pad_use_fixed_caps (dec->srcpad);
+  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
+
+  dec->queued = NULL;
+  dec->pendingevents = NULL;
+  dec->taglist = NULL;
+}
+
+static void
+vorbis_dec_finalize (GObject * object)
+{
+  /* Release any possibly allocated libvorbis data.
+   * _clear functions can safely be called multiple times
+   */
+  GstVorbisDec *vd = GST_VORBIS_DEC (object);
+
+#ifndef USE_TREMOLO
+  vorbis_block_clear (&vd->vb);
+#endif
+
+  vorbis_dsp_clear (&vd->vd);
+  vorbis_comment_clear (&vd->vc);
+  vorbis_info_clear (&vd->vi);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_vorbis_dec_reset (GstVorbisDec * dec)
+{
+  dec->last_timestamp = GST_CLOCK_TIME_NONE;
+  dec->discont = TRUE;
+  dec->seqnum = gst_util_seqnum_next ();
+  gst_segment_init (&dec->segment, GST_FORMAT_TIME);
+
+  g_list_foreach (dec->queued, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->queued);
+  dec->queued = NULL;
+  g_list_foreach (dec->gather, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->gather);
+  dec->gather = NULL;
+  g_list_foreach (dec->decode, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->decode);
+  dec->decode = NULL;
+  g_list_foreach (dec->pendingevents, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (dec->pendingevents);
+  dec->pendingevents = NULL;
+
+  if (dec->taglist)
+    gst_tag_list_free (dec->taglist);
+  dec->taglist = NULL;
+}
+
+
+static gboolean
+vorbis_dec_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstVorbisDec *dec;
+
+  if (src_format == dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  dec = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+
+  if (!dec->initialized)
+    goto no_header;
+
+  if (dec->sinkpad == pad &&
+      (src_format == GST_FORMAT_BYTES || dest_format == GST_FORMAT_BYTES))
+    goto no_format;
+
+  res = gst_audio_info_convert (&dec->info, src_format, src_value, dest_format,
+      dest_value);
+
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+no_header:
+  {
+    GST_DEBUG_OBJECT (dec, "no header packets received");
+    res = FALSE;
+    goto done;
+  }
+no_format:
+  {
+    GST_DEBUG_OBJECT (dec, "formats unsupported");
+    res = FALSE;
+    goto done;
+  }
+}
+
+static gboolean
+vorbis_dec_src_query (GstPad * pad, GstQuery * query)
+{
+  GstVorbisDec *dec;
+  gboolean res = FALSE;
+
+  dec = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (dec == NULL))
+    return FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      gint64 value;
+      GstFormat format;
+      gint64 time;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      /* we start from the last seen time */
+      time = dec->last_timestamp;
+      /* correct for the segment values */
+      time = gst_segment_to_stream_time (&dec->segment, GST_FORMAT_TIME, time);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: our time: %" GST_TIME_FORMAT, query, GST_TIME_ARGS (time));
+
+      /* and convert to the final format */
+      if (!(res =
+              vorbis_dec_convert (pad, GST_FORMAT_TIME, time, format, &value)))
+        goto error;
+
+      gst_query_set_position (query, format, value);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: we return %" G_GINT64_FORMAT " (format %u)", query, value,
+          format);
+
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      res = gst_pad_peer_query (dec->sinkpad, query);
+      if (!res)
+        goto error;
+
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              vorbis_dec_convert (pad, src_fmt, src_val, dest_fmt, &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_WARNING_OBJECT (dec, "error handling query");
+    goto done;
+  }
+}
+
+static gboolean
+vorbis_dec_sink_query (GstPad * pad, GstQuery * query)
+{
+  GstVorbisDec *dec;
+  gboolean res;
+
+  dec = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              vorbis_dec_convert (pad, src_fmt, src_val, dest_fmt, &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+error:
+  {
+    GST_DEBUG_OBJECT (dec, "error converting value");
+    goto done;
+  }
+}
+
+static gboolean
+vorbis_dec_src_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = TRUE;
+  GstVorbisDec *dec;
+
+  dec = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (dec == NULL)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstFormat format, tformat;
+      gdouble rate;
+      GstEvent *real_seek;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
+      gint64 tcur, tstop;
+      guint32 seqnum;
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
+      seqnum = gst_event_get_seqnum (event);
+      gst_event_unref (event);
+
+      /* First bring the requested format to time */
+      tformat = GST_FORMAT_TIME;
+      if (!(res = vorbis_dec_convert (pad, format, cur, tformat, &tcur)))
+        goto convert_error;
+      if (!(res = vorbis_dec_convert (pad, format, stop, tformat, &tstop)))
+        goto convert_error;
+
+      /* then seek with time on the peer */
+      real_seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+          flags, cur_type, tcur, stop_type, tstop);
+      gst_event_set_seqnum (real_seek, seqnum);
+
+      res = gst_pad_push_event (dec->sinkpad, real_seek);
+      break;
+    }
+    default:
+      res = gst_pad_push_event (dec->sinkpad, event);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+convert_error:
+  {
+    GST_DEBUG_OBJECT (dec, "cannot convert start/stop for seek");
+    goto done;
+  }
+}
+
+static gboolean
+vorbis_dec_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret = FALSE;
+  GstVorbisDec *dec;
+
+  dec = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+
+  GST_LOG_OBJECT (dec, "handling event");
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      if (dec->segment.rate < 0.0)
+        vorbis_dec_chain_reverse (dec, TRUE, NULL);
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_START:
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      /* here we must clean any state in the decoder */
+#ifdef HAVE_VORBIS_SYNTHESIS_RESTART
+      vorbis_synthesis_restart (&dec->vd);
+#endif
+      gst_vorbis_dec_reset (dec);
+      ret = gst_pad_push_event (dec->srcpad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      /* we need time for now */
+      if (segment->format != GST_FORMAT_TIME)
+        goto newseg_wrong_format;
+
+      GST_DEBUG_OBJECT (dec, "segment: %" GST_SEGMENT_FORMAT, segment);
+
+      /* now configure the values */
+      gst_segment_copy_into (segment, &dec->segment);
+      dec->seqnum = gst_event_get_seqnum (event);
+
+      if (dec->initialized)
+        /* and forward */
+        ret = gst_pad_push_event (dec->srcpad, event);
+      else {
+        /* store it to send once we're initialized */
+        dec->pendingevents = g_list_append (dec->pendingevents, event);
+        ret = TRUE;
+      }
+      break;
+    }
+    case GST_EVENT_TAG:
+    {
+      if (dec->initialized)
+        /* and forward */
+        ret = gst_pad_push_event (dec->srcpad, event);
+      else {
+        /* store it to send once we're initialized */
+        dec->pendingevents = g_list_append (dec->pendingevents, event);
+        ret = TRUE;
+      }
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return ret;
+
+  /* ERRORS */
+newseg_wrong_format:
+  {
+    GST_DEBUG_OBJECT (dec, "received non TIME newsegment");
+    goto done;
+  }
+}
+
+static GstFlowReturn
+vorbis_handle_identification_packet (GstVorbisDec * vd)
+{
+  GstCaps *caps;
+  GstAudioInfo info;
+  const GstAudioChannelPosition *pos = NULL;
+
+  gst_audio_info_set_format (&info, GST_VORBIS_AUDIO_FORMAT, vd->vi.rate,
+      vd->vi.channels);
+
+  switch (info.channels) {
+    case 1:
+    case 2:
+      /* nothing */
+      break;
+    case 3:
+    case 4:
+    case 5:
+    case 6:
+    case 7:
+    case 8:
+      pos = gst_vorbis_channel_positions[info.channels - 1];
+      break;
+    default:
+    {
+      gint i, max_pos = MAX (info.channels, 64);
+
+      GST_ELEMENT_WARNING (vd, STREAM, DECODE,
+          (NULL), ("Using NONE channel layout for more than 8 channels"));
+      for (i = 0; i < max_pos; i++)
+        info.position[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
+    }
+  }
+
+  caps = gst_audio_info_to_caps (&info);
+  gst_pad_set_caps (vd->srcpad, caps);
+  gst_caps_unref (caps);
+
+  vd->info = info;
+  /* select a copy_samples function, this way we can have specialized versions
+   * for mono/stereo and avoid the depth switch in tremor case */
+  vd->copy_samples = get_copy_sample_func (info.channels);
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+vorbis_handle_comment_packet (GstVorbisDec * vd, ogg_packet * packet)
+{
+  guint bitrate = 0;
+  gchar *encoder = NULL;
+  GstTagList *list, *old_list;
+  guint8 *data;
+  gsize size;
+
+  GST_DEBUG_OBJECT (vd, "parsing comment packet");
+
+  data = gst_ogg_packet_data (packet);
+  size = gst_ogg_packet_size (packet);
+
+  list =
+      gst_tag_list_from_vorbiscomment (data, size, (guint8 *) "\003vorbis", 7,
+      &encoder);
+
+  old_list = vd->taglist;
+  vd->taglist = gst_tag_list_merge (vd->taglist, list, GST_TAG_MERGE_REPLACE);
+
+  if (old_list)
+    gst_tag_list_free (old_list);
+  gst_tag_list_free (list);
+
+  if (!vd->taglist) {
+    GST_ERROR_OBJECT (vd, "couldn't decode comments");
+    vd->taglist = gst_tag_list_new ();
+  }
+  if (encoder) {
+    if (encoder[0])
+      gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_ENCODER, encoder, NULL);
+    g_free (encoder);
+  }
+  gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+      GST_TAG_ENCODER_VERSION, vd->vi.version,
+      GST_TAG_AUDIO_CODEC, "Vorbis", NULL);
+  if (vd->vi.bitrate_nominal > 0 && vd->vi.bitrate_nominal <= 0x7FFFFFFF) {
+    gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_NOMINAL_BITRATE, (guint) vd->vi.bitrate_nominal, NULL);
+    bitrate = vd->vi.bitrate_nominal;
+  }
+  if (vd->vi.bitrate_upper > 0 && vd->vi.bitrate_upper <= 0x7FFFFFFF) {
+    gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_MAXIMUM_BITRATE, (guint) vd->vi.bitrate_upper, NULL);
+    if (!bitrate)
+      bitrate = vd->vi.bitrate_upper;
+  }
+  if (vd->vi.bitrate_lower > 0 && vd->vi.bitrate_lower <= 0x7FFFFFFF) {
+    gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_MINIMUM_BITRATE, (guint) vd->vi.bitrate_lower, NULL);
+    if (!bitrate)
+      bitrate = vd->vi.bitrate_lower;
+  }
+  if (bitrate) {
+    gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_BITRATE, (guint) bitrate, NULL);
+  }
+
+  if (vd->initialized) {
+    gst_element_found_tags_for_pad (GST_ELEMENT_CAST (vd), vd->srcpad,
+        vd->taglist);
+    vd->taglist = NULL;
+  } else {
+    /* Only post them as messages for the time being. *
+     * They will be pushed on the pad once the decoder is initialized */
+    gst_element_post_message (GST_ELEMENT_CAST (vd),
+        gst_message_new_tag (GST_OBJECT (vd), gst_tag_list_copy (vd->taglist)));
+  }
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+vorbis_handle_type_packet (GstVorbisDec * vd)
+{
+  GList *walk;
+  gint res;
+
+  g_assert (vd->initialized == FALSE);
+
+#ifdef USE_TREMOLO
+  if (G_UNLIKELY ((res = vorbis_dsp_init (&vd->vd, &vd->vi))))
+    goto synthesis_init_error;
+#else
+  if (G_UNLIKELY ((res = vorbis_synthesis_init (&vd->vd, &vd->vi))))
+    goto synthesis_init_error;
+
+  if (G_UNLIKELY ((res = vorbis_block_init (&vd->vd, &vd->vb))))
+    goto block_init_error;
+#endif
+
+  vd->initialized = TRUE;
+
+  if (vd->pendingevents) {
+    for (walk = vd->pendingevents; walk; walk = g_list_next (walk))
+      gst_pad_push_event (vd->srcpad, GST_EVENT_CAST (walk->data));
+    g_list_free (vd->pendingevents);
+    vd->pendingevents = NULL;
+  }
+
+  if (vd->taglist) {
+    /* The tags have already been sent on the bus as messages. */
+    gst_pad_push_event (vd->srcpad, gst_event_new_tag (vd->taglist));
+    vd->taglist = NULL;
+  }
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+synthesis_init_error:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("couldn't initialize synthesis (%d)", res));
+    return GST_FLOW_ERROR;
+  }
+block_init_error:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("couldn't initialize block (%d)", res));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+vorbis_handle_header_packet (GstVorbisDec * vd, ogg_packet * packet)
+{
+  GstFlowReturn res;
+  gint ret;
+
+  GST_DEBUG_OBJECT (vd, "parsing header packet");
+
+  /* Packetno = 0 if the first byte is exactly 0x01 */
+  packet->b_o_s = ((gst_ogg_packet_data (packet))[0] == 0x1) ? 1 : 0;
+
+#ifdef USE_TREMOLO
+  if ((ret = vorbis_dsp_headerin (&vd->vi, &vd->vc, packet)))
+#else
+  if ((ret = vorbis_synthesis_headerin (&vd->vi, &vd->vc, packet)))
+#endif
+    goto header_read_error;
+
+  switch ((gst_ogg_packet_data (packet))[0]) {
+    case 0x01:
+      res = vorbis_handle_identification_packet (vd);
+      break;
+    case 0x03:
+      res = vorbis_handle_comment_packet (vd, packet);
+      break;
+    case 0x05:
+      res = vorbis_handle_type_packet (vd);
+      break;
+    default:
+      /* ignore */
+      g_warning ("unknown vorbis header packet found");
+      res = GST_FLOW_OK;
+      break;
+  }
+  return res;
+
+  /* ERRORS */
+header_read_error:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("couldn't read header packet (%d)", ret));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+vorbis_dec_push_forward (GstVorbisDec * dec, GstBuffer * buf)
+{
+  GstFlowReturn result;
+
+  /* clip */
+  if (!(buf = gst_audio_buffer_clip (buf, &dec->segment, dec->vi.rate,
+              dec->info.bpf))) {
+    GST_LOG_OBJECT (dec, "clipped buffer");
+    return GST_FLOW_OK;
+  }
+
+  if (dec->discont) {
+    GST_LOG_OBJECT (dec, "setting DISCONT");
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+    dec->discont = FALSE;
+  }
+
+  GST_DEBUG_OBJECT (dec,
+      "pushing time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+  result = gst_pad_push (dec->srcpad, buf);
+
+  return result;
+}
+
+static GstFlowReturn
+vorbis_dec_push_reverse (GstVorbisDec * dec, GstBuffer * buf)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+
+  dec->queued = g_list_prepend (dec->queued, buf);
+
+  return result;
+}
+
+static void
+vorbis_do_timestamps (GstVorbisDec * vd, GstBuffer * buf, gboolean reverse,
+    GstClockTime timestamp, GstClockTime duration)
+{
+  /* interpolate reverse */
+  if (vd->last_timestamp != -1 && duration != -1 && reverse)
+    vd->last_timestamp -= duration;
+
+  /* take buffer timestamp, use interpolated timestamp otherwise */
+  if (timestamp != -1)
+    vd->last_timestamp = timestamp;
+  else
+    timestamp = vd->last_timestamp;
+
+  /* interpolate forwards */
+  if (vd->last_timestamp != -1 && duration != -1 && !reverse)
+    vd->last_timestamp += duration;
+
+  GST_LOG_OBJECT (vd,
+      "keeping timestamp %" GST_TIME_FORMAT " ts %" GST_TIME_FORMAT " dur %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (vd->last_timestamp),
+      GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
+
+  if (buf) {
+    GST_BUFFER_TIMESTAMP (buf) = timestamp;
+    GST_BUFFER_DURATION (buf) = duration;
+  }
+}
+
+static GstFlowReturn
+vorbis_handle_data_packet (GstVorbisDec * vd, ogg_packet * packet,
+    GstClockTime timestamp, GstClockTime duration)
+{
+#ifndef USE_TREMOLO
+  vorbis_sample_t **pcm;
+#endif
+  guint sample_count;
+  GstBuffer *out = NULL;
+  GstFlowReturn result;
+  guint8 *data;
+  gsize size;
+
+  if (G_UNLIKELY (!vd->initialized))
+    goto not_initialized;
+
+  /* normal data packet */
+  /* FIXME, we can skip decoding if the packet is outside of the
+   * segment, this is however not very trivial as we need a previous
+   * packet to decode the current one so we must be carefull not to
+   * throw away too much. For now we decode everything and clip right
+   * before pushing data. */
+
+#ifdef USE_TREMOLO
+  if (G_UNLIKELY (vorbis_dsp_synthesis (&vd->vd, packet, 1)))
+    goto could_not_read;
+#else
+  if (G_UNLIKELY (vorbis_synthesis (&vd->vb, packet)))
+    goto could_not_read;
+
+  if (G_UNLIKELY (vorbis_synthesis_blockin (&vd->vd, &vd->vb) < 0))
+    goto not_accepted;
+#endif
+
+  /* assume all goes well here */
+  result = GST_FLOW_OK;
+
+  /* count samples ready for reading */
+#ifdef USE_TREMOLO
+  if ((sample_count = vorbis_dsp_pcmout (&vd->vd, NULL, 0)) == 0)
+#else
+  if ((sample_count = vorbis_synthesis_pcmout (&vd->vd, NULL)) == 0)
+#endif
+    goto done;
+
+  size = sample_count * vd->info.bpf;
+  GST_LOG_OBJECT (vd, "%d samples ready for reading, size %" G_GSIZE_FORMAT,
+      sample_count, size);
+
+  /* alloc buffer for it */
+  out = gst_buffer_new_and_alloc (size);
+
+  data = gst_buffer_map (out, NULL, NULL, GST_MAP_WRITE);
+  /* get samples ready for reading now, should be sample_count */
+#ifdef USE_TREMOLO
+  if (G_UNLIKELY ((vorbis_dsp_pcmout (&vd->vd, data,
+                  sample_count)) != sample_count))
+#else
+  if (G_UNLIKELY ((vorbis_synthesis_pcmout (&vd->vd, &pcm)) != sample_count))
+#endif
+    goto wrong_samples;
+
+#ifndef USE_TREMOLO
+  /* copy samples in buffer */
+  vd->copy_samples ((vorbis_sample_t *) data, pcm,
+      sample_count, vd->info.channels);
+#endif
+
+  GST_LOG_OBJECT (vd, "setting output size to %" G_GSIZE_FORMAT, size);
+  gst_buffer_unmap (out, data, size);
+
+  /* this should not overflow */
+  if (duration == -1)
+    duration = sample_count * GST_SECOND / vd->vi.rate;
+
+  vorbis_do_timestamps (vd, out, FALSE, timestamp, duration);
+
+  if (vd->segment.rate >= 0.0)
+    result = vorbis_dec_push_forward (vd, out);
+  else
+    result = vorbis_dec_push_reverse (vd, out);
+
+done:
+  if (out == NULL) {
+    /* no output, still keep track of timestamps */
+    vorbis_do_timestamps (vd, NULL, FALSE, timestamp, duration);
+  }
+#ifdef USE_TREMOLO
+  vorbis_dsp_read (&vd->vd, sample_count);
+#else
+  vorbis_synthesis_read (&vd->vd, sample_count);
+#endif
+
+  return result;
+
+  /* ERRORS */
+not_initialized:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("no header sent yet"));
+    return GST_FLOW_ERROR;
+  }
+could_not_read:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("couldn't read data packet"));
+    return GST_FLOW_ERROR;
+  }
+not_accepted:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("vorbis decoder did not accept data packet"));
+    return GST_FLOW_ERROR;
+  }
+wrong_samples:
+  {
+    gst_buffer_unref (out);
+    GST_ELEMENT_ERROR (GST_ELEMENT (vd), STREAM, DECODE,
+        (NULL), ("vorbis decoder reported wrong number of samples"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+vorbis_dec_handle_header_buffer (GstVorbisDec * vd, GstBuffer * buffer)
+{
+  ogg_packet *packet;
+  ogg_packet_wrapper packet_wrapper;
+  GstFlowReturn ret;
+
+  gst_ogg_packet_wrapper_map (&packet_wrapper, buffer);
+  packet = gst_ogg_packet_from_wrapper (&packet_wrapper);
+
+  ret = vorbis_handle_header_packet (vd, packet);
+
+  gst_ogg_packet_wrapper_unmap (&packet_wrapper, buffer);
+
+  return ret;
+}
+
+
+#define MIN_NUM_HEADERS 3
+static GstFlowReturn
+vorbis_dec_handle_header_caps (GstVorbisDec * vd, GstBuffer * buffer)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+  GstCaps *caps;
+  GstStructure *s;
+  const GValue *array;
+  const GValue *value = NULL;
+  GstBuffer *buf = NULL;
+
+  if ((caps = gst_pad_get_current_caps (vd->sinkpad)) == NULL)
+    goto no_caps;
+
+  if ((s = gst_caps_get_structure (caps, 0)) == NULL)
+    goto no_caps;
+
+  array = gst_structure_get_value (s, "streamheader");
+
+  if (array == NULL || (gst_value_array_get_size (array) < MIN_NUM_HEADERS))
+    goto array_error;
+
+  /* initial header */
+  value = gst_value_array_get_value (array, 0);
+  buf = gst_value_get_buffer (value);
+  if (!buf)
+    goto null_buffer;
+  result = vorbis_dec_handle_header_buffer (vd, buf);
+  if (result != GST_FLOW_OK)
+    goto buffer_error;
+
+  /* comment header */
+  value = gst_value_array_get_value (array, 1);
+  buf = gst_value_get_buffer (value);
+  if (!buf)
+    goto null_buffer;
+  result = vorbis_dec_handle_header_buffer (vd, buf);
+  if (result != GST_FLOW_OK)
+    goto buffer_error;
+
+  /* bitstream codebook header */
+  value = gst_value_array_get_value (array, 2);
+  buf = gst_value_get_buffer (value);
+  if (!buf)
+    goto null_buffer;
+  result = vorbis_dec_handle_header_buffer (vd, buf);
+  if (result != GST_FLOW_OK)
+    goto buffer_error;
+
+  return result;
+
+no_caps:
+  {
+    GST_WARNING_OBJECT (vd, "no caps negotiated");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+array_error:
+  {
+    GST_WARNING_OBJECT (vd, "streamheader array not found");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+null_buffer:
+  {
+    GST_WARNING_OBJECT (vd, "streamheader with null buffer received");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+buffer_error:
+  {
+    GST_WARNING_OBJECT (vd, "error handling buffer");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static GstFlowReturn
+vorbis_dec_decode_buffer (GstVorbisDec * vd, GstBuffer * buffer)
+{
+  ogg_packet *packet;
+  ogg_packet_wrapper packet_wrapper;
+  GstFlowReturn result = GST_FLOW_OK;
+
+  /* make ogg_packet out of the buffer */
+  gst_ogg_packet_wrapper_map (&packet_wrapper, buffer);
+  packet = gst_ogg_packet_from_wrapper (&packet_wrapper);
+  /* set some more stuff */
+  packet->granulepos = -1;
+  packet->packetno = 0;         /* we don't care */
+  /* EOS does not matter, it is used in vorbis to implement clipping the last
+   * block of samples based on the granulepos. We clip based on segments. */
+  packet->e_o_s = 0;
+
+  GST_LOG_OBJECT (vd, "decode buffer of size %ld", packet->bytes);
+
+  /* error out on empty header packets, but just skip empty data packets */
+  if (G_UNLIKELY (packet->bytes == 0)) {
+    if (vd->initialized)
+      goto empty_buffer;
+    else
+      goto empty_header;
+  }
+
+  /* switch depending on packet type */
+  if ((gst_ogg_packet_data (packet))[0] & 1) {
+    if (vd->initialized) {
+      GST_WARNING_OBJECT (vd, "Already initialized, so ignoring header packet");
+      goto done;
+    }
+    result = vorbis_handle_header_packet (vd, packet);
+  } else {
+    GstClockTime timestamp, duration;
+
+    /* try to find header in caps so we can initialize the decoder */
+    if (!vd->initialized) {
+      result = vorbis_dec_handle_header_caps (vd, buffer);
+      if (result != GST_FLOW_OK)
+        goto invalid_caps_header;
+    }
+
+    timestamp = GST_BUFFER_TIMESTAMP (buffer);
+    duration = GST_BUFFER_DURATION (buffer);
+
+    result = vorbis_handle_data_packet (vd, packet, timestamp, duration);
+  }
+
+done:
+  gst_ogg_packet_wrapper_unmap (&packet_wrapper, buffer);
+
+  return result;
+
+empty_buffer:
+  {
+    /* don't error out here, just ignore the buffer, it's invalid for vorbis
+     * but not fatal. */
+    GST_WARNING_OBJECT (vd, "empty buffer received, ignoring");
+    result = GST_FLOW_OK;
+    goto done;
+  }
+
+/* ERRORS */
+empty_header:
+  {
+    GST_ELEMENT_ERROR (vd, STREAM, DECODE, (NULL), ("empty header received"));
+    result = GST_FLOW_ERROR;
+    vd->discont = TRUE;
+    goto done;
+  }
+
+invalid_caps_header:
+  {
+    GST_ELEMENT_ERROR (vd, STREAM, DECODE, (NULL),
+        ("invalid streamheader in caps"));
+    goto done;
+  }
+}
+
+/*
+ * Input:
+ *  Buffer decoding order:  7  8  9  4  5  6  3  1  2  EOS
+ *  Discont flag:           D        D        D  D
+ *
+ * - Each Discont marks a discont in the decoding order.
+ *
+ * for vorbis, each buffer is a keyframe when we have the previous
+ * buffer. This means that to decode buffer 7, we need buffer 6, which
+ * arrives out of order.
+ *
+ * we first gather buffers in the gather queue until we get a DISCONT. We
+ * prepend each incomming buffer so that they are in reversed order.
+ *
+ *    gather queue:    9  8  7
+ *    decode queue:
+ *    output queue:
+ *
+ * When a DISCONT is received (buffer 4), we move the gather queue to the
+ * decode queue. This is simply done be taking the head of the gather queue
+ * and prepending it to the decode queue. This yields:
+ *
+ *    gather queue:
+ *    decode queue:    7  8  9
+ *    output queue:
+ *
+ * Then we decode each buffer in the decode queue in order and put the output
+ * buffer in the output queue. The first buffer (7) will not produce any output
+ * because it needs the previous buffer (6) which did not arrive yet. This
+ * yields:
+ *
+ *    gather queue:
+ *    decode queue:    7  8  9
+ *    output queue:    9  8
+ *
+ * Then we remove the consumed buffers from the decode queue. Buffer 7 is not
+ * completely consumed, we need to keep it around for when we receive buffer
+ * 6. This yields:
+ *
+ *    gather queue:
+ *    decode queue:    7
+ *    output queue:    9  8
+ *
+ * Then we accumulate more buffers:
+ *
+ *    gather queue:    6  5  4
+ *    decode queue:    7
+ *    output queue:
+ *
+ * prepending to the decode queue on DISCONT yields:
+ *
+ *    gather queue:
+ *    decode queue:    4  5  6  7
+ *    output queue:
+ *
+ * after decoding and keeping buffer 4:
+ *
+ *    gather queue:
+ *    decode queue:    4
+ *    output queue:    7  6  5
+ *
+ * Etc..
+ */
+static GstFlowReturn
+vorbis_dec_flush_decode (GstVorbisDec * dec)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+  GList *walk;
+
+  walk = dec->decode;
+
+  GST_DEBUG_OBJECT (dec, "flushing buffers to decoder");
+
+  while (walk) {
+    GList *next;
+    GstBuffer *buf = GST_BUFFER_CAST (walk->data);
+
+    GST_DEBUG_OBJECT (dec, "decoding buffer %p, ts %" GST_TIME_FORMAT,
+        buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+    next = g_list_next (walk);
+
+    /* decode buffer, prepend to output queue */
+    res = vorbis_dec_decode_buffer (dec, buf);
+
+    /* if we generated output, we can discard the buffer, else we
+     * keep it in the queue */
+    if (dec->queued) {
+      GST_DEBUG_OBJECT (dec, "decoded buffer to %p", dec->queued->data);
+      dec->decode = g_list_delete_link (dec->decode, walk);
+      gst_buffer_unref (buf);
+    } else {
+      GST_DEBUG_OBJECT (dec, "buffer did not decode, keeping");
+    }
+    walk = next;
+  }
+  while (dec->queued) {
+    GstBuffer *buf = GST_BUFFER_CAST (dec->queued->data);
+    GstClockTime timestamp, duration;
+
+    timestamp = GST_BUFFER_TIMESTAMP (buf);
+    duration = GST_BUFFER_DURATION (buf);
+
+    vorbis_do_timestamps (dec, buf, TRUE, timestamp, duration);
+    res = vorbis_dec_push_forward (dec, buf);
+
+    dec->queued = g_list_delete_link (dec->queued, dec->queued);
+  }
+  return res;
+}
+
+static GstFlowReturn
+vorbis_dec_chain_reverse (GstVorbisDec * vd, gboolean discont, GstBuffer * buf)
+{
+  GstFlowReturn result = GST_FLOW_OK;
+
+  /* if we have a discont, move buffers to the decode list */
+  if (G_UNLIKELY (discont)) {
+    GST_DEBUG_OBJECT (vd, "received discont");
+    while (vd->gather) {
+      GstBuffer *gbuf;
+
+      gbuf = GST_BUFFER_CAST (vd->gather->data);
+      /* remove from the gather list */
+      vd->gather = g_list_delete_link (vd->gather, vd->gather);
+      /* copy to decode queue */
+      vd->decode = g_list_prepend (vd->decode, gbuf);
+    }
+    /* flush and decode the decode queue */
+    result = vorbis_dec_flush_decode (vd);
+  }
+
+  if (G_LIKELY (buf)) {
+    GST_DEBUG_OBJECT (vd,
+        "gathering buffer %p of size %" G_GSIZE_FORMAT
+        ", time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
+        buf, gst_buffer_get_size (buf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+    /* add buffer to gather queue */
+    vd->gather = g_list_prepend (vd->gather, buf);
+  }
+
+  return result;
+}
+
+static GstFlowReturn
+vorbis_dec_chain_forward (GstVorbisDec * vd, gboolean discont,
+    GstBuffer * buffer)
+{
+  GstFlowReturn result;
+
+  result = vorbis_dec_decode_buffer (vd, buffer);
+
+  gst_buffer_unref (buffer);
+
+  return result;
+}
+
+static GstFlowReturn
+vorbis_dec_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstVorbisDec *vd;
+  GstFlowReturn result = GST_FLOW_OK;
+  gboolean discont;
+
+  vd = GST_VORBIS_DEC (gst_pad_get_parent (pad));
+
+  discont = GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+
+  /* resync on DISCONT */
+  if (G_UNLIKELY (discont)) {
+    GST_DEBUG_OBJECT (vd, "received DISCONT buffer");
+    vd->last_timestamp = GST_CLOCK_TIME_NONE;
+#ifdef HAVE_VORBIS_SYNTHESIS_RESTART
+    vorbis_synthesis_restart (&vd->vd);
+#endif
+    vd->discont = TRUE;
+  }
+
+  if (vd->segment.rate >= 0.0)
+    result = vorbis_dec_chain_forward (vd, discont, buffer);
+  else
+    result = vorbis_dec_chain_reverse (vd, discont, buffer);
+
+  gst_object_unref (vd);
+
+  return result;
+}
+
+static GstStateChangeReturn
+vorbis_dec_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVorbisDec *vd = GST_VORBIS_DEC (element);
+  GstStateChangeReturn res;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      vorbis_info_init (&vd->vi);
+      vorbis_comment_init (&vd->vc);
+      vd->initialized = FALSE;
+      gst_vorbis_dec_reset (vd);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (vd, "PAUSED -> READY, clearing vorbis structures");
+      vd->initialized = FALSE;
+
+#ifndef USE_TREMOLO
+      vorbis_block_clear (&vd->vb);
+#endif
+
+      vorbis_dsp_clear (&vd->vd);
+      vorbis_comment_clear (&vd->vc);
+      vorbis_info_clear (&vd->vi);
+      gst_vorbis_dec_reset (vd);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return res;
+}
diff --git a/ext/vorbis/gstvorbisdec.h b/ext/vorbis/gstvorbisdec.h
new file mode 100644
index 0000000..d122a0e
--- /dev/null
+++ b/ext/vorbis/gstvorbisdec.h
@@ -0,0 +1,96 @@
+/* -*- c-basic-offset: 2 -*-
+ * GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_VORBIS_DEC_H__
+#define __GST_VORBIS_DEC_H__
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include "gstvorbisdeclib.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VORBIS_DEC \
+  (gst_vorbis_dec_get_type())
+#define GST_VORBIS_DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VORBIS_DEC,GstVorbisDec))
+#define GST_VORBIS_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VORBIS_DEC,GstVorbisDecClass))
+#define GST_IS_VORBIS_DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VORBIS_DEC))
+#define GST_IS_VORBIS_DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VORBIS_DEC))
+
+typedef struct _GstVorbisDec GstVorbisDec;
+typedef struct _GstVorbisDecClass GstVorbisDecClass;
+
+/**
+ * GstVorbisDec:
+ *
+ * Opaque data structure.
+ */
+struct _GstVorbisDec {
+  GstElement        element;
+
+  GstPad           *sinkpad;
+  GstPad           *srcpad;
+
+  vorbis_dsp_state  vd;
+  vorbis_info       vi;
+  vorbis_comment    vc;
+
+#ifndef USE_TREMOLO
+  vorbis_block      vb;
+#endif
+
+  gboolean          initialized;
+  GstAudioInfo      info;
+
+  /* list of buffers that need timestamps */
+  GList            *queued;
+  /* gather/decode queues for reverse playback */
+  GList            *gather;
+  GList            *decode;
+
+  GstSegment        segment;
+  gboolean          discont;
+  guint32           seqnum;
+
+  GstClockTime      last_timestamp;
+
+  GList            *pendingevents;
+  GstTagList       *taglist;
+  
+  CopySampleFunc    copy_samples;
+};
+
+struct _GstVorbisDecClass {
+  GstElementClass parent_class;
+};
+
+GType gst_vorbis_dec_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_VORBIS_DEC_H__ */
diff --git a/ext/vorbis/gstvorbisdeclib.c b/ext/vorbis/gstvorbisdeclib.c
new file mode 100644
index 0000000..66a2ee3
--- /dev/null
+++ b/ext/vorbis/gstvorbisdeclib.c
@@ -0,0 +1,192 @@
+/* GStreamer
+ * Copyright (C) 2010 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+ * Copyright (C) 2010 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * Tremor modifications <2006>:
+ *   Chris Lord, OpenedHand Ltd. <chris@openedhand.com>, http://www.o-hand.com/
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstvorbisdeclib.h"
+
+#ifndef TREMOR
+/* These samples can be outside of the float -1.0 -- 1.0 range, this
+ * is allowed, downstream elements are supposed to clip */
+static void
+copy_samples_m (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
+    gint channels)
+{
+  memcpy (out, in[0], samples * sizeof (float));
+}
+
+static void
+copy_samples_s (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
+    gint channels)
+{
+#ifdef GST_VORBIS_DEC_SEQUENTIAL
+  memcpy (out, in[0], samples * sizeof (float));
+  out += samples;
+  memcpy (out, in[1], samples * sizeof (float));
+#else
+  gint j;
+
+  for (j = 0; j < samples; j++) {
+    *out++ = in[0][j];
+    *out++ = in[1][j];
+  }
+#endif
+}
+
+static void
+copy_samples (vorbis_sample_t * out, vorbis_sample_t ** in, guint samples,
+    gint channels)
+{
+#ifdef GST_VORBIS_DEC_SEQUENTIAL
+  gint i;
+
+  for (i = 0; i < channels; i++) {
+    memcpy (out, in[i], samples * sizeof (float));
+    out += samples;
+  }
+#else
+  gint i, j;
+
+  for (j = 0; j < samples; j++) {
+    for (i = 0; i < channels; i++) {
+      *out++ = in[i][j];
+    }
+  }
+#endif
+}
+
+CopySampleFunc
+get_copy_sample_func (gint channels)
+{
+  CopySampleFunc f = NULL;
+
+  switch (channels) {
+    case 1:
+      f = copy_samples_m;
+      break;
+    case 2:
+      f = copy_samples_s;
+      break;
+    default:
+      f = copy_samples;
+      break;
+  }
+
+  return f;
+}
+
+#else
+
+/* Taken from Tremor, misc.h */
+#ifdef _ARM_ASSEM_
+static inline ogg_int32_t
+CLIP_TO_15 (ogg_int32_t x)
+{
+  int tmp;
+  asm volatile ("subs	%1, %0, #32768\n\t"
+      "movpl	%0, #0x7f00\n\t"
+      "orrpl	%0, %0, #0xff\n"
+      "adds	%1, %0, #32768\n\t"
+      "movmi	%0, #0x8000":"+r" (x), "=r" (tmp)
+      ::"cc");
+
+  return (x);
+}
+#else
+static inline ogg_int32_t
+CLIP_TO_15 (ogg_int32_t x)
+{
+  int ret = x;
+
+  ret -= ((x <= 32767) - 1) & (x - 32767);
+  ret -= ((x >= -32768) - 1) & (x + 32768);
+  return (ret);
+}
+#endif
+
+static void
+copy_samples_16_m (vorbis_sample_t * _out, vorbis_sample_t ** _in,
+    guint samples, gint channels)
+{
+  gint16 *out = (gint16 *) _out;
+  ogg_int32_t **in = (ogg_int32_t **) _in;
+  gint j;
+
+  for (j = 0; j < samples; j++) {
+    *out++ = CLIP_TO_15 (in[0][j] >> 9);
+  }
+}
+
+static void
+copy_samples_16_s (vorbis_sample_t * _out, vorbis_sample_t ** _in,
+    guint samples, gint channels)
+{
+  gint16 *out = (gint16 *) _out;
+  ogg_int32_t **in = (ogg_int32_t **) _in;
+  gint j;
+
+  for (j = 0; j < samples; j++) {
+    *out++ = CLIP_TO_15 (in[0][j] >> 9);
+    *out++ = CLIP_TO_15 (in[1][j] >> 9);
+  }
+}
+
+static void
+copy_samples_16 (vorbis_sample_t * _out, vorbis_sample_t ** _in, guint samples,
+    gint channels)
+{
+  gint16 *out = (gint16 *) _out;
+  ogg_int32_t **in = (ogg_int32_t **) _in;
+  gint i, j;
+
+  for (j = 0; j < samples; j++) {
+    for (i = 0; i < channels; i++) {
+      *out++ = CLIP_TO_15 (in[i][j] >> 9);
+    }
+  }
+}
+
+CopySampleFunc
+get_copy_sample_func (gint channels)
+{
+  CopySampleFunc f = NULL;
+
+  switch (channels) {
+    case 1:
+      f = copy_samples_16_m;
+      break;
+    case 2:
+      f = copy_samples_16_s;
+      break;
+    default:
+      f = copy_samples_16;
+      break;
+  }
+  return f;
+}
+
+#endif
diff --git a/ext/vorbis/gstvorbisdeclib.h b/ext/vorbis/gstvorbisdeclib.h
new file mode 100644
index 0000000..564ffce
--- /dev/null
+++ b/ext/vorbis/gstvorbisdeclib.h
@@ -0,0 +1,184 @@
+/* GStreamer
+ * Copyright (C) 2010 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+ * Copyright (C) 2010 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * Tremor modifications <2006>:
+ *   Chris Lord, OpenedHand Ltd. <chris@openedhand.com>, http://www.o-hand.com/
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VORBIS_DEC_LIB_H__
+#define __GST_VORBIS_DEC_LIB_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+#ifndef TREMOR
+
+#include <vorbis/codec.h>
+
+typedef float                          vorbis_sample_t;
+typedef ogg_packet                     ogg_packet_wrapper;
+
+#define GST_VORBIS_DEC_DESCRIPTION "decode raw vorbis streams to float audio"
+
+#define GST_VORBIS_AUDIO_FORMAT     GST_AUDIO_FORMAT_F32
+#define GST_VORBIS_AUDIO_FORMAT_STR GST_AUDIO_NE (F32)
+
+#define GST_VORBIS_DEC_SRC_CAPS       \
+    GST_STATIC_CAPS ("audio/x-raw, "  \
+        "format = (string)" GST_VORBIS_AUDIO_FORMAT_STR ", "     \
+        "rate = (int) [ 1, MAX ], "   \
+        "channels = (int) [ 1, 256 ]")
+
+#define GST_VORBIS_DEC_DEFAULT_SAMPLE_WIDTH           (32)
+
+#define GST_VORBIS_DEC_GLIB_TYPE_NAME      GstVorbisDec
+
+static inline guint8 *
+gst_ogg_packet_data (ogg_packet * p)
+{
+  return (guint8 *) p->packet;
+}
+
+static inline gint
+gst_ogg_packet_size (ogg_packet * p)
+{
+  return p->bytes;
+}
+
+static inline void
+gst_ogg_packet_wrapper_map (ogg_packet * packet, GstBuffer * buffer)
+{
+  gsize size;
+
+  packet->packet = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  packet->bytes = size;
+}
+
+static inline void
+gst_ogg_packet_wrapper_unmap (ogg_packet * packet, GstBuffer * buffer)
+{
+  gst_buffer_unmap (buffer, packet->packet, packet->bytes);
+}
+
+static inline ogg_packet *
+gst_ogg_packet_from_wrapper (ogg_packet_wrapper * packet)
+{
+  return packet;
+}
+
+#else
+
+#ifdef USE_TREMOLO
+  #include <Tremolo/ivorbiscodec.h>
+  #include <Tremolo/codec_internal.h>
+  typedef ogg_int16_t                    vorbis_sample_t;
+#else
+  #include <tremor/ivorbiscodec.h>
+  typedef ogg_int32_t                    vorbis_sample_t;
+#endif
+
+typedef struct _ogg_packet_wrapper     ogg_packet_wrapper;
+
+struct _ogg_packet_wrapper {
+  ogg_packet          packet;
+  ogg_reference       ref;
+  ogg_buffer          buf;
+};
+
+#define GST_VORBIS_DEC_DESCRIPTION "decode raw vorbis streams to integer audio"
+
+#define GST_VORBIS_AUDIO_FORMAT GST_AUDIO_FORMAT_S16
+#define GST_VORBIS_AUDIO_FORMAT_STR GST_AUDIO_NE (S16)
+
+#define GST_VORBIS_DEC_SRC_CAPS        \
+    GST_STATIC_CAPS ("audio/x-raw, "   \
+        "format = (string) " GST_VORBIS_AUDIO_FORMAT_STR ", "      \
+        "rate = (int) [ 1, MAX ], "    \
+        "channels = (int) [ 1, 6 ]")
+
+/* we need a different type name here */
+#define GST_VORBIS_DEC_GLIB_TYPE_NAME      GstIVorbisDec
+
+/* and still have it compile */
+typedef struct _GstVorbisDec               GstIVorbisDec;
+typedef struct _GstVorbisDecClass          GstIVorbisDecClass;
+
+/* compensate minor variation */
+#define vorbis_synthesis(a, b)             vorbis_synthesis (a, b, 1)
+
+static inline guint8 *
+gst_ogg_packet_data (ogg_packet * p)
+{
+  return (guint8 *) p->packet->buffer->data;
+}
+
+static inline gint
+gst_ogg_packet_size (ogg_packet * p)
+{
+  return p->packet->buffer->size;
+}
+
+static inline void
+gst_ogg_packet_wrapper_map (ogg_packet_wrapper * packet,
+    GstBuffer * buffer)
+{
+  ogg_reference *ref = &packet->ref;
+  ogg_buffer *buf = &packet->buf;
+  gsize size;
+
+  buf->data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  buf->size = size;
+  buf->refcount = 1;
+  buf->ptr.owner = NULL;
+  buf->ptr.next = NULL;
+
+  ref->buffer = buf;
+  ref->begin = 0;
+  ref->length = buf->size;
+  ref->next = NULL;
+
+  packet->packet.packet = ref;
+  packet->packet.bytes = ref->length;
+}
+
+static inline void
+gst_ogg_packet_wrapper_unmap (ogg_packet_wrapper * packet,
+    GstBuffer * buffer)
+{
+  ogg_reference *ref = &packet->ref;
+  ogg_buffer *buf = &packet->buf;
+
+  gst_buffer_unmap (buffer, buf->data, buf->size);
+}
+
+static inline ogg_packet *
+gst_ogg_packet_from_wrapper (ogg_packet_wrapper * packet)
+{
+  return &(packet->packet);
+}
+
+#endif
+
+typedef void (*CopySampleFunc)(vorbis_sample_t *out, vorbis_sample_t **in,
+                           guint samples, gint channels);
+
+CopySampleFunc get_copy_sample_func (gint channels);
+
+#endif /* __GST_VORBIS_DEC_LIB_H__ */
diff --git a/ext/vorbis/gstvorbisenc.c b/ext/vorbis/gstvorbisenc.c
new file mode 100644
index 0000000..54800bb
--- /dev/null
+++ b/ext/vorbis/gstvorbisenc.c
@@ -0,0 +1,1424 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-vorbisenc
+ * @see_also: vorbisdec, oggmux
+ *
+ * This element encodes raw float audio into a Vorbis stream.
+ * <ulink url="http://www.vorbis.com/">Vorbis</ulink> is a royalty-free
+ * audio codec maintained by the <ulink url="http://www.xiph.org/">Xiph.org
+ * Foundation</ulink>.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=sine.ogg
+ * ]| Encode a test sine signal to Ogg/Vorbis.  Note that the resulting file
+ * will be really small because a sine signal compresses very well.
+ * |[
+ * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
+ * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-01 (0.10.4)
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <vorbis/vorbisenc.h>
+
+#include <gst/gsttagsetter.h>
+#include <gst/tag/tag.h>
+#include <gst/audio/multichannel.h>
+#include <gst/audio/audio.h>
+#include "gstvorbisenc.h"
+
+#include "gstvorbiscommon.h"
+
+GST_DEBUG_CATEGORY_EXTERN (vorbisenc_debug);
+#define GST_CAT_DEFAULT vorbisenc_debug
+
+static GstStaticPadTemplate vorbis_enc_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (F32) ", "
+        "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 256 ]")
+    );
+
+static GstStaticPadTemplate vorbis_enc_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-vorbis")
+    );
+
+enum
+{
+  ARG_0,
+  ARG_MAX_BITRATE,
+  ARG_BITRATE,
+  ARG_MIN_BITRATE,
+  ARG_QUALITY,
+  ARG_MANAGED,
+  ARG_LAST_MESSAGE
+};
+
+static GstFlowReturn gst_vorbis_enc_output_buffers (GstVorbisEnc * vorbisenc);
+
+/* this function takes into account the granulepos_offset and the subgranule
+ * time offset */
+static GstClockTime
+granulepos_to_timestamp_offset (GstVorbisEnc * vorbisenc,
+    ogg_int64_t granulepos)
+{
+  if (granulepos >= 0)
+    return gst_util_uint64_scale ((guint64) granulepos
+        + vorbisenc->granulepos_offset, GST_SECOND, vorbisenc->frequency)
+        + vorbisenc->subgranule_offset;
+  return GST_CLOCK_TIME_NONE;
+}
+
+/* this function does a straight granulepos -> timestamp conversion */
+static GstClockTime
+granulepos_to_timestamp (GstVorbisEnc * vorbisenc, ogg_int64_t granulepos)
+{
+  if (granulepos >= 0)
+    return gst_util_uint64_scale ((guint64) granulepos,
+        GST_SECOND, vorbisenc->frequency);
+  return GST_CLOCK_TIME_NONE;
+}
+
+#define MAX_BITRATE_DEFAULT     -1
+#define BITRATE_DEFAULT         -1
+#define MIN_BITRATE_DEFAULT     -1
+#define QUALITY_DEFAULT         0.3
+#define LOWEST_BITRATE          6000    /* lowest allowed for a 8 kHz stream */
+#define HIGHEST_BITRATE         250001  /* highest allowed for a 44 kHz stream */
+
+static gboolean gst_vorbis_enc_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_vorbis_enc_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_vorbis_enc_setup (GstVorbisEnc * vorbisenc);
+
+static void gst_vorbis_enc_dispose (GObject * object);
+static void gst_vorbis_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_vorbis_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_vorbis_enc_change_state (GstElement * element,
+    GstStateChange transition);
+static void gst_vorbis_enc_add_interfaces (GType vorbisenc_type);
+
+#define gst_vorbis_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVorbisEnc, gst_vorbis_enc,
+    GST_TYPE_ELEMENT, gst_vorbis_enc_add_interfaces (g_define_type_id));
+
+static void
+gst_vorbis_enc_add_interfaces (GType vorbisenc_type)
+{
+  static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
+  static const GInterfaceInfo preset_info = { NULL, NULL, NULL };
+
+  g_type_add_interface_static (vorbisenc_type, GST_TYPE_TAG_SETTER,
+      &tag_setter_info);
+  g_type_add_interface_static (vorbisenc_type, GST_TYPE_PRESET, &preset_info);
+}
+
+static void
+gst_vorbis_enc_class_init (GstVorbisEncClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->set_property = gst_vorbis_enc_set_property;
+  gobject_class->get_property = gst_vorbis_enc_get_property;
+  gobject_class->dispose = gst_vorbis_enc_dispose;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MAX_BITRATE,
+      g_param_spec_int ("max-bitrate", "Maximum Bitrate",
+          "Specify a maximum bitrate (in bps). Useful for streaming "
+          "applications. (-1 == disabled)",
+          -1, HIGHEST_BITRATE, MAX_BITRATE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BITRATE,
+      g_param_spec_int ("bitrate", "Target Bitrate",
+          "Attempt to encode at a bitrate averaging this (in bps). "
+          "This uses the bitrate management engine, and is not recommended for most users. "
+          "Quality is a better alternative. (-1 == disabled)", -1,
+          HIGHEST_BITRATE, BITRATE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MIN_BITRATE,
+      g_param_spec_int ("min-bitrate", "Minimum Bitrate",
+          "Specify a minimum bitrate (in bps). Useful for encoding for a "
+          "fixed-size channel. (-1 == disabled)", -1, HIGHEST_BITRATE,
+          MIN_BITRATE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_QUALITY,
+      g_param_spec_float ("quality", "Quality",
+          "Specify quality instead of specifying a particular bitrate.", -0.1,
+          1.0, QUALITY_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MANAGED,
+      g_param_spec_boolean ("managed", "Managed",
+          "Enable bitrate management engine", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LAST_MESSAGE,
+      g_param_spec_string ("last-message", "last-message",
+          "The last status message", NULL,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_enc_src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_enc_sink_factory));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Vorbis audio encoder", "Codec/Encoder/Audio",
+      "Encodes audio in Vorbis format",
+      "Monty <monty@xiph.org>, " "Wim Taymans <wim@fluendo.com>");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_change_state);
+}
+
+static void
+gst_vorbis_enc_dispose (GObject * object)
+{
+  GstVorbisEnc *vorbisenc = GST_VORBISENC (object);
+
+  if (vorbisenc->sinkcaps) {
+    gst_caps_unref (vorbisenc->sinkcaps);
+    vorbisenc->sinkcaps = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static GstCaps *
+gst_vorbis_enc_generate_sink_caps (void)
+{
+  GstCaps *caps = gst_caps_new_empty ();
+  int i, c;
+
+  gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+          "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+          "rate", GST_TYPE_INT_RANGE, 1, 200000,
+          "channels", G_TYPE_INT, 1, NULL));
+
+  gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+          "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+          "rate", GST_TYPE_INT_RANGE, 1, 200000,
+          "channels", G_TYPE_INT, 2, NULL));
+
+  for (i = 3; i <= 8; i++) {
+    GValue chanpos = { 0 };
+    GValue pos = { 0 };
+    GstStructure *structure;
+
+    g_value_init (&chanpos, GST_TYPE_ARRAY);
+    g_value_init (&pos, GST_TYPE_AUDIO_CHANNEL_POSITION);
+
+    for (c = 0; c < i; c++) {
+      g_value_set_enum (&pos, gst_vorbis_channel_positions[i - 1][c]);
+      gst_value_array_append_value (&chanpos, &pos);
+    }
+    g_value_unset (&pos);
+
+    structure = gst_structure_new ("audio/x-raw",
+        "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+        "rate", GST_TYPE_INT_RANGE, 1, 200000, "channels", G_TYPE_INT, i, NULL);
+    gst_structure_set_value (structure, "channel-positions", &chanpos);
+    g_value_unset (&chanpos);
+
+    gst_caps_append_structure (caps, structure);
+  }
+
+  gst_caps_append_structure (caps, gst_structure_new ("audio/x-raw",
+          "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+          "rate", GST_TYPE_INT_RANGE, 1, 200000,
+          "channels", GST_TYPE_INT_RANGE, 9, 256, NULL));
+
+  return caps;
+}
+
+static GstCaps *
+gst_vorbis_enc_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstVorbisEnc *vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad));
+
+  if (vorbisenc->sinkcaps == NULL)
+    vorbisenc->sinkcaps = gst_vorbis_enc_generate_sink_caps ();
+
+  if (filter)
+    return gst_caps_intersect_full (filter, vorbisenc->sinkcaps,
+        GST_CAPS_INTERSECT_FIRST);
+  else
+    return gst_caps_ref (vorbisenc->sinkcaps);
+}
+
+static gboolean
+gst_vorbis_enc_sink_setcaps (GstVorbisEnc * vorbisenc, GstCaps * caps)
+{
+  GstStructure *structure;
+
+  vorbisenc->setup = FALSE;
+
+  structure = gst_caps_get_structure (caps, 0);
+  gst_structure_get_int (structure, "channels", &vorbisenc->channels);
+  gst_structure_get_int (structure, "rate", &vorbisenc->frequency);
+
+  gst_vorbis_enc_setup (vorbisenc);
+
+  if (vorbisenc->setup)
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
+gst_vorbis_enc_convert_src (GstPad * pad, GstFormat src_format,
+    gint64 src_value, GstFormat dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstVorbisEnc *vorbisenc;
+  gint64 avg;
+
+  vorbisenc = GST_VORBISENC (gst_pad_get_parent (pad));
+
+  if (vorbisenc->samples_in == 0 ||
+      vorbisenc->bytes_out == 0 || vorbisenc->frequency == 0) {
+    gst_object_unref (vorbisenc);
+    return FALSE;
+  }
+
+  avg = (vorbisenc->bytes_out * vorbisenc->frequency) / (vorbisenc->samples_in);
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND, avg);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = gst_util_uint64_scale_int (src_value, avg, GST_SECOND);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+  gst_object_unref (vorbisenc);
+  return res;
+}
+
+static gboolean
+gst_vorbis_enc_convert_sink (GstPad * pad, GstFormat src_format,
+    gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  guint scale = 1;
+  gint bytes_per_sample;
+  GstVorbisEnc *vorbisenc;
+
+  vorbisenc = GST_VORBISENC (gst_pad_get_parent (pad));
+
+  bytes_per_sample = vorbisenc->channels * 2;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          if (bytes_per_sample == 0)
+            return FALSE;
+          *dest_value = src_value / bytes_per_sample;
+          break;
+        case GST_FORMAT_TIME:
+        {
+          gint byterate = bytes_per_sample * vorbisenc->frequency;
+
+          if (byterate == 0)
+            return FALSE;
+          *dest_value =
+              gst_util_uint64_scale_int (src_value, GST_SECOND, byterate);
+          break;
+        }
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = src_value * bytes_per_sample;
+          break;
+        case GST_FORMAT_TIME:
+          if (vorbisenc->frequency == 0)
+            return FALSE;
+          *dest_value =
+              gst_util_uint64_scale_int (src_value, GST_SECOND,
+              vorbisenc->frequency);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          scale = bytes_per_sample;
+          /* fallthrough */
+        case GST_FORMAT_DEFAULT:
+          *dest_value =
+              gst_util_uint64_scale_int (src_value,
+              scale * vorbisenc->frequency, GST_SECOND);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+  gst_object_unref (vorbisenc);
+  return res;
+}
+
+static gint64
+gst_vorbis_enc_get_latency (GstVorbisEnc * vorbisenc)
+{
+  /* FIXME, this probably depends on the bitrate and other setting but for now
+   * we return this value, which was obtained by totally unscientific
+   * measurements */
+  return 58 * GST_MSECOND;
+}
+
+static const GstQueryType *
+gst_vorbis_enc_get_query_types (GstPad * pad)
+{
+  static const GstQueryType gst_vorbis_enc_src_query_types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    GST_QUERY_CONVERT,
+    0
+  };
+
+  return gst_vorbis_enc_src_query_types;
+}
+
+static gboolean
+gst_vorbis_enc_src_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res = TRUE;
+  GstVorbisEnc *vorbisenc;
+  GstPad *peerpad;
+
+  vorbisenc = GST_VORBISENC (gst_pad_get_parent (pad));
+  peerpad = gst_pad_get_peer (vorbisenc->sinkpad);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat req_fmt;
+      gint64 pos, val;
+
+      gst_query_parse_position (query, &req_fmt, NULL);
+      if ((res = gst_pad_query_position (peerpad, req_fmt, &val))) {
+        gst_query_set_position (query, req_fmt, val);
+        break;
+      }
+
+      if (!(res = gst_pad_query_position (peerpad, GST_FORMAT_TIME, &pos)))
+        break;
+
+      if ((res =
+              gst_pad_query_convert (peerpad, GST_FORMAT_TIME, pos, req_fmt,
+                  &val))) {
+        gst_query_set_position (query, req_fmt, val);
+      }
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      GstFormat req_fmt;
+      gint64 dur, val;
+
+      gst_query_parse_duration (query, &req_fmt, NULL);
+      if ((res = gst_pad_query_duration (peerpad, req_fmt, &val))) {
+        gst_query_set_duration (query, req_fmt, val);
+        break;
+      }
+
+      if (!(res = gst_pad_query_duration (peerpad, GST_FORMAT_TIME, &dur)))
+        break;
+
+      if ((res =
+              gst_pad_query_convert (peerpad, GST_FORMAT_TIME, dur, req_fmt,
+                  &val))) {
+        gst_query_set_duration (query, req_fmt, val);
+      }
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              gst_vorbis_enc_convert_src (pad, src_fmt, src_val, dest_fmt,
+                  &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    case GST_QUERY_LATENCY:
+    {
+      gboolean live;
+      GstClockTime min_latency, max_latency;
+      gint64 latency;
+
+      if ((res = gst_pad_query (peerpad, query))) {
+        gst_query_parse_latency (query, &live, &min_latency, &max_latency);
+
+        latency = gst_vorbis_enc_get_latency (vorbisenc);
+
+        /* add our latency */
+        min_latency += latency;
+        if (max_latency != -1)
+          max_latency += latency;
+
+        gst_query_set_latency (query, live, min_latency, max_latency);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query (peerpad, query);
+      break;
+  }
+
+error:
+  gst_object_unref (peerpad);
+  gst_object_unref (vorbisenc);
+  return res;
+}
+
+static gboolean
+gst_vorbis_enc_sink_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res = TRUE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              gst_vorbis_enc_convert_sink (pad, src_fmt, src_val, &dest_fmt,
+                  &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+error:
+  return res;
+}
+
+static void
+gst_vorbis_enc_init (GstVorbisEnc * vorbisenc)
+{
+  vorbisenc->sinkpad =
+      gst_pad_new_from_static_template (&vorbis_enc_sink_factory, "sink");
+  gst_pad_set_event_function (vorbisenc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_sink_event));
+  gst_pad_set_chain_function (vorbisenc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_chain));
+  gst_pad_set_getcaps_function (vorbisenc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_sink_getcaps));
+  gst_pad_set_query_function (vorbisenc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_sink_query));
+  gst_element_add_pad (GST_ELEMENT (vorbisenc), vorbisenc->sinkpad);
+
+  vorbisenc->srcpad =
+      gst_pad_new_from_static_template (&vorbis_enc_src_factory, "src");
+  gst_pad_set_query_function (vorbisenc->srcpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_src_query));
+  gst_pad_set_query_type_function (vorbisenc->srcpad,
+      GST_DEBUG_FUNCPTR (gst_vorbis_enc_get_query_types));
+  gst_element_add_pad (GST_ELEMENT (vorbisenc), vorbisenc->srcpad);
+
+  vorbisenc->channels = -1;
+  vorbisenc->frequency = -1;
+
+  vorbisenc->managed = FALSE;
+  vorbisenc->max_bitrate = MAX_BITRATE_DEFAULT;
+  vorbisenc->bitrate = BITRATE_DEFAULT;
+  vorbisenc->min_bitrate = MIN_BITRATE_DEFAULT;
+  vorbisenc->quality = QUALITY_DEFAULT;
+  vorbisenc->quality_set = FALSE;
+  vorbisenc->last_message = NULL;
+}
+
+static void
+gst_vorbis_enc_metadata_set1 (const GstTagList * list, const gchar * tag,
+    gpointer vorbisenc)
+{
+  GstVorbisEnc *enc = GST_VORBISENC (vorbisenc);
+  GList *vc_list, *l;
+
+  vc_list = gst_tag_to_vorbis_comments (list, tag);
+
+  for (l = vc_list; l != NULL; l = l->next) {
+    const gchar *vc_string = (const gchar *) l->data;
+    gchar *key = NULL, *val = NULL;
+
+    GST_LOG_OBJECT (vorbisenc, "vorbis comment: %s", vc_string);
+    if (gst_tag_parse_extended_comment (vc_string, &key, NULL, &val, TRUE)) {
+      vorbis_comment_add_tag (&enc->vc, key, val);
+      g_free (key);
+      g_free (val);
+    }
+  }
+
+  g_list_foreach (vc_list, (GFunc) g_free, NULL);
+  g_list_free (vc_list);
+}
+
+static void
+gst_vorbis_enc_set_metadata (GstVorbisEnc * enc)
+{
+  GstTagList *merged_tags;
+  const GstTagList *user_tags;
+
+  vorbis_comment_init (&enc->vc);
+
+  user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc));
+
+  GST_DEBUG_OBJECT (enc, "upstream tags = %" GST_PTR_FORMAT, enc->tags);
+  GST_DEBUG_OBJECT (enc, "user-set tags = %" GST_PTR_FORMAT, user_tags);
+
+  /* gst_tag_list_merge() will handle NULL for either or both lists fine */
+  merged_tags = gst_tag_list_merge (user_tags, enc->tags,
+      gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (enc)));
+
+  if (merged_tags) {
+    GST_DEBUG_OBJECT (enc, "merged   tags = %" GST_PTR_FORMAT, merged_tags);
+    gst_tag_list_foreach (merged_tags, gst_vorbis_enc_metadata_set1, enc);
+    gst_tag_list_free (merged_tags);
+  }
+}
+
+static gchar *
+get_constraints_string (GstVorbisEnc * vorbisenc)
+{
+  gint min = vorbisenc->min_bitrate;
+  gint max = vorbisenc->max_bitrate;
+  gchar *result;
+
+  if (min > 0 && max > 0)
+    result = g_strdup_printf ("(min %d bps, max %d bps)", min, max);
+  else if (min > 0)
+    result = g_strdup_printf ("(min %d bps, no max)", min);
+  else if (max > 0)
+    result = g_strdup_printf ("(no min, max %d bps)", max);
+  else
+    result = g_strdup_printf ("(no min or max)");
+
+  return result;
+}
+
+static void
+update_start_message (GstVorbisEnc * vorbisenc)
+{
+  gchar *constraints;
+
+  g_free (vorbisenc->last_message);
+
+  if (vorbisenc->bitrate > 0) {
+    if (vorbisenc->managed) {
+      constraints = get_constraints_string (vorbisenc);
+      vorbisenc->last_message =
+          g_strdup_printf ("encoding at average bitrate %d bps %s",
+          vorbisenc->bitrate, constraints);
+      g_free (constraints);
+    } else {
+      vorbisenc->last_message =
+          g_strdup_printf
+          ("encoding at approximate bitrate %d bps (VBR encoding enabled)",
+          vorbisenc->bitrate);
+    }
+  } else {
+    if (vorbisenc->quality_set) {
+      if (vorbisenc->managed) {
+        constraints = get_constraints_string (vorbisenc);
+        vorbisenc->last_message =
+            g_strdup_printf
+            ("encoding at quality level %2.2f using constrained VBR %s",
+            vorbisenc->quality, constraints);
+        g_free (constraints);
+      } else {
+        vorbisenc->last_message =
+            g_strdup_printf ("encoding at quality level %2.2f",
+            vorbisenc->quality);
+      }
+    } else {
+      constraints = get_constraints_string (vorbisenc);
+      vorbisenc->last_message =
+          g_strdup_printf ("encoding using bitrate management %s", constraints);
+      g_free (constraints);
+    }
+  }
+
+  g_object_notify (G_OBJECT (vorbisenc), "last_message");
+}
+
+static gboolean
+gst_vorbis_enc_setup (GstVorbisEnc * vorbisenc)
+{
+  vorbisenc->setup = FALSE;
+
+  if (vorbisenc->bitrate < 0 && vorbisenc->min_bitrate < 0
+      && vorbisenc->max_bitrate < 0) {
+    vorbisenc->quality_set = TRUE;
+  }
+
+  update_start_message (vorbisenc);
+
+  /* choose an encoding mode */
+  /* (mode 0: 44kHz stereo uncoupled, roughly 128kbps VBR) */
+  vorbis_info_init (&vorbisenc->vi);
+
+  if (vorbisenc->quality_set) {
+    if (vorbis_encode_setup_vbr (&vorbisenc->vi,
+            vorbisenc->channels, vorbisenc->frequency,
+            vorbisenc->quality) != 0) {
+      GST_ERROR_OBJECT (vorbisenc,
+          "vorbisenc: initialisation failed: invalid parameters for quality");
+      vorbis_info_clear (&vorbisenc->vi);
+      return FALSE;
+    }
+
+    /* do we have optional hard quality restrictions? */
+    if (vorbisenc->max_bitrate > 0 || vorbisenc->min_bitrate > 0) {
+      struct ovectl_ratemanage_arg ai;
+
+      vorbis_encode_ctl (&vorbisenc->vi, OV_ECTL_RATEMANAGE_GET, &ai);
+
+      ai.bitrate_hard_min = vorbisenc->min_bitrate;
+      ai.bitrate_hard_max = vorbisenc->max_bitrate;
+      ai.management_active = 1;
+
+      vorbis_encode_ctl (&vorbisenc->vi, OV_ECTL_RATEMANAGE_SET, &ai);
+    }
+  } else {
+    long min_bitrate, max_bitrate;
+
+    min_bitrate = vorbisenc->min_bitrate > 0 ? vorbisenc->min_bitrate : -1;
+    max_bitrate = vorbisenc->max_bitrate > 0 ? vorbisenc->max_bitrate : -1;
+
+    if (vorbis_encode_setup_managed (&vorbisenc->vi,
+            vorbisenc->channels,
+            vorbisenc->frequency,
+            max_bitrate, vorbisenc->bitrate, min_bitrate) != 0) {
+      GST_ERROR_OBJECT (vorbisenc,
+          "vorbis_encode_setup_managed "
+          "(c %d, rate %d, max br %ld, br %d, min br %ld) failed",
+          vorbisenc->channels, vorbisenc->frequency, max_bitrate,
+          vorbisenc->bitrate, min_bitrate);
+      vorbis_info_clear (&vorbisenc->vi);
+      return FALSE;
+    }
+  }
+
+  if (vorbisenc->managed && vorbisenc->bitrate < 0) {
+    vorbis_encode_ctl (&vorbisenc->vi, OV_ECTL_RATEMANAGE_AVG, NULL);
+  } else if (!vorbisenc->managed) {
+    /* Turn off management entirely (if it was turned on). */
+    vorbis_encode_ctl (&vorbisenc->vi, OV_ECTL_RATEMANAGE_SET, NULL);
+  }
+  vorbis_encode_setup_init (&vorbisenc->vi);
+
+  /* set up the analysis state and auxiliary encoding storage */
+  vorbis_analysis_init (&vorbisenc->vd, &vorbisenc->vi);
+  vorbis_block_init (&vorbisenc->vd, &vorbisenc->vb);
+
+  vorbisenc->next_ts = 0;
+
+  vorbisenc->setup = TRUE;
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_vorbis_enc_clear (GstVorbisEnc * vorbisenc)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  if (vorbisenc->setup) {
+    vorbis_analysis_wrote (&vorbisenc->vd, 0);
+    ret = gst_vorbis_enc_output_buffers (vorbisenc);
+
+    vorbisenc->setup = FALSE;
+  }
+
+  /* clean up and exit.  vorbis_info_clear() must be called last */
+  vorbis_block_clear (&vorbisenc->vb);
+  vorbis_dsp_clear (&vorbisenc->vd);
+  vorbis_info_clear (&vorbisenc->vi);
+
+  vorbisenc->header_sent = FALSE;
+
+  return ret;
+}
+
+/* prepare a buffer for transmission by passing data through libvorbis */
+static GstBuffer *
+gst_vorbis_enc_buffer_from_packet (GstVorbisEnc * vorbisenc,
+    ogg_packet * packet)
+{
+  GstBuffer *outbuf;
+
+  outbuf = gst_buffer_new_and_alloc (packet->bytes);
+  gst_buffer_fill (outbuf, 0, packet->packet, packet->bytes);
+  /* see ext/ogg/README; OFFSET_END takes "our" granulepos, OFFSET its
+   * time representation */
+  GST_BUFFER_OFFSET_END (outbuf) = packet->granulepos +
+      vorbisenc->granulepos_offset;
+  GST_BUFFER_OFFSET (outbuf) = granulepos_to_timestamp (vorbisenc,
+      GST_BUFFER_OFFSET_END (outbuf));
+  GST_BUFFER_TIMESTAMP (outbuf) = vorbisenc->next_ts;
+
+  /* update the next timestamp, taking granulepos_offset and subgranule offset
+   * into account */
+  vorbisenc->next_ts =
+      granulepos_to_timestamp_offset (vorbisenc, packet->granulepos);
+  GST_BUFFER_DURATION (outbuf) =
+      vorbisenc->next_ts - GST_BUFFER_TIMESTAMP (outbuf);
+
+  if (vorbisenc->next_discont) {
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+    vorbisenc->next_discont = FALSE;
+  }
+
+  GST_LOG_OBJECT (vorbisenc, "encoded buffer of %" G_GSIZE_FORMAT " bytes",
+      gst_buffer_get_size (outbuf));
+  return outbuf;
+}
+
+/* the same as above, but different logic for setting timestamp and granulepos
+ * */
+static GstBuffer *
+gst_vorbis_enc_buffer_from_header_packet (GstVorbisEnc * vorbisenc,
+    ogg_packet * packet)
+{
+  GstBuffer *outbuf;
+
+  outbuf = gst_buffer_new_and_alloc (packet->bytes);
+  gst_buffer_fill (outbuf, 0, packet->packet, packet->bytes);
+  GST_BUFFER_OFFSET (outbuf) = vorbisenc->bytes_out;
+  GST_BUFFER_OFFSET_END (outbuf) = 0;
+  GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
+
+  GST_DEBUG ("created header packet buffer, %" G_GSIZE_FORMAT " bytes",
+      gst_buffer_get_size (outbuf));
+  return outbuf;
+}
+
+/* push out the buffer and do internal bookkeeping */
+static GstFlowReturn
+gst_vorbis_enc_push_buffer (GstVorbisEnc * vorbisenc, GstBuffer * buffer)
+{
+  vorbisenc->bytes_out += gst_buffer_get_size (buffer);
+
+  GST_DEBUG_OBJECT (vorbisenc,
+      "Pushing buffer with GP %" G_GINT64_FORMAT ", ts %" GST_TIME_FORMAT,
+      GST_BUFFER_OFFSET_END (buffer),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+  return gst_pad_push (vorbisenc->srcpad, buffer);
+}
+
+static GstFlowReturn
+gst_vorbis_enc_push_packet (GstVorbisEnc * vorbisenc, ogg_packet * packet)
+{
+  GstBuffer *outbuf;
+
+  outbuf = gst_vorbis_enc_buffer_from_packet (vorbisenc, packet);
+  return gst_vorbis_enc_push_buffer (vorbisenc, outbuf);
+}
+
+/* Set a copy of these buffers as 'streamheader' on the caps.
+ * We need a copy to avoid these buffers ending up with (indirect) refs on
+ * themselves
+ */
+static GstCaps *
+gst_vorbis_enc_set_header_on_caps (GstCaps * caps, GstBuffer * buf1,
+    GstBuffer * buf2, GstBuffer * buf3)
+{
+  GstBuffer *buf;
+  GstStructure *structure;
+  GValue array = { 0 };
+  GValue value = { 0 };
+
+  caps = gst_caps_make_writable (caps);
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* mark buffers */
+  GST_BUFFER_FLAG_SET (buf1, GST_BUFFER_FLAG_IN_CAPS);
+  GST_BUFFER_FLAG_SET (buf2, GST_BUFFER_FLAG_IN_CAPS);
+  GST_BUFFER_FLAG_SET (buf3, GST_BUFFER_FLAG_IN_CAPS);
+
+  /* put buffers in a fixed list */
+  g_value_init (&array, GST_TYPE_ARRAY);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  buf = gst_buffer_copy (buf1);
+  gst_value_set_buffer (&value, buf);
+  gst_buffer_unref (buf);
+  gst_value_array_append_value (&array, &value);
+  g_value_unset (&value);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  buf = gst_buffer_copy (buf2);
+  gst_value_set_buffer (&value, buf);
+  gst_buffer_unref (buf);
+  gst_value_array_append_value (&array, &value);
+  g_value_unset (&value);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  buf = gst_buffer_copy (buf3);
+  gst_value_set_buffer (&value, buf);
+  gst_buffer_unref (buf);
+  gst_value_array_append_value (&array, &value);
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&value);
+  g_value_unset (&array);
+
+  return caps;
+}
+
+static gboolean
+gst_vorbis_enc_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = TRUE;
+  GstVorbisEnc *vorbisenc;
+
+  vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_vorbis_enc_sink_setcaps (vorbisenc, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_EOS:
+      /* Tell the library we're at end of stream so that it can handle
+       * the last frame and mark end of stream in the output properly */
+      GST_DEBUG_OBJECT (vorbisenc, "EOS, clearing state and sending event on");
+      gst_vorbis_enc_clear (vorbisenc);
+
+      res = gst_pad_push_event (vorbisenc->srcpad, event);
+      break;
+    case GST_EVENT_TAG:
+      if (vorbisenc->tags) {
+        GstTagList *list;
+
+        gst_event_parse_tag (event, &list);
+        gst_tag_list_insert (vorbisenc->tags, list,
+            gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (vorbisenc)));
+      } else {
+        g_assert_not_reached ();
+      }
+      res = gst_pad_push_event (vorbisenc->srcpad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      if (segment->format == GST_FORMAT_TIME) {
+        gst_segment_copy_into (segment, &vorbisenc->segment);
+      }
+    }
+      /* fall through */
+    default:
+      res = gst_pad_push_event (vorbisenc->srcpad, event);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_vorbis_enc_buffer_check_discontinuous (GstVorbisEnc * vorbisenc,
+    GstClockTime timestamp, GstClockTime duration)
+{
+  gboolean ret = FALSE;
+
+  GST_DEBUG_OBJECT (vorbisenc, "exp %" GST_TIME_FORMAT " time %" GST_TIME_FORMAT
+      "dur %" GST_TIME_FORMAT, GST_TIME_ARGS (vorbisenc->expected_ts),
+      GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
+
+  if (timestamp != GST_CLOCK_TIME_NONE &&
+      vorbisenc->expected_ts != GST_CLOCK_TIME_NONE &&
+      timestamp + duration != vorbisenc->expected_ts) {
+    /* It turns out that a lot of elements don't generate perfect streams due
+     * to rounding errors. So, we permit small errors (< 3 samples) without
+     * causing a discont.
+     */
+    int threesample = GST_SECOND / vorbisenc->frequency * 3;
+
+    if ((GstClockTimeDiff) (timestamp - vorbisenc->expected_ts) > threesample) {
+      GST_DEBUG_OBJECT (vorbisenc, "Expected TS %" GST_TIME_FORMAT
+          ", buffer TS %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (vorbisenc->expected_ts), GST_TIME_ARGS (timestamp));
+      ret = TRUE;
+    }
+  }
+
+  if (timestamp != GST_CLOCK_TIME_NONE && duration != GST_CLOCK_TIME_NONE) {
+    vorbisenc->expected_ts = timestamp + duration;
+  } else
+    vorbisenc->expected_ts = GST_CLOCK_TIME_NONE;
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_vorbis_enc_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstVorbisEnc *vorbisenc;
+  GstFlowReturn ret = GST_FLOW_OK;
+  gfloat *data, *ptr;
+  gulong size;
+  gulong i, j;
+  float **vorbis_buffer;
+  GstBuffer *buf1, *buf2, *buf3;
+  gboolean first = FALSE;
+  GstClockTime timestamp = GST_CLOCK_TIME_NONE;
+  GstClockTime running_time = GST_CLOCK_TIME_NONE;
+  gsize bsize;
+
+  vorbisenc = GST_VORBISENC (GST_PAD_PARENT (pad));
+
+  if (!vorbisenc->setup)
+    goto not_setup;
+
+  buffer = gst_audio_buffer_clip (buffer, &vorbisenc->segment,
+      vorbisenc->frequency, 4 * vorbisenc->channels);
+  if (buffer == NULL) {
+    GST_DEBUG_OBJECT (vorbisenc, "Dropping buffer, out of segment");
+    return GST_FLOW_OK;
+  }
+  running_time =
+      gst_segment_to_running_time (&vorbisenc->segment, GST_FORMAT_TIME,
+      GST_BUFFER_TIMESTAMP (buffer));
+  timestamp = running_time;
+  GST_DEBUG_OBJECT (vorbisenc, " timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+  if (!vorbisenc->header_sent) {
+    /* Vorbis streams begin with three headers; the initial header (with
+       most of the codec setup parameters) which is mandated by the Ogg
+       bitstream spec.  The second header holds any comment fields.  The
+       third header holds the bitstream codebook.  We merely need to
+       make the headers, then pass them to libvorbis one at a time;
+       libvorbis handles the additional Ogg bitstream constraints */
+    ogg_packet header;
+    ogg_packet header_comm;
+    ogg_packet header_code;
+    GstCaps *caps;
+
+    /* first, make sure header buffers get timestamp == 0 */
+    vorbisenc->next_ts = 0;
+    vorbisenc->granulepos_offset = 0;
+    vorbisenc->subgranule_offset = 0;
+
+    GST_DEBUG_OBJECT (vorbisenc, "creating and sending header packets");
+    gst_vorbis_enc_set_metadata (vorbisenc);
+    vorbis_analysis_headerout (&vorbisenc->vd, &vorbisenc->vc, &header,
+        &header_comm, &header_code);
+    vorbis_comment_clear (&vorbisenc->vc);
+
+    /* create header buffers */
+    buf1 = gst_vorbis_enc_buffer_from_header_packet (vorbisenc, &header);
+    buf2 = gst_vorbis_enc_buffer_from_header_packet (vorbisenc, &header_comm);
+    buf3 = gst_vorbis_enc_buffer_from_header_packet (vorbisenc, &header_code);
+
+    /* mark and put on caps */
+    vorbisenc->srccaps = gst_caps_new_simple ("audio/x-vorbis", NULL);
+    caps = vorbisenc->srccaps;
+    caps = gst_vorbis_enc_set_header_on_caps (caps, buf1, buf2, buf3);
+
+    /* negotiate with these caps */
+    GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps);
+    gst_pad_set_caps (vorbisenc->srcpad, caps);
+
+    /* push out buffers */
+    /* push_buffer takes the reference even for failure */
+    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf1)) != GST_FLOW_OK)
+      goto failed_header_push;
+    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf2)) != GST_FLOW_OK) {
+      buf2 = NULL;
+      goto failed_header_push;
+    }
+    if ((ret = gst_vorbis_enc_push_buffer (vorbisenc, buf3)) != GST_FLOW_OK) {
+      buf3 = NULL;
+      goto failed_header_push;
+    }
+
+    /* now adjust starting granulepos accordingly if the buffer's timestamp is
+       nonzero */
+    vorbisenc->next_ts = timestamp;
+    vorbisenc->expected_ts = timestamp;
+    vorbisenc->granulepos_offset = gst_util_uint64_scale
+        (running_time, vorbisenc->frequency, GST_SECOND);
+    vorbisenc->subgranule_offset = 0;
+    vorbisenc->subgranule_offset =
+        vorbisenc->next_ts - granulepos_to_timestamp_offset (vorbisenc, 0);
+
+    vorbisenc->header_sent = TRUE;
+    first = TRUE;
+  }
+
+  if (vorbisenc->expected_ts != GST_CLOCK_TIME_NONE &&
+      timestamp < vorbisenc->expected_ts) {
+    int threesample = GST_SECOND / vorbisenc->frequency * 3;
+    guint64 diff = vorbisenc->expected_ts - timestamp;
+    guint64 diff_bytes;
+    gsize size;
+
+    /* Don't freak out on tiny jitters; use the same < 3 sample
+       tolerance as in the discontinuous detection */
+    if ((GstClockTimeDiff) (vorbisenc->expected_ts - timestamp) > threesample) {
+
+      GST_WARNING_OBJECT (vorbisenc, "Buffer is older than previous "
+          "timestamp + duration (%" GST_TIME_FORMAT "< %" GST_TIME_FORMAT
+          "), cannot handle. Clipping buffer.",
+          GST_TIME_ARGS (timestamp), GST_TIME_ARGS (vorbisenc->expected_ts));
+
+      size = gst_buffer_get_size (buffer);
+
+      diff_bytes =
+          GST_CLOCK_TIME_TO_FRAMES (diff,
+          vorbisenc->frequency) * vorbisenc->channels * sizeof (gfloat);
+      if (diff_bytes >= size) {
+        gst_buffer_unref (buffer);
+        return GST_FLOW_OK;
+      }
+      buffer = gst_buffer_make_writable (buffer);
+      gst_buffer_resize (buffer, diff_bytes, size - diff_bytes);
+
+      if (GST_BUFFER_DURATION_IS_VALID (buffer))
+        GST_BUFFER_DURATION (buffer) -= diff;
+    }
+
+    /* adjust the input timestamp in either case */
+    GST_BUFFER_TIMESTAMP (buffer) += diff;
+  }
+
+  if (gst_vorbis_enc_buffer_check_discontinuous (vorbisenc, timestamp,
+          GST_BUFFER_DURATION (buffer)) && !first) {
+    GST_WARNING_OBJECT (vorbisenc,
+        "Buffer is discontinuous, flushing encoder "
+        "and restarting (Discont from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT
+        ")", GST_TIME_ARGS (vorbisenc->next_ts), GST_TIME_ARGS (timestamp));
+    /* Re-initialise encoder (there's unfortunately no API to flush it) */
+    if ((ret = gst_vorbis_enc_clear (vorbisenc)) != GST_FLOW_OK)
+      return ret;
+    if (!gst_vorbis_enc_setup (vorbisenc))
+      return GST_FLOW_ERROR;    /* Should be impossible, we can only get here if
+                                   we successfully initialised earlier */
+
+    /* Now, set our granulepos offset appropriately. */
+    vorbisenc->next_ts = timestamp;
+    /* We need to round to the nearest whole number of samples, not just do
+     * a truncating division here */
+    vorbisenc->granulepos_offset = gst_util_uint64_scale
+        (running_time + GST_SECOND / vorbisenc->frequency / 2
+        - vorbisenc->subgranule_offset, vorbisenc->frequency, GST_SECOND);
+
+    vorbisenc->header_sent = TRUE;
+
+    /* And our next output buffer must have DISCONT set on it */
+    vorbisenc->next_discont = TRUE;
+  }
+
+  /* Sending zero samples to libvorbis marks EOS, so we mustn't do that */
+  data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_WRITE);
+  if (bsize == 0) {
+    gst_buffer_unmap (buffer, data, bsize);
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  }
+
+  /* data to encode */
+  size = bsize / (vorbisenc->channels * sizeof (float));
+
+  ptr = data;
+
+  /* expose the buffer to submit data */
+  vorbis_buffer = vorbis_analysis_buffer (&vorbisenc->vd, size);
+
+  /* deinterleave samples, write the buffer data */
+  for (i = 0; i < size; i++) {
+    for (j = 0; j < vorbisenc->channels; j++) {
+      vorbis_buffer[j][i] = *ptr++;
+    }
+  }
+
+  /* tell the library how much we actually submitted */
+  vorbis_analysis_wrote (&vorbisenc->vd, size);
+  gst_buffer_unmap (buffer, data, bsize);
+
+  GST_LOG_OBJECT (vorbisenc, "wrote %lu samples to vorbis", size);
+
+  vorbisenc->samples_in += size;
+
+  gst_buffer_unref (buffer);
+
+  ret = gst_vorbis_enc_output_buffers (vorbisenc);
+
+  return ret;
+
+  /* error cases */
+not_setup:
+  {
+    gst_buffer_unref (buffer);
+    GST_ELEMENT_ERROR (vorbisenc, CORE, NEGOTIATION, (NULL),
+        ("encoder not initialized (input is not audio?)"));
+    return GST_FLOW_UNEXPECTED;
+  }
+failed_header_push:
+  {
+    GST_WARNING_OBJECT (vorbisenc, "Failed to push headers");
+    /* buf1 is always already unreffed */
+    if (buf2)
+      gst_buffer_unref (buf2);
+    if (buf3)
+      gst_buffer_unref (buf3);
+    gst_buffer_unref (buffer);
+    return ret;
+  }
+}
+
+static GstFlowReturn
+gst_vorbis_enc_output_buffers (GstVorbisEnc * vorbisenc)
+{
+  GstFlowReturn ret;
+
+  /* vorbis does some data preanalysis, then divides up blocks for
+     more involved (potentially parallel) processing.  Get a single
+     block for encoding now */
+  while (vorbis_analysis_blockout (&vorbisenc->vd, &vorbisenc->vb) == 1) {
+    ogg_packet op;
+
+    GST_LOG_OBJECT (vorbisenc, "analysed to a block");
+
+    /* analysis */
+    vorbis_analysis (&vorbisenc->vb, NULL);
+    vorbis_bitrate_addblock (&vorbisenc->vb);
+
+    while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) {
+      GST_LOG_OBJECT (vorbisenc, "pushing out a data packet");
+      ret = gst_vorbis_enc_push_packet (vorbisenc, &op);
+
+      if (ret != GST_FLOW_OK)
+        return ret;
+    }
+  }
+
+  return GST_FLOW_OK;
+}
+
+static void
+gst_vorbis_enc_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstVorbisEnc *vorbisenc;
+
+  g_return_if_fail (GST_IS_VORBISENC (object));
+
+  vorbisenc = GST_VORBISENC (object);
+
+  switch (prop_id) {
+    case ARG_MAX_BITRATE:
+      g_value_set_int (value, vorbisenc->max_bitrate);
+      break;
+    case ARG_BITRATE:
+      g_value_set_int (value, vorbisenc->bitrate);
+      break;
+    case ARG_MIN_BITRATE:
+      g_value_set_int (value, vorbisenc->min_bitrate);
+      break;
+    case ARG_QUALITY:
+      g_value_set_float (value, vorbisenc->quality);
+      break;
+    case ARG_MANAGED:
+      g_value_set_boolean (value, vorbisenc->managed);
+      break;
+    case ARG_LAST_MESSAGE:
+      g_value_set_string (value, vorbisenc->last_message);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_vorbis_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVorbisEnc *vorbisenc;
+
+  g_return_if_fail (GST_IS_VORBISENC (object));
+
+  vorbisenc = GST_VORBISENC (object);
+
+  switch (prop_id) {
+    case ARG_MAX_BITRATE:
+    {
+      gboolean old_value = vorbisenc->managed;
+
+      vorbisenc->max_bitrate = g_value_get_int (value);
+      if (vorbisenc->max_bitrate >= 0
+          && vorbisenc->max_bitrate < LOWEST_BITRATE) {
+        g_warning ("Lowest allowed bitrate is %d", LOWEST_BITRATE);
+        vorbisenc->max_bitrate = LOWEST_BITRATE;
+      }
+      if (vorbisenc->min_bitrate > 0 && vorbisenc->max_bitrate > 0)
+        vorbisenc->managed = TRUE;
+      else
+        vorbisenc->managed = FALSE;
+
+      if (old_value != vorbisenc->managed)
+        g_object_notify (object, "managed");
+      break;
+    }
+    case ARG_BITRATE:
+      vorbisenc->bitrate = g_value_get_int (value);
+      if (vorbisenc->bitrate >= 0 && vorbisenc->bitrate < LOWEST_BITRATE) {
+        g_warning ("Lowest allowed bitrate is %d", LOWEST_BITRATE);
+        vorbisenc->bitrate = LOWEST_BITRATE;
+      }
+      break;
+    case ARG_MIN_BITRATE:
+    {
+      gboolean old_value = vorbisenc->managed;
+
+      vorbisenc->min_bitrate = g_value_get_int (value);
+      if (vorbisenc->min_bitrate >= 0
+          && vorbisenc->min_bitrate < LOWEST_BITRATE) {
+        g_warning ("Lowest allowed bitrate is %d", LOWEST_BITRATE);
+        vorbisenc->min_bitrate = LOWEST_BITRATE;
+      }
+      if (vorbisenc->min_bitrate > 0 && vorbisenc->max_bitrate > 0)
+        vorbisenc->managed = TRUE;
+      else
+        vorbisenc->managed = FALSE;
+
+      if (old_value != vorbisenc->managed)
+        g_object_notify (object, "managed");
+      break;
+    }
+    case ARG_QUALITY:
+      vorbisenc->quality = g_value_get_float (value);
+      if (vorbisenc->quality >= 0.0)
+        vorbisenc->quality_set = TRUE;
+      else
+        vorbisenc->quality_set = FALSE;
+      break;
+    case ARG_MANAGED:
+      vorbisenc->managed = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_vorbis_enc_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVorbisEnc *vorbisenc = GST_VORBISENC (element);
+  GstStateChangeReturn res;
+
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      vorbisenc->tags = gst_tag_list_new ();
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      vorbisenc->setup = FALSE;
+      vorbisenc->next_discont = FALSE;
+      vorbisenc->header_sent = FALSE;
+      gst_segment_init (&vorbisenc->segment, GST_FORMAT_TIME);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      vorbis_block_clear (&vorbisenc->vb);
+      vorbis_dsp_clear (&vorbisenc->vd);
+      vorbis_info_clear (&vorbisenc->vi);
+      g_free (vorbisenc->last_message);
+      vorbisenc->last_message = NULL;
+      if (vorbisenc->srccaps) {
+        gst_caps_unref (vorbisenc->srccaps);
+        vorbisenc->srccaps = NULL;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_tag_list_free (vorbisenc->tags);
+      vorbisenc->tags = NULL;
+    default:
+      break;
+  }
+
+  return res;
+}
diff --git a/ext/vorbis/gstvorbisenc.h b/ext/vorbis/gstvorbisenc.h
new file mode 100644
index 0000000..840f2bd
--- /dev/null
+++ b/ext/vorbis/gstvorbisenc.h
@@ -0,0 +1,100 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_VORBIS_ENC_H__
+#define __GST_VORBIS_ENC_H__
+
+
+#include <gst/gst.h>
+
+#include <vorbis/codec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VORBISENC \
+  (gst_vorbis_enc_get_type())
+#define GST_VORBISENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VORBISENC,GstVorbisEnc))
+#define GST_VORBISENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VORBISENC,GstVorbisEncClass))
+#define GST_IS_VORBISENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VORBISENC))
+#define GST_IS_VORBISENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VORBISENC))
+
+typedef struct _GstVorbisEnc GstVorbisEnc;
+typedef struct _GstVorbisEncClass GstVorbisEncClass;
+
+/**
+ * GstVorbisEnc:
+ *
+ * Opaque data structure.
+ */
+struct _GstVorbisEnc {
+  GstElement       element;
+
+  GstPad          *sinkpad;
+  GstPad          *srcpad;
+
+  GstCaps         *srccaps;
+  GstCaps         *sinkcaps;
+
+  vorbis_info      vi; /* struct that stores all the static vorbis bitstream
+                                                            settings */
+  vorbis_comment   vc; /* struct that stores all the user comments */
+
+  vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+  vorbis_block     vb; /* local working space for packet->PCM decode */
+
+  gboolean         managed;
+  gint             bitrate;
+  gint             min_bitrate;
+  gint             max_bitrate;
+  gfloat           quality;
+  gboolean         quality_set;
+
+  gint             channels;
+  gint             frequency;
+
+  guint64          samples_in;
+  guint64          bytes_out;
+  GstClockTime     next_ts;
+  GstClockTime     expected_ts;
+  gboolean         next_discont;
+  guint64          granulepos_offset;
+  gint64           subgranule_offset;
+  GstSegment       segment;
+
+  GstTagList *     tags;
+
+  gboolean         setup;
+  gboolean         header_sent;
+  gchar           *last_message;
+};
+
+struct _GstVorbisEncClass {
+  GstElementClass parent_class;
+};
+
+GType gst_vorbis_enc_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_VORBIS_ENC_H__ */
diff --git a/ext/vorbis/gstvorbisparse.c b/ext/vorbis/gstvorbisparse.c
new file mode 100644
index 0000000..f3fccfd
--- /dev/null
+++ b/ext/vorbis/gstvorbisparse.c
@@ -0,0 +1,661 @@
+/* GStreamer
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2006 Andy Wingo <wingo@pobox.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-vorbisparse
+ * @see_also: vorbisdec, oggdemux, theoraparse
+ *
+ * The vorbisparse element will parse the header packets of the Vorbis
+ * stream and put them as the streamheader in the caps. This is used in the
+ * multifdsink case where you want to stream live vorbis streams to multiple
+ * clients, each client has to receive the streamheaders first before they can
+ * consume the vorbis packets.
+ *
+ * This element also makes sure that the buffers that it pushes out are properly
+ * timestamped and that their offset and offset_end are set. The buffers that
+ * vorbisparse outputs have all of the metadata that oggmux expects to receive,
+ * which allows you to (for example) remux an ogg/vorbis file.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisparse ! fakesink
+ * ]| This pipeline shows that the streamheader is set in the caps, and that each
+ * buffer has the timestamp, duration, offset, and offset_end set.
+ * |[
+ * gst-launch filesrc location=sine.ogg ! oggdemux ! vorbisparse \
+ *            ! oggmux ! filesink location=sine-remuxed.ogg
+ * ]| This pipeline shows remuxing. sine-remuxed.ogg might not be exactly the same
+ * as sine.ogg, but they should produce exactly the same decoded data.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-04-01 (0.10.4.1)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstvorbisparse.h"
+
+GST_DEBUG_CATEGORY_EXTERN (vorbisparse_debug);
+#define GST_CAT_DEFAULT vorbisparse_debug
+
+static GstStaticPadTemplate vorbis_parse_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-vorbis")
+    );
+
+static GstStaticPadTemplate vorbis_parse_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-vorbis")
+    );
+
+#define gst_vorbis_parse_parent_class parent_class
+G_DEFINE_TYPE (GstVorbisParse, gst_vorbis_parse, GST_TYPE_ELEMENT);
+
+static GstFlowReturn vorbis_parse_chain (GstPad * pad, GstBuffer * buffer);
+static GstStateChangeReturn vorbis_parse_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean vorbis_parse_sink_event (GstPad * pad, GstEvent * event);
+static gboolean vorbis_parse_src_query (GstPad * pad, GstQuery * query);
+static gboolean vorbis_parse_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value);
+static GstFlowReturn vorbis_parse_parse_packet (GstVorbisParse * parse,
+    GstBuffer * buf);
+
+static void
+gst_vorbis_parse_class_init (GstVorbisParseClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gstelement_class->change_state = vorbis_parse_change_state;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_parse_src_factory));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&vorbis_parse_sink_factory));
+  gst_element_class_set_details_simple (gstelement_class,
+      "VorbisParse", "Codec/Parser/Audio",
+      "parse raw vorbis streams",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  klass->parse_packet = GST_DEBUG_FUNCPTR (vorbis_parse_parse_packet);
+}
+
+static void
+gst_vorbis_parse_init (GstVorbisParse * parse)
+{
+  parse->sinkpad =
+      gst_pad_new_from_static_template (&vorbis_parse_sink_factory, "sink");
+  gst_pad_set_chain_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (vorbis_parse_chain));
+  gst_pad_set_event_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (vorbis_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+
+  parse->srcpad =
+      gst_pad_new_from_static_template (&vorbis_parse_src_factory, "src");
+  gst_pad_set_query_function (parse->srcpad,
+      GST_DEBUG_FUNCPTR (vorbis_parse_src_query));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
+}
+
+static void
+vorbis_parse_set_header_on_caps (GstVorbisParse * parse, GstCaps * caps)
+{
+  GstBuffer *buf1, *buf2, *buf3;
+  GstStructure *structure;
+  GValue array = { 0 };
+  GValue value = { 0 };
+
+  g_assert (parse);
+  g_assert (parse->streamheader);
+  g_assert (parse->streamheader->next);
+  g_assert (parse->streamheader->next->next);
+  buf1 = parse->streamheader->data;
+  g_assert (buf1);
+  buf2 = parse->streamheader->next->data;
+  g_assert (buf2);
+  buf3 = parse->streamheader->next->next->data;
+  g_assert (buf3);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* mark buffers */
+  GST_BUFFER_FLAG_SET (buf1, GST_BUFFER_FLAG_IN_CAPS);
+  GST_BUFFER_FLAG_SET (buf2, GST_BUFFER_FLAG_IN_CAPS);
+  GST_BUFFER_FLAG_SET (buf3, GST_BUFFER_FLAG_IN_CAPS);
+
+  /* put buffers in a fixed list */
+  g_value_init (&array, GST_TYPE_ARRAY);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  gst_value_set_buffer (&value, buf1);
+  gst_value_array_append_value (&array, &value);
+  g_value_unset (&value);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  gst_value_set_buffer (&value, buf2);
+  gst_value_array_append_value (&array, &value);
+  g_value_unset (&value);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  gst_value_set_buffer (&value, buf3);
+  gst_value_array_append_value (&array, &value);
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&value);
+  g_value_unset (&array);
+}
+
+static void
+vorbis_parse_drain_event_queue (GstVorbisParse * parse)
+{
+  while (parse->event_queue->length) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (parse->event_queue));
+    gst_pad_event_default (parse->sinkpad, event);
+  }
+}
+
+static void
+vorbis_parse_push_headers (GstVorbisParse * parse)
+{
+  /* mark and put on caps */
+  GstCaps *caps;
+  GstBuffer *outbuf, *outbuf1, *outbuf2, *outbuf3;
+  ogg_packet packet;
+  gsize size;
+
+  /* get the headers into the caps, passing them to vorbis as we go */
+  caps = gst_caps_make_writable (gst_pad_get_caps (parse->srcpad, NULL));
+  vorbis_parse_set_header_on_caps (parse, caps);
+  GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps);
+  gst_pad_set_caps (parse->srcpad, caps);
+  gst_caps_unref (caps);
+
+  outbuf = GST_BUFFER_CAST (parse->streamheader->data);
+  packet.packet = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  packet.granulepos = GST_BUFFER_OFFSET_END (outbuf);
+  packet.packetno = 1;
+  packet.e_o_s = 0;
+  packet.b_o_s = 1;
+  vorbis_synthesis_headerin (&parse->vi, &parse->vc, &packet);
+  gst_buffer_unmap (outbuf, packet.packet, size);
+  parse->sample_rate = parse->vi.rate;
+  outbuf1 = outbuf;
+
+  outbuf = GST_BUFFER_CAST (parse->streamheader->next->data);
+  packet.packet = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  packet.granulepos = GST_BUFFER_OFFSET_END (outbuf);
+  packet.packetno = 2;
+  packet.e_o_s = 0;
+  packet.b_o_s = 0;
+  vorbis_synthesis_headerin (&parse->vi, &parse->vc, &packet);
+  gst_buffer_unmap (outbuf, packet.packet, size);
+  outbuf2 = outbuf;
+
+  outbuf = GST_BUFFER_CAST (parse->streamheader->next->next->data);
+  packet.packet = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  packet.granulepos = GST_BUFFER_OFFSET_END (outbuf);
+  packet.packetno = 3;
+  packet.e_o_s = 0;
+  packet.b_o_s = 0;
+  vorbis_synthesis_headerin (&parse->vi, &parse->vc, &packet);
+  gst_buffer_unmap (outbuf, packet.packet, size);
+  outbuf3 = outbuf;
+
+  /* first process queued events */
+  vorbis_parse_drain_event_queue (parse);
+
+  /* push out buffers, ignoring return value... */
+  gst_pad_push (parse->srcpad, outbuf1);
+  gst_pad_push (parse->srcpad, outbuf2);
+  gst_pad_push (parse->srcpad, outbuf3);
+
+  g_list_free (parse->streamheader);
+  parse->streamheader = NULL;
+}
+
+static void
+vorbis_parse_clear_queue (GstVorbisParse * parse)
+{
+  while (parse->buffer_queue->length) {
+    GstBuffer *buf;
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+    gst_buffer_unref (buf);
+  }
+  while (parse->event_queue->length) {
+    GstEvent *event;
+
+    event = GST_EVENT_CAST (g_queue_pop_head (parse->event_queue));
+    gst_event_unref (event);
+  }
+}
+
+static GstFlowReturn
+vorbis_parse_push_buffer (GstVorbisParse * parse, GstBuffer * buf,
+    gint64 granulepos)
+{
+  guint64 samples;
+
+  /* our hack as noted below */
+  samples = GST_BUFFER_OFFSET (buf);
+
+  GST_BUFFER_OFFSET_END (buf) = granulepos;
+  GST_BUFFER_DURATION (buf) = samples * GST_SECOND / parse->sample_rate;
+  GST_BUFFER_OFFSET (buf) = granulepos * GST_SECOND / parse->sample_rate;
+  GST_BUFFER_TIMESTAMP (buf) =
+      GST_BUFFER_OFFSET (buf) - GST_BUFFER_DURATION (buf);
+
+  return gst_pad_push (parse->srcpad, buf);
+}
+
+static GstFlowReturn
+vorbis_parse_drain_queue_prematurely (GstVorbisParse * parse)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  gint64 granulepos = MAX (parse->prev_granulepos, 0);
+
+  /* got an EOS event, make sure to push out any buffers that were in the queue
+   * -- won't normally be the case, but this catches the
+   * didn't-get-a-granulepos-on-the-last-packet case. Assuming a continuous
+   * stream. */
+
+  /* if we got EOS before any buffers came, go ahead and push the other events
+   * first */
+  vorbis_parse_drain_event_queue (parse);
+
+  while (!g_queue_is_empty (parse->buffer_queue)) {
+    GstBuffer *buf;
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+
+    granulepos += GST_BUFFER_OFFSET (buf);
+    ret = vorbis_parse_push_buffer (parse, buf, granulepos);
+
+    if (ret != GST_FLOW_OK)
+      goto done;
+  }
+
+  parse->prev_granulepos = granulepos;
+
+done:
+  return ret;
+}
+
+static GstFlowReturn
+vorbis_parse_drain_queue (GstVorbisParse * parse, gint64 granulepos)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GList *walk;
+  gint64 cur = granulepos;
+  gint64 gp;
+
+  for (walk = parse->buffer_queue->head; walk; walk = walk->next)
+    cur -= GST_BUFFER_OFFSET (walk->data);
+
+  if (parse->prev_granulepos != -1)
+    cur = MAX (cur, parse->prev_granulepos);
+
+  while (!g_queue_is_empty (parse->buffer_queue)) {
+    GstBuffer *buf;
+
+    buf = GST_BUFFER_CAST (g_queue_pop_head (parse->buffer_queue));
+
+    cur += GST_BUFFER_OFFSET (buf);
+    gp = CLAMP (cur, 0, granulepos);
+
+    ret = vorbis_parse_push_buffer (parse, buf, gp);
+
+    if (ret != GST_FLOW_OK)
+      goto done;
+  }
+
+  parse->prev_granulepos = granulepos;
+
+done:
+  return ret;
+}
+
+static GstFlowReturn
+vorbis_parse_queue_buffer (GstVorbisParse * parse, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  long blocksize;
+  ogg_packet packet;
+  gsize size;
+
+  buf = gst_buffer_make_writable (buf);
+
+  packet.packet = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  packet.bytes = size;
+  packet.granulepos = GST_BUFFER_OFFSET_END (buf);
+  packet.packetno = parse->packetno + parse->buffer_queue->length;
+  packet.e_o_s = 0;
+
+  blocksize = vorbis_packet_blocksize (&parse->vi, &packet);
+  gst_buffer_unmap (buf, packet.packet, size);
+
+  /* temporarily store the sample count in OFFSET -- we overwrite this later */
+
+  if (parse->prev_blocksize < 0)
+    GST_BUFFER_OFFSET (buf) = 0;
+  else
+    GST_BUFFER_OFFSET (buf) = (blocksize + parse->prev_blocksize) / 4;
+
+  parse->prev_blocksize = blocksize;
+
+  g_queue_push_tail (parse->buffer_queue, buf);
+
+  if (GST_BUFFER_OFFSET_END_IS_VALID (buf))
+    ret = vorbis_parse_drain_queue (parse, GST_BUFFER_OFFSET_END (buf));
+
+  return ret;
+}
+
+static GstFlowReturn
+vorbis_parse_parse_packet (GstVorbisParse * parse, GstBuffer * buf)
+{
+  GstFlowReturn ret;
+  guint8 *data;
+  gsize size;
+  gboolean have_header;
+
+  parse->packetno++;
+
+  have_header = FALSE;
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  if (size >= 1) {
+    if (data[0] >= 0x01 && data[0] <= 0x05)
+      have_header = TRUE;
+  }
+  gst_buffer_unmap (buf, data, size);
+
+  if (have_header) {
+    if (!parse->streamheader_sent) {
+      /* we need to collect the headers still */
+      /* so put it on the streamheader list and return */
+      parse->streamheader = g_list_append (parse->streamheader, buf);
+    }
+    ret = GST_FLOW_OK;
+  } else {
+    /* data packet, push the headers we collected before */
+    if (!parse->streamheader_sent) {
+      vorbis_parse_push_headers (parse);
+      parse->streamheader_sent = TRUE;
+    }
+    ret = vorbis_parse_queue_buffer (parse, buf);
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+vorbis_parse_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstVorbisParseClass *klass;
+  GstVorbisParse *parse;
+
+  parse = GST_VORBIS_PARSE (GST_PAD_PARENT (pad));
+  klass = GST_VORBIS_PARSE_CLASS (G_OBJECT_GET_CLASS (parse));
+
+  g_assert (klass->parse_packet != NULL);
+
+  return klass->parse_packet (parse, buffer);
+}
+
+static gboolean
+vorbis_parse_queue_event (GstVorbisParse * parse, GstEvent * event)
+{
+  GstFlowReturn ret = TRUE;
+
+  g_queue_push_tail (parse->event_queue, event);
+
+  return ret;
+}
+
+static gboolean
+vorbis_parse_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean ret;
+  GstVorbisParse *parse;
+
+  parse = GST_VORBIS_PARSE (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      vorbis_parse_clear_queue (parse);
+      parse->prev_granulepos = -1;
+      parse->prev_blocksize = -1;
+      ret = gst_pad_event_default (pad, event);
+      break;
+    case GST_EVENT_EOS:
+      vorbis_parse_drain_queue_prematurely (parse);
+      ret = gst_pad_event_default (pad, event);
+      break;
+    default:
+      if (!parse->streamheader_sent && GST_EVENT_IS_SERIALIZED (event))
+        ret = vorbis_parse_queue_event (parse, event);
+      else
+        ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (parse);
+
+  return ret;
+}
+
+static gboolean
+vorbis_parse_convert (GstPad * pad,
+    GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  GstVorbisParse *parse;
+  guint64 scale = 1;
+
+  parse = GST_VORBIS_PARSE (GST_PAD_PARENT (pad));
+
+  /* fixme: assumes atomic access to lots of instance variables modified from
+   * the streaming thread, including 64-bit variables */
+
+  if (parse->packetno < 4)
+    return FALSE;
+
+  if (src_format == *dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  if (parse->sinkpad == pad &&
+      (src_format == GST_FORMAT_BYTES || *dest_format == GST_FORMAT_BYTES))
+    return FALSE;
+
+  switch (src_format) {
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          scale = sizeof (float) * parse->vi.channels;
+        case GST_FORMAT_DEFAULT:
+          *dest_value =
+              scale * gst_util_uint64_scale_int (src_value, parse->vi.rate,
+              GST_SECOND);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = src_value * sizeof (float) * parse->vi.channels;
+          break;
+        case GST_FORMAT_TIME:
+          *dest_value =
+              gst_util_uint64_scale_int (src_value, GST_SECOND, parse->vi.rate);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          *dest_value = src_value / (sizeof (float) * parse->vi.channels);
+          break;
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND,
+              parse->vi.rate * sizeof (float) * parse->vi.channels);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+
+  return res;
+}
+
+static gboolean
+vorbis_parse_src_query (GstPad * pad, GstQuery * query)
+{
+  gint64 granulepos;
+  GstVorbisParse *parse;
+  gboolean res = FALSE;
+
+  parse = GST_VORBIS_PARSE (GST_PAD_PARENT (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat format;
+      gint64 value;
+
+      granulepos = parse->prev_granulepos;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      /* and convert to the final format */
+      if (!(res =
+              vorbis_parse_convert (pad, GST_FORMAT_DEFAULT, granulepos,
+                  &format, &value)))
+        goto error;
+
+      /* fixme: support segments
+         value = (value - parse->segment_start) + parse->segment_time;
+       */
+
+      gst_query_set_position (query, format, value);
+
+      GST_LOG_OBJECT (parse, "query %p: peer returned granulepos: %"
+          G_GUINT64_FORMAT " - we return %" G_GUINT64_FORMAT " (format %u)",
+          query, granulepos, value, format);
+
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      /* fixme: not threadsafe */
+      /* query peer for total length */
+      if (!gst_pad_is_linked (parse->sinkpad)) {
+        GST_WARNING_OBJECT (parse, "sink pad %" GST_PTR_FORMAT " is not linked",
+            parse->sinkpad);
+        goto error;
+      }
+      if (!(res = gst_pad_query (GST_PAD_PEER (parse->sinkpad), query)))
+        goto error;
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res =
+              vorbis_parse_convert (pad, src_fmt, src_val, &dest_fmt,
+                  &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+  return res;
+
+error:
+  {
+    GST_WARNING_OBJECT (parse, "error handling query");
+    return res;
+  }
+}
+
+static GstStateChangeReturn
+vorbis_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstVorbisParse *parse = GST_VORBIS_PARSE (element);
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      vorbis_info_init (&parse->vi);
+      vorbis_comment_init (&parse->vc);
+      parse->prev_granulepos = -1;
+      parse->prev_blocksize = -1;
+      parse->packetno = 0;
+      parse->streamheader_sent = FALSE;
+      parse->buffer_queue = g_queue_new ();
+      parse->event_queue = g_queue_new ();
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      vorbis_info_clear (&parse->vi);
+      vorbis_comment_clear (&parse->vc);
+      vorbis_parse_clear_queue (parse);
+      g_queue_free (parse->buffer_queue);
+      parse->buffer_queue = NULL;
+      g_queue_free (parse->event_queue);
+      parse->event_queue = NULL;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/ext/vorbis/gstvorbisparse.h b/ext/vorbis/gstvorbisparse.h
new file mode 100644
index 0000000..6538949
--- /dev/null
+++ b/ext/vorbis/gstvorbisparse.h
@@ -0,0 +1,82 @@
+/* -*- c-basic-offset: 2 -*-
+ * GStreamer
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_VORBIS_PARSE_H__
+#define __GST_VORBIS_PARSE_H__
+
+
+#include <gst/gst.h>
+#include <vorbis/codec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VORBIS_PARSE \
+  (gst_vorbis_parse_get_type())
+#define GST_VORBIS_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VORBIS_PARSE,GstVorbisParse))
+#define GST_VORBIS_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VORBIS_PARSE,GstVorbisParseClass))
+#define GST_IS_VORBIS_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VORBIS_PARSE))
+#define GST_IS_VORBIS_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VORBIS_PARSE))
+
+typedef struct _GstVorbisParse GstVorbisParse;
+typedef struct _GstVorbisParseClass GstVorbisParseClass;
+
+/**
+ * GstVorbisParse:
+ *
+ * Opaque data structure.
+ */
+struct _GstVorbisParse {
+  GstElement            element;
+
+  GstPad *              sinkpad;
+  GstPad *              srcpad;
+
+  guint                 packetno;
+  gboolean              streamheader_sent;
+  GList *               streamheader;
+
+  GQueue *		event_queue;
+  GQueue *		buffer_queue;
+
+  vorbis_info		vi;
+  vorbis_comment	vc;
+
+  gint64		prev_granulepos;
+  gint32		prev_blocksize;
+  guint32		sample_rate;
+};
+
+struct _GstVorbisParseClass {
+  GstElementClass parent_class;
+
+  /* virtual functions */
+  GstFlowReturn  (*parse_packet) (GstVorbisParse * parse, GstBuffer * buf);
+};
+
+GType gst_vorbis_parse_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_VORBIS_PARSE_H__ */
diff --git a/ext/vorbis/gstvorbistag.c b/ext/vorbis/gstvorbistag.c
new file mode 100644
index 0000000..60dc485
--- /dev/null
+++ b/ext/vorbis/gstvorbistag.c
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2006 James Livingston <doclivingston@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-vorbistag
+ * @see_also: #oggdemux, #oggmux, #vorbisparse, #GstTagSetter
+ *
+ * The vorbistags element can change the tag contained within a raw
+ * vorbis stream. Specifically, it modifies the comments header packet
+ * of the vorbis stream.
+ *
+ * The element will also process the stream as the #vorbisparse element does
+ * so it can be used when remuxing an Ogg Vorbis stream, without additional
+ * elements.
+ *
+ * Applications can set the tags to write using the #GstTagSetter interface.
+ * Tags contained withing the vorbis bitstream will be picked up
+ * automatically (and merged according to the merge mode set via the tag
+ * setter interface).
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=foo.ogg ! oggdemux ! vorbistag ! oggmux ! filesink location=bar.ogg
+ * ]| This element is not useful with gst-launch, because it does not support
+ * setting the tags on a #GstTagSetter interface. Conceptually, the element
+ * will usually be used in this order though.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <glib.h>
+#include <gst/tag/tag.h>
+#include <gst/gsttagsetter.h>
+
+#include <vorbis/codec.h>
+
+#include "gstvorbistag.h"
+
+
+GST_DEBUG_CATEGORY_EXTERN (vorbisparse_debug);
+#define GST_CAT_DEFAULT vorbisparse_debug
+
+static GstFlowReturn gst_vorbis_tag_parse_packet (GstVorbisParse * parse,
+    GstBuffer * buffer);
+
+#define gst_vorbis_tag_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVorbisTag, gst_vorbis_tag,
+    GST_TYPE_VORBIS_PARSE, G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
+
+static void
+gst_vorbis_tag_class_init (GstVorbisTagClass * klass)
+{
+  GstVorbisParseClass *vorbisparse_class = GST_VORBIS_PARSE_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_set_details_simple (element_class,
+      "VorbisTag", "Formatter/Metadata",
+      "Retags vorbis streams", "James Livingston <doclivingston@gmail.com>");
+
+  vorbisparse_class->parse_packet = gst_vorbis_tag_parse_packet;
+}
+
+static void
+gst_vorbis_tag_init (GstVorbisTag * tagger)
+{
+  /* nothing to do */
+}
+
+
+static GstFlowReturn
+gst_vorbis_tag_parse_packet (GstVorbisParse * parse, GstBuffer * buffer)
+{
+  GstTagList *old_tags, *new_tags;
+  const GstTagList *user_tags;
+  GstVorbisTag *tagger;
+  gchar *encoder = NULL;
+  GstBuffer *new_buf;
+  guint8 *data;
+  gsize size;
+  gboolean do_parse = FALSE;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  /* just pass everything except the comments packet */
+  if (size >= 1 && data[0] != 0x03)
+    do_parse = TRUE;
+  gst_buffer_unmap (buffer, data, size);
+
+  if (do_parse) {
+    return GST_VORBIS_PARSE_CLASS (parent_class)->parse_packet (parse, buffer);
+  }
+
+  tagger = GST_VORBIS_TAG (parse);
+
+  old_tags =
+      gst_tag_list_from_vorbiscomment_buffer (buffer, (guint8 *) "\003vorbis",
+      7, &encoder);
+  user_tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (tagger));
+
+  /* build new tag list */
+  new_tags = gst_tag_list_merge (user_tags, old_tags,
+      gst_tag_setter_get_tag_merge_mode (GST_TAG_SETTER (tagger)));
+  gst_tag_list_free (old_tags);
+
+  new_buf =
+      gst_tag_list_to_vorbiscomment_buffer (new_tags, (guint8 *) "\003vorbis",
+      7, encoder);
+  gst_buffer_copy_into (new_buf, buffer, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+
+  gst_tag_list_free (new_tags);
+  g_free (encoder);
+  gst_buffer_unref (buffer);
+
+  return GST_VORBIS_PARSE_CLASS (parent_class)->parse_packet (parse, new_buf);
+}
diff --git a/ext/vorbis/gstvorbistag.h b/ext/vorbis/gstvorbistag.h
new file mode 100644
index 0000000..9a44300
--- /dev/null
+++ b/ext/vorbis/gstvorbistag.h
@@ -0,0 +1,63 @@
+/* -*- c-basic-offset: 2 -*-
+ * GStreamer
+ * Copyright (C) <2006> James Livingston <doclivingston@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_VORBIS_TAG_H__
+#define __GST_VORBIS_TAG_H__
+
+#include "gstvorbisparse.h"
+
+
+G_BEGIN_DECLS
+
+
+#define GST_TYPE_VORBIS_TAG \
+  (gst_vorbis_tag_get_type())
+#define GST_VORBIS_TAG(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VORBIS_TAG,GstVorbisTag))
+#define GST_VORBIS_TAG_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VORBIS_TAG,GstVorbisTagClass))
+#define GST_IS_VORBIS_TAG(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VORBIS_TAG))
+#define GST_IS_VORBIS_TAG_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VORBIS_TAG))
+
+
+typedef struct _GstVorbisTag GstVorbisTag;
+typedef struct _GstVorbisTagClass GstVorbisTagClass;
+
+/**
+ * GstVorbisTag:
+ *
+ * Opaque data structure.
+ */
+struct _GstVorbisTag {
+  GstVorbisParse parse;
+};
+
+struct _GstVorbisTagClass {
+  GstVorbisParseClass parent_class;
+};
+
+GType gst_vorbis_tag_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_VORBIS_TAG_H__ */
diff --git a/gst-libs/Makefile.am b/gst-libs/Makefile.am
new file mode 100644
index 0000000..062cb55
--- /dev/null
+++ b/gst-libs/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = gst
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
new file mode 100644
index 0000000..a1f06a3
--- /dev/null
+++ b/gst-libs/Makefile.in
@@ -0,0 +1,759 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = gst
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
new file mode 100644
index 0000000..a3f13f1
--- /dev/null
+++ b/gst-libs/gst/Makefile.am
@@ -0,0 +1,43 @@
+# The interfaces directory has to be built before the others,
+# otherwise some generated header files will be missing for the
+# plugins in the other directories.
+# Also, the tag directory has to be built before the cdda directory.
+SUBDIRS = \
+	interfaces \
+	tag \
+	cdda \
+	fft \
+	netbuffer \
+	rtp \
+	sdp \
+	rtsp \
+	video \
+	audio \
+	pbutils \
+	riff \
+	app
+
+noinst_HEADERS = gettext.h gst-i18n-plugin.h
+
+# dependencies:
+audio: interfaces
+
+cdda: tag
+
+riff: tag audio
+
+rtsp: sdp
+
+pbutils: video audio
+
+INDEPENDENT_SUBDIRS = \
+	interfaces tag audio fft netbuffer rtp sdp video app
+
+.PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
+
+independent-subdirs: $(INDEPENDENT_SUBDIRS)
+
+$(INDEPENDENT_SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
new file mode 100644
index 0000000..0df2772
--- /dev/null
+++ b/gst-libs/gst/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# The interfaces directory has to be built before the others,
+# otherwise some generated header files will be missing for the
+# plugins in the other directories.
+# Also, the tag directory has to be built before the cdda directory.
+SUBDIRS = \
+	interfaces \
+	tag \
+	cdda \
+	fft \
+	netbuffer \
+	rtp \
+	sdp \
+	rtsp \
+	video \
+	audio \
+	pbutils \
+	riff \
+	app
+
+noinst_HEADERS = gettext.h gst-i18n-plugin.h
+INDEPENDENT_SUBDIRS = \
+	interfaces tag audio fft netbuffer rtp sdp video app
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# dependencies:
+audio: interfaces
+
+cdda: tag
+
+riff: tag audio
+
+rtsp: sdp
+
+pbutils: video audio
+
+.PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
+
+independent-subdirs: $(INDEPENDENT_SUBDIRS)
+
+$(INDEPENDENT_SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/app/Makefile.am b/gst-libs/gst/app/Makefile.am
new file mode 100644
index 0000000..85c72fb
--- /dev/null
+++ b/gst-libs/gst/app/Makefile.am
@@ -0,0 +1,99 @@
+lib_LTLIBRARIES = libgstapp-@GST_MAJORMINOR@.la
+
+glib_enum_define = GST_APP
+glib_gen_prefix = __gst_app
+glib_gen_basename = gstapp
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+built_sources = gstapp-marshal.c
+built_headers = gstapp-marshal.h
+
+BUILT_SOURCES = $(built_sources) $(built_headers)
+
+nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES = \
+             $(built_sources)
+
+libgstapp_@GST_MAJORMINOR@_la_SOURCES = gstappsrc.c gstappsink.c 
+libgstapp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstapp_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS)
+libgstapp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS = --tag=disable-static
+
+libgstapp_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/app
+libgstapp_@GST_MAJORMINOR@include_HEADERS = \
+	gstappsrc.h \
+	gstappsink.h
+
+CLEANFILES = $(BUILT_SOURCES)
+
+EXTRA_DIST = gstapp-marshal.list
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstApp-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstapp_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstapp_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/app/%',$(libgstapp_@GST_MAJORMINOR@include_HEADERS))
+
+GstApp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstApp \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstapp-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-app-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstapp_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstapp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstapp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/app \
+	 -:HEADERS $(libgstapp_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/app/Makefile.in b/gst-libs/gst/app/Makefile.in
new file mode 100644
index 0000000..293b3bf
--- /dev/null
+++ b/gst-libs/gst/app/Makefile.in
@@ -0,0 +1,984 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstapp_@GST_MAJORMINOR@include_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/app
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstapp_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libgstapp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo \
+	libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo
+am__objects_1 = libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo
+nodist_libgstapp_@GST_MAJORMINOR@_la_OBJECTS = $(am__objects_1)
+libgstapp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstapp_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstapp_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstapp_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) \
+	$(CFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) \
+	-o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstapp_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstapp_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstapp_@GST_MAJORMINOR@include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstapp-@GST_MAJORMINOR@.la
+glib_enum_define = GST_APP
+glib_gen_prefix = __gst_app
+glib_gen_basename = gstapp
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+built_sources = gstapp-marshal.c
+built_headers = gstapp-marshal.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES = \
+             $(built_sources)
+
+libgstapp_@GST_MAJORMINOR@_la_SOURCES = gstappsrc.c gstappsink.c 
+libgstapp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS)
+
+libgstapp_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS)
+libgstapp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS = --tag=disable-static
+libgstapp_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/app
+libgstapp_@GST_MAJORMINOR@include_HEADERS = \
+	gstappsrc.h \
+	gstappsink.h
+
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+EXTRA_DIST = gstapp-marshal.list
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstApp-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstapp_@GST_MAJORMINOR@include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstapp_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/app/%',$(libgstapp_@GST_MAJORMINOR@include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstapp-@GST_MAJORMINOR@.la: $(libgstapp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstapp_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstapp_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstapp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstapp_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo: gstappsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo -MD -MP -MF $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsrc.Tpo -c -o libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo `test -f 'gstappsrc.c' || echo '$(srcdir)/'`gstappsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsrc.Tpo $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstappsrc.c' object='libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstapp_@GST_MAJORMINOR@_la-gstappsrc.lo `test -f 'gstappsrc.c' || echo '$(srcdir)/'`gstappsrc.c
+
+libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo: gstappsink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo -MD -MP -MF $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsink.Tpo -c -o libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo `test -f 'gstappsink.c' || echo '$(srcdir)/'`gstappsink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsink.Tpo $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstappsink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstappsink.c' object='libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstapp_@GST_MAJORMINOR@_la-gstappsink.lo `test -f 'gstappsink.c' || echo '$(srcdir)/'`gstappsink.c
+
+libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo: gstapp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo -MD -MP -MF $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.Tpo -c -o libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo `test -f 'gstapp-marshal.c' || echo '$(srcdir)/'`gstapp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.Tpo $(DEPDIR)/libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstapp-marshal.c' object='libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_@GST_MAJORMINOR@_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstapp_@GST_MAJORMINOR@_la-gstapp-marshal.lo `test -f 'gstapp-marshal.c' || echo '$(srcdir)/'`gstapp-marshal.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstapp_@GST_MAJORMINOR@includeHEADERS: $(libgstapp_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstapp_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstapp_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstapp_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstapp_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstapp_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstapp_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstapp_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstapp_@GST_MAJORMINOR@includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstapp_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstapp_@GST_MAJORMINOR@includeHEADERS install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstapp_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstApp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstApp \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstapp-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-app-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstapp_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstapp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstapp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstapp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/app \
+	 -:HEADERS $(libgstapp_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/app/gstapp-marshal.list b/gst-libs/gst/app/gstapp-marshal.list
new file mode 100644
index 0000000..ad35948
--- /dev/null
+++ b/gst-libs/gst/app/gstapp-marshal.list
@@ -0,0 +1,5 @@
+BOOLEAN:UINT64
+ENUM:OBJECT
+ENUM:VOID
+VOID:UINT
+
diff --git a/gst-libs/gst/app/gstappsink.c b/gst-libs/gst/app/gstappsink.c
new file mode 100644
index 0000000..4f1ee68
--- /dev/null
+++ b/gst-libs/gst/app/gstappsink.c
@@ -0,0 +1,1403 @@
+/* GStreamer
+ * Copyright (C) 2007 David Schleef <ds@schleef.org>
+ *           (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstappsink
+ * @short_description: Easy way for applications to extract buffers from a
+ *     pipeline
+ * @see_also: #GstBaseSink, appsrc
+ *
+ * Appsink is a sink plugin that supports many different methods for making
+ * the application get a handle on the GStreamer data in a pipeline. Unlike
+ * most GStreamer elements, Appsink provides external API functions.
+ *
+ * appsink can be used by linking to the gstappsink.h header file to access the
+ * methods or by using the appsink action signals and properties.
+ *
+ * The normal way of retrieving buffers from appsink is by using the
+ * gst_app_sink_pull_buffer() and gst_app_sink_pull_preroll() methods.
+ * These methods block until a buffer becomes available in the sink or when the
+ * sink is shut down or reaches EOS.
+ *
+ * Appsink will internally use a queue to collect buffers from the streaming
+ * thread. If the application is not pulling buffers fast enough, this queue
+ * will consume a lot of memory over time. The "max-buffers" property can be
+ * used to limit the queue size. The "drop" property controls whether the
+ * streaming thread blocks or if older buffers are dropped when the maximum
+ * queue size is reached. Note that blocking the streaming thread can negatively
+ * affect real-time performance and should be avoided.
+ *
+ * If a blocking behaviour is not desirable, setting the "emit-signals" property
+ * to %TRUE will make appsink emit the "new-buffer" and "new-preroll" signals
+ * when a buffer can be pulled without blocking.
+ *
+ * The "caps" property on appsink can be used to control the formats that
+ * appsink can receive. This property can contain non-fixed caps, the format of
+ * the pulled buffers can be obtained by getting the buffer caps.
+ *
+ * If one of the pull-preroll or pull-buffer methods return %NULL, the appsink
+ * is stopped or in the EOS state. You can check for the EOS state with the
+ * "eos" property or with the gst_app_sink_is_eos() method.
+ *
+ * The eos signal can also be used to be informed when the EOS state is reached
+ * to avoid polling.
+ *
+ * Last reviewed on 2008-12-17 (0.10.22)
+ *
+ * Since: 0.10.22
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+#include <gst/gstbuffer.h>
+#include <gst/gstbufferlist.h>
+
+#include <string.h>
+
+#include "gstappsink.h"
+
+struct _GstAppSinkPrivate
+{
+  GstCaps *caps;
+  gboolean emit_signals;
+  guint max_buffers;
+  gboolean drop;
+
+  GCond *cond;
+  GMutex *mutex;
+  GQueue *queue;
+  GstBuffer *preroll;
+  gboolean flushing;
+  gboolean unlock;
+  gboolean started;
+  gboolean is_eos;
+
+  GstAppSinkCallbacks callbacks;
+  gpointer user_data;
+  GDestroyNotify notify;
+
+  gboolean buffer_lists_supported;
+};
+
+GST_DEBUG_CATEGORY_STATIC (app_sink_debug);
+#define GST_CAT_DEFAULT app_sink_debug
+
+enum
+{
+  /* signals */
+  SIGNAL_EOS,
+  SIGNAL_NEW_PREROLL,
+  SIGNAL_NEW_BUFFER,
+  SIGNAL_NEW_BUFFER_LIST,
+
+  /* actions */
+  SIGNAL_PULL_PREROLL,
+  SIGNAL_PULL_BUFFER,
+  SIGNAL_PULL_BUFFER_LIST,
+
+  LAST_SIGNAL
+};
+
+#define DEFAULT_PROP_EOS		TRUE
+#define DEFAULT_PROP_EMIT_SIGNALS	FALSE
+#define DEFAULT_PROP_MAX_BUFFERS	0
+#define DEFAULT_PROP_DROP		FALSE
+
+enum
+{
+  PROP_0,
+  PROP_CAPS,
+  PROP_EOS,
+  PROP_EMIT_SIGNALS,
+  PROP_MAX_BUFFERS,
+  PROP_DROP,
+  PROP_LAST
+};
+
+static GstStaticPadTemplate gst_app_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static void gst_app_sink_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+
+static void gst_app_sink_dispose (GObject * object);
+static void gst_app_sink_finalize (GObject * object);
+
+static void gst_app_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_app_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static gboolean gst_app_sink_unlock_start (GstBaseSink * bsink);
+static gboolean gst_app_sink_unlock_stop (GstBaseSink * bsink);
+static gboolean gst_app_sink_start (GstBaseSink * psink);
+static gboolean gst_app_sink_stop (GstBaseSink * psink);
+static gboolean gst_app_sink_event (GstBaseSink * sink, GstEvent * event);
+static GstFlowReturn gst_app_sink_preroll (GstBaseSink * psink,
+    GstBuffer * buffer);
+static GstFlowReturn gst_app_sink_render_common (GstBaseSink * psink,
+    GstMiniObject * data, gboolean is_list);
+static GstFlowReturn gst_app_sink_render (GstBaseSink * psink,
+    GstBuffer * buffer);
+static GstFlowReturn gst_app_sink_render_list (GstBaseSink * psink,
+    GstBufferList * list);
+static GstCaps *gst_app_sink_getcaps (GstBaseSink * psink, GstCaps * filter);
+static GstMiniObject *gst_app_sink_pull_object (GstAppSink * appsink);
+
+static guint gst_app_sink_signals[LAST_SIGNAL] = { 0 };
+
+#define gst_app_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAppSink, gst_app_sink, GST_TYPE_BASE_SINK,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+        gst_app_sink_uri_handler_init));
+
+/* Can't use glib-genmarshal for this, as it doesn't know how to handle
+ * GstMiniObject-based types, which are a new fundamental type */
+static void
+gst_app_marshal_BUFFER__VOID (GClosure * closure,
+    GValue * return_value,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint, gpointer marshal_data)
+{
+  typedef GstBuffer *(*GMarshalFunc_BUFFER__VOID) (gpointer data1,
+      gpointer data2);
+  register GMarshalFunc_BUFFER__VOID callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  GstBuffer *v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 1);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_BUFFER__VOID) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1, data2);
+
+  gst_value_take_buffer (return_value, v_return);
+}
+
+static void
+gst_app_sink_class_init (GstAppSinkClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *element_class = (GstElementClass *) klass;
+  GstBaseSinkClass *basesink_class = (GstBaseSinkClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (app_sink_debug, "appsink", 0, "appsink element");
+
+  gobject_class->dispose = gst_app_sink_dispose;
+  gobject_class->finalize = gst_app_sink_finalize;
+
+  gobject_class->set_property = gst_app_sink_set_property;
+  gobject_class->get_property = gst_app_sink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_CAPS,
+      g_param_spec_boxed ("caps", "Caps",
+          "The allowed caps for the sink pad", GST_TYPE_CAPS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_EOS,
+      g_param_spec_boolean ("eos", "EOS",
+          "Check if the sink is EOS or not started", DEFAULT_PROP_EOS,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_EMIT_SIGNALS,
+      g_param_spec_boolean ("emit-signals", "Emit signals",
+          "Emit new-preroll, new-buffer and new-buffer-list signals",
+          DEFAULT_PROP_EMIT_SIGNALS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MAX_BUFFERS,
+      g_param_spec_uint ("max-buffers", "Max Buffers",
+          "The maximum number of buffers to queue internally (0 = unlimited)",
+          0, G_MAXUINT, DEFAULT_PROP_MAX_BUFFERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_DROP,
+      g_param_spec_boolean ("drop", "Drop",
+          "Drop old buffers when the buffer queue is filled", DEFAULT_PROP_DROP,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAppSink::eos:
+   * @appsink: the appsink element that emited the signal
+   *
+   * Signal that the end-of-stream has been reached. This signal is emited from
+   * the steaming thread.
+   */
+  gst_app_sink_signals[SIGNAL_EOS] =
+      g_signal_new ("eos", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSinkClass, eos),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+  /**
+   * GstAppSink::new-preroll:
+   * @appsink: the appsink element that emited the signal
+   *
+   * Signal that a new preroll buffer is available.
+   *
+   * This signal is emited from the steaming thread and only when the
+   * "emit-signals" property is %TRUE.
+   *
+   * The new preroll buffer can be retrieved with the "pull-preroll" action
+   * signal or gst_app_sink_pull_preroll() either from this signal callback
+   * or from any other thread.
+   *
+   * Note that this signal is only emited when the "emit-signals" property is
+   * set to %TRUE, which it is not by default for performance reasons.
+   */
+  gst_app_sink_signals[SIGNAL_NEW_PREROLL] =
+      g_signal_new ("new-preroll", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSinkClass, new_preroll),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+  /**
+   * GstAppSink::new-buffer:
+   * @appsink: the appsink element that emited the signal
+   *
+   * Signal that a new buffer is available.
+   *
+   * This signal is emited from the steaming thread and only when the
+   * "emit-signals" property is %TRUE.
+   *
+   * The new buffer can be retrieved with the "pull-buffer" action
+   * signal or gst_app_sink_pull_buffer() either from this signal callback
+   * or from any other thread.
+   *
+   * Note that this signal is only emited when the "emit-signals" property is
+   * set to %TRUE, which it is not by default for performance reasons.
+   */
+  gst_app_sink_signals[SIGNAL_NEW_BUFFER] =
+      g_signal_new ("new-buffer", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSinkClass, new_buffer),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+  /**
+   * GstAppSink::new-buffer-list:
+   * @appsink: the appsink element that emited the signal
+   *
+   * Signal that a new bufferlist is available.
+   *
+   * This signal is emited from the steaming thread and only when the
+   * "emit-signals" property is %TRUE.
+   *
+   * The new buffer can be retrieved with the "pull-buffer-list" action
+   * signal or gst_app_sink_pull_buffer_list() either from this signal callback
+   * or from any other thread.
+   *
+   * Note that this signal is only emited when the "emit-signals" property is
+   * set to %TRUE, which it is not by default for performance reasons.
+   */
+  gst_app_sink_signals[SIGNAL_NEW_BUFFER_LIST] =
+      g_signal_new ("new-buffer-list", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstAppSinkClass, new_buffer_list),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstAppSink::pull-preroll:
+   * @appsink: the appsink element to emit this signal on
+   *
+   * Get the last preroll buffer in @appsink. This was the buffer that caused the
+   * appsink to preroll in the PAUSED state. This buffer can be pulled many times
+   * and remains available to the application even after EOS.
+   *
+   * This function is typically used when dealing with a pipeline in the PAUSED
+   * state. Calling this function after doing a seek will give the buffer right
+   * after the seek position.
+   *
+   * Note that the preroll buffer will also be returned as the first buffer
+   * when calling gst_app_sink_pull_buffer() or the "pull-buffer" action signal.
+   *
+   * If an EOS event was received before any buffers, this function returns
+   * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+   *
+   * This function blocks until a preroll buffer or EOS is received or the appsink
+   * element is set to the READY/NULL state.
+   *
+   * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS.
+   */
+  gst_app_sink_signals[SIGNAL_PULL_PREROLL] =
+      g_signal_new ("pull-preroll", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSinkClass,
+          pull_preroll), NULL, NULL, gst_app_marshal_BUFFER__VOID,
+      GST_TYPE_BUFFER, 0, G_TYPE_NONE);
+  /**
+   * GstAppSink::pull-buffer:
+   * @appsink: the appsink element to emit this signal on
+   *
+   * This function blocks until a buffer or EOS becomes available or the appsink
+   * element is set to the READY/NULL state.
+   *
+   * This function will only return buffers when the appsink is in the PLAYING
+   * state. All rendered buffers will be put in a queue so that the application
+   * can pull buffers at its own rate.
+   *
+   * Note that when the application does not pull buffers fast enough, the
+   * queued buffers could consume a lot of memory, especially when dealing with
+   * raw video frames. It's possible to control the behaviour of the queue with
+   * the "drop" and "max-buffers" properties.
+   *
+   * If an EOS event was received before any buffers, this function returns
+   * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+   *
+   * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS.
+   */
+  gst_app_sink_signals[SIGNAL_PULL_BUFFER] =
+      g_signal_new ("pull-buffer", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSinkClass,
+          pull_buffer), NULL, NULL, gst_app_marshal_BUFFER__VOID,
+      GST_TYPE_BUFFER, 0, G_TYPE_NONE);
+  /**
+   * GstAppSink::pull-buffer-list:
+   * @appsink: the appsink element to emit this signal on
+   *
+   * This function blocks until a buffer list or EOS becomes available or the appsink
+   * element is set to the READY/NULL state.
+   *
+   * This function will only return bufferlists when the appsink is in the PLAYING
+   * state. All rendered bufferlists will be put in a queue so that the application
+   * can pull bufferlists at its own rate.
+   *
+   * Note that when the application does not pull bufferlists fast enough, the
+   * queued bufferlists could consume a lot of memory, especially when dealing with
+   * raw video frames. It's possible to control the behaviour of the queue with
+   * the "drop" and "max-buffers" properties.
+   *
+   * If an EOS event was received before any buffers, this function returns
+   * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+   *
+   * Returns: a #GstBufferList or NULL when the appsink is stopped or EOS.
+   */
+  gst_app_sink_signals[SIGNAL_PULL_BUFFER_LIST] =
+      g_signal_new ("pull-buffer-list", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSinkClass,
+          pull_buffer_list), NULL, NULL, gst_app_marshal_BUFFER__VOID,
+      GST_TYPE_BUFFER_LIST, 0, G_TYPE_NONE);
+
+  gst_element_class_set_details_simple (element_class, "AppSink",
+      "Generic/Sink", "Allow the application to get access to raw buffer",
+      "David Schleef <ds@schleef.org>, Wim Taymans <wim.taymans@gmail.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_app_sink_template));
+
+  basesink_class->unlock = gst_app_sink_unlock_start;
+  basesink_class->unlock_stop = gst_app_sink_unlock_stop;
+  basesink_class->start = gst_app_sink_start;
+  basesink_class->stop = gst_app_sink_stop;
+  basesink_class->event = gst_app_sink_event;
+  basesink_class->preroll = gst_app_sink_preroll;
+  basesink_class->render = gst_app_sink_render;
+  basesink_class->render_list = gst_app_sink_render_list;
+  basesink_class->get_caps = gst_app_sink_getcaps;
+
+  klass->pull_preroll = gst_app_sink_pull_preroll;
+  klass->pull_buffer = gst_app_sink_pull_buffer;
+  klass->pull_buffer_list = gst_app_sink_pull_buffer_list;
+
+  g_type_class_add_private (klass, sizeof (GstAppSinkPrivate));
+}
+
+static void
+gst_app_sink_init (GstAppSink * appsink)
+{
+  GstAppSinkPrivate *priv;
+
+  priv = appsink->priv =
+      G_TYPE_INSTANCE_GET_PRIVATE (appsink, GST_TYPE_APP_SINK,
+      GstAppSinkPrivate);
+
+  priv->mutex = g_mutex_new ();
+  priv->cond = g_cond_new ();
+  priv->queue = g_queue_new ();
+
+  priv->emit_signals = DEFAULT_PROP_EMIT_SIGNALS;
+  priv->max_buffers = DEFAULT_PROP_MAX_BUFFERS;
+  priv->drop = DEFAULT_PROP_DROP;
+}
+
+static void
+gst_app_sink_dispose (GObject * obj)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (obj);
+  GstAppSinkPrivate *priv = appsink->priv;
+  GstMiniObject *queue_obj;
+
+  GST_OBJECT_LOCK (appsink);
+  if (priv->caps) {
+    gst_caps_unref (priv->caps);
+    priv->caps = NULL;
+  }
+  if (priv->notify) {
+    priv->notify (priv->user_data);
+  }
+  priv->user_data = NULL;
+  priv->notify = NULL;
+
+  GST_OBJECT_UNLOCK (appsink);
+
+  g_mutex_lock (priv->mutex);
+  if (priv->preroll) {
+    gst_buffer_unref (priv->preroll);
+    priv->preroll = NULL;
+  }
+  while ((queue_obj = g_queue_pop_head (priv->queue)))
+    gst_mini_object_unref (queue_obj);
+  g_mutex_unlock (priv->mutex);
+
+  G_OBJECT_CLASS (parent_class)->dispose (obj);
+}
+
+static void
+gst_app_sink_finalize (GObject * obj)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (obj);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  g_mutex_free (priv->mutex);
+  g_cond_free (priv->cond);
+  g_queue_free (priv->queue);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_app_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (object);
+
+  switch (prop_id) {
+    case PROP_CAPS:
+      gst_app_sink_set_caps (appsink, gst_value_get_caps (value));
+      break;
+    case PROP_EMIT_SIGNALS:
+      gst_app_sink_set_emit_signals (appsink, g_value_get_boolean (value));
+      break;
+    case PROP_MAX_BUFFERS:
+      gst_app_sink_set_max_buffers (appsink, g_value_get_uint (value));
+      break;
+    case PROP_DROP:
+      gst_app_sink_set_drop (appsink, g_value_get_boolean (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_app_sink_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (object);
+
+  switch (prop_id) {
+    case PROP_CAPS:
+    {
+      GstCaps *caps;
+
+      caps = gst_app_sink_get_caps (appsink);
+      gst_value_set_caps (value, caps);
+      if (caps)
+        gst_caps_unref (caps);
+      break;
+    }
+    case PROP_EOS:
+      g_value_set_boolean (value, gst_app_sink_is_eos (appsink));
+      break;
+    case PROP_EMIT_SIGNALS:
+      g_value_set_boolean (value, gst_app_sink_get_emit_signals (appsink));
+      break;
+    case PROP_MAX_BUFFERS:
+      g_value_set_uint (value, gst_app_sink_get_max_buffers (appsink));
+      break;
+    case PROP_DROP:
+      g_value_set_boolean (value, gst_app_sink_get_drop (appsink));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_app_sink_unlock_start (GstBaseSink * bsink)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (bsink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsink, "unlock start");
+  priv->unlock = TRUE;
+  g_cond_signal (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_sink_unlock_stop (GstBaseSink * bsink)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (bsink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsink, "unlock stop");
+  priv->unlock = FALSE;
+  g_cond_signal (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static void
+gst_app_sink_flush_unlocked (GstAppSink * appsink)
+{
+  GstMiniObject *obj;
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  GST_DEBUG_OBJECT (appsink, "flush stop appsink");
+  priv->is_eos = FALSE;
+  gst_buffer_replace (&priv->preroll, NULL);
+  while ((obj = g_queue_pop_head (priv->queue)))
+    gst_mini_object_unref (obj);
+  g_cond_signal (priv->cond);
+}
+
+#define NEW_BUFFER_LIST_SIGID \
+    gst_app_sink_signals[SIGNAL_NEW_BUFFER_LIST]
+
+static gboolean
+gst_app_sink_check_buffer_lists_support (GstAppSink * appsink)
+{
+  gboolean ret;
+
+  ret = (appsink->priv->callbacks.new_buffer_list != NULL) ||
+      g_signal_has_handler_pending (appsink, NEW_BUFFER_LIST_SIGID, 0, FALSE);
+
+  GST_INFO_OBJECT (appsink, "application supports buffer lists: %d", ret);
+  return ret;
+}
+
+static gboolean
+gst_app_sink_start (GstBaseSink * psink)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (psink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsink, "starting");
+  priv->flushing = FALSE;
+  priv->started = TRUE;
+  priv->buffer_lists_supported =
+      gst_app_sink_check_buffer_lists_support (appsink);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_sink_stop (GstBaseSink * psink)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (psink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsink, "stopping");
+  priv->flushing = TRUE;
+  priv->started = FALSE;
+  gst_app_sink_flush_unlocked (appsink);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_sink_event (GstBaseSink * sink, GstEvent * event)
+{
+  GstAppSink *appsink = GST_APP_SINK_CAST (sink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  switch (event->type) {
+    case GST_EVENT_EOS:
+
+      g_mutex_lock (priv->mutex);
+      GST_DEBUG_OBJECT (appsink, "receiving EOS");
+      priv->is_eos = TRUE;
+      g_cond_signal (priv->cond);
+      g_mutex_unlock (priv->mutex);
+
+      /* emit EOS now */
+      if (priv->callbacks.eos)
+        priv->callbacks.eos (appsink, priv->user_data);
+      else
+        g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_EOS], 0);
+
+      break;
+    case GST_EVENT_FLUSH_START:
+      /* we don't have to do anything here, the base class will call unlock
+       * which will make sure we exit the _render method */
+      GST_DEBUG_OBJECT (appsink, "received FLUSH_START");
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      g_mutex_lock (priv->mutex);
+      GST_DEBUG_OBJECT (appsink, "received FLUSH_STOP");
+      gst_app_sink_flush_unlocked (appsink);
+      g_mutex_unlock (priv->mutex);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_app_sink_preroll (GstBaseSink * psink, GstBuffer * buffer)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+  GstAppSink *appsink = GST_APP_SINK_CAST (psink);
+  GstAppSinkPrivate *priv = appsink->priv;
+  gboolean emit;
+
+  g_mutex_lock (priv->mutex);
+  if (priv->flushing)
+    goto flushing;
+
+  GST_DEBUG_OBJECT (appsink, "setting preroll buffer %p", buffer);
+  gst_buffer_replace (&priv->preroll, buffer);
+
+  g_cond_signal (priv->cond);
+  emit = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  if (priv->callbacks.new_preroll)
+    res = priv->callbacks.new_preroll (appsink, priv->user_data);
+  else if (emit)
+    g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_NEW_PREROLL], 0);
+
+  return res;
+
+flushing:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are flushing");
+    g_mutex_unlock (priv->mutex);
+    return GST_FLOW_WRONG_STATE;
+  }
+}
+
+static GstFlowReturn
+gst_app_sink_render_common (GstBaseSink * psink, GstMiniObject * data,
+    gboolean is_list)
+{
+  GstFlowReturn ret;
+  GstAppSink *appsink = GST_APP_SINK_CAST (psink);
+  GstAppSinkPrivate *priv = appsink->priv;
+  gboolean emit;
+
+restart:
+  g_mutex_lock (priv->mutex);
+  if (priv->flushing)
+    goto flushing;
+
+  GST_DEBUG_OBJECT (appsink, "pushing render buffer%s %p on queue (%d)",
+      is_list ? " list" : "", data, priv->queue->length);
+
+  while (priv->max_buffers > 0 && priv->queue->length >= priv->max_buffers) {
+    if (priv->drop) {
+      GstMiniObject *obj;
+
+      /* we need to drop the oldest buffer/list and try again */
+      obj = g_queue_pop_head (priv->queue);
+      GST_DEBUG_OBJECT (appsink, "dropping old buffer/list %p", obj);
+      gst_mini_object_unref (obj);
+    } else {
+      GST_DEBUG_OBJECT (appsink, "waiting for free space, length %d >= %d",
+          priv->queue->length, priv->max_buffers);
+
+      if (priv->unlock) {
+        /* we are asked to unlock, call the wait_preroll method */
+        g_mutex_unlock (priv->mutex);
+        if ((ret = gst_base_sink_wait_preroll (psink)) != GST_FLOW_OK)
+          goto stopping;
+
+        /* we are allowed to continue now */
+        goto restart;
+      }
+
+      /* wait for a buffer to be removed or flush */
+      g_cond_wait (priv->cond, priv->mutex);
+      if (priv->flushing)
+        goto flushing;
+    }
+  }
+  /* we need to ref the buffer when pushing it in the queue */
+  g_queue_push_tail (priv->queue, gst_mini_object_ref (data));
+  g_cond_signal (priv->cond);
+  emit = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  if (is_list) {
+    if (priv->callbacks.new_buffer_list)
+      priv->callbacks.new_buffer_list (appsink, priv->user_data);
+    else if (emit)
+      g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_NEW_BUFFER_LIST], 0);
+  } else {
+    if (priv->callbacks.new_buffer)
+      priv->callbacks.new_buffer (appsink, priv->user_data);
+    else if (emit)
+      g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_NEW_BUFFER], 0);
+  }
+  return GST_FLOW_OK;
+
+flushing:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are flushing");
+    g_mutex_unlock (priv->mutex);
+    return GST_FLOW_WRONG_STATE;
+  }
+stopping:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are stopping");
+    return ret;
+  }
+}
+
+static GstFlowReturn
+gst_app_sink_render (GstBaseSink * psink, GstBuffer * buffer)
+{
+  return gst_app_sink_render_common (psink, GST_MINI_OBJECT_CAST (buffer),
+      FALSE);
+}
+
+static GstFlowReturn
+gst_app_sink_render_list (GstBaseSink * sink, GstBufferList * list)
+{
+  GstFlowReturn flow;
+  GstAppSink *appsink;
+  GstBuffer *buffer;
+  guint i, len;
+
+  appsink = GST_APP_SINK_CAST (sink);
+
+  if (appsink->priv->buffer_lists_supported)
+    return gst_app_sink_render_common (sink, GST_MINI_OBJECT_CAST (list), TRUE);
+
+  /* The application doesn't support buffer lists, extract individual buffers
+   * then and push them one-by-one */
+  GST_INFO_OBJECT (sink, "chaining each group in list as a merged buffer");
+
+  len = gst_buffer_list_len (list);
+
+  flow = GST_FLOW_OK;
+  for (i = 0; i < len; i++) {
+    buffer = gst_buffer_list_get (list, i);
+    flow = gst_app_sink_render (sink, buffer);
+    if (flow != GST_FLOW_OK)
+      break;
+  }
+
+  return flow;
+}
+
+static GstCaps *
+gst_app_sink_getcaps (GstBaseSink * psink, GstCaps * filter)
+{
+  GstCaps *caps;
+  GstAppSink *appsink = GST_APP_SINK_CAST (psink);
+  GstAppSinkPrivate *priv = appsink->priv;
+
+  GST_OBJECT_LOCK (appsink);
+  if ((caps = priv->caps)) {
+    if (filter)
+      caps = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    else
+      gst_caps_ref (caps);
+  }
+  GST_DEBUG_OBJECT (appsink, "got caps %" GST_PTR_FORMAT, caps);
+  GST_OBJECT_UNLOCK (appsink);
+
+  return caps;
+}
+
+static GstMiniObject *
+gst_app_sink_pull_object (GstAppSink * appsink)
+{
+  GstMiniObject *obj = NULL;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), NULL);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+
+  while (TRUE) {
+    GST_DEBUG_OBJECT (appsink, "trying to grab a buffer/list");
+    if (!priv->started)
+      goto not_started;
+
+    if (!g_queue_is_empty (priv->queue))
+      break;
+
+    if (priv->is_eos)
+      goto eos;
+
+    /* nothing to return, wait */
+    GST_DEBUG_OBJECT (appsink, "waiting for a buffer/list");
+    g_cond_wait (priv->cond, priv->mutex);
+  }
+  obj = g_queue_pop_head (priv->queue);
+  GST_DEBUG_OBJECT (appsink, "we have a buffer/list %p", obj);
+  g_cond_signal (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return obj;
+
+  /* special conditions */
+eos:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are EOS, return NULL");
+    g_mutex_unlock (priv->mutex);
+    return NULL;
+  }
+not_started:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are stopped, return NULL");
+    g_mutex_unlock (priv->mutex);
+    return NULL;
+  }
+}
+
+/* external API */
+
+/**
+ * gst_app_sink_set_caps:
+ * @appsink: a #GstAppSink
+ * @caps: caps to set
+ *
+ * Set the capabilities on the appsink element.  This function takes
+ * a copy of the caps structure. After calling this method, the sink will only
+ * accept caps that match @caps. If @caps is non-fixed, you must check the caps
+ * on the buffers to get the actual used caps.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_sink_set_caps (GstAppSink * appsink, const GstCaps * caps)
+{
+  GstCaps *old;
+  GstAppSinkPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SINK (appsink));
+
+  priv = appsink->priv;
+
+  GST_OBJECT_LOCK (appsink);
+  GST_DEBUG_OBJECT (appsink, "setting caps to %" GST_PTR_FORMAT, caps);
+  if ((old = priv->caps) != caps) {
+    if (caps)
+      priv->caps = gst_caps_copy (caps);
+    else
+      priv->caps = NULL;
+    if (old)
+      gst_caps_unref (old);
+  }
+  GST_OBJECT_UNLOCK (appsink);
+}
+
+/**
+ * gst_app_sink_get_caps:
+ * @appsink: a #GstAppSink
+ *
+ * Get the configured caps on @appsink.
+ *
+ * Returns: the #GstCaps accepted by the sink. gst_caps_unref() after usage.
+ *
+ * Since: 0.10.22
+ */
+GstCaps *
+gst_app_sink_get_caps (GstAppSink * appsink)
+{
+  GstCaps *caps;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), NULL);
+
+  priv = appsink->priv;
+
+  GST_OBJECT_LOCK (appsink);
+  if ((caps = priv->caps))
+    gst_caps_ref (caps);
+  GST_DEBUG_OBJECT (appsink, "getting caps of %" GST_PTR_FORMAT, caps);
+  GST_OBJECT_UNLOCK (appsink);
+
+  return caps;
+}
+
+/**
+ * gst_app_sink_is_eos:
+ * @appsink: a #GstAppSink
+ *
+ * Check if @appsink is EOS, which is when no more buffers can be pulled because
+ * an EOS event was received.
+ *
+ * This function also returns %TRUE when the appsink is not in the PAUSED or
+ * PLAYING state.
+ *
+ * Returns: %TRUE if no more buffers can be pulled and the appsink is EOS.
+ *
+ * Since: 0.10.22
+ */
+gboolean
+gst_app_sink_is_eos (GstAppSink * appsink)
+{
+  gboolean ret;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), FALSE);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  if (!priv->started)
+    goto not_started;
+
+  if (priv->is_eos && g_queue_is_empty (priv->queue)) {
+    GST_DEBUG_OBJECT (appsink, "we are EOS and the queue is empty");
+    ret = TRUE;
+  } else {
+    GST_DEBUG_OBJECT (appsink, "we are not yet EOS");
+    ret = FALSE;
+  }
+  g_mutex_unlock (priv->mutex);
+
+  return ret;
+
+not_started:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are stopped, return TRUE");
+    g_mutex_unlock (priv->mutex);
+    return TRUE;
+  }
+}
+
+/**
+ * gst_app_sink_set_emit_signals:
+ * @appsink: a #GstAppSink
+ * @emit: the new state
+ *
+ * Make appsink emit the "new-preroll" and "new-buffer" signals. This option is
+ * by default disabled because signal emission is expensive and unneeded when
+ * the application prefers to operate in pull mode.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_sink_set_emit_signals (GstAppSink * appsink, gboolean emit)
+{
+  GstAppSinkPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SINK (appsink));
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  priv->emit_signals = emit;
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_sink_get_emit_signals:
+ * @appsink: a #GstAppSink
+ *
+ * Check if appsink will emit the "new-preroll" and "new-buffer" signals.
+ *
+ * Returns: %TRUE if @appsink is emiting the "new-preroll" and "new-buffer"
+ * signals.
+ *
+ * Since: 0.10.22
+ */
+gboolean
+gst_app_sink_get_emit_signals (GstAppSink * appsink)
+{
+  gboolean result;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), FALSE);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  result = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  return result;
+}
+
+/**
+ * gst_app_sink_set_max_buffers:
+ * @appsink: a #GstAppSink
+ * @max: the maximum number of buffers to queue
+ *
+ * Set the maximum amount of buffers that can be queued in @appsink. After this
+ * amount of buffers are queued in appsink, any more buffers will block upstream
+ * elements until a buffer is pulled from @appsink.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_sink_set_max_buffers (GstAppSink * appsink, guint max)
+{
+  GstAppSinkPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SINK (appsink));
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  if (max != priv->max_buffers) {
+    priv->max_buffers = max;
+    /* signal the change */
+    g_cond_signal (priv->cond);
+  }
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_sink_get_max_buffers:
+ * @appsink: a #GstAppSink
+ *
+ * Get the maximum amount of buffers that can be queued in @appsink.
+ *
+ * Returns: The maximum amount of buffers that can be queued.
+ *
+ * Since: 0.10.22
+ */
+guint
+gst_app_sink_get_max_buffers (GstAppSink * appsink)
+{
+  guint result;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), 0);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  result = priv->max_buffers;
+  g_mutex_unlock (priv->mutex);
+
+  return result;
+}
+
+/**
+ * gst_app_sink_set_drop:
+ * @appsink: a #GstAppSink
+ * @drop: the new state
+ *
+ * Instruct @appsink to drop old buffers when the maximum amount of queued
+ * buffers is reached.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_sink_set_drop (GstAppSink * appsink, gboolean drop)
+{
+  GstAppSinkPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SINK (appsink));
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  if (priv->drop != drop) {
+    priv->drop = drop;
+    /* signal the change */
+    g_cond_signal (priv->cond);
+  }
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_sink_get_drop:
+ * @appsink: a #GstAppSink
+ *
+ * Check if @appsink will drop old buffers when the maximum amount of queued
+ * buffers is reached.
+ *
+ * Returns: %TRUE if @appsink is dropping old buffers when the queue is
+ * filled.
+ *
+ * Since: 0.10.22
+ */
+gboolean
+gst_app_sink_get_drop (GstAppSink * appsink)
+{
+  gboolean result;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), FALSE);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+  result = priv->drop;
+  g_mutex_unlock (priv->mutex);
+
+  return result;
+}
+
+/**
+ * gst_app_sink_pull_preroll:
+ * @appsink: a #GstAppSink
+ *
+ * Get the last preroll buffer in @appsink. This was the buffer that caused the
+ * appsink to preroll in the PAUSED state. This buffer can be pulled many times
+ * and remains available to the application even after EOS.
+ *
+ * This function is typically used when dealing with a pipeline in the PAUSED
+ * state. Calling this function after doing a seek will give the buffer right
+ * after the seek position.
+ *
+ * Note that the preroll buffer will also be returned as the first buffer
+ * when calling gst_app_sink_pull_buffer().
+ *
+ * If an EOS event was received before any buffers, this function returns
+ * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+ *
+ * This function blocks until a preroll buffer or EOS is received or the appsink
+ * element is set to the READY/NULL state.
+ *
+ * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS.
+ *
+ * Since: 0.10.22
+ */
+GstBuffer *
+gst_app_sink_pull_preroll (GstAppSink * appsink)
+{
+  GstBuffer *buf = NULL;
+  GstAppSinkPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SINK (appsink), NULL);
+
+  priv = appsink->priv;
+
+  g_mutex_lock (priv->mutex);
+
+  while (TRUE) {
+    GST_DEBUG_OBJECT (appsink, "trying to grab a buffer");
+    if (!priv->started)
+      goto not_started;
+
+    if (priv->preroll != NULL)
+      break;
+
+    if (priv->is_eos)
+      goto eos;
+
+    /* nothing to return, wait */
+    GST_DEBUG_OBJECT (appsink, "waiting for the preroll buffer");
+    g_cond_wait (priv->cond, priv->mutex);
+  }
+  buf = gst_buffer_ref (priv->preroll);
+  GST_DEBUG_OBJECT (appsink, "we have the preroll buffer %p", buf);
+  g_mutex_unlock (priv->mutex);
+
+  return buf;
+
+  /* special conditions */
+eos:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are EOS, return NULL");
+    g_mutex_unlock (priv->mutex);
+    return NULL;
+  }
+not_started:
+  {
+    GST_DEBUG_OBJECT (appsink, "we are stopped, return NULL");
+    g_mutex_unlock (priv->mutex);
+    return NULL;
+  }
+}
+
+/**
+ * gst_app_sink_pull_buffer:
+ * @appsink: a #GstAppSink
+ *
+ * This function blocks until a buffer or EOS becomes available or the appsink
+ * element is set to the READY/NULL state.
+ *
+ * This function will only return buffers when the appsink is in the PLAYING
+ * state. All rendered buffers will be put in a queue so that the application
+ * can pull buffers at its own rate. Note that when the application does not
+ * pull buffers fast enough, the queued buffers could consume a lot of memory,
+ * especially when dealing with raw video frames.
+ *
+ * If an EOS event was received before any buffers, this function returns
+ * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+ *
+ * Returns: a #GstBuffer or NULL when the appsink is stopped or EOS.
+ *
+ * Since: 0.10.22
+ */
+
+GstBuffer *
+gst_app_sink_pull_buffer (GstAppSink * appsink)
+{
+  GST_DEBUG_OBJECT (appsink, "pull a buffer");
+  return GST_BUFFER_CAST (gst_app_sink_pull_object (appsink));
+}
+
+/**
+ * gst_app_sink_pull_buffer_list:
+ * @appsink: a #GstAppSink
+ *
+ * This function blocks until a buffer list or EOS becomes available or the
+ * appsink element is set to the READY/NULL state.
+ *
+ * This function will only return buffer lists when the appsink is in the
+ * PLAYING state. All rendered buffer lists will be put in a queue so that
+ * the application can pull buffer lists at its own rate. Note that when
+ * the application does not pull buffer lists fast enough, the queued buffer
+ * lists could consume a lot of memory, especially when dealing with raw
+ * video frames.
+ *
+ * If an EOS event was received before any buffer lists, this function returns
+ * %NULL. Use gst_app_sink_is_eos () to check for the EOS condition.
+ *
+ * Returns: a #GstBufferList or NULL when the appsink is stopped or EOS.
+ */
+GstBufferList *
+gst_app_sink_pull_buffer_list (GstAppSink * appsink)
+{
+  GST_DEBUG_OBJECT (appsink, "pull a buffer list");
+  return GST_BUFFER_LIST_CAST (gst_app_sink_pull_object (appsink));
+}
+
+/**
+ * gst_app_sink_set_callbacks:
+ * @appsink: a #GstAppSink
+ * @callbacks: the callbacks
+ * @user_data: a user_data argument for the callbacks
+ * @notify: a destroy notify function
+ *
+ * Set callbacks which will be executed for each new preroll, new buffer and eos.
+ * This is an alternative to using the signals, it has lower overhead and is thus
+ * less expensive, but also less flexible.
+ *
+ * If callbacks are installed, no signals will be emited for performance
+ * reasons.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_app_sink_set_callbacks (GstAppSink * appsink,
+    GstAppSinkCallbacks * callbacks, gpointer user_data, GDestroyNotify notify)
+{
+  GDestroyNotify old_notify;
+  GstAppSinkPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SINK (appsink));
+  g_return_if_fail (callbacks != NULL);
+
+  priv = appsink->priv;
+
+  GST_OBJECT_LOCK (appsink);
+  old_notify = priv->notify;
+
+  if (old_notify) {
+    gpointer old_data;
+
+    old_data = priv->user_data;
+
+    priv->user_data = NULL;
+    priv->notify = NULL;
+    GST_OBJECT_UNLOCK (appsink);
+
+    old_notify (old_data);
+
+    GST_OBJECT_LOCK (appsink);
+  }
+  priv->callbacks = *callbacks;
+  priv->user_data = user_data;
+  priv->notify = notify;
+  priv->buffer_lists_supported =
+      gst_app_sink_check_buffer_lists_support (appsink);
+  GST_OBJECT_UNLOCK (appsink);
+}
+
+/*** GSTURIHANDLER INTERFACE *************************************************/
+
+static GstURIType
+gst_app_sink_uri_get_type (GType type)
+{
+  return GST_URI_SINK;
+}
+
+static gchar **
+gst_app_sink_uri_get_protocols (GType type)
+{
+  static gchar *protocols[] = { (char *) "appsink", NULL };
+
+  return protocols;
+}
+
+static const gchar *
+gst_app_sink_uri_get_uri (GstURIHandler * handler)
+{
+  return "appsink";
+}
+
+static gboolean
+gst_app_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+{
+  gchar *protocol;
+  gboolean ret;
+
+  protocol = gst_uri_get_protocol (uri);
+  ret = !strcmp (protocol, "appsink");
+  g_free (protocol);
+
+  return ret;
+}
+
+static void
+gst_app_sink_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_app_sink_uri_get_type;
+  iface->get_protocols = gst_app_sink_uri_get_protocols;
+  iface->get_uri = gst_app_sink_uri_get_uri;
+  iface->set_uri = gst_app_sink_uri_set_uri;
+}
diff --git a/gst-libs/gst/app/gstappsink.h b/gst-libs/gst/app/gstappsink.h
new file mode 100644
index 0000000..3e0bc41
--- /dev/null
+++ b/gst-libs/gst/app/gstappsink.h
@@ -0,0 +1,141 @@
+/* GStreamer
+ * Copyright (C) 2007 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GST_APP_SINK_H_
+#define _GST_APP_SINK_H_
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_APP_SINK \
+  (gst_app_sink_get_type())
+#define GST_APP_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SINK,GstAppSink))
+#define GST_APP_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SINK,GstAppSinkClass))
+#define GST_IS_APP_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SINK))
+#define GST_IS_APP_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SINK))
+/* Since 0.10.23 */
+#define GST_APP_SINK_CAST(obj) \
+  ((GstAppSink*)(obj))
+
+typedef struct _GstAppSink GstAppSink;
+typedef struct _GstAppSinkClass GstAppSinkClass;
+typedef struct _GstAppSinkPrivate GstAppSinkPrivate;
+
+/**
+ * GstAppSinkCallbacks:
+ * @eos: Called when the end-of-stream has been reached. This callback
+ *       is called from the steaming thread.
+ * @new_preroll: Called when a new preroll buffer is available. 
+ *       This callback is called from the steaming thread.
+ *       The new preroll buffer can be retrieved with
+ *       gst_app_sink_pull_preroll() either from this callback
+ *       or from any other thread.
+ * @new_buffer: Called when a new buffer is available. 
+ *       This callback is called from the steaming thread.
+ *       The new buffer can be retrieved with
+ *       gst_app_sink_pull_buffer() either from this callback
+ *       or from any other thread.
+ * @new_buffer_list: Called when a new bufferlist is available. 
+ *       This callback is called from the steaming thread.
+ *       The new bufferlist can be retrieved with
+ *       gst_app_sink_pull_buffer_list() either from this callback
+ *       or from any other thread.
+ *
+ * A set of callbacks that can be installed on the appsink with
+ * gst_app_sink_set_callbacks().
+ *
+ * Since: 0.10.23
+ */
+typedef struct {
+  void          (*eos)              (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_preroll)      (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_buffer)       (GstAppSink *sink, gpointer user_data);
+  GstFlowReturn (*new_buffer_list)  (GstAppSink *sink, gpointer user_data);
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING - 1];
+} GstAppSinkCallbacks;
+
+struct _GstAppSink
+{
+  GstBaseSink basesink;
+
+  /*< private >*/
+  GstAppSinkPrivate *priv;
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING];
+};
+
+struct _GstAppSinkClass
+{
+  GstBaseSinkClass basesink_class;
+
+  /* signals */
+  void        (*eos)          (GstAppSink *sink);
+  void        (*new_preroll)  (GstAppSink *sink);
+  void        (*new_buffer)   (GstAppSink *sink);
+
+  /* actions */
+  GstBuffer     * (*pull_preroll)      (GstAppSink *sink);
+  GstBuffer     * (*pull_buffer)       (GstAppSink *sink);
+
+  /* ABI added */
+  GstBufferList * (*new_buffer_list)   (GstAppSink *sink);
+  GstBufferList * (*pull_buffer_list)  (GstAppSink *sink);
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING - 2];
+};
+
+GType gst_app_sink_get_type(void);
+
+void            gst_app_sink_set_caps         (GstAppSink *appsink, const GstCaps *caps);
+GstCaps *       gst_app_sink_get_caps         (GstAppSink *appsink);
+
+gboolean        gst_app_sink_is_eos           (GstAppSink *appsink);
+
+void            gst_app_sink_set_emit_signals (GstAppSink *appsink, gboolean emit);
+gboolean        gst_app_sink_get_emit_signals (GstAppSink *appsink);
+
+void            gst_app_sink_set_max_buffers  (GstAppSink *appsink, guint max);
+guint           gst_app_sink_get_max_buffers  (GstAppSink *appsink);
+
+void            gst_app_sink_set_drop         (GstAppSink *appsink, gboolean drop);
+gboolean        gst_app_sink_get_drop         (GstAppSink *appsink);
+
+GstBuffer *     gst_app_sink_pull_preroll     (GstAppSink *appsink);
+GstBuffer *     gst_app_sink_pull_buffer      (GstAppSink *appsink);
+GstBufferList * gst_app_sink_pull_buffer_list (GstAppSink *appsink);
+
+void            gst_app_sink_set_callbacks    (GstAppSink * appsink,
+                                               GstAppSinkCallbacks *callbacks,
+					       gpointer user_data,
+					       GDestroyNotify notify);
+
+G_END_DECLS
+
+#endif
+
diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c
new file mode 100644
index 0000000..1a6a0cd
--- /dev/null
+++ b/gst-libs/gst/app/gstappsrc.c
@@ -0,0 +1,1650 @@
+/* GStreamer
+ * Copyright (C) 2007 David Schleef <ds@schleef.org>
+ *           (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstappsrc
+ * @short_description: Easy way for applications to inject buffers into a
+ *     pipeline
+ * @see_also: #GstBaseSrc, appsink
+ *
+ * The appsrc element can be used by applications to insert data into a
+ * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+ * external API functions.
+ *
+ * appsrc can be used by linking with the libgstapp library to access the
+ * methods directly or by using the appsrc action signals.
+ *
+ * Before operating appsrc, the caps property must be set to a fixed caps
+ * describing the format of the data that will be pushed with appsrc. An
+ * exception to this is when pushing buffers with unknown caps, in which case no
+ * caps should be set. This is typically true of file-like sources that push raw
+ * byte buffers.
+ *
+ * The main way of handing data to the appsrc element is by calling the
+ * gst_app_src_push_buffer() method or by emiting the push-buffer action signal.
+ * This will put the buffer onto a queue from which appsrc will read from in its
+ * streaming thread. It is important to note that data transport will not happen
+ * from the thread that performed the push-buffer call.
+ *
+ * The "max-bytes" property controls how much data can be queued in appsrc
+ * before appsrc considers the queue full. A filled internal queue will always
+ * signal the "enough-data" signal, which signals the application that it should
+ * stop pushing data into appsrc. The "block" property will cause appsrc to
+ * block the push-buffer method until free data becomes available again.
+ *
+ * When the internal queue is running out of data, the "need-data" signal is
+ * emited, which signals the application that it should start pushing more data
+ * into appsrc.
+ *
+ * In addition to the "need-data" and "enough-data" signals, appsrc can emit the
+ * "seek-data" signal when the "stream-mode" property is set to "seekable" or
+ * "random-access". The signal argument will contain the new desired position in
+ * the stream expressed in the unit set with the "format" property. After
+ * receiving the seek-data signal, the application should push-buffers from the
+ * new position.
+ *
+ * These signals allow the application to operate the appsrc in two different
+ * ways:
+ *
+ * The push model, in which the application repeadedly calls the push-buffer method
+ * with a new buffer. Optionally, the queue size in the appsrc can be controlled
+ * with the enough-data and need-data signals by respectively stopping/starting
+ * the push-buffer calls. This is a typical mode of operation for the
+ * stream-type "stream" and "seekable". Use this model when implementing various
+ * network protocols or hardware devices.
+ *
+ * The pull model where the need-data signal triggers the next push-buffer call.
+ * This mode is typically used in the "random-access" stream-type. Use this
+ * model for file access or other randomly accessable sources. In this mode, a
+ * buffer of exactly the amount of bytes given by the need-data signal should be
+ * pushed into appsrc.
+ *
+ * In all modes, the size property on appsrc should contain the total stream
+ * size in bytes. Setting this property is mandatory in the random-access mode.
+ * For the stream and seekable modes, setting this property is optional but
+ * recommended.
+ *
+ * When the application is finished pushing data into appsrc, it should call
+ * gst_app_src_end_of_stream() or emit the end-of-stream action signal. After
+ * this call, no more buffers can be pushed into appsrc until a flushing seek
+ * happened or the state of the appsrc has gone through READY.
+ *
+ * Last reviewed on 2008-12-17 (0.10.10)
+ *
+ * Since: 0.10.22
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesrc.h>
+
+#include <string.h>
+
+#include "gstapp-marshal.h"
+#include "gstappsrc.h"
+
+struct _GstAppSrcPrivate
+{
+  GCond *cond;
+  GMutex *mutex;
+  GQueue *queue;
+
+  GstCaps *caps;
+  gint64 size;
+  GstAppStreamType stream_type;
+  guint64 max_bytes;
+  GstFormat format;
+  gboolean block;
+
+  gboolean flushing;
+  gboolean started;
+  gboolean is_eos;
+  guint64 queued_bytes;
+  guint64 offset;
+  GstAppStreamType current_type;
+
+  guint64 min_latency;
+  guint64 max_latency;
+  gboolean emit_signals;
+  guint min_percent;
+
+  GstAppSrcCallbacks callbacks;
+  gpointer user_data;
+  GDestroyNotify notify;
+};
+
+GST_DEBUG_CATEGORY_STATIC (app_src_debug);
+#define GST_CAT_DEFAULT app_src_debug
+
+enum
+{
+  /* signals */
+  SIGNAL_NEED_DATA,
+  SIGNAL_ENOUGH_DATA,
+  SIGNAL_SEEK_DATA,
+
+  /* actions */
+  SIGNAL_PUSH_BUFFER,
+  SIGNAL_END_OF_STREAM,
+
+  LAST_SIGNAL
+};
+
+#define DEFAULT_PROP_SIZE          -1
+#define DEFAULT_PROP_STREAM_TYPE   GST_APP_STREAM_TYPE_STREAM
+#define DEFAULT_PROP_MAX_BYTES     200000
+#define DEFAULT_PROP_FORMAT        GST_FORMAT_BYTES
+#define DEFAULT_PROP_BLOCK         FALSE
+#define DEFAULT_PROP_IS_LIVE       FALSE
+#define DEFAULT_PROP_MIN_LATENCY   -1
+#define DEFAULT_PROP_MAX_LATENCY   -1
+#define DEFAULT_PROP_EMIT_SIGNALS  TRUE
+#define DEFAULT_PROP_MIN_PERCENT   0
+
+enum
+{
+  PROP_0,
+  PROP_CAPS,
+  PROP_SIZE,
+  PROP_STREAM_TYPE,
+  PROP_MAX_BYTES,
+  PROP_FORMAT,
+  PROP_BLOCK,
+  PROP_IS_LIVE,
+  PROP_MIN_LATENCY,
+  PROP_MAX_LATENCY,
+  PROP_EMIT_SIGNALS,
+  PROP_MIN_PERCENT,
+  PROP_LAST
+};
+
+static GstStaticPadTemplate gst_app_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+GType
+gst_app_stream_type_get_type (void)
+{
+  static volatile gsize stream_type_type = 0;
+  static const GEnumValue stream_type[] = {
+    {GST_APP_STREAM_TYPE_STREAM, "GST_APP_STREAM_TYPE_STREAM", "stream"},
+    {GST_APP_STREAM_TYPE_SEEKABLE, "GST_APP_STREAM_TYPE_SEEKABLE", "seekable"},
+    {GST_APP_STREAM_TYPE_RANDOM_ACCESS, "GST_APP_STREAM_TYPE_RANDOM_ACCESS",
+        "random-access"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&stream_type_type)) {
+    GType tmp = g_enum_register_static ("GstAppStreamType", stream_type);
+    g_once_init_leave (&stream_type_type, tmp);
+  }
+
+  return (GType) stream_type_type;
+}
+
+static void gst_app_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+
+static void gst_app_src_dispose (GObject * object);
+static void gst_app_src_finalize (GObject * object);
+
+static void gst_app_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_app_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void gst_app_src_set_latencies (GstAppSrc * appsrc,
+    gboolean do_min, guint64 min, gboolean do_max, guint64 max);
+
+static GstFlowReturn gst_app_src_create (GstBaseSrc * bsrc,
+    guint64 offset, guint size, GstBuffer ** buf);
+static gboolean gst_app_src_start (GstBaseSrc * bsrc);
+static gboolean gst_app_src_stop (GstBaseSrc * bsrc);
+static gboolean gst_app_src_unlock (GstBaseSrc * bsrc);
+static gboolean gst_app_src_unlock_stop (GstBaseSrc * bsrc);
+static gboolean gst_app_src_do_seek (GstBaseSrc * src, GstSegment * segment);
+static gboolean gst_app_src_is_seekable (GstBaseSrc * src);
+static gboolean gst_app_src_do_get_size (GstBaseSrc * src, guint64 * size);
+static gboolean gst_app_src_query (GstBaseSrc * src, GstQuery * query);
+
+static GstFlowReturn gst_app_src_push_buffer_action (GstAppSrc * appsrc,
+    GstBuffer * buffer);
+
+static guint gst_app_src_signals[LAST_SIGNAL] = { 0 };
+
+#define gst_app_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAppSrc, gst_app_src, GST_TYPE_BASE_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_app_src_uri_handler_init));
+
+static void
+gst_app_src_class_init (GstAppSrcClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *element_class = (GstElementClass *) klass;
+  GstBaseSrcClass *basesrc_class = (GstBaseSrcClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (app_src_debug, "appsrc", 0, "appsrc element");
+
+  gobject_class->dispose = gst_app_src_dispose;
+  gobject_class->finalize = gst_app_src_finalize;
+
+  gobject_class->set_property = gst_app_src_set_property;
+  gobject_class->get_property = gst_app_src_get_property;
+
+  /**
+   * GstAppSrc::caps
+   *
+   * The GstCaps that will negotiated downstream and will be put
+   * on outgoing buffers.
+   */
+  g_object_class_install_property (gobject_class, PROP_CAPS,
+      g_param_spec_boxed ("caps", "Caps",
+          "The allowed caps for the src pad", GST_TYPE_CAPS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::format
+   *
+   * The format to use for segment events. When the source is producing
+   * timestamped buffers this property should be set to GST_FORMAT_TIME.
+   */
+  g_object_class_install_property (gobject_class, PROP_FORMAT,
+      g_param_spec_enum ("format", "Format",
+          "The format of the segment events and seek", GST_TYPE_FORMAT,
+          DEFAULT_PROP_FORMAT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::size
+   *
+   * The total size in bytes of the data stream. If the total size is known, it
+   * is recommended to configure it with this property.
+   */
+  g_object_class_install_property (gobject_class, PROP_SIZE,
+      g_param_spec_int64 ("size", "Size",
+          "The size of the data stream in bytes (-1 if unknown)",
+          -1, G_MAXINT64, DEFAULT_PROP_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::stream-type
+   *
+   * The type of stream that this source is producing.  For seekable streams the
+   * application should connect to the seek-data signal.
+   */
+  g_object_class_install_property (gobject_class, PROP_STREAM_TYPE,
+      g_param_spec_enum ("stream-type", "Stream Type",
+          "the type of the stream", GST_TYPE_APP_STREAM_TYPE,
+          DEFAULT_PROP_STREAM_TYPE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::max-bytes
+   *
+   * The maximum amount of bytes that can be queued internally.
+   * After the maximum amount of bytes are queued, appsrc will emit the
+   * "enough-data" signal.
+   */
+  g_object_class_install_property (gobject_class, PROP_MAX_BYTES,
+      g_param_spec_uint64 ("max-bytes", "Max bytes",
+          "The maximum number of bytes to queue internally (0 = unlimited)",
+          0, G_MAXUINT64, DEFAULT_PROP_MAX_BYTES,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::block
+   *
+   * When max-bytes are queued and after the enough-data signal has been emited,
+   * block any further push-buffer calls until the amount of queued bytes drops
+   * below the max-bytes limit.
+   */
+  g_object_class_install_property (gobject_class, PROP_BLOCK,
+      g_param_spec_boolean ("block", "Block",
+          "Block push-buffer when max-bytes are queued",
+          DEFAULT_PROP_BLOCK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAppSrc::is-live
+   *
+   * Instruct the source to behave like a live source. This includes that it
+   * will only push out buffers in the PLAYING state.
+   */
+  g_object_class_install_property (gobject_class, PROP_IS_LIVE,
+      g_param_spec_boolean ("is-live", "Is Live",
+          "Whether to act as a live source",
+          DEFAULT_PROP_IS_LIVE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::min-latency
+   *
+   * The minimum latency of the source. A value of -1 will use the default
+   * latency calculations of #GstBaseSrc.
+   */
+  g_object_class_install_property (gobject_class, PROP_MIN_LATENCY,
+      g_param_spec_int64 ("min-latency", "Min Latency",
+          "The minimum latency (-1 = default)",
+          -1, G_MAXINT64, DEFAULT_PROP_MIN_LATENCY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAppSrc::max-latency
+   *
+   * The maximum latency of the source. A value of -1 means an unlimited amout
+   * of latency.
+   */
+  g_object_class_install_property (gobject_class, PROP_MAX_LATENCY,
+      g_param_spec_int64 ("max-latency", "Max Latency",
+          "The maximum latency (-1 = unlimited)",
+          -1, G_MAXINT64, DEFAULT_PROP_MAX_LATENCY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAppSrc::emit-signals
+   *
+   * Make appsrc emit the "need-data", "enough-data" and "seek-data" signals.
+   * This option is by default enabled for backwards compatibility reasons but
+   * can disabled when needed because signal emission is expensive.
+   *
+   * Since: 0.10.23
+   */
+  g_object_class_install_property (gobject_class, PROP_EMIT_SIGNALS,
+      g_param_spec_boolean ("emit-signals", "Emit signals",
+          "Emit need-data, enough-data and seek-data signals",
+          DEFAULT_PROP_EMIT_SIGNALS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAppSrc::empty-percent
+   *
+   * Make appsrc emit the "need-data" signal when the amount of bytes in the
+   * queue drops below this percentage of max-bytes.
+   *
+   * Since: 0.10.27
+   */
+  g_object_class_install_property (gobject_class, PROP_MIN_PERCENT,
+      g_param_spec_uint ("min-percent", "Min Percent",
+          "Emit need-data when queued bytes drops below this percent of max-bytes",
+          0, 100, DEFAULT_PROP_MIN_PERCENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAppSrc::need-data:
+   * @appsrc: the appsrc element that emited the signal
+   * @length: the amount of bytes needed.
+   *
+   * Signal that the source needs more data. In the callback or from another
+   * thread you should call push-buffer or end-of-stream.
+   *
+   * @length is just a hint and when it is set to -1, any number of bytes can be
+   * pushed into @appsrc.
+   *
+   * You can call push-buffer multiple times until the enough-data signal is
+   * fired.
+   */
+  gst_app_src_signals[SIGNAL_NEED_DATA] =
+      g_signal_new ("need-data", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSrcClass, need_data),
+      NULL, NULL, __gst_app_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT);
+
+  /**
+   * GstAppSrc::enough-data:
+   * @appsrc: the appsrc element that emited the signal
+   *
+   * Signal that the source has enough data. It is recommended that the
+   * application stops calling push-buffer until the need-data signal is
+   * emited again to avoid excessive buffer queueing.
+   */
+  gst_app_src_signals[SIGNAL_ENOUGH_DATA] =
+      g_signal_new ("enough-data", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSrcClass, enough_data),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstAppSrc::seek-data:
+   * @appsrc: the appsrc element that emited the signal
+   * @offset: the offset to seek to
+   *
+   * Seek to the given offset. The next push-buffer should produce buffers from
+   * the new @offset.
+   * This callback is only called for seekable stream types.
+   *
+   * Returns: %TRUE if the seek succeeded.
+   */
+  gst_app_src_signals[SIGNAL_SEEK_DATA] =
+      g_signal_new ("seek-data", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstAppSrcClass, seek_data),
+      NULL, NULL, __gst_app_marshal_BOOLEAN__UINT64, G_TYPE_BOOLEAN, 1,
+      G_TYPE_UINT64);
+
+   /**
+    * GstAppSrc::push-buffer:
+    * @appsrc: the appsrc
+    * @buffer: a buffer to push
+    *
+    * Adds a buffer to the queue of buffers that the appsrc element will
+    * push to its source pad. This function does not take ownership of the
+    * buffer so the buffer needs to be unreffed after calling this function.
+    *
+    * When the block property is TRUE, this function can block until free space
+    * becomes available in the queue.
+    */
+  gst_app_src_signals[SIGNAL_PUSH_BUFFER] =
+      g_signal_new ("push-buffer", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSrcClass,
+          push_buffer), NULL, NULL, __gst_app_marshal_ENUM__OBJECT,
+      GST_TYPE_FLOW_RETURN, 1, GST_TYPE_BUFFER);
+
+   /**
+    * GstAppSrc::end-of-stream:
+    * @appsrc: the appsrc
+    *
+    * Notify @appsrc that no more buffer are available.
+    */
+  gst_app_src_signals[SIGNAL_END_OF_STREAM] =
+      g_signal_new ("end-of-stream", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSrcClass,
+          end_of_stream), NULL, NULL, __gst_app_marshal_ENUM__VOID,
+      GST_TYPE_FLOW_RETURN, 0, G_TYPE_NONE);
+
+  gst_element_class_set_details_simple (element_class, "AppSrc",
+      "Generic/Source", "Allow the application to feed buffers to a pipeline",
+      "David Schleef <ds@schleef.org>, Wim Taymans <wim.taymans@gmail.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_app_src_template));
+
+  basesrc_class->create = gst_app_src_create;
+  basesrc_class->start = gst_app_src_start;
+  basesrc_class->stop = gst_app_src_stop;
+  basesrc_class->unlock = gst_app_src_unlock;
+  basesrc_class->unlock_stop = gst_app_src_unlock_stop;
+  basesrc_class->do_seek = gst_app_src_do_seek;
+  basesrc_class->is_seekable = gst_app_src_is_seekable;
+  basesrc_class->get_size = gst_app_src_do_get_size;
+  basesrc_class->get_size = gst_app_src_do_get_size;
+  basesrc_class->query = gst_app_src_query;
+
+  klass->push_buffer = gst_app_src_push_buffer_action;
+  klass->end_of_stream = gst_app_src_end_of_stream;
+
+  g_type_class_add_private (klass, sizeof (GstAppSrcPrivate));
+}
+
+static void
+gst_app_src_init (GstAppSrc * appsrc)
+{
+  GstAppSrcPrivate *priv;
+
+  priv = appsrc->priv = G_TYPE_INSTANCE_GET_PRIVATE (appsrc, GST_TYPE_APP_SRC,
+      GstAppSrcPrivate);
+
+  priv->mutex = g_mutex_new ();
+  priv->cond = g_cond_new ();
+  priv->queue = g_queue_new ();
+
+  priv->size = DEFAULT_PROP_SIZE;
+  priv->stream_type = DEFAULT_PROP_STREAM_TYPE;
+  priv->max_bytes = DEFAULT_PROP_MAX_BYTES;
+  priv->format = DEFAULT_PROP_FORMAT;
+  priv->block = DEFAULT_PROP_BLOCK;
+  priv->min_latency = DEFAULT_PROP_MIN_LATENCY;
+  priv->max_latency = DEFAULT_PROP_MAX_LATENCY;
+  priv->emit_signals = DEFAULT_PROP_EMIT_SIGNALS;
+  priv->min_percent = DEFAULT_PROP_MIN_PERCENT;
+
+  gst_base_src_set_live (GST_BASE_SRC (appsrc), DEFAULT_PROP_IS_LIVE);
+}
+
+static void
+gst_app_src_flush_queued (GstAppSrc * src)
+{
+  GstBuffer *buf;
+  GstAppSrcPrivate *priv = src->priv;
+
+  while ((buf = g_queue_pop_head (priv->queue)))
+    gst_buffer_unref (buf);
+  priv->queued_bytes = 0;
+}
+
+static void
+gst_app_src_dispose (GObject * obj)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (obj);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  if (priv->caps) {
+    gst_caps_unref (priv->caps);
+    priv->caps = NULL;
+  }
+  gst_app_src_flush_queued (appsrc);
+
+  G_OBJECT_CLASS (parent_class)->dispose (obj);
+}
+
+static void
+gst_app_src_finalize (GObject * obj)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (obj);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  g_mutex_free (priv->mutex);
+  g_cond_free (priv->cond);
+  g_queue_free (priv->queue);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_app_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (object);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  switch (prop_id) {
+    case PROP_CAPS:
+      gst_app_src_set_caps (appsrc, gst_value_get_caps (value));
+      break;
+    case PROP_SIZE:
+      gst_app_src_set_size (appsrc, g_value_get_int64 (value));
+      break;
+    case PROP_STREAM_TYPE:
+      gst_app_src_set_stream_type (appsrc, g_value_get_enum (value));
+      break;
+    case PROP_MAX_BYTES:
+      gst_app_src_set_max_bytes (appsrc, g_value_get_uint64 (value));
+      break;
+    case PROP_FORMAT:
+      priv->format = g_value_get_enum (value);
+      break;
+    case PROP_BLOCK:
+      priv->block = g_value_get_boolean (value);
+      break;
+    case PROP_IS_LIVE:
+      gst_base_src_set_live (GST_BASE_SRC (appsrc),
+          g_value_get_boolean (value));
+      break;
+    case PROP_MIN_LATENCY:
+      gst_app_src_set_latencies (appsrc, TRUE, g_value_get_int64 (value),
+          FALSE, -1);
+      break;
+    case PROP_MAX_LATENCY:
+      gst_app_src_set_latencies (appsrc, FALSE, -1, TRUE,
+          g_value_get_int64 (value));
+      break;
+    case PROP_EMIT_SIGNALS:
+      gst_app_src_set_emit_signals (appsrc, g_value_get_boolean (value));
+      break;
+    case PROP_MIN_PERCENT:
+      priv->min_percent = g_value_get_uint (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_app_src_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (object);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  switch (prop_id) {
+    case PROP_CAPS:
+    {
+      GstCaps *caps;
+
+      /* we're missing a _take_caps() function to transfer ownership */
+      caps = gst_app_src_get_caps (appsrc);
+      gst_value_set_caps (value, caps);
+      if (caps)
+        gst_caps_unref (caps);
+      break;
+    }
+    case PROP_SIZE:
+      g_value_set_int64 (value, gst_app_src_get_size (appsrc));
+      break;
+    case PROP_STREAM_TYPE:
+      g_value_set_enum (value, gst_app_src_get_stream_type (appsrc));
+      break;
+    case PROP_MAX_BYTES:
+      g_value_set_uint64 (value, gst_app_src_get_max_bytes (appsrc));
+      break;
+    case PROP_FORMAT:
+      g_value_set_enum (value, priv->format);
+      break;
+    case PROP_BLOCK:
+      g_value_set_boolean (value, priv->block);
+      break;
+    case PROP_IS_LIVE:
+      g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (appsrc)));
+      break;
+    case PROP_MIN_LATENCY:
+    {
+      guint64 min;
+
+      gst_app_src_get_latency (appsrc, &min, NULL);
+      g_value_set_int64 (value, min);
+      break;
+    }
+    case PROP_MAX_LATENCY:
+    {
+      guint64 max;
+
+      gst_app_src_get_latency (appsrc, &max, NULL);
+      g_value_set_int64 (value, max);
+      break;
+    }
+    case PROP_EMIT_SIGNALS:
+      g_value_set_boolean (value, gst_app_src_get_emit_signals (appsrc));
+      break;
+    case PROP_MIN_PERCENT:
+      g_value_set_uint (value, priv->min_percent);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_app_src_unlock (GstBaseSrc * bsrc)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (bsrc);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsrc, "unlock start");
+  priv->flushing = TRUE;
+  g_cond_broadcast (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_src_unlock_stop (GstBaseSrc * bsrc)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (bsrc);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsrc, "unlock stop");
+  priv->flushing = FALSE;
+  g_cond_broadcast (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_src_start (GstBaseSrc * bsrc)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (bsrc);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsrc, "starting");
+  priv->started = TRUE;
+  /* set the offset to -1 so that we always do a first seek. This is only used
+   * in random-access mode. */
+  priv->offset = -1;
+  priv->flushing = FALSE;
+  g_mutex_unlock (priv->mutex);
+
+  gst_base_src_set_format (bsrc, priv->format);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_src_stop (GstBaseSrc * bsrc)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (bsrc);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  GST_DEBUG_OBJECT (appsrc, "stopping");
+  priv->is_eos = FALSE;
+  priv->flushing = TRUE;
+  priv->started = FALSE;
+  gst_app_src_flush_queued (appsrc);
+  g_mutex_unlock (priv->mutex);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_src_is_seekable (GstBaseSrc * src)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (src);
+  GstAppSrcPrivate *priv = appsrc->priv;
+  gboolean res = FALSE;
+
+  switch (priv->stream_type) {
+    case GST_APP_STREAM_TYPE_STREAM:
+      break;
+    case GST_APP_STREAM_TYPE_SEEKABLE:
+    case GST_APP_STREAM_TYPE_RANDOM_ACCESS:
+      res = TRUE;
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_app_src_do_get_size (GstBaseSrc * src, guint64 * size)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (src);
+
+  *size = gst_app_src_get_size (appsrc);
+
+  return TRUE;
+}
+
+static gboolean
+gst_app_src_query (GstBaseSrc * src, GstQuery * query)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (src);
+  GstAppSrcPrivate *priv = appsrc->priv;
+  gboolean res;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      GstClockTime min, max;
+      gboolean live;
+
+      /* Query the parent class for the defaults */
+      res = gst_base_src_query_latency (src, &live, &min, &max);
+
+      /* overwrite with our values when we need to */
+      g_mutex_lock (priv->mutex);
+      if (priv->min_latency != -1)
+        min = priv->min_latency;
+      if (priv->max_latency != -1)
+        max = priv->max_latency;
+      g_mutex_unlock (priv->mutex);
+
+      gst_query_set_latency (query, live, min, max);
+      break;
+    }
+    case GST_QUERY_SCHEDULING:
+    {
+      gboolean pull_mode = FALSE;
+
+      switch (priv->stream_type) {
+        case GST_APP_STREAM_TYPE_STREAM:
+        case GST_APP_STREAM_TYPE_SEEKABLE:
+          break;
+        case GST_APP_STREAM_TYPE_RANDOM_ACCESS:
+          pull_mode = TRUE;
+          break;
+      }
+      gst_query_set_scheduling (query, pull_mode, TRUE, FALSE, 1, -1, 1);
+      res = TRUE;
+      break;
+    }
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
+      break;
+  }
+
+  return res;
+}
+
+/* will be called in push mode */
+static gboolean
+gst_app_src_do_seek (GstBaseSrc * src, GstSegment * segment)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (src);
+  GstAppSrcPrivate *priv = appsrc->priv;
+  gint64 desired_position;
+  gboolean res = FALSE;
+
+  desired_position = segment->position;
+
+  GST_DEBUG_OBJECT (appsrc, "seeking to %" G_GINT64_FORMAT ", format %s",
+      desired_position, gst_format_get_name (segment->format));
+
+  /* no need to try to seek in streaming mode */
+  if (priv->stream_type == GST_APP_STREAM_TYPE_STREAM)
+    return TRUE;
+
+  if (priv->callbacks.seek_data)
+    res = priv->callbacks.seek_data (appsrc, desired_position, priv->user_data);
+  else {
+    gboolean emit;
+
+    g_mutex_lock (priv->mutex);
+    emit = priv->emit_signals;
+    g_mutex_unlock (priv->mutex);
+
+    if (emit)
+      g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_SEEK_DATA], 0,
+          desired_position, &res);
+  }
+
+  if (res) {
+    GST_DEBUG_OBJECT (appsrc, "flushing queue");
+    gst_app_src_flush_queued (appsrc);
+    priv->is_eos = FALSE;
+  } else {
+    GST_WARNING_OBJECT (appsrc, "seek failed");
+  }
+
+  return res;
+}
+
+/* must be called with the appsrc mutex */
+static gboolean
+gst_app_src_emit_seek (GstAppSrc * appsrc, guint64 offset)
+{
+  gboolean res = FALSE;
+  gboolean emit;
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  emit = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  GST_DEBUG_OBJECT (appsrc,
+      "we are at %" G_GINT64_FORMAT ", seek to %" G_GINT64_FORMAT,
+      priv->offset, offset);
+
+  if (priv->callbacks.seek_data)
+    res = priv->callbacks.seek_data (appsrc, offset, priv->user_data);
+  else if (emit)
+    g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_SEEK_DATA], 0,
+        offset, &res);
+
+  g_mutex_lock (priv->mutex);
+
+  return res;
+}
+
+/* must be called with the appsrc mutex. After this call things can be
+ * flushing */
+static void
+gst_app_src_emit_need_data (GstAppSrc * appsrc, guint size)
+{
+  gboolean emit;
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  emit = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  /* we have no data, we need some. We fire the signal with the size hint. */
+  if (priv->callbacks.need_data)
+    priv->callbacks.need_data (appsrc, size, priv->user_data);
+  else if (emit)
+    g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_NEED_DATA], 0, size,
+        NULL);
+
+  g_mutex_lock (priv->mutex);
+  /* we can be flushing now because we released the lock */
+}
+
+static GstFlowReturn
+gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size,
+    GstBuffer ** buf)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (bsrc);
+  GstAppSrcPrivate *priv = appsrc->priv;
+  GstFlowReturn ret;
+  GstCaps *caps;
+
+  GST_OBJECT_LOCK (appsrc);
+  caps = priv->caps ? gst_caps_ref (priv->caps) : NULL;
+  if (G_UNLIKELY (priv->size != bsrc->segment.duration &&
+          bsrc->segment.format == GST_FORMAT_BYTES)) {
+    GST_DEBUG_OBJECT (appsrc,
+        "Size changed from %" G_GINT64_FORMAT " to %" G_GINT64_FORMAT,
+        bsrc->segment.duration, priv->size);
+    bsrc->segment.duration = priv->size;
+    GST_OBJECT_UNLOCK (appsrc);
+
+    gst_element_post_message (GST_ELEMENT (appsrc),
+        gst_message_new_duration (GST_OBJECT (appsrc), GST_FORMAT_BYTES,
+            priv->size));
+  } else {
+    GST_OBJECT_UNLOCK (appsrc);
+  }
+
+  g_mutex_lock (priv->mutex);
+  /* check flushing first */
+  if (G_UNLIKELY (priv->flushing))
+    goto flushing;
+
+  if (priv->stream_type == GST_APP_STREAM_TYPE_RANDOM_ACCESS) {
+    /* if we are dealing with a random-access stream, issue a seek if the offset
+     * changed. */
+    if (G_UNLIKELY (priv->offset != offset)) {
+      gboolean res;
+
+      /* do the seek */
+      res = gst_app_src_emit_seek (appsrc, offset);
+
+      if (G_UNLIKELY (!res))
+        /* failing to seek is fatal */
+        goto seek_error;
+
+      priv->offset = offset;
+    }
+  }
+
+  while (TRUE) {
+    /* return data as long as we have some */
+    if (!g_queue_is_empty (priv->queue)) {
+      guint buf_size;
+
+      *buf = g_queue_pop_head (priv->queue);
+      buf_size = gst_buffer_get_size (*buf);
+
+      GST_DEBUG_OBJECT (appsrc, "we have buffer %p of size %u", *buf, buf_size);
+
+      priv->queued_bytes -= buf_size;
+
+      /* only update the offset when in random_access mode */
+      if (priv->stream_type == GST_APP_STREAM_TYPE_RANDOM_ACCESS)
+        priv->offset += buf_size;
+
+      /* signal that we removed an item */
+      g_cond_broadcast (priv->cond);
+
+      /* see if we go lower than the empty-percent */
+      if (priv->min_percent && priv->max_bytes) {
+        if (priv->queued_bytes * 100 / priv->max_bytes <= priv->min_percent)
+          /* ignore flushing state, we got a buffer and we will return it now.
+           * Errors will be handled in the next round */
+          gst_app_src_emit_need_data (appsrc, size);
+      }
+      ret = GST_FLOW_OK;
+      break;
+    } else {
+      gst_app_src_emit_need_data (appsrc, size);
+
+      /* we can be flushing now because we released the lock above */
+      if (G_UNLIKELY (priv->flushing))
+        goto flushing;
+
+      /* if we have a buffer now, continue the loop and try to return it. In
+       * random-access mode (where a buffer is normally pushed in the above
+       * signal) we can still be empty because the pushed buffer got flushed or
+       * when the application pushes the requested buffer later, we support both
+       * possiblities. */
+      if (!g_queue_is_empty (priv->queue))
+        continue;
+
+      /* no buffer yet, maybe we are EOS, if not, block for more data. */
+    }
+
+    /* check EOS */
+    if (G_UNLIKELY (priv->is_eos))
+      goto eos;
+
+    /* nothing to return, wait a while for new data or flushing. */
+    g_cond_wait (priv->cond, priv->mutex);
+  }
+  g_mutex_unlock (priv->mutex);
+  if (caps)
+    gst_caps_unref (caps);
+  return ret;
+
+  /* ERRORS */
+flushing:
+  {
+    GST_DEBUG_OBJECT (appsrc, "we are flushing");
+    g_mutex_unlock (priv->mutex);
+    if (caps)
+      gst_caps_unref (caps);
+    return GST_FLOW_WRONG_STATE;
+  }
+eos:
+  {
+    GST_DEBUG_OBJECT (appsrc, "we are EOS");
+    g_mutex_unlock (priv->mutex);
+    if (caps)
+      gst_caps_unref (caps);
+    return GST_FLOW_UNEXPECTED;
+  }
+seek_error:
+  {
+    g_mutex_unlock (priv->mutex);
+    if (caps)
+      gst_caps_unref (caps);
+    GST_ELEMENT_ERROR (appsrc, RESOURCE, READ, ("failed to seek"),
+        GST_ERROR_SYSTEM);
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* external API */
+
+/**
+ * gst_app_src_set_caps:
+ * @appsrc: a #GstAppSrc
+ * @caps: caps to set
+ *
+ * Set the capabilities on the appsrc element.  This function takes
+ * a copy of the caps structure. After calling this method, the source will
+ * only produce caps that match @caps. @caps must be fixed and the caps on the
+ * buffers must match the caps or left NULL.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_set_caps (GstAppSrc * appsrc, const GstCaps * caps)
+{
+  GstCaps *old;
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  GST_DEBUG_OBJECT (appsrc, "setting caps to %" GST_PTR_FORMAT, caps);
+  if ((old = priv->caps) != caps) {
+    if (caps)
+      priv->caps = gst_caps_copy (caps);
+    else
+      priv->caps = NULL;
+    if (old)
+      gst_caps_unref (old);
+  }
+  GST_OBJECT_UNLOCK (appsrc);
+}
+
+/**
+ * gst_app_src_get_caps:
+ * @appsrc: a #GstAppSrc
+ *
+ * Get the configured caps on @appsrc.
+ *
+ * Returns: the #GstCaps produced by the source. gst_caps_unref() after usage.
+ *
+ * Since: 0.10.22
+ */
+GstCaps *
+gst_app_src_get_caps (GstAppSrc * appsrc)
+{
+  GstCaps *caps;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), NULL);
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  if ((caps = priv->caps))
+    gst_caps_ref (caps);
+  GST_DEBUG_OBJECT (appsrc, "getting caps of %" GST_PTR_FORMAT, caps);
+  GST_OBJECT_UNLOCK (appsrc);
+
+  return caps;
+}
+
+/**
+ * gst_app_src_set_size:
+ * @appsrc: a #GstAppSrc
+ * @size: the size to set
+ *
+ * Set the size of the stream in bytes. A value of -1 means that the size is
+ * not known.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_set_size (GstAppSrc * appsrc, gint64 size)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  GST_DEBUG_OBJECT (appsrc, "setting size of %" G_GINT64_FORMAT, size);
+  priv->size = size;
+  GST_OBJECT_UNLOCK (appsrc);
+}
+
+/**
+ * gst_app_src_get_size:
+ * @appsrc: a #GstAppSrc
+ *
+ * Get the size of the stream in bytes. A value of -1 means that the size is
+ * not known.
+ *
+ * Returns: the size of the stream previously set with gst_app_src_set_size();
+ *
+ * Since: 0.10.22
+ */
+gint64
+gst_app_src_get_size (GstAppSrc * appsrc)
+{
+  gint64 size;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), -1);
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  size = priv->size;
+  GST_DEBUG_OBJECT (appsrc, "getting size of %" G_GINT64_FORMAT, size);
+  GST_OBJECT_UNLOCK (appsrc);
+
+  return size;
+}
+
+/**
+ * gst_app_src_set_stream_type:
+ * @appsrc: a #GstAppSrc
+ * @type: the new state
+ *
+ * Set the stream type on @appsrc. For seekable streams, the "seek" signal must
+ * be connected to.
+ *
+ * A stream_type stream
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_set_stream_type (GstAppSrc * appsrc, GstAppStreamType type)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  GST_DEBUG_OBJECT (appsrc, "setting stream_type of %d", type);
+  priv->stream_type = type;
+  GST_OBJECT_UNLOCK (appsrc);
+}
+
+/**
+ * gst_app_src_get_stream_type:
+ * @appsrc: a #GstAppSrc
+ *
+ * Get the stream type. Control the stream type of @appsrc
+ * with gst_app_src_set_stream_type().
+ *
+ * Returns: the stream type.
+ *
+ * Since: 0.10.22
+ */
+GstAppStreamType
+gst_app_src_get_stream_type (GstAppSrc * appsrc)
+{
+  gboolean stream_type;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), FALSE);
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  stream_type = priv->stream_type;
+  GST_DEBUG_OBJECT (appsrc, "getting stream_type of %d", stream_type);
+  GST_OBJECT_UNLOCK (appsrc);
+
+  return stream_type;
+}
+
+/**
+ * gst_app_src_set_max_bytes:
+ * @appsrc: a #GstAppSrc
+ * @max: the maximum number of bytes to queue
+ *
+ * Set the maximum amount of bytes that can be queued in @appsrc.
+ * After the maximum amount of bytes are queued, @appsrc will emit the
+ * "enough-data" signal.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_set_max_bytes (GstAppSrc * appsrc, guint64 max)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  if (max != priv->max_bytes) {
+    GST_DEBUG_OBJECT (appsrc, "setting max-bytes to %" G_GUINT64_FORMAT, max);
+    priv->max_bytes = max;
+    /* signal the change */
+    g_cond_broadcast (priv->cond);
+  }
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_src_get_max_bytes:
+ * @appsrc: a #GstAppSrc
+ *
+ * Get the maximum amount of bytes that can be queued in @appsrc.
+ *
+ * Returns: The maximum amount of bytes that can be queued.
+ *
+ * Since: 0.10.22
+ */
+guint64
+gst_app_src_get_max_bytes (GstAppSrc * appsrc)
+{
+  guint64 result;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), 0);
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  result = priv->max_bytes;
+  GST_DEBUG_OBJECT (appsrc, "getting max-bytes of %" G_GUINT64_FORMAT, result);
+  g_mutex_unlock (priv->mutex);
+
+  return result;
+}
+
+static void
+gst_app_src_set_latencies (GstAppSrc * appsrc, gboolean do_min, guint64 min,
+    gboolean do_max, guint64 max)
+{
+  GstAppSrcPrivate *priv = appsrc->priv;
+  gboolean changed = FALSE;
+
+  g_mutex_lock (priv->mutex);
+  if (do_min && priv->min_latency != min) {
+    priv->min_latency = min;
+    changed = TRUE;
+  }
+  if (do_max && priv->max_latency != max) {
+    priv->max_latency = max;
+    changed = TRUE;
+  }
+  g_mutex_unlock (priv->mutex);
+
+  if (changed) {
+    GST_DEBUG_OBJECT (appsrc, "posting latency changed");
+    gst_element_post_message (GST_ELEMENT_CAST (appsrc),
+        gst_message_new_latency (GST_OBJECT_CAST (appsrc)));
+  }
+}
+
+/**
+ * gst_app_src_set_latency:
+ * @appsrc: a #GstAppSrc
+ * @min: the min latency
+ * @max: the min latency
+ *
+ * Configure the @min and @max latency in @src. If @min is set to -1, the
+ * default latency calculations for pseudo-live sources will be used.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_set_latency (GstAppSrc * appsrc, guint64 min, guint64 max)
+{
+  gst_app_src_set_latencies (appsrc, TRUE, min, TRUE, max);
+}
+
+/**
+ * gst_app_src_get_latency:
+ * @appsrc: a #GstAppSrc
+ * @min: the min latency
+ * @max: the min latency
+ *
+ * Retrieve the min and max latencies in @min and @max respectively.
+ *
+ * Since: 0.10.22
+ */
+void
+gst_app_src_get_latency (GstAppSrc * appsrc, guint64 * min, guint64 * max)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  if (min)
+    *min = priv->min_latency;
+  if (max)
+    *max = priv->max_latency;
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_src_set_emit_signals:
+ * @appsrc: a #GstAppSrc
+ * @emit: the new state
+ *
+ * Make appsrc emit the "new-preroll" and "new-buffer" signals. This option is
+ * by default disabled because signal emission is expensive and unneeded when
+ * the application prefers to operate in pull mode.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_app_src_set_emit_signals (GstAppSrc * appsrc, gboolean emit)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  priv->emit_signals = emit;
+  g_mutex_unlock (priv->mutex);
+}
+
+/**
+ * gst_app_src_get_emit_signals:
+ * @appsrc: a #GstAppSrc
+ *
+ * Check if appsrc will emit the "new-preroll" and "new-buffer" signals.
+ *
+ * Returns: %TRUE if @appsrc is emiting the "new-preroll" and "new-buffer"
+ * signals.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_app_src_get_emit_signals (GstAppSrc * appsrc)
+{
+  gboolean result;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), FALSE);
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  result = priv->emit_signals;
+  g_mutex_unlock (priv->mutex);
+
+  return result;
+}
+
+static GstFlowReturn
+gst_app_src_push_buffer_full (GstAppSrc * appsrc, GstBuffer * buffer,
+    gboolean steal_ref)
+{
+  gboolean first = TRUE;
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), GST_FLOW_ERROR);
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+
+  while (TRUE) {
+    /* can't accept buffers when we are flushing or EOS */
+    if (priv->flushing)
+      goto flushing;
+
+    if (priv->is_eos)
+      goto eos;
+
+    if (priv->max_bytes && priv->queued_bytes >= priv->max_bytes) {
+      GST_DEBUG_OBJECT (appsrc,
+          "queue filled (%" G_GUINT64_FORMAT " >= %" G_GUINT64_FORMAT ")",
+          priv->queued_bytes, priv->max_bytes);
+
+      if (first) {
+        gboolean emit;
+
+        emit = priv->emit_signals;
+        /* only signal on the first push */
+        g_mutex_unlock (priv->mutex);
+
+        if (priv->callbacks.enough_data)
+          priv->callbacks.enough_data (appsrc, priv->user_data);
+        else if (emit)
+          g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_ENOUGH_DATA], 0,
+              NULL);
+
+        g_mutex_lock (priv->mutex);
+        /* continue to check for flushing/eos after releasing the lock */
+        first = FALSE;
+        continue;
+      }
+      if (priv->block) {
+        GST_DEBUG_OBJECT (appsrc, "waiting for free space");
+        /* we are filled, wait until a buffer gets popped or when we
+         * flush. */
+        g_cond_wait (priv->cond, priv->mutex);
+      } else {
+        /* no need to wait for free space, we just pump more data into the
+         * queue hoping that the caller reacts to the enough-data signal and
+         * stops pushing buffers. */
+        break;
+      }
+    } else
+      break;
+  }
+
+  GST_DEBUG_OBJECT (appsrc, "queueing buffer %p", buffer);
+  if (!steal_ref)
+    gst_buffer_ref (buffer);
+  g_queue_push_tail (priv->queue, buffer);
+  priv->queued_bytes += gst_buffer_get_size (buffer);
+  g_cond_broadcast (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+flushing:
+  {
+    GST_DEBUG_OBJECT (appsrc, "refuse buffer %p, we are flushing", buffer);
+    if (steal_ref)
+      gst_buffer_unref (buffer);
+    g_mutex_unlock (priv->mutex);
+    return GST_FLOW_WRONG_STATE;
+  }
+eos:
+  {
+    GST_DEBUG_OBJECT (appsrc, "refuse buffer %p, we are EOS", buffer);
+    if (steal_ref)
+      gst_buffer_unref (buffer);
+    g_mutex_unlock (priv->mutex);
+    return GST_FLOW_UNEXPECTED;
+  }
+}
+
+/**
+ * gst_app_src_push_buffer:
+ * @appsrc: a #GstAppSrc
+ * @buffer: a #GstBuffer to push
+ *
+ * Adds a buffer to the queue of buffers that the appsrc element will
+ * push to its source pad.  This function takes ownership of the buffer.
+ *
+ * When the block property is TRUE, this function can block until free
+ * space becomes available in the queue.
+ *
+ * Returns: #GST_FLOW_OK when the buffer was successfuly queued.
+ * #GST_FLOW_WRONG_STATE when @appsrc is not PAUSED or PLAYING.
+ * #GST_FLOW_UNEXPECTED when EOS occured.
+ *
+ * Since: 0.10.22
+ */
+GstFlowReturn
+gst_app_src_push_buffer (GstAppSrc * appsrc, GstBuffer * buffer)
+{
+  return gst_app_src_push_buffer_full (appsrc, buffer, TRUE);
+}
+
+/* push a buffer without stealing the ref of the buffer. This is used for the
+ * action signal. */
+static GstFlowReturn
+gst_app_src_push_buffer_action (GstAppSrc * appsrc, GstBuffer * buffer)
+{
+  return gst_app_src_push_buffer_full (appsrc, buffer, FALSE);
+}
+
+/**
+ * gst_app_src_end_of_stream:
+ * @appsrc: a #GstAppSrc
+ *
+ * Indicates to the appsrc element that the last buffer queued in the
+ * element is the last buffer of the stream.
+ *
+ * Returns: #GST_FLOW_OK when the EOS was successfuly queued.
+ * #GST_FLOW_WRONG_STATE when @appsrc is not PAUSED or PLAYING.
+ *
+ * Since: 0.10.22
+ */
+GstFlowReturn
+gst_app_src_end_of_stream (GstAppSrc * appsrc)
+{
+  GstAppSrcPrivate *priv;
+
+  g_return_val_if_fail (GST_IS_APP_SRC (appsrc), GST_FLOW_ERROR);
+
+  priv = appsrc->priv;
+
+  g_mutex_lock (priv->mutex);
+  /* can't accept buffers when we are flushing. We can accept them when we are
+   * EOS although it will not do anything. */
+  if (priv->flushing)
+    goto flushing;
+
+  GST_DEBUG_OBJECT (appsrc, "sending EOS");
+  priv->is_eos = TRUE;
+  g_cond_broadcast (priv->cond);
+  g_mutex_unlock (priv->mutex);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+flushing:
+  {
+    g_mutex_unlock (priv->mutex);
+    GST_DEBUG_OBJECT (appsrc, "refuse EOS, we are flushing");
+    return GST_FLOW_WRONG_STATE;
+  }
+}
+
+/**
+ * gst_app_src_set_callbacks:
+ * @appsrc: a #GstAppSrc
+ * @callbacks: the callbacks
+ * @user_data: a user_data argument for the callbacks
+ * @notify: a destroy notify function
+ *
+ * Set callbacks which will be executed when data is needed, enough data has
+ * been collected or when a seek should be performed.
+ * This is an alternative to using the signals, it has lower overhead and is thus
+ * less expensive, but also less flexible.
+ *
+ * If callbacks are installed, no signals will be emited for performance
+ * reasons.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_app_src_set_callbacks (GstAppSrc * appsrc,
+    GstAppSrcCallbacks * callbacks, gpointer user_data, GDestroyNotify notify)
+{
+  GDestroyNotify old_notify;
+  GstAppSrcPrivate *priv;
+
+  g_return_if_fail (GST_IS_APP_SRC (appsrc));
+  g_return_if_fail (callbacks != NULL);
+
+  priv = appsrc->priv;
+
+  GST_OBJECT_LOCK (appsrc);
+  old_notify = priv->notify;
+
+  if (old_notify) {
+    gpointer old_data;
+
+    old_data = priv->user_data;
+
+    priv->user_data = NULL;
+    priv->notify = NULL;
+    GST_OBJECT_UNLOCK (appsrc);
+
+    old_notify (old_data);
+
+    GST_OBJECT_LOCK (appsrc);
+  }
+  priv->callbacks = *callbacks;
+  priv->user_data = user_data;
+  priv->notify = notify;
+  GST_OBJECT_UNLOCK (appsrc);
+}
+
+/*** GSTURIHANDLER INTERFACE *************************************************/
+
+static GstURIType
+gst_app_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static gchar **
+gst_app_src_uri_get_protocols (GType type)
+{
+  static gchar *protocols[] = { (char *) "appsrc", NULL };
+
+  return protocols;
+}
+
+static const gchar *
+gst_app_src_uri_get_uri (GstURIHandler * handler)
+{
+  return "appsrc";
+}
+
+static gboolean
+gst_app_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+{
+  gchar *protocol;
+  gboolean ret;
+
+  protocol = gst_uri_get_protocol (uri);
+  ret = !strcmp (protocol, "appsrc");
+  g_free (protocol);
+
+  return ret;
+}
+
+static void
+gst_app_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_app_src_uri_get_type;
+  iface->get_protocols = gst_app_src_uri_get_protocols;
+  iface->get_uri = gst_app_src_uri_get_uri;
+  iface->set_uri = gst_app_src_uri_set_uri;
+}
diff --git a/gst-libs/gst/app/gstappsrc.h b/gst-libs/gst/app/gstappsrc.h
new file mode 100644
index 0000000..041cb68
--- /dev/null
+++ b/gst-libs/gst/app/gstappsrc.h
@@ -0,0 +1,153 @@
+/* GStreamer
+ * Copyright (C) 2007 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GST_APP_SRC_H_
+#define _GST_APP_SRC_H_
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_APP_SRC \
+  (gst_app_src_get_type())
+#define GST_APP_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APP_SRC,GstAppSrc))
+#define GST_APP_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APP_SRC,GstAppSrcClass))
+#define GST_IS_APP_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APP_SRC))
+#define GST_IS_APP_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APP_SRC))
+/* Since 0.10.23 */
+#define GST_APP_SRC_CAST(obj) \
+  ((GstAppSrc*)(obj))
+
+typedef struct _GstAppSrc GstAppSrc;
+typedef struct _GstAppSrcClass GstAppSrcClass;
+typedef struct _GstAppSrcPrivate GstAppSrcPrivate;
+
+/**
+ * GstAppSrcCallbacks:
+ * @need_data: Called when the appsrc needs more data. A buffer or EOS should be
+ *    pushed to appsrc from this thread or another thread. @length is just a hint
+ *    and when it is set to -1, any number of bytes can be pushed into @appsrc.
+ * @enough_data: Called when appsrc has enough data. It is recommended that the
+ *    application stops calling push-buffer until the need_data callback is
+ *    emited again to avoid excessive buffer queueing.
+ * @seek_data: Called when a seek should be performed to the offset.
+ *    The next push-buffer should produce buffers from the new @offset.
+ *    This callback is only called for seekable stream types.
+ *
+ * A set of callbacks that can be installed on the appsrc with
+ * gst_app_src_set_callbacks().
+ *
+ * Since: 0.10.23
+ */
+typedef struct {
+  void      (*need_data)    (GstAppSrc *src, guint length, gpointer user_data);
+  void      (*enough_data)  (GstAppSrc *src, gpointer user_data);
+  gboolean  (*seek_data)    (GstAppSrc *src, guint64 offset, gpointer user_data);
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING];
+} GstAppSrcCallbacks;
+
+/**
+ * GstAppStreamType:
+ * @GST_APP_STREAM_TYPE_STREAM: No seeking is supported in the stream, such as a
+ * live stream.
+ * @GST_APP_STREAM_TYPE_SEEKABLE: The stream is seekable but seeking might not
+ * be very fast, such as data from a webserver. 
+ * @GST_APP_STREAM_TYPE_RANDOM_ACCESS: The stream is seekable and seeking is fast,
+ * such as in a local file.
+ *
+ * The stream type.
+ */
+typedef enum
+{
+  GST_APP_STREAM_TYPE_STREAM,
+  GST_APP_STREAM_TYPE_SEEKABLE,
+  GST_APP_STREAM_TYPE_RANDOM_ACCESS
+} GstAppStreamType;
+
+struct _GstAppSrc
+{
+  GstBaseSrc basesrc;
+
+  /*< private >*/
+  GstAppSrcPrivate *priv;
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING];
+};
+
+struct _GstAppSrcClass
+{
+  GstBaseSrcClass basesrc_class;
+
+  /* signals */
+  void          (*need_data)       (GstAppSrc *src, guint length);
+  void          (*enough_data)     (GstAppSrc *src);
+  gboolean      (*seek_data)       (GstAppSrc *src, guint64 offset);
+
+  /* actions */
+  GstFlowReturn (*push_buffer)     (GstAppSrc *src, GstBuffer *buffer);
+  GstFlowReturn (*end_of_stream)   (GstAppSrc *src);
+
+  /*< private >*/
+  gpointer     _gst_reserved[GST_PADDING];
+};
+
+GType gst_app_src_get_type(void);
+
+/* GType getter for GstAppStreamType, since 0.10.32 */
+#define GST_TYPE_APP_STREAM_TYPE (gst_app_stream_type_get_type ())
+GType gst_app_stream_type_get_type (void);
+
+void             gst_app_src_set_caps         (GstAppSrc *appsrc, const GstCaps *caps);
+GstCaps*         gst_app_src_get_caps         (GstAppSrc *appsrc);
+
+void             gst_app_src_set_size         (GstAppSrc *appsrc, gint64 size);
+gint64           gst_app_src_get_size         (GstAppSrc *appsrc);
+
+void             gst_app_src_set_stream_type  (GstAppSrc *appsrc, GstAppStreamType type);
+GstAppStreamType gst_app_src_get_stream_type  (GstAppSrc *appsrc);
+
+void             gst_app_src_set_max_bytes    (GstAppSrc *appsrc, guint64 max);
+guint64          gst_app_src_get_max_bytes    (GstAppSrc *appsrc);
+
+void             gst_app_src_set_latency      (GstAppSrc *appsrc, guint64 min, guint64 max);
+void             gst_app_src_get_latency      (GstAppSrc *appsrc, guint64 *min, guint64 *max);
+
+void             gst_app_src_set_emit_signals (GstAppSrc *appsrc, gboolean emit);
+gboolean         gst_app_src_get_emit_signals (GstAppSrc *appsrc);
+
+GstFlowReturn    gst_app_src_push_buffer      (GstAppSrc *appsrc, GstBuffer *buffer);
+GstFlowReturn    gst_app_src_end_of_stream    (GstAppSrc *appsrc);
+
+void             gst_app_src_set_callbacks    (GstAppSrc * appsrc,
+                                               GstAppSrcCallbacks *callbacks,
+                                               gpointer user_data,
+                                               GDestroyNotify notify);
+
+G_END_DECLS
+
+#endif
+
diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
new file mode 100644
index 0000000..8732064
--- /dev/null
+++ b/gst-libs/gst/audio/Makefile.am
@@ -0,0 +1,136 @@
+# variables used for enum/marshal generation
+glib_enum_headers= 		\
+	multichannel.h		\
+	gstringbuffer.h
+
+glib_enum_define = GST_AUDIO
+glib_gen_prefix = gst_audio
+glib_gen_basename = audio
+
+built_sources = audio-enumtypes.c
+built_headers = audio-enumtypes.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+
+lib_LTLIBRARIES = \
+	libgstaudio-@GST_MAJORMINOR@.la
+
+CLEANFILES = $(BUILT_SOURCES)
+
+# FIXME 0.11: rename GstBaseAudioSink to GstAudioBaseSink or merge with GstAudioSink
+libgstaudio_@GST_MAJORMINOR@_la_SOURCES = \
+	audio.c \
+	gstringbuffer.c \
+	gstaudioclock.c \
+	mixerutils.c \
+	multichannel.c \
+	gstaudiodecoder.c \
+	gstaudioencoder.c \
+	gstbaseaudiosink.c \
+	gstbaseaudiosrc.c \
+	gstaudiofilter.c \
+	gstaudiosink.c \
+	gstaudiosrc.c \
+	gstaudioiec61937.c
+nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES = $(built_sources) $(built_headers)
+
+libgstaudio_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/audio
+libgstaudio_@GST_MAJORMINOR@include_HEADERS = \
+	audio.h \
+	gstringbuffer.h \
+	gstaudioclock.h \
+	gstaudiofilter.h \
+	gstaudiodecoder.h \
+	gstaudioencoder.h \
+	gstbaseaudiosink.h \
+	gstbaseaudiosrc.h \
+	gstaudiosink.h \
+	gstaudiosrc.h \
+	mixerutils.h \
+	multichannel.h \
+	gstaudioiec61937.h
+
+nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS = \
+	audio-enumtypes.h
+
+libgstaudio_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstaudio_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) \
+  $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la
+libgstaudio_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstAudio-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstaudio_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/audio/%',$(libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+gir_cincludes+=$(patsubst %,--c-include='gst/audio/%',$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+
+GstAudio-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstAudio \
+		--nsversion=@GST_MAJORMINOR@ \
+		--warn-all \
+		--strip-prefix=Gst \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		$(gir_cincludes) \
+		--add-include-path=$(builddir)/../interfaces \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstaudio-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--include=GstInterfaces-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg gstreamer-interfaces-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-audio-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=$(builddir)/../interfaces \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudio_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudio_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstaudio_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
new file mode 100644
index 0000000..6acb19a
--- /dev/null
+++ b/gst-libs/gst/audio/Makefile.in
@@ -0,0 +1,1169 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak TODO
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/audio
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" \
+	"$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstaudio_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la
+am_libgstaudio_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstaudio_@GST_MAJORMINOR@_la-audio.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo \
+	libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo
+am__objects_1 = libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo
+am__objects_2 =
+nodist_libgstaudio_@GST_MAJORMINOR@_la_OBJECTS = $(am__objects_1) \
+	$(am__objects_2)
+libgstaudio_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstaudio_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstaudio_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstaudio_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstaudio_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstaudio_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstaudio_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# variables used for enum/marshal generation
+glib_enum_headers = \
+	multichannel.h		\
+	gstringbuffer.h
+
+glib_enum_define = GST_AUDIO
+glib_gen_prefix = gst_audio
+glib_gen_basename = audio
+built_sources = audio-enumtypes.c
+built_headers = audio-enumtypes.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+lib_LTLIBRARIES = \
+	libgstaudio-@GST_MAJORMINOR@.la
+
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+
+# FIXME 0.11: rename GstBaseAudioSink to GstAudioBaseSink or merge with GstAudioSink
+libgstaudio_@GST_MAJORMINOR@_la_SOURCES = \
+	audio.c \
+	gstringbuffer.c \
+	gstaudioclock.c \
+	mixerutils.c \
+	multichannel.c \
+	gstaudiodecoder.c \
+	gstaudioencoder.c \
+	gstbaseaudiosink.c \
+	gstbaseaudiosrc.c \
+	gstaudiofilter.c \
+	gstaudiosink.c \
+	gstaudiosrc.c \
+	gstaudioiec61937.c
+
+nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES = $(built_sources) $(built_headers)
+libgstaudio_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/audio
+libgstaudio_@GST_MAJORMINOR@include_HEADERS = \
+	audio.h \
+	gstringbuffer.h \
+	gstaudioclock.h \
+	gstaudiofilter.h \
+	gstaudiodecoder.h \
+	gstaudioencoder.h \
+	gstbaseaudiosink.h \
+	gstbaseaudiosrc.h \
+	gstaudiosink.h \
+	gstaudiosrc.h \
+	mixerutils.h \
+	multichannel.h \
+	gstaudioiec61937.h
+
+nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS = \
+	audio-enumtypes.h
+
+libgstaudio_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstaudio_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) \
+  $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la
+
+libgstaudio_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstAudio-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstaudio_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstaudio_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/audio/%',$(libgstaudio_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/audio/%',$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstaudio-@GST_MAJORMINOR@.la: $(libgstaudio_@GST_MAJORMINOR@_la_OBJECTS) $(libgstaudio_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstaudio_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstaudio_@GST_MAJORMINOR@_la_OBJECTS) $(libgstaudio_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-mixerutils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-multichannel.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstaudio_@GST_MAJORMINOR@_la-audio.lo: audio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-audio.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='audio.c' object='libgstaudio_@GST_MAJORMINOR@_la-audio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo: gstringbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo `test -f 'gstringbuffer.c' || echo '$(srcdir)/'`gstringbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstringbuffer.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstringbuffer.lo `test -f 'gstringbuffer.c' || echo '$(srcdir)/'`gstringbuffer.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo: gstaudioclock.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo `test -f 'gstaudioclock.c' || echo '$(srcdir)/'`gstaudioclock.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioclock.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioclock.lo `test -f 'gstaudioclock.c' || echo '$(srcdir)/'`gstaudioclock.c
+
+libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo: mixerutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-mixerutils.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo `test -f 'mixerutils.c' || echo '$(srcdir)/'`mixerutils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-mixerutils.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-mixerutils.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mixerutils.c' object='libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-mixerutils.lo `test -f 'mixerutils.c' || echo '$(srcdir)/'`mixerutils.c
+
+libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo: multichannel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-multichannel.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo `test -f 'multichannel.c' || echo '$(srcdir)/'`multichannel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-multichannel.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-multichannel.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='multichannel.c' object='libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-multichannel.lo `test -f 'multichannel.c' || echo '$(srcdir)/'`multichannel.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo: gstaudiodecoder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo `test -f 'gstaudiodecoder.c' || echo '$(srcdir)/'`gstaudiodecoder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiodecoder.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiodecoder.lo `test -f 'gstaudiodecoder.c' || echo '$(srcdir)/'`gstaudiodecoder.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo: gstaudioencoder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo `test -f 'gstaudioencoder.c' || echo '$(srcdir)/'`gstaudioencoder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioencoder.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioencoder.lo `test -f 'gstaudioencoder.c' || echo '$(srcdir)/'`gstaudioencoder.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo: gstbaseaudiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo `test -f 'gstbaseaudiosink.c' || echo '$(srcdir)/'`gstbaseaudiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbaseaudiosink.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosink.lo `test -f 'gstbaseaudiosink.c' || echo '$(srcdir)/'`gstbaseaudiosink.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo: gstbaseaudiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo `test -f 'gstbaseaudiosrc.c' || echo '$(srcdir)/'`gstbaseaudiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbaseaudiosrc.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstbaseaudiosrc.lo `test -f 'gstbaseaudiosrc.c' || echo '$(srcdir)/'`gstbaseaudiosrc.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo: gstaudiofilter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo `test -f 'gstaudiofilter.c' || echo '$(srcdir)/'`gstaudiofilter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiofilter.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiofilter.lo `test -f 'gstaudiofilter.c' || echo '$(srcdir)/'`gstaudiofilter.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo: gstaudiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo `test -f 'gstaudiosink.c' || echo '$(srcdir)/'`gstaudiosink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiosink.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiosink.lo `test -f 'gstaudiosink.c' || echo '$(srcdir)/'`gstaudiosink.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo: gstaudiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo `test -f 'gstaudiosrc.c' || echo '$(srcdir)/'`gstaudiosrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiosrc.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudiosrc.lo `test -f 'gstaudiosrc.c' || echo '$(srcdir)/'`gstaudiosrc.c
+
+libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo: gstaudioiec61937.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo `test -f 'gstaudioiec61937.c' || echo '$(srcdir)/'`gstaudioiec61937.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioiec61937.c' object='libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-gstaudioiec61937.lo `test -f 'gstaudioiec61937.c' || echo '$(srcdir)/'`gstaudioiec61937.c
+
+libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo: audio-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.Tpo -c -o libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo `test -f 'audio-enumtypes.c' || echo '$(srcdir)/'`audio-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.Tpo $(DEPDIR)/libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='audio-enumtypes.c' object='libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_MAJORMINOR@_la-audio-enumtypes.lo `test -f 'audio-enumtypes.c' || echo '$(srcdir)/'`audio-enumtypes.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstaudio_@GST_MAJORMINOR@includeHEADERS: $(libgstaudio_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstaudio_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstaudio_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstaudio_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstaudio_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstaudio_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstaudio_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" && rm -f $$files
+install-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS: $(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstaudio_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)"
+	@list='$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstaudio_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstaudio_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)" "$(DESTDIR)$(libgstaudio_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	install-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstaudio_@GST_MAJORMINOR@includeHEADERS install-man \
+	install-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstaudio_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstAudio-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstAudio \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--warn-all \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../interfaces \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstaudio-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstInterfaces-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-interfaces-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-audio-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../interfaces \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudio_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstaudio_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudio_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstaudio_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstaudio_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/audio/TODO b/gst-libs/gst/audio/TODO
new file mode 100644
index 0000000..887f340
--- /dev/null
+++ b/gst-libs/gst/audio/TODO
@@ -0,0 +1,15 @@
+TODO 
+----
+
+- audio base classes:
+   - GstBaseAudioSink
+      - parse caps into rinbuffer spec, also make sure surround sound
+        is parsed correctly.
+      - implement seek/query/convert
+      - implement getrange scheduling
+   - simple resampling
+   - more accurate master/slave calibration handling
+   - faster audio cutoff when going to PAUSED
+   - resubmit samples from ringbuffer when doing PAUSED->PLAYING again
+   - the ringbuffer should have a state where it is filling up the
+     buffer before going to playing.
diff --git a/gst-libs/gst/audio/audio.c b/gst-libs/gst/audio/audio.c
new file mode 100644
index 0000000..49a4878
--- /dev/null
+++ b/gst-libs/gst/audio/audio.c
@@ -0,0 +1,700 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstaudio
+ * @short_description: Support library for audio elements
+ *
+ * This library contains some helper functions for audio elements.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "audio.h"
+#include "audio-enumtypes.h"
+
+#include <gst/gststructure.h>
+
+#define SINT (GST_AUDIO_FORMAT_FLAG_INTEGER | GST_AUDIO_FORMAT_FLAG_SIGNED)
+#define UINT (GST_AUDIO_FORMAT_FLAG_INTEGER)
+
+#define MAKE_FORMAT(str,desc,flags,end,width,depth,silent) \
+  { GST_AUDIO_FORMAT_ ##str, G_STRINGIFY(str), desc, flags, end, width, depth, silent }
+
+#define SILENT_0         { 0, 0, 0, 0, 0, 0, 0, 0 }
+#define SILENT_U8        { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }
+#define SILENT_U16LE     { 0x00, 0x80,  0x00, 0x80,  0x00, 0x80,  0x00, 0x80 }
+#define SILENT_U16BE     { 0x80, 0x00,  0x80, 0x00,  0x80, 0x00,  0x80, 0x00 }
+#define SILENT_U24_32LE  { 0x00, 0x00, 0x80, 0x00,  0x00, 0x00, 0x80, 0x00 }
+#define SILENT_U24_32BE  { 0x00, 0x80, 0x00, 0x00,  0x00, 0x80, 0x00, 0x00 }
+#define SILENT_U32LE     { 0x00, 0x00, 0x00, 0x80,  0x00, 0x00, 0x00, 0x80 }
+#define SILENT_U32BE     { 0x80, 0x00, 0x00, 0x00,  0x80, 0x00, 0x00, 0x00 }
+#define SILENT_U24LE     { 0x00, 0x00, 0x80,  0x00, 0x00, 0x80 }
+#define SILENT_U24BE     { 0x80, 0x00, 0x00,  0x80, 0x00, 0x00 }
+#define SILENT_U20LE     { 0x00, 0x00, 0x08,  0x00, 0x00, 0x08 }
+#define SILENT_U20BE     { 0x08, 0x00, 0x00,  0x08, 0x00, 0x00 }
+#define SILENT_U18LE     { 0x00, 0x00, 0x02,  0x00, 0x00, 0x02 }
+#define SILENT_U18BE     { 0x02, 0x00, 0x00,  0x02, 0x00, 0x00 }
+
+static GstAudioFormatInfo formats[] = {
+  {GST_AUDIO_FORMAT_UNKNOWN, "UNKNOWN", 0, 0, 0, 0},
+  /* 8 bit */
+  MAKE_FORMAT (S8, "8-bit signed PCM audio", SINT, 0, 8, 8, SILENT_0),
+  MAKE_FORMAT (U8, "8-bit unsigned PCM audio", UINT, 0, 8, 8, SILENT_U8),
+  /* 16 bit */
+  MAKE_FORMAT (S16LE, "16-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 16, 16,
+      SILENT_0),
+  MAKE_FORMAT (S16BE, "16-bit signed PCM audio", SINT, G_BIG_ENDIAN, 16, 16,
+      SILENT_0),
+  MAKE_FORMAT (U16LE, "16-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 16,
+      16, SILENT_U16LE),
+  MAKE_FORMAT (U16BE, "16-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 16, 16,
+      SILENT_U16BE),
+  /* 24 bit in low 3 bytes of 32 bits */
+  MAKE_FORMAT (S24_32LE, "24-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 32,
+      24, SILENT_0),
+  MAKE_FORMAT (S24_32BE, "24-bit signed PCM audio", SINT, G_BIG_ENDIAN, 32, 24,
+      SILENT_0),
+  MAKE_FORMAT (U24_32LE, "24-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 32,
+      24, SILENT_U24_32LE),
+  MAKE_FORMAT (U24_32BE, "24-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 32,
+      24, SILENT_U24_32BE),
+  /* 32 bit */
+  MAKE_FORMAT (S32LE, "32-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 32, 32,
+      SILENT_0),
+  MAKE_FORMAT (S32BE, "32-bit signed PCM audio", SINT, G_BIG_ENDIAN, 32, 32,
+      SILENT_0),
+  MAKE_FORMAT (U32LE, "32-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 32,
+      32, SILENT_U32LE),
+  MAKE_FORMAT (U32BE, "32-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 32, 32,
+      SILENT_U32BE),
+  /* 24 bit in 3 bytes */
+  MAKE_FORMAT (S24LE, "24-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 24, 24,
+      SILENT_0),
+  MAKE_FORMAT (S24BE, "24-bit signed PCM audio", SINT, G_BIG_ENDIAN, 24, 24,
+      SILENT_0),
+  MAKE_FORMAT (U24LE, "24-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 24,
+      24, SILENT_U24LE),
+  MAKE_FORMAT (U24BE, "24-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 24, 24,
+      SILENT_U24BE),
+  /* 20 bit in 3 bytes */
+  MAKE_FORMAT (S20LE, "20-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 24, 20,
+      SILENT_0),
+  MAKE_FORMAT (S20BE, "20-bit signed PCM audio", SINT, G_BIG_ENDIAN, 24, 20,
+      SILENT_0),
+  MAKE_FORMAT (U20LE, "20-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 24,
+      20, SILENT_U20LE),
+  MAKE_FORMAT (U20BE, "20-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 24, 20,
+      SILENT_U20BE),
+  /* 18 bit in 3 bytes */
+  MAKE_FORMAT (S18LE, "18-bit signed PCM audio", SINT, G_LITTLE_ENDIAN, 24, 18,
+      SILENT_0),
+  MAKE_FORMAT (S18BE, "18-bit signed PCM audio", SINT, G_BIG_ENDIAN, 24, 18,
+      SILENT_0),
+  MAKE_FORMAT (U18LE, "18-bit unsigned PCM audio", UINT, G_LITTLE_ENDIAN, 24,
+      18, SILENT_U18LE),
+  MAKE_FORMAT (U18BE, "18-bit unsigned PCM audio", UINT, G_BIG_ENDIAN, 24, 18,
+      SILENT_U18BE),
+  /* float */
+  MAKE_FORMAT (F32LE, "32-bit floating-point audio",
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_LITTLE_ENDIAN, 32, 32,
+      SILENT_0),
+  MAKE_FORMAT (F32BE, "32-bit floating-point audio",
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_BIG_ENDIAN, 32, 32,
+      SILENT_0),
+  MAKE_FORMAT (F64LE, "64-bit floating-point audio",
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_LITTLE_ENDIAN, 64, 64,
+      SILENT_0),
+  MAKE_FORMAT (F64BE, "64-bit floating-point audio",
+      GST_AUDIO_FORMAT_FLAG_FLOAT, G_BIG_ENDIAN, 64, 64,
+      SILENT_0)
+};
+
+/**
+ * gst_audio_format_build_int:
+ * @sign: signed or unsigned format
+ * @endianness: G_LITTLE_ENDIAN or G_BIG_ENDIAN
+ * @width: amount of bits used per sample
+ * @depth: amount of used bits in @width
+ *
+ * Construct a #GstAudioFormat with given parameters.
+ *
+ * Returns: a #GstAudioFormat or GST_AUDIO_FORMAT_UNKNOWN when no audio format
+ * exists with the given parameters.
+ */
+GstAudioFormat
+gst_audio_format_build_integer (gboolean sign, gint endianness,
+    gint width, gint depth)
+{
+  gint i, e;
+
+  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+    GstAudioFormatInfo *finfo = &formats[i];
+
+    /* must be int */
+    if (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (finfo))
+      continue;
+    /* width and depth must match */
+    if (width != GST_AUDIO_FORMAT_INFO_WIDTH (finfo))
+      continue;
+    if (depth != GST_AUDIO_FORMAT_INFO_DEPTH (finfo))
+      continue;
+    /* if there is endianness, it must match */
+    e = GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo);
+    if (e && e != endianness)
+      continue;
+    /* check sign */
+    if (sign && !GST_AUDIO_FORMAT_INFO_IS_SIGNED (finfo))
+      continue;
+
+    return GST_AUDIO_FORMAT_INFO_FORMAT (finfo);
+  }
+  return GST_AUDIO_FORMAT_UNKNOWN;
+}
+
+/**
+ * gst_audio_format_from_string:
+ * @format: a format string
+ *
+ * Convert the @format string to its #GstAudioFormat.
+ *
+ * Returns: the #GstAudioFormat for @format or GST_AUDIO_FORMAT_UNKNOWN when the
+ * string is not a known format.
+ */
+GstAudioFormat
+gst_audio_format_from_string (const gchar * format)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+    if (strcmp (GST_AUDIO_FORMAT_INFO_NAME (&formats[i]), format) == 0)
+      return GST_AUDIO_FORMAT_INFO_FORMAT (&formats[i]);
+  }
+  return GST_AUDIO_FORMAT_UNKNOWN;
+}
+
+const gchar *
+gst_audio_format_to_string (GstAudioFormat format)
+{
+  g_return_val_if_fail (format != GST_AUDIO_FORMAT_UNKNOWN, NULL);
+
+  if (format >= G_N_ELEMENTS (formats))
+    return NULL;
+
+  return GST_AUDIO_FORMAT_INFO_NAME (&formats[format]);
+}
+
+/**
+ * gst_audio_format_get_info:
+ * @format: a #GstAudioFormat
+ *
+ * Get the #GstAudioFormatInfo for @format
+ *
+ * Returns: The #GstAudioFormatInfo for @format.
+ */
+const GstAudioFormatInfo *
+gst_audio_format_get_info (GstAudioFormat format)
+{
+  g_return_val_if_fail (format != GST_AUDIO_FORMAT_UNKNOWN, NULL);
+  g_return_val_if_fail (format < G_N_ELEMENTS (formats), NULL);
+
+  return &formats[format];
+}
+
+/**
+ * gst_audio_format_fill_silence:
+ * @info: a #GstAudioFormatInfo
+ * @dest: a destination to fill
+ * @length: the length to fill
+ *
+ * Fill @length bytes in @dest with silence samples for @info.
+ */
+void
+gst_audio_format_fill_silence (const GstAudioFormatInfo * info,
+    gpointer dest, gsize length)
+{
+  guint8 *dptr = dest;
+
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (dest != NULL);
+
+  if (info->flags & GST_AUDIO_FORMAT_FLAG_FLOAT ||
+      info->flags & GST_AUDIO_FORMAT_FLAG_SIGNED) {
+    /* float or signed always 0 */
+    memset (dest, 0, length);
+  } else {
+    gint i, j, bps = info->width >> 3;
+
+    switch (bps) {
+      case 1:
+        memset (dest, info->silence[0], length);
+        break;
+      default:
+        for (i = 0; i < length; i += bps) {
+          for (j = 0; j < bps; j++)
+            *dptr++ = info->silence[j];
+        }
+        break;
+    }
+  }
+}
+
+
+/**
+ * gst_audio_info_init:
+ * @info: a #GstAudioInfo
+ *
+ * Initialize @info with default values.
+ */
+void
+gst_audio_info_init (GstAudioInfo * info)
+{
+  g_return_if_fail (info != NULL);
+
+  memset (info, 0, sizeof (GstAudioInfo));
+}
+
+/**
+ * gst_audio_info_set_format:
+ * @info: a #GstAudioInfo
+ * @format: the format
+ * @rate: the samplerate
+ * @channels: the number of channels
+ *
+ * Set the default info for the audio info of @format and @rate and @channels.
+ */
+void
+gst_audio_info_set_format (GstAudioInfo * info, GstAudioFormat format,
+    gint rate, gint channels)
+{
+  const GstAudioFormatInfo *finfo;
+
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (format != GST_AUDIO_FORMAT_UNKNOWN);
+
+  finfo = &formats[format];
+
+  info->flags = 0;
+  info->finfo = finfo;
+  info->rate = rate;
+  info->channels = channels;
+  info->bpf = (finfo->width * channels) / 8;
+}
+
+/**
+ * gst_audio_info_from_caps:
+ * @info: a #GstAudioInfo
+ * @caps: a #GstCaps
+ *
+ * Parse @caps and update @info.
+ *
+ * Returns: TRUE if @caps could be parsed
+ */
+gboolean
+gst_audio_info_from_caps (GstAudioInfo * info, const GstCaps * caps)
+{
+  GstStructure *str;
+  const gchar *s;
+  GstAudioFormat format;
+  gint rate, channels;
+  const GValue *pos_val_arr, *pos_val_entry;
+  gint i;
+
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE);
+
+  GST_DEBUG ("parsing caps %" GST_PTR_FORMAT, caps);
+
+  str = gst_caps_get_structure (caps, 0);
+
+  if (!gst_structure_has_name (str, "audio/x-raw"))
+    goto wrong_name;
+
+  if (!(s = gst_structure_get_string (str, "format")))
+    goto no_format;
+
+  format = gst_audio_format_from_string (s);
+  if (format == GST_AUDIO_FORMAT_UNKNOWN)
+    goto unknown_format;
+
+  if (!gst_structure_get_int (str, "rate", &rate))
+    goto no_rate;
+  if (!gst_structure_get_int (str, "channels", &channels))
+    goto no_channels;
+
+  gst_audio_info_set_format (info, format, rate, channels);
+
+  pos_val_arr = gst_structure_get_value (str, "channel-positions");
+  if (pos_val_arr) {
+    guint max_pos = MAX (channels, 64);
+    for (i = 0; i < max_pos; i++) {
+      pos_val_entry = gst_value_array_get_value (pos_val_arr, i);
+      info->position[i] = g_value_get_enum (pos_val_entry);
+    }
+  } else {
+    info->flags |= GST_AUDIO_FLAG_DEFAULT_POSITIONS;
+    /* FIXME, set default positions */
+  }
+
+  return TRUE;
+
+  /* ERROR */
+wrong_name:
+  {
+    GST_ERROR ("wrong name, expected audio/x-raw");
+    return FALSE;
+  }
+no_format:
+  {
+    GST_ERROR ("no format given");
+    return FALSE;
+  }
+unknown_format:
+  {
+    GST_ERROR ("unknown format given");
+    return FALSE;
+  }
+no_rate:
+  {
+    GST_ERROR ("no rate property given");
+    return FALSE;
+  }
+no_channels:
+  {
+    GST_ERROR ("no channels property given");
+    return FALSE;
+  }
+}
+
+/**
+ * gst_audio_info_to_caps:
+ * @info: a #GstAudioInfo
+ *
+ * Convert the values of @info into a #GstCaps.
+ *
+ * Returns: (transfer full): the new #GstCaps containing the
+ *          info of @info.
+ */
+GstCaps *
+gst_audio_info_to_caps (GstAudioInfo * info)
+{
+  GstCaps *caps;
+  const gchar *format;
+
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (info->finfo != NULL, NULL);
+  g_return_val_if_fail (info->finfo->format != GST_AUDIO_FORMAT_UNKNOWN, NULL);
+
+  format = gst_audio_format_to_string (info->finfo->format);
+  g_return_val_if_fail (format != NULL, NULL);
+
+  caps = gst_caps_new_simple ("audio/x-raw",
+      "format", G_TYPE_STRING, format,
+      "rate", G_TYPE_INT, info->rate,
+      "channels", G_TYPE_INT, info->channels, NULL);
+
+  if (info->channels > 2) {
+    GValue pos_val_arr = { 0 }
+    , pos_val_entry = {
+    0};
+    gint i, max_pos;
+    GstStructure *str;
+
+    /* build gvaluearray from positions */
+    g_value_init (&pos_val_arr, GST_TYPE_ARRAY);
+    g_value_init (&pos_val_entry, GST_TYPE_AUDIO_CHANNEL_POSITION);
+    max_pos = MAX (info->channels, 64);
+    for (i = 0; i < max_pos; i++) {
+      g_value_set_enum (&pos_val_entry, info->position[i]);
+      gst_value_array_append_value (&pos_val_arr, &pos_val_entry);
+    }
+    g_value_unset (&pos_val_entry);
+
+    /* add to structure */
+    str = gst_caps_get_structure (caps, 0);
+    gst_structure_set_value (str, "channel-positions", &pos_val_arr);
+    g_value_unset (&pos_val_arr);
+  }
+
+  return caps;
+}
+
+/**
+ * gst_audio_format_convert:
+ * @info: a #GstAudioInfo
+ * @src_format: #GstFormat of the @src_value
+ * @src_value: value to convert
+ * @dest_format: #GstFormat of the @dest_value
+ * @dest_value: pointer to destination value
+ *
+ * Converts among various #GstFormat types.  This function handles
+ * GST_FORMAT_BYTES, GST_FORMAT_TIME, and GST_FORMAT_DEFAULT.  For
+ * raw audio, GST_FORMAT_DEFAULT corresponds to audio frames.  This
+ * function can be used to handle pad queries of the type GST_QUERY_CONVERT.
+ *
+ * Returns: TRUE if the conversion was successful.
+ */
+gboolean
+gst_audio_info_convert (GstAudioInfo * info,
+    GstFormat src_fmt, gint64 src_val, GstFormat dest_fmt, gint64 * dest_val)
+{
+  gboolean res = TRUE;
+  gint bpf, rate;
+
+  GST_DEBUG ("converting value %" G_GINT64_FORMAT " from %s (%d) to %s (%d)",
+      src_val, gst_format_get_name (src_fmt), src_fmt,
+      gst_format_get_name (dest_fmt), dest_fmt);
+
+  if (src_fmt == dest_fmt || src_val == -1) {
+    *dest_val = src_val;
+    goto done;
+  }
+
+  /* get important info */
+  bpf = GST_AUDIO_INFO_BPF (info);
+  rate = GST_AUDIO_INFO_RATE (info);
+
+  if (bpf == 0 || rate == 0) {
+    GST_DEBUG ("no rate or bpf configured");
+    res = FALSE;
+    goto done;
+  }
+
+  switch (src_fmt) {
+    case GST_FORMAT_BYTES:
+      switch (dest_fmt) {
+        case GST_FORMAT_TIME:
+          *dest_val = GST_FRAMES_TO_CLOCK_TIME (src_val / bpf, rate);
+          break;
+        case GST_FORMAT_DEFAULT:
+          *dest_val = src_val / bpf;
+          break;
+        default:
+          res = FALSE;
+          break;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (dest_fmt) {
+        case GST_FORMAT_TIME:
+          *dest_val = GST_FRAMES_TO_CLOCK_TIME (src_val, rate);
+          break;
+        case GST_FORMAT_BYTES:
+          *dest_val = src_val * bpf;
+          break;
+        default:
+          res = FALSE;
+          break;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (dest_fmt) {
+        case GST_FORMAT_DEFAULT:
+          *dest_val = GST_CLOCK_TIME_TO_FRAMES (src_val, rate);
+          break;
+        case GST_FORMAT_BYTES:
+          *dest_val = GST_CLOCK_TIME_TO_FRAMES (src_val, rate);
+          *dest_val *= bpf;
+          break;
+        default:
+          res = FALSE;
+          break;
+      }
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+done:
+  GST_DEBUG ("ret=%d result %" G_GINT64_FORMAT, res, *dest_val);
+
+  return res;
+}
+
+/**
+ * gst_audio_buffer_clip:
+ * @buffer: The buffer to clip.
+ * @segment: Segment in %GST_FORMAT_TIME or %GST_FORMAT_DEFAULT to which
+ *           the buffer should be clipped.
+ * @rate: sample rate.
+ * @bpf: size of one audio frame in bytes. This is the size of one sample
+ * * channels.
+ *
+ * Clip the the buffer to the given %GstSegment.
+ *
+ * After calling this function the caller does not own a reference to
+ * @buffer anymore.
+ *
+ * Returns: %NULL if the buffer is completely outside the configured segment,
+ * otherwise the clipped buffer is returned.
+ *
+ * If the buffer has no timestamp, it is assumed to be inside the segment and
+ * is not clipped
+ *
+ * Since: 0.10.14
+ */
+GstBuffer *
+gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
+    gint bpf)
+{
+  GstBuffer *ret;
+  GstClockTime timestamp = GST_CLOCK_TIME_NONE, duration = GST_CLOCK_TIME_NONE;
+  guint64 offset = GST_BUFFER_OFFSET_NONE, offset_end = GST_BUFFER_OFFSET_NONE;
+  gsize trim, size;
+  gboolean change_duration = TRUE, change_offset = TRUE, change_offset_end =
+      TRUE;
+
+  g_return_val_if_fail (segment->format == GST_FORMAT_TIME ||
+      segment->format == GST_FORMAT_DEFAULT, buffer);
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
+
+  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
+    /* No timestamp - assume the buffer is completely in the segment */
+    return buffer;
+
+  /* Get copies of the buffer metadata to change later. 
+   * Calculate the missing values for the calculations,
+   * they won't be changed later though. */
+
+  trim = 0;
+  size = gst_buffer_get_size (buffer);
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  GST_DEBUG ("timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp));
+  if (GST_BUFFER_DURATION_IS_VALID (buffer)) {
+    duration = GST_BUFFER_DURATION (buffer);
+  } else {
+    change_duration = FALSE;
+    duration = gst_util_uint64_scale (size / bpf, GST_SECOND, rate);
+  }
+
+  if (GST_BUFFER_OFFSET_IS_VALID (buffer)) {
+    offset = GST_BUFFER_OFFSET (buffer);
+  } else {
+    change_offset = FALSE;
+    offset = 0;
+  }
+
+  if (GST_BUFFER_OFFSET_END_IS_VALID (buffer)) {
+    offset_end = GST_BUFFER_OFFSET_END (buffer);
+  } else {
+    change_offset_end = FALSE;
+    offset_end = offset + size / bpf;
+  }
+
+  if (segment->format == GST_FORMAT_TIME) {
+    /* Handle clipping for GST_FORMAT_TIME */
+
+    guint64 start, stop, cstart, cstop, diff;
+
+    start = timestamp;
+    stop = timestamp + duration;
+
+    if (gst_segment_clip (segment, GST_FORMAT_TIME,
+            start, stop, &cstart, &cstop)) {
+
+      diff = cstart - start;
+      if (diff > 0) {
+        timestamp = cstart;
+
+        if (change_duration)
+          duration -= diff;
+
+        diff = gst_util_uint64_scale (diff, rate, GST_SECOND);
+        if (change_offset)
+          offset += diff;
+        trim += diff * bpf;
+        size -= diff * bpf;
+      }
+
+      diff = stop - cstop;
+      if (diff > 0) {
+        /* duration is always valid if stop is valid */
+        duration -= diff;
+
+        diff = gst_util_uint64_scale (diff, rate, GST_SECOND);
+        if (change_offset_end)
+          offset_end -= diff;
+        size -= diff * bpf;
+      }
+    } else {
+      gst_buffer_unref (buffer);
+      return NULL;
+    }
+  } else {
+    /* Handle clipping for GST_FORMAT_DEFAULT */
+    guint64 start, stop, cstart, cstop, diff;
+
+    g_return_val_if_fail (GST_BUFFER_OFFSET_IS_VALID (buffer), buffer);
+
+    start = offset;
+    stop = offset_end;
+
+    if (gst_segment_clip (segment, GST_FORMAT_DEFAULT,
+            start, stop, &cstart, &cstop)) {
+
+      diff = cstart - start;
+      if (diff > 0) {
+        offset = cstart;
+
+        timestamp = gst_util_uint64_scale (cstart, GST_SECOND, rate);
+
+        if (change_duration)
+          duration -= gst_util_uint64_scale (diff, GST_SECOND, rate);
+
+        trim += diff * bpf;
+        size -= diff * bpf;
+      }
+
+      diff = stop - cstop;
+      if (diff > 0) {
+        offset_end = cstop;
+
+        if (change_duration)
+          duration -= gst_util_uint64_scale (diff, GST_SECOND, rate);
+
+        size -= diff * bpf;
+      }
+    } else {
+      gst_buffer_unref (buffer);
+      return NULL;
+    }
+  }
+
+  /* Get a writable buffer and apply all changes */
+  GST_DEBUG ("trim %" G_GSIZE_FORMAT " size %" G_GSIZE_FORMAT, trim, size);
+  ret = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, trim, size);
+  gst_buffer_unref (buffer);
+
+  GST_DEBUG ("timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp));
+  GST_BUFFER_TIMESTAMP (ret) = timestamp;
+
+  if (change_duration)
+    GST_BUFFER_DURATION (ret) = duration;
+  if (change_offset)
+    GST_BUFFER_OFFSET (ret) = offset;
+  if (change_offset_end)
+    GST_BUFFER_OFFSET_END (ret) = offset_end;
+
+  return ret;
+}
diff --git a/gst-libs/gst/audio/audio.h b/gst-libs/gst/audio/audio.h
new file mode 100644
index 0000000..1c8287b
--- /dev/null
+++ b/gst-libs/gst/audio/audio.h
@@ -0,0 +1,405 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Library       <2001> Thomas Vander Stichele <thomas@apestaart.org>
+ *               <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+
+#ifndef __GST_AUDIO_AUDIO_H__
+#define __GST_AUDIO_AUDIO_H__
+
+#include <gst/audio/multichannel.h>
+
+G_BEGIN_DECLS
+
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE
+#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE
+#endif
+
+/**
+ * GstAudioFormat:
+ * @GST_AUDIO_FORMAT_UNKNOWN: unknown audio format
+ * @GST_AUDIO_FORMAT_S8: 8 bits in 8 bits, signed
+ * @GST_AUDIO_FORMAT_U8: 8 bits in 8 bits, unsigned
+ * @GST_AUDIO_FORMAT_S16LE: 16 bits in 16 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S16BE: 16 bits in 16 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U16LE: 16 bits in 16 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U16BE: 16 bits in 16 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_S24_32LE: 24 bits in 32 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S24_32BE: 24 bits in 32 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U24_32LE: 24 bits in 32 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U24_32BE: 24 bits in 32 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_S32LE: 32 bits in 32 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S32BE: 32 bits in 32 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U32LE: 32 bits in 32 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U32BE: 32 bits in 32 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_S24LE: 24 bits in 24 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S24BE: 24 bits in 24 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U24LE: 24 bits in 24 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U24BE: 24 bits in 24 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_S20LE: 20 bits in 24 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S20BE: 20 bits in 24 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U20LE: 20 bits in 24 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U20BE: 20 bits in 24 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_S18LE: 18 bits in 24 bits, signed, little endian
+ * @GST_AUDIO_FORMAT_S18BE: 18 bits in 24 bits, signed, big endian
+ * @GST_AUDIO_FORMAT_U18LE: 18 bits in 24 bits, unsigned, little endian
+ * @GST_AUDIO_FORMAT_U18BE: 18 bits in 24 bits, unsigned, big endian
+ * @GST_AUDIO_FORMAT_F32LE: 32-bit floating point samples, little endian
+ * @GST_AUDIO_FORMAT_F32BE: 32-bit floating point samples, big endian
+ * @GST_AUDIO_FORMAT_F64LE: 64-bit floating point samples, little endian
+ * @GST_AUDIO_FORMAT_F64BE: 64-bit floating point samples, big endian
+ * @GST_AUDIO_FORMAT_S16: 16 bits in 16 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U16: 16 bits in 16 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_S24_32: 24 bits in 32 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U24_32: 24 bits in 32 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_S32: 32 bits in 32 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U32: 32 bits in 32 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_S24: 24 bits in 24 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U24: 24 bits in 24 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_S20: 20 bits in 24 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U20: 20 bits in 24 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_S18: 18 bits in 24 bits, signed, native endianness
+ * @GST_AUDIO_FORMAT_U18: 18 bits in 24 bits, unsigned, native endianness
+ * @GST_AUDIO_FORMAT_F32: 32-bit floating point samples, native endianness
+ * @GST_AUDIO_FORMAT_F64: 64-bit floating point samples, native endianness
+ *
+ * Enum value describing the most common audio formats.
+ */
+typedef enum {
+  GST_AUDIO_FORMAT_UNKNOWN,
+  /* 8 bit */
+  GST_AUDIO_FORMAT_S8,
+  GST_AUDIO_FORMAT_U8,
+  /* 16 bit */
+  GST_AUDIO_FORMAT_S16LE,
+  GST_AUDIO_FORMAT_S16BE,
+  GST_AUDIO_FORMAT_U16LE,
+  GST_AUDIO_FORMAT_U16BE,
+  /* 24 bit in low 3 bytes of 32 bits*/
+  GST_AUDIO_FORMAT_S24_32LE,
+  GST_AUDIO_FORMAT_S24_32BE,
+  GST_AUDIO_FORMAT_U24_32LE,
+  GST_AUDIO_FORMAT_U24_32BE,
+  /* 32 bit */
+  GST_AUDIO_FORMAT_S32LE,
+  GST_AUDIO_FORMAT_S32BE,
+  GST_AUDIO_FORMAT_U32LE,
+  GST_AUDIO_FORMAT_U32BE,
+  /* 24 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S24LE,
+  GST_AUDIO_FORMAT_S24BE,
+  GST_AUDIO_FORMAT_U24LE,
+  GST_AUDIO_FORMAT_U24BE,
+  /* 20 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S20LE,
+  GST_AUDIO_FORMAT_S20BE,
+  GST_AUDIO_FORMAT_U20LE,
+  GST_AUDIO_FORMAT_U20BE,
+  /* 18 bit in 3 bytes*/
+  GST_AUDIO_FORMAT_S18LE,
+  GST_AUDIO_FORMAT_S18BE,
+  GST_AUDIO_FORMAT_U18LE,
+  GST_AUDIO_FORMAT_U18BE,
+  /* float */
+  GST_AUDIO_FORMAT_F32LE,
+  GST_AUDIO_FORMAT_F32BE,
+  GST_AUDIO_FORMAT_F64LE,
+  GST_AUDIO_FORMAT_F64BE,
+  /* native endianness equivalents */
+  GST_AUDIO_FORMAT_S16 = _GST_AUDIO_FORMAT_NE(S16),
+  GST_AUDIO_FORMAT_U16 = _GST_AUDIO_FORMAT_NE(U16),
+  GST_AUDIO_FORMAT_S24_32 = _GST_AUDIO_FORMAT_NE(S24_32),
+  GST_AUDIO_FORMAT_U24_32 = _GST_AUDIO_FORMAT_NE(U24_32),
+  GST_AUDIO_FORMAT_S32 = _GST_AUDIO_FORMAT_NE(S32),
+  GST_AUDIO_FORMAT_U32 = _GST_AUDIO_FORMAT_NE(U32),
+  GST_AUDIO_FORMAT_S24 = _GST_AUDIO_FORMAT_NE(S24),
+  GST_AUDIO_FORMAT_U24 = _GST_AUDIO_FORMAT_NE(U24),
+  GST_AUDIO_FORMAT_S20 = _GST_AUDIO_FORMAT_NE(S20),
+  GST_AUDIO_FORMAT_U20 = _GST_AUDIO_FORMAT_NE(U20),
+  GST_AUDIO_FORMAT_S18 = _GST_AUDIO_FORMAT_NE(S18),
+  GST_AUDIO_FORMAT_U18 = _GST_AUDIO_FORMAT_NE(U18),
+  GST_AUDIO_FORMAT_F32 = _GST_AUDIO_FORMAT_NE(F32),
+  GST_AUDIO_FORMAT_F64 = _GST_AUDIO_FORMAT_NE(F64)
+} GstAudioFormat;
+
+/* FIXME: need GTypes */
+typedef struct _GstAudioFormatInfo GstAudioFormatInfo;
+typedef struct _GstAudioInfo GstAudioInfo;
+
+/**
+ * GstAudioFormatFlags:
+ * @GST_AUDIO_FORMAT_FLAG_INTEGER: integer samples
+ * @GST_AUDIO_FORMAT_FLAG_FLOAT: float samples
+ * @GST_AUDIO_FORMAT_FLAG_SIGNED: signed samples
+ * @GST_AUDIO_FORMAT_FLAG_COMPLEX: complex layout
+ *
+ * The different audio flags that a format info can have.
+ */
+typedef enum
+{
+  GST_AUDIO_FORMAT_FLAG_INTEGER  = (1 << 0),
+  GST_AUDIO_FORMAT_FLAG_FLOAT    = (1 << 1),
+  GST_AUDIO_FORMAT_FLAG_SIGNED   = (1 << 2),
+  GST_AUDIO_FORMAT_FLAG_COMPLEX  = (1 << 4)
+} GstAudioFormatFlags;
+
+/**
+ * GstAudioFormatUnpack:
+ * @info: a #GstAudioFormatInfo
+ * @dest: a destination array
+ * @data: pointer to the audio data
+ * @length: the amount of samples to unpack.
+ *
+ * Unpacks @length samples from the given data of format @info.
+ * The samples will be unpacked into @dest which each channel
+ * interleaved. @dest should at least be big enough to hold @length *
+ * channels * size(unpack_format) bytes.
+ */
+typedef void (*GstAudioFormatUnpack)         (GstAudioFormatInfo *info, gpointer dest,
+                                              const gpointer data, gint length);
+/**
+ * GstAudioFormatPack:
+ * @info: a #GstAudioFormatInfo
+ * @src: a source array
+ * @data: pointer to the destination data
+ * @length: the amount of samples to pack.
+ *
+ * Packs @length samples from @src to the data array in format @info.
+ * The samples from source have each channel interleaved
+ * and will be packed into @data.
+ */
+typedef void (*GstAudioFormatPack)           (GstAudioFormatInfo *info, const gpointer src,
+                                              gpointer data, gint length);
+
+/**
+ * GstAudioFormatInfo:
+ * @format: #GstAudioFormat
+ * @name: string representation of the format
+ * @description: user readable description of the format
+ * @flags: #GstAudioFormatFlags
+ * @endianness: the endianness
+ * @width: amount of bits used for one sample
+ * @depth: amount of valid bits in @width
+ * @silence: @width/8 bytes with 1 silent sample
+ * @unpack_format: the format of the unpacked samples
+ * @unpack_func: function to unpack samples
+ * @pack_func: function to pack samples
+ *
+ * Information for an audio format.
+ */
+struct _GstAudioFormatInfo {
+  GstAudioFormat format;
+  const gchar *name;
+  const gchar *description;
+  GstAudioFormatFlags flags;
+  gint endianness;
+  gint width;
+  gint depth;
+  guint8 silence[8];
+
+  GstAudioFormat unpack_format;
+  GstAudioFormatUnpack unpack_func;
+  GstAudioFormatPack pack_func;
+};
+
+#define GST_AUDIO_FORMAT_INFO_FORMAT(info)           ((info)->format)
+#define GST_AUDIO_FORMAT_INFO_NAME(info)             ((info)->name)
+#define GST_AUDIO_FORMAT_INFO_FLAGS(info)            ((info)->flags)
+
+#define GST_AUDIO_FORMAT_INFO_IS_INTEGER(info)       !!((info)->flags & GST_AUDIO_FORMAT_FLAG_INTEGER)
+#define GST_AUDIO_FORMAT_INFO_IS_FLOAT(info)         !!((info)->flags & GST_AUDIO_FORMAT_FLAG_FLOAT)
+#define GST_AUDIO_FORMAT_INFO_IS_SIGNED(info)        !!((info)->flags & GST_AUDIO_FORMAT_FLAG_SIGNED)
+
+#define GST_AUDIO_FORMAT_INFO_ENDIANNESS(info)       ((info)->endianness)
+#define GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN(info) ((info)->endianness == G_LITTLE_ENDIAN)
+#define GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN(info)    ((info)->endianness == G_BIG_ENDIAN)
+#define GST_AUDIO_FORMAT_INFO_WIDTH(info)            ((info)->width)
+#define GST_AUDIO_FORMAT_INFO_DEPTH(info)            ((info)->depth)
+
+
+GstAudioFormat gst_audio_format_build_integer    (gboolean sign, gint endianness,
+                                                  gint width, gint depth) G_GNUC_CONST;
+
+GstAudioFormat gst_audio_format_from_string      (const gchar *format) G_GNUC_CONST;
+const gchar *  gst_audio_format_to_string        (GstAudioFormat format) G_GNUC_CONST;
+
+const GstAudioFormatInfo *
+               gst_audio_format_get_info         (GstAudioFormat format) G_GNUC_CONST;
+
+void           gst_audio_format_fill_silence     (const GstAudioFormatInfo *info,
+                                                  gpointer dest, gsize length);
+/**
+ * GstAudioFlags:
+ * @GST_AUDIO_FLAG_NONE: no valid flag
+ * @GST_AUDIO_FLAG_DEFAULT_POSITIONS: position array
+ *     contains the default layout for the number of channels.
+ *
+ * Extra audio flags
+ */
+typedef enum {
+  GST_AUDIO_FLAG_NONE              = 0,
+  GST_AUDIO_FLAG_DEFAULT_POSITIONS = (1 << 0)
+} GstAudioFlags;
+
+/**
+ * GstAudioInfo:
+ * @finfo: the format info of the audio
+ * @flags: additional audio flags
+ * @rate: the audio sample rate
+ * @channels: the number of channels
+ * @bpf: the number of bytes for one frame, this is the size of one
+ *         sample * @channels
+ * @position: the positions for each channel
+ *
+ * Information describing audio properties. This information can be filled
+ * in from GstCaps with gst_audio_info_from_caps().
+ *
+ * Use the provided macros to access the info in this structure.
+ */
+struct _GstAudioInfo {
+  const GstAudioFormatInfo *finfo;
+  GstAudioFlags             flags;
+  gint                      rate;
+  gint                      channels;
+  gint                      bpf;
+  GstAudioChannelPosition   position[64];
+};
+
+#define GST_AUDIO_INFO_FORMAT(i)             (GST_AUDIO_FORMAT_INFO_FORMAT((i)->finfo))
+#define GST_AUDIO_INFO_NAME(i)               (GST_AUDIO_FORMAT_INFO_NAME((i)->finfo))
+#define GST_AUDIO_INFO_WIDTH(i)              (GST_AUDIO_FORMAT_INFO_WIDTH((i)->finfo))
+#define GST_AUDIO_INFO_DEPTH(i)              (GST_AUDIO_FORMAT_INFO_DEPTH((i)->finfo))
+#define GST_AUDIO_INFO_BPS(info)             (GST_AUDIO_INFO_DEPTH(info) >> 3)
+
+#define GST_AUDIO_INFO_IS_INTEGER(i)         (GST_AUDIO_FORMAT_INFO_IS_INTEGER((i)->finfo))
+#define GST_AUDIO_INFO_IS_FLOAT(i)           (GST_AUDIO_FORMAT_INFO_IS_FLOAT((i)->finfo))
+#define GST_AUDIO_INFO_IS_SIGNED(i)          (GST_AUDIO_FORMAT_INFO_IS_SIGNED((i)->finfo))
+
+#define GST_AUDIO_INFO_ENDIANNESS(i)         (GST_AUDIO_FORMAT_INFO_ENDIANNES((i)->finfo))
+#define GST_AUDIO_INFO_IS_LITTLE_ENDIAN(i)   (GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN((i)->finfo))
+#define GST_AUDIO_INFO_IS_BIG_ENDIAN(i)      (GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN((i)->finfo))
+
+#define GST_AUDIO_INFO_FLAGS(info)           ((info)->flags)
+#define GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS(info) ((info)->flags & GST_AUDIO_FLAG_DEFAULT_POSITIONS)
+
+#define GST_AUDIO_INFO_RATE(info)            ((info)->rate)
+#define GST_AUDIO_INFO_CHANNELS(info)        ((info)->channels)
+#define GST_AUDIO_INFO_BPF(info)             ((info)->bpf)
+#define GST_AUDIO_INFO_POSITION(info,c)      ((info)->position[c])
+
+void         gst_audio_info_init        (GstAudioInfo *info);
+void         gst_audio_info_set_format  (GstAudioInfo *info, GstAudioFormat format,
+                                         gint rate, gint channels);
+
+gboolean     gst_audio_info_from_caps   (GstAudioInfo *info, const GstCaps *caps);
+GstCaps *    gst_audio_info_to_caps     (GstAudioInfo *info);
+
+gboolean     gst_audio_info_convert     (GstAudioInfo * info,
+                                         GstFormat src_fmt, gint64 src_val,
+                                         GstFormat dest_fmt, gint64 * dest_val);
+
+
+
+#define GST_AUDIO_RATE_RANGE "(int) [ 1, max ]"
+#define GST_AUDIO_CHANNELS_RANGE "(int) [ 1, max ]"
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+# define GST_AUDIO_NE(s) G_STRINGIFY(s)"LE"
+# define GST_AUDIO_OE(s) G_STRINGIFY(s)"BE"
+#else
+# define GST_AUDIO_NE(s) G_STRINGIFY(s)"BE"
+# define GST_AUDIO_OE(s) G_STRINGIFY(s)"LE"
+#endif
+
+#define GST_AUDIO_FORMATS_ALL " { S8, U8, " \
+    "S16LE, S16BE, U16LE, U16BE, " \
+    "S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \
+    "S32LE, S32BE, U32LE, U32BE, " \
+    "S24LE, S24BE, U24LE, U24BE, " \
+    "S20LE, S20BE, U20LE, U20BE, " \
+    "S18LE, S18BE, U18LE, U18BE, " \
+    "F32LE, F32BE, F64LE, F64BE }"
+
+/**
+ * GST_AUDIO_CAPS_MAKE:
+ * @format: string format that describes the pixel layout, as string
+ *     (e.g. "S16LE", "S8", etc.)
+ *
+ * Generic caps string for audio, for use in pad templates.
+ */
+#define GST_AUDIO_CAPS_MAKE(format)                                    \
+    "audio/x-raw, "                                                    \
+    "format = (string) " format ", "                                   \
+    "rate = " GST_AUDIO_RATE_RANGE ", "                                \
+    "channels = " GST_AUDIO_CHANNELS_RANGE
+
+/**
+ * GST_AUDIO_DEF_RATE:
+ *
+ * Standard sampling rate used in consumer audio.
+ */
+#define GST_AUDIO_DEF_RATE 44100
+/**
+ * GST_AUDIO_DEF_CHANNELS:
+ *
+ * Standard number of channels used in consumer audio.
+ */
+#define GST_AUDIO_DEF_CHANNELS 2
+/**
+ * GST_AUDIO_DEF_FORMAT:
+ *
+ * Standard format used in consumer audio.
+ */
+#define GST_AUDIO_DEF_FORMAT "S16LE"
+
+/* conversion macros */
+/**
+ * GST_FRAMES_TO_CLOCK_TIME:
+ * @frames: sample frames
+ * @rate: sampling rate
+ *
+ * Calculate clocktime from sample @frames and @rate.
+ */
+#define GST_FRAMES_TO_CLOCK_TIME(frames, rate) \
+  ((GstClockTime) gst_util_uint64_scale_round (frames, GST_SECOND, rate))
+
+/**
+ * GST_CLOCK_TIME_TO_FRAMES:
+ * @clocktime: clock time
+ * @rate: sampling rate
+ *
+ * Calculate frames from @clocktime and sample @rate.
+ */
+#define GST_CLOCK_TIME_TO_FRAMES(clocktime, rate) \
+  gst_util_uint64_scale_round (clocktime, rate, GST_SECOND)
+
+/*
+ * this library defines and implements some helper functions for audio
+ * handling
+ */
+
+GstBuffer *    gst_audio_buffer_clip     (GstBuffer *buffer, GstSegment *segment,
+                                          gint rate, gint bpf);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_AUDIO_H__ */
diff --git a/gst-libs/gst/audio/gstaudioclock.c b/gst-libs/gst/audio/gstaudioclock.c
new file mode 100644
index 0000000..44879e3
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioclock.c
@@ -0,0 +1,314 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *
+ * audioclock.c: Clock for use by audio plugins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudioclock
+ * @short_description: Helper object for implementing audio clocks
+ * @see_also: #GstBaseAudioSink, #GstSystemClock
+ *
+ * #GstAudioClock makes it easy for elements to implement a #GstClock, they
+ * simply need to provide a function that returns the current clock time.
+ *
+ * This object is internally used to implement the clock in #GstBaseAudioSink.
+ *
+ * Last reviewed on 2006-09-27 (0.10.12)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstaudioclock.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_audio_clock_debug);
+#define GST_CAT_DEFAULT gst_audio_clock_debug
+
+static void gst_audio_clock_class_init (GstAudioClockClass * klass);
+static void gst_audio_clock_init (GstAudioClock * clock);
+
+static void gst_audio_clock_dispose (GObject * object);
+
+static GstClockTime gst_audio_clock_get_internal_time (GstClock * clock);
+
+static GstSystemClockClass *parent_class = NULL;
+
+/* static guint gst_audio_clock_signals[LAST_SIGNAL] = { 0 }; */
+
+GType
+gst_audio_clock_get_type (void)
+{
+  static volatile gsize clock_type = 0;
+  static const GTypeInfo clock_info = {
+    sizeof (GstAudioClockClass),
+    NULL,
+    NULL,
+    (GClassInitFunc) gst_audio_clock_class_init,
+    NULL,
+    NULL,
+    sizeof (GstAudioClock),
+    4,
+    (GInstanceInitFunc) gst_audio_clock_init,
+    NULL
+  };
+
+  if (g_once_init_enter (&clock_type)) {
+    GType tmp = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstAudioClock",
+        &clock_info, 0);
+    g_once_init_leave (&clock_type, tmp);
+  }
+
+  return (GType) clock_type;
+}
+
+static void
+gst_audio_clock_class_init (GstAudioClockClass * klass)
+{
+  GstClockClass *gstclock_class;
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstclock_class = (GstClockClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->dispose = gst_audio_clock_dispose;
+  gstclock_class->get_internal_time = gst_audio_clock_get_internal_time;
+
+  GST_DEBUG_CATEGORY_INIT (gst_audio_clock_debug, "audioclock", 0,
+      "audioclock");
+}
+
+static void
+gst_audio_clock_init (GstAudioClock * clock)
+{
+  GST_DEBUG_OBJECT (clock, "init");
+  clock->last_time = 0;
+  clock->time_offset = 0;
+  GST_OBJECT_FLAG_SET (clock, GST_CLOCK_FLAG_CAN_SET_MASTER);
+}
+
+static void
+gst_audio_clock_dispose (GObject * object)
+{
+  GstAudioClock *clock = GST_AUDIO_CLOCK (object);
+
+  if (clock->destroy_notify && clock->user_data)
+    clock->destroy_notify (clock->user_data);
+  clock->destroy_notify = NULL;
+  clock->user_data = NULL;
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+/**
+ * gst_audio_clock_new:
+ * @name: the name of the clock
+ * @func: a function
+ * @user_data: user data
+ *
+ * Create a new #GstAudioClock instance. Whenever the clock time should be
+ * calculated it will call @func with @user_data. When @func returns
+ * #GST_CLOCK_TIME_NONE, the clock will return the last reported time.
+ *
+ * Returns: a new #GstAudioClock casted to a #GstClock.
+ */
+GstClock *
+gst_audio_clock_new (const gchar * name, GstAudioClockGetTimeFunc func,
+    gpointer user_data)
+{
+  GstAudioClock *aclock =
+      GST_AUDIO_CLOCK (g_object_new (GST_TYPE_AUDIO_CLOCK, "name", name, NULL));
+
+  aclock->func = func;
+  aclock->user_data = user_data;
+
+  return (GstClock *) aclock;
+}
+
+/**
+ * gst_audio_clock_new_full:
+ * @name: the name of the clock
+ * @func: a function
+ * @user_data: user data
+ * @destroy_notify: #GDestroyNotify for @user_data
+ *
+ * Create a new #GstAudioClock instance. Whenever the clock time should be
+ * calculated it will call @func with @user_data. When @func returns
+ * #GST_CLOCK_TIME_NONE, the clock will return the last reported time.
+ *
+ * Returns: a new #GstAudioClock casted to a #GstClock.
+ *
+ * Since: 0.10.31
+ */
+GstClock *
+gst_audio_clock_new_full (const gchar * name, GstAudioClockGetTimeFunc func,
+    gpointer user_data, GDestroyNotify destroy_notify)
+{
+  GstAudioClock *aclock =
+      GST_AUDIO_CLOCK (g_object_new (GST_TYPE_AUDIO_CLOCK, "name", name, NULL));
+
+  aclock->func = func;
+  aclock->user_data = user_data;
+  aclock->destroy_notify = destroy_notify;
+
+  return (GstClock *) aclock;
+}
+
+/**
+ * gst_audio_clock_reset:
+ * @clock: a #GstAudioClock
+ * @time: a #GstClockTime
+ *
+ * Inform @clock that future calls to #GstAudioClockGetTimeFunc will return values
+ * starting from @time. The clock will update an internal offset to make sure that
+ * future calls to internal_time will return an increasing result as required by
+ * the #GstClock object.
+ */
+void
+gst_audio_clock_reset (GstAudioClock * clock, GstClockTime time)
+{
+  GstClockTimeDiff time_offset;
+
+  if (clock->last_time >= time)
+    time_offset = clock->last_time - time;
+  else
+    time_offset = -(time - clock->last_time);
+
+  clock->time_offset = time_offset;
+
+  GST_DEBUG_OBJECT (clock,
+      "reset clock to %" GST_TIME_FORMAT ", last %" GST_TIME_FORMAT ", offset %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (clock->last_time),
+      GST_TIME_ARGS (time_offset));
+}
+
+static GstClockTime
+gst_audio_clock_func_invalid (GstClock * clock, gpointer user_data)
+{
+  return GST_CLOCK_TIME_NONE;
+}
+
+static GstClockTime
+gst_audio_clock_get_internal_time (GstClock * clock)
+{
+  GstAudioClock *aclock;
+  GstClockTime result;
+
+  aclock = GST_AUDIO_CLOCK_CAST (clock);
+
+  result = aclock->func (clock, aclock->user_data);
+  if (result == GST_CLOCK_TIME_NONE) {
+    result = aclock->last_time;
+  } else {
+    result += aclock->time_offset;
+    /* clock must be increasing */
+    if (aclock->last_time < result)
+      aclock->last_time = result;
+    else
+      result = aclock->last_time;
+  }
+
+  GST_DEBUG_OBJECT (clock,
+      "result %" GST_TIME_FORMAT ", last_time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (result), GST_TIME_ARGS (aclock->last_time));
+
+  return result;
+}
+
+/**
+ * gst_audio_clock_get_time:
+ * @clock: a #GstAudioClock
+ *
+ * Report the time as returned by the #GstAudioClockGetTimeFunc without applying
+ * any offsets.
+ *
+ * Returns: the time as reported by the time function of the audio clock
+ *
+ * Since: 0.10.23
+ */
+GstClockTime
+gst_audio_clock_get_time (GstClock * clock)
+{
+  GstAudioClock *aclock;
+  GstClockTime result;
+
+  aclock = GST_AUDIO_CLOCK_CAST (clock);
+
+  result = aclock->func (clock, aclock->user_data);
+  if (result == GST_CLOCK_TIME_NONE) {
+    GST_DEBUG_OBJECT (clock, "no time, reuse last");
+    result = aclock->last_time - aclock->time_offset;
+  }
+
+  GST_DEBUG_OBJECT (clock,
+      "result %" GST_TIME_FORMAT ", last_time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (result), GST_TIME_ARGS (aclock->last_time));
+
+  return result;
+}
+
+/**
+ * gst_audio_clock_adjust:
+ * @clock: a #GstAudioClock
+ * @time: a #GstClockTime
+ *
+ * Adjust @time with the internal offset of the audio clock.
+ *
+ * Returns: @time adjusted with the internal offset.
+ *
+ * Since: 0.10.23
+ */
+GstClockTime
+gst_audio_clock_adjust (GstClock * clock, GstClockTime time)
+{
+  GstAudioClock *aclock;
+  GstClockTime result;
+
+  aclock = GST_AUDIO_CLOCK_CAST (clock);
+
+  result = time + aclock->time_offset;
+
+  return result;
+}
+
+/**
+ * gst_audio_clock_invalidate:
+ * @clock: a #GstAudioClock
+ *
+ * Invalidate the clock function. Call this function when the provided
+ * #GstAudioClockGetTimeFunc cannot be called anymore, for example, when the
+ * user_data becomes invalid.
+ *
+ * After calling this function, @clock will return the last returned time for
+ * the rest of its lifetime.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_audio_clock_invalidate (GstClock * clock)
+{
+  GstAudioClock *aclock;
+
+  aclock = GST_AUDIO_CLOCK_CAST (clock);
+
+  aclock->func = gst_audio_clock_func_invalid;
+}
diff --git a/gst-libs/gst/audio/gstaudioclock.h b/gst-libs/gst/audio/gstaudioclock.h
new file mode 100644
index 0000000..cd96dc0
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioclock.h
@@ -0,0 +1,102 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstaudioclock.h: Clock for use by audio plugins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_CLOCK_H__
+#define __GST_AUDIO_CLOCK_H__
+
+#include <gst/gst.h>
+#include <gst/gstsystemclock.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_CLOCK \
+  (gst_audio_clock_get_type())
+#define GST_AUDIO_CLOCK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CLOCK,GstAudioClock))
+#define GST_AUDIO_CLOCK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CLOCK,GstAudioClockClass))
+#define GST_IS_AUDIO_CLOCK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_CLOCK))
+#define GST_IS_AUDIO_CLOCK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_CLOCK))
+#define GST_AUDIO_CLOCK_CAST(obj) \
+  ((GstAudioClock*)(obj))
+
+typedef struct _GstAudioClock GstAudioClock;
+typedef struct _GstAudioClockClass GstAudioClockClass;
+
+/**
+ * GstAudioClockGetTimeFunc:
+ * @clock: the #GstAudioClock
+ * @user_data: user data
+ *
+ * This function will be called whenever the current clock time needs to be
+ * calculated. If this function returns #GST_CLOCK_TIME_NONE, the last reported
+ * time will be returned by the clock.
+ *
+ * Returns: the current time or #GST_CLOCK_TIME_NONE if the previous time should
+ * be used.
+ */
+typedef GstClockTime (*GstAudioClockGetTimeFunc) (GstClock *clock, gpointer user_data);
+
+/**
+ * GstAudioClock:
+ *
+ * Opaque #GstAudioClock.
+ */
+struct _GstAudioClock {
+  GstSystemClock clock;
+
+  /*< protected >*/
+  GstAudioClockGetTimeFunc func;
+  gpointer                 user_data;
+  GDestroyNotify           destroy_notify;
+
+  /*< private >*/
+  GstClockTime             last_time;
+  GstClockTimeDiff         time_offset;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstAudioClockClass {
+  GstSystemClockClass parent_class;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_audio_clock_get_type        (void);
+GstClock*       gst_audio_clock_new             (const gchar *name, GstAudioClockGetTimeFunc func,
+                                                 gpointer user_data);
+GstClock*       gst_audio_clock_new_full        (const gchar *name, GstAudioClockGetTimeFunc func,
+                                                 gpointer user_data, GDestroyNotify destroy_notify);
+void            gst_audio_clock_reset           (GstAudioClock *clock, GstClockTime time);
+
+GstClockTime    gst_audio_clock_get_time        (GstClock * clock);
+GstClockTime    gst_audio_clock_adjust          (GstClock * clock, GstClockTime time);
+
+void            gst_audio_clock_invalidate      (GstClock * clock);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_CLOCK_H__ */
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
new file mode 100644
index 0000000..cd051a3
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -0,0 +1,2402 @@
+/* GStreamer
+ * Copyright (C) 2009 Igalia S.L.
+ * Author: Iago Toral Quiroga <itoral@igalia.com>
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudiodecoder
+ * @short_description: Base class for audio decoders
+ * @see_also: #GstBaseTransform
+ * @since: 0.10.36
+ *
+ * This base class is for audio decoders turning encoded data into
+ * raw audio samples.
+ *
+ * GstAudioDecoder and subclass should cooperate as follows.
+ * <orderedlist>
+ * <listitem>
+ *   <itemizedlist><title>Configuration</title>
+ *   <listitem><para>
+ *     Initially, GstAudioDecoder calls @start when the decoder element
+ *     is activated, which allows subclass to perform any global setup.
+ *     Base class (context) parameters can already be set according to subclass
+ *     capabilities (or possibly upon receive more information in subsequent
+ *     @set_format).
+ *   </para></listitem>
+ *   <listitem><para>
+ *     GstAudioDecoder calls @set_format to inform subclass of the format
+ *     of input audio data that it is about to receive.
+ *     While unlikely, it might be called more than once, if changing input
+ *     parameters require reconfiguration.
+ *   </para></listitem>
+ *   <listitem><para>
+ *     GstAudioDecoder calls @stop at end of all processing.
+ *   </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * As of configuration stage, and throughout processing, GstAudioDecoder
+ * provides various (context) parameters, e.g. describing the format of
+ * output audio data (valid when output caps have been set) or current parsing state.
+ * Conversely, subclass can and should configure context to inform
+ * base class of its expectation w.r.t. buffer handling.
+ * <listitem>
+ *   <itemizedlist>
+ *   <title>Data processing</title>
+ *     <listitem><para>
+ *       Base class gathers input data, and optionally allows subclass
+ *       to parse this into subsequently manageable (as defined by subclass)
+ *       chunks.  Such chunks are subsequently referred to as 'frames',
+ *       though they may or may not correspond to 1 (or more) audio format frame.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       Input frame is provided to subclass' @handle_frame.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       If codec processing results in decoded data, subclass should call
+ *       @gst_audio_decoder_finish_frame to have decoded data pushed
+ *       downstream.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       Just prior to actually pushing a buffer downstream,
+ *       it is passed to @pre_push.  Subclass should either use this callback
+ *       to arrange for additional downstream pushing or otherwise ensure such
+ *       custom pushing occurs after at least a method call has finished since
+ *       setting src pad caps.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       During the parsing process GstAudioDecoderClass will handle both
+ *       srcpad and sinkpad events. Sink events will be passed to subclass
+ *       if @event callback has been provided.
+ *     </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * <listitem>
+ *   <itemizedlist><title>Shutdown phase</title>
+ *   <listitem><para>
+ *     GstAudioDecoder class calls @stop to inform the subclass that data
+ *     parsing will be stopped.
+ *   </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * </orderedlist>
+ *
+ * Subclass is responsible for providing pad template caps for
+ * source and sink pads. The pads need to be named "sink" and "src". It also
+ * needs to set the fixed caps on srcpad, when the format is ensured.  This
+ * is typically when base class calls subclass' @set_format function, though
+ * it might be delayed until calling @gst_audio_decoder_finish_frame.
+ *
+ * In summary, above process should have subclass concentrating on
+ * codec data processing while leaving other matters to base class,
+ * such as most notably timestamp handling.  While it may exert more control
+ * in this area (see e.g. @pre_push), it is very much not recommended.
+ *
+ * In particular, base class will try to arrange for perfect output timestamps
+ * as much as possible while tracking upstream timestamps.
+ * To this end, if deviation between the next ideal expected perfect timestamp
+ * and upstream exceeds #GstAudioDecoder:tolerance, then resync to upstream
+ * occurs (which would happen always if the tolerance mechanism is disabled).
+ *
+ * In non-live pipelines, baseclass can also (configurably) arrange for
+ * output buffer aggregation which may help to redue large(r) numbers of
+ * small(er) buffers being pushed and processed downstream.
+ *
+ * On the other hand, it should be noted that baseclass only provides limited
+ * seeking support (upon explicit subclass request), as full-fledged support
+ * should rather be left to upstream demuxer, parser or alike.  This simple
+ * approach caters for seeking and duration reporting using estimated input
+ * bitrates.
+ *
+ * Things that subclass need to take care of:
+ * <itemizedlist>
+ *   <listitem><para>Provide pad templates</para></listitem>
+ *   <listitem><para>
+ *      Set source pad caps when appropriate
+ *   </para></listitem>
+ *   <listitem><para>
+ *      Set user-configurable properties to sane defaults for format and
+ *      implementing codec at hand, and convey some subclass capabilities and
+ *      expectations in context.
+ *   </para></listitem>
+ *   <listitem><para>
+ *      Accept data in @handle_frame and provide encoded results to
+ *      @gst_audio_decoder_finish_frame.  If it is prepared to perform
+ *      PLC, it should also accept NULL data in @handle_frame and provide for
+ *      data for indicated duration.
+ *   </para></listitem>
+ * </itemizedlist>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstaudiodecoder.h"
+#include <gst/pbutils/descriptions.h>
+
+#include <string.h>
+
+GST_DEBUG_CATEGORY (audiodecoder_debug);
+#define GST_CAT_DEFAULT audiodecoder_debug
+
+#define GST_AUDIO_DECODER_GET_PRIVATE(obj)  \
+    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_DECODER, \
+        GstAudioDecoderPrivate))
+
+enum
+{
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_LATENCY,
+  PROP_TOLERANCE,
+  PROP_PLC
+};
+
+#define DEFAULT_LATENCY    0
+#define DEFAULT_TOLERANCE  0
+#define DEFAULT_PLC        FALSE
+
+typedef struct _GstAudioDecoderContext
+{
+  /* input */
+  /* (output) audio format */
+  GstAudioInfo info;
+
+  /* parsing state */
+  gboolean eos;
+  gboolean sync;
+
+  /* misc */
+  gint delay;
+
+  /* output */
+  gboolean do_plc;
+  gboolean do_byte_time;
+  gint max_errors;
+  /* MT-protected (with LOCK) */
+  GstClockTime min_latency;
+  GstClockTime max_latency;
+} GstAudioDecoderContext;
+
+struct _GstAudioDecoderPrivate
+{
+  /* activation status */
+  gboolean active;
+
+  /* input base/first ts as basis for output ts */
+  GstClockTime base_ts;
+  /* input samples processed and sent downstream so far (w.r.t. base_ts) */
+  guint64 samples;
+
+  /* collected input data */
+  GstAdapter *adapter;
+  /* tracking input ts for changes */
+  GstClockTime prev_ts;
+  /* frames obtained from input */
+  GQueue frames;
+  /* collected output data */
+  GstAdapter *adapter_out;
+  /* ts and duration for output data collected above */
+  GstClockTime out_ts, out_dur;
+  /* mark outgoing discont */
+  gboolean discont;
+
+  /* subclass gave all it could already */
+  gboolean drained;
+  /* subclass currently being forcibly drained */
+  gboolean force;
+
+  /* input bps estimatation */
+  /* global in bytes seen */
+  guint64 bytes_in;
+  /* global samples sent out */
+  guint64 samples_out;
+  /* bytes flushed during parsing */
+  guint sync_flush;
+  /* error count */
+  gint error_count;
+  /* codec id tag */
+  GstTagList *taglist;
+
+  /* whether circumstances allow output aggregation */
+  gint agg;
+
+  /* reverse playback queues */
+  /* collect input */
+  GList *gather;
+  /* to-be-decoded */
+  GList *decode;
+  /* reversed output */
+  GList *queued;
+
+  /* context storage */
+  GstAudioDecoderContext ctx;
+
+  /* properties */
+  GstClockTime latency;
+  GstClockTime tolerance;
+  gboolean plc;
+
+  /* pending serialized sink events, will be sent from finish_frame() */
+  GList *pending_events;
+};
+
+
+static void gst_audio_decoder_finalize (GObject * object);
+static void gst_audio_decoder_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_audio_decoder_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static void gst_audio_decoder_clear_queues (GstAudioDecoder * dec);
+static GstFlowReturn gst_audio_decoder_chain_reverse (GstAudioDecoder *
+    dec, GstBuffer * buf);
+
+static GstStateChangeReturn gst_audio_decoder_change_state (GstElement *
+    element, GstStateChange transition);
+static gboolean gst_audio_decoder_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_audio_decoder_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_audio_decoder_sink_setcaps (GstAudioDecoder * dec,
+    GstCaps * caps);
+gboolean gst_audio_decoder_src_setcaps (GstAudioDecoder * dec, GstCaps * caps);
+static GstFlowReturn gst_audio_decoder_chain (GstPad * pad, GstBuffer * buf);
+static gboolean gst_audio_decoder_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_audio_decoder_sink_query (GstPad * pad, GstQuery * query);
+static const GstQueryType *gst_audio_decoder_get_query_types (GstPad * pad);
+static void gst_audio_decoder_reset (GstAudioDecoder * dec, gboolean full);
+
+static GstElementClass *parent_class = NULL;
+
+static void gst_audio_decoder_class_init (GstAudioDecoderClass * klass);
+static void gst_audio_decoder_init (GstAudioDecoder * dec,
+    GstAudioDecoderClass * klass);
+
+GType
+gst_audio_decoder_get_type (void)
+{
+  static volatile gsize audio_decoder_type = 0;
+
+  if (g_once_init_enter (&audio_decoder_type)) {
+    GType _type;
+    static const GTypeInfo audio_decoder_info = {
+      sizeof (GstAudioDecoderClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_audio_decoder_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAudioDecoder),
+      0,
+      (GInstanceInitFunc) gst_audio_decoder_init,
+    };
+
+    _type = g_type_register_static (GST_TYPE_ELEMENT,
+        "GstAudioDecoder", &audio_decoder_info, G_TYPE_FLAG_ABSTRACT);
+    g_once_init_leave (&audio_decoder_type, _type);
+  }
+  return audio_decoder_type;
+}
+
+
+static void
+gst_audio_decoder_class_init (GstAudioDecoderClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *element_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  element_class = GST_ELEMENT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  g_type_class_add_private (klass, sizeof (GstAudioDecoderPrivate));
+
+  GST_DEBUG_CATEGORY_INIT (audiodecoder_debug, "audiodecoder", 0,
+      "audio decoder base class");
+
+  gobject_class->set_property = gst_audio_decoder_set_property;
+  gobject_class->get_property = gst_audio_decoder_get_property;
+  gobject_class->finalize = gst_audio_decoder_finalize;
+
+  element_class->change_state = gst_audio_decoder_change_state;
+
+  /* Properties */
+  g_object_class_install_property (gobject_class, PROP_LATENCY,
+      g_param_spec_int64 ("min-latency", "Minimum Latency",
+          "Aggregate output data to a minimum of latency time (ns)",
+          0, G_MAXINT64, DEFAULT_LATENCY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_TOLERANCE,
+      g_param_spec_int64 ("tolerance", "Tolerance",
+          "Perfect ts while timestamp jitter/imperfection within tolerance (ns)",
+          0, G_MAXINT64, DEFAULT_TOLERANCE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_PLC,
+      g_param_spec_boolean ("plc", "Packet Loss Concealment",
+          "Perform packet loss concealment (if supported)",
+          DEFAULT_PLC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_audio_decoder_init (GstAudioDecoder * dec, GstAudioDecoderClass * klass)
+{
+  GstPadTemplate *pad_template;
+
+  GST_DEBUG_OBJECT (dec, "gst_audio_decoder_init");
+
+  dec->priv = GST_AUDIO_DECODER_GET_PRIVATE (dec);
+
+  /* Setup sink pad */
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink");
+  g_return_if_fail (pad_template != NULL);
+
+  dec->sinkpad = gst_pad_new_from_template (pad_template, "sink");
+  gst_pad_set_event_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_event));
+  gst_pad_set_chain_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_chain));
+  gst_pad_set_query_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_query));
+  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
+  GST_DEBUG_OBJECT (dec, "sinkpad created");
+
+  /* Setup source pad */
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "src");
+  g_return_if_fail (pad_template != NULL);
+
+  dec->srcpad = gst_pad_new_from_template (pad_template, "src");
+  gst_pad_set_event_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_src_event));
+  gst_pad_set_query_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_src_query));
+  gst_pad_set_query_type_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_get_query_types));
+  gst_pad_use_fixed_caps (dec->srcpad);
+  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
+  GST_DEBUG_OBJECT (dec, "srcpad created");
+
+  dec->priv->adapter = gst_adapter_new ();
+  dec->priv->adapter_out = gst_adapter_new ();
+  g_queue_init (&dec->priv->frames);
+
+  g_static_rec_mutex_init (&dec->stream_lock);
+
+  /* property default */
+  dec->priv->latency = DEFAULT_LATENCY;
+  dec->priv->tolerance = DEFAULT_TOLERANCE;
+  dec->priv->plc = DEFAULT_PLC;
+
+  /* init state */
+  gst_audio_decoder_reset (dec, TRUE);
+  GST_DEBUG_OBJECT (dec, "init ok");
+}
+
+static void
+gst_audio_decoder_reset (GstAudioDecoder * dec, gboolean full)
+{
+  GST_DEBUG_OBJECT (dec, "gst_audio_decoder_reset");
+
+  GST_AUDIO_DECODER_STREAM_LOCK (dec);
+
+  if (full) {
+    dec->priv->active = FALSE;
+    dec->priv->bytes_in = 0;
+    dec->priv->samples_out = 0;
+    dec->priv->agg = -1;
+    dec->priv->error_count = 0;
+    gst_audio_decoder_clear_queues (dec);
+
+    gst_audio_info_init (&dec->priv->ctx.info);
+    memset (&dec->priv->ctx, 0, sizeof (dec->priv->ctx));
+
+    if (dec->priv->taglist) {
+      gst_tag_list_free (dec->priv->taglist);
+      dec->priv->taglist = NULL;
+    }
+
+    gst_segment_init (&dec->segment, GST_FORMAT_TIME);
+
+    g_list_foreach (dec->priv->pending_events, (GFunc) gst_event_unref, NULL);
+    g_list_free (dec->priv->pending_events);
+    dec->priv->pending_events = NULL;
+  }
+
+  g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL);
+  g_queue_clear (&dec->priv->frames);
+  gst_adapter_clear (dec->priv->adapter);
+  gst_adapter_clear (dec->priv->adapter_out);
+  dec->priv->out_ts = GST_CLOCK_TIME_NONE;
+  dec->priv->out_dur = 0;
+  dec->priv->prev_ts = GST_CLOCK_TIME_NONE;
+  dec->priv->drained = TRUE;
+  dec->priv->base_ts = GST_CLOCK_TIME_NONE;
+  dec->priv->samples = 0;
+  dec->priv->discont = TRUE;
+  dec->priv->sync_flush = FALSE;
+
+  GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+}
+
+static void
+gst_audio_decoder_finalize (GObject * object)
+{
+  GstAudioDecoder *dec;
+
+  g_return_if_fail (GST_IS_AUDIO_DECODER (object));
+  dec = GST_AUDIO_DECODER (object);
+
+  if (dec->priv->adapter) {
+    g_object_unref (dec->priv->adapter);
+  }
+  if (dec->priv->adapter_out) {
+    g_object_unref (dec->priv->adapter_out);
+  }
+
+  g_static_rec_mutex_free (&dec->stream_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/**
+ * gst_audio_decoder_set_outcaps:
+ * @dec: a #GstAudioDecoder
+ * @caps: #GstCaps
+ *
+ * Configure output @caps on the srcpad of @dec. Also perform
+ * sanity checking of @caps and extracts output data format
+ *
+ * Returns: %TRUE on success.
+ * */
+gboolean
+gst_audio_decoder_set_outcaps (GstAudioDecoder * dec, GstCaps * caps)
+{
+  gboolean res = TRUE;
+  guint old_rate;
+
+  GST_DEBUG_OBJECT (dec, "setting src caps %" GST_PTR_FORMAT, caps);
+
+  GST_AUDIO_DECODER_STREAM_LOCK (dec);
+
+  /* parse caps here to check subclass;
+   * also makes us aware of output format */
+  if (!gst_caps_is_fixed (caps))
+    goto refuse_caps;
+
+  /* adjust ts tracking to new sample rate */
+  old_rate = GST_AUDIO_INFO_RATE (&dec->priv->ctx.info);
+  if (GST_CLOCK_TIME_IS_VALID (dec->priv->base_ts) && old_rate) {
+    dec->priv->base_ts +=
+        GST_FRAMES_TO_CLOCK_TIME (dec->priv->samples, old_rate);
+    dec->priv->samples = 0;
+  }
+
+  if (!gst_audio_info_from_caps (&dec->priv->ctx.info, caps))
+    goto refuse_caps;
+
+done:
+  GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+  res = gst_pad_set_caps (dec->srcpad, caps);
+
+  return res;
+
+  /* ERRORS */
+refuse_caps:
+  {
+    GST_WARNING_OBJECT (dec, "rejected caps %" GST_PTR_FORMAT, caps);
+    res = FALSE;
+    goto done;
+  }
+}
+
+static gboolean
+gst_audio_decoder_sink_setcaps (GstAudioDecoder * dec, GstCaps * caps)
+{
+  GstAudioDecoderClass *klass;
+  gboolean res = TRUE;
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  GST_DEBUG_OBJECT (dec, "caps: %" GST_PTR_FORMAT, caps);
+
+  GST_AUDIO_DECODER_STREAM_LOCK (dec);
+  /* NOTE pbutils only needed here */
+  /* TODO maybe (only) upstream demuxer/parser etc should handle this ? */
+#if 0
+  if (dec->priv->taglist)
+    gst_tag_list_free (dec->priv->taglist);
+  dec->priv->taglist = gst_tag_list_new ();
+  gst_pb_utils_add_codec_description_to_tag_list (dec->priv->taglist,
+      GST_TAG_AUDIO_CODEC, caps);
+#endif
+
+  if (klass->set_format)
+    res = klass->set_format (dec, caps);
+
+  GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+  return res;
+}
+
+static void
+gst_audio_decoder_setup (GstAudioDecoder * dec)
+{
+  GstQuery *query;
+  gboolean res;
+
+  /* check if in live pipeline, then latency messing is no-no */
+  query = gst_query_new_latency ();
+  res = gst_pad_peer_query (dec->sinkpad, query);
+  if (res) {
+    gst_query_parse_latency (query, &res, NULL, NULL);
+    res = !res;
+  }
+  gst_query_unref (query);
+
+  /* normalize to bool */
+  dec->priv->agg = !!res;
+}
+
+/* mini aggregator combining output buffers into fewer larger ones,
+ * if so allowed/configured */
+static GstFlowReturn
+gst_audio_decoder_output (GstAudioDecoder * dec, GstBuffer * buf)
+{
+  GstAudioDecoderClass *klass;
+  GstAudioDecoderPrivate *priv;
+  GstAudioDecoderContext *ctx;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBuffer *inbuf = NULL;
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+  priv = dec->priv;
+  ctx = &dec->priv->ctx;
+
+  if (G_UNLIKELY (priv->agg < 0))
+    gst_audio_decoder_setup (dec);
+
+  if (G_LIKELY (buf)) {
+    g_return_val_if_fail (ctx->info.bpf != 0, GST_FLOW_ERROR);
+
+    GST_LOG_OBJECT (dec,
+        "output buffer of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT
+        ", duration %" GST_TIME_FORMAT, gst_buffer_get_size (buf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+    /* clip buffer */
+    buf = gst_audio_buffer_clip (buf, &dec->segment, ctx->info.rate,
+        ctx->info.bpf);
+    if (G_UNLIKELY (!buf)) {
+      GST_DEBUG_OBJECT (dec, "no data after clipping to segment");
+    } else {
+      GST_LOG_OBJECT (dec,
+          "buffer after segment clipping has size %" G_GSIZE_FORMAT " with ts %"
+          GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
+          gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+          GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+    }
+  } else {
+    GST_DEBUG_OBJECT (dec, "no output buffer");
+  }
+
+again:
+  inbuf = NULL;
+  if (priv->agg && dec->priv->latency > 0) {
+    gint av;
+    gboolean assemble = FALSE;
+    const GstClockTimeDiff tol = 10 * GST_MSECOND;
+    GstClockTimeDiff diff = -100 * GST_MSECOND;
+
+    av = gst_adapter_available (priv->adapter_out);
+    if (G_UNLIKELY (!buf)) {
+      /* forcibly send current */
+      assemble = TRUE;
+      GST_LOG_OBJECT (dec, "forcing fragment flush");
+    } else if (av && (!GST_BUFFER_TIMESTAMP_IS_VALID (buf) ||
+            !GST_CLOCK_TIME_IS_VALID (priv->out_ts) ||
+            ((diff = GST_CLOCK_DIFF (GST_BUFFER_TIMESTAMP (buf),
+                        priv->out_ts + priv->out_dur)) > tol) || diff < -tol)) {
+      assemble = TRUE;
+      GST_LOG_OBJECT (dec, "buffer %d ms apart from current fragment",
+          (gint) (diff / GST_MSECOND));
+    } else {
+      /* add or start collecting */
+      if (!av) {
+        GST_LOG_OBJECT (dec, "starting new fragment");
+        priv->out_ts = GST_BUFFER_TIMESTAMP (buf);
+      } else {
+        GST_LOG_OBJECT (dec, "adding to fragment");
+      }
+      gst_adapter_push (priv->adapter_out, buf);
+      priv->out_dur += GST_BUFFER_DURATION (buf);
+      av += gst_buffer_get_size (buf);
+      buf = NULL;
+    }
+    if (priv->out_dur > dec->priv->latency)
+      assemble = TRUE;
+    if (av && assemble) {
+      GST_LOG_OBJECT (dec, "assembling fragment");
+      inbuf = buf;
+      buf = gst_adapter_take_buffer (priv->adapter_out, av);
+      GST_BUFFER_TIMESTAMP (buf) = priv->out_ts;
+      GST_BUFFER_DURATION (buf) = priv->out_dur;
+      priv->out_ts = GST_CLOCK_TIME_NONE;
+      priv->out_dur = 0;
+    }
+  }
+
+  if (G_LIKELY (buf)) {
+
+    if (G_UNLIKELY (priv->discont)) {
+      GST_LOG_OBJECT (dec, "marking discont");
+      GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+      priv->discont = FALSE;
+    }
+
+    if (G_LIKELY (GST_BUFFER_TIMESTAMP_IS_VALID (buf))) {
+      /* duration should always be valid for raw audio */
+      g_assert (GST_BUFFER_DURATION_IS_VALID (buf));
+      dec->segment.position =
+          GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf);
+    }
+
+    if (klass->pre_push) {
+      /* last chance for subclass to do some dirty stuff */
+      ret = klass->pre_push (dec, &buf);
+      if (ret != GST_FLOW_OK || !buf) {
+        GST_DEBUG_OBJECT (dec, "subclass returned %s, buf %p",
+            gst_flow_get_name (ret), buf);
+        if (buf)
+          gst_buffer_unref (buf);
+        goto exit;
+      }
+    }
+
+    GST_LOG_OBJECT (dec, "pushing buffer of size %d with ts %" GST_TIME_FORMAT
+        ", duration %" GST_TIME_FORMAT, gst_buffer_get_size (buf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+    if (dec->segment.rate > 0.0) {
+      ret = gst_pad_push (dec->srcpad, buf);
+      GST_LOG_OBJECT (dec, "buffer pushed: %s", gst_flow_get_name (ret));
+    } else {
+      ret = GST_FLOW_OK;
+      priv->queued = g_list_prepend (priv->queued, buf);
+      GST_LOG_OBJECT (dec, "buffer queued");
+    }
+
+  exit:
+    if (inbuf) {
+      buf = inbuf;
+      goto again;
+    }
+  }
+
+  return ret;
+}
+
+GstFlowReturn
+gst_audio_decoder_finish_frame (GstAudioDecoder * dec, GstBuffer * buf,
+    gint frames)
+{
+  GstAudioDecoderPrivate *priv;
+  GstAudioDecoderContext *ctx;
+  gint samples = 0;
+  GstClockTime ts, next_ts;
+  gsize size;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  /* subclass should know what it is producing by now */
+  g_return_val_if_fail (buf == NULL || gst_pad_has_current_caps (dec->srcpad),
+      GST_FLOW_ERROR);
+  /* subclass should not hand us no data */
+  g_return_val_if_fail (buf == NULL || gst_buffer_get_size (buf) > 0,
+      GST_FLOW_ERROR);
+  /* no dummy calls please */
+  g_return_val_if_fail (frames != 0, GST_FLOW_ERROR);
+
+  priv = dec->priv;
+  ctx = &dec->priv->ctx;
+  size = buf ? gst_buffer_get_size (buf) : 0;
+
+  GST_LOG_OBJECT (dec, "accepting %d bytes == %d samples for %d frames",
+      buf ? size : -1, buf ? size / ctx->info.bpf : -1, frames);
+
+  GST_AUDIO_DECODER_STREAM_LOCK (dec);
+
+  if (priv->pending_events) {
+    GList *pending_events, *l;
+
+    pending_events = priv->pending_events;
+    priv->pending_events = NULL;
+
+    GST_DEBUG_OBJECT (dec, "Pushing pending events");
+    for (l = pending_events; l; l = l->next)
+      gst_pad_push_event (dec->srcpad, l->data);
+    g_list_free (pending_events);
+  }
+
+  /* output shoud be whole number of sample frames */
+  if (G_LIKELY (buf && ctx->info.bpf)) {
+    if (size % ctx->info.bpf)
+      goto wrong_buffer;
+    /* per channel least */
+    samples = size / ctx->info.bpf;
+  }
+
+  /* frame and ts book-keeping */
+  if (G_UNLIKELY (frames < 0)) {
+    if (G_UNLIKELY (-frames - 1 > priv->frames.length))
+      goto overflow;
+    frames = priv->frames.length + frames + 1;
+  } else if (G_UNLIKELY (frames > priv->frames.length)) {
+    if (G_LIKELY (!priv->force)) {
+      /* no way we can let this pass */
+      g_assert_not_reached ();
+      /* really no way */
+      goto overflow;
+    }
+  }
+
+  if (G_LIKELY (priv->frames.length))
+    ts = GST_BUFFER_TIMESTAMP (priv->frames.head->data);
+  else
+    ts = GST_CLOCK_TIME_NONE;
+
+  GST_DEBUG_OBJECT (dec, "leading frame ts %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (ts));
+
+  while (priv->frames.length && frames) {
+    gst_buffer_unref (g_queue_pop_head (&priv->frames));
+    dec->priv->ctx.delay = dec->priv->frames.length;
+    frames--;
+  }
+
+  /* lock on */
+  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (priv->base_ts))) {
+    priv->base_ts = ts;
+    GST_DEBUG_OBJECT (dec, "base_ts now %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
+  }
+
+  if (G_UNLIKELY (!buf))
+    goto exit;
+
+  /* slightly convoluted approach caters for perfect ts if subclass desires */
+  if (GST_CLOCK_TIME_IS_VALID (ts)) {
+    if (dec->priv->tolerance > 0) {
+      GstClockTimeDiff diff;
+
+      g_assert (GST_CLOCK_TIME_IS_VALID (priv->base_ts));
+      next_ts = priv->base_ts +
+          gst_util_uint64_scale (samples, GST_SECOND, ctx->info.rate);
+      GST_LOG_OBJECT (dec, "buffer is %d samples past base_ts %" GST_TIME_FORMAT
+          ", expected ts %" GST_TIME_FORMAT, samples,
+          GST_TIME_ARGS (priv->base_ts), GST_TIME_ARGS (next_ts));
+      diff = GST_CLOCK_DIFF (next_ts, ts);
+      GST_LOG_OBJECT (dec, "ts diff %d ms", (gint) (diff / GST_MSECOND));
+      /* if within tolerance,
+       * discard buffer ts and carry on producing perfect stream,
+       * otherwise resync to ts */
+      if (G_UNLIKELY (diff < -dec->priv->tolerance ||
+              diff > dec->priv->tolerance)) {
+        GST_DEBUG_OBJECT (dec, "base_ts resync");
+        priv->base_ts = ts;
+        priv->samples = 0;
+      }
+    } else {
+      GST_DEBUG_OBJECT (dec, "base_ts resync");
+      priv->base_ts = ts;
+      priv->samples = 0;
+    }
+  }
+
+  /* delayed one-shot stuff until confirmed data */
+  if (priv->taglist) {
+    GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, priv->taglist);
+    if (gst_tag_list_is_empty (priv->taglist)) {
+      gst_tag_list_free (priv->taglist);
+    } else {
+      gst_element_found_tags (GST_ELEMENT (dec), priv->taglist);
+    }
+    priv->taglist = NULL;
+  }
+
+  buf = gst_buffer_make_writable (buf);
+  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (priv->base_ts))) {
+    GST_BUFFER_TIMESTAMP (buf) =
+        priv->base_ts +
+        GST_FRAMES_TO_CLOCK_TIME (priv->samples, ctx->info.rate);
+    GST_BUFFER_DURATION (buf) = priv->base_ts +
+        GST_FRAMES_TO_CLOCK_TIME (priv->samples + samples, ctx->info.rate) -
+        GST_BUFFER_TIMESTAMP (buf);
+  } else {
+    GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION (buf) =
+        GST_FRAMES_TO_CLOCK_TIME (samples, ctx->info.rate);
+  }
+  priv->samples += samples;
+  priv->samples_out += samples;
+
+  /* we got data, so note things are looking up */
+  if (G_UNLIKELY (dec->priv->error_count))
+    dec->priv->error_count--;
+
+exit:
+  ret = gst_audio_decoder_output (dec, buf);
+
+  GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+  return ret;
+
+  /* ERRORS */
+wrong_buffer:
+  {
+    GST_ELEMENT_ERROR (dec, STREAM, ENCODE, (NULL),
+        ("buffer size %d not a multiple of %d", size, ctx->info.bpf));
+    gst_buffer_unref (buf);
+    ret = GST_FLOW_ERROR;
+    goto exit;
+  }
+overflow:
+  {
+    GST_ELEMENT_ERROR (dec, STREAM, ENCODE,
+        ("received more decoded frames %d than provided %d", frames,
+            priv->frames.length), (NULL));
+    if (buf)
+      gst_buffer_unref (buf);
+    ret = GST_FLOW_ERROR;
+    goto exit;
+  }
+}
+
+static GstFlowReturn
+gst_audio_decoder_handle_frame (GstAudioDecoder * dec,
+    GstAudioDecoderClass * klass, GstBuffer * buffer)
+{
+  if (G_LIKELY (buffer)) {
+    gsize size = gst_buffer_get_size (buffer);
+    /* keep around for admin */
+    GST_LOG_OBJECT (dec, "tracking frame size %d, ts %" GST_TIME_FORMAT,
+        size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+    g_queue_push_tail (&dec->priv->frames, buffer);
+    dec->priv->ctx.delay = dec->priv->frames.length;
+    dec->priv->bytes_in += size;
+  } else {
+    GST_LOG_OBJECT (dec, "providing subclass with NULL frame");
+  }
+
+  return klass->handle_frame (dec, buffer);
+}
+
+/* maybe subclass configurable instead, but this allows for a whole lot of
+ * raw samples, so at least quite some encoded ... */
+#define GST_AUDIO_DECODER_MAX_SYNC     10 * 8 * 2 * 1024
+
+static GstFlowReturn
+gst_audio_decoder_push_buffers (GstAudioDecoder * dec, gboolean force)
+{
+  GstAudioDecoderClass *klass;
+  GstAudioDecoderPrivate *priv;
+  GstAudioDecoderContext *ctx;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBuffer *buffer;
+  gint av, flush;
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+  priv = dec->priv;
+  ctx = &dec->priv->ctx;
+
+  g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR);
+
+  av = gst_adapter_available (priv->adapter);
+  GST_DEBUG_OBJECT (dec, "available: %d", av);
+
+  while (ret == GST_FLOW_OK) {
+
+    flush = 0;
+    ctx->eos = force;
+
+    if (G_LIKELY (av)) {
+      gint len;
+      GstClockTime ts;
+
+      /* parse if needed */
+      if (klass->parse) {
+        gint offset = 0;
+
+        /* limited (legacy) parsing; avoid whole of baseparse */
+        GST_DEBUG_OBJECT (dec, "parsing available: %d", av);
+        /* piggyback sync state on discont */
+        ctx->sync = !priv->discont;
+        ret = klass->parse (dec, priv->adapter, &offset, &len);
+
+        g_assert (offset <= av);
+        if (offset) {
+          /* jumped a bit */
+          GST_DEBUG_OBJECT (dec, "setting DISCONT");
+          gst_adapter_flush (priv->adapter, offset);
+          flush = offset;
+          /* avoid parsing indefinitely */
+          priv->sync_flush += offset;
+          if (priv->sync_flush > GST_AUDIO_DECODER_MAX_SYNC)
+            goto parse_failed;
+        }
+
+        if (ret == GST_FLOW_UNEXPECTED) {
+          GST_LOG_OBJECT (dec, "no frame yet");
+          ret = GST_FLOW_OK;
+          break;
+        } else if (ret == GST_FLOW_OK) {
+          GST_LOG_OBJECT (dec, "frame at offset %d of length %d", offset, len);
+          g_assert (offset + len <= av);
+          priv->sync_flush = 0;
+        } else {
+          break;
+        }
+      } else {
+        len = av;
+      }
+      /* track upstream ts, but do not get stuck if nothing new upstream */
+      ts = gst_adapter_prev_timestamp (priv->adapter, NULL);
+      if (ts == priv->prev_ts) {
+        GST_LOG_OBJECT (dec, "ts == prev_ts; discarding");
+        ts = GST_CLOCK_TIME_NONE;
+      } else {
+        priv->prev_ts = ts;
+      }
+      buffer = gst_adapter_take_buffer (priv->adapter, len);
+      buffer = gst_buffer_make_writable (buffer);
+      GST_BUFFER_TIMESTAMP (buffer) = ts;
+      flush += len;
+    } else {
+      if (!force)
+        break;
+      buffer = NULL;
+    }
+
+    ret = gst_audio_decoder_handle_frame (dec, klass, buffer);
+
+    /* do not keep pushing it ... */
+    if (G_UNLIKELY (!av)) {
+      priv->drained = TRUE;
+      break;
+    }
+
+    av -= flush;
+    g_assert (av >= 0);
+  }
+
+  GST_LOG_OBJECT (dec, "done pushing to subclass");
+  return ret;
+
+  /* ERRORS */
+parse_failed:
+  {
+    GST_ELEMENT_ERROR (dec, STREAM, DECODE, (NULL), ("failed to parse stream"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_audio_decoder_drain (GstAudioDecoder * dec)
+{
+  GstFlowReturn ret;
+
+  if (dec->priv->drained)
+    return GST_FLOW_OK;
+  else {
+    /* dispatch reverse pending buffers */
+    /* chain eventually calls upon drain as well, but by that time
+     * gather list should be clear, so ok ... */
+    if (dec->segment.rate < 0.0 && dec->priv->gather)
+      gst_audio_decoder_chain_reverse (dec, NULL);
+    /* have subclass give all it can */
+    ret = gst_audio_decoder_push_buffers (dec, TRUE);
+    /* ensure all output sent */
+    ret = gst_audio_decoder_output (dec, NULL);
+    /* everything should be away now */
+    if (dec->priv->frames.length) {
+      /* not fatal/impossible though if subclass/codec eats stuff */
+      GST_WARNING_OBJECT (dec, "still %d frames left after draining",
+          dec->priv->frames.length);
+      g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL);
+      g_queue_clear (&dec->priv->frames);
+    }
+    /* discard (unparsed) leftover */
+    gst_adapter_clear (dec->priv->adapter);
+
+    return ret;
+  }
+}
+
+/* hard == FLUSH, otherwise discont */
+static GstFlowReturn
+gst_audio_decoder_flush (GstAudioDecoder * dec, gboolean hard)
+{
+  GstAudioDecoderClass *klass;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  GST_LOG_OBJECT (dec, "flush hard %d", hard);
+
+  if (!hard) {
+    ret = gst_audio_decoder_drain (dec);
+  } else {
+    gst_audio_decoder_clear_queues (dec);
+    gst_segment_init (&dec->segment, GST_FORMAT_TIME);
+    dec->priv->error_count = 0;
+  }
+  /* only bother subclass with flushing if known it is already alive
+   * and kicking out stuff */
+  if (klass->flush && dec->priv->samples_out > 0)
+    klass->flush (dec, hard);
+  /* and get (re)set for the sequel */
+  gst_audio_decoder_reset (dec, FALSE);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_audio_decoder_chain_forward (GstAudioDecoder * dec, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+
+  /* grab buffer */
+  gst_adapter_push (dec->priv->adapter, buffer);
+  buffer = NULL;
+  /* new stuff, so we can push subclass again */
+  dec->priv->drained = FALSE;
+
+  /* hand to subclass */
+  ret = gst_audio_decoder_push_buffers (dec, FALSE);
+
+  GST_LOG_OBJECT (dec, "chain-done");
+  return ret;
+}
+
+static void
+gst_audio_decoder_clear_queues (GstAudioDecoder * dec)
+{
+  GstAudioDecoderPrivate *priv = dec->priv;
+
+  g_list_foreach (priv->queued, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (priv->queued);
+  priv->queued = NULL;
+  g_list_foreach (priv->gather, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (priv->gather);
+  priv->gather = NULL;
+  g_list_foreach (priv->decode, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (priv->decode);
+  priv->decode = NULL;
+}
+
+/*
+ * Input:
+ *  Buffer decoding order:  7  8  9  4  5  6  3  1  2  EOS
+ *  Discont flag:           D        D        D  D
+ *
+ * - Each Discont marks a discont in the decoding order.
+ *
+ * for vorbis, each buffer is a keyframe when we have the previous
+ * buffer. This means that to decode buffer 7, we need buffer 6, which
+ * arrives out of order.
+ *
+ * we first gather buffers in the gather queue until we get a DISCONT. We
+ * prepend each incomming buffer so that they are in reversed order.
+ *
+ *    gather queue:    9  8  7
+ *    decode queue:
+ *    output queue:
+ *
+ * When a DISCONT is received (buffer 4), we move the gather queue to the
+ * decode queue. This is simply done be taking the head of the gather queue
+ * and prepending it to the decode queue. This yields:
+ *
+ *    gather queue:
+ *    decode queue:    7  8  9
+ *    output queue:
+ *
+ * Then we decode each buffer in the decode queue in order and put the output
+ * buffer in the output queue. The first buffer (7) will not produce any output
+ * because it needs the previous buffer (6) which did not arrive yet. This
+ * yields:
+ *
+ *    gather queue:
+ *    decode queue:    7  8  9
+ *    output queue:    9  8
+ *
+ * Then we remove the consumed buffers from the decode queue. Buffer 7 is not
+ * completely consumed, we need to keep it around for when we receive buffer
+ * 6. This yields:
+ *
+ *    gather queue:
+ *    decode queue:    7
+ *    output queue:    9  8
+ *
+ * Then we accumulate more buffers:
+ *
+ *    gather queue:    6  5  4
+ *    decode queue:    7
+ *    output queue:
+ *
+ * prepending to the decode queue on DISCONT yields:
+ *
+ *    gather queue:
+ *    decode queue:    4  5  6  7
+ *    output queue:
+ *
+ * after decoding and keeping buffer 4:
+ *
+ *    gather queue:
+ *    decode queue:    4
+ *    output queue:    7  6  5
+ *
+ * Etc..
+ */
+static GstFlowReturn
+gst_audio_decoder_flush_decode (GstAudioDecoder * dec)
+{
+  GstAudioDecoderPrivate *priv = dec->priv;
+  GstFlowReturn res = GST_FLOW_OK;
+  GList *walk;
+
+  walk = priv->decode;
+
+  GST_DEBUG_OBJECT (dec, "flushing buffers to decoder");
+
+  /* clear buffer and decoder state */
+  gst_audio_decoder_flush (dec, FALSE);
+
+  while (walk) {
+    GList *next;
+    GstBuffer *buf = GST_BUFFER_CAST (walk->data);
+
+    GST_DEBUG_OBJECT (dec, "decoding buffer %p, ts %" GST_TIME_FORMAT,
+        buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+    next = g_list_next (walk);
+    /* decode buffer, resulting data prepended to output queue */
+    gst_buffer_ref (buf);
+    res = gst_audio_decoder_chain_forward (dec, buf);
+
+    /* if we generated output, we can discard the buffer, else we
+     * keep it in the queue */
+    if (priv->queued) {
+      GST_DEBUG_OBJECT (dec, "decoded buffer to %p", priv->queued->data);
+      priv->decode = g_list_delete_link (priv->decode, walk);
+      gst_buffer_unref (buf);
+    } else {
+      GST_DEBUG_OBJECT (dec, "buffer did not decode, keeping");
+    }
+    walk = next;
+  }
+
+  /* drain any aggregation (or otherwise) leftover */
+  gst_audio_decoder_drain (dec);
+
+  /* now send queued data downstream */
+  while (priv->queued) {
+    GstBuffer *buf = GST_BUFFER_CAST (priv->queued->data);
+
+    if (G_LIKELY (res == GST_FLOW_OK)) {
+      GST_DEBUG_OBJECT (dec, "pushing buffer %p of size %u, "
+          "time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT, buf,
+          gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+          GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+      /* should be already, but let's be sure */
+      buf = gst_buffer_make_writable (buf);
+      /* avoid stray DISCONT from forward processing,
+       * which have no meaning in reverse pushing */
+      GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
+      res = gst_pad_push (dec->srcpad, buf);
+    } else {
+      gst_buffer_unref (buf);
+    }
+
+    priv->queued = g_list_delete_link (priv->queued, priv->queued);
+  }
+
+  return res;
+}
+
+static GstFlowReturn
+gst_audio_decoder_chain_reverse (GstAudioDecoder * dec, GstBuffer * buf)
+{
+  GstAudioDecoderPrivate *priv = dec->priv;
+  GstFlowReturn result = GST_FLOW_OK;
+
+  /* if we have a discont, move buffers to the decode list */
+  if (!buf || GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT)) {
+    GST_DEBUG_OBJECT (dec, "received discont");
+    while (priv->gather) {
+      GstBuffer *gbuf;
+
+      gbuf = GST_BUFFER_CAST (priv->gather->data);
+      /* remove from the gather list */
+      priv->gather = g_list_delete_link (priv->gather, priv->gather);
+      /* copy to decode queue */
+      priv->decode = g_list_prepend (priv->decode, gbuf);
+    }
+    /* decode stuff in the decode queue */
+    gst_audio_decoder_flush_decode (dec);
+  }
+
+  if (G_LIKELY (buf)) {
+    GST_DEBUG_OBJECT (dec, "gathering buffer %p of size %u, "
+        "time %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT, buf,
+        gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+    /* add buffer to gather queue */
+    priv->gather = g_list_prepend (priv->gather, buf);
+  }
+
+  return result;
+}
+
+static GstFlowReturn
+gst_audio_decoder_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstAudioDecoder *dec;
+  GstFlowReturn ret;
+
+  dec = GST_AUDIO_DECODER (GST_PAD_PARENT (pad));
+
+  GST_LOG_OBJECT (dec,
+      "received buffer of size %d with ts %" GST_TIME_FORMAT
+      ", duration %" GST_TIME_FORMAT, gst_buffer_get_size (buffer),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
+
+  GST_AUDIO_DECODER_STREAM_LOCK (dec);
+
+  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
+    gint64 samples, ts;
+
+    /* track present position */
+    ts = dec->priv->base_ts;
+    samples = dec->priv->samples;
+
+    GST_DEBUG_OBJECT (dec, "handling discont");
+    gst_audio_decoder_flush (dec, FALSE);
+    dec->priv->discont = TRUE;
+
+    /* buffer may claim DISCONT loudly, if it can't tell us where we are now,
+     * we'll stick to where we were ...
+     * Particularly useful/needed for upstream BYTE based */
+    if (dec->segment.rate > 0.0 && !GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
+      GST_DEBUG_OBJECT (dec, "... but restoring previous ts tracking");
+      dec->priv->base_ts = ts;
+      dec->priv->samples = samples;
+    }
+  }
+
+  if (dec->segment.rate > 0.0)
+    ret = gst_audio_decoder_chain_forward (dec, buffer);
+  else
+    ret = gst_audio_decoder_chain_reverse (dec, buffer);
+
+  GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+  return ret;
+}
+
+/* perform upstream byte <-> time conversion (duration, seeking)
+ * if subclass allows and if enough data for moderately decent conversion */
+static inline gboolean
+gst_audio_decoder_do_byte (GstAudioDecoder * dec)
+{
+  return dec->priv->ctx.do_byte_time && dec->priv->ctx.info.bpf &&
+      dec->priv->ctx.info.rate <= dec->priv->samples_out;
+}
+
+static gboolean
+gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
+{
+  gboolean handled = FALSE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+    {
+      GstSegment seg;
+
+      GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      gst_event_copy_segment (event, &seg);
+
+      if (seg.format == GST_FORMAT_TIME) {
+        GST_DEBUG_OBJECT (dec, "received TIME SEGMENT %" GST_PTR_FORMAT, &seg);
+      } else {
+        gint64 nstart;
+        GST_DEBUG_OBJECT (dec, "received SEGMENT %" GST_PTR_FORMAT, &seg);
+        /* handle newsegment resulting from legacy simple seeking */
+        /* note that we need to convert this whether or not enough data
+         * to handle initial newsegment */
+        if (dec->priv->ctx.do_byte_time &&
+            gst_pad_query_convert (dec->sinkpad, GST_FORMAT_BYTES, seg.start,
+                GST_FORMAT_TIME, &nstart)) {
+          /* best attempt convert */
+          /* as these are only estimates, stop is kept open-ended to avoid
+           * premature cutting */
+          GST_DEBUG_OBJECT (dec, "converted to TIME start %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (nstart));
+          seg.format = GST_FORMAT_TIME;
+          seg.start = nstart;
+          seg.time = nstart;
+          seg.stop = GST_CLOCK_TIME_NONE;
+          /* replace event */
+          gst_event_unref (event);
+          event = gst_event_new_segment (&seg);
+        } else {
+          GST_DEBUG_OBJECT (dec, "unsupported format; ignoring");
+          GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+          break;
+        }
+      }
+
+      /* finish current segment */
+      gst_audio_decoder_drain (dec);
+
+#if 0
+      if (update) {
+        /* time progressed without data, see if we can fill the gap with
+         * some concealment data */
+        GST_DEBUG_OBJECT (dec,
+            "segment update: plc %d, do_plc %d, position %" GST_TIME_FORMAT,
+            dec->priv->plc, dec->priv->ctx.do_plc,
+            GST_TIME_ARGS (dec->segment.position));
+        if (dec->priv->plc && dec->priv->ctx.do_plc &&
+            dec->segment.rate > 0.0 && dec->segment.position < start) {
+          GstAudioDecoderClass *klass;
+          GstBuffer *buf;
+
+          klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+          /* hand subclass empty frame with duration that needs covering */
+          buf = gst_buffer_new ();
+          GST_BUFFER_DURATION (buf) = start - dec->segment.position;
+          /* best effort, not much error handling */
+          gst_audio_decoder_handle_frame (dec, klass, buf);
+        }
+      } else
+#endif
+      {
+        /* prepare for next one */
+        gst_audio_decoder_flush (dec, FALSE);
+        /* and that's where we time from,
+         * in case upstream does not come up with anything better
+         * (e.g. upstream BYTE) */
+        if (seg.format != GST_FORMAT_TIME) {
+          dec->priv->base_ts = seg.start;
+          dec->priv->samples = 0;
+        }
+      }
+
+      /* and follow along with segment */
+      dec->segment = seg;
+      dec->priv->pending_events =
+          g_list_append (dec->priv->pending_events, event);
+      handled = TRUE;
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+      break;
+    }
+
+    case GST_EVENT_FLUSH_START:
+      break;
+
+    case GST_EVENT_FLUSH_STOP:
+      GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      /* prepare for fresh start */
+      gst_audio_decoder_flush (dec, TRUE);
+
+      g_list_foreach (dec->priv->pending_events, (GFunc) gst_event_unref, NULL);
+      g_list_free (dec->priv->pending_events);
+      dec->priv->pending_events = NULL;
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+      break;
+
+    case GST_EVENT_EOS:
+      GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      gst_audio_decoder_drain (dec);
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+      break;
+
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      gst_audio_decoder_sink_setcaps (dec, caps);
+      gst_event_unref (event);
+      handled = TRUE;
+      break;
+    }
+    default:
+      break;
+  }
+
+  return handled;
+}
+
+static gboolean
+gst_audio_decoder_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstAudioDecoder *dec;
+  GstAudioDecoderClass *klass;
+  gboolean handled = FALSE;
+  gboolean ret = TRUE;
+
+  dec = GST_AUDIO_DECODER (gst_pad_get_parent (pad));
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  GST_DEBUG_OBJECT (dec, "received event %d, %s", GST_EVENT_TYPE (event),
+      GST_EVENT_TYPE_NAME (event));
+
+  if (klass->event)
+    handled = klass->event (dec, event);
+
+  if (!handled)
+    handled = gst_audio_decoder_sink_eventfunc (dec, event);
+
+  if (!handled) {
+    /* Forward non-serialized events and EOS/FLUSH_STOP immediately.
+     * For EOS this is required because no buffer or serialized event
+     * will come after EOS and nothing could trigger another
+     * _finish_frame() call.
+     *
+     * For FLUSH_STOP this is required because it is expected
+     * to be forwarded immediately and no buffers are queued anyway.
+     */
+    if (!GST_EVENT_IS_SERIALIZED (event)
+        || GST_EVENT_TYPE (event) == GST_EVENT_EOS
+        || GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP) {
+      ret = gst_pad_event_default (pad, event);
+    } else {
+      GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      dec->priv->pending_events =
+          g_list_append (dec->priv->pending_events, event);
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+      ret = TRUE;
+    }
+  }
+
+  GST_DEBUG_OBJECT (dec, "event handled");
+
+  gst_object_unref (dec);
+  return ret;
+}
+
+static gboolean
+gst_audio_decoder_do_seek (GstAudioDecoder * dec, GstEvent * event)
+{
+  GstSeekFlags flags;
+  GstSeekType start_type, end_type;
+  GstFormat format;
+  gdouble rate;
+  gint64 start, start_time, end_time;
+  GstSegment seek_segment;
+  guint32 seqnum;
+
+  gst_event_parse_seek (event, &rate, &format, &flags, &start_type,
+      &start_time, &end_type, &end_time);
+
+  /* we'll handle plain open-ended flushing seeks with the simple approach */
+  if (rate != 1.0) {
+    GST_DEBUG_OBJECT (dec, "unsupported seek: rate");
+    return FALSE;
+  }
+
+  if (start_type != GST_SEEK_TYPE_SET) {
+    GST_DEBUG_OBJECT (dec, "unsupported seek: start time");
+    return FALSE;
+  }
+
+  if (end_type != GST_SEEK_TYPE_NONE ||
+      (end_type == GST_SEEK_TYPE_SET && end_time != GST_CLOCK_TIME_NONE)) {
+    GST_DEBUG_OBJECT (dec, "unsupported seek: end time");
+    return FALSE;
+  }
+
+  if (!(flags & GST_SEEK_FLAG_FLUSH)) {
+    GST_DEBUG_OBJECT (dec, "unsupported seek: not flushing");
+    return FALSE;
+  }
+
+  memcpy (&seek_segment, &dec->segment, sizeof (seek_segment));
+  gst_segment_do_seek (&seek_segment, rate, format, flags, start_type,
+      start_time, end_type, end_time, NULL);
+  start_time = seek_segment.position;
+
+  if (!gst_pad_query_convert (dec->sinkpad, GST_FORMAT_TIME, start_time,
+          GST_FORMAT_BYTES, &start)) {
+    GST_DEBUG_OBJECT (dec, "conversion failed");
+    return FALSE;
+  }
+
+  seqnum = gst_event_get_seqnum (event);
+  event = gst_event_new_seek (1.0, GST_FORMAT_BYTES, flags,
+      GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_NONE, -1);
+  gst_event_set_seqnum (event, seqnum);
+
+  GST_DEBUG_OBJECT (dec, "seeking to %" GST_TIME_FORMAT " at byte offset %"
+      G_GINT64_FORMAT, GST_TIME_ARGS (start_time), start);
+
+  return gst_pad_push_event (dec->sinkpad, event);
+}
+
+static gboolean
+gst_audio_decoder_src_event (GstPad * pad, GstEvent * event)
+{
+  GstAudioDecoder *dec;
+  gboolean res = FALSE;
+
+  dec = GST_AUDIO_DECODER (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (dec, "received event %d, %s", GST_EVENT_TYPE (event),
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstFormat format;
+      gdouble rate;
+      GstSeekFlags flags;
+      GstSeekType cur_type, stop_type;
+      gint64 cur, stop;
+      gint64 tcur, tstop;
+      guint32 seqnum;
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+          &stop_type, &stop);
+      seqnum = gst_event_get_seqnum (event);
+
+      /* upstream gets a chance first */
+      if ((res = gst_pad_push_event (dec->sinkpad, event)))
+        break;
+
+      /* if upstream fails for a time seek, maybe we can help if allowed */
+      if (format == GST_FORMAT_TIME) {
+        if (gst_audio_decoder_do_byte (dec))
+          res = gst_audio_decoder_do_seek (dec, event);
+        break;
+      }
+
+      /* ... though a non-time seek can be aided as well */
+      /* First bring the requested format to time */
+      if (!(res =
+              gst_pad_query_convert (pad, format, cur, GST_FORMAT_TIME, &tcur)))
+        goto convert_error;
+      if (!(res =
+              gst_pad_query_convert (pad, format, stop, GST_FORMAT_TIME,
+                  &tstop)))
+        goto convert_error;
+
+      /* then seek with time on the peer */
+      event = gst_event_new_seek (rate, GST_FORMAT_TIME,
+          flags, cur_type, tcur, stop_type, tstop);
+      gst_event_set_seqnum (event, seqnum);
+
+      res = gst_pad_push_event (dec->sinkpad, event);
+      break;
+    }
+    default:
+      res = gst_pad_push_event (dec->sinkpad, event);
+      break;
+  }
+done:
+  gst_object_unref (dec);
+
+  return res;
+
+  /* ERRORS */
+convert_error:
+  {
+    GST_DEBUG_OBJECT (dec, "cannot convert start/stop for seek");
+    goto done;
+  }
+}
+
+/*
+ * gst_audio_encoded_audio_convert:
+ * @fmt: audio format of the encoded audio
+ * @bytes: number of encoded bytes
+ * @samples: number of encoded samples
+ * @src_format: source format
+ * @src_value: source value
+ * @dest_format: destination format
+ * @dest_value: destination format
+ *
+ * Helper function to convert @src_value in @src_format to @dest_value in
+ * @dest_format for encoded audio data.  Conversion is possible between
+ * BYTE and TIME format by using estimated bitrate based on
+ * @samples and @bytes (and @fmt).
+ */
+/* FIXME: make gst_audio_encoded_audio_convert() public? */
+static gboolean
+gst_audio_encoded_audio_convert (GstAudioInfo * fmt,
+    gint64 bytes, gint64 samples, GstFormat src_format,
+    gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = FALSE;
+
+  g_return_val_if_fail (dest_format != NULL, FALSE);
+  g_return_val_if_fail (dest_value != NULL, FALSE);
+
+  if (G_UNLIKELY (src_format == *dest_format || src_value == 0 ||
+          src_value == -1)) {
+    if (dest_value)
+      *dest_value = src_value;
+    return TRUE;
+  }
+
+  if (samples == 0 || bytes == 0 || fmt->rate == 0) {
+    GST_DEBUG ("not enough metadata yet to convert");
+    goto exit;
+  }
+
+  bytes *= fmt->rate;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale (src_value,
+              GST_SECOND * samples, bytes);
+          res = TRUE;
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = gst_util_uint64_scale (src_value, bytes,
+              samples * GST_SECOND);
+          res = TRUE;
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+
+exit:
+  return res;
+}
+
+static gboolean
+gst_audio_decoder_sink_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res = TRUE;
+  GstAudioDecoder *dec;
+
+  dec = GST_AUDIO_DECODER (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_FORMATS:
+    {
+      gst_query_set_formats (query, 2, GST_FORMAT_TIME, GST_FORMAT_BYTES);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res = gst_audio_encoded_audio_convert (&dec->priv->ctx.info,
+                  dec->priv->bytes_in, dec->priv->samples_out,
+                  src_fmt, src_val, &dest_fmt, &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+error:
+  gst_object_unref (dec);
+  return res;
+}
+
+static const GstQueryType *
+gst_audio_decoder_get_query_types (GstPad * pad)
+{
+  static const GstQueryType gst_audio_decoder_src_query_types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    GST_QUERY_CONVERT,
+    GST_QUERY_LATENCY,
+    0
+  };
+
+  return gst_audio_decoder_src_query_types;
+}
+
+/* FIXME ? are any of these queries (other than latency) a decoder's business ??
+ * also, the conversion stuff might seem to make sense, but seems to not mind
+ * segment stuff etc at all
+ * Supposedly that's backward compatibility ... */
+static gboolean
+gst_audio_decoder_src_query (GstPad * pad, GstQuery * query)
+{
+  GstAudioDecoder *dec;
+  GstPad *peerpad;
+  gboolean res = FALSE;
+
+  dec = GST_AUDIO_DECODER (GST_PAD_PARENT (pad));
+  peerpad = gst_pad_get_peer (GST_PAD (dec->sinkpad));
+
+  GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:
+    {
+      GstFormat format;
+
+      /* upstream in any case */
+      if ((res = gst_pad_query_default (pad, query)))
+        break;
+
+      gst_query_parse_duration (query, &format, NULL);
+      /* try answering TIME by converting from BYTE if subclass allows  */
+      if (format == GST_FORMAT_TIME && gst_audio_decoder_do_byte (dec)) {
+        gint64 value;
+
+        if (gst_pad_query_peer_duration (dec->sinkpad, GST_FORMAT_BYTES,
+                &value)) {
+          GST_LOG_OBJECT (dec, "upstream size %" G_GINT64_FORMAT, value);
+          if (gst_pad_query_convert (dec->sinkpad, GST_FORMAT_BYTES, value,
+                  GST_FORMAT_TIME, &value)) {
+            gst_query_set_duration (query, GST_FORMAT_TIME, value);
+            res = TRUE;
+          }
+        }
+      }
+      break;
+    }
+    case GST_QUERY_POSITION:
+    {
+      GstFormat format;
+      gint64 time, value;
+
+      if ((res = gst_pad_peer_query (dec->sinkpad, query))) {
+        GST_LOG_OBJECT (dec, "returning peer response");
+        break;
+      }
+
+      /* we start from the last seen time */
+      time = dec->segment.position;
+      /* correct for the segment values */
+      time = gst_segment_to_stream_time (&dec->segment, GST_FORMAT_TIME, time);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: our time: %" GST_TIME_FORMAT, query, GST_TIME_ARGS (time));
+
+      /* and convert to the final format */
+      gst_query_parse_position (query, &format, NULL);
+      if (!(res = gst_pad_query_convert (pad, GST_FORMAT_TIME, time,
+                  format, &value)))
+        break;
+
+      gst_query_set_position (query, format, value);
+
+      GST_LOG_OBJECT (dec,
+          "query %p: we return %" G_GINT64_FORMAT " (format %u)", query, value,
+          format);
+      break;
+    }
+    case GST_QUERY_FORMATS:
+    {
+      gst_query_set_formats (query, 3,
+          GST_FORMAT_TIME, GST_FORMAT_BYTES, GST_FORMAT_DEFAULT);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res = gst_audio_info_convert (&dec->priv->ctx.info,
+                  src_fmt, src_val, dest_fmt, &dest_val)))
+        break;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    case GST_QUERY_LATENCY:
+    {
+      if ((res = gst_pad_peer_query (dec->sinkpad, query))) {
+        gboolean live;
+        GstClockTime min_latency, max_latency;
+
+        gst_query_parse_latency (query, &live, &min_latency, &max_latency);
+        GST_DEBUG_OBJECT (dec, "Peer latency: live %d, min %"
+            GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
+            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+        GST_OBJECT_LOCK (dec);
+        /* add our latency */
+        if (min_latency != -1)
+          min_latency += dec->priv->ctx.min_latency;
+        if (max_latency != -1)
+          max_latency += dec->priv->ctx.max_latency;
+        GST_OBJECT_UNLOCK (dec);
+
+        gst_query_set_latency (query, live, min_latency, max_latency);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+  gst_object_unref (peerpad);
+  return res;
+}
+
+static gboolean
+gst_audio_decoder_stop (GstAudioDecoder * dec)
+{
+  GstAudioDecoderClass *klass;
+  gboolean ret = TRUE;
+
+  GST_DEBUG_OBJECT (dec, "gst_audio_decoder_stop");
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  if (klass->stop) {
+    ret = klass->stop (dec);
+  }
+
+  /* clean up */
+  gst_audio_decoder_reset (dec, TRUE);
+
+  if (ret)
+    dec->priv->active = FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_decoder_start (GstAudioDecoder * dec)
+{
+  GstAudioDecoderClass *klass;
+  gboolean ret = TRUE;
+
+  GST_DEBUG_OBJECT (dec, "gst_audio_decoder_start");
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  /* arrange clean state */
+  gst_audio_decoder_reset (dec, TRUE);
+
+  if (klass->start) {
+    ret = klass->start (dec);
+  }
+
+  if (ret)
+    dec->priv->active = TRUE;
+
+  return TRUE;
+}
+
+static void
+gst_audio_decoder_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAudioDecoder *dec;
+
+  dec = GST_AUDIO_DECODER (object);
+
+  switch (prop_id) {
+    case PROP_LATENCY:
+      g_value_set_int64 (value, dec->priv->latency);
+      break;
+    case PROP_TOLERANCE:
+      g_value_set_int64 (value, dec->priv->tolerance);
+      break;
+    case PROP_PLC:
+      g_value_set_boolean (value, dec->priv->plc);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_decoder_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAudioDecoder *dec;
+
+  dec = GST_AUDIO_DECODER (object);
+
+  switch (prop_id) {
+    case PROP_LATENCY:
+      dec->priv->latency = g_value_get_int64 (value);
+      break;
+    case PROP_TOLERANCE:
+      dec->priv->tolerance = g_value_get_int64 (value);
+      break;
+    case PROP_PLC:
+      dec->priv->plc = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_audio_decoder_change_state (GstElement * element, GstStateChange transition)
+{
+  GstAudioDecoder *codec;
+  GstStateChangeReturn ret;
+
+  codec = GST_AUDIO_DECODER (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      if (!gst_audio_decoder_start (codec)) {
+        goto start_failed;
+      }
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (!gst_audio_decoder_stop (codec)) {
+        goto stop_failed;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+
+start_failed:
+  {
+    GST_ELEMENT_ERROR (codec, LIBRARY, INIT, (NULL), ("Failed to start codec"));
+    return GST_STATE_CHANGE_FAILURE;
+  }
+stop_failed:
+  {
+    GST_ELEMENT_ERROR (codec, LIBRARY, INIT, (NULL), ("Failed to stop codec"));
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
+
+GstFlowReturn
+_gst_audio_decoder_error (GstAudioDecoder * dec, gint weight,
+    GQuark domain, gint code, gchar * txt, gchar * dbg, const gchar * file,
+    const gchar * function, gint line)
+{
+  if (txt)
+    GST_WARNING_OBJECT (dec, "error: %s", txt);
+  if (dbg)
+    GST_WARNING_OBJECT (dec, "error: %s", dbg);
+  dec->priv->error_count += weight;
+  dec->priv->discont = TRUE;
+  if (dec->priv->ctx.max_errors < dec->priv->error_count) {
+    gst_element_message_full (GST_ELEMENT (dec), GST_MESSAGE_ERROR,
+        domain, code, txt, dbg, file, function, line);
+    return GST_FLOW_ERROR;
+  } else {
+    return GST_FLOW_OK;
+  }
+}
+
+/**
+ * gst_audio_decoder_get_audio_info:
+ * @dec: a #GstAudioDecoder
+ *
+ * Returns: a #GstAudioInfo describing the input audio format
+ *
+ * Since: 0.10.36
+ */
+GstAudioInfo *
+gst_audio_decoder_get_audio_info (GstAudioDecoder * dec)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), NULL);
+
+  return &dec->priv->ctx.info;
+}
+
+/**
+ * gst_audio_decoder_set_plc_aware:
+ * @dec: a #GstAudioDecoder
+ * @plc: new plc state
+ *
+ * Indicates whether or not subclass handles packet loss concealment (plc).
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_plc_aware (GstAudioDecoder * dec, gboolean plc)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  dec->priv->ctx.do_plc = plc;
+}
+
+/**
+ * gst_audio_decoder_get_plc_aware:
+ * @dec: a #GstAudioDecoder
+ *
+ * Returns: currently configured plc handling
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_decoder_get_plc_aware (GstAudioDecoder * dec)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), 0);
+
+  return dec->priv->ctx.do_plc;
+}
+
+/**
+ * gst_audio_decoder_set_byte_time:
+ * @dec: a #GstAudioDecoder
+ * @enabled: whether to enable byte to time conversion
+ *
+ * Allows baseclass to perform byte to time estimated conversion.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_byte_time (GstAudioDecoder * dec, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  dec->priv->ctx.do_byte_time = enabled;
+}
+
+/**
+ * gst_audio_decoder_get_byte_time:
+ * @dec: a #GstAudioDecoder
+ *
+ * Returns: currently configured byte to time conversion setting
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_decoder_get_byte_time (GstAudioDecoder * dec)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), 0);
+
+  return dec->priv->ctx.do_byte_time;
+}
+
+/**
+ * gst_audio_decoder_get_delay:
+ * @dec: a #GstAudioDecoder
+ *
+ * Returns: currently configured decoder delay
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_decoder_get_delay (GstAudioDecoder * dec)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), 0);
+
+  return dec->priv->ctx.delay;
+}
+
+/**
+ * gst_audio_decoder_set_max_errors:
+ * @dec: a #GstAudioDecoder
+ * @num: max tolerated errors
+ *
+ * Sets numbers of tolerated decoder errors, where a tolerated one is then only
+ * warned about, but more than tolerated will lead to fatal error.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_max_errors (GstAudioDecoder * dec, gint num)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  dec->priv->ctx.max_errors = num;
+}
+
+/**
+ * gst_audio_decoder_get_max_errors:
+ * @dec: a #GstAudioDecoder
+ *
+ * Returns: currently configured decoder tolerated error count.
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_decoder_get_max_errors (GstAudioDecoder * dec)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), 0);
+
+  return dec->priv->ctx.max_errors;
+}
+
+/**
+ * gst_audio_decoder_set_latency:
+ * @dec: a #GstAudioDecoder
+ * @min: minimum latency
+ * @max: maximum latency
+ *
+ * Sets decoder latency.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_latency (GstAudioDecoder * dec,
+    GstClockTime min, GstClockTime max)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  GST_OBJECT_LOCK (dec);
+  dec->priv->ctx.min_latency = min;
+  dec->priv->ctx.max_latency = max;
+  GST_OBJECT_UNLOCK (dec);
+}
+
+/**
+ * gst_audio_decoder_get_latency:
+ * @dec: a #GstAudioDecoder
+ * @min: (out) (allow-none): a pointer to storage to hold minimum latency
+ * @max: (out) (allow-none): a pointer to storage to hold maximum latency
+ *
+ * Sets the variables pointed to by @min and @max to the currently configured
+ * latency.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_get_latency (GstAudioDecoder * dec,
+    GstClockTime * min, GstClockTime * max)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  GST_OBJECT_LOCK (dec);
+  if (min)
+    *min = dec->priv->ctx.min_latency;
+  if (max)
+    *max = dec->priv->ctx.max_latency;
+  GST_OBJECT_UNLOCK (dec);
+}
+
+/**
+ * gst_audio_decoder_get_parse_state:
+ * @dec: a #GstAudioDecoder
+ * @sync: a pointer to a variable to hold the current sync state
+ * @eos: a pointer to a variable to hold the current eos state
+ *
+ * Return current parsing (sync and eos) state.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_get_parse_state (GstAudioDecoder * dec,
+    gboolean * sync, gboolean * eos)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  if (sync)
+    *sync = dec->priv->ctx.sync;
+  if (eos)
+    *eos = dec->priv->ctx.eos;
+}
+
+/**
+ * gst_audio_decoder_set_plc:
+ * @dec: a #GstAudioDecoder
+ * @enabled: new state
+ *
+ * Enable or disable decoder packet loss concealment, provided subclass
+ * and codec are capable and allow handling plc.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_plc (GstAudioDecoder * dec, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  GST_LOG_OBJECT (dec, "enabled: %d", enabled);
+
+  GST_OBJECT_LOCK (dec);
+  dec->priv->plc = enabled;
+  GST_OBJECT_UNLOCK (dec);
+}
+
+/**
+ * gst_audio_decoder_get_plc:
+ * @dec: a #GstAudioDecoder
+ *
+ * Queries decoder packet loss concealment handling.
+ *
+ * Returns: TRUE if packet loss concealment is enabled.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gboolean
+gst_audio_decoder_get_plc (GstAudioDecoder * dec)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), FALSE);
+
+  GST_OBJECT_LOCK (dec);
+  result = dec->priv->plc;
+  GST_OBJECT_UNLOCK (dec);
+
+  return result;
+}
+
+/**
+ * gst_audio_decoder_set_min_latency:
+ * @dec: a #GstAudioDecoder
+ * @num: new minimum latency
+ *
+ * Sets decoder minimum aggregation latency.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_min_latency (GstAudioDecoder * dec, gint64 num)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  GST_OBJECT_LOCK (dec);
+  dec->priv->latency = num;
+  GST_OBJECT_UNLOCK (dec);
+}
+
+/**
+ * gst_audio_decoder_get_min_latency:
+ * @dec: a #GstAudioDecoder
+ *
+ * Queries decoder's latency aggregation.
+ *
+ * Returns: aggregation latency.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gint64
+gst_audio_decoder_get_min_latency (GstAudioDecoder * dec)
+{
+  gint64 result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), FALSE);
+
+  GST_OBJECT_LOCK (dec);
+  result = dec->priv->latency;
+  GST_OBJECT_UNLOCK (dec);
+
+  return result;
+}
+
+/**
+ * gst_audio_decoder_set_tolerance:
+ * @dec: a #GstAudioDecoder
+ * @tolerance: new tolerance
+ *
+ * Configures decoder audio jitter tolerance threshold.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_decoder_set_tolerance (GstAudioDecoder * dec, gint64 tolerance)
+{
+  g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+
+  GST_OBJECT_LOCK (dec);
+  dec->priv->tolerance = tolerance;
+  GST_OBJECT_UNLOCK (dec);
+}
+
+/**
+ * gst_audio_decoder_get_tolerance:
+ * @dec: a #GstAudioDecoder
+ *
+ * Queries current audio jitter tolerance threshold.
+ *
+ * Returns: decoder audio jitter tolerance threshold.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gint64
+gst_audio_decoder_get_tolerance (GstAudioDecoder * dec)
+{
+  gint64 result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_DECODER (dec), 0);
+
+  GST_OBJECT_LOCK (dec);
+  result = dec->priv->tolerance;
+  GST_OBJECT_UNLOCK (dec);
+
+  return result;
+}
diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h
new file mode 100644
index 0000000..25e6132
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiodecoder.h
@@ -0,0 +1,294 @@
+/* GStreamer
+ * Copyright (C) 2009 Igalia S.L.
+ * Author: Iago Toral Quiroga <itoral@igalia.com>
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef _GST_AUDIO_DECODER_H_
+#define _GST_AUDIO_DECODER_H_
+
+#ifndef GST_USE_UNSTABLE_API
+#warning "GstAudioDecoder is unstable API and may change in future."
+#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
+#endif
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_DECODER \
+  (gst_audio_decoder_get_type())
+#define GST_AUDIO_DECODER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoder))
+#define GST_AUDIO_DECODER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass))
+#define GST_AUDIO_DECODER_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_DECODER,GstAudioDecoderClass))
+#define GST_IS_AUDIO_DECODER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_DECODER))
+#define GST_IS_AUDIO_DECODER_CLASS(obj) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_DECODER))
+
+/**
+ * GST_AUDIO_DECODER_SINK_NAME:
+ *
+ * The name of the templates for the sink pad.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_DECODER_SINK_NAME    "sink"
+/**
+ * GST_AUDIO_DECODER_SRC_NAME:
+ *
+ * The name of the templates for the source pad.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_DECODER_SRC_NAME     "src"
+
+/**
+ * GST_AUDIO_DECODER_SRC_PAD:
+ * @obj: base audio codec instance
+ *
+ * Gives the pointer to the source #GstPad object of the element.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_DECODER_SRC_PAD(obj)         (((GstAudioDecoder *) (obj))->srcpad)
+
+/**
+ * GST_AUDIO_DECODER_SINK_PAD:
+ * @obj: base audio codec instance
+ *
+ * Gives the pointer to the sink #GstPad object of the element.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_DECODER_SINK_PAD(obj)        (((GstAudioDecoder *) (obj))->sinkpad)
+
+#define GST_AUDIO_DECODER_STREAM_LOCK(dec) g_static_rec_mutex_lock (&GST_AUDIO_DECODER (dec)->stream_lock)
+#define GST_AUDIO_DECODER_STREAM_UNLOCK(dec) g_static_rec_mutex_unlock (&GST_AUDIO_DECODER (dec)->stream_lock)
+
+typedef struct _GstAudioDecoder GstAudioDecoder;
+typedef struct _GstAudioDecoderClass GstAudioDecoderClass;
+
+typedef struct _GstAudioDecoderPrivate GstAudioDecoderPrivate;
+
+/* do not use this one, use macro below */
+GstFlowReturn _gst_audio_decoder_error (GstAudioDecoder *dec, gint weight,
+                                        GQuark domain, gint code,
+                                        gchar *txt, gchar *debug,
+                                        const gchar *file, const gchar *function,
+                                        gint line);
+
+/**
+ * GST_AUDIO_DECODER_ERROR:
+ * @el:     the base audio decoder element that generates the error
+ * @weight: element defined weight of the error, added to error count
+ * @domain: like CORE, LIBRARY, RESOURCE or STREAM (see #gstreamer-GstGError)
+ * @code:   error code defined for that domain (see #gstreamer-GstGError)
+ * @text:   the message to display (format string and args enclosed in
+ *          parentheses)
+ * @debug:  debugging information for the message (format string and args
+ *          enclosed in parentheses)
+ * @ret:    variable to receive return value
+ *
+ * Utility function that audio decoder elements can use in case they encountered
+ * a data processing error that may be fatal for the current "data unit" but
+ * need not prevent subsequent decoding.  Such errors are counted and if there
+ * are too many, as configured in the context's max_errors, the pipeline will
+ * post an error message and the application will be requested to stop further
+ * media processing.  Otherwise, it is considered a "glitch" and only a warning
+ * is logged. In either case, @ret is set to the proper value to
+ * return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_DECODER_ERROR(el, weight, domain, code, text, debug, ret) \
+G_STMT_START {                                                              \
+  gchar *__txt = _gst_element_error_printf text;                            \
+  gchar *__dbg = _gst_element_error_printf debug;                           \
+  GstAudioDecoder *dec = GST_AUDIO_DECODER (el);                   \
+  ret = _gst_audio_decoder_error (dec, weight, GST_ ## domain ## _ERROR,    \
+      GST_ ## domain ## _ERROR_ ## code, __txt, __dbg, __FILE__,            \
+      GST_FUNCTION, __LINE__);                                              \
+} G_STMT_END
+
+/**
+ * GstAudioDecoder:
+ *
+ * The opaque #GstAudioDecoder data structure.
+ *
+ * Since: 0.10.36
+ */
+struct _GstAudioDecoder
+{
+  GstElement element;
+
+  /*< protected >*/
+  /* source and sink pads */
+  GstPad         *sinkpad;
+  GstPad         *srcpad;
+
+  /* protects all data processing, i.e. is locked
+   * in the chain function, finish_frame and when
+   * processing serialized events */
+  GStaticRecMutex stream_lock;
+
+  /* MT-protected (with STREAM_LOCK) */
+  GstSegment      segment;
+
+  /*< private >*/
+  GstAudioDecoderPrivate *priv;
+  gpointer       _gst_reserved[GST_PADDING_LARGE];
+};
+
+/**
+ * GstAudioDecoderClass:
+ * @element_class:  The parent class structure
+ * @start:          Optional.
+ *                  Called when the element starts processing.
+ *                  Allows opening external resources.
+ * @stop:           Optional.
+ *                  Called when the element stops processing.
+ *                  Allows closing external resources.
+ * @set_format:     Notifies subclass of incoming data format (caps).
+ * @parse:          Optional.
+ *                  Allows chopping incoming data into manageable units (frames)
+ *                  for subsequent decoding.  This division is at subclass
+ *                  discretion and may or may not correspond to 1 (or more)
+ *                  frames as defined by audio format.
+ * @handle_frame:   Provides input data (or NULL to clear any remaining data)
+ *                  to subclass.  Input data ref management is performed by
+ *                  base class, subclass should not care or intervene.
+ * @flush:          Optional.
+ *                  Instructs subclass to clear any codec caches and discard
+ *                  any pending samples and not yet returned encoded data.
+ *                  @hard indicates whether a FLUSH is being processed,
+ *                  or otherwise a DISCONT (or conceptually similar).
+ * @event:          Optional.
+ *                  Event handler on the sink pad. This function should return
+ *                  TRUE if the event was handled and should be discarded
+ *                  (i.e. not unref'ed).
+ * @pre_push:       Optional.
+ *                  Called just prior to pushing (encoded data) buffer downstream.
+ *                  Subclass has full discretionary access to buffer,
+ *                  and a not OK flow return will abort downstream pushing.
+ *
+ * Subclasses can override any of the available virtual methods or not, as
+ * needed. At minimum @handle_frame (and likely @set_format) needs to be
+ * overridden.
+ *
+ * Since: 0.10.36
+ */
+struct _GstAudioDecoderClass
+{
+  GstElementClass element_class;
+
+  /*< public >*/
+  /* virtual methods for subclasses */
+
+  gboolean      (*start)              (GstAudioDecoder *dec);
+
+  gboolean      (*stop)               (GstAudioDecoder *dec);
+
+  gboolean      (*set_format)         (GstAudioDecoder *dec,
+                                       GstCaps *caps);
+
+  GstFlowReturn (*parse)              (GstAudioDecoder *dec,
+                                       GstAdapter *adapter,
+                                       gint *offset, gint *length);
+
+  GstFlowReturn (*handle_frame)       (GstAudioDecoder *dec,
+                                       GstBuffer *buffer);
+
+  void          (*flush)              (GstAudioDecoder *dec, gboolean hard);
+
+  GstFlowReturn (*pre_push)           (GstAudioDecoder *dec,
+                                       GstBuffer **buffer);
+
+  gboolean      (*event)              (GstAudioDecoder *dec,
+                                       GstEvent *event);
+
+  /*< private >*/
+  gpointer       _gst_reserved[GST_PADDING_LARGE];
+};
+
+GType             gst_audio_decoder_get_type (void);
+
+gboolean          gst_audio_decoder_set_outcaps  (GstAudioDecoder * dec,
+                                                  GstCaps * caps);
+
+GstFlowReturn     gst_audio_decoder_finish_frame (GstAudioDecoder * dec,
+                                                  GstBuffer * buf, gint frames);
+
+/* context parameters */
+GstAudioInfo    * gst_audio_decoder_get_audio_info (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_plc_aware  (GstAudioDecoder * dec,
+                                                    gboolean          plc);
+
+gint              gst_audio_decoder_get_plc_aware  (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_byte_time  (GstAudioDecoder * dec,
+                                                    gboolean          enabled);
+
+gint              gst_audio_decoder_get_byte_time  (GstAudioDecoder * dec);
+
+gint              gst_audio_decoder_get_delay      (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_max_errors (GstAudioDecoder * dec,
+                                                   gint               num);
+
+gint              gst_audio_decoder_get_max_errors (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_latency (GstAudioDecoder * dec,
+                                                 GstClockTime      min,
+                                                 GstClockTime      max);
+
+void              gst_audio_decoder_get_latency (GstAudioDecoder * dec,
+                                                 GstClockTime    * min,
+                                                 GstClockTime    * max);
+
+void              gst_audio_decoder_get_parse_state (GstAudioDecoder * dec,
+                                                     gboolean        * sync,
+                                                     gboolean        * eos);
+
+
+/* object properties */
+void              gst_audio_decoder_set_plc (GstAudioDecoder * dec,
+                                             gboolean          enabled);
+
+gboolean          gst_audio_decoder_get_plc (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_min_latency (GstAudioDecoder * dec,
+                                                     gint64            num);
+
+gint64            gst_audio_decoder_get_min_latency (GstAudioDecoder * dec);
+
+void              gst_audio_decoder_set_tolerance   (GstAudioDecoder * dec,
+                                                     gint64            tolerance);
+
+gint64            gst_audio_decoder_get_tolerance   (GstAudioDecoder * dec);
+
+G_END_DECLS
+
+#endif /* _GST_AUDIO_DECODER_H_ */
diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c
new file mode 100644
index 0000000..ad0fb8e
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioencoder.c
@@ -0,0 +1,2157 @@
+/* GStreamer
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudioencoder
+ * @short_description: Base class for audio encoders
+ * @see_also: #GstBaseTransform
+ * @since: 0.10.36
+ *
+ * This base class is for audio encoders turning raw audio samples into
+ * encoded audio data.
+ *
+ * GstAudioEncoder and subclass should cooperate as follows.
+ * <orderedlist>
+ * <listitem>
+ *   <itemizedlist><title>Configuration</title>
+ *   <listitem><para>
+ *     Initially, GstAudioEncoder calls @start when the encoder element
+ *     is activated, which allows subclass to perform any global setup.
+ *   </para></listitem>
+ *   <listitem><para>
+ *     GstAudioEncoder calls @set_format to inform subclass of the format
+ *     of input audio data that it is about to receive.  Subclass should
+ *     setup for encoding and configure various base class parameters
+ *     appropriately, notably those directing desired input data handling.
+ *     While unlikely, it might be called more than once, if changing input
+ *     parameters require reconfiguration.
+ *   </para></listitem>
+ *   <listitem><para>
+ *     GstAudioEncoder calls @stop at end of all processing.
+ *   </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * As of configuration stage, and throughout processing, GstAudioEncoder
+ * maintains various parameters that provide required context,
+ * e.g. describing the format of input audio data.
+ * Conversely, subclass can and should configure these context parameters
+ * to inform base class of its expectation w.r.t. buffer handling.
+ * <listitem>
+ *   <itemizedlist>
+ *   <title>Data processing</title>
+ *     <listitem><para>
+ *       Base class gathers input sample data (as directed by the context's
+ *       frame_samples and frame_max) and provides this to subclass' @handle_frame.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       If codec processing results in encoded data, subclass should call
+ *       @gst_audio_encoder_finish_frame to have encoded data pushed
+ *       downstream.  Alternatively, it might also call to indicate dropped
+ *       (non-encoded) samples.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       Just prior to actually pushing a buffer downstream,
+ *       it is passed to @pre_push.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       During the parsing process GstAudioEncoderClass will handle both
+ *       srcpad and sinkpad events. Sink events will be passed to subclass
+ *       if @event callback has been provided.
+ *     </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * <listitem>
+ *   <itemizedlist><title>Shutdown phase</title>
+ *   <listitem><para>
+ *     GstAudioEncoder class calls @stop to inform the subclass that data
+ *     parsing will be stopped.
+ *   </para></listitem>
+ *   </itemizedlist>
+ * </listitem>
+ * </orderedlist>
+ *
+ * Subclass is responsible for providing pad template caps for
+ * source and sink pads. The pads need to be named "sink" and "src". It also 
+ * needs to set the fixed caps on srcpad, when the format is ensured.  This
+ * is typically when base class calls subclass' @set_format function, though
+ * it might be delayed until calling @gst_audio_encoder_finish_frame.
+ *
+ * In summary, above process should have subclass concentrating on
+ * codec data processing while leaving other matters to base class,
+ * such as most notably timestamp handling.  While it may exert more control
+ * in this area (see e.g. @pre_push), it is very much not recommended.
+ *
+ * In particular, base class will either favor tracking upstream timestamps
+ * (at the possible expense of jitter) or aim to arrange for a perfect stream of
+ * output timestamps, depending on #GstAudioEncoder:perfect-timestamp.
+ * However, in the latter case, the input may not be so perfect or ideal, which
+ * is handled as follows.  An input timestamp is compared with the expected
+ * timestamp as dictated by input sample stream and if the deviation is less
+ * than #GstAudioEncoder:tolerance, the deviation is discarded.
+ * Otherwise, it is considered a discontuinity and subsequent output timestamp
+ * is resynced to the new position after performing configured discontinuity
+ * processing.  In the non-perfect-timestamp case, an upstream variation
+ * exceeding tolerance only leads to marking DISCONT on subsequent outgoing
+ * (while timestamps are adjusted to upstream regardless of variation).
+ * While DISCONT is also marked in the perfect-timestamp case, this one
+ * optionally (see #GstAudioEncoder:hard-resync)
+ * performs some additional steps, such as clipping of (early) input samples
+ * or draining all currently remaining input data, depending on the direction
+ * of the discontuinity.
+ *
+ * If perfect timestamps are arranged, it is also possible to request baseclass
+ * (usually set by subclass) to provide additional buffer metadata (in OFFSET
+ * and OFFSET_END) fields according to granule defined semantics currently
+ * needed by oggmux.  Specifically, OFFSET is set to granulepos (= sample count
+ * including buffer) and OFFSET_END to corresponding timestamp (as determined
+ * by same sample count and sample rate).
+ *
+ * Things that subclass need to take care of:
+ * <itemizedlist>
+ *   <listitem><para>Provide pad templates</para></listitem>
+ *   <listitem><para>
+ *      Set source pad caps when appropriate
+ *   </para></listitem>
+ *   <listitem><para>
+ *      Inform base class of buffer processing needs using context's
+ *      frame_samples and frame_bytes.
+ *   </para></listitem>
+ *   <listitem><para>
+ *      Set user-configurable properties to sane defaults for format and
+ *      implementing codec at hand, e.g. those controlling timestamp behaviour
+ *      and discontinuity processing.
+ *   </para></listitem>
+ *   <listitem><para>
+ *      Accept data in @handle_frame and provide encoded results to
+ *      @gst_audio_encoder_finish_frame.
+ *   </para></listitem>
+ * </itemizedlist>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstaudioencoder.h"
+#include <gst/base/gstadapter.h>
+#include <gst/audio/audio.h>
+#include <gst/pbutils/descriptions.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+
+GST_DEBUG_CATEGORY_STATIC (gst_audio_encoder_debug);
+#define GST_CAT_DEFAULT gst_audio_encoder_debug
+
+#define GST_AUDIO_ENCODER_GET_PRIVATE(obj)  \
+    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_ENCODER, \
+        GstAudioEncoderPrivate))
+
+enum
+{
+  PROP_0,
+  PROP_PERFECT_TS,
+  PROP_GRANULE,
+  PROP_HARD_RESYNC,
+  PROP_TOLERANCE
+};
+
+#define DEFAULT_PERFECT_TS   FALSE
+#define DEFAULT_GRANULE      FALSE
+#define DEFAULT_HARD_RESYNC  FALSE
+#define DEFAULT_TOLERANCE    40000000
+
+typedef struct _GstAudioEncoderContext
+{
+  /* input */
+  GstAudioInfo info;
+
+  /* output */
+  gint frame_samples_min, frame_samples_max;
+  gint frame_max;
+  gint lookahead;
+  /* MT-protected (with LOCK) */
+  GstClockTime min_latency;
+  GstClockTime max_latency;
+} GstAudioEncoderContext;
+
+struct _GstAudioEncoderPrivate
+{
+  /* activation status */
+  gboolean active;
+
+  /* input base/first ts as basis for output ts;
+   * kept nearly constant for perfect_ts,
+   * otherwise resyncs to upstream ts */
+  GstClockTime base_ts;
+  /* corresponding base granulepos */
+  gint64 base_gp;
+  /* input samples processed and sent downstream so far (w.r.t. base_ts) */
+  guint64 samples;
+
+  /* currently collected sample data */
+  GstAdapter *adapter;
+  /* offset in adapter up to which already supplied to encoder */
+  gint offset;
+  /* mark outgoing discont */
+  gboolean discont;
+  /* to guess duration of drained data */
+  GstClockTime last_duration;
+
+  /* subclass provided data in processing round */
+  gboolean got_data;
+  /* subclass gave all it could already */
+  gboolean drained;
+  /* subclass currently being forcibly drained */
+  gboolean force;
+
+  /* output bps estimatation */
+  /* global in samples seen */
+  guint64 samples_in;
+  /* global bytes sent out */
+  guint64 bytes_out;
+
+  /* context storage */
+  GstAudioEncoderContext ctx;
+
+  /* properties */
+  gint64 tolerance;
+  gboolean perfect_ts;
+  gboolean hard_resync;
+  gboolean granule;
+
+  /* pending tags */
+  GstTagList *tags;
+  /* pending serialized sink events, will be sent from finish_frame() */
+  GList *pending_events;
+};
+
+
+static GstElementClass *parent_class = NULL;
+
+static void gst_audio_encoder_class_init (GstAudioEncoderClass * klass);
+static void gst_audio_encoder_init (GstAudioEncoder * parse,
+    GstAudioEncoderClass * klass);
+
+GType
+gst_audio_encoder_get_type (void)
+{
+  static GType audio_encoder_type = 0;
+
+  if (!audio_encoder_type) {
+    static const GTypeInfo audio_encoder_info = {
+      sizeof (GstAudioEncoderClass),
+      (GBaseInitFunc) NULL,
+      (GBaseFinalizeFunc) NULL,
+      (GClassInitFunc) gst_audio_encoder_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAudioEncoder),
+      0,
+      (GInstanceInitFunc) gst_audio_encoder_init,
+    };
+    const GInterfaceInfo preset_interface_info = {
+      NULL,                     /* interface_init */
+      NULL,                     /* interface_finalize */
+      NULL                      /* interface_data */
+    };
+
+    audio_encoder_type = g_type_register_static (GST_TYPE_ELEMENT,
+        "GstAudioEncoder", &audio_encoder_info, G_TYPE_FLAG_ABSTRACT);
+
+    g_type_add_interface_static (audio_encoder_type, GST_TYPE_PRESET,
+        &preset_interface_info);
+  }
+  return audio_encoder_type;
+}
+
+static void gst_audio_encoder_finalize (GObject * object);
+static void gst_audio_encoder_reset (GstAudioEncoder * enc, gboolean full);
+
+static void gst_audio_encoder_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_audio_encoder_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static gboolean gst_audio_encoder_sink_activate_push (GstPad * pad,
+    gboolean active);
+
+static gboolean gst_audio_encoder_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_audio_encoder_sink_setcaps (GstAudioEncoder * enc,
+    GstCaps * caps);
+static GstFlowReturn gst_audio_encoder_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_audio_encoder_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_audio_encoder_sink_query (GstPad * pad, GstQuery * query);
+static const GstQueryType *gst_audio_encoder_get_query_types (GstPad * pad);
+static GstCaps *gst_audio_encoder_sink_getcaps (GstPad * pad, GstCaps * filter);
+
+static void
+gst_audio_encoder_class_init (GstAudioEncoderClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  parent_class = g_type_class_peek_parent (klass);
+
+  GST_DEBUG_CATEGORY_INIT (gst_audio_encoder_debug, "audioencoder", 0,
+      "audio encoder base class");
+
+  g_type_class_add_private (klass, sizeof (GstAudioEncoderPrivate));
+
+  gobject_class->set_property = gst_audio_encoder_set_property;
+  gobject_class->get_property = gst_audio_encoder_get_property;
+
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_audio_encoder_finalize);
+
+  /* properties */
+  g_object_class_install_property (gobject_class, PROP_PERFECT_TS,
+      g_param_spec_boolean ("perfect-timestamp", "Perfect Timestamps",
+          "Favour perfect timestamps over tracking upstream timestamps",
+          DEFAULT_PERFECT_TS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_GRANULE,
+      g_param_spec_boolean ("mark-granule", "Granule Marking",
+          "Apply granule semantics to buffer metadata (implies perfect-timestamp)",
+          DEFAULT_GRANULE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HARD_RESYNC,
+      g_param_spec_boolean ("hard-resync", "Hard Resync",
+          "Perform clipping and sample flushing upon discontinuity",
+          DEFAULT_HARD_RESYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_TOLERANCE,
+      g_param_spec_int64 ("tolerance", "Tolerance",
+          "Consider discontinuity if timestamp jitter/imperfection exceeds tolerance (ns)",
+          0, G_MAXINT64, DEFAULT_TOLERANCE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_audio_encoder_init (GstAudioEncoder * enc, GstAudioEncoderClass * bclass)
+{
+  GstPadTemplate *pad_template;
+
+  GST_DEBUG_OBJECT (enc, "gst_audio_encoder_init");
+
+  enc->priv = GST_AUDIO_ENCODER_GET_PRIVATE (enc);
+
+  /* only push mode supported */
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (bclass), "sink");
+  g_return_if_fail (pad_template != NULL);
+  enc->sinkpad = gst_pad_new_from_template (pad_template, "sink");
+  gst_pad_set_event_function (enc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_sink_event));
+  gst_pad_set_getcaps_function (enc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_sink_getcaps));
+  gst_pad_set_query_function (enc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_sink_query));
+  gst_pad_set_chain_function (enc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_chain));
+  gst_pad_set_activatepush_function (enc->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_sink_activate_push));
+  gst_element_add_pad (GST_ELEMENT (enc), enc->sinkpad);
+
+  GST_DEBUG_OBJECT (enc, "sinkpad created");
+
+  /* and we don't mind upstream traveling stuff that much ... */
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (bclass), "src");
+  g_return_if_fail (pad_template != NULL);
+  enc->srcpad = gst_pad_new_from_template (pad_template, "src");
+  gst_pad_set_query_function (enc->srcpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_src_query));
+  gst_pad_set_query_type_function (enc->srcpad,
+      GST_DEBUG_FUNCPTR (gst_audio_encoder_get_query_types));
+  gst_pad_use_fixed_caps (enc->srcpad);
+  gst_element_add_pad (GST_ELEMENT (enc), enc->srcpad);
+  GST_DEBUG_OBJECT (enc, "src created");
+
+  enc->priv->adapter = gst_adapter_new ();
+
+  g_static_rec_mutex_init (&enc->stream_lock);
+
+  /* property default */
+  enc->priv->granule = DEFAULT_GRANULE;
+  enc->priv->perfect_ts = DEFAULT_PERFECT_TS;
+  enc->priv->hard_resync = DEFAULT_HARD_RESYNC;
+  enc->priv->tolerance = DEFAULT_TOLERANCE;
+
+  /* init state */
+  gst_audio_encoder_reset (enc, TRUE);
+  GST_DEBUG_OBJECT (enc, "init ok");
+}
+
+static void
+gst_audio_encoder_reset (GstAudioEncoder * enc, gboolean full)
+{
+  GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+
+  GST_LOG_OBJECT (enc, "reset full %d", full);
+
+  if (full) {
+    enc->priv->active = FALSE;
+    enc->priv->samples_in = 0;
+    enc->priv->bytes_out = 0;
+    gst_audio_info_init (&enc->priv->ctx.info);
+    memset (&enc->priv->ctx, 0, sizeof (enc->priv->ctx));
+
+    if (enc->priv->tags)
+      gst_tag_list_free (enc->priv->tags);
+    enc->priv->tags = NULL;
+
+    g_list_foreach (enc->priv->pending_events, (GFunc) gst_event_unref, NULL);
+    g_list_free (enc->priv->pending_events);
+    enc->priv->pending_events = NULL;
+  }
+
+  gst_segment_init (&enc->segment, GST_FORMAT_TIME);
+
+  gst_adapter_clear (enc->priv->adapter);
+  enc->priv->got_data = FALSE;
+  enc->priv->drained = TRUE;
+  enc->priv->offset = 0;
+  enc->priv->base_ts = GST_CLOCK_TIME_NONE;
+  enc->priv->base_gp = -1;
+  enc->priv->samples = 0;
+  enc->priv->discont = FALSE;
+
+  GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+}
+
+static void
+gst_audio_encoder_finalize (GObject * object)
+{
+  GstAudioEncoder *enc = GST_AUDIO_ENCODER (object);
+
+  g_object_unref (enc->priv->adapter);
+
+  g_static_rec_mutex_free (&enc->stream_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/**
+ * gst_audio_encoder_finish_frame:
+ * @enc: a #GstAudioEncoder
+ * @buffer: encoded data
+ * @samples: number of samples (per channel) represented by encoded data
+ *
+ * Collects encoded data and pushes encoded data downstream.
+ * Source pad caps must be set when this is called.
+ *
+ * If @samples < 0, then best estimate is all samples provided to encoder
+ * (subclass) so far.  @buf may be NULL, in which case next number of @samples
+ * are considered discarded, e.g. as a result of discontinuous transmission,
+ * and a discontinuity is marked.
+ *
+ * Returns: a #GstFlowReturn that should be escalated to caller (of caller)
+ *
+ * Since: 0.10.36
+ */
+GstFlowReturn
+gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf,
+    gint samples)
+{
+  GstAudioEncoderClass *klass;
+  GstAudioEncoderPrivate *priv;
+  GstAudioEncoderContext *ctx;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+  priv = enc->priv;
+  ctx = &enc->priv->ctx;
+
+  /* subclass should know what it is producing by now */
+  g_return_val_if_fail (gst_pad_has_current_caps (enc->srcpad), GST_FLOW_ERROR);
+  /* subclass should not hand us no data */
+  g_return_val_if_fail (buf == NULL || gst_buffer_get_size (buf) > 0,
+      GST_FLOW_ERROR);
+
+  GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+
+  GST_LOG_OBJECT (enc, "accepting %d bytes encoded data as %d samples",
+      buf ? gst_buffer_get_size (buf) : -1, samples);
+
+  /* mark subclass still alive and providing */
+  if (G_LIKELY (buf))
+    priv->got_data = TRUE;
+
+  if (priv->pending_events) {
+    GList *pending_events, *l;
+
+    pending_events = priv->pending_events;
+    priv->pending_events = NULL;
+
+    GST_DEBUG_OBJECT (enc, "Pushing pending events");
+    for (l = pending_events; l; l = l->next)
+      gst_pad_push_event (enc->srcpad, l->data);
+    g_list_free (pending_events);
+  }
+
+  /* send after pending events, which likely includes newsegment event */
+  if (G_UNLIKELY (enc->priv->tags)) {
+    GstTagList *tags;
+#if 0
+    GstCaps *caps;
+#endif
+
+    /* add codec info to pending tags */
+    tags = enc->priv->tags;
+    /* no more pending */
+    enc->priv->tags = NULL;
+#if 0
+    caps = gst_pad_get_current_caps (enc->srcpad);
+    gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_CODEC, caps);
+    gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_AUDIO_CODEC,
+        caps);
+#endif
+    GST_DEBUG_OBJECT (enc, "sending tags %" GST_PTR_FORMAT, tags);
+    gst_element_found_tags_for_pad (GST_ELEMENT (enc), enc->srcpad, tags);
+  }
+
+  /* remove corresponding samples from input */
+  if (samples < 0)
+    samples = (enc->priv->offset / ctx->info.bpf);
+
+  if (G_LIKELY (samples)) {
+    /* track upstream ts if so configured */
+    if (!enc->priv->perfect_ts) {
+      guint64 ts, distance;
+
+      ts = gst_adapter_prev_timestamp (priv->adapter, &distance);
+      g_assert (distance % ctx->info.bpf == 0);
+      distance /= ctx->info.bpf;
+      GST_LOG_OBJECT (enc, "%" G_GUINT64_FORMAT " samples past prev_ts %"
+          GST_TIME_FORMAT, distance, GST_TIME_ARGS (ts));
+      GST_LOG_OBJECT (enc, "%" G_GUINT64_FORMAT " samples past base_ts %"
+          GST_TIME_FORMAT, priv->samples, GST_TIME_ARGS (priv->base_ts));
+      /* when draining adapter might be empty and no ts to offer */
+      if (GST_CLOCK_TIME_IS_VALID (ts) && ts != priv->base_ts) {
+        GstClockTimeDiff diff;
+        GstClockTime old_ts, next_ts;
+
+        /* passed into another buffer;
+         * mild check for discontinuity and only mark if so */
+        next_ts = ts +
+            gst_util_uint64_scale (distance, GST_SECOND, ctx->info.rate);
+        old_ts = priv->base_ts +
+            gst_util_uint64_scale (priv->samples, GST_SECOND, ctx->info.rate);
+        diff = GST_CLOCK_DIFF (next_ts, old_ts);
+        GST_LOG_OBJECT (enc, "ts diff %d ms", (gint) (diff / GST_MSECOND));
+        /* only mark discontinuity if beyond tolerance */
+        if (G_UNLIKELY (diff < -enc->priv->tolerance ||
+                diff > enc->priv->tolerance)) {
+          GST_DEBUG_OBJECT (enc, "marked discont");
+          priv->discont = TRUE;
+        }
+        if (diff > GST_SECOND / ctx->info.rate / 2 ||
+            diff < -GST_SECOND / ctx->info.rate / 2) {
+          GST_LOG_OBJECT (enc, "new upstream ts %" GST_TIME_FORMAT
+              " at distance %" G_GUINT64_FORMAT, GST_TIME_ARGS (ts), distance);
+          /* re-sync to upstream ts */
+          priv->base_ts = ts;
+          priv->samples = distance;
+        } else {
+          GST_LOG_OBJECT (enc, "new upstream ts only introduces jitter");
+        }
+      }
+    }
+    /* advance sample view */
+    if (G_UNLIKELY (samples * ctx->info.bpf > priv->offset)) {
+      if (G_LIKELY (!priv->force)) {
+        /* no way we can let this pass */
+        g_assert_not_reached ();
+        /* really no way */
+        goto overflow;
+      } else {
+        priv->offset = 0;
+        if (samples * ctx->info.bpf >= gst_adapter_available (priv->adapter))
+          gst_adapter_clear (priv->adapter);
+        else
+          gst_adapter_flush (priv->adapter, samples * ctx->info.bpf);
+      }
+    } else {
+      gst_adapter_flush (priv->adapter, samples * ctx->info.bpf);
+      priv->offset -= samples * ctx->info.bpf;
+      /* avoid subsequent stray prev_ts */
+      if (G_UNLIKELY (gst_adapter_available (priv->adapter) == 0))
+        gst_adapter_clear (priv->adapter);
+    }
+    /* sample count advanced below after buffer handling */
+  }
+
+  /* collect output */
+  if (G_LIKELY (buf)) {
+    gsize size;
+
+    size = gst_buffer_get_size (buf);
+
+    GST_LOG_OBJECT (enc, "taking %d bytes for output", size);
+    buf = gst_buffer_make_writable (buf);
+
+    /* decorate */
+    if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (priv->base_ts))) {
+      /* FIXME ? lookahead could lead to weird ts and duration ?
+       * (particularly if not in perfect mode) */
+      /* mind sample rounding and produce perfect output */
+      GST_BUFFER_TIMESTAMP (buf) = priv->base_ts +
+          gst_util_uint64_scale (priv->samples - ctx->lookahead, GST_SECOND,
+          ctx->info.rate);
+      GST_DEBUG_OBJECT (enc, "out samples %d", samples);
+      if (G_LIKELY (samples > 0)) {
+        priv->samples += samples;
+        GST_BUFFER_DURATION (buf) = priv->base_ts +
+            gst_util_uint64_scale (priv->samples - ctx->lookahead, GST_SECOND,
+            ctx->info.rate) - GST_BUFFER_TIMESTAMP (buf);
+        priv->last_duration = GST_BUFFER_DURATION (buf);
+      } else {
+        /* duration forecast in case of handling remainder;
+         * the last one is probably like the previous one ... */
+        GST_BUFFER_DURATION (buf) = priv->last_duration;
+      }
+      if (priv->base_gp >= 0) {
+        /* pamper oggmux */
+        /* FIXME: in longer run, muxer should take care of this ... */
+        /* offset_end = granulepos for ogg muxer */
+        GST_BUFFER_OFFSET_END (buf) = priv->base_gp + priv->samples -
+            enc->priv->ctx.lookahead;
+        /* offset = timestamp corresponding to granulepos for ogg muxer */
+        GST_BUFFER_OFFSET (buf) =
+            GST_FRAMES_TO_CLOCK_TIME (GST_BUFFER_OFFSET_END (buf),
+            ctx->info.rate);
+      } else {
+        GST_BUFFER_OFFSET (buf) = priv->bytes_out;
+        GST_BUFFER_OFFSET_END (buf) = priv->bytes_out + size;
+      }
+    }
+
+    priv->bytes_out += size;
+
+    if (G_UNLIKELY (priv->discont)) {
+      GST_LOG_OBJECT (enc, "marking discont");
+      GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+      priv->discont = FALSE;
+    }
+
+    if (klass->pre_push) {
+      /* last chance for subclass to do some dirty stuff */
+      ret = klass->pre_push (enc, &buf);
+      if (ret != GST_FLOW_OK || !buf) {
+        GST_DEBUG_OBJECT (enc, "subclass returned %s, buf %p",
+            gst_flow_get_name (ret), buf);
+        if (buf)
+          gst_buffer_unref (buf);
+        goto exit;
+      }
+    }
+
+    GST_LOG_OBJECT (enc, "pushing buffer of size %d with ts %" GST_TIME_FORMAT
+        ", duration %" GST_TIME_FORMAT, size,
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+    ret = gst_pad_push (enc->srcpad, buf);
+    GST_LOG_OBJECT (enc, "buffer pushed: %s", gst_flow_get_name (ret));
+  } else {
+    /* merely advance samples, most work for that already done above */
+    priv->samples += samples;
+  }
+
+exit:
+  GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+
+  return ret;
+
+  /* ERRORS */
+overflow:
+  {
+    GST_ELEMENT_ERROR (enc, STREAM, ENCODE,
+        ("received more encoded samples %d than provided %d",
+            samples, priv->offset / ctx->info.bpf), (NULL));
+    if (buf)
+      gst_buffer_unref (buf);
+    ret = GST_FLOW_ERROR;
+    goto exit;
+  }
+}
+
+ /* adapter tracking idea:
+  * - start of adapter corresponds with what has already been encoded
+  * (i.e. really returned by encoder subclass)
+  * - start + offset is what needs to be fed to subclass next */
+static GstFlowReturn
+gst_audio_encoder_push_buffers (GstAudioEncoder * enc, gboolean force)
+{
+  GstAudioEncoderClass *klass;
+  GstAudioEncoderPrivate *priv;
+  GstAudioEncoderContext *ctx;
+  gint av, need;
+  GstBuffer *buf;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+
+  g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR);
+
+  priv = enc->priv;
+  ctx = &enc->priv->ctx;
+
+  while (ret == GST_FLOW_OK) {
+
+    buf = NULL;
+    av = gst_adapter_available (priv->adapter);
+
+    g_assert (priv->offset <= av);
+    av -= priv->offset;
+
+    need =
+        ctx->frame_samples_min >
+        0 ? ctx->frame_samples_min * ctx->info.bpf : av;
+    GST_LOG_OBJECT (enc, "available: %d, needed: %d, force: %d", av, need,
+        force);
+
+    if ((need > av) || !av) {
+      if (G_UNLIKELY (force)) {
+        priv->force = TRUE;
+        need = av;
+      } else {
+        break;
+      }
+    } else {
+      priv->force = FALSE;
+    }
+
+    if (ctx->frame_samples_max > 0)
+      need = MIN (av, ctx->frame_samples_max * ctx->info.bpf);
+
+    if (ctx->frame_samples_min == ctx->frame_samples_max) {
+      /* if we have some extra metadata,
+       * provide for integer multiple of frames to allow for better granularity
+       * of processing */
+      if (ctx->frame_samples_min > 0 && need) {
+        if (ctx->frame_max > 1)
+          need = need * MIN ((av / need), ctx->frame_max);
+        else if (ctx->frame_max == 0)
+          need = need * (av / need);
+      }
+    }
+
+    if (need) {
+      const guint8 *data;
+
+      data = gst_adapter_map (priv->adapter, priv->offset + need);
+      buf =
+          gst_buffer_new_wrapped_full ((gpointer) data, NULL, priv->offset,
+          need);
+    }
+
+    GST_LOG_OBJECT (enc, "providing subclass with %d bytes at offset %d",
+        need, priv->offset);
+
+    /* mark this already as consumed,
+     * which it should be when subclass gives us data in exchange for samples */
+    priv->offset += need;
+    priv->samples_in += need / ctx->info.bpf;
+
+    priv->got_data = FALSE;
+    ret = klass->handle_frame (enc, buf);
+
+    if (G_LIKELY (buf)) {
+      gst_buffer_unref (buf);
+      gst_adapter_unmap (priv->adapter, 0);
+    }
+
+    /* no data to feed, no leftover provided, then bail out */
+    if (G_UNLIKELY (!buf && !priv->got_data)) {
+      priv->drained = TRUE;
+      GST_LOG_OBJECT (enc, "no more data drained from subclass");
+      break;
+    }
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_audio_encoder_drain (GstAudioEncoder * enc)
+{
+  if (enc->priv->drained)
+    return GST_FLOW_OK;
+  else
+    return gst_audio_encoder_push_buffers (enc, TRUE);
+}
+
+static void
+gst_audio_encoder_set_base_gp (GstAudioEncoder * enc)
+{
+  GstClockTime ts;
+
+  if (!enc->priv->granule)
+    return;
+
+  /* use running time for granule */
+  /* incoming data is clipped, so a valid input should yield a valid output */
+  ts = gst_segment_to_running_time (&enc->segment, GST_FORMAT_TIME,
+      enc->priv->base_ts);
+  if (GST_CLOCK_TIME_IS_VALID (ts)) {
+    enc->priv->base_gp =
+        GST_CLOCK_TIME_TO_FRAMES (enc->priv->base_ts, enc->priv->ctx.info.rate);
+    GST_DEBUG_OBJECT (enc, "new base gp %" G_GINT64_FORMAT, enc->priv->base_gp);
+  } else {
+    /* should reasonably have a valid base,
+     * otherwise start at 0 if we did not already start there earlier */
+    if (enc->priv->base_gp < 0) {
+      enc->priv->base_gp = 0;
+      GST_DEBUG_OBJECT (enc, "new base gp %" G_GINT64_FORMAT,
+          enc->priv->base_gp);
+    }
+  }
+}
+
+static GstFlowReturn
+gst_audio_encoder_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstAudioEncoder *enc;
+  GstAudioEncoderPrivate *priv;
+  GstAudioEncoderContext *ctx;
+  GstFlowReturn ret = GST_FLOW_OK;
+  gboolean discont;
+  gsize size;
+
+  enc = GST_AUDIO_ENCODER (GST_OBJECT_PARENT (pad));
+
+  priv = enc->priv;
+  ctx = &enc->priv->ctx;
+
+  GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+
+  /* should know what is coming by now */
+  if (!ctx->info.bpf)
+    goto not_negotiated;
+
+  size = gst_buffer_get_size (buffer);
+
+  GST_LOG_OBJECT (enc,
+      "received buffer of size %d with ts %" GST_TIME_FORMAT
+      ", duration %" GST_TIME_FORMAT, size,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
+
+  /* input shoud be whole number of sample frames */
+  if (size % ctx->info.bpf)
+    goto wrong_buffer;
+
+#ifndef GST_DISABLE_GST_DEBUG
+  {
+    GstClockTime duration;
+    GstClockTimeDiff diff;
+
+    /* verify buffer duration */
+    duration = gst_util_uint64_scale (size, GST_SECOND,
+        ctx->info.rate * ctx->info.bpf);
+    diff = GST_CLOCK_DIFF (duration, GST_BUFFER_DURATION (buffer));
+    if (GST_BUFFER_DURATION (buffer) != GST_CLOCK_TIME_NONE &&
+        (diff > GST_SECOND / ctx->info.rate / 2 ||
+            diff < -GST_SECOND / ctx->info.rate / 2)) {
+      GST_DEBUG_OBJECT (enc, "incoming buffer had incorrect duration %"
+          GST_TIME_FORMAT ", expected duration %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
+          GST_TIME_ARGS (duration));
+    }
+  }
+#endif
+
+  discont = GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+  if (G_UNLIKELY (discont)) {
+    GST_LOG_OBJECT (buffer, "marked discont");
+    enc->priv->discont = discont;
+  }
+
+  /* clip to segment */
+  /* NOTE: slightly painful linking -laudio only for this one ... */
+  buffer = gst_audio_buffer_clip (buffer, &enc->segment, ctx->info.rate,
+      ctx->info.bpf);
+  if (G_UNLIKELY (!buffer)) {
+    GST_DEBUG_OBJECT (buffer, "no data after clipping to segment");
+    goto done;
+  }
+
+  size = gst_buffer_get_size (buffer);
+
+  GST_LOG_OBJECT (enc,
+      "buffer after segment clipping has size %d with ts %" GST_TIME_FORMAT
+      ", duration %" GST_TIME_FORMAT, size,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
+
+  if (!GST_CLOCK_TIME_IS_VALID (priv->base_ts)) {
+    priv->base_ts = GST_BUFFER_TIMESTAMP (buffer);
+    GST_DEBUG_OBJECT (enc, "new base ts %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (priv->base_ts));
+    gst_audio_encoder_set_base_gp (enc);
+  }
+
+  /* check for continuity;
+   * checked elsewhere in non-perfect case */
+  if (enc->priv->perfect_ts) {
+    GstClockTimeDiff diff = 0;
+    GstClockTime next_ts = 0;
+
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer) &&
+        GST_CLOCK_TIME_IS_VALID (priv->base_ts)) {
+      guint64 samples;
+
+      samples = priv->samples +
+          gst_adapter_available (priv->adapter) / ctx->info.bpf;
+      next_ts = priv->base_ts +
+          gst_util_uint64_scale (samples, GST_SECOND, ctx->info.rate);
+      GST_LOG_OBJECT (enc, "buffer is %" G_GUINT64_FORMAT
+          " samples past base_ts %" GST_TIME_FORMAT
+          ", expected ts %" GST_TIME_FORMAT, samples,
+          GST_TIME_ARGS (priv->base_ts), GST_TIME_ARGS (next_ts));
+      diff = GST_CLOCK_DIFF (next_ts, GST_BUFFER_TIMESTAMP (buffer));
+      GST_LOG_OBJECT (enc, "ts diff %d ms", (gint) (diff / GST_MSECOND));
+      /* if within tolerance,
+       * discard buffer ts and carry on producing perfect stream,
+       * otherwise clip or resync to ts */
+      if (G_UNLIKELY (diff < -enc->priv->tolerance ||
+              diff > enc->priv->tolerance)) {
+        GST_DEBUG_OBJECT (enc, "marked discont");
+        discont = TRUE;
+      }
+    }
+
+    /* do some fancy tweaking in hard resync case */
+    if (discont && enc->priv->hard_resync) {
+      if (diff < 0) {
+        guint64 diff_bytes;
+
+        GST_WARNING_OBJECT (enc, "Buffer is older than expected ts %"
+            GST_TIME_FORMAT ".  Clipping buffer", GST_TIME_ARGS (next_ts));
+
+        diff_bytes =
+            GST_CLOCK_TIME_TO_FRAMES (-diff, ctx->info.rate) * ctx->info.bpf;
+        if (diff_bytes >= size) {
+          gst_buffer_unref (buffer);
+          goto done;
+        }
+        buffer = gst_buffer_make_writable (buffer);
+        gst_buffer_resize (buffer, diff_bytes, size - diff_bytes);
+
+        GST_BUFFER_TIMESTAMP (buffer) += diff;
+        /* care even less about duration after this */
+      } else {
+        /* drain stuff prior to resync */
+        gst_audio_encoder_drain (enc);
+      }
+    }
+    /* now re-sync ts */
+    priv->base_ts += diff;
+    gst_audio_encoder_set_base_gp (enc);
+    priv->discont |= discont;
+  }
+
+  gst_adapter_push (enc->priv->adapter, buffer);
+  /* new stuff, so we can push subclass again */
+  enc->priv->drained = FALSE;
+
+  ret = gst_audio_encoder_push_buffers (enc, FALSE);
+
+done:
+  GST_LOG_OBJECT (enc, "chain leaving");
+
+  GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+
+  return ret;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    GST_ELEMENT_ERROR (enc, CORE, NEGOTIATION, (NULL),
+        ("encoder not initialized"));
+    gst_buffer_unref (buffer);
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+wrong_buffer:
+  {
+    GST_ELEMENT_ERROR (enc, STREAM, ENCODE, (NULL),
+        ("buffer size %d not a multiple of %d", gst_buffer_get_size (buffer),
+            ctx->info.bpf));
+    gst_buffer_unref (buffer);
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static gboolean
+audio_info_is_equal (GstAudioInfo * from, GstAudioInfo * to)
+{
+  if (from == to)
+    return TRUE;
+  if (from->finfo == NULL || to->finfo == NULL)
+    return FALSE;
+  if (GST_AUDIO_INFO_FORMAT (from) != GST_AUDIO_INFO_FORMAT (to))
+    return FALSE;
+  if (GST_AUDIO_INFO_RATE (from) != GST_AUDIO_INFO_RATE (to))
+    return FALSE;
+  if (GST_AUDIO_INFO_CHANNELS (from) != GST_AUDIO_INFO_CHANNELS (to))
+    return FALSE;
+  if (GST_AUDIO_INFO_CHANNELS (from) > 64)
+    return TRUE;
+  return memcmp (from->position, to->position,
+      GST_AUDIO_INFO_CHANNELS (from) * sizeof (to->position[0]));
+}
+
+static gboolean
+gst_audio_encoder_sink_setcaps (GstAudioEncoder * enc, GstCaps * caps)
+{
+  GstAudioEncoderClass *klass;
+  GstAudioEncoderContext *ctx;
+  GstAudioInfo state;
+  gboolean res = TRUE, changed = FALSE;
+  guint old_rate;
+
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+
+  /* subclass must do something here ... */
+  g_return_val_if_fail (klass->set_format != NULL, FALSE);
+
+  ctx = &enc->priv->ctx;
+
+  GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+
+  GST_DEBUG_OBJECT (enc, "caps: %" GST_PTR_FORMAT, caps);
+
+  if (!gst_caps_is_fixed (caps))
+    goto refuse_caps;
+
+  /* adjust ts tracking to new sample rate */
+  old_rate = GST_AUDIO_INFO_RATE (&ctx->info);
+  if (GST_CLOCK_TIME_IS_VALID (enc->priv->base_ts) && old_rate) {
+    enc->priv->base_ts +=
+        GST_FRAMES_TO_CLOCK_TIME (enc->priv->samples, old_rate);
+    enc->priv->samples = 0;
+  }
+
+  if (!gst_audio_info_from_caps (&state, caps))
+    goto refuse_caps;
+
+  changed = !audio_info_is_equal (&state, &ctx->info);
+
+  if (changed) {
+    GstClockTime old_min_latency;
+    GstClockTime old_max_latency;
+
+    /* drain any pending old data stuff */
+    gst_audio_encoder_drain (enc);
+
+    /* context defaults */
+    enc->priv->ctx.frame_samples_min = 0;
+    enc->priv->ctx.frame_samples_max = 0;
+    enc->priv->ctx.frame_max = 0;
+    enc->priv->ctx.lookahead = 0;
+
+    /* element might report latency */
+    GST_OBJECT_LOCK (enc);
+    old_min_latency = ctx->min_latency;
+    old_max_latency = ctx->max_latency;
+    GST_OBJECT_UNLOCK (enc);
+
+    if (klass->set_format)
+      res = klass->set_format (enc, &state);
+
+    /* notify if new latency */
+    GST_OBJECT_LOCK (enc);
+    if ((ctx->min_latency > 0 && ctx->min_latency != old_min_latency) ||
+        (ctx->max_latency > 0 && ctx->max_latency != old_max_latency)) {
+      GST_OBJECT_UNLOCK (enc);
+      /* post latency message on the bus */
+      gst_element_post_message (GST_ELEMENT (enc),
+          gst_message_new_latency (GST_OBJECT (enc)));
+      GST_OBJECT_LOCK (enc);
+    }
+    GST_OBJECT_UNLOCK (enc);
+  } else {
+    GST_DEBUG_OBJECT (enc, "new audio format identical to configured format");
+  }
+
+exit:
+
+  GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+
+  return res;
+
+  /* ERRORS */
+refuse_caps:
+  {
+    GST_WARNING_OBJECT (enc, "rejected caps %" GST_PTR_FORMAT, caps);
+    goto exit;
+  }
+}
+
+
+/**
+ * gst_audio_encoder_proxy_getcaps:
+ * @enc: a #GstAudioEncoder
+ * @caps: initial caps
+ *
+ * Returns caps that express @caps (or sink template caps if @caps == NULL)
+ * restricted to channel/rate combinations supported by downstream elements
+ * (e.g. muxers).
+ *
+ * Returns: a #GstCaps owned by caller
+ *
+ * Since: 0.10.36
+ */
+GstCaps *
+gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc, GstCaps * caps)
+{
+  const GstCaps *templ_caps;
+  GstCaps *allowed = NULL;
+  GstCaps *fcaps, *filter_caps;
+  gint i, j;
+
+  /* we want to be able to communicate to upstream elements like audioconvert
+   * and audioresample any rate/channel restrictions downstream (e.g. muxer
+   * only accepting certain sample rates) */
+  templ_caps = caps ? caps : gst_pad_get_pad_template_caps (enc->sinkpad);
+  allowed = gst_pad_get_allowed_caps (enc->srcpad);
+  if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
+    fcaps = gst_caps_copy (templ_caps);
+    goto done;
+  }
+
+  GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, templ_caps);
+  GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
+
+  filter_caps = gst_caps_new_empty ();
+
+  for (i = 0; i < gst_caps_get_size (templ_caps); i++) {
+    GQuark q_name;
+
+    q_name = gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i));
+
+    /* pick rate + channel fields from allowed caps */
+    for (j = 0; j < gst_caps_get_size (allowed); j++) {
+      const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
+      const GValue *val;
+      GstStructure *s;
+
+      s = gst_structure_id_empty_new (q_name);
+      if ((val = gst_structure_get_value (allowed_s, "rate")))
+        gst_structure_set_value (s, "rate", val);
+      if ((val = gst_structure_get_value (allowed_s, "channels")))
+        gst_structure_set_value (s, "channels", val);
+      /* following might also make sense for some encoded formats,
+       * e.g. wavpack */
+      if ((val = gst_structure_get_value (allowed_s, "width")))
+        gst_structure_set_value (s, "width", val);
+      if ((val = gst_structure_get_value (allowed_s, "depth")))
+        gst_structure_set_value (s, "depth", val);
+      if ((val = gst_structure_get_value (allowed_s, "endianness")))
+        gst_structure_set_value (s, "endianness", val);
+      if ((val = gst_structure_get_value (allowed_s, "signed")))
+        gst_structure_set_value (s, "signed", val);
+      if ((val = gst_structure_get_value (allowed_s, "channel-positions")))
+        gst_structure_set_value (s, "channel-positions", val);
+
+      gst_caps_merge_structure (filter_caps, s);
+    }
+  }
+
+  fcaps = gst_caps_intersect (filter_caps, templ_caps);
+  gst_caps_unref (filter_caps);
+
+done:
+  gst_caps_replace (&allowed, NULL);
+
+  GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
+
+  return fcaps;
+}
+
+static GstCaps *
+gst_audio_encoder_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstAudioEncoder *enc;
+  GstAudioEncoderClass *klass;
+  GstCaps *caps;
+
+  enc = GST_AUDIO_ENCODER (gst_pad_get_parent (pad));
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+  g_assert (pad == enc->sinkpad);
+
+  if (klass->getcaps)
+    caps = klass->getcaps (enc, filter);
+  else
+    caps = gst_audio_encoder_proxy_getcaps (enc, NULL);
+  gst_object_unref (enc);
+
+  GST_LOG_OBJECT (enc, "returning caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static gboolean
+gst_audio_encoder_sink_eventfunc (GstAudioEncoder * enc, GstEvent * event)
+{
+  GstAudioEncoderClass *klass;
+  gboolean handled = FALSE;
+
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+    {
+      GstSegment seg;
+
+      gst_event_copy_segment (event, &seg);
+
+      if (seg.format == GST_FORMAT_TIME) {
+        GST_DEBUG_OBJECT (enc, "received TIME SEGMENT %" GST_PTR_FORMAT, &seg);
+      } else {
+        GST_DEBUG_OBJECT (enc, "received SEGMENT %" GST_PTR_FORMAT, &seg);
+        GST_DEBUG_OBJECT (enc, "unsupported format; ignoring");
+        break;
+      }
+
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      /* finish current segment */
+      gst_audio_encoder_drain (enc);
+      /* reset partially for new segment */
+      gst_audio_encoder_reset (enc, FALSE);
+      /* and follow along with segment */
+      enc->segment = seg;
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      break;
+    }
+
+    case GST_EVENT_FLUSH_START:
+      break;
+
+    case GST_EVENT_FLUSH_STOP:
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      /* discard any pending stuff */
+      /* TODO route through drain ?? */
+      if (!enc->priv->drained && klass->flush)
+        klass->flush (enc);
+      /* and get (re)set for the sequel */
+      gst_audio_encoder_reset (enc, FALSE);
+
+      g_list_foreach (enc->priv->pending_events, (GFunc) gst_event_unref, NULL);
+      g_list_free (enc->priv->pending_events);
+      enc->priv->pending_events = NULL;
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+
+      break;
+
+    case GST_EVENT_EOS:
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      gst_audio_encoder_drain (enc);
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      break;
+
+    case GST_EVENT_TAG:
+    {
+      GstTagList *tags;
+
+      gst_event_parse_tag (event, &tags);
+      tags = gst_tag_list_copy (tags);
+      gst_event_unref (event);
+
+      /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */
+      gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
+      gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC);
+      gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
+      gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC);
+      gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT);
+      gst_tag_list_remove_tag (tags, GST_TAG_BITRATE);
+      gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE);
+      gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE);
+      gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE);
+      gst_tag_list_remove_tag (tags, GST_TAG_ENCODER);
+      gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION);
+      event = gst_event_new_tag (tags);
+
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      enc->priv->pending_events =
+          g_list_append (enc->priv->pending_events, event);
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      handled = TRUE;
+      break;
+    }
+
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      gst_audio_encoder_sink_setcaps (enc, caps);
+      gst_event_unref (event);
+      handled = TRUE;
+      break;
+    }
+
+    default:
+      break;
+  }
+
+  return handled;
+}
+
+static gboolean
+gst_audio_encoder_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstAudioEncoder *enc;
+  GstAudioEncoderClass *klass;
+  gboolean handled = FALSE;
+  gboolean ret = TRUE;
+
+  enc = GST_AUDIO_ENCODER (gst_pad_get_parent (pad));
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+
+  GST_DEBUG_OBJECT (enc, "received event %d, %s", GST_EVENT_TYPE (event),
+      GST_EVENT_TYPE_NAME (event));
+
+  if (klass->event)
+    handled = klass->event (enc, event);
+
+  if (!handled)
+    handled = gst_audio_encoder_sink_eventfunc (enc, event);
+
+  if (!handled) {
+    /* Forward non-serialized events and EOS/FLUSH_STOP immediately.
+     * For EOS this is required because no buffer or serialized event
+     * will come after EOS and nothing could trigger another
+     * _finish_frame() call.
+     *
+     * For FLUSH_STOP this is required because it is expected
+     * to be forwarded immediately and no buffers are queued anyway.
+     */
+    if (!GST_EVENT_IS_SERIALIZED (event)
+        || GST_EVENT_TYPE (event) == GST_EVENT_EOS
+        || GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP) {
+      ret = gst_pad_event_default (pad, event);
+    } else {
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      enc->priv->pending_events =
+          g_list_append (enc->priv->pending_events, event);
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      ret = TRUE;
+    }
+  }
+
+  GST_DEBUG_OBJECT (enc, "event handled");
+
+  gst_object_unref (enc);
+  return ret;
+}
+
+static gboolean
+gst_audio_encoder_sink_query (GstPad * pad, GstQuery * query)
+{
+  gboolean res = TRUE;
+  GstAudioEncoder *enc;
+
+  enc = GST_AUDIO_ENCODER (gst_pad_get_parent (pad));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_FORMATS:
+    {
+      gst_query_set_formats (query, 3,
+          GST_FORMAT_TIME, GST_FORMAT_BYTES, GST_FORMAT_DEFAULT);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res = gst_audio_info_convert (&enc->priv->ctx.info,
+                  src_fmt, src_val, dest_fmt, &dest_val)))
+        goto error;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+error:
+  gst_object_unref (enc);
+  return res;
+}
+
+static const GstQueryType *
+gst_audio_encoder_get_query_types (GstPad * pad)
+{
+  static const GstQueryType gst_audio_encoder_src_query_types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    GST_QUERY_CONVERT,
+    GST_QUERY_LATENCY,
+    0
+  };
+
+  return gst_audio_encoder_src_query_types;
+}
+
+/*
+ * gst_audio_encoded_audio_convert:
+ * @fmt: audio format of the encoded audio
+ * @bytes: number of encoded bytes
+ * @samples: number of encoded samples
+ * @src_format: source format
+ * @src_value: source value
+ * @dest_format: destination format
+ * @dest_value: destination format
+ *
+ * Helper function to convert @src_value in @src_format to @dest_value in
+ * @dest_format for encoded audio data.  Conversion is possible between
+ * BYTE and TIME format by using estimated bitrate based on
+ * @samples and @bytes (and @fmt).
+ *
+ * Since: 0.10.36
+ */
+/* FIXME: make gst_audio_encoded_audio_convert() public? */
+static gboolean
+gst_audio_encoded_audio_convert (GstAudioInfo * fmt,
+    gint64 bytes, gint64 samples, GstFormat src_format,
+    gint64 src_value, GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = FALSE;
+
+  g_return_val_if_fail (dest_format != NULL, FALSE);
+  g_return_val_if_fail (dest_value != NULL, FALSE);
+
+  if (G_UNLIKELY (src_format == *dest_format || src_value == 0 ||
+          src_value == -1)) {
+    if (dest_value)
+      *dest_value = src_value;
+    return TRUE;
+  }
+
+  if (samples == 0 || bytes == 0 || fmt->rate == 0) {
+    GST_DEBUG ("not enough metadata yet to convert");
+    goto exit;
+  }
+
+  bytes *= fmt->rate;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_TIME:
+          *dest_value = gst_util_uint64_scale (src_value,
+              GST_SECOND * samples, bytes);
+          res = TRUE;
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = gst_util_uint64_scale (src_value, bytes,
+              samples * GST_SECOND);
+          res = TRUE;
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+
+exit:
+  return res;
+}
+
+/* FIXME ? are any of these queries (other than latency) an encoder's business
+ * also, the conversion stuff might seem to make sense, but seems to not mind
+ * segment stuff etc at all
+ * Supposedly that's backward compatibility ... */
+static gboolean
+gst_audio_encoder_src_query (GstPad * pad, GstQuery * query)
+{
+  GstAudioEncoder *enc;
+  GstPad *peerpad;
+  gboolean res = FALSE;
+
+  enc = GST_AUDIO_ENCODER (GST_PAD_PARENT (pad));
+  peerpad = gst_pad_get_peer (GST_PAD (enc->sinkpad));
+
+  GST_LOG_OBJECT (enc, "handling query: %" GST_PTR_FORMAT, query);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat fmt, req_fmt;
+      gint64 pos, val;
+
+      if ((res = gst_pad_peer_query (enc->sinkpad, query))) {
+        GST_LOG_OBJECT (enc, "returning peer response");
+        break;
+      }
+
+      if (!peerpad) {
+        GST_LOG_OBJECT (enc, "no peer");
+        break;
+      }
+
+      gst_query_parse_position (query, &req_fmt, NULL);
+      fmt = GST_FORMAT_TIME;
+      if (!(res = gst_pad_query_position (peerpad, fmt, &pos)))
+        break;
+
+      if ((res = gst_pad_query_convert (peerpad, fmt, pos, req_fmt, &val))) {
+        gst_query_set_position (query, req_fmt, val);
+      }
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      GstFormat fmt, req_fmt;
+      gint64 dur, val;
+
+      if ((res = gst_pad_peer_query (enc->sinkpad, query))) {
+        GST_LOG_OBJECT (enc, "returning peer response");
+        break;
+      }
+
+      if (!peerpad) {
+        GST_LOG_OBJECT (enc, "no peer");
+        break;
+      }
+
+      gst_query_parse_duration (query, &req_fmt, NULL);
+      fmt = GST_FORMAT_TIME;
+      if (!(res = gst_pad_query_duration (peerpad, fmt, &dur)))
+        break;
+
+      if ((res = gst_pad_query_convert (peerpad, fmt, dur, req_fmt, &val))) {
+        gst_query_set_duration (query, req_fmt, val);
+      }
+      break;
+    }
+    case GST_QUERY_FORMATS:
+    {
+      gst_query_set_formats (query, 2, GST_FORMAT_TIME, GST_FORMAT_BYTES);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      if (!(res = gst_audio_encoded_audio_convert (&enc->priv->ctx.info,
+                  enc->priv->bytes_out, enc->priv->samples_in, src_fmt, src_val,
+                  &dest_fmt, &dest_val)))
+        break;
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    case GST_QUERY_LATENCY:
+    {
+      if ((res = gst_pad_peer_query (enc->sinkpad, query))) {
+        gboolean live;
+        GstClockTime min_latency, max_latency;
+
+        gst_query_parse_latency (query, &live, &min_latency, &max_latency);
+        GST_DEBUG_OBJECT (enc, "Peer latency: live %d, min %"
+            GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
+            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+        GST_OBJECT_LOCK (enc);
+        /* add our latency */
+        if (min_latency != -1)
+          min_latency += enc->priv->ctx.min_latency;
+        if (max_latency != -1)
+          max_latency += enc->priv->ctx.max_latency;
+        GST_OBJECT_UNLOCK (enc);
+
+        gst_query_set_latency (query, live, min_latency, max_latency);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+  gst_object_unref (peerpad);
+  return res;
+}
+
+static void
+gst_audio_encoder_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAudioEncoder *enc;
+
+  enc = GST_AUDIO_ENCODER (object);
+
+  switch (prop_id) {
+    case PROP_PERFECT_TS:
+      if (enc->priv->granule && !g_value_get_boolean (value))
+        GST_WARNING_OBJECT (enc, "perfect-timestamp can not be set FALSE "
+            "while granule handling is enabled");
+      else
+        enc->priv->perfect_ts = g_value_get_boolean (value);
+      break;
+    case PROP_HARD_RESYNC:
+      enc->priv->hard_resync = g_value_get_boolean (value);
+      break;
+    case PROP_TOLERANCE:
+      enc->priv->tolerance = g_value_get_int64 (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_encoder_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAudioEncoder *enc;
+
+  enc = GST_AUDIO_ENCODER (object);
+
+  switch (prop_id) {
+    case PROP_PERFECT_TS:
+      g_value_set_boolean (value, enc->priv->perfect_ts);
+      break;
+    case PROP_GRANULE:
+      g_value_set_boolean (value, enc->priv->granule);
+      break;
+    case PROP_HARD_RESYNC:
+      g_value_set_boolean (value, enc->priv->hard_resync);
+      break;
+    case PROP_TOLERANCE:
+      g_value_set_int64 (value, enc->priv->tolerance);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_audio_encoder_activate (GstAudioEncoder * enc, gboolean active)
+{
+  GstAudioEncoderClass *klass;
+  gboolean result = FALSE;
+
+  klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+
+  g_return_val_if_fail (!enc->priv->granule || enc->priv->perfect_ts, FALSE);
+
+  GST_DEBUG_OBJECT (enc, "activate %d", active);
+
+  if (active) {
+
+    if (enc->priv->tags)
+      gst_tag_list_free (enc->priv->tags);
+    enc->priv->tags = gst_tag_list_new ();
+
+    if (!enc->priv->active && klass->start)
+      result = klass->start (enc);
+  } else {
+    /* We must make sure streaming has finished before resetting things
+     * and calling the ::stop vfunc */
+    GST_PAD_STREAM_LOCK (enc->sinkpad);
+    GST_PAD_STREAM_UNLOCK (enc->sinkpad);
+
+    if (enc->priv->active && klass->stop)
+      result = klass->stop (enc);
+
+    /* clean up */
+    gst_audio_encoder_reset (enc, TRUE);
+  }
+  GST_DEBUG_OBJECT (enc, "activate return: %d", result);
+  return result;
+}
+
+
+static gboolean
+gst_audio_encoder_sink_activate_push (GstPad * pad, gboolean active)
+{
+  gboolean result = TRUE;
+  GstAudioEncoder *enc;
+
+  enc = GST_AUDIO_ENCODER (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (enc, "sink activate push %d", active);
+
+  result = gst_audio_encoder_activate (enc, active);
+
+  if (result)
+    enc->priv->active = active;
+
+  GST_DEBUG_OBJECT (enc, "sink activate push return: %d", result);
+
+  gst_object_unref (enc);
+  return result;
+}
+
+/**
+ * gst_audio_encoder_get_audio_info:
+ * @enc: a #GstAudioEncoder
+ *
+ * Returns: a #GstAudioInfo describing the input audio format
+ *
+ * Since: 0.10.36
+ */
+GstAudioInfo *
+gst_audio_encoder_get_audio_info (GstAudioEncoder * enc)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), NULL);
+
+  return &enc->priv->ctx.info;
+}
+
+/**
+ * gst_audio_encoder_set_frame_samples_min:
+ * @enc: a #GstAudioEncoder
+ * @num: number of samples per frame
+ *
+ * Sets number of samples (per channel) subclass needs to be handed,
+ * at least or will be handed all available if 0.
+ *
+ * If an exact number of samples is required, gst_audio_encoder_set_frame_samples_max()
+ * must be called with the same number.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_frame_samples_min (GstAudioEncoder * enc, gint num)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  enc->priv->ctx.frame_samples_min = num;
+}
+
+/**
+ * gst_audio_encoder_get_frame_samples_min:
+ * @enc: a #GstAudioEncoder
+ *
+ * Returns: currently minimum requested samples per frame
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_encoder_get_frame_samples_min (GstAudioEncoder * enc)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), 0);
+
+  return enc->priv->ctx.frame_samples_min;
+}
+
+/**
+ * gst_audio_encoder_set_frame_samples_max:
+ * @enc: a #GstAudioEncoder
+ * @num: number of samples per frame
+ *
+ * Sets number of samples (per channel) subclass needs to be handed,
+ * at most or will be handed all available if 0.
+ *
+ * If an exact number of samples is required, gst_audio_encoder_set_frame_samples_min()
+ * must be called with the same number.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_frame_samples_max (GstAudioEncoder * enc, gint num)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  enc->priv->ctx.frame_samples_max = num;
+}
+
+/**
+ * gst_audio_encoder_get_frame_samples_min:
+ * @enc: a #GstAudioEncoder
+ *
+ * Returns: currently maximum requested samples per frame
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_encoder_get_frame_samples_max (GstAudioEncoder * enc)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), 0);
+
+  return enc->priv->ctx.frame_samples_max;
+}
+
+/**
+ * gst_audio_encoder_set_frame_max:
+ * @enc: a #GstAudioEncoder
+ * @num: number of frames
+ *
+ * Sets max number of frames accepted at once (assumed minimally 1).
+ * Requires @frame_samples_min and @frame_samples_max to be the equal.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_frame_max (GstAudioEncoder * enc, gint num)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  enc->priv->ctx.frame_max = num;
+}
+
+/**
+ * gst_audio_encoder_get_frame_max:
+ * @enc: a #GstAudioEncoder
+ *
+ * Returns: currently configured maximum handled frames
+ *
+ * Since: 0.10.36
+ */
+gint
+gst_audio_encoder_get_frame_max (GstAudioEncoder * enc)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), 0);
+
+  return enc->priv->ctx.frame_max;
+}
+
+/**
+ * gst_audio_encoder_set_lookahead:
+ * @enc: a #GstAudioEncoder
+ * @num: lookahead
+ *
+ * Sets encoder lookahead (in units of input rate samples)
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_lookahead (GstAudioEncoder * enc, gint num)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  enc->priv->ctx.lookahead = num;
+}
+
+/**
+ * gst_audio_encoder_get_lookahead:
+ * @enc: a #GstAudioEncoder
+ *
+ * Returns: currently configured encoder lookahead
+ */
+gint
+gst_audio_encoder_get_lookahead (GstAudioEncoder * enc)
+{
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), 0);
+
+  return enc->priv->ctx.lookahead;
+}
+
+/**
+ * gst_audio_encoder_set_latency:
+ * @enc: a #GstAudioEncoder
+ * @min: minimum latency
+ * @max: maximum latency
+ *
+ * Sets encoder latency.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_latency (GstAudioEncoder * enc,
+    GstClockTime min, GstClockTime max)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_OBJECT_LOCK (enc);
+  enc->priv->ctx.min_latency = min;
+  enc->priv->ctx.max_latency = max;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_get_latency:
+ * @enc: a #GstAudioEncoder
+ * @min: (out) (allow-none): a pointer to storage to hold minimum latency
+ * @max: (out) (allow-none): a pointer to storage to hold maximum latency
+ *
+ * Sets the variables pointed to by @min and @max to the currently configured
+ * latency.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_get_latency (GstAudioEncoder * enc,
+    GstClockTime * min, GstClockTime * max)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_OBJECT_LOCK (enc);
+  if (min)
+    *min = enc->priv->ctx.min_latency;
+  if (max)
+    *max = enc->priv->ctx.max_latency;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_set_mark_granule:
+ * @enc: a #GstAudioEncoder
+ * @enabled: new state
+ *
+ * Enable or disable encoder granule handling.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_mark_granule (GstAudioEncoder * enc, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_LOG_OBJECT (enc, "enabled: %d", enabled);
+
+  GST_OBJECT_LOCK (enc);
+  enc->priv->granule = enabled;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_get_mark_granule:
+ * @enc: a #GstAudioEncoder
+ *
+ * Queries if the encoder will handle granule marking.
+ *
+ * Returns: TRUE if granule marking is enabled.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gboolean
+gst_audio_encoder_get_mark_granule (GstAudioEncoder * enc)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), FALSE);
+
+  GST_OBJECT_LOCK (enc);
+  result = enc->priv->granule;
+  GST_OBJECT_UNLOCK (enc);
+
+  return result;
+}
+
+/**
+ * gst_audio_encoder_set_perfect_timestamp:
+ * @enc: a #GstAudioEncoder
+ * @enabled: new state
+ *
+ * Enable or disable encoder perfect output timestamp preference.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_perfect_timestamp (GstAudioEncoder * enc,
+    gboolean enabled)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_LOG_OBJECT (enc, "enabled: %d", enabled);
+
+  GST_OBJECT_LOCK (enc);
+  enc->priv->perfect_ts = enabled;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_get_perfect_timestamp:
+ * @enc: a #GstAudioEncoder
+ *
+ * Queries encoder perfect timestamp behaviour.
+ *
+ * Returns: TRUE if pefect timestamp setting enabled.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gboolean
+gst_audio_encoder_get_perfect_timestamp (GstAudioEncoder * enc)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), FALSE);
+
+  GST_OBJECT_LOCK (enc);
+  result = enc->priv->perfect_ts;
+  GST_OBJECT_UNLOCK (enc);
+
+  return result;
+}
+
+/**
+ * gst_audio_encoder_set_hard_sync:
+ * @enc: a #GstAudioEncoder
+ * @enabled: new state
+ *
+ * Sets encoder hard resync handling.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_hard_resync (GstAudioEncoder * enc, gboolean enabled)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_LOG_OBJECT (enc, "enabled: %d", enabled);
+
+  GST_OBJECT_LOCK (enc);
+  enc->priv->hard_resync = enabled;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_get_hard_sync:
+ * @enc: a #GstAudioEncoder
+ *
+ * Queries encoder's hard resync setting.
+ *
+ * Returns: TRUE if hard resync is enabled.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gboolean
+gst_audio_encoder_get_hard_resync (GstAudioEncoder * enc)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), FALSE);
+
+  GST_OBJECT_LOCK (enc);
+  result = enc->priv->hard_resync;
+  GST_OBJECT_UNLOCK (enc);
+
+  return result;
+}
+
+/**
+ * gst_audio_encoder_set_tolerance:
+ * @enc: a #GstAudioEncoder
+ * @tolerance: new tolerance
+ *
+ * Configures encoder audio jitter tolerance threshold.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_set_tolerance (GstAudioEncoder * enc, gint64 tolerance)
+{
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+
+  GST_OBJECT_LOCK (enc);
+  enc->priv->tolerance = tolerance;
+  GST_OBJECT_UNLOCK (enc);
+}
+
+/**
+ * gst_audio_encoder_get_tolerance:
+ * @enc: a #GstAudioEncoder
+ *
+ * Queries current audio jitter tolerance threshold.
+ *
+ * Returns: encoder audio jitter tolerance threshold.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+gint64
+gst_audio_encoder_get_tolerance (GstAudioEncoder * enc)
+{
+  gint64 result;
+
+  g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), 0);
+
+  GST_OBJECT_LOCK (enc);
+  result = enc->priv->tolerance;
+  GST_OBJECT_UNLOCK (enc);
+
+  return result;
+}
+
+/**
+ * gst_audio_encoder_merge_tags:
+ * @enc: a #GstAudioEncoder
+ * @tags: a #GstTagList to merge
+ * @mode: the #GstTagMergeMode to use
+ *
+ * Adds tags to so-called pending tags, which will be processed
+ * before pushing out data downstream.
+ *
+ * Note that this is provided for convenience, and the subclass is
+ * not required to use this and can still do tag handling on its own,
+ * although it should be aware that baseclass already takes care
+ * of the usual CODEC/AUDIO_CODEC tags.
+ *
+ * MT safe.
+ *
+ * Since: 0.10.36
+ */
+void
+gst_audio_encoder_merge_tags (GstAudioEncoder * enc,
+    const GstTagList * tags, GstTagMergeMode mode)
+{
+  GstTagList *otags;
+
+  g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+  g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags));
+
+  GST_OBJECT_LOCK (enc);
+  if (tags)
+    GST_DEBUG_OBJECT (enc, "merging tags %" GST_PTR_FORMAT, tags);
+  otags = enc->priv->tags;
+  enc->priv->tags = gst_tag_list_merge (enc->priv->tags, tags, mode);
+  if (otags)
+    gst_tag_list_free (otags);
+  GST_OBJECT_UNLOCK (enc);
+}
diff --git a/gst-libs/gst/audio/gstaudioencoder.h b/gst-libs/gst/audio/gstaudioencoder.h
new file mode 100644
index 0000000..7685b18
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioencoder.h
@@ -0,0 +1,257 @@
+/* GStreamer
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_ENCODER_H__
+#define __GST_AUDIO_ENCODER_H__
+
+#ifndef GST_USE_UNSTABLE_API
+#warning "GstAudioEncoder is unstable API and may change in future."
+#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
+#endif
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_ENCODER		   (gst_audio_encoder_get_type())
+#define GST_AUDIO_ENCODER(obj)		   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoder))
+#define GST_AUDIO_ENCODER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass))
+#define GST_AUDIO_ENCODER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_ENCODER,GstAudioEncoderClass))
+#define GST_IS_AUDIO_ENCODER(obj)	   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_ENCODER))
+#define GST_IS_AUDIO_ENCODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_ENCODER))
+#define GST_AUDIO_ENCODER_CAST(obj)	((GstAudioEncoder *)(obj))
+
+/**
+ * GST_AUDIO_ENCODER_SINK_NAME:
+ *
+ * the name of the templates for the sink pad
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_ENCODER_SINK_NAME	"sink"
+/**
+ * GST_AUDIO_ENCODER_SRC_NAME:
+ *
+ * the name of the templates for the source pad
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_ENCODER_SRC_NAME	        "src"
+
+/**
+ * GST_AUDIO_ENCODER_SRC_PAD:
+ * @obj: base parse instance
+ *
+ * Gives the pointer to the source #GstPad object of the element.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_ENCODER_SRC_PAD(obj)	(GST_AUDIO_ENCODER_CAST (obj)->srcpad)
+
+/**
+ * GST_AUDIO_ENCODER_SINK_PAD:
+ * @obj: base parse instance
+ *
+ * Gives the pointer to the sink #GstPad object of the element.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_ENCODER_SINK_PAD(obj)	(GST_AUDIO_ENCODER_CAST (obj)->sinkpad)
+
+/**
+ * GST_AUDIO_ENCODER_SEGMENT:
+ * @obj: base parse instance
+ *
+ * Gives the segment of the element.
+ *
+ * Since: 0.10.36
+ */
+#define GST_AUDIO_ENCODER_SEGMENT(obj)     (GST_AUDIO_ENCODER_CAST (obj)->segment)
+
+#define GST_AUDIO_ENCODER_STREAM_LOCK(enc) g_static_rec_mutex_lock (&GST_AUDIO_ENCODER (enc)->stream_lock)
+#define GST_AUDIO_ENCODER_STREAM_UNLOCK(enc) g_static_rec_mutex_unlock (&GST_AUDIO_ENCODER (enc)->stream_lock)
+
+typedef struct _GstAudioEncoder GstAudioEncoder;
+typedef struct _GstAudioEncoderClass GstAudioEncoderClass;
+
+typedef struct _GstAudioEncoderPrivate GstAudioEncoderPrivate;
+
+/**
+ * GstAudioEncoder:
+ *
+ * The opaque #GstAudioEncoder data structure.
+ *
+ * Since: 0.10.36
+ */
+struct _GstAudioEncoder {
+  GstElement     element;
+
+  /*< protected >*/
+  /* source and sink pads */
+  GstPad         *sinkpad;
+  GstPad         *srcpad;
+
+  /* protects all data processing, i.e. is locked
+   * in the chain function, finish_frame and when
+   * processing serialized events */
+  GStaticRecMutex stream_lock;
+
+  /* MT-protected (with STREAM_LOCK) */
+  GstSegment      segment;
+
+  /*< private >*/
+  GstAudioEncoderPrivate *priv;
+  gpointer       _gst_reserved[GST_PADDING_LARGE];
+};
+
+/**
+ * GstAudioEncoderClass:
+ * @element_class:  The parent class structure
+ * @start:          Optional.
+ *                  Called when the element starts processing.
+ *                  Allows opening external resources.
+ * @stop:           Optional.
+ *                  Called when the element stops processing.
+ *                  Allows closing external resources.
+ * @set_format:     Notifies subclass of incoming data format.
+ *                  GstAudioInfo contains the format according to provided caps.
+ * @handle_frame:   Provides input samples (or NULL to clear any remaining data)
+ *                  according to directions as configured by the subclass
+ *                  using the API.  Input data ref management is performed
+ *                  by base class, subclass should not care or intervene.
+ * @flush:          Optional.
+ *                  Instructs subclass to clear any codec caches and discard
+ *                  any pending samples and not yet returned encoded data.
+ * @event:          Optional.
+ *                  Event handler on the sink pad. This function should return
+ *                  TRUE if the event was handled and should be discarded
+ *                  (i.e. not unref'ed).
+ * @pre_push:       Optional.
+ *                  Called just prior to pushing (encoded data) buffer downstream.
+ *                  Subclass has full discretionary access to buffer,
+ *                  and a not OK flow return will abort downstream pushing.
+ * @getcaps:        Optional.
+ *                  Allows for a custom sink getcaps implementation (e.g.
+ *                  for multichannel input specification).  If not implemented,
+ *                  default returns gst_audio_encoder_proxy_getcaps
+ *                  applied to sink template caps.
+ *
+ * Subclasses can override any of the available virtual methods or not, as
+ * needed. At minimum @set_format and @handle_frame needs to be overridden.
+ *
+ * Since: 0.10.36
+ */
+struct _GstAudioEncoderClass {
+  GstElementClass element_class;
+
+  /*< public >*/
+  /* virtual methods for subclasses */
+
+  gboolean      (*start)              (GstAudioEncoder *enc);
+
+  gboolean      (*stop)               (GstAudioEncoder *enc);
+
+  gboolean      (*set_format)         (GstAudioEncoder *enc,
+                                       GstAudioInfo        *info);
+
+  GstFlowReturn (*handle_frame)       (GstAudioEncoder *enc,
+                                       GstBuffer *buffer);
+
+  void          (*flush)              (GstAudioEncoder *enc);
+
+  GstFlowReturn (*pre_push)           (GstAudioEncoder *enc,
+                                       GstBuffer **buffer);
+
+  gboolean      (*event)              (GstAudioEncoder *enc,
+                                       GstEvent *event);
+
+  GstCaps *     (*getcaps)            (GstAudioEncoder *enc, GstCaps *filter);
+
+  /*< private >*/
+  gpointer       _gst_reserved[GST_PADDING_LARGE];
+};
+
+GType           gst_audio_encoder_get_type         (void);
+
+GstFlowReturn   gst_audio_encoder_finish_frame (GstAudioEncoder * enc,
+                                                GstBuffer       * buffer,
+                                                gint              samples);
+
+GstCaps *       gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc,
+                                                 GstCaps         * caps);
+
+
+/* context parameters */
+GstAudioInfo  * gst_audio_encoder_get_audio_info (GstAudioEncoder * enc);
+
+gint            gst_audio_encoder_get_frame_samples_min (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_frame_samples_min (GstAudioEncoder * enc, gint num);
+
+gint            gst_audio_encoder_get_frame_samples_max (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_frame_samples_max (GstAudioEncoder * enc, gint num);
+
+gint            gst_audio_encoder_get_frame_max (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_frame_max (GstAudioEncoder * enc, gint num);
+
+gint            gst_audio_encoder_get_lookahead (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_lookahead (GstAudioEncoder * enc, gint num);
+
+void            gst_audio_encoder_get_latency (GstAudioEncoder * enc,
+                                               GstClockTime    * min,
+                                               GstClockTime    * max);
+
+void            gst_audio_encoder_set_latency (GstAudioEncoder * enc,
+                                               GstClockTime      min,
+                                               GstClockTime      max);
+
+/* object properties */
+
+void            gst_audio_encoder_set_mark_granule (GstAudioEncoder * enc,
+                                                    gboolean enabled);
+
+gboolean        gst_audio_encoder_get_mark_granule (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_perfect_timestamp (GstAudioEncoder * enc,
+                                                         gboolean          enabled);
+
+gboolean        gst_audio_encoder_get_perfect_timestamp (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_hard_resync (GstAudioEncoder * enc,
+                                                   gboolean          enabled);
+
+gboolean        gst_audio_encoder_get_hard_resync (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_set_tolerance (GstAudioEncoder * enc,
+                                                 gint64            tolerance);
+
+gint64          gst_audio_encoder_get_tolerance (GstAudioEncoder * enc);
+
+void            gst_audio_encoder_merge_tags (GstAudioEncoder * enc,
+                                              const GstTagList * tags, GstTagMergeMode mode);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_ENCODER_H__ */
diff --git a/gst-libs/gst/audio/gstaudiofilter.c b/gst-libs/gst/audio/gstaudiofilter.c
new file mode 100644
index 0000000..6ef6de9
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiofilter.c
@@ -0,0 +1,200 @@
+/* GStreamer audio filter base class
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ * Copyright (C) <2007> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudiofilter
+ * @short_description: Base class for simple audio filters
+ *
+ * #GstAudioFilter is a #GstBaseTransform<!-- -->-derived base class for simple audio
+ * filters, ie. those that output the same format that they get as input.
+ *
+ * #GstAudioFilter will parse the input format for you (with error checking)
+ * before calling your setup function. Also, elements deriving from
+ * #GstAudioFilter may use gst_audio_filter_class_add_pad_templates() from
+ * their class_init function to easily configure the set of caps/formats that
+ * the element is able to handle.
+ *
+ * Derived classes should override the #GstAudioFilterClass.setup() and
+ * #GstBaseTransformClass.transform_ip() and/or
+ * #GstBaseTransformClass.transform()
+ * virtual functions in their class_init function.
+ *
+ * Last reviewed on 2007-02-03 (0.10.11.1)
+ *
+ * Since: 0.10.12
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstaudiofilter.h"
+
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (audiofilter_dbg);
+#define GST_CAT_DEFAULT audiofilter_dbg
+
+static GstStateChangeReturn gst_audio_filter_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean gst_audio_filter_set_caps (GstBaseTransform * btrans,
+    GstCaps * incaps, GstCaps * outcaps);
+static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans,
+    GstCaps * caps, gsize * size);
+
+#define do_init G_STMT_START { \
+    GST_DEBUG_CATEGORY_INIT (audiofilter_dbg, "audiofilter", 0, "audiofilter"); \
+} G_STMT_END
+
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstAudioFilter, gst_audio_filter,
+    GST_TYPE_BASE_TRANSFORM, do_init);
+
+static void
+gst_audio_filter_class_init (GstAudioFilterClass * klass)
+{
+  GstBaseTransformClass *basetrans_class = (GstBaseTransformClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_audio_filter_change_state);
+  basetrans_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_filter_set_caps);
+  basetrans_class->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_audio_filter_get_unit_size);
+}
+
+static void
+gst_audio_filter_init (GstAudioFilter * self)
+{
+  /* nothing to do here */
+}
+
+/* we override the state change vfunc here instead of GstBaseTransform's stop
+ * vfunc, so GstAudioFilter-derived elements can override ::stop() for their
+ * own purposes without having to worry about chaining up */
+static GstStateChangeReturn
+gst_audio_filter_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstAudioFilter *filter = GST_AUDIO_FILTER (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      gst_audio_info_init (&filter->info);
+      break;
+    default:
+      break;
+  }
+
+  ret =
+      GST_ELEMENT_CLASS (gst_audio_filter_parent_class)->change_state (element,
+      transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_audio_info_init (&filter->info);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_audio_filter_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  GstAudioFilterClass *klass;
+  GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
+  gboolean ret = TRUE;
+
+  GST_LOG_OBJECT (filter, "caps: %" GST_PTR_FORMAT, incaps);
+
+  if (!gst_audio_info_from_caps (&filter->info, incaps))
+    goto invalid_format;
+
+  klass = GST_AUDIO_FILTER_CLASS_CAST (G_OBJECT_GET_CLASS (filter));
+
+  if (klass->setup)
+    ret = klass->setup (filter, &filter->info);
+
+  return ret;
+
+  /* ERROR */
+invalid_format:
+  {
+    GST_WARNING_OBJECT (filter, "couldn't parse %" GST_PTR_FORMAT, incaps);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
+    gsize * size)
+{
+  GstStructure *structure;
+  gboolean ret = TRUE;
+  gint width, channels;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  ret &= gst_structure_get_int (structure, "width", &width);
+  ret &= gst_structure_get_int (structure, "channels", &channels);
+
+  if (ret)
+    *size = (width / 8) * channels;
+
+  return ret;
+}
+
+/**
+ * gst_audio_filter_class_add_pad_templates:
+ * @klass: an #GstAudioFilterClass
+ * @allowed_caps: what formats the filter can handle, as #GstCaps
+ *
+ * Convenience function to add pad templates to this element class, with
+ * @allowed_caps as the caps that can be handled.
+ *
+ * This function is usually used from within a GObject class_init function.
+ *
+ * Since: 0.10.12
+ */
+void
+gst_audio_filter_class_add_pad_templates (GstAudioFilterClass * klass,
+    GstCaps * allowed_caps)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstPadTemplate *pad_template;
+
+  g_return_if_fail (GST_IS_AUDIO_FILTER_CLASS (klass));
+  g_return_if_fail (GST_IS_CAPS (allowed_caps));
+
+  pad_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+      allowed_caps);
+  gst_element_class_add_pad_template (element_class, pad_template);
+
+  pad_template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+      allowed_caps);
+  gst_element_class_add_pad_template (element_class, pad_template);
+}
diff --git a/gst-libs/gst/audio/gstaudiofilter.h b/gst-libs/gst/audio/gstaudiofilter.h
new file mode 100644
index 0000000..dfa75e1
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiofilter.h
@@ -0,0 +1,103 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_AUDIO_FILTER_H__
+#define __GST_AUDIO_FILTER_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstAudioFilter GstAudioFilter;
+typedef struct _GstAudioFilterClass GstAudioFilterClass;
+
+#define GST_TYPE_AUDIO_FILTER \
+  (gst_audio_filter_get_type())
+#define GST_AUDIO_FILTER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_FILTER,GstAudioFilter))
+#define GST_AUDIO_FILTER_CAST(obj) \
+  ((GstAudioFilter *) (obj))
+#define GST_AUDIO_FILTER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_FILTER,GstAudioFilterClass))
+#define GST_AUDIO_FILTER_CLASS_CAST(klass) \
+  ((GstAudioFilterClass *) (klass))
+#define GST_IS_AUDIO_FILTER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_FILTER))
+#define GST_IS_AUDIO_FILTER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_FILTER))
+
+/**
+ * GstAudioFilter:
+ *
+ * Base class for audio filters with the same format for input and output.
+ *
+ * Since: 0.10.12
+ */
+struct _GstAudioFilter {
+  GstBaseTransform basetransform;
+
+  /*< protected >*/
+  GstAudioInfo info;   /* currently configured format */
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+#define GST_AUDIO_FILTER_INFO(filter)     (&GST_AUDIO_FILTER_CAST(filter)->info)
+
+#define GST_AUDIO_FILTER_FORMAT(filter)   (GST_AUDIO_INFO_FORMAT(GST_AUDIO_FILTER_INFO(filter)))
+#define GST_AUDIO_FILTER_RATE(filter)     (GST_AUDIO_INFO_RATE(GST_AUDIO_FILTER_INFO(filter)))
+#define GST_AUDIO_FILTER_CHANNELS(filter) (GST_AUDIO_INFO_CHANNELS(GST_AUDIO_FILTER_INFO(filter)))
+#define GST_AUDIO_FILTER_BPF(filter)      (GST_AUDIO_INFO_BPF(GST_AUDIO_FILTER_INFO(filter)))
+#define GST_AUDIO_FILTER_BPS(filter)      (GST_AUDIO_INFO_BPS(GST_AUDIO_FILTER_INFO(filter)))
+
+/**
+ * GstAudioFilterClass:
+ * @basetransformclass: parent class
+ * @setup: virtual function called whenever the format changes
+ *
+ * In addition to the @setup virtual function, you should also override the
+ * GstBaseTransform::transform and/or GstBaseTransform::transform_ip virtual
+ * function.
+ *
+ * Since: 0.10.12
+ */
+
+struct _GstAudioFilterClass {
+  GstBaseTransformClass basetransformclass;
+
+  /* virtual function, called whenever the format changes */
+  gboolean  (*setup) (GstAudioFilter * filter, const GstAudioInfo * info);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType   gst_audio_filter_get_type (void);
+
+void    gst_audio_filter_class_add_pad_templates (GstAudioFilterClass * klass,
+                                                  GstCaps             * allowed_caps);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_FILTER_H__ */
+
diff --git a/gst-libs/gst/audio/gstaudioiec61937.c b/gst-libs/gst/audio/gstaudioiec61937.c
new file mode 100644
index 0000000..5742d28
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioiec61937.c
@@ -0,0 +1,321 @@
+/* GStreamer audio helper functions for IEC 61937 payloading
+ * (c) 2011 Intel Corporation
+ *     2011 Collabora Multimedia
+ *     2011 Arun Raghavan <arun.raghavan@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudioiec61937
+ * @short_description: Utility functions for IEC 61937 payloading
+ * @since: 0.10.35
+ *
+ * This module contains some helper functions for encapsulating various
+ * audio formats in IEC 61937 headers and padding.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstaudioiec61937.h"
+
+#define IEC61937_HEADER_SIZE      8
+#define IEC61937_PAYLOAD_SIZE_AC3 (1536 * 4)
+#define IEC61937_PAYLOAD_SIZE_EAC3 (6144 * 4)
+
+static gint
+caps_get_int_field (const GstCaps * caps, const gchar * field)
+{
+  const GstStructure *st;
+  gint ret = 0;
+
+  st = gst_caps_get_structure (caps, 0);
+  gst_structure_get_int (st, field, &ret);
+
+  return ret;
+}
+
+static const gchar *
+caps_get_string_field (const GstCaps * caps, const gchar * field)
+{
+  const GstStructure *st = gst_caps_get_structure (caps, 0);
+  return gst_structure_get_string (st, field);
+}
+
+/**
+ * gst_audio_iec61937_frame_size:
+ * @spec: the ringbufer spec
+ *
+ * Calculated the size of the buffer expected by gst_audio_iec61937_payload() for
+ * payloading type from @spec.
+ *
+ * Returns: the size or 0 if the given @type is not supported or cannot be
+ * payloaded.
+ *
+ * Since: 0.10.35
+ */
+guint
+gst_audio_iec61937_frame_size (const GstRingBufferSpec * spec)
+{
+  switch (spec->type) {
+    case GST_BUFTYPE_AC3:
+      return IEC61937_PAYLOAD_SIZE_AC3;
+
+    case GST_BUFTYPE_EAC3:
+      /* Check that the parser supports /some/ alignment. Need to be less
+       * strict about this at checking time since the alignment is dynamically
+       * set at the moment. */
+      if (caps_get_string_field (spec->caps, "alignment"))
+        return IEC61937_PAYLOAD_SIZE_EAC3;
+      else
+        return 0;
+
+    case GST_BUFTYPE_DTS:
+    {
+      gint dts_frame_size = caps_get_int_field (spec->caps, "frame-size");
+      gint iec_frame_size = caps_get_int_field (spec->caps, "block-size") * 4;
+
+      /* Note: this will also (correctly) fail if either field is missing */
+      if (iec_frame_size >= (dts_frame_size + IEC61937_HEADER_SIZE))
+        return iec_frame_size;
+      else
+        return 0;
+    }
+
+    case GST_BUFTYPE_MPEG:
+    {
+      int version, layer, channels, frames;
+
+      version = caps_get_int_field (spec->caps, "mpegaudioversion");
+      layer = caps_get_int_field (spec->caps, "layer");
+      channels = caps_get_int_field (spec->caps, "channels");
+
+      /* Bail out if we can't figure out either, if it's MPEG 2.5, or if it's
+       * MP3 with multichannel audio */
+      if (!version || !layer || version == 3 || channels > 2)
+        return 0;
+
+      if (version == 1 && layer == 1)
+        frames = 384;
+      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+        frames = 768;
+      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+        frames = 2304;
+      else
+        frames = 1152;
+
+      return frames * 4;
+    }
+
+    default:
+      return 0;
+  }
+}
+
+/**
+ * gst_audio_iec61937_payload:
+ * @src: a buffer containing the data to payload
+ * @src_n: size of @src in bytes
+ * @dst: the destination buffer to store the payloaded contents in. Should not
+ *       overlap with @src
+ * @dst_n: size of @dst in bytes
+ * @spec: the ringbufer spec for @src
+ *
+ * Payloads @src in the form specified by IEC 61937 for the type from @spec and
+ * stores the result in @dst. @src must contain exactly one frame of data and
+ * the frame is not checked for errors.
+ *
+ * Returns: transfer-full: %TRUE if the payloading was successful, %FALSE
+ * otherwise.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_audio_iec61937_payload (const guint8 * src, guint src_n, guint8 * dst,
+    guint dst_n, const GstRingBufferSpec * spec)
+{
+  guint i, tmp;
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  guint8 zero = 0, one = 1, two = 2, three = 3, four = 4, five = 5, six = 6,
+      seven = 7;
+#else
+  /* We need to send the data byte-swapped */
+  guint8 zero = 1, one = 0, two = 3, three = 2, four = 5, five = 4, six = 7,
+      seven = 6;
+#endif
+
+  g_return_val_if_fail (src != NULL, FALSE);
+  g_return_val_if_fail (dst != NULL, FALSE);
+  g_return_val_if_fail (src != dst, FALSE);
+  g_return_val_if_fail (dst_n >= gst_audio_iec61937_frame_size (spec), FALSE);
+
+  if (dst_n < src_n + IEC61937_HEADER_SIZE)
+    return FALSE;
+
+  /* Pa, Pb */
+  dst[zero] = 0xF8;
+  dst[one] = 0x72;
+  dst[two] = 0x4E;
+  dst[three] = 0x1F;
+
+  switch (spec->type) {
+    case GST_BUFTYPE_AC3:
+    {
+      g_return_val_if_fail (src_n >= 6, FALSE);
+
+      /* Pc: bit 13-15 - stream number (0)
+       *     bit 11-12 - reserved (0)
+       *     bit  8-10 - bsmod from AC3 frame */
+      dst[four] = src[5] & 0x7;
+      /* Pc: bit    7  - error bit (0)
+       *     bit  5-6  - subdata type (0)
+       *     bit  0-4  - data type (1) */
+      dst[five] = 1;
+      /* Pd: bit 15-0  - frame size in bits */
+      tmp = src_n * 8;
+      dst[six] = (guint8) (tmp >> 8);
+      dst[seven] = (guint8) (tmp & 0xff);
+
+      break;
+    }
+
+    case GST_BUFTYPE_EAC3:
+    {
+      if (g_str_equal (caps_get_string_field (spec->caps, "alignment"),
+              "iec61937"))
+        return FALSE;
+
+      /* Pc: bit 13-15 - stream number (0)
+       *     bit 11-12 - reserved (0)
+       *     bit  8-10 - bsmod from E-AC3 frame if present */
+      /* FIXME: this works, but nicer if we can put in the actual bsmod */
+      dst[four] = 0;
+      /* Pc: bit    7  - error bit (0)
+       *     bit  5-6  - subdata type (0)
+       *     bit  0-4  - data type (21) */
+      dst[five] = 21;
+      /* Pd: bit 15-0  - frame size in bytes */
+      dst[six] = ((guint16) src_n) >> 8;
+      dst[seven] = ((guint16) src_n) & 0xff;
+
+      break;
+    }
+
+    case GST_BUFTYPE_DTS:
+    {
+      int blocksize = caps_get_int_field (spec->caps, "block-size");
+
+      g_return_val_if_fail (src_n != 0, FALSE);
+
+      if (blocksize == 0)
+        return FALSE;
+
+      /* Pc: bit 13-15 - stream number (0)
+       *     bit 11-12 - reserved (0)
+       *     bit  8-10 - for DTS type I-III (0) */
+      dst[four] = 0;
+      /* Pc: bit    7  - error bit (0)
+       *     bit  5-6  - reserved (0)
+       *     bit  0-4  - data type (11 = type I, 12 = type II,
+       *                            13 = type III) */
+      dst[five] = 11 + (blocksize / 1024);
+      /* Pd: bit 15-0  - frame size in bytes */
+      dst[six] = ((guint16) src_n) >> 8;
+      dst[seven] = ((guint16) src_n) & 0xff;
+      break;
+    }
+
+    case GST_BUFTYPE_MPEG:
+    {
+      int version, layer;
+
+      version = caps_get_int_field (spec->caps, "mpegaudioversion");
+      layer = caps_get_int_field (spec->caps, "layer");
+
+      g_return_val_if_fail (version > 0 && layer > 0, FALSE);
+
+      /* NOTE: multichannel audio (MPEG-2) is not supported */
+
+      /* Pc: bit 13-15 - stream number (0)
+       *     bit 11-12 - reserved (0)
+       *     bit  9-10 - 0 - no dynamic range control
+       *               - 2 - dynamic range control exists
+       *               - 1,3 - reserved
+       *     bit    8  - Normal (0) or Karaoke (1) mode */
+      dst[four] = 0;
+      /* Pc: bit    7  - error bit (0)
+       *     bit  5-6  - reserved (0)
+       *     bit  0-4  - data type (04 = MPEG 1, Layer 1
+       *                            05 = MPEG 1, Layer 2, 3 / MPEG 2, w/o ext.
+       *                            06 = MPEG 2, with extension
+       *                            08 - MPEG 2 LSF, Layer 1
+       *                            09 - MPEG 2 LSF, Layer 2
+       *                            10 - MPEG 2 LSF, Layer 3 */
+      if (version == 1 && layer == 1)
+        dst[five] = 0x04;
+      else if ((version == 1 && (layer == 2 || layer == 3)) ||
+          (version == 2 && spec->info.rate >= 32000))
+        dst[five] = 0x05;
+      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+        dst[five] = 0x08;
+      else if (version == 2 && layer == 2 && spec->info.rate < 32000)
+        dst[five] = 0x09;
+      else if (version == 2 && layer == 3 && spec->info.rate < 32000)
+        dst[five] = 0x0A;
+      else
+        g_return_val_if_reached (FALSE);
+      /* Pd: bit 15-0  - frame size in bits */
+      dst[six] = ((guint16) src_n * 8) >> 8;
+      dst[seven] = ((guint16) src_n * 8) & 0xff;
+
+      break;
+    }
+
+    default:
+      return FALSE;
+  }
+
+  /* Copy the payload */
+  i = 8;
+
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  memcpy (dst + i, src, src_n);
+#else
+  /* Byte-swapped again */
+  /* FIXME: orc-ify this */
+  for (tmp = 1; tmp < src_n; tmp += 2) {
+    dst[i + tmp - 1] = src[tmp];
+    dst[i + tmp] = src[tmp - 1];
+  }
+  /* Do we have 1 byte remaining? */
+  if (src_n % 2) {
+    dst[i + src_n - 1] = 0;
+    dst[i + src_n] = src[src_n - 1];
+    i++;
+  }
+#endif
+
+  i += src_n;
+
+  /* Zero the rest */
+  memset (dst + i, 0, dst_n - i);
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/audio/gstaudioiec61937.h b/gst-libs/gst/audio/gstaudioiec61937.h
new file mode 100644
index 0000000..b33297a
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioiec61937.h
@@ -0,0 +1,31 @@
+/* GStreamer audio helper functions for IEC 61937 payloading
+ * (c) 2011 Intel Corporation
+ *     2011 Collabora Multimedia
+ *     2011 Arun Raghavan <arun.raghavan@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_IEC61937_H__
+#define __GST_AUDIO_IEC61937_H__
+
+#include <gst/audio/gstringbuffer.h>
+
+guint gst_audio_iec61937_frame_size (const GstRingBufferSpec * spec);
+gboolean gst_audio_iec61937_payload (const guint8 * src, guint src_n,
+    guint8 * dst, guint dst_n, const GstRingBufferSpec * spec);
+
+#endif /* __GST_AUDIO_IEC61937_H__ */
diff --git a/gst-libs/gst/audio/gstaudiosink.c b/gst-libs/gst/audio/gstaudiosink.c
new file mode 100644
index 0000000..68e7c99
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiosink.c
@@ -0,0 +1,614 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstaudiosink.c: simple audio sink base class
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudiosink
+ * @short_description: Simple base class for audio sinks
+ * @see_also: #GstBaseAudioSink, #GstRingBuffer, #GstAudioSink.
+ *
+ * This is the most simple base class for audio sinks that only requires
+ * subclasses to implement a set of simple functions:
+ *
+ * <variablelist>
+ *   <varlistentry>
+ *     <term>open()</term>
+ *     <listitem><para>Open the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>prepare()</term>
+ *     <listitem><para>Configure the device with the specified format.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>write()</term>
+ *     <listitem><para>Write samples to the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>reset()</term>
+ *     <listitem><para>Unblock writes and flush the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>delay()</term>
+ *     <listitem><para>Get the number of samples written but not yet played 
+ *     by the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>unprepare()</term>
+ *     <listitem><para>Undo operations done by prepare.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>close()</term>
+ *     <listitem><para>Close the device.</para></listitem>
+ *   </varlistentry>
+ * </variablelist>
+ *
+ * All scheduling of samples and timestamps is done in this base class
+ * together with #GstBaseAudioSink using a default implementation of a
+ * #GstRingBuffer that uses threads.
+ *
+ * Last reviewed on 2006-09-27 (0.10.12)
+ */
+
+#include <string.h>
+
+#include "gstaudiosink.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_audio_sink_debug);
+#define GST_CAT_DEFAULT gst_audio_sink_debug
+
+#define GST_TYPE_AUDIORING_BUFFER        \
+        (gst_audioringbuffer_get_type())
+#define GST_AUDIORING_BUFFER(obj)        \
+        (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIORING_BUFFER,GstAudioRingBuffer))
+#define GST_AUDIORING_BUFFER_CLASS(klass) \
+        (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIORING_BUFFER,GstAudioRingBufferClass))
+#define GST_AUDIORING_BUFFER_GET_CLASS(obj) \
+        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIORING_BUFFER, GstAudioRingBufferClass))
+#define GST_AUDIORING_BUFFER_CAST(obj)        \
+        ((GstAudioRingBuffer *)obj)
+#define GST_IS_AUDIORING_BUFFER(obj)     \
+        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIORING_BUFFER))
+#define GST_IS_AUDIORING_BUFFER_CLASS(klass)\
+        (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIORING_BUFFER))
+
+typedef struct _GstAudioRingBuffer GstAudioRingBuffer;
+typedef struct _GstAudioRingBufferClass GstAudioRingBufferClass;
+
+#define GST_AUDIORING_BUFFER_GET_COND(buf) (((GstAudioRingBuffer *)buf)->cond)
+#define GST_AUDIORING_BUFFER_WAIT(buf)     (g_cond_wait (GST_AUDIORING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf)))
+#define GST_AUDIORING_BUFFER_SIGNAL(buf)   (g_cond_signal (GST_AUDIORING_BUFFER_GET_COND (buf)))
+#define GST_AUDIORING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_AUDIORING_BUFFER_GET_COND (buf)))
+
+struct _GstAudioRingBuffer
+{
+  GstRingBuffer object;
+
+  gboolean running;
+  gint queuedseg;
+
+  GCond *cond;
+};
+
+struct _GstAudioRingBufferClass
+{
+  GstRingBufferClass parent_class;
+};
+
+static void gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass);
+static void gst_audioringbuffer_init (GstAudioRingBuffer * ringbuffer,
+    GstAudioRingBufferClass * klass);
+static void gst_audioringbuffer_dispose (GObject * object);
+static void gst_audioringbuffer_finalize (GObject * object);
+
+static GstRingBufferClass *ring_parent_class = NULL;
+
+static gboolean gst_audioringbuffer_open_device (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_close_device (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_acquire (GstRingBuffer * buf,
+    GstRingBufferSpec * spec);
+static gboolean gst_audioringbuffer_release (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_start (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_pause (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_stop (GstRingBuffer * buf);
+static guint gst_audioringbuffer_delay (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_activate (GstRingBuffer * buf,
+    gboolean active);
+
+/* ringbuffer abstract base class */
+static GType
+gst_audioringbuffer_get_type (void)
+{
+  static GType ringbuffer_type = 0;
+
+  if (!ringbuffer_type) {
+    static const GTypeInfo ringbuffer_info = {
+      sizeof (GstAudioRingBufferClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_audioringbuffer_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAudioRingBuffer),
+      0,
+      (GInstanceInitFunc) gst_audioringbuffer_init,
+      NULL
+    };
+
+    ringbuffer_type =
+        g_type_register_static (GST_TYPE_RING_BUFFER, "GstAudioSinkRingBuffer",
+        &ringbuffer_info, 0);
+  }
+  return ringbuffer_type;
+}
+
+static void
+gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstRingBufferClass *gstringbuffer_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstringbuffer_class = (GstRingBufferClass *) klass;
+
+  ring_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->dispose = gst_audioringbuffer_dispose;
+  gobject_class->finalize = gst_audioringbuffer_finalize;
+
+  gstringbuffer_class->open_device =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_open_device);
+  gstringbuffer_class->close_device =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_close_device);
+  gstringbuffer_class->acquire =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_acquire);
+  gstringbuffer_class->release =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_release);
+  gstringbuffer_class->start = GST_DEBUG_FUNCPTR (gst_audioringbuffer_start);
+  gstringbuffer_class->pause = GST_DEBUG_FUNCPTR (gst_audioringbuffer_pause);
+  gstringbuffer_class->resume = GST_DEBUG_FUNCPTR (gst_audioringbuffer_start);
+  gstringbuffer_class->stop = GST_DEBUG_FUNCPTR (gst_audioringbuffer_stop);
+
+  gstringbuffer_class->delay = GST_DEBUG_FUNCPTR (gst_audioringbuffer_delay);
+  gstringbuffer_class->activate =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_activate);
+}
+
+typedef gint (*WriteFunc) (GstAudioSink * sink, gpointer data, guint length);
+
+/* this internal thread does nothing else but write samples to the audio device.
+ * It will write each segment in the ringbuffer and will update the play
+ * pointer. 
+ * The start/stop methods control the thread.
+ */
+static void
+audioringbuffer_thread_func (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  GstAudioRingBuffer *abuf = GST_AUDIORING_BUFFER_CAST (buf);
+  WriteFunc writefunc;
+  GstMessage *message;
+  GValue val = { 0 };
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  GST_DEBUG_OBJECT (sink, "enter thread");
+
+  GST_OBJECT_LOCK (abuf);
+  GST_DEBUG_OBJECT (sink, "signal wait");
+  GST_AUDIORING_BUFFER_SIGNAL (buf);
+  GST_OBJECT_UNLOCK (abuf);
+
+  writefunc = csink->write;
+  if (writefunc == NULL)
+    goto no_function;
+
+  g_value_init (&val, G_TYPE_POINTER);
+  g_value_set_pointer (&val, sink->thread);
+  message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
+      GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT_CAST (sink));
+  gst_message_set_stream_status_object (message, &val);
+  GST_DEBUG_OBJECT (sink, "posting ENTER stream status");
+  gst_element_post_message (GST_ELEMENT_CAST (sink), message);
+
+  while (TRUE) {
+    gint left, len;
+    guint8 *readptr;
+    gint readseg;
+
+    /* buffer must be started */
+    if (gst_ring_buffer_prepare_read (buf, &readseg, &readptr, &len)) {
+      gint written;
+
+      left = len;
+      do {
+        written = writefunc (sink, readptr, left);
+        GST_LOG_OBJECT (sink, "transfered %d bytes of %d from segment %d",
+            written, left, readseg);
+        if (written < 0 || written > left) {
+          /* might not be critical, it e.g. happens when aborting playback */
+          GST_WARNING_OBJECT (sink,
+              "error writing data in %s (reason: %s), skipping segment (left: %d, written: %d)",
+              GST_DEBUG_FUNCPTR_NAME (writefunc),
+              (errno > 1 ? g_strerror (errno) : "unknown"), left, written);
+          break;
+        }
+        left -= written;
+        readptr += written;
+      } while (left > 0);
+
+      /* clear written samples */
+      gst_ring_buffer_clear (buf, readseg);
+
+      /* we wrote one segment */
+      gst_ring_buffer_advance (buf, 1);
+    } else {
+      GST_OBJECT_LOCK (abuf);
+      if (!abuf->running)
+        goto stop_running;
+      GST_DEBUG_OBJECT (sink, "signal wait");
+      GST_AUDIORING_BUFFER_SIGNAL (buf);
+      GST_DEBUG_OBJECT (sink, "wait for action");
+      GST_AUDIORING_BUFFER_WAIT (buf);
+      GST_DEBUG_OBJECT (sink, "got signal");
+      if (!abuf->running)
+        goto stop_running;
+      GST_DEBUG_OBJECT (sink, "continue running");
+      GST_OBJECT_UNLOCK (abuf);
+    }
+  }
+
+  /* Will never be reached */
+  g_assert_not_reached ();
+  return;
+
+  /* ERROR */
+no_function:
+  {
+    GST_DEBUG_OBJECT (sink, "no write function, exit thread");
+    return;
+  }
+stop_running:
+  {
+    GST_OBJECT_UNLOCK (abuf);
+    GST_DEBUG_OBJECT (sink, "stop running, exit thread");
+    message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
+        GST_STREAM_STATUS_TYPE_LEAVE, GST_ELEMENT_CAST (sink));
+    gst_message_set_stream_status_object (message, &val);
+    GST_DEBUG_OBJECT (sink, "posting LEAVE stream status");
+    gst_element_post_message (GST_ELEMENT_CAST (sink), message);
+    return;
+  }
+}
+
+static void
+gst_audioringbuffer_init (GstAudioRingBuffer * ringbuffer,
+    GstAudioRingBufferClass * g_class)
+{
+  ringbuffer->running = FALSE;
+  ringbuffer->queuedseg = 0;
+
+  ringbuffer->cond = g_cond_new ();
+}
+
+static void
+gst_audioringbuffer_dispose (GObject * object)
+{
+  G_OBJECT_CLASS (ring_parent_class)->dispose (object);
+}
+
+static void
+gst_audioringbuffer_finalize (GObject * object)
+{
+  GstAudioRingBuffer *ringbuffer = GST_AUDIORING_BUFFER_CAST (object);
+
+  g_cond_free (ringbuffer->cond);
+
+  G_OBJECT_CLASS (ring_parent_class)->finalize (object);
+}
+
+static gboolean
+gst_audioringbuffer_open_device (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  gboolean result = TRUE;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  if (csink->open)
+    result = csink->open (sink);
+
+  if (!result)
+    goto could_not_open;
+
+  return result;
+
+could_not_open:
+  {
+    GST_DEBUG_OBJECT (sink, "could not open device");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_close_device (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  gboolean result = TRUE;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  if (csink->close)
+    result = csink->close (sink);
+
+  if (!result)
+    goto could_not_close;
+
+  return result;
+
+could_not_close:
+  {
+    GST_DEBUG_OBJECT (sink, "could not close device");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  gboolean result = FALSE;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  if (csink->prepare)
+    result = csink->prepare (sink, spec);
+  if (!result)
+    goto could_not_prepare;
+
+  /* set latency to one more segment as we need some headroom */
+  spec->seglatency = spec->segtotal + 1;
+
+  buf->size = spec->segtotal * spec->segsize;
+  buf->memory = g_malloc0 (buf->size);
+
+  return TRUE;
+
+  /* ERRORS */
+could_not_prepare:
+  {
+    GST_DEBUG_OBJECT (sink, "could not prepare device");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_activate (GstRingBuffer * buf, gboolean active)
+{
+  GstAudioSink *sink;
+  GstAudioRingBuffer *abuf;
+  GError *error = NULL;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  abuf = GST_AUDIORING_BUFFER_CAST (buf);
+
+  if (active) {
+    abuf->running = TRUE;
+
+    GST_DEBUG_OBJECT (sink, "starting thread");
+    sink->thread =
+        g_thread_create ((GThreadFunc) audioringbuffer_thread_func, buf, TRUE,
+        &error);
+    if (!sink->thread || error != NULL)
+      goto thread_failed;
+
+    GST_DEBUG_OBJECT (sink, "waiting for thread");
+    /* the object lock is taken */
+    GST_AUDIORING_BUFFER_WAIT (buf);
+    GST_DEBUG_OBJECT (sink, "thread is started");
+  } else {
+    abuf->running = FALSE;
+    GST_DEBUG_OBJECT (sink, "signal wait");
+    GST_AUDIORING_BUFFER_SIGNAL (buf);
+
+    GST_OBJECT_UNLOCK (buf);
+
+    /* join the thread */
+    g_thread_join (sink->thread);
+
+    GST_OBJECT_LOCK (buf);
+  }
+  return TRUE;
+
+  /* ERRORS */
+thread_failed:
+  {
+    if (error)
+      GST_ERROR_OBJECT (sink, "could not create thread %s", error->message);
+    else
+      GST_ERROR_OBJECT (sink, "could not create thread for unknown reason");
+    return FALSE;
+  }
+}
+
+/* function is called with LOCK */
+static gboolean
+gst_audioringbuffer_release (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  gboolean result = FALSE;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  /* free the buffer */
+  g_free (buf->memory);
+  buf->memory = NULL;
+
+  if (csink->unprepare)
+    result = csink->unprepare (sink);
+
+  if (!result)
+    goto could_not_unprepare;
+
+  GST_DEBUG_OBJECT (sink, "unprepared");
+
+  return result;
+
+could_not_unprepare:
+  {
+    GST_DEBUG_OBJECT (sink, "could not unprepare device");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_start (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+
+  GST_DEBUG_OBJECT (sink, "start, sending signal");
+  GST_AUDIORING_BUFFER_SIGNAL (buf);
+
+  return TRUE;
+}
+
+static gboolean
+gst_audioringbuffer_pause (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  /* unblock any pending writes to the audio device */
+  if (csink->reset) {
+    GST_DEBUG_OBJECT (sink, "reset...");
+    csink->reset (sink);
+    GST_DEBUG_OBJECT (sink, "reset done");
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_audioringbuffer_stop (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  /* unblock any pending writes to the audio device */
+  if (csink->reset) {
+    GST_DEBUG_OBJECT (sink, "reset...");
+    csink->reset (sink);
+    GST_DEBUG_OBJECT (sink, "reset done");
+  }
+#if 0
+  if (abuf->running) {
+    GST_DEBUG_OBJECT (sink, "stop, waiting...");
+    GST_AUDIORING_BUFFER_WAIT (buf);
+    GST_DEBUG_OBJECT (sink, "stopped");
+  }
+#endif
+
+  return TRUE;
+}
+
+static guint
+gst_audioringbuffer_delay (GstRingBuffer * buf)
+{
+  GstAudioSink *sink;
+  GstAudioSinkClass *csink;
+  guint res = 0;
+
+  sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
+  csink = GST_AUDIO_SINK_GET_CLASS (sink);
+
+  if (csink->delay)
+    res = csink->delay (sink);
+
+  return res;
+}
+
+/* AudioSink signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0,
+};
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_audio_sink_debug, "audiosink", 0, "audiosink element");
+#define gst_audio_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAudioSink, gst_audio_sink,
+    GST_TYPE_BASE_AUDIO_SINK, _do_init);
+
+static GstRingBuffer *gst_audio_sink_create_ringbuffer (GstBaseAudioSink *
+    sink);
+
+static void
+gst_audio_sink_class_init (GstAudioSinkClass * klass)
+{
+  GstBaseAudioSinkClass *gstbaseaudiosink_class;
+
+  gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass;
+
+  gstbaseaudiosink_class->create_ringbuffer =
+      GST_DEBUG_FUNCPTR (gst_audio_sink_create_ringbuffer);
+
+  g_type_class_ref (GST_TYPE_AUDIORING_BUFFER);
+}
+
+static void
+gst_audio_sink_init (GstAudioSink * audiosink)
+{
+}
+
+static GstRingBuffer *
+gst_audio_sink_create_ringbuffer (GstBaseAudioSink * sink)
+{
+  GstRingBuffer *buffer;
+
+  GST_DEBUG_OBJECT (sink, "creating ringbuffer");
+  buffer = g_object_new (GST_TYPE_AUDIORING_BUFFER, NULL);
+  GST_DEBUG_OBJECT (sink, "created ringbuffer @%p", buffer);
+
+  return buffer;
+}
diff --git a/gst-libs/gst/audio/gstaudiosink.h b/gst-libs/gst/audio/gstaudiosink.h
new file mode 100644
index 0000000..71fe5e4
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiosink.h
@@ -0,0 +1,100 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstaudiosink.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_SINK_H__
+#define __GST_AUDIO_SINK_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstbaseaudiosink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_SINK             (gst_audio_sink_get_type())
+#define GST_AUDIO_SINK(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SINK,GstAudioSink))
+#define GST_AUDIO_SINK_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SINK,GstAudioSinkClass))
+#define GST_AUDIO_SINK_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SINK,GstAudioSinkClass))
+#define GST_IS_AUDIO_SINK(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SINK))
+#define GST_IS_AUDIO_SINK_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SINK))
+
+typedef struct _GstAudioSink GstAudioSink;
+typedef struct _GstAudioSinkClass GstAudioSinkClass;
+
+/**
+ * GstAudioSink:
+ * 
+ * Opaque #GstAudioSink.
+ */
+struct _GstAudioSink {
+  GstBaseAudioSink       element;
+
+  /*< private >*/ /* with LOCK */
+  GThread   *thread;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstAudioSinkClass:
+ * @parent_class: the parent class structure.
+ * @open: Open the device. No configuration needs to be done at this point.
+ *        This function is also used to check if the device is available.
+ * @prepare: Prepare the device to operate with the specified parameters.
+ * @unprepare: Undo operations done in prepare.
+ * @close: Close the device.
+ * @write: Write data to the device.
+ * @delay: Return how many samples are still in the device. This is used to
+ *         drive the synchronisation.
+ * @reset: Returns as quickly as possible from a write and flush any pending
+ *         samples from the device.
+ *
+ * #GstAudioSink class. Override the vmethods to implement functionality.
+ */
+struct _GstAudioSinkClass {
+  GstBaseAudioSinkClass parent_class;
+
+  /* vtable */
+
+  /* open the device with given specs */
+  gboolean (*open)      (GstAudioSink *sink);
+  /* prepare resources and state to operate with the given specs */
+  gboolean (*prepare)   (GstAudioSink *sink, GstRingBufferSpec *spec);
+  /* undo anything that was done in prepare() */
+  gboolean (*unprepare) (GstAudioSink *sink);
+  /* close the device */
+  gboolean (*close)     (GstAudioSink *sink);
+  /* write samples to the device */
+  gint     (*write)     (GstAudioSink *sink, gpointer data, guint length);
+  /* get number of samples queued in the device */
+  guint    (*delay)     (GstAudioSink *sink);
+  /* reset the audio device, unblock from a write */
+  void     (*reset)     (GstAudioSink *sink);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_audio_sink_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_SINK_H__ */
diff --git a/gst-libs/gst/audio/gstaudiosrc.c b/gst-libs/gst/audio/gstaudiosrc.c
new file mode 100644
index 0000000..57864d1
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiosrc.c
@@ -0,0 +1,527 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstaudiosrc.c: simple audio src base class
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudiosrc
+ * @short_description: Simple base class for audio sources
+ * @see_also: #GstBaseAudioSrc, #GstRingBuffer, #GstAudioSrc.
+ *
+ * This is the most simple base class for audio sources that only requires
+ * subclasses to implement a set of simple functions:
+ *
+ * <variablelist>
+ *   <varlistentry>
+ *     <term>open()</term>
+ *     <listitem><para>Open the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>prepare()</term>
+ *     <listitem><para>Configure the device with the specified format.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>read()</term>
+ *     <listitem><para>Read samples from the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>reset()</term>
+ *     <listitem><para>Unblock reads and flush the device.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>delay()</term>
+ *     <listitem><para>Get the number of samples in the device but not yet read.
+ *     </para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>unprepare()</term>
+ *     <listitem><para>Undo operations done by prepare.</para></listitem>
+ *   </varlistentry>
+ *   <varlistentry>
+ *     <term>close()</term>
+ *     <listitem><para>Close the device.</para></listitem>
+ *   </varlistentry>
+ * </variablelist>
+ *
+ * All scheduling of samples and timestamps is done in this base class
+ * together with #GstBaseAudioSrc using a default implementation of a
+ * #GstRingBuffer that uses threads.
+ *
+ * Last reviewed on 2006-09-27 (0.10.12)
+ */
+
+#include <string.h>
+
+#include "gstaudiosrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_audio_src_debug);
+#define GST_CAT_DEFAULT gst_audio_src_debug
+
+#define GST_TYPE_AUDIORING_BUFFER        \
+        (gst_audioringbuffer_get_type())
+#define GST_AUDIORING_BUFFER(obj)        \
+        (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIORING_BUFFER,GstAudioRingBuffer))
+#define GST_AUDIORING_BUFFER_CLASS(klass) \
+        (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIORING_BUFFER,GstAudioRingBufferClass))
+#define GST_AUDIORING_BUFFER_GET_CLASS(obj) \
+        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIORING_BUFFER, GstAudioRingBufferClass))
+#define GST_IS_AUDIORING_BUFFER(obj)     \
+        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIORING_BUFFER))
+#define GST_IS_AUDIORING_BUFFER_CLASS(klass)\
+        (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIORING_BUFFER))
+
+typedef struct _GstAudioRingBuffer GstAudioRingBuffer;
+typedef struct _GstAudioRingBufferClass GstAudioRingBufferClass;
+
+#define GST_AUDIORING_BUFFER_GET_COND(buf) (((GstAudioRingBuffer *)buf)->cond)
+#define GST_AUDIORING_BUFFER_WAIT(buf)     (g_cond_wait (GST_AUDIORING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf)))
+#define GST_AUDIORING_BUFFER_SIGNAL(buf)   (g_cond_signal (GST_AUDIORING_BUFFER_GET_COND (buf)))
+#define GST_AUDIORING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_AUDIORING_BUFFER_GET_COND (buf)))
+
+struct _GstAudioRingBuffer
+{
+  GstRingBuffer object;
+
+  gboolean running;
+  gint queuedseg;
+
+  GCond *cond;
+};
+
+struct _GstAudioRingBufferClass
+{
+  GstRingBufferClass parent_class;
+};
+
+static void gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass);
+static void gst_audioringbuffer_init (GstAudioRingBuffer * ringbuffer,
+    GstAudioRingBufferClass * klass);
+static void gst_audioringbuffer_dispose (GObject * object);
+static void gst_audioringbuffer_finalize (GObject * object);
+
+static GstRingBufferClass *ring_parent_class = NULL;
+
+static gboolean gst_audioringbuffer_open_device (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_close_device (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_acquire (GstRingBuffer * buf,
+    GstRingBufferSpec * spec);
+static gboolean gst_audioringbuffer_release (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_start (GstRingBuffer * buf);
+static gboolean gst_audioringbuffer_stop (GstRingBuffer * buf);
+static guint gst_audioringbuffer_delay (GstRingBuffer * buf);
+
+/* ringbuffer abstract base class */
+static GType
+gst_audioringbuffer_get_type (void)
+{
+  static GType ringbuffer_type = 0;
+
+  if (!ringbuffer_type) {
+    static const GTypeInfo ringbuffer_info = {
+      sizeof (GstAudioRingBufferClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_audioringbuffer_class_init,
+      NULL,
+      NULL,
+      sizeof (GstAudioRingBuffer),
+      0,
+      (GInstanceInitFunc) gst_audioringbuffer_init,
+      NULL
+    };
+
+    ringbuffer_type =
+        g_type_register_static (GST_TYPE_RING_BUFFER, "GstAudioSrcRingBuffer",
+        &ringbuffer_info, 0);
+  }
+  return ringbuffer_type;
+}
+
+static void
+gst_audioringbuffer_class_init (GstAudioRingBufferClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstRingBufferClass *gstringbuffer_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstringbuffer_class = (GstRingBufferClass *) klass;
+
+  ring_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->dispose = gst_audioringbuffer_dispose;
+  gobject_class->finalize = gst_audioringbuffer_finalize;
+
+  gstringbuffer_class->open_device =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_open_device);
+  gstringbuffer_class->close_device =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_close_device);
+  gstringbuffer_class->acquire =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_acquire);
+  gstringbuffer_class->release =
+      GST_DEBUG_FUNCPTR (gst_audioringbuffer_release);
+  gstringbuffer_class->start = GST_DEBUG_FUNCPTR (gst_audioringbuffer_start);
+  gstringbuffer_class->resume = GST_DEBUG_FUNCPTR (gst_audioringbuffer_start);
+  gstringbuffer_class->stop = GST_DEBUG_FUNCPTR (gst_audioringbuffer_stop);
+
+  gstringbuffer_class->delay = GST_DEBUG_FUNCPTR (gst_audioringbuffer_delay);
+}
+
+typedef guint (*ReadFunc) (GstAudioSrc * src, gpointer data, guint length);
+
+/* this internal thread does nothing else but read samples from the audio device.
+ * It will read each segment in the ringbuffer and will update the play
+ * pointer. 
+ * The start/stop methods control the thread.
+ */
+static void
+audioringbuffer_thread_func (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  GstAudioRingBuffer *abuf = GST_AUDIORING_BUFFER (buf);
+  ReadFunc readfunc;
+  GstMessage *message;
+  GValue val = { 0 };
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  GST_DEBUG_OBJECT (src, "enter thread");
+
+  readfunc = csrc->read;
+  if (readfunc == NULL)
+    goto no_function;
+
+  /* FIXME: maybe we should at least use a custom pointer type here? */
+  g_value_init (&val, G_TYPE_POINTER);
+  g_value_set_pointer (&val, src->thread);
+  message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
+      GST_STREAM_STATUS_TYPE_ENTER, GST_ELEMENT_CAST (src));
+  gst_message_set_stream_status_object (message, &val);
+  GST_DEBUG_OBJECT (src, "posting ENTER stream status");
+  gst_element_post_message (GST_ELEMENT_CAST (src), message);
+
+  while (TRUE) {
+    gint left, len;
+    guint8 *readptr;
+    gint readseg;
+
+    if (gst_ring_buffer_prepare_read (buf, &readseg, &readptr, &len)) {
+      gint read;
+
+      left = len;
+      do {
+        read = readfunc (src, readptr, left);
+        GST_LOG_OBJECT (src, "transfered %d bytes of %d to segment %d", read,
+            left, readseg);
+        if (read < 0 || read > left) {
+          GST_WARNING_OBJECT (src,
+              "error reading data %d (reason: %s), skipping segment", read,
+              g_strerror (errno));
+          break;
+        }
+        left -= read;
+        readptr += read;
+      } while (left > 0);
+
+      /* we read one segment */
+      gst_ring_buffer_advance (buf, 1);
+    } else {
+      GST_OBJECT_LOCK (abuf);
+      if (!abuf->running)
+        goto stop_running;
+      GST_DEBUG_OBJECT (src, "signal wait");
+      GST_AUDIORING_BUFFER_SIGNAL (buf);
+      GST_DEBUG_OBJECT (src, "wait for action");
+      GST_AUDIORING_BUFFER_WAIT (buf);
+      GST_DEBUG_OBJECT (src, "got signal");
+      if (!abuf->running)
+        goto stop_running;
+      GST_DEBUG_OBJECT (src, "continue running");
+      GST_OBJECT_UNLOCK (abuf);
+    }
+  }
+
+  /* Will never be reached */
+  g_assert_not_reached ();
+  return;
+
+  /* ERROR */
+no_function:
+  {
+    GST_DEBUG ("no write function, exit thread");
+    return;
+  }
+stop_running:
+  {
+    GST_OBJECT_UNLOCK (abuf);
+    GST_DEBUG ("stop running, exit thread");
+    message = gst_message_new_stream_status (GST_OBJECT_CAST (buf),
+        GST_STREAM_STATUS_TYPE_LEAVE, GST_ELEMENT_CAST (src));
+    gst_message_set_stream_status_object (message, &val);
+    GST_DEBUG_OBJECT (src, "posting LEAVE stream status");
+    gst_element_post_message (GST_ELEMENT_CAST (src), message);
+    return;
+  }
+}
+
+static void
+gst_audioringbuffer_init (GstAudioRingBuffer * ringbuffer,
+    GstAudioRingBufferClass * g_class)
+{
+  ringbuffer->running = FALSE;
+  ringbuffer->queuedseg = 0;
+
+  ringbuffer->cond = g_cond_new ();
+}
+
+static void
+gst_audioringbuffer_dispose (GObject * object)
+{
+  GstAudioRingBuffer *ringbuffer = GST_AUDIORING_BUFFER (object);
+
+  if (ringbuffer->cond) {
+    g_cond_free (ringbuffer->cond);
+    ringbuffer->cond = NULL;
+  }
+
+  G_OBJECT_CLASS (ring_parent_class)->dispose (object);
+}
+
+static void
+gst_audioringbuffer_finalize (GObject * object)
+{
+  G_OBJECT_CLASS (ring_parent_class)->finalize (object);
+}
+
+static gboolean
+gst_audioringbuffer_open_device (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  gboolean result = TRUE;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  if (csrc->open)
+    result = csrc->open (src);
+
+  if (!result)
+    goto could_not_open;
+
+  return result;
+
+could_not_open:
+  {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_close_device (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  gboolean result = TRUE;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  if (csrc->close)
+    result = csrc->close (src);
+
+  if (!result)
+    goto could_not_open;
+
+  return result;
+
+could_not_open:
+  {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audioringbuffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  GstAudioRingBuffer *abuf;
+  gboolean result = FALSE;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  if (csrc->prepare)
+    result = csrc->prepare (src, spec);
+
+  if (!result)
+    goto could_not_open;
+
+  buf->size = spec->segtotal * spec->segsize;
+  buf->memory = g_malloc0 (buf->size);
+
+  abuf = GST_AUDIORING_BUFFER (buf);
+  abuf->running = TRUE;
+
+  src->thread =
+      g_thread_create ((GThreadFunc) audioringbuffer_thread_func, buf, TRUE,
+      NULL);
+  GST_AUDIORING_BUFFER_WAIT (buf);
+
+  return result;
+
+could_not_open:
+  {
+    return FALSE;
+  }
+}
+
+/* function is called with LOCK */
+static gboolean
+gst_audioringbuffer_release (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  GstAudioRingBuffer *abuf;
+  gboolean result = FALSE;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+  abuf = GST_AUDIORING_BUFFER (buf);
+
+  abuf->running = FALSE;
+  GST_AUDIORING_BUFFER_SIGNAL (buf);
+  GST_OBJECT_UNLOCK (buf);
+
+  /* join the thread */
+  g_thread_join (src->thread);
+
+  GST_OBJECT_LOCK (buf);
+
+  /* free the buffer */
+  g_free (buf->memory);
+  buf->memory = NULL;
+
+  if (csrc->unprepare)
+    result = csrc->unprepare (src);
+
+  return result;
+}
+
+static gboolean
+gst_audioringbuffer_start (GstRingBuffer * buf)
+{
+  GST_DEBUG ("start, sending signal");
+  GST_AUDIORING_BUFFER_SIGNAL (buf);
+
+  return TRUE;
+}
+
+static gboolean
+gst_audioringbuffer_stop (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  /* unblock any pending writes to the audio device */
+  if (csrc->reset) {
+    GST_DEBUG ("reset...");
+    csrc->reset (src);
+    GST_DEBUG ("reset done");
+  }
+#if 0
+  GST_DEBUG ("stop, waiting...");
+  GST_AUDIORING_BUFFER_WAIT (buf);
+  GST_DEBUG ("stoped");
+#endif
+
+  return TRUE;
+}
+
+static guint
+gst_audioringbuffer_delay (GstRingBuffer * buf)
+{
+  GstAudioSrc *src;
+  GstAudioSrcClass *csrc;
+  guint res = 0;
+
+  src = GST_AUDIO_SRC (GST_OBJECT_PARENT (buf));
+  csrc = GST_AUDIO_SRC_GET_CLASS (src);
+
+  if (csrc->delay)
+    res = csrc->delay (src);
+
+  return res;
+}
+
+/* AudioSrc signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0,
+};
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_audio_src_debug, "audiosrc", 0, "audiosrc element");
+#define gst_audio_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAudioSrc, gst_audio_src,
+    GST_TYPE_BASE_AUDIO_SRC, _do_init);
+
+static GstRingBuffer *gst_audio_src_create_ringbuffer (GstBaseAudioSrc * src);
+
+static void
+gst_audio_src_class_init (GstAudioSrcClass * klass)
+{
+  GstBaseAudioSrcClass *gstbaseaudiosrc_class;
+
+  gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass;
+
+  gstbaseaudiosrc_class->create_ringbuffer =
+      GST_DEBUG_FUNCPTR (gst_audio_src_create_ringbuffer);
+
+  g_type_class_ref (GST_TYPE_AUDIORING_BUFFER);
+}
+
+static void
+gst_audio_src_init (GstAudioSrc * audiosrc)
+{
+}
+
+static GstRingBuffer *
+gst_audio_src_create_ringbuffer (GstBaseAudioSrc * src)
+{
+  GstRingBuffer *buffer;
+
+  GST_DEBUG ("creating ringbuffer");
+  buffer = g_object_new (GST_TYPE_AUDIORING_BUFFER, NULL);
+  GST_DEBUG ("created ringbuffer @%p", buffer);
+
+  return buffer;
+}
diff --git a/gst-libs/gst/audio/gstaudiosrc.h b/gst-libs/gst/audio/gstaudiosrc.h
new file mode 100644
index 0000000..3caa98e
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudiosrc.h
@@ -0,0 +1,98 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstaudiosrc.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_SRC_H__
+#define __GST_AUDIO_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstbaseaudiosrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_SRC              (gst_audio_src_get_type())
+#define GST_AUDIO_SRC(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_SRC,GstAudioSrc))
+#define GST_AUDIO_SRC_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_SRC,GstAudioSrcClass))
+#define GST_AUDIO_SRC_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_AUDIO_SRC,GstAudioSrcClass))
+#define GST_IS_AUDIO_SRC(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_SRC))
+#define GST_IS_AUDIO_SRC_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_SRC))
+
+typedef struct _GstAudioSrc GstAudioSrc;
+typedef struct _GstAudioSrcClass GstAudioSrcClass;
+
+/**
+ * GstAudioSrc:
+ *
+ * Base class for simple audio sources.
+ */
+struct _GstAudioSrc {
+  GstBaseAudioSrc        element;
+
+  /*< private >*/ /* with LOCK */
+  GThread   *thread;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstAudioSrcClass:
+ * @parent_class: the parent class.
+ * @open: open the device with the specified caps
+ * @prepare: configure device with format
+ * @unprepare: undo the configuration
+ * @close: close the device
+ * @read: read samples to the audio device
+ * @delay: the number of samples queued in the device
+ * @reset: unblock a read to the device and reset.
+ *
+ * #GstAudioSrc class. Override the vmethod to implement
+ * functionality.
+ */
+struct _GstAudioSrcClass {
+  GstBaseAudioSrcClass parent_class;
+
+  /* vtable */
+
+  /* open the device with given specs */
+  gboolean (*open)      (GstAudioSrc *src);
+  /* prepare resources and state to operate with the given specs */
+  gboolean (*prepare)   (GstAudioSrc *src, GstRingBufferSpec *spec);
+  /* undo anything that was done in prepare() */
+  gboolean (*unprepare) (GstAudioSrc *src);
+  /* close the device */
+  gboolean (*close)     (GstAudioSrc *src);
+  /* read samples from the device */
+  guint    (*read)      (GstAudioSrc *src, gpointer data, guint length);
+  /* get number of samples queued in the device */
+  guint    (*delay)     (GstAudioSrc *src);
+  /* reset the audio device, unblock from a write */
+  void     (*reset)     (GstAudioSrc *src);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_audio_src_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_SRC_H__ */
diff --git a/gst-libs/gst/audio/gstbaseaudiosink.c b/gst-libs/gst/audio/gstbaseaudiosink.c
new file mode 100644
index 0000000..45b66a6
--- /dev/null
+++ b/gst-libs/gst/audio/gstbaseaudiosink.c
@@ -0,0 +1,2039 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstbaseaudiosink.c:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstbaseaudiosink
+ * @short_description: Base class for audio sinks
+ * @see_also: #GstAudioSink, #GstRingBuffer.
+ *
+ * This is the base class for audio sinks. Subclasses need to implement the
+ * ::create_ringbuffer vmethod. This base class will then take care of
+ * writing samples to the ringbuffer, synchronisation, clipping and flushing.
+ *
+ * Last reviewed on 2006-09-27 (0.10.12)
+ */
+
+#include <string.h>
+
+#include "gstbaseaudiosink.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_base_audio_sink_debug);
+#define GST_CAT_DEFAULT gst_base_audio_sink_debug
+
+#define GST_BASE_AUDIO_SINK_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_BASE_AUDIO_SINK, GstBaseAudioSinkPrivate))
+
+struct _GstBaseAudioSinkPrivate
+{
+  /* upstream latency */
+  GstClockTime us_latency;
+  /* the clock slaving algorithm in use */
+  GstBaseAudioSinkSlaveMethod slave_method;
+  /* running average of clock skew */
+  GstClockTimeDiff avg_skew;
+  /* the number of samples we aligned last time */
+  gint64 last_align;
+
+  gboolean sync_latency;
+
+  GstClockTime eos_time;
+
+  /* number of microseconds we alow timestamps or clock slaving to drift
+   * before resyncing */
+  guint64 drift_tolerance;
+};
+
+/* BaseAudioSink signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+/* FIXME: 0.11, store the buffer_time and latency_time in nanoseconds */
+#define DEFAULT_BUFFER_TIME     ((200 * GST_MSECOND) / GST_USECOND)
+#define DEFAULT_LATENCY_TIME    ((10 * GST_MSECOND) / GST_USECOND)
+#define DEFAULT_PROVIDE_CLOCK   TRUE
+#define DEFAULT_SLAVE_METHOD    GST_BASE_AUDIO_SINK_SLAVE_SKEW
+
+/* FIXME, enable pull mode when clock slaving and trick modes are figured out */
+#define DEFAULT_CAN_ACTIVATE_PULL FALSE
+
+/* when timestamps or clock slaving drift for more than 40ms we resync. This is
+ * a reasonable default */
+#define DEFAULT_DRIFT_TOLERANCE   ((40 * GST_MSECOND) / GST_USECOND)
+
+enum
+{
+  PROP_0,
+
+  PROP_BUFFER_TIME,
+  PROP_LATENCY_TIME,
+  PROP_PROVIDE_CLOCK,
+  PROP_SLAVE_METHOD,
+  PROP_CAN_ACTIVATE_PULL,
+  PROP_DRIFT_TOLERANCE,
+
+  PROP_LAST
+};
+
+GType
+gst_base_audio_sink_slave_method_get_type (void)
+{
+  static volatile gsize slave_method_type = 0;
+  static const GEnumValue slave_method[] = {
+    {GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE, "GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE",
+        "resample"},
+    {GST_BASE_AUDIO_SINK_SLAVE_SKEW, "GST_BASE_AUDIO_SINK_SLAVE_SKEW", "skew"},
+    {GST_BASE_AUDIO_SINK_SLAVE_NONE, "GST_BASE_AUDIO_SINK_SLAVE_NONE", "none"},
+    {0, NULL, NULL},
+  };
+
+  if (g_once_init_enter (&slave_method_type)) {
+    GType tmp =
+        g_enum_register_static ("GstBaseAudioSinkSlaveMethod", slave_method);
+    g_once_init_leave (&slave_method_type, tmp);
+  }
+
+  return (GType) slave_method_type;
+}
+
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_base_audio_sink_debug, "baseaudiosink", 0, "baseaudiosink element");
+#define gst_base_audio_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstBaseAudioSink, gst_base_audio_sink,
+    GST_TYPE_BASE_SINK, _do_init);
+
+static void gst_base_audio_sink_dispose (GObject * object);
+
+static void gst_base_audio_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_base_audio_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#if 0
+static GstStateChangeReturn gst_base_audio_sink_async_play (GstBaseSink *
+    basesink);
+#endif
+static GstStateChangeReturn gst_base_audio_sink_change_state (GstElement *
+    element, GstStateChange transition);
+static gboolean gst_base_audio_sink_activate_pull (GstBaseSink * basesink,
+    gboolean active);
+static gboolean gst_base_audio_sink_query (GstElement * element, GstQuery *
+    query);
+
+static GstClock *gst_base_audio_sink_provide_clock (GstElement * elem);
+static GstClockTime gst_base_audio_sink_get_time (GstClock * clock,
+    GstBaseAudioSink * sink);
+static void gst_base_audio_sink_callback (GstRingBuffer * rbuf, guint8 * data,
+    guint len, gpointer user_data);
+
+static GstFlowReturn gst_base_audio_sink_preroll (GstBaseSink * bsink,
+    GstBuffer * buffer);
+static GstFlowReturn gst_base_audio_sink_render (GstBaseSink * bsink,
+    GstBuffer * buffer);
+static gboolean gst_base_audio_sink_event (GstBaseSink * bsink,
+    GstEvent * event);
+static void gst_base_audio_sink_get_times (GstBaseSink * bsink,
+    GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
+static gboolean gst_base_audio_sink_setcaps (GstBaseSink * bsink,
+    GstCaps * caps);
+static void gst_base_audio_sink_fixate (GstBaseSink * bsink, GstCaps * caps);
+
+static gboolean gst_base_audio_sink_query_pad (GstBaseSink * bsink,
+    GstQuery * query);
+
+
+/* static guint gst_base_audio_sink_signals[LAST_SIGNAL] = { 0 }; */
+
+static void
+gst_base_audio_sink_class_init (GstBaseAudioSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstBaseAudioSinkPrivate));
+
+  gobject_class->set_property = gst_base_audio_sink_set_property;
+  gobject_class->get_property = gst_base_audio_sink_get_property;
+  gobject_class->dispose = gst_base_audio_sink_dispose;
+
+  g_object_class_install_property (gobject_class, PROP_BUFFER_TIME,
+      g_param_spec_int64 ("buffer-time", "Buffer Time",
+          "Size of audio buffer in microseconds", 1,
+          G_MAXINT64, DEFAULT_BUFFER_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_LATENCY_TIME,
+      g_param_spec_int64 ("latency-time", "Latency Time",
+          "Audio latency in microseconds", 1,
+          G_MAXINT64, DEFAULT_LATENCY_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_PROVIDE_CLOCK,
+      g_param_spec_boolean ("provide-clock", "Provide Clock",
+          "Provide a clock to be used as the global pipeline clock",
+          DEFAULT_PROVIDE_CLOCK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SLAVE_METHOD,
+      g_param_spec_enum ("slave-method", "Slave Method",
+          "Algorithm to use to match the rate of the masterclock",
+          GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD, DEFAULT_SLAVE_METHOD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL,
+      g_param_spec_boolean ("can-activate-pull", "Allow Pull Scheduling",
+          "Allow pull-based scheduling", DEFAULT_CAN_ACTIVATE_PULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseAudioSink:drift-tolerance
+   *
+   * Controls the amount of time in milliseconds that timestamps or clocks are allowed
+   * to drift before resynchronisation happens.
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_class, PROP_DRIFT_TOLERANCE,
+      g_param_spec_int64 ("drift-tolerance", "Drift Tolerance",
+          "Tolerance for timestamp and clock drift in microseconds", 1,
+          G_MAXINT64, DEFAULT_DRIFT_TOLERANCE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_base_audio_sink_change_state);
+  gstelement_class->provide_clock =
+      GST_DEBUG_FUNCPTR (gst_base_audio_sink_provide_clock);
+  gstelement_class->query = GST_DEBUG_FUNCPTR (gst_base_audio_sink_query);
+
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_base_audio_sink_event);
+  gstbasesink_class->preroll = GST_DEBUG_FUNCPTR (gst_base_audio_sink_preroll);
+  gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_base_audio_sink_query_pad);
+  gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_base_audio_sink_render);
+  gstbasesink_class->get_times =
+      GST_DEBUG_FUNCPTR (gst_base_audio_sink_get_times);
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_base_audio_sink_setcaps);
+  gstbasesink_class->fixate = GST_DEBUG_FUNCPTR (gst_base_audio_sink_fixate);
+#if 0
+  gstbasesink_class->async_play =
+      GST_DEBUG_FUNCPTR (gst_base_audio_sink_async_play);
+#endif
+  gstbasesink_class->activate_pull =
+      GST_DEBUG_FUNCPTR (gst_base_audio_sink_activate_pull);
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_AUDIO_CLOCK);
+  g_type_class_ref (GST_TYPE_RING_BUFFER);
+
+}
+
+static void
+gst_base_audio_sink_init (GstBaseAudioSink * baseaudiosink)
+{
+  GstBaseSink *basesink;
+
+  baseaudiosink->priv = GST_BASE_AUDIO_SINK_GET_PRIVATE (baseaudiosink);
+
+  baseaudiosink->buffer_time = DEFAULT_BUFFER_TIME;
+  baseaudiosink->latency_time = DEFAULT_LATENCY_TIME;
+  baseaudiosink->provide_clock = DEFAULT_PROVIDE_CLOCK;
+  baseaudiosink->priv->slave_method = DEFAULT_SLAVE_METHOD;
+  baseaudiosink->priv->drift_tolerance = DEFAULT_DRIFT_TOLERANCE;
+
+  baseaudiosink->provided_clock = gst_audio_clock_new ("GstAudioSinkClock",
+      (GstAudioClockGetTimeFunc) gst_base_audio_sink_get_time, baseaudiosink);
+
+  basesink = GST_BASE_SINK_CAST (baseaudiosink);
+  basesink->can_activate_push = TRUE;
+  basesink->can_activate_pull = DEFAULT_CAN_ACTIVATE_PULL;
+
+  gst_base_sink_set_last_buffer_enabled (basesink, FALSE);
+}
+
+static void
+gst_base_audio_sink_dispose (GObject * object)
+{
+  GstBaseAudioSink *sink;
+
+  sink = GST_BASE_AUDIO_SINK (object);
+
+  if (sink->provided_clock) {
+    gst_audio_clock_invalidate (sink->provided_clock);
+    gst_object_unref (sink->provided_clock);
+    sink->provided_clock = NULL;
+  }
+
+  if (sink->ringbuffer) {
+    gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer));
+    sink->ringbuffer = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+
+static GstClock *
+gst_base_audio_sink_provide_clock (GstElement * elem)
+{
+  GstBaseAudioSink *sink;
+  GstClock *clock;
+
+  sink = GST_BASE_AUDIO_SINK (elem);
+
+  /* we have no ringbuffer (must be NULL state) */
+  if (sink->ringbuffer == NULL)
+    goto wrong_state;
+
+  if (!gst_ring_buffer_is_acquired (sink->ringbuffer))
+    goto wrong_state;
+
+  GST_OBJECT_LOCK (sink);
+  if (!sink->provide_clock)
+    goto clock_disabled;
+
+  clock = GST_CLOCK_CAST (gst_object_ref (sink->provided_clock));
+  GST_OBJECT_UNLOCK (sink);
+
+  return clock;
+
+  /* ERRORS */
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (sink, "ringbuffer not acquired");
+    return NULL;
+  }
+clock_disabled:
+  {
+    GST_DEBUG_OBJECT (sink, "clock provide disabled");
+    GST_OBJECT_UNLOCK (sink);
+    return NULL;
+  }
+}
+
+static gboolean
+gst_base_audio_sink_query_pad (GstBaseSink * bsink, GstQuery * query)
+{
+  gboolean res = FALSE;
+  GstBaseAudioSink *basesink;
+
+  basesink = GST_BASE_AUDIO_SINK (bsink);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      GST_LOG_OBJECT (basesink, "query convert");
+
+      if (basesink->ringbuffer) {
+        gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, NULL);
+        res = gst_ring_buffer_convert (basesink->ringbuffer, src_fmt, src_val,
+            dest_fmt, &dest_val);
+        if (res) {
+          gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+        }
+      }
+      break;
+    }
+    default:
+      res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_base_audio_sink_query (GstElement * element, GstQuery * query)
+{
+  gboolean res = FALSE;
+  GstBaseAudioSink *basesink;
+
+  basesink = GST_BASE_AUDIO_SINK (element);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      gboolean live, us_live;
+      GstClockTime min_l, max_l;
+
+      GST_DEBUG_OBJECT (basesink, "latency query");
+
+      /* ask parent first, it will do an upstream query for us. */
+      if ((res =
+              gst_base_sink_query_latency (GST_BASE_SINK_CAST (basesink), &live,
+                  &us_live, &min_l, &max_l))) {
+        GstClockTime base_latency, min_latency, max_latency;
+
+        /* we and upstream are both live, adjust the min_latency */
+        if (live && us_live) {
+          GstRingBufferSpec *spec;
+
+          GST_OBJECT_LOCK (basesink);
+          if (!basesink->ringbuffer || !basesink->ringbuffer->spec.info.rate) {
+            GST_OBJECT_UNLOCK (basesink);
+
+            GST_DEBUG_OBJECT (basesink,
+                "we are not yet negotiated, can't report latency yet");
+            res = FALSE;
+            goto done;
+          }
+          spec = &basesink->ringbuffer->spec;
+
+          basesink->priv->us_latency = min_l;
+
+          base_latency =
+              gst_util_uint64_scale_int (spec->seglatency * spec->segsize,
+              GST_SECOND, spec->info.rate * spec->info.bpf);
+          GST_OBJECT_UNLOCK (basesink);
+
+          /* we cannot go lower than the buffer size and the min peer latency */
+          min_latency = base_latency + min_l;
+          /* the max latency is the max of the peer, we can delay an infinite
+           * amount of time. */
+          max_latency = (max_l == -1) ? -1 : (base_latency + max_l);
+
+          GST_DEBUG_OBJECT (basesink,
+              "peer min %" GST_TIME_FORMAT ", our min latency: %"
+              GST_TIME_FORMAT, GST_TIME_ARGS (min_l),
+              GST_TIME_ARGS (min_latency));
+          GST_DEBUG_OBJECT (basesink,
+              "peer max %" GST_TIME_FORMAT ", our max latency: %"
+              GST_TIME_FORMAT, GST_TIME_ARGS (max_l),
+              GST_TIME_ARGS (max_latency));
+        } else {
+          GST_DEBUG_OBJECT (basesink,
+              "peer or we are not live, don't care about latency");
+          min_latency = min_l;
+          max_latency = max_l;
+        }
+        gst_query_set_latency (query, live, min_latency, max_latency);
+      }
+      break;
+    }
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      GST_LOG_OBJECT (basesink, "query convert");
+
+      if (basesink->ringbuffer) {
+        gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, NULL);
+        res = gst_ring_buffer_convert (basesink->ringbuffer, src_fmt, src_val,
+            dest_fmt, &dest_val);
+        if (res) {
+          gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+        }
+      }
+      break;
+    }
+    default:
+      res = GST_ELEMENT_CLASS (parent_class)->query (element, query);
+      break;
+  }
+
+done:
+  return res;
+}
+
+
+static GstClockTime
+gst_base_audio_sink_get_time (GstClock * clock, GstBaseAudioSink * sink)
+{
+  guint64 raw, samples;
+  guint delay;
+  GstClockTime result;
+
+  if (sink->ringbuffer == NULL || sink->ringbuffer->spec.info.rate == 0)
+    return GST_CLOCK_TIME_NONE;
+
+  /* our processed samples are always increasing */
+  raw = samples = gst_ring_buffer_samples_done (sink->ringbuffer);
+
+  /* the number of samples not yet processed, this is still queued in the
+   * device (not played for playback). */
+  delay = gst_ring_buffer_delay (sink->ringbuffer);
+
+  if (G_LIKELY (samples >= delay))
+    samples -= delay;
+  else
+    samples = 0;
+
+  result = gst_util_uint64_scale_int (samples, GST_SECOND,
+      sink->ringbuffer->spec.info.rate);
+
+  GST_DEBUG_OBJECT (sink,
+      "processed samples: raw %" G_GUINT64_FORMAT ", delay %u, real %"
+      G_GUINT64_FORMAT ", time %" GST_TIME_FORMAT,
+      raw, delay, samples, GST_TIME_ARGS (result));
+
+  return result;
+}
+
+/**
+ * gst_base_audio_sink_set_provide_clock:
+ * @sink: a #GstBaseAudioSink
+ * @provide: new state
+ *
+ * Controls whether @sink will provide a clock or not. If @provide is %TRUE,
+ * gst_element_provide_clock() will return a clock that reflects the datarate
+ * of @sink. If @provide is %FALSE, gst_element_provide_clock() will return NULL.
+ *
+ * Since: 0.10.16
+ */
+void
+gst_base_audio_sink_set_provide_clock (GstBaseAudioSink * sink,
+    gboolean provide)
+{
+  g_return_if_fail (GST_IS_BASE_AUDIO_SINK (sink));
+
+  GST_OBJECT_LOCK (sink);
+  sink->provide_clock = provide;
+  GST_OBJECT_UNLOCK (sink);
+}
+
+/**
+ * gst_base_audio_sink_get_provide_clock:
+ * @sink: a #GstBaseAudioSink
+ *
+ * Queries whether @sink will provide a clock or not. See also
+ * gst_base_audio_sink_set_provide_clock.
+ *
+ * Returns: %TRUE if @sink will provide a clock.
+ *
+ * Since: 0.10.16
+ */
+gboolean
+gst_base_audio_sink_get_provide_clock (GstBaseAudioSink * sink)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_BASE_AUDIO_SINK (sink), FALSE);
+
+  GST_OBJECT_LOCK (sink);
+  result = sink->provide_clock;
+  GST_OBJECT_UNLOCK (sink);
+
+  return result;
+}
+
+/**
+ * gst_base_audio_sink_set_slave_method:
+ * @sink: a #GstBaseAudioSink
+ * @method: the new slave method
+ *
+ * Controls how clock slaving will be performed in @sink.
+ *
+ * Since: 0.10.16
+ */
+void
+gst_base_audio_sink_set_slave_method (GstBaseAudioSink * sink,
+    GstBaseAudioSinkSlaveMethod method)
+{
+  g_return_if_fail (GST_IS_BASE_AUDIO_SINK (sink));
+
+  GST_OBJECT_LOCK (sink);
+  sink->priv->slave_method = method;
+  GST_OBJECT_UNLOCK (sink);
+}
+
+/**
+ * gst_base_audio_sink_get_slave_method:
+ * @sink: a #GstBaseAudioSink
+ *
+ * Get the current slave method used by @sink.
+ *
+ * Returns: The current slave method used by @sink.
+ *
+ * Since: 0.10.16
+ */
+GstBaseAudioSinkSlaveMethod
+gst_base_audio_sink_get_slave_method (GstBaseAudioSink * sink)
+{
+  GstBaseAudioSinkSlaveMethod result;
+
+  g_return_val_if_fail (GST_IS_BASE_AUDIO_SINK (sink), -1);
+
+  GST_OBJECT_LOCK (sink);
+  result = sink->priv->slave_method;
+  GST_OBJECT_UNLOCK (sink);
+
+  return result;
+}
+
+
+/**
+ * gst_base_audio_sink_set_drift_tolerance:
+ * @sink: a #GstBaseAudioSink
+ * @drift_tolerance: the new drift tolerance in microseconds
+ *
+ * Controls the sink's drift tolerance.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_base_audio_sink_set_drift_tolerance (GstBaseAudioSink * sink,
+    gint64 drift_tolerance)
+{
+  g_return_if_fail (GST_IS_BASE_AUDIO_SINK (sink));
+
+  GST_OBJECT_LOCK (sink);
+  sink->priv->drift_tolerance = drift_tolerance;
+  GST_OBJECT_UNLOCK (sink);
+}
+
+/**
+ * gst_base_audio_sink_get_drift_tolerance
+ * @sink: a #GstBaseAudioSink
+ *
+ * Get the current drift tolerance, in microseconds, used by @sink.
+ *
+ * Returns: The current drift tolerance used by @sink.
+ *
+ * Since: 0.10.31
+ */
+gint64
+gst_base_audio_sink_get_drift_tolerance (GstBaseAudioSink * sink)
+{
+  gint64 result;
+
+  g_return_val_if_fail (GST_IS_BASE_AUDIO_SINK (sink), -1);
+
+  GST_OBJECT_LOCK (sink);
+  result = sink->priv->drift_tolerance;
+  GST_OBJECT_UNLOCK (sink);
+
+  return result;
+}
+
+static void
+gst_base_audio_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstBaseAudioSink *sink;
+
+  sink = GST_BASE_AUDIO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_TIME:
+      sink->buffer_time = g_value_get_int64 (value);
+      break;
+    case PROP_LATENCY_TIME:
+      sink->latency_time = g_value_get_int64 (value);
+      break;
+    case PROP_PROVIDE_CLOCK:
+      gst_base_audio_sink_set_provide_clock (sink, g_value_get_boolean (value));
+      break;
+    case PROP_SLAVE_METHOD:
+      gst_base_audio_sink_set_slave_method (sink, g_value_get_enum (value));
+      break;
+    case PROP_CAN_ACTIVATE_PULL:
+      GST_BASE_SINK (sink)->can_activate_pull = g_value_get_boolean (value);
+      break;
+    case PROP_DRIFT_TOLERANCE:
+      gst_base_audio_sink_set_drift_tolerance (sink, g_value_get_int64 (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_base_audio_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstBaseAudioSink *sink;
+
+  sink = GST_BASE_AUDIO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_TIME:
+      g_value_set_int64 (value, sink->buffer_time);
+      break;
+    case PROP_LATENCY_TIME:
+      g_value_set_int64 (value, sink->latency_time);
+      break;
+    case PROP_PROVIDE_CLOCK:
+      g_value_set_boolean (value, gst_base_audio_sink_get_provide_clock (sink));
+      break;
+    case PROP_SLAVE_METHOD:
+      g_value_set_enum (value, gst_base_audio_sink_get_slave_method (sink));
+      break;
+    case PROP_CAN_ACTIVATE_PULL:
+      g_value_set_boolean (value, GST_BASE_SINK (sink)->can_activate_pull);
+      break;
+    case PROP_DRIFT_TOLERANCE:
+      g_value_set_int64 (value, gst_base_audio_sink_get_drift_tolerance (sink));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_base_audio_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstBaseAudioSink *sink = GST_BASE_AUDIO_SINK (bsink);
+  GstRingBufferSpec *spec;
+  GstClockTime now;
+  GstClockTime crate_num, crate_denom;
+
+  if (!sink->ringbuffer)
+    return FALSE;
+
+  spec = &sink->ringbuffer->spec;
+
+  GST_DEBUG_OBJECT (sink, "release old ringbuffer");
+
+  /* get current time, updates the last_time. When the subclass has a clock that
+   * restarts from 0 when a new format is negotiated, it will call
+   * gst_audio_clock_reset() which will use this last_time to create an offset
+   * so that time from the clock keeps on increasing monotonically. */
+  now = gst_clock_get_time (sink->provided_clock);
+
+  GST_DEBUG_OBJECT (sink, "time was %" GST_TIME_FORMAT, GST_TIME_ARGS (now));
+
+  /* release old ringbuffer */
+  gst_ring_buffer_pause (sink->ringbuffer);
+  gst_ring_buffer_activate (sink->ringbuffer, FALSE);
+  gst_ring_buffer_release (sink->ringbuffer);
+
+  GST_DEBUG_OBJECT (sink, "parse caps");
+
+  spec->buffer_time = sink->buffer_time;
+  spec->latency_time = sink->latency_time;
+
+  /* parse new caps */
+  if (!gst_ring_buffer_parse_caps (spec, caps))
+    goto parse_error;
+
+  gst_ring_buffer_debug_spec_buff (spec);
+
+  GST_DEBUG_OBJECT (sink, "acquire ringbuffer");
+  if (!gst_ring_buffer_acquire (sink->ringbuffer, spec))
+    goto acquire_error;
+
+  if (bsink->pad_mode == GST_ACTIVATE_PUSH) {
+    GST_DEBUG_OBJECT (sink, "activate ringbuffer");
+    gst_ring_buffer_activate (sink->ringbuffer, TRUE);
+  }
+
+  /* due to possible changes in the spec file we should recalibrate the clock */
+  gst_clock_get_calibration (sink->provided_clock, NULL, NULL,
+      &crate_num, &crate_denom);
+  gst_clock_set_calibration (sink->provided_clock,
+      gst_clock_get_internal_time (sink->provided_clock), now, crate_num,
+      crate_denom);
+
+  /* calculate actual latency and buffer times.
+   * FIXME: In 0.11, store the latency_time internally in ns */
+  spec->latency_time = gst_util_uint64_scale (spec->segsize,
+      (GST_SECOND / GST_USECOND), spec->info.rate * spec->info.bpf);
+
+  spec->buffer_time = spec->segtotal * spec->latency_time;
+
+  gst_ring_buffer_debug_spec_buff (spec);
+
+  return TRUE;
+
+  /* ERRORS */
+parse_error:
+  {
+    GST_DEBUG_OBJECT (sink, "could not parse caps");
+    GST_ELEMENT_ERROR (sink, STREAM, FORMAT,
+        (NULL), ("cannot parse audio format."));
+    return FALSE;
+  }
+acquire_error:
+  {
+    GST_DEBUG_OBJECT (sink, "could not acquire ringbuffer");
+    return FALSE;
+  }
+}
+
+static void
+gst_base_audio_sink_fixate (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstStructure *s;
+  gint width, depth;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  /* fields for all formats */
+  gst_structure_fixate_field_nearest_int (s, "rate", 44100);
+  gst_structure_fixate_field_nearest_int (s, "channels", 2);
+  gst_structure_fixate_field_nearest_int (s, "width", 16);
+
+  /* fields for int */
+  if (gst_structure_has_field (s, "depth")) {
+    gst_structure_get_int (s, "width", &width);
+    /* round width to nearest multiple of 8 for the depth */
+    depth = GST_ROUND_UP_8 (width);
+    gst_structure_fixate_field_nearest_int (s, "depth", depth);
+  }
+  if (gst_structure_has_field (s, "signed"))
+    gst_structure_fixate_field_boolean (s, "signed", TRUE);
+  if (gst_structure_has_field (s, "endianness"))
+    gst_structure_fixate_field_nearest_int (s, "endianness", G_BYTE_ORDER);
+}
+
+static void
+gst_base_audio_sink_get_times (GstBaseSink * bsink, GstBuffer * buffer,
+    GstClockTime * start, GstClockTime * end)
+{
+  /* our clock sync is a bit too much for the base class to handle so
+   * we implement it ourselves. */
+  *start = GST_CLOCK_TIME_NONE;
+  *end = GST_CLOCK_TIME_NONE;
+}
+
+/* This waits for the drain to happen and can be canceled */
+static gboolean
+gst_base_audio_sink_drain (GstBaseAudioSink * sink)
+{
+  if (!sink->ringbuffer)
+    return TRUE;
+  if (!sink->ringbuffer->spec.info.rate)
+    return TRUE;
+
+  /* if PLAYING is interrupted,
+   * arrange to have clock running when going to PLAYING again */
+  g_atomic_int_set (&sink->eos_rendering, 1);
+
+  /* need to start playback before we can drain, but only when
+   * we have successfully negotiated a format and thus acquired the
+   * ringbuffer. */
+  if (gst_ring_buffer_is_acquired (sink->ringbuffer))
+    gst_ring_buffer_start (sink->ringbuffer);
+
+  if (sink->priv->eos_time != -1) {
+    GST_DEBUG_OBJECT (sink,
+        "last sample time %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (sink->priv->eos_time));
+
+    /* wait for the EOS time to be reached, this is the time when the last
+     * sample is played. */
+    gst_base_sink_wait_eos (GST_BASE_SINK (sink), sink->priv->eos_time, NULL);
+
+    GST_DEBUG_OBJECT (sink, "drained audio");
+  }
+  g_atomic_int_set (&sink->eos_rendering, 0);
+  return TRUE;
+}
+
+static gboolean
+gst_base_audio_sink_event (GstBaseSink * bsink, GstEvent * event)
+{
+  GstBaseAudioSink *sink = GST_BASE_AUDIO_SINK (bsink);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      if (sink->ringbuffer)
+        gst_ring_buffer_set_flushing (sink->ringbuffer, TRUE);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      /* always resync on sample after a flush */
+      sink->priv->avg_skew = -1;
+      sink->next_sample = -1;
+      sink->priv->eos_time = -1;
+      if (sink->ringbuffer)
+        gst_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
+      break;
+    case GST_EVENT_EOS:
+      /* now wait till we played everything */
+      gst_base_audio_sink_drain (sink);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_base_audio_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer)
+{
+  GstBaseAudioSink *sink = GST_BASE_AUDIO_SINK (bsink);
+
+  if (!gst_ring_buffer_is_acquired (sink->ringbuffer))
+    goto wrong_state;
+
+  /* we don't really do anything when prerolling. We could make a
+   * property to play this buffer to have some sort of scrubbing
+   * support. */
+  return GST_FLOW_OK;
+
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (sink, "ringbuffer in wrong state");
+    GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("sink not negotiated."));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static guint64
+gst_base_audio_sink_get_offset (GstBaseAudioSink * sink)
+{
+  guint64 sample;
+  gint writeseg, segdone, sps;
+  gint diff;
+
+  /* assume we can append to the previous sample */
+  sample = sink->next_sample;
+  /* no previous sample, try to insert at position 0 */
+  if (sample == -1)
+    sample = 0;
+
+  sps = sink->ringbuffer->samples_per_seg;
+
+  /* figure out the segment and the offset inside the segment where
+   * the sample should be written. */
+  writeseg = sample / sps;
+
+  /* get the currently processed segment */
+  segdone = g_atomic_int_get (&sink->ringbuffer->segdone)
+      - sink->ringbuffer->segbase;
+
+  /* see how far away it is from the write segment */
+  diff = writeseg - segdone;
+  if (diff < 0) {
+    /* sample would be dropped, position to next playable position */
+    sample = (segdone + 1) * sps;
+  }
+
+  return sample;
+}
+
+static GstClockTime
+clock_convert_external (GstClockTime external, GstClockTime cinternal,
+    GstClockTime cexternal, GstClockTime crate_num, GstClockTime crate_denom)
+{
+  /* adjust for rate and speed */
+  if (external >= cexternal) {
+    external =
+        gst_util_uint64_scale (external - cexternal, crate_denom, crate_num);
+    external += cinternal;
+  } else {
+    external =
+        gst_util_uint64_scale (cexternal - external, crate_denom, crate_num);
+    if (cinternal > external)
+      external = cinternal - external;
+    else
+      external = 0;
+  }
+  return external;
+}
+
+/* algorithm to calculate sample positions that will result in resampling to
+ * match the clock rate of the master */
+static void
+gst_base_audio_sink_resample_slaving (GstBaseAudioSink * sink,
+    GstClockTime render_start, GstClockTime render_stop,
+    GstClockTime * srender_start, GstClockTime * srender_stop)
+{
+  GstClockTime cinternal, cexternal;
+  GstClockTime crate_num, crate_denom;
+
+  /* FIXME, we can sample and add observations here or use the timeouts on the
+   * clock. No idea which one is better or more stable. The timeout seems more
+   * arbitrary but this one seems more demanding and does not work when there is
+   * no data comming in to the sink. */
+#if 0
+  GstClockTime etime, itime;
+  gdouble r_squared;
+
+  /* sample clocks and figure out clock skew */
+  etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink));
+  itime = gst_audio_clock_get_time (sink->provided_clock);
+
+  /* add new observation */
+  gst_clock_add_observation (sink->provided_clock, itime, etime, &r_squared);
+#endif
+
+  /* get calibration parameters to compensate for speed and offset differences
+   * when we are slaved */
+  gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal,
+      &crate_num, &crate_denom);
+
+  GST_DEBUG_OBJECT (sink, "internal %" GST_TIME_FORMAT " external %"
+      GST_TIME_FORMAT " %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT " = %f",
+      GST_TIME_ARGS (cinternal), GST_TIME_ARGS (cexternal), crate_num,
+      crate_denom, gst_guint64_to_gdouble (crate_num) /
+      gst_guint64_to_gdouble (crate_denom));
+
+  if (crate_num == 0)
+    crate_denom = crate_num = 1;
+
+  /* bring external time to internal time */
+  render_start = clock_convert_external (render_start, cinternal, cexternal,
+      crate_num, crate_denom);
+  render_stop = clock_convert_external (render_stop, cinternal, cexternal,
+      crate_num, crate_denom);
+
+  GST_DEBUG_OBJECT (sink,
+      "after slaving: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
+
+  *srender_start = render_start;
+  *srender_stop = render_stop;
+}
+
+/* algorithm to calculate sample positions that will result in changing the
+ * playout pointer to match the clock rate of the master */
+static void
+gst_base_audio_sink_skew_slaving (GstBaseAudioSink * sink,
+    GstClockTime render_start, GstClockTime render_stop,
+    GstClockTime * srender_start, GstClockTime * srender_stop)
+{
+  GstClockTime cinternal, cexternal, crate_num, crate_denom;
+  GstClockTime etime, itime;
+  GstClockTimeDiff skew, mdrift, mdrift2;
+  gint driftsamples;
+  gint64 last_align;
+
+  /* get calibration parameters to compensate for offsets */
+  gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal,
+      &crate_num, &crate_denom);
+
+  /* sample clocks and figure out clock skew */
+  etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink));
+  itime = gst_audio_clock_get_time (sink->provided_clock);
+  itime = gst_audio_clock_adjust (sink->provided_clock, itime);
+
+  GST_DEBUG_OBJECT (sink,
+      "internal %" GST_TIME_FORMAT " external %" GST_TIME_FORMAT
+      " cinternal %" GST_TIME_FORMAT " cexternal %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime),
+      GST_TIME_ARGS (cinternal), GST_TIME_ARGS (cexternal));
+
+  /* make sure we never go below 0 */
+  etime = etime > cexternal ? etime - cexternal : 0;
+  itime = itime > cinternal ? itime - cinternal : 0;
+
+  /* do itime - etime.
+   * positive value means external clock goes slower
+   * negative value means external clock goes faster */
+  skew = GST_CLOCK_DIFF (etime, itime);
+  if (sink->priv->avg_skew == -1) {
+    /* first observation */
+    sink->priv->avg_skew = skew;
+  } else {
+    /* next observations use a moving average */
+    sink->priv->avg_skew = (31 * sink->priv->avg_skew + skew) / 32;
+  }
+
+  GST_DEBUG_OBJECT (sink, "internal %" GST_TIME_FORMAT " external %"
+      GST_TIME_FORMAT " skew %" G_GINT64_FORMAT " avg %" G_GINT64_FORMAT,
+      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime), skew, sink->priv->avg_skew);
+
+  /* the max drift we allow */
+  mdrift = sink->priv->drift_tolerance * 1000;
+  mdrift2 = mdrift / 2;
+
+  /* adjust playout pointer based on skew */
+  if (sink->priv->avg_skew > mdrift2) {
+    /* master is running slower, move internal time forward */
+    GST_WARNING_OBJECT (sink,
+        "correct clock skew %" G_GINT64_FORMAT " > %" G_GINT64_FORMAT,
+        sink->priv->avg_skew, mdrift2);
+    cexternal = cexternal > mdrift ? cexternal - mdrift : 0;
+    sink->priv->avg_skew -= mdrift;
+
+    driftsamples = (sink->ringbuffer->spec.info.rate * mdrift) / GST_SECOND;
+    last_align = sink->priv->last_align;
+
+    /* if we were aligning in the wrong direction or we aligned more than what we
+     * will correct, resync */
+    if (last_align < 0 || last_align > driftsamples)
+      sink->next_sample = -1;
+
+    GST_DEBUG_OBJECT (sink,
+        "last_align %" G_GINT64_FORMAT " driftsamples %u, next %"
+        G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample);
+
+    gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal,
+        crate_num, crate_denom);
+  } else if (sink->priv->avg_skew < -mdrift2) {
+    /* master is running faster, move external time forwards */
+    GST_WARNING_OBJECT (sink,
+        "correct clock skew %" G_GINT64_FORMAT " < %" G_GINT64_FORMAT,
+        sink->priv->avg_skew, -mdrift2);
+    cexternal += mdrift;
+    sink->priv->avg_skew += mdrift;
+
+    driftsamples = (sink->ringbuffer->spec.info.rate * mdrift) / GST_SECOND;
+    last_align = sink->priv->last_align;
+
+    /* if we were aligning in the wrong direction or we aligned more than what we
+     * will correct, resync */
+    if (last_align > 0 || -last_align > driftsamples)
+      sink->next_sample = -1;
+
+    GST_DEBUG_OBJECT (sink,
+        "last_align %" G_GINT64_FORMAT " driftsamples %u, next %"
+        G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample);
+
+    gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal,
+        crate_num, crate_denom);
+  }
+
+  /* convert, ignoring speed */
+  render_start = clock_convert_external (render_start, cinternal, cexternal,
+      crate_num, crate_denom);
+  render_stop = clock_convert_external (render_stop, cinternal, cexternal,
+      crate_num, crate_denom);
+
+  *srender_start = render_start;
+  *srender_stop = render_stop;
+}
+
+/* apply the clock offset but do no slaving otherwise */
+static void
+gst_base_audio_sink_none_slaving (GstBaseAudioSink * sink,
+    GstClockTime render_start, GstClockTime render_stop,
+    GstClockTime * srender_start, GstClockTime * srender_stop)
+{
+  GstClockTime cinternal, cexternal, crate_num, crate_denom;
+
+  /* get calibration parameters to compensate for offsets */
+  gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal,
+      &crate_num, &crate_denom);
+
+  /* convert, ignoring speed */
+  render_start = clock_convert_external (render_start, cinternal, cexternal,
+      crate_num, crate_denom);
+  render_stop = clock_convert_external (render_stop, cinternal, cexternal,
+      crate_num, crate_denom);
+
+  *srender_start = render_start;
+  *srender_stop = render_stop;
+}
+
+/* converts render_start and render_stop to their slaved values */
+static void
+gst_base_audio_sink_handle_slaving (GstBaseAudioSink * sink,
+    GstClockTime render_start, GstClockTime render_stop,
+    GstClockTime * srender_start, GstClockTime * srender_stop)
+{
+  switch (sink->priv->slave_method) {
+    case GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE:
+      gst_base_audio_sink_resample_slaving (sink, render_start, render_stop,
+          srender_start, srender_stop);
+      break;
+    case GST_BASE_AUDIO_SINK_SLAVE_SKEW:
+      gst_base_audio_sink_skew_slaving (sink, render_start, render_stop,
+          srender_start, srender_stop);
+      break;
+    case GST_BASE_AUDIO_SINK_SLAVE_NONE:
+      gst_base_audio_sink_none_slaving (sink, render_start, render_stop,
+          srender_start, srender_stop);
+      break;
+    default:
+      g_warning ("unknown slaving method %d", sink->priv->slave_method);
+      break;
+  }
+}
+
+/* must be called with LOCK */
+static GstFlowReturn
+gst_base_audio_sink_sync_latency (GstBaseSink * bsink, GstMiniObject * obj)
+{
+  GstClock *clock;
+  GstClockReturn status;
+  GstClockTime time, render_delay;
+  GstFlowReturn ret;
+  GstBaseAudioSink *sink;
+  GstClockTime itime, etime;
+  GstClockTime rate_num, rate_denom;
+  GstClockTimeDiff jitter;
+
+  sink = GST_BASE_AUDIO_SINK (bsink);
+
+  clock = GST_ELEMENT_CLOCK (sink);
+  if (G_UNLIKELY (clock == NULL))
+    goto no_clock;
+
+  /* we provided the global clock, don't need to do anything special */
+  if (clock == sink->provided_clock)
+    goto no_slaving;
+
+  GST_OBJECT_UNLOCK (sink);
+
+  do {
+    GST_DEBUG_OBJECT (sink, "checking preroll");
+
+    ret = gst_base_sink_do_preroll (bsink, obj);
+    if (ret != GST_FLOW_OK)
+      goto flushing;
+
+    GST_OBJECT_LOCK (sink);
+    time = sink->priv->us_latency;
+    GST_OBJECT_UNLOCK (sink);
+
+    /* Renderdelay is added onto our own latency, and needs
+     * to be subtracted as well */
+    render_delay = gst_base_sink_get_render_delay (bsink);
+
+    if (G_LIKELY (time > render_delay))
+      time -= render_delay;
+    else
+      time = 0;
+
+    /* preroll done, we can sync since we are in PLAYING now. */
+    GST_DEBUG_OBJECT (sink, "possibly waiting for clock to reach %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (time));
+
+    /* wait for the clock, this can be interrupted because we got shut down or
+     * we PAUSED. */
+    status = gst_base_sink_wait_clock (bsink, time, &jitter);
+
+    GST_DEBUG_OBJECT (sink, "clock returned %d %" GST_TIME_FORMAT, status,
+        GST_TIME_ARGS (jitter));
+
+    /* invalid time, no clock or sync disabled, just continue then */
+    if (status == GST_CLOCK_BADTIME)
+      break;
+
+    /* waiting could have been interrupted and we can be flushing now */
+    if (G_UNLIKELY (bsink->flushing))
+      goto flushing;
+
+    /* retry if we got unscheduled, which means we did not reach the timeout
+     * yet. if some other error occures, we continue. */
+  } while (status == GST_CLOCK_UNSCHEDULED);
+
+  GST_OBJECT_LOCK (sink);
+  GST_DEBUG_OBJECT (sink, "latency synced");
+
+  /* when we prerolled in time, we can accurately set the calibration,
+   * our internal clock should exactly have been the latency (== the running
+   * time of the external clock) */
+  etime = GST_ELEMENT_CAST (sink)->base_time + time;
+  itime = gst_audio_clock_get_time (sink->provided_clock);
+  itime = gst_audio_clock_adjust (sink->provided_clock, itime);
+
+  if (status == GST_CLOCK_EARLY) {
+    /* when we prerolled late, we have to take into account the lateness */
+    GST_DEBUG_OBJECT (sink, "late preroll, adding jitter");
+    etime += jitter;
+  }
+
+  /* start ringbuffer so we can start slaving right away when we need to */
+  gst_ring_buffer_start (sink->ringbuffer);
+
+  GST_DEBUG_OBJECT (sink,
+      "internal time: %" GST_TIME_FORMAT " external time: %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime));
+
+  /* copy the original calibrated rate but update the internal and external
+   * times. */
+  gst_clock_get_calibration (sink->provided_clock, NULL, NULL, &rate_num,
+      &rate_denom);
+  gst_clock_set_calibration (sink->provided_clock, itime, etime,
+      rate_num, rate_denom);
+
+  switch (sink->priv->slave_method) {
+    case GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE:
+      /* only set as master when we are resampling */
+      GST_DEBUG_OBJECT (sink, "Setting clock as master");
+      gst_clock_set_master (sink->provided_clock, clock);
+      break;
+    case GST_BASE_AUDIO_SINK_SLAVE_SKEW:
+    case GST_BASE_AUDIO_SINK_SLAVE_NONE:
+    default:
+      break;
+  }
+
+  sink->priv->avg_skew = -1;
+  sink->next_sample = -1;
+  sink->priv->eos_time = -1;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+no_clock:
+  {
+    GST_DEBUG_OBJECT (sink, "we have no clock");
+    return GST_FLOW_OK;
+  }
+no_slaving:
+  {
+    GST_DEBUG_OBJECT (sink, "we are not slaved");
+    return GST_FLOW_OK;
+  }
+flushing:
+  {
+    GST_DEBUG_OBJECT (sink, "we are flushing");
+    GST_OBJECT_LOCK (sink);
+    return GST_FLOW_WRONG_STATE;
+  }
+}
+
+static gint64
+gst_base_audio_sink_get_alignment (GstBaseAudioSink * sink,
+    GstClockTime sample_offset)
+{
+  GstRingBuffer *ringbuf = sink->ringbuffer;
+  gint64 align;
+  gint64 diff;
+  gint64 maxdrift;
+  gint segdone = g_atomic_int_get (&ringbuf->segdone) - ringbuf->segbase;
+  gint64 samples_done = segdone * ringbuf->samples_per_seg;
+  gint64 headroom = sample_offset - samples_done;
+  gboolean allow_align = TRUE;
+  gint rate;
+
+  /* now try to align the sample to the previous one, first see how big the
+   * difference is. */
+  if (sample_offset >= sink->next_sample)
+    diff = sample_offset - sink->next_sample;
+  else
+    diff = sink->next_sample - sample_offset;
+
+  rate = GST_AUDIO_INFO_RATE (&ringbuf->spec.info);
+
+  /* calculate the max allowed drift in units of samples. By default this is
+   * 20ms and should be anough to compensate for timestamp rounding errors. */
+  maxdrift = (rate * sink->priv->drift_tolerance) / GST_MSECOND;
+
+  /* calc align with previous sample */
+  align = sink->next_sample - sample_offset;
+
+  /* don't align if it means writing behind the read-segment */
+  if (diff > headroom && align < 0)
+    allow_align = FALSE;
+
+  if (G_LIKELY (diff < maxdrift && allow_align)) {
+    GST_DEBUG_OBJECT (sink,
+        "align with prev sample, ABS (%" G_GINT64_FORMAT ") < %"
+        G_GINT64_FORMAT, align, maxdrift);
+  } else {
+    /* calculate sample diff in seconds for error message */
+    gint64 diff_s = gst_util_uint64_scale_int (diff, GST_SECOND, rate);
+    /* timestamps drifted apart from previous samples too much, we need to
+     * resync. We log this as an element warning. */
+    GST_WARNING_OBJECT (sink,
+        "Unexpected discontinuity in audio timestamps of "
+        "%s%" GST_TIME_FORMAT ", resyncing",
+        sample_offset > sink->next_sample ? "+" : "-", GST_TIME_ARGS (diff_s));
+    align = 0;
+  }
+
+  return align;
+}
+
+static GstFlowReturn
+gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
+{
+  guint64 in_offset;
+  GstClockTime time, stop, render_start, render_stop, sample_offset;
+  GstClockTimeDiff sync_offset, ts_offset;
+  GstBaseAudioSinkClass *bclass;
+  GstBaseAudioSink *sink;
+  GstRingBuffer *ringbuf;
+  gint64 diff, align;
+  guint64 ctime, cstop;
+  gsize offset;
+  guint8 *data;
+  gsize size;
+  guint samples, written;
+  gint bpf, rate;
+  gint accum;
+  gint out_samples;
+  GstClockTime base_time, render_delay, latency;
+  GstClock *clock;
+  gboolean sync, slaved, align_next;
+  GstFlowReturn ret;
+  GstSegment clip_seg;
+  gint64 time_offset;
+  GstBuffer *out = NULL;
+
+  sink = GST_BASE_AUDIO_SINK (bsink);
+  bclass = GST_BASE_AUDIO_SINK_GET_CLASS (sink);
+
+  ringbuf = sink->ringbuffer;
+
+  /* can't do anything when we don't have the device */
+  if (G_UNLIKELY (!gst_ring_buffer_is_acquired (ringbuf)))
+    goto wrong_state;
+
+  /* Wait for upstream latency before starting the ringbuffer, we do this so
+   * that we can align the first sample of the ringbuffer to the base_time +
+   * latency. */
+  GST_OBJECT_LOCK (sink);
+  base_time = GST_ELEMENT_CAST (sink)->base_time;
+  if (G_UNLIKELY (sink->priv->sync_latency)) {
+    ret = gst_base_audio_sink_sync_latency (bsink, GST_MINI_OBJECT_CAST (buf));
+    GST_OBJECT_UNLOCK (sink);
+    if (G_UNLIKELY (ret != GST_FLOW_OK))
+      goto sync_latency_failed;
+    /* only do this once until we are set back to PLAYING */
+    sink->priv->sync_latency = FALSE;
+  } else {
+    GST_OBJECT_UNLOCK (sink);
+  }
+
+  /* Before we go on, let's see if we need to payload the data. If yes, we also
+   * need to unref the output buffer before leaving. */
+  if (bclass->payload) {
+    out = bclass->payload (sink, buf);
+
+    if (!out)
+      goto payload_failed;
+
+    buf = out;
+  }
+
+  bpf = GST_AUDIO_INFO_BPF (&ringbuf->spec.info);
+  rate = GST_AUDIO_INFO_RATE (&ringbuf->spec.info);
+
+  size = gst_buffer_get_size (buf);
+  if (G_UNLIKELY (size % bpf) != 0)
+    goto wrong_size;
+
+  samples = size / bpf;
+  out_samples = samples;
+
+  in_offset = GST_BUFFER_OFFSET (buf);
+  time = GST_BUFFER_TIMESTAMP (buf);
+
+  GST_DEBUG_OBJECT (sink,
+      "time %" GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT ", start %"
+      GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), in_offset,
+      GST_TIME_ARGS (bsink->segment.start), samples);
+
+  offset = 0;
+
+  /* if not valid timestamp or we can't clip or sync, try to play
+   * sample ASAP */
+  if (!GST_CLOCK_TIME_IS_VALID (time)) {
+    render_start = gst_base_audio_sink_get_offset (sink);
+    render_stop = render_start + samples;
+    GST_DEBUG_OBJECT (sink, "Buffer of size %" G_GSIZE_FORMAT " has no time."
+        " Using render_start=%" G_GUINT64_FORMAT, size, render_start);
+    /* we don't have a start so we don't know stop either */
+    stop = -1;
+    goto no_sync;
+  }
+
+  /* let's calc stop based on the number of samples in the buffer instead
+   * of trusting the DURATION */
+  stop = time + gst_util_uint64_scale_int (samples, GST_SECOND, rate);
+
+  /* prepare the clipping segment. Since we will be subtracting ts-offset and
+   * device-delay later we scale the start and stop with those values so that we
+   * can correctly clip them */
+  clip_seg.format = GST_FORMAT_TIME;
+  clip_seg.start = bsink->segment.start;
+  clip_seg.stop = bsink->segment.stop;
+  clip_seg.duration = -1;
+
+  /* the sync offset is the combination of ts-offset and device-delay */
+  latency = gst_base_sink_get_latency (bsink);
+  ts_offset = gst_base_sink_get_ts_offset (bsink);
+  render_delay = gst_base_sink_get_render_delay (bsink);
+  sync_offset = ts_offset - render_delay + latency;
+
+  GST_DEBUG_OBJECT (sink,
+      "sync-offset %" G_GINT64_FORMAT ", render-delay %" GST_TIME_FORMAT
+      ", ts-offset %" G_GINT64_FORMAT, sync_offset,
+      GST_TIME_ARGS (render_delay), ts_offset);
+
+  /* compensate for ts-offset and device-delay when negative we need to
+   * clip. */
+  if (sync_offset < 0) {
+    clip_seg.start += -sync_offset;
+    if (clip_seg.stop != -1)
+      clip_seg.stop += -sync_offset;
+  }
+
+  /* samples should be rendered based on their timestamp. All samples
+   * arriving before the segment.start or after segment.stop are to be
+   * thrown away. All samples should also be clipped to the segment
+   * boundaries */
+  if (!gst_segment_clip (&clip_seg, GST_FORMAT_TIME, time, stop, &ctime,
+          &cstop))
+    goto out_of_segment;
+
+  /* see if some clipping happened */
+  diff = ctime - time;
+  if (diff > 0) {
+    /* bring clipped time to samples */
+    diff = gst_util_uint64_scale_int (diff, rate, GST_SECOND);
+    GST_DEBUG_OBJECT (sink, "clipping start to %" GST_TIME_FORMAT " %"
+        G_GUINT64_FORMAT " samples", GST_TIME_ARGS (ctime), diff);
+    samples -= diff;
+    offset += diff * bpf;
+    time = ctime;
+  }
+  diff = stop - cstop;
+  if (diff > 0) {
+    /* bring clipped time to samples */
+    diff = gst_util_uint64_scale_int (diff, rate, GST_SECOND);
+    GST_DEBUG_OBJECT (sink, "clipping stop to %" GST_TIME_FORMAT " %"
+        G_GUINT64_FORMAT " samples", GST_TIME_ARGS (cstop), diff);
+    samples -= diff;
+    stop = cstop;
+  }
+
+  /* figure out how to sync */
+  if ((clock = GST_ELEMENT_CLOCK (bsink)))
+    sync = bsink->sync;
+  else
+    sync = FALSE;
+
+  if (!sync) {
+    /* no sync needed, play sample ASAP */
+    render_start = gst_base_audio_sink_get_offset (sink);
+    render_stop = render_start + samples;
+    GST_DEBUG_OBJECT (sink,
+        "no sync needed. Using render_start=%" G_GUINT64_FORMAT, render_start);
+    goto no_sync;
+  }
+
+  /* bring buffer start and stop times to running time */
+  render_start =
+      gst_segment_to_running_time (&bsink->segment, GST_FORMAT_TIME, time);
+  render_stop =
+      gst_segment_to_running_time (&bsink->segment, GST_FORMAT_TIME, stop);
+
+  GST_DEBUG_OBJECT (sink,
+      "running: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
+
+  /* store the time of the last sample, we'll use this to perform sync on the
+   * last sample when draining the buffer */
+  if (bsink->segment.rate >= 0.0) {
+    sink->priv->eos_time = render_stop;
+  } else {
+    sink->priv->eos_time = render_start;
+  }
+
+  /* compensate for ts-offset and delay we know this will not underflow because we
+   * clipped above. */
+  GST_DEBUG_OBJECT (sink,
+      "compensating for sync-offset %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (sync_offset));
+  render_start += sync_offset;
+  render_stop += sync_offset;
+
+  GST_DEBUG_OBJECT (sink, "adding base_time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (base_time));
+
+  /* add base time to sync against the clock */
+  render_start += base_time;
+  render_stop += base_time;
+
+  GST_DEBUG_OBJECT (sink,
+      "after compensation: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
+
+  if ((slaved = clock != sink->provided_clock)) {
+    /* handle clock slaving */
+    gst_base_audio_sink_handle_slaving (sink, render_start, render_stop,
+        &render_start, &render_stop);
+  } else {
+    /* no slaving needed but we need to adapt to the clock calibration
+     * parameters */
+    gst_base_audio_sink_none_slaving (sink, render_start, render_stop,
+        &render_start, &render_stop);
+  }
+
+  GST_DEBUG_OBJECT (sink,
+      "final timestamps: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
+
+  /* bring to position in the ringbuffer */
+  time_offset = GST_AUDIO_CLOCK_CAST (sink->provided_clock)->time_offset;
+  GST_DEBUG_OBJECT (sink,
+      "time offset %" GST_TIME_FORMAT, GST_TIME_ARGS (time_offset));
+  if (render_start > time_offset)
+    render_start -= time_offset;
+  else
+    render_start = 0;
+  if (render_stop > time_offset)
+    render_stop -= time_offset;
+  else
+    render_stop = 0;
+
+  /* in some clock slaving cases, all late samples end up at 0 first,
+   * and subsequent ones align with that until threshold exceeded,
+   * and then sync back to 0 and so on, so avoid that altogether */
+  if (G_UNLIKELY (render_start == 0 && render_stop == 0))
+    goto too_late;
+
+  /* and bring the time to the rate corrected offset in the buffer */
+  render_start = gst_util_uint64_scale_int (render_start, rate, GST_SECOND);
+  render_stop = gst_util_uint64_scale_int (render_stop, rate, GST_SECOND);
+
+  /* positive playback rate, first sample is render_start, negative rate, first
+   * sample is render_stop. When no rate conversion is active, render exactly
+   * the amount of input samples to avoid aligning to rounding errors. */
+  if (bsink->segment.rate >= 0.0) {
+    sample_offset = render_start;
+    if (bsink->segment.rate == 1.0)
+      render_stop = sample_offset + samples;
+  } else {
+    sample_offset = render_stop;
+    if (bsink->segment.rate == -1.0)
+      render_start = sample_offset + samples;
+  }
+
+  /* always resync after a discont */
+  if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT))) {
+    GST_DEBUG_OBJECT (sink, "resync after discont");
+    goto no_align;
+  }
+
+  /* resync when we don't know what to align the sample with */
+  if (G_UNLIKELY (sink->next_sample == -1)) {
+    GST_DEBUG_OBJECT (sink,
+        "no align possible: no previous sample position known");
+    goto no_align;
+  }
+
+  align = gst_base_audio_sink_get_alignment (sink, sample_offset);
+  sink->priv->last_align = align;
+
+  /* apply alignment */
+  render_start += align;
+
+  /* only align stop if we are not slaved to resample */
+  if (slaved && sink->priv->slave_method == GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE) {
+    GST_DEBUG_OBJECT (sink, "no stop time align needed: we are slaved");
+    goto no_align;
+  }
+  render_stop += align;
+
+no_align:
+  /* number of target samples is difference between start and stop */
+  out_samples = render_stop - render_start;
+
+no_sync:
+  /* we render the first or last sample first, depending on the rate */
+  if (bsink->segment.rate >= 0.0)
+    sample_offset = render_start;
+  else
+    sample_offset = render_stop;
+
+  GST_DEBUG_OBJECT (sink, "rendering at %" G_GUINT64_FORMAT " %d/%d",
+      sample_offset, samples, out_samples);
+
+  /* we need to accumulate over different runs for when we get interrupted */
+  accum = 0;
+  align_next = TRUE;
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  do {
+    written =
+        gst_ring_buffer_commit_full (ringbuf, &sample_offset, data + offset,
+        samples, out_samples, &accum);
+
+    GST_DEBUG_OBJECT (sink, "wrote %u of %u", written, samples);
+    /* if we wrote all, we're done */
+    if (written == samples)
+      break;
+
+    /* else something interrupted us and we wait for preroll. */
+    if ((ret = gst_base_sink_wait_preroll (bsink)) != GST_FLOW_OK)
+      goto stopping;
+
+    /* if we got interrupted, we cannot assume that the next sample should
+     * be aligned to this one */
+    align_next = FALSE;
+
+    /* update the output samples. FIXME, this will just skip them when pausing
+     * during trick mode */
+    if (out_samples > written) {
+      out_samples -= written;
+      accum = 0;
+    } else
+      break;
+
+    samples -= written;
+    offset += written * bpf;
+  } while (TRUE);
+  gst_buffer_unmap (buf, data, size);
+
+  if (align_next)
+    sink->next_sample = sample_offset;
+  else
+    sink->next_sample = -1;
+
+  GST_DEBUG_OBJECT (sink, "next sample expected at %" G_GUINT64_FORMAT,
+      sink->next_sample);
+
+  if (GST_CLOCK_TIME_IS_VALID (stop) && stop >= bsink->segment.stop) {
+    GST_DEBUG_OBJECT (sink,
+        "start playback because we are at the end of segment");
+    gst_ring_buffer_start (ringbuf);
+  }
+
+  ret = GST_FLOW_OK;
+
+done:
+  if (out)
+    gst_buffer_unref (out);
+
+  return ret;
+
+  /* SPECIAL cases */
+out_of_segment:
+  {
+    GST_DEBUG_OBJECT (sink,
+        "dropping sample out of segment time %" GST_TIME_FORMAT ", start %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (time),
+        GST_TIME_ARGS (bsink->segment.start));
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+too_late:
+  {
+    GST_DEBUG_OBJECT (sink, "dropping late sample");
+    return GST_FLOW_OK;
+  }
+  /* ERRORS */
+payload_failed:
+  {
+    GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("failed to payload."));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (sink, "ringbuffer not negotiated");
+    GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("sink not negotiated."));
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+wrong_size:
+  {
+    GST_DEBUG_OBJECT (sink, "wrong size");
+    GST_ELEMENT_ERROR (sink, STREAM, WRONG_TYPE,
+        (NULL), ("sink received buffer of wrong size."));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+stopping:
+  {
+    GST_DEBUG_OBJECT (sink, "preroll got interrupted: %d (%s)", ret,
+        gst_flow_get_name (ret));
+    gst_buffer_unmap (buf, data, size);
+    goto done;
+  }
+sync_latency_failed:
+  {
+    GST_DEBUG_OBJECT (sink, "failed waiting for latency");
+    goto done;
+  }
+}
+
+/**
+ * gst_base_audio_sink_create_ringbuffer:
+ * @sink: a #GstBaseAudioSink.
+ *
+ * Create and return the #GstRingBuffer for @sink. This function will call the
+ * ::create_ringbuffer vmethod and will set @sink as the parent of the returned
+ * buffer (see gst_object_set_parent()).
+ *
+ * Returns: The new ringbuffer of @sink.
+ */
+GstRingBuffer *
+gst_base_audio_sink_create_ringbuffer (GstBaseAudioSink * sink)
+{
+  GstBaseAudioSinkClass *bclass;
+  GstRingBuffer *buffer = NULL;
+
+  bclass = GST_BASE_AUDIO_SINK_GET_CLASS (sink);
+  if (bclass->create_ringbuffer)
+    buffer = bclass->create_ringbuffer (sink);
+
+  if (buffer)
+    gst_object_set_parent (GST_OBJECT (buffer), GST_OBJECT (sink));
+
+  return buffer;
+}
+
+static void
+gst_base_audio_sink_callback (GstRingBuffer * rbuf, guint8 * data, guint len,
+    gpointer user_data)
+{
+  GstBaseSink *basesink;
+  GstBaseAudioSink *sink;
+  GstBuffer *buf;
+  GstFlowReturn ret;
+  gsize size;
+
+  basesink = GST_BASE_SINK (user_data);
+  sink = GST_BASE_AUDIO_SINK (user_data);
+
+  GST_PAD_STREAM_LOCK (basesink->sinkpad);
+
+  /* would be nice to arrange for pad_alloc_buffer to return data -- as it is we
+     will copy twice, once into data, once into DMA */
+  GST_LOG_OBJECT (basesink, "pulling %u bytes offset %" G_GUINT64_FORMAT
+      " to fill audio buffer", len, basesink->offset);
+  ret =
+      gst_pad_pull_range (basesink->sinkpad, basesink->segment.position, len,
+      &buf);
+
+  if (ret != GST_FLOW_OK) {
+    if (ret == GST_FLOW_UNEXPECTED)
+      goto eos;
+    else
+      goto error;
+  }
+
+  GST_BASE_SINK_PREROLL_LOCK (basesink);
+  if (basesink->flushing)
+    goto flushing;
+
+  /* complete preroll and wait for PLAYING */
+  ret = gst_base_sink_do_preroll (basesink, GST_MINI_OBJECT_CAST (buf));
+  if (ret != GST_FLOW_OK)
+    goto preroll_error;
+
+  size = gst_buffer_get_size (buf);
+
+  if (len != size) {
+    GST_INFO_OBJECT (basesink,
+        "got different size than requested from sink pad: %u"
+        " != %" G_GSIZE_FORMAT, len, size);
+    len = MIN (size, len);
+  }
+
+  basesink->segment.position += len;
+
+  gst_buffer_extract (buf, 0, data, len);
+  GST_BASE_SINK_PREROLL_UNLOCK (basesink);
+
+  GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
+
+  return;
+
+error:
+  {
+    GST_WARNING_OBJECT (basesink, "Got flow '%s' but can't return it: %d",
+        gst_flow_get_name (ret), ret);
+    gst_ring_buffer_pause (rbuf);
+    GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
+    return;
+  }
+eos:
+  {
+    /* FIXME: this is not quite correct; we'll be called endlessly until
+     * the sink gets shut down; maybe we should set a flag somewhere, or
+     * set segment.stop and segment.duration to the last sample or so */
+    GST_DEBUG_OBJECT (sink, "EOS");
+    gst_base_audio_sink_drain (sink);
+    gst_ring_buffer_pause (rbuf);
+    gst_element_post_message (GST_ELEMENT_CAST (sink),
+        gst_message_new_eos (GST_OBJECT_CAST (sink)));
+    GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
+  }
+flushing:
+  {
+    GST_DEBUG_OBJECT (sink, "we are flushing");
+    gst_ring_buffer_pause (rbuf);
+    GST_BASE_SINK_PREROLL_UNLOCK (basesink);
+    GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
+    return;
+  }
+preroll_error:
+  {
+    GST_DEBUG_OBJECT (sink, "error %s", gst_flow_get_name (ret));
+    gst_ring_buffer_pause (rbuf);
+    GST_BASE_SINK_PREROLL_UNLOCK (basesink);
+    GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
+    return;
+  }
+}
+
+static gboolean
+gst_base_audio_sink_activate_pull (GstBaseSink * basesink, gboolean active)
+{
+  gboolean ret;
+  GstBaseAudioSink *sink = GST_BASE_AUDIO_SINK (basesink);
+
+  if (active) {
+    GST_DEBUG_OBJECT (basesink, "activating pull");
+
+    gst_ring_buffer_set_callback (sink->ringbuffer,
+        gst_base_audio_sink_callback, sink);
+
+    ret = gst_ring_buffer_activate (sink->ringbuffer, TRUE);
+  } else {
+    GST_DEBUG_OBJECT (basesink, "deactivating pull");
+    gst_ring_buffer_set_callback (sink->ringbuffer, NULL, NULL);
+    ret = gst_ring_buffer_activate (sink->ringbuffer, FALSE);
+  }
+
+  return ret;
+}
+
+#if 0
+/* should be called with the LOCK */
+static GstStateChangeReturn
+gst_base_audio_sink_async_play (GstBaseSink * basesink)
+{
+  GstBaseAudioSink *sink;
+
+  sink = GST_BASE_AUDIO_SINK (basesink);
+
+  GST_DEBUG_OBJECT (sink, "ringbuffer may start now");
+  sink->priv->sync_latency = TRUE;
+  gst_ring_buffer_may_start (sink->ringbuffer, TRUE);
+  if (basesink->pad_mode == GST_ACTIVATE_PULL) {
+    /* we always start the ringbuffer in pull mode immediatly */
+    gst_ring_buffer_start (sink->ringbuffer);
+  }
+
+  return GST_STATE_CHANGE_SUCCESS;
+}
+#endif
+
+static GstStateChangeReturn
+gst_base_audio_sink_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstBaseAudioSink *sink = GST_BASE_AUDIO_SINK (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (sink->ringbuffer == NULL) {
+        gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0);
+        sink->ringbuffer = gst_base_audio_sink_create_ringbuffer (sink);
+      }
+      if (!gst_ring_buffer_open_device (sink->ringbuffer))
+        goto open_failed;
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      sink->next_sample = -1;
+      sink->priv->last_align = -1;
+      sink->priv->eos_time = -1;
+      gst_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
+      gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
+
+      /* Only post clock-provide messages if this is the clock that
+       * we've created. If the subclass has overriden it the subclass
+       * should post this messages whenever necessary */
+      if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) &&
+          GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func ==
+          (GstAudioClockGetTimeFunc) gst_base_audio_sink_get_time)
+        gst_element_post_message (element,
+            gst_message_new_clock_provide (GST_OBJECT_CAST (element),
+                sink->provided_clock, TRUE));
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+    {
+      gboolean eos;
+
+      GST_OBJECT_LOCK (sink);
+      GST_DEBUG_OBJECT (sink, "ringbuffer may start now");
+      sink->priv->sync_latency = TRUE;
+      eos = GST_BASE_SINK (sink)->eos;
+      GST_OBJECT_UNLOCK (sink);
+
+      gst_ring_buffer_may_start (sink->ringbuffer, TRUE);
+      if (GST_BASE_SINK_CAST (sink)->pad_mode == GST_ACTIVATE_PULL ||
+          g_atomic_int_get (&sink->eos_rendering) || eos) {
+        /* we always start the ringbuffer in pull mode immediatly */
+        /* sync rendering on eos needs running clock,
+         * and others need running clock when finished rendering eos */
+        gst_ring_buffer_start (sink->ringbuffer);
+      }
+      break;
+    }
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      /* ringbuffer cannot start anymore */
+      gst_ring_buffer_may_start (sink->ringbuffer, FALSE);
+      gst_ring_buffer_pause (sink->ringbuffer);
+
+      GST_OBJECT_LOCK (sink);
+      sink->priv->sync_latency = FALSE;
+      GST_OBJECT_UNLOCK (sink);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      /* Only post clock-lost messages if this is the clock that
+       * we've created. If the subclass has overriden it the subclass
+       * should post this messages whenever necessary */
+      if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) &&
+          GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func ==
+          (GstAudioClockGetTimeFunc) gst_base_audio_sink_get_time)
+        gst_element_post_message (element,
+            gst_message_new_clock_lost (GST_OBJECT_CAST (element),
+                sink->provided_clock));
+
+      /* make sure we unblock before calling the parent state change
+       * so it can grab the STREAM_LOCK */
+      gst_ring_buffer_set_flushing (sink->ringbuffer, TRUE);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      /* stop slaving ourselves to the master, if any */
+      gst_clock_set_master (sink->provided_clock, NULL);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_ring_buffer_activate (sink->ringbuffer, FALSE);
+      gst_ring_buffer_release (sink->ringbuffer);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      /* we release again here because the aqcuire happens when setting the
+       * caps, which happens before we commit the state to PAUSED and thus the
+       * PAUSED->READY state change (see above, where we release the ringbuffer)
+       * might not be called when we get here. */
+      gst_ring_buffer_activate (sink->ringbuffer, FALSE);
+      gst_ring_buffer_release (sink->ringbuffer);
+      gst_ring_buffer_close_device (sink->ringbuffer);
+      GST_OBJECT_LOCK (sink);
+      gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer));
+      sink->ringbuffer = NULL;
+      GST_OBJECT_UNLOCK (sink);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+
+  /* ERRORS */
+open_failed:
+  {
+    /* subclass must post a meaningfull error message */
+    GST_DEBUG_OBJECT (sink, "open failed");
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
diff --git a/gst-libs/gst/audio/gstbaseaudiosink.h b/gst-libs/gst/audio/gstbaseaudiosink.h
new file mode 100644
index 0000000..0511a0f
--- /dev/null
+++ b/gst-libs/gst/audio/gstbaseaudiosink.h
@@ -0,0 +1,180 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstbaseaudiosink.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* a base class for audio sinks.
+ *
+ * It uses a ringbuffer to schedule playback of samples. This makes
+ * it very easy to drop or insert samples to align incoming
+ * buffers to the exact playback timestamp.
+ *
+ * Subclasses must provide a ringbuffer pointing to either DMA
+ * memory or regular memory. A subclass should also call a callback
+ * function when it has played N segments in the buffer. The subclass
+ * is free to use a thread to signal this callback, use EIO or any
+ * other mechanism.
+ *
+ * The base class is able to operate in push or pull mode. The chain
+ * mode will queue the samples in the ringbuffer as much as possible.
+ * The available space is calculated in the callback function.
+ *
+ * The pull mode will pull_range() a new buffer of N samples with a
+ * configurable latency. This allows for high-end real time
+ * audio processing pipelines driven by the audiosink. The callback
+ * function will be used to perform a pull_range() on the sinkpad.
+ * The thread scheduling the callback can be a real-time thread.
+ *
+ * Subclasses must implement a GstRingBuffer in addition to overriding
+ * the methods in GstBaseSink and this class.
+ */
+
+#ifndef __GST_BASE_AUDIO_SINK_H__
+#define __GST_BASE_AUDIO_SINK_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+#include "gstringbuffer.h"
+#include "gstaudioclock.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_BASE_AUDIO_SINK                (gst_base_audio_sink_get_type())
+#define GST_BASE_AUDIO_SINK(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_AUDIO_SINK,GstBaseAudioSink))
+#define GST_BASE_AUDIO_SINK_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_AUDIO_SINK,GstBaseAudioSinkClass))
+#define GST_BASE_AUDIO_SINK_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_AUDIO_SINK, GstBaseAudioSinkClass))
+#define GST_IS_BASE_AUDIO_SINK(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_AUDIO_SINK))
+#define GST_IS_BASE_AUDIO_SINK_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_AUDIO_SINK))
+
+/**
+ * GST_BASE_AUDIO_SINK_CLOCK:
+ * @obj: a #GstBaseAudioSink
+ *
+ * Get the #GstClock of @obj.
+ */
+#define GST_BASE_AUDIO_SINK_CLOCK(obj)   (GST_BASE_AUDIO_SINK (obj)->clock)
+/**
+ * GST_BASE_AUDIO_SINK_PAD:
+ * @obj: a #GstBaseAudioSink
+ *
+ * Get the sink #GstPad of @obj.
+ */
+#define GST_BASE_AUDIO_SINK_PAD(obj)     (GST_BASE_SINK (obj)->sinkpad)
+
+/**
+ * GstBaseAudioSinkSlaveMethod:
+ * @GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE: Resample to match the master clock
+ * @GST_BASE_AUDIO_SINK_SLAVE_SKEW: Adjust playout pointer when master clock
+ * drifts too much.
+ * @GST_BASE_AUDIO_SINK_SLAVE_NONE: No adjustment is done.
+ *
+ * Different possible clock slaving algorithms used when the internal audio
+ * clock is not selected as the pipeline master clock.
+ */
+typedef enum
+{
+  GST_BASE_AUDIO_SINK_SLAVE_RESAMPLE,
+  GST_BASE_AUDIO_SINK_SLAVE_SKEW,
+  GST_BASE_AUDIO_SINK_SLAVE_NONE
+} GstBaseAudioSinkSlaveMethod;
+
+#define GST_TYPE_BASE_AUDIO_SINK_SLAVE_METHOD (gst_base_audio_sink_slave_method_get_type ())
+
+typedef struct _GstBaseAudioSink GstBaseAudioSink;
+typedef struct _GstBaseAudioSinkClass GstBaseAudioSinkClass;
+typedef struct _GstBaseAudioSinkPrivate GstBaseAudioSinkPrivate;
+
+/**
+ * GstBaseAudioSink:
+ *
+ * Opaque #GstBaseAudioSink.
+ */
+struct _GstBaseAudioSink {
+  GstBaseSink    element;
+
+  /*< protected >*/ /* with LOCK */
+  /* our ringbuffer */
+  GstRingBuffer *ringbuffer;
+
+  /* required buffer and latency in microseconds */
+  guint64        buffer_time;
+  guint64        latency_time;
+
+  /* the next sample to write */
+  guint64        next_sample;
+
+  /* clock */
+  gboolean       provide_clock;
+  GstClock      *provided_clock;
+
+  /* with g_atomic_; currently rendering eos */
+  gboolean       eos_rendering;
+
+  /*< private >*/
+  GstBaseAudioSinkPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstBaseAudioSinkClass:
+ * @parent_class: the parent class.
+ * @create_ringbuffer: create and return a #GstRingBuffer to write to.
+ * @payload: payload data in a format suitable to write to the sink. If no
+ *           payloading is required, returns a reffed copy of the original
+ *           buffer, else returns the payloaded buffer with all other metadata
+ *           copied. (Since: 0.10.35)
+ *
+ * #GstBaseAudioSink class. Override the vmethod to implement
+ * functionality.
+ */
+struct _GstBaseAudioSinkClass {
+  GstBaseSinkClass parent_class;
+
+  /* subclass ringbuffer allocation */
+  GstRingBuffer* (*create_ringbuffer)  (GstBaseAudioSink *sink);
+
+  /* subclass payloader */
+  GstBuffer*     (*payload)            (GstBaseAudioSink *sink,
+                                        GstBuffer        *buffer);
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_base_audio_sink_get_type(void);
+GType gst_base_audio_sink_slave_method_get_type (void);
+
+GstRingBuffer *gst_base_audio_sink_create_ringbuffer (GstBaseAudioSink *sink);
+
+void       gst_base_audio_sink_set_provide_clock      (GstBaseAudioSink *sink, gboolean provide);
+gboolean   gst_base_audio_sink_get_provide_clock      (GstBaseAudioSink *sink);
+
+void       gst_base_audio_sink_set_slave_method       (GstBaseAudioSink *sink,
+                                                       GstBaseAudioSinkSlaveMethod method);
+GstBaseAudioSinkSlaveMethod
+           gst_base_audio_sink_get_slave_method       (GstBaseAudioSink *sink);
+
+void       gst_base_audio_sink_set_drift_tolerance    (GstBaseAudioSink *sink,
+                                                       gint64 drift_tolerance);
+gint64     gst_base_audio_sink_get_drift_tolerance    (GstBaseAudioSink *sink);
+
+G_END_DECLS
+
+#endif /* __GST_BASE_AUDIO_SINK_H__ */
diff --git a/gst-libs/gst/audio/gstbaseaudiosrc.c b/gst-libs/gst/audio/gstbaseaudiosrc.c
new file mode 100644
index 0000000..23c8987
--- /dev/null
+++ b/gst-libs/gst/audio/gstbaseaudiosrc.c
@@ -0,0 +1,1153 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstbaseaudiosrc.c: 
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstbaseaudiosrc
+ * @short_description: Base class for audio sources
+ * @see_also: #GstAudioSrc, #GstRingBuffer.
+ *
+ * This is the base class for audio sources. Subclasses need to implement the
+ * ::create_ringbuffer vmethod. This base class will then take care of
+ * reading samples from the ringbuffer, synchronisation and flushing.
+ *
+ * Last reviewed on 2006-09-27 (0.10.12)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstbaseaudiosrc.h"
+
+#include "gst/gst-i18n-plugin.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_base_audio_src_debug);
+#define GST_CAT_DEFAULT gst_base_audio_src_debug
+
+GType
+gst_base_audio_src_slave_method_get_type (void)
+{
+  static volatile gsize slave_method_type = 0;
+  /* FIXME 0.11: nick should be "retimestamp" not "re-timestamp" */
+  static const GEnumValue slave_method[] = {
+    {GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE,
+        "GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE", "resample"},
+    {GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP,
+        "GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP", "re-timestamp"},
+    {GST_BASE_AUDIO_SRC_SLAVE_SKEW, "GST_BASE_AUDIO_SRC_SLAVE_SKEW", "skew"},
+    {GST_BASE_AUDIO_SRC_SLAVE_NONE, "GST_BASE_AUDIO_SRC_SLAVE_NONE", "none"},
+    {0, NULL, NULL},
+  };
+
+  if (g_once_init_enter (&slave_method_type)) {
+    GType tmp =
+        g_enum_register_static ("GstBaseAudioSrcSlaveMethod", slave_method);
+    g_once_init_leave (&slave_method_type, tmp);
+  }
+  return (GType) slave_method_type;
+}
+
+#define GST_BASE_AUDIO_SRC_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_BASE_AUDIO_SRC, GstBaseAudioSrcPrivate))
+
+struct _GstBaseAudioSrcPrivate
+{
+  gboolean provide_clock;
+
+  /* the clock slaving algorithm in use */
+  GstBaseAudioSrcSlaveMethod slave_method;
+};
+
+/* BaseAudioSrc signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+#define DEFAULT_BUFFER_TIME     ((200 * GST_MSECOND) / GST_USECOND)
+#define DEFAULT_LATENCY_TIME    ((10 * GST_MSECOND) / GST_USECOND)
+#define DEFAULT_ACTUAL_BUFFER_TIME     -1
+#define DEFAULT_ACTUAL_LATENCY_TIME    -1
+#define DEFAULT_PROVIDE_CLOCK   TRUE
+#define DEFAULT_SLAVE_METHOD    GST_BASE_AUDIO_SRC_SLAVE_SKEW
+
+enum
+{
+  PROP_0,
+  PROP_BUFFER_TIME,
+  PROP_LATENCY_TIME,
+  PROP_ACTUAL_BUFFER_TIME,
+  PROP_ACTUAL_LATENCY_TIME,
+  PROP_PROVIDE_CLOCK,
+  PROP_SLAVE_METHOD,
+  PROP_LAST
+};
+
+static void
+_do_init (GType type)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_base_audio_src_debug, "baseaudiosrc", 0,
+      "baseaudiosrc element");
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+}
+
+#define gst_base_audio_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstBaseAudioSrc, gst_base_audio_src, GST_TYPE_PUSH_SRC,
+    _do_init (g_define_type_id));
+
+static void gst_base_audio_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_base_audio_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_base_audio_src_dispose (GObject * object);
+
+static GstStateChangeReturn gst_base_audio_src_change_state (GstElement *
+    element, GstStateChange transition);
+
+static GstClock *gst_base_audio_src_provide_clock (GstElement * elem);
+static GstClockTime gst_base_audio_src_get_time (GstClock * clock,
+    GstBaseAudioSrc * src);
+
+static GstFlowReturn gst_base_audio_src_create (GstBaseSrc * bsrc,
+    guint64 offset, guint length, GstBuffer ** buf);
+
+static gboolean gst_base_audio_src_event (GstBaseSrc * bsrc, GstEvent * event);
+static void gst_base_audio_src_get_times (GstBaseSrc * bsrc,
+    GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
+static gboolean gst_base_audio_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps);
+static gboolean gst_base_audio_src_query (GstBaseSrc * bsrc, GstQuery * query);
+static void gst_base_audio_src_fixate (GstBaseSrc * bsrc, GstCaps * caps);
+
+/* static guint gst_base_audio_src_signals[LAST_SIGNAL] = { 0 }; */
+
+static void
+gst_base_audio_src_class_init (GstBaseAudioSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstBaseAudioSrcPrivate));
+
+  gobject_class->set_property = gst_base_audio_src_set_property;
+  gobject_class->get_property = gst_base_audio_src_get_property;
+  gobject_class->dispose = gst_base_audio_src_dispose;
+
+  g_object_class_install_property (gobject_class, PROP_BUFFER_TIME,
+      g_param_spec_int64 ("buffer-time", "Buffer Time",
+          "Size of audio buffer in microseconds", 1,
+          G_MAXINT64, DEFAULT_BUFFER_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_LATENCY_TIME,
+      g_param_spec_int64 ("latency-time", "Latency Time",
+          "Audio latency in microseconds", 1,
+          G_MAXINT64, DEFAULT_LATENCY_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstBaseAudioSrc:actual-buffer-time:
+   *
+   * Actual configured size of audio buffer in microseconds.
+   *
+   * Since: 0.10.20
+   **/
+  g_object_class_install_property (gobject_class, PROP_ACTUAL_BUFFER_TIME,
+      g_param_spec_int64 ("actual-buffer-time", "Actual Buffer Time",
+          "Actual configured size of audio buffer in microseconds",
+          DEFAULT_ACTUAL_BUFFER_TIME, G_MAXINT64, DEFAULT_ACTUAL_BUFFER_TIME,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstBaseAudioSrc:actual-latency-time:
+   *
+   * Actual configured audio latency in microseconds.
+   *
+   * Since: 0.10.20
+   **/
+  g_object_class_install_property (gobject_class, PROP_ACTUAL_LATENCY_TIME,
+      g_param_spec_int64 ("actual-latency-time", "Actual Latency Time",
+          "Actual configured audio latency in microseconds",
+          DEFAULT_ACTUAL_LATENCY_TIME, G_MAXINT64, DEFAULT_ACTUAL_LATENCY_TIME,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_PROVIDE_CLOCK,
+      g_param_spec_boolean ("provide-clock", "Provide Clock",
+          "Provide a clock to be used as the global pipeline clock",
+          DEFAULT_PROVIDE_CLOCK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SLAVE_METHOD,
+      g_param_spec_enum ("slave-method", "Slave Method",
+          "Algorithm to use to match the rate of the masterclock",
+          GST_TYPE_BASE_AUDIO_SRC_SLAVE_METHOD, DEFAULT_SLAVE_METHOD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_base_audio_src_change_state);
+  gstelement_class->provide_clock =
+      GST_DEBUG_FUNCPTR (gst_base_audio_src_provide_clock);
+
+  gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_base_audio_src_setcaps);
+  gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_base_audio_src_event);
+  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_base_audio_src_query);
+  gstbasesrc_class->get_times =
+      GST_DEBUG_FUNCPTR (gst_base_audio_src_get_times);
+  gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_base_audio_src_create);
+  gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_base_audio_src_fixate);
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_AUDIO_CLOCK);
+  g_type_class_ref (GST_TYPE_RING_BUFFER);
+}
+
+static void
+gst_base_audio_src_init (GstBaseAudioSrc * baseaudiosrc)
+{
+  baseaudiosrc->priv = GST_BASE_AUDIO_SRC_GET_PRIVATE (baseaudiosrc);
+
+  baseaudiosrc->buffer_time = DEFAULT_BUFFER_TIME;
+  baseaudiosrc->latency_time = DEFAULT_LATENCY_TIME;
+  baseaudiosrc->priv->provide_clock = DEFAULT_PROVIDE_CLOCK;
+  baseaudiosrc->priv->slave_method = DEFAULT_SLAVE_METHOD;
+  /* reset blocksize we use latency time to calculate a more useful 
+   * value based on negotiated format. */
+  GST_BASE_SRC (baseaudiosrc)->blocksize = 0;
+
+  baseaudiosrc->clock = gst_audio_clock_new ("GstAudioSrcClock",
+      (GstAudioClockGetTimeFunc) gst_base_audio_src_get_time, baseaudiosrc);
+
+  /* we are always a live source */
+  gst_base_src_set_live (GST_BASE_SRC (baseaudiosrc), TRUE);
+  /* we operate in time */
+  gst_base_src_set_format (GST_BASE_SRC (baseaudiosrc), GST_FORMAT_TIME);
+}
+
+static void
+gst_base_audio_src_dispose (GObject * object)
+{
+  GstBaseAudioSrc *src;
+
+  src = GST_BASE_AUDIO_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+  if (src->clock) {
+    gst_audio_clock_invalidate (src->clock);
+    gst_object_unref (src->clock);
+    src->clock = NULL;
+  }
+
+  if (src->ringbuffer) {
+    gst_object_unparent (GST_OBJECT_CAST (src->ringbuffer));
+    src->ringbuffer = NULL;
+  }
+  GST_OBJECT_UNLOCK (src);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static GstClock *
+gst_base_audio_src_provide_clock (GstElement * elem)
+{
+  GstBaseAudioSrc *src;
+  GstClock *clock;
+
+  src = GST_BASE_AUDIO_SRC (elem);
+
+  /* we have no ringbuffer (must be NULL state) */
+  if (src->ringbuffer == NULL)
+    goto wrong_state;
+
+  if (!gst_ring_buffer_is_acquired (src->ringbuffer))
+    goto wrong_state;
+
+  GST_OBJECT_LOCK (src);
+  if (!src->priv->provide_clock)
+    goto clock_disabled;
+
+  clock = GST_CLOCK_CAST (gst_object_ref (src->clock));
+  GST_OBJECT_UNLOCK (src);
+
+  return clock;
+
+  /* ERRORS */
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (src, "ringbuffer not acquired");
+    return NULL;
+  }
+clock_disabled:
+  {
+    GST_DEBUG_OBJECT (src, "clock provide disabled");
+    GST_OBJECT_UNLOCK (src);
+    return NULL;
+  }
+}
+
+static GstClockTime
+gst_base_audio_src_get_time (GstClock * clock, GstBaseAudioSrc * src)
+{
+  guint64 raw, samples;
+  guint delay;
+  GstClockTime result;
+
+  if (G_UNLIKELY (src->ringbuffer == NULL
+          || src->ringbuffer->spec.info.rate == 0))
+    return GST_CLOCK_TIME_NONE;
+
+  raw = samples = gst_ring_buffer_samples_done (src->ringbuffer);
+
+  /* the number of samples not yet processed, this is still queued in the
+   * device (not yet read for capture). */
+  delay = gst_ring_buffer_delay (src->ringbuffer);
+
+  samples += delay;
+
+  result = gst_util_uint64_scale_int (samples, GST_SECOND,
+      src->ringbuffer->spec.info.rate);
+
+  GST_DEBUG_OBJECT (src,
+      "processed samples: raw %" G_GUINT64_FORMAT ", delay %u, real %"
+      G_GUINT64_FORMAT ", time %" GST_TIME_FORMAT, raw, delay, samples,
+      GST_TIME_ARGS (result));
+
+  return result;
+}
+
+/**
+ * gst_base_audio_src_set_provide_clock:
+ * @src: a #GstBaseAudioSrc
+ * @provide: new state
+ *
+ * Controls whether @src will provide a clock or not. If @provide is %TRUE, 
+ * gst_element_provide_clock() will return a clock that reflects the datarate
+ * of @src. If @provide is %FALSE, gst_element_provide_clock() will return NULL.
+ *
+ * Since: 0.10.16
+ */
+void
+gst_base_audio_src_set_provide_clock (GstBaseAudioSrc * src, gboolean provide)
+{
+  g_return_if_fail (GST_IS_BASE_AUDIO_SRC (src));
+
+  GST_OBJECT_LOCK (src);
+  src->priv->provide_clock = provide;
+  GST_OBJECT_UNLOCK (src);
+}
+
+/**
+ * gst_base_audio_src_get_provide_clock:
+ * @src: a #GstBaseAudioSrc
+ *
+ * Queries whether @src will provide a clock or not. See also
+ * gst_base_audio_src_set_provide_clock.
+ *
+ * Returns: %TRUE if @src will provide a clock.
+ *
+ * Since: 0.10.16
+ */
+gboolean
+gst_base_audio_src_get_provide_clock (GstBaseAudioSrc * src)
+{
+  gboolean result;
+
+  g_return_val_if_fail (GST_IS_BASE_AUDIO_SRC (src), FALSE);
+
+  GST_OBJECT_LOCK (src);
+  result = src->priv->provide_clock;
+  GST_OBJECT_UNLOCK (src);
+
+  return result;
+}
+
+/**
+ * gst_base_audio_src_set_slave_method:
+ * @src: a #GstBaseAudioSrc
+ * @method: the new slave method
+ *
+ * Controls how clock slaving will be performed in @src. 
+ *
+ * Since: 0.10.20
+ */
+void
+gst_base_audio_src_set_slave_method (GstBaseAudioSrc * src,
+    GstBaseAudioSrcSlaveMethod method)
+{
+  g_return_if_fail (GST_IS_BASE_AUDIO_SRC (src));
+
+  GST_OBJECT_LOCK (src);
+  src->priv->slave_method = method;
+  GST_OBJECT_UNLOCK (src);
+}
+
+/**
+ * gst_base_audio_src_get_slave_method:
+ * @src: a #GstBaseAudioSrc
+ *
+ * Get the current slave method used by @src.
+ *
+ * Returns: The current slave method used by @src.
+ *
+ * Since: 0.10.20
+ */
+GstBaseAudioSrcSlaveMethod
+gst_base_audio_src_get_slave_method (GstBaseAudioSrc * src)
+{
+  GstBaseAudioSrcSlaveMethod result;
+
+  g_return_val_if_fail (GST_IS_BASE_AUDIO_SRC (src), -1);
+
+  GST_OBJECT_LOCK (src);
+  result = src->priv->slave_method;
+  GST_OBJECT_UNLOCK (src);
+
+  return result;
+}
+
+static void
+gst_base_audio_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstBaseAudioSrc *src;
+
+  src = GST_BASE_AUDIO_SRC (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_TIME:
+      src->buffer_time = g_value_get_int64 (value);
+      break;
+    case PROP_LATENCY_TIME:
+      src->latency_time = g_value_get_int64 (value);
+      break;
+    case PROP_PROVIDE_CLOCK:
+      gst_base_audio_src_set_provide_clock (src, g_value_get_boolean (value));
+      break;
+    case PROP_SLAVE_METHOD:
+      gst_base_audio_src_set_slave_method (src, g_value_get_enum (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_base_audio_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstBaseAudioSrc *src;
+
+  src = GST_BASE_AUDIO_SRC (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_TIME:
+      g_value_set_int64 (value, src->buffer_time);
+      break;
+    case PROP_LATENCY_TIME:
+      g_value_set_int64 (value, src->latency_time);
+      break;
+    case PROP_ACTUAL_BUFFER_TIME:
+      GST_OBJECT_LOCK (src);
+      if (src->ringbuffer && src->ringbuffer->acquired)
+        g_value_set_int64 (value, src->ringbuffer->spec.buffer_time);
+      else
+        g_value_set_int64 (value, DEFAULT_ACTUAL_BUFFER_TIME);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_ACTUAL_LATENCY_TIME:
+      GST_OBJECT_LOCK (src);
+      if (src->ringbuffer && src->ringbuffer->acquired)
+        g_value_set_int64 (value, src->ringbuffer->spec.latency_time);
+      else
+        g_value_set_int64 (value, DEFAULT_ACTUAL_LATENCY_TIME);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case PROP_PROVIDE_CLOCK:
+      g_value_set_boolean (value, gst_base_audio_src_get_provide_clock (src));
+      break;
+    case PROP_SLAVE_METHOD:
+      g_value_set_enum (value, gst_base_audio_src_get_slave_method (src));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_base_audio_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  GstStructure *s;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  /* fields for all formats */
+  gst_structure_fixate_field_nearest_int (s, "rate", GST_AUDIO_DEF_RATE);
+  gst_structure_fixate_field_nearest_int (s, "channels",
+      GST_AUDIO_DEF_CHANNELS);
+  gst_structure_fixate_field_string (s, "format", GST_AUDIO_DEF_FORMAT);
+
+  GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
+}
+
+static gboolean
+gst_base_audio_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
+  GstRingBufferSpec *spec;
+  gint bpf, rate;
+
+  spec = &src->ringbuffer->spec;
+
+  spec->buffer_time = src->buffer_time;
+  spec->latency_time = src->latency_time;
+
+  GST_OBJECT_LOCK (src);
+  if (!gst_ring_buffer_parse_caps (spec, caps)) {
+    GST_OBJECT_UNLOCK (src);
+    goto parse_error;
+  }
+
+  bpf = GST_AUDIO_INFO_BPF (&spec->info);
+  rate = GST_AUDIO_INFO_RATE (&spec->info);
+
+  /* calculate suggested segsize and segtotal */
+  spec->segsize = rate * bpf * spec->latency_time / GST_MSECOND;
+  spec->segtotal = spec->buffer_time / spec->latency_time;
+
+  GST_OBJECT_UNLOCK (src);
+
+  GST_DEBUG ("release old ringbuffer");
+
+  gst_ring_buffer_release (src->ringbuffer);
+
+  gst_ring_buffer_debug_spec_buff (spec);
+
+  GST_DEBUG ("acquire new ringbuffer");
+
+  if (!gst_ring_buffer_acquire (src->ringbuffer, spec))
+    goto acquire_error;
+
+  /* calculate actual latency and buffer times */
+  spec->latency_time = spec->segsize * GST_MSECOND / (rate * bpf);
+  spec->buffer_time =
+      spec->segtotal * spec->segsize * GST_MSECOND / (rate * bpf);
+
+  gst_ring_buffer_debug_spec_buff (spec);
+
+  g_object_notify (G_OBJECT (src), "actual-buffer-time");
+  g_object_notify (G_OBJECT (src), "actual-latency-time");
+
+  return TRUE;
+
+  /* ERRORS */
+parse_error:
+  {
+    GST_DEBUG ("could not parse caps");
+    return FALSE;
+  }
+acquire_error:
+  {
+    GST_DEBUG ("could not acquire ringbuffer");
+    return FALSE;
+  }
+}
+
+static void
+gst_base_audio_src_get_times (GstBaseSrc * bsrc, GstBuffer * buffer,
+    GstClockTime * start, GstClockTime * end)
+{
+  /* no need to sync to a clock here, we schedule the samples based
+   * on our own clock for the moment. */
+  *start = GST_CLOCK_TIME_NONE;
+  *end = GST_CLOCK_TIME_NONE;
+}
+
+static gboolean
+gst_base_audio_src_query (GstBaseSrc * bsrc, GstQuery * query)
+{
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
+  gboolean res = FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      GstClockTime min_latency, max_latency;
+      GstRingBufferSpec *spec;
+      gint bpf, rate;
+
+      GST_OBJECT_LOCK (src);
+      if (G_UNLIKELY (src->ringbuffer == NULL
+              || src->ringbuffer->spec.info.rate == 0)) {
+        GST_OBJECT_UNLOCK (src);
+        goto done;
+      }
+
+      spec = &src->ringbuffer->spec;
+      rate = GST_AUDIO_INFO_RATE (&spec->info);
+      bpf = GST_AUDIO_INFO_BPF (&spec->info);
+
+      /* we have at least 1 segment of latency */
+      min_latency =
+          gst_util_uint64_scale_int (spec->segsize, GST_SECOND, rate * bpf);
+      /* we cannot delay more than the buffersize else we lose data */
+      max_latency =
+          gst_util_uint64_scale_int (spec->segtotal * spec->segsize, GST_SECOND,
+          rate * bpf);
+      GST_OBJECT_UNLOCK (src);
+
+      GST_DEBUG_OBJECT (src,
+          "report latency min %" GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
+
+      /* we are always live, the min latency is 1 segment and the max latency is
+       * the complete buffer of segments. */
+      gst_query_set_latency (query, TRUE, min_latency, max_latency);
+
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_SCHEDULING:
+    {
+      /* we allow limited pull base operation of which the details
+       * will eventually exposed in an as of yet non-existing query.
+       * Basically pulling can be done on any number of bytes as long
+       * as the offset is -1 or sequentially increasing. */
+      gst_query_set_scheduling (query, TRUE, FALSE, TRUE, 1, -1, 1);
+
+      res = TRUE;
+      break;
+    }
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query);
+      break;
+  }
+done:
+  return res;
+}
+
+static gboolean
+gst_base_audio_src_event (GstBaseSrc * bsrc, GstEvent * event)
+{
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
+  gboolean res;
+
+  res = TRUE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      GST_DEBUG_OBJECT (bsrc, "flush-start");
+      gst_ring_buffer_pause (src->ringbuffer);
+      gst_ring_buffer_clear_all (src->ringbuffer);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      GST_DEBUG_OBJECT (bsrc, "flush-stop");
+      /* always resync on sample after a flush */
+      src->next_sample = -1;
+      gst_ring_buffer_clear_all (src->ringbuffer);
+      break;
+    case GST_EVENT_SEEK:
+      GST_DEBUG_OBJECT (bsrc, "refuse to seek");
+      res = FALSE;
+      break;
+    default:
+      GST_DEBUG_OBJECT (bsrc, "dropping event %p", event);
+      break;
+  }
+  return res;
+}
+
+/* get the next offset in the ringbuffer for reading samples.
+ * If the next sample is too far away, this function will position itself to the
+ * next most recent sample, creating discontinuity */
+static guint64
+gst_base_audio_src_get_offset (GstBaseAudioSrc * src)
+{
+  guint64 sample;
+  gint readseg, segdone, segtotal, sps;
+  gint diff;
+
+  /* assume we can append to the previous sample */
+  sample = src->next_sample;
+
+  sps = src->ringbuffer->samples_per_seg;
+  segtotal = src->ringbuffer->spec.segtotal;
+
+  /* get the currently processed segment */
+  segdone = g_atomic_int_get (&src->ringbuffer->segdone)
+      - src->ringbuffer->segbase;
+
+  if (sample != -1) {
+    GST_DEBUG_OBJECT (src, "at segment %d and sample %" G_GUINT64_FORMAT,
+        segdone, sample);
+    /* figure out the segment and the offset inside the segment where
+     * the sample should be read from. */
+    readseg = sample / sps;
+
+    /* see how far away it is from the read segment, normally segdone (where new
+     * data is written in the ringbuffer) is bigger than readseg (where we are
+     * reading). */
+    diff = segdone - readseg;
+    if (diff >= segtotal) {
+      GST_DEBUG_OBJECT (src, "dropped, align to segment %d", segdone);
+      /* sample would be dropped, position to next playable position */
+      sample = ((guint64) (segdone)) * sps;
+    }
+  } else {
+    /* no previous sample, go to the current position */
+    GST_DEBUG_OBJECT (src, "first sample, align to current %d", segdone);
+    sample = ((guint64) (segdone)) * sps;
+    readseg = segdone;
+  }
+
+  GST_DEBUG_OBJECT (src,
+      "reading from %d, we are at %d, sample %" G_GUINT64_FORMAT, readseg,
+      segdone, sample);
+
+  return sample;
+}
+
+static GstFlowReturn
+gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
+    GstBuffer ** outbuf)
+{
+  GstFlowReturn ret;
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
+  GstBuffer *buf;
+  guchar *data, *ptr;
+  guint samples, total_samples;
+  guint64 sample;
+  gint bpf, rate;
+  GstRingBuffer *ringbuffer;
+  GstRingBufferSpec *spec;
+  guint read;
+  GstClockTime timestamp, duration;
+  GstClock *clock;
+
+  ringbuffer = src->ringbuffer;
+  spec = &ringbuffer->spec;
+
+  if (G_UNLIKELY (!gst_ring_buffer_is_acquired (ringbuffer)))
+    goto wrong_state;
+
+  bpf = GST_AUDIO_INFO_BPF (&spec->info);
+  rate = GST_AUDIO_INFO_RATE (&spec->info);
+
+  if ((length == 0 && bsrc->blocksize == 0) || length == -1)
+    /* no length given, use the default segment size */
+    length = spec->segsize;
+  else
+    /* make sure we round down to an integral number of samples */
+    length -= length % bpf;
+
+  /* figure out the offset in the ringbuffer */
+  if (G_UNLIKELY (offset != -1)) {
+    sample = offset / bpf;
+    /* if a specific offset was given it must be the next sequential
+     * offset we expect or we fail for now. */
+    if (src->next_sample != -1 && sample != src->next_sample)
+      goto wrong_offset;
+  } else {
+    /* calculate the sequentially next sample we need to read. This can jump and
+     * create a DISCONT. */
+    sample = gst_base_audio_src_get_offset (src);
+  }
+
+  GST_DEBUG_OBJECT (src, "reading from sample %" G_GUINT64_FORMAT " length %u",
+      sample, length);
+
+  /* get the number of samples to read */
+  total_samples = samples = length / bpf;
+
+  /* use the basesrc allocation code to use bufferpools or custom allocators */
+  ret = GST_BASE_SRC_CLASS (parent_class)->alloc (bsrc, offset, length, &buf);
+  if (G_UNLIKELY (ret != GST_FLOW_OK))
+    goto alloc_failed;
+
+  data = ptr = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+  do {
+    read = gst_ring_buffer_read (ringbuffer, sample, ptr, samples);
+    GST_DEBUG_OBJECT (src, "read %u of %u", read, samples);
+    /* if we read all, we're done */
+    if (read == samples)
+      break;
+
+    /* else something interrupted us and we wait for playing again. */
+    GST_DEBUG_OBJECT (src, "wait playing");
+    if (gst_base_src_wait_playing (bsrc) != GST_FLOW_OK)
+      goto stopped;
+
+    GST_DEBUG_OBJECT (src, "continue playing");
+
+    /* read next samples */
+    sample += read;
+    samples -= read;
+    ptr += read * bpf;
+  } while (TRUE);
+  gst_buffer_unmap (buf, data, length);
+
+  /* mark discontinuity if needed */
+  if (G_UNLIKELY (sample != src->next_sample) && src->next_sample != -1) {
+    GST_WARNING_OBJECT (src,
+        "create DISCONT of %" G_GUINT64_FORMAT " samples at sample %"
+        G_GUINT64_FORMAT, sample - src->next_sample, sample);
+    GST_ELEMENT_WARNING (src, CORE, CLOCK,
+        (_("Can't record audio fast enough")),
+        ("Dropped %" G_GUINT64_FORMAT " samples. This is most likely because "
+            "downstream can't keep up and is consuming samples too slowly.",
+            sample - src->next_sample));
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+  }
+
+  src->next_sample = sample + samples;
+
+  /* get the normal timestamp to get the duration. */
+  timestamp = gst_util_uint64_scale_int (sample, GST_SECOND, rate);
+  duration = gst_util_uint64_scale_int (src->next_sample, GST_SECOND,
+      rate) - timestamp;
+
+  GST_OBJECT_LOCK (src);
+  if (!(clock = GST_ELEMENT_CLOCK (src)))
+    goto no_sync;
+
+  if (clock != src->clock) {
+    /* we are slaved, check how to handle this */
+    switch (src->priv->slave_method) {
+      case GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE:
+        /* not implemented, use skew algorithm. This algorithm should
+         * work on the readout pointer and produces more or less samples based
+         * on the clock drift */
+      case GST_BASE_AUDIO_SRC_SLAVE_SKEW:
+      {
+        GstClockTime running_time;
+        GstClockTime base_time;
+        GstClockTime current_time;
+        guint64 running_time_sample;
+        gint running_time_segment;
+        gint last_read_segment;
+        gint segment_skew;
+        gint sps;
+        gint segments_written;
+        gint last_written_segment;
+
+        /* get the amount of segments written from the device by now */
+        segments_written = g_atomic_int_get (&ringbuffer->segdone);
+
+        /* subtract the base to segments_written to get the number of the
+           last written segment in the ringbuffer (one segment written = segment 0) */
+        last_written_segment = segments_written - ringbuffer->segbase - 1;
+
+        /* samples per segment */
+        sps = ringbuffer->samples_per_seg;
+
+        /* get the current time */
+        current_time = gst_clock_get_time (clock);
+
+        /* get the basetime */
+        base_time = GST_ELEMENT_CAST (src)->base_time;
+
+        /* get the running_time */
+        running_time = current_time - base_time;
+
+        /* the running_time converted to a sample (relative to the ringbuffer) */
+        running_time_sample =
+            gst_util_uint64_scale_int (running_time, rate, GST_SECOND);
+
+        /* the segmentnr corrensponding to running_time, round down */
+        running_time_segment = running_time_sample / sps;
+
+        /* the segment currently read from the ringbuffer */
+        last_read_segment = sample / sps;
+
+        /* the skew we have between running_time and the ringbuffertime (last written to) */
+        segment_skew = running_time_segment - last_written_segment;
+
+        GST_DEBUG_OBJECT (bsrc,
+            "\n running_time                                              = %"
+            GST_TIME_FORMAT
+            "\n timestamp                                                  = %"
+            GST_TIME_FORMAT
+            "\n running_time_segment                                       = %d"
+            "\n last_written_segment                                       = %d"
+            "\n segment_skew (running time segment - last_written_segment) = %d"
+            "\n last_read_segment                                          = %d",
+            GST_TIME_ARGS (running_time), GST_TIME_ARGS (timestamp),
+            running_time_segment, last_written_segment, segment_skew,
+            last_read_segment);
+
+        /* Resync the ringbuffer if:
+         *
+         * 1. We are more than the length of the ringbuffer behind.
+         *    The length of the ringbuffer then gets to dictate
+         *    the threshold for what is concidered "too late"
+         *
+         * 2. If this is our first buffer.
+         *    We know that we should catch up to running_time
+         *    the first time we are ran.
+         */
+        if ((segment_skew >= ringbuffer->spec.segtotal) ||
+            (last_read_segment == 0)) {
+          gint new_read_segment;
+          gint segment_diff;
+          guint64 new_sample;
+
+          /* the difference between running_time and the last written segment */
+          segment_diff = running_time_segment - last_written_segment;
+
+          /* advance the ringbuffer */
+          gst_ring_buffer_advance (ringbuffer, segment_diff);
+
+          /* we move the  new read segment to the last known written segment */
+          new_read_segment =
+              g_atomic_int_get (&ringbuffer->segdone) - ringbuffer->segbase;
+
+          /* we calculate the new sample value */
+          new_sample = ((guint64) new_read_segment) * sps;
+
+          /* and get the relative time to this -> our new timestamp */
+          timestamp = gst_util_uint64_scale_int (new_sample, GST_SECOND, rate);
+
+          /* we update the next sample accordingly */
+          src->next_sample = new_sample + samples;
+
+          GST_DEBUG_OBJECT (bsrc,
+              "Timeshifted the ringbuffer with %d segments: "
+              "Updating the timestamp to %" GST_TIME_FORMAT ", "
+              "and src->next_sample to %" G_GUINT64_FORMAT, segment_diff,
+              GST_TIME_ARGS (timestamp), src->next_sample);
+        }
+        break;
+      }
+      case GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP:
+      {
+        GstClockTime base_time, latency;
+
+        /* We are slaved to another clock, take running time of the pipeline clock and
+         * timestamp against it. Somebody else in the pipeline should figure out the
+         * clock drift. We keep the duration we calculated above. */
+        timestamp = gst_clock_get_time (clock);
+        base_time = GST_ELEMENT_CAST (src)->base_time;
+
+        if (GST_CLOCK_DIFF (timestamp, base_time) < 0)
+          timestamp -= base_time;
+        else
+          timestamp = 0;
+
+        /* subtract latency */
+        latency = gst_util_uint64_scale_int (total_samples, GST_SECOND, rate);
+        if (timestamp > latency)
+          timestamp -= latency;
+        else
+          timestamp = 0;
+      }
+      case GST_BASE_AUDIO_SRC_SLAVE_NONE:
+        break;
+    }
+  } else {
+    GstClockTime base_time;
+
+    /* to get the timestamp against the clock we also need to add our offset */
+    timestamp = gst_audio_clock_adjust (clock, timestamp);
+
+    /* we are not slaved, subtract base_time */
+    base_time = GST_ELEMENT_CAST (src)->base_time;
+
+    if (GST_CLOCK_DIFF (timestamp, base_time) < 0) {
+      timestamp -= base_time;
+      GST_LOG_OBJECT (src,
+          "buffer timestamp %" GST_TIME_FORMAT " (base_time %" GST_TIME_FORMAT
+          ")", GST_TIME_ARGS (timestamp), GST_TIME_ARGS (base_time));
+    } else {
+      GST_LOG_OBJECT (src,
+          "buffer timestamp 0, ts %" GST_TIME_FORMAT " <= base_time %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (timestamp),
+          GST_TIME_ARGS (base_time));
+      timestamp = 0;
+    }
+  }
+
+no_sync:
+  GST_OBJECT_UNLOCK (src);
+
+  GST_BUFFER_TIMESTAMP (buf) = timestamp;
+  GST_BUFFER_DURATION (buf) = duration;
+  GST_BUFFER_OFFSET (buf) = sample;
+  GST_BUFFER_OFFSET_END (buf) = sample + samples;
+
+  *outbuf = buf;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (src, "ringbuffer in wrong state");
+    return GST_FLOW_WRONG_STATE;
+  }
+wrong_offset:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, SEEK,
+        (NULL), ("resource can only be operated on sequentially but offset %"
+            G_GUINT64_FORMAT " was given", offset));
+    return GST_FLOW_ERROR;
+  }
+alloc_failed:
+  {
+    GST_DEBUG_OBJECT (src, "alloc failed: %s", gst_flow_get_name (ret));
+    return ret;
+  }
+stopped:
+  {
+    gst_buffer_unref (buf);
+    GST_DEBUG_OBJECT (src, "ringbuffer stopped");
+    return GST_FLOW_WRONG_STATE;
+  }
+}
+
+/**
+ * gst_base_audio_src_create_ringbuffer:
+ * @src: a #GstBaseAudioSrc.
+ *
+ * Create and return the #GstRingBuffer for @src. This function will call the
+ * ::create_ringbuffer vmethod and will set @src as the parent of the returned
+ * buffer (see gst_object_set_parent()).
+ *
+ * Returns: The new ringbuffer of @src.
+ */
+GstRingBuffer *
+gst_base_audio_src_create_ringbuffer (GstBaseAudioSrc * src)
+{
+  GstBaseAudioSrcClass *bclass;
+  GstRingBuffer *buffer = NULL;
+
+  bclass = GST_BASE_AUDIO_SRC_GET_CLASS (src);
+  if (bclass->create_ringbuffer)
+    buffer = bclass->create_ringbuffer (src);
+
+  if (G_LIKELY (buffer))
+    gst_object_set_parent (GST_OBJECT_CAST (buffer), GST_OBJECT_CAST (src));
+
+  return buffer;
+}
+
+static GstStateChangeReturn
+gst_base_audio_src_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      GST_DEBUG_OBJECT (src, "NULL->READY");
+      GST_OBJECT_LOCK (src);
+      if (src->ringbuffer == NULL) {
+        gst_audio_clock_reset (GST_AUDIO_CLOCK (src->clock), 0);
+        src->ringbuffer = gst_base_audio_src_create_ringbuffer (src);
+      }
+      GST_OBJECT_UNLOCK (src);
+      if (!gst_ring_buffer_open_device (src->ringbuffer))
+        goto open_failed;
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_DEBUG_OBJECT (src, "READY->PAUSED");
+      src->next_sample = -1;
+      gst_ring_buffer_set_flushing (src->ringbuffer, FALSE);
+      gst_ring_buffer_may_start (src->ringbuffer, FALSE);
+      /* Only post clock-provide messages if this is the clock that
+       * we've created. If the subclass has overriden it the subclass
+       * should post this messages whenever necessary */
+      if (src->clock && GST_IS_AUDIO_CLOCK (src->clock) &&
+          GST_AUDIO_CLOCK_CAST (src->clock)->func ==
+          (GstAudioClockGetTimeFunc) gst_base_audio_src_get_time)
+        gst_element_post_message (element,
+            gst_message_new_clock_provide (GST_OBJECT_CAST (element),
+                src->clock, TRUE));
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      GST_DEBUG_OBJECT (src, "PAUSED->PLAYING");
+      gst_ring_buffer_may_start (src->ringbuffer, TRUE);
+      break;
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      GST_DEBUG_OBJECT (src, "PLAYING->PAUSED");
+      gst_ring_buffer_may_start (src->ringbuffer, FALSE);
+      gst_ring_buffer_pause (src->ringbuffer);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (src, "PAUSED->READY");
+      /* Only post clock-lost messages if this is the clock that
+       * we've created. If the subclass has overriden it the subclass
+       * should post this messages whenever necessary */
+      if (src->clock && GST_IS_AUDIO_CLOCK (src->clock) &&
+          GST_AUDIO_CLOCK_CAST (src->clock)->func ==
+          (GstAudioClockGetTimeFunc) gst_base_audio_src_get_time)
+        gst_element_post_message (element,
+            gst_message_new_clock_lost (GST_OBJECT_CAST (element), src->clock));
+      gst_ring_buffer_set_flushing (src->ringbuffer, TRUE);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (src, "PAUSED->READY");
+      gst_ring_buffer_release (src->ringbuffer);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      GST_DEBUG_OBJECT (src, "READY->NULL");
+      gst_ring_buffer_close_device (src->ringbuffer);
+      GST_OBJECT_LOCK (src);
+      gst_object_unparent (GST_OBJECT_CAST (src->ringbuffer));
+      src->ringbuffer = NULL;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+
+  /* ERRORS */
+open_failed:
+  {
+    /* subclass must post a meaningfull error message */
+    GST_DEBUG_OBJECT (src, "open failed");
+    return GST_STATE_CHANGE_FAILURE;
+  }
+
+}
diff --git a/gst-libs/gst/audio/gstbaseaudiosrc.h b/gst-libs/gst/audio/gstbaseaudiosrc.h
new file mode 100644
index 0000000..b55ac1e
--- /dev/null
+++ b/gst-libs/gst/audio/gstbaseaudiosrc.h
@@ -0,0 +1,146 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstbaseaudiosrc.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* a base class for audio sources.
+ */
+
+#ifndef __GST_BASE_AUDIO_SRC_H__
+#define __GST_BASE_AUDIO_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+#include "gstringbuffer.h"
+#include "gstaudioclock.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_BASE_AUDIO_SRC                 (gst_base_audio_src_get_type())
+#define GST_BASE_AUDIO_SRC(obj)                 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_AUDIO_SRC,GstBaseAudioSrc))
+#define GST_BASE_AUDIO_SRC_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_AUDIO_SRC,GstBaseAudioSrcClass))
+#define GST_BASE_AUDIO_SRC_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_AUDIO_SRC, GstBaseAudioSrcClass))
+#define GST_IS_BASE_AUDIO_SRC(obj)              (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_AUDIO_SRC))
+#define GST_IS_BASE_AUDIO_SRC_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_AUDIO_SRC))
+
+/**
+ * GST_BASE_AUDIO_SRC_CLOCK:
+ * @obj: a #GstBaseAudioSrc
+ *
+ * Get the #GstClock of @obj.
+ */
+#define GST_BASE_AUDIO_SRC_CLOCK(obj)    (GST_BASE_AUDIO_SRC (obj)->clock)
+/**
+ * GST_BASE_AUDIO_SRC_PAD:
+ * @obj: a #GstBaseAudioSrc
+ *
+ * Get the source #GstPad of @obj.
+ */
+#define GST_BASE_AUDIO_SRC_PAD(obj)      (GST_BASE_SRC (obj)->srcpad)
+
+typedef struct _GstBaseAudioSrc GstBaseAudioSrc;
+typedef struct _GstBaseAudioSrcClass GstBaseAudioSrcClass;
+typedef struct _GstBaseAudioSrcPrivate GstBaseAudioSrcPrivate;
+
+/**
+ * GstBaseAudioSrcSlaveMethod:
+ * @GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE: Resample to match the master clock. 
+ * @GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP: Retimestamp output buffers with master
+ * clock time.
+ * @GST_BASE_AUDIO_SRC_SLAVE_SKEW: Adjust capture pointer when master clock
+ * drifts too much.
+ * @GST_BASE_AUDIO_SRC_SLAVE_NONE: No adjustment is done. 
+ *
+ * Different possible clock slaving algorithms when the internal audio clock was
+ * not selected as the pipeline clock.
+ */
+typedef enum
+{
+  GST_BASE_AUDIO_SRC_SLAVE_RESAMPLE,
+  GST_BASE_AUDIO_SRC_SLAVE_RETIMESTAMP,
+  GST_BASE_AUDIO_SRC_SLAVE_SKEW,
+  GST_BASE_AUDIO_SRC_SLAVE_NONE
+} GstBaseAudioSrcSlaveMethod;
+
+#define GST_TYPE_BASE_AUDIO_SRC_SLAVE_METHOD (gst_base_audio_src_slave_method_get_type ())
+
+/**
+ * GstBaseAudioSrc:
+ *
+ * Opaque #GstBaseAudioSrc.
+ */
+struct _GstBaseAudioSrc {
+  GstPushSrc     element;
+
+  /*< protected >*/ /* with LOCK */
+  /* our ringbuffer */
+  GstRingBuffer *ringbuffer;
+
+  /* required buffer and latency */
+  GstClockTime   buffer_time;
+  GstClockTime   latency_time;
+
+  /* the next sample to write */
+  guint64        next_sample;
+
+  /* clock */
+  GstClock      *clock;
+
+  /*< private >*/
+  GstBaseAudioSrcPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING - 1];
+};
+
+/**
+ * GstBaseAudioSrcClass:
+ * @parent_class: the parent class.
+ * @create_ringbuffer: create and return a #GstRingBuffer to read from.
+ *
+ * #GstBaseAudioSrc class. Override the vmethod to implement
+ * functionality.
+ */
+struct _GstBaseAudioSrcClass {
+  GstPushSrcClass parent_class;
+
+  /* subclass ringbuffer allocation */
+  GstRingBuffer* (*create_ringbuffer)  (GstBaseAudioSrc *src);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_base_audio_src_get_type(void);
+GType gst_base_audio_src_slave_method_get_type (void);
+
+GstRingBuffer *gst_base_audio_src_create_ringbuffer (GstBaseAudioSrc *src);
+
+void       gst_base_audio_src_set_provide_clock        (GstBaseAudioSrc *src, gboolean provide);
+gboolean   gst_base_audio_src_get_provide_clock        (GstBaseAudioSrc *src);
+
+void       gst_base_audio_src_set_slave_method         (GstBaseAudioSrc *src,
+                                                        GstBaseAudioSrcSlaveMethod method);
+GstBaseAudioSrcSlaveMethod
+           gst_base_audio_src_get_slave_method         (GstBaseAudioSrc *src);
+
+
+G_END_DECLS
+
+#endif /* __GST_BASE_AUDIO_SRC_H__ */
diff --git a/gst-libs/gst/audio/gstringbuffer.c b/gst-libs/gst/audio/gstringbuffer.c
new file mode 100644
index 0000000..ebbaf64
--- /dev/null
+++ b/gst-libs/gst/audio/gstringbuffer.c
@@ -0,0 +1,1819 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstringbuffer
+ * @short_description: Base class for audio ringbuffer implementations
+ * @see_also: #GstBaseAudioSink, #GstAudioSink
+ *
+ * <refsect2>
+ * <para>
+ * This object is the base class for audio ringbuffers used by the base
+ * audio source and sink classes.
+ * </para>
+ * <para>
+ * The ringbuffer abstracts a circular buffer of data. One reader and
+ * one writer can operate on the data from different threads in a lockfree
+ * manner. The base class is sufficiently flexible to be used as an
+ * abstraction for DMA based ringbuffers as well as a pure software
+ * implementations.
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2006-02-02 (0.10.4)
+ */
+
+#include <string.h>
+
+#include "gstringbuffer.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_ring_buffer_debug);
+#define GST_CAT_DEFAULT gst_ring_buffer_debug
+
+static void gst_ring_buffer_dispose (GObject * object);
+static void gst_ring_buffer_finalize (GObject * object);
+
+static gboolean gst_ring_buffer_pause_unlocked (GstRingBuffer * buf);
+static void default_clear_all (GstRingBuffer * buf);
+static guint default_commit (GstRingBuffer * buf, guint64 * sample,
+    guchar * data, gint in_samples, gint out_samples, gint * accum);
+
+/* ringbuffer abstract base class */
+G_DEFINE_ABSTRACT_TYPE (GstRingBuffer, gst_ring_buffer, GST_TYPE_OBJECT);
+
+static void
+gst_ring_buffer_class_init (GstRingBufferClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstRingBufferClass *gstringbuffer_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstringbuffer_class = (GstRingBufferClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_ring_buffer_debug, "ringbuffer", 0,
+      "ringbuffer class");
+
+  gobject_class->dispose = gst_ring_buffer_dispose;
+  gobject_class->finalize = gst_ring_buffer_finalize;
+
+  gstringbuffer_class->clear_all = GST_DEBUG_FUNCPTR (default_clear_all);
+  gstringbuffer_class->commit = GST_DEBUG_FUNCPTR (default_commit);
+}
+
+static void
+gst_ring_buffer_init (GstRingBuffer * ringbuffer)
+{
+  ringbuffer->open = FALSE;
+  ringbuffer->acquired = FALSE;
+  ringbuffer->state = GST_RING_BUFFER_STATE_STOPPED;
+  ringbuffer->cond = g_cond_new ();
+  ringbuffer->waiting = 0;
+  ringbuffer->empty_seg = NULL;
+  ringbuffer->flushing = TRUE;
+}
+
+static void
+gst_ring_buffer_dispose (GObject * object)
+{
+  GstRingBuffer *ringbuffer = GST_RING_BUFFER (object);
+
+  gst_caps_replace (&ringbuffer->spec.caps, NULL);
+
+  G_OBJECT_CLASS (gst_ring_buffer_parent_class)->dispose (G_OBJECT
+      (ringbuffer));
+}
+
+static void
+gst_ring_buffer_finalize (GObject * object)
+{
+  GstRingBuffer *ringbuffer = GST_RING_BUFFER (object);
+
+  g_cond_free (ringbuffer->cond);
+  g_free (ringbuffer->empty_seg);
+
+  G_OBJECT_CLASS (gst_ring_buffer_parent_class)->finalize (G_OBJECT
+      (ringbuffer));
+}
+
+#ifndef GST_DISABLE_GST_DEBUG
+static const gchar *format_type_names[] = {
+  "raw",
+  "mu law",
+  "a law",
+  "ima adpcm",
+  "mpeg",
+  "gsm",
+  "iec958",
+  "ac3",
+  "eac3",
+  "dts"
+};
+#endif
+
+/**
+ * gst_ring_buffer_debug_spec_caps:
+ * @spec: the spec to debug
+ *
+ * Print debug info about the parsed caps in @spec to the debug log.
+ */
+void
+gst_ring_buffer_debug_spec_caps (GstRingBufferSpec * spec)
+{
+#if 0
+  gint i, bytes;
+#endif
+
+  GST_DEBUG ("spec caps: %p %" GST_PTR_FORMAT, spec->caps, spec->caps);
+  GST_DEBUG ("parsed caps: type:         %d, '%s'", spec->type,
+      format_type_names[spec->type]);
+#if 0
+  GST_DEBUG ("parsed caps: width:        %d", spec->width);
+  GST_DEBUG ("parsed caps: sign:         %d", spec->sign);
+  GST_DEBUG ("parsed caps: bigend:       %d", spec->bigend);
+  GST_DEBUG ("parsed caps: rate:         %d", spec->rate);
+  GST_DEBUG ("parsed caps: channels:     %d", spec->channels);
+  GST_DEBUG ("parsed caps: sample bytes: %d", spec->bytes_per_sample);
+  bytes = (spec->width >> 3) * spec->channels;
+  for (i = 0; i < bytes; i++) {
+    GST_DEBUG ("silence byte %d: %02x", i, spec->silence_sample[i]);
+  }
+#endif
+}
+
+/**
+ * gst_ring_buffer_debug_spec_buff:
+ * @spec: the spec to debug
+ *
+ * Print debug info about the buffer sized in @spec to the debug log.
+ */
+void
+gst_ring_buffer_debug_spec_buff (GstRingBufferSpec * spec)
+{
+  gint bpf = GST_AUDIO_INFO_BPF (&spec->info);
+
+  GST_DEBUG ("acquire ringbuffer: buffer time: %" G_GINT64_FORMAT " usec",
+      spec->buffer_time);
+  GST_DEBUG ("acquire ringbuffer: latency time: %" G_GINT64_FORMAT " usec",
+      spec->latency_time);
+  GST_DEBUG ("acquire ringbuffer: total segments: %d", spec->segtotal);
+  GST_DEBUG ("acquire ringbuffer: latency segments: %d", spec->seglatency);
+  GST_DEBUG ("acquire ringbuffer: segment size: %d bytes = %d samples",
+      spec->segsize, spec->segsize / bpf);
+  GST_DEBUG ("acquire ringbuffer: buffer size: %d bytes = %d samples",
+      spec->segsize * spec->segtotal, spec->segsize * spec->segtotal / bpf);
+}
+
+/**
+ * gst_ring_buffer_parse_caps:
+ * @spec: a spec
+ * @caps: a #GstCaps
+ *
+ * Parse @caps into @spec.
+ *
+ * Returns: TRUE if the caps could be parsed.
+ */
+gboolean
+gst_ring_buffer_parse_caps (GstRingBufferSpec * spec, GstCaps * caps)
+{
+  const gchar *mimetype;
+  GstStructure *structure;
+  gint i;
+  GstAudioInfo info;
+
+  structure = gst_caps_get_structure (caps, 0);
+  gst_audio_info_init (&info);
+
+  /* we have to differentiate between int and float formats */
+  mimetype = gst_structure_get_name (structure);
+
+  if (g_str_equal (mimetype, "audio/x-raw")) {
+    if (!gst_audio_info_from_caps (&info, caps))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_RAW;
+  } else if (g_str_equal (mimetype, "audio/x-alaw")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate) &&
+            gst_structure_get_int (structure, "channels", &info.channels)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_A_LAW;
+    spec->info.bpf = info.channels;
+  } else if (g_str_equal (mimetype, "audio/x-mulaw")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate) &&
+            gst_structure_get_int (structure, "channels", &info.channels)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_MU_LAW;
+    spec->info.bpf = info.channels;
+  } else if (g_str_equal (mimetype, "audio/x-iec958")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_IEC958;
+    spec->info.bpf = 4;
+  } else if (g_str_equal (mimetype, "audio/x-ac3")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_AC3;
+    spec->info.bpf = 4;
+  } else if (g_str_equal (mimetype, "audio/x-eac3")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_EAC3;
+    spec->info.bpf = 16;
+  } else if (g_str_equal (mimetype, "audio/x-dts")) {
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_DTS;
+    spec->info.bpf = 4;
+  } else if (g_str_equal (mimetype, "audio/mpeg") &&
+      gst_structure_get_int (structure, "mpegaudioversion", &i) &&
+      (i == 1 || i == 2)) {
+    /* Now we know this is MPEG-1 or MPEG-2 (non AAC) */
+    /* extract the needed information from the cap */
+    if (!(gst_structure_get_int (structure, "rate", &info.rate)))
+      goto parse_error;
+
+    spec->type = GST_BUFTYPE_MPEG;
+    spec->info.bpf = 4;
+  } else {
+    goto parse_error;
+  }
+
+  gst_caps_replace (&spec->caps, caps);
+
+  g_return_val_if_fail (spec->latency_time != 0, FALSE);
+
+  /* calculate suggested segsize and segtotal. segsize should be one unit
+   * of 'latency_time' samples, scaling for the fact that latency_time is
+   * currently stored in microseconds (FIXME: in 0.11) */
+  spec->segsize = gst_util_uint64_scale (info.rate * info.bpf,
+      spec->latency_time, GST_SECOND / GST_USECOND);
+  /* Round to an integer number of samples */
+  spec->segsize -= spec->segsize % info.bpf;
+
+  spec->segtotal = spec->buffer_time / spec->latency_time;
+  /* leave the latency undefined now, implementations can change it but if it's
+   * not changed, we assume the same value as segtotal */
+  spec->seglatency = -1;
+
+  spec->info = info;
+
+  gst_ring_buffer_debug_spec_caps (spec);
+  gst_ring_buffer_debug_spec_buff (spec);
+
+  return TRUE;
+
+  /* ERRORS */
+parse_error:
+  {
+    GST_DEBUG ("could not parse caps");
+    return FALSE;
+  }
+}
+
+/**
+ * gst_ring_buffer_convert:
+ * @buf: the #GstRingBuffer
+ * @src_fmt: the source format
+ * @src_val: the source value
+ * @dest_fmt: the destination format
+ * @dest_val: a location to store the converted value
+ *
+ * Convert @src_val in @src_fmt to the equivalent value in @dest_fmt. The result
+ * will be put in @dest_val.
+ *
+ * Returns: TRUE if the conversion succeeded.
+ *
+ * Since: 0.10.22.
+ */
+gboolean
+gst_ring_buffer_convert (GstRingBuffer * buf,
+    GstFormat src_fmt, gint64 src_val, GstFormat dest_fmt, gint64 * dest_val)
+{
+  gboolean res;
+
+  GST_OBJECT_LOCK (buf);
+  res =
+      gst_audio_info_convert (&buf->spec.info, src_fmt, src_val, dest_fmt,
+      dest_val);
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_set_callback:
+ * @buf: the #GstRingBuffer to set the callback on
+ * @cb: the callback to set
+ * @user_data: user data passed to the callback
+ *
+ * Sets the given callback function on the buffer. This function
+ * will be called every time a segment has been written to a device.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_set_callback (GstRingBuffer * buf, GstRingBufferCallback cb,
+    gpointer user_data)
+{
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  GST_OBJECT_LOCK (buf);
+  buf->callback = cb;
+  buf->cb_data = user_data;
+  GST_OBJECT_UNLOCK (buf);
+}
+
+
+/**
+ * gst_ring_buffer_open_device:
+ * @buf: the #GstRingBuffer
+ *
+ * Open the audio device associated with the ring buffer. Does not perform any
+ * setup on the device. You must open the device before acquiring the ring
+ * buffer.
+ *
+ * Returns: TRUE if the device could be opened, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_open_device (GstRingBuffer * buf)
+{
+  gboolean res = TRUE;
+  GstRingBufferClass *rclass;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "opening device");
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (buf->open))
+    goto was_opened;
+
+  buf->open = TRUE;
+
+  /* if this fails, something is wrong in this file */
+  g_assert (!buf->acquired);
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->open_device))
+    res = rclass->open_device (buf);
+
+  if (G_UNLIKELY (!res))
+    goto open_failed;
+
+  GST_DEBUG_OBJECT (buf, "opened device");
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+was_opened:
+  {
+    GST_DEBUG_OBJECT (buf, "Device for ring buffer already open");
+    g_warning ("Device for ring buffer %p already open, fix your code", buf);
+    res = TRUE;
+    goto done;
+  }
+open_failed:
+  {
+    buf->open = FALSE;
+    GST_DEBUG_OBJECT (buf, "failed opening device");
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_close_device:
+ * @buf: the #GstRingBuffer
+ *
+ * Close the audio device associated with the ring buffer. The ring buffer
+ * should already have been released via gst_ring_buffer_release().
+ *
+ * Returns: TRUE if the device could be closed, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_close_device (GstRingBuffer * buf)
+{
+  gboolean res = TRUE;
+  GstRingBufferClass *rclass;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "closing device");
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (!buf->open))
+    goto was_closed;
+
+  if (G_UNLIKELY (buf->acquired))
+    goto was_acquired;
+
+  buf->open = FALSE;
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->close_device))
+    res = rclass->close_device (buf);
+
+  if (G_UNLIKELY (!res))
+    goto close_error;
+
+  GST_DEBUG_OBJECT (buf, "closed device");
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+was_closed:
+  {
+    GST_DEBUG_OBJECT (buf, "Device for ring buffer already closed");
+    g_warning ("Device for ring buffer %p already closed, fix your code", buf);
+    res = TRUE;
+    goto done;
+  }
+was_acquired:
+  {
+    GST_DEBUG_OBJECT (buf, "Resources for ring buffer still acquired");
+    g_critical ("Resources for ring buffer %p still acquired", buf);
+    res = FALSE;
+    goto done;
+  }
+close_error:
+  {
+    buf->open = TRUE;
+    GST_DEBUG_OBJECT (buf, "error closing device");
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_device_is_open:
+ * @buf: the #GstRingBuffer
+ *
+ * Checks the status of the device associated with the ring buffer.
+ *
+ * Returns: TRUE if the device was open, FALSE if it was closed.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_device_is_open (GstRingBuffer * buf)
+{
+  gboolean res = TRUE;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_OBJECT_LOCK (buf);
+  res = buf->open;
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_acquire:
+ * @buf: the #GstRingBuffer to acquire
+ * @spec: the specs of the buffer
+ *
+ * Allocate the resources for the ringbuffer. This function fills
+ * in the data pointer of the ring buffer with a valid #GstBuffer
+ * to which samples can be written.
+ *
+ * Returns: TRUE if the device could be acquired, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+  gint segsize, bpf;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "acquiring device %p", buf);
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (!buf->open))
+    goto not_opened;
+
+  if (G_UNLIKELY (buf->acquired))
+    goto was_acquired;
+
+  buf->acquired = TRUE;
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->acquire))
+    res = rclass->acquire (buf, spec);
+
+  if (G_UNLIKELY (!res))
+    goto acquire_failed;
+
+  if (G_UNLIKELY ((bpf = buf->spec.info.bpf) == 0))
+    goto invalid_bpf;
+
+  /* if the seglatency was overwritten with something else than -1, use it, else
+   * assume segtotal as the latency */
+  if (buf->spec.seglatency == -1)
+    buf->spec.seglatency = buf->spec.segtotal;
+
+  segsize = buf->spec.segsize;
+
+  buf->samples_per_seg = segsize / bpf;
+
+  /* create an empty segment */
+  g_free (buf->empty_seg);
+  buf->empty_seg = g_malloc (segsize);
+
+  if (buf->spec.type == GST_BUFTYPE_RAW) {
+    gst_audio_format_fill_silence (buf->spec.info.finfo, buf->empty_seg,
+        segsize);
+  } else {
+    /* FIXME, non-raw formats get 0 as the empty sample */
+    memset (buf->empty_seg, 0, segsize);
+  }
+  GST_DEBUG_OBJECT (buf, "acquired device");
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+not_opened:
+  {
+    GST_DEBUG_OBJECT (buf, "device not opened");
+    g_critical ("Device for %p not opened", buf);
+    res = FALSE;
+    goto done;
+  }
+was_acquired:
+  {
+    res = TRUE;
+    GST_DEBUG_OBJECT (buf, "device was acquired");
+    goto done;
+  }
+acquire_failed:
+  {
+    buf->acquired = FALSE;
+    GST_DEBUG_OBJECT (buf, "failed to acquire device");
+    goto done;
+  }
+invalid_bpf:
+  {
+    g_warning
+        ("invalid bytes_per_frame from acquire ringbuffer %p, fix the element",
+        buf);
+    buf->acquired = FALSE;
+    res = FALSE;
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_release:
+ * @buf: the #GstRingBuffer to release
+ *
+ * Free the resources of the ringbuffer.
+ *
+ * Returns: TRUE if the device could be released, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_release (GstRingBuffer * buf)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "releasing device");
+
+  gst_ring_buffer_stop (buf);
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (!buf->acquired))
+    goto was_released;
+
+  buf->acquired = FALSE;
+
+  /* if this fails, something is wrong in this file */
+  g_assert (buf->open == TRUE);
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->release))
+    res = rclass->release (buf);
+
+  /* signal any waiters */
+  GST_DEBUG_OBJECT (buf, "signal waiter");
+  GST_RING_BUFFER_SIGNAL (buf);
+
+  if (G_UNLIKELY (!res))
+    goto release_failed;
+
+  g_free (buf->empty_seg);
+  buf->empty_seg = NULL;
+  GST_DEBUG_OBJECT (buf, "released device");
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+was_released:
+  {
+    res = TRUE;
+    GST_DEBUG_OBJECT (buf, "device was released");
+    goto done;
+  }
+release_failed:
+  {
+    buf->acquired = TRUE;
+    GST_DEBUG_OBJECT (buf, "failed to release device");
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_is_acquired:
+ * @buf: the #GstRingBuffer to check
+ *
+ * Check if the ringbuffer is acquired and ready to use.
+ *
+ * Returns: TRUE if the ringbuffer is acquired, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_is_acquired (GstRingBuffer * buf)
+{
+  gboolean res;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_OBJECT_LOCK (buf);
+  res = buf->acquired;
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_activate:
+ * @buf: the #GstRingBuffer to activate
+ * @active: the new mode
+ *
+ * Activate @buf to start or stop pulling data.
+ *
+ * MT safe.
+ *
+ * Returns: TRUE if the device could be activated in the requested mode,
+ * FALSE on error.
+ *
+ * Since: 0.10.22.
+ */
+gboolean
+gst_ring_buffer_activate (GstRingBuffer * buf, gboolean active)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "activate device");
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (active && !buf->acquired))
+    goto not_acquired;
+
+  if (G_UNLIKELY (buf->active == active))
+    goto was_active;
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  /* if there is no activate function we assume it was started/released
+   * in the acquire method */
+  if (G_LIKELY (rclass->activate))
+    res = rclass->activate (buf, active);
+  else
+    res = TRUE;
+
+  if (G_UNLIKELY (!res))
+    goto activate_failed;
+
+  buf->active = active;
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+not_acquired:
+  {
+    GST_DEBUG_OBJECT (buf, "device not acquired");
+    g_critical ("Device for %p not acquired", buf);
+    res = FALSE;
+    goto done;
+  }
+was_active:
+  {
+    res = TRUE;
+    GST_DEBUG_OBJECT (buf, "device was active in mode %d", active);
+    goto done;
+  }
+activate_failed:
+  {
+    GST_DEBUG_OBJECT (buf, "failed to activate device");
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_is_active:
+ * @buf: the #GstRingBuffer
+ *
+ * Check if @buf is activated.
+ *
+ * MT safe.
+ *
+ * Returns: TRUE if the device is active.
+ *
+ * Since: 0.10.22.
+ */
+gboolean
+gst_ring_buffer_is_active (GstRingBuffer * buf)
+{
+  gboolean res;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_OBJECT_LOCK (buf);
+  res = buf->active;
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+}
+
+
+/**
+ * gst_ring_buffer_set_flushing:
+ * @buf: the #GstRingBuffer to flush
+ * @flushing: the new mode
+ *
+ * Set the ringbuffer to flushing mode or normal mode.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_set_flushing (GstRingBuffer * buf, gboolean flushing)
+{
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  GST_OBJECT_LOCK (buf);
+  buf->flushing = flushing;
+
+  if (flushing) {
+    gst_ring_buffer_pause_unlocked (buf);
+  } else {
+    gst_ring_buffer_clear_all (buf);
+  }
+  GST_OBJECT_UNLOCK (buf);
+}
+
+/**
+ * gst_ring_buffer_start:
+ * @buf: the #GstRingBuffer to start
+ *
+ * Start processing samples from the ringbuffer.
+ *
+ * Returns: TRUE if the device could be started, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_start (GstRingBuffer * buf)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+  gboolean resume = FALSE;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "starting ringbuffer");
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (buf->flushing))
+    goto flushing;
+
+  if (G_UNLIKELY (!buf->acquired))
+    goto not_acquired;
+
+  if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE))
+    goto may_not_start;
+
+  /* if stopped, set to started */
+  res = g_atomic_int_compare_and_exchange (&buf->state,
+      GST_RING_BUFFER_STATE_STOPPED, GST_RING_BUFFER_STATE_STARTED);
+
+  if (!res) {
+    GST_DEBUG_OBJECT (buf, "was not stopped, try paused");
+    /* was not stopped, try from paused */
+    res = g_atomic_int_compare_and_exchange (&buf->state,
+        GST_RING_BUFFER_STATE_PAUSED, GST_RING_BUFFER_STATE_STARTED);
+    if (!res) {
+      /* was not paused either, must be started then */
+      res = TRUE;
+      GST_DEBUG_OBJECT (buf, "was not paused, must have been started");
+      goto done;
+    }
+    resume = TRUE;
+    GST_DEBUG_OBJECT (buf, "resuming");
+  }
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (resume) {
+    if (G_LIKELY (rclass->resume))
+      res = rclass->resume (buf);
+  } else {
+    if (G_LIKELY (rclass->start))
+      res = rclass->start (buf);
+  }
+
+  if (G_UNLIKELY (!res)) {
+    buf->state = GST_RING_BUFFER_STATE_PAUSED;
+    GST_DEBUG_OBJECT (buf, "failed to start");
+  } else {
+    GST_DEBUG_OBJECT (buf, "started");
+  }
+
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+flushing:
+  {
+    GST_DEBUG_OBJECT (buf, "we are flushing");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+not_acquired:
+  {
+    GST_DEBUG_OBJECT (buf, "we are not acquired");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+may_not_start:
+  {
+    GST_DEBUG_OBJECT (buf, "we may not start");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_ring_buffer_pause_unlocked (GstRingBuffer * buf)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+
+  GST_DEBUG_OBJECT (buf, "pausing ringbuffer");
+
+  /* if started, set to paused */
+  res = g_atomic_int_compare_and_exchange (&buf->state,
+      GST_RING_BUFFER_STATE_STARTED, GST_RING_BUFFER_STATE_PAUSED);
+
+  if (!res)
+    goto not_started;
+
+  /* signal any waiters */
+  GST_DEBUG_OBJECT (buf, "signal waiter");
+  GST_RING_BUFFER_SIGNAL (buf);
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->pause))
+    res = rclass->pause (buf);
+
+  if (G_UNLIKELY (!res)) {
+    buf->state = GST_RING_BUFFER_STATE_STARTED;
+    GST_DEBUG_OBJECT (buf, "failed to pause");
+  } else {
+    GST_DEBUG_OBJECT (buf, "paused");
+  }
+
+  return res;
+
+not_started:
+  {
+    /* was not started */
+    GST_DEBUG_OBJECT (buf, "was not started");
+    return TRUE;
+  }
+}
+
+/**
+ * gst_ring_buffer_pause:
+ * @buf: the #GstRingBuffer to pause
+ *
+ * Pause processing samples from the ringbuffer.
+ *
+ * Returns: TRUE if the device could be paused, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_pause (GstRingBuffer * buf)
+{
+  gboolean res = FALSE;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (buf->flushing))
+    goto flushing;
+
+  if (G_UNLIKELY (!buf->acquired))
+    goto not_acquired;
+
+  res = gst_ring_buffer_pause_unlocked (buf);
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+
+  /* ERRORS */
+flushing:
+  {
+    GST_DEBUG_OBJECT (buf, "we are flushing");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+not_acquired:
+  {
+    GST_DEBUG_OBJECT (buf, "not acquired");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_ring_buffer_stop:
+ * @buf: the #GstRingBuffer to stop
+ *
+ * Stop processing samples from the ringbuffer.
+ *
+ * Returns: TRUE if the device could be stopped, FALSE on error.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_stop (GstRingBuffer * buf)
+{
+  gboolean res = FALSE;
+  GstRingBufferClass *rclass;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  GST_DEBUG_OBJECT (buf, "stopping");
+
+  GST_OBJECT_LOCK (buf);
+
+  /* if started, set to stopped */
+  res = g_atomic_int_compare_and_exchange (&buf->state,
+      GST_RING_BUFFER_STATE_STARTED, GST_RING_BUFFER_STATE_STOPPED);
+
+  if (!res) {
+    GST_DEBUG_OBJECT (buf, "was not started, try paused");
+    /* was not started, try from paused */
+    res = g_atomic_int_compare_and_exchange (&buf->state,
+        GST_RING_BUFFER_STATE_PAUSED, GST_RING_BUFFER_STATE_STOPPED);
+    if (!res) {
+      /* was not paused either, must have been stopped then */
+      res = TRUE;
+      GST_DEBUG_OBJECT (buf, "was not paused, must have been stopped");
+      goto done;
+    }
+  }
+
+  /* signal any waiters */
+  GST_DEBUG_OBJECT (buf, "signal waiter");
+  GST_RING_BUFFER_SIGNAL (buf);
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->stop))
+    res = rclass->stop (buf);
+
+  if (G_UNLIKELY (!res)) {
+    buf->state = GST_RING_BUFFER_STATE_STARTED;
+    GST_DEBUG_OBJECT (buf, "failed to stop");
+  } else {
+    GST_DEBUG_OBJECT (buf, "stopped");
+  }
+done:
+  GST_OBJECT_UNLOCK (buf);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_delay:
+ * @buf: the #GstRingBuffer to query
+ *
+ * Get the number of samples queued in the audio device. This is
+ * usually less than the segment size but can be bigger when the
+ * implementation uses another internal buffer between the audio
+ * device.
+ *
+ * For playback ringbuffers this is the amount of samples transfered from the
+ * ringbuffer to the device but still not played.
+ *
+ * For capture ringbuffers this is the amount of samples in the device that are
+ * not yet transfered to the ringbuffer.
+ *
+ * Returns: The number of samples queued in the audio device.
+ *
+ * MT safe.
+ */
+guint
+gst_ring_buffer_delay (GstRingBuffer * buf)
+{
+  GstRingBufferClass *rclass;
+  guint res;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), 0);
+
+  /* buffer must be acquired */
+  if (G_UNLIKELY (!gst_ring_buffer_is_acquired (buf)))
+    goto not_acquired;
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+  if (G_LIKELY (rclass->delay))
+    res = rclass->delay (buf);
+  else
+    res = 0;
+
+  return res;
+
+not_acquired:
+  {
+    GST_DEBUG_OBJECT (buf, "not acquired");
+    return 0;
+  }
+}
+
+/**
+ * gst_ring_buffer_samples_done:
+ * @buf: the #GstRingBuffer to query
+ *
+ * Get the number of samples that were processed by the ringbuffer
+ * since it was last started. This does not include the number of samples not
+ * yet processed (see gst_ring_buffer_delay()).
+ *
+ * Returns: The number of samples processed by the ringbuffer.
+ *
+ * MT safe.
+ */
+guint64
+gst_ring_buffer_samples_done (GstRingBuffer * buf)
+{
+  gint segdone;
+  guint64 samples;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), 0);
+
+  /* get the amount of segments we processed */
+  segdone = g_atomic_int_get (&buf->segdone);
+
+  /* convert to samples */
+  samples = ((guint64) segdone) * buf->samples_per_seg;
+
+  return samples;
+}
+
+/**
+ * gst_ring_buffer_set_sample:
+ * @buf: the #GstRingBuffer to use
+ * @sample: the sample number to set
+ *
+ * Make sure that the next sample written to the device is
+ * accounted for as being the @sample sample written to the
+ * device. This value will be used in reporting the current
+ * sample position of the ringbuffer.
+ *
+ * This function will also clear the buffer with silence.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_set_sample (GstRingBuffer * buf, guint64 sample)
+{
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  if (sample == -1)
+    sample = 0;
+
+  if (G_UNLIKELY (buf->samples_per_seg == 0))
+    return;
+
+  /* FIXME, we assume the ringbuffer can restart at a random 
+   * position, round down to the beginning and keep track of
+   * offset when calculating the processed samples. */
+  buf->segbase = buf->segdone - sample / buf->samples_per_seg;
+
+  gst_ring_buffer_clear_all (buf);
+
+  GST_DEBUG_OBJECT (buf, "set sample to %" G_GUINT64_FORMAT ", segbase %d",
+      sample, buf->segbase);
+}
+
+static void
+default_clear_all (GstRingBuffer * buf)
+{
+  gint i;
+
+  /* not fatal, we just are not negotiated yet */
+  if (G_UNLIKELY (buf->spec.segtotal <= 0))
+    return;
+
+  GST_DEBUG_OBJECT (buf, "clear all segments");
+
+  for (i = 0; i < buf->spec.segtotal; i++) {
+    gst_ring_buffer_clear (buf, i);
+  }
+}
+
+/**
+ * gst_ring_buffer_clear_all:
+ * @buf: the #GstRingBuffer to clear
+ *
+ * Fill the ringbuffer with silence.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_clear_all (GstRingBuffer * buf)
+{
+  GstRingBufferClass *rclass;
+
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+
+  if (G_LIKELY (rclass->clear_all))
+    rclass->clear_all (buf);
+}
+
+
+static gboolean
+wait_segment (GstRingBuffer * buf)
+{
+  gint segments;
+  gboolean wait = TRUE;
+
+  /* buffer must be started now or we deadlock since nobody is reading */
+  if (G_UNLIKELY (g_atomic_int_get (&buf->state) !=
+          GST_RING_BUFFER_STATE_STARTED)) {
+    /* see if we are allowed to start it */
+    if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE))
+      goto no_start;
+
+    GST_DEBUG_OBJECT (buf, "start!");
+    segments = g_atomic_int_get (&buf->segdone);
+    gst_ring_buffer_start (buf);
+
+    /* After starting, the writer may have wrote segments already and then we
+     * don't need to wait anymore */
+    if (G_LIKELY (g_atomic_int_get (&buf->segdone) != segments))
+      wait = FALSE;
+  }
+
+  /* take lock first, then update our waiting flag */
+  GST_OBJECT_LOCK (buf);
+  if (G_UNLIKELY (buf->flushing))
+    goto flushing;
+
+  if (G_UNLIKELY (g_atomic_int_get (&buf->state) !=
+          GST_RING_BUFFER_STATE_STARTED))
+    goto not_started;
+
+  if (G_LIKELY (wait)) {
+    if (g_atomic_int_compare_and_exchange (&buf->waiting, 0, 1)) {
+      GST_DEBUG_OBJECT (buf, "waiting..");
+      GST_RING_BUFFER_WAIT (buf);
+
+      if (G_UNLIKELY (buf->flushing))
+        goto flushing;
+
+      if (G_UNLIKELY (g_atomic_int_get (&buf->state) !=
+              GST_RING_BUFFER_STATE_STARTED))
+        goto not_started;
+    }
+  }
+  GST_OBJECT_UNLOCK (buf);
+
+  return TRUE;
+
+  /* ERROR */
+not_started:
+  {
+    g_atomic_int_compare_and_exchange (&buf->waiting, 1, 0);
+    GST_DEBUG_OBJECT (buf, "stopped processing");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+flushing:
+  {
+    g_atomic_int_compare_and_exchange (&buf->waiting, 1, 0);
+    GST_DEBUG_OBJECT (buf, "flushing");
+    GST_OBJECT_UNLOCK (buf);
+    return FALSE;
+  }
+no_start:
+  {
+    GST_DEBUG_OBJECT (buf, "not allowed to start");
+    return FALSE;
+  }
+}
+
+#define FWD_SAMPLES(s,se,d,de)		 	\
+G_STMT_START {					\
+  /* no rate conversion */			\
+  guint towrite = MIN (se + bpf - s, de - d);	\
+  /* simple copy */				\
+  if (!skip)					\
+    memcpy (d, s, towrite);			\
+  in_samples -= towrite / bpf;			\
+  out_samples -= towrite / bpf;			\
+  s += towrite;					\
+  GST_DEBUG ("copy %u bytes", towrite);		\
+} G_STMT_END
+
+/* in_samples >= out_samples, rate > 1.0 */
+#define FWD_UP_SAMPLES(s,se,d,de) 	 	\
+G_STMT_START {					\
+  guint8 *sb = s, *db = d;			\
+  while (s <= se && d < de) {			\
+    if (!skip)					\
+      memcpy (d, s, bpf);			\
+    s += bpf;					\
+    *accum += outr;				\
+    if ((*accum << 1) >= inr) {			\
+      *accum -= inr;				\
+      d += bpf;					\
+    }						\
+  }						\
+  in_samples -= (s - sb)/bpf;			\
+  out_samples -= (d - db)/bpf;			\
+  GST_DEBUG ("fwd_up end %d/%d",*accum,*toprocess);	\
+} G_STMT_END
+
+/* out_samples > in_samples, for rates smaller than 1.0 */
+#define FWD_DOWN_SAMPLES(s,se,d,de) 	 	\
+G_STMT_START {					\
+  guint8 *sb = s, *db = d;			\
+  while (s <= se && d < de) {			\
+    if (!skip)					\
+      memcpy (d, s, bpf);			\
+    d += bpf;					\
+    *accum += inr;				\
+    if ((*accum << 1) >= outr) {		\
+      *accum -= outr;				\
+      s += bpf;					\
+    }						\
+  }						\
+  in_samples -= (s - sb)/bpf;			\
+  out_samples -= (d - db)/bpf;			\
+  GST_DEBUG ("fwd_down end %d/%d",*accum,*toprocess);	\
+} G_STMT_END
+
+#define REV_UP_SAMPLES(s,se,d,de) 	 	\
+G_STMT_START {					\
+  guint8 *sb = se, *db = d;			\
+  while (s <= se && d < de) {			\
+    if (!skip)					\
+      memcpy (d, se, bpf);			\
+    se -= bpf;					\
+    *accum += outr;				\
+    while (d < de && (*accum << 1) >= inr) {	\
+      *accum -= inr;				\
+      d += bpf;					\
+    }						\
+  }						\
+  in_samples -= (sb - se)/bpf;			\
+  out_samples -= (d - db)/bpf;			\
+  GST_DEBUG ("rev_up end %d/%d",*accum,*toprocess);	\
+} G_STMT_END
+
+#define REV_DOWN_SAMPLES(s,se,d,de) 	 	\
+G_STMT_START {					\
+  guint8 *sb = se, *db = d;			\
+  while (s <= se && d < de) {			\
+    if (!skip)					\
+      memcpy (d, se, bpf);			\
+    d += bpf;					\
+    *accum += inr;				\
+    while (s <= se && (*accum << 1) >= outr) {	\
+      *accum -= outr;				\
+      se -= bpf;				\
+    }						\
+  }						\
+  in_samples -= (sb - se)/bpf;			\
+  out_samples -= (d - db)/bpf;			\
+  GST_DEBUG ("rev_down end %d/%d",*accum,*toprocess);	\
+} G_STMT_END
+
+static guint
+default_commit (GstRingBuffer * buf, guint64 * sample,
+    guchar * data, gint in_samples, gint out_samples, gint * accum)
+{
+  gint segdone;
+  gint segsize, segtotal, bpf, sps;
+  guint8 *dest, *data_end;
+  gint writeseg, sampleoff;
+  gint *toprocess;
+  gint inr, outr;
+  gboolean reverse;
+
+  g_return_val_if_fail (buf->memory != NULL, -1);
+  g_return_val_if_fail (data != NULL, -1);
+
+  dest = buf->memory;
+  segsize = buf->spec.segsize;
+  segtotal = buf->spec.segtotal;
+  bpf = buf->spec.info.bpf;
+  sps = buf->samples_per_seg;
+
+  reverse = out_samples < 0;
+  out_samples = ABS (out_samples);
+
+  if (in_samples >= out_samples)
+    toprocess = &in_samples;
+  else
+    toprocess = &out_samples;
+
+  inr = in_samples - 1;
+  outr = out_samples - 1;
+
+  /* data_end points to the last sample we have to write, not past it. This is
+   * needed to properly handle reverse playback: it points to the last sample. */
+  data_end = data + (bpf * inr);
+
+  /* figure out the segment and the offset inside the segment where
+   * the first sample should be written. */
+  writeseg = *sample / sps;
+  sampleoff = (*sample % sps) * bpf;
+
+  /* write out all samples */
+  while (*toprocess > 0) {
+    gint avail;
+    guint8 *d, *d_end;
+    gint ws;
+    gboolean skip;
+
+    while (TRUE) {
+      gint diff;
+
+      /* get the currently processed segment */
+      segdone = g_atomic_int_get (&buf->segdone) - buf->segbase;
+
+      /* see how far away it is from the write segment */
+      diff = writeseg - segdone;
+
+      GST_DEBUG
+          ("pointer at %d, write to %d-%d, diff %d, segtotal %d, segsize %d, base %d",
+          segdone, writeseg, sampleoff, diff, segtotal, segsize, buf->segbase);
+
+      /* segment too far ahead, writer too slow, we need to drop, hopefully UNLIKELY */
+      if (G_UNLIKELY (diff < 0)) {
+        /* we need to drop one segment at a time, pretend we wrote a
+         * segment. */
+        skip = TRUE;
+        break;
+      }
+
+      /* write segment is within writable range, we can break the loop and
+       * start writing the data. */
+      if (diff < segtotal) {
+        skip = FALSE;
+        break;
+      }
+
+      /* else we need to wait for the segment to become writable. */
+      if (!wait_segment (buf))
+        goto not_started;
+    }
+
+    /* we can write now */
+    ws = writeseg % segtotal;
+    avail = MIN (segsize - sampleoff, bpf * out_samples);
+
+    d = dest + (ws * segsize) + sampleoff;
+    d_end = d + avail;
+    *sample += avail / bpf;
+
+    GST_DEBUG_OBJECT (buf, "write @%p seg %d, sps %d, off %d, avail %d",
+        dest + ws * segsize, ws, sps, sampleoff, avail);
+
+    if (G_LIKELY (inr == outr && !reverse)) {
+      /* no rate conversion, simply copy samples */
+      FWD_SAMPLES (data, data_end, d, d_end);
+    } else if (!reverse) {
+      if (inr >= outr)
+        /* forward speed up */
+        FWD_UP_SAMPLES (data, data_end, d, d_end);
+      else
+        /* forward slow down */
+        FWD_DOWN_SAMPLES (data, data_end, d, d_end);
+    } else {
+      if (inr >= outr)
+        /* reverse speed up */
+        REV_UP_SAMPLES (data, data_end, d, d_end);
+      else
+        /* reverse slow down */
+        REV_DOWN_SAMPLES (data, data_end, d, d_end);
+    }
+
+    /* for the next iteration we write to the next segment at the beginning. */
+    writeseg++;
+    sampleoff = 0;
+  }
+  /* we consumed all samples here */
+  data = data_end + bpf;
+
+done:
+  return inr - ((data_end - data) / bpf);
+
+  /* ERRORS */
+not_started:
+  {
+    GST_DEBUG_OBJECT (buf, "stopped processing");
+    goto done;
+  }
+}
+
+/**
+ * gst_ring_buffer_commit_full:
+ * @buf: the #GstRingBuffer to commit
+ * @sample: the sample position of the data
+ * @data: the data to commit
+ * @in_samples: the number of samples in the data to commit
+ * @out_samples: the number of samples to write to the ringbuffer
+ * @accum: accumulator for rate conversion.
+ *
+ * Commit @in_samples samples pointed to by @data to the ringbuffer @buf. 
+ *
+ * @in_samples and @out_samples define the rate conversion to perform on the the
+ * samples in @data. For negative rates, @out_samples must be negative and
+ * @in_samples positive.
+ *
+ * When @out_samples is positive, the first sample will be written at position @sample
+ * in the ringbuffer. When @out_samples is negative, the last sample will be written to
+ * @sample in reverse order.
+ *
+ * @out_samples does not need to be a multiple of the segment size of the ringbuffer
+ * although it is recommended for optimal performance. 
+ *
+ * @accum will hold a temporary accumulator used in rate conversion and should be
+ * set to 0 when this function is first called. In case the commit operation is
+ * interrupted, one can resume the processing by passing the previously returned
+ * @accum value back to this function.
+ *
+ * MT safe.
+ *
+ * Returns: The number of samples written to the ringbuffer or -1 on error. The
+ * number of samples written can be less than @out_samples when @buf was interrupted
+ * with a flush or stop.
+ *
+ * Since: 0.10.11.
+ */
+guint
+gst_ring_buffer_commit_full (GstRingBuffer * buf, guint64 * sample,
+    guchar * data, gint in_samples, gint out_samples, gint * accum)
+{
+  GstRingBufferClass *rclass;
+  guint res = -1;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1);
+
+  if (G_UNLIKELY (in_samples == 0 || out_samples == 0))
+    return in_samples;
+
+  rclass = GST_RING_BUFFER_GET_CLASS (buf);
+
+  if (G_LIKELY (rclass->commit))
+    res = rclass->commit (buf, sample, data, in_samples, out_samples, accum);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_commit:
+ * @buf: the #GstRingBuffer to commit
+ * @sample: the sample position of the data
+ * @data: the data to commit
+ * @len: the number of samples in the data to commit
+ *
+ * Same as gst_ring_buffer_commit_full() but with a in_samples and out_samples
+ * equal to @len, ignoring accum.
+ *
+ * Returns: The number of samples written to the ringbuffer or -1 on
+ * error.
+ *
+ * MT safe.
+ */
+guint
+gst_ring_buffer_commit (GstRingBuffer * buf, guint64 sample, guchar * data,
+    guint len)
+{
+  guint res;
+  guint64 samplep = sample;
+
+  res = gst_ring_buffer_commit_full (buf, &samplep, data, len, len, NULL);
+
+  return res;
+}
+
+/**
+ * gst_ring_buffer_read:
+ * @buf: the #GstRingBuffer to read from
+ * @sample: the sample position of the data
+ * @data: where the data should be read
+ * @len: the number of samples in data to read
+ *
+ * Read @len samples from the ringbuffer into the memory pointed 
+ * to by @data.
+ * The first sample should be read from position @sample in
+ * the ringbuffer.
+ *
+ * @len should not be a multiple of the segment size of the ringbuffer
+ * although it is recommended.
+ *
+ * Returns: The number of samples read from the ringbuffer or -1 on
+ * error.
+ *
+ * MT safe.
+ */
+guint
+gst_ring_buffer_read (GstRingBuffer * buf, guint64 sample, guchar * data,
+    guint len)
+{
+  gint segdone;
+  gint segsize, segtotal, bpf, sps;
+  guint8 *dest;
+  guint to_read;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1);
+  g_return_val_if_fail (buf->memory != NULL, -1);
+  g_return_val_if_fail (data != NULL, -1);
+
+  dest = buf->memory;
+  segsize = buf->spec.segsize;
+  segtotal = buf->spec.segtotal;
+  bpf = buf->spec.info.bpf;
+  sps = buf->samples_per_seg;
+
+  to_read = len;
+  /* read enough samples */
+  while (to_read > 0) {
+    gint sampleslen;
+    gint readseg, sampleoff;
+
+    /* figure out the segment and the offset inside the segment where
+     * the sample should be read from. */
+    readseg = sample / sps;
+    sampleoff = (sample % sps);
+
+    while (TRUE) {
+      gint diff;
+
+      /* get the currently processed segment */
+      segdone = g_atomic_int_get (&buf->segdone) - buf->segbase;
+
+      /* see how far away it is from the read segment, normally segdone (where
+       * the hardware is writing) is bigger than readseg (where software is
+       * reading) */
+      diff = segdone - readseg;
+
+      GST_DEBUG
+          ("pointer at %d, sample %" G_GUINT64_FORMAT
+          ", read from %d-%d, to_read %d, diff %d, segtotal %d, segsize %d",
+          segdone, sample, readseg, sampleoff, to_read, diff, segtotal,
+          segsize);
+
+      /* segment too far ahead, reader too slow */
+      if (G_UNLIKELY (diff >= segtotal)) {
+        /* pretend we read an empty segment. */
+        sampleslen = MIN (sps, to_read);
+        memcpy (data, buf->empty_seg, sampleslen * bpf);
+        goto next;
+      }
+
+      /* read segment is within readable range, we can break the loop and
+       * start reading the data. */
+      if (diff > 0)
+        break;
+
+      /* else we need to wait for the segment to become readable. */
+      if (!wait_segment (buf))
+        goto not_started;
+    }
+
+    /* we can read now */
+    readseg = readseg % segtotal;
+    sampleslen = MIN (sps - sampleoff, to_read);
+
+    GST_DEBUG_OBJECT (buf, "read @%p seg %d, off %d, sampleslen %d",
+        dest + readseg * segsize, readseg, sampleoff, sampleslen);
+
+    memcpy (data, dest + (readseg * segsize) + (sampleoff * bpf),
+        (sampleslen * bpf));
+
+  next:
+    to_read -= sampleslen;
+    sample += sampleslen;
+    data += sampleslen * bpf;
+  }
+
+  return len - to_read;
+
+  /* ERRORS */
+not_started:
+  {
+    GST_DEBUG_OBJECT (buf, "stopped processing");
+    return len - to_read;
+  }
+}
+
+/**
+ * gst_ring_buffer_prepare_read:
+ * @buf: the #GstRingBuffer to read from
+ * @segment: the segment to read
+ * @readptr: the pointer to the memory where samples can be read
+ * @len: the number of bytes to read
+ *
+ * Returns a pointer to memory where the data from segment @segment
+ * can be found. This function is mostly used by subclasses.
+ *
+ * Returns: FALSE if the buffer is not started.
+ *
+ * MT safe.
+ */
+gboolean
+gst_ring_buffer_prepare_read (GstRingBuffer * buf, gint * segment,
+    guint8 ** readptr, gint * len)
+{
+  guint8 *data;
+  gint segdone;
+
+  g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE);
+
+  if (buf->callback == NULL) {
+    /* push mode, fail when nothing is started */
+    if (g_atomic_int_get (&buf->state) != GST_RING_BUFFER_STATE_STARTED)
+      return FALSE;
+  }
+
+  g_return_val_if_fail (buf->memory != NULL, FALSE);
+  g_return_val_if_fail (segment != NULL, FALSE);
+  g_return_val_if_fail (readptr != NULL, FALSE);
+  g_return_val_if_fail (len != NULL, FALSE);
+
+  data = buf->memory;
+
+  /* get the position of the pointer */
+  segdone = g_atomic_int_get (&buf->segdone);
+
+  *segment = segdone % buf->spec.segtotal;
+  *len = buf->spec.segsize;
+  *readptr = data + *segment * *len;
+
+  GST_LOG ("prepare read from segment %d (real %d) @%p",
+      *segment, segdone, *readptr);
+
+  /* callback to fill the memory with data, for pull based
+   * scheduling. */
+  if (buf->callback)
+    buf->callback (buf, *readptr, *len, buf->cb_data);
+
+  return TRUE;
+}
+
+/**
+ * gst_ring_buffer_advance:
+ * @buf: the #GstRingBuffer to advance
+ * @advance: the number of segments written
+ *
+ * Subclasses should call this function to notify the fact that 
+ * @advance segments are now processed by the device.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_advance (GstRingBuffer * buf, guint advance)
+{
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  /* update counter */
+  g_atomic_int_add (&buf->segdone, advance);
+
+  /* the lock is already taken when the waiting flag is set,
+   * we grab the lock as well to make sure the waiter is actually
+   * waiting for the signal */
+  if (g_atomic_int_compare_and_exchange (&buf->waiting, 1, 0)) {
+    GST_OBJECT_LOCK (buf);
+    GST_DEBUG_OBJECT (buf, "signal waiter");
+    GST_RING_BUFFER_SIGNAL (buf);
+    GST_OBJECT_UNLOCK (buf);
+  }
+}
+
+/**
+ * gst_ring_buffer_clear:
+ * @buf: the #GstRingBuffer to clear
+ * @segment: the segment to clear
+ *
+ * Clear the given segment of the buffer with silence samples.
+ * This function is used by subclasses.
+ *
+ * MT safe.
+ */
+void
+gst_ring_buffer_clear (GstRingBuffer * buf, gint segment)
+{
+  guint8 *data;
+
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  /* no data means it's already cleared */
+  if (G_UNLIKELY (buf->memory == NULL))
+    return;
+
+  /* no empty_seg means it's not opened */
+  if (G_UNLIKELY (buf->empty_seg == NULL))
+    return;
+
+  segment %= buf->spec.segtotal;
+
+  data = buf->memory;
+  data += segment * buf->spec.segsize;
+
+  GST_LOG ("clear segment %d @%p", segment, data);
+
+  memcpy (data, buf->empty_seg, buf->spec.segsize);
+}
+
+/**
+ * gst_ring_buffer_may_start:
+ * @buf: the #GstRingBuffer
+ * @allowed: the new value
+ *
+ * Tell the ringbuffer that it is allowed to start playback when
+ * the ringbuffer is filled with samples. 
+ *
+ * MT safe.
+ *
+ * Since: 0.10.6
+ */
+void
+gst_ring_buffer_may_start (GstRingBuffer * buf, gboolean allowed)
+{
+  g_return_if_fail (GST_IS_RING_BUFFER (buf));
+
+  GST_LOG_OBJECT (buf, "may start: %d", allowed);
+  g_atomic_int_set (&buf->may_start, allowed);
+}
diff --git a/gst-libs/gst/audio/gstringbuffer.h b/gst-libs/gst/audio/gstringbuffer.h
new file mode 100644
index 0000000..ddd2c68
--- /dev/null
+++ b/gst-libs/gst/audio/gstringbuffer.h
@@ -0,0 +1,338 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstringbuffer.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RING_BUFFER_H__
+#define __GST_RING_BUFFER_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RING_BUFFER             (gst_ring_buffer_get_type())
+#define GST_RING_BUFFER(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RING_BUFFER,GstRingBuffer))
+#define GST_RING_BUFFER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RING_BUFFER,GstRingBufferClass))
+#define GST_RING_BUFFER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RING_BUFFER, GstRingBufferClass))
+#define GST_RING_BUFFER_CAST(obj)        ((GstRingBuffer *)obj)
+#define GST_IS_RING_BUFFER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RING_BUFFER))
+#define GST_IS_RING_BUFFER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RING_BUFFER))
+
+typedef struct _GstRingBuffer GstRingBuffer;
+typedef struct _GstRingBufferClass GstRingBufferClass;
+typedef struct _GstRingBufferSpec GstRingBufferSpec;
+
+/**
+ * GstRingBufferCallback:
+ * @rbuf: a #GstRingBuffer
+ * @data: target to fill
+ * @len: amount to fill
+ * @user_data: user data
+ *
+ * This function is set with gst_ring_buffer_set_callback() and is
+ * called to fill the memory at @data with @len bytes of samples.
+ */
+typedef void (*GstRingBufferCallback) (GstRingBuffer *rbuf, guint8* data, guint len, gpointer user_data);
+
+/**
+ * GstRingBufferState:
+ * @GST_RING_BUFFER_STATE_STOPPED: The ringbuffer is stopped
+ * @GST_RING_BUFFER_STATE_PAUSED: The ringbuffer is paused
+ * @GST_RING_BUFFER_STATE_STARTED: The ringbuffer is started
+ *
+ * The state of the ringbuffer.
+ */
+typedef enum {
+  GST_RING_BUFFER_STATE_STOPPED,
+  GST_RING_BUFFER_STATE_PAUSED,
+  GST_RING_BUFFER_STATE_STARTED
+} GstRingBufferState;
+
+/**
+ * GstRingBufferSegState:
+ * @GST_SEGSTATE_INVALID: The content of the segment is invalid
+ * @GST_SEGSTATE_EMPTY: The segment is empty
+ * @GST_SEGSTATE_FILLED: The segment contains valid data
+ * @GST_SEGSTATE_PARTIAL: The segment partially contains valid data
+ *
+ * The state of a segment in the ringbuffer.
+ */
+typedef enum {
+  GST_SEGSTATE_INVALID,
+  GST_SEGSTATE_EMPTY,
+  GST_SEGSTATE_FILLED,
+  GST_SEGSTATE_PARTIAL
+} GstRingBufferSegState;
+
+/**
+ * GstBufferFormatType:
+ * @GST_BUFTYPE_RAW: samples in linear or float
+ * @GST_BUFTYPE_MU_LAW: samples in mulaw
+ * @GST_BUFTYPE_A_LAW: samples in alaw
+ * @GST_BUFTYPE_IMA_ADPCM: samples in ima adpcm
+ * @GST_BUFTYPE_MPEG: samples in mpeg audio (but not AAC) format
+ * @GST_BUFTYPE_GSM: samples in gsm format
+ * @GST_BUFTYPE_IEC958: samples in IEC958 frames (e.g. AC3)
+ * @GST_BUFTYPE_AC3: samples in AC3 format
+ * @GST_BUFTYPE_EAC3: samples in EAC3 format
+ * @GST_BUFTYPE_DTS: samples in DTS format
+ * @GST_BUFTYPE_MPEG2_AAC: samples in MPEG-2 AAC format
+ * @GST_BUFTYPE_MPEG4_AAC: samples in MPEG-4 AAC format
+ *
+ * The format of the samples in the ringbuffer.
+ */
+typedef enum
+{
+  GST_BUFTYPE_RAW,
+  GST_BUFTYPE_MU_LAW,
+  GST_BUFTYPE_A_LAW,
+  GST_BUFTYPE_IMA_ADPCM,
+  GST_BUFTYPE_MPEG,
+  GST_BUFTYPE_GSM,
+  GST_BUFTYPE_IEC958,
+  GST_BUFTYPE_AC3,
+  GST_BUFTYPE_EAC3,
+  GST_BUFTYPE_DTS,
+  GST_BUFTYPE_MPEG2_AAC,
+  GST_BUFTYPE_MPEG4_AAC,
+} GstBufferFormatType;
+
+/**
+ * GstRingBufferSpec:
+ * @caps: The caps that generated the Spec.
+ * @type: the sample type
+ * @info: the #GstAudioInfo
+ * @latency_time: the latency in microseconds
+ * @buffer_time: the total buffer size in microseconds
+ * @segsize: the size of one segment in bytes
+ * @segtotal: the total number of segments
+ * @seglatency: number of segments queued in the lower level device,
+ *  defaults to segtotal
+ *
+ * The structure containing the format specification of the ringbuffer.
+ */
+struct _GstRingBufferSpec
+{
+  /*< public >*/
+  /* in */
+  GstCaps  *caps;               /* the caps of the buffer */
+
+  /* in/out */
+  GstBufferFormatType type;
+  GstAudioInfo        info;
+
+  guint64  latency_time;        /* the required/actual latency time, this is the
+				 * actual the size of one segment and the
+				 * minimum possible latency we can achieve. */
+  guint64  buffer_time;         /* the required/actual time of the buffer, this is
+				 * the total size of the buffer and maximum
+				 * latency we can compensate for. */
+  gint     segsize;             /* size of one buffer segment in bytes, this value
+				 * should be chosen to match latency_time as
+				 * well as possible. */
+  gint     segtotal;            /* total number of segments, this value is the
+				 * number of segments of @segsize and should be
+				 * chosen so that it matches buffer_time as
+				 * close as possible. */
+  /* ABI added 0.10.20 */
+  gint     seglatency;          /* number of segments queued in the lower
+				 * level device, defaults to segtotal. */
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+#define GST_RING_BUFFER_GET_COND(buf) (((GstRingBuffer *)buf)->cond)
+#define GST_RING_BUFFER_WAIT(buf)     (g_cond_wait (GST_RING_BUFFER_GET_COND (buf), GST_OBJECT_GET_LOCK (buf)))
+#define GST_RING_BUFFER_SIGNAL(buf)   (g_cond_signal (GST_RING_BUFFER_GET_COND (buf)))
+#define GST_RING_BUFFER_BROADCAST(buf)(g_cond_broadcast (GST_RING_BUFFER_GET_COND (buf)))
+
+/**
+ * GstRingBuffer:
+ * @cond: used to signal start/stop/pause/resume actions
+ * @open: boolean indicating that the ringbuffer is open
+ * @acquired: boolean indicating that the ringbuffer is acquired
+ * @memory: data in the ringbuffer
+ * @size: size of data in the ringbuffer
+ * @spec: format and layout of the ringbuffer data
+ * @segstate: status of each segment in the ringbuffer (unused)
+ * @samples_per_seg: number of samples in one segment
+ * @empty_seg: pointer to memory holding one segment of silence samples
+ * @state: state of the buffer
+ * @segdone: readpointer in the ringbuffer
+ * @segbase: segment corresponding to segment 0 (unused)
+ * @waiting: is a reader or writer waiting for a free segment
+ *
+ * The ringbuffer base class structure.
+ */
+struct _GstRingBuffer {
+  GstObject              object;
+
+  /*< public >*/ /* with LOCK */
+  GCond                 *cond;
+  gboolean               open;
+  gboolean               acquired;
+  guint8                *memory;
+  gsize                  size;
+  GstRingBufferSpec      spec;
+  GstRingBufferSegState *segstate;
+  gint                   samples_per_seg;
+  guint8                *empty_seg;
+
+  /*< public >*/ /* ATOMIC */
+  gint                   state;
+  gint                   segdone;
+  gint                   segbase;
+  gint                   waiting;
+
+  /*< private >*/
+  GstRingBufferCallback  callback;
+  gpointer               cb_data;
+
+  gboolean               flushing;
+  /* ATOMIC */
+  gint                   may_start;
+  gboolean               active;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING + 0];
+};
+
+/**
+ * GstRingBufferClass:
+ * @parent_class: parent class
+ * @open_device:  open the device, don't set any params or allocate anything
+ * @acquire: allocate the resources for the ringbuffer using the given spec
+ * @release: free resources of the ringbuffer
+ * @close_device: close the device
+ * @start: start processing of samples
+ * @pause: pause processing of samples
+ * @resume: resume processing of samples after pause
+ * @stop: stop processing of samples
+ * @delay: get number of samples queued in device
+ * @activate: activate the thread that starts pulling and monitoring the
+ * consumed segments in the device. Since 0.10.22
+ * @commit: write samples into the ringbuffer
+ * @clear_all: clear the entire ringbuffer Since 0.10.24
+ *
+ * The vmethods that subclasses can override to implement the ringbuffer.
+ */
+struct _GstRingBufferClass {
+  GstObjectClass parent_class;
+
+  /*< public >*/
+  gboolean     (*open_device)  (GstRingBuffer *buf);
+  gboolean     (*acquire)      (GstRingBuffer *buf, GstRingBufferSpec *spec);
+  gboolean     (*release)      (GstRingBuffer *buf);
+  gboolean     (*close_device) (GstRingBuffer *buf);
+
+  gboolean     (*start)        (GstRingBuffer *buf);
+  gboolean     (*pause)        (GstRingBuffer *buf);
+  gboolean     (*resume)       (GstRingBuffer *buf);
+  gboolean     (*stop)         (GstRingBuffer *buf);
+
+  guint        (*delay)        (GstRingBuffer *buf);
+
+  /* ABI added */
+  gboolean     (*activate)     (GstRingBuffer *buf, gboolean active);
+
+  guint        (*commit)       (GstRingBuffer * buf, guint64 *sample,
+                                guchar * data, gint in_samples,
+                                gint out_samples, gint * accum);
+
+  void         (*clear_all)    (GstRingBuffer * buf);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING - 3];
+};
+
+GType gst_ring_buffer_get_type(void);
+
+/* callback stuff */
+void            gst_ring_buffer_set_callback    (GstRingBuffer *buf, GstRingBufferCallback cb,
+                                                 gpointer user_data);
+
+gboolean        gst_ring_buffer_parse_caps      (GstRingBufferSpec *spec, GstCaps *caps);
+void            gst_ring_buffer_debug_spec_caps (GstRingBufferSpec *spec);
+void            gst_ring_buffer_debug_spec_buff (GstRingBufferSpec *spec);
+
+gboolean        gst_ring_buffer_convert         (GstRingBuffer * buf, GstFormat src_fmt,
+                                                 gint64 src_val, GstFormat dest_fmt,
+						 gint64 * dest_val);
+
+/* device state */
+gboolean        gst_ring_buffer_open_device     (GstRingBuffer *buf);
+gboolean        gst_ring_buffer_close_device    (GstRingBuffer *buf);
+
+gboolean        gst_ring_buffer_device_is_open  (GstRingBuffer *buf);
+
+/* allocate resources */
+gboolean        gst_ring_buffer_acquire         (GstRingBuffer *buf, GstRingBufferSpec *spec);
+gboolean        gst_ring_buffer_release         (GstRingBuffer *buf);
+
+gboolean        gst_ring_buffer_is_acquired     (GstRingBuffer *buf);
+
+/* activating */
+gboolean        gst_ring_buffer_activate        (GstRingBuffer *buf, gboolean active);
+gboolean        gst_ring_buffer_is_active       (GstRingBuffer *buf);
+
+/* flushing */
+void            gst_ring_buffer_set_flushing    (GstRingBuffer *buf, gboolean flushing);
+
+/* playback/pause */
+gboolean        gst_ring_buffer_start           (GstRingBuffer *buf);
+gboolean        gst_ring_buffer_pause           (GstRingBuffer *buf);
+gboolean        gst_ring_buffer_stop            (GstRingBuffer *buf);
+
+/* get status */
+guint           gst_ring_buffer_delay           (GstRingBuffer *buf);
+guint64         gst_ring_buffer_samples_done    (GstRingBuffer *buf);
+
+void            gst_ring_buffer_set_sample      (GstRingBuffer *buf, guint64 sample);
+
+/* clear all segments */
+void            gst_ring_buffer_clear_all       (GstRingBuffer *buf);
+
+/* commit samples */
+guint           gst_ring_buffer_commit          (GstRingBuffer *buf, guint64 sample,
+                                                 guchar *data, guint len);
+guint           gst_ring_buffer_commit_full     (GstRingBuffer * buf, guint64 *sample,
+		                                 guchar * data, gint in_samples,
+						 gint out_samples, gint * accum);
+
+/* read samples */
+guint           gst_ring_buffer_read            (GstRingBuffer *buf, guint64 sample,
+                                                 guchar *data, guint len);
+
+/* mostly protected */
+/* not yet implemented
+gboolean        gst_ring_buffer_prepare_write   (GstRingBuffer *buf, gint *segment, guint8 **writeptr, gint *len);
+*/
+gboolean        gst_ring_buffer_prepare_read    (GstRingBuffer *buf, gint *segment, guint8 **readptr, gint *len);
+void            gst_ring_buffer_clear           (GstRingBuffer *buf, gint segment);
+void            gst_ring_buffer_advance         (GstRingBuffer *buf, guint advance);
+
+void            gst_ring_buffer_may_start       (GstRingBuffer *buf, gboolean allowed);
+
+
+G_END_DECLS
+
+#endif /* __GST_RING_BUFFER_H__ */
diff --git a/gst-libs/gst/audio/mixerutils.c b/gst-libs/gst/audio/mixerutils.c
new file mode 100644
index 0000000..ba912d9
--- /dev/null
+++ b/gst-libs/gst/audio/mixerutils.c
@@ -0,0 +1,246 @@
+/* GStreamer
+ * Copyright (C) 2003-2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2005-2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstaudiomixerutils
+ * @short_description:  utility functions to find available audio mixers
+ *                      from the plugin registry
+ *
+ * <refsect2>
+ * <para>
+ * Provides some utility functions to detect available audio mixers
+ * on the system.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "mixerutils.h"
+
+#include <gst/interfaces/propertyprobe.h>
+
+#include <string.h>
+
+static void
+gst_audio_mixer_filter_do_filter (GstAudioMixerFilterFunc filter_func,
+    GstElementFactory * factory,
+    GstElement ** p_element, GList ** p_collection, gpointer user_data)
+{
+  /* so, the element is a mixer, let's see if the caller wants it */
+  if (filter_func != NULL) {
+    if (filter_func (GST_MIXER (*p_element), user_data) == TRUE) {
+      *p_collection = g_list_prepend (*p_collection, *p_element);
+      /* do not set state back to NULL here on purpose, caller
+       * might want to keep the mixer open */
+      *p_element = NULL;
+    }
+  } else {
+    gst_element_set_state (*p_element, GST_STATE_NULL);
+    *p_collection = g_list_prepend (*p_collection, *p_element);
+    *p_element = NULL;
+  }
+
+  /* create new element for further probing if the old one was cleared */
+  if (*p_element == NULL) {
+    *p_element = gst_element_factory_create (factory, NULL);
+  }
+}
+
+static gboolean
+gst_audio_mixer_filter_check_element (GstElement * element)
+{
+  GstStateChangeReturn ret;
+
+  /* open device (only then we can know for sure whether it is a mixer) */
+  gst_element_set_state (element, GST_STATE_READY);
+  ret = gst_element_get_state (element, NULL, NULL, 1 * GST_SECOND);
+  if (ret != GST_STATE_CHANGE_SUCCESS) {
+    GST_DEBUG ("could not open device / set element to READY");
+    gst_element_set_state (element, GST_STATE_NULL);
+    return FALSE;
+  }
+
+  /* is this device a mixer? */
+  if (!GST_IS_MIXER (element)) {
+    GST_DEBUG ("element is not a mixer");
+    gst_element_set_state (element, GST_STATE_NULL);
+    return FALSE;
+  }
+
+  /* any tracks? */
+  if (!gst_mixer_list_tracks (GST_MIXER (element))) {
+    GST_DEBUG ("element is a mixer, but has no tracks");
+    gst_element_set_state (element, GST_STATE_NULL);
+    return FALSE;
+  }
+
+  GST_DEBUG ("element is a mixer with mixer tracks");
+  return TRUE;
+}
+
+static void
+gst_audio_mixer_filter_probe_feature (GstAudioMixerFilterFunc filter_func,
+    GstElementFactory * factory,
+    GList ** p_collection, gboolean first, gpointer user_data)
+{
+  GstElement *element;
+
+  GST_DEBUG ("probing %s ...", gst_element_factory_get_longname (factory));
+
+  /* create element */
+  element = gst_element_factory_create (factory, NULL);
+
+  if (element == NULL) {
+    GST_DEBUG ("could not create element from factory");
+    return;
+  }
+
+  GST_DEBUG ("created element %s (%p)", GST_ELEMENT_NAME (element), element);
+
+  if (GST_IS_PROPERTY_PROBE (element)) {
+    GstPropertyProbe *probe;
+    const GParamSpec *devspec;
+
+    probe = GST_PROPERTY_PROBE (element);
+
+    GST_DEBUG ("probing available devices ...");
+    if ((devspec = gst_property_probe_get_property (probe, "device"))) {
+      GValueArray *array;
+
+      if ((array = gst_property_probe_probe_and_get_values (probe, devspec))) {
+        guint n;
+
+        GST_DEBUG ("there are %d available devices", array->n_values);
+
+        /* set all devices and test for mixer */
+        for (n = 0; n < array->n_values; n++) {
+          GValue *device;
+
+          /* set this device */
+          device = g_value_array_get_nth (array, n);
+          g_object_set_property (G_OBJECT (element), "device", device);
+
+          GST_DEBUG ("trying device %s ..", g_value_get_string (device));
+
+          if (gst_audio_mixer_filter_check_element (element)) {
+            gst_audio_mixer_filter_do_filter (filter_func, factory, &element,
+                p_collection, user_data);
+
+            if (first && *p_collection != NULL) {
+              GST_DEBUG ("Stopping after first found mixer, as requested");
+              break;
+            }
+          }
+        }
+        g_value_array_free (array);
+      }
+    }
+  } else {
+    GST_DEBUG ("element does not support the property probe interface");
+
+    if (gst_audio_mixer_filter_check_element (element)) {
+      gst_audio_mixer_filter_do_filter (filter_func, factory, &element,
+          p_collection, user_data);
+    }
+  }
+
+  if (element) {
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (element);
+  }
+}
+
+static gint
+element_factory_rank_compare_func (gconstpointer a, gconstpointer b)
+{
+  gint rank_a = gst_plugin_feature_get_rank (GST_PLUGIN_FEATURE (a));
+  gint rank_b = gst_plugin_feature_get_rank (GST_PLUGIN_FEATURE (b));
+
+  /* make order chosen in the end more determinable */
+  if (rank_a == rank_b) {
+    const gchar *name_a = GST_OBJECT_NAME (GST_PLUGIN_FEATURE (a));
+    const gchar *name_b = GST_OBJECT_NAME (GST_PLUGIN_FEATURE (b));
+
+    return g_ascii_strcasecmp (name_a, name_b);
+  }
+
+  return rank_b - rank_a;
+}
+
+/**
+ * gst_audio_default_registry_mixer_filter:
+ * @filter_func: filter function, or #NULL
+ * @first: set to #TRUE if you only want the first suitable mixer element
+ * @user_data: user data to pass to the filter function
+ *
+ * Utility function to find audio mixer elements.
+ *
+ * Will traverse the default plugin registry in order of plugin rank and
+ * find usable audio mixer elements. The caller may optionally fine-tune
+ * the selection by specifying a filter function.
+ *
+ * Returns: a #GList of audio mixer #GstElement<!-- -->s. You must free each
+ *          element in the list by setting it to NULL state and calling
+ *          gst_object_unref(). After that the list itself should be freed
+ *          using g_list_free().
+ *
+ * Since: 0.10.2
+ */
+GList *
+gst_audio_default_registry_mixer_filter (GstAudioMixerFilterFunc filter_func,
+    gboolean first, gpointer data)
+{
+  GList *mixer_list = NULL;
+  GList *feature_list;
+  GList *walk;
+
+  /* go through all elements of a certain class and check whether
+   * they implement a mixer. If so, add it to the list. */
+  feature_list = gst_registry_get_feature_list (gst_registry_get_default (),
+      GST_TYPE_ELEMENT_FACTORY);
+
+  feature_list = g_list_sort (feature_list, element_factory_rank_compare_func);
+
+  for (walk = feature_list; walk != NULL; walk = walk->next) {
+    GstElementFactory *factory;
+    const gchar *klass;
+
+    factory = GST_ELEMENT_FACTORY (walk->data);
+
+    /* check category */
+    klass = gst_element_factory_get_klass (factory);
+    if (strcmp (klass, "Generic/Audio") == 0) {
+      gst_audio_mixer_filter_probe_feature (filter_func, factory,
+          &mixer_list, first, data);
+    }
+
+    if (first && mixer_list != NULL) {
+      GST_DEBUG ("Stopping after first found mixer, as requested");
+      break;
+    }
+  }
+
+  gst_plugin_feature_list_free (feature_list);
+
+  return g_list_reverse (mixer_list);
+}
diff --git a/gst-libs/gst/audio/mixerutils.h b/gst-libs/gst/audio/mixerutils.h
new file mode 100644
index 0000000..cfda7ab
--- /dev/null
+++ b/gst-libs/gst/audio/mixerutils.h
@@ -0,0 +1,50 @@
+/* GStreamer
+ * Copyright (C) 2005-2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_MIXERUTILS_H__
+#define __GST_AUDIO_MIXERUTILS_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/mixer.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstAudioMixerFilterFunc:
+ * @mixer: a #GstElement implementing the #GstMixer interface
+ * @user_data: user data
+ *
+ * Function that will be called by gst_audio_default_registry_mixer_filter()
+ * so the caller can decide which mixer elements should be kept and returned.
+ * When the mixer element is passed to the callback function, it is opened
+ * and in READY state. If you decide to keep the element, you need to set it
+ * back to NULL state yourself (unless you want to keep it opened of course).
+ *
+ * Returns: TRUE if the element should be kept, FALSE otherwise.
+ */
+typedef gboolean (*GstAudioMixerFilterFunc) (GstMixer * mixer, gpointer user_data);
+
+
+GList * gst_audio_default_registry_mixer_filter (GstAudioMixerFilterFunc  filter_func,
+                                                 gboolean                 first,
+                                                 gpointer                 user_data);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_MIXERUTILS_H__ */
diff --git a/gst-libs/gst/audio/multichannel.c b/gst-libs/gst/audio/multichannel.c
new file mode 100644
index 0000000..885e277
--- /dev/null
+++ b/gst-libs/gst/audio/multichannel.c
@@ -0,0 +1,764 @@
+/* GStreamer Multichannel-Audio helper functions
+ * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstmultichannel
+ * @short_description: Support for multichannel audio elements
+ *
+ * This module contains some helper functions and a enum to work with
+ * multichannel audio.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "multichannel.h"
+
+#define GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME "channel-positions"
+
+/**
+ * gst_audio_check_channel_positions:
+ * @pos: An array of #GstAudioChannelPosition.
+ * @channels: The number of elements in @pos.
+ *
+ * This functions checks if the given channel positions are valid. Channel
+ * positions are valid if:
+ * <itemizedlist>
+ *   <listitem><para>No channel positions appears twice or all positions are %GST_AUDIO_CHANNEL_POSITION_NONE.
+ *   </para></listitem>
+ *   <listitem><para>Either all or none of the channel positions are %GST_AUDIO_CHANNEL_POSITION_NONE.
+ *   </para></listitem>
+ *   <listitem><para>%GST_AUDIO_CHANNEL_POSITION_FRONT_MONO and %GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT or %GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT don't appear together in the given positions.
+ *   </para></listitem>
+ * </itemizedlist>
+ *
+ * Since: 0.10.20
+ *
+ * Returns: %TRUE if the given channel positions are valid
+ * and %FALSE otherwise.
+ */
+gboolean
+gst_audio_check_channel_positions (const GstAudioChannelPosition * pos,
+    guint channels)
+{
+  gint i, n;
+
+  const struct
+  {
+    const GstAudioChannelPosition pos1[2];
+    const GstAudioChannelPosition pos2[1];
+  } conf[] = {
+    /* front: mono <-> stereo */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_MONO}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}
+  };
+
+  g_return_val_if_fail (pos != NULL, FALSE);
+  g_return_val_if_fail (channels > 0, FALSE);
+
+  /* check for invalid channel positions */
+  for (n = 0; n < channels; n++) {
+    if (pos[n] <= GST_AUDIO_CHANNEL_POSITION_INVALID ||
+        pos[n] >= GST_AUDIO_CHANNEL_POSITION_NUM) {
+      GST_WARNING ("Channel position %d for channel %d is invalid", pos[n], n);
+      return FALSE;
+    }
+  }
+
+  /* either all channel positions are NONE or all are defined,
+   * but having only some channel positions NONE and others not
+   * is not allowed */
+  if (pos[0] == GST_AUDIO_CHANNEL_POSITION_NONE) {
+    for (n = 1; n < channels; ++n) {
+      if (pos[n] != GST_AUDIO_CHANNEL_POSITION_NONE) {
+        GST_WARNING ("Either all channel positions must be defined, or all "
+            "be set to NONE, having only some defined is not allowed");
+        return FALSE;
+      }
+    }
+    /* all positions are NONE, we are done here */
+    return TRUE;
+  }
+
+  /* check for multiple position occurrences */
+  for (i = GST_AUDIO_CHANNEL_POSITION_INVALID + 1;
+      i < GST_AUDIO_CHANNEL_POSITION_NUM; i++) {
+    gint count = 0;
+
+    for (n = 0; n < channels; n++) {
+      if (pos[n] == i)
+        count++;
+    }
+
+    /* NONE may not occur mixed with other channel positions */
+    if (i == GST_AUDIO_CHANNEL_POSITION_NONE && count > 0) {
+      GST_WARNING ("Either all channel positions must be defined, or all "
+          "be set to NONE, having only some defined is not allowed");
+      return FALSE;
+    }
+
+    if (count > 1) {
+      GST_WARNING ("Channel position %d occurred %d times, not allowed",
+          i, count);
+      return FALSE;
+    }
+  }
+
+  /* check for position conflicts */
+  for (i = 0; conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; i++) {
+    gboolean found1 = FALSE, found2 = FALSE;
+
+    for (n = 0; n < channels; n++) {
+      if (pos[n] == conf[i].pos1[0] || pos[n] == conf[i].pos1[1])
+        found1 = TRUE;
+      else if (pos[n] == conf[i].pos2[0])
+        found2 = TRUE;
+    }
+
+    if (found1 && found2) {
+      GST_WARNING ("Found conflicting channel positions %d/%d and %d",
+          conf[i].pos1[0], conf[i].pos1[1], conf[i].pos2[0]);
+      return FALSE;
+    }
+  }
+
+  return TRUE;
+}
+
+/* FIXME: these default positions may or may not be correct. In any
+ * case, they are mostly just a fallback for buggy plugins, so it
+ * should not really matter too much */
+#define NUM_DEF_CHANS  8
+static const GstAudioChannelPosition
+    default_positions[NUM_DEF_CHANS][NUM_DEF_CHANS] = {
+  /* 1 channel */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+      },
+  /* 2 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      },
+  /* 3 channels (2.1) */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_LFE, /* or FRONT_CENTER for 3.0? */
+      },
+  /* 4 channels (4.0 or 3.1?) */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  /* 5 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      },
+  /* 6 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+      },
+  /* 7 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+      },
+  /* 8 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+      }
+};
+
+/**
+ * gst_audio_get_channel_positions:
+ * @str: A #GstStructure to retrieve channel positions from.
+ *
+ * Retrieves a number of (fixed!) audio channel positions from
+ * the provided #GstStructure and returns it as a newly allocated
+ * array. The caller should g_free () this array. The caller
+ * should also check that the members in this #GstStructure are
+ * indeed "fixed" before calling this function.
+ *
+ * Returns: a newly allocated array containing the channel
+ * positions as provided in the given #GstStructure. Returns
+ * NULL on error.
+ */
+
+GstAudioChannelPosition *
+gst_audio_get_channel_positions (GstStructure * str)
+{
+  GstAudioChannelPosition *pos;
+  gint channels, n;
+  const GValue *pos_val_arr, *pos_val_entry;
+  gboolean res;
+  GType t;
+
+  /* get number of channels, general type checkups */
+  g_return_val_if_fail (str != NULL, NULL);
+  res = gst_structure_get_int (str, "channels", &channels);
+  g_return_val_if_fail (res, NULL);
+  g_return_val_if_fail (channels > 0, NULL);
+  pos_val_arr = gst_structure_get_value (str,
+      GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME);
+
+  /* The following checks are here to retain compatibility for plugins not
+   * implementing this field. They expect that channels=1 implies mono
+   * and channels=2 implies stereo, so we follow that. */
+  if (pos_val_arr == NULL) {
+    /* channel layouts for 1 and 2 channels are implicit, don't warn */
+    if (channels > 2) {
+      g_warning ("Failed to retrieve channel layout from caps. This usually "
+          "means there is a GStreamer element that does not implement "
+          "multichannel audio correctly. Please file a bug.");
+    }
+
+    /* just return some default channel layout if we have one */
+    if (channels >= 1 && channels <= NUM_DEF_CHANS) {
+      const GstAudioChannelPosition *p;
+
+      p = default_positions[channels - 1];
+      return g_memdup (p, channels * sizeof (GstAudioChannelPosition));
+    }
+
+    return NULL;
+  }
+
+  g_return_val_if_fail (gst_value_array_get_size (pos_val_arr) == channels,
+      NULL);
+  for (n = 0; n < channels; n++) {
+    t = G_VALUE_TYPE (gst_value_array_get_value (pos_val_arr, n));
+    g_return_val_if_fail (t == GST_TYPE_AUDIO_CHANNEL_POSITION, NULL);
+  }
+
+  /* ... and fill array */
+  pos = g_new (GstAudioChannelPosition, channels);
+  for (n = 0; n < channels; n++) {
+    pos_val_entry = gst_value_array_get_value (pos_val_arr, n);
+    pos[n] = g_value_get_enum (pos_val_entry);
+  }
+
+  if (!gst_audio_check_channel_positions (pos, channels)) {
+    g_free (pos);
+    return NULL;
+  }
+
+  return pos;
+}
+
+void priv_gst_audio_info_fill_default_channel_positions (GstAudioInfo * info);
+
+void
+priv_gst_audio_info_fill_default_channel_positions (GstAudioInfo * info)
+{
+  guint channels, i;
+
+  g_assert (info != NULL);
+
+  channels = GST_AUDIO_INFO_CHANNELS (info);
+
+  g_assert (channels > 0);
+
+  if (channels <= NUM_DEF_CHANS) {
+    /* just return some default channel layout if we have one */
+    for (i = 0; i < channels; ++i)
+      info->position[i] = default_positions[channels - 1][i];
+  } else {
+    /* for many many channels, the positions are always NONE */
+    for (i = 0; i < G_N_ELEMENTS (info->position); i++)
+      info->position[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
+  }
+
+  info->flags |= GST_AUDIO_FLAG_DEFAULT_POSITIONS;
+}
+
+/**
+ * gst_audio_set_channel_positions:
+ * @str: A #GstStructure to set channel positions on.
+ * @pos: an array of channel positions. The number of members
+ *       in this array should be equal to the (fixed!) number
+ *       of the "channels" field in the given #GstStructure.
+ *
+ * Adds a "channel-positions" field to the given #GstStructure,
+ * which will represent the channel positions as given in the
+ * provided #GstAudioChannelPosition array.
+ */
+
+void
+gst_audio_set_channel_positions (GstStructure * str,
+    const GstAudioChannelPosition * pos)
+{
+  GValue pos_val_arr = { 0 }, pos_val_entry = {
+  0};
+  gint channels, n;
+
+  gboolean res;
+
+  /* get number of channels, checkups */
+  g_return_if_fail (str != NULL);
+  g_return_if_fail (pos != NULL);
+  res = gst_structure_get_int (str, "channels", &channels);
+  g_return_if_fail (res);
+  g_return_if_fail (channels > 0);
+  if (!gst_audio_check_channel_positions (pos, channels))
+    return;
+
+  /* build gvaluearray from positions */
+  g_value_init (&pos_val_entry, GST_TYPE_AUDIO_CHANNEL_POSITION);
+  g_value_init (&pos_val_arr, GST_TYPE_ARRAY);
+  for (n = 0; n < channels; n++) {
+    g_value_set_enum (&pos_val_entry, pos[n]);
+    gst_value_array_append_value (&pos_val_arr, &pos_val_entry);
+  }
+  g_value_unset (&pos_val_entry);
+
+  /* add to structure */
+  gst_structure_set_value (str,
+      GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME, &pos_val_arr);
+  g_value_unset (&pos_val_arr);
+}
+
+/**
+ * gst_audio_set_structure_channel_positions_list:
+ * @str: #GstStructure to set the list of channel positions
+ *       on.
+ * @pos: the array containing one or more possible audio
+ *       channel positions that we should add in each value
+ *       of the array in the given structure.
+ * @num_positions: the number of values in pos.
+ *
+ * Sets a (possibly non-fixed) list of possible audio channel
+ * positions (given in pos) on the given structure. The
+ * structure, after this function has been called, will contain
+ * a "channel-positions" field with an array of the size of
+ * the "channels" field value in the given structure (note
+ * that this means that the channels field in the provided
+ * structure should be fixed!). Each value in the array will
+ * contain each of the values given in the pos array.
+ */
+
+void
+gst_audio_set_structure_channel_positions_list (GstStructure * str,
+    const GstAudioChannelPosition * pos, gint num_positions)
+{
+  gint channels, n, c;
+  GValue pos_val_arr = { 0 }, pos_val_list = {
+  0}, pos_val_entry = {
+  0};
+  gboolean res;
+
+  /* get number of channels, general type checkups */
+  g_return_if_fail (str != NULL);
+  g_return_if_fail (num_positions > 0);
+  g_return_if_fail (pos != NULL);
+  res = gst_structure_get_int (str, "channels", &channels);
+  g_return_if_fail (res);
+  g_return_if_fail (channels > 0);
+
+  /* create the array of lists */
+  g_value_init (&pos_val_arr, GST_TYPE_ARRAY);
+  g_value_init (&pos_val_entry, GST_TYPE_AUDIO_CHANNEL_POSITION);
+  for (n = 0; n < channels; n++) {
+    g_value_init (&pos_val_list, GST_TYPE_LIST);
+    for (c = 0; c < num_positions; c++) {
+      g_value_set_enum (&pos_val_entry, pos[c]);
+      gst_value_list_append_value (&pos_val_list, &pos_val_entry);
+    }
+    gst_value_array_append_value (&pos_val_arr, &pos_val_list);
+    g_value_unset (&pos_val_list);
+  }
+  g_value_unset (&pos_val_entry);
+  gst_structure_set_value (str, GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME,
+      &pos_val_arr);
+  g_value_unset (&pos_val_arr);
+}
+
+/*
+ * Helper function for below. The structure will be conserved,
+ * but might be cut down. Any additional structures that were
+ * created will be stored in the returned caps.
+ */
+
+static GstCaps *
+add_list_to_struct (GstStructure * str,
+    const GstAudioChannelPosition * pos, gint num_positions)
+{
+  GstCaps *caps = gst_caps_new_empty ();
+
+  const GValue *chan_val;
+
+  chan_val = gst_structure_get_value (str, "channels");
+  if (G_VALUE_TYPE (chan_val) == G_TYPE_INT) {
+    gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
+  } else if (G_VALUE_TYPE (chan_val) == GST_TYPE_LIST) {
+    gint size;
+
+    const GValue *sub_val;
+
+    size = gst_value_list_get_size (chan_val);
+    sub_val = gst_value_list_get_value (chan_val, 0);
+    gst_structure_set_value (str, "channels", sub_val);
+    gst_caps_append (caps, add_list_to_struct (str, pos, num_positions));
+    while (--size > 0) {
+      str = gst_structure_copy (str);
+      sub_val = gst_value_list_get_value (chan_val, size);
+      gst_structure_set_value (str, "channels", sub_val);
+      gst_caps_append (caps, add_list_to_struct (str, pos, num_positions));
+      gst_caps_append_structure (caps, str);
+    }
+  } else if (G_VALUE_TYPE (chan_val) == GST_TYPE_INT_RANGE) {
+    gint min, max;
+
+    min = gst_value_get_int_range_min (chan_val);
+    max = gst_value_get_int_range_max (chan_val);
+
+    gst_structure_set (str, "channels", G_TYPE_INT, min, NULL);
+    gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
+    for (++min; min < max; min++) {
+      str = gst_structure_copy (str);
+      gst_structure_set (str, "channels", G_TYPE_INT, min, NULL);
+      gst_audio_set_structure_channel_positions_list (str, pos, num_positions);
+      gst_caps_append_structure (caps, str);
+    }
+  } else {
+    g_warning ("Unexpected value type '%s' for channels field",
+        GST_STR_NULL (g_type_name (G_VALUE_TYPE (chan_val))));
+  }
+
+  return caps;
+}
+
+/**
+ * gst_audio_set_caps_channel_positions_list:
+ * @caps: #GstCaps to set the list of channel positions on.
+ * @pos: the array containing one or more possible audio
+ *       channel positions that we should add in each value
+ *       of the array in the given structure.
+ * @num_positions: the number of values in pos.
+ *
+ * Sets a (possibly non-fixed) list of possible audio channel
+ * positions (given in pos) on the given caps. Each of the
+ * structures of the caps, after this function has been called,
+ * will contain a "channel-positions" field with an array.
+ * Each value in the array will contain each of the values given
+ * in the pos array. Note that the size of the caps might be
+ * increased by this, since each structure with a "channel-
+ * positions" field needs to have a fixed "channels" field.
+ * The input caps is not required to have this.
+ */
+
+void
+gst_audio_set_caps_channel_positions_list (GstCaps * caps,
+    const GstAudioChannelPosition * pos, gint num_positions)
+{
+  gint size, n;
+
+  /* get number of channels, general type checkups */
+  g_return_if_fail (caps != NULL);
+  g_return_if_fail (num_positions > 0);
+  g_return_if_fail (pos != NULL);
+
+  size = gst_caps_get_size (caps);
+  for (n = 0; n < size; n++) {
+    gst_caps_append (caps, add_list_to_struct (gst_caps_get_structure (caps,
+                n), pos, num_positions));
+  }
+}
+
+/**
+ * gst_audio_fixate_channel_positions:
+ * @str: a #GstStructure containing a (possibly unfixed)
+ *       "channel-positions" field.
+ *
+ * Custom fixate function. Elements that implement some sort of
+ * channel conversion algorithm should use this function for
+ * fixating on GstAudioChannelPosition properties. It will take
+ * care of equal channel positioning (left/right). Caller g_free()s
+ * the return value. The input properties may be (and are supposed
+ * to be) unfixed.
+ * Note that this function is mostly a hack because we currently
+ * have no way to add default fixation functions for new GTypes.
+ *
+ * Returns: fixed values that the caller could use as a fixed
+ * set of #GstAudioChannelPosition values.
+ */
+
+GstAudioChannelPosition *
+gst_audio_fixate_channel_positions (GstStructure * str)
+{
+  GstAudioChannelPosition *pos;
+
+  gint channels, n, num_unfixed = 0, i, c;
+
+  const GValue *pos_val_arr, *pos_val_entry, *pos_val;
+
+  gboolean res, is_stereo = TRUE;
+
+  GType t;
+
+  /*
+   * We're going to do this cluelessly. We'll make an array of values that
+   * conflict with each other and, for each iteration in this array, pick
+   * either one until all unknown values are filled. This might not work in
+   * corner cases but should work OK for the general case.
+   */
+  const struct
+  {
+    const GstAudioChannelPosition pos1[2];
+    const GstAudioChannelPosition pos2[1];
+  } conf[] = {
+    /* front: mono <-> stereo */
+    {
+      {
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_MONO}}, { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}}, { {
+    GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+    GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+    GST_AUDIO_CHANNEL_POSITION_LFE}}, { {
+    GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}
+  };
+  struct
+  {
+    gint num_opt[3];
+    guint num_opts[3];
+    gboolean is_fixed[3];
+    gint choice;                /* -1 is none, 0 is the two, 1 is the one */
+  } opt;
+
+  /* get number of channels, general type checkups */
+  g_return_val_if_fail (str != NULL, NULL);
+  res = gst_structure_get_int (str, "channels", &channels);
+  g_return_val_if_fail (res, NULL);
+  g_return_val_if_fail (channels > 0, NULL);
+
+  /* 0.8.x mono/stereo checks */
+  pos_val_arr = gst_structure_get_value (str,
+      GST_AUDIO_CHANNEL_POSITIONS_FIELD_NAME);
+  if (!pos_val_arr && (channels == 1 || channels == 2)) {
+    pos = g_new (GstAudioChannelPosition, channels);
+    if (channels == 1) {
+      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
+    } else {
+      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+      pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+    }
+    return pos;
+  }
+  g_return_val_if_fail (pos_val_arr != NULL, NULL);
+  g_return_val_if_fail (gst_value_array_get_size (pos_val_arr) == channels,
+      NULL);
+  for (n = 0; n < channels; n++) {
+    t = G_VALUE_TYPE (gst_value_array_get_value (pos_val_arr, n));
+    g_return_val_if_fail (t == GST_TYPE_LIST ||
+        t == GST_TYPE_AUDIO_CHANNEL_POSITION, NULL);
+  }
+
+  /* all unknown, to start with */
+  pos = g_new (GstAudioChannelPosition, channels);
+  for (n = 0; n < channels; n++)
+    pos[n] = GST_AUDIO_CHANNEL_POSITION_INVALID;
+  num_unfixed = channels;
+
+  /* Iterate the array of conflicting values */
+  for (i = 0; conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID ||
+      conf[i].pos2[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; i++) {
+    /* front/center only important if not mono (obviously) */
+    if (conf[i].pos1[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER &&
+        !is_stereo)
+      continue;
+
+    /* init values */
+    for (n = 0; n < 3; n++) {
+      opt.num_opt[n] = -1;
+      opt.num_opts[n] = -1;
+      opt.is_fixed[n] = FALSE;
+    }
+
+    /* Now, we'll see for each channel if it allows for any of the values in
+     * the set of conflicting audio channel positions and keep scores. */
+    for (n = 0; n < channels; n++) {
+      /* if the channel is already taken, don't bother */
+      if (pos[n] != GST_AUDIO_CHANNEL_POSITION_INVALID)
+        continue;
+
+      pos_val_entry = gst_value_array_get_value (pos_val_arr, n);
+      t = G_VALUE_TYPE (pos_val_entry);
+      if (t == GST_TYPE_LIST) {
+        /* This algorhythm is suboptimal. */
+        for (c = 0; c < gst_value_list_get_size (pos_val_entry); c++) {
+          pos_val = gst_value_list_get_value (pos_val_entry, c);
+          if (g_value_get_enum (pos_val) == conf[i].pos1[0] &&
+              opt.num_opts[0] > gst_value_list_get_size (pos_val_entry) &&
+              !opt.is_fixed[0]) {
+            /* Now test if the old position of num_opt[0] also allows for
+             * the other channel (which was skipped previously). If so,
+             * keep score. */
+            if (opt.num_opt[0] != -1) {
+              gint c1;
+
+              pos_val_entry = gst_value_array_get_value (pos_val_arr,
+                  opt.num_opt[0]);
+              if (G_VALUE_TYPE (pos_val_entry) == GST_TYPE_LIST) {
+                for (c1 = 0; c1 < gst_value_list_get_size (pos_val_entry); c1++) {
+                  pos_val = gst_value_list_get_value (pos_val_entry, c1);
+                  if (g_value_get_enum (pos_val) == conf[i].pos1[1] &&
+                      opt.num_opts[1] > opt.num_opts[0] && !opt.is_fixed[1]) {
+                    opt.num_opts[1] = opt.num_opts[0];
+                    opt.num_opt[1] = opt.num_opt[0];
+                  }
+                }
+                pos_val = gst_value_list_get_value (pos_val_entry, c);
+              }
+              pos_val_entry = gst_value_array_get_value (pos_val_arr, n);
+            }
+
+            /* and save values */
+            opt.num_opts[0] = gst_value_list_get_size (pos_val_entry);
+            opt.num_opt[0] = n;
+          } else if (g_value_get_enum (pos_val) == conf[i].pos1[1] &&
+              opt.num_opts[1] > gst_value_list_get_size (pos_val_entry) &&
+              !opt.is_fixed[1] && n != opt.num_opt[0]) {
+            opt.num_opts[1] = gst_value_list_get_size (pos_val_entry);
+            opt.num_opt[1] = n;
+          }
+
+          /* 2 goes separately, because 0/1 vs. 2 are separate */
+          if (g_value_get_enum (pos_val) == conf[i].pos2[0] &&
+              opt.num_opts[2] > gst_value_list_get_size (pos_val_entry) &&
+              !opt.is_fixed[2]) {
+            opt.num_opts[2] = gst_value_list_get_size (pos_val_entry);
+            opt.num_opt[2] = n;
+          }
+        }
+      } else {
+        if (g_value_get_enum (pos_val_entry) == conf[i].pos1[0]) {
+          opt.num_opt[0] = n;
+          opt.is_fixed[0] = TRUE;
+        } else if (g_value_get_enum (pos_val_entry) == conf[i].pos1[1]) {
+          opt.num_opt[1] = n;
+          opt.is_fixed[1] = TRUE;
+        } else if (g_value_get_enum (pos_val_entry) == conf[i].pos2[0]) {
+          opt.num_opt[2] = n;
+          opt.is_fixed[2] = TRUE;
+        }
+      }
+    }
+
+    /* check our results and choose either one */
+    if ((opt.is_fixed[0] || opt.is_fixed[1]) && opt.is_fixed[2]) {
+      g_warning ("Pre-fixated on both %d/%d and %d - conflict!",
+          conf[i].pos1[0], conf[i].pos1[1], conf[i].pos2[0]);
+      g_free (pos);
+      return NULL;
+    } else if ((opt.is_fixed[0] && opt.num_opt[1] == -1) ||
+        (opt.is_fixed[1] && opt.num_opt[0] == -1)) {
+      g_warning ("Pre-fixated one side, but other side n/a of %d/%d",
+          conf[i].pos1[0], conf[i].pos1[1]);
+      g_free (pos);
+      return NULL;
+    } else if (opt.is_fixed[0] || opt.is_fixed[1]) {
+      opt.choice = 0;
+    } else if (opt.is_fixed[2]) {
+      opt.choice = 1;
+    } else if (opt.num_opt[0] != -1 && opt.num_opt[1] != -1) {
+      opt.choice = 0;
+    } else if (opt.num_opt[2] != -1) {
+      opt.choice = 1;
+    } else {
+      opt.choice = -1;
+    }
+
+    /* stereo? Note that we keep is_stereo to TRUE if we didn't decide on
+     * any arrangement. The mono/stereo channels might be handled elsewhere
+     * which is clearly outside the scope of this element, so we cannot
+     * know and expect the application to handle that then. */
+    if (conf[i].pos2[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_MONO &&
+        opt.choice == 1) {
+      is_stereo = FALSE;
+    }
+
+    /* now actually decide what we'll do and fixate on that */
+    if (opt.choice == 0) {
+      g_assert (conf[i].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID &&
+          conf[i].pos1[1] != GST_AUDIO_CHANNEL_POSITION_INVALID);
+      pos[opt.num_opt[0]] = conf[i].pos1[0];
+      pos[opt.num_opt[1]] = conf[i].pos1[1];
+      num_unfixed -= 2;
+    } else if (opt.choice == 1) {
+      g_assert (conf[i].pos2[0] != GST_AUDIO_CHANNEL_POSITION_INVALID);
+      pos[opt.num_opt[2]] = conf[i].pos2[0];
+      num_unfixed--;
+    }
+  }
+
+  /* safety check */
+  if (num_unfixed > 0) {
+    g_warning ("%d unfixed channel positions left after fixation!",
+        num_unfixed);
+    g_free (pos);
+    return NULL;
+  }
+
+  if (!gst_audio_check_channel_positions (pos, channels)) {
+    g_free (pos);
+    return NULL;
+  }
+
+  return pos;
+}
diff --git a/gst-libs/gst/audio/multichannel.h b/gst-libs/gst/audio/multichannel.h
new file mode 100644
index 0000000..186ba3c
--- /dev/null
+++ b/gst-libs/gst/audio/multichannel.h
@@ -0,0 +1,134 @@
+/* GStreamer Multichannel-Audio helper functions
+ * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/audio/audio.h>
+#include <gst/audio/audio-enumtypes.h>
+
+#ifndef __GST_AUDIO_MULTICHANNEL_H__
+#define __GST_AUDIO_MULTICHANNEL_H__
+
+G_BEGIN_DECLS
+
+/**
+ * GstAudioChannelPosition:
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_MONO: front mono
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT: front left
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT: front right
+ * @GST_AUDIO_CHANNEL_POSITION_REAR_CENTER: rear center
+ * @GST_AUDIO_CHANNEL_POSITION_REAR_LEFT: rear left
+ * @GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT: rear right
+ * @GST_AUDIO_CHANNEL_POSITION_LFE: subwoofer
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER: front center
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: front left of center
+ * @GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: front right of center
+ * @GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT: side left
+ * @GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT: side right
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_CENTER: top center
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT: top front left
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT: top front right
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER: top front center
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT: top rear left
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT: top rear right
+ * @GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER: top rear center
+ * @GST_AUDIO_CHANNEL_POSITION_NONE: used for position-less channels, e.g.
+ *     from a sound card that records 1024 channels; mutually exclusive with
+ *     any other channel position
+ * @GST_AUDIO_CHANNEL_POSITION_INVALID: invalid position
+ *
+ * Audio channel positions.
+ */
+typedef enum {
+  GST_AUDIO_CHANNEL_POSITION_INVALID = -1,
+
+  /* Main front speakers. Mono and left/right are mututally exclusive! */
+  GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+
+  /* rear. Left/right and center are mututally exclusive! */
+  GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+
+  /* subwoofer/low-frequency */
+  GST_AUDIO_CHANNEL_POSITION_LFE,
+
+  /* Center front speakers. Center and left/right_of_center cannot be
+   * used together! */
+  GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
+
+  /* sides */
+  GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+
+  GST_AUDIO_CHANNEL_POSITION_TOP_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER,
+
+  /* for multi-channel input and output with more than 8 channels,
+   * incompatible with all other positions, either all positions
+   * are defined or all positions are undefined, but can't mix'n'match  */
+  GST_AUDIO_CHANNEL_POSITION_NONE,
+
+  /*< private >*/
+  /* don't use - counter */
+  GST_AUDIO_CHANNEL_POSITION_NUM
+} GstAudioChannelPosition;
+
+/* Retrieves or sets the positions from/to a GstStructure. Only
+ * works with fixed caps, caller should check for that! Caller
+ * g_free()s result of the getter. */
+GstAudioChannelPosition *
+        gst_audio_get_channel_positions (GstStructure *str);
+void    gst_audio_set_channel_positions (GstStructure *str,
+                                         const GstAudioChannelPosition *pos);
+
+/* Sets a (non-fixed) list of possible audio channel positions
+ * on a structure (this requires the "channels" property to
+ * be fixed!) or on a caps (here, the "channels" property may be
+ * unfixed and the caps may even contain multiple structures). */
+void    gst_audio_set_structure_channel_positions_list
+                                        (GstStructure *str,
+                                         const GstAudioChannelPosition *pos,
+                                         gint          num_positions);
+void    gst_audio_set_caps_channel_positions_list
+                                        (GstCaps      *caps,
+                                         const GstAudioChannelPosition *pos,
+                                         gint          num_positions);
+
+/* Custom fixate function. Elements that implement some sort of
+ * channel conversion algorhithm should use this function for
+ * fixating on GstAudioChannelPosition properties. It will take
+ * care of equal channel positioning (left/right). Caller g_free()s
+ * the return value. The input properties may be (and are supposed
+ * to be) unfixed. */
+GstAudioChannelPosition *
+        gst_audio_fixate_channel_positions (GstStructure *str);
+
+gboolean gst_audio_check_channel_positions (const GstAudioChannelPosition * pos, guint channels);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_MULTICHANNEL_H__ */
diff --git a/gst-libs/gst/cdda/Makefile.am b/gst-libs/gst/cdda/Makefile.am
new file mode 100644
index 0000000..c72a62c
--- /dev/null
+++ b/gst-libs/gst/cdda/Makefile.am
@@ -0,0 +1,71 @@
+lib_LTLIBRARIES = libgstcdda-@GST_MAJORMINOR@.la
+
+libgstcdda_@GST_MAJORMINOR@_la_SOURCES = \
+	gstcddabasesrc.c
+
+libgstcdda_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/cdda
+libgstcdda_@GST_MAJORMINOR@include_HEADERS = \
+	gstcddabasesrc.h
+
+libgstcdda_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la
+libgstcdda_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstcdda_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+# Disabled until this is fixed:
+# http://bugzilla.gnome.org/show_bug.cgi?id=594209
+if FALSE
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstCdda-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstcdda_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstcdda_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/cdda/%',$(libgstcdda_@GST_MAJORMINOR@include_HEADERS))
+
+GstCdda-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstcdda-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstCdda \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		--add-include-path=$(builddir)/../tag \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstcdda-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--include=GstTag-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg gstreamer-tag-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-cdda-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=$(builddir)/../tag \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+endif
diff --git a/gst-libs/gst/cdda/Makefile.in b/gst-libs/gst/cdda/Makefile.in
new file mode 100644
index 0000000..010a10d
--- /dev/null
+++ b/gst-libs/gst/cdda/Makefile.in
@@ -0,0 +1,824 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/cdda
+DIST_COMMON = $(libgstcdda_@GST_MAJORMINOR@include_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" \
+	"$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstcdda_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la
+am_libgstcdda_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo
+libgstcdda_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstcdda_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstcdda_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstcdda_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstcdda_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstcdda_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstcdda_@GST_MAJORMINOR@_la_SOURCES)
+HEADERS = $(libgstcdda_@GST_MAJORMINOR@include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstcdda-@GST_MAJORMINOR@.la
+libgstcdda_@GST_MAJORMINOR@_la_SOURCES = \
+	gstcddabasesrc.c
+
+libgstcdda_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/cdda
+libgstcdda_@GST_MAJORMINOR@include_HEADERS = \
+	gstcddabasesrc.h
+
+libgstcdda_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la
+
+libgstcdda_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstcdda_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/cdda/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/cdda/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstcdda-@GST_MAJORMINOR@.la: $(libgstcdda_@GST_MAJORMINOR@_la_OBJECTS) $(libgstcdda_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstcdda_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstcdda_@GST_MAJORMINOR@_la_OBJECTS) $(libgstcdda_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo: gstcddabasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcdda_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo -MD -MP -MF $(DEPDIR)/libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.Tpo -c -o libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo `test -f 'gstcddabasesrc.c' || echo '$(srcdir)/'`gstcddabasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.Tpo $(DEPDIR)/libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstcddabasesrc.c' object='libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcdda_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstcdda_@GST_MAJORMINOR@_la-gstcddabasesrc.lo `test -f 'gstcddabasesrc.c' || echo '$(srcdir)/'`gstcddabasesrc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-libgstcdda_@GST_MAJORMINOR@includeHEADERS: $(libgstcdda_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstcdda_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstcdda_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstcdda_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstcdda_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstcdda_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstcdda_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstcdda_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libgstcdda_@GST_MAJORMINOR@includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES \
+	uninstall-libgstcdda_@GST_MAJORMINOR@includeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstcdda_@GST_MAJORMINOR@includeHEADERS install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstcdda_@GST_MAJORMINOR@includeHEADERS
+
+
+#GstCdda-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstcdda-@GST_MAJORMINOR@.la
+#	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+#		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+#		$(INTROSPECTION_SCANNER) -v --namespace GstCdda \
+#		--nsversion=@GST_MAJORMINOR@ \
+#		--strip-prefix=Gst \
+#		$(gir_cincludes) \
+#		-DGST_USE_UNSTABLE_API \
+#		--add-include-path=$(builddir)/../tag \
+#		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+#		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+#		--library=libgstcdda-@GST_MAJORMINOR@.la \
+#		--include=Gst-@GST_MAJORMINOR@ \
+#		--include=GstBase-@GST_MAJORMINOR@ \
+#		--include=GstTag-@GST_MAJORMINOR@ \
+#		--libtool="$(top_builddir)/libtool" \
+#		--pkg gstreamer-@GST_MAJORMINOR@ \
+#		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+#		--pkg gstreamer-tag-@GST_MAJORMINOR@ \
+#		--pkg-export gstreamer-cdda-@GST_MAJORMINOR@ \
+#		--add-init-section="gst_init(NULL,NULL);" \
+#		--output $@ \
+#		$(gir_headers) \
+#		$(gir_sources)
+
+#%.typelib: %.gir $(INTROSPECTION_COMPILER)
+#	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+#		$(INTROSPECTION_COMPILER) \
+#		--includedir=$(srcdir) \
+#		--includedir=$(builddir) \
+#		--includedir=$(builddir)/../tag \
+#		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+#		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+#		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/cdda/gstcddabasesrc.c b/gst-libs/gst/cdda/gstcddabasesrc.c
new file mode 100644
index 0000000..e308bbe
--- /dev/null
+++ b/gst-libs/gst/cdda/gstcddabasesrc.c
@@ -0,0 +1,1640 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2005 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* TODO:
+ *
+ *  - in ::start(), we want to post a tags message with an array or a list
+ *    of tagslists of all tracks, so that applications know at least the
+ *    number of tracks and all track durations immediately without having
+ *    to do any querying. We have to decide what type and name to use for
+ *    this array of track taglists.
+ *
+ *  - FIX cddb discid calculation algorithm for mixed mode CDs - do we use
+ *    offsets and duration of ALL tracks (data + audio) for the CDDB ID
+ *    calculation, or only audio tracks?
+ *
+ *  - Do we really need properties for the TOC bias/offset stuff? Wouldn't
+ *    environment variables make much more sense? Do we need this at all
+ *    (does it only affect ancient hardware?)
+ */
+
+/**
+ * SECTION:gstcddabasesrc
+ * @short_description: Base class for CD digital audio (CDDA) sources
+ *
+ * <refsect2>
+ * <para>
+ * Provides a base class for CDDA sources, which handles things like seeking,
+ * querying, discid calculation, tags, and buffer timestamping.
+ * </para>
+ * <title>Using GstCddaBaseSrc-based elements in applications</title>
+ * <para>
+ * GstCddaBaseSrc registers two #GstFormat<!-- -->s of its own, namely
+ * the "track" format and the "sector" format. Applications will usually
+ * only find the "track" format interesting. You can retrieve that #GstFormat
+ * for use in seek events or queries with gst_format_get_by_nick("track").
+ * </para>
+ * <para>
+ * In order to query the number of tracks, for example, an application would
+ * set the CDDA source element to READY or PAUSED state and then query the
+ * the number of tracks via gst_element_query_duration() using the track
+ * format acquired above. Applications can query the currently playing track
+ * in the same way.
+ * </para>
+ * <para>
+ * Alternatively, applications may retrieve the currently playing track and
+ * the total number of tracks from the taglist that will posted on the bus
+ * whenever the CD is opened or the currently playing track changes. The
+ * taglist will contain GST_TAG_TRACK_NUMBER and GST_TAG_TRACK_COUNT tags.
+ * </para>
+ * <para>
+ * Applications playing back CD audio using playbin and cdda://n URIs should
+ * issue a seek command in track format to change between tracks, rather than
+ * setting a new cdda://n+1 URI on playbin (as setting a new URI on playbin
+ * involves closing and re-opening the CD device, which is much much slower).
+ * </para>
+ * <title>Tags and meta-information</title>
+ * <para>
+ * CDDA sources will automatically emit a number of tags, details about which
+ * can be found in the libgsttag documentation. Those tags are:
+ * #GST_TAG_CDDA_CDDB_DISCID, #GST_TAG_CDDA_CDDB_DISCID_FULL,
+ * #GST_TAG_CDDA_MUSICBRAINZ_DISCID, #GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL,
+ * among others.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>             /* for strtol */
+
+#include <gst/audio/audio.h>
+#include "gstcddabasesrc.h"
+#include "gst/gst-i18n-plugin.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_cdda_base_src_debug);
+#define GST_CAT_DEFAULT gst_cdda_base_src_debug
+
+#define DEFAULT_DEVICE                       "/dev/cdrom"
+
+#define CD_FRAMESIZE_RAW                     (2352)
+
+#define SECTORS_PER_SECOND                   (75)
+#define SECTORS_PER_MINUTE                   (75*60)
+#define SAMPLES_PER_SECTOR                   (CD_FRAMESIZE_RAW >> 2)
+#define TIME_INTERVAL_FROM_SECTORS(sectors)  ((SAMPLES_PER_SECTOR * sectors * GST_SECOND) / 44100)
+#define SECTORS_FROM_TIME_INTERVAL(dtime)    (dtime * 44100 / (SAMPLES_PER_SECTOR * GST_SECOND))
+
+enum
+{
+  ARG_0,
+  ARG_MODE,
+  ARG_DEVICE,
+  ARG_TRACK,
+  ARG_TOC_OFFSET,
+  ARG_TOC_BIAS
+};
+
+static void gst_cdda_base_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+static void gst_cdda_base_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_cdda_base_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_cdda_base_src_finalize (GObject * obj);
+static const GstQueryType *gst_cdda_base_src_get_query_types (GstPad * pad);
+static gboolean gst_cdda_base_src_query (GstBaseSrc * src, GstQuery * query);
+static gboolean gst_cdda_base_src_handle_event (GstBaseSrc * basesrc,
+    GstEvent * event);
+static gboolean gst_cdda_base_src_do_seek (GstBaseSrc * basesrc,
+    GstSegment * segment);
+static gboolean gst_cdda_base_src_start (GstBaseSrc * basesrc);
+static gboolean gst_cdda_base_src_stop (GstBaseSrc * basesrc);
+static GstFlowReturn gst_cdda_base_src_create (GstPushSrc * pushsrc,
+    GstBuffer ** buf);
+static gboolean gst_cdda_base_src_is_seekable (GstBaseSrc * basesrc);
+static void gst_cdda_base_src_update_duration (GstCddaBaseSrc * src);
+static void gst_cdda_base_src_set_index (GstElement * src, GstIndex * index);
+static GstIndex *gst_cdda_base_src_get_index (GstElement * src);
+
+#define gst_cdda_base_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstCddaBaseSrc, gst_cdda_base_src, GST_TYPE_PUSH_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+        gst_cdda_base_src_uri_handler_init));
+
+#define SRC_CAPS \
+  "audio/x-raw, "               \
+  "format = (string) " GST_AUDIO_NE(S16) ", " \
+  "rate = (int) 44100, "            \
+  "channels = (int) 2"              \
+
+static GstStaticPadTemplate gst_cdda_base_src_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SRC_CAPS)
+    );
+
+/* our two formats */
+static GstFormat track_format;
+static GstFormat sector_format;
+
+GType
+gst_cdda_base_src_mode_get_type (void)
+{
+  static GType mode_type;       /* 0 */
+  static const GEnumValue modes[] = {
+    {GST_CDDA_BASE_SRC_MODE_NORMAL, "Stream consists of a single track",
+        "normal"},
+    {GST_CDDA_BASE_SRC_MODE_CONTINUOUS, "Stream consists of the whole disc",
+        "continuous"},
+    {0, NULL, NULL}
+  };
+
+  if (mode_type == 0)
+    mode_type = g_enum_register_static ("GstCddaBaseSrcMode", modes);
+
+  return mode_type;
+}
+
+static void
+gst_cdda_base_src_class_init (GstCddaBaseSrcClass * klass)
+{
+  GstElementClass *element_class;
+  GstPushSrcClass *pushsrc_class;
+  GstBaseSrcClass *basesrc_class;
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+  element_class = (GstElementClass *) klass;
+  basesrc_class = (GstBaseSrcClass *) klass;
+  pushsrc_class = (GstPushSrcClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (gst_cdda_base_src_debug, "cddabasesrc", 0,
+      "CDDA Base Source");
+
+  /* our very own formats */
+  track_format = gst_format_register ("track", "CD track");
+  sector_format = gst_format_register ("sector", "CD sector");
+
+  /* register CDDA tags */
+  gst_tag_register_musicbrainz_tags ();
+
+#if 0
+  ///// FIXME: what type to use here? ///////
+  gst_tag_register (GST_TAG_CDDA_TRACK_TAGS, GST_TAG_FLAG_META, GST_TYPE_TAG_LIST, "track-tags", "CDDA taglist for one track", gst_tag_merge_use_first);        ///////////// FIXME: right function??? ///////
+#endif
+
+  gobject_class->set_property = gst_cdda_base_src_set_property;
+  gobject_class->get_property = gst_cdda_base_src_get_property;
+  gobject_class->finalize = gst_cdda_base_src_finalize;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE,
+      g_param_spec_string ("device", "Device", "CD device location",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODE,
+      g_param_spec_enum ("mode", "Mode", "Mode", GST_TYPE_CDDA_BASE_SRC_MODE,
+          GST_CDDA_BASE_SRC_MODE_NORMAL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TRACK,
+      g_param_spec_uint ("track", "Track", "Track", 1, 99, 1,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+#if 0
+  /* Do we really need this toc adjustment stuff as properties? does the user
+   * have a chance to set it in practice, e.g. when using sound-juicer, rb,
+   * totem, whatever? Shouldn't we rather use environment variables
+   * for this? (tpm) */
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TOC_OFFSET,
+      g_param_spec_int ("toc-offset", "Table of contents offset",
+          "Add <n> sectors to the values reported", G_MININT, G_MAXINT, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TOC_BIAS,
+      g_param_spec_boolean ("toc-bias", "Table of contents bias",
+          "Assume that the beginning offset of track 1 as reported in the TOC "
+          "will be addressed as LBA 0.  Necessary for some Toshiba drives to "
+          "get track boundaries", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_cdda_base_src_src_template));
+
+  element_class->set_index = GST_DEBUG_FUNCPTR (gst_cdda_base_src_set_index);
+  element_class->get_index = GST_DEBUG_FUNCPTR (gst_cdda_base_src_get_index);
+
+  basesrc_class->start = GST_DEBUG_FUNCPTR (gst_cdda_base_src_start);
+  basesrc_class->stop = GST_DEBUG_FUNCPTR (gst_cdda_base_src_stop);
+  basesrc_class->query = GST_DEBUG_FUNCPTR (gst_cdda_base_src_query);
+  basesrc_class->event = GST_DEBUG_FUNCPTR (gst_cdda_base_src_handle_event);
+  basesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_cdda_base_src_do_seek);
+  basesrc_class->is_seekable =
+      GST_DEBUG_FUNCPTR (gst_cdda_base_src_is_seekable);
+
+  pushsrc_class->create = GST_DEBUG_FUNCPTR (gst_cdda_base_src_create);
+}
+
+static void
+gst_cdda_base_src_init (GstCddaBaseSrc * src)
+{
+  gst_pad_set_query_type_function (GST_BASE_SRC_PAD (src),
+      GST_DEBUG_FUNCPTR (gst_cdda_base_src_get_query_types));
+
+  /* we're not live and we operate in time */
+  gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
+  gst_base_src_set_live (GST_BASE_SRC (src), FALSE);
+
+  src->device = NULL;
+  src->mode = GST_CDDA_BASE_SRC_MODE_NORMAL;
+  src->uri_track = -1;
+}
+
+static void
+gst_cdda_base_src_finalize (GObject * obj)
+{
+  GstCddaBaseSrc *cddasrc = GST_CDDA_BASE_SRC (obj);
+
+  g_free (cddasrc->uri);
+  g_free (cddasrc->device);
+
+  if (cddasrc->index)
+    gst_object_unref (cddasrc->index);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_cdda_base_src_set_device (GstCddaBaseSrc * src, const gchar * device)
+{
+  if (src->device)
+    g_free (src->device);
+  src->device = NULL;
+
+  if (!device)
+    return;
+
+  /* skip multiple slashes */
+  while (*device == '/' && *(device + 1) == '/')
+    device++;
+
+#ifdef __sun
+  /*
+   * On Solaris, /dev/rdsk is used for accessing the CD device, but some
+   * applications pass in /dev/dsk, so correct.
+   */
+  if (strncmp (device, "/dev/dsk", 8) == 0) {
+    gchar *rdsk_value;
+    rdsk_value = g_strdup_printf ("/dev/rdsk%s", device + 8);
+    src->device = g_strdup (rdsk_value);
+    g_free (rdsk_value);
+  } else {
+#endif
+    src->device = g_strdup (device);
+#ifdef __sun
+  }
+#endif
+}
+
+static void
+gst_cdda_base_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+
+  switch (prop_id) {
+    case ARG_MODE:{
+      src->mode = g_value_get_enum (value);
+      break;
+    }
+    case ARG_DEVICE:{
+      const gchar *dev = g_value_get_string (value);
+
+      gst_cdda_base_src_set_device (src, dev);
+      break;
+    }
+    case ARG_TRACK:{
+      guint track = g_value_get_uint (value);
+
+      if (src->num_tracks > 0 && track > src->num_tracks) {
+        g_warning ("Invalid track %u", track);
+      } else if (track > 0 && src->tracks != NULL) {
+        src->cur_sector = src->tracks[track - 1].start;
+        src->uri_track = track;
+      } else {
+        src->uri_track = track; /* seek will be done in start() */
+      }
+      break;
+    }
+    case ARG_TOC_OFFSET:{
+      src->toc_offset = g_value_get_int (value);
+      break;
+    }
+    case ARG_TOC_BIAS:{
+      src->toc_bias = g_value_get_boolean (value);
+      break;
+    }
+    default:{
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static void
+gst_cdda_base_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstCddaBaseSrcClass *klass = GST_CDDA_BASE_SRC_GET_CLASS (object);
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+
+  switch (prop_id) {
+    case ARG_MODE:
+      g_value_set_enum (value, src->mode);
+      break;
+    case ARG_DEVICE:{
+      if (src->device == NULL && klass->get_default_device != NULL) {
+        gchar *d = klass->get_default_device (src);
+
+        if (d != NULL) {
+          g_value_set_string (value, DEFAULT_DEVICE);
+          g_free (d);
+          break;
+        }
+      }
+      if (src->device == NULL)
+        g_value_set_string (value, DEFAULT_DEVICE);
+      else
+        g_value_set_string (value, src->device);
+      break;
+    }
+    case ARG_TRACK:{
+      if (src->num_tracks <= 0 && src->uri_track > 0) {
+        g_value_set_uint (value, src->uri_track);
+      } else {
+        g_value_set_uint (value, src->cur_track + 1);
+      }
+      break;
+    }
+    case ARG_TOC_OFFSET:
+      g_value_set_int (value, src->toc_offset);
+      break;
+    case ARG_TOC_BIAS:
+      g_value_set_boolean (value, src->toc_bias);
+      break;
+    default:{
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static gint
+gst_cdda_base_src_get_track_from_sector (GstCddaBaseSrc * src, gint sector)
+{
+  gint i;
+
+  for (i = 0; i < src->num_tracks; ++i) {
+    if (sector >= src->tracks[i].start && sector <= src->tracks[i].end)
+      return i;
+  }
+  return -1;
+}
+
+static const GstQueryType *
+gst_cdda_base_src_get_query_types (GstPad * pad)
+{
+  static const GstQueryType src_query_types[] = {
+    GST_QUERY_DURATION,
+    GST_QUERY_POSITION,
+    GST_QUERY_CONVERT,
+    0
+  };
+
+  return src_query_types;
+}
+
+static gboolean
+gst_cdda_base_src_convert (GstCddaBaseSrc * src, GstFormat src_format,
+    gint64 src_val, GstFormat dest_format, gint64 * dest_val)
+{
+  gboolean started;
+
+  GST_LOG_OBJECT (src, "converting value %" G_GINT64_FORMAT " from %s into %s",
+      src_val, gst_format_get_name (src_format),
+      gst_format_get_name (dest_format));
+
+  if (src_format == dest_format) {
+    *dest_val = src_val;
+    return TRUE;
+  }
+
+  started = GST_OBJECT_FLAG_IS_SET (GST_BASE_SRC (src), GST_BASE_SRC_STARTED);
+
+  if (src_format == track_format) {
+    if (!started)
+      goto not_started;
+    if (src_val < 0 || src_val >= src->num_tracks) {
+      GST_DEBUG_OBJECT (src, "track number %d out of bounds", (gint) src_val);
+      goto wrong_value;
+    }
+    src_format = GST_FORMAT_DEFAULT;
+    src_val = src->tracks[src_val].start * SAMPLES_PER_SECTOR;
+  } else if (src_format == sector_format) {
+    src_format = GST_FORMAT_DEFAULT;
+    src_val = src_val * SAMPLES_PER_SECTOR;
+  }
+
+  if (src_format == dest_format) {
+    *dest_val = src_val;
+    goto done;
+  }
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      /* convert to samples (4 bytes per sample) */
+      src_val = src_val >> 2;
+      /* fallthrough */
+    case GST_FORMAT_DEFAULT:{
+      switch (dest_format) {
+        case GST_FORMAT_BYTES:{
+          if (src_val < 0) {
+            GST_DEBUG_OBJECT (src, "sample source value negative");
+            goto wrong_value;
+          }
+          *dest_val = src_val << 2;     /* 4 bytes per sample */
+          break;
+        }
+        case GST_FORMAT_TIME:{
+          *dest_val = gst_util_uint64_scale_int (src_val, GST_SECOND, 44100);
+          break;
+        }
+        default:{
+          gint64 sector = src_val / SAMPLES_PER_SECTOR;
+
+          if (dest_format == sector_format) {
+            *dest_val = sector;
+          } else if (dest_format == track_format) {
+            if (!started)
+              goto not_started;
+            *dest_val = gst_cdda_base_src_get_track_from_sector (src, sector);
+          } else {
+            goto unknown_format;
+          }
+          break;
+        }
+      }
+      break;
+    }
+    case GST_FORMAT_TIME:{
+      gint64 sample_offset;
+
+      if (src_val == GST_CLOCK_TIME_NONE) {
+        GST_DEBUG_OBJECT (src, "source time value invalid");
+        goto wrong_value;
+      }
+
+      sample_offset = gst_util_uint64_scale_int (src_val, 44100, GST_SECOND);
+      switch (dest_format) {
+        case GST_FORMAT_BYTES:{
+          *dest_val = sample_offset << 2;       /* 4 bytes per sample */
+          break;
+        }
+        case GST_FORMAT_DEFAULT:{
+          *dest_val = sample_offset;
+          break;
+        }
+        default:{
+          gint64 sector = sample_offset / SAMPLES_PER_SECTOR;
+
+          if (dest_format == sector_format) {
+            *dest_val = sector;
+          } else if (dest_format == track_format) {
+            if (!started)
+              goto not_started;
+            *dest_val = gst_cdda_base_src_get_track_from_sector (src, sector);
+          } else {
+            goto unknown_format;
+          }
+          break;
+        }
+      }
+      break;
+    }
+    default:{
+      goto unknown_format;
+    }
+  }
+
+done:
+  {
+    GST_LOG_OBJECT (src, "returning %" G_GINT64_FORMAT, *dest_val);
+    return TRUE;
+  }
+
+unknown_format:
+  {
+    GST_DEBUG_OBJECT (src, "conversion failed: %s", "unsupported format");
+    return FALSE;
+  }
+
+wrong_value:
+  {
+    GST_DEBUG_OBJECT (src, "conversion failed: %s",
+        "source value not within allowed range");
+    return FALSE;
+  }
+
+not_started:
+  {
+    GST_DEBUG_OBJECT (src, "conversion failed: %s",
+        "cannot do this conversion, device not open");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_cdda_base_src_query (GstBaseSrc * basesrc, GstQuery * query)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (basesrc);
+  gboolean started;
+
+  started = GST_OBJECT_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED);
+
+  GST_LOG_OBJECT (src, "handling %s query",
+      gst_query_type_get_name (GST_QUERY_TYPE (query)));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:{
+      GstFormat dest_format;
+      gint64 dest_val;
+      guint sectors;
+
+      gst_query_parse_duration (query, &dest_format, NULL);
+
+      if (!started)
+        return FALSE;
+
+      g_assert (src->tracks != NULL);
+
+      if (dest_format == track_format) {
+        GST_LOG_OBJECT (src, "duration: %d tracks", src->num_tracks);
+        gst_query_set_duration (query, track_format, src->num_tracks);
+        return TRUE;
+      }
+
+      if (src->cur_track < 0 || src->cur_track >= src->num_tracks)
+        return FALSE;
+
+      if (src->mode == GST_CDDA_BASE_SRC_MODE_NORMAL) {
+        sectors = src->tracks[src->cur_track].end -
+            src->tracks[src->cur_track].start + 1;
+      } else {
+        sectors = src->tracks[src->num_tracks - 1].end -
+            src->tracks[0].start + 1;
+      }
+
+      /* ... and convert into final format */
+      if (!gst_cdda_base_src_convert (src, sector_format, sectors,
+              dest_format, &dest_val)) {
+        return FALSE;
+      }
+
+      gst_query_set_duration (query, dest_format, dest_val);
+
+      GST_LOG ("duration: %u sectors, %" G_GINT64_FORMAT " in format %s",
+          sectors, dest_val, gst_format_get_name (dest_format));
+      break;
+    }
+    case GST_QUERY_POSITION:{
+      GstFormat dest_format;
+      gint64 pos_sector;
+      gint64 dest_val;
+
+      gst_query_parse_position (query, &dest_format, NULL);
+
+      if (!started)
+        return FALSE;
+
+      g_assert (src->tracks != NULL);
+
+      if (dest_format == track_format) {
+        GST_LOG_OBJECT (src, "position: track %d", src->cur_track);
+        gst_query_set_position (query, track_format, src->cur_track);
+        return TRUE;
+      }
+
+      if (src->cur_track < 0 || src->cur_track >= src->num_tracks)
+        return FALSE;
+
+      if (src->mode == GST_CDDA_BASE_SRC_MODE_NORMAL) {
+        pos_sector = src->cur_sector - src->tracks[src->cur_track].start;
+      } else {
+        pos_sector = src->cur_sector - src->tracks[0].start;
+      }
+
+      if (!gst_cdda_base_src_convert (src, sector_format, pos_sector,
+              dest_format, &dest_val)) {
+        return FALSE;
+      }
+
+      gst_query_set_position (query, dest_format, dest_val);
+
+      GST_LOG ("position: sector %u, %" G_GINT64_FORMAT " in format %s",
+          (guint) pos_sector, dest_val, gst_format_get_name (dest_format));
+      break;
+    }
+    case GST_QUERY_CONVERT:{
+      GstFormat src_format, dest_format;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_format, &src_val, &dest_format,
+          NULL);
+
+      if (!gst_cdda_base_src_convert (src, src_format, src_val, dest_format,
+              &dest_val)) {
+        return FALSE;
+      }
+
+      gst_query_set_convert (query, src_format, src_val, dest_format, dest_val);
+      break;
+    }
+    default:{
+      GST_DEBUG_OBJECT (src, "unhandled query, chaining up to parent class");
+      return GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
+    }
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_cdda_base_src_is_seekable (GstBaseSrc * basesrc)
+{
+  return TRUE;
+}
+
+static gboolean
+gst_cdda_base_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (basesrc);
+  gint64 seek_sector;
+
+  GST_DEBUG_OBJECT (src, "segment %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
+      GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop));
+
+  if (!gst_cdda_base_src_convert (src, GST_FORMAT_TIME, segment->start,
+          sector_format, &seek_sector)) {
+    GST_WARNING_OBJECT (src, "conversion failed");
+    return FALSE;
+  }
+
+  /* we should only really be called when open */
+  g_assert (src->cur_track >= 0 && src->cur_track < src->num_tracks);
+
+  switch (src->mode) {
+    case GST_CDDA_BASE_SRC_MODE_NORMAL:
+      seek_sector += src->tracks[src->cur_track].start;
+      break;
+    case GST_CDDA_BASE_SRC_MODE_CONTINUOUS:
+      seek_sector += src->tracks[0].start;
+      break;
+    default:
+      g_return_val_if_reached (FALSE);
+  }
+
+  src->cur_sector = (gint) seek_sector;
+
+  GST_DEBUG_OBJECT (src, "seek'd to sector %d", src->cur_sector);
+
+  return TRUE;
+}
+
+static gboolean
+gst_cdda_base_src_handle_track_seek (GstCddaBaseSrc * src, gdouble rate,
+    GstSeekFlags flags, GstSeekType start_type, gint64 start,
+    GstSeekType stop_type, gint64 stop)
+{
+  GstBaseSrc *basesrc = GST_BASE_SRC (src);
+  GstEvent *event;
+
+  if ((flags & GST_SEEK_FLAG_SEGMENT) == GST_SEEK_FLAG_SEGMENT) {
+    gint64 start_time = -1;
+    gint64 stop_time = -1;
+
+    if (src->mode != GST_CDDA_BASE_SRC_MODE_CONTINUOUS) {
+      GST_DEBUG_OBJECT (src, "segment seek in track format is only "
+          "supported in CONTINUOUS mode, not in mode %d", src->mode);
+      return FALSE;
+    }
+
+    switch (start_type) {
+      case GST_SEEK_TYPE_SET:
+        if (!gst_cdda_base_src_convert (src, track_format, start,
+                GST_FORMAT_TIME, &start_time)) {
+          GST_DEBUG_OBJECT (src, "cannot convert track %d to time",
+              (gint) start);
+          return FALSE;
+        }
+        break;
+      case GST_SEEK_TYPE_END:
+        if (!gst_cdda_base_src_convert (src, track_format,
+                src->num_tracks - start - 1, GST_FORMAT_TIME, &start_time)) {
+          GST_DEBUG_OBJECT (src, "cannot convert track %d to time",
+              (gint) start);
+          return FALSE;
+        }
+        start_type = GST_SEEK_TYPE_SET;
+        break;
+      case GST_SEEK_TYPE_NONE:
+        start_time = -1;
+        break;
+      default:
+        g_return_val_if_reached (FALSE);
+    }
+
+    switch (stop_type) {
+      case GST_SEEK_TYPE_SET:
+        if (!gst_cdda_base_src_convert (src, track_format, stop,
+                GST_FORMAT_TIME, &stop_time)) {
+          GST_DEBUG_OBJECT (src, "cannot convert track %d to time",
+              (gint) stop);
+          return FALSE;
+        }
+        break;
+      case GST_SEEK_TYPE_END:
+        if (!gst_cdda_base_src_convert (src, track_format,
+                src->num_tracks - stop - 1, GST_FORMAT_TIME, &stop_time)) {
+          GST_DEBUG_OBJECT (src, "cannot convert track %d to time",
+              (gint) stop);
+          return FALSE;
+        }
+        stop_type = GST_SEEK_TYPE_SET;
+        break;
+      case GST_SEEK_TYPE_NONE:
+        stop_time = -1;
+        break;
+      default:
+        g_return_val_if_reached (FALSE);
+    }
+
+    GST_LOG_OBJECT (src, "seek segment %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
+        GST_TIME_ARGS (start_time), GST_TIME_ARGS (stop_time));
+
+    /* send fake segment seek event in TIME format to
+     * base class, which will hopefully handle the rest */
+
+    event = gst_event_new_seek (rate, GST_FORMAT_TIME, flags, start_type,
+        start_time, stop_type, stop_time);
+
+    return GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+  }
+
+  /* not a segment seek */
+
+  if (start_type == GST_SEEK_TYPE_NONE) {
+    GST_LOG_OBJECT (src, "start seek type is NONE, nothing to do");
+    return TRUE;
+  }
+
+  if (stop_type != GST_SEEK_TYPE_NONE) {
+    GST_WARNING_OBJECT (src, "ignoring stop seek type (expected NONE)");
+  }
+
+  if (start < 0 || start >= src->num_tracks) {
+    GST_DEBUG_OBJECT (src, "invalid track %" G_GINT64_FORMAT, start);
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (src, "seeking to track %" G_GINT64_FORMAT, start + 1);
+
+  src->cur_sector = src->tracks[start].start;
+  GST_DEBUG_OBJECT (src, "starting at sector %d", src->cur_sector);
+
+  if (src->cur_track != start) {
+    src->cur_track = (gint) start;
+    src->uri_track = -1;
+    src->prev_track = -1;
+
+    gst_cdda_base_src_update_duration (src);
+  } else {
+    GST_DEBUG_OBJECT (src, "is current track, just seeking back to start");
+  }
+
+  /* send fake segment seek event in TIME format to
+   * base class (so we get a newsegment etc.) */
+  event = gst_event_new_seek (rate, GST_FORMAT_TIME, flags,
+      GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, -1);
+
+  return GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+}
+
+static gboolean
+gst_cdda_base_src_handle_event (GstBaseSrc * basesrc, GstEvent * event)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (basesrc);
+  gboolean ret = FALSE;
+
+  GST_LOG_OBJECT (src, "handling %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:{
+      GstSeekType start_type, stop_type;
+      GstSeekFlags flags;
+      GstFormat format;
+      gdouble rate;
+      gint64 start, stop;
+
+      if (!GST_OBJECT_FLAG_IS_SET (basesrc, GST_BASE_SRC_STARTED)) {
+        GST_DEBUG_OBJECT (src, "seek failed: device not open");
+        break;
+      }
+
+      gst_event_parse_seek (event, &rate, &format, &flags, &start_type, &start,
+          &stop_type, &stop);
+
+      if (format == sector_format) {
+        GST_DEBUG_OBJECT (src, "seek in sector format not supported");
+        break;
+      }
+
+      if (format == track_format) {
+        ret = gst_cdda_base_src_handle_track_seek (src, rate, flags,
+            start_type, start, stop_type, stop);
+      } else {
+        GST_LOG_OBJECT (src, "let base class handle seek in %s format",
+            gst_format_get_name (format));
+        event = gst_event_ref (event);
+        ret = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+      }
+      break;
+    }
+    default:{
+      GST_LOG_OBJECT (src, "let base class handle event");
+      ret = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+      break;
+    }
+  }
+
+  return ret;
+}
+
+static GstURIType
+gst_cdda_base_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static gchar **
+gst_cdda_base_src_uri_get_protocols (GType type)
+{
+  static gchar *protocols[] = { (char *) "cdda", NULL };
+
+  return protocols;
+}
+
+static const gchar *
+gst_cdda_base_src_uri_get_uri (GstURIHandler * handler)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (handler);
+
+  GST_OBJECT_LOCK (src);
+
+  g_free (src->uri);
+
+  if (GST_OBJECT_FLAG_IS_SET (GST_BASE_SRC (src), GST_BASE_SRC_STARTED)) {
+    src->uri =
+        g_strdup_printf ("cdda://%s#%d", src->device,
+        (src->uri_track > 0) ? src->uri_track : 1);
+  } else {
+    src->uri = g_strdup ("cdda://1");
+  }
+
+  GST_OBJECT_UNLOCK (src);
+
+  return src->uri;
+}
+
+/* Note: gst_element_make_from_uri() might call us with just 'cdda://' as
+ * URI and expects us to return TRUE then (and this might be in any state) */
+
+/* We accept URIs of the format cdda://(device#track)|(track) */
+
+static gboolean
+gst_cdda_base_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (handler);
+  gchar *protocol;
+  const gchar *location;
+  gchar *track_number;
+
+  GST_OBJECT_LOCK (src);
+
+  protocol = gst_uri_get_protocol (uri);
+  if (!protocol || g_ascii_strcasecmp (protocol, "cdda") != 0) {
+    g_free (protocol);
+    goto failed;
+  }
+  g_free (protocol);
+
+  location = uri + 7;
+  track_number = g_strrstr (location, "#");
+  src->uri_track = 0;
+  /* FIXME 0.11: ignore URI fragments that look like device paths for
+   * the benefit of rhythmbox and possibly other applications.
+   */
+  if (track_number && track_number[1] != '/') {
+    gchar *device, *nuri = g_strdup (uri);
+
+    track_number = nuri + (track_number - uri);
+    *track_number = '\0';
+    device = gst_uri_get_location (nuri);
+    gst_cdda_base_src_set_device (src, device);
+    g_free (device);
+    src->uri_track = strtol (track_number + 1, NULL, 10);
+    g_free (nuri);
+  } else {
+    if (*location == '\0')
+      src->uri_track = 1;
+    else
+      src->uri_track = strtol (location, NULL, 10);
+  }
+
+  if (src->uri_track < 1)
+    goto failed;
+
+  if (src->num_tracks > 0
+      && src->tracks != NULL && src->uri_track > src->num_tracks)
+    goto failed;
+
+  if (src->uri_track > 0 && src->tracks != NULL) {
+    GST_OBJECT_UNLOCK (src);
+
+    gst_pad_send_event (GST_BASE_SRC_PAD (src),
+        gst_event_new_seek (1.0, track_format, GST_SEEK_FLAG_FLUSH,
+            GST_SEEK_TYPE_SET, src->uri_track - 1, GST_SEEK_TYPE_NONE, -1));
+  } else {
+    /* seek will be done in start() */
+    GST_OBJECT_UNLOCK (src);
+  }
+
+  GST_LOG_OBJECT (handler, "successfully handled uri '%s'", uri);
+
+  return TRUE;
+
+failed:
+  {
+    GST_OBJECT_UNLOCK (src);
+    GST_DEBUG_OBJECT (src, "cannot handle URI '%s'", uri);
+    return FALSE;
+  }
+}
+
+static void
+gst_cdda_base_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_cdda_base_src_uri_get_type;
+  iface->get_uri = gst_cdda_base_src_uri_get_uri;
+  iface->set_uri = gst_cdda_base_src_uri_set_uri;
+  iface->get_protocols = gst_cdda_base_src_uri_get_protocols;
+}
+
+/**
+ * gst_cdda_base_src_add_track:
+ * @src: a #GstCddaBaseSrc
+ * @track: address of #GstCddaBaseSrcTrack to add
+ * 
+ * CDDA sources use this function from their start vfunc to announce the
+ * available data and audio tracks to the base source class. The caller
+ * should allocate @track on the stack, the base source will do a shallow
+ * copy of the structure (and take ownership of the taglist if there is one).
+ *
+ * Returns: FALSE on error, otherwise TRUE.
+ */
+
+gboolean
+gst_cdda_base_src_add_track (GstCddaBaseSrc * src, GstCddaBaseSrcTrack * track)
+{
+  g_return_val_if_fail (GST_IS_CDDA_BASE_SRC (src), FALSE);
+  g_return_val_if_fail (track != NULL, FALSE);
+  g_return_val_if_fail (track->num > 0, FALSE);
+
+  GST_DEBUG_OBJECT (src, "adding track %2u (%2u) [%6u-%6u] [%5s], tags: %"
+      GST_PTR_FORMAT, src->num_tracks + 1, track->num, track->start,
+      track->end, (track->is_audio) ? "AUDIO" : "DATA ", track->tags);
+
+  if (src->num_tracks > 0) {
+    guint end_of_previous_track = src->tracks[src->num_tracks - 1].end;
+
+    if (track->start <= end_of_previous_track) {
+      GST_WARNING ("track %2u overlaps with previous tracks", track->num);
+      return FALSE;
+    }
+  }
+
+  GST_OBJECT_LOCK (src);
+
+  ++src->num_tracks;
+  src->tracks = g_renew (GstCddaBaseSrcTrack, src->tracks, src->num_tracks);
+  src->tracks[src->num_tracks - 1] = *track;
+
+  GST_OBJECT_UNLOCK (src);
+
+  return TRUE;
+}
+
+static void
+gst_cdda_base_src_update_duration (GstCddaBaseSrc * src)
+{
+  GstBaseSrc *basesrc;
+  gint64 dur;
+
+  basesrc = GST_BASE_SRC (src);
+
+  if (!gst_pad_query_duration (GST_BASE_SRC_PAD (src), GST_FORMAT_TIME, &dur)) {
+    dur = GST_CLOCK_TIME_NONE;
+  }
+  basesrc->segment.duration = dur;
+
+  gst_element_post_message (GST_ELEMENT (src),
+      gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_TIME, -1));
+
+  GST_LOG_OBJECT (src, "duration updated to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (dur));
+}
+
+#define CD_MSF_OFFSET 150
+
+/* the cddb hash function */
+static guint
+cddb_sum (gint n)
+{
+  guint ret;
+
+  ret = 0;
+  while (n > 0) {
+    ret += (n % 10);
+    n /= 10;
+  }
+  return ret;
+}
+
+static void
+gst_cddabasesrc_calculate_musicbrainz_discid (GstCddaBaseSrc * src)
+{
+  GString *s;
+  GChecksum *sha;
+  guchar digest[20];
+  gchar *ptr;
+  gchar tmp[9];
+  gulong i;
+  guint leadout_sector;
+  gsize digest_len;
+
+  s = g_string_new (NULL);
+
+  leadout_sector = src->tracks[src->num_tracks - 1].end + 1 + CD_MSF_OFFSET;
+
+  /* generate SHA digest */
+  sha = g_checksum_new (G_CHECKSUM_SHA1);
+  g_snprintf (tmp, sizeof (tmp), "%02X", src->tracks[0].num);
+  g_string_append_printf (s, "%02X", src->tracks[0].num);
+  g_checksum_update (sha, (guchar *) tmp, 2);
+
+  g_snprintf (tmp, sizeof (tmp), "%02X", src->tracks[src->num_tracks - 1].num);
+  g_string_append_printf (s, " %02X", src->tracks[src->num_tracks - 1].num);
+  g_checksum_update (sha, (guchar *) tmp, 2);
+
+  g_snprintf (tmp, sizeof (tmp), "%08X", leadout_sector);
+  g_string_append_printf (s, " %08X", leadout_sector);
+  g_checksum_update (sha, (guchar *) tmp, 8);
+
+  for (i = 0; i < 99; i++) {
+    if (i < src->num_tracks) {
+      guint frame_offset = src->tracks[i].start + CD_MSF_OFFSET;
+
+      g_snprintf (tmp, sizeof (tmp), "%08X", frame_offset);
+      g_string_append_printf (s, " %08X", frame_offset);
+      g_checksum_update (sha, (guchar *) tmp, 8);
+    } else {
+      g_checksum_update (sha, (guchar *) "00000000", 8);
+    }
+  }
+  digest_len = 20;
+  g_checksum_get_digest (sha, (guint8 *) & digest, &digest_len);
+
+  /* re-encode to base64 */
+  ptr = g_base64_encode (digest, digest_len);
+  g_checksum_free (sha);
+  i = strlen (ptr);
+
+  g_assert (i < sizeof (src->mb_discid) + 1);
+  memcpy (src->mb_discid, ptr, i);
+  src->mb_discid[i] = '\0';
+  free (ptr);
+
+  /* Replace '/', '+' and '=' by '_', '.' and '-' as specified on
+   * http://musicbrainz.org/doc/DiscIDCalculation
+   */
+  for (ptr = src->mb_discid; *ptr != '\0'; ptr++) {
+    if (*ptr == '/')
+      *ptr = '_';
+    else if (*ptr == '+')
+      *ptr = '.';
+    else if (*ptr == '=')
+      *ptr = '-';
+  }
+
+  GST_DEBUG_OBJECT (src, "musicbrainz-discid      = %s", src->mb_discid);
+  GST_DEBUG_OBJECT (src, "musicbrainz-discid-full = %s", s->str);
+
+  gst_tag_list_add (src->tags, GST_TAG_MERGE_REPLACE,
+      GST_TAG_CDDA_MUSICBRAINZ_DISCID, src->mb_discid,
+      GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL, s->str, NULL);
+
+  g_string_free (s, TRUE);
+}
+
+static void
+lba_to_msf (guint sector, guint * p_m, guint * p_s, guint * p_f, guint * p_secs)
+{
+  guint m, s, f;
+
+  m = sector / SECTORS_PER_MINUTE;
+  sector = sector % SECTORS_PER_MINUTE;
+  s = sector / SECTORS_PER_SECOND;
+  f = sector % SECTORS_PER_SECOND;
+
+  if (p_m)
+    *p_m = m;
+  if (p_s)
+    *p_s = s;
+  if (p_f)
+    *p_f = f;
+  if (p_secs)
+    *p_secs = s + (m * 60);
+}
+
+static void
+gst_cdda_base_src_calculate_cddb_id (GstCddaBaseSrc * src)
+{
+  GString *s;
+  guint first_sector = 0, last_sector = 0;
+  guint start_secs, end_secs, secs, len_secs;
+  guint total_secs, num_audio_tracks;
+  guint id, t, i;
+
+  id = 0;
+  total_secs = 0;
+  num_audio_tracks = 0;
+
+  /* FIXME: do we use offsets and duration of ALL tracks (data + audio)
+   * for the CDDB ID calculation, or only audio tracks? */
+  for (i = 0; i < src->num_tracks; ++i) {
+    if (1) {                    /* src->tracks[i].is_audio) { */
+      if (num_audio_tracks == 0) {
+        first_sector = src->tracks[i].start + CD_MSF_OFFSET;
+      }
+      last_sector = src->tracks[i].end + CD_MSF_OFFSET + 1;
+      ++num_audio_tracks;
+
+      lba_to_msf (src->tracks[i].start + CD_MSF_OFFSET, NULL, NULL, NULL,
+          &secs);
+
+      len_secs = (src->tracks[i].end - src->tracks[i].start + 1) / 75;
+
+      GST_DEBUG_OBJECT (src, "track %02u: lsn %6u (%02u:%02u), "
+          "length: %u seconds (%02u:%02u)",
+          num_audio_tracks, src->tracks[i].start + CD_MSF_OFFSET,
+          secs / 60, secs % 60, len_secs, len_secs / 60, len_secs % 60);
+
+      id += cddb_sum (secs);
+      total_secs += len_secs;
+    }
+  }
+
+  /* first_sector = src->tracks[0].start + CD_MSF_OFFSET; */
+  lba_to_msf (first_sector, NULL, NULL, NULL, &start_secs);
+
+  /* last_sector = src->tracks[src->num_tracks-1].end + CD_MSF_OFFSET; */
+  lba_to_msf (last_sector, NULL, NULL, NULL, &end_secs);
+
+  GST_DEBUG_OBJECT (src, "first_sector = %u = %u secs (%02u:%02u)",
+      first_sector, start_secs, start_secs / 60, start_secs % 60);
+  GST_DEBUG_OBJECT (src, "last_sector  = %u = %u secs (%02u:%02u)",
+      last_sector, end_secs, end_secs / 60, end_secs % 60);
+
+  t = end_secs - start_secs;
+
+  GST_DEBUG_OBJECT (src, "total length = %u secs (%02u:%02u), added title "
+      "lengths = %u seconds (%02u:%02u)", t, t / 60, t % 60, total_secs,
+      total_secs / 60, total_secs % 60);
+
+  src->discid = ((id % 0xff) << 24 | t << 8 | num_audio_tracks);
+
+  s = g_string_new (NULL);
+  g_string_append_printf (s, "%08x", src->discid);
+
+  gst_tag_list_add (src->tags, GST_TAG_MERGE_REPLACE,
+      GST_TAG_CDDA_CDDB_DISCID, s->str, NULL);
+
+  g_string_append_printf (s, " %u", src->num_tracks);
+  for (i = 0; i < src->num_tracks; ++i) {
+    g_string_append_printf (s, " %u", src->tracks[i].start + CD_MSF_OFFSET);
+  }
+  g_string_append_printf (s, " %u", t);
+
+  gst_tag_list_add (src->tags, GST_TAG_MERGE_REPLACE,
+      GST_TAG_CDDA_CDDB_DISCID_FULL, s->str, NULL);
+
+  GST_DEBUG_OBJECT (src, "cddb discid = %s", s->str);
+
+  g_string_free (s, TRUE);
+}
+
+static void
+gst_cdda_base_src_add_tags (GstCddaBaseSrc * src)
+{
+  gint i;
+
+  /* fill in details for each track */
+  for (i = 0; i < src->num_tracks; ++i) {
+    gint64 duration;
+    guint num_sectors;
+
+    if (src->tracks[i].tags == NULL)
+      src->tracks[i].tags = gst_tag_list_new ();
+
+    num_sectors = src->tracks[i].end - src->tracks[i].start + 1;
+    gst_cdda_base_src_convert (src, sector_format, num_sectors,
+        GST_FORMAT_TIME, &duration);
+
+    gst_tag_list_add (src->tracks[i].tags,
+        GST_TAG_MERGE_REPLACE,
+        GST_TAG_TRACK_NUMBER, i + 1,
+        GST_TAG_TRACK_COUNT, src->num_tracks, GST_TAG_DURATION, duration, NULL);
+  }
+
+  /* now fill in per-album tags and include each track's tags
+   * in the album tags, so that interested parties can retrieve
+   * the relevant details for each track in one go */
+
+  /* /////////////////////////////// FIXME should we rather insert num_tracks
+   * tags by the name of 'track-tags' and have the caller use
+   * gst_tag_list_get_value_index() rather than use tag names incl.
+   * the track number ?? *////////////////////////////////////////
+
+  gst_tag_list_add (src->tags, GST_TAG_MERGE_REPLACE,
+      GST_TAG_TRACK_COUNT, src->num_tracks, NULL);
+#if 0
+  for (i = 0; i < src->num_tracks; ++i) {
+    gst_tag_list_add (src->tags, GST_TAG_MERGE_APPEND,
+        GST_TAG_CDDA_TRACK_TAGS, src->tracks[i].tags, NULL);
+  }
+#endif
+
+  GST_DEBUG ("src->tags = %" GST_PTR_FORMAT, src->tags);
+}
+
+static void
+gst_cdda_base_src_add_index_associations (GstCddaBaseSrc * src)
+{
+  gint i;
+
+  for (i = 0; i < src->num_tracks; i++) {
+    gint64 sector;
+
+    sector = src->tracks[i].start;
+    gst_index_add_association (src->index, src->index_id, GST_ASSOCIATION_FLAG_KEY_UNIT, track_format, i,       /* here we count from 0 */
+        sector_format, sector,
+        GST_FORMAT_TIME,
+        (gint64) (((CD_FRAMESIZE_RAW >> 2) * sector * GST_SECOND) / 44100),
+        GST_FORMAT_BYTES, (gint64) (sector << 2), GST_FORMAT_DEFAULT,
+        (gint64) ((CD_FRAMESIZE_RAW >> 2) * sector), NULL);
+  }
+}
+
+static void
+gst_cdda_base_src_set_index (GstElement * element, GstIndex * index)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (element);
+  GstIndex *old;
+
+  GST_OBJECT_LOCK (element);
+  old = src->index;
+  if (old == index) {
+    GST_OBJECT_UNLOCK (element);
+    return;
+  }
+  if (index)
+    gst_object_ref (index);
+  src->index = index;
+  GST_OBJECT_UNLOCK (element);
+  if (old)
+    gst_object_unref (old);
+
+  if (index) {
+    gst_index_get_writer_id (index, GST_OBJECT (src), &src->index_id);
+    gst_index_add_format (index, src->index_id, track_format);
+    gst_index_add_format (index, src->index_id, sector_format);
+  }
+}
+
+
+static GstIndex *
+gst_cdda_base_src_get_index (GstElement * element)
+{
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (element);
+  GstIndex *index;
+
+  GST_OBJECT_LOCK (element);
+  if ((index = src->index))
+    gst_object_ref (index);
+  GST_OBJECT_UNLOCK (element);
+
+  return index;
+}
+
+static gint
+gst_cdda_base_src_track_sort_func (gconstpointer a, gconstpointer b,
+    gpointer foo)
+{
+  GstCddaBaseSrcTrack *track_a = ((GstCddaBaseSrcTrack *) a);
+  GstCddaBaseSrcTrack *track_b = ((GstCddaBaseSrcTrack *) b);
+
+  /* sort data tracks to the end, and audio tracks by track number */
+  if (track_a->is_audio == track_b->is_audio)
+    return (gint) track_a->num - (gint) track_b->num;
+
+  if (track_a->is_audio) {
+    return -1;
+  } else {
+    return 1;
+  }
+}
+
+static gboolean
+gst_cdda_base_src_start (GstBaseSrc * basesrc)
+{
+  GstCddaBaseSrcClass *klass = GST_CDDA_BASE_SRC_GET_CLASS (basesrc);
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (basesrc);
+  gboolean ret;
+  gchar *device = NULL;
+
+  src->discid = 0;
+  src->mb_discid[0] = '\0';
+
+  g_assert (klass->open != NULL);
+
+  if (src->device != NULL) {
+    device = g_strdup (src->device);
+  } else if (klass->get_default_device != NULL) {
+    device = klass->get_default_device (src);
+  }
+
+  if (device == NULL)
+    device = g_strdup (DEFAULT_DEVICE);
+
+  GST_LOG_OBJECT (basesrc, "opening device %s", device);
+
+  src->tags = gst_tag_list_new ();
+
+  ret = klass->open (src, device);
+  g_free (device);
+  device = NULL;
+
+  if (!ret) {
+    GST_DEBUG_OBJECT (basesrc, "failed to open device");
+    /* subclass (should have) posted an error message with the details */
+    gst_cdda_base_src_stop (basesrc);
+    return FALSE;
+  }
+
+  if (src->num_tracks == 0 || src->tracks == NULL) {
+    GST_DEBUG_OBJECT (src, "no tracks");
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("This CD has no audio tracks")), (NULL));
+    gst_cdda_base_src_stop (basesrc);
+    return FALSE;
+  }
+
+  /* need to calculate disc IDs before we ditch the data tracks */
+  gst_cdda_base_src_calculate_cddb_id (src);
+  gst_cddabasesrc_calculate_musicbrainz_discid (src);
+
+#if 0
+  /* adjust sector offsets if necessary */
+  if (src->toc_bias) {
+    src->toc_offset -= src->tracks[0].start;
+  }
+  for (i = 0; i < src->num_tracks; ++i) {
+    src->tracks[i].start += src->toc_offset;
+    src->tracks[i].end += src->toc_offset;
+  }
+#endif
+
+  /* now that we calculated the various disc IDs,
+   * sort the data tracks to end and ignore them */
+  src->num_all_tracks = src->num_tracks;
+
+  g_qsort_with_data (src->tracks, src->num_tracks,
+      sizeof (GstCddaBaseSrcTrack), gst_cdda_base_src_track_sort_func, NULL);
+
+  while (src->num_tracks > 0 && !src->tracks[src->num_tracks - 1].is_audio)
+    --src->num_tracks;
+
+  if (src->num_tracks == 0) {
+    GST_DEBUG_OBJECT (src, "no audio tracks");
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("This CD has no audio tracks")), (NULL));
+    gst_cdda_base_src_stop (basesrc);
+    return FALSE;
+  }
+
+  gst_cdda_base_src_add_tags (src);
+
+  if (src->index && GST_INDEX_IS_WRITABLE (src->index))
+    gst_cdda_base_src_add_index_associations (src);
+
+  src->cur_track = 0;
+  src->prev_track = -1;
+
+  if (src->uri_track > 0 && src->uri_track <= src->num_tracks) {
+    GST_LOG_OBJECT (src, "seek to track %d", src->uri_track);
+    src->cur_track = src->uri_track - 1;
+    src->uri_track = -1;
+    src->mode = GST_CDDA_BASE_SRC_MODE_NORMAL;
+  }
+
+  src->cur_sector = src->tracks[src->cur_track].start;
+  GST_LOG_OBJECT (src, "starting at sector %d", src->cur_sector);
+
+  gst_cdda_base_src_update_duration (src);
+
+  return TRUE;
+}
+
+static void
+gst_cdda_base_src_clear_tracks (GstCddaBaseSrc * src)
+{
+  if (src->tracks != NULL) {
+    gint i;
+
+    for (i = 0; i < src->num_all_tracks; ++i) {
+      if (src->tracks[i].tags)
+        gst_tag_list_free (src->tracks[i].tags);
+    }
+
+    g_free (src->tracks);
+    src->tracks = NULL;
+  }
+  src->num_tracks = 0;
+  src->num_all_tracks = 0;
+}
+
+static gboolean
+gst_cdda_base_src_stop (GstBaseSrc * basesrc)
+{
+  GstCddaBaseSrcClass *klass = GST_CDDA_BASE_SRC_GET_CLASS (basesrc);
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (basesrc);
+
+  g_assert (klass->close != NULL);
+
+  klass->close (src);
+
+  gst_cdda_base_src_clear_tracks (src);
+
+  if (src->tags) {
+    gst_tag_list_free (src->tags);
+    src->tags = NULL;
+  }
+
+  src->prev_track = -1;
+  src->cur_track = -1;
+
+  return TRUE;
+}
+
+
+static GstFlowReturn
+gst_cdda_base_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
+{
+  GstCddaBaseSrcClass *klass = GST_CDDA_BASE_SRC_GET_CLASS (pushsrc);
+  GstCddaBaseSrc *src = GST_CDDA_BASE_SRC (pushsrc);
+  GstBuffer *buf;
+  gboolean eos;
+
+  GstClockTime position = GST_CLOCK_TIME_NONE;
+  GstClockTime duration = GST_CLOCK_TIME_NONE;
+  gint64 qry_position;
+
+  g_assert (klass->read_sector != NULL);
+
+  switch (src->mode) {
+    case GST_CDDA_BASE_SRC_MODE_NORMAL:
+      eos = (src->cur_sector > src->tracks[src->cur_track].end);
+      break;
+    case GST_CDDA_BASE_SRC_MODE_CONTINUOUS:
+      eos = (src->cur_sector > src->tracks[src->num_tracks - 1].end);
+      src->cur_track = gst_cdda_base_src_get_track_from_sector (src,
+          src->cur_sector);
+      break;
+    default:
+      g_return_val_if_reached (GST_FLOW_ERROR);
+  }
+
+  if (eos) {
+    src->prev_track = -1;
+    GST_DEBUG_OBJECT (src, "EOS at sector %d, cur_track=%d, mode=%d",
+        src->cur_sector, src->cur_track, src->mode);
+    /* base class will send EOS for us */
+    return GST_FLOW_UNEXPECTED;
+  }
+
+  if (src->prev_track != src->cur_track) {
+    GstTagList *tags;
+
+    tags = gst_tag_list_merge (src->tags, src->tracks[src->cur_track].tags,
+        GST_TAG_MERGE_REPLACE);
+    GST_LOG_OBJECT (src, "announcing tags: %" GST_PTR_FORMAT, tags);
+    gst_element_found_tags_for_pad (GST_ELEMENT (src),
+        GST_BASE_SRC_PAD (src), tags);
+    src->prev_track = src->cur_track;
+
+    gst_cdda_base_src_update_duration (src);
+
+    g_object_notify (G_OBJECT (src), "track");
+  }
+
+  GST_LOG_OBJECT (src, "asking for sector %u", src->cur_sector);
+
+  buf = klass->read_sector (src, src->cur_sector);
+
+  if (buf == NULL) {
+    GST_WARNING_OBJECT (src, "failed to read sector %u", src->cur_sector);
+    return GST_FLOW_ERROR;
+  }
+
+  if (gst_pad_query_position (GST_BASE_SRC_PAD (src), GST_FORMAT_TIME,
+          &qry_position)) {
+    gint64 next_ts = 0;
+
+    position = (GstClockTime) qry_position;
+
+    ++src->cur_sector;
+    if (gst_pad_query_position (GST_BASE_SRC_PAD (src), GST_FORMAT_TIME,
+            &next_ts)) {
+      duration = (GstClockTime) (next_ts - qry_position);
+    }
+    --src->cur_sector;
+  }
+
+  /* fallback duration: 4 bytes per sample, 44100 samples per second */
+  if (duration == GST_CLOCK_TIME_NONE) {
+    duration = gst_util_uint64_scale_int (gst_buffer_get_size (buf) >> 2,
+        GST_SECOND, 44100);
+  }
+
+  GST_BUFFER_TIMESTAMP (buf) = position;
+  GST_BUFFER_DURATION (buf) = duration;
+
+  GST_LOG_OBJECT (src, "pushing sector %d with timestamp %" GST_TIME_FORMAT,
+      src->cur_sector, GST_TIME_ARGS (position));
+
+  ++src->cur_sector;
+
+  *buffer = buf;
+
+  return GST_FLOW_OK;
+}
diff --git a/gst-libs/gst/cdda/gstcddabasesrc.h b/gst-libs/gst/cdda/gstcddabasesrc.h
new file mode 100644
index 0000000..b754e43
--- /dev/null
+++ b/gst-libs/gst/cdda/gstcddabasesrc.h
@@ -0,0 +1,168 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2005 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_CDDA_BASE_SRC_H__
+#define __GST_CDDA_BASE_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+/* must include this for backwards-compatibility so the
+ * GST_TAG_CDDA_* defines are included. Remove in 0.11 */
+#include <gst/tag/tag.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_CDDA_BASE_SRC            (gst_cdda_base_src_get_type())
+#define GST_CDDA_BASE_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CDDA_BASE_SRC, GstCddaBaseSrc))
+#define GST_CDDA_BASE_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CDDA_BASE_SRC, GstCddaBaseSrcClass))
+#define GST_IS_CDDA_BASE_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CDDA_BASE_SRC))
+#define GST_IS_CDDA_BASE_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_CDDA_BASE_SRC))
+#define GST_CDDA_BASE_SRC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CDDA_BASE_SRC, GstCddaBaseSrcClass))
+
+typedef struct _GstCddaBaseSrc GstCddaBaseSrc;
+typedef struct _GstCddaBaseSrcClass GstCddaBaseSrcClass;
+typedef struct _GstCddaBaseSrcTrack GstCddaBaseSrcTrack;
+
+/**
+ * GstCddaBaseSrcMode:
+ * @GST_CDDA_BASE_SRC_MODE_NORMAL     : each single track is a stream
+ * @GST_CDDA_BASE_SRC_MODE_CONTINUOUS : the entire disc is a single stream
+ *
+ * Mode in which the CD audio source operates. Influences timestamping,
+ * EOS handling and seeking.
+ */
+typedef enum {
+  GST_CDDA_BASE_SRC_MODE_NORMAL,          /* stream = one track  */
+  GST_CDDA_BASE_SRC_MODE_CONTINUOUS       /* stream = whole disc */
+} GstCddaBaseSrcMode;
+
+#define GST_TYPE_CDDA_BASE_SRC_MODE          (gst_cdda_base_src_mode_get_type ())
+
+/**
+ * GstCddaBaseSrcTrack:
+ * @is_audio: Whether this is an audio track
+ * @num: Track number in TOC (usually starts from 1, but not always)
+ * @start: The first sector of this track (LBA)
+ * @end: The last sector of this track (LBA)
+ * @tags: Track-specific tags (e.g. from cd-text information), or NULL
+ *
+ * CD track abstraction to communicate TOC entries to the base class.
+ */
+struct _GstCddaBaseSrcTrack {
+  gboolean     is_audio;      /* TRUE if this is an audio track             */
+  guint        num;           /* real track number (usually starts from 1)  */
+  guint        start;         /* first sector of track (LBA, not LSN!)      */
+  guint        end;           /* last sector of track  (LBA, not LSN!)      */
+  GstTagList  *tags;          /* NULL or tags for track (e.g. from cd-text) */
+
+  /*< private >*/
+  guint        _gst_reserved1[GST_PADDING/2];
+  gpointer     _gst_reserved2[GST_PADDING/2];
+};
+
+struct _GstCddaBaseSrc {
+  GstPushSrc            pushsrc;
+
+  /*< protected >*/ /* for use by sub-classes only */
+  GstTagList           *tags;            /* tags that apply to all tracks   */
+
+  /*< private >*/
+  GstCddaBaseSrcMode    mode;
+
+  gchar                *device;
+
+  guint                 num_tracks;
+  guint                 num_all_tracks;
+  GstCddaBaseSrcTrack  *tracks;
+
+  gint                  cur_track;       /* current track (starting from 0) */
+  gint                  prev_track;      /* current track last time         */
+  gint                  cur_sector;      /* current sector                  */
+  gint                  seek_sector;     /* -1 or sector to seek to         */
+
+  gint                  uri_track;
+  gchar                *uri;
+
+  guint32               discid;          /* cddb disc id (for unit test)    */
+  gchar                 mb_discid[32];   /* musicbrainz discid              */
+
+  GstIndex             *index;
+  gint                  index_id;
+
+  gint                  toc_offset;
+  gboolean              toc_bias;
+
+  /*< private >*/
+  guint                 _gst_reserved1[GST_PADDING/2];
+  gpointer              _gst_reserved2[GST_PADDING/2];
+};
+
+/**
+ * GstCddaBaseSrcClass:
+ * @pushsrc_class: the parent class
+ * @open: opening the device
+ * @close: closing the device
+ * @read_sector: reading a sector
+ * @get_default_device: getting the default device
+ * @probe_devices: probing possible devices
+ *
+ * Cdda source base class.
+ */
+struct _GstCddaBaseSrcClass {
+  GstPushSrcClass pushsrc_class;
+
+  /* open/close the CD device */
+  gboolean    (*open)               (GstCddaBaseSrc *src, const gchar *device);
+  void        (*close)              (GstCddaBaseSrc *src);
+
+  /* read one sector (LBA) */
+  GstBuffer * (*read_sector)        (GstCddaBaseSrc *src, gint sector);
+
+  /* return default device or NULL (optional) */
+  gchar *     (*get_default_device) (GstCddaBaseSrc *src);
+
+  /* return NULL-terminated string array of CD devices, or NULL (optional) */
+  gchar **    (*probe_devices)      (GstCddaBaseSrc *src);
+
+  /*< private >*/
+  gpointer       _gst_reserved[GST_PADDING];
+};
+
+GType    gst_cdda_base_src_get_type (void);
+GType    gst_cdda_base_src_mode_get_type (void);
+
+gboolean gst_cdda_base_src_add_track (GstCddaBaseSrc      * src,
+                                      GstCddaBaseSrcTrack * track);
+
+#if 0
+/*
+ * GST_TAG_CDDA_TRACK_TAGS:
+ *
+ * Tag details for all available tracks
+ * FiXME: find out which type we want for this!
+ */
+#define GST_TAG_CDDA_TRACK_TAGS               "track-tags"
+#endif
+
+G_END_DECLS
+
+#endif /* __GST_CDDA_BASE_SRC_H__ */
+
diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am
new file mode 100644
index 0000000..27cdaec
--- /dev/null
+++ b/gst-libs/gst/fft/Makefile.am
@@ -0,0 +1,104 @@
+lib_LTLIBRARIES = libgstfft-@GST_MAJORMINOR@.la
+
+libgstfft_@GST_MAJORMINOR@_includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/fft
+
+libgstfft_@GST_MAJORMINOR@_include_HEADERS = \
+	gstfft.h \
+	gstffts16.h \
+	gstffts32.h \
+	gstfftf32.h \
+	gstfftf64.h
+
+noinst_HEADERS = \
+	kiss_fft_s16.h \
+	kiss_fft_s32.h \
+	kiss_fft_f32.h \
+	kiss_fft_f64.h \
+	kiss_fftr_s16.h \
+	kiss_fftr_s32.h \
+	kiss_fftr_f32.h \
+	kiss_fftr_f64.h \
+	_kiss_fft_guts_s16.h \
+	_kiss_fft_guts_s32.h \
+	_kiss_fft_guts_f32.h \
+	_kiss_fft_guts_f64.h
+
+libgstfft_@GST_MAJORMINOR@_la_SOURCES = \
+	gstfft.c \
+	gstffts16.c \
+	gstffts32.c \
+	gstfftf32.c \
+	gstfftf64.c \
+	kiss_fft_s16.c \
+	kiss_fft_s32.c \
+	kiss_fft_f32.c \
+	kiss_fft_f64.c \
+	kiss_fftr_s16.c \
+	kiss_fftr_s32.c \
+	kiss_fftr_f32.c \
+	kiss_fftr_f64.c
+
+libgstfft_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(LIBM)
+libgstfft_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS)
+libgstfft_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+EXTRA_DIST = kiss_version
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstFft-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstfft_@GST_MAJORMINOR@_include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstfft_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/fft/%',$(libgstfft_@GST_MAJORMINOR@_include_HEADERS))
+
+GstFft-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstFft \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstfft-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-fft-@GST_MAJORMINOR@ \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstfft_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstfft_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstfft_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/fft \
+	 -:HEADERS $(libgstfftinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/fft/Makefile.in b/gst-libs/gst/fft/Makefile.in
new file mode 100644
index 0000000..05673ec
--- /dev/null
+++ b/gst-libs/gst/fft/Makefile.in
@@ -0,0 +1,1039 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/fft
+DIST_COMMON = $(libgstfft_@GST_MAJORMINOR@_include_HEADERS) \
+	$(noinst_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstfft_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstfft_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstfft_@GST_MAJORMINOR@_la-gstfft.lo \
+	libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo \
+	libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo \
+	libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo
+libgstfft_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstfft_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstfft_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstfft_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstfft_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstfft_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstfft_@GST_MAJORMINOR@_include_HEADERS) \
+	$(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstfft-@GST_MAJORMINOR@.la
+libgstfft_@GST_MAJORMINOR@_includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/fft
+libgstfft_@GST_MAJORMINOR@_include_HEADERS = \
+	gstfft.h \
+	gstffts16.h \
+	gstffts32.h \
+	gstfftf32.h \
+	gstfftf64.h
+
+noinst_HEADERS = \
+	kiss_fft_s16.h \
+	kiss_fft_s32.h \
+	kiss_fft_f32.h \
+	kiss_fft_f64.h \
+	kiss_fftr_s16.h \
+	kiss_fftr_s32.h \
+	kiss_fftr_f32.h \
+	kiss_fftr_f64.h \
+	_kiss_fft_guts_s16.h \
+	_kiss_fft_guts_s32.h \
+	_kiss_fft_guts_f32.h \
+	_kiss_fft_guts_f64.h
+
+libgstfft_@GST_MAJORMINOR@_la_SOURCES = \
+	gstfft.c \
+	gstffts16.c \
+	gstffts32.c \
+	gstfftf32.c \
+	gstfftf64.c \
+	kiss_fft_s16.c \
+	kiss_fft_s32.c \
+	kiss_fft_f32.c \
+	kiss_fft_f64.c \
+	kiss_fftr_s16.c \
+	kiss_fftr_s32.c \
+	kiss_fftr_f32.c \
+	kiss_fftr_f64.c
+
+libgstfft_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(LIBM)
+libgstfft_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS)
+libgstfft_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+EXTRA_DIST = kiss_version
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstFft-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstfft_@GST_MAJORMINOR@_include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstfft_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/fft/%',$(libgstfft_@GST_MAJORMINOR@_include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstfft-@GST_MAJORMINOR@.la: $(libgstfft_@GST_MAJORMINOR@_la_OBJECTS) $(libgstfft_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstfft_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstfft_@GST_MAJORMINOR@_la_OBJECTS) $(libgstfft_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfft.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstfft_@GST_MAJORMINOR@_la-gstfft.lo: gstfft.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-gstfft.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfft.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-gstfft.lo `test -f 'gstfft.c' || echo '$(srcdir)/'`gstfft.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfft.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfft.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstfft.c' object='libgstfft_@GST_MAJORMINOR@_la-gstfft.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-gstfft.lo `test -f 'gstfft.c' || echo '$(srcdir)/'`gstfft.c
+
+libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo: gstffts16.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts16.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo `test -f 'gstffts16.c' || echo '$(srcdir)/'`gstffts16.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts16.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts16.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstffts16.c' object='libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-gstffts16.lo `test -f 'gstffts16.c' || echo '$(srcdir)/'`gstffts16.c
+
+libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo: gstffts32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo `test -f 'gstffts32.c' || echo '$(srcdir)/'`gstffts32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstffts32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstffts32.c' object='libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-gstffts32.lo `test -f 'gstffts32.c' || echo '$(srcdir)/'`gstffts32.c
+
+libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo: gstfftf32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo `test -f 'gstfftf32.c' || echo '$(srcdir)/'`gstfftf32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstfftf32.c' object='libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-gstfftf32.lo `test -f 'gstfftf32.c' || echo '$(srcdir)/'`gstfftf32.c
+
+libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo: gstfftf64.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf64.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo `test -f 'gstfftf64.c' || echo '$(srcdir)/'`gstfftf64.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf64.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-gstfftf64.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstfftf64.c' object='libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-gstfftf64.lo `test -f 'gstfftf64.c' || echo '$(srcdir)/'`gstfftf64.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo: kiss_fft_s16.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo `test -f 'kiss_fft_s16.c' || echo '$(srcdir)/'`kiss_fft_s16.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fft_s16.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s16.lo `test -f 'kiss_fft_s16.c' || echo '$(srcdir)/'`kiss_fft_s16.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo: kiss_fft_s32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo `test -f 'kiss_fft_s32.c' || echo '$(srcdir)/'`kiss_fft_s32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fft_s32.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_s32.lo `test -f 'kiss_fft_s32.c' || echo '$(srcdir)/'`kiss_fft_s32.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo: kiss_fft_f32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo `test -f 'kiss_fft_f32.c' || echo '$(srcdir)/'`kiss_fft_f32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fft_f32.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f32.lo `test -f 'kiss_fft_f32.c' || echo '$(srcdir)/'`kiss_fft_f32.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo: kiss_fft_f64.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo `test -f 'kiss_fft_f64.c' || echo '$(srcdir)/'`kiss_fft_f64.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fft_f64.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fft_f64.lo `test -f 'kiss_fft_f64.c' || echo '$(srcdir)/'`kiss_fft_f64.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo: kiss_fftr_s16.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo `test -f 'kiss_fftr_s16.c' || echo '$(srcdir)/'`kiss_fftr_s16.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fftr_s16.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s16.lo `test -f 'kiss_fftr_s16.c' || echo '$(srcdir)/'`kiss_fftr_s16.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo: kiss_fftr_s32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo `test -f 'kiss_fftr_s32.c' || echo '$(srcdir)/'`kiss_fftr_s32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fftr_s32.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_s32.lo `test -f 'kiss_fftr_s32.c' || echo '$(srcdir)/'`kiss_fftr_s32.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo: kiss_fftr_f32.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo `test -f 'kiss_fftr_f32.c' || echo '$(srcdir)/'`kiss_fftr_f32.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fftr_f32.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f32.lo `test -f 'kiss_fftr_f32.c' || echo '$(srcdir)/'`kiss_fftr_f32.c
+
+libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo: kiss_fftr_f64.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo -MD -MP -MF $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.Tpo -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo `test -f 'kiss_fftr_f64.c' || echo '$(srcdir)/'`kiss_fftr_f64.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.Tpo $(DEPDIR)/libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kiss_fftr_f64.c' object='libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstfft_@GST_MAJORMINOR@_la-kiss_fftr_f64.lo `test -f 'kiss_fftr_f64.c' || echo '$(srcdir)/'`kiss_fftr_f64.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstfft_@GST_MAJORMINOR@_includeHEADERS: $(libgstfft_@GST_MAJORMINOR@_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstfft_@GST_MAJORMINOR@_includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)"
+	@list='$(libgstfft_@GST_MAJORMINOR@_include_HEADERS)'; test -n "$(libgstfft_@GST_MAJORMINOR@_includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)" || exit $$?; \
+	done
+
+uninstall-libgstfft_@GST_MAJORMINOR@_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstfft_@GST_MAJORMINOR@_include_HEADERS)'; test -n "$(libgstfft_@GST_MAJORMINOR@_includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstfft_@GST_MAJORMINOR@_includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstfft_@GST_MAJORMINOR@_includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstfft_@GST_MAJORMINOR@_includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstfft_@GST_MAJORMINOR@_includeHEADERS install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstfft_@GST_MAJORMINOR@_includeHEADERS \
+	uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstFft-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstFft \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstfft-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-fft-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstfft_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstfft_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstfft_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstfft_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/fft \
+	 -:HEADERS $(libgstfftinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/fft/_kiss_fft_guts_f32.h b/gst-libs/gst/fft/_kiss_fft_guts_f32.h
new file mode 100644
index 0000000..78d2e2e
--- /dev/null
+++ b/gst-libs/gst/fft/_kiss_fft_guts_f32.h
@@ -0,0 +1,112 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* kiss_fft.h
+   defines kiss_fft_f32_scalar as either short or a float type
+   and defines
+   typedef struct { kiss_fft_f32_scalar r; kiss_fft_f32_scalar i; }kiss_fft_f32_cpx; */
+#include "kiss_fft_f32.h"
+#include <limits.h>
+
+/* The 2*sizeof(size_t) alignment here is borrowed from
+ * GNU libc, so it should be good most everywhere.
+ * It is more conservative than is needed on some 64-bit
+ * platforms, but ia64 does require a 16-byte alignment.
+ * The SIMD extensions for x86 and ppc32 would want a
+ * larger alignment than this, but we don't need to
+ * do better than malloc.
+ *
+ * Borrowed from GLib's gobject/gtype.c
+ */
+#define STRUCT_ALIGNMENT (2 * sizeof (size_t))
+#define ALIGN_STRUCT(offset) \
+      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
+
+#define MAXFACTORS 32
+/* e.g. an fft of length 128 has 4 factors 
+ as far as kissfft is concerned
+ 4*4*4*2
+ */
+
+struct kiss_fft_f32_state{
+    int nfft;
+    int inverse;
+    int factors[2*MAXFACTORS];
+    kiss_fft_f32_cpx twiddles[1];
+};
+
+/*
+  Explanation of macros dealing with complex math:
+
+   C_MUL(m,a,b)         : m = a*b
+   C_FIXDIV( c , div )  : if a fixed point impl., c /= div. noop otherwise
+   C_SUB( res, a,b)     : res = a - b
+   C_SUBFROM( res , a)  : res -= a
+   C_ADDTO( res , a)    : res += a
+ * */
+
+#define S_MUL(a,b) ( (a)*(b) )
+#define C_MUL(m,a,b) \
+    do{ (m).r = (a).r*(b).r - (a).i*(b).i;\
+        (m).i = (a).r*(b).i + (a).i*(b).r; }while(0)
+#define C_FIXDIV(c,div) /* NOOP */
+#define C_MULBYSCALAR( c, s ) \
+    do{ (c).r *= (s);\
+        (c).i *= (s); }while(0)
+
+#ifndef CHECK_OVERFLOW_OP
+#  define CHECK_OVERFLOW_OP(a,op,b) /* noop */
+#endif
+
+#define  C_ADD( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,+,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,+,(b).i)\
+	    (res).r=(a).r+(b).r;  (res).i=(a).i+(b).i; \
+    }while(0)
+#define  C_SUB( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,-,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,-,(b).i)\
+	    (res).r=(a).r-(b).r;  (res).i=(a).i-(b).i; \
+    }while(0)
+#define C_ADDTO( res , a)\
+    do { \
+	    CHECK_OVERFLOW_OP((res).r,+,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,+,(a).i)\
+	    (res).r += (a).r;  (res).i += (a).i;\
+    }while(0)
+
+#define C_SUBFROM( res , a)\
+    do {\
+	    CHECK_OVERFLOW_OP((res).r,-,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,-,(a).i)\
+	    (res).r -= (a).r;  (res).i -= (a).i; \
+    }while(0)
+
+
+#define KISS_FFT_F32_COS(phase) (kiss_fft_f32_scalar) cos(phase)
+#define KISS_FFT_F32_SIN(phase) (kiss_fft_f32_scalar) sin(phase)
+#define HALF_OF(x) ((x)*.5)
+
+#define  kf_cexp(x,phase) \
+	do{ \
+		(x)->r = KISS_FFT_F32_COS(phase);\
+		(x)->i = KISS_FFT_F32_SIN(phase);\
+	}while(0)
+
+
+/* a debugging function */
+#define pcpx(c)\
+    fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
diff --git a/gst-libs/gst/fft/_kiss_fft_guts_f64.h b/gst-libs/gst/fft/_kiss_fft_guts_f64.h
new file mode 100644
index 0000000..4202716
--- /dev/null
+++ b/gst-libs/gst/fft/_kiss_fft_guts_f64.h
@@ -0,0 +1,112 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* kiss_fft.h
+   defines kiss_fft_f64_scalar as either short or a float type
+   and defines
+   typedef struct { kiss_fft_f64_scalar r; kiss_fft_f64_scalar i; }kiss_fft_f64_cpx; */
+#include "kiss_fft_f64.h"
+#include <limits.h>
+
+/* The 2*sizeof(size_t) alignment here is borrowed from
+ * GNU libc, so it should be good most everywhere.
+ * It is more conservative than is needed on some 64-bit
+ * platforms, but ia64 does require a 16-byte alignment.
+ * The SIMD extensions for x86 and ppc32 would want a
+ * larger alignment than this, but we don't need to
+ * do better than malloc.
+ *
+ * Borrowed from GLib's gobject/gtype.c
+ */
+#define STRUCT_ALIGNMENT (2 * sizeof (size_t))
+#define ALIGN_STRUCT(offset) \
+      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
+
+#define MAXFACTORS 32
+/* e.g. an fft of length 128 has 4 factors 
+ as far as kissfft is concerned
+ 4*4*4*2
+ */
+
+struct kiss_fft_f64_state{
+    int nfft;
+    int inverse;
+    int factors[2*MAXFACTORS];
+    kiss_fft_f64_cpx twiddles[1];
+};
+
+/*
+  Explanation of macros dealing with complex math:
+
+   C_MUL(m,a,b)         : m = a*b
+   C_FIXDIV( c , div )  : if a fixed point impl., c /= div. noop otherwise
+   C_SUB( res, a,b)     : res = a - b
+   C_SUBFROM( res , a)  : res -= a
+   C_ADDTO( res , a)    : res += a
+ * */
+
+#define S_MUL(a,b) ( (a)*(b) )
+#define C_MUL(m,a,b) \
+    do{ (m).r = (a).r*(b).r - (a).i*(b).i;\
+        (m).i = (a).r*(b).i + (a).i*(b).r; }while(0)
+#define C_FIXDIV(c,div) /* NOOP */
+#define C_MULBYSCALAR( c, s ) \
+    do{ (c).r *= (s);\
+        (c).i *= (s); }while(0)
+
+#ifndef CHECK_OVERFLOW_OP
+#  define CHECK_OVERFLOW_OP(a,op,b) /* noop */
+#endif
+
+#define  C_ADD( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,+,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,+,(b).i)\
+	    (res).r=(a).r+(b).r;  (res).i=(a).i+(b).i; \
+    }while(0)
+#define  C_SUB( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,-,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,-,(b).i)\
+	    (res).r=(a).r-(b).r;  (res).i=(a).i-(b).i; \
+    }while(0)
+#define C_ADDTO( res , a)\
+    do { \
+	    CHECK_OVERFLOW_OP((res).r,+,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,+,(a).i)\
+	    (res).r += (a).r;  (res).i += (a).i;\
+    }while(0)
+
+#define C_SUBFROM( res , a)\
+    do {\
+	    CHECK_OVERFLOW_OP((res).r,-,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,-,(a).i)\
+	    (res).r -= (a).r;  (res).i -= (a).i; \
+    }while(0)
+
+
+#define KISS_FFT_F64_COS(phase) (kiss_fft_f64_scalar) cos(phase)
+#define KISS_FFT_F64_SIN(phase) (kiss_fft_f64_scalar) sin(phase)
+#define HALF_OF(x) ((x)*.5)
+
+#define  kf_cexp(x,phase) \
+	do{ \
+		(x)->r = KISS_FFT_F64_COS(phase);\
+		(x)->i = KISS_FFT_F64_SIN(phase);\
+	}while(0)
+
+
+/* a debugging function */
+#define pcpx(c)\
+    fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
diff --git a/gst-libs/gst/fft/_kiss_fft_guts_s16.h b/gst-libs/gst/fft/_kiss_fft_guts_s16.h
new file mode 100644
index 0000000..2d8256e
--- /dev/null
+++ b/gst-libs/gst/fft/_kiss_fft_guts_s16.h
@@ -0,0 +1,135 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* kiss_fft.h
+   defines kiss_fft_s16_scalar as either short or a float type
+   and defines
+   typedef struct { kiss_fft_s16_scalar r; kiss_fft_s16_scalar i; }kiss_fft_s16_cpx; */
+#include "kiss_fft_s16.h"
+#include <limits.h>
+
+/* The 2*sizeof(size_t) alignment here is borrowed from
+ * GNU libc, so it should be good most everywhere.
+ * It is more conservative than is needed on some 64-bit
+ * platforms, but ia64 does require a 16-byte alignment.
+ * The SIMD extensions for x86 and ppc32 would want a
+ * larger alignment than this, but we don't need to
+ * do better than malloc.
+ *
+ * Borrowed from GLib's gobject/gtype.c
+ */
+#define STRUCT_ALIGNMENT (2 * sizeof (size_t))
+#define ALIGN_STRUCT(offset) \
+      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
+
+#define MAXFACTORS 32
+/* e.g. an fft of length 128 has 4 factors 
+ as far as kissfft is concerned
+ 4*4*4*2
+ */
+
+struct kiss_fft_s16_state{
+    int nfft;
+    int inverse;
+    int factors[2*MAXFACTORS];
+    kiss_fft_s16_cpx twiddles[1];
+};
+
+/*
+  Explanation of macros dealing with complex math:
+
+   C_MUL(m,a,b)         : m = a*b
+   C_FIXDIV( c , div )  : if a fixed point impl., c /= div. noop otherwise
+   C_SUB( res, a,b)     : res = a - b
+   C_SUBFROM( res , a)  : res -= a
+   C_ADDTO( res , a)    : res += a
+ * */
+#define FRACBITS 15
+#define SAMPPROD int32_t 
+#define SAMP_MAX 32767
+
+#define SAMP_MIN -SAMP_MAX
+
+#if defined(CHECK_OVERFLOW)
+#  define CHECK_OVERFLOW_OP(a,op,b)  \
+	if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
+		fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) );  }
+#endif
+
+
+#   define smul(a,b) ( (SAMPPROD)(a)*(b) )
+#   define sround( x )  (kiss_fft_s16_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
+
+#   define S_MUL(a,b) sround( smul(a,b) )
+
+#   define C_MUL(m,a,b) \
+      do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \
+          (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0)
+
+#   define DIVSCALAR(x,k) \
+	(x) = sround( smul(  x, SAMP_MAX/k ) )
+
+#   define C_FIXDIV(c,div) \
+	do {    DIVSCALAR( (c).r , div);  \
+		DIVSCALAR( (c).i  , div); }while (0)
+
+#   define C_MULBYSCALAR( c, s ) \
+    do{ (c).r =  sround( smul( (c).r , s ) ) ;\
+        (c).i =  sround( smul( (c).i , s ) ) ; }while(0)
+
+#ifndef CHECK_OVERFLOW_OP
+#  define CHECK_OVERFLOW_OP(a,op,b) /* noop */
+#endif
+
+#define  C_ADD( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,+,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,+,(b).i)\
+	    (res).r=(a).r+(b).r;  (res).i=(a).i+(b).i; \
+    }while(0)
+#define  C_SUB( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,-,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,-,(b).i)\
+	    (res).r=(a).r-(b).r;  (res).i=(a).i-(b).i; \
+    }while(0)
+#define C_ADDTO( res , a)\
+    do { \
+	    CHECK_OVERFLOW_OP((res).r,+,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,+,(a).i)\
+	    (res).r += (a).r;  (res).i += (a).i;\
+    }while(0)
+
+#define C_SUBFROM( res , a)\
+    do {\
+	    CHECK_OVERFLOW_OP((res).r,-,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,-,(a).i)\
+	    (res).r -= (a).r;  (res).i -= (a).i; \
+    }while(0)
+
+
+#  define KISS_FFT_S16_COS(phase)  floor(.5+SAMP_MAX * cos (phase))
+#  define KISS_FFT_S16_SIN(phase)  floor(.5+SAMP_MAX * sin (phase))
+#  define HALF_OF(x) ((x)>>1)
+
+#define  kf_cexp(x,phase) \
+	do{ \
+		(x)->r = KISS_FFT_S16_COS(phase);\
+		(x)->i = KISS_FFT_S16_SIN(phase);\
+	}while(0)
+
+
+/* a debugging function */
+#define pcpx(c)\
+    fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
diff --git a/gst-libs/gst/fft/_kiss_fft_guts_s32.h b/gst-libs/gst/fft/_kiss_fft_guts_s32.h
new file mode 100644
index 0000000..f0ec9c0
--- /dev/null
+++ b/gst-libs/gst/fft/_kiss_fft_guts_s32.h
@@ -0,0 +1,136 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* kiss_fft.h
+   defines kiss_fft_s32_scalar as either short or a float type
+   and defines
+   typedef struct { kiss_fft_s32_scalar r; kiss_fft_s32_scalar i; }kiss_fft_s32_cpx; */
+#include "kiss_fft_s32.h"
+#include <limits.h>
+
+/* The 2*sizeof(size_t) alignment here is borrowed from
+ * GNU libc, so it should be good most everywhere.
+ * It is more conservative than is needed on some 64-bit
+ * platforms, but ia64 does require a 16-byte alignment.
+ * The SIMD extensions for x86 and ppc32 would want a
+ * larger alignment than this, but we don't need to
+ * do better than malloc.
+ *
+ * Borrowed from GLib's gobject/gtype.c
+ */
+#define STRUCT_ALIGNMENT (2 * sizeof (size_t))
+#define ALIGN_STRUCT(offset) \
+      ((offset + (STRUCT_ALIGNMENT - 1)) & -STRUCT_ALIGNMENT)
+
+#define MAXFACTORS 32
+/* e.g. an fft of length 128 has 4 factors 
+ as far as kissfft is concerned
+ 4*4*4*2
+ */
+
+struct kiss_fft_s32_state{
+    int nfft;
+    int inverse;
+    int factors[2*MAXFACTORS];
+    kiss_fft_s32_cpx twiddles[1];
+};
+
+/*
+  Explanation of macros dealing with complex math:
+
+   C_MUL(m,a,b)         : m = a*b
+   C_FIXDIV( c , div )  : if a fixed point impl., c /= div. noop otherwise
+   C_SUB( res, a,b)     : res = a - b
+   C_SUBFROM( res , a)  : res -= a
+   C_ADDTO( res , a)    : res += a
+ * */
+
+#define FRACBITS 31
+#define SAMPPROD int64_t
+#define SAMP_MAX 2147483647
+
+#define SAMP_MIN -SAMP_MAX
+
+#if defined(CHECK_OVERFLOW)
+#  define CHECK_OVERFLOW_OP(a,op,b)  \
+	if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
+		fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) );  }
+#endif
+
+
+#   define smul(a,b) ( (SAMPPROD)(a)*(b) )
+#   define sround( x )  (kiss_fft_s32_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
+
+#   define S_MUL(a,b) sround( smul(a,b) )
+
+#   define C_MUL(m,a,b) \
+      do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \
+          (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0)
+
+#   define DIVSCALAR(x,k) \
+	(x) = sround( smul(  x, SAMP_MAX/k ) )
+
+#   define C_FIXDIV(c,div) \
+	do {    DIVSCALAR( (c).r , div);  \
+		DIVSCALAR( (c).i  , div); }while (0)
+
+#   define C_MULBYSCALAR( c, s ) \
+    do{ (c).r =  sround( smul( (c).r , s ) ) ;\
+        (c).i =  sround( smul( (c).i , s ) ) ; }while(0)
+
+#ifndef CHECK_OVERFLOW_OP
+#  define CHECK_OVERFLOW_OP(a,op,b) /* noop */
+#endif
+
+#define  C_ADD( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,+,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,+,(b).i)\
+	    (res).r=(a).r+(b).r;  (res).i=(a).i+(b).i; \
+    }while(0)
+#define  C_SUB( res, a,b)\
+    do { \
+	    CHECK_OVERFLOW_OP((a).r,-,(b).r)\
+	    CHECK_OVERFLOW_OP((a).i,-,(b).i)\
+	    (res).r=(a).r-(b).r;  (res).i=(a).i-(b).i; \
+    }while(0)
+#define C_ADDTO( res , a)\
+    do { \
+	    CHECK_OVERFLOW_OP((res).r,+,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,+,(a).i)\
+	    (res).r += (a).r;  (res).i += (a).i;\
+    }while(0)
+
+#define C_SUBFROM( res , a)\
+    do {\
+	    CHECK_OVERFLOW_OP((res).r,-,(a).r)\
+	    CHECK_OVERFLOW_OP((res).i,-,(a).i)\
+	    (res).r -= (a).r;  (res).i -= (a).i; \
+    }while(0)
+
+
+#  define KISS_FFT_S32_COS(phase)  floor(.5+SAMP_MAX * cos (phase))
+#  define KISS_FFT_S32_SIN(phase)  floor(.5+SAMP_MAX * sin (phase))
+#  define HALF_OF(x) ((x)>>1)
+
+#define  kf_cexp(x,phase) \
+	do{ \
+		(x)->r = KISS_FFT_S32_COS(phase);\
+		(x)->i = KISS_FFT_S32_SIN(phase);\
+	}while(0)
+
+
+/* a debugging function */
+#define pcpx(c)\
+    fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
diff --git a/gst-libs/gst/fft/gstfft.c b/gst-libs/gst/fft/gstfft.c
new file mode 100644
index 0000000..b1708c7
--- /dev/null
+++ b/gst-libs/gst/fft/gstfft.c
@@ -0,0 +1,54 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstfft
+ * @short_description: General FFT functions and declarations
+ * 
+ * This library includes general definitions and functions, useful for
+ * all typed FFT classes.
+ */
+
+#include <glib.h>
+
+#include "gstfft.h"
+#include "kiss_fft_s16.h"
+
+/**
+ * gst_fft_next_fast_length:
+ * @n: Number for which the next fast length should be returned
+ *
+ * Returns the next number to @n that is entirely a product
+ * of 2, 3 and 5. Using this as the @len parameter for
+ * the different GstFFT types will provide the best performance.
+ *
+ * Returns: the next fast FFT length.
+ *
+ */
+gint
+gst_fft_next_fast_length (gint n)
+{
+  gint half = (n + 1) / 2;
+
+  /* It's the same for all data types so call the s16
+   * version */
+
+  /* The real FFT needs an even length so calculate that */
+  return 2 * kiss_fft_s16_next_fast_size (half);
+}
diff --git a/gst-libs/gst/fft/gstfft.h b/gst-libs/gst/fft/gstfft.h
new file mode 100644
index 0000000..fa5defe
--- /dev/null
+++ b/gst-libs/gst/fft/gstfft.h
@@ -0,0 +1,49 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#ifndef __GST_FFT_H__
+#define __GST_FFT_H__
+
+/**
+ * GstFFTWindow:
+ * @GST_FFT_WINDOW_RECTANGULAR: Rectangular window
+ * @GST_FFT_WINDOW_HAMMING: Hamming window
+ * @GST_FFT_WINDOW_HANN: Hann (sometimes also called Hanning) window
+ * @GST_FFT_WINDOW_BARTLETT: Bartlett window
+ * @GST_FFT_WINDOW_BLACKMAN: Blackman window
+ *
+ * The various window functions available.
+ */
+typedef enum
+{
+  GST_FFT_WINDOW_RECTANGULAR,
+  GST_FFT_WINDOW_HAMMING,
+  GST_FFT_WINDOW_HANN,
+  GST_FFT_WINDOW_BARTLETT,
+  GST_FFT_WINDOW_BLACKMAN
+} GstFFTWindow;
+
+/* Functions */
+
+gint gst_fft_next_fast_length (gint n) G_GNUC_CONST;
+
+#endif /* __GST_FFT_H__ */
diff --git a/gst-libs/gst/fft/gstfftf32.c b/gst-libs/gst/fft/gstfftf32.c
new file mode 100644
index 0000000..fd574e0
--- /dev/null
+++ b/gst-libs/gst/fft/gstfftf32.c
@@ -0,0 +1,208 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#include "_kiss_fft_guts_f32.h"
+#include "kiss_fftr_f32.h"
+#include "gstfft.h"
+#include "gstfftf32.h"
+
+/**
+ * SECTION:gstfftf32
+ * @short_description: FFT functions for 32 bit float samples
+ *
+ * #GstFFTF32 provides a FFT implementation and related functions for
+ * 32 bit float samples. To use this call gst_fft_f32_new() for
+ * allocating a #GstFFTF32 instance with the appropiate parameters and
+ * then call gst_fft_f32_fft() or gst_fft_f32_inverse_fft() to perform the
+ * FFT or inverse FFT on a buffer of samples.
+ *
+ * After use free the #GstFFTF32 instance with gst_fft_f32_free().
+ *
+ * For the best performance use gst_fft_next_fast_length() to get a
+ * number that is entirely a product of 2, 3 and 5 and use this as the
+ * @len parameter for gst_fft_f32_new().
+ *
+ * The @len parameter specifies the number of samples in the time domain that
+ * will be processed or generated. The number of samples in the frequency domain
+ * is @len/2 + 1. To get n samples in the frequency domain use 2*n - 2 as @len.
+ *
+ * Before performing the FFT on time domain data it usually makes sense
+ * to apply a window function to it. For this gst_fft_f32_window() can comfortably
+ * be used.
+ *
+ * Be aware, that you can't simply run gst_fft_f32_inverse_fft() on the
+ * resulting frequency data of gst_fft_f32_fft() to get the original data back.
+ * The relation between them is iFFT (FFT (x)) = x * nfft where nfft is the
+ * length of the FFT. This also has to be taken into account when calculation
+ * the magnitude of the frequency data.
+ *
+ */
+
+/**
+ * gst_fft_f32_new:
+ * @len: Length of the FFT in the time domain
+ * @inverse: %TRUE if the #GstFFTF32 instance should be used for the inverse FFT
+ *
+ * This returns a new #GstFFTF32 instance with the given parameters. It makes
+ * sense to keep one instance for several calls for speed reasons.
+ *
+ * @len must be even and to get the best performance a product of
+ * 2, 3 and 5. To get the next number with this characteristics use
+ * gst_fft_next_fast_length().
+ *
+ * Returns: a new #GstFFTF32 instance.
+ */
+GstFFTF32 *
+gst_fft_f32_new (gint len, gboolean inverse)
+{
+  GstFFTF32 *self;
+  gsize subsize = 0, memneeded;
+
+  g_return_val_if_fail (len > 0, NULL);
+  g_return_val_if_fail (len % 2 == 0, NULL);
+
+  kiss_fftr_f32_alloc (len, (inverse) ? 1 : 0, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (GstFFTF32)) + subsize;
+
+  self = (GstFFTF32 *) g_malloc0 (memneeded);
+
+  self->cfg = (((guint8 *) self) + ALIGN_STRUCT (sizeof (GstFFTF32)));
+  self->cfg = kiss_fftr_f32_alloc (len, (inverse) ? 1 : 0, self->cfg, &subsize);
+  g_assert (self->cfg);
+
+  self->inverse = inverse;
+  self->len = len;
+
+  return self;
+}
+
+/**
+ * gst_fft_f32_fft:
+ * @self: #GstFFTF32 instance for this call
+ * @timedata: Buffer of the samples in the time domain
+ * @freqdata: Target buffer for the samples in the frequency domain
+ *
+ * This performs the FFT on @timedata and puts the result in @freqdata.
+ *
+ * @timedata must have as many samples as specified with the @len parameter while
+ * allocating the #GstFFTF32 instance with gst_fft_f32_new().
+ *
+ * @freqdata must be large enough to hold @len/2 + 1 #GstFFTF32Complex frequency
+ * domain samples.
+ *
+ */
+void
+gst_fft_f32_fft (GstFFTF32 * self, const gfloat * timedata,
+    GstFFTF32Complex * freqdata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (!self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftr_f32 (self->cfg, timedata, (kiss_fft_f32_cpx *) freqdata);
+}
+
+/**
+ * gst_fft_f32_inverse_fft:
+ * @self: #GstFFTF32 instance for this call
+ * @freqdata: Buffer of the samples in the frequency domain
+ * @timedata: Target buffer for the samples in the time domain
+ *
+ * This performs the inverse FFT on @freqdata and puts the result in @timedata.
+ *
+ * @freqdata must have @len/2 + 1 samples, where @len is the parameter specified
+ * while allocating the #GstFFTF32 instance with gst_fft_f32_new().
+ *
+ * @timedata must be large enough to hold @len time domain samples.
+ *
+ */
+void
+gst_fft_f32_inverse_fft (GstFFTF32 * self, const GstFFTF32Complex * freqdata,
+    gfloat * timedata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftri_f32 (self->cfg, (kiss_fft_f32_cpx *) freqdata, timedata);
+}
+
+/**
+ * gst_fft_f32_free:
+ * @self: #GstFFTF32 instance for this call
+ *
+ * This frees the memory allocated for @self.
+ *
+ */
+void
+gst_fft_f32_free (GstFFTF32 * self)
+{
+  g_free (self);
+}
+
+/**
+ * gst_fft_f32_window:
+ * @self: #GstFFTF32 instance for this call
+ * @timedata: Time domain samples
+ * @window: Window function to apply
+ *
+ * This calls the window function @window on the @timedata sample buffer.
+ *
+ */
+void
+gst_fft_f32_window (GstFFTF32 * self, gfloat * timedata, GstFFTWindow window)
+{
+  gint i, len;
+
+  g_return_if_fail (self);
+  g_return_if_fail (timedata);
+
+  len = self->len;
+
+  switch (window) {
+    case GST_FFT_WINDOW_RECTANGULAR:
+      /* do nothing */
+      break;
+    case GST_FFT_WINDOW_HAMMING:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.53836 - 0.46164 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_HANN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.5 - 0.5 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_BARTLETT:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (1.0 - fabs ((2.0 * i - len) / len));
+      break;
+    case GST_FFT_WINDOW_BLACKMAN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.42 - 0.5 * cos ((2.0 * i) / len) +
+            0.08 * cos ((4.0 * i) / len));
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
diff --git a/gst-libs/gst/fft/gstfftf32.h b/gst-libs/gst/fft/gstfftf32.h
new file mode 100644
index 0000000..3b56b48
--- /dev/null
+++ b/gst-libs/gst/fft/gstfftf32.h
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_FFT_F32_H__
+#define __GST_FFT_F32_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+
+#include "gstfft.h"
+
+typedef struct _GstFFTF32 GstFFTF32;
+typedef struct _GstFFTF32Complex GstFFTF32Complex;
+
+/* FIXME 0.11: Move the struct definition to the sources,
+ *             there's no reason to have it public.
+ */
+/**
+ * GstFFTF32:
+ *
+ * Instance structure for #GstFFTF32.
+ *
+ */
+struct _GstFFTF32 {
+  /* <private> */
+  void * cfg;
+  gboolean inverse;
+  gint len;
+  gpointer _padding[GST_PADDING];
+};
+
+/* Copy of kiss_fft_f32_cpx for documentation reasons,
+ * do NOT change! */
+
+/**
+ * GstFFTF32Complex:
+ * @r: Real part
+ * @i: Imaginary part
+ *
+ * Data type for complex numbers composed of
+ * 32 bit float.
+ *
+ */
+struct _GstFFTF32Complex
+{
+  gfloat r;
+  gfloat i;
+};
+
+/* Functions */
+
+GstFFTF32 * gst_fft_f32_new (gint len, gboolean inverse);
+void gst_fft_f32_fft (GstFFTF32 *self, const gfloat *timedata, GstFFTF32Complex *freqdata);
+void gst_fft_f32_inverse_fft (GstFFTF32 *self, const GstFFTF32Complex *freqdata, gfloat *timedata);
+void gst_fft_f32_free (GstFFTF32 *self);
+
+void gst_fft_f32_window (GstFFTF32 *self, gfloat *timedata, GstFFTWindow window);
+
+#endif /* __GST_FFT_F32_H__ */
diff --git a/gst-libs/gst/fft/gstfftf64.c b/gst-libs/gst/fft/gstfftf64.c
new file mode 100644
index 0000000..e737854
--- /dev/null
+++ b/gst-libs/gst/fft/gstfftf64.c
@@ -0,0 +1,208 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#include "_kiss_fft_guts_f64.h"
+#include "kiss_fftr_f64.h"
+#include "gstfft.h"
+#include "gstfftf64.h"
+
+/**
+ * SECTION:gstfftf64
+ * @short_description: FFT functions for 64 bit float samples
+ *
+ * #GstFFTF64 provides a FFT implementation and related functions for
+ * 64 bit float samples. To use this call gst_fft_f64_new() for
+ * allocating a #GstFFTF64 instance with the appropiate parameters and
+ * then call gst_fft_f64_fft() or gst_fft_f64_inverse_fft() to perform the
+ * FFT or inverse FFT on a buffer of samples.
+ *
+ * After use free the #GstFFTF64 instance with gst_fft_f64_free().
+ *
+ * For the best performance use gst_fft_next_fast_length() to get a
+ * number that is entirely a product of 2, 3 and 5 and use this as the
+ * @len parameter for gst_fft_f64_new().
+ *
+ * The @len parameter specifies the number of samples in the time domain that
+ * will be processed or generated. The number of samples in the frequency domain
+ * is @len/2 + 1. To get n samples in the frequency domain use 2*n - 2 as @len.
+ *
+ * Before performing the FFT on time domain data it usually makes sense
+ * to apply a window function to it. For this gst_fft_f64_window() can comfortably
+ * be used.
+ *
+ * Be aware, that you can't simply run gst_fft_f32_inverse_fft() on the
+ * resulting frequency data of gst_fft_f32_fft() to get the original data back.
+ * The relation between them is iFFT (FFT (x)) = x * nfft where nfft is the
+ * length of the FFT. This also has to be taken into account when calculation
+ * the magnitude of the frequency data.
+ *
+ */
+
+/**
+ * gst_fft_f64_new:
+ * @len: Length of the FFT in the time domain
+ * @inverse: %TRUE if the #GstFFTF64 instance should be used for the inverse FFT
+ *
+ * This returns a new #GstFFTF64 instance with the given parameters. It makes
+ * sense to keep one instance for several calls for speed reasons.
+ *
+ * @len must be even and to get the best performance a product of
+ * 2, 3 and 5. To get the next number with this characteristics use
+ * gst_fft_next_fast_length().
+ *
+ * Returns: a new #GstFFTF64 instance.
+ */
+GstFFTF64 *
+gst_fft_f64_new (gint len, gboolean inverse)
+{
+  GstFFTF64 *self;
+  gsize subsize = 0, memneeded;
+
+  g_return_val_if_fail (len > 0, NULL);
+  g_return_val_if_fail (len % 2 == 0, NULL);
+
+  kiss_fftr_f64_alloc (len, (inverse) ? 1 : 0, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (GstFFTF64)) + subsize;
+
+  self = (GstFFTF64 *) g_malloc0 (memneeded);
+
+  self->cfg = (((guint8 *) self) + ALIGN_STRUCT (sizeof (GstFFTF64)));
+  self->cfg = kiss_fftr_f64_alloc (len, (inverse) ? 1 : 0, self->cfg, &subsize);
+  g_assert (self->cfg);
+
+  self->inverse = inverse;
+  self->len = len;
+
+  return self;
+}
+
+/**
+ * gst_fft_f64_fft:
+ * @self: #GstFFTF64 instance for this call
+ * @timedata: Buffer of the samples in the time domain
+ * @freqdata: Target buffer for the samples in the frequency domain
+ *
+ * This performs the FFT on @timedata and puts the result in @freqdata.
+ *
+ * @timedata must have as many samples as specified with the @len parameter while
+ * allocating the #GstFFTF64 instance with gst_fft_f64_new().
+ *
+ * @freqdata must be large enough to hold @len/2 + 1 #GstFFTF64Complex frequency
+ * domain samples.
+ *
+ */
+void
+gst_fft_f64_fft (GstFFTF64 * self, const gdouble * timedata,
+    GstFFTF64Complex * freqdata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (!self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftr_f64 (self->cfg, timedata, (kiss_fft_f64_cpx *) freqdata);
+}
+
+/**
+ * gst_fft_f64_inverse_fft:
+ * @self: #GstFFTF64 instance for this call
+ * @freqdata: Buffer of the samples in the frequency domain
+ * @timedata: Target buffer for the samples in the time domain
+ *
+ * This performs the inverse FFT on @freqdata and puts the result in @timedata.
+ *
+ * @freqdata must have @len/2 + 1 samples, where @len is the parameter specified
+ * while allocating the #GstFFTF64 instance with gst_fft_f64_new().
+ *
+ * @timedata must be large enough to hold @len time domain samples.
+ *
+ */
+void
+gst_fft_f64_inverse_fft (GstFFTF64 * self, const GstFFTF64Complex * freqdata,
+    gdouble * timedata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftri_f64 (self->cfg, (kiss_fft_f64_cpx *) freqdata, timedata);
+}
+
+/**
+ * gst_fft_f64_free:
+ * @self: #GstFFTF64 instance for this call
+ *
+ * This frees the memory allocated for @self.
+ *
+ */
+void
+gst_fft_f64_free (GstFFTF64 * self)
+{
+  g_free (self);
+}
+
+/**
+ * gst_fft_f64_window:
+ * @self: #GstFFTF64 instance for this call
+ * @timedata: Time domain samples
+ * @window: Window function to apply
+ *
+ * This calls the window function @window on the @timedata sample buffer.
+ *
+ */
+void
+gst_fft_f64_window (GstFFTF64 * self, gdouble * timedata, GstFFTWindow window)
+{
+  gint i, len;
+
+  g_return_if_fail (self);
+  g_return_if_fail (timedata);
+
+  len = self->len;
+
+  switch (window) {
+    case GST_FFT_WINDOW_RECTANGULAR:
+      /* do nothing */
+      break;
+    case GST_FFT_WINDOW_HAMMING:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.53836 - 0.46164 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_HANN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.5 - 0.5 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_BARTLETT:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (1.0 - fabs ((2.0 * i - len) / len));
+      break;
+    case GST_FFT_WINDOW_BLACKMAN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.42 - 0.5 * cos ((2.0 * i) / len) +
+            0.08 * cos ((4.0 * i) / len));
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
diff --git a/gst-libs/gst/fft/gstfftf64.h b/gst-libs/gst/fft/gstfftf64.h
new file mode 100644
index 0000000..8ebbee4
--- /dev/null
+++ b/gst-libs/gst/fft/gstfftf64.h
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_FFT_F64_H__
+#define __GST_FFT_F64_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+
+#include "gstfft.h"
+
+typedef struct _GstFFTF64 GstFFTF64;
+typedef struct _GstFFTF64Complex GstFFTF64Complex;
+
+/* FIXME 0.11: Move the struct definition to the sources,
+ *             there's no reason to have it public.
+ */
+/**
+ * GstFFTF64:
+ *
+ * Instance structure for #GstFFTF64.
+ *
+ */
+struct _GstFFTF64 {
+  /* <private> */
+  void * cfg;
+  gboolean inverse;
+  gint len;
+  gpointer _padding[GST_PADDING];
+};
+
+/* Copy of kiss_fft_f64_cpx for documentation reasons,
+ * do NOT change! */
+
+/**
+ * GstFFTF64Complex:
+ * @r: Real part
+ * @i: Imaginary part
+ *
+ * Data type for complex numbers composed of
+ * 64 bit float.
+ *
+ */
+struct _GstFFTF64Complex
+{
+  gdouble r;
+  gdouble i;
+};
+
+/* Functions */
+
+GstFFTF64 * gst_fft_f64_new (gint len, gboolean inverse);
+void gst_fft_f64_fft (GstFFTF64 *self, const gdouble *timedata, GstFFTF64Complex *freqdata);
+void gst_fft_f64_inverse_fft (GstFFTF64 *self, const GstFFTF64Complex *freqdata, gdouble *timedata);
+void gst_fft_f64_free (GstFFTF64 *self);
+
+void gst_fft_f64_window (GstFFTF64 *self, gdouble *timedata, GstFFTWindow window);
+
+#endif /* __GST_FFT_F64_H__ */
diff --git a/gst-libs/gst/fft/gstffts16.c b/gst-libs/gst/fft/gstffts16.c
new file mode 100644
index 0000000..212e93f
--- /dev/null
+++ b/gst-libs/gst/fft/gstffts16.c
@@ -0,0 +1,208 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#include "_kiss_fft_guts_s16.h"
+#include "kiss_fftr_s16.h"
+#include "gstfft.h"
+#include "gstffts16.h"
+
+/**
+ * SECTION:gstffts16
+ * @short_description: FFT functions for signed 16 bit integer samples
+ *
+ * #GstFFTS16 provides a FFT implementation and related functions for
+ * signed 16 bit integer samples. To use this call gst_fft_s16_new() for
+ * allocating a #GstFFTS16 instance with the appropiate parameters and
+ * then call gst_fft_s16_fft() or gst_fft_s16_inverse_fft() to perform the
+ * FFT or inverse FFT on a buffer of samples.
+ *
+ * After use free the #GstFFTS16 instance with gst_fft_s16_free().
+ *
+ * For the best performance use gst_fft_next_fast_length() to get a
+ * number that is entirely a product of 2, 3 and 5 and use this as the
+ * @len parameter for gst_fft_s16_new().
+ *
+ * The @len parameter specifies the number of samples in the time domain that
+ * will be processed or generated. The number of samples in the frequency domain
+ * is @len/2 + 1. To get n samples in the frequency domain use 2*n - 2 as @len.
+ *
+ * Before performing the FFT on time domain data it usually makes sense
+ * to apply a window function to it. For this gst_fft_s16_window() can comfortably
+ * be used.
+ *
+ * Be aware, that you can't simply run gst_fft_s16_inverse_fft() on the
+ * resulting frequency data of gst_fft_s16_fft() to get the original data back.
+ * The relation between them is iFFT (FFT (x)) = x / nfft where nfft is the
+ * length of the FFT. This also has to be taken into account when calculation
+ * the magnitude of the frequency data.
+ * 
+ */
+
+/**
+ * gst_fft_s16_new:
+ * @len: Length of the FFT in the time domain
+ * @inverse: %TRUE if the #GstFFTS16 instance should be used for the inverse FFT
+ *
+ * This returns a new #GstFFTS16 instance with the given parameters. It makes
+ * sense to keep one instance for several calls for speed reasons.
+ *
+ * @len must be even and to get the best performance a product of
+ * 2, 3 and 5. To get the next number with this characteristics use
+ * gst_fft_next_fast_length().
+ *
+ * Returns: a new #GstFFTS16 instance.
+ */
+GstFFTS16 *
+gst_fft_s16_new (gint len, gboolean inverse)
+{
+  GstFFTS16 *self;
+  gsize subsize = 0, memneeded;
+
+  g_return_val_if_fail (len > 0, NULL);
+  g_return_val_if_fail (len % 2 == 0, NULL);
+
+  kiss_fftr_s16_alloc (len, (inverse) ? 1 : 0, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (GstFFTS16)) + subsize;
+
+  self = (GstFFTS16 *) g_malloc0 (memneeded);
+
+  self->cfg = (((guint8 *) self) + ALIGN_STRUCT (sizeof (GstFFTS16)));
+  self->cfg = kiss_fftr_s16_alloc (len, (inverse) ? 1 : 0, self->cfg, &subsize);
+  g_assert (self->cfg);
+
+  self->inverse = inverse;
+  self->len = len;
+
+  return self;
+}
+
+/**
+ * gst_fft_s16_fft:
+ * @self: #GstFFTS16 instance for this call
+ * @timedata: Buffer of the samples in the time domain
+ * @freqdata: Target buffer for the samples in the frequency domain
+ *
+ * This performs the FFT on @timedata and puts the result in @freqdata.
+ *
+ * @timedata must have as many samples as specified with the @len parameter while
+ * allocating the #GstFFTS16 instance with gst_fft_s16_new().
+ *
+ * @freqdata must be large enough to hold @len/2 + 1 #GstFFTS16Complex frequency
+ * domain samples.
+ *
+ */
+void
+gst_fft_s16_fft (GstFFTS16 * self, const gint16 * timedata,
+    GstFFTS16Complex * freqdata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (!self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftr_s16 (self->cfg, timedata, (kiss_fft_s16_cpx *) freqdata);
+}
+
+/**
+ * gst_fft_s16_inverse_fft:
+ * @self: #GstFFTS16 instance for this call
+ * @freqdata: Buffer of the samples in the frequency domain
+ * @timedata: Target buffer for the samples in the time domain
+ *
+ * This performs the inverse FFT on @freqdata and puts the result in @timedata.
+ *
+ * @freqdata must have @len/2 + 1 samples, where @len is the parameter specified
+ * while allocating the #GstFFTS16 instance with gst_fft_s16_new().
+ *
+ * @timedata must be large enough to hold @len time domain samples.
+ *
+ */
+void
+gst_fft_s16_inverse_fft (GstFFTS16 * self, const GstFFTS16Complex * freqdata,
+    gint16 * timedata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftri_s16 (self->cfg, (kiss_fft_s16_cpx *) freqdata, timedata);
+}
+
+/**
+ * gst_fft_s16_free:
+ * @self: #GstFFTS16 instance for this call
+ *
+ * This frees the memory allocated for @self.
+ *
+ */
+void
+gst_fft_s16_free (GstFFTS16 * self)
+{
+  g_free (self);
+}
+
+/**
+ * gst_fft_s16_window:
+ * @self: #GstFFTS16 instance for this call
+ * @timedata: Time domain samples
+ * @window: Window function to apply
+ *
+ * This calls the window function @window on the @timedata sample buffer.
+ *
+ */
+void
+gst_fft_s16_window (GstFFTS16 * self, gint16 * timedata, GstFFTWindow window)
+{
+  gint i, len;
+
+  g_return_if_fail (self);
+  g_return_if_fail (timedata);
+
+  len = self->len;
+
+  switch (window) {
+    case GST_FFT_WINDOW_RECTANGULAR:
+      /* do nothing */
+      break;
+    case GST_FFT_WINDOW_HAMMING:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.53836 - 0.46164 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_HANN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.5 - 0.5 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_BARTLETT:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (1.0 - fabs ((2.0 * i - len) / len));
+      break;
+    case GST_FFT_WINDOW_BLACKMAN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.42 - 0.5 * cos ((2.0 * i) / len) +
+            0.08 * cos ((4.0 * i) / len));
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
diff --git a/gst-libs/gst/fft/gstffts16.h b/gst-libs/gst/fft/gstffts16.h
new file mode 100644
index 0000000..9a752f1
--- /dev/null
+++ b/gst-libs/gst/fft/gstffts16.h
@@ -0,0 +1,74 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_FFT_S16_H__
+#define __GST_FFT_S16_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+
+#include "gstfft.h"
+
+typedef struct _GstFFTS16 GstFFTS16;
+typedef struct _GstFFTS16Complex GstFFTS16Complex;
+
+/* FIXME 0.11: Move the struct definition to the sources,
+ *             there's no reason to have it public.
+ */
+/**
+ * GstFFTS16:
+ *
+ * Instance structure for #GstFFTS16.
+ *
+ */
+struct _GstFFTS16 {
+  /* <private> */
+  void *cfg;
+  gboolean inverse;
+  gint len;
+  gpointer _padding[GST_PADDING];
+};
+
+/* Copy of kiss_fft_s16_cpx for documentation reasons,
+ * do NOT change! */
+
+/**
+ * GstFFTS16Complex:
+ * @r: Real part
+ * @i: Imaginary part
+ *
+ * Data type for complex numbers composed of
+ * signed 16 bit integers.
+ *
+ */
+struct _GstFFTS16Complex
+{
+  gint16 r;
+  gint16 i;
+};
+
+/* Functions */
+
+GstFFTS16 * gst_fft_s16_new (gint len, gboolean inverse);
+void gst_fft_s16_fft (GstFFTS16 *self, const gint16 *timedata, GstFFTS16Complex *freqdata);
+void gst_fft_s16_inverse_fft (GstFFTS16 *self, const GstFFTS16Complex *freqdata, gint16 *timedata);
+void gst_fft_s16_free (GstFFTS16 *self);
+
+void gst_fft_s16_window (GstFFTS16 *self, gint16 *timedata, GstFFTWindow window);
+#endif /* __GST_FFT_S16_H__ */
diff --git a/gst-libs/gst/fft/gstffts32.c b/gst-libs/gst/fft/gstffts32.c
new file mode 100644
index 0000000..56ea543
--- /dev/null
+++ b/gst-libs/gst/fft/gstffts32.c
@@ -0,0 +1,207 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <math.h>
+
+#include "_kiss_fft_guts_s32.h"
+#include "kiss_fftr_s32.h"
+#include "gstfft.h"
+#include "gstffts32.h"
+
+/**
+ * SECTION:gstffts32
+ * @short_description: FFT functions for signed 32 bit integer samples
+ *
+ * #GstFFTS32 provides a FFT implementation and related functions for
+ * signed 32 bit integer samples. To use this call gst_fft_s32_new() for
+ * allocating a #GstFFTS32 instance with the appropiate parameters and
+ * then call gst_fft_s32_fft() or gst_fft_s32_inverse_fft() to perform the
+ * FFT or inverse FFT on a buffer of samples.
+ *
+ * After use free the #GstFFTS32 instance with gst_fft_s32_free().
+ *
+ * For the best performance use gst_fft_next_fast_length() to get a
+ * number that is entirely a product of 2, 3 and 5 and use this as the
+ * @len parameter for gst_fft_s32_new().
+ *
+ * The @len parameter specifies the number of samples in the time domain that
+ * will be processed or generated. The number of samples in the frequency domain
+ * is @len/2 + 1. To get n samples in the frequency domain use 2*n - 2 as @len.
+ *
+ * Before performing the FFT on time domain data it usually makes sense
+ * to apply a window function to it. For this gst_fft_s32_window() can comfortably
+ * be used.
+ *
+ * Be aware, that you can't simply run gst_fft_s32_inverse_fft() on the
+ * resulting frequency data of gst_fft_s32_fft() to get the original data back.
+ * The relation between them is iFFT (FFT (x)) = x / nfft where nfft is the
+ * length of the FFT. This also has to be taken into account when calculation
+ * the magnitude of the frequency data.
+ */
+
+/**
+ * gst_fft_s32_new:
+ * @len: Length of the FFT in the time domain
+ * @inverse: %TRUE if the #GstFFTS32 instance should be used for the inverse FFT
+ *
+ * This returns a new #GstFFTS32 instance with the given parameters. It makes
+ * sense to keep one instance for several calls for speed reasons.
+ *
+ * @len must be even and to get the best performance a product of
+ * 2, 3 and 5. To get the next number with this characteristics use
+ * gst_fft_next_fast_length().
+ *
+ * Returns: a new #GstFFTS32 instance.
+ */
+GstFFTS32 *
+gst_fft_s32_new (gint len, gboolean inverse)
+{
+  GstFFTS32 *self;
+  gsize subsize = 0, memneeded;
+
+  g_return_val_if_fail (len > 0, NULL);
+  g_return_val_if_fail (len % 2 == 0, NULL);
+
+  kiss_fftr_s32_alloc (len, (inverse) ? 1 : 0, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (GstFFTS32)) + subsize;
+
+  self = (GstFFTS32 *) g_malloc0 (memneeded);
+
+  self->cfg = (((guint8 *) self) + ALIGN_STRUCT (sizeof (GstFFTS32)));
+  self->cfg = kiss_fftr_s32_alloc (len, (inverse) ? 1 : 0, self->cfg, &subsize);
+  g_assert (self->cfg);
+
+  self->inverse = inverse;
+  self->len = len;
+
+  return self;
+}
+
+/**
+ * gst_fft_s32_fft:
+ * @self: #GstFFTS32 instance for this call
+ * @timedata: Buffer of the samples in the time domain
+ * @freqdata: Target buffer for the samples in the frequency domain
+ *
+ * This performs the FFT on @timedata and puts the result in @freqdata.
+ *
+ * @timedata must have as many samples as specified with the @len parameter while
+ * allocating the #GstFFTS32 instance with gst_fft_s32_new().
+ *
+ * @freqdata must be large enough to hold @len/2 + 1 #GstFFTS32Complex frequency
+ * domain samples.
+ *
+ */
+void
+gst_fft_s32_fft (GstFFTS32 * self, const gint32 * timedata,
+    GstFFTS32Complex * freqdata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (!self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftr_s32 (self->cfg, timedata, (kiss_fft_s32_cpx *) freqdata);
+}
+
+/**
+ * gst_fft_s32_inverse_fft:
+ * @self: #GstFFTS32 instance for this call
+ * @freqdata: Buffer of the samples in the frequency domain
+ * @timedata: Target buffer for the samples in the time domain
+ *
+ * This performs the inverse FFT on @freqdata and puts the result in @timedata.
+ *
+ * @freqdata must have @len/2 + 1 samples, where @len is the parameter specified
+ * while allocating the #GstFFTS32 instance with gst_fft_s32_new().
+ *
+ * @timedata must be large enough to hold @len time domain samples.
+ *
+ */
+void
+gst_fft_s32_inverse_fft (GstFFTS32 * self, const GstFFTS32Complex * freqdata,
+    gint32 * timedata)
+{
+  g_return_if_fail (self);
+  g_return_if_fail (self->inverse);
+  g_return_if_fail (timedata);
+  g_return_if_fail (freqdata);
+
+  kiss_fftri_s32 (self->cfg, (kiss_fft_s32_cpx *) freqdata, timedata);
+}
+
+/**
+ * gst_fft_s32_free:
+ * @self: #GstFFTS32 instance for this call
+ *
+ * This frees the memory allocated for @self.
+ *
+ */
+void
+gst_fft_s32_free (GstFFTS32 * self)
+{
+  g_free (self);
+}
+
+/**
+ * gst_fft_s32_window:
+ * @self: #GstFFTS32 instance for this call
+ * @timedata: Time domain samples
+ * @window: Window function to apply
+ *
+ * This calls the window function @window on the @timedata sample buffer.
+ *
+ */
+void
+gst_fft_s32_window (GstFFTS32 * self, gint32 * timedata, GstFFTWindow window)
+{
+  gint i, len;
+
+  g_return_if_fail (self);
+  g_return_if_fail (timedata);
+
+  len = self->len;
+
+  switch (window) {
+    case GST_FFT_WINDOW_RECTANGULAR:
+      /* do nothing */
+      break;
+    case GST_FFT_WINDOW_HAMMING:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.53836 - 0.46164 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_HANN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.5 - 0.5 * cos (2.0 * G_PI * i / len));
+      break;
+    case GST_FFT_WINDOW_BARTLETT:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (1.0 - fabs ((2.0 * i - len) / len));
+      break;
+    case GST_FFT_WINDOW_BLACKMAN:
+      for (i = 0; i < len; i++)
+        timedata[i] *= (0.42 - 0.5 * cos ((2.0 * i) / len) +
+            0.08 * cos ((4.0 * i) / len));
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
diff --git a/gst-libs/gst/fft/gstffts32.h b/gst-libs/gst/fft/gstffts32.h
new file mode 100644
index 0000000..fd3b279
--- /dev/null
+++ b/gst-libs/gst/fft/gstffts32.h
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) <2007> Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_FFT_S32_H__
+#define __GST_FFT_S32_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+
+#include "gstfft.h"
+
+typedef struct _GstFFTS32 GstFFTS32;
+typedef struct _GstFFTS32Complex GstFFTS32Complex;
+
+/* FIXME 0.11: Move the struct definition to the sources,
+ *             there's no reason to have it public.
+ */
+/**
+ * GstFFTS32:
+ *
+ * Instance structure for #GstFFTS32.
+ *
+ */
+struct _GstFFTS32 {
+  /* <private> */
+  void * cfg;
+  gboolean inverse;
+  gint len;
+  gpointer _padding[GST_PADDING];
+};
+
+/* Copy of kiss_fft_s32_cpx for documentation reasons,
+ * do NOT change! */
+
+/**
+ * GstFFTS32Complex:
+ * @r: Real part
+ * @i: Imaginary part
+ *
+ * Data type for complex numbers composed of
+ * signed 32 bit integers.
+ *
+ */
+struct _GstFFTS32Complex
+{
+  gint32 r;
+  gint32 i;
+};
+
+/* Functions */
+
+GstFFTS32 * gst_fft_s32_new (gint len, gboolean inverse);
+void gst_fft_s32_fft (GstFFTS32 *self, const gint32 *timedata, GstFFTS32Complex *freqdata);
+void gst_fft_s32_inverse_fft (GstFFTS32 *self, const GstFFTS32Complex *freqdata, gint32 *timedata);
+void gst_fft_s32_free (GstFFTS32 *self);
+
+void gst_fft_s32_window (GstFFTS32 *self, gint32 *timedata, GstFFTWindow window);
+
+#endif /* __GST_FFT_S32_H__ */
diff --git a/gst-libs/gst/fft/kiss_fft_f32.c b/gst-libs/gst/fft/kiss_fft_f32.c
new file mode 100644
index 0000000..693a899
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_f32.c
@@ -0,0 +1,472 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "_kiss_fft_guts_f32.h"
+/* The guts header contains all the multiplication and addition macros that are defined for
+ fixed or floating point complex numbers.  It also delares the kf_ internal functions.
+ */
+
+static kiss_fft_f32_cpx *scratchbuf = NULL;
+static size_t nscratchbuf = 0;
+static kiss_fft_f32_cpx *tmpbuf = NULL;
+static size_t ntmpbuf = 0;
+
+#define CHECKBUF(buf,nbuf,n) \
+    do { \
+        if ( nbuf < (size_t)(n) ) {\
+            free(buf); \
+            buf = (kiss_fft_f32_cpx*)KISS_FFT_F32_MALLOC(sizeof(kiss_fft_f32_cpx)*(n)); \
+            nbuf = (size_t)(n); \
+        } \
+   }while(0)
+
+
+static void
+kf_bfly2 (kiss_fft_f32_cpx * Fout,
+    const size_t fstride, const kiss_fft_f32_cfg st, int m)
+{
+  kiss_fft_f32_cpx *Fout2;
+  kiss_fft_f32_cpx *tw1 = st->twiddles;
+  kiss_fft_f32_cpx t;
+
+  Fout2 = Fout + m;
+  do {
+    C_FIXDIV (*Fout, 2);
+    C_FIXDIV (*Fout2, 2);
+
+    C_MUL (t, *Fout2, *tw1);
+    tw1 += fstride;
+    C_SUB (*Fout2, *Fout, t);
+    C_ADDTO (*Fout, t);
+    ++Fout2;
+    ++Fout;
+  } while (--m);
+}
+
+static void
+kf_bfly4 (kiss_fft_f32_cpx * Fout,
+    const size_t fstride, const kiss_fft_f32_cfg st, const size_t m)
+{
+  kiss_fft_f32_cpx *tw1, *tw2, *tw3;
+  kiss_fft_f32_cpx scratch[6];
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  const size_t m3 = 3 * m;
+
+  tw3 = tw2 = tw1 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 4);
+    C_FIXDIV (Fout[m], 4);
+    C_FIXDIV (Fout[m2], 4);
+    C_FIXDIV (Fout[m3], 4);
+
+    C_MUL (scratch[0], Fout[m], *tw1);
+    C_MUL (scratch[1], Fout[m2], *tw2);
+    C_MUL (scratch[2], Fout[m3], *tw3);
+
+    C_SUB (scratch[5], *Fout, scratch[1]);
+    C_ADDTO (*Fout, scratch[1]);
+    C_ADD (scratch[3], scratch[0], scratch[2]);
+    C_SUB (scratch[4], scratch[0], scratch[2]);
+    C_SUB (Fout[m2], *Fout, scratch[3]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+    tw3 += fstride * 3;
+    C_ADDTO (*Fout, scratch[3]);
+
+    if (st->inverse) {
+      Fout[m].r = scratch[5].r - scratch[4].i;
+      Fout[m].i = scratch[5].i + scratch[4].r;
+      Fout[m3].r = scratch[5].r + scratch[4].i;
+      Fout[m3].i = scratch[5].i - scratch[4].r;
+    } else {
+      Fout[m].r = scratch[5].r + scratch[4].i;
+      Fout[m].i = scratch[5].i - scratch[4].r;
+      Fout[m3].r = scratch[5].r - scratch[4].i;
+      Fout[m3].i = scratch[5].i + scratch[4].r;
+    }
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly3 (kiss_fft_f32_cpx * Fout,
+    const size_t fstride, const kiss_fft_f32_cfg st, size_t m)
+{
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  kiss_fft_f32_cpx *tw1, *tw2;
+  kiss_fft_f32_cpx scratch[5];
+  kiss_fft_f32_cpx epi3;
+
+  epi3 = st->twiddles[fstride * m];
+
+  tw1 = tw2 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 3);
+    C_FIXDIV (Fout[m], 3);
+    C_FIXDIV (Fout[m2], 3);
+
+    C_MUL (scratch[1], Fout[m], *tw1);
+    C_MUL (scratch[2], Fout[m2], *tw2);
+
+    C_ADD (scratch[3], scratch[1], scratch[2]);
+    C_SUB (scratch[0], scratch[1], scratch[2]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+
+    Fout[m].r = Fout->r - HALF_OF (scratch[3].r);
+    Fout[m].i = Fout->i - HALF_OF (scratch[3].i);
+
+    C_MULBYSCALAR (scratch[0], epi3.i);
+
+    C_ADDTO (*Fout, scratch[3]);
+
+    Fout[m2].r = Fout[m].r + scratch[0].i;
+    Fout[m2].i = Fout[m].i - scratch[0].r;
+
+    Fout[m].r -= scratch[0].i;
+    Fout[m].i += scratch[0].r;
+
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly5 (kiss_fft_f32_cpx * Fout,
+    const size_t fstride, const kiss_fft_f32_cfg st, int m)
+{
+  kiss_fft_f32_cpx *Fout0, *Fout1, *Fout2, *Fout3, *Fout4;
+  int u;
+  kiss_fft_f32_cpx scratch[13];
+  kiss_fft_f32_cpx *twiddles = st->twiddles;
+  kiss_fft_f32_cpx *tw;
+  kiss_fft_f32_cpx ya, yb;
+
+  ya = twiddles[fstride * m];
+  yb = twiddles[fstride * 2 * m];
+
+  Fout0 = Fout;
+  Fout1 = Fout0 + m;
+  Fout2 = Fout0 + 2 * m;
+  Fout3 = Fout0 + 3 * m;
+  Fout4 = Fout0 + 4 * m;
+
+  tw = st->twiddles;
+  for (u = 0; u < m; ++u) {
+    C_FIXDIV (*Fout0, 5);
+    C_FIXDIV (*Fout1, 5);
+    C_FIXDIV (*Fout2, 5);
+    C_FIXDIV (*Fout3, 5);
+    C_FIXDIV (*Fout4, 5);
+    scratch[0] = *Fout0;
+
+    C_MUL (scratch[1], *Fout1, tw[u * fstride]);
+    C_MUL (scratch[2], *Fout2, tw[2 * u * fstride]);
+    C_MUL (scratch[3], *Fout3, tw[3 * u * fstride]);
+    C_MUL (scratch[4], *Fout4, tw[4 * u * fstride]);
+
+    C_ADD (scratch[7], scratch[1], scratch[4]);
+    C_SUB (scratch[10], scratch[1], scratch[4]);
+    C_ADD (scratch[8], scratch[2], scratch[3]);
+    C_SUB (scratch[9], scratch[2], scratch[3]);
+
+    Fout0->r += scratch[7].r + scratch[8].r;
+    Fout0->i += scratch[7].i + scratch[8].i;
+
+    scratch[5].r =
+        scratch[0].r + S_MUL (scratch[7].r, ya.r) + S_MUL (scratch[8].r, yb.r);
+    scratch[5].i =
+        scratch[0].i + S_MUL (scratch[7].i, ya.r) + S_MUL (scratch[8].i, yb.r);
+
+    scratch[6].r = S_MUL (scratch[10].i, ya.i) + S_MUL (scratch[9].i, yb.i);
+    scratch[6].i = -S_MUL (scratch[10].r, ya.i) - S_MUL (scratch[9].r, yb.i);
+
+    C_SUB (*Fout1, scratch[5], scratch[6]);
+    C_ADD (*Fout4, scratch[5], scratch[6]);
+
+    scratch[11].r =
+        scratch[0].r + S_MUL (scratch[7].r, yb.r) + S_MUL (scratch[8].r, ya.r);
+    scratch[11].i =
+        scratch[0].i + S_MUL (scratch[7].i, yb.r) + S_MUL (scratch[8].i, ya.r);
+    scratch[12].r = -S_MUL (scratch[10].i, yb.i) + S_MUL (scratch[9].i, ya.i);
+    scratch[12].i = S_MUL (scratch[10].r, yb.i) - S_MUL (scratch[9].r, ya.i);
+
+    C_ADD (*Fout2, scratch[11], scratch[12]);
+    C_SUB (*Fout3, scratch[11], scratch[12]);
+
+    ++Fout0;
+    ++Fout1;
+    ++Fout2;
+    ++Fout3;
+    ++Fout4;
+  }
+}
+
+/* perform the butterfly for one stage of a mixed radix FFT */
+static void
+kf_bfly_generic (kiss_fft_f32_cpx * Fout,
+    const size_t fstride, const kiss_fft_f32_cfg st, int m, int p)
+{
+  int u, k, q1, q;
+  kiss_fft_f32_cpx *twiddles = st->twiddles;
+  kiss_fft_f32_cpx t;
+  int Norig = st->nfft;
+
+  CHECKBUF (scratchbuf, nscratchbuf, p);
+
+  for (u = 0; u < m; ++u) {
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      scratchbuf[q1] = Fout[k];
+      C_FIXDIV (scratchbuf[q1], p);
+      k += m;
+    }
+
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      int twidx = 0;
+
+      Fout[k] = scratchbuf[0];
+      for (q = 1; q < p; ++q) {
+        twidx += fstride * k;
+        if (twidx >= Norig)
+          twidx -= Norig;
+        C_MUL (t, scratchbuf[q], twiddles[twidx]);
+        C_ADDTO (Fout[k], t);
+      }
+      k += m;
+    }
+  }
+}
+
+static void
+kf_work (kiss_fft_f32_cpx * Fout,
+    const kiss_fft_f32_cpx * f,
+    const size_t fstride,
+    int in_stride, int *factors, const kiss_fft_f32_cfg st)
+{
+  kiss_fft_f32_cpx *Fout_beg = Fout;
+  const int p = *factors++;     /* the radix  */
+  const int m = *factors++;     /* stage's fft length/p */
+  const kiss_fft_f32_cpx *Fout_end = Fout + p * m;
+
+#ifdef _OPENMP
+  // use openmp extensions at the 
+  // top-level (not recursive)
+  if (fstride == 1) {
+    int k;
+
+    // execute the p different work units in different threads
+#       pragma omp parallel for
+    for (k = 0; k < p; ++k)
+      kf_work (Fout + k * m, f + fstride * in_stride * k, fstride * p,
+          in_stride, factors, st);
+    // all threads have joined by this point
+
+    switch (p) {
+      case 2:
+        kf_bfly2 (Fout, fstride, st, m);
+        break;
+      case 3:
+        kf_bfly3 (Fout, fstride, st, m);
+        break;
+      case 4:
+        kf_bfly4 (Fout, fstride, st, m);
+        break;
+      case 5:
+        kf_bfly5 (Fout, fstride, st, m);
+        break;
+      default:
+        kf_bfly_generic (Fout, fstride, st, m, p);
+        break;
+    }
+    return;
+  }
+#endif
+
+  if (m == 1) {
+    do {
+      *Fout = *f;
+      f += fstride * in_stride;
+    } while (++Fout != Fout_end);
+  } else {
+    do {
+      // recursive call:
+      // DFT of size m*p performed by doing
+      // p instances of smaller DFTs of size m, 
+      // each one takes a decimated version of the input
+      kf_work (Fout, f, fstride * p, in_stride, factors, st);
+      f += fstride * in_stride;
+    } while ((Fout += m) != Fout_end);
+  }
+
+  Fout = Fout_beg;
+
+  // recombine the p smaller DFTs 
+  switch (p) {
+    case 2:
+      kf_bfly2 (Fout, fstride, st, m);
+      break;
+    case 3:
+      kf_bfly3 (Fout, fstride, st, m);
+      break;
+    case 4:
+      kf_bfly4 (Fout, fstride, st, m);
+      break;
+    case 5:
+      kf_bfly5 (Fout, fstride, st, m);
+      break;
+    default:
+      kf_bfly_generic (Fout, fstride, st, m, p);
+      break;
+  }
+}
+
+/*  facbuf is populated by p1,m1,p2,m2, ...
+    where 
+    p[i] * m[i] = m[i-1]
+    m0 = n                  */
+static void
+kf_factor (int n, int *facbuf)
+{
+  int p = 4;
+  double floor_sqrt;
+
+  floor_sqrt = floor (sqrt ((double) n));
+
+  /*factor out powers of 4, powers of 2, then any remaining primes */
+  do {
+    while (n % p) {
+      switch (p) {
+        case 4:
+          p = 2;
+          break;
+        case 2:
+          p = 3;
+          break;
+        default:
+          p += 2;
+          break;
+      }
+      if (p > floor_sqrt)
+        p = n;                  /* no more factors, skip to end */
+    }
+    n /= p;
+    *facbuf++ = p;
+    *facbuf++ = n;
+  } while (n > 1);
+}
+
+/*
+ *
+ * User-callable function to allocate all necessary storage space for the fft.
+ *
+ * The return value is a contiguous block of memory, allocated with malloc.  As such,
+ * It can be freed with free(), rather than a kiss_fft-specific function.
+ * */
+kiss_fft_f32_cfg
+kiss_fft_f32_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  kiss_fft_f32_cfg st = NULL;
+  size_t memneeded = sizeof (struct kiss_fft_f32_state)
+      + sizeof (kiss_fft_f32_cpx) * (nfft - 1); /* twiddle factors */
+
+  if (lenmem == NULL) {
+    st = (kiss_fft_f32_cfg) KISS_FFT_F32_MALLOC (memneeded);
+  } else {
+    if (mem != NULL && *lenmem >= memneeded)
+      st = (kiss_fft_f32_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (st) {
+    int i;
+
+    st->nfft = nfft;
+    st->inverse = inverse_fft;
+
+    for (i = 0; i < nfft; ++i) {
+      const double pi =
+          3.141592653589793238462643383279502884197169399375105820974944;
+      double phase = -2 * pi * i / nfft;
+
+      if (st->inverse)
+        phase *= -1;
+      kf_cexp (st->twiddles + i, phase);
+    }
+
+    kf_factor (nfft, st->factors);
+  }
+  return st;
+}
+
+
+
+
+void
+kiss_fft_f32_stride (kiss_fft_f32_cfg st, const kiss_fft_f32_cpx * fin,
+    kiss_fft_f32_cpx * fout, int in_stride)
+{
+  if (fin == fout) {
+    CHECKBUF (tmpbuf, ntmpbuf, st->nfft);
+    kf_work (tmpbuf, fin, 1, in_stride, st->factors, st);
+    memcpy (fout, tmpbuf, sizeof (kiss_fft_f32_cpx) * st->nfft);
+  } else {
+    kf_work (fout, fin, 1, in_stride, st->factors, st);
+  }
+}
+
+void
+kiss_fft_f32 (kiss_fft_f32_cfg cfg, const kiss_fft_f32_cpx * fin,
+    kiss_fft_f32_cpx * fout)
+{
+  kiss_fft_f32_stride (cfg, fin, fout, 1);
+}
+
+
+/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the 
+   buffers from CHECKBUF
+ */
+void
+kiss_fft_f32_cleanup (void)
+{
+  free (scratchbuf);
+  scratchbuf = NULL;
+  nscratchbuf = 0;
+  free (tmpbuf);
+  tmpbuf = NULL;
+  ntmpbuf = 0;
+}
+
+int
+kiss_fft_f32_next_fast_size (int n)
+{
+  while (1) {
+    int m = n;
+
+    while ((m % 2) == 0)
+      m /= 2;
+    while ((m % 3) == 0)
+      m /= 3;
+    while ((m % 5) == 0)
+      m /= 5;
+    if (m <= 1)
+      break;                    /* n is completely factorable by twos, threes, and fives */
+    n++;
+  }
+  return n;
+}
diff --git a/gst-libs/gst/fft/kiss_fft_f32.h b/gst-libs/gst/fft/kiss_fft_f32.h
new file mode 100644
index 0000000..098b89d
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_f32.h
@@ -0,0 +1,103 @@
+#ifndef KISS_FFT_F32_H
+#define KISS_FFT_F32_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ ATTENTION!
+ If you would like a :
+ -- a utility that will handle the caching of fft objects
+ -- real-only (no imaginary time component ) FFT
+ -- a multi-dimensional FFT
+ -- a command-line utility to perform ffts
+ -- a command-line utility to perform fast-convolution filtering
+
+ Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
+  in the tools/ directory.
+*/
+
+#define KISS_FFT_F32_MALLOC g_malloc
+#define kiss_fft_f32_scalar float
+
+typedef struct {
+    kiss_fft_f32_scalar r;
+    kiss_fft_f32_scalar i;
+}kiss_fft_f32_cpx;
+
+typedef struct kiss_fft_f32_state* kiss_fft_f32_cfg;
+
+/* 
+ *  kiss_fft_f32_alloc
+ *  
+ *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
+ *
+ *  typical usage:      kiss_fft_f32_cfg mycfg=kiss_fft_f32_alloc(1024,0,NULL,NULL);
+ *
+ *  The return value from fft_alloc is a cfg buffer used internally
+ *  by the fft routine or NULL.
+ *
+ *  If lenmem is NULL, then kiss_fft_f32_alloc will allocate a cfg buffer using malloc.
+ *  The returned value should be free()d when done to avoid memory leaks.
+ *  
+ *  The state can be placed in a user supplied buffer 'mem':
+ *  If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
+ *      then the function places the cfg in mem and the size used in *lenmem
+ *      and returns mem.
+ *  
+ *  If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
+ *      then the function returns NULL and places the minimum cfg 
+ *      buffer size in *lenmem.
+ * */
+
+kiss_fft_f32_cfg kiss_fft_f32_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); 
+
+/*
+ * kiss_fft(cfg,in_out_buf)
+ *
+ * Perform an FFT on a complex input buffer.
+ * for a forward FFT,
+ * fin should be  f[0] , f[1] , ... ,f[nfft-1]
+ * fout will be   F[0] , F[1] , ... ,F[nfft-1]
+ * Note that each element is complex and can be accessed like
+    f[k].r and f[k].i
+ * */
+void kiss_fft_f32(kiss_fft_f32_cfg cfg,const kiss_fft_f32_cpx *fin,kiss_fft_f32_cpx *fout);
+
+/*
+ A more generic version of the above function. It reads its input from every Nth sample.
+ * */
+void kiss_fft_f32_stride(kiss_fft_f32_cfg cfg,const kiss_fft_f32_cpx *fin,kiss_fft_f32_cpx *fout,int fin_stride);
+
+/* If kiss_fft_f32_alloc allocated a buffer, it is one contiguous 
+   buffer and can be simply free()d when no longer needed*/
+#define kiss_fft_f32_free g_free
+
+/*
+ Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up 
+ your compiler output to call this before you exit.
+*/
+void kiss_fft_f32_cleanup(void);
+	
+
+/*
+ * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
+ */
+int kiss_fft_f32_next_fast_size(int n);
+
+/* for real ffts, we need an even size */
+#define kiss_fftr_next_fast_size_real(n) \
+        (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
+
+#ifdef __cplusplus
+} 
+#endif
+
+#endif
diff --git a/gst-libs/gst/fft/kiss_fft_f64.c b/gst-libs/gst/fft/kiss_fft_f64.c
new file mode 100644
index 0000000..b311711
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_f64.c
@@ -0,0 +1,472 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "_kiss_fft_guts_f64.h"
+/* The guts header contains all the multiplication and addition macros that are defined for
+ fixed or floating point complex numbers.  It also delares the kf_ internal functions.
+ */
+
+static kiss_fft_f64_cpx *scratchbuf = NULL;
+static size_t nscratchbuf = 0;
+static kiss_fft_f64_cpx *tmpbuf = NULL;
+static size_t ntmpbuf = 0;
+
+#define CHECKBUF(buf,nbuf,n) \
+    do { \
+        if ( nbuf < (size_t)(n) ) {\
+            free(buf); \
+            buf = (kiss_fft_f64_cpx*)KISS_FFT_F64_MALLOC(sizeof(kiss_fft_f64_cpx)*(n)); \
+            nbuf = (size_t)(n); \
+        } \
+   }while(0)
+
+
+static void
+kf_bfly2 (kiss_fft_f64_cpx * Fout,
+    const size_t fstride, const kiss_fft_f64_cfg st, int m)
+{
+  kiss_fft_f64_cpx *Fout2;
+  kiss_fft_f64_cpx *tw1 = st->twiddles;
+  kiss_fft_f64_cpx t;
+
+  Fout2 = Fout + m;
+  do {
+    C_FIXDIV (*Fout, 2);
+    C_FIXDIV (*Fout2, 2);
+
+    C_MUL (t, *Fout2, *tw1);
+    tw1 += fstride;
+    C_SUB (*Fout2, *Fout, t);
+    C_ADDTO (*Fout, t);
+    ++Fout2;
+    ++Fout;
+  } while (--m);
+}
+
+static void
+kf_bfly4 (kiss_fft_f64_cpx * Fout,
+    const size_t fstride, const kiss_fft_f64_cfg st, const size_t m)
+{
+  kiss_fft_f64_cpx *tw1, *tw2, *tw3;
+  kiss_fft_f64_cpx scratch[6];
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  const size_t m3 = 3 * m;
+
+  tw3 = tw2 = tw1 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 4);
+    C_FIXDIV (Fout[m], 4);
+    C_FIXDIV (Fout[m2], 4);
+    C_FIXDIV (Fout[m3], 4);
+
+    C_MUL (scratch[0], Fout[m], *tw1);
+    C_MUL (scratch[1], Fout[m2], *tw2);
+    C_MUL (scratch[2], Fout[m3], *tw3);
+
+    C_SUB (scratch[5], *Fout, scratch[1]);
+    C_ADDTO (*Fout, scratch[1]);
+    C_ADD (scratch[3], scratch[0], scratch[2]);
+    C_SUB (scratch[4], scratch[0], scratch[2]);
+    C_SUB (Fout[m2], *Fout, scratch[3]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+    tw3 += fstride * 3;
+    C_ADDTO (*Fout, scratch[3]);
+
+    if (st->inverse) {
+      Fout[m].r = scratch[5].r - scratch[4].i;
+      Fout[m].i = scratch[5].i + scratch[4].r;
+      Fout[m3].r = scratch[5].r + scratch[4].i;
+      Fout[m3].i = scratch[5].i - scratch[4].r;
+    } else {
+      Fout[m].r = scratch[5].r + scratch[4].i;
+      Fout[m].i = scratch[5].i - scratch[4].r;
+      Fout[m3].r = scratch[5].r - scratch[4].i;
+      Fout[m3].i = scratch[5].i + scratch[4].r;
+    }
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly3 (kiss_fft_f64_cpx * Fout,
+    const size_t fstride, const kiss_fft_f64_cfg st, size_t m)
+{
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  kiss_fft_f64_cpx *tw1, *tw2;
+  kiss_fft_f64_cpx scratch[5];
+  kiss_fft_f64_cpx epi3;
+
+  epi3 = st->twiddles[fstride * m];
+
+  tw1 = tw2 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 3);
+    C_FIXDIV (Fout[m], 3);
+    C_FIXDIV (Fout[m2], 3);
+
+    C_MUL (scratch[1], Fout[m], *tw1);
+    C_MUL (scratch[2], Fout[m2], *tw2);
+
+    C_ADD (scratch[3], scratch[1], scratch[2]);
+    C_SUB (scratch[0], scratch[1], scratch[2]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+
+    Fout[m].r = Fout->r - HALF_OF (scratch[3].r);
+    Fout[m].i = Fout->i - HALF_OF (scratch[3].i);
+
+    C_MULBYSCALAR (scratch[0], epi3.i);
+
+    C_ADDTO (*Fout, scratch[3]);
+
+    Fout[m2].r = Fout[m].r + scratch[0].i;
+    Fout[m2].i = Fout[m].i - scratch[0].r;
+
+    Fout[m].r -= scratch[0].i;
+    Fout[m].i += scratch[0].r;
+
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly5 (kiss_fft_f64_cpx * Fout,
+    const size_t fstride, const kiss_fft_f64_cfg st, int m)
+{
+  kiss_fft_f64_cpx *Fout0, *Fout1, *Fout2, *Fout3, *Fout4;
+  int u;
+  kiss_fft_f64_cpx scratch[13];
+  kiss_fft_f64_cpx *twiddles = st->twiddles;
+  kiss_fft_f64_cpx *tw;
+  kiss_fft_f64_cpx ya, yb;
+
+  ya = twiddles[fstride * m];
+  yb = twiddles[fstride * 2 * m];
+
+  Fout0 = Fout;
+  Fout1 = Fout0 + m;
+  Fout2 = Fout0 + 2 * m;
+  Fout3 = Fout0 + 3 * m;
+  Fout4 = Fout0 + 4 * m;
+
+  tw = st->twiddles;
+  for (u = 0; u < m; ++u) {
+    C_FIXDIV (*Fout0, 5);
+    C_FIXDIV (*Fout1, 5);
+    C_FIXDIV (*Fout2, 5);
+    C_FIXDIV (*Fout3, 5);
+    C_FIXDIV (*Fout4, 5);
+    scratch[0] = *Fout0;
+
+    C_MUL (scratch[1], *Fout1, tw[u * fstride]);
+    C_MUL (scratch[2], *Fout2, tw[2 * u * fstride]);
+    C_MUL (scratch[3], *Fout3, tw[3 * u * fstride]);
+    C_MUL (scratch[4], *Fout4, tw[4 * u * fstride]);
+
+    C_ADD (scratch[7], scratch[1], scratch[4]);
+    C_SUB (scratch[10], scratch[1], scratch[4]);
+    C_ADD (scratch[8], scratch[2], scratch[3]);
+    C_SUB (scratch[9], scratch[2], scratch[3]);
+
+    Fout0->r += scratch[7].r + scratch[8].r;
+    Fout0->i += scratch[7].i + scratch[8].i;
+
+    scratch[5].r =
+        scratch[0].r + S_MUL (scratch[7].r, ya.r) + S_MUL (scratch[8].r, yb.r);
+    scratch[5].i =
+        scratch[0].i + S_MUL (scratch[7].i, ya.r) + S_MUL (scratch[8].i, yb.r);
+
+    scratch[6].r = S_MUL (scratch[10].i, ya.i) + S_MUL (scratch[9].i, yb.i);
+    scratch[6].i = -S_MUL (scratch[10].r, ya.i) - S_MUL (scratch[9].r, yb.i);
+
+    C_SUB (*Fout1, scratch[5], scratch[6]);
+    C_ADD (*Fout4, scratch[5], scratch[6]);
+
+    scratch[11].r =
+        scratch[0].r + S_MUL (scratch[7].r, yb.r) + S_MUL (scratch[8].r, ya.r);
+    scratch[11].i =
+        scratch[0].i + S_MUL (scratch[7].i, yb.r) + S_MUL (scratch[8].i, ya.r);
+    scratch[12].r = -S_MUL (scratch[10].i, yb.i) + S_MUL (scratch[9].i, ya.i);
+    scratch[12].i = S_MUL (scratch[10].r, yb.i) - S_MUL (scratch[9].r, ya.i);
+
+    C_ADD (*Fout2, scratch[11], scratch[12]);
+    C_SUB (*Fout3, scratch[11], scratch[12]);
+
+    ++Fout0;
+    ++Fout1;
+    ++Fout2;
+    ++Fout3;
+    ++Fout4;
+  }
+}
+
+/* perform the butterfly for one stage of a mixed radix FFT */
+static void
+kf_bfly_generic (kiss_fft_f64_cpx * Fout,
+    const size_t fstride, const kiss_fft_f64_cfg st, int m, int p)
+{
+  int u, k, q1, q;
+  kiss_fft_f64_cpx *twiddles = st->twiddles;
+  kiss_fft_f64_cpx t;
+  int Norig = st->nfft;
+
+  CHECKBUF (scratchbuf, nscratchbuf, p);
+
+  for (u = 0; u < m; ++u) {
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      scratchbuf[q1] = Fout[k];
+      C_FIXDIV (scratchbuf[q1], p);
+      k += m;
+    }
+
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      int twidx = 0;
+
+      Fout[k] = scratchbuf[0];
+      for (q = 1; q < p; ++q) {
+        twidx += fstride * k;
+        if (twidx >= Norig)
+          twidx -= Norig;
+        C_MUL (t, scratchbuf[q], twiddles[twidx]);
+        C_ADDTO (Fout[k], t);
+      }
+      k += m;
+    }
+  }
+}
+
+static void
+kf_work (kiss_fft_f64_cpx * Fout,
+    const kiss_fft_f64_cpx * f,
+    const size_t fstride,
+    int in_stride, int *factors, const kiss_fft_f64_cfg st)
+{
+  kiss_fft_f64_cpx *Fout_beg = Fout;
+  const int p = *factors++;     /* the radix  */
+  const int m = *factors++;     /* stage's fft length/p */
+  const kiss_fft_f64_cpx *Fout_end = Fout + p * m;
+
+#ifdef _OPENMP
+  // use openmp extensions at the 
+  // top-level (not recursive)
+  if (fstride == 1) {
+    int k;
+
+    // execute the p different work units in different threads
+#       pragma omp parallel for
+    for (k = 0; k < p; ++k)
+      kf_work (Fout + k * m, f + fstride * in_stride * k, fstride * p,
+          in_stride, factors, st);
+    // all threads have joined by this point
+
+    switch (p) {
+      case 2:
+        kf_bfly2 (Fout, fstride, st, m);
+        break;
+      case 3:
+        kf_bfly3 (Fout, fstride, st, m);
+        break;
+      case 4:
+        kf_bfly4 (Fout, fstride, st, m);
+        break;
+      case 5:
+        kf_bfly5 (Fout, fstride, st, m);
+        break;
+      default:
+        kf_bfly_generic (Fout, fstride, st, m, p);
+        break;
+    }
+    return;
+  }
+#endif
+
+  if (m == 1) {
+    do {
+      *Fout = *f;
+      f += fstride * in_stride;
+    } while (++Fout != Fout_end);
+  } else {
+    do {
+      // recursive call:
+      // DFT of size m*p performed by doing
+      // p instances of smaller DFTs of size m, 
+      // each one takes a decimated version of the input
+      kf_work (Fout, f, fstride * p, in_stride, factors, st);
+      f += fstride * in_stride;
+    } while ((Fout += m) != Fout_end);
+  }
+
+  Fout = Fout_beg;
+
+  // recombine the p smaller DFTs 
+  switch (p) {
+    case 2:
+      kf_bfly2 (Fout, fstride, st, m);
+      break;
+    case 3:
+      kf_bfly3 (Fout, fstride, st, m);
+      break;
+    case 4:
+      kf_bfly4 (Fout, fstride, st, m);
+      break;
+    case 5:
+      kf_bfly5 (Fout, fstride, st, m);
+      break;
+    default:
+      kf_bfly_generic (Fout, fstride, st, m, p);
+      break;
+  }
+}
+
+/*  facbuf is populated by p1,m1,p2,m2, ...
+    where 
+    p[i] * m[i] = m[i-1]
+    m0 = n                  */
+static void
+kf_factor (int n, int *facbuf)
+{
+  int p = 4;
+  double floor_sqrt;
+
+  floor_sqrt = floor (sqrt ((double) n));
+
+  /*factor out powers of 4, powers of 2, then any remaining primes */
+  do {
+    while (n % p) {
+      switch (p) {
+        case 4:
+          p = 2;
+          break;
+        case 2:
+          p = 3;
+          break;
+        default:
+          p += 2;
+          break;
+      }
+      if (p > floor_sqrt)
+        p = n;                  /* no more factors, skip to end */
+    }
+    n /= p;
+    *facbuf++ = p;
+    *facbuf++ = n;
+  } while (n > 1);
+}
+
+/*
+ *
+ * User-callable function to allocate all necessary storage space for the fft.
+ *
+ * The return value is a contiguous block of memory, allocated with malloc.  As such,
+ * It can be freed with free(), rather than a kiss_fft-specific function.
+ * */
+kiss_fft_f64_cfg
+kiss_fft_f64_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  kiss_fft_f64_cfg st = NULL;
+  const double pi =
+      3.141592653589793238462643383279502884197169399375105820974944;
+  size_t memneeded = sizeof (struct kiss_fft_f64_state)
+      + sizeof (kiss_fft_f64_cpx) * (nfft - 1); /* twiddle factors */
+
+  if (lenmem == NULL) {
+    st = (kiss_fft_f64_cfg) KISS_FFT_F64_MALLOC (memneeded);
+  } else {
+    if (mem != NULL && *lenmem >= memneeded)
+      st = (kiss_fft_f64_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (st) {
+    int i;
+
+    st->nfft = nfft;
+    st->inverse = inverse_fft;
+
+    for (i = 0; i < nfft; ++i) {
+      double phase = -2 * pi * i / nfft;
+
+      if (st->inverse)
+        phase *= -1;
+      kf_cexp (st->twiddles + i, phase);
+    }
+
+    kf_factor (nfft, st->factors);
+  }
+  return st;
+}
+
+
+
+
+void
+kiss_fft_f64_stride (kiss_fft_f64_cfg st, const kiss_fft_f64_cpx * fin,
+    kiss_fft_f64_cpx * fout, int in_stride)
+{
+  if (fin == fout) {
+    CHECKBUF (tmpbuf, ntmpbuf, st->nfft);
+    kf_work (tmpbuf, fin, 1, in_stride, st->factors, st);
+    memcpy (fout, tmpbuf, sizeof (kiss_fft_f64_cpx) * st->nfft);
+  } else {
+    kf_work (fout, fin, 1, in_stride, st->factors, st);
+  }
+}
+
+void
+kiss_fft_f64 (kiss_fft_f64_cfg cfg, const kiss_fft_f64_cpx * fin,
+    kiss_fft_f64_cpx * fout)
+{
+  kiss_fft_f64_stride (cfg, fin, fout, 1);
+}
+
+
+/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the 
+   buffers from CHECKBUF
+ */
+void
+kiss_fft_f64_cleanup (void)
+{
+  free (scratchbuf);
+  scratchbuf = NULL;
+  nscratchbuf = 0;
+  free (tmpbuf);
+  tmpbuf = NULL;
+  ntmpbuf = 0;
+}
+
+int
+kiss_fft_f64_next_fast_size (int n)
+{
+  while (1) {
+    int m = n;
+
+    while ((m % 2) == 0)
+      m /= 2;
+    while ((m % 3) == 0)
+      m /= 3;
+    while ((m % 5) == 0)
+      m /= 5;
+    if (m <= 1)
+      break;                    /* n is completely factorable by twos, threes, and fives */
+    n++;
+  }
+  return n;
+}
diff --git a/gst-libs/gst/fft/kiss_fft_f64.h b/gst-libs/gst/fft/kiss_fft_f64.h
new file mode 100644
index 0000000..90792bb
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_f64.h
@@ -0,0 +1,103 @@
+#ifndef KISS_FFT_F64_H
+#define KISS_FFT_F64_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ ATTENTION!
+ If you would like a :
+ -- a utility that will handle the caching of fft objects
+ -- real-only (no imaginary time component ) FFT
+ -- a multi-dimensional FFT
+ -- a command-line utility to perform ffts
+ -- a command-line utility to perform fast-convolution filtering
+
+ Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
+  in the tools/ directory.
+*/
+
+#define KISS_FFT_F64_MALLOC g_malloc
+#define kiss_fft_f64_scalar double
+
+typedef struct {
+    kiss_fft_f64_scalar r;
+    kiss_fft_f64_scalar i;
+}kiss_fft_f64_cpx;
+
+typedef struct kiss_fft_f64_state* kiss_fft_f64_cfg;
+
+/* 
+ *  kiss_fft_f64_alloc
+ *  
+ *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
+ *
+ *  typical usage:      kiss_fft_f64_cfg mycfg=kiss_fft_f64_alloc(1024,0,NULL,NULL);
+ *
+ *  The return value from fft_alloc is a cfg buffer used internally
+ *  by the fft routine or NULL.
+ *
+ *  If lenmem is NULL, then kiss_fft_f64_alloc will allocate a cfg buffer using malloc.
+ *  The returned value should be free()d when done to avoid memory leaks.
+ *  
+ *  The state can be placed in a user supplied buffer 'mem':
+ *  If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
+ *      then the function places the cfg in mem and the size used in *lenmem
+ *      and returns mem.
+ *  
+ *  If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
+ *      then the function returns NULL and places the minimum cfg 
+ *      buffer size in *lenmem.
+ * */
+
+kiss_fft_f64_cfg kiss_fft_f64_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); 
+
+/*
+ * kiss_fft(cfg,in_out_buf)
+ *
+ * Perform an FFT on a complex input buffer.
+ * for a forward FFT,
+ * fin should be  f[0] , f[1] , ... ,f[nfft-1]
+ * fout will be   F[0] , F[1] , ... ,F[nfft-1]
+ * Note that each element is complex and can be accessed like
+    f[k].r and f[k].i
+ * */
+void kiss_fft_f64(kiss_fft_f64_cfg cfg,const kiss_fft_f64_cpx *fin,kiss_fft_f64_cpx *fout);
+
+/*
+ A more generic version of the above function. It reads its input from every Nth sample.
+ * */
+void kiss_fft_f64_stride(kiss_fft_f64_cfg cfg,const kiss_fft_f64_cpx *fin,kiss_fft_f64_cpx *fout,int fin_stride);
+
+/* If kiss_fft_f64_alloc allocated a buffer, it is one contiguous 
+   buffer and can be simply free()d when no longer needed*/
+#define kiss_fft_f64_free g_free
+
+/*
+ Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up 
+ your compiler output to call this before you exit.
+*/
+void kiss_fft_f64_cleanup(void);
+	
+
+/*
+ * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
+ */
+int kiss_fft_f64_next_fast_size(int n);
+
+/* for real ffts, we need an even size */
+#define kiss_fftr_next_fast_size_real(n) \
+        (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
+
+#ifdef __cplusplus
+} 
+#endif
+
+#endif
diff --git a/gst-libs/gst/fft/kiss_fft_s16.c b/gst-libs/gst/fft/kiss_fft_s16.c
new file mode 100644
index 0000000..ee2de4e
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_s16.c
@@ -0,0 +1,472 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "_kiss_fft_guts_s16.h"
+/* The guts header contains all the multiplication and addition macros that are defined for
+ fixed or floating point complex numbers.  It also delares the kf_ internal functions.
+ */
+
+static kiss_fft_s16_cpx *scratchbuf = NULL;
+static size_t nscratchbuf = 0;
+static kiss_fft_s16_cpx *tmpbuf = NULL;
+static size_t ntmpbuf = 0;
+
+#define CHECKBUF(buf,nbuf,n) \
+    do { \
+        if ( nbuf < (size_t)(n) ) {\
+            free(buf); \
+            buf = (kiss_fft_s16_cpx*)KISS_FFT_S16_MALLOC(sizeof(kiss_fft_s16_cpx)*(n)); \
+            nbuf = (size_t)(n); \
+        } \
+   }while(0)
+
+
+static void
+kf_bfly2 (kiss_fft_s16_cpx * Fout,
+    const size_t fstride, const kiss_fft_s16_cfg st, int m)
+{
+  kiss_fft_s16_cpx *Fout2;
+  kiss_fft_s16_cpx *tw1 = st->twiddles;
+  kiss_fft_s16_cpx t;
+
+  Fout2 = Fout + m;
+  do {
+    C_FIXDIV (*Fout, 2);
+    C_FIXDIV (*Fout2, 2);
+
+    C_MUL (t, *Fout2, *tw1);
+    tw1 += fstride;
+    C_SUB (*Fout2, *Fout, t);
+    C_ADDTO (*Fout, t);
+    ++Fout2;
+    ++Fout;
+  } while (--m);
+}
+
+static void
+kf_bfly4 (kiss_fft_s16_cpx * Fout,
+    const size_t fstride, const kiss_fft_s16_cfg st, const size_t m)
+{
+  kiss_fft_s16_cpx *tw1, *tw2, *tw3;
+  kiss_fft_s16_cpx scratch[6];
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  const size_t m3 = 3 * m;
+
+  tw3 = tw2 = tw1 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 4);
+    C_FIXDIV (Fout[m], 4);
+    C_FIXDIV (Fout[m2], 4);
+    C_FIXDIV (Fout[m3], 4);
+
+    C_MUL (scratch[0], Fout[m], *tw1);
+    C_MUL (scratch[1], Fout[m2], *tw2);
+    C_MUL (scratch[2], Fout[m3], *tw3);
+
+    C_SUB (scratch[5], *Fout, scratch[1]);
+    C_ADDTO (*Fout, scratch[1]);
+    C_ADD (scratch[3], scratch[0], scratch[2]);
+    C_SUB (scratch[4], scratch[0], scratch[2]);
+    C_SUB (Fout[m2], *Fout, scratch[3]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+    tw3 += fstride * 3;
+    C_ADDTO (*Fout, scratch[3]);
+
+    if (st->inverse) {
+      Fout[m].r = scratch[5].r - scratch[4].i;
+      Fout[m].i = scratch[5].i + scratch[4].r;
+      Fout[m3].r = scratch[5].r + scratch[4].i;
+      Fout[m3].i = scratch[5].i - scratch[4].r;
+    } else {
+      Fout[m].r = scratch[5].r + scratch[4].i;
+      Fout[m].i = scratch[5].i - scratch[4].r;
+      Fout[m3].r = scratch[5].r - scratch[4].i;
+      Fout[m3].i = scratch[5].i + scratch[4].r;
+    }
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly3 (kiss_fft_s16_cpx * Fout,
+    const size_t fstride, const kiss_fft_s16_cfg st, size_t m)
+{
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  kiss_fft_s16_cpx *tw1, *tw2;
+  kiss_fft_s16_cpx scratch[5];
+  kiss_fft_s16_cpx epi3;
+
+  epi3 = st->twiddles[fstride * m];
+
+  tw1 = tw2 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 3);
+    C_FIXDIV (Fout[m], 3);
+    C_FIXDIV (Fout[m2], 3);
+
+    C_MUL (scratch[1], Fout[m], *tw1);
+    C_MUL (scratch[2], Fout[m2], *tw2);
+
+    C_ADD (scratch[3], scratch[1], scratch[2]);
+    C_SUB (scratch[0], scratch[1], scratch[2]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+
+    Fout[m].r = Fout->r - HALF_OF (scratch[3].r);
+    Fout[m].i = Fout->i - HALF_OF (scratch[3].i);
+
+    C_MULBYSCALAR (scratch[0], epi3.i);
+
+    C_ADDTO (*Fout, scratch[3]);
+
+    Fout[m2].r = Fout[m].r + scratch[0].i;
+    Fout[m2].i = Fout[m].i - scratch[0].r;
+
+    Fout[m].r -= scratch[0].i;
+    Fout[m].i += scratch[0].r;
+
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly5 (kiss_fft_s16_cpx * Fout,
+    const size_t fstride, const kiss_fft_s16_cfg st, int m)
+{
+  kiss_fft_s16_cpx *Fout0, *Fout1, *Fout2, *Fout3, *Fout4;
+  int u;
+  kiss_fft_s16_cpx scratch[13];
+  kiss_fft_s16_cpx *twiddles = st->twiddles;
+  kiss_fft_s16_cpx *tw;
+  kiss_fft_s16_cpx ya, yb;
+
+  ya = twiddles[fstride * m];
+  yb = twiddles[fstride * 2 * m];
+
+  Fout0 = Fout;
+  Fout1 = Fout0 + m;
+  Fout2 = Fout0 + 2 * m;
+  Fout3 = Fout0 + 3 * m;
+  Fout4 = Fout0 + 4 * m;
+
+  tw = st->twiddles;
+  for (u = 0; u < m; ++u) {
+    C_FIXDIV (*Fout0, 5);
+    C_FIXDIV (*Fout1, 5);
+    C_FIXDIV (*Fout2, 5);
+    C_FIXDIV (*Fout3, 5);
+    C_FIXDIV (*Fout4, 5);
+    scratch[0] = *Fout0;
+
+    C_MUL (scratch[1], *Fout1, tw[u * fstride]);
+    C_MUL (scratch[2], *Fout2, tw[2 * u * fstride]);
+    C_MUL (scratch[3], *Fout3, tw[3 * u * fstride]);
+    C_MUL (scratch[4], *Fout4, tw[4 * u * fstride]);
+
+    C_ADD (scratch[7], scratch[1], scratch[4]);
+    C_SUB (scratch[10], scratch[1], scratch[4]);
+    C_ADD (scratch[8], scratch[2], scratch[3]);
+    C_SUB (scratch[9], scratch[2], scratch[3]);
+
+    Fout0->r += scratch[7].r + scratch[8].r;
+    Fout0->i += scratch[7].i + scratch[8].i;
+
+    scratch[5].r =
+        scratch[0].r + S_MUL (scratch[7].r, ya.r) + S_MUL (scratch[8].r, yb.r);
+    scratch[5].i =
+        scratch[0].i + S_MUL (scratch[7].i, ya.r) + S_MUL (scratch[8].i, yb.r);
+
+    scratch[6].r = S_MUL (scratch[10].i, ya.i) + S_MUL (scratch[9].i, yb.i);
+    scratch[6].i = -S_MUL (scratch[10].r, ya.i) - S_MUL (scratch[9].r, yb.i);
+
+    C_SUB (*Fout1, scratch[5], scratch[6]);
+    C_ADD (*Fout4, scratch[5], scratch[6]);
+
+    scratch[11].r =
+        scratch[0].r + S_MUL (scratch[7].r, yb.r) + S_MUL (scratch[8].r, ya.r);
+    scratch[11].i =
+        scratch[0].i + S_MUL (scratch[7].i, yb.r) + S_MUL (scratch[8].i, ya.r);
+    scratch[12].r = -S_MUL (scratch[10].i, yb.i) + S_MUL (scratch[9].i, ya.i);
+    scratch[12].i = S_MUL (scratch[10].r, yb.i) - S_MUL (scratch[9].r, ya.i);
+
+    C_ADD (*Fout2, scratch[11], scratch[12]);
+    C_SUB (*Fout3, scratch[11], scratch[12]);
+
+    ++Fout0;
+    ++Fout1;
+    ++Fout2;
+    ++Fout3;
+    ++Fout4;
+  }
+}
+
+/* perform the butterfly for one stage of a mixed radix FFT */
+static void
+kf_bfly_generic (kiss_fft_s16_cpx * Fout,
+    const size_t fstride, const kiss_fft_s16_cfg st, int m, int p)
+{
+  int u, k, q1, q;
+  kiss_fft_s16_cpx *twiddles = st->twiddles;
+  kiss_fft_s16_cpx t;
+  int Norig = st->nfft;
+
+  CHECKBUF (scratchbuf, nscratchbuf, p);
+
+  for (u = 0; u < m; ++u) {
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      scratchbuf[q1] = Fout[k];
+      C_FIXDIV (scratchbuf[q1], p);
+      k += m;
+    }
+
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      int twidx = 0;
+
+      Fout[k] = scratchbuf[0];
+      for (q = 1; q < p; ++q) {
+        twidx += fstride * k;
+        if (twidx >= Norig)
+          twidx -= Norig;
+        C_MUL (t, scratchbuf[q], twiddles[twidx]);
+        C_ADDTO (Fout[k], t);
+      }
+      k += m;
+    }
+  }
+}
+
+static void
+kf_work (kiss_fft_s16_cpx * Fout,
+    const kiss_fft_s16_cpx * f,
+    const size_t fstride,
+    int in_stride, int *factors, const kiss_fft_s16_cfg st)
+{
+  kiss_fft_s16_cpx *Fout_beg = Fout;
+  const int p = *factors++;     /* the radix  */
+  const int m = *factors++;     /* stage's fft length/p */
+  const kiss_fft_s16_cpx *Fout_end = Fout + p * m;
+
+#ifdef _OPENMP
+  // use openmp extensions at the 
+  // top-level (not recursive)
+  if (fstride == 1) {
+    int k;
+
+    // execute the p different work units in different threads
+#       pragma omp parallel for
+    for (k = 0; k < p; ++k)
+      kf_work (Fout + k * m, f + fstride * in_stride * k, fstride * p,
+          in_stride, factors, st);
+    // all threads have joined by this point
+
+    switch (p) {
+      case 2:
+        kf_bfly2 (Fout, fstride, st, m);
+        break;
+      case 3:
+        kf_bfly3 (Fout, fstride, st, m);
+        break;
+      case 4:
+        kf_bfly4 (Fout, fstride, st, m);
+        break;
+      case 5:
+        kf_bfly5 (Fout, fstride, st, m);
+        break;
+      default:
+        kf_bfly_generic (Fout, fstride, st, m, p);
+        break;
+    }
+    return;
+  }
+#endif
+
+  if (m == 1) {
+    do {
+      *Fout = *f;
+      f += fstride * in_stride;
+    } while (++Fout != Fout_end);
+  } else {
+    do {
+      // recursive call:
+      // DFT of size m*p performed by doing
+      // p instances of smaller DFTs of size m, 
+      // each one takes a decimated version of the input
+      kf_work (Fout, f, fstride * p, in_stride, factors, st);
+      f += fstride * in_stride;
+    } while ((Fout += m) != Fout_end);
+  }
+
+  Fout = Fout_beg;
+
+  // recombine the p smaller DFTs 
+  switch (p) {
+    case 2:
+      kf_bfly2 (Fout, fstride, st, m);
+      break;
+    case 3:
+      kf_bfly3 (Fout, fstride, st, m);
+      break;
+    case 4:
+      kf_bfly4 (Fout, fstride, st, m);
+      break;
+    case 5:
+      kf_bfly5 (Fout, fstride, st, m);
+      break;
+    default:
+      kf_bfly_generic (Fout, fstride, st, m, p);
+      break;
+  }
+}
+
+/*  facbuf is populated by p1,m1,p2,m2, ...
+    where 
+    p[i] * m[i] = m[i-1]
+    m0 = n                  */
+static void
+kf_factor (int n, int *facbuf)
+{
+  int p = 4;
+  double floor_sqrt;
+
+  floor_sqrt = floor (sqrt ((double) n));
+
+  /*factor out powers of 4, powers of 2, then any remaining primes */
+  do {
+    while (n % p) {
+      switch (p) {
+        case 4:
+          p = 2;
+          break;
+        case 2:
+          p = 3;
+          break;
+        default:
+          p += 2;
+          break;
+      }
+      if (p > floor_sqrt)
+        p = n;                  /* no more factors, skip to end */
+    }
+    n /= p;
+    *facbuf++ = p;
+    *facbuf++ = n;
+  } while (n > 1);
+}
+
+/*
+ *
+ * User-callable function to allocate all necessary storage space for the fft.
+ *
+ * The return value is a contiguous block of memory, allocated with malloc.  As such,
+ * It can be freed with free(), rather than a kiss_fft-specific function.
+ * */
+kiss_fft_s16_cfg
+kiss_fft_s16_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  kiss_fft_s16_cfg st = NULL;
+  size_t memneeded = sizeof (struct kiss_fft_s16_state)
+      + sizeof (kiss_fft_s16_cpx) * (nfft - 1); /* twiddle factors */
+
+  if (lenmem == NULL) {
+    st = (kiss_fft_s16_cfg) KISS_FFT_S16_MALLOC (memneeded);
+  } else {
+    if (mem != NULL && *lenmem >= memneeded)
+      st = (kiss_fft_s16_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (st) {
+    int i;
+
+    st->nfft = nfft;
+    st->inverse = inverse_fft;
+
+    for (i = 0; i < nfft; ++i) {
+      const double pi =
+          3.141592653589793238462643383279502884197169399375105820974944;
+      double phase = -2 * pi * i / nfft;
+
+      if (st->inverse)
+        phase *= -1;
+      kf_cexp (st->twiddles + i, phase);
+    }
+
+    kf_factor (nfft, st->factors);
+  }
+  return st;
+}
+
+
+
+
+void
+kiss_fft_s16_stride (kiss_fft_s16_cfg st, const kiss_fft_s16_cpx * fin,
+    kiss_fft_s16_cpx * fout, int in_stride)
+{
+  if (fin == fout) {
+    CHECKBUF (tmpbuf, ntmpbuf, st->nfft);
+    kf_work (tmpbuf, fin, 1, in_stride, st->factors, st);
+    memcpy (fout, tmpbuf, sizeof (kiss_fft_s16_cpx) * st->nfft);
+  } else {
+    kf_work (fout, fin, 1, in_stride, st->factors, st);
+  }
+}
+
+void
+kiss_fft_s16 (kiss_fft_s16_cfg cfg, const kiss_fft_s16_cpx * fin,
+    kiss_fft_s16_cpx * fout)
+{
+  kiss_fft_s16_stride (cfg, fin, fout, 1);
+}
+
+
+/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the 
+   buffers from CHECKBUF
+ */
+void
+kiss_fft_s16_cleanup (void)
+{
+  free (scratchbuf);
+  scratchbuf = NULL;
+  nscratchbuf = 0;
+  free (tmpbuf);
+  tmpbuf = NULL;
+  ntmpbuf = 0;
+}
+
+int
+kiss_fft_s16_next_fast_size (int n)
+{
+  while (1) {
+    int m = n;
+
+    while ((m % 2) == 0)
+      m /= 2;
+    while ((m % 3) == 0)
+      m /= 3;
+    while ((m % 5) == 0)
+      m /= 5;
+    if (m <= 1)
+      break;                    /* n is completely factorable by twos, threes, and fives */
+    n++;
+  }
+  return n;
+}
diff --git a/gst-libs/gst/fft/kiss_fft_s16.h b/gst-libs/gst/fft/kiss_fft_s16.h
new file mode 100644
index 0000000..4303127
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_s16.h
@@ -0,0 +1,106 @@
+#ifndef KISS_FFT_S16_H
+#define KISS_FFT_S16_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ ATTENTION!
+ If you would like a :
+ -- a utility that will handle the caching of fft objects
+ -- real-only (no imaginary time component ) FFT
+ -- a multi-dimensional FFT
+ -- a command-line utility to perform ffts
+ -- a command-line utility to perform fast-convolution filtering
+
+ Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
+  in the tools/ directory.
+*/
+
+#define KISS_FFT_S16_MALLOC g_malloc
+
+#include "_stdint.h"
+
+#define kiss_fft_s16_scalar int16_t
+
+typedef struct {
+    kiss_fft_s16_scalar r;
+    kiss_fft_s16_scalar i;
+}kiss_fft_s16_cpx;
+
+typedef struct kiss_fft_s16_state* kiss_fft_s16_cfg;
+
+/* 
+ *  kiss_fft_s16_alloc
+ *  
+ *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
+ *
+ *  typical usage:      kiss_fft_s16_cfg mycfg=kiss_fft_s16_alloc(1024,0,NULL,NULL);
+ *
+ *  The return value from fft_alloc is a cfg buffer used internally
+ *  by the fft routine or NULL.
+ *
+ *  If lenmem is NULL, then kiss_fft_s16_alloc will allocate a cfg buffer using malloc.
+ *  The returned value should be free()d when done to avoid memory leaks.
+ *  
+ *  The state can be placed in a user supplied buffer 'mem':
+ *  If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
+ *      then the function places the cfg in mem and the size used in *lenmem
+ *      and returns mem.
+ *  
+ *  If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
+ *      then the function returns NULL and places the minimum cfg 
+ *      buffer size in *lenmem.
+ * */
+
+kiss_fft_s16_cfg kiss_fft_s16_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); 
+
+/*
+ * kiss_fft(cfg,in_out_buf)
+ *
+ * Perform an FFT on a complex input buffer.
+ * for a forward FFT,
+ * fin should be  f[0] , f[1] , ... ,f[nfft-1]
+ * fout will be   F[0] , F[1] , ... ,F[nfft-1]
+ * Note that each element is complex and can be accessed like
+    f[k].r and f[k].i
+ * */
+void kiss_fft_s16(kiss_fft_s16_cfg cfg,const kiss_fft_s16_cpx *fin,kiss_fft_s16_cpx *fout);
+
+/*
+ A more generic version of the above function. It reads its input from every Nth sample.
+ * */
+void kiss_fft_s16_stride(kiss_fft_s16_cfg cfg,const kiss_fft_s16_cpx *fin,kiss_fft_s16_cpx *fout,int fin_stride);
+
+/* If kiss_fft_s16_alloc allocated a buffer, it is one contiguous 
+   buffer and can be simply free()d when no longer needed*/
+#define kiss_fft_s16_free g_free
+
+/*
+ Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up 
+ your compiler output to call this before you exit.
+*/
+void kiss_fft_s16_cleanup(void);
+	
+
+/*
+ * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
+ */
+int kiss_fft_s16_next_fast_size(int n);
+
+/* for real ffts, we need an even size */
+#define kiss_fftr_next_fast_size_real(n) \
+        (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
+
+#ifdef __cplusplus
+} 
+#endif
+
+#endif
diff --git a/gst-libs/gst/fft/kiss_fft_s32.c b/gst-libs/gst/fft/kiss_fft_s32.c
new file mode 100644
index 0000000..5acb2ed
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_s32.c
@@ -0,0 +1,472 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "_kiss_fft_guts_s32.h"
+/* The guts header contains all the multiplication and addition macros that are defined for
+ fixed or floating point complex numbers.  It also delares the kf_ internal functions.
+ */
+
+static kiss_fft_s32_cpx *scratchbuf = NULL;
+static size_t nscratchbuf = 0;
+static kiss_fft_s32_cpx *tmpbuf = NULL;
+static size_t ntmpbuf = 0;
+
+#define CHECKBUF(buf,nbuf,n) \
+    do { \
+        if ( nbuf < (size_t)(n) ) {\
+            free(buf); \
+            buf = (kiss_fft_s32_cpx*)KISS_FFT_S32_MALLOC(sizeof(kiss_fft_s32_cpx)*(n)); \
+            nbuf = (size_t)(n); \
+        } \
+   }while(0)
+
+
+static void
+kf_bfly2 (kiss_fft_s32_cpx * Fout,
+    const size_t fstride, const kiss_fft_s32_cfg st, int m)
+{
+  kiss_fft_s32_cpx *Fout2;
+  kiss_fft_s32_cpx *tw1 = st->twiddles;
+  kiss_fft_s32_cpx t;
+
+  Fout2 = Fout + m;
+  do {
+    C_FIXDIV (*Fout, 2);
+    C_FIXDIV (*Fout2, 2);
+
+    C_MUL (t, *Fout2, *tw1);
+    tw1 += fstride;
+    C_SUB (*Fout2, *Fout, t);
+    C_ADDTO (*Fout, t);
+    ++Fout2;
+    ++Fout;
+  } while (--m);
+}
+
+static void
+kf_bfly4 (kiss_fft_s32_cpx * Fout,
+    const size_t fstride, const kiss_fft_s32_cfg st, const size_t m)
+{
+  kiss_fft_s32_cpx *tw1, *tw2, *tw3;
+  kiss_fft_s32_cpx scratch[6];
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  const size_t m3 = 3 * m;
+
+  tw3 = tw2 = tw1 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 4);
+    C_FIXDIV (Fout[m], 4);
+    C_FIXDIV (Fout[m2], 4);
+    C_FIXDIV (Fout[m3], 4);
+
+    C_MUL (scratch[0], Fout[m], *tw1);
+    C_MUL (scratch[1], Fout[m2], *tw2);
+    C_MUL (scratch[2], Fout[m3], *tw3);
+
+    C_SUB (scratch[5], *Fout, scratch[1]);
+    C_ADDTO (*Fout, scratch[1]);
+    C_ADD (scratch[3], scratch[0], scratch[2]);
+    C_SUB (scratch[4], scratch[0], scratch[2]);
+    C_SUB (Fout[m2], *Fout, scratch[3]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+    tw3 += fstride * 3;
+    C_ADDTO (*Fout, scratch[3]);
+
+    if (st->inverse) {
+      Fout[m].r = scratch[5].r - scratch[4].i;
+      Fout[m].i = scratch[5].i + scratch[4].r;
+      Fout[m3].r = scratch[5].r + scratch[4].i;
+      Fout[m3].i = scratch[5].i - scratch[4].r;
+    } else {
+      Fout[m].r = scratch[5].r + scratch[4].i;
+      Fout[m].i = scratch[5].i - scratch[4].r;
+      Fout[m3].r = scratch[5].r - scratch[4].i;
+      Fout[m3].i = scratch[5].i + scratch[4].r;
+    }
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly3 (kiss_fft_s32_cpx * Fout,
+    const size_t fstride, const kiss_fft_s32_cfg st, size_t m)
+{
+  size_t k = m;
+  const size_t m2 = 2 * m;
+  kiss_fft_s32_cpx *tw1, *tw2;
+  kiss_fft_s32_cpx scratch[5];
+  kiss_fft_s32_cpx epi3;
+
+  epi3 = st->twiddles[fstride * m];
+
+  tw1 = tw2 = st->twiddles;
+
+  do {
+    C_FIXDIV (*Fout, 3);
+    C_FIXDIV (Fout[m], 3);
+    C_FIXDIV (Fout[m2], 3);
+
+    C_MUL (scratch[1], Fout[m], *tw1);
+    C_MUL (scratch[2], Fout[m2], *tw2);
+
+    C_ADD (scratch[3], scratch[1], scratch[2]);
+    C_SUB (scratch[0], scratch[1], scratch[2]);
+    tw1 += fstride;
+    tw2 += fstride * 2;
+
+    Fout[m].r = Fout->r - HALF_OF (scratch[3].r);
+    Fout[m].i = Fout->i - HALF_OF (scratch[3].i);
+
+    C_MULBYSCALAR (scratch[0], epi3.i);
+
+    C_ADDTO (*Fout, scratch[3]);
+
+    Fout[m2].r = Fout[m].r + scratch[0].i;
+    Fout[m2].i = Fout[m].i - scratch[0].r;
+
+    Fout[m].r -= scratch[0].i;
+    Fout[m].i += scratch[0].r;
+
+    ++Fout;
+  } while (--k);
+}
+
+static void
+kf_bfly5 (kiss_fft_s32_cpx * Fout,
+    const size_t fstride, const kiss_fft_s32_cfg st, int m)
+{
+  kiss_fft_s32_cpx *Fout0, *Fout1, *Fout2, *Fout3, *Fout4;
+  int u;
+  kiss_fft_s32_cpx scratch[13];
+  kiss_fft_s32_cpx *twiddles = st->twiddles;
+  kiss_fft_s32_cpx *tw;
+  kiss_fft_s32_cpx ya, yb;
+
+  ya = twiddles[fstride * m];
+  yb = twiddles[fstride * 2 * m];
+
+  Fout0 = Fout;
+  Fout1 = Fout0 + m;
+  Fout2 = Fout0 + 2 * m;
+  Fout3 = Fout0 + 3 * m;
+  Fout4 = Fout0 + 4 * m;
+
+  tw = st->twiddles;
+  for (u = 0; u < m; ++u) {
+    C_FIXDIV (*Fout0, 5);
+    C_FIXDIV (*Fout1, 5);
+    C_FIXDIV (*Fout2, 5);
+    C_FIXDIV (*Fout3, 5);
+    C_FIXDIV (*Fout4, 5);
+    scratch[0] = *Fout0;
+
+    C_MUL (scratch[1], *Fout1, tw[u * fstride]);
+    C_MUL (scratch[2], *Fout2, tw[2 * u * fstride]);
+    C_MUL (scratch[3], *Fout3, tw[3 * u * fstride]);
+    C_MUL (scratch[4], *Fout4, tw[4 * u * fstride]);
+
+    C_ADD (scratch[7], scratch[1], scratch[4]);
+    C_SUB (scratch[10], scratch[1], scratch[4]);
+    C_ADD (scratch[8], scratch[2], scratch[3]);
+    C_SUB (scratch[9], scratch[2], scratch[3]);
+
+    Fout0->r += scratch[7].r + scratch[8].r;
+    Fout0->i += scratch[7].i + scratch[8].i;
+
+    scratch[5].r =
+        scratch[0].r + S_MUL (scratch[7].r, ya.r) + S_MUL (scratch[8].r, yb.r);
+    scratch[5].i =
+        scratch[0].i + S_MUL (scratch[7].i, ya.r) + S_MUL (scratch[8].i, yb.r);
+
+    scratch[6].r = S_MUL (scratch[10].i, ya.i) + S_MUL (scratch[9].i, yb.i);
+    scratch[6].i = -S_MUL (scratch[10].r, ya.i) - S_MUL (scratch[9].r, yb.i);
+
+    C_SUB (*Fout1, scratch[5], scratch[6]);
+    C_ADD (*Fout4, scratch[5], scratch[6]);
+
+    scratch[11].r =
+        scratch[0].r + S_MUL (scratch[7].r, yb.r) + S_MUL (scratch[8].r, ya.r);
+    scratch[11].i =
+        scratch[0].i + S_MUL (scratch[7].i, yb.r) + S_MUL (scratch[8].i, ya.r);
+    scratch[12].r = -S_MUL (scratch[10].i, yb.i) + S_MUL (scratch[9].i, ya.i);
+    scratch[12].i = S_MUL (scratch[10].r, yb.i) - S_MUL (scratch[9].r, ya.i);
+
+    C_ADD (*Fout2, scratch[11], scratch[12]);
+    C_SUB (*Fout3, scratch[11], scratch[12]);
+
+    ++Fout0;
+    ++Fout1;
+    ++Fout2;
+    ++Fout3;
+    ++Fout4;
+  }
+}
+
+/* perform the butterfly for one stage of a mixed radix FFT */
+static void
+kf_bfly_generic (kiss_fft_s32_cpx * Fout,
+    const size_t fstride, const kiss_fft_s32_cfg st, int m, int p)
+{
+  int u, k, q1, q;
+  kiss_fft_s32_cpx *twiddles = st->twiddles;
+  kiss_fft_s32_cpx t;
+  int Norig = st->nfft;
+
+  CHECKBUF (scratchbuf, nscratchbuf, p);
+
+  for (u = 0; u < m; ++u) {
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      scratchbuf[q1] = Fout[k];
+      C_FIXDIV (scratchbuf[q1], p);
+      k += m;
+    }
+
+    k = u;
+    for (q1 = 0; q1 < p; ++q1) {
+      int twidx = 0;
+
+      Fout[k] = scratchbuf[0];
+      for (q = 1; q < p; ++q) {
+        twidx += fstride * k;
+        if (twidx >= Norig)
+          twidx -= Norig;
+        C_MUL (t, scratchbuf[q], twiddles[twidx]);
+        C_ADDTO (Fout[k], t);
+      }
+      k += m;
+    }
+  }
+}
+
+static void
+kf_work (kiss_fft_s32_cpx * Fout,
+    const kiss_fft_s32_cpx * f,
+    const size_t fstride,
+    int in_stride, int *factors, const kiss_fft_s32_cfg st)
+{
+  kiss_fft_s32_cpx *Fout_beg = Fout;
+  const int p = *factors++;     /* the radix  */
+  const int m = *factors++;     /* stage's fft length/p */
+  const kiss_fft_s32_cpx *Fout_end = Fout + p * m;
+
+#ifdef _OPENMP
+  // use openmp extensions at the 
+  // top-level (not recursive)
+  if (fstride == 1) {
+    int k;
+
+    // execute the p different work units in different threads
+#       pragma omp parallel for
+    for (k = 0; k < p; ++k)
+      kf_work (Fout + k * m, f + fstride * in_stride * k, fstride * p,
+          in_stride, factors, st);
+    // all threads have joined by this point
+
+    switch (p) {
+      case 2:
+        kf_bfly2 (Fout, fstride, st, m);
+        break;
+      case 3:
+        kf_bfly3 (Fout, fstride, st, m);
+        break;
+      case 4:
+        kf_bfly4 (Fout, fstride, st, m);
+        break;
+      case 5:
+        kf_bfly5 (Fout, fstride, st, m);
+        break;
+      default:
+        kf_bfly_generic (Fout, fstride, st, m, p);
+        break;
+    }
+    return;
+  }
+#endif
+
+  if (m == 1) {
+    do {
+      *Fout = *f;
+      f += fstride * in_stride;
+    } while (++Fout != Fout_end);
+  } else {
+    do {
+      // recursive call:
+      // DFT of size m*p performed by doing
+      // p instances of smaller DFTs of size m, 
+      // each one takes a decimated version of the input
+      kf_work (Fout, f, fstride * p, in_stride, factors, st);
+      f += fstride * in_stride;
+    } while ((Fout += m) != Fout_end);
+  }
+
+  Fout = Fout_beg;
+
+  // recombine the p smaller DFTs 
+  switch (p) {
+    case 2:
+      kf_bfly2 (Fout, fstride, st, m);
+      break;
+    case 3:
+      kf_bfly3 (Fout, fstride, st, m);
+      break;
+    case 4:
+      kf_bfly4 (Fout, fstride, st, m);
+      break;
+    case 5:
+      kf_bfly5 (Fout, fstride, st, m);
+      break;
+    default:
+      kf_bfly_generic (Fout, fstride, st, m, p);
+      break;
+  }
+}
+
+/*  facbuf is populated by p1,m1,p2,m2, ...
+    where 
+    p[i] * m[i] = m[i-1]
+    m0 = n                  */
+static void
+kf_factor (int n, int *facbuf)
+{
+  int p = 4;
+  double floor_sqrt;
+
+  floor_sqrt = floor (sqrt ((double) n));
+
+  /*factor out powers of 4, powers of 2, then any remaining primes */
+  do {
+    while (n % p) {
+      switch (p) {
+        case 4:
+          p = 2;
+          break;
+        case 2:
+          p = 3;
+          break;
+        default:
+          p += 2;
+          break;
+      }
+      if (p > floor_sqrt)
+        p = n;                  /* no more factors, skip to end */
+    }
+    n /= p;
+    *facbuf++ = p;
+    *facbuf++ = n;
+  } while (n > 1);
+}
+
+/*
+ *
+ * User-callable function to allocate all necessary storage space for the fft.
+ *
+ * The return value is a contiguous block of memory, allocated with malloc.  As such,
+ * It can be freed with free(), rather than a kiss_fft-specific function.
+ * */
+kiss_fft_s32_cfg
+kiss_fft_s32_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  kiss_fft_s32_cfg st = NULL;
+  size_t memneeded = sizeof (struct kiss_fft_s32_state)
+      + sizeof (kiss_fft_s32_cpx) * (nfft - 1); /* twiddle factors */
+
+  if (lenmem == NULL) {
+    st = (kiss_fft_s32_cfg) KISS_FFT_S32_MALLOC (memneeded);
+  } else {
+    if (mem != NULL && *lenmem >= memneeded)
+      st = (kiss_fft_s32_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (st) {
+    int i;
+
+    st->nfft = nfft;
+    st->inverse = inverse_fft;
+
+    for (i = 0; i < nfft; ++i) {
+      const double pi =
+          3.141592653589793238462643383279502884197169399375105820974944;
+      double phase = -2 * pi * i / nfft;
+
+      if (st->inverse)
+        phase *= -1;
+      kf_cexp (st->twiddles + i, phase);
+    }
+
+    kf_factor (nfft, st->factors);
+  }
+  return st;
+}
+
+
+
+
+void
+kiss_fft_s32_stride (kiss_fft_s32_cfg st, const kiss_fft_s32_cpx * fin,
+    kiss_fft_s32_cpx * fout, int in_stride)
+{
+  if (fin == fout) {
+    CHECKBUF (tmpbuf, ntmpbuf, st->nfft);
+    kf_work (tmpbuf, fin, 1, in_stride, st->factors, st);
+    memcpy (fout, tmpbuf, sizeof (kiss_fft_s32_cpx) * st->nfft);
+  } else {
+    kf_work (fout, fin, 1, in_stride, st->factors, st);
+  }
+}
+
+void
+kiss_fft_s32 (kiss_fft_s32_cfg cfg, const kiss_fft_s32_cpx * fin,
+    kiss_fft_s32_cpx * fout)
+{
+  kiss_fft_s32_stride (cfg, fin, fout, 1);
+}
+
+
+/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the 
+   buffers from CHECKBUF
+ */
+void
+kiss_fft_s32_cleanup (void)
+{
+  free (scratchbuf);
+  scratchbuf = NULL;
+  nscratchbuf = 0;
+  free (tmpbuf);
+  tmpbuf = NULL;
+  ntmpbuf = 0;
+}
+
+int
+kiss_fft_s32_next_fast_size (int n)
+{
+  while (1) {
+    int m = n;
+
+    while ((m % 2) == 0)
+      m /= 2;
+    while ((m % 3) == 0)
+      m /= 3;
+    while ((m % 5) == 0)
+      m /= 5;
+    if (m <= 1)
+      break;                    /* n is completely factorable by twos, threes, and fives */
+    n++;
+  }
+  return n;
+}
diff --git a/gst-libs/gst/fft/kiss_fft_s32.h b/gst-libs/gst/fft/kiss_fft_s32.h
new file mode 100644
index 0000000..8edd664
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fft_s32.h
@@ -0,0 +1,107 @@
+#ifndef KISS_FFT_S32_H
+#define KISS_FFT_S32_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ ATTENTION!
+ If you would like a :
+ -- a utility that will handle the caching of fft objects
+ -- real-only (no imaginary time component ) FFT
+ -- a multi-dimensional FFT
+ -- a command-line utility to perform ffts
+ -- a command-line utility to perform fast-convolution filtering
+
+ Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
+  in the tools/ directory.
+*/
+
+#define KISS_FFT_S32_MALLOC g_malloc
+
+
+#include "_stdint.h"
+
+#define kiss_fft_s32_scalar int32_t
+
+typedef struct {
+    kiss_fft_s32_scalar r;
+    kiss_fft_s32_scalar i;
+}kiss_fft_s32_cpx;
+
+typedef struct kiss_fft_s32_state* kiss_fft_s32_cfg;
+
+/* 
+ *  kiss_fft_s32_alloc
+ *  
+ *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
+ *
+ *  typical usage:      kiss_fft_s32_cfg mycfg=kiss_fft_s32_alloc(1024,0,NULL,NULL);
+ *
+ *  The return value from fft_alloc is a cfg buffer used internally
+ *  by the fft routine or NULL.
+ *
+ *  If lenmem is NULL, then kiss_fft_s32_alloc will allocate a cfg buffer using malloc.
+ *  The returned value should be free()d when done to avoid memory leaks.
+ *  
+ *  The state can be placed in a user supplied buffer 'mem':
+ *  If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
+ *      then the function places the cfg in mem and the size used in *lenmem
+ *      and returns mem.
+ *  
+ *  If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
+ *      then the function returns NULL and places the minimum cfg 
+ *      buffer size in *lenmem.
+ * */
+
+kiss_fft_s32_cfg kiss_fft_s32_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); 
+
+/*
+ * kiss_fft(cfg,in_out_buf)
+ *
+ * Perform an FFT on a complex input buffer.
+ * for a forward FFT,
+ * fin should be  f[0] , f[1] , ... ,f[nfft-1]
+ * fout will be   F[0] , F[1] , ... ,F[nfft-1]
+ * Note that each element is complex and can be accessed like
+    f[k].r and f[k].i
+ * */
+void kiss_fft_s32(kiss_fft_s32_cfg cfg,const kiss_fft_s32_cpx *fin,kiss_fft_s32_cpx *fout);
+
+/*
+ A more generic version of the above function. It reads its input from every Nth sample.
+ * */
+void kiss_fft_s32_stride(kiss_fft_s32_cfg cfg,const kiss_fft_s32_cpx *fin,kiss_fft_s32_cpx *fout,int fin_stride);
+
+/* If kiss_fft_s32_alloc allocated a buffer, it is one contiguous 
+   buffer and can be simply free()d when no longer needed*/
+#define kiss_fft_s32_free g_free
+
+/*
+ Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up 
+ your compiler output to call this before you exit.
+*/
+void kiss_fft_s32_cleanup(void);
+	
+
+/*
+ * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
+ */
+int kiss_fft_s32_next_fast_size(int n);
+
+/* for real ffts, we need an even size */
+#define kiss_fftr_next_fast_size_real(n) \
+        (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
+
+#ifdef __cplusplus
+} 
+#endif
+
+#endif
diff --git a/gst-libs/gst/fft/kiss_fftr_f32.c b/gst-libs/gst/fft/kiss_fftr_f32.c
new file mode 100644
index 0000000..ab11c04
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_f32.c
@@ -0,0 +1,169 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "kiss_fftr_f32.h"
+#include "_kiss_fft_guts_f32.h"
+
+struct kiss_fftr_f32_state
+{
+  kiss_fft_f32_cfg substate;
+  kiss_fft_f32_cpx *tmpbuf;
+  kiss_fft_f32_cpx *super_twiddles;
+#ifdef USE_SIMD
+  long pad;
+#endif
+};
+
+kiss_fftr_f32_cfg
+kiss_fftr_f32_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  int i;
+  kiss_fftr_f32_cfg st = NULL;
+  size_t subsize, memneeded;
+
+  if (nfft & 1) {
+    fprintf (stderr, "Real FFT optimization must be even.\n");
+    return NULL;
+  }
+  nfft >>= 1;
+
+  kiss_fft_f32_alloc (nfft, inverse_fft, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (struct kiss_fftr_f32_state))
+      + ALIGN_STRUCT (subsize) + sizeof (kiss_fft_f32_cpx) * (nfft * 3 / 2);
+
+  if (lenmem == NULL) {
+    st = (kiss_fftr_f32_cfg) KISS_FFT_F32_MALLOC (memneeded);
+  } else {
+    if (*lenmem >= memneeded)
+      st = (kiss_fftr_f32_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (!st)
+    return NULL;
+
+  st->substate = (kiss_fft_f32_cfg) (((char *) st) + ALIGN_STRUCT (sizeof (struct kiss_fftr_f32_state)));       /*just beyond kiss_fftr_f32_state struct */
+  st->tmpbuf =
+      (kiss_fft_f32_cpx *) (((char *) st->substate) + ALIGN_STRUCT (subsize));
+  st->super_twiddles = st->tmpbuf + nfft;
+  kiss_fft_f32_alloc (nfft, inverse_fft, st->substate, &subsize);
+
+  for (i = 0; i < nfft / 2; ++i) {
+    double phase =
+        -3.14159265358979323846264338327 * ((double) (i + 1) / nfft + .5);
+
+    if (inverse_fft)
+      phase *= -1;
+    kf_cexp (st->super_twiddles + i, phase);
+  }
+  return st;
+}
+
+void
+kiss_fftr_f32 (kiss_fftr_f32_cfg st, const kiss_fft_f32_scalar * timedata,
+    kiss_fft_f32_cpx * freqdata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+  kiss_fft_f32_cpx fpnk, fpk, f1k, f2k, tw, tdc;
+
+  if (st->substate->inverse) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  /*perform the parallel fft of two real signals packed in real,imag */
+  kiss_fft_f32 (st->substate, (const kiss_fft_f32_cpx *) timedata, st->tmpbuf);
+  /* The real part of the DC element of the frequency spectrum in st->tmpbuf
+   * contains the sum of the even-numbered elements of the input time sequence
+   * The imag part is the sum of the odd-numbered elements
+   *
+   * The sum of tdc.r and tdc.i is the sum of the input time sequence. 
+   *      yielding DC of input time sequence
+   * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... 
+   *      yielding Nyquist bin of input time sequence
+   */
+
+  tdc.r = st->tmpbuf[0].r;
+  tdc.i = st->tmpbuf[0].i;
+  C_FIXDIV (tdc, 2);
+  CHECK_OVERFLOW_OP (tdc.r, +, tdc.i);
+  CHECK_OVERFLOW_OP (tdc.r, -, tdc.i);
+  freqdata[0].r = tdc.r + tdc.i;
+  freqdata[ncfft].r = tdc.r - tdc.i;
+#ifdef USE_SIMD
+  freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps (0);
+#else
+  freqdata[ncfft].i = freqdata[0].i = 0;
+#endif
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    fpk = st->tmpbuf[k];
+    fpnk.r = st->tmpbuf[ncfft - k].r;
+    fpnk.i = -st->tmpbuf[ncfft - k].i;
+    C_FIXDIV (fpk, 2);
+    C_FIXDIV (fpnk, 2);
+
+    C_ADD (f1k, fpk, fpnk);
+    C_SUB (f2k, fpk, fpnk);
+    C_MUL (tw, f2k, st->super_twiddles[k - 1]);
+
+    freqdata[k].r = HALF_OF (f1k.r + tw.r);
+    freqdata[k].i = HALF_OF (f1k.i + tw.i);
+    freqdata[ncfft - k].r = HALF_OF (f1k.r - tw.r);
+    freqdata[ncfft - k].i = HALF_OF (tw.i - f1k.i);
+  }
+}
+
+void
+kiss_fftri_f32 (kiss_fftr_f32_cfg st, const kiss_fft_f32_cpx * freqdata,
+    kiss_fft_f32_scalar * timedata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+
+  if (st->substate->inverse == 0) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r;
+  st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r;
+  C_FIXDIV (st->tmpbuf[0], 2);
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    kiss_fft_f32_cpx fk, fnkc, fek, fok, tmp;
+
+    fk = freqdata[k];
+    fnkc.r = freqdata[ncfft - k].r;
+    fnkc.i = -freqdata[ncfft - k].i;
+    C_FIXDIV (fk, 2);
+    C_FIXDIV (fnkc, 2);
+
+    C_ADD (fek, fk, fnkc);
+    C_SUB (tmp, fk, fnkc);
+    C_MUL (fok, tmp, st->super_twiddles[k - 1]);
+    C_ADD (st->tmpbuf[k], fek, fok);
+    C_SUB (st->tmpbuf[ncfft - k], fek, fok);
+#ifdef USE_SIMD
+    st->tmpbuf[ncfft - k].i *= _mm_set1_ps (-1.0);
+#else
+    st->tmpbuf[ncfft - k].i *= -1;
+#endif
+  }
+  kiss_fft_f32 (st->substate, st->tmpbuf, (kiss_fft_f32_cpx *) timedata);
+}
diff --git a/gst-libs/gst/fft/kiss_fftr_f32.h b/gst-libs/gst/fft/kiss_fftr_f32.h
new file mode 100644
index 0000000..91f2085
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_f32.h
@@ -0,0 +1,46 @@
+#ifndef KISS_FTR_F32_H
+#define KISS_FTR_F32_H
+
+#include "kiss_fft_f32.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    
+/* 
+ 
+ Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
+
+ 
+ 
+ */
+
+typedef struct kiss_fftr_f32_state *kiss_fftr_f32_cfg;
+
+
+kiss_fftr_f32_cfg kiss_fftr_f32_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
+/*
+ nfft must be even
+
+ If you don't care to allocate space, use mem = lenmem = NULL 
+*/
+
+
+void kiss_fftr_f32(kiss_fftr_f32_cfg cfg,const kiss_fft_f32_scalar *timedata,kiss_fft_f32_cpx *freqdata);
+/*
+ input timedata has nfft scalar points
+ output freqdata has nfft/2+1 complex points
+*/
+
+void kiss_fftri_f32(kiss_fftr_f32_cfg cfg,const kiss_fft_f32_cpx *freqdata,kiss_fft_f32_scalar *timedata);
+/*
+ input freqdata has  nfft/2+1 complex points
+ output timedata has nfft scalar points
+*/
+
+#define kiss_fftr_f32_free free
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gst-libs/gst/fft/kiss_fftr_f64.c b/gst-libs/gst/fft/kiss_fftr_f64.c
new file mode 100644
index 0000000..740be27
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_f64.c
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "kiss_fftr_f64.h"
+#include "_kiss_fft_guts_f64.h"
+
+struct kiss_fftr_f64_state
+{
+  kiss_fft_f64_cfg substate;
+  kiss_fft_f64_cpx *tmpbuf;
+  kiss_fft_f64_cpx *super_twiddles;
+#ifdef USE_SIMD
+  long pad;
+#endif
+};
+
+kiss_fftr_f64_cfg
+kiss_fftr_f64_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  int i;
+  kiss_fftr_f64_cfg st = NULL;
+  size_t subsize, memneeded;
+
+  if (nfft & 1) {
+    fprintf (stderr, "Real FFT optimization must be even.\n");
+    return NULL;
+  }
+  nfft >>= 1;
+
+  kiss_fft_f64_alloc (nfft, inverse_fft, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (struct kiss_fftr_f64_state))
+      + ALIGN_STRUCT (subsize)
+      + sizeof (kiss_fft_f64_cpx) * (nfft * 3 / 2);
+
+  if (lenmem == NULL) {
+    st = (kiss_fftr_f64_cfg) KISS_FFT_F64_MALLOC (memneeded);
+  } else {
+    if (*lenmem >= memneeded)
+      st = (kiss_fftr_f64_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (!st)
+    return NULL;
+
+  st->substate = (kiss_fft_f64_cfg) (((char *) st) + ALIGN_STRUCT (sizeof (struct kiss_fftr_f64_state)));       /*just beyond kiss_fftr_f64_state struct */
+  st->tmpbuf =
+      (kiss_fft_f64_cpx *) (((char *) st->substate) + ALIGN_STRUCT (subsize));
+  st->super_twiddles = st->tmpbuf + nfft;
+  kiss_fft_f64_alloc (nfft, inverse_fft, st->substate, &subsize);
+
+  for (i = 0; i < nfft / 2; ++i) {
+    double phase =
+        -3.14159265358979323846264338327 * ((double) (i + 1) / nfft + .5);
+
+    if (inverse_fft)
+      phase *= -1;
+    kf_cexp (st->super_twiddles + i, phase);
+  }
+  return st;
+}
+
+void
+kiss_fftr_f64 (kiss_fftr_f64_cfg st, const kiss_fft_f64_scalar * timedata,
+    kiss_fft_f64_cpx * freqdata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+  kiss_fft_f64_cpx fpnk, fpk, f1k, f2k, tw, tdc;
+
+  if (st->substate->inverse) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  /*perform the parallel fft of two real signals packed in real,imag */
+  kiss_fft_f64 (st->substate, (const kiss_fft_f64_cpx *) timedata, st->tmpbuf);
+  /* The real part of the DC element of the frequency spectrum in st->tmpbuf
+   * contains the sum of the even-numbered elements of the input time sequence
+   * The imag part is the sum of the odd-numbered elements
+   *
+   * The sum of tdc.r and tdc.i is the sum of the input time sequence. 
+   *      yielding DC of input time sequence
+   * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... 
+   *      yielding Nyquist bin of input time sequence
+   */
+
+  tdc.r = st->tmpbuf[0].r;
+  tdc.i = st->tmpbuf[0].i;
+  C_FIXDIV (tdc, 2);
+  CHECK_OVERFLOW_OP (tdc.r, +, tdc.i);
+  CHECK_OVERFLOW_OP (tdc.r, -, tdc.i);
+  freqdata[0].r = tdc.r + tdc.i;
+  freqdata[ncfft].r = tdc.r - tdc.i;
+#ifdef USE_SIMD
+  freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps (0);
+#else
+  freqdata[ncfft].i = freqdata[0].i = 0;
+#endif
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    fpk = st->tmpbuf[k];
+    fpnk.r = st->tmpbuf[ncfft - k].r;
+    fpnk.i = -st->tmpbuf[ncfft - k].i;
+    C_FIXDIV (fpk, 2);
+    C_FIXDIV (fpnk, 2);
+
+    C_ADD (f1k, fpk, fpnk);
+    C_SUB (f2k, fpk, fpnk);
+    C_MUL (tw, f2k, st->super_twiddles[k - 1]);
+
+    freqdata[k].r = HALF_OF (f1k.r + tw.r);
+    freqdata[k].i = HALF_OF (f1k.i + tw.i);
+    freqdata[ncfft - k].r = HALF_OF (f1k.r - tw.r);
+    freqdata[ncfft - k].i = HALF_OF (tw.i - f1k.i);
+  }
+}
+
+void
+kiss_fftri_f64 (kiss_fftr_f64_cfg st, const kiss_fft_f64_cpx * freqdata,
+    kiss_fft_f64_scalar * timedata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+
+  if (st->substate->inverse == 0) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r;
+  st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r;
+  C_FIXDIV (st->tmpbuf[0], 2);
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    kiss_fft_f64_cpx fk, fnkc, fek, fok, tmp;
+
+    fk = freqdata[k];
+    fnkc.r = freqdata[ncfft - k].r;
+    fnkc.i = -freqdata[ncfft - k].i;
+    C_FIXDIV (fk, 2);
+    C_FIXDIV (fnkc, 2);
+
+    C_ADD (fek, fk, fnkc);
+    C_SUB (tmp, fk, fnkc);
+    C_MUL (fok, tmp, st->super_twiddles[k - 1]);
+    C_ADD (st->tmpbuf[k], fek, fok);
+    C_SUB (st->tmpbuf[ncfft - k], fek, fok);
+#ifdef USE_SIMD
+    st->tmpbuf[ncfft - k].i *= _mm_set1_ps (-1.0);
+#else
+    st->tmpbuf[ncfft - k].i *= -1;
+#endif
+  }
+  kiss_fft_f64 (st->substate, st->tmpbuf, (kiss_fft_f64_cpx *) timedata);
+}
diff --git a/gst-libs/gst/fft/kiss_fftr_f64.h b/gst-libs/gst/fft/kiss_fftr_f64.h
new file mode 100644
index 0000000..0b35cb6
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_f64.h
@@ -0,0 +1,46 @@
+#ifndef KISS_FTR_F64_H
+#define KISS_FTR_F64_H
+
+#include "kiss_fft_f64.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    
+/* 
+ 
+ Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
+
+ 
+ 
+ */
+
+typedef struct kiss_fftr_f64_state *kiss_fftr_f64_cfg;
+
+
+kiss_fftr_f64_cfg kiss_fftr_f64_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
+/*
+ nfft must be even
+
+ If you don't care to allocate space, use mem = lenmem = NULL 
+*/
+
+
+void kiss_fftr_f64(kiss_fftr_f64_cfg cfg,const kiss_fft_f64_scalar *timedata,kiss_fft_f64_cpx *freqdata);
+/*
+ input timedata has nfft scalar points
+ output freqdata has nfft/2+1 complex points
+*/
+
+void kiss_fftri_f64(kiss_fftr_f64_cfg cfg,const kiss_fft_f64_cpx *freqdata,kiss_fft_f64_scalar *timedata);
+/*
+ input freqdata has  nfft/2+1 complex points
+ output timedata has nfft scalar points
+*/
+
+#define kiss_fftr_f64_free free
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gst-libs/gst/fft/kiss_fftr_s16.c b/gst-libs/gst/fft/kiss_fftr_s16.c
new file mode 100644
index 0000000..f1ec990
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_s16.c
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "kiss_fftr_s16.h"
+#include "_kiss_fft_guts_s16.h"
+
+struct kiss_fftr_s16_state
+{
+  kiss_fft_s16_cfg substate;
+  kiss_fft_s16_cpx *tmpbuf;
+  kiss_fft_s16_cpx *super_twiddles;
+#ifdef USE_SIMD
+  long pad;
+#endif
+};
+
+kiss_fftr_s16_cfg
+kiss_fftr_s16_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  int i;
+  kiss_fftr_s16_cfg st = NULL;
+  size_t subsize, memneeded;
+
+  if (nfft & 1) {
+    fprintf (stderr, "Real FFT optimization must be even.\n");
+    return NULL;
+  }
+  nfft >>= 1;
+
+  kiss_fft_s16_alloc (nfft, inverse_fft, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (struct kiss_fftr_s16_state))
+      + ALIGN_STRUCT (subsize)
+      + sizeof (kiss_fft_s16_cpx) * (nfft * 3 / 2);
+
+  if (lenmem == NULL) {
+    st = (kiss_fftr_s16_cfg) KISS_FFT_S16_MALLOC (memneeded);
+  } else {
+    if (*lenmem >= memneeded)
+      st = (kiss_fftr_s16_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (!st)
+    return NULL;
+
+  st->substate = (kiss_fft_s16_cfg) (((char *) st) + ALIGN_STRUCT (sizeof (struct kiss_fftr_s16_state)));       /*just beyond kiss_fftr_s16_state struct */
+  st->tmpbuf =
+      (kiss_fft_s16_cpx *) (((char *) st->substate) + ALIGN_STRUCT (subsize));
+  st->super_twiddles = st->tmpbuf + nfft;
+  kiss_fft_s16_alloc (nfft, inverse_fft, st->substate, &subsize);
+
+  for (i = 0; i < nfft / 2; ++i) {
+    double phase =
+        -3.14159265358979323846264338327 * ((double) (i + 1) / nfft + .5);
+
+    if (inverse_fft)
+      phase *= -1;
+    kf_cexp (st->super_twiddles + i, phase);
+  }
+  return st;
+}
+
+void
+kiss_fftr_s16 (kiss_fftr_s16_cfg st, const kiss_fft_s16_scalar * timedata,
+    kiss_fft_s16_cpx * freqdata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+  kiss_fft_s16_cpx fpnk, fpk, f1k, f2k, tw, tdc;
+
+  if (st->substate->inverse) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  /*perform the parallel fft of two real signals packed in real,imag */
+  kiss_fft_s16 (st->substate, (const kiss_fft_s16_cpx *) timedata, st->tmpbuf);
+  /* The real part of the DC element of the frequency spectrum in st->tmpbuf
+   * contains the sum of the even-numbered elements of the input time sequence
+   * The imag part is the sum of the odd-numbered elements
+   *
+   * The sum of tdc.r and tdc.i is the sum of the input time sequence. 
+   *      yielding DC of input time sequence
+   * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... 
+   *      yielding Nyquist bin of input time sequence
+   */
+
+  tdc.r = st->tmpbuf[0].r;
+  tdc.i = st->tmpbuf[0].i;
+  C_FIXDIV (tdc, 2);
+  CHECK_OVERFLOW_OP (tdc.r, +, tdc.i);
+  CHECK_OVERFLOW_OP (tdc.r, -, tdc.i);
+  freqdata[0].r = tdc.r + tdc.i;
+  freqdata[ncfft].r = tdc.r - tdc.i;
+#ifdef USE_SIMD
+  freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps (0);
+#else
+  freqdata[ncfft].i = freqdata[0].i = 0;
+#endif
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    fpk = st->tmpbuf[k];
+    fpnk.r = st->tmpbuf[ncfft - k].r;
+    fpnk.i = -st->tmpbuf[ncfft - k].i;
+    C_FIXDIV (fpk, 2);
+    C_FIXDIV (fpnk, 2);
+
+    C_ADD (f1k, fpk, fpnk);
+    C_SUB (f2k, fpk, fpnk);
+    C_MUL (tw, f2k, st->super_twiddles[k - 1]);
+
+    freqdata[k].r = HALF_OF (f1k.r + tw.r);
+    freqdata[k].i = HALF_OF (f1k.i + tw.i);
+    freqdata[ncfft - k].r = HALF_OF (f1k.r - tw.r);
+    freqdata[ncfft - k].i = HALF_OF (tw.i - f1k.i);
+  }
+}
+
+void
+kiss_fftri_s16 (kiss_fftr_s16_cfg st, const kiss_fft_s16_cpx * freqdata,
+    kiss_fft_s16_scalar * timedata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+
+  if (st->substate->inverse == 0) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r;
+  st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r;
+  C_FIXDIV (st->tmpbuf[0], 2);
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    kiss_fft_s16_cpx fk, fnkc, fek, fok, tmp;
+
+    fk = freqdata[k];
+    fnkc.r = freqdata[ncfft - k].r;
+    fnkc.i = -freqdata[ncfft - k].i;
+    C_FIXDIV (fk, 2);
+    C_FIXDIV (fnkc, 2);
+
+    C_ADD (fek, fk, fnkc);
+    C_SUB (tmp, fk, fnkc);
+    C_MUL (fok, tmp, st->super_twiddles[k - 1]);
+    C_ADD (st->tmpbuf[k], fek, fok);
+    C_SUB (st->tmpbuf[ncfft - k], fek, fok);
+#ifdef USE_SIMD
+    st->tmpbuf[ncfft - k].i *= _mm_set1_ps (-1.0);
+#else
+    st->tmpbuf[ncfft - k].i *= -1;
+#endif
+  }
+  kiss_fft_s16 (st->substate, st->tmpbuf, (kiss_fft_s16_cpx *) timedata);
+}
diff --git a/gst-libs/gst/fft/kiss_fftr_s16.h b/gst-libs/gst/fft/kiss_fftr_s16.h
new file mode 100644
index 0000000..20bc9ef
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_s16.h
@@ -0,0 +1,46 @@
+#ifndef KISS_FTR_S16_H
+#define KISS_FTR_S16_H
+
+#include "kiss_fft_s16.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    
+/* 
+ 
+ Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
+
+ 
+ 
+ */
+
+typedef struct kiss_fftr_s16_state *kiss_fftr_s16_cfg;
+
+
+kiss_fftr_s16_cfg kiss_fftr_s16_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
+/*
+ nfft must be even
+
+ If you don't care to allocate space, use mem = lenmem = NULL 
+*/
+
+
+void kiss_fftr_s16(kiss_fftr_s16_cfg cfg,const kiss_fft_s16_scalar *timedata,kiss_fft_s16_cpx *freqdata);
+/*
+ input timedata has nfft scalar points
+ output freqdata has nfft/2+1 complex points
+*/
+
+void kiss_fftri_s16(kiss_fftr_s16_cfg cfg,const kiss_fft_s16_cpx *freqdata,kiss_fft_s16_scalar *timedata);
+/*
+ input freqdata has  nfft/2+1 complex points
+ output timedata has nfft scalar points
+*/
+
+#define kiss_fftr_s16_free free
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gst-libs/gst/fft/kiss_fftr_s32.c b/gst-libs/gst/fft/kiss_fftr_s32.c
new file mode 100644
index 0000000..260da29
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_s32.c
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2003-2004, Mark Borgerding
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "kiss_fftr_s32.h"
+#include "_kiss_fft_guts_s32.h"
+
+struct kiss_fftr_s32_state
+{
+  kiss_fft_s32_cfg substate;
+  kiss_fft_s32_cpx *tmpbuf;
+  kiss_fft_s32_cpx *super_twiddles;
+#ifdef USE_SIMD
+  long pad;
+#endif
+};
+
+kiss_fftr_s32_cfg
+kiss_fftr_s32_alloc (int nfft, int inverse_fft, void *mem, size_t * lenmem)
+{
+  int i;
+  kiss_fftr_s32_cfg st = NULL;
+  size_t subsize, memneeded;
+
+  if (nfft & 1) {
+    fprintf (stderr, "Real FFT optimization must be even.\n");
+    return NULL;
+  }
+  nfft >>= 1;
+
+  kiss_fft_s32_alloc (nfft, inverse_fft, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (struct kiss_fftr_s32_state))
+      + ALIGN_STRUCT (subsize)
+      + sizeof (kiss_fft_s32_cpx) * (nfft * 3 / 2);
+
+  if (lenmem == NULL) {
+    st = (kiss_fftr_s32_cfg) KISS_FFT_S32_MALLOC (memneeded);
+  } else {
+    if (*lenmem >= memneeded)
+      st = (kiss_fftr_s32_cfg) mem;
+    *lenmem = memneeded;
+  }
+  if (!st)
+    return NULL;
+
+  st->substate = (kiss_fft_s32_cfg) (((char *) st) + ALIGN_STRUCT (sizeof (struct kiss_fftr_s32_state)));       /*just beyond kiss_fftr_s32_state struct */
+  st->tmpbuf =
+      (kiss_fft_s32_cpx *) (((char *) st->substate) + ALIGN_STRUCT (subsize));
+  st->super_twiddles = st->tmpbuf + nfft;
+  kiss_fft_s32_alloc (nfft, inverse_fft, st->substate, &subsize);
+
+  for (i = 0; i < nfft / 2; ++i) {
+    double phase =
+        -3.14159265358979323846264338327 * ((double) (i + 1) / nfft + .5);
+
+    if (inverse_fft)
+      phase *= -1;
+    kf_cexp (st->super_twiddles + i, phase);
+  }
+  return st;
+}
+
+void
+kiss_fftr_s32 (kiss_fftr_s32_cfg st, const kiss_fft_s32_scalar * timedata,
+    kiss_fft_s32_cpx * freqdata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+  kiss_fft_s32_cpx fpnk, fpk, f1k, f2k, tw, tdc;
+
+  if (st->substate->inverse) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  /*perform the parallel fft of two real signals packed in real,imag */
+  kiss_fft_s32 (st->substate, (const kiss_fft_s32_cpx *) timedata, st->tmpbuf);
+  /* The real part of the DC element of the frequency spectrum in st->tmpbuf
+   * contains the sum of the even-numbered elements of the input time sequence
+   * The imag part is the sum of the odd-numbered elements
+   *
+   * The sum of tdc.r and tdc.i is the sum of the input time sequence. 
+   *      yielding DC of input time sequence
+   * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... 
+   *      yielding Nyquist bin of input time sequence
+   */
+
+  tdc.r = st->tmpbuf[0].r;
+  tdc.i = st->tmpbuf[0].i;
+  C_FIXDIV (tdc, 2);
+  CHECK_OVERFLOW_OP (tdc.r, +, tdc.i);
+  CHECK_OVERFLOW_OP (tdc.r, -, tdc.i);
+  freqdata[0].r = tdc.r + tdc.i;
+  freqdata[ncfft].r = tdc.r - tdc.i;
+#ifdef USE_SIMD
+  freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps (0);
+#else
+  freqdata[ncfft].i = freqdata[0].i = 0;
+#endif
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    fpk = st->tmpbuf[k];
+    fpnk.r = st->tmpbuf[ncfft - k].r;
+    fpnk.i = -st->tmpbuf[ncfft - k].i;
+    C_FIXDIV (fpk, 2);
+    C_FIXDIV (fpnk, 2);
+
+    C_ADD (f1k, fpk, fpnk);
+    C_SUB (f2k, fpk, fpnk);
+    C_MUL (tw, f2k, st->super_twiddles[k - 1]);
+
+    freqdata[k].r = HALF_OF (f1k.r + tw.r);
+    freqdata[k].i = HALF_OF (f1k.i + tw.i);
+    freqdata[ncfft - k].r = HALF_OF (f1k.r - tw.r);
+    freqdata[ncfft - k].i = HALF_OF (tw.i - f1k.i);
+  }
+}
+
+void
+kiss_fftri_s32 (kiss_fftr_s32_cfg st, const kiss_fft_s32_cpx * freqdata,
+    kiss_fft_s32_scalar * timedata)
+{
+  /* input buffer timedata is stored row-wise */
+  int k, ncfft;
+
+  if (st->substate->inverse == 0) {
+    fprintf (stderr, "kiss fft usage error: improper alloc\n");
+    exit (1);
+  }
+
+  ncfft = st->substate->nfft;
+
+  st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r;
+  st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r;
+  C_FIXDIV (st->tmpbuf[0], 2);
+
+  for (k = 1; k <= ncfft / 2; ++k) {
+    kiss_fft_s32_cpx fk, fnkc, fek, fok, tmp;
+
+    fk = freqdata[k];
+    fnkc.r = freqdata[ncfft - k].r;
+    fnkc.i = -freqdata[ncfft - k].i;
+    C_FIXDIV (fk, 2);
+    C_FIXDIV (fnkc, 2);
+
+    C_ADD (fek, fk, fnkc);
+    C_SUB (tmp, fk, fnkc);
+    C_MUL (fok, tmp, st->super_twiddles[k - 1]);
+    C_ADD (st->tmpbuf[k], fek, fok);
+    C_SUB (st->tmpbuf[ncfft - k], fek, fok);
+#ifdef USE_SIMD
+    st->tmpbuf[ncfft - k].i *= _mm_set1_ps (-1.0);
+#else
+    st->tmpbuf[ncfft - k].i *= -1;
+#endif
+  }
+  kiss_fft_s32 (st->substate, st->tmpbuf, (kiss_fft_s32_cpx *) timedata);
+}
diff --git a/gst-libs/gst/fft/kiss_fftr_s32.h b/gst-libs/gst/fft/kiss_fftr_s32.h
new file mode 100644
index 0000000..8e8fecb
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_fftr_s32.h
@@ -0,0 +1,46 @@
+#ifndef KISS_FTR_S32_H
+#define KISS_FTR_S32_H
+
+#include "kiss_fft_s32.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    
+/* 
+ 
+ Real optimized version can save about 45% cpu time vs. complex fft of a real seq.
+
+ 
+ 
+ */
+
+typedef struct kiss_fftr_s32_state *kiss_fftr_s32_cfg;
+
+
+kiss_fftr_s32_cfg kiss_fftr_s32_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
+/*
+ nfft must be even
+
+ If you don't care to allocate space, use mem = lenmem = NULL 
+*/
+
+
+void kiss_fftr_s32(kiss_fftr_s32_cfg cfg,const kiss_fft_s32_scalar *timedata,kiss_fft_s32_cpx *freqdata);
+/*
+ input timedata has nfft scalar points
+ output freqdata has nfft/2+1 complex points
+*/
+
+void kiss_fftri_s32(kiss_fftr_s32_cfg cfg,const kiss_fft_s32_cpx *freqdata,kiss_fft_s32_scalar *timedata);
+/*
+ input freqdata has  nfft/2+1 complex points
+ output timedata has nfft scalar points
+*/
+
+#define kiss_fftr_s32_free free
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gst-libs/gst/fft/kiss_version b/gst-libs/gst/fft/kiss_version
new file mode 100644
index 0000000..c55188b
--- /dev/null
+++ b/gst-libs/gst/fft/kiss_version
@@ -0,0 +1,4 @@
+Based on Kiss FFT version 1.2.6. http://kissfft.sourceforge.net
+
+Only changes are limitation to one data type for each version in
+kiss_fft.h and _kiss_fft_guts.h.
diff --git a/gst-libs/gst/gettext.h b/gst-libs/gst/gettext.h
new file mode 100644
index 0000000..727bdb0
--- /dev/null
+++ b/gst-libs/gst/gettext.h
@@ -0,0 +1,69 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if defined (ENABLE_NLS) && ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gst-libs/gst/gst-i18n-plugin.h b/gst-libs/gst/gst-i18n-plugin.h
new file mode 100644
index 0000000..2c37a61
--- /dev/null
+++ b/gst-libs/gst/gst-i18n-plugin.h
@@ -0,0 +1,37 @@
+/* GStreamer
+ * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_I18N_PLUGIN_H__
+#define __GST_I18N_PLUGIN_H__
+
+#include <locale.h>  /* some people need it and some people don't */
+#include "gettext.h" /* included with gettext distribution and copied */
+
+#ifndef GETTEXT_PACKAGE
+#error You must define GETTEXT_PACKAGE before including this header.
+#endif
+
+/* we want to use shorthand _() for translating and N_() for marking */
+#define _(String) dgettext (GETTEXT_PACKAGE, String)
+#define N_(String) gettext_noop (String)
+/* FIXME: if we need it, we can add Q_ as well, like in glib */
+
+#endif /* __GST_I18N_PLUGIN_H__ */
diff --git a/gst-libs/gst/interfaces/Makefile.am b/gst-libs/gst/interfaces/Makefile.am
new file mode 100644
index 0000000..a661a03
--- /dev/null
+++ b/gst-libs/gst/interfaces/Makefile.am
@@ -0,0 +1,138 @@
+lib_LTLIBRARIES = libgstinterfaces-@GST_MAJORMINOR@.la
+libgstinterfacesincludedir = \
+        $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/interfaces
+
+headers_interfaces = 		\
+	colorbalance.h		\
+	colorbalancechannel.h	\
+	mixer.h			\
+	mixeroptions.h		\
+	mixertrack.h		\
+	navigation.h		\
+	propertyprobe.h		\
+	streamvolume.h          \
+	tuner.h			\
+	tunernorm.h		\
+	tunerchannel.h		\
+	videoorientation.h	\
+	videooverlay.h
+
+# variables used for enum/marshal generation
+glib_enum_headers = $(headers_interfaces)
+glib_enum_define = GST_INTERFACES
+glib_gen_prefix = gst_interfaces
+glib_gen_basename = interfaces
+
+built_sources = \
+	interfaces-marshal.c \
+	interfaces-enumtypes.c
+
+built_headers = \
+	interfaces-marshal.h \
+	interfaces-enumtypes.h
+
+libgstinterfacesinclude_HEADERS = \
+	$(headers_interfaces)
+
+nodist_libgstinterfacesinclude_HEADERS = \
+	interfaces-enumtypes.h
+
+libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES = \
+	colorbalance.c		\
+	colorbalancechannel.c	\
+	mixer.c			\
+	mixeroptions.c		\
+	mixertrack.c		\
+	navigation.c		\
+	propertyprobe.c		\
+	streamvolume.c          \
+	tuner.c			\
+	tunernorm.c		\
+	tunerchannel.c		\
+	videoorientation.c	\
+	videooverlay.c
+
+nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES = 	\
+	$(built_sources)				\
+	interfaces-marshal.h
+
+libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstinterfaces_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(LIBM) 
+libgstinterfaces_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+BUILT_SOURCES = \
+	$(built_sources) \
+	$(built_headers)
+
+EXTRA_DIST = interfaces-marshal.list
+
+CLEANFILES = $(BUILT_SOURCES)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstInterfaces-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstinterfacesinclude_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstinterfacesinclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/interfaces/%',$(libgstinterfacesinclude_HEADERS))
+gir_cincludes+=$(patsubst %,--c-include='gst/interfaces/%',$(nodist_libgstinterfacesinclude_HEADERS))
+
+GstInterfaces-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstinterfaces-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstInterfaces \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstinterfaces-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-interfaces-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstinterfaces -:SHARED libgstinterfaces-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstinterfaces_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstinterfaces_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/interfaces \
+	 -:HEADERS $(libgstinterfacesinclude_HEADERS) \
+	           $(nodist_libgstinterfacesinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in
new file mode 100644
index 0000000..a6f96b7
--- /dev/null
+++ b/gst-libs/gst/interfaces/Makefile.in
@@ -0,0 +1,1177 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstinterfacesinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/gst-glib-gen.mak
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/interfaces
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstinterfacesincludedir)" \
+	"$(DESTDIR)$(libgstinterfacesincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstinterfaces_@GST_MAJORMINOR@_la_DEPENDENCIES =  \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo
+am__objects_1 =  \
+	libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo \
+	libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo
+nodist_libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am__objects_1)
+libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstinterfaces_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) \
+	$(CFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstinterfacesinclude_HEADERS) \
+	$(nodist_libgstinterfacesinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstinterfaces-@GST_MAJORMINOR@.la
+libgstinterfacesincludedir = \
+        $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/interfaces
+
+headers_interfaces = \
+	colorbalance.h		\
+	colorbalancechannel.h	\
+	mixer.h			\
+	mixeroptions.h		\
+	mixertrack.h		\
+	navigation.h		\
+	propertyprobe.h		\
+	streamvolume.h          \
+	tuner.h			\
+	tunernorm.h		\
+	tunerchannel.h		\
+	videoorientation.h	\
+	videooverlay.h
+
+
+# variables used for enum/marshal generation
+glib_enum_headers = $(headers_interfaces)
+glib_enum_define = GST_INTERFACES
+glib_gen_prefix = gst_interfaces
+glib_gen_basename = interfaces
+built_sources = \
+	interfaces-marshal.c \
+	interfaces-enumtypes.c
+
+built_headers = \
+	interfaces-marshal.h \
+	interfaces-enumtypes.h
+
+libgstinterfacesinclude_HEADERS = \
+	$(headers_interfaces)
+
+nodist_libgstinterfacesinclude_HEADERS = \
+	interfaces-enumtypes.h
+
+libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES = \
+	colorbalance.c		\
+	colorbalancechannel.c	\
+	mixer.c			\
+	mixeroptions.c		\
+	mixertrack.c		\
+	navigation.c		\
+	propertyprobe.c		\
+	streamvolume.c          \
+	tuner.c			\
+	tunernorm.c		\
+	tunerchannel.c		\
+	videoorientation.c	\
+	videooverlay.c
+
+nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES = \
+	$(built_sources)				\
+	interfaces-marshal.h
+
+libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstinterfaces_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(LIBM) 
+libgstinterfaces_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+BUILT_SOURCES = \
+	$(built_sources) \
+	$(built_headers)
+
+EXTRA_DIST = interfaces-marshal.list
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstInterfaces-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstinterfacesinclude_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstinterfacesinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/interfaces/%',$(libgstinterfacesinclude_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/interfaces/%',$(nodist_libgstinterfacesinclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/interfaces/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/interfaces/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstinterfaces-@GST_MAJORMINOR@.la: $(libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS) $(libgstinterfaces_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstinterfaces_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstinterfaces_@GST_MAJORMINOR@_la_OBJECTS) $(libgstinterfaces_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-navigation.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tuner.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo: colorbalance.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo `test -f 'colorbalance.c' || echo '$(srcdir)/'`colorbalance.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='colorbalance.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-colorbalance.lo `test -f 'colorbalance.c' || echo '$(srcdir)/'`colorbalance.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo: colorbalancechannel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo `test -f 'colorbalancechannel.c' || echo '$(srcdir)/'`colorbalancechannel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='colorbalancechannel.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-colorbalancechannel.lo `test -f 'colorbalancechannel.c' || echo '$(srcdir)/'`colorbalancechannel.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo: mixer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixer.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo `test -f 'mixer.c' || echo '$(srcdir)/'`mixer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixer.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mixer.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixer.lo `test -f 'mixer.c' || echo '$(srcdir)/'`mixer.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo: mixeroptions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo `test -f 'mixeroptions.c' || echo '$(srcdir)/'`mixeroptions.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mixeroptions.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixeroptions.lo `test -f 'mixeroptions.c' || echo '$(srcdir)/'`mixeroptions.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo: mixertrack.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo `test -f 'mixertrack.c' || echo '$(srcdir)/'`mixertrack.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mixertrack.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-mixertrack.lo `test -f 'mixertrack.c' || echo '$(srcdir)/'`mixertrack.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo: navigation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-navigation.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo `test -f 'navigation.c' || echo '$(srcdir)/'`navigation.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-navigation.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-navigation.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='navigation.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-navigation.lo `test -f 'navigation.c' || echo '$(srcdir)/'`navigation.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo: propertyprobe.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo `test -f 'propertyprobe.c' || echo '$(srcdir)/'`propertyprobe.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='propertyprobe.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-propertyprobe.lo `test -f 'propertyprobe.c' || echo '$(srcdir)/'`propertyprobe.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo: streamvolume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo `test -f 'streamvolume.c' || echo '$(srcdir)/'`streamvolume.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='streamvolume.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-streamvolume.lo `test -f 'streamvolume.c' || echo '$(srcdir)/'`streamvolume.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo: tuner.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tuner.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo `test -f 'tuner.c' || echo '$(srcdir)/'`tuner.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tuner.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tuner.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tuner.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tuner.lo `test -f 'tuner.c' || echo '$(srcdir)/'`tuner.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo: tunernorm.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo `test -f 'tunernorm.c' || echo '$(srcdir)/'`tunernorm.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tunernorm.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tunernorm.lo `test -f 'tunernorm.c' || echo '$(srcdir)/'`tunernorm.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo: tunerchannel.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo `test -f 'tunerchannel.c' || echo '$(srcdir)/'`tunerchannel.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tunerchannel.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-tunerchannel.lo `test -f 'tunerchannel.c' || echo '$(srcdir)/'`tunerchannel.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo: videoorientation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo `test -f 'videoorientation.c' || echo '$(srcdir)/'`videoorientation.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='videoorientation.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-videoorientation.lo `test -f 'videoorientation.c' || echo '$(srcdir)/'`videoorientation.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo: videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo `test -f 'videooverlay.c' || echo '$(srcdir)/'`videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='videooverlay.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-videooverlay.lo `test -f 'videooverlay.c' || echo '$(srcdir)/'`videooverlay.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo: interfaces-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo `test -f 'interfaces-marshal.c' || echo '$(srcdir)/'`interfaces-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='interfaces-marshal.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-marshal.lo `test -f 'interfaces-marshal.c' || echo '$(srcdir)/'`interfaces-marshal.c
+
+libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo: interfaces-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.Tpo -c -o libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo `test -f 'interfaces-enumtypes.c' || echo '$(srcdir)/'`interfaces-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.Tpo $(DEPDIR)/libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='interfaces-enumtypes.c' object='libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstinterfaces_@GST_MAJORMINOR@_la-interfaces-enumtypes.lo `test -f 'interfaces-enumtypes.c' || echo '$(srcdir)/'`interfaces-enumtypes.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstinterfacesincludeHEADERS: $(libgstinterfacesinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstinterfacesincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstinterfacesincludedir)"
+	@list='$(libgstinterfacesinclude_HEADERS)'; test -n "$(libgstinterfacesincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstinterfacesincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstinterfacesincludedir)" || exit $$?; \
+	done
+
+uninstall-libgstinterfacesincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstinterfacesinclude_HEADERS)'; test -n "$(libgstinterfacesincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstinterfacesincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstinterfacesincludedir)" && rm -f $$files
+install-nodist_libgstinterfacesincludeHEADERS: $(nodist_libgstinterfacesinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstinterfacesincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstinterfacesincludedir)"
+	@list='$(nodist_libgstinterfacesinclude_HEADERS)'; test -n "$(libgstinterfacesincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstinterfacesincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstinterfacesincludedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstinterfacesincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstinterfacesinclude_HEADERS)'; test -n "$(libgstinterfacesincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstinterfacesincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstinterfacesincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstinterfacesincludedir)" "$(DESTDIR)$(libgstinterfacesincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstinterfacesincludeHEADERS \
+	install-nodist_libgstinterfacesincludeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstinterfacesincludeHEADERS \
+	uninstall-nodist_libgstinterfacesincludeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgstinterfacesincludeHEADERS \
+	install-man install-nodist_libgstinterfacesincludeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstinterfacesincludeHEADERS \
+	uninstall-nodist_libgstinterfacesincludeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstInterfaces-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstinterfaces-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstInterfaces \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstinterfaces-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-interfaces-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstinterfaces -:SHARED libgstinterfaces-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstinterfaces_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstinterfaces_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstinterfaces_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstinterfaces_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/interfaces \
+	 -:HEADERS $(libgstinterfacesinclude_HEADERS) \
+	           $(nodist_libgstinterfacesinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/interfaces/colorbalance.c b/gst-libs/gst/interfaces/colorbalance.c
new file mode 100644
index 0000000..89fbfb3
--- /dev/null
+++ b/gst-libs/gst/interfaces/colorbalance.c
@@ -0,0 +1,243 @@
+/* GStreamer Color Balance
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * colorbalance.c: image color balance interface design
+ *                 virtual class function wrappers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "colorbalance.h"
+#include "interfaces-marshal.h"
+
+/**
+ * SECTION:gstcolorbalance
+ * @short_description: Interface for adjusting color balance settings
+ *
+ * <refsect2><para>
+ * This interface is implemented by elements which can perform some color
+ * balance operation on video frames they process. For example, modifying
+ * the brightness, contrast, hue or saturation.
+ * </para><para>
+ * Example elements are 'xvimagesink' and 'colorbalance'
+ * </para>
+ * </refsect2>
+ */
+
+/* FIXME 0.11: check if we need to add API for sometimes-supportedness
+ * (aka making up for GstImplementsInterface removal) */
+
+/* FIXME 0.11: replace signals with messages (+ make API thread-safe) */
+
+enum
+{
+  VALUE_CHANGED,
+  LAST_SIGNAL
+};
+
+static void gst_color_balance_class_init (GstColorBalanceClass * klass);
+
+static guint gst_color_balance_signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_color_balance_get_type (void)
+{
+  static GType gst_color_balance_type = 0;
+
+  if (!gst_color_balance_type) {
+    static const GTypeInfo gst_color_balance_info = {
+      sizeof (GstColorBalanceClass),
+      (GBaseInitFunc) gst_color_balance_class_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_color_balance_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstColorBalance", &gst_color_balance_info, 0);
+  }
+
+  return gst_color_balance_type;
+}
+
+static void
+gst_color_balance_class_init (GstColorBalanceClass * klass)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized) {
+    /**
+     * GstColorBalance::value-changed:
+     * @colorbalance: The GstColorBalance instance
+     * @channel: The #GstColorBalanceChannel
+     * @value: The new value
+     *
+     * Fired when the value of the indicated channel has changed.
+     */
+    gst_color_balance_signals[VALUE_CHANGED] =
+        g_signal_new ("value-changed",
+        GST_TYPE_COLOR_BALANCE, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstColorBalanceClass, value_changed),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_INT,
+        G_TYPE_NONE, 2, GST_TYPE_COLOR_BALANCE_CHANNEL, G_TYPE_INT);
+
+    initialized = TRUE;
+  }
+
+  klass->balance_type = GST_COLOR_BALANCE_SOFTWARE;
+
+  /* default virtual functions */
+  klass->list_channels = NULL;
+  klass->set_value = NULL;
+  klass->get_value = NULL;
+}
+
+/**
+ * gst_color_balance_list_channels:
+ * @balance: A #GstColorBalance instance
+ * 
+ * Retrieve a list of the available channels.
+ *
+ * Returns: A GList containing pointers to #GstColorBalanceChannel objects.
+ *          The list is owned by the #GstColorBalance instance and must not
+ *          be freed.
+ */
+const GList *
+gst_color_balance_list_channels (GstColorBalance * balance)
+{
+  GstColorBalanceClass *klass;
+
+  g_return_val_if_fail (GST_IS_COLOR_BALANCE (balance), NULL);
+
+  klass = GST_COLOR_BALANCE_GET_CLASS (balance);
+
+  if (klass->list_channels) {
+    return klass->list_channels (balance);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_color_balance_set_value:
+ * @balance: A #GstColorBalance instance
+ * @channel: A #GstColorBalanceChannel instance
+ * @value: The new value for the channel.
+ *
+ * Sets the current value of the channel to the passed value, which must
+ * be between min_value and max_value.
+ * 
+ * See Also: The #GstColorBalanceChannel.min_value and
+ *         #GstColorBalanceChannel.max_value members of the
+ *         #GstColorBalanceChannel object.
+ */
+void
+gst_color_balance_set_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel, gint value)
+{
+  GstColorBalanceClass *klass = GST_COLOR_BALANCE_GET_CLASS (balance);
+
+  if (klass->set_value) {
+    klass->set_value (balance, channel, value);
+  }
+}
+
+/**
+ * gst_color_balance_get_value:
+ * @balance: A #GstColorBalance instance
+ * @channel: A #GstColorBalanceChannel instance
+ *
+ * Retrieve the current value of the indicated channel, between min_value
+ * and max_value.
+ * 
+ * See Also: The #GstColorBalanceChannel.min_value and
+ *         #GstColorBalanceChannel.max_value members of the
+ *         #GstColorBalanceChannel object.
+ * 
+ * Returns: The current value of the channel.
+ */
+gint
+gst_color_balance_get_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel)
+{
+  GstColorBalanceClass *klass;
+
+  g_return_val_if_fail (GST_IS_COLOR_BALANCE (balance), 0);
+
+  klass = GST_COLOR_BALANCE_GET_CLASS (balance);
+
+  if (klass->get_value) {
+    return klass->get_value (balance, channel);
+  }
+
+  return channel->min_value;
+}
+
+/**
+ * gst_color_balance_get_balance_type:
+ * @balance: The #GstColorBalance implementation
+ *
+ * Get the #GstColorBalanceType of this implementation.
+ *
+ * Returns: A the #GstColorBalanceType.
+ *
+ * Since: 0.10.24
+ */
+GstColorBalanceType
+gst_color_balance_get_balance_type (GstColorBalance * balance)
+{
+  GstColorBalanceClass *klass;
+
+  g_return_val_if_fail (GST_IS_COLOR_BALANCE (balance),
+      GST_COLOR_BALANCE_SOFTWARE);
+
+  klass = GST_COLOR_BALANCE_GET_CLASS (balance);
+
+  return klass->balance_type;
+}
+
+/**
+ * gst_color_balance_value_changed:
+ * @balance: A #GstColorBalance instance
+ * @channel: A #GstColorBalanceChannel whose value has changed
+ * @value: The new value of the channel
+ *
+ * A helper function called by implementations of the GstColorBalance
+ * interface. It fires the #GstColorBalance::value-changed signal on the
+ * instance, and the #GstColorBalanceChannel::value-changed signal on the
+ * channel object.
+ */
+void
+gst_color_balance_value_changed (GstColorBalance * balance,
+    GstColorBalanceChannel * channel, gint value)
+{
+
+  g_return_if_fail (GST_IS_COLOR_BALANCE (balance));
+
+  g_signal_emit (G_OBJECT (balance),
+      gst_color_balance_signals[VALUE_CHANGED], 0, channel, value);
+
+  g_signal_emit_by_name (G_OBJECT (channel), "value_changed", value);
+}
diff --git a/gst-libs/gst/interfaces/colorbalance.h b/gst-libs/gst/interfaces/colorbalance.h
new file mode 100644
index 0000000..896b6b6
--- /dev/null
+++ b/gst-libs/gst/interfaces/colorbalance.h
@@ -0,0 +1,124 @@
+/* GStreamer Color Balance
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * color-balance.h: image color balance interface design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_COLOR_BALANCE_H__
+#define __GST_COLOR_BALANCE_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/colorbalancechannel.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+
+G_BEGIN_DECLS
+
+/* FIXME 0.11: remove all CLASS bits, this is an interface */
+#define GST_TYPE_COLOR_BALANCE \
+  (gst_color_balance_get_type ())
+#define GST_COLOR_BALANCE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE, GstColorBalance))
+#define GST_COLOR_BALANCE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE, \
+                            GstColorBalanceClass))
+#define GST_IS_COLOR_BALANCE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE))
+#define GST_IS_COLOR_BALANCE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE))
+#define GST_COLOR_BALANCE_GET_CLASS(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_COLOR_BALANCE, GstColorBalanceClass))
+
+#define GST_COLOR_BALANCE_TYPE(klass) (klass->balance_type)
+
+typedef struct _GstColorBalance GstColorBalance;
+typedef struct _GstColorBalanceClass GstColorBalanceClass;
+
+/**
+ * GstColorBalanceType:
+ * @GST_COLOR_BALANCE_HARDWARE: Color balance is implemented with dedicated
+ *         hardware.
+ * @GST_COLOR_BALANCE_SOFTWARE: Color balance is implemented via software
+ *         processing.
+ *
+ * An enumeration indicating whether an element implements color balancing
+ * operations in software or in dedicated hardware. In general, dedicated
+ * hardware implementations (such as those provided by xvimagesink) are
+ * preferred.
+ */
+typedef enum
+{
+  GST_COLOR_BALANCE_HARDWARE,
+  GST_COLOR_BALANCE_SOFTWARE
+} GstColorBalanceType;
+
+/**
+ * GstColorBalanceClass:
+ * @klass: the parent interface
+ * @balance_type: implementation type
+ * @list_channels: list handled channels
+ * @set_value: set a channel value
+ * @get_value: get a channel value
+ * @value_changed: default handler for value changed notification
+ *
+ * Color-balance interface.
+ */
+struct _GstColorBalanceClass {
+  GTypeInterface klass;
+
+  GstColorBalanceType balance_type;
+
+  /* virtual functions */
+  const GList * (* list_channels) (GstColorBalance        *balance);
+
+  void          (* set_value)     (GstColorBalance        *balance,
+                                   GstColorBalanceChannel *channel,
+                                   gint                    value);
+  gint          (* get_value)     (GstColorBalance        *balance,
+                                   GstColorBalanceChannel *channel);
+
+  /* signals */
+  void (* value_changed) (GstColorBalance        *balance,
+                          GstColorBalanceChannel *channel,
+                          gint                    value);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType   gst_color_balance_get_type      (void);
+
+/* virtual class function wrappers */
+const GList *
+        gst_color_balance_list_channels (GstColorBalance        *balance);
+void    gst_color_balance_set_value     (GstColorBalance        *balance,
+                                         GstColorBalanceChannel *channel,
+                                         gint                    value);
+gint    gst_color_balance_get_value     (GstColorBalance        *balance,
+                                         GstColorBalanceChannel *channel);
+
+GstColorBalanceType
+        gst_color_balance_get_balance_type (GstColorBalance        *balance);
+
+/* trigger signal */
+void    gst_color_balance_value_changed (GstColorBalance        *balance,
+                                         GstColorBalanceChannel *channel,
+                                         gint                    value);
+
+G_END_DECLS
+
+#endif /* __GST_COLOR_BALANCE_H__ */
diff --git a/gst-libs/gst/interfaces/colorbalancechannel.c b/gst-libs/gst/interfaces/colorbalancechannel.c
new file mode 100644
index 0000000..ae22fba
--- /dev/null
+++ b/gst-libs/gst/interfaces/colorbalancechannel.c
@@ -0,0 +1,124 @@
+/* GStreamer Color Balance
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * colorbalancechannel.c: colorbalance channel object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "colorbalancechannel.h"
+
+/**
+ * SECTION:gstcolorbalancechannel
+ * @short_description: Object representing a channel from the #GstColorBalance
+ *         interface.
+ *
+ * <refsect2><para>The #GstColorBalanceChannel object represents a parameter
+ * for modifying the color balance implemented by an element providing the
+ * #GstColorBalance interface. For example, Hue or Saturation.
+ * </para></refsect2>
+ */
+
+enum
+{
+  /* FILL ME */
+  SIGNAL_VALUE_CHANGED,
+  LAST_SIGNAL
+};
+
+static void gst_color_balance_channel_class_init (GstColorBalanceChannelClass *
+    klass);
+static void gst_color_balance_channel_init (GstColorBalanceChannel * balance);
+static void gst_color_balance_channel_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_color_balance_channel_get_type (void)
+{
+  static GType gst_color_balance_channel_type = 0;
+
+  if (!gst_color_balance_channel_type) {
+    static const GTypeInfo color_balance_channel_info = {
+      sizeof (GstColorBalanceChannelClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_color_balance_channel_class_init,
+      NULL,
+      NULL,
+      sizeof (GstColorBalanceChannel),
+      0,
+      (GInstanceInitFunc) gst_color_balance_channel_init,
+      NULL
+    };
+
+    gst_color_balance_channel_type =
+        g_type_register_static (G_TYPE_OBJECT,
+        "GstColorBalanceChannel", &color_balance_channel_info, 0);
+  }
+
+  return gst_color_balance_channel_type;
+}
+
+static void
+gst_color_balance_channel_class_init (GstColorBalanceChannelClass * klass)
+{
+  GObjectClass *object_klass = (GObjectClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  /**
+   * GstColorBalanceChannel::value-changed:
+   * @channel: The #GstColorBalanceChannel
+   * @value: The new value
+   *
+   * Fired when the value of the indicated channel has changed.
+   */
+  signals[SIGNAL_VALUE_CHANGED] =
+      g_signal_new ("value-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstColorBalanceChannelClass,
+          value_changed),
+      NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  object_klass->dispose = gst_color_balance_channel_dispose;
+}
+
+static void
+gst_color_balance_channel_init (GstColorBalanceChannel * channel)
+{
+  channel->label = NULL;
+  channel->min_value = channel->max_value = 0;
+}
+
+static void
+gst_color_balance_channel_dispose (GObject * object)
+{
+  GstColorBalanceChannel *channel = GST_COLOR_BALANCE_CHANNEL (object);
+
+  if (channel->label)
+    g_free (channel->label);
+
+  channel->label = NULL;
+
+  if (parent_class->dispose)
+    parent_class->dispose (object);
+}
diff --git a/gst-libs/gst/interfaces/colorbalancechannel.h b/gst-libs/gst/interfaces/colorbalancechannel.h
new file mode 100644
index 0000000..22a2a7f
--- /dev/null
+++ b/gst-libs/gst/interfaces/colorbalancechannel.h
@@ -0,0 +1,82 @@
+/* GStreamer Color Balance
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * colorbalancechannel.h: individual channel object
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_COLOR_BALANCE_CHANNEL_H__
+#define __GST_COLOR_BALANCE_CHANNEL_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_COLOR_BALANCE_CHANNEL \
+  (gst_color_balance_channel_get_type ())
+#define GST_COLOR_BALANCE_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL, \
+                               GstColorBalanceChannel))
+#define GST_COLOR_BALANCE_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL, \
+                            GstColorBalanceChannelClass))
+#define GST_IS_COLOR_BALANCE_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_COLOR_BALANCE_CHANNEL))
+#define GST_IS_COLOR_BALANCE_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_COLOR_BALANCE_CHANNEL))
+
+typedef struct _GstColorBalanceChannel GstColorBalanceChannel;
+typedef struct _GstColorBalanceChannelClass GstColorBalanceChannelClass;
+
+/**
+ * GstColorBalanceChannel:
+ * @label: A string containing a descriptive name for this channel
+ * @min_value: The minimum valid value for this channel.
+ * @max_value: The maximum valid value for this channel.
+ */
+struct _GstColorBalanceChannel {
+  GObject parent;
+
+  /*< public >*/
+  gchar  *label;
+  gint    min_value;
+  gint    max_value;
+};
+
+/**
+ * GstColorBalanceChannelClass:
+ * @parent: the parent interface
+ * @value_changed: default handler for value changed notification
+ *
+ * Color-balance channel class.
+ */
+struct _GstColorBalanceChannelClass {
+  GObjectClass parent;
+
+  /* signals */
+  void (* value_changed) (GstColorBalanceChannel *channel,
+                          gint                    value);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType   gst_color_balance_channel_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_COLOR_BALANCE_CHANNEL_H__ */
diff --git a/gst-libs/gst/interfaces/interfaces-marshal.list b/gst-libs/gst/interfaces/interfaces-marshal.list
new file mode 100644
index 0000000..cb7469c
--- /dev/null
+++ b/gst-libs/gst/interfaces/interfaces-marshal.list
@@ -0,0 +1,5 @@
+VOID:OBJECT,BOOLEAN
+VOID:OBJECT,POINTER
+VOID:OBJECT,STRING
+VOID:OBJECT,ULONG
+VOID:OBJECT,INT
diff --git a/gst-libs/gst/interfaces/mixer.c b/gst-libs/gst/interfaces/mixer.c
new file mode 100644
index 0000000..23b707e
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixer.c
@@ -0,0 +1,873 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixer.c: mixer design virtual class function wrappers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "mixer.h"
+#include "interfaces-marshal.h"
+
+#define GST_MIXER_MESSAGE_NAME "gst-mixer-message"
+
+/**
+ * SECTION:gstmixer
+ * @short_description: Interface for elements that provide mixer operations
+ * @see_also: alsamixer, oss4mixer, sunaudiomixer
+ *
+ * Basic interface for hardware mixer controls.
+ *
+ * Applications rarely need to use this interface, it is provided mainly
+ * for system-level mixer applets and the like. Volume control in playback
+ * applications should be done using a <classname>volume</classname>
+ * element or, if available, using the <quote>volume</quote> property of
+ * the audio sink element used (as provided by <classname>pulsesink</classname>
+ * for example), or even better: just use the <classname>playbin2</classname>
+ * element's <quote>volume</quote> property.
+ *
+ * Usage: In order to use the <classname>GstMixer</classname> interface, the
+ * element needs to be at least in READY state (so that the element has opened
+ * the mixer device). Once the element has been set to READY state or higher,
+ * it can be cast to a <classname>GstMixer</classname> using the GST_MIXER
+ * macro (in C) and the mixer API can be used.
+ */
+
+/* FIXME 0.11: check if we need to add API for sometimes-supportedness
+ * (aka making up for GstImplementsInterface removal) */
+
+#ifndef GST_DISABLE_DEPRECATED
+enum
+{
+  SIGNAL_MUTE_TOGGLED,
+  SIGNAL_RECORD_TOGGLED,
+  SIGNAL_VOLUME_CHANGED,
+  SIGNAL_OPTION_CHANGED,
+  LAST_SIGNAL
+};
+
+static guint gst_mixer_signals[LAST_SIGNAL] = { 0 };
+
+#endif
+
+static void gst_mixer_class_init (GstMixerClass * klass);
+
+GType
+gst_mixer_get_type (void)
+{
+  static GType gst_mixer_type = 0;
+
+  if (!gst_mixer_type) {
+    static const GTypeInfo gst_mixer_info = {
+      sizeof (GstMixerClass),
+      (GBaseInitFunc) gst_mixer_class_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_mixer_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstMixer", &gst_mixer_info, 0);
+  }
+
+  return gst_mixer_type;
+}
+
+static void
+gst_mixer_class_init (GstMixerClass * klass)
+{
+#ifndef GST_DISABLE_DEPRECATED
+  static gboolean initialized = FALSE;
+
+  /* signals (deprecated) */
+  if (!initialized) {
+    gst_mixer_signals[SIGNAL_RECORD_TOGGLED] =
+        g_signal_new ("record-toggled",
+        GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstMixerClass, record_toggled),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
+        GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
+    gst_mixer_signals[SIGNAL_MUTE_TOGGLED] =
+        g_signal_new ("mute-toggled",
+        GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstMixerClass, mute_toggled),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2,
+        GST_TYPE_MIXER_TRACK, G_TYPE_BOOLEAN);
+    gst_mixer_signals[SIGNAL_VOLUME_CHANGED] =
+        g_signal_new ("volume-changed",
+        GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstMixerClass, volume_changed),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_POINTER, G_TYPE_NONE, 2,
+        GST_TYPE_MIXER_TRACK, G_TYPE_POINTER);
+    gst_mixer_signals[SIGNAL_OPTION_CHANGED] =
+        g_signal_new ("option-changed",
+        GST_TYPE_MIXER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstMixerClass, option_changed),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_STRING, G_TYPE_NONE, 2,
+        GST_TYPE_MIXER_OPTIONS, G_TYPE_STRING);
+
+    initialized = TRUE;
+  }
+#endif
+
+  klass->mixer_type = GST_MIXER_SOFTWARE;
+
+  /* default virtual functions */
+  klass->list_tracks = NULL;
+  klass->set_volume = NULL;
+  klass->get_volume = NULL;
+  klass->set_mute = NULL;
+  klass->set_record = NULL;
+  klass->set_option = NULL;
+  klass->get_option = NULL;
+}
+
+/**
+ * gst_mixer_list_tracks:
+ * @mixer: the #GstMixer (a #GstElement) to get the tracks from.
+ *
+ * Returns a list of available tracks for this mixer/element. Note
+ * that it is allowed for sink (output) elements to only provide
+ * the output tracks in this list. Likewise, for sources (inputs),
+ * it is allowed to only provide input elements in this list.
+ *
+ * Returns: A #GList consisting of zero or more #GstMixerTracks.
+ *          The list is owned by the #GstMixer instance and must not be freed
+ *          or modified.
+ */
+
+const GList *
+gst_mixer_list_tracks (GstMixer * mixer)
+{
+  GstMixerClass *klass;
+
+  g_return_val_if_fail (mixer != NULL, NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->list_tracks) {
+    return klass->list_tracks (mixer);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_mixer_set_volume:
+ * @mixer: The #GstMixer (a #GstElement) that owns the track.
+ * @track: The #GstMixerTrack to set the volume on.
+ * @volumes: an array of integers (of size track->num_channels)
+ *           that gives the wanted volume for each channel in
+ *           this track.
+ *
+ * Sets the volume on each channel in a track. Short note about
+ * naming: a track is defined as one separate stream owned by
+ * the mixer/element, such as 'Line-in' or 'Microphone'. A
+ * channel is said to be a mono-stream inside this track. A
+ * stereo track thus contains two channels.
+ */
+
+void
+gst_mixer_set_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
+{
+  GstMixerClass *klass;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (track != NULL);
+  g_return_if_fail (volumes != NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->set_volume) {
+    klass->set_volume (mixer, track, volumes);
+  }
+}
+
+/**
+ * gst_mixer_get_volume:
+ * @mixer: the #GstMixer (a #GstElement) that owns the track
+ * @track: the GstMixerTrack to get the volume from.
+ * @volumes: a pre-allocated array of integers (of size
+ *           track->num_channels) to store the current volume
+ *           of each channel in the given track in.
+ *
+ * Get the current volume(s) on the given track.
+ */
+
+void
+gst_mixer_get_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
+{
+  GstMixerClass *klass;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (track != NULL);
+  g_return_if_fail (volumes != NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->get_volume) {
+    klass->get_volume (mixer, track, volumes);
+  } else {
+    gint i;
+
+    for (i = 0; i < track->num_channels; i++) {
+      volumes[i] = 0;
+    }
+  }
+}
+
+/**
+ * gst_mixer_set_mute:
+ * @mixer: the #GstMixer (a #GstElement) that owns the track.
+ * @track: the #GstMixerTrack to operate on.
+ * @mute: a boolean value indicating whether to turn on or off
+ *        muting.
+ *
+ * Mutes or unmutes the given channel. To find out whether a
+ * track is currently muted, use GST_MIXER_TRACK_HAS_FLAG ().
+ */
+
+void
+gst_mixer_set_mute (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
+{
+  GstMixerClass *klass;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (track != NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->set_mute) {
+    klass->set_mute (mixer, track, mute);
+  }
+}
+
+/**
+ * gst_mixer_set_record:
+ * @mixer: The #GstMixer (a #GstElement) that owns the track.
+ * @track: the #GstMixerTrack to operate on.
+ * @record: a boolean value that indicates whether to turn on
+ *          or off recording.
+ *
+ * Enables or disables recording on the given track. Note that
+ * this is only possible on input tracks, not on output tracks
+ * (see GST_MIXER_TRACK_HAS_FLAG () and the GST_MIXER_TRACK_INPUT
+ * flag).
+ */
+
+void
+gst_mixer_set_record (GstMixer * mixer, GstMixerTrack * track, gboolean record)
+{
+  GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->set_record) {
+    klass->set_record (mixer, track, record);
+  }
+}
+
+/**
+ * gst_mixer_set_option:
+ * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
+ * @opts: The #GstMixerOptions that we operate on.
+ * @value: The requested new option value.
+ *
+ * Sets a name/value option in the mixer to the requested value.
+ */
+
+void
+gst_mixer_set_option (GstMixer * mixer, GstMixerOptions * opts, gchar * value)
+{
+  GstMixerClass *klass;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (opts != NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->set_option) {
+    klass->set_option (mixer, opts, value);
+  }
+}
+
+/**
+ * gst_mixer_get_option:
+ * @mixer: The #GstMixer (a #GstElement) that owns the optionlist.
+ * @opts: The #GstMixerOptions that we operate on.
+ *
+ * Get the current value of a name/value option in the mixer.
+ *
+ * Returns: current value of the name/value option.
+ */
+
+const gchar *
+gst_mixer_get_option (GstMixer * mixer, GstMixerOptions * opts)
+{
+  GstMixerClass *klass;
+
+  g_return_val_if_fail (mixer != NULL, NULL);
+  g_return_val_if_fail (opts != NULL, NULL);
+
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->get_option) {
+    return klass->get_option (mixer, opts);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_mixer_get_mixer_type:
+ * @mixer: The #GstMixer implementation
+ *
+ * Get the #GstMixerType of this mixer implementation.
+ *
+ * Returns: A the #GstMixerType.
+ *
+ * Since: 0.10.24
+ */
+GstMixerType
+gst_mixer_get_mixer_type (GstMixer * mixer)
+{
+  GstMixerClass *klass = GST_MIXER_GET_CLASS (mixer);
+
+  return klass->mixer_type;
+}
+
+/**
+ * gst_mixer_get_mixer_flags:
+ * @mixer: The #GstMixer implementation
+ *
+ * Get the set of supported flags for this mixer implementation.
+ *
+ * Returns: A set of or-ed GstMixerFlags for supported features.
+ */
+GstMixerFlags
+gst_mixer_get_mixer_flags (GstMixer * mixer)
+{
+  GstMixerClass *klass;
+
+  g_return_val_if_fail (mixer != NULL, FALSE);
+  klass = GST_MIXER_GET_CLASS (mixer);
+
+  if (klass->get_mixer_flags) {
+    return klass->get_mixer_flags (mixer);
+  }
+  return GST_MIXER_FLAG_NONE;
+}
+
+/**
+ * gst_mixer_mute_toggled:
+ * @mixer: the #GstMixer (a #GstElement) that owns the track
+ * @track: the GstMixerTrack that has change mute state.
+ * @mute: the new state of the mute flag on the track
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the given track
+ * has changed mute state.
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus.
+ */
+void
+gst_mixer_mute_toggled (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+  g_return_if_fail (track != NULL);
+
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "mute-toggled",
+      "track", GST_TYPE_MIXER_TRACK, track, "mute", G_TYPE_BOOLEAN, mute, NULL);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+/**
+ * gst_mixer_record_toggled:
+ * @mixer: the #GstMixer (a #GstElement) that owns the track
+ * @track: the GstMixerTrack that has changed recording state.
+ * @record: the new state of the record flag on the track
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the given track
+ * has changed recording state.
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus.
+ */
+void
+gst_mixer_record_toggled (GstMixer * mixer,
+    GstMixerTrack * track, gboolean record)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+  g_return_if_fail (track != NULL);
+
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "record-toggled",
+      "track", GST_TYPE_MIXER_TRACK, track,
+      "record", G_TYPE_BOOLEAN, record, NULL);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+/**
+ * gst_mixer_volume_changed:
+ * @mixer: the #GstMixer (a #GstElement) that owns the track
+ * @track: the GstMixerTrack that has changed.
+ * @volumes: Array of volume values, one per channel on the mixer track.
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the volume(s) for the
+ * given track have changed.
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus.
+ */
+void
+gst_mixer_volume_changed (GstMixer * mixer,
+    GstMixerTrack * track, gint * volumes)
+{
+  GstStructure *s;
+  GstMessage *m;
+  GValue l = { 0, };
+  GValue v = { 0, };
+  gint i;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+  g_return_if_fail (track != NULL);
+
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "volume-changed",
+      "track", GST_TYPE_MIXER_TRACK, track, NULL);
+
+  g_value_init (&l, GST_TYPE_ARRAY);
+
+  g_value_init (&v, G_TYPE_INT);
+
+  /* FIXME 0.11: pass track->num_channels to the function */
+  for (i = 0; i < track->num_channels; ++i) {
+    g_value_set_int (&v, volumes[i]);
+    gst_value_array_append_value (&l, &v);
+  }
+  g_value_unset (&v);
+
+  gst_structure_set_value (s, "volumes", &l);
+  g_value_unset (&l);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+/**
+ * gst_mixer_option_changed:
+ * @mixer: the #GstMixer (a #GstElement) that owns the options 
+ * @opts: the GstMixerOptions that has changed value.
+ * @value: the new value of the GstMixerOptions.
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the given options
+ * object has changed state. 
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus.
+ */
+void
+gst_mixer_option_changed (GstMixer * mixer,
+    GstMixerOptions * opts, const gchar * value)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+  g_return_if_fail (opts != NULL);
+
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "option-changed",
+      "options", GST_TYPE_MIXER_OPTIONS, opts,
+      "value", G_TYPE_STRING, value, NULL);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+/**
+ * gst_mixer_options_list_changed:
+ * @mixer: the #GstMixer (a #GstElement) that owns the options 
+ * @opts: the GstMixerOptions whose list of values has changed
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the list of possible
+ * options of a given options object has changed.
+ *
+ * The new options are not contained in the message on purpose. Applications
+ * should call gst_mixer_options_get_values() on @opts to make @opts update
+ * its internal state and obtain the new list of values.
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus
+ * for this to work.
+ *
+ * Since: 0.10.18
+ */
+void
+gst_mixer_options_list_changed (GstMixer * mixer, GstMixerOptions * opts)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+  g_return_if_fail (opts != NULL);
+  g_return_if_fail (GST_IS_MIXER_OPTIONS (opts));
+
+  /* we do not include the new list here on purpose, so that the application
+   * has to use gst_mixer_options_get_values() to get the new list, which then
+   * allows the mixer options object to update the internal GList in a somewhat
+   * thread-safe way at least */
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "options-list-changed",
+      "options", GST_TYPE_MIXER_OPTIONS, opts, NULL);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+/**
+ * gst_mixer_mixer_changed:
+ * @mixer: the #GstMixer (a #GstElement) which has changed
+ *
+ * This function is called by the mixer implementation to produce
+ * a notification message on the bus indicating that the list of available
+ * mixer tracks for a given mixer object has changed. Applications should
+ * rebuild their interface when they receive this message.
+ *
+ * This function only works for GstElements that are implementing the
+ * GstMixer interface, and the element needs to have been provided a bus.
+ *
+ * Since: 0.10.18
+ */
+void
+gst_mixer_mixer_changed (GstMixer * mixer)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  g_return_if_fail (mixer != NULL);
+  g_return_if_fail (GST_IS_ELEMENT (mixer));
+
+  s = gst_structure_new (GST_MIXER_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "mixer-changed", NULL);
+
+  m = gst_message_new_element (GST_OBJECT (mixer), s);
+  if (gst_element_post_message (GST_ELEMENT (mixer), m) == FALSE) {
+    GST_WARNING ("This element has no bus, therefore no message sent!");
+  }
+}
+
+static gboolean
+gst_mixer_message_is_mixer_message (GstMessage * message)
+{
+  const GstStructure *s;
+
+  if (message == NULL)
+    return FALSE;
+  if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
+    return FALSE;
+
+  s = gst_message_get_structure (message);
+  return gst_structure_has_name (s, GST_MIXER_MESSAGE_NAME);
+}
+
+/**
+ * gst_mixer_message_get_type:
+ * @message: A GstMessage to inspect.
+ *
+ * Check a bus message to see if it is a GstMixer notification
+ * message and return the GstMixerMessageType identifying which
+ * type of notification it is.
+ *
+ * Returns: The type of the GstMixerMessage, or GST_MIXER_MESSAGE_INVALID
+ * if the message is not a GstMixer notification.
+ *
+ * Since: 0.10.14
+ */
+GstMixerMessageType
+gst_mixer_message_get_type (GstMessage * message)
+{
+  const GstStructure *s;
+  const gchar *m_type;
+
+  if (!gst_mixer_message_is_mixer_message (message))
+    return GST_MIXER_MESSAGE_INVALID;
+
+  s = gst_message_get_structure (message);
+  m_type = gst_structure_get_string (s, "type");
+  g_return_val_if_fail (m_type != NULL, GST_MIXER_MESSAGE_INVALID);
+
+  if (g_str_equal (m_type, "mute-toggled"))
+    return GST_MIXER_MESSAGE_MUTE_TOGGLED;
+  else if (g_str_equal (m_type, "record-toggled"))
+    return GST_MIXER_MESSAGE_RECORD_TOGGLED;
+  else if (g_str_equal (m_type, "volume-changed"))
+    return GST_MIXER_MESSAGE_VOLUME_CHANGED;
+  else if (g_str_equal (m_type, "option-changed"))
+    return GST_MIXER_MESSAGE_OPTION_CHANGED;
+  else if (g_str_equal (m_type, "options-list-changed"))
+    return GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED;
+  else if (g_str_equal (m_type, "mixer-changed"))
+    return GST_MIXER_MESSAGE_MIXER_CHANGED;
+
+  return GST_MIXER_MESSAGE_INVALID;
+}
+
+#define GST_MIXER_MESSAGE_HAS_TYPE(msg,msg_type) \
+(gst_mixer_message_get_type (msg) == GST_MIXER_MESSAGE_ ## msg_type)
+
+/**
+ * gst_mixer_message_parse_mute_toggled:
+ * @message: A mute-toggled change notification message.
+ * @track: Pointer to hold a GstMixerTrack object, or NULL.
+ * @mute: A pointer to a gboolean variable, or NULL.
+ *
+ * Extracts the contents of a mute-toggled bus message. Reads
+ * the GstMixerTrack that has changed, and the new value of the mute
+ * flag.
+ *
+ * The GstMixerTrack remains valid until the message is freed.
+ *
+ * Since: 0.10.14
+ */
+void
+gst_mixer_message_parse_mute_toggled (GstMessage * message,
+    GstMixerTrack ** track, gboolean * mute)
+{
+  const GstStructure *s;
+
+  g_return_if_fail (gst_mixer_message_is_mixer_message (message));
+  g_return_if_fail (GST_MIXER_MESSAGE_HAS_TYPE (message, MUTE_TOGGLED));
+
+  s = gst_message_get_structure (message);
+
+  if (track) {
+    const GValue *v = gst_structure_get_value (s, "track");
+
+    g_return_if_fail (v != NULL);
+    *track = (GstMixerTrack *) g_value_get_object (v);
+    g_return_if_fail (GST_IS_MIXER_TRACK (*track));
+  }
+
+  if (mute)
+    g_return_if_fail (gst_structure_get_boolean (s, "mute", mute));
+}
+
+/**
+ * gst_mixer_message_parse_record_toggled:
+ * @message: A record-toggled change notification message.
+ * @track: Pointer to hold a GstMixerTrack object, or NULL.
+ * @record: A pointer to a gboolean variable, or NULL.
+ *
+ * Extracts the contents of a record-toggled bus message. Reads
+ * the GstMixerTrack that has changed, and the new value of the 
+ * recording flag.
+ *
+ * The GstMixerTrack remains valid until the message is freed.
+ *
+ * Since: 0.10.14
+ */
+void
+gst_mixer_message_parse_record_toggled (GstMessage * message,
+    GstMixerTrack ** track, gboolean * record)
+{
+  const GstStructure *s;
+
+  g_return_if_fail (gst_mixer_message_is_mixer_message (message));
+  g_return_if_fail (GST_MIXER_MESSAGE_HAS_TYPE (message, RECORD_TOGGLED));
+
+  s = gst_message_get_structure (message);
+
+  if (track) {
+    const GValue *v = gst_structure_get_value (s, "track");
+
+    g_return_if_fail (v != NULL);
+    *track = (GstMixerTrack *) g_value_get_object (v);
+    g_return_if_fail (GST_IS_MIXER_TRACK (*track));
+  }
+
+  if (record)
+    g_return_if_fail (gst_structure_get_boolean (s, "record", record));
+}
+
+/**
+ * gst_mixer_message_parse_volume_changed:
+ * @message: A volume-changed change notification message.
+ * @track: Pointer to hold a GstMixerTrack object, or NULL.
+ * @volumes: A pointer to receive an array of gint values, or NULL.
+ * @num_channels: Result location to receive the number of channels, or NULL.
+ *
+ * Parses a volume-changed notification message and extracts the track object
+ * it refers to, as well as an array of volumes and the size of the volumes array.
+ *
+ * The track object remains valid until the message is freed.
+ *
+ * The caller must free the array returned in the volumes parameter using g_free
+ * when they are done with it.
+ *
+ * Since: 0.10.14
+ */
+void
+gst_mixer_message_parse_volume_changed (GstMessage * message,
+    GstMixerTrack ** track, gint ** volumes, gint * num_channels)
+{
+  const GstStructure *s;
+
+  g_return_if_fail (gst_mixer_message_is_mixer_message (message));
+  g_return_if_fail (GST_MIXER_MESSAGE_HAS_TYPE (message, VOLUME_CHANGED));
+
+  s = gst_message_get_structure (message);
+
+  if (track) {
+    const GValue *v = gst_structure_get_value (s, "track");
+
+    g_return_if_fail (v != NULL);
+    *track = (GstMixerTrack *) g_value_get_object (v);
+    g_return_if_fail (GST_IS_MIXER_TRACK (*track));
+  }
+
+  if (volumes || num_channels) {
+    gint n_chans, i;
+    const GValue *v = gst_structure_get_value (s, "volumes");
+
+    g_return_if_fail (v != NULL);
+    g_return_if_fail (GST_VALUE_HOLDS_ARRAY (v));
+
+    n_chans = gst_value_array_get_size (v);
+    if (num_channels)
+      *num_channels = n_chans;
+
+    if (volumes) {
+      *volumes = g_new (gint, n_chans);
+      for (i = 0; i < n_chans; i++) {
+        const GValue *e = gst_value_array_get_value (v, i);
+
+        g_return_if_fail (e != NULL && G_VALUE_HOLDS_INT (e));
+        (*volumes)[i] = g_value_get_int (e);
+      }
+    }
+  }
+}
+
+/**
+ * gst_mixer_message_parse_option_changed:
+ * @message: A volume-changed change notification message.
+ * @options: Pointer to hold a GstMixerOptions object, or NULL.
+ * @value: Result location to receive the new options value, or NULL.
+ *
+ * Extracts the GstMixerOptions and new value from a option-changed bus notification
+ * message.
+ *
+ * The options and value returned remain valid until the message is freed.
+ *
+ * Since: 0.10.14
+ */
+void
+gst_mixer_message_parse_option_changed (GstMessage * message,
+    GstMixerOptions ** options, const gchar ** value)
+{
+  const GstStructure *s;
+
+  g_return_if_fail (gst_mixer_message_is_mixer_message (message));
+  g_return_if_fail (GST_MIXER_MESSAGE_HAS_TYPE (message, OPTION_CHANGED));
+
+  s = gst_message_get_structure (message);
+
+  if (options) {
+    const GValue *v = gst_structure_get_value (s, "options");
+
+    g_return_if_fail (v != NULL);
+    *options = (GstMixerOptions *) g_value_get_object (v);
+    g_return_if_fail (GST_IS_MIXER_OPTIONS (*options));
+  }
+
+  if (value)
+    *value = gst_structure_get_string (s, "value");
+}
+
+/**
+ * gst_mixer_message_parse_options_list_changed:
+ * @message: A volume-changed change notification message.
+ * @options: Pointer to hold a GstMixerOptions object, or NULL.
+ *
+ * Extracts the GstMixerOptions whose value list has changed from an
+ * options-list-changed bus notification message.
+ *
+ * The options object returned remains valid until the message is freed. You
+ * do not need to unref it.
+ *
+ * Since: 0.10.18
+ */
+void
+gst_mixer_message_parse_options_list_changed (GstMessage * message,
+    GstMixerOptions ** options)
+{
+  const GstStructure *s;
+
+  g_return_if_fail (gst_mixer_message_is_mixer_message (message));
+  g_return_if_fail (GST_MIXER_MESSAGE_HAS_TYPE (message, OPTIONS_LIST_CHANGED));
+
+  s = gst_message_get_structure (message);
+
+  if (options) {
+    const GValue *v = gst_structure_get_value (s, "options");
+
+    g_return_if_fail (v != NULL);
+    *options = (GstMixerOptions *) g_value_get_object (v);
+    g_return_if_fail (GST_IS_MIXER_OPTIONS (*options));
+  }
+}
diff --git a/gst-libs/gst/interfaces/mixer.h b/gst-libs/gst/interfaces/mixer.h
new file mode 100644
index 0000000..ca7f301
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixer.h
@@ -0,0 +1,240 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixer.h: mixer interface design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_MIXER_H__
+#define __GST_MIXER_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/mixeroptions.h>
+#include <gst/interfaces/mixertrack.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+
+G_BEGIN_DECLS
+
+/* FIXME 0.11: remove all CLASS bits, this is an interface */
+
+#define GST_TYPE_MIXER \
+  (gst_mixer_get_type ())
+#define GST_MIXER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER, GstMixer))
+#define GST_MIXER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER, GstMixerClass))
+#define GST_IS_MIXER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER))
+#define GST_IS_MIXER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER))
+#define GST_MIXER_GET_CLASS(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_MIXER, GstMixerClass))
+
+#define GST_MIXER_TYPE(klass) (klass->mixer_type)
+
+typedef struct _GstMixer GstMixer;
+typedef struct _GstMixerClass GstMixerClass;
+
+/**
+ * GstMixerType:
+ * @GST_MIXER_HARDWARE: mixing is implemented with dedicated hardware.
+ * @GST_MIXER_SOFTWARE: mixing is implemented via software processing.
+ *
+ * Mixer classification.
+ */
+typedef enum
+{
+  GST_MIXER_HARDWARE,
+  GST_MIXER_SOFTWARE
+} GstMixerType;
+
+/**
+ * GstMixerMessageType:
+ * @GST_MIXER_MESSAGE_INVALID: Not a GstMixer message
+ * @GST_MIXER_MESSAGE_MUTE_TOGGLED: A mute-toggled GstMixer message
+ * @GST_MIXER_MESSAGE_RECORD_TOGGLED: A record-toggled GstMixer message
+ * @GST_MIXER_MESSAGE_VOLUME_CHANGED: A volume-changed GstMixer message
+ * @GST_MIXER_MESSAGE_OPTION_CHANGED: An option-changed GstMixer message
+ * @GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED: An options-list-changed
+ *     GstMixer message, posted when the list of available options for a
+ *     GstMixerOptions object has changed (Since: 0.10.18)
+ * @GST_MIXER_MESSAGE_MIXER_CHANGED: A mixer-changed GstMixer message, posted
+ *     when the list of available mixer tracks has changed. The application
+ *     should re-build its interface in this case (Since: 0.10.18)
+ *
+ * An enumeration for the type of a GstMixer message received on the bus
+ *
+ * Since: 0.10.14
+ */
+typedef enum
+{
+  GST_MIXER_MESSAGE_INVALID,
+  GST_MIXER_MESSAGE_MUTE_TOGGLED,
+  GST_MIXER_MESSAGE_RECORD_TOGGLED,
+  GST_MIXER_MESSAGE_VOLUME_CHANGED,
+  GST_MIXER_MESSAGE_OPTION_CHANGED,
+  GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED,
+  GST_MIXER_MESSAGE_MIXER_CHANGED
+} GstMixerMessageType;
+
+/**
+ * GstMixerFlags:
+ * @GST_MIXER_FLAG_NONE: No flags
+ * @GST_MIXER_FLAG_AUTO_NOTIFICATIONS: The mixer implementation automatically
+ *    sends notification messages.
+ * @GST_MIXER_FLAG_HAS_WHITELIST: The mixer implementation flags tracks that
+ *    should be displayed by default (whitelisted). Since: 0.10.23
+ * @GST_MIXER_FLAG_GROUPING: The mixer implementation will leave some controls
+ *    marked without either input or output.  Controls marked as input or
+ *    output should be grouped with input & output sliders, even if they
+ *    are options or bare switches. Since: 0.10.23
+ *
+ * Flags indicating which optional features are supported by a mixer
+ * implementation.
+ *
+ * Since: 0.10.14
+ */
+typedef enum
+{
+  GST_MIXER_FLAG_NONE                = 0,
+  GST_MIXER_FLAG_AUTO_NOTIFICATIONS  = (1<<0),
+  GST_MIXER_FLAG_HAS_WHITELIST       = (1<<1),
+  GST_MIXER_FLAG_GROUPING            = (1<<2),
+} GstMixerFlags;
+
+struct _GstMixerClass {
+  GTypeInterface klass;
+
+  GstMixerType mixer_type;
+
+  /* virtual functions */
+  const GList *  (* list_tracks)   (GstMixer      *mixer);
+
+  void           (* set_volume)    (GstMixer      *mixer,
+                                    GstMixerTrack *track,
+                                    gint          *volumes);
+  void           (* get_volume)    (GstMixer      *mixer,
+                                    GstMixerTrack *track,
+                                    gint          *volumes);
+
+  void           (* set_mute)      (GstMixer      *mixer,
+                                    GstMixerTrack *track,
+                                    gboolean       mute);
+  void           (* set_record)    (GstMixer      *mixer,
+                                    GstMixerTrack *track,
+                                    gboolean       record);
+#ifndef GST_DISABLE_DEPRECATED
+  /* signals (deprecated) */
+  void (* mute_toggled)   (GstMixer      *mixer,
+                           GstMixerTrack *channel,
+                           gboolean       mute);
+  void (* record_toggled) (GstMixer      *mixer,
+                           GstMixerTrack *channel,
+                           gboolean       record);
+  void (* volume_changed) (GstMixer      *mixer,
+                           GstMixerTrack *channel,
+                           gint          *volumes);
+#else
+  gpointer padding1[3];
+#endif /* not GST_DISABLE_DEPRECATED */
+
+  void          (* set_option)     (GstMixer      *mixer,
+                                    GstMixerOptions *opts,
+                                    gchar         *value);
+  const gchar * (* get_option)     (GstMixer      *mixer,
+                                    GstMixerOptions *opts);
+
+#ifndef GST_DISABLE_DEPRECATED
+  void (* option_changed) (GstMixer      *mixer,
+                           GstMixerOptions *opts,
+                           gchar   *option);
+#else
+  gpointer padding2;
+#endif /* not GST_DISABLE_DEPRECATED */
+
+  GstMixerFlags (* get_mixer_flags) (GstMixer *mixer);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING-1];
+};
+
+GType           gst_mixer_get_type      (void);
+
+/* virtual class function wrappers */
+const GList *   gst_mixer_list_tracks    (GstMixer      *mixer);
+void            gst_mixer_set_volume     (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gint          *volumes);
+void            gst_mixer_get_volume     (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gint          *volumes);
+void            gst_mixer_set_mute       (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gboolean       mute);
+void            gst_mixer_set_record     (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gboolean       record);
+void            gst_mixer_set_option     (GstMixer      *mixer,
+                                          GstMixerOptions *opts,
+                                          gchar         *value);
+const gchar *   gst_mixer_get_option     (GstMixer      *mixer,
+                                          GstMixerOptions *opts);
+
+/* trigger bus messages */
+void            gst_mixer_mute_toggled   (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gboolean       mute);
+void            gst_mixer_record_toggled (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gboolean       record);
+void            gst_mixer_volume_changed (GstMixer      *mixer,
+                                          GstMixerTrack *track,
+                                          gint          *volumes);
+void            gst_mixer_option_changed (GstMixer      *mixer,
+                                          GstMixerOptions *opts,
+                                          const gchar   *value);
+
+void            gst_mixer_mixer_changed   (GstMixer        *mixer);
+
+void            gst_mixer_options_list_changed (GstMixer        *mixer,
+                                                GstMixerOptions *opts);
+
+GstMixerType    gst_mixer_get_mixer_type  (GstMixer *mixer);
+
+GstMixerFlags   gst_mixer_get_mixer_flags (GstMixer *mixer);
+
+/* Functions for recognising and parsing GstMixerMessages on the bus */
+GstMixerMessageType gst_mixer_message_get_type (GstMessage *message);
+void            gst_mixer_message_parse_mute_toggled (GstMessage *message,
+                                                      GstMixerTrack **track,
+                                                      gboolean *mute);
+void            gst_mixer_message_parse_record_toggled (GstMessage *message,
+                                                        GstMixerTrack **track,
+                                                        gboolean *record);
+void            gst_mixer_message_parse_volume_changed (GstMessage *message,
+                                                        GstMixerTrack **track,
+                                                        gint **volumes,
+                                                        gint *num_channels);
+void            gst_mixer_message_parse_option_changed (GstMessage *message,
+                                                        GstMixerOptions **options,
+                                                        const gchar **value);
+void            gst_mixer_message_parse_options_list_changed (GstMessage *message,
+                                                              GstMixerOptions **options);
+
+G_END_DECLS
+
+#endif /* __GST_MIXER_H__ */
diff --git a/gst-libs/gst/interfaces/mixeroptions.c b/gst-libs/gst/interfaces/mixeroptions.c
new file mode 100644
index 0000000..01b75b4
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixeroptions.c
@@ -0,0 +1,146 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixeroptions.c: mixer track options object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstmixeroptions
+ * @short_description: Multi-option mixer control
+ * @see_also: GstMixer, GstMixerTrack
+ *
+ * Mixer control object that allows switching between multiple options.
+ * Note that <classname>GstMixerOptions</classname> is a subclass of
+ * <classname>GstMixerTrack</classname>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "mixeroptions.h"
+
+#if 0
+enum
+{
+  /* FILL ME */
+  SIGNAL_OPTION_CHANGED,
+  LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+#endif
+
+static void gst_mixer_options_class_init (GstMixerOptionsClass * klass);
+static void gst_mixer_options_init (GstMixerOptions * mixer);
+static void gst_mixer_options_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+
+GType
+gst_mixer_options_get_type (void)
+{
+  static GType gst_mixer_options_type = 0;
+
+  if (!gst_mixer_options_type) {
+    static const GTypeInfo mixer_options_info = {
+      sizeof (GstMixerOptionsClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_mixer_options_class_init,
+      NULL,
+      NULL,
+      sizeof (GstMixerOptions),
+      0,
+      (GInstanceInitFunc) gst_mixer_options_init,
+      NULL
+    };
+
+    gst_mixer_options_type =
+        g_type_register_static (GST_TYPE_MIXER_TRACK,
+        "GstMixerOptions", &mixer_options_info, 0);
+  }
+
+  return gst_mixer_options_type;
+}
+
+static void
+gst_mixer_options_class_init (GstMixerOptionsClass * klass)
+{
+  GObjectClass *object_klass = (GObjectClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+#if 0
+  signals[SIGNAL_OPTION_CHANGED] =
+      g_signal_new ("option_changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstMixerOptionsClass, option_changed),
+      NULL, NULL, g_cclosure_marshal_VOID__STRING,
+      G_TYPE_NONE, 1, G_TYPE_STRING);
+#endif
+
+  object_klass->dispose = gst_mixer_options_dispose;
+}
+
+static void
+gst_mixer_options_init (GstMixerOptions * mixer_options)
+{
+  mixer_options->values = NULL;
+}
+
+/**
+ * gst_mixer_options_get_values:
+ * @mixer_options: The #GstMixerOptions item that owns the values.
+ *
+ * Get the values for the mixer option.
+ *
+ * Returns: A list of strings with all the possible values for the mixer
+ *     option. You must not free or modify the list or its contents, it belongs
+ *     to the @mixer_options object.
+ */
+GList *
+gst_mixer_options_get_values (GstMixerOptions * mixer_options)
+{
+  GstMixerOptionsClass *klass;
+  GList *ret = NULL;
+
+  g_return_val_if_fail (GST_IS_MIXER_OPTIONS (mixer_options), NULL);
+
+  klass = GST_MIXER_OPTIONS_GET_CLASS (mixer_options);
+
+  if (klass->get_values != NULL) {
+    ret = klass->get_values (mixer_options);
+  } else {
+    ret = mixer_options->values;
+  }
+
+  return ret;
+}
+
+
+static void
+gst_mixer_options_dispose (GObject * object)
+{
+  GstMixerOptions *opts = GST_MIXER_OPTIONS (object);
+
+  g_list_foreach (opts->values, (GFunc) g_free, NULL);
+  g_list_free (opts->values);
+  opts->values = NULL;
+
+  if (parent_class->dispose)
+    parent_class->dispose (object);
+}
diff --git a/gst-libs/gst/interfaces/mixeroptions.h b/gst-libs/gst/interfaces/mixeroptions.h
new file mode 100644
index 0000000..9b65bb1
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixeroptions.h
@@ -0,0 +1,94 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixeroptions.h: mixer track options object
+ * This should be a subclass of MixerItem, along with MixerOptions,
+ * but that's not possible because of API/ABI in 0.8.x. FIXME.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_MIXER_OPTIONS_H__
+#define __GST_MIXER_OPTIONS_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/mixertrack.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_MIXER_OPTIONS \
+  (gst_mixer_options_get_type ())
+#define GST_MIXER_OPTIONS(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER_OPTIONS, \
+                               GstMixerOptions))
+#define GST_MIXER_OPTIONS_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_MIXER_OPTIONS, GstMixerOptionsClass))
+#define GST_MIXER_OPTIONS_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER_OPTIONS, \
+                            GstMixerOptionsClass))
+#define GST_IS_MIXER_OPTIONS(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER_OPTIONS))
+#define GST_IS_MIXER_OPTIONS_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER_OPTIONS))
+
+typedef struct _GstMixerOptions GstMixerOptions;
+typedef struct _GstMixerOptionsClass GstMixerOptionsClass;
+
+/**
+ * GstMixerOptions:
+ * @values: List of option strings. Do not access this member directly,
+ *     always use gst_mixer_options_get_values() instead.
+ *
+ * Mixer control object.
+ */
+struct _GstMixerOptions {
+  GstMixerTrack parent;
+
+  /*< public >*/
+  /* list of strings (do not access directly) (FIXME 0.11: make private) */
+  GList        *values;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstMixerOptionsClass:
+ * @parent: the parent interface
+ * @get_values: Optional implementation of gst_mixer_options_get_values().
+ *    (Since: 0.10.18)
+ */
+struct _GstMixerOptionsClass {
+  GstMixerTrackClass parent;
+
+#ifdef GST_MIXER_NEED_DEPRECATED
+  /* signals */
+  void    (* option_changed) (GstMixerOptions *opts,
+                              gchar           *value);
+#endif /* GST_MIXER_NEED_DEPRECATED */
+
+  GList * (* get_values)     (GstMixerOptions *opts);
+
+  gpointer _gst_reserved[GST_PADDING-1];
+};
+
+GType           gst_mixer_options_get_type (void);
+
+GList         * gst_mixer_options_get_values (GstMixerOptions *mixer_options);
+
+G_END_DECLS
+
+#endif /* __GST_MIXER_OPTIONS_H__ */
diff --git a/gst-libs/gst/interfaces/mixertrack.c b/gst-libs/gst/interfaces/mixertrack.c
new file mode 100644
index 0000000..c4bef1c
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixertrack.c
@@ -0,0 +1,288 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixertrack.c: mixer track object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstmixertrack
+ * @short_description: Basic mixer control object (volume slider, switch)
+ * @see_also: GstMixer, GstMixerOptions
+ *
+ * Basic mixer control object (note that it is a GObject and not a GstObject).
+ *
+ * A mixer track represents a single slider control of none, one or more
+ * channels. A mixer track with no channels is usually interpreted as a
+ * on/off switch control.
+ *
+ * Note the presence of both min_volume and max_volume fields. Applications
+ * must not assume that min_volume is 0 or max_volume is any particular
+ * value.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "mixertrack.h"
+#if 0
+enum
+{
+  /* FILL ME */
+  SIGNAL_VOLUME_CHANGED,
+  SIGNAL_RECORD_TOGGLED,
+  SIGNAL_MUTE_TOGGLED,
+  LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+#endif
+
+enum
+{
+  ARG_0,
+  ARG_LABEL,
+  ARG_UNTRANSLATED_LABEL,
+  ARG_INDEX,
+  ARG_MIN_VOLUME,
+  ARG_MAX_VOLUME,
+  ARG_FLAGS,
+  ARG_NUM_CHANNELS
+};
+
+static void gst_mixer_track_class_init (GstMixerTrackClass * klass);
+static void gst_mixer_track_init (GstMixerTrack * mixer);
+static void gst_mixer_track_dispose (GObject * object);
+
+static void gst_mixer_track_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_mixer_track_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+
+static GObjectClass *parent_class = NULL;
+
+GType
+gst_mixer_track_get_type (void)
+{
+  static GType gst_mixer_track_type = 0;
+
+  if (!gst_mixer_track_type) {
+    static const GTypeInfo mixer_track_info = {
+      sizeof (GstMixerTrackClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_mixer_track_class_init,
+      NULL,
+      NULL,
+      sizeof (GstMixerTrack),
+      0,
+      (GInstanceInitFunc) gst_mixer_track_init,
+      NULL
+    };
+
+    gst_mixer_track_type =
+        g_type_register_static (G_TYPE_OBJECT,
+        "GstMixerTrack", &mixer_track_info, 0);
+  }
+
+  return gst_mixer_track_type;
+}
+
+static void
+gst_mixer_track_class_init (GstMixerTrackClass * klass)
+{
+  GObjectClass *object_klass = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  object_klass->get_property = gst_mixer_track_get_property;
+  object_klass->set_property = gst_mixer_track_set_property;
+
+  g_object_class_install_property (object_klass, ARG_LABEL,
+      g_param_spec_string ("label", "Track label",
+          "The label assigned to the track (may be translated)", NULL,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstMixerTrack:untranslated-label
+   *
+   * The untranslated label of the mixer track, if available. Mixer track
+   * implementations must set this at construct time. Applications may find
+   * this useful to determine icons for various kind of tracks. However,
+   * applications mustn't make any assumptions about the naming of tracks,
+   * the untranslated labels are purely informational and may change.
+   *
+   * Since: 0.10.13
+   **/
+  g_object_class_install_property (object_klass, ARG_UNTRANSLATED_LABEL,
+      g_param_spec_string ("untranslated-label", "Untranslated track label",
+          "The untranslated label assigned to the track (since 0.10.13)",
+          NULL,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstMixerTrack:index
+   *
+   * Index of the mixer track, if available. Mixer track implementations
+   * must set this at construct time. This can be used to discern between
+   * multiple tracks with identical labels.
+   *
+   * Since: 0.10.21
+   */
+  g_object_class_install_property (object_klass, ARG_INDEX,
+      g_param_spec_uint ("index", "Index",
+          "Track index", 0, G_MAXUINT,
+          0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+  g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
+      g_param_spec_int ("min-volume", "Minimum volume level",
+          "The minimum possible volume level", G_MININT, G_MAXINT,
+          0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (object_klass, ARG_MAX_VOLUME,
+      g_param_spec_int ("max-volume", "Maximum volume level",
+          "The maximum possible volume level", G_MININT, G_MAXINT,
+          0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (object_klass, ARG_FLAGS,
+      g_param_spec_uint ("flags", "Flags",
+          "Flags indicating the type of mixer track",
+          0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (object_klass, ARG_NUM_CHANNELS,
+      g_param_spec_int ("num-channels", "Number of channels",
+          "The number of channels contained within the track",
+          0, G_MAXINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+#if 0
+  signals[SIGNAL_RECORD_TOGGLED] =
+      g_signal_new ("record_toggled", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstMixerTrackClass,
+          record_toggled),
+      NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
+      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+  signals[SIGNAL_MUTE_TOGGLED] =
+      g_signal_new ("mute_toggled", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstMixerTrackClass,
+          mute_toggled),
+      NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN,
+      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+  signals[SIGNAL_VOLUME_CHANGED] =
+      g_signal_new ("volume_changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstMixerTrackClass,
+          volume_changed),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER,
+      G_TYPE_NONE, 1, G_TYPE_POINTER);
+#endif
+
+  object_klass->dispose = gst_mixer_track_dispose;
+}
+
+static void
+gst_mixer_track_init (GstMixerTrack * mixer_track)
+{
+  mixer_track->label = NULL;
+  mixer_track->min_volume = mixer_track->max_volume = 0;
+  mixer_track->flags = 0;
+  mixer_track->num_channels = 0;
+}
+
+/* FIXME 0.11: move these as members into the mixer track structure */
+#define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel"
+#define MIXER_TRACK_OBJECT_DATA_KEY_INDEX "index"
+
+static void
+gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstMixerTrack *mixer_track;
+
+  mixer_track = GST_MIXER_TRACK (object);
+
+  switch (prop_id) {
+    case ARG_LABEL:
+      g_value_set_string (value, mixer_track->label);
+      break;
+    case ARG_UNTRANSLATED_LABEL:
+      g_value_set_string (value,
+          (const gchar *) g_object_get_data (G_OBJECT (mixer_track),
+              MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL));
+      break;
+    case ARG_INDEX:
+      g_value_set_uint (value,
+          GPOINTER_TO_INT (g_object_get_data (G_OBJECT (mixer_track),
+                  MIXER_TRACK_OBJECT_DATA_KEY_INDEX)));
+      break;
+    case ARG_MIN_VOLUME:
+      g_value_set_int (value, mixer_track->min_volume);
+      break;
+    case ARG_MAX_VOLUME:
+      g_value_set_int (value, mixer_track->max_volume);
+      break;
+    case ARG_FLAGS:
+      g_value_set_uint (value, (guint32) mixer_track->flags);
+      break;
+    case ARG_NUM_CHANNELS:
+      g_value_set_int (value, mixer_track->num_channels);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_mixer_track_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstMixerTrack *mixer_track;
+
+  mixer_track = GST_MIXER_TRACK (object);
+
+  switch (prop_id) {
+    case ARG_UNTRANSLATED_LABEL:
+      g_object_set_data_full (G_OBJECT (mixer_track),
+          MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL,
+          g_value_dup_string (value), (GDestroyNotify) g_free);
+      break;
+    case ARG_INDEX:
+      g_object_set_data (G_OBJECT (mixer_track),
+          MIXER_TRACK_OBJECT_DATA_KEY_INDEX,
+          GINT_TO_POINTER (g_value_get_uint (value)));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_mixer_track_dispose (GObject * object)
+{
+  GstMixerTrack *channel = GST_MIXER_TRACK (object);
+
+  if (channel->label) {
+    g_free (channel->label);
+    channel->label = NULL;
+  }
+
+  if (parent_class->dispose)
+    parent_class->dispose (object);
+}
diff --git a/gst-libs/gst/interfaces/mixertrack.h b/gst-libs/gst/interfaces/mixertrack.h
new file mode 100644
index 0000000..33296b9
--- /dev/null
+++ b/gst-libs/gst/interfaces/mixertrack.h
@@ -0,0 +1,134 @@
+/* GStreamer Mixer
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * mixertrack.h: mixer track object
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_MIXER_TRACK_H__
+#define __GST_MIXER_TRACK_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_MIXER_TRACK \
+  (gst_mixer_track_get_type ())
+#define GST_MIXER_TRACK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_MIXER_TRACK, \
+                               GstMixerTrack))
+#define GST_MIXER_TRACK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_MIXER_TRACK, \
+                            GstMixerTrackClass))
+#define GST_IS_MIXER_TRACK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MIXER_TRACK))
+#define GST_IS_MIXER_TRACK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_MIXER_TRACK))
+
+/*
+ * Naming:
+ *
+ * A track is a single input/output stream (e.g. line-in,
+ * microphone, etc.). Channels are then single streams
+ * within a track. A mono stream has one channel, a stereo
+ * stream has two, etc.
+ *
+ * Input tracks can have 'recording' enabled, which means
+ * that any input will be hearable into the speakers that
+ * are attached to the output. Mute is obvious. A track
+ * flagged as master is the master volume track on this
+ * mixer, which means that setting this track will change
+ * the hearable volume on any output.
+ */
+/**
+ * GstMixerTrackFlags:
+ * @GST_MIXER_TRACK_INPUT: mixer track is for input
+ * @GST_MIXER_TRACK_OUTPUT: mixer track is for output
+ * @GST_MIXER_TRACK_MUTE: input or output is muted
+ * @GST_MIXER_TRACK_RECORD: input is audible in speakers attached to output
+ *     (for #GST_MIXER_TRACK_INPUT mixer tracks only)
+ * @GST_MIXER_TRACK_MASTER: this mixer track is likely to be the master control
+ * @GST_MIXER_TRACK_SOFTWARE: mixer track's' volume control is implemented
+ *     in software (as opposed to a hardware control)
+ * @GST_MIXER_TRACK_NO_RECORD: input track lacks support for recordable.
+ *     Since: 0.10.23
+ * @GST_MIXER_TRACK_NO_MUTE: play track doesn't support mute. Since: 0.10.23
+ * @GST_MIXER_TRACK_WHITELIST: track should be displayed "by default" in apps.
+ *     Since: 0.10.23
+ * @GST_MIXER_TRACK_READONLY: track is read-only. Since: 0.10.25
+ * @GST_MIXER_TRACK_WRITEONLY: track is write-only. Since: 0.10.25
+ *
+ * Mixer track flags.
+ */
+typedef enum {
+  GST_MIXER_TRACK_INPUT  = (1<<0),
+  GST_MIXER_TRACK_OUTPUT = (1<<1),
+  GST_MIXER_TRACK_MUTE   = (1<<2),
+  GST_MIXER_TRACK_RECORD = (1<<3),
+  GST_MIXER_TRACK_MASTER = (1<<4),
+  GST_MIXER_TRACK_SOFTWARE = (1<<5),
+  GST_MIXER_TRACK_NO_RECORD = (1<<6),
+  GST_MIXER_TRACK_NO_MUTE = (1<<7),
+  GST_MIXER_TRACK_WHITELIST = (1<<8),
+  GST_MIXER_TRACK_READONLY = (1<<9),
+  GST_MIXER_TRACK_WRITEONLY = (1<<10)
+} GstMixerTrackFlags;
+
+/* FIXME 0.11: READONLY/WRITEONLY -> READABLE/WRITABLE etc. */
+
+#define GST_MIXER_TRACK_HAS_FLAG(channel, flag) \
+  ((channel)->flags & flag)
+
+typedef struct _GstMixerTrack GstMixerTrack;
+typedef struct _GstMixerTrackClass GstMixerTrackClass;
+
+struct _GstMixerTrack {
+  GObject            parent;
+
+  gchar             *label;
+
+  /* FIXME 0.11: flags should be guint32 */
+  GstMixerTrackFlags flags;
+
+  gint               num_channels;
+  gint               min_volume;
+  gint               max_volume;
+
+  /* FIXME 0.11: add padding */
+};
+
+struct _GstMixerTrackClass {
+  GObjectClass parent;
+
+#ifdef GST_MIXER_NEED_DEPRECATED
+  /* signals (deprecated) */
+  void (* mute_toggled)   (GstMixerTrack *channel,
+                           gboolean       mute);
+  void (* record_toggled) (GstMixerTrack *channel,
+                           gboolean       record);
+  void (* volume_changed) (GstMixerTrack *channel,
+                           gint          *volumes);
+#endif /* GST_MIXER_NEED_DEPRECATED */
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_mixer_track_get_type        (void);
+
+G_END_DECLS
+
+#endif /* __GST_MIXER_TRACK_H__ */
diff --git a/gst-libs/gst/interfaces/navigation.c b/gst-libs/gst/interfaces/navigation.c
new file mode 100644
index 0000000..207bc07
--- /dev/null
+++ b/gst-libs/gst/interfaces/navigation.c
@@ -0,0 +1,848 @@
+/* GStreamer Navigation
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2007-2009 Jan Schmidt <thaytan@noraisin.net>
+ *
+ * navigation.c: navigation event virtual class function wrappers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstnavigation
+ * @short_description: Interface for creating, sending and parsing navigation
+ * events.
+ *
+ * The Navigation interface is used for creating and injecting navigation related
+ * events such as mouse button presses, cursor motion and key presses. The associated
+ * library also provides methods for parsing received events, and for sending and
+ * receiving navigation related bus events. One main usecase is DVD menu navigation.
+ *
+ * The main parts of the API are:
+ * <itemizedlist>
+ * <listitem>
+ * <para>
+ * The GstNavigation interface, implemented by elements which provide an application
+ * with the ability to create and inject navigation events into the pipeline.
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * GstNavigation event handling API. GstNavigation events are created in response to
+ * calls on a GstNavigation interface implementation, and sent in the pipeline. Upstream
+ * elements can use the navigation event API functions to parse the contents of received
+ * messages.
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * GstNavigation message handling API. GstNavigation messages may be sent on the message
+ * bus to inform applications of navigation related changes in the pipeline, such as the
+ * mouse moving over a clickable region, or the set of available angles changing.
+ * </para><para>
+ * The GstNavigation message functions provide functions for creating and parsing
+ * custom bus messages for signalling GstNavigation changes.
+ * </para>
+ * </listitem>
+ * </itemizedlist>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/interfaces/navigation.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+
+static void gst_navigation_class_init (GstNavigationInterface * iface);
+
+#define GST_NAVIGATION_MESSAGE_NAME "GstNavigationMessage"
+#define GST_NAVIGATION_QUERY_NAME "GstNavigationQuery"
+#define GST_NAVIGATION_EVENT_NAME "application/x-gst-navigation"
+
+#define WARN_IF_FAIL(exp,msg) if(G_UNLIKELY(!(exp))){g_warning("%s",(msg));}
+
+GType
+gst_navigation_get_type (void)
+{
+  static GType gst_navigation_type = 0;
+
+  if (!gst_navigation_type) {
+    static const GTypeInfo gst_navigation_info = {
+      sizeof (GstNavigationInterface),
+      (GBaseInitFunc) gst_navigation_class_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_navigation_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstNavigation", &gst_navigation_info, 0);
+  }
+
+  return gst_navigation_type;
+}
+
+static void
+gst_navigation_class_init (GstNavigationInterface * iface)
+{
+  /* default virtual functions */
+  iface->send_event = NULL;
+}
+
+/* The interface implementer should make sure that the object can handle
+ * the event. */
+void
+gst_navigation_send_event (GstNavigation * navigation, GstStructure * structure)
+{
+  GstNavigationInterface *iface = GST_NAVIGATION_GET_IFACE (navigation);
+
+  if (iface->send_event) {
+    iface->send_event (navigation, structure);
+  }
+}
+
+/**
+ * gst_navigation_send_key_event:
+ * @navigation: The navigation interface instance
+ * @event: The type of the key event. Recognised values are "key-press" and
+ * "key-release"
+ * @key: Character representation of the key. This is typically as produced
+ * by XKeysymToString.
+ */
+void
+gst_navigation_send_key_event (GstNavigation * navigation, const char *event,
+    const char *key)
+{
+  gst_navigation_send_event (navigation,
+      gst_structure_new (GST_NAVIGATION_EVENT_NAME, "event", G_TYPE_STRING,
+          event, "key", G_TYPE_STRING, key, NULL));
+}
+
+/**
+ * gst_navigation_send_mouse_event:
+ * @navigation: The navigation interface instance
+ * @event: The type of mouse event, as a text string. Recognised values are
+ * "mouse-button-press", "mouse-button-release" and "mouse-move".
+ * @button: The button number of the button being pressed or released. Pass 0
+ * for mouse-move events.
+ * @x: The x coordinate of the mouse event.
+ * @y: The y coordinate of the mouse event.
+ *
+ * Sends a mouse event to the navigation interface. Mouse event coordinates
+ * are sent relative to the display space of the related output area. This is
+ * usually the size in pixels of the window associated with the element
+ * implementing the #GstNavigation interface.
+ *
+ */
+void
+gst_navigation_send_mouse_event (GstNavigation * navigation, const char *event,
+    int button, double x, double y)
+{
+  gst_navigation_send_event (navigation,
+      gst_structure_new (GST_NAVIGATION_EVENT_NAME, "event", G_TYPE_STRING,
+          event, "button", G_TYPE_INT, button, "pointer_x", G_TYPE_DOUBLE, x,
+          "pointer_y", G_TYPE_DOUBLE, y, NULL));
+}
+
+/**
+ * gst_navigation_send_command:
+ * @navigation: The navigation interface instance
+ * @command: The command to issue
+ *
+ * Sends the indicated command to the navigation interface.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_navigation_send_command (GstNavigation * navigation,
+    GstNavigationCommand command)
+{
+  gst_navigation_send_event (navigation,
+      gst_structure_new (GST_NAVIGATION_EVENT_NAME, "event", G_TYPE_STRING,
+          "command", "command-code", G_TYPE_UINT, (guint) command, NULL));
+}
+
+/* Navigation Queries */
+
+#define GST_NAVIGATION_QUERY_HAS_TYPE(query,query_type) \
+(gst_navigation_query_get_type (query) == GST_NAVIGATION_QUERY_ ## query_type)
+
+/**
+ * gst_navigation_query_get_type:
+ * @query: The query to inspect
+ *
+ * Inspect a #GstQuery and return the #GstNavigationQueryType associated with
+ * it if it is a #GstNavigation query.
+ *
+ * Returns: The #GstNavigationQueryType of the query, or
+ * #GST_NAVIGATION_QUERY_INVALID
+ * Since: 0.10.23
+ */
+GstNavigationQueryType
+gst_navigation_query_get_type (GstQuery * query)
+{
+  const GstStructure *s;
+  const gchar *q_type;
+
+  if (query == NULL || GST_QUERY_TYPE (query) != GST_QUERY_CUSTOM)
+    return GST_NAVIGATION_QUERY_INVALID;
+
+  s = gst_query_get_structure (query);
+  if (s == NULL || !gst_structure_has_name (s, GST_NAVIGATION_QUERY_NAME))
+    return GST_NAVIGATION_QUERY_INVALID;
+
+  q_type = gst_structure_get_string (s, "type");
+  if (q_type == NULL)
+    return GST_NAVIGATION_QUERY_INVALID;
+
+  if (g_str_equal (q_type, "commands"))
+    return GST_NAVIGATION_QUERY_COMMANDS;
+  else if (g_str_equal (q_type, "angles"))
+    return GST_NAVIGATION_QUERY_ANGLES;
+
+  return GST_NAVIGATION_QUERY_INVALID;
+}
+
+/**
+ * gst_navigation_query_new_commands:
+ *
+ * Create a new #GstNavigation commands query. When executed, it will
+ * query the pipeline for the set of currently available commands.
+ *
+ * Returns: The new query.
+ * Since: 0.10.23
+ */
+GstQuery *
+gst_navigation_query_new_commands (void)
+{
+  GstQuery *query;
+  GstStructure *structure;
+
+  structure = gst_structure_new (GST_NAVIGATION_QUERY_NAME,
+      "type", G_TYPE_STRING, "commands", NULL);
+  query = gst_query_new_custom (GST_QUERY_CUSTOM, structure);
+
+  return query;
+}
+
+static void
+gst_query_list_add_command (GValue * list, GstNavigationCommand val)
+{
+  GValue item = { 0, };
+
+  g_value_init (&item, GST_TYPE_NAVIGATION_COMMAND);
+  g_value_set_enum (&item, val);
+  gst_value_list_append_value (list, &item);
+  g_value_unset (&item);
+}
+
+/**
+ * gst_navigation_query_set_commands:
+ * @query: a #GstQuery
+ * @n_cmds: the number of commands to set.
+ * @...: A list of @GstNavigationCommand values, @n_cmds entries long.
+ *
+ * Set the #GstNavigation command query result fields in @query. The number
+ * of commands passed must be equal to @n_commands.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_navigation_query_set_commands (GstQuery * query, gint n_cmds, ...)
+{
+  va_list ap;
+  GValue list = { 0, };
+  GstStructure *structure;
+  gint i;
+
+  g_return_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, COMMANDS));
+
+  g_value_init (&list, GST_TYPE_LIST);
+
+  va_start (ap, n_cmds);
+  for (i = 0; i < n_cmds; i++) {
+    GstNavigationCommand val = va_arg (ap, GstNavigationCommand);
+    gst_query_list_add_command (&list, val);
+  }
+  va_end (ap);
+
+  structure = gst_query_writable_structure (query);
+  gst_structure_set_value (structure, "commands", &list);
+
+  g_value_unset (&list);
+}
+
+/**
+ * gst_navigation_query_set_commandsv:
+ * @query: a #GstQuery
+ * @n_cmds: the number of commands to set.
+ * @cmds: An array containing @n_cmds @GstNavigationCommand values.
+ *
+ * Set the #GstNavigation command query result fields in @query. The number
+ * of commands passed must be equal to @n_commands.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_navigation_query_set_commandsv (GstQuery * query, gint n_cmds,
+    GstNavigationCommand * cmds)
+{
+  GValue list = { 0, };
+  GstStructure *structure;
+  gint i;
+
+  g_return_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, COMMANDS));
+
+  g_value_init (&list, GST_TYPE_LIST);
+  for (i = 0; i < n_cmds; i++) {
+    gst_query_list_add_command (&list, cmds[i]);
+  }
+  structure = gst_query_writable_structure (query);
+  gst_structure_set_value (structure, "commands", &list);
+
+  g_value_unset (&list);
+}
+
+/**
+ * gst_navigation_query_parse_commands_length:
+ * @query: a #GstQuery
+ * @n_cmds: the number of commands in this query.
+ *
+ * Parse the number of commands in the #GstNavigation commands @query.
+ *
+ * Returns: %TRUE if the query could be successfully parsed. %FALSE if not.
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_query_parse_commands_length (GstQuery * query, guint * n_cmds)
+{
+  const GstStructure *structure;
+  const GValue *list;
+
+  g_return_val_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, COMMANDS), FALSE);
+
+  if (n_cmds == NULL)
+    return TRUE;
+
+  structure = gst_query_get_structure (query);
+  list = gst_structure_get_value (structure, "commands");
+  if (list == NULL)
+    *n_cmds = 0;
+  else
+    *n_cmds = gst_value_list_get_size (list);
+
+  return TRUE;
+}
+
+/**
+ * gst_navigation_query_parse_commands_nth:
+ * @query: a #GstQuery
+ * @nth: the nth command to retrieve.
+ * @cmd: a pointer to store the nth command into.
+ *
+ * Parse the #GstNavigation command query and retrieve the @nth command from
+ * it into @cmd. If the list contains less elements than @nth, @cmd will be
+ * set to #GST_NAVIGATION_COMMAND_INVALID.
+ *
+ * Returns: %TRUE if the query could be successfully parsed. %FALSE if not.
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_query_parse_commands_nth (GstQuery * query, guint nth,
+    GstNavigationCommand * cmd)
+{
+  const GstStructure *structure;
+  const GValue *list;
+
+  g_return_val_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, COMMANDS), FALSE);
+
+  if (cmd == NULL)
+    return TRUE;
+
+  structure = gst_query_get_structure (query);
+  list = gst_structure_get_value (structure, "commands");
+  if (list == NULL) {
+    *cmd = GST_NAVIGATION_COMMAND_INVALID;
+  } else {
+    if (nth < gst_value_list_get_size (list)) {
+      *cmd = (GstNavigationCommand)
+          g_value_get_enum (gst_value_list_get_value (list, nth));
+    } else
+      *cmd = GST_NAVIGATION_COMMAND_INVALID;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_navigation_query_new_angles:
+ *
+ * Create a new #GstNavigation angles query. When executed, it will
+ * query the pipeline for the set of currently available angles, which may be
+ * greater than one in a multiangle video.
+ *
+ * Returns: The new query.
+ * Since: 0.10.23
+ */
+GstQuery *
+gst_navigation_query_new_angles (void)
+{
+  GstQuery *query;
+  GstStructure *structure;
+
+  structure = gst_structure_new (GST_NAVIGATION_QUERY_NAME,
+      "type", G_TYPE_STRING, "angles", NULL);
+  query = gst_query_new_custom (GST_QUERY_CUSTOM, structure);
+
+  return query;
+}
+
+/**
+ * gst_navigation_query_set_angles:
+ * @query: a #GstQuery
+ * @cur_angle: the current viewing angle to set.
+ * @n_angles: the number of viewing angles to set.
+ *
+ * Set the #GstNavigation angles query result field in @query.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_navigation_query_set_angles (GstQuery * query, guint cur_angle,
+    guint n_angles)
+{
+  GstStructure *structure;
+
+  g_return_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, ANGLES));
+
+  structure = gst_query_writable_structure (query);
+  gst_structure_set (structure,
+      "angle", G_TYPE_UINT, cur_angle, "angles", G_TYPE_UINT, n_angles, NULL);
+}
+
+/**
+ * gst_navigation_query_parse_angles:
+ * @query: a #GstQuery
+ * @cur_angle: Pointer to a #guint into which to store the currently selected
+ * angle value from the query, or NULL
+ * @n_angles: Pointer to a #guint into which to store the number of angles
+ * value from the query, or NULL
+ *
+ * Parse the current angle number in the #GstNavigation angles @query into the
+ * #guint pointed to by the @cur_angle variable, and the number of available
+ * angles into the #guint pointed to by the @n_angles variable.
+ *
+ * Returns: %TRUE if the query could be successfully parsed. %FALSE if not.
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_query_parse_angles (GstQuery * query, guint * cur_angle,
+    guint * n_angles)
+{
+  const GstStructure *structure;
+  gboolean ret = TRUE;
+
+  g_return_val_if_fail (GST_NAVIGATION_QUERY_HAS_TYPE (query, ANGLES), FALSE);
+
+  structure = gst_query_get_structure (query);
+
+  if (cur_angle)
+    ret &= gst_structure_get_uint (structure, "angle", cur_angle);
+
+  if (n_angles)
+    ret &= gst_structure_get_uint (structure, "angles", n_angles);
+
+  WARN_IF_FAIL (ret, "Couldn't extract details from angles query");
+
+  return ret;
+}
+
+/* Navigation Messages */
+
+#define GST_NAVIGATION_MESSAGE_HAS_TYPE(msg,msg_type) \
+(gst_navigation_message_get_type (msg) == GST_NAVIGATION_MESSAGE_ ## msg_type)
+
+/**
+ * gst_navigation_message_get_type:
+ * @message: A #GstMessage to inspect.
+ *
+ * Check a bus message to see if it is a #GstNavigation event, and return
+ * the #GstNavigationMessageType identifying the type of the message if so.
+ *
+ * Returns: The type of the #GstMessage, or
+ * #GST_NAVIGATION_MESSAGE_INVALID if the message is not a #GstNavigation
+ * notification.
+ *
+ * Since: 0.10.23
+ */
+GstNavigationMessageType
+gst_navigation_message_get_type (GstMessage * message)
+{
+  const GstStructure *s;
+  const gchar *m_type;
+
+  if (message == NULL || GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
+    return GST_NAVIGATION_MESSAGE_INVALID;
+
+  s = gst_message_get_structure (message);
+  if (s == NULL || !gst_structure_has_name (s, GST_NAVIGATION_MESSAGE_NAME))
+    return GST_NAVIGATION_MESSAGE_INVALID;
+
+  m_type = gst_structure_get_string (s, "type");
+  if (m_type == NULL)
+    return GST_NAVIGATION_MESSAGE_INVALID;
+
+  if (g_str_equal (m_type, "mouse-over"))
+    return GST_NAVIGATION_MESSAGE_MOUSE_OVER;
+  else if (g_str_equal (m_type, "commands-changed"))
+    return GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED;
+  else if (g_str_equal (m_type, "angles-changed"))
+    return GST_NAVIGATION_MESSAGE_ANGLES_CHANGED;
+
+  return GST_NAVIGATION_MESSAGE_INVALID;
+}
+
+/**
+ * gst_navigation_message_new_mouse_over:
+ * @src: A #GstObject to set as source of the new message.
+ * @active: %TRUE if the mouse has entered a clickable area of the display.
+ * %FALSE if it over a non-clickable area.
+ *
+ * Creates a new #GstNavigation message with type
+ * #GST_NAVIGATION_MESSAGE_MOUSE_OVER.
+ *
+ * Returns: The new #GstMessage.
+ * Since: 0.10.23
+ */
+GstMessage *
+gst_navigation_message_new_mouse_over (GstObject * src, gboolean active)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  s = gst_structure_new (GST_NAVIGATION_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "mouse-over", "active", G_TYPE_BOOLEAN, active,
+      NULL);
+
+  m = gst_message_new_custom (GST_MESSAGE_ELEMENT, src, s);
+
+  return m;
+}
+
+/**
+ * gst_navigation_message_parse_mouse_over:
+ * @message: A #GstMessage to inspect.
+ * @active: A pointer to a gboolean to receive the active/inactive state,
+ * or NULL.
+ *
+ * Parse a #GstNavigation message of type #GST_NAVIGATION_MESSAGE_MOUSE_OVER
+ * and extract the active/inactive flag. If the mouse over event is marked
+ * active, it indicates that the mouse is over a clickable area.
+ *
+ * Returns: %TRUE if the message could be successfully parsed. %FALSE if not.
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_message_parse_mouse_over (GstMessage * message,
+    gboolean * active)
+{
+  if (!GST_NAVIGATION_MESSAGE_HAS_TYPE (message, MOUSE_OVER))
+    return FALSE;
+
+  if (active) {
+    const GstStructure *s = gst_message_get_structure (message);
+    if (gst_structure_get_boolean (s, "active", active) == FALSE)
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_navigation_message_new_commands_changed:
+ * @src: A #GstObject to set as source of the new message.
+ *
+ * Creates a new #GstNavigation message with type
+ * #GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED
+ *
+ * Returns: The new #GstMessage.
+ * Since: 0.10.23
+ */
+GstMessage *
+gst_navigation_message_new_commands_changed (GstObject * src)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  s = gst_structure_new (GST_NAVIGATION_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "commands-changed", NULL);
+
+  m = gst_message_new_custom (GST_MESSAGE_ELEMENT, src, s);
+
+  return m;
+}
+
+/**
+ * gst_navigation_message_new_angles_changed:
+ * @src: A #GstObject to set as source of the new message.
+ * @cur_angle: The currently selected angle.
+ * @n_angles: The number of viewing angles now available.
+ *
+ * Creates a new #GstNavigation message with type
+ * #GST_NAVIGATION_MESSAGE_ANGLES_CHANGED for notifying an application
+ * that the current angle, or current number of angles available in a
+ * multiangle video has changed.
+ *
+ * Returns: The new #GstMessage.
+ * Since: 0.10.23
+ */
+GstMessage *
+gst_navigation_message_new_angles_changed (GstObject * src, guint cur_angle,
+    guint n_angles)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  s = gst_structure_new (GST_NAVIGATION_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "angles-changed",
+      "angle", G_TYPE_UINT, cur_angle, "angles", G_TYPE_UINT, n_angles, NULL);
+
+  m = gst_message_new_custom (GST_MESSAGE_ELEMENT, src, s);
+
+  return m;
+}
+
+/**
+ * gst_navigation_message_parse_angles_changed:
+ * @message: A #GstMessage to inspect.
+ * @cur_angle: A pointer to a #guint to receive the new current angle number,
+ * or NULL
+ * @n_angles: A pointer to a #guint to receive the new angle count, or NULL.
+ *
+ * Parse a #GstNavigation message of type GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
+ * and extract the @cur_angle and @n_angles parameters.
+ *
+ * Returns: %TRUE if the message could be successfully parsed. %FALSE if not.
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_message_parse_angles_changed (GstMessage * message,
+    guint * cur_angle, guint * n_angles)
+{
+  const GstStructure *s;
+  gboolean ret = TRUE;
+
+  g_return_val_if_fail (GST_NAVIGATION_MESSAGE_HAS_TYPE (message,
+          ANGLES_CHANGED), FALSE);
+
+  s = gst_message_get_structure (message);
+  if (cur_angle)
+    ret &= gst_structure_get_uint (s, "angle", cur_angle);
+
+  if (n_angles)
+    ret &= gst_structure_get_uint (s, "angles", n_angles);
+
+  WARN_IF_FAIL (ret, "Couldn't extract details from angles-changed event");
+
+  return ret;
+}
+
+#define GST_NAVIGATION_EVENT_HAS_TYPE(event,event_type) \
+(gst_navigation_event_get_type (event) == GST_NAVIGATION_EVENT_ ## event_type)
+
+/**
+ * gst_navigation_event_get_type:
+ * @event: A #GstEvent to inspect.
+ *
+ * Inspect a #GstEvent and return the #GstNavigationEventType of the event, or
+ * #GST_NAVIGATION_EVENT_INVALID if the event is not a #GstNavigation event.
+ *
+ * Since: 0.10.23
+ */
+GstNavigationEventType
+gst_navigation_event_get_type (GstEvent * event)
+{
+  const GstStructure *s;
+  const gchar *e_type;
+
+  if (event == NULL || GST_EVENT_TYPE (event) != GST_EVENT_NAVIGATION)
+    return GST_NAVIGATION_EVENT_INVALID;
+
+  s = gst_event_get_structure (event);
+  if (s == NULL || !gst_structure_has_name (s, GST_NAVIGATION_EVENT_NAME))
+    return GST_NAVIGATION_EVENT_INVALID;
+
+  e_type = gst_structure_get_string (s, "event");
+  if (e_type == NULL)
+    return GST_NAVIGATION_EVENT_INVALID;
+
+  if (g_str_equal (e_type, "mouse-button-press"))
+    return GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS;
+  else if (g_str_equal (e_type, "mouse-button-release"))
+    return GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE;
+  else if (g_str_equal (e_type, "mouse-move"))
+    return GST_NAVIGATION_EVENT_MOUSE_MOVE;
+  else if (g_str_equal (e_type, "key-press"))
+    return GST_NAVIGATION_EVENT_KEY_PRESS;
+  else if (g_str_equal (e_type, "key-release"))
+    return GST_NAVIGATION_EVENT_KEY_RELEASE;
+  else if (g_str_equal (e_type, "command"))
+    return GST_NAVIGATION_EVENT_COMMAND;
+
+  return GST_NAVIGATION_EVENT_INVALID;
+}
+
+/**
+ * gst_navigation_event_parse_key_event:
+ * @event: A #GstEvent to inspect.
+ * @key: A pointer to a location to receive the string identifying the key
+ * press. The returned string is owned by the event, and valid only until the
+ * event is unreffed.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_event_parse_key_event (GstEvent * event, const gchar ** key)
+{
+  GstNavigationEventType e_type;
+  const GstStructure *s;
+
+  e_type = gst_navigation_event_get_type (event);
+  g_return_val_if_fail (e_type == GST_NAVIGATION_EVENT_KEY_PRESS ||
+      e_type == GST_NAVIGATION_EVENT_KEY_RELEASE, FALSE);
+
+  if (key) {
+    s = gst_event_get_structure (event);
+    *key = gst_structure_get_string (s, "key");
+    if (*key == NULL)
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_navigation_event_parse_mouse_button_event:
+ * @event: A #GstEvent to inspect.
+ * @button: Pointer to a gint that will receive the button number associated
+ * with the event.
+ * @x: Pointer to a gdouble to receive the x coordinate of the mouse button
+ * event.
+ * @y: Pointer to a gdouble to receive the y coordinate of the mouse button
+ * event.
+ * 
+ * Retrieve the details of either a #GstNavigation mouse button press event or
+ * a mouse button release event. Determine which type the event is using
+ * gst_navigation_event_get_type() to retrieve the #GstNavigationEventType.
+ *
+ * Returns: TRUE if the button number and both coordinates could be extracted,
+ *     otherwise FALSE.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_event_parse_mouse_button_event (GstEvent * event, gint * button,
+    gdouble * x, gdouble * y)
+{
+  GstNavigationEventType e_type;
+  const GstStructure *s;
+  gboolean ret = TRUE;
+
+  e_type = gst_navigation_event_get_type (event);
+  g_return_val_if_fail (e_type == GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS ||
+      e_type == GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE, FALSE);
+
+  s = gst_event_get_structure (event);
+  if (x)
+    ret &= gst_structure_get_double (s, "pointer_x", x);
+  if (y)
+    ret &= gst_structure_get_double (s, "pointer_y", y);
+  if (button)
+    ret &= gst_structure_get_int (s, "button", button);
+
+  WARN_IF_FAIL (ret, "Couldn't extract details from mouse button event");
+
+  return ret;
+}
+
+/**
+ * gst_navigation_event_parse_mouse_move_event:
+ * @event: A #GstEvent to inspect.
+ * @x: Pointer to a gdouble to receive the x coordinate of the mouse movement.
+ * @y: Pointer to a gdouble to receive the y coordinate of the mouse movement.
+ *
+ * Inspect a #GstNavigation mouse movement event and extract the coordinates
+ * of the event.
+ *
+ * Returns: TRUE if both coordinates could be extracted, otherwise FALSE.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_event_parse_mouse_move_event (GstEvent * event, gdouble * x,
+    gdouble * y)
+{
+  const GstStructure *s;
+  gboolean ret = TRUE;
+
+  g_return_val_if_fail (GST_NAVIGATION_EVENT_HAS_TYPE (event, MOUSE_MOVE),
+      FALSE);
+
+  s = gst_event_get_structure (event);
+  if (x)
+    ret &= gst_structure_get_double (s, "pointer_x", x);
+  if (y)
+    ret &= gst_structure_get_double (s, "pointer_y", y);
+
+  WARN_IF_FAIL (ret, "Couldn't extract positions from mouse move event");
+
+  return ret;
+}
+
+/**
+ * gst_navigation_event_parse_command:
+ * @event: A #GstEvent to inspect.
+ * @command: Pointer to GstNavigationCommand to receive the type of the
+ * navigation event.
+ *
+ * Inspect a #GstNavigation command event and retrieve the enum value of the
+ * associated command.
+ *
+ * Returns: TRUE if the navigation command could be extracted, otherwise FALSE.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_navigation_event_parse_command (GstEvent * event,
+    GstNavigationCommand * command)
+{
+  const GstStructure *s;
+  gboolean ret = TRUE;
+
+  g_return_val_if_fail (GST_NAVIGATION_EVENT_HAS_TYPE (event, COMMAND), FALSE);
+
+  if (command) {
+    s = gst_event_get_structure (event);
+    ret = gst_structure_get_uint (s, "command-code", (guint *) command);
+    WARN_IF_FAIL (ret, "Couldn't extract command code from command event");
+  }
+
+  return ret;
+}
diff --git a/gst-libs/gst/interfaces/navigation.h b/gst-libs/gst/interfaces/navigation.h
new file mode 100644
index 0000000..b4eaca5
--- /dev/null
+++ b/gst-libs/gst/interfaces/navigation.h
@@ -0,0 +1,273 @@
+/* GStreamer Navigation
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2003 David A. Schleef <ds@schleef.org>
+ *
+ * navigation.h: navigation interface design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_NAVIGATION_H__
+#define __GST_NAVIGATION_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_NAVIGATION \
+  (gst_navigation_get_type ())
+#define GST_NAVIGATION(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NAVIGATION, GstNavigation))
+#define GST_IS_NAVIGATION(obj) \
+      (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NAVIGATION))
+#define GST_NAVIGATION_GET_IFACE(obj) \
+    (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_NAVIGATION, GstNavigationInterface))
+
+typedef struct _GstNavigation GstNavigation;
+typedef struct _GstNavigationInterface GstNavigationInterface;
+
+/**
+ * GstNavigationInterface:
+ * @g_iface: the parent interface
+ * @send_event: sending a navigation event
+ *
+ * Color-balance interface.
+ */
+struct _GstNavigationInterface {
+  GTypeInterface g_iface;
+
+  /* virtual functions */
+  void (*send_event) (GstNavigation *navigation, GstStructure *structure);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_navigation_get_type (void);
+
+/* Navigation commands */
+
+/**
+ * GstNavigationCommand:
+ * @GST_NAVIGATION_COMMAND_INVALID: An invalid command entry
+ * @GST_NAVIGATION_COMMAND_MENU1: Execute navigation menu command 1. For DVD,
+ * this enters the DVD root menu, or exits back to the title from the menu.
+ * @GST_NAVIGATION_COMMAND_MENU2: Execute navigation menu command 2. For DVD,
+ * this jumps to the DVD title menu.
+ * @GST_NAVIGATION_COMMAND_MENU3: Execute navigation menu command 3. For DVD,
+ * this jumps into the DVD root menu.
+ * @GST_NAVIGATION_COMMAND_MENU4: Execute navigation menu command 4. For DVD,
+ * this jumps to the Subpicture menu.
+ * @GST_NAVIGATION_COMMAND_MENU5: Execute navigation menu command 5. For DVD,
+ * the jumps to the audio menu.
+ * @GST_NAVIGATION_COMMAND_MENU6: Execute navigation menu command 6. For DVD,
+ * this jumps to the angles menu.
+ * @GST_NAVIGATION_COMMAND_MENU7: Execute navigation menu command 7. For DVD,
+ * this jumps to the chapter menu.
+ * @GST_NAVIGATION_COMMAND_LEFT: Select the next button to the left in a menu,
+ * if such a button exists.
+ * @GST_NAVIGATION_COMMAND_RIGHT: Select the next button to the right in a menu,
+ * if such a button exists.
+ * @GST_NAVIGATION_COMMAND_UP: Select the button above the current one in a
+ * menu, if such a button exists.
+ * @GST_NAVIGATION_COMMAND_DOWN: Select the button below the current one in a
+ * menu, if such a button exists.
+ * @GST_NAVIGATION_COMMAND_ACTIVATE: Activate (click) the currently selected
+ * button in a menu, if such a button exists.
+ * @GST_NAVIGATION_COMMAND_PREV_ANGLE: Switch to the previous angle in a
+ * multiangle feature.
+ * @GST_NAVIGATION_COMMAND_NEXT_ANGLE: Switch to the next angle in a multiangle
+ * feature.
+ *
+ * A set of commands that may be issued to an element providing the
+ * #GstNavigation interface. The available commands can be queried via
+ * the gst_navigation_query_new_commands() query.
+ *
+ * For convenience in handling DVD navigation, the MENU commands are aliased as:
+ *    GST_NAVIGATION_COMMAND_DVD_MENU            = @GST_NAVIGATION_COMMAND_MENU1
+ *    GST_NAVIGATION_COMMAND_DVD_TITLE_MENU      = @GST_NAVIGATION_COMMAND_MENU2
+ *    GST_NAVIGATION_COMMAND_DVD_ROOT_MENU       = @GST_NAVIGATION_COMMAND_MENU3
+ *    GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU = @GST_NAVIGATION_COMMAND_MENU4
+ *    GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU      = @GST_NAVIGATION_COMMAND_MENU5
+ *    GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU      = @GST_NAVIGATION_COMMAND_MENU6
+ *    GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    = @GST_NAVIGATION_COMMAND_MENU7
+ *
+ * Since: 0.10.23
+ */
+typedef enum {
+  GST_NAVIGATION_COMMAND_INVALID  = 0,
+
+  GST_NAVIGATION_COMMAND_MENU1    = 1,
+  GST_NAVIGATION_COMMAND_MENU2    = 2,
+  GST_NAVIGATION_COMMAND_MENU3    = 3,
+  GST_NAVIGATION_COMMAND_MENU4    = 4,
+  GST_NAVIGATION_COMMAND_MENU5    = 5,
+  GST_NAVIGATION_COMMAND_MENU6    = 6,
+  GST_NAVIGATION_COMMAND_MENU7    = 7,
+
+  GST_NAVIGATION_COMMAND_LEFT     = 20,
+  GST_NAVIGATION_COMMAND_RIGHT    = 21,
+  GST_NAVIGATION_COMMAND_UP       = 22,
+  GST_NAVIGATION_COMMAND_DOWN     = 23,
+  GST_NAVIGATION_COMMAND_ACTIVATE = 24,
+
+  GST_NAVIGATION_COMMAND_PREV_ANGLE = 30,
+  GST_NAVIGATION_COMMAND_NEXT_ANGLE = 31
+} GstNavigationCommand;
+
+/* Some aliases for the menu command types */
+#define GST_NAVIGATION_COMMAND_DVD_MENU            GST_NAVIGATION_COMMAND_MENU1
+#define GST_NAVIGATION_COMMAND_DVD_TITLE_MENU      GST_NAVIGATION_COMMAND_MENU2
+#define GST_NAVIGATION_COMMAND_DVD_ROOT_MENU       GST_NAVIGATION_COMMAND_MENU3
+#define GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU GST_NAVIGATION_COMMAND_MENU4
+#define GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU      GST_NAVIGATION_COMMAND_MENU5
+#define GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU      GST_NAVIGATION_COMMAND_MENU6
+#define GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    GST_NAVIGATION_COMMAND_MENU7
+
+/* Queries */
+/**
+ * GstNavigationQueryType:
+ * @GST_NAVIGATION_QUERY_INVALID: invalid query
+ * @GST_NAVIGATION_QUERY_COMMANDS: command query
+ * @GST_NAVIGATION_QUERY_ANGLES: viewing angle query
+ *
+ * Tyoes of navigation interface queries.
+ */
+typedef enum
+{
+  GST_NAVIGATION_QUERY_INVALID     = 0,
+  GST_NAVIGATION_QUERY_COMMANDS    = 1,
+  GST_NAVIGATION_QUERY_ANGLES      = 2
+} GstNavigationQueryType;
+
+GstNavigationQueryType gst_navigation_query_get_type (GstQuery *query);
+
+GstQuery *gst_navigation_query_new_commands (void);
+void gst_navigation_query_set_commands (GstQuery *query, gint n_cmds, ...);
+void gst_navigation_query_set_commandsv (GstQuery *query, gint n_cmds,
+    GstNavigationCommand *cmds);
+gboolean gst_navigation_query_parse_commands_length (GstQuery *query,
+                                                 guint *n_cmds);
+gboolean gst_navigation_query_parse_commands_nth (GstQuery *query, guint nth,
+                                              GstNavigationCommand *cmd);
+
+GstQuery *gst_navigation_query_new_angles (void);
+void gst_navigation_query_set_angles (GstQuery *query, guint cur_angle,
+                                      guint n_angles);
+gboolean gst_navigation_query_parse_angles (GstQuery *query, guint *cur_angle,
+                                            guint *n_angles);
+
+/* Element messages */
+/**
+ * GstNavigationMessageType:
+ * @GST_NAVIGATION_MESSAGE_INVALID: Returned from
+ * gst_navigation_message_get_type() when the passed message is not a
+ * navigation message.
+ * @GST_NAVIGATION_MESSAGE_MOUSE_OVER: Sent when the mouse moves over or leaves a
+ * clickable region of the output, such as a DVD menu button.
+ * @GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED: Sent when the set of available commands
+ * changes and should re-queried by interested applications.
+ * @GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: Sent when display angles in a multi-angle
+ * feature (such as a multiangle DVD) change - either angles have appeared or
+ * disappeared.
+ *
+ * A set of notifications that may be received on the bus when navigation
+ * related status changes.
+ *
+ * Since: 0.10.23
+ */
+typedef enum {
+  GST_NAVIGATION_MESSAGE_INVALID,
+  GST_NAVIGATION_MESSAGE_MOUSE_OVER,
+  GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
+  GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
+} GstNavigationMessageType;
+
+GstNavigationMessageType gst_navigation_message_get_type (GstMessage *message);
+
+GstMessage *gst_navigation_message_new_mouse_over (GstObject *src,
+                                                   gboolean active);
+gboolean gst_navigation_message_parse_mouse_over (GstMessage *message,
+                                              gboolean *active);
+
+GstMessage *gst_navigation_message_new_commands_changed (GstObject *src);
+
+GstMessage *gst_navigation_message_new_angles_changed (GstObject *src,
+                                                       guint cur_angle,
+                                                       guint n_angles);
+gboolean gst_navigation_message_parse_angles_changed (GstMessage *message,
+                                                      guint *cur_angle,
+                                                      guint *n_angles);
+
+/* event parsing functions */
+/**
+ * GstNavigationEventType:
+ * @GST_NAVIGATION_EVENT_INVALID: Returned from
+ * gst_navigation_event_get_type() when the passed event is not a navigation event.
+ * @GST_NAVIGATION_EVENT_KEY_PRESS: A key press event. Use
+ * gst_navigation_event_parse_key_event() to extract the details from the event.
+ * @GST_NAVIGATION_EVENT_KEY_RELEASE: A key release event. Use
+ * gst_navigation_event_parse_key_event() to extract the details from the event.
+ * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS: A mouse button press event. Use
+ * gst_navigation_event_parse_mouse_button_event() to extract the details from the
+ * event.
+ * @GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE: A mouse button release event. Use
+ * gst_navigation_event_parse_mouse_button_event() to extract the details from the
+ * event.
+ * @GST_NAVIGATION_EVENT_MOUSE_MOVE: A mouse movement event. Use
+ * gst_navigation_event_parse_mouse_move_event() to extract the details from the
+ * event.
+ * @GST_NAVIGATION_EVENT_COMMAND: A navigation command event. Use
+ * gst_navigation_event_parse_command() to extract the details from the event.
+ *
+ * Enum values for the various events that an element implementing the
+ * GstNavigation interface might send up the pipeline.
+ *
+ * Since: 0.10.23
+ */
+typedef enum {
+  GST_NAVIGATION_EVENT_INVALID                    = 0,
+  GST_NAVIGATION_EVENT_KEY_PRESS                  = 1,
+  GST_NAVIGATION_EVENT_KEY_RELEASE                = 2,
+  GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS         = 3,
+  GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE       = 4,
+  GST_NAVIGATION_EVENT_MOUSE_MOVE                 = 5,
+  GST_NAVIGATION_EVENT_COMMAND                    = 6
+} GstNavigationEventType;
+
+GstNavigationEventType gst_navigation_event_get_type (GstEvent *event);
+gboolean gst_navigation_event_parse_key_event (GstEvent *event,
+    const gchar **key);
+gboolean gst_navigation_event_parse_mouse_button_event (GstEvent *event,
+    gint *button, gdouble *x, gdouble *y);
+gboolean gst_navigation_event_parse_mouse_move_event (GstEvent *event,
+    gdouble *x, gdouble *y);
+gboolean gst_navigation_event_parse_command (GstEvent *event,
+    GstNavigationCommand *command);
+
+/* interface virtual function wrappers */
+void gst_navigation_send_event (GstNavigation *navigation,
+        GstStructure *structure);
+void gst_navigation_send_key_event (GstNavigation *navigation,
+        const char *event, const char *key);
+void gst_navigation_send_mouse_event (GstNavigation *navigation,
+        const char *event, int button, double x, double y);
+void gst_navigation_send_command (GstNavigation *navigation,
+        GstNavigationCommand command);
+
+G_END_DECLS
+
+#endif /* __GST_NAVIGATION_H__ */
diff --git a/gst-libs/gst/interfaces/propertyprobe.c b/gst-libs/gst/interfaces/propertyprobe.c
new file mode 100644
index 0000000..64d0d39
--- /dev/null
+++ b/gst-libs/gst/interfaces/propertyprobe.c
@@ -0,0 +1,378 @@
+/* GStreamer PropertyProbe
+ * Copyright (C) 2003 David Schleef <ds@schleef.org>
+ *
+ * property_probe.c: property_probe design virtual class function wrappers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstpropertyprobe
+ * @short_description: Interface for probing possible property values
+ *
+ * The property probe is a way to autodetect allowed values for a GObject
+ * property. It's primary use is to autodetect device-names in several elements.
+ *
+ * The interface is implemented by many hardware sources and sinks.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "propertyprobe.h"
+
+enum
+{
+  SIGNAL_PROBE_NEEDED,
+  LAST_SIGNAL
+};
+
+static void gst_property_probe_iface_init (GstPropertyProbeInterface * iface);
+
+static guint gst_property_probe_signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_property_probe_get_type (void)
+{
+  static GType gst_property_probe_type = 0;
+
+  if (!gst_property_probe_type) {
+    static const GTypeInfo gst_property_probe_info = {
+      sizeof (GstPropertyProbeInterface),
+      (GBaseInitFunc) gst_property_probe_iface_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_property_probe_type =
+        g_type_register_static (G_TYPE_INTERFACE,
+        "GstPropertyProbe", &gst_property_probe_info, 0);
+  }
+
+  return gst_property_probe_type;
+}
+
+static void
+gst_property_probe_iface_init (GstPropertyProbeInterface * iface)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized) {
+    /**
+     * GstPropertyProbe::probe-needed
+     * @pspec: #GParamSpec that needs a probe
+     *
+     */
+    /* FIXME:
+     * what is the purpose of this signal, I can't find any usage of it
+     * according to proto n *.h, it should be g_cclosure_marshal_VOID__PARAM
+     */
+    gst_property_probe_signals[SIGNAL_PROBE_NEEDED] =
+        g_signal_new ("probe-needed", G_TYPE_FROM_CLASS (iface),
+        G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstPropertyProbeInterface,
+            probe_needed), NULL, NULL, g_cclosure_marshal_VOID__POINTER,
+        G_TYPE_NONE, 1, G_TYPE_POINTER);
+    initialized = TRUE;
+  }
+
+  /* default virtual functions */
+  iface->get_properties = NULL;
+  iface->get_values = NULL;
+}
+
+/**
+ * gst_property_probe_get_properties:
+ * @probe: the #GstPropertyProbe to get the properties for.
+ *
+ * Get a list of properties for which probing is supported.
+ *
+ * Returns: the list of properties for which probing is supported
+ * by this element.
+ */
+const GList *
+gst_property_probe_get_properties (GstPropertyProbe * probe)
+{
+  GstPropertyProbeInterface *iface;
+
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+
+  iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
+
+  if (iface->get_properties)
+    return iface->get_properties (probe);
+
+  return NULL;
+}
+
+/**
+ * gst_property_probe_get_property:
+ * @probe: the #GstPropertyProbe to get the properties for.
+ * @name: name of the property.
+ *
+ * Get #GParamSpec for a property for which probing is supported.
+ *
+ * Returns: the #GParamSpec of %NULL.
+ */
+const GParamSpec *
+gst_property_probe_get_property (GstPropertyProbe * probe, const gchar * name)
+{
+  const GList *pspecs;
+
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  pspecs = gst_property_probe_get_properties (probe);
+
+  while (pspecs) {
+    const GParamSpec *pspec = pspecs->data;
+
+    if (pspec) {
+      if (!strcmp (pspec->name, name))
+        return pspec;
+    } else {
+      GST_WARNING_OBJECT (probe, "NULL paramspec in property probe list");
+    }
+
+    pspecs = pspecs->next;
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_property_probe_probe_property:
+ * @probe: the #GstPropertyProbe to check.
+ * @pspec: #GParamSpec of the property.
+ *
+ * Runs a probe on the property specified by @pspec
+ */
+void
+gst_property_probe_probe_property (GstPropertyProbe * probe,
+    const GParamSpec * pspec)
+{
+  GstPropertyProbeInterface *iface;
+
+  g_return_if_fail (probe != NULL);
+  g_return_if_fail (GST_IS_PROPERTY_PROBE (probe));
+  g_return_if_fail (pspec != NULL);
+
+  iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
+
+  if (iface->probe_property)
+    iface->probe_property (probe, pspec->param_id, pspec);
+}
+
+/**
+ * gst_property_probe_probe_property_name:
+ * @probe: the #GstPropertyProbe to check.
+ * @name: name of the property.
+ *
+ * Runs a probe on the property specified by @name.
+ */
+void
+gst_property_probe_probe_property_name (GstPropertyProbe * probe,
+    const gchar * name)
+{
+  const GParamSpec *pspec;
+
+  g_return_if_fail (probe != NULL);
+  g_return_if_fail (GST_IS_PROPERTY_PROBE (probe));
+  g_return_if_fail (name != NULL);
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (probe), name);
+  if (!pspec) {
+    g_warning ("No such property %s", name);
+    return;
+  }
+
+  gst_property_probe_probe_property (probe, pspec);
+}
+
+/**
+ * gst_property_probe_needs_probe:
+ * @probe: the #GstPropertyProbe object to which the given property belongs.
+ * @pspec: a #GParamSpec that identifies the property to check.
+ *
+ * Checks whether a property needs a probe. This might be because
+ * the property wasn't initialized before, or because host setup
+ * changed. This might be, for example, because a new device was
+ * added, and thus device probing needs to be refreshed to display
+ * the new device.
+ *
+ * Returns: TRUE if the property needs a new probe, FALSE if not.
+ */
+gboolean
+gst_property_probe_needs_probe (GstPropertyProbe * probe,
+    const GParamSpec * pspec)
+{
+  GstPropertyProbeInterface *iface;
+
+  g_return_val_if_fail (probe != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), FALSE);
+  g_return_val_if_fail (pspec != NULL, FALSE);
+
+  iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
+
+  if (iface->needs_probe)
+    return iface->needs_probe (probe, pspec->param_id, pspec);
+
+  return FALSE;
+}
+
+/**
+ * gst_property_probe_needs_probe_name:
+ * @probe: the #GstPropertyProbe object to which the given property belongs.
+ * @name: the name of the property to check.
+ *
+ * Same as gst_property_probe_needs_probe ().
+ *
+ * Returns: TRUE if the property needs a new probe, FALSE if not.
+ */
+gboolean
+gst_property_probe_needs_probe_name (GstPropertyProbe * probe,
+    const gchar * name)
+{
+  const GParamSpec *pspec;
+
+  g_return_val_if_fail (probe != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), FALSE);
+  g_return_val_if_fail (name != NULL, FALSE);
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (probe), name);
+  if (!pspec) {
+    g_warning ("No such property %s", name);
+    return FALSE;
+  }
+
+  return gst_property_probe_needs_probe (probe, pspec);
+}
+
+/**
+ * gst_property_probe_get_values:
+ * @probe: the #GstPropertyProbe object.
+ * @pspec: the #GParamSpec property identifier.
+ *
+ * Gets the possible (probed) values for the given property,
+ * requires the property to have been probed before.
+ *
+ * Returns: A list of valid values for the given property.
+ */
+GValueArray *
+gst_property_probe_get_values (GstPropertyProbe * probe,
+    const GParamSpec * pspec)
+{
+  GstPropertyProbeInterface *iface;
+
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+  g_return_val_if_fail (pspec != NULL, NULL);
+
+  iface = GST_PROPERTY_PROBE_GET_IFACE (probe);
+
+  if (iface->get_values)
+    return iface->get_values (probe, pspec->param_id, pspec);
+
+  return NULL;
+}
+
+/**
+ * gst_property_probe_get_values_name:
+ * @probe: the #GstPropertyProbe object.
+ * @name: the name of the property to get values for.
+ *
+ * Same as gst_property_probe_get_values ().
+ *
+ * Returns: A list of valid values for the given property.
+ */
+GValueArray *
+gst_property_probe_get_values_name (GstPropertyProbe * probe,
+    const gchar * name)
+{
+  const GParamSpec *pspec;
+
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (probe), name);
+  if (!pspec) {
+    g_warning ("No such property %s", name);
+    return NULL;
+  }
+
+  return gst_property_probe_get_values (probe, pspec);
+}
+
+/**
+ * gst_property_probe_probe_and_get_values:
+ * @probe: the #GstPropertyProbe object.
+ * @pspec: The #GParamSpec property identifier.
+ *
+ * Check whether the given property requires a new probe. If so,
+ * fo the probe. After that, retrieve a value list. Meant as a
+ * utility function that wraps the above functions.
+ *
+ * Returns: the list of valid values for this property.
+ */
+GValueArray *
+gst_property_probe_probe_and_get_values (GstPropertyProbe * probe,
+    const GParamSpec * pspec)
+{
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+  g_return_val_if_fail (pspec != NULL, NULL);
+
+  if (gst_property_probe_needs_probe (probe, pspec))
+    gst_property_probe_probe_property (probe, pspec);
+
+  return gst_property_probe_get_values (probe, pspec);
+}
+
+/**
+ * gst_property_probe_probe_and_get_values_name:
+ * @probe: the #GstPropertyProbe object.
+ * @name: the name of the property to get values for.
+ *
+ * Same as gst_property_probe_probe_and_get_values ().
+ *
+ * Returns: the list of valid values for this property.
+ */
+GValueArray *
+gst_property_probe_probe_and_get_values_name (GstPropertyProbe * probe,
+    const gchar * name)
+{
+  const GParamSpec *pspec;
+
+  g_return_val_if_fail (probe != NULL, NULL);
+  g_return_val_if_fail (GST_IS_PROPERTY_PROBE (probe), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (probe), name);
+  if (!pspec) {
+    g_warning ("No such property %s", name);
+    return NULL;
+  }
+
+  return gst_property_probe_probe_and_get_values (probe, pspec);
+}
diff --git a/gst-libs/gst/interfaces/propertyprobe.h b/gst-libs/gst/interfaces/propertyprobe.h
new file mode 100644
index 0000000..5b67af2
--- /dev/null
+++ b/gst-libs/gst/interfaces/propertyprobe.h
@@ -0,0 +1,115 @@
+/* GStreamer PropertyProbe
+ * Copyright (C) 2003 David A. Schleef <ds@schleef.org>
+ *
+ * property_probe.h: property_probe interface design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PROPERTY_PROBE_H__
+#define __GST_PROPERTY_PROBE_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_PROPERTY_PROBE \
+  (gst_property_probe_get_type ())
+#define GST_PROPERTY_PROBE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PROPERTY_PROBE, GstPropertyProbe))
+#define GST_IS_PROPERTY_PROBE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PROPERTY_PROBE))
+#define GST_PROPERTY_PROBE_GET_IFACE(obj) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_PROPERTY_PROBE, GstPropertyProbeInterface))
+
+/**
+ * GstPropertyProbe:
+ *
+ * Opaque #GstPropertyProbe data structure.
+ */
+typedef struct _GstPropertyProbe GstPropertyProbe; /* dummy typedef */
+typedef struct _GstPropertyProbeInterface GstPropertyProbeInterface;
+
+/**
+ * GstPropertyProbeInterface:
+ * @klass: parent interface type.
+ * @probe_needed: default signal handler
+ * @get_properties: virtual method to get list of probable properties
+ * @needs_probe: virtual method to tell if probe need update
+ * @probe_property: virtual method to probe a property
+ * @get_values: virtual method to get probe results for a property
+ *
+ * #GstPropertyProbe interface.
+ */
+struct _GstPropertyProbeInterface {
+  GTypeInterface klass;
+
+  /* signals */
+  void          (*probe_needed)   (GstPropertyProbe *probe,
+                                   const GParamSpec *pspec);
+
+  /* virtual functions */
+  const GList * (*get_properties) (GstPropertyProbe *probe);
+  gboolean      (*needs_probe)    (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+  void          (*probe_property) (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+  GValueArray * (*get_values)     (GstPropertyProbe *probe,
+                                   guint             prop_id,
+                                   const GParamSpec *pspec);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType        gst_property_probe_get_type       (void);
+
+/* virtual class function wrappers */
+
+/* returns list of GParamSpecs */
+const GList *     gst_property_probe_get_properties      (GstPropertyProbe *probe);
+const GParamSpec *gst_property_probe_get_property        (GstPropertyProbe *probe,
+                                                          const gchar      *name);
+
+/* probe one property */
+void              gst_property_probe_probe_property      (GstPropertyProbe *probe,
+                                                          const GParamSpec *pspec);
+void              gst_property_probe_probe_property_name (GstPropertyProbe *probe,
+                                                          const gchar      *name);
+
+/* do we need a probe? */
+gboolean          gst_property_probe_needs_probe         (GstPropertyProbe *probe,
+                                                          const GParamSpec *pspec);
+gboolean          gst_property_probe_needs_probe_name    (GstPropertyProbe *probe,
+                                                          const gchar      *name);
+
+/* returns list of GValues */
+GValueArray *     gst_property_probe_get_values          (GstPropertyProbe *probe,
+                                                          const GParamSpec *pspec);
+GValueArray *     gst_property_probe_get_values_name     (GstPropertyProbe *probe,
+                                                          const gchar      *name);
+
+/* sugar */
+GValueArray *     gst_property_probe_probe_and_get_values (GstPropertyProbe *probe,
+                                                          const GParamSpec *pspec);
+GValueArray *     gst_property_probe_probe_and_get_values_name (GstPropertyProbe *probe,
+                                                          const gchar      *name);
+
+G_END_DECLS
+
+#endif /* __GST_PROPERTY_PROBE_H__ */
diff --git a/gst-libs/gst/interfaces/streamvolume.c b/gst-libs/gst/interfaces/streamvolume.c
new file mode 100644
index 0000000..509d295
--- /dev/null
+++ b/gst-libs/gst/interfaces/streamvolume.c
@@ -0,0 +1,225 @@
+/* GStreamer Mixer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gststreamvolume
+ * @short_description: Interface for elements that provide a stream volume
+ *
+ * <refsect2>
+ * <para>
+ * This interface is implemented by elements that provide a stream volume. Examples for
+ * such elements are #volume and #playbin2.
+ * </para>
+ * <para>
+ * Applications can use this interface to get or set the current stream volume. For this
+ * the "volume" #GObject property can be used or the helper functions gst_stream_volume_set_volume()
+ * and gst_stream_volume_get_volume(). This volume is always a linear factor, i.e. 0.0 is muted
+ * 1.0 is 100%. For showing the volume in a GUI it might make sense to convert it to
+ * a different format by using gst_stream_volume_convert_volume(). Volume sliders should usually
+ * use a cubic volume.
+ *
+ * Separate from the volume the stream can also be muted by the "mute" #GObject property or
+ * gst_stream_volume_set_mute() and gst_stream_volume_get_mute().
+ * </para>
+ * <para>
+ * Elements that provide some kind of stream volume should implement the "volume" and
+ * "mute" #GObject properties and handle setting and getting of them properly.
+ * The volume property is defined to be a linear volume factor.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "streamvolume.h"
+#include <math.h>
+
+static void
+gst_stream_volume_class_init (GstStreamVolumeInterface * iface)
+{
+  g_object_interface_install_property (iface,
+      g_param_spec_double ("volume",
+          "Volume",
+          "Linear volume factor, 1.0=100%",
+          0.0, G_MAXDOUBLE, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_interface_install_property (iface,
+      g_param_spec_boolean ("mute",
+          "Mute",
+          "Mute the audio channel without changing the volume",
+          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+GType
+gst_stream_volume_get_type (void)
+{
+  static volatile gsize type = 0;
+  if (g_once_init_enter (&type)) {
+    GType tmp;
+    static const GTypeInfo info = {
+      sizeof (GstStreamVolumeInterface),
+      NULL,                     /* base_init */
+      NULL,                     /* base_finalize */
+      (GClassInitFunc) gst_stream_volume_class_init,    /* class_init */
+      NULL,                     /* class_finalize */
+      NULL,                     /* class_data */
+      0,
+      0,                        /* n_preallocs */
+      NULL                      /* instance_init */
+    };
+    tmp = g_type_register_static (G_TYPE_INTERFACE,
+        "GstStreamVolume", &info, 0);
+    g_type_interface_add_prerequisite (tmp, G_TYPE_OBJECT);
+
+    g_once_init_leave (&type, tmp);
+  }
+  return type;
+}
+
+/**
+ * gst_stream_volume_get_volume:
+ * @volume: #GstStreamVolume that should be used
+ * @format: #GstStreamVolumeFormat which should be returned
+ *
+ * Returns: The current stream volume as linear factor
+ *
+ * Since: 0.10.25
+ */
+gdouble
+gst_stream_volume_get_volume (GstStreamVolume * volume,
+    GstStreamVolumeFormat format)
+{
+  gdouble val;
+
+  g_return_val_if_fail (GST_IS_STREAM_VOLUME (volume), 1.0);
+
+  g_object_get (volume, "volume", &val, NULL);
+  if (format != GST_STREAM_VOLUME_FORMAT_LINEAR)
+    val =
+        gst_stream_volume_convert_volume (GST_STREAM_VOLUME_FORMAT_LINEAR,
+        format, val);
+  return val;
+}
+
+/**
+ * gst_stream_volume_set_volume:
+ * @volume: #GstStreamVolume that should be used
+ * @format: #GstStreamVolumeFormat of @val
+ * @val: Linear volume factor that should be set
+ *
+ * Since: 0.10.25
+ */
+void
+gst_stream_volume_set_volume (GstStreamVolume * volume,
+    GstStreamVolumeFormat format, gdouble val)
+{
+  g_return_if_fail (GST_IS_STREAM_VOLUME (volume));
+
+  if (format != GST_STREAM_VOLUME_FORMAT_LINEAR)
+    val =
+        gst_stream_volume_convert_volume (format,
+        GST_STREAM_VOLUME_FORMAT_LINEAR, val);
+  g_object_set (volume, "volume", val, NULL);
+}
+
+/**
+ * gst_stream_volume_get_mute:
+ * @volume: #GstStreamVolume that should be used
+ *
+ * Returns: Returns %TRUE if the stream is muted
+ *
+ * Since: 0.10.25
+ */
+gboolean
+gst_stream_volume_get_mute (GstStreamVolume * volume)
+{
+  gboolean val;
+
+  g_return_val_if_fail (GST_IS_STREAM_VOLUME (volume), FALSE);
+
+  g_object_get (volume, "mute", &val, NULL);
+  return val;
+}
+
+/**
+ * gst_stream_volume_set_mute:
+ * @volume: #GstStreamVolume that should be used
+ * @mute: Mute state that should be set
+ *
+ * Since: 0.10.25
+ */
+void
+gst_stream_volume_set_mute (GstStreamVolume * volume, gboolean mute)
+{
+  g_return_if_fail (GST_IS_STREAM_VOLUME (volume));
+
+  g_object_set (volume, "mute", mute, NULL);
+}
+
+/**
+ * gst_stream_volume_convert_volume:
+ * @from: #GstStreamVolumeFormat to convert from
+ * @to: #GstStreamVolumeFormat to convert to
+ * @val: Volume in @from format that should be converted
+ *
+ * Returns: the converted volume
+ *
+ * Since: 0.10.25
+ */
+gdouble
+gst_stream_volume_convert_volume (GstStreamVolumeFormat from,
+    GstStreamVolumeFormat to, gdouble val)
+{
+  switch (from) {
+    case GST_STREAM_VOLUME_FORMAT_LINEAR:
+      g_return_val_if_fail (val >= 0.0, 0.0);
+      switch (to) {
+        case GST_STREAM_VOLUME_FORMAT_LINEAR:
+          return val;
+        case GST_STREAM_VOLUME_FORMAT_CUBIC:
+          return pow (val, 1 / 3.0);
+        case GST_STREAM_VOLUME_FORMAT_DB:
+          return 20.0 * log10 (val);
+      }
+      break;
+    case GST_STREAM_VOLUME_FORMAT_CUBIC:
+      g_return_val_if_fail (val >= 0.0, 0.0);
+      switch (to) {
+        case GST_STREAM_VOLUME_FORMAT_LINEAR:
+          return val * val * val;
+        case GST_STREAM_VOLUME_FORMAT_CUBIC:
+          return val;
+        case GST_STREAM_VOLUME_FORMAT_DB:
+          return 3.0 * 20.0 * log10 (val);
+      }
+      break;
+    case GST_STREAM_VOLUME_FORMAT_DB:
+      switch (to) {
+        case GST_STREAM_VOLUME_FORMAT_LINEAR:
+          return pow (10.0, val / 20.0);
+        case GST_STREAM_VOLUME_FORMAT_CUBIC:
+          return pow (10.0, val / (3.0 * 20.0));
+        case GST_STREAM_VOLUME_FORMAT_DB:
+          return val;
+      }
+      break;
+  }
+  g_return_val_if_reached (0.0);
+}
diff --git a/gst-libs/gst/interfaces/streamvolume.h b/gst-libs/gst/interfaces/streamvolume.h
new file mode 100644
index 0000000..3a082ed
--- /dev/null
+++ b/gst-libs/gst/interfaces/streamvolume.h
@@ -0,0 +1,87 @@
+/* GStreamer StreamVolume
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_STREAM_VOLUME_H__
+#define __GST_STREAM_VOLUME_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_STREAM_VOLUME \
+  (gst_stream_volume_get_type ())
+#define GST_STREAM_VOLUME(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_VOLUME, GstStreamVolume))
+#define GST_STREAM_VOLUME_INTERFACE(iface) \
+  (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface))
+#define GST_IS_STREAM_VOLUME(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_VOLUME))
+#define GST_IS_STREAM_VOLUME_INTERFACE(iface) \
+  (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_STREAM_VOLUME))
+#define GST_STREAM_VOLUME_GET_INTERFACE(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_STREAM_VOLUME, GstStreamVolumeInterface))
+
+typedef struct _GstStreamVolume GstStreamVolume;
+typedef struct _GstStreamVolumeInterface GstStreamVolumeInterface;
+
+struct _GstStreamVolumeInterface {
+  GTypeInterface parent;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstStreamVolumeFormat:
+ * @GST_STREAM_VOLUME_FORMAT_LINEAR: Linear scale factor, 1.0 = 100%
+ * @GST_STREAM_VOLUME_FORMAT_CUBIC: Cubic volume scale
+ * @GST_STREAM_VOLUME_FORMAT_DB: Logarithmic volume scale (dB, amplitude not power)
+ *
+ * Different representations of a stream volume. gst_stream_volume_convert_volume()
+ * allows to convert between the different representations.
+ *
+ * Formulas to convert from a linear to a cubic or dB volume are
+ * cbrt(val) and 20 * log10 (val).
+ * 
+ * Since: 0.10.25
+ */
+typedef enum {
+  GST_STREAM_VOLUME_FORMAT_LINEAR = 0,
+  GST_STREAM_VOLUME_FORMAT_CUBIC,
+  GST_STREAM_VOLUME_FORMAT_DB
+} GstStreamVolumeFormat;
+
+GType           gst_stream_volume_get_type        (void);
+void            gst_stream_volume_set_volume      (GstStreamVolume *volume,
+                                                   GstStreamVolumeFormat format,
+                                                   gdouble val);
+gdouble         gst_stream_volume_get_volume      (GstStreamVolume *volume,
+                                                   GstStreamVolumeFormat format);
+
+void            gst_stream_volume_set_mute        (GstStreamVolume *volume,
+                                                   gboolean mute);
+gboolean        gst_stream_volume_get_mute        (GstStreamVolume *volume);
+
+gdouble         gst_stream_volume_convert_volume  (GstStreamVolumeFormat from,
+                                                   GstStreamVolumeFormat to,
+                                                   gdouble val) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __GST_STREAM_VOLUME_H__ */
diff --git a/gst-libs/gst/interfaces/tuner.c b/gst-libs/gst/interfaces/tuner.c
new file mode 100644
index 0000000..4e35dac
--- /dev/null
+++ b/gst-libs/gst/interfaces/tuner.c
@@ -0,0 +1,577 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tuner.c: tuner design virtual class function wrappers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tuner.h"
+#include "interfaces-marshal.h"
+
+#include <string.h>
+
+/**
+ * SECTION:gsttuner
+ * @short_description: Interface for elements providing tuner operations
+ * 
+ * <refsect2>
+ * <para>
+ * The GstTuner interface is provided by elements that have the ability to
+ * tune into multiple input signals, for example TV or radio capture cards.
+ * </para><para>
+ * The interpretation of 'tuning into' an input stream depends on the element
+ * implementing the interface. For v4lsrc, it might imply selection of an
+ * input source and/or frequency to be configured on a TV card. Another 
+ * GstTuner implementation might be to allow selection of an active input pad
+ * from multiple input pads.
+ * </para><para>
+ * That said, the GstTuner interface functions are biased toward the
+ * TV capture scenario.
+ * </para><para>
+ * The general parameters provided are for configuration are:
+ * <itemizedlist>
+ * <listitem>Selection of a current #GstTunerChannel. The current channel
+ * represents the input source (e.g. Composite, S-Video etc for TV capture).
+ * </listitem>
+ * <listitem>The #GstTunerNorm for the channel. The norm chooses the
+ * interpretation of the incoming signal for the current channel. For example,
+ * PAL or NTSC, or more specific variants there-of.
+ * </listitem>
+ * <listitem>Channel frequency. If the current channel has the ability to tune
+ * between multiple frequencies (if it has the GST_TUNER_CHANNEL_FREQUENCY flag)
+ * then the frequency can be changed/retrieved via the
+ * gst_tuner_set_frequency() and gst_tuner_get_frequency() methods.
+ * </listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * Where applicable, the signal strength can be retrieved and/or monitored
+ * via a signal.
+ * </para>
+ * </refsect2>
+ */
+
+/* FIXME 0.11: check if we need to add API for sometimes-supportedness
+ * (aka making up for GstImplementsInterface removal) */
+
+/* FIXME 0.11: replace signals with messages (+ make API thread-safe) */
+
+enum
+{
+  NORM_CHANGED,
+  CHANNEL_CHANGED,
+  FREQUENCY_CHANGED,
+  SIGNAL_CHANGED,
+  LAST_SIGNAL
+};
+
+static void gst_tuner_class_init (GstTunerClass * klass);
+
+static guint gst_tuner_signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_tuner_get_type (void)
+{
+  static GType gst_tuner_type = 0;
+
+  if (!gst_tuner_type) {
+    static const GTypeInfo gst_tuner_info = {
+      sizeof (GstTunerClass),
+      (GBaseInitFunc) gst_tuner_class_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_tuner_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstTuner", &gst_tuner_info, 0);
+  }
+
+  return gst_tuner_type;
+}
+
+static void
+gst_tuner_class_init (GstTunerClass * klass)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized) {
+    /**
+     * GstTuner::norm-changed:
+     * @tuner: The element providing the GstTuner interface
+     * @norm: The new configured norm.
+     *
+     * Reports that the current #GstTunerNorm has changed.
+     */
+    gst_tuner_signals[NORM_CHANGED] =
+        g_signal_new ("norm-changed",
+        GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstTunerClass, norm_changed),
+        NULL, NULL,
+        g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_TUNER_NORM);
+    /**
+     * GstTuner::channel-changed:
+     * @tuner: The element providing the GstTuner interface
+     * @channel: The new configured channel.
+     *
+     * Reports that the current #GstTunerChannel has changed.
+     */
+    gst_tuner_signals[CHANNEL_CHANGED] =
+        g_signal_new ("channel-changed",
+        GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstTunerClass, channel_changed),
+        NULL, NULL,
+        g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
+        GST_TYPE_TUNER_CHANNEL);
+    /**
+     * GstTuner::frequency-changed:
+     * @tuner: The element providing the GstTuner interface
+     * @frequency: The new frequency (an unsigned long)
+     *
+     * Reports that the current frequency has changed.
+     */
+    gst_tuner_signals[FREQUENCY_CHANGED] =
+        g_signal_new ("frequency-changed",
+        GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstTunerClass, frequency_changed),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_ULONG, G_TYPE_NONE, 2,
+        GST_TYPE_TUNER_CHANNEL, G_TYPE_ULONG);
+    /**
+     * GstTuner::signal-changed:
+     * @tuner: The element providing the GstTuner interface
+     * @channel: The current #GstTunerChannel
+     * @signal: The new signal strength (an integer)
+     *
+     * Reports that the signal strength has changed.
+     *
+     * See Also: gst_tuner_signal_strength()
+     */
+    gst_tuner_signals[SIGNAL_CHANGED] =
+        g_signal_new ("signal-changed",
+        GST_TYPE_TUNER, G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET (GstTunerClass, signal_changed),
+        NULL, NULL,
+        gst_interfaces_marshal_VOID__OBJECT_INT, G_TYPE_NONE, 2,
+        GST_TYPE_TUNER_CHANNEL, G_TYPE_INT);
+
+    initialized = TRUE;
+  }
+
+  /* default virtual functions */
+  klass->list_channels = NULL;
+  klass->set_channel = NULL;
+  klass->get_channel = NULL;
+
+  klass->list_norms = NULL;
+  klass->set_norm = NULL;
+  klass->get_norm = NULL;
+
+  klass->set_frequency = NULL;
+  klass->get_frequency = NULL;
+  klass->signal_strength = NULL;
+}
+
+/**
+ * gst_tuner_list_channels:
+ * @tuner: the #GstTuner (a #GstElement) to get the channels from.
+ *
+ * Retrieve a #GList of #GstTunerChannels available
+ * (e.g. 'composite', 's-video', ...) from the given tuner object.
+ *
+ * Returns: A list of channels available on this tuner. The list is
+ *          owned by the GstTuner and must not be freed.
+ */
+const GList *
+gst_tuner_list_channels (GstTuner * tuner)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->list_channels) {
+    return klass->list_channels (tuner);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_tuner_set_channel:
+ * @tuner: the #GstTuner (a #GstElement) that owns the channel.
+ * @channel: the channel to tune to.
+ *
+ * Tunes the object to the given channel, which should be one of the
+ * channels returned by gst_tuner_list_channels().
+ */
+
+void
+gst_tuner_set_channel (GstTuner * tuner, GstTunerChannel * channel)
+{
+  GstTunerClass *klass;
+
+  g_return_if_fail (GST_IS_TUNER (tuner));
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->set_channel) {
+    klass->set_channel (tuner, channel);
+  }
+}
+
+/**
+ * gst_tuner_get_channel:
+ * @tuner: the #GstTuner (a #GstElement) to get the current channel from.
+ *
+ * Retrieve the current channel from the tuner.
+ *
+ * Returns: the current channel of the tuner object.
+ */
+
+GstTunerChannel *
+gst_tuner_get_channel (GstTuner * tuner)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->get_channel) {
+    return klass->get_channel (tuner);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_tuner_list_norms:
+ * @tuner: the #GstTuner (*a #GstElement) to get the list of norms from.
+ *
+ * Retrieve a GList of available #GstTunerNorm settings for the currently
+ * tuned channel on the given tuner object.
+ *
+ * Returns: A list of norms available on the current channel for this
+ *          tuner object. The list is owned by the GstTuner and must not
+ *          be freed.
+ */
+
+const GList *
+gst_tuner_list_norms (GstTuner * tuner)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->list_norms) {
+    return klass->list_norms (tuner);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_tuner_set_norm:
+ * @tuner: the #GstTuner (a #GstElement) to set the norm on.
+ * @norm: the norm to use for the current channel.
+ *
+ * Changes the video norm on this tuner to the given norm, which should be
+ * one of the norms returned by gst_tuner_list_norms().
+ */
+
+void
+gst_tuner_set_norm (GstTuner * tuner, GstTunerNorm * norm)
+{
+  GstTunerClass *klass;
+
+  g_return_if_fail (GST_IS_TUNER (tuner));
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->set_norm) {
+    klass->set_norm (tuner, norm);
+  }
+}
+
+/**
+ * gst_tuner_get_norm:
+ * @tuner: the #GstTuner (a #GstElement) to get the current norm from.
+ *
+ * Get the current video norm from the given tuner object for the
+ * currently selected channel.
+ *
+ * Returns: the current norm.
+ */
+
+GstTunerNorm *
+gst_tuner_get_norm (GstTuner * tuner)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->get_norm) {
+    return klass->get_norm (tuner);
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_tuner_set_frequency:
+ * @tuner: The #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: The #GstTunerChannel to set the frequency on.
+ * @frequency: The frequency to tune in to.
+ *
+ * Sets a tuning frequency on the given tuner/channel. Note that this
+ * requires the given channel to be a "tuning" channel, which can be
+ * checked using GST_TUNER_CHANNEL_HAS_FLAG (), with the proper flag
+ * being GST_TUNER_CHANNEL_FREQUENCY.
+ *
+ * The frequency is in Hz, with minimum steps indicated by the 
+ * frequency_multiplicator provided in the #GstTunerChannel. The
+ * valid range is provided in the min_frequency and max_frequency properties
+ * of the #GstTunerChannel.
+ */
+
+void
+gst_tuner_set_frequency (GstTuner * tuner,
+    GstTunerChannel * channel, gulong frequency)
+{
+  GstTunerClass *klass;
+
+  g_return_if_fail (GST_IS_TUNER (tuner));
+  g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+  g_return_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+          GST_TUNER_CHANNEL_FREQUENCY));
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->set_frequency) {
+    klass->set_frequency (tuner, channel, frequency);
+  }
+}
+
+/**
+ * gst_tuner_get_frequency:
+ * @tuner: The #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: The #GstTunerChannel to retrieve the frequency from.
+ *
+ * Retrieve the current frequency from the given channel. As for
+ * gst_tuner_set_frequency(), the #GstTunerChannel must support frequency
+ * operations, as indicated by the GST_TUNER_CHANNEL_FREQUENCY flag.
+ *
+ * Returns: The current frequency, or 0 on error.
+ */
+
+gulong
+gst_tuner_get_frequency (GstTuner * tuner, GstTunerChannel * channel)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), 0);
+  g_return_val_if_fail (GST_IS_TUNER_CHANNEL (channel), 0);
+  g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+          GST_TUNER_CHANNEL_FREQUENCY), 0);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+
+  if (klass->get_frequency) {
+    return klass->get_frequency (tuner, channel);
+  }
+
+  return 0;
+}
+
+/**
+ * gst_tuner_signal_strength:
+ * @tuner: the #GstTuner (a #GstElement) that owns the given channel.
+ * @channel: the #GstTunerChannel to get the signal strength from.
+ *
+ * Get the strength of the signal on this channel. Note that this
+ * requires the current channel to be a "tuning" channel, i.e. a
+ * channel on which frequency can be set. This can be checked using
+ * GST_TUNER_CHANNEL_HAS_FLAG (), and the appropriate flag to check
+ * for is GST_TUNER_CHANNEL_FREQUENCY.
+ *
+ * The valid range of the signal strength is indicated in the 
+ * min_signal and max_signal properties of the #GstTunerChannel.
+ *
+ * Returns: Signal strength, or 0 on error.
+ */
+gint
+gst_tuner_signal_strength (GstTuner * tuner, GstTunerChannel * channel)
+{
+  GstTunerClass *klass;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), 0);
+  g_return_val_if_fail (GST_IS_TUNER_CHANNEL (channel), 0);
+  g_return_val_if_fail (GST_TUNER_CHANNEL_HAS_FLAG (channel,
+          GST_TUNER_CHANNEL_FREQUENCY), 0);
+
+  klass = GST_TUNER_GET_CLASS (tuner);
+  if (klass->signal_strength) {
+    return klass->signal_strength (tuner, channel);
+  }
+
+  return 0;
+}
+
+/**
+ * gst_tuner_find_norm_by_name:
+ * @tuner: A #GstTuner instance
+ * @norm: A string containing the name of a #GstTunerNorm
+ * 
+ * Look up a #GstTunerNorm by name.
+ *
+ * Returns: A #GstTunerNorm, or NULL if no norm with the provided name
+ * is available.
+ */
+GstTunerNorm *
+gst_tuner_find_norm_by_name (GstTuner * tuner, gchar * norm)
+{
+  GList *walk;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+  g_return_val_if_fail (norm != NULL, NULL);
+
+  walk = (GList *) gst_tuner_list_norms (tuner);
+  while (walk) {
+    if (strcmp (GST_TUNER_NORM (walk->data)->label, norm) == 0)
+      return GST_TUNER_NORM (walk->data);
+    walk = g_list_next (walk);
+  }
+  return NULL;
+}
+
+/**
+ * gst_tuner_find_channel_by_name:
+ * @tuner: A #GstTuner instance
+ * @channel: A string containing the name of a #GstTunerChannel
+ * 
+ * Look up a #GstTunerChannel by name.
+ *
+ * Returns: A #GstTunerChannel, or NULL if no channel with the provided name
+ * is available.
+ */
+GstTunerChannel *
+gst_tuner_find_channel_by_name (GstTuner * tuner, gchar * channel)
+{
+  GList *walk;
+
+  g_return_val_if_fail (GST_IS_TUNER (tuner), NULL);
+  g_return_val_if_fail (channel != NULL, NULL);
+
+  walk = (GList *) gst_tuner_list_channels (tuner);
+  while (walk) {
+    if (strcmp (GST_TUNER_CHANNEL (walk->data)->label, channel) == 0)
+      return GST_TUNER_CHANNEL (walk->data);
+    walk = g_list_next (walk);
+  }
+  return NULL;
+}
+
+/**
+ * gst_tuner_channel_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: A #GstTunerChannel instance
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * current channel changes. Fires the #GstTuner::channel-changed signal.
+ */
+void
+gst_tuner_channel_changed (GstTuner * tuner, GstTunerChannel * channel)
+{
+  g_return_if_fail (GST_IS_TUNER (tuner));
+  g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+  g_signal_emit (G_OBJECT (tuner),
+      gst_tuner_signals[CHANNEL_CHANGED], 0, channel);
+}
+
+/**
+ * gst_tuner_norm_changed:
+ * @tuner: A #GstTuner instance
+ * @norm: A #GstTunerNorm instance
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * current norm changes. Fires the #GstTuner::norm-changed signal.
+ * 
+ */
+void
+gst_tuner_norm_changed (GstTuner * tuner, GstTunerNorm * norm)
+{
+  g_return_if_fail (GST_IS_TUNER (tuner));
+  g_return_if_fail (GST_IS_TUNER_NORM (norm));
+
+  g_signal_emit (G_OBJECT (tuner), gst_tuner_signals[NORM_CHANGED], 0, norm);
+}
+
+/**
+ * gst_tuner_frequency_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: The current #GstTunerChannel
+ * @frequency: The new frequency setting
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * configured frequency changes. Fires the #GstTuner::frequency-changed
+ * signal on the tuner, and the #GstTunerChannel::frequency-changed signal
+ * on the channel.
+ */
+void
+gst_tuner_frequency_changed (GstTuner * tuner,
+    GstTunerChannel * channel, gulong frequency)
+{
+  g_return_if_fail (GST_IS_TUNER (tuner));
+  g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+  g_signal_emit (G_OBJECT (tuner),
+      gst_tuner_signals[FREQUENCY_CHANGED], 0, channel, frequency);
+
+  g_signal_emit_by_name (G_OBJECT (channel), "frequency_changed", frequency);
+}
+
+/**
+ * gst_tuner_signal_changed:
+ * @tuner: A #GstTuner instance
+ * @channel: The current #GstTunerChannel
+ * @signal: The new signal strength
+ *
+ * Called by elements implementing the #GstTuner interface when the
+ * incoming signal strength changes. Fires the #GstTuner::signal-changed
+ * signal on the tuner and the #GstTunerChannel::signal-changed signal on 
+ * the channel.
+ */
+void
+gst_tuner_signal_changed (GstTuner * tuner,
+    GstTunerChannel * channel, gint signal)
+{
+  g_return_if_fail (GST_IS_TUNER (tuner));
+  g_return_if_fail (GST_IS_TUNER_CHANNEL (channel));
+
+  g_signal_emit (G_OBJECT (tuner),
+      gst_tuner_signals[SIGNAL_CHANGED], 0, channel, signal);
+
+  g_signal_emit_by_name (G_OBJECT (channel), "signal_changed", signal);
+}
diff --git a/gst-libs/gst/interfaces/tuner.h b/gst-libs/gst/interfaces/tuner.h
new file mode 100644
index 0000000..09158d4
--- /dev/null
+++ b/gst-libs/gst/interfaces/tuner.h
@@ -0,0 +1,150 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tuner.h: tuner interface design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_TUNER_H__
+#define __GST_TUNER_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/tunernorm.h>
+#include <gst/interfaces/tunerchannel.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+
+G_BEGIN_DECLS
+
+/* FIXME 0.11: remove all CLASS bits, this is an interface */
+
+#define GST_TYPE_TUNER \
+  (gst_tuner_get_type ())
+#define GST_TUNER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER, GstTuner))
+#define GST_TUNER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER, GstTunerClass))
+#define GST_IS_TUNER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER))
+#define GST_IS_TUNER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER))
+#define GST_TUNER_GET_CLASS(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TUNER, GstTunerClass))
+
+typedef struct _GstTuner GstTuner;
+typedef struct _GstTunerClass GstTunerClass;
+
+/**
+ * GstTunerClass:
+ * @klass: the parent interface
+ * @list_channels: list available channels
+ * @set_channel: set to a channel
+ * @get_channel: return the current channel
+ * @list_norms: list available norms
+ * @set_norm: set a norm
+ * @get_norm: return the current norm
+ * @set_frequency: set the frequency
+ * @get_frequency: return the current frequency
+ * @signal_strength: get the signal strength
+ * @channel_changed: default handler for channel changed notification
+ * @norm_changed: default handler for norm changed notification
+ * @frequency_changed: default handler for frequency changed notification
+ * @signal_changed: default handler for signal-strength changed notification
+ *
+ * Tuner interface.
+ */
+struct _GstTunerClass {
+  GTypeInterface klass;
+
+  /* virtual functions */
+  const GList * (* list_channels)   (GstTuner        *tuner);
+  void          (* set_channel)     (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+  GstTunerChannel *
+                (* get_channel)     (GstTuner        *tuner);
+
+  const GList * (* list_norms)      (GstTuner        *tuner);
+  void          (* set_norm)        (GstTuner        *tuner,
+                                     GstTunerNorm    *norm);
+  GstTunerNorm *(* get_norm)        (GstTuner        *tuner);
+
+  void          (* set_frequency)   (GstTuner        *tuner,
+                                     GstTunerChannel *channel,
+                                     gulong           frequency);
+  gulong        (* get_frequency)   (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+  gint          (* signal_strength) (GstTuner        *tuner,
+                                     GstTunerChannel *channel);
+
+  /* signals */
+  void (*channel_changed)   (GstTuner        *tuner,
+                             GstTunerChannel *channel);
+  void (*norm_changed)      (GstTuner        *tuner,
+                             GstTunerNorm    *norm);
+  void (*frequency_changed) (GstTuner        *tuner,
+                             GstTunerChannel *channel,
+                             gulong           frequency);
+  void (*signal_changed)    (GstTuner        *tuner,
+                             GstTunerChannel *channel,
+                             gint             signal);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_tuner_get_type              (void);
+
+/* virtual class function wrappers */
+const GList *   gst_tuner_list_channels         (GstTuner        *tuner);
+void            gst_tuner_set_channel           (GstTuner        *tuner,
+                                                 GstTunerChannel *channel);
+GstTunerChannel *
+                gst_tuner_get_channel           (GstTuner        *tuner);
+
+const GList *   gst_tuner_list_norms            (GstTuner        *tuner);
+void            gst_tuner_set_norm              (GstTuner        *tuner,
+                                                 GstTunerNorm    *norm);
+GstTunerNorm *  gst_tuner_get_norm              (GstTuner        *tuner);
+
+void            gst_tuner_set_frequency         (GstTuner        *tuner,
+                                                 GstTunerChannel *channel,
+                                                 gulong           frequency);
+gulong          gst_tuner_get_frequency         (GstTuner        *tuner,
+                                                 GstTunerChannel *channel);
+gint            gst_tuner_signal_strength       (GstTuner        *tuner,
+                                                 GstTunerChannel *channel);
+
+/* helper functions */
+GstTunerNorm *  gst_tuner_find_norm_by_name     (GstTuner        *tuner,
+                                                 gchar           *norm);
+GstTunerChannel *gst_tuner_find_channel_by_name (GstTuner        *tuner,
+                                                 gchar           *channel);
+
+/* trigger signals */
+void            gst_tuner_channel_changed       (GstTuner        *tuner,
+                                                 GstTunerChannel *channel);
+void            gst_tuner_norm_changed          (GstTuner        *tuner,
+                                                 GstTunerNorm    *norm);
+void            gst_tuner_frequency_changed     (GstTuner        *tuner,
+                                                 GstTunerChannel *channel,
+                                                 gulong           frequency);
+void            gst_tuner_signal_changed        (GstTuner        *tuner,
+                                                 GstTunerChannel *channel,
+                                                 gint             signal);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_H__ */
diff --git a/gst-libs/gst/interfaces/tunerchannel.c b/gst-libs/gst/interfaces/tunerchannel.c
new file mode 100644
index 0000000..ac2b74e
--- /dev/null
+++ b/gst-libs/gst/interfaces/tunerchannel.c
@@ -0,0 +1,148 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tunerchannel.c: tuner channel object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tunerchannel.h"
+
+/**
+ * SECTION:gsttunerchannel
+ * @short_description: A channel from an element implementing the #GstTuner
+ * interface.
+ *
+ * <refsect2>
+ * <para>The #GstTunerChannel object is provided by an element implementing
+ * the #GstTuner interface.
+ * </para>
+ * <para>
+ * GstTunerChannel provides a name and flags to determine the type and
+ * capabilities of the channel. If the GST_TUNER_CHANNEL_FREQUENCY flag is
+ * set, then the channel also information about the minimum and maximum
+ * frequency, and range of the reported signal strength.
+ * </para>
+ * </refsect2>
+ */
+
+enum
+{
+  /* FILL ME */
+  SIGNAL_FREQUENCY_CHANGED,
+  SIGNAL_SIGNAL_CHANGED,
+  LAST_SIGNAL
+};
+
+static void gst_tuner_channel_class_init (GstTunerChannelClass * klass);
+static void gst_tuner_channel_init (GstTunerChannel * channel);
+static void gst_tuner_channel_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_tuner_channel_get_type (void)
+{
+  static GType gst_tuner_channel_type = 0;
+
+  if (!gst_tuner_channel_type) {
+    static const GTypeInfo tuner_channel_info = {
+      sizeof (GstTunerChannelClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_tuner_channel_class_init,
+      NULL,
+      NULL,
+      sizeof (GstTunerChannel),
+      0,
+      (GInstanceInitFunc) gst_tuner_channel_init,
+      NULL
+    };
+
+    gst_tuner_channel_type =
+        g_type_register_static (G_TYPE_OBJECT,
+        "GstTunerChannel", &tuner_channel_info, 0);
+  }
+
+  return gst_tuner_channel_type;
+}
+
+static void
+gst_tuner_channel_class_init (GstTunerChannelClass * klass)
+{
+  GObjectClass *object_klass = (GObjectClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  /**
+   * GstTunerChannel::frequency-changed:
+   * @tunerchannel: The #GstTunerChannel
+   * @frequency: The new frequency (an unsigned long)
+   *
+   * Reports that the current frequency has changed.
+   */
+  signals[SIGNAL_FREQUENCY_CHANGED] =
+      g_signal_new ("frequency-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstTunerChannelClass,
+          frequency_changed),
+      NULL, NULL, g_cclosure_marshal_VOID__ULONG, G_TYPE_NONE, 1, G_TYPE_ULONG);
+  /**
+   * GstTunerChannel::signal-changed:
+   * @tunerchannel: The #GstTunerChannel
+   * @signal: The new signal strength (an integer)
+   *
+   * Reports that the signal strength has changed.
+   *
+   * See Also: gst_tuner_signal_strength()
+   */
+  signals[SIGNAL_SIGNAL_CHANGED] =
+      g_signal_new ("signal-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstTunerChannelClass,
+          signal_changed),
+      NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  object_klass->dispose = gst_tuner_channel_dispose;
+}
+
+static void
+gst_tuner_channel_init (GstTunerChannel * channel)
+{
+  channel->label = NULL;
+  channel->flags = 0;
+  channel->min_frequency = channel->max_frequency = 0;
+  channel->min_signal = channel->max_signal = 0;
+}
+
+static void
+gst_tuner_channel_dispose (GObject * object)
+{
+  GstTunerChannel *channel = GST_TUNER_CHANNEL (object);
+
+  if (channel->label) {
+    g_free (channel->label);
+    channel->label = NULL;
+  }
+
+  if (parent_class->dispose)
+    parent_class->dispose (object);
+}
diff --git a/gst-libs/gst/interfaces/tunerchannel.h b/gst-libs/gst/interfaces/tunerchannel.h
new file mode 100644
index 0000000..45c9c3f
--- /dev/null
+++ b/gst-libs/gst/interfaces/tunerchannel.h
@@ -0,0 +1,113 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tunerchannel.h: tuner channel object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_TUNER_CHANNEL_H__
+#define __GST_TUNER_CHANNEL_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TUNER_CHANNEL \
+  (gst_tuner_channel_get_type ())
+#define GST_TUNER_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_CHANNEL, \
+                               GstTunerChannel))
+#define GST_TUNER_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_CHANNEL, \
+                            GstTunerChannelClass))
+#define GST_IS_TUNER_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_CHANNEL))
+#define GST_IS_TUNER_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_CHANNEL))
+
+typedef struct _GstTunerChannel GstTunerChannel;
+typedef struct _GstTunerChannelClass GstTunerChannelClass;
+
+/**
+ * GstTunerChannelFlags:
+ * @GST_TUNER_CHANNEL_INPUT: The channel is for input
+ * @GST_TUNER_CHANNEL_OUTPUT: The channel is for output
+ * @GST_TUNER_CHANNEL_FREQUENCY: The channel has a frequency setting
+ *                               and signal strength.
+ * @GST_TUNER_CHANNEL_AUDIO: The channel carries audio.
+ * 
+ * An enumeration for flags indicating the available capabilities
+ * of a #GstTunerChannel.
+ */
+typedef enum {
+  GST_TUNER_CHANNEL_INPUT     = (1<<0),
+  GST_TUNER_CHANNEL_OUTPUT    = (1<<1),
+  GST_TUNER_CHANNEL_FREQUENCY = (1<<2),
+  GST_TUNER_CHANNEL_AUDIO     = (1<<3)
+} GstTunerChannelFlags;
+
+/**
+ * GST_TUNER_CHANNEL_HAS_FLAG:
+ * @channel: A #GstTunerChannel
+ * @flag: The flag to check for
+ * 
+ * Macro to check if the given flag is set on a channel
+ */
+#define GST_TUNER_CHANNEL_HAS_FLAG(channel, flag) \
+  ((channel)->flags & flag)
+
+/**
+ * GstTunerChannel:
+ * @label: A string containing a descriptive name for this channel
+ * @flags: A set of #GstTunerChannelFlags for this channel
+ * @freq_multiplicator: The step size (in Hz) for the frequency setting.
+ * @min_frequency: Minimum valid frequency setting (in Hz).
+ * @max_frequency: Maximum valid frequency setting (in Hz).
+ * @min_signal: Minimum reported signal strength value.
+ * @max_signal: Maximum reported signal strength value.
+ */
+struct _GstTunerChannel {
+  GObject              parent;
+
+  /*< public >*/
+  gchar               *label;
+  GstTunerChannelFlags flags;
+  gfloat               freq_multiplicator;
+  gulong               min_frequency;
+  gulong               max_frequency;
+  gint                 min_signal;
+  gint                 max_signal;
+};
+
+struct _GstTunerChannelClass {
+  GObjectClass parent;
+
+  /*< private >*/
+  /* signals */
+  void (*frequency_changed) (GstTunerChannel *channel,
+                             gulong           frequency);
+  void (*signal_changed)    (GstTunerChannel *channel,
+                             gint             signal);
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_tuner_channel_get_type      (void);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_CHANNEL_H__ */
diff --git a/gst-libs/gst/interfaces/tunernorm.c b/gst-libs/gst/interfaces/tunernorm.c
new file mode 100644
index 0000000..47260b0
--- /dev/null
+++ b/gst-libs/gst/interfaces/tunernorm.c
@@ -0,0 +1,111 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tunernorm.c: tuner norm object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tunernorm.h"
+
+/**
+ * SECTION:gsttunernorm
+ * @short_description: Encapsulates information about the data format(s)
+ * for a #GstTunerChannel.
+ *
+ * <refsect2>
+ * <para>The #GstTunerNorm object is created by an element implementing the
+ * #GstTuner interface and encapsulates the selection of a capture/output format
+ * for a selected #GstTunerChannel.
+ * </para>
+ * </refsect2>
+ */
+
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+static void gst_tuner_norm_class_init (GstTunerNormClass * klass);
+static void gst_tuner_norm_init (GstTunerNorm * norm);
+static void gst_tuner_norm_dispose (GObject * object);
+
+static GObjectClass *parent_class = NULL;
+
+/*static guint signals[LAST_SIGNAL] = { 0 };*/
+
+GType
+gst_tuner_norm_get_type (void)
+{
+  static GType gst_tuner_norm_type = 0;
+
+  if (!gst_tuner_norm_type) {
+    static const GTypeInfo tuner_norm_info = {
+      sizeof (GstTunerNormClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_tuner_norm_class_init,
+      NULL,
+      NULL,
+      sizeof (GstTunerNorm),
+      0,
+      (GInstanceInitFunc) gst_tuner_norm_init,
+      NULL
+    };
+
+    gst_tuner_norm_type =
+        g_type_register_static (G_TYPE_OBJECT,
+        "GstTunerNorm", &tuner_norm_info, 0);
+  }
+
+  return gst_tuner_norm_type;
+}
+
+static void
+gst_tuner_norm_class_init (GstTunerNormClass * klass)
+{
+  GObjectClass *object_klass = (GObjectClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  object_klass->dispose = gst_tuner_norm_dispose;
+}
+
+static void
+gst_tuner_norm_init (GstTunerNorm * norm)
+{
+  norm->label = NULL;
+  g_value_init (&norm->framerate, GST_TYPE_FRACTION);
+}
+
+static void
+gst_tuner_norm_dispose (GObject * object)
+{
+  GstTunerNorm *norm = GST_TUNER_NORM (object);
+
+  if (norm->label) {
+    g_free (norm->label);
+    norm->label = NULL;
+  }
+
+  if (parent_class->dispose)
+    parent_class->dispose (object);
+}
diff --git a/gst-libs/gst/interfaces/tunernorm.h b/gst-libs/gst/interfaces/tunernorm.h
new file mode 100644
index 0000000..d93cb13
--- /dev/null
+++ b/gst-libs/gst/interfaces/tunernorm.h
@@ -0,0 +1,67 @@
+/* GStreamer Tuner
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * tunernorm.h: tuner norm object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_TUNER_NORM_H__
+#define __GST_TUNER_NORM_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TUNER_NORM \
+  (gst_tuner_norm_get_type ())
+#define GST_TUNER_NORM(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TUNER_NORM, GstTunerNorm))
+#define GST_TUNER_NORM_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TUNER_NORM, GstTunerNormClass))
+#define GST_IS_TUNER_NORM(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TUNER_NORM))
+#define GST_IS_TUNER_NORM_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TUNER_NORM))
+
+typedef struct _GstTunerNorm GstTunerNorm;
+typedef struct _GstTunerNormClass GstTunerNormClass;
+
+/**
+ * GstTunerNorm:
+ * @label: A string containing a descriptive name for the norm
+ * @framerate: A GValue containing the framerate associated with this norm,
+ *             if any. (May be unset).
+ */
+struct _GstTunerNorm {
+  GObject parent;
+
+  /*< public >*/
+  gchar  *label;
+  GValue  framerate;
+};
+
+struct _GstTunerNormClass {
+  GObjectClass parent;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_tuner_norm_get_type         (void);
+
+G_END_DECLS
+
+#endif /* __GST_TUNER_NORM_H__ */
diff --git a/gst-libs/gst/interfaces/videoorientation.c b/gst-libs/gst/interfaces/videoorientation.c
new file mode 100644
index 0000000..4918862
--- /dev/null
+++ b/gst-libs/gst/interfaces/videoorientation.c
@@ -0,0 +1,271 @@
+/* GStreamer
+ * Copyright (C) 2006 Nokia <stefan.kost@nokia.com>
+ *
+ * videoorientation.c: video flipping and centering interface
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "videoorientation.h"
+#include "interfaces-marshal.h"
+
+#include <string.h>
+
+/**
+ * SECTION:gstvideoorientation
+ * @short_description: Interface for elements providing video orientation
+ * controls
+ *
+ * The interface allows unified access to control flipping and autocenter
+ * operation of video-sources or operators.
+ *
+ * Since: 0.10.11
+ */
+
+/* FIXME 0.11: check if we need to add API for sometimes-supportedness
+ * (aka making up for GstImplementsInterface removal) (probably yes) */
+
+static void gst_video_orientation_iface_init (GstVideoOrientationInterface *
+    iface);
+
+GType
+gst_video_orientation_get_type (void)
+{
+  static GType gst_video_orientation_type = 0;
+
+  if (!gst_video_orientation_type) {
+    static const GTypeInfo gst_video_orientation_info = {
+      sizeof (GstVideoOrientationInterface),
+      (GBaseInitFunc) gst_video_orientation_iface_init,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_video_orientation_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstVideoOrientation", &gst_video_orientation_info, 0);
+  }
+
+  return gst_video_orientation_type;
+}
+
+static void
+gst_video_orientation_iface_init (GstVideoOrientationInterface * iface)
+{
+  /* default virtual functions */
+
+  iface->get_hflip = NULL;
+  iface->get_vflip = NULL;
+  iface->get_hcenter = NULL;
+  iface->get_vcenter = NULL;
+
+  iface->set_hflip = NULL;
+  iface->set_vflip = NULL;
+  iface->set_hcenter = NULL;
+  iface->set_vcenter = NULL;
+}
+
+/**
+ * gst_video_orientation_get_hflip:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @flip: return location for the result
+ *
+ * Get the horizontal flipping state (%TRUE for flipped) from the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports flipping
+ */
+gboolean
+gst_video_orientation_get_hflip (GstVideoOrientation * video_orientation,
+    gboolean * flip)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->get_hflip) {
+    return iface->get_hflip (video_orientation, flip);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_get_vflip:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @flip: return location for the result
+ *
+ * Get the vertical flipping state (%TRUE for flipped) from the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports flipping
+ */
+gboolean
+gst_video_orientation_get_vflip (GstVideoOrientation * video_orientation,
+    gboolean * flip)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->get_vflip) {
+    return iface->get_vflip (video_orientation, flip);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_get_hcenter:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @center: return location for the result
+ *
+ * Get the horizontal centering offset from the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports centering
+ */
+gboolean
+gst_video_orientation_get_hcenter (GstVideoOrientation * video_orientation,
+    gint * center)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->get_hcenter) {
+    return iface->get_hcenter (video_orientation, center);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_get_vcenter:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @center: return location for the result
+ *
+ * Get the vertical centering offset from the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports centering
+ */
+gboolean
+gst_video_orientation_get_vcenter (GstVideoOrientation * video_orientation,
+    gint * center)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->get_vcenter) {
+    return iface->get_vcenter (video_orientation, center);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_set_hflip:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @flip: use flipping
+ *
+ * Set the horizontal flipping state (%TRUE for flipped) for the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports flipping
+ */
+gboolean
+gst_video_orientation_set_hflip (GstVideoOrientation * video_orientation,
+    gboolean flip)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->set_hflip) {
+    return iface->set_hflip (video_orientation, flip);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_set_vflip:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @flip: use flipping
+ *
+ * Set the vertical flipping state (%TRUE for flipped) for the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports flipping
+ */
+gboolean
+gst_video_orientation_set_vflip (GstVideoOrientation * video_orientation,
+    gboolean flip)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->set_vflip) {
+    return iface->set_vflip (video_orientation, flip);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_set_hcenter:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @center: centering offset
+ *
+ * Set the horizontal centering offset for the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports centering
+ */
+gboolean
+gst_video_orientation_set_hcenter (GstVideoOrientation * video_orientation,
+    gint center)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->set_hcenter) {
+    return iface->set_hcenter (video_orientation, center);
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_orientation_set_vcenter:
+ * @video_orientation: #GstVideoOrientation interface of a #GstElement
+ * @center: centering offset
+ *
+ * Set the vertical centering offset for the given object.
+ *
+ * Since: 0.10.11
+ * Returns: %TRUE in case the element supports centering
+ */
+gboolean
+gst_video_orientation_set_vcenter (GstVideoOrientation * video_orientation,
+    gint center)
+{
+  GstVideoOrientationInterface *iface =
+      GST_VIDEO_ORIENTATION_GET_IFACE (video_orientation);
+
+  if (iface->set_vcenter) {
+    return iface->set_vcenter (video_orientation, center);
+  }
+  return FALSE;
+}
diff --git a/gst-libs/gst/interfaces/videoorientation.h b/gst-libs/gst/interfaces/videoorientation.h
new file mode 100644
index 0000000..0ace827
--- /dev/null
+++ b/gst-libs/gst/interfaces/videoorientation.h
@@ -0,0 +1,98 @@
+/* GStreamer
+ * Copyright (C) 2006 Nokia <stefan.kost@nokia.com
+ *
+ * videoorientation.h: video flipping and centering interface
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_ORIENTATION_H__
+#define __GST_VIDEO_ORIENTATION_H__
+
+#include <gst/gst.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_ORIENTATION \
+  (gst_video_orientation_get_type ())
+#define GST_VIDEO_ORIENTATION(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientation))
+#define GST_IS_VIDEO_ORIENTATION(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_ORIENTATION))
+#define GST_VIDEO_ORIENTATION_GET_IFACE(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_ORIENTATION, GstVideoOrientationInterface))
+
+/**
+ * GstVideoOrientation:
+ *
+ * Opaque #GstVideoOrientation data structure.
+ */
+typedef struct _GstVideoOrientation GstVideoOrientation;
+typedef struct _GstVideoOrientationInterface GstVideoOrientationInterface;
+
+/**
+ * GstVideoOrientationInterface:
+ * @parent: parent interface type.
+ * @get_hflip: virtual method to get horizontal flipping state
+ * @get_vflip: virtual method to get vertical flipping state
+ * @get_hcenter: virtual method to get horizontal centering state
+ * @get_vcenter: virtual method to get vertical centering state
+ * @set_hflip: virtual method to set horizontal flipping state
+ * @set_vflip: virtual method to set vertical flipping state
+ * @set_hcenter: virtual method to set horizontal centering state
+ * @set_vcenter: virtual method to set vertical centering state
+ *
+ * #GstVideoOrientationInterface interface.
+ */
+struct _GstVideoOrientationInterface {
+  GTypeInterface parent;
+
+  /* FIXME 0.11: fix awkward API? add some kind of get_supported flags thing
+   * and then just return booleans/int from all vfuncs requiring the caller
+   * to check the flags first */
+
+  /* virtual functions */
+  gboolean (* get_hflip)   (GstVideoOrientation *video_orientation, gboolean *flip);
+  gboolean (* get_vflip)   (GstVideoOrientation *video_orientation, gboolean *flip);
+  gboolean (* get_hcenter) (GstVideoOrientation *video_orientation, gint *center);
+  gboolean (* get_vcenter) (GstVideoOrientation *video_orientation, gint *center);
+
+  gboolean (* set_hflip)   (GstVideoOrientation *video_orientation, gboolean flip);
+  gboolean (* set_vflip)   (GstVideoOrientation *video_orientation, gboolean flip);
+  gboolean (* set_hcenter) (GstVideoOrientation *video_orientation, gint center);
+  gboolean (* set_vcenter) (GstVideoOrientation *video_orientation, gint center);
+
+  /*< private > */
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_video_orientation_get_type              (void);
+
+/* virtual class function wrappers */
+gboolean gst_video_orientation_get_hflip (GstVideoOrientation *video_orientation, gboolean *flip);
+gboolean gst_video_orientation_get_vflip (GstVideoOrientation *video_orientation, gboolean *flip);
+gboolean gst_video_orientation_get_hcenter (GstVideoOrientation *video_orientation, gint *center);
+gboolean gst_video_orientation_get_vcenter (GstVideoOrientation *video_orientation, gint *center);
+
+gboolean gst_video_orientation_set_hflip (GstVideoOrientation *video_orientation, gboolean flip);
+gboolean gst_video_orientation_set_vflip (GstVideoOrientation *video_orientation, gboolean flip);
+gboolean gst_video_orientation_set_hcenter (GstVideoOrientation *video_orientation, gint center);
+gboolean gst_video_orientation_set_vcenter (GstVideoOrientation *video_orientation, gint center);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_ORIENTATION_H__ */
diff --git a/gst-libs/gst/interfaces/videooverlay.c b/gst-libs/gst/interfaces/videooverlay.c
new file mode 100644
index 0000000..8901ccb
--- /dev/null
+++ b/gst-libs/gst/interfaces/videooverlay.c
@@ -0,0 +1,512 @@
+/* GStreamer Video Overlay interface
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2011 Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstvideooverlay
+ * @short_description: Interface for setting/getting a window system resource
+ *    on elements supporting it to configure a window into which to render a
+ *    video.
+ *
+ * <refsect2>
+ * <para>
+ * The #GstVideoOverlay interface is used for 2 main purposes :
+ * <itemizedlist>
+ * <listitem>
+ * <para>
+ * To get a grab on the Window where the video sink element is going to render.
+ * This is achieved by either being informed about the Window identifier that
+ * the video sink element generated, or by forcing the video sink element to use
+ * a specific Window identifier for rendering.
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * To force a redrawing of the latest video frame the video sink element
+ * displayed on the Window. Indeed if the #GstPipeline is in #GST_STATE_PAUSED
+ * state, moving the Window around will damage its content. Application
+ * developers will want to handle the Expose events themselves and force the
+ * video sink element to refresh the Window's content.
+ * </para>
+ * </listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * Using the Window created by the video sink is probably the simplest scenario,
+ * in some cases, though, it might not be flexible enough for application
+ * developers if they need to catch events such as mouse moves and button
+ * clicks.
+ * </para>
+ * <para>
+ * Setting a specific Window identifier on the video sink element is the most
+ * flexible solution but it has some issues. Indeed the application needs to set
+ * its Window identifier at the right time to avoid internal Window creation
+ * from the video sink element. To solve this issue a #GstMessage is posted on
+ * the bus to inform the application that it should set the Window identifier
+ * immediately. Here is an example on how to do that correctly:
+ * |[
+ * static GstBusSyncReply
+ * create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+ * {
+ *  // ignore anything but 'prepare-window-handle' element messages
+ *  if (!gst_is_video_overlay_prepare_window_handle_message (message))
+ *    return GST_BUS_PASS;
+ *
+ *  win = XCreateSimpleWindow (disp, root, 0, 0, 320, 240, 0, 0, 0);
+ *
+ *  XSetWindowBackgroundPixmap (disp, win, None);
+ *
+ *  XMapRaised (disp, win);
+ *
+ *  XSync (disp, FALSE);
+ *
+ *  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message)),
+ *      win);
+ *
+ *  gst_message_unref (message);
+ *
+ *  return GST_BUS_DROP;
+ * }
+ * ...
+ * int
+ * main (int argc, char **argv)
+ * {
+ * ...
+ *  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+ *  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, pipeline);
+ * ...
+ * }
+ * ]|
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Two basic usage scenarios</title>
+ * <para>
+ * There are two basic usage scenarios: in the simplest case, the application
+ * knows exactly what particular element is used for video output, which is
+ * usually the case when the application creates the videosink to use
+ * (e.g. #xvimagesink, #ximagesink, etc.) itself; in this case, the application
+ * can just create the videosink element, create and realize the window to
+ * render the video on and then call gst_video_overlay_set_window_handle() directly
+ * with the XID or native window handle, before starting up the pipeline.
+ * </para>
+ * <para>
+ * In the other and more common case, the application does not know in advance
+ * what GStreamer video sink element will be used for video output. This is
+ * usually the case when an element such as #autovideosink or #gconfvideosink
+ * is used. In this case, the video sink element itself is created
+ * asynchronously from a GStreamer streaming thread some time after the
+ * pipeline has been started up. When that happens, however, the video sink
+ * will need to know right then whether to render onto an already existing
+ * application window or whether to create its own window. This is when it
+ * posts a prepare-window-handle message, and that is also why this message needs
+ * to be handled in a sync bus handler which will be called from the streaming
+ * thread directly (because the video sink will need an answer right then).
+ * </para>
+ * <para>
+ * As response to the prepare-window-handle element message in the bus sync
+ * handler, the application may use gst_video_overlay_set_window_handle() to tell
+ * the video sink to render onto an existing window surface. At this point the
+ * application should already have obtained the window handle / XID, so it
+ * just needs to set it. It is generally not advisable to call any GUI toolkit
+ * functions or window system functions from the streaming thread in which the
+ * prepare-window-handle message is handled, because most GUI toolkits and
+ * windowing systems are not thread-safe at all and a lot of care would be
+ * required to co-ordinate the toolkit and window system calls of the
+ * different threads (Gtk+ users please note: prior to Gtk+ 2.18
+ * GDK_WINDOW_XID() was just a simple structure access, so generally fine to do
+ * within the bus sync handler; this macro was changed to a function call in
+ * Gtk+ 2.18 and later, which is likely to cause problems when called from a
+ * sync handler; see below for a better approach without GDK_WINDOW_XID()
+ * used in the callback).
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>GstVideoOverlay and Gtk+</title>
+ * <para>
+ * |[
+ * #include &lt;gtk/gtk.h&gt;
+ * #ifdef GDK_WINDOWING_X11
+ * #include &lt;gdk/gdkx.h&gt;  // for GDK_WINDOW_XID
+ * #endif
+ * ...
+ * static gulong video_window_xid = 0;
+ * ...
+ * static GstBusSyncReply
+ * bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data)
+ * {
+ *  // ignore anything but 'prepare-window-handle' element messages
+ *  if (!gst_is_video_overlay_prepare_window_handle_message (message))
+ *    return GST_BUS_PASS;
+ *
+ *  if (video_window_xid != 0) {
+ *    GstVideoOverlay *xoverlay;
+ *
+ *    // GST_MESSAGE_SRC (message) will be the video sink element
+ *    xoverlay = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
+ *    gst_video_overlay_set_window_handle (xoverlay, video_window_xid);
+ *  } else {
+ *    g_warning ("Should have obtained video_window_xid by now!");
+ *  }
+ *
+ *  gst_message_unref (message);
+ *  return GST_BUS_DROP;
+ * }
+ * ...
+ * static void
+ * video_widget_realize_cb (GtkWidget * widget, gpointer data)
+ * {
+ * #if GTK_CHECK_VERSION(2,18,0)
+ *   // This is here just for pedagogical purposes, GDK_WINDOW_XID will call
+ *   // it as well in newer Gtk versions
+ *   if (!gdk_window_ensure_native (widget->window))
+ *     g_error ("Couldn't create native window needed for GstVideoOverlay!");
+ * #endif
+ *
+ * #ifdef GDK_WINDOWING_X11
+ *   video_window_xid = GDK_WINDOW_XID (video_window->window);
+ * #endif
+ * }
+ * ...
+ * int
+ * main (int argc, char **argv)
+ * {
+ *   GtkWidget *video_window;
+ *   GtkWidget *app_window;
+ *   ...
+ *   app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ *   ...
+ *   video_window = gtk_drawing_area_new ();
+ *   g_signal_connect (video_window, "realize",
+ *       G_CALLBACK (video_widget_realize_cb), NULL);
+ *   gtk_widget_set_double_buffered (video_window, FALSE);
+ *   ...
+ *   // usually the video_window will not be directly embedded into the
+ *   // application window like this, but there will be many other widgets
+ *   // and the video window will be embedded in one of them instead
+ *   gtk_container_add (GTK_CONTAINER (ap_window), video_window);
+ *   ...
+ *   // show the GUI
+ *   gtk_widget_show_all (app_window);
+ *
+ *   // realize window now so that the video window gets created and we can
+ *   // obtain its XID before the pipeline is started up and the videosink
+ *   // asks for the XID of the window to render onto
+ *   gtk_widget_realize (window);
+ *
+ *   // we should have the XID now
+ *   g_assert (video_window_xid != 0);
+ *   ...
+ *   // set up sync handler for setting the xid once the pipeline is started
+ *   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+ *   gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, NULL);
+ *   gst_object_unref (bus);
+ *   ...
+ *   gst_element_set_state (pipeline, GST_STATE_PLAYING);
+ *   ...
+ * }
+ * ]|
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>GstVideoOverlay and Qt</title>
+ * <para>
+ * |[
+ * #include &lt;glib.h&gt;
+ * #include &lt;gst/gst.h&gt;
+ * #include &lt;gst/interfaces/videooverlay.h&gt;
+ *
+ * #include &lt;QApplication&gt;
+ * #include &lt;QTimer&gt;
+ * #include &lt;QWidget&gt;
+ *
+ * int main(int argc, char *argv[])
+ * {
+ *   if (!g_thread_supported ())
+ *     g_thread_init (NULL);
+ *
+ *   gst_init (&argc, &argv);
+ *   QApplication app(argc, argv);
+ *   app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit ()));
+ *
+ *   // prepare the pipeline
+ *
+ *   GstElement *pipeline = gst_pipeline_new ("xvoverlay");
+ *   GstElement *src = gst_element_factory_make ("videotestsrc", NULL);
+ *   GstElement *sink = gst_element_factory_make ("xvimagesink", NULL);
+ *   gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+ *   gst_element_link (src, sink);
+ *
+ *   // prepare the ui
+ *
+ *   QWidget window;
+ *   window.resize(320, 240);
+ *   window.show();
+ *
+ *   WId xwinid = window.winId();
+ *   gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), xwinid);
+ *
+ *   // run the pipeline
+ *
+ *   GstStateChangeReturn sret = gst_element_set_state (pipeline,
+ *       GST_STATE_PLAYING);
+ *   if (sret == GST_STATE_CHANGE_FAILURE) {
+ *     gst_element_set_state (pipeline, GST_STATE_NULL);
+ *     gst_object_unref (pipeline);
+ *     // Exit application
+ *     QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
+ *   }
+ *
+ *   int ret = app.exec();
+ *
+ *   window.hide();
+ *   gst_element_set_state (pipeline, GST_STATE_NULL);
+ *   gst_object_unref (pipeline);
+ *
+ *   return ret;
+ * }
+ * ]|
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "videooverlay.h"
+
+GType
+gst_video_overlay_get_type (void)
+{
+  static GType gst_video_overlay_type = 0;
+
+  if (!gst_video_overlay_type) {
+    static const GTypeInfo gst_video_overlay_info = {
+      sizeof (GstVideoOverlayIface),
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      NULL,
+      0,
+      0,
+      NULL,
+    };
+
+    gst_video_overlay_type = g_type_register_static (G_TYPE_INTERFACE,
+        "GstVideoOverlay", &gst_video_overlay_info, 0);
+  }
+
+  return gst_video_overlay_type;
+}
+
+/**
+ * gst_video_overlay_set_window_handle:
+ * @overlay: a #GstVideoOverlay to set the window on.
+ * @handle: a handle referencing the window.
+ *
+ * This will call the video overlay's set_window_handle method. You
+ * should use this method to tell to a XOverlay to display video output to a
+ * specific window (e.g. an XWindow on X11). Passing 0 as the  @handle will
+ * tell the overlay to stop using that window and create an internal one.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_video_overlay_set_window_handle (GstVideoOverlay * overlay, guintptr handle)
+{
+  GstVideoOverlayIface *iface;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  iface = GST_VIDEO_OVERLAY_GET_IFACE (overlay);
+
+  if (iface->set_window_handle) {
+    iface->set_window_handle (overlay, handle);
+  }
+}
+
+/**
+ * gst_video_overlay_got_window_handle:
+ * @overlay: a #GstVideoOverlay which got a window
+ * @handle: a platform-specific handle referencing the window
+ *
+ * This will post a "have-window-handle" element message on the bus.
+ *
+ * This function should only be used by video overlay plugin developers.
+ */
+void
+gst_video_overlay_got_window_handle (GstVideoOverlay * overlay, guintptr handle)
+{
+  GstStructure *s;
+  GstMessage *msg;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  GST_LOG_OBJECT (GST_OBJECT (overlay), "window_handle = %p", (gpointer)
+      handle);
+  s = gst_structure_new ("have-window-handle",
+      "window-handle", G_TYPE_UINT64, (guint64) handle, NULL);
+  msg = gst_message_new_element (GST_OBJECT (overlay), s);
+  gst_element_post_message (GST_ELEMENT (overlay), msg);
+}
+
+/**
+ * gst_video_overlay_prepare_window_handle:
+ * @overlay: a #GstVideoOverlay which does not yet have an Window handle set
+ *
+ * This will post a "prepare-window-handle" element message on the bus
+ * to give applications an opportunity to call
+ * gst_video_overlay_set_window_handle() before a plugin creates its own
+ * window.
+ *
+ * This function should only be used by video overlay plugin developers.
+ */
+void
+gst_video_overlay_prepare_window_handle (GstVideoOverlay * overlay)
+{
+  GstStructure *s;
+  GstMessage *msg;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  GST_LOG_OBJECT (GST_OBJECT (overlay), "prepare window handle");
+  s = gst_structure_new ("prepare-window-handle", NULL);
+  msg = gst_message_new_element (GST_OBJECT (overlay), s);
+  gst_element_post_message (GST_ELEMENT (overlay), msg);
+}
+
+/**
+ * gst_video_overlay_expose:
+ * @overlay: a #GstVideoOverlay to expose.
+ *
+ * Tell an overlay that it has been exposed. This will redraw the current frame
+ * in the drawable even if the pipeline is PAUSED.
+ */
+void
+gst_video_overlay_expose (GstVideoOverlay * overlay)
+{
+  GstVideoOverlayIface *iface;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  iface = GST_VIDEO_OVERLAY_GET_IFACE (overlay);
+
+  if (iface->expose) {
+    iface->expose (overlay);
+  }
+}
+
+/**
+ * gst_video_overlay_handle_events:
+ * @overlay: a #GstVideoOverlay to expose.
+ * @handle_events: a #gboolean indicating if events should be handled or not.
+ *
+ * Tell an overlay that it should handle events from the window system. These
+ * events are forwared upstream as navigation events. In some window system,
+ * events are not propagated in the window hierarchy if a client is listening
+ * for them. This method allows you to disable events handling completely
+ * from the XOverlay.
+ *
+ * Since: 0.10.12
+ */
+void
+gst_video_overlay_handle_events (GstVideoOverlay * overlay,
+    gboolean handle_events)
+{
+  GstVideoOverlayIface *iface;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  iface = GST_VIDEO_OVERLAY_GET_IFACE (overlay);
+
+  if (iface->handle_events) {
+    iface->handle_events (overlay, handle_events);
+  }
+}
+
+/**
+ * gst_video_overlay_set_render_rectangle:
+ * @overlay: a #GstVideoOverlay
+ * @x: the horizontal offset of the render area inside the window
+ * @y: the vertical offset of the render area inside the window
+ * @width: the width of the render area inside the window
+ * @height: the height of the render area inside the window
+ *
+ * Configure a subregion as a video target within the window set by
+ * gst_video_overlay_set_window_handle(). If this is not used or not supported
+ * the video will fill the area of the window set as the overlay to 100%.
+ * By specifying the rectangle, the video can be overlayed to a specific region
+ * of that window only. After setting the new rectangle one should call
+ * gst_video_overlay_expose() to force a redraw. To unset the region pass -1 for
+ * the @width and @height parameters.
+ *
+ * This method is needed for non fullscreen video overlay in UI toolkits that
+ * do not support subwindows.
+ *
+ * Returns: %FALSE if not supported by the sink.
+ *
+ * Since: 0.10.29
+ */
+gboolean
+gst_video_overlay_set_render_rectangle (GstVideoOverlay * overlay,
+    gint x, gint y, gint width, gint height)
+{
+  GstVideoOverlayIface *iface;
+
+  g_return_val_if_fail (overlay != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_VIDEO_OVERLAY (overlay), FALSE);
+  g_return_val_if_fail ((width == -1 && height == -1) ||
+      (width > 0 && height > 0), FALSE);
+
+  iface = GST_VIDEO_OVERLAY_GET_IFACE (overlay);
+
+  if (iface->set_render_rectangle) {
+    iface->set_render_rectangle (overlay, x, y, width, height);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * gst_is_video_overlay_prepare_window_handle_message:
+ * @msg: a #GstMessage
+ *
+ * Convenience function to check if the given message is a
+ * "prepare-window-handle" message from a #GstVideoOverlay.
+ *
+ * Since: 0.11.2
+ *
+ * Returns: whether @msg is a "prepare-window-handle" message
+ */
+gboolean
+gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, FALSE);
+
+  if (GST_MESSAGE_TYPE (msg) != GST_MESSAGE_ELEMENT)
+    return FALSE;
+
+  return gst_message_has_name (msg, "prepare-window-handle");
+}
diff --git a/gst-libs/gst/interfaces/videooverlay.h b/gst-libs/gst/interfaces/videooverlay.h
new file mode 100644
index 0000000..91806ec
--- /dev/null
+++ b/gst-libs/gst/interfaces/videooverlay.h
@@ -0,0 +1,99 @@
+/* GStreamer Video Overlay Interface
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2011 Tim-Philipp Müller <tim@centricular.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_OVERLAY_H__
+#define __GST_VIDEO_OVERLAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_OVERLAY \
+    (gst_video_overlay_get_type ())
+#define GST_VIDEO_OVERLAY(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlay))
+#define GST_IS_VIDEO_OVERLAY(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_OVERLAY))
+#define GST_VIDEO_OVERLAY_GET_IFACE(inst) \
+    (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_VIDEO_OVERLAY, GstVideoOverlayIface))
+
+/**
+ * GstVideoOverlay:
+ *
+ * Opaque #GstVideoOverlay interface structure
+ */
+typedef struct _GstVideoOverlay GstVideoOverlay;
+typedef struct _GstVideoOverlayIface GstVideoOverlayIface;
+
+/**
+ * GstVideoOverlayIface:
+ * @interface: parent interface type.
+ * @expose: virtual method to handle expose events
+ * @handle_events: virtual method to handle events
+ * @set_render_rectangle: virtual method to set the render rectangle
+ * @set_window_handle: virtual method to configure the window handle
+ *
+ * #GstVideoOverlay interface
+ */
+struct _GstVideoOverlayIface {
+  GTypeInterface interface;
+
+  /* virtual functions */
+  void (* expose)              (GstVideoOverlay *overlay);
+
+  void (* handle_events)       (GstVideoOverlay *overlay, gboolean handle_events);
+
+  void (* set_render_rectangle) (GstVideoOverlay *overlay,
+                                 gint x, gint y,
+                                 gint width, gint height);
+
+  void (* set_window_handle)   (GstVideoOverlay *overlay, guintptr handle);
+};
+
+GType   gst_video_overlay_get_type (void);
+
+/* virtual function wrappers */
+
+gboolean gst_video_overlay_set_render_rectangle (GstVideoOverlay * overlay,
+                                                 gint              x,
+                                                 gint              y,
+                                                 gint              width,
+                                                 gint              height);
+
+void gst_video_overlay_expose             (GstVideoOverlay * overlay);
+
+void gst_video_overlay_handle_events      (GstVideoOverlay * overlay,
+                                           gboolean          handle_events);
+
+void gst_video_overlay_set_window_handle  (GstVideoOverlay * overlay,
+                                                             guintptr handle);
+
+/* public methods to dispatch bus messages */
+void gst_video_overlay_got_window_handle  (GstVideoOverlay * overlay,
+                                           guintptr          handle);
+
+void gst_video_overlay_prepare_window_handle (GstVideoOverlay * overlay);
+
+gboolean gst_is_video_overlay_prepare_window_handle_message (GstMessage * msg);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_OVERLAY_H__ */
diff --git a/gst-libs/gst/netbuffer/Makefile.am b/gst-libs/gst/netbuffer/Makefile.am
new file mode 100644
index 0000000..386ba09
--- /dev/null
+++ b/gst-libs/gst/netbuffer/Makefile.am
@@ -0,0 +1,70 @@
+libgstnetbufferincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/netbuffer
+
+libgstnetbufferinclude_HEADERS = gstnetbuffer.h
+
+lib_LTLIBRARIES = libgstnetbuffer-@GST_MAJORMINOR@.la
+
+libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES = gstnetbuffer.c
+libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS)
+libgstnetbuffer_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS)
+libgstnetbuffer_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstNetbuffer-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstnetbufferinclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/netbuffer/%',$(libgstnetbufferinclude_HEADERS))
+
+GstNetbuffer-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstnetbuffer-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstNetbuffer \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstnetbuffer-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-netbuffer-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstnetbuffer -:SHARED libgstnetbuffer-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstnetbuffer_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstnetbuffer_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/netbuffer \
+	 -:HEADERS $(libgstnetbuffer_include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/netbuffer/Makefile.in b/gst-libs/gst/netbuffer/Makefile.in
new file mode 100644
index 0000000..c8af5af
--- /dev/null
+++ b/gst-libs/gst/netbuffer/Makefile.in
@@ -0,0 +1,881 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/netbuffer
+DIST_COMMON = README $(libgstnetbufferinclude_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstnetbufferincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstnetbuffer_@GST_MAJORMINOR@_la_DEPENDENCIES =  \
+	$(am__DEPENDENCIES_1)
+am_libgstnetbuffer_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo
+libgstnetbuffer_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstnetbuffer_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstnetbuffer_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS) \
+	$(CFLAGS) $(libgstnetbuffer_@GST_MAJORMINOR@_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstnetbufferinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libgstnetbufferincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/netbuffer
+libgstnetbufferinclude_HEADERS = gstnetbuffer.h
+lib_LTLIBRARIES = libgstnetbuffer-@GST_MAJORMINOR@.la
+libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES = gstnetbuffer.c
+libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS = $(GST_CFLAGS)
+libgstnetbuffer_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS)
+libgstnetbuffer_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstNetbuffer-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstnetbufferinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/netbuffer/%',$(libgstnetbufferinclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/netbuffer/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/netbuffer/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstnetbuffer-@GST_MAJORMINOR@.la: $(libgstnetbuffer_@GST_MAJORMINOR@_la_OBJECTS) $(libgstnetbuffer_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstnetbuffer_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstnetbuffer_@GST_MAJORMINOR@_la_OBJECTS) $(libgstnetbuffer_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo: gstnetbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo -MD -MP -MF $(DEPDIR)/libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.Tpo -c -o libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo `test -f 'gstnetbuffer.c' || echo '$(srcdir)/'`gstnetbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.Tpo $(DEPDIR)/libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstnetbuffer.c' object='libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstnetbuffer_@GST_MAJORMINOR@_la-gstnetbuffer.lo `test -f 'gstnetbuffer.c' || echo '$(srcdir)/'`gstnetbuffer.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstnetbufferincludeHEADERS: $(libgstnetbufferinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstnetbufferincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstnetbufferincludedir)"
+	@list='$(libgstnetbufferinclude_HEADERS)'; test -n "$(libgstnetbufferincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstnetbufferincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstnetbufferincludedir)" || exit $$?; \
+	done
+
+uninstall-libgstnetbufferincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstnetbufferinclude_HEADERS)'; test -n "$(libgstnetbufferincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstnetbufferincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstnetbufferincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstnetbufferincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA install-libgstnetbufferincludeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstnetbufferincludeHEADERS uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgstnetbufferincludeHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstnetbufferincludeHEADERS uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstNetbuffer-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstnetbuffer-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstNetbuffer \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstnetbuffer-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-netbuffer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstnetbuffer -:SHARED libgstnetbuffer-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstnetbuffer_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstnetbuffer_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstnetbuffer_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstnetbuffer_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/netbuffer \
+	 -:HEADERS $(libgstnetbuffer_include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/netbuffer/README b/gst-libs/gst/netbuffer/README
new file mode 100644
index 0000000..d55ceb1
--- /dev/null
+++ b/gst-libs/gst/netbuffer/README
@@ -0,0 +1,9 @@
+The network libraries
+---------------------
+
+GstNetBuffer:
+
+  A GstBuffer subclass that can be used by network sources or sinks to
+  store additional to and from addresses. This is required for plugins
+  that operate on this data like RTP.
+
diff --git a/gst-libs/gst/netbuffer/gstnetbuffer.c b/gst-libs/gst/netbuffer/gstnetbuffer.c
new file mode 100644
index 0000000..aaea75a
--- /dev/null
+++ b/gst-libs/gst/netbuffer/gstnetbuffer.c
@@ -0,0 +1,378 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstnetbuffer
+ * @short_description: Buffer for use in network sources and sinks
+ *
+ * #GstNetBuffer is a subclass of a normal #GstBuffer that contains two
+ * additional metadata fields of type #GstNetAddress named 'to' and 'from'. The
+ * buffer can be used to store additional information about the origin of the
+ * buffer data and is used in various network elements to track the to and from
+ * addresses.
+ *
+ * Last reviewed on 2006-08-21 (0.10.10)
+ */
+
+#include <string.h>
+
+#include "gstnetbuffer.h"
+
+static void
+meta_net_address_copy (GstBuffer * copybuf, GstMetaNetAddress * meta,
+    GstBuffer * buffer, gsize offset, gsize size)
+{
+  GstMetaNetAddress *naddr;
+
+  naddr = gst_buffer_add_meta_net_address (copybuf);
+  memcpy (&naddr->naddr, &meta->naddr, sizeof (meta->naddr));
+}
+
+const GstMetaInfo *
+gst_meta_net_address_get_info (void)
+{
+  static const GstMetaInfo *meta_info = NULL;
+
+  if (meta_info == NULL) {
+    meta_info = gst_meta_register ("GstMetaNetAddress", "GstMetaNetAddress",
+        sizeof (GstMetaNetAddress),
+        (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) NULL,
+        (GstMetaCopyFunction) meta_net_address_copy,
+        (GstMetaTransformFunction) NULL);
+  }
+  return meta_info;
+}
+
+/**
+ * gst_netaddress_set_ip4_address:
+ * @naddr: a network address
+ * @address: an IPv4 network address.
+ * @port: a port number to set.
+ *
+ * Set @naddr with the IPv4 @address and @port pair.
+ *
+ * Note that @port and @address must be expressed in network byte order,
+ * use g_htons() and g_htonl() to convert them to network byte order.
+ */
+void
+gst_netaddress_set_ip4_address (GstNetAddress * naddr, guint32 address,
+    guint16 port)
+{
+  g_return_if_fail (naddr != NULL);
+
+  naddr->type = GST_NET_TYPE_IP4;
+  naddr->address.ip4 = address;
+  naddr->port = port;
+}
+
+/**
+ * gst_netaddress_set_ip6_address:
+ * @naddr: a network address
+ * @address: an IPv6 network address.
+ * @port: a port number to set.
+ *
+ * Set @naddr with the IPv6 @address and @port pair.
+ *
+ * Note that @port must be expressed in network byte order, use g_htons() to convert
+ * it to network byte order.
+ */
+void
+gst_netaddress_set_ip6_address (GstNetAddress * naddr, guint8 address[16],
+    guint16 port)
+{
+  g_return_if_fail (naddr != NULL);
+
+  naddr->type = GST_NET_TYPE_IP6;
+  memcpy (&naddr->address.ip6, address, 16);
+  naddr->port = port;
+}
+
+/**
+ * gst_netaddress_get_net_type:
+ * @naddr: a network address
+ *
+ * Get the type of address stored in @naddr.
+ *
+ * Returns: the network type stored in @naddr.
+ */
+GstNetType
+gst_netaddress_get_net_type (const GstNetAddress * naddr)
+{
+  g_return_val_if_fail (naddr != NULL, GST_NET_TYPE_UNKNOWN);
+
+  return naddr->type;
+}
+
+/**
+ * gst_netaddress_get_ip4_address:
+ * @naddr: a network address
+ * @address: a location to store the address.
+ * @port: a location to store the port.
+ *
+ * Get the IPv4 address stored in @naddr into @address. This function requires
+ * that the address type of @naddr is of type #GST_NET_TYPE_IP4.
+ *
+ * Note that @port and @address are expressed in network byte order, use
+ * g_ntohs() and g_ntohl() to convert them to host order.
+ *
+ * Returns: TRUE if the address could be retrieved.
+ */
+gboolean
+gst_netaddress_get_ip4_address (const GstNetAddress * naddr, guint32 * address,
+    guint16 * port)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN || naddr->type == GST_NET_TYPE_IP6)
+    return FALSE;
+
+  if (address)
+    *address = naddr->address.ip4;
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
+
+/**
+ * gst_netaddress_get_ip6_address:
+ * @naddr: a network address
+ * @address: a location to store the result.
+ * @port: a location to store the port.
+ *
+ * Get the IPv6 address stored in @naddr into @address.
+ *
+ * If @naddr is of type GST_NET_TYPE_IP4, the transitional IP6 address is
+ * returned.
+ *
+ * Note that @port is expressed in network byte order, use g_ntohs() to convert
+ * it to host order.
+ *
+ * Returns: TRUE if the address could be retrieved.
+ */
+gboolean
+gst_netaddress_get_ip6_address (const GstNetAddress * naddr, guint8 address[16],
+    guint16 * port)
+{
+  static guint8 ip4_transition[16] =
+      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF };
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return FALSE;
+
+  if (address) {
+    if (naddr->type == GST_NET_TYPE_IP6) {
+      memcpy (address, naddr->address.ip6, 16);
+    } else {                    /* naddr->type == GST_NET_TYPE_IP4 */
+      memcpy (address, ip4_transition, 12);
+      memcpy (address + 12, (guint8 *) & (naddr->address.ip4), 4);
+    }
+  }
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
+
+/**
+ * gst_netaddress_get_address_bytes:
+ * @naddr: a network address
+ * @address: a location to store the result.
+ * @port: a location to store the port.
+ *
+ * Get just the address bytes stored in @naddr into @address.
+ *
+ * Note that @port is expressed in network byte order, use g_ntohs() to convert
+ * it to host order. IP4 addresses are also stored in network byte order.
+ *
+ * Returns: number of bytes actually copied
+ *
+ * Since: 0.10.22
+ */
+gint
+gst_netaddress_get_address_bytes (const GstNetAddress * naddr,
+    guint8 address[16], guint16 * port)
+{
+  gint ret = 0;
+
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return 0;
+
+  if (address) {
+    if (naddr->type == GST_NET_TYPE_IP6) {
+      memcpy (address, naddr->address.ip6, 16);
+      ret = 16;
+    } else {                    /* naddr->type == GST_NET_TYPE_IP4 */
+      memcpy (address, (guint8 *) & (naddr->address.ip4), 4);
+      ret = 4;
+    }
+  }
+  if (port)
+    *port = naddr->port;
+
+  return ret;
+}
+
+/**
+ * gst_netaddress_set_address_bytes:
+ * @naddr: a network address
+ * @type: the address type (IPv4 or IPV6)
+ * @address: a location to store the result.
+ * @port: a location to store the port.
+ *
+ * Set just the address bytes stored in @naddr into @address.
+ *
+ * Note that @port must be expressed in network byte order, use g_htons() to
+ * convert it to network byte order order. IP4 address bytes must also be
+ * stored in network byte order.
+ *
+ * Returns: number of bytes actually copied
+ *
+ * Since: 0.10.22
+ */
+gint
+gst_netaddress_set_address_bytes (GstNetAddress * naddr, GstNetType type,
+    guint8 address[16], guint16 port)
+{
+  gint len = 0;
+
+  g_return_val_if_fail (naddr != NULL, 0);
+
+  naddr->type = type;
+  switch (naddr->type) {
+    case GST_NET_TYPE_UNKNOWN:
+    case GST_NET_TYPE_IP6:
+      len = 16;
+      memcpy (naddr->address.ip6, address, 16);
+      break;
+    case GST_NET_TYPE_IP4:
+      len = 4;
+      memcpy ((guint8 *) & (naddr->address.ip4), address, 4);
+      break;
+  }
+
+  if (port)
+    naddr->port = port;
+
+  return len;
+}
+
+/**
+ * gst_netaddress_equal:
+ * @naddr1: The first #GstNetAddress
+ * @naddr2: The second #GstNetAddress
+ *
+ * Compare two #GstNetAddress structures
+ *
+ * Returns: TRUE if they are identical, FALSE otherwise
+ *
+ * Since: 0.10.18
+ */
+gboolean
+gst_netaddress_equal (const GstNetAddress * naddr1,
+    const GstNetAddress * naddr2)
+{
+  g_return_val_if_fail (naddr1 != NULL, FALSE);
+  g_return_val_if_fail (naddr2 != NULL, FALSE);
+
+  if (naddr1->type != naddr2->type)
+    return FALSE;
+
+  if (naddr1->port != naddr2->port)
+    return FALSE;
+
+  switch (naddr1->type) {
+    case GST_NET_TYPE_IP4:
+      if (naddr1->address.ip4 != naddr2->address.ip4)
+        return FALSE;
+      break;
+    case GST_NET_TYPE_IP6:
+      if (memcmp (naddr1->address.ip6, naddr2->address.ip6,
+              sizeof (naddr1->address.ip6)))
+        return FALSE;
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+/**
+ * gst_netaddress_to_string:
+ * @naddr: a #GstNetAddress
+ * @dest: destination
+ * @len: len of @dest
+ *
+ * Copies a string representation of @naddr into @dest. Up to @len bytes are
+ * copied.
+ *
+ * Returns: the number of bytes which would be produced if the buffer was large
+ * enough
+ *
+ * Since: 0.10.24
+ */
+gint
+gst_netaddress_to_string (const GstNetAddress * naddr, gchar * dest, gulong len)
+{
+  gint result;
+
+  g_return_val_if_fail (naddr != NULL, FALSE);
+  g_return_val_if_fail (dest != NULL, FALSE);
+
+  switch (naddr->type) {
+    case GST_NET_TYPE_IP4:
+    {
+      guint32 address;
+      guint16 port;
+
+      gst_netaddress_get_ip4_address (naddr, &address, &port);
+      address = g_ntohl (address);
+
+      result = g_snprintf (dest, len, "%d.%d.%d.%d:%d", (address >> 24) & 0xff,
+          (address >> 16) & 0xff, (address >> 8) & 0xff, address & 0xff,
+          g_ntohs (port));
+      break;
+    }
+    case GST_NET_TYPE_IP6:
+    {
+      guint8 address[16];
+      guint16 port;
+
+      gst_netaddress_get_ip6_address (naddr, address, &port);
+
+      result =
+          g_snprintf (dest, len, "[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]:%d",
+          (address[0] << 8) | address[1], (address[2] << 8) | address[3],
+          (address[4] << 8) | address[5], (address[6] << 8) | address[7],
+          (address[8] << 8) | address[9], (address[10] << 8) | address[11],
+          (address[12] << 8) | address[13], (address[14] << 8) | address[15],
+          g_ntohs (port));
+      break;
+    }
+    default:
+      dest[0] = 0;
+      result = 0;
+      break;
+  }
+  return result;
+}
diff --git a/gst-libs/gst/netbuffer/gstnetbuffer.h b/gst-libs/gst/netbuffer/gstnetbuffer.h
new file mode 100644
index 0000000..368490a
--- /dev/null
+++ b/gst-libs/gst/netbuffer/gstnetbuffer.h
@@ -0,0 +1,123 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_NETBUFFER_H__
+#define __GST_NETBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#if 0
+typedef struct _GstNetBuffer GstNetBuffer;
+typedef struct _GstNetBufferClass GstNetBufferClass;
+#endif
+typedef struct _GstNetAddress GstNetAddress;
+
+#if 0
+#define GST_TYPE_NETBUFFER            (gst_netbuffer_get_type())
+#define GST_IS_NETBUFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NETBUFFER))
+#define GST_IS_NETBUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_NETBUFFER))
+#define GST_NETBUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_NETBUFFER, GstNetBufferClass))
+#define GST_NETBUFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETBUFFER, GstNetBuffer))
+#define GST_NETBUFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_NETBUFFER, GstNetBufferClass))
+#endif
+
+/**
+ * GstNetType:
+ * @GST_NET_TYPE_UNKNOWN: unknown address type
+ * @GST_NET_TYPE_IP4: an IPv4 address type
+ * @GST_NET_TYPE_IP6: and IPv6 address type
+ *
+ * The Address type used in #GstNetAddress.
+ */
+typedef enum {
+  GST_NET_TYPE_UNKNOWN,
+  GST_NET_TYPE_IP4,
+  GST_NET_TYPE_IP6,
+} GstNetType;
+
+/**
+ * GST_NETADDRESS_MAX_LEN:
+ *
+ * The maximum length of a string representation of a GstNetAddress as produced
+ * by gst_netaddress_to_string().
+ *
+ * Since: 0.10.24
+ */
+#define GST_NETADDRESS_MAX_LEN	64
+
+/**
+ * GstNetAddress:
+ *
+ * An opaque network address as used in #GstMetaNetAddress.
+ */
+struct _GstNetAddress {
+  /*< private >*/
+  GstNetType    type;
+  union {
+    guint8        ip6[16];
+    guint32       ip4;
+  } address;
+  guint16       port;
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+typedef struct _GstMetaNetAddress GstMetaNetAddress;
+
+/**
+ * GstMetaNetAddress:
+ *
+ * Buffer metadata for network addresses.
+ */
+struct _GstMetaNetAddress {
+  GstMeta       meta;
+
+  GstNetAddress naddr;
+};
+
+const GstMetaInfo *gst_meta_net_address_get_info (void);
+#define GST_META_NET_ADDRESS_INFO (gst_meta_net_address_get_info())
+
+#define gst_buffer_get_meta_net_address(b) \
+  ((GstMetaNetAddress*)gst_buffer_get_meta((b),GST_META_NET_ADDRESS_INFO))
+#define gst_buffer_add_meta_net_address(b) \
+  ((GstMetaNetAddress*)gst_buffer_add_meta((b),GST_META_NET_ADDRESS_INFO,NULL))
+
+/* address operations */
+void            gst_netaddress_set_ip4_address   (GstNetAddress *naddr, guint32 address, guint16 port);
+void            gst_netaddress_set_ip6_address   (GstNetAddress *naddr, guint8 address[16], guint16 port);
+gint            gst_netaddress_set_address_bytes (GstNetAddress *naddr, GstNetType type,
+                                                  guint8 address[16], guint16 port);
+
+GstNetType      gst_netaddress_get_net_type      (const GstNetAddress *naddr);
+gboolean        gst_netaddress_get_ip4_address   (const GstNetAddress *naddr, guint32 *address, guint16 *port);
+gboolean        gst_netaddress_get_ip6_address   (const GstNetAddress *naddr, guint8 address[16], guint16 *port);
+gint            gst_netaddress_get_address_bytes (const GstNetAddress *naddr, guint8 address[16], guint16 *port);
+
+gboolean        gst_netaddress_equal             (const GstNetAddress *naddr1,
+                                                  const GstNetAddress *naddr2);
+
+gint            gst_netaddress_to_string         (const GstNetAddress *naddr, gchar *dest, gulong len);
+
+G_END_DECLS
+
+#endif /* __GST_NETBUFFER_H__ */
+
diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am
new file mode 100644
index 0000000..16ff053
--- /dev/null
+++ b/gst-libs/gst/pbutils/Makefile.am
@@ -0,0 +1,135 @@
+lib_LTLIBRARIES = libgstpbutils-@GST_MAJORMINOR@.la
+
+headers_pbutils = \
+	pbutils.h         \
+	codec-utils.h     \
+	descriptions.h    \
+	encoding-profile.h	\
+	encoding-target.h	\
+	install-plugins.h \
+	missing-plugins.h \
+	gstdiscoverer.h
+
+# variables used for enum/marshal generation
+glib_enum_headers = $(headers_pbutils)
+glib_enum_define = PB_UTILS
+glib_gen_prefix = pbutils
+glib_gen_basename = pbutils
+
+built_headers_configure = \
+	gstpluginsbaseversion.h
+
+libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
+	gstpluginsbaseversion.c \
+	pbutils.c         \
+	codec-utils.c     \
+	descriptions.c    \
+	encoding-profile.c	\
+	encoding-target.c	\
+	install-plugins.c \
+	missing-plugins.c \
+	gstdiscoverer.c   \
+	gstdiscoverer-types.c
+
+nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
+	pbutils-enumtypes.c	\
+	pbutils-marshal.c
+
+libgstpbutils_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/pbutils
+libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
+	$(headers_pbutils)
+nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
+	$(built_headers_configure) \
+	pbutils-enumtypes.h
+noinst_HEADERS = \
+	pbutils-private.h
+EXTRA_DIST = pbutils-marshal.list
+
+libgstpbutils_@GST_MAJORMINOR@_la_LIBADD = \
+  $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+  $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+  $(GST_LIBS)
+libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+BUILT_SOURCES = \
+	pbutils-enumtypes.c \
+	pbutils-enumtypes.h \
+	pbutils-marshal.c   \
+	pbutils-marshal.h
+
+CLEANFILES = $(BUILT_SOURCES)
+
+# DISTCLEANFILES is for files generated by configure
+DISTCLEANFILES = $(built_headers_configure)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstPbutils-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/pbutils/%',$(libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+gir_cincludes+=$(patsubst %,--c-include='gst/pbutils/%',$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+
+GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstpbutils-@GST_MAJORMINOR@.la \
+		--library-path=`$(PKG_CONFIG) --variable=libdir gstreamer-@GST_MAJORMINOR@` \
+		--library=gstreamer-@GST_MAJORMINOR@ \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-pbutils-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstpbutils_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/pbutils \
+	 -:HEADERS $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/pbutils/Makefile.in b/gst-libs/gst/pbutils/Makefile.in
new file mode 100644
index 0000000..5a363f1
--- /dev/null
+++ b/gst-libs/gst/pbutils/Makefile.in
@@ -0,0 +1,1153 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	$(noinst_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/gstpluginsbaseversion.h.in \
+	$(top_srcdir)/common/gst-glib-gen.mak
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/pbutils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = gstpluginsbaseversion.h
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" \
+	"$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstpbutils_@GST_MAJORMINOR@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1)
+am_libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo
+nodist_libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo \
+	libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo
+libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstpbutils_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	$(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstpbutils-@GST_MAJORMINOR@.la
+headers_pbutils = \
+	pbutils.h         \
+	codec-utils.h     \
+	descriptions.h    \
+	encoding-profile.h	\
+	encoding-target.h	\
+	install-plugins.h \
+	missing-plugins.h \
+	gstdiscoverer.h
+
+
+# variables used for enum/marshal generation
+glib_enum_headers = $(headers_pbutils)
+glib_enum_define = PB_UTILS
+glib_gen_prefix = pbutils
+glib_gen_basename = pbutils
+built_headers_configure = \
+	gstpluginsbaseversion.h
+
+libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
+	gstpluginsbaseversion.c \
+	pbutils.c         \
+	codec-utils.c     \
+	descriptions.c    \
+	encoding-profile.c	\
+	encoding-target.c	\
+	install-plugins.c \
+	missing-plugins.c \
+	gstdiscoverer.c   \
+	gstdiscoverer-types.c
+
+nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES = \
+	pbutils-enumtypes.c	\
+	pbutils-marshal.c
+
+libgstpbutils_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/pbutils
+libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
+	$(headers_pbutils)
+
+nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS = \
+	$(built_headers_configure) \
+	pbutils-enumtypes.h
+
+noinst_HEADERS = \
+	pbutils-private.h
+
+EXTRA_DIST = pbutils-marshal.list
+libgstpbutils_@GST_MAJORMINOR@_la_LIBADD = \
+  $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+  $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+  $(GST_LIBS)
+
+libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+BUILT_SOURCES = \
+	pbutils-enumtypes.c \
+	pbutils-enumtypes.h \
+	pbutils-marshal.c   \
+	pbutils-marshal.h
+
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+
+# DISTCLEANFILES is for files generated by configure
+DISTCLEANFILES = $(built_headers_configure)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstPbutils-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstpbutils_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/pbutils/%',$(libgstpbutils_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/pbutils/%',$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+gstpluginsbaseversion.h: $(top_builddir)/config.status $(srcdir)/gstpluginsbaseversion.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstpbutils-@GST_MAJORMINOR@.la: $(libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS) $(libgstpbutils_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstpbutils_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstpbutils_@GST_MAJORMINOR@_la_OBJECTS) $(libgstpbutils_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-descriptions.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo: gstpluginsbaseversion.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo `test -f 'gstpluginsbaseversion.c' || echo '$(srcdir)/'`gstpluginsbaseversion.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstpluginsbaseversion.c' object='libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstpluginsbaseversion.lo `test -f 'gstpluginsbaseversion.c' || echo '$(srcdir)/'`gstpluginsbaseversion.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo: pbutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pbutils.c' object='libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils.lo `test -f 'pbutils.c' || echo '$(srcdir)/'`pbutils.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo: codec-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo `test -f 'codec-utils.c' || echo '$(srcdir)/'`codec-utils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='codec-utils.c' object='libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-codec-utils.lo `test -f 'codec-utils.c' || echo '$(srcdir)/'`codec-utils.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo: descriptions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-descriptions.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo `test -f 'descriptions.c' || echo '$(srcdir)/'`descriptions.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-descriptions.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-descriptions.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='descriptions.c' object='libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-descriptions.lo `test -f 'descriptions.c' || echo '$(srcdir)/'`descriptions.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo: encoding-profile.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo `test -f 'encoding-profile.c' || echo '$(srcdir)/'`encoding-profile.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='encoding-profile.c' object='libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-encoding-profile.lo `test -f 'encoding-profile.c' || echo '$(srcdir)/'`encoding-profile.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo: encoding-target.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo `test -f 'encoding-target.c' || echo '$(srcdir)/'`encoding-target.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='encoding-target.c' object='libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-encoding-target.lo `test -f 'encoding-target.c' || echo '$(srcdir)/'`encoding-target.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo: install-plugins.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo `test -f 'install-plugins.c' || echo '$(srcdir)/'`install-plugins.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='install-plugins.c' object='libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-install-plugins.lo `test -f 'install-plugins.c' || echo '$(srcdir)/'`install-plugins.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo: missing-plugins.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo `test -f 'missing-plugins.c' || echo '$(srcdir)/'`missing-plugins.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='missing-plugins.c' object='libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-missing-plugins.lo `test -f 'missing-plugins.c' || echo '$(srcdir)/'`missing-plugins.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo: gstdiscoverer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo `test -f 'gstdiscoverer.c' || echo '$(srcdir)/'`gstdiscoverer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstdiscoverer.c' object='libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer.lo `test -f 'gstdiscoverer.c' || echo '$(srcdir)/'`gstdiscoverer.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo: gstdiscoverer-types.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo `test -f 'gstdiscoverer-types.c' || echo '$(srcdir)/'`gstdiscoverer-types.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstdiscoverer-types.c' object='libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-gstdiscoverer-types.lo `test -f 'gstdiscoverer-types.c' || echo '$(srcdir)/'`gstdiscoverer-types.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo: pbutils-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo `test -f 'pbutils-enumtypes.c' || echo '$(srcdir)/'`pbutils-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pbutils-enumtypes.c' object='libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils-enumtypes.lo `test -f 'pbutils-enumtypes.c' || echo '$(srcdir)/'`pbutils-enumtypes.c
+
+libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo: pbutils-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.Tpo -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo `test -f 'pbutils-marshal.c' || echo '$(srcdir)/'`pbutils-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.Tpo $(DEPDIR)/libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pbutils-marshal.c' object='libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_MAJORMINOR@_la-pbutils-marshal.lo `test -f 'pbutils-marshal.c' || echo '$(srcdir)/'`pbutils-marshal.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstpbutils_@GST_MAJORMINOR@includeHEADERS: $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstpbutils_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstpbutils_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstpbutils_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" && rm -f $$files
+install-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS: $(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)"
+	@list='$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstpbutils_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)" "$(DESTDIR)$(libgstpbutils_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	install-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	install-man \
+	install-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstpbutils_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstPbutils-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstpbutils-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--library-path=`$(PKG_CONFIG) --variable=libdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-pbutils-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstpbutils_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstpbutils_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstpbutils_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstpbutils_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/pbutils \
+	 -:HEADERS $(libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstpbutils_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/pbutils/codec-utils.c b/gst-libs/gst/pbutils/codec-utils.c
new file mode 100644
index 0000000..282e03e
--- /dev/null
+++ b/gst-libs/gst/pbutils/codec-utils.c
@@ -0,0 +1,830 @@
+/* GStreamer base utils library codec-specific utility functions
+ * Copyright (C) 2010 Arun Raghavan <arun.raghavan@collabora.co.uk>
+ *               2010 Collabora Multimedia
+ *               2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpbutilscodecutils
+ * @short_description: Miscellaneous codec-specific utility functions
+ *
+ * <refsect2>
+ * <para>
+ * Provides codec-specific ulility functions such as functions to provide the
+ * codec profile and level in human-readable string form from header data.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "pbutils.h"
+
+#include <string.h>
+
+#define GST_SIMPLE_CAPS_HAS_NAME(caps,name) \
+    gst_structure_has_name(gst_caps_get_structure((caps),0),(name))
+
+#define GST_SIMPLE_CAPS_HAS_FIELD(caps,field) \
+    gst_structure_has_field(gst_caps_get_structure((caps),0),(field))
+
+static const gchar *
+digit_to_string (guint digit)
+{
+  static const char itoa[][2] = {
+    "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
+  };
+
+  if (G_LIKELY (digit < 10))
+    return itoa[digit];
+  else
+    return NULL;
+}
+
+/**
+ * gst_codec_utils_aac_get_sample_rate_from_index:
+ * @sr_idx: Sample rate index as from the AudioSpecificConfig (MPEG-4
+ *          container) or ADTS frame header
+ *
+ * Translates the sample rate index found in AAC headers to the actual sample
+ * rate.
+ *
+ * Returns: The sample rate if @sr_idx is valid, 0 otherwise.
+ *
+ * Since: 0.10.31
+ */
+guint
+gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx)
+{
+  static const guint aac_sample_rates[] = { 96000, 88200, 64000, 48000, 44100,
+    32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350
+  };
+
+  if (G_LIKELY (sr_idx < G_N_ELEMENTS (aac_sample_rates)))
+    return aac_sample_rates[sr_idx];
+
+  GST_WARNING ("Invalid sample rate index %u", sr_idx);
+  return 0;
+}
+
+/**
+ * gst_codec_utils_aac_get_profile:
+ * @audio_config: a pointer to the AudioSpecificConfig as specified in the
+ *                Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see
+ *                gst_codec_utils_aac_get_level() for a more details).
+ * @len: Length of @audio_config in bytes
+ *
+ * Returns the profile of the given AAC stream as a string. The profile is
+ * determined using the AudioObjectType field which is in the first 5 bits of
+ * @audio_config.
+ *
+ * <note>
+ * HE-AAC support has not yet been implemented.
+ * </note>
+ *
+ * Returns: The profile as a const string and %NULL if the profile could not be
+ * determined.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len)
+{
+  guint profile;
+
+  if (len < 1)
+    return NULL;
+
+  GST_MEMDUMP ("audio config", audio_config, len);
+
+  profile = audio_config[0] >> 3;
+  switch (profile) {
+    case 1:
+      return "main";
+    case 2:
+      return "lc";
+    case 3:
+      return "ssr";
+    case 4:
+      return "ltp";
+    default:
+      break;
+  }
+
+  GST_DEBUG ("Invalid profile idx: %u", profile);
+  return NULL;
+}
+
+/**
+ * gst_codec_utils_aac_get_level:
+ * @audio_config: a pointer to the AudioSpecificConfig as specified in the
+ *                Elementary Stream Descriptor (esds) in ISO/IEC 14496-1.
+ * @len: Length of @audio_config in bytes
+ *
+ * Determines the level of a stream as defined in ISO/IEC 14496-3. For AAC LC
+ * streams, the constraints from the AAC audio profile are applied. For AAC
+ * Main, LTP, SSR and others, the Main profile is used.
+ *
+ * The @audio_config parameter follows the following format, starting from the
+ * most significant bit of the first byte:
+ *
+ * <itemizedlist>
+ *   <listitem><para>
+ *     Bit 0:4 contains the AudioObjectType
+ *   </para></listitem>
+ *   <listitem><para>
+ *     Bit 5:8 contains the sample frequency index (if this is 0xf, then the
+ *             next 24 bits define the actual sample frequency, and subsequent
+ *             fields are appropriately shifted).
+ *    </para></listitem>
+ *   <listitem><para>
+ *     Bit 9:12 contains the channel configuration
+ *   </para></listitem>
+ * </itemizedlist>
+ *
+ * <note>
+ * HE-AAC support has not yet been implemented.
+ * </note>
+ *
+ * Returns: The level as a const string and %NULL if the level could not be
+ * determined.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_aac_get_level (const guint8 * audio_config, guint len)
+{
+  int profile, sr_idx, channel_config, rate;
+  /* Number of single channel elements, channel pair elements, low frequency
+   * elements, independently switched coupling channel elements, and
+   * dependently switched coupling channel elements.
+   *
+   * Note: The 2 CCE types are ignored for now as they require us to actually
+   * parse the first frame, and they are rarely found in actual streams.
+   */
+  int num_sce = 0, num_cpe = 0, num_lfe = 0, num_cce_indep = 0, num_cce_dep = 0;
+  int num_channels;
+  /* Processor and RAM Complexity Units (calculated and "reference" for single
+   * channel) */
+  int pcu, rcu, pcu_ref, rcu_ref;
+  int ret = -1;
+
+  g_return_val_if_fail (audio_config != NULL, NULL);
+
+  if (len < 2)
+    return NULL;
+
+  GST_MEMDUMP ("audio config", audio_config, len);
+
+  profile = audio_config[0] >> 3;
+  /* FIXME: add support for sr_idx = 0xf */
+  sr_idx = ((audio_config[0] & 0x7) << 1) | ((audio_config[1] & 0x80) >> 7);
+  rate = gst_codec_utils_aac_get_sample_rate_from_index (sr_idx);
+  channel_config = (audio_config[1] & 0x7f) >> 3;
+
+  if (rate == 0)
+    return NULL;
+
+  switch (channel_config) {
+    case 0:
+      /* Channel config is defined in the AudioObjectType's SpecificConfig,
+       * which requires some amount of digging through the headers. I only see
+       * this done in the MPEG conformance streams - FIXME */
+      GST_WARNING ("Found a stream with channel configuration in the "
+          "AudioSpecificConfig. Please file a bug with a link to the media if "
+          "possible.");
+      return NULL;
+    case 1:
+      /* front center */
+      num_sce = 1;
+      break;
+    case 2:
+      /* front left and right */
+      num_cpe = 1;
+      break;
+    case 3:
+      /* front left, right, and center */
+      num_sce = 1;
+      num_cpe = 1;
+      break;
+    case 4:
+      /* front left, right, and center; rear surround */
+      num_sce = 2;
+      num_cpe = 1;
+      break;
+    case 5:
+      /* front left, right, and center; rear left and right surround */
+      num_sce = 1;
+      num_cpe = 2;
+      break;
+    case 6:
+      /* front left, right, center and LFE; rear left and right surround */
+      num_sce = 1;
+      num_cpe = 2;
+      break;
+    case 7:
+      /* front left, right, center and LFE; outside front left and right;
+       * rear left and right surround */
+      num_sce = 1;
+      num_cpe = 3;
+      num_lfe = 1;
+      break;
+    default:
+      GST_WARNING ("Unknown channel config in header: %d", channel_config);
+      return NULL;
+  }
+
+  switch (profile) {
+    case 0:                    /* NULL */
+      GST_WARNING ("profile 0 is not a valid profile");
+      return NULL;
+    case 2:                    /* LC */
+      pcu_ref = 3;
+      rcu_ref = 3;
+      break;
+    case 3:                    /* SSR */
+      pcu_ref = 4;
+      rcu_ref = 3;
+      break;
+    case 4:                    /* LTP */
+      pcu_ref = 4;
+      rcu_ref = 4;
+      break;
+    case 1:                    /* Main */
+    default:
+      /* Other than a couple of ER profiles, Main is the worst-case */
+      pcu_ref = 5;
+      rcu_ref = 5;
+      break;
+  }
+
+  /* "fs_ref" is 48000 Hz for AAC Main/LC/SSR/LTP. SBR's fs_ref is defined as
+   * 24000/48000 (in/out), for SBR streams. Actual support is a FIXME */
+
+  pcu = ((float) rate / 48000) * pcu_ref *
+      ((2 * num_cpe) + num_sce + num_lfe + num_cce_indep + (0.3 * num_cce_dep));
+
+  rcu = ((float) rcu_ref) * (num_sce + (0.5 * num_lfe) + (0.5 * num_cce_indep) +
+      (0.4 * num_cce_dep));
+
+  if (num_cpe < 2)
+    rcu += (rcu_ref + (rcu_ref - 1)) * num_cpe;
+  else
+    rcu += (rcu_ref + (rcu_ref - 1) * ((2 * num_cpe) - 1));
+
+  num_channels = num_sce + (2 * num_cpe) + num_lfe;
+
+  if (profile == 2) {
+    /* AAC LC => return the level as per the 'AAC Profile' */
+    if (num_channels <= 2 && rate <= 24000 && pcu <= 3 && rcu <= 5)
+      ret = 1;
+    else if (num_channels <= 2 && rate <= 48000 && pcu <= 6 && rcu <= 5)
+      ret = 2;
+    /* There is no level 3 for the AAC Profile */
+    else if (num_channels <= 5 && rate <= 48000 && pcu <= 19 && rcu <= 15)
+      ret = 4;
+    else if (num_channels <= 5 && rate <= 96000 && pcu <= 38 && rcu <= 15)
+      ret = 5;
+  } else {
+    /* Return the level as per the 'Main Profile' */
+    if (pcu < 40 && rcu < 20)
+      ret = 1;
+    else if (pcu < 80 && rcu < 64)
+      ret = 2;
+    else if (pcu < 160 && rcu < 128)
+      ret = 3;
+    else if (pcu < 320 && rcu < 256)
+      ret = 4;
+  }
+
+  if (ret == -1) {
+    GST_WARNING ("couldn't determine level: profile=%u, rate=%u, "
+        "channel_config=%u, pcu=%d,rcu=%d", profile, rate, channel_config, pcu,
+        rcu);
+    return NULL;
+  } else {
+    return digit_to_string (ret);
+  }
+}
+
+/**
+ * gst_codec_utils_aac_caps_set_level_and_profile:
+ * @caps: the #GstCaps to which level and profile fields are to be added
+ * @audio_config: a pointer to the AudioSpecificConfig as specified in the
+ *                Elementary Stream Descriptor (esds) in ISO/IEC 14496-1 (see
+ *                below for a more details).
+ * @len: Length of @audio_config in bytes
+ *
+ * Sets the level and profile on @caps if it can be determined from
+ * @audio_config. See gst_codec_utils_aac_get_level() and
+ * gst_codec_utils_aac_get_profile() for more details on the parameters.
+ * @caps must be audio/mpeg caps with an "mpegversion" field of either 2 or 4.
+ * If mpegversion is 4, the "base-profile" field is also set in @caps.
+ *
+ * Returns: %TRUE if the level and profile could be set, %FALSE otherwise.
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_codec_utils_aac_caps_set_level_and_profile (GstCaps * caps,
+    const guint8 * audio_config, guint len)
+{
+  GstStructure *s;
+  const gchar *level, *profile;
+  int mpegversion = 0;
+
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), FALSE);
+  g_return_val_if_fail (GST_SIMPLE_CAPS_HAS_NAME (caps, "audio/mpeg"), FALSE);
+  g_return_val_if_fail (GST_SIMPLE_CAPS_HAS_FIELD (caps, "mpegversion"), FALSE);
+  g_return_val_if_fail (audio_config != NULL, FALSE);
+
+  s = gst_caps_get_structure (caps, 0);
+
+  gst_structure_get_int (s, "mpegversion", &mpegversion);
+  g_return_val_if_fail (mpegversion == 2 || mpegversion == 4, FALSE);
+
+  level = gst_codec_utils_aac_get_level (audio_config, len);
+
+  if (level != NULL)
+    gst_structure_set (s, "level", G_TYPE_STRING, level, NULL);
+
+  profile = gst_codec_utils_aac_get_profile (audio_config, len);
+
+  if (profile != NULL) {
+    if (mpegversion == 4) {
+      gst_structure_set (s, "base-profile", G_TYPE_STRING, profile,
+          "profile", G_TYPE_STRING, profile, NULL);
+    } else {
+      gst_structure_set (s, "profile", G_TYPE_STRING, profile, NULL);
+    }
+  }
+
+  GST_LOG ("profile : %s", (profile) ? profile : "---");
+  GST_LOG ("level   : %s", (level) ? level : "---");
+
+  return (level != NULL && profile != NULL);
+}
+
+/**
+ * gst_codec_utils_h264_get_profile:
+ * @sps: Pointer to the sequence parameter set for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Converts the profile indication (profile_idc) in the stream's
+ * sequence parameter set into a string. The SPS is expected to have the
+ * following format, as defined in the H.264 specification. The SPS is viewed
+ * as a bitstream here, with bit 0 being the most significant bit of the first
+ * byte.
+ *
+ * <itemizedlist>
+ * <listitem><para>Bit 0:7   - Profile indication</para></listitem>
+ * <listitem><para>Bit 8     - constraint_set0_flag</para></listitem>
+ * <listitem><para>Bit 9     - constraint_set1_flag</para></listitem>
+ * <listitem><para>Bit 10    - constraint_set2_flag</para></listitem>
+ * <listitem><para>Bit 11    - constraint_set3_flag</para></listitem>
+ * <listitem><para>Bit 12    - constraint_set3_flag</para></listitem>
+ * <listitem><para>Bit 13:15 - Reserved</para></listitem>
+ * <listitem><para>Bit 16:24 - Level indication</para></listitem>
+ * </itemizedlist>
+ *
+ * Returns: The profile as a const string, or %NULL if there is an error.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_h264_get_profile (const guint8 * sps, guint len)
+{
+  const gchar *profile = NULL;
+  gint csf1, csf3;
+
+  g_return_val_if_fail (sps != NULL, NULL);
+
+  if (len < 2)
+    return NULL;
+
+  GST_MEMDUMP ("SPS", sps, len);
+
+  csf1 = (sps[1] & 0x40) >> 6;
+  csf3 = (sps[1] & 0x10) >> 4;
+
+  switch (sps[0]) {
+    case 66:
+      if (csf1)
+        profile = "constrained-baseline";
+      else
+        profile = "baseline";
+      break;
+    case 77:
+      profile = "main";
+      break;
+    case 88:
+      profile = "extended";
+      break;
+    case 100:
+      profile = "high";
+      break;
+    case 110:
+      if (csf3)
+        profile = "high-10-intra";
+      else
+        profile = "high-10";
+      break;
+    case 122:
+      if (csf3)
+        profile = "high-4:2:2-intra";
+      else
+        profile = "high-4:2:2";
+      break;
+    case 244:
+      if (csf3)
+        profile = "high-4:4:4-intra";
+      else
+        profile = "high-4:4:4";
+      break;
+    case 44:
+      profile = "cavlc-4:4:4-intra";
+      break;
+    default:
+      return NULL;
+  }
+
+  return profile;
+}
+
+/**
+ * gst_codec_utils_h264_get_level:
+ * @sps: Pointer to the sequence parameter set for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Converts the level indication (level_idc) in the stream's
+ * sequence parameter set into a string. The SPS is expected to have the
+ * same format as for gst_codec_utils_h264_get_profile().
+ *
+ * Returns: The level as a const string, or %NULL if there is an error.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_h264_get_level (const guint8 * sps, guint len)
+{
+  gint csf3;
+
+  g_return_val_if_fail (sps != NULL, NULL);
+
+  if (len < 3)
+    return NULL;
+
+  GST_MEMDUMP ("SPS", sps, len);
+
+  csf3 = (sps[1] & 0x10) >> 4;
+
+  if (sps[2] == 11 && csf3)
+    return "1b";
+  else if (sps[2] % 10 == 0)
+    return digit_to_string (sps[2] / 10);
+  else {
+    switch (sps[2]) {
+      case 11:
+        return "1.1";
+      case 12:
+        return "1.2";
+      case 13:
+        return "1.3";
+      case 21:
+        return "2.1";
+      case 22:
+        return "2.2";
+      case 31:
+        return "3.1";
+      case 32:
+        return "3.2";
+      case 41:
+        return "4.1";
+      case 42:
+        return "4.2";
+      case 51:
+        return "5.1";
+      default:
+        return NULL;
+    }
+  }
+}
+
+/**
+ * gst_codec_utils_h264_get_level_idc:
+ * @level: A level string from caps
+ *
+ * Transform a level string from the caps into the level_idc
+ *
+ * Returns: the level_idc or 0 if the level is unknown
+ *
+ * Since: 0.10.36
+ */
+guint8
+gst_codec_utils_h264_get_level_idc (const gchar * level)
+{
+  g_return_val_if_fail (level != NULL, 0);
+
+  if (!strcmp (level, "1"))
+    return 10;
+  else if (!strcmp (level, "1b"))
+    return 9;
+  else if (!strcmp (level, "1.1"))
+    return 11;
+  else if (!strcmp (level, "1.2"))
+    return 12;
+  else if (!strcmp (level, "1.3"))
+    return 13;
+  else if (!strcmp (level, "2"))
+    return 20;
+  else if (!strcmp (level, "2.1"))
+    return 21;
+  else if (!strcmp (level, "2.2"))
+    return 22;
+  else if (!strcmp (level, "3"))
+    return 30;
+  else if (!strcmp (level, "3.1"))
+    return 31;
+  else if (!strcmp (level, "3.2"))
+    return 32;
+  else if (!strcmp (level, "4"))
+    return 40;
+  else if (!strcmp (level, "4.1"))
+    return 41;
+  else if (!strcmp (level, "4.2"))
+    return 42;
+  else if (!strcmp (level, "5"))
+    return 50;
+  else if (!strcmp (level, "5.1"))
+    return 51;
+
+  GST_WARNING ("Invalid level %s", level);
+  return 0;
+}
+
+/**
+ * gst_codec_utils_h264_caps_set_level_and_profile:
+ * @caps: the #GstCaps to which the level and profile are to be added
+ * @sps: Pointer to the sequence parameter set for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Sets the level and profile in @caps if it can be determined from @sps. See
+ * gst_codec_utils_h264_get_level() and gst_codec_utils_h264_get_profile()
+ * for more details on the parameters.
+ *
+ * Returns: %TRUE if the level and profile could be set, %FALSE otherwise.
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_codec_utils_h264_caps_set_level_and_profile (GstCaps * caps,
+    const guint8 * sps, guint len)
+{
+  const gchar *level, *profile;
+
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), FALSE);
+  g_return_val_if_fail (GST_SIMPLE_CAPS_HAS_NAME (caps, "video/x-h264"), FALSE);
+  g_return_val_if_fail (sps != NULL, FALSE);
+
+  level = gst_codec_utils_h264_get_level (sps, len);
+
+  if (level != NULL)
+    gst_caps_set_simple (caps, "level", G_TYPE_STRING, level, NULL);
+
+  profile = gst_codec_utils_h264_get_profile (sps, len);
+
+  if (profile != NULL)
+    gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile, NULL);
+
+  GST_LOG ("profile : %s", (profile) ? profile : "---");
+  GST_LOG ("level   : %s", (level) ? level : "---");
+
+  return (level != NULL && profile != NULL);
+}
+
+/**
+ * gst_codec_utils_mpeg4video_get_profile:
+ * @vis_obj_seq: Pointer to the visual object sequence for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Converts the profile indication in the stream's visual object sequence into
+ * a string. @vis_obj_seq is expected to be the data following the visual
+ * object sequence start code. Only the first byte
+ * (profile_and_level_indication) is used.
+ *
+ * Returns: The profile as a const string, or NULL if there is an error.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_mpeg4video_get_profile (const guint8 * vis_obj_seq, guint len)
+{
+  /* The profile/level codes are from 14496-2, table G-1, and the Wireshark
+   * sources: epan/dissectors/packet-mp4ves.c */
+
+  /* These are a direct mapping from the integer profile id -> string. Profiles
+   * 0x6, 0xe and 0xf can correspond to more than one profile depending on the
+   * second 4 bits of vis_obj_seq[0], so they are handled separately. */
+  static const char *profiles[] = { "simple", "simple-scalable", "core",
+    "main", "n-bit", "scalable", NULL, "basic-animated-texture", "hybrid",
+    "advanced-real-time-simple", "core-scalable", "advanced-coding-efficiency",
+    "advanced-core", "advanced-scalable-texture",
+  };
+  int profile_id, level_id;
+
+  g_return_val_if_fail (vis_obj_seq != NULL, NULL);
+
+  if (len < 1)
+    return NULL;
+
+  GST_MEMDUMP ("VOS", vis_obj_seq, len);
+
+  profile_id = vis_obj_seq[0] >> 4;
+  level_id = vis_obj_seq[0] & 0xf;
+
+  GST_LOG ("profile_id = %d, level_id = %d", profile_id, level_id);
+
+  if (profile_id != 6 && profile_id < 0xe)
+    return profiles[profile_id];
+
+  if (profile_id != 0xf && level_id == 0)
+    return NULL;
+
+  switch (profile_id) {
+    case 0x6:
+      if (level_id < 3)
+        return "simple-face";
+      else if (level_id < 5)
+        return "simple-fba";
+      break;
+
+    case 0xe:
+      if (level_id < 5)
+        return "simple-studio";
+      else if (level_id < 9)
+        return "core-studio";
+      break;
+
+    case 0xf:
+      if (level_id < 6)
+        return "advanced-simple";
+      else if (level_id > 7 && level_id < 0xe)
+        return "fine-granularity-scalable";
+      break;
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_codec_utils_mpeg4video_get_level:
+ * @vis_obj_seq: Pointer to the visual object sequence for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Converts the level indication in the stream's visual object sequence into
+ * a string. @vis_obj_seq is expected to be the data following the visual
+ * object sequence start code. Only the first byte
+ * (profile_and_level_indication) is used.
+ *
+ * Returns: The level as a const string, or NULL if there is an error.
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_codec_utils_mpeg4video_get_level (const guint8 * vis_obj_seq, guint len)
+{
+  /* The profile/level codes are from 14496-2, table G-1, the Wireshark
+   * sources: epan/dissectors/packet-mp4ves.c and the Xvid Sources:
+   * src/xvid.h.
+   * Levels 4a and 5 for SP were added in Amendment 2, level 6 in Amendment 4
+   * (see Xvid sources vfw/config.c)
+   *
+   * Each profile has a different maximum level it defines. Some of them still
+   * need special case handling, because not all levels start from 1, and the
+   * Simple profile defines an intermediate level as well. */
+  static const int level_max[] = { 6, 2, 2, 4, 2, 1, 2, 2, 2, 4, 3, 4, 2, 3, 4,
+    5
+  };
+  int profile_id, level_id;
+
+  g_return_val_if_fail (vis_obj_seq != NULL, NULL);
+
+  if (len < 1)
+    return NULL;
+
+  GST_MEMDUMP ("VOS", vis_obj_seq, len);
+
+  profile_id = vis_obj_seq[0] >> 4;
+  level_id = vis_obj_seq[0] & 0xf;
+
+  GST_LOG ("profile_id = %d, level_id = %d", profile_id, level_id);
+
+  if (profile_id != 0xf && level_id == 0)
+    return NULL;
+
+  /* Let's do some validation of the level */
+  switch (profile_id) {
+    case 0x3:
+      if (level_id == 1)
+        return NULL;
+      break;
+
+    case 0x4:
+      if (level_id != 2)
+        return NULL;
+      break;
+
+    case 0x6:
+      if (level_id > 5)
+        return NULL;
+      break;
+
+    case 0xe:
+      if (level_id > 9)
+        return NULL;
+      break;
+
+    case 0xf:
+      if (level_id == 6 || level_id == 7 || level_id > 0xd)
+        return NULL;
+      break;
+  }
+
+  if (profile_id == 0 && level_id == 8)
+    /* Simple Profile / Level 0 */
+    return "0";
+  else if (profile_id == 0 && level_id == 9)
+    /* Simple Profile / Level 0b */
+    return "0b";
+  else if (profile_id == 0 && level_id == 4)
+    /* Simple Profile / Level 4a */
+    return "4a";
+  else if (profile_id == 0xf && level_id > 7)
+    /* Fine Granularity Scalable Profile */
+    return digit_to_string (level_id - 8);
+  else if (level_id <= level_max[profile_id])
+    /* Levels for all other cases */
+    return digit_to_string (level_id);
+
+  return NULL;
+}
+
+/**
+ * gst_codec_utils_mpeg4video_caps_set_level_and_profile:
+ * @caps: the #GstCaps to which the level and profile are to be added
+ * @vis_obj_seq: Pointer to the visual object sequence for the stream.
+ * @len: Length of the data available in @sps.
+ *
+ * Sets the level and profile in @caps if it can be determined from
+ * @vis_obj_seq. See gst_codec_utils_mpeg4video_get_level() and
+ * gst_codec_utils_mpeg4video_get_profile() for more details on the
+ * parameters.
+ *
+ * Returns: %TRUE if the level and profile could be set, %FALSE otherwise.
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_codec_utils_mpeg4video_caps_set_level_and_profile (GstCaps * caps,
+    const guint8 * vis_obj_seq, guint len)
+{
+  const gchar *profile, *level;
+
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), FALSE);
+  g_return_val_if_fail (vis_obj_seq != NULL, FALSE);
+
+  profile = gst_codec_utils_mpeg4video_get_profile (vis_obj_seq, len);
+
+  if (profile != NULL)
+    gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile, NULL);
+
+  level = gst_codec_utils_mpeg4video_get_level (vis_obj_seq, len);
+
+  if (level != NULL)
+    gst_caps_set_simple (caps, "level", G_TYPE_STRING, level, NULL);
+
+  GST_LOG ("profile : %s", (profile) ? profile : "---");
+  GST_LOG ("level   : %s", (level) ? level : "---");
+
+  return (profile != NULL && level != NULL);
+}
diff --git a/gst-libs/gst/pbutils/codec-utils.h b/gst-libs/gst/pbutils/codec-utils.h
new file mode 100644
index 0000000..7c2febf
--- /dev/null
+++ b/gst-libs/gst/pbutils/codec-utils.h
@@ -0,0 +1,65 @@
+/* GStreamer base utils library codec-specific utility functions
+ * Copyright (C) 2010 Arun Raghavan <arun.raghavan@collabora.co.uk>
+ *               2010 Collabora Multimedia
+ *               2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PB_UTILS_CODEC_UTILS_H__
+#define __GST_PB_UTILS_CODEC_UTILS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* AAC */
+
+guint         gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx);
+
+const gchar * gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len);
+
+const gchar * gst_codec_utils_aac_get_level   (const guint8 * audio_config, guint len);
+
+gboolean      gst_codec_utils_aac_caps_set_level_and_profile (GstCaps      * caps,
+                                                              const guint8 * audio_config,
+                                                              guint          len);
+
+/* H.264 */
+
+const gchar * gst_codec_utils_h264_get_profile (const guint8 * sps, guint len);
+
+const gchar * gst_codec_utils_h264_get_level   (const guint8 * sps, guint len);
+
+guint8        gst_codec_utils_h264_get_level_idc (const gchar * level);
+
+gboolean      gst_codec_utils_h264_caps_set_level_and_profile (GstCaps      * caps,
+                                                               const guint8 * sps,
+                                                               guint          len);
+
+/* MPEG-4 part 2 */
+
+const gchar * gst_codec_utils_mpeg4video_get_profile (const guint8 * vis_obj_seq, guint len);
+
+const gchar * gst_codec_utils_mpeg4video_get_level   (const guint8 * vis_obj_seq, guint len);
+
+gboolean      gst_codec_utils_mpeg4video_caps_set_level_and_profile (GstCaps      * caps,
+                                                                     const guint8 * vis_obj_seq,
+                                                                     guint          len);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_CODEC_UTILS_H__ */
diff --git a/gst-libs/gst/pbutils/descriptions.c b/gst-libs/gst/pbutils/descriptions.c
new file mode 100644
index 0000000..69cb742
--- /dev/null
+++ b/gst-libs/gst/pbutils/descriptions.c
@@ -0,0 +1,1011 @@
+/* GStreamer Plugins Base utils library source/sink/codec description support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpbutilsdescriptions
+ * @short_description: Provides human-readable descriptions for caps/codecs
+ * and encoder, decoder, URI source and URI sink elements
+ *
+ * <refsect2>
+ * <para>
+ * The above functions provide human-readable strings for media formats
+ * and decoder/demuxer/depayloader/encoder/muxer/payloader elements for use
+ * in error dialogs or other messages shown to users.
+ * </para>
+ * <para>
+ * gst_pb_utils_add_codec_description_to_tag_list() is a utility function
+ * for demuxer and decoder elements to add audio/video codec tags from a
+ * given (fixed) #GstCaps.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "gst/gst-i18n-plugin.h"
+
+#include <gst/audio/audio.h>
+#include <gst/video/video.h>
+
+#include "pbutils.h"
+#include "pbutils-private.h"
+
+#include <string.h>
+
+typedef enum
+{
+  FLAG_CONTAINER = (1 << 0),    /* format is a container format (muxed)             */
+  FLAG_SYSTEMSTREAM = (1 << 1)  /* match record only if caps have systemstream=true */
+} FormatFlags;
+
+typedef struct
+{
+  const gchar *type;
+  const gchar *desc;
+  FormatFlags flags;
+} FormatInfo;
+
+static const FormatInfo formats[] = {
+  /* container/tag formats with static descriptions */
+  {"application/gxf", "General Exchange Format (GXF)", FLAG_CONTAINER},
+  {"application/ogg", "Ogg", FLAG_CONTAINER},
+  {"application/mxf", "Material eXchange Format (MXF)", FLAG_CONTAINER},
+  {"application/vnd.rn-realmedia", "Realmedia", FLAG_CONTAINER},
+  {"application/x-annodex", "Ogg", FLAG_CONTAINER},
+  {"application/x-id3", N_("ID3 tag"), FLAG_CONTAINER},
+  {"application/x-ape", N_("APE tag"), FLAG_CONTAINER},
+  {"application/x-apetag", N_("APE tag"), FLAG_CONTAINER},
+  {"application/x-icy", N_("ICY internet radio"), FLAG_CONTAINER},
+  {"application/x-3gp", "3GP", FLAG_CONTAINER},
+  {"application/x-pn-realaudio", "RealAudio", FLAG_CONTAINER},
+  {"application/x-yuv4mpeg", "Y4M", FLAG_CONTAINER},
+  {"multipart/x-mixed-replace", "Multipart", FLAG_CONTAINER},
+  {"video/x-fli", "FLI/FLC/FLX Animation", FLAG_CONTAINER},
+  {"video/x-flv", "Flash", FLAG_CONTAINER},
+  {"video/x-matroska", "Matroska", FLAG_CONTAINER},
+  {"video/webm", "WebM", FLAG_CONTAINER},
+  {"video/x-ms-asf", "Advanced Streaming Format (ASF)", FLAG_CONTAINER},
+  {"video/x-msvideo", "Audio Video Interleave (AVI)", FLAG_CONTAINER},
+  {"video/x-quicktime", "Quicktime", FLAG_CONTAINER},
+  {"video/quicktime", "Quicktime", FLAG_CONTAINER},
+  {"video/mj2", "Motion JPEG 2000", FLAG_CONTAINER},
+
+  /* audio formats with static descriptions */
+  {"audio/x-ac3", "AC-3 (ATSC A/52)", 0},
+  {"audio/ac3", "AC-3 (ATSC A/52)", 0},
+  {"audio/x-private-ac3", "DVD AC-3 (ATSC A/52)", 0},
+  {"audio/x-private1-ac3", "DVD AC-3 (ATSC A/52)", 0},
+  {"audio/x-alaw", "A-Law", 0},
+  {"audio/amr", "Adaptive Multi Rate (AMR)", 0},
+  {"audio/AMR", "Adaptive Multi Rate (AMR)", 0},
+  {"audio/AMR-WB", "Adaptive Multi Rate WideBand (AMR-WB)", 0},
+  {"audio/iLBC-sh", "Internet Low Bitrate Codec (iLBC)", 0},
+  {"audio/ms-gsm", "MS GSM", 0},
+  {"audio/qcelp", "QCELP", 0},
+  {"audio/aiff", "Audio Interchange File Format (AIFF)", 0},
+  {"audio/x-aiff", "Audio Interchange File Format (AIFF)", 0},
+  {"audio/x-alac", N_("Apple Lossless Audio (ALAC)"), 0},
+  {"audio/x-amr-nb-sh", "Adaptive Multi Rate NarrowBand (AMR-NB)", 0},
+  {"audio/x-amr-wb-sh", "Adaptive Multi Rate WideBand (AMR-WB)", 0},
+  {"audio/x-au", "Sun .au", 0},
+  {"audio/x-celt", "Constrained Energy Lapped Transform (CELT)", 0},
+  {"audio/x-cinepak", "Cinepak Audio", 0},
+  {"audio/x-dpcm", "DPCM", 0},
+  {"audio/x-dts", "DTS", 0},
+  {"audio/x-private1-dts", "DTS", 0},
+  {"audio/x-dv", "DV Audio", 0},
+  {"audio/x-flac", N_("Free Lossless Audio Codec (FLAC)"), 0},
+  {"audio/x-gsm", "GSM", 0},
+  {"audio/x-iec958", "S/PDIF IEC958", 0},       /* TODO: check description */
+  {"audio/x-iLBC", "Internet Low Bitrate Codec (iLBC)", 0},
+  {"audio/x-ircam", "Berkeley/IRCAM/CARL", 0},
+  {"audio/x-lpcm", "LPCM", 0},
+  {"audio/x-private1-lpcm", "DVD LPCM", 0},
+  {"audio/x-m4a", "MPEG-4 AAC", FLAG_CONTAINER},
+  {"audio/x-mod", "Module Music Format (MOD)", 0},
+  {"audio/x-mulaw", "Mu-Law", 0},
+  {"audio/x-musepack", "Musepack (MPC)", 0},
+  {"audio/x-nellymoser", "Nellymoser Asao", 0},
+  {"audio/x-nist", "Sphere NIST", 0},
+  {"audio/x-nsf", "Nintendo NSF", 0},
+  {"audio/x-paris", "Ensoniq PARIS", 0},
+  {"audio/x-qdm", "QDesign Music (QDM)", 0},
+  {"audio/x-qdm2", "QDesign Music (QDM) 2", 0},
+  {"audio/x-ralf-mpeg4-generic", "Real Audio Lossless (RALF)", 0},
+  {"audio/x-sds", "SDS", 0},
+  {"audio/x-shorten", "Shorten Lossless", 0},
+  {"audio/x-sid", "Sid", 0},
+  {"audio/x-sipro", "Sipro/ACELP.NET Voice", 0},
+  {"audio/x-siren", "Siren", 0},
+  {"audio/x-spc", "SNES-SPC700 Sound File Data", 0},
+  {"audio/x-speex", "Speex", 0},
+  {"audio/x-svx", "Amiga IFF / SVX8 / SV16", 0},
+  {"audio/x-tta", N_("Lossless True Audio (TTA)"), 0},
+  {"audio/x-ttafile", N_("Lossless True Audio (TTA)"), 0},
+  {"audio/x-vnd.sony.atrac3", "Sony ATRAC3", 0},
+  {"audio/x-vorbis", "Vorbis", 0},
+  {"audio/x-voc", "SoundBlaster VOC", 0},
+  {"audio/x-w64", "Sonic Foundry Wave64", 0},
+  {"audio/x-wav", "WAV", 0},
+  {"audio/x-wavpack", "Wavpack", 0},
+  {"audio/x-wavpack-correction", "Wavpack", 0},
+  {"audio/x-wms", N_("Windows Media Speech"), 0},
+  {"audio/x-voxware", "Voxware", 0},
+
+
+  /* video formats with static descriptions */
+  {"video/sp5x", "Sunplus JPEG 5.x", 0},
+  {"video/vivo", "Vivo", 0},
+  {"video/x-3ivx", "3ivx", 0},
+  {"video/x-4xm", "4X Techologies Video", 0},
+  {"video/x-apple-video", "Apple video", 0},
+  {"video/x-aasc", "Autodesk Animator", 0},
+  {"video/x-camtasia", "TechSmith Camtasia", 0},
+  {"video/x-cdxa", "RIFF/CDXA (VCD)", 0},
+  {"video/x-cinepak", "Cinepak Video", 0},
+  {"video/x-cirrus-logic-accupak", "Cirrus Logipak AccuPak", 0},
+  {"video/x-compressed-yuv", N_("CYUV Lossless"), 0},
+  {"video/x-dirac", "Dirac", 0},
+  {"video/x-dnxhd", "Digital Nonlinear Extensible High Definition (DNxHD)", 0},
+  /* FIXME 0.11: rename to subpicture/x-dvd or so */
+  {"video/x-dvd-subpicture", "DVD subpicture", 0},
+  {"video/x-ffv", N_("FFMpeg v1"), 0},
+  {"video/x-flash-screen", "Flash Screen Video", 0},
+  {"video/x-flash-video", "Sorenson Spark Video", 0},
+  {"video/x-h261", "H.261", 0},
+  {"video/x-huffyuv", "Huffyuv", 0},
+  {"video/x-intel-h263", "Intel H.263", 0},
+  {"video/x-jpeg", "Motion JPEG", 0},
+  /* { "video/x-jpeg-b", "", 0 }, does this actually exist? */
+  {"video/x-loco", "LOCO Lossless", 0},
+  {"video/x-mimic", "MIMIC", 0},
+  {"video/x-mjpeg", "Motion-JPEG", 0},
+  {"video/x-mjpeg-b", "Motion-JPEG format B", 0},
+  {"video/mpegts", "MPEG-2 Transport Stream", FLAG_CONTAINER},
+  {"video/x-mng", "Multiple Image Network Graphics (MNG)", 0},
+  {"video/x-mszh", N_("Lossless MSZH"), 0},
+  {"video/x-msvideocodec", "Microsoft Video 1", 0},
+  {"video/x-mve", "Interplay MVE", FLAG_CONTAINER},
+  {"video/x-nut", "NUT", FLAG_CONTAINER},
+  {"video/x-nuv", "MythTV NuppelVideo (NUV)", FLAG_CONTAINER},
+  {"video/x-qdrw", "Apple QuickDraw", 0},
+  {"video/x-smc", "Apple SMC", 0},
+  {"video/x-smoke", "Smoke", 0},
+  {"video/x-tarkin", "Tarkin", 0},
+  {"video/x-theora", "Theora", 0},
+  {"video/x-rle", N_("Run-length encoding"), 0},
+  {"video/x-ultimotion", "IBM UltiMotion", 0},
+  {"video/x-vcd", "VideoCD (VCD)", 0},
+  {"video/x-vmnc", "VMWare NC", 0},
+  {"video/x-vp3", "On2 VP3", 0},
+  {"video/x-vp5", "On2 VP5", 0},
+  {"video/x-vp6", "On2 VP6", 0},
+  {"video/x-vp6-flash", "On2 VP6/Flash", 0},
+  {"video/x-vp6-alpha", "On2 VP6 with alpha", 0},
+  {"video/x-vp7", "On2 VP7", 0},
+  {"video/x-vp8", "VP8", 0},
+  {"video/x-xvid", "XVID MPEG-4", 0},
+  {"video/x-zlib", "Lossless zlib video", 0},
+  {"video/x-zmbv", "Zip Motion Block video", 0},
+
+  /* image formats with static descriptions */
+  {"image/bmp", "BMP", 0},
+  {"image/x-bmp", "BMP", 0},
+  {"image/x-MS-bmp", "BMP", 0},
+  {"image/gif", "GIF", 0},
+  {"image/jpeg", "JPEG", 0},
+  {"image/jng", "JPEG Network Graphics (JNG)", 0},
+  {"image/png", "PNG", 0},
+  {"image/pbm", "Portable BitMap (PBM)", 0},
+  {"image/ppm", "Portable PixMap (PPM)", 0},
+  {"image/svg+xml", "Scalable Vector Graphics (SVG)", 0},
+  {"image/tiff", "TIFF", 0},
+  {"image/x-cmu-raster", "CMU Raster Format", 0},
+  {"image/x-degas", "DEGAS", 0},
+  {"image/x-icon", "ICO", 0},
+  {"image/x-j2c", "JPEG 2000", 0},
+  {"image/x-jpc", "JPEG 2000", 0},
+  {"image/jp2", "JPEG 2000", 0},
+  {"image/x-pcx", "PCX", 0},
+  {"image/x-xcf", "XFC", 0},
+  {"image/x-pixmap", "XPM", 0},
+  {"image/x-portable-anymap", "Portable AnyMap (PAM)", 0},
+  {"image/x-portable-graymap", "Portable GrayMap (PGM)", 0},
+  {"image/x-xpixmap", "XPM", 0},
+  {"image/x-quicktime", "QuickTime Image Format (QTIF)", 0},
+  {"image/x-sun-raster", "Sun Raster Format (RAS)", 0},
+  {"image/x-tga", "TGA", 0},
+  {"image/vnd.wap.wbmp", "Wireless Bitmap", 0},
+
+  /* subtitle formats with static descriptions */
+  {"application/x-ass", "ASS", 0},
+  {"application/x-subtitle-sami", N_("Sami subtitle format"), 0},
+  {"application/x-subtitle-tmplayer", N_("TMPlayer subtitle format"), 0},
+  {"application/x-kate", "Kate", 0},
+  {"subtitle/x-kate", N_("Kate subtitle format"), 0},
+  {"subpicture/x-dvb", "DVB subtitles", 0},
+  /* add variant field to typefinder? { "application/x-subtitle", N_("subtitle"), 0}, */
+
+  /* non-audio/video/container formats */
+  {"hdv/aux-v", "HDV AUX-V", 0},
+  {"hdv/aux-a", "HDV AUX-A", 0},
+
+  /* formats with dynamic descriptions */
+  {"audio/mpeg", NULL, 0},
+  {"audio/x-adpcm", NULL, 0},
+  {"audio/x-mace", NULL, 0},
+  {"audio/x-pn-realaudio", NULL, 0},
+  {"audio/x-raw", NULL, 0},
+  {"audio/x-wma", NULL, 0},
+  {"video/mpeg", NULL, FLAG_CONTAINER | FLAG_SYSTEMSTREAM},
+  {"video/mpeg", NULL, 0},
+  {"video/x-asus", NULL, 0},
+  {"video/x-ati-vcr", NULL, 0},
+  {"video/x-divx", NULL, 0},
+  {"video/x-dv", "Digital Video (DV) System Stream",
+      FLAG_CONTAINER | FLAG_SYSTEMSTREAM},
+  {"video/x-dv", "Digital Video (DV)", 0},
+  {"video/x-h263", NULL, 0},
+  {"video/x-h264", NULL, 0},
+  {"video/x-indeo", NULL, 0},
+  {"video/x-msmpeg", NULL, 0},
+  {"video/x-pn-realvideo", NULL, 0},
+#if 0
+  /* do these exist? are they used anywhere? */
+  {"video/x-pn-multirate-realvideo", NULL, 0},
+  {"audio/x-pn-multirate-realaudio", NULL, 0},
+  {"audio/x-pn-multirate-realaudio-live", NULL, 0},
+#endif
+  {"video/x-truemotion", NULL, 0},
+  {"video/x-raw", NULL, 0},
+  {"video/x-svq", NULL, 0},
+  {"video/x-wmv", NULL, 0},
+  {"video/x-xan", NULL, 0}
+};
+
+/* returns static descriptions and dynamic ones (such as video/x-raw),
+ * or NULL if caps aren't known at all */
+static gchar *
+format_info_get_desc (const FormatInfo * info, const GstCaps * caps)
+{
+  const GstStructure *s;
+
+  g_assert (info != NULL);
+
+  if (info->desc != NULL)
+    return g_strdup (_(info->desc));
+
+  s = gst_caps_get_structure (caps, 0);
+
+  if (strcmp (info->type, "video/x-raw") == 0) {
+    gchar *ret = NULL;
+    const gchar *str = 0;
+    GstVideoFormat format;
+    const GstVideoFormatInfo *finfo;
+
+    str = gst_structure_get_string (s, "format");
+    format = gst_video_format_from_string (str);
+    if (format == GST_VIDEO_FORMAT_UNKNOWN)
+      return g_strdup (_("Uncompressed video"));
+
+    finfo = gst_video_format_get_info (format);
+
+    if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) {
+      ret = g_strdup (_("Uncompressed gray"));
+    } else if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) {
+      const gchar *layout;
+      const gchar *subs;
+      gint w_sub, h_sub;
+
+      w_sub = GST_VIDEO_FORMAT_INFO_W_SUB (finfo, 1);
+      h_sub = GST_VIDEO_FORMAT_INFO_H_SUB (finfo, 1);
+
+      if (GST_VIDEO_FORMAT_INFO_N_PLANES (finfo) == 1) {
+        layout = "planar";
+      } else {
+        layout = "packed";
+      }
+
+      if (w_sub == 1 && h_sub == 1) {
+        subs = "4:4:4";
+      } else if (w_sub == 2 && h_sub == 1) {
+        subs = "4:2:2";
+      } else if (w_sub == 2 && h_sub == 2) {
+        subs = "4:2:0";
+      } else if (w_sub == 4 && h_sub == 1) {
+        subs = "4:1:1";
+      } else {
+        subs = "";
+      }
+      ret = g_strdup_printf (_("Uncompressed %s YUV %s"), layout, subs);
+    } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) {
+      gboolean alpha, palette;
+      gint bits;
+
+      alpha = GST_VIDEO_FORMAT_INFO_HAS_ALPHA (finfo);
+      palette = GST_VIDEO_FORMAT_INFO_HAS_PALETTE (finfo);
+      bits = GST_VIDEO_FORMAT_INFO_BITS (finfo);
+
+      ret = g_strdup_printf (_("Uncompressed %s%d-bit %s"),
+          palette ? "palettized " : "", bits, alpha ? "RGBA" : "RGB");
+    } else {
+      ret = g_strdup (_("Uncompressed video"));
+    }
+    return ret;
+  } else if (strcmp (info->type, "video/x-h263") == 0) {
+    const gchar *variant, *ret;
+
+    variant = gst_structure_get_string (s, "variant");
+    if (variant == NULL)
+      ret = "H.263";
+    else if (strcmp (variant, "itu") == 0)
+      ret = "ITU H.26n";        /* why not ITU H.263? (tpm) */
+    else if (strcmp (variant, "lead") == 0)
+      ret = "Lead H.263";
+    else if (strcmp (variant, "microsoft") == 0)
+      ret = "Microsoft H.263";
+    else if (strcmp (variant, "vdolive") == 0)
+      ret = "VDOLive";
+    else if (strcmp (variant, "vivo") == 0)
+      ret = "Vivo H.263";
+    else if (strcmp (variant, "xirlink") == 0)
+      ret = "Xirlink H.263";
+    else {
+      GST_WARNING ("Unknown H263 variant '%s'", variant);
+      ret = "H.263";
+    }
+    return g_strdup (ret);
+  } else if (strcmp (info->type, "video/x-h264") == 0) {
+    const gchar *variant, *ret;
+
+    variant = gst_structure_get_string (s, "variant");
+    if (variant == NULL)
+      ret = "H.264";
+    else if (strcmp (variant, "itu") == 0)
+      ret = "ITU H.264";
+    else if (strcmp (variant, "videosoft") == 0)
+      ret = "Videosoft H.264";
+    else if (strcmp (variant, "lead") == 0)
+      ret = "Lead H.264";
+    else {
+      GST_WARNING ("Unknown H264 variant '%s'", variant);
+      ret = "H.264";
+    }
+    return g_strdup (ret);
+  } else if (strcmp (info->type, "video/x-divx") == 0) {
+    gint ver = 0;
+
+    if (!gst_structure_get_int (s, "divxversion", &ver) || ver <= 2) {
+      GST_WARNING ("Unexpected DivX version in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("DivX MPEG-4");
+    }
+    return g_strdup_printf (_("DivX MPEG-4 Version %d"), ver);
+  } else if (strcmp (info->type, "video/x-msmpeg") == 0) {
+    gint ver = 0;
+
+    if (!gst_structure_get_int (s, "msmpegversion", &ver) ||
+        ver < 40 || ver > 49) {
+      GST_WARNING ("Unexpected msmpegversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("Microsoft MPEG-4 4.x");
+    }
+    return g_strdup_printf ("Microsoft MPEG-4 4.%d", ver % 10);
+  } else if (strcmp (info->type, "video/x-truemotion") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "trueversion", &ver);
+    switch (ver) {
+      case 1:
+        return g_strdup_printf ("Duck TrueMotion 1");
+      case 2:
+        return g_strdup_printf ("TrueMotion 2.0");
+      default:
+        GST_WARNING ("Unexpected trueversion in %" GST_PTR_FORMAT, caps);
+        break;
+    }
+    return g_strdup_printf ("TrueMotion");
+  } else if (strcmp (info->type, "video/x-xan") == 0) {
+    gint ver = 0;
+
+    if (!gst_structure_get_int (s, "wcversion", &ver) || ver < 1) {
+      GST_WARNING ("Unexpected wcversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("Xan Wing Commander");
+    }
+    return g_strdup_printf ("Xan Wing Commander %u", ver);
+  } else if (strcmp (info->type, "video/x-indeo") == 0) {
+    gint ver = 0;
+
+    if (!gst_structure_get_int (s, "indeoversion", &ver) || ver < 2) {
+      GST_WARNING ("Unexpected indeoversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("Intel Indeo");
+    }
+    return g_strdup_printf ("Intel Indeo %u", ver);
+  } else if (strcmp (info->type, "audio/x-wma") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "wmaversion", &ver);
+    switch (ver) {
+      case 1:
+      case 2:
+      case 3:
+        return g_strdup_printf ("Windows Media Audio %d", ver + 6);
+      default:
+        break;
+    }
+    GST_WARNING ("Unexpected wmaversion in %" GST_PTR_FORMAT, caps);
+    return g_strdup ("Windows Media Audio");
+  } else if (strcmp (info->type, "video/x-wmv") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "wmvversion", &ver);
+    switch (ver) {
+      case 1:
+      case 2:
+      case 3:
+        return g_strdup_printf ("Windows Media Video %d", ver + 6);
+      default:
+        break;
+    }
+    GST_WARNING ("Unexpected wmvversion in %" GST_PTR_FORMAT, caps);
+    return g_strdup ("Windows Media Video");
+  } else if (strcmp (info->type, "audio/x-mace") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "maceversion", &ver);
+    if (ver == 3 || ver == 6) {
+      return g_strdup_printf ("MACE-%d", ver);
+    } else {
+      GST_WARNING ("Unexpected maceversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("MACE");
+    }
+  } else if (strcmp (info->type, "video/x-svq") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "svqversion", &ver);
+    if (ver == 1 || ver == 3) {
+      return g_strdup_printf ("Sorensen Video %d", ver);
+    } else {
+      GST_WARNING ("Unexpected svqversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("Sorensen Video");
+    }
+  } else if (strcmp (info->type, "video/x-asus") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "asusversion", &ver);
+    if (ver == 1 || ver == 2) {
+      return g_strdup_printf ("Asus Video %d", ver);
+    } else {
+      GST_WARNING ("Unexpected asusversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("Asus Video");
+    }
+  } else if (strcmp (info->type, "video/x-ati-vcr") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "vcrversion", &ver);
+    if (ver == 1 || ver == 2) {
+      return g_strdup_printf ("ATI VCR %d", ver);
+    } else {
+      GST_WARNING ("Unexpected acrversion in %" GST_PTR_FORMAT, caps);
+      return g_strdup ("ATI VCR");
+    }
+  } else if (strcmp (info->type, "audio/x-adpcm") == 0) {
+    const GValue *layout_val;
+
+    layout_val = gst_structure_get_value (s, "layout");
+    if (layout_val != NULL && G_VALUE_HOLDS_STRING (layout_val)) {
+      const gchar *layout;
+
+      if ((layout = g_value_get_string (layout_val))) {
+        gchar *layout_upper, *ret;
+
+        if (strcmp (layout, "swf") == 0)
+          return g_strdup ("Shockwave ADPCM");
+        if (strcmp (layout, "microsoft") == 0)
+          return g_strdup ("Microsoft ADPCM");
+        if (strcmp (layout, "quicktime") == 0)
+          return g_strdup ("Quicktime ADPCM");
+        if (strcmp (layout, "westwood") == 0)
+          return g_strdup ("Westwood ADPCM");
+        if (strcmp (layout, "yamaha") == 0)
+          return g_strdup ("Yamaha ADPCM");
+        /* FIXME: other layouts: sbpro2, sbpro3, sbpro4, ct, g726, ea,
+         * adx, xa, 4xm, smjpeg, dk4, dk3, dvi */
+        layout_upper = g_ascii_strup (layout, -1);
+        ret = g_strdup_printf ("%s ADPCM", layout_upper);
+        g_free (layout_upper);
+        return ret;
+      }
+    }
+    return g_strdup ("ADPCM");
+  } else if (strcmp (info->type, "audio/mpeg") == 0) {
+    gint ver = 0, layer = 0;
+
+    gst_structure_get_int (s, "mpegversion", &ver);
+
+    switch (ver) {
+      case 1:
+        gst_structure_get_int (s, "layer", &layer);
+        switch (layer) {
+          case 1:
+          case 2:
+          case 3:
+            return g_strdup_printf ("MPEG-1 Layer %d (MP%d)", layer, layer);
+          default:
+            break;
+        }
+        GST_WARNING ("Unexpected MPEG-1 layer in %" GST_PTR_FORMAT, caps);
+        return g_strdup ("MPEG-1 Audio");
+      case 4:
+        return g_strdup ("MPEG-4 AAC");
+      default:
+        break;
+    }
+    GST_WARNING ("Unexpected audio mpegversion in %" GST_PTR_FORMAT, caps);
+    return g_strdup ("MPEG Audio");
+  } else if (strcmp (info->type, "audio/x-pn-realaudio") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "raversion", &ver);
+    switch (ver) {
+      case 1:
+        return g_strdup ("RealAudio 14k4bps");
+      case 2:
+        return g_strdup ("RealAudio 28k8bps");
+      case 8:
+        return g_strdup ("RealAudio G2 (Cook)");
+      default:
+        break;
+    }
+    GST_WARNING ("Unexpected raversion in %" GST_PTR_FORMAT, caps);
+    return g_strdup ("RealAudio");
+  } else if (strcmp (info->type, "video/x-pn-realvideo") == 0) {
+    gint ver = 0;
+
+    gst_structure_get_int (s, "rmversion", &ver);
+    switch (ver) {
+      case 1:
+        return g_strdup ("RealVideo 1.0");
+      case 2:
+        return g_strdup ("RealVideo 2.0");
+      case 3:
+        return g_strdup ("RealVideo 3.0");
+      case 4:
+        return g_strdup ("RealVideo 4.0");
+      default:
+        break;
+    }
+    GST_WARNING ("Unexpected rmversion in %" GST_PTR_FORMAT, caps);
+    return g_strdup ("RealVideo");
+  } else if (strcmp (info->type, "video/mpeg") == 0) {
+    gboolean sysstream;
+    gint ver = 0;
+
+    if (!gst_structure_get_boolean (s, "systemstream", &sysstream) ||
+        !gst_structure_get_int (s, "mpegversion", &ver) || ver < 1 || ver > 4) {
+      GST_WARNING ("Missing fields in mpeg video caps %" GST_PTR_FORMAT, caps);
+    } else {
+      if (sysstream) {
+        return g_strdup_printf ("MPEG-%d System Stream", ver);
+      } else {
+        return g_strdup_printf ("MPEG-%d Video", ver);
+      }
+    }
+    return g_strdup ("MPEG Video");
+  } else if (strcmp (info->type, "audio/x-raw") == 0) {
+    gint depth = 0;
+    gboolean is_float;
+    const gchar *str;
+    GstAudioFormat format;
+    const GstAudioFormatInfo *finfo;
+
+    str = gst_structure_get_string (s, "format");
+    format = gst_audio_format_from_string (str);
+    if (format == GST_AUDIO_FORMAT_UNKNOWN)
+      return g_strdup (_("Uncompressed audio"));
+
+    finfo = gst_audio_format_get_info (format);
+    depth = GST_AUDIO_FORMAT_INFO_DEPTH (finfo);
+    is_float = GST_AUDIO_FORMAT_INFO_IS_FLOAT (finfo);
+
+    return g_strdup_printf (_("Raw %d-bit %s audio"), depth,
+        is_float ? "floating-point" : "PCM");
+  }
+  return NULL;
+}
+
+/* returns format info structure, will return NULL for dynamic media types! */
+static const FormatInfo *
+find_format_info (const GstCaps * caps)
+{
+  const GstStructure *s;
+  const gchar *media_type;
+  guint i;
+
+  s = gst_caps_get_structure (caps, 0);
+  media_type = gst_structure_get_name (s);
+
+  for (i = 0; i < G_N_ELEMENTS (formats); ++i) {
+    if (strcmp (media_type, formats[i].type) == 0) {
+      gboolean is_sys = FALSE;
+
+      if ((formats[i].flags & FLAG_SYSTEMSTREAM) == 0)
+        return &formats[i];
+
+      /* this record should only be matched if the systemstream field is set */
+      if (gst_structure_get_boolean (s, "systemstream", &is_sys) && is_sys)
+        return &formats[i];
+    }
+  }
+
+  return NULL;
+}
+
+static gboolean
+caps_are_rtp_caps (const GstCaps * caps, const gchar * media, gchar ** format)
+{
+  const GstStructure *s;
+  const gchar *str;
+
+  g_assert (media != NULL && format != NULL);
+
+  s = gst_caps_get_structure (caps, 0);
+  if (!gst_structure_has_name (s, "application/x-rtp"))
+    return FALSE;
+  if (!gst_structure_has_field_typed (s, "media", G_TYPE_STRING))
+    return FALSE;
+  str = gst_structure_get_string (s, "media");
+  if (str == NULL || !g_str_equal (str, media))
+    return FALSE;
+  str = gst_structure_get_string (s, "encoding-name");
+  if (str == NULL || *str == '\0')
+    return FALSE;
+
+  if (strcmp (str, "X-ASF-PF") == 0) {
+    *format = g_strdup ("Windows Media");
+  } else if (g_str_has_prefix (str, "X-")) {
+    *format = g_strdup (str + 2);
+  } else {
+    *format = g_strdup (str);
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_pb_utils_get_source_description:
+ * @protocol: the protocol the source element needs to handle, e.g. "http"
+ *
+ * Returns a localised string describing a source element handling the protocol
+ * specified in @protocol, for use in error dialogs or other messages to be
+ * seen by the user. Should never return NULL unless @protocol is invalid.
+ *
+ * This function is mainly for internal use, applications would typically
+ * use gst_missing_plugin_message_get_description() to get a description of
+ * a missing feature from a missing-plugin message.
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_source_description (const gchar * protocol)
+{
+  gchar *proto_uc, *ret;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  if (strcmp (protocol, "cdda") == 0)
+    return g_strdup (_("Audio CD source"));
+
+  if (strcmp (protocol, "dvd") == 0)
+    return g_strdup (_("DVD source"));
+
+  if (strcmp (protocol, "rtsp") == 0)
+    return g_strdup (_("Real Time Streaming Protocol (RTSP) source"));
+
+  /* TODO: what about mmst, mmsu, mmsh? */
+  if (strcmp (protocol, "mms") == 0)
+    return g_strdup (_("Microsoft Media Server (MMS) protocol source"));
+
+  /* make protocol uppercase */
+  proto_uc = g_ascii_strup (protocol, -1);
+
+  /* TODO: find out how to add a comment for translators to the source code
+   * (and tell them to make the first letter uppercase below if they move
+   * the protocol to the middle or end of the string) */
+  ret = g_strdup_printf (_("%s protocol source"), proto_uc);
+
+  g_free (proto_uc);
+
+  return ret;
+}
+
+/**
+ * gst_pb_utils_get_sink_description:
+ * @protocol: the protocol the sink element needs to handle, e.g. "http"
+ *
+ * Returns a localised string describing a sink element handling the protocol
+ * specified in @protocol, for use in error dialogs or other messages to be
+ * seen by the user. Should never return NULL unless @protocol is invalid.
+ *
+ * This function is mainly for internal use, applications would typically
+ * use gst_missing_plugin_message_get_description() to get a description of
+ * a missing feature from a missing-plugin message.
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_sink_description (const gchar * protocol)
+{
+  gchar *proto_uc, *ret;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  /* make protocol uppercase */
+  proto_uc = g_ascii_strup (protocol, -1);
+
+  /* TODO: find out how to add a comment for translators to the source code
+   * (and tell them to make the first letter uppercase below if they move
+   * the protocol to the middle or end of the string) */
+  ret = g_strdup_printf ("%s protocol sink", proto_uc);
+
+  g_free (proto_uc);
+
+  return ret;
+}
+
+/**
+ * gst_pb_utils_get_decoder_description:
+ * @caps: the (fixed) #GstCaps for which an decoder description is needed
+ *
+ * Returns a localised string describing an decoder for the format specified
+ * in @caps, for use in error dialogs or other messages to be seen by the user.
+ * Should never return NULL unless @factory_name or @caps are invalid.
+ *
+ * This function is mainly for internal use, applications would typically
+ * use gst_missing_plugin_message_get_description() to get a description of
+ * a missing feature from a missing-plugin message.
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_decoder_description (const GstCaps * caps)
+{
+  gchar *str, *ret;
+  GstCaps *tmp;
+
+  g_return_val_if_fail (caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
+
+  tmp = copy_and_clean_caps (caps);
+
+  g_return_val_if_fail (gst_caps_is_fixed (tmp), NULL);
+
+  /* special-case RTP caps */
+  if (caps_are_rtp_caps (tmp, "video", &str)) {
+    ret = g_strdup_printf (_("%s video RTP depayloader"), str);
+  } else if (caps_are_rtp_caps (tmp, "audio", &str)) {
+    ret = g_strdup_printf (_("%s audio RTP depayloader"), str);
+  } else if (caps_are_rtp_caps (tmp, "application", &str)) {
+    ret = g_strdup_printf (_("%s RTP depayloader"), str);
+  } else {
+    const FormatInfo *info;
+
+    str = gst_pb_utils_get_codec_description (tmp);
+    info = find_format_info (tmp);
+    if (info != NULL && (info->flags & FLAG_CONTAINER) != 0) {
+      ret = g_strdup_printf (_("%s demuxer"), str);
+    } else {
+      ret = g_strdup_printf (_("%s decoder"), str);
+    }
+  }
+
+  g_free (str);
+  gst_caps_unref (tmp);
+
+  return ret;
+}
+
+/**
+ * gst_pb_utils_get_encoder_description:
+ * @caps: the (fixed) #GstCaps for which an encoder description is needed
+ *
+ * Returns a localised string describing an encoder for the format specified
+ * in @caps, for use in error dialogs or other messages to be seen by the user.
+ * Should never return NULL unless @factory_name or @caps are invalid.
+ *
+ * This function is mainly for internal use, applications would typically
+ * use gst_missing_plugin_message_get_description() to get a description of
+ * a missing feature from a missing-plugin message.
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_encoder_description (const GstCaps * caps)
+{
+  gchar *str, *ret;
+  GstCaps *tmp;
+
+  g_return_val_if_fail (caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
+  tmp = copy_and_clean_caps (caps);
+  g_return_val_if_fail (gst_caps_is_fixed (tmp), NULL);
+
+  /* special-case RTP caps */
+  if (caps_are_rtp_caps (tmp, "video", &str)) {
+    ret = g_strdup_printf (_("%s video RTP payloader"), str);
+  } else if (caps_are_rtp_caps (tmp, "audio", &str)) {
+    ret = g_strdup_printf (_("%s audio RTP payloader"), str);
+  } else if (caps_are_rtp_caps (tmp, "application", &str)) {
+    ret = g_strdup_printf (_("%s RTP payloader"), str);
+  } else {
+    const FormatInfo *info;
+
+    str = gst_pb_utils_get_codec_description (tmp);
+    info = find_format_info (tmp);
+    if (info != NULL && (info->flags & FLAG_CONTAINER) != 0) {
+      ret = g_strdup_printf (_("%s muxer"), str);
+    } else {
+      ret = g_strdup_printf (_("%s encoder"), str);
+    }
+  }
+
+  g_free (str);
+  gst_caps_unref (tmp);
+
+  return ret;
+}
+
+/**
+ * gst_pb_utils_get_element_description:
+ * @factory_name: the name of the element, e.g. "giosrc"
+ *
+ * Returns a localised string describing the given element, for use in
+ * error dialogs or other messages to be seen by the user. Should never
+ * return NULL unless @factory_name is invalid.
+ *
+ * This function is mainly for internal use, applications would typically
+ * use gst_missing_plugin_message_get_description() to get a description of
+ * a missing feature from a missing-plugin message.
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_element_description (const gchar * factory_name)
+{
+  gchar *ret;
+
+  g_return_val_if_fail (factory_name != NULL, NULL);
+
+  ret = g_strdup_printf (_("GStreamer element %s"), factory_name);
+  if (ret && g_str_has_prefix (ret, factory_name))
+    *ret = g_ascii_toupper (*ret);
+
+  return ret;
+}
+
+/**
+ * gst_pb_utils_add_codec_description_to_tag_list:
+ * @taglist: a #GstTagList
+ * @codec_tag: a GStreamer codec tag such as #GST_TAG_AUDIO_CODEC,
+ *             #GST_TAG_VIDEO_CODEC or #GST_TAG_CODEC
+ * @caps: the (fixed) #GstCaps for which a codec tag should be added.
+ *
+ * Adds a codec tag describing the format specified by @caps to @taglist.
+ *
+ * Returns: TRUE if a codec tag was added, FALSE otherwise.
+ */
+gboolean
+gst_pb_utils_add_codec_description_to_tag_list (GstTagList * taglist,
+    const gchar * codec_tag, const GstCaps * caps)
+{
+  const FormatInfo *info;
+  gchar *desc;
+
+  g_return_val_if_fail (taglist != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_TAG_LIST (taglist), FALSE);
+  g_return_val_if_fail (codec_tag != NULL, FALSE);
+  g_return_val_if_fail (gst_tag_exists (codec_tag), FALSE);
+  g_return_val_if_fail (gst_tag_get_type (codec_tag) == G_TYPE_STRING, FALSE);
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+
+  info = find_format_info (caps);
+  if (info == NULL)
+    return FALSE;
+
+  desc = format_info_get_desc (info, caps);
+  gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, codec_tag, desc, NULL);
+  g_free (desc);
+
+  return TRUE;
+}
+
+/**
+ * gst_pb_utils_get_codec_description:
+ * @caps: the (fixed) #GstCaps for which an format description is needed
+ *
+ * Returns a localised (as far as this is possible) string describing the
+ * media format specified in @caps, for use in error dialogs or other messages
+ * to be seen by the user. Should never return NULL unless @caps is invalid.
+ *
+ * Also see the convenience function
+ * gst_pb_utils_add_codec_description_to_tag_list().
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_pb_utils_get_codec_description (const GstCaps * caps)
+{
+  const FormatInfo *info;
+  gchar *str, *comma;
+  GstCaps *tmp;
+
+  g_return_val_if_fail (caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
+  tmp = copy_and_clean_caps (caps);
+  g_return_val_if_fail (gst_caps_is_fixed (tmp), NULL);
+
+  info = find_format_info (tmp);
+
+  if (info) {
+    str = format_info_get_desc (info, tmp);
+  } else {
+    str = gst_caps_to_string (tmp);
+
+    /* cut off everything after the media type, if there is anything */
+    if ((comma = strchr (str, ','))) {
+      *comma = '\0';
+      g_strchomp (str);
+      /* we could do something more elaborate here, like taking into account
+       * audio/, video/, image/ and application/ prefixes etc. */
+    }
+
+    GST_WARNING ("No description available for media type: %s", str);
+  }
+  gst_caps_unref (tmp);
+
+  return str;
+}
+
+#if 0
+void
+gst_pb_utils_list_all (void)
+{
+  gint i;
+
+  g_print ("static const gchar *caps_strings[] = { ");
+
+  for (i = 0; i < G_N_ELEMENTS (formats); ++i) {
+    if (formats[i].desc != NULL)
+      g_print ("  \"%s\", ", formats[i].type);
+  }
+  g_print ("\n#if 0\n");
+  for (i = 0; i < G_N_ELEMENTS (formats); ++i) {
+    if (formats[i].desc == NULL)
+      g_print ("  \"%s\", \n", formats[i].type);
+  }
+  g_print ("\n#endif\n");
+}
+#endif
diff --git a/gst-libs/gst/pbutils/descriptions.h b/gst-libs/gst/pbutils/descriptions.h
new file mode 100644
index 0000000..5b19ecc
--- /dev/null
+++ b/gst-libs/gst/pbutils/descriptions.h
@@ -0,0 +1,58 @@
+/* GStreamer base utils library source/sink/codec description support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PB_UTILS_DESCRIPTIONS_H__
+#define __GST_PB_UTILS_DESCRIPTIONS_H__
+
+#include <gst/gsttaglist.h>
+#include <gst/gstcaps.h>
+
+G_BEGIN_DECLS
+
+/*
+ * functions for use by demuxers or decoders to add CODEC tags to tag lists
+ * from caps
+ */
+
+gboolean   gst_pb_utils_add_codec_description_to_tag_list (GstTagList    * taglist,
+                                                             const gchar   * codec_tag,
+                                                             const GstCaps * caps);
+
+gchar    * gst_pb_utils_get_codec_description (const GstCaps * caps);
+
+/*
+ * functions mainly used by the missing plugins message creation functions to
+ * find descriptions of what exactly is missing
+ */
+
+gchar    * gst_pb_utils_get_source_description (const gchar * protocol);
+
+gchar    * gst_pb_utils_get_sink_description (const gchar * protocol);
+
+gchar    * gst_pb_utils_get_decoder_description (const GstCaps * caps);
+
+gchar    * gst_pb_utils_get_encoder_description (const GstCaps * caps);
+
+gchar    * gst_pb_utils_get_element_description (const gchar * factory_name);
+
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_DESCRIPTIONS_H__ */
+
diff --git a/gst-libs/gst/pbutils/encoding-profile.c b/gst-libs/gst/pbutils/encoding-profile.c
new file mode 100644
index 0000000..710e5bc
--- /dev/null
+++ b/gst-libs/gst/pbutils/encoding-profile.c
@@ -0,0 +1,967 @@
+/* GStreamer encoding profiles library
+ * Copyright (C) 2009-2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009-2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:encoding-profile
+ * @short_description: Encoding profile library
+ *
+ * <refsect2>
+ * <para>
+ * Functions to create and handle encoding profiles.
+ * </para>
+ * <para>
+ * Encoding profiles describe the media types and settings one wishes to use for
+ * an encoding process. The top-level profiles are commonly
+ * #GstEncodingContainerProfile(s) (which contains a user-readable name and
+ * description along with which container format to use). These, in turn,
+ * reference one or more #GstEncodingProfile(s) which indicate which encoding
+ * format should be used on each individual streams.
+ * </para>
+ * <para>
+ * #GstEncodingProfile(s) can be provided to the 'encodebin' element, which will take
+ * care of selecting and setting up the required elements to produce an output stream
+ * conforming to the specifications of the profile.
+ * </para>
+ * <para>
+ * Unlike other systems, the encoding profiles do not specify which #GstElement to use
+ * for the various encoding and muxing steps, but instead relies on specifying the format
+ * one wishes to use.
+ * </para>
+ * <para>
+ * Encoding profiles can be created at runtime by the application or loaded from (and saved
+ * to) file using the #GstEncodingTarget API.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Example: Creating a profile</title>
+ * <para>
+ * |[
+ * #include <gst/pbutils/encoding-profile.h>
+ * ...
+ * GstEncodingProfile *
+ * create_ogg_theora_profile(void)
+ *{
+ *  GstEncodingContainerProfile *prof;
+ *  GstCaps *caps;
+ *
+ *  caps = gst_caps_from_string("application/ogg");
+ *  prof = gst_encoding_container_profile_new("Ogg audio/video",
+ *     "Standard OGG/THEORA/VORBIS",
+ *     caps, NULL);
+ *  gst_caps_unref (caps);
+ *
+ *  caps = gst_caps_from_string("video/x-theora");
+ *  gst_encoding_container_profile_add_profile(prof,
+ *       (GstEncodingProfile*) gst_encoding_video_profile_new(caps, NULL, NULL, 0));
+ *  gst_caps_unref (caps);
+ *
+ *  caps = gst_caps_from_string("audio/x-vorbis");
+ *  gst_encoding_container_profile_add_profile(prof,
+ *       (GstEncodingProfile*) gst_encoding_audio_profile_new(caps, NULL, NULL, 0));
+ *  gst_caps_unref (caps);
+ *
+ *  return (GstEncodingProfile*) prof;
+ *}
+ *
+ *
+ * ]|
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Example: Listing categories, targets and profiles</title>
+ * <para>
+ * |[
+ * #include <gst/pbutils/encoding-profile.h>
+ * ...
+ * GstEncodingProfile *prof;
+ * GList *categories, *tmpc;
+ * GList *targets, *tmpt;
+ * ...
+ * categories = gst_encoding_target_list_available_categories();
+ *
+ * ... Show available categories to user ...
+ *
+ * for (tmpc = categories; tmpc; tmpc = tmpc->next) {
+ *   gchar *category = (gchar *) tmpc->data;
+ *
+ *   ... and we can list all targets within that category ...
+ *   
+ *   targets = gst_encoding_target_list_all (category);
+ *
+ *   ... and show a list to our users ...
+ *
+ *   g_list_foreach (targets, (GFunc) gst_encoding_target_unref, NULL);
+ *   g_list_free (targets);
+ * }
+ *
+ * g_list_foreach (categories, (GFunc) g_free, NULL);
+ * g_list_free (categories);
+ *
+ * ...
+ * ]|
+ * </para>
+ * </refsect2>
+ *
+ * Since: 0.10.32
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "encoding-profile.h"
+#include "encoding-target.h"
+
+/* GstEncodingProfile API */
+
+struct _GstEncodingProfile
+{
+  GObject parent;
+
+  /*< public > */
+  gchar *name;
+  gchar *description;
+  GstCaps *format;
+  gchar *preset;
+  guint presence;
+  GstCaps *restriction;
+};
+
+static void string_to_profile_transform (const GValue * src_value,
+    GValue * dest_value);
+static gboolean gst_encoding_profile_deserialize_valfunc (GValue * value,
+    const gchar * s);
+
+static void gst_encoding_profile_class_init (GstEncodingProfileClass * klass);
+static gpointer gst_encoding_profile_parent_class = NULL;
+
+static void
+gst_encoding_profile_class_intern_init (gpointer klass)
+{
+  gst_encoding_profile_parent_class = g_type_class_peek_parent (klass);
+  gst_encoding_profile_class_init ((GstEncodingProfileClass *) klass);
+}
+
+GType
+gst_encoding_profile_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    GType g_define_type_id = g_type_register_static_simple (G_TYPE_OBJECT,
+        g_intern_static_string ("GstEncodingProfile"),
+        sizeof (GstEncodingProfileClass),
+        (GClassInitFunc) gst_encoding_profile_class_intern_init,
+        sizeof (GstEncodingProfile),
+        NULL,
+        (GTypeFlags) 0);
+    static GstValueTable gstvtable = {
+      G_TYPE_NONE,
+      (GstValueCompareFunc) NULL,
+      (GstValueSerializeFunc) NULL,
+      (GstValueDeserializeFunc) gst_encoding_profile_deserialize_valfunc
+    };
+
+    gstvtable.type = g_define_type_id;
+
+    /* Register a STRING=>PROFILE GValueTransformFunc */
+    g_value_register_transform_func (G_TYPE_STRING, g_define_type_id,
+        string_to_profile_transform);
+    /* Register gst-specific GValue functions */
+    gst_value_register (&gstvtable);
+
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+static void
+gst_encoding_profile_finalize (GObject * object)
+{
+  GstEncodingProfile *prof = (GstEncodingProfile *) object;
+  if (prof->name)
+    g_free (prof->name);
+  if (prof->format)
+    gst_caps_unref (prof->format);
+  if (prof->preset)
+    g_free (prof->preset);
+  if (prof->description)
+    g_free (prof->description);
+  if (prof->restriction)
+    gst_caps_unref (prof->restriction);
+}
+
+static void
+gst_encoding_profile_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_encoding_profile_finalize;
+}
+
+/**
+ * gst_encoding_profile_get_name:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the name of the profile, can be %NULL.
+ */
+const gchar *
+gst_encoding_profile_get_name (GstEncodingProfile * profile)
+{
+  return profile->name;
+}
+
+/**
+ * gst_encoding_profile_get_description:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the description of the profile, can be %NULL.
+ */
+const gchar *
+gst_encoding_profile_get_description (GstEncodingProfile * profile)
+{
+  return profile->description;
+}
+
+/**
+ * gst_encoding_profile_get_format:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): the #GstCaps corresponding to the media format used
+ * in the profile. Unref after usage.
+ */
+GstCaps *
+gst_encoding_profile_get_format (GstEncodingProfile * profile)
+{
+  return (profile->format ? gst_caps_ref (profile->format) : NULL);
+}
+
+/**
+ * gst_encoding_profile_get_preset:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the name of the #GstPreset to be used in the profile.
+ */
+const gchar *
+gst_encoding_profile_get_preset (GstEncodingProfile * profile)
+{
+  return profile->preset;
+}
+
+/**
+ * gst_encoding_profile_get_presence:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: The number of times the profile is used in its parent
+ * container profile. If 0, it is not a mandatory stream.
+ */
+guint
+gst_encoding_profile_get_presence (GstEncodingProfile * profile)
+{
+  return profile->presence;
+}
+
+/**
+ * gst_encoding_profile_get_restriction:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The restriction #GstCaps to apply before the encoder
+ * that will be used in the profile. The fields present in restriction caps are
+ * properties of the raw stream (that is before encoding), such as height and
+ * width for video and depth and sampling rate for audio. Does not apply to
+ * #GstEncodingContainerProfile (since there is no corresponding raw stream).
+ * Can be %NULL. Unref after usage.
+ */
+GstCaps *
+gst_encoding_profile_get_restriction (GstEncodingProfile * profile)
+{
+  return (profile->restriction ? gst_caps_ref (profile->restriction) : NULL);
+}
+
+/**
+ * gst_encoding_profile_set_name:
+ * @profile: a #GstEncodingProfile
+ * @name: the name to set on the profile
+ *
+ * Set @name as the given name for the @profile. A copy of @name will be made
+ * internally.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_name (GstEncodingProfile * profile, const gchar * name)
+{
+  if (profile->name)
+    g_free (profile->name);
+  profile->name = g_strdup (name);
+}
+
+/**
+ * gst_encoding_profile_set_description:
+ * @profile: a #GstEncodingProfile
+ * @description: the description to set on the profile
+ *
+ * Set @description as the given description for the @profile. A copy of @description will be made
+ * internally.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_description (GstEncodingProfile * profile,
+    const gchar * description)
+{
+  if (profile->description)
+    g_free (profile->description);
+  profile->description = g_strdup (description);
+}
+
+/**
+ * gst_encoding_profile_set_format:
+ * @profile: a #GstEncodingProfile
+ * @format: the media format to use in the profile.
+ *
+ * Sets the media format used in the profile.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_format (GstEncodingProfile * profile, GstCaps * format)
+{
+  if (profile->format)
+    gst_caps_unref (profile->format);
+  profile->format = gst_caps_ref (format);
+}
+
+/**
+ * gst_encoding_profile_set_preset:
+ * @profile: a #GstEncodingProfile
+ * @preset: the element preset to use
+ *
+ * Sets the preset to use for the profile.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_preset (GstEncodingProfile * profile,
+    const gchar * preset)
+{
+  if (profile->preset)
+    g_free (profile->preset);
+  profile->preset = g_strdup (preset);
+}
+
+/**
+ * gst_encoding_profile_set_presence:
+ * @profile: a #GstEncodingProfile
+ * @presence: the number of time the profile can be used
+ *
+ * Set the number of time the profile is used in its parent
+ * container profile. If 0, it is not a mandatory stream
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_presence (GstEncodingProfile * profile, guint presence)
+{
+  profile->presence = presence;
+}
+
+/**
+ * gst_encoding_profile_set_restriction:
+ * @profile: a #GstEncodingProfile
+ * @restriction: the restriction to apply
+ *
+ * Set the restriction #GstCaps to apply before the encoder
+ * that will be used in the profile. See gst_encoding_profile_set_restriction()
+ * for more about restrictions. Does not apply to #GstEncodingContainerProfile.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_profile_set_restriction (GstEncodingProfile * profile,
+    GstCaps * restriction)
+{
+  if (profile->restriction)
+    gst_caps_unref (profile->restriction);
+  profile->restriction = restriction;
+}
+
+/* Container profiles */
+
+struct _GstEncodingContainerProfile
+{
+  GstEncodingProfile parent;
+
+  GList *encodingprofiles;
+};
+
+G_DEFINE_TYPE (GstEncodingContainerProfile, gst_encoding_container_profile,
+    GST_TYPE_ENCODING_PROFILE);
+
+static void
+gst_encoding_container_profile_init (GstEncodingContainerProfile * prof)
+{
+  /* Nothing to initialize */
+}
+
+static void
+gst_encoding_container_profile_finalize (GObject * object)
+{
+  GstEncodingContainerProfile *prof = (GstEncodingContainerProfile *) object;
+
+  g_list_foreach (prof->encodingprofiles, (GFunc) g_object_unref, NULL);
+  g_list_free (prof->encodingprofiles);
+
+  G_OBJECT_CLASS (gst_encoding_container_profile_parent_class)->finalize
+      ((GObject *) prof);
+}
+
+static void
+gst_encoding_container_profile_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_encoding_container_profile_finalize;
+}
+
+const GList *
+gst_encoding_container_profile_get_profiles (GstEncodingContainerProfile *
+    profile)
+{
+  return profile->encodingprofiles;
+}
+
+/* Video profiles */
+
+struct _GstEncodingVideoProfile
+{
+  GstEncodingProfile parent;
+
+  guint pass;
+  gboolean variableframerate;
+};
+
+G_DEFINE_TYPE (GstEncodingVideoProfile, gst_encoding_video_profile,
+    GST_TYPE_ENCODING_PROFILE);
+
+static void
+gst_encoding_video_profile_init (GstEncodingVideoProfile * prof)
+{
+  /* Nothing to initialize */
+}
+
+static void
+gst_encoding_video_profile_class_init (GObjectClass * klass)
+{
+}
+
+/**
+ * gst_encoding_video_profile_get_pass:
+ * @prof: a #GstEncodingVideoProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: The pass number if this is part of a multi-pass profile. Starts at
+ * 1 for multi-pass. 0 if this is not a multi-pass profile
+ **/
+guint
+gst_encoding_video_profile_get_pass (GstEncodingVideoProfile * prof)
+{
+  return prof->pass;
+}
+
+/**
+ * gst_encoding_video_profile_get_variableframerate:
+ * @prof: a #GstEncodingVideoProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: Whether non-constant video framerate is allowed for encoding.
+ */
+gboolean
+gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *
+    prof)
+{
+  return prof->variableframerate;
+}
+
+/**
+ * gst_encoding_video_profile_set_pass:
+ * @prof: a #GstEncodingVideoProfile
+ * @pass: the pass number for this profile
+ *
+ * Sets the pass number of this video profile. The first pass profile should have
+ * this value set to 1. If this video profile isn't part of a multi-pass profile,
+ * you may set it to 0 (the default value).
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_video_profile_set_pass (GstEncodingVideoProfile * prof, guint pass)
+{
+  prof->pass = pass;
+}
+
+/**
+ * gst_encoding_video_profile_set_variableframerate:
+ * @prof: a #GstEncodingVideoProfile
+ * @variableframerate: a boolean
+ *
+ * If set to %TRUE, then the incoming streamm will be allowed to have non-constant
+ * framerate. If set to %FALSE (default value), then the incoming stream will
+ * be normalized by dropping/duplicating frames in order to produce a
+ * constance framerate.
+ *
+ * Since: 0.10.32
+ */
+void
+gst_encoding_video_profile_set_variableframerate (GstEncodingVideoProfile *
+    prof, gboolean variableframerate)
+{
+  prof->variableframerate = variableframerate;
+}
+
+/* Audio profiles */
+
+struct _GstEncodingAudioProfile
+{
+  GstEncodingProfile parent;
+};
+
+G_DEFINE_TYPE (GstEncodingAudioProfile, gst_encoding_audio_profile,
+    GST_TYPE_ENCODING_PROFILE);
+
+static void
+gst_encoding_audio_profile_init (GstEncodingAudioProfile * prof)
+{
+  /* Nothing to initialize */
+}
+
+static void
+gst_encoding_audio_profile_class_init (GObjectClass * klass)
+{
+}
+
+static inline gboolean
+_gst_caps_is_equal_safe (GstCaps * a, GstCaps * b)
+{
+  if (a == b)
+    return TRUE;
+  if ((a == NULL) || (b == NULL))
+    return FALSE;
+  return gst_caps_is_equal (a, b);
+}
+
+static gint
+_compare_container_encoding_profiles (GstEncodingContainerProfile * ca,
+    GstEncodingContainerProfile * cb)
+{
+  GList *tmp;
+
+  if (g_list_length (ca->encodingprofiles) !=
+      g_list_length (cb->encodingprofiles))
+    return -1;
+
+  for (tmp = ca->encodingprofiles; tmp; tmp = tmp->next) {
+    GstEncodingProfile *prof = (GstEncodingProfile *) tmp->data;
+    if (!gst_encoding_container_profile_contains_profile (ca, prof))
+      return -1;
+  }
+
+  return 0;
+}
+
+static gint
+_compare_encoding_profiles (const GstEncodingProfile * a,
+    const GstEncodingProfile * b)
+{
+  if ((G_TYPE_FROM_INSTANCE (a) != G_TYPE_FROM_INSTANCE (b)) ||
+      !_gst_caps_is_equal_safe (a->format, b->format) ||
+      (g_strcmp0 (a->preset, b->preset) != 0) ||
+      (g_strcmp0 (a->name, b->name) != 0) ||
+      (g_strcmp0 (a->description, b->description) != 0))
+    return -1;
+
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (a))
+    return
+        _compare_container_encoding_profiles (GST_ENCODING_CONTAINER_PROFILE
+        (a), GST_ENCODING_CONTAINER_PROFILE (b));
+
+  if (GST_IS_ENCODING_VIDEO_PROFILE (a)) {
+    GstEncodingVideoProfile *va = (GstEncodingVideoProfile *) a;
+    GstEncodingVideoProfile *vb = (GstEncodingVideoProfile *) b;
+
+    if ((va->pass != vb->pass)
+        || (va->variableframerate != vb->variableframerate))
+      return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * gst_encoding_container_profile_contains_profile:
+ * @container: a #GstEncodingContainerProfile
+ * @profile: a #GstEncodingProfile
+ *
+ * Checks if @container contains a #GstEncodingProfile identical to
+ * @profile.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if @container contains a #GstEncodingProfile identical
+ * to @profile, else %FALSE.
+ */
+gboolean
+gst_encoding_container_profile_contains_profile (GstEncodingContainerProfile *
+    container, GstEncodingProfile * profile)
+{
+  g_return_val_if_fail (GST_IS_ENCODING_CONTAINER_PROFILE (container), FALSE);
+  g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE);
+
+  return (g_list_find_custom (container->encodingprofiles, profile,
+          (GCompareFunc) _compare_encoding_profiles) != NULL);
+}
+
+/**
+ * gst_encoding_container_profile_add_profile:
+ * @container: the #GstEncodingContainerProfile to use
+ * @profile: the #GstEncodingProfile to add.
+ *
+ * Add a #GstEncodingProfile to the list of profiles handled by @container.
+ * 
+ * No copy of @profile will be made, if you wish to use it elsewhere after this
+ * method you should increment its reference count.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if the @stream was properly added, else %FALSE.
+ */
+gboolean
+gst_encoding_container_profile_add_profile (GstEncodingContainerProfile *
+    container, GstEncodingProfile * profile)
+{
+  g_return_val_if_fail (GST_IS_ENCODING_CONTAINER_PROFILE (container), FALSE);
+  g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE);
+
+  if (g_list_find_custom (container->encodingprofiles, profile,
+          (GCompareFunc) _compare_encoding_profiles)) {
+    GST_ERROR
+        ("Encoding profile already contains an identical GstEncodingProfile");
+    return FALSE;
+  }
+
+  container->encodingprofiles =
+      g_list_append (container->encodingprofiles, profile);
+
+  return TRUE;
+}
+
+static GstEncodingProfile *
+common_creation (GType objtype, GstCaps * format, const gchar * preset,
+    const gchar * name, const gchar * description, GstCaps * restriction,
+    guint presence)
+{
+  GstEncodingProfile *prof;
+
+  prof = (GstEncodingProfile *) g_object_new (objtype, NULL);
+
+  if (name)
+    prof->name = g_strdup (name);
+  if (description)
+    prof->description = g_strdup (description);
+  if (preset)
+    prof->preset = g_strdup (preset);
+  if (format)
+    prof->format = gst_caps_ref (format);
+  if (restriction)
+    prof->restriction = gst_caps_ref (restriction);
+  prof->presence = presence;
+
+  return prof;
+}
+
+/**
+ * gst_encoding_container_profile_new:
+ * @name: The name of the container profile, can be %NULL
+ * @description: The description of the container profile, can be %NULL
+ * @format: The format to use for this profile
+ * @preset: The preset to use for this profile
+ *
+ * Creates a new #GstEncodingContainerProfile.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: The newly created #GstEncodingContainerProfile.
+ */
+GstEncodingContainerProfile *
+gst_encoding_container_profile_new (const gchar * name,
+    const gchar * description, GstCaps * format, const gchar * preset)
+{
+  g_return_val_if_fail (GST_IS_CAPS (format), NULL);
+
+  return (GstEncodingContainerProfile *)
+      common_creation (GST_TYPE_ENCODING_CONTAINER_PROFILE, format, preset,
+      name, description, NULL, 0);
+}
+
+/**
+ * gst_encoding_video_profile_new:
+ * @format: the #GstCaps
+ * @preset: the preset(s) to use on the encoder, can be #NULL
+ * @restriction: the #GstCaps used to restrict the input to the encoder, can be
+ * NULL. See gst_encoding_profile_get_restriction() for more details.
+ * @presence: the number of time this stream must be used. 0 means any number of
+ *  times (including never)
+ *
+ * Creates a new #GstEncodingVideoProfile
+ *
+ * All provided allocatable arguments will be internally copied, so can be
+ * safely freed/unreferenced after calling this method.
+ *
+ * If you wish to control the pass number (in case of multi-pass scenarios),
+ * please refer to the gst_encoding_video_profile_set_pass() documentation.
+ *
+ * If you wish to use/force a constant framerate please refer to the
+ * gst_encoding_video_profile_set_variableframerate() documentation.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the newly created #GstEncodingVideoProfile.
+ */
+GstEncodingVideoProfile *
+gst_encoding_video_profile_new (GstCaps * format, const gchar * preset,
+    GstCaps * restriction, guint presence)
+{
+  return (GstEncodingVideoProfile *)
+      common_creation (GST_TYPE_ENCODING_VIDEO_PROFILE, format, preset, NULL,
+      NULL, restriction, presence);
+}
+
+/**
+ * gst_encoding_audio_profile_new:
+ * @format: the #GstCaps
+ * @preset: the preset(s) to use on the encoder, can be #NULL
+ * @restriction: the #GstCaps used to restrict the input to the encoder, can be
+ * NULL. See gst_encoding_profile_get_restriction() for more details.
+ * @presence: the number of time this stream must be used. 0 means any number of
+ *  times (including never)
+ *
+ * Creates a new #GstEncodingAudioProfile
+ *
+ * All provided allocatable arguments will be internally copied, so can be
+ * safely freed/unreferenced after calling this method.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the newly created #GstEncodingAudioProfile.
+ */
+GstEncodingAudioProfile *
+gst_encoding_audio_profile_new (GstCaps * format, const gchar * preset,
+    GstCaps * restriction, guint presence)
+{
+  return (GstEncodingAudioProfile *)
+      common_creation (GST_TYPE_ENCODING_AUDIO_PROFILE, format, preset, NULL,
+      NULL, restriction, presence);
+}
+
+
+/**
+ * gst_encoding_profile_is_equal:
+ * @a: a #GstEncodingProfile
+ * @b: a #GstEncodingProfile
+ *
+ * Checks whether the two #GstEncodingProfile are equal
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if @a and @b are equal, else %FALSE.
+ */
+gboolean
+gst_encoding_profile_is_equal (GstEncodingProfile * a, GstEncodingProfile * b)
+{
+  return (_compare_encoding_profiles (a, b) == 0);
+}
+
+
+/**
+ * gst_encoding_profile_get_input_caps:
+ * @profile: a #GstEncodingProfile
+ *
+ * Computes the full output caps that this @profile will be able to consume.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The full caps the given @profile can consume. Call
+ * gst_caps_unref() when you are done with the caps.
+ */
+GstCaps *
+gst_encoding_profile_get_input_caps (GstEncodingProfile * profile)
+{
+  GstCaps *out, *tmp;
+  GList *ltmp;
+  GstStructure *st, *outst;
+  GQuark out_name;
+  guint i, len;
+  GstCaps *fcaps;
+
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (profile)) {
+    GstCaps *res = gst_caps_new_empty ();
+
+    for (ltmp = GST_ENCODING_CONTAINER_PROFILE (profile)->encodingprofiles;
+        ltmp; ltmp = ltmp->next) {
+      GstEncodingProfile *sprof = (GstEncodingProfile *) ltmp->data;
+      gst_caps_merge (res, gst_encoding_profile_get_input_caps (sprof));
+    }
+    return res;
+  }
+
+  fcaps = profile->format;
+
+  /* fast-path */
+  if ((profile->restriction == NULL) || gst_caps_is_any (profile->restriction))
+    return gst_caps_ref (fcaps);
+
+  /* Combine the format with the restriction caps */
+  outst = gst_caps_get_structure (fcaps, 0);
+  out_name = gst_structure_get_name_id (outst);
+  tmp = gst_caps_new_empty ();
+  len = gst_caps_get_size (profile->restriction);
+
+  for (i = 0; i < len; i++) {
+    st = gst_structure_copy (gst_caps_get_structure (profile->restriction, i));
+    st->name = out_name;
+    gst_caps_append_structure (tmp, st);
+  }
+
+  out = gst_caps_intersect (tmp, fcaps);
+  gst_caps_unref (tmp);
+
+  return out;
+}
+
+/**
+ * gst_encoding_profile_get_type_nick:
+ * @profile: a #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ *
+ * Returns: the human-readable name of the type of @profile.
+ */
+const gchar *
+gst_encoding_profile_get_type_nick (GstEncodingProfile * profile)
+{
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (profile))
+    return "container";
+  if (GST_IS_ENCODING_VIDEO_PROFILE (profile))
+    return "video";
+  if (GST_IS_ENCODING_AUDIO_PROFILE (profile))
+    return "audio";
+  return NULL;
+}
+
+/**
+ * gst_encoding_profile_find:
+ * @targetname: (transfer none): The name of the target
+ * @profilename: (transfer none): The name of the profile
+ * @category: (transfer none) (allow-none): The target category. Can be %NULL
+ *
+ * Find the #GstEncodingProfile with the specified name and category.
+ *
+ * Returns: (transfer full): The matching #GstEncodingProfile or %NULL.
+ *
+ * Since: 0.10.32
+ */
+GstEncodingProfile *
+gst_encoding_profile_find (const gchar * targetname, const gchar * profilename,
+    const gchar * category)
+{
+  GstEncodingProfile *res = NULL;
+  GstEncodingTarget *target;
+
+  g_return_val_if_fail (targetname != NULL, NULL);
+  g_return_val_if_fail (profilename != NULL, NULL);
+
+  /* FIXME : how do we handle profiles named the same in several
+   * categories but of which only one has the required profile ? */
+  target = gst_encoding_target_load (targetname, category, NULL);
+  if (target) {
+    res = gst_encoding_target_get_profile (target, profilename);
+    gst_encoding_target_unref (target);
+  }
+
+  return res;
+}
+
+static GstEncodingProfile *
+combo_search (const gchar * pname)
+{
+  GstEncodingProfile *res;
+  gchar **split;
+
+  /* Splitup */
+  split = g_strsplit (pname, "/", 2);
+  if (g_strv_length (split) != 2)
+    return NULL;
+
+  res = gst_encoding_profile_find (split[0], split[1], NULL);
+
+  g_strfreev (split);
+
+  return res;
+}
+
+/* GValue transform function */
+static void
+string_to_profile_transform (const GValue * src_value, GValue * dest_value)
+{
+  const gchar *profilename;
+  GstEncodingProfile *profile;
+
+  profilename = g_value_get_string (src_value);
+
+  profile = combo_search (profilename);
+
+  if (profile)
+    g_value_take_object (dest_value, (GObject *) profile);
+}
+
+static gboolean
+gst_encoding_profile_deserialize_valfunc (GValue * value, const gchar * s)
+{
+  GstEncodingProfile *profile;
+
+  profile = combo_search (s);
+
+  if (profile) {
+    g_value_take_object (value, (GObject *) profile);
+    return TRUE;
+  }
+
+  return FALSE;
+}
diff --git a/gst-libs/gst/pbutils/encoding-profile.h b/gst-libs/gst/pbutils/encoding-profile.h
new file mode 100644
index 0000000..6645436
--- /dev/null
+++ b/gst-libs/gst/pbutils/encoding-profile.h
@@ -0,0 +1,187 @@
+/* GStreamer encoding profiles library
+ * Copyright (C) 2009-2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009-2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PROFILE_H__
+#define __GST_PROFILE_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#include <gst/pbutils/pbutils-enumtypes.h>
+
+/**
+ * GstEncodingProfile:
+ *
+ * The opaque base class object for all encoding profiles. This contains generic
+ * information like name, description, format and preset.
+ *
+ * Since: 0.10.32
+ */
+
+#define GST_TYPE_ENCODING_PROFILE			\
+  (gst_encoding_profile_get_type ())
+#define GST_ENCODING_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_PROFILE, GstEncodingProfile))
+#define GST_IS_ENCODING_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_PROFILE))
+typedef struct _GstEncodingProfile GstEncodingProfile;
+typedef GObjectClass GstEncodingProfileClass;
+GType gst_encoding_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingContainerProfile:
+ *
+ * Encoding profiles for containers. Keeps track of a list of #GstEncodingProfile
+ *
+ * Since: 0.10.32
+ */
+#define GST_TYPE_ENCODING_CONTAINER_PROFILE			\
+  (gst_encoding_container_profile_get_type ())
+#define GST_ENCODING_CONTAINER_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE, GstEncodingContainerProfile))
+#define GST_IS_ENCODING_CONTAINER_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_CONTAINER_PROFILE))
+typedef struct _GstEncodingContainerProfile GstEncodingContainerProfile;
+typedef GstEncodingProfileClass GstEncodingContainerProfileClass;
+GType gst_encoding_container_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingVideoProfile:
+ *
+ * Variant of #GstEncodingProfile for video streams, allows specifying the @pass.
+ *
+ * Since: 0.10.32
+ */
+#define GST_TYPE_ENCODING_VIDEO_PROFILE			\
+  (gst_encoding_video_profile_get_type ())
+#define GST_ENCODING_VIDEO_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_VIDEO_PROFILE, GstEncodingVideoProfile))
+#define GST_IS_ENCODING_VIDEO_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_VIDEO_PROFILE))
+typedef struct _GstEncodingVideoProfile GstEncodingVideoProfile;
+typedef GstEncodingProfileClass GstEncodingVideoProfileClass;
+GType gst_encoding_video_profile_get_type (void);
+
+
+
+/**
+ * GstEncodingAudioProfile:
+ *
+ * Variant of #GstEncodingProfile for audio streams.
+ *
+ * Since: 0.10.32
+ */
+#define GST_TYPE_ENCODING_AUDIO_PROFILE			\
+  (gst_encoding_audio_profile_get_type ())
+#define GST_ENCODING_AUDIO_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_AUDIO_PROFILE, GstEncodingAudioProfile))
+#define GST_IS_ENCODING_AUDIO_PROFILE(obj)			\
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_AUDIO_PROFILE))
+typedef struct _GstEncodingAudioProfile GstEncodingAudioProfile;
+typedef GstEncodingProfileClass GstEncodingAudioProfileClass;
+GType gst_encoding_audio_profile_get_type (void);
+
+
+
+/* GstEncodingProfile API */
+
+/**
+ * gst_encoding_profile_unref:
+ * @profile: a #GstEncodingProfile
+ *
+ * Decreases the reference count of the @profile, possibly freeing the @profile.
+ *
+ * Since: 0.10.32
+ */
+#define gst_encoding_profile_unref(profile) (g_object_unref ((GObject*) profile))
+
+/**
+ * gst_encoding_profile_ref:
+ * @profile: a #GstEncodingProfile
+ *
+ * Increases the reference count of the @profile.
+ *
+ * Since: 0.10.32
+ */
+#define gst_encoding_profile_ref(profile) (g_object_ref ((GObject*) profile))
+
+const gchar *	gst_encoding_profile_get_name(GstEncodingProfile *profile);
+const gchar *	gst_encoding_profile_get_description(GstEncodingProfile *profile);
+GstCaps *	gst_encoding_profile_get_format(GstEncodingProfile *profile);
+const gchar *	gst_encoding_profile_get_preset(GstEncodingProfile *profile);
+guint	gst_encoding_profile_get_presence(GstEncodingProfile *profile);
+GstCaps *	gst_encoding_profile_get_restriction(GstEncodingProfile *profile);
+
+void	gst_encoding_profile_set_name(GstEncodingProfile *profile, const gchar *name);
+void	gst_encoding_profile_set_description(GstEncodingProfile *profile, const gchar *description);
+void	gst_encoding_profile_set_format(GstEncodingProfile *profile, GstCaps *format);
+void	gst_encoding_profile_set_preset(GstEncodingProfile *profile, const gchar *preset);
+void	gst_encoding_profile_set_restriction(GstEncodingProfile *profile, GstCaps *restriction);
+void	gst_encoding_profile_set_presence(GstEncodingProfile *profile, guint presence);
+
+gboolean gst_encoding_profile_is_equal (GstEncodingProfile *a,
+					GstEncodingProfile *b);
+GstCaps * gst_encoding_profile_get_input_caps (GstEncodingProfile *profile);
+
+const gchar *gst_encoding_profile_get_type_nick (GstEncodingProfile *profile);
+
+GstEncodingProfile * gst_encoding_profile_find (const gchar *targetname,
+						const gchar *profilename,
+						const gchar *category);
+
+/* GstEncodingContainerProfile API */
+gboolean  gst_encoding_container_profile_add_profile       (GstEncodingContainerProfile *container,
+							    GstEncodingProfile *profile);
+gboolean  gst_encoding_container_profile_contains_profile  (GstEncodingContainerProfile * container,
+							    GstEncodingProfile *profile);
+const GList *gst_encoding_container_profile_get_profiles   (GstEncodingContainerProfile *profile);
+
+
+GstEncodingContainerProfile *  gst_encoding_container_profile_new (const gchar *name,
+								   const gchar *description,
+								   GstCaps *format,
+								   const gchar *preset);
+
+
+/* Invidual stream encodingprofile API */
+GstEncodingVideoProfile * gst_encoding_video_profile_new (GstCaps *format,
+							  const gchar *preset,
+							  GstCaps *restriction,
+							  guint presence);
+GstEncodingAudioProfile * gst_encoding_audio_profile_new (GstCaps *format,
+							  const gchar *preset,
+							  GstCaps *restriction,
+							  guint presence);
+
+guint    gst_encoding_video_profile_get_pass              (GstEncodingVideoProfile *prof);
+gboolean gst_encoding_video_profile_get_variableframerate (GstEncodingVideoProfile *prof);
+
+void     gst_encoding_video_profile_set_pass              (GstEncodingVideoProfile *prof,
+							   guint pass);
+void     gst_encoding_video_profile_set_variableframerate (GstEncodingVideoProfile *prof,
+							   gboolean variableframerate);
+G_END_DECLS
+
+#endif /* __GST_PROFILE_H__ */
diff --git a/gst-libs/gst/pbutils/encoding-target.c b/gst-libs/gst/pbutils/encoding-target.c
new file mode 100644
index 0000000..860b595
--- /dev/null
+++ b/gst-libs/gst/pbutils/encoding-target.c
@@ -0,0 +1,1208 @@
+/* GStreamer encoding profile registry
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <locale.h>
+#include <string.h>
+#include "encoding-target.h"
+
+/*
+ * File format
+ *
+ * GKeyFile style.
+ *
+ * [GStreamer Encoding Target]
+ * name : <name>
+ * category : <category>
+ * description : <description> #translatable
+ *
+ * [profile-<profile1name>]
+ * name : <name>
+ * description : <description> #optional
+ * format : <format>
+ * preset : <preset>
+ *
+ * [streamprofile-<id>]
+ * parent : <encodingprofile.name>[,<encodingprofile.name>..]
+ * type : <type> # "audio", "video", "text"
+ * format : <format>
+ * preset : <preset>
+ * restriction : <restriction>
+ * presence : <presence>
+ * pass : <pass>
+ * variableframerate : <variableframerate>
+ *  */
+
+/*
+ * Location of profile files
+ *
+ * $GST_DATADIR/gstreamer-GST_MAJORMINOR/encoding-profile
+ * $HOME/gstreamer-GST_MAJORMINOR/encoding-profile
+ *
+ * Naming convention
+ *   $(target.category)/$(target.name).gep
+ *
+ * Naming restrictions:
+ *  lowercase ASCII letter for the first character
+ *  Same for all other characters + numerics + hyphens
+ */
+
+
+#define GST_ENCODING_TARGET_HEADER "GStreamer Encoding Target"
+#define GST_ENCODING_TARGET_DIRECTORY "encoding-profiles"
+#define GST_ENCODING_TARGET_SUFFIX ".gep"
+
+struct _GstEncodingTarget
+{
+  GObject parent;
+
+  gchar *name;
+  gchar *category;
+  gchar *description;
+  GList *profiles;
+
+  /*< private > */
+  gchar *keyfile;
+};
+
+G_DEFINE_TYPE (GstEncodingTarget, gst_encoding_target, G_TYPE_OBJECT);
+
+static void
+gst_encoding_target_init (GstEncodingTarget * target)
+{
+  /* Nothing to initialize */
+}
+
+static void
+gst_encoding_target_finalize (GObject * object)
+{
+  GstEncodingTarget *target = (GstEncodingTarget *) object;
+
+  GST_DEBUG ("Finalizing");
+
+  if (target->name)
+    g_free (target->name);
+  if (target->category)
+    g_free (target->category);
+  if (target->description)
+    g_free (target->description);
+
+  g_list_foreach (target->profiles, (GFunc) g_object_unref, NULL);
+  g_list_free (target->profiles);
+}
+
+static void
+gst_encoding_target_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_encoding_target_finalize;
+}
+
+/**
+ * gst_encoding_target_get_name:
+ * @target: a #GstEncodingTarget
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer none): The name of the @target.
+ */
+const gchar *
+gst_encoding_target_get_name (GstEncodingTarget * target)
+{
+  return target->name;
+}
+
+/**
+ * gst_encoding_target_get_category:
+ * @target: a #GstEncodingTarget
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer none): The category of the @target. For example:
+ * #GST_ENCODING_CATEGORY_DEVICE.
+ */
+const gchar *
+gst_encoding_target_get_category (GstEncodingTarget * target)
+{
+  return target->category;
+}
+
+/**
+ * gst_encoding_target_get_description:
+ * @target: a #GstEncodingTarget
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer none): The description of the @target.
+ */
+const gchar *
+gst_encoding_target_get_description (GstEncodingTarget * target)
+{
+  return target->description;
+}
+
+/**
+ * gst_encoding_target_get_profiles:
+ * @target: a #GstEncodingTarget
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer none) (element-type Gst.EncodingProfile): A list of
+ * #GstEncodingProfile(s) this @target handles.
+ */
+const GList *
+gst_encoding_target_get_profiles (GstEncodingTarget * target)
+{
+  return target->profiles;
+}
+
+/**
+ * gst_encoding_target_get_profile:
+ * @target: a #GstEncodingTarget
+ * @name: the name of the profile to retrieve
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The matching #GstEncodingProfile, or %NULL.
+ */
+GstEncodingProfile *
+gst_encoding_target_get_profile (GstEncodingTarget * target, const gchar * name)
+{
+  GList *tmp;
+
+  g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  for (tmp = target->profiles; tmp; tmp = tmp->next) {
+    GstEncodingProfile *tprof = (GstEncodingProfile *) tmp->data;
+
+    if (!g_strcmp0 (gst_encoding_profile_get_name (tprof), name)) {
+      gst_encoding_profile_ref (tprof);
+      return tprof;
+    }
+  }
+
+  return NULL;
+}
+
+static inline gboolean
+validate_name (const gchar * name)
+{
+  guint i, len;
+
+  len = strlen (name);
+  if (len == 0)
+    return FALSE;
+
+  /* First character can only be a lower case ASCII character */
+  if (!g_ascii_isalpha (name[0]) || !g_ascii_islower (name[0]))
+    return FALSE;
+
+  /* All following characters can only by:
+   * either a lower case ASCII character
+   * or an hyphen
+   * or a numeric */
+  for (i = 1; i < len; i++) {
+    /* if uppercase ASCII letter, return */
+    if (g_ascii_isupper (name[i]))
+      return FALSE;
+    /* if a digit, continue */
+    if (g_ascii_isdigit (name[i]))
+      continue;
+    /* if an hyphen, continue */
+    if (name[i] == '-')
+      continue;
+    /* remaining should only be ascii letters */
+    if (!g_ascii_isalpha (name[i]))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_encoding_target_new:
+ * @name: The name of the target.
+ * @category: (transfer none): The name of the category to which this @target
+ * belongs. For example: #GST_ENCODING_CATEGORY_DEVICE.
+ * @description: (transfer none): A description of #GstEncodingTarget in the
+ * current locale.
+ * @profiles: (transfer none) (element-type Gst.EncodingProfile): A #GList of
+ * #GstEncodingProfile.
+ *
+ * Creates a new #GstEncodingTarget.
+ *
+ * The name and category can only consist of lowercase ASCII letters for the
+ * first character, followed by either lowercase ASCII letters, digits or
+ * hyphens ('-').
+ *
+ * The @category <emphasis>should</emphasis> be one of the existing
+ * well-defined categories, like #GST_ENCODING_CATEGORY_DEVICE, but it
+ * <emphasis>can</emphasis> be a application or user specific category if
+ * needed.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The newly created #GstEncodingTarget or %NULL if
+ * there was an error.
+ */
+
+GstEncodingTarget *
+gst_encoding_target_new (const gchar * name, const gchar * category,
+    const gchar * description, const GList * profiles)
+{
+  GstEncodingTarget *res;
+
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail (category != NULL, NULL);
+  g_return_val_if_fail (description != NULL, NULL);
+
+  /* Validate name */
+  if (!validate_name (name))
+    goto invalid_name;
+  if (!validate_name (category))
+    goto invalid_category;
+
+  res = (GstEncodingTarget *) g_object_new (GST_TYPE_ENCODING_TARGET, NULL);
+  res->name = g_strdup (name);
+  res->category = g_strdup (category);
+  res->description = g_strdup (description);
+
+  while (profiles) {
+    GstEncodingProfile *prof = (GstEncodingProfile *) profiles->data;
+
+    res->profiles =
+        g_list_append (res->profiles, gst_encoding_profile_ref (prof));
+    profiles = profiles->next;
+  }
+
+  return res;
+
+invalid_name:
+  {
+    GST_ERROR ("Invalid name for encoding target : '%s'", name);
+    return NULL;
+  }
+
+invalid_category:
+  {
+    GST_ERROR ("Invalid name for encoding category : '%s'", category);
+    return NULL;
+  }
+}
+
+/**
+ * gst_encoding_target_add_profile:
+ * @target: the #GstEncodingTarget to add a profile to
+ * @profile: (transfer full): the #GstEncodingProfile to add
+ *
+ * Adds the given @profile to the @target. Each added profile must have
+ * a unique name within the profile.
+ *
+ * The @target will steal a reference to the @profile. If you wish to use
+ * the profile after calling this method, you should increase its reference
+ * count.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if the profile was added, else %FALSE.
+ **/
+
+gboolean
+gst_encoding_target_add_profile (GstEncodingTarget * target,
+    GstEncodingProfile * profile)
+{
+  GList *tmp;
+
+  g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), FALSE);
+  g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE);
+
+  /* Make sure profile isn't already controlled by this target */
+  for (tmp = target->profiles; tmp; tmp = tmp->next) {
+    GstEncodingProfile *prof = (GstEncodingProfile *) tmp->data;
+
+    if (!g_strcmp0 (gst_encoding_profile_get_name (profile),
+            gst_encoding_profile_get_name (prof))) {
+      GST_WARNING ("Profile already present in target");
+      return FALSE;
+    }
+  }
+
+  target->profiles = g_list_append (target->profiles, profile);
+
+  return TRUE;
+}
+
+static gboolean
+serialize_stream_profiles (GKeyFile * out, GstEncodingProfile * sprof,
+    const gchar * profilename, guint id)
+{
+  gchar *sprofgroupname;
+  gchar *tmpc;
+  const GstCaps *format, *restriction;
+  const gchar *preset, *name, *description;
+
+  sprofgroupname = g_strdup_printf ("streamprofile-%s-%d", profilename, id);
+
+  /* Write the parent profile */
+  g_key_file_set_value (out, sprofgroupname, "parent", profilename);
+
+  g_key_file_set_value (out, sprofgroupname, "type",
+      gst_encoding_profile_get_type_nick (sprof));
+
+  format = gst_encoding_profile_get_format (sprof);
+  if (format) {
+    tmpc = gst_caps_to_string (format);
+    g_key_file_set_value (out, sprofgroupname, "format", tmpc);
+    g_free (tmpc);
+  }
+
+  name = gst_encoding_profile_get_name (sprof);
+  if (name)
+    g_key_file_set_string (out, sprofgroupname, "name", name);
+
+  description = gst_encoding_profile_get_description (sprof);
+  if (description)
+    g_key_file_set_string (out, sprofgroupname, "description", description);
+
+  preset = gst_encoding_profile_get_preset (sprof);
+  if (preset)
+    g_key_file_set_string (out, sprofgroupname, "preset", preset);
+
+  restriction = gst_encoding_profile_get_restriction (sprof);
+  if (restriction) {
+    tmpc = gst_caps_to_string (restriction);
+    g_key_file_set_value (out, sprofgroupname, "restriction", tmpc);
+    g_free (tmpc);
+  }
+  g_key_file_set_integer (out, sprofgroupname, "presence",
+      gst_encoding_profile_get_presence (sprof));
+
+  if (GST_IS_ENCODING_VIDEO_PROFILE (sprof)) {
+    GstEncodingVideoProfile *vp = (GstEncodingVideoProfile *) sprof;
+
+    g_key_file_set_integer (out, sprofgroupname, "pass",
+        gst_encoding_video_profile_get_pass (vp));
+    g_key_file_set_boolean (out, sprofgroupname, "variableframerate",
+        gst_encoding_video_profile_get_variableframerate (vp));
+  }
+
+  g_free (sprofgroupname);
+  return TRUE;
+}
+
+static gchar *
+get_locale (void)
+{
+  const char *loc = NULL;
+  gchar *ret;
+
+#ifdef ENABLE_NLS
+#if defined(LC_MESSAGES)
+  loc = setlocale (LC_MESSAGES, NULL);
+  GST_LOG ("LC_MESSAGES: %s", GST_STR_NULL (loc));
+#elif defined(LC_ALL)
+  loc = setlocale (LC_ALL, NULL);
+  GST_LOG ("LC_ALL: %s", GST_STR_NULL (loc));
+#else
+  GST_LOG ("Neither LC_ALL nor LC_MESSAGES defined");
+#endif
+#else /* !ENABLE_NLS */
+  GST_LOG ("i18n disabled");
+#endif
+
+  if (loc == NULL || g_ascii_strncasecmp (loc, "en", 2) == 0)
+    return NULL;
+
+  /* en_GB.UTF-8 => en */
+  ret = g_ascii_strdown (loc, -1);
+  ret = g_strcanon (ret, "abcdefghijklmnopqrstuvwxyz", '\0');
+  GST_LOG ("using locale: %s", ret);
+  return ret;
+}
+
+/* Serialize the top-level profiles
+ * Note: They don't have to be containerprofiles */
+static gboolean
+serialize_encoding_profile (GKeyFile * out, GstEncodingProfile * prof)
+{
+  gchar *profgroupname;
+  const GList *tmp;
+  guint i;
+  const gchar *profname, *profdesc, *profpreset, *proftype;
+  const GstCaps *profformat;
+
+  profname = gst_encoding_profile_get_name (prof);
+  profdesc = gst_encoding_profile_get_description (prof);
+  profformat = gst_encoding_profile_get_format (prof);
+  profpreset = gst_encoding_profile_get_preset (prof);
+  proftype = gst_encoding_profile_get_type_nick (prof);
+
+  profgroupname = g_strdup_printf ("profile-%s", profname);
+
+  g_key_file_set_string (out, profgroupname, "name", profname);
+
+  g_key_file_set_value (out, profgroupname, "type", proftype);
+
+  if (profdesc) {
+    gchar *locale;
+
+    locale = get_locale ();
+    if (locale != NULL) {
+      g_key_file_set_locale_string (out, profgroupname, "description",
+          locale, profdesc);
+      g_free (locale);
+    } else {
+      g_key_file_set_string (out, profgroupname, "description", profdesc);
+    }
+  }
+  if (profformat) {
+    gchar *tmpc = gst_caps_to_string (profformat);
+    g_key_file_set_string (out, profgroupname, "format", tmpc);
+    g_free (tmpc);
+  }
+  if (profpreset)
+    g_key_file_set_string (out, profgroupname, "preset", profpreset);
+
+  /* stream profiles */
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (prof)) {
+    for (tmp =
+        gst_encoding_container_profile_get_profiles
+        (GST_ENCODING_CONTAINER_PROFILE (prof)), i = 0; tmp;
+        tmp = tmp->next, i++) {
+      GstEncodingProfile *sprof = (GstEncodingProfile *) tmp->data;
+
+      if (!serialize_stream_profiles (out, sprof, profname, i))
+        return FALSE;
+    }
+  }
+  g_free (profgroupname);
+  return TRUE;
+}
+
+static gboolean
+serialize_target (GKeyFile * out, GstEncodingTarget * target)
+{
+  GList *tmp;
+
+  g_key_file_set_string (out, GST_ENCODING_TARGET_HEADER, "name", target->name);
+  g_key_file_set_string (out, GST_ENCODING_TARGET_HEADER, "category",
+      target->category);
+  g_key_file_set_string (out, GST_ENCODING_TARGET_HEADER, "description",
+      target->description);
+
+  for (tmp = target->profiles; tmp; tmp = tmp->next) {
+    GstEncodingProfile *prof = (GstEncodingProfile *) tmp->data;
+    if (!serialize_encoding_profile (out, prof))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * parse_encoding_profile:
+ * @in: a #GKeyFile
+ * @parentprofilename: the parent profile name (including 'profile-' or 'streamprofile-' header)
+ * @profilename: the profile name group to parse
+ * @nbgroups: the number of top-level groups
+ * @groups: the top-level groups
+ */
+static GstEncodingProfile *
+parse_encoding_profile (GKeyFile * in, gchar * parentprofilename,
+    gchar * profilename, gsize nbgroups, gchar ** groups)
+{
+  GstEncodingProfile *sprof = NULL;
+  gchar **parent;
+  gchar *proftype, *format, *preset, *restriction, *pname, *description;
+  GstCaps *formatcaps = NULL;
+  GstCaps *restrictioncaps = NULL;
+  gboolean variableframerate;
+  gint pass, presence;
+  gsize i, nbencprofiles;
+
+  GST_DEBUG ("parentprofilename : %s , profilename : %s",
+      parentprofilename, profilename);
+
+  if (parentprofilename) {
+    gboolean found = FALSE;
+
+    parent =
+        g_key_file_get_string_list (in, profilename, "parent",
+        &nbencprofiles, NULL);
+    if (!parent || !nbencprofiles) {
+      return NULL;
+    }
+
+    /* Check if this streamprofile is used in <profilename> */
+    for (i = 0; i < nbencprofiles; i++) {
+      if (!g_strcmp0 (parent[i], parentprofilename)) {
+        found = TRUE;
+        break;
+      }
+    }
+    g_strfreev (parent);
+
+    if (!found) {
+      GST_DEBUG ("Stream profile '%s' isn't used in profile '%s'",
+          profilename, parentprofilename);
+      return NULL;
+    }
+  }
+
+  pname = g_key_file_get_value (in, profilename, "name", NULL);
+
+  /* First try to get localized description */
+  {
+    gchar *locale;
+
+    locale = get_locale ();
+    if (locale != NULL) {
+      /* will try to fall back to untranslated string if no translation found */
+      description = g_key_file_get_locale_string (in, profilename,
+          "description", locale, NULL);
+      g_free (locale);
+    } else {
+      description =
+          g_key_file_get_string (in, profilename, "description", NULL);
+    }
+  }
+
+  /* Note: a missing description is normal for non-container profiles */
+  if (description == NULL) {
+    GST_LOG ("Missing 'description' field for streamprofile %s", profilename);
+  }
+
+  /* Parse the remaining fields */
+  proftype = g_key_file_get_value (in, profilename, "type", NULL);
+  if (!proftype) {
+    GST_WARNING ("Missing 'type' field for streamprofile %s", profilename);
+    return NULL;
+  }
+
+  format = g_key_file_get_value (in, profilename, "format", NULL);
+  if (format) {
+    formatcaps = gst_caps_from_string (format);
+    g_free (format);
+  }
+
+  preset = g_key_file_get_value (in, profilename, "preset", NULL);
+
+  restriction = g_key_file_get_value (in, profilename, "restriction", NULL);
+  if (restriction) {
+    restrictioncaps = gst_caps_from_string (restriction);
+    g_free (restriction);
+  }
+
+  presence = g_key_file_get_integer (in, profilename, "presence", NULL);
+  pass = g_key_file_get_integer (in, profilename, "pass", NULL);
+  variableframerate =
+      g_key_file_get_boolean (in, profilename, "variableframerate", NULL);
+
+  /* Build the streamprofile ! */
+  if (!g_strcmp0 (proftype, "container")) {
+    GstEncodingProfile *pprof;
+
+    sprof =
+        (GstEncodingProfile *) gst_encoding_container_profile_new (pname,
+        description, formatcaps, preset);
+    /* Now look for the stream profiles */
+    for (i = 0; i < nbgroups; i++) {
+      if (!g_ascii_strncasecmp (groups[i], "streamprofile-", 13)) {
+        pprof = parse_encoding_profile (in, pname, groups[i], nbgroups, groups);
+        if (pprof) {
+          gst_encoding_container_profile_add_profile (
+              (GstEncodingContainerProfile *) sprof, pprof);
+        }
+      }
+    }
+  } else if (!g_strcmp0 (proftype, "video")) {
+    sprof =
+        (GstEncodingProfile *) gst_encoding_video_profile_new (formatcaps,
+        preset, restrictioncaps, presence);
+    gst_encoding_video_profile_set_variableframerate ((GstEncodingVideoProfile
+            *) sprof, variableframerate);
+    gst_encoding_video_profile_set_pass ((GstEncodingVideoProfile *) sprof,
+        pass);
+    gst_encoding_profile_set_name (sprof, pname);
+    gst_encoding_profile_set_description (sprof, description);
+  } else if (!g_strcmp0 (proftype, "audio")) {
+    sprof =
+        (GstEncodingProfile *) gst_encoding_audio_profile_new (formatcaps,
+        preset, restrictioncaps, presence);
+    gst_encoding_profile_set_name (sprof, pname);
+    gst_encoding_profile_set_description (sprof, description);
+  } else
+    GST_ERROR ("Unknown profile format '%s'", proftype);
+
+  if (restrictioncaps)
+    gst_caps_unref (restrictioncaps);
+  if (formatcaps)
+    gst_caps_unref (formatcaps);
+
+  if (pname)
+    g_free (pname);
+  if (description)
+    g_free (description);
+  if (preset)
+    g_free (preset);
+  if (proftype)
+    g_free (proftype);
+
+  return sprof;
+}
+
+static GstEncodingTarget *
+parse_keyfile (GKeyFile * in, gchar * targetname, gchar * categoryname,
+    gchar * description)
+{
+  GstEncodingTarget *res = NULL;
+  GstEncodingProfile *prof;
+  gchar **groups;
+  gsize i, nbgroups;
+
+  res = gst_encoding_target_new (targetname, categoryname, description, NULL);
+
+  /* Figure out the various profiles */
+  groups = g_key_file_get_groups (in, &nbgroups);
+  for (i = 0; i < nbgroups; i++) {
+    if (!g_ascii_strncasecmp (groups[i], "profile-", 8)) {
+      prof = parse_encoding_profile (in, NULL, groups[i], nbgroups, groups);
+      if (prof)
+        gst_encoding_target_add_profile (res, prof);
+    }
+  }
+
+  g_strfreev (groups);
+
+  if (targetname)
+    g_free (targetname);
+  if (categoryname)
+    g_free (categoryname);
+  if (description)
+    g_free (description);
+
+  return res;
+}
+
+static GKeyFile *
+load_file_and_read_header (const gchar * path, gchar ** targetname,
+    gchar ** categoryname, gchar ** description, GError ** error)
+{
+  GKeyFile *in;
+  gboolean res;
+  GError *key_error = NULL;
+
+  g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+  in = g_key_file_new ();
+
+  GST_DEBUG ("path:%s", path);
+
+  res =
+      g_key_file_load_from_file (in, path,
+      G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &key_error);
+  if (!res || key_error != NULL)
+    goto load_error;
+
+  key_error = NULL;
+  *targetname =
+      g_key_file_get_value (in, GST_ENCODING_TARGET_HEADER, "name", &key_error);
+  if (!*targetname)
+    goto empty_name;
+
+  *categoryname =
+      g_key_file_get_value (in, GST_ENCODING_TARGET_HEADER, "category", NULL);
+  *description =
+      g_key_file_get_value (in, GST_ENCODING_TARGET_HEADER, "description",
+      NULL);
+
+  return in;
+
+load_error:
+  {
+    GST_WARNING ("Unable to read GstEncodingTarget file %s: %s",
+        path, key_error->message);
+    g_propagate_error (error, key_error);
+    g_key_file_free (in);
+    return NULL;
+  }
+
+empty_name:
+  {
+    GST_WARNING ("Wrong header in file %s: %s", path, key_error->message);
+    g_propagate_error (error, key_error);
+    g_key_file_free (in);
+    return NULL;
+  }
+}
+
+/**
+ * gst_encoding_target_load_from_file:
+ * @filepath: The file location to load the #GstEncodingTarget from
+ * @error: If an error occured, this field will be filled in.
+ *
+ * Opens the provided file and returns the contained #GstEncodingTarget.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The #GstEncodingTarget contained in the file, else
+ * %NULL
+ */
+
+GstEncodingTarget *
+gst_encoding_target_load_from_file (const gchar * filepath, GError ** error)
+{
+  GKeyFile *in;
+  gchar *targetname, *categoryname, *description;
+  GstEncodingTarget *res = NULL;
+
+  in = load_file_and_read_header (filepath, &targetname, &categoryname,
+      &description, error);
+  if (!in)
+    goto beach;
+
+  res = parse_keyfile (in, targetname, categoryname, description);
+
+  g_key_file_free (in);
+
+beach:
+  return res;
+}
+
+/*
+ * returned list contents must be freed
+ */
+static GList *
+get_matching_filenames (gchar * path, gchar * filename)
+{
+  GList *res = NULL;
+  GDir *topdir;
+  const gchar *subdirname;
+
+  topdir = g_dir_open (path, 0, NULL);
+  if (G_UNLIKELY (topdir == NULL))
+    return NULL;
+
+  while ((subdirname = g_dir_read_name (topdir))) {
+    gchar *ltmp = g_build_filename (path, subdirname, NULL);
+
+    if (g_file_test (ltmp, G_FILE_TEST_IS_DIR)) {
+      gchar *tmp = g_build_filename (path, subdirname, filename, NULL);
+      /* Test to see if we have a file named like that in that directory */
+      if (g_file_test (tmp, G_FILE_TEST_EXISTS))
+        res = g_list_append (res, tmp);
+      else
+        g_free (tmp);
+    }
+    g_free (ltmp);
+  }
+
+  g_dir_close (topdir);
+
+  return res;
+}
+
+static GstEncodingTarget *
+gst_encoding_target_subload (gchar * path, const gchar * category,
+    gchar * lfilename, GError ** error)
+{
+  GstEncodingTarget *target = NULL;
+
+  if (category) {
+    gchar *filename;
+
+    filename = g_build_filename (path, category, lfilename, NULL);
+    target = gst_encoding_target_load_from_file (filename, error);
+    g_free (filename);
+  } else {
+    GList *tmp, *tries = get_matching_filenames (path, lfilename);
+
+    /* Try to find a file named %s.gstprofile in any subdirectories */
+    for (tmp = tries; tmp; tmp = tmp->next) {
+      target = gst_encoding_target_load_from_file ((gchar *) tmp->data, NULL);
+      if (target)
+        break;
+    }
+    g_list_foreach (tries, (GFunc) g_free, NULL);
+    if (tries)
+      g_list_free (tries);
+  }
+
+  return target;
+}
+
+/**
+ * gst_encoding_target_load:
+ * @name: the name of the #GstEncodingTarget to load.
+ * @category: (allow-none): the name of the target category, like
+ * #GST_ENCODING_CATEGORY_DEVICE. Can be %NULL
+ * @error: If an error occured, this field will be filled in.
+ *
+ * Searches for the #GstEncodingTarget with the given name, loads it
+ * and returns it.
+ *
+ * If the category name is specified only targets from that category will be
+ * searched for.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: (transfer full): The #GstEncodingTarget if available, else %NULL.
+ */
+GstEncodingTarget *
+gst_encoding_target_load (const gchar * name, const gchar * category,
+    GError ** error)
+{
+  gchar *lfilename, *tldir;
+  GstEncodingTarget *target = NULL;
+
+  g_return_val_if_fail (name != NULL, NULL);
+
+  if (!validate_name (name))
+    goto invalid_name;
+
+  if (category && !validate_name (category))
+    goto invalid_category;
+
+  lfilename = g_strdup_printf ("%s" GST_ENCODING_TARGET_SUFFIX, name);
+
+  /* Try from local profiles */
+  tldir =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, NULL);
+  target = gst_encoding_target_subload (tldir, category, lfilename, error);
+  g_free (tldir);
+
+  if (target == NULL) {
+    /* Try from system-wide profiles */
+    tldir =
+        g_build_filename (GST_DATADIR, "gstreamer-" GST_MAJORMINOR,
+        GST_ENCODING_TARGET_DIRECTORY, NULL);
+    target = gst_encoding_target_subload (tldir, category, lfilename, error);
+    g_free (tldir);
+  }
+
+  g_free (lfilename);
+
+  return target;
+
+invalid_name:
+  {
+    GST_ERROR ("Invalid name for encoding target : '%s'", name);
+    return NULL;
+  }
+invalid_category:
+  {
+    GST_ERROR ("Invalid name for encoding category : '%s'", category);
+    return NULL;
+  }
+}
+
+/**
+ * gst_encoding_target_save_to_file:
+ * @target: a #GstEncodingTarget
+ * @filepath: the location to store the @target at.
+ * @error: If an error occured, this field will be filled in.
+ *
+ * Saves the @target to the provided file location.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if the target was correctly saved, else %FALSE.
+ **/
+
+gboolean
+gst_encoding_target_save_to_file (GstEncodingTarget * target,
+    const gchar * filepath, GError ** error)
+{
+  GKeyFile *out;
+  gchar *data;
+  gsize data_size;
+
+  g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), FALSE);
+  g_return_val_if_fail (filepath != NULL, FALSE);
+
+  /* FIXME : Check filepath is valid and writable
+   * FIXME : Strip out profiles already present in system target */
+
+  /* Get unique name... */
+
+  /* Create output GKeyFile */
+  out = g_key_file_new ();
+
+  if (!serialize_target (out, target))
+    goto serialize_failure;
+
+  if (!(data = g_key_file_to_data (out, &data_size, error)))
+    goto convert_failed;
+
+  if (!g_file_set_contents (filepath, data, data_size, error))
+    goto write_failed;
+
+  g_key_file_free (out);
+  g_free (data);
+
+  return TRUE;
+
+serialize_failure:
+  {
+    GST_ERROR ("Failure serializing target");
+    g_key_file_free (out);
+    return FALSE;
+  }
+
+convert_failed:
+  {
+    GST_ERROR ("Failure converting keyfile: %s", (*error)->message);
+    g_key_file_free (out);
+    g_free (data);
+    return FALSE;
+  }
+
+write_failed:
+  {
+    GST_ERROR ("Unable to write file %s: %s", filepath, (*error)->message);
+    g_key_file_free (out);
+    g_free (data);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_encoding_target_save:
+ * @target: a #GstEncodingTarget
+ * @error: If an error occured, this field will be filled in.
+ *
+ * Saves the @target to a default user-local directory.
+ *
+ * Since: 0.10.32
+ *
+ * Returns: %TRUE if the target was correctly saved, else %FALSE.
+ **/
+
+gboolean
+gst_encoding_target_save (GstEncodingTarget * target, GError ** error)
+{
+  gchar *filename;
+  gchar *lfilename;
+
+  g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), FALSE);
+  g_return_val_if_fail (target->category != NULL, FALSE);
+
+  lfilename = g_strdup_printf ("%s" GST_ENCODING_TARGET_SUFFIX, target->name);
+  filename =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, target->category, lfilename, NULL);
+  g_free (lfilename);
+
+  gst_encoding_target_save_to_file (target, filename, error);
+  g_free (filename);
+
+  return TRUE;
+}
+
+static GList *
+get_categories (gchar * path)
+{
+  GList *res = NULL;
+  GDir *topdir;
+  const gchar *subdirname;
+
+  topdir = g_dir_open (path, 0, NULL);
+  if (G_UNLIKELY (topdir == NULL))
+    return NULL;
+
+  while ((subdirname = g_dir_read_name (topdir))) {
+    gchar *ltmp = g_build_filename (path, subdirname, NULL);
+
+    if (g_file_test (ltmp, G_FILE_TEST_IS_DIR)) {
+      res = g_list_append (res, (gpointer) g_strdup (subdirname));
+    }
+    g_free (ltmp);
+  }
+
+  g_dir_close (topdir);
+
+  return res;
+}
+
+/**
+ * gst_encoding_list_available_categories:
+ *
+ * Lists all #GstEncodingTarget categories present on disk.
+ *
+ * Returns: (transfer full) (element-type gchar*): A list
+ * of #GstEncodingTarget categories.
+ *
+ * Since: 0.10.32
+ */
+GList *
+gst_encoding_list_available_categories (void)
+{
+  GList *res = NULL;
+  GList *tmp1, *tmp2;
+  gchar *topdir;
+
+  /* First try user-local categories */
+  topdir =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, NULL);
+  res = get_categories (topdir);
+  g_free (topdir);
+
+  /* Extend with system-wide categories */
+  topdir = g_build_filename (GST_DATADIR, "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, NULL);
+  tmp1 = get_categories (topdir);
+  g_free (topdir);
+
+  for (tmp2 = tmp1; tmp2; tmp2 = tmp2->next) {
+    gchar *name = (gchar *) tmp2->data;
+    if (!g_list_find_custom (res, name, (GCompareFunc) g_strcmp0))
+      res = g_list_append (res, (gpointer) name);
+    else
+      g_free (name);
+  }
+  g_free (tmp1);
+
+  return res;
+}
+
+static inline GList *
+sub_get_all_targets (gchar * subdir)
+{
+  GList *res = NULL;
+  const gchar *filename;
+  GDir *dir;
+  GstEncodingTarget *target;
+
+  dir = g_dir_open (subdir, 0, NULL);
+  if (G_UNLIKELY (dir == NULL))
+    return NULL;
+
+  while ((filename = g_dir_read_name (dir))) {
+    gchar *fullname;
+
+    /* Only try files ending with .gstprofile */
+    if (!g_str_has_suffix (filename, GST_ENCODING_TARGET_SUFFIX))
+      continue;
+
+    fullname = g_build_filename (subdir, filename, NULL);
+    target = gst_encoding_target_load_from_file (fullname, NULL);
+    if (target) {
+      res = g_list_append (res, target);
+    } else
+      GST_WARNING ("Failed to get a target from %s", fullname);
+    g_free (fullname);
+  }
+  g_dir_close (dir);
+
+  return res;
+}
+
+static inline GList *
+get_all_targets (gchar * topdir, const gchar * categoryname)
+{
+  GList *res = NULL;
+
+  if (categoryname) {
+    gchar *subdir = g_build_filename (topdir, categoryname, NULL);
+    /* Try to open the directory */
+    res = sub_get_all_targets (subdir);
+    g_free (subdir);
+  } else {
+    const gchar *subdirname;
+    GDir *dir = g_dir_open (topdir, 0, NULL);
+
+    if (G_UNLIKELY (dir == NULL))
+      return NULL;
+
+    while ((subdirname = g_dir_read_name (dir))) {
+      gchar *ltmp = g_build_filename (topdir, subdirname, NULL);
+
+      if (g_file_test (ltmp, G_FILE_TEST_IS_DIR)) {
+        res = g_list_concat (res, sub_get_all_targets (ltmp));
+      }
+      g_free (ltmp);
+    }
+    g_dir_close (dir);
+  }
+
+  return res;
+}
+
+static guint
+compare_targets (const GstEncodingTarget * ta, const GstEncodingTarget * tb)
+{
+  if (!g_strcmp0 (ta->name, tb->name)
+      && !g_strcmp0 (ta->category, tb->category))
+    return -1;
+
+  return 0;
+}
+
+/**
+ * gst_encoding_list_all_targets:
+ * @categoryname: (allow-none): The category, for ex: #GST_ENCODING_CATEGORY_DEVICE.
+ * Can be %NULL.
+ *
+ * List all available #GstEncodingTarget for the specified category, or all categories
+ * if @categoryname is %NULL.
+ *
+ * Returns: (transfer full) (element-type GstEncodingTarget): The list of #GstEncodingTarget
+ *
+ * Since: 0.10.32
+ */
+GList *
+gst_encoding_list_all_targets (const gchar * categoryname)
+{
+  GList *res;
+  GList *tmp1, *tmp2;
+  gchar *topdir;
+
+  /* Get user-locals */
+  topdir =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, NULL);
+  res = get_all_targets (topdir, categoryname);
+  g_free (topdir);
+
+  /* Get system-wide */
+  topdir = g_build_filename (GST_DATADIR, "gstreamer-" GST_MAJORMINOR,
+      GST_ENCODING_TARGET_DIRECTORY, NULL);
+  tmp1 = get_all_targets (topdir, categoryname);
+  g_free (topdir);
+
+  /* Merge system-wide targets */
+  /* FIXME : We should merge the system-wide profiles into the user-locals
+   * instead of stopping at identical target names */
+  for (tmp2 = tmp1; tmp2; tmp2 = tmp2->next) {
+    GstEncodingTarget *target = (GstEncodingTarget *) tmp2->data;
+    if (g_list_find_custom (res, target, (GCompareFunc) compare_targets))
+      gst_encoding_target_unref (target);
+    else
+      res = g_list_append (res, target);
+  }
+  g_list_free (tmp1);
+
+  return res;
+}
diff --git a/gst-libs/gst/pbutils/encoding-target.h b/gst-libs/gst/pbutils/encoding-target.h
new file mode 100644
index 0000000..4dcf598
--- /dev/null
+++ b/gst-libs/gst/pbutils/encoding-target.h
@@ -0,0 +1,147 @@
+/* GStreamer encoding profile registry
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PROFILE_REGISTRY_H__
+#define __GST_PROFILE_REGISTRY_H__
+
+#include <gst/pbutils/encoding-profile.h>
+
+G_BEGIN_DECLS
+
+
+/* FIXME/UNKNOWNS
+ *
+ * Should encoding categories be well-known strings/quarks ?
+ *
+ */
+
+/**
+ * GST_ENCODING_CATEGORY_DEVICE:
+ *
+ * #GstEncodingTarget category for device-specific targets.
+ * The name of the target will usually be the contructor and model of the device,
+ * and that target will contain #GstEncodingProfiles suitable for that device.
+ */
+#define GST_ENCODING_CATEGORY_DEVICE		"device"
+
+/**
+ * GST_ENCODING_CATEGORY_ONLINE_SERVICE:
+ *
+ * #GstEncodingTarget category for online-services.
+ * The name of the target will usually be the name of the online service
+ * and that target will contain #GstEncodingProfiles suitable for that online
+ * service.
+ */
+
+#define GST_ENCODING_CATEGORY_ONLINE_SERVICE	"online-service"
+
+/**
+ * GST_ENCODING_CATEGORY_STORAGE_EDITING:
+ *
+ * #GstEncodingTarget category for storage, archiving and editing targets.
+ * Those targets can be lossless and/or provide very fast random access content.
+ * The name of the target will usually be the container type or editing target,
+ * and that target will contain #GstEncodingProfiles suitable for editing or
+ * storage.
+ */
+#define GST_ENCODING_CATEGORY_STORAGE_EDITING   "storage-editing"
+
+/**
+ * GST_ENCODING_CATEGORY_CAPTURE:
+ *
+ * #GstEncodingTarget category for recording and capture.
+ * Targets within this category are optimized for low latency encoding.
+ */
+#define GST_ENCODING_CATEGORY_CAPTURE		"capture"
+
+/**
+ * GstEncodingTarget:
+ *
+ * Collection of #GstEncodingProfile for a specific target or use-case.
+ *
+ * When being stored/loaded, targets come from a specific category, like
+ * #GST_ENCODING_CATEGORY_DEVICE.
+ *
+ * Since: 0.10.32
+ */
+#define GST_TYPE_ENCODING_TARGET			\
+  (gst_encoding_target_get_type ())
+#define GST_ENCODING_TARGET(obj)			\
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODING_TARGET, GstEncodingTarget))
+#define GST_IS_ENCODING_TARGET(obj)			\
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODING_TARGET))
+
+typedef struct _GstEncodingTarget GstEncodingTarget;
+typedef GObjectClass GstEncodingTargetClass;
+
+GType gst_encoding_target_get_type (void);
+
+/**
+ * gst_encoding_target_unref:
+ * @target: a #GstEncodingTarget
+ *
+ * Decreases the reference count of the @target, possibly freeing it.
+ *
+ * Since: 0.10.32
+ */
+#define gst_encoding_target_unref(target) \
+  (g_object_unref ((GObject*) target))
+
+/**
+ * gst_encoding_target_ref:
+ * @target: a #GstEncodingTarget
+ *
+ * Increases the reference count of the @target.
+ *
+ * Since: 0.10.32
+ */
+#define gst_encoding_target_ref(target) \
+  (g_object_ref ((GObject*) target))
+
+GstEncodingTarget *
+gst_encoding_target_new (const gchar *name, const gchar *category,
+			 const gchar *description, const GList *profiles);
+const gchar *gst_encoding_target_get_name (GstEncodingTarget *target);
+const gchar *gst_encoding_target_get_category (GstEncodingTarget *target);
+const gchar *gst_encoding_target_get_description (GstEncodingTarget *target);
+const GList *gst_encoding_target_get_profiles (GstEncodingTarget *target);
+GstEncodingProfile *gst_encoding_target_get_profile (GstEncodingTarget *target,
+						     const gchar *name);
+
+gboolean
+gst_encoding_target_add_profile (GstEncodingTarget *target, GstEncodingProfile *profile);
+
+gboolean gst_encoding_target_save (GstEncodingTarget *target,
+				   GError **error);
+gboolean gst_encoding_target_save_to_file (GstEncodingTarget *target,
+					   const gchar *filepath,
+					   GError **error);
+GstEncodingTarget *gst_encoding_target_load (const gchar *name,
+					     const gchar *category,
+					     GError **error);
+GstEncodingTarget *gst_encoding_target_load_from_file (const gchar *filepath,
+						       GError **error);
+
+GList *gst_encoding_list_available_categories (void);
+GList *gst_encoding_list_all_targets (const gchar * categoryname);
+
+G_END_DECLS
+
+#endif	/* __GST_PROFILE_REGISTRY_H__ */
diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c
new file mode 100644
index 0000000..f96b633
--- /dev/null
+++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c
@@ -0,0 +1,1090 @@
+/* GStreamer
+ * Copyright (C) 2010 Collabora Multimedia
+ *               2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "pbutils.h"
+#include "pbutils-private.h"
+
+static GstDiscovererStreamInfo
+    * gst_discoverer_info_copy_int (GstDiscovererStreamInfo * info,
+    GHashTable * stream_map);
+
+static GstDiscovererContainerInfo
+    * gst_stream_container_info_copy_int (GstDiscovererContainerInfo * ptr,
+    GHashTable * stream_map);
+
+static GstDiscovererAudioInfo
+    * gst_discoverer_audio_info_copy_int (GstDiscovererAudioInfo * ptr);
+
+static GstDiscovererVideoInfo
+    * gst_discoverer_video_info_copy_int (GstDiscovererVideoInfo * ptr);
+
+static GstDiscovererSubtitleInfo
+    * gst_discoverer_subtitle_info_copy_int (GstDiscovererSubtitleInfo * ptr);
+
+/* Per-stream information */
+
+G_DEFINE_TYPE (GstDiscovererStreamInfo, gst_discoverer_stream_info,
+    G_TYPE_OBJECT);
+
+static void
+gst_discoverer_stream_info_init (GstDiscovererStreamInfo * info)
+{
+  /* Nothing needs initialization */
+}
+
+static void
+gst_discoverer_stream_info_finalize (GObject * object)
+{
+  GstDiscovererStreamInfo *info = (GstDiscovererStreamInfo *) object;
+
+  if (info->next)
+    g_object_unref ((GObject *) info->next);
+
+  if (info->caps)
+    gst_caps_unref (info->caps);
+
+  if (info->tags)
+    gst_tag_list_free (info->tags);
+
+  if (info->misc)
+    gst_structure_free (info->misc);
+}
+
+static void
+gst_discoverer_stream_info_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_discoverer_stream_info_finalize;
+}
+
+static GstDiscovererStreamInfo *
+gst_discoverer_stream_info_new (void)
+{
+  return (GstDiscovererStreamInfo *)
+      g_object_new (GST_TYPE_DISCOVERER_STREAM_INFO, NULL);
+}
+
+static GstDiscovererStreamInfo *
+gst_discoverer_info_copy_int (GstDiscovererStreamInfo * info,
+    GHashTable * stream_map)
+{
+  GstDiscovererStreamInfo *ret;
+  GType ltyp;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  ltyp = G_TYPE_FROM_INSTANCE (info);
+
+  if (ltyp == GST_TYPE_DISCOVERER_CONTAINER_INFO) {
+    ret = (GstDiscovererStreamInfo *)
+        gst_stream_container_info_copy_int (
+        (GstDiscovererContainerInfo *) info, stream_map);
+  } else if (ltyp == GST_TYPE_DISCOVERER_AUDIO_INFO) {
+    ret = (GstDiscovererStreamInfo *)
+        gst_discoverer_audio_info_copy_int ((GstDiscovererAudioInfo *) info);
+
+  } else if (ltyp == GST_TYPE_DISCOVERER_VIDEO_INFO) {
+    ret = (GstDiscovererStreamInfo *)
+        gst_discoverer_video_info_copy_int ((GstDiscovererVideoInfo *) info);
+
+  } else if (ltyp == GST_TYPE_DISCOVERER_SUBTITLE_INFO) {
+    ret = (GstDiscovererStreamInfo *)
+        gst_discoverer_subtitle_info_copy_int ((GstDiscovererSubtitleInfo *)
+        info);
+
+  } else
+    ret = gst_discoverer_stream_info_new ();
+
+  if (info->next) {
+    ret->next = gst_discoverer_info_copy_int (info->next, stream_map);
+    ret->next->previous = ret;
+  }
+
+  if (info->caps)
+    ret->caps = gst_caps_copy (info->caps);
+
+  if (info->tags)
+    ret->tags = gst_tag_list_copy (info->tags);
+
+  if (info->misc)
+    ret->misc = gst_structure_copy (info->misc);
+
+  if (stream_map)
+    g_hash_table_insert (stream_map, info, ret);
+
+  return ret;
+}
+
+/* Container information */
+G_DEFINE_TYPE (GstDiscovererContainerInfo, gst_discoverer_container_info,
+    GST_TYPE_DISCOVERER_STREAM_INFO);
+
+static void
+gst_discoverer_container_info_init (GstDiscovererContainerInfo * info)
+{
+  /* Nothing to initialize */
+}
+
+static GstDiscovererContainerInfo *
+gst_discoverer_container_info_new (void)
+{
+  return (GstDiscovererContainerInfo *)
+      g_object_new (GST_TYPE_DISCOVERER_CONTAINER_INFO, NULL);
+}
+
+static void
+gst_discoverer_container_info_finalize (GObject * object)
+{
+  GstDiscovererContainerInfo *info = (GstDiscovererContainerInfo *) object;
+  GList *tmp;
+
+  for (tmp = ((GstDiscovererContainerInfo *) info)->streams; tmp;
+      tmp = tmp->next)
+    g_object_unref ((GObject *) tmp->data);
+
+  gst_discoverer_stream_info_list_free (info->streams);
+
+  gst_discoverer_stream_info_finalize ((GObject *) info);
+}
+
+static void
+gst_discoverer_container_info_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_discoverer_container_info_finalize;
+}
+
+static GstDiscovererContainerInfo *
+gst_stream_container_info_copy_int (GstDiscovererContainerInfo * ptr,
+    GHashTable * stream_map)
+{
+  GstDiscovererContainerInfo *ret;
+  GList *tmp;
+
+  g_return_val_if_fail (ptr != NULL, NULL);
+
+  ret = gst_discoverer_container_info_new ();
+
+  for (tmp = ((GstDiscovererContainerInfo *) ptr)->streams; tmp;
+      tmp = tmp->next) {
+    GstDiscovererStreamInfo *subtop = gst_discoverer_info_copy_int (tmp->data,
+        stream_map);
+    ret->streams = g_list_append (ret->streams, subtop);
+    if (stream_map)
+      g_hash_table_insert (stream_map, tmp->data, subtop);
+  }
+
+  return ret;
+}
+
+/* Audio information */
+G_DEFINE_TYPE (GstDiscovererAudioInfo, gst_discoverer_audio_info,
+    GST_TYPE_DISCOVERER_STREAM_INFO);
+
+static void
+gst_discoverer_audio_info_finalize (GObject * object)
+{
+  GstDiscovererAudioInfo *info = (GstDiscovererAudioInfo *) object;
+
+  g_free (info->language);
+
+  G_OBJECT_CLASS (gst_discoverer_audio_info_parent_class)->finalize (object);
+}
+
+static void
+gst_discoverer_audio_info_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_discoverer_audio_info_finalize;
+}
+
+static void
+gst_discoverer_audio_info_init (GstDiscovererAudioInfo * info)
+{
+  info->language = NULL;
+}
+
+static GstDiscovererAudioInfo *
+gst_discoverer_audio_info_new (void)
+{
+  return (GstDiscovererAudioInfo *)
+      g_object_new (GST_TYPE_DISCOVERER_AUDIO_INFO, NULL);
+}
+
+static GstDiscovererAudioInfo *
+gst_discoverer_audio_info_copy_int (GstDiscovererAudioInfo * ptr)
+{
+  GstDiscovererAudioInfo *ret;
+
+  ret = gst_discoverer_audio_info_new ();
+
+  ret->channels = ptr->channels;
+  ret->sample_rate = ptr->sample_rate;
+  ret->depth = ptr->depth;
+  ret->bitrate = ptr->bitrate;
+  ret->max_bitrate = ptr->max_bitrate;
+  ret->language = g_strdup (ptr->language);
+
+  return ret;
+}
+
+/* Subtitle information */
+G_DEFINE_TYPE (GstDiscovererSubtitleInfo, gst_discoverer_subtitle_info,
+    GST_TYPE_DISCOVERER_STREAM_INFO);
+
+static void
+gst_discoverer_subtitle_info_init (GstDiscovererSubtitleInfo * info)
+{
+  info->language = NULL;
+}
+
+static void
+gst_discoverer_subtitle_info_finalize (GObject * object)
+{
+  GstDiscovererSubtitleInfo *info = (GstDiscovererSubtitleInfo *) object;
+
+  g_free (info->language);
+
+  G_OBJECT_CLASS (gst_discoverer_subtitle_info_parent_class)->finalize (object);
+}
+
+static void
+gst_discoverer_subtitle_info_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_discoverer_subtitle_info_finalize;
+}
+
+static GstDiscovererSubtitleInfo *
+gst_discoverer_subtitle_info_new (void)
+{
+  return (GstDiscovererSubtitleInfo *)
+      g_object_new (GST_TYPE_DISCOVERER_SUBTITLE_INFO, NULL);
+}
+
+static GstDiscovererSubtitleInfo *
+gst_discoverer_subtitle_info_copy_int (GstDiscovererSubtitleInfo * ptr)
+{
+  GstDiscovererSubtitleInfo *ret;
+
+  ret = gst_discoverer_subtitle_info_new ();
+
+  ret->language = g_strdup (ptr->language);
+
+  return ret;
+}
+
+/* Video information */
+G_DEFINE_TYPE (GstDiscovererVideoInfo, gst_discoverer_video_info,
+    GST_TYPE_DISCOVERER_STREAM_INFO);
+
+static void
+gst_discoverer_video_info_class_init (GObjectClass * klass)
+{
+  /* Nothing to initialize */
+}
+
+static void
+gst_discoverer_video_info_init (GstDiscovererVideoInfo * info)
+{
+  /* Nothing to initialize */
+}
+
+static GstDiscovererVideoInfo *
+gst_discoverer_video_info_new (void)
+{
+  return (GstDiscovererVideoInfo *)
+      g_object_new (GST_TYPE_DISCOVERER_VIDEO_INFO, NULL);
+}
+
+static GstDiscovererVideoInfo *
+gst_discoverer_video_info_copy_int (GstDiscovererVideoInfo * ptr)
+{
+  GstDiscovererVideoInfo *ret;
+
+  ret = gst_discoverer_video_info_new ();
+
+  ret->width = ptr->width;
+  ret->height = ptr->height;
+  ret->depth = ptr->depth;
+  ret->framerate_num = ptr->framerate_num;
+  ret->framerate_denom = ptr->framerate_denom;
+  ret->par_num = ptr->par_num;
+  ret->par_denom = ptr->par_denom;
+  ret->interlaced = ptr->interlaced;
+  ret->bitrate = ptr->bitrate;
+  ret->max_bitrate = ptr->max_bitrate;
+  ret->is_image = ptr->is_image;
+
+  return ret;
+}
+
+/* Global stream information */
+G_DEFINE_TYPE (GstDiscovererInfo, gst_discoverer_info, G_TYPE_OBJECT);
+
+static void
+gst_discoverer_info_init (GstDiscovererInfo * info)
+{
+  /* Nothing needs initialization */
+}
+
+static void
+gst_discoverer_info_finalize (GObject * object)
+{
+  GstDiscovererInfo *info = (GstDiscovererInfo *) object;
+  g_free (info->uri);
+
+  if (info->stream_info)
+    g_object_unref ((GObject *) info->stream_info);
+
+  if (info->misc)
+    gst_structure_free (info->misc);
+
+  g_list_free (info->stream_list);
+
+  if (info->tags)
+    gst_tag_list_free (info->tags);
+}
+
+static GstDiscovererInfo *
+gst_discoverer_info_new (void)
+{
+  return (GstDiscovererInfo *) g_object_new (GST_TYPE_DISCOVERER_INFO, NULL);
+}
+
+GstDiscovererInfo *
+gst_discoverer_info_copy (GstDiscovererInfo * ptr)
+{
+  GstDiscovererInfo *ret;
+  GHashTable *stream_map = g_hash_table_new (g_direct_hash, NULL);
+  GList *tmp;
+
+  g_return_val_if_fail (ptr != NULL, NULL);
+
+  ret = gst_discoverer_info_new ();
+
+  ret->uri = g_strdup (ptr->uri);
+  if (ptr->stream_info) {
+    ret->stream_info = gst_discoverer_info_copy_int (ptr->stream_info,
+        stream_map);
+  }
+  ret->duration = ptr->duration;
+  if (ptr->misc)
+    ret->misc = gst_structure_copy (ptr->misc);
+
+  /* We need to set up the new list of streams to correspond to old one. The
+   * list just contains a set of pointers to streams in the stream_info tree,
+   * so we keep a map of old stream info objects to the corresponding new
+   * ones and use that to figure out correspondence in stream_list. */
+  for (tmp = ptr->stream_list; tmp; tmp = tmp->next) {
+    GstDiscovererStreamInfo *old_stream = (GstDiscovererStreamInfo *) tmp->data;
+    GstDiscovererStreamInfo *new_stream = g_hash_table_lookup (stream_map,
+        old_stream);
+    g_assert (new_stream != NULL);
+    ret->stream_list = g_list_append (ret->stream_list, new_stream);
+  }
+
+  if (ptr->tags)
+    ret->tags = gst_tag_list_copy (ptr->tags);
+
+  g_hash_table_destroy (stream_map);
+  return ret;
+}
+
+static void
+gst_discoverer_info_class_init (GObjectClass * klass)
+{
+  klass->finalize = gst_discoverer_info_finalize;
+}
+
+/**
+ * gst_discoverer_stream_info_list_free:
+ * @infos: a #GList of #GstDiscovererStreamInfo
+ *
+ * Decrements the reference count of all contained #GstDiscovererStreamInfo
+ * and fress the #GList.
+ */
+void
+gst_discoverer_stream_info_list_free (GList * infos)
+{
+  GList *tmp;
+
+  for (tmp = infos; tmp; tmp = tmp->next)
+    gst_discoverer_stream_info_unref ((GstDiscovererStreamInfo *) tmp->data);
+  g_list_free (infos);
+}
+
+/**
+ * gst_discoverer_info_get_streams:
+ * @info: a #GstDiscovererInfo
+ * @streamtype: a #GType derived from #GstDiscovererStreamInfo
+ *
+ * Finds the #GstDiscovererStreamInfo contained in @info that match the
+ * given @streamtype.
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): A #GList of
+ * matching #GstDiscovererStreamInfo. The caller should free it with
+ * gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.31
+ */
+GList *
+gst_discoverer_info_get_streams (GstDiscovererInfo * info, GType streamtype)
+{
+  GList *tmp, *res = NULL;
+
+  for (tmp = info->stream_list; tmp; tmp = tmp->next) {
+    GstDiscovererStreamInfo *stmp = (GstDiscovererStreamInfo *) tmp->data;
+
+    if (G_TYPE_CHECK_INSTANCE_TYPE (stmp, streamtype))
+      res = g_list_append (res, gst_discoverer_stream_info_ref (stmp));
+  }
+
+  return res;
+}
+
+/**
+ * gst_discoverer_info_get_audio_streams:
+ * @info: a #GstDiscovererInfo
+ *
+ * Finds all the #GstDiscovererAudioInfo contained in @info
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): A #GList of
+ * matching #GstDiscovererStreamInfo. The caller should free it with
+ * gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.31
+ */
+GList *
+gst_discoverer_info_get_audio_streams (GstDiscovererInfo * info)
+{
+  return gst_discoverer_info_get_streams (info, GST_TYPE_DISCOVERER_AUDIO_INFO);
+}
+
+/**
+ * gst_discoverer_info_get_video_streams:
+ * @info: a #GstDiscovererInfo
+ *
+ * Finds all the #GstDiscovererVideoInfo contained in @info
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): A #GList of
+ * matching #GstDiscovererStreamInfo. The caller should free it with
+ * gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.31
+ */
+GList *
+gst_discoverer_info_get_video_streams (GstDiscovererInfo * info)
+{
+  return gst_discoverer_info_get_streams (info, GST_TYPE_DISCOVERER_VIDEO_INFO);
+}
+
+/**
+ * gst_discoverer_info_get_subtitle_streams:
+ * @info: a #GstDiscovererInfo
+ *
+ * Finds all the #GstDiscovererSubtitleInfo contained in @info
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): A #GList of
+ * matching #GstDiscovererStreamInfo. The caller should free it with
+ * gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.36
+ */
+GList *
+gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo * info)
+{
+  return gst_discoverer_info_get_streams (info,
+      GST_TYPE_DISCOVERER_SUBTITLE_INFO);
+}
+
+/**
+ * gst_discoverer_info_get_container_streams:
+ * @info: a #GstDiscovererInfo
+ *
+ * Finds all the #GstDiscovererContainerInfo contained in @info
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): A #GList of
+ * matching #GstDiscovererStreamInfo. The caller should free it with
+ * gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.31
+ */
+GList *
+gst_discoverer_info_get_container_streams (GstDiscovererInfo * info)
+{
+  return gst_discoverer_info_get_streams (info,
+      GST_TYPE_DISCOVERER_CONTAINER_INFO);
+}
+
+/**
+ * gst_discoverer_stream_info_get_stream_type_nick:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: a human readable name for the stream type of the given @info (ex : "audio",
+ * "container",...).
+ *
+ * Since: 0.10.31
+ */
+const gchar *
+gst_discoverer_stream_info_get_stream_type_nick (GstDiscovererStreamInfo * info)
+{
+  if (GST_IS_DISCOVERER_CONTAINER_INFO (info))
+    return "container";
+  if (GST_IS_DISCOVERER_AUDIO_INFO (info))
+    return "audio";
+  if (GST_IS_DISCOVERER_VIDEO_INFO (info)) {
+    if (gst_discoverer_video_info_is_image ((GstDiscovererVideoInfo *)
+            info))
+      return "video(image)";
+    else
+      return "video";
+  }
+  if (GST_IS_DISCOVERER_SUBTITLE_INFO (info))
+    return "subtitles";
+  return "unknown";
+}
+
+/* ACCESSORS */
+
+
+#define GENERIC_ACCESSOR_CODE(parent, parenttype, parentgtype, fieldname, type, failval) \
+  type parent##_get_##fieldname(const parenttype info) {			\
+    g_return_val_if_fail(G_TYPE_CHECK_INSTANCE_TYPE((info), parentgtype), failval); \
+    return (info)->fieldname;				\
+  }
+
+/**
+ * gst_discoverer_stream_info_get_previous:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer full): the previous #GstDiscovererStreamInfo in a chain.
+ * %NULL for starting points. Unref with #gst_discoverer_stream_info_unref
+ * after usage.
+ *
+ * Since: 0.10.31
+ */
+GstDiscovererStreamInfo *
+gst_discoverer_stream_info_get_previous (GstDiscovererStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_STREAM_INFO (info), NULL);
+
+  if (info->previous)
+    return gst_discoverer_stream_info_ref (info->previous);
+  return NULL;
+}
+
+/**
+ * gst_discoverer_stream_info_get_next:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer full): the next #GstDiscovererStreamInfo in a chain. %NULL
+ * for final streams.
+ * Unref with #gst_discoverer_stream_info_unref after usage.
+ *
+ * Since: 0.10.31
+ */
+GstDiscovererStreamInfo *
+gst_discoverer_stream_info_get_next (GstDiscovererStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_STREAM_INFO (info), NULL);
+
+  if (info->next)
+    return gst_discoverer_stream_info_ref (info->next);
+  return NULL;
+}
+
+
+/**
+ * gst_discoverer_stream_info_get_caps:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer full): the #GstCaps of the stream. Unref with
+ * #gst_caps_unref after usage.
+ *
+ * Since: 0.10.31
+ */
+GstCaps *
+gst_discoverer_stream_info_get_caps (GstDiscovererStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_STREAM_INFO (info), NULL);
+
+  if (info->caps)
+    return gst_caps_ref (info->caps);
+  return NULL;
+}
+
+/**
+ * gst_discoverer_stream_info_get_tags:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer none): the tags contained in this stream. If you wish to
+ * use the tags after the life-time of @info you will need to copy them.
+ *
+ * Since: 0.10.31
+ */
+
+const GstTagList *
+gst_discoverer_stream_info_get_tags (GstDiscovererStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_STREAM_INFO (info), NULL);
+
+  return info->tags;
+}
+
+/**
+ * gst_discoverer_stream_info_get_misc:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer none): additional information regarding the stream (for
+ * example codec version, profile, etc..). If you wish to use the #GstStructure
+ * after the life-time of @info you will need to copy it.
+ *
+ * Since: 0.10.31
+ */
+const GstStructure *
+gst_discoverer_stream_info_get_misc (GstDiscovererStreamInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_STREAM_INFO (info), NULL);
+
+  return info->misc;
+}
+
+/* GstDiscovererContainerInfo */
+
+/**
+ * gst_discoverer_container_info_get_streams:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): the list of
+ * #GstDiscovererStreamInfo this container stream offers.
+ * Free with gst_discoverer_stream_info_list_free() after usage.
+ *
+ * Since: 0.10.31
+ */
+
+GList *
+gst_discoverer_container_info_get_streams (GstDiscovererContainerInfo * info)
+{
+  GList *res = NULL, *tmp;
+
+  g_return_val_if_fail (GST_IS_DISCOVERER_CONTAINER_INFO (info), NULL);
+
+  for (tmp = info->streams; tmp; tmp = tmp->next)
+    res =
+        g_list_append (res,
+        gst_discoverer_stream_info_ref ((GstDiscovererStreamInfo *) tmp->data));
+
+  return res;
+}
+
+/* GstDiscovererAudioInfo */
+
+#define AUDIO_INFO_ACCESSOR_CODE(fieldname, type, failval)		\
+  GENERIC_ACCESSOR_CODE(gst_discoverer_audio_info, GstDiscovererAudioInfo*, \
+			GST_TYPE_DISCOVERER_AUDIO_INFO,		\
+			fieldname, type, failval)
+
+/**
+ * gst_discoverer_audio_info_get_channels:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the number of channels in the stream.
+ *
+ * Since: 0.10.31
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (channels, guint, 0);
+
+/**
+ * gst_discoverer_audio_info_get_sample_rate:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the sample rate of the stream in Hertz.
+ *
+ * Since: 0.10.31
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (sample_rate, guint, 0);
+
+/**
+ * gst_discoverer_audio_info_get_depth:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the number of bits used per sample in each channel.
+ *
+ * Since: 0.10.31
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (depth, guint, 0);
+
+/**
+ * gst_discoverer_audio_info_get_bitrate:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the average or nominal bitrate of the stream in bits/second.
+ *
+ * Since: 0.10.31
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (bitrate, guint, 0);
+
+/**
+ * gst_discoverer_audio_info_get_max_bitrate:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the maximum bitrate of the stream in bits/second.
+ *
+ * Since: 0.10.31
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (max_bitrate, guint, 0);
+
+/**
+ * gst_discoverer_audio_info_get_language:
+ * @info: a #GstDiscovererAudioInfo
+ *
+ * Returns: the language of the stream, or NULL if unknown.
+ *
+ * Since: 0.10.36
+ */
+
+AUDIO_INFO_ACCESSOR_CODE (language, const gchar *, NULL);
+
+/* GstDiscovererVideoInfo */
+
+#define VIDEO_INFO_ACCESSOR_CODE(fieldname, type, failval)		\
+  GENERIC_ACCESSOR_CODE(gst_discoverer_video_info, GstDiscovererVideoInfo*, \
+			GST_TYPE_DISCOVERER_VIDEO_INFO,			\
+			fieldname, type, failval)
+
+/**
+ * gst_discoverer_video_info_get_width:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the width of the video stream in pixels.
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (width, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_height:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the height of the video stream in pixels.
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (height, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_depth:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the depth in bits of the video stream.
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (depth, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_framerate_num:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the framerate of the video stream (numerator).
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (framerate_num, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_framerate_denom:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the framerate of the video stream (denominator).
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (framerate_denom, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_par_num:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the Pixel Aspect Ratio (PAR) of the video stream (numerator).
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (par_num, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_par_denom:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the Pixel Aspect Ratio (PAR) of the video stream (denominator).
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (par_denom, guint, 0);
+
+/**
+ * gst_discoverer_video_info_is_interlaced:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: %TRUE if the stream is interlaced, else %FALSE.
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_discoverer_video_info_is_interlaced (const GstDiscovererVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_VIDEO_INFO (info), FALSE);
+
+  return info->interlaced;
+}
+
+/**
+ * gst_discoverer_video_info_get_bitrate:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the average or nominal bitrate of the video stream in bits/second.
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (bitrate, guint, 0);
+
+/**
+ * gst_discoverer_video_info_get_max_bitrate:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: the maximum bitrate of the video stream in bits/second.
+ *
+ * Since: 0.10.31
+ */
+
+VIDEO_INFO_ACCESSOR_CODE (max_bitrate, guint, 0);
+
+/**
+ * gst_discoverer_video_info_is_image:
+ * @info: a #GstDiscovererVideoInfo
+ *
+ * Returns: #TRUE if the video stream corresponds to an image (i.e. only contains
+ * one frame).
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_discoverer_video_info_is_image (const GstDiscovererVideoInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_VIDEO_INFO (info), FALSE);
+
+  return info->is_image;
+}
+
+/* GstDiscovererSubtitleInfo */
+
+#define SUBTITLE_INFO_ACCESSOR_CODE(fieldname, type, failval)                     \
+  GENERIC_ACCESSOR_CODE(gst_discoverer_subtitle_info, GstDiscovererSubtitleInfo*, \
+			GST_TYPE_DISCOVERER_SUBTITLE_INFO,                        \
+			fieldname, type, failval)
+
+/**
+ * gst_discoverer_subtitle_info_get_language:
+ * @info: a #GstDiscovererSubtitleInfo
+ *
+ * Returns: the language of the stream, or NULL if unknown.
+ *
+ * Since: 0.10.36
+ */
+
+SUBTITLE_INFO_ACCESSOR_CODE (language, const gchar *, NULL);
+
+/* GstDiscovererInfo */
+
+#define DISCOVERER_INFO_ACCESSOR_CODE(fieldname, type, failval)		\
+  GENERIC_ACCESSOR_CODE(gst_discoverer_info, GstDiscovererInfo*,	\
+			GST_TYPE_DISCOVERER_INFO,			\
+			fieldname, type, failval)
+
+/**
+ * gst_discoverer_info_get_uri:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: (transfer none): the URI to which this information corresponds to.
+ * Copy it if you wish to use it after the life-time of @info.
+ *
+ * Since: 0.10.31
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (uri, const gchar *, NULL);
+
+/**
+ * gst_discoverer_info_get_result:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: the result of the discovery as a #GstDiscovererResult.
+ *
+ * Since: 0.10.31
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (result, GstDiscovererResult, GST_DISCOVERER_OK);
+
+/**
+ * gst_discoverer_info_get_stream_info:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: (transfer full): the structure (or topology) of the URI as a
+ * #GstDiscovererStreamInfo.
+ * This structure can be traversed to see the original hierarchy. Unref with
+ * gst_discoverer_stream_info_unref() after usage.
+ *
+ * Since: 0.10.31
+ */
+
+GstDiscovererStreamInfo *
+gst_discoverer_info_get_stream_info (GstDiscovererInfo * info)
+{
+  g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+  if (info->stream_info)
+    return gst_discoverer_stream_info_ref (info->stream_info);
+  return NULL;
+}
+
+/**
+ * gst_discoverer_info_get_stream_list:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: (transfer full) (element-type Gst.DiscovererStreamInfo): the list of
+ * all streams contained in the #info. Free after usage
+ * with gst_discoverer_stream_info_list_free().
+ *
+ * Since: 0.10.31
+ */
+GList *
+gst_discoverer_info_get_stream_list (GstDiscovererInfo * info)
+{
+  GList *res = NULL, *tmp;
+
+  g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
+  for (tmp = info->stream_list; tmp; tmp = tmp->next)
+    res =
+        g_list_append (res,
+        gst_discoverer_stream_info_ref ((GstDiscovererStreamInfo *) tmp->data));
+
+  return res;
+}
+
+/**
+ * gst_discoverer_info_get_duration:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: the duration of the URI in #GstClockTime (nanoseconds).
+ *
+ * Since: 0.10.31
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (duration, GstClockTime, GST_CLOCK_TIME_NONE);
+
+/**
+ * gst_discoverer_info_get_seekable:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: the wheter the URI is seekable.
+ *
+ * Since: 0.10.32
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (seekable, gboolean, FALSE);
+
+/**
+ * gst_discoverer_info_get_misc:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: (transfer none): Miscellaneous information stored as a #GstStructure
+ * (for example: information about missing plugins). If you wish to use the
+ * #GstStructure after the life-time of @info, you will need to copy it.
+ *
+ * Since: 0.10.31
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (misc, const GstStructure *, NULL);
+
+/**
+ * gst_discoverer_info_get_tags:
+ * @info: a #GstDiscovererInfo
+ *
+ * Returns: (transfer none): all tags contained in the URI. If you wish to use
+ * the tags after the life-time of @info, you will need to copy them.
+ *
+ * Since: 0.10.31
+ */
+
+DISCOVERER_INFO_ACCESSOR_CODE (tags, const GstTagList *, NULL);
+
+/**
+ * gst_discoverer_info_ref:
+ * @info: a #GstDiscovererInfo
+ *
+ * Increments the reference count of @info.
+ *
+ * Returns: the same #GstDiscovererInfo object
+ *
+ * Since: 0.10.31
+ */
+
+/**
+ * gst_discoverer_info_unref:
+ * @info: a #GstDiscovererInfo
+ *
+ * Decrements the reference count of @info.
+ *
+ * Since: 0.10.31
+ */
+
+/**
+ * gst_discoverer_stream_info_ref:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Increments the reference count of @info.
+ *
+ * Returns: the same #GstDiscovererStreamInfo object
+ *
+ * Since: 0.10.31
+ */
+
+/**
+ * gst_discoverer_stream_info_unref:
+ * @info: a #GstDiscovererStreamInfo
+ *
+ * Decrements the reference count of @info.
+ *
+ * Since: 0.10.31
+ */
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c
new file mode 100644
index 0000000..6a1dbc8
--- /dev/null
+++ b/gst-libs/gst/pbutils/gstdiscoverer.c
@@ -0,0 +1,1581 @@
+/* GStreamer
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *               2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstdiscoverer
+ * @short_description: Utility for discovering information on URIs.
+ *
+ * The #GstDiscoverer is a utility object which allows to get as much
+ * information as possible from one or many URIs.
+ *
+ * It provides two APIs, allowing usage in blocking or non-blocking mode.
+ *
+ * The blocking mode just requires calling gst_discoverer_discover_uri()
+ * with the URI one wishes to discover.
+ *
+ * The non-blocking mode requires a running #GMainLoop in the default
+ * #GMainContext, where one connects to the various signals, appends the
+ * URIs to be processed (through gst_discoverer_discover_uri_async()) and then
+ * asks for the discovery to begin (through gst_discoverer_start()).
+ *
+ * All the information is returned in a #GstDiscovererInfo structure.
+ *
+ * Since: 0.10.31
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/video/video.h>
+
+#include "pbutils.h"
+#include "pbutils-marshal.h"
+#include "pbutils-private.h"
+
+GST_DEBUG_CATEGORY_STATIC (discoverer_debug);
+#define GST_CAT_DEFAULT discoverer_debug
+
+static GQuark _CAPS_QUARK;
+static GQuark _TAGS_QUARK;
+static GQuark _MISSING_PLUGIN_QUARK;
+static GQuark _STREAM_TOPOLOGY_QUARK;
+static GQuark _TOPOLOGY_PAD_QUARK;
+
+
+typedef struct
+{
+  GstDiscoverer *dc;
+  GstPad *pad;
+  GstElement *queue;
+  GstElement *sink;
+  GstTagList *tags;
+} PrivateStream;
+
+struct _GstDiscovererPrivate
+{
+  gboolean async;
+
+  /* allowed time to discover each uri in nanoseconds */
+  GstClockTime timeout;
+
+  /* list of pending URI to process (current excluded) */
+  GList *pending_uris;
+
+  GMutex *lock;
+
+  /* TRUE if processing a URI */
+  gboolean processing;
+
+  /* TRUE if discoverer has been started */
+  gboolean running;
+
+  /* current items */
+  GstDiscovererInfo *current_info;
+  GError *current_error;
+  GstStructure *current_topology;
+
+  /* List of private streams */
+  GList *streams;
+
+  /* Global elements */
+  GstBin *pipeline;
+  GstElement *uridecodebin;
+  GstBus *bus;
+
+  GType decodebin_type;
+
+  /* Custom main context variables */
+  GMainContext *ctx;
+  guint sourceid;
+  guint timeoutid;
+
+  /* reusable queries */
+  GstQuery *seeking_query;
+
+  /* Handler ids for various callbacks */
+  gulong pad_added_id;
+  gulong pad_remove_id;
+  gulong element_added_id;
+  gulong bus_cb_id;
+};
+
+#define DISCO_LOCK(dc) g_mutex_lock (dc->priv->lock);
+#define DISCO_UNLOCK(dc) g_mutex_unlock (dc->priv->lock);
+
+static void
+_do_init (void)
+{
+  GST_DEBUG_CATEGORY_INIT (discoverer_debug, "discoverer", 0, "Discoverer");
+
+  _CAPS_QUARK = g_quark_from_static_string ("caps");
+  _TAGS_QUARK = g_quark_from_static_string ("tags");
+  _MISSING_PLUGIN_QUARK = g_quark_from_static_string ("missing-plugin");
+  _STREAM_TOPOLOGY_QUARK = g_quark_from_static_string ("stream-topology");
+  _TOPOLOGY_PAD_QUARK = g_quark_from_static_string ("pad");
+};
+
+G_DEFINE_TYPE_EXTENDED (GstDiscoverer, gst_discoverer, G_TYPE_OBJECT, 0,
+    _do_init ());
+
+enum
+{
+  SIGNAL_FINISHED,
+  SIGNAL_STARTING,
+  SIGNAL_DISCOVERED,
+  LAST_SIGNAL
+};
+
+#define DEFAULT_PROP_TIMEOUT 15 * GST_SECOND
+
+enum
+{
+  PROP_0,
+  PROP_TIMEOUT
+};
+
+static guint gst_discoverer_signals[LAST_SIGNAL] = { 0 };
+
+static void gst_discoverer_set_timeout (GstDiscoverer * dc,
+    GstClockTime timeout);
+static gboolean async_timeout_cb (GstDiscoverer * dc);
+
+static void discoverer_bus_cb (GstBus * bus, GstMessage * msg,
+    GstDiscoverer * dc);
+static void uridecodebin_pad_added_cb (GstElement * uridecodebin, GstPad * pad,
+    GstDiscoverer * dc);
+static void uridecodebin_pad_removed_cb (GstElement * uridecodebin,
+    GstPad * pad, GstDiscoverer * dc);
+
+static void gst_discoverer_dispose (GObject * dc);
+static void gst_discoverer_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_discoverer_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void
+gst_discoverer_class_init (GstDiscovererClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->dispose = gst_discoverer_dispose;
+
+  gobject_class->set_property = gst_discoverer_set_property;
+  gobject_class->get_property = gst_discoverer_get_property;
+
+  g_type_class_add_private (klass, sizeof (GstDiscovererPrivate));
+
+  /* properties */
+  /**
+   * GstDiscoverer:timeout
+   *
+   * The duration (in nanoseconds) after which the discovery of an individual
+   * URI will timeout.
+   *
+   * If the discovery of a URI times out, the %GST_DISCOVERER_TIMEOUT will be
+   * set on the result flags.
+   */
+  g_object_class_install_property (gobject_class, PROP_TIMEOUT,
+      g_param_spec_uint64 ("timeout", "timeout", "Timeout",
+          GST_SECOND, 3600 * GST_SECOND, DEFAULT_PROP_TIMEOUT,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  /* signals */
+  /**
+   * GstDiscoverer::finished:
+   * @discoverer: the #GstDiscoverer
+   *
+   * Will be emitted when all pending URIs have been processed.
+   */
+  gst_discoverer_signals[SIGNAL_FINISHED] =
+      g_signal_new ("finished", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstDiscovererClass, finished),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstDiscoverer::starting:
+   * @discoverer: the #GstDiscoverer
+   *
+   * Will be emitted when the discover starts analyzing the pending URIs
+   */
+  gst_discoverer_signals[SIGNAL_STARTING] =
+      g_signal_new ("starting", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstDiscovererClass, starting),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstDiscoverer::discovered:
+   * @discoverer: the #GstDiscoverer
+   * @info: the results #GstDiscovererInfo
+   * @error: (type GLib.Error): #GError, which will be non-NULL if an error
+   *                            occurred during discovery
+   *
+   * Will be emitted when all information on a URI could be discovered.
+   */
+  gst_discoverer_signals[SIGNAL_DISCOVERED] =
+      g_signal_new ("discovered", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstDiscovererClass, discovered),
+      NULL, NULL, pbutils_marshal_VOID__POINTER_BOXED,
+      G_TYPE_NONE, 2, GST_TYPE_DISCOVERER_INFO, GST_TYPE_G_ERROR);
+}
+
+static void
+uridecodebin_element_added_cb (GstElement * uridecodebin,
+    GstElement * child, GstDiscoverer * dc)
+{
+  GST_DEBUG ("New element added to uridecodebin : %s",
+      GST_ELEMENT_NAME (child));
+
+  if (G_OBJECT_TYPE (child) == dc->priv->decodebin_type) {
+    g_object_set (child, "post-stream-topology", TRUE, NULL);
+  }
+}
+
+static void
+gst_discoverer_init (GstDiscoverer * dc)
+{
+  GstElement *tmp;
+  GstFormat format = GST_FORMAT_TIME;
+
+  dc->priv = G_TYPE_INSTANCE_GET_PRIVATE (dc, GST_TYPE_DISCOVERER,
+      GstDiscovererPrivate);
+
+  dc->priv->timeout = DEFAULT_PROP_TIMEOUT;
+  dc->priv->async = FALSE;
+
+  dc->priv->lock = g_mutex_new ();
+
+  GST_LOG ("Creating pipeline");
+  dc->priv->pipeline = (GstBin *) gst_pipeline_new ("Discoverer");
+  GST_LOG_OBJECT (dc, "Creating uridecodebin");
+  dc->priv->uridecodebin =
+      gst_element_factory_make ("uridecodebin", "discoverer-uri");
+  if (G_UNLIKELY (dc->priv->uridecodebin == NULL)) {
+    GST_ERROR ("Can't create uridecodebin");
+    return;
+  }
+  GST_LOG_OBJECT (dc, "Adding uridecodebin to pipeline");
+  gst_bin_add (dc->priv->pipeline, dc->priv->uridecodebin);
+
+  dc->priv->pad_added_id =
+      g_signal_connect_object (dc->priv->uridecodebin, "pad-added",
+      G_CALLBACK (uridecodebin_pad_added_cb), dc, 0);
+  dc->priv->pad_remove_id =
+      g_signal_connect_object (dc->priv->uridecodebin, "pad-removed",
+      G_CALLBACK (uridecodebin_pad_removed_cb), dc, 0);
+
+  GST_LOG_OBJECT (dc, "Getting pipeline bus");
+  dc->priv->bus = gst_pipeline_get_bus ((GstPipeline *) dc->priv->pipeline);
+
+  dc->priv->bus_cb_id =
+      g_signal_connect_object (dc->priv->bus, "message",
+      G_CALLBACK (discoverer_bus_cb), dc, 0);
+
+  GST_DEBUG_OBJECT (dc, "Done initializing Discoverer");
+
+  /* This is ugly. We get the GType of decodebin so we can quickly detect
+   * when a decodebin is added to uridecodebin so we can set the
+   * post-stream-topology setting to TRUE */
+  dc->priv->element_added_id =
+      g_signal_connect_object (dc->priv->uridecodebin, "element-added",
+      G_CALLBACK (uridecodebin_element_added_cb), dc, 0);
+  tmp = gst_element_factory_make ("decodebin", NULL);
+  dc->priv->decodebin_type = G_OBJECT_TYPE (tmp);
+  gst_object_unref (tmp);
+
+  /* create queries */
+  dc->priv->seeking_query = gst_query_new_seeking (format);
+}
+
+static void
+discoverer_reset (GstDiscoverer * dc)
+{
+  GST_DEBUG_OBJECT (dc, "Resetting");
+
+  if (dc->priv->pending_uris) {
+    g_list_foreach (dc->priv->pending_uris, (GFunc) g_free, NULL);
+    g_list_free (dc->priv->pending_uris);
+    dc->priv->pending_uris = NULL;
+  }
+
+  if (dc->priv->pipeline)
+    gst_element_set_state ((GstElement *) dc->priv->pipeline, GST_STATE_NULL);
+}
+
+#define DISCONNECT_SIGNAL(o,i) G_STMT_START{           \
+  if ((i) && g_signal_handler_is_connected ((o), (i))) \
+    g_signal_handler_disconnect ((o), (i));            \
+  (i) = 0;                                             \
+}G_STMT_END
+
+static void
+gst_discoverer_dispose (GObject * obj)
+{
+  GstDiscoverer *dc = (GstDiscoverer *) obj;
+
+  GST_DEBUG_OBJECT (dc, "Disposing");
+
+  discoverer_reset (dc);
+
+  if (G_LIKELY (dc->priv->pipeline)) {
+    /* Workaround for bug #118536 */
+    DISCONNECT_SIGNAL (dc->priv->uridecodebin, dc->priv->pad_added_id);
+    DISCONNECT_SIGNAL (dc->priv->uridecodebin, dc->priv->pad_remove_id);
+    DISCONNECT_SIGNAL (dc->priv->uridecodebin, dc->priv->element_added_id);
+    DISCONNECT_SIGNAL (dc->priv->bus, dc->priv->bus_cb_id);
+
+    /* pipeline was set to NULL in _reset */
+    gst_object_unref (dc->priv->pipeline);
+    gst_object_unref (dc->priv->bus);
+
+    dc->priv->pipeline = NULL;
+    dc->priv->uridecodebin = NULL;
+    dc->priv->bus = NULL;
+  }
+
+  gst_discoverer_stop (dc);
+
+  if (dc->priv->lock) {
+    g_mutex_free (dc->priv->lock);
+    dc->priv->lock = NULL;
+  }
+
+  if (dc->priv->seeking_query) {
+    gst_query_unref (dc->priv->seeking_query);
+    dc->priv->seeking_query = NULL;
+  }
+
+  G_OBJECT_CLASS (gst_discoverer_parent_class)->dispose (obj);
+}
+
+static void
+gst_discoverer_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstDiscoverer *dc = (GstDiscoverer *) object;
+
+  switch (prop_id) {
+    case PROP_TIMEOUT:
+      gst_discoverer_set_timeout (dc, g_value_get_uint64 (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_discoverer_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstDiscoverer *dc = (GstDiscoverer *) object;
+
+  switch (prop_id) {
+    case PROP_TIMEOUT:
+      DISCO_LOCK (dc);
+      g_value_set_uint64 (value, dc->priv->timeout);
+      DISCO_UNLOCK (dc);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_discoverer_set_timeout (GstDiscoverer * dc, GstClockTime timeout)
+{
+  GST_DEBUG_OBJECT (dc, "timeout : %" GST_TIME_FORMAT, GST_TIME_ARGS (timeout));
+
+  /* FIXME : update current pending timeout if we're running */
+  DISCO_LOCK (dc);
+  dc->priv->timeout = timeout;
+  DISCO_UNLOCK (dc);
+}
+
+static GstProbeReturn
+_event_probe (GstPad * pad, GstProbeType type, GstEvent * event,
+    PrivateStream * ps)
+{
+  if (GST_EVENT_TYPE (event) == GST_EVENT_TAG) {
+    GstTagList *tl = NULL, *tmp;
+
+    gst_event_parse_tag (event, &tl);
+    GST_DEBUG_OBJECT (pad, "tags %" GST_PTR_FORMAT, tl);
+    DISCO_LOCK (ps->dc);
+    /* If preroll is complete, drop these tags - the collected information is
+     * possibly already being processed and adding more tags would be racy */
+    if (G_LIKELY (ps->dc->priv->processing)) {
+      GST_DEBUG_OBJECT (pad, "private stream %p old tags %" GST_PTR_FORMAT, ps,
+          ps->tags);
+      tmp = gst_tag_list_merge (ps->tags, tl, GST_TAG_MERGE_APPEND);
+      if (ps->tags)
+        gst_tag_list_free (ps->tags);
+      ps->tags = tmp;
+      GST_DEBUG_OBJECT (pad, "private stream %p new tags %" GST_PTR_FORMAT, ps,
+          tmp);
+    } else
+      GST_DEBUG_OBJECT (pad, "Dropping tags since preroll is done");
+    DISCO_UNLOCK (ps->dc);
+  }
+
+  return GST_PROBE_OK;
+}
+
+static gboolean
+is_subtitle_caps (const GstCaps * caps)
+{
+  static GstCaps *subs_caps = NULL;
+
+  if (!subs_caps) {
+    subs_caps = gst_caps_from_string ("text/plain; text/x-pango-markup; "
+        "subpicture/x-pgs; subpicture/x-dvb; application/x-subtitle-unknown; "
+        "application/x-ssa; application/x-ass; subtitle/x-kate; "
+        "application/x-kate; video/x-dvd-subpicture; ");
+  }
+
+  return gst_caps_can_intersect (caps, subs_caps);
+}
+
+static void
+uridecodebin_pad_added_cb (GstElement * uridecodebin, GstPad * pad,
+    GstDiscoverer * dc)
+{
+  PrivateStream *ps;
+  GstPad *sinkpad = NULL;
+  GstCaps *caps;
+
+  GST_DEBUG_OBJECT (dc, "pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  ps = g_slice_new0 (PrivateStream);
+
+  ps->dc = dc;
+  ps->pad = pad;
+  ps->queue = gst_element_factory_make ("queue", NULL);
+  ps->sink = gst_element_factory_make ("fakesink", NULL);
+
+  if (G_UNLIKELY (ps->queue == NULL || ps->sink == NULL))
+    goto error;
+
+  g_object_set (ps->sink, "silent", TRUE, NULL);
+  g_object_set (ps->queue, "max-size-buffers", 1, "silent", TRUE, NULL);
+
+  caps = gst_pad_get_caps (pad, NULL);
+
+  if (is_subtitle_caps (caps)) {
+    /* Subtitle streams are sparse and may not provide any information - don't
+     * wait for data to preroll */
+    g_object_set (ps->sink, "async", FALSE, NULL);
+  }
+
+  gst_caps_unref (caps);
+
+  gst_bin_add_many (dc->priv->pipeline, ps->queue, ps->sink, NULL);
+
+  if (!gst_element_link_pads_full (ps->queue, "src", ps->sink, "sink",
+          GST_PAD_LINK_CHECK_NOTHING))
+    goto error;
+  if (!gst_element_sync_state_with_parent (ps->sink))
+    goto error;
+  if (!gst_element_sync_state_with_parent (ps->queue))
+    goto error;
+
+  sinkpad = gst_element_get_static_pad (ps->queue, "sink");
+  if (sinkpad == NULL)
+    goto error;
+  if (gst_pad_link_full (pad, sinkpad,
+          GST_PAD_LINK_CHECK_NOTHING) != GST_PAD_LINK_OK)
+    goto error;
+  gst_object_unref (sinkpad);
+
+  /* Add an event probe */
+  gst_pad_add_probe (pad, GST_PROBE_TYPE_EVENT,
+      (GstPadProbeCallback) _event_probe, ps, NULL);
+
+  DISCO_LOCK (dc);
+  dc->priv->streams = g_list_append (dc->priv->streams, ps);
+  DISCO_UNLOCK (dc);
+
+  GST_DEBUG_OBJECT (dc, "Done handling pad");
+
+  return;
+
+error:
+  GST_ERROR_OBJECT (dc, "Error while handling pad");
+  if (sinkpad)
+    gst_object_unref (sinkpad);
+  if (ps->queue)
+    gst_object_unref (ps->queue);
+  if (ps->sink)
+    gst_object_unref (ps->sink);
+  g_slice_free (PrivateStream, ps);
+  return;
+}
+
+static void
+uridecodebin_pad_removed_cb (GstElement * uridecodebin, GstPad * pad,
+    GstDiscoverer * dc)
+{
+  GList *tmp;
+  PrivateStream *ps;
+  GstPad *sinkpad;
+
+  GST_DEBUG_OBJECT (dc, "pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  /* Find the PrivateStream */
+  DISCO_LOCK (dc);
+  for (tmp = dc->priv->streams; tmp; tmp = tmp->next) {
+    ps = (PrivateStream *) tmp->data;
+    if (ps->pad == pad)
+      break;
+  }
+
+  if (tmp == NULL) {
+    DISCO_UNLOCK (dc);
+    GST_DEBUG ("The removed pad wasn't controlled by us !");
+    return;
+  }
+
+  dc->priv->streams = g_list_delete_link (dc->priv->streams, tmp);
+  DISCO_UNLOCK (dc);
+
+  gst_element_set_state (ps->sink, GST_STATE_NULL);
+  gst_element_set_state (ps->queue, GST_STATE_NULL);
+  gst_element_unlink (ps->queue, ps->sink);
+
+  sinkpad = gst_element_get_static_pad (ps->queue, "sink");
+  gst_pad_unlink (pad, sinkpad);
+  gst_object_unref (sinkpad);
+
+  /* references removed here */
+  gst_bin_remove_many (dc->priv->pipeline, ps->sink, ps->queue, NULL);
+
+  if (ps->tags) {
+    gst_tag_list_free (ps->tags);
+  }
+
+  g_slice_free (PrivateStream, ps);
+
+  GST_DEBUG ("Done handling pad");
+}
+
+static GstStructure *
+collect_stream_information (GstDiscoverer * dc, PrivateStream * ps, guint idx)
+{
+  GstCaps *caps;
+  GstStructure *st;
+  gchar *stname;
+
+  stname = g_strdup_printf ("stream-%02d", idx);
+  st = gst_structure_empty_new (stname);
+  g_free (stname);
+
+  /* Get caps */
+  caps = gst_pad_get_current_caps (ps->pad);
+  if (!caps) {
+    GST_WARNING ("Couldn't get negotiated caps from %s:%s",
+        GST_DEBUG_PAD_NAME (ps->pad));
+    caps = gst_pad_get_caps (ps->pad, NULL);
+  }
+  if (caps) {
+    GST_DEBUG ("Got caps %" GST_PTR_FORMAT, caps);
+    gst_structure_id_set (st, _CAPS_QUARK, GST_TYPE_CAPS, caps, NULL);
+
+    gst_caps_unref (caps);
+  }
+  if (ps->tags)
+    gst_structure_id_set (st, _TAGS_QUARK, GST_TYPE_STRUCTURE, ps->tags, NULL);
+
+  return st;
+}
+
+/* Parses a set of caps and tags in st and populates a GstDiscovererStreamInfo
+ * structure (parent, if !NULL, otherwise it allocates one)
+ */
+static GstDiscovererStreamInfo *
+collect_information (GstDiscoverer * dc, const GstStructure * st,
+    GstDiscovererStreamInfo * parent)
+{
+  GstCaps *caps;
+  GstStructure *caps_st, *tags_st;
+  const gchar *name;
+  int tmp;
+  guint utmp;
+
+  if (!st || !gst_structure_id_has_field (st, _CAPS_QUARK)) {
+    GST_WARNING ("Couldn't find caps !");
+    if (parent)
+      return parent;
+    else
+      return (GstDiscovererStreamInfo *)
+          g_object_new (GST_TYPE_DISCOVERER_STREAM_INFO, NULL);
+  }
+
+  gst_structure_id_get (st, _CAPS_QUARK, GST_TYPE_CAPS, &caps, NULL);
+  caps_st = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (caps_st);
+
+  if (g_str_has_prefix (name, "audio/")) {
+    GstDiscovererAudioInfo *info;
+
+    if (parent)
+      info = (GstDiscovererAudioInfo *) parent;
+    else {
+      info = (GstDiscovererAudioInfo *)
+          g_object_new (GST_TYPE_DISCOVERER_AUDIO_INFO, NULL);
+      info->parent.caps = caps;
+    }
+
+    if (gst_structure_get_int (caps_st, "rate", &tmp))
+      info->sample_rate = (guint) tmp;
+
+    if (gst_structure_get_int (caps_st, "channels", &tmp))
+      info->channels = (guint) tmp;
+
+    if (gst_structure_get_int (caps_st, "depth", &tmp))
+      info->depth = (guint) tmp;
+
+    if (gst_structure_id_has_field (st, _TAGS_QUARK)) {
+      gst_structure_id_get (st, _TAGS_QUARK,
+          GST_TYPE_STRUCTURE, &tags_st, NULL);
+      if (gst_structure_get_uint (tags_st, GST_TAG_BITRATE, &utmp) ||
+          gst_structure_get_uint (tags_st, GST_TAG_NOMINAL_BITRATE, &utmp))
+        info->bitrate = utmp;
+
+      if (gst_structure_get_uint (tags_st, GST_TAG_MAXIMUM_BITRATE, &utmp))
+        info->max_bitrate = utmp;
+
+      /* FIXME: Is it worth it to remove the tags we've parsed? */
+      info->parent.tags = gst_tag_list_merge (info->parent.tags,
+          (GstTagList *) tags_st, GST_TAG_MERGE_REPLACE);
+
+      gst_structure_free (tags_st);
+    }
+
+    if (!info->language && ((GstDiscovererStreamInfo *) info)->tags) {
+      gchar *language;
+      if (gst_tag_list_get_string (((GstDiscovererStreamInfo *) info)->tags,
+              GST_TAG_LANGUAGE_CODE, &language)) {
+        info->language = language;
+      }
+    }
+
+    return (GstDiscovererStreamInfo *) info;
+
+  } else if (g_str_has_prefix (name, "video/") ||
+      g_str_has_prefix (name, "image/")) {
+    GstDiscovererVideoInfo *info;
+    GstVideoInfo vinfo;
+
+    if (parent)
+      info = (GstDiscovererVideoInfo *) parent;
+    else {
+      info = (GstDiscovererVideoInfo *)
+          g_object_new (GST_TYPE_DISCOVERER_VIDEO_INFO, NULL);
+      info->parent.caps = caps;
+    }
+
+    if (gst_video_info_from_caps (&vinfo, caps)) {
+      info->width = (guint) vinfo.width;
+      info->height = (guint) vinfo.height;
+
+      info->depth = (guint) 0;
+
+      info->par_num = vinfo.par_n;
+      info->par_denom = vinfo.par_d;
+
+      info->framerate_num = vinfo.fps_n;
+      info->framerate_denom = vinfo.fps_d;
+
+      info->interlaced = (vinfo.flags & GST_VIDEO_FLAG_INTERLACED) != 0;
+    }
+
+    if (gst_structure_id_has_field (st, _TAGS_QUARK)) {
+      gst_structure_id_get (st, _TAGS_QUARK,
+          GST_TYPE_STRUCTURE, &tags_st, NULL);
+      if (gst_structure_get_uint (tags_st, GST_TAG_BITRATE, &utmp) ||
+          gst_structure_get_uint (tags_st, GST_TAG_NOMINAL_BITRATE, &utmp))
+        info->bitrate = utmp;
+
+      if (gst_structure_get_uint (tags_st, GST_TAG_MAXIMUM_BITRATE, &utmp))
+        info->max_bitrate = utmp;
+
+      /* FIXME: Is it worth it to remove the tags we've parsed? */
+      info->parent.tags = gst_tag_list_merge (info->parent.tags,
+          (GstTagList *) tags_st, GST_TAG_MERGE_REPLACE);
+      gst_structure_free (tags_st);
+    }
+
+    return (GstDiscovererStreamInfo *) info;
+
+  } else if (is_subtitle_caps (caps)) {
+    GstDiscovererSubtitleInfo *info;
+
+    if (parent)
+      info = (GstDiscovererSubtitleInfo *) parent;
+    else {
+      info = (GstDiscovererSubtitleInfo *)
+          g_object_new (GST_TYPE_DISCOVERER_SUBTITLE_INFO, NULL);
+      info->parent.caps = caps;
+    }
+
+    if (gst_structure_id_has_field (st, _TAGS_QUARK)) {
+      const gchar *language;
+
+      gst_structure_id_get (st, _TAGS_QUARK,
+          GST_TYPE_STRUCTURE, &tags_st, NULL);
+
+      language = gst_structure_get_string (caps_st, GST_TAG_LANGUAGE_CODE);
+      if (language)
+        info->language = g_strdup (language);
+
+      /* FIXME: Is it worth it to remove the tags we've parsed? */
+      info->parent.tags = gst_tag_list_merge (info->parent.tags,
+          (GstTagList *) tags_st, GST_TAG_MERGE_REPLACE);
+      gst_structure_free (tags_st);
+
+    }
+
+    if (!info->language && ((GstDiscovererStreamInfo *) info)->tags) {
+      gchar *language;
+      if (gst_tag_list_get_string (((GstDiscovererStreamInfo *) info)->tags,
+              GST_TAG_LANGUAGE_CODE, &language)) {
+        info->language = language;
+      }
+    }
+
+    return (GstDiscovererStreamInfo *) info;
+
+  } else {
+    /* None of the above - populate what information we can */
+    GstDiscovererStreamInfo *info;
+
+    if (parent)
+      info = parent;
+    else {
+      info = (GstDiscovererStreamInfo *)
+          g_object_new (GST_TYPE_DISCOVERER_STREAM_INFO, NULL);
+      info->caps = caps;
+    }
+
+    if (gst_structure_id_get (st, _TAGS_QUARK,
+            GST_TYPE_STRUCTURE, &tags_st, NULL)) {
+      info->tags = gst_tag_list_merge (info->tags, (GstTagList *) tags_st,
+          GST_TAG_MERGE_REPLACE);
+      gst_structure_free (tags_st);
+    }
+
+    return info;
+  }
+
+}
+
+static GstStructure *
+find_stream_for_node (GstDiscoverer * dc, const GstStructure * topology)
+{
+  GstPad *pad;
+  GstPad *target_pad = NULL;
+  GstStructure *st = NULL;
+  PrivateStream *ps;
+  guint i;
+  GList *tmp;
+
+  if (!gst_structure_id_has_field (topology, _TOPOLOGY_PAD_QUARK)) {
+    GST_DEBUG ("Could not find pad for node %" GST_PTR_FORMAT "\n", topology);
+    return NULL;
+  }
+
+  gst_structure_id_get (topology, _TOPOLOGY_PAD_QUARK,
+      GST_TYPE_PAD, &pad, NULL);
+
+  if (!dc->priv->streams)
+    return NULL;
+
+  for (i = 0, tmp = dc->priv->streams; tmp; tmp = tmp->next, i++) {
+    ps = (PrivateStream *) tmp->data;
+
+    target_pad = gst_ghost_pad_get_target (GST_GHOST_PAD (ps->pad));
+    gst_object_unref (target_pad);
+
+    if (target_pad == pad)
+      break;
+  }
+
+  if (tmp)
+    st = collect_stream_information (dc, ps, i);
+
+  gst_object_unref (pad);
+
+  return st;
+}
+
+static gboolean
+child_is_raw_stream (GstCaps * parent, GstCaps * child)
+{
+  GstStructure *st1, *st2;
+  const gchar *name1, *name2;
+
+  st1 = gst_caps_get_structure (parent, 0);
+  name1 = gst_structure_get_name (st1);
+  st2 = gst_caps_get_structure (child, 0);
+  name2 = gst_structure_get_name (st2);
+
+  if ((g_str_has_prefix (name1, "audio/") &&
+          g_str_has_prefix (name2, "audio/x-raw")) ||
+      ((g_str_has_prefix (name1, "video/") ||
+              g_str_has_prefix (name1, "image/")) &&
+          g_str_has_prefix (name2, "video/x-raw"))) {
+    /* child is the "raw" sub-stream corresponding to parent */
+    return TRUE;
+  }
+
+  if (is_subtitle_caps (parent))
+    return TRUE;
+
+  return FALSE;
+}
+
+/* If a parent is non-NULL, collected stream information will be appended to it
+ * (and where the information exists, it will be overriden)
+ */
+static GstDiscovererStreamInfo *
+parse_stream_topology (GstDiscoverer * dc, const GstStructure * topology,
+    GstDiscovererStreamInfo * parent)
+{
+  GstDiscovererStreamInfo *res = NULL;
+  GstCaps *caps = NULL;
+  const GValue *nval = NULL;
+
+  GST_DEBUG ("parsing: %" GST_PTR_FORMAT, topology);
+
+  nval = gst_structure_get_value (topology, "next");
+
+  if (nval == NULL || GST_VALUE_HOLDS_STRUCTURE (nval)) {
+    GstStructure *st = find_stream_for_node (dc, topology);
+    gboolean add_to_list = TRUE;
+
+    if (st) {
+      res = collect_information (dc, st, parent);
+      gst_structure_free (st);
+    } else {
+      /* Didn't find a stream structure, so let's just use the caps we have */
+      res = collect_information (dc, topology, parent);
+    }
+
+    if (nval == NULL) {
+      /* FIXME : aggregate with information from main streams */
+      GST_DEBUG ("Coudn't find 'next' ! might be the last entry");
+    } else {
+      GstCaps *caps;
+      const GstStructure *st;
+
+      st = gst_value_get_structure (nval);
+
+      GST_DEBUG ("next is a structure %" GST_PTR_FORMAT, st);
+
+      if (!parent)
+        parent = res;
+
+      if (gst_structure_id_get (st, _CAPS_QUARK, GST_TYPE_CAPS, &caps, NULL)) {
+        if (gst_caps_can_intersect (parent->caps, caps)) {
+          /* We sometimes get an extra sub-stream from the parser. If this is
+           * the case, we just replace the parent caps with this stream's caps
+           * since they might contain more information */
+          gst_caps_unref (parent->caps);
+          parent->caps = caps;
+
+          parse_stream_topology (dc, st, parent);
+          add_to_list = FALSE;
+
+        } else if (child_is_raw_stream (parent->caps, caps)) {
+          /* This is the "raw" stream corresponding to the parent. This
+           * contains more information than the parent, tags etc. */
+          parse_stream_topology (dc, st, parent);
+          add_to_list = FALSE;
+          gst_caps_unref (caps);
+
+        } else {
+          GstDiscovererStreamInfo *next = parse_stream_topology (dc, st, NULL);
+          res->next = next;
+          next->previous = res;
+        }
+      }
+    }
+
+    if (add_to_list) {
+      dc->priv->current_info->stream_list =
+          g_list_append (dc->priv->current_info->stream_list, res);
+    }
+
+  } else if (GST_VALUE_HOLDS_LIST (nval)) {
+    guint i, len;
+    GstDiscovererContainerInfo *cont;
+    GstTagList *tags;
+
+    if (!gst_structure_id_get (topology, _CAPS_QUARK,
+            GST_TYPE_CAPS, &caps, NULL))
+      GST_WARNING ("Couldn't find caps !");
+
+    len = gst_value_list_get_size (nval);
+    GST_DEBUG ("next is a list of %d entries", len);
+
+    cont = (GstDiscovererContainerInfo *)
+        g_object_new (GST_TYPE_DISCOVERER_CONTAINER_INFO, NULL);
+    cont->parent.caps = caps;
+    res = (GstDiscovererStreamInfo *) cont;
+
+    if (gst_structure_id_has_field (topology, _TAGS_QUARK)) {
+      GstTagList *tmp;
+
+      gst_structure_id_get (topology, _TAGS_QUARK,
+          GST_TYPE_STRUCTURE, &tags, NULL);
+
+      GST_DEBUG ("Merge tags %" GST_PTR_FORMAT, tags);
+
+      tmp =
+          gst_tag_list_merge (cont->parent.tags, (GstTagList *) tags,
+          GST_TAG_MERGE_APPEND);
+      gst_tag_list_free (tags);
+      if (cont->parent.tags)
+        gst_tag_list_free (cont->parent.tags);
+      cont->parent.tags = tmp;
+      GST_DEBUG ("Container info tags %" GST_PTR_FORMAT, tmp);
+    }
+
+    for (i = 0; i < len; i++) {
+      const GValue *subv = gst_value_list_get_value (nval, i);
+      const GstStructure *subst = gst_value_get_structure (subv);
+      GstDiscovererStreamInfo *substream;
+
+      GST_DEBUG ("%d %" GST_PTR_FORMAT, i, subst);
+
+      substream = parse_stream_topology (dc, subst, NULL);
+
+      substream->previous = res;
+      cont->streams =
+          g_list_append (cont->streams,
+          gst_discoverer_stream_info_ref (substream));
+    }
+  }
+
+  return res;
+}
+
+/* Called when pipeline is pre-rolled */
+static void
+discoverer_collect (GstDiscoverer * dc)
+{
+  GST_DEBUG ("Collecting information");
+
+  /* Stop the timeout handler if present */
+  if (dc->priv->timeoutid) {
+    g_source_remove (dc->priv->timeoutid);
+    dc->priv->timeoutid = 0;
+  }
+
+  if (dc->priv->streams) {
+    /* FIXME : Make this querying optional */
+    if (TRUE) {
+      GstElement *pipeline = (GstElement *) dc->priv->pipeline;
+      gint64 dur;
+
+      GST_DEBUG ("Attempting to query duration");
+
+      if (gst_element_query_duration (pipeline, GST_FORMAT_TIME, &dur)) {
+        GST_DEBUG ("Got duration %" GST_TIME_FORMAT, GST_TIME_ARGS (dur));
+        dc->priv->current_info->duration = (guint64) dur;
+      }
+
+      if (dc->priv->seeking_query) {
+        if (gst_element_query (pipeline, dc->priv->seeking_query)) {
+          GstFormat format;
+          gboolean seekable;
+
+          gst_query_parse_seeking (dc->priv->seeking_query, &format,
+              &seekable, NULL, NULL);
+          if (format == GST_FORMAT_TIME) {
+            GST_DEBUG ("Got seekable %d", seekable);
+            dc->priv->current_info->seekable = seekable;
+          }
+        }
+      }
+    }
+
+    if (dc->priv->current_topology)
+      dc->priv->current_info->stream_info = parse_stream_topology (dc,
+          dc->priv->current_topology, NULL);
+
+    /*
+     * Images need some special handling. They do not have a duration, have
+     * caps named image/<foo> (th exception being MJPEG video which is also
+     * type image/jpeg), and should consist of precisely one stream (actually
+     * initially there are 2, the image and raw stream, but we squash these
+     * while parsing the stream topology). At some point, if we find that these
+     * conditions are not sufficient, we can count the number of decoders and
+     * parsers in the chain, and if there's more than one decoder, or any
+     * parser at all, we should not mark this as an image.
+     */
+    if (dc->priv->current_info->duration == 0 &&
+        dc->priv->current_info->stream_info != NULL &&
+        dc->priv->current_info->stream_info->next == NULL) {
+      GstStructure *st =
+          gst_caps_get_structure (dc->priv->current_info->stream_info->caps, 0);
+
+      if (g_str_has_prefix (gst_structure_get_name (st), "image/"))
+        ((GstDiscovererVideoInfo *) dc->priv->current_info->stream_info)->
+            is_image = TRUE;
+    }
+  }
+
+  if (dc->priv->async) {
+    GST_DEBUG ("Emitting 'discoverered'");
+    g_signal_emit (dc, gst_discoverer_signals[SIGNAL_DISCOVERED], 0,
+        dc->priv->current_info, dc->priv->current_error);
+    /* Clients get a copy of current_info since it is a boxed type */
+    gst_discoverer_info_unref (dc->priv->current_info);
+  }
+}
+
+static void
+get_async_cb (gpointer cb_data, GSource * source, GSourceFunc * func,
+    gpointer * data)
+{
+  *func = (GSourceFunc) async_timeout_cb;
+  *data = cb_data;
+}
+
+/* Wrapper since GSourceCallbackFuncs don't expect a return value from ref() */
+static void
+_void_g_object_ref (gpointer object)
+{
+  g_object_ref (G_OBJECT (object));
+}
+
+static void
+handle_current_async (GstDiscoverer * dc)
+{
+  GSource *source;
+  static GSourceCallbackFuncs cb_funcs = {
+    _void_g_object_ref,
+    g_object_unref,
+    get_async_cb,
+  };
+
+  /* Attach a timeout to the main context */
+  source = g_timeout_source_new (dc->priv->timeout / GST_MSECOND);
+  g_source_set_callback_indirect (source, g_object_ref (dc), &cb_funcs);
+  dc->priv->timeoutid = g_source_attach (source, dc->priv->ctx);
+  g_source_unref (source);
+}
+
+
+/* Returns TRUE if processing should stop */
+static gboolean
+handle_message (GstDiscoverer * dc, GstMessage * msg)
+{
+  gboolean done = FALSE;
+
+  GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "got a %s message",
+      GST_MESSAGE_TYPE_NAME (msg));
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_ERROR:{
+      GError *gerr;
+      gchar *debug;
+
+      gst_message_parse_error (msg, &gerr, &debug);
+      GST_WARNING_OBJECT (GST_MESSAGE_SRC (msg),
+          "Got an error [debug:%s], [message:%s]", debug, gerr->message);
+      dc->priv->current_error = gerr;
+      g_free (debug);
+
+      /* We need to stop */
+      done = TRUE;
+
+      GST_DEBUG ("Setting result to ERROR");
+      dc->priv->current_info->result = GST_DISCOVERER_ERROR;
+    }
+      break;
+
+    case GST_MESSAGE_EOS:
+      GST_DEBUG ("Got EOS !");
+      done = TRUE;
+      break;
+
+    case GST_MESSAGE_ASYNC_DONE:
+      if (GST_MESSAGE_SRC (msg) == (GstObject *) dc->priv->pipeline) {
+        GST_DEBUG ("Finished changing state asynchronously");
+        done = TRUE;
+
+      }
+      break;
+
+    case GST_MESSAGE_ELEMENT:
+    {
+      GQuark sttype;
+      const GstStructure *structure;
+
+      structure = gst_message_get_structure (msg);
+      sttype = gst_structure_get_name_id (structure);
+      GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg),
+          "structure %" GST_PTR_FORMAT, structure);
+      if (sttype == _MISSING_PLUGIN_QUARK) {
+        GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg),
+            "Setting result to MISSING_PLUGINS");
+        dc->priv->current_info->result = GST_DISCOVERER_MISSING_PLUGINS;
+        dc->priv->current_info->misc = gst_structure_copy (structure);
+      } else if (sttype == _STREAM_TOPOLOGY_QUARK) {
+        dc->priv->current_topology = gst_structure_copy (structure);
+      }
+    }
+      break;
+
+    case GST_MESSAGE_TAG:
+    {
+      GstTagList *tl, *tmp;
+
+      gst_message_parse_tag (msg, &tl);
+      GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Got tags %" GST_PTR_FORMAT, tl);
+      /* Merge with current tags */
+      tmp =
+          gst_tag_list_merge (dc->priv->current_info->tags, tl,
+          GST_TAG_MERGE_APPEND);
+      gst_tag_list_free (tl);
+      if (dc->priv->current_info->tags)
+        gst_tag_list_free (dc->priv->current_info->tags);
+      dc->priv->current_info->tags = tmp;
+      GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Current info %p, tags %"
+          GST_PTR_FORMAT, dc->priv->current_info, tmp);
+    }
+      break;
+
+    default:
+      break;
+  }
+
+  return done;
+}
+
+
+static void
+handle_current_sync (GstDiscoverer * dc)
+{
+  GTimer *timer;
+  gdouble deadline = ((gdouble) dc->priv->timeout) / GST_SECOND;
+  GstMessage *msg;
+  gboolean done = FALSE;
+
+  timer = g_timer_new ();
+  g_timer_start (timer);
+
+  do {
+    /* poll bus with timeout */
+    /* FIXME : make the timeout more fine-tuned */
+    if ((msg = gst_bus_timed_pop (dc->priv->bus, GST_SECOND / 2))) {
+      done = handle_message (dc, msg);
+      gst_message_unref (msg);
+    }
+
+  } while (!done && (g_timer_elapsed (timer, NULL) < deadline));
+
+  /* return result */
+  if (!done) {
+    GST_DEBUG ("we timed out! Setting result to TIMEOUT");
+    dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT;
+  }
+
+  GST_DEBUG ("Done");
+
+  g_timer_stop (timer);
+  g_timer_destroy (timer);
+}
+
+static void
+_setup_locked (GstDiscoverer * dc)
+{
+  GstStateChangeReturn ret;
+
+  GST_DEBUG ("Setting up");
+
+  /* Pop URI off the pending URI list */
+  dc->priv->current_info =
+      (GstDiscovererInfo *) g_object_new (GST_TYPE_DISCOVERER_INFO, NULL);
+  dc->priv->current_info->uri = (gchar *) dc->priv->pending_uris->data;
+  dc->priv->pending_uris =
+      g_list_delete_link (dc->priv->pending_uris, dc->priv->pending_uris);
+
+  /* set uri on uridecodebin */
+  g_object_set (dc->priv->uridecodebin, "uri", dc->priv->current_info->uri,
+      NULL);
+
+  GST_DEBUG ("Current is now %s", dc->priv->current_info->uri);
+
+  dc->priv->processing = TRUE;
+
+  /* set pipeline to PAUSED */
+  DISCO_UNLOCK (dc);
+  GST_DEBUG ("Setting pipeline to PAUSED");
+  ret =
+      gst_element_set_state ((GstElement *) dc->priv->pipeline,
+      GST_STATE_PAUSED);
+  DISCO_LOCK (dc);
+
+  GST_DEBUG_OBJECT (dc, "Pipeline going to PAUSED : %s",
+      gst_element_state_change_return_get_name (ret));
+}
+
+static void
+discoverer_cleanup (GstDiscoverer * dc)
+{
+  GST_DEBUG ("Cleaning up");
+
+  gst_bus_set_flushing (dc->priv->bus, TRUE);
+  gst_element_set_state ((GstElement *) dc->priv->pipeline, GST_STATE_READY);
+  gst_bus_set_flushing (dc->priv->bus, FALSE);
+
+  DISCO_LOCK (dc);
+  if (dc->priv->current_error)
+    g_error_free (dc->priv->current_error);
+  dc->priv->current_error = NULL;
+  if (dc->priv->current_topology) {
+    gst_structure_free (dc->priv->current_topology);
+    dc->priv->current_topology = NULL;
+  }
+
+  dc->priv->current_info = NULL;
+
+  /* Try popping the next uri */
+  if (dc->priv->async) {
+    if (dc->priv->pending_uris != NULL) {
+      _setup_locked (dc);
+      DISCO_UNLOCK (dc);
+      /* Start timeout */
+      handle_current_async (dc);
+    } else {
+      /* We're done ! */
+      DISCO_UNLOCK (dc);
+      g_signal_emit (dc, gst_discoverer_signals[SIGNAL_FINISHED], 0);
+    }
+  } else
+    DISCO_UNLOCK (dc);
+
+  GST_DEBUG ("out");
+}
+
+static void
+discoverer_bus_cb (GstBus * bus, GstMessage * msg, GstDiscoverer * dc)
+{
+  if (dc->priv->processing) {
+    if (handle_message (dc, msg)) {
+      GST_DEBUG ("Stopping asynchronously");
+      /* Serialise with _event_probe() */
+      DISCO_LOCK (dc);
+      dc->priv->processing = FALSE;
+      DISCO_UNLOCK (dc);
+      discoverer_collect (dc);
+      discoverer_cleanup (dc);
+    }
+  }
+}
+
+static gboolean
+async_timeout_cb (GstDiscoverer * dc)
+{
+  if (!g_source_is_destroyed (g_main_current_source ())) {
+    dc->priv->timeoutid = 0;
+    GST_DEBUG ("Setting result to TIMEOUT");
+    dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT;
+    dc->priv->processing = FALSE;
+    discoverer_collect (dc);
+    discoverer_cleanup (dc);
+  }
+  return FALSE;
+}
+
+/* If there is a pending URI, it will pop it from the list of pending
+ * URIs and start the discovery on it.
+ *
+ * Returns GST_DISCOVERER_OK if the next URI was popped and is processing,
+ * else a error flag.
+ */
+static GstDiscovererResult
+start_discovering (GstDiscoverer * dc)
+{
+  GstDiscovererResult res = GST_DISCOVERER_OK;
+
+  GST_DEBUG ("Starting");
+
+  DISCO_LOCK (dc);
+  if (dc->priv->pending_uris == NULL) {
+    GST_WARNING ("No URI to process");
+    res = GST_DISCOVERER_URI_INVALID;
+    DISCO_UNLOCK (dc);
+    goto beach;
+  }
+
+  if (dc->priv->current_info != NULL) {
+    GST_WARNING ("Already processing a file");
+    res = GST_DISCOVERER_BUSY;
+    DISCO_UNLOCK (dc);
+    goto beach;
+  }
+
+  g_signal_emit (dc, gst_discoverer_signals[SIGNAL_STARTING], 0);
+
+  _setup_locked (dc);
+
+  DISCO_UNLOCK (dc);
+
+  if (dc->priv->async)
+    handle_current_async (dc);
+  else
+    handle_current_sync (dc);
+
+beach:
+  return res;
+}
+
+
+/**
+ * gst_discoverer_start:
+ * @discoverer: A #GstDiscoverer
+ *
+ * Allow asynchronous discovering of URIs to take place.
+ * A #GMainLoop must be available for #GstDiscoverer to properly work in
+ * asynchronous mode.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_discoverer_start (GstDiscoverer * discoverer)
+{
+  GSource *source;
+  GMainContext *ctx = NULL;
+
+  GST_DEBUG_OBJECT (discoverer, "Starting...");
+
+  if (discoverer->priv->async) {
+    GST_DEBUG_OBJECT (discoverer, "We were already started");
+    return;
+  }
+
+  discoverer->priv->async = TRUE;
+  discoverer->priv->running = TRUE;
+
+  ctx = g_main_context_get_thread_default ();
+
+  /* Connect to bus signals */
+  if (ctx == NULL)
+    ctx = g_main_context_default ();
+
+  source = gst_bus_create_watch (discoverer->priv->bus);
+  g_source_set_callback (source, (GSourceFunc) gst_bus_async_signal_func,
+      NULL, NULL);
+  discoverer->priv->sourceid = g_source_attach (source, ctx);
+  g_source_unref (source);
+  discoverer->priv->ctx = g_main_context_ref (ctx);
+
+  start_discovering (discoverer);
+  GST_DEBUG_OBJECT (discoverer, "Started");
+}
+
+/**
+ * gst_discoverer_stop:
+ * @discoverer: A #GstDiscoverer
+ *
+ * Stop the discovery of any pending URIs and clears the list of
+ * pending URIS (if any).
+ *
+ * Since: 0.10.31
+ */
+void
+gst_discoverer_stop (GstDiscoverer * discoverer)
+{
+  GST_DEBUG_OBJECT (discoverer, "Stopping...");
+
+  if (!discoverer->priv->async) {
+    GST_DEBUG_OBJECT (discoverer,
+        "We were already stopped, or running synchronously");
+    return;
+  }
+
+  DISCO_LOCK (discoverer);
+  if (discoverer->priv->processing) {
+    /* We prevent any further processing by setting the bus to
+     * flushing and setting the pipeline to READY.
+     * _reset() will take care of the rest of the cleanup */
+    if (discoverer->priv->bus)
+      gst_bus_set_flushing (discoverer->priv->bus, TRUE);
+    if (discoverer->priv->pipeline)
+      gst_element_set_state ((GstElement *) discoverer->priv->pipeline,
+          GST_STATE_READY);
+  }
+  discoverer->priv->running = FALSE;
+  DISCO_UNLOCK (discoverer);
+
+  /* Remove timeout handler */
+  if (discoverer->priv->timeoutid) {
+    g_source_remove (discoverer->priv->timeoutid);
+    discoverer->priv->timeoutid = 0;
+  }
+  /* Remove signal watch */
+  if (discoverer->priv->sourceid) {
+    g_source_remove (discoverer->priv->sourceid);
+    discoverer->priv->sourceid = 0;
+  }
+  /* Unref main context */
+  if (discoverer->priv->ctx) {
+    g_main_context_unref (discoverer->priv->ctx);
+    discoverer->priv->ctx = NULL;
+  }
+  discoverer_reset (discoverer);
+
+  discoverer->priv->async = FALSE;
+
+  GST_DEBUG_OBJECT (discoverer, "Stopped");
+}
+
+/**
+ * gst_discoverer_discover_uri_async:
+ * @discoverer: A #GstDiscoverer
+ * @uri: the URI to add.
+ *
+ * Appends the given @uri to the list of URIs to discoverer. The actual
+ * discovery of the @uri will only take place if gst_discoverer_start() has
+ * been called.
+ *
+ * A copy of @uri will be made internally, so the caller can safely g_free()
+ * afterwards.
+ *
+ * Returns: %TRUE if the @uri was succesfully appended to the list of pending
+ * uris, else %FALSE
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_discoverer_discover_uri_async (GstDiscoverer * discoverer,
+    const gchar * uri)
+{
+  gboolean can_run;
+
+  GST_DEBUG_OBJECT (discoverer, "uri : %s", uri);
+
+  DISCO_LOCK (discoverer);
+  can_run = (discoverer->priv->pending_uris == NULL);
+  discoverer->priv->pending_uris =
+      g_list_append (discoverer->priv->pending_uris, g_strdup (uri));
+  DISCO_UNLOCK (discoverer);
+
+  if (can_run)
+    start_discovering (discoverer);
+
+  return TRUE;
+}
+
+
+/* Synchronous mode */
+/**
+ * gst_discoverer_discover_uri:
+ * @discoverer: A #GstDiscoverer
+ * @uri: The URI to run on.
+ * @err: (out) (allow-none): If an error occurred, this field will be filled in.
+ *
+ * Synchronously discovers the given @uri.
+ *
+ * A copy of @uri will be made internally, so the caller can safely g_free()
+ * afterwards.
+ *
+ * Returns: (transfer full): the result of the scanning. Can be %NULL if an
+ * error occurred.
+ *
+ * Since: 0.10.31
+ */
+GstDiscovererInfo *
+gst_discoverer_discover_uri (GstDiscoverer * discoverer, const gchar * uri,
+    GError ** err)
+{
+  GstDiscovererResult res = 0;
+  GstDiscovererInfo *info;
+
+  GST_DEBUG_OBJECT (discoverer, "uri:%s", uri);
+
+  DISCO_LOCK (discoverer);
+  if (G_UNLIKELY (discoverer->priv->current_info)) {
+    DISCO_UNLOCK (discoverer);
+    GST_WARNING_OBJECT (discoverer, "Already handling a uri");
+    return NULL;
+  }
+
+  discoverer->priv->pending_uris =
+      g_list_append (discoverer->priv->pending_uris, g_strdup (uri));
+  DISCO_UNLOCK (discoverer);
+
+  res = start_discovering (discoverer);
+  discoverer_collect (discoverer);
+
+  /* Get results */
+  if (err) {
+    if (discoverer->priv->current_error)
+      *err = g_error_copy (discoverer->priv->current_error);
+    else
+      *err = NULL;
+  }
+  if (res != GST_DISCOVERER_OK) {
+    GST_DEBUG ("Setting result to %d (was %d)", res,
+        discoverer->priv->current_info->result);
+    discoverer->priv->current_info->result = res;
+  }
+  info = discoverer->priv->current_info;
+
+  discoverer_cleanup (discoverer);
+
+  return info;
+}
+
+/**
+ * gst_discoverer_new:
+ * @timeout: timeout per file, in nanoseconds. Allowed are values between
+ *     one second (#GST_SECOND) and one hour (3600 * #GST_SECOND)
+ * @err: a pointer to a #GError. can be %NULL
+ *
+ * Creates a new #GstDiscoverer with the provided timeout.
+ *
+ * Returns: (transfer full): The new #GstDiscoverer.
+ * If an error occurred when creating the discoverer, @err will be set
+ * accordingly and %NULL will be returned. If @err is set, the caller must
+ * free it when no longer needed using g_error_free().
+ *
+ * Since: 0.10.31
+ */
+GstDiscoverer *
+gst_discoverer_new (GstClockTime timeout, GError ** err)
+{
+  GstDiscoverer *res;
+
+  res = g_object_new (GST_TYPE_DISCOVERER, "timeout", timeout, NULL);
+  if (res->priv->uridecodebin == NULL) {
+    if (err)
+      *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
+          "Couldn't create 'uridecodebin' element");
+    gst_object_unref (res);
+    res = NULL;
+  }
+  return res;
+}
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.h b/gst-libs/gst/pbutils/gstdiscoverer.h
new file mode 100644
index 0000000..611bc89
--- /dev/null
+++ b/gst-libs/gst/pbutils/gstdiscoverer.h
@@ -0,0 +1,288 @@
+/* GStreamer
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *               2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GST_DISCOVERER_H_
+#define _GST_DISCOVERER_H_
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DISCOVERER_STREAM_INFO \
+  (gst_discoverer_stream_info_get_type ())
+#define GST_DISCOVERER_STREAM_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_STREAM_INFO, GstDiscovererStreamInfo))
+#define GST_IS_DISCOVERER_STREAM_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_STREAM_INFO))
+typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;
+typedef GObjectClass GstDiscovererStreamInfoClass;
+GType gst_discoverer_stream_info_get_type (void);
+
+/**
+ * GstDiscovererStreamInfo:
+ *
+ * Base structure for information concerning a media stream. Depending on the
+ * stream type, one can find more media-specific information in
+ * #GstDiscovererAudioInfo, #GstDiscovererVideoInfo, and
+ * #GstDiscovererContainerInfo.
+ *
+ * The #GstDiscovererStreamInfo represents the topology of the stream. Siblings
+ * can be iterated over with gst_discoverer_stream_info_get_next() and
+ * gst_discoverer_stream_info_get_previous(). Children (sub-streams) of a
+ * stream can be accessed using the #GstDiscovererContainerInfo API.
+ *
+ * As a simple example, if you run #GstDiscoverer on an AVI file with one audio
+ * and one video stream, you will get a #GstDiscovererContainerInfo
+ * corresponding to the AVI container, which in turn will have a
+ * #GstDiscovererAudioInfo sub-stream and a #GstDiscovererVideoInfo sub-stream
+ * for the audio and video streams respectively.
+ *
+ * Since: 0.10.31
+ */
+#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
+#define gst_discoverer_stream_info_unref(info) (g_object_unref((GObject*) info))
+
+GstDiscovererStreamInfo* gst_discoverer_stream_info_get_previous(GstDiscovererStreamInfo* info);
+GstDiscovererStreamInfo* gst_discoverer_stream_info_get_next(GstDiscovererStreamInfo* info);
+GstCaps*                 gst_discoverer_stream_info_get_caps(GstDiscovererStreamInfo* info);
+const GstTagList*        gst_discoverer_stream_info_get_tags(GstDiscovererStreamInfo* info);
+const GstStructure*      gst_discoverer_stream_info_get_misc(GstDiscovererStreamInfo* info);
+const gchar *            gst_discoverer_stream_info_get_stream_type_nick(GstDiscovererStreamInfo* info);
+
+/**
+ * GstDiscovererContainerInfo:
+ *
+ * #GstDiscovererStreamInfo specific to container streams.
+ *
+ * Since: 0.10.31
+ */
+#define GST_TYPE_DISCOVERER_CONTAINER_INFO \
+  (gst_discoverer_container_info_get_type ())
+#define GST_DISCOVERER_CONTAINER_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO, GstDiscovererContainerInfo))
+#define GST_IS_DISCOVERER_CONTAINER_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_CONTAINER_INFO))
+typedef struct _GstDiscovererContainerInfo GstDiscovererContainerInfo;
+typedef GObjectClass GstDiscovererContainerInfoClass;
+
+GType gst_discoverer_container_info_get_type (void);
+
+GList *gst_discoverer_container_info_get_streams(GstDiscovererContainerInfo *info);
+
+
+/**
+ * GstDiscovererAudioInfo:
+ *
+ * #GstDiscovererStreamInfo specific to audio streams.
+ *
+ * Since: 0.10.31
+ */
+#define GST_TYPE_DISCOVERER_AUDIO_INFO \
+  (gst_discoverer_audio_info_get_type ())
+#define GST_DISCOVERER_AUDIO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_AUDIO_INFO, GstDiscovererAudioInfo))
+#define GST_IS_DISCOVERER_AUDIO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_AUDIO_INFO))
+typedef struct _GstDiscovererAudioInfo GstDiscovererAudioInfo;
+typedef GObjectClass GstDiscovererAudioInfoClass;
+
+GType gst_discoverer_audio_info_get_type (void);
+
+guint gst_discoverer_audio_info_get_channels(const GstDiscovererAudioInfo* info);
+guint gst_discoverer_audio_info_get_sample_rate(const GstDiscovererAudioInfo* info);
+guint gst_discoverer_audio_info_get_depth(const GstDiscovererAudioInfo* info);
+guint gst_discoverer_audio_info_get_bitrate(const GstDiscovererAudioInfo* info);
+guint gst_discoverer_audio_info_get_max_bitrate(const GstDiscovererAudioInfo* info);
+const gchar * gst_discoverer_audio_info_get_language(const GstDiscovererAudioInfo* info);
+
+/**
+ * GstDiscovererVideoInfo:
+ *
+ * #GstDiscovererStreamInfo specific to video streams (this includes images).
+ *
+ * Since: 0.10.31
+ */
+#define GST_TYPE_DISCOVERER_VIDEO_INFO \
+  (gst_discoverer_video_info_get_type ())
+#define GST_DISCOVERER_VIDEO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_VIDEO_INFO, GstDiscovererVideoInfo))
+#define GST_IS_DISCOVERER_VIDEO_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_VIDEO_INFO))
+typedef struct _GstDiscovererVideoInfo GstDiscovererVideoInfo;
+typedef GObjectClass GstDiscovererVideoInfoClass;
+GType gst_discoverer_video_info_get_type (void);
+
+guint           gst_discoverer_video_info_get_width(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_height(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_depth(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_framerate_num(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_framerate_denom(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_par_num(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_par_denom(const GstDiscovererVideoInfo* info);
+gboolean        gst_discoverer_video_info_is_interlaced(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_bitrate(const GstDiscovererVideoInfo* info);
+guint           gst_discoverer_video_info_get_max_bitrate(const GstDiscovererVideoInfo* info);
+gboolean        gst_discoverer_video_info_is_image(const GstDiscovererVideoInfo* info);
+
+/**
+ * GstDiscovererSubtitleInfo:
+ *
+ * #GstDiscovererStreamInfo specific to subtitle streams (this includes text and
+ * image based ones).
+ *
+ * Since: 0.10.36
+ */
+#define GST_TYPE_DISCOVERER_SUBTITLE_INFO \
+  (gst_discoverer_subtitle_info_get_type ())
+#define GST_DISCOVERER_SUBTITLE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO, GstDiscovererSubtitleInfo))
+#define GST_IS_DISCOVERER_SUBTITLE_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_SUBTITLE_INFO))
+typedef struct _GstDiscovererSubtitleInfo GstDiscovererSubtitleInfo;
+typedef GObjectClass GstDiscovererSubtitleInfoClass;
+GType gst_discoverer_subtitle_info_get_type (void);
+
+const gchar *   gst_discoverer_subtitle_info_get_language(const GstDiscovererSubtitleInfo* info);
+
+/**
+ * GstDiscovererResult:
+ * @GST_DISCOVERER_OK: The discovery was successful
+ * @GST_DISCOVERER_URI_INVALID: the URI is invalid
+ * @GST_DISCOVERER_ERROR: an error happened and the GError is set
+ * @GST_DISCOVERER_TIMEOUT: the discovery timed-out
+ * @GST_DISCOVERER_BUSY: the discoverer was already discovering a file
+ * @GST_DISCOVERER_MISSING_PLUGINS: Some plugins are missing for full discovery
+ *
+ * Result values for the discovery process.
+ *
+ * Since: 0.10.31
+ */
+typedef enum {
+  GST_DISCOVERER_OK               = 0,
+  GST_DISCOVERER_URI_INVALID      = 1,
+  GST_DISCOVERER_ERROR            = 2,
+  GST_DISCOVERER_TIMEOUT          = 3,
+  GST_DISCOVERER_BUSY             = 4,
+  GST_DISCOVERER_MISSING_PLUGINS  = 5
+} GstDiscovererResult;
+
+
+/**
+ * GstDiscovererInfo:
+ *
+ * Structure containing the information of a URI analyzed by #GstDiscoverer.
+ *
+ * Since: 0.10.31
+ */
+typedef struct _GstDiscovererInfo GstDiscovererInfo;
+
+#define GST_TYPE_DISCOVERER_INFO \
+  (gst_discoverer_info_get_type ())
+#define GST_DISCOVERER_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER_INFO, GstDiscovererInfo))
+#define GST_IS_DISCOVERER_INFO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER_INFO))
+typedef GObjectClass GstDiscovererInfoClass;
+GType gst_discoverer_info_get_type (void);
+
+#define gst_discoverer_info_unref(info) (g_object_unref((GObject*)info))
+#define gst_discoverer_info_ref(info) (g_object_ref((Gbject*)info))
+
+GstDiscovererInfo*        gst_discoverer_info_copy (GstDiscovererInfo * ptr);
+
+const gchar*              gst_discoverer_info_get_uri(const GstDiscovererInfo* info);
+GstDiscovererResult       gst_discoverer_info_get_result(const GstDiscovererInfo* info);
+GstDiscovererStreamInfo*  gst_discoverer_info_get_stream_info(GstDiscovererInfo* info);
+GList*                    gst_discoverer_info_get_stream_list(GstDiscovererInfo* info);
+GstClockTime              gst_discoverer_info_get_duration(const GstDiscovererInfo* info);
+gboolean                  gst_discoverer_info_get_seekable(const GstDiscovererInfo* info);
+const GstStructure*       gst_discoverer_info_get_misc(const GstDiscovererInfo* info);
+const GstTagList*         gst_discoverer_info_get_tags(const GstDiscovererInfo* info);
+
+GList *                   gst_discoverer_info_get_streams (GstDiscovererInfo *info,
+							   GType streamtype);
+GList *                   gst_discoverer_info_get_audio_streams (GstDiscovererInfo *info);
+GList *                   gst_discoverer_info_get_video_streams (GstDiscovererInfo *info);
+GList *                   gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info);
+GList *                   gst_discoverer_info_get_container_streams (GstDiscovererInfo *info);
+
+void                      gst_discoverer_stream_info_list_free (GList *infos);
+
+#define GST_TYPE_DISCOVERER \
+  (gst_discoverer_get_type())
+#define GST_DISCOVERER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DISCOVERER,GstDiscoverer))
+#define GST_DISCOVERER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DISCOVERER,GstDiscovererClass))
+#define GST_IS_DISCOVERER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DISCOVERER))
+#define GST_IS_DISCOVERER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DISCOVERER))
+
+typedef struct _GstDiscoverer GstDiscoverer;
+typedef struct _GstDiscovererClass GstDiscovererClass;
+typedef struct _GstDiscovererPrivate GstDiscovererPrivate;
+
+/**
+ * GstDiscoverer:
+ *
+ * The #GstDiscoverer structure.
+ *
+ * Since: 0.10.31
+ **/
+struct _GstDiscoverer {
+  GObject parent;
+
+  GstDiscovererPrivate *priv;
+
+  gpointer _reserved[GST_PADDING];
+};
+
+struct _GstDiscovererClass {
+  GObjectClass parentclass;
+
+  /* signals */
+  void        (*finished)        (GstDiscoverer *discoverer);
+  void        (*starting)        (GstDiscoverer *discoverer);
+  void        (*discovered)      (GstDiscoverer *discoverer,
+                                  GstDiscovererInfo *info,
+				  const GError *err);
+
+  gpointer _reserved[GST_PADDING];
+};
+
+GType          gst_discoverer_get_type (void);
+GstDiscoverer *gst_discoverer_new (GstClockTime timeout, GError **err);
+
+/* Asynchronous API */
+void           gst_discoverer_start (GstDiscoverer *discoverer);
+void           gst_discoverer_stop (GstDiscoverer *discoverer);
+gboolean       gst_discoverer_discover_uri_async (GstDiscoverer *discoverer,
+						  const gchar *uri);
+
+/* Synchronous API */
+GstDiscovererInfo *
+gst_discoverer_discover_uri (GstDiscoverer * discoverer,
+			     const gchar * uri,
+			     GError ** err);
+
+G_END_DECLS
+
+#endif /* _GST_DISCOVERER_H */
diff --git a/gst-libs/gst/pbutils/gstpluginsbaseversion.c b/gst-libs/gst/pbutils/gstpluginsbaseversion.c
new file mode 100644
index 0000000..82645c1
--- /dev/null
+++ b/gst-libs/gst/pbutils/gstpluginsbaseversion.c
@@ -0,0 +1,78 @@
+/* GStreamer base plugins libraries version information
+ * Copyright (C) 2010 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpluginsbaseversion
+ * @short_description: GStreamer gst-plugins-base libraries version macros.
+ *
+ * Use the GST_PLUGINS_BASE_VERSION_* macros e.g. to check what version of
+ * gst-plugins-base you are building against, and gst_plugins_base_version()
+ * if you need to check at runtime what version of the gst-plugins-base
+ * libraries are being used / you are currently linked against.
+ *
+ * The version macros get defined by including &lt;gst/pbutils/pbutils.h&gt;.
+ */
+
+#include "gstpluginsbaseversion.h"
+
+/**
+ * gst_plugins_base_version:
+ * @major: (out): pointer to a guint to store the major version number, or %NULL
+ * @minor: (out): pointer to a guint to store the minor version number, or %NULL
+ * @micro: (out): pointer to a guint to store the micro version number, or %NULL
+ * @nano:  (out): pointer to a guint to store the nano version number, or %NULL
+ *
+ * Gets the version number of the GStreamer Plugins Base libraries.
+ *
+ * Since: 0.10.31
+ */
+void
+gst_plugins_base_version (guint * major, guint * minor, guint * micro,
+    guint * nano)
+{
+  if (major)
+    *major = GST_PLUGINS_BASE_VERSION_MAJOR;
+  if (minor)
+    *minor = GST_PLUGINS_BASE_VERSION_MINOR;
+  if (micro)
+    *micro = GST_PLUGINS_BASE_VERSION_MICRO;
+  if (nano)
+    *nano = GST_PLUGINS_BASE_VERSION_NANO;
+}
+
+/**
+ * gst_plugins_base_version_string:
+ *
+ * This function returns a string that is useful for describing this version
+ * of GStreamer's gst-plugins-base libraries to the outside world: user agent
+ * strings, logging, about dialogs ...
+ *
+ * Returns: a newly allocated string describing this version of gst-plugins-base
+ *
+ * Since: 0.10.31
+ */
+gchar *
+gst_plugins_base_version_string (void)
+{
+  return g_strdup_printf ("GStreamer Base Plugins %d.%d.%d%s",
+      GST_PLUGINS_BASE_VERSION_MAJOR, GST_PLUGINS_BASE_VERSION_MINOR,
+      GST_PLUGINS_BASE_VERSION_MICRO,
+      ((GST_PLUGINS_BASE_VERSION_NANO == 0) ? "" :
+          ((GST_PLUGINS_BASE_VERSION_NANO == 1) ? " (GIT)" : " (prerelease)")));
+}
diff --git a/gst-libs/gst/pbutils/gstpluginsbaseversion.h.in b/gst-libs/gst/pbutils/gstpluginsbaseversion.h.in
new file mode 100644
index 0000000..bd8adc9
--- /dev/null
+++ b/gst-libs/gst/pbutils/gstpluginsbaseversion.h.in
@@ -0,0 +1,86 @@
+/* GStreamer base plugins libraries version information
+ * Copyright (C) 2010 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PLUGINS_BASE_VERSION_H__
+#define __GST_PLUGINS_BASE_VERSION_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_PLUGINS_BASE_VERSION_MAJOR:
+ *
+ * The major version of GStreamer's gst-plugins-base libraries at compile time.
+ *
+ * Since: 0.10.31
+ */
+#define GST_PLUGINS_BASE_VERSION_MAJOR (@PACKAGE_VERSION_MAJOR@)
+/**
+ * GST_PLUGINS_BASE_VERSION_MINOR:
+ *
+ * The minor version of GStreamer's gst-plugins-base libraries at compile time.
+ *
+ * Since: 0.10.31
+ */
+#define GST_PLUGINS_BASE_VERSION_MINOR (@PACKAGE_VERSION_MINOR@)
+/**
+ * GST_PLUGINS_BASE_VERSION_MICRO:
+ *
+ * The micro version of GStreamer's gst-plugins-base libraries at compile time.
+ *
+ * Since: 0.10.31
+ */
+#define GST_PLUGINS_BASE_VERSION_MICRO (@PACKAGE_VERSION_MICRO@)
+/**
+ * GST_PLUGINS_BASE_VERSION_NANO:
+ *
+ * The nano version of GStreamer's gst-plugins-base libraries at compile time.
+ * Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
+ *
+ * Since: 0.10.31
+ */
+#define GST_PLUGINS_BASE_VERSION_NANO (@PACKAGE_VERSION_NANO@)
+
+/**
+ * GST_CHECK_PLUGIN_BASE_VERSION:
+ * @major: a number indicating the major version
+ * @minor: a number indicating the minor version
+ * @micro: a number indicating the micro version
+ *
+ * Check whether a GStreamer's gst-plugins-base libraries' version equal to
+ * or greater than major.minor.micro is present.
+ *
+ * Since: 0.10.31
+ */
+#define	GST_CHECK_PLUGINS_BASE_VERSION(major,minor,micro)	\
+    (GST_PLUGINS_BASE_VERSION_MAJOR > (major) || \
+     (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR > (minor)) || \
+     (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \
+      GST_PLUGINS_BASE_VERSION_MICRO >= (micro)) || \
+     (GST_PLUGINS_BASE_VERSION_MAJOR == (major) && GST_PLUGINS_BASE_VERSION_MINOR == (minor) && \
+      GST_PLUGINS_BASE_VERSION_MICRO + 1 == (micro) && GST_PLUGINS_BASE_VERSION_NANO > 0))
+
+void     gst_plugins_base_version (guint *major, guint *minor, guint *micro, guint *nano);
+
+gchar *  gst_plugins_base_version_string (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLUGINS_BASE_VERSION_H__ */
diff --git a/gst-libs/gst/pbutils/install-plugins.c b/gst-libs/gst/pbutils/install-plugins.c
new file mode 100644
index 0000000..5f52cbc
--- /dev/null
+++ b/gst-libs/gst/pbutils/install-plugins.c
@@ -0,0 +1,783 @@
+/* GStreamer base utils library plugin install support for applications
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006 Ryan Lortie <desrt desrt ca>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpbutilsinstallplugins
+ * @short_description: Missing plugin installation support for applications
+ *
+ * <refsect2>
+ * <title>Overview</title>
+ * <para>
+ * Using this API, applications can request the installation of missing
+ * GStreamer plugins. These may be missing decoders/demuxers or encoders/muxers
+ * for a certain format, sources or sinks for a certain URI protocol
+ * (e.g. 'http'), or certain elements known by their element factory name
+ * ('audioresample').
+ * </para>
+ * <para>
+ * Whether plugin installation is supported or not depends on the operating
+ * system and/or distribution in question. The vendor of the operating system
+ * needs to make sure the necessary hooks and mechanisms are in place for
+ * plugin installation to work. See below for more detailed information.
+ * </para>
+ * <para>
+ * From the application perspective, plugin installation is usually triggered
+ * either
+ * <itemizedlist>
+ * <listitem><para>
+ * when the application itself has found that it wants or needs to install a
+ * certain element
+ * </para></listitem>
+ * <listitem><para>
+ * when the application has been notified by an element (such as playbin or
+ * decodebin) that one or more plugins are missing <emphasis>and</emphasis>
+ * the application has decided that it wants to install one or more of those
+ * missing plugins
+ * </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * <title>Detail Strings</title>
+ * <para>
+ * The install functions in this section all take one or more 'detail strings'.
+ * These detail strings contain information about the type of plugin that
+ * needs to be installed (decoder, encoder, source, sink, or named element),
+ * and some additional information such GStreamer version used and a
+ * human-readable description of the component to install for user dialogs.
+ * </para>
+ * <para>
+ * Applications should not concern themselves with the composition of the
+ * string itself. They should regard the string as if it was a shared secret
+ * between GStreamer and the plugin installer application.
+ * </para>
+ * <para>
+ * Detail strings can be obtained using the function
+ * gst_missing_plugin_message_get_installer_detail() on a missing-plugin
+ * message. Such a message will either have been found by the application on
+ * a pipeline's #GstBus, or the application will have created it itself using
+ * gst_missing_element_message_new(), gst_missing_decoder_message_new(),
+ * gst_missing_encoder_message_new(), gst_missing_uri_sink_message_new(), or
+ * gst_missing_uri_source_message_new().
+ * </para>
+ * <title>Plugin Installation from the Application Perspective</title>
+ * <para>
+ * For each GStreamer element/plugin/component that should be installed, the
+ * application needs one of those 'installer detail' string mentioned in the
+ * previous section. This string can be obtained, as already mentioned above,
+ * from a missing-plugin message using the function
+ * gst_missing_plugin_message_get_installer_detail(). The missing-plugin
+ * message is either posted by another element and then found on the bus
+ * by the application, or the application has created it itself as described
+ * above.
+ * </para>
+ * <para>
+ * The application will then call gst_install_plugins_async(), passing a
+ * NULL-terminated array of installer detail strings, and a function that
+ * should be called when the installation of the plugins has finished
+ * (successfully or not). Optionally, a #GstInstallPluginsContext created
+ * with gst_install_plugins_context_new() may be passed as well. This way
+ * additional optional arguments like the application window's XID can be
+ * passed to the external installer application.
+ * </para>
+ * <para>
+ * gst_install_plugins_async() will return almost immediately, with the
+ * return code indicating whether plugin installation was started or not.
+ * If the necessary hooks for plugin installation are in place and an
+ * external installer application has in fact been called, the passed in
+ * function will be called with a result code as soon as the external installer
+ * has finished. If the result code indicates that new plugins have been
+ * installed, the application will want to call gst_update_registry() so the
+ * run-time plugin registry is updated and the new plugins are made available
+ * to the application.
+ * <note>
+ * A Gtk/GLib main loop must be running in order for the result function to
+ * be called when the external installer has finished. If this is not the case,
+ * make sure to regularly call
+ * <programlisting>
+ * g_main_context_iteration (NULL,FALSE);
+ * </programlisting>
+ * from your code.
+ * </note>
+ * </para>
+ * <title>Plugin Installation from the Vendor/Distribution Perspective</title>
+ * <para>
+ * <emphasis>1. Installer hook</emphasis>
+ * </para>
+ * <para>
+ * When GStreamer applications initiate plugin installation via
+ * gst_install_plugins_async() or gst_install_plugins_sync(), a pre-defined
+ * helper application will be called.
+ * </para>
+ * <para>
+ * The exact path of the helper application to be called is set at compile
+ * time, usually by the <literal>./configure</literal> script based on the
+ * install prefix. For a normal package build into the <literal>/usr</literal>
+ * prefix, this will usually default to
+ * <filename>/usr/libexec/gst-install-plugins-helper</filename> or
+ * <filename>/usr/lib/gst-install-plugins-helper</filename>.
+ * </para>
+ * <para>
+ * Vendors/distros who want to support GStreamer plugin installation should
+ * either provide such a helper script/application or use the
+ * <literal>./configure</literal> option
+ * <literal>--with-install-plugins-helper=/path/to/installer</literal> to
+ * make GStreamer call an installer of their own directly.
+ * </para>
+ * <para>
+ * It is strongly recommended that vendors provide a small helper application
+ * as interlocutor to the real installer though, even more so if command line
+ * argument munging is required to transform the command line arguments
+ * passed by GStreamer to the helper application into arguments that are
+ * understood by the real installer.
+ * </para>
+ * <para>
+ * The helper application path defined at compile time can be overriden at
+ * runtime by setting the <envar>GST_INSTALL_PLUGINS_HELPER</envar>
+ * environment variable. This can be useful for testing/debugging purposes.
+ * </para>
+ * <para>
+ * <emphasis>2. Arguments passed to the install helper</emphasis>
+ * </para>
+ * <para>
+ * GStreamer will pass the following arguments to the install helper (this is
+ * in addition to the path of the executable itself, which is by convention
+ * argv[0]):
+ * <itemizedlist>
+ *  <listitem><para>
+ *    none to many optional arguments in the form of
+ *    <literal>--foo-bar=val</literal>. Example:
+ *    <literal>--transient-for=XID</literal> where XID is the X Window ID of
+ *    the main window of the calling application (so the installer can make
+ *    itself transient to that window). Unknown optional arguments should
+ *    be ignored by the installer.
+ *  </para></listitem>
+ *  <listitem><para>
+ *    one 'installer detail string' argument for each plugin to be installed;
+ *    these strings will have a <literal>gstreamer</literal> prefix; the
+ *    exact format of the detail string is explained below
+ *  </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * <emphasis>3. Detail string describing the missing plugin</emphasis>
+ * </para>
+ * <para>
+ * The string is in UTF-8 encoding and is made up of several fields, separated
+ * by '|' characters (but neither the first nor the last character is a '|').
+ * The fields are:
+ * <itemizedlist>
+ *   <listitem><para>
+ *    plugin system identifier, ie. "gstreamer"
+ *   </para><para>
+ *    This identifier determines the format of the rest of the detail string.
+ *    Automatic plugin installers should not process detail strings with
+ *    unknown identifiers. This allows other plugin-based libraries to use
+ *    the same mechanism for their automatic plugin installation needs, or
+ *    for the format to be changed should it turn out to be insufficient.
+ *   </para></listitem>
+ *   <listitem><para>
+ *    plugin system version, e.g. "0.10"
+ *   </para><para>
+ *    This is required so that when there is a GStreamer-0.12 or GStreamer-1.0
+ *    at some point in future, the different major versions can still co-exist
+ *    and use the same plugin install mechanism in the same way.
+ *   </para></listitem>
+ *   <listitem><para>
+ *    application identifier, e.g. "totem"
+ *   </para><para>
+ *    This may also be in the form of "pid/12345" if the program name can't
+ *    be obtained for some reason.
+ *   </para></listitem>
+ *   <listitem><para>
+ *    human-readable localised description of the required component,
+ *    e.g. "Vorbis audio decoder"
+ *   </para></listitem>
+ *   <listitem><para>
+ *    identifier string for the required component (see below for details about
+ *    how to map this to the package/plugin that needs installing), e.g.
+ *    <itemizedlist>
+ *     <listitem><para>
+ *       urisource-$(PROTOCOL_REQUIRED), e.g. urisource-http or urisource-mms
+ *     </para></listitem>
+ *     <listitem><para>
+ *       element-$(ELEMENT_REQUIRED), e.g. element-videoconvert
+ *     </para></listitem>
+ *     <listitem><para>
+ *       decoder-$(CAPS_REQUIRED), e.g. (do read below for more details!):
+ *       <itemizedlist>
+ *         <listitem><para>decoder-audio/x-vorbis</para></listitem>
+ *         <listitem><para>decoder-application/ogg</para></listitem>
+ *         <listitem><para>decoder-audio/mpeg, mpegversion=(int)4</para></listitem>
+ *         <listitem><para>decoder-video/mpeg, systemstream=(boolean)true, mpegversion=(int)2</para></listitem>
+         </itemizedlist>
+ *     </para></listitem>
+ *     <listitem><para>
+ *       encoder-$(CAPS_REQUIRED), e.g. encoder-audio/x-vorbis
+ *     </para></listitem>
+ *    </itemizedlist>
+ *   </para></listitem>
+ *   <listitem><para>
+ *     optional further fields not yet specified
+ *   </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * An entire ID string might then look like this, for example:
+ * <literal>
+ * gstreamer|0.10|totem|Vorbis audio decoder|decoder-audio/x-vorbis
+ * </literal>
+ * </para>
+ * <para>
+ * Plugin installers parsing this ID string should expect further fields also
+ * separated by '|' symbols and either ignore them, warn the user, or error
+ * out when encountering them.
+ * </para>
+ * <para>
+ * Those unfamiliar with the GStreamer 'caps' system should note a few things
+ * about the caps string used in the above decoder/encoder case:
+ *   <itemizedlist>
+ *     <listitem><para>
+ *       the first part ("video/mpeg") of the caps string is a GStreamer media
+ *       type and <emphasis>not</emphasis> a MIME type. Wherever possible, the
+ *       GStreamer media type will be the same as the corresponding MIME type,
+ *       but often it is not.
+ *     </para></listitem>
+ *     <listitem><para>
+ *       a caps string may or may not have additional comma-separated fields
+ *       of various types (as seen in the examples above)
+ *     </para></listitem>
+ *     <listitem><para>
+ *       the caps string of a 'required' component (as above) will always have
+ *       fields with fixed values, whereas an introspected string (see below)
+ *       may have fields with non-fixed values. Compare for example:
+ *       <itemizedlist>
+ *         <listitem><para>
+ *           <literal>audio/mpeg, mpegversion=(int)4</literal> vs.
+ *           <literal>audio/mpeg, mpegversion=(int){2, 4}</literal>
+ *         </para></listitem>
+ *         <listitem><para>
+ *           <literal>video/mpeg, mpegversion=(int)2</literal> vs.
+ *           <literal>video/mpeg, systemstream=(boolean){ true, false}, mpegversion=(int)[1, 2]</literal>
+ *         </para></listitem>
+ *       </itemizedlist>
+ *     </para></listitem>
+ *   </itemizedlist>
+ * </para>
+ * <para>
+ * <emphasis>4. Exit codes the installer should return</emphasis>
+ * </para>
+ * <para>
+ * The installer should return one of the following exit codes when it exits:
+ * <itemizedlist>
+ *   <listitem><para>
+ *     0 if all of the requested plugins could be installed
+ *     (#GST_INSTALL_PLUGINS_SUCCESS)
+ *   </para></listitem>
+ *   <listitem><para>
+ *     1 if no appropriate installation candidate for any of the requested
+ *     plugins could be found. Only return this if nothing has been installed
+ *     (#GST_INSTALL_PLUGINS_NOT_FOUND)
+ *   </para></listitem>
+ *   <listitem><para>
+ *     2 if an error occured during the installation. The application will
+ *     assume that the user will already have seen an error message by the
+ *     installer in this case and will usually not show another one
+ *     (#GST_INSTALL_PLUGINS_ERROR)
+ *   </para></listitem>
+ *   <listitem><para>
+ *     3 if some of the requested plugins could be installed, but not all
+ *     (#GST_INSTALL_PLUGINS_PARTIAL_SUCCESS)
+ *   </para></listitem>
+ *   <listitem><para>
+ *     4 if the user aborted the installation (#GST_INSTALL_PLUGINS_USER_ABORT)
+ *   </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * <emphasis>5. How to map the required detail string to packages</emphasis>
+ * </para>
+ * <para>
+ * It is up to the vendor to find mechanism to map required components from
+ * the detail string to the actual packages/plugins to install. This could
+ * be a hardcoded list of mappings, for example, or be part of the packaging
+ * system metadata.
+ * </para>
+ * <para>
+ * GStreamer plugin files can be introspected for this information. The
+ * <literal>gst-inspect</literal> utility has a special command line option
+ * that will output information similar to what is required. For example
+ * <command>
+ * $ gst-inspect-0.10 --print-plugin-auto-install-info /path/to/libgstvorbis.so
+ * </command>
+ * should output something along the lines of
+ * <computeroutput>
+ * decoder-audio/x-vorbis
+ * element-vorbisdec
+ * element-vorbisenc
+ * element-vorbisparse
+ * element-vorbistag
+ * encoder-audio/x-vorbis
+ * </computeroutput>
+ * Note that in the encoder and decoder case the introspected caps can be more
+ * complex with additional fields, e.g.
+ * <literal>audio/mpeg,mpegversion=(int){2,4}</literal>, so they will not
+ * always exactly match the caps wanted by the application. It is up to the
+ * installer to deal with this (either by doing proper caps intersection using
+ * the GStreamer #GstCaps API, or by only taking into account the media type).
+ * </para>
+ * <para>
+ * Another potential source of problems are plugins such as ladspa or
+ * libvisual where the list of elements depends on the installed
+ * ladspa/libvisual plugins at the time. This is also up to the distribution
+ * to handle (but usually not relevant for playback applications).
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "install-plugins.h"
+
+#include <gst/gstinfo.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#include <string.h>
+
+/* best effort to make things compile and possibly even work on win32 */
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(status) ((((guint)(status)) & 0xff00) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(status) ((((guint)(status)) & 0x7f) == 0)
+#endif
+
+static gboolean install_in_progress;    /* FALSE */
+
+/* private struct */
+struct _GstInstallPluginsContext
+{
+  guint xid;
+};
+
+/**
+ * gst_install_plugins_context_set_xid:
+ * @ctx: a #GstInstallPluginsContext
+ * @xid: the XWindow ID (XID) of the top-level application
+ *
+ * This function is for X11-based applications (such as most Gtk/Qt
+ * applications on linux/unix) only. You can use it to tell the external
+ * installer the XID of your main application window. That way the installer
+ * can make its own window transient to your application window during the
+ * installation.
+ *
+ * If set, the XID will be passed to the installer via a --transient-for=XID
+ * command line option.
+ *
+ * Gtk+/Gnome application should be able to obtain the XID of the top-level
+ * window like this:
+ * <programlisting>
+ * ##include &lt;gtk/gtk.h&gt;
+ * ##ifdef GDK_WINDOWING_X11
+ * ##include &lt;gdk/gdkx.h&gt;
+ * ##endif
+ * ...
+ * ##ifdef GDK_WINDOWING_X11
+ *   xid = GDK_WINDOW_XWINDOW (GTK_WIDGET (application_window)-&gt;window);
+ * ##endif
+ * ...
+ * </programlisting>
+ *
+ * Since: 0.10.12
+ */
+void
+gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx, guint xid)
+{
+  g_return_if_fail (ctx != NULL);
+
+  ctx->xid = xid;
+}
+
+/**
+ * gst_install_plugins_context_new:
+ *
+ * Creates a new #GstInstallPluginsContext.
+ *
+ * Returns: a new #GstInstallPluginsContext. Free with
+ * gst_install_plugins_context_free() when no longer needed
+ *
+ * Since: 0.10.12
+ */
+GstInstallPluginsContext *
+gst_install_plugins_context_new (void)
+{
+  return g_new0 (GstInstallPluginsContext, 1);
+}
+
+/**
+ * gst_install_plugins_context_free:
+ * @ctx: a #GstInstallPluginsContext
+ *
+ * Frees a #GstInstallPluginsContext.
+ *
+ * Since: 0.10.12
+ */
+void
+gst_install_plugins_context_free (GstInstallPluginsContext * ctx)
+{
+  g_return_if_fail (ctx != NULL);
+
+  g_free (ctx);
+}
+
+static GstInstallPluginsContext *
+gst_install_plugins_context_copy (GstInstallPluginsContext * ctx)
+{
+  GstInstallPluginsContext *ret;
+
+  ret = gst_install_plugins_context_new ();
+  ret->xid = ctx->xid;
+
+  return ret;
+}
+
+GType
+gst_install_plugins_context_get_type (void)
+{
+  static GType gst_ipc_type = 0;
+
+  if (G_UNLIKELY (gst_ipc_type == 0)) {
+    gst_ipc_type = g_boxed_type_register_static ("GstInstallPluginsContext",
+        (GBoxedCopyFunc) gst_install_plugins_context_copy,
+        (GBoxedFreeFunc) gst_install_plugins_context_free);
+  }
+  return gst_ipc_type;
+}
+
+static const gchar *
+gst_install_plugins_get_helper (void)
+{
+  const gchar *helper;
+
+  helper = g_getenv ("GST_INSTALL_PLUGINS_HELPER");
+  if (helper == NULL)
+    helper = GST_INSTALL_PLUGINS_HELPER;
+
+  GST_LOG ("Using plugin install helper '%s'", helper);
+  return helper;
+}
+
+static gboolean
+ptr_array_contains_string (GPtrArray * arr, const gchar * s)
+{
+  gint i;
+
+  for (i = 0; i < arr->len; ++i) {
+    if (strcmp ((const char *) g_ptr_array_index (arr, i), s) == 0)
+      return TRUE;
+  }
+  return FALSE;
+}
+
+static gboolean
+gst_install_plugins_spawn_child (gchar ** details,
+    GstInstallPluginsContext * ctx, GPid * child_pid, gint * exit_status)
+{
+  GPtrArray *arr;
+  gboolean ret;
+  GError *err = NULL;
+  gchar **argv, xid_str[64] = { 0, };
+
+  arr = g_ptr_array_new ();
+
+  /* argv[0] = helper path */
+  g_ptr_array_add (arr, (gchar *) gst_install_plugins_get_helper ());
+
+  /* add any additional command line args from the context */
+  if (ctx != NULL && ctx->xid != 0) {
+    g_snprintf (xid_str, sizeof (xid_str), "--transient-for=%u", ctx->xid);
+    g_ptr_array_add (arr, xid_str);
+  }
+
+  /* finally, add the detail strings, but without duplicates */
+  while (details != NULL && details[0] != NULL) {
+    if (!ptr_array_contains_string (arr, details[0]))
+      g_ptr_array_add (arr, details[0]);
+    ++details;
+  }
+
+  /* and NULL-terminate */
+  g_ptr_array_add (arr, NULL);
+
+  argv = (gchar **) arr->pdata;
+
+  if (child_pid == NULL && exit_status != NULL) {
+    install_in_progress = TRUE;
+    ret = g_spawn_sync (NULL, argv, NULL, (GSpawnFlags) 0, NULL, NULL,
+        NULL, NULL, exit_status, &err);
+    install_in_progress = FALSE;
+  } else if (child_pid != NULL && exit_status == NULL) {
+    install_in_progress = TRUE;
+    ret = g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL,
+        NULL, child_pid, &err);
+  } else {
+    g_return_val_if_reached (FALSE);
+  }
+
+  if (!ret) {
+    GST_ERROR ("Error spawning plugin install helper: %s", err->message);
+    g_error_free (err);
+  }
+
+  g_ptr_array_free (arr, TRUE);
+  return ret;
+}
+
+static GstInstallPluginsReturn
+gst_install_plugins_return_from_status (gint status)
+{
+  GstInstallPluginsReturn ret;
+
+  /* did we exit cleanly? */
+  if (!WIFEXITED (status)) {
+    ret = GST_INSTALL_PLUGINS_CRASHED;
+  } else {
+    ret = (GstInstallPluginsReturn) WEXITSTATUS (status);
+
+    /* did the helper return an invalid status code? */
+    if ((ret < 0 || ret >= GST_INSTALL_PLUGINS_STARTED_OK) &&
+        ret != GST_INSTALL_PLUGINS_INTERNAL_FAILURE) {
+      ret = GST_INSTALL_PLUGINS_INVALID;
+    }
+  }
+
+  GST_LOG ("plugin installer exited with status 0x%04x = %s", status,
+      gst_install_plugins_return_get_name (ret));
+
+  return ret;
+}
+
+typedef struct
+{
+  GstInstallPluginsResultFunc func;
+  gpointer user_data;
+} GstInstallPluginsAsyncHelper;
+
+static void
+gst_install_plugins_installer_exited (GPid pid, gint status, gpointer data)
+{
+  GstInstallPluginsAsyncHelper *helper;
+  GstInstallPluginsReturn ret;
+
+  install_in_progress = FALSE;
+
+  helper = (GstInstallPluginsAsyncHelper *) data;
+  ret = gst_install_plugins_return_from_status (status);
+
+  GST_LOG ("calling plugin install result function %p", helper->func);
+  helper->func (ret, helper->user_data);
+
+  g_free (helper);
+}
+
+/**
+ * gst_install_plugins_async:
+ * @details: NULL-terminated array of installer string details (see below)
+ * @ctx: a #GstInstallPluginsContext, or NULL
+ * @func: (scope async): the function to call when the installer program returns
+ * @user_data: (closure): the user data to pass to @func when called, or NULL
+ * 
+ * Requests plugin installation without blocking. Once the plugins have been
+ * installed or installation has failed, @func will be called with the result
+ * of the installation and your provided @user_data pointer.
+ *
+ * This function requires a running GLib/Gtk main loop. If you are not
+ * running a GLib/Gtk main loop, make sure to regularly call
+ * g_main_context_iteration(NULL,FALSE).
+ *
+ * The installer strings that make up @detail are typically obtained by
+ * calling gst_missing_plugin_message_get_installer_detail() on missing-plugin
+ * messages that have been caught on a pipeline's bus or created by the
+ * application via the provided API, such as gst_missing_element_message_new().
+ *
+ * It is possible to request the installation of multiple missing plugins in
+ * one go (as might be required if there is a demuxer for a certain format
+ * installed but no suitable video decoder and no suitable audio decoder).
+ *
+ * Returns: result code whether an external installer could be started
+ *
+ * Since: 0.10.12
+ */
+
+GstInstallPluginsReturn
+gst_install_plugins_async (gchar ** details, GstInstallPluginsContext * ctx,
+    GstInstallPluginsResultFunc func, gpointer user_data)
+{
+  GstInstallPluginsAsyncHelper *helper;
+  GPid pid;
+
+  g_return_val_if_fail (details != NULL, GST_INSTALL_PLUGINS_INTERNAL_FAILURE);
+  g_return_val_if_fail (func != NULL, GST_INSTALL_PLUGINS_INTERNAL_FAILURE);
+
+  if (install_in_progress)
+    return GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS;
+
+  /* if we can't access our helper, don't bother */
+  if (!g_file_test (gst_install_plugins_get_helper (),
+          G_FILE_TEST_IS_EXECUTABLE))
+    return GST_INSTALL_PLUGINS_HELPER_MISSING;
+
+  if (!gst_install_plugins_spawn_child (details, ctx, &pid, NULL))
+    return GST_INSTALL_PLUGINS_INTERNAL_FAILURE;
+
+  helper = g_new (GstInstallPluginsAsyncHelper, 1);
+  helper->func = func;
+  helper->user_data = user_data;
+
+  g_child_watch_add (pid, gst_install_plugins_installer_exited, helper);
+
+  return GST_INSTALL_PLUGINS_STARTED_OK;
+}
+
+/**
+ * gst_install_plugins_sync:
+ * @details: NULL-terminated array of installer string details
+ * @ctx: a #GstInstallPluginsContext, or NULL
+ * 
+ * Requests plugin installation and block until the plugins have been
+ * installed or installation has failed.
+ *
+ * This function should almost never be used, it only exists for cases where
+ * a non-GLib main loop is running and the user wants to run it in a separate
+ * thread and marshal the result back asynchronously into the main thread
+ * using the other non-GLib main loop. You should almost always use
+ * gst_install_plugins_async() instead of this function.
+ *
+ * Returns: the result of the installation.
+ *
+ * Since: 0.10.12
+ */
+GstInstallPluginsReturn
+gst_install_plugins_sync (gchar ** details, GstInstallPluginsContext * ctx)
+{
+  gint status;
+
+  g_return_val_if_fail (details != NULL, GST_INSTALL_PLUGINS_INTERNAL_FAILURE);
+
+  if (install_in_progress)
+    return GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS;
+
+  /* if we can't access our helper, don't bother */
+  if (!g_file_test (gst_install_plugins_get_helper (),
+          G_FILE_TEST_IS_EXECUTABLE))
+    return GST_INSTALL_PLUGINS_HELPER_MISSING;
+
+  if (!gst_install_plugins_spawn_child (details, ctx, NULL, &status))
+    return GST_INSTALL_PLUGINS_INTERNAL_FAILURE;
+
+  return gst_install_plugins_return_from_status (status);
+}
+
+/**
+ * gst_install_plugins_return_get_name:
+ * @ret: the return status code
+ * 
+ * Convenience function to return the descriptive string associated
+ * with a status code.  This function returns English strings and
+ * should not be used for user messages. It is here only to assist
+ * in debugging.
+ *
+ * Returns: a descriptive string for the status code in @ret
+ *
+ * Since: 0.10.12
+ */
+const gchar *
+gst_install_plugins_return_get_name (GstInstallPluginsReturn ret)
+{
+  switch (ret) {
+    case GST_INSTALL_PLUGINS_SUCCESS:
+      return "success";
+    case GST_INSTALL_PLUGINS_NOT_FOUND:
+      return "not-found";
+    case GST_INSTALL_PLUGINS_ERROR:
+      return "install-error";
+    case GST_INSTALL_PLUGINS_CRASHED:
+      return "installer-exit-unclean";
+    case GST_INSTALL_PLUGINS_PARTIAL_SUCCESS:
+      return "partial-success";
+    case GST_INSTALL_PLUGINS_USER_ABORT:
+      return "user-abort";
+    case GST_INSTALL_PLUGINS_STARTED_OK:
+      return "started-ok";
+    case GST_INSTALL_PLUGINS_INTERNAL_FAILURE:
+      return "internal-failure";
+    case GST_INSTALL_PLUGINS_HELPER_MISSING:
+      return "helper-missing";
+    case GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS:
+      return "install-in-progress";
+    case GST_INSTALL_PLUGINS_INVALID:
+      return "invalid";
+    default:
+      break;
+  }
+  return "(UNKNOWN)";
+}
+
+/**
+ * gst_install_plugins_installation_in_progress:
+ * 
+ * Checks whether plugin installation (initiated by this application only)
+ * is currently in progress.
+ *
+ * Returns: TRUE if plugin installation is in progress, otherwise FALSE
+ *
+ * Since: 0.10.12
+ */
+gboolean
+gst_install_plugins_installation_in_progress (void)
+{
+  return install_in_progress;
+}
+
+/**
+ * gst_install_plugins_supported:
+ * 
+ * Checks whether plugin installation is likely to be supported by the
+ * current environment. This currently only checks whether the helper script
+ * that is to be provided by the distribution or operating system vendor
+ * exists.
+ *
+ * Returns: TRUE if plugin installation is likely to be supported.
+ *
+ * Since: 0.10.15
+ */
+gboolean
+gst_install_plugins_supported (void)
+{
+  return g_file_test (gst_install_plugins_get_helper (),
+      G_FILE_TEST_IS_EXECUTABLE);
+}
diff --git a/gst-libs/gst/pbutils/install-plugins.h b/gst-libs/gst/pbutils/install-plugins.h
new file mode 100644
index 0000000..f3ec2c0
--- /dev/null
+++ b/gst-libs/gst/pbutils/install-plugins.h
@@ -0,0 +1,144 @@
+/* GStreamer base utils library plugin install support for applications
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006 Ryan Lortie <desrt desrt ca>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PB_UTILS_INSTALL_PLUGINS_H__
+#define __GST_PB_UTILS_INSTALL_PLUGINS_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/*
+ * functions for use by applications to initiate installation of missing plugins
+ */
+
+/**
+ * GstInstallPluginsReturn:
+ * @GST_INSTALL_PLUGINS_SUCCESS: all of the requested plugins could be
+ *     installed
+ * @GST_INSTALL_PLUGINS_NOT_FOUND: no appropriate installation candidate for
+ *     any of the requested plugins could be found. Only return this if nothing
+ *     has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if
+ *     some (but not all) of the requested plugins could be installed.
+ * @GST_INSTALL_PLUGINS_ERROR: an error occured during the installation. If
+ *     this happens, the  user has already seen an error message and another
+ *     one should not be displayed
+ * @GST_INSTALL_PLUGINS_CRASHED: the installer had an unclean exit code
+ *     (ie. death by signal)
+ * @GST_INSTALL_PLUGINS_PARTIAL_SUCCESS: some of the requested plugins could
+ *     be installed, but not all
+ * @GST_INSTALL_PLUGINS_USER_ABORT: the user has aborted the installation
+ * @GST_INSTALL_PLUGINS_INVALID: the helper returned an invalid status code
+ * @GST_INSTALL_PLUGINS_STARTED_OK: returned by gst_install_plugins_async() to
+ *     indicate that everything went fine so far and the provided callback
+ *     will be called with the result of the installation later
+ * @GST_INSTALL_PLUGINS_INTERNAL_FAILURE: some internal failure has
+ *     occured when trying to start the installer
+ * @GST_INSTALL_PLUGINS_HELPER_MISSING: the helper script to call the
+ *     actual installer is not installed
+ * @GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS: a previously-started plugin
+ *     installation is still in progress, try again later
+ *
+ * Result codes returned by gst_install_plugins_async() and
+ * gst_install_plugins_sync(), and also the result code passed to the
+ * #GstInstallPluginsResultFunc specified with gst_install_plugins_async().
+ *
+ * These codes indicate success or failure of starting an external installer
+ * program and to what extent the requested plugins could be installed.
+ *
+ * Since: 0.10.12
+ */
+typedef enum {
+  /* Return codes from the installer. Returned by gst_install_plugins_sync(),
+   * or passed as result code to your #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_SUCCESS = 0,
+  GST_INSTALL_PLUGINS_NOT_FOUND = 1,
+  GST_INSTALL_PLUGINS_ERROR = 2,
+  GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3,
+  GST_INSTALL_PLUGINS_USER_ABORT = 4,
+
+  /* Returned by gst_install_plugins_sync(), or passed as result code to your
+   * #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_CRASHED = 100,
+  GST_INSTALL_PLUGINS_INVALID,
+
+  /* Return codes from starting the external helper, may be returned by both
+   * gst_install_plugins_sync() and gst_install_plugins_async(), but should
+   * never be seen by a #GstInstallPluginsResultFunc */
+  GST_INSTALL_PLUGINS_STARTED_OK = 200,
+  GST_INSTALL_PLUGINS_INTERNAL_FAILURE,
+  GST_INSTALL_PLUGINS_HELPER_MISSING,
+  GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS
+} GstInstallPluginsReturn;
+
+/**
+ * GstInstallPluginsContext:
+ *
+ * Opaque context structure for the plugin installation. Use the provided
+ * API to set details on it.
+ *
+ * Since: 0.10.12
+ */
+
+#define GST_TYPE_INSTALL_PLUGINS_CONTEXT	(gst_install_plugins_context_get_type())
+
+typedef struct _GstInstallPluginsContext GstInstallPluginsContext;
+
+GstInstallPluginsContext * gst_install_plugins_context_new (void);
+
+void   gst_install_plugins_context_free    (GstInstallPluginsContext * ctx);
+
+void   gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx,
+                                            guint                      xid);
+
+GType  gst_install_plugins_context_get_type (void);
+
+/**
+ * GstInstallPluginsResultFunc:
+ * @result: whether the installation of the requested plugins succeeded or not
+ * @user_data: the user data passed to gst_install_plugins_async()
+ *
+ * The prototype of the callback function that will be called once the
+ * external plugin installer program has returned. You only need to provide
+ * a callback function if you are using the asynchronous interface.
+ *
+ * Since: 0.10.12
+ */
+typedef void (*GstInstallPluginsResultFunc) (GstInstallPluginsReturn  result,
+                                             gpointer                 user_data);
+
+GstInstallPluginsReturn  gst_install_plugins_async (gchar                    ** details,
+                                                    GstInstallPluginsContext  * ctx,
+                                                    GstInstallPluginsResultFunc func,
+                                                    gpointer                    user_data);
+
+GstInstallPluginsReturn  gst_install_plugins_sync  (gchar                    ** details,
+                                                    GstInstallPluginsContext  * ctx);
+
+const gchar * gst_install_plugins_return_get_name (GstInstallPluginsReturn ret);
+
+gboolean      gst_install_plugins_installation_in_progress (void);
+
+gboolean      gst_install_plugins_supported (void);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */
+
diff --git a/gst-libs/gst/pbutils/missing-plugins.c b/gst-libs/gst/pbutils/missing-plugins.c
new file mode 100644
index 0000000..896d28d
--- /dev/null
+++ b/gst-libs/gst/pbutils/missing-plugins.c
@@ -0,0 +1,809 @@
+/* GStreamer base utils library missing plugins support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpbutilsmissingplugins
+ * @short_description: Create, recognise and parse missing-plugins messages
+ *
+ * <refsect2>
+ * <para>
+ * Functions to create, recognise and parse missing-plugins messages for
+ * applications and elements.
+ * </para>
+ * <para>
+ * Missing-plugin messages are posted on the bus by elements like decodebin
+ * or playbin if they can't find an appropriate source element or decoder
+ * element. The application can use these messages for two things:
+ * <itemizedlist>
+ *   <listitem><para>
+ *     concise error/problem reporting to the user mentioning what exactly
+ *     is missing, see gst_missing_plugin_message_get_description()
+ *   </para></listitem>
+ *   <listitem><para>
+ *     initiate installation of missing plugins, see
+ *     gst_missing_plugin_message_get_installer_detail() and
+ *     gst_install_plugins_async()
+ *   </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * <para>
+ * Applications may also create missing-plugin messages themselves to install
+ * required elements that are missing, using the install mechanism mentioned
+ * above.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>            /* getpid on UNIX */
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>           /* getpid on win32 */
+#endif
+
+#include "gst/gst-i18n-plugin.h"
+
+#include "pbutils.h"
+#include "pbutils-private.h"
+
+#include <string.h>
+
+#define GST_DETAIL_STRING_MARKER "gstreamer"
+
+typedef enum
+{
+  GST_MISSING_TYPE_UNKNOWN = 0,
+  GST_MISSING_TYPE_URISOURCE,
+  GST_MISSING_TYPE_URISINK,
+  GST_MISSING_TYPE_ELEMENT,
+  GST_MISSING_TYPE_DECODER,
+  GST_MISSING_TYPE_ENCODER
+} GstMissingType;
+
+static const struct
+{
+  GstMissingType type;
+  const gchar type_string[12];
+} missing_type_mapping[] = {
+  {
+  GST_MISSING_TYPE_URISOURCE, "urisource"}, {
+  GST_MISSING_TYPE_URISINK, "urisink"}, {
+  GST_MISSING_TYPE_ELEMENT, "element"}, {
+  GST_MISSING_TYPE_DECODER, "decoder"}, {
+  GST_MISSING_TYPE_ENCODER, "encoder"}
+};
+
+static GstMissingType
+missing_structure_get_type (const GstStructure * s)
+{
+  const gchar *type;
+  guint i;
+
+  type = gst_structure_get_string (s, "type");
+  g_return_val_if_fail (type != NULL, GST_MISSING_TYPE_UNKNOWN);
+
+  for (i = 0; i < G_N_ELEMENTS (missing_type_mapping); ++i) {
+    if (strcmp (missing_type_mapping[i].type_string, type) == 0)
+      return missing_type_mapping[i].type;
+  }
+
+  return GST_MISSING_TYPE_UNKNOWN;
+}
+
+GstCaps *
+copy_and_clean_caps (const GstCaps * caps)
+{
+  GstStructure *s;
+  GstCaps *ret;
+
+  ret = gst_caps_copy (caps);
+
+  /* make caps easier to interpret, remove common fields that are likely
+   * to be irrelevant for determining the right plugin (ie. mostly fields
+   * where template caps usually have the standard MIN - MAX range as value) */
+  s = gst_caps_get_structure (ret, 0);
+  gst_structure_remove_field (s, "codec_data");
+  gst_structure_remove_field (s, "palette_data");
+  gst_structure_remove_field (s, "pixel-aspect-ratio");
+  gst_structure_remove_field (s, "framerate");
+  gst_structure_remove_field (s, "leaf_size");
+  gst_structure_remove_field (s, "packet_size");
+  gst_structure_remove_field (s, "block_align");
+  gst_structure_remove_field (s, "metadata-interval");  /* icy caps */
+  /* decoders/encoders almost always handle the usual width/height/channel/rate
+   * range (and if we don't remove this then the app will have a much harder
+   * time blacklisting formats it has unsuccessfully tried to install before) */
+  gst_structure_remove_field (s, "width");
+  gst_structure_remove_field (s, "depth");
+  gst_structure_remove_field (s, "height");
+  gst_structure_remove_field (s, "channels");
+  gst_structure_remove_field (s, "rate");
+  /* rtp fields */
+  gst_structure_remove_field (s, "config");
+  gst_structure_remove_field (s, "clock-rate");
+  gst_structure_remove_field (s, "clock-base");
+  gst_structure_remove_field (s, "maxps");
+  gst_structure_remove_field (s, "seqnum-base");
+  gst_structure_remove_field (s, "npt-start");
+  gst_structure_remove_field (s, "npt-stop");
+  gst_structure_remove_field (s, "play-speed");
+  gst_structure_remove_field (s, "play-scale");
+  gst_structure_remove_field (s, "dynamic_range");
+
+  return ret;
+}
+
+/**
+ * gst_missing_uri_source_message_new:
+ * @element: the #GstElement posting the message
+ * @protocol: the URI protocol the missing source needs to implement,
+ *            e.g. "http" or "mms"
+ *
+ * Creates a missing-plugin message for @element to notify the application
+ * that a source element for a particular URI protocol is missing. This
+ * function is mainly for use in plugins.
+ *
+ * Returns: (transfer full): a new #GstMessage, or NULL on error
+ */
+GstMessage *
+gst_missing_uri_source_message_new (GstElement * element,
+    const gchar * protocol)
+{
+  GstStructure *s;
+  gchar *description;
+
+  g_return_val_if_fail (element != NULL, NULL);
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  description = gst_pb_utils_get_source_description (protocol);
+
+  s = gst_structure_new ("missing-plugin", "type", G_TYPE_STRING,
+      "urisource", "detail", G_TYPE_STRING, protocol, "name", G_TYPE_STRING,
+      description, NULL);
+
+  g_free (description);
+  return gst_message_new_element (GST_OBJECT_CAST (element), s);
+}
+
+/**
+ * gst_missing_uri_sink_message_new:
+ * @element: the #GstElement posting the message
+ * @protocol: the URI protocol the missing sink needs to implement,
+ *            e.g. "http" or "smb"
+ *
+ * Creates a missing-plugin message for @element to notify the application
+ * that a sink element for a particular URI protocol is missing. This
+ * function is mainly for use in plugins.
+ *
+ * Returns: (transfer full): a new #GstMessage, or NULL on error
+ */
+GstMessage *
+gst_missing_uri_sink_message_new (GstElement * element, const gchar * protocol)
+{
+  GstStructure *s;
+  gchar *description;
+
+  g_return_val_if_fail (element != NULL, NULL);
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  description = gst_pb_utils_get_sink_description (protocol);
+
+  s = gst_structure_new ("missing-plugin", "type", G_TYPE_STRING,
+      "urisink", "detail", G_TYPE_STRING, protocol, "name", G_TYPE_STRING,
+      description, NULL);
+
+  g_free (description);
+  return gst_message_new_element (GST_OBJECT_CAST (element), s);
+}
+
+/**
+ * gst_missing_element_message_new:
+ * @element: the #GstElement posting the message
+ * @factory_name: the name of the missing element (element factory),
+ *            e.g. "videoscale" or "cdparanoiasrc"
+ *
+ * Creates a missing-plugin message for @element to notify the application
+ * that a certain required element is missing. This function is mainly for
+ * use in plugins.
+ *
+ * Returns: (transfer full): a new #GstMessage, or NULL on error
+ */
+GstMessage *
+gst_missing_element_message_new (GstElement * element,
+    const gchar * factory_name)
+{
+  GstStructure *s;
+  gchar *description;
+
+  g_return_val_if_fail (element != NULL, NULL);
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+  g_return_val_if_fail (factory_name != NULL, NULL);
+
+  description = gst_pb_utils_get_element_description (factory_name);
+
+  s = gst_structure_new ("missing-plugin", "type", G_TYPE_STRING,
+      "element", "detail", G_TYPE_STRING, factory_name, "name", G_TYPE_STRING,
+      description, NULL);
+
+  g_free (description);
+  return gst_message_new_element (GST_OBJECT_CAST (element), s);
+}
+
+/**
+ * gst_missing_decoder_message_new:
+ * @element: the #GstElement posting the message
+ * @decode_caps: the (fixed) caps for which a decoder element is needed
+ *
+ * Creates a missing-plugin message for @element to notify the application
+ * that a decoder element for a particular set of (fixed) caps is missing.
+ * This function is mainly for use in plugins.
+ *
+ * Returns: (transfer full): a new #GstMessage, or NULL on error
+ */
+GstMessage *
+gst_missing_decoder_message_new (GstElement * element,
+    const GstCaps * decode_caps)
+{
+  GstStructure *s;
+  GstCaps *caps;
+  gchar *description;
+
+  g_return_val_if_fail (element != NULL, NULL);
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+  g_return_val_if_fail (decode_caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (decode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_any (decode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_empty (decode_caps), NULL);
+  g_return_val_if_fail (gst_caps_is_fixed (decode_caps), NULL);
+
+  description = gst_pb_utils_get_decoder_description (decode_caps);
+  caps = copy_and_clean_caps (decode_caps);
+
+  s = gst_structure_new ("missing-plugin", "type", G_TYPE_STRING,
+      "decoder", "detail", GST_TYPE_CAPS, caps, "name", G_TYPE_STRING,
+      description, NULL);
+
+  gst_caps_unref (caps);
+  g_free (description);
+
+  return gst_message_new_element (GST_OBJECT_CAST (element), s);
+}
+
+/**
+ * gst_missing_encoder_message_new:
+ * @element: the #GstElement posting the message
+ * @encode_caps: the (fixed) caps for which an encoder element is needed
+ *
+ * Creates a missing-plugin message for @element to notify the application
+ * that an encoder element for a particular set of (fixed) caps is missing.
+ * This function is mainly for use in plugins.
+ *
+ * Returns: (transfer full): a new #GstMessage, or NULL on error
+ */
+GstMessage *
+gst_missing_encoder_message_new (GstElement * element,
+    const GstCaps * encode_caps)
+{
+  GstStructure *s;
+  GstCaps *caps;
+  gchar *description;
+
+  g_return_val_if_fail (element != NULL, NULL);
+  g_return_val_if_fail (GST_IS_ELEMENT (element), NULL);
+  g_return_val_if_fail (encode_caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (encode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_any (encode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_empty (encode_caps), NULL);
+  g_return_val_if_fail (gst_caps_is_fixed (encode_caps), NULL);
+
+  description = gst_pb_utils_get_encoder_description (encode_caps);
+  caps = copy_and_clean_caps (encode_caps);
+
+  s = gst_structure_new ("missing-plugin", "type", G_TYPE_STRING,
+      "encoder", "detail", GST_TYPE_CAPS, caps, "name", G_TYPE_STRING,
+      description, NULL);
+
+  gst_caps_unref (caps);
+  g_free (description);
+
+  return gst_message_new_element (GST_OBJECT_CAST (element), s);
+}
+
+static gboolean
+missing_structure_get_string_detail (const GstStructure * s, gchar ** p_detail)
+{
+  const gchar *detail;
+  GType detail_type;
+
+  *p_detail = NULL;
+
+  detail_type = gst_structure_get_field_type (s, "detail");
+  if (!g_type_is_a (detail_type, G_TYPE_STRING)) {
+    GST_WARNING ("expected 'detail' field to be of G_TYPE_STRING");
+    return FALSE;
+  }
+
+  detail = gst_structure_get_string (s, "detail");
+  if (detail == NULL || *detail == '\0') {
+    GST_WARNING ("empty 'detail' field");
+    return FALSE;
+  }
+  *p_detail = g_strdup (detail);
+  return TRUE;
+}
+
+static gboolean
+missing_structure_get_caps_detail (const GstStructure * s, GstCaps ** p_caps)
+{
+  const GstCaps *caps;
+  const GValue *val;
+  GType detail_type;
+
+  *p_caps = NULL;
+
+  detail_type = gst_structure_get_field_type (s, "detail");
+  if (!g_type_is_a (detail_type, GST_TYPE_CAPS)) {
+    GST_WARNING ("expected 'detail' field to be of GST_TYPE_CAPS");
+    return FALSE;
+  }
+
+  val = gst_structure_get_value (s, "detail");
+  caps = gst_value_get_caps (val);
+  if (gst_caps_is_empty (caps) || gst_caps_is_any (caps)) {
+    GST_WARNING ("EMPTY or ANY caps not allowed");
+    return FALSE;
+  }
+
+  *p_caps = gst_caps_copy (caps);
+  return TRUE;
+}
+
+/**
+ * gst_missing_plugin_message_get_installer_detail:
+ * @msg: a missing-plugin #GstMessage of type #GST_MESSAGE_ELEMENT
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ */
+gchar *
+gst_missing_plugin_message_get_installer_detail (GstMessage * msg)
+{
+  GstMissingType missing_type;
+  const gchar *progname;
+  const gchar *type;
+  GString *str = NULL;
+  gchar *detail = NULL;
+  gchar *desc;
+  const GstStructure *structure;
+
+  g_return_val_if_fail (gst_is_missing_plugin_message (msg), NULL);
+
+  structure = gst_message_get_structure (msg);
+  GST_LOG ("Parsing missing-plugin message: %" GST_PTR_FORMAT, structure);
+
+  missing_type = missing_structure_get_type (structure);
+  if (missing_type == GST_MISSING_TYPE_UNKNOWN) {
+    GST_WARNING ("couldn't parse 'type' field");
+    goto error;
+  }
+
+  type = gst_structure_get_string (structure, "type");
+  g_assert (type != NULL);      /* validity already checked above */
+
+  /* FIXME: use gst_installer_detail_new() here too */
+  str = g_string_new (GST_DETAIL_STRING_MARKER "|");
+  g_string_append_printf (str, "%u.%u|", GST_VERSION_MAJOR, GST_VERSION_MINOR);
+
+  progname = (const gchar *) g_get_prgname ();
+  if (progname) {
+    g_string_append_printf (str, "%s|", progname);
+  } else {
+    g_string_append_printf (str, "pid/%lu|", (gulong) getpid ());
+  }
+
+  desc = gst_missing_plugin_message_get_description (msg);
+  if (desc) {
+    g_strdelimit (desc, "|", '#');
+    g_string_append_printf (str, "%s|", desc);
+    g_free (desc);
+  } else {
+    g_string_append (str, "|");
+  }
+
+  switch (missing_type) {
+    case GST_MISSING_TYPE_URISOURCE:
+    case GST_MISSING_TYPE_URISINK:
+    case GST_MISSING_TYPE_ELEMENT:
+      if (!missing_structure_get_string_detail (structure, &detail))
+        goto error;
+      break;
+    case GST_MISSING_TYPE_DECODER:
+    case GST_MISSING_TYPE_ENCODER:{
+      GstCaps *caps = NULL;
+
+      if (!missing_structure_get_caps_detail (structure, &caps))
+        goto error;
+
+      detail = gst_caps_to_string (caps);
+      gst_caps_unref (caps);
+      break;
+    }
+    default:
+      g_return_val_if_reached (NULL);
+  }
+
+  g_string_append_printf (str, "%s-%s", type, detail);
+  g_free (detail);
+
+  return g_string_free (str, FALSE);
+
+/* ERRORS */
+error:
+  {
+    GST_WARNING ("Failed to parse missing-plugin msg: %" GST_PTR_FORMAT, msg);
+    if (str)
+      g_string_free (str, TRUE);
+    return NULL;
+  }
+}
+
+/**
+ * gst_missing_plugin_message_get_description:
+ * @msg: a missing-plugin #GstMessage of type #GST_MESSAGE_ELEMENT
+ *
+ * Returns a localised string describing the missing feature, for use in
+ * error dialogs and the like. Should never return NULL unless @msg is not
+ * a valid missing-plugin message.
+ *
+ * This function is mainly for applications that need a human-readable string
+ * describing a missing plugin, given a previously collected missing-plugin
+ * message
+ *
+ * Returns: a newly-allocated description string, or NULL on error. Free
+ *          string with g_free() when not needed any longer.
+ */
+gchar *
+gst_missing_plugin_message_get_description (GstMessage * msg)
+{
+  GstMissingType missing_type;
+  const gchar *desc;
+  gchar *ret = NULL;
+  const GstStructure *structure;
+
+  g_return_val_if_fail (gst_is_missing_plugin_message (msg), NULL);
+
+  structure = gst_message_get_structure (msg);
+  GST_LOG ("Parsing missing-plugin message: %" GST_PTR_FORMAT, structure);
+
+  desc = gst_structure_get_string (structure, "name");
+  if (desc != NULL && *desc != '\0') {
+    ret = g_strdup (desc);
+    goto done;
+  }
+
+  /* fallback #1 */
+  missing_type = missing_structure_get_type (structure);
+
+  switch (missing_type) {
+    case GST_MISSING_TYPE_URISOURCE:
+    case GST_MISSING_TYPE_URISINK:
+    case GST_MISSING_TYPE_ELEMENT:{
+      gchar *detail = NULL;
+
+      if (missing_structure_get_string_detail (structure, &detail)) {
+        if (missing_type == GST_MISSING_TYPE_URISOURCE)
+          ret = gst_pb_utils_get_source_description (detail);
+        else if (missing_type == GST_MISSING_TYPE_URISINK)
+          ret = gst_pb_utils_get_sink_description (detail);
+        else
+          ret = gst_pb_utils_get_sink_description (detail);
+        g_free (detail);
+      }
+      break;
+    }
+    case GST_MISSING_TYPE_DECODER:
+    case GST_MISSING_TYPE_ENCODER:{
+      GstCaps *caps = NULL;
+
+      if (missing_structure_get_caps_detail (structure, &caps)) {
+        if (missing_type == GST_MISSING_TYPE_DECODER)
+          ret = gst_pb_utils_get_decoder_description (caps);
+        else
+          ret = gst_pb_utils_get_encoder_description (caps);
+        gst_caps_unref (caps);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+
+  if (ret)
+    goto done;
+
+  /* fallback #2 */
+  switch (missing_type) {
+    case GST_MISSING_TYPE_URISOURCE:
+      desc = _("Unknown source element");
+      break;
+    case GST_MISSING_TYPE_URISINK:
+      desc = _("Unknown sink element");
+      break;
+    case GST_MISSING_TYPE_ELEMENT:
+      desc = _("Unknown element");
+      break;
+    case GST_MISSING_TYPE_DECODER:
+      desc = _("Unknown decoder element");
+      break;
+    case GST_MISSING_TYPE_ENCODER:
+      desc = _("Unknown encoder element");
+      break;
+    default:
+      /* we should really never get here, but we better still return
+       * something if we do */
+      desc = _("Plugin or element of unknown type");
+      break;
+  }
+  ret = g_strdup (desc);
+
+done:
+
+  GST_LOG ("returning '%s'", ret);
+  return ret;
+}
+
+/**
+ * gst_is_missing_plugin_message:
+ * @msg: a #GstMessage
+ *
+ * Checks whether @msg is a missing plugins message.
+ *
+ * Returns: %TRUE if @msg is a missing-plugins message, otherwise %FALSE.
+ */
+gboolean
+gst_is_missing_plugin_message (GstMessage * msg)
+{
+  const GstStructure *structure;
+
+  g_return_val_if_fail (msg != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_MESSAGE (msg), FALSE);
+
+  structure = gst_message_get_structure (msg);
+  if (GST_MESSAGE_TYPE (msg) != GST_MESSAGE_ELEMENT || structure == NULL)
+    return FALSE;
+
+  return gst_structure_has_name (structure, "missing-plugin");
+}
+
+/* takes ownership of the description */
+static gchar *
+gst_installer_detail_new (gchar * description, const gchar * type,
+    const gchar * detail)
+{
+  const gchar *progname;
+  GString *s;
+
+  s = g_string_new (GST_DETAIL_STRING_MARKER "|");
+  g_string_append_printf (s, "%u.%u|", GST_VERSION_MAJOR, GST_VERSION_MINOR);
+
+  progname = (const gchar *) g_get_prgname ();
+  if (progname) {
+    g_string_append_printf (s, "%s|", progname);
+  } else {
+    g_string_append_printf (s, "pid/%lu|", (gulong) getpid ());
+  }
+
+  if (description) {
+    g_strdelimit (description, "|", '#');
+    g_string_append_printf (s, "%s|", description);
+    g_free (description);
+  } else {
+    g_string_append (s, "|");
+  }
+
+  g_string_append_printf (s, "%s-%s", type, detail);
+
+  return g_string_free (s, FALSE);
+}
+
+/**
+ * gst_missing_uri_source_installer_detail_new:
+ * @protocol: the URI protocol the missing source needs to implement,
+ *            e.g. "http" or "mms"
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions in
+ * the case where the application knows exactly what kind of plugin it is
+ * missing.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ *
+ * Since: 0.10.15
+ */
+gchar *
+gst_missing_uri_source_installer_detail_new (const gchar * protocol)
+{
+  gchar *desc;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  desc = gst_pb_utils_get_source_description (protocol);
+  return gst_installer_detail_new (desc, "urisource", protocol);
+}
+
+/**
+ * gst_missing_uri_sink_installer_detail_new:
+ * @protocol: the URI protocol the missing source needs to implement,
+ *            e.g. "http" or "mms"
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions in
+ * the case where the application knows exactly what kind of plugin it is
+ * missing.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ *
+ * Since: 0.10.15
+ */
+gchar *
+gst_missing_uri_sink_installer_detail_new (const gchar * protocol)
+{
+  gchar *desc;
+
+  g_return_val_if_fail (protocol != NULL, NULL);
+
+  desc = gst_pb_utils_get_sink_description (protocol);
+  return gst_installer_detail_new (desc, "urisink", protocol);
+}
+
+/**
+ * gst_missing_element_installer_detail_new:
+ * @factory_name: the name of the missing element (element factory),
+ *            e.g. "videoscale" or "cdparanoiasrc"
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions in
+ * the case where the application knows exactly what kind of plugin it is
+ * missing.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ *
+ * Since: 0.10.15
+ */
+gchar *
+gst_missing_element_installer_detail_new (const gchar * factory_name)
+{
+  gchar *desc;
+
+  g_return_val_if_fail (factory_name != NULL, NULL);
+
+  desc = gst_pb_utils_get_element_description (factory_name);
+  return gst_installer_detail_new (desc, "element", factory_name);
+}
+
+/**
+ * gst_missing_decoder_installer_detail_new:
+ * @decode_caps: the (fixed) caps for which a decoder element is needed
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions in
+ * the case where the application knows exactly what kind of plugin it is
+ * missing.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ *
+ * Since: 0.10.15
+ */
+gchar *
+gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps)
+{
+  GstCaps *caps;
+  gchar *detail_str, *caps_str, *desc;
+
+  g_return_val_if_fail (decode_caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (decode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_any (decode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_empty (decode_caps), NULL);
+  g_return_val_if_fail (gst_caps_is_fixed (decode_caps), NULL);
+
+  desc = gst_pb_utils_get_decoder_description (decode_caps);
+  caps = copy_and_clean_caps (decode_caps);
+  caps_str = gst_caps_to_string (caps);
+  detail_str = gst_installer_detail_new (desc, "decoder", caps_str);
+  g_free (caps_str);
+  gst_caps_unref (caps);
+
+  return detail_str;
+}
+
+/**
+ * gst_missing_encoder_installer_detail_new:
+ * @encode_caps: the (fixed) caps for which an encoder element is needed
+ *
+ * Returns an opaque string containing all the details about the missing
+ * element to be passed to an external installer called via
+ * gst_install_plugins_async() or gst_install_plugins_sync().
+ * 
+ * This function is mainly for applications that call external plugin
+ * installation mechanisms using one of the two above-mentioned functions in
+ * the case where the application knows exactly what kind of plugin it is
+ * missing.
+ *
+ * Returns: a newly-allocated detail string, or NULL on error. Free string
+ *          with g_free() when not needed any longer.
+ *
+ * Since: 0.10.15
+ */
+gchar *
+gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps)
+{
+  GstCaps *caps;
+  gchar *detail_str, *caps_str, *desc;
+
+  g_return_val_if_fail (encode_caps != NULL, NULL);
+  g_return_val_if_fail (GST_IS_CAPS (encode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_any (encode_caps), NULL);
+  g_return_val_if_fail (!gst_caps_is_empty (encode_caps), NULL);
+  g_return_val_if_fail (gst_caps_is_fixed (encode_caps), NULL);
+
+  desc = gst_pb_utils_get_encoder_description (encode_caps);
+  caps = copy_and_clean_caps (encode_caps);
+  caps_str = gst_caps_to_string (caps);
+  detail_str = gst_installer_detail_new (desc, "encoder", caps_str);
+  g_free (caps_str);
+  gst_caps_unref (caps);
+
+  return detail_str;
+}
diff --git a/gst-libs/gst/pbutils/missing-plugins.h b/gst-libs/gst/pbutils/missing-plugins.h
new file mode 100644
index 0000000..508304e
--- /dev/null
+++ b/gst-libs/gst/pbutils/missing-plugins.h
@@ -0,0 +1,77 @@
+/* GStreamer base utils library missing plugins support
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PB_UTILS_MISSING_PLUGINS_H__
+#define __GST_PB_UTILS_MISSING_PLUGINS_H__
+
+#include <gst/gstmessage.h>
+#include <gst/gstcaps.h>
+
+G_BEGIN_DECLS
+
+/*
+ * functions to create missing-plugin messages, for use by plugins primarily
+ */
+
+GstMessage * gst_missing_uri_source_message_new (GstElement    * element,
+                                                 const gchar   * protocol);
+
+GstMessage * gst_missing_uri_sink_message_new   (GstElement    * element,
+                                                 const gchar   * protocol);
+
+GstMessage * gst_missing_element_message_new    (GstElement    * element,
+                                                 const gchar   * factory_name);
+
+GstMessage * gst_missing_decoder_message_new    (GstElement    * element,
+                                                 const GstCaps * decode_caps);
+
+GstMessage * gst_missing_encoder_message_new    (GstElement    * element,
+                                                 const GstCaps * encode_caps);
+
+/*
+ * functions for use by applications when dealing with missing-plugin messages
+ */
+
+gchar       * gst_missing_plugin_message_get_installer_detail (GstMessage * msg);
+
+gchar       * gst_missing_plugin_message_get_description (GstMessage * msg);
+
+gboolean      gst_is_missing_plugin_message (GstMessage * msg);
+
+
+/*
+ * functions for use by applications that know exactly what plugins they are
+ * missing and want to request them directly rather than just react to
+ * missing-plugin messages posted by elements such as playbin or decodebin
+ */
+
+gchar * gst_missing_uri_source_installer_detail_new (const gchar * protocol);
+
+gchar * gst_missing_uri_sink_installer_detail_new (const gchar * protocol);
+
+gchar * gst_missing_element_installer_detail_new (const gchar * factory_name);
+
+gchar * gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps);
+
+gchar * gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_MISSING_PLUGINS_H__ */
+
diff --git a/gst-libs/gst/pbutils/pbutils-marshal.list b/gst-libs/gst/pbutils/pbutils-marshal.list
new file mode 100644
index 0000000..f409996
--- /dev/null
+++ b/gst-libs/gst/pbutils/pbutils-marshal.list
@@ -0,0 +1,2 @@
+# pbutils marshallers
+VOID:POINTER,BOXED
diff --git a/gst-libs/gst/pbutils/pbutils-private.h b/gst-libs/gst/pbutils/pbutils-private.h
new file mode 100644
index 0000000..8ac6147
--- /dev/null
+++ b/gst-libs/gst/pbutils/pbutils-private.h
@@ -0,0 +1,94 @@
+/* GStreamer
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *               2010 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+struct _GstDiscovererStreamInfo {
+  GObject                parent;
+
+  GstDiscovererStreamInfo *previous;  /* NULL for starting points */
+  GstDiscovererStreamInfo *next; /* NULL for containers */
+
+  GstCaps               *caps;
+  GstTagList            *tags;
+  GstStructure          *misc;
+};
+
+struct _GstDiscovererContainerInfo {
+  GstDiscovererStreamInfo parent;
+
+  GList               *streams;
+};
+
+struct _GstDiscovererAudioInfo {
+  GstDiscovererStreamInfo parent;
+
+  guint channels;
+  guint sample_rate;
+  guint depth;
+
+  guint bitrate;
+  guint max_bitrate;
+
+  gchar *language;
+};
+
+struct _GstDiscovererVideoInfo {
+  GstDiscovererStreamInfo parent;
+
+  guint width;
+  guint height;
+  guint depth;
+  guint framerate_num;
+  guint framerate_denom;
+  guint par_num;
+  guint par_denom;
+  gboolean interlaced;
+
+  guint bitrate;
+  guint max_bitrate;
+
+  gboolean is_image;
+};
+
+struct _GstDiscovererSubtitleInfo {
+  GstDiscovererStreamInfo parent;
+
+  gchar *language;
+};
+
+struct _GstDiscovererInfo {
+  GObject parent;
+
+  gchar *uri;
+  GstDiscovererResult result;
+
+  /* Sub-streams */
+  GstDiscovererStreamInfo *stream_info;
+  GList *stream_list;
+
+  /* Stream global information */
+  GstClockTime duration;
+  GstStructure *misc;
+  GstTagList *tags;
+  gboolean seekable;
+};
+
+/* missing-plugins.c */
+
+GstCaps *copy_and_clean_caps (const GstCaps * caps);
diff --git a/gst-libs/gst/pbutils/pbutils.c b/gst-libs/gst/pbutils/pbutils.c
new file mode 100644
index 0000000..8accb8d
--- /dev/null
+++ b/gst-libs/gst/pbutils/pbutils.c
@@ -0,0 +1,108 @@
+/* GStreamer base utils library
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstpbutils
+ * @short_description: General Application and Plugin Utility Library
+ *
+ * <refsect2>
+ * <para>
+ * libgstpbutils is a general utility library for plugins and applications,
+ * available since gst-plugins-base 0.10.12. It currently provides the
+ * following:
+ * </para>
+ * <itemizedlist>
+ * <listitem>
+ * <para>
+ * human-readable description strings of codecs, elements, sources, decoders,
+ * encoders, or sinks from decoder/encoder caps, element names, or protocol
+ * names.
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * support for applications to initiate installation of missing plugins (if
+ * this is supported by the distribution or operating system used)
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * API for GStreamer elements to create missing-plugin messages in order to
+ * communicate to the application that a certain type of plugin is missing
+ * (decoder, encoder, URI protocol source, URI protocol sink, named element)
+ * </para>
+ * </listitem>
+ * <listitem>
+ * <para>
+ * API for applications to recognise and handle missing-plugin messages
+ * </para>
+ * </listitem>
+ * </itemizedlist>
+ * <title>Linking to this library</title>
+ * <para>
+ * You should obtain the required CFLAGS and LIBS using pkg-config on the
+ * gstreamer-plugins-base-0.10 module. You will then also need to add
+ * '-lgstpbutils-0.10' manually to your LIBS line.
+ * </para>
+ * <title>Library initialisation</title>
+ * <para>
+ * Before using any of its functions, applications and plugins must call
+ * gst_pb_utils_init() to initialise the library.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "pbutils.h"
+
+#include "gst/gst-i18n-plugin.h"
+
+/**
+ * gst_pb_utils_init:
+ *
+ * Initialises the base utils support library. This function is not
+ * thread-safe. Applications should call it after calling gst_init(),
+ * plugins should call it from their plugin_init function.
+ *
+ * This function may be called multiple times. It will do nothing if the
+ * library has already been initialised.
+ *
+ * Since: 0.10.12
+ */
+void
+gst_pb_utils_init (void)
+{
+  static gboolean inited;       /* FALSE */
+
+  if (inited) {
+    GST_LOG ("already initialised");
+    return;
+  }
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  inited = TRUE;
+}
diff --git a/gst-libs/gst/pbutils/pbutils.h b/gst-libs/gst/pbutils/pbutils.h
new file mode 100644
index 0000000..b9277b1
--- /dev/null
+++ b/gst-libs/gst/pbutils/pbutils.h
@@ -0,0 +1,42 @@
+/* GStreamer base utils library
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PB_UTILS_BASE_UTILS_H__
+#define __GST_PB_UTILS_BASE_UTILS_H__
+
+#include <gst/gst.h>
+
+#include <gst/pbutils/gstpluginsbaseversion.h>
+#include <gst/pbutils/descriptions.h>
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/install-plugins.h>
+#include <gst/pbutils/codec-utils.h>
+#include <gst/pbutils/pbutils-enumtypes.h>
+#include <gst/pbutils/gstdiscoverer.h>
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/pbutils/encoding-target.h>
+
+G_BEGIN_DECLS
+
+void    gst_pb_utils_init (void);
+
+G_END_DECLS
+
+#endif /* __GST_PB_UTILS_BASE_UTILS_H__ */
+
diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am
new file mode 100644
index 0000000..f6e4226
--- /dev/null
+++ b/gst-libs/gst/riff/Makefile.am
@@ -0,0 +1,93 @@
+lib_LTLIBRARIES = libgstriff-@GST_MAJORMINOR@.la
+
+libgstriff_@GST_MAJORMINOR@_la_SOURCES = \
+	riff.c \
+	riff-media.c \
+	riff-read.c
+
+libgstriff_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/riff
+libgstriff_@GST_MAJORMINOR@include_HEADERS = \
+	riff-ids.h \
+	riff-media.h \
+	riff-read.h
+
+libgstriff_@GST_MAJORMINOR@_la_LIBADD = \
+  $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+  $(GST_BASE_LIBS) $(GST_LIBS)
+
+libgstriff_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstriff_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstRiff-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/riff/%',$(libgstriff_@GST_MAJORMINOR@include_HEADERS))
+
+GstRiff-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstRiff \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		--add-include-path=$(builddir)/../tag \
+		--add-include-path=$(builddir)/../audio \
+		--add-include-path=$(builddir)/../interfaces \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstriff-@GST_MAJORMINOR@.la \
+		--include=GstAudio-@GST_MAJORMINOR@ \
+		--include=GstTag-@GST_MAJORMINOR@ \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-tag-@GST_MAJORMINOR@ \
+		--pkg gstreamer-audio-@GST_MAJORMINOR@ \
+		--pkg gstreamer-interfaces-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-riff-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=$(builddir)/../tag \
+		--includedir=$(builddir)/../audio \
+		--includedir=$(builddir)/../interfaces \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstriff_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstriff_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstriff_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstriff_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/riff/Makefile.in b/gst-libs/gst/riff/Makefile.in
new file mode 100644
index 0000000..72dcb71
--- /dev/null
+++ b/gst-libs/gst/riff/Makefile.in
@@ -0,0 +1,930 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/riff
+DIST_COMMON = $(libgstriff_@GST_MAJORMINOR@include_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstriff_@GST_MAJORMINOR@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstriff_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstriff_@GST_MAJORMINOR@_la-riff.lo \
+	libgstriff_@GST_MAJORMINOR@_la-riff-media.lo \
+	libgstriff_@GST_MAJORMINOR@_la-riff-read.lo
+libgstriff_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstriff_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstriff_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstriff_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstriff_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstriff_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstriff_@GST_MAJORMINOR@include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libgstriff-@GST_MAJORMINOR@.la
+libgstriff_@GST_MAJORMINOR@_la_SOURCES = \
+	riff.c \
+	riff-media.c \
+	riff-read.c
+
+libgstriff_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/riff
+libgstriff_@GST_MAJORMINOR@include_HEADERS = \
+	riff-ids.h \
+	riff-media.h \
+	riff-read.h
+
+libgstriff_@GST_MAJORMINOR@_la_LIBADD = \
+  $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+  $(GST_BASE_LIBS) $(GST_LIBS)
+
+libgstriff_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstriff_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRiff-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstriff_@GST_MAJORMINOR@include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstriff_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/riff/%',$(libgstriff_@GST_MAJORMINOR@include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstriff-@GST_MAJORMINOR@.la: $(libgstriff_@GST_MAJORMINOR@_la_OBJECTS) $(libgstriff_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstriff_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstriff_@GST_MAJORMINOR@_la_OBJECTS) $(libgstriff_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-media.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-read.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstriff_@GST_MAJORMINOR@_la-riff.lo: riff.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstriff_@GST_MAJORMINOR@_la-riff.lo -MD -MP -MF $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff.Tpo -c -o libgstriff_@GST_MAJORMINOR@_la-riff.lo `test -f 'riff.c' || echo '$(srcdir)/'`riff.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff.Tpo $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='riff.c' object='libgstriff_@GST_MAJORMINOR@_la-riff.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstriff_@GST_MAJORMINOR@_la-riff.lo `test -f 'riff.c' || echo '$(srcdir)/'`riff.c
+
+libgstriff_@GST_MAJORMINOR@_la-riff-media.lo: riff-media.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstriff_@GST_MAJORMINOR@_la-riff-media.lo -MD -MP -MF $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-media.Tpo -c -o libgstriff_@GST_MAJORMINOR@_la-riff-media.lo `test -f 'riff-media.c' || echo '$(srcdir)/'`riff-media.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-media.Tpo $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-media.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='riff-media.c' object='libgstriff_@GST_MAJORMINOR@_la-riff-media.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstriff_@GST_MAJORMINOR@_la-riff-media.lo `test -f 'riff-media.c' || echo '$(srcdir)/'`riff-media.c
+
+libgstriff_@GST_MAJORMINOR@_la-riff-read.lo: riff-read.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstriff_@GST_MAJORMINOR@_la-riff-read.lo -MD -MP -MF $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-read.Tpo -c -o libgstriff_@GST_MAJORMINOR@_la-riff-read.lo `test -f 'riff-read.c' || echo '$(srcdir)/'`riff-read.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-read.Tpo $(DEPDIR)/libgstriff_@GST_MAJORMINOR@_la-riff-read.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='riff-read.c' object='libgstriff_@GST_MAJORMINOR@_la-riff-read.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstriff_@GST_MAJORMINOR@_la-riff-read.lo `test -f 'riff-read.c' || echo '$(srcdir)/'`riff-read.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstriff_@GST_MAJORMINOR@includeHEADERS: $(libgstriff_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstriff_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstriff_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstriff_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstriff_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstriff_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstriff_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstriff_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstriff_@GST_MAJORMINOR@includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstriff_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstriff_@GST_MAJORMINOR@includeHEADERS install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstriff_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstRiff-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstRiff \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../tag \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../audio \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../interfaces \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstriff-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=GstAudio-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstTag-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-tag-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-audio-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-interfaces-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-riff-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../tag \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../audio \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../interfaces \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstriff_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstriff_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstriff_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstriff_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/riff/riff-ids.h b/gst-libs/gst/riff/riff-ids.h
new file mode 100644
index 0000000..8771d2e
--- /dev/null
+++ b/gst-libs/gst/riff/riff-ids.h
@@ -0,0 +1,517 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff-ids.h: RIFF IDs and structs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RIFF_IDS_H__
+#define __GST_RIFF_IDS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* RIFF types */
+#define GST_RIFF_RIFF_WAVE GST_MAKE_FOURCC ('W','A','V','E')
+#define GST_RIFF_RIFF_AVI  GST_MAKE_FOURCC ('A','V','I',' ')
+#define GST_RIFF_RIFF_CDXA GST_MAKE_FOURCC ('C','D','X','A')
+
+/* tags */
+#define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F')
+#define GST_RIFF_TAG_AVF0 GST_MAKE_FOURCC ('A','V','F','0')
+#define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X')
+#define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T')
+#define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h')
+#define GST_RIFF_TAG_strd GST_MAKE_FOURCC ('s','t','r','d')
+#define GST_RIFF_TAG_strn GST_MAKE_FOURCC ('s','t','r','n')
+#define GST_RIFF_TAG_strh GST_MAKE_FOURCC ('s','t','r','h')
+#define GST_RIFF_TAG_strf GST_MAKE_FOURCC ('s','t','r','f')
+#define GST_RIFF_TAG_vedt GST_MAKE_FOURCC ('v','e','d','t')
+#define GST_RIFF_TAG_JUNK GST_MAKE_FOURCC ('J','U','N','K')
+#define GST_RIFF_TAG_JUNQ GST_MAKE_FOURCC ('J','U','N','Q')
+#define GST_RIFF_TAG_idx1 GST_MAKE_FOURCC ('i','d','x','1')
+#define GST_RIFF_TAG_dmlh GST_MAKE_FOURCC ('d','m','l','h')
+/* WAV stuff */
+#define GST_RIFF_TAG_fmt  GST_MAKE_FOURCC ('f','m','t',' ')
+#define GST_RIFF_TAG_data GST_MAKE_FOURCC ('d','a','t','a')
+#define GST_RIFF_TAG_plst GST_MAKE_FOURCC ('p','l','s','t')
+#define GST_RIFF_TAG_cue  GST_MAKE_FOURCC ('c','u','e',' ')
+#define GST_RIFF_TAG_bext GST_MAKE_FOURCC ('b','e','x','t')
+#define GST_RIFF_TAG_BEXT GST_MAKE_FOURCC ('B','E','X','T')
+#define GST_RIFF_TAG_fact GST_MAKE_FOURCC ('f','a','c','t')
+#define GST_RIFF_TAG_acid GST_MAKE_FOURCC ('a','c','i','d')
+
+/* LIST types */
+#define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i')
+#define GST_RIFF_LIST_hdrl GST_MAKE_FOURCC ('h','d','r','l')
+#define GST_RIFF_LIST_odml GST_MAKE_FOURCC ('o','d','m','l')
+#define GST_RIFF_LIST_strl GST_MAKE_FOURCC ('s','t','r','l')
+#define GST_RIFF_LIST_INFO GST_MAKE_FOURCC ('I','N','F','O')
+#define GST_RIFF_LIST_AVIX GST_MAKE_FOURCC ('A','V','I','X')
+#define GST_RIFF_LIST_adtl GST_MAKE_FOURCC ('a','d','t','l')
+
+/* fcc types */
+#define GST_RIFF_FCC_vids GST_MAKE_FOURCC ('v','i','d','s')
+#define GST_RIFF_FCC_auds GST_MAKE_FOURCC ('a','u','d','s')
+#define GST_RIFF_FCC_pads GST_MAKE_FOURCC ('p','a','d','s')
+#define GST_RIFF_FCC_txts GST_MAKE_FOURCC ('t','x','t','s')
+#define GST_RIFF_FCC_vidc GST_MAKE_FOURCC ('v','i','d','c')
+#define GST_RIFF_FCC_iavs GST_MAKE_FOURCC ('i','a','v','s')
+/* fcc handlers */
+#define GST_RIFF_FCCH_RLE  GST_MAKE_FOURCC ('R','L','E',' ')
+#define GST_RIFF_FCCH_msvc GST_MAKE_FOURCC ('m','s','v','c')
+#define GST_RIFF_FCCH_MSVC GST_MAKE_FOURCC ('M','S','V','C')
+
+/* INFO types - see http://www.saettler.com/RIFFMCI/riffmci.html */
+#define GST_RIFF_INFO_IARL GST_MAKE_FOURCC ('I','A','R','L') /* location */
+#define GST_RIFF_INFO_IART GST_MAKE_FOURCC ('I','A','R','T') /* artist */
+#define GST_RIFF_INFO_ICMS GST_MAKE_FOURCC ('I','C','M','S') /* commissioned */
+#define GST_RIFF_INFO_ICMT GST_MAKE_FOURCC ('I','C','M','T') /* comment */
+#define GST_RIFF_INFO_ICOP GST_MAKE_FOURCC ('I','C','O','P') /* copyright */
+#define GST_RIFF_INFO_ICRD GST_MAKE_FOURCC ('I','C','R','D') /* creation date */
+#define GST_RIFF_INFO_ICRP GST_MAKE_FOURCC ('I','C','R','P') /* cropped */
+#define GST_RIFF_INFO_IDIM GST_MAKE_FOURCC ('I','D','I','M') /* dimensions */
+#define GST_RIFF_INFO_IDPI GST_MAKE_FOURCC ('I','D','P','I') /* dots-per-inch */
+#define GST_RIFF_INFO_IENG GST_MAKE_FOURCC ('I','E','N','G') /* engineer(s) */
+#define GST_RIFF_INFO_IGNR GST_MAKE_FOURCC ('I','G','N','R') /* genre */
+#define GST_RIFF_INFO_IKEY GST_MAKE_FOURCC ('I','K','E','Y') /* keywords */
+#define GST_RIFF_INFO_ILGT GST_MAKE_FOURCC ('I','L','G','T') /* lightness */
+#define GST_RIFF_INFO_IMED GST_MAKE_FOURCC ('I','M','E','D') /* medium */
+#define GST_RIFF_INFO_INAM GST_MAKE_FOURCC ('I','N','A','M') /* name */
+#define GST_RIFF_INFO_IPLT GST_MAKE_FOURCC ('I','P','L','T') /* palette setting */
+#define GST_RIFF_INFO_IPRD GST_MAKE_FOURCC ('I','P','R','D') /* product */
+#define GST_RIFF_INFO_ISBJ GST_MAKE_FOURCC ('I','S','B','J') /* subject */
+#define GST_RIFF_INFO_ISFT GST_MAKE_FOURCC ('I','S','F','T') /* software */
+#define GST_RIFF_INFO_ISHP GST_MAKE_FOURCC ('I','S','H','P') /* sharpness */
+#define GST_RIFF_INFO_ISRC GST_MAKE_FOURCC ('I','S','R','C') /* source */
+#define GST_RIFF_INFO_ISRF GST_MAKE_FOURCC ('I','S','R','F') /* source form */
+#define GST_RIFF_INFO_ITCH GST_MAKE_FOURCC ('I','T','C','H') /* technician(s) */
+
+/*********Chunk Names***************/
+#define GST_RIFF_FF00 GST_MAKE_FOURCC (0xFF,0xFF,0x00,0x00)
+#define GST_RIFF_00   GST_MAKE_FOURCC ('0', '0',0x00,0x00)
+#define GST_RIFF_01   GST_MAKE_FOURCC ('0', '1',0x00,0x00)
+#define GST_RIFF_02   GST_MAKE_FOURCC ('0', '2',0x00,0x00)
+#define GST_RIFF_03   GST_MAKE_FOURCC ('0', '3',0x00,0x00)
+#define GST_RIFF_04   GST_MAKE_FOURCC ('0', '4',0x00,0x00)
+#define GST_RIFF_05   GST_MAKE_FOURCC ('0', '5',0x00,0x00)
+#define GST_RIFF_06   GST_MAKE_FOURCC ('0', '6',0x00,0x00)
+#define GST_RIFF_07   GST_MAKE_FOURCC ('0', '7',0x00,0x00)
+#define GST_RIFF_00pc GST_MAKE_FOURCC ('0', '0', 'p', 'c')
+#define GST_RIFF_01pc GST_MAKE_FOURCC ('0', '1', 'p', 'c')
+#define GST_RIFF_00dc GST_MAKE_FOURCC ('0', '0', 'd', 'c')
+#define GST_RIFF_00dx GST_MAKE_FOURCC ('0', '0', 'd', 'x')
+#define GST_RIFF_00db GST_MAKE_FOURCC ('0', '0', 'd', 'b')
+#define GST_RIFF_00xx GST_MAKE_FOURCC ('0', '0', 'x', 'x')
+#define GST_RIFF_00id GST_MAKE_FOURCC ('0', '0', 'i', 'd')
+#define GST_RIFF_00rt GST_MAKE_FOURCC ('0', '0', 'r', 't')
+#define GST_RIFF_0021 GST_MAKE_FOURCC ('0', '0', '2', '1')
+#define GST_RIFF_00iv GST_MAKE_FOURCC ('0', '0', 'i', 'v')
+#define GST_RIFF_0031 GST_MAKE_FOURCC ('0', '0', '3', '1')
+#define GST_RIFF_0032 GST_MAKE_FOURCC ('0', '0', '3', '2')
+#define GST_RIFF_00vc GST_MAKE_FOURCC ('0', '0', 'v', 'c')
+#define GST_RIFF_00xm GST_MAKE_FOURCC ('0', '0', 'x', 'm')
+#define GST_RIFF_01wb GST_MAKE_FOURCC ('0', '1', 'w', 'b')
+#define GST_RIFF_01dc GST_MAKE_FOURCC ('0', '1', 'd', 'c')
+#define GST_RIFF_00__ GST_MAKE_FOURCC ('0', '0', '_', '_')
+
+/*********VIDEO CODECS**************/
+#define GST_RIFF_cram GST_MAKE_FOURCC ('c', 'r', 'a', 'm')
+#define GST_RIFF_CRAM GST_MAKE_FOURCC ('C', 'R', 'A', 'M')
+#define GST_RIFF_wham GST_MAKE_FOURCC ('w', 'h', 'a', 'm')
+#define GST_RIFF_WHAM GST_MAKE_FOURCC ('W', 'H', 'A', 'M')
+#define GST_RIFF_rgb  GST_MAKE_FOURCC (0x00,0x00,0x00,0x00)
+#define GST_RIFF_RGB  GST_MAKE_FOURCC ('R', 'G', 'B', ' ')
+#define GST_RIFF_RAW  GST_MAKE_FOURCC ('R', 'A', 'W', ' ')
+#define GST_RIFF_DIB  GST_MAKE_FOURCC ('D', 'I', 'B', ' ')
+#define GST_RIFF_rle8 GST_MAKE_FOURCC (0x01,0x00,0x00,0x00)
+#define GST_RIFF_RLE8 GST_MAKE_FOURCC ('R', 'L', 'E', '8')
+#define GST_RIFF_rle4 GST_MAKE_FOURCC (0x02,0x00,0x00,0x00)
+#define GST_RIFF_RLE4 GST_MAKE_FOURCC ('R', 'L', 'E', '4')
+#define GST_RIFF_none GST_MAKE_FOURCC (0x00,0x00,0xFF,0xFF)
+#define GST_RIFF_NONE GST_MAKE_FOURCC ('N', 'O', 'N', 'E')
+#define GST_RIFF_pack GST_MAKE_FOURCC (0x01,0x00,0xFF,0xFF)
+#define GST_RIFF_PACK GST_MAKE_FOURCC ('P', 'A', 'C', 'K')
+#define GST_RIFF_tran GST_MAKE_FOURCC (0x02,0x00,0xFF,0xFF)
+#define GST_RIFF_TRAN GST_MAKE_FOURCC ('T', 'R', 'A', 'N')
+#define GST_RIFF_ccc  GST_MAKE_FOURCC (0x03,0x00,0xFF,0xFF)
+#define GST_RIFF_CCC  GST_MAKE_FOURCC ('C', 'C', 'C', ' ')
+#define GST_RIFF_cyuv GST_MAKE_FOURCC ('c', 'y', 'u', 'v')
+#define GST_RIFF_CYUV GST_MAKE_FOURCC ('C', 'Y', 'U', 'V')
+#define GST_RIFF_jpeg GST_MAKE_FOURCC (0x04,0x00,0xFF,0xFF)
+#define GST_RIFF_JPEG GST_MAKE_FOURCC ('J', 'P', 'E', 'G')
+#define GST_RIFF_MJPG GST_MAKE_FOURCC ('M', 'J', 'P', 'G')
+#define GST_RIFF_mJPG GST_MAKE_FOURCC ('m', 'J', 'P', 'G')
+#define GST_RIFF_IJPG GST_MAKE_FOURCC ('I', 'J', 'P', 'G')
+#define GST_RIFF_rt21 GST_MAKE_FOURCC ('r', 't', '2', '1')
+#define GST_RIFF_RT21 GST_MAKE_FOURCC ('R', 'T', '2', '1')
+#define GST_RIFF_iv31 GST_MAKE_FOURCC ('i', 'v', '3', '1')
+#define GST_RIFF_IV31 GST_MAKE_FOURCC ('I', 'V', '3', '1')
+#define GST_RIFF_iv32 GST_MAKE_FOURCC ('i', 'v', '3', '2')
+#define GST_RIFF_IV32 GST_MAKE_FOURCC ('I', 'V', '3', '2')
+#define GST_RIFF_iv41 GST_MAKE_FOURCC ('i', 'v', '4', '1')
+#define GST_RIFF_IV41 GST_MAKE_FOURCC ('I', 'V', '4', '1')
+#define GST_RIFF_iv50 GST_MAKE_FOURCC ('i', 'v', '5', '0')
+#define GST_RIFF_IV50 GST_MAKE_FOURCC ('I', 'V', '5', '0')
+#define GST_RIFF_cvid GST_MAKE_FOURCC ('c', 'v', 'i', 'd')
+#define GST_RIFF_CVID GST_MAKE_FOURCC ('C', 'V', 'I', 'D')
+#define GST_RIFF_ULTI GST_MAKE_FOURCC ('U', 'L', 'T', 'I')
+#define GST_RIFF_ulti GST_MAKE_FOURCC ('u', 'l', 't', 'i')
+#define GST_RIFF_YUV9 GST_MAKE_FOURCC ('Y', 'V', 'U', '9')
+#define GST_RIFF_YVU9 GST_MAKE_FOURCC ('Y', 'U', 'V', '9')
+#define GST_RIFF_XMPG GST_MAKE_FOURCC ('X', 'M', 'P', 'G')
+#define GST_RIFF_xmpg GST_MAKE_FOURCC ('x', 'm', 'p', 'g')
+#define GST_RIFF_VDOW GST_MAKE_FOURCC ('V', 'D', 'O', 'W')
+#define GST_RIFF_MVI1 GST_MAKE_FOURCC ('M', 'V', 'I', '1')
+#define GST_RIFF_v422 GST_MAKE_FOURCC ('v', '4', '2', '2')
+#define GST_RIFF_V422 GST_MAKE_FOURCC ('V', '4', '2', '2')
+#define GST_RIFF_mvi1 GST_MAKE_FOURCC ('m', 'v', 'i', '1')
+#define GST_RIFF_MPIX GST_MAKE_FOURCC (0x04,0x00, 'i', '1')     /* MotionPixels munged their id */
+#define GST_RIFF_AURA GST_MAKE_FOURCC ('A', 'U', 'R', 'A')
+#define GST_RIFF_DMB1 GST_MAKE_FOURCC ('D', 'M', 'B', '1')
+#define GST_RIFF_dmb1 GST_MAKE_FOURCC ('d', 'm', 'b', '1')
+
+#define GST_RIFF_BW10 GST_MAKE_FOURCC ('B', 'W', '1', '0')
+#define GST_RIFF_bw10 GST_MAKE_FOURCC ('b', 'w', '1', '0')
+
+#define GST_RIFF_yuy2 GST_MAKE_FOURCC ('y', 'u', 'y', '2')
+#define GST_RIFF_YUY2 GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')
+#define GST_RIFF_YUV8 GST_MAKE_FOURCC ('Y', 'U', 'V', '8')
+#define GST_RIFF_WINX GST_MAKE_FOURCC ('W', 'I', 'N', 'X')
+#define GST_RIFF_WPY2 GST_MAKE_FOURCC ('W', 'P', 'Y', '2')
+#define GST_RIFF_m263 GST_MAKE_FOURCC ('m', '2', '6', '3')
+#define GST_RIFF_M263 GST_MAKE_FOURCC ('M', '2', '6', '3')
+#define GST_RIFF_H263 GST_MAKE_FOURCC ('H', '2', '6', '3')
+#define GST_RIFF_h263 GST_MAKE_FOURCC ('h', '2', '6', '3')
+#define GST_RIFF_i263 GST_MAKE_FOURCC ('i', '2', '6', '3')
+#define GST_RIFF_L263 GST_MAKE_FOURCC ('L', '2', '6', '3')
+#define GST_RIFF_x263 GST_MAKE_FOURCC ('x', '2', '6', '3')
+#define GST_RIFF_VSSH GST_MAKE_FOURCC ( 'V', 'S', 'S', 'H') /* H2.64 */
+
+#define GST_RIFF_Q1_0 GST_MAKE_FOURCC ('Q', '1',0x2e, '0')
+#define GST_RIFF_SFMC GST_MAKE_FOURCC ('S', 'F', 'M', 'C')
+
+#define GST_RIFF_y41p GST_MAKE_FOURCC ('y', '4', '1', 'p')
+#define GST_RIFF_Y41P GST_MAKE_FOURCC ('Y', '4', '1', 'P')
+#define GST_RIFF_yv12 GST_MAKE_FOURCC ('y', 'v', '1', '2')
+#define GST_RIFF_YV12 GST_MAKE_FOURCC ('Y', 'V', '1', '2')
+#define GST_RIFF_vixl GST_MAKE_FOURCC ('v', 'i', 'x', 'l')
+#define GST_RIFF_VIXL GST_MAKE_FOURCC ('V', 'I', 'X', 'L')
+#define GST_RIFF_iyuv GST_MAKE_FOURCC ('i', 'y', 'u', 'v')
+#define GST_RIFF_IYUV GST_MAKE_FOURCC ('I', 'Y', 'U', 'V')
+#define GST_RIFF_i420 GST_MAKE_FOURCC ('i', '4', '2', '0')
+#define GST_RIFF_I420 GST_MAKE_FOURCC ('I', '4', '2', '0')
+#define GST_RIFF_vyuy GST_MAKE_FOURCC ('v', 'y', 'u', 'y')
+#define GST_RIFF_VYUY GST_MAKE_FOURCC ('V', 'Y', 'U', 'Y')
+
+#define GST_RIFF_DIV3 GST_MAKE_FOURCC ('D', 'I', 'V', '3')
+
+#define GST_RIFF_rpza GST_MAKE_FOURCC ('r', 'p', 'z', 'a')
+/* And this here's the mistakes that need to be supported */
+#define GST_RIFF_azpr GST_MAKE_FOURCC ('a', 'z', 'p', 'r')  /* recognize Apple's rpza mangled? */
+
+/*********** FND in MJPG **********/
+#define GST_RIFF_ISFT GST_MAKE_FOURCC ('I', 'S', 'F', 'T')
+#define GST_RIFF_IDIT GST_MAKE_FOURCC ('I', 'D', 'I', 'T')
+
+#define GST_RIFF_00AM GST_MAKE_FOURCC ('0', '0', 'A', 'M')
+#define GST_RIFF_DISP GST_MAKE_FOURCC ('D', 'I', 'S', 'P')
+#define GST_RIFF_ISBJ GST_MAKE_FOURCC ('I', 'S', 'B', 'J')
+
+#define GST_RIFF_rec  GST_MAKE_FOURCC ('r', 'e', 'c', ' ')
+
+/* common data structures */
+typedef struct _gst_riff_strh {
+  guint32 type;             /* stream type */
+  guint32 fcc_handler;       /* fcc_handler */
+  guint32 flags;
+/* flags values */
+#define GST_RIFF_STRH_DISABLED        0x000000001
+#define GST_RIFF_STRH_VIDEOPALCHANGES 0x000010000
+  guint32 priority;
+  guint32 init_frames;       /* initial frames (???) */
+  guint32 scale;
+  guint32 rate;
+  guint32 start;
+  guint32 length;
+  guint32 bufsize;           /* suggested buffer size */
+  guint32 quality;
+  guint32 samplesize;
+  /* rcFrame, RECT structure(struct of 4 shorts)
+  gint32  left;
+  gint32  top;
+  gint32  right;
+  gint32  bottom;
+  */
+} gst_riff_strh;
+
+typedef struct _gst_riff_strf_vids {       /* == BitMapInfoHeader */
+  guint32 size;
+  guint32 width;
+  guint32 height;
+  guint16 planes;
+  guint16 bit_cnt;
+  guint32 compression;
+  guint32 image_size;
+  guint32 xpels_meter;
+  guint32 ypels_meter;
+  guint32 num_colors;        /* used colors */
+  guint32 imp_colors;        /* important colors */
+  /* may be more for some codecs */
+} gst_riff_strf_vids;
+
+
+typedef struct _gst_riff_strf_auds {       /* == WaveHeader (?) */
+  guint16 format;
+/**** from public Microsoft RIFF docs ******/
+#define GST_RIFF_WAVE_FORMAT_UNKNOWN        (0x0000)
+#define GST_RIFF_WAVE_FORMAT_PCM            (0x0001)
+#define GST_RIFF_WAVE_FORMAT_ADPCM          (0x0002)
+#define GST_RIFF_WAVE_FORMAT_IEEE_FLOAT     (0x0003)
+#define GST_RIFF_WAVE_FORMAT_VSELP          (0x0004)
+#define GST_RIFF_WAVE_FORMAT_IBM_CVSD       (0x0005)
+#define GST_RIFF_WAVE_FORMAT_ALAW           (0x0006)
+#define GST_RIFF_WAVE_FORMAT_MULAW          (0x0007)
+#define GST_RIFF_WAVE_FORMAT_WMS            (0x000a) /* WMS Windows Media Audio Speech */
+#define GST_RIFF_WAVE_FORMAT_OKI_ADPCM      (0x0010)
+#define GST_RIFF_WAVE_FORMAT_DVI_ADPCM      (0x0011)
+#define GST_RIFF_WAVE_FORMAT_MEDIASPACE_ADPCM (0x0012)
+#define GST_RIFF_WAVE_FORMAT_SIERRA_ADPCM   (0x0013)
+#define GST_RIFF_WAVE_FORMAT_G723_ADPCM     (0x0014)
+#define GST_RIFF_WAVE_FORMAT_DIGISTD        (0x0015)
+#define GST_RIFF_WAVE_FORMAT_DIGIFIX        (0x0016)
+#define GST_RIFF_WAVE_FORMAT_DIALOGIC_OKI_ADPCM (0x0017)
+#define GST_RIFF_WAVE_FORMAT_MEDIAVISION_ADPCM  (0x0018)
+#define GST_RIFF_WAVE_FORMAT_CU_CODEC       (0x0019)
+#define GST_RIFF_WAVE_FORMAT_YAMAHA_ADPCM   (0x0020)
+#define GST_RIFF_WAVE_FORMAT_SONARC         (0x0021)
+#define GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH (0x0022)
+#define GST_RIFF_WAVE_FORMAT_ECHOSC1        (0x0023)
+#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF36 (0x0024)
+#define GST_RIFF_WAVE_FORMAT_APTX           (0x0025)
+#define GST_RIFF_WAVE_FORMAT_AUDIOFILE_AF10 (0x0026)
+#define GST_RIFF_WAVE_FORMAT_PROSODY_1612   (0x0027)
+#define GST_RIFF_WAVE_FORMAT_LRC            (0x0028)
+#define GST_RIFF_WAVE_FORMAT_DOLBY_AC2      (0x0030)
+#define GST_RIFF_WAVE_FORMAT_GSM610         (0x0031)
+#define GST_RIFF_WAVE_FORMAT_MSN            (0x0032)
+#define GST_RIFF_WAVE_FORMAT_ANTEX_ADPCME   (0x0033 
+#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_VQLPC (0x0034)
+#define GST_RIFF_WAVE_FORMAT_DIGIREAL       (0x0035)
+#define GST_RIFF_WAVE_FORMAT_DIGIADPCM      (0x0036)
+#define GST_RIFF_WAVE_FORMAT_CONTROL_RES_CR10  (0x0037)
+#define GST_RIFF_WAVE_FORMAT_NMS_VBXADPCM   (0x0038)
+#define GST_RIFF_WAVE_FORMAT_CS_IMAADPCM    (0x0039)
+#define GST_RIFF_WAVE_FORMAT_ECHOSC3        (0x003A)
+#define GST_RIFF_WAVE_FORMAT_ROCKWELL_ADPCM (0x003B)
+#define GST_RIFF_WAVE_FORMAT_ROCKWELL_DIGITALK (0x003C)
+#define GST_RIFF_WAVE_FORMAT_XEBEC          (0x003D)
+#define GST_RIFF_WAVE_FORMAT_ITU_G721_ADPCM (0x0040)
+#define GST_RIFF_WAVE_FORMAT_G728_CELP      (0x0041)
+#define GST_RIFF_WAVE_FORMAT_MSG723         (0x0042)
+#define GST_RIFF_WAVE_FORMAT_MPEGL12        (0x0050)
+#define GST_RIFF_WAVE_FORMAT_RT24           (0x0052)
+#define GST_RIFF_WAVE_FORMAT_PAC            (0x0053)
+#define GST_RIFF_WAVE_FORMAT_MPEGL3         (0x0055)
+#define GST_RIFF_WAVE_FORMAT_AMR_NB         (0x0057)
+#define GST_RIFF_WAVE_FORMAT_AMR_WB         (0x0058)
+#define GST_RIFF_WAVE_FORMAT_LUCENT_G723    (0x0059)
+#define GST_RIFF_WAVE_FORMAT_CIRRUS         (0x0060)
+#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK4  (0x0061)  /* not official */
+#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK3  (0x0062)  /* not official */
+/* FIXME: where are these from? are they used at all? */
+#if 0
+#define GST_RIFF_WAVE_FORMAT_ESPCM          (0x0061)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE        (0x0062)
+#endif
+#define GST_RIFF_WAVE_FORMAT_CANOPUS_ATRAC  (0x0063)
+#define GST_RIFF_WAVE_FORMAT_G726_ADPCM     (0x0064)
+#define GST_RIFF_WAVE_FORMAT_G722_ADPCM     (0x0065)
+#define GST_RIFF_WAVE_FORMAT_DSAT_DISPLAY   (0x0067)
+#define GST_RIFF_WAVE_FORMAT_ADPCM_IMA_WAV (0x0069)
+/* FIXME: where are these from? are they used at all? */
+#if 0
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_BYTE_ALIGNED (0x0069)
+#endif
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC8    (0x0070)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC10   (0x0071)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC16   (0x0072)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_AC20   (0x0073)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_METAVOICE (0x0074)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_METASOUND (0x0075)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_RT29HW (0x0076)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR12   (0x0077)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_VR18   (0x0078)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ40   (0x0079)
+#define GST_RIFF_WAVE_FORMAT_SOFTSOUND      (0x0080)
+#define GST_RIFF_WAVE_FORMAT_VOXWARE_TQ60   (0x0081)
+#define GST_RIFF_WAVE_FORMAT_MSRT24         (0x0082)
+#define GST_RIFF_WAVE_FORMAT_G729A          (0x0083)
+#define GST_RIFF_WAVE_FORMAT_MVI_MVI2       (0x0084)
+#define GST_RIFF_WAVE_FORMAT_DF_G726        (0x0085)
+#define GST_RIFF_WAVE_FORMAT_DF_GSM610      (0x0086)
+#define GST_RIFF_WAVE_FORMAT_ISIAUDIO       (0x0088)
+#define GST_RIFF_WAVE_FORMAT_ONLIVE         (0x0089)
+#define GST_RIFF_WAVE_FORMAT_SBC24          (0x0091)
+#define GST_RIFF_WAVE_FORMAT_DOLBY_AC3_SPDIF  (0x0092)
+#define GST_RIFF_WAVE_FORMAT_MEDIASONIC_G723  (0x0093)
+#define GST_RIFF_WAVE_FORMAT_PROSODY_8KBPS  (0x0094)
+#define GST_RIFF_WAVE_FORMAT_ZYXEL_ADPCM    (0x0097)
+#define GST_RIFF_WAVE_FORMAT_PHILIPS_LPCBB  (0x0098)
+#define GST_RIFF_WAVE_FORMAT_PACKED         (0x0099)
+#define GST_RIFF_WAVE_FORMAT_MALDEN_PHONYTALK (0x00A0)
+#define GST_RIFF_WAVE_FORMAT_AAC            (0x00ff)
+#define GST_RIFF_WAVE_FORMAT_RHETOREX_ADPCM (0x0100)
+#define GST_RIFF_IBM_FORMAT_MULAW           (0x0101)
+#define GST_RIFF_IBM_FORMAT_ALAW            (0x0102)
+#define GST_RIFF_IBM_FORMAT_ADPCM           (0x0103)
+#define GST_RIFF_WAVE_FORMAT_VIVO_G723      (0x0111)
+#define GST_RIFF_WAVE_FORMAT_VIVO_SIREN     (0x0112)
+#define GST_RIFF_WAVE_FORMAT_DIGITAL_G723   (0x0123)
+#define GST_RIFF_WAVE_FORMAT_SANYO_LD_ADPCM (0x0125)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACEPLNET  (0x0130)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP4800 (0x0131)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_ACELP8V3  (0x0132)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729   (0x0133)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_G729A  (0x0134)
+#define GST_RIFF_WAVE_FORMAT_SIPROLAB_KELVIN (0x0135)
+#define GST_RIFF_WAVE_FORMAT_G726ADPCM       (0x0140)
+#define GST_RIFF_WAVE_FORMAT_QUALCOMM_PUREVOICE (0x0150)
+#define GST_RIFF_WAVE_FORMAT_QUALCOMM_HALFRATE  (0x0151)
+#define GST_RIFF_WAVE_FORMAT_TUBGSM             (0x0155)
+#define GST_RIFF_WAVE_FORMAT_WMAV1          (0x0160)
+#define GST_RIFF_WAVE_FORMAT_WMAV2          (0x0161)
+#define GST_RIFF_WAVE_FORMAT_WMAV3          (0x0162)
+#define GST_RIFF_WAVE_FORMAT_WMAV3_L        (0x0163)
+#define GST_RIFF_WAVE_FORMAT_CREATIVE_ADPCM (0x0200)
+#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH8  (0x0202)
+#define GST_RIFF_WAVE_FORMAT_CREATIVE_FASTSPEECH10 (0x0203)
+#define GST_RIFF_WAVE_FORMAT_UHER_ADPCM     (0x0210)
+#define GST_RIFF_WAVE_FORMAT_QUARTERDECK    (0x0220)
+#define GST_RIFF_WAVE_FORMAT_ILINK_VC       (0x0230)
+#define GST_RIFF_WAVE_FORMAT_RAW_SPORT      (0x0240)
+#define GST_RIFF_WAVE_FORMAT_IPI_HSX        (0x0250)
+#define GST_RIFF_WAVE_FORMAT_IPI_RPELP      (0x0251)
+#define GST_RIFF_WAVE_FORMAT_CS2            (0x0260)
+#define GST_RIFF_WAVE_FORMAT_SONY_ATRAC3    (0x0270)
+#define GST_RIFF_WAVE_FORMAT_SIREN          (0x028E)
+#define GST_RIFF_WAVE_FORMAT_FM_TOWNS_SND   (0x0300)
+#define GST_RIFF_WAVE_FORMAT_BTV_DIGITAL    (0x0400)
+#define GST_RIFF_WAVE_FORMAT_IMC            (0x0401)
+#define GST_RIFF_WAVE_FORMAT_QDESIGN_MUSIC  (0x0450)
+#define GST_RIFF_WAVE_FORMAT_VME_VMPCM      (0x0680)
+#define GST_RIFF_WAVE_FORMAT_TPC            (0x0681)
+#define GST_RIFF_WAVE_FORMAT_OLIGSM         (0x1000)
+#define GST_RIFF_WAVE_FORMAT_OLIADPCM       (0x1001)
+#define GST_RIFF_WAVE_FORMAT_OLICELP        (0x1002)
+#define GST_RIFF_WAVE_FORMAT_OLISBC         (0x1003)
+#define GST_RIFF_WAVE_FORMAT_OLIOPR         (0x1004)
+#define GST_RIFF_WAVE_FORMAT_LH_CODEC       (0x1100)
+#define GST_RIFF_WAVE_FORMAT_NORRIS         (0x1400)
+#define GST_RIFF_WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS (0x1500)
+#define GST_RIFF_WAVE_FORMAT_A52            (0x2000)
+#define GST_RIFF_WAVE_FORMAT_DTS            (0x2001)
+#define GST_RIFF_WAVE_FORMAT_SONIC          (0x2048)
+#define GST_RIFF_WAVE_FORMAT_SONIC_LS       (0x2048)
+#define GST_RIFF_WAVE_FORMAT_AAC_AC         (0x4143)
+#define GST_RIFF_WAVE_FORMAT_VORBIS1        (0x674f)
+#define GST_RIFF_WAVE_FORMAT_VORBIS2        (0x6750)
+#define GST_RIFF_WAVE_FORMAT_VORBIS3        (0x6751)
+#define GST_RIFF_WAVE_FORMAT_VORBIS1PLUS    (0x676f)
+#define GST_RIFF_WAVE_FORMAT_VORBIS2PLUS    (0x6770)
+#define GST_RIFF_WAVE_FORMAT_VORBIS3PLUS    (0x6771)
+#define GST_RIFF_WAVE_FORMAT_AAC_pm         (0x706d)
+#define GST_RIFF_WAVE_FORMAT_GSM_AMR_CBR    (0x7A21)
+#define GST_RIFF_WAVE_FORMAT_GSM_AMR_VBR    (0x7A22)
+#define GST_RIFF_WAVE_FORMAT_FLAC           (0xF1AC)
+#define GST_RIFF_WAVE_FORMAT_EXTENSIBLE     (0xFFFE)
+  guint16 channels;
+  guint32 rate;
+  guint32 av_bps;
+  guint16 blockalign;
+#if 0
+  /* missing field: */
+  guint16 bits_per_sample;
+#endif
+  guint16 size;
+} gst_riff_strf_auds;
+
+typedef struct _gst_riff_strf_iavs {    
+  guint32 DVAAuxSrc;
+  guint32 DVAAuxCtl;
+  guint32 DVAAuxSrc1;
+  guint32 DVAAuxCtl1;
+  guint32 DVVAuxSrc;
+  guint32 DVVAuxCtl;
+  guint32 DVReserved1;
+  guint32 DVReserved2;
+} gst_riff_strf_iavs;
+
+typedef struct _gst_riff_index_entry {  
+  guint32 id;
+  guint32 flags;
+#define GST_RIFF_IF_LIST                (0x00000001L)
+#define GST_RIFF_IF_KEYFRAME            (0x00000010L)
+#define GST_RIFF_IF_NO_TIME             (0x00000100L)
+#define GST_RIFF_IF_COMPUSE             (0x0FFF0000L)
+  guint32 offset;
+  guint32 size;
+} gst_riff_index_entry;
+
+typedef struct _gst_riff_dmlh {
+  guint32 totalframes;
+} gst_riff_dmlh;
+
+/* taken from libsndfile/wav.c (LGPL) */
+typedef struct _gst_riff_acid {
+  /* 4 bytes (int)     type of file:
+   *  this appears to be a bit mask,however some combinations
+   *  are probably impossible and/or qualified as "errors"
+   *
+   *  0x01 On: One Shot         Off: Loop
+   *  0x02 On: Root note is Set Off: No root
+   *  0x04 On: Stretch is On,   Off: Strech is OFF
+   *  0x08 On: Disk Based       Off: Ram based
+   *  0x10 On: ??????????       Off: ????????? (Acidizer puts that ON)
+   */
+  guint32 loop_type;
+  /* 2 bytes (short)      root note
+   *  if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B]
+   *  if type 0x10 is ON  : [C,C#,(...),B] -> [0x3C to 0x47]
+   *  (both types fit on same MIDI pitch albeit different octaves, so who cares)
+   */
+  guint16 root_note;
+  /* 2 bytes (short)      ??? always set to 0x8000
+   * 4 bytes (float)      ??? seems to be always 0
+   */
+  guint16 unknown1;
+  gfloat unknown2;
+  /* 4 bytes (int)        number of beats
+   * 2 bytes (short)      meter denominator   //always 4 in SF/ACID
+   * 2 bytes (short)      meter numerator     //always 4 in SF/ACID
+   *                      //are we sure about the order?? usually its num/denom
+   * 4 bytes (float)      tempo
+   */
+  guint32 number_of_beats;
+  guint16 meter_d, meter_n;
+  gfloat tempo;
+} gst_riff_acid;
+
+G_END_DECLS
+
+#endif /* __GST_RIFF_IDS_H__ */
diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c
new file mode 100644
index 0000000..90e7392
--- /dev/null
+++ b/gst-libs/gst/riff/riff-media.c
@@ -0,0 +1,1901 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff-media.h: RIFF-id to/from caps routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "riff-ids.h"
+#include "riff-media.h"
+
+#include <gst/audio/audio.h>
+
+#include <string.h>
+#include <math.h>
+
+GST_DEBUG_CATEGORY_EXTERN (riff_debug);
+#define GST_CAT_DEFAULT riff_debug
+
+/**
+ * gst_riff_create_video_caps:
+ * @codec_fcc: fourCC codec for this codec.
+ * @strh: pointer to the strh stream header structure.
+ * @strf: pointer to the strf stream header structure, including any
+ *        data that is within the range of strf.size, but excluding any
+ *        additional data withint this chunk but outside strf.size.
+ * @strf_data: a #GstBuffer containing the additional data in the strf
+ *             chunk outside reach of strf.size. Ususally a palette.
+ * @strd_data: a #GstBuffer containing the data in the strd stream header
+ *             chunk. Usually codec initialization data.
+ * @codec_name: if given, will be filled with a human-readable codec name.
+ */
+
+GstCaps *
+gst_riff_create_video_caps (guint32 codec_fcc,
+    gst_riff_strh * strh, gst_riff_strf_vids * strf,
+    GstBuffer * strf_data, GstBuffer * strd_data, char **codec_name)
+{
+  GstCaps *caps = NULL;
+  GstBuffer *palette = NULL;
+
+  GST_DEBUG ("video fourcc %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (codec_fcc));
+
+  switch (codec_fcc) {
+    case GST_MAKE_FOURCC ('D', 'I', 'B', ' '): /* uncompressed RGB */
+    case GST_MAKE_FOURCC (0x00, 0x00, 0x00, 0x00):
+    case GST_MAKE_FOURCC ('R', 'G', 'B', ' '):
+    case GST_MAKE_FOURCC ('R', 'A', 'W', ' '):
+    {
+      gint bpp = (strf && strf->bit_cnt != 0) ? strf->bit_cnt : 8;
+
+      if (strf) {
+        if (bpp == 8) {
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "RGB8_PALETTED", NULL);
+        } else if (bpp == 24) {
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "BGR", NULL);
+        } else if (bpp == 32) {
+          caps = gst_caps_new_simple ("video/x-raw",
+              "format", G_TYPE_STRING, "BGRx", NULL);
+        } else {
+          GST_WARNING ("Unhandled DIB RGB depth: %d", bpp);
+          return NULL;
+        }
+      } else {
+        /* for template */
+        caps =
+            gst_caps_from_string ("video/x-raw, format = (string) "
+            "{ RGB8_PALETTED, BGR, BGRx }");
+      }
+
+      palette = strf_data;
+      strf_data = NULL;
+      if (codec_name) {
+        if (bpp == 8)
+          *codec_name = g_strdup_printf ("Palettized %d-bit RGB", bpp);
+        else
+          *codec_name = g_strdup_printf ("%d-bit RGB", bpp);
+      }
+      break;
+    }
+    case GST_MAKE_FOURCC ('I', '4', '2', '0'):
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "I420", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Uncompressed planar YUV 4:2:0");
+      break;
+
+    case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
+    case GST_MAKE_FOURCC ('Y', 'U', 'N', 'V'):
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YUY2", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
+      break;
+
+    case GST_MAKE_FOURCC ('Y', 'V', 'U', '9'):
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YVU9", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Uncompressed packed YVU 4:1:0");
+      break;
+
+    case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
+    case GST_MAKE_FOURCC ('2', 'v', 'u', 'y'):
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "UYVY", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
+      break;
+
+    case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
+      caps = gst_caps_new_simple ("video/x-raw",
+          "format", G_TYPE_STRING, "YV12", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Uncompressed packed YVU 4:2:2");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'J', 'P', 'G'): /* YUY2 MJPEG */
+    case GST_MAKE_FOURCC ('A', 'V', 'R', 'n'):
+    case GST_MAKE_FOURCC ('I', 'J', 'P', 'G'):
+    case GST_MAKE_FOURCC ('i', 'j', 'p', 'g'):
+    case GST_MAKE_FOURCC ('d', 'm', 'b', '1'):
+    case GST_MAKE_FOURCC ('A', 'C', 'D', 'V'):
+    case GST_MAKE_FOURCC ('Q', 'I', 'V', 'G'):
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Motion JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('J', 'P', 'E', 'G'): /* generic (mostly RGB) MJPEG */
+    case GST_MAKE_FOURCC ('j', 'p', 'e', 'g'): /* generic (mostly RGB) MJPEG */
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("JPEG Still Image");
+      break;
+
+    case GST_MAKE_FOURCC ('P', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
+    case GST_MAKE_FOURCC ('V', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Miro/Pinnacle Motion JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('C', 'J', 'P', 'G'):
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Creative Webcam JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('S', 'L', 'M', 'J'):
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("SL Motion JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('J', 'P', 'G', 'L'):
+      caps = gst_caps_new_simple ("image/jpeg", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Pegasus Lossless JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('L', 'O', 'C', 'O'):
+      caps = gst_caps_new_simple ("video/x-loco", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("LOCO Lossless");
+      break;
+
+    case GST_MAKE_FOURCC ('S', 'P', '5', '3'):
+    case GST_MAKE_FOURCC ('S', 'P', '5', '4'):
+    case GST_MAKE_FOURCC ('S', 'P', '5', '5'):
+    case GST_MAKE_FOURCC ('S', 'P', '5', '6'):
+    case GST_MAKE_FOURCC ('S', 'P', '5', '7'):
+    case GST_MAKE_FOURCC ('S', 'P', '5', '8'):
+      caps = gst_caps_new_simple ("video/sp5x", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Sp5x-like JPEG");
+      break;
+
+    case GST_MAKE_FOURCC ('Z', 'M', 'B', 'V'):
+      caps = gst_caps_new_simple ("video/x-zmbv", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Zip Motion Block video");
+      break;
+
+    case GST_MAKE_FOURCC ('H', 'F', 'Y', 'U'):
+      caps = gst_caps_new_simple ("video/x-huffyuv", NULL);
+      if (strf) {
+        gst_caps_set_simple (caps, "bpp",
+            G_TYPE_INT, (int) strf->bit_cnt, NULL);
+      }
+      if (codec_name)
+        *codec_name = g_strdup ("Huffman Lossless Codec");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'P', 'E', 'G'):
+    case GST_MAKE_FOURCC ('M', 'P', 'G', 'I'):
+    case GST_MAKE_FOURCC ('m', 'p', 'g', '1'):
+    case GST_MAKE_FOURCC ('M', 'P', 'G', '1'):
+    case GST_MAKE_FOURCC ('P', 'I', 'M', '1'):
+    case GST_MAKE_FOURCC (0x01, 0x00, 0x00, 0x10):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "mpegversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-1 video");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'P', 'G', '2'):
+    case GST_MAKE_FOURCC ('m', 'p', 'g', '2'):
+    case GST_MAKE_FOURCC ('P', 'I', 'M', '2'):
+    case GST_MAKE_FOURCC ('D', 'V', 'R', ' '):
+    case GST_MAKE_FOURCC (0x02, 0x00, 0x00, 0x10):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "mpegversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-2 video");
+      break;
+
+    case GST_MAKE_FOURCC ('L', 'M', 'P', '2'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "mpegversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lead MPEG-2 video");
+      break;
+
+    case GST_MAKE_FOURCC ('H', '2', '6', '3'):
+    case GST_MAKE_FOURCC ('h', '2', '6', '3'):
+    case GST_MAKE_FOURCC ('i', '2', '6', '3'):
+    case GST_MAKE_FOURCC ('U', '2', '6', '3'):
+    case GST_MAKE_FOURCC ('v', 'i', 'v', '1'):
+    case GST_MAKE_FOURCC ('T', '2', '6', '3'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "itu", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("ITU H.26n");
+      break;
+
+    case GST_MAKE_FOURCC ('L', '2', '6', '3'):
+      /* http://www.leadcodecs.com/Codecs/LEAD-H263.htm */
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "lead", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lead H.263");
+      break;
+
+    case GST_MAKE_FOURCC ('M', '2', '6', '3'):
+    case GST_MAKE_FOURCC ('m', '2', '6', '3'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "microsoft", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft H.263");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'D', 'O', 'W'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "vdolive", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("VDOLive");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'I', 'V', 'O'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "vivo", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Vivo H.263");
+      break;
+
+    case GST_MAKE_FOURCC ('x', '2', '6', '3'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "xirlink", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Xirlink H.263");
+      break;
+
+      /* apparently not standard H.263...? */
+    case GST_MAKE_FOURCC ('I', '2', '6', '3'):
+      caps = gst_caps_new_simple ("video/x-intel-h263",
+          "variant", G_TYPE_STRING, "intel", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Intel H.263");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'X', '1', 'K'):
+      caps = gst_caps_new_simple ("video/x-h263",
+          "variant", G_TYPE_STRING, "lucent", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lucent VX1000S H.263");
+      break;
+
+    case GST_MAKE_FOURCC ('X', '2', '6', '4'):
+    case GST_MAKE_FOURCC ('x', '2', '6', '4'):
+    case GST_MAKE_FOURCC ('H', '2', '6', '4'):
+    case GST_MAKE_FOURCC ('h', '2', '6', '4'):
+    case GST_MAKE_FOURCC ('a', 'v', 'c', '1'):
+    case GST_MAKE_FOURCC ('A', 'V', 'C', '1'):
+      caps = gst_caps_new_simple ("video/x-h264",
+          "variant", G_TYPE_STRING, "itu", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("ITU H.264");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'S', 'S', 'H'):
+      caps = gst_caps_new_simple ("video/x-h264",
+          "variant", G_TYPE_STRING, "videosoft", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("VideoSoft H.264");
+      break;
+
+    case GST_MAKE_FOURCC ('L', '2', '6', '4'):
+      /* http://www.leadcodecs.com/Codecs/LEAD-H264.htm */
+      caps = gst_caps_new_simple ("video/x-h264",
+          "variant", G_TYPE_STRING, "lead", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lead H.264");
+      break;
+
+    case GST_MAKE_FOURCC ('S', 'E', 'D', 'G'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Samsung MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('M', '4', 'C', 'C'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Divio MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('D', 'I', 'V', '3'):
+    case GST_MAKE_FOURCC ('d', 'i', 'v', '3'):
+    case GST_MAKE_FOURCC ('D', 'V', 'X', '3'):
+    case GST_MAKE_FOURCC ('d', 'v', 'x', '3'):
+    case GST_MAKE_FOURCC ('D', 'I', 'V', '4'):
+    case GST_MAKE_FOURCC ('d', 'i', 'v', '4'):
+    case GST_MAKE_FOURCC ('D', 'I', 'V', '5'):
+    case GST_MAKE_FOURCC ('d', 'i', 'v', '5'):
+    case GST_MAKE_FOURCC ('D', 'I', 'V', '6'):
+    case GST_MAKE_FOURCC ('d', 'i', 'v', '6'):
+    case GST_MAKE_FOURCC ('M', 'P', 'G', '3'):
+    case GST_MAKE_FOURCC ('m', 'p', 'g', '3'):
+    case GST_MAKE_FOURCC ('c', 'o', 'l', '0'):
+    case GST_MAKE_FOURCC ('C', 'O', 'L', '0'):
+    case GST_MAKE_FOURCC ('c', 'o', 'l', '1'):
+    case GST_MAKE_FOURCC ('C', 'O', 'L', '1'):
+    case GST_MAKE_FOURCC ('A', 'P', '4', '1'):
+      caps = gst_caps_new_simple ("video/x-divx",
+          "divxversion", G_TYPE_INT, 3, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DivX MS-MPEG-4 Version 3");
+      break;
+
+    case GST_MAKE_FOURCC ('d', 'i', 'v', 'x'):
+    case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
+      caps = gst_caps_new_simple ("video/x-divx",
+          "divxversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DivX MPEG-4 Version 4");
+      break;
+
+    case GST_MAKE_FOURCC ('B', 'L', 'Z', '0'):
+      caps = gst_caps_new_simple ("video/x-divx",
+          "divxversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Blizzard DivX");
+      break;
+
+    case GST_MAKE_FOURCC ('D', 'X', '5', '0'):
+      caps = gst_caps_new_simple ("video/x-divx",
+          "divxversion", G_TYPE_INT, 5, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DivX MPEG-4 Version 5");
+      break;
+
+    case GST_MAKE_FOURCC ('X', 'V', 'I', 'D'):
+    case GST_MAKE_FOURCC ('x', 'v', 'i', 'd'):
+      caps = gst_caps_new_simple ("video/x-xvid", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("XVID MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('R', 'M', 'P', '4'):
+      caps = gst_caps_new_simple ("video/x-xvid", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Sigma-Designs MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'P', 'G', '4'):
+    case GST_MAKE_FOURCC ('M', 'P', '4', '1'):
+    case GST_MAKE_FOURCC ('m', 'p', '4', '1'):
+      caps = gst_caps_new_simple ("video/x-msmpeg",
+          "msmpegversion", G_TYPE_INT, 41, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft MPEG-4 4.1");
+      break;
+
+    case GST_MAKE_FOURCC ('m', 'p', '4', '2'):
+    case GST_MAKE_FOURCC ('M', 'P', '4', '2'):
+      caps = gst_caps_new_simple ("video/x-msmpeg",
+          "msmpegversion", G_TYPE_INT, 42, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft MPEG-4 4.2");
+      break;
+
+    case GST_MAKE_FOURCC ('m', 'p', '4', '3'):
+    case GST_MAKE_FOURCC ('M', 'P', '4', '3'):
+      caps = gst_caps_new_simple ("video/x-msmpeg",
+          "msmpegversion", G_TYPE_INT, 43, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft MPEG-4 4.3");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'P', '4', 'S'):
+    case GST_MAKE_FOURCC ('M', '4', 'S', '2'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft ISO MPEG-4 1.1");
+      break;
+
+    case GST_MAKE_FOURCC ('F', 'M', 'P', '4'):
+    case GST_MAKE_FOURCC ('U', 'M', 'P', '4'):
+    case GST_MAKE_FOURCC ('F', 'F', 'D', 'S'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("FFmpeg MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('E', 'M', '4', 'A'):
+    case GST_MAKE_FOURCC ('E', 'P', 'V', 'H'):
+    case GST_MAKE_FOURCC ('F', 'V', 'F', 'W'):
+    case GST_MAKE_FOURCC ('I', 'N', 'M', 'C'):
+    case GST_MAKE_FOURCC ('D', 'I', 'G', 'I'):
+    case GST_MAKE_FOURCC ('D', 'M', '2', 'K'):
+    case GST_MAKE_FOURCC ('D', 'C', 'O', 'D'):
+    case GST_MAKE_FOURCC ('M', 'V', 'X', 'M'):
+    case GST_MAKE_FOURCC ('P', 'M', '4', 'V'):
+    case GST_MAKE_FOURCC ('S', 'M', 'P', '4'):
+    case GST_MAKE_FOURCC ('D', 'X', 'G', 'M'):
+    case GST_MAKE_FOURCC ('V', 'I', 'D', 'M'):
+    case GST_MAKE_FOURCC ('M', '4', 'T', '3'):
+    case GST_MAKE_FOURCC ('G', 'E', 'O', 'X'):
+    case GST_MAKE_FOURCC ('M', 'P', '4', 'V'):
+    case GST_MAKE_FOURCC ('m', 'p', '4', 'v'):
+      caps = gst_caps_new_simple ("video/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-4");
+      break;
+
+    case GST_MAKE_FOURCC ('3', 'i', 'v', 'd'):
+    case GST_MAKE_FOURCC ('3', 'I', 'V', 'D'):
+      caps = gst_caps_new_simple ("video/x-msmpeg",
+          "msmpegversion", G_TYPE_INT, 43, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft MPEG-4 4.3");        /* FIXME? */
+      break;
+
+    case GST_MAKE_FOURCC ('3', 'I', 'V', '1'):
+    case GST_MAKE_FOURCC ('3', 'I', 'V', '2'):
+      caps = gst_caps_new_simple ("video/x-3ivx", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("3ivx");
+      break;
+
+    case GST_MAKE_FOURCC ('D', 'V', 'S', 'D'):
+    case GST_MAKE_FOURCC ('d', 'v', 's', 'd'):
+    case GST_MAKE_FOURCC ('d', 'v', 'c', ' '):
+    case GST_MAKE_FOURCC ('d', 'v', '2', '5'):
+      caps = gst_caps_new_simple ("video/x-dv",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "dvversion", G_TYPE_INT, 25, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Generic DV");
+      break;
+
+    case GST_MAKE_FOURCC ('C', 'D', 'V', 'C'):
+    case GST_MAKE_FOURCC ('c', 'd', 'v', 'c'):
+      caps = gst_caps_new_simple ("video/x-dv",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "dvversion", G_TYPE_INT, 25, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Canopus DV");
+      break;
+
+    case GST_MAKE_FOURCC ('D', 'V', '5', '0'):
+    case GST_MAKE_FOURCC ('d', 'v', '5', '0'):
+      caps = gst_caps_new_simple ("video/x-dv",
+          "systemstream", G_TYPE_BOOLEAN, FALSE,
+          "dvversion", G_TYPE_INT, 50, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DVCPro50 Video");
+      break;
+
+    case GST_MAKE_FOURCC ('W', 'M', 'V', '1'):
+      caps = gst_caps_new_simple ("video/x-wmv",
+          "wmvversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft Windows Media 7");
+      break;
+
+    case GST_MAKE_FOURCC ('W', 'M', 'V', '2'):
+      caps = gst_caps_new_simple ("video/x-wmv",
+          "wmvversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft Windows Media 8");
+      break;
+
+    case GST_MAKE_FOURCC ('W', 'M', 'V', '3'):
+      caps = gst_caps_new_simple ("video/x-wmv",
+          "wmvversion", G_TYPE_INT, 3, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft Windows Media 9");
+      break;
+
+    case GST_MAKE_FOURCC ('W', 'M', 'V', 'A'):
+      caps = gst_caps_new_simple ("video/x-wmv",
+          "wmvversion", G_TYPE_INT, 3, "format", G_TYPE_STRING, "WMVA", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft Windows Media Advanced Profile");
+      break;
+
+    case GST_MAKE_FOURCC ('W', 'V', 'C', '1'):
+      caps = gst_caps_new_simple ("video/x-wmv",
+          "wmvversion", G_TYPE_INT, 3, "format", G_TYPE_STRING, "WVC1", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft Windows Media VC-1");
+      break;
+
+    case GST_MAKE_FOURCC ('c', 'v', 'i', 'd'):
+      caps = gst_caps_new_simple ("video/x-cinepak", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Cinepak video");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'S', 'V', 'C'):
+    case GST_MAKE_FOURCC ('m', 's', 'v', 'c'):
+    case GST_MAKE_FOURCC ('C', 'R', 'A', 'M'):
+    case GST_MAKE_FOURCC ('c', 'r', 'a', 'm'):
+    case GST_MAKE_FOURCC ('W', 'H', 'A', 'M'):
+    case GST_MAKE_FOURCC ('w', 'h', 'a', 'm'):
+      caps = gst_caps_new_simple ("video/x-msvideocodec",
+          "msvideoversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MS video v1");
+      palette = strf_data;
+      strf_data = NULL;
+      break;
+
+    case GST_MAKE_FOURCC ('R', 'L', 'E', ' '):
+    case GST_MAKE_FOURCC ('m', 'r', 'l', 'e'):
+    case GST_MAKE_FOURCC (0x1, 0x0, 0x0, 0x0): /* why, why, why? */
+    case GST_MAKE_FOURCC (0x2, 0x0, 0x0, 0x0): /* why, why, why? */
+      caps = gst_caps_new_simple ("video/x-rle",
+          "layout", G_TYPE_STRING, "microsoft", NULL);
+      palette = strf_data;
+      strf_data = NULL;
+      if (strf) {
+        gst_caps_set_simple (caps,
+            "depth", G_TYPE_INT, (gint) strf->bit_cnt, NULL);
+      } else {
+        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
+      }
+      if (codec_name)
+        *codec_name = g_strdup ("Microsoft RLE");
+      break;
+
+    case GST_MAKE_FOURCC ('A', 'A', 'S', 'C'):
+      caps = gst_caps_new_simple ("video/x-aasc", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Autodesk Animator");
+      break;
+
+    case GST_MAKE_FOURCC ('X', 'x', 'a', 'n'):
+      caps = gst_caps_new_simple ("video/x-xan",
+          "wcversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Xan Wing Commander 4");
+      break;
+
+    case GST_MAKE_FOURCC ('R', 'T', '2', '1'):
+      caps = gst_caps_new_simple ("video/x-indeo",
+          "indeoversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Intel Video 2");
+      break;
+
+    case GST_MAKE_FOURCC ('I', 'V', '3', '1'):
+    case GST_MAKE_FOURCC ('I', 'V', '3', '2'):
+    case GST_MAKE_FOURCC ('i', 'v', '3', '1'):
+    case GST_MAKE_FOURCC ('i', 'v', '3', '2'):
+      caps = gst_caps_new_simple ("video/x-indeo",
+          "indeoversion", G_TYPE_INT, 3, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Intel Video 3");
+      break;
+
+    case GST_MAKE_FOURCC ('I', 'V', '4', '1'):
+    case GST_MAKE_FOURCC ('i', 'v', '4', '1'):
+      caps = gst_caps_new_simple ("video/x-indeo",
+          "indeoversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Intel Video 4");
+      break;
+
+    case GST_MAKE_FOURCC ('I', 'V', '5', '0'):
+      caps = gst_caps_new_simple ("video/x-indeo",
+          "indeoversion", G_TYPE_INT, 5, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Intel Video 5");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'S', 'Z', 'H'):
+      caps = gst_caps_new_simple ("video/x-mszh", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lossless MSZH Video");
+      break;
+
+    case GST_MAKE_FOURCC ('Z', 'L', 'I', 'B'):
+      caps = gst_caps_new_simple ("video/x-zlib", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Lossless zlib video");
+      break;
+
+    case GST_MAKE_FOURCC ('C', 'L', 'J', 'R'):
+    case GST_MAKE_FOURCC ('c', 'l', 'j', 'r'):
+      caps = gst_caps_new_simple ("video/x-cirrus-logic-accupak", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Cirrus Logipak AccuPak");
+      break;
+
+    case GST_MAKE_FOURCC ('C', 'Y', 'U', 'V'):
+    case GST_MAKE_FOURCC ('c', 'y', 'u', 'v'):
+      caps = gst_caps_new_simple ("video/x-compressed-yuv", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("CYUV Lossless");
+      break;
+
+    case GST_MAKE_FOURCC ('D', 'U', 'C', 'K'):
+    case GST_MAKE_FOURCC ('P', 'V', 'E', 'Z'):
+      caps = gst_caps_new_simple ("video/x-truemotion",
+          "trueversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Duck Truemotion1");
+      break;
+
+    case GST_MAKE_FOURCC ('T', 'M', '2', '0'):
+      caps = gst_caps_new_simple ("video/x-truemotion",
+          "trueversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("TrueMotion 2.0");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'P', '3', '0'):
+    case GST_MAKE_FOURCC ('v', 'p', '3', '0'):
+    case GST_MAKE_FOURCC ('V', 'P', '3', '1'):
+    case GST_MAKE_FOURCC ('v', 'p', '3', '1'):
+    case GST_MAKE_FOURCC ('V', 'P', '3', ' '):
+      caps = gst_caps_new_simple ("video/x-vp3", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("VP3");
+      break;
+
+    case GST_MAKE_FOURCC ('U', 'L', 'T', 'I'):
+      caps = gst_caps_new_simple ("video/x-ultimotion", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("IBM UltiMotion");
+      break;
+
+    case GST_MAKE_FOURCC ('T', 'S', 'C', 'C'):
+    case GST_MAKE_FOURCC ('t', 's', 'c', 'c'):{
+      if (strf) {
+        gint depth = (strf->bit_cnt != 0) ? (gint) strf->bit_cnt : 24;
+
+        caps = gst_caps_new_simple ("video/x-camtasia", "depth", G_TYPE_INT,
+            depth, NULL);
+      } else {
+        /* template caps */
+        caps = gst_caps_new_simple ("video/x-camtasia", NULL);
+      }
+      if (codec_name)
+        *codec_name = g_strdup ("TechSmith Camtasia");
+      break;
+    }
+
+    case GST_MAKE_FOURCC ('C', 'S', 'C', 'D'):
+    {
+      if (strf) {
+        gint depth = (strf->bit_cnt != 0) ? (gint) strf->bit_cnt : 24;
+
+        caps = gst_caps_new_simple ("video/x-camstudio", "depth", G_TYPE_INT,
+            depth, NULL);
+      } else {
+        /* template caps */
+        caps = gst_caps_new_simple ("video/x-camstudio", NULL);
+      }
+      if (codec_name)
+        *codec_name = g_strdup ("Camstudio");
+      break;
+    }
+
+    case GST_MAKE_FOURCC ('V', 'C', 'R', '1'):
+      caps = gst_caps_new_simple ("video/x-ati-vcr",
+          "vcrversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("ATI VCR 1");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'C', 'R', '2'):
+      caps = gst_caps_new_simple ("video/x-ati-vcr",
+          "vcrversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("ATI VCR 2");
+      break;
+
+    case GST_MAKE_FOURCC ('A', 'S', 'V', '1'):
+      caps = gst_caps_new_simple ("video/x-asus",
+          "asusversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Asus Video 1");
+      break;
+
+    case GST_MAKE_FOURCC ('A', 'S', 'V', '2'):
+      caps = gst_caps_new_simple ("video/x-asus",
+          "asusversion", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Asus Video 2");
+      break;
+
+    case GST_MAKE_FOURCC ('M', 'P', 'N', 'G'):
+    case GST_MAKE_FOURCC ('m', 'p', 'n', 'g'):
+    case GST_MAKE_FOURCC ('P', 'N', 'G', ' '):
+      caps = gst_caps_new_simple ("image/png", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("PNG image");
+      break;
+
+    case GST_MAKE_FOURCC ('F', 'L', 'V', '1'):
+      caps = gst_caps_new_simple ("video/x-flash-video",
+          "flvversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Flash Video 1");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'M', 'n', 'c'):
+      caps = gst_caps_new_simple ("video/x-vmnc",
+          "version", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("VMWare NC Video");
+      break;
+
+    case GST_MAKE_FOURCC ('d', 'r', 'a', 'c'):
+      caps = gst_caps_new_simple ("video/x-dirac", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Dirac");
+      break;
+
+    case GST_RIFF_rpza:
+    case GST_RIFF_azpr:
+    case GST_MAKE_FOURCC ('R', 'P', 'Z', 'A'):
+      caps = gst_caps_new_simple ("video/x-apple-video", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Apple Video (RPZA)");
+      break;
+
+
+    case GST_MAKE_FOURCC ('F', 'F', 'V', '1'):
+      caps = gst_caps_new_simple ("video/x-ffv",
+          "ffvversion", G_TYPE_INT, 1, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("FFmpeg lossless video codec");
+      break;
+
+    case GST_MAKE_FOURCC ('K', 'M', 'V', 'C'):
+      caps = gst_caps_new_simple ("video/x-kmvc", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Karl Morton's video codec");
+      break;
+
+    case GST_MAKE_FOURCC ('v', 'p', '5', '0'):
+    case GST_MAKE_FOURCC ('V', 'P', '5', '0'):
+      caps = gst_caps_new_simple ("video/x-vp5", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("On2 VP5");
+      break;
+
+    case GST_MAKE_FOURCC ('v', 'p', '6', '0'):
+    case GST_MAKE_FOURCC ('V', 'P', '6', '0'):
+    case GST_MAKE_FOURCC ('v', 'p', '6', '1'):
+    case GST_MAKE_FOURCC ('V', 'P', '6', '1'):
+    case GST_MAKE_FOURCC ('V', 'p', '6', '2'):
+    case GST_MAKE_FOURCC ('V', 'P', '6', '2'):
+      caps = gst_caps_new_simple ("video/x-vp6", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("On2 VP6");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'P', '6', 'F'):
+    case GST_MAKE_FOURCC ('v', 'p', '6', 'f'):
+    case GST_MAKE_FOURCC ('F', 'L', 'V', '4'):
+      caps = gst_caps_new_simple ("video/x-vp6-flash", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("On2 VP6");
+      break;
+
+    case GST_MAKE_FOURCC ('v', 'p', '7', '0'):
+    case GST_MAKE_FOURCC ('V', 'P', '7', '0'):
+      caps = gst_caps_new_simple ("video/x-vp7", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("On2 VP7");
+      break;
+
+    case GST_MAKE_FOURCC ('V', 'P', '8', '0'):
+      caps = gst_caps_new_simple ("video/x-vp8", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("On2 VP8");
+      break;
+
+    case GST_MAKE_FOURCC ('L', 'M', '2', '0'):
+      caps = gst_caps_new_simple ("video/x-mimic", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Mimic webcam");
+      break;
+
+    case GST_MAKE_FOURCC ('T', 'H', 'E', 'O'):
+    case GST_MAKE_FOURCC ('t', 'h', 'e', 'o'):
+      caps = gst_caps_new_simple ("video/x-theora", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Theora video codec");
+
+      break;
+
+    case GST_MAKE_FOURCC ('F', 'P', 'S', '1'):
+      caps = gst_caps_new_simple ("video/x-fraps", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Fraps video");
+
+      break;
+
+    default:
+      GST_WARNING ("Unknown video fourcc %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (codec_fcc));
+      return NULL;
+  }
+
+  if (strh != NULL) {
+    gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION,
+        strh->rate, strh->scale, NULL);
+  } else {
+    gst_caps_set_simple (caps,
+        "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+  }
+
+  if (strf != NULL) {
+    gst_caps_set_simple (caps,
+        "width", G_TYPE_INT, strf->width,
+        "height", G_TYPE_INT, strf->height, NULL);
+  } else {
+    gst_caps_set_simple (caps,
+        "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+        "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+  }
+
+  /* extradata */
+  if (strf_data || strd_data) {
+    GstBuffer *codec_data;
+
+    codec_data = strf_data ? strf_data : strd_data;
+
+    gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, codec_data, NULL);
+  }
+
+  /* palette */
+  if (palette) {
+    GstBuffer *copy;
+    guint num_colors;
+    gsize size;
+
+    if (strf != NULL)
+      num_colors = strf->num_colors;
+    else
+      num_colors = 256;
+
+    size = gst_buffer_get_size (palette);
+
+    if (size >= (num_colors * 4)) {
+      /* palette is always at least 256*4 bytes */
+      copy = gst_buffer_new_and_alloc (MAX (size, 256 * 4));
+      gst_buffer_copy_into (copy, palette, GST_BUFFER_COPY_MEMORY, 0, size);
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+      {
+        guint8 *data = GST_BUFFER_DATA (copy);
+        gint n;
+
+        /* own endianness */
+        for (n = 0; n < num_colors; n++) {
+          GST_WRITE_UINT32_BE (data, GST_READ_UINT32_LE (data));
+          data += sizeof (guint32);
+        }
+      }
+#endif
+      gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, copy, NULL);
+      gst_buffer_unref (copy);
+    } else {
+      GST_WARNING ("Palette smaller than expected: broken file");
+    }
+  }
+
+  return caps;
+}
+
+static const struct
+{
+  const guint32 ms_mask;
+  const GstAudioChannelPosition gst_pos;
+} layout_mapping[] = {
+  {
+  0x00001, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+  0x00002, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+  0x00004, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
+  0x00008, GST_AUDIO_CHANNEL_POSITION_LFE}, {
+  0x00010, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
+  0x00020, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+  0x00040, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
+  0x00080, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+  0x00100, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
+  0x00200, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
+  0x00400, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
+  0x00800, GST_AUDIO_CHANNEL_POSITION_TOP_CENTER}, {
+  0x01000, GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT}, {
+  0x02000, GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER}, {
+  0x04000, GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT}, {
+  0x08000, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT}, {
+  0x10000, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER}, {
+  0x20000, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT}
+};
+
+#define MAX_CHANNEL_POSITIONS G_N_ELEMENTS (layout_mapping)
+
+static gboolean
+gst_riff_wavext_add_channel_layout (GstCaps * caps, guint32 layout)
+{
+  GstAudioChannelPosition pos[MAX_CHANNEL_POSITIONS];
+  GstStructure *s;
+  gint num_channels, i, p;
+
+  s = gst_caps_get_structure (caps, 0);
+  if (!gst_structure_get_int (s, "channels", &num_channels))
+    g_return_val_if_reached (FALSE);
+
+  /* In theory this should be done for 1 and 2 channels too but
+   * apparently breaks too many things currently.
+   */
+  if (num_channels <= 2 || num_channels > MAX_CHANNEL_POSITIONS) {
+    GST_DEBUG ("invalid number of channels: %d", num_channels);
+    return FALSE;
+  }
+
+  p = 0;
+  for (i = 0; i < MAX_CHANNEL_POSITIONS; ++i) {
+    if ((layout & layout_mapping[i].ms_mask) != 0) {
+      if (p >= num_channels) {
+        GST_WARNING ("More bits set in the channel layout map than there "
+            "are channels! Broken file");
+        return FALSE;
+      }
+      if (layout_mapping[i].gst_pos == GST_AUDIO_CHANNEL_POSITION_INVALID) {
+        GST_WARNING ("Unsupported channel position (mask 0x%08x) in channel "
+            "layout map - ignoring those channels", layout_mapping[i].ms_mask);
+        /* what to do? just ignore it and let downstream deal with a channel
+         * layout that has INVALID positions in it for now ... */
+      }
+      pos[p] = layout_mapping[i].gst_pos;
+      ++p;
+    }
+  }
+
+  if (p != num_channels) {
+    GST_WARNING ("Only %d bits set in the channel layout map, but there are "
+        "supposed to be %d channels! Broken file", p, num_channels);
+    return FALSE;
+  }
+
+  gst_audio_set_channel_positions (s, pos);
+  return TRUE;
+}
+
+static gboolean
+gst_riff_wave_add_default_channel_layout (GstCaps * caps)
+{
+  GstAudioChannelPosition pos[8] = { GST_AUDIO_CHANNEL_POSITION_NONE, };
+  GstStructure *s;
+  gint nchannels;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  if (!gst_structure_get_int (s, "channels", &nchannels))
+    g_return_val_if_reached (FALSE);
+
+  if (nchannels > 8) {
+    GST_DEBUG ("invalid number of channels: %d", nchannels);
+    return FALSE;
+  }
+
+  /* This uses the default channel mapping from ALSA which
+   * is used in quite a few surround test files and seems to be
+   * the defacto standard. The channel mapping from
+   * WAVE_FORMAT_EXTENSIBLE doesn't seem to be used in normal
+   * wav files like chan-id.wav.
+   * http://bugzilla.gnome.org/show_bug.cgi?id=489010
+   */
+  switch (nchannels) {
+    case 1:
+      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
+      break;
+    case 8:
+      pos[7] = GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT;
+      pos[6] = GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT;
+      /* fall through */
+    case 6:
+      pos[5] = GST_AUDIO_CHANNEL_POSITION_LFE;
+      /* fall through */
+    case 5:
+      pos[4] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+      /* fall through */
+    case 4:
+      pos[3] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+      pos[2] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+      /* fall through */
+    case 2:
+      pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+      break;
+    default:
+      return FALSE;
+  }
+
+  gst_audio_set_channel_positions (s, pos);
+  return TRUE;
+}
+
+static guint32
+gst_riff_wavext_get_default_channel_mask (guint nchannels)
+{
+  guint32 channel_mask = 0;
+
+  /* Set the default channel mask for the given number of channels.
+   * http://www.microsoft.com/whdc/device/audio/multichaud.mspx
+   */
+  switch (nchannels) {
+    case 11:
+      channel_mask |= 0x00400;
+      channel_mask |= 0x00200;
+    case 9:
+      channel_mask |= 0x00100;
+    case 8:
+      channel_mask |= 0x00080;
+      channel_mask |= 0x00040;
+    case 6:
+      channel_mask |= 0x00020;
+      channel_mask |= 0x00010;
+    case 4:
+      channel_mask |= 0x00008;
+    case 3:
+      channel_mask |= 0x00004;
+    case 2:
+      channel_mask |= 0x00002;
+      channel_mask |= 0x00001;
+      break;
+  }
+
+  return channel_mask;
+}
+
+GstCaps *
+gst_riff_create_audio_caps (guint16 codec_id,
+    gst_riff_strh * strh, gst_riff_strf_auds * strf,
+    GstBuffer * strf_data, GstBuffer * strd_data, char **codec_name)
+{
+  gboolean block_align = FALSE, rate_chan = TRUE;
+  GstCaps *caps = NULL;
+  gint rate_min = 1000, rate_max = 96000;
+  gint channels_max = 2;
+
+  switch (codec_id) {
+    case GST_RIFF_WAVE_FORMAT_PCM:     /* PCM */
+      rate_max = 192000;
+      channels_max = 8;
+
+      if (strf != NULL) {
+        gint ba = strf->blockalign;
+        gint ch = strf->channels;
+        gint wd, ws;
+        GstAudioFormat format;
+
+        /* If we have an empty blockalign, we take the width contained in 
+         * strf->size */
+        if (ba != 0)
+          wd = ba * 8 / ch;
+        else
+          wd = strf->size;
+
+        if (strf->size > 32) {
+          GST_WARNING ("invalid depth (%d) of pcm audio, overwriting.",
+              strf->size);
+          strf->size = 8 * ((wd + 7) / 8);
+        }
+
+        /* in riff, the depth is stored in the size field but it just means that
+         * the _least_ significant bits are cleared. We can therefore just play
+         * the sample as if it had a depth == width */
+        /* For reference, the actual depth is in strf->size */
+        ws = wd;
+
+        format =
+            gst_audio_format_build_integer (wd != 8, G_LITTLE_ENDIAN, wd, ws);
+
+        caps = gst_caps_new_simple ("audio/x-raw",
+            "format", G_TYPE_STRING, gst_audio_format_to_string (format),
+            "channels", G_TYPE_INT, ch, NULL);
+
+        /* Add default channel layout. In theory this should be done
+         * for 1 and 2 channels too but apparently breaks too many
+         * things currently. Also we know no default layout for more than
+         * 8 channels. */
+        if (ch > 2) {
+          if (ch > 8)
+            GST_WARNING ("don't know default layout for %d channels", ch);
+          else if (gst_riff_wave_add_default_channel_layout (caps))
+            GST_DEBUG ("using default channel layout for %d channels", ch);
+          else
+            GST_WARNING ("failed to add channel layout");
+        }
+      } else {
+        /* FIXME: this is pretty useless - we need fixed caps */
+        caps = gst_caps_from_string ("audio/x-raw, "
+            "format = (string) { S8, U8, S16LE, U16LE, S24LE, "
+            "U24LE, S32LE, U32LE }");
+      }
+      if (codec_name && strf)
+        *codec_name = g_strdup_printf ("Uncompressed %d-bit PCM audio",
+            strf->size);
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_ADPCM:
+      caps = gst_caps_new_simple ("audio/x-adpcm",
+          "layout", G_TYPE_STRING, "microsoft", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("ADPCM audio");
+      block_align = TRUE;
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_IEEE_FLOAT:
+      rate_max = 192000;
+      channels_max = 8;
+
+      if (strf != NULL) {
+        gint ba = strf->blockalign;
+        gint ch = strf->channels;
+        gint wd = ba * 8 / ch;
+
+        caps = gst_caps_new_simple ("audio/x-raw",
+            "format", G_TYPE_STRING, wd == 64 ? "F64LE" : "F32LE",
+            "channels", G_TYPE_INT, ch, NULL);
+
+        /* Add default channel layout. In theory this should be done
+         * for 1 and 2 channels too but apparently breaks too many
+         * things currently. Also we know no default layout for more than
+         * 8 channels. */
+        if (ch > 2) {
+          if (ch > 8)
+            GST_WARNING ("don't know default layout for %d channels", ch);
+          else if (gst_riff_wave_add_default_channel_layout (caps))
+            GST_DEBUG ("using default channel layout for %d channels", ch);
+          else
+            GST_WARNING ("failed to add channel layout");
+        }
+      } else {
+        /* FIXME: this is pretty useless - we need fixed caps */
+        caps = gst_caps_from_string ("audio/x-raw, "
+            "format = (string) { F32LE, F64LE }");
+      }
+      if (codec_name && strf)
+        *codec_name = g_strdup_printf ("Uncompressed %d-bit IEEE float audio",
+            strf->size);
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_IBM_CVSD:
+      goto unknown;
+
+    case GST_RIFF_WAVE_FORMAT_ALAW:
+      if (strf != NULL) {
+        if (strf->size != 8) {
+          GST_WARNING ("invalid depth (%d) of alaw audio, overwriting.",
+              strf->size);
+          strf->size = 8;
+          strf->blockalign = (strf->size * strf->channels) / 8;
+          strf->av_bps = strf->blockalign * strf->rate;
+        }
+        if (strf->av_bps == 0 || strf->blockalign == 0) {
+          GST_WARNING ("fixing av_bps (%d) and blockalign (%d) of alaw audio",
+              strf->av_bps, strf->blockalign);
+          strf->blockalign = (strf->size * strf->channels) / 8;
+          strf->av_bps = strf->blockalign * strf->rate;
+        }
+      }
+      rate_max = 48000;
+      caps = gst_caps_new_simple ("audio/x-alaw", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("A-law audio");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_WMS:
+      caps = gst_caps_new_simple ("audio/x-wms", NULL);
+      if (strf != NULL) {
+        gst_caps_set_simple (caps,
+            "bitrate", G_TYPE_INT, strf->av_bps * 8,
+            "width", G_TYPE_INT, strf->size,
+            "depth", G_TYPE_INT, strf->size, NULL);
+      } else {
+        gst_caps_set_simple (caps,
+            "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL);
+      }
+      if (codec_name)
+        *codec_name = g_strdup ("Windows Media Audio Speech");
+      block_align = TRUE;
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_MULAW:
+      if (strf != NULL) {
+        if (strf->size != 8) {
+          GST_WARNING ("invalid depth (%d) of mulaw audio, overwriting.",
+              strf->size);
+          strf->size = 8;
+          strf->blockalign = (strf->size * strf->channels) / 8;
+          strf->av_bps = strf->blockalign * strf->rate;
+        }
+        if (strf->av_bps == 0 || strf->blockalign == 0) {
+          GST_WARNING ("fixing av_bps (%d) and blockalign (%d) of mulaw audio",
+              strf->av_bps, strf->blockalign);
+          strf->blockalign = (strf->size * strf->channels) / 8;
+          strf->av_bps = strf->blockalign * strf->rate;
+        }
+      }
+      rate_max = 48000;
+      caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Mu-law audio");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_OKI_ADPCM:
+      goto unknown;
+
+    case GST_RIFF_WAVE_FORMAT_DVI_ADPCM:
+      rate_max = 48000;
+      caps = gst_caps_new_simple ("audio/x-adpcm",
+          "layout", G_TYPE_STRING, "dvi", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DVI ADPCM audio");
+      block_align = TRUE;
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH:
+      rate_min = 8000;
+      rate_max = 8000;
+      caps = gst_caps_new_simple ("audio/x-truespeech", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DSP Group TrueSpeech");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_GSM610:
+    case GST_RIFF_WAVE_FORMAT_MSN:
+      rate_min = 1;
+      caps = gst_caps_new_simple ("audio/ms-gsm", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MS GSM audio");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_MPEGL12: /* mp1 or mp2 */
+      rate_min = 16000;
+      rate_max = 48000;
+      caps = gst_caps_new_simple ("audio/mpeg",
+          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-1 layer 2");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_MPEGL3:  /* mp3 */
+      rate_min = 8000;
+      rate_max = 48000;
+      caps = gst_caps_new_simple ("audio/mpeg",
+          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-1 layer 3");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_AMR_NB:  /* amr-nb */
+      rate_min = 8000;
+      rate_max = 8000;
+      channels_max = 1;
+      caps = gst_caps_new_simple ("audio/AMR", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("AMR Narrow Band (NB)");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_AMR_WB:  /* amr-wb */
+      rate_min = 16000;
+      rate_max = 16000;
+      channels_max = 1;
+      caps = gst_caps_new_simple ("audio/AMR-WB", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("AMR Wide Band (WB)");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_VORBIS1: /* ogg/vorbis mode 1 */
+    case GST_RIFF_WAVE_FORMAT_VORBIS2: /* ogg/vorbis mode 2 */
+    case GST_RIFF_WAVE_FORMAT_VORBIS3: /* ogg/vorbis mode 3 */
+    case GST_RIFF_WAVE_FORMAT_VORBIS1PLUS:     /* ogg/vorbis mode 1+ */
+    case GST_RIFF_WAVE_FORMAT_VORBIS2PLUS:     /* ogg/vorbis mode 2+ */
+    case GST_RIFF_WAVE_FORMAT_VORBIS3PLUS:     /* ogg/vorbis mode 3+ */
+      rate_max = 192000;
+      caps = gst_caps_new_simple ("audio/x-vorbis", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Vorbis");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_A52:
+      channels_max = 6;
+      caps = gst_caps_new_simple ("audio/x-ac3", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("AC-3 audio");
+      break;
+    case GST_RIFF_WAVE_FORMAT_DTS:
+      channels_max = 6;
+      caps = gst_caps_new_simple ("audio/x-dts", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("DTS audio");
+      /* wavparse is not always able to specify rate/channels for DTS-in-wav */
+      rate_chan = FALSE;
+      break;
+    case GST_RIFF_WAVE_FORMAT_AAC:
+    case GST_RIFF_WAVE_FORMAT_AAC_AC:
+    case GST_RIFF_WAVE_FORMAT_AAC_pm:
+    {
+      channels_max = 8;
+      caps = gst_caps_new_simple ("audio/mpeg",
+          "mpegversion", G_TYPE_INT, 4, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("MPEG-4 AAC audio");
+      break;
+    }
+    case GST_RIFF_WAVE_FORMAT_WMAV1:
+    case GST_RIFF_WAVE_FORMAT_WMAV2:
+    case GST_RIFF_WAVE_FORMAT_WMAV3:
+    case GST_RIFF_WAVE_FORMAT_WMAV3_L:
+    {
+      gint version = (codec_id - GST_RIFF_WAVE_FORMAT_WMAV1) + 1;
+
+      channels_max = 6;
+      block_align = TRUE;
+
+      caps = gst_caps_new_simple ("audio/x-wma",
+          "wmaversion", G_TYPE_INT, version, NULL);
+
+      if (codec_name) {
+        if (codec_id == GST_RIFF_WAVE_FORMAT_WMAV3_L)
+          *codec_name = g_strdup ("WMA Lossless");
+        else
+          *codec_name = g_strdup_printf ("WMA Version %d", version + 6);
+      }
+
+      if (strf != NULL) {
+        gst_caps_set_simple (caps,
+            "bitrate", G_TYPE_INT, strf->av_bps * 8,
+            "depth", G_TYPE_INT, strf->size, NULL);
+      } else {
+        gst_caps_set_simple (caps,
+            "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL);
+      }
+      break;
+    }
+    case GST_RIFF_WAVE_FORMAT_SONY_ATRAC3:
+      caps = gst_caps_new_simple ("audio/x-vnd.sony.atrac3", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Sony ATRAC3");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_SIREN:
+      caps = gst_caps_new_simple ("audio/x-siren", NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Siren7");
+      rate_chan = FALSE;
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK4:
+      rate_min = 8000;
+      rate_max = 96000;
+      channels_max = 2;
+      caps =
+          gst_caps_new_simple ("audio/x-adpcm", "layout", G_TYPE_STRING, "dk4",
+          NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("IMA/DK4 ADPCM");
+      break;
+    case GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK3:
+      rate_min = 8000;
+      rate_max = 96000;
+      channels_max = 2;
+      caps =
+          gst_caps_new_simple ("audio/x-adpcm", "layout", G_TYPE_STRING, "dk3",
+          NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("IMA/DK3 ADPCM");
+      break;
+
+    case GST_RIFF_WAVE_FORMAT_ADPCM_IMA_WAV:
+      rate_min = 8000;
+      rate_max = 96000;
+      channels_max = 2;
+      caps =
+          gst_caps_new_simple ("audio/x-adpcm", "layout", G_TYPE_STRING, "dvi",
+          NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("IMA/WAV ADPCM");
+      break;
+    case GST_RIFF_WAVE_FORMAT_EXTENSIBLE:{
+      guint16 valid_bits_per_sample;
+      guint32 channel_mask;
+      guint32 subformat_guid[4];
+      guint8 *data;
+      gsize size;
+
+      channels_max = 8;
+
+      /* should be at least 22 bytes */
+      size = gst_buffer_get_size (strf_data);
+
+      if (strf_data == NULL || size < 22) {
+        GST_WARNING ("WAVE_FORMAT_EXTENSIBLE data size is %" G_GSIZE_FORMAT
+            " (expected: 22)", (strf_data) ? size : -1);
+        return NULL;
+      }
+
+      data = gst_buffer_map (strf_data, &size, NULL, GST_MAP_READ);
+      valid_bits_per_sample = GST_READ_UINT16_LE (data);
+      channel_mask = GST_READ_UINT32_LE (data + 2);
+      subformat_guid[0] = GST_READ_UINT32_LE (data + 6);
+      subformat_guid[1] = GST_READ_UINT32_LE (data + 10);
+      subformat_guid[2] = GST_READ_UINT32_LE (data + 14);
+      subformat_guid[3] = GST_READ_UINT32_LE (data + 18);
+      gst_buffer_unmap (strf_data, data, size);
+
+      GST_DEBUG ("valid bps    = %u", valid_bits_per_sample);
+      GST_DEBUG ("channel mask = 0x%08x", channel_mask);
+      GST_DEBUG ("GUID         = %08x-%08x-%08x-%08x", subformat_guid[0],
+          subformat_guid[1], subformat_guid[2], subformat_guid[3]);
+
+      if (subformat_guid[1] == 0x00100000 &&
+          subformat_guid[2] == 0xaa000080 && subformat_guid[3] == 0x719b3800) {
+        if (subformat_guid[0] == 0x00000001) {
+          GST_DEBUG ("PCM");
+          if (strf != NULL) {
+            gint ba = strf->blockalign;
+            gint wd = ba * 8 / strf->channels;
+            gint ws;
+            GstAudioFormat format;
+
+            /* in riff, the depth is stored in the size field but it just
+             * means that the _least_ significant bits are cleared. We can
+             * therefore just play the sample as if it had a depth == width */
+            ws = wd;
+
+            /* For reference, use this to get the actual depth:
+             * ws = strf->size;
+             * if (valid_bits_per_sample != 0)
+             *   ws = valid_bits_per_sample; */
+
+            format =
+                gst_audio_format_build_integer (wd != 8, G_LITTLE_ENDIAN, wd,
+                ws);
+
+            caps = gst_caps_new_simple ("audio/x-raw",
+                "format", G_TYPE_STRING, gst_audio_format_to_string (format),
+                "channels", G_TYPE_INT, strf->channels,
+                "rate", G_TYPE_INT, strf->rate, NULL);
+
+            /* If channel_mask == 0 and channels > 2 let's
+             * assume default layout as some wav files don't have the
+             * channel mask set. Don't set the layout for 1 or 2
+             * channels as it apparently breaks too many things currently. */
+            if (channel_mask == 0 && strf->channels > 2)
+              channel_mask =
+                  gst_riff_wavext_get_default_channel_mask (strf->channels);
+
+            if ((channel_mask != 0 || strf->channels > 2) &&
+                !gst_riff_wavext_add_channel_layout (caps, channel_mask)) {
+              GST_WARNING ("failed to add channel layout");
+              gst_caps_unref (caps);
+              caps = NULL;
+            }
+            rate_chan = FALSE;
+
+            if (codec_name) {
+              *codec_name = g_strdup_printf ("Uncompressed %d-bit PCM audio",
+                  strf->size);
+            }
+          }
+        } else if (subformat_guid[0] == 0x00000003) {
+          GST_DEBUG ("FLOAT");
+          if (strf != NULL) {
+            gint ba = strf->blockalign;
+            gint wd = ba * 8 / strf->channels;
+
+            caps = gst_caps_new_simple ("audio/x-raw",
+                "format", G_TYPE_STRING, wd == 32 ? "F32LE" : "F64LE",
+                "channels", G_TYPE_INT, strf->channels,
+                "rate", G_TYPE_INT, strf->rate, NULL);
+
+            /* If channel_mask == 0 and channels > 2 let's
+             * assume default layout as some wav files don't have the
+             * channel mask set. Don't set the layout for 1 or 2
+             * channels as it apparently breaks too many things currently. */
+            if (channel_mask == 0 && strf->channels > 2)
+              channel_mask =
+                  gst_riff_wavext_get_default_channel_mask (strf->channels);
+
+            if ((channel_mask != 0 || strf->channels > 2) &&
+                !gst_riff_wavext_add_channel_layout (caps, channel_mask)) {
+              GST_WARNING ("failed to add channel layout");
+              gst_caps_unref (caps);
+              caps = NULL;
+            }
+            rate_chan = FALSE;
+
+            if (codec_name) {
+              *codec_name =
+                  g_strdup_printf ("Uncompressed %d-bit IEEE float audio",
+                  strf->size);
+            }
+          }
+        } else if (subformat_guid[0] == 00000006) {
+          GST_DEBUG ("ALAW");
+          if (strf != NULL) {
+            if (strf->size != 8) {
+              GST_WARNING ("invalid depth (%d) of alaw audio, overwriting.",
+                  strf->size);
+              strf->size = 8;
+              strf->av_bps = 8;
+              strf->blockalign = strf->av_bps * strf->channels;
+            }
+            if (strf->av_bps == 0 || strf->blockalign == 0) {
+              GST_WARNING
+                  ("fixing av_bps (%d) and blockalign (%d) of alaw audio",
+                  strf->av_bps, strf->blockalign);
+              strf->av_bps = strf->size;
+              strf->blockalign = strf->av_bps * strf->channels;
+            }
+          }
+          rate_max = 48000;
+          caps = gst_caps_new_simple ("audio/x-alaw", NULL);
+
+          if (codec_name)
+            *codec_name = g_strdup ("A-law audio");
+        } else if (subformat_guid[0] == 0x00000007) {
+          GST_DEBUG ("MULAW");
+          if (strf != NULL) {
+            if (strf->size != 8) {
+              GST_WARNING ("invalid depth (%d) of mulaw audio, overwriting.",
+                  strf->size);
+              strf->size = 8;
+              strf->av_bps = 8;
+              strf->blockalign = strf->av_bps * strf->channels;
+            }
+            if (strf->av_bps == 0 || strf->blockalign == 0) {
+              GST_WARNING
+                  ("fixing av_bps (%d) and blockalign (%d) of mulaw audio",
+                  strf->av_bps, strf->blockalign);
+              strf->av_bps = strf->size;
+              strf->blockalign = strf->av_bps * strf->channels;
+            }
+          }
+          rate_max = 48000;
+          caps = gst_caps_new_simple ("audio/x-mulaw", NULL);
+          if (codec_name)
+            *codec_name = g_strdup ("Mu-law audio");
+        } else if (subformat_guid[0] == 0x00000092) {
+          GST_DEBUG ("FIXME: handle DOLBY AC3 SPDIF format");
+        }
+      } else if (subformat_guid[0] == 0x6ba47966 &&
+          subformat_guid[1] == 0x41783f83 &&
+          subformat_guid[2] == 0xf0006596 && subformat_guid[3] == 0xe59262bf) {
+        caps = gst_caps_new_simple ("application/x-ogg-avi", NULL);
+        if (codec_name)
+          *codec_name = g_strdup ("Ogg-AVI");
+      }
+
+      if (caps == NULL) {
+        GST_WARNING ("Unknown WAVE_FORMAT_EXTENSIBLE audio format");
+        return NULL;
+      }
+      break;
+    }
+      /* can anything decode these? pitfdll? */
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_AC8:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_AC10:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_AC16:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_AC20:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_METAVOICE:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_METASOUND:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_RT29HW:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_VR12:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_VR18:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_TQ40:
+    case GST_RIFF_WAVE_FORMAT_VOXWARE_TQ60:{
+      caps = gst_caps_new_simple ("audio/x-voxware",
+          "voxwaretype", G_TYPE_INT, (gint) codec_id, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Voxware");
+      break;
+    }
+    default:
+    unknown:
+      GST_WARNING ("Unknown audio tag 0x%04x", codec_id);
+      return NULL;
+  }
+
+  if (strf != NULL) {
+    if (rate_chan) {
+      if (strf->channels > channels_max)
+        goto too_many_channels;
+      if (strf->rate < rate_min || strf->rate > rate_max)
+        goto invalid_rate;
+
+      gst_caps_set_simple (caps,
+          "rate", G_TYPE_INT, strf->rate,
+          "channels", G_TYPE_INT, strf->channels, NULL);
+    }
+    if (block_align) {
+      gst_caps_set_simple (caps,
+          "block_align", G_TYPE_INT, strf->blockalign, NULL);
+    }
+  } else {
+    if (rate_chan) {
+      if (rate_min == rate_max)
+        gst_caps_set_simple (caps, "rate", G_TYPE_INT, rate_min, NULL);
+      else
+        gst_caps_set_simple (caps,
+            "rate", GST_TYPE_INT_RANGE, rate_min, rate_max, NULL);
+      if (channels_max == 1)
+        gst_caps_set_simple (caps, "channels", G_TYPE_INT, 1, NULL);
+      else
+        gst_caps_set_simple (caps,
+            "channels", GST_TYPE_INT_RANGE, 1, channels_max, NULL);
+    }
+    if (block_align) {
+      gst_caps_set_simple (caps,
+          "block_align", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+    }
+  }
+
+  /* extradata */
+  if (strf_data || strd_data) {
+    gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER,
+        strf_data ? strf_data : strd_data, NULL);
+  }
+
+  return caps;
+
+  /* ERROR */
+too_many_channels:
+  GST_WARNING
+      ("Stream claims to contain %u channels, but format only supports %d",
+      strf->channels, channels_max);
+  gst_caps_unref (caps);
+  return NULL;
+invalid_rate:
+  GST_WARNING
+      ("Stream with sample_rate %u, but format only supports %d .. %d",
+      strf->rate, rate_min, rate_max);
+  gst_caps_unref (caps);
+  return NULL;
+}
+
+GstCaps *
+gst_riff_create_iavs_caps (guint32 codec_fcc,
+    gst_riff_strh * strh, gst_riff_strf_iavs * strf,
+    GstBuffer * init_data, GstBuffer * extra_data, char **codec_name)
+{
+  GstCaps *caps = NULL;
+
+  switch (codec_fcc) {
+      /* is this correct? */
+    case GST_MAKE_FOURCC ('D', 'V', 'S', 'D'):
+    case GST_MAKE_FOURCC ('d', 'v', 's', 'd'):
+      caps = gst_caps_new_simple ("video/x-dv",
+          "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
+      if (codec_name)
+        *codec_name = g_strdup ("Generic DV");
+      break;
+
+    default:
+      GST_WARNING ("Unknown IAVS fourcc %" GST_FOURCC_FORMAT,
+          GST_FOURCC_ARGS (codec_fcc));
+      return NULL;
+  }
+
+  return caps;
+}
+
+/*
+ * Functions below are for template caps. All is variable.
+ */
+
+GstCaps *
+gst_riff_create_video_template_caps (void)
+{
+  static const guint32 tags[] = {
+    GST_MAKE_FOURCC ('3', 'I', 'V', '1'),
+    GST_MAKE_FOURCC ('A', 'S', 'V', '1'),
+    GST_MAKE_FOURCC ('A', 'S', 'V', '2'),
+    GST_MAKE_FOURCC ('C', 'L', 'J', 'R'),
+    GST_MAKE_FOURCC ('C', 'S', 'C', 'D'),
+    GST_MAKE_FOURCC ('C', 'Y', 'U', 'V'),
+    GST_MAKE_FOURCC ('D', 'I', 'B', ' '),
+    GST_MAKE_FOURCC ('D', 'I', 'V', '3'),
+    GST_MAKE_FOURCC ('D', 'I', 'V', 'X'),
+    GST_MAKE_FOURCC ('D', 'U', 'C', 'K'),
+    GST_MAKE_FOURCC ('D', 'V', 'S', 'D'),
+    GST_MAKE_FOURCC ('D', 'V', '5', '0'),
+    GST_MAKE_FOURCC ('D', 'X', '5', '0'),
+    GST_MAKE_FOURCC ('M', '4', 'C', 'C'),
+    GST_MAKE_FOURCC ('F', 'L', 'V', '1'),
+    GST_MAKE_FOURCC ('F', 'L', 'V', '4'),
+    GST_MAKE_FOURCC ('H', '2', '6', '3'),
+    GST_MAKE_FOURCC ('V', 'X', '1', 'K'),
+    GST_MAKE_FOURCC ('H', '2', '6', '4'),
+    GST_MAKE_FOURCC ('H', 'F', 'Y', 'U'),
+    GST_MAKE_FOURCC ('I', '2', '6', '3'),
+    GST_MAKE_FOURCC ('I', '4', '2', '0'),
+    GST_MAKE_FOURCC ('I', 'V', '3', '2'),
+    GST_MAKE_FOURCC ('I', 'V', '4', '1'),
+    GST_MAKE_FOURCC ('I', 'V', '5', '0'),
+    GST_MAKE_FOURCC ('L', '2', '6', '3'),
+    GST_MAKE_FOURCC ('L', '2', '6', '4'),
+    GST_MAKE_FOURCC ('M', '2', '6', '3'),
+    GST_MAKE_FOURCC ('M', '4', 'S', '2'),
+    GST_MAKE_FOURCC ('M', 'J', 'P', 'G'),
+    GST_MAKE_FOURCC ('M', 'P', '4', '2'),
+    GST_MAKE_FOURCC ('M', 'P', '4', '3'),
+    GST_MAKE_FOURCC ('M', 'P', 'E', 'G'),
+    GST_MAKE_FOURCC ('M', 'P', 'G', '2'),
+    GST_MAKE_FOURCC ('M', 'P', 'G', '4'),
+    GST_MAKE_FOURCC ('M', 'S', 'Z', 'H'),
+    GST_MAKE_FOURCC ('P', 'N', 'G', ' '),
+    GST_MAKE_FOURCC ('R', 'L', 'E', ' '),
+    GST_MAKE_FOURCC ('R', 'T', '2', '1'),
+    GST_MAKE_FOURCC ('S', 'P', '5', '3'),
+    GST_MAKE_FOURCC ('T', 'M', '2', '0'),
+    GST_MAKE_FOURCC ('T', 'S', 'C', 'C'),
+    GST_MAKE_FOURCC ('U', 'L', 'T', 'I'),
+    GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'),
+    GST_MAKE_FOURCC ('V', 'C', 'R', '1'),
+    GST_MAKE_FOURCC ('V', 'C', 'R', '2'),
+    GST_MAKE_FOURCC ('V', 'D', 'O', 'W'),
+    GST_MAKE_FOURCC ('V', 'I', 'V', 'O'),
+    GST_MAKE_FOURCC ('V', 'M', 'n', 'c'),
+    GST_MAKE_FOURCC ('V', 'P', '3', ' '),
+    GST_MAKE_FOURCC ('V', 'S', 'S', 'H'),
+    GST_MAKE_FOURCC ('W', 'M', 'V', '1'),
+    GST_MAKE_FOURCC ('W', 'M', 'V', '2'),
+    GST_MAKE_FOURCC ('W', 'M', 'V', '3'),
+    GST_MAKE_FOURCC ('X', 'V', 'I', 'D'),
+    GST_MAKE_FOURCC ('X', 'x', 'a', 'n'),
+    GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
+    GST_MAKE_FOURCC ('Y', 'V', 'U', '9'),
+    GST_MAKE_FOURCC ('Z', 'L', 'I', 'B'),
+    GST_MAKE_FOURCC ('c', 'v', 'i', 'd'),
+    GST_MAKE_FOURCC ('h', '2', '6', '4'),
+    GST_MAKE_FOURCC ('m', 's', 'v', 'c'),
+    GST_MAKE_FOURCC ('x', '2', '6', '3'),
+    GST_MAKE_FOURCC ('d', 'r', 'a', 'c'),
+    GST_MAKE_FOURCC ('F', 'F', 'V', '1'),
+    GST_MAKE_FOURCC ('K', 'M', 'V', 'C'),
+    GST_MAKE_FOURCC ('V', 'P', '5', '0'),
+    GST_MAKE_FOURCC ('V', 'P', '6', '0'),
+    GST_MAKE_FOURCC ('V', 'P', '6', 'F'),
+    GST_MAKE_FOURCC ('V', 'P', '7', '0'),
+    GST_MAKE_FOURCC ('V', 'P', '8', '0'),
+    GST_MAKE_FOURCC ('L', 'M', '2', '0'),
+    GST_MAKE_FOURCC ('R', 'P', 'Z', 'A'),
+    GST_MAKE_FOURCC ('T', 'H', 'E', 'O'),
+    GST_MAKE_FOURCC ('F', 'P', 'S', '1'),
+    GST_MAKE_FOURCC ('A', 'A', 'S', 'C'),
+    GST_MAKE_FOURCC ('Y', 'V', '1', '2'),
+    GST_MAKE_FOURCC ('L', 'O', 'C', 'O'),
+    GST_MAKE_FOURCC ('Z', 'M', 'B', 'V'),
+    /* FILL ME */
+  };
+  guint i;
+  GstCaps *caps, *one;
+
+  caps = gst_caps_new_empty ();
+  for (i = 0; i < G_N_ELEMENTS (tags); i++) {
+    one = gst_riff_create_video_caps (tags[i], NULL, NULL, NULL, NULL, NULL);
+    if (one)
+      gst_caps_append (caps, one);
+  }
+
+  return caps;
+}
+
+GstCaps *
+gst_riff_create_audio_template_caps (void)
+{
+  static const guint16 tags[] = {
+    GST_RIFF_WAVE_FORMAT_GSM610,
+    GST_RIFF_WAVE_FORMAT_MPEGL3,
+    GST_RIFF_WAVE_FORMAT_MPEGL12,
+    GST_RIFF_WAVE_FORMAT_PCM,
+    GST_RIFF_WAVE_FORMAT_VORBIS1,
+    GST_RIFF_WAVE_FORMAT_A52,
+    GST_RIFF_WAVE_FORMAT_DTS,
+    GST_RIFF_WAVE_FORMAT_AAC,
+    GST_RIFF_WAVE_FORMAT_ALAW,
+    GST_RIFF_WAVE_FORMAT_MULAW,
+    GST_RIFF_WAVE_FORMAT_WMS,
+    GST_RIFF_WAVE_FORMAT_ADPCM,
+    GST_RIFF_WAVE_FORMAT_DVI_ADPCM,
+    GST_RIFF_WAVE_FORMAT_DSP_TRUESPEECH,
+    GST_RIFF_WAVE_FORMAT_WMAV1,
+    GST_RIFF_WAVE_FORMAT_WMAV2,
+    GST_RIFF_WAVE_FORMAT_WMAV3,
+    GST_RIFF_WAVE_FORMAT_SONY_ATRAC3,
+    GST_RIFF_WAVE_FORMAT_IEEE_FLOAT,
+    GST_RIFF_WAVE_FORMAT_VOXWARE_METASOUND,
+    GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK4,
+    GST_RIFF_WAVE_FORMAT_ADPCM_IMA_DK3,
+    GST_RIFF_WAVE_FORMAT_ADPCM_IMA_WAV,
+    GST_RIFF_WAVE_FORMAT_AMR_NB,
+    GST_RIFF_WAVE_FORMAT_AMR_WB,
+    GST_RIFF_WAVE_FORMAT_SIREN,
+    /* FILL ME */
+  };
+  guint i;
+  GstCaps *caps, *one;
+
+  caps = gst_caps_new_empty ();
+  for (i = 0; i < G_N_ELEMENTS (tags); i++) {
+    one = gst_riff_create_audio_caps (tags[i], NULL, NULL, NULL, NULL, NULL);
+    if (one)
+      gst_caps_append (caps, one);
+  }
+  one = gst_caps_new_simple ("application/x-ogg-avi", NULL);
+  gst_caps_append (caps, one);
+
+  return caps;
+}
+
+GstCaps *
+gst_riff_create_iavs_template_caps (void)
+{
+  static const guint32 tags[] = {
+    GST_MAKE_FOURCC ('D', 'V', 'S', 'D')
+        /* FILL ME */
+  };
+  guint i;
+  GstCaps *caps, *one;
+
+  caps = gst_caps_new_empty ();
+  for (i = 0; i < G_N_ELEMENTS (tags); i++) {
+    one = gst_riff_create_iavs_caps (tags[i], NULL, NULL, NULL, NULL, NULL);
+    if (one)
+      gst_caps_append (caps, one);
+  }
+
+  return caps;
+}
diff --git a/gst-libs/gst/riff/riff-media.h b/gst-libs/gst/riff/riff-media.h
new file mode 100644
index 0000000..cc09fd8
--- /dev/null
+++ b/gst-libs/gst/riff/riff-media.h
@@ -0,0 +1,65 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff-media.h: RIFF-id to/from caps routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RIFF_MEDIA_H__
+#define __GST_RIFF_MEDIA_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+#include "riff-ids.h"
+
+G_BEGIN_DECLS
+
+/*
+ * Create caos. strh/strf, strf/strd_data and codec_name can be NULL.
+ */
+
+GstCaps * gst_riff_create_video_caps (guint32              codec_fcc,
+                                      gst_riff_strh      * strh,
+                                      gst_riff_strf_vids * strf,
+                                      GstBuffer          * strf_data,
+                                      GstBuffer          * strd_data,
+                                      char              ** codec_name);
+
+GstCaps * gst_riff_create_audio_caps (guint16              codec_id,
+                                      gst_riff_strh      * strh,
+                                      gst_riff_strf_auds * strf,
+                                      GstBuffer          * strf_data,
+                                      GstBuffer          * strd_data,
+                                      char              ** codec_name);
+
+GstCaps * gst_riff_create_iavs_caps  (guint32              codec_fcc,
+                                      gst_riff_strh      * strh,
+                                      gst_riff_strf_iavs * strf,
+                                      GstBuffer          * strf_data,
+                                      GstBuffer          * strd_data,
+                                      char              ** codec_name);
+/*
+ * Create template caps (includes all known types).
+ */
+
+GstCaps * gst_riff_create_video_template_caps (void);
+GstCaps * gst_riff_create_audio_template_caps (void);
+GstCaps * gst_riff_create_iavs_template_caps  (void);
+
+G_END_DECLS
+
+#endif /* __GST_RIFF_READ_H__ */
diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c
new file mode 100644
index 0000000..ab37e39
--- /dev/null
+++ b/gst-libs/gst/riff/riff-read.c
@@ -0,0 +1,788 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff-read.c: RIFF input file parsing
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gstutils.h>
+#include <gst/tag/tag.h>
+
+#include "riff-read.h"
+
+GST_DEBUG_CATEGORY_EXTERN (riff_debug);
+#define GST_CAT_DEFAULT riff_debug
+
+/**
+ * gst_riff_read_chunk:
+ * @element: caller element (used for debugging).
+ * @pad: pad to pull data from.
+ * @offset: offset to pull from, incremented by this function.
+ * @tag: fourcc of the chunk (returned by this function).
+ * @chunk_data: buffer (returned by this function).
+ *
+ * Reads a single chunk of data. Since 0.10.8 'JUNK' chunks
+ * are skipped automatically.
+ *
+ * Returns: flow status.
+ */
+
+GstFlowReturn
+gst_riff_read_chunk (GstElement * element,
+    GstPad * pad, guint64 * _offset, guint32 * tag, GstBuffer ** _chunk_data)
+{
+  GstBuffer *buf;
+  GstFlowReturn res;
+  guint8 *data;
+  guint size;
+  guint64 offset = *_offset;
+  gsize bsize;
+
+  g_return_val_if_fail (element != NULL, GST_FLOW_ERROR);
+  g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR);
+  g_return_val_if_fail (_offset != NULL, GST_FLOW_ERROR);
+  g_return_val_if_fail (tag != NULL, GST_FLOW_ERROR);
+  g_return_val_if_fail (_chunk_data != NULL, GST_FLOW_ERROR);
+
+skip_junk:
+  size = 8;
+  if ((res = gst_pad_pull_range (pad, offset, size, &buf)) != GST_FLOW_OK)
+    return res;
+  else if (gst_buffer_get_size (buf) < size)
+    goto too_small;
+
+  data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  *tag = GST_READ_UINT32_LE (data);
+  size = GST_READ_UINT32_LE (data + 4);
+  gst_buffer_unmap (buf, data, bsize);
+  gst_buffer_unref (buf);
+
+  GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
+      GST_FOURCC_ARGS (*tag), size);
+
+  /* skip 'JUNK' chunks */
+  if (*tag == GST_RIFF_TAG_JUNK || *tag == GST_RIFF_TAG_JUNQ) {
+    size = GST_ROUND_UP_2 (size);
+    *_offset += 8 + size;
+    offset += 8 + size;
+    GST_DEBUG_OBJECT (element, "skipping JUNK chunk");
+    goto skip_junk;
+  }
+
+  if ((res = gst_pad_pull_range (pad, offset + 8, size, &buf)) != GST_FLOW_OK)
+    return res;
+  else if (gst_buffer_get_size (buf) < size)
+    goto too_small;
+
+  *_chunk_data = buf;
+  *_offset += 8 + GST_ROUND_UP_2 (size);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+too_small:
+  {
+    /* short read, we return UNEXPECTED to mark the EOS case */
+    GST_DEBUG_OBJECT (element, "not enough data (available=%" G_GSIZE_FORMAT
+        ", needed=%u)", gst_buffer_get_size (buf), size);
+    gst_buffer_unref (buf);
+    return GST_FLOW_UNEXPECTED;
+  }
+}
+
+/**
+ * gst_riff_parse_chunk:
+ * @element: caller element (used for debugging).
+ * @buf: input buffer.
+ * @offset: offset in the buffer in the caller. Is incremented
+ *          by the read size by this function.
+ * @fourcc: fourcc (returned by this function0 of the chunk.
+ * @chunk_data: buffer (returned by the function) containing the
+ *              chunk data, which may be NULL if chunksize == 0
+ *
+ * Reads a single chunk.
+ *
+ * Returns: FALSE on error, TRUE otherwise
+ */
+gboolean
+gst_riff_parse_chunk (GstElement * element, GstBuffer * buf,
+    guint * _offset, guint32 * _fourcc, GstBuffer ** chunk_data)
+{
+  guint size, bufsize;
+  guint32 fourcc;
+  guint8 *data, *ptr;
+  gsize bsize;
+  guint offset = *_offset;
+
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (_offset != NULL, FALSE);
+  g_return_val_if_fail (_fourcc != NULL, FALSE);
+  g_return_val_if_fail (chunk_data != NULL, FALSE);
+
+  *chunk_data = NULL;
+  *_fourcc = 0;
+
+  bufsize = gst_buffer_get_size (buf);
+
+  if (bufsize == offset)
+    goto end_offset;
+
+  if (bufsize < offset + 8)
+    goto too_small;
+
+  /* read header */
+  data = ptr = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  ptr += offset;
+  fourcc = GST_READ_UINT32_LE (ptr);
+  size = GST_READ_UINT32_LE (ptr + 4);
+  gst_buffer_unmap (buf, data, bsize);
+
+  GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
+      GST_FOURCC_ARGS (fourcc), size);
+
+  /* be paranoid: size may be nonsensical value here, such as (guint) -1 */
+  if (G_UNLIKELY (size > G_MAXINT))
+    goto bogus_size;
+
+  if (bufsize < size + 8 + offset) {
+    GST_DEBUG_OBJECT (element,
+        "Needed chunk data (%d) is more than available (%d), shortcutting",
+        size, bufsize - 8 - offset);
+    size = bufsize - 8 - offset;
+  }
+
+  if (size)
+    *chunk_data =
+        gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset + 8, size);
+  else
+    *chunk_data = NULL;
+
+  *_fourcc = fourcc;
+  *_offset += 8 + GST_ROUND_UP_2 (size);
+
+  return TRUE;
+
+  /* ERRORS */
+end_offset:
+  {
+    GST_DEBUG_OBJECT (element, "End of chunk (offset %d)", offset);
+    return FALSE;
+  }
+too_small:
+  {
+    GST_DEBUG_OBJECT (element,
+        "Failed to parse chunk header (offset %d, %d available, %d needed)",
+        offset, bufsize, 8);
+    return FALSE;
+  }
+bogus_size:
+  {
+    GST_ERROR_OBJECT (element, "Broken file: bogus chunk size %u", size);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_file_header:
+ * @element: caller element (used for debugging/error).
+ * @buf: input buffer from which the file header will be parsed,
+ *       should be at least 12 bytes long.
+ * @doctype: a fourcc (returned by this function) to indicate the
+ *           type of document (according to the header).
+ *
+ * Reads the first few bytes from the provided buffer, checks
+ * if this stream is a RIFF stream, and determines document type.
+ * This function takes ownership of @buf so it should not be used anymore
+ * after calling this function.
+ *
+ * Returns: FALSE if this is not a RIFF stream (in which case the
+ * caller should error out; we already throw an error), or TRUE
+ * if it is.
+ */
+gboolean
+gst_riff_parse_file_header (GstElement * element,
+    GstBuffer * buf, guint32 * doctype)
+{
+  guint8 *data;
+  guint32 tag;
+  gsize size;
+
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (doctype != NULL, FALSE);
+
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  if (size < 12)
+    goto too_small;
+
+  tag = GST_READ_UINT32_LE (data);
+  if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0)
+    goto not_riff;
+
+  *doctype = GST_READ_UINT32_LE (data + 8);
+  gst_buffer_unmap (buf, data, size);
+
+  gst_buffer_unref (buf);
+
+  return TRUE;
+
+  /* ERRORS */
+too_small:
+  {
+    GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
+        ("Not enough data to parse RIFF header (%" G_GSIZE_FORMAT " available,"
+            " %d needed)", size, 12));
+    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+not_riff:
+  {
+    GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
+        ("Stream is no RIFF stream: %" GST_FOURCC_FORMAT,
+            GST_FOURCC_ARGS (tag)));
+    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_strh:
+ * @element: caller element (used for debugging/error).
+ * @buf: input data to be used for parsing, stripped from header.
+ * @strh: a pointer (returned by this function) to a filled-in
+ *        strh structure. Caller should free it.
+ *
+ * Parses a strh structure from input data. Takes ownership of @buf.
+ *
+ * Returns: TRUE if parsing succeeded, otherwise FALSE. The stream
+ *          should be skipped on error, but it is not fatal.
+ */
+
+gboolean
+gst_riff_parse_strh (GstElement * element,
+    GstBuffer * buf, gst_riff_strh ** _strh)
+{
+  gst_riff_strh *strh;
+  guint8 *data;
+  gsize size;
+
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (_strh != NULL, FALSE);
+
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  if (size < sizeof (gst_riff_strh))
+    goto too_small;
+
+  strh = g_memdup (data, size);
+  gst_buffer_unmap (buf, data, size);
+
+  gst_buffer_unref (buf);
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+  strh->type = GUINT32_FROM_LE (strh->type);
+  strh->fcc_handler = GUINT32_FROM_LE (strh->fcc_handler);
+  strh->flags = GUINT32_FROM_LE (strh->flags);
+  strh->priority = GUINT32_FROM_LE (strh->priority);
+  strh->init_frames = GUINT32_FROM_LE (strh->init_frames);
+  strh->scale = GUINT32_FROM_LE (strh->scale);
+  strh->rate = GUINT32_FROM_LE (strh->rate);
+  strh->start = GUINT32_FROM_LE (strh->start);
+  strh->length = GUINT32_FROM_LE (strh->length);
+  strh->bufsize = GUINT32_FROM_LE (strh->bufsize);
+  strh->quality = GUINT32_FROM_LE (strh->quality);
+  strh->samplesize = GUINT32_FROM_LE (strh->samplesize);
+#endif
+
+  /* avoid divisions by zero */
+  if (!strh->scale)
+    strh->scale = 1;
+  if (!strh->rate)
+    strh->rate = 1;
+
+  /* debug */
+  GST_INFO_OBJECT (element, "strh tag found:");
+  GST_INFO_OBJECT (element, " type        %" GST_FOURCC_FORMAT,
+      GST_FOURCC_ARGS (strh->type));
+  GST_INFO_OBJECT (element, " fcc_handler %" GST_FOURCC_FORMAT,
+      GST_FOURCC_ARGS (strh->fcc_handler));
+  GST_INFO_OBJECT (element, " flags       0x%08x", strh->flags);
+  GST_INFO_OBJECT (element, " priority    %d", strh->priority);
+  GST_INFO_OBJECT (element, " init_frames %d", strh->init_frames);
+  GST_INFO_OBJECT (element, " scale       %d", strh->scale);
+  GST_INFO_OBJECT (element, " rate        %d", strh->rate);
+  GST_INFO_OBJECT (element, " start       %d", strh->start);
+  GST_INFO_OBJECT (element, " length      %d", strh->length);
+  GST_INFO_OBJECT (element, " bufsize     %d", strh->bufsize);
+  GST_INFO_OBJECT (element, " quality     %d", strh->quality);
+  GST_INFO_OBJECT (element, " samplesize  %d", strh->samplesize);
+
+  *_strh = strh;
+
+  return TRUE;
+
+  /* ERRORS */
+too_small:
+  {
+    GST_ERROR_OBJECT (element,
+        "Too small strh (%" G_GSIZE_FORMAT " available, %d needed)",
+        size, (int) sizeof (gst_riff_strh));
+    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_strf_vids:
+ * @element: caller element (used for debugging/error).
+ * @buf: input data to be used for parsing, stripped from header.
+ * @strf: a pointer (returned by this function) to a filled-in
+ *        strf/vids structure. Caller should free it.
+ * @data: a pointer (returned by this function) to a buffer
+ *        containing extradata for this particular stream (e.g.
+ *        palette, codec initialization data).
+ *
+ * Parses a video stream´s strf structure plus optionally some
+ * extradata from input data. This function takes ownership of @buf.
+ *
+ * Returns: TRUE if parsing succeeded, otherwise FALSE. The stream
+ *          should be skipped on error, but it is not fatal.
+ */
+
+gboolean
+gst_riff_parse_strf_vids (GstElement * element,
+    GstBuffer * buf, gst_riff_strf_vids ** _strf, GstBuffer ** data)
+{
+  gst_riff_strf_vids *strf;
+  guint8 *bdata;
+  gsize size;
+
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (_strf != NULL, FALSE);
+  g_return_val_if_fail (data != NULL, FALSE);
+
+  bdata = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  if (size < sizeof (gst_riff_strf_vids))
+    goto too_small;
+
+  strf = g_memdup (bdata, size);
+  gst_buffer_unmap (buf, bdata, size);
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+  strf->size = GUINT32_FROM_LE (strf->size);
+  strf->width = GUINT32_FROM_LE (strf->width);
+  strf->height = GUINT32_FROM_LE (strf->height);
+  strf->planes = GUINT16_FROM_LE (strf->planes);
+  strf->bit_cnt = GUINT16_FROM_LE (strf->bit_cnt);
+  strf->compression = GUINT32_FROM_LE (strf->compression);
+  strf->image_size = GUINT32_FROM_LE (strf->image_size);
+  strf->xpels_meter = GUINT32_FROM_LE (strf->xpels_meter);
+  strf->ypels_meter = GUINT32_FROM_LE (strf->ypels_meter);
+  strf->num_colors = GUINT32_FROM_LE (strf->num_colors);
+  strf->imp_colors = GUINT32_FROM_LE (strf->imp_colors);
+#endif
+
+  /* size checking */
+  *data = NULL;
+  if (strf->size > size) {
+    GST_WARNING_OBJECT (element,
+        "strf_vids header gave %d bytes data, only %" G_GSIZE_FORMAT
+        " available", strf->size, size);
+    strf->size = size;
+  }
+  if (sizeof (gst_riff_strf_vids) < size) {
+    *data =
+        gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
+        sizeof (gst_riff_strf_vids), size - sizeof (gst_riff_strf_vids));
+  }
+  gst_buffer_unref (buf);
+
+  /* debug */
+  GST_INFO_OBJECT (element, "strf tag found in context vids:");
+  GST_INFO_OBJECT (element, " size        %d", strf->size);
+  GST_INFO_OBJECT (element, " width       %d", strf->width);
+  GST_INFO_OBJECT (element, " height      %d", strf->height);
+  GST_INFO_OBJECT (element, " planes      %d", strf->planes);
+  GST_INFO_OBJECT (element, " bit_cnt     %d", strf->bit_cnt);
+  GST_INFO_OBJECT (element, " compression %" GST_FOURCC_FORMAT,
+      GST_FOURCC_ARGS (strf->compression));
+  GST_INFO_OBJECT (element, " image_size  %d", strf->image_size);
+  GST_INFO_OBJECT (element, " xpels_meter %d", strf->xpels_meter);
+  GST_INFO_OBJECT (element, " ypels_meter %d", strf->ypels_meter);
+  GST_INFO_OBJECT (element, " num_colors  %d", strf->num_colors);
+  GST_INFO_OBJECT (element, " imp_colors  %d", strf->imp_colors);
+  if (*data)
+    GST_INFO_OBJECT (element, " %" G_GSIZE_FORMAT " bytes extradata",
+        gst_buffer_get_size (*data));
+
+  *_strf = strf;
+
+  return TRUE;
+
+  /* ERRORS */
+too_small:
+  {
+    GST_ERROR_OBJECT (element,
+        "Too small strf_vids (%" G_GSIZE_FORMAT " available, %d needed)",
+        size, (int) sizeof (gst_riff_strf_vids));
+    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_strf_auds:
+ * @element: caller element (used for debugging/error).
+ * @buf: input data to be used for parsing, stripped from header.
+ * @strf: a pointer (returned by this function) to a filled-in
+ *        strf/auds structure. Caller should free it.
+ * @data: a pointer (returned by this function) to a buffer
+ *        containing extradata for this particular stream (e.g.
+ *        codec initialization data).
+ *
+ * Parses an audio stream´s strf structure plus optionally some
+ * extradata from input data. This function takes ownership of @buf.
+ * use.
+ *
+ * Returns: TRUE if parsing succeeded, otherwise FALSE. The stream
+ *          should be skipped on error, but it is not fatal.
+ */
+gboolean
+gst_riff_parse_strf_auds (GstElement * element,
+    GstBuffer * buf, gst_riff_strf_auds ** _strf, GstBuffer ** data)
+{
+  gst_riff_strf_auds *strf;
+  gsize bsize;
+  guint8 *bdata;
+
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (_strf != NULL, FALSE);
+  g_return_val_if_fail (data != NULL, FALSE);
+
+  bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  if (bsize < sizeof (gst_riff_strf_auds))
+    goto too_small;
+
+  strf = g_memdup (bdata, bsize);
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+  strf->format = GUINT16_FROM_LE (strf->format);
+  strf->channels = GUINT16_FROM_LE (strf->channels);
+  strf->rate = GUINT32_FROM_LE (strf->rate);
+  strf->av_bps = GUINT32_FROM_LE (strf->av_bps);
+  strf->blockalign = GUINT16_FROM_LE (strf->blockalign);
+  strf->size = GUINT16_FROM_LE (strf->size);
+#endif
+
+  /* size checking */
+  *data = NULL;
+  if (bsize > sizeof (gst_riff_strf_auds) + 2) {
+    gint len;
+
+    len = GST_READ_UINT16_LE (&data[16]);
+    if (len + 2 + sizeof (gst_riff_strf_auds) > bsize) {
+      GST_WARNING_OBJECT (element,
+          "Extradata indicated %d bytes, but only %" G_GSSIZE_FORMAT
+          " available", len, bsize - 2 - sizeof (gst_riff_strf_auds));
+      len = bsize - 2 - sizeof (gst_riff_strf_auds);
+    }
+    if (len)
+      *data = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
+          sizeof (gst_riff_strf_auds) + 2, len);
+  }
+
+  /* debug */
+  GST_INFO_OBJECT (element, "strf tag found in context auds:");
+  GST_INFO_OBJECT (element, " format      %d", strf->format);
+  GST_INFO_OBJECT (element, " channels    %d", strf->channels);
+  GST_INFO_OBJECT (element, " rate        %d", strf->rate);
+  GST_INFO_OBJECT (element, " av_bps      %d", strf->av_bps);
+  GST_INFO_OBJECT (element, " blockalign  %d", strf->blockalign);
+  GST_INFO_OBJECT (element, " size        %d", strf->size);
+  if (*data)
+    GST_INFO_OBJECT (element, " %" G_GSIZE_FORMAT " bytes extradata",
+        gst_buffer_get_size (*data));
+
+  gst_buffer_unmap (buf, bdata, bsize);
+  gst_buffer_unref (buf);
+
+  *_strf = strf;
+
+  return TRUE;
+
+  /* ERROR */
+too_small:
+  {
+    GST_ERROR_OBJECT (element,
+        "Too small strf_auds (%" G_GSIZE_FORMAT " available"
+        ", %" G_GSSIZE_FORMAT " needed)", bsize, sizeof (gst_riff_strf_auds));
+    gst_buffer_unmap (buf, bdata, bsize);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_strf_iavs:
+ * @element: caller element (used for debugging/error).
+ * @buf: input data to be used for parsing, stripped from header.
+ * @strf: a pointer (returned by this function) to a filled-in
+ *        strf/iavs structure. Caller should free it.
+ * @data: a pointer (returned by this function) to a buffer
+ *        containing extradata for this particular stream (e.g.
+ *        codec initialization data).
+ *
+ * Parses a interleaved (also known as "complex")  stream´s strf
+ * structure plus optionally some extradata from input data. This
+ * function takes ownership of @buf.
+ *
+ * Returns: TRUE if parsing succeeded, otherwise FALSE.
+ */
+
+gboolean
+gst_riff_parse_strf_iavs (GstElement * element,
+    GstBuffer * buf, gst_riff_strf_iavs ** _strf, GstBuffer ** data)
+{
+  gst_riff_strf_iavs *strf;
+  gsize bsize;
+  guint8 *bdata;
+
+  g_return_val_if_fail (buf != NULL, FALSE);
+  g_return_val_if_fail (_strf != NULL, FALSE);
+  g_return_val_if_fail (data != NULL, FALSE);
+
+  bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  if (bsize < sizeof (gst_riff_strf_iavs))
+    goto too_small;
+
+  strf = g_memdup (bdata, bsize);
+  gst_buffer_unmap (buf, bdata, bsize);
+
+  gst_buffer_unref (buf);
+
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+  strf->DVAAuxSrc = GUINT32_FROM_LE (strf->DVAAuxSrc);
+  strf->DVAAuxCtl = GUINT32_FROM_LE (strf->DVAAuxCtl);
+  strf->DVAAuxSrc1 = GUINT32_FROM_LE (strf->DVAAuxSrc1);
+  strf->DVAAuxCtl1 = GUINT32_FROM_LE (strf->DVAAuxCtl1);
+  strf->DVVAuxSrc = GUINT32_FROM_LE (strf->DVVAuxSrc);
+  strf->DVVAuxCtl = GUINT32_FROM_LE (strf->DVVAuxCtl);
+  strf->DVReserved1 = GUINT32_FROM_LE (strf->DVReserved1);
+  strf->DVReserved2 = GUINT32_FROM_LE (strf->DVReserved2);
+#endif
+
+  /* debug */
+  GST_INFO_OBJECT (element, "strf tag found in context iavs:");
+  GST_INFO_OBJECT (element, " DVAAuxSrc   %08x", strf->DVAAuxSrc);
+  GST_INFO_OBJECT (element, " DVAAuxCtl   %08x", strf->DVAAuxCtl);
+  GST_INFO_OBJECT (element, " DVAAuxSrc1  %08x", strf->DVAAuxSrc1);
+  GST_INFO_OBJECT (element, " DVAAuxCtl1  %08x", strf->DVAAuxCtl1);
+  GST_INFO_OBJECT (element, " DVVAuxSrc   %08x", strf->DVVAuxSrc);
+  GST_INFO_OBJECT (element, " DVVAuxCtl   %08x", strf->DVVAuxCtl);
+  GST_INFO_OBJECT (element, " DVReserved1 %08x", strf->DVReserved1);
+  GST_INFO_OBJECT (element, " DVReserved2 %08x", strf->DVReserved2);
+
+  *_strf = strf;
+  *data = NULL;
+
+  return TRUE;
+
+  /* ERRORS */
+too_small:
+  {
+    GST_ERROR_OBJECT (element,
+        "Too small strf_iavs (%" G_GSIZE_FORMAT "available"
+        ", %" G_GSSIZE_FORMAT " needed)", bsize, sizeof (gst_riff_strf_iavs));
+    gst_buffer_unmap (buf, bdata, bsize);
+    gst_buffer_unref (buf);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_riff_parse_info:
+ * @element: caller element (used for debugging/error).
+ * @buf: input data to be used for parsing, stripped from header.
+ * @taglist: a pointer to a taglist (returned by this function)
+ *           containing information about this stream. May be
+ *           NULL if no supported tags were found.
+ *
+ * Parses stream metadata from input data.
+ */
+void
+gst_riff_parse_info (GstElement * element,
+    GstBuffer * buf, GstTagList ** _taglist)
+{
+  guint8 *data, *ptr;
+  gsize size, left;
+  guint tsize;
+  guint32 tag;
+  const gchar *type;
+  GstTagList *taglist;
+
+  g_return_if_fail (_taglist != NULL);
+
+  if (!buf) {
+    *_taglist = NULL;
+    return;
+  }
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+
+  taglist = gst_tag_list_new ();
+
+  ptr = data;
+  left = size;
+
+  while (left > 8) {
+    tag = GST_READ_UINT32_LE (ptr);
+    tsize = GST_READ_UINT32_LE (ptr + 4);
+    left -= 8;
+    ptr += 8;
+
+    GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u",
+        GST_FOURCC_ARGS (tag), tsize);
+
+    if (tsize > left) {
+      GST_WARNING_OBJECT (element,
+          "Tagsize %d is larger than available data %" G_GSIZE_FORMAT,
+          tsize, left);
+      tsize = left;
+    }
+
+    /* find out the type of metadata */
+    switch (tag) {
+      case GST_RIFF_INFO_IARL:
+        type = GST_TAG_LOCATION;
+        break;
+      case GST_RIFF_INFO_IART:
+        type = GST_TAG_ARTIST;
+        break;
+      case GST_RIFF_INFO_ICMS:
+        type = NULL;            /*"Commissioner"; */
+        break;
+      case GST_RIFF_INFO_ICMT:
+        type = GST_TAG_COMMENT;
+        break;
+      case GST_RIFF_INFO_ICOP:
+        type = GST_TAG_COPYRIGHT;
+        break;
+      case GST_RIFF_INFO_ICRD:
+        type = GST_TAG_DATE;
+        break;
+      case GST_RIFF_INFO_ICRP:
+        type = NULL;            /*"Cropped"; */
+        break;
+      case GST_RIFF_INFO_IDIM:
+        type = NULL;            /*"Dimensions"; */
+        break;
+      case GST_RIFF_INFO_IDPI:
+        type = NULL;            /*"Dots per Inch"; */
+        break;
+      case GST_RIFF_INFO_IENG:
+        type = NULL;            /*"Engineer"; */
+        break;
+      case GST_RIFF_INFO_IGNR:
+        type = GST_TAG_GENRE;
+        break;
+      case GST_RIFF_INFO_IKEY:
+        type = GST_TAG_KEYWORDS;
+        break;
+      case GST_RIFF_INFO_ILGT:
+        type = NULL;            /*"Lightness"; */
+        break;
+      case GST_RIFF_INFO_IMED:
+        type = NULL;            /*"Medium"; */
+        break;
+      case GST_RIFF_INFO_INAM:
+        type = GST_TAG_TITLE;
+        break;
+      case GST_RIFF_INFO_IPLT:
+        type = NULL;            /*"Palette"; */
+        break;
+      case GST_RIFF_INFO_IPRD:
+        type = NULL;            /*"Product"; */
+        break;
+      case GST_RIFF_INFO_ISBJ:
+        type = NULL;            /*"Subject"; */
+        break;
+      case GST_RIFF_INFO_ISFT:
+        type = GST_TAG_ENCODER;
+        break;
+      case GST_RIFF_INFO_ISHP:
+        type = NULL;            /*"Sharpness"; */
+        break;
+      case GST_RIFF_INFO_ISRC:
+        type = GST_TAG_ISRC;
+        break;
+      case GST_RIFF_INFO_ISRF:
+        type = NULL;            /*"Source Form"; */
+        break;
+      case GST_RIFF_INFO_ITCH:
+        type = NULL;            /*"Technician"; */
+        break;
+      default:
+        type = NULL;
+        GST_WARNING_OBJECT (element,
+            "Unknown INFO (metadata) tag entry %" GST_FOURCC_FORMAT,
+            GST_FOURCC_ARGS (tag));
+        break;
+    }
+
+    if (type != NULL && ptr[0] != '\0') {
+      static const gchar *env_vars[] = { "GST_AVI_TAG_ENCODING",
+        "GST_RIFF_TAG_ENCODING", "GST_TAG_ENCODING", NULL
+      };
+      gchar *val;
+
+      val = gst_tag_freeform_string_to_utf8 ((gchar *) ptr, tsize, env_vars);
+
+      if (val) {
+        gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, type, val, NULL);
+        g_free (val);
+      } else {
+        GST_WARNING_OBJECT (element, "could not extract %s tag", type);
+      }
+    }
+
+    if (tsize & 1) {
+      tsize++;
+      if (tsize > left)
+        tsize = left;
+    }
+
+    ptr += tsize;
+    left -= tsize;
+  }
+
+  if (!gst_tag_list_is_empty (taglist)) {
+    *_taglist = taglist;
+  } else {
+    *_taglist = NULL;
+    gst_tag_list_free (taglist);
+  }
+  gst_buffer_unmap (buf, data, size);
+
+  return;
+}
diff --git a/gst-libs/gst/riff/riff-read.h b/gst-libs/gst/riff/riff-read.h
new file mode 100644
index 0000000..cf07dda
--- /dev/null
+++ b/gst-libs/gst/riff/riff-read.h
@@ -0,0 +1,87 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff-read.h: function declarations for parsing a RIFF file
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RIFF_READ_H__
+#define __GST_RIFF_READ_H__
+
+#include <glib.h>
+#include <gst/gst.h>
+
+#include "riff-ids.h"
+
+G_BEGIN_DECLS
+
+/*
+ * Operate using pull_range().
+ */
+
+GstFlowReturn gst_riff_read_chunk   (GstElement * element,
+                                     GstPad     * pad,
+                                     guint64    * offset,
+                                     guint32    * tag,
+                                     GstBuffer ** chunk_data);
+
+/*
+ * These functions operate on provided data (the caller is
+ * supposed to strip the chunk headers). The buffer is
+ * provided by the caller, the strf/strh/data are filled in
+ * by the function.
+ */
+
+gboolean gst_riff_parse_chunk       (GstElement * element,
+                                     GstBuffer  * buf,
+                                     guint      * offset,
+                                     guint32    * fourcc,
+                                     GstBuffer ** chunk_data);
+
+gboolean gst_riff_parse_file_header (GstElement * element,
+                                     GstBuffer  * buf,
+                                     guint32    * doctype);
+
+gboolean gst_riff_parse_strh        (GstElement     * element,
+                                     GstBuffer      * buf,
+                                     gst_riff_strh ** strh);
+
+gboolean gst_riff_parse_strf_vids   (GstElement          * element,
+                                     GstBuffer           * buf,
+                                     gst_riff_strf_vids ** strf,
+                                     GstBuffer          ** data);
+gboolean gst_riff_parse_strf_auds   (GstElement          * element,
+                                     GstBuffer           * buf,
+                                     gst_riff_strf_auds ** strf,
+                                     GstBuffer          ** data);
+gboolean gst_riff_parse_strf_iavs   (GstElement          * element,
+                                     GstBuffer           * buf,
+                                     gst_riff_strf_iavs ** strf,
+                                     GstBuffer          ** data);
+
+void gst_riff_parse_info            (GstElement  * element,
+                                     GstBuffer   * buf,
+                                     GstTagList ** taglist);
+
+/*
+ * Init.
+ */
+void gst_riff_init                  (void);
+
+G_END_DECLS
+
+#endif /* __GST_RIFF_READ_H__ */
diff --git a/gst-libs/gst/riff/riff.c b/gst-libs/gst/riff/riff.c
new file mode 100644
index 0000000..d14b32a
--- /dev/null
+++ b/gst-libs/gst/riff/riff.c
@@ -0,0 +1,48 @@
+/* GStreamer RIFF I/O
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * riff.c: library initialisation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:gstriff
+ * @short_description: Riff fileformat utillity functions.
+ *
+ * A collection of functions to handle riff base files, such as avi, wav and
+ * asf.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include "riff-read.h"
+
+GST_DEBUG_CATEGORY (riff_debug);
+
+/**
+ * gst_riff_init:
+ *
+ * Initialize riff library.
+ */
+void
+gst_riff_init (void)
+{
+  GST_DEBUG_CATEGORY_INIT (riff_debug, "riff", 0, "RIFF I/O");
+}
diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am
new file mode 100644
index 0000000..79d8126
--- /dev/null
+++ b/gst-libs/gst/rtp/Makefile.am
@@ -0,0 +1,86 @@
+libgstrtpincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/rtp
+
+libgstrtpinclude_HEADERS = gstrtpbuffer.h \
+			   gstrtcpbuffer.h \
+			   gstrtppayloads.h \
+			gstbasertpaudiopayload.h \
+			gstbasertppayload.h \
+			gstbasertpdepayload.h
+
+lib_LTLIBRARIES = libgstrtp-@GST_MAJORMINOR@.la
+
+libgstrtp_@GST_MAJORMINOR@_la_SOURCES = gstrtpbuffer.c \
+			        gstrtcpbuffer.c \
+			        gstrtppayloads.c \
+			        gstbasertpaudiopayload.c \
+  				gstbasertppayload.c \
+  				gstbasertpdepayload.c
+
+libgstrtp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstrtp_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstrtp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstRtp-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/rtp/%',$(libgstrtpinclude_HEADERS))
+
+GstRtp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstRtp \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstrtp-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-rtp-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstrtp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstrtp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/rtp \
+	 -:HEADERS $(libgstrtp_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/rtp/Makefile.in b/gst-libs/gst/rtp/Makefile.in
new file mode 100644
index 0000000..8ac7881
--- /dev/null
+++ b/gst-libs/gst/rtp/Makefile.in
@@ -0,0 +1,946 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/rtp
+DIST_COMMON = README $(libgstrtpinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstrtp_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstrtp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo \
+	libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo \
+	libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo \
+	libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo \
+	libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo \
+	libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo
+libgstrtp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstrtp_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstrtp_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstrtp_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstrtpinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libgstrtpincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/rtp
+libgstrtpinclude_HEADERS = gstrtpbuffer.h \
+			   gstrtcpbuffer.h \
+			   gstrtppayloads.h \
+			gstbasertpaudiopayload.h \
+			gstbasertppayload.h \
+			gstbasertpdepayload.h
+
+lib_LTLIBRARIES = libgstrtp-@GST_MAJORMINOR@.la
+libgstrtp_@GST_MAJORMINOR@_la_SOURCES = gstrtpbuffer.c \
+			        gstrtcpbuffer.c \
+			        gstrtppayloads.c \
+			        gstbasertpaudiopayload.c \
+  				gstbasertppayload.c \
+  				gstbasertpdepayload.c
+
+libgstrtp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstrtp_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstrtp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtp-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/rtp/%',$(libgstrtpinclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstrtp-@GST_MAJORMINOR@.la: $(libgstrtp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstrtp_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstrtp_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstrtp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstrtp_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo: gstrtpbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo `test -f 'gstrtpbuffer.c' || echo '$(srcdir)/'`gstrtpbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtpbuffer.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtpbuffer.lo `test -f 'gstrtpbuffer.c' || echo '$(srcdir)/'`gstrtpbuffer.c
+
+libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo: gstrtcpbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo `test -f 'gstrtcpbuffer.c' || echo '$(srcdir)/'`gstrtcpbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtcpbuffer.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtcpbuffer.lo `test -f 'gstrtcpbuffer.c' || echo '$(srcdir)/'`gstrtcpbuffer.c
+
+libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo: gstrtppayloads.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo `test -f 'gstrtppayloads.c' || echo '$(srcdir)/'`gstrtppayloads.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtppayloads.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstrtppayloads.lo `test -f 'gstrtppayloads.c' || echo '$(srcdir)/'`gstrtppayloads.c
+
+libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo: gstbasertpaudiopayload.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo `test -f 'gstbasertpaudiopayload.c' || echo '$(srcdir)/'`gstbasertpaudiopayload.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbasertpaudiopayload.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertpaudiopayload.lo `test -f 'gstbasertpaudiopayload.c' || echo '$(srcdir)/'`gstbasertpaudiopayload.c
+
+libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo: gstbasertppayload.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo `test -f 'gstbasertppayload.c' || echo '$(srcdir)/'`gstbasertppayload.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbasertppayload.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertppayload.lo `test -f 'gstbasertppayload.c' || echo '$(srcdir)/'`gstbasertppayload.c
+
+libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo: gstbasertpdepayload.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.Tpo -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo `test -f 'gstbasertpdepayload.c' || echo '$(srcdir)/'`gstbasertpdepayload.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.Tpo $(DEPDIR)/libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstbasertpdepayload.c' object='libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_MAJORMINOR@_la-gstbasertpdepayload.lo `test -f 'gstbasertpdepayload.c' || echo '$(srcdir)/'`gstbasertpdepayload.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstrtpincludeHEADERS: $(libgstrtpinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstrtpincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstrtpincludedir)"
+	@list='$(libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstrtpincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstrtpincludedir)" || exit $$?; \
+	done
+
+uninstall-libgstrtpincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstrtpincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstrtpincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA install-libgstrtpincludeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstrtpincludeHEADERS uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgstrtpincludeHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES uninstall-libgstrtpincludeHEADERS \
+	uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstRtp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstRtp \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstrtp-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-rtp-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstrtp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstrtp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstrtp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/rtp \
+	 -:HEADERS $(libgstrtp_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/rtp/README b/gst-libs/gst/rtp/README
new file mode 100644
index 0000000..77253b7
--- /dev/null
+++ b/gst-libs/gst/rtp/README
@@ -0,0 +1,66 @@
+The RTP libraries
+---------------------
+
+  RTP Buffers
+  -----------
+  The real time protocol as described in RFC 3550 requires the use of special
+  packets containing an additional RTP header of at least 12 bytes. GStreamer
+  provides some helper functions for creating and parsing these RTP headers.
+  The result is a normal #GstBuffer with an additional RTP header.
+ 
+  RTP buffers are usually created with gst_rtp_buffer_new_allocate() or
+  gst_rtp_buffer_new_allocate_len(). These functions create buffers with a
+  preallocated space of memory. It will also ensure that enough memory
+  is allocated for the RTP header. The first function is used when the payload
+  size is known. gst_rtp_buffer_new_allocate_len() should be used when the size
+  of the whole RTP buffer (RTP header + payload) is known.
+ 
+  When receiving RTP buffers from a network, gst_rtp_buffer_new_take_data()
+  should be used when the user would like to parse that RTP packet. (TODO Ask
+  Wim what the real purpose of this function is as it seems to simply create a
+  duplicate GstBuffer with the same data as the previous one). The
+  function will create a new RTP buffer with the given data as the whole RTP
+  packet. Alternatively, gst_rtp_buffer_new_copy_data() can be used if the user
+  wishes to make a copy of the data before using it in the new RTP buffer. An
+  important function is gst_rtp_buffer_validate() that is used to verify that
+  the buffer a well formed RTP buffer.
+ 
+  It is now possible to use all the gst_rtp_buffer_get_*() or
+  gst_rtp_buffer_set_*() functions to read or write the different parts of the
+  RTP header such as the payload type, the sequence number or the RTP
+  timestamp. The use can also retreive a pointer to the actual RTP payload data
+  using the gst_rtp_buffer_get_payload() function.
+
+  RTP Base Payloader Class (GstBaseRTPPayload)
+  --------------------------------------------
+
+  All RTP payloader elements (audio or video) should derive from this class.
+
+  RTP Base Audio Payloader Class (GstBaseRTPAudioPayload)
+  -------------------------------------------------------
+
+  This base class can be tested through it's children classes. Here is an
+  example using the iLBC payloader (frame based).
+
+  For 20ms mode :
+
+  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
+  sizemax=114 datarate=1900 ! audio/x-iLBC, mode=20 !  rtpilbcpay
+  max-ptime="40000000" ! fakesink
+
+  For 30ms mode :
+
+  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
+  sizemax=150 datarate=1662 ! audio/x-iLBC, mode=30 !  rtpilbcpay
+  max-ptime="60000000" ! fakesink
+
+  Here is an example using the uLaw payloader (sample based).
+
+  GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
+  sizemax=150 datarate=8000 ! audio/x-mulaw ! rtppcmupay max-ptime="6000000" !
+  fakesink
+
+  RTP Base Depayloader Class (GstBaseRTPDepayload)
+  ------------------------------------------------
+
+  All RTP depayloader elements (audio or video) should derive from this class.
diff --git a/gst-libs/gst/rtp/gstbasertpaudiopayload.c b/gst-libs/gst/rtp/gstbasertpaudiopayload.c
new file mode 100644
index 0000000..d9a7c5b
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertpaudiopayload.c
@@ -0,0 +1,1002 @@
+/* GStreamer
+ * Copyright (C) <2006> Philippe Khalaf <philippe.kalaf@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstbasertpaudiopayload
+ * @short_description: Base class for audio RTP payloader
+ *
+ * Provides a base class for audio RTP payloaders for frame or sample based
+ * audio codecs (constant bitrate)
+ *
+ * This class derives from GstBaseRTPPayload. It can be used for payloading
+ * audio codecs. It will only work with constant bitrate codecs. It supports
+ * both frame based and sample based codecs. It takes care of packing up the
+ * audio data into RTP packets and filling up the headers accordingly. The
+ * payloading is done based on the maximum MTU (mtu) and the maximum time per
+ * packet (max-ptime). The general idea is to divide large data buffers into
+ * smaller RTP packets. The RTP packet size is the minimum of either the MTU,
+ * max-ptime (if set) or available data. The RTP packet size is always larger or
+ * equal to min-ptime (if set). If min-ptime is not set, any residual data is
+ * sent in a last RTP packet. In the case of frame based codecs, the resulting
+ * RTP packets always contain full frames.
+ *
+ * <refsect2>
+ * <title>Usage</title>
+ * <para>
+ * To use this base class, your child element needs to call either
+ * gst_base_rtp_audio_payload_set_frame_based() or
+ * gst_base_rtp_audio_payload_set_sample_based(). This is usually done in the
+ * element's _init() function. Then, the child element must call either
+ * gst_base_rtp_audio_payload_set_frame_options(),
+ * gst_base_rtp_audio_payload_set_sample_options() or
+ * gst_base_rtp_audio_payload_set_samplebits_options. Since
+ * GstBaseRTPAudioPayload derives from GstBaseRTPPayload, the child element
+ * must set any variables or call/override any functions required by that base
+ * class. The child element does not need to override any other functions
+ * specific to GstBaseRTPAudioPayload.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/base/gstadapter.h>
+
+#include "gstbasertpaudiopayload.h"
+
+GST_DEBUG_CATEGORY_STATIC (basertpaudiopayload_debug);
+#define GST_CAT_DEFAULT (basertpaudiopayload_debug)
+
+#define DEFAULT_BUFFER_LIST             FALSE
+
+enum
+{
+  PROP_0,
+  PROP_BUFFER_LIST,
+  PROP_LAST
+};
+
+/* function to convert bytes to a time */
+typedef GstClockTime (*GetBytesToTimeFunc) (GstBaseRTPAudioPayload * payload,
+    guint64 bytes);
+/* function to convert bytes to a RTP time */
+typedef guint32 (*GetBytesToRTPTimeFunc) (GstBaseRTPAudioPayload * payload,
+    guint64 bytes);
+/* function to convert time to bytes */
+typedef guint64 (*GetTimeToBytesFunc) (GstBaseRTPAudioPayload * payload,
+    GstClockTime time);
+
+struct _GstBaseRTPAudioPayloadPrivate
+{
+  GetBytesToTimeFunc bytes_to_time;
+  GetBytesToRTPTimeFunc bytes_to_rtptime;
+  GetTimeToBytesFunc time_to_bytes;
+
+  GstAdapter *adapter;
+  guint fragment_size;
+  GstClockTime frame_duration_ns;
+  gboolean discont;
+  guint64 offset;
+  GstClockTime last_timestamp;
+  guint32 last_rtptime;
+  guint align;
+
+  guint cached_mtu;
+  guint cached_min_ptime;
+  guint cached_max_ptime;
+  guint cached_ptime;
+  guint cached_min_length;
+  guint cached_max_length;
+  guint cached_ptime_multiple;
+  guint cached_align;
+
+  gboolean buffer_list;
+};
+
+
+#define GST_BASE_RTP_AUDIO_PAYLOAD_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_BASE_RTP_AUDIO_PAYLOAD, \
+                                GstBaseRTPAudioPayloadPrivate))
+
+static void gst_base_rtp_audio_payload_finalize (GObject * object);
+
+static void gst_base_rtp_audio_payload_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_base_rtp_audio_payload_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+/* bytes to time functions */
+static GstClockTime
+gst_base_rtp_audio_payload_frame_bytes_to_time (GstBaseRTPAudioPayload *
+    payload, guint64 bytes);
+static GstClockTime
+gst_base_rtp_audio_payload_sample_bytes_to_time (GstBaseRTPAudioPayload *
+    payload, guint64 bytes);
+
+/* bytes to RTP time functions */
+static guint32
+gst_base_rtp_audio_payload_frame_bytes_to_rtptime (GstBaseRTPAudioPayload *
+    payload, guint64 bytes);
+static guint32
+gst_base_rtp_audio_payload_sample_bytes_to_rtptime (GstBaseRTPAudioPayload *
+    payload, guint64 bytes);
+
+/* time to bytes functions */
+static guint64
+gst_base_rtp_audio_payload_frame_time_to_bytes (GstBaseRTPAudioPayload *
+    payload, GstClockTime time);
+static guint64
+gst_base_rtp_audio_payload_sample_time_to_bytes (GstBaseRTPAudioPayload *
+    payload, GstClockTime time);
+
+static GstFlowReturn gst_base_rtp_audio_payload_handle_buffer (GstBaseRTPPayload
+    * payload, GstBuffer * buffer);
+
+static GstStateChangeReturn gst_base_rtp_payload_audio_change_state (GstElement
+    * element, GstStateChange transition);
+
+static gboolean gst_base_rtp_payload_audio_handle_event (GstBaseRTPPayload
+    * payload, GstEvent * event);
+
+#define gst_base_rtp_audio_payload_parent_class parent_class
+G_DEFINE_TYPE (GstBaseRTPAudioPayload, gst_base_rtp_audio_payload,
+    GST_TYPE_BASE_RTP_PAYLOAD);
+
+static void
+gst_base_rtp_audio_payload_class_init (GstBaseRTPAudioPayloadClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseRTPPayloadClass *gstbasertppayload_class;
+
+  g_type_class_add_private (klass, sizeof (GstBaseRTPAudioPayloadPrivate));
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasertppayload_class = (GstBaseRTPPayloadClass *) klass;
+
+  gobject_class->finalize = gst_base_rtp_audio_payload_finalize;
+  gobject_class->set_property = gst_base_rtp_audio_payload_set_property;
+  gobject_class->get_property = gst_base_rtp_audio_payload_get_property;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BUFFER_LIST,
+      g_param_spec_boolean ("buffer-list", "Buffer List",
+          "Use Buffer Lists",
+          DEFAULT_BUFFER_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_base_rtp_payload_audio_change_state);
+
+  gstbasertppayload_class->handle_buffer =
+      GST_DEBUG_FUNCPTR (gst_base_rtp_audio_payload_handle_buffer);
+  gstbasertppayload_class->handle_event =
+      GST_DEBUG_FUNCPTR (gst_base_rtp_payload_audio_handle_event);
+
+  GST_DEBUG_CATEGORY_INIT (basertpaudiopayload_debug, "basertpaudiopayload", 0,
+      "base audio RTP payloader");
+}
+
+static void
+gst_base_rtp_audio_payload_init (GstBaseRTPAudioPayload * payload)
+{
+  payload->priv = GST_BASE_RTP_AUDIO_PAYLOAD_GET_PRIVATE (payload);
+
+  /* these need to be set by child object if frame based */
+  payload->frame_size = 0;
+  payload->frame_duration = 0;
+
+  /* these need to be set by child object if sample based */
+  payload->sample_size = 0;
+
+  payload->priv->adapter = gst_adapter_new ();
+
+  payload->priv->buffer_list = DEFAULT_BUFFER_LIST;
+}
+
+static void
+gst_base_rtp_audio_payload_finalize (GObject * object)
+{
+  GstBaseRTPAudioPayload *payload;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD (object);
+
+  g_object_unref (payload->priv->adapter);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_base_rtp_audio_payload_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstBaseRTPAudioPayload *payload;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_LIST:
+      payload->priv->buffer_list = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_base_rtp_audio_payload_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstBaseRTPAudioPayload *payload;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD (object);
+
+  switch (prop_id) {
+    case PROP_BUFFER_LIST:
+      g_value_set_boolean (value, payload->priv->buffer_list);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/**
+ * gst_base_rtp_audio_payload_set_frame_based:
+ * @basertpaudiopayload: a pointer to the element.
+ *
+ * Tells #GstBaseRTPAudioPayload that the child element is for a frame based
+ * audio codec
+ */
+void
+gst_base_rtp_audio_payload_set_frame_based (GstBaseRTPAudioPayload *
+    basertpaudiopayload)
+{
+  g_return_if_fail (basertpaudiopayload != NULL);
+  g_return_if_fail (basertpaudiopayload->priv->time_to_bytes == NULL);
+  g_return_if_fail (basertpaudiopayload->priv->bytes_to_time == NULL);
+  g_return_if_fail (basertpaudiopayload->priv->bytes_to_rtptime == NULL);
+
+  basertpaudiopayload->priv->bytes_to_time =
+      gst_base_rtp_audio_payload_frame_bytes_to_time;
+  basertpaudiopayload->priv->bytes_to_rtptime =
+      gst_base_rtp_audio_payload_frame_bytes_to_rtptime;
+  basertpaudiopayload->priv->time_to_bytes =
+      gst_base_rtp_audio_payload_frame_time_to_bytes;
+}
+
+/**
+ * gst_base_rtp_audio_payload_set_sample_based:
+ * @basertpaudiopayload: a pointer to the element.
+ *
+ * Tells #GstBaseRTPAudioPayload that the child element is for a sample based
+ * audio codec
+ */
+void
+gst_base_rtp_audio_payload_set_sample_based (GstBaseRTPAudioPayload *
+    basertpaudiopayload)
+{
+  g_return_if_fail (basertpaudiopayload != NULL);
+  g_return_if_fail (basertpaudiopayload->priv->time_to_bytes == NULL);
+  g_return_if_fail (basertpaudiopayload->priv->bytes_to_time == NULL);
+  g_return_if_fail (basertpaudiopayload->priv->bytes_to_rtptime == NULL);
+
+  basertpaudiopayload->priv->bytes_to_time =
+      gst_base_rtp_audio_payload_sample_bytes_to_time;
+  basertpaudiopayload->priv->bytes_to_rtptime =
+      gst_base_rtp_audio_payload_sample_bytes_to_rtptime;
+  basertpaudiopayload->priv->time_to_bytes =
+      gst_base_rtp_audio_payload_sample_time_to_bytes;
+}
+
+/**
+ * gst_base_rtp_audio_payload_set_frame_options:
+ * @basertpaudiopayload: a pointer to the element.
+ * @frame_duration: The duraction of an audio frame in milliseconds.
+ * @frame_size: The size of an audio frame in bytes.
+ *
+ * Sets the options for frame based audio codecs.
+ *
+ */
+void
+gst_base_rtp_audio_payload_set_frame_options (GstBaseRTPAudioPayload
+    * basertpaudiopayload, gint frame_duration, gint frame_size)
+{
+  GstBaseRTPAudioPayloadPrivate *priv;
+
+  g_return_if_fail (basertpaudiopayload != NULL);
+
+  priv = basertpaudiopayload->priv;
+
+  basertpaudiopayload->frame_duration = frame_duration;
+  priv->frame_duration_ns = frame_duration * GST_MSECOND;
+  basertpaudiopayload->frame_size = frame_size;
+  priv->align = frame_size;
+
+  gst_adapter_clear (priv->adapter);
+
+  GST_DEBUG_OBJECT (basertpaudiopayload, "frame set to %d ms and size %d",
+      frame_duration, frame_size);
+}
+
+/**
+ * gst_base_rtp_audio_payload_set_sample_options:
+ * @basertpaudiopayload: a pointer to the element.
+ * @sample_size: Size per sample in bytes.
+ *
+ * Sets the options for sample based audio codecs.
+ */
+void
+gst_base_rtp_audio_payload_set_sample_options (GstBaseRTPAudioPayload
+    * basertpaudiopayload, gint sample_size)
+{
+  g_return_if_fail (basertpaudiopayload != NULL);
+
+  /* sample_size is in bits internally */
+  gst_base_rtp_audio_payload_set_samplebits_options (basertpaudiopayload,
+      sample_size * 8);
+}
+
+/**
+ * gst_base_rtp_audio_payload_set_samplebits_options:
+ * @basertpaudiopayload: a pointer to the element.
+ * @sample_size: Size per sample in bits.
+ *
+ * Sets the options for sample based audio codecs.
+ *
+ * Since: 0.10.18
+ */
+void
+gst_base_rtp_audio_payload_set_samplebits_options (GstBaseRTPAudioPayload
+    * basertpaudiopayload, gint sample_size)
+{
+  guint fragment_size;
+  GstBaseRTPAudioPayloadPrivate *priv;
+
+  g_return_if_fail (basertpaudiopayload != NULL);
+
+  priv = basertpaudiopayload->priv;
+
+  basertpaudiopayload->sample_size = sample_size;
+
+  /* sample_size is in bits and is converted into multiple bytes */
+  fragment_size = sample_size;
+  while ((fragment_size % 8) != 0)
+    fragment_size += fragment_size;
+  priv->fragment_size = fragment_size / 8;
+  priv->align = priv->fragment_size;
+
+  gst_adapter_clear (priv->adapter);
+
+  GST_DEBUG_OBJECT (basertpaudiopayload,
+      "Samplebits set to sample size %d bits", sample_size);
+}
+
+static void
+gst_base_rtp_audio_payload_set_meta (GstBaseRTPAudioPayload * payload,
+    GstBuffer * buffer, guint payload_len, GstClockTime timestamp)
+{
+  GstBaseRTPPayload *basepayload;
+  GstBaseRTPAudioPayloadPrivate *priv;
+  GstRTPBuffer rtp;
+
+  basepayload = GST_BASE_RTP_PAYLOAD_CAST (payload);
+  priv = payload->priv;
+
+  /* set payload type */
+  gst_rtp_buffer_map (buffer, GST_MAP_WRITE, &rtp);
+  gst_rtp_buffer_set_payload_type (&rtp, basepayload->pt);
+  /* set marker bit for disconts */
+  if (priv->discont) {
+    GST_DEBUG_OBJECT (payload, "Setting marker and DISCONT");
+    gst_rtp_buffer_set_marker (&rtp, TRUE);
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+    priv->discont = FALSE;
+  }
+  gst_rtp_buffer_unmap (&rtp);
+
+  GST_BUFFER_TIMESTAMP (buffer) = timestamp;
+
+  /* get the offset in RTP time */
+  GST_BUFFER_OFFSET (buffer) = priv->bytes_to_rtptime (payload, priv->offset);
+
+  priv->offset += payload_len;
+
+  /* Set the duration from the size */
+  GST_BUFFER_DURATION (buffer) = priv->bytes_to_time (payload, payload_len);
+
+  /* remember the last rtptime/timestamp pair. We will use this to realign our
+   * RTP timestamp after a buffer discont */
+  priv->last_rtptime = GST_BUFFER_OFFSET (buffer);
+  priv->last_timestamp = timestamp;
+}
+
+/**
+ * gst_base_rtp_audio_payload_push:
+ * @baseaudiopayload: a #GstBaseRTPPayload
+ * @data: data to set as payload
+ * @payload_len: length of payload
+ * @timestamp: a #GstClockTime
+ *
+ * Create an RTP buffer and store @payload_len bytes of @data as the
+ * payload. Set the timestamp on the new buffer to @timestamp before pushing
+ * the buffer downstream.
+ *
+ * Returns: a #GstFlowReturn
+ *
+ * Since: 0.10.13
+ */
+GstFlowReturn
+gst_base_rtp_audio_payload_push (GstBaseRTPAudioPayload * baseaudiopayload,
+    const guint8 * data, guint payload_len, GstClockTime timestamp)
+{
+  GstBaseRTPPayload *basepayload;
+  GstBuffer *outbuf;
+  guint8 *payload;
+  GstFlowReturn ret;
+  GstRTPBuffer rtp;
+
+  basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
+
+  GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
+      payload_len, GST_TIME_ARGS (timestamp));
+
+  /* create buffer to hold the payload */
+  outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
+
+  /* copy payload */
+  gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
+  payload = gst_rtp_buffer_get_payload (&rtp);
+  memcpy (payload, data, payload_len);
+  gst_rtp_buffer_unmap (&rtp);
+
+  /* set metadata */
+  gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
+      timestamp);
+
+  ret = gst_basertppayload_push (basepayload, outbuf);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_base_rtp_audio_payload_push_buffer (GstBaseRTPAudioPayload *
+    baseaudiopayload, GstBuffer * buffer, GstClockTime timestamp)
+{
+  GstBaseRTPPayload *basepayload;
+  GstBaseRTPAudioPayloadPrivate *priv;
+  GstBuffer *outbuf;
+  guint8 *payload;
+  guint payload_len;
+  GstFlowReturn ret;
+
+  priv = baseaudiopayload->priv;
+  basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
+
+  payload_len = gst_buffer_get_size (buffer);
+
+  GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
+      payload_len, GST_TIME_ARGS (timestamp));
+
+  if (priv->buffer_list) {
+    /* create just the RTP header buffer */
+    outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
+  } else {
+    /* create buffer to hold the payload */
+    outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
+  }
+
+  /* set metadata */
+  gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
+      timestamp);
+
+  if (priv->buffer_list) {
+    GstBufferList *list;
+    guint i, len;
+
+    list = gst_buffer_list_new ();
+    len = gst_buffer_list_len (list);
+
+    for (i = 0; i < len; i++) {
+      /* FIXME */
+      g_warning ("bufferlist not implemented");
+      gst_buffer_list_add (list, outbuf);
+      gst_buffer_list_add (list, buffer);
+    }
+
+    GST_DEBUG_OBJECT (baseaudiopayload, "Pushing list %p", list);
+    ret = gst_basertppayload_push_list (basepayload, list);
+  } else {
+    GstRTPBuffer rtp;
+
+    /* copy payload */
+    gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
+    payload = gst_rtp_buffer_get_payload (&rtp);
+    gst_buffer_extract (buffer, 0, payload, payload_len);
+    gst_rtp_buffer_unmap (&rtp);
+
+    gst_buffer_unref (buffer);
+
+    GST_DEBUG_OBJECT (baseaudiopayload, "Pushing buffer %p", outbuf);
+    ret = gst_basertppayload_push (basepayload, outbuf);
+  }
+
+  return ret;
+}
+
+/**
+ * gst_base_rtp_audio_payload_flush:
+ * @baseaudiopayload: a #GstBaseRTPPayload
+ * @payload_len: length of payload
+ * @timestamp: a #GstClockTime
+ *
+ * Create an RTP buffer and store @payload_len bytes of the adapter as the
+ * payload. Set the timestamp on the new buffer to @timestamp before pushing
+ * the buffer downstream.
+ *
+ * If @payload_len is -1, all pending bytes will be flushed. If @timestamp is
+ * -1, the timestamp will be calculated automatically.
+ *
+ * Returns: a #GstFlowReturn
+ *
+ * Since: 0.10.25
+ */
+GstFlowReturn
+gst_base_rtp_audio_payload_flush (GstBaseRTPAudioPayload * baseaudiopayload,
+    guint payload_len, GstClockTime timestamp)
+{
+  GstBaseRTPPayload *basepayload;
+  GstBaseRTPAudioPayloadPrivate *priv;
+  GstBuffer *outbuf;
+  guint8 *payload;
+  GstFlowReturn ret;
+  GstAdapter *adapter;
+  guint64 distance;
+
+  priv = baseaudiopayload->priv;
+  adapter = priv->adapter;
+
+  basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
+
+  if (payload_len == -1)
+    payload_len = gst_adapter_available (adapter);
+
+  /* nothing to do, just return */
+  if (payload_len == 0)
+    return GST_FLOW_OK;
+
+  if (timestamp == -1) {
+    /* calculate the timestamp */
+    timestamp = gst_adapter_prev_timestamp (adapter, &distance);
+
+    GST_LOG_OBJECT (baseaudiopayload,
+        "last timestamp %" GST_TIME_FORMAT ", distance %" G_GUINT64_FORMAT,
+        GST_TIME_ARGS (timestamp), distance);
+
+    if (GST_CLOCK_TIME_IS_VALID (timestamp) && distance > 0) {
+      /* convert the number of bytes since the last timestamp to time and add to
+       * the last seen timestamp */
+      timestamp += priv->bytes_to_time (baseaudiopayload, distance);
+    }
+  }
+
+  GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
+      payload_len, GST_TIME_ARGS (timestamp));
+
+  if (priv->buffer_list && gst_adapter_available_fast (adapter) >= payload_len) {
+    GstBuffer *buffer;
+    /* we can quickly take a buffer out of the adapter without having to copy
+     * anything. */
+    buffer = gst_adapter_take_buffer (adapter, payload_len);
+
+    ret =
+        gst_base_rtp_audio_payload_push_buffer (baseaudiopayload, buffer,
+        timestamp);
+  } else {
+    GstRTPBuffer rtp;
+
+    /* create buffer to hold the payload */
+    outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
+
+    /* copy payload */
+    gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
+    payload = gst_rtp_buffer_get_payload (&rtp);
+    gst_adapter_copy (adapter, payload, 0, payload_len);
+    gst_adapter_flush (adapter, payload_len);
+    gst_rtp_buffer_unmap (&rtp);
+
+    /* set metadata */
+    gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
+        timestamp);
+
+    ret = gst_basertppayload_push (basepayload, outbuf);
+  }
+
+  return ret;
+}
+
+#define ALIGN_DOWN(val,len) ((val) - ((val) % (len)))
+
+/* calculate the min and max length of a packet. This depends on the configured
+ * mtu and min/max_ptime values. We cache those so that we don't have to redo
+ * all the calculations */
+static gboolean
+gst_base_rtp_audio_payload_get_lengths (GstBaseRTPPayload *
+    basepayload, guint * min_payload_len, guint * max_payload_len,
+    guint * align)
+{
+  GstBaseRTPAudioPayload *payload;
+  GstBaseRTPAudioPayloadPrivate *priv;
+  guint max_mtu, mtu;
+  guint maxptime_octets;
+  guint minptime_octets;
+  guint ptime_mult_octets;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD_CAST (basepayload);
+  priv = payload->priv;
+
+  if (priv->align == 0)
+    return FALSE;
+
+  mtu = GST_BASE_RTP_PAYLOAD_MTU (payload);
+
+  /* check cached values */
+  if (G_LIKELY (priv->cached_mtu == mtu
+          && priv->cached_ptime_multiple ==
+          basepayload->abidata.ABI.ptime_multiple
+          && priv->cached_ptime == basepayload->abidata.ABI.ptime
+          && priv->cached_max_ptime == basepayload->max_ptime
+          && priv->cached_min_ptime == basepayload->min_ptime)) {
+    /* if nothing changed, return cached values */
+    *min_payload_len = priv->cached_min_length;
+    *max_payload_len = priv->cached_max_length;
+    *align = priv->cached_align;
+    return TRUE;
+  }
+
+  ptime_mult_octets = priv->time_to_bytes (payload,
+      basepayload->abidata.ABI.ptime_multiple);
+  *align = ALIGN_DOWN (MAX (priv->align, ptime_mult_octets), priv->align);
+
+  /* ptime max */
+  if (basepayload->max_ptime != -1) {
+    maxptime_octets = priv->time_to_bytes (payload, basepayload->max_ptime);
+  } else {
+    maxptime_octets = G_MAXUINT;
+  }
+  /* MTU max */
+  max_mtu = gst_rtp_buffer_calc_payload_len (mtu, 0, 0);
+  /* round down to alignment */
+  max_mtu = ALIGN_DOWN (max_mtu, *align);
+
+  /* combine max ptime and max payload length */
+  *max_payload_len = MIN (max_mtu, maxptime_octets);
+
+  /* min number of bytes based on a given ptime */
+  minptime_octets = priv->time_to_bytes (payload, basepayload->min_ptime);
+  /* must be at least one frame size */
+  *min_payload_len = MAX (minptime_octets, *align);
+
+  if (*min_payload_len > *max_payload_len)
+    *min_payload_len = *max_payload_len;
+
+  /* If the ptime is specified in the caps, tried to adhere to it exactly */
+  if (basepayload->abidata.ABI.ptime) {
+    guint ptime_in_bytes = priv->time_to_bytes (payload,
+        basepayload->abidata.ABI.ptime);
+
+    /* clip to computed min and max lengths */
+    ptime_in_bytes = MAX (*min_payload_len, ptime_in_bytes);
+    ptime_in_bytes = MIN (*max_payload_len, ptime_in_bytes);
+
+    *min_payload_len = *max_payload_len = ptime_in_bytes;
+  }
+
+  /* cache values */
+  priv->cached_mtu = mtu;
+  priv->cached_ptime = basepayload->abidata.ABI.ptime;
+  priv->cached_min_ptime = basepayload->min_ptime;
+  priv->cached_max_ptime = basepayload->max_ptime;
+  priv->cached_ptime_multiple = basepayload->abidata.ABI.ptime_multiple;
+  priv->cached_min_length = *min_payload_len;
+  priv->cached_max_length = *max_payload_len;
+  priv->cached_align = *align;
+
+  return TRUE;
+}
+
+/* frame conversions functions */
+static GstClockTime
+gst_base_rtp_audio_payload_frame_bytes_to_time (GstBaseRTPAudioPayload *
+    payload, guint64 bytes)
+{
+  guint64 framecount;
+
+  framecount = bytes / payload->frame_size;
+  if (G_UNLIKELY (bytes % payload->frame_size))
+    framecount++;
+
+  return framecount * payload->priv->frame_duration_ns;
+}
+
+static guint32
+gst_base_rtp_audio_payload_frame_bytes_to_rtptime (GstBaseRTPAudioPayload *
+    payload, guint64 bytes)
+{
+  guint64 framecount;
+  guint64 time;
+
+  framecount = bytes / payload->frame_size;
+  if (G_UNLIKELY (bytes % payload->frame_size))
+    framecount++;
+
+  time = framecount * payload->priv->frame_duration_ns;
+
+  return gst_util_uint64_scale_int (time,
+      GST_BASE_RTP_PAYLOAD (payload)->clock_rate, GST_SECOND);
+}
+
+static guint64
+gst_base_rtp_audio_payload_frame_time_to_bytes (GstBaseRTPAudioPayload *
+    payload, GstClockTime time)
+{
+  return gst_util_uint64_scale (time, payload->frame_size,
+      payload->priv->frame_duration_ns);
+}
+
+/* sample conversion functions */
+static GstClockTime
+gst_base_rtp_audio_payload_sample_bytes_to_time (GstBaseRTPAudioPayload *
+    payload, guint64 bytes)
+{
+  guint64 rtptime;
+
+  /* avoid division when we can */
+  if (G_LIKELY (payload->sample_size != 8))
+    rtptime = gst_util_uint64_scale_int (bytes, 8, payload->sample_size);
+  else
+    rtptime = bytes;
+
+  return gst_util_uint64_scale_int (rtptime, GST_SECOND,
+      GST_BASE_RTP_PAYLOAD (payload)->clock_rate);
+}
+
+static guint32
+gst_base_rtp_audio_payload_sample_bytes_to_rtptime (GstBaseRTPAudioPayload *
+    payload, guint64 bytes)
+{
+  /* avoid division when we can */
+  if (G_LIKELY (payload->sample_size != 8))
+    return gst_util_uint64_scale_int (bytes, 8, payload->sample_size);
+  else
+    return bytes;
+}
+
+static guint64
+gst_base_rtp_audio_payload_sample_time_to_bytes (GstBaseRTPAudioPayload *
+    payload, guint64 time)
+{
+  guint64 samples;
+
+  samples = gst_util_uint64_scale_int (time,
+      GST_BASE_RTP_PAYLOAD (payload)->clock_rate, GST_SECOND);
+
+  /* avoid multiplication when we can */
+  if (G_LIKELY (payload->sample_size != 8))
+    return gst_util_uint64_scale_int (samples, payload->sample_size, 8);
+  else
+    return samples;
+}
+
+static GstFlowReturn
+gst_base_rtp_audio_payload_handle_buffer (GstBaseRTPPayload *
+    basepayload, GstBuffer * buffer)
+{
+  GstBaseRTPAudioPayload *payload;
+  GstBaseRTPAudioPayloadPrivate *priv;
+  guint payload_len;
+  GstFlowReturn ret;
+  guint available;
+  guint min_payload_len;
+  guint max_payload_len;
+  guint align;
+  guint size;
+  gboolean discont;
+  GstClockTime timestamp;
+
+  ret = GST_FLOW_OK;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD_CAST (basepayload);
+  priv = payload->priv;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  discont = GST_BUFFER_IS_DISCONT (buffer);
+  if (discont) {
+
+    GST_DEBUG_OBJECT (payload, "Got DISCONT");
+    /* flush everything out of the adapter, mark DISCONT */
+    ret = gst_base_rtp_audio_payload_flush (payload, -1, -1);
+    priv->discont = TRUE;
+
+    /* get the distance between the timestamp gap and produce the same gap in
+     * the RTP timestamps */
+    if (priv->last_timestamp != -1 && timestamp != -1) {
+      /* we had a last timestamp, compare it to the new timestamp and update the
+       * offset counter for RTP timestamps. The effect is that we will produce
+       * output buffers containing the same RTP timestamp gap as the gap
+       * between the GST timestamps. */
+      if (timestamp > priv->last_timestamp) {
+        GstClockTime diff;
+        guint64 bytes;
+        /* we're only going to apply a positive gap, otherwise we let the marker
+         * bit do its thing. simply convert to bytes and add the the current
+         * offset */
+        diff = timestamp - priv->last_timestamp;
+        bytes = priv->time_to_bytes (payload, diff);
+        priv->offset += bytes;
+
+        GST_DEBUG_OBJECT (payload,
+            "elapsed time %" GST_TIME_FORMAT ", bytes %" G_GUINT64_FORMAT
+            ", new offset %" G_GUINT64_FORMAT, GST_TIME_ARGS (diff), bytes,
+            priv->offset);
+      }
+    }
+  }
+
+  if (!gst_base_rtp_audio_payload_get_lengths (basepayload, &min_payload_len,
+          &max_payload_len, &align))
+    goto config_error;
+
+  GST_DEBUG_OBJECT (payload,
+      "Calculated min_payload_len %u and max_payload_len %u",
+      min_payload_len, max_payload_len);
+
+  size = gst_buffer_get_size (buffer);
+
+  /* shortcut, we don't need to use the adapter when the packet can be pushed
+   * through directly. */
+  available = gst_adapter_available (priv->adapter);
+
+  GST_DEBUG_OBJECT (payload, "got buffer size %u, available %u",
+      size, available);
+
+  if (available == 0 && (size >= min_payload_len && size <= max_payload_len) &&
+      (size % align == 0)) {
+    /* If buffer fits on an RTP packet, let's just push it through
+     * this will check against max_ptime and max_mtu */
+    GST_DEBUG_OBJECT (payload, "Fast packet push");
+    ret = gst_base_rtp_audio_payload_push_buffer (payload, buffer, timestamp);
+  } else {
+    /* push the buffer in the adapter */
+    gst_adapter_push (priv->adapter, buffer);
+    available += size;
+
+    GST_DEBUG_OBJECT (payload, "available now %u", available);
+
+    /* as long as we have full frames */
+    while (available >= min_payload_len) {
+      /* get multiple of alignment */
+      payload_len = MIN (max_payload_len, available);
+      payload_len = ALIGN_DOWN (payload_len, align);
+
+      /* and flush out the bytes from the adapter, automatically set the
+       * timestamp. */
+      ret = gst_base_rtp_audio_payload_flush (payload, payload_len, -1);
+
+      available -= payload_len;
+      GST_DEBUG_OBJECT (payload, "available after push %u", available);
+    }
+  }
+  return ret;
+
+  /* ERRORS */
+config_error:
+  {
+    GST_ELEMENT_ERROR (payload, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("subclass did not configure us properly"));
+    gst_buffer_unref (buffer);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstStateChangeReturn
+gst_base_rtp_payload_audio_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstBaseRTPAudioPayload *basertppayload;
+  GstStateChangeReturn ret;
+
+  basertppayload = GST_BASE_RTP_AUDIO_PAYLOAD (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      basertppayload->priv->cached_mtu = -1;
+      basertppayload->priv->last_rtptime = -1;
+      basertppayload->priv->last_timestamp = -1;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_adapter_clear (basertppayload->priv->adapter);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_base_rtp_payload_audio_handle_event (GstBaseRTPPayload * basep,
+    GstEvent * event)
+{
+  GstBaseRTPAudioPayload *payload;
+  gboolean res = FALSE;
+
+  payload = GST_BASE_RTP_AUDIO_PAYLOAD (basep);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      /* flush remaining bytes in the adapter */
+      gst_base_rtp_audio_payload_flush (payload, -1, -1);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      gst_adapter_clear (payload->priv->adapter);
+      break;
+    default:
+      break;
+  }
+
+  /* let parent handle the remainder of the event */
+  res = GST_BASE_RTP_PAYLOAD_CLASS (parent_class)->handle_event (basep, event);
+
+  return res;
+}
+
+/**
+ * gst_base_rtp_audio_payload_get_adapter:
+ * @basertpaudiopayload: a #GstBaseRTPAudioPayload
+ *
+ * Gets the internal adapter used by the depayloader.
+ *
+ * Returns: a #GstAdapter.
+ *
+ * Since: 0.10.13
+ */
+GstAdapter *
+gst_base_rtp_audio_payload_get_adapter (GstBaseRTPAudioPayload
+    * basertpaudiopayload)
+{
+  GstAdapter *adapter;
+
+  if ((adapter = basertpaudiopayload->priv->adapter))
+    g_object_ref (adapter);
+
+  return adapter;
+}
diff --git a/gst-libs/gst/rtp/gstbasertpaudiopayload.h b/gst-libs/gst/rtp/gstbasertpaudiopayload.h
new file mode 100644
index 0000000..13b9366
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertpaudiopayload.h
@@ -0,0 +1,105 @@
+/* GStreamer
+ * Copyright (C) <2006> Philippe Khalaf <philippe.kalaf@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_BASE_RTP_AUDIO_PAYLOAD_H__
+#define __GST_BASE_RTP_AUDIO_PAYLOAD_H__
+
+#include <gst/gst.h>
+#include <gst/rtp/gstbasertppayload.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstBaseRTPAudioPayload GstBaseRTPAudioPayload;
+typedef struct _GstBaseRTPAudioPayloadClass GstBaseRTPAudioPayloadClass;
+
+typedef struct _GstBaseRTPAudioPayloadPrivate GstBaseRTPAudioPayloadPrivate;
+
+#define GST_TYPE_BASE_RTP_AUDIO_PAYLOAD \
+  (gst_base_rtp_audio_payload_get_type())
+#define GST_BASE_RTP_AUDIO_PAYLOAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+  GST_TYPE_BASE_RTP_AUDIO_PAYLOAD,GstBaseRTPAudioPayload))
+#define GST_BASE_RTP_AUDIO_PAYLOAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), \
+  GST_TYPE_BASE_RTP_AUDIO_PAYLOAD,GstBaseRTPAudioPayloadClass))
+#define GST_IS_BASE_RTP_AUDIO_PAYLOAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_RTP_AUDIO_PAYLOAD))
+#define GST_IS_BASE_RTP_AUDIO_PAYLOAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_RTP_AUDIO_PAYLOAD))
+#define GST_BASE_RTP_AUDIO_PAYLOAD_CAST(obj) \
+  ((GstBaseRTPAudioPayload *) (obj))
+
+struct _GstBaseRTPAudioPayload
+{
+  GstBaseRTPPayload payload;
+
+  GstBaseRTPAudioPayloadPrivate *priv;
+
+  GstClockTime base_ts;
+  gint frame_size;
+  gint frame_duration;
+
+  gint sample_size;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstBaseRTPAudioPayloadClass:
+ * @parent_class: the parent class
+ *
+ * Base class for audio RTP payloader.
+ */
+struct _GstBaseRTPAudioPayloadClass
+{
+  GstBaseRTPPayloadClass parent_class;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_base_rtp_audio_payload_get_type (void);
+
+/* configure frame based */
+void            gst_base_rtp_audio_payload_set_frame_based        (GstBaseRTPAudioPayload *basertpaudiopayload);
+
+void            gst_base_rtp_audio_payload_set_frame_options      (GstBaseRTPAudioPayload *basertpaudiopayload,
+                                                                   gint frame_duration, gint frame_size);
+
+/* configure sample based */
+void            gst_base_rtp_audio_payload_set_sample_based       (GstBaseRTPAudioPayload *basertpaudiopayload);
+void            gst_base_rtp_audio_payload_set_sample_options     (GstBaseRTPAudioPayload *basertpaudiopayload,
+                                                                   gint sample_size);
+void            gst_base_rtp_audio_payload_set_samplebits_options (GstBaseRTPAudioPayload *basertpaudiopayload,
+                                                                   gint sample_size);
+
+/* get the internal adapter */
+GstAdapter*     gst_base_rtp_audio_payload_get_adapter            (GstBaseRTPAudioPayload *basertpaudiopayload);
+
+/* push and flushing data */
+GstFlowReturn   gst_base_rtp_audio_payload_push                   (GstBaseRTPAudioPayload * baseaudiopayload,
+                                                                   const guint8 * data, guint payload_len,
+                                                                   GstClockTime timestamp);
+GstFlowReturn   gst_base_rtp_audio_payload_flush                  (GstBaseRTPAudioPayload * baseaudiopayload,
+                                                                   guint payload_len, GstClockTime timestamp);
+
+G_END_DECLS
+
+#endif /* __GST_BASE_RTP_AUDIO_PAYLOAD_H__ */
diff --git a/gst-libs/gst/rtp/gstbasertpdepayload.c b/gst-libs/gst/rtp/gstbasertpdepayload.c
new file mode 100644
index 0000000..397e5c1
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertpdepayload.c
@@ -0,0 +1,769 @@
+/* GStreamer
+ * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
+ * Copyright (C) <2005> Nokia Corporation <kai.vehmanen@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstbasertpdepayload
+ * @short_description: Base class for RTP depayloader
+ *
+ * Provides a base class for RTP depayloaders
+ */
+
+#include "gstbasertpdepayload.h"
+
+GST_DEBUG_CATEGORY_STATIC (basertpdepayload_debug);
+#define GST_CAT_DEFAULT (basertpdepayload_debug)
+
+#define GST_BASE_RTP_DEPAYLOAD_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_BASE_RTP_DEPAYLOAD, GstBaseRTPDepayloadPrivate))
+
+struct _GstBaseRTPDepayloadPrivate
+{
+  GstClockTime npt_start;
+  GstClockTime npt_stop;
+  gdouble play_speed;
+  gdouble play_scale;
+
+  gboolean discont;
+  GstClockTime timestamp;
+  GstClockTime duration;
+
+  guint32 next_seqnum;
+
+  gboolean negotiated;
+};
+
+/* Filter signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+  PROP_LAST
+};
+
+static void gst_base_rtp_depayload_finalize (GObject * object);
+static void gst_base_rtp_depayload_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_base_rtp_depayload_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstFlowReturn gst_base_rtp_depayload_chain (GstPad * pad,
+    GstBuffer * in);
+static gboolean gst_base_rtp_depayload_handle_sink_event (GstPad * pad,
+    GstEvent * event);
+
+static GstStateChangeReturn gst_base_rtp_depayload_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void gst_base_rtp_depayload_set_gst_timestamp
+    (GstBaseRTPDepayload * filter, guint32 rtptime, GstBuffer * buf);
+static gboolean gst_base_rtp_depayload_packet_lost (GstBaseRTPDepayload *
+    filter, GstEvent * event);
+static gboolean gst_base_rtp_depayload_handle_event (GstBaseRTPDepayload *
+    filter, GstEvent * event);
+
+static GstElementClass *parent_class = NULL;
+static void gst_base_rtp_depayload_class_init (GstBaseRTPDepayloadClass *
+    klass);
+static void gst_base_rtp_depayload_init (GstBaseRTPDepayload * basertppayload,
+    GstBaseRTPDepayloadClass * klass);
+
+GType
+gst_base_rtp_depayload_get_type (void)
+{
+  static GType base_rtp_depayload_type = 0;
+
+  if (g_once_init_enter ((gsize *) & base_rtp_depayload_type)) {
+    static const GTypeInfo base_rtp_depayload_info = {
+      sizeof (GstBaseRTPDepayloadClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_base_rtp_depayload_class_init,
+      NULL,
+      NULL,
+      sizeof (GstBaseRTPDepayload),
+      0,
+      (GInstanceInitFunc) gst_base_rtp_depayload_init,
+    };
+
+    g_once_init_leave ((gsize *) & base_rtp_depayload_type,
+        g_type_register_static (GST_TYPE_ELEMENT, "GstBaseRTPDepayload",
+            &base_rtp_depayload_info, G_TYPE_FLAG_ABSTRACT));
+  }
+  return base_rtp_depayload_type;
+}
+
+static void
+gst_base_rtp_depayload_class_init (GstBaseRTPDepayloadClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gstelement_class = (GstElementClass *) klass;
+  parent_class = g_type_class_peek_parent (klass);
+
+  g_type_class_add_private (klass, sizeof (GstBaseRTPDepayloadPrivate));
+
+  gobject_class->finalize = gst_base_rtp_depayload_finalize;
+  gobject_class->set_property = gst_base_rtp_depayload_set_property;
+  gobject_class->get_property = gst_base_rtp_depayload_get_property;
+
+  gstelement_class->change_state = gst_base_rtp_depayload_change_state;
+
+  klass->set_gst_timestamp = gst_base_rtp_depayload_set_gst_timestamp;
+  klass->packet_lost = gst_base_rtp_depayload_packet_lost;
+  klass->handle_event = gst_base_rtp_depayload_handle_event;
+
+  GST_DEBUG_CATEGORY_INIT (basertpdepayload_debug, "basertpdepayload", 0,
+      "Base class for RTP Depayloaders");
+}
+
+static void
+gst_base_rtp_depayload_init (GstBaseRTPDepayload * filter,
+    GstBaseRTPDepayloadClass * klass)
+{
+  GstPadTemplate *pad_template;
+  GstBaseRTPDepayloadPrivate *priv;
+
+  priv = GST_BASE_RTP_DEPAYLOAD_GET_PRIVATE (filter);
+  filter->priv = priv;
+
+  GST_DEBUG_OBJECT (filter, "init");
+
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink");
+  g_return_if_fail (pad_template != NULL);
+  filter->sinkpad = gst_pad_new_from_template (pad_template, "sink");
+  gst_pad_set_chain_function (filter->sinkpad, gst_base_rtp_depayload_chain);
+  gst_pad_set_event_function (filter->sinkpad,
+      gst_base_rtp_depayload_handle_sink_event);
+  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
+
+  pad_template =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "src");
+  g_return_if_fail (pad_template != NULL);
+  filter->srcpad = gst_pad_new_from_template (pad_template, "src");
+  gst_pad_use_fixed_caps (filter->srcpad);
+  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
+
+  gst_segment_init (&filter->segment, GST_FORMAT_UNDEFINED);
+}
+
+static void
+gst_base_rtp_depayload_finalize (GObject * object)
+{
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_base_rtp_depayload_setcaps (GstBaseRTPDepayload * filter, GstCaps * caps)
+{
+  GstBaseRTPDepayloadClass *bclass;
+  GstBaseRTPDepayloadPrivate *priv;
+  gboolean res;
+  GstStructure *caps_struct;
+  const GValue *value;
+
+  priv = filter->priv;
+
+  bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter);
+
+  GST_DEBUG_OBJECT (filter, "Set caps");
+
+  caps_struct = gst_caps_get_structure (caps, 0);
+
+  /* get other values for newsegment */
+  value = gst_structure_get_value (caps_struct, "npt-start");
+  if (value && G_VALUE_HOLDS_UINT64 (value))
+    priv->npt_start = g_value_get_uint64 (value);
+  else
+    priv->npt_start = 0;
+  GST_DEBUG_OBJECT (filter, "NPT start %" G_GUINT64_FORMAT, priv->npt_start);
+
+  value = gst_structure_get_value (caps_struct, "npt-stop");
+  if (value && G_VALUE_HOLDS_UINT64 (value))
+    priv->npt_stop = g_value_get_uint64 (value);
+  else
+    priv->npt_stop = -1;
+
+  GST_DEBUG_OBJECT (filter, "NPT stop %" G_GUINT64_FORMAT, priv->npt_stop);
+
+  value = gst_structure_get_value (caps_struct, "play-speed");
+  if (value && G_VALUE_HOLDS_DOUBLE (value))
+    priv->play_speed = g_value_get_double (value);
+  else
+    priv->play_speed = 1.0;
+
+  value = gst_structure_get_value (caps_struct, "play-scale");
+  if (value && G_VALUE_HOLDS_DOUBLE (value))
+    priv->play_scale = g_value_get_double (value);
+  else
+    priv->play_scale = 1.0;
+
+  if (bclass->set_caps) {
+    res = bclass->set_caps (filter, caps);
+    if (!res) {
+      GST_WARNING_OBJECT (filter, "Subclass rejected caps %" GST_PTR_FORMAT,
+          caps);
+    }
+  } else {
+    res = TRUE;
+  }
+
+  priv->negotiated = res;
+
+  return res;
+}
+
+static GstFlowReturn
+gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in)
+{
+  GstBaseRTPDepayload *filter;
+  GstBaseRTPDepayloadPrivate *priv;
+  GstBaseRTPDepayloadClass *bclass;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBuffer *out_buf;
+  GstClockTime timestamp;
+  guint16 seqnum;
+  guint32 rtptime;
+  gboolean discont;
+  gint gap;
+  GstRTPBuffer rtp;
+
+  filter = GST_BASE_RTP_DEPAYLOAD (GST_OBJECT_PARENT (pad));
+  priv = filter->priv;
+
+  /* we must have a setcaps first */
+  if (G_UNLIKELY (!priv->negotiated))
+    goto not_negotiated;
+
+  /* we must validate, it's possible that this element is plugged right after a
+   * network receiver and we don't want to operate on invalid data */
+  if (G_UNLIKELY (!gst_rtp_buffer_validate (in)))
+    goto invalid_buffer;
+
+  if (!priv->discont)
+    priv->discont = GST_BUFFER_IS_DISCONT (in);
+
+  timestamp = GST_BUFFER_TIMESTAMP (in);
+  /* convert to running_time and save the timestamp, this is the timestamp
+   * we put on outgoing buffers. */
+  timestamp = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME,
+      timestamp);
+  priv->timestamp = timestamp;
+  priv->duration = GST_BUFFER_DURATION (in);
+
+  gst_rtp_buffer_map (in, GST_MAP_READ, &rtp);
+  seqnum = gst_rtp_buffer_get_seq (&rtp);
+  rtptime = gst_rtp_buffer_get_timestamp (&rtp);
+  gst_rtp_buffer_unmap (&rtp);
+
+  discont = FALSE;
+
+  GST_LOG_OBJECT (filter, "discont %d, seqnum %u, rtptime %u, timestamp %"
+      GST_TIME_FORMAT, priv->discont, seqnum, rtptime,
+      GST_TIME_ARGS (timestamp));
+
+  /* Check seqnum. This is a very simple check that makes sure that the seqnums
+   * are striclty increasing, dropping anything that is out of the ordinary. We
+   * can only do this when the next_seqnum is known. */
+  if (G_LIKELY (priv->next_seqnum != -1)) {
+    gap = gst_rtp_buffer_compare_seqnum (seqnum, priv->next_seqnum);
+
+    /* if we have no gap, all is fine */
+    if (G_UNLIKELY (gap != 0)) {
+      GST_LOG_OBJECT (filter, "got packet %u, expected %u, gap %d", seqnum,
+          priv->next_seqnum, gap);
+      if (gap < 0) {
+        /* seqnum > next_seqnum, we are missing some packets, this is always a
+         * DISCONT. */
+        GST_LOG_OBJECT (filter, "%d missing packets", gap);
+        discont = TRUE;
+      } else {
+        /* seqnum < next_seqnum, we have seen this packet before or the sender
+         * could be restarted. If the packet is not too old, we throw it away as
+         * a duplicate, otherwise we mark discont and continue. 100 misordered
+         * packets is a good threshold. See also RFC 4737. */
+        if (gap < 100)
+          goto dropping;
+
+        GST_LOG_OBJECT (filter,
+            "%d > 100, packet too old, sender likely restarted", gap);
+        discont = TRUE;
+      }
+    }
+  }
+  priv->next_seqnum = (seqnum + 1) & 0xffff;
+
+  if (G_UNLIKELY (discont && !priv->discont)) {
+    GST_LOG_OBJECT (filter, "mark DISCONT on input buffer");
+    /* we detected a seqnum discont but the buffer was not flagged with a discont,
+     * set the discont flag so that the subclass can throw away old data. */
+    priv->discont = TRUE;
+    in = gst_buffer_make_writable (in);
+    GST_BUFFER_FLAG_SET (in, GST_BUFFER_FLAG_DISCONT);
+  }
+
+  bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter);
+
+  if (G_UNLIKELY (bclass->process == NULL))
+    goto no_process;
+
+  /* let's send it out to processing */
+  out_buf = bclass->process (filter, in);
+  if (out_buf) {
+    /* we pass rtptime as backward compatibility, in reality, the incomming
+     * buffer timestamp is always applied to the outgoing packet. */
+    ret = gst_base_rtp_depayload_push_ts (filter, rtptime, out_buf);
+  }
+  gst_buffer_unref (in);
+
+  return ret;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    /* this is not fatal but should be filtered earlier */
+    GST_ELEMENT_ERROR (filter, CORE, NEGOTIATION,
+        ("No RTP format was negotiated."),
+        ("Input buffers need to have RTP caps set on them. This is usually "
+            "achieved by setting the 'caps' property of the upstream source "
+            "element (often udpsrc or appsrc), or by putting a capsfilter "
+            "element before the depayloader and setting the 'caps' property "
+            "on that. Also see http://cgit.freedesktop.org/gstreamer/"
+            "gst-plugins-good/tree/gst/rtp/README"));
+    gst_buffer_unref (in);
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+invalid_buffer:
+  {
+    /* this is not fatal but should be filtered earlier */
+    GST_ELEMENT_WARNING (filter, STREAM, DECODE, (NULL),
+        ("Received invalid RTP payload, dropping"));
+    gst_buffer_unref (in);
+    return GST_FLOW_OK;
+  }
+dropping:
+  {
+    GST_WARNING_OBJECT (filter, "%d <= 100, dropping old packet", gap);
+    gst_buffer_unref (in);
+    return GST_FLOW_OK;
+  }
+no_process:
+  {
+    /* this is not fatal but should be filtered earlier */
+    GST_ELEMENT_ERROR (filter, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("The subclass does not have a process method"));
+    gst_buffer_unref (in);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_base_rtp_depayload_handle_event (GstBaseRTPDepayload * filter,
+    GstEvent * event)
+{
+  gboolean res = TRUE;
+  gboolean forward = TRUE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&filter->segment, GST_FORMAT_UNDEFINED);
+      filter->need_newsegment = TRUE;
+      filter->priv->next_seqnum = -1;
+      break;
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+
+      res = gst_base_rtp_depayload_setcaps (filter, caps);
+      forward = FALSE;
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &filter->segment);
+      /* don't pass the event downstream, we generate our own segment including
+       * the NTP time and other things we receive in caps */
+      forward = FALSE;
+      break;
+    }
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+    {
+      GstBaseRTPDepayloadClass *bclass;
+
+      bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter);
+
+      if (gst_event_has_name (event, "GstRTPPacketLost")) {
+        /* we get this event from the jitterbuffer when it considers a packet as
+         * being lost. We send it to our packet_lost vmethod. The default
+         * implementation will make time progress by pushing out a NEWSEGMENT
+         * update event. Subclasses can override and to one of the following:
+         *  - Adjust timestamp/duration to something more accurate before
+         *    calling the parent (default) packet_lost method.
+         *  - do some more advanced error concealing on the already received
+         *    (fragmented) packets.
+         *  - ignore the packet lost.
+         */
+        if (bclass->packet_lost)
+          res = bclass->packet_lost (filter, event);
+        forward = FALSE;
+      }
+      break;
+    }
+    default:
+      break;
+  }
+
+  if (forward)
+    res = gst_pad_push_event (filter->srcpad, event);
+  else
+    gst_event_unref (event);
+
+  return res;
+}
+
+static gboolean
+gst_base_rtp_depayload_handle_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = FALSE;
+  GstBaseRTPDepayload *filter;
+  GstBaseRTPDepayloadClass *bclass;
+
+  filter = GST_BASE_RTP_DEPAYLOAD (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (filter == NULL)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter);
+  if (bclass->handle_event)
+    res = bclass->handle_event (filter, event);
+  else
+    gst_event_unref (event);
+
+  gst_object_unref (filter);
+  return res;
+}
+
+static GstEvent *
+create_segment_event (GstBaseRTPDepayload * filter, gboolean update,
+    GstClockTime position)
+{
+  GstEvent *event;
+  GstClockTime stop;
+  GstBaseRTPDepayloadPrivate *priv;
+  GstSegment segment;
+
+  priv = filter->priv;
+
+  if (priv->npt_stop != -1)
+    stop = priv->npt_stop - priv->npt_start;
+  else
+    stop = -1;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.rate = priv->play_speed;
+  segment.applied_rate = priv->play_scale;
+  segment.start = 0;
+  segment.stop = stop;
+  segment.time = priv->npt_start;
+  segment.position = position;
+
+  event = gst_event_new_segment (&segment);
+
+  return event;
+}
+
+typedef struct
+{
+  GstBaseRTPDepayload *depayload;
+  GstBaseRTPDepayloadClass *bclass;
+  gboolean do_ts;
+  gboolean rtptime;
+} HeaderData;
+
+static gboolean
+set_headers (GstBuffer ** buffer, guint idx, HeaderData * data)
+{
+  GstBaseRTPDepayload *depayload = data->depayload;
+
+  *buffer = gst_buffer_make_writable (*buffer);
+
+  /* set the timestamp if we must and can */
+  if (data->bclass->set_gst_timestamp && data->do_ts)
+    data->bclass->set_gst_timestamp (depayload, data->rtptime, *buffer);
+
+  if (G_UNLIKELY (depayload->priv->discont)) {
+    GST_LOG_OBJECT (depayload, "Marking DISCONT on output buffer");
+    GST_BUFFER_FLAG_SET (*buffer, GST_BUFFER_FLAG_DISCONT);
+    depayload->priv->discont = FALSE;
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_base_rtp_depayload_prepare_push (GstBaseRTPDepayload * filter,
+    gboolean do_ts, guint32 rtptime, gboolean is_list, gpointer obj)
+{
+  HeaderData data;
+
+  data.depayload = filter;
+  data.rtptime = rtptime;
+  data.do_ts = do_ts;
+  data.bclass = GST_BASE_RTP_DEPAYLOAD_GET_CLASS (filter);
+
+  if (is_list) {
+    GstBufferList **blist = obj;
+    gst_buffer_list_foreach (*blist, (GstBufferListFunc) set_headers, &data);
+  } else {
+    GstBuffer **buf = obj;
+    set_headers (buf, 0, &data);
+  }
+
+  /* if this is the first buffer send a NEWSEGMENT */
+  if (G_UNLIKELY (filter->need_newsegment)) {
+    GstEvent *event;
+
+    event = create_segment_event (filter, FALSE, 0);
+
+    gst_pad_push_event (filter->srcpad, event);
+
+    filter->need_newsegment = FALSE;
+    GST_DEBUG_OBJECT (filter, "Pushed newsegment event on this first buffer");
+  }
+
+  return GST_FLOW_OK;
+}
+
+/**
+ * gst_base_rtp_depayload_push_ts:
+ * @filter: a #GstBaseRTPDepayload
+ * @timestamp: an RTP timestamp to apply
+ * @out_buf: a #GstBuffer
+ *
+ * Push @out_buf to the peer of @filter. This function takes ownership of
+ * @out_buf.
+ *
+ * Unlike gst_base_rtp_depayload_push(), this function will by default apply
+ * the last incomming timestamp on the outgoing buffer when it didn't have a
+ * timestamp already. The set_get_timestamp vmethod can be overwritten to change
+ * this behaviour (and take, for example, @timestamp into account).
+ *
+ * Returns: a #GstFlowReturn.
+ */
+GstFlowReturn
+gst_base_rtp_depayload_push_ts (GstBaseRTPDepayload * filter, guint32 timestamp,
+    GstBuffer * out_buf)
+{
+  GstFlowReturn res;
+
+  res =
+      gst_base_rtp_depayload_prepare_push (filter, TRUE, timestamp, FALSE,
+      &out_buf);
+
+  if (G_LIKELY (res == GST_FLOW_OK))
+    res = gst_pad_push (filter->srcpad, out_buf);
+  else
+    gst_buffer_unref (out_buf);
+
+  return res;
+}
+
+/**
+ * gst_base_rtp_depayload_push:
+ * @filter: a #GstBaseRTPDepayload
+ * @out_buf: a #GstBuffer
+ *
+ * Push @out_buf to the peer of @filter. This function takes ownership of
+ * @out_buf.
+ *
+ * Unlike gst_base_rtp_depayload_push_ts(), this function will not apply
+ * any timestamp on the outgoing buffer. Subclasses should therefore timestamp
+ * outgoing buffers themselves.
+ *
+ * Returns: a #GstFlowReturn.
+ */
+GstFlowReturn
+gst_base_rtp_depayload_push (GstBaseRTPDepayload * filter, GstBuffer * out_buf)
+{
+  GstFlowReturn res;
+
+  res = gst_base_rtp_depayload_prepare_push (filter, FALSE, 0, FALSE, &out_buf);
+
+  if (G_LIKELY (res == GST_FLOW_OK))
+    res = gst_pad_push (filter->srcpad, out_buf);
+  else
+    gst_buffer_unref (out_buf);
+
+  return res;
+}
+
+/**
+ * gst_base_rtp_depayload_push_list:
+ * @filter: a #GstBaseRTPDepayload
+ * @out_list: a #GstBufferList
+ *
+ * Push @out_list to the peer of @filter. This function takes ownership of
+ * @out_list.
+ *
+ * Returns: a #GstFlowReturn.
+ *
+ * Since: 0.10.32
+ */
+GstFlowReturn
+gst_base_rtp_depayload_push_list (GstBaseRTPDepayload * filter,
+    GstBufferList * out_list)
+{
+  GstFlowReturn res;
+
+  res = gst_base_rtp_depayload_prepare_push (filter, TRUE, 0, TRUE, &out_list);
+
+  if (G_LIKELY (res == GST_FLOW_OK))
+    res = gst_pad_push_list (filter->srcpad, out_list);
+  else
+    gst_buffer_list_unref (out_list);
+
+  return res;
+}
+
+/* convert the PacketLost event form a jitterbuffer to a segment update.
+ * subclasses can override this.  */
+static gboolean
+gst_base_rtp_depayload_packet_lost (GstBaseRTPDepayload * filter,
+    GstEvent * event)
+{
+  GstClockTime timestamp, duration, position;
+  GstEvent *sevent;
+  const GstStructure *s;
+
+  s = gst_event_get_structure (event);
+
+  /* first start by parsing the timestamp and duration */
+  timestamp = -1;
+  duration = -1;
+
+  gst_structure_get_clock_time (s, "timestamp", &timestamp);
+  gst_structure_get_clock_time (s, "duration", &duration);
+
+  position = timestamp;
+  if (duration != -1)
+    position += duration;
+
+  /* update the current segment with the elapsed time */
+  sevent = create_segment_event (filter, TRUE, position);
+
+  return gst_pad_push_event (filter->srcpad, sevent);
+}
+
+static void
+gst_base_rtp_depayload_set_gst_timestamp (GstBaseRTPDepayload * filter,
+    guint32 rtptime, GstBuffer * buf)
+{
+  GstBaseRTPDepayloadPrivate *priv;
+  GstClockTime timestamp, duration;
+
+  priv = filter->priv;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+  duration = GST_BUFFER_DURATION (buf);
+
+  /* apply last incomming timestamp and duration to outgoing buffer if
+   * not otherwise set. */
+  if (!GST_CLOCK_TIME_IS_VALID (timestamp))
+    GST_BUFFER_TIMESTAMP (buf) = priv->timestamp;
+  if (!GST_CLOCK_TIME_IS_VALID (duration))
+    GST_BUFFER_DURATION (buf) = priv->duration;
+}
+
+static GstStateChangeReturn
+gst_base_rtp_depayload_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstBaseRTPDepayload *filter;
+  GstBaseRTPDepayloadPrivate *priv;
+  GstStateChangeReturn ret;
+
+  filter = GST_BASE_RTP_DEPAYLOAD (element);
+  priv = filter->priv;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      filter->need_newsegment = TRUE;
+      priv->npt_start = 0;
+      priv->npt_stop = -1;
+      priv->play_speed = 1.0;
+      priv->play_scale = 1.0;
+      priv->next_seqnum = -1;
+      priv->negotiated = FALSE;
+      priv->discont = FALSE;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+  return ret;
+}
+
+static void
+gst_base_rtp_depayload_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_base_rtp_depayload_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  switch (prop_id) {
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/gst-libs/gst/rtp/gstbasertpdepayload.h b/gst-libs/gst/rtp/gstbasertpdepayload.h
new file mode 100644
index 0000000..68f178d
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertpdepayload.h
@@ -0,0 +1,119 @@
+/* GStreamer
+ * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_BASE_RTP_DEPAYLOAD_H__
+#define __GST_BASE_RTP_DEPAYLOAD_H__
+
+#include <gst/gst.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_BASE_RTP_DEPAYLOAD (gst_base_rtp_depayload_get_type())
+#define GST_BASE_RTP_DEPAYLOAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_RTP_DEPAYLOAD,GstBaseRTPDepayload))
+#define GST_BASE_RTP_DEPAYLOAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_RTP_DEPAYLOAD,GstBaseRTPDepayloadClass))
+#define GST_BASE_RTP_DEPAYLOAD_GET_CLASS(obj) \
+        (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_BASE_RTP_DEPAYLOAD,GstBaseRTPDepayloadClass))
+#define GST_IS_BASE_RTP_DEPAYLOAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_RTP_DEPAYLOAD))
+#define GST_IS_BASE_RTP_DEPAYLOAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_RTP_DEPAYLOAD))
+
+#define GST_BASE_RTP_DEPAYLOAD_SINKPAD(depayload) (GST_BASE_RTP_DEPAYLOAD (depayload)->sinkpad)
+#define GST_BASE_RTP_DEPAYLOAD_SRCPAD(depayload)  (GST_BASE_RTP_DEPAYLOAD (depayload)->srcpad)
+
+typedef struct _GstBaseRTPDepayload      GstBaseRTPDepayload;
+typedef struct _GstBaseRTPDepayloadClass GstBaseRTPDepayloadClass;
+typedef struct _GstBaseRTPDepayloadPrivate GstBaseRTPDepayloadPrivate;
+
+struct _GstBaseRTPDepayload
+{
+  GstElement parent;
+
+  GstPad *sinkpad, *srcpad;
+
+  /* this attribute must be set by the child */
+  guint clock_rate;
+
+  GstSegment segment;
+  gboolean need_newsegment;
+
+  /*< private >*/
+  GstBaseRTPDepayloadPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING-1];
+};
+
+/**
+ * GstBaseRTPDepayloadClass:
+ * @parent_class: the parent class
+ * @set_caps: configure the depayloader
+ * @add_to_queue: (deprecated)
+ * @process: process incoming rtp packets
+ * @set_gst_timestamp: convert from RTP timestamp to GST timestamp
+ * @packet_lost: signal the depayloader about packet loss
+ * @handle_event: custom event handling
+ *
+ * Base class for audio RTP payloader.
+ */
+struct _GstBaseRTPDepayloadClass
+{
+  GstElementClass parent_class;
+
+  /* virtuals, inform the subclass of the caps. */
+  gboolean (*set_caps) (GstBaseRTPDepayload *filter, GstCaps *caps);
+
+  /* pure virtual function, child must use this to process incoming
+   * rtp packets. If the child returns a buffer without a valid timestamp,
+   * the timestamp of @in will be applied to the result buffer and the
+   * buffer will be pushed. If this function returns %NULL, nothing is
+   * pushed.  */
+  GstBuffer * (*process) (GstBaseRTPDepayload *base, GstBuffer *in);
+
+  /* non-pure function used to convert from RTP timestamp to GST timestamp
+   * this function is used by the child class before gst_pad_pushing */
+  void (*set_gst_timestamp) (GstBaseRTPDepayload *filter, guint32 timestamp, GstBuffer *buf);
+
+  /* non-pure function used to to signal the depayloader about packet loss. the
+   * timestamp and duration are the estimated values of the lost packet.
+   * The default implementation of this message pushes a segment update. */
+  gboolean (*packet_lost) (GstBaseRTPDepayload *filter, GstEvent *event);
+
+  /* the default implementation does the default actions for events but
+   * implementation can override.
+   * Since: 0.10.32   */
+  gboolean (*handle_event) (GstBaseRTPDepayload * filter, GstEvent * event);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING-2];
+};
+
+GType gst_base_rtp_depayload_get_type (void);
+
+GstFlowReturn   gst_base_rtp_depayload_push              (GstBaseRTPDepayload *filter, GstBuffer *out_buf);
+GstFlowReturn   gst_base_rtp_depayload_push_ts           (GstBaseRTPDepayload *filter,
+		                                          guint32 timestamp, GstBuffer *out_buf);
+GstFlowReturn   gst_base_rtp_depayload_push_list         (GstBaseRTPDepayload *filter, GstBufferList *out_list);
+
+
+G_END_DECLS
+
+#endif /* __GST_BASE_RTP_DEPAYLOAD_H__ */
diff --git a/gst-libs/gst/rtp/gstbasertppayload.c b/gst-libs/gst/rtp/gstbasertppayload.c
new file mode 100644
index 0000000..3bca852
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertppayload.c
@@ -0,0 +1,1073 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more
+ */
+
+/**
+ * SECTION:gstbasertppayload
+ * @short_description: Base class for RTP payloader
+ *
+ * Provides a base class for RTP payloaders
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/rtp/gstrtpbuffer.h>
+
+#include "gstbasertppayload.h"
+
+GST_DEBUG_CATEGORY_STATIC (basertppayload_debug);
+#define GST_CAT_DEFAULT (basertppayload_debug)
+
+#define GST_BASE_RTP_PAYLOAD_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_BASE_RTP_PAYLOAD, GstBaseRTPPayloadPrivate))
+
+struct _GstBaseRTPPayloadPrivate
+{
+  gboolean ts_offset_random;
+  gboolean seqnum_offset_random;
+  gboolean ssrc_random;
+  guint16 next_seqnum;
+  gboolean perfect_rtptime;
+  gint notified_first_timestamp;
+
+  guint64 base_offset;
+  gint64 base_rtime;
+
+  gint64 prop_max_ptime;
+  gint64 caps_max_ptime;
+};
+
+/* BaseRTPPayload signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+/* FIXME 0.11, a better default is the Ethernet MTU of
+ * 1500 - sizeof(headers) as pointed out by marcelm in IRC:
+ * So an Ethernet MTU of 1500, minus 60 for the max IP, minus 8 for UDP, gives
+ * 1432 bytes or so.  And that should be adjusted downward further for other
+ * encapsulations like PPPoE, so 1400 at most.
+ */
+#define DEFAULT_MTU                     1400
+#define DEFAULT_PT                      96
+#define DEFAULT_SSRC                    -1
+#define DEFAULT_TIMESTAMP_OFFSET        -1
+#define DEFAULT_SEQNUM_OFFSET           -1
+#define DEFAULT_MAX_PTIME               -1
+#define DEFAULT_MIN_PTIME               0
+#define DEFAULT_PERFECT_RTPTIME         TRUE
+#define DEFAULT_PTIME_MULTIPLE          0
+
+enum
+{
+  PROP_0,
+  PROP_MTU,
+  PROP_PT,
+  PROP_SSRC,
+  PROP_TIMESTAMP_OFFSET,
+  PROP_SEQNUM_OFFSET,
+  PROP_MAX_PTIME,
+  PROP_MIN_PTIME,
+  PROP_TIMESTAMP,
+  PROP_SEQNUM,
+  PROP_PERFECT_RTPTIME,
+  PROP_PTIME_MULTIPLE,
+  PROP_LAST
+};
+
+static void gst_basertppayload_class_init (GstBaseRTPPayloadClass * klass);
+static void gst_basertppayload_base_init (GstBaseRTPPayloadClass * klass);
+static void gst_basertppayload_init (GstBaseRTPPayload * basertppayload,
+    gpointer g_class);
+static void gst_basertppayload_finalize (GObject * object);
+
+static GstCaps *gst_basertppayload_sink_getcaps (GstPad * pad,
+    GstCaps * filter);
+static gboolean gst_basertppayload_event_default (GstBaseRTPPayload *
+    basertppayload, GstEvent * event);
+static gboolean gst_basertppayload_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_basertppayload_chain (GstPad * pad,
+    GstBuffer * buffer);
+
+static void gst_basertppayload_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_basertppayload_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GstStateChangeReturn gst_basertppayload_change_state (GstElement *
+    element, GstStateChange transition);
+
+static GstElementClass *parent_class = NULL;
+
+/* FIXME 0.11: API should be changed to gst_base_typ_payload_xyz */
+
+GType
+gst_basertppayload_get_type (void)
+{
+  static GType basertppayload_type = 0;
+
+  if (g_once_init_enter ((gsize *) & basertppayload_type)) {
+    static const GTypeInfo basertppayload_info = {
+      sizeof (GstBaseRTPPayloadClass),
+      (GBaseInitFunc) gst_basertppayload_base_init,
+      NULL,
+      (GClassInitFunc) gst_basertppayload_class_init,
+      NULL,
+      NULL,
+      sizeof (GstBaseRTPPayload),
+      0,
+      (GInstanceInitFunc) gst_basertppayload_init,
+    };
+
+    g_once_init_leave ((gsize *) & basertppayload_type,
+        g_type_register_static (GST_TYPE_ELEMENT, "GstBaseRTPPayload",
+            &basertppayload_info, G_TYPE_FLAG_ABSTRACT));
+  }
+  return basertppayload_type;
+}
+
+static void
+gst_basertppayload_base_init (GstBaseRTPPayloadClass * klass)
+{
+}
+
+static void
+gst_basertppayload_class_init (GstBaseRTPPayloadClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstBaseRTPPayloadPrivate));
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_basertppayload_finalize;
+
+  gobject_class->set_property = gst_basertppayload_set_property;
+  gobject_class->get_property = gst_basertppayload_get_property;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MTU,
+      g_param_spec_uint ("mtu", "MTU",
+          "Maximum size of one packet",
+          28, G_MAXUINT, DEFAULT_MTU,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PT,
+      g_param_spec_uint ("pt", "payload type",
+          "The payload type of the packets", 0, 0x80, DEFAULT_PT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SSRC,
+      g_param_spec_uint ("ssrc", "SSRC",
+          "The SSRC of the packets (default == random)", 0, G_MAXUINT32,
+          DEFAULT_SSRC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass),
+      PROP_TIMESTAMP_OFFSET, g_param_spec_uint ("timestamp-offset",
+          "Timestamp Offset",
+          "Offset to add to all outgoing timestamps (default = random)", 0,
+          G_MAXUINT32, DEFAULT_TIMESTAMP_OFFSET,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SEQNUM_OFFSET,
+      g_param_spec_int ("seqnum-offset", "Sequence number Offset",
+          "Offset to add to all outgoing seqnum (-1 = random)", -1, G_MAXUINT16,
+          DEFAULT_SEQNUM_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MAX_PTIME,
+      g_param_spec_int64 ("max-ptime", "Max packet time",
+          "Maximum duration of the packet data in ns (-1 = unlimited up to MTU)",
+          -1, G_MAXINT64, DEFAULT_MAX_PTIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseRTPAudioPayload:min-ptime:
+   *
+   * Minimum duration of the packet data in ns (can't go above MTU)
+   *
+   * Since: 0.10.13
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MIN_PTIME,
+      g_param_spec_int64 ("min-ptime", "Min packet time",
+          "Minimum duration of the packet data in ns (can't go above MTU)",
+          0, G_MAXINT64, DEFAULT_MIN_PTIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMESTAMP,
+      g_param_spec_uint ("timestamp", "Timestamp",
+          "The RTP timestamp of the last processed packet",
+          0, G_MAXUINT32, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SEQNUM,
+      g_param_spec_uint ("seqnum", "Sequence number",
+          "The RTP sequence number of the last processed packet",
+          0, G_MAXUINT16, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstBaseRTPAudioPayload:perfect-rtptime:
+   *
+   * Try to use the offset fields to generate perfect RTP timestamps. when this
+   * option is disabled, RTP timestamps are generated from the GStreamer
+   * timestamps, which could result in RTP timestamps that don't increment with
+   * the amount of data in the packet.
+   *
+   * Since: 0.10.25
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PERFECT_RTPTIME,
+      g_param_spec_boolean ("perfect-rtptime", "Perfect RTP Time",
+          "Generate perfect RTP timestamps when possible",
+          DEFAULT_PERFECT_RTPTIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseRTPAudioPayload:ptime-multiple:
+   *
+   * Force buffers to be multiples of this duration in ns (0 disables)
+   *
+   * Since: 0.10.29
+   **/
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PTIME_MULTIPLE,
+      g_param_spec_int64 ("ptime-multiple", "Packet time multiple",
+          "Force buffers to be multiples of this duration in ns (0 disables)",
+          0, G_MAXINT64, DEFAULT_PTIME_MULTIPLE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->change_state = gst_basertppayload_change_state;
+
+  klass->handle_event = gst_basertppayload_event_default;
+
+  GST_DEBUG_CATEGORY_INIT (basertppayload_debug, "basertppayload", 0,
+      "Base class for RTP Payloaders");
+}
+
+static void
+gst_basertppayload_init (GstBaseRTPPayload * basertppayload, gpointer g_class)
+{
+  GstPadTemplate *templ;
+  GstBaseRTPPayloadPrivate *priv;
+
+  basertppayload->priv = priv =
+      GST_BASE_RTP_PAYLOAD_GET_PRIVATE (basertppayload);
+
+  templ =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src");
+  g_return_if_fail (templ != NULL);
+
+  basertppayload->srcpad = gst_pad_new_from_template (templ, "src");
+  gst_element_add_pad (GST_ELEMENT (basertppayload), basertppayload->srcpad);
+
+  templ =
+      gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink");
+  g_return_if_fail (templ != NULL);
+
+  basertppayload->sinkpad = gst_pad_new_from_template (templ, "sink");
+  gst_pad_set_getcaps_function (basertppayload->sinkpad,
+      gst_basertppayload_sink_getcaps);
+  gst_pad_set_event_function (basertppayload->sinkpad,
+      gst_basertppayload_event);
+  gst_pad_set_chain_function (basertppayload->sinkpad,
+      gst_basertppayload_chain);
+  gst_element_add_pad (GST_ELEMENT (basertppayload), basertppayload->sinkpad);
+
+  basertppayload->seq_rand = g_rand_new_with_seed (g_random_int ());
+  basertppayload->ssrc_rand = g_rand_new_with_seed (g_random_int ());
+  basertppayload->ts_rand = g_rand_new_with_seed (g_random_int ());
+
+  basertppayload->mtu = DEFAULT_MTU;
+  basertppayload->pt = DEFAULT_PT;
+  basertppayload->seqnum_offset = DEFAULT_SEQNUM_OFFSET;
+  basertppayload->ssrc = DEFAULT_SSRC;
+  basertppayload->ts_offset = DEFAULT_TIMESTAMP_OFFSET;
+  priv->seqnum_offset_random = (basertppayload->seqnum_offset == -1);
+  priv->ts_offset_random = (basertppayload->ts_offset == -1);
+  priv->ssrc_random = (basertppayload->ssrc == -1);
+
+  basertppayload->max_ptime = DEFAULT_MAX_PTIME;
+  basertppayload->min_ptime = DEFAULT_MIN_PTIME;
+  basertppayload->priv->perfect_rtptime = DEFAULT_PERFECT_RTPTIME;
+  basertppayload->abidata.ABI.ptime_multiple = DEFAULT_PTIME_MULTIPLE;
+  basertppayload->priv->base_offset = GST_BUFFER_OFFSET_NONE;
+  basertppayload->priv->base_rtime = GST_BUFFER_OFFSET_NONE;
+
+  basertppayload->media = NULL;
+  basertppayload->encoding_name = NULL;
+
+  basertppayload->clock_rate = 0;
+
+  basertppayload->priv->caps_max_ptime = DEFAULT_MAX_PTIME;
+  basertppayload->priv->prop_max_ptime = DEFAULT_MAX_PTIME;
+}
+
+static void
+gst_basertppayload_finalize (GObject * object)
+{
+  GstBaseRTPPayload *basertppayload;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (object);
+
+  g_rand_free (basertppayload->seq_rand);
+  basertppayload->seq_rand = NULL;
+  g_rand_free (basertppayload->ssrc_rand);
+  basertppayload->ssrc_rand = NULL;
+  g_rand_free (basertppayload->ts_rand);
+  basertppayload->ts_rand = NULL;
+
+  g_free (basertppayload->media);
+  basertppayload->media = NULL;
+  g_free (basertppayload->encoding_name);
+  basertppayload->encoding_name = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstCaps *
+gst_basertppayload_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadClass *basertppayload_class;
+  GstCaps *caps = NULL;
+
+  GST_DEBUG_OBJECT (pad, "getting caps");
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (gst_pad_get_parent (pad));
+  basertppayload_class = GST_BASE_RTP_PAYLOAD_GET_CLASS (basertppayload);
+
+  if (basertppayload_class->get_caps)
+    caps = basertppayload_class->get_caps (basertppayload, pad, filter);
+
+  if (!caps) {
+    caps = GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad));
+    GST_DEBUG_OBJECT (pad,
+        "using pad template %p with caps %p %" GST_PTR_FORMAT,
+        GST_PAD_PAD_TEMPLATE (pad), caps, caps);
+
+    if (filter)
+      caps = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    else
+      caps = gst_caps_ref (caps);
+  }
+
+  gst_object_unref (basertppayload);
+
+  return caps;
+}
+
+static gboolean
+gst_basertppayload_event_default (GstBaseRTPPayload * basertppayload,
+    GstEvent * event)
+{
+  gboolean res = FALSE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      res = gst_pad_event_default (basertppayload->sinkpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      res = gst_pad_event_default (basertppayload->sinkpad, event);
+      gst_segment_init (&basertppayload->segment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_CAPS:
+    {
+      GstBaseRTPPayloadClass *basertppayload_class;
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      GST_DEBUG_OBJECT (basertppayload, "setting caps %" GST_PTR_FORMAT, caps);
+
+      basertppayload_class = GST_BASE_RTP_PAYLOAD_GET_CLASS (basertppayload);
+      if (basertppayload_class->set_caps)
+        res = basertppayload_class->set_caps (basertppayload, caps);
+
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      GstSegment *segment;
+
+      segment = &basertppayload->segment;
+      gst_event_copy_segment (event, segment);
+
+      basertppayload->priv->base_offset = GST_BUFFER_OFFSET_NONE;
+
+      GST_DEBUG_OBJECT (basertppayload,
+          "configured SEGMENT %" GST_SEGMENT_FORMAT, segment);
+      res = gst_pad_event_default (basertppayload->sinkpad, event);
+      break;
+    }
+    default:
+      res = gst_pad_event_default (basertppayload->sinkpad, event);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_basertppayload_event (GstPad * pad, GstEvent * event)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadClass *basertppayload_class;
+  gboolean res = FALSE;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (gst_pad_get_parent (pad));
+  if (G_UNLIKELY (basertppayload == NULL)) {
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+  basertppayload_class = GST_BASE_RTP_PAYLOAD_GET_CLASS (basertppayload);
+
+  if (basertppayload_class->handle_event)
+    res = basertppayload_class->handle_event (basertppayload, event);
+  else
+    gst_event_unref (event);
+
+  gst_object_unref (basertppayload);
+
+  return res;
+}
+
+
+static GstFlowReturn
+gst_basertppayload_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadClass *basertppayload_class;
+  GstFlowReturn ret;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (gst_pad_get_parent (pad));
+  basertppayload_class = GST_BASE_RTP_PAYLOAD_GET_CLASS (basertppayload);
+
+  if (!basertppayload_class->handle_buffer)
+    goto no_function;
+
+  ret = basertppayload_class->handle_buffer (basertppayload, buffer);
+
+  gst_object_unref (basertppayload);
+
+  return ret;
+
+  /* ERRORS */
+no_function:
+  {
+    GST_ELEMENT_ERROR (basertppayload, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("subclass did not implement handle_buffer function"));
+    gst_object_unref (basertppayload);
+    gst_buffer_unref (buffer);
+    return GST_FLOW_ERROR;
+  }
+}
+
+/**
+ * gst_basertppayload_set_options:
+ * @payload: a #GstBaseRTPPayload
+ * @media: the media type (typically "audio" or "video")
+ * @dynamic: if the payload type is dynamic
+ * @encoding_name: the encoding name
+ * @clock_rate: the clock rate of the media
+ *
+ * Set the rtp options of the payloader. These options will be set in the caps
+ * of the payloader. Subclasses must call this method before calling
+ * gst_basertppayload_push() or gst_basertppayload_set_outcaps().
+ */
+void
+gst_basertppayload_set_options (GstBaseRTPPayload * payload,
+    const gchar * media, gboolean dynamic, const gchar * encoding_name,
+    guint32 clock_rate)
+{
+  g_return_if_fail (payload != NULL);
+  g_return_if_fail (clock_rate != 0);
+
+  g_free (payload->media);
+  payload->media = g_strdup (media);
+  payload->dynamic = dynamic;
+  g_free (payload->encoding_name);
+  payload->encoding_name = g_strdup (encoding_name);
+  payload->clock_rate = clock_rate;
+}
+
+static gboolean
+copy_fixed (GQuark field_id, const GValue * value, GstStructure * dest)
+{
+  if (gst_value_is_fixed (value)) {
+    gst_structure_id_set_value (dest, field_id, value);
+  }
+  return TRUE;
+}
+
+static void
+update_max_ptime (GstBaseRTPPayload * basertppayload)
+{
+  if (basertppayload->priv->caps_max_ptime != -1 &&
+      basertppayload->priv->prop_max_ptime != -1)
+    basertppayload->max_ptime = MIN (basertppayload->priv->caps_max_ptime,
+        basertppayload->priv->prop_max_ptime);
+  else if (basertppayload->priv->caps_max_ptime != -1)
+    basertppayload->max_ptime = basertppayload->priv->caps_max_ptime;
+  else if (basertppayload->priv->prop_max_ptime != -1)
+    basertppayload->max_ptime = basertppayload->priv->prop_max_ptime;
+  else
+    basertppayload->max_ptime = DEFAULT_MAX_PTIME;
+}
+
+/**
+ * gst_basertppayload_set_outcaps:
+ * @payload: a #GstBaseRTPPayload
+ * @fieldname: the first field name or %NULL
+ * @...: field values
+ *
+ * Configure the output caps with the optional parameters.
+ *
+ * Variable arguments should be in the form field name, field type
+ * (as a GType), value(s).  The last variable argument should be NULL.
+ *
+ * Returns: %TRUE if the caps could be set.
+ */
+gboolean
+gst_basertppayload_set_outcaps (GstBaseRTPPayload * payload,
+    const gchar * fieldname, ...)
+{
+  GstCaps *srccaps, *peercaps;
+  gboolean res;
+
+  /* fill in the defaults, their properties cannot be negotiated. */
+  srccaps = gst_caps_new_simple ("application/x-rtp",
+      "media", G_TYPE_STRING, payload->media,
+      "clock-rate", G_TYPE_INT, payload->clock_rate,
+      "encoding-name", G_TYPE_STRING, payload->encoding_name, NULL);
+
+  GST_DEBUG_OBJECT (payload, "defaults: %" GST_PTR_FORMAT, srccaps);
+
+  if (fieldname) {
+    va_list varargs;
+
+    /* override with custom properties */
+    va_start (varargs, fieldname);
+    gst_caps_set_simple_valist (srccaps, fieldname, varargs);
+    va_end (varargs);
+
+    GST_DEBUG_OBJECT (payload, "custom added: %" GST_PTR_FORMAT, srccaps);
+  }
+
+  payload->priv->caps_max_ptime = DEFAULT_MAX_PTIME;
+  payload->abidata.ABI.ptime = 0;
+
+  /* the peer caps can override some of the defaults */
+  peercaps = gst_pad_peer_get_caps (payload->srcpad, srccaps);
+  if (peercaps == NULL) {
+    /* no peer caps, just add the other properties */
+    gst_caps_set_simple (srccaps,
+        "payload", G_TYPE_INT, GST_BASE_RTP_PAYLOAD_PT (payload),
+        "ssrc", G_TYPE_UINT, payload->current_ssrc,
+        "clock-base", G_TYPE_UINT, payload->ts_base,
+        "seqnum-base", G_TYPE_UINT, payload->seqnum_base, NULL);
+
+    GST_DEBUG_OBJECT (payload, "no peer caps: %" GST_PTR_FORMAT, srccaps);
+  } else {
+    GstCaps *temp;
+    GstStructure *s, *d;
+    const GValue *value;
+    gint pt;
+    guint max_ptime, ptime;
+
+    /* peer provides caps we can use to fixate. They are already intersected
+     * with our srccaps, just make them writable */
+    temp = gst_caps_make_writable (peercaps);
+    gst_caps_unref (srccaps);
+
+    if (gst_caps_is_empty (temp)) {
+      gst_caps_unref (temp);
+      return FALSE;
+    }
+
+    /* now fixate, start by taking the first caps */
+    gst_caps_truncate (temp);
+
+    /* get first structure */
+    s = gst_caps_get_structure (temp, 0);
+
+    if (gst_structure_get_uint (s, "maxptime", &max_ptime))
+      payload->priv->caps_max_ptime = max_ptime * GST_MSECOND;
+
+    if (gst_structure_get_uint (s, "ptime", &ptime))
+      payload->abidata.ABI.ptime = ptime * GST_MSECOND;
+
+    if (gst_structure_get_int (s, "payload", &pt)) {
+      /* use peer pt */
+      GST_BASE_RTP_PAYLOAD_PT (payload) = pt;
+      GST_LOG_OBJECT (payload, "using peer pt %d", pt);
+    } else {
+      if (gst_structure_has_field (s, "payload")) {
+        /* can only fixate if there is a field */
+        gst_structure_fixate_field_nearest_int (s, "payload",
+            GST_BASE_RTP_PAYLOAD_PT (payload));
+        gst_structure_get_int (s, "payload", &pt);
+        GST_LOG_OBJECT (payload, "using peer pt %d", pt);
+      } else {
+        /* no pt field, use the internal pt */
+        pt = GST_BASE_RTP_PAYLOAD_PT (payload);
+        gst_structure_set (s, "payload", G_TYPE_INT, pt, NULL);
+        GST_LOG_OBJECT (payload, "using internal pt %d", pt);
+      }
+    }
+
+    if (gst_structure_has_field_typed (s, "ssrc", G_TYPE_UINT)) {
+      value = gst_structure_get_value (s, "ssrc");
+      payload->current_ssrc = g_value_get_uint (value);
+      GST_LOG_OBJECT (payload, "using peer ssrc %08x", payload->current_ssrc);
+    } else {
+      /* FIXME, fixate_nearest_uint would be even better */
+      gst_structure_set (s, "ssrc", G_TYPE_UINT, payload->current_ssrc, NULL);
+      GST_LOG_OBJECT (payload, "using internal ssrc %08x",
+          payload->current_ssrc);
+    }
+
+    if (gst_structure_has_field_typed (s, "clock-base", G_TYPE_UINT)) {
+      value = gst_structure_get_value (s, "clock-base");
+      payload->ts_base = g_value_get_uint (value);
+      GST_LOG_OBJECT (payload, "using peer clock-base %u", payload->ts_base);
+    } else {
+      /* FIXME, fixate_nearest_uint would be even better */
+      gst_structure_set (s, "clock-base", G_TYPE_UINT, payload->ts_base, NULL);
+      GST_LOG_OBJECT (payload, "using internal clock-base %u",
+          payload->ts_base);
+    }
+    if (gst_structure_has_field_typed (s, "seqnum-base", G_TYPE_UINT)) {
+      value = gst_structure_get_value (s, "seqnum-base");
+      payload->seqnum_base = g_value_get_uint (value);
+      GST_LOG_OBJECT (payload, "using peer seqnum-base %u",
+          payload->seqnum_base);
+    } else {
+      /* FIXME, fixate_nearest_uint would be even better */
+      gst_structure_set (s, "seqnum-base", G_TYPE_UINT, payload->seqnum_base,
+          NULL);
+      GST_LOG_OBJECT (payload, "using internal seqnum-base %u",
+          payload->seqnum_base);
+    }
+
+    /* make the target caps by copying over all the fixed caps, removing the
+     * unfixed caps. */
+    srccaps = gst_caps_new_simple (gst_structure_get_name (s), NULL);
+    d = gst_caps_get_structure (srccaps, 0);
+
+    gst_structure_foreach (s, (GstStructureForeachFunc) copy_fixed, d);
+
+    gst_caps_unref (temp);
+
+    GST_DEBUG_OBJECT (payload, "with peer caps: %" GST_PTR_FORMAT, srccaps);
+  }
+
+  update_max_ptime (payload);
+
+  res = gst_pad_set_caps (GST_BASE_RTP_PAYLOAD_SRCPAD (payload), srccaps);
+  gst_caps_unref (srccaps);
+
+  return res;
+}
+
+/**
+ * gst_basertppayload_is_filled:
+ * @payload: a #GstBaseRTPPayload
+ * @size: the size of the packet
+ * @duration: the duration of the packet
+ *
+ * Check if the packet with @size and @duration would exceed the configured
+ * maximum size.
+ *
+ * Returns: %TRUE if the packet of @size and @duration would exceed the
+ * configured MTU or max_ptime.
+ */
+gboolean
+gst_basertppayload_is_filled (GstBaseRTPPayload * payload,
+    guint size, GstClockTime duration)
+{
+  if (size > payload->mtu)
+    return TRUE;
+
+  if (payload->max_ptime != -1 && duration >= payload->max_ptime)
+    return TRUE;
+
+  return FALSE;
+}
+
+typedef struct
+{
+  GstBaseRTPPayload *payload;
+  guint32 ssrc;
+  guint16 seqnum;
+  guint8 pt;
+  GstClockTime timestamp;
+  guint64 offset;
+  guint32 rtptime;
+} HeaderData;
+
+static gboolean
+find_timestamp (GstBuffer ** buffer, guint idx, HeaderData * data)
+{
+  data->timestamp = GST_BUFFER_TIMESTAMP (*buffer);
+  data->offset = GST_BUFFER_OFFSET (*buffer);
+
+  /* stop when we find a timestamp. We take whatever offset is associated with
+   * the timestamp (if any) to do perfect timestamps when we need to. */
+  if (data->timestamp != -1)
+    return FALSE;
+  else
+    return TRUE;
+}
+
+static gboolean
+set_headers (GstBuffer ** buffer, guint group, guint idx, HeaderData * data)
+{
+  GstRTPBuffer rtp;
+
+  gst_rtp_buffer_map (*buffer, GST_MAP_WRITE, &rtp);
+  gst_rtp_buffer_set_ssrc (&rtp, data->ssrc);
+  gst_rtp_buffer_set_payload_type (&rtp, data->pt);
+  gst_rtp_buffer_set_seq (&rtp, data->seqnum);
+  gst_rtp_buffer_set_timestamp (&rtp, data->rtptime);
+  gst_rtp_buffer_unmap (&rtp);
+
+  /* increment the seqnum for each buffer */
+  data->seqnum++;
+
+  return TRUE;
+}
+
+/* Updates the SSRC, payload type, seqnum and timestamp of the RTP buffer
+ * before the buffer is pushed. */
+static GstFlowReturn
+gst_basertppayload_prepare_push (GstBaseRTPPayload * payload,
+    gpointer obj, gboolean is_list)
+{
+  GstBaseRTPPayloadPrivate *priv;
+  HeaderData data;
+
+  if (payload->clock_rate == 0)
+    goto no_rate;
+
+  priv = payload->priv;
+
+  /* update first, so that the property is set to the last
+   * seqnum pushed */
+  payload->seqnum = priv->next_seqnum;
+
+  /* fill in the fields we want to set on all headers */
+  data.payload = payload;
+  data.seqnum = payload->seqnum;
+  data.ssrc = payload->current_ssrc;
+  data.pt = payload->pt;
+
+  /* find the first buffer with a timestamp */
+  if (is_list) {
+    data.timestamp = -1;
+    data.offset = GST_BUFFER_OFFSET_NONE;
+    gst_buffer_list_foreach (GST_BUFFER_LIST_CAST (obj),
+        (GstBufferListFunc) find_timestamp, &data);
+  } else {
+    data.timestamp = GST_BUFFER_TIMESTAMP (GST_BUFFER_CAST (obj));
+    data.offset = GST_BUFFER_OFFSET (GST_BUFFER_CAST (obj));
+  }
+
+  /* convert to RTP time */
+  if (priv->perfect_rtptime && data.offset != GST_BUFFER_OFFSET_NONE &&
+      priv->base_offset != GST_BUFFER_OFFSET_NONE) {
+    /* if we have an offset, use that for making an RTP timestamp */
+    data.rtptime = payload->ts_base + priv->base_rtime +
+        data.offset - priv->base_offset;
+    GST_LOG_OBJECT (payload,
+        "Using offset %" G_GUINT64_FORMAT " for RTP timestamp", data.offset);
+  } else if (GST_CLOCK_TIME_IS_VALID (data.timestamp)) {
+    gint64 rtime;
+
+    /* no offset, use the gstreamer timestamp */
+    rtime = gst_segment_to_running_time (&payload->segment, GST_FORMAT_TIME,
+        data.timestamp);
+
+    if (rtime == -1) {
+      GST_LOG_OBJECT (payload, "Clipped timestamp, using base RTP timestamp");
+      rtime = 0;
+    } else {
+      GST_LOG_OBJECT (payload,
+          "Using running_time %" GST_TIME_FORMAT " for RTP timestamp",
+          GST_TIME_ARGS (rtime));
+      rtime =
+          gst_util_uint64_scale_int (rtime, payload->clock_rate, GST_SECOND);
+      priv->base_offset = data.offset;
+      priv->base_rtime = rtime;
+    }
+    /* add running_time in clock-rate units to the base timestamp */
+    data.rtptime = payload->ts_base + rtime;
+  } else {
+    GST_LOG_OBJECT (payload,
+        "Using previous RTP timestamp %" G_GUINT32_FORMAT, payload->timestamp);
+    /* no timestamp to convert, take previous timestamp */
+    data.rtptime = payload->timestamp;
+  }
+
+  /* set ssrc, payload type, seq number, caps and rtptime */
+  if (is_list) {
+    gst_buffer_list_foreach (GST_BUFFER_LIST_CAST (obj),
+        (GstBufferListFunc) set_headers, &data);
+  } else {
+    GstBuffer *buf = GST_BUFFER_CAST (obj);
+    set_headers (&buf, 0, 0, &data);
+  }
+
+  priv->next_seqnum = data.seqnum;
+  payload->timestamp = data.rtptime;
+
+  GST_LOG_OBJECT (payload, "Preparing to push packet with size %"
+      G_GSIZE_FORMAT ", seq=%d, rtptime=%u, timestamp %" GST_TIME_FORMAT,
+      (is_list) ? -1 : gst_buffer_get_size (GST_BUFFER (obj)),
+      payload->seqnum, data.rtptime, GST_TIME_ARGS (data.timestamp));
+
+  if (g_atomic_int_compare_and_exchange (&payload->priv->
+          notified_first_timestamp, 1, 0)) {
+    g_object_notify (G_OBJECT (payload), "timestamp");
+    g_object_notify (G_OBJECT (payload), "seqnum");
+  }
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+no_rate:
+  {
+    GST_ELEMENT_ERROR (payload, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("subclass did not specify clock-rate"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/**
+ * gst_basertppayload_push_list:
+ * @payload: a #GstBaseRTPPayload
+ * @list: a #GstBufferList
+ *
+ * Push @list to the peer element of the payloader. The SSRC, payload type,
+ * seqnum and timestamp of the RTP buffer will be updated first.
+ *
+ * This function takes ownership of @list.
+ *
+ * Returns: a #GstFlowReturn.
+ *
+ * Since: 0.10.24
+ */
+GstFlowReturn
+gst_basertppayload_push_list (GstBaseRTPPayload * payload, GstBufferList * list)
+{
+  GstFlowReturn res;
+
+  res = gst_basertppayload_prepare_push (payload, list, TRUE);
+
+  if (G_LIKELY (res == GST_FLOW_OK))
+    res = gst_pad_push_list (payload->srcpad, list);
+  else
+    gst_buffer_list_unref (list);
+
+  return res;
+}
+
+/**
+ * gst_basertppayload_push:
+ * @payload: a #GstBaseRTPPayload
+ * @buffer: a #GstBuffer
+ *
+ * Push @buffer to the peer element of the payloader. The SSRC, payload type,
+ * seqnum and timestamp of the RTP buffer will be updated first.
+ *
+ * This function takes ownership of @buffer.
+ *
+ * Returns: a #GstFlowReturn.
+ */
+GstFlowReturn
+gst_basertppayload_push (GstBaseRTPPayload * payload, GstBuffer * buffer)
+{
+  GstFlowReturn res;
+
+  res = gst_basertppayload_prepare_push (payload, buffer, FALSE);
+
+  if (G_LIKELY (res == GST_FLOW_OK))
+    res = gst_pad_push (payload->srcpad, buffer);
+  else
+    gst_buffer_unref (buffer);
+
+  return res;
+}
+
+static void
+gst_basertppayload_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadPrivate *priv;
+  gint64 val;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (object);
+  priv = basertppayload->priv;
+
+  switch (prop_id) {
+    case PROP_MTU:
+      basertppayload->mtu = g_value_get_uint (value);
+      break;
+    case PROP_PT:
+      basertppayload->pt = g_value_get_uint (value);
+      break;
+    case PROP_SSRC:
+      val = g_value_get_uint (value);
+      basertppayload->ssrc = val;
+      priv->ssrc_random = FALSE;
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      val = g_value_get_uint (value);
+      basertppayload->ts_offset = val;
+      priv->ts_offset_random = FALSE;
+      break;
+    case PROP_SEQNUM_OFFSET:
+      val = g_value_get_int (value);
+      basertppayload->seqnum_offset = val;
+      priv->seqnum_offset_random = (val == -1);
+      GST_DEBUG_OBJECT (basertppayload, "seqnum offset 0x%04x, random %d",
+          basertppayload->seqnum_offset, priv->seqnum_offset_random);
+      break;
+    case PROP_MAX_PTIME:
+      basertppayload->priv->prop_max_ptime = g_value_get_int64 (value);
+      update_max_ptime (basertppayload);
+      break;
+    case PROP_MIN_PTIME:
+      basertppayload->min_ptime = g_value_get_int64 (value);
+      break;
+    case PROP_PERFECT_RTPTIME:
+      priv->perfect_rtptime = g_value_get_boolean (value);
+      break;
+    case PROP_PTIME_MULTIPLE:
+      basertppayload->abidata.ABI.ptime_multiple = g_value_get_int64 (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_basertppayload_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadPrivate *priv;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (object);
+  priv = basertppayload->priv;
+
+  switch (prop_id) {
+    case PROP_MTU:
+      g_value_set_uint (value, basertppayload->mtu);
+      break;
+    case PROP_PT:
+      g_value_set_uint (value, basertppayload->pt);
+      break;
+    case PROP_SSRC:
+      if (priv->ssrc_random)
+        g_value_set_uint (value, -1);
+      else
+        g_value_set_uint (value, basertppayload->ssrc);
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      if (priv->ts_offset_random)
+        g_value_set_uint (value, -1);
+      else
+        g_value_set_uint (value, (guint32) basertppayload->ts_offset);
+      break;
+    case PROP_SEQNUM_OFFSET:
+      if (priv->seqnum_offset_random)
+        g_value_set_int (value, -1);
+      else
+        g_value_set_int (value, (guint16) basertppayload->seqnum_offset);
+      break;
+    case PROP_MAX_PTIME:
+      g_value_set_int64 (value, basertppayload->max_ptime);
+      break;
+    case PROP_MIN_PTIME:
+      g_value_set_int64 (value, basertppayload->min_ptime);
+      break;
+    case PROP_TIMESTAMP:
+      g_value_set_uint (value, basertppayload->timestamp);
+      break;
+    case PROP_SEQNUM:
+      g_value_set_uint (value, basertppayload->seqnum);
+      break;
+    case PROP_PERFECT_RTPTIME:
+      g_value_set_boolean (value, priv->perfect_rtptime);
+      break;
+    case PROP_PTIME_MULTIPLE:
+      g_value_set_int64 (value, basertppayload->abidata.ABI.ptime_multiple);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_basertppayload_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstBaseRTPPayload *basertppayload;
+  GstBaseRTPPayloadPrivate *priv;
+  GstStateChangeReturn ret;
+
+  basertppayload = GST_BASE_RTP_PAYLOAD (element);
+  priv = basertppayload->priv;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      gst_segment_init (&basertppayload->segment, GST_FORMAT_UNDEFINED);
+
+      if (priv->seqnum_offset_random)
+        basertppayload->seqnum_base = g_random_int_range (0, G_MAXUINT16);
+      else
+        basertppayload->seqnum_base = basertppayload->seqnum_offset;
+      priv->next_seqnum = basertppayload->seqnum_base;
+      basertppayload->seqnum = basertppayload->seqnum_base;
+
+      if (priv->ssrc_random)
+        basertppayload->current_ssrc = g_random_int ();
+      else
+        basertppayload->current_ssrc = basertppayload->ssrc;
+
+      if (priv->ts_offset_random)
+        basertppayload->ts_base = g_random_int ();
+      else
+        basertppayload->ts_base = basertppayload->ts_offset;
+      basertppayload->timestamp = basertppayload->ts_base;
+      g_atomic_int_set (&basertppayload->priv->notified_first_timestamp, 1);
+      priv->base_offset = GST_BUFFER_OFFSET_NONE;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      g_atomic_int_set (&basertppayload->priv->notified_first_timestamp, 1);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+  return ret;
+}
diff --git a/gst-libs/gst/rtp/gstbasertppayload.h b/gst-libs/gst/rtp/gstbasertppayload.h
new file mode 100644
index 0000000..72b3839
--- /dev/null
+++ b/gst-libs/gst/rtp/gstbasertppayload.h
@@ -0,0 +1,174 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_BASE_RTP_PAYLOAD_H__
+#define __GST_BASE_RTP_PAYLOAD_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_BASE_RTP_PAYLOAD \
+        (gst_basertppayload_get_type())
+#define GST_BASE_RTP_PAYLOAD(obj) \
+        (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BASE_RTP_PAYLOAD,GstBaseRTPPayload))
+#define GST_BASE_RTP_PAYLOAD_CLASS(klass) \
+        (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BASE_RTP_PAYLOAD,GstBaseRTPPayloadClass))
+#define GST_BASE_RTP_PAYLOAD_GET_CLASS(obj) \
+        (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_BASE_RTP_PAYLOAD, GstBaseRTPPayloadClass))
+#define GST_IS_BASE_RTP_PAYLOAD(obj) \
+        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_RTP_PAYLOAD))
+#define GST_IS_BASE_RTP_PAYLOAD_CLASS(klass) \
+        (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_RTP_PAYLOAD))
+#define GST_BASE_RTP_PAYLOAD_CAST(obj) \
+        ((GstBaseRTPPayload*)(obj))
+
+typedef struct _GstBaseRTPPayload GstBaseRTPPayload;
+typedef struct _GstBaseRTPPayloadPrivate GstBaseRTPPayloadPrivate;
+typedef struct _GstBaseRTPPayloadClass GstBaseRTPPayloadClass;
+
+/**
+ * GST_BASE_RTP_PAYLOAD_SINKPAD:
+ * @payload: a #GstBaseRTPPayload
+ *
+ * Get access to the sinkpad of @payload.
+ */
+#define GST_BASE_RTP_PAYLOAD_SINKPAD(payload) (GST_BASE_RTP_PAYLOAD (payload)->sinkpad)
+/**
+ * GST_BASE_RTP_PAYLOAD_SRCPAD:
+ * @payload: a #GstBaseRTPPayload
+ *
+ * Get access to the srcpad of @payload.
+ */
+#define GST_BASE_RTP_PAYLOAD_SRCPAD(payload)  (GST_BASE_RTP_PAYLOAD (payload)->srcpad)
+
+/**
+ * GST_BASE_RTP_PAYLOAD_PT:
+ * @payload: a #GstBaseRTPPayload
+ *
+ * Get access to the configured payload type of @payload.
+ */
+#define GST_BASE_RTP_PAYLOAD_PT(payload)  (GST_BASE_RTP_PAYLOAD (payload)->pt)
+/**
+ * GST_BASE_RTP_PAYLOAD_MTU:
+ * @payload: a #GstBaseRTPPayload
+ *
+ * Get access to the configured MTU of @payload.
+ */
+#define GST_BASE_RTP_PAYLOAD_MTU(payload) (GST_BASE_RTP_PAYLOAD (payload)->mtu)
+
+struct _GstBaseRTPPayload
+{
+  GstElement element;
+
+  /*< private >*/
+  GstPad  *sinkpad;
+  GstPad  *srcpad;
+
+  /* FIXME 0.11: none of these GRands are used anymore, remove them */
+  GRand   *seq_rand;
+  GRand   *ssrc_rand;
+  GRand   *ts_rand;
+
+  guint32  ts_base;
+  guint16  seqnum_base;
+
+  gchar   *media;
+  gchar   *encoding_name;
+  gboolean dynamic;
+  guint32  clock_rate;
+
+  gint32   ts_offset;
+  guint32  timestamp;
+  gint16   seqnum_offset;
+  guint16  seqnum;
+  gint64   max_ptime;
+  guint    pt;
+  guint    ssrc;
+  guint    current_ssrc;
+  guint    mtu;
+
+  GstSegment segment;
+
+  guint64  min_ptime;
+
+  /*< private >*/
+  GstBaseRTPPayloadPrivate *priv;
+
+  union  {
+    struct {
+      guint64 ptime; /* in ns */
+      guint64 ptime_multiple; /* in ns */
+    } ABI;
+    gpointer _gst_reserved[GST_PADDING - (sizeof(guint64)/sizeof(gpointer)) - 1];
+  } abidata;
+};
+
+/**
+ * GstBaseRTPPayloadClass:
+ * @parent_class: the parent class
+ * @set_caps: configure the payloader
+ * @handle_buffer: process data
+ * @handle_event: custom event handling
+ * @get_caps: get desired caps
+ *
+ * Base class for audio RTP payloader.
+ */
+struct _GstBaseRTPPayloadClass
+{
+  GstElementClass parent_class;
+
+  /* query accepted caps */
+  GstCaps *     (*get_caps)             (GstBaseRTPPayload *payload, GstPad * pad, GstCaps * filter);
+  /* receive caps on the sink pad, configure the payloader. */
+  gboolean      (*set_caps)             (GstBaseRTPPayload *payload, GstCaps *caps);
+
+  /* handle a buffer, perform 0 or more gst_basertppayload_push() on
+   * the RTP buffers. This function takes ownership of the buffer. */
+  GstFlowReturn (*handle_buffer)        (GstBaseRTPPayload *payload,
+                                         GstBuffer *buffer);
+  gboolean      (*handle_event)         (GstBaseRTPPayload *payload, GstEvent * event);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType           gst_basertppayload_get_type             (void);
+
+void            gst_basertppayload_set_options          (GstBaseRTPPayload *payload,
+                                                         const gchar *media,
+                                                         gboolean dynamic,
+                                                         const gchar *encoding_name,
+                                                         guint32 clock_rate);
+
+gboolean        gst_basertppayload_set_outcaps          (GstBaseRTPPayload *payload,
+                                                         const gchar *fieldname, ...);
+
+gboolean        gst_basertppayload_is_filled            (GstBaseRTPPayload *payload,
+                                                         guint size, GstClockTime duration);
+
+GstFlowReturn   gst_basertppayload_push                 (GstBaseRTPPayload *payload,
+                                                         GstBuffer *buffer);
+
+GstFlowReturn   gst_basertppayload_push_list            (GstBaseRTPPayload *payload,
+                                                         GstBufferList *list);
+
+G_END_DECLS
+
+#endif /* __GST_BASE_RTP_PAYLOAD_H__ */
diff --git a/gst-libs/gst/rtp/gstrtcpbuffer.c b/gst-libs/gst/rtp/gstrtcpbuffer.c
new file mode 100644
index 0000000..323c5cf
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtcpbuffer.c
@@ -0,0 +1,2034 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
+ *
+ * gstrtcpbuffer.h: various helper functions to manipulate buffers
+ *     with RTCP payload.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstrtcpbuffer
+ * @short_description: Helper methods for dealing with RTCP buffers
+ * @see_also: #GstBaseRTPPayload, #GstBaseRTPDepayload, #gstrtpbuffer
+ *
+ * Note: The API in this module is not yet declared stable.
+ *
+ * <refsect2>
+ * <para>
+ * The GstRTPCBuffer helper functions makes it easy to parse and create regular 
+ * #GstBuffer objects that contain compound RTCP packets. These buffers are typically
+ * of 'application/x-rtcp' #GstCaps.
+ * </para>
+ * <para>
+ * An RTCP buffer consists of 1 or more #GstRTCPPacket structures that you can
+ * retrieve with gst_rtcp_buffer_get_first_packet(). #GstRTCPPacket acts as a pointer
+ * into the RTCP buffer; you can move to the next packet with
+ * gst_rtcp_packet_move_to_next().
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2007-03-26 (0.10.13)
+ *
+ * Since: 0.10.13
+ */
+
+#include <string.h>
+
+#include "gstrtcpbuffer.h"
+
+/**
+ * gst_rtcp_buffer_new_take_data:
+ * @data: data for the new buffer
+ * @len: the length of data
+ *
+ * Create a new buffer and set the data and size of the buffer to @data and @len
+ * respectively. @data will be freed when the buffer is unreffed, so this
+ * function transfers ownership of @data to the new buffer.
+ *
+ * Returns: A newly allocated buffer with @data and of size @len.
+ */
+GstBuffer *
+gst_rtcp_buffer_new_take_data (gpointer data, guint len)
+{
+  GstBuffer *result;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (len > 0, NULL);
+
+  result = gst_buffer_new ();
+  gst_buffer_take_memory (result, -1,
+      gst_memory_new_wrapped (0, data, g_free, len, 0, len));
+
+  return result;
+}
+
+/**
+ * gst_rtcp_buffer_new_copy_data:
+ * @data: data for the new buffer
+ * @len: the length of data
+ *
+ * Create a new buffer and set the data to a copy of @len
+ * bytes of @data and the size to @len. The data will be freed when the buffer
+ * is freed.
+ *
+ * Returns: A newly allocated buffer with a copy of @data and of size @len.
+ */
+GstBuffer *
+gst_rtcp_buffer_new_copy_data (gpointer data, guint len)
+{
+  return gst_rtcp_buffer_new_take_data (g_memdup (data, len), len);
+}
+
+/**
+ * gst_rtcp_buffer_validate_data:
+ * @data: the data to validate
+ * @len: the length of @data to validate
+ *
+ * Check if the @data and @size point to the data of a valid RTCP (compound)
+ * packet. 
+ * Use this function to validate a packet before using the other functions in
+ * this module.
+ *
+ * Returns: TRUE if the data points to a valid RTCP packet.
+ */
+gboolean
+gst_rtcp_buffer_validate_data (guint8 * data, guint len)
+{
+  guint16 header_mask;
+  guint16 header_len;
+  guint8 version;
+  guint data_len;
+  gboolean padding;
+  guint8 pad_bytes;
+
+  g_return_val_if_fail (data != NULL, FALSE);
+
+  /* we need 4 bytes for the type and length */
+  if (G_UNLIKELY (len < 4))
+    goto wrong_length;
+
+  /* first packet must be RR or SR  and version must be 2 */
+  header_mask = ((data[0] << 8) | data[1]) & GST_RTCP_VALID_MASK;
+  if (G_UNLIKELY (header_mask != GST_RTCP_VALID_VALUE))
+    goto wrong_mask;
+
+  /* no padding when mask succeeds */
+  padding = FALSE;
+
+  /* store len */
+  data_len = len;
+
+  while (TRUE) {
+    /* get packet length */
+    header_len = (((data[2] << 8) | data[3]) + 1) << 2;
+    if (data_len < header_len)
+      goto wrong_length;
+
+    /* move to next compount packet */
+    data += header_len;
+    data_len -= header_len;
+
+    /* we are at the end now */
+    if (data_len < 4)
+      break;
+
+    /* check version of new packet */
+    version = data[0] & 0xc0;
+    if (version != (GST_RTCP_VERSION << 6))
+      goto wrong_version;
+
+    /* padding only allowed on last packet */
+    if ((padding = data[0] & 0x20))
+      break;
+  }
+  if (data_len > 0) {
+    /* some leftover bytes, check padding */
+    if (!padding)
+      goto wrong_length;
+
+    /* get padding */
+    pad_bytes = data[data_len - 1];
+    if (data_len != pad_bytes)
+      goto wrong_padding;
+  }
+  return TRUE;
+
+  /* ERRORS */
+wrong_length:
+  {
+    GST_DEBUG ("len check failed");
+    return FALSE;
+  }
+wrong_mask:
+  {
+    GST_DEBUG ("mask check failed (%04x != %04x)", header_mask,
+        GST_RTCP_VALID_VALUE);
+    return FALSE;
+  }
+wrong_version:
+  {
+    GST_DEBUG ("wrong version (%d < 2)", version >> 6);
+    return FALSE;
+  }
+wrong_padding:
+  {
+    GST_DEBUG ("padding check failed");
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_buffer_validate:
+ * @buffer: the buffer to validate
+ *
+ * Check if the data pointed to by @buffer is a valid RTCP packet using
+ * gst_rtcp_buffer_validate_data().
+ *  
+ * Returns: TRUE if @buffer is a valid RTCP packet.
+ */
+gboolean
+gst_rtcp_buffer_validate (GstBuffer * buffer)
+{
+  gboolean res;
+  guint8 *data;
+  gsize len;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+
+  data = gst_buffer_map (buffer, &len, NULL, GST_MAP_READ);
+  res = gst_rtcp_buffer_validate_data (data, len);
+  gst_buffer_unmap (buffer, data, len);
+
+  return res;
+}
+
+/**
+ * gst_rtcp_buffer_new:
+ * @mtu: the maximum mtu size.
+ *
+ * Create a new buffer for constructing RTCP packets. The packet will have a
+ * maximum size of @mtu.
+ *
+ * Returns: A newly allocated buffer.
+ */
+GstBuffer *
+gst_rtcp_buffer_new (guint mtu)
+{
+  GstBuffer *result;
+
+  g_return_val_if_fail (mtu > 0, NULL);
+
+  result = gst_buffer_new ();
+  gst_buffer_take_memory (result, -1,
+      gst_memory_new_wrapped (0, g_malloc0 (mtu), g_free, mtu, 0, mtu));
+
+  return result;
+}
+
+/**
+ * gst_rtcp_buffer_map:
+ * @buffer: a buffer with an RTCP packet
+ * @flags: flags for the mapping
+ * @rtcp: resulting #GstRTCPBuffer
+ *
+ * Open @buffer for reading or writing, depending on @flags. The resulting RTCP
+ * buffer state is stored in @rtcp.
+ */
+gboolean
+gst_rtcp_buffer_map (GstBuffer * buffer, GstMapFlags flags,
+    GstRTCPBuffer * rtcp)
+{
+  g_return_val_if_fail (rtcp != NULL, FALSE);
+  g_return_val_if_fail (rtcp->buffer == NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+
+  rtcp->buffer = buffer;
+  rtcp->flags = flags;
+  rtcp->data = gst_buffer_map (buffer, &rtcp->size, &rtcp->maxsize, flags);
+
+  /* allow for expansion, e.g. adding packets, if needed */
+  if ((flags & GST_MAP_WRITE) != 0) {
+    /* unmap and adjust to max available, and remap */
+    gst_buffer_unmap (buffer, rtcp->data, rtcp->maxsize);
+    rtcp->data = gst_buffer_map (buffer, &rtcp->size, &rtcp->maxsize, flags);
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_buffer_unmap:
+ * @buffer: a buffer with an RTCP packet
+ *
+ * Finish @rtcp after being constructured. This function is usually called
+ * after gst_rtcp_buffer_map() and after adding the RTCP items to the new buffer.
+ *
+ * The function adjusts the size of @buffer with the total length of all the
+ * added packets.
+ */
+gboolean
+gst_rtcp_buffer_unmap (GstRTCPBuffer * rtcp)
+{
+  gboolean res;
+  GstRTCPPacket packet;
+
+  g_return_val_if_fail (rtcp != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
+
+  /* move to the first free space */
+  if (gst_rtcp_buffer_get_first_packet (rtcp, &packet))
+    while (gst_rtcp_packet_move_to_next (&packet));
+
+  /* shrink size */
+  res = gst_buffer_unmap (rtcp->buffer, rtcp->data, packet.offset);
+  rtcp->buffer = NULL;
+
+  return res;
+}
+
+/**
+ * gst_rtcp_buffer_get_packet_count:
+ * @buffer: a valid RTCP buffer
+ *
+ * Get the number of RTCP packets in @buffer.
+ *
+ * Returns: the number of RTCP packets in @buffer.
+ */
+guint
+gst_rtcp_buffer_get_packet_count (GstRTCPBuffer * rtcp)
+{
+  GstRTCPPacket packet;
+  guint count;
+
+  g_return_val_if_fail (rtcp != NULL, 0);
+  g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), 0);
+
+  count = 0;
+  if (gst_rtcp_buffer_get_first_packet (rtcp, &packet)) {
+    do {
+      count++;
+    } while (gst_rtcp_packet_move_to_next (&packet));
+  }
+
+  return count;
+}
+
+/**
+ * read_packet_header:
+ * @packet: a packet
+ *
+ * Read the packet headers for the packet pointed to by @packet.
+ *
+ * Returns: TRUE if @packet pointed to a valid header.
+ */
+static gboolean
+read_packet_header (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint size;
+  guint offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+
+  data = packet->rtcp->data;
+  size = packet->rtcp->size;
+
+  offset = packet->offset;
+
+  /* check if we are at the end of the buffer, we add 4 because we also want to
+   * ensure we can read the header. */
+  if (offset + 4 > size)
+    return FALSE;
+
+  if ((data[offset] & 0xc0) != (GST_RTCP_VERSION << 6))
+    return FALSE;
+
+  /* read count, type and length */
+  packet->padding = (data[offset] & 0x20) == 0x20;
+  packet->count = data[offset] & 0x1f;
+  packet->type = data[offset + 1];
+  packet->length = (data[offset + 2] << 8) | data[offset + 3];
+  packet->item_offset = 4;
+  packet->item_count = 0;
+  packet->entry_offset = 4;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_buffer_get_first_packet:
+ * @buffer: a valid RTCP buffer
+ * @packet: a #GstRTCPPacket
+ *
+ * Initialize a new #GstRTCPPacket pointer that points to the first packet in
+ * @buffer.
+ *
+ * Returns: TRUE if the packet existed in @buffer.
+ */
+gboolean
+gst_rtcp_buffer_get_first_packet (GstRTCPBuffer * rtcp, GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (rtcp != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
+  g_return_val_if_fail (packet != NULL, FALSE);
+
+  /* init to 0 */
+  packet->rtcp = rtcp;
+  packet->offset = 0;
+  packet->type = GST_RTCP_TYPE_INVALID;
+
+  if (!read_packet_header (packet))
+    return FALSE;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_move_to_next:
+ * @packet: a #GstRTCPPacket
+ *
+ * Move the packet pointer @packet to the next packet in the payload.
+ * Use gst_rtcp_buffer_get_first_packet() to initialize @packet.
+ *
+ * Returns: TRUE if @packet is pointing to a valid packet after calling this
+ * function.
+ */
+gboolean
+gst_rtcp_packet_move_to_next (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, FALSE);
+
+  /* if we have a padding or invalid packet, it must be the last, 
+   * return FALSE */
+  if (packet->type == GST_RTCP_TYPE_INVALID || packet->padding)
+    goto end;
+
+  /* move to next packet. Add 4 because the header is not included in length */
+  packet->offset += (packet->length << 2) + 4;
+
+  /* try to read new header */
+  if (!read_packet_header (packet))
+    goto end;
+
+  return TRUE;
+
+  /* ERRORS */
+end:
+  {
+    packet->type = GST_RTCP_TYPE_INVALID;
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_buffer_add_packet:
+ * @buffer: a valid RTCP buffer
+ * @type: the #GstRTCPType of the new packet
+ * @packet: pointer to new packet
+ *
+ * Add a new packet of @type to @buffer. @packet will point to the newly created 
+ * packet.
+ *
+ * Returns: %TRUE if the packet could be created. This function returns %FALSE
+ * if the max mtu is exceeded for the buffer.
+ */
+gboolean
+gst_rtcp_buffer_add_packet (GstRTCPBuffer * rtcp, GstRTCPType type,
+    GstRTCPPacket * packet)
+{
+  guint len, size;
+  guint8 *data;
+  gboolean result;
+
+  g_return_val_if_fail (rtcp != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
+  g_return_val_if_fail (type != GST_RTCP_TYPE_INVALID, FALSE);
+  g_return_val_if_fail (packet != NULL, FALSE);
+
+  /* find free space */
+  if (gst_rtcp_buffer_get_first_packet (rtcp, packet))
+    while (gst_rtcp_packet_move_to_next (packet));
+
+  size = rtcp->size;
+
+  /* packet->offset is now pointing to the next free offset in the buffer to
+   * start a compount packet. Next we figure out if we have enough free space in
+   * the buffer to continue. */
+  switch (type) {
+    case GST_RTCP_TYPE_SR:
+      len = 28;
+      break;
+    case GST_RTCP_TYPE_RR:
+      len = 8;
+      break;
+    case GST_RTCP_TYPE_SDES:
+      len = 4;
+      break;
+    case GST_RTCP_TYPE_BYE:
+      len = 4;
+      break;
+    case GST_RTCP_TYPE_APP:
+      len = 12;
+      break;
+    case GST_RTCP_TYPE_RTPFB:
+      len = 12;
+      break;
+    case GST_RTCP_TYPE_PSFB:
+      len = 12;
+      break;
+    default:
+      goto unknown_type;
+  }
+  if (packet->offset + len >= size)
+    goto no_space;
+
+  data = rtcp->data + packet->offset;
+
+  data[0] = (GST_RTCP_VERSION << 6);
+  data[1] = type;
+  /* length is stored in multiples of 32 bit words minus the length of the
+   * header */
+  len = (len - 4) >> 2;
+  data[2] = len >> 8;
+  data[3] = len & 0xff;
+
+  /* now try to position to the packet */
+  result = read_packet_header (packet);
+
+  return result;
+
+  /* ERRORS */
+unknown_type:
+  {
+    g_warning ("unknown type %d", type);
+    return FALSE;
+  }
+no_space:
+  {
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_remove:
+ * @packet: a #GstRTCPPacket
+ *
+ * Removes the packet pointed to by @packet and moves pointer to the next one
+ *
+ * Returns: TRUE if @packet is pointing to a valid packet after calling this
+ * function.
+ */
+gboolean
+gst_rtcp_packet_remove (GstRTCPPacket * packet)
+{
+  gboolean ret = FALSE;
+  guint offset = 0;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, FALSE);
+
+  /* The next packet starts at offset + length + 4 (the header) */
+  offset = packet->offset + (packet->length << 2) + 4;
+
+  /* Overwrite this packet with the rest of the data */
+  memmove (packet->rtcp->data + packet->offset,
+      packet->rtcp->data + offset, packet->rtcp->size - offset);
+
+  /* try to read next header */
+  ret = read_packet_header (packet);
+  if (!ret)
+    packet->type = GST_RTCP_TYPE_INVALID;
+
+  return ret;
+}
+
+/**
+ * gst_rtcp_packet_get_padding:
+ * @packet: a valid #GstRTCPPacket
+ *
+ * Get the packet padding of the packet pointed to by @packet.
+ *
+ * Returns: If the packet has the padding bit set.
+ */
+gboolean
+gst_rtcp_packet_get_padding (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, FALSE);
+
+  return packet->padding;
+}
+
+/**
+ * gst_rtcp_packet_get_type:
+ * @packet: a valid #GstRTCPPacket
+ *
+ * Get the packet type of the packet pointed to by @packet.
+ *
+ * Returns: The packet type or GST_RTCP_TYPE_INVALID when @packet is not
+ * pointing to a valid packet.
+ */
+GstRTCPType
+gst_rtcp_packet_get_type (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, GST_RTCP_TYPE_INVALID);
+
+  return packet->type;
+}
+
+/**
+ * gst_rtcp_packet_get_count:
+ * @packet: a valid #GstRTCPPacket
+ *
+ * Get the count field in @packet.
+ *
+ * Returns: The count field in @packet or -1 if @packet does not point to a
+ * valid packet.
+ */
+guint8
+gst_rtcp_packet_get_count (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, -1);
+  g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, -1);
+
+  return packet->count;
+}
+
+/**
+ * gst_rtcp_packet_get_length:
+ * @packet: a valid #GstRTCPPacket
+ *
+ * Get the length field of @packet. This is the length of the packet in 
+ * 32-bit words minus one.
+ *
+ * Returns: The length field of @packet.
+ */
+guint16
+gst_rtcp_packet_get_length (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, 0);
+
+  return packet->length;
+}
+
+/**
+ * gst_rtcp_packet_sr_get_sender_info:
+ * @packet: a valid SR #GstRTCPPacket
+ * @ssrc: result SSRC
+ * @ntptime: result NTP time
+ * @rtptime: result RTP time
+ * @packet_count: result packet count
+ * @octet_count: result octect count
+ *
+ * Parse the SR sender info and store the values.
+ */
+void
+gst_rtcp_packet_sr_get_sender_info (GstRTCPPacket * packet, guint32 * ssrc,
+    guint64 * ntptime, guint32 * rtptime, guint32 * packet_count,
+    guint32 * octet_count)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  if (ssrc)
+    *ssrc = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (ntptime)
+    *ntptime = GST_READ_UINT64_BE (data);
+  data += 8;
+  if (rtptime)
+    *rtptime = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (packet_count)
+    *packet_count = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (octet_count)
+    *octet_count = GST_READ_UINT32_BE (data);
+}
+
+/**
+ * gst_rtcp_packet_sr_set_sender_info:
+ * @packet: a valid SR #GstRTCPPacket
+ * @ssrc: the SSRC 
+ * @ntptime: the NTP time
+ * @rtptime: the RTP time
+ * @packet_count: the packet count
+ * @octet_count: the octect count
+ *
+ * Set the given values in the SR packet @packet.
+ */
+void
+gst_rtcp_packet_sr_set_sender_info (GstRTCPPacket * packet, guint32 ssrc,
+    guint64 ntptime, guint32 rtptime, guint32 packet_count, guint32 octet_count)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  GST_WRITE_UINT32_BE (data, ssrc);
+  data += 4;
+  GST_WRITE_UINT64_BE (data, ntptime);
+  data += 8;
+  GST_WRITE_UINT32_BE (data, rtptime);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, packet_count);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, octet_count);
+}
+
+/**
+ * gst_rtcp_packet_rr_get_ssrc:
+ * @packet: a valid RR #GstRTCPPacket
+ *
+ * Get the ssrc field of the RR @packet.
+ *
+ * Returns: the ssrc.
+ */
+guint32
+gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint32 ssrc;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR, 0);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  ssrc = GST_READ_UINT32_BE (data);
+
+  return ssrc;
+}
+
+/**
+ * gst_rtcp_packet_rr_set_ssrc:
+ * @packet: a valid RR #GstRTCPPacket
+ * @ssrc: the SSRC to set
+ *
+ * Set the ssrc field of the RR @packet.
+ */
+void
+gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket * packet, guint32 ssrc)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RR);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  GST_WRITE_UINT32_BE (data, ssrc);
+}
+
+/**
+ * gst_rtcp_packet_get_rb_count:
+ * @packet: a valid SR or RR #GstRTCPPacket
+ *
+ * Get the number of report blocks in @packet.
+ *
+ * Returns: The number of report blocks in @packet.
+ */
+guint
+gst_rtcp_packet_get_rb_count (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
+      packet->type == GST_RTCP_TYPE_SR, 0);
+
+  return packet->count;
+}
+
+/**
+ * gst_rtcp_packet_get_rb:
+ * @packet: a valid SR or RR #GstRTCPPacket
+ * @nth: the nth report block in @packet
+ * @ssrc: result for data source being reported
+ * @fractionlost: result for fraction lost since last SR/RR
+ * @packetslost: result for the cumululative number of packets lost
+ * @exthighestseq: result for the extended last sequence number received
+ * @jitter: result for the interarrival jitter
+ * @lsr: result for the last SR packet from this source
+ * @dlsr: result for the delay since last SR packet
+ *
+ * Parse the values of the @nth report block in @packet and store the result in
+ * the values.
+ */
+void
+gst_rtcp_packet_get_rb (GstRTCPPacket * packet, guint nth, guint32 * ssrc,
+    guint8 * fractionlost, gint32 * packetslost, guint32 * exthighestseq,
+    guint32 * jitter, guint32 * lsr, guint32 * dlsr)
+{
+  guint8 *data;
+  guint32 tmp;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
+      packet->type == GST_RTCP_TYPE_SR);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  if (packet->type == GST_RTCP_TYPE_RR)
+    data += 4;
+  else
+    data += 24;
+
+  /* move to requested index */
+  data += (nth * 24);
+
+  if (ssrc)
+    *ssrc = GST_READ_UINT32_BE (data);
+  data += 4;
+  tmp = GST_READ_UINT32_BE (data);
+  if (fractionlost)
+    *fractionlost = (tmp >> 24);
+  if (packetslost) {
+    /* sign extend */
+    if (tmp & 0x00800000)
+      tmp |= 0xff000000;
+    else
+      tmp &= 0x00ffffff;
+    *packetslost = (gint32) tmp;
+  }
+  data += 4;
+  if (exthighestseq)
+    *exthighestseq = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (jitter)
+    *jitter = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (lsr)
+    *lsr = GST_READ_UINT32_BE (data);
+  data += 4;
+  if (dlsr)
+    *dlsr = GST_READ_UINT32_BE (data);
+}
+
+/**
+ * gst_rtcp_packet_add_rb:
+ * @packet: a valid SR or RR #GstRTCPPacket
+ * @ssrc: data source being reported
+ * @fractionlost: fraction lost since last SR/RR
+ * @packetslost: the cumululative number of packets lost
+ * @exthighestseq: the extended last sequence number received
+ * @jitter: the interarrival jitter
+ * @lsr: the last SR packet from this source
+ * @dlsr: the delay since last SR packet
+ *
+ * Add a new report block to @packet with the given values.
+ *
+ * Returns: %TRUE if the packet was created. This function can return %FALSE if
+ * the max MTU is exceeded or the number of report blocks is greater than
+ * #GST_RTCP_MAX_RB_COUNT.
+ */
+gboolean
+gst_rtcp_packet_add_rb (GstRTCPPacket * packet, guint32 ssrc,
+    guint8 fractionlost, gint32 packetslost, guint32 exthighestseq,
+    guint32 jitter, guint32 lsr, guint32 dlsr)
+{
+  guint8 *data;
+  guint size, offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
+      packet->type == GST_RTCP_TYPE_SR, FALSE);
+
+  if (packet->count >= GST_RTCP_MAX_RB_COUNT)
+    goto no_space;
+
+  data = packet->rtcp->data;
+  size = packet->rtcp->size;
+
+  /* skip header */
+  offset = packet->offset + 4;
+  if (packet->type == GST_RTCP_TYPE_RR)
+    offset += 4;
+  else
+    offset += 24;
+
+  /* move to current index */
+  offset += (packet->count * 24);
+
+  /* we need 24 free bytes now */
+  if (offset + 24 >= size)
+    goto no_space;
+
+  /* increment packet count and length */
+  packet->count++;
+  data[packet->offset]++;
+  packet->length += 6;
+  data[packet->offset + 2] = (packet->length) >> 8;
+  data[packet->offset + 3] = (packet->length) & 0xff;
+
+  /* move to new report block offset */
+  data += offset;
+
+  GST_WRITE_UINT32_BE (data, ssrc);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, (fractionlost << 24) | (packetslost & 0xffffff));
+  data += 4;
+  GST_WRITE_UINT32_BE (data, exthighestseq);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, jitter);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, lsr);
+  data += 4;
+  GST_WRITE_UINT32_BE (data, dlsr);
+
+  return TRUE;
+
+no_space:
+  {
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_set_rb:
+ * @packet: a valid SR or RR #GstRTCPPacket
+ * @nth: the nth report block to set
+ * @ssrc: data source being reported
+ * @fractionlost: fraction lost since last SR/RR
+ * @packetslost: the cumululative number of packets lost
+ * @exthighestseq: the extended last sequence number received
+ * @jitter: the interarrival jitter
+ * @lsr: the last SR packet from this source
+ * @dlsr: the delay since last SR packet
+ *
+ * Set the @nth new report block in @packet with the given values.
+ *
+ * Note: Not implemented.
+ */
+void
+gst_rtcp_packet_set_rb (GstRTCPPacket * packet, guint nth, guint32 ssrc,
+    guint8 fractionlost, gint32 packetslost, guint32 exthighestseq,
+    guint32 jitter, guint32 lsr, guint32 dlsr)
+{
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
+      packet->type == GST_RTCP_TYPE_SR);
+
+  g_warning ("not implemented");
+}
+
+
+/**
+ * gst_rtcp_packet_sdes_get_item_count:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Get the number of items in the SDES packet @packet.
+ *
+ * Returns: The number of items in @packet.
+ */
+guint
+gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
+
+  return packet->count;
+}
+
+/**
+ * gst_rtcp_packet_sdes_first_item:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Move to the first SDES item in @packet.
+ *
+ * Returns: TRUE if there was a first item.
+ */
+gboolean
+gst_rtcp_packet_sdes_first_item (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  packet->item_offset = 4;
+  packet->item_count = 0;
+  packet->entry_offset = 4;
+
+  if (packet->count == 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_next_item:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Move to the next SDES item in @packet.
+ *
+ * Returns: TRUE if there was a next item.
+ */
+gboolean
+gst_rtcp_packet_sdes_next_item (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint offset;
+  guint len;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* if we are at the last item, we are done */
+  if (packet->item_count == packet->count)
+    return FALSE;
+
+  /* move to SDES */
+  data = packet->rtcp->data;
+  data += packet->offset;
+  /* move to item */
+  offset = packet->item_offset;
+  /* skip SSRC */
+  offset += 4;
+
+  /* don't overrun */
+  len = (packet->length << 2);
+
+  while (offset < len) {
+    if (data[offset] == 0) {
+      /* end of list, round to next 32-bit word */
+      offset = (offset + 4) & ~3;
+      break;
+    }
+    offset += data[offset + 1] + 2;
+  }
+  if (offset >= len)
+    return FALSE;
+
+  packet->item_offset = offset;
+  packet->item_count++;
+  packet->entry_offset = 4;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_get_ssrc:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Get the SSRC of the current SDES item.
+ *
+ * Returns: the SSRC of the current item.
+ */
+guint32
+gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket * packet)
+{
+  guint32 ssrc;
+  guint8 *data;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
+
+  /* move to SDES */
+  data = packet->rtcp->data;
+  data += packet->offset;
+  /* move to item */
+  data += packet->item_offset;
+
+  ssrc = GST_READ_UINT32_BE (data);
+
+  return ssrc;
+}
+
+/**
+ * gst_rtcp_packet_sdes_first_entry:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Move to the first SDES entry in the current item.
+ *
+ * Returns: %TRUE if there was a first entry.
+ */
+gboolean
+gst_rtcp_packet_sdes_first_entry (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint len, offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* move to SDES */
+  data = packet->rtcp->data;
+  data += packet->offset;
+  /* move to item */
+  offset = packet->item_offset;
+  /* skip SSRC */
+  offset += 4;
+
+  packet->entry_offset = 4;
+
+  /* don't overrun */
+  len = (packet->length << 2);
+  if (offset >= len)
+    return FALSE;
+
+  if (data[offset] == 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_next_entry:
+ * @packet: a valid SDES #GstRTCPPacket
+ *
+ * Move to the next SDES entry in the current item.
+ *
+ * Returns: %TRUE if there was a next entry.
+ */
+gboolean
+gst_rtcp_packet_sdes_next_entry (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint len, offset, item_len;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* move to SDES */
+  data = packet->rtcp->data;
+  data += packet->offset;
+  /* move to item */
+  offset = packet->item_offset;
+  /* move to entry */
+  offset += packet->entry_offset;
+
+  item_len = data[offset + 1] + 2;
+  /* skip item */
+  offset += item_len;
+
+  /* don't overrun */
+  len = (packet->length << 2);
+  if (offset >= len)
+    return FALSE;
+
+  packet->entry_offset += item_len;
+
+  /* check for end of list */
+  if (data[offset] == 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_get_entry:
+ * @packet: a valid SDES #GstRTCPPacket
+ * @type: result of the entry type
+ * @len: result length of the entry data
+ * @data: result entry data
+ *
+ * Get the data of the current SDES item entry. @type (when not NULL) will
+ * contain the type of the entry. @data (when not NULL) will point to @len
+ * bytes.
+ *
+ * When @type refers to a text item, @data will point to a UTF8 string. Note
+ * that this UTF8 string is NOT null-terminated. Use
+ * gst_rtcp_packet_sdes_copy_entry() to get a null-termined copy of the entry.
+ *
+ * Returns: %TRUE if there was valid data.
+ */
+gboolean
+gst_rtcp_packet_sdes_get_entry (GstRTCPPacket * packet,
+    GstRTCPSDESType * type, guint8 * len, guint8 ** data)
+{
+  guint8 *bdata;
+  guint offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* move to SDES */
+  bdata = packet->rtcp->data;
+  bdata += packet->offset;
+  /* move to item */
+  offset = packet->item_offset;
+  /* move to entry */
+  offset += packet->entry_offset;
+
+  if (bdata[offset] == 0)
+    return FALSE;
+
+  if (type)
+    *type = bdata[offset];
+  if (len)
+    *len = bdata[offset + 1];
+  if (data)
+    *data = &bdata[offset + 2];
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_copy_entry:
+ * @packet: a valid SDES #GstRTCPPacket
+ * @type: result of the entry type
+ * @len: result length of the entry data
+ * @data: result entry data
+ *
+ * This function is like gst_rtcp_packet_sdes_get_entry() but it returns a
+ * null-terminated copy of the data instead. use g_free() after usage.
+ *
+ * Returns: %TRUE if there was valid data.
+ */
+gboolean
+gst_rtcp_packet_sdes_copy_entry (GstRTCPPacket * packet,
+    GstRTCPSDESType * type, guint8 * len, guint8 ** data)
+{
+  guint8 *tdata;
+  guint8 tlen;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  if (!gst_rtcp_packet_sdes_get_entry (packet, type, &tlen, &tdata))
+    return FALSE;
+
+  if (len)
+    *len = tlen;
+  if (data)
+    *data = (guint8 *) g_strndup ((gchar *) tdata, tlen);
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_sdes_add_item:
+ * @packet: a valid SDES #GstRTCPPacket
+ * @ssrc: the SSRC of the new item to add
+ *
+ * Add a new SDES item for @ssrc to @packet.
+ *
+ * Returns: %TRUE if the item could be added, %FALSE if the maximum amount of
+ * items has been exceeded for the SDES packet or the MTU has been reached.
+ */
+gboolean
+gst_rtcp_packet_sdes_add_item (GstRTCPPacket * packet, guint32 ssrc)
+{
+  guint8 *data;
+  guint offset, size;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* increment item count when possible */
+  if (packet->count >= GST_RTCP_MAX_SDES_ITEM_COUNT)
+    goto no_space;
+
+  /* pretend there is a next packet for the next call */
+  packet->count++;
+
+  /* jump over current item */
+  gst_rtcp_packet_sdes_next_item (packet);
+
+  /* move to SDES */
+  data = packet->rtcp->data;
+  size = packet->rtcp->size;
+  data += packet->offset;
+  /* move to current item */
+  offset = packet->item_offset;
+
+  /* we need 2 free words now */
+  if (offset + 8 >= size)
+    goto no_next;
+
+  /* write SSRC */
+  GST_WRITE_UINT32_BE (&data[offset], ssrc);
+  /* write 0 entry with padding */
+  GST_WRITE_UINT32_BE (&data[offset + 4], 0);
+
+  /* update count */
+  data[0] = (data[0] & 0xe0) | packet->count;
+  /* update length, we added 2 words */
+  packet->length += 2;
+  data[2] = (packet->length) >> 8;
+  data[3] = (packet->length) & 0xff;
+
+  return TRUE;
+
+  /* ERRORS */
+no_space:
+  {
+    return FALSE;
+  }
+no_next:
+  {
+    packet->count--;
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_sdes_add_entry:
+ * @packet: a valid SDES #GstRTCPPacket
+ * @type: the #GstRTCPSDESType of the SDES entry
+ * @len: the data length
+ * @data: the data
+ *
+ * Add a new SDES entry to the current item in @packet.
+ *
+ * Returns: %TRUE if the item could be added, %FALSE if the MTU has been
+ * reached.
+ */
+gboolean
+gst_rtcp_packet_sdes_add_entry (GstRTCPPacket * packet, GstRTCPSDESType type,
+    guint8 len, const guint8 * data)
+{
+  guint8 *bdata;
+  guint offset, size, padded;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
+
+  /* move to SDES */
+  bdata = packet->rtcp->data;
+  size = packet->rtcp->size;
+  bdata += packet->offset;
+  /* move to item */
+  offset = packet->item_offset;
+  /* move to entry */
+  offset += packet->entry_offset;
+
+  /* add 1 byte end and up to 3 bytes padding to fill a full 32 bit word */
+  padded = (offset + 2 + len + 1 + 3) & ~3;
+
+  /* we need enough space for type, len, data and padding */
+  if (packet->offset + padded >= size)
+    goto no_space;
+
+  bdata[offset] = type;
+  bdata[offset + 1] = len;
+  memcpy (&bdata[offset + 2], data, len);
+  bdata[offset + 2 + len] = 0;
+
+  /* calculate new packet length */
+  packet->length = (padded - 4) >> 2;
+  bdata[2] = (packet->length) >> 8;
+  bdata[3] = (packet->length) & 0xff;
+
+  /* position to new next entry */
+  packet->entry_offset += 2 + len;
+
+  return TRUE;
+
+  /* ERRORS */
+no_space:
+  {
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_bye_get_ssrc_count:
+ * @packet: a valid BYE #GstRTCPPacket
+ *
+ * Get the number of SSRC fields in @packet.
+ *
+ * Returns: The number of SSRC fields in @packet.
+ */
+guint
+gst_rtcp_packet_bye_get_ssrc_count (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, -1);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, -1);
+
+  return packet->count;
+}
+
+/**
+ * gst_rtcp_packet_bye_get_nth_ssrc:
+ * @packet: a valid BYE #GstRTCPPacket
+ * @nth: the nth SSRC to get
+ *
+ * Get the @nth SSRC of the BYE @packet.
+ *
+ * Returns: The @nth SSRC of @packet.
+ */
+guint32
+gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket * packet, guint nth)
+{
+  guint8 *data;
+  guint offset;
+  guint32 ssrc;
+  guint8 sc;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
+
+  /* get amount of sources and check that we don't read too much */
+  sc = packet->count;
+  if (nth >= sc)
+    return 0;
+
+  /* get offset in 32-bits words into packet, skip the header */
+  offset = 1 + nth;
+  /* check that we don't go past the packet length */
+  if (offset > packet->length)
+    return 0;
+
+  /* scale to bytes */
+  offset <<= 2;
+  offset += packet->offset;
+
+  /* check if the packet is valid */
+  if (offset + 4 > packet->rtcp->size)
+    return 0;
+
+  data = packet->rtcp->data;
+  data += offset;
+
+  ssrc = GST_READ_UINT32_BE (data);
+
+  return ssrc;
+}
+
+/**
+ * gst_rtcp_packet_bye_add_ssrc:
+ * @packet: a valid BYE #GstRTCPPacket
+ * @ssrc: an SSRC to add
+ *
+ * Add @ssrc to the BYE @packet.
+ *
+ * Returns: %TRUE if the ssrc was added. This function can return %FALSE if
+ * the max MTU is exceeded or the number of sources blocks is greater than
+ * #GST_RTCP_MAX_BYE_SSRC_COUNT.
+ */
+gboolean
+gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket * packet, guint32 ssrc)
+{
+  guint8 *data;
+  guint size, offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
+
+  if (packet->count >= GST_RTCP_MAX_BYE_SSRC_COUNT)
+    goto no_space;
+
+  data = packet->rtcp->data;
+  size = packet->rtcp->size;
+
+  /* skip header */
+  offset = packet->offset + 4;
+
+  /* move to current index */
+  offset += (packet->count * 4);
+
+  if (offset + 4 >= size)
+    goto no_space;
+
+  /* increment packet count and length */
+  packet->count++;
+  data[packet->offset]++;
+  packet->length += 1;
+  data[packet->offset + 2] = (packet->length) >> 8;
+  data[packet->offset + 3] = (packet->length) & 0xff;
+
+  /* move to new SSRC offset and write ssrc */
+  data += offset;
+  GST_WRITE_UINT32_BE (data, ssrc);
+
+  return TRUE;
+
+  /* ERRORS */
+no_space:
+  {
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_bye_add_ssrcs:
+ * @packet: a valid BYE #GstRTCPPacket
+ * @ssrc: an array of SSRCs to add
+ * @len: number of elements in @ssrc
+ *
+ * Adds @len SSRCs in @ssrc to BYE @packet.
+ *
+ * Returns: %TRUE if the all the SSRCs were added. This function can return %FALSE if
+ * the max MTU is exceeded or the number of sources blocks is greater than
+ * #GST_RTCP_MAX_BYE_SSRC_COUNT.
+ */
+gboolean
+gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket * packet, guint32 * ssrc,
+    guint len)
+{
+  guint i;
+  gboolean res;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
+
+  res = TRUE;
+  for (i = 0; i < len && res; i++) {
+    res = gst_rtcp_packet_bye_add_ssrc (packet, ssrc[i]);
+  }
+  return res;
+}
+
+/* get the offset in packet of the reason length */
+static guint
+get_reason_offset (GstRTCPPacket * packet)
+{
+  guint offset;
+
+  /* get amount of sources plus header */
+  offset = 1 + packet->count;
+
+  /* check that we don't go past the packet length */
+  if (offset > packet->length)
+    return 0;
+
+  /* scale to bytes */
+  offset <<= 2;
+  offset += packet->offset;
+
+  /* check if the packet is valid */
+  if (offset + 1 > packet->rtcp->size)
+    return 0;
+
+  return offset;
+}
+
+/**
+ * gst_rtcp_packet_bye_get_reason_len:
+ * @packet: a valid BYE #GstRTCPPacket
+ *
+ * Get the length of the reason string.
+ *
+ * Returns: The length of the reason string or 0 when there is no reason string
+ * present.
+ */
+guint8
+gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint roffset;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
+
+  roffset = get_reason_offset (packet);
+  if (roffset == 0)
+    return 0;
+
+  data = packet->rtcp->data;
+
+  return data[roffset];
+}
+
+/**
+ * gst_rtcp_packet_bye_get_reason:
+ * @packet: a valid BYE #GstRTCPPacket
+ *
+ * Get the reason in @packet.
+ *
+ * Returns: The reason for the BYE @packet or NULL if the packet did not contain
+ * a reason string. The string must be freed with g_free() after usage.
+ */
+gchar *
+gst_rtcp_packet_bye_get_reason (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint roffset;
+  guint8 len;
+
+  g_return_val_if_fail (packet != NULL, NULL);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, NULL);
+
+  roffset = get_reason_offset (packet);
+  if (roffset == 0)
+    return NULL;
+
+  data = packet->rtcp->data;
+
+  /* get length of reason string */
+  len = data[roffset];
+  if (len == 0)
+    return NULL;
+
+  /* move to string */
+  roffset += 1;
+
+  /* check if enough data to copy */
+  if (roffset + len > packet->rtcp->size)
+    return NULL;
+
+  return g_strndup ((gconstpointer) (data + roffset), len);
+}
+
+/**
+ * gst_rtcp_packet_bye_set_reason:
+ * @packet: a valid BYE #GstRTCPPacket
+ * @reason: a reason string
+ *
+ * Set the reason string to @reason in @packet.
+ *
+ * Returns: TRUE if the string could be set.
+ */
+gboolean
+gst_rtcp_packet_bye_set_reason (GstRTCPPacket * packet, const gchar * reason)
+{
+  guint8 *data;
+  guint roffset, size;
+  guint8 len, padded;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
+
+  if (reason == NULL)
+    return TRUE;
+
+  len = strlen (reason);
+  if (len == 0)
+    return TRUE;
+
+  /* make room for the string before we get the offset */
+  packet->length++;
+
+  roffset = get_reason_offset (packet);
+  if (roffset == 0)
+    goto no_space;
+
+  data = packet->rtcp->data;
+  size = packet->rtcp->size;
+
+  /* we have 1 byte length and we need to pad to 4 bytes */
+  padded = ((len + 1) + 3) & ~3;
+
+  /* we need enough space for the padded length */
+  if (roffset + padded >= size)
+    goto no_space;
+
+  data[roffset] = len;
+  memcpy (&data[roffset + 1], reason, len);
+
+  /* update packet length, we made room for 1 double word already */
+  packet->length += (padded >> 2) - 1;
+  data[packet->offset + 2] = (packet->length) >> 8;
+  data[packet->offset + 3] = (packet->length) & 0xff;
+
+  return TRUE;
+
+  /* ERRORS */
+no_space:
+  {
+    packet->length--;
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtcp_packet_fb_get_sender_ssrc:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ *
+ * Get the sender SSRC field of the RTPFB or PSFB @packet.
+ *
+ * Returns: the sender SSRC.
+ *
+ * Since: 0.10.23
+ */
+guint32
+gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint32 ssrc;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
+          packet->type == GST_RTCP_TYPE_PSFB), 0);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  ssrc = GST_READ_UINT32_BE (data);
+
+  return ssrc;
+}
+
+/**
+ * gst_rtcp_packet_fb_set_sender_ssrc:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ * @ssrc: a sender SSRC
+ *
+ * Set the sender SSRC field of the RTPFB or PSFB @packet.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket * packet, guint32 ssrc)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB);
+
+  data = packet->rtcp->data;
+
+  /* skip header */
+  data += packet->offset + 4;
+  GST_WRITE_UINT32_BE (data, ssrc);
+}
+
+/**
+ * gst_rtcp_packet_fb_get_media_ssrc:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ *
+ * Get the media SSRC field of the RTPFB or PSFB @packet.
+ *
+ * Returns: the media SSRC.
+ *
+ * Since: 0.10.23
+ */
+guint32
+gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket * packet)
+{
+  guint8 *data;
+  guint32 ssrc;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
+          packet->type == GST_RTCP_TYPE_PSFB), 0);
+
+  data = packet->rtcp->data;
+
+  /* skip header and sender ssrc */
+  data += packet->offset + 8;
+  ssrc = GST_READ_UINT32_BE (data);
+
+  return ssrc;
+}
+
+/**
+ * gst_rtcp_packet_fb_set_media_ssrc:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ * @ssrc: a media SSRC
+ *
+ * Set the media SSRC field of the RTPFB or PSFB @packet.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket * packet, guint32 ssrc)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB);
+
+  data = packet->rtcp->data;
+
+  /* skip header and sender ssrc */
+  data += packet->offset + 8;
+  GST_WRITE_UINT32_BE (data, ssrc);
+}
+
+/**
+ * gst_rtcp_packet_fb_get_type:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ *
+ * Get the feedback message type of the FB @packet.
+ *
+ * Returns: The feedback message type.
+ *
+ * Since: 0.10.23
+ */
+GstRTCPFBType
+gst_rtcp_packet_fb_get_type (GstRTCPPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, GST_RTCP_FB_TYPE_INVALID);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB, GST_RTCP_FB_TYPE_INVALID);
+
+  return packet->count;
+}
+
+/**
+ * gst_rtcp_packet_fb_set_type:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ * @type: the #GstRTCPFBType to set
+ *
+ * Set the feedback message type of the FB @packet.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtcp_packet_fb_set_type (GstRTCPPacket * packet, GstRTCPFBType type)
+{
+  guint8 *data;
+
+  g_return_if_fail (packet != NULL);
+  g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB);
+
+  data = packet->rtcp->data;
+
+  data[packet->offset] = (data[packet->offset] & 0xe0) | type;
+  packet->count = type;
+}
+
+/**
+ * gst_rtcp_ntp_to_unix:
+ * @ntptime: an NTP timestamp
+ *
+ * Converts an NTP time to UNIX nanoseconds. @ntptime can typically be
+ * the NTP time of an SR RTCP message and contains, in the upper 32 bits, the
+ * number of seconds since 1900 and, in the lower 32 bits, the fractional
+ * seconds. The resulting value will be the number of nanoseconds since 1970.
+ *
+ * Returns: the UNIX time for @ntptime in nanoseconds.
+ */
+guint64
+gst_rtcp_ntp_to_unix (guint64 ntptime)
+{
+  guint64 unixtime;
+
+  /* conversion from NTP timestamp (seconds since 1900) to seconds since
+   * 1970. */
+  unixtime = ntptime - (G_GUINT64_CONSTANT (2208988800) << 32);
+  /* conversion to nanoseconds */
+  unixtime =
+      gst_util_uint64_scale (unixtime, GST_SECOND,
+      (G_GINT64_CONSTANT (1) << 32));
+
+  return unixtime;
+}
+
+/**
+ * gst_rtcp_unix_to_ntp:
+ * @unixtime: an UNIX timestamp in nanoseconds
+ *
+ * Converts a UNIX timestamp in nanoseconds to an NTP time. The caller should
+ * pass a value with nanoseconds since 1970. The NTP time will, in the upper
+ * 32 bits, contain the number of seconds since 1900 and, in the lower 32
+ * bits, the fractional seconds. The resulting value can be used as an ntptime
+ * for constructing SR RTCP packets.
+ *
+ * Returns: the NTP time for @unixtime.
+ */
+guint64
+gst_rtcp_unix_to_ntp (guint64 unixtime)
+{
+  guint64 ntptime;
+
+  /* convert clock time to NTP time. upper 32 bits should contain the seconds
+   * and the lower 32 bits, the fractions of a second. */
+  ntptime =
+      gst_util_uint64_scale (unixtime, (G_GINT64_CONSTANT (1) << 32),
+      GST_SECOND);
+  /* conversion from UNIX timestamp (seconds since 1970) to NTP (seconds
+   * since 1900). */
+  ntptime += (G_GUINT64_CONSTANT (2208988800) << 32);
+
+  return ntptime;
+}
+
+/**
+ * gst_rtcp_sdes_type_to_name:
+ * @type: a #GstRTCPSDESType
+ *
+ * Converts @type to the string equivalent. The string is typically used as a
+ * key in a #GstStructure containing SDES items.
+ *
+ * Returns: the string equivalent of @type
+ *
+ * Since: 0.10.26
+ */
+const gchar *
+gst_rtcp_sdes_type_to_name (GstRTCPSDESType type)
+{
+  const gchar *result;
+
+  switch (type) {
+    case GST_RTCP_SDES_CNAME:
+      result = "cname";
+      break;
+    case GST_RTCP_SDES_NAME:
+      result = "name";
+      break;
+    case GST_RTCP_SDES_EMAIL:
+      result = "email";
+      break;
+    case GST_RTCP_SDES_PHONE:
+      result = "phone";
+      break;
+    case GST_RTCP_SDES_LOC:
+      result = "location";
+      break;
+    case GST_RTCP_SDES_TOOL:
+      result = "tool";
+      break;
+    case GST_RTCP_SDES_NOTE:
+      result = "note";
+      break;
+    case GST_RTCP_SDES_PRIV:
+      result = "priv";
+      break;
+    default:
+      result = NULL;
+      break;
+  }
+  return result;
+}
+
+/**
+ * gst_rtcp_sdes_name_to_type:
+ * @name: a SDES name
+ *
+ * Convert @name into a @GstRTCPSDESType. @name is typically a key in a
+ * #GstStructure containing SDES items.
+ *
+ * Returns: the #GstRTCPSDESType for @name or #GST_RTCP_SDES_PRIV when @name
+ * is a private sdes item.
+ *
+ * Since: 0.10.26
+ */
+GstRTCPSDESType
+gst_rtcp_sdes_name_to_type (const gchar * name)
+{
+  if (name == NULL || strlen (name) == 0)
+    return GST_RTCP_SDES_INVALID;
+
+  if (strcmp ("cname", name) == 0)
+    return GST_RTCP_SDES_CNAME;
+
+  if (strcmp ("name", name) == 0)
+    return GST_RTCP_SDES_NAME;
+
+  if (strcmp ("email", name) == 0)
+    return GST_RTCP_SDES_EMAIL;
+
+  if (strcmp ("phone", name) == 0)
+    return GST_RTCP_SDES_PHONE;
+
+  if (strcmp ("location", name) == 0)
+    return GST_RTCP_SDES_LOC;
+
+  if (strcmp ("tool", name) == 0)
+    return GST_RTCP_SDES_TOOL;
+
+  if (strcmp ("note", name) == 0)
+    return GST_RTCP_SDES_NOTE;
+
+  return GST_RTCP_SDES_PRIV;
+}
+
+/**
+ * gst_rtcp_packet_fb_get_fci_length:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ *
+ * Get the length of the Feedback Control Information attached to a
+ * RTPFB or PSFB @packet.
+ *
+ * Returns: The length of the FCI in 32-bit words.
+ *
+ * Since: 0.10.31
+ */
+guint16
+gst_rtcp_packet_fb_get_fci_length (GstRTCPPacket * packet)
+{
+  guint8 *data;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB, 0);
+
+  data = packet->rtcp->data + packet->offset + 2;
+
+  return GST_READ_UINT16_BE (data) - 2;
+}
+
+/**
+ * gst_rtcp_packet_fb_set_fci_length:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ * @wordlen: Length of the FCI in 32-bit words
+ *
+ * Set the length of the Feedback Control Information attached to a
+ * RTPFB or PSFB @packet.
+ *
+ * Returns: %TRUE if there was enough space in the packet to add this much FCI
+ *
+ * Since: 0.10.31
+ */
+gboolean
+gst_rtcp_packet_fb_set_fci_length (GstRTCPPacket * packet, guint16 wordlen)
+{
+  guint8 *data;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB, FALSE);
+
+  if (packet->rtcp->size < packet->offset + ((wordlen + 3) * 4))
+    return FALSE;
+
+  data = packet->rtcp->data + packet->offset + 2;
+  wordlen += 2;
+  GST_WRITE_UINT16_BE (data, wordlen);
+
+  return TRUE;
+}
+
+/**
+ * gst_rtcp_packet_fb_get_fci:
+ * @packet: a valid RTPFB or PSFB #GstRTCPPacket
+ *
+ * Get the Feedback Control Information attached to a RTPFB or PSFB @packet.
+ *
+ * Returns: a pointer to the FCI
+ *
+ * Since: 0.10.31
+ */
+guint8 *
+gst_rtcp_packet_fb_get_fci (GstRTCPPacket * packet)
+{
+  guint8 *data;
+
+  g_return_val_if_fail (packet != NULL, NULL);
+  g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
+      packet->type == GST_RTCP_TYPE_PSFB, NULL);
+
+  data = packet->rtcp->data + packet->offset;
+
+  if (GST_READ_UINT16_BE (data + 2) <= 2)
+    return NULL;
+
+  return data + 12;
+}
diff --git a/gst-libs/gst/rtp/gstrtcpbuffer.h b/gst-libs/gst/rtp/gstrtcpbuffer.h
new file mode 100644
index 0000000..a9a547d
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtcpbuffer.h
@@ -0,0 +1,299 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
+ *
+ * gstrtcpbuffer.h: various helper functions to manipulate buffers
+ *     with RTCP payload.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTCPBUFFER_H__
+#define __GST_RTCPBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_RTCP_VERSION:
+ *
+ * The supported RTCP version 2.
+ */
+#define GST_RTCP_VERSION 2
+
+/** 
+ * GstRTCPType:
+ * @GST_RTCP_TYPE_INVALID: Invalid type
+ * @GST_RTCP_TYPE_SR: Sender report
+ * @GST_RTCP_TYPE_RR: Receiver report
+ * @GST_RTCP_TYPE_SDES: Source description
+ * @GST_RTCP_TYPE_BYE: Goodbye
+ * @GST_RTCP_TYPE_APP: Application defined
+ * @GST_RTCP_TYPE_RTPFB: Transport layer feedback. Since: 0.10.23
+ * @GST_RTCP_TYPE_PSFB: Payload-specific feedback. Since: 0.10.23
+ *
+ * Different RTCP packet types.
+ */
+typedef enum
+{
+  GST_RTCP_TYPE_INVALID = 0,
+  GST_RTCP_TYPE_SR      = 200,
+  GST_RTCP_TYPE_RR      = 201,
+  GST_RTCP_TYPE_SDES    = 202,
+  GST_RTCP_TYPE_BYE     = 203,
+  GST_RTCP_TYPE_APP     = 204,
+  GST_RTCP_TYPE_RTPFB   = 205,
+  GST_RTCP_TYPE_PSFB    = 206
+} GstRTCPType;
+
+/**
+ * GstRTCPFBType:
+ * @GST_RTCP_FB_TYPE_INVALID: Invalid type
+ * @GST_RTCP_RTPFB_TYPE_NACK: Generic NACK
+ * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication
+ * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication
+ * @GST_RTCP_PSFB_TYPE_RPSI: Reference Picture Selection Indication
+ * @GST_RTCP_PSFB_TYPE_AFB: Application layer Feedback
+ *
+ * Different types of feedback messages.
+ *
+ * Since: 0.10.23
+ */
+typedef enum
+{
+  /* generic */
+  GST_RTCP_FB_TYPE_INVALID    = 0,
+  /* RTPFB types */
+  GST_RTCP_RTPFB_TYPE_NACK    = 1,
+  /* PSFB types */
+  GST_RTCP_PSFB_TYPE_PLI      = 1,
+  GST_RTCP_PSFB_TYPE_SLI      = 2,
+  GST_RTCP_PSFB_TYPE_RPSI     = 3,
+  GST_RTCP_PSFB_TYPE_AFB      = 15
+} GstRTCPFBType;
+
+/** 
+ * GstRTCPSDESType:
+ * @GST_RTCP_SDES_INVALID: Invalid SDES entry
+ * @GST_RTCP_SDES_END: End of SDES list
+ * @GST_RTCP_SDES_CNAME: Canonical name
+ * @GST_RTCP_SDES_NAME: User name
+ * @GST_RTCP_SDES_EMAIL: User's electronic mail address
+ * @GST_RTCP_SDES_PHONE: User's phone number
+ * @GST_RTCP_SDES_LOC: Geographic user location
+ * @GST_RTCP_SDES_TOOL: Name of application or tool
+ * @GST_RTCP_SDES_NOTE: Notice about the source
+ * @GST_RTCP_SDES_PRIV: Private extensions
+ *
+ * Different types of SDES content.
+ */
+typedef enum 
+{
+  GST_RTCP_SDES_INVALID  = -1,
+  GST_RTCP_SDES_END      = 0,
+  GST_RTCP_SDES_CNAME    = 1,
+  GST_RTCP_SDES_NAME     = 2,
+  GST_RTCP_SDES_EMAIL    = 3,
+  GST_RTCP_SDES_PHONE    = 4,
+  GST_RTCP_SDES_LOC      = 5,
+  GST_RTCP_SDES_TOOL     = 6,
+  GST_RTCP_SDES_NOTE     = 7,
+  GST_RTCP_SDES_PRIV     = 8
+} GstRTCPSDESType;
+
+/**
+ * GST_RTCP_MAX_SDES:
+ *
+ * The maximum text length for an SDES item.
+ */
+#define GST_RTCP_MAX_SDES 255
+
+/**
+ * GST_RTCP_MAX_RB_COUNT:
+ *
+ * The maximum amount of Receiver report blocks in RR and SR messages.
+ */
+#define GST_RTCP_MAX_RB_COUNT   31
+
+/**
+ * GST_RTCP_MAX_SDES_ITEM_COUNT:
+ *
+ * The maximum amount of SDES items.
+ */
+#define GST_RTCP_MAX_SDES_ITEM_COUNT   31
+
+/**
+ * GST_RTCP_MAX_BYE_SSRC_COUNT:
+ *
+ * The maximum amount of SSRCs in a BYE packet.
+ */
+#define GST_RTCP_MAX_BYE_SSRC_COUNT   31
+
+/**
+ * GST_RTCP_VALID_MASK:
+ *
+ * Mask for version, padding bit and packet type pair
+ */
+#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
+/**
+ * GST_RTCP_VALID_VALUE:
+ *
+ * Valid value for the first two bytes of an RTCP packet after applying
+ * #GST_RTCP_VALID_MASK to them.
+ */
+#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)
+
+typedef struct _GstRTCPBuffer GstRTCPBuffer;
+typedef struct _GstRTCPPacket GstRTCPPacket;
+
+struct _GstRTCPBuffer
+{
+  GstBuffer   *buffer;
+
+  GstMapFlags  flags;
+  guint8      *data;
+  gsize        size;
+  gsize        maxsize;
+};
+
+/**
+ * GstRTCPPacket:
+ * @buffer: pointer to RTCP buffer
+ * @offset: offset of packet in buffer data
+ *
+ * Data structure that points to a packet at @offset in @buffer. 
+ * The size of the structure is made public to allow stack allocations.
+ */
+struct _GstRTCPPacket
+{ 
+  GstRTCPBuffer *rtcp;
+  guint         offset;
+  
+  /*< private >*/
+  gboolean     padding;      /* padding field of current packet */
+  guint8       count;        /* count field of current packet */
+  GstRTCPType  type;         /* type of current packet */
+  guint16      length;       /* length of current packet in 32-bits words */
+
+  guint        item_offset;  /* current item offset for navigating SDES */
+  guint        item_count;   /* current item count */
+  guint        entry_offset; /* current entry offset for navigating SDES items */
+};
+
+/* creating buffers */
+GstBuffer*      gst_rtcp_buffer_new_take_data     (gpointer data, guint len);
+GstBuffer*      gst_rtcp_buffer_new_copy_data     (gpointer data, guint len);
+
+gboolean        gst_rtcp_buffer_validate_data     (guint8 *data, guint len);
+gboolean        gst_rtcp_buffer_validate          (GstBuffer *buffer);
+
+GstBuffer*      gst_rtcp_buffer_new               (guint mtu);
+
+gboolean        gst_rtcp_buffer_map               (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp);
+gboolean        gst_rtcp_buffer_unmap             (GstRTCPBuffer *rtcp);
+
+/* adding/retrieving packets */
+guint           gst_rtcp_buffer_get_packet_count  (GstRTCPBuffer *rtcp);
+gboolean        gst_rtcp_buffer_get_first_packet  (GstRTCPBuffer *rtcp, GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_move_to_next      (GstRTCPPacket *packet);
+
+gboolean        gst_rtcp_buffer_add_packet        (GstRTCPBuffer *rtcp, GstRTCPType type,
+		                                   GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_remove            (GstRTCPPacket *packet);
+
+/* working with packets */
+gboolean        gst_rtcp_packet_get_padding       (GstRTCPPacket *packet);
+guint8          gst_rtcp_packet_get_count         (GstRTCPPacket *packet);
+GstRTCPType     gst_rtcp_packet_get_type          (GstRTCPPacket *packet);
+guint16         gst_rtcp_packet_get_length        (GstRTCPPacket *packet);
+
+
+/* sender reports */ 
+void            gst_rtcp_packet_sr_get_sender_info    (GstRTCPPacket *packet, guint32 *ssrc, 
+                                                       guint64 *ntptime, guint32 *rtptime, 
+						       guint32 *packet_count, guint32 *octet_count);
+void            gst_rtcp_packet_sr_set_sender_info    (GstRTCPPacket *packet, guint32 ssrc, 
+                                                       guint64 ntptime, guint32 rtptime, 
+						       guint32 packet_count, guint32 octet_count);
+/* receiver reports */ 
+guint32         gst_rtcp_packet_rr_get_ssrc           (GstRTCPPacket *packet);
+void            gst_rtcp_packet_rr_set_ssrc           (GstRTCPPacket *packet, guint32 ssrc);
+
+
+/* report blocks for SR and RR */
+guint           gst_rtcp_packet_get_rb_count          (GstRTCPPacket *packet);
+void            gst_rtcp_packet_get_rb                (GstRTCPPacket *packet, guint nth, guint32 *ssrc,
+		                                       guint8 *fractionlost, gint32 *packetslost,
+						       guint32 *exthighestseq, guint32 *jitter,
+						       guint32 *lsr, guint32 *dlsr);
+gboolean        gst_rtcp_packet_add_rb                (GstRTCPPacket *packet, guint32 ssrc,
+		                                       guint8 fractionlost, gint32 packetslost,
+						       guint32 exthighestseq, guint32 jitter,
+						       guint32 lsr, guint32 dlsr);
+void            gst_rtcp_packet_set_rb                (GstRTCPPacket *packet, guint nth, guint32 ssrc,
+		                                       guint8 fractionlost, gint32 packetslost,
+						       guint32 exthighestseq, guint32 jitter,
+						       guint32 lsr, guint32 dlsr);
+
+/* source description packet */
+guint           gst_rtcp_packet_sdes_get_item_count   (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_sdes_first_item       (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_sdes_next_item        (GstRTCPPacket *packet);
+guint32         gst_rtcp_packet_sdes_get_ssrc         (GstRTCPPacket *packet); 
+gboolean        gst_rtcp_packet_sdes_first_entry      (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_sdes_next_entry       (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_sdes_get_entry        (GstRTCPPacket *packet, 
+                                                       GstRTCPSDESType *type, guint8 *len,
+						       guint8 **data);
+gboolean        gst_rtcp_packet_sdes_copy_entry       (GstRTCPPacket *packet, 
+                                                       GstRTCPSDESType *type, guint8 *len,
+						       guint8 **data);
+
+gboolean        gst_rtcp_packet_sdes_add_item         (GstRTCPPacket *packet, guint32 ssrc);
+gboolean        gst_rtcp_packet_sdes_add_entry        (GstRTCPPacket *packet, GstRTCPSDESType type, 
+                                                       guint8 len, const guint8 *data);
+
+/* bye packet */
+guint           gst_rtcp_packet_bye_get_ssrc_count    (GstRTCPPacket *packet);
+guint32         gst_rtcp_packet_bye_get_nth_ssrc      (GstRTCPPacket *packet, guint nth);
+gboolean        gst_rtcp_packet_bye_add_ssrc          (GstRTCPPacket *packet, guint32 ssrc);
+gboolean        gst_rtcp_packet_bye_add_ssrcs         (GstRTCPPacket *packet, guint32 *ssrc, guint len);
+guint8          gst_rtcp_packet_bye_get_reason_len    (GstRTCPPacket *packet);
+gchar*          gst_rtcp_packet_bye_get_reason        (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_bye_set_reason        (GstRTCPPacket *packet, const gchar *reason);
+
+/* feedback packets */
+guint32         gst_rtcp_packet_fb_get_sender_ssrc    (GstRTCPPacket *packet);
+void            gst_rtcp_packet_fb_set_sender_ssrc    (GstRTCPPacket *packet, guint32 ssrc);
+guint32         gst_rtcp_packet_fb_get_media_ssrc     (GstRTCPPacket *packet);
+void            gst_rtcp_packet_fb_set_media_ssrc     (GstRTCPPacket *packet, guint32 ssrc);
+GstRTCPFBType   gst_rtcp_packet_fb_get_type           (GstRTCPPacket *packet);
+void            gst_rtcp_packet_fb_set_type           (GstRTCPPacket *packet, GstRTCPFBType type);
+guint16         gst_rtcp_packet_fb_get_fci_length     (GstRTCPPacket *packet);
+gboolean        gst_rtcp_packet_fb_set_fci_length     (GstRTCPPacket *packet, guint16 wordlen);
+guint8 *        gst_rtcp_packet_fb_get_fci            (GstRTCPPacket *packet);
+
+/* helper functions */
+guint64         gst_rtcp_ntp_to_unix                  (guint64 ntptime);
+guint64         gst_rtcp_unix_to_ntp                  (guint64 unixtime);
+
+const gchar *   gst_rtcp_sdes_type_to_name            (GstRTCPSDESType type);
+GstRTCPSDESType gst_rtcp_sdes_name_to_type            (const gchar *name);
+
+G_END_DECLS
+
+#endif /* __GST_RTCPBUFFER_H__ */
+
diff --git a/gst-libs/gst/rtp/gstrtpbuffer.c b/gst-libs/gst/rtp/gstrtpbuffer.c
new file mode 100644
index 0000000..0b1f916
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtpbuffer.c
@@ -0,0 +1,1517 @@
+/* GStreamer
+ * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
+ * Copyright (C) <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstrtpbuffer
+ * @short_description: Helper methods for dealing with RTP buffers
+ * @see_also: #GstBaseRTPPayload, #GstBaseRTPDepayload, gstrtcpbuffer
+ *
+ * <refsect2>
+ * <para>
+ * The GstRTPBuffer helper functions makes it easy to parse and create regular 
+ * #GstBuffer objects that contain RTP payloads. These buffers are typically of
+ * 'application/x-rtp' #GstCaps.
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2006-07-17 (0.10.10)
+ */
+
+#include "gstrtpbuffer.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#define GST_RTP_HEADER_LEN 12
+
+/* Note: we use bitfields here to make sure the compiler doesn't add padding
+ * between fields on certain architectures; can't assume aligned access either
+ */
+typedef struct _GstRTPHeader
+{
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  unsigned int csrc_count:4;    /* CSRC count */
+  unsigned int extension:1;     /* header extension flag */
+  unsigned int padding:1;       /* padding flag */
+  unsigned int version:2;       /* protocol version */
+  unsigned int payload_type:7;  /* payload type */
+  unsigned int marker:1;        /* marker bit */
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+  unsigned int version:2;       /* protocol version */
+  unsigned int padding:1;       /* padding flag */
+  unsigned int extension:1;     /* header extension flag */
+  unsigned int csrc_count:4;    /* CSRC count */
+  unsigned int marker:1;        /* marker bit */
+  unsigned int payload_type:7;  /* payload type */
+#else
+#error "G_BYTE_ORDER should be big or little endian."
+#endif
+  unsigned int seq:16;          /* sequence number */
+  unsigned int timestamp:32;    /* timestamp */
+  unsigned int ssrc:32;         /* synchronization source */
+  guint8 csrclist[4];           /* optional CSRC list, 32 bits each */
+} GstRTPHeader;
+
+#define GST_RTP_HEADER_VERSION(data)      (((GstRTPHeader *)(data))->version)
+#define GST_RTP_HEADER_PADDING(data)      (((GstRTPHeader *)(data))->padding)
+#define GST_RTP_HEADER_EXTENSION(data)    (((GstRTPHeader *)(data))->extension)
+#define GST_RTP_HEADER_CSRC_COUNT(data)   (((GstRTPHeader *)(data))->csrc_count)
+#define GST_RTP_HEADER_MARKER(data)       (((GstRTPHeader *)(data))->marker)
+#define GST_RTP_HEADER_PAYLOAD_TYPE(data) (((GstRTPHeader *)(data))->payload_type)
+#define GST_RTP_HEADER_SEQ(data)          (((GstRTPHeader *)(data))->seq)
+#define GST_RTP_HEADER_TIMESTAMP(data)    (((GstRTPHeader *)(data))->timestamp)
+#define GST_RTP_HEADER_SSRC(data)         (((GstRTPHeader *)(data))->ssrc)
+#define GST_RTP_HEADER_CSRC_LIST_OFFSET(data,i)        \
+    data + G_STRUCT_OFFSET(GstRTPHeader, csrclist) +   \
+    ((i) * sizeof(guint32))
+#define GST_RTP_HEADER_CSRC_SIZE(data)   (GST_RTP_HEADER_CSRC_COUNT(data) * sizeof (guint32))
+
+/**
+ * gst_rtp_buffer_allocate_data:
+ * @buffer: a #GstBuffer
+ * @payload_len: the length of the payload
+ * @pad_len: the amount of padding
+ * @csrc_count: the number of CSRC entries
+ *
+ * Allocate enough data in @buffer to hold an RTP packet with @csrc_count CSRCs,
+ * a payload length of @payload_len and padding of @pad_len.
+ * MALLOCDATA of @buffer will be overwritten and will not be freed. 
+ * All other RTP header fields will be set to 0/FALSE.
+ */
+void
+gst_rtp_buffer_allocate_data (GstBuffer * buffer, guint payload_len,
+    guint8 pad_len, guint8 csrc_count)
+{
+  guint len;
+  guint8 *data;
+  GstMemory *mem;
+
+  g_return_if_fail (csrc_count <= 15);
+  g_return_if_fail (GST_IS_BUFFER (buffer));
+
+  len = GST_RTP_HEADER_LEN + csrc_count * sizeof (guint32)
+      + payload_len + pad_len;
+
+  mem = gst_allocator_alloc (NULL, len, 0);
+
+  data = gst_memory_map (mem, NULL, NULL, GST_MAP_WRITE);
+  /* fill in defaults */
+  GST_RTP_HEADER_VERSION (data) = GST_RTP_VERSION;
+  GST_RTP_HEADER_PADDING (data) = FALSE;
+  GST_RTP_HEADER_EXTENSION (data) = FALSE;
+  GST_RTP_HEADER_CSRC_COUNT (data) = csrc_count;
+  memset (GST_RTP_HEADER_CSRC_LIST_OFFSET (data, 0), 0,
+      csrc_count * sizeof (guint32));
+  GST_RTP_HEADER_MARKER (data) = FALSE;
+  GST_RTP_HEADER_PAYLOAD_TYPE (data) = 0;
+  GST_RTP_HEADER_SEQ (data) = 0;
+  GST_RTP_HEADER_TIMESTAMP (data) = 0;
+  GST_RTP_HEADER_SSRC (data) = 0;
+  gst_memory_unmap (mem, data, len);
+
+  gst_buffer_take_memory (buffer, -1, mem);
+}
+
+/**
+ * gst_rtp_buffer_new_take_data:
+ * @data: data for the new buffer
+ * @len: the length of data
+ *
+ * Create a new buffer and set the data and size of the buffer to @data and @len
+ * respectively. @data will be freed when the buffer is unreffed, so this
+ * function transfers ownership of @data to the new buffer.
+ *
+ * Returns: A newly allocated buffer with @data and of size @len.
+ */
+GstBuffer *
+gst_rtp_buffer_new_take_data (gpointer data, gsize len)
+{
+  GstBuffer *result;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (len > 0, NULL);
+
+  result = gst_buffer_new ();
+  gst_buffer_take_memory (result, -1,
+      gst_memory_new_wrapped (0, data, g_free, len, 0, len));
+
+  return result;
+}
+
+/**
+ * gst_rtp_buffer_new_copy_data:
+ * @data: data for the new buffer
+ * @len: the length of data
+ *
+ * Create a new buffer and set the data to a copy of @len
+ * bytes of @data and the size to @len. The data will be freed when the buffer
+ * is freed.
+ *
+ * Returns: A newly allocated buffer with a copy of @data and of size @len.
+ */
+GstBuffer *
+gst_rtp_buffer_new_copy_data (gpointer data, gsize len)
+{
+  return gst_rtp_buffer_new_take_data (g_memdup (data, len), len);
+}
+
+/**
+ * gst_rtp_buffer_new_allocate:
+ * @payload_len: the length of the payload
+ * @pad_len: the amount of padding
+ * @csrc_count: the number of CSRC entries
+ *
+ * Allocate a new #GstBuffer with enough data to hold an RTP packet with
+ * @csrc_count CSRCs, a payload length of @payload_len and padding of @pad_len.
+ * All other RTP header fields will be set to 0/FALSE.
+ *
+ * Returns: A newly allocated buffer that can hold an RTP packet with given
+ * parameters.
+ */
+GstBuffer *
+gst_rtp_buffer_new_allocate (guint payload_len, guint8 pad_len,
+    guint8 csrc_count)
+{
+  GstBuffer *result;
+
+  g_return_val_if_fail (csrc_count <= 15, NULL);
+
+  result = gst_buffer_new ();
+  gst_rtp_buffer_allocate_data (result, payload_len, pad_len, csrc_count);
+
+  return result;
+}
+
+/**
+ * gst_rtp_buffer_new_allocate_len:
+ * @rtp_len: the total length of the packet
+ * @pad_len: the amount of padding
+ * @csrc_count: the number of CSRC entries
+ *
+ * Create a new #GstBuffer that can hold an RTP packet that is exactly
+ * @packet_len long. The length of the payload depends on @pad_len and
+ * @csrc_count and can be calculated with gst_rtp_buffer_calc_payload_len().
+ * All RTP header fields will be set to 0/FALSE.
+ *
+ * Returns: A newly allocated buffer that can hold an RTP packet of @packet_len.
+ */
+GstBuffer *
+gst_rtp_buffer_new_allocate_len (guint packet_len, guint8 pad_len,
+    guint8 csrc_count)
+{
+  guint len;
+
+  g_return_val_if_fail (csrc_count <= 15, NULL);
+
+  len = gst_rtp_buffer_calc_payload_len (packet_len, pad_len, csrc_count);
+
+  return gst_rtp_buffer_new_allocate (len, pad_len, csrc_count);
+}
+
+/**
+ * gst_rtp_buffer_calc_header_len:
+ * @csrc_count: the number of CSRC entries
+ *
+ * Calculate the header length of an RTP packet with @csrc_count CSRC entries.
+ * An RTP packet can have at most 15 CSRC entries.
+ *
+ * Returns: The length of an RTP header with @csrc_count CSRC entries.
+ */
+guint
+gst_rtp_buffer_calc_header_len (guint8 csrc_count)
+{
+  g_return_val_if_fail (csrc_count <= 15, 0);
+
+  return GST_RTP_HEADER_LEN + (csrc_count * sizeof (guint32));
+}
+
+/**
+ * gst_rtp_buffer_calc_packet_len:
+ * @payload_len: the length of the payload
+ * @pad_len: the amount of padding
+ * @csrc_count: the number of CSRC entries
+ *
+ * Calculate the total length of an RTP packet with a payload size of @payload_len,
+ * a padding of @pad_len and a @csrc_count CSRC entries.
+ *
+ * Returns: The total length of an RTP header with given parameters.
+ */
+guint
+gst_rtp_buffer_calc_packet_len (guint payload_len, guint8 pad_len,
+    guint8 csrc_count)
+{
+  g_return_val_if_fail (csrc_count <= 15, 0);
+
+  return payload_len + GST_RTP_HEADER_LEN + (csrc_count * sizeof (guint32))
+      + pad_len;
+}
+
+/**
+ * gst_rtp_buffer_calc_payload_len:
+ * @packet_len: the length of the total RTP packet
+ * @pad_len: the amount of padding
+ * @csrc_count: the number of CSRC entries
+ *
+ * Calculate the length of the payload of an RTP packet with size @packet_len,
+ * a padding of @pad_len and a @csrc_count CSRC entries.
+ *
+ * Returns: The length of the payload of an RTP packet  with given parameters.
+ */
+guint
+gst_rtp_buffer_calc_payload_len (guint packet_len, guint8 pad_len,
+    guint8 csrc_count)
+{
+  g_return_val_if_fail (csrc_count <= 15, 0);
+
+  return packet_len - GST_RTP_HEADER_LEN - (csrc_count * sizeof (guint32))
+      - pad_len;
+}
+
+/*
+ * validate_data:
+ * @data: the data to validate
+ * @len: the length of @data to validate
+ * @payload: the payload if @data represents the header only
+ * @payload_len: the len of the payload
+ *
+ * Checks if @data is a valid RTP packet.
+ *
+ * Returns: TRUE if @data is a valid RTP packet
+ */
+static gboolean
+validate_data (guint8 * data, guint len, guint8 * payload, guint payload_len)
+{
+  guint8 padding;
+  guint8 csrc_count;
+  guint header_len;
+  guint8 version;
+
+  g_return_val_if_fail (data != NULL, FALSE);
+
+  header_len = GST_RTP_HEADER_LEN;
+  if (G_UNLIKELY (len < header_len))
+    goto wrong_length;
+
+  /* check version */
+  version = (data[0] & 0xc0);
+  if (G_UNLIKELY (version != (GST_RTP_VERSION << 6)))
+    goto wrong_version;
+
+  /* calc header length with csrc */
+  csrc_count = (data[0] & 0x0f);
+  header_len += csrc_count * sizeof (guint32);
+
+  /* calc extension length when present. */
+  if (data[0] & 0x10) {
+    guint8 *extpos;
+    guint16 extlen;
+
+    /* this points to the extenstion bits and header length */
+    extpos = &data[header_len];
+
+    /* skip the header and check that we have enough space */
+    header_len += 4;
+    if (G_UNLIKELY (len < header_len))
+      goto wrong_length;
+
+    /* skip id */
+    extpos += 2;
+    /* read length as the number of 32 bits words */
+    extlen = GST_READ_UINT16_BE (extpos);
+
+    header_len += extlen * sizeof (guint32);
+  }
+
+  /* check for padding */
+  if (data[0] & 0x20) {
+    if (payload)
+      padding = payload[payload_len - 1];
+    else
+      padding = data[len - 1];
+  } else {
+    padding = 0;
+  }
+
+  /* check if padding and header not bigger than packet length */
+  if (G_UNLIKELY (len < padding + header_len))
+    goto wrong_padding;
+
+  return TRUE;
+
+  /* ERRORS */
+wrong_length:
+  {
+    GST_DEBUG ("len < header_len check failed (%d < %d)", len, header_len);
+    goto dump_packet;
+  }
+wrong_version:
+  {
+    GST_DEBUG ("version check failed (%d != %d)", version, GST_RTP_VERSION);
+    goto dump_packet;
+  }
+wrong_padding:
+  {
+    GST_DEBUG ("padding check failed (%d - %d < %d)", len, header_len, padding);
+    goto dump_packet;
+  }
+dump_packet:
+  {
+    GST_MEMDUMP ("buffer", data, len);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtp_buffer_validate_data:
+ * @data: the data to validate
+ * @len: the length of @data to validate
+ *
+ * Check if the @data and @size point to the data of a valid RTP packet.
+ * This function checks the length, version and padding of the packet data.
+ * Use this function to validate a packet before using the other functions in
+ * this module.
+ *
+ * Returns: TRUE if the data points to a valid RTP packet.
+ */
+gboolean
+gst_rtp_buffer_validate_data (guint8 * data, gsize len)
+{
+  return validate_data (data, len, NULL, 0);
+}
+
+/**
+ * gst_rtp_buffer_validate:
+ * @buffer: the buffer to validate
+ *
+ * Check if the data pointed to by @buffer is a valid RTP packet using
+ * gst_rtp_buffer_validate_data().
+ * Use this function to validate a packet before using the other functions in
+ * this module.
+ *
+ * Returns: TRUE if @buffer is a valid RTP packet.
+ */
+gboolean
+gst_rtp_buffer_validate (GstBuffer * buffer)
+{
+  gboolean res;
+  guint8 *data;
+  gsize len;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+
+  data = gst_buffer_map (buffer, &len, NULL, GST_MAP_READ);
+  res = validate_data (data, len, NULL, 0);
+  gst_buffer_unmap (buffer, data, len);
+
+  return res;
+}
+
+gboolean
+gst_rtp_buffer_map (GstBuffer * buffer, GstMapFlags flags, GstRTPBuffer * rtp)
+{
+  guint8 *data;
+  gsize size, maxsize;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+  g_return_val_if_fail (rtp != NULL, FALSE);
+  g_return_val_if_fail (rtp->buffer == NULL, FALSE);
+
+  data = gst_buffer_map (buffer, &size, &maxsize, flags);
+  if (data == NULL)
+    return FALSE;
+
+  rtp->buffer = buffer;
+  rtp->flags = flags;
+  rtp->data = data;
+  rtp->size = size;
+  rtp->maxsize = maxsize;
+
+  return TRUE;
+}
+
+gboolean
+gst_rtp_buffer_unmap (GstRTPBuffer * rtp)
+{
+  g_return_val_if_fail (rtp != NULL, FALSE);
+  g_return_val_if_fail (rtp->buffer != NULL, FALSE);
+
+  gst_buffer_unmap (rtp->buffer, rtp->data, rtp->size);
+
+  rtp->buffer = NULL;
+
+  return TRUE;
+}
+
+
+/**
+ * gst_rtp_buffer_set_packet_len:
+ * @rtp: the RTP packet
+ * @len: the new packet length
+ *
+ * Set the total @rtp size to @len. The data in the buffer will be made
+ * larger if needed. Any padding will be removed from the packet.
+ */
+void
+gst_rtp_buffer_set_packet_len (GstRTPBuffer * rtp, guint len)
+{
+  guint8 *data;
+
+  data = rtp->data;
+
+  if (rtp->maxsize <= len) {
+    /* FIXME, realloc bigger space */
+    g_warning ("not implemented");
+  }
+
+  gst_buffer_set_size (rtp->buffer, len);
+  rtp->size = len;
+
+  /* remove any padding */
+  GST_RTP_HEADER_PADDING (data) = FALSE;
+}
+
+/**
+ * gst_rtp_buffer_get_packet_len:
+ * @rtp: the RTP packet
+ *
+ * Return the total length of the packet in @buffer.
+ *
+ * Returns: The total length of the packet in @buffer.
+ */
+guint
+gst_rtp_buffer_get_packet_len (GstRTPBuffer * rtp)
+{
+  return gst_buffer_get_size (rtp->buffer);
+}
+
+/**
+ * gst_rtp_buffer_get_header_len:
+ * @rtp: the RTP packet
+ *
+ * Return the total length of the header in @buffer. This include the length of
+ * the fixed header, the CSRC list and the extension header.
+ *
+ * Returns: The total length of the header in @buffer.
+ */
+guint
+gst_rtp_buffer_get_header_len (GstRTPBuffer * rtp)
+{
+  guint len;
+  guint8 *data;
+
+  data = rtp->data;
+
+  len = GST_RTP_HEADER_LEN + GST_RTP_HEADER_CSRC_SIZE (data);
+  if (GST_RTP_HEADER_EXTENSION (data))
+    len += GST_READ_UINT16_BE (data + len + 2) * 4 + 4;
+
+  return len;
+}
+
+/**
+ * gst_rtp_buffer_get_version:
+ * @rtp: the RTP packet
+ *
+ * Get the version number of the RTP packet in @buffer.
+ *
+ * Returns: The version of @buffer.
+ */
+guint8
+gst_rtp_buffer_get_version (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_VERSION (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_set_version:
+ * @rtp: the RTP packet
+ * @version: the new version
+ *
+ * Set the version of the RTP packet in @buffer to @version.
+ */
+void
+gst_rtp_buffer_set_version (GstRTPBuffer * rtp, guint8 version)
+{
+  g_return_if_fail (version < 0x04);
+
+  GST_RTP_HEADER_VERSION (rtp->data) = version;
+}
+
+/**
+ * gst_rtp_buffer_get_padding:
+ * @rtp: the RTP packet
+ *
+ * Check if the padding bit is set on the RTP packet in @buffer.
+ *
+ * Returns: TRUE if @buffer has the padding bit set.
+ */
+gboolean
+gst_rtp_buffer_get_padding (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_PADDING (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_set_padding:
+ * @buffer: the buffer
+ * @padding: the new padding
+ *
+ * Set the padding bit on the RTP packet in @buffer to @padding.
+ */
+void
+gst_rtp_buffer_set_padding (GstRTPBuffer * rtp, gboolean padding)
+{
+  GST_RTP_HEADER_PADDING (rtp->data) = padding;
+}
+
+/**
+ * gst_rtp_buffer_pad_to:
+ * @rtp: the RTP packet
+ * @len: the new amount of padding
+ *
+ * Set the amount of padding in the RTP packet in @buffer to
+ * @len. If @len is 0, the padding is removed.
+ *
+ * NOTE: This function does not work correctly.
+ */
+void
+gst_rtp_buffer_pad_to (GstRTPBuffer * rtp, guint len)
+{
+  guint8 *data;
+
+  data = rtp->data;
+
+  if (len > 0)
+    GST_RTP_HEADER_PADDING (data) = TRUE;
+  else
+    GST_RTP_HEADER_PADDING (data) = FALSE;
+
+  /* FIXME, set the padding byte at the end of the payload data */
+}
+
+/**
+ * gst_rtp_buffer_get_extension:
+ * @rtp: the RTP packet
+ *
+ * Check if the extension bit is set on the RTP packet in @buffer.
+ * 
+ * Returns: TRUE if @buffer has the extension bit set.
+ */
+gboolean
+gst_rtp_buffer_get_extension (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_EXTENSION (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_set_extension:
+ * @rtp: the RTP packet
+ * @extension: the new extension
+ *
+ * Set the extension bit on the RTP packet in @buffer to @extension.
+ */
+void
+gst_rtp_buffer_set_extension (GstRTPBuffer * rtp, gboolean extension)
+{
+  GST_RTP_HEADER_EXTENSION (rtp->data) = extension;
+}
+
+/**
+ * gst_rtp_buffer_get_extension_data:
+ * @rtp: the RTP packet
+ * @bits: location for result bits
+ * @data: location for data
+ * @wordlen: location for length of @data in 32 bits words
+ *
+ * Get the extension data. @bits will contain the extension 16 bits of custom
+ * data. @data will point to the data in the extension and @wordlen will contain
+ * the length of @data in 32 bits words.
+ *
+ * If @buffer did not contain an extension, this function will return %FALSE
+ * with @bits, @data and @wordlen unchanged.
+ * 
+ * Returns: TRUE if @buffer had the extension bit set.
+ *
+ * Since: 0.10.15
+ */
+gboolean
+gst_rtp_buffer_get_extension_data (GstRTPBuffer * rtp, guint16 * bits,
+    gpointer * data, guint * wordlen)
+{
+  guint len;
+  guint8 *pdata;
+
+  pdata = rtp->data;
+
+  if (!GST_RTP_HEADER_EXTENSION (pdata))
+    return FALSE;
+
+  /* move to the extension */
+  len = GST_RTP_HEADER_LEN + GST_RTP_HEADER_CSRC_SIZE (pdata);
+  pdata += len;
+
+  if (bits)
+    *bits = GST_READ_UINT16_BE (pdata);
+  if (wordlen)
+    *wordlen = GST_READ_UINT16_BE (pdata + 2);
+  if (data)
+    *data = pdata + 4;
+
+  return TRUE;
+}
+
+/**
+ * gst_rtp_buffer_set_extension_data:
+ * @rtp: the RTP packet
+ * @bits: the bits specific for the extension
+ * @length: the length that counts the number of 32-bit words in
+ * the extension, excluding the extension header ( therefore zero is a valid length)
+ *
+ * Set the extension bit of the rtp buffer and fill in the @bits and @length of the
+ * extension header. It will refuse to set the extension data if the buffer is not
+ * large enough.
+ *
+ * Returns: True if done.
+ *
+ * Since: 0.10.18
+ */
+gboolean
+gst_rtp_buffer_set_extension_data (GstRTPBuffer * rtp, guint16 bits,
+    guint16 length)
+{
+  guint32 min_size = 0;
+  guint8 *data;
+
+  data = rtp->data;
+
+  /* check if the buffer is big enough to hold the extension */
+  min_size =
+      GST_RTP_HEADER_LEN + GST_RTP_HEADER_CSRC_SIZE (data) + 4 +
+      length * sizeof (guint32);
+  if (G_UNLIKELY (min_size > rtp->size))
+    goto too_small;
+
+  /* now we can set the extension bit */
+  GST_RTP_HEADER_EXTENSION (rtp->data) = TRUE;
+
+  data += GST_RTP_HEADER_LEN + GST_RTP_HEADER_CSRC_SIZE (data);
+  GST_WRITE_UINT16_BE (data, bits);
+  GST_WRITE_UINT16_BE (data + 2, length);
+
+  return TRUE;
+
+  /* ERRORS */
+too_small:
+  {
+    g_warning
+        ("rtp buffer too small: need more than %d bytes but only have %"
+        G_GSIZE_FORMAT " bytes", min_size, rtp->size);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_rtp_buffer_get_ssrc:
+ * @rtp: the RTP packet
+ *
+ * Get the SSRC of the RTP packet in @buffer.
+ * 
+ * Returns: the SSRC of @buffer in host order.
+ */
+guint32
+gst_rtp_buffer_get_ssrc (GstRTPBuffer * rtp)
+{
+  return g_ntohl (GST_RTP_HEADER_SSRC (rtp->data));
+}
+
+/**
+ * gst_rtp_buffer_set_ssrc:
+ * @rtp: the RTP packet
+ * @ssrc: the new SSRC
+ *
+ * Set the SSRC on the RTP packet in @buffer to @ssrc.
+ */
+void
+gst_rtp_buffer_set_ssrc (GstRTPBuffer * rtp, guint32 ssrc)
+{
+  GST_RTP_HEADER_SSRC (rtp->data) = g_htonl (ssrc);
+}
+
+/**
+ * gst_rtp_buffer_get_csrc_count:
+ * @rtp: the RTP packet
+ *
+ * Get the CSRC count of the RTP packet in @buffer.
+ * 
+ * Returns: the CSRC count of @buffer.
+ */
+guint8
+gst_rtp_buffer_get_csrc_count (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_CSRC_COUNT (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_get_csrc:
+ * @rtp: the RTP packet
+ * @idx: the index of the CSRC to get
+ *
+ * Get the CSRC at index @idx in @buffer.
+ * 
+ * Returns: the CSRC at index @idx in host order.
+ */
+guint32
+gst_rtp_buffer_get_csrc (GstRTPBuffer * rtp, guint8 idx)
+{
+  guint8 *data;
+
+  data = rtp->data;
+
+  g_return_val_if_fail (idx < GST_RTP_HEADER_CSRC_COUNT (data), 0);
+
+  return GST_READ_UINT32_BE (GST_RTP_HEADER_CSRC_LIST_OFFSET (data, idx));
+}
+
+/**
+ * gst_rtp_buffer_set_csrc:
+ * @rtp: the RTP packet
+ * @idx: the CSRC index to set
+ * @csrc: the CSRC in host order to set at @idx
+ *
+ * Modify the CSRC at index @idx in @buffer to @csrc.
+ */
+void
+gst_rtp_buffer_set_csrc (GstRTPBuffer * rtp, guint8 idx, guint32 csrc)
+{
+  guint8 *data;
+
+  data = rtp->data;
+
+  g_return_if_fail (idx < GST_RTP_HEADER_CSRC_COUNT (data));
+
+  GST_WRITE_UINT32_BE (GST_RTP_HEADER_CSRC_LIST_OFFSET (data, idx), csrc);
+}
+
+/**
+ * gst_rtp_buffer_get_marker:
+ * @rtp: the RTP packet
+ *
+ * Check if the marker bit is set on the RTP packet in @buffer.
+ *
+ * Returns: TRUE if @buffer has the marker bit set.
+ */
+gboolean
+gst_rtp_buffer_get_marker (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_MARKER (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_set_marker:
+ * @rtp: the RTP packet
+ * @marker: the new marker
+ *
+ * Set the marker bit on the RTP packet in @buffer to @marker.
+ */
+void
+gst_rtp_buffer_set_marker (GstRTPBuffer * rtp, gboolean marker)
+{
+  GST_RTP_HEADER_MARKER (rtp->data) = marker;
+}
+
+/**
+ * gst_rtp_buffer_get_payload_type:
+ * @rtp: the RTP packet
+ *
+ * Get the payload type of the RTP packet in @buffer.
+ *
+ * Returns: The payload type.
+ */
+guint8
+gst_rtp_buffer_get_payload_type (GstRTPBuffer * rtp)
+{
+  return GST_RTP_HEADER_PAYLOAD_TYPE (rtp->data);
+}
+
+/**
+ * gst_rtp_buffer_set_payload_type:
+ * @rtp: the RTP packet
+ * @payload_type: the new type
+ *
+ * Set the payload type of the RTP packet in @buffer to @payload_type.
+ */
+void
+gst_rtp_buffer_set_payload_type (GstRTPBuffer * rtp, guint8 payload_type)
+{
+  g_return_if_fail (payload_type < 0x80);
+
+  GST_RTP_HEADER_PAYLOAD_TYPE (rtp->data) = payload_type;
+}
+
+/**
+ * gst_rtp_buffer_get_seq:
+ * @rtp: the RTP packet
+ *
+ * Get the sequence number of the RTP packet in @buffer.
+ *
+ * Returns: The sequence number in host order.
+ */
+guint16
+gst_rtp_buffer_get_seq (GstRTPBuffer * rtp)
+{
+  return g_ntohs (GST_RTP_HEADER_SEQ (rtp->data));
+}
+
+/**
+ * gst_rtp_buffer_set_seq:
+ * @rtp: the RTP packet
+ * @seq: the new sequence number
+ *
+ * Set the sequence number of the RTP packet in @buffer to @seq.
+ */
+void
+gst_rtp_buffer_set_seq (GstRTPBuffer * rtp, guint16 seq)
+{
+  GST_RTP_HEADER_SEQ (rtp->data) = g_htons (seq);
+}
+
+/**
+ * gst_rtp_buffer_get_timestamp:
+ * @rtp: the RTP packet
+ *
+ * Get the timestamp of the RTP packet in @buffer.
+ *
+ * Returns: The timestamp in host order.
+ */
+guint32
+gst_rtp_buffer_get_timestamp (GstRTPBuffer * rtp)
+{
+  return g_ntohl (GST_RTP_HEADER_TIMESTAMP (rtp->data));
+}
+
+/**
+ * gst_rtp_buffer_set_timestamp:
+ * @rtp: the RTP packet
+ * @timestamp: the new timestamp
+ *
+ * Set the timestamp of the RTP packet in @buffer to @timestamp.
+ */
+void
+gst_rtp_buffer_set_timestamp (GstRTPBuffer * rtp, guint32 timestamp)
+{
+  GST_RTP_HEADER_TIMESTAMP (rtp->data) = g_htonl (timestamp);
+}
+
+
+/**
+ * gst_rtp_buffer_get_payload_subbuffer:
+ * @rtp: the RTP packet
+ * @offset: the offset in the payload
+ * @len: the length in the payload
+ *
+ * Create a subbuffer of the payload of the RTP packet in @buffer. @offset bytes
+ * are skipped in the payload and the subbuffer will be of size @len.
+ * If @len is -1 the total payload starting from @offset if subbuffered.
+ *
+ * Returns: A new buffer with the specified data of the payload.
+ *
+ * Since: 0.10.10
+ */
+GstBuffer *
+gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer * rtp, guint offset,
+    guint len)
+{
+  guint poffset, plen;
+
+  plen = gst_rtp_buffer_get_payload_len (rtp);
+  /* we can't go past the length */
+  if (G_UNLIKELY (offset >= plen))
+    goto wrong_offset;
+
+  /* apply offset */
+  poffset = gst_rtp_buffer_get_header_len (rtp) + offset;
+  plen -= offset;
+
+  /* see if we need to shrink the buffer based on @len */
+  if (len != -1 && len < plen)
+    plen = len;
+
+  return gst_buffer_copy_region (rtp->buffer, GST_BUFFER_COPY_ALL, poffset,
+      plen);
+
+  /* ERRORS */
+wrong_offset:
+  {
+    g_warning ("offset=%u should be less then plen=%u", offset, plen);
+    return NULL;
+  }
+}
+
+/**
+ * gst_rtp_buffer_get_payload_buffer:
+ * @rtp: the RTP packet
+ *
+ * Create a buffer of the payload of the RTP packet in @buffer. This function
+ * will internally create a subbuffer of @buffer so that a memcpy can be
+ * avoided.
+ *
+ * Returns: A new buffer with the data of the payload.
+ */
+GstBuffer *
+gst_rtp_buffer_get_payload_buffer (GstRTPBuffer * rtp)
+{
+  return gst_rtp_buffer_get_payload_subbuffer (rtp, 0, -1);
+}
+
+/**
+ * gst_rtp_buffer_get_payload_len:
+ * @rtp: the RTP packet
+ *
+ * Get the length of the payload of the RTP packet in @buffer.
+ *
+ * Returns: The length of the payload in @buffer.
+ */
+guint
+gst_rtp_buffer_get_payload_len (GstRTPBuffer * rtp)
+{
+  guint len, size;
+  guint8 *data;
+
+  size = rtp->size;
+  data = rtp->data;
+
+  len = size - gst_rtp_buffer_get_header_len (rtp);
+
+  if (GST_RTP_HEADER_PADDING (data))
+    len -= data[size - 1];
+
+  return len;
+}
+
+/**
+ * gst_rtp_buffer_get_payload:
+ * @rtp: the RTP packet
+ *
+ * Get a pointer to the payload data in @buffer. This pointer is valid as long
+ * as a reference to @buffer is held.
+ *
+ * Returns: A pointer to the payload data in @buffer.
+ */
+gpointer
+gst_rtp_buffer_get_payload (GstRTPBuffer * rtp)
+{
+  return rtp->data + gst_rtp_buffer_get_header_len (rtp);
+}
+
+/**
+ * gst_rtp_buffer_default_clock_rate:
+ * @payload_type: the static payload type
+ *
+ * Get the default clock-rate for the static payload type @payload_type.
+ *
+ * Returns: the default clock rate or -1 if the payload type is not static or
+ * the clock-rate is undefined.
+ *
+ * Since: 0.10.13
+ */
+guint32
+gst_rtp_buffer_default_clock_rate (guint8 payload_type)
+{
+  const GstRTPPayloadInfo *info;
+  guint32 res;
+
+  info = gst_rtp_payload_info_for_pt (payload_type);
+  if (!info)
+    return -1;
+
+  res = info->clock_rate;
+  /* 0 means unknown so we have to return -1 from this function */
+  if (res == 0)
+    res = -1;
+
+  return res;
+}
+
+/**
+ * gst_rtp_buffer_compare_seqnum:
+ * @seqnum1: a sequence number
+ * @seqnum2: a sequence number
+ *
+ * Compare two sequence numbers, taking care of wraparounds. This function
+ * returns the difference between @seqnum1 and @seqnum2.
+ *
+ * Returns: a negative value if @seqnum1 is bigger than @seqnum2, 0 if they
+ * are equal or a positive value if @seqnum1 is smaller than @segnum2.
+ *
+ * Since: 0.10.15
+ */
+gint
+gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
+{
+  return (gint16) (seqnum2 - seqnum1);
+}
+
+/**
+ * gst_rtp_buffer_ext_timestamp:
+ * @exttimestamp: a previous extended timestamp
+ * @timestamp: a new timestamp
+ *
+ * Update the @exttimestamp field with @timestamp. For the first call of the
+ * method, @exttimestamp should point to a location with a value of -1.
+ *
+ * This function makes sure that the returned value is a constantly increasing
+ * value even in the case where there is a timestamp wraparound.
+ *
+ * Returns: The extended timestamp of @timestamp.
+ *
+ * Since: 0.10.15
+ */
+guint64
+gst_rtp_buffer_ext_timestamp (guint64 * exttimestamp, guint32 timestamp)
+{
+  guint64 result, diff, ext;
+
+  g_return_val_if_fail (exttimestamp != NULL, -1);
+
+  ext = *exttimestamp;
+
+  if (ext == -1) {
+    result = timestamp;
+  } else {
+    /* pick wraparound counter from previous timestamp and add to new timestamp */
+    result = timestamp + (ext & ~(G_GINT64_CONSTANT (0xffffffff)));
+
+    /* check for timestamp wraparound */
+    if (result < ext)
+      diff = ext - result;
+    else
+      diff = result - ext;
+
+    if (diff > G_MAXINT32) {
+      /* timestamp went backwards more than allowed, we wrap around and get
+       * updated extended timestamp. */
+      result += (G_GINT64_CONSTANT (1) << 32);
+    }
+  }
+  *exttimestamp = result;
+
+  return result;
+}
+
+/**
+ * gst_rtp_buffer_get_extension_onebyte_header:
+ * @rtp: the RTP packet
+ * @id: The ID of the header extension to be read (between 1 and 14).
+ * @nth: Read the nth extension packet with the requested ID
+ * @data: location for data
+ * @size: the size of the data in bytes
+ *
+ * Parses RFC 5285 style header extensions with a one byte header. It will
+ * return the nth extension with the requested id.
+ *
+ * Returns: TRUE if @buffer had the requested header extension
+ *
+ * Since: 0.10.31
+ */
+
+gboolean
+gst_rtp_buffer_get_extension_onebyte_header (GstRTPBuffer * rtp, guint8 id,
+    guint nth, gpointer * data, guint * size)
+{
+  guint16 bits;
+  guint8 *pdata;
+  guint wordlen;
+  gulong offset = 0;
+  guint count = 0;
+
+  g_return_val_if_fail (id > 0 && id < 15, FALSE);
+
+  if (!gst_rtp_buffer_get_extension_data (rtp, &bits, (gpointer) & pdata,
+          &wordlen))
+    return FALSE;
+
+  if (bits != 0xBEDE)
+    return FALSE;
+
+  for (;;) {
+    guint8 read_id, read_len;
+
+    if (offset + 1 >= wordlen * 4)
+      break;
+
+    read_id = GST_READ_UINT8 (pdata + offset) >> 4;
+    read_len = (GST_READ_UINT8 (pdata + offset) & 0x0F) + 1;
+    offset += 1;
+
+    /* ID 0 means its padding, skip */
+    if (read_id == 0)
+      continue;
+
+    /* ID 15 is special and means we should stop parsing */
+    if (read_id == 15)
+      break;
+
+    /* Ignore extension headers where the size does not fit */
+    if (offset + read_len > wordlen * 4)
+      break;
+
+    /* If we have the right one */
+    if (id == read_id) {
+      if (nth == count) {
+        if (data)
+          *data = pdata + offset;
+        if (size)
+          *size = read_len;
+
+        return TRUE;
+      }
+
+      count++;
+    }
+    offset += read_len;
+
+    if (offset >= wordlen * 4)
+      break;
+  }
+
+  return FALSE;
+}
+
+/**
+ * gst_rtp_buffer_get_extension_twobytes_header:
+ * @rtp: the RTP packet
+ * @appbits: Application specific bits
+ * @id: The ID of the header extension to be read (between 1 and 14).
+ * @nth: Read the nth extension packet with the requested ID
+ * @data: location for data
+ * @size: the size of the data in bytes
+ *
+ * Parses RFC 5285 style header extensions with a two bytes header. It will
+ * return the nth extension with the requested id.
+ *
+ * Returns: TRUE if @buffer had the requested header extension
+ *
+ * Since: 0.10.31
+ */
+
+gboolean
+gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer * rtp,
+    guint8 * appbits, guint8 id, guint nth, gpointer * data, guint * size)
+{
+  guint16 bits;
+  guint8 *pdata;
+  guint wordlen;
+  guint bytelen;
+  gulong offset = 0;
+  guint count = 0;
+
+  if (!gst_rtp_buffer_get_extension_data (rtp, &bits, (gpointer) & pdata,
+          &wordlen))
+    return FALSE;
+
+  if (bits >> 4 != 0x100)
+    return FALSE;
+
+  bytelen = wordlen * 4;
+
+  for (;;) {
+    guint8 read_id, read_len;
+
+    if (offset + 2 >= bytelen)
+      break;
+
+    read_id = GST_READ_UINT8 (pdata + offset);
+    offset += 1;
+
+    if (read_id == 0)
+      continue;
+
+    read_len = GST_READ_UINT8 (pdata + offset);
+    offset += 1;
+
+    /* Ignore extension headers where the size does not fit */
+    if (offset + read_len > bytelen)
+      break;
+
+    /* If we have the right one, return it */
+    if (id == read_id) {
+      if (nth == count) {
+        if (data)
+          *data = pdata + offset;
+        if (size)
+          *size = read_len;
+        if (appbits)
+          *appbits = bits;
+
+        return TRUE;
+      }
+
+      count++;
+    }
+    offset += read_len;
+  }
+
+  return FALSE;
+}
+
+static guint
+get_onebyte_header_end_offset (guint8 * pdata, guint wordlen)
+{
+  guint offset = 0;
+  guint bytelen = wordlen * 4;
+  guint paddingcount = 0;
+
+  while (offset + 1 < bytelen) {
+    guint8 read_id, read_len;
+
+    read_id = GST_READ_UINT8 (pdata + offset) >> 4;
+    read_len = (GST_READ_UINT8 (pdata + offset) & 0x0F) + 1;
+    offset += 1;
+
+    /* ID 0 means its padding, skip */
+    if (read_id == 0) {
+      paddingcount++;
+      continue;
+    }
+
+    paddingcount = 0;
+
+    /* ID 15 is special and means we should stop parsing */
+    /* It also means we can't add an extra packet */
+    if (read_id == 15)
+      return 0;
+
+    /* Ignore extension headers where the size does not fit */
+    if (offset + read_len > bytelen)
+      return 0;
+
+    offset += read_len;
+  }
+
+  return offset - paddingcount;
+}
+
+/**
+ * gst_rtp_buffer_add_extension_onebyte_header:
+ * @rtp: the RTP packet
+ * @id: The ID of the header extension (between 1 and 14).
+ * @data: location for data
+ * @size: the size of the data in bytes
+ *
+ * Adds a RFC 5285 header extension with a one byte header to the end of the
+ * RTP header. If there is already a RFC 5285 header extension with a one byte
+ * header, the new extension will be appended.
+ * It will not work if there is already a header extension that does not follow
+ * the mecanism described in RFC 5285 or if there is a header extension with
+ * a two bytes header as described in RFC 5285. In that case, use
+ * gst_rtp_buffer_add_extension_twobytes_header()
+ *
+ * Returns: %TRUE if header extension could be added
+ *
+ * Since: 0.10.31
+ */
+
+gboolean
+gst_rtp_buffer_add_extension_onebyte_header (GstRTPBuffer * rtp, guint8 id,
+    gpointer data, guint size)
+{
+  guint16 bits;
+  guint8 *pdata;
+  guint wordlen;
+  gboolean has_bit;
+
+  g_return_val_if_fail (id > 0 && id < 15, FALSE);
+  g_return_val_if_fail (size >= 1 && size <= 16, FALSE);
+  g_return_val_if_fail (gst_buffer_is_writable (rtp->buffer), FALSE);
+
+  has_bit = gst_rtp_buffer_get_extension_data (rtp, &bits,
+      (gpointer) & pdata, &wordlen);
+
+  if (has_bit) {
+    gulong offset = 0;
+    guint8 *nextext;
+    guint extlen;
+
+    if (bits != 0xBEDE)
+      return FALSE;
+
+    offset = get_onebyte_header_end_offset (pdata, wordlen);
+    if (offset == 0)
+      return FALSE;
+
+    nextext = pdata + offset;
+    offset = nextext - rtp->data;
+
+    /* Don't add extra header if there isn't enough space */
+    if (rtp->size < offset + size + 1)
+      return FALSE;
+
+    nextext[0] = (id << 4) | (0x0F & (size - 1));
+    memcpy (nextext + 1, data, size);
+
+    extlen = nextext - pdata + size + 1;
+    if (extlen % 4) {
+      wordlen = extlen / 4 + 1;
+      memset (nextext + size + 1, 0, 4 - extlen % 4);
+    } else {
+      wordlen = extlen / 4;
+    }
+
+    gst_rtp_buffer_set_extension_data (rtp, 0xBEDE, wordlen);
+  } else {
+    wordlen = (size + 1) / 4 + (((size + 1) % 4) ? 1 : 0);
+
+    gst_rtp_buffer_set_extension_data (rtp, 0xBEDE, wordlen);
+
+    gst_rtp_buffer_get_extension_data (rtp, &bits,
+        (gpointer) & pdata, &wordlen);
+
+    pdata[0] = (id << 4) | (0x0F & (size - 1));
+    memcpy (pdata + 1, data, size);
+
+    if ((size + 1) % 4)
+      memset (pdata + size + 1, 0, 4 - ((size + 1) % 4));
+  }
+
+  return TRUE;
+}
+
+
+static guint
+get_twobytes_header_end_offset (guint8 * pdata, guint wordlen)
+{
+  guint offset = 0;
+  guint bytelen = wordlen * 4;
+  guint paddingcount = 0;
+
+  while (offset + 2 < bytelen) {
+    guint8 read_id, read_len;
+
+    read_id = GST_READ_UINT8 (pdata + offset);
+    offset += 1;
+
+    /* ID 0 means its padding, skip */
+    if (read_id == 0) {
+      paddingcount++;
+      continue;
+    }
+
+    paddingcount = 0;
+
+    read_len = GST_READ_UINT8 (pdata + offset);
+    offset += 1;
+
+    /* Ignore extension headers where the size does not fit */
+    if (offset + read_len > bytelen)
+      return 0;
+
+    offset += read_len;
+  }
+
+  return offset - paddingcount;
+}
+
+/**
+ * gst_rtp_buffer_add_extension_twobytes_header:
+ * @rtp: the RTP packet
+ * @appbits: Application specific bits
+ * @id: The ID of the header extension
+ * @data: location for data
+ * @size: the size of the data in bytes
+ *
+ * Adds a RFC 5285 header extension with a two bytes header to the end of the
+ * RTP header. If there is already a RFC 5285 header extension with a two bytes
+ * header, the new extension will be appended.
+ * It will not work if there is already a header extension that does not follow
+ * the mecanism described in RFC 5285 or if there is a header extension with
+ * a one byte header as described in RFC 5285. In that case, use
+ * gst_rtp_buffer_add_extension_onebyte_header()
+ *
+ * Returns: %TRUE if header extension could be added
+ *
+ * Since: 0.10.31
+ */
+
+gboolean
+gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer * rtp,
+    guint8 appbits, guint8 id, gpointer data, guint size)
+{
+  guint16 bits;
+  guint8 *pdata;
+  guint wordlen;
+  gboolean has_bit;
+
+  g_return_val_if_fail ((appbits & 0xF0) == 0, FALSE);
+  g_return_val_if_fail (size < 256, FALSE);
+  g_return_val_if_fail (gst_buffer_is_writable (rtp->buffer), FALSE);
+
+  has_bit = gst_rtp_buffer_get_extension_data (rtp, &bits,
+      (gpointer) & pdata, &wordlen);
+
+  if (has_bit) {
+    gulong offset = 0;
+    guint8 *nextext;
+    guint extlen;
+
+    if (bits != ((0x100 << 4) | (appbits & 0x0f)))
+      return FALSE;
+
+    offset = get_twobytes_header_end_offset (pdata, wordlen);
+
+    nextext = pdata + offset;
+
+    offset = nextext - rtp->data;
+
+    /* Don't add extra header if there isn't enough space */
+    if (rtp->size < offset + size + 2)
+      return FALSE;
+
+    nextext[0] = id;
+    nextext[1] = size;
+    memcpy (nextext + 2, data, size);
+
+    extlen = nextext - pdata + size + 2;
+    if (extlen % 4) {
+      wordlen = extlen / 4 + 1;
+      memset (nextext + size + 2, 0, 4 - extlen % 4);
+    } else {
+      wordlen = extlen / 4;
+    }
+
+    gst_rtp_buffer_set_extension_data (rtp, (0x100 << 4) | (appbits & 0x0F),
+        wordlen);
+  } else {
+    wordlen = (size + 2) / 4 + (((size + 2) % 4) ? 1 : 0);
+
+    gst_rtp_buffer_set_extension_data (rtp, (0x100 << 4) | (appbits & 0x0F),
+        wordlen);
+
+    gst_rtp_buffer_get_extension_data (rtp, &bits,
+        (gpointer) & pdata, &wordlen);
+
+    pdata[0] = id;
+    pdata[1] = size;
+    memcpy (pdata + 2, data, size);
+    if ((size + 2) % 4)
+      memset (pdata + size + 2, 0, 4 - ((size + 2) % 4));
+  }
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/rtp/gstrtpbuffer.h b/gst-libs/gst/rtp/gstrtpbuffer.h
new file mode 100644
index 0000000..b40e714
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtpbuffer.h
@@ -0,0 +1,152 @@
+/* GStreamer
+ * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
+ *               <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * gstrtpbuffer.h: various helper functions to manipulate buffers
+ *     with RTP payload.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTPBUFFER_H__
+#define __GST_RTPBUFFER_H__
+
+#include <gst/gst.h>
+#include <gst/rtp/gstrtppayloads.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_RTP_VERSION:
+ *
+ * The supported RTP version 2.
+ */
+#define GST_RTP_VERSION 2
+
+
+typedef struct _GstRTPBuffer GstRTPBuffer;
+
+/**
+ * GstRTPBuffer:
+ * @buffer: pointer to RTP buffer
+ *
+ * Data structure that points to an RTP packet.
+ * The size of the structure is made public to allow stack allocations.
+ */
+struct _GstRTPBuffer
+{
+  GstBuffer   *buffer;
+  GstMapFlags  flags;
+  guint8      *data;
+  gsize        size;
+  gsize        maxsize;
+};
+
+/* creating buffers */
+void            gst_rtp_buffer_allocate_data         (GstBuffer *buffer, guint payload_len,
+                                                      guint8 pad_len, guint8 csrc_count);
+
+GstBuffer*      gst_rtp_buffer_new_take_data         (gpointer data, gsize len);
+GstBuffer*      gst_rtp_buffer_new_copy_data         (gpointer data, gsize len);
+GstBuffer*      gst_rtp_buffer_new_allocate          (guint payload_len, guint8 pad_len, guint8 csrc_count);
+GstBuffer*      gst_rtp_buffer_new_allocate_len      (guint packet_len, guint8 pad_len, guint8 csrc_count);
+
+guint           gst_rtp_buffer_calc_header_len       (guint8 csrc_count);
+guint           gst_rtp_buffer_calc_packet_len       (guint payload_len, guint8 pad_len, guint8 csrc_count);
+guint           gst_rtp_buffer_calc_payload_len      (guint packet_len, guint8 pad_len, guint8 csrc_count);
+
+gboolean        gst_rtp_buffer_validate_data         (guint8 *data, gsize len);
+gboolean        gst_rtp_buffer_validate              (GstBuffer *buffer);
+
+
+gboolean        gst_rtp_buffer_map                   (GstBuffer *buffer, GstMapFlags flags, GstRTPBuffer *rtp);
+gboolean        gst_rtp_buffer_unmap                 (GstRTPBuffer *rtp);
+
+void            gst_rtp_buffer_set_packet_len        (GstRTPBuffer *rtp, guint len);
+guint           gst_rtp_buffer_get_packet_len        (GstRTPBuffer *rtp);
+
+guint           gst_rtp_buffer_get_header_len        (GstRTPBuffer *rtp);
+
+guint8          gst_rtp_buffer_get_version           (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_version           (GstRTPBuffer *rtp, guint8 version);
+
+gboolean        gst_rtp_buffer_get_padding           (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_padding           (GstRTPBuffer *rtp, gboolean padding);
+void            gst_rtp_buffer_pad_to                (GstRTPBuffer *rtp, guint len);
+
+gboolean        gst_rtp_buffer_get_extension         (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_extension         (GstRTPBuffer *rtp, gboolean extension);
+gboolean        gst_rtp_buffer_get_extension_data    (GstRTPBuffer *rtp, guint16 *bits,
+                                                      gpointer *data, guint *wordlen);
+gboolean        gst_rtp_buffer_set_extension_data    (GstRTPBuffer *rtp, guint16 bits, guint16 length);
+
+guint32         gst_rtp_buffer_get_ssrc              (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_ssrc              (GstRTPBuffer *rtp, guint32 ssrc);
+
+guint8          gst_rtp_buffer_get_csrc_count        (GstRTPBuffer *rtp);
+guint32         gst_rtp_buffer_get_csrc              (GstRTPBuffer *rtp, guint8 idx);
+void            gst_rtp_buffer_set_csrc              (GstRTPBuffer *rtp, guint8 idx, guint32 csrc);
+
+gboolean        gst_rtp_buffer_get_marker            (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_marker            (GstRTPBuffer *rtp, gboolean marker);
+
+guint8          gst_rtp_buffer_get_payload_type      (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_payload_type      (GstRTPBuffer *rtp, guint8 payload_type);
+
+guint16         gst_rtp_buffer_get_seq               (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_seq               (GstRTPBuffer *rtp, guint16 seq);
+
+guint32         gst_rtp_buffer_get_timestamp         (GstRTPBuffer *rtp);
+void            gst_rtp_buffer_set_timestamp         (GstRTPBuffer *rtp, guint32 timestamp);
+
+GstBuffer* 	gst_rtp_buffer_get_payload_buffer    (GstRTPBuffer *rtp);
+GstBuffer* 	gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp, guint offset, guint len);
+
+guint           gst_rtp_buffer_get_payload_len       (GstRTPBuffer *rtp);
+gpointer        gst_rtp_buffer_get_payload           (GstRTPBuffer *rtp);
+
+/* some helpers */
+guint32         gst_rtp_buffer_default_clock_rate    (guint8 payload_type);
+gint            gst_rtp_buffer_compare_seqnum        (guint16 seqnum1, guint16 seqnum2);
+guint64         gst_rtp_buffer_ext_timestamp         (guint64 *exttimestamp, guint32 timestamp);
+
+gboolean        gst_rtp_buffer_get_extension_onebyte_header  (GstRTPBuffer *rtp,
+                                                              guint8 id,
+                                                              guint nth,
+                                                              gpointer * data,
+                                                              guint * size);
+gboolean        gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp,
+                                                              guint8 * appbits,
+                                                              guint8 id,
+                                                              guint nth,
+                                                              gpointer * data,
+                                                              guint * size);
+
+gboolean       gst_rtp_buffer_add_extension_onebyte_header  (GstRTPBuffer *rtp,
+                                                             guint8 id,
+                                                             gpointer data,
+                                                             guint size);
+gboolean       gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp,
+                                                             guint8 appbits,
+                                                             guint8 id,
+                                                             gpointer data,
+                                                             guint size);
+
+
+G_END_DECLS
+
+#endif /* __GST_RTPBUFFER_H__ */
+
diff --git a/gst-libs/gst/rtp/gstrtppayloads.c b/gst-libs/gst/rtp/gstrtppayloads.c
new file mode 100644
index 0000000..97c0fa9
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtppayloads.c
@@ -0,0 +1,229 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstrtppayloads.h: various helper functions to deal with RTP payload
+ *     types.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstrtppayloads
+ * @short_description: Helper methods for dealing with RTP payloads
+ * @see_also: gstrtpbuffer
+ *
+ * <refsect2>
+ * <para>
+ * The GstRTPPayloads helper functions makes it easy to deal with static and dynamic
+ * payloads. Its main purpose is to retrieve properties such as the default clock-rate 
+ * and get session bandwidth information.
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2007-10-01 (0.10.15)
+ */
+
+#include <string.h>
+
+#include "gstrtppayloads.h"
+
+/* pt, encoding_name, media, rate, params, bitrate */
+static const GstRTPPayloadInfo info[] = {
+  /* static audio */
+  {0, "audio", "PCMU", 8000, "1", 64000},
+  /* { 1, "audio", "reserved", 0, NULL, 0 }, */
+  /* { 2, "audio", "reserved", 0, NULL, 0 }, */
+  {3, "audio", "GSM", 8000, "1", 0},
+  {4, "audio", "G723", 8000, "1", 0},
+  {5, "audio", "DVI4", 8000, "1", 32000},
+  {6, "audio", "DVI4", 16000, "1", 64000},
+  {7, "audio", "LPC", 8000, "1", 0},
+  {8, "audio", "PCMA", 8000, "1", 64000},
+  {9, "audio", "G722", 8000, "1", 64000},
+  {10, "audio", "L16", 44100, "2", 1411200},
+  {11, "audio", "L16", 44100, "1", 705600},
+  {12, "audio", "QCELP", 8000, "1", 0},
+  {13, "audio", "CN", 8000, "1", 0},
+  {14, "audio", "MPA", 90000, NULL, 0},
+  {15, "audio", "G728", 8000, "1", 0},
+  {16, "audio", "DVI4", 11025, "1", 44100},
+  {17, "audio", "DVI4", 22050, "1", 88200},
+  {18, "audio", "G729", 8000, "1", 0},
+  /* { 19, "audio", "reserved", 0, NULL, 0 }, */
+  /* { 20, "audio", "unassigned", 0, NULL, 0 }, */
+  /* { 21, "audio", "unassigned", 0, NULL, 0 }, */
+  /* { 22, "audio", "unassigned", 0, NULL, 0 }, */
+  /* { 23, "audio", "unassigned", 0, NULL, 0 }, */
+
+  /* video and video/audio */
+  /* { 24, "video", "unassigned", 0, NULL, 0 }, */
+  {25, "video", "CelB", 90000, NULL, 0},
+  {26, "video", "JPEG", 90000, NULL, 0},
+  /* { 27, "video", "unassigned", 0, NULL, 0 }, */
+  {28, "video", "nv", 90000, NULL, 0},
+  /* { 29, "video", "unassigned", 0, NULL, 0 }, */
+  /* { 30, "video", "unassigned", 0, NULL, 0 }, */
+  {31, "video", "H261", 90000, NULL, 0},
+  {32, "video", "MPV", 90000, NULL, 0},
+  {33, "video", "MP2T", 90000, NULL, 0},
+  {34, "video", "H263", 90000, NULL, 0},
+  /* { 35-71, "unassigned", 0, 0, NULL, 0 }, */
+  /* { 72-76, "reserved", 0, 0, NULL, 0 }, */
+  /* { 77-95, "unassigned", 0, 0, NULL, 0 }, */
+  /* { 96-127, "dynamic", 0, 0, NULL, 0 }, */
+
+  /* dynamic stuff */
+  {G_MAXUINT8, "application", "parityfec", 0, NULL, 0}, /* [RFC3009] */
+  {G_MAXUINT8, "application", "rtx", 0, NULL, 0},       /* [RFC4588] */
+  {G_MAXUINT8, "audio", "AMR", 8000, NULL, 0},  /* [RFC4867][RFC3267] */
+  {G_MAXUINT8, "audio", "AMR-WB", 16000, NULL, 0},      /* [RFC4867][RFC3267] */
+  {G_MAXUINT8, "audio", "DAT12", 0, NULL, 0},   /* [RFC3190] */
+  {G_MAXUINT8, "audio", "dsr-es201108", 0, NULL, 0},    /* [RFC3557] */
+  {G_MAXUINT8, "audio", "EVRC", 8000, "1", 0},  /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "EVRC0", 8000, "1", 0}, /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "EVRC1", 8000, "1", 0}, /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "EVRCB", 8000, "1", 0}, /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "EVRCB0", 8000, "1", 0},        /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "EVRCB1", 8000, "1", 0},        /* [RFC4788]  */
+  {G_MAXUINT8, "audio", "G7221", 16000, "1", 0},        /* [RFC3047] */
+  {G_MAXUINT8, "audio", "G726-16", 8000, "1", 0},       /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "G726-24", 8000, "1", 0},       /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "G726-32", 8000, "1", 0},       /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "G726-40", 8000, "1", 0},       /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "G729D", 8000, "1", 0}, /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "G729E", 8000, "1", 0}, /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "GSM-EFR", 8000, "1", 0},       /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "L8", 0, NULL, 0},      /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "RED", 0, NULL, 0},     /* [RFC2198][RFC3555] */
+  {G_MAXUINT8, "audio", "rtx", 0, NULL, 0},     /* [RFC4588] */
+  {G_MAXUINT8, "audio", "VDVI", 0, "1", 0},     /* [RFC3551][RFC4856] */
+  {G_MAXUINT8, "audio", "L20", 0, NULL, 0},     /* [RFC3190] */
+  {G_MAXUINT8, "audio", "L24", 0, NULL, 0},     /* [RFC3190] */
+  {G_MAXUINT8, "audio", "MP4A-LATM", 0, NULL, 0},       /* [RFC3016] */
+  {G_MAXUINT8, "audio", "mpa-robust", 90000, NULL, 0},  /* [RFC3119] */
+  {G_MAXUINT8, "audio", "parityfec", 0, NULL, 0},       /* [RFC3009] */
+  {G_MAXUINT8, "audio", "SMV", 8000, "1", 0},   /* [RFC3558] */
+  {G_MAXUINT8, "audio", "SMV0", 8000, "1", 0},  /* [RFC3558] */
+  {G_MAXUINT8, "audio", "t140c", 0, NULL, 0},   /* [RFC4351] */
+  {G_MAXUINT8, "audio", "t38", 0, NULL, 0},     /* [RFC4612] */
+  {G_MAXUINT8, "audio", "telephone-event", 0, NULL, 0}, /* [RFC4733] */
+  {G_MAXUINT8, "audio", "tone", 0, NULL, 0},    /* [RFC4733] */
+  {G_MAXUINT8, "audio", "DVI4", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "G722", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "G723", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "G728", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "G729", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "GSM", 0, NULL, 0},     /* [RFC4856] */
+  {G_MAXUINT8, "audio", "L16", 0, NULL, 0},     /* [RFC4856] */
+  {G_MAXUINT8, "audio", "LPC", 0, NULL, 0},     /* [RFC4856] */
+  {G_MAXUINT8, "audio", "PCMA", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "audio", "PCMU", 0, NULL, 0},    /* [RFC4856] */
+  {G_MAXUINT8, "text", "parityfec", 0, NULL, 0},        /* [RFC3009] */
+  {G_MAXUINT8, "text", "red", 1000, NULL, 0},   /* [RFC4102] */
+  {G_MAXUINT8, "text", "rtx", 0, NULL, 0},      /* [RFC4588] */
+  {G_MAXUINT8, "text", "t140", 1000, NULL, 0},  /* [RFC4103] */
+  {G_MAXUINT8, "video", "BMPEG", 90000, NULL, 0},       /* [RFC2343][RFC3555] */
+  {G_MAXUINT8, "video", "BT656", 90000, NULL, 0},       /* [RFC2431][RFC3555] */
+  {G_MAXUINT8, "video", "DV", 90000, NULL, 0},  /* [RFC3189] */
+  {G_MAXUINT8, "video", "H263-1998", 90000, NULL, 0},   /* [RFC2429][RFC3555] */
+  {G_MAXUINT8, "video", "H263-2000", 90000, NULL, 0},   /* [RFC2429][RFC3555] */
+  {G_MAXUINT8, "video", "MP1S", 90000, NULL, 0},        /* [RFC2250][RFC3555] */
+  {G_MAXUINT8, "video", "MP2P", 90000, NULL, 0},        /* [RFC2250][RFC3555] */
+  {G_MAXUINT8, "video", "MP4V-ES", 90000, NULL, 0},     /* [RFC3016] */
+  {G_MAXUINT8, "video", "parityfec", 0, NULL, 0},       /* [RFC3009] */
+  {G_MAXUINT8, "video", "pointer", 90000, NULL, 0},     /* [RFC2862] */
+  {G_MAXUINT8, "video", "raw", 90000, NULL, 0}, /* [RFC4175] */
+  {G_MAXUINT8, "video", "rtx", 0, NULL, 0},     /* [RFC4588] */
+  {G_MAXUINT8, "video", "SMPTE292M", 0, NULL, 0},       /* [RFC3497] */
+  {G_MAXUINT8, "video", "vc1", 90000, NULL, 0}, /* [RFC4425] */
+
+  /* not in http://www.iana.org/assignments/rtp-parameters */
+  {G_MAXUINT8, "audio", "AC3", 0, NULL, 0},
+  {G_MAXUINT8, "audio", "ILBC", 8000, NULL, 0},
+  {G_MAXUINT8, "audio", "MPEG4-GENERIC", 0, NULL, 0},
+  {G_MAXUINT8, "audio", "SPEEX", 0, NULL, 0},
+
+  {G_MAXUINT8, "application", "MPEG4-GENERIC", 0, NULL, 0},
+
+  {G_MAXUINT8, "video", "H264", 90000, NULL, 0},
+  {G_MAXUINT8, "video", "MPEG4-GENERIC", 90000, NULL, 0},
+  {G_MAXUINT8, "video", "THEORA", 0, NULL, 0},
+  {G_MAXUINT8, "video", "VORBIS", 0, NULL, 0},
+  {G_MAXUINT8, "video", "X-SV3V-ES", 90000, NULL, 0},
+  {G_MAXUINT8, "video", "X-SORENSON-VIDEO", 90000, NULL, 0},
+
+  /* real stuff */
+  {G_MAXUINT8, "video", "x-pn-realvideo", 1000, NULL, 0},
+  {G_MAXUINT8, "audio", "x-pn-realaudio", 1000, NULL, 0},
+  {G_MAXUINT8, "application", "x-pn-realmedia", 1000, NULL, 0},
+
+  /* terminator */
+  {G_MAXUINT8, NULL, NULL, 0, NULL, 0}
+};
+
+/**
+ * gst_rtp_payload_info_for_pt:
+ * @payload_type: the payload_type to find
+ *
+ * Get the #GstRTPPayloadInfo for @payload_type. This function is
+ * mostly used to get the default clock-rate and bandwidth for static payload
+ * types specified with @payload_type.
+ *
+ * Returns: a #GstRTPPayloadInfo or NULL when no info could be found.
+ */
+const GstRTPPayloadInfo *
+gst_rtp_payload_info_for_pt (guint8 payload_type)
+{
+  const GstRTPPayloadInfo *result = NULL;
+  gint i;
+
+  for (i = 0; info[i].media; i++) {
+    if (info[i].payload_type == payload_type) {
+      result = &info[i];
+      break;
+    }
+  }
+  return result;
+}
+
+/**
+ * gst_rtp_payload_info_for_name:
+ * @media: the media to find
+ * @encoding_name: the encoding name to find
+ *
+ * Get the #GstRTPPayloadInfo for @media and @encoding_name. This function is
+ * mostly used to get the default clock-rate and bandwidth for dynamic payload
+ * types specified with @media and @encoding name.
+ *
+ * The search for @encoding_name will be performed in a case insensitve way.
+ *
+ * Returns: a #GstRTPPayloadInfo or NULL when no info could be found.
+ */
+const GstRTPPayloadInfo *
+gst_rtp_payload_info_for_name (const gchar * media, const gchar * encoding_name)
+{
+  const GstRTPPayloadInfo *result = NULL;
+  gint i;
+
+  for (i = 0; info[i].media; i++) {
+    if (strcmp (media, info[i].media) == 0
+        && g_ascii_strcasecmp (encoding_name, info[i].encoding_name) == 0) {
+      result = &info[i];
+      break;
+    }
+  }
+  return result;
+}
diff --git a/gst-libs/gst/rtp/gstrtppayloads.h b/gst-libs/gst/rtp/gstrtppayloads.h
new file mode 100644
index 0000000..3563468
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtppayloads.h
@@ -0,0 +1,193 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstrtppayloads.h: various helper functions to deal with RTP payload
+ *     types.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTPPAYLOADS_H__
+#define __GST_RTPPAYLOADS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/** 
+ * GstRTPPayload:
+ * @GST_RTP_PAYLOAD_PCMU: ITU-T G.711. mu-law audio (RFC 3551)
+ * @GST_RTP_PAYLOAD_1016: RFC 3551 says reserved
+ * @GST_RTP_PAYLOAD_G721: RFC 3551 says reserved
+ * @GST_RTP_PAYLOAD_GSM: GSM audio
+ * @GST_RTP_PAYLOAD_G723: ITU G.723.1 audio
+ * @GST_RTP_PAYLOAD_DVI4_8000: IMA ADPCM wave type (RFC 3551)
+ * @GST_RTP_PAYLOAD_DVI4_16000: IMA ADPCM wave type (RFC 3551)
+ * @GST_RTP_PAYLOAD_LPC: experimental linear predictive encoding
+ * @GST_RTP_PAYLOAD_PCMA: ITU-T G.711 A-law audio (RFC 3551)
+ * @GST_RTP_PAYLOAD_G722: ITU-T G.722 (RFC 3551)
+ * @GST_RTP_PAYLOAD_L16_STEREO: stereo PCM
+ * @GST_RTP_PAYLOAD_L16_MONO: mono PCM
+ * @GST_RTP_PAYLOAD_QCELP: EIA & TIA standard IS-733
+ * @GST_RTP_PAYLOAD_CN: Comfort Noise (RFC 3389)
+ * @GST_RTP_PAYLOAD_MPA: Audio MPEG 1-3.
+ * @GST_RTP_PAYLOAD_G728: ITU-T G.728 Speech coder (RFC 3551)
+ * @GST_RTP_PAYLOAD_DVI4_11025: IMA ADPCM wave type (RFC 3551)
+ * @GST_RTP_PAYLOAD_DVI4_22050: IMA ADPCM wave type (RFC 3551)
+ * @GST_RTP_PAYLOAD_G729: ITU-T G.729 Speech coder (RFC 3551)
+ * @GST_RTP_PAYLOAD_CELLB: See RFC 2029
+ * @GST_RTP_PAYLOAD_JPEG: ISO Standards 10918-1 and 10918-2 (RFC 2435)
+ * @GST_RTP_PAYLOAD_NV: nv encoding by Ron Frederick
+ * @GST_RTP_PAYLOAD_H261: ITU-T Recommendation H.261 (RFC 2032)
+ * @GST_RTP_PAYLOAD_MPV: Video MPEG 1 & 2 (RFC 2250)
+ * @GST_RTP_PAYLOAD_MP2T: MPEG-2 transport stream (RFC 2250)
+ * @GST_RTP_PAYLOAD_H263: Video H263 (RFC 2190)
+ *
+ *
+ * Standard predefined fixed payload types.
+ *
+ * The official list is at:
+ * http://www.iana.org/assignments/rtp-parameters
+ *
+ * Audio:
+ * reserved: 19
+ * unassigned: 20-23, 
+ *
+ * Video:
+ * unassigned: 24, 27, 29, 30, 35-71, 77-95
+ * Reserved for RTCP conflict avoidance: 72-76
+ */
+typedef enum
+{
+  /* Audio: */
+  GST_RTP_PAYLOAD_PCMU = 0,
+  GST_RTP_PAYLOAD_1016 = 1, /* RFC 3551 says reserved */
+  GST_RTP_PAYLOAD_G721 = 2, /* RFC 3551 says reserved */
+  GST_RTP_PAYLOAD_GSM = 3,
+  GST_RTP_PAYLOAD_G723 = 4,
+  GST_RTP_PAYLOAD_DVI4_8000 = 5,
+  GST_RTP_PAYLOAD_DVI4_16000 = 6,
+  GST_RTP_PAYLOAD_LPC = 7,
+  GST_RTP_PAYLOAD_PCMA = 8,
+  GST_RTP_PAYLOAD_G722 = 9,
+  GST_RTP_PAYLOAD_L16_STEREO = 10,
+  GST_RTP_PAYLOAD_L16_MONO = 11,
+  GST_RTP_PAYLOAD_QCELP = 12,
+  GST_RTP_PAYLOAD_CN = 13,
+  GST_RTP_PAYLOAD_MPA = 14,
+  GST_RTP_PAYLOAD_G728 = 15,
+  GST_RTP_PAYLOAD_DVI4_11025 = 16,
+  GST_RTP_PAYLOAD_DVI4_22050 = 17,
+  GST_RTP_PAYLOAD_G729 = 18,   
+
+  /* Video: */
+
+  GST_RTP_PAYLOAD_CELLB = 25,
+  GST_RTP_PAYLOAD_JPEG = 26,
+  GST_RTP_PAYLOAD_NV = 28,
+  GST_RTP_PAYLOAD_H261 = 31,
+  GST_RTP_PAYLOAD_MPV = 32,
+  GST_RTP_PAYLOAD_MP2T = 33,
+  GST_RTP_PAYLOAD_H263 = 34,
+
+  /* BOTH */
+} GstRTPPayload;
+
+/* backward compatibility */
+#define GST_RTP_PAYLOAD_G723_63 16
+#define GST_RTP_PAYLOAD_G723_53 17
+#define GST_RTP_PAYLOAD_TS48 18
+#define GST_RTP_PAYLOAD_TS41 19
+
+#define GST_RTP_PAYLOAD_G723_63_STRING "16"
+#define GST_RTP_PAYLOAD_G723_53_STRING "17"
+#define GST_RTP_PAYLOAD_TS48_STRING "18"
+#define GST_RTP_PAYLOAD_TS41_STRING "19"
+
+/* Defining the above as strings, to make the declaration of pad_templates
+ * easier. So if please keep these synchronized with the above.
+ */
+#define GST_RTP_PAYLOAD_PCMU_STRING "0"
+#define GST_RTP_PAYLOAD_1016_STRING "1"
+#define GST_RTP_PAYLOAD_G721_STRING "2"
+#define GST_RTP_PAYLOAD_GSM_STRING "3"
+#define GST_RTP_PAYLOAD_G723_STRING "4"
+#define GST_RTP_PAYLOAD_DVI4_8000_STRING "5"
+#define GST_RTP_PAYLOAD_DVI4_16000_STRING "6"
+#define GST_RTP_PAYLOAD_LPC_STRING "7"
+#define GST_RTP_PAYLOAD_PCMA_STRING "8"
+#define GST_RTP_PAYLOAD_G722_STRING "9"
+#define GST_RTP_PAYLOAD_L16_STEREO_STRING "10"
+#define GST_RTP_PAYLOAD_L16_MONO_STRING "11"
+#define GST_RTP_PAYLOAD_QCELP_STRING "12"
+#define GST_RTP_PAYLOAD_CN_STRING "13"
+#define GST_RTP_PAYLOAD_MPA_STRING "14"
+#define GST_RTP_PAYLOAD_G728_STRING "15"
+#define GST_RTP_PAYLOAD_DVI4_11025_STRING "16"
+#define GST_RTP_PAYLOAD_DVI4_22050_STRING "17"
+#define GST_RTP_PAYLOAD_G729_STRING "18"
+
+#define GST_RTP_PAYLOAD_CELLB_STRING "25"
+#define GST_RTP_PAYLOAD_JPEG_STRING "26"
+#define GST_RTP_PAYLOAD_NV_STRING "28"
+
+#define GST_RTP_PAYLOAD_H261_STRING "31"
+#define GST_RTP_PAYLOAD_MPV_STRING "32"
+#define GST_RTP_PAYLOAD_MP2T_STRING "33"
+#define GST_RTP_PAYLOAD_H263_STRING "34"
+
+#define GST_RTP_PAYLOAD_DYNAMIC_STRING "[96, 127]"
+
+/**
+ * GST_RTP_PAYLOAD_IS_DYNAMIC:
+ * @pt: a payload type
+ *
+ * Check if @pt is a dynamic payload type.
+ */
+#define GST_RTP_PAYLOAD_IS_DYNAMIC(pt) ((pt) >= 96 && (pt) <= 127)
+
+typedef struct _GstRTPPayloadInfo GstRTPPayloadInfo;
+
+/**
+ * GstRTPPayloadInfo:
+ * @payload_type: payload type, -1 means dynamic
+ * @media: the media type(s), usually "audio", "video", "application", "text",
+ * "message".
+ * @encoding_name: the encoding name of @pt
+ * @clock_rate: default clock rate, 0 = unknown/variable
+ * @encoding_parameters: encoding parameters. For audio this is the number of
+ * channels. NULL = not applicable.
+ * @bitrate: the bitrate of the media. 0 = unknown/variable.
+ *
+ * Structure holding default payload type information.
+ */
+struct _GstRTPPayloadInfo
+{
+  guint8       payload_type;
+  const gchar *media;
+  const gchar *encoding_name;
+  guint        clock_rate;
+  const gchar *encoding_parameters;
+  guint        bitrate;
+};
+
+const GstRTPPayloadInfo *  gst_rtp_payload_info_for_pt     (guint8 payload_type);
+const GstRTPPayloadInfo *  gst_rtp_payload_info_for_name   (const gchar *media, const gchar *encoding_name);
+
+G_END_DECLS
+
+#endif /* __GST_RTPPAYLOADS_H__ */
+
diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am
new file mode 100644
index 0000000..74adf9e
--- /dev/null
+++ b/gst-libs/gst/rtsp/Makefile.am
@@ -0,0 +1,121 @@
+libgstrtspincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/rtsp
+
+libgstrtspinclude_HEADERS = gstrtspbase64.h \
+			    gstrtsptransport.h \
+			    gstrtspurl.h \
+			    gstrtspmessage.h    \
+			    gstrtspconnection.h \
+			    gstrtspdefs.h       \
+			    gstrtspextension.h       \
+			    gstrtsprange.h
+
+#gstrtspextreal.h    
+#gstrtspextwms.h     
+
+lib_LTLIBRARIES = libgstrtsp-@GST_MAJORMINOR@.la
+
+built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c
+built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h
+
+libgstrtsp_@GST_MAJORMINOR@_la_SOURCES = gstrtspbase64.c \
+					 gstrtsptransport.c \
+					 gstrtspurl.c \
+					 gstrtspmessage.c    \
+                                         gstrtspconnection.c \
+                                         gstrtspdefs.c       \
+                                         gstrtspextension.c  \
+					 gstrtsprange.c
+
+nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES = $(built_sources)
+nodist_libgstrtspinclude_HEADERS = gstrtsp-enumtypes.h
+
+noinst_HEADERS = gstrtsp.h
+
+#gstrtspextwms.c  
+#rtspextreal.c    
+
+libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstrtsp_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(WIN32_LIBS) $(HSTRERROR_LIBS)
+libgstrtsp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+EXTRA_DIST = gstrtsp-marshal.list
+CLEANFILES = $(BUILT_SOURCES)
+
+glib_gen_prefix = __gst_rtsp
+glib_enum_define = gst_rtsp
+glib_enum_headers = gstrtspdefs.h
+glib_gen_basename = gstrtsp
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstRtsp-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstrtspinclude_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtspinclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/rtsp/%',$(libgstrtspinclude_HEADERS))
+gir_cincludes+=$(patsubst %,--c-include='gst/rtsp/%',$(nodist_libgstrtspinclude_HEADERS))
+
+GstRtsp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_builddir)/gst-libs \
+		-I$(top_srcdir)/gst-libs \
+		--add-include-path=$(builddir)/../sdp \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstrtsp-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstSdp-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-sdp-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-rtsp-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=$(builddir)/../sdp \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstrtsp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstrtsp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/rtsp \
+	 -:HEADERS $(libgstrtspinclude_HEADERS) \
+	           $(nodist_libgstrtspinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/rtsp/Makefile.in b/gst-libs/gst/rtsp/Makefile.in
new file mode 100644
index 0000000..52b7129
--- /dev/null
+++ b/gst-libs/gst/rtsp/Makefile.in
@@ -0,0 +1,1099 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstrtspinclude_HEADERS) $(noinst_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/rtsp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtspincludedir)" \
+	"$(DESTDIR)$(libgstrtspincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstrtsp_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo
+am__objects_1 = libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo \
+	libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo
+nodist_libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS = $(am__objects_1)
+libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstrtsp_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstrtsp_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstrtspinclude_HEADERS) \
+	$(nodist_libgstrtspinclude_HEADERS) $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libgstrtspincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/rtsp
+libgstrtspinclude_HEADERS = gstrtspbase64.h \
+			    gstrtsptransport.h \
+			    gstrtspurl.h \
+			    gstrtspmessage.h    \
+			    gstrtspconnection.h \
+			    gstrtspdefs.h       \
+			    gstrtspextension.h       \
+			    gstrtsprange.h
+
+
+#gstrtspextreal.h    
+#gstrtspextwms.h     
+lib_LTLIBRARIES = libgstrtsp-@GST_MAJORMINOR@.la
+built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c
+built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h
+libgstrtsp_@GST_MAJORMINOR@_la_SOURCES = gstrtspbase64.c \
+					 gstrtsptransport.c \
+					 gstrtspurl.c \
+					 gstrtspmessage.c    \
+                                         gstrtspconnection.c \
+                                         gstrtspdefs.c       \
+                                         gstrtspextension.c  \
+					 gstrtsprange.c
+
+nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES = $(built_sources)
+nodist_libgstrtspinclude_HEADERS = gstrtsp-enumtypes.h
+noinst_HEADERS = gstrtsp.h
+
+#gstrtspextwms.c  
+#rtspextreal.c    
+libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstrtsp_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(WIN32_LIBS) $(HSTRERROR_LIBS)
+libgstrtsp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+BUILT_SOURCES = $(built_headers) $(built_sources)
+EXTRA_DIST = gstrtsp-marshal.list
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+glib_gen_prefix = __gst_rtsp
+glib_enum_define = gst_rtsp
+glib_enum_headers = gstrtspdefs.h
+glib_gen_basename = gstrtsp
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtsp-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstrtspinclude_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstrtspinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/rtsp/%',$(libgstrtspinclude_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/rtsp/%',$(nodist_libgstrtspinclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstrtsp-@GST_MAJORMINOR@.la: $(libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstrtsp_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstrtsp_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstrtsp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstrtsp_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo: gstrtspbase64.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo `test -f 'gstrtspbase64.c' || echo '$(srcdir)/'`gstrtspbase64.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspbase64.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspbase64.lo `test -f 'gstrtspbase64.c' || echo '$(srcdir)/'`gstrtspbase64.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo: gstrtsptransport.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo `test -f 'gstrtsptransport.c' || echo '$(srcdir)/'`gstrtsptransport.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtsptransport.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsptransport.lo `test -f 'gstrtsptransport.c' || echo '$(srcdir)/'`gstrtsptransport.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo: gstrtspurl.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo `test -f 'gstrtspurl.c' || echo '$(srcdir)/'`gstrtspurl.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspurl.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspurl.lo `test -f 'gstrtspurl.c' || echo '$(srcdir)/'`gstrtspurl.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo: gstrtspmessage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo `test -f 'gstrtspmessage.c' || echo '$(srcdir)/'`gstrtspmessage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspmessage.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspmessage.lo `test -f 'gstrtspmessage.c' || echo '$(srcdir)/'`gstrtspmessage.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo: gstrtspconnection.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo `test -f 'gstrtspconnection.c' || echo '$(srcdir)/'`gstrtspconnection.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspconnection.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspconnection.lo `test -f 'gstrtspconnection.c' || echo '$(srcdir)/'`gstrtspconnection.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo: gstrtspdefs.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo `test -f 'gstrtspdefs.c' || echo '$(srcdir)/'`gstrtspdefs.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspdefs.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspdefs.lo `test -f 'gstrtspdefs.c' || echo '$(srcdir)/'`gstrtspdefs.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo: gstrtspextension.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo `test -f 'gstrtspextension.c' || echo '$(srcdir)/'`gstrtspextension.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtspextension.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtspextension.lo `test -f 'gstrtspextension.c' || echo '$(srcdir)/'`gstrtspextension.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo: gstrtsprange.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo `test -f 'gstrtsprange.c' || echo '$(srcdir)/'`gstrtsprange.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtsprange.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsprange.lo `test -f 'gstrtsprange.c' || echo '$(srcdir)/'`gstrtsprange.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo: gstrtsp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtsp-marshal.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c
+
+libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo: gstrtsp-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.Tpo -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo `test -f 'gstrtsp-enumtypes.c' || echo '$(srcdir)/'`gstrtsp-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.Tpo $(DEPDIR)/libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstrtsp-enumtypes.c' object='libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_MAJORMINOR@_la-gstrtsp-enumtypes.lo `test -f 'gstrtsp-enumtypes.c' || echo '$(srcdir)/'`gstrtsp-enumtypes.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstrtspincludeHEADERS: $(libgstrtspinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstrtspincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstrtspincludedir)"
+	@list='$(libgstrtspinclude_HEADERS)'; test -n "$(libgstrtspincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstrtspincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstrtspincludedir)" || exit $$?; \
+	done
+
+uninstall-libgstrtspincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstrtspinclude_HEADERS)'; test -n "$(libgstrtspincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstrtspincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstrtspincludedir)" && rm -f $$files
+install-nodist_libgstrtspincludeHEADERS: $(nodist_libgstrtspinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstrtspincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstrtspincludedir)"
+	@list='$(nodist_libgstrtspinclude_HEADERS)'; test -n "$(libgstrtspincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstrtspincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstrtspincludedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstrtspincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstrtspinclude_HEADERS)'; test -n "$(libgstrtspincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstrtspincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstrtspincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtspincludedir)" "$(DESTDIR)$(libgstrtspincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA install-libgstrtspincludeHEADERS \
+	install-nodist_libgstrtspincludeHEADERS install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstrtspincludeHEADERS \
+	uninstall-nodist_libgstrtspincludeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgstrtspincludeHEADERS \
+	install-man install-nodist_libgstrtspincludeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES uninstall-libgstrtspincludeHEADERS \
+	uninstall-nodist_libgstrtspincludeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstRtsp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../sdp \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstrtsp-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstSdp-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-sdp-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-rtsp-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../sdp \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstrtsp_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstrtsp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstrtsp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstrtsp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/rtsp \
+	 -:HEADERS $(libgstrtspinclude_HEADERS) \
+	           $(nodist_libgstrtspinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/rtsp/gstrtsp-marshal.list b/gst-libs/gst/rtsp/gstrtsp-marshal.list
new file mode 100644
index 0000000..40b8c72
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsp-marshal.list
@@ -0,0 +1,2 @@
+# rtsp marshallers
+ENUM:POINTER,POINTER
diff --git a/gst-libs/gst/rtsp/gstrtsp.h b/gst-libs/gst/rtsp/gstrtsp.h
new file mode 100644
index 0000000..0632196
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsp.h
@@ -0,0 +1,27 @@
+/* GStreamer RTSP extension
+ * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * rtsp.h: Generic include to pull in defs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef __RTSP_H__
+#define __RTSP_H__
+
+#include <gst/rtsp/gstrtspdefs.h>
+#include <gst/rtsp/gstrtsp-enumtypes.h>
+
+#endif
diff --git a/gst-libs/gst/rtsp/gstrtspbase64.c b/gst-libs/gst/rtsp/gstrtspbase64.c
new file mode 100644
index 0000000..a1064d6
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspbase64.c
@@ -0,0 +1,91 @@
+/* GStreamer
+ * Copyright (C) <2007> Mike Smith <msmith@xiph.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstrtspbase64
+ * @short_description: Helper functions to handle Base64
+ *
+ * Last reviewed on 2007-07-24 (0.10.14)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstrtspbase64.h"
+
+/**
+ * gst_rtsp_base64_encode:
+ * @data: the binary data to encode
+ * @len: the length of @data
+ *
+ * Encode a sequence of binary data into its Base-64 stringified representation.
+ *
+ * Deprecated: Use g_base64_encode()
+ *
+ * Returns: a newly allocated, zero-terminated Base-64 encoded string
+ * representing @data.
+ */
+/* This isn't efficient, but it doesn't need to be */
+#ifndef GST_REMOVE_DEPRECATED
+#ifdef GST_DISABLE_DEPRECATED
+gchar *gst_rtsp_base64_encode (const gchar * data, gsize len);
+#endif
+gchar *
+gst_rtsp_base64_encode (const gchar * data, gsize len)
+{
+  return g_base64_encode ((const guchar *) data, len);
+}
+#endif
+
+/**
+ * gst_rtsp_base64_decode_ip:
+ * @data: the base64 encoded data
+ * @len: location for output length or NULL
+ *
+ * Decode the base64 string pointed to by @data in-place. When @len is not #NULL
+ * it will contain the length of the decoded data.
+ *
+ * Deprecated: use g_base64_decode_inplace() instead.
+ */
+#ifndef GST_REMOVE_DEPRECATED
+#ifdef GST_DISABLE_DEPRECATED
+void gst_rtsp_base64_decode_ip (gchar * data, gsize * len);
+#endif
+void
+gst_rtsp_base64_decode_ip (gchar * data, gsize * len)
+{
+  gint input_length, output_length, state = 0;
+  guint save = 0;
+
+  g_return_if_fail (data != NULL);
+
+  input_length = strlen (data);
+
+  g_return_if_fail (input_length > 1);
+
+  output_length =
+      g_base64_decode_step (data, input_length, (guchar *) data, &state, &save);
+
+  if (len)
+    *len = output_length;
+}
+#endif
diff --git a/gst-libs/gst/rtsp/gstrtspbase64.h b/gst-libs/gst/rtsp/gstrtspbase64.h
new file mode 100644
index 0000000..1501c10
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspbase64.h
@@ -0,0 +1,37 @@
+/* GStreamer
+ * Copyright (C) <2007> Mike Smith <msmith@xiph.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTSP_BASE64_H__
+#define __GST_RTSP_BASE64_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#ifndef GST_DISABLE_DEPRECATED
+gchar *gst_rtsp_base64_encode    (const gchar *data, gsize len);
+#endif
+
+#ifndef GST_DISABLE_DEPRECATED
+void   gst_rtsp_base64_decode_ip (gchar *data, gsize *len);
+#endif
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_BASE64_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
new file mode 100644
index 0000000..2de21b9
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -0,0 +1,3678 @@
+/* GStreamer
+ * Copyright (C) <2005-2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtspconnection
+ * @short_description: manage RTSP connections
+ * @see_also: gstrtspurl
+ *  
+ * This object manages the RTSP connection to the server. It provides function
+ * to receive and send bytes and messages.
+ *  
+ * Last reviewed on 2007-07-24 (0.10.14)
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* we include this here to get the G_OS_* defines */
+#include <glib.h>
+#include <gst/gst.h>
+
+#ifdef G_OS_WIN32
+/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later.
+ * minwg32 headers check WINVER before allowing the use of these */
+#ifndef WINVER
+#define WINVER 0x0501
+#endif
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#define EINPROGRESS WSAEINPROGRESS
+#else
+#include <sys/ioctl.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_FIONREAD_IN_SYS_FILIO
+#include <sys/filio.h>
+#endif
+
+#include "gstrtspconnection.h"
+#include "gstrtspbase64.h"
+
+union gst_sockaddr
+{
+  struct sockaddr sa;
+  struct sockaddr_in sa_in;
+  struct sockaddr_in6 sa_in6;
+  struct sockaddr_storage sa_stor;
+};
+
+typedef struct
+{
+  gint state;
+  guint save;
+  guchar out[3];                /* the size must be evenly divisible by 3 */
+  guint cout;
+  guint coutl;
+} DecodeCtx;
+
+#ifdef MSG_NOSIGNAL
+#define SEND_FLAGS MSG_NOSIGNAL
+#else
+#define SEND_FLAGS 0
+#endif
+
+#ifdef G_OS_WIN32
+#define READ_SOCKET(fd, buf, len) recv (fd, (char *)buf, len, 0)
+#define WRITE_SOCKET(fd, buf, len) send (fd, (const char *)buf, len, SEND_FLAGS)
+#define SETSOCKOPT(sock, level, name, val, len) setsockopt (sock, level, name, (const char *)val, len)
+#define CLOSE_SOCKET(sock) closesocket (sock)
+#define ERRNO_IS_EAGAIN (WSAGetLastError () == WSAEWOULDBLOCK)
+#define ERRNO_IS_EINTR (WSAGetLastError () == WSAEINTR)
+/* According to Microsoft's connect() documentation this one returns
+ * WSAEWOULDBLOCK and not WSAEINPROGRESS. */
+#define ERRNO_IS_EINPROGRESS (WSAGetLastError () == WSAEWOULDBLOCK)
+#else
+#define READ_SOCKET(fd, buf, len) read (fd, buf, len)
+#define WRITE_SOCKET(fd, buf, len) send (fd, buf, len, SEND_FLAGS)
+#define SETSOCKOPT(sock, level, name, val, len) setsockopt (sock, level, name, val, len)
+#define CLOSE_SOCKET(sock) close (sock)
+#define ERRNO_IS_EAGAIN (errno == EAGAIN)
+#define ERRNO_IS_EINTR (errno == EINTR)
+#define ERRNO_IS_EINPROGRESS (errno == EINPROGRESS)
+#endif
+
+#define ADD_POLLFD(fdset, pfd, fd)        \
+G_STMT_START {                            \
+  (pfd)->fd = fd;                         \
+  gst_poll_add_fd (fdset, pfd);           \
+} G_STMT_END
+
+#define REMOVE_POLLFD(fdset, pfd)          \
+G_STMT_START {                             \
+  if ((pfd)->fd != -1) {                   \
+    GST_DEBUG ("remove fd %d", (pfd)->fd); \
+    gst_poll_remove_fd (fdset, pfd);       \
+    CLOSE_SOCKET ((pfd)->fd);              \
+    (pfd)->fd = -1;                        \
+  }                                        \
+} G_STMT_END
+
+typedef enum
+{
+  TUNNEL_STATE_NONE,
+  TUNNEL_STATE_GET,
+  TUNNEL_STATE_POST,
+  TUNNEL_STATE_COMPLETE
+} GstRTSPTunnelState;
+
+#define TUNNELID_LEN   24
+
+struct _GstRTSPConnection
+{
+  /*< private > */
+  /* URL for the connection */
+  GstRTSPUrl *url;
+
+  /* connection state */
+  GstPollFD fd0;
+  GstPollFD fd1;
+
+  GstPollFD *readfd;
+  GstPollFD *writefd;
+
+  gboolean manual_http;
+
+  gchar tunnelid[TUNNELID_LEN];
+  gboolean tunneled;
+  GstRTSPTunnelState tstate;
+
+  GstPoll *fdset;
+  gchar *ip;
+
+  gint read_ahead;
+
+  gchar *initial_buffer;
+  gsize initial_buffer_offset;
+
+  /* Session state */
+  gint cseq;                    /* sequence number */
+  gchar session_id[512];        /* session id */
+  gint timeout;                 /* session timeout in seconds */
+  GTimer *timer;                /* timeout timer */
+
+  /* Authentication */
+  GstRTSPAuthMethod auth_method;
+  gchar *username;
+  gchar *passwd;
+  GHashTable *auth_params;
+
+  DecodeCtx ctx;
+  DecodeCtx *ctxp;
+
+  gchar *proxy_host;
+  guint proxy_port;
+};
+
+enum
+{
+  STATE_START = 0,
+  STATE_DATA_HEADER,
+  STATE_DATA_BODY,
+  STATE_READ_LINES,
+  STATE_END,
+  STATE_LAST
+};
+
+enum
+{
+  READ_AHEAD_EOH = -1,          /* end of headers */
+  READ_AHEAD_CRLF = -2,
+  READ_AHEAD_CRLFCR = -3
+};
+
+/* a structure for constructing RTSPMessages */
+typedef struct
+{
+  gint state;
+  GstRTSPResult status;
+  guint8 buffer[4096];
+  guint offset;
+
+  guint line;
+  guint8 *body_data;
+  glong body_len;
+} GstRTSPBuilder;
+
+static void
+build_reset (GstRTSPBuilder * builder)
+{
+  g_free (builder->body_data);
+  memset (builder, 0, sizeof (GstRTSPBuilder));
+}
+
+/**
+ * gst_rtsp_connection_create:
+ * @url: a #GstRTSPUrl 
+ * @conn: storage for a #GstRTSPConnection
+ *
+ * Create a newly allocated #GstRTSPConnection from @url and store it in @conn.
+ * The connection will not yet attempt to connect to @url, use
+ * gst_rtsp_connection_connect().
+ *
+ * A copy of @url will be made.
+ *
+ * Returns: #GST_RTSP_OK when @conn contains a valid connection.
+ */
+GstRTSPResult
+gst_rtsp_connection_create (const GstRTSPUrl * url, GstRTSPConnection ** conn)
+{
+  GstRTSPConnection *newconn;
+#ifdef G_OS_WIN32
+  WSADATA w;
+  int error;
+#endif
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+#ifdef G_OS_WIN32
+  error = WSAStartup (0x0202, &w);
+
+  if (error)
+    goto startup_error;
+
+  if (w.wVersion != 0x0202)
+    goto version_error;
+#endif
+
+  newconn = g_new0 (GstRTSPConnection, 1);
+
+  if ((newconn->fdset = gst_poll_new (TRUE)) == NULL)
+    goto no_fdset;
+
+  newconn->url = gst_rtsp_url_copy (url);
+  newconn->fd0.fd = -1;
+  newconn->fd1.fd = -1;
+  newconn->timer = g_timer_new ();
+  newconn->timeout = 60;
+  newconn->cseq = 1;
+
+  newconn->auth_method = GST_RTSP_AUTH_NONE;
+  newconn->username = NULL;
+  newconn->passwd = NULL;
+  newconn->auth_params = NULL;
+
+  *conn = newconn;
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+#ifdef G_OS_WIN32
+startup_error:
+  {
+    g_warning ("Error %d on WSAStartup", error);
+    return GST_RTSP_EWSASTART;
+  }
+version_error:
+  {
+    g_warning ("Windows sockets are not version 0x202 (current 0x%x)",
+        w.wVersion);
+    WSACleanup ();
+    return GST_RTSP_EWSAVERSION;
+  }
+#endif
+no_fdset:
+  {
+    g_free (newconn);
+#ifdef G_OS_WIN32
+    WSACleanup ();
+#endif
+    return GST_RTSP_ESYS;
+  }
+}
+
+/**
+ * gst_rtsp_connection_create_from_fd:
+ * @fd: a file descriptor
+ * @ip: the IP address of the other end
+ * @port: the port used by the other end
+ * @initial_buffer: data already read from @fd
+ * @conn: storage for a #GstRTSPConnection
+ *
+ * Create a new #GstRTSPConnection for handling communication on the existing
+ * file descriptor @fd. The @initial_buffer contains any data already read from
+ * @fd which should be used before starting to read new data.
+ *
+ * Returns: #GST_RTSP_OK when @conn contains a valid connection.
+ *
+ * Since: 0.10.25
+ */
+GstRTSPResult
+gst_rtsp_connection_create_from_fd (gint fd, const gchar * ip, guint16 port,
+    const gchar * initial_buffer, GstRTSPConnection ** conn)
+{
+  GstRTSPConnection *newconn = NULL;
+  GstRTSPUrl *url;
+#ifdef G_OS_WIN32
+  gulong flags = 1;
+#endif
+  GstRTSPResult res;
+
+  g_return_val_if_fail (fd >= 0, GST_RTSP_EINVAL);
+  g_return_val_if_fail (ip != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  /* set to non-blocking mode so that we can cancel the communication */
+#ifndef G_OS_WIN32
+  fcntl (fd, F_SETFL, O_NONBLOCK);
+#else
+  ioctlsocket (fd, FIONBIO, &flags);
+#endif /* G_OS_WIN32 */
+
+  /* create a url for the client address */
+  url = g_new0 (GstRTSPUrl, 1);
+  url->host = g_strdup (ip);
+  url->port = port;
+
+  /* now create the connection object */
+  GST_RTSP_CHECK (gst_rtsp_connection_create (url, &newconn), newconn_failed);
+  gst_rtsp_url_free (url);
+
+  ADD_POLLFD (newconn->fdset, &newconn->fd0, fd);
+
+  /* both read and write initially */
+  newconn->readfd = &newconn->fd0;
+  newconn->writefd = &newconn->fd0;
+
+  newconn->ip = g_strdup (ip);
+
+  newconn->initial_buffer = g_strdup (initial_buffer);
+
+  *conn = newconn;
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+newconn_failed:
+  {
+    gst_rtsp_url_free (url);
+    return res;
+  }
+}
+
+/**
+ * gst_rtsp_connection_accept:
+ * @sock: a socket
+ * @conn: storage for a #GstRTSPConnection
+ *
+ * Accept a new connection on @sock and create a new #GstRTSPConnection for
+ * handling communication on new socket.
+ *
+ * Returns: #GST_RTSP_OK when @conn contains a valid connection.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPResult
+gst_rtsp_connection_accept (gint sock, GstRTSPConnection ** conn)
+{
+  int fd;
+  union gst_sockaddr sa;
+  socklen_t slen = sizeof (sa);
+  gchar ip[INET6_ADDRSTRLEN];
+  guint16 port;
+
+  g_return_val_if_fail (sock >= 0, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  memset (&sa, 0, slen);
+
+#ifndef G_OS_WIN32
+  fd = accept (sock, &sa.sa, &slen);
+#else
+  fd = accept (sock, &sa.sa, (gint *) & slen);
+#endif /* G_OS_WIN32 */
+  if (fd == -1)
+    goto accept_failed;
+
+  if (getnameinfo (&sa.sa, slen, ip, sizeof (ip), NULL, 0, NI_NUMERICHOST) != 0)
+    goto getnameinfo_failed;
+
+  if (sa.sa.sa_family == AF_INET)
+    port = sa.sa_in.sin_port;
+  else if (sa.sa.sa_family == AF_INET6)
+    port = sa.sa_in6.sin6_port;
+  else
+    goto wrong_family;
+
+  return gst_rtsp_connection_create_from_fd (fd, ip, port, NULL, conn);
+
+  /* ERRORS */
+accept_failed:
+  {
+    return GST_RTSP_ESYS;
+  }
+getnameinfo_failed:
+wrong_family:
+  {
+    CLOSE_SOCKET (fd);
+    return GST_RTSP_ERROR;
+  }
+}
+
+static gchar *
+do_resolve (const gchar * host)
+{
+  static gchar ip[INET6_ADDRSTRLEN];
+  struct addrinfo *aires, hints;
+  struct addrinfo *ai;
+  gint aierr;
+
+  memset (&hints, 0, sizeof (struct addrinfo));
+  hints.ai_family = AF_UNSPEC;  /* Allow IPv4 or IPv6 */
+  hints.ai_socktype = SOCK_DGRAM;       /* Datagram socket */
+  hints.ai_flags = AI_PASSIVE;  /* For wildcard IP address */
+  hints.ai_protocol = 0;        /* Any protocol */
+  hints.ai_canonname = NULL;
+  hints.ai_addr = NULL;
+  hints.ai_next = NULL;
+
+  aierr = getaddrinfo (host, NULL, &hints, &aires);
+  if (aierr != 0)
+    goto no_addrinfo;
+
+  for (ai = aires; ai; ai = ai->ai_next) {
+    if (ai->ai_family == AF_INET || ai->ai_family == AF_INET6) {
+      break;
+    }
+  }
+  if (ai == NULL)
+    goto no_family;
+
+  aierr = getnameinfo (ai->ai_addr, ai->ai_addrlen, ip, sizeof (ip), NULL, 0,
+      NI_NUMERICHOST | NI_NUMERICSERV);
+  if (aierr != 0)
+    goto no_address;
+
+  freeaddrinfo (aires);
+
+  return g_strdup (ip);
+
+  /* ERRORS */
+no_addrinfo:
+  {
+    GST_ERROR ("no addrinfo found for %s: %s", host, gai_strerror (aierr));
+    return NULL;
+  }
+no_family:
+  {
+    GST_ERROR ("no family found for %s", host);
+    freeaddrinfo (aires);
+    return NULL;
+  }
+no_address:
+  {
+    GST_ERROR ("no address found for %s: %s", host, gai_strerror (aierr));
+    freeaddrinfo (aires);
+    return NULL;
+  }
+}
+
+static GstRTSPResult
+do_connect (const gchar * ip, guint16 port, GstPollFD * fdout,
+    GstPoll * fdset, GTimeVal * timeout)
+{
+  gint fd;
+  struct addrinfo hints;
+  struct addrinfo *aires;
+  struct addrinfo *ai;
+  gint aierr;
+  gchar service[NI_MAXSERV];
+  gint ret;
+#ifdef G_OS_WIN32
+  unsigned long flags = 1;
+#endif /* G_OS_WIN32 */
+  GstClockTime to;
+  gint retval;
+
+  memset (&hints, 0, sizeof hints);
+  hints.ai_flags = AI_NUMERICHOST;
+  hints.ai_family = AF_UNSPEC;
+  hints.ai_socktype = SOCK_STREAM;
+  g_snprintf (service, sizeof (service) - 1, "%hu", port);
+  service[sizeof (service) - 1] = '\0';
+
+  aierr = getaddrinfo (ip, service, &hints, &aires);
+  if (aierr != 0)
+    goto no_addrinfo;
+
+  for (ai = aires; ai; ai = ai->ai_next) {
+    if (ai->ai_family == AF_INET || ai->ai_family == AF_INET6) {
+      break;
+    }
+  }
+  if (ai == NULL)
+    goto no_family;
+
+  fd = socket (ai->ai_family, SOCK_STREAM, 0);
+  if (fd == -1)
+    goto no_socket;
+
+  /* set to non-blocking mode so that we can cancel the connect */
+#ifndef G_OS_WIN32
+  fcntl (fd, F_SETFL, O_NONBLOCK);
+#else
+  ioctlsocket (fd, FIONBIO, &flags);
+#endif /* G_OS_WIN32 */
+
+  /* add the socket to our fdset */
+  ADD_POLLFD (fdset, fdout, fd);
+
+  /* we are going to connect ASYNC now */
+  ret = connect (fd, ai->ai_addr, ai->ai_addrlen);
+  if (ret == 0)
+    goto done;
+  if (!ERRNO_IS_EINPROGRESS)
+    goto sys_error;
+
+  /* wait for connect to complete up to the specified timeout or until we got
+   * interrupted. */
+  gst_poll_fd_ctl_write (fdset, fdout, TRUE);
+
+  to = timeout ? GST_TIMEVAL_TO_TIME (*timeout) : GST_CLOCK_TIME_NONE;
+
+  do {
+    retval = gst_poll_wait (fdset, to);
+  } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
+
+  if (retval == 0)
+    goto timeout;
+  else if (retval == -1)
+    goto sys_error;
+
+  /* we can still have an error connecting on windows */
+  if (gst_poll_fd_has_error (fdset, fdout)) {
+    socklen_t len = sizeof (errno);
+#ifndef G_OS_WIN32
+    getsockopt (fd, SOL_SOCKET, SO_ERROR, &errno, &len);
+#else
+    getsockopt (fd, SOL_SOCKET, SO_ERROR, (char *) &errno, &len);
+#endif
+    goto sys_error;
+  } else {
+#ifdef __APPLE__
+    /* osx wakes up select with POLLOUT if the connection is refused... */
+    socklen_t len = sizeof (errno);
+    getsockopt (fd, SOL_SOCKET, SO_ERROR, (char *) &errno, &len);
+    if (errno != 0)
+      goto sys_error;
+#endif
+  }
+
+  gst_poll_fd_ignored (fdset, fdout);
+
+done:
+  freeaddrinfo (aires);
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+no_addrinfo:
+  {
+    GST_ERROR ("no addrinfo found for %s: %s", ip, gai_strerror (aierr));
+    return GST_RTSP_ERROR;
+  }
+no_family:
+  {
+    GST_ERROR ("no family found for %s", ip);
+    freeaddrinfo (aires);
+    return GST_RTSP_ERROR;
+  }
+no_socket:
+  {
+    GST_ERROR ("no socket %d (%s)", errno, g_strerror (errno));
+    freeaddrinfo (aires);
+    return GST_RTSP_ESYS;
+  }
+sys_error:
+  {
+    GST_ERROR ("system error %d (%s)", errno, g_strerror (errno));
+    REMOVE_POLLFD (fdset, fdout);
+    freeaddrinfo (aires);
+    return GST_RTSP_ESYS;
+  }
+timeout:
+  {
+    GST_ERROR ("timeout");
+    REMOVE_POLLFD (fdset, fdout);
+    freeaddrinfo (aires);
+    return GST_RTSP_ETIMEOUT;
+  }
+}
+
+static GstRTSPResult
+setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout)
+{
+  gint i;
+  GstRTSPResult res;
+  gchar *ip;
+  gchar *uri;
+  gchar *value;
+  guint16 port, url_port;
+  GstRTSPUrl *url;
+  gchar *hostparam;
+  GstRTSPMessage *msg;
+  GstRTSPMessage response;
+  gboolean old_http;
+
+  memset (&response, 0, sizeof (response));
+  gst_rtsp_message_init (&response);
+
+  /* create a random sessionid */
+  for (i = 0; i < TUNNELID_LEN; i++)
+    conn->tunnelid[i] = g_random_int_range ('a', 'z');
+  conn->tunnelid[TUNNELID_LEN - 1] = '\0';
+
+  url = conn->url;
+  /* get the port from the url */
+  gst_rtsp_url_get_port (url, &url_port);
+
+  if (conn->proxy_host) {
+    uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port,
+        url->abspath, url->query ? "?" : "", url->query ? url->query : "");
+    hostparam = g_strdup_printf ("%s:%d", url->host, url_port);
+    ip = conn->proxy_host;
+    port = conn->proxy_port;
+  } else {
+    uri = g_strdup_printf ("%s%s%s", url->abspath, url->query ? "?" : "",
+        url->query ? url->query : "");
+    hostparam = NULL;
+    ip = conn->ip;
+    port = url_port;
+  }
+
+  /* create the GET request for the read connection */
+  GST_RTSP_CHECK (gst_rtsp_message_new_request (&msg, GST_RTSP_GET, uri),
+      no_message);
+  msg->type = GST_RTSP_MESSAGE_HTTP_REQUEST;
+
+  if (hostparam != NULL)
+    gst_rtsp_message_add_header (msg, GST_RTSP_HDR_HOST, hostparam);
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_X_SESSIONCOOKIE,
+      conn->tunnelid);
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_ACCEPT,
+      "application/x-rtsp-tunnelled");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CACHE_CONTROL, "no-cache");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_PRAGMA, "no-cache");
+
+  /* we start by writing to this fd */
+  conn->writefd = &conn->fd0;
+
+  /* we need to temporarily set conn->tunneled to FALSE to prevent the HTTP
+   * request from being base64 encoded */
+  conn->tunneled = FALSE;
+  GST_RTSP_CHECK (gst_rtsp_connection_send (conn, msg, timeout), write_failed);
+  gst_rtsp_message_free (msg);
+  conn->tunneled = TRUE;
+
+  /* receive the response to the GET request */
+  /* we need to temporarily set manual_http to TRUE since
+   * gst_rtsp_connection_receive() will treat the HTTP response as a parsing
+   * failure otherwise */
+  old_http = conn->manual_http;
+  conn->manual_http = TRUE;
+  GST_RTSP_CHECK (gst_rtsp_connection_receive (conn, &response, timeout),
+      read_failed);
+  conn->manual_http = old_http;
+
+  if (response.type != GST_RTSP_MESSAGE_HTTP_RESPONSE ||
+      response.type_data.response.code != GST_RTSP_STS_OK)
+    goto wrong_result;
+
+  if (gst_rtsp_message_get_header (&response, GST_RTSP_HDR_X_SERVER_IP_ADDRESS,
+          &value, 0) == GST_RTSP_OK) {
+    if (conn->proxy_host) {
+      /* if we use a proxy we need to change the destination url */
+      g_free (url->host);
+      url->host = g_strdup (value);
+      g_free (hostparam);
+      hostparam = g_strdup_printf ("%s:%d", url->host, url_port);
+    } else {
+      /* and resolve the new ip address */
+      if (!(ip = do_resolve (value)))
+        goto not_resolved;
+      g_free (conn->ip);
+      conn->ip = ip;
+    }
+  }
+
+  /* connect to the host/port */
+  res = do_connect (ip, port, &conn->fd1, conn->fdset, timeout);
+  if (res != GST_RTSP_OK)
+    goto connect_failed;
+
+  /* this is now our writing socket */
+  conn->writefd = &conn->fd1;
+
+  /* create the POST request for the write connection */
+  GST_RTSP_CHECK (gst_rtsp_message_new_request (&msg, GST_RTSP_POST, uri),
+      no_message);
+  msg->type = GST_RTSP_MESSAGE_HTTP_REQUEST;
+
+  if (hostparam != NULL)
+    gst_rtsp_message_add_header (msg, GST_RTSP_HDR_HOST, hostparam);
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_X_SESSIONCOOKIE,
+      conn->tunnelid);
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_ACCEPT,
+      "application/x-rtsp-tunnelled");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CACHE_CONTROL, "no-cache");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_PRAGMA, "no-cache");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_EXPIRES,
+      "Sun, 9 Jan 1972 00:00:00 GMT");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CONTENT_LENGTH, "32767");
+
+  /* we need to temporarily set conn->tunneled to FALSE to prevent the HTTP
+   * request from being base64 encoded */
+  conn->tunneled = FALSE;
+  GST_RTSP_CHECK (gst_rtsp_connection_send (conn, msg, timeout), write_failed);
+  gst_rtsp_message_free (msg);
+  conn->tunneled = TRUE;
+
+exit:
+  gst_rtsp_message_unset (&response);
+  g_free (hostparam);
+  g_free (uri);
+
+  return res;
+
+  /* ERRORS */
+no_message:
+  {
+    GST_ERROR ("failed to create request (%d)", res);
+    goto exit;
+  }
+write_failed:
+  {
+    GST_ERROR ("write failed (%d)", res);
+    gst_rtsp_message_free (msg);
+    conn->tunneled = TRUE;
+    goto exit;
+  }
+read_failed:
+  {
+    GST_ERROR ("read failed (%d)", res);
+    conn->manual_http = FALSE;
+    goto exit;
+  }
+wrong_result:
+  {
+    GST_ERROR ("got failure response %d %s", response.type_data.response.code,
+        response.type_data.response.reason);
+    res = GST_RTSP_ERROR;
+    goto exit;
+  }
+not_resolved:
+  {
+    GST_ERROR ("could not resolve %s", conn->ip);
+    res = GST_RTSP_ENET;
+    goto exit;
+  }
+connect_failed:
+  {
+    GST_ERROR ("failed to connect");
+    goto exit;
+  }
+}
+
+/**
+ * gst_rtsp_connection_connect:
+ * @conn: a #GstRTSPConnection 
+ * @timeout: a #GTimeVal timeout
+ *
+ * Attempt to connect to the url of @conn made with
+ * gst_rtsp_connection_create(). If @timeout is #NULL this function can block
+ * forever. If @timeout contains a valid timeout, this function will return
+ * #GST_RTSP_ETIMEOUT after the timeout expired.
+ *
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK when a connection could be made.
+ */
+GstRTSPResult
+gst_rtsp_connection_connect (GstRTSPConnection * conn, GTimeVal * timeout)
+{
+  GstRTSPResult res;
+  gchar *ip;
+  guint16 port;
+  GstRTSPUrl *url;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->url != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->fd0.fd < 0, GST_RTSP_EINVAL);
+
+  url = conn->url;
+
+  if (conn->proxy_host && conn->tunneled) {
+    if (!(ip = do_resolve (conn->proxy_host))) {
+      GST_ERROR ("could not resolve %s", conn->proxy_host);
+      goto not_resolved;
+    }
+    port = conn->proxy_port;
+    g_free (conn->proxy_host);
+    conn->proxy_host = ip;
+  } else {
+    if (!(ip = do_resolve (url->host))) {
+      GST_ERROR ("could not resolve %s", url->host);
+      goto not_resolved;
+    }
+    /* get the port from the url */
+    gst_rtsp_url_get_port (url, &port);
+
+    g_free (conn->ip);
+    conn->ip = ip;
+  }
+
+  /* connect to the host/port */
+  res = do_connect (ip, port, &conn->fd0, conn->fdset, timeout);
+  if (res != GST_RTSP_OK)
+    goto connect_failed;
+
+  /* this is our read URL */
+  conn->readfd = &conn->fd0;
+
+  if (conn->tunneled) {
+    res = setup_tunneling (conn, timeout);
+    if (res != GST_RTSP_OK)
+      goto tunneling_failed;
+  } else {
+    conn->writefd = &conn->fd0;
+  }
+
+  return GST_RTSP_OK;
+
+not_resolved:
+  {
+    return GST_RTSP_ENET;
+  }
+connect_failed:
+  {
+    GST_ERROR ("failed to connect");
+    return res;
+  }
+tunneling_failed:
+  {
+    GST_ERROR ("failed to setup tunneling");
+    return res;
+  }
+}
+
+static void
+auth_digest_compute_hex_urp (const gchar * username,
+    const gchar * realm, const gchar * password, gchar hex_urp[33])
+{
+  GChecksum *md5_context = g_checksum_new (G_CHECKSUM_MD5);
+  const gchar *digest_string;
+
+  g_checksum_update (md5_context, (const guchar *) username, strlen (username));
+  g_checksum_update (md5_context, (const guchar *) ":", 1);
+  g_checksum_update (md5_context, (const guchar *) realm, strlen (realm));
+  g_checksum_update (md5_context, (const guchar *) ":", 1);
+  g_checksum_update (md5_context, (const guchar *) password, strlen (password));
+  digest_string = g_checksum_get_string (md5_context);
+
+  memset (hex_urp, 0, 33);
+  memcpy (hex_urp, digest_string, strlen (digest_string));
+
+  g_checksum_free (md5_context);
+}
+
+static void
+auth_digest_compute_response (const gchar * method,
+    const gchar * uri, const gchar * hex_a1, const gchar * nonce,
+    gchar response[33])
+{
+  char hex_a2[33] = { 0, };
+  GChecksum *md5_context = g_checksum_new (G_CHECKSUM_MD5);
+  const gchar *digest_string;
+
+  /* compute A2 */
+  g_checksum_update (md5_context, (const guchar *) method, strlen (method));
+  g_checksum_update (md5_context, (const guchar *) ":", 1);
+  g_checksum_update (md5_context, (const guchar *) uri, strlen (uri));
+  digest_string = g_checksum_get_string (md5_context);
+  memcpy (hex_a2, digest_string, strlen (digest_string));
+
+  /* compute KD */
+  g_checksum_reset (md5_context);
+  g_checksum_update (md5_context, (const guchar *) hex_a1, strlen (hex_a1));
+  g_checksum_update (md5_context, (const guchar *) ":", 1);
+  g_checksum_update (md5_context, (const guchar *) nonce, strlen (nonce));
+  g_checksum_update (md5_context, (const guchar *) ":", 1);
+
+  g_checksum_update (md5_context, (const guchar *) hex_a2, 32);
+  digest_string = g_checksum_get_string (md5_context);
+  memset (response, 0, 33);
+  memcpy (response, digest_string, strlen (digest_string));
+
+  g_checksum_free (md5_context);
+}
+
+static void
+add_auth_header (GstRTSPConnection * conn, GstRTSPMessage * message)
+{
+  switch (conn->auth_method) {
+    case GST_RTSP_AUTH_BASIC:{
+      gchar *user_pass;
+      gchar *user_pass64;
+      gchar *auth_string;
+
+      if (conn->username == NULL || conn->passwd == NULL)
+        break;
+
+      user_pass = g_strdup_printf ("%s:%s", conn->username, conn->passwd);
+      user_pass64 = g_base64_encode ((guchar *) user_pass, strlen (user_pass));
+      auth_string = g_strdup_printf ("Basic %s", user_pass64);
+
+      gst_rtsp_message_take_header (message, GST_RTSP_HDR_AUTHORIZATION,
+          auth_string);
+
+      g_free (user_pass);
+      g_free (user_pass64);
+      break;
+    }
+    case GST_RTSP_AUTH_DIGEST:{
+      gchar response[33], hex_urp[33];
+      gchar *auth_string, *auth_string2;
+      gchar *realm;
+      gchar *nonce;
+      gchar *opaque;
+      const gchar *uri;
+      const gchar *method;
+
+      /* we need to have some params set */
+      if (conn->auth_params == NULL || conn->username == NULL ||
+          conn->passwd == NULL)
+        break;
+
+      /* we need the realm and nonce */
+      realm = (gchar *) g_hash_table_lookup (conn->auth_params, "realm");
+      nonce = (gchar *) g_hash_table_lookup (conn->auth_params, "nonce");
+      if (realm == NULL || nonce == NULL)
+        break;
+
+      auth_digest_compute_hex_urp (conn->username, realm, conn->passwd,
+          hex_urp);
+
+      method = gst_rtsp_method_as_text (message->type_data.request.method);
+      uri = message->type_data.request.uri;
+
+      /* Assume no qop, algorithm=md5, stale=false */
+      /* For algorithm MD5, a1 = urp. */
+      auth_digest_compute_response (method, uri, hex_urp, nonce, response);
+      auth_string = g_strdup_printf ("Digest username=\"%s\", "
+          "realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"",
+          conn->username, realm, nonce, uri, response);
+
+      opaque = (gchar *) g_hash_table_lookup (conn->auth_params, "opaque");
+      if (opaque) {
+        auth_string2 = g_strdup_printf ("%s, opaque=\"%s\"", auth_string,
+            opaque);
+        g_free (auth_string);
+        auth_string = auth_string2;
+      }
+      gst_rtsp_message_take_header (message, GST_RTSP_HDR_AUTHORIZATION,
+          auth_string);
+      break;
+    }
+    default:
+      /* Nothing to do */
+      break;
+  }
+}
+
+static void
+gen_date_string (gchar * date_string, guint len)
+{
+  static const char wkdays[7][4] =
+      { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+  static const char months[12][4] =
+      { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
+    "Nov", "Dec"
+  };
+  struct tm tm;
+  time_t t;
+
+  time (&t);
+
+#ifdef HAVE_GMTIME_R
+  gmtime_r (&t, &tm);
+#else
+  tm = *gmtime (&t);
+#endif
+
+  g_snprintf (date_string, len, "%s, %02d %s %04d %02d:%02d:%02d GMT",
+      wkdays[tm.tm_wday], tm.tm_mday, months[tm.tm_mon], tm.tm_year + 1900,
+      tm.tm_hour, tm.tm_min, tm.tm_sec);
+}
+
+static GstRTSPResult
+write_bytes (gint fd, const guint8 * buffer, guint * idx, guint size)
+{
+  guint left;
+
+  if (G_UNLIKELY (*idx > size))
+    return GST_RTSP_ERROR;
+
+  left = size - *idx;
+
+  while (left) {
+    gint r;
+
+    r = WRITE_SOCKET (fd, &buffer[*idx], left);
+    if (G_UNLIKELY (r == 0)) {
+      return GST_RTSP_EINTR;
+    } else if (G_UNLIKELY (r < 0)) {
+      if (ERRNO_IS_EAGAIN)
+        return GST_RTSP_EINTR;
+      if (!ERRNO_IS_EINTR)
+        return GST_RTSP_ESYS;
+    } else {
+      left -= r;
+      *idx += r;
+    }
+  }
+  return GST_RTSP_OK;
+}
+
+static gint
+fill_raw_bytes (GstRTSPConnection * conn, guint8 * buffer, guint size)
+{
+  gint out = 0;
+
+  if (G_UNLIKELY (conn->initial_buffer != NULL)) {
+    gsize left = strlen (&conn->initial_buffer[conn->initial_buffer_offset]);
+
+    out = MIN (left, size);
+    memcpy (buffer, &conn->initial_buffer[conn->initial_buffer_offset], out);
+
+    if (left == (gsize) out) {
+      g_free (conn->initial_buffer);
+      conn->initial_buffer = NULL;
+      conn->initial_buffer_offset = 0;
+    } else
+      conn->initial_buffer_offset += out;
+  }
+
+  if (G_LIKELY (size > (guint) out)) {
+    gint r;
+
+    r = READ_SOCKET (conn->readfd->fd, &buffer[out], size - out);
+    if (r <= 0) {
+      if (out == 0)
+        out = r;
+    } else
+      out += r;
+  }
+
+  return out;
+}
+
+static gint
+fill_bytes (GstRTSPConnection * conn, guint8 * buffer, guint size)
+{
+  DecodeCtx *ctx = conn->ctxp;
+  gint out = 0;
+
+  if (ctx) {
+    while (size > 0) {
+      guint8 in[sizeof (ctx->out) * 4 / 3];
+      gint r;
+
+      while (size > 0 && ctx->cout < ctx->coutl) {
+        /* we have some leftover bytes */
+        *buffer++ = ctx->out[ctx->cout++];
+        size--;
+        out++;
+      }
+
+      /* got what we needed? */
+      if (size == 0)
+        break;
+
+      /* try to read more bytes */
+      r = fill_raw_bytes (conn, in, sizeof (in));
+      if (r <= 0) {
+        if (out == 0)
+          out = r;
+        break;
+      }
+
+      ctx->cout = 0;
+      ctx->coutl =
+          g_base64_decode_step ((gchar *) in, r, ctx->out, &ctx->state,
+          &ctx->save);
+    }
+  } else {
+    out = fill_raw_bytes (conn, buffer, size);
+  }
+
+  return out;
+}
+
+static GstRTSPResult
+read_bytes (GstRTSPConnection * conn, guint8 * buffer, guint * idx, guint size)
+{
+  guint left;
+
+  if (G_UNLIKELY (*idx > size))
+    return GST_RTSP_ERROR;
+
+  left = size - *idx;
+
+  while (left) {
+    gint r;
+
+    r = fill_bytes (conn, &buffer[*idx], left);
+    if (G_UNLIKELY (r == 0)) {
+      return GST_RTSP_EEOF;
+    } else if (G_UNLIKELY (r < 0)) {
+      if (ERRNO_IS_EAGAIN)
+        return GST_RTSP_EINTR;
+      if (!ERRNO_IS_EINTR)
+        return GST_RTSP_ESYS;
+    } else {
+      left -= r;
+      *idx += r;
+    }
+  }
+  return GST_RTSP_OK;
+}
+
+/* The code below tries to handle clients using \r, \n or \r\n to indicate the
+ * end of a line. It even does its best to handle clients which mix them (even
+ * though this is a really stupid idea (tm).) It also handles Line White Space
+ * (LWS), where a line end followed by whitespace is considered LWS. This is
+ * the method used in RTSP (and HTTP) to break long lines.
+ */
+static GstRTSPResult
+read_line (GstRTSPConnection * conn, guint8 * buffer, guint * idx, guint size)
+{
+  while (TRUE) {
+    guint8 c;
+    gint r;
+
+    if (conn->read_ahead == READ_AHEAD_EOH) {
+      /* the last call to read_line() already determined that we have reached
+       * the end of the headers, so convey that information now */
+      conn->read_ahead = 0;
+      break;
+    } else if (conn->read_ahead == READ_AHEAD_CRLF) {
+      /* the last call to read_line() left off after having read \r\n */
+      c = '\n';
+    } else if (conn->read_ahead == READ_AHEAD_CRLFCR) {
+      /* the last call to read_line() left off after having read \r\n\r */
+      c = '\r';
+    } else if (conn->read_ahead != 0) {
+      /* the last call to read_line() left us with a character to start with */
+      c = (guint8) conn->read_ahead;
+      conn->read_ahead = 0;
+    } else {
+      /* read the next character */
+      r = fill_bytes (conn, &c, 1);
+      if (G_UNLIKELY (r == 0)) {
+        return GST_RTSP_EEOF;
+      } else if (G_UNLIKELY (r < 0)) {
+        if (ERRNO_IS_EAGAIN)
+          return GST_RTSP_EINTR;
+        if (!ERRNO_IS_EINTR)
+          return GST_RTSP_ESYS;
+        continue;
+      }
+    }
+
+    /* special treatment of line endings */
+    if (c == '\r' || c == '\n') {
+      guint8 read_ahead;
+
+    retry:
+      /* need to read ahead one more character to know what to do... */
+      r = fill_bytes (conn, &read_ahead, 1);
+      if (G_UNLIKELY (r == 0)) {
+        return GST_RTSP_EEOF;
+      } else if (G_UNLIKELY (r < 0)) {
+        if (ERRNO_IS_EAGAIN) {
+          /* remember the original character we read and try again next time */
+          if (conn->read_ahead == 0)
+            conn->read_ahead = c;
+          return GST_RTSP_EINTR;
+        }
+        if (!ERRNO_IS_EINTR)
+          return GST_RTSP_ESYS;
+        goto retry;
+      }
+
+      if (read_ahead == ' ' || read_ahead == '\t') {
+        if (conn->read_ahead == READ_AHEAD_CRLFCR) {
+          /* got \r\n\r followed by whitespace, treat it as a normal line
+           * followed by one starting with LWS */
+          conn->read_ahead = read_ahead;
+          break;
+        } else {
+          /* got LWS, change the line ending to a space and continue */
+          c = ' ';
+          conn->read_ahead = read_ahead;
+        }
+      } else if (conn->read_ahead == READ_AHEAD_CRLFCR) {
+        if (read_ahead == '\r' || read_ahead == '\n') {
+          /* got \r\n\r\r or \r\n\r\n, treat it as the end of the headers */
+          conn->read_ahead = READ_AHEAD_EOH;
+          break;
+        } else {
+          /* got \r\n\r followed by something else, this is not really
+           * supported since we have probably just eaten the first character
+           * of the body or the next message, so just ignore the second \r
+           * and live with it... */
+          conn->read_ahead = read_ahead;
+          break;
+        }
+      } else if (conn->read_ahead == READ_AHEAD_CRLF) {
+        if (read_ahead == '\r') {
+          /* got \r\n\r so far, need one more character... */
+          conn->read_ahead = READ_AHEAD_CRLFCR;
+          goto retry;
+        } else if (read_ahead == '\n') {
+          /* got \r\n\n, treat it as the end of the headers */
+          conn->read_ahead = READ_AHEAD_EOH;
+          break;
+        } else {
+          /* found the end of a line, keep read_ahead for the next line */
+          conn->read_ahead = read_ahead;
+          break;
+        }
+      } else if (c == read_ahead) {
+        /* got double \r or \n, treat it as the end of the headers */
+        conn->read_ahead = READ_AHEAD_EOH;
+        break;
+      } else if (c == '\r' && read_ahead == '\n') {
+        /* got \r\n so far, still need more to know what to do... */
+        conn->read_ahead = READ_AHEAD_CRLF;
+        goto retry;
+      } else {
+        /* found the end of a line, keep read_ahead for the next line */
+        conn->read_ahead = read_ahead;
+        break;
+      }
+    }
+
+    if (G_LIKELY (*idx < size - 1))
+      buffer[(*idx)++] = c;
+  }
+  buffer[*idx] = '\0';
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_write:
+ * @conn: a #GstRTSPConnection
+ * @data: the data to write
+ * @size: the size of @data
+ * @timeout: a timeout value or #NULL
+ *
+ * Attempt to write @size bytes of @data to the connected @conn, blocking up to
+ * the specified @timeout. @timeout can be #NULL, in which case this function
+ * might block forever.
+ * 
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_write (GstRTSPConnection * conn, const guint8 * data,
+    guint size, GTimeVal * timeout)
+{
+  guint offset;
+  gint retval;
+  GstClockTime to;
+  GstRTSPResult res;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL || size == 0, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->writefd != NULL, GST_RTSP_EINVAL);
+
+  gst_poll_set_controllable (conn->fdset, TRUE);
+  gst_poll_fd_ctl_write (conn->fdset, conn->writefd, TRUE);
+  gst_poll_fd_ctl_read (conn->fdset, conn->readfd, FALSE);
+  /* clear all previous poll results */
+  gst_poll_fd_ignored (conn->fdset, conn->writefd);
+  gst_poll_fd_ignored (conn->fdset, conn->readfd);
+
+  to = timeout ? GST_TIMEVAL_TO_TIME (*timeout) : GST_CLOCK_TIME_NONE;
+
+  offset = 0;
+
+  while (TRUE) {
+    /* try to write */
+    res = write_bytes (conn->writefd->fd, data, &offset, size);
+    if (G_LIKELY (res == GST_RTSP_OK))
+      break;
+    if (G_UNLIKELY (res != GST_RTSP_EINTR))
+      goto write_error;
+
+    /* not all is written, wait until we can write more */
+    do {
+      retval = gst_poll_wait (conn->fdset, to);
+    } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
+
+    if (G_UNLIKELY (retval == 0))
+      goto timeout;
+
+    if (G_UNLIKELY (retval == -1)) {
+      if (errno == EBUSY)
+        goto stopped;
+      else
+        goto select_error;
+    }
+
+    /* could also be an error with read socket */
+    if (gst_poll_fd_has_error (conn->fdset, conn->readfd))
+      goto socket_error;
+  }
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+timeout:
+  {
+    return GST_RTSP_ETIMEOUT;
+  }
+select_error:
+  {
+    return GST_RTSP_ESYS;
+  }
+stopped:
+  {
+    return GST_RTSP_EINTR;
+  }
+socket_error:
+  {
+    return GST_RTSP_ENET;
+  }
+write_error:
+  {
+    return res;
+  }
+}
+
+static GString *
+message_to_string (GstRTSPConnection * conn, GstRTSPMessage * message)
+{
+  GString *str = NULL;
+
+  str = g_string_new ("");
+
+  switch (message->type) {
+    case GST_RTSP_MESSAGE_REQUEST:
+      /* create request string, add CSeq */
+      g_string_append_printf (str, "%s %s RTSP/1.0\r\n"
+          "CSeq: %d\r\n",
+          gst_rtsp_method_as_text (message->type_data.request.method),
+          message->type_data.request.uri, conn->cseq++);
+      /* add session id if we have one */
+      if (conn->session_id[0] != '\0') {
+        gst_rtsp_message_remove_header (message, GST_RTSP_HDR_SESSION, -1);
+        gst_rtsp_message_add_header (message, GST_RTSP_HDR_SESSION,
+            conn->session_id);
+      }
+      /* add any authentication headers */
+      add_auth_header (conn, message);
+      break;
+    case GST_RTSP_MESSAGE_RESPONSE:
+      /* create response string */
+      g_string_append_printf (str, "RTSP/1.0 %d %s\r\n",
+          message->type_data.response.code, message->type_data.response.reason);
+      break;
+    case GST_RTSP_MESSAGE_HTTP_REQUEST:
+      /* create request string */
+      g_string_append_printf (str, "%s %s HTTP/%s\r\n",
+          gst_rtsp_method_as_text (message->type_data.request.method),
+          message->type_data.request.uri,
+          gst_rtsp_version_as_text (message->type_data.request.version));
+      /* add any authentication headers */
+      add_auth_header (conn, message);
+      break;
+    case GST_RTSP_MESSAGE_HTTP_RESPONSE:
+      /* create response string */
+      g_string_append_printf (str, "HTTP/%s %d %s\r\n",
+          gst_rtsp_version_as_text (message->type_data.request.version),
+          message->type_data.response.code, message->type_data.response.reason);
+      break;
+    case GST_RTSP_MESSAGE_DATA:
+    {
+      guint8 data_header[4];
+
+      /* prepare data header */
+      data_header[0] = '$';
+      data_header[1] = message->type_data.data.channel;
+      data_header[2] = (message->body_size >> 8) & 0xff;
+      data_header[3] = message->body_size & 0xff;
+
+      /* create string with header and data */
+      str = g_string_append_len (str, (gchar *) data_header, 4);
+      str =
+          g_string_append_len (str, (gchar *) message->body,
+          message->body_size);
+      break;
+    }
+    default:
+      g_string_free (str, TRUE);
+      g_return_val_if_reached (NULL);
+      break;
+  }
+
+  /* append headers and body */
+  if (message->type != GST_RTSP_MESSAGE_DATA) {
+    gchar date_string[100];
+
+    gen_date_string (date_string, sizeof (date_string));
+
+    /* add date header */
+    gst_rtsp_message_remove_header (message, GST_RTSP_HDR_DATE, -1);
+    gst_rtsp_message_add_header (message, GST_RTSP_HDR_DATE, date_string);
+
+    /* append headers */
+    gst_rtsp_message_append_headers (message, str);
+
+    /* append Content-Length and body if needed */
+    if (message->body != NULL && message->body_size > 0) {
+      gchar *len;
+
+      len = g_strdup_printf ("%d", message->body_size);
+      g_string_append_printf (str, "%s: %s\r\n",
+          gst_rtsp_header_as_text (GST_RTSP_HDR_CONTENT_LENGTH), len);
+      g_free (len);
+      /* header ends here */
+      g_string_append (str, "\r\n");
+      str =
+          g_string_append_len (str, (gchar *) message->body,
+          message->body_size);
+    } else {
+      /* just end headers */
+      g_string_append (str, "\r\n");
+    }
+  }
+
+  return str;
+}
+
+/**
+ * gst_rtsp_connection_send:
+ * @conn: a #GstRTSPConnection
+ * @message: the message to send
+ * @timeout: a timeout value or #NULL
+ *
+ * Attempt to send @message to the connected @conn, blocking up to
+ * the specified @timeout. @timeout can be #NULL, in which case this function
+ * might block forever.
+ * 
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_send (GstRTSPConnection * conn, GstRTSPMessage * message,
+    GTimeVal * timeout)
+{
+  GString *string = NULL;
+  GstRTSPResult res;
+  gchar *str;
+  gsize len;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (message != NULL, GST_RTSP_EINVAL);
+
+  if (G_UNLIKELY (!(string = message_to_string (conn, message))))
+    goto no_message;
+
+  if (conn->tunneled) {
+    str = g_base64_encode ((const guchar *) string->str, string->len);
+    g_string_free (string, TRUE);
+    len = strlen (str);
+  } else {
+    str = string->str;
+    len = string->len;
+    g_string_free (string, FALSE);
+  }
+
+  /* write request */
+  res = gst_rtsp_connection_write (conn, (guint8 *) str, len, timeout);
+
+  g_free (str);
+
+  return res;
+
+no_message:
+  {
+    g_warning ("Wrong message");
+    return GST_RTSP_EINVAL;
+  }
+}
+
+static GstRTSPResult
+parse_string (gchar * dest, gint size, gchar ** src)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  gint idx;
+
+  idx = 0;
+  /* skip spaces */
+  while (g_ascii_isspace (**src))
+    (*src)++;
+
+  while (!g_ascii_isspace (**src) && **src != '\0') {
+    if (idx < size - 1)
+      dest[idx++] = **src;
+    else
+      res = GST_RTSP_EPARSE;
+    (*src)++;
+  }
+  if (size > 0)
+    dest[idx] = '\0';
+
+  return res;
+}
+
+static GstRTSPResult
+parse_protocol_version (gchar * protocol, GstRTSPMsgType * type,
+    GstRTSPVersion * version)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  gchar *ver;
+
+  if (G_LIKELY ((ver = strchr (protocol, '/')) != NULL)) {
+    guint major;
+    guint minor;
+    gchar dummychar;
+
+    *ver++ = '\0';
+
+    /* the version number must be formatted as X.Y with nothing following */
+    if (sscanf (ver, "%u.%u%c", &major, &minor, &dummychar) != 2)
+      res = GST_RTSP_EPARSE;
+
+    if (g_ascii_strcasecmp (protocol, "RTSP") == 0) {
+      if (major != 1 || minor != 0) {
+        *version = GST_RTSP_VERSION_INVALID;
+        res = GST_RTSP_ERROR;
+      }
+    } else if (g_ascii_strcasecmp (protocol, "HTTP") == 0) {
+      if (*type == GST_RTSP_MESSAGE_REQUEST)
+        *type = GST_RTSP_MESSAGE_HTTP_REQUEST;
+      else if (*type == GST_RTSP_MESSAGE_RESPONSE)
+        *type = GST_RTSP_MESSAGE_HTTP_RESPONSE;
+
+      if (major == 1 && minor == 1) {
+        *version = GST_RTSP_VERSION_1_1;
+      } else if (major != 1 || minor != 0) {
+        *version = GST_RTSP_VERSION_INVALID;
+        res = GST_RTSP_ERROR;
+      }
+    } else
+      res = GST_RTSP_EPARSE;
+  } else
+    res = GST_RTSP_EPARSE;
+
+  return res;
+}
+
+static GstRTSPResult
+parse_response_status (guint8 * buffer, GstRTSPMessage * msg)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  GstRTSPResult res2;
+  gchar versionstr[20];
+  gchar codestr[4];
+  gint code;
+  gchar *bptr;
+
+  bptr = (gchar *) buffer;
+
+  if (parse_string (versionstr, sizeof (versionstr), &bptr) != GST_RTSP_OK)
+    res = GST_RTSP_EPARSE;
+
+  if (parse_string (codestr, sizeof (codestr), &bptr) != GST_RTSP_OK)
+    res = GST_RTSP_EPARSE;
+  code = atoi (codestr);
+  if (G_UNLIKELY (*codestr == '\0' || code < 0 || code >= 600))
+    res = GST_RTSP_EPARSE;
+
+  while (g_ascii_isspace (*bptr))
+    bptr++;
+
+  if (G_UNLIKELY (gst_rtsp_message_init_response (msg, code, bptr,
+              NULL) != GST_RTSP_OK))
+    res = GST_RTSP_EPARSE;
+
+  res2 = parse_protocol_version (versionstr, &msg->type,
+      &msg->type_data.response.version);
+  if (G_LIKELY (res == GST_RTSP_OK))
+    res = res2;
+
+  return res;
+}
+
+static GstRTSPResult
+parse_request_line (guint8 * buffer, GstRTSPMessage * msg)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+  GstRTSPResult res2;
+  gchar versionstr[20];
+  gchar methodstr[20];
+  gchar urlstr[4096];
+  gchar *bptr;
+  GstRTSPMethod method;
+
+  bptr = (gchar *) buffer;
+
+  if (parse_string (methodstr, sizeof (methodstr), &bptr) != GST_RTSP_OK)
+    res = GST_RTSP_EPARSE;
+  method = gst_rtsp_find_method (methodstr);
+
+  if (parse_string (urlstr, sizeof (urlstr), &bptr) != GST_RTSP_OK)
+    res = GST_RTSP_EPARSE;
+  if (G_UNLIKELY (*urlstr == '\0'))
+    res = GST_RTSP_EPARSE;
+
+  if (parse_string (versionstr, sizeof (versionstr), &bptr) != GST_RTSP_OK)
+    res = GST_RTSP_EPARSE;
+
+  if (G_UNLIKELY (*bptr != '\0'))
+    res = GST_RTSP_EPARSE;
+
+  if (G_UNLIKELY (gst_rtsp_message_init_request (msg, method,
+              urlstr) != GST_RTSP_OK))
+    res = GST_RTSP_EPARSE;
+
+  res2 = parse_protocol_version (versionstr, &msg->type,
+      &msg->type_data.request.version);
+  if (G_LIKELY (res == GST_RTSP_OK))
+    res = res2;
+
+  if (G_LIKELY (msg->type == GST_RTSP_MESSAGE_REQUEST)) {
+    /* GET and POST are not allowed as RTSP methods */
+    if (msg->type_data.request.method == GST_RTSP_GET ||
+        msg->type_data.request.method == GST_RTSP_POST) {
+      msg->type_data.request.method = GST_RTSP_INVALID;
+      if (res == GST_RTSP_OK)
+        res = GST_RTSP_ERROR;
+    }
+  } else if (msg->type == GST_RTSP_MESSAGE_HTTP_REQUEST) {
+    /* only GET and POST are allowed as HTTP methods */
+    if (msg->type_data.request.method != GST_RTSP_GET &&
+        msg->type_data.request.method != GST_RTSP_POST) {
+      msg->type_data.request.method = GST_RTSP_INVALID;
+      if (res == GST_RTSP_OK)
+        res = GST_RTSP_ERROR;
+    }
+  }
+
+  return res;
+}
+
+/* parsing lines means reading a Key: Value pair */
+static GstRTSPResult
+parse_line (guint8 * buffer, GstRTSPMessage * msg)
+{
+  GstRTSPHeaderField field;
+  gchar *line = (gchar *) buffer;
+  gchar *value;
+
+  if ((value = strchr (line, ':')) == NULL || value == line)
+    goto parse_error;
+
+  /* trim space before the colon */
+  if (value[-1] == ' ')
+    value[-1] = '\0';
+
+  /* replace the colon with a NUL */
+  *value++ = '\0';
+
+  /* find the header */
+  field = gst_rtsp_find_header_field (line);
+  if (field == GST_RTSP_HDR_INVALID)
+    goto done;
+
+  /* split up the value in multiple key:value pairs if it contains comma(s) */
+  while (*value != '\0') {
+    gchar *next_value;
+    gchar *comma = NULL;
+    gboolean quoted = FALSE;
+    guint comment = 0;
+
+    /* trim leading space */
+    if (*value == ' ')
+      value++;
+
+    /* for headers which may not appear multiple times, and thus may not
+     * contain multiple values on the same line, we can short-circuit the loop
+     * below and the entire value results in just one key:value pair*/
+    if (!gst_rtsp_header_allow_multiple (field))
+      next_value = value + strlen (value);
+    else
+      next_value = value;
+
+    /* find the next value, taking special care of quotes and comments */
+    while (*next_value != '\0') {
+      if ((quoted || comment != 0) && *next_value == '\\' &&
+          next_value[1] != '\0')
+        next_value++;
+      else if (comment == 0 && *next_value == '"')
+        quoted = !quoted;
+      else if (!quoted && *next_value == '(')
+        comment++;
+      else if (comment != 0 && *next_value == ')')
+        comment--;
+      else if (!quoted && comment == 0) {
+        /* To quote RFC 2068: "User agents MUST take special care in parsing
+         * the WWW-Authenticate field value if it contains more than one
+         * challenge, or if more than one WWW-Authenticate header field is
+         * provided, since the contents of a challenge may itself contain a
+         * comma-separated list of authentication parameters."
+         *
+         * What this means is that we cannot just look for an unquoted comma
+         * when looking for multiple values in Proxy-Authenticate and
+         * WWW-Authenticate headers. Instead we need to look for the sequence
+         * "comma [space] token space token" before we can split after the
+         * comma...
+         */
+        if (field == GST_RTSP_HDR_PROXY_AUTHENTICATE ||
+            field == GST_RTSP_HDR_WWW_AUTHENTICATE) {
+          if (*next_value == ',') {
+            if (next_value[1] == ' ') {
+              /* skip any space following the comma so we do not mistake it for
+               * separating between two tokens */
+              next_value++;
+            }
+            comma = next_value;
+          } else if (*next_value == ' ' && next_value[1] != ',' &&
+              next_value[1] != '=' && comma != NULL) {
+            next_value = comma;
+            comma = NULL;
+            break;
+          }
+        } else if (*next_value == ',')
+          break;
+      }
+
+      next_value++;
+    }
+
+    /* trim space */
+    if (value != next_value && next_value[-1] == ' ')
+      next_value[-1] = '\0';
+
+    if (*next_value != '\0')
+      *next_value++ = '\0';
+
+    /* add the key:value pair */
+    if (*value != '\0')
+      gst_rtsp_message_add_header (msg, field, value);
+
+    value = next_value;
+  }
+
+done:
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+parse_error:
+  {
+    return GST_RTSP_EPARSE;
+  }
+}
+
+/* convert all consecutive whitespace to a single space */
+static void
+normalize_line (guint8 * buffer)
+{
+  while (*buffer) {
+    if (g_ascii_isspace (*buffer)) {
+      guint8 *tmp;
+
+      *buffer++ = ' ';
+      for (tmp = buffer; g_ascii_isspace (*tmp); tmp++) {
+      }
+      if (buffer != tmp)
+        memmove (buffer, tmp, strlen ((gchar *) tmp) + 1);
+    } else {
+      buffer++;
+    }
+  }
+}
+
+/* returns:
+ *  GST_RTSP_OK when a complete message was read.
+ *  GST_RTSP_EEOF: when the read socket is closed
+ *  GST_RTSP_EINTR: when more data is needed.
+ *  GST_RTSP_..: some other error occured.
+ */
+static GstRTSPResult
+build_next (GstRTSPBuilder * builder, GstRTSPMessage * message,
+    GstRTSPConnection * conn)
+{
+  GstRTSPResult res;
+
+  while (TRUE) {
+    switch (builder->state) {
+      case STATE_START:
+      {
+        guint8 c;
+
+        builder->offset = 0;
+        res =
+            read_bytes (conn, (guint8 *) builder->buffer, &builder->offset, 1);
+        if (res != GST_RTSP_OK)
+          goto done;
+
+        c = builder->buffer[0];
+
+        /* we have 1 bytes now and we can see if this is a data message or
+         * not */
+        if (c == '$') {
+          /* data message, prepare for the header */
+          builder->state = STATE_DATA_HEADER;
+        } else if (c == '\n' || c == '\r') {
+          /* skip \n and \r */
+          builder->offset = 0;
+        } else {
+          builder->line = 0;
+          builder->state = STATE_READ_LINES;
+        }
+        break;
+      }
+      case STATE_DATA_HEADER:
+      {
+        res =
+            read_bytes (conn, (guint8 *) builder->buffer, &builder->offset, 4);
+        if (res != GST_RTSP_OK)
+          goto done;
+
+        gst_rtsp_message_init_data (message, builder->buffer[1]);
+
+        builder->body_len = (builder->buffer[2] << 8) | builder->buffer[3];
+        builder->body_data = g_malloc (builder->body_len + 1);
+        builder->body_data[builder->body_len] = '\0';
+        builder->offset = 0;
+        builder->state = STATE_DATA_BODY;
+        break;
+      }
+      case STATE_DATA_BODY:
+      {
+        res =
+            read_bytes (conn, builder->body_data, &builder->offset,
+            builder->body_len);
+        if (res != GST_RTSP_OK)
+          goto done;
+
+        /* we have the complete body now, store in the message adjusting the
+         * length to include the traling '\0' */
+        gst_rtsp_message_take_body (message,
+            (guint8 *) builder->body_data, builder->body_len + 1);
+        builder->body_data = NULL;
+        builder->body_len = 0;
+
+        builder->state = STATE_END;
+        break;
+      }
+      case STATE_READ_LINES:
+      {
+        res = read_line (conn, builder->buffer, &builder->offset,
+            sizeof (builder->buffer));
+        if (res != GST_RTSP_OK)
+          goto done;
+
+        /* we have a regular response */
+        if (builder->buffer[0] == '\0') {
+          gchar *hdrval;
+
+          /* empty line, end of message header */
+          /* see if there is a Content-Length header, but ignore it if this
+           * is a POST request with an x-sessioncookie header */
+          if (gst_rtsp_message_get_header (message,
+                  GST_RTSP_HDR_CONTENT_LENGTH, &hdrval, 0) == GST_RTSP_OK &&
+              (message->type != GST_RTSP_MESSAGE_HTTP_REQUEST ||
+                  message->type_data.request.method != GST_RTSP_POST ||
+                  gst_rtsp_message_get_header (message,
+                      GST_RTSP_HDR_X_SESSIONCOOKIE, NULL, 0) != GST_RTSP_OK)) {
+            /* there is, prepare to read the body */
+            builder->body_len = atol (hdrval);
+            builder->body_data = g_try_malloc (builder->body_len + 1);
+            /* we can't do much here, we need the length to know how many bytes
+             * we need to read next and when allocation fails, something is
+             * probably wrong with the length. */
+            if (builder->body_data == NULL)
+              goto invalid_body_len;
+
+            builder->body_data[builder->body_len] = '\0';
+            builder->offset = 0;
+            builder->state = STATE_DATA_BODY;
+          } else {
+            builder->state = STATE_END;
+          }
+          break;
+        }
+
+        /* we have a line */
+        normalize_line (builder->buffer);
+        if (builder->line == 0) {
+          /* first line, check for response status */
+          if (memcmp (builder->buffer, "RTSP", 4) == 0 ||
+              memcmp (builder->buffer, "HTTP", 4) == 0) {
+            builder->status = parse_response_status (builder->buffer, message);
+          } else {
+            builder->status = parse_request_line (builder->buffer, message);
+          }
+        } else {
+          /* else just parse the line */
+          res = parse_line (builder->buffer, message);
+          if (res != GST_RTSP_OK)
+            builder->status = res;
+        }
+        builder->line++;
+        builder->offset = 0;
+        break;
+      }
+      case STATE_END:
+      {
+        gchar *session_cookie;
+        gchar *session_id;
+
+        if (message->type == GST_RTSP_MESSAGE_DATA) {
+          /* data messages don't have headers */
+          res = GST_RTSP_OK;
+          goto done;
+        }
+
+        /* save the tunnel session in the connection */
+        if (message->type == GST_RTSP_MESSAGE_HTTP_REQUEST &&
+            !conn->manual_http &&
+            conn->tstate == TUNNEL_STATE_NONE &&
+            gst_rtsp_message_get_header (message, GST_RTSP_HDR_X_SESSIONCOOKIE,
+                &session_cookie, 0) == GST_RTSP_OK) {
+          strncpy (conn->tunnelid, session_cookie, TUNNELID_LEN);
+          conn->tunnelid[TUNNELID_LEN - 1] = '\0';
+          conn->tunneled = TRUE;
+        }
+
+        /* save session id in the connection for further use */
+        if (message->type == GST_RTSP_MESSAGE_RESPONSE &&
+            gst_rtsp_message_get_header (message, GST_RTSP_HDR_SESSION,
+                &session_id, 0) == GST_RTSP_OK) {
+          gint maxlen, i;
+
+          maxlen = sizeof (conn->session_id) - 1;
+          /* the sessionid can have attributes marked with ;
+           * Make sure we strip them */
+          for (i = 0; session_id[i] != '\0'; i++) {
+            if (session_id[i] == ';') {
+              maxlen = i;
+              /* parse timeout */
+              do {
+                i++;
+              } while (g_ascii_isspace (session_id[i]));
+              if (g_str_has_prefix (&session_id[i], "timeout=")) {
+                gint to;
+
+                /* if we parsed something valid, configure */
+                if ((to = atoi (&session_id[i + 8])) > 0)
+                  conn->timeout = to;
+              }
+              break;
+            }
+          }
+
+          /* make sure to not overflow */
+          strncpy (conn->session_id, session_id, maxlen);
+          conn->session_id[maxlen] = '\0';
+        }
+        res = builder->status;
+        goto done;
+      }
+      default:
+        res = GST_RTSP_ERROR;
+        break;
+    }
+  }
+done:
+  return res;
+
+  /* ERRORS */
+invalid_body_len:
+  {
+    GST_DEBUG ("could not allocate body");
+    return GST_RTSP_ERROR;
+  }
+}
+
+/**
+ * gst_rtsp_connection_read:
+ * @conn: a #GstRTSPConnection
+ * @data: the data to read
+ * @size: the size of @data
+ * @timeout: a timeout value or #NULL
+ *
+ * Attempt to read @size bytes into @data from the connected @conn, blocking up to
+ * the specified @timeout. @timeout can be #NULL, in which case this function
+ * might block forever.
+ *
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, guint size,
+    GTimeVal * timeout)
+{
+  guint offset;
+  gint retval;
+  GstClockTime to;
+  GstRTSPResult res;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->readfd != NULL, GST_RTSP_EINVAL);
+
+  if (G_UNLIKELY (size == 0))
+    return GST_RTSP_OK;
+
+  offset = 0;
+
+  /* configure timeout if any */
+  to = timeout ? GST_TIMEVAL_TO_TIME (*timeout) : GST_CLOCK_TIME_NONE;
+
+  gst_poll_set_controllable (conn->fdset, TRUE);
+  gst_poll_fd_ctl_write (conn->fdset, conn->writefd, FALSE);
+  gst_poll_fd_ctl_read (conn->fdset, conn->readfd, TRUE);
+
+  while (TRUE) {
+    res = read_bytes (conn, data, &offset, size);
+    if (G_UNLIKELY (res == GST_RTSP_EEOF))
+      goto eof;
+    if (G_LIKELY (res == GST_RTSP_OK))
+      break;
+    if (G_UNLIKELY (res != GST_RTSP_EINTR))
+      goto read_error;
+
+    do {
+      retval = gst_poll_wait (conn->fdset, to);
+    } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
+
+    /* check for timeout */
+    if (G_UNLIKELY (retval == 0))
+      goto select_timeout;
+
+    if (G_UNLIKELY (retval == -1)) {
+      if (errno == EBUSY)
+        goto stopped;
+      else
+        goto select_error;
+    }
+
+    /* could also be an error with write socket */
+    if (gst_poll_fd_has_error (conn->fdset, conn->writefd))
+      goto socket_error;
+
+    gst_poll_set_controllable (conn->fdset, FALSE);
+  }
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+select_error:
+  {
+    return GST_RTSP_ESYS;
+  }
+select_timeout:
+  {
+    return GST_RTSP_ETIMEOUT;
+  }
+stopped:
+  {
+    return GST_RTSP_EINTR;
+  }
+eof:
+  {
+    return GST_RTSP_EEOF;
+  }
+socket_error:
+  {
+    res = GST_RTSP_ENET;
+  }
+read_error:
+  {
+    return res;
+  }
+}
+
+static GstRTSPMessage *
+gen_tunnel_reply (GstRTSPConnection * conn, GstRTSPStatusCode code,
+    const GstRTSPMessage * request)
+{
+  GstRTSPMessage *msg;
+  GstRTSPResult res;
+
+  if (gst_rtsp_status_as_text (code) == NULL)
+    code = GST_RTSP_STS_INTERNAL_SERVER_ERROR;
+
+  GST_RTSP_CHECK (gst_rtsp_message_new_response (&msg, code, NULL, request),
+      no_message);
+
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SERVER,
+      "GStreamer RTSP Server");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CONNECTION, "close");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CACHE_CONTROL, "no-store");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_PRAGMA, "no-cache");
+
+  if (code == GST_RTSP_STS_OK) {
+    if (conn->ip)
+      gst_rtsp_message_add_header (msg, GST_RTSP_HDR_X_SERVER_IP_ADDRESS,
+          conn->ip);
+    gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CONTENT_TYPE,
+        "application/x-rtsp-tunnelled");
+  }
+
+  return msg;
+
+  /* ERRORS */
+no_message:
+  {
+    return NULL;
+  }
+}
+
+/**
+ * gst_rtsp_connection_receive:
+ * @conn: a #GstRTSPConnection
+ * @message: the message to read
+ * @timeout: a timeout value or #NULL
+ *
+ * Attempt to read into @message from the connected @conn, blocking up to
+ * the specified @timeout. @timeout can be #NULL, in which case this function
+ * might block forever.
+ * 
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_receive (GstRTSPConnection * conn, GstRTSPMessage * message,
+    GTimeVal * timeout)
+{
+  GstRTSPResult res;
+  GstRTSPBuilder builder;
+  gint retval;
+  GstClockTime to;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (message != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->readfd != NULL, GST_RTSP_EINVAL);
+
+  /* configure timeout if any */
+  to = timeout ? GST_TIMEVAL_TO_TIME (*timeout) : GST_CLOCK_TIME_NONE;
+
+  gst_poll_set_controllable (conn->fdset, TRUE);
+  gst_poll_fd_ctl_write (conn->fdset, conn->writefd, FALSE);
+  gst_poll_fd_ctl_read (conn->fdset, conn->readfd, TRUE);
+
+  memset (&builder, 0, sizeof (GstRTSPBuilder));
+  while (TRUE) {
+    res = build_next (&builder, message, conn);
+    if (G_UNLIKELY (res == GST_RTSP_EEOF))
+      goto eof;
+    else if (G_LIKELY (res == GST_RTSP_OK)) {
+      if (!conn->manual_http) {
+        if (message->type == GST_RTSP_MESSAGE_HTTP_REQUEST) {
+          if (conn->tstate == TUNNEL_STATE_NONE &&
+              message->type_data.request.method == GST_RTSP_GET) {
+            GstRTSPMessage *response;
+
+            conn->tstate = TUNNEL_STATE_GET;
+
+            /* tunnel GET request, we can reply now */
+            response = gen_tunnel_reply (conn, GST_RTSP_STS_OK, message);
+            res = gst_rtsp_connection_send (conn, response, timeout);
+            gst_rtsp_message_free (response);
+            if (res == GST_RTSP_OK)
+              res = GST_RTSP_ETGET;
+            goto cleanup;
+          } else if (conn->tstate == TUNNEL_STATE_NONE &&
+              message->type_data.request.method == GST_RTSP_POST) {
+            conn->tstate = TUNNEL_STATE_POST;
+
+            /* tunnel POST request, the caller now has to link the two
+             * connections. */
+            res = GST_RTSP_ETPOST;
+            goto cleanup;
+          } else {
+            res = GST_RTSP_EPARSE;
+            goto cleanup;
+          }
+        } else if (message->type == GST_RTSP_MESSAGE_HTTP_RESPONSE) {
+          res = GST_RTSP_EPARSE;
+          goto cleanup;
+        }
+      }
+
+      break;
+    } else if (G_UNLIKELY (res != GST_RTSP_EINTR))
+      goto read_error;
+
+    do {
+      retval = gst_poll_wait (conn->fdset, to);
+    } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
+
+    /* check for timeout */
+    if (G_UNLIKELY (retval == 0))
+      goto select_timeout;
+
+    if (G_UNLIKELY (retval == -1)) {
+      if (errno == EBUSY)
+        goto stopped;
+      else
+        goto select_error;
+    }
+
+    /* could also be an error with write socket */
+    if (gst_poll_fd_has_error (conn->fdset, conn->writefd))
+      goto socket_error;
+
+    /* once we start reading the wait cannot be controlled */
+    if (builder.state != STATE_START)
+      gst_poll_set_controllable (conn->fdset, FALSE);
+  }
+
+  /* we have a message here */
+  build_reset (&builder);
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+select_error:
+  {
+    res = GST_RTSP_ESYS;
+    goto cleanup;
+  }
+select_timeout:
+  {
+    res = GST_RTSP_ETIMEOUT;
+    goto cleanup;
+  }
+stopped:
+  {
+    res = GST_RTSP_EINTR;
+    goto cleanup;
+  }
+eof:
+  {
+    res = GST_RTSP_EEOF;
+    goto cleanup;
+  }
+socket_error:
+  {
+    res = GST_RTSP_ENET;
+    goto cleanup;
+  }
+read_error:
+cleanup:
+  {
+    build_reset (&builder);
+    gst_rtsp_message_unset (message);
+    return res;
+  }
+}
+
+/**
+ * gst_rtsp_connection_close:
+ * @conn: a #GstRTSPConnection
+ *
+ * Close the connected @conn. After this call, the connection is in the same
+ * state as when it was first created.
+ * 
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_close (GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  g_free (conn->ip);
+  conn->ip = NULL;
+
+  conn->read_ahead = 0;
+
+  g_free (conn->initial_buffer);
+  conn->initial_buffer = NULL;
+  conn->initial_buffer_offset = 0;
+
+  REMOVE_POLLFD (conn->fdset, &conn->fd0);
+  REMOVE_POLLFD (conn->fdset, &conn->fd1);
+  conn->writefd = NULL;
+  conn->readfd = NULL;
+  conn->tunneled = FALSE;
+  conn->tstate = TUNNEL_STATE_NONE;
+  conn->ctxp = NULL;
+  g_free (conn->username);
+  conn->username = NULL;
+  g_free (conn->passwd);
+  conn->passwd = NULL;
+  gst_rtsp_connection_clear_auth_params (conn);
+  conn->timeout = 60;
+  conn->cseq = 0;
+  conn->session_id[0] = '\0';
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_free:
+ * @conn: a #GstRTSPConnection
+ *
+ * Close and free @conn.
+ * 
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_connection_free (GstRTSPConnection * conn)
+{
+  GstRTSPResult res;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  res = gst_rtsp_connection_close (conn);
+  gst_poll_free (conn->fdset);
+  g_timer_destroy (conn->timer);
+  gst_rtsp_url_free (conn->url);
+  g_free (conn->proxy_host);
+  g_free (conn);
+#ifdef G_OS_WIN32
+  WSACleanup ();
+#endif
+
+  return res;
+}
+
+/**
+ * gst_rtsp_connection_poll:
+ * @conn: a #GstRTSPConnection
+ * @events: a bitmask of #GstRTSPEvent flags to check
+ * @revents: location for result flags 
+ * @timeout: a timeout
+ *
+ * Wait up to the specified @timeout for the connection to become available for
+ * at least one of the operations specified in @events. When the function returns
+ * with #GST_RTSP_OK, @revents will contain a bitmask of available operations on
+ * @conn.
+ *
+ * @timeout can be #NULL, in which case this function might block forever.
+ *
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ * 
+ * Returns: #GST_RTSP_OK on success.
+ *
+ * Since: 0.10.15
+ */
+GstRTSPResult
+gst_rtsp_connection_poll (GstRTSPConnection * conn, GstRTSPEvent events,
+    GstRTSPEvent * revents, GTimeVal * timeout)
+{
+  GstClockTime to;
+  gint retval;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (events != 0, GST_RTSP_EINVAL);
+  g_return_val_if_fail (revents != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->readfd != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->writefd != NULL, GST_RTSP_EINVAL);
+
+  gst_poll_set_controllable (conn->fdset, TRUE);
+
+  /* add fd to writer set when asked to */
+  gst_poll_fd_ctl_write (conn->fdset, conn->writefd,
+      events & GST_RTSP_EV_WRITE);
+
+  /* add fd to reader set when asked to */
+  gst_poll_fd_ctl_read (conn->fdset, conn->readfd, events & GST_RTSP_EV_READ);
+
+  /* configure timeout if any */
+  to = timeout ? GST_TIMEVAL_TO_TIME (*timeout) : GST_CLOCK_TIME_NONE;
+
+  do {
+    retval = gst_poll_wait (conn->fdset, to);
+  } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
+
+  if (G_UNLIKELY (retval == 0))
+    goto select_timeout;
+
+  if (G_UNLIKELY (retval == -1)) {
+    if (errno == EBUSY)
+      goto stopped;
+    else
+      goto select_error;
+  }
+
+  *revents = 0;
+  if (events & GST_RTSP_EV_READ) {
+    if (gst_poll_fd_can_read (conn->fdset, conn->readfd))
+      *revents |= GST_RTSP_EV_READ;
+  }
+  if (events & GST_RTSP_EV_WRITE) {
+    if (gst_poll_fd_can_write (conn->fdset, conn->writefd))
+      *revents |= GST_RTSP_EV_WRITE;
+  }
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+select_timeout:
+  {
+    return GST_RTSP_ETIMEOUT;
+  }
+select_error:
+  {
+    return GST_RTSP_ESYS;
+  }
+stopped:
+  {
+    return GST_RTSP_EINTR;
+  }
+}
+
+/**
+ * gst_rtsp_connection_next_timeout:
+ * @conn: a #GstRTSPConnection
+ * @timeout: a timeout
+ *
+ * Calculate the next timeout for @conn, storing the result in @timeout.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_connection_next_timeout (GstRTSPConnection * conn, GTimeVal * timeout)
+{
+  gdouble elapsed;
+  glong sec;
+  gulong usec;
+  gint ctimeout;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (timeout != NULL, GST_RTSP_EINVAL);
+
+  ctimeout = conn->timeout;
+  if (ctimeout >= 20) {
+    /* Because we should act before the timeout we timeout 5
+     * seconds in advance. */
+    ctimeout -= 5;
+  } else if (ctimeout >= 5) {
+    /* else timeout 20% earlier */
+    ctimeout -= ctimeout / 5;
+  } else if (ctimeout >= 1) {
+    /* else timeout 1 second earlier */
+    ctimeout -= 1;
+  }
+
+  elapsed = g_timer_elapsed (conn->timer, &usec);
+  if (elapsed >= ctimeout) {
+    sec = 0;
+    usec = 0;
+  } else {
+    sec = ctimeout - elapsed;
+    if (usec <= G_USEC_PER_SEC)
+      usec = G_USEC_PER_SEC - usec;
+    else
+      usec = 0;
+  }
+
+  timeout->tv_sec = sec;
+  timeout->tv_usec = usec;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_reset_timeout:
+ * @conn: a #GstRTSPConnection
+ *
+ * Reset the timeout of @conn.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_connection_reset_timeout (GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  g_timer_start (conn->timer);
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_flush:
+ * @conn: a #GstRTSPConnection
+ * @flush: start or stop the flush
+ *
+ * Start or stop the flushing action on @conn. When flushing, all current
+ * and future actions on @conn will return #GST_RTSP_EINTR until the connection
+ * is set to non-flushing mode again.
+ * 
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_connection_flush (GstRTSPConnection * conn, gboolean flush)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  gst_poll_set_flushing (conn->fdset, flush);
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_set_proxy:
+ * @conn: a #GstRTSPConnection
+ * @host: the proxy host
+ * @port: the proxy port
+ *
+ * Set the proxy host and port.
+ * 
+ * Returns: #GST_RTSP_OK.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPResult
+gst_rtsp_connection_set_proxy (GstRTSPConnection * conn,
+    const gchar * host, guint port)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  g_free (conn->proxy_host);
+  conn->proxy_host = g_strdup (host);
+  conn->proxy_port = port;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_connection_set_auth:
+ * @conn: a #GstRTSPConnection
+ * @method: authentication method
+ * @user: the user
+ * @pass: the password
+ *
+ * Configure @conn for authentication mode @method with @user and @pass as the
+ * user and password respectively.
+ * 
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_connection_set_auth (GstRTSPConnection * conn,
+    GstRTSPAuthMethod method, const gchar * user, const gchar * pass)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  if (method == GST_RTSP_AUTH_DIGEST && ((user == NULL || pass == NULL)
+          || g_strrstr (user, ":") != NULL))
+    return GST_RTSP_EINVAL;
+
+  /* Make sure the username and passwd are being set for authentication */
+  if (method == GST_RTSP_AUTH_NONE && (user == NULL || pass == NULL))
+    return GST_RTSP_EINVAL;
+
+  /* ":" chars are not allowed in usernames for basic auth */
+  if (method == GST_RTSP_AUTH_BASIC && g_strrstr (user, ":") != NULL)
+    return GST_RTSP_EINVAL;
+
+  g_free (conn->username);
+  g_free (conn->passwd);
+
+  conn->auth_method = method;
+  conn->username = g_strdup (user);
+  conn->passwd = g_strdup (pass);
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * str_case_hash:
+ * @key: ASCII string to hash
+ *
+ * Hashes @key in a case-insensitive manner.
+ *
+ * Returns: the hash code.
+ **/
+static guint
+str_case_hash (gconstpointer key)
+{
+  const char *p = key;
+  guint h = g_ascii_toupper (*p);
+
+  if (h)
+    for (p += 1; *p != '\0'; p++)
+      h = (h << 5) - h + g_ascii_toupper (*p);
+
+  return h;
+}
+
+/**
+ * str_case_equal:
+ * @v1: an ASCII string
+ * @v2: another ASCII string
+ *
+ * Compares @v1 and @v2 in a case-insensitive manner
+ *
+ * Returns: %TRUE if they are equal (modulo case)
+ **/
+static gboolean
+str_case_equal (gconstpointer v1, gconstpointer v2)
+{
+  const char *string1 = v1;
+  const char *string2 = v2;
+
+  return g_ascii_strcasecmp (string1, string2) == 0;
+}
+
+/**
+ * gst_rtsp_connection_set_auth_param:
+ * @conn: a #GstRTSPConnection
+ * @param: authentication directive
+ * @value: value
+ *
+ * Setup @conn with authentication directives. This is not necesary for
+ * methods #GST_RTSP_AUTH_NONE and #GST_RTSP_AUTH_BASIC. For
+ * #GST_RTSP_AUTH_DIGEST, directives should be taken from the digest challenge
+ * in the WWW-Authenticate response header and can include realm, domain,
+ * nonce, opaque, stale, algorithm, qop as per RFC2617.
+ * 
+ * Since: 0.10.20
+ */
+void
+gst_rtsp_connection_set_auth_param (GstRTSPConnection * conn,
+    const gchar * param, const gchar * value)
+{
+  g_return_if_fail (conn != NULL);
+  g_return_if_fail (param != NULL);
+
+  if (conn->auth_params == NULL) {
+    conn->auth_params =
+        g_hash_table_new_full (str_case_hash, str_case_equal, g_free, g_free);
+  }
+  g_hash_table_insert (conn->auth_params, g_strdup (param), g_strdup (value));
+}
+
+/**
+ * gst_rtsp_connection_clear_auth_params:
+ * @conn: a #GstRTSPConnection
+ *
+ * Clear the list of authentication directives stored in @conn.
+ *
+ * Since: 0.10.20
+ */
+void
+gst_rtsp_connection_clear_auth_params (GstRTSPConnection * conn)
+{
+  g_return_if_fail (conn != NULL);
+
+  if (conn->auth_params != NULL) {
+    g_hash_table_destroy (conn->auth_params);
+    conn->auth_params = NULL;
+  }
+}
+
+static GstRTSPResult
+set_qos_dscp (gint fd, guint qos_dscp)
+{
+  union gst_sockaddr sa;
+  socklen_t slen = sizeof (sa);
+  gint af;
+  gint tos;
+
+  if (fd == -1)
+    return GST_RTSP_OK;
+
+  if (getsockname (fd, &sa.sa, &slen) < 0)
+    goto no_getsockname;
+
+  af = sa.sa.sa_family;
+
+  /* if this is an IPv4-mapped address then do IPv4 QoS */
+  if (af == AF_INET6) {
+    if (IN6_IS_ADDR_V4MAPPED (&sa.sa_in6.sin6_addr))
+      af = AF_INET;
+  }
+
+  /* extract and shift 6 bits of the DSCP */
+  tos = (qos_dscp & 0x3f) << 2;
+
+  switch (af) {
+    case AF_INET:
+      if (SETSOCKOPT (fd, IPPROTO_IP, IP_TOS, &tos, sizeof (tos)) < 0)
+        goto no_setsockopt;
+      break;
+    case AF_INET6:
+#ifdef IPV6_TCLASS
+      if (SETSOCKOPT (fd, IPPROTO_IPV6, IPV6_TCLASS, &tos, sizeof (tos)) < 0)
+        goto no_setsockopt;
+      break;
+#endif
+    default:
+      goto wrong_family;
+  }
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+no_getsockname:
+no_setsockopt:
+  {
+    return GST_RTSP_ESYS;
+  }
+
+wrong_family:
+  {
+    return GST_RTSP_ERROR;
+  }
+}
+
+/**
+ * gst_rtsp_connection_set_qos_dscp:
+ * @conn: a #GstRTSPConnection
+ * @qos_dscp: DSCP value
+ *
+ * Configure @conn to use the specified DSCP value.
+ *
+ * Returns: #GST_RTSP_OK on success.
+ *
+ * Since: 0.10.20
+ */
+GstRTSPResult
+gst_rtsp_connection_set_qos_dscp (GstRTSPConnection * conn, guint qos_dscp)
+{
+  GstRTSPResult res;
+
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->readfd != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (conn->writefd != NULL, GST_RTSP_EINVAL);
+
+  res = set_qos_dscp (conn->fd0.fd, qos_dscp);
+  if (res == GST_RTSP_OK)
+    res = set_qos_dscp (conn->fd1.fd, qos_dscp);
+
+  return res;
+}
+
+
+/**
+ * gst_rtsp_connection_get_url:
+ * @conn: a #GstRTSPConnection
+ *
+ * Retrieve the URL of the other end of @conn.
+ *
+ * Returns: The URL. This value remains valid until the
+ * connection is freed.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPUrl *
+gst_rtsp_connection_get_url (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, NULL);
+
+  return conn->url;
+}
+
+/**
+ * gst_rtsp_connection_get_ip:
+ * @conn: a #GstRTSPConnection
+ *
+ * Retrieve the IP address of the other end of @conn.
+ *
+ * Returns: The IP address as a string. this value remains valid until the
+ * connection is closed.
+ *
+ * Since: 0.10.20
+ */
+const gchar *
+gst_rtsp_connection_get_ip (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, NULL);
+
+  return conn->ip;
+}
+
+/**
+ * gst_rtsp_connection_set_ip:
+ * @conn: a #GstRTSPConnection
+ * @ip: an ip address
+ *
+ * Set the IP address of the server.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtsp_connection_set_ip (GstRTSPConnection * conn, const gchar * ip)
+{
+  g_return_if_fail (conn != NULL);
+
+  g_free (conn->ip);
+  conn->ip = g_strdup (ip);
+}
+
+/**
+ * gst_rtsp_connection_get_readfd:
+ * @conn: a #GstRTSPConnection
+ *
+ * Get the file descriptor for reading.
+ *
+ * Returns: the file descriptor used for reading or -1 on error. The file
+ * descriptor remains valid until the connection is closed.
+ *
+ * Since: 0.10.23
+ */
+gint
+gst_rtsp_connection_get_readfd (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, -1);
+  g_return_val_if_fail (conn->readfd != NULL, -1);
+
+  return conn->readfd->fd;
+}
+
+/**
+ * gst_rtsp_connection_get_writefd:
+ * @conn: a #GstRTSPConnection
+ *
+ * Get the file descriptor for writing.
+ *
+ * Returns: the file descriptor used for writing or -1 on error. The file
+ * descriptor remains valid until the connection is closed.
+ *
+ * Since: 0.10.23
+ */
+gint
+gst_rtsp_connection_get_writefd (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, -1);
+  g_return_val_if_fail (conn->writefd != NULL, -1);
+
+  return conn->writefd->fd;
+}
+
+/**
+ * gst_rtsp_connection_set_http_mode:
+ * @conn: a #GstRTSPConnection
+ * @enable: %TRUE to enable manual HTTP mode
+ *
+ * By setting the HTTP mode to %TRUE the message parsing will support HTTP
+ * messages in addition to the RTSP messages. It will also disable the
+ * automatic handling of setting up an HTTP tunnel.
+ *
+ * Since: 0.10.25
+ */
+void
+gst_rtsp_connection_set_http_mode (GstRTSPConnection * conn, gboolean enable)
+{
+  g_return_if_fail (conn != NULL);
+
+  conn->manual_http = enable;
+}
+
+/**
+ * gst_rtsp_connection_set_tunneled:
+ * @conn: a #GstRTSPConnection
+ * @tunneled: the new state
+ *
+ * Set the HTTP tunneling state of the connection. This must be configured before
+ * the @conn is connected.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtsp_connection_set_tunneled (GstRTSPConnection * conn, gboolean tunneled)
+{
+  g_return_if_fail (conn != NULL);
+  g_return_if_fail (conn->readfd == NULL);
+  g_return_if_fail (conn->writefd == NULL);
+
+  conn->tunneled = tunneled;
+}
+
+/**
+ * gst_rtsp_connection_is_tunneled:
+ * @conn: a #GstRTSPConnection
+ *
+ * Get the tunneling state of the connection. 
+ *
+ * Returns: if @conn is using HTTP tunneling.
+ *
+ * Since: 0.10.23
+ */
+gboolean
+gst_rtsp_connection_is_tunneled (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, FALSE);
+
+  return conn->tunneled;
+}
+
+/**
+ * gst_rtsp_connection_get_tunnelid:
+ * @conn: a #GstRTSPConnection
+ *
+ * Get the tunnel session id the connection. 
+ *
+ * Returns: returns a non-empty string if @conn is being tunneled over HTTP.
+ *
+ * Since: 0.10.23
+ */
+const gchar *
+gst_rtsp_connection_get_tunnelid (const GstRTSPConnection * conn)
+{
+  g_return_val_if_fail (conn != NULL, NULL);
+
+  if (!conn->tunneled)
+    return NULL;
+
+  return conn->tunnelid;
+}
+
+/**
+ * gst_rtsp_connection_do_tunnel:
+ * @conn: a #GstRTSPConnection
+ * @conn2: a #GstRTSPConnection or %NULL
+ *
+ * If @conn received the first tunnel connection and @conn2 received
+ * the second tunnel connection, link the two connections together so that
+ * @conn manages the tunneled connection.
+ *
+ * After this call, @conn2 cannot be used anymore and must be freed with
+ * gst_rtsp_connection_free().
+ *
+ * If @conn2 is %NULL then only the base64 decoding context will be setup for
+ * @conn.
+ *
+ * Returns: return GST_RTSP_OK on success.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPResult
+gst_rtsp_connection_do_tunnel (GstRTSPConnection * conn,
+    GstRTSPConnection * conn2)
+{
+  g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
+
+  if (conn2 != NULL) {
+    g_return_val_if_fail (conn->tstate == TUNNEL_STATE_GET, GST_RTSP_EINVAL);
+    g_return_val_if_fail (conn2->tstate == TUNNEL_STATE_POST, GST_RTSP_EINVAL);
+    g_return_val_if_fail (!memcmp (conn2->tunnelid, conn->tunnelid,
+            TUNNELID_LEN), GST_RTSP_EINVAL);
+
+    /* both connections have fd0 as the read/write socket. start by taking the
+     * socket from conn2 and set it as the socket in conn */
+    conn->fd1 = conn2->fd0;
+
+    /* clean up some of the state of conn2 */
+    gst_poll_remove_fd (conn2->fdset, &conn2->fd0);
+    conn2->fd0.fd = -1;
+    conn2->readfd = conn2->writefd = NULL;
+
+    /* We make fd0 the write socket and fd1 the read socket. */
+    conn->writefd = &conn->fd0;
+    conn->readfd = &conn->fd1;
+
+    conn->tstate = TUNNEL_STATE_COMPLETE;
+  }
+
+  /* we need base64 decoding for the readfd */
+  conn->ctx.state = 0;
+  conn->ctx.save = 0;
+  conn->ctx.cout = 0;
+  conn->ctx.coutl = 0;
+  conn->ctxp = &conn->ctx;
+
+  return GST_RTSP_OK;
+}
+
+#define READ_ERR    (G_IO_HUP | G_IO_ERR | G_IO_NVAL)
+#define READ_COND   (G_IO_IN | READ_ERR)
+#define WRITE_ERR   (G_IO_HUP | G_IO_ERR | G_IO_NVAL)
+#define WRITE_COND  (G_IO_OUT | WRITE_ERR)
+
+typedef struct
+{
+  guint8 *data;
+  guint size;
+  guint id;
+} GstRTSPRec;
+
+/* async functions */
+struct _GstRTSPWatch
+{
+  GSource source;
+
+  GstRTSPConnection *conn;
+
+  GstRTSPBuilder builder;
+  GstRTSPMessage message;
+
+  GPollFD readfd;
+  GPollFD writefd;
+
+  /* queued message for transmission */
+  guint id;
+  GMutex *mutex;
+  GQueue *messages;
+  guint8 *write_data;
+  guint write_off;
+  guint write_size;
+  guint write_id;
+
+  GstRTSPWatchFuncs funcs;
+
+  gpointer user_data;
+  GDestroyNotify notify;
+};
+
+static gboolean
+gst_rtsp_source_prepare (GSource * source, gint * timeout)
+{
+  GstRTSPWatch *watch = (GstRTSPWatch *) source;
+
+  if (watch->conn->initial_buffer != NULL)
+    return TRUE;
+
+  *timeout = (watch->conn->timeout * 1000);
+
+  return FALSE;
+}
+
+static gboolean
+gst_rtsp_source_check (GSource * source)
+{
+  GstRTSPWatch *watch = (GstRTSPWatch *) source;
+
+  if (watch->readfd.revents & READ_COND)
+    return TRUE;
+
+  if (watch->writefd.revents & WRITE_COND)
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
+gst_rtsp_source_dispatch (GSource * source, GSourceFunc callback G_GNUC_UNUSED,
+    gpointer user_data G_GNUC_UNUSED)
+{
+  GstRTSPWatch *watch = (GstRTSPWatch *) source;
+  GstRTSPResult res = GST_RTSP_ERROR;
+  gboolean keep_running = TRUE;
+
+  /* first read as much as we can */
+  if (watch->readfd.revents & READ_COND || watch->conn->initial_buffer != NULL) {
+    do {
+      if (watch->readfd.revents & READ_ERR)
+        goto read_error;
+
+      res = build_next (&watch->builder, &watch->message, watch->conn);
+      if (res == GST_RTSP_EINTR)
+        break;
+      else if (G_UNLIKELY (res == GST_RTSP_EEOF)) {
+        watch->readfd.events = 0;
+        watch->readfd.revents = 0;
+        g_source_remove_poll ((GSource *) watch, &watch->readfd);
+        /* When we are in tunnelled mode, the read socket can be closed and we
+         * should be prepared for a new POST method to reopen it */
+        if (watch->conn->tstate == TUNNEL_STATE_COMPLETE) {
+          /* remove the read connection for the tunnel */
+          /* we accept a new POST request */
+          watch->conn->tstate = TUNNEL_STATE_GET;
+          /* and signal that we lost our tunnel */
+          if (watch->funcs.tunnel_lost)
+            res = watch->funcs.tunnel_lost (watch, watch->user_data);
+          goto read_done;
+        } else
+          goto eof;
+      } else if (G_LIKELY (res == GST_RTSP_OK)) {
+        if (!watch->conn->manual_http &&
+            watch->message.type == GST_RTSP_MESSAGE_HTTP_REQUEST) {
+          if (watch->conn->tstate == TUNNEL_STATE_NONE &&
+              watch->message.type_data.request.method == GST_RTSP_GET) {
+            GstRTSPMessage *response;
+            GstRTSPStatusCode code;
+
+            watch->conn->tstate = TUNNEL_STATE_GET;
+
+            if (watch->funcs.tunnel_start)
+              code = watch->funcs.tunnel_start (watch, watch->user_data);
+            else
+              code = GST_RTSP_STS_OK;
+
+            /* queue the response */
+            response = gen_tunnel_reply (watch->conn, code, &watch->message);
+            gst_rtsp_watch_send_message (watch, response, NULL);
+            gst_rtsp_message_free (response);
+            goto read_done;
+          } else if (watch->conn->tstate == TUNNEL_STATE_NONE &&
+              watch->message.type_data.request.method == GST_RTSP_POST) {
+            watch->conn->tstate = TUNNEL_STATE_POST;
+
+            /* in the callback the connection should be tunneled with the
+             * GET connection */
+            if (watch->funcs.tunnel_complete)
+              watch->funcs.tunnel_complete (watch, watch->user_data);
+            goto read_done;
+          }
+        }
+      }
+
+      if (!watch->conn->manual_http) {
+        /* if manual HTTP support is not enabled, then restore the message to
+         * what it would have looked like without the support for parsing HTTP
+         * messages being present */
+        if (watch->message.type == GST_RTSP_MESSAGE_HTTP_REQUEST) {
+          watch->message.type = GST_RTSP_MESSAGE_REQUEST;
+          watch->message.type_data.request.method = GST_RTSP_INVALID;
+          if (watch->message.type_data.request.version != GST_RTSP_VERSION_1_0)
+            watch->message.type_data.request.version = GST_RTSP_VERSION_INVALID;
+          res = GST_RTSP_EPARSE;
+        } else if (watch->message.type == GST_RTSP_MESSAGE_HTTP_RESPONSE) {
+          watch->message.type = GST_RTSP_MESSAGE_RESPONSE;
+          if (watch->message.type_data.response.version != GST_RTSP_VERSION_1_0)
+            watch->message.type_data.response.version =
+                GST_RTSP_VERSION_INVALID;
+          res = GST_RTSP_EPARSE;
+        }
+      }
+
+      if (G_LIKELY (res == GST_RTSP_OK)) {
+        if (watch->funcs.message_received)
+          watch->funcs.message_received (watch, &watch->message,
+              watch->user_data);
+      } else {
+        goto read_error;
+      }
+
+    read_done:
+      gst_rtsp_message_unset (&watch->message);
+      build_reset (&watch->builder);
+    } while (FALSE);
+  }
+
+  if (watch->writefd.revents & WRITE_COND) {
+    if (watch->writefd.revents & WRITE_ERR)
+      goto write_error;
+
+    g_mutex_lock (watch->mutex);
+    do {
+      if (watch->write_data == NULL) {
+        GstRTSPRec *rec;
+
+        /* get a new message from the queue */
+        rec = g_queue_pop_tail (watch->messages);
+        if (rec == NULL)
+          break;
+
+        watch->write_off = 0;
+        watch->write_data = rec->data;
+        watch->write_size = rec->size;
+        watch->write_id = rec->id;
+
+        g_slice_free (GstRTSPRec, rec);
+      }
+
+      res = write_bytes (watch->writefd.fd, watch->write_data,
+          &watch->write_off, watch->write_size);
+      g_mutex_unlock (watch->mutex);
+
+      if (res == GST_RTSP_EINTR)
+        goto write_blocked;
+      else if (G_LIKELY (res == GST_RTSP_OK)) {
+        if (watch->funcs.message_sent)
+          watch->funcs.message_sent (watch, watch->write_id, watch->user_data);
+      } else {
+        goto write_error;
+      }
+      g_mutex_lock (watch->mutex);
+
+      g_free (watch->write_data);
+      watch->write_data = NULL;
+    } while (TRUE);
+
+    watch->writefd.events = WRITE_ERR;
+
+    g_mutex_unlock (watch->mutex);
+  }
+
+write_blocked:
+  return keep_running;
+
+  /* ERRORS */
+eof:
+  {
+    if (watch->funcs.closed)
+      watch->funcs.closed (watch, watch->user_data);
+
+    /* always stop when the readfd returns EOF in non-tunneled mode */
+    return FALSE;
+  }
+read_error:
+  {
+    watch->readfd.events = 0;
+    watch->readfd.revents = 0;
+    g_source_remove_poll ((GSource *) watch, &watch->readfd);
+    keep_running = (watch->writefd.events != 0);
+
+    if (keep_running) {
+      if (watch->funcs.error_full)
+        GST_RTSP_CHECK (watch->funcs.error_full (watch, res, &watch->message,
+                0, watch->user_data), error);
+      else
+        goto error;
+    } else
+      goto eof;
+  }
+write_error:
+  {
+    watch->writefd.events = 0;
+    watch->writefd.revents = 0;
+    g_source_remove_poll ((GSource *) watch, &watch->writefd);
+    keep_running = (watch->readfd.events != 0);
+
+    if (keep_running) {
+      if (watch->funcs.error_full)
+        GST_RTSP_CHECK (watch->funcs.error_full (watch, res, NULL,
+                watch->write_id, watch->user_data), error);
+      else
+        goto error;
+    } else
+      goto eof;
+  }
+error:
+  {
+    if (watch->funcs.error)
+      watch->funcs.error (watch, res, watch->user_data);
+
+    return keep_running;
+  }
+}
+
+static void
+gst_rtsp_rec_free (gpointer data)
+{
+  GstRTSPRec *rec = data;
+
+  g_free (rec->data);
+  g_slice_free (GstRTSPRec, rec);
+}
+
+static void
+gst_rtsp_source_finalize (GSource * source)
+{
+  GstRTSPWatch *watch = (GstRTSPWatch *) source;
+
+  build_reset (&watch->builder);
+  gst_rtsp_message_unset (&watch->message);
+
+  g_queue_foreach (watch->messages, (GFunc) gst_rtsp_rec_free, NULL);
+  g_queue_free (watch->messages);
+  watch->messages = NULL;
+  g_free (watch->write_data);
+
+  g_mutex_free (watch->mutex);
+
+  if (watch->notify)
+    watch->notify (watch->user_data);
+}
+
+static GSourceFuncs gst_rtsp_source_funcs = {
+  gst_rtsp_source_prepare,
+  gst_rtsp_source_check,
+  gst_rtsp_source_dispatch,
+  gst_rtsp_source_finalize,
+  NULL,
+  NULL
+};
+
+/**
+ * gst_rtsp_watch_new:
+ * @conn: a #GstRTSPConnection
+ * @funcs: watch functions
+ * @user_data: user data to pass to @funcs
+ * @notify: notify when @user_data is not referenced anymore
+ *
+ * Create a watch object for @conn. The functions provided in @funcs will be
+ * called with @user_data when activity happened on the watch.
+ *
+ * The new watch is usually created so that it can be attached to a
+ * maincontext with gst_rtsp_watch_attach(). 
+ *
+ * @conn must exist for the entire lifetime of the watch.
+ *
+ * Returns: a #GstRTSPWatch that can be used for asynchronous RTSP
+ * communication. Free with gst_rtsp_watch_unref () after usage.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPWatch *
+gst_rtsp_watch_new (GstRTSPConnection * conn,
+    GstRTSPWatchFuncs * funcs, gpointer user_data, GDestroyNotify notify)
+{
+  GstRTSPWatch *result;
+
+  g_return_val_if_fail (conn != NULL, NULL);
+  g_return_val_if_fail (funcs != NULL, NULL);
+  g_return_val_if_fail (conn->readfd != NULL, NULL);
+  g_return_val_if_fail (conn->writefd != NULL, NULL);
+
+  result = (GstRTSPWatch *) g_source_new (&gst_rtsp_source_funcs,
+      sizeof (GstRTSPWatch));
+
+  result->conn = conn;
+  result->builder.state = STATE_START;
+
+  result->mutex = g_mutex_new ();
+  result->messages = g_queue_new ();
+
+  result->readfd.fd = -1;
+  result->writefd.fd = -1;
+
+  gst_rtsp_watch_reset (result);
+
+  result->funcs = *funcs;
+  result->user_data = user_data;
+  result->notify = notify;
+
+  return result;
+}
+
+/**
+ * gst_rtsp_watch_reset:
+ * @watch: a #GstRTSPWatch
+ *
+ * Reset @watch, this is usually called after gst_rtsp_connection_do_tunnel()
+ * when the file descriptors of the connection might have changed.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtsp_watch_reset (GstRTSPWatch * watch)
+{
+  if (watch->readfd.fd != -1)
+    g_source_remove_poll ((GSource *) watch, &watch->readfd);
+  if (watch->writefd.fd != -1)
+    g_source_remove_poll ((GSource *) watch, &watch->writefd);
+
+  watch->readfd.fd = watch->conn->readfd->fd;
+  watch->readfd.events = READ_COND;
+  watch->readfd.revents = 0;
+
+  watch->writefd.fd = watch->conn->writefd->fd;
+  watch->writefd.events = WRITE_ERR;
+  watch->writefd.revents = 0;
+
+  if (watch->readfd.fd != -1)
+    g_source_add_poll ((GSource *) watch, &watch->readfd);
+  if (watch->writefd.fd != -1)
+    g_source_add_poll ((GSource *) watch, &watch->writefd);
+}
+
+/**
+ * gst_rtsp_watch_attach:
+ * @watch: a #GstRTSPWatch
+ * @context: a GMainContext (if NULL, the default context will be used)
+ *
+ * Adds a #GstRTSPWatch to a context so that it will be executed within that context.
+ *
+ * Returns: the ID (greater than 0) for the watch within the GMainContext. 
+ *
+ * Since: 0.10.23
+ */
+guint
+gst_rtsp_watch_attach (GstRTSPWatch * watch, GMainContext * context)
+{
+  g_return_val_if_fail (watch != NULL, 0);
+
+  return g_source_attach ((GSource *) watch, context);
+}
+
+/**
+ * gst_rtsp_watch_unref:
+ * @watch: a #GstRTSPWatch
+ *
+ * Decreases the reference count of @watch by one. If the resulting reference
+ * count is zero the watch and associated memory will be destroyed.
+ *
+ * Since: 0.10.23
+ */
+void
+gst_rtsp_watch_unref (GstRTSPWatch * watch)
+{
+  g_return_if_fail (watch != NULL);
+
+  g_source_unref ((GSource *) watch);
+}
+
+/**
+ * gst_rtsp_watch_write_data:
+ * @watch: a #GstRTSPWatch
+ * @data: the data to queue
+ * @size: the size of @data
+ * @id: location for a message ID or %NULL
+ *
+ * Write @data using the connection of the @watch. If it cannot be sent
+ * immediately, it will be queued for transmission in @watch. The contents of
+ * @message will then be serialized and transmitted when the connection of the
+ * @watch becomes writable. In case the @message is queued, the ID returned in
+ * @id will be non-zero and used as the ID argument in the message_sent
+ * callback.
+ *
+ * This function will take ownership of @data and g_free() it after use.
+ *
+ * Returns: #GST_RTSP_OK on success.
+ *
+ * Since: 0.10.25
+ */
+GstRTSPResult
+gst_rtsp_watch_write_data (GstRTSPWatch * watch, const guint8 * data,
+    guint size, guint * id)
+{
+  GstRTSPResult res;
+  GstRTSPRec *rec;
+  guint off = 0;
+  GMainContext *context = NULL;
+
+  g_return_val_if_fail (watch != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (size != 0, GST_RTSP_EINVAL);
+
+  g_mutex_lock (watch->mutex);
+
+  /* try to send the message synchronously first */
+  if (watch->messages->length == 0) {
+    res = write_bytes (watch->writefd.fd, data, &off, size);
+    if (res != GST_RTSP_EINTR) {
+      if (id != NULL)
+        *id = 0;
+      g_free ((gpointer) data);
+      goto done;
+    }
+  }
+
+  /* make a record with the data and id for sending async */
+  rec = g_slice_new (GstRTSPRec);
+  if (off == 0) {
+    rec->data = (guint8 *) data;
+    rec->size = size;
+  } else {
+    rec->data = g_memdup (data + off, size - off);
+    rec->size = size - off;
+    g_free ((gpointer) data);
+  }
+
+  do {
+    /* make sure rec->id is never 0 */
+    rec->id = ++watch->id;
+  } while (G_UNLIKELY (rec->id == 0));
+
+  /* add the record to a queue. FIXME we would like to have an upper limit here */
+  g_queue_push_head (watch->messages, rec);
+
+  /* make sure the main context will now also check for writability on the
+   * socket */
+  if (watch->writefd.events != WRITE_COND) {
+    watch->writefd.events = WRITE_COND;
+    context = ((GSource *) watch)->context;
+  }
+
+  if (id != NULL)
+    *id = rec->id;
+  res = GST_RTSP_OK;
+
+done:
+  g_mutex_unlock (watch->mutex);
+
+  if (context)
+    g_main_context_wakeup (context);
+
+  return res;
+}
+
+/**
+ * gst_rtsp_watch_send_message:
+ * @watch: a #GstRTSPWatch
+ * @message: a #GstRTSPMessage
+ * @id: location for a message ID or %NULL
+ *
+ * Send a @message using the connection of the @watch. If it cannot be sent
+ * immediately, it will be queued for transmission in @watch. The contents of
+ * @message will then be serialized and transmitted when the connection of the
+ * @watch becomes writable. In case the @message is queued, the ID returned in
+ * @id will be non-zero and used as the ID argument in the message_sent
+ * callback.
+ *
+ * Returns: #GST_RTSP_OK on success.
+ *
+ * Since: 0.10.25
+ */
+GstRTSPResult
+gst_rtsp_watch_send_message (GstRTSPWatch * watch, GstRTSPMessage * message,
+    guint * id)
+{
+  GString *str;
+  guint size;
+
+  g_return_val_if_fail (watch != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (message != NULL, GST_RTSP_EINVAL);
+
+  /* make a record with the message as a string and id */
+  str = message_to_string (watch->conn, message);
+  size = str->len;
+  return gst_rtsp_watch_write_data (watch,
+      (guint8 *) g_string_free (str, FALSE), size, id);
+}
+
+/**
+ * gst_rtsp_watch_queue_data:
+ * @watch: a #GstRTSPWatch
+ * @data: the data to queue
+ * @size: the size of @data
+ *
+ * Queue @data for transmission in @watch. It will be transmitted when the
+ * connection of the @watch becomes writable.
+ *
+ * This function will take ownership of @data and g_free() it after use.
+ *
+ * The return value of this function will be used as the id argument in the
+ * message_sent callback.
+ *
+ * Deprecated: Use gst_rtsp_watch_write_data()
+ *
+ * Returns: an id.
+ *
+ * Since: 0.10.24
+ */
+#ifndef GST_REMOVE_DEPRECATED
+#ifdef GST_DISABLE_DEPRECATED
+guint
+gst_rtsp_watch_queue_data (GstRTSPWatch * watch, const guint8 * data,
+    guint size);
+#endif
+guint
+gst_rtsp_watch_queue_data (GstRTSPWatch * watch, const guint8 * data,
+    guint size)
+{
+  GstRTSPRec *rec;
+  GMainContext *context = NULL;
+
+  g_return_val_if_fail (watch != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (size != 0, GST_RTSP_EINVAL);
+
+  g_mutex_lock (watch->mutex);
+
+  /* make a record with the data and id */
+  rec = g_slice_new (GstRTSPRec);
+  rec->data = (guint8 *) data;
+  rec->size = size;
+  do {
+    /* make sure rec->id is never 0 */
+    rec->id = ++watch->id;
+  } while (G_UNLIKELY (rec->id == 0));
+
+  /* add the record to a queue. FIXME we would like to have an upper limit here */
+  g_queue_push_head (watch->messages, rec);
+
+  /* make sure the main context will now also check for writability on the
+   * socket */
+  if (watch->writefd.events != WRITE_COND) {
+    watch->writefd.events = WRITE_COND;
+    context = ((GSource *) watch)->context;
+  }
+  g_mutex_unlock (watch->mutex);
+
+  if (context)
+    g_main_context_wakeup (context);
+
+  return rec->id;
+}
+#endif /* GST_REMOVE_DEPRECATED */
+
+/**
+ * gst_rtsp_watch_queue_message:
+ * @watch: a #GstRTSPWatch
+ * @message: a #GstRTSPMessage
+ *
+ * Queue a @message for transmission in @watch. The contents of this
+ * message will be serialized and transmitted when the connection of the
+ * @watch becomes writable.
+ *
+ * The return value of this function will be used as the id argument in the
+ * message_sent callback.
+ *
+ * Deprecated: Use gst_rtsp_watch_send_message()
+ *
+ * Returns: an id.
+ *
+ * Since: 0.10.23
+ */
+#ifndef GST_REMOVE_DEPRECATED
+#ifdef GST_DISABLE_DEPRECATED
+guint
+gst_rtsp_watch_queue_message (GstRTSPWatch * watch, GstRTSPMessage * message);
+#endif
+guint
+gst_rtsp_watch_queue_message (GstRTSPWatch * watch, GstRTSPMessage * message)
+{
+  GString *str;
+  guint size;
+
+  g_return_val_if_fail (watch != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (message != NULL, GST_RTSP_EINVAL);
+
+  /* make a record with the message as a string and id */
+  str = message_to_string (watch->conn, message);
+  size = str->len;
+  return gst_rtsp_watch_queue_data (watch,
+      (guint8 *) g_string_free (str, FALSE), size);
+}
+#endif /* GST_REMOVE_DEPRECATED */
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h
new file mode 100644
index 0000000..2a34abd
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspconnection.h
@@ -0,0 +1,209 @@
+/* GStreamer
+ * Copyright (C) <2005,2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_CONNECTION_H__
+#define __GST_RTSP_CONNECTION_H__
+
+#include <glib.h>
+
+#include <gst/gstconfig.h>
+#include <gst/rtsp/gstrtspdefs.h>
+#include <gst/rtsp/gstrtspurl.h>
+#include <gst/rtsp/gstrtspmessage.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstRTSPConnection:
+ *
+ * Opaque RTSP connection object.
+ */
+typedef struct _GstRTSPConnection GstRTSPConnection;
+
+/* opening/closing a connection */
+GstRTSPResult      gst_rtsp_connection_create        (const GstRTSPUrl *url, GstRTSPConnection **conn);
+GstRTSPResult      gst_rtsp_connection_create_from_fd (gint fd,
+                                                       const gchar * ip,
+                                                       guint16 port,
+                                                       const gchar * initial_buffer,
+                                                       GstRTSPConnection ** conn);
+GstRTSPResult      gst_rtsp_connection_accept        (gint sock, GstRTSPConnection **conn);
+GstRTSPResult      gst_rtsp_connection_connect       (GstRTSPConnection *conn, GTimeVal *timeout);
+GstRTSPResult      gst_rtsp_connection_close         (GstRTSPConnection *conn);
+GstRTSPResult      gst_rtsp_connection_free          (GstRTSPConnection *conn);
+
+
+/* sending/receiving raw bytes */
+GstRTSPResult      gst_rtsp_connection_read          (GstRTSPConnection * conn, guint8 * data,
+                                                      guint size, GTimeVal * timeout);
+GstRTSPResult      gst_rtsp_connection_write         (GstRTSPConnection * conn, const guint8 * data, 
+		                                      guint size, GTimeVal * timeout);
+
+/* sending/receiving messages */
+GstRTSPResult      gst_rtsp_connection_send          (GstRTSPConnection *conn, GstRTSPMessage *message,
+                                                      GTimeVal *timeout);
+GstRTSPResult      gst_rtsp_connection_receive       (GstRTSPConnection *conn, GstRTSPMessage *message,
+                                                      GTimeVal *timeout);
+
+/* status management */
+GstRTSPResult      gst_rtsp_connection_poll          (GstRTSPConnection *conn, GstRTSPEvent events,
+                                                      GstRTSPEvent *revents, GTimeVal *timeout);
+
+/* reset the timeout */
+GstRTSPResult      gst_rtsp_connection_next_timeout  (GstRTSPConnection *conn, GTimeVal *timeout);
+GstRTSPResult      gst_rtsp_connection_reset_timeout (GstRTSPConnection *conn);
+
+/* flushing state */
+GstRTSPResult      gst_rtsp_connection_flush         (GstRTSPConnection *conn, gboolean flush);
+
+/* HTTP proxy support */
+GstRTSPResult      gst_rtsp_connection_set_proxy     (GstRTSPConnection *conn,
+                                                      const gchar *host, guint port);
+
+/* configure authentication data */
+GstRTSPResult      gst_rtsp_connection_set_auth      (GstRTSPConnection *conn, GstRTSPAuthMethod method,
+                                                      const gchar *user, const gchar *pass);
+
+void               gst_rtsp_connection_set_auth_param    (GstRTSPConnection *conn,
+		                                          const gchar * param,
+							  const gchar *value);
+void               gst_rtsp_connection_clear_auth_params (GstRTSPConnection *conn);
+
+/* configure DSCP */
+GstRTSPResult      gst_rtsp_connection_set_qos_dscp  (GstRTSPConnection *conn,
+                                                      guint qos_dscp);
+
+/* accessors */
+GstRTSPUrl *       gst_rtsp_connection_get_url       (const GstRTSPConnection *conn);
+const gchar *      gst_rtsp_connection_get_ip        (const GstRTSPConnection *conn);
+void               gst_rtsp_connection_set_ip        (GstRTSPConnection *conn, const gchar *ip);
+
+gint               gst_rtsp_connection_get_readfd    (const GstRTSPConnection *conn);
+gint               gst_rtsp_connection_get_writefd   (const GstRTSPConnection *conn);
+
+void               gst_rtsp_connection_set_http_mode (GstRTSPConnection *conn,
+                                                      gboolean enable);
+
+/* tunneling */
+void               gst_rtsp_connection_set_tunneled  (GstRTSPConnection *conn, gboolean tunneled);
+gboolean           gst_rtsp_connection_is_tunneled   (const GstRTSPConnection *conn);
+
+const gchar *      gst_rtsp_connection_get_tunnelid  (const GstRTSPConnection *conn);
+GstRTSPResult      gst_rtsp_connection_do_tunnel     (GstRTSPConnection *conn, GstRTSPConnection *conn2);
+
+/* async IO */
+
+/**
+ * GstRTSPWatch:
+ *
+ * Opaque RTSP watch object that can be used for asynchronous RTSP
+ * operations.
+ */
+typedef struct _GstRTSPWatch GstRTSPWatch;
+
+/**
+ * GstRTSPWatchFuncs:
+ * @message_received: callback when a message was received
+ * @message_sent: callback when a message was sent
+ * @closed: callback when the connection is closed
+ * @error: callback when an error occured
+ * @tunnel_start: a client started a tunneled connection. The tunnelid of the
+ *   connection must be saved.
+ * @tunnel_complete: a client finished a tunneled connection. In this callback
+ *   you usually pair the tunnelid of this connection with the saved one using
+ *   gst_rtsp_connection_do_tunnel().
+ * @error_full: callback when an error occured with more information than
+ *   the @error callback. Since 0.10.25
+ * @tunnel_lost: callback when the post connection of a tunnel is closed.
+ *   Since 0.10.29
+ *
+ * Callback functions from a #GstRTSPWatch.
+ *
+ * Since: 0.10.23
+ */
+typedef struct {
+  GstRTSPResult     (*message_received) (GstRTSPWatch *watch, GstRTSPMessage *message,
+                                         gpointer user_data);
+  GstRTSPResult     (*message_sent)     (GstRTSPWatch *watch, guint id,
+                                         gpointer user_data);
+  GstRTSPResult     (*closed)           (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*error)            (GstRTSPWatch *watch, GstRTSPResult result,
+                                         gpointer user_data);
+  GstRTSPStatusCode (*tunnel_start)     (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*tunnel_complete)  (GstRTSPWatch *watch, gpointer user_data);
+  GstRTSPResult     (*error_full)       (GstRTSPWatch *watch, GstRTSPResult result,
+                                         GstRTSPMessage *message, guint id,
+                                         gpointer user_data);
+  GstRTSPResult     (*tunnel_lost)      (GstRTSPWatch *watch, gpointer user_data);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING - 2];
+} GstRTSPWatchFuncs;
+
+GstRTSPWatch *     gst_rtsp_watch_new                (GstRTSPConnection *conn,
+                                                      GstRTSPWatchFuncs *funcs,
+						      gpointer user_data,
+						      GDestroyNotify notify);
+void               gst_rtsp_watch_reset              (GstRTSPWatch *watch);
+void               gst_rtsp_watch_unref              (GstRTSPWatch *watch);
+
+guint              gst_rtsp_watch_attach             (GstRTSPWatch *watch,
+                                                      GMainContext *context);
+
+GstRTSPResult      gst_rtsp_watch_write_data         (GstRTSPWatch *watch,
+                                                      const guint8 *data,
+                                                      guint size, guint *id);
+GstRTSPResult      gst_rtsp_watch_send_message       (GstRTSPWatch *watch,
+                                                      GstRTSPMessage *message,
+                                                      guint *id);
+
+#ifndef GST_DISABLE_DEPRECATED
+guint              gst_rtsp_watch_queue_data         (GstRTSPWatch * watch,
+                                                      const guint8 * data,
+                                                      guint size);
+guint              gst_rtsp_watch_queue_message      (GstRTSPWatch *watch,
+                                                      GstRTSPMessage *message);
+#endif
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_CONNECTION_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspdefs.c b/gst-libs/gst/rtsp/gstrtspdefs.c
new file mode 100644
index 0000000..ee74b98
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspdefs.c
@@ -0,0 +1,508 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtspdefs
+ * @short_description: common RTSP defines
+ * @see_also: gstrtspurl, gstrtspconnection
+ *  
+ * Provides common defines for the RTSP library. 
+ *  
+ * Last reviewed on 2007-07-24 (0.10.14)
+ */
+
+#include <errno.h>
+
+#include "gstrtspdefs.h"
+
+#ifdef G_OS_WIN32
+#include <winsock2.h>
+#else
+#include <netdb.h>
+#endif
+
+struct rtsp_header
+{
+  const gchar *name;
+  gboolean multiple;
+};
+
+static const gchar *rtsp_methods[] = {
+  "DESCRIBE",
+  "ANNOUNCE",
+  "GET_PARAMETER",
+  "OPTIONS",
+  "PAUSE",
+  "PLAY",
+  "RECORD",
+  "REDIRECT",
+  "SETUP",
+  "SET_PARAMETER",
+  "TEARDOWN",
+  "GET",
+  "POST",
+  NULL
+};
+
+static struct rtsp_header rtsp_headers[] = {
+  {"Accept", TRUE},
+  {"Accept-Encoding", TRUE},
+  {"Accept-Language", TRUE},
+  {"Allow", TRUE},
+  {"Authorization", FALSE},
+  {"Bandwidth", FALSE},
+  {"Blocksize", FALSE},
+  {"Cache-Control", TRUE},
+  {"Conference", FALSE},
+  {"Connection", TRUE},
+  {"Content-Base", FALSE},
+  {"Content-Encoding", TRUE},
+  {"Content-Language", TRUE},
+  {"Content-Length", FALSE},
+  {"Content-Location", FALSE},
+  {"Content-Type", FALSE},
+  {"CSeq", FALSE},
+  {"Date", FALSE},
+  {"Expires", FALSE},
+  {"From", FALSE},
+  {"If-Modified-Since", FALSE},
+  {"Last-Modified", FALSE},
+  {"Proxy-Authenticate", TRUE},
+  {"Proxy-Require", TRUE},
+  {"Public", TRUE},
+  {"Range", FALSE},
+  {"Referer", FALSE},
+  {"Require", TRUE},
+  {"Retry-After", FALSE},
+  {"RTP-Info", TRUE},
+  {"Scale", FALSE},
+  {"Session", FALSE},
+  {"Server", FALSE},
+  {"Speed", FALSE},
+  {"Transport", TRUE},
+  {"Unsupported", FALSE},
+  {"User-Agent", FALSE},
+  {"Via", TRUE},
+  {"WWW-Authenticate", TRUE},
+
+  /* Real extensions */
+  {"ClientChallenge", FALSE},
+  {"RealChallenge1", FALSE},
+  {"RealChallenge2", FALSE},
+  {"RealChallenge3", FALSE},
+  {"Subscribe", FALSE},
+  {"Alert", FALSE},
+  {"ClientID", FALSE},
+  {"CompanyID", FALSE},
+  {"GUID", FALSE},
+  {"RegionData", FALSE},
+  {"SupportsMaximumASMBandwidth", FALSE},
+  {"Language", FALSE},
+  {"PlayerStarttime", FALSE},
+
+  /* Since 0.10.16 */
+  {"Location", FALSE},
+
+  /* Since 0.10.23 */
+  {"ETag", FALSE},
+  {"If-Match", TRUE},
+
+  /* WM extensions [MS-RTSP] Since 0.10.23 */
+  {"Accept-Charset", TRUE},
+  {"Supported", TRUE},
+  {"Vary", TRUE},
+  {"X-Accelerate-Streaming", FALSE},
+  {"X-Accept-Authentication", FALSE},
+  {"X-Accept-Proxy-Authentication", FALSE},
+  {"X-Broadcast-Id", FALSE},
+  {"X-Burst-Streaming", FALSE},
+  {"X-Notice", FALSE},
+  {"X-Player-Lag-Time", FALSE},
+  {"X-Playlist", FALSE},
+  {"X-Playlist-Change-Notice", FALSE},
+  {"X-Playlist-Gen-Id", FALSE},
+  {"X-Playlist-Seek-Id", FALSE},
+  {"X-Proxy-Client-Agent", FALSE},
+  {"X-Proxy-Client-Verb", FALSE},
+  {"X-Receding-PlaylistChange", FALSE},
+  {"X-RTP-Info", FALSE},
+  {"X-StartupProfile", FALSE},
+
+  /* Since 0.10.24 */
+  {"Timestamp", FALSE},
+
+  /* Since 0.10.25 */
+  {"Authentication-Info", FALSE},
+  {"Host", FALSE},
+  {"Pragma", TRUE},
+  {"X-Server-IP-Address", FALSE},
+  {"X-Sessioncookie", FALSE},
+
+  /* Since 0.10.36 */
+  {"RTCP-Interval", FALSE},
+
+  {NULL, FALSE}
+};
+
+#define DEF_STATUS(c, t) \
+  g_hash_table_insert (statuses, GUINT_TO_POINTER(c), (gpointer) t)
+
+static GHashTable *
+rtsp_init_status (void)
+{
+  GHashTable *statuses = g_hash_table_new (NULL, NULL);
+
+  DEF_STATUS (GST_RTSP_STS_CONTINUE, "Continue");
+  DEF_STATUS (GST_RTSP_STS_OK, "OK");
+  DEF_STATUS (GST_RTSP_STS_CREATED, "Created");
+  DEF_STATUS (GST_RTSP_STS_LOW_ON_STORAGE, "Low on Storage Space");
+  DEF_STATUS (GST_RTSP_STS_MULTIPLE_CHOICES, "Multiple Choices");
+  DEF_STATUS (GST_RTSP_STS_MOVED_PERMANENTLY, "Moved Permanently");
+  DEF_STATUS (GST_RTSP_STS_MOVE_TEMPORARILY, "Move Temporarily");
+  DEF_STATUS (GST_RTSP_STS_SEE_OTHER, "See Other");
+  DEF_STATUS (GST_RTSP_STS_NOT_MODIFIED, "Not Modified");
+  DEF_STATUS (GST_RTSP_STS_USE_PROXY, "Use Proxy");
+  DEF_STATUS (GST_RTSP_STS_BAD_REQUEST, "Bad Request");
+  DEF_STATUS (GST_RTSP_STS_UNAUTHORIZED, "Unauthorized");
+  DEF_STATUS (GST_RTSP_STS_PAYMENT_REQUIRED, "Payment Required");
+  DEF_STATUS (GST_RTSP_STS_FORBIDDEN, "Forbidden");
+  DEF_STATUS (GST_RTSP_STS_NOT_FOUND, "Not Found");
+  DEF_STATUS (GST_RTSP_STS_METHOD_NOT_ALLOWED, "Method Not Allowed");
+  DEF_STATUS (GST_RTSP_STS_NOT_ACCEPTABLE, "Not Acceptable");
+  DEF_STATUS (GST_RTSP_STS_PROXY_AUTH_REQUIRED,
+      "Proxy Authentication Required");
+  DEF_STATUS (GST_RTSP_STS_REQUEST_TIMEOUT, "Request Time-out");
+  DEF_STATUS (GST_RTSP_STS_GONE, "Gone");
+  DEF_STATUS (GST_RTSP_STS_LENGTH_REQUIRED, "Length Required");
+  DEF_STATUS (GST_RTSP_STS_PRECONDITION_FAILED, "Precondition Failed");
+  DEF_STATUS (GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE,
+      "Request Entity Too Large");
+  DEF_STATUS (GST_RTSP_STS_REQUEST_URI_TOO_LARGE, "Request-URI Too Large");
+  DEF_STATUS (GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE, "Unsupported Media Type");
+  DEF_STATUS (GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD,
+      "Parameter Not Understood");
+  DEF_STATUS (GST_RTSP_STS_CONFERENCE_NOT_FOUND, "Conference Not Found");
+  DEF_STATUS (GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH, "Not Enough Bandwidth");
+  DEF_STATUS (GST_RTSP_STS_SESSION_NOT_FOUND, "Session Not Found");
+  DEF_STATUS (GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE,
+      "Method Not Valid in This State");
+  DEF_STATUS (GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE,
+      "Header Field Not Valid for Resource");
+  DEF_STATUS (GST_RTSP_STS_INVALID_RANGE, "Invalid Range");
+  DEF_STATUS (GST_RTSP_STS_PARAMETER_IS_READONLY, "Parameter Is Read-Only");
+  DEF_STATUS (GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED,
+      "Aggregate operation not allowed");
+  DEF_STATUS (GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED,
+      "Only aggregate operation allowed");
+  DEF_STATUS (GST_RTSP_STS_UNSUPPORTED_TRANSPORT, "Unsupported transport");
+  DEF_STATUS (GST_RTSP_STS_DESTINATION_UNREACHABLE, "Destination unreachable");
+  DEF_STATUS (GST_RTSP_STS_INTERNAL_SERVER_ERROR, "Internal Server Error");
+  DEF_STATUS (GST_RTSP_STS_NOT_IMPLEMENTED, "Not Implemented");
+  DEF_STATUS (GST_RTSP_STS_BAD_GATEWAY, "Bad Gateway");
+  DEF_STATUS (GST_RTSP_STS_SERVICE_UNAVAILABLE, "Service Unavailable");
+  DEF_STATUS (GST_RTSP_STS_GATEWAY_TIMEOUT, "Gateway Time-out");
+  DEF_STATUS (GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED,
+      "RTSP Version not supported");
+  DEF_STATUS (GST_RTSP_STS_OPTION_NOT_SUPPORTED, "Option not supported");
+
+  return statuses;
+}
+
+/**
+ * gst_rtsp_strresult:
+ * @result: a #GstRTSPResult
+ *
+ * Convert @result in a human readable string.
+ *
+ * Returns: a newly allocated string. g_free() after usage.
+ */
+gchar *
+gst_rtsp_strresult (GstRTSPResult result)
+{
+  switch (result) {
+    case GST_RTSP_OK:
+      return g_strdup ("OK");
+#ifdef G_OS_WIN32
+    case GST_RTSP_ESYS:
+    case GST_RTSP_ENET:
+    {
+      gchar *res, *msg;
+      msg = g_win32_error_message (WSAGetLastError ());
+      if (result == GST_RTSP_ESYS)
+        res = g_strdup_printf ("System error: %s", msg);
+      else
+        res = g_strdup_printf ("Network error: %s", msg);
+      g_free (msg);
+      return res;
+    }
+#else
+    case GST_RTSP_ESYS:
+      return g_strdup_printf ("System error: %s", g_strerror (errno));
+    case GST_RTSP_ENET:
+      return g_strdup_printf ("Network error: %s", hstrerror (h_errno));
+#endif
+    case GST_RTSP_ERROR:
+      return g_strdup ("Generic error");
+    case GST_RTSP_EINVAL:
+      return g_strdup ("Invalid parameter specified");
+    case GST_RTSP_EINTR:
+      return g_strdup ("Operation interrupted");
+    case GST_RTSP_ENOMEM:
+      return g_strdup ("Out of memory");
+    case GST_RTSP_ERESOLV:
+      return g_strdup ("Cannot resolve host");
+    case GST_RTSP_ENOTIMPL:
+      return g_strdup ("Function not implemented");
+    case GST_RTSP_EPARSE:
+      return g_strdup ("Parse error");
+    case GST_RTSP_EWSASTART:
+      return g_strdup ("Error on WSAStartup");
+    case GST_RTSP_EWSAVERSION:
+      return g_strdup ("Windows sockets are not version 0x202");
+    case GST_RTSP_EEOF:
+      return g_strdup ("Received end-of-file");
+    case GST_RTSP_ENOTIP:
+      return g_strdup ("Host is not a valid IP address");
+    case GST_RTSP_ETIMEOUT:
+      return g_strdup ("Timeout while waiting for server response");
+    case GST_RTSP_ETGET:
+      return g_strdup ("Tunnel GET request received");
+    case GST_RTSP_ETPOST:
+      return g_strdup ("Tunnel POST request received");
+    case GST_RTSP_ELAST:
+    default:
+      return g_strdup_printf ("Unknown error (%d)", result);
+  }
+}
+
+/**
+ * gst_rtsp_method_as_text:
+ * @method: a #GstRTSPMethod
+ *
+ * Convert @method to a string.
+ *
+ * Returns: a string representation of @method.
+ */
+const gchar *
+gst_rtsp_method_as_text (GstRTSPMethod method)
+{
+  gint i;
+
+  if (method == GST_RTSP_INVALID)
+    return NULL;
+
+  i = 0;
+  while ((method & 1) == 0) {
+    i++;
+    method >>= 1;
+  }
+  return rtsp_methods[i];
+}
+
+/**
+ * gst_rtsp_version_as_text:
+ * @version: a #GstRTSPVersion
+ *
+ * Convert @version to a string.
+ *
+ * Returns: a string representation of @version.
+ */
+const gchar *
+gst_rtsp_version_as_text (GstRTSPVersion version)
+{
+  switch (version) {
+    case GST_RTSP_VERSION_1_0:
+      return "1.0";
+
+    case GST_RTSP_VERSION_1_1:
+      return "1.1";
+
+    default:
+      return "0.0";
+  }
+}
+
+/**
+ * gst_rtsp_header_as_text:
+ * @field: a #GstRTSPHeaderField
+ *
+ * Convert @field to a string.
+ *
+ * Returns: a string representation of @field.
+ */
+const gchar *
+gst_rtsp_header_as_text (GstRTSPHeaderField field)
+{
+  if (field == GST_RTSP_HDR_INVALID)
+    return NULL;
+  else
+    return rtsp_headers[field - 1].name;
+}
+
+/**
+ * gst_rtsp_status_as_text:
+ * @code: a #GstRTSPStatusCode
+ *
+ * Convert @code to a string.
+ *
+ * Returns: a string representation of @code.
+ */
+const gchar *
+gst_rtsp_status_as_text (GstRTSPStatusCode code)
+{
+  static GHashTable *statuses;
+
+  if (G_UNLIKELY (statuses == NULL))
+    statuses = rtsp_init_status ();
+
+  return g_hash_table_lookup (statuses, GUINT_TO_POINTER (code));
+}
+
+/**
+ * gst_rtsp_find_header_field:
+ * @header: a header string
+ *
+ * Convert @header to a #GstRTSPHeaderField.
+ *
+ * Returns: a #GstRTSPHeaderField for @header or #GST_RTSP_HDR_INVALID if the
+ * header field is unknown.
+ */
+GstRTSPHeaderField
+gst_rtsp_find_header_field (const gchar * header)
+{
+  gint idx;
+
+  for (idx = 0; rtsp_headers[idx].name; idx++) {
+    if (g_ascii_strcasecmp (rtsp_headers[idx].name, header) == 0) {
+      return idx + 1;
+    }
+  }
+  return GST_RTSP_HDR_INVALID;
+}
+
+/**
+ * gst_rtsp_find_method:
+ * @method: a method
+ *
+ * Convert @method to a #GstRTSPMethod.
+ *
+ * Returns: a #GstRTSPMethod for @method or #GST_RTSP_INVALID if the
+ * method is unknown.
+ */
+GstRTSPMethod
+gst_rtsp_find_method (const gchar * method)
+{
+  gint idx;
+
+  for (idx = 0; rtsp_methods[idx]; idx++) {
+    if (g_ascii_strcasecmp (rtsp_methods[idx], method) == 0) {
+      return (1 << idx);
+    }
+  }
+  return GST_RTSP_INVALID;
+}
+
+/**
+ * gst_rtsp_options_as_text:
+ * @options: one or more #GstRTSPMethod
+ *
+ * Convert @options to a string.
+ *
+ * Returns: a new string of @options. g_free() after usage.
+ *
+ * Since: 0.10.23
+ */
+gchar *
+gst_rtsp_options_as_text (GstRTSPMethod options)
+{
+  GString *str;
+
+  str = g_string_new ("");
+
+  if (options & GST_RTSP_OPTIONS)
+    g_string_append (str, "OPTIONS, ");
+  if (options & GST_RTSP_DESCRIBE)
+    g_string_append (str, "DESCRIBE, ");
+  if (options & GST_RTSP_ANNOUNCE)
+    g_string_append (str, "ANNOUNCE, ");
+  if (options & GST_RTSP_GET_PARAMETER)
+    g_string_append (str, "GET_PARAMETER, ");
+  if (options & GST_RTSP_PAUSE)
+    g_string_append (str, "PAUSE, ");
+  if (options & GST_RTSP_PLAY)
+    g_string_append (str, "PLAY, ");
+  if (options & GST_RTSP_RECORD)
+    g_string_append (str, "RECORD, ");
+  if (options & GST_RTSP_REDIRECT)
+    g_string_append (str, "REDIRECT, ");
+  if (options & GST_RTSP_SETUP)
+    g_string_append (str, "SETUP, ");
+  if (options & GST_RTSP_SET_PARAMETER)
+    g_string_append (str, "SET_PARAMETER, ");
+  if (options & GST_RTSP_TEARDOWN)
+    g_string_append (str, "TEARDOWN, ");
+
+  /* remove trailing ", " if there is one */
+  if (str->len > 2)
+    str = g_string_truncate (str, str->len - 2);
+
+  return g_string_free (str, FALSE);
+}
+
+/**
+ * gst_rtsp_header_allow_multiple:
+ * @field: a #GstRTSPHeaderField
+ *
+ * Check whether @field may appear multiple times in a message.
+ *
+ * Returns: %TRUE if multiple headers are allowed.
+ *
+ * Since: 0.10.25
+ */
+gboolean
+gst_rtsp_header_allow_multiple (GstRTSPHeaderField field)
+{
+  if (field == GST_RTSP_HDR_INVALID)
+    return FALSE;
+  else
+    return rtsp_headers[field - 1].multiple;
+}
diff --git a/gst-libs/gst/rtsp/gstrtspdefs.h b/gst-libs/gst/rtsp/gstrtspdefs.h
new file mode 100644
index 0000000..3727bf2
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspdefs.h
@@ -0,0 +1,412 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_DEFS_H__
+#define __GST_RTSP_DEFS_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_RTSP_CHECK:
+ * @stmt: a statement
+ * @label: a label
+ *
+ * Macro that checks the return value of @stmt and jumps to @label when it does
+ * not equal #GST_RTSP_OK.
+ */
+#define GST_RTSP_CHECK(stmt, label)  \
+G_STMT_START { \
+  if (G_UNLIKELY ((res = (stmt)) != GST_RTSP_OK)) \
+    goto label; \
+} G_STMT_END
+
+/**
+ * GstRTSPResult:
+ * @GST_RTSP_OK: no error
+ * @GST_RTSP_ERROR: some unspecified error occured
+ * @GST_RTSP_EINVAL: invalid arguments were provided to a function
+ * @GST_RTSP_EINTR: an operation was canceled
+ * @GST_RTSP_ENOMEM: no memory was available for the operation
+ * @GST_RTSP_ERESOLV: a host resolve error occured
+ * @GST_RTSP_ENOTIMPL: function not implemented
+ * @GST_RTSP_ESYS: a system error occured, errno contains more details
+ * @GST_RTSP_EPARSE: a persing error occured
+ * @GST_RTSP_EWSASTART: windows networking could not start
+ * @GST_RTSP_EWSAVERSION: windows networking stack has wrong version
+ * @GST_RTSP_EEOF: end-of-file was reached
+ * @GST_RTSP_ENET: a network problem occured, h_errno contains more details
+ * @GST_RTSP_ENOTIP: the host is not an IP host
+ * @GST_RTSP_ETIMEOUT: a timeout occured
+ * @GST_RTSP_ETGET: the tunnel GET request has been performed
+ * @GST_RTSP_ETPOST: the tunnel POST request has been performed
+ * @GST_RTSP_ELAST: last error
+ *
+ * Result codes from the RTSP functions.
+ */
+typedef enum {
+  GST_RTSP_OK          =  0,
+  /* errors */
+  GST_RTSP_ERROR       = -1,
+  GST_RTSP_EINVAL      = -2,
+  GST_RTSP_EINTR       = -3,
+  GST_RTSP_ENOMEM      = -4,
+  GST_RTSP_ERESOLV     = -5,
+  GST_RTSP_ENOTIMPL    = -6,
+  GST_RTSP_ESYS        = -7,
+  GST_RTSP_EPARSE      = -8,
+  GST_RTSP_EWSASTART   = -9,
+  GST_RTSP_EWSAVERSION = -10,
+  GST_RTSP_EEOF        = -11,
+  GST_RTSP_ENET        = -12,
+  GST_RTSP_ENOTIP      = -13,
+  GST_RTSP_ETIMEOUT    = -14,
+  GST_RTSP_ETGET       = -15,
+  GST_RTSP_ETPOST      = -16,
+
+  GST_RTSP_ELAST       = -17
+} GstRTSPResult;
+
+/**
+ * GstRTSPEvent:
+ * @GST_RTSP_EV_READ: connection is readable
+ * @GST_RTSP_EV_WRITE: connection is writable
+ *
+ * The possible events for the connection.
+ */
+typedef enum {
+  GST_RTSP_EV_READ  = (1 << 0),
+  GST_RTSP_EV_WRITE = (1 << 1)
+} GstRTSPEvent;
+
+/**
+ * GstRTSPFamily:
+ * @GST_RTSP_FAM_NONE: unknown network family
+ * @GST_RTSP_FAM_INET: internet
+ * @GST_RTSP_FAM_INET6: internet V6
+ *
+ * The possible network families.
+ */
+typedef enum {
+  GST_RTSP_FAM_NONE,
+  GST_RTSP_FAM_INET,
+  GST_RTSP_FAM_INET6
+} GstRTSPFamily;
+
+/**
+ * GstRTSPState:
+ * @GST_RTSP_STATE_INVALID: invalid state
+ * @GST_RTSP_STATE_INIT: initializing
+ * @GST_RTSP_STATE_READY: ready for operation
+ * @GST_RTSP_STATE_SEEKING: seeking in progress
+ * @GST_RTSP_STATE_PLAYING: playing
+ * @GST_RTSP_STATE_RECORDING: recording
+ *
+ * The different RTSP states.
+ */
+typedef enum {
+  GST_RTSP_STATE_INVALID,
+  GST_RTSP_STATE_INIT,
+  GST_RTSP_STATE_READY,
+  GST_RTSP_STATE_SEEKING,
+  GST_RTSP_STATE_PLAYING,
+  GST_RTSP_STATE_RECORDING
+} GstRTSPState;
+
+/**
+ * GstRTSPVersion:
+ * @GST_RTSP_VERSION_INVALID: unknown/invalid version
+ * @GST_RTSP_VERSION_1_0: version 1.0
+ * @GST_RTSP_VERSION_1_1: version 1.1. Since 0.10.25
+ *
+ * The supported RTSP versions.
+ */
+typedef enum {
+  GST_RTSP_VERSION_INVALID = 0x00,
+  GST_RTSP_VERSION_1_0     = 0x10,
+  GST_RTSP_VERSION_1_1     = 0x11
+} GstRTSPVersion;
+
+/**
+ * GstRTSPMethod:
+ * @GST_RTSP_INVALID: invalid method
+ * @GST_RTSP_DESCRIBE: the DESCRIBE method
+ * @GST_RTSP_ANNOUNCE: the ANNOUNCE method
+ * @GST_RTSP_GET_PARAMETER: the GET_PARAMETER method
+ * @GST_RTSP_OPTIONS: the OPTIONS method
+ * @GST_RTSP_PAUSE: the PAUSE method
+ * @GST_RTSP_PLAY: the PLAY method
+ * @GST_RTSP_RECORD: the RECORD method
+ * @GST_RTSP_REDIRECT: the REDIRECT method
+ * @GST_RTSP_SETUP: the SETUP method
+ * @GST_RTSP_SET_PARAMETER: the SET_PARAMETER method
+ * @GST_RTSP_TEARDOWN: the TEARDOWN method
+ * @GST_RTSP_GET: the GET method (HTTP). Since 0.10.25
+ * @GST_RTSP_POST: the POST method (HTTP). Since 0.10.25
+ *
+ * The different supported RTSP methods.
+ */
+typedef enum {
+  GST_RTSP_INVALID          = 0,
+  GST_RTSP_DESCRIBE         = (1 <<  0),
+  GST_RTSP_ANNOUNCE         = (1 <<  1),
+  GST_RTSP_GET_PARAMETER    = (1 <<  2),
+  GST_RTSP_OPTIONS          = (1 <<  3),
+  GST_RTSP_PAUSE            = (1 <<  4),
+  GST_RTSP_PLAY             = (1 <<  5),
+  GST_RTSP_RECORD           = (1 <<  6),
+  GST_RTSP_REDIRECT         = (1 <<  7),
+  GST_RTSP_SETUP            = (1 <<  8),
+  GST_RTSP_SET_PARAMETER    = (1 <<  9),
+  GST_RTSP_TEARDOWN         = (1 << 10),
+  GST_RTSP_GET              = (1 << 11),
+  GST_RTSP_POST             = (1 << 12)
+} GstRTSPMethod;
+
+/**
+ * GstRTSPAuthMethod:
+ * @GST_RTSP_AUTH_NONE: no authentication
+ * @GST_RTSP_AUTH_BASIC: basic authentication
+ * @GST_RTSP_AUTH_DIGEST: digest authentication
+ *
+ * Authentication methods, ordered by strength
+ */
+typedef enum {
+  GST_RTSP_AUTH_NONE    = 0x00,
+  GST_RTSP_AUTH_BASIC   = 0x01,
+  GST_RTSP_AUTH_DIGEST  = 0x02
+} GstRTSPAuthMethod;
+
+/**
+ * GST_RTSP_AUTH_MAX:
+ *
+ * Strongest available authentication method
+ */
+#define GST_RTSP_AUTH_MAX GST_RTSP_AUTH_DIGEST
+
+/**
+ * GstRTSPHeaderField:
+ *
+ * Enumeration of rtsp header fields.
+ */
+typedef enum {
+  /*< protected >*/
+  GST_RTSP_HDR_INVALID,
+
+  /*
+   * R = Request
+   * r = response
+   * g = general
+   * e = entity
+   */
+  GST_RTSP_HDR_ACCEPT,              /* Accept               R      opt.      entity */
+  GST_RTSP_HDR_ACCEPT_ENCODING,     /* Accept-Encoding      R      opt.      entity */
+  GST_RTSP_HDR_ACCEPT_LANGUAGE,     /* Accept-Language      R      opt.      all */
+  GST_RTSP_HDR_ALLOW,               /* Allow                r      opt.      all */
+  GST_RTSP_HDR_AUTHORIZATION,       /* Authorization        R      opt.      all */
+  GST_RTSP_HDR_BANDWIDTH,           /* Bandwidth            R      opt.      all */
+  GST_RTSP_HDR_BLOCKSIZE,           /* Blocksize            R      opt.      all but OPTIONS, TEARDOWN */
+  GST_RTSP_HDR_CACHE_CONTROL,       /* Cache-Control        g      opt.      SETUP */
+  GST_RTSP_HDR_CONFERENCE,          /* Conference           R      opt.      SETUP */
+  GST_RTSP_HDR_CONNECTION,          /* Connection           g      req.      all */
+  GST_RTSP_HDR_CONTENT_BASE,        /* Content-Base         e      opt.      entity */
+  GST_RTSP_HDR_CONTENT_ENCODING,    /* Content-Encoding     e      req.      SET_PARAMETER, DESCRIBE, ANNOUNCE */
+  GST_RTSP_HDR_CONTENT_LANGUAGE,    /* Content-Language     e      req.      DESCRIBE, ANNOUNCE */
+  GST_RTSP_HDR_CONTENT_LENGTH,      /* Content-Length       e      req.      SET_PARAMETER, ANNOUNCE, entity */
+  GST_RTSP_HDR_CONTENT_LOCATION,    /* Content-Location     e      opt.      entity */
+  GST_RTSP_HDR_CONTENT_TYPE,        /* Content-Type         e      req.      SET_PARAMETER, ANNOUNCE, entity */
+  GST_RTSP_HDR_CSEQ,                /* CSeq                 g      req.      all */
+  GST_RTSP_HDR_DATE,                /* Date                 g      opt.      all */
+  GST_RTSP_HDR_EXPIRES,             /* Expires              e      opt.      DESCRIBE, ANNOUNCE */
+  GST_RTSP_HDR_FROM,                /* From                 R      opt.      all */
+  GST_RTSP_HDR_IF_MODIFIED_SINCE,   /* If-Modified-Since    R      opt.      DESCRIBE, SETUP */
+  GST_RTSP_HDR_LAST_MODIFIED,       /* Last-Modified        e      opt.      entity */
+  GST_RTSP_HDR_PROXY_AUTHENTICATE,  /* Proxy-Authenticate */
+  GST_RTSP_HDR_PROXY_REQUIRE,       /* Proxy-Require        R      req.      all */
+  GST_RTSP_HDR_PUBLIC,              /* Public               r      opt.      all */
+  GST_RTSP_HDR_RANGE,               /* Range                Rr     opt.      PLAY, PAUSE, RECORD */
+  GST_RTSP_HDR_REFERER,             /* Referer              R      opt.      all */
+  GST_RTSP_HDR_REQUIRE,             /* Require              R      req.      all */
+  GST_RTSP_HDR_RETRY_AFTER,         /* Retry-After          r      opt.      all */
+  GST_RTSP_HDR_RTP_INFO,            /* RTP-Info             r      req.      PLAY */
+  GST_RTSP_HDR_SCALE,               /* Scale                Rr     opt.      PLAY, RECORD */
+  GST_RTSP_HDR_SESSION,             /* Session              Rr     req.      all but SETUP, OPTIONS */
+  GST_RTSP_HDR_SERVER,              /* Server               r      opt.      all */
+  GST_RTSP_HDR_SPEED,               /* Speed                Rr     opt.      PLAY */
+  GST_RTSP_HDR_TRANSPORT,           /* Transport            Rr     req.      SETUP */
+  GST_RTSP_HDR_UNSUPPORTED,         /* Unsupported          r      req.      all */
+  GST_RTSP_HDR_USER_AGENT,          /* User-Agent           R      opt.      all */
+  GST_RTSP_HDR_VIA,                 /* Via                  g      opt.      all */
+  GST_RTSP_HDR_WWW_AUTHENTICATE,    /* WWW-Authenticate     r      opt.      all */
+
+  /* Real extensions */
+  GST_RTSP_HDR_CLIENT_CHALLENGE,    /* ClientChallenge */
+  GST_RTSP_HDR_REAL_CHALLENGE1,     /* RealChallenge1 */
+  GST_RTSP_HDR_REAL_CHALLENGE2,     /* RealChallenge2 */
+  GST_RTSP_HDR_REAL_CHALLENGE3,     /* RealChallenge3 */
+  GST_RTSP_HDR_SUBSCRIBE,           /* Subscribe */
+  GST_RTSP_HDR_ALERT,               /* Alert */
+  GST_RTSP_HDR_CLIENT_ID,           /* ClientID */
+  GST_RTSP_HDR_COMPANY_ID,          /* CompanyID */
+  GST_RTSP_HDR_GUID,                /* GUID */
+  GST_RTSP_HDR_REGION_DATA,         /* RegionData */
+  GST_RTSP_HDR_MAX_ASM_WIDTH,       /* SupportsMaximumASMBandwidth */
+  GST_RTSP_HDR_LANGUAGE,            /* Language */
+  GST_RTSP_HDR_PLAYER_START_TIME,   /* PlayerStarttime */
+
+  /* Since 0.10.16 */
+  GST_RTSP_HDR_LOCATION,            /* Location */
+
+  /* Since 0.10.23 */
+  GST_RTSP_HDR_ETAG,                /* ETag */
+  GST_RTSP_HDR_IF_MATCH,            /* If-Match */
+
+  /* WM extensions [MS-RTSP] Since 0.10.23 */
+  GST_RTSP_HDR_ACCEPT_CHARSET,      /* Accept-Charset */
+  GST_RTSP_HDR_SUPPORTED,           /* Supported */
+  GST_RTSP_HDR_VARY,                /* Vary */
+  GST_RTSP_HDR_X_ACCELERATE_STREAMING,    /* X-Accelerate-Streaming */
+  GST_RTSP_HDR_X_ACCEPT_AUTHENT,    /* X-Accept-Authentication */
+  GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT,    /* X-Accept-Proxy-Authentication */
+  GST_RTSP_HDR_X_BROADCAST_ID,      /* X-Broadcast-Id */
+  GST_RTSP_HDR_X_BURST_STREAMING,   /* X-Burst-Streaming */
+  GST_RTSP_HDR_X_NOTICE,            /* X-Notice */
+  GST_RTSP_HDR_X_PLAYER_LAG_TIME,   /* X-Player-Lag-Time */
+  GST_RTSP_HDR_X_PLAYLIST,          /* X-Playlist */
+  GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE,  /* X-Playlist-Change-Notice */
+  GST_RTSP_HDR_X_PLAYLIST_GEN_ID,   /* X-Playlist-Gen-Id */
+  GST_RTSP_HDR_X_PLAYLIST_SEEK_ID,  /* X-Playlist-Seek-Id */
+  GST_RTSP_HDR_X_PROXY_CLIENT_AGENT,      /* X-Proxy-Client-Agent */
+  GST_RTSP_HDR_X_PROXY_CLIENT_VERB, /* X-Proxy-Client-Verb */
+  GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE, /* X-Receding-PlaylistChange */
+  GST_RTSP_HDR_X_RTP_INFO,          /* X-RTP-Info */
+  GST_RTSP_HDR_X_STARTUPPROFILE,    /* X-StartupProfile */
+
+  /* Since 0.10.24 */
+  GST_RTSP_HDR_TIMESTAMP,           /* Timestamp */
+
+  /* Since 0.10.25 */
+  GST_RTSP_HDR_AUTHENTICATION_INFO, /* Authentication-Info */
+  GST_RTSP_HDR_HOST,                /* Host */
+  GST_RTSP_HDR_PRAGMA,              /* Pragma */
+  GST_RTSP_HDR_X_SERVER_IP_ADDRESS, /* X-Server-IP-Address */
+  GST_RTSP_HDR_X_SESSIONCOOKIE,     /* X-Sessioncookie */
+
+  /* Since 0.10.36 */
+  GST_RTSP_HDR_RTCP_INTERVAL,       /* RTCP-Interval */
+
+  GST_RTSP_HDR_LAST
+} GstRTSPHeaderField;
+
+/**
+ * GstRTSPStatusCode:
+ *
+ * Enumeration of rtsp status codes.
+ */
+typedef enum {
+  /*< protected >*/
+  GST_RTSP_STS_INVALID                              = 0,
+  GST_RTSP_STS_CONTINUE                             = 100,
+  GST_RTSP_STS_OK                                   = 200,
+  GST_RTSP_STS_CREATED                              = 201,
+  GST_RTSP_STS_LOW_ON_STORAGE                       = 250,
+  GST_RTSP_STS_MULTIPLE_CHOICES                     = 300,
+  GST_RTSP_STS_MOVED_PERMANENTLY                    = 301,
+  GST_RTSP_STS_MOVE_TEMPORARILY                     = 302,
+  GST_RTSP_STS_SEE_OTHER                            = 303,
+  GST_RTSP_STS_NOT_MODIFIED                         = 304,
+  GST_RTSP_STS_USE_PROXY                            = 305,
+  GST_RTSP_STS_BAD_REQUEST                          = 400,
+  GST_RTSP_STS_UNAUTHORIZED                         = 401,
+  GST_RTSP_STS_PAYMENT_REQUIRED                     = 402,
+  GST_RTSP_STS_FORBIDDEN                            = 403,
+  GST_RTSP_STS_NOT_FOUND                            = 404,
+  GST_RTSP_STS_METHOD_NOT_ALLOWED                   = 405,
+  GST_RTSP_STS_NOT_ACCEPTABLE                       = 406,
+  GST_RTSP_STS_PROXY_AUTH_REQUIRED                  = 407,
+  GST_RTSP_STS_REQUEST_TIMEOUT                      = 408,
+  GST_RTSP_STS_GONE                                 = 410,
+  GST_RTSP_STS_LENGTH_REQUIRED                      = 411,
+  GST_RTSP_STS_PRECONDITION_FAILED                  = 412,
+  GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE             = 413,
+  GST_RTSP_STS_REQUEST_URI_TOO_LARGE                = 414,
+  GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE               = 415,
+  GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD             = 451,
+  GST_RTSP_STS_CONFERENCE_NOT_FOUND                 = 452,
+  GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH                 = 453,
+  GST_RTSP_STS_SESSION_NOT_FOUND                    = 454,
+  GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE       = 455,
+  GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE  = 456,
+  GST_RTSP_STS_INVALID_RANGE                        = 457,
+  GST_RTSP_STS_PARAMETER_IS_READONLY                = 458,
+  GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED      = 459,
+  GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED     = 460,
+  GST_RTSP_STS_UNSUPPORTED_TRANSPORT                = 461,
+  GST_RTSP_STS_DESTINATION_UNREACHABLE              = 462,
+  GST_RTSP_STS_INTERNAL_SERVER_ERROR                = 500,
+  GST_RTSP_STS_NOT_IMPLEMENTED                      = 501,
+  GST_RTSP_STS_BAD_GATEWAY                          = 502,
+  GST_RTSP_STS_SERVICE_UNAVAILABLE                  = 503,
+  GST_RTSP_STS_GATEWAY_TIMEOUT                      = 504,
+  GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED           = 505,
+  GST_RTSP_STS_OPTION_NOT_SUPPORTED                 = 551
+} GstRTSPStatusCode;
+
+gchar*             gst_rtsp_strresult          (GstRTSPResult result);
+
+const gchar*       gst_rtsp_method_as_text     (GstRTSPMethod method);
+const gchar*       gst_rtsp_version_as_text    (GstRTSPVersion version);
+const gchar*       gst_rtsp_header_as_text     (GstRTSPHeaderField field);
+const gchar*       gst_rtsp_status_as_text     (GstRTSPStatusCode code);
+
+gchar*             gst_rtsp_options_as_text    (GstRTSPMethod options);
+
+GstRTSPHeaderField gst_rtsp_find_header_field  (const gchar *header);
+GstRTSPMethod      gst_rtsp_find_method        (const gchar *method);
+
+gboolean           gst_rtsp_header_allow_multiple (GstRTSPHeaderField field);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_DEFS_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspextension.c b/gst-libs/gst/rtsp/gstrtspextension.c
new file mode 100644
index 0000000..32d5d8e
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspextension.c
@@ -0,0 +1,224 @@
+/* GStreamer RTSP extension
+ * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstrtspextension.c: RTSP extension mechanism
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstrtspextension
+ * @short_description: Interface for extending RTSP protocols
+ *
+ * <refsect2>
+ * <para>
+ *  This interface is implemented e.g. by the Windows Media Streaming RTSP
+ *  exentension (rtspwms) and the RealMedia RTSP extension (rtspreal).
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2007-07-25 (0.10.14)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstrtsp-marshal.h"
+#include "gstrtsp-enumtypes.h"
+#include "gstrtspextension.h"
+
+static void gst_rtsp_extension_iface_init (GstRTSPExtension * iface);
+
+enum
+{
+  SIGNAL_SEND,
+  LAST_SIGNAL
+};
+
+static guint gst_rtsp_extension_signals[LAST_SIGNAL] = { 0 };
+
+GType
+gst_rtsp_extension_get_type (void)
+{
+  static volatile gsize gst_rtsp_extension_type = 0;
+  static const GTypeInfo gst_rtsp_extension_info = {
+    sizeof (GstRTSPExtensionInterface),
+    (GBaseInitFunc) gst_rtsp_extension_iface_init,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    0,
+    0,
+    NULL,
+  };
+
+  if (g_once_init_enter (&gst_rtsp_extension_type)) {
+    GType tmp = g_type_register_static (G_TYPE_INTERFACE,
+        "GstRTSPExtension", &gst_rtsp_extension_info, 0);
+    g_once_init_leave (&gst_rtsp_extension_type, tmp);
+  }
+  return (GType) gst_rtsp_extension_type;
+}
+
+static void
+gst_rtsp_extension_iface_init (GstRTSPExtension * iface)
+{
+  static gboolean initialized = FALSE;
+
+  if (!initialized) {
+    gst_rtsp_extension_signals[SIGNAL_SEND] =
+        g_signal_new ("send", G_TYPE_FROM_CLASS (iface),
+        G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPExtensionInterface,
+            send), NULL, NULL, __gst_rtsp_marshal_ENUM__POINTER_POINTER,
+        GST_TYPE_RTSP_RESULT, 2, G_TYPE_POINTER, G_TYPE_POINTER);
+    initialized = TRUE;
+  }
+}
+
+gboolean
+gst_rtsp_extension_detect_server (GstRTSPExtension * ext, GstRTSPMessage * resp)
+{
+  GstRTSPExtensionInterface *iface;
+  gboolean res = TRUE;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->detect_server)
+    res = iface->detect_server (ext, resp);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_before_send (GstRTSPExtension * ext, GstRTSPMessage * req)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->before_send)
+    res = iface->before_send (ext, req);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+    GstRTSPMessage * resp)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->after_send)
+    res = iface->after_send (ext, req, resp);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
+    GstStructure * s)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->parse_sdp)
+    res = iface->parse_sdp (ext, sdp, s);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_setup_media (GstRTSPExtension * ext, GstSDPMedia * media)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->setup_media)
+    res = iface->setup_media (ext, media);
+
+  return res;
+}
+
+gboolean
+gst_rtsp_extension_configure_stream (GstRTSPExtension * ext, GstCaps * caps)
+{
+  GstRTSPExtensionInterface *iface;
+  gboolean res = TRUE;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->configure_stream)
+    res = iface->configure_stream (ext, caps);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_get_transports (GstRTSPExtension * ext,
+    GstRTSPLowerTrans protocols, gchar ** transport)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->get_transports)
+    res = iface->get_transports (ext, protocols, transport);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_stream_select (GstRTSPExtension * ext, GstRTSPUrl * url)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_OK;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->stream_select)
+    res = iface->stream_select (ext, url);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_receive_request (GstRTSPExtension * ext,
+    GstRTSPMessage * msg)
+{
+  GstRTSPExtensionInterface *iface;
+  GstRTSPResult res = GST_RTSP_ENOTIMPL;
+
+  iface = GST_RTSP_EXTENSION_GET_IFACE (ext);
+  if (iface->receive_request)
+    res = iface->receive_request (ext, msg);
+
+  return res;
+}
+
+GstRTSPResult
+gst_rtsp_extension_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+    GstRTSPMessage * resp)
+{
+  GstRTSPResult res = GST_RTSP_OK;
+
+  g_signal_emit (ext, gst_rtsp_extension_signals[SIGNAL_SEND], 0,
+      req, resp, &res);
+
+  return res;
+}
diff --git a/gst-libs/gst/rtsp/gstrtspextension.h b/gst-libs/gst/rtsp/gstrtspextension.h
new file mode 100644
index 0000000..e2995f3
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspextension.h
@@ -0,0 +1,97 @@
+/* GStreamer RTSP Extension
+ * Copyright (C) 2007 Wim Taymans <wim@fluendo.com>
+ *
+ * gstrtspextension.h: RTSP Extension interface.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTSP_EXTENSION_H__
+#define __GST_RTSP_EXTENSION_H__
+
+#include <gst/gst.h>
+
+#include <gst/sdp/gstsdpmessage.h>
+#include <gst/rtsp/gstrtsptransport.h>
+#include <gst/rtsp/gstrtspmessage.h>
+#include <gst/rtsp/gstrtspurl.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTSP_EXTENSION \
+  (gst_rtsp_extension_get_type ())
+#define GST_RTSP_EXTENSION(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_EXTENSION, GstRTSPExtension))
+#define GST_IS_RTSP_EXTENSION(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_EXTENSION))
+#define GST_RTSP_EXTENSION_GET_IFACE(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_RTSP_EXTENSION, GstRTSPExtensionInterface))
+
+typedef struct _GstRTSPExtension GstRTSPExtension;
+typedef struct _GstRTSPExtensionInterface GstRTSPExtensionInterface;
+
+struct _GstRTSPExtensionInterface {
+  GTypeInterface parent;
+
+  /* vfunctions */
+  gboolean      (*detect_server)    (GstRTSPExtension *ext, GstRTSPMessage *resp);
+
+  GstRTSPResult (*before_send)      (GstRTSPExtension *ext, GstRTSPMessage *req);
+  GstRTSPResult (*after_send)       (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);
+
+  GstRTSPResult (*parse_sdp)        (GstRTSPExtension *ext, GstSDPMessage *sdp, GstStructure *s);
+  GstRTSPResult (*setup_media)      (GstRTSPExtension *ext, GstSDPMedia *media);
+
+  gboolean      (*configure_stream) (GstRTSPExtension *ext, GstCaps *caps);
+
+  GstRTSPResult (*get_transports)   (GstRTSPExtension *ext, GstRTSPLowerTrans protocols, gchar **transport);
+
+  GstRTSPResult (*stream_select)    (GstRTSPExtension *ext, GstRTSPUrl *url);
+
+  /* signals */
+  GstRTSPResult (*send)             (GstRTSPExtension *ext, GstRTSPMessage *req, GstRTSPMessage *resp);
+
+  /* ABI: more vfunctions added later */
+  GstRTSPResult (*receive_request)  (GstRTSPExtension *ext, GstRTSPMessage *req);
+
+  /*< private >*/
+  gpointer                 _gst_reserved[GST_PADDING - 1];
+};
+
+GType           gst_rtsp_extension_get_type          (void);
+
+/* invoke vfunction on interface */
+gboolean        gst_rtsp_extension_detect_server     (GstRTSPExtension *ext, GstRTSPMessage *resp);
+  
+GstRTSPResult   gst_rtsp_extension_before_send       (GstRTSPExtension *ext, GstRTSPMessage *req);
+GstRTSPResult   gst_rtsp_extension_after_send        (GstRTSPExtension *ext, GstRTSPMessage *req,
+                                                      GstRTSPMessage *resp);
+GstRTSPResult   gst_rtsp_extension_parse_sdp         (GstRTSPExtension *ext, GstSDPMessage *sdp,
+                                                      GstStructure *s);
+GstRTSPResult   gst_rtsp_extension_setup_media       (GstRTSPExtension *ext, GstSDPMedia *media);
+gboolean        gst_rtsp_extension_configure_stream  (GstRTSPExtension *ext, GstCaps *caps);
+GstRTSPResult   gst_rtsp_extension_get_transports    (GstRTSPExtension *ext, GstRTSPLowerTrans protocols,
+                                                      gchar **transport);
+GstRTSPResult   gst_rtsp_extension_stream_select     (GstRTSPExtension *ext, GstRTSPUrl *url);
+GstRTSPResult   gst_rtsp_extension_receive_request   (GstRTSPExtension *ext, GstRTSPMessage *req);
+
+/* signal emision */
+GstRTSPResult   gst_rtsp_extension_send              (GstRTSPExtension *ext, GstRTSPMessage *req,
+                                                      GstRTSPMessage *resp);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_EXTENSION_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspmessage.c b/gst-libs/gst/rtsp/gstrtspmessage.c
new file mode 100644
index 0000000..2b33c61
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspmessage.c
@@ -0,0 +1,842 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *               <2006> Lutz Mueller <lutz at topfrose dot de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtspmessage
+ * @short_description: RTSP messages
+ * @see_also: gstrtspconnection
+ *  
+ * Provides methods for creating and parsing request, response and data messages.
+ *  
+ * Last reviewed on 2007-07-25 (0.10.14)
+ */
+
+#include <string.h>
+
+#include <gst/gstutils.h>
+#include "gstrtspmessage.h"
+
+typedef struct _RTSPKeyValue
+{
+  GstRTSPHeaderField field;
+  gchar *value;
+} RTSPKeyValue;
+
+static void
+key_value_foreach (GArray * array, GFunc func, gpointer user_data)
+{
+  guint i;
+
+  g_return_if_fail (array != NULL);
+
+  for (i = 0; i < array->len; i++) {
+    (*func) (&g_array_index (array, RTSPKeyValue, i), user_data);
+  }
+}
+
+/**
+ * gst_rtsp_message_new:
+ * @msg: a location for the new #GstRTSPMessage
+ *
+ * Create a new initialized #GstRTSPMessage. Free with gst_rtsp_message_free().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_new (GstRTSPMessage ** msg)
+{
+  GstRTSPMessage *newmsg;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  newmsg = g_new0 (GstRTSPMessage, 1);
+
+  *msg = newmsg;
+
+  return gst_rtsp_message_init (newmsg);
+}
+
+/**
+ * gst_rtsp_message_init:
+ * @msg: a #GstRTSPMessage
+ *
+ * Initialize @msg. This function is mostly used when @msg is allocated on the
+ * stack. The reverse operation of this is gst_rtsp_message_unset().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_init (GstRTSPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_message_unset (msg);
+
+  msg->type = GST_RTSP_MESSAGE_INVALID;
+  msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_get_type:
+ * @msg: a #GstRTSPMessage
+ *
+ * Get the message type of @msg.
+ *
+ * Returns: the message type.
+ */
+GstRTSPMsgType
+gst_rtsp_message_get_type (GstRTSPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_MESSAGE_INVALID);
+
+  return msg->type;
+}
+
+/**
+ * gst_rtsp_message_new_request:
+ * @msg: a location for the new #GstRTSPMessage
+ * @method: the request method to use
+ * @uri: the uri of the request
+ *
+ * Create a new #GstRTSPMessage with @method and @uri and store the result
+ * request message in @msg. Free with gst_rtsp_message_free().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_new_request (GstRTSPMessage ** msg, GstRTSPMethod method,
+    const gchar * uri)
+{
+  GstRTSPMessage *newmsg;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (uri != NULL, GST_RTSP_EINVAL);
+
+  newmsg = g_new0 (GstRTSPMessage, 1);
+
+  *msg = newmsg;
+
+  return gst_rtsp_message_init_request (newmsg, method, uri);
+}
+
+/**
+ * gst_rtsp_message_init_request:
+ * @msg: a #GstRTSPMessage
+ * @method: the request method to use
+ * @uri: the uri of the request
+ *
+ * Initialize @msg as a request message with @method and @uri. To clear @msg
+ * again, use gst_rtsp_message_unset().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_init_request (GstRTSPMessage * msg, GstRTSPMethod method,
+    const gchar * uri)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (uri != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_message_unset (msg);
+
+  msg->type = GST_RTSP_MESSAGE_REQUEST;
+  msg->type_data.request.method = method;
+  msg->type_data.request.uri = g_strdup (uri);
+  msg->type_data.request.version = GST_RTSP_VERSION_1_0;
+  msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_parse_request:
+ * @msg: a #GstRTSPMessage
+ * @method: location to hold the method
+ * @uri: location to hold the uri
+ * @version: location to hold the version
+ *
+ * Parse the request message @msg and store the values @method, @uri and
+ * @version. The result locations can be #NULL if one is not interested in its
+ * value.
+ *
+ * @uri remains valid for as long as @msg is valid and unchanged.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_parse_request (GstRTSPMessage * msg,
+    GstRTSPMethod * method, const gchar ** uri, GstRTSPVersion * version)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (msg->type == GST_RTSP_MESSAGE_REQUEST ||
+      msg->type == GST_RTSP_MESSAGE_HTTP_REQUEST, GST_RTSP_EINVAL);
+
+  if (method)
+    *method = msg->type_data.request.method;
+  if (uri)
+    *uri = msg->type_data.request.uri;
+  if (version)
+    *version = msg->type_data.request.version;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_new_response:
+ * @msg: a location for the new #GstRTSPMessage
+ * @code: the status code
+ * @reason: the status reason or #NULL
+ * @request: the request that triggered the response or #NULL
+ *
+ * Create a new response #GstRTSPMessage with @code and @reason and store the
+ * result message in @msg. Free with gst_rtsp_message_free().
+ *
+ * When @reason is #NULL, the default reason for @code will be used.
+ *
+ * When @request is not #NULL, the relevant headers will be copied to the new
+ * response message.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_new_response (GstRTSPMessage ** msg, GstRTSPStatusCode code,
+    const gchar * reason, const GstRTSPMessage * request)
+{
+  GstRTSPMessage *newmsg;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  newmsg = g_new0 (GstRTSPMessage, 1);
+
+  *msg = newmsg;
+
+  return gst_rtsp_message_init_response (newmsg, code, reason, request);
+}
+
+/**
+ * gst_rtsp_message_init_response:
+ * @msg: a #GstRTSPMessage
+ * @code: the status code
+ * @reason: the status reason or #NULL
+ * @request: the request that triggered the response or #NULL
+ *
+ * Initialize @msg with @code and @reason.
+ *
+ * When @reason is #NULL, the default reason for @code will be used.
+ *
+ * When @request is not #NULL, the relevant headers will be copied to the new
+ * response message.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_init_response (GstRTSPMessage * msg, GstRTSPStatusCode code,
+    const gchar * reason, const GstRTSPMessage * request)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_message_unset (msg);
+
+  if (reason == NULL)
+    reason = gst_rtsp_status_as_text (code);
+
+  msg->type = GST_RTSP_MESSAGE_RESPONSE;
+  msg->type_data.response.code = code;
+  msg->type_data.response.reason = g_strdup (reason);
+  msg->type_data.response.version = GST_RTSP_VERSION_1_0;
+  msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
+
+  if (request) {
+    if (request->type == GST_RTSP_MESSAGE_HTTP_REQUEST) {
+      msg->type = GST_RTSP_MESSAGE_HTTP_RESPONSE;
+      if (request->type_data.request.version != GST_RTSP_VERSION_INVALID)
+        msg->type_data.response.version = request->type_data.request.version;
+      else
+        msg->type_data.response.version = GST_RTSP_VERSION_1_1;
+    } else {
+      gchar *header;
+
+      /* copy CSEQ */
+      if (gst_rtsp_message_get_header (request, GST_RTSP_HDR_CSEQ, &header,
+              0) == GST_RTSP_OK) {
+        gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CSEQ, header);
+      }
+
+      /* copy session id */
+      if (gst_rtsp_message_get_header (request, GST_RTSP_HDR_SESSION, &header,
+              0) == GST_RTSP_OK) {
+        char *pos;
+
+        header = g_strdup (header);
+        if ((pos = strchr (header, ';'))) {
+          *pos = '\0';
+        }
+        g_strchomp (header);
+        gst_rtsp_message_take_header (msg, GST_RTSP_HDR_SESSION, header);
+      }
+
+      /* FIXME copy more headers? */
+    }
+  }
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_parse_response:
+ * @msg: a #GstRTSPMessage
+ * @code: location to hold the status code
+ * @reason: location to hold the status reason
+ * @version: location to hold the version
+ *
+ * Parse the response message @msg and store the values @code, @reason and
+ * @version. The result locations can be #NULL if one is not interested in its
+ * value.
+ *
+ * @reason remains valid for as long as @msg is valid and unchanged.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_parse_response (GstRTSPMessage * msg,
+    GstRTSPStatusCode * code, const gchar ** reason, GstRTSPVersion * version)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (msg->type == GST_RTSP_MESSAGE_RESPONSE ||
+      msg->type == GST_RTSP_MESSAGE_HTTP_RESPONSE, GST_RTSP_EINVAL);
+
+  if (code)
+    *code = msg->type_data.response.code;
+  if (reason)
+    *reason = msg->type_data.response.reason;
+  if (version)
+    *version = msg->type_data.response.version;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_new_data:
+ * @msg: a location for the new #GstRTSPMessage
+ * @channel: the channel
+ *
+ * Create a new data #GstRTSPMessage with @channel and store the
+ * result message in @msg. Free with gst_rtsp_message_free().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_new_data (GstRTSPMessage ** msg, guint8 channel)
+{
+  GstRTSPMessage *newmsg;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  newmsg = g_new0 (GstRTSPMessage, 1);
+
+  *msg = newmsg;
+
+  return gst_rtsp_message_init_data (newmsg, channel);
+}
+
+/**
+ * gst_rtsp_message_init_data:
+ * @msg: a #GstRTSPMessage
+ * @channel: a channel
+ *
+ * Initialize a new data #GstRTSPMessage for @channel.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_init_data (GstRTSPMessage * msg, guint8 channel)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_message_unset (msg);
+
+  msg->type = GST_RTSP_MESSAGE_DATA;
+  msg->type_data.data.channel = channel;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_parse_data:
+ * @msg: a #GstRTSPMessage
+ * @channel: location to hold the channel
+ *
+ * Parse the data message @msg and store the channel in @channel.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_parse_data (GstRTSPMessage * msg, guint8 * channel)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (msg->type == GST_RTSP_MESSAGE_DATA, GST_RTSP_EINVAL);
+
+  if (channel)
+    *channel = msg->type_data.data.channel;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_unset:
+ * @msg: a #GstRTSPMessage
+ *
+ * Unset the contents of @msg so that it becomes an uninitialized
+ * #GstRTSPMessage again. This function is mostly used in combination with 
+ * gst_rtsp_message_init_request(), gst_rtsp_message_init_response() and
+ * gst_rtsp_message_init_data() on stack allocated #GstRTSPMessage structures.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_unset (GstRTSPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  switch (msg->type) {
+    case GST_RTSP_MESSAGE_INVALID:
+      break;
+    case GST_RTSP_MESSAGE_REQUEST:
+    case GST_RTSP_MESSAGE_HTTP_REQUEST:
+      g_free (msg->type_data.request.uri);
+      break;
+    case GST_RTSP_MESSAGE_RESPONSE:
+    case GST_RTSP_MESSAGE_HTTP_RESPONSE:
+      g_free (msg->type_data.response.reason);
+      break;
+    case GST_RTSP_MESSAGE_DATA:
+      break;
+    default:
+      g_return_val_if_reached (GST_RTSP_EINVAL);
+  }
+
+  if (msg->hdr_fields != NULL) {
+    guint i;
+
+    for (i = 0; i < msg->hdr_fields->len; i++) {
+      RTSPKeyValue *keyval = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
+
+      g_free (keyval->value);
+    }
+    g_array_free (msg->hdr_fields, TRUE);
+  }
+  g_free (msg->body);
+
+  memset (msg, 0, sizeof (GstRTSPMessage));
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_free:
+ * @msg: a #GstRTSPMessage
+ *
+ * Free the memory used by @msg.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_free (GstRTSPMessage * msg)
+{
+  GstRTSPResult res;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  res = gst_rtsp_message_unset (msg);
+  if (res == GST_RTSP_OK)
+    g_free (msg);
+
+  return res;
+}
+
+/**
+ * gst_rtsp_message_take_header:
+ * @msg: a #GstRTSPMessage
+ * @field: a #GstRTSPHeaderField
+ * @value: the value of the header
+ *
+ * Add a header with key @field and @value to @msg. This function takes
+ * ownership of @value.
+ *
+ * Returns: a #GstRTSPResult.
+ *
+ * Since: 0.10.23
+ */
+GstRTSPResult
+gst_rtsp_message_take_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
+    gchar * value)
+{
+  RTSPKeyValue key_value;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL);
+
+  key_value.field = field;
+  key_value.value = value;
+
+  g_array_append_val (msg->hdr_fields, key_value);
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_add_header:
+ * @msg: a #GstRTSPMessage
+ * @field: a #GstRTSPHeaderField
+ * @value: the value of the header
+ *
+ * Add a header with key @field and @value to @msg. This function takes a copy
+ * of @value.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_add_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
+    const gchar * value)
+{
+  return gst_rtsp_message_take_header (msg, field, g_strdup (value));
+}
+
+/**
+ * gst_rtsp_message_remove_header:
+ * @msg: a #GstRTSPMessage
+ * @field: a #GstRTSPHeaderField
+ * @indx: the index of the header
+ *
+ * Remove the @indx header with key @field from @msg. If @indx equals -1, all
+ * headers will be removed.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_message_remove_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
+    gint indx)
+{
+  GstRTSPResult res = GST_RTSP_ENOTIMPL;
+  guint i = 0;
+  gint cnt = 0;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  while (i < msg->hdr_fields->len) {
+    RTSPKeyValue *key_value = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
+
+    if (key_value->field == field && (indx == -1 || cnt++ == indx)) {
+      g_free (key_value->value);
+      g_array_remove_index (msg->hdr_fields, i);
+      res = GST_RTSP_OK;
+      if (indx != -1)
+        break;
+    } else {
+      i++;
+    }
+  }
+  return res;
+}
+
+/**
+ * gst_rtsp_message_get_header:
+ * @msg: a #GstRTSPMessage
+ * @field: a #GstRTSPHeaderField
+ * @value: pointer to hold the result
+ * @indx: the index of the header
+ *
+ * Get the @indx header value with key @field from @msg. The result in @value
+ * stays valid as long as it remains present in @msg.
+ *
+ * Returns: #GST_RTSP_OK when @field was found, #GST_RTSP_ENOTIMPL if the key
+ * was not found.
+ */
+GstRTSPResult
+gst_rtsp_message_get_header (const GstRTSPMessage * msg,
+    GstRTSPHeaderField field, gchar ** value, gint indx)
+{
+  guint i;
+  gint cnt = 0;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  /* no header initialized, there are no headers */
+  if (msg->hdr_fields == NULL)
+    return GST_RTSP_ENOTIMPL;
+
+  for (i = 0; i < msg->hdr_fields->len; i++) {
+    RTSPKeyValue *key_value = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
+
+    if (key_value->field == field && cnt++ == indx) {
+      if (value)
+        *value = key_value->value;
+      return GST_RTSP_OK;
+    }
+  }
+
+  return GST_RTSP_ENOTIMPL;
+}
+
+/**
+ * gst_rtsp_message_append_headers:
+ * @msg: a #GstRTSPMessage
+ * @str: a string
+ *
+ * Append the currently configured headers in @msg to the #GString @str suitable
+ * for transmission.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_append_headers (const GstRTSPMessage * msg, GString * str)
+{
+  guint i;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (str != NULL, GST_RTSP_EINVAL);
+
+  for (i = 0; i < msg->hdr_fields->len; i++) {
+    RTSPKeyValue *key_value;
+    const gchar *keystr;
+
+    key_value = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
+    keystr = gst_rtsp_header_as_text (key_value->field);
+
+    g_string_append_printf (str, "%s: %s\r\n", keystr, key_value->value);
+  }
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_set_body:
+ * @msg: a #GstRTSPMessage
+ * @data: the data
+ * @size: the size of @data
+ *
+ * Set the body of @msg to a copy of @data.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_set_body (GstRTSPMessage * msg, const guint8 * data,
+    guint size)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  return gst_rtsp_message_take_body (msg, g_memdup (data, size), size);
+}
+
+/**
+ * gst_rtsp_message_take_body:
+ * @msg: a #GstRTSPMessage
+ * @data: the data
+ * @size: the size of @data
+ *
+ * Set the body of @msg to @data and @size. This method takes ownership of
+ * @data.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_take_body (GstRTSPMessage * msg, guint8 * data, guint size)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL || size == 0, GST_RTSP_EINVAL);
+
+  if (msg->body)
+    g_free (msg->body);
+
+  msg->body = data;
+  msg->body_size = size;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_get_body:
+ * @msg: a #GstRTSPMessage
+ * @data: location for the data
+ * @size: location for the size of @data
+ *
+ * Get the body of @msg. @data remains valid for as long as @msg is valid and
+ * unchanged.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_get_body (const GstRTSPMessage * msg, guint8 ** data,
+    guint * size)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (size != NULL, GST_RTSP_EINVAL);
+
+  *data = msg->body;
+  *size = msg->body_size;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_message_steal_body:
+ * @msg: a #GstRTSPMessage
+ * @data: location for the data
+ * @size: location for the size of @data
+ *
+ * Take the body of @msg and store it in @data and @size. After this method,
+ * the body and size of @msg will be set to #NULL and 0 respectively.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_steal_body (GstRTSPMessage * msg, guint8 ** data, guint * size)
+{
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (size != NULL, GST_RTSP_EINVAL);
+
+  *data = msg->body;
+  *size = msg->body_size;
+
+  msg->body = NULL;
+  msg->body_size = 0;
+
+  return GST_RTSP_OK;
+}
+
+static void
+dump_key_value (gpointer data, gpointer user_data G_GNUC_UNUSED)
+{
+  RTSPKeyValue *key_value = (RTSPKeyValue *) data;
+
+  g_print ("   key: '%s', value: '%s'\n",
+      gst_rtsp_header_as_text (key_value->field), key_value->value);
+}
+
+/**
+ * gst_rtsp_message_dump:
+ * @msg: a #GstRTSPMessage
+ *
+ * Dump the contents of @msg to stdout.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_message_dump (GstRTSPMessage * msg)
+{
+  guint8 *data;
+  guint size;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+
+  switch (msg->type) {
+    case GST_RTSP_MESSAGE_REQUEST:
+      g_print ("RTSP request message %p\n", msg);
+      g_print (" request line:\n");
+      g_print ("   method: '%s'\n",
+          gst_rtsp_method_as_text (msg->type_data.request.method));
+      g_print ("   uri:    '%s'\n", msg->type_data.request.uri);
+      g_print ("   version: '%s'\n",
+          gst_rtsp_version_as_text (msg->type_data.request.version));
+      g_print (" headers:\n");
+      key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
+      g_print (" body:\n");
+      gst_rtsp_message_get_body (msg, &data, &size);
+      gst_util_dump_mem (data, size);
+      break;
+    case GST_RTSP_MESSAGE_RESPONSE:
+      g_print ("RTSP response message %p\n", msg);
+      g_print (" status line:\n");
+      g_print ("   code:   '%d'\n", msg->type_data.response.code);
+      g_print ("   reason: '%s'\n", msg->type_data.response.reason);
+      g_print ("   version: '%s'\n",
+          gst_rtsp_version_as_text (msg->type_data.response.version));
+      g_print (" headers:\n");
+      key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
+      gst_rtsp_message_get_body (msg, &data, &size);
+      g_print (" body: length %d\n", size);
+      gst_util_dump_mem (data, size);
+      break;
+    case GST_RTSP_MESSAGE_HTTP_REQUEST:
+      g_print ("HTTP request message %p\n", msg);
+      g_print (" request line:\n");
+      g_print ("   method:  '%s'\n",
+          gst_rtsp_method_as_text (msg->type_data.request.method));
+      g_print ("   uri:     '%s'\n", msg->type_data.request.uri);
+      g_print ("   version: '%s'\n",
+          gst_rtsp_version_as_text (msg->type_data.request.version));
+      g_print (" headers:\n");
+      key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
+      g_print (" body:\n");
+      gst_rtsp_message_get_body (msg, &data, &size);
+      gst_util_dump_mem (data, size);
+      break;
+    case GST_RTSP_MESSAGE_HTTP_RESPONSE:
+      g_print ("HTTP response message %p\n", msg);
+      g_print (" status line:\n");
+      g_print ("   code:    '%d'\n", msg->type_data.response.code);
+      g_print ("   reason:  '%s'\n", msg->type_data.response.reason);
+      g_print ("   version: '%s'\n",
+          gst_rtsp_version_as_text (msg->type_data.response.version));
+      g_print (" headers:\n");
+      key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
+      gst_rtsp_message_get_body (msg, &data, &size);
+      g_print (" body: length %d\n", size);
+      gst_util_dump_mem (data, size);
+      break;
+    case GST_RTSP_MESSAGE_DATA:
+      g_print ("RTSP data message %p\n", msg);
+      g_print (" channel: '%d'\n", msg->type_data.data.channel);
+      g_print (" size:    '%d'\n", msg->body_size);
+      gst_rtsp_message_get_body (msg, &data, &size);
+      gst_util_dump_mem (data, size);
+      break;
+    default:
+      g_print ("unsupported message type %d\n", msg->type);
+      return GST_RTSP_EINVAL;
+  }
+  return GST_RTSP_OK;
+}
diff --git a/gst-libs/gst/rtsp/gstrtspmessage.h b/gst-libs/gst/rtsp/gstrtspmessage.h
new file mode 100644
index 0000000..dda1604
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspmessage.h
@@ -0,0 +1,187 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_MESSAGE_H__
+#define __GST_RTSP_MESSAGE_H__
+
+#include <glib.h>
+
+#include <gst/rtsp/gstrtspdefs.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstRTSPMsgType:
+ * @GST_RTSP_MESSAGE_INVALID: invalid message type
+ * @GST_RTSP_MESSAGE_REQUEST: RTSP request message
+ * @GST_RTSP_MESSAGE_RESPONSE: RTSP response message
+ * @GST_RTSP_MESSAGE_HTTP_REQUEST: HTTP request message. Since 0.10.25
+ * @GST_RTSP_MESSAGE_HTTP_RESPONSE: HTTP response message. Since 0.10.25
+ * @GST_RTSP_MESSAGE_DATA: data message
+ *
+ * The type of a message.
+ */
+typedef enum
+{
+  GST_RTSP_MESSAGE_INVALID,
+  GST_RTSP_MESSAGE_REQUEST,
+  GST_RTSP_MESSAGE_RESPONSE,
+  GST_RTSP_MESSAGE_HTTP_REQUEST,
+  GST_RTSP_MESSAGE_HTTP_RESPONSE,
+  GST_RTSP_MESSAGE_DATA
+} GstRTSPMsgType;
+
+typedef struct _GstRTSPMessage GstRTSPMessage;
+
+/**
+ * GstRTSPMessage:
+ * @type: the message type
+ *
+ * An RTSP message containing request, response or data messages. Depending on
+ * the @type, the appropriate structure may be accessed.
+ */
+struct _GstRTSPMessage
+{
+  GstRTSPMsgType    type;
+
+  union {
+    struct {
+      GstRTSPMethod      method;
+      gchar             *uri;
+      GstRTSPVersion     version;
+    } request;
+    struct {
+      GstRTSPStatusCode  code;
+      gchar             *reason;
+      GstRTSPVersion     version;
+    } response;
+    struct {
+      guint8             channel;
+    } data;
+  } type_data;
+
+  /*< private >*/
+  GArray        *hdr_fields;
+
+  guint8        *body;
+  guint          body_size;
+};
+
+/* memory management */
+GstRTSPResult      gst_rtsp_message_new             (GstRTSPMessage **msg);
+GstRTSPResult      gst_rtsp_message_init            (GstRTSPMessage *msg);
+GstRTSPResult      gst_rtsp_message_unset           (GstRTSPMessage *msg);
+GstRTSPResult      gst_rtsp_message_free            (GstRTSPMessage *msg);
+
+GstRTSPMsgType     gst_rtsp_message_get_type        (GstRTSPMessage *msg);
+
+/* request */
+GstRTSPResult      gst_rtsp_message_new_request     (GstRTSPMessage **msg,
+                                                     GstRTSPMethod method,
+                                                     const gchar *uri);
+GstRTSPResult      gst_rtsp_message_init_request    (GstRTSPMessage *msg,
+                                                     GstRTSPMethod method,
+                                                     const gchar *uri);
+GstRTSPResult      gst_rtsp_message_parse_request   (GstRTSPMessage *msg,
+                                                     GstRTSPMethod *method,
+                                                     const gchar **uri,
+						     GstRTSPVersion *version);
+
+/* response */
+GstRTSPResult      gst_rtsp_message_new_response    (GstRTSPMessage **msg,
+                                                     GstRTSPStatusCode code,
+                                                     const gchar *reason,
+                                                     const GstRTSPMessage *request);
+GstRTSPResult      gst_rtsp_message_init_response   (GstRTSPMessage *msg,
+                                                     GstRTSPStatusCode code,
+                                                     const gchar *reason,
+                                                     const GstRTSPMessage *request);
+GstRTSPResult      gst_rtsp_message_parse_response  (GstRTSPMessage *msg,
+                                                     GstRTSPStatusCode *code,
+                                                     const gchar **reason,
+                                                     GstRTSPVersion *version);
+
+/* data */
+GstRTSPResult      gst_rtsp_message_new_data        (GstRTSPMessage **msg,
+                                                     guint8 channel);
+GstRTSPResult      gst_rtsp_message_init_data       (GstRTSPMessage *msg,
+                                                     guint8 channel);
+GstRTSPResult      gst_rtsp_message_parse_data      (GstRTSPMessage *msg,
+                                                     guint8 *channel);
+
+/* headers */
+GstRTSPResult      gst_rtsp_message_add_header      (GstRTSPMessage *msg,
+                                                     GstRTSPHeaderField field,
+                                                     const gchar *value);
+GstRTSPResult      gst_rtsp_message_take_header     (GstRTSPMessage *msg,
+                                                     GstRTSPHeaderField field,
+                                                     gchar *value);
+GstRTSPResult      gst_rtsp_message_remove_header   (GstRTSPMessage *msg,
+                                                     GstRTSPHeaderField field,
+                                                     gint indx);
+GstRTSPResult      gst_rtsp_message_get_header      (const GstRTSPMessage *msg,
+                                                     GstRTSPHeaderField field,
+                                                     gchar **value,
+                                                     gint indx);
+GstRTSPResult      gst_rtsp_message_append_headers  (const GstRTSPMessage *msg,
+                                                     GString *str);
+
+/* handling the body */
+GstRTSPResult      gst_rtsp_message_set_body        (GstRTSPMessage *msg,
+                                                     const guint8 *data,
+                                                     guint size);
+GstRTSPResult      gst_rtsp_message_take_body       (GstRTSPMessage *msg,
+                                                     guint8 *data,
+                                                     guint size);
+GstRTSPResult      gst_rtsp_message_get_body        (const GstRTSPMessage *msg,
+                                                     guint8 **data,
+                                                     guint *size);
+GstRTSPResult      gst_rtsp_message_steal_body      (GstRTSPMessage *msg,
+                                                     guint8 **data,
+                                                     guint *size);
+
+/* debug */
+GstRTSPResult      gst_rtsp_message_dump            (GstRTSPMessage *msg);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_MESSAGE_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtsprange.c b/gst-libs/gst/rtsp/gstrtsprange.c
new file mode 100644
index 0000000..0ad75c8
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsprange.c
@@ -0,0 +1,272 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtsprange
+ * @short_description: dealing with time ranges
+ *  
+ * Provides helper functions to deal with time ranges.
+ *  
+ * Last reviewed on 2007-07-25 (0.10.14)
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+
+#include "gstrtsprange.h"
+
+/* npt-time     =   "now" | npt-sec | npt-hhmmss
+ * npt-sec      =   1*DIGIT [ "." *DIGIT ]
+ * npt-hhmmss   =   npt-hh ":" npt-mm ":" npt-ss [ "." *DIGIT ]
+ * npt-hh       =   1*DIGIT     ; any positive number
+ * npt-mm       =   1*2DIGIT    ; 0-59
+ * npt-ss       =   1*2DIGIT    ; 0-59
+ */
+static GstRTSPResult
+parse_npt_time (const gchar * str, GstRTSPTime * time)
+{
+  if (strncmp (str, "now", 3) == 0) {
+    time->type = GST_RTSP_TIME_NOW;
+  } else if (str[0] == '\0') {
+    time->type = GST_RTSP_TIME_END;
+  } else if (strstr (str, ":")) {
+    gfloat seconds;
+    gint hours, mins;
+
+    sscanf (str, "%2d:%2d:%f", &hours, &mins, &seconds);
+
+    time->type = GST_RTSP_TIME_SECONDS;
+    time->seconds = ((hours * 60) + mins) * 60 + seconds;
+  } else {
+    gfloat seconds;
+
+    sscanf (str, "%f", &seconds);
+
+    time->type = GST_RTSP_TIME_SECONDS;
+    time->seconds = seconds;
+  }
+  return GST_RTSP_OK;
+}
+
+/* npt-range    =   ( npt-time "-" [ npt-time ] ) | ( "-" npt-time )
+ */
+static GstRTSPResult
+parse_npt_range (const gchar * str, GstRTSPTimeRange * range)
+{
+  GstRTSPResult res;
+  gchar *p;
+
+  range->unit = GST_RTSP_RANGE_NPT;
+
+  /* find '-' separator */
+  p = strstr (str, "-");
+  if (p == NULL)
+    return GST_RTSP_EINVAL;
+
+  if ((res = parse_npt_time (str, &range->min)) != GST_RTSP_OK)
+    goto done;
+
+  res = parse_npt_time (p + 1, &range->max);
+
+done:
+  return res;
+}
+
+static GstRTSPResult
+parse_clock_range (const gchar * str, GstRTSPTimeRange * range)
+{
+  return GST_RTSP_ENOTIMPL;
+}
+
+static GstRTSPResult
+parse_smpte_range (const gchar * str, GstRTSPTimeRange * range)
+{
+  return GST_RTSP_ENOTIMPL;
+}
+
+/**
+ * gst_rtsp_range_parse:
+ * @rangestr: a range string to parse
+ * @range: location to hold the #GstRTSPTimeRange result
+ *
+ * Parse @rangestr to a #GstRTSPTimeRange.
+ *
+ * Returns: #GST_RTSP_OK on success.
+ */
+GstRTSPResult
+gst_rtsp_range_parse (const gchar * rangestr, GstRTSPTimeRange ** range)
+{
+  GstRTSPResult ret;
+  GstRTSPTimeRange *res;
+  gchar *p;
+
+  g_return_val_if_fail (rangestr != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (range != NULL, GST_RTSP_EINVAL);
+
+  res = g_new0 (GstRTSPTimeRange, 1);
+
+  p = (gchar *) rangestr;
+  /* first figure out the units of the range */
+  if (g_str_has_prefix (p, "npt=")) {
+    ret = parse_npt_range (p + 4, res);
+  } else if (g_str_has_prefix (p, "clock=")) {
+    ret = parse_clock_range (p + 6, res);
+  } else if (g_str_has_prefix (p, "smpte=")) {
+    res->unit = GST_RTSP_RANGE_SMPTE;
+    ret = parse_smpte_range (p + 6, res);
+  } else if (g_str_has_prefix (p, "smpte-30-drop=")) {
+    res->unit = GST_RTSP_RANGE_SMPTE_30_DROP;
+    ret = parse_smpte_range (p + 14, res);
+  } else if (g_str_has_prefix (p, "smpte-25=")) {
+    res->unit = GST_RTSP_RANGE_SMPTE_25;
+    ret = parse_smpte_range (p + 9, res);
+  } else
+    goto invalid;
+
+  if (ret != GST_RTSP_OK)
+    goto invalid;
+
+  *range = res;
+  return ret;
+
+  /* ERRORS */
+invalid:
+  {
+    gst_rtsp_range_free (res);
+    return GST_RTSP_EINVAL;
+  }
+}
+
+static gboolean
+npt_time_string (const GstRTSPTime * time, GString * string)
+{
+  gboolean res = TRUE;;
+
+  switch (time->type) {
+    case GST_RTSP_TIME_SECONDS:
+      g_string_append_printf (string, "%f", time->seconds);
+      break;
+    case GST_RTSP_TIME_NOW:
+      g_string_append (string, "now");
+      break;
+    case GST_RTSP_TIME_END:
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+  return res;
+}
+
+static gboolean
+npt_range_string (const GstRTSPTimeRange * range, GString * string)
+{
+  gboolean res;
+
+  if (!(res = npt_time_string (&range->min, string)))
+    goto done;
+
+  g_string_append (string, "-");
+
+  if (!(res = npt_time_string (&range->max, string)))
+    goto done;
+
+done:
+  return res;
+}
+
+/**
+ * gst_rtsp_range_to_string:
+ * @range: a #GstRTSPTimeRange
+ *
+ * Convert @range into a string representation.
+ *
+ * Returns: The string representation of @range. g_free() after usage.
+ *
+ * Since: 0.10.23
+ */
+gchar *
+gst_rtsp_range_to_string (const GstRTSPTimeRange * range)
+{
+  gchar *result = NULL;
+  GString *string;
+
+  g_return_val_if_fail (range != NULL, NULL);
+
+  string = g_string_new ("");
+
+  switch (range->unit) {
+    case GST_RTSP_RANGE_NPT:
+      g_string_append (string, "npt=");
+      if (!npt_range_string (range, string)) {
+        g_string_free (string, TRUE);
+        string = NULL;
+      }
+      break;
+    case GST_RTSP_RANGE_SMPTE:
+    case GST_RTSP_RANGE_SMPTE_30_DROP:
+    case GST_RTSP_RANGE_SMPTE_25:
+    case GST_RTSP_RANGE_CLOCK:
+    default:
+      g_warning ("time range unit not yet implemented");
+      g_string_free (string, TRUE);
+      string = NULL;
+      break;
+  }
+  if (string)
+    result = g_string_free (string, FALSE);
+
+  return result;
+}
+
+/**
+ * gst_rtsp_range_free:
+ * @range: a #GstRTSPTimeRange
+ *
+ * Free the memory alocated by @range.
+ */
+void
+gst_rtsp_range_free (GstRTSPTimeRange * range)
+{
+  g_free (range);
+}
diff --git a/gst-libs/gst/rtsp/gstrtsprange.h b/gst-libs/gst/rtsp/gstrtsprange.h
new file mode 100644
index 0000000..9d2c062
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsprange.h
@@ -0,0 +1,121 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_RANGE_H__
+#define __GST_RTSP_RANGE_H__
+
+#include <glib.h>
+
+#include <gst/rtsp/gstrtspdefs.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstRTSPRangeUnit:
+ * @GST_RTSP_RANGE_SMPTE: SMPTE timecode
+ * @GST_RTSP_RANGE_SMPTE_30_DROP: 29.97 frames per second
+ * @GST_RTSP_RANGE_SMPTE_25: 25 frames per second
+ * @GST_RTSP_RANGE_NPT: Normal play time 
+ * @GST_RTSP_RANGE_CLOCK: Absolute time expressed as ISO 8601 timestamps
+ *
+ * Different possible time range units.
+ */
+typedef enum
+{
+  GST_RTSP_RANGE_SMPTE,
+  GST_RTSP_RANGE_SMPTE_30_DROP,
+  GST_RTSP_RANGE_SMPTE_25,
+  GST_RTSP_RANGE_NPT,
+  GST_RTSP_RANGE_CLOCK
+} GstRTSPRangeUnit;
+
+typedef struct _GstRTSPTimeRange GstRTSPTimeRange;
+typedef struct _GstRTSPTime GstRTSPTime;
+
+/**
+ * GstRTSPTimeType:
+ * @GST_RTSP_TIME_SECONDS: seconds
+ * @GST_RTSP_TIME_NOW: now
+ * @GST_RTSP_TIME_END: end
+ *
+ * Possible time types.
+ */
+typedef enum {
+  GST_RTSP_TIME_SECONDS,
+  GST_RTSP_TIME_NOW,
+  GST_RTSP_TIME_END
+} GstRTSPTimeType;
+
+/**
+ * GstRTSPTime:
+ * @type: the time of the time
+ * @seconds: seconds when @type is GST_RTSP_TIME_SECONDS 
+ *
+ * A time indication.
+ */
+struct _GstRTSPTime {
+  GstRTSPTimeType type;
+  gdouble         seconds;
+};
+
+/**
+ * GstRTSPTimeRange:
+ * @unit: the time units used
+ * @min: the minimum interval
+ * @max: the maximum interval
+ *
+ * A time range.
+ */
+struct _GstRTSPTimeRange {
+  GstRTSPRangeUnit unit;
+
+  GstRTSPTime min;
+  GstRTSPTime max;
+};
+
+GstRTSPResult   gst_rtsp_range_parse        (const gchar *rangestr, GstRTSPTimeRange **range);
+gchar *         gst_rtsp_range_to_string    (const GstRTSPTimeRange *range);
+void            gst_rtsp_range_free         (GstRTSPTimeRange *range);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_RANGE_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.c b/gst-libs/gst/rtsp/gstrtsptransport.c
new file mode 100644
index 0000000..ab834a5
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsptransport.c
@@ -0,0 +1,716 @@
+/* GStreamer
+ * Copyright (C) <2005,2006,2007> Wim Taymans <wim@fluendo.com>
+ *               <2007> Peter Kjellerstedt  <pkj at axis com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtsptransport
+ * @short_description: dealing with RTSP transports
+ *  
+ * Provides helper functions to deal with RTSP transport strings.
+ *  
+ * Last reviewed on 2007-07-25 (0.10.14)
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "gstrtsptransport.h"
+
+#define MAX_MANAGERS	2
+
+typedef enum
+{
+  RTSP_TRANSPORT_DELIVERY = 1 << 0,     /* multicast | unicast */
+  RTSP_TRANSPORT_DESTINATION = 1 << 1,
+  RTSP_TRANSPORT_SOURCE = 1 << 2,
+  RTSP_TRANSPORT_INTERLEAVED = 1 << 3,
+  RTSP_TRANSPORT_APPEND = 1 << 4,
+  RTSP_TRANSPORT_TTL = 1 << 5,
+  RTSP_TRANSPORT_LAYERS = 1 << 6,
+  RTSP_TRANSPORT_PORT = 1 << 7,
+  RTSP_TRANSPORT_CLIENT_PORT = 1 << 8,
+  RTSP_TRANSPORT_SERVER_PORT = 1 << 9,
+  RTSP_TRANSPORT_SSRC = 1 << 10,
+  RTSP_TRANSPORT_MODE = 1 << 11,
+} RTSPTransportParameter;
+
+typedef struct
+{
+  const gchar *name;
+  const GstRTSPTransMode mode;
+  const gchar *gst_mime;
+  const gchar *manager[MAX_MANAGERS];
+} GstRTSPTransMap;
+
+static const GstRTSPTransMap transports[] = {
+  {"rtp", GST_RTSP_TRANS_RTP, "application/x-rtp", {"gstrtpbin", "rtpdec"}},
+  {"x-real-rdt", GST_RTSP_TRANS_RDT, "application/x-rdt", {"rdtmanager", NULL}},
+  {"x-pn-tng", GST_RTSP_TRANS_RDT, "application/x-rdt", {"rdtmanager", NULL}},
+  {NULL, GST_RTSP_TRANS_UNKNOWN, NULL, {NULL, NULL}}
+};
+
+typedef struct
+{
+  const gchar *name;
+  const GstRTSPProfile profile;
+} RTSPProfileMap;
+
+static const RTSPProfileMap profiles[] = {
+  {"avp", GST_RTSP_PROFILE_AVP},
+  {"savp", GST_RTSP_PROFILE_SAVP},
+  {NULL, GST_RTSP_PROFILE_UNKNOWN}
+};
+
+typedef struct
+{
+  const gchar *name;
+  const GstRTSPLowerTrans ltrans;
+} RTSPLTransMap;
+
+static const RTSPLTransMap ltrans[] = {
+  {"udp", GST_RTSP_LOWER_TRANS_UDP},
+  {"mcast", GST_RTSP_LOWER_TRANS_UDP_MCAST},
+  {"tcp", GST_RTSP_LOWER_TRANS_TCP},
+  {NULL, GST_RTSP_LOWER_TRANS_UNKNOWN}
+};
+
+
+GType
+gst_rtsp_lower_trans_get_type (void)
+{
+  static volatile gsize rtsp_lower_trans_type = 0;
+  static const GFlagsValue rtsp_lower_trans[] = {
+    {GST_RTSP_LOWER_TRANS_UDP, "GST_RTSP_LOWER_TRANS_UDP", "udp-unicast"},
+    {GST_RTSP_LOWER_TRANS_UDP_MCAST, "GST_RTSP_LOWER_TRANS_UDP_MCAST",
+        "udp-multicast"},
+    {GST_RTSP_LOWER_TRANS_TCP, "GST_RTSP_LOWER_TRANS_TCP", "tcp"},
+    {GST_RTSP_LOWER_TRANS_HTTP, "GST_RTSP_LOWER_TRANS_HTTP", "http"},
+    {0, NULL, NULL},
+  };
+
+  if (g_once_init_enter (&rtsp_lower_trans_type)) {
+    GType tmp = g_flags_register_static ("GstRTSPLowerTrans", rtsp_lower_trans);
+    g_once_init_leave (&rtsp_lower_trans_type, tmp);
+  }
+
+  return (GType) rtsp_lower_trans_type;
+}
+
+#define RTSP_TRANSPORT_PARAMETER_IS_UNIQUE(param) \
+G_STMT_START {                                    \
+  if ((transport_params & (param)) != 0)          \
+    goto invalid_transport;                       \
+  transport_params |= (param);                    \
+} G_STMT_END
+
+/**
+ * gst_rtsp_transport_new:
+ * @transport: location to hold the new #GstRTSPTransport
+ *
+ * Allocate a new initialized #GstRTSPTransport. Use gst_rtsp_transport_free()
+ * after usage.
+ *
+ * Returns: a #GstRTSPResult. 
+ */
+GstRTSPResult
+gst_rtsp_transport_new (GstRTSPTransport ** transport)
+{
+  GstRTSPTransport *trans;
+
+  g_return_val_if_fail (transport != NULL, GST_RTSP_EINVAL);
+
+  trans = g_new0 (GstRTSPTransport, 1);
+
+  *transport = trans;
+
+  return gst_rtsp_transport_init (trans);
+}
+
+/**
+ * gst_rtsp_transport_init:
+ * @transport: a #GstRTSPTransport
+ *
+ * Initialize @transport so that it can be used.
+ *
+ * Returns: #GST_RTSP_OK. 
+ */
+GstRTSPResult
+gst_rtsp_transport_init (GstRTSPTransport * transport)
+{
+  g_return_val_if_fail (transport != NULL, GST_RTSP_EINVAL);
+
+  g_free (transport->destination);
+  g_free (transport->source);
+
+  memset (transport, 0, sizeof (GstRTSPTransport));
+
+  transport->trans = GST_RTSP_TRANS_RTP;
+  transport->profile = GST_RTSP_PROFILE_AVP;
+  transport->lower_transport = GST_RTSP_LOWER_TRANS_UDP_MCAST;
+  transport->mode_play = TRUE;
+  transport->mode_record = FALSE;
+  transport->interleaved.min = -1;
+  transport->interleaved.max = -1;
+  transport->port.min = -1;
+  transport->port.max = -1;
+  transport->client_port.min = -1;
+  transport->client_port.max = -1;
+  transport->server_port.min = -1;
+  transport->server_port.max = -1;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_transport_get_mime:
+ * @trans: a #GstRTSPTransMode
+ * @mime: location to hold the result
+ *
+ * Get the mime type of the transport mode @trans. This mime type is typically
+ * used to generate #GstCaps on buffers.
+ *
+ * Returns: #GST_RTSP_OK. 
+ */
+GstRTSPResult
+gst_rtsp_transport_get_mime (GstRTSPTransMode trans, const gchar ** mime)
+{
+  gint i;
+
+  g_return_val_if_fail (mime != NULL, GST_RTSP_EINVAL);
+
+  for (i = 0; transports[i].name; i++)
+    if (transports[i].mode == trans)
+      break;
+  *mime = transports[i].gst_mime;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_transport_get_manager:
+ * @trans: a #GstRTSPTransMode
+ * @manager: location to hold the result
+ * @option: option index.
+ *
+ * Get the #GstElement that can handle the buffers transported over @trans.
+ *
+ * It is possible that there are several managers available, use @option to
+ * selected one.
+ *
+ * @manager will contain an element name or #NULL when no manager is
+ * needed/available for @trans.
+ *
+ * Returns: #GST_RTSP_OK. 
+ */
+GstRTSPResult
+gst_rtsp_transport_get_manager (GstRTSPTransMode trans, const gchar ** manager,
+    guint option)
+{
+  gint i;
+
+  g_return_val_if_fail (manager != NULL, GST_RTSP_EINVAL);
+
+  for (i = 0; transports[i].name; i++)
+    if (transports[i].mode == trans)
+      break;
+
+  if (option < MAX_MANAGERS)
+    *manager = transports[i].manager[option];
+  else
+    *manager = NULL;
+
+  return GST_RTSP_OK;
+}
+
+static void
+parse_mode (GstRTSPTransport * transport, const gchar * str)
+{
+  transport->mode_play = (strstr (str, "play") != NULL);
+  transport->mode_record = (strstr (str, "record") != NULL);
+}
+
+static gboolean
+check_range (const gchar * str, gchar ** tmp, gint * range)
+{
+  glong range_val;
+
+  range_val = strtol (str, tmp, 10);
+  if (range_val >= G_MININT && range_val <= G_MAXINT) {
+    *range = range_val;
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+static gboolean
+parse_range (const gchar * str, GstRTSPRange * range)
+{
+  gchar *minus;
+  gchar *tmp;
+
+  /* even though strtol() allows white space, plus and minus in front of
+   * the number, we do not allow it
+   */
+  if (g_ascii_isspace (*str) || *str == '+' || *str == '-')
+    goto invalid_range;
+
+  minus = strstr (str, "-");
+  if (minus) {
+    if (g_ascii_isspace (minus[1]) || minus[1] == '+' || minus[1] == '-')
+      goto invalid_range;
+
+    if (!check_range (str, &tmp, &range->min) || str == tmp || tmp != minus)
+      goto invalid_range;
+
+    if (!check_range (minus + 1, &tmp, &range->max) || (*tmp && *tmp != ';'))
+      goto invalid_range;
+  } else {
+    if (!check_range (str, &tmp, &range->min) || str == tmp ||
+        (*tmp && *tmp != ';'))
+      goto invalid_range;
+
+    range->max = -1;
+  }
+
+  return TRUE;
+
+invalid_range:
+  {
+    range->min = -1;
+    range->max = -1;
+    return FALSE;
+  }
+}
+
+static gchar *
+range_as_text (const GstRTSPRange * range)
+{
+  if (range->min < 0)
+    return NULL;
+  else if (range->max < 0)
+    return g_strdup_printf ("%d", range->min);
+  else
+    return g_strdup_printf ("%d-%d", range->min, range->max);
+}
+
+static const gchar *
+rtsp_transport_mode_as_text (const GstRTSPTransport * transport)
+{
+  gint i;
+
+  for (i = 0; transports[i].name; i++)
+    if (transports[i].mode == transport->trans)
+      return transports[i].name;
+
+  return NULL;
+}
+
+static const gchar *
+rtsp_transport_profile_as_text (const GstRTSPTransport * transport)
+{
+  gint i;
+
+  for (i = 0; profiles[i].name; i++)
+    if (profiles[i].profile == transport->profile)
+      return profiles[i].name;
+
+  return NULL;
+}
+
+static const gchar *
+rtsp_transport_ltrans_as_text (const GstRTSPTransport * transport)
+{
+  gint i;
+
+  /* need to special case GST_RTSP_LOWER_TRANS_UDP_MCAST */
+  if (transport->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST)
+    return "udp";
+
+  for (i = 0; ltrans[i].name; i++)
+    if (ltrans[i].ltrans == transport->lower_transport)
+      return ltrans[i].name;
+
+  return NULL;
+}
+
+#define IS_VALID_PORT_RANGE(range) \
+    (range.min >= 0 && range.min < 65536 && range.max < 65536)
+
+#define IS_VALID_INTERLEAVE_RANGE(range) \
+    (range.min >= 0 && range.min < 256 && range.max < 256)
+
+/**
+ * gst_rtsp_transport_parse:
+ * @str: a transport string
+ * @transport: a #GstRTSPTransport
+ *
+ * Parse the RTSP transport string @str into @transport.
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_transport_parse (const gchar * str, GstRTSPTransport * transport)
+{
+  gchar **split, *down, **transp = NULL;
+  guint transport_params = 0;
+  gint i, count;
+
+  g_return_val_if_fail (transport != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (str != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_transport_init (transport);
+
+  /* case insensitive */
+  down = g_ascii_strdown (str, -1);
+
+  split = g_strsplit (down, ";", 0);
+  g_free (down);
+
+  /* First field contains the transport/profile/lower_transport */
+  if (split[0] == NULL)
+    goto invalid_transport;
+
+  transp = g_strsplit (split[0], "/", 0);
+
+  if (transp[0] == NULL || transp[1] == NULL)
+    goto invalid_transport;
+
+  for (i = 0; transports[i].name; i++)
+    if (strcmp (transp[0], transports[i].name) == 0)
+      break;
+  transport->trans = transports[i].mode;
+
+  if (transport->trans != GST_RTSP_TRANS_RDT) {
+    for (i = 0; profiles[i].name; i++)
+      if (strcmp (transp[1], profiles[i].name) == 0)
+        break;
+    transport->profile = profiles[i].profile;
+    count = 2;
+  } else {
+    /* RDT has transport/lower_transport */
+    transport->profile = GST_RTSP_PROFILE_AVP;
+    count = 1;
+  }
+
+  if (transp[count] != NULL) {
+    for (i = 0; ltrans[i].name; i++)
+      if (strcmp (transp[count], ltrans[i].name) == 0)
+        break;
+    transport->lower_transport = ltrans[i].ltrans;
+  } else {
+    /* specifying the lower transport is optional */
+    if (transport->trans == GST_RTSP_TRANS_RTP &&
+        transport->profile == GST_RTSP_PROFILE_AVP)
+      transport->lower_transport = GST_RTSP_LOWER_TRANS_UDP_MCAST;
+    else
+      transport->lower_transport = GST_RTSP_LOWER_TRANS_UNKNOWN;
+  }
+
+  g_strfreev (transp);
+  transp = NULL;
+
+  if (transport->trans == GST_RTSP_TRANS_UNKNOWN ||
+      transport->profile == GST_RTSP_PROFILE_UNKNOWN ||
+      transport->lower_transport == GST_RTSP_LOWER_TRANS_UNKNOWN)
+    goto unsupported_transport;
+
+  i = 1;
+  while (split[i]) {
+    if (strcmp (split[i], "multicast") == 0) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_DELIVERY);
+      if (transport->lower_transport == GST_RTSP_LOWER_TRANS_TCP)
+        goto invalid_transport;
+      transport->lower_transport = GST_RTSP_LOWER_TRANS_UDP_MCAST;
+    } else if (strcmp (split[i], "unicast") == 0) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_DELIVERY);
+      if (transport->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST)
+        transport->lower_transport = GST_RTSP_LOWER_TRANS_UDP;
+    } else if (g_str_has_prefix (split[i], "destination=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_DESTINATION);
+      transport->destination = g_strdup (split[i] + 12);
+    } else if (g_str_has_prefix (split[i], "source=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_SOURCE);
+      transport->source = g_strdup (split[i] + 7);
+    } else if (g_str_has_prefix (split[i], "layers=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_LAYERS);
+      transport->layers = strtoul (split[i] + 7, NULL, 10);
+    } else if (g_str_has_prefix (split[i], "mode=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_MODE);
+      parse_mode (transport, split[i] + 5);
+      if (!transport->mode_play && !transport->mode_record)
+        goto invalid_transport;
+    } else if (strcmp (split[i], "append") == 0) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_APPEND);
+      transport->append = TRUE;
+    } else if (g_str_has_prefix (split[i], "interleaved=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_INTERLEAVED);
+      parse_range (split[i] + 12, &transport->interleaved);
+      if (!IS_VALID_INTERLEAVE_RANGE (transport->interleaved))
+        goto invalid_transport;
+    } else if (g_str_has_prefix (split[i], "ttl=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_TTL);
+      transport->ttl = strtoul (split[i] + 4, NULL, 10);
+      if (transport->ttl >= 256)
+        goto invalid_transport;
+    } else if (g_str_has_prefix (split[i], "port=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_PORT);
+      if (parse_range (split[i] + 5, &transport->port)) {
+        if (!IS_VALID_PORT_RANGE (transport->port))
+          goto invalid_transport;
+      }
+    } else if (g_str_has_prefix (split[i], "client_port=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_CLIENT_PORT);
+      if (parse_range (split[i] + 12, &transport->client_port)) {
+        if (!IS_VALID_PORT_RANGE (transport->client_port))
+          goto invalid_transport;
+      }
+    } else if (g_str_has_prefix (split[i], "server_port=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_SERVER_PORT);
+      if (parse_range (split[i] + 12, &transport->server_port)) {
+        if (!IS_VALID_PORT_RANGE (transport->server_port))
+          goto invalid_transport;
+      }
+    } else if (g_str_has_prefix (split[i], "ssrc=")) {
+      RTSP_TRANSPORT_PARAMETER_IS_UNIQUE (RTSP_TRANSPORT_SSRC);
+      transport->ssrc = strtoul (split[i] + 5, NULL, 16);
+    } else {
+      /* unknown field... */
+      g_warning ("unknown transport field \"%s\"", split[i]);
+    }
+    i++;
+  }
+  g_strfreev (split);
+
+  return GST_RTSP_OK;
+
+unsupported_transport:
+  {
+    g_strfreev (split);
+    return GST_RTSP_ERROR;
+  }
+invalid_transport:
+  {
+    g_strfreev (transp);
+    g_strfreev (split);
+    return GST_RTSP_EINVAL;
+  }
+}
+
+/**
+ * gst_rtsp_transport_as_text:
+ * @transport: a #GstRTSPTransport
+ *
+ * Convert @transport into a string that can be used to signal the transport in
+ * an RTSP SETUP response.
+ *
+ * Returns: a string describing the RTSP transport or #NULL when the transport
+ * is invalid.
+ */
+gchar *
+gst_rtsp_transport_as_text (GstRTSPTransport * transport)
+{
+  GPtrArray *strs;
+  gchar *res;
+  const gchar *tmp;
+
+  g_return_val_if_fail (transport != NULL, NULL);
+
+  strs = g_ptr_array_new ();
+
+  /* add the transport specifier */
+  if ((tmp = rtsp_transport_mode_as_text (transport)) == NULL)
+    goto invalid_transport;
+  g_ptr_array_add (strs, g_ascii_strup (tmp, -1));
+
+  g_ptr_array_add (strs, g_strdup ("/"));
+
+  if ((tmp = rtsp_transport_profile_as_text (transport)) == NULL)
+    goto invalid_transport;
+  g_ptr_array_add (strs, g_ascii_strup (tmp, -1));
+
+  if (transport->trans != GST_RTSP_TRANS_RTP ||
+      transport->profile != GST_RTSP_PROFILE_AVP ||
+      transport->lower_transport == GST_RTSP_LOWER_TRANS_TCP) {
+    g_ptr_array_add (strs, g_strdup ("/"));
+
+    if ((tmp = rtsp_transport_ltrans_as_text (transport)) == NULL)
+      goto invalid_transport;
+
+    g_ptr_array_add (strs, g_ascii_strup (tmp, -1));
+  }
+
+  /*
+   * the order of the following parameters is the same as the one specified in
+   * RFC 2326 to please some weird RTSP clients that require it
+   */
+
+  /* add the unicast/multicast parameter */
+  if (transport->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST)
+    g_ptr_array_add (strs, g_strdup (";multicast"));
+  else
+    g_ptr_array_add (strs, g_strdup (";unicast"));
+
+  /* add the destination parameter */
+  if (transport->destination != NULL) {
+    g_ptr_array_add (strs, g_strdup (";destination="));
+    g_ptr_array_add (strs, g_strdup (transport->destination));
+  }
+
+  /* add the source parameter */
+  if (transport->source != NULL) {
+    g_ptr_array_add (strs, g_strdup (";source="));
+    g_ptr_array_add (strs, g_strdup (transport->source));
+  }
+
+  /* add the interleaved parameter */
+  if (transport->lower_transport == GST_RTSP_LOWER_TRANS_TCP &&
+      transport->interleaved.min >= 0) {
+    if (transport->interleaved.min < 256 && transport->interleaved.max < 256) {
+      g_ptr_array_add (strs, g_strdup (";interleaved="));
+      g_ptr_array_add (strs, range_as_text (&transport->interleaved));
+    } else
+      goto invalid_transport;
+  }
+
+  /* add the append parameter */
+  if (transport->mode_record && transport->append)
+    g_ptr_array_add (strs, g_strdup (";append"));
+
+  /* add the ttl parameter */
+  if (transport->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST &&
+      transport->ttl != 0) {
+    if (transport->ttl < 256) {
+      g_ptr_array_add (strs, g_strdup (";ttl="));
+      g_ptr_array_add (strs, g_strdup_printf ("%u", transport->ttl));
+    } else
+      goto invalid_transport;
+  }
+
+  /* add the layers parameter */
+  if (transport->layers != 0) {
+    g_ptr_array_add (strs, g_strdup (";layers="));
+    g_ptr_array_add (strs, g_strdup_printf ("%u", transport->layers));
+  }
+
+  /* add the port parameter */
+  if (transport->lower_transport != GST_RTSP_LOWER_TRANS_TCP) {
+    if (transport->trans == GST_RTSP_TRANS_RTP && transport->port.min >= 0) {
+      if (transport->port.min < 65536 && transport->port.max < 65536) {
+        g_ptr_array_add (strs, g_strdup (";port="));
+        g_ptr_array_add (strs, range_as_text (&transport->port));
+      } else
+        goto invalid_transport;
+    }
+
+    /* add the client_port parameter */
+    if (transport->trans == GST_RTSP_TRANS_RTP
+        && transport->client_port.min >= 0) {
+      if (transport->client_port.min < 65536
+          && transport->client_port.max < 65536) {
+        g_ptr_array_add (strs, g_strdup (";client_port="));
+        g_ptr_array_add (strs, range_as_text (&transport->client_port));
+      } else
+        goto invalid_transport;
+    }
+
+    /* add the server_port parameter */
+    if (transport->trans == GST_RTSP_TRANS_RTP
+        && transport->server_port.min >= 0) {
+      if (transport->server_port.min < 65536
+          && transport->server_port.max < 65536) {
+        g_ptr_array_add (strs, g_strdup (";server_port="));
+        g_ptr_array_add (strs, range_as_text (&transport->server_port));
+      } else
+        goto invalid_transport;
+    }
+  }
+
+  /* add the ssrc parameter */
+  if (transport->lower_transport != GST_RTSP_LOWER_TRANS_UDP_MCAST &&
+      transport->ssrc != 0) {
+    g_ptr_array_add (strs, g_strdup (";ssrc="));
+    g_ptr_array_add (strs, g_strdup_printf ("%08X", transport->ssrc));
+  }
+
+  /* add the mode parameter */
+  if (transport->mode_play && transport->mode_record)
+    g_ptr_array_add (strs, g_strdup (";mode=\"PLAY,RECORD\""));
+  else if (transport->mode_record)
+    g_ptr_array_add (strs, g_strdup (";mode=\"RECORD\""));
+  else if (transport->mode_play)
+    g_ptr_array_add (strs, g_strdup (";mode=\"PLAY\""));
+
+  /* add a terminating NULL */
+  g_ptr_array_add (strs, NULL);
+
+  res = g_strjoinv (NULL, (gchar **) strs->pdata);
+  g_strfreev ((gchar **) g_ptr_array_free (strs, FALSE));
+
+  return res;
+
+invalid_transport:
+  {
+    g_ptr_array_add (strs, NULL);
+    g_strfreev ((gchar **) g_ptr_array_free (strs, FALSE));
+    return NULL;
+  }
+}
+
+/**
+ * gst_rtsp_transport_free:
+ * @transport: a #GstRTSPTransport
+ *
+ * Free the memory used by @transport.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_transport_free (GstRTSPTransport * transport)
+{
+  g_return_val_if_fail (transport != NULL, GST_RTSP_EINVAL);
+
+  gst_rtsp_transport_init (transport);
+  g_free (transport);
+
+  return GST_RTSP_OK;
+}
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.h b/gst-libs/gst/rtsp/gstrtsptransport.h
new file mode 100644
index 0000000..995d753
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtsptransport.h
@@ -0,0 +1,174 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_TRANSPORT_H__
+#define __GST_RTSP_TRANSPORT_H__
+
+#include <gst/rtsp/gstrtspdefs.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstRTSPTransMode:
+ * @GST_RTSP_TRANS_UNKNOWN: invalid tansport mode
+ * @GST_RTSP_TRANS_RTP: transfer RTP data
+ * @GST_RTSP_TRANS_RDT: transfer RDT (RealMedia) data
+ *
+ * The transfer mode to use.
+ */
+typedef enum {
+  GST_RTSP_TRANS_UNKNOWN =  0,
+  GST_RTSP_TRANS_RTP     = (1 << 0),
+  GST_RTSP_TRANS_RDT     = (1 << 1)
+} GstRTSPTransMode;
+
+/**
+ * GstRTSPProfile:
+ * @GST_RTSP_PROFILE_UNKNOWN: invalid profile
+ * @GST_RTSP_PROFILE_AVP: the Audio/Visual profile
+ * @GST_RTSP_PROFILE_SAVP: the secure Audio/Visual profile
+ *
+ * The transfer profile to use.
+ */
+typedef enum {
+  GST_RTSP_PROFILE_UNKNOWN =  0,
+  GST_RTSP_PROFILE_AVP     = (1 << 0),
+  GST_RTSP_PROFILE_SAVP    = (1 << 1)
+} GstRTSPProfile;
+
+/**
+ * GstRTSPLowerTrans:
+ * @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag
+ * @GST_RTSP_LOWER_TRANS_UDP: stream data over UDP
+ * @GST_RTSP_LOWER_TRANS_UDP_MCAST: stream data over UDP multicast
+ * @GST_RTSP_LOWER_TRANS_TCP: stream data over TCP
+ * @GST_RTSP_LOWER_TRANS_HTTP: stream data tunneled over HTTP. Since: 0.10.23
+ *
+ * The different transport methods.
+ */
+typedef enum {
+  GST_RTSP_LOWER_TRANS_UNKNOWN   = 0,
+  GST_RTSP_LOWER_TRANS_UDP       = (1 << 0),
+  GST_RTSP_LOWER_TRANS_UDP_MCAST = (1 << 1),
+  GST_RTSP_LOWER_TRANS_TCP       = (1 << 2),
+  GST_RTSP_LOWER_TRANS_HTTP      = (1 << 4)
+} GstRTSPLowerTrans;
+
+#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type())
+GType gst_rtsp_lower_trans_get_type (void);
+
+typedef struct _GstRTSPRange GstRTSPRange;
+typedef struct _GstRTSPTransport GstRTSPTransport;
+
+/**
+ * GstRTSPRange:
+ * @min: minimum value of the range
+ * @max: maximum value of the range
+ *
+ * A type to specify a range.
+ */
+
+struct _GstRTSPRange {
+  gint min;
+  gint max;
+};
+
+/**
+ * GstRTSPTransport:
+ * @trans: the transport mode
+ * @profile: the tansport profile
+ * @lower_transport: the lower transport
+ * @destination: the destination ip/hostname
+ * @source: the source ip/hostname
+ * @layers: the number of layers
+ * @mode_play: if play mode was selected
+ * @mode_record: if record mode was selected
+ * @append: is append mode was selected
+ * @interleaved: the interleave range
+ * @ttl: the time to live for multicast UDP
+ * @port: the port pair for multicast sessions
+ * @client_port: the client port pair for receiving data
+ * @server_port: the server port pair for receiving data
+ * @ssrc: the ssrc that the sender/receiver will use
+ *
+ * A structure holding the RTSP transport values.
+ */
+
+struct _GstRTSPTransport {
+  GstRTSPTransMode  trans;
+  GstRTSPProfile    profile;
+  GstRTSPLowerTrans lower_transport;
+
+  gchar         *destination;
+  gchar         *source;
+  guint          layers;
+  gboolean       mode_play;
+  gboolean       mode_record;
+  gboolean       append;
+  GstRTSPRange   interleaved;
+
+  /* multicast specific */
+  guint  ttl;
+
+  /* UDP specific */
+  GstRTSPRange   port;
+  GstRTSPRange   client_port;
+  GstRTSPRange   server_port;
+  /* RTP specific */
+  guint          ssrc;
+
+};
+
+GstRTSPResult      gst_rtsp_transport_new          (GstRTSPTransport **transport);
+GstRTSPResult      gst_rtsp_transport_init         (GstRTSPTransport *transport);
+
+GstRTSPResult      gst_rtsp_transport_parse        (const gchar *str, GstRTSPTransport *transport);
+gchar*             gst_rtsp_transport_as_text      (GstRTSPTransport *transport);
+
+GstRTSPResult      gst_rtsp_transport_get_mime     (GstRTSPTransMode trans, const gchar **mime);
+GstRTSPResult      gst_rtsp_transport_get_manager  (GstRTSPTransMode trans, const gchar **manager, guint option);
+
+GstRTSPResult      gst_rtsp_transport_free         (GstRTSPTransport *transport);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_TRANSPORT_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspurl.c b/gst-libs/gst/rtsp/gstrtspurl.c
new file mode 100644
index 0000000..db2637c
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspurl.c
@@ -0,0 +1,416 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstrtspurl
+ * @short_description: handling RTSP urls
+ *  
+ * Provides helper functions to handle RTSP urls.
+ *  
+ * Last reviewed on 2007-07-25 (0.10.14)
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstrtspurl.h"
+
+GType
+gst_rtsp_url_get_type (void)
+{
+  static volatile gsize url_type = 0;
+
+  if (g_once_init_enter (&url_type)) {
+    GType tmp = g_boxed_type_register_static ("GstRTSPUrl",
+        (GBoxedCopyFunc) gst_rtsp_url_copy, (GBoxedFreeFunc) gst_rtsp_url_free);
+    g_once_init_leave (&url_type, tmp);
+  }
+
+  return (GType) url_type;
+}
+
+static const struct
+{
+  const char scheme[6];
+  GstRTSPLowerTrans transports;
+} rtsp_schemes_map[] = {
+  {
+  "rtsp", GST_RTSP_LOWER_TRANS_TCP | GST_RTSP_LOWER_TRANS_UDP |
+        GST_RTSP_LOWER_TRANS_UDP_MCAST}, {
+  "rtspu", GST_RTSP_LOWER_TRANS_UDP | GST_RTSP_LOWER_TRANS_UDP_MCAST}, {
+  "rtspt", GST_RTSP_LOWER_TRANS_TCP}, {
+  "rtsph", GST_RTSP_LOWER_TRANS_HTTP | GST_RTSP_LOWER_TRANS_TCP}
+};
+
+/* format is rtsp[u]://[user:passwd@]host[:port]/abspath[?query] where host
+ * is a host name, an IPv4 dotted decimal address ("aaa.bbb.ccc.ddd") or an
+ * [IPv6] address ("[aabb:ccdd:eeff:gghh::sstt]" note the brackets around the
+ * address to allow the distinction between ':' as an IPv6 hexgroup separator
+ * and as a host/port separator) */
+
+/**
+ * gst_rtsp_url_parse:
+ * @urlstr: the url string to parse
+ * @url: location to hold the result.
+ *
+ * Parse the RTSP @urlstr into a newly allocated #GstRTSPUrl. Free after usage
+ * with gst_rtsp_url_free().
+ *
+ * Returns: a #GstRTSPResult.
+ */
+GstRTSPResult
+gst_rtsp_url_parse (const gchar * urlstr, GstRTSPUrl ** url)
+{
+  GstRTSPUrl *res;
+  gchar *p, *delim, *at, *col;
+  gchar *host_end = NULL;
+  guint i;
+
+  g_return_val_if_fail (urlstr != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
+
+  res = g_new0 (GstRTSPUrl, 1);
+
+  p = (gchar *) urlstr;
+
+  col = strstr (p, "://");
+  if (col == NULL)
+    goto invalid;
+
+  for (i = 0; i < G_N_ELEMENTS (rtsp_schemes_map); i++) {
+    if (g_ascii_strncasecmp (rtsp_schemes_map[i].scheme, p, col - p) == 0) {
+      res->transports = rtsp_schemes_map[i].transports;
+      p = col + 3;
+      break;
+    }
+  }
+
+  if (res->transports == GST_RTSP_LOWER_TRANS_UNKNOWN)
+    goto invalid;
+
+  delim = strpbrk (p, "/?");
+  at = strchr (p, '@');
+
+  if (at && delim && at > delim)
+    at = NULL;
+
+  if (at) {
+    col = strchr (p, ':');
+
+    /* must have a ':' and it must be before the '@' */
+    if (col == NULL || col > at)
+      goto invalid;
+
+    res->user = g_strndup (p, col - p);
+    col++;
+    res->passwd = g_strndup (col, at - col);
+
+    /* move to host */
+    p = at + 1;
+  }
+
+  if (*p == '[') {
+    res->family = GST_RTSP_FAM_INET6;
+
+    /* we have an IPv6 address in the URL, find the ending ] which must be
+     * before any delimiter */
+    host_end = strchr (++p, ']');
+    if (!host_end || (delim && host_end >= delim))
+      goto invalid;
+
+    /* a port specifier must follow the address immediately */
+    col = host_end[1] == ':' ? host_end + 1 : NULL;
+  } else {
+    res->family = GST_RTSP_FAM_INET;
+
+    col = strchr (p, ':');
+
+    /* we have a ':' and a delimiter but the ':' is after the delimiter, it's
+     * not really part of the hostname */
+    if (col && delim && col >= delim)
+      col = NULL;
+
+    host_end = col ? col : delim;
+  }
+
+  if (!host_end)
+    res->host = g_strdup (p);
+  else {
+    res->host = g_strndup (p, host_end - p);
+
+    if (col) {
+      res->port = strtoul (col + 1, NULL, 10);
+    } else {
+      /* no port specified, set to 0. gst_rtsp_url_get_port() will return the
+       * default port */
+      res->port = 0;
+    }
+  }
+  p = delim;
+
+  if (p && *p == '/') {
+    delim = strchr (p, '?');
+    if (!delim)
+      res->abspath = g_strdup (p);
+    else
+      res->abspath = g_strndup (p, delim - p);
+    p = delim;
+  } else {
+    res->abspath = g_strdup ("/");
+  }
+
+  if (p && *p == '?')
+    res->query = g_strdup (p + 1);
+
+  *url = res;
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+invalid:
+  {
+    gst_rtsp_url_free (res);
+    return GST_RTSP_EINVAL;
+  }
+}
+
+/**
+ * gst_rtsp_url_copy:
+ * @url: a #GstRTSPUrl
+ *
+ * Make a copy of @url.
+ *
+ * Returns: a copy of @url. Free with gst_rtsp_url_free () after usage.
+ *
+ * Since: 0.10.22
+ */
+GstRTSPUrl *
+gst_rtsp_url_copy (const GstRTSPUrl * url)
+{
+  GstRTSPUrl *res;
+
+  g_return_val_if_fail (url != NULL, NULL);
+
+  res = g_new0 (GstRTSPUrl, 1);
+
+  res->transports = url->transports;
+  res->family = url->family;
+  res->user = g_strdup (url->user);
+  res->passwd = g_strdup (url->passwd);
+  res->host = g_strdup (url->host);
+  res->port = url->port;
+  res->abspath = g_strdup (url->abspath);
+  res->query = g_strdup (url->query);
+
+  return res;
+}
+
+/**
+ * gst_rtsp_url_free:
+ * @url: a #GstRTSPUrl
+ *
+ * Free the memory used by @url.
+ */
+void
+gst_rtsp_url_free (GstRTSPUrl * url)
+{
+  if (url == NULL)
+    return;
+
+  g_free (url->user);
+  g_free (url->passwd);
+  g_free (url->host);
+  g_free (url->abspath);
+  g_free (url->query);
+  g_free (url);
+}
+
+/**
+ * gst_rtsp_url_set_port:
+ * @url: a #GstRTSPUrl
+ * @port: the port
+ *
+ * Set the port number in @url to @port.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_url_set_port (GstRTSPUrl * url, guint16 port)
+{
+  g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
+
+  url->port = port;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_url_get_port:
+ * @url: a #GstRTSPUrl
+ * @port: location to hold the port
+ *
+ * Get the port number of @url.
+ *
+ * Returns: #GST_RTSP_OK.
+ */
+GstRTSPResult
+gst_rtsp_url_get_port (const GstRTSPUrl * url, guint16 * port)
+{
+  g_return_val_if_fail (url != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (port != NULL, GST_RTSP_EINVAL);
+
+  /* if a port was specified, use that else use the default port. */
+  if (url->port != 0)
+    *port = url->port;
+  else
+    *port = GST_RTSP_DEFAULT_PORT;
+
+  return GST_RTSP_OK;
+}
+
+/**
+ * gst_rtsp_url_get_request_uri:
+ * @url: a #GstRTSPUrl
+ *
+ * Get a newly allocated string describing the request URI for @url. 
+ *
+ * Returns: a string with the request URI. g_free() after usage.
+ */
+gchar *
+gst_rtsp_url_get_request_uri (const GstRTSPUrl * url)
+{
+  gchar *uri;
+  const gchar *pre_host;
+  const gchar *post_host;
+  const gchar *pre_query;
+  const gchar *query;
+
+  g_return_val_if_fail (url != NULL, NULL);
+
+  pre_host = url->family == GST_RTSP_FAM_INET6 ? "[" : "";
+  post_host = url->family == GST_RTSP_FAM_INET6 ? "]" : "";
+  pre_query = url->query ? "?" : "";
+  query = url->query ? url->query : "";
+
+  if (url->port != 0) {
+    uri = g_strdup_printf ("rtsp://%s%s%s:%u%s%s%s", pre_host, url->host,
+        post_host, url->port, url->abspath, pre_query, query);
+  } else {
+    uri = g_strdup_printf ("rtsp://%s%s%s%s%s%s", pre_host, url->host,
+        post_host, url->abspath, pre_query, query);
+  }
+
+  return uri;
+}
+
+static int
+hex_to_int (gchar c)
+{
+  if (c >= '0' && c <= '9')
+    return c - '0';
+  else if (c >= 'a' && c <= 'f')
+    return c - 'a' + 10;
+  else if (c >= 'A' && c <= 'F')
+    return c - 'A' + 10;
+  else
+    return -1;
+}
+
+static void
+unescape_path_component (gchar * comp)
+{
+  guint len = strlen (comp);
+  guint i;
+
+  for (i = 0; i + 2 < len; i++)
+    if (comp[i] == '%') {
+      int a, b;
+
+      a = hex_to_int (comp[i + 1]);
+      b = hex_to_int (comp[i + 2]);
+
+      /* The a||b check is to ensure that the byte is not '\0' */
+      if (a >= 0 && b >= 0 && (a || b)) {
+        comp[i] = (gchar) (a * 16 + b);
+        memmove (comp + i + 1, comp + i + 3, len - i - 3);
+        len -= 2;
+        comp[len] = '\0';
+      }
+    }
+}
+
+/**
+ * gst_rtsp_url_decode_path_components:
+ * @url: a #GstRTSPUrl
+ *
+ * Splits the path of @url on '/' boundaries, decoding the resulting components,
+ *
+ * The decoding performed by this routine is "URI decoding", as defined in RFC
+ * 3986, commonly known as percent-decoding. For example, a string "foo\%2fbar"
+ * will decode to "foo/bar" -- the \%2f being replaced by the corresponding byte
+ * with hex value 0x2f. Note that there is no guarantee that the resulting byte
+ * sequence is valid in any given encoding. As a special case, \%00 is not
+ * unescaped to NUL, as that would prematurely terminate the string.
+ *
+ * Also note that since paths usually start with a slash, the first component
+ * will usually be the empty string.
+ *
+ * Returns: a string vector. g_strfreev() after usage.
+ *
+ * Since: 0.10.32
+ */
+gchar **
+gst_rtsp_url_decode_path_components (const GstRTSPUrl * url)
+{
+  gchar **ret;
+  guint i;
+
+  g_return_val_if_fail (url != NULL, NULL);
+  g_return_val_if_fail (url->abspath != NULL, NULL);
+
+  ret = g_strsplit (url->abspath, "/", -1);
+
+  for (i = 0; ret[i]; i++)
+    unescape_path_component (ret[i]);
+
+  return ret;
+}
diff --git a/gst-libs/gst/rtsp/gstrtspurl.h b/gst-libs/gst/rtsp/gstrtspurl.h
new file mode 100644
index 0000000..b34ee87
--- /dev/null
+++ b/gst-libs/gst/rtsp/gstrtspurl.h
@@ -0,0 +1,103 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RTSP_URL_H__
+#define __GST_RTSP_URL_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <gst/rtsp/gstrtspdefs.h>
+#include <gst/rtsp/gstrtsptransport.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_RTSP_DEFAULT_PORT:
+ *
+ * The default RTSP port to connect to.
+ */
+#define GST_RTSP_DEFAULT_PORT       554
+
+#define GST_TYPE_RTSP_URL  (gst_rtsp_url_get_type())
+
+typedef struct _GstRTSPUrl GstRTSPUrl;
+
+/**
+ * GstRTSPUrl:
+ * @transports: the transports allowed
+ * @family: the family
+ * @user: the user
+ * @passwd: the password
+ * @host: the host
+ * @port: the port
+ * @abspath: the absolute path
+ * @query: additional query parameters
+ *
+ * This structure contains the result of a parsed RTSP URL
+ */
+struct _GstRTSPUrl {
+  GstRTSPLowerTrans  transports;
+  GstRTSPFamily      family;
+  gchar             *user;
+  gchar             *passwd;
+  gchar             *host;
+  guint16            port;
+  gchar             *abspath;
+  gchar             *query;
+}; 
+
+GType gst_rtsp_url_get_type (void);
+
+GstRTSPResult      gst_rtsp_url_parse           (const gchar *urlstr, GstRTSPUrl **url);
+GstRTSPUrl*        gst_rtsp_url_copy            (const GstRTSPUrl *url);
+void               gst_rtsp_url_free            (GstRTSPUrl *url);
+gchar*             gst_rtsp_url_get_request_uri (const GstRTSPUrl *url);
+gchar**            gst_rtsp_url_decode_path_components
+                                                (const GstRTSPUrl *url);
+
+GstRTSPResult      gst_rtsp_url_set_port        (GstRTSPUrl *url, guint16 port);
+GstRTSPResult      gst_rtsp_url_get_port        (const GstRTSPUrl *url, guint16 *port);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_URL_H__ */
diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am
new file mode 100644
index 0000000..200b11b
--- /dev/null
+++ b/gst-libs/gst/sdp/Makefile.am
@@ -0,0 +1,72 @@
+libgstsdpincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/sdp
+
+libgstsdpinclude_HEADERS = gstsdp.h            \
+			   gstsdpmessage.h
+
+lib_LTLIBRARIES = libgstsdp-@GST_MAJORMINOR@.la
+
+libgstsdp_@GST_MAJORMINOR@_la_SOURCES = gstsdpmessage.c
+
+libgstsdp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstsdp_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(WIN32_LIBS)
+libgstsdp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstSdp-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstsdpinclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/sdp/%',$(libgstsdpinclude_HEADERS))
+
+GstSdp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstSdp \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--library=libgstsdp-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-sdp-@GST_MAJORMINOR@ \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstsdp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstsdp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/sdp \
+	 -:HEADERS $(libgstsdpinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/sdp/Makefile.in b/gst-libs/gst/sdp/Makefile.in
new file mode 100644
index 0000000..dbff64c
--- /dev/null
+++ b/gst-libs/gst/sdp/Makefile.in
@@ -0,0 +1,881 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst-libs/gst/sdp
+DIST_COMMON = $(libgstsdpinclude_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstsdpincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstsdp_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstsdp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo
+libgstsdp_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstsdp_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstsdp_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstsdp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstsdp_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstsdpinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libgstsdpincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/sdp
+libgstsdpinclude_HEADERS = gstsdp.h            \
+			   gstsdpmessage.h
+
+lib_LTLIBRARIES = libgstsdp-@GST_MAJORMINOR@.la
+libgstsdp_@GST_MAJORMINOR@_la_SOURCES = gstsdpmessage.c
+libgstsdp_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstsdp_@GST_MAJORMINOR@_la_LIBADD = $(GST_LIBS) $(WIN32_LIBS)
+libgstsdp_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstSdp-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstsdpinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/sdp/%',$(libgstsdpinclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstsdp-@GST_MAJORMINOR@.la: $(libgstsdp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstsdp_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstsdp_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstsdp_@GST_MAJORMINOR@_la_OBJECTS) $(libgstsdp_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo: gstsdpmessage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsdp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo -MD -MP -MF $(DEPDIR)/libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.Tpo -c -o libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo `test -f 'gstsdpmessage.c' || echo '$(srcdir)/'`gstsdpmessage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.Tpo $(DEPDIR)/libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstsdpmessage.c' object='libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsdp_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstsdp_@GST_MAJORMINOR@_la-gstsdpmessage.lo `test -f 'gstsdpmessage.c' || echo '$(srcdir)/'`gstsdpmessage.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstsdpincludeHEADERS: $(libgstsdpinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstsdpincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstsdpincludedir)"
+	@list='$(libgstsdpinclude_HEADERS)'; test -n "$(libgstsdpincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstsdpincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstsdpincludedir)" || exit $$?; \
+	done
+
+uninstall-libgstsdpincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstsdpinclude_HEADERS)'; test -n "$(libgstsdpincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstsdpincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstsdpincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstsdpincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA install-libgstsdpincludeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstsdpincludeHEADERS uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgstsdpincludeHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES uninstall-libgstsdpincludeHEADERS \
+	uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstSdp-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstSdp \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstsdp-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-sdp-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstsdp_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstsdp_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstsdp_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/sdp \
+	 -:HEADERS $(libgstsdpinclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/sdp/gstsdp.h b/gst-libs/gst/sdp/gstsdp.h
new file mode 100644
index 0000000..3dbd86d
--- /dev/null
+++ b/gst-libs/gst/sdp/gstsdp.h
@@ -0,0 +1,58 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_SDP_H__
+#define __GST_SDP_H__
+
+/**
+ * GstSDPResult:
+ * @GST_SDP_OK: A successful return value
+ * @GST_SDP_EINVAL: a function was given invalid parameters
+ *
+ * Return values for the SDP functions.
+ */
+typedef enum {
+  GST_SDP_OK     = 0,
+  GST_SDP_EINVAL = -1
+} GstSDPResult;
+
+#endif /* __GST_SDP_H__ */
diff --git a/gst-libs/gst/sdp/gstsdpmessage.c b/gst-libs/gst/sdp/gstsdpmessage.c
new file mode 100644
index 0000000..cd95c7c
--- /dev/null
+++ b/gst-libs/gst/sdp/gstsdpmessage.c
@@ -0,0 +1,2241 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * SECTION:gstsdpmessage
+ * @short_description: Helper methods for dealing with SDP messages
+ *
+ * <refsect2>
+ * <para>
+ * The GstSDPMessage helper functions makes it easy to parse and create SDP
+ * messages.
+ * </para>
+ * </refsect2>
+ *
+ * Last reviewed on 2007-07-24 (0.10.14)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include <glib.h>               /* for G_OS_WIN32 */
+#include <gst/gstinfo.h>        /* For GST_STR_NULL */
+
+#ifdef G_OS_WIN32
+/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later.
+ * minwg32 headers check WINVER before allowing the use of these */
+#ifndef WINVER
+#define WINVER 0x0501
+#endif
+#ifdef _MSC_VER
+#include <Winsock2.h>
+#endif
+#include <ws2tcpip.h>
+#else
+#include <sys/socket.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#endif
+
+#include "gstsdpmessage.h"
+
+/* FIXME, is currently allocated on the stack */
+#define MAX_LINE_LEN    1024 * 16
+
+#define FREE_STRING(field)              g_free (field); (field) = NULL
+#define REPLACE_STRING(field, val)      FREE_STRING(field); (field) = g_strdup (val)
+
+#define INIT_ARRAY(field, type, init_func)              \
+G_STMT_START {                                          \
+  if (field) {                                          \
+    guint i;                                            \
+    for(i = 0; i < (field)->len; i++)                   \
+      init_func (&g_array_index ((field), type, i));    \
+    g_array_set_size ((field), 0);                      \
+  }                                                     \
+  else                                                  \
+    (field) = g_array_new (FALSE, TRUE, sizeof (type)); \
+} G_STMT_END
+
+#define FREE_ARRAY(field)         \
+G_STMT_START {                    \
+  if (field)                      \
+    g_array_free ((field), TRUE); \
+  (field) = NULL;                 \
+} G_STMT_END
+
+#define INIT_PTR_ARRAY(field, type, init_func)          \
+G_STMT_START {                                          \
+  if (field) {                                          \
+    guint i;                                            \
+    for(i = 0; i < (field)->len; i++)                   \
+      init_func (g_array_index ((field), type, i));     \
+    g_array_set_size ((field), 0);                      \
+  }                                                     \
+  else                                                  \
+    (field) = g_array_new (FALSE, TRUE, sizeof (type)); \
+} G_STMT_END
+
+#define FREE_PTR_ARRAY(field) FREE_ARRAY(field)
+
+#define DEFINE_STRING_SETTER(field)                                     \
+GstSDPResult gst_sdp_message_set_##field (GstSDPMessage *msg, const gchar *val) { \
+  g_free (msg->field);                                                  \
+  msg->field = g_strdup (val);                                          \
+  return GST_SDP_OK;                                                    \
+}
+#define DEFINE_STRING_GETTER(field)                                     \
+const gchar* gst_sdp_message_get_##field (const GstSDPMessage *msg) {   \
+  return msg->field;                                                    \
+}
+
+#define DEFINE_ARRAY_LEN(field)                                         \
+guint gst_sdp_message_##field##_len (const GstSDPMessage *msg) {        \
+  return msg->field->len;                                               \
+}
+#define DEFINE_ARRAY_GETTER(method, field, type)                        \
+type * gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) {  \
+  return &g_array_index (msg->field, type, idx);                        \
+}
+
+#define DEFINE_PTR_ARRAY_LEN(field) DEFINE_ARRAY_LEN(field)
+#define DEFINE_PTR_ARRAY_GETTER(method, field, type)                    \
+type gst_sdp_message_get_##method (const GstSDPMessage *msg, guint idx) {    \
+  return g_array_index (msg->field, type, idx);                         \
+}
+#define DEFINE_PTR_ARRAY_ADDER(method, field, type, dup_method)         \
+GstSDPResult gst_sdp_message_add_##method (GstSDPMessage *msg, type val) {   \
+  type v = dup_method (val);                                            \
+  g_array_append_val (msg->field, v);                                   \
+  return GST_SDP_OK;                                                    \
+}
+
+static void
+gst_sdp_origin_init (GstSDPOrigin * origin)
+{
+  FREE_STRING (origin->username);
+  FREE_STRING (origin->sess_id);
+  FREE_STRING (origin->sess_version);
+  FREE_STRING (origin->nettype);
+  FREE_STRING (origin->addrtype);
+  FREE_STRING (origin->addr);
+}
+
+static void
+gst_sdp_connection_init (GstSDPConnection * connection)
+{
+  FREE_STRING (connection->nettype);
+  FREE_STRING (connection->addrtype);
+  FREE_STRING (connection->address);
+  connection->ttl = 0;
+  connection->addr_number = 0;
+}
+
+static void
+gst_sdp_bandwidth_init (GstSDPBandwidth * bandwidth)
+{
+  FREE_STRING (bandwidth->bwtype);
+  bandwidth->bandwidth = 0;
+}
+
+static void
+gst_sdp_time_init (GstSDPTime * t)
+{
+  FREE_STRING (t->start);
+  FREE_STRING (t->stop);
+  INIT_PTR_ARRAY (t->repeat, gchar *, g_free);
+  FREE_PTR_ARRAY (t->repeat);
+}
+
+static void
+gst_sdp_zone_init (GstSDPZone * zone)
+{
+  FREE_STRING (zone->time);
+  FREE_STRING (zone->typed_time);
+}
+
+static void
+gst_sdp_key_init (GstSDPKey * key)
+{
+  FREE_STRING (key->type);
+  FREE_STRING (key->data);
+}
+
+static void
+gst_sdp_attribute_init (GstSDPAttribute * attr)
+{
+  FREE_STRING (attr->key);
+  FREE_STRING (attr->value);
+}
+
+/**
+ * gst_sdp_message_new:
+ * @msg: pointer to new #GstSDPMessage
+ *
+ * Allocate a new GstSDPMessage and store the result in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_new (GstSDPMessage ** msg)
+{
+  GstSDPMessage *newmsg;
+
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  newmsg = g_new0 (GstSDPMessage, 1);
+
+  *msg = newmsg;
+
+  return gst_sdp_message_init (newmsg);
+}
+
+/**
+ * gst_sdp_message_init:
+ * @msg: a #GstSDPMessage
+ *
+ * Initialize @msg so that its contents are as if it was freshly allocated
+ * with gst_sdp_message_new(). This function is mostly used to initialize a message
+ * allocated on the stack. gst_sdp_message_uninit() undoes this operation.
+ *
+ * When this function is invoked on newly allocated data (with malloc or on the
+ * stack), its contents should be set to 0 before calling this function.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_init (GstSDPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  FREE_STRING (msg->version);
+  gst_sdp_origin_init (&msg->origin);
+  FREE_STRING (msg->session_name);
+  FREE_STRING (msg->information);
+  FREE_STRING (msg->uri);
+  INIT_PTR_ARRAY (msg->emails, gchar *, g_free);
+  INIT_PTR_ARRAY (msg->phones, gchar *, g_free);
+  gst_sdp_connection_init (&msg->connection);
+  INIT_ARRAY (msg->bandwidths, GstSDPBandwidth, gst_sdp_bandwidth_init);
+  INIT_ARRAY (msg->times, GstSDPTime, gst_sdp_time_init);
+  INIT_ARRAY (msg->zones, GstSDPZone, gst_sdp_zone_init);
+  gst_sdp_key_init (&msg->key);
+  INIT_ARRAY (msg->attributes, GstSDPAttribute, gst_sdp_attribute_init);
+  INIT_ARRAY (msg->medias, GstSDPMedia, gst_sdp_media_uninit);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_uninit:
+ * @msg: a #GstSDPMessage
+ *
+ * Free all resources allocated in @msg. @msg should not be used anymore after
+ * this function. This function should be used when @msg was allocated on the
+ * stack and initialized with gst_sdp_message_init().
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_uninit (GstSDPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  gst_sdp_message_init (msg);
+
+  FREE_PTR_ARRAY (msg->emails);
+  FREE_PTR_ARRAY (msg->phones);
+  FREE_ARRAY (msg->bandwidths);
+  FREE_ARRAY (msg->times);
+  FREE_ARRAY (msg->zones);
+  FREE_ARRAY (msg->attributes);
+  FREE_ARRAY (msg->medias);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_free:
+ * @msg: a #GstSDPMessage
+ *
+ * Free all resources allocated by @msg. @msg should not be used anymore after
+ * this function. This function should be used when @msg was dynamically
+ * allocated with gst_sdp_message_new().
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_free (GstSDPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  gst_sdp_message_uninit (msg);
+  g_free (msg);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_address_is_multicast:
+ * @nettype: a network type
+ * @addrtype: an address type
+ * @addr: an address
+ *
+ * Check if the given @addr is a multicast address.
+ *
+ * Returns: TRUE when @addr is multicast.
+ *
+ * Since: 0.10.32
+ */
+gboolean
+gst_sdp_address_is_multicast (const gchar * nettype, const gchar * addrtype,
+    const gchar * addr)
+{
+  struct addrinfo hints;
+  struct addrinfo *ai;
+  struct addrinfo *res;
+  gboolean ret = FALSE;
+
+  g_return_val_if_fail (addr, FALSE);
+
+  /* we only support IN */
+  if (nettype && strcmp (nettype, "IN") != 0)
+    return FALSE;
+
+  memset (&hints, 0, sizeof (hints));
+  hints.ai_socktype = SOCK_DGRAM;
+
+  /* set the address type as a hint */
+  if (addrtype) {
+    if (!strcmp (addrtype, "IP4"))
+      hints.ai_family = AF_INET;
+    else if (!strcmp (addrtype, "IP6"))
+      hints.ai_family = AF_INET6;
+  }
+
+  if (getaddrinfo (addr, NULL, &hints, &res) < 0)
+    return FALSE;
+
+  for (ai = res; !ret && ai; ai = ai->ai_next) {
+    if (ai->ai_family == AF_INET)
+      ret =
+          IN_MULTICAST (ntohl (((struct sockaddr_in *) ai->ai_addr)->
+              sin_addr.s_addr));
+    else
+      ret =
+          IN6_IS_ADDR_MULTICAST (&((struct sockaddr_in6 *) ai->
+              ai_addr)->sin6_addr);
+  }
+
+  freeaddrinfo (res);
+
+  return ret;
+}
+
+/**
+ * gst_sdp_message_as_text:
+ * @msg: a #GstSDPMessage
+ *
+ * Convert the contents of @msg to a text string.
+ *
+ * Returns: A dynamically allocated string representing the SDP description.
+ */
+gchar *
+gst_sdp_message_as_text (const GstSDPMessage * msg)
+{
+  /* change all vars so they match rfc? */
+  GString *lines;
+  guint i;
+
+  g_return_val_if_fail (msg != NULL, NULL);
+
+  lines = g_string_new ("");
+
+  if (msg->version)
+    g_string_append_printf (lines, "v=%s\r\n", msg->version);
+
+  if (msg->origin.sess_id && msg->origin.sess_version && msg->origin.nettype &&
+      msg->origin.addrtype && msg->origin.addr)
+    g_string_append_printf (lines, "o=%s %s %s %s %s %s\r\n",
+        msg->origin.username ? msg->origin.username : "-", msg->origin.sess_id,
+        msg->origin.sess_version, msg->origin.nettype, msg->origin.addrtype,
+        msg->origin.addr);
+
+  if (msg->session_name)
+    g_string_append_printf (lines, "s=%s\r\n", msg->session_name);
+
+  if (msg->information)
+    g_string_append_printf (lines, "i=%s\r\n", msg->information);
+
+  if (msg->uri)
+    g_string_append_printf (lines, "u=%s\r\n", msg->uri);
+
+  for (i = 0; i < gst_sdp_message_emails_len (msg); i++)
+    g_string_append_printf (lines, "e=%s\r\n",
+        gst_sdp_message_get_email (msg, i));
+
+  for (i = 0; i < gst_sdp_message_phones_len (msg); i++)
+    g_string_append_printf (lines, "p=%s\r\n",
+        gst_sdp_message_get_phone (msg, i));
+
+  if (gst_sdp_message_emails_len (msg) == 0 &&
+      gst_sdp_message_phones_len (msg) == 0)
+    g_string_append_printf (lines, "e=NONE\r\n");
+
+  if (msg->connection.nettype && msg->connection.addrtype &&
+      msg->connection.address) {
+    g_string_append_printf (lines, "c=%s %s %s", msg->connection.nettype,
+        msg->connection.addrtype, msg->connection.address);
+    if (gst_sdp_address_is_multicast (msg->connection.nettype,
+            msg->connection.addrtype, msg->connection.address)) {
+      /* only add ttl for IP4 */
+      if (strcmp (msg->connection.addrtype, "IP4") == 0)
+        g_string_append_printf (lines, "/%u", msg->connection.ttl);
+      if (msg->connection.addr_number > 1)
+        g_string_append_printf (lines, "/%u", msg->connection.addr_number);
+    }
+    g_string_append_printf (lines, "\r\n");
+  }
+
+  for (i = 0; i < gst_sdp_message_bandwidths_len (msg); i++) {
+    const GstSDPBandwidth *bandwidth = gst_sdp_message_get_bandwidth (msg, i);
+
+    g_string_append_printf (lines, "b=%s:%u\r\n", bandwidth->bwtype,
+        bandwidth->bandwidth);
+  }
+
+  for (i = 0; i < gst_sdp_message_times_len (msg); i++) {
+    const GstSDPTime *times = gst_sdp_message_get_time (msg, i);
+
+    g_string_append_printf (lines, "t=%s %s\r\n", times->start, times->stop);
+
+    if (times->repeat != NULL) {
+      guint j;
+
+      g_string_append_printf (lines, "r=%s",
+          g_array_index (times->repeat, gchar *, 0));
+      for (j = 1; j < times->repeat->len; j++)
+        g_string_append_printf (lines, " %s",
+            g_array_index (times->repeat, gchar *, j));
+      g_string_append_printf (lines, "\r\n");
+    }
+  }
+
+  if (gst_sdp_message_zones_len (msg) > 0) {
+    const GstSDPZone *zone = gst_sdp_message_get_zone (msg, 0);
+
+    g_string_append_printf (lines, "z=%s %s", zone->time, zone->typed_time);
+    for (i = 1; i < gst_sdp_message_zones_len (msg); i++) {
+      zone = gst_sdp_message_get_zone (msg, i);
+      g_string_append_printf (lines, " %s %s", zone->time, zone->typed_time);
+    }
+    g_string_append_printf (lines, "\r\n");
+  }
+
+  if (msg->key.type) {
+    g_string_append_printf (lines, "k=%s", msg->key.type);
+    if (msg->key.data)
+      g_string_append_printf (lines, ":%s", msg->key.data);
+    g_string_append_printf (lines, "\r\n");
+  }
+
+  for (i = 0; i < gst_sdp_message_attributes_len (msg); i++) {
+    const GstSDPAttribute *attr = gst_sdp_message_get_attribute (msg, i);
+
+    if (attr->key) {
+      g_string_append_printf (lines, "a=%s", attr->key);
+      if (attr->value)
+        g_string_append_printf (lines, ":%s", attr->value);
+      g_string_append_printf (lines, "\r\n");
+    }
+  }
+
+  for (i = 0; i < gst_sdp_message_medias_len (msg); i++) {
+    const GstSDPMedia *media = gst_sdp_message_get_media (msg, i);
+    gchar *sdp_media_str;
+
+    sdp_media_str = gst_sdp_media_as_text (media);
+    g_string_append_printf (lines, "%s", sdp_media_str);
+    g_free (sdp_media_str);
+  }
+
+  return g_string_free (lines, FALSE);
+}
+
+static int
+hex_to_int (gchar c)
+{
+  return c >= '0' && c <= '9' ? c - '0'
+      : c >= 'A' && c <= 'F' ? c - 'A' + 10
+      : c >= 'a' && c <= 'f' ? c - 'a' + 10 : 0;
+}
+
+/**
+ * gst_sdp_message_parse_uri:
+ * @uri: the start of the uri
+ * @msg: the result #GstSDPMessage
+ *
+ * Parse the null-terminated @uri and store the result in @msg.
+ *
+ * The uri should be of the form:
+ *
+ *  scheme://[address[:ttl=ttl][:noa=noa]]/[sessionname]
+ *               [#type=value *[&type=value]]
+ *
+ *  where value is url encoded. This looslely resembles
+ *  http://tools.ietf.org/html/draft-fujikawa-sdp-url-01
+ *
+ * Returns: #GST_SDP_OK on success.
+ *
+ * Since: 0.10.31
+ */
+GstSDPResult
+gst_sdp_message_parse_uri (const gchar * uri, GstSDPMessage * msg)
+{
+  GstSDPResult res;
+  gchar *message;
+  const gchar *colon, *slash, *hash, *p;
+  GString *lines;
+
+  g_return_val_if_fail (uri != NULL, GST_SDP_EINVAL);
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  colon = strstr (uri, "://");
+  if (!colon)
+    goto no_colon;
+
+  /* FIXME connection info goes here */
+
+  slash = strstr (colon + 3, "/");
+  if (!slash)
+    goto no_slash;
+
+  /* FIXME session name goes here */
+
+  hash = strstr (slash + 1, "#");
+  if (!hash)
+    goto no_hash;
+
+  lines = g_string_new ("");
+
+  /* unescape */
+  for (p = hash + 1; *p; p++) {
+    if (*p == '&')
+      g_string_append_printf (lines, "\r\n");
+    else if (*p == '+')
+      g_string_append_c (lines, ' ');
+    else if (*p == '%') {
+      gchar a, b;
+
+      if ((a = p[1])) {
+        if ((b = p[2])) {
+          g_string_append_c (lines, (hex_to_int (a) << 4) | hex_to_int (b));
+          p += 2;
+        }
+      } else {
+        p++;
+      }
+    } else
+      g_string_append_c (lines, *p);
+  }
+
+  message = g_string_free (lines, FALSE);
+  res =
+      gst_sdp_message_parse_buffer ((const guint8 *) message, strlen (message),
+      msg);
+  g_free (message);
+
+  return res;
+
+  /* ERRORS */
+no_colon:
+  {
+    return GST_SDP_EINVAL;
+  }
+no_slash:
+  {
+    return GST_SDP_EINVAL;
+  }
+no_hash:
+  {
+    return GST_SDP_EINVAL;
+  }
+}
+
+static const guchar acceptable[96] = {
+  /* X0   X1    X2    X3    X4    X5    X6    X7    X8    X9    XA    XB    XC    XD    XE    XF */
+  0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00,       /* 2X  !"#$%&'()*+,-./   */
+  0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,       /* 3X 0123456789:;<=>?   */
+  0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,       /* 4X @ABCDEFGHIJKLMNO   */
+  0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,       /* 5X PQRSTUVWXYZ[\]^_   */
+  0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,       /* 6X `abcdefghijklmno   */
+  0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00        /* 7X pqrstuvwxyz{|}~DEL */
+};
+
+static const gchar hex[16] = "0123456789ABCDEF";
+
+#define ACCEPTABLE_CHAR(a) (((guchar)(a))>=32 && ((guchar)(a))<128 && acceptable[(((guchar)a))-32])
+
+/**
+ * gst_sdp_message_as_uri:
+ * @scheme: the uri scheme
+ * @msg: the #GstSDPMessage
+ *
+ * Creates a uri from @msg with the given @scheme. The uri has the format:
+ *
+ *  @scheme:///[#type=value *[&type=value]]
+ *
+ *  Where each value is url encoded.
+ *
+ * Returns: a uri for @msg.
+ *
+ * Since: 0.10.31
+ */
+gchar *
+gst_sdp_message_as_uri (const gchar * scheme, const GstSDPMessage * msg)
+{
+  gchar *serialized, *p;
+  gchar *res;
+  GString *lines;
+  gboolean first;
+
+  g_return_val_if_fail (scheme != NULL, NULL);
+  g_return_val_if_fail (msg != NULL, NULL);
+
+  p = serialized = gst_sdp_message_as_text (msg);
+
+  lines = g_string_new ("");
+  g_string_append_printf (lines, "%s:///#", scheme);
+
+  /* now escape */
+  first = TRUE;
+  for (p = serialized; *p; p++) {
+    if (first) {
+      g_string_append_printf (lines, "%c=", *p);
+      if (*(p + 1))
+        p++;
+      first = FALSE;
+      continue;
+    }
+    if (*p == '\r')
+      continue;
+    else if (*p == '\n') {
+      if (*(p + 1))
+        g_string_append_c (lines, '&');
+      first = TRUE;
+    } else if (*p == ' ')
+      g_string_append_c (lines, '+');
+    else if (ACCEPTABLE_CHAR (*p))
+      g_string_append_c (lines, *p);
+    else {
+      /* escape */
+      g_string_append_printf (lines, "%%%c%c", hex[*p >> 4], hex[*p & 0xf]);
+    }
+  }
+
+  res = g_string_free (lines, FALSE);
+  g_free (serialized);
+
+  return res;
+}
+
+/**
+ * gst_sdp_message_set_version:
+ * @msg: a #GstSDPMessage
+ * @version: the version
+ *
+ * Set the version in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_SETTER (version);
+/**
+ * gst_sdp_message_get_version:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the version in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_GETTER (version);
+
+/**
+ * gst_sdp_message_set_origin:
+ * @msg: a #GstSDPMessage
+ * @username: the user name
+ * @sess_id: a session id
+ * @sess_version: a session version
+ * @nettype: a network type
+ * @addrtype: an address type
+ * @addr: an address
+ *
+ * Configure the SDP origin in @msg with the given parameters.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_message_set_origin (GstSDPMessage * msg, const gchar * username,
+    const gchar * sess_id, const gchar * sess_version, const gchar * nettype,
+    const gchar * addrtype, const gchar * addr)
+{
+  REPLACE_STRING (msg->origin.username, username);
+  REPLACE_STRING (msg->origin.sess_id, sess_id);
+  REPLACE_STRING (msg->origin.sess_version, sess_version);
+  REPLACE_STRING (msg->origin.nettype, nettype);
+  REPLACE_STRING (msg->origin.addrtype, addrtype);
+  REPLACE_STRING (msg->origin.addr, addr);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_get_origin:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the origin of @msg.
+ *
+ * Returns: a #GstSDPOrigin. The result remains valid as long as @msg is valid.
+ */
+const GstSDPOrigin *
+gst_sdp_message_get_origin (const GstSDPMessage * msg)
+{
+  return &msg->origin;
+}
+
+/**
+ * gst_sdp_message_set_session_name:
+ * @msg: a #GstSDPMessage
+ * @session_name: the session name
+ *
+ * Set the session name in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_SETTER (session_name);
+/**
+ * gst_sdp_message_get_session_name:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the session name in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_GETTER (session_name);
+/**
+ * gst_sdp_message_set_information:
+ * @msg: a #GstSDPMessage
+ * @information: the information
+ *
+ * Set the information in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_SETTER (information);
+/**
+ * gst_sdp_message_get_information:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the information in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_GETTER (information);
+/**
+ * gst_sdp_message_set_uri:
+ * @msg: a #GstSDPMessage
+ * @uri: the URI
+ *
+ * Set the URI in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_SETTER (uri);
+/**
+ * gst_sdp_message_get_uri:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the URI in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_STRING_GETTER (uri);
+
+/**
+ * gst_sdp_message_emails_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of emails in @msg.
+ *
+ * Returns: the number of emails in @msg.
+ */
+DEFINE_ARRAY_LEN (emails);
+/**
+ * gst_sdp_message_get_email:
+ * @msg: a #GstSDPMessage
+ * @idx: an email index
+ *
+ * Get the email with number @idx from @msg.
+ *
+ * Returns: the email at position @idx.
+ */
+DEFINE_PTR_ARRAY_GETTER (email, emails, const gchar *);
+
+/**
+ * gst_sdp_message_add_email:
+ * @msg: a #GstSDPMessage
+ * @email: an email
+ *
+ * Add @email to the list of emails in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_PTR_ARRAY_ADDER (email, emails, const gchar *, g_strdup);
+
+/**
+ * gst_sdp_message_phones_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of phones in @msg.
+ *
+ * Returns: the number of phones in @msg.
+ */
+DEFINE_ARRAY_LEN (phones);
+/**
+ * gst_sdp_message_get_phone:
+ * @msg: a #GstSDPMessage
+ * @idx: a phone index
+ *
+ * Get the phone with number @idx from @msg.
+ *
+ * Returns: the phone at position @idx.
+ */
+DEFINE_PTR_ARRAY_GETTER (phone, phones, const gchar *);
+
+/**
+ * gst_sdp_message_add_phone:
+ * @msg: a #GstSDPMessage
+ * @phone: a phone
+ *
+ * Add @phone to the list of phones in @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+DEFINE_PTR_ARRAY_ADDER (phone, phones, const gchar *, g_strdup);
+
+/**
+ * gst_sdp_message_set_connection:
+ * @msg: a #GstSDPMessage
+ * @nettype: the type of network. "IN" is defined to have the meaning
+ * "Internet".
+ * @addrtype: the type of address.
+ * @address: the address
+ * @ttl: the time to live of the address
+ * @addr_number: the number of layers
+ *
+ * Configure the SDP connection in @msg with the given parameters.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_set_connection (GstSDPMessage * msg, const gchar * nettype,
+    const gchar * addrtype, const gchar * address, guint ttl, guint addr_number)
+{
+  REPLACE_STRING (msg->connection.nettype, nettype);
+  REPLACE_STRING (msg->connection.addrtype, addrtype);
+  REPLACE_STRING (msg->connection.address, address);
+  msg->connection.ttl = ttl;
+  msg->connection.addr_number = addr_number;
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_get_connection:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the connection of @msg.
+ *
+ * Returns: a #GstSDPConnection. The result remains valid as long as @msg is valid.
+ */
+const GstSDPConnection *
+gst_sdp_message_get_connection (const GstSDPMessage * msg)
+{
+  return &msg->connection;
+}
+
+/**
+ * gst_sdp_message_bandwidths_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of bandwidth information in @msg.
+ *
+ * Returns: the number of bandwidth information in @msg.
+ */
+DEFINE_ARRAY_LEN (bandwidths);
+/**
+ * gst_sdp_message_get_bandwidth:
+ * @msg: a #GstSDPMessage
+ * @idx: the bandwidth index
+ *
+ * Get the bandwidth at index @idx from @msg.
+ *
+ * Returns: a #GstSDPBandwidth.
+ */
+DEFINE_ARRAY_GETTER (bandwidth, bandwidths, const GstSDPBandwidth);
+
+/**
+ * gst_sdp_message_add_bandwidth:
+ * @msg: a #GstSDPMessage
+ * @bwtype: the bandwidth modifier type
+ * @bandwidth: the bandwidth in kilobits per second
+ *
+ * Add the specified bandwidth information to @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+
+GstSDPResult
+gst_sdp_message_add_bandwidth (GstSDPMessage * msg, const gchar * bwtype,
+    guint bandwidth)
+{
+  GstSDPBandwidth bw;
+
+  bw.bwtype = g_strdup (bwtype);
+  bw.bandwidth = bandwidth;
+
+  g_array_append_val (msg->bandwidths, bw);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_times_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of time information entries in @msg.
+ *
+ * Returns: the number of time information entries in @msg.
+ */
+DEFINE_ARRAY_LEN (times);
+
+/**
+ * gst_sdp_message_get_time:
+ * @msg: a #GstSDPMessage
+ * @idx: the time index
+ *
+ * Get time information with index @idx from @msg.
+ *
+ * Returns: a #GstSDPTime.
+ */
+DEFINE_ARRAY_GETTER (time, times, const GstSDPTime);
+
+/**
+ * gst_sdp_message_add_time:
+ * @msg: a #GstSDPMessage
+ * @start: the start time
+ * @stop: the stop time
+ * @repeat: the repeat times
+ *
+ * Add time information @start and @stop to @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_add_time (GstSDPMessage * msg, const gchar * start,
+    const gchar * stop, const gchar ** repeat)
+{
+  GstSDPTime times;
+
+  times.start = g_strdup (start);
+  times.stop = g_strdup (stop);
+  if (repeat) {
+    times.repeat = g_array_new (FALSE, TRUE, sizeof (gchar *));
+    for (; *repeat; repeat++) {
+      gchar *r = g_strdup (*repeat);
+
+      g_array_append_val (times.repeat, r);
+    }
+  } else
+    times.repeat = NULL;
+  g_array_append_val (msg->times, times);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_zones_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of time zone information entries in @msg.
+ *
+ * Returns: the number of time zone information entries in @msg.
+ */
+DEFINE_ARRAY_LEN (zones);
+/**
+ * gst_sdp_message_get_zone:
+ * @msg: a #GstSDPMessage
+ * @idx: the zone index
+ *
+ * Get time zone information with index @idx from @msg.
+ *
+ * Returns: a #GstSDPZone.
+ */
+DEFINE_ARRAY_GETTER (zone, zones, const GstSDPZone);
+
+/**
+ * gst_sdp_message_add_zone:
+ * @msg: a #GstSDPMessage
+ * @adj_time: the NTP time that a time zone adjustment happens
+ * @typed_time: the offset from the time when the session was first scheduled
+ *
+ * Add time zone information to @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_add_zone (GstSDPMessage * msg, const gchar * adj_time,
+    const gchar * typed_time)
+{
+  GstSDPZone zone;
+
+  zone.time = g_strdup (adj_time);
+  zone.typed_time = g_strdup (typed_time);
+
+  g_array_append_val (msg->zones, zone);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_set_key:
+ * @msg: a #GstSDPMessage
+ * @type: the encryption type
+ * @data: the encryption data
+ *
+ * Adds the encryption information to @msg.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_set_key (GstSDPMessage * msg, const gchar * type,
+    const gchar * data)
+{
+  REPLACE_STRING (msg->key.type, type);
+  REPLACE_STRING (msg->key.data, data);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_get_key:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the encryption information from @msg.
+ *
+ * Returns: a #GstSDPKey.
+ */
+const GstSDPKey *
+gst_sdp_message_get_key (const GstSDPMessage * msg)
+{
+  return &msg->key;
+}
+
+/**
+ * gst_sdp_message_attributes_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of attributes in @msg.
+ *
+ * Returns: the number of attributes in @msg.
+ */
+DEFINE_ARRAY_LEN (attributes);
+
+/**
+ * gst_sdp_message_get_attribute:
+ * @msg: a #GstSDPMessage
+ * @idx: the index
+ *
+ * Get the attribute at position @idx in @msg.
+ *
+ * Returns: the #GstSDPAttribute at position @idx.
+ */
+DEFINE_ARRAY_GETTER (attribute, attributes, const GstSDPAttribute);
+
+/**
+ * gst_sdp_message_get_attribute_val_n:
+ * @msg: a #GstSDPMessage
+ * @key: the key
+ * @nth: the index
+ *
+ * Get the @nth attribute with key @key in @msg.
+ *
+ * Returns: the attribute value of the @nth attribute with @key.
+ */
+const gchar *
+gst_sdp_message_get_attribute_val_n (const GstSDPMessage * msg,
+    const gchar * key, guint nth)
+{
+  guint i;
+
+  for (i = 0; i < msg->attributes->len; i++) {
+    GstSDPAttribute *attr;
+
+    attr = &g_array_index (msg->attributes, GstSDPAttribute, i);
+    if (!strcmp (attr->key, key)) {
+      if (nth == 0)
+        return attr->value;
+      else
+        nth--;
+    }
+  }
+  return NULL;
+}
+
+/**
+ * gst_sdp_message_get_attribute_val:
+ * @msg: a #GstSDPMessage
+ * @key: the key
+ *
+ * Get the first attribute with key @key in @msg.
+ *
+ * Returns: the attribute value of the first attribute with @key.
+ */
+const gchar *
+gst_sdp_message_get_attribute_val (const GstSDPMessage * msg, const gchar * key)
+{
+  return gst_sdp_message_get_attribute_val_n (msg, key, 0);
+}
+
+/**
+ * gst_sdp_message_add_attribute:
+ * @msg: a #GstSDPMessage
+ * @key: the key
+ * @value: the value
+ *
+ * Add the attribute with @key and @value to @msg.
+ *
+ * Returns: @GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_message_add_attribute (GstSDPMessage * msg, const gchar * key,
+    const gchar * value)
+{
+  GstSDPAttribute attr;
+
+  attr.key = g_strdup (key);
+  attr.value = g_strdup (value);
+
+  g_array_append_val (msg->attributes, attr);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_message_medias_len:
+ * @msg: a #GstSDPMessage
+ *
+ * Get the number of media descriptions in @msg.
+ *
+ * Returns: the number of media descriptions in @msg.
+ */
+DEFINE_ARRAY_LEN (medias);
+/**
+ * gst_sdp_message_get_media:
+ * @msg: a #GstSDPMessage
+ * @idx: the index
+ *
+ * Get the media description at index @idx in @msg.
+ *
+ * Returns: a #GstSDPMedia.
+ */
+DEFINE_ARRAY_GETTER (media, medias, const GstSDPMedia);
+
+/**
+ * gst_sdp_message_add_media:
+ * @msg: a #GstSDPMessage
+ * @media: a #GstSDPMedia to add
+ *
+ * Adds @media to the array of medias in @msg. This function takes ownership of
+ * the contents of @media so that @media will have to be reinitialized with
+ * gst_sdp_media_init() before it can be used again.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_add_media (GstSDPMessage * msg, GstSDPMedia * media)
+{
+  guint len;
+  GstSDPMedia *nmedia;
+
+  len = msg->medias->len;
+  g_array_set_size (msg->medias, len + 1);
+  nmedia = &g_array_index (msg->medias, GstSDPMedia, len);
+
+  memcpy (nmedia, media, sizeof (GstSDPMedia));
+  memset (media, 0, sizeof (GstSDPMedia));
+
+  return GST_SDP_OK;
+}
+
+/* media access */
+
+/**
+ * gst_sdp_media_new:
+ * @media: pointer to new #GstSDPMedia
+ *
+ * Allocate a new GstSDPMedia and store the result in @media.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_new (GstSDPMedia ** media)
+{
+  GstSDPMedia *newmedia;
+
+  g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
+
+  newmedia = g_new0 (GstSDPMedia, 1);
+
+  *media = newmedia;
+
+  return gst_sdp_media_init (newmedia);
+}
+
+/**
+ * gst_sdp_media_init:
+ * @media: a #GstSDPMedia
+ *
+ * Initialize @media so that its contents are as if it was freshly allocated
+ * with gst_sdp_media_new(). This function is mostly used to initialize a media
+ * allocated on the stack. gst_sdp_media_uninit() undoes this operation.
+ *
+ * When this function is invoked on newly allocated data (with malloc or on the
+ * stack), its contents should be set to 0 before calling this function.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_init (GstSDPMedia * media)
+{
+  g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
+
+  FREE_STRING (media->media);
+  media->port = 0;
+  media->num_ports = 0;
+  FREE_STRING (media->proto);
+  INIT_PTR_ARRAY (media->fmts, gchar *, g_free);
+  FREE_STRING (media->information);
+  INIT_ARRAY (media->connections, GstSDPConnection, gst_sdp_connection_init);
+  INIT_ARRAY (media->bandwidths, GstSDPBandwidth, gst_sdp_bandwidth_init);
+  gst_sdp_key_init (&media->key);
+  INIT_ARRAY (media->attributes, GstSDPAttribute, gst_sdp_attribute_init);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_uninit:
+ * @media: a #GstSDPMedia
+ *
+ * Free all resources allocated in @media. @media should not be used anymore after
+ * this function. This function should be used when @media was allocated on the
+ * stack and initialized with gst_sdp_media_init().
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_uninit (GstSDPMedia * media)
+{
+  g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
+
+  gst_sdp_media_init (media);
+  FREE_PTR_ARRAY (media->fmts);
+  FREE_ARRAY (media->connections);
+  FREE_ARRAY (media->bandwidths);
+  FREE_ARRAY (media->attributes);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_free:
+ * @media: a #GstSDPMedia
+ *
+ * Free all resources allocated by @media. @media should not be used anymore after
+ * this function. This function should be used when @media was dynamically
+ * allocated with gst_sdp_media_new().
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_free (GstSDPMedia * media)
+{
+  g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
+
+  gst_sdp_media_uninit (media);
+  g_free (media);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_as_text:
+ * @media: a #GstSDPMedia
+ *
+ * Convert the contents of @media to a text string.
+ *
+ * Returns: A dynamically allocated string representing the media.
+ */
+gchar *
+gst_sdp_media_as_text (const GstSDPMedia * media)
+{
+  GString *lines;
+  guint i;
+
+  g_return_val_if_fail (media != NULL, NULL);
+
+  lines = g_string_new ("");
+
+  if (media->media)
+    g_string_append_printf (lines, "m=%s", media->media);
+
+  g_string_append_printf (lines, " %u", media->port);
+
+  if (media->num_ports > 1)
+    g_string_append_printf (lines, "/%u", media->num_ports);
+
+  g_string_append_printf (lines, " %s", media->proto);
+
+  for (i = 0; i < gst_sdp_media_formats_len (media); i++)
+    g_string_append_printf (lines, " %s", gst_sdp_media_get_format (media, i));
+  g_string_append_printf (lines, "\r\n");
+
+  if (media->information)
+    g_string_append_printf (lines, "i=%s", media->information);
+
+  for (i = 0; i < gst_sdp_media_connections_len (media); i++) {
+    const GstSDPConnection *conn = gst_sdp_media_get_connection (media, i);
+
+    if (conn->nettype && conn->addrtype && conn->address) {
+      g_string_append_printf (lines, "c=%s %s %s", conn->nettype,
+          conn->addrtype, conn->address);
+      if (gst_sdp_address_is_multicast (conn->nettype, conn->addrtype,
+              conn->address)) {
+        /* only add TTL for IP4 multicast */
+        if (strcmp (conn->addrtype, "IP4") == 0)
+          g_string_append_printf (lines, "/%u", conn->ttl);
+        if (conn->addr_number > 1)
+          g_string_append_printf (lines, "/%u", conn->addr_number);
+      }
+      g_string_append_printf (lines, "\r\n");
+    }
+  }
+
+  for (i = 0; i < gst_sdp_media_bandwidths_len (media); i++) {
+    const GstSDPBandwidth *bandwidth = gst_sdp_media_get_bandwidth (media, i);
+
+    g_string_append_printf (lines, "b=%s:%u\r\n", bandwidth->bwtype,
+        bandwidth->bandwidth);
+  }
+
+  if (media->key.type) {
+    g_string_append_printf (lines, "k=%s", media->key.type);
+    if (media->key.data)
+      g_string_append_printf (lines, ":%s", media->key.data);
+    g_string_append_printf (lines, "\r\n");
+  }
+
+  for (i = 0; i < gst_sdp_media_attributes_len (media); i++) {
+    const GstSDPAttribute *attr = gst_sdp_media_get_attribute (media, i);
+
+    if (attr->key) {
+      g_string_append_printf (lines, "a=%s", attr->key);
+      if (attr->value)
+        g_string_append_printf (lines, ":%s", attr->value);
+      g_string_append_printf (lines, "\r\n");
+    }
+  }
+
+  return g_string_free (lines, FALSE);
+}
+
+/**
+ * gst_sdp_media_get_media:
+ * @media: a #GstSDPMedia
+ *
+ * Get the media description of @media.
+ *
+ * Returns: the media description.
+ */
+const gchar *
+gst_sdp_media_get_media (const GstSDPMedia * media)
+{
+  return media->media;
+}
+
+/**
+ * gst_sdp_media_set_media:
+ * @media: a #GstSDPMedia
+ * @med: the media description
+ *
+ * Set the media description of @media to @med.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_set_media (GstSDPMedia * media, const gchar * med)
+{
+  g_free (media->media);
+  media->media = g_strdup (med);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_get_port:
+ * @media: a #GstSDPMedia
+ *
+ * Get the port number for @media.
+ *
+ * Returns: the port number of @media.
+ */
+guint
+gst_sdp_media_get_port (const GstSDPMedia * media)
+{
+  return media->port;
+}
+
+/**
+ * gst_sdp_media_get_num_ports:
+ * @media: a #GstSDPMedia
+ *
+ * Get the number of ports for @media.
+ *
+ * Returns: the number of ports for @media.
+ */
+guint
+gst_sdp_media_get_num_ports (const GstSDPMedia * media)
+{
+  return media->num_ports;
+}
+
+/**
+ * gst_sdp_media_set_port_info:
+ * @media: a #GstSDPMedia
+ * @port: the port number
+ * @num_ports: the number of ports
+ *
+ * Set the port information in @media.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_set_port_info (GstSDPMedia * media, guint port, guint num_ports)
+{
+  media->port = port;
+  media->num_ports = num_ports;
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_get_proto:
+ * @media: a #GstSDPMedia
+ *
+ * Get the transport protocol of @media
+ *
+ * Returns: the transport protocol of @media.
+ */
+const gchar *
+gst_sdp_media_get_proto (const GstSDPMedia * media)
+{
+  return media->proto;
+}
+
+/**
+ * gst_sdp_media_set_proto:
+ * @media: a #GstSDPMedia
+ * @proto: the media transport protocol
+ *
+ * Set the media transport protocol of @media to @proto.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_set_proto (GstSDPMedia * media, const gchar * proto)
+{
+  g_free (media->proto);
+  media->proto = g_strdup (proto);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_formats_len:
+ * @media: a #GstSDPMedia
+ *
+ * Get the number of formats in @media.
+ *
+ * Returns: the number of formats in @media.
+ */
+guint
+gst_sdp_media_formats_len (const GstSDPMedia * media)
+{
+  return media->fmts->len;
+}
+
+/**
+ * gst_sdp_media_get_format:
+ * @media: a #GstSDPMedia
+ * @idx: an index
+ *
+ * Get the format information at position @idx in @media.
+ *
+ * Returns: the format at position @idx.
+ */
+const gchar *
+gst_sdp_media_get_format (const GstSDPMedia * media, guint idx)
+{
+  if (idx >= media->fmts->len)
+    return NULL;
+  return g_array_index (media->fmts, gchar *, idx);
+}
+
+/**
+ * gst_sdp_media_add_format:
+ * @media: a #GstSDPMedia
+ * @format: the format
+ *
+ * Add the format information to @media.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_add_format (GstSDPMedia * media, const gchar * format)
+{
+  gchar *fmt;
+
+  fmt = g_strdup (format);
+
+  g_array_append_val (media->fmts, fmt);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_get_information:
+ * @media: a #GstSDPMedia
+ *
+ * Get the information of @media
+ *
+ * Returns: the information of @media.
+ */
+const gchar *
+gst_sdp_media_get_information (const GstSDPMedia * media)
+{
+  return media->information;
+}
+
+/**
+ * gst_sdp_media_set_information:
+ * @media: a #GstSDPMedia
+ * @information: the media information
+ *
+ * Set the media information of @media to @information.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_set_information (GstSDPMedia * media, const gchar * information)
+{
+  g_free (media->information);
+  media->information = g_strdup (information);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_connections_len:
+ * @media: a #GstSDPMedia
+ *
+ * Get the number of connection fields in @media.
+ *
+ * Returns: the number of connections in @media.
+ */
+guint
+gst_sdp_media_connections_len (const GstSDPMedia * media)
+{
+  return media->connections->len;
+}
+
+/**
+ * gst_sdp_media_get_connection:
+ * @media: a #GstSDPMedia
+ * @idx: an index
+ *
+ * Get the connection at position @idx in @media.
+ *
+ * Returns: the #GstSDPConnection at position @idx.
+ */
+const GstSDPConnection *
+gst_sdp_media_get_connection (const GstSDPMedia * media, guint idx)
+{
+  return &g_array_index (media->connections, GstSDPConnection, idx);
+}
+
+/**
+ * gst_sdp_media_add_connection:
+ * @media: a #GstSDPMedia
+ * @nettype: the type of network. "IN" is defined to have the meaning
+ * "Internet".
+ * @addrtype: the type of address.
+ * @address: the address
+ * @ttl: the time to live of the address
+ * @addr_number: the number of layers
+ *
+ * Add the given connection parameters to @media.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_add_connection (GstSDPMedia * media, const gchar * nettype,
+    const gchar * addrtype, const gchar * address, guint ttl, guint addr_number)
+{
+  GstSDPConnection conn;
+
+  conn.nettype = g_strdup (nettype);
+  conn.addrtype = g_strdup (addrtype);
+  conn.address = g_strdup (address);
+  conn.ttl = ttl;
+  conn.addr_number = addr_number;
+
+  g_array_append_val (media->connections, conn);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_bandwidths_len:
+ * @media: a #GstSDPMedia
+ *
+ * Get the number of bandwidth fields in @media.
+ *
+ * Returns: the number of bandwidths in @media.
+ */
+guint
+gst_sdp_media_bandwidths_len (const GstSDPMedia * media)
+{
+  return media->bandwidths->len;
+}
+
+/**
+ * gst_sdp_media_get_bandwidth:
+ * @media: a #GstSDPMedia
+ * @idx: an index
+ *
+ * Get the bandwidth at position @idx in @media.
+ *
+ * Returns: the #GstSDPBandwidth at position @idx.
+ */
+const GstSDPBandwidth *
+gst_sdp_media_get_bandwidth (const GstSDPMedia * media, guint idx)
+{
+  return &g_array_index (media->bandwidths, GstSDPBandwidth, idx);
+}
+
+/**
+ * gst_sdp_media_add_bandwidth:
+ * @media: a #GstSDPMedia
+ * @bwtype: the bandwidth modifier type
+ * @bandwidth: the bandwidth in kilobits per second
+ *
+ * Add the bandwidth information with @bwtype and @bandwidth to @media.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_add_bandwidth (GstSDPMedia * media, const gchar * bwtype,
+    guint bandwidth)
+{
+  GstSDPBandwidth bw;
+
+  bw.bwtype = g_strdup (bwtype);
+  bw.bandwidth = bandwidth;
+
+  g_array_append_val (media->bandwidths, bw);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_set_key:
+ * @media: a #GstSDPMedia
+ * @type: the encryption type
+ * @data: the encryption data
+ *
+ * Adds the encryption information to @media.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_media_set_key (GstSDPMedia * media, const gchar * type,
+    const gchar * data)
+{
+  g_free (media->key.type);
+  media->key.type = g_strdup (type);
+  g_free (media->key.data);
+  media->key.data = g_strdup (data);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_get_key:
+ * @media: a #GstSDPMedia
+ *
+ * Get the encryption information from @media.
+ *
+ * Returns: a #GstSDPKey.
+ */
+const GstSDPKey *
+gst_sdp_media_get_key (const GstSDPMedia * media)
+{
+  return &media->key;
+}
+
+/**
+ * gst_sdp_media_attributes_len:
+ * @media: a #GstSDPMedia
+ *
+ * Get the number of attribute fields in @media.
+ *
+ * Returns: the number of attributes in @media.
+ */
+guint
+gst_sdp_media_attributes_len (const GstSDPMedia * media)
+{
+  return media->attributes->len;
+}
+
+/**
+ * gst_sdp_media_add_attribute:
+ * @media: a #GstSDPMedia
+ * @key: a key
+ * @value: a value
+ *
+ * Add the attribute with @key and @value to @media.
+ *
+ * Returns: #GST_SDP_OK.
+ */
+GstSDPResult
+gst_sdp_media_add_attribute (GstSDPMedia * media, const gchar * key,
+    const gchar * value)
+{
+  GstSDPAttribute attr;
+
+  attr.key = g_strdup (key);
+  attr.value = g_strdup (value);
+
+  g_array_append_val (media->attributes, attr);
+
+  return GST_SDP_OK;
+}
+
+/**
+ * gst_sdp_media_get_attribute:
+ * @media: a #GstSDPMedia
+ * @idx: an index
+ *
+ * Get the attribute at position @idx in @media.
+ *
+ * Returns: the #GstSDPAttribute at position @idx.
+ */
+const GstSDPAttribute *
+gst_sdp_media_get_attribute (const GstSDPMedia * media, guint idx)
+{
+  return &g_array_index (media->attributes, GstSDPAttribute, idx);
+}
+
+/**
+ * gst_sdp_media_get_attribute_val_n:
+ * @media: a #GstSDPMedia
+ * @key: a key
+ * @nth: an index
+ *
+ * Get the @nth attribute value for @key in @media.
+ *
+ * Returns: the @nth attribute value.
+ */
+const gchar *
+gst_sdp_media_get_attribute_val_n (const GstSDPMedia * media, const gchar * key,
+    guint nth)
+{
+  guint i;
+
+  for (i = 0; i < media->attributes->len; i++) {
+    GstSDPAttribute *attr;
+
+    attr = &g_array_index (media->attributes, GstSDPAttribute, i);
+    if (!strcmp (attr->key, key)) {
+      if (nth == 0)
+        return attr->value;
+      else
+        nth--;
+    }
+  }
+  return NULL;
+}
+
+/**
+ * gst_sdp_media_get_attribute_val:
+ * @media: a #GstSDPMedia
+ * @key: a key
+ *
+ * Get the first attribute value for @key in @media.
+ *
+ * Returns: the first attribute value for @key.
+ */
+const gchar *
+gst_sdp_media_get_attribute_val (const GstSDPMedia * media, const gchar * key)
+{
+  return gst_sdp_media_get_attribute_val_n (media, key, 0);
+}
+
+static void
+read_string (gchar * dest, guint size, gchar ** src)
+{
+  guint idx;
+
+  idx = 0;
+  /* skip spaces */
+  while (g_ascii_isspace (**src))
+    (*src)++;
+
+  while (!g_ascii_isspace (**src) && **src != '\0') {
+    if (idx < size - 1)
+      dest[idx++] = **src;
+    (*src)++;
+  }
+  if (size > 0)
+    dest[idx] = '\0';
+}
+
+static void
+read_string_del (gchar * dest, guint size, gchar del, gchar ** src)
+{
+  guint idx;
+
+  idx = 0;
+  /* skip spaces */
+  while (g_ascii_isspace (**src))
+    (*src)++;
+
+  while (**src != del && **src != '\0') {
+    if (idx < size - 1)
+      dest[idx++] = **src;
+    (*src)++;
+  }
+  if (size > 0)
+    dest[idx] = '\0';
+}
+
+enum
+{
+  SDP_SESSION,
+  SDP_MEDIA,
+};
+
+typedef struct
+{
+  guint state;
+  GstSDPMessage *msg;
+  GstSDPMedia *media;
+} SDPContext;
+
+static gboolean
+gst_sdp_parse_line (SDPContext * c, gchar type, gchar * buffer)
+{
+  gchar str[8192];
+  gchar *p = buffer;
+
+#define READ_STRING(field) read_string (str, sizeof (str), &p); REPLACE_STRING (field, str)
+#define READ_UINT(field) read_string (str, sizeof (str), &p); field = strtoul (str, NULL, 10)
+
+  switch (type) {
+    case 'v':
+      if (buffer[0] != '0')
+        g_warning ("wrong SDP version");
+      gst_sdp_message_set_version (c->msg, buffer);
+      break;
+    case 'o':
+      READ_STRING (c->msg->origin.username);
+      READ_STRING (c->msg->origin.sess_id);
+      READ_STRING (c->msg->origin.sess_version);
+      READ_STRING (c->msg->origin.nettype);
+      READ_STRING (c->msg->origin.addrtype);
+      READ_STRING (c->msg->origin.addr);
+      break;
+    case 's':
+      REPLACE_STRING (c->msg->session_name, buffer);
+      break;
+    case 'i':
+      if (c->state == SDP_SESSION) {
+        REPLACE_STRING (c->msg->information, buffer);
+      } else {
+        REPLACE_STRING (c->media->information, buffer);
+      }
+      break;
+    case 'u':
+      REPLACE_STRING (c->msg->uri, buffer);
+      break;
+    case 'e':
+      gst_sdp_message_add_email (c->msg, buffer);
+      break;
+    case 'p':
+      gst_sdp_message_add_phone (c->msg, buffer);
+      break;
+    case 'c':
+    {
+      GstSDPConnection conn;
+      gchar *str2;
+
+      memset (&conn, 0, sizeof (conn));
+
+      str2 = p;
+      while ((str2 = strchr (str2, '/')))
+        *str2++ = ' ';
+      READ_STRING (conn.nettype);
+      READ_STRING (conn.addrtype);
+      READ_STRING (conn.address);
+      /* only read TTL for IP4 */
+      if (strcmp (conn.addrtype, "IP4") == 0)
+        READ_UINT (conn.ttl);
+      READ_UINT (conn.addr_number);
+
+      if (c->state == SDP_SESSION) {
+        gst_sdp_message_set_connection (c->msg, conn.nettype, conn.addrtype,
+            conn.address, conn.ttl, conn.addr_number);
+      } else {
+        gst_sdp_media_add_connection (c->media, conn.nettype, conn.addrtype,
+            conn.address, conn.ttl, conn.addr_number);
+      }
+      gst_sdp_connection_init (&conn);
+      break;
+    }
+    case 'b':
+    {
+      gchar str2[MAX_LINE_LEN];
+
+      read_string_del (str, sizeof (str), ':', &p);
+      if (*p != '\0')
+        p++;
+      read_string (str2, sizeof (str2), &p);
+      if (c->state == SDP_SESSION)
+        gst_sdp_message_add_bandwidth (c->msg, str, atoi (str2));
+      else
+        gst_sdp_media_add_bandwidth (c->media, str, atoi (str2));
+      break;
+    }
+    case 't':
+      break;
+    case 'k':
+      break;
+    case 'a':
+      read_string_del (str, sizeof (str), ':', &p);
+      if (*p != '\0')
+        p++;
+      if (c->state == SDP_SESSION)
+        gst_sdp_message_add_attribute (c->msg, str, p);
+      else
+        gst_sdp_media_add_attribute (c->media, str, p);
+      break;
+    case 'm':
+    {
+      gchar *slash;
+      GstSDPMedia nmedia;
+
+      c->state = SDP_MEDIA;
+      memset (&nmedia, 0, sizeof (nmedia));
+      gst_sdp_media_init (&nmedia);
+
+      /* m=<media> <port>/<number of ports> <proto> <fmt> ... */
+      READ_STRING (nmedia.media);
+      read_string (str, sizeof (str), &p);
+      slash = g_strrstr (str, "/");
+      if (slash) {
+        *slash = '\0';
+        nmedia.port = atoi (str);
+        nmedia.num_ports = atoi (slash + 1);
+      } else {
+        nmedia.port = atoi (str);
+        nmedia.num_ports = -1;
+      }
+      READ_STRING (nmedia.proto);
+      do {
+        read_string (str, sizeof (str), &p);
+        gst_sdp_media_add_format (&nmedia, str);
+      } while (*p != '\0');
+
+      gst_sdp_message_add_media (c->msg, &nmedia);
+      c->media =
+          &g_array_index (c->msg->medias, GstSDPMedia, c->msg->medias->len - 1);
+      break;
+    }
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+/**
+ * gst_sdp_message_parse_buffer:
+ * @data: the start of the buffer
+ * @size: the size of the buffer
+ * @msg: the result #GstSDPMessage
+ *
+ * Parse the contents of @size bytes pointed to by @data and store the result in
+ * @msg.
+ *
+ * Returns: #GST_SDP_OK on success.
+ */
+GstSDPResult
+gst_sdp_message_parse_buffer (const guint8 * data, guint size,
+    GstSDPMessage * msg)
+{
+  gchar *p;
+  SDPContext c;
+  gchar type;
+  gchar buffer[MAX_LINE_LEN];
+  guint idx = 0;
+
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+  g_return_val_if_fail (data != NULL, GST_SDP_EINVAL);
+  g_return_val_if_fail (size != 0, GST_SDP_EINVAL);
+
+  c.state = SDP_SESSION;
+  c.msg = msg;
+  c.media = NULL;
+
+  p = (gchar *) data;
+  while (TRUE) {
+    while (g_ascii_isspace (*p))
+      p++;
+
+    type = *p++;
+    if (type == '\0')
+      break;
+
+    if (*p != '=')
+      goto line_done;
+    p++;
+
+    idx = 0;
+    while (*p != '\n' && *p != '\r' && *p != '\0') {
+      if (idx < sizeof (buffer) - 1)
+        buffer[idx++] = *p;
+      p++;
+    }
+    buffer[idx] = '\0';
+    gst_sdp_parse_line (&c, type, buffer);
+
+  line_done:
+    while (*p != '\n' && *p != '\0')
+      p++;
+    if (*p == '\n')
+      p++;
+  }
+
+  return GST_SDP_OK;
+}
+
+static void
+print_media (GstSDPMedia * media)
+{
+  g_print ("   media:       '%s'\n", GST_STR_NULL (media->media));
+  g_print ("   port:        '%u'\n", media->port);
+  g_print ("   num_ports:   '%u'\n", media->num_ports);
+  g_print ("   proto:       '%s'\n", GST_STR_NULL (media->proto));
+  if (media->fmts->len > 0) {
+    guint i;
+
+    g_print ("   formats:\n");
+    for (i = 0; i < media->fmts->len; i++) {
+      g_print ("    format  '%s'\n", g_array_index (media->fmts, gchar *, i));
+    }
+  }
+  g_print ("   information: '%s'\n", GST_STR_NULL (media->information));
+  if (media->connections->len > 0) {
+    guint i;
+
+    g_print ("   connections:\n");
+    for (i = 0; i < media->connections->len; i++) {
+      GstSDPConnection *conn =
+          &g_array_index (media->connections, GstSDPConnection, i);
+
+      g_print ("    nettype:      '%s'\n", GST_STR_NULL (conn->nettype));
+      g_print ("    addrtype:     '%s'\n", GST_STR_NULL (conn->addrtype));
+      g_print ("    address:      '%s'\n", GST_STR_NULL (conn->address));
+      g_print ("    ttl:          '%u'\n", conn->ttl);
+      g_print ("    addr_number:  '%u'\n", conn->addr_number);
+    }
+  }
+  if (media->bandwidths->len > 0) {
+    guint i;
+
+    g_print ("   bandwidths:\n");
+    for (i = 0; i < media->bandwidths->len; i++) {
+      GstSDPBandwidth *bw =
+          &g_array_index (media->bandwidths, GstSDPBandwidth, i);
+
+      g_print ("    type:         '%s'\n", GST_STR_NULL (bw->bwtype));
+      g_print ("    bandwidth:    '%u'\n", bw->bandwidth);
+    }
+  }
+  g_print ("   key:\n");
+  g_print ("    type:       '%s'\n", GST_STR_NULL (media->key.type));
+  g_print ("    data:       '%s'\n", GST_STR_NULL (media->key.data));
+  if (media->attributes->len > 0) {
+    guint i;
+
+    g_print ("   attributes:\n");
+    for (i = 0; i < media->attributes->len; i++) {
+      GstSDPAttribute *attr =
+          &g_array_index (media->attributes, GstSDPAttribute, i);
+
+      g_print ("    attribute '%s' : '%s'\n", attr->key, attr->value);
+    }
+  }
+}
+
+/**
+ * gst_sdp_message_dump:
+ * @msg: a #GstSDPMessage
+ *
+ * Dump the parsed contents of @msg to stdout.
+ *
+ * Returns: a #GstSDPResult.
+ */
+GstSDPResult
+gst_sdp_message_dump (const GstSDPMessage * msg)
+{
+  g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+  g_print ("sdp packet %p:\n", msg);
+  g_print (" version:       '%s'\n", GST_STR_NULL (msg->version));
+  g_print (" origin:\n");
+  g_print ("  username:     '%s'\n", GST_STR_NULL (msg->origin.username));
+  g_print ("  sess_id:      '%s'\n", GST_STR_NULL (msg->origin.sess_id));
+  g_print ("  sess_version: '%s'\n", GST_STR_NULL (msg->origin.sess_version));
+  g_print ("  nettype:      '%s'\n", GST_STR_NULL (msg->origin.nettype));
+  g_print ("  addrtype:     '%s'\n", GST_STR_NULL (msg->origin.addrtype));
+  g_print ("  addr:         '%s'\n", GST_STR_NULL (msg->origin.addr));
+  g_print (" session_name:  '%s'\n", GST_STR_NULL (msg->session_name));
+  g_print (" information:   '%s'\n", GST_STR_NULL (msg->information));
+  g_print (" uri:           '%s'\n", GST_STR_NULL (msg->uri));
+
+  if (msg->emails->len > 0) {
+    guint i;
+
+    g_print (" emails:\n");
+    for (i = 0; i < msg->emails->len; i++) {
+      g_print ("  email '%s'\n", g_array_index (msg->emails, gchar *, i));
+    }
+  }
+  if (msg->phones->len > 0) {
+    guint i;
+
+    g_print (" phones:\n");
+    for (i = 0; i < msg->phones->len; i++) {
+      g_print ("  phone '%s'\n", g_array_index (msg->phones, gchar *, i));
+    }
+  }
+  g_print (" connection:\n");
+  g_print ("  nettype:      '%s'\n", GST_STR_NULL (msg->connection.nettype));
+  g_print ("  addrtype:     '%s'\n", GST_STR_NULL (msg->connection.addrtype));
+  g_print ("  address:      '%s'\n", GST_STR_NULL (msg->connection.address));
+  g_print ("  ttl:          '%u'\n", msg->connection.ttl);
+  g_print ("  addr_number:  '%u'\n", msg->connection.addr_number);
+  if (msg->bandwidths->len > 0) {
+    guint i;
+
+    g_print (" bandwidths:\n");
+    for (i = 0; i < msg->bandwidths->len; i++) {
+      GstSDPBandwidth *bw =
+          &g_array_index (msg->bandwidths, GstSDPBandwidth, i);
+
+      g_print ("  type:         '%s'\n", GST_STR_NULL (bw->bwtype));
+      g_print ("  bandwidth:    '%u'\n", bw->bandwidth);
+    }
+  }
+  g_print (" key:\n");
+  g_print ("  type:         '%s'\n", GST_STR_NULL (msg->key.type));
+  g_print ("  data:         '%s'\n", GST_STR_NULL (msg->key.data));
+  if (msg->attributes->len > 0) {
+    guint i;
+
+    g_print (" attributes:\n");
+    for (i = 0; i < msg->attributes->len; i++) {
+      GstSDPAttribute *attr =
+          &g_array_index (msg->attributes, GstSDPAttribute, i);
+
+      g_print ("  attribute '%s' : '%s'\n", attr->key, attr->value);
+    }
+  }
+  if (msg->medias->len > 0) {
+    guint i;
+
+    g_print (" medias:\n");
+    for (i = 0; i < msg->medias->len; i++) {
+      g_print ("  media %u:\n", i);
+      print_media (&g_array_index (msg->medias, GstSDPMedia, i));
+    }
+  }
+  return GST_SDP_OK;
+}
diff --git a/gst-libs/gst/sdp/gstsdpmessage.h b/gst-libs/gst/sdp/gstsdpmessage.h
new file mode 100644
index 0000000..069eb38
--- /dev/null
+++ b/gst-libs/gst/sdp/gstsdpmessage.h
@@ -0,0 +1,423 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_SDP_MESSAGE_H__
+#define __GST_SDP_MESSAGE_H__
+
+#include <glib.h>
+
+#include <gst/sdp/gstsdp.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstSDPOrigin:
+ * @username: the user's login on the originating host, or it is "-"
+ *    if the originating host does not support the concept of user ids.
+ * @sess_id: is a numeric string such that the tuple of @username, @sess_id,
+ *    @nettype, @addrtype and @addr form a globally unique identifier for the
+ *    session.
+ * @sess_version: a version number for this announcement
+ * @nettype: the type of network. "IN" is defined to have the meaning
+ *    "Internet".
+ * @addrtype: the type of @addr.
+ * @addr: the globally unique address of the machine from which the session was
+ *     created.
+ *
+ * The contents of the SDP "o=" field which gives the originator of the session
+ * (their username and the address of the user's host) plus a session id and
+ * session version number.
+ */
+typedef struct {
+  gchar *username;
+  gchar *sess_id;
+  gchar *sess_version;
+  gchar *nettype;
+  gchar *addrtype;
+  gchar *addr;
+} GstSDPOrigin;
+
+/**
+ * GstSDPConnection:
+ * @nettype: the type of network. "IN" is defined to have the meaning
+ *    "Internet".
+ * @addrtype: the type of @address.
+ * @address: the address
+ * @ttl: the time to live of the address
+ * @addr_number: the number of layers
+ *
+ * The contents of the SDP "c=" field which contains connection data.
+ */
+typedef struct {
+  gchar *nettype;
+  gchar *addrtype;
+  gchar *address;
+  guint  ttl;
+  guint  addr_number;
+} GstSDPConnection;
+
+/**
+ * GST_SDP_BWTYPE_CT:
+ *
+ * The Conference Total bandwidth modifier.
+ */
+#define GST_SDP_BWTYPE_CT               "CT"
+/**
+ * GST_SDP_BWTYPE_AS:
+ *
+ * The Application-Specific Maximum bandwidth modifier.
+ */
+#define GST_SDP_BWTYPE_AS               "AS"
+/**
+ * GST_SDP_BWTYPE_EXT_PREFIX:
+ *
+ * The extension prefix bandwidth modifier.
+ */
+#define GST_SDP_BWTYPE_EXT_PREFIX       "X-"
+
+/**
+ * GST_SDP_BWTYPE_RS:
+ *
+ * RTCP bandwidth allocated to active data senders (RFC 3556).
+ *
+ * Since: 0.10.15
+ */
+#define GST_SDP_BWTYPE_RS               "RS"
+/**
+ * GST_SDP_BWTYPE_RR:
+ *
+ * RTCP bandwidth allocated to data receivers (RFC 3556).
+ *
+ * Since: 0.10.15
+ */
+#define GST_SDP_BWTYPE_RR               "RR"
+/**
+ * GST_SDP_BWTYPE_TIAS:
+ *
+ * Transport Independent Application Specific Maximum bandwidth (RFC 3890).
+ *
+ * Since: 0.10.30
+ */
+#define GST_SDP_BWTYPE_TIAS             "TIAS"
+
+
+/**
+ * GstSDPBandwidth:
+ * @bwtype: the bandwidth modifier type
+ * @bandwidth: the bandwidth in kilobits per second
+ *
+ * The contents of the SDP "b=" field which specifies the proposed bandwidth to
+ * be used by the session or media.
+ */
+typedef struct {
+  gchar *bwtype;
+  guint  bandwidth;
+} GstSDPBandwidth;
+
+/**
+ * GstSDPTime:
+ * @start: start time for the conference. The value is the decimal
+ *     representation of Network Time Protocol (NTP) time values in seconds
+ * @stop: stop time for the conference. The value is the decimal
+ *     representation of Network Time Protocol (NTP) time values in seconds
+ * @repeat: repeat times for a session
+ *
+ * The contents of the SDP "t=" field which specify the start and stop times for
+ * a conference session.
+ */
+typedef struct {
+  gchar  *start;
+  gchar  *stop;
+  GArray *repeat;
+} GstSDPTime;
+
+/**
+ * GstSDPZone:
+ * @time: the NTP time that a time zone adjustment happens
+ * @typed_time: the offset from the time when the session was first scheduled
+ *
+ * The contents of the SDP "z=" field which allows the sender to
+ * specify a list of time zone adjustments and offsets from the base
+ * time.
+ */
+typedef struct {
+  gchar *time;
+  gchar *typed_time;
+} GstSDPZone;
+
+/**
+ * GstSDPKey:
+ * @type: the encryption type
+ * @data: the encryption data
+ *
+ * The contents of the SDP "k=" field which is used to convey encryption
+ * keys.
+ */
+typedef struct {
+  gchar *type;
+  gchar *data;
+} GstSDPKey;
+
+/**
+ * GstSDPAttribute:
+ * @key: the attribute key
+ * @value: the attribute value or NULL when it was a property attribute
+ *
+ * The contents of the SDP "a=" field which contains a key/value pair.
+ */
+typedef struct {
+  gchar *key;
+  gchar *value;
+} GstSDPAttribute;
+
+/**
+ * GstSDPMedia:
+ * @media: the media type
+ * @port: the transport port to which the media stream will be sent
+ * @num_ports: the number of ports or -1 if only one port was specified
+ * @proto: the transport protocol
+ * @fmts: an array of #gchar formats
+ * @information: the media title
+ * @connections: array of #GstSDPConnection with media connection information
+ * @bandwidths: array of #GstSDPBandwidth with media bandwidth information
+ * @key: the encryption key
+ * @attributes: array of #GstSDPAttribute with the additional media attributes
+ *
+ * The contents of the SDP "m=" field with all related fields.
+ */
+typedef struct {
+  gchar            *media;
+  guint             port;
+  guint             num_ports;
+  gchar            *proto;
+  GArray           *fmts;
+  gchar            *information;
+  GArray           *connections;
+  GArray           *bandwidths;
+  GstSDPKey         key;
+  GArray           *attributes;
+} GstSDPMedia;
+
+/**
+ * GstSDPMessage:
+ * @version: the protocol version
+ * @origin: owner/creator and session identifier
+ * @session_name: session name
+ * @information: session information
+ * @uri: URI of description
+ * @emails: array of #gchar with email addresses
+ * @phones: array of #gchar with phone numbers
+ * @connection: connection information for the session
+ * @bandwidths: array of #GstSDPBandwidth with bandwidth information
+ * @times: array of #GstSDPTime with time descriptions
+ * @zones: array of #GstSDPZone with time zone adjustments
+ * @key: encryption key
+ * @attributes: array of #GstSDPAttribute with session attributes
+ * @medias: array of #GstSDPMedia with media descriptions
+ *
+ * The contents of the SDP message.
+ */
+typedef struct {
+  gchar            *version;
+  GstSDPOrigin      origin;
+  gchar            *session_name;
+  gchar            *information;
+  gchar            *uri;
+  GArray           *emails;
+  GArray           *phones;
+  GstSDPConnection  connection;
+  GArray           *bandwidths;
+  GArray           *times;
+  GArray           *zones;
+  GstSDPKey         key;
+  GArray           *attributes;
+  GArray           *medias;
+} GstSDPMessage;
+
+/* Session descriptions */
+GstSDPResult            gst_sdp_message_new                 (GstSDPMessage **msg);
+GstSDPResult            gst_sdp_message_init                (GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_uninit              (GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_free                (GstSDPMessage *msg);
+
+GstSDPResult            gst_sdp_message_parse_buffer        (const guint8 *data, guint size, GstSDPMessage *msg);
+gchar*                  gst_sdp_message_as_text             (const GstSDPMessage *msg);
+
+/* convert from/to uri */
+GstSDPResult            gst_sdp_message_parse_uri           (const gchar *uri, GstSDPMessage *msg);
+gchar*                  gst_sdp_message_as_uri              (const gchar *scheme, const GstSDPMessage *msg);
+
+/* utils */
+gboolean                gst_sdp_address_is_multicast        (const gchar *nettype, const gchar *addrtype,
+                                                             const gchar *addr);
+/* v=.. */
+const gchar*            gst_sdp_message_get_version         (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_version         (GstSDPMessage *msg, const gchar *version);
+
+/* o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address> */
+const GstSDPOrigin*     gst_sdp_message_get_origin          (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_origin          (GstSDPMessage *msg, const gchar *username,
+                                                             const gchar *sess_id, const gchar *sess_version,
+                                                             const gchar *nettype, const gchar *addrtype,
+                                                             const gchar *addr);
+
+/* s=<session name> */
+const gchar*            gst_sdp_message_get_session_name    (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_session_name    (GstSDPMessage *msg, const gchar *session_name);
+
+/* i=<session description> */
+const gchar*            gst_sdp_message_get_information     (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_information     (GstSDPMessage *msg, const gchar *information);
+
+/* u=<uri> */
+const gchar*            gst_sdp_message_get_uri             (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_uri             (GstSDPMessage *msg, const gchar *uri);
+
+/* e=<email-address> */
+guint                   gst_sdp_message_emails_len          (const GstSDPMessage *msg);
+const gchar*            gst_sdp_message_get_email           (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_email           (GstSDPMessage *msg, const gchar *email);
+
+/* p=<phone-number> */
+guint                   gst_sdp_message_phones_len          (const GstSDPMessage *msg);
+const gchar*            gst_sdp_message_get_phone           (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_phone           (GstSDPMessage *msg, const gchar *phone);
+
+/* c=<nettype> <addrtype> <connection-address>[/<ttl>][/<number of addresses>] */
+const GstSDPConnection* gst_sdp_message_get_connection      (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_connection      (GstSDPMessage *msg, const gchar *nettype,
+                                                             const gchar *addrtype, const gchar *address,
+                                                             guint ttl, guint addr_number);
+/* b=<bwtype>:<bandwidth> */
+guint                   gst_sdp_message_bandwidths_len      (const GstSDPMessage *msg);
+const GstSDPBandwidth*  gst_sdp_message_get_bandwidth       (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_bandwidth       (GstSDPMessage *msg, const gchar *bwtype,
+                                                             guint bandwidth);
+/* t=<start-time> <stop-time> and
+ * r=<repeat interval> <active duration> <offsets from start-time> */
+guint                   gst_sdp_message_times_len           (const GstSDPMessage *msg);
+const GstSDPTime*       gst_sdp_message_get_time            (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_time            (GstSDPMessage *msg, const gchar *start, const gchar *stop, const gchar **repeat);
+
+/* z=<adjustment time> <offset> <adjustment time> <offset> .... */
+guint                   gst_sdp_message_zones_len           (const GstSDPMessage *msg);
+const GstSDPZone*       gst_sdp_message_get_zone            (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_zone            (GstSDPMessage *msg, const gchar *adj_time,
+                                                             const gchar *typed_time);
+
+/* k=<method>[:<encryption key>] */
+const GstSDPKey*        gst_sdp_message_get_key             (const GstSDPMessage *msg);
+GstSDPResult            gst_sdp_message_set_key             (GstSDPMessage *msg, const gchar *type,
+                                                             const gchar *data);
+/* a=... */
+guint                   gst_sdp_message_attributes_len      (const GstSDPMessage *msg);
+const GstSDPAttribute*  gst_sdp_message_get_attribute       (const GstSDPMessage *msg, guint idx);
+const gchar*            gst_sdp_message_get_attribute_val   (const GstSDPMessage *msg, const gchar *key);
+const gchar*            gst_sdp_message_get_attribute_val_n (const GstSDPMessage *msg, const gchar *key,
+                                                             guint nth);
+GstSDPResult            gst_sdp_message_add_attribute       (GstSDPMessage *msg, const gchar *key,
+                                                             const gchar *value);
+
+/* m=.. sections */
+guint                   gst_sdp_message_medias_len          (const GstSDPMessage *msg);
+const GstSDPMedia*      gst_sdp_message_get_media           (const GstSDPMessage *msg, guint idx);
+GstSDPResult            gst_sdp_message_add_media           (GstSDPMessage *msg, GstSDPMedia *media);
+
+GstSDPResult            gst_sdp_message_dump                (const GstSDPMessage *msg);
+
+/* Media descriptions */
+GstSDPResult            gst_sdp_media_new                   (GstSDPMedia **media);
+GstSDPResult            gst_sdp_media_init                  (GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_uninit                (GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_free                  (GstSDPMedia *media);
+
+gchar*                  gst_sdp_media_as_text               (const GstSDPMedia *media);
+
+/* m=<media> <port>/<number of ports> <proto> <fmt> ... */
+const gchar*            gst_sdp_media_get_media             (const GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_set_media             (GstSDPMedia *media, const gchar *med);
+
+guint                   gst_sdp_media_get_port              (const GstSDPMedia *media);
+guint                   gst_sdp_media_get_num_ports         (const GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_set_port_info         (GstSDPMedia *media, guint port,
+                                                             guint num_ports);
+
+const gchar*            gst_sdp_media_get_proto             (const GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_set_proto             (GstSDPMedia *media, const gchar *proto);
+
+guint                   gst_sdp_media_formats_len           (const GstSDPMedia *media);
+const gchar*            gst_sdp_media_get_format            (const GstSDPMedia *media, guint idx);
+GstSDPResult            gst_sdp_media_add_format            (GstSDPMedia *media, const gchar *format);
+
+/* i=<session description> */
+const gchar*            gst_sdp_media_get_information       (const GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_set_information       (GstSDPMedia *media, const gchar *information);
+
+/* c=<nettype> <addrtype> <connection-address>[/<ttl>][/<number of addresses>] */
+guint                   gst_sdp_media_connections_len       (const GstSDPMedia *media);
+const GstSDPConnection* gst_sdp_media_get_connection        (const GstSDPMedia *media, guint idx);
+GstSDPResult            gst_sdp_media_add_connection        (GstSDPMedia *media, const gchar *nettype,
+                                                             const gchar *addrtype, const gchar *address,
+                                                             guint ttl, guint addr_number);
+
+/* b=<bwtype>:<bandwidth> */
+guint                   gst_sdp_media_bandwidths_len        (const GstSDPMedia *media);
+const GstSDPBandwidth*  gst_sdp_media_get_bandwidth         (const GstSDPMedia *media, guint idx);
+GstSDPResult            gst_sdp_media_add_bandwidth         (GstSDPMedia *media, const gchar *bwtype,
+                                                             guint bandwidth);
+
+/* k=<method>:<encryption key> */
+const GstSDPKey*        gst_sdp_media_get_key               (const GstSDPMedia *media);
+GstSDPResult            gst_sdp_media_set_key               (GstSDPMedia *media, const gchar *type,
+                                                             const gchar *data);
+/* a=... */
+guint                   gst_sdp_media_attributes_len        (const GstSDPMedia *media);
+const GstSDPAttribute * gst_sdp_media_get_attribute         (const GstSDPMedia *media, guint idx);
+const gchar*            gst_sdp_media_get_attribute_val     (const GstSDPMedia *media, const gchar *key);
+const gchar*            gst_sdp_media_get_attribute_val_n   (const GstSDPMedia *media, const gchar *key,
+                                                             guint nth);
+GstSDPResult            gst_sdp_media_add_attribute         (GstSDPMedia *media, const gchar *key,
+                                                             const gchar *value);
+
+G_END_DECLS
+
+#endif /* __GST_SDP_MESSAGE_H__ */
diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am
new file mode 100644
index 0000000..39fc3d8
--- /dev/null
+++ b/gst-libs/gst/tag/Makefile.am
@@ -0,0 +1,120 @@
+libgsttagincludedir = \
+	$(includedir)/gstreamer-@GST_MAJORMINOR@/gst/tag
+
+libgsttaginclude_HEADERS = \
+	tag.h gsttagdemux.h gsttagmux.h xmpwriter.h
+
+lib_LTLIBRARIES = libgsttag-@GST_MAJORMINOR@.la
+
+libgsttag_@GST_MAJORMINOR@_la_SOURCES = \
+	gstvorbistag.c gstid3tag.c gstxmptag.c gstexiftag.c \
+	lang.c licenses.c tags.c gsttagdemux.c gsttagmux.c \
+	gsttageditingprivate.c id3v2.c id3v2frames.c xmpwriter.c
+
+libgsttag_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ZLIB_CFLAGS) \
+	-DLICENSE_TRANSLATIONS_PATH=\"$(pkgdatadir)/license-translations.dict\"
+libgsttag_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(ZLIB_LIBS)
+libgsttag_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+# lang-tables.dat contains generated static data and is included by lang.c
+# licenses-tables.dat contains generated data and is included by licenses.c
+EXTRA_DIST = lang-tables.dat licenses-tables.dat license-translations.dict
+
+noinst_HEADERS = gsttageditingprivate.h id3v2.h
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstTag-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgsttaginclude_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgsttag_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/tag/%',$(libgsttaginclude_HEADERS))
+
+GstTag-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstTag \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgsttag-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-tag-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+# little program that reads iso_639.xml and outputs tables for us as fallback
+# for when iso-codes are not available (and so we don't have to read the xml
+# just to map codes)
+mklangtables_SOURCES = mklangtables.c
+mklangtables_CFLAGS = $(GST_CFLAGS)
+mklangtables_LDADD = $(GST_LIBS)
+
+mklicensestables_SOURCES = mklicensestables.c
+mklicensestables_CFLAGS = $(GST_CFLAGS)
+mklicensestables_LDADD = $(GST_LIBS)
+
+EXTRA_PROGRAMS = mklangtables mklicensestables
+
+update-isocodes: mklangtables
+	$(builddir)/mklangtables > $(srcdir)/lang-tables.dat && \
+		echo "Updated lang-tables.dat"
+
+update-licenses: mklicensestables
+	$(builddir)/mklicensestables \
+		--translation-dictionary=$(srcdir)/license-translations.dict \
+		> $(srcdir)/licenses-tables.dat && \
+		echo "Updated licenses-tables.dat and license-translations.dict"
+
+#if USE_NLS
+# Yes, this is not great, but it's only an implementation detail. The
+# translations come from an external source here, so we don't want the
+# strings retranslated, but also we don't want to create 30 1kB .mo files,
+# so just do something for now, we can change it later if someone really cares.
+licensetransdir = $(pkgdatadir)
+licensetrans_DATA = $(srcdir)/license-translations.dict
+#endif
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttag_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttag_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgsttag_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgsttaginclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/tag/Makefile.in b/gst-libs/gst/tag/Makefile.in
new file mode 100644
index 0000000..0f2c7b4
--- /dev/null
+++ b/gst-libs/gst/tag/Makefile.in
@@ -0,0 +1,1129 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+EXTRA_PROGRAMS = mklangtables$(EXEEXT) mklicensestables$(EXEEXT)
+subdir = gst-libs/gst/tag
+DIST_COMMON = $(libgsttaginclude_HEADERS) $(noinst_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(licensetransdir)" "$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgsttagincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgsttag_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgsttag_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo \
+	libgsttag_@GST_MAJORMINOR@_la-lang.lo \
+	libgsttag_@GST_MAJORMINOR@_la-licenses.lo \
+	libgsttag_@GST_MAJORMINOR@_la-tags.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo \
+	libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo \
+	libgsttag_@GST_MAJORMINOR@_la-id3v2.lo \
+	libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo \
+	libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo
+libgsttag_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgsttag_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgsttag_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgsttag_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+am_mklangtables_OBJECTS = mklangtables-mklangtables.$(OBJEXT)
+mklangtables_OBJECTS = $(am_mklangtables_OBJECTS)
+mklangtables_DEPENDENCIES = $(am__DEPENDENCIES_1)
+mklangtables_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mklangtables_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_mklicensestables_OBJECTS =  \
+	mklicensestables-mklicensestables.$(OBJEXT)
+mklicensestables_OBJECTS = $(am_mklicensestables_OBJECTS)
+mklicensestables_DEPENDENCIES = $(am__DEPENDENCIES_1)
+mklicensestables_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(mklicensestables_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgsttag_@GST_MAJORMINOR@_la_SOURCES) \
+	$(mklangtables_SOURCES) $(mklicensestables_SOURCES)
+DIST_SOURCES = $(libgsttag_@GST_MAJORMINOR@_la_SOURCES) \
+	$(mklangtables_SOURCES) $(mklicensestables_SOURCES)
+DATA = $(gir_DATA) $(licensetrans_DATA) $(typelibs_DATA)
+HEADERS = $(libgsttaginclude_HEADERS) $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libgsttagincludedir = \
+	$(includedir)/gstreamer-@GST_MAJORMINOR@/gst/tag
+
+libgsttaginclude_HEADERS = \
+	tag.h gsttagdemux.h gsttagmux.h xmpwriter.h
+
+lib_LTLIBRARIES = libgsttag-@GST_MAJORMINOR@.la
+libgsttag_@GST_MAJORMINOR@_la_SOURCES = \
+	gstvorbistag.c gstid3tag.c gstxmptag.c gstexiftag.c \
+	lang.c licenses.c tags.c gsttagdemux.c gsttagmux.c \
+	gsttageditingprivate.c id3v2.c id3v2frames.c xmpwriter.c
+
+libgsttag_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ZLIB_CFLAGS) \
+	-DLICENSE_TRANSLATIONS_PATH=\"$(pkgdatadir)/license-translations.dict\"
+
+libgsttag_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(ZLIB_LIBS)
+libgsttag_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+# lang-tables.dat contains generated static data and is included by lang.c
+# licenses-tables.dat contains generated data and is included by licenses.c
+EXTRA_DIST = lang-tables.dat licenses-tables.dat license-translations.dict
+noinst_HEADERS = gsttageditingprivate.h id3v2.h
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstTag-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgsttaginclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgsttag_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst %,--c-include='gst/tag/%',$(libgsttaginclude_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+
+# little program that reads iso_639.xml and outputs tables for us as fallback
+# for when iso-codes are not available (and so we don't have to read the xml
+# just to map codes)
+mklangtables_SOURCES = mklangtables.c
+mklangtables_CFLAGS = $(GST_CFLAGS)
+mklangtables_LDADD = $(GST_LIBS)
+mklicensestables_SOURCES = mklicensestables.c
+mklicensestables_CFLAGS = $(GST_CFLAGS)
+mklicensestables_LDADD = $(GST_LIBS)
+
+#if USE_NLS
+# Yes, this is not great, but it's only an implementation detail. The
+# translations come from an external source here, so we don't want the
+# strings retranslated, but also we don't want to create 30 1kB .mo files,
+# so just do something for now, we can change it later if someone really cares.
+licensetransdir = $(pkgdatadir)
+licensetrans_DATA = $(srcdir)/license-translations.dict
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgsttag-@GST_MAJORMINOR@.la: $(libgsttag_@GST_MAJORMINOR@_la_OBJECTS) $(libgsttag_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsttag_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgsttag_@GST_MAJORMINOR@_la_OBJECTS) $(libgsttag_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+mklangtables$(EXEEXT): $(mklangtables_OBJECTS) $(mklangtables_DEPENDENCIES) 
+	@rm -f mklangtables$(EXEEXT)
+	$(AM_V_CCLD)$(mklangtables_LINK) $(mklangtables_OBJECTS) $(mklangtables_LDADD) $(LIBS)
+mklicensestables$(EXEEXT): $(mklicensestables_OBJECTS) $(mklicensestables_DEPENDENCIES) 
+	@rm -f mklicensestables$(EXEEXT)
+	$(AM_V_CCLD)$(mklicensestables_LINK) $(mklicensestables_OBJECTS) $(mklicensestables_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstexiftag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstid3tag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagmux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstxmptag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2frames.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-licenses.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-tags.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-xmpwriter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mklangtables-mklangtables.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mklicensestables-mklicensestables.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo: gstvorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo `test -f 'gstvorbistag.c' || echo '$(srcdir)/'`gstvorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvorbistag.c' object='libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gstvorbistag.lo `test -f 'gstvorbistag.c' || echo '$(srcdir)/'`gstvorbistag.c
+
+libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo: gstid3tag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstid3tag.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo `test -f 'gstid3tag.c' || echo '$(srcdir)/'`gstid3tag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstid3tag.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstid3tag.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstid3tag.c' object='libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gstid3tag.lo `test -f 'gstid3tag.c' || echo '$(srcdir)/'`gstid3tag.c
+
+libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo: gstxmptag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstxmptag.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo `test -f 'gstxmptag.c' || echo '$(srcdir)/'`gstxmptag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstxmptag.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstxmptag.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstxmptag.c' object='libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gstxmptag.lo `test -f 'gstxmptag.c' || echo '$(srcdir)/'`gstxmptag.c
+
+libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo: gstexiftag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstexiftag.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo `test -f 'gstexiftag.c' || echo '$(srcdir)/'`gstexiftag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstexiftag.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gstexiftag.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstexiftag.c' object='libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gstexiftag.lo `test -f 'gstexiftag.c' || echo '$(srcdir)/'`gstexiftag.c
+
+libgsttag_@GST_MAJORMINOR@_la-lang.lo: lang.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-lang.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-lang.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-lang.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-lang.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='lang.c' object='libgsttag_@GST_MAJORMINOR@_la-lang.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c
+
+libgsttag_@GST_MAJORMINOR@_la-licenses.lo: licenses.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-licenses.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-licenses.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-licenses.lo `test -f 'licenses.c' || echo '$(srcdir)/'`licenses.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-licenses.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-licenses.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='licenses.c' object='libgsttag_@GST_MAJORMINOR@_la-licenses.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-licenses.lo `test -f 'licenses.c' || echo '$(srcdir)/'`licenses.c
+
+libgsttag_@GST_MAJORMINOR@_la-tags.lo: tags.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-tags.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-tags.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-tags.lo `test -f 'tags.c' || echo '$(srcdir)/'`tags.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-tags.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-tags.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tags.c' object='libgsttag_@GST_MAJORMINOR@_la-tags.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-tags.lo `test -f 'tags.c' || echo '$(srcdir)/'`tags.c
+
+libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo: gsttagdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo `test -f 'gsttagdemux.c' || echo '$(srcdir)/'`gsttagdemux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttagdemux.c' object='libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gsttagdemux.lo `test -f 'gsttagdemux.c' || echo '$(srcdir)/'`gsttagdemux.c
+
+libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo: gsttagmux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagmux.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo `test -f 'gsttagmux.c' || echo '$(srcdir)/'`gsttagmux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagmux.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttagmux.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttagmux.c' object='libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gsttagmux.lo `test -f 'gsttagmux.c' || echo '$(srcdir)/'`gsttagmux.c
+
+libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo: gsttageditingprivate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo `test -f 'gsttageditingprivate.c' || echo '$(srcdir)/'`gsttageditingprivate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttageditingprivate.c' object='libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-gsttageditingprivate.lo `test -f 'gsttageditingprivate.c' || echo '$(srcdir)/'`gsttageditingprivate.c
+
+libgsttag_@GST_MAJORMINOR@_la-id3v2.lo: id3v2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-id3v2.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-id3v2.lo `test -f 'id3v2.c' || echo '$(srcdir)/'`id3v2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='id3v2.c' object='libgsttag_@GST_MAJORMINOR@_la-id3v2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-id3v2.lo `test -f 'id3v2.c' || echo '$(srcdir)/'`id3v2.c
+
+libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo: id3v2frames.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2frames.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo `test -f 'id3v2frames.c' || echo '$(srcdir)/'`id3v2frames.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2frames.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-id3v2frames.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='id3v2frames.c' object='libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-id3v2frames.lo `test -f 'id3v2frames.c' || echo '$(srcdir)/'`id3v2frames.c
+
+libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo: xmpwriter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo -MD -MP -MF $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-xmpwriter.Tpo -c -o libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo `test -f 'xmpwriter.c' || echo '$(srcdir)/'`xmpwriter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-xmpwriter.Tpo $(DEPDIR)/libgsttag_@GST_MAJORMINOR@_la-xmpwriter.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmpwriter.c' object='libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgsttag_@GST_MAJORMINOR@_la-xmpwriter.lo `test -f 'xmpwriter.c' || echo '$(srcdir)/'`xmpwriter.c
+
+mklangtables-mklangtables.o: mklangtables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklangtables_CFLAGS) $(CFLAGS) -MT mklangtables-mklangtables.o -MD -MP -MF $(DEPDIR)/mklangtables-mklangtables.Tpo -c -o mklangtables-mklangtables.o `test -f 'mklangtables.c' || echo '$(srcdir)/'`mklangtables.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mklangtables-mklangtables.Tpo $(DEPDIR)/mklangtables-mklangtables.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mklangtables.c' object='mklangtables-mklangtables.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklangtables_CFLAGS) $(CFLAGS) -c -o mklangtables-mklangtables.o `test -f 'mklangtables.c' || echo '$(srcdir)/'`mklangtables.c
+
+mklangtables-mklangtables.obj: mklangtables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklangtables_CFLAGS) $(CFLAGS) -MT mklangtables-mklangtables.obj -MD -MP -MF $(DEPDIR)/mklangtables-mklangtables.Tpo -c -o mklangtables-mklangtables.obj `if test -f 'mklangtables.c'; then $(CYGPATH_W) 'mklangtables.c'; else $(CYGPATH_W) '$(srcdir)/mklangtables.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mklangtables-mklangtables.Tpo $(DEPDIR)/mklangtables-mklangtables.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mklangtables.c' object='mklangtables-mklangtables.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklangtables_CFLAGS) $(CFLAGS) -c -o mklangtables-mklangtables.obj `if test -f 'mklangtables.c'; then $(CYGPATH_W) 'mklangtables.c'; else $(CYGPATH_W) '$(srcdir)/mklangtables.c'; fi`
+
+mklicensestables-mklicensestables.o: mklicensestables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklicensestables_CFLAGS) $(CFLAGS) -MT mklicensestables-mklicensestables.o -MD -MP -MF $(DEPDIR)/mklicensestables-mklicensestables.Tpo -c -o mklicensestables-mklicensestables.o `test -f 'mklicensestables.c' || echo '$(srcdir)/'`mklicensestables.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mklicensestables-mklicensestables.Tpo $(DEPDIR)/mklicensestables-mklicensestables.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mklicensestables.c' object='mklicensestables-mklicensestables.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklicensestables_CFLAGS) $(CFLAGS) -c -o mklicensestables-mklicensestables.o `test -f 'mklicensestables.c' || echo '$(srcdir)/'`mklicensestables.c
+
+mklicensestables-mklicensestables.obj: mklicensestables.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklicensestables_CFLAGS) $(CFLAGS) -MT mklicensestables-mklicensestables.obj -MD -MP -MF $(DEPDIR)/mklicensestables-mklicensestables.Tpo -c -o mklicensestables-mklicensestables.obj `if test -f 'mklicensestables.c'; then $(CYGPATH_W) 'mklicensestables.c'; else $(CYGPATH_W) '$(srcdir)/mklicensestables.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/mklicensestables-mklicensestables.Tpo $(DEPDIR)/mklicensestables-mklicensestables.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mklicensestables.c' object='mklicensestables-mklicensestables.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mklicensestables_CFLAGS) $(CFLAGS) -c -o mklicensestables-mklicensestables.obj `if test -f 'mklicensestables.c'; then $(CYGPATH_W) 'mklicensestables.c'; else $(CYGPATH_W) '$(srcdir)/mklicensestables.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-licensetransDATA: $(licensetrans_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(licensetransdir)" || $(MKDIR_P) "$(DESTDIR)$(licensetransdir)"
+	@list='$(licensetrans_DATA)'; test -n "$(licensetransdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(licensetransdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(licensetransdir)" || exit $$?; \
+	done
+
+uninstall-licensetransDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(licensetrans_DATA)'; test -n "$(licensetransdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(licensetransdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(licensetransdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgsttagincludeHEADERS: $(libgsttaginclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgsttagincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libgsttagincludedir)"
+	@list='$(libgsttaginclude_HEADERS)'; test -n "$(libgsttagincludedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgsttagincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgsttagincludedir)" || exit $$?; \
+	done
+
+uninstall-libgsttagincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgsttaginclude_HEADERS)'; test -n "$(libgsttagincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgsttagincludedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgsttagincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(licensetransdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgsttagincludedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA install-libgsttagincludeHEADERS \
+	install-licensetransDATA install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgsttagincludeHEADERS uninstall-licensetransDATA \
+	uninstall-typelibsDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-libgsttagincludeHEADERS \
+	install-licensetransDATA install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	install-typelibsDATA installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgsttagincludeHEADERS uninstall-licensetransDATA \
+	uninstall-typelibsDATA
+
+
+@HAVE_INTROSPECTION_TRUE@GstTag-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstTag \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgsttag-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-tag-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+update-isocodes: mklangtables
+	$(builddir)/mklangtables > $(srcdir)/lang-tables.dat && \
+		echo "Updated lang-tables.dat"
+
+update-licenses: mklicensestables
+	$(builddir)/mklicensestables \
+		--translation-dictionary=$(srcdir)/license-translations.dict \
+		> $(srcdir)/licenses-tables.dat && \
+		echo "Updated licenses-tables.dat and license-translations.dict"
+#endif
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttag_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgsttag_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttag_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgsttag_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgsttaginclude_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/tag/gstexiftag.c b/gst-libs/gst/tag/gstexiftag.c
new file mode 100644
index 0000000..967f535
--- /dev/null
+++ b/gst-libs/gst/tag/gstexiftag.c
@@ -0,0 +1,2751 @@
+/* GStreamer
+ * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * gstexiftag.c: library for reading / modifying exif tags
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagexif
+ * @short_description: tag mappings and support functions for plugins
+ *                     dealing with exif tags
+ * @see_also: #GstTagList
+ *
+ * Contains utility function to parse #GstTagList<!-- -->s from exif
+ * buffers and to create exif buffers from #GstTagList<!-- -->s
+ *
+ * Note that next IFD fields on the created exif buffers are set to 0.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gsttagsetter.h>
+#include <gst/base/gstbytewriter.h>
+#include "gsttageditingprivate.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gst/math-compat.h>
+
+/* Some useful constants */
+#define TIFF_LITTLE_ENDIAN  0x4949
+#define TIFF_BIG_ENDIAN     0x4D4D
+#define TIFF_HEADER_SIZE    8
+#define EXIF_TAG_ENTRY_SIZE (2 + 2 + 4 + 4)
+
+/* Exif tag types */
+#define EXIF_TYPE_BYTE       1
+#define EXIF_TYPE_ASCII      2
+#define EXIF_TYPE_SHORT      3
+#define EXIF_TYPE_LONG       4
+#define EXIF_TYPE_RATIONAL   5
+#define EXIF_TYPE_UNDEFINED  7
+#define EXIF_TYPE_SLONG      9
+#define EXIF_TYPE_SRATIONAL 10
+
+typedef struct _GstExifTagMatch GstExifTagMatch;
+typedef struct _GstExifWriter GstExifWriter;
+typedef struct _GstExifReader GstExifReader;
+typedef struct _GstExifTagData GstExifTagData;
+
+typedef void (*GstExifSerializationFunc) (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag);
+
+/*
+ * Function used to deserialize tags that don't follow the usual
+ * deserialization conversions. Usually those that have 'Ref' complementary
+ * tags.
+ *
+ * Those functions receive a exif tag data in the parameters, plus the taglist
+ * and the reader and buffer if they need to get more information to build
+ * its tags. There are lots of parameters, but this is needed to make it
+ * versatile. Explanation of them follows:
+ *
+ * exif_reader: The #GstExifReader with the reading parameter and taglist for
+ * results.
+ * reader: The #GstByteReader pointing to the start of the next tag entry in
+ * the ifd, useful for tags that use other complementary tags.
+ * the buffer start
+ * exiftag: The #GstExifTagMatch that contains this tag info
+ * tagdata: values from the already parsed tag
+ */
+typedef gint (*GstExifDeserializationFunc) (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata);
+
+#define EXIF_SERIALIZATION_FUNC(name) \
+static void serialize_ ## name (GstExifWriter * writer, \
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+
+#define EXIF_DESERIALIZATION_FUNC(name) \
+static gint deserialize_ ## name (GstExifReader * exif_reader, \
+    GstByteReader * reader, const GstExifTagMatch * exiftag, \
+    GstExifTagData * tagdata)
+
+#define EXIF_SERIALIZATION_DESERIALIZATION_FUNC(name) \
+  EXIF_SERIALIZATION_FUNC (name); \
+  EXIF_DESERIALIZATION_FUNC (name)
+
+/*
+ * A common case among serialization/deserialization routines is that
+ * the gstreamer tag is a string (with a predefined set of allowed values)
+ * and exif is an int. These macros cover these cases
+ */
+#define EXIF_SERIALIZATION_MAP_STRING_TO_INT_FUNC(name,funcname) \
+static void \
+serialize_ ## name (GstExifWriter * writer, const GstTagList * taglist, \
+    const GstExifTagMatch * exiftag) \
+{ \
+  gchar *str = NULL; \
+  gint exif_value; \
+\
+  if (!gst_tag_list_get_string_index (taglist, exiftag->gst_tag, 0, &str)) { \
+    GST_WARNING ("No %s tag present in taglist", exiftag->gst_tag); \
+    return; \
+  } \
+\
+  exif_value = __exif_tag_ ## funcname ## _to_exif_value (str); \
+  if (exif_value == -1) { \
+    g_free (str); \
+    return; \
+  } \
+  g_free (str); \
+\
+  switch (exiftag->exif_type) { \
+    case EXIF_TYPE_SHORT: \
+      gst_exif_writer_write_short_tag (writer, exiftag->exif_tag, exif_value); \
+      break; \
+    case EXIF_TYPE_LONG: \
+      gst_exif_writer_write_long_tag (writer, exiftag->exif_tag, exif_value); \
+      break; \
+    case EXIF_TYPE_UNDEFINED: \
+    { \
+        guint8 data = (guint8) exif_value; \
+        write_exif_undefined_tag (writer, exiftag->exif_tag, &data, 1); \
+    } \
+      break; \
+    default: \
+      g_assert_not_reached (); \
+      GST_WARNING ("Unmapped serialization for type %d", exiftag->exif_type); \
+      break; \
+   } \
+}
+
+#define EXIF_DESERIALIZATION_MAP_STRING_TO_INT_FUNC(name,funcname) \
+static gint \
+deserialize_ ## name (GstExifReader * exif_reader, \
+    GstByteReader * reader, const GstExifTagMatch * exiftag, \
+    GstExifTagData * tagdata) \
+{ \
+  const gchar *str = NULL; \
+  gint value; \
+\
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag, \
+      exiftag->exif_tag); \
+\
+  /* validate tag */ \
+  if (tagdata->count != 1) { \
+    GST_WARNING ("0x%X has unexpected count", tagdata->count); \
+    return 0; \
+  } \
+\
+  if (tagdata->tag_type == EXIF_TYPE_SHORT) { \
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) { \
+      value = GST_READ_UINT16_LE (tagdata->offset_as_data); \
+    } else { \
+      value = GST_READ_UINT16_BE (tagdata->offset_as_data); \
+    } \
+  } else if (tagdata->tag_type == EXIF_TYPE_UNDEFINED) { \
+    value = GST_READ_UINT8 (tagdata->offset_as_data); \
+  } else { \
+    GST_WARNING ("0x%X has unexpected type %d", exiftag->exif_tag, \
+        tagdata->tag_type); \
+    return 0; \
+  } \
+\
+  str = __exif_tag_## funcname ## _from_exif_value (value); \
+  if (str == NULL) { \
+    GST_WARNING ("Invalid value for tag 0x%X: %d", tagdata->tag, value); \
+    return 0; \
+  } \
+  gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE, \
+      exiftag->gst_tag, str, NULL); \
+\
+  return 0; \
+}
+
+#define EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC(name,funcname) \
+  EXIF_SERIALIZATION_MAP_STRING_TO_INT_FUNC(name,funcname); \
+  EXIF_DESERIALIZATION_MAP_STRING_TO_INT_FUNC(name,funcname);
+
+struct _GstExifTagMatch
+{
+  const gchar *gst_tag;
+  guint16 exif_tag;
+  guint16 exif_type;
+
+  /* for tags that need special handling */
+  guint16 complementary_tag;
+  GstExifSerializationFunc serialize;
+  GstExifDeserializationFunc deserialize;
+};
+
+struct _GstExifTagData
+{
+  guint16 tag;
+  guint16 tag_type;
+  guint32 count;
+  guint32 offset;
+  const guint8 *offset_as_data;
+};
+
+/*
+ * Holds the info and variables necessary to write
+ * the exif tags properly
+ */
+struct _GstExifWriter
+{
+  GstByteWriter tagwriter;
+  GstByteWriter datawriter;
+
+  gint byte_order;
+  guint tags_total;
+};
+
+struct _GstExifReader
+{
+  GstTagList *taglist;
+  GstBuffer *buffer;
+  guint32 base_offset;
+  gint byte_order;
+
+  /* tags waiting for their complementary tags */
+  GSList *pending_tags;
+};
+
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (aperture_value);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (contrast);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (exposure_program);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (exposure_mode);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (flash);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (gain_control);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (geo_coordinate);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (geo_direction);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (geo_elevation);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (metering_mode);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (orientation);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (saturation);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (scene_capture_type);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (scene_type);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (sensitivity_type);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (sharpness);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (shutter_speed);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (source);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (speed);
+EXIF_SERIALIZATION_DESERIALIZATION_FUNC (white_balance);
+
+EXIF_DESERIALIZATION_FUNC (resolution);
+EXIF_DESERIALIZATION_FUNC (add_to_pending_tags);
+
+/* FIXME copyright tag has a weird "artist\0editor\0" format that is
+ * not yet handled */
+
+/* exif tag numbers */
+#define EXIF_TAG_GPS_LATITUDE_REF 0x1
+#define EXIF_TAG_GPS_LATITUDE 0x2
+#define EXIF_TAG_GPS_LONGITUDE_REF 0x3
+#define EXIF_TAG_GPS_LONGITUDE 0x4
+#define EXIF_TAG_GPS_ALTITUDE_REF 0x5
+#define EXIF_TAG_GPS_ALTITUDE 0x6
+#define EXIF_TAG_GPS_SPEED_REF 0xC
+#define EXIF_TAG_GPS_SPEED 0xD
+#define EXIF_TAG_GPS_TRACK_REF 0xE
+#define EXIF_TAG_GPS_TRACK 0xF
+#define EXIF_TAG_GPS_IMAGE_DIRECTION_REF 0x10
+#define EXIF_TAG_GPS_IMAGE_DIRECTION 0x11
+#define EXIF_TAG_GPS_HORIZONTAL_POSITIONING_ERROR 0x1F
+#define EXIF_TAG_IMAGE_DESCRIPTION 0x10E
+#define EXIF_TAG_MAKE 0x10F
+#define EXIF_TAG_MODEL 0x110
+#define EXIF_TAG_ORIENTATION 0x112
+#define EXIF_TAG_XRESOLUTION 0x11A
+#define EXIF_TAG_YRESOLUTION 0x11B
+#define EXIF_TAG_RESOLUTION_UNIT 0x128
+#define EXIF_TAG_SOFTWARE 0x131
+#define EXIF_TAG_DATE_TIME 0x132
+#define EXIF_TAG_ARTIST 0x13B
+#define EXIF_TAG_COPYRIGHT 0x8298
+#define EXIF_TAG_EXPOSURE_TIME 0x829A
+#define EXIF_TAG_F_NUMBER 0x829D
+#define EXIF_TAG_EXPOSURE_PROGRAM 0x8822
+#define EXIF_TAG_PHOTOGRAPHIC_SENSITIVITY 0x8827
+#define EXIF_TAG_SENSITIVITY_TYPE 0x8830
+#define EXIF_TAG_ISO_SPEED 0x8833
+#define EXIF_TAG_DATE_TIME_ORIGINAL 0x9003
+#define EXIF_TAG_DATE_TIME_DIGITIZED 0x9004
+#define EXIF_TAG_SHUTTER_SPEED_VALUE 0x9201
+#define EXIF_TAG_APERTURE_VALUE 0x9202
+#define EXIF_TAG_EXPOSURE_BIAS 0x9204
+#define EXIF_TAG_METERING_MODE 0x9207
+#define EXIF_TAG_FLASH 0x9209
+#define EXIF_TAG_FOCAL_LENGTH 0x920A
+#define EXIF_TAG_MAKER_NOTE 0x927C
+#define EXIF_TAG_FILE_SOURCE 0xA300
+#define EXIF_TAG_SCENE_TYPE 0xA301
+#define EXIF_TAG_EXPOSURE_MODE 0xA402
+#define EXIF_TAG_WHITE_BALANCE 0xA403
+#define EXIF_TAG_DIGITAL_ZOOM_RATIO 0xA404
+#define EXIF_TAG_SCENE_CAPTURE_TYPE 0xA406
+#define EXIF_TAG_GAIN_CONTROL 0xA407
+#define EXIF_TAG_CONTRAST 0xA408
+#define EXIF_TAG_SATURATION 0xA409
+#define EXIF_TAG_SHARPNESS 0xA40A
+
+/* IFD pointer tags */
+#define EXIF_IFD_TAG 0x8769
+#define EXIF_GPS_IFD_TAG 0x8825
+
+/* version tags */
+#define EXIF_VERSION_TAG 0x9000
+#define EXIF_FLASHPIX_VERSION_TAG 0xA000
+
+/* useful macros for speed tag */
+#define METERS_PER_SECOND_TO_KILOMETERS_PER_HOUR (3.6)
+#define KILOMETERS_PER_HOUR_TO_METERS_PER_SECOND (1/3.6)
+#define MILES_PER_HOUR_TO_METERS_PER_SECOND (0.44704)
+#define KNOTS_TO_METERS_PER_SECOND (0.514444)
+
+/*
+ * Should be kept in ascending id order
+ *
+ * {gst-tag, exif-tag, exig-type, complementary-exif-tag, serialization-func,
+ *     deserialization-func}
+ */
+static const GstExifTagMatch tag_map_ifd0[] = {
+  {GST_TAG_IMAGE_HORIZONTAL_PPI, EXIF_TAG_XRESOLUTION, EXIF_TYPE_RATIONAL,
+      0, NULL, deserialize_add_to_pending_tags},
+  {GST_TAG_IMAGE_VERTICAL_PPI, EXIF_TAG_YRESOLUTION, EXIF_TYPE_RATIONAL,
+      0, NULL, deserialize_add_to_pending_tags},
+  {NULL, EXIF_TAG_RESOLUTION_UNIT, EXIF_TYPE_SHORT, 0, NULL,
+      deserialize_resolution},
+  {GST_TAG_DESCRIPTION, EXIF_TAG_IMAGE_DESCRIPTION, EXIF_TYPE_ASCII, 0, NULL,
+      NULL},
+  {GST_TAG_DEVICE_MANUFACTURER, EXIF_TAG_MAKE, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {GST_TAG_DEVICE_MODEL, EXIF_TAG_MODEL, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {GST_TAG_IMAGE_ORIENTATION, EXIF_TAG_ORIENTATION, EXIF_TYPE_SHORT, 0,
+        serialize_orientation,
+      deserialize_orientation},
+  {GST_TAG_APPLICATION_NAME, EXIF_TAG_SOFTWARE, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {GST_TAG_DATE_TIME, EXIF_TAG_DATE_TIME, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {GST_TAG_ARTIST, EXIF_TAG_ARTIST, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {GST_TAG_COPYRIGHT, EXIF_TAG_COPYRIGHT, EXIF_TYPE_ASCII, 0, NULL, NULL},
+  {NULL, EXIF_IFD_TAG, EXIF_TYPE_LONG, 0, NULL, NULL},
+  {NULL, EXIF_GPS_IFD_TAG, EXIF_TYPE_LONG, 0, NULL, NULL},
+  {NULL, 0, 0, 0, NULL, NULL}
+};
+
+static const GstExifTagMatch tag_map_exif[] = {
+  {GST_TAG_CAPTURING_SHUTTER_SPEED, EXIF_TAG_EXPOSURE_TIME, EXIF_TYPE_RATIONAL,
+        0,
+      NULL, NULL},
+  {GST_TAG_CAPTURING_FOCAL_RATIO, EXIF_TAG_F_NUMBER, EXIF_TYPE_RATIONAL, 0,
+        NULL,
+      NULL},
+  {GST_TAG_CAPTURING_EXPOSURE_PROGRAM, EXIF_TAG_EXPOSURE_PROGRAM,
+        EXIF_TYPE_SHORT, 0, serialize_exposure_program,
+      deserialize_exposure_program},
+
+  /* don't need the serializer as we always write the iso speed alone */
+  {GST_TAG_CAPTURING_ISO_SPEED, EXIF_TAG_PHOTOGRAPHIC_SENSITIVITY,
+        EXIF_TYPE_SHORT, 0, NULL,
+      deserialize_add_to_pending_tags},
+
+  {GST_TAG_CAPTURING_ISO_SPEED, EXIF_TAG_SENSITIVITY_TYPE, EXIF_TYPE_SHORT, 0,
+      serialize_sensitivity_type, deserialize_sensitivity_type},
+  {GST_TAG_CAPTURING_ISO_SPEED, EXIF_TAG_ISO_SPEED, EXIF_TYPE_LONG, 0, NULL,
+      NULL},
+  {NULL, EXIF_VERSION_TAG, EXIF_TYPE_UNDEFINED, 0, NULL, NULL},
+  {GST_TAG_DATE_TIME, EXIF_TAG_DATE_TIME_ORIGINAL, EXIF_TYPE_ASCII, 0, NULL,
+      NULL},
+  {GST_TAG_CAPTURING_SHUTTER_SPEED, EXIF_TAG_SHUTTER_SPEED_VALUE,
+        EXIF_TYPE_SRATIONAL, 0,
+      serialize_shutter_speed, deserialize_shutter_speed},
+  {GST_TAG_CAPTURING_FOCAL_RATIO, EXIF_TAG_APERTURE_VALUE, EXIF_TYPE_RATIONAL,
+        0,
+      serialize_aperture_value, deserialize_aperture_value},
+  {GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, EXIF_TAG_EXPOSURE_BIAS,
+      EXIF_TYPE_SRATIONAL, 0, NULL, NULL},
+  {GST_TAG_CAPTURING_METERING_MODE, EXIF_TAG_METERING_MODE, EXIF_TYPE_SHORT, 0,
+      serialize_metering_mode, deserialize_metering_mode},
+  {GST_TAG_CAPTURING_FLASH_FIRED, EXIF_TAG_FLASH, EXIF_TYPE_SHORT, 0,
+      serialize_flash, deserialize_flash},
+  {GST_TAG_CAPTURING_FOCAL_LENGTH, EXIF_TAG_FOCAL_LENGTH, EXIF_TYPE_RATIONAL, 0,
+      NULL, NULL},
+  {GST_TAG_APPLICATION_DATA, EXIF_TAG_MAKER_NOTE, EXIF_TYPE_UNDEFINED, 0, NULL,
+      NULL},
+  {NULL, EXIF_FLASHPIX_VERSION_TAG, EXIF_TYPE_UNDEFINED, 0, NULL, NULL},
+  {GST_TAG_CAPTURING_SOURCE, EXIF_TAG_FILE_SOURCE, EXIF_TYPE_UNDEFINED,
+      0, serialize_source, deserialize_source},
+  {GST_TAG_CAPTURING_SOURCE, EXIF_TAG_SCENE_TYPE, EXIF_TYPE_UNDEFINED,
+      0, serialize_scene_type, deserialize_scene_type},
+  {GST_TAG_CAPTURING_EXPOSURE_MODE, EXIF_TAG_EXPOSURE_MODE, EXIF_TYPE_SHORT,
+      0, serialize_exposure_mode, deserialize_exposure_mode},
+  {GST_TAG_CAPTURING_WHITE_BALANCE, EXIF_TAG_WHITE_BALANCE, EXIF_TYPE_SHORT,
+      0, serialize_white_balance, deserialize_white_balance},
+  {GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, EXIF_TAG_DIGITAL_ZOOM_RATIO,
+        EXIF_TYPE_RATIONAL, 0, NULL,
+      NULL},
+  {GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, EXIF_TAG_SCENE_CAPTURE_TYPE,
+        EXIF_TYPE_SHORT, 0, serialize_scene_capture_type,
+      deserialize_scene_capture_type},
+  {GST_TAG_CAPTURING_GAIN_ADJUSTMENT, EXIF_TAG_GAIN_CONTROL,
+        EXIF_TYPE_SHORT, 0, serialize_gain_control,
+      deserialize_gain_control},
+  {GST_TAG_CAPTURING_CONTRAST, EXIF_TAG_CONTRAST, EXIF_TYPE_SHORT, 0,
+      serialize_contrast, deserialize_contrast},
+  {GST_TAG_CAPTURING_SATURATION, EXIF_TAG_SATURATION, EXIF_TYPE_SHORT, 0,
+      serialize_saturation, deserialize_saturation},
+  {GST_TAG_CAPTURING_SHARPNESS, EXIF_TAG_SHARPNESS, EXIF_TYPE_SHORT, 0,
+      serialize_sharpness, deserialize_sharpness},
+  {NULL, 0, 0, 0, NULL, NULL}
+};
+
+static const GstExifTagMatch tag_map_gps[] = {
+  {GST_TAG_GEO_LOCATION_LATITUDE, EXIF_TAG_GPS_LATITUDE, EXIF_TYPE_RATIONAL,
+        EXIF_TAG_GPS_LATITUDE_REF,
+      serialize_geo_coordinate, deserialize_geo_coordinate},
+  {GST_TAG_GEO_LOCATION_LONGITUDE, EXIF_TAG_GPS_LONGITUDE, EXIF_TYPE_RATIONAL,
+        EXIF_TAG_GPS_LONGITUDE_REF,
+      serialize_geo_coordinate, deserialize_geo_coordinate},
+  {GST_TAG_GEO_LOCATION_ELEVATION, EXIF_TAG_GPS_ALTITUDE, EXIF_TYPE_RATIONAL,
+        EXIF_TAG_GPS_ALTITUDE_REF,
+      serialize_geo_elevation, deserialize_geo_elevation},
+  {GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, EXIF_TAG_GPS_SPEED, EXIF_TYPE_RATIONAL,
+        EXIF_TAG_GPS_SPEED_REF,
+      serialize_speed, deserialize_speed},
+  {GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, EXIF_TAG_GPS_TRACK,
+        EXIF_TYPE_RATIONAL, EXIF_TAG_GPS_TRACK_REF,
+      serialize_geo_direction, deserialize_geo_direction},
+  {GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, EXIF_TAG_GPS_IMAGE_DIRECTION,
+        EXIF_TYPE_RATIONAL, EXIF_TAG_GPS_IMAGE_DIRECTION_REF,
+      serialize_geo_direction, deserialize_geo_direction},
+  {GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR,
+        EXIF_TAG_GPS_HORIZONTAL_POSITIONING_ERROR,
+      EXIF_TYPE_RATIONAL, 0, NULL, NULL},
+  {NULL, 0, 0, 0, NULL, NULL}
+};
+
+/* GstExifReader functions */
+static void
+gst_exif_reader_init (GstExifReader * reader, gint byte_order,
+    GstBuffer * buf, guint32 base_offset)
+{
+  ensure_exif_tags ();
+
+  reader->taglist = gst_tag_list_new ();
+  reader->buffer = buf;
+  reader->base_offset = base_offset;
+  reader->byte_order = byte_order;
+  reader->pending_tags = NULL;
+  if (reader->byte_order != G_LITTLE_ENDIAN &&
+      reader->byte_order != G_BIG_ENDIAN) {
+    GST_WARNING ("Unexpected byte order %d, using system default: %d",
+        reader->byte_order, G_BYTE_ORDER);
+    reader->byte_order = G_BYTE_ORDER;
+  }
+}
+
+static void
+gst_exif_reader_add_pending_tag (GstExifReader * reader, GstExifTagData * data)
+{
+  GstExifTagData *copy;
+
+  copy = g_slice_new (GstExifTagData);
+  memcpy (copy, data, sizeof (GstExifTagData));
+
+  reader->pending_tags = g_slist_prepend (reader->pending_tags, copy);
+}
+
+static GstExifTagData *
+gst_exif_reader_get_pending_tag (GstExifReader * reader, gint tagid)
+{
+  GSList *walker;
+
+  for (walker = reader->pending_tags; walker; walker = g_slist_next (walker)) {
+    GstExifTagData *data = (GstExifTagData *) walker->data;
+    if (data->tag == tagid)
+      return data;
+  }
+
+  return NULL;
+}
+
+static GstTagList *
+gst_exif_reader_reset (GstExifReader * reader, gboolean return_taglist)
+{
+  GstTagList *ret = NULL;
+  GSList *walker;
+
+  for (walker = reader->pending_tags; walker; walker = g_slist_next (walker)) {
+    GstExifTagData *data = (GstExifTagData *) walker->data;
+
+    g_slice_free (GstExifTagData, data);
+  }
+  g_slist_free (reader->pending_tags);
+
+  if (return_taglist) {
+    ret = reader->taglist;
+    reader->taglist = NULL;
+  }
+
+  if (reader->taglist) {
+    gst_tag_list_free (reader->taglist);
+  }
+
+  return ret;
+}
+
+/* GstExifWriter functions */
+
+static void
+gst_exif_writer_init (GstExifWriter * writer, gint byte_order)
+{
+  ensure_exif_tags ();
+
+  gst_byte_writer_init (&writer->tagwriter);
+  gst_byte_writer_init (&writer->datawriter);
+
+  writer->byte_order = byte_order;
+  writer->tags_total = 0;
+  if (writer->byte_order != G_LITTLE_ENDIAN &&
+      writer->byte_order != G_BIG_ENDIAN) {
+    GST_WARNING ("Unexpected byte order %d, using system default: %d",
+        writer->byte_order, G_BYTE_ORDER);
+    writer->byte_order = G_BYTE_ORDER;
+  }
+}
+
+static GstBuffer *
+gst_exif_writer_reset_and_get_buffer (GstExifWriter * writer)
+{
+  GstBuffer *header;
+  GstBuffer *data;
+
+  header = gst_byte_writer_reset_and_get_buffer (&writer->tagwriter);
+  data = gst_byte_writer_reset_and_get_buffer (&writer->datawriter);
+
+  return gst_buffer_join (header, data);
+}
+
+/*
+ * Given the exif tag with the passed id, returns the map index of the tag
+ * corresponding to it. If use_complementary is true, then the complementary
+ * are also used in the search.
+ *
+ * Returns -1 if not found
+ */
+static gint
+exif_tag_map_find_reverse (guint16 exif_tag, const GstExifTagMatch * tag_map,
+    gboolean use_complementary)
+{
+  gint i;
+
+  for (i = 0; tag_map[i].exif_tag != 0; i++) {
+    if (exif_tag == tag_map[i].exif_tag || (use_complementary &&
+            exif_tag == tag_map[i].complementary_tag)) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+static gboolean
+gst_tag_list_has_ifd_tags (const GstTagList * taglist,
+    const GstExifTagMatch * tag_map)
+{
+  gint i;
+
+  for (i = 0; tag_map[i].exif_tag != 0; i++) {
+    if (tag_map[i].gst_tag == NULL) {
+      if (tag_map[i].exif_tag == EXIF_GPS_IFD_TAG &&
+          gst_tag_list_has_ifd_tags (taglist, tag_map_gps))
+        return TRUE;
+      if (tag_map[i].exif_tag == EXIF_IFD_TAG &&
+          gst_tag_list_has_ifd_tags (taglist, tag_map_exif))
+        return TRUE;
+      continue;
+    }
+
+    if (gst_tag_list_get_value_index (taglist, tag_map[i].gst_tag, 0)) {
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+/*
+ * Writes the tag entry.
+ *
+ * The tag entry is the tag id, the tag type,
+ * the count and the offset.
+ *
+ * The offset is the on the amount of data writen so far, as one
+ * can't predict the total bytes that the tag entries will take.
+ * This means those fields requires being updated later.
+ */
+static void
+gst_exif_writer_write_tag_header (GstExifWriter * writer,
+    guint16 exif_tag, guint16 exif_type, guint32 count, guint32 offset,
+    gboolean is_data)
+{
+  GST_DEBUG ("Writing tag entry: id %x, type %u, count %u, offset %u",
+      exif_tag, exif_type, count, offset);
+
+  if (writer->byte_order == G_LITTLE_ENDIAN) {
+    gst_byte_writer_put_uint16_le (&writer->tagwriter, exif_tag);
+    gst_byte_writer_put_uint16_le (&writer->tagwriter, exif_type);
+    gst_byte_writer_put_uint32_le (&writer->tagwriter, count);
+    gst_byte_writer_put_uint32_le (&writer->tagwriter, offset);
+  } else if (writer->byte_order == G_BIG_ENDIAN) {
+    gst_byte_writer_put_uint16_be (&writer->tagwriter, exif_tag);
+    gst_byte_writer_put_uint16_be (&writer->tagwriter, exif_type);
+    gst_byte_writer_put_uint32_be (&writer->tagwriter, count);
+    if (is_data) {
+      gst_byte_writer_put_uint32_le (&writer->tagwriter, offset);
+    } else {
+      gst_byte_writer_put_uint32_be (&writer->tagwriter, offset);
+    }
+  } else {
+    g_assert_not_reached ();
+  }
+
+  writer->tags_total++;
+}
+
+static void
+gst_exif_writer_write_rational_data (GstExifWriter * writer, guint32 frac_n,
+    guint32 frac_d)
+{
+  if (writer->byte_order == G_LITTLE_ENDIAN) {
+    gst_byte_writer_put_uint32_le (&writer->datawriter, frac_n);
+    gst_byte_writer_put_uint32_le (&writer->datawriter, frac_d);
+  } else {
+    gst_byte_writer_put_uint32_be (&writer->datawriter, frac_n);
+    gst_byte_writer_put_uint32_be (&writer->datawriter, frac_d);
+  }
+}
+
+static void
+gst_exif_writer_write_signed_rational_data (GstExifWriter * writer,
+    gint32 frac_n, gint32 frac_d)
+{
+  if (writer->byte_order == G_LITTLE_ENDIAN) {
+    gst_byte_writer_put_int32_le (&writer->datawriter, frac_n);
+    gst_byte_writer_put_int32_le (&writer->datawriter, frac_d);
+  } else {
+    gst_byte_writer_put_int32_be (&writer->datawriter, frac_n);
+    gst_byte_writer_put_int32_be (&writer->datawriter, frac_d);
+  }
+}
+
+static void
+gst_exif_writer_write_rational_tag (GstExifWriter * writer,
+    guint16 tag, guint32 frac_n, guint32 frac_d)
+{
+  guint32 offset = gst_byte_writer_get_size (&writer->datawriter);
+
+  gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_RATIONAL,
+      1, offset, FALSE);
+
+  gst_exif_writer_write_rational_data (writer, frac_n, frac_d);
+}
+
+static void
+gst_exif_writer_write_signed_rational_tag (GstExifWriter * writer,
+    guint16 tag, gint32 frac_n, gint32 frac_d)
+{
+  guint32 offset = gst_byte_writer_get_size (&writer->datawriter);
+
+  gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_SRATIONAL,
+      1, offset, FALSE);
+
+  gst_exif_writer_write_signed_rational_data (writer, frac_n, frac_d);
+}
+
+static void
+gst_exif_writer_write_rational_tag_from_double (GstExifWriter * writer,
+    guint16 tag, gdouble value)
+{
+  gint frac_n;
+  gint frac_d;
+
+  gst_util_double_to_fraction (value, &frac_n, &frac_d);
+
+  gst_exif_writer_write_rational_tag (writer, tag, frac_n, frac_d);
+}
+
+static void
+gst_exif_writer_write_signed_rational_tag_from_double (GstExifWriter * writer,
+    guint16 tag, gdouble value)
+{
+  gint frac_n;
+  gint frac_d;
+
+  gst_util_double_to_fraction (value, &frac_n, &frac_d);
+
+  gst_exif_writer_write_signed_rational_tag (writer, tag, frac_n, frac_d);
+}
+
+static void
+gst_exif_writer_write_byte_tag (GstExifWriter * writer, guint16 tag,
+    guint8 value)
+{
+  guint32 offset = 0;
+
+  GST_WRITE_UINT8 ((guint8 *) & offset, value);
+  gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_BYTE,
+      1, offset, TRUE);
+}
+
+static void
+gst_exif_writer_write_short_tag (GstExifWriter * writer, guint16 tag,
+    guint16 value)
+{
+  guint32 offset = 0;
+
+  if (writer->byte_order == G_LITTLE_ENDIAN) {
+    GST_WRITE_UINT16_LE ((guint8 *) & offset, value);
+  } else {
+    GST_WRITE_UINT16_BE ((guint8 *) & offset, value);
+  }
+
+  gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_SHORT,
+      1, offset, TRUE);
+}
+
+static void
+gst_exif_writer_write_long_tag (GstExifWriter * writer, guint16 tag,
+    guint32 value)
+{
+  guint32 offset = 0;
+  if (writer->byte_order == G_LITTLE_ENDIAN) {
+    GST_WRITE_UINT32_LE ((guint8 *) & offset, value);
+  } else {
+    GST_WRITE_UINT32_BE ((guint8 *) & offset, value);
+  }
+
+  gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_LONG,
+      1, offset, TRUE);
+}
+
+
+static void
+write_exif_undefined_tag (GstExifWriter * writer, guint16 tag,
+    const guint8 * data, gint size)
+{
+  guint32 offset = 0;
+
+  if (size > 4) {
+    /* we only use the data offset here, later we add up the
+     * resulting tag headers offset and the base offset */
+    offset = gst_byte_writer_get_size (&writer->datawriter);
+    gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_UNDEFINED,
+        size, offset, FALSE);
+    gst_byte_writer_put_data (&writer->datawriter, data, size);
+  } else {
+    /* small enough to go in the offset */
+    memcpy ((guint8 *) & offset, data, size);
+    gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_UNDEFINED,
+        size, offset, TRUE);
+  }
+}
+
+static void
+write_exif_ascii_tag (GstExifWriter * writer, guint16 tag, const gchar * str)
+{
+  gint size;
+  guint32 offset = 0;
+  gchar *ascii_str;
+  gsize ascii_size;
+  GError *error = NULL;
+
+  size = strlen (str) + 1;
+
+  ascii_str =
+      g_convert (str, size, "latin1", "utf8", NULL, &ascii_size, &error);
+
+  if (error) {
+    GST_WARNING ("Failed to convert exif tag to ascii: 0x%x - %s. Error: %s",
+        tag, str, error->message);
+    g_error_free (error);
+    g_free (ascii_str);
+    return;
+  }
+
+  /* add the \0 at the end */
+  ascii_size++;
+
+  if (ascii_size > 4) {
+    /* we only use the data offset here, later we add up the
+     * resulting tag headers offset and the base offset */
+    offset = gst_byte_writer_get_size (&writer->datawriter);
+    gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_ASCII,
+        ascii_size, offset, FALSE);
+    gst_byte_writer_put_string (&writer->datawriter, ascii_str);
+  } else {
+    /* small enough to go in the offset */
+    memcpy ((guint8 *) & offset, ascii_str, ascii_size);
+    gst_exif_writer_write_tag_header (writer, tag, EXIF_TYPE_ASCII,
+        ascii_size, offset, TRUE);
+  }
+
+  g_free (ascii_str);
+}
+
+static void
+write_exif_ascii_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  gchar *str = NULL;
+  gboolean cleanup = FALSE;
+  const GValue *value;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+
+  if (tag_size != 1) {
+    /* FIXME support this by serializing them with a ','? */
+    GST_WARNING ("Multiple string tags not supported yet");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_STRING:
+      str = (gchar *) g_value_get_string (value);
+      break;
+    default:
+      if (G_VALUE_TYPE (value) == GST_TYPE_DATE_TIME) {
+        GstDateTime *dt = (GstDateTime *) g_value_get_boxed (value);
+
+        if (dt == NULL) {
+          GST_WARNING ("NULL datetime received");
+          break;
+        }
+
+        str = g_strdup_printf ("%04d:%02d:%02d %02d:%02d:%02d",
+            gst_date_time_get_year (dt), gst_date_time_get_month (dt),
+            gst_date_time_get_day (dt), gst_date_time_get_hour (dt),
+            gst_date_time_get_minute (dt), gst_date_time_get_second (dt));
+
+        cleanup = TRUE;
+      } else {
+        GST_WARNING ("Conversion from %s to ascii string not supported",
+            G_VALUE_TYPE_NAME (value));
+      }
+      break;
+  }
+
+  if (str == NULL)
+    return;
+
+  write_exif_ascii_tag (writer, exiftag->exif_tag, str);
+  if (cleanup)
+    g_free (str);
+}
+
+static void
+write_exif_undefined_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  const GValue *value;
+  guint8 *data = NULL;
+  gsize size = 0;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+  GstBuffer *buf = NULL;
+
+  if (tag_size != 1) {
+    GST_WARNING ("Only the first item in the taglist will be serialized");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_STRING:
+      data = (guint8 *) g_value_get_string (value);
+      size = strlen ((gchar *) data);   /* no need to +1, undefined doesn't require it */
+      break;
+    default:
+      if (G_VALUE_TYPE (value) == GST_TYPE_BUFFER) {
+        buf = gst_value_get_buffer (value);
+        data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+      } else {
+        GST_WARNING ("Conversion from %s to raw data not supported",
+            G_VALUE_TYPE_NAME (value));
+      }
+      break;
+  }
+
+  if (size > 0)
+    write_exif_undefined_tag (writer, exiftag->exif_tag, data, size);
+
+  if (buf)
+    gst_buffer_unmap (buf, data, size);
+}
+
+static void
+write_exif_rational_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  const GValue *value;
+  gdouble num = 0;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+
+  if (tag_size != 1) {
+    GST_WARNING ("Only the first item in the taglist will be serialized");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_DOUBLE:
+      num = g_value_get_double (value);
+      gst_exif_writer_write_rational_tag_from_double (writer, exiftag->exif_tag,
+          num);
+      break;
+    default:
+      if (G_VALUE_TYPE (value) == GST_TYPE_FRACTION) {
+        gst_exif_writer_write_rational_tag (writer, exiftag->exif_tag,
+            gst_value_get_fraction_numerator (value),
+            gst_value_get_fraction_denominator (value));
+      } else {
+        GST_WARNING ("Conversion from %s to rational not supported",
+            G_VALUE_TYPE_NAME (value));
+      }
+      break;
+  }
+}
+
+static void
+write_exif_signed_rational_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  const GValue *value;
+  gdouble num = 0;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+
+  if (tag_size != 1) {
+    GST_WARNING ("Only the first item in the taglist will be serialized");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_DOUBLE:
+      num = g_value_get_double (value);
+      gst_exif_writer_write_signed_rational_tag_from_double (writer,
+          exiftag->exif_tag, num);
+      break;
+    default:
+      if (G_VALUE_TYPE (value) == GST_TYPE_FRACTION) {
+        gst_exif_writer_write_signed_rational_tag (writer, exiftag->exif_tag,
+            gst_value_get_fraction_numerator (value),
+            gst_value_get_fraction_denominator (value));
+      } else {
+        GST_WARNING ("Conversion from %s to signed rational not supported",
+            G_VALUE_TYPE_NAME (value));
+      }
+      break;
+  }
+}
+
+static void
+write_exif_integer_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  const GValue *value;
+  guint32 num = 0;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+
+  if (tag_size != 1) {
+    GST_WARNING ("Only the first item in the taglist will be serialized");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_INT:
+      num = g_value_get_int (value);
+      break;
+    default:
+      GST_WARNING ("Conversion from %s to int not supported",
+          G_VALUE_TYPE_NAME (value));
+      break;
+  }
+
+  switch (exiftag->exif_type) {
+    case EXIF_TYPE_LONG:
+      gst_exif_writer_write_long_tag (writer, exiftag->exif_tag, num);
+      break;
+    case EXIF_TYPE_SHORT:
+      gst_exif_writer_write_short_tag (writer, exiftag->exif_tag, num);
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+write_exif_tag_from_taglist (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  GST_DEBUG ("Writing tag %s", exiftag->gst_tag);
+
+  /* check for special handling */
+  if (exiftag->serialize) {
+    exiftag->serialize (writer, taglist, exiftag);
+    return;
+  }
+
+  switch (exiftag->exif_type) {
+    case EXIF_TYPE_ASCII:
+      write_exif_ascii_tag_from_taglist (writer, taglist, exiftag);
+      break;
+    case EXIF_TYPE_UNDEFINED:
+      write_exif_undefined_tag_from_taglist (writer, taglist, exiftag);
+      break;
+    case EXIF_TYPE_RATIONAL:
+      write_exif_rational_tag_from_taglist (writer, taglist, exiftag);
+      break;
+    case EXIF_TYPE_SRATIONAL:
+      write_exif_signed_rational_tag_from_taglist (writer, taglist, exiftag);
+      break;
+    case EXIF_TYPE_LONG:
+    case EXIF_TYPE_SHORT:
+      write_exif_integer_tag_from_taglist (writer, taglist, exiftag);
+      break;
+    default:
+      GST_WARNING ("Unhandled tag type %d", exiftag->exif_type);
+  }
+}
+
+static void
+tagdata_copy (GstExifTagData * to, const GstExifTagData * from)
+{
+  to->tag = from->tag;
+  to->tag_type = from->tag_type;
+  to->count = from->count;
+  to->offset = from->offset;
+  to->offset_as_data = from->offset_as_data;
+}
+
+static void
+gst_exif_tag_rewrite_offsets (GstByteWriter * writer, gint byte_order,
+    guint32 offset, gint num_tags, GstByteWriter * inner_ifds_data)
+{
+  GstByteReader *reader;
+  gint i;
+  guint16 aux = G_MAXUINT16;
+
+  GST_LOG ("Rewriting tag entries offsets");
+
+  reader = (GstByteReader *) writer;
+
+  if (num_tags == -1) {
+    if (byte_order == G_LITTLE_ENDIAN) {
+      gst_byte_reader_get_uint16_le (reader, &aux);
+    } else {
+      gst_byte_reader_get_uint16_be (reader, &aux);
+    }
+    if (aux == G_MAXUINT16) {
+      GST_WARNING ("Failed to read number of tags, won't rewrite offsets");
+      return;
+    }
+    num_tags = (gint) aux;
+  }
+
+  g_return_if_fail (num_tags != -1);
+
+  GST_DEBUG ("number of tags %d", num_tags);
+
+  for (i = 0; i < num_tags; i++) {
+    guint16 type = 0;
+    guint32 cur_offset = 0;
+    gint byte_size = 0;
+    guint32 count = 0;
+    guint16 tag_id = 0;
+
+    g_assert (gst_byte_writer_get_pos (writer) <
+        gst_byte_writer_get_size (writer));
+
+    /* read the type */
+    if (byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_get_uint16_le (reader, &tag_id))
+        break;
+      if (!gst_byte_reader_get_uint16_le (reader, &type))
+        break;
+      if (!gst_byte_reader_get_uint32_le (reader, &count))
+        break;
+    } else {
+      if (!gst_byte_reader_get_uint16_be (reader, &tag_id))
+        break;
+      if (!gst_byte_reader_get_uint16_be (reader, &type))
+        break;
+      if (!gst_byte_reader_get_uint32_be (reader, &count))
+        break;
+    }
+
+    GST_LOG ("Parsed tag %x of type %u and count %u", tag_id, type, count);
+
+    switch (type) {
+      case EXIF_TYPE_BYTE:
+      case EXIF_TYPE_ASCII:
+      case EXIF_TYPE_UNDEFINED:
+        byte_size = count;
+        break;
+      case EXIF_TYPE_SHORT:
+        byte_size = count * 2;  /* 2 bytes */
+        break;
+      case EXIF_TYPE_LONG:
+      case EXIF_TYPE_SLONG:
+        byte_size = count * 4;  /* 4 bytes */
+        break;
+      case EXIF_TYPE_RATIONAL:
+      case EXIF_TYPE_SRATIONAL:
+        byte_size = count * 8;  /* 8 bytes */
+        break;
+      default:
+        g_assert_not_reached ();
+        break;
+    }
+
+    /* adjust the offset if needed */
+    if (byte_size > 4 || tag_id == EXIF_GPS_IFD_TAG || tag_id == EXIF_IFD_TAG) {
+      if (byte_order == G_LITTLE_ENDIAN) {
+        if (gst_byte_reader_peek_uint32_le (reader, &cur_offset)) {
+          gst_byte_writer_put_uint32_le (writer, cur_offset + offset);
+        }
+      } else {
+        if (gst_byte_reader_peek_uint32_be (reader, &cur_offset)) {
+          gst_byte_writer_put_uint32_be (writer, cur_offset + offset);
+        }
+      }
+      GST_DEBUG ("Rewriting tag offset from %u to (%u + %u) %u",
+          cur_offset, cur_offset, offset, cur_offset + offset);
+
+      if ((tag_id == EXIF_GPS_IFD_TAG || tag_id == EXIF_IFD_TAG) &&
+          inner_ifds_data != NULL) {
+        /* needs special handling */
+        if (!gst_byte_writer_set_pos (inner_ifds_data, cur_offset)) {
+          GST_WARNING ("Failed to position writer to rewrite inner ifd "
+              "offsets");
+          continue;
+        }
+
+        gst_exif_tag_rewrite_offsets (inner_ifds_data, byte_order, offset, -1,
+            NULL);
+      }
+    } else {
+      gst_byte_reader_skip (reader, 4);
+      GST_DEBUG ("No need to rewrite tag offset");
+    }
+  }
+  GST_LOG ("Done rewriting offsets");
+}
+
+static void
+parse_exif_ascii_tag (GstExifReader * reader, const GstExifTagMatch * tag,
+    guint32 count, guint32 offset, const guint8 * offset_as_data)
+{
+  GType tagtype;
+  gchar *str;
+  gchar *utfstr;
+  guint32 real_offset;
+  GError *error = NULL;
+
+  if (count > 4) {
+    guint8 *data;
+    gsize size;
+
+    if (offset < reader->base_offset) {
+      GST_WARNING ("Offset is smaller (%u) than base offset (%u)", offset,
+          reader->base_offset);
+      return;
+    }
+
+    real_offset = offset - reader->base_offset;
+
+    data = gst_buffer_map (reader->buffer, &size, NULL, GST_MAP_READ);
+    if (real_offset >= size) {
+      GST_WARNING ("Invalid offset %u for buffer of size %" G_GSIZE_FORMAT
+          ", not adding tag %s", real_offset, size, tag->gst_tag);
+      gst_buffer_unmap (reader->buffer, data, size);
+      return;
+    }
+
+    str = g_strndup ((gchar *) (data + real_offset), count);
+    gst_buffer_unmap (reader->buffer, data, size);
+  } else {
+    str = g_strndup ((gchar *) offset_as_data, count);
+  }
+
+  /* convert from ascii to utf8 */
+  if (g_utf8_validate (str, -1, NULL)) {
+    GST_DEBUG ("Exif string is already on utf8: %s", str);
+    utfstr = str;
+  } else {
+    GST_DEBUG ("Exif string isn't utf8, trying to convert from latin1: %s",
+        str);
+    utfstr = g_convert (str, count, "utf8", "latin1", NULL, NULL, &error);
+    g_free (str);
+    if (error) {
+      GST_WARNING ("Skipping tag %d:%s. Failed to convert ascii string "
+          "to utf8 : %s - %s", tag->exif_tag, tag->gst_tag, str,
+          error->message);
+      g_error_free (error);
+      g_free (utfstr);
+      return;
+    }
+  }
+
+  tagtype = gst_tag_get_type (tag->gst_tag);
+  if (tagtype == GST_TYPE_DATE_TIME) {
+    gint year = 0, month = 1, day = 1, hour = 0, minute = 0, second = 0;
+
+    if (sscanf (utfstr, "%04d:%02d:%02d %02d:%02d:%02d", &year, &month, &day,
+            &hour, &minute, &second) > 0) {
+      GstDateTime *d;
+
+      d = gst_date_time_new_local_time (year, month, day, hour, minute, second);
+      gst_tag_list_add (reader->taglist, GST_TAG_MERGE_REPLACE,
+          tag->gst_tag, d, NULL);
+      gst_date_time_unref (d);
+    } else {
+      GST_WARNING ("Failed to parse %s into a datetime tag", str);
+    }
+  } else if (tagtype == G_TYPE_STRING) {
+    gst_tag_list_add (reader->taglist, GST_TAG_MERGE_REPLACE, tag->gst_tag,
+        utfstr, NULL);
+  } else {
+    GST_WARNING ("No parsing function associated to %x(%s)", tag->exif_tag,
+        tag->gst_tag);
+  }
+  g_free (utfstr);
+}
+
+static void
+parse_exif_long_tag (GstExifReader * reader, const GstExifTagMatch * tag,
+    guint32 count, guint32 offset, const guint8 * offset_as_data)
+{
+  GType tagtype;
+
+  if (count > 1) {
+    GST_WARNING ("Long tags with more than one value are not supported");
+    return;
+  }
+
+  tagtype = gst_tag_get_type (tag->gst_tag);
+  if (tagtype == G_TYPE_INT) {
+    gst_tag_list_add (reader->taglist, GST_TAG_MERGE_REPLACE, tag->gst_tag,
+        offset, NULL);
+  } else {
+    GST_WARNING ("No parsing function associated to %x(%s)", tag->exif_tag,
+        tag->gst_tag);
+  }
+}
+
+
+static void
+parse_exif_undefined_tag (GstExifReader * reader, const GstExifTagMatch * tag,
+    guint32 count, guint32 offset, const guint8 * offset_as_data)
+{
+  GType tagtype;
+  guint8 *data;
+  guint32 real_offset;
+
+  if (count > 4) {
+    guint8 *bdata;
+    gsize bsize;
+
+    if (offset < reader->base_offset) {
+      GST_WARNING ("Offset is smaller (%u) than base offset (%u)", offset,
+          reader->base_offset);
+      return;
+    }
+
+    real_offset = offset - reader->base_offset;
+
+    bdata = gst_buffer_map (reader->buffer, &bsize, NULL, GST_MAP_READ);
+
+    if (real_offset >= bsize) {
+      GST_WARNING ("Invalid offset %u for buffer of size %" G_GSIZE_FORMAT
+          ", not adding tag %s", real_offset, bsize, tag->gst_tag);
+      gst_buffer_unmap (reader->buffer, bdata, bsize);
+      return;
+    }
+
+    /* +1 because it could be a string without the \0 */
+    data = malloc (sizeof (guint8) * count + 1);
+    memcpy (data, bdata + real_offset, count);
+    data[count] = 0;
+
+    gst_buffer_unmap (reader->buffer, bdata, bsize);
+  } else {
+    data = malloc (sizeof (guint8) * count + 1);
+    memcpy (data, (guint8 *) offset_as_data, count);
+    data[count] = 0;
+  }
+
+  tagtype = gst_tag_get_type (tag->gst_tag);
+  if (tagtype == GST_TYPE_BUFFER) {
+    GstBuffer *buf;
+
+    buf = gst_buffer_new ();
+    gst_buffer_take_memory (buf, -1,
+        gst_memory_new_wrapped (0, data, g_free, count, 0, count));
+    data = NULL;
+
+    gst_tag_list_add (reader->taglist, GST_TAG_MERGE_APPEND, tag->gst_tag,
+        buf, NULL);
+
+    gst_buffer_unref (buf);
+  } else if (tagtype == G_TYPE_STRING) {
+    gst_tag_list_add (reader->taglist, GST_TAG_MERGE_REPLACE, tag->gst_tag,
+        data, NULL);
+  } else {
+    GST_WARNING ("No parsing function associated to %x(%s)", tag->exif_tag,
+        tag->gst_tag);
+  }
+  g_free (data);
+}
+
+static gboolean
+exif_reader_read_rational_tag (GstExifReader * exif_reader,
+    guint32 count, guint32 offset, gboolean is_signed,
+    gint32 * _frac_n, gint32 * _frac_d)
+{
+  GstByteReader data_reader;
+  guint32 real_offset;
+  gint32 frac_n = 0;
+  gint32 frac_d = 0;
+  guint8 *data;
+  gsize size;
+
+  if (count > 1) {
+    GST_WARNING ("Rationals with multiple entries are not supported");
+  }
+  if (offset < exif_reader->base_offset) {
+    GST_WARNING ("Offset is smaller (%u) than base offset (%u)", offset,
+        exif_reader->base_offset);
+    return FALSE;
+  }
+
+  real_offset = offset - exif_reader->base_offset;
+
+  data = gst_buffer_map (exif_reader->buffer, &size, NULL, GST_MAP_READ);
+
+  if (real_offset >= size) {
+    GST_WARNING ("Invalid offset %u for buffer of size %" G_GSIZE_FORMAT,
+        real_offset, size);
+    goto reader_fail;
+  }
+
+  gst_byte_reader_init (&data_reader, data, size);
+  if (!gst_byte_reader_set_pos (&data_reader, real_offset))
+    goto reader_fail;
+
+  if (!is_signed) {
+    guint32 aux_n = 0, aux_d = 0;
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_get_uint32_le (&data_reader, &aux_n) ||
+          !gst_byte_reader_get_uint32_le (&data_reader, &aux_d))
+        goto reader_fail;
+    } else {
+      if (!gst_byte_reader_get_uint32_be (&data_reader, &aux_n) ||
+          !gst_byte_reader_get_uint32_be (&data_reader, &aux_d))
+        goto reader_fail;
+    }
+    frac_n = (gint32) aux_n;
+    frac_d = (gint32) aux_d;
+  } else {
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_get_int32_le (&data_reader, &frac_n) ||
+          !gst_byte_reader_get_int32_le (&data_reader, &frac_d))
+        goto reader_fail;
+    } else {
+      if (!gst_byte_reader_get_int32_be (&data_reader, &frac_n) ||
+          !gst_byte_reader_get_int32_be (&data_reader, &frac_d))
+        goto reader_fail;
+    }
+  }
+
+  if (_frac_n)
+    *_frac_n = frac_n;
+  if (_frac_d)
+    *_frac_d = frac_d;
+
+  gst_buffer_unmap (exif_reader->buffer, data, size);
+
+  return TRUE;
+
+reader_fail:
+  GST_WARNING ("Failed to read from byte reader. (Buffer too short?)");
+  gst_buffer_unmap (exif_reader->buffer, data, size);
+  return FALSE;
+}
+
+static void
+parse_exif_rational_tag (GstExifReader * exif_reader,
+    const gchar * gst_tag, guint32 count, guint32 offset, gdouble multiplier,
+    gboolean is_signed)
+{
+  GType type;
+  gint32 frac_n = 0;
+  gint32 frac_d = 1;
+  gdouble value;
+
+  GST_DEBUG ("Reading fraction for tag %s...", gst_tag);
+  if (!exif_reader_read_rational_tag (exif_reader, count, offset, is_signed,
+          &frac_n, &frac_d))
+    return;
+  GST_DEBUG ("Read fraction for tag %s: %d/%d", gst_tag, frac_n, frac_d);
+
+  type = gst_tag_get_type (gst_tag);
+  switch (type) {
+    case G_TYPE_DOUBLE:
+      gst_util_fraction_to_double (frac_n, frac_d, &value);
+      value *= multiplier;
+      GST_DEBUG ("Adding %s tag: %lf", gst_tag, value);
+      gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE, gst_tag,
+          value, NULL);
+      break;
+    default:
+      if (type == GST_TYPE_FRACTION) {
+        GValue fraction = { 0 };
+
+        g_value_init (&fraction, GST_TYPE_FRACTION);
+        gst_value_set_fraction (&fraction, frac_n * multiplier, frac_d);
+        gst_tag_list_add_value (exif_reader->taglist, GST_TAG_MERGE_REPLACE,
+            gst_tag, &fraction);
+        g_value_unset (&fraction);
+      } else {
+        GST_WARNING ("Can't convert from fraction into %s", g_type_name (type));
+      }
+  }
+
+}
+
+static GstBuffer *
+write_exif_ifd (const GstTagList * taglist, gboolean byte_order,
+    guint32 base_offset, const GstExifTagMatch * tag_map)
+{
+  GstExifWriter writer;
+  gint i;
+
+  GST_DEBUG ("Formatting taglist %p as exif buffer. Byte order: %d, "
+      "base_offset: %u", taglist, byte_order, base_offset);
+
+  g_assert (byte_order == G_LITTLE_ENDIAN || byte_order == G_BIG_ENDIAN);
+
+  if (!gst_tag_list_has_ifd_tags (taglist, tag_map)) {
+    GST_DEBUG ("No tags for this ifd");
+    return NULL;
+  }
+
+  gst_exif_writer_init (&writer, byte_order);
+
+  /* write tag number as 0 */
+  gst_byte_writer_put_uint16_le (&writer.tagwriter, 0);
+
+  /* write both tag headers and data
+   * in ascending id order */
+
+  for (i = 0; tag_map[i].exif_tag != 0; i++) {
+
+    /* special cases have NULL gst tag */
+    if (tag_map[i].gst_tag == NULL) {
+      GstBuffer *inner_ifd = NULL;
+      const GstExifTagMatch *inner_tag_map = NULL;
+
+      GST_LOG ("Inner ifd tag: %x", tag_map[i].exif_tag);
+
+      if (tag_map[i].exif_tag == EXIF_GPS_IFD_TAG) {
+        inner_tag_map = tag_map_gps;
+      } else if (tag_map[i].exif_tag == EXIF_IFD_TAG) {
+        inner_tag_map = tag_map_exif;
+      } else if (tag_map[i].exif_tag == EXIF_VERSION_TAG) {
+        /* special case where we write the exif version */
+        write_exif_undefined_tag (&writer, EXIF_VERSION_TAG, (guint8 *) "0230",
+            4);
+      } else if (tag_map[i].exif_tag == EXIF_FLASHPIX_VERSION_TAG) {
+        /* special case where we write the flashpix version */
+        write_exif_undefined_tag (&writer, EXIF_FLASHPIX_VERSION_TAG,
+            (guint8 *) "0100", 4);
+      }
+
+      if (inner_tag_map) {
+        /* base offset and tagheader size are added when rewriting offset */
+        inner_ifd = write_exif_ifd (taglist, byte_order,
+            gst_byte_writer_get_size (&writer.datawriter), inner_tag_map);
+      }
+
+      if (inner_ifd) {
+        guint8 *data;
+        gsize size;
+
+        GST_DEBUG ("Adding inner ifd: %x", tag_map[i].exif_tag);
+        gst_exif_writer_write_tag_header (&writer, tag_map[i].exif_tag,
+            EXIF_TYPE_LONG, 1,
+            gst_byte_writer_get_size (&writer.datawriter), FALSE);
+
+        data = gst_buffer_map (inner_ifd, &size, NULL, GST_MAP_READ);
+        gst_byte_writer_put_data (&writer.datawriter, data, size);
+        gst_buffer_unmap (inner_ifd, data, size);
+        gst_buffer_unref (inner_ifd);
+      }
+      continue;
+    }
+
+    GST_LOG ("Checking tag %s", tag_map[i].gst_tag);
+    if (gst_tag_list_get_value_index (taglist, tag_map[i].gst_tag, 0) == NULL)
+      continue;
+
+    write_exif_tag_from_taglist (&writer, taglist, &tag_map[i]);
+  }
+
+  /* Add the next IFD offset, we just set it to 0 because
+   * there is no easy way to predict what it is going to be.
+   * The user might rewrite the value if needed */
+  gst_byte_writer_put_uint32_le (&writer.tagwriter, 0);
+
+  /* write the number of tags */
+  gst_byte_writer_set_pos (&writer.tagwriter, 0);
+  if (writer.byte_order == G_LITTLE_ENDIAN)
+    gst_byte_writer_put_uint16_le (&writer.tagwriter, writer.tags_total);
+  else
+    gst_byte_writer_put_uint16_be (&writer.tagwriter, writer.tags_total);
+
+  GST_DEBUG ("Number of tags rewriten to %d", writer.tags_total);
+
+  /* now that we know the tag headers size, we can add the offsets */
+  gst_exif_tag_rewrite_offsets (&writer.tagwriter, writer.byte_order,
+      base_offset + gst_byte_writer_get_size (&writer.tagwriter),
+      writer.tags_total, &writer.datawriter);
+
+  return gst_exif_writer_reset_and_get_buffer (&writer);
+}
+
+static gboolean
+parse_exif_tag_header (GstByteReader * reader, gint byte_order,
+    GstExifTagData * _tagdata)
+{
+  g_assert (_tagdata);
+
+  /* read the fields */
+  if (byte_order == G_LITTLE_ENDIAN) {
+    if (!gst_byte_reader_get_uint16_le (reader, &_tagdata->tag) ||
+        !gst_byte_reader_get_uint16_le (reader, &_tagdata->tag_type) ||
+        !gst_byte_reader_get_uint32_le (reader, &_tagdata->count) ||
+        !gst_byte_reader_get_data (reader, 4, &_tagdata->offset_as_data)) {
+      return FALSE;
+    }
+    _tagdata->offset = GST_READ_UINT32_LE (_tagdata->offset_as_data);
+  } else {
+    if (!gst_byte_reader_get_uint16_be (reader, &_tagdata->tag) ||
+        !gst_byte_reader_get_uint16_be (reader, &_tagdata->tag_type) ||
+        !gst_byte_reader_get_uint32_be (reader, &_tagdata->count) ||
+        !gst_byte_reader_get_data (reader, 4, &_tagdata->offset_as_data)) {
+      return FALSE;
+    }
+    _tagdata->offset = GST_READ_UINT32_BE (_tagdata->offset_as_data);
+  }
+
+  return TRUE;
+}
+
+static gboolean
+parse_exif_ifd (GstExifReader * exif_reader, gint buf_offset,
+    const GstExifTagMatch * tag_map)
+{
+  GstByteReader reader;
+  guint16 entries = 0;
+  guint16 i;
+  guint8 *data;
+  gsize size;
+
+  g_return_val_if_fail (exif_reader->byte_order == G_LITTLE_ENDIAN
+      || exif_reader->byte_order == G_BIG_ENDIAN, FALSE);
+
+  data = gst_buffer_map (exif_reader->buffer, &size, NULL, GST_MAP_READ);
+
+  gst_byte_reader_init (&reader, data, size);
+  if (!gst_byte_reader_set_pos (&reader, buf_offset))
+    goto invalid_offset;
+
+  /* read the IFD entries number */
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    if (!gst_byte_reader_get_uint16_le (&reader, &entries))
+      goto read_error;
+  } else {
+    if (!gst_byte_reader_get_uint16_be (&reader, &entries))
+      goto read_error;
+  }
+  GST_DEBUG ("Read number of entries: %u", entries);
+
+  /* iterate over the buffer and find the tags and stuff */
+  for (i = 0; i < entries; i++) {
+    GstExifTagData tagdata;
+    gint map_index;
+
+    GST_LOG ("Reading entry: %u", i);
+
+    if (!parse_exif_tag_header (&reader, exif_reader->byte_order, &tagdata))
+      goto read_error;
+
+    GST_DEBUG ("Parsed tag: id 0x%x, type %u, count %u, offset %u (0x%x)"
+        ", buf size: %u", tagdata.tag, tagdata.tag_type, tagdata.count,
+        tagdata.offset, tagdata.offset, gst_byte_reader_get_size (&reader));
+
+    map_index = exif_tag_map_find_reverse (tagdata.tag, tag_map, TRUE);
+    if (map_index == -1) {
+      GST_WARNING ("Unmapped exif tag: 0x%x", tagdata.tag);
+      continue;
+    }
+
+    /*
+     * inner ifd tags handling, errors processing those are being ignored
+     * and we try to continue the parsing
+     */
+    if (tagdata.tag == EXIF_GPS_IFD_TAG) {
+      parse_exif_ifd (exif_reader,
+          tagdata.offset - exif_reader->base_offset, tag_map_gps);
+
+      continue;
+    }
+    if (tagdata.tag == EXIF_IFD_TAG) {
+      parse_exif_ifd (exif_reader,
+          tagdata.offset - exif_reader->base_offset, tag_map_exif);
+
+      continue;
+    }
+    if (tagdata.tag == EXIF_VERSION_TAG ||
+        tagdata.tag == EXIF_FLASHPIX_VERSION_TAG) {
+      /* skip */
+      continue;
+    }
+
+    /* tags that need specialized deserialization */
+    if (tag_map[map_index].deserialize) {
+      i += tag_map[map_index].deserialize (exif_reader, &reader,
+          &tag_map[map_index], &tagdata);
+      continue;
+    }
+
+    switch (tagdata.tag_type) {
+      case EXIF_TYPE_ASCII:
+        parse_exif_ascii_tag (exif_reader, &tag_map[map_index],
+            tagdata.count, tagdata.offset, tagdata.offset_as_data);
+        break;
+      case EXIF_TYPE_RATIONAL:
+        parse_exif_rational_tag (exif_reader, tag_map[map_index].gst_tag,
+            tagdata.count, tagdata.offset, 1, FALSE);
+        break;
+      case EXIF_TYPE_SRATIONAL:
+        parse_exif_rational_tag (exif_reader, tag_map[map_index].gst_tag,
+            tagdata.count, tagdata.offset, 1, TRUE);
+        break;
+      case EXIF_TYPE_UNDEFINED:
+        parse_exif_undefined_tag (exif_reader, &tag_map[map_index],
+            tagdata.count, tagdata.offset, tagdata.offset_as_data);
+      case EXIF_TYPE_LONG:
+        parse_exif_long_tag (exif_reader, &tag_map[map_index],
+            tagdata.count, tagdata.offset, tagdata.offset_as_data);
+        break;
+      default:
+        GST_WARNING ("Unhandled tag type: %u", tagdata.tag_type);
+        break;
+    }
+  }
+
+  /* check if the pending tags have something that can still be added */
+  {
+    GSList *walker;
+    GstExifTagData *data;
+
+    for (walker = exif_reader->pending_tags; walker;
+        walker = g_slist_next (walker)) {
+      data = (GstExifTagData *) walker->data;
+      switch (data->tag) {
+        case EXIF_TAG_XRESOLUTION:
+          parse_exif_rational_tag (exif_reader, GST_TAG_IMAGE_HORIZONTAL_PPI,
+              data->count, data->offset, 1, FALSE);
+          break;
+        case EXIF_TAG_YRESOLUTION:
+          parse_exif_rational_tag (exif_reader, GST_TAG_IMAGE_VERTICAL_PPI,
+              data->count, data->offset, 1, FALSE);
+          break;
+        default:
+          /* NOP */
+          break;
+      }
+    }
+  }
+  gst_buffer_unmap (exif_reader->buffer, data, size);
+
+  return TRUE;
+
+invalid_offset:
+  {
+    GST_WARNING ("Buffer offset invalid when parsing exif ifd");
+    gst_buffer_unmap (exif_reader->buffer, data, size);
+    return FALSE;
+  }
+read_error:
+  {
+    GST_WARNING ("Failed to parse the exif ifd");
+    gst_buffer_unmap (exif_reader->buffer, data, size);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_tag_list_to_exif_buffer:
+ * @taglist: The taglist
+ * @byte_order: byte order used in writing (G_LITTLE_ENDIAN or G_BIG_ENDIAN)
+ * @base_offset: Offset from the tiff header first byte
+ *
+ * Formats the tags in taglist on exif format. The resulting buffer contains
+ * the tags IFD and is followed by the data pointed by the tag entries.
+ *
+ * Returns: A GstBuffer containing the tag entries followed by the tag data
+ *
+ * Since: 0.10.30
+ */
+GstBuffer *
+gst_tag_list_to_exif_buffer (const GstTagList * taglist, gint byte_order,
+    guint32 base_offset)
+{
+  return write_exif_ifd (taglist, byte_order, base_offset, tag_map_ifd0);
+}
+
+/**
+ * gst_tag_list_to_exif_buffer_with_tiff_header:
+ * @taglist: The taglist
+ *
+ * Formats the tags in taglist into exif structure, a tiff header
+ * is put in the beginning of the buffer.
+ *
+ * Returns: A GstBuffer containing the data
+ *
+ * Since: 0.10.30
+ */
+GstBuffer *
+gst_tag_list_to_exif_buffer_with_tiff_header (const GstTagList * taglist)
+{
+  GstBuffer *ifd;
+  GstByteWriter writer;
+  gsize size;
+  guint8 *data;
+
+  ifd = gst_tag_list_to_exif_buffer (taglist, G_BYTE_ORDER, 8);
+  if (ifd == NULL) {
+    GST_WARNING ("Failed to create exif buffer");
+    return NULL;
+  }
+
+  data = gst_buffer_map (ifd, &size, NULL, GST_MAP_READ);
+
+  size += TIFF_HEADER_SIZE;
+
+  /* TODO what is the correct endianness here? */
+  gst_byte_writer_init_with_size (&writer, size, FALSE);
+  /* TIFF header */
+  if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
+    gst_byte_writer_put_uint16_le (&writer, TIFF_LITTLE_ENDIAN);
+    gst_byte_writer_put_uint16_le (&writer, 42);
+    gst_byte_writer_put_uint32_le (&writer, 8);
+  } else {
+    gst_byte_writer_put_uint16_be (&writer, TIFF_BIG_ENDIAN);
+    gst_byte_writer_put_uint16_be (&writer, 42);
+    gst_byte_writer_put_uint32_be (&writer, 8);
+  }
+  if (!gst_byte_writer_put_data (&writer, data, size)) {
+    GST_WARNING ("Byte writer size mismatch");
+    /* reaching here is a programming error because we should have a buffer
+     * large enough */
+    g_assert_not_reached ();
+    gst_buffer_unmap (ifd, data, size);
+    gst_buffer_unref (ifd);
+    gst_byte_writer_reset (&writer);
+    return NULL;
+  }
+  gst_buffer_unmap (ifd, data, size);
+  gst_buffer_unref (ifd);
+
+  return gst_byte_writer_reset_and_get_buffer (&writer);
+}
+
+/**
+ * gst_tag_list_from_exif_buffer:
+ * @buffer: The exif buffer
+ * @byte_order: byte order of the data
+ * @base_offset: Offset from the tiff header to this buffer
+ *
+ * Parses the IFD and IFD tags data contained in the buffer and puts it
+ * on a taglist. The base_offset is used to subtract from the offset in
+ * the tag entries and be able to get the offset relative to the buffer
+ * start
+ *
+ * Returns: The parsed taglist
+ *
+ * Since: 0.10.30
+ */
+GstTagList *
+gst_tag_list_from_exif_buffer (GstBuffer * buffer, gint byte_order,
+    guint32 base_offset)
+{
+  GstExifReader reader;
+  g_return_val_if_fail (byte_order == G_LITTLE_ENDIAN
+      || byte_order == G_BIG_ENDIAN, NULL);
+
+  gst_exif_reader_init (&reader, byte_order, buffer, base_offset);
+
+  if (!parse_exif_ifd (&reader, 0, tag_map_ifd0))
+    goto read_error;
+
+  return gst_exif_reader_reset (&reader, TRUE);
+
+read_error:
+  {
+    gst_exif_reader_reset (&reader, FALSE);
+    GST_WARNING ("Failed to parse the exif buffer");
+    return NULL;
+  }
+}
+
+/**
+ * gst_tag_list_from_exif_buffer_with_tiff_header:
+ * @buffer: The exif buffer
+ *
+ * Parses the exif tags starting with a tiff header structure.
+ *
+ * Returns: The taglist
+ *
+ * Since: 0.10.30
+ */
+GstTagList *
+gst_tag_list_from_exif_buffer_with_tiff_header (GstBuffer * buffer)
+{
+  GstByteReader reader;
+  guint16 fortytwo = 42;
+  guint16 endianness = 0;
+  guint32 offset;
+  GstTagList *taglist = NULL;
+  GstBuffer *subbuffer;
+  guint8 *data, *sdata;
+  gsize size, ssize;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  GST_LOG ("Parsing exif tags with tiff header of size %" G_GSIZE_FORMAT, size);
+
+  gst_byte_reader_init (&reader, data, size);
+
+  GST_LOG ("Parsing the tiff header");
+  if (!gst_byte_reader_get_uint16_be (&reader, &endianness)) {
+    goto byte_reader_fail;
+  }
+
+  if (endianness == TIFF_LITTLE_ENDIAN) {
+    if (!gst_byte_reader_get_uint16_le (&reader, &fortytwo) ||
+        !gst_byte_reader_get_uint32_le (&reader, &offset))
+      goto byte_reader_fail;
+  } else if (endianness == TIFF_BIG_ENDIAN) {
+    if (!gst_byte_reader_get_uint16_be (&reader, &fortytwo) ||
+        !gst_byte_reader_get_uint32_be (&reader, &offset))
+      goto byte_reader_fail;
+  } else
+    goto invalid_endianness;
+
+  if (fortytwo != 42)
+    goto invalid_magic;
+
+  subbuffer = gst_buffer_new_and_alloc (size - (TIFF_HEADER_SIZE - 2));
+
+  sdata = gst_buffer_map (subbuffer, &ssize, NULL, GST_MAP_WRITE);
+  memcpy (sdata, data + TIFF_HEADER_SIZE, size - TIFF_HEADER_SIZE);
+  gst_buffer_unmap (subbuffer, sdata, ssize);
+
+  taglist = gst_tag_list_from_exif_buffer (subbuffer,
+      endianness == TIFF_LITTLE_ENDIAN ? G_LITTLE_ENDIAN : G_BIG_ENDIAN, 8);
+
+  gst_buffer_unref (subbuffer);
+
+done:
+  gst_buffer_unmap (buffer, data, size);
+
+  return taglist;
+
+byte_reader_fail:
+  {
+    GST_WARNING ("Failed to read values from buffer");
+    goto done;
+  }
+invalid_endianness:
+  {
+    GST_WARNING ("Invalid endianness number %u", endianness);
+    goto done;
+  }
+invalid_magic:
+  {
+    GST_WARNING ("Invalid magic number %u, should be 42", fortytwo);
+    goto done;
+  }
+}
+
+/* special serialization functions */
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (contrast,
+    capturing_contrast);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (exposure_mode,
+    capturing_exposure_mode);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (exposure_program,
+    capturing_exposure_program);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (gain_control,
+    capturing_gain_adjustment);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (metering_mode,
+    capturing_metering_mode);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (orientation,
+    image_orientation);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (saturation,
+    capturing_saturation);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (scene_capture_type,
+    capturing_scene_capture_type);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (sharpness,
+    capturing_sharpness);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (source,
+    capturing_source);
+EXIF_SERIALIZATION_DESERIALIZATION_MAP_STRING_TO_INT_FUNC (white_balance,
+    capturing_white_balance);
+
+static void
+serialize_geo_coordinate (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gboolean latitude;
+  gdouble value;
+  gint degrees;
+  gint minutes;
+  gint seconds;
+  guint32 offset;
+
+  latitude = exiftag->exif_tag == EXIF_TAG_GPS_LATITUDE;        /* exif tag for latitude */
+  if (!gst_tag_list_get_double (taglist, exiftag->gst_tag, &value)) {
+    GST_WARNING ("Failed to get double from tag list for tag: %s",
+        exiftag->gst_tag);
+    return;
+  }
+
+  /* first write the Latitude or Longitude Ref */
+  if (latitude) {
+    if (value >= 0) {
+      write_exif_ascii_tag (writer, exiftag->complementary_tag, "N");
+    } else {
+      value *= -1;
+      write_exif_ascii_tag (writer, exiftag->complementary_tag, "S");
+    }
+  } else {
+    if (value >= 0) {
+      write_exif_ascii_tag (writer, exiftag->complementary_tag, "E");
+    } else {
+      value *= -1;
+      write_exif_ascii_tag (writer, exiftag->complementary_tag, "W");
+    }
+  }
+
+  /* now write the degrees stuff */
+  GST_LOG ("Converting geo location %lf to degrees", value);
+  degrees = (gint) value;
+  value -= degrees;
+  minutes = (gint) (value * 60);
+  value = (value * 60) - minutes;
+  seconds = (gint) (value * 60);
+  GST_LOG ("Converted geo location to %d.%d'%d'' degrees", degrees,
+      minutes, seconds);
+
+  offset = gst_byte_writer_get_size (&writer->datawriter);
+  gst_exif_writer_write_tag_header (writer, exiftag->exif_tag,
+      EXIF_TYPE_RATIONAL, 3, offset, FALSE);
+  gst_exif_writer_write_rational_data (writer, degrees, 1);
+  gst_exif_writer_write_rational_data (writer, minutes, 1);
+  gst_exif_writer_write_rational_data (writer, seconds, 1);
+}
+
+static gint
+deserialize_geo_coordinate (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstByteReader fractions_reader;
+  gint multiplier;
+  GstExifTagData next_tagdata;
+  gint ret = 0;
+  /* for the conversion */
+  guint32 degrees_n = 0;
+  guint32 degrees_d = 1;
+  guint32 minutes_n = 0;
+  guint32 minutes_d = 1;
+  guint32 seconds_n = 0;
+  guint32 seconds_d = 1;
+  gdouble degrees;
+  gdouble minutes;
+  gdouble seconds;
+  guint8 *data = NULL;
+  gsize size = 0;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (exiftag->complementary_tag != tagdata->tag) {
+    /* First should come the 'Ref' tags */
+    GST_WARNING ("Tag %d is not the 'Ref' tag for latitude nor longitude",
+        tagdata->tag);
+    return ret;
+  }
+
+  if (tagdata->offset_as_data[0] == 'N' || tagdata->offset_as_data[0] == 'E') {
+    multiplier = 1;
+  } else if (tagdata->offset_as_data[0] == 'S'
+      || tagdata->offset_as_data[0] == 'W') {
+    multiplier = -1;
+  } else {
+    GST_WARNING ("Invalid LatitudeRef or LongitudeRef %c",
+        tagdata->offset_as_data[0]);
+    return ret;
+  }
+
+  /* now read the following tag that must be the latitude or longitude */
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    if (!gst_byte_reader_peek_uint16_le (reader, &next_tagdata.tag))
+      goto reader_fail;
+  } else {
+    if (!gst_byte_reader_peek_uint16_be (reader, &next_tagdata.tag))
+      goto reader_fail;
+  }
+
+  if (exiftag->exif_tag != next_tagdata.tag) {
+    GST_WARNING ("This is not a geo cordinate tag");
+    return ret;
+  }
+
+  /* read the remaining tag entry data */
+  if (!parse_exif_tag_header (reader, exif_reader->byte_order, &next_tagdata)) {
+    ret = -1;
+    goto reader_fail;
+  }
+
+  ret = 1;
+
+  /* some checking */
+  if (next_tagdata.tag_type != EXIF_TYPE_RATIONAL) {
+    GST_WARNING ("Invalid type %d for geo coordinate (latitude/longitude)",
+        next_tagdata.tag_type);
+    return ret;
+  }
+  if (next_tagdata.count != 3) {
+    GST_WARNING ("Geo coordinate should use 3 fractions, we have %u",
+        next_tagdata.count);
+    return ret;
+  }
+
+  data = gst_buffer_map (exif_reader->buffer, &size, NULL, GST_MAP_READ);
+
+  /* now parse the fractions */
+  gst_byte_reader_init (&fractions_reader, data, size);
+
+  if (!gst_byte_reader_set_pos (&fractions_reader,
+          next_tagdata.offset - exif_reader->base_offset))
+    goto reader_fail;
+
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    if (!gst_byte_reader_get_uint32_le (&fractions_reader, &degrees_n) ||
+        !gst_byte_reader_get_uint32_le (&fractions_reader, &degrees_d) ||
+        !gst_byte_reader_get_uint32_le (&fractions_reader, &minutes_n) ||
+        !gst_byte_reader_get_uint32_le (&fractions_reader, &minutes_d) ||
+        !gst_byte_reader_get_uint32_le (&fractions_reader, &seconds_n) ||
+        !gst_byte_reader_get_uint32_le (&fractions_reader, &seconds_d))
+      goto reader_fail;
+  } else {
+    if (!gst_byte_reader_get_uint32_be (&fractions_reader, &degrees_n) ||
+        !gst_byte_reader_get_uint32_be (&fractions_reader, &degrees_d) ||
+        !gst_byte_reader_get_uint32_be (&fractions_reader, &minutes_n) ||
+        !gst_byte_reader_get_uint32_be (&fractions_reader, &minutes_d) ||
+        !gst_byte_reader_get_uint32_be (&fractions_reader, &seconds_n) ||
+        !gst_byte_reader_get_uint32_be (&fractions_reader, &seconds_d))
+      goto reader_fail;
+  }
+  gst_buffer_unmap (exif_reader->buffer, data, size);
+
+  GST_DEBUG ("Read degrees fraction for tag %s: %u/%u %u/%u %u/%u",
+      exiftag->gst_tag, degrees_n, degrees_d, minutes_n, minutes_d,
+      seconds_n, seconds_d);
+
+  gst_util_fraction_to_double (degrees_n, degrees_d, &degrees);
+  gst_util_fraction_to_double (minutes_n, minutes_d, &minutes);
+  gst_util_fraction_to_double (seconds_n, seconds_d, &seconds);
+
+  minutes += seconds / 60;
+  degrees += minutes / 60;
+  degrees *= multiplier;
+
+  GST_DEBUG ("Adding %s tag: %lf", exiftag->gst_tag, degrees);
+  gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE,
+      exiftag->gst_tag, degrees, NULL);
+
+  return ret;
+
+reader_fail:
+  GST_WARNING ("Failed to read fields from buffer (too short?)");
+  if (data)
+    gst_buffer_unmap (exif_reader->buffer, data, size);
+  return ret;
+}
+
+
+static void
+serialize_geo_direction (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gdouble value;
+
+  if (!gst_tag_list_get_double (taglist, exiftag->gst_tag, &value)) {
+    GST_WARNING ("Failed to get double from tag list for tag: %s",
+        exiftag->gst_tag);
+    return;
+  }
+
+  /* first write the direction ref */
+  write_exif_ascii_tag (writer, exiftag->complementary_tag, "T");
+  gst_exif_writer_write_rational_tag_from_double (writer,
+      exiftag->exif_tag, value);
+}
+
+static gint
+deserialize_geo_direction (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstExifTagData next_tagdata = { 0, };
+  gint ret = 0;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (exiftag->complementary_tag == tagdata->tag) {
+    /* First should come the 'Ref' tags */
+    if (tagdata->offset_as_data[0] == 'M') {
+      GST_WARNING ("Magnetic direction is not supported");
+      return ret;
+    } else if (tagdata->offset_as_data[0] == 'T') {
+      /* nop */
+    } else {
+      GST_WARNING ("Invalid Ref for direction or track %c",
+          tagdata->offset_as_data[0]);
+      return ret;
+    }
+  } else {
+    GST_DEBUG ("No Direction Ref, using default=T");
+    if (tagdata->tag == exiftag->exif_tag) {
+      /* this is the main tag */
+      tagdata_copy (&next_tagdata, tagdata);
+    }
+  }
+
+  if (next_tagdata.tag == 0) {
+    /* now read the following tag that must be the exif_tag */
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_peek_uint16_le (reader, &next_tagdata.tag))
+        goto reader_fail;
+    } else {
+      if (!gst_byte_reader_peek_uint16_be (reader, &next_tagdata.tag))
+        goto reader_fail;
+    }
+
+    if (exiftag->exif_tag != next_tagdata.tag) {
+      GST_WARNING ("Unexpected tag");
+      return ret;
+    }
+
+    /* read the remaining tag entry data */
+    if (!parse_exif_tag_header (reader, exif_reader->byte_order, &next_tagdata)) {
+      ret = -1;
+      goto reader_fail;
+    }
+    ret = 1;
+  }
+
+  /* some checking */
+  if (next_tagdata.tag_type != EXIF_TYPE_RATIONAL) {
+    GST_WARNING ("Invalid type %d for 0x%x", next_tagdata.tag_type,
+        next_tagdata.tag);
+    return ret;
+  }
+  if (next_tagdata.count != 1) {
+    GST_WARNING ("0x%x tag must have a single fraction, we have %u",
+        next_tagdata.tag_type, next_tagdata.count);
+    return ret;
+  }
+
+  parse_exif_rational_tag (exif_reader,
+      exiftag->gst_tag, next_tagdata.count, next_tagdata.offset, 1, FALSE);
+
+  return ret;
+
+reader_fail:
+  GST_WARNING ("Failed to read fields from buffer (too short?)");
+  return ret;
+}
+
+
+static void
+serialize_geo_elevation (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gdouble value;
+
+  if (!gst_tag_list_get_double (taglist, exiftag->gst_tag, &value)) {
+    GST_WARNING ("Failed to get double from tag list for tag: %s",
+        exiftag->gst_tag);
+    return;
+  }
+
+  /* first write the Ref */
+  gst_exif_writer_write_byte_tag (writer,
+      exiftag->complementary_tag, value >= 0 ? 0 : 1);
+
+  if (value < 0)
+    value *= -1;
+
+  /* now the value */
+  gst_exif_writer_write_rational_tag_from_double (writer,
+      exiftag->exif_tag, value);
+}
+
+static gint
+deserialize_geo_elevation (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstExifTagData next_tagdata = { 0, };
+  gint multiplier = 1;
+  gint ret = 0;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (exiftag->complementary_tag == tagdata->tag) {
+    if (tagdata->offset_as_data[0] == 0) {
+      /* NOP */
+    } else if (tagdata->offset_as_data[0] == 1) {
+      multiplier = -1;
+    } else {
+      GST_WARNING ("Invalid GPSAltitudeRef %u", tagdata->offset_as_data[0]);
+      return ret;
+    }
+  } else {
+    GST_DEBUG ("No GPSAltitudeRef, using default=0");
+    if (tagdata->tag == exiftag->exif_tag) {
+      tagdata_copy (&next_tagdata, tagdata);
+    }
+  }
+
+  /* now read the following tag that must be the exif_tag */
+  if (next_tagdata.tag == 0) {
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_peek_uint16_le (reader, &next_tagdata.tag))
+        goto reader_fail;
+    } else {
+      if (!gst_byte_reader_peek_uint16_be (reader, &next_tagdata.tag))
+        goto reader_fail;
+    }
+
+    if (exiftag->exif_tag != next_tagdata.tag) {
+      GST_WARNING ("Unexpected tag");
+      return ret;
+    }
+
+    /* read the remaining tag entry data */
+    if (!parse_exif_tag_header (reader, exif_reader->byte_order, &next_tagdata)) {
+      ret = -1;
+      goto reader_fail;
+    }
+    ret = 1;
+  }
+
+  /* some checking */
+  if (next_tagdata.tag_type != EXIF_TYPE_RATIONAL) {
+    GST_WARNING ("Invalid type %d for 0x%x", next_tagdata.tag_type,
+        next_tagdata.tag);
+    return ret;
+  }
+  if (next_tagdata.count != 1) {
+    GST_WARNING ("0x%x tag must have a single fraction, we have %u",
+        next_tagdata.tag_type, next_tagdata.count);
+    return ret;
+  }
+
+  parse_exif_rational_tag (exif_reader,
+      exiftag->gst_tag, next_tagdata.count, next_tagdata.offset, multiplier,
+      FALSE);
+
+  return ret;
+
+reader_fail:
+  GST_WARNING ("Failed to read fields from buffer (too short?)");
+  return ret;
+}
+
+
+static void
+serialize_speed (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gdouble value;
+
+  if (!gst_tag_list_get_double (taglist, exiftag->gst_tag, &value)) {
+    GST_WARNING ("Failed to get double from tag list for tag: %s",
+        exiftag->gst_tag);
+    return;
+  }
+
+  /* first write the Ref */
+  write_exif_ascii_tag (writer, exiftag->complementary_tag, "K");
+
+  /* now the value */
+  gst_exif_writer_write_rational_tag_from_double (writer,
+      exiftag->exif_tag, value * METERS_PER_SECOND_TO_KILOMETERS_PER_HOUR);
+}
+
+static gint
+deserialize_speed (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstExifTagData next_tagdata = { 0, };
+  gdouble multiplier = 1;
+  gint ret = 0;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (exiftag->complementary_tag == tagdata->tag) {
+    if (tagdata->offset_as_data[0] == 'K') {
+      multiplier = KILOMETERS_PER_HOUR_TO_METERS_PER_SECOND;
+    } else if (tagdata->offset_as_data[0] == 'M') {
+      multiplier = MILES_PER_HOUR_TO_METERS_PER_SECOND;
+    } else if (tagdata->offset_as_data[0] == 'N') {
+      multiplier = KNOTS_TO_METERS_PER_SECOND;
+    } else {
+      GST_WARNING ("Invalid GPSSpeedRed %c", tagdata->offset_as_data[0]);
+      return ret;
+    }
+  } else {
+    GST_DEBUG ("No GPSSpeedRef, using default=K");
+    multiplier = KILOMETERS_PER_HOUR_TO_METERS_PER_SECOND;
+
+    if (tagdata->tag == exiftag->exif_tag) {
+      tagdata_copy (&next_tagdata, tagdata);
+    }
+  }
+
+  /* now read the following tag that must be the exif_tag */
+  if (next_tagdata.tag == 0) {
+    if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+      if (!gst_byte_reader_peek_uint16_le (reader, &next_tagdata.tag))
+        goto reader_fail;
+    } else {
+      if (!gst_byte_reader_peek_uint16_be (reader, &next_tagdata.tag))
+        goto reader_fail;
+    }
+
+    if (exiftag->exif_tag != next_tagdata.tag) {
+      GST_WARNING ("Unexpected tag");
+      return ret;
+    }
+
+    /* read the remaining tag entry data */
+    if (!parse_exif_tag_header (reader, exif_reader->byte_order, &next_tagdata)) {
+      ret = -1;
+      goto reader_fail;
+    }
+    ret = 1;
+  }
+
+
+  /* some checking */
+  if (next_tagdata.tag_type != EXIF_TYPE_RATIONAL) {
+    GST_WARNING ("Invalid type %d for 0x%x", next_tagdata.tag_type,
+        next_tagdata.tag);
+    return ret;
+  }
+  if (next_tagdata.count != 1) {
+    GST_WARNING ("0x%x tag must have a single fraction, we have %u",
+        next_tagdata.tag_type, next_tagdata.count);
+    return ret;
+  }
+
+  parse_exif_rational_tag (exif_reader,
+      exiftag->gst_tag, next_tagdata.count, next_tagdata.offset, multiplier,
+      FALSE);
+
+  return ret;
+
+reader_fail:
+  GST_WARNING ("Failed to read fields from buffer (too short?)");
+  return ret;
+}
+
+static void
+serialize_shutter_speed (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  const GValue *value = NULL;
+  gdouble num;
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+  if (!value) {
+    GST_WARNING ("Failed to get shutter speed from from tag list");
+    return;
+  }
+  gst_util_fraction_to_double (gst_value_get_fraction_numerator (value),
+      gst_value_get_fraction_denominator (value), &num);
+
+#ifdef HAVE_LOG2
+  num = -log2 (num);
+#else
+  num = -log (num) / M_LN2;
+#endif
+
+  /* now the value */
+  gst_exif_writer_write_signed_rational_tag_from_double (writer,
+      exiftag->exif_tag, num);
+}
+
+static gint
+deserialize_shutter_speed (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  gint32 frac_n, frac_d;
+  gdouble d;
+  GValue value = { 0 };
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (!exif_reader_read_rational_tag (exif_reader, tagdata->count,
+          tagdata->offset, TRUE, &frac_n, &frac_d))
+    return 0;
+
+  gst_util_fraction_to_double (frac_n, frac_d, &d);
+  d = pow (2, -d);
+  gst_util_double_to_fraction (d, &frac_n, &frac_d);
+
+  g_value_init (&value, GST_TYPE_FRACTION);
+  gst_value_set_fraction (&value, frac_n, frac_d);
+  gst_tag_list_add_value (exif_reader->taglist, GST_TAG_MERGE_KEEP,
+      exiftag->gst_tag, &value);
+  g_value_unset (&value);
+
+  return 0;
+}
+
+static void
+serialize_aperture_value (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gdouble num;
+
+  if (!gst_tag_list_get_double_index (taglist, exiftag->gst_tag, 0, &num)) {
+    GST_WARNING ("Failed to get focal ratio from from tag list");
+    return;
+  }
+#ifdef HAVE_LOG2
+  num = 2 * log2 (num);
+#else
+  num = 2 * (log (num) / M_LN2);
+#endif
+
+  /* now the value */
+  gst_exif_writer_write_rational_tag_from_double (writer,
+      exiftag->exif_tag, num);
+}
+
+static gint
+deserialize_aperture_value (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  gint32 frac_n, frac_d;
+  gdouble d;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (!exif_reader_read_rational_tag (exif_reader, tagdata->count,
+          tagdata->offset, FALSE, &frac_n, &frac_d))
+    return 0;
+
+  gst_util_fraction_to_double (frac_n, frac_d, &d);
+  d = pow (2, d / 2);
+
+  gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_KEEP,
+      exiftag->gst_tag, d, NULL);
+
+  return 0;
+}
+
+static void
+serialize_sensitivity_type (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  /* we only support ISOSpeed as the sensitivity type (3) */
+  gst_exif_writer_write_short_tag (writer, exiftag->exif_tag, 3);
+}
+
+static gint
+deserialize_sensitivity_type (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstExifTagData *sensitivity = NULL;
+  guint16 type_data;
+
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    type_data = GST_READ_UINT16_LE (tagdata->offset_as_data);
+  } else {
+    type_data = GST_READ_UINT16_BE (tagdata->offset_as_data);
+  }
+
+  if (type_data != 3) {
+    GST_WARNING ("We only support SensitivityType=3");
+    return 0;
+  }
+
+  /* check the pending tags for the PhotographicSensitivity tag */
+  sensitivity =
+      gst_exif_reader_get_pending_tag (exif_reader,
+      EXIF_TAG_PHOTOGRAPHIC_SENSITIVITY);
+  if (sensitivity == NULL) {
+    GST_WARNING ("PhotographicSensitivity tag not found");
+    return 0;
+  }
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_KEEP,
+      GST_TAG_CAPTURING_ISO_SPEED, sensitivity->offset_as_data, NULL);
+
+  return 0;
+}
+
+static void
+serialize_flash (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  gboolean flash_fired;
+  const gchar *flash_mode;
+  guint16 tagvalue = 0;
+
+  if (!gst_tag_list_get_boolean_index (taglist, exiftag->gst_tag, 0,
+          &flash_fired)) {
+    GST_WARNING ("Failed to get flash fired from from tag list");
+    return;
+  }
+
+  if (flash_fired)
+    tagvalue = 1;
+
+  if (gst_tag_list_peek_string_index (taglist, GST_TAG_CAPTURING_FLASH_MODE, 0,
+          &flash_mode)) {
+    guint16 mode = 0;
+    if (strcmp (flash_mode, "auto") == 0) {
+      mode = 3;
+    } else if (strcmp (flash_mode, "always") == 0) {
+      mode = 1;
+    } else if (strcmp (flash_mode, "never") == 0) {
+      mode = 2;
+    }
+
+    tagvalue = tagvalue | (mode << 3);
+  } else {
+    GST_DEBUG ("flash-mode not available");
+  }
+
+  gst_exif_writer_write_short_tag (writer, exiftag->exif_tag, tagvalue);
+}
+
+static gint
+deserialize_flash (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  guint16 value = 0;
+  guint mode = 0;
+  const gchar *mode_str = NULL;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    value = GST_READ_UINT16_LE (tagdata->offset_as_data);
+  } else {
+    value = GST_READ_UINT16_BE (tagdata->offset_as_data);
+  }
+
+  /* check flash fired */
+  if (value & 0x1) {
+    gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_CAPTURING_FLASH_FIRED, TRUE, NULL);
+  } else {
+    gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_CAPTURING_FLASH_FIRED, FALSE, NULL);
+  }
+
+  mode = (value >> 3) & 0x3;
+  if (mode == 1) {
+    mode_str = "always";
+  } else if (mode == 2) {
+    mode_str = "never";
+  } else if (mode == 3) {
+    mode_str = "auto";
+  }
+
+  if (mode_str)
+    gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_REPLACE,
+        GST_TAG_CAPTURING_FLASH_MODE, mode_str, NULL);
+
+  return 0;
+}
+
+static gint
+deserialize_resolution (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GstExifTagData *xres = NULL;
+  GstExifTagData *yres = NULL;
+  guint16 unit;
+  gdouble multiplier;
+
+  if (exif_reader->byte_order == G_LITTLE_ENDIAN) {
+    unit = GST_READ_UINT16_LE (tagdata->offset_as_data);
+  } else {
+    unit = GST_READ_UINT16_BE (tagdata->offset_as_data);
+  }
+
+  switch (unit) {
+    case 2:                    /* inch */
+      multiplier = 1;
+      break;
+    case 3:                    /* cm */
+      multiplier = 1 / 2.54;
+      break;
+    default:
+      GST_WARNING ("Invalid resolution unit, ignoring PPI tags");
+      return 0;
+  }
+
+  xres = gst_exif_reader_get_pending_tag (exif_reader, EXIF_TAG_XRESOLUTION);
+  if (xres) {
+    parse_exif_rational_tag (exif_reader, GST_TAG_IMAGE_HORIZONTAL_PPI,
+        xres->count, xres->offset, multiplier, FALSE);
+  }
+  yres = gst_exif_reader_get_pending_tag (exif_reader, EXIF_TAG_YRESOLUTION);
+  if (yres) {
+    parse_exif_rational_tag (exif_reader, GST_TAG_IMAGE_VERTICAL_PPI,
+        yres->count, yres->offset, multiplier, FALSE);
+  }
+
+  return 0;
+}
+
+static void
+serialize_scene_type (GstExifWriter * writer, const GstTagList * taglist,
+    const GstExifTagMatch * exiftag)
+{
+  const gchar *str;
+  guint8 value = 0;
+
+  if (gst_tag_list_peek_string_index (taglist, GST_TAG_CAPTURING_SOURCE, 0,
+          &str)) {
+    if (strcmp (str, "dsc") == 0) {
+      value = 1;
+    }
+  }
+
+  if (value != 0)
+    write_exif_undefined_tag (writer, exiftag->exif_tag, &value, 1);
+}
+
+static gint
+deserialize_scene_type (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  guint8 value = 0;
+
+  GST_LOG ("Starting to parse %s tag in exif 0x%x", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  value = GST_READ_UINT8 (tagdata->offset_as_data);
+
+  if (value == 1) {
+    gst_tag_list_add (exif_reader->taglist, GST_TAG_MERGE_KEEP,
+        GST_TAG_CAPTURING_SOURCE, "dsc", NULL);
+  }
+
+  return 0;
+}
+
+static gint
+deserialize_add_to_pending_tags (GstExifReader * exif_reader,
+    GstByteReader * reader, const GstExifTagMatch * exiftag,
+    GstExifTagData * tagdata)
+{
+  GST_LOG ("Adding %s tag in exif 0x%x to pending tags", exiftag->gst_tag,
+      exiftag->exif_tag);
+
+  /* add it to the pending tags, as we can only parse it when we find the
+   * SensitivityType tag */
+  gst_exif_reader_add_pending_tag (exif_reader, tagdata);
+  return 0;
+}
+
+#undef EXIF_SERIALIZATION_FUNC
+#undef EXIF_DESERIALIZATION_FUNC
+#undef EXIF_SERIALIZATION_DESERIALIZATION_FUNC
diff --git a/gst-libs/gst/tag/gstid3tag.c b/gst-libs/gst/tag/gstid3tag.c
new file mode 100644
index 0000000..8b1b8f1
--- /dev/null
+++ b/gst-libs/gst/tag/gstid3tag.c
@@ -0,0 +1,381 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * gstid3tag.c: plugin for reading / modifying id3 tags
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagid3
+ * @short_description: tag mappings and support functions for plugins
+ *                     dealing with ID3v1 and ID3v2 tags
+ * @see_also: #GstTagList
+ * 
+ * <refsect2>
+ * <para>
+ * Contains various utility functions for plugins to parse or create
+ * ID3 tags and map ID3v2 identifiers to and from GStreamer identifiers.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttageditingprivate.h"
+#include <stdlib.h>
+#include <string.h>
+
+static const gchar genres[] =
+    "Blues\000Classic Rock\000Country\000Dance\000Disco\000Funk\000Grunge\000"
+    "Hip-Hop\000Jazz\000Metal\000New Age\000Oldies\000Other\000Pop\000R&B\000"
+    "Rap\000Reggae\000Rock\000Techno\000Industrial\000Alternative\000Ska\000"
+    "Death Metal\000Pranks\000Soundtrack\000Euro-Techno\000Ambient\000Trip-Hop"
+    "\000Vocal\000Jazz+Funk\000Fusion\000Trance\000Classical\000Instrumental\000"
+    "Acid\000House\000Game\000Sound Clip\000Gospel\000Noise\000Alternative Rock"
+    "\000Bass\000Soul\000Punk\000Space\000Meditative\000Instrumental Pop\000"
+    "Instrumental Rock\000Ethnic\000Gothic\000Darkwave\000Techno-Industrial\000"
+    "Electronic\000Pop-Folk\000Eurodance\000Dream\000Southern Rock\000Comedy"
+    "\000Cult\000Gangsta\000Top 40\000Christian Rap\000Pop/Funk\000Jungle\000"
+    "Native American\000Cabaret\000New Wave\000Psychedelic\000Rave\000Showtunes"
+    "\000Trailer\000Lo-Fi\000Tribal\000Acid Punk\000Acid Jazz\000Polka\000"
+    "Retro\000Musical\000Rock & Roll\000Hard Rock\000Folk\000Folk/Rock\000"
+    "National Folk\000Swing\000Bebob\000Latin\000Revival\000Celtic\000Bluegrass"
+    "\000Avantgarde\000Gothic Rock\000Progressive Rock\000Psychedelic Rock\000"
+    "Symphonic Rock\000Slow Rock\000Big Band\000Chorus\000Easy Listening\000"
+    "Acoustic\000Humour\000Speech\000Chanson\000Opera\000Chamber Music\000"
+    "Sonata\000Symphony\000Booty Bass\000Primus\000Porn Groove\000Satire\000"
+    "Slow Jam\000Club\000Tango\000Samba\000Folklore\000Ballad\000Power Ballad\000"
+    "Rhythmic Soul\000Freestyle\000Duet\000Punk Rock\000Drum Solo\000A Capella"
+    "\000Euro-House\000Dance Hall\000Goa\000Drum & Bass\000Club-House\000"
+    "Hardcore\000Terror\000Indie\000BritPop\000Negerpunk\000Polsk Punk\000"
+    "Beat\000Christian Gangsta Rap\000Heavy Metal\000Black Metal\000"
+    "Crossover\000Contemporary Christian\000Christian Rock\000Merengue\000"
+    "Salsa\000Thrash Metal\000Anime\000Jpop\000Synthpop";
+
+static const guint16 genres_idx[] = {
+  0, 6, 19, 27, 33, 39, 44, 51, 59, 64, 70, 78, 85, 91, 95, 99, 103, 110, 115,
+  122, 133, 145, 149, 161, 168, 179, 191, 199, 208, 214, 224, 231, 238, 248,
+  261, 266, 272, 277, 288, 295, 301, 318, 323, 328, 333, 339, 350, 367, 385,
+  392, 399, 408, 426, 437, 446, 456, 462, 476, 483, 488, 496, 503, 517, 526,
+  533, 549, 557, 566, 578, 583, 593, 601, 607, 614, 624, 634, 640, 646, 654,
+  666, 676, 681, 691, 705, 224, 711, 717, 723, 731, 738, 748, 759, 771, 788,
+  805, 820, 830, 839, 846, 861, 870, 877, 884, 892, 898, 912, 919, 928, 939,
+  946, 958, 965, 974, 979, 985, 991, 1000, 1007, 1020, 1034, 1044, 1049,
+  1059, 1069, 1079, 1090, 1101, 1105, 1117, 1128, 1137, 1144, 1150, 1158,
+  1168, 1179, 1184, 1206, 1218, 1230, 1240, 1263, 1278, 1287, 1293, 1306,
+  1312, 1317
+};
+
+static const GstTagEntryMatch tag_matches[] = {
+  {GST_TAG_TITLE, "TIT2"},
+  {GST_TAG_ALBUM, "TALB"},
+  {GST_TAG_TRACK_NUMBER, "TRCK"},
+  {GST_TAG_ARTIST, "TPE1"},
+  {GST_TAG_ALBUM_ARTIST, "TPE2"},
+  {GST_TAG_COMPOSER, "TCOM"},
+  {GST_TAG_COPYRIGHT, "TCOP"},
+  {GST_TAG_COPYRIGHT_URI, "WCOP"},
+  {GST_TAG_ENCODED_BY, "TENC"},
+  {GST_TAG_GENRE, "TCON"},
+  {GST_TAG_DATE, "TDRC"},
+  {GST_TAG_COMMENT, "COMM"},
+  {GST_TAG_ALBUM_VOLUME_NUMBER, "TPOS"},
+  {GST_TAG_DURATION, "TLEN"},
+  {GST_TAG_ISRC, "TSRC"},
+  {GST_TAG_IMAGE, "APIC"},
+  {GST_TAG_ENCODER, "TSSE"},
+  {GST_TAG_BEATS_PER_MINUTE, "TBPM"},
+  {GST_TAG_ARTIST_SORTNAME, "TSOP"},
+  {GST_TAG_ALBUM_SORTNAME, "TSOA"},
+  {GST_TAG_TITLE_SORTNAME, "TSOT"},
+  {NULL, NULL}
+};
+
+/**
+ * gst_tag_from_id3_tag:
+ * @id3_tag: ID3v2 tag to convert to GStreamer tag
+ *
+ * Looks up the GStreamer tag for a ID3v2 tag.
+ *
+ * Returns: The corresponding GStreamer tag or NULL if none exists.
+ */
+const gchar *
+gst_tag_from_id3_tag (const gchar * id3_tag)
+{
+  int i = 0;
+
+  g_return_val_if_fail (id3_tag != NULL, NULL);
+
+  while (tag_matches[i].gstreamer_tag != NULL) {
+    if (strncmp (id3_tag, tag_matches[i].original_tag, 5) == 0) {
+      return tag_matches[i].gstreamer_tag;
+    }
+    i++;
+  }
+
+  GST_INFO ("Cannot map ID3v2 tag '%c%c%c%c' to GStreamer tag",
+      id3_tag[0], id3_tag[1], id3_tag[2], id3_tag[3]);
+
+  return NULL;
+}
+
+static const GstTagEntryMatch user_tag_matches[] = {
+  /* musicbrainz identifiers being used in the real world (foobar2000) */
+  {GST_TAG_MUSICBRAINZ_ARTISTID, "TXXX|musicbrainz_artistid"},
+  {GST_TAG_MUSICBRAINZ_ALBUMID, "TXXX|musicbrainz_albumid"},
+  {GST_TAG_MUSICBRAINZ_ALBUMARTISTID, "TXXX|musicbrainz_albumartistid"},
+  {GST_TAG_MUSICBRAINZ_TRMID, "TXXX|musicbrainz_trmid"},
+  {GST_TAG_CDDA_MUSICBRAINZ_DISCID, "TXXX|musicbrainz_discid"},
+  /* musicbrainz identifiers according to spec no one pays
+   * attention to (http://musicbrainz.org/docs/specs/metadata_tags.html) */
+  {GST_TAG_MUSICBRAINZ_ARTISTID, "TXXX|MusicBrainz Artist Id"},
+  {GST_TAG_MUSICBRAINZ_ALBUMID, "TXXX|MusicBrainz Album Id"},
+  {GST_TAG_MUSICBRAINZ_ALBUMARTISTID, "TXXX|MusicBrainz Album Artist Id"},
+  {GST_TAG_MUSICBRAINZ_TRMID, "TXXX|MusicBrainz TRM Id"},
+  /* according to: http://wiki.musicbrainz.org/MusicBrainzTag (yes, no space
+   * before 'ID' and not 'Id' either this time, yay for consistency) */
+  {GST_TAG_CDDA_MUSICBRAINZ_DISCID, "TXXX|MusicBrainz DiscID"},
+  /* foobar2000 uses these identifiers to store gain/peak information in
+   * ID3v2 tags <= v2.3.0. In v2.4.0 there's the RVA2 frame for that */
+  {GST_TAG_TRACK_GAIN, "TXXX|replaygain_track_gain"},
+  {GST_TAG_TRACK_PEAK, "TXXX|replaygain_track_peak"},
+  {GST_TAG_ALBUM_GAIN, "TXXX|replaygain_album_gain"},
+  {GST_TAG_ALBUM_PEAK, "TXXX|replaygain_album_peak"},
+  /* the following two are more or less made up, there seems to be little
+   * evidence that any popular application is actually putting this info
+   * into TXXX frames; the first one comes from a musicbrainz wiki 'proposed
+   * tags' page, the second one is analogue to the vorbis/ape/flac tag. */
+  {GST_TAG_CDDA_CDDB_DISCID, "TXXX|discid"},
+  {GST_TAG_CDDA_CDDB_DISCID, "TXXX|CDDB DiscID"}
+};
+
+/**
+ * gst_tag_from_id3_user_tag:
+ * @type: the type of ID3v2 user tag (e.g. "TXXX" or "UDIF")
+ * @id3_user_tag: ID3v2 user tag to convert to GStreamer tag
+ *
+ * Looks up the GStreamer tag for an ID3v2 user tag (e.g. description in
+ * TXXX frame or owner in UFID frame).
+ *
+ * Returns: The corresponding GStreamer tag or NULL if none exists.
+ */
+const gchar *
+gst_tag_from_id3_user_tag (const gchar * type, const gchar * id3_user_tag)
+{
+  int i = 0;
+
+  g_return_val_if_fail (type != NULL && strlen (type) == 4, NULL);
+  g_return_val_if_fail (id3_user_tag != NULL, NULL);
+
+  for (i = 0; i < G_N_ELEMENTS (user_tag_matches); ++i) {
+    if (strncmp (type, user_tag_matches[i].original_tag, 4) == 0 &&
+        g_ascii_strcasecmp (id3_user_tag,
+            user_tag_matches[i].original_tag + 5) == 0) {
+      GST_LOG ("Mapped ID3v2 user tag '%s' to GStreamer tag '%s'",
+          user_tag_matches[i].original_tag, user_tag_matches[i].gstreamer_tag);
+      return user_tag_matches[i].gstreamer_tag;
+    }
+  }
+
+  GST_INFO ("Cannot map ID3v2 user tag '%s' of type '%s' to GStreamer tag",
+      id3_user_tag, type);
+
+  return NULL;
+}
+
+/**
+ * gst_tag_to_id3_tag:
+ * @gst_tag: GStreamer tag to convert to vorbiscomment tag
+ *
+ * Looks up the ID3v2 tag for a GStreamer tag.
+ *
+ * Returns: The corresponding ID3v2 tag or NULL if none exists.
+ */
+const gchar *
+gst_tag_to_id3_tag (const gchar * gst_tag)
+{
+  int i = 0;
+
+  g_return_val_if_fail (gst_tag != NULL, NULL);
+
+  while (tag_matches[i].gstreamer_tag != NULL) {
+    if (strcmp (gst_tag, tag_matches[i].gstreamer_tag) == 0) {
+      return tag_matches[i].original_tag;
+    }
+    i++;
+  }
+  return NULL;
+}
+
+static void
+gst_tag_extract_id3v1_string (GstTagList * list, const gchar * tag,
+    const gchar * start, const guint size)
+{
+  const gchar *env_vars[] = { "GST_ID3V1_TAG_ENCODING",
+    "GST_ID3_TAG_ENCODING", "GST_TAG_ENCODING", NULL
+  };
+  gchar *utf8;
+
+  utf8 = gst_tag_freeform_string_to_utf8 (start, size, env_vars);
+
+  if (utf8 && *utf8 != '\0') {
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, tag, utf8, NULL);
+  }
+
+  g_free (utf8);
+}
+
+/**
+ * gst_tag_list_new_from_id3v1:
+ * @data: 128 bytes of data containing the ID3v1 tag
+ *
+ * Parses the data containing an ID3v1 tag and returns a #GstTagList from the
+ * parsed data.
+ *
+ * Returns: A new tag list or NULL if the data was not an ID3v1 tag.
+ */
+GstTagList *
+gst_tag_list_new_from_id3v1 (const guint8 * data)
+{
+  guint year;
+  gchar *ystr;
+  GstTagList *list;
+
+  g_return_val_if_fail (data != NULL, NULL);
+
+  if (data[0] != 'T' || data[1] != 'A' || data[2] != 'G')
+    return NULL;
+  list = gst_tag_list_new ();
+  gst_tag_extract_id3v1_string (list, GST_TAG_TITLE, (gchar *) & data[3], 30);
+  gst_tag_extract_id3v1_string (list, GST_TAG_ARTIST, (gchar *) & data[33], 30);
+  gst_tag_extract_id3v1_string (list, GST_TAG_ALBUM, (gchar *) & data[63], 30);
+  ystr = g_strndup ((gchar *) & data[93], 4);
+  year = strtoul (ystr, NULL, 10);
+  g_free (ystr);
+  if (year > 0) {
+    GDate *date = g_date_new_dmy (1, 1, year);
+
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_DATE, date, NULL);
+    g_date_free (date);
+  }
+  if (data[125] == 0 && data[126] != 0) {
+    gst_tag_extract_id3v1_string (list, GST_TAG_COMMENT, (gchar *) & data[97],
+        28);
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_TRACK_NUMBER,
+        (guint) data[126], NULL);
+  } else {
+    gst_tag_extract_id3v1_string (list, GST_TAG_COMMENT, (gchar *) & data[97],
+        30);
+  }
+  if (data[127] < gst_tag_id3_genre_count () && !gst_tag_list_is_empty (list)) {
+    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_GENRE,
+        gst_tag_id3_genre_get (data[127]), NULL);
+  }
+
+  return list;
+}
+
+/**
+ * gst_tag_id3_genre_count:
+ *
+ * Gets the number of ID3v1 genres that can be identified. Winamp genres are 
+ * included.
+ *
+ * Returns: the number of ID3v1 genres that can be identified
+ */
+guint
+gst_tag_id3_genre_count (void)
+{
+  return G_N_ELEMENTS (genres_idx);
+}
+
+/**
+ * gst_tag_id3_genre_get:
+ * @id: ID of genre to query
+ *
+ * Gets the ID3v1 genre name for a given ID.
+ *
+ * Returns: the genre or NULL if no genre is associated with that ID.
+ */
+const gchar *
+gst_tag_id3_genre_get (const guint id)
+{
+  guint idx;
+
+  if (id >= G_N_ELEMENTS (genres_idx))
+    return NULL;
+  idx = genres_idx[id];
+  g_assert (idx < sizeof (genres));
+  return &genres[idx];
+}
+
+/**
+ * gst_tag_list_add_id3_image:
+ * @tag_list: a tag list
+ * @image_data: the (encoded) image
+ * @image_data_len: the length of the encoded image data at @image_data
+ * @id3_picture_type: picture type as per the ID3 (v2.4.0) specification for
+ *    the APIC frame (0 = unknown/other)
+ *
+ * Adds an image from an ID3 APIC frame (or similar, such as used in FLAC)
+ * to the given tag list. Also see gst_tag_image_data_to_image_buffer() for
+ * more information on image tags in GStreamer.
+ *
+ * Returns: %TRUE if the image was processed, otherwise %FALSE
+ *
+ * Since: 0.10.20
+ */
+gboolean
+gst_tag_list_add_id3_image (GstTagList * tag_list, const guint8 * image_data,
+    guint image_data_len, guint id3_picture_type)
+{
+  GstTagImageType tag_image_type;
+  const gchar *tag_name;
+  GstBuffer *image;
+
+  g_return_val_if_fail (GST_IS_TAG_LIST (tag_list), FALSE);
+  g_return_val_if_fail (image_data != NULL, FALSE);
+  g_return_val_if_fail (image_data_len > 0, FALSE);
+
+  if (id3_picture_type == 0x01 || id3_picture_type == 0x02) {
+    /* file icon for preview. Don't add image-type to caps, since there
+     * is only supposed to be one of these, and the type is already indicated
+     * via the special tag */
+    tag_name = GST_TAG_PREVIEW_IMAGE;
+    tag_image_type = GST_TAG_IMAGE_TYPE_NONE;
+  } else {
+    tag_name = GST_TAG_IMAGE;
+
+    /* Remap the ID3v2 APIC type our ImageType enum */
+    if (id3_picture_type >= 0x3 && id3_picture_type <= 0x14)
+      tag_image_type = (GstTagImageType) (id3_picture_type - 2);
+    else
+      tag_image_type = GST_TAG_IMAGE_TYPE_UNDEFINED;
+  }
+
+  image = gst_tag_image_data_to_image_buffer (image_data, image_data_len,
+      tag_image_type);
+
+  if (image == NULL)
+    return FALSE;
+
+  gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, image, NULL);
+  gst_buffer_unref (image);
+  return TRUE;
+}
diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
new file mode 100644
index 0000000..ab4bbc4
--- /dev/null
+++ b/gst-libs/gst/tag/gsttagdemux.c
@@ -0,0 +1,1552 @@
+/* GStreamer Base Class for Tag Demuxing
+ * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright (C) 2006-2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagdemux
+ * @see_also: GstApeDemux, GstID3Demux
+ * @short_description: Base class for demuxing tags that are in chunks
+ *                     directly at the beginning or at the end of a file
+ * 
+ * <refsect2>
+ * <para>
+ * Provides a base class for demuxing tags at the beginning or end of a
+ * stream and handles things like typefinding, querying, seeking, and
+ * different modes of operation (chain-based, pull_range-based, and providing
+ * downstream elements with random access if upstream supports that). The tag
+ * is stripped from the output, and all offsets are adjusted for the tag
+ * sizes, so that to the downstream element the stream will appear as if
+ * there was no tag at all. Also, once the tag has been parsed, GstTagDemux
+ * will try to determine the media type of the resulting stream and add a
+ * source pad with the appropriate caps in order to facilitate auto-plugging.
+ * </para>
+ * <title>Deriving from GstTagDemux</title>
+ * <para>
+ * Subclasses have to do four things:
+ * <itemizedlist>
+ *  <listitem><para>
+ *  In their base init function, they must add a pad template for the sink
+ *  pad to the element class, describing the media type they can parse in
+ *  the caps of the pad template.
+ *  </para></listitem>
+ *  <listitem><para>
+ *  In their class init function, they must override
+ *  GST_TAG_DEMUX_CLASS(demux_klass)->identify_tag with their own identify
+ *  function.
+ *  </para></listitem>
+ *  <listitem><para>
+ *  In their class init function, they must override
+ *  GST_TAG_DEMUX_CLASS(demux_klass)->parse_tag with their own parse
+ *  function.
+ *  </para></listitem>
+ *  <listitem><para>
+ *  In their class init function, they must also set
+ *  GST_TAG_DEMUX_CLASS(demux_klass)->min_start_size and/or 
+ *  GST_TAG_DEMUX_CLASS(demux_klass)->min_end_size to the minimum size required
+ *  for the identify function to decide whether the stream has a supported tag
+ *  or not. A class parsing ID3v1 tags, for example, would set min_end_size to
+ *  128 bytes.
+ *  </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttagdemux.h"
+
+#include <gst/base/gsttypefindhelper.h>
+#include <gst/gst-i18n-plugin.h>
+#include <string.h>
+
+typedef enum
+{
+  GST_TAG_DEMUX_READ_START_TAG,
+  GST_TAG_DEMUX_TYPEFINDING,
+  GST_TAG_DEMUX_STREAMING
+} GstTagDemuxState;
+
+struct _GstTagDemuxPrivate
+{
+  GstPad *srcpad;
+  GstPad *sinkpad;
+
+  /* Number of bytes to remove from the
+   * start of file (tag at beginning) */
+  guint strip_start;
+
+  /* Number of bytes to remove from the
+   * end of file (tag at end) */
+  guint strip_end;
+
+  gint64 upstream_size;
+
+  GstTagDemuxState state;
+  GstBuffer *collect;
+  gsize collect_size;
+  GstCaps *src_caps;
+
+  GstTagList *event_tags;
+  GstTagList *parsed_tags;
+  gboolean send_tag_event;
+
+  GstSegment segment;
+  gboolean need_newseg;
+
+  GList *pending_events;
+};
+
+/* Require at least 8kB of data before we attempt typefind. 
+ * Seems a decent value based on test files
+ * 40kB is massive overkill for the maximum, I think, but it 
+ * doesn't do any harm (tpm: increased to 64kB after watching
+ * typefinding fail on a wavpack file that needed 42kB to succeed) */
+#define TYPE_FIND_MIN_SIZE 8192
+#define TYPE_FIND_MAX_SIZE 65536
+
+GST_DEBUG_CATEGORY_STATIC (tagdemux_debug);
+#define GST_CAT_DEFAULT (tagdemux_debug)
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS ("ANY")
+    );
+
+static void gst_tag_demux_dispose (GObject * object);
+
+static GstFlowReturn gst_tag_demux_chain (GstPad * pad, GstBuffer * buf);
+static gboolean gst_tag_demux_sink_event (GstPad * pad, GstEvent * event);
+
+static gboolean gst_tag_demux_src_activate_pull (GstPad * pad, gboolean active);
+static GstFlowReturn gst_tag_demux_read_range (GstTagDemux * tagdemux,
+    guint64 offset, guint length, GstBuffer ** buffer);
+
+static GstFlowReturn gst_tag_demux_src_getrange (GstPad * srcpad,
+    guint64 offset, guint length, GstBuffer ** buffer);
+
+static gboolean gst_tag_demux_add_srcpad (GstTagDemux * tagdemux,
+    GstCaps * new_caps);
+static gboolean gst_tag_demux_remove_srcpad (GstTagDemux * tagdemux);
+
+static gboolean gst_tag_demux_srcpad_event (GstPad * pad, GstEvent * event);
+static gboolean gst_tag_demux_sink_activate (GstPad * sinkpad);
+static GstStateChangeReturn gst_tag_demux_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean gst_tag_demux_pad_query (GstPad * pad, GstQuery * query);
+static const GstQueryType *gst_tag_demux_get_query_types (GstPad * pad);
+static gboolean gst_tag_demux_get_upstream_size (GstTagDemux * tagdemux);
+static void gst_tag_demux_send_pending_events (GstTagDemux * tagdemux);
+static void gst_tag_demux_send_tag_event (GstTagDemux * tagdemux);
+static gboolean gst_tag_demux_send_new_segment (GstTagDemux * tagdemux);
+
+static void gst_tag_demux_base_init (gpointer g_class);
+static void gst_tag_demux_class_init (gpointer g_class, gpointer d);
+static void gst_tag_demux_init (GstTagDemux * obj, GstTagDemuxClass * klass);
+
+static gpointer parent_class;   /* NULL */
+
+GType
+gst_tag_demux_result_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      {GST_TAG_DEMUX_RESULT_BROKEN_TAG, "GST_TAG_DEMUX_RESULT_BROKEN_TAG",
+          "broken-tag"},
+      {GST_TAG_DEMUX_RESULT_AGAIN, "GST_TAG_DEMUX_RESULT_AGAIN", "again"},
+      {GST_TAG_DEMUX_RESULT_OK, "GST_TAG_DEMUX_RESULT_OK", "ok"},
+      {0, NULL, NULL}
+    };
+    etype = g_enum_register_static ("GstTagDemuxResult", values);
+  }
+  return etype;
+}
+
+/* Cannot use boilerplate macros here because we want the abstract flag */
+GType
+gst_tag_demux_get_type (void)
+{
+  static GType object_type;     /* 0 */
+
+  if (object_type == 0) {
+    static const GTypeInfo object_info = {
+      sizeof (GstTagDemuxClass),
+      gst_tag_demux_base_init,
+      NULL,                     /* base_finalize */
+      gst_tag_demux_class_init,
+      NULL,                     /* class_finalize */
+      NULL,                     /* class_data */
+      sizeof (GstTagDemux),
+      0,                        /* n_preallocs */
+      (GInstanceInitFunc) gst_tag_demux_init
+    };
+
+    object_type = g_type_register_static (GST_TYPE_ELEMENT,
+        "GstTagDemux", &object_info, G_TYPE_FLAG_ABSTRACT);
+  }
+
+  return object_type;
+}
+
+static void
+gst_tag_demux_base_init (gpointer klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_factory));
+
+  GST_DEBUG_CATEGORY_INIT (tagdemux_debug, "tagdemux", 0,
+      "tag demux base class");
+}
+
+static void
+gst_tag_demux_class_init (gpointer klass, gpointer d)
+{
+  GstTagDemuxClass *tagdemux_class = GST_TAG_DEMUX_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->dispose = gst_tag_demux_dispose;
+
+  element_class->change_state = GST_DEBUG_FUNCPTR (gst_tag_demux_change_state);
+
+  g_type_class_add_private (klass, sizeof (GstTagDemuxPrivate));
+
+  /* subclasses must set at least one of these */
+  tagdemux_class->min_start_size = 0;
+  tagdemux_class->min_end_size = 0;
+}
+
+static void
+gst_tag_demux_reset (GstTagDemux * tagdemux)
+{
+  GstBuffer **buffer_p = &tagdemux->priv->collect;
+  GstCaps **caps_p = &tagdemux->priv->src_caps;
+
+  tagdemux->priv->strip_start = 0;
+  tagdemux->priv->strip_end = 0;
+  tagdemux->priv->upstream_size = -1;
+  tagdemux->priv->state = GST_TAG_DEMUX_READ_START_TAG;
+  tagdemux->priv->send_tag_event = FALSE;
+
+  gst_buffer_replace (buffer_p, NULL);
+  tagdemux->priv->collect_size = 0;
+  gst_caps_replace (caps_p, NULL);
+
+  gst_tag_demux_remove_srcpad (tagdemux);
+
+  if (tagdemux->priv->event_tags) {
+    gst_tag_list_free (tagdemux->priv->event_tags);
+    tagdemux->priv->event_tags = NULL;
+  }
+  if (tagdemux->priv->parsed_tags) {
+    gst_tag_list_free (tagdemux->priv->parsed_tags);
+    tagdemux->priv->parsed_tags = NULL;
+  }
+
+  gst_segment_init (&tagdemux->priv->segment, GST_FORMAT_UNDEFINED);
+  tagdemux->priv->need_newseg = TRUE;
+
+  g_list_foreach (tagdemux->priv->pending_events,
+      (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (tagdemux->priv->pending_events);
+  tagdemux->priv->pending_events = NULL;
+}
+
+static void
+gst_tag_demux_init (GstTagDemux * demux, GstTagDemuxClass * gclass)
+{
+  GstElementClass *element_klass = GST_ELEMENT_CLASS (gclass);
+  GstPadTemplate *tmpl;
+
+  demux->priv = g_type_instance_get_private ((GTypeInstance *) demux,
+      GST_TYPE_TAG_DEMUX);
+
+  tmpl = gst_element_class_get_pad_template (element_klass, "sink");
+  if (tmpl) {
+    demux->priv->sinkpad = gst_pad_new_from_template (tmpl, "sink");
+
+    gst_pad_set_activate_function (demux->priv->sinkpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_sink_activate));
+    gst_pad_set_event_function (demux->priv->sinkpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_sink_event));
+    gst_pad_set_chain_function (demux->priv->sinkpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_chain));
+    gst_element_add_pad (GST_ELEMENT (demux), demux->priv->sinkpad);
+  }
+
+  gst_tag_demux_reset (demux);
+}
+
+static void
+gst_tag_demux_dispose (GObject * object)
+{
+  GstTagDemux *tagdemux = GST_TAG_DEMUX (object);
+
+  gst_tag_demux_reset (tagdemux);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static gboolean
+gst_tag_demux_add_srcpad (GstTagDemux * tagdemux, GstCaps * new_caps)
+{
+  if (tagdemux->priv->src_caps == NULL ||
+      !gst_caps_is_equal (new_caps, tagdemux->priv->src_caps)) {
+
+    gst_caps_replace (&tagdemux->priv->src_caps, new_caps);
+
+    if (tagdemux->priv->srcpad != NULL) {
+      GST_DEBUG_OBJECT (tagdemux, "Changing src pad caps to %" GST_PTR_FORMAT,
+          tagdemux->priv->src_caps);
+
+      gst_pad_set_caps (tagdemux->priv->srcpad, tagdemux->priv->src_caps);
+    }
+  } else {
+    /* Caps never changed */
+  }
+
+  if (tagdemux->priv->srcpad == NULL) {
+    tagdemux->priv->srcpad =
+        gst_pad_new_from_template (gst_element_class_get_pad_template
+        (GST_ELEMENT_GET_CLASS (tagdemux), "src"), "src");
+    g_return_val_if_fail (tagdemux->priv->srcpad != NULL, FALSE);
+
+    gst_pad_set_query_type_function (tagdemux->priv->srcpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_get_query_types));
+    gst_pad_set_query_function (tagdemux->priv->srcpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_pad_query));
+    gst_pad_set_event_function (tagdemux->priv->srcpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_srcpad_event));
+    gst_pad_set_activatepull_function (tagdemux->priv->srcpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_src_activate_pull));
+    gst_pad_set_getrange_function (tagdemux->priv->srcpad,
+        GST_DEBUG_FUNCPTR (gst_tag_demux_src_getrange));
+
+    gst_pad_use_fixed_caps (tagdemux->priv->srcpad);
+
+    if (tagdemux->priv->src_caps)
+      gst_pad_set_caps (tagdemux->priv->srcpad, tagdemux->priv->src_caps);
+
+    GST_DEBUG_OBJECT (tagdemux, "Adding src pad with caps %" GST_PTR_FORMAT,
+        tagdemux->priv->src_caps);
+
+    gst_object_ref (tagdemux->priv->srcpad);
+    gst_pad_set_active (tagdemux->priv->srcpad, TRUE);
+    if (!gst_element_add_pad (GST_ELEMENT (tagdemux), tagdemux->priv->srcpad))
+      return FALSE;
+    gst_element_no_more_pads (GST_ELEMENT (tagdemux));
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_tag_demux_remove_srcpad (GstTagDemux * demux)
+{
+  gboolean res = TRUE;
+
+  if (demux->priv->srcpad != NULL) {
+    GST_DEBUG_OBJECT (demux, "Removing src pad");
+    res = gst_element_remove_pad (GST_ELEMENT (demux), demux->priv->srcpad);
+    g_return_val_if_fail (res != FALSE, FALSE);
+    gst_object_unref (demux->priv->srcpad);
+    demux->priv->srcpad = NULL;
+  }
+
+  return res;
+};
+
+/* will return FALSE if buffer is beyond end of data; will return TRUE
+ * if buffer was trimmed successfully or didn't need trimming, but may
+ * also return TRUE and set *buf_ref to NULL if the buffer was before
+ * the start of the data */
+static gboolean
+gst_tag_demux_trim_buffer (GstTagDemux * tagdemux, GstBuffer ** buf_ref,
+    gsize * buf_size)
+{
+  GstBuffer *buf = *buf_ref;
+
+  guint trim_start = 0;
+  guint out_size, bsize;
+  guint64 out_offset, boffset;
+  gboolean need_sub = FALSE;
+
+  bsize = out_size = gst_buffer_get_size (buf);
+  boffset = out_offset = GST_BUFFER_OFFSET (buf);
+
+  /* Adjust offset and length */
+  if (!GST_BUFFER_OFFSET_IS_VALID (buf)) {
+    /* Can't change anything without an offset */
+    *buf_size = bsize;
+    return TRUE;
+  }
+
+  /* If the buffer crosses the tag at the end of file, trim it */
+  if (tagdemux->priv->strip_end > 0) {
+    if (gst_tag_demux_get_upstream_size (tagdemux)) {
+      guint64 v1tag_offset =
+          tagdemux->priv->upstream_size - tagdemux->priv->strip_end;
+
+      if (out_offset >= v1tag_offset) {
+        GST_DEBUG_OBJECT (tagdemux, "Buffer is past the end of the data");
+        goto no_out_buffer_end;
+      }
+
+      if (out_offset + out_size > v1tag_offset) {
+        out_size = v1tag_offset - out_offset;
+        need_sub = TRUE;
+      }
+    }
+  }
+
+  if (tagdemux->priv->strip_start > 0) {
+    /* If the buffer crosses the tag at the start of file, trim it */
+    if (out_offset <= tagdemux->priv->strip_start) {
+      if (out_offset + out_size <= tagdemux->priv->strip_start) {
+        GST_DEBUG_OBJECT (tagdemux, "Buffer is before the start of the data");
+        goto no_out_buffer_start;
+      }
+
+      trim_start = tagdemux->priv->strip_start - out_offset;
+      out_size -= trim_start;
+      out_offset = 0;
+    } else {
+      out_offset -= tagdemux->priv->strip_start;
+    }
+    need_sub = TRUE;
+  }
+
+  if (need_sub == TRUE) {
+    if (out_size != bsize || !gst_buffer_is_writable (buf)) {
+      GstBuffer *sub;
+
+      GST_DEBUG_OBJECT (tagdemux, "Sub-buffering to trim size %d offset %"
+          G_GINT64_FORMAT " to %d offset %" G_GINT64_FORMAT,
+          bsize, boffset, out_size, out_offset);
+
+      sub =
+          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, trim_start,
+          out_size);
+      g_return_val_if_fail (sub != NULL, FALSE);
+      gst_buffer_unref (buf);
+      *buf_ref = buf = sub;
+      *buf_size = out_size;
+    } else {
+      GST_DEBUG_OBJECT (tagdemux, "Adjusting buffer from size %d offset %"
+          G_GINT64_FORMAT " to %d offset %" G_GINT64_FORMAT,
+          bsize, boffset, out_size, out_offset);
+    }
+
+    GST_BUFFER_OFFSET (buf) = out_offset;
+    GST_BUFFER_OFFSET_END (buf) = out_offset + out_size;
+  }
+
+  return TRUE;
+
+no_out_buffer_end:
+  {
+    gst_buffer_unref (buf);
+    *buf_ref = NULL;
+    return FALSE;
+  }
+no_out_buffer_start:
+  {
+    gst_buffer_unref (buf);
+    *buf_ref = NULL;
+    return TRUE;
+  }
+}
+
+static void
+gst_tag_demux_chain_parse_tag (GstTagDemux * demux, GstBuffer * collect)
+{
+  GstTagDemuxResult parse_ret;
+  GstTagDemuxClass *klass;
+  guint tagsize = 0;
+  guint available;
+
+  g_assert (gst_buffer_is_writable (collect));
+
+  klass = GST_TAG_DEMUX_CLASS (G_OBJECT_GET_CLASS (demux));
+
+  /* If we receive a buffer that's from the middle of the file, 
+   * we can't read tags so move to typefinding */
+  if (GST_BUFFER_OFFSET_IS_VALID (collect) && GST_BUFFER_OFFSET (collect) != 0) {
+    GST_DEBUG_OBJECT (demux, "Received buffer from non-zero offset %"
+        G_GINT64_FORMAT ". Can't read tags", GST_BUFFER_OFFSET (collect));
+    demux->priv->state = GST_TAG_DEMUX_TYPEFINDING;
+    return;
+  }
+
+  g_assert (klass->identify_tag != NULL);
+  g_assert (klass->parse_tag != NULL);
+
+  available = gst_buffer_get_size (collect);
+
+  if (available < klass->min_start_size) {
+    GST_DEBUG_OBJECT (demux, "Only %u bytes available, but %u needed "
+        "to identify tag", available, klass->min_start_size);
+    return;                     /* wait for more data */
+  }
+
+  if (!klass->identify_tag (demux, collect, TRUE, &tagsize)) {
+    GST_DEBUG_OBJECT (demux, "Could not identify start tag");
+    demux->priv->state = GST_TAG_DEMUX_TYPEFINDING;
+    return;
+  }
+
+  /* need to set offset of first buffer to 0 or trimming won't work */
+  if (!GST_BUFFER_OFFSET_IS_VALID (collect)) {
+    GST_WARNING_OBJECT (demux, "Fixing up first buffer without offset");
+    GST_BUFFER_OFFSET (collect) = 0;
+  }
+
+  GST_DEBUG_OBJECT (demux, "Identified tag, size = %u bytes", tagsize);
+
+  do {
+    GstTagList *tags = NULL;
+    guint newsize, saved_size;
+
+    demux->priv->strip_start = tagsize;
+
+    if (available < tagsize) {
+      GST_DEBUG_OBJECT (demux, "Only %u bytes available, but %u needed "
+          "to parse tag", available, tagsize);
+      return;                   /* wait for more data */
+    }
+
+    saved_size = gst_buffer_get_size (collect);
+    gst_buffer_set_size (collect, tagsize);
+    newsize = tagsize;
+
+    parse_ret = klass->parse_tag (demux, collect, TRUE, &newsize, &tags);
+
+    gst_buffer_set_size (collect, saved_size);
+
+    switch (parse_ret) {
+      case GST_TAG_DEMUX_RESULT_OK:
+        demux->priv->strip_start = newsize;
+        demux->priv->parsed_tags = tags;
+        GST_DEBUG_OBJECT (demux, "Read start tag of size %u", newsize);
+        break;
+      case GST_TAG_DEMUX_RESULT_BROKEN_TAG:
+        demux->priv->strip_start = newsize;
+        demux->priv->parsed_tags = tags;
+        GST_WARNING_OBJECT (demux, "Ignoring broken start tag of size %d",
+            demux->priv->strip_start);
+        break;
+      case GST_TAG_DEMUX_RESULT_AGAIN:
+        GST_DEBUG_OBJECT (demux, "Re-parse, this time with %u bytes", newsize);
+        g_assert (newsize != tagsize);
+        tagsize = newsize;
+        break;
+    }
+  } while (parse_ret == GST_TAG_DEMUX_RESULT_AGAIN);
+
+  GST_LOG_OBJECT (demux, "Parsed tag. Proceeding to typefinding");
+  demux->priv->state = GST_TAG_DEMUX_TYPEFINDING;
+  demux->priv->send_tag_event = TRUE;
+}
+
+static GstFlowReturn
+gst_tag_demux_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstTagDemux *demux;
+  gsize size;
+
+  demux = GST_TAG_DEMUX (GST_PAD_PARENT (pad));
+
+  size = gst_buffer_get_size (buf);
+
+  /* Update our segment position info */
+  if (demux->priv->segment.format == GST_FORMAT_BYTES) {
+    if (GST_BUFFER_OFFSET_IS_VALID (buf))
+      demux->priv->segment.position = GST_BUFFER_OFFSET (buf);
+    demux->priv->segment.position += size;
+  } else if (demux->priv->segment.format == GST_FORMAT_TIME) {
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (buf))
+      demux->priv->segment.position = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_BUFFER_DURATION_IS_VALID (buf))
+      demux->priv->segment.position += GST_BUFFER_DURATION (buf);
+  }
+
+  if (demux->priv->collect == NULL) {
+    demux->priv->collect = buf;
+  } else {
+    demux->priv->collect = gst_buffer_join (demux->priv->collect, buf);
+  }
+  demux->priv->collect_size += size;
+  buf = NULL;
+
+  switch (demux->priv->state) {
+    case GST_TAG_DEMUX_READ_START_TAG:
+      demux->priv->collect = gst_buffer_make_writable (demux->priv->collect);
+      gst_tag_demux_chain_parse_tag (demux, demux->priv->collect);
+      if (demux->priv->state != GST_TAG_DEMUX_TYPEFINDING)
+        break;
+      /* Fall-through */
+    case GST_TAG_DEMUX_TYPEFINDING:{
+      GstTypeFindProbability probability = 0;
+      GstBuffer *typefind_buf = NULL;
+      gsize typefind_size;
+      GstCaps *caps;
+
+      if (demux->priv->collect_size <
+          TYPE_FIND_MIN_SIZE + demux->priv->strip_start)
+        break;                  /* Go get more data first */
+
+      GST_DEBUG_OBJECT (demux, "Typefinding with size %" G_GSIZE_FORMAT,
+          demux->priv->collect_size);
+
+      /* Trim the buffer and adjust offset for typefinding */
+      typefind_buf = demux->priv->collect;
+      gst_buffer_ref (typefind_buf);
+      if (!gst_tag_demux_trim_buffer (demux, &typefind_buf, &typefind_size))
+        return GST_FLOW_UNEXPECTED;
+
+      if (typefind_buf == NULL)
+        break;                  /* Still need more data */
+
+      caps = gst_type_find_helper_for_buffer (GST_OBJECT (demux),
+          typefind_buf, &probability);
+
+      if (caps == NULL) {
+        if (typefind_size < TYPE_FIND_MAX_SIZE) {
+          /* Just break for more data */
+          gst_buffer_unref (typefind_buf);
+          return GST_FLOW_OK;
+        }
+
+        /* We failed typefind */
+        GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL),
+            ("Could not detect type for contents within tag"));
+        gst_buffer_unref (typefind_buf);
+        gst_buffer_unref (demux->priv->collect);
+        demux->priv->collect = NULL;
+        demux->priv->collect_size = 0;
+        return GST_FLOW_ERROR;
+      }
+      gst_buffer_unref (typefind_buf);
+
+      GST_DEBUG_OBJECT (demux, "Found type %" GST_PTR_FORMAT " with a "
+          "probability of %u", caps, probability);
+
+      if (!gst_tag_demux_add_srcpad (demux, caps)) {
+        GST_DEBUG_OBJECT (demux, "Failed to add srcpad");
+        gst_caps_unref (caps);
+        goto error;
+      }
+      gst_caps_unref (caps);
+
+      /* Move onto streaming and fall-through to push out existing
+       * data */
+      demux->priv->state = GST_TAG_DEMUX_STREAMING;
+      /* fall-through */
+    }
+    case GST_TAG_DEMUX_STREAMING:{
+      GstBuffer *outbuf = NULL;
+      gsize outbuf_size;
+
+      /* Trim the buffer and adjust offset */
+      if (demux->priv->collect) {
+        outbuf = demux->priv->collect;
+        demux->priv->collect = NULL;
+        demux->priv->collect_size = 0;
+        if (!gst_tag_demux_trim_buffer (demux, &outbuf, &outbuf_size))
+          return GST_FLOW_UNEXPECTED;
+      }
+      if (outbuf) {
+        if (G_UNLIKELY (demux->priv->srcpad == NULL)) {
+          gst_buffer_unref (outbuf);
+          return GST_FLOW_ERROR;
+        }
+
+        /* Might need a new segment before the buffer */
+        if (demux->priv->need_newseg) {
+          if (!gst_tag_demux_send_new_segment (demux)) {
+            GST_WARNING_OBJECT (demux, "Downstream did not handle newsegment "
+                "event as it should");
+          }
+          demux->priv->need_newseg = FALSE;
+        }
+
+        /* send any pending events we cached */
+        gst_tag_demux_send_pending_events (demux);
+
+        /* Send our own pending tag event */
+        if (demux->priv->send_tag_event) {
+          gst_tag_demux_send_tag_event (demux);
+          demux->priv->send_tag_event = FALSE;
+        }
+
+        GST_LOG_OBJECT (demux, "Pushing buffer %p", outbuf);
+
+        return gst_pad_push (demux->priv->srcpad, outbuf);
+      }
+    }
+  }
+  return GST_FLOW_OK;
+
+error:
+  GST_DEBUG_OBJECT (demux, "error in chain function");
+
+  return GST_FLOW_ERROR;
+}
+
+static gboolean
+gst_tag_demux_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstTagDemux *demux;
+  gboolean ret;
+
+  demux = GST_TAG_DEMUX (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      if (demux->priv->srcpad == NULL) {
+        GST_WARNING_OBJECT (demux, "EOS before we found a type");
+        GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL), (NULL));
+      }
+      ret = gst_pad_event_default (pad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &demux->priv->segment);
+
+      demux->priv->need_newseg = TRUE;
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+    case GST_EVENT_FLUSH_START:
+      ret = gst_pad_event_default (pad, event);
+      break;
+    default:
+      if (demux->priv->need_newseg && GST_EVENT_IS_SERIALIZED (event)) {
+        /* Cache all events if we have a pending segment, so they don't get
+         * lost (esp. tag events) */
+        GST_INFO_OBJECT (demux, "caching event: %" GST_PTR_FORMAT, event);
+        GST_OBJECT_LOCK (demux);
+        demux->priv->pending_events =
+            g_list_append (demux->priv->pending_events, event);
+        GST_OBJECT_UNLOCK (demux);
+        ret = TRUE;
+      } else {
+        ret = gst_pad_event_default (pad, event);
+      }
+      break;
+  }
+
+  gst_object_unref (demux);
+  return ret;
+}
+
+static gboolean
+gst_tag_demux_get_upstream_size (GstTagDemux * tagdemux)
+{
+  gint64 len;
+
+  /* Short-cut if we already queried upstream */
+  if (tagdemux->priv->upstream_size > 0)
+    return TRUE;
+
+  if (!gst_pad_query_peer_duration (tagdemux->priv->sinkpad, GST_FORMAT_BYTES,
+          &len) || len <= 0) {
+    return FALSE;
+  }
+
+  tagdemux->priv->upstream_size = len;
+  return TRUE;
+}
+
+static gboolean
+gst_tag_demux_srcpad_event (GstPad * pad, GstEvent * event)
+{
+  GstTagDemux *tagdemux;
+  gboolean res = FALSE;
+
+  tagdemux = GST_TAG_DEMUX (gst_pad_get_parent (pad));
+
+  /* Handle SEEK events, with adjusted byte offsets and sizes. */
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      gdouble rate;
+      GstFormat format;
+      GstSeekType cur_type, stop_type;
+      GstSeekFlags flags;
+      gint64 cur, stop;
+
+      gst_event_parse_seek (event, &rate, &format, &flags,
+          &cur_type, &cur, &stop_type, &stop);
+
+      if (format == GST_FORMAT_BYTES &&
+          tagdemux->priv->state == GST_TAG_DEMUX_STREAMING &&
+          gst_pad_is_linked (tagdemux->priv->sinkpad)) {
+        GstEvent *upstream;
+
+        switch (cur_type) {
+          case GST_SEEK_TYPE_SET:
+            if (cur == -1)
+              cur = 0;
+            cur += tagdemux->priv->strip_start;
+            break;
+          case GST_SEEK_TYPE_CUR:
+            break;
+          case GST_SEEK_TYPE_END:
+            /* Adjust the seek to be relative to the start of any end tag
+             * (note: 10 bytes before end is represented by stop=-10) */
+            if (cur > 0)
+              cur = 0;
+            cur -= tagdemux->priv->strip_end;
+            break;
+          case GST_SEEK_TYPE_NONE:
+          default:
+            break;
+        }
+        switch (stop_type) {
+          case GST_SEEK_TYPE_SET:
+            if (stop != -1) {
+              /* -1 means the end of the file, pass it upstream intact */
+              stop += tagdemux->priv->strip_start;
+            }
+            break;
+          case GST_SEEK_TYPE_CUR:
+            break;
+          case GST_SEEK_TYPE_END:
+            /* Adjust the seek to be relative to the start of any end tag
+             * (note: 10 bytes before end is represented by stop=-10) */
+            if (stop > 0)
+              stop = 0;
+            stop -= tagdemux->priv->strip_end;
+            break;
+          case GST_SEEK_TYPE_NONE:
+          default:
+            break;
+        }
+        upstream = gst_event_new_seek (rate, format, flags,
+            cur_type, cur, stop_type, stop);
+        res = gst_pad_push_event (tagdemux->priv->sinkpad, upstream);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_push_event (tagdemux->priv->sinkpad, event);
+      event = NULL;
+      break;
+  }
+
+  gst_object_unref (tagdemux);
+  if (event)
+    gst_event_unref (event);
+  return res;
+}
+
+/* Read and interpret any end tag when activating in pull_range.
+ * Returns FALSE if pad activation should fail. */
+static gboolean
+gst_tag_demux_pull_end_tag (GstTagDemux * demux, GstTagList ** tags)
+{
+  GstTagDemuxResult parse_ret;
+  GstTagDemuxClass *klass;
+  GstFlowReturn flow_ret;
+  GstTagList *new_tags = NULL;
+  GstBuffer *buffer = NULL;
+  gboolean have_tag;
+  gboolean res = FALSE;
+  guint64 offset;
+  guint tagsize;
+  gsize bsize;
+
+  klass = GST_TAG_DEMUX_CLASS (G_OBJECT_GET_CLASS (demux));
+
+  g_assert (klass->identify_tag != NULL);
+  g_assert (klass->parse_tag != NULL);
+
+  if (klass->min_end_size == 0) {
+    GST_DEBUG_OBJECT (demux, "Not looking for tag at the end");
+    return TRUE;
+  }
+
+  if (demux->priv->upstream_size < klass->min_end_size) {
+    GST_DEBUG_OBJECT (demux, "File too small");
+    return TRUE;
+  }
+
+  /* Pull enough to identify the tag and retrieve its total size */
+  offset = demux->priv->upstream_size - klass->min_end_size;
+
+  flow_ret = gst_pad_pull_range (demux->priv->sinkpad, offset,
+      klass->min_end_size, &buffer);
+
+  if (flow_ret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (demux, "Could not read tag header from end of file, "
+        "ret = %s", gst_flow_get_name (flow_ret));
+    goto done;
+  }
+
+  bsize = gst_buffer_get_size (buffer);
+
+  if (bsize < klass->min_end_size) {
+    GST_DEBUG_OBJECT (demux, "Only managed to read %" G_GSIZE_FORMAT " bytes"
+        "from file (required: %u bytes)", bsize, klass->min_end_size);
+    goto done;
+  }
+
+  have_tag = klass->identify_tag (demux, buffer, FALSE, &tagsize);
+
+  if (!have_tag) {
+    GST_DEBUG_OBJECT (demux, "Could not find tag at end");
+    goto done;
+  }
+
+  /* Now pull the entire tag */
+  do {
+    guint newsize, saved_size;
+
+    GST_DEBUG_OBJECT (demux, "Identified tag at end, size=%u bytes", tagsize);
+
+    demux->priv->strip_end = tagsize;
+
+    g_assert (tagsize >= klass->min_end_size);
+
+    /* Get buffer that's exactly the requested size */
+    if (bsize != tagsize) {
+      gst_buffer_unref (buffer);
+      buffer = NULL;
+
+      offset = demux->priv->upstream_size - tagsize;
+
+      flow_ret = gst_pad_pull_range (demux->priv->sinkpad, offset,
+          tagsize, &buffer);
+
+      if (flow_ret != GST_FLOW_OK) {
+        GST_DEBUG_OBJECT (demux, "Could not read data from end of file at "
+            "offset %" G_GUINT64_FORMAT ". ret = %s", offset,
+            gst_flow_get_name (flow_ret));
+        goto done;
+      }
+
+      bsize = gst_buffer_get_size (buffer);
+
+      if (bsize < tagsize) {
+        GST_DEBUG_OBJECT (demux, "Only managed to read %" G_GSIZE_FORMAT
+            " bytes from file", bsize);
+        goto done;
+      }
+    }
+
+    GST_BUFFER_OFFSET (buffer) = offset;
+
+    saved_size = bsize;
+    gst_buffer_set_size (buffer, tagsize);
+    newsize = tagsize;
+
+    parse_ret = klass->parse_tag (demux, buffer, FALSE, &newsize, &new_tags);
+
+    gst_buffer_set_size (buffer, saved_size);
+
+    switch (parse_ret) {
+      case GST_TAG_DEMUX_RESULT_OK:
+        res = TRUE;
+        demux->priv->strip_end = newsize;
+        GST_DEBUG_OBJECT (demux, "Read tag at end, size %d",
+            demux->priv->strip_end);
+        break;
+      case GST_TAG_DEMUX_RESULT_BROKEN_TAG:
+        res = TRUE;
+        demux->priv->strip_end = newsize;
+        GST_WARNING_OBJECT (demux, "Ignoring broken tag at end, size %d",
+            demux->priv->strip_end);
+        break;
+      case GST_TAG_DEMUX_RESULT_AGAIN:
+        GST_DEBUG_OBJECT (demux, "Re-parse, this time with %d bytes", newsize);
+        g_assert (newsize != tagsize);
+        tagsize = newsize;
+        break;
+    }
+  } while (parse_ret == GST_TAG_DEMUX_RESULT_AGAIN);
+
+  *tags = new_tags;
+  new_tags = NULL;
+
+done:
+  if (new_tags)
+    gst_tag_list_free (new_tags);
+  if (buffer)
+    gst_buffer_unref (buffer);
+  return res;
+}
+
+/* Read and interpret any tag at the start when activating in
+ * pull_range. Returns FALSE if pad activation should fail. */
+static gboolean
+gst_tag_demux_pull_start_tag (GstTagDemux * demux, GstTagList ** tags)
+{
+  GstTagDemuxResult parse_ret;
+  GstTagDemuxClass *klass;
+  GstFlowReturn flow_ret;
+  GstTagList *new_tags = NULL;
+  GstBuffer *buffer = NULL;
+  gboolean have_tag;
+  gboolean res = FALSE;
+  guint req, tagsize;
+  gsize bsize;
+
+  klass = GST_TAG_DEMUX_CLASS (G_OBJECT_GET_CLASS (demux));
+
+  g_assert (klass->identify_tag != NULL);
+  g_assert (klass->parse_tag != NULL);
+
+  if (klass->min_start_size == 0) {
+    GST_DEBUG_OBJECT (demux, "Not looking for tag at the beginning");
+    return TRUE;
+  }
+
+  /* Handle tag at start. Try with 4kB to start with */
+  req = MAX (klass->min_start_size, 4096);
+
+  /* Pull enough to identify the tag and retrieve its total size */
+  flow_ret = gst_pad_pull_range (demux->priv->sinkpad, 0, req, &buffer);
+  if (flow_ret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (demux, "Could not read data from start of file ret=%s",
+        gst_flow_get_name (flow_ret));
+    goto done;
+  }
+
+  bsize = gst_buffer_get_size (buffer);
+
+  if (bsize < klass->min_start_size) {
+    GST_DEBUG_OBJECT (demux, "Only managed to read %" G_GSIZE_FORMAT
+        " bytes from file - no tag in this file", bsize);
+    goto done;
+  }
+
+  have_tag = klass->identify_tag (demux, buffer, TRUE, &tagsize);
+
+  if (!have_tag) {
+    GST_DEBUG_OBJECT (demux, "Could not find start tag");
+    res = TRUE;
+    goto done;
+  }
+
+  GST_DEBUG_OBJECT (demux, "Identified start tag, size = %u bytes", tagsize);
+
+  do {
+    guint newsize, saved_size;
+
+    demux->priv->strip_start = tagsize;
+
+    /* Now pull the entire tag */
+    g_assert (tagsize >= klass->min_start_size);
+
+    if (bsize < tagsize) {
+      gst_buffer_unref (buffer);
+      buffer = NULL;
+
+      flow_ret = gst_pad_pull_range (demux->priv->sinkpad, 0, tagsize, &buffer);
+      if (flow_ret != GST_FLOW_OK) {
+        GST_DEBUG_OBJECT (demux, "Could not read data from start of file, "
+            "ret = %s", gst_flow_get_name (flow_ret));
+        goto done;
+      }
+
+      bsize = gst_buffer_get_size (buffer);
+
+      if (bsize < tagsize) {
+        GST_DEBUG_OBJECT (demux, "Only managed to read %" G_GSIZE_FORMAT
+            " bytes from file", bsize);
+        GST_ELEMENT_ERROR (demux, STREAM, DECODE,
+            (_("Failed to read tag: not enough data")), (NULL));
+        goto done;
+      }
+    }
+
+    saved_size = bsize;
+    gst_buffer_set_size (buffer, tagsize);
+    newsize = tagsize;
+    parse_ret = klass->parse_tag (demux, buffer, TRUE, &newsize, &new_tags);
+
+    gst_buffer_set_size (buffer, saved_size);
+
+    switch (parse_ret) {
+      case GST_TAG_DEMUX_RESULT_OK:
+        res = TRUE;
+        demux->priv->strip_start = newsize;
+        GST_DEBUG_OBJECT (demux, "Read start tag of size %d", newsize);
+        break;
+      case GST_TAG_DEMUX_RESULT_BROKEN_TAG:
+        res = TRUE;
+        demux->priv->strip_start = newsize;
+        GST_WARNING_OBJECT (demux, "Ignoring broken start tag of size %d",
+            demux->priv->strip_start);
+        break;
+      case GST_TAG_DEMUX_RESULT_AGAIN:
+        GST_DEBUG_OBJECT (demux, "Re-parse, this time with %d bytes", newsize);
+        g_assert (newsize != tagsize);
+        tagsize = newsize;
+        break;
+    }
+  } while (parse_ret == GST_TAG_DEMUX_RESULT_AGAIN);
+
+  *tags = new_tags;
+  new_tags = NULL;
+
+done:
+  if (new_tags)
+    gst_tag_list_free (new_tags);
+  if (buffer)
+    gst_buffer_unref (buffer);
+  return res;
+}
+
+/* This function operates similarly to gst_type_find_element_activate
+ * in the typefind element
+ * 1. try to activate in pull mode. if not, switch to push and succeed.
+ * 2. try to read tags in pull mode
+ * 3. typefind the contents
+ * 4. deactivate pull mode.
+ * 5. if we didn't find any caps, fail.
+ * 6. Add the srcpad
+ * 7. if the sink pad is activated, we are in pull mode. succeed.
+ *    otherwise activate both pads in push mode and succeed.
+ */
+static gboolean
+gst_tag_demux_sink_activate (GstPad * sinkpad)
+{
+  GstTypeFindProbability probability = 0;
+  GstTagDemuxClass *klass;
+  GstTagDemux *demux;
+  GstTagList *start_tags = NULL;
+  GstTagList *end_tags = NULL;
+  gboolean e_tag_ok, s_tag_ok;
+  gboolean ret = FALSE;
+  GstCaps *caps = NULL;
+  GstQuery *query;
+  gboolean pull_mode;
+
+  demux = GST_TAG_DEMUX (GST_PAD_PARENT (sinkpad));
+  klass = GST_TAG_DEMUX_CLASS (G_OBJECT_GET_CLASS (demux));
+
+  /* 1: */
+  /* If we can activate pull_range upstream, then read any end and start
+   * tags, otherwise activate in push mode and the chain function will 
+   * collect buffers, read the start tag and output a buffer to end
+   * preroll.
+   */
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (sinkpad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  gst_query_parse_scheduling (query, &pull_mode, NULL, NULL, NULL, NULL, NULL);
+  gst_query_unref (query);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  if (!gst_pad_activate_pull (sinkpad, TRUE))
+    goto activate_push;
+
+  /* Look for tags at start and end of file */
+  GST_DEBUG_OBJECT (demux, "Activated pull mode. Looking for tags");
+  if (!gst_tag_demux_get_upstream_size (demux))
+    return FALSE;
+
+  demux->priv->strip_start = 0;
+  demux->priv->strip_end = 0;
+
+  s_tag_ok = gst_tag_demux_pull_start_tag (demux, &start_tags);
+  e_tag_ok = gst_tag_demux_pull_end_tag (demux, &end_tags);
+
+  if (klass->merge_tags != NULL) {
+    demux->priv->parsed_tags = klass->merge_tags (demux, start_tags, end_tags);
+  } else {
+    /* we merge in REPLACE mode, so put the less important tags first, which
+     * we'll just assume is the end tag (subclasses may change this behaviour
+     * or make it configurable by overriding the merge_tags vfunc) */
+    demux->priv->parsed_tags =
+        gst_tag_list_merge (end_tags, start_tags, GST_TAG_MERGE_REPLACE);
+  }
+
+  if (start_tags)
+    gst_tag_list_free (start_tags);
+  if (end_tags)
+    gst_tag_list_free (end_tags);
+
+  if (!e_tag_ok && !s_tag_ok)
+    return FALSE;
+
+  if (demux->priv->parsed_tags != NULL) {
+    demux->priv->send_tag_event = TRUE;
+  }
+
+  if (demux->priv->upstream_size <=
+      demux->priv->strip_start + demux->priv->strip_end) {
+    /* There was no data (probably due to a truncated file) */
+    GST_DEBUG_OBJECT (demux, "No data in file");
+    /* so we don't know about type either */
+    GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL), (NULL));
+    goto done_activate;
+  }
+
+  /* 3 - Do typefinding on data */
+  caps = gst_type_find_helper_get_range (GST_OBJECT (demux),
+      (GstTypeFindHelperGetRangeFunction) gst_tag_demux_read_range,
+      demux->priv->upstream_size
+      - (demux->priv->strip_start + demux->priv->strip_end), &probability);
+
+  GST_DEBUG_OBJECT (demux, "Found type %" GST_PTR_FORMAT " with a "
+      "probability of %u", caps, probability);
+
+  /* 4 - Deactivate pull mode */
+  if (!gst_pad_activate_pull (sinkpad, FALSE)) {
+    if (caps)
+      gst_caps_unref (caps);
+    GST_DEBUG_OBJECT (demux, "Could not deactivate sinkpad after reading tags");
+    return FALSE;
+  }
+
+  /* 5 - If we didn't find the caps, fail */
+  if (caps == NULL) {
+    GST_DEBUG_OBJECT (demux, "Could not detect type of contents");
+    GST_ELEMENT_ERROR (demux, STREAM, TYPE_NOT_FOUND, (NULL), (NULL));
+    goto done_activate;
+  }
+
+  /* tag reading and typefinding were already done, don't do them again in
+   * the chain function if we end up in push mode */
+  demux->priv->state = GST_TAG_DEMUX_STREAMING;
+
+  /* 6 Add the srcpad for output now we know caps. */
+  if (!gst_tag_demux_add_srcpad (demux, caps)) {
+    GST_DEBUG_OBJECT (demux, "Could not add source pad");
+    goto done_activate;
+  }
+
+  /* 7 - if the sinkpad is active, it was done by downstream so we're 
+   * done, otherwise switch to push */
+  ret = TRUE;
+  if (!gst_pad_is_active (sinkpad)) {
+    ret = gst_pad_activate_push (demux->priv->srcpad, TRUE);
+    ret &= gst_pad_activate_push (sinkpad, TRUE);
+  }
+
+done_activate:
+
+  if (caps)
+    gst_caps_unref (caps);
+
+  return ret;
+
+activate_push:
+  {
+    GST_DEBUG_OBJECT (demux, "No pull mode. Changing to push, but won't be "
+        "able to read end tags");
+    demux->priv->state = GST_TAG_DEMUX_READ_START_TAG;
+    return gst_pad_activate_push (sinkpad, TRUE);
+  }
+}
+
+static gboolean
+gst_tag_demux_src_activate_pull (GstPad * pad, gboolean active)
+{
+  GstTagDemux *demux = GST_TAG_DEMUX (GST_PAD_PARENT (pad));
+
+  return gst_pad_activate_pull (demux->priv->sinkpad, active);
+}
+
+static GstFlowReturn
+gst_tag_demux_read_range (GstTagDemux * demux,
+    guint64 offset, guint length, GstBuffer ** buffer)
+{
+  GstFlowReturn ret;
+  guint64 in_offset;
+  guint in_length;
+  gsize size;
+
+  g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
+
+  /* Adjust offset and length of the request to trim off tag information. 
+   * For the returned buffer, adjust the output offset to match what downstream
+   * should see */
+  in_offset = offset + demux->priv->strip_start;
+
+  if (!gst_tag_demux_get_upstream_size (demux))
+    return GST_FLOW_ERROR;
+
+  if (in_offset + length >= demux->priv->upstream_size - demux->priv->strip_end) {
+    if (in_offset + demux->priv->strip_end >= demux->priv->upstream_size)
+      return GST_FLOW_UNEXPECTED;
+    in_length = demux->priv->upstream_size - demux->priv->strip_end - in_offset;
+  } else {
+    in_length = length;
+  }
+
+  ret = gst_pad_pull_range (demux->priv->sinkpad, in_offset, in_length, buffer);
+
+  if (ret == GST_FLOW_OK && *buffer) {
+    if (!gst_tag_demux_trim_buffer (demux, buffer, &size))
+      goto read_beyond_end;
+
+    /* this should only happen in streaming mode */
+    g_assert (*buffer != NULL);
+  }
+
+  return ret;
+
+read_beyond_end:
+  {
+    GST_DEBUG_OBJECT (demux, "attempted read beyond end of file");
+    if (*buffer != NULL) {
+      gst_buffer_unref (*buffer);
+      *buffer = NULL;
+    }
+    return GST_FLOW_UNEXPECTED;
+  }
+}
+
+static GstFlowReturn
+gst_tag_demux_src_getrange (GstPad * srcpad,
+    guint64 offset, guint length, GstBuffer ** buffer)
+{
+  GstTagDemux *demux = GST_TAG_DEMUX (GST_PAD_PARENT (srcpad));
+
+  /* downstream in pull mode won't miss a newsegment event,
+   * but it likely appreciates other (tag) events */
+  if (demux->priv->need_newseg) {
+    gst_tag_demux_send_pending_events (demux);
+    demux->priv->need_newseg = FALSE;
+  }
+
+  if (demux->priv->send_tag_event) {
+    gst_tag_demux_send_tag_event (demux);
+    demux->priv->send_tag_event = FALSE;
+  }
+
+  return gst_tag_demux_read_range (demux, offset, length, buffer);
+}
+
+static GstStateChangeReturn
+gst_tag_demux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstTagDemux *demux = GST_TAG_DEMUX (element);
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_tag_demux_reset (demux);
+      break;
+    default:
+      break;
+  }
+  return ret;
+}
+
+static gboolean
+gst_tag_demux_pad_query (GstPad * pad, GstQuery * query)
+{
+  /* For a position or duration query, adjust the returned
+   * bytes to strip off the end and start areas */
+
+  GstTagDemux *demux = GST_TAG_DEMUX (GST_PAD_PARENT (pad));
+  GstPad *peer = NULL;
+  GstFormat format;
+  gint64 result;
+
+  if ((peer = gst_pad_get_peer (demux->priv->sinkpad)) == NULL)
+    return FALSE;
+
+  if (!gst_pad_query (peer, query)) {
+    gst_object_unref (peer);
+    return FALSE;
+  }
+
+  gst_object_unref (peer);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      gst_query_parse_position (query, &format, &result);
+      if (format == GST_FORMAT_BYTES) {
+        result -= demux->priv->strip_start;
+        gst_query_set_position (query, format, result);
+      }
+      break;
+    }
+    case GST_QUERY_DURATION:
+    {
+      gst_query_parse_duration (query, &format, &result);
+      if (format == GST_FORMAT_BYTES) {
+        result -= demux->priv->strip_start + demux->priv->strip_end;
+        gst_query_set_duration (query, format, result);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+static const GstQueryType *
+gst_tag_demux_get_query_types (GstPad * pad)
+{
+  static const GstQueryType types[] = {
+    GST_QUERY_POSITION,
+    GST_QUERY_DURATION,
+    0
+  };
+
+  return types;
+}
+
+static void
+gst_tag_demux_send_pending_events (GstTagDemux * demux)
+{
+  GList *events;
+
+  /* send any pending events we cached */
+  GST_OBJECT_LOCK (demux);
+  events = demux->priv->pending_events;
+  demux->priv->pending_events = NULL;
+  GST_OBJECT_UNLOCK (demux);
+
+  while (events != NULL) {
+    GST_DEBUG_OBJECT (demux->priv->srcpad, "sending cached %s event: %"
+        GST_PTR_FORMAT, GST_EVENT_TYPE_NAME (events->data), events->data);
+    gst_pad_push_event (demux->priv->srcpad, GST_EVENT (events->data));
+    events = g_list_delete_link (events, events);
+  }
+}
+
+static void
+gst_tag_demux_send_tag_event (GstTagDemux * demux)
+{
+  /* FIXME: what's the correct merge mode? Docs need to tell... */
+  GstTagList *merged = gst_tag_list_merge (demux->priv->event_tags,
+      demux->priv->parsed_tags, GST_TAG_MERGE_KEEP);
+
+  if (demux->priv->parsed_tags)
+    gst_element_post_message (GST_ELEMENT (demux),
+        gst_message_new_tag (GST_OBJECT (demux),
+            gst_tag_list_copy (demux->priv->parsed_tags)));
+
+  if (merged) {
+    GstEvent *event = gst_event_new_tag (merged);
+
+    GST_EVENT_TIMESTAMP (event) = 0;
+    GST_DEBUG_OBJECT (demux, "Sending tag event on src pad");
+    gst_pad_push_event (demux->priv->srcpad, event);
+  }
+}
+
+static gboolean
+gst_tag_demux_send_new_segment (GstTagDemux * tagdemux)
+{
+  GstEvent *event;
+  gint64 start, stop, position;
+  GstSegment *seg = &tagdemux->priv->segment;
+  GstSegment newseg;
+
+  if (seg->format == GST_FORMAT_UNDEFINED) {
+    GST_LOG_OBJECT (tagdemux,
+        "No new segment received before first buffer. Using default");
+    gst_segment_init (seg, GST_FORMAT_BYTES);
+    seg->start = tagdemux->priv->strip_start;
+    seg->time = tagdemux->priv->strip_start;
+  }
+
+  /* Can't adjust segments in non-BYTES formats */
+  if (tagdemux->priv->segment.format != GST_FORMAT_BYTES) {
+    event = gst_event_new_segment (seg);
+    return gst_pad_push_event (tagdemux->priv->srcpad, event);
+  }
+
+  start = seg->start;
+  stop = seg->stop;
+  position = seg->time;
+
+  g_return_val_if_fail (start != -1, FALSE);
+  g_return_val_if_fail (position != -1, FALSE);
+
+  if (tagdemux->priv->strip_end > 0) {
+    if (gst_tag_demux_get_upstream_size (tagdemux)) {
+      guint64 v1tag_offset =
+          tagdemux->priv->upstream_size - tagdemux->priv->strip_end;
+
+      if (start >= v1tag_offset) {
+        /* Segment is completely within the end tag, output an open-ended
+         * segment, even though all the buffers will get trimmed away */
+        start = v1tag_offset;
+        stop = -1;
+      }
+
+      if (stop != -1 && stop >= v1tag_offset) {
+        GST_DEBUG_OBJECT (tagdemux,
+            "Segment crosses the end tag. Trimming end");
+        stop = v1tag_offset;
+      }
+    }
+  }
+
+  if (tagdemux->priv->strip_start > 0) {
+    if (start > tagdemux->priv->strip_start)
+      start -= tagdemux->priv->strip_start;
+    else
+      start = 0;
+
+    if (position > tagdemux->priv->strip_start)
+      position -= tagdemux->priv->strip_start;
+    else
+      position = 0;
+
+    if (stop != -1) {
+      if (stop > tagdemux->priv->strip_start)
+        stop -= tagdemux->priv->strip_start;
+      else
+        stop = 0;
+    }
+  }
+
+  GST_DEBUG_OBJECT (tagdemux, "Sending segment %" GST_SEGMENT_FORMAT, seg);
+
+  gst_segment_copy_into (seg, &newseg);
+  newseg.start = start;
+  newseg.stop = stop;
+  newseg.position = position;
+  event = gst_event_new_segment (&newseg);
+
+  return gst_pad_push_event (tagdemux->priv->srcpad, event);
+}
diff --git a/gst-libs/gst/tag/gsttagdemux.h b/gst-libs/gst/tag/gsttagdemux.h
new file mode 100644
index 0000000..1fbff90
--- /dev/null
+++ b/gst-libs/gst/tag/gsttagdemux.h
@@ -0,0 +1,144 @@
+/* GStreamer Base Class for Tag Demuxing
+ * Copyright (C) 2005  Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright (C) 2006  Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_TAG_DEMUX_H__
+#define __GST_TAG_DEMUX_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TAG_DEMUX            (gst_tag_demux_get_type())
+#define GST_TAG_DEMUX(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_DEMUX,GstTagDemux))
+#define GST_TAG_DEMUX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_DEMUX,GstTagDemuxClass))
+#define GST_IS_TAG_DEMUX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_DEMUX))
+#define GST_IS_TAG_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_DEMUX))
+
+typedef struct _GstTagDemux        GstTagDemux;
+typedef struct _GstTagDemuxClass   GstTagDemuxClass;
+typedef struct _GstTagDemuxPrivate GstTagDemuxPrivate;
+
+/**
+ * GstTagDemuxResult:
+ * @GST_TAG_DEMUX_RESULT_BROKEN_TAG: cannot parse tag, just skip it
+ * @GST_TAG_DEMUX_RESULT_AGAIN     : call again with less or more data
+ * @GST_TAG_DEMUX_RESULT_OK	   : parsed tag successfully
+ *
+ * Result values from the parse_tag virtual function.
+ *
+ * Since: 0.10.15
+ */
+typedef enum {
+  GST_TAG_DEMUX_RESULT_BROKEN_TAG,
+  GST_TAG_DEMUX_RESULT_AGAIN,
+  GST_TAG_DEMUX_RESULT_OK
+} GstTagDemuxResult;
+
+GType gst_tag_demux_result_get_type (void);
+#define GST_TYPE_TAG_DEMUX_RESULT (gst_tag_demux_result_get_type())
+
+/**
+ * GstTagDemux:
+ * @element: parent element
+ *
+ * Opaque #GstTagDemux structure.
+ *
+ * Since: 0.10.15
+ */
+struct _GstTagDemux
+{
+  GstElement element;
+
+  /*< private >*/
+  GstTagDemuxPrivate  *priv;
+
+  gpointer             reserved[GST_PADDING];
+};
+
+/**
+ * GstTagDemuxClass:
+ * @parent_class: the parent class.
+ * @min_start_size: minimum size required to identify a tag at the start and
+ * determine its total size. Set to 0 if not interested in start tags.
+ * Subclasses should set this in their class_init function.
+ * @min_end_size: minimum size required to identify a tag at the end and
+ * determine its total size. Set to 0 if not interested in end tags.
+ * Subclasses should set this in their class_init function.
+ * @identify_tag: identify tag and determine the size required to parse the
+ * tag. Buffer may be larger than the specified minimum size.
+ * Subclassed MUST override this vfunc in their class_init function.
+ * @parse_tag: parse the tag. Buffer will be exactly of the size determined by
+ * the identify_tag vfunc before. The parse_tag vfunc may change the size
+ * stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a
+ * larger or smaller buffer. It is also permitted to adjust the tag_size to a
+ * smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go.
+ * Subclassed MUST override the parse_tag vfunc in their class_init function.
+ * @merge_tags: merge start and end tags. Subclasses may want to override this
+ * vfunc to allow prioritising of start or end tag according to user
+ * preference.  Note that both start_tags and end_tags may be NULL. By default
+ * start tags are prefered over end tags.
+ *
+ * The #GstTagDemuxClass structure.  See documentation at beginning of section
+ * for details about what subclasses need to override and do.
+ *
+ * Since: 0.10.15
+ */
+struct _GstTagDemuxClass
+{
+  GstElementClass parent_class;
+
+  /* minimum size required to identify a tag at the start and determine
+   * its total size */
+  guint                  min_start_size;
+
+  /* minimum size required to identify a tag at the end and determine
+   * its total size */
+  guint                  min_end_size;
+
+  /* vtable */
+
+  /* identify tag and determine the size required to parse the tag */
+  gboolean               (*identify_tag)  (GstTagDemux * demux,
+                                           GstBuffer   * buffer,
+                                           gboolean      start_tag,
+                                           guint       * tag_size);
+
+  /* parse the tag once it is identified and its size is known */
+  GstTagDemuxResult      (*parse_tag)     (GstTagDemux * demux,
+                                           GstBuffer   * buffer,
+                                           gboolean      start_tag,
+                                           guint       * tag_size,
+                                           GstTagList ** tags);
+
+  /* merge start and end tags (optional) */
+  GstTagList *           (*merge_tags)    (GstTagDemux      * demux,
+                                           const GstTagList * start_tags,
+                                           const GstTagList * end_tags);
+
+  /*< private >*/
+  gpointer               reserved[GST_PADDING];
+};
+
+GType     gst_tag_demux_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TAG_DEMUX_H__ */
+
diff --git a/gst-libs/gst/tag/gsttageditingprivate.c b/gst-libs/gst/tag/gsttageditingprivate.c
new file mode 100644
index 0000000..0626874
--- /dev/null
+++ b/gst-libs/gst/tag/gsttageditingprivate.c
@@ -0,0 +1,468 @@
+/* GStreamer
+ * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gsttageditingprivate.h"
+
+#include <string.h>
+
+gint
+__exif_tag_image_orientation_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "rotate-0") == 0)
+    return 1;
+  else if (strcmp (str, "flip-rotate-0") == 0)
+    return 2;
+  else if (strcmp (str, "rotate-180") == 0)
+    return 3;
+  else if (strcmp (str, "flip-rotate-180") == 0)
+    return 4;
+  else if (strcmp (str, "flip-rotate-270") == 0)
+    return 5;
+  else if (strcmp (str, "rotate-90") == 0)
+    return 6;
+  else if (strcmp (str, "flip-rotate-90") == 0)
+    return 7;
+  else if (strcmp (str, "rotate-270") == 0)
+    return 8;
+
+end:
+  GST_WARNING ("Invalid image orientation tag: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_image_orientation_from_exif_value (gint value)
+{
+  switch (value) {
+    case 1:
+      return "rotate-0";
+    case 2:
+      return "flip-rotate-0";
+    case 3:
+      return "rotate-180";
+    case 4:
+      return "flip-rotate-180";
+    case 5:
+      return "flip-rotate-270";
+    case 6:
+      return "rotate-90";
+    case 7:
+      return "flip-rotate-90";
+    case 8:
+      return "rotate-270";
+    default:
+      GST_WARNING ("Invalid tiff orientation tag value: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_exposure_program_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "undefined") == 0)
+    return 0;
+  else if (strcmp (str, "manual") == 0)
+    return 1;
+  else if (strcmp (str, "normal") == 0)
+    return 2;
+  else if (strcmp (str, "aperture-priority") == 0)
+    return 3;
+  else if (strcmp (str, "shutter-priority") == 0)
+    return 4;
+  else if (strcmp (str, "creative") == 0)
+    return 5;
+  else if (strcmp (str, "action") == 0)
+    return 6;
+  else if (strcmp (str, "portrait") == 0)
+    return 7;
+  else if (strcmp (str, "landscape") == 0)
+    return 8;
+
+end:
+  GST_WARNING ("Invalid capturing exposure program tag: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_exposure_program_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "undefined";
+    case 1:
+      return "manual";
+    case 2:
+      return "normal";
+    case 3:
+      return "aperture-priority";
+    case 4:
+      return "shutter-priority";
+    case 5:
+      return "creative";
+    case 6:
+      return "action";
+    case 7:
+      return "portrait";
+    case 8:
+      return "landscape";
+    default:
+      GST_WARNING ("Invalid exif exposure program: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_exposure_mode_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "auto-exposure") == 0)
+    return 0;
+  else if (strcmp (str, "manual-exposure") == 0)
+    return 1;
+  else if (strcmp (str, "auto-bracket") == 0)
+    return 2;
+
+end:
+  GST_WARNING ("Invalid capturing exposure mode tag: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_exposure_mode_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "auto-exposure";
+    case 1:
+      return "manual-exposure";
+    case 2:
+      return "auto-bracket";
+    default:
+      GST_WARNING ("Invalid exif exposure mode: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_scene_capture_type_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "standard") == 0)
+    return 0;
+  else if (strcmp (str, "landscape") == 0)
+    return 1;
+  else if (strcmp (str, "portrait") == 0)
+    return 2;
+  else if (strcmp (str, "night-scene") == 0)
+    return 3;
+
+end:
+  GST_WARNING ("Invalid capturing scene capture type: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_scene_capture_type_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "standard";
+    case 1:
+      return "landscape";
+    case 2:
+      return "portrait";
+    case 3:
+      return "night-scene";
+    default:
+      GST_WARNING ("Invalid exif scene capture type: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_gain_adjustment_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "none") == 0)
+    return 0;
+  else if (strcmp (str, "low-gain-up") == 0)
+    return 1;
+  else if (strcmp (str, "high-gain-up") == 0)
+    return 2;
+  else if (strcmp (str, "low-gain-down") == 0)
+    return 3;
+  else if (strcmp (str, "high-gain-down") == 0)
+    return 4;
+
+end:
+  GST_WARNING ("Invalid capturing gain adjustment type: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_gain_adjustment_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "none";
+    case 1:
+      return "low-gain-up";
+    case 2:
+      return "high-gain-up";
+    case 3:
+      return "low-gain-down";
+    case 4:
+      return "high-gain-down";
+    default:
+      GST_WARNING ("Invalid exif gain control type: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_white_balance_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "auto") == 0)
+    return 0;
+  else                          /* everything else is just manual */
+    return 1;
+
+end:
+  GST_WARNING ("Invalid white balance: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_white_balance_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "auto";
+    case 1:
+      return "manual";
+    default:
+      GST_WARNING ("Invalid white balance type: %d", value);
+      return NULL;
+  }
+}
+
+static gint
+__exif_tag_capturing_contrast_sharpness_to_exif_value (const gchar * str,
+    const gchar * tag_name)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "normal") == 0)
+    return 0;
+  else if (strcmp (str, "soft") == 0)
+    return 1;
+  else if (strcmp (str, "hard") == 0)
+    return 2;
+
+end:
+  GST_WARNING ("Invalid %s type: %s", tag_name, str);
+  return -1;
+}
+
+static const gchar *
+__exif_tag_capturing_contrast_sharpness_from_exif_value (gint value,
+    const gchar * tag_name)
+{
+  switch (value) {
+    case 0:
+      return "normal";
+    case 1:
+      return "soft";
+    case 2:
+      return "hard";
+    default:
+      GST_WARNING ("Invalid %s type: %d", tag_name, value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_contrast_to_exif_value (const gchar * str)
+{
+  return __exif_tag_capturing_contrast_sharpness_to_exif_value (str,
+      "contrast");
+}
+
+const gchar *
+__exif_tag_capturing_contrast_from_exif_value (gint value)
+{
+  return __exif_tag_capturing_contrast_sharpness_from_exif_value (value,
+      "contrast");
+}
+
+gint
+__exif_tag_capturing_saturation_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "normal") == 0)
+    return 0;
+  else if (strcmp (str, "low-saturation") == 0)
+    return 1;
+  else if (strcmp (str, "high-saturation") == 0)
+    return 2;
+
+end:
+  GST_WARNING ("Invalid saturation type: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_saturation_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "normal";
+    case 1:
+      return "low-saturation";
+    case 2:
+      return "high-saturation";
+    default:
+      GST_WARNING ("Invalid saturation type: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_sharpness_to_exif_value (const gchar * str)
+{
+  return __exif_tag_capturing_contrast_sharpness_to_exif_value (str,
+      "sharpness");
+}
+
+const gchar *
+__exif_tag_capturing_sharpness_from_exif_value (gint value)
+{
+  return __exif_tag_capturing_contrast_sharpness_from_exif_value (value,
+      "sharpness");
+}
+
+gint
+__exif_tag_capturing_metering_mode_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "unknown") == 0)
+    return 0;
+  else if (strcmp (str, "average") == 0)
+    return 1;
+  else if (strcmp (str, "center-weighted-average") == 0)
+    return 2;
+  else if (strcmp (str, "spot") == 0)
+    return 3;
+  else if (strcmp (str, "multi-spot") == 0)
+    return 4;
+  else if (strcmp (str, "pattern") == 0)
+    return 5;
+  else if (strcmp (str, "partial") == 0)
+    return 6;
+  else if (strcmp (str, "other") == 0)
+    return 255;
+
+end:
+  GST_WARNING ("Invalid metering mode type: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_metering_mode_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "unknown";
+    case 1:
+      return "average";
+    case 2:
+      return "center-weighted-average";
+    case 3:
+      return "spot";
+    case 4:
+      return "multi-spot";
+    case 5:
+      return "pattern";
+    case 6:
+      return "partial";
+    case 255:
+      return "other";
+    default:
+      GST_WARNING ("Invalid metering mode type: %d", value);
+      return NULL;
+  }
+}
+
+gint
+__exif_tag_capturing_source_to_exif_value (const gchar * str)
+{
+  if (str == NULL)
+    goto end;
+
+  if (strcmp (str, "dsc") == 0)
+    return 3;
+  else if (strcmp (str, "other") == 0)
+    return 0;
+  else if (strcmp (str, "transparent-scanner") == 0)
+    return 1;
+  else if (strcmp (str, "reflex-scanner") == 0)
+    return 2;
+
+end:
+  GST_WARNING ("Invalid capturing source type: %s", str);
+  return -1;
+}
+
+const gchar *
+__exif_tag_capturing_source_from_exif_value (gint value)
+{
+  switch (value) {
+    case 0:
+      return "other";
+    case 1:
+      return "transparent-scanner";
+    case 2:
+      return "reflex-scanner";
+    case 3:
+      return "dsc";
+    default:
+      GST_WARNING ("Invalid capturing source type: %d", value);
+      return NULL;
+  }
+}
diff --git a/gst-libs/gst/tag/gsttageditingprivate.h b/gst-libs/gst/tag/gsttageditingprivate.h
new file mode 100644
index 0000000..0cc70d0
--- /dev/null
+++ b/gst-libs/gst/tag/gsttageditingprivate.h
@@ -0,0 +1,75 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TAG_EDIT_PRIVATE_H__
+#define __GST_TAG_EDIT_PRIVATE_H__
+
+#include <gst/tag/tag.h>
+
+G_BEGIN_DECLS
+  
+
+typedef struct _GstTagEntryMatch GstTagEntryMatch;
+struct _GstTagEntryMatch {
+  const gchar * gstreamer_tag;
+  const gchar * original_tag;
+};
+
+
+GType gst_vorbis_tag_get_type (void);
+
+gint __exif_tag_image_orientation_to_exif_value (const gchar * str);
+const gchar * __exif_tag_image_orientation_from_exif_value (gint value);
+
+gint __exif_tag_capturing_exposure_program_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_exposure_program_from_exif_value (gint value);
+
+gint __exif_tag_capturing_exposure_mode_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_exposure_mode_from_exif_value (gint value);
+
+gint __exif_tag_capturing_scene_capture_type_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_scene_capture_type_from_exif_value (gint value);
+
+gint __exif_tag_capturing_gain_adjustment_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_gain_adjustment_from_exif_value (gint value);
+
+gint __exif_tag_capturing_white_balance_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_white_balance_from_exif_value (gint value);
+
+gint __exif_tag_capturing_contrast_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_contrast_from_exif_value (gint value);
+
+gint __exif_tag_capturing_saturation_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_saturation_from_exif_value (gint value);
+
+gint __exif_tag_capturing_sharpness_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_sharpness_from_exif_value (gint value);
+
+gint __exif_tag_capturing_metering_mode_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_metering_mode_from_exif_value (gint value);
+
+gint __exif_tag_capturing_source_to_exif_value (const gchar * str);
+const gchar * __exif_tag_capturing_source_from_exif_value (gint value);
+
+#define ensure_exif_tags gst_tag_register_musicbrainz_tags
+
+G_END_DECLS
+
+#endif /* __GST_TAG_EDIT_PRIVATE_H__ */
diff --git a/gst-libs/gst/tag/gsttagmux.c b/gst-libs/gst/tag/gsttagmux.c
new file mode 100644
index 0000000..6d0a741
--- /dev/null
+++ b/gst-libs/gst/tag/gsttagmux.c
@@ -0,0 +1,531 @@
+/* GStreamer tag muxer base class
+ * Copyright (C) 2006 Christophe Fergeau  <teuf@gnome.org>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006 Sebastian Dröge <slomo@circular-chaos.org>
+ * Copyright (C) 2009 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagmux
+ * @see_also: GstApeMux, GstId3Mux
+ * @short_description: Base class for adding tags that are in one single chunk
+ *                     directly at the beginning or at the end of a file
+ *
+ * <refsect2>
+ * <para>
+ * Provides a base class for adding tags at the beginning or end of a
+ * stream.
+ * </para>
+ * <title>Deriving from GstTagMux</title>
+ * <para>
+ * Subclasses have to do the following things:
+ * <itemizedlist>
+ *  <listitem><para>
+ *  In their base init function, they must add pad templates for the sink
+ *  pad and the source pad to the element class, describing the media type
+ *  they accept and output in the caps of the pad template.
+ *  </para></listitem>
+ *  <listitem><para>
+ *  In their class init function, they must override the
+ *  GST_TAG_MUX_CLASS(mux_klass)->render_start_tag and/or
+ *  GST_TAG_MUX_CLASS(mux_klass)->render_end_tag vfuncs and set up a render
+ *  function.
+ *  </para></listitem>
+ * </itemizedlist>
+ * </para>
+ * </refsect2>
+ *
+ * Since 0.10.36
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <gst/gsttagsetter.h>
+#include <gst/tag/tag.h>
+
+#include "gsttagmux.h"
+
+struct _GstTagMuxPrivate
+{
+  GstPad *srcpad;
+  GstPad *sinkpad;
+  GstTagList *event_tags;       /* tags received from upstream elements */
+  GstTagList *final_tags;       /* Final set of tags used for muxing */
+  gsize start_tag_size;
+  gsize end_tag_size;
+  gboolean render_start_tag;
+  gboolean render_end_tag;
+
+  gint64 current_offset;
+  gint64 max_offset;
+
+  GstEvent *newsegment_ev;      /* cached newsegment event from upstream */
+};
+
+GST_DEBUG_CATEGORY_STATIC (gst_tag_mux_debug);
+#define GST_CAT_DEFAULT gst_tag_mux_debug
+
+#define gst_tag_mux_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTagMux, gst_tag_mux, GST_TYPE_ELEMENT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL));
+
+static GstStateChangeReturn
+gst_tag_mux_change_state (GstElement * element, GstStateChange transition);
+static GstFlowReturn gst_tag_mux_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_tag_mux_sink_event (GstPad * pad, GstEvent * event);
+
+static void
+gst_tag_mux_finalize (GObject * obj)
+{
+  GstTagMux *mux = GST_TAG_MUX (obj);
+
+  if (mux->priv->newsegment_ev) {
+    gst_event_unref (mux->priv->newsegment_ev);
+    mux->priv->newsegment_ev = NULL;
+  }
+
+  if (mux->priv->event_tags) {
+    gst_tag_list_free (mux->priv->event_tags);
+    mux->priv->event_tags = NULL;
+  }
+
+  if (mux->priv->final_tags) {
+    gst_tag_list_free (mux->priv->final_tags);
+    mux->priv->final_tags = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_tag_mux_class_init (GstTagMuxClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_tag_mux_finalize);
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_tag_mux_change_state);
+
+  g_type_class_add_private (klass, sizeof (GstTagMuxPrivate));
+
+  GST_DEBUG_CATEGORY_INIT (gst_tag_mux_debug, "tagmux", 0,
+      "tag muxer base class");
+}
+
+static void
+gst_tag_mux_init (GstTagMux * mux)
+{
+  GstElementClass *element_klass = GST_ELEMENT_GET_CLASS (mux);
+  GstPadTemplate *tmpl;
+
+  mux->priv =
+      G_TYPE_INSTANCE_GET_PRIVATE (mux, GST_TYPE_TAG_MUX, GstTagMuxPrivate);
+
+  /* pad through which data comes in to the element */
+  tmpl = gst_element_class_get_pad_template (element_klass, "sink");
+  if (tmpl) {
+    mux->priv->sinkpad = gst_pad_new_from_template (tmpl, "sink");
+  } else {
+    g_warning ("GstTagMux subclass '%s' did not install a %s pad template!\n",
+        G_OBJECT_CLASS_NAME (element_klass), "sink");
+    mux->priv->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  }
+  gst_pad_set_chain_function (mux->priv->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_tag_mux_chain));
+  gst_pad_set_event_function (mux->priv->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_tag_mux_sink_event));
+  gst_element_add_pad (GST_ELEMENT (mux), mux->priv->sinkpad);
+
+  /* pad through which data goes out of the element */
+  tmpl = gst_element_class_get_pad_template (element_klass, "src");
+  if (tmpl) {
+    GstCaps *tmpl_caps = gst_pad_template_get_caps (tmpl);
+
+    mux->priv->srcpad = gst_pad_new_from_template (tmpl, "src");
+    gst_pad_use_fixed_caps (mux->priv->srcpad);
+    if (tmpl_caps != NULL && gst_caps_is_fixed (tmpl_caps)) {
+      gst_pad_set_caps (mux->priv->srcpad, tmpl_caps);
+    }
+  } else {
+    g_warning ("GstTagMux subclass '%s' did not install a %s pad template!\n",
+        G_OBJECT_CLASS_NAME (element_klass), "source");
+    mux->priv->srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  }
+  gst_element_add_pad (GST_ELEMENT (mux), mux->priv->srcpad);
+
+  mux->priv->render_start_tag = TRUE;
+  mux->priv->render_end_tag = TRUE;
+}
+
+static GstTagList *
+gst_tag_mux_get_tags (GstTagMux * mux)
+{
+  GstTagSetter *tagsetter = GST_TAG_SETTER (mux);
+  const GstTagList *tagsetter_tags;
+  GstTagMergeMode merge_mode;
+
+  if (mux->priv->final_tags)
+    return mux->priv->final_tags;
+
+  tagsetter_tags = gst_tag_setter_get_tag_list (tagsetter);
+  merge_mode = gst_tag_setter_get_tag_merge_mode (tagsetter);
+
+  GST_LOG_OBJECT (mux, "merging tags, merge mode = %d", merge_mode);
+  GST_LOG_OBJECT (mux, "event tags: %" GST_PTR_FORMAT, mux->priv->event_tags);
+  GST_LOG_OBJECT (mux, "set   tags: %" GST_PTR_FORMAT, tagsetter_tags);
+
+  mux->priv->final_tags =
+      gst_tag_list_merge (tagsetter_tags, mux->priv->event_tags, merge_mode);
+
+  GST_LOG_OBJECT (mux, "final tags: %" GST_PTR_FORMAT, mux->priv->final_tags);
+
+  return mux->priv->final_tags;
+}
+
+static GstFlowReturn
+gst_tag_mux_render_start_tag (GstTagMux * mux)
+{
+  GstTagMuxClass *klass;
+  GstBuffer *buffer;
+  GstTagList *taglist;
+  GstEvent *event;
+  GstFlowReturn ret;
+  GstSegment segment;
+
+  taglist = gst_tag_mux_get_tags (mux);
+
+  klass = GST_TAG_MUX_CLASS (G_OBJECT_GET_CLASS (mux));
+
+  if (klass->render_start_tag == NULL)
+    goto no_vfunc;
+
+  buffer = klass->render_start_tag (mux, taglist);
+
+  /* Null buffer is ok, just means we're not outputting anything */
+  if (buffer == NULL) {
+    GST_INFO_OBJECT (mux, "No start tag generated");
+    mux->priv->start_tag_size = 0;
+    return GST_FLOW_OK;
+  }
+
+  mux->priv->start_tag_size = gst_buffer_get_size (buffer);
+  GST_LOG_OBJECT (mux, "tag size = %" G_GSIZE_FORMAT " bytes",
+      mux->priv->start_tag_size);
+
+  /* Send newsegment event from byte position 0, so the tag really gets
+   * written to the start of the file, independent of the upstream segment */
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_push_event (mux->priv->srcpad, gst_event_new_segment (&segment));
+
+  /* Send an event about the new tags to downstream elements */
+  /* gst_event_new_tag takes ownership of the list, so use a copy */
+  event = gst_event_new_tag (gst_tag_list_copy (taglist));
+  gst_pad_push_event (mux->priv->srcpad, event);
+
+  GST_BUFFER_OFFSET (buffer) = 0;
+  ret = gst_pad_push (mux->priv->srcpad, buffer);
+
+  mux->priv->current_offset = mux->priv->start_tag_size;
+  mux->priv->max_offset =
+      MAX (mux->priv->max_offset, mux->priv->current_offset);
+
+  return ret;
+
+no_vfunc:
+  {
+    GST_ERROR_OBJECT (mux, "Subclass does not implement "
+        "render_start_tag vfunc!");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_tag_mux_render_end_tag (GstTagMux * mux)
+{
+  GstTagMuxClass *klass;
+  GstBuffer *buffer;
+  GstTagList *taglist;
+  GstFlowReturn ret;
+  GstSegment segment;
+
+  taglist = gst_tag_mux_get_tags (mux);
+
+  klass = GST_TAG_MUX_CLASS (G_OBJECT_GET_CLASS (mux));
+
+  if (klass->render_end_tag == NULL)
+    goto no_vfunc;
+
+  buffer = klass->render_end_tag (mux, taglist);
+
+  if (buffer == NULL) {
+    GST_INFO_OBJECT (mux, "No end tag generated");
+    mux->priv->end_tag_size = 0;
+    return GST_FLOW_OK;
+  }
+
+  mux->priv->end_tag_size = gst_buffer_get_size (buffer);
+  GST_LOG_OBJECT (mux, "tag size = %" G_GSIZE_FORMAT " bytes",
+      mux->priv->end_tag_size);
+
+  /* Send newsegment event from the end of the file, so it gets written there,
+     independent of whatever new segment events upstream has sent us */
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  segment.start = mux->priv->max_offset;
+  gst_pad_push_event (mux->priv->srcpad, gst_event_new_segment (&segment));
+
+  GST_BUFFER_OFFSET (buffer) = mux->priv->max_offset;
+  ret = gst_pad_push (mux->priv->srcpad, buffer);
+
+  return ret;
+
+no_vfunc:
+  {
+    GST_ERROR_OBJECT (mux, "Subclass does not implement "
+        "render_end_tag vfunc!");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstEvent *
+gst_tag_mux_adjust_event_offsets (GstTagMux * mux,
+    const GstEvent * newsegment_event)
+{
+  GstSegment segment;
+
+  gst_event_copy_segment ((GstEvent *) newsegment_event, &segment);
+
+  g_assert (segment.format == GST_FORMAT_BYTES);
+
+  if (segment.start != -1)
+    segment.start += mux->priv->start_tag_size;
+  if (segment.stop != -1)
+    segment.stop += mux->priv->start_tag_size;
+  if (segment.time != -1)
+    segment.time += mux->priv->start_tag_size;
+
+  GST_DEBUG_OBJECT (mux, "adjusting newsegment event offsets to start=%"
+      G_GINT64_FORMAT ", stop=%" G_GINT64_FORMAT ", cur=%" G_GINT64_FORMAT
+      " (delta = +%" G_GSIZE_FORMAT ")", segment.start, segment.stop,
+      segment.time, mux->priv->start_tag_size);
+
+  return gst_event_new_segment (&segment);
+}
+
+static GstFlowReturn
+gst_tag_mux_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstTagMux *mux = GST_TAG_MUX (GST_OBJECT_PARENT (pad));
+  GstFlowReturn ret;
+  int length;
+
+  if (mux->priv->render_start_tag) {
+
+    GST_INFO_OBJECT (mux, "Adding tags to stream");
+    ret = gst_tag_mux_render_start_tag (mux);
+    if (ret != GST_FLOW_OK) {
+      GST_DEBUG_OBJECT (mux, "flow: %s", gst_flow_get_name (ret));
+      gst_buffer_unref (buffer);
+      return ret;
+    }
+
+    /* Now send the cached newsegment event that we got from upstream */
+    if (mux->priv->newsegment_ev) {
+      GstEvent *newseg;
+      GstSegment segment;
+
+      GST_DEBUG_OBJECT (mux, "sending cached newsegment event");
+      newseg = gst_tag_mux_adjust_event_offsets (mux, mux->priv->newsegment_ev);
+      gst_event_unref (mux->priv->newsegment_ev);
+      mux->priv->newsegment_ev = NULL;
+
+      gst_event_copy_segment (newseg, &segment);
+
+      gst_pad_push_event (mux->priv->srcpad, newseg);
+      mux->priv->current_offset = segment.start;
+      mux->priv->max_offset =
+          MAX (mux->priv->max_offset, mux->priv->current_offset);
+    } else {
+      /* upstream sent no newsegment event or only one in a non-BYTE format */
+    }
+
+    mux->priv->render_start_tag = FALSE;
+  }
+
+  buffer = gst_buffer_make_writable (buffer);
+
+  if (GST_BUFFER_OFFSET (buffer) != GST_BUFFER_OFFSET_NONE) {
+    GST_LOG_OBJECT (mux, "Adjusting buffer offset from %" G_GINT64_FORMAT
+        " to %" G_GINT64_FORMAT, GST_BUFFER_OFFSET (buffer),
+        GST_BUFFER_OFFSET (buffer) + mux->priv->start_tag_size);
+    GST_BUFFER_OFFSET (buffer) += mux->priv->start_tag_size;
+  }
+
+  length = gst_buffer_get_size (buffer);
+
+  ret = gst_pad_push (mux->priv->srcpad, buffer);
+
+  mux->priv->current_offset += length;
+  mux->priv->max_offset =
+      MAX (mux->priv->max_offset, mux->priv->current_offset);
+
+  return ret;
+}
+
+static gboolean
+gst_tag_mux_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstTagMux *mux;
+  gboolean result;
+
+  mux = GST_TAG_MUX (gst_pad_get_parent (pad));
+  result = FALSE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_TAG:{
+      GstTagList *tags;
+
+      gst_event_parse_tag (event, &tags);
+
+      GST_INFO_OBJECT (mux, "Got tag event: %" GST_PTR_FORMAT, tags);
+
+      if (mux->priv->event_tags != NULL) {
+        gst_tag_list_insert (mux->priv->event_tags, tags,
+            GST_TAG_MERGE_REPLACE);
+      } else {
+        mux->priv->event_tags = gst_tag_list_copy (tags);
+      }
+
+      GST_INFO_OBJECT (mux, "Event tags are now: %" GST_PTR_FORMAT,
+          mux->priv->event_tags);
+
+      /* just drop the event, we'll push a new tag event in render_start_tag */
+      gst_event_unref (event);
+      result = TRUE;
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      GstSegment segment;
+
+      gst_event_copy_segment (event, &segment);
+
+      if (segment.format != GST_FORMAT_BYTES) {
+        GST_WARNING_OBJECT (mux, "dropping newsegment event in %s format",
+            gst_format_get_name (segment.format));
+        gst_event_unref (event);
+        break;
+      }
+
+      if (mux->priv->render_start_tag) {
+        /* we have not rendered the tag yet, which means that we don't know
+         * how large it is going to be yet, so we can't adjust the offsets
+         * here at this point and need to cache the newsegment event for now
+         * (also, there could be tag events coming after this newsegment event
+         *  and before the first buffer). */
+        if (mux->priv->newsegment_ev) {
+          GST_WARNING_OBJECT (mux, "discarding old cached newsegment event");
+          gst_event_unref (mux->priv->newsegment_ev);
+        }
+
+        GST_LOG_OBJECT (mux, "caching newsegment event for later");
+        mux->priv->newsegment_ev = event;
+      } else {
+        GST_DEBUG_OBJECT (mux, "got newsegment event, adjusting offsets");
+        gst_pad_push_event (mux->priv->srcpad,
+            gst_tag_mux_adjust_event_offsets (mux, event));
+        gst_event_unref (event);
+
+        mux->priv->current_offset = segment.start;
+        mux->priv->max_offset =
+            MAX (mux->priv->max_offset, mux->priv->current_offset);
+      }
+      event = NULL;
+      result = TRUE;
+      break;
+    }
+    case GST_EVENT_EOS:{
+      if (mux->priv->render_end_tag) {
+        GstFlowReturn ret;
+
+        GST_INFO_OBJECT (mux, "Adding tags to stream");
+        ret = gst_tag_mux_render_end_tag (mux);
+        if (ret != GST_FLOW_OK) {
+          GST_DEBUG_OBJECT (mux, "flow: %s", gst_flow_get_name (ret));
+          return ret;
+        }
+
+        mux->priv->render_end_tag = FALSE;
+      }
+
+      /* Now forward EOS */
+      result = gst_pad_event_default (pad, event);
+      break;
+    }
+    default:
+      result = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (mux);
+
+  return result;
+}
+
+
+static GstStateChangeReturn
+gst_tag_mux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstTagMux *mux;
+  GstStateChangeReturn result;
+
+  mux = GST_TAG_MUX (element);
+
+  result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (result != GST_STATE_CHANGE_SUCCESS) {
+    return result;
+  }
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      if (mux->priv->newsegment_ev) {
+        gst_event_unref (mux->priv->newsegment_ev);
+        mux->priv->newsegment_ev = NULL;
+      }
+      if (mux->priv->event_tags) {
+        gst_tag_list_free (mux->priv->event_tags);
+        mux->priv->event_tags = NULL;
+      }
+      mux->priv->start_tag_size = 0;
+      mux->priv->end_tag_size = 0;
+      mux->priv->render_start_tag = TRUE;
+      mux->priv->render_end_tag = TRUE;
+      mux->priv->current_offset = 0;
+      mux->priv->max_offset = 0;
+      break;
+    }
+    default:
+      break;
+  }
+
+  return result;
+}
diff --git a/gst-libs/gst/tag/gsttagmux.h b/gst-libs/gst/tag/gsttagmux.h
new file mode 100644
index 0000000..ddb5988
--- /dev/null
+++ b/gst-libs/gst/tag/gsttagmux.h
@@ -0,0 +1,89 @@
+/* GStreamer tag muxer base class
+ * Copyright (C) 2006 Christophe Fergeau  <teuf@gnome.org>
+ * Copyright (C) 2006,2011 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2009 Pioneers of the Inevitable <songbird@songbirdnest.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef GST_TAG_MUX_H
+#define GST_TAG_MUX_H
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TAG_MUX \
+  (gst_tag_mux_get_type())
+#define GST_TAG_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TAG_MUX,GstTagMux))
+#define GST_TAG_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TAG_MUX,GstTagMuxClass))
+#define GST_IS_TAG_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TAG_MUX))
+#define GST_IS_TAG_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TAG_MUX))
+
+typedef struct _GstTagMux GstTagMux;
+typedef struct _GstTagMuxClass GstTagMuxClass;
+typedef struct _GstTagMuxPrivate GstTagMuxPrivate;
+
+/**
+ * GstTagMux:
+ * @element: parent element
+ *
+ * Opaque #GstTagMux structure.
+ *
+ * Since: 0.10.36
+ */
+struct _GstTagMux {
+  GstElement    element;
+
+  /*< private >*/
+  GstTagMuxPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstTagMuxClass:
+ * @parent_class: the parent class.
+ * @render_start_tag: create a tag buffer to add to the beginning of the
+ *     input stream given a tag list, or NULL
+ * @render_end_tag: create a tag buffer to add to the end of the
+ *     input stream given a tag list, or NULL
+ *
+ * The #GstTagMuxClass structure. Subclasses need to override at least one
+ * of the two render vfuncs.
+ *
+ * Since: 0.10.36
+ */
+struct _GstTagMuxClass {
+  GstElementClass parent_class;
+
+  /* vfuncs */
+  GstBuffer  * (*render_start_tag) (GstTagMux * mux, const GstTagList * tag_list);
+  GstBuffer  * (*render_end_tag)   (GstTagMux * mux, const GstTagList * tag_list);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType gst_tag_mux_get_type (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/tag/gstvorbistag.c b/gst-libs/gst/tag/gstvorbistag.c
new file mode 100644
index 0000000..44cb50f
--- /dev/null
+++ b/gst-libs/gst/tag/gstvorbistag.c
@@ -0,0 +1,843 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * gstvorbistag.c: library for reading / modifying vorbis tags
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagvorbis
+ * @short_description: tag mappings and support functions for plugins
+ *                     dealing with vorbiscomments
+ * @see_also: #GstTagList
+ *
+ * <refsect2>
+ * <para>
+ * Contains various utility functions for plugins to parse or create
+ * vorbiscomments and map them to and from #GstTagList<!-- -->s.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gsttagsetter.h>
+#include <gst/base/gstbytereader.h>
+#include <gst/base/gstbytewriter.h>
+#include "gsttageditingprivate.h"
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * see http://xiph.org/ogg/vorbis/doc/v-comment.html
+ */
+static const GstTagEntryMatch tag_matches[] = {
+  {GST_TAG_TITLE, "TITLE"},
+  {GST_TAG_VERSION, "VERSION"},
+  {GST_TAG_ALBUM, "ALBUM"},
+  {GST_TAG_TRACK_NUMBER, "TRACKNUMBER"},
+  {GST_TAG_ALBUM_VOLUME_NUMBER, "DISCNUMBER"},
+  {GST_TAG_TRACK_COUNT, "TRACKTOTAL"},
+  {GST_TAG_ALBUM_VOLUME_COUNT, "DISCTOTAL"},
+  {GST_TAG_ARTIST, "ARTIST"},
+  {GST_TAG_PERFORMER, "PERFORMER"},
+  {GST_TAG_COMPOSER, "COMPOSER"},
+  {GST_TAG_COPYRIGHT, "COPYRIGHT"},
+  {GST_TAG_LICENSE, "LICENSE"},
+  {GST_TAG_LICENSE_URI, "LICENSE"},
+  {GST_TAG_GEO_LOCATION_NAME, "LOCATION"},
+  {GST_TAG_ORGANIZATION, "ORGANIZATION"},
+  {GST_TAG_DESCRIPTION, "DESCRIPTION"},
+  {GST_TAG_GENRE, "GENRE"},
+  {GST_TAG_DATE, "DATE"},
+  {GST_TAG_CONTACT, "CONTACT"},
+  {GST_TAG_ISRC, "ISRC"},
+  {GST_TAG_COMMENT, "COMMENT"},
+  {GST_TAG_TRACK_GAIN, "REPLAYGAIN_TRACK_GAIN"},
+  {GST_TAG_TRACK_PEAK, "REPLAYGAIN_TRACK_PEAK"},
+  {GST_TAG_ALBUM_GAIN, "REPLAYGAIN_ALBUM_GAIN"},
+  {GST_TAG_ALBUM_PEAK, "REPLAYGAIN_ALBUM_PEAK"},
+  {GST_TAG_REFERENCE_LEVEL, "REPLAYGAIN_REFERENCE_LOUDNESS"},
+  {GST_TAG_MUSICBRAINZ_TRACKID, "MUSICBRAINZ_TRACKID"},
+  {GST_TAG_MUSICBRAINZ_ARTISTID, "MUSICBRAINZ_ARTISTID"},
+  {GST_TAG_MUSICBRAINZ_ALBUMID, "MUSICBRAINZ_ALBUMID"},
+  {GST_TAG_MUSICBRAINZ_ALBUMARTISTID, "MUSICBRAINZ_ALBUMARTISTID"},
+  {GST_TAG_MUSICBRAINZ_TRMID, "MUSICBRAINZ_TRMID"},
+  {GST_TAG_ARTIST_SORTNAME, "ARTISTSORT"},
+  {GST_TAG_ARTIST_SORTNAME, "ARTISTSORTORDER"},
+  {GST_TAG_ARTIST_SORTNAME, "MUSICBRAINZ_SORTNAME"},
+  {GST_TAG_ALBUM_SORTNAME, "ALBUMSORT"},
+  {GST_TAG_ALBUM_SORTNAME, "ALBUMSORTORDER"},
+  {GST_TAG_TITLE_SORTNAME, "TITLESORT"},
+  {GST_TAG_TITLE_SORTNAME, "TITLESORTORDER"},
+  {GST_TAG_ALBUM_ARTIST, "ALBUMARTIST"},
+  {GST_TAG_ALBUM_ARTIST_SORTNAME, "ALBUMARTISTSORT"},
+  {GST_TAG_ALBUM_ARTIST_SORTNAME, "ALBUMARTISTSORTORDER"},
+  {GST_TAG_LANGUAGE_CODE, "LANGUAGE"},
+  {GST_TAG_CDDA_MUSICBRAINZ_DISCID, "MUSICBRAINZ_DISCID"},
+  {GST_TAG_CDDA_CDDB_DISCID, "DISCID"},
+  /* For the apparent de-facto standard for coverart in vorbis comments, see:
+   * http://www.hydrogenaudio.org/forums/lofiversion/index.php/t48386.html */
+  {GST_TAG_PREVIEW_IMAGE, "COVERART"},
+  /* some evidence that "BPM" is used elsewhere:
+   * http://mail.kde.org/pipermail/amarok/2006-May/000090.html
+   */
+  {GST_TAG_BEATS_PER_MINUTE, "BPM"},
+  /* What GStreamer calls encoder ("encoder used to encode this stream") is
+     stored in the vendor string in Vorbis/Theora/Kate and possibly others.
+     The Vorbis comment packet used in those streams uses ENCODER as the name
+     of the encoding program, which GStreamer calls application-name. */
+  {GST_TAG_APPLICATION_NAME, "ENCODER"},
+  {NULL, NULL}
+};
+
+/**
+ * gst_tag_from_vorbis_tag:
+ * @vorbis_tag: vorbiscomment tag to convert to GStreamer tag
+ *
+ * Looks up the GStreamer tag for a vorbiscomment tag.
+ *
+ * Returns: The corresponding GStreamer tag or NULL if none exists.
+ */
+const gchar *
+gst_tag_from_vorbis_tag (const gchar * vorbis_tag)
+{
+  int i = 0;
+  gchar *real_vorbis_tag;
+
+  g_return_val_if_fail (vorbis_tag != NULL, NULL);
+
+  gst_tag_register_musicbrainz_tags ();
+
+  real_vorbis_tag = g_ascii_strup (vorbis_tag, -1);
+  while (tag_matches[i].gstreamer_tag != NULL) {
+    if (strcmp (real_vorbis_tag, tag_matches[i].original_tag) == 0) {
+      break;
+    }
+    i++;
+  }
+  g_free (real_vorbis_tag);
+  return tag_matches[i].gstreamer_tag;
+}
+
+/**
+ * gst_tag_to_vorbis_tag:
+ * @gst_tag: GStreamer tag to convert to vorbiscomment tag
+ *
+ * Looks up the vorbiscomment tag for a GStreamer tag.
+ *
+ * Returns: The corresponding vorbiscomment tag or NULL if none exists.
+ */
+const gchar *
+gst_tag_to_vorbis_tag (const gchar * gst_tag)
+{
+  int i = 0;
+
+  g_return_val_if_fail (gst_tag != NULL, NULL);
+
+  gst_tag_register_musicbrainz_tags ();
+
+  while (tag_matches[i].gstreamer_tag != NULL) {
+    if (strcmp (gst_tag, tag_matches[i].gstreamer_tag) == 0) {
+      return tag_matches[i].original_tag;
+    }
+    i++;
+  }
+  return NULL;
+}
+
+
+/**
+ * gst_vorbis_tag_add:
+ * @list: a #GstTagList
+ * @tag: a vorbiscomment tag string (key in key=value), must be valid UTF-8
+ * @value: a vorbiscomment value string (value in key=value), must be valid UTF-8
+ *
+ * Convenience function using gst_tag_from_vorbis_tag(), parsing
+ * a vorbis comment string into the right type and adding it to the
+ * given taglist @list.
+ *
+ * Unknown vorbiscomment tags will be added to the tag list in form
+ * of a #GST_TAG_EXTENDED_COMMENT (since 0.10.10 at least).
+ */
+void
+gst_vorbis_tag_add (GstTagList * list, const gchar * tag, const gchar * value)
+{
+  const gchar *gst_tag;
+  GType tag_type;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (tag != NULL);
+  g_return_if_fail (value != NULL);
+
+  g_return_if_fail (g_utf8_validate (tag, -1, NULL));
+  g_return_if_fail (g_utf8_validate (value, -1, NULL));
+  g_return_if_fail (strchr (tag, '=') == NULL);
+
+  gst_tag = gst_tag_from_vorbis_tag (tag);
+  if (gst_tag == NULL) {
+    gchar *ext_comment;
+
+    ext_comment = g_strdup_printf ("%s=%s", tag, value);
+    gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_EXTENDED_COMMENT,
+        ext_comment, NULL);
+    g_free (ext_comment);
+    return;
+  }
+
+  tag_type = gst_tag_get_type (gst_tag);
+  switch (tag_type) {
+    case G_TYPE_UINT:{
+      guint tmp;
+      gchar *check;
+      gboolean is_track_number_tag;
+      gboolean is_disc_number_tag;
+
+      is_track_number_tag = (strcmp (gst_tag, GST_TAG_TRACK_NUMBER) == 0);
+      is_disc_number_tag = (strcmp (gst_tag, GST_TAG_ALBUM_VOLUME_NUMBER) == 0);
+      tmp = strtoul (value, &check, 10);
+      if (*check == '/' && (is_track_number_tag || is_disc_number_tag)) {
+        guint count;
+
+        check++;
+        count = strtoul (check, &check, 10);
+        if (*check != '\0' || count == 0)
+          break;
+        if (is_track_number_tag) {
+          gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_TRACK_COUNT,
+              count, NULL);
+        } else {
+          gst_tag_list_add (list, GST_TAG_MERGE_APPEND,
+              GST_TAG_ALBUM_VOLUME_COUNT, count, NULL);
+        }
+      }
+      if (*check == '\0') {
+        gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, tmp, NULL);
+      }
+      break;
+    }
+    case G_TYPE_STRING:{
+      gchar *valid = NULL;
+
+      /* specialcase for language code */
+      if (strcmp (tag, "LANGUAGE") == 0) {
+        const gchar *s = strchr (value, '[');
+
+        /* Accept both ISO-639-1 and ISO-639-2 codes */
+        if (s && strchr (s, ']') == s + 4) {
+          valid = g_strndup (s + 1, 3);
+        } else if (s && strchr (s, ']') == s + 3) {
+          valid = g_strndup (s + 1, 2);
+        } else if (strlen (value) != 2 && strlen (value) != 3) {
+          GST_WARNING ("doesn't contain an ISO-639 language code: %s", value);
+        }
+      } else if (strcmp (tag, "LICENSE") == 0) {
+        /* license tags in vorbis comments must contain an URI representing
+         * the license and nothing more, at least according to:
+         * http://wiki.xiph.org/index.php/LICENSE_and_COPYRIGHT_tags_on_Vorbis_Comments */
+        if (value && gst_uri_is_valid (value))
+          gst_tag = GST_TAG_LICENSE_URI;
+      }
+
+      if (!valid) {
+        valid = g_strdup (value);
+      }
+      gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, valid, NULL);
+      g_free (valid);
+      break;
+    }
+    case G_TYPE_DOUBLE:{
+      gchar *c;
+
+      c = g_strdup (value);
+      g_strdelimit (c, ",", '.');
+      gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag,
+          g_strtod (c, NULL), NULL);
+      g_free (c);
+      break;
+    }
+    default:{
+      if (tag_type == GST_TYPE_DATE) {
+        guint y, d = 1, m = 1;
+        gchar *check = (gchar *) value;
+
+        y = strtoul (check, &check, 10);
+        if (*check == '-') {
+          check++;
+          m = strtoul (check, &check, 10);
+          if (*check == '-') {
+            check++;
+            d = strtoul (check, &check, 10);
+          }
+        }
+
+        /* accept dates like 2007-00-00 and 2007-05-00 */
+        if (y != 0) {
+          if (m == 0 && d == 0)
+            m = d = 1;
+          else if (m != 0 && d == 0)
+            d = 1;
+        }
+
+        /* date might be followed by a time */
+        if ((*check == '\0' || g_ascii_isspace (*check)) && y != 0 &&
+            g_date_valid_dmy (d, m, y)) {
+          GDate *date;
+
+          date = g_date_new_dmy (d, m, y);
+          gst_tag_list_add (list, GST_TAG_MERGE_APPEND, gst_tag, date, NULL);
+          g_date_free (date);
+        } else {
+          GST_DEBUG ("skipping invalid date '%s' (%u,%u,%u)", value, y, m, d);
+        }
+      } else {
+        GST_WARNING ("Unhandled tag of type '%s' (%d)",
+            g_type_name (tag_type), (gint) tag_type);
+      }
+      break;
+    }
+  }
+}
+
+static void
+gst_vorbis_tag_add_coverart (GstTagList * tags, gchar * img_data_base64,
+    gint base64_len)
+{
+  GstBuffer *img;
+  gsize img_len;
+
+  if (base64_len < 2)
+    goto not_enough_data;
+
+  /* img_data_base64 points to a temporary copy of the base64 encoded data, so
+   * it's safe to do inpace decoding here
+   */
+  g_base64_decode_inplace (img_data_base64, &img_len);
+  if (img_len == 0)
+    goto decode_failed;
+
+  img =
+      gst_tag_image_data_to_image_buffer ((const guint8 *) img_data_base64,
+      img_len, GST_TAG_IMAGE_TYPE_NONE);
+
+  if (img == NULL)
+    goto convert_failed;
+
+  gst_tag_list_add (tags, GST_TAG_MERGE_APPEND,
+      GST_TAG_PREVIEW_IMAGE, img, NULL);
+
+  gst_buffer_unref (img);
+  return;
+
+/* ERRORS */
+not_enough_data:
+  {
+    GST_WARNING ("COVERART tag with too little base64-encoded data");
+    return;
+  }
+decode_failed:
+  {
+    GST_WARNING ("Couldn't decode base64 image data from COVERART tag");
+    return;
+  }
+convert_failed:
+  {
+    GST_WARNING ("Couldn't extract image or image type from COVERART tag");
+    return;
+  }
+}
+
+/* Standardized way of adding pictures to vorbiscomments:
+ * http://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE
+ */
+static void
+gst_vorbis_tag_add_metadata_block_picture (GstTagList * tags,
+    gchar * value, gint value_len)
+{
+  GstByteReader reader;
+  guint32 img_len = 0, img_type = 0;
+  guint32 img_mimetype_len = 0, img_description_len = 0;
+  gsize decoded_len;
+  const guint8 *data = NULL;
+
+  /* img_data_base64 points to a temporary copy of the base64 encoded data, so
+   * it's safe to do inpace decoding here
+   */
+  g_base64_decode_inplace (value, &decoded_len);
+  if (decoded_len == 0)
+    goto decode_failed;
+
+  gst_byte_reader_init (&reader, (guint8 *) value, decoded_len);
+
+  if (!gst_byte_reader_get_uint32_be (&reader, &img_type))
+    goto error;
+
+  if (!gst_byte_reader_get_uint32_be (&reader, &img_mimetype_len))
+    goto error;
+  if (!gst_byte_reader_skip (&reader, img_mimetype_len))
+    goto error;
+
+  if (!gst_byte_reader_get_uint32_be (&reader, &img_description_len))
+    goto error;
+  if (!gst_byte_reader_skip (&reader, img_description_len))
+    goto error;
+
+  /* Skip width, height, color depth and number of colors for
+   * indexed formats */
+  if (!gst_byte_reader_skip (&reader, 4 * 4))
+    goto error;
+
+  if (!gst_byte_reader_get_uint32_be (&reader, &img_len))
+    goto error;
+
+  if (!gst_byte_reader_get_data (&reader, img_len, &data))
+    goto error;
+
+  gst_tag_list_add_id3_image (tags, data, img_len, img_type);
+
+  return;
+
+error:
+  GST_WARNING
+      ("Couldn't extract image or image type from METADATA_BLOCK_PICTURE tag");
+  return;
+decode_failed:
+  GST_WARNING ("Failed to decode Base64 data from METADATA_BLOCK_PICTURE tag");
+  return;
+}
+
+/**
+ * gst_tag_list_from_vorbiscomment:
+ * @data: data to convert
+ * @size: size of @data
+ * @id_data: identification data at start of stream
+ * @id_data_length: length of identification data
+ * @vendor_string: pointer to a string that should take the vendor string
+ *                 of this vorbis comment or NULL if you don't need it.
+ *
+ * Creates a new tag list that contains the information parsed out of a
+ * vorbiscomment packet.
+ *
+ * Returns: A new #GstTagList with all tags that could be extracted from the
+ *          given vorbiscomment buffer or NULL on error.
+ */
+GstTagList *
+gst_tag_list_from_vorbiscomment (const guint8 * data, gsize size,
+    const guint8 * id_data, const guint id_data_length, gchar ** vendor_string)
+{
+#define ADVANCE(x) G_STMT_START{                                                \
+  data += x;                                                                    \
+  size -= x;                                                                    \
+  if (size < 4) goto error;                                                     \
+  cur_size = GST_READ_UINT32_LE (data);                                         \
+  data += 4;                                                                    \
+  size -= 4;                                                                    \
+  if (cur_size > size) goto error;                                              \
+  cur = (gchar*)data;                                                                   \
+}G_STMT_END
+  gchar *cur, *value;
+  guint cur_size;
+  guint iterations;
+  guint value_len;
+  GstTagList *list;
+
+  g_return_val_if_fail (data != NULL, NULL);
+  g_return_val_if_fail (id_data != NULL || id_data_length == 0, NULL);
+
+  list = gst_tag_list_new ();
+
+  if (size < 11 || size <= id_data_length + 4)
+    goto error;
+
+  if (id_data_length > 0 && memcmp (data, id_data, id_data_length) != 0)
+    goto error;
+
+  ADVANCE (id_data_length);
+
+  if (vendor_string)
+    *vendor_string = g_strndup (cur, cur_size);
+
+  ADVANCE (cur_size);
+  iterations = cur_size;
+  cur_size = 0;
+
+  while (iterations) {
+    ADVANCE (cur_size);
+    iterations--;
+    cur = g_strndup (cur, cur_size);
+    value = strchr (cur, '=');
+    if (value == NULL) {
+      g_free (cur);
+      continue;
+    }
+    *value = '\0';
+    value++;
+    value_len = strlen (value);
+    if (value_len == 0 || !g_utf8_validate (value, value_len, NULL)) {
+      g_free (cur);
+      continue;
+    }
+    /* we'll just ignore COVERARTMIME and typefind the image data */
+    if (g_ascii_strcasecmp (cur, "COVERARTMIME") == 0) {
+      continue;
+    } else if (g_ascii_strcasecmp (cur, "COVERART") == 0) {
+      gst_vorbis_tag_add_coverart (list, value, value_len);
+    } else if (g_ascii_strcasecmp (cur, "METADATA_BLOCK_PICTURE") == 0) {
+      gst_vorbis_tag_add_metadata_block_picture (list, value, value_len);
+    } else {
+      gst_vorbis_tag_add (list, cur, value);
+    }
+    g_free (cur);
+  }
+
+  return list;
+
+error:
+  gst_tag_list_free (list);
+  return NULL;
+#undef ADVANCE
+}
+
+/**
+ * gst_tag_list_from_vorbiscomment_buffer:
+ * @buffer: buffer to convert
+ * @id_data: identification data at start of stream
+ * @id_data_length: length of identification data
+ * @vendor_string: pointer to a string that should take the vendor string
+ *                 of this vorbis comment or NULL if you don't need it.
+ *
+ * Creates a new tag list that contains the information parsed out of a
+ * vorbiscomment packet.
+ *
+ * Returns: A new #GstTagList with all tags that could be extracted from the
+ *          given vorbiscomment buffer or NULL on error.
+ */
+GstTagList *
+gst_tag_list_from_vorbiscomment_buffer (GstBuffer * buffer,
+    const guint8 * id_data, const guint id_data_length, gchar ** vendor_string)
+{
+  GstTagList *res;
+  guint8 *data;
+  gsize size;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  res =
+      gst_tag_list_from_vorbiscomment (data, size, id_data, id_data_length,
+      vendor_string);
+  gst_buffer_unmap (buffer, data, size);
+
+  return res;
+}
+
+typedef struct
+{
+  guint count;
+  guint data_count;
+  GList *entries;
+}
+MyForEach;
+
+static GList *
+gst_tag_to_metadata_block_picture (const gchar * tag,
+    const GValue * image_value)
+{
+#if 0
+  gchar *comment_data, *data_result;
+  const gchar *mime_type;
+  guint mime_type_len;
+  GstStructure *mime_struct;
+  GstBuffer *buffer;
+#endif
+  GList *l = NULL;
+#if 0
+  guint8 *data;
+  gsize size;
+  GstByteWriter writer;
+  GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
+  gint width = 0, height = 0;
+  guint8 *metadata_block;
+  guint metadata_block_len;
+#endif
+
+  g_return_val_if_fail (image_value != NULL, NULL);
+
+  /* FIXME, no more buffer caps */
+  g_assert_not_reached ();
+
+#if 0
+  buffer = gst_value_get_buffer (image_value);
+  g_return_val_if_fail (gst_caps_is_fixed (buffer->caps), NULL);
+  mime_struct = gst_caps_get_structure (buffer->caps, 0);
+
+  mime_type = gst_structure_get_name (mime_struct);
+  if (strcmp (mime_type, "text/uri-list") == 0)
+    mime_type = "-->";
+  mime_type_len = strlen (mime_type);
+
+  gst_structure_get (mime_struct, "image-type", GST_TYPE_TAG_IMAGE_TYPE,
+      &image_type, "width", G_TYPE_INT, &width, "height", G_TYPE_INT, &height,
+      NULL);
+
+  metadata_block_len = 32 + mime_type_len + gst_buffer_get_size (buffer);
+  gst_byte_writer_init_with_size (&writer, metadata_block_len, TRUE);
+
+  if (image_type == GST_TAG_IMAGE_TYPE_NONE
+      && strcmp (tag, GST_TAG_PREVIEW_IMAGE) == 0) {
+    gst_byte_writer_put_uint32_be_unchecked (&writer, 0x01);
+  } else {
+    /* Convert to ID3v2 APIC image type */
+    if (image_type == GST_TAG_IMAGE_TYPE_NONE)
+      image_type = GST_TAG_IMAGE_TYPE_UNDEFINED;
+    else
+      image_type = image_type + 2;
+    gst_byte_writer_put_uint32_be_unchecked (&writer, image_type);
+  }
+
+  gst_byte_writer_put_uint32_be_unchecked (&writer, mime_type_len);
+  gst_byte_writer_put_data_unchecked (&writer, (guint8 *) mime_type,
+      mime_type_len);
+  /* description length */
+  gst_byte_writer_put_uint32_be_unchecked (&writer, 0);
+  gst_byte_writer_put_uint32_be_unchecked (&writer, width);
+  gst_byte_writer_put_uint32_be_unchecked (&writer, height);
+  /* color depth */
+  gst_byte_writer_put_uint32_be_unchecked (&writer, 0);
+  /* for indexed formats the number of colors */
+  gst_byte_writer_put_uint32_be_unchecked (&writer, 0);
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_byte_writer_put_uint32_be_unchecked (&writer, size);
+  gst_byte_writer_put_data_unchecked (&writer, data, size);
+  gst_buffer_unmap (buffer, data, size);
+
+  g_assert (gst_byte_writer_get_pos (&writer) == metadata_block_len);
+
+  metadata_block = gst_byte_writer_reset_and_get_data (&writer);
+  comment_data = g_base64_encode (metadata_block, metadata_block_len);
+  g_free (metadata_block);
+  data_result = g_strdup_printf ("METADATA_BLOCK_PICTURE=%s", comment_data);
+  g_free (comment_data);
+
+  l = g_list_append (l, data_result);
+#endif
+
+  return l;
+}
+
+/**
+ * gst_tag_to_vorbis_comments:
+ * @list: a #GstTagList
+ * @tag: a GStreamer tag identifier, such as #GST_TAG_ARTIST
+ *
+ * Creates a new tag list that contains the information parsed out of a
+ * vorbiscomment packet.
+ *
+ * Returns: A #GList of newly-allowcated key=value strings. Free with
+ *          g_list_foreach (list, (GFunc) g_free, NULL) plus g_list_free (list)
+ */
+GList *
+gst_tag_to_vorbis_comments (const GstTagList * list, const gchar * tag)
+{
+  const gchar *vorbis_tag = NULL;
+  GList *l = NULL;
+  guint i;
+
+  g_return_val_if_fail (list != NULL, NULL);
+  g_return_val_if_fail (tag != NULL, NULL);
+
+  /* Special case: cover art is split into two tags to store data and
+   * MIME-type. Even if the tag list contains multiple entries, there is
+   * no reasonable way to save more than one.
+   * If both, preview image and image, are present we prefer the
+   * image tag.
+   */
+  if ((strcmp (tag, GST_TAG_PREVIEW_IMAGE) == 0 &&
+          gst_tag_list_get_tag_size (list, GST_TAG_IMAGE) == 0) ||
+      strcmp (tag, GST_TAG_IMAGE) == 0) {
+    return gst_tag_to_metadata_block_picture (tag,
+        gst_tag_list_get_value_index (list, tag, 0));
+  }
+
+  if (strcmp (tag, GST_TAG_EXTENDED_COMMENT) != 0) {
+    vorbis_tag = gst_tag_to_vorbis_tag (tag);
+    if (!vorbis_tag)
+      return NULL;
+  }
+
+  /* FIXME: for tags that can map to multiple vorbis comment keys, add all
+   * of the possible keys */
+  for (i = 0; i < gst_tag_list_get_tag_size (list, tag); i++) {
+    GType tag_type = gst_tag_get_type (tag);
+    gchar *result = NULL;
+
+    switch (tag_type) {
+      case G_TYPE_UINT:{
+        guint u;
+
+        if (!gst_tag_list_get_uint_index (list, tag, i, &u))
+          g_return_val_if_reached (NULL);
+        result = g_strdup_printf ("%s=%u", vorbis_tag, u);
+        break;
+      }
+      case G_TYPE_STRING:{
+        const gchar *str = NULL;
+
+        if (!gst_tag_list_peek_string_index (list, tag, i, &str))
+          g_return_val_if_reached (NULL);
+
+        /* special case: GST_TAG_EXTENDED_COMMENT */
+        if (vorbis_tag == NULL) {
+          gchar *key = NULL, *val = NULL;
+
+          if (gst_tag_parse_extended_comment (str, &key, NULL, &val, TRUE)) {
+            result = g_strdup_printf ("%s=%s", key, val);
+            g_free (key);
+            g_free (val);
+          } else {
+            GST_WARNING ("Not a valid extended comment string: %s", str);
+            continue;
+          }
+        } else {
+          result = g_strdup_printf ("%s=%s", vorbis_tag, str);
+        }
+        break;
+      }
+      case G_TYPE_DOUBLE:{
+        gdouble value;
+        gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
+
+        if (!gst_tag_list_get_double_index (list, tag, i, &value))
+          g_return_val_if_reached (NULL);
+        g_ascii_formatd (buf, G_ASCII_DTOSTR_BUF_SIZE, "%f", value);
+        result = g_strconcat (vorbis_tag, "=", buf, NULL);
+        break;
+      }
+      default:{
+        if (tag_type == GST_TYPE_DATE) {
+          GDate *date;
+
+          if (!gst_tag_list_get_date_index (list, tag, i, &date))
+            g_return_val_if_reached (NULL);
+
+          /* vorbis suggests using ISO date formats */
+          result =
+              g_strdup_printf ("%s=%04d-%02d-%02d", vorbis_tag,
+              (gint) g_date_get_year (date), (gint) g_date_get_month (date),
+              (gint) g_date_get_day (date));
+          g_date_free (date);
+        } else {
+          GST_DEBUG ("Couldn't write tag %s", tag);
+          continue;
+        }
+        break;
+      }
+    }
+    l = g_list_prepend (l, result);
+  }
+
+  return g_list_reverse (l);
+}
+
+static void
+write_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data)
+{
+  MyForEach *data = (MyForEach *) user_data;
+  GList *comments;
+  GList *it;
+
+  comments = gst_tag_to_vorbis_comments (list, tag);
+
+  for (it = comments; it != NULL; it = it->next) {
+    gchar *result = it->data;
+
+    data->count++;
+    data->data_count += strlen (result);
+    data->entries = g_list_prepend (data->entries, result);
+  }
+
+  g_list_free (comments);
+}
+
+/**
+ * gst_tag_list_to_vorbiscomment_buffer:
+ * @list: tag list to convert
+ * @id_data: identification data at start of stream
+ * @id_data_length: length of identification data, may be 0 if @id_data is NULL
+ * @vendor_string: string that describes the vendor string or NULL
+ *
+ * Creates a new vorbiscomment buffer from a tag list.
+ *
+ * Returns: A new #GstBuffer containing a vorbiscomment buffer with all tags
+ *          that could be converted from the given tag list.
+ */
+GstBuffer *
+gst_tag_list_to_vorbiscomment_buffer (const GstTagList * list,
+    const guint8 * id_data, const guint id_data_length,
+    const gchar * vendor_string)
+{
+  GstBuffer *buffer;
+  guint8 *data, *odata;
+  guint i;
+  GList *l;
+  MyForEach my_data = { 0, 0, NULL };
+  guint vendor_len;
+  int required_size;
+
+  g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL);
+  g_return_val_if_fail (id_data != NULL || id_data_length == 0, NULL);
+
+  if (vendor_string == NULL)
+    vendor_string = "GStreamer encoded vorbiscomment";
+  vendor_len = strlen (vendor_string);
+  required_size = id_data_length + 4 + vendor_len + 4 + 1;
+  gst_tag_list_foreach ((GstTagList *) list, write_one_tag, &my_data);
+  required_size += 4 * my_data.count + my_data.data_count;
+
+  buffer = gst_buffer_new_and_alloc (required_size);
+  odata = data = gst_buffer_map (buffer, NULL, NULL, GST_MAP_WRITE);
+  if (id_data_length > 0) {
+    memcpy (data, id_data, id_data_length);
+    data += id_data_length;
+  }
+  GST_WRITE_UINT32_LE (data, vendor_len);
+  data += 4;
+  memcpy (data, vendor_string, vendor_len);
+  data += vendor_len;
+  l = my_data.entries = g_list_reverse (my_data.entries);
+  GST_WRITE_UINT32_LE (data, my_data.count);
+  data += 4;
+  for (i = 0; i < my_data.count; i++) {
+    guint size;
+    gchar *cur;
+
+    g_assert (l != NULL);
+    cur = l->data;
+    l = g_list_next (l);
+    size = strlen (cur);
+    GST_WRITE_UINT32_LE (data, size);
+    data += 4;
+    memcpy (data, cur, size);
+    data += size;
+  }
+  g_list_foreach (my_data.entries, (GFunc) g_free, NULL);
+  g_list_free (my_data.entries);
+  *data = 1;
+  gst_buffer_unmap (buffer, odata, required_size);
+
+  return buffer;
+}
diff --git a/gst-libs/gst/tag/gstxmptag.c b/gst-libs/gst/tag/gstxmptag.c
new file mode 100644
index 0000000..0c178b4
--- /dev/null
+++ b/gst-libs/gst/tag/gstxmptag.c
@@ -0,0 +1,1894 @@
+/* GStreamer
+ * Copyright (C) 2010 Stefan Kost <stefan.kost@nokia.com>
+ * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * gstxmptag.c: library for reading / modifying xmp tags
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagxmp
+ * @short_description: tag mappings and support functions for plugins
+ *                     dealing with xmp packets
+ * @see_also: #GstTagList
+ *
+ * Contains various utility functions for plugins to parse or create
+ * xmp packets and map them to and from #GstTagList<!-- -->s.
+ *
+ * Please note that the xmp parser is very lightweight and not strict at all.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "tag.h"
+#include <gst/gsttagsetter.h>
+#include "gsttageditingprivate.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+
+static const gchar *schema_list[] = {
+  "dc",
+  "xap",
+  "tiff",
+  "exif",
+  "photoshop",
+  "Iptc4xmpCore",
+  "Iptc4xmpExt",
+  NULL
+};
+
+/**
+ * gst_tag_xmp_list_schemas:
+ *
+ * Gets the list of supported schemas in the xmp lib
+ *
+ * Returns: a %NULL terminated array of strings with the schema names
+ *
+ * Since: 0.10.33
+ */
+const gchar **
+gst_tag_xmp_list_schemas (void)
+{
+  return schema_list;
+}
+
+typedef struct _XmpSerializationData XmpSerializationData;
+typedef struct _XmpTag XmpTag;
+
+/*
+ * Serializes a GValue into a string.
+ */
+typedef gchar *(*XmpSerializationFunc) (const GValue * value);
+
+/*
+ * Deserializes @str that is the gstreamer tag @gst_tag represented in
+ * XMP as the @xmp_tag_value and adds the result to the @taglist.
+ *
+ * @pending_tags is passed so that compound xmp tags can search for its
+ * complements on the list and use them. Note that used complements should
+ * be freed and removed from the list.
+ * The list is of PendingXmpTag
+ */
+typedef void (*XmpDeserializationFunc) (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag_value,
+    const gchar * str, GSList ** pending_tags);
+
+struct _XmpSerializationData
+{
+  GString *data;
+  const gchar **schemas;
+};
+
+static gboolean
+xmp_serialization_data_use_schema (XmpSerializationData * serdata,
+    const gchar * schemaname)
+{
+  gint i = 0;
+  if (serdata->schemas == NULL)
+    return TRUE;
+
+  while (serdata->schemas[i] != NULL) {
+    if (strcmp (serdata->schemas[i], schemaname) == 0)
+      return TRUE;
+    i++;
+  }
+  return FALSE;
+}
+
+typedef enum
+{
+  GstXmpTagTypeNone = 0,
+  GstXmpTagTypeSimple,
+  GstXmpTagTypeBag,
+  GstXmpTagTypeSeq,
+  GstXmpTagTypeStruct,
+
+  /* Not really a xmp type, this is a tag that in gst is represented with
+   * a single value and on xmp it needs 2 (or more) simple values
+   *
+   * e.g. GST_TAG_GEO_LOCATION_ELEVATION needs to be mapped into 2 complementary
+   * tags in the exif's schema. One of them stores the absolute elevation,
+   * and the other one stores if it is above of below sea level.
+   */
+  GstXmpTagTypeCompound
+} GstXmpTagType;
+
+struct _XmpTag
+{
+  const gchar *gst_tag;
+  const gchar *tag_name;
+  GstXmpTagType type;
+
+  /* some tags must be inside a Bag even
+   * if they are a single entry. Set it here so we know */
+  GstXmpTagType supertype;
+
+  /* For tags that need a rdf:parseType attribute */
+  const gchar *parse_type;
+
+  /* Used for struct and compound types */
+  GSList *children;
+
+  XmpSerializationFunc serialize;
+  XmpDeserializationFunc deserialize;
+};
+
+static GstTagMergeMode
+xmp_tag_get_merge_mode (XmpTag * xmptag)
+{
+  switch (xmptag->type) {
+    case GstXmpTagTypeBag:
+    case GstXmpTagTypeSeq:
+      return GST_TAG_MERGE_APPEND;
+    case GstXmpTagTypeSimple:
+    default:
+      return GST_TAG_MERGE_KEEP;
+  }
+}
+
+static const gchar *
+xmp_tag_type_get_name (GstXmpTagType tagtype)
+{
+  switch (tagtype) {
+    case GstXmpTagTypeSeq:
+      return "rdf:Seq";
+    case GstXmpTagTypeBag:
+      return "rdf:Bag";
+    default:
+      g_assert_not_reached ();
+  }
+  return NULL;                  /* make compiler happy with -DG_DISABLE_ASSERT */
+}
+
+struct _PendingXmpTag
+{
+  XmpTag *xmp_tag;
+  gchar *str;
+};
+typedef struct _PendingXmpTag PendingXmpTag;
+
+/*
+ * A schema is a mapping of strings (the tag name in gstreamer) to a list of
+ * tags in xmp (XmpTag).
+ */
+typedef GHashTable GstXmpSchema;
+#define gst_xmp_schema_lookup g_hash_table_lookup
+#define gst_xmp_schema_insert g_hash_table_insert
+static GstXmpSchema *
+gst_xmp_schema_new ()
+{
+  return g_hash_table_new (g_direct_hash, g_direct_equal);
+}
+
+/*
+ * Mappings from schema names into the schema group of tags (GstXmpSchema)
+ */
+static GHashTable *__xmp_schemas;
+
+static GstXmpSchema *
+_gst_xmp_get_schema (const gchar * name)
+{
+  GQuark key;
+  GstXmpSchema *schema;
+
+  key = g_quark_from_string (name);
+
+  schema = g_hash_table_lookup (__xmp_schemas, GUINT_TO_POINTER (key));
+  if (!schema) {
+    GST_WARNING ("Schema %s doesn't exist", name);
+  }
+  return schema;
+}
+
+static void
+_gst_xmp_add_schema (const gchar * name, GstXmpSchema * schema)
+{
+  GQuark key;
+
+  key = g_quark_from_string (name);
+
+  if (g_hash_table_lookup (__xmp_schemas, GUINT_TO_POINTER (key))) {
+    GST_WARNING ("Schema %s already exists, ignoring", name);
+    g_assert_not_reached ();
+    return;
+  }
+
+  g_hash_table_insert (__xmp_schemas, GUINT_TO_POINTER (key), schema);
+}
+
+static void
+_gst_xmp_schema_add_mapping (GstXmpSchema * schema, XmpTag * tag)
+{
+  GQuark key;
+
+  key = g_quark_from_string (tag->gst_tag);
+
+  if (gst_xmp_schema_lookup (schema, GUINT_TO_POINTER (key))) {
+    GST_WARNING ("Tag %s already present for the schema", tag->gst_tag);
+    g_assert_not_reached ();
+    return;
+  }
+  gst_xmp_schema_insert (schema, GUINT_TO_POINTER (key), tag);
+}
+
+static XmpTag *
+gst_xmp_tag_create (const gchar * gst_tag, const gchar * xmp_tag,
+    gint xmp_type, XmpSerializationFunc serialization_func,
+    XmpDeserializationFunc deserialization_func)
+{
+  XmpTag *xmpinfo;
+
+  xmpinfo = g_slice_new (XmpTag);
+  xmpinfo->gst_tag = gst_tag;
+  xmpinfo->tag_name = xmp_tag;
+  xmpinfo->type = xmp_type;
+  xmpinfo->supertype = GstXmpTagTypeNone;
+  xmpinfo->parse_type = NULL;
+  xmpinfo->serialize = serialization_func;
+  xmpinfo->deserialize = deserialization_func;
+  xmpinfo->children = NULL;
+
+  return xmpinfo;
+}
+
+static XmpTag *
+gst_xmp_tag_create_compound (const gchar * gst_tag, const gchar * xmp_tag_a,
+    const gchar * xmp_tag_b, XmpSerializationFunc serialization_func_a,
+    XmpSerializationFunc serialization_func_b,
+    XmpDeserializationFunc deserialization_func)
+{
+  XmpTag *xmptag;
+  XmpTag *xmptag_a =
+      gst_xmp_tag_create (gst_tag, xmp_tag_a, GstXmpTagTypeSimple,
+      serialization_func_a, deserialization_func);
+  XmpTag *xmptag_b =
+      gst_xmp_tag_create (gst_tag, xmp_tag_b, GstXmpTagTypeSimple,
+      serialization_func_b, deserialization_func);
+
+  xmptag =
+      gst_xmp_tag_create (gst_tag, NULL, GstXmpTagTypeCompound, NULL, NULL);
+
+  xmptag->children = g_slist_prepend (xmptag->children, xmptag_b);
+  xmptag->children = g_slist_prepend (xmptag->children, xmptag_a);
+
+  return xmptag;
+}
+
+static void
+_gst_xmp_schema_add_simple_mapping (GstXmpSchema * schema,
+    const gchar * gst_tag, const gchar * xmp_tag, gint xmp_type,
+    XmpSerializationFunc serialization_func,
+    XmpDeserializationFunc deserialization_func)
+{
+  _gst_xmp_schema_add_mapping (schema,
+      gst_xmp_tag_create (gst_tag, xmp_tag, xmp_type, serialization_func,
+          deserialization_func));
+}
+
+/*
+ * We do not return a copy here because elements are
+ * appended, and the API is not public, so we shouldn't
+ * have our lists modified during usage
+ */
+#if 0
+static GPtrArray *
+_xmp_tag_get_mapping (const gchar * gst_tag, XmpSerializationData * serdata)
+{
+  GPtrArray *ret = NULL;
+  GHashTableIter iter;
+  GQuark key = g_quark_from_string (gst_tag);
+  gpointer iterkey, value;
+  const gchar *schemaname;
+
+  g_hash_table_iter_init (&iter, __xmp_schemas);
+  while (!ret && g_hash_table_iter_next (&iter, &iterkey, &value)) {
+    GstXmpSchema *schema = (GstXmpSchema *) value;
+
+    schemaname = g_quark_to_string (GPOINTER_TO_UINT (iterkey));
+    if (xmp_serialization_data_use_schema (serdata, schemaname))
+      ret =
+          (GPtrArray *) gst_xmp_schema_lookup (schema, GUINT_TO_POINTER (key));
+  }
+  return ret;
+}
+#endif
+
+/* finds the gst tag that maps to this xmp tag in this schema */
+static const gchar *
+_gst_xmp_schema_get_mapping_reverse (GstXmpSchema * schema,
+    const gchar * xmp_tag, XmpTag ** _xmp_tag)
+{
+  GHashTableIter iter;
+  gpointer key, value;
+  const gchar *ret = NULL;
+
+  /* Iterate over the hashtable */
+  g_hash_table_iter_init (&iter, schema);
+  while (!ret && g_hash_table_iter_next (&iter, &key, &value)) {
+    XmpTag *xmpinfo = (XmpTag *) value;
+
+    if (xmpinfo->tag_name) {
+      if (strcmp (xmpinfo->tag_name, xmp_tag) == 0) {
+        *_xmp_tag = xmpinfo;
+        ret = g_quark_to_string (GPOINTER_TO_UINT (key));
+        goto out;
+      }
+    } else if (xmpinfo->children) {
+      GSList *iter;
+      for (iter = xmpinfo->children; iter; iter = g_slist_next (iter)) {
+        XmpTag *child = iter->data;
+        if (strcmp (child->tag_name, xmp_tag) == 0) {
+          *_xmp_tag = child;
+          ret = g_quark_to_string (GPOINTER_TO_UINT (key));
+          goto out;
+        }
+      }
+    } else {
+      g_assert_not_reached ();
+    }
+  }
+
+out:
+  return ret;
+}
+
+/* finds the gst tag that maps to this xmp tag (searches on all schemas) */
+static const gchar *
+_gst_xmp_tag_get_mapping_reverse (const gchar * xmp_tag, XmpTag ** _xmp_tag)
+{
+  GHashTableIter iter;
+  gpointer key, value;
+  const gchar *ret = NULL;
+
+  /* Iterate over the hashtable */
+  g_hash_table_iter_init (&iter, __xmp_schemas);
+  while (!ret && g_hash_table_iter_next (&iter, &key, &value)) {
+    ret = _gst_xmp_schema_get_mapping_reverse ((GstXmpSchema *) value, xmp_tag,
+        _xmp_tag);
+  }
+  return ret;
+}
+
+/* utility functions/macros */
+
+#define METERS_PER_SECOND_TO_KILOMETERS_PER_HOUR (3.6)
+#define KILOMETERS_PER_HOUR_TO_METERS_PER_SECOND (1/3.6)
+#define MILES_PER_HOUR_TO_METERS_PER_SECOND (0.44704)
+#define KNOTS_TO_METERS_PER_SECOND (0.514444)
+
+static gchar *
+double_to_fraction_string (gdouble num)
+{
+  gint frac_n;
+  gint frac_d;
+
+  gst_util_double_to_fraction (num, &frac_n, &frac_d);
+  return g_strdup_printf ("%d/%d", frac_n, frac_d);
+}
+
+/* (de)serialize functions */
+static gchar *
+serialize_exif_gps_coordinate (const GValue * value, gchar pos, gchar neg)
+{
+  gdouble num;
+  gchar c;
+  gint integer;
+  gchar fraction[G_ASCII_DTOSTR_BUF_SIZE];
+
+  g_return_val_if_fail (G_VALUE_TYPE (value) == G_TYPE_DOUBLE, NULL);
+
+  num = g_value_get_double (value);
+  if (num < 0) {
+    c = neg;
+    num *= -1;
+  } else {
+    c = pos;
+  }
+  integer = (gint) num;
+
+  g_ascii_dtostr (fraction, sizeof (fraction), (num - integer) * 60);
+
+  /* FIXME review GPSCoordinate serialization spec for the .mm or ,ss
+   * decision. Couldn't understand it clearly */
+  return g_strdup_printf ("%d,%s%c", integer, fraction, c);
+}
+
+static gchar *
+serialize_exif_latitude (const GValue * value)
+{
+  return serialize_exif_gps_coordinate (value, 'N', 'S');
+}
+
+static gchar *
+serialize_exif_longitude (const GValue * value)
+{
+  return serialize_exif_gps_coordinate (value, 'E', 'W');
+}
+
+static void
+deserialize_exif_gps_coordinate (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * str, gchar pos, gchar neg)
+{
+  gdouble value = 0;
+  gint d = 0, m = 0, s = 0;
+  gdouble m2 = 0;
+  gchar c = 0;
+  const gchar *current;
+
+  /* get the degrees */
+  if (sscanf (str, "%d", &d) != 1)
+    goto error;
+
+  /* find the beginning of the minutes */
+  current = strchr (str, ',');
+  if (current == NULL)
+    goto end;
+  current += 1;
+
+  /* check if it uses ,SS or .mm */
+  if (strchr (current, ',') != NULL) {
+    sscanf (current, "%d,%d%c", &m, &s, &c);
+  } else {
+    gchar *copy = g_strdup (current);
+    gint len = strlen (copy);
+    gint i;
+
+    /* check the last letter */
+    for (i = len - 1; len >= 0; len--) {
+      if (g_ascii_isspace (copy[i]))
+        continue;
+
+      if (g_ascii_isalpha (copy[i])) {
+        /* found it */
+        c = copy[i];
+        copy[i] = '\0';
+        break;
+
+      } else {
+        /* something is wrong */
+        g_free (copy);
+        goto error;
+      }
+    }
+
+    /* use a copy so we can change the last letter as E can cause
+     * problems here */
+    m2 = g_ascii_strtod (copy, NULL);
+    g_free (copy);
+  }
+
+end:
+  /* we can add them all as those that aren't parsed are 0 */
+  value = d + (m / 60.0) + (s / (60.0 * 60.0)) + (m2 / 60.0);
+
+  if (c == pos) {
+    //NOP
+  } else if (c == neg) {
+    value *= -1;
+  } else {
+    goto error;
+  }
+
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag), gst_tag, value,
+      NULL);
+  return;
+
+error:
+  GST_WARNING ("Failed to deserialize gps coordinate: %s", str);
+}
+
+static void
+deserialize_exif_latitude (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  deserialize_exif_gps_coordinate (xmptag, taglist, gst_tag, str, 'N', 'S');
+}
+
+static void
+deserialize_exif_longitude (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  deserialize_exif_gps_coordinate (xmptag, taglist, gst_tag, str, 'E', 'W');
+}
+
+static gchar *
+serialize_exif_altitude (const GValue * value)
+{
+  gdouble num;
+
+  num = g_value_get_double (value);
+
+  if (num < 0)
+    num *= -1;
+
+  return double_to_fraction_string (num);
+}
+
+static gchar *
+serialize_exif_altituderef (const GValue * value)
+{
+  gdouble num;
+
+  num = g_value_get_double (value);
+
+  /* 0 means above sea level, 1 means below */
+  if (num >= 0)
+    return g_strdup ("0");
+  return g_strdup ("1");
+}
+
+static void
+deserialize_exif_altitude (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  const gchar *altitude_str = NULL;
+  const gchar *altituderef_str = NULL;
+  gint frac_n;
+  gint frac_d;
+  gdouble value;
+
+  GSList *entry;
+  PendingXmpTag *ptag = NULL;
+
+  /* find the other missing part */
+  if (strcmp (xmp_tag, "exif:GPSAltitude") == 0) {
+    altitude_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, "exif:GPSAltitudeRef") == 0) {
+        altituderef_str = ptag->str;
+        break;
+      }
+    }
+
+  } else if (strcmp (xmp_tag, "exif:GPSAltitudeRef") == 0) {
+    altituderef_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, "exif:GPSAltitude") == 0) {
+        altitude_str = ptag->str;
+        break;
+      }
+    }
+
+  } else {
+    GST_WARNING ("Unexpected xmp tag %s", xmp_tag);
+    return;
+  }
+
+  if (!altitude_str) {
+    GST_WARNING ("Missing exif:GPSAltitude tag");
+    return;
+  }
+  if (!altituderef_str) {
+    GST_WARNING ("Missing exif:GPSAltitudeRef tag");
+    return;
+  }
+
+  if (sscanf (altitude_str, "%d/%d", &frac_n, &frac_d) != 2) {
+    GST_WARNING ("Failed to parse fraction: %s", altitude_str);
+    return;
+  }
+
+  gst_util_fraction_to_double (frac_n, frac_d, &value);
+
+  if (altituderef_str[0] == '0') {
+    /* nop */
+  } else if (altituderef_str[0] == '1') {
+    value *= -1;
+  } else {
+    GST_WARNING ("Unexpected exif:AltitudeRef value: %s", altituderef_str);
+    return;
+  }
+
+  /* add to the taglist */
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag),
+      GST_TAG_GEO_LOCATION_ELEVATION, value, NULL);
+
+  /* clean up entry */
+  g_free (ptag->str);
+  g_slice_free (PendingXmpTag, ptag);
+  *pending_tags = g_slist_delete_link (*pending_tags, entry);
+}
+
+static gchar *
+serialize_exif_gps_speed (const GValue * value)
+{
+  return double_to_fraction_string (g_value_get_double (value) *
+      METERS_PER_SECOND_TO_KILOMETERS_PER_HOUR);
+}
+
+static gchar *
+serialize_exif_gps_speedref (const GValue * value)
+{
+  /* we always use km/h */
+  return g_strdup ("K");
+}
+
+static void
+deserialize_exif_gps_speed (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  const gchar *speed_str = NULL;
+  const gchar *speedref_str = NULL;
+  gint frac_n;
+  gint frac_d;
+  gdouble value;
+
+  GSList *entry;
+  PendingXmpTag *ptag = NULL;
+
+  /* find the other missing part */
+  if (strcmp (xmp_tag, "exif:GPSSpeed") == 0) {
+    speed_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, "exif:GPSSpeedRef") == 0) {
+        speedref_str = ptag->str;
+        break;
+      }
+    }
+
+  } else if (strcmp (xmp_tag, "exif:GPSSpeedRef") == 0) {
+    speedref_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, "exif:GPSSpeed") == 0) {
+        speed_str = ptag->str;
+        break;
+      }
+    }
+
+  } else {
+    GST_WARNING ("Unexpected xmp tag %s", xmp_tag);
+    return;
+  }
+
+  if (!speed_str) {
+    GST_WARNING ("Missing exif:GPSSpeed tag");
+    return;
+  }
+  if (!speedref_str) {
+    GST_WARNING ("Missing exif:GPSSpeedRef tag");
+    return;
+  }
+
+  if (sscanf (speed_str, "%d/%d", &frac_n, &frac_d) != 2) {
+    GST_WARNING ("Failed to parse fraction: %s", speed_str);
+    return;
+  }
+
+  gst_util_fraction_to_double (frac_n, frac_d, &value);
+
+  if (speedref_str[0] == 'K') {
+    value *= KILOMETERS_PER_HOUR_TO_METERS_PER_SECOND;
+  } else if (speedref_str[0] == 'M') {
+    value *= MILES_PER_HOUR_TO_METERS_PER_SECOND;
+  } else if (speedref_str[0] == 'N') {
+    value *= KNOTS_TO_METERS_PER_SECOND;
+  } else {
+    GST_WARNING ("Unexpected exif:SpeedRef value: %s", speedref_str);
+    return;
+  }
+
+  /* add to the taglist */
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag),
+      GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, value, NULL);
+
+  /* clean up entry */
+  g_free (ptag->str);
+  g_slice_free (PendingXmpTag, ptag);
+  *pending_tags = g_slist_delete_link (*pending_tags, entry);
+}
+
+static gchar *
+serialize_exif_gps_direction (const GValue * value)
+{
+  return double_to_fraction_string (g_value_get_double (value));
+}
+
+static gchar *
+serialize_exif_gps_directionref (const GValue * value)
+{
+  /* T for true geographic direction (M would mean magnetic) */
+  return g_strdup ("T");
+}
+
+static void
+deserialize_exif_gps_direction (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags, const gchar * direction_tag,
+    const gchar * directionref_tag)
+{
+  const gchar *dir_str = NULL;
+  const gchar *dirref_str = NULL;
+  gint frac_n;
+  gint frac_d;
+  gdouble value;
+
+  GSList *entry;
+  PendingXmpTag *ptag = NULL;
+
+  /* find the other missing part */
+  if (strcmp (xmp_tag, direction_tag) == 0) {
+    dir_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, directionref_tag) == 0) {
+        dirref_str = ptag->str;
+        break;
+      }
+    }
+
+  } else if (strcmp (xmp_tag, directionref_tag) == 0) {
+    dirref_str = str;
+
+    for (entry = *pending_tags; entry; entry = g_slist_next (entry)) {
+      ptag = (PendingXmpTag *) entry->data;
+
+      if (strcmp (ptag->xmp_tag->tag_name, direction_tag) == 0) {
+        dir_str = ptag->str;
+        break;
+      }
+    }
+
+  } else {
+    GST_WARNING ("Unexpected xmp tag %s", xmp_tag);
+    return;
+  }
+
+  if (!dir_str) {
+    GST_WARNING ("Missing %s tag", dir_str);
+    return;
+  }
+  if (!dirref_str) {
+    GST_WARNING ("Missing %s tag", dirref_str);
+    return;
+  }
+
+  if (sscanf (dir_str, "%d/%d", &frac_n, &frac_d) != 2) {
+    GST_WARNING ("Failed to parse fraction: %s", dir_str);
+    return;
+  }
+
+  gst_util_fraction_to_double (frac_n, frac_d, &value);
+
+  if (dirref_str[0] == 'T') {
+    /* nop */
+  } else if (dirref_str[0] == 'M') {
+    GST_WARNING ("Magnetic direction tags aren't supported yet");
+    return;
+  } else {
+    GST_WARNING ("Unexpected %s value: %s", directionref_tag, dirref_str);
+    return;
+  }
+
+  /* add to the taglist */
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag), gst_tag, value,
+      NULL);
+
+  /* clean up entry */
+  g_free (ptag->str);
+  g_slice_free (PendingXmpTag, ptag);
+  *pending_tags = g_slist_delete_link (*pending_tags, entry);
+}
+
+static void
+deserialize_exif_gps_track (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  deserialize_exif_gps_direction (xmptag, taglist, gst_tag, xmp_tag, str,
+      pending_tags, "exif:GPSTrack", "exif:GPSTrackRef");
+}
+
+static void
+deserialize_exif_gps_img_direction (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  deserialize_exif_gps_direction (xmptag, taglist, gst_tag, xmp_tag, str,
+      pending_tags, "exif:GPSImgDirection", "exif:GPSImgDirectionRef");
+}
+
+static void
+deserialize_xmp_rating (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  guint value;
+
+  if (sscanf (str, "%u", &value) != 1) {
+    GST_WARNING ("Failed to parse xmp:Rating %s", str);
+    return;
+  }
+
+  if (value > 100) {
+    GST_WARNING ("Unsupported Rating tag %u (should be from 0 to 100), "
+        "ignoring", value);
+    return;
+  }
+
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag), gst_tag, value,
+      NULL);
+}
+
+static gchar *
+serialize_tiff_orientation (const GValue * value)
+{
+  const gchar *str;
+  gint num;
+
+  str = g_value_get_string (value);
+  if (str == NULL) {
+    GST_WARNING ("Failed to get image orientation tag value");
+    return NULL;
+  }
+
+  num = __exif_tag_image_orientation_to_exif_value (str);
+  if (num == -1)
+    return NULL;
+
+  return g_strdup_printf ("%d", num);
+}
+
+static void
+deserialize_tiff_orientation (XmpTag * xmptag, GstTagList * taglist,
+    const gchar * gst_tag, const gchar * xmp_tag, const gchar * str,
+    GSList ** pending_tags)
+{
+  guint value;
+  const gchar *orientation = NULL;
+
+  if (sscanf (str, "%u", &value) != 1) {
+    GST_WARNING ("Failed to parse tiff:Orientation %s", str);
+    return;
+  }
+
+  if (value < 1 || value > 8) {
+    GST_WARNING ("Invalid tiff:Orientation tag %u (should be from 1 to 8), "
+        "ignoring", value);
+    return;
+  }
+
+  orientation = __exif_tag_image_orientation_from_exif_value (value);
+  if (orientation == NULL)
+    return;
+  gst_tag_list_add (taglist, xmp_tag_get_merge_mode (xmptag), gst_tag,
+      orientation, NULL);
+}
+
+
+/* look at this page for addtional schemas
+ * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/XMP.html
+ */
+static gpointer
+_init_xmp_tag_map (gpointer user_data)
+{
+  XmpTag *xmpinfo;
+  GstXmpSchema *schema;
+
+  __xmp_schemas = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+  /* add the maps */
+  /* dublic code metadata
+   * http://dublincore.org/documents/dces/
+   */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_ARTIST,
+      "dc:creator", GstXmpTagTypeSeq, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_COPYRIGHT,
+      "dc:rights", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_DATE, "dc:date",
+      GstXmpTagTypeSeq, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_DESCRIPTION,
+      "dc:description", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_KEYWORDS,
+      "dc:subject", GstXmpTagTypeBag, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_TITLE, "dc:title",
+      GstXmpTagTypeSimple, NULL, NULL);
+  /* FIXME: we probably want GST_TAG_{,AUDIO_,VIDEO_}MIME_TYPE */
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_VIDEO_CODEC,
+      "dc:format", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_add_schema ("dc", schema);
+
+  /* xap (xmp) schema */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_USER_RATING,
+      "xmp:Rating", GstXmpTagTypeSimple, NULL, deserialize_xmp_rating);
+  _gst_xmp_add_schema ("xap", schema);
+
+  /* tiff */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_DEVICE_MANUFACTURER, "tiff:Make", GstXmpTagTypeSimple, NULL,
+      NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_DEVICE_MODEL,
+      "tiff:Model", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_APPLICATION_NAME,
+      "tiff:Software", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_IMAGE_ORIENTATION,
+      "tiff:Orientation", GstXmpTagTypeSimple, serialize_tiff_orientation,
+      deserialize_tiff_orientation);
+  _gst_xmp_add_schema ("tiff", schema);
+
+  /* exif schema */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_DATE_TIME,
+      "exif:DateTimeOriginal", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_GEO_LOCATION_LATITUDE, "exif:GPSLatitude",
+      GstXmpTagTypeSimple, serialize_exif_latitude, deserialize_exif_latitude);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_GEO_LOCATION_LONGITUDE,
+      "exif:GPSLongitude", GstXmpTagTypeSimple, serialize_exif_longitude,
+      deserialize_exif_longitude);
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, "exif:ExposureBiasValue",
+      GstXmpTagTypeSimple, NULL, NULL);
+
+  /* compound exif tags */
+  xmpinfo = gst_xmp_tag_create_compound (GST_TAG_GEO_LOCATION_ELEVATION,
+      "exif:GPSAltitude", "exif:GPSAltitudeRef", serialize_exif_altitude,
+      serialize_exif_altituderef, deserialize_exif_altitude);
+  _gst_xmp_schema_add_mapping (schema, xmpinfo);
+
+  xmpinfo = gst_xmp_tag_create_compound (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED,
+      "exif:GPSSpeed", "exif:GPSSpeedRef", serialize_exif_gps_speed,
+      serialize_exif_gps_speedref, deserialize_exif_gps_speed);
+  _gst_xmp_schema_add_mapping (schema, xmpinfo);
+
+  xmpinfo =
+      gst_xmp_tag_create_compound (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION,
+      "exif:GPSTrack", "exif:GPSTrackRef", serialize_exif_gps_direction,
+      serialize_exif_gps_directionref, deserialize_exif_gps_track);
+  _gst_xmp_schema_add_mapping (schema, xmpinfo);
+
+  xmpinfo = gst_xmp_tag_create_compound (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION,
+      "exif:GPSImgDirection", "exif:GPSImgDirectionRef",
+      serialize_exif_gps_direction, serialize_exif_gps_directionref,
+      deserialize_exif_gps_img_direction);
+  _gst_xmp_schema_add_mapping (schema, xmpinfo);
+
+  _gst_xmp_add_schema ("exif", schema);
+
+  /* photoshop schema */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_GEO_LOCATION_COUNTRY, "photoshop:Country",
+      GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_GEO_LOCATION_CITY,
+      "photoshop:City", GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_add_schema ("photoshop", schema);
+
+  /* iptc4xmpcore schema */
+  schema = gst_xmp_schema_new ();
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_GEO_LOCATION_SUBLOCATION, "Iptc4xmpCore:Location",
+      GstXmpTagTypeSimple, NULL, NULL);
+  _gst_xmp_add_schema ("Iptc4xmpCore", schema);
+
+  /* iptc4xmpext schema */
+  schema = gst_xmp_schema_new ();
+  xmpinfo = gst_xmp_tag_create (NULL, "Iptc4xmpExt:LocationShown",
+      GstXmpTagTypeStruct, NULL, NULL);
+  xmpinfo->supertype = GstXmpTagTypeBag;
+  xmpinfo->parse_type = "Resource";
+  xmpinfo->children = g_slist_prepend (xmpinfo->children,
+      gst_xmp_tag_create (GST_TAG_GEO_LOCATION_SUBLOCATION,
+          "LocationDetails:Sublocation", GstXmpTagTypeSimple, NULL, NULL));
+  xmpinfo->children =
+      g_slist_prepend (xmpinfo->children,
+      gst_xmp_tag_create (GST_TAG_GEO_LOCATION_CITY,
+          "LocationDetails:City", GstXmpTagTypeSimple, NULL, NULL));
+  xmpinfo->children =
+      g_slist_prepend (xmpinfo->children,
+      gst_xmp_tag_create (GST_TAG_GEO_LOCATION_COUNTRY,
+          "LocationDetails:Country", GstXmpTagTypeSimple, NULL, NULL));
+  _gst_xmp_schema_add_mapping (schema, xmpinfo);
+  _gst_xmp_add_schema ("Iptc4xmpExt", schema);
+
+  return NULL;
+}
+
+static void
+xmp_tags_initialize ()
+{
+  static GOnce my_once = G_ONCE_INIT;
+  g_once (&my_once, (GThreadFunc) _init_xmp_tag_map, NULL);
+}
+
+typedef struct _GstXmpNamespaceMatch GstXmpNamespaceMatch;
+struct _GstXmpNamespaceMatch
+{
+  const gchar *ns_prefix;
+  const gchar *ns_uri;
+
+  /*
+   * Stores extra namespaces for array tags
+   * The namespaces should be writen in the form:
+   *
+   * xmlns:XpTo="http://some.org/your/ns/name/ (next ones)"
+   */
+  const gchar *extra_ns;
+};
+
+static const GstXmpNamespaceMatch ns_match[] = {
+  {"dc", "http://purl.org/dc/elements/1.1/", NULL},
+  {"exif", "http://ns.adobe.com/exif/1.0/", NULL},
+  {"tiff", "http://ns.adobe.com/tiff/1.0/", NULL},
+  {"xap", "http://ns.adobe.com/xap/1.0/", NULL},
+  {"photoshop", "http://ns.adobe.com/photoshop/1.0/", NULL},
+  {"Iptc4xmpCore", "http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/", NULL},
+  {"Iptc4xmpExt", "http://iptc.org/std/Iptc4xmpExt/2008-02-29/",
+      "xmlns:LocationDetails=\"http://iptc.org/std/Iptc4xmpExt/2008-02-29/LocationDetails/\""},
+  {NULL, NULL, NULL}
+};
+
+typedef struct _GstXmpNamespaceMap GstXmpNamespaceMap;
+struct _GstXmpNamespaceMap
+{
+  const gchar *original_ns;
+  gchar *gstreamer_ns;
+};
+
+/* parsing */
+
+static void
+read_one_tag (GstTagList * list, XmpTag * xmptag,
+    const gchar * v, GSList ** pending_tags)
+{
+  GType tag_type;
+  GstTagMergeMode merge_mode;
+  const gchar *tag = xmptag->gst_tag;
+
+  g_return_if_fail (tag != NULL);
+
+  if (xmptag->deserialize) {
+    xmptag->deserialize (xmptag, list, tag, xmptag->tag_name, v, pending_tags);
+    return;
+  }
+
+  merge_mode = xmp_tag_get_merge_mode (xmptag);
+  tag_type = gst_tag_get_type (tag);
+
+  /* add gstreamer tag depending on type */
+  switch (tag_type) {
+    case G_TYPE_STRING:{
+      gst_tag_list_add (list, merge_mode, tag, v, NULL);
+      break;
+    }
+    case G_TYPE_DOUBLE:{
+      gdouble value = 0;
+      gint frac_n, frac_d;
+
+      if (sscanf (v, "%d/%d", &frac_n, &frac_d) == 2) {
+        gst_util_fraction_to_double (frac_n, frac_d, &value);
+        gst_tag_list_add (list, merge_mode, tag, value, NULL);
+      } else {
+        GST_WARNING ("Failed to parse fraction: %s", v);
+      }
+      break;
+    }
+    default:
+      if (tag_type == GST_TYPE_DATE_TIME) {
+        GstDateTime *datetime = NULL;
+        gint year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
+        gint usecs = 0;
+        gint gmt_offset_hour = -1, gmt_offset_min = -1, gmt_offset = -1;
+        gchar usec_str[16];
+        gint ret;
+        gint len;
+
+        len = strlen (v);
+        if (len == 0) {
+          GST_WARNING ("Empty string for datetime parsing");
+          return;
+        }
+
+        GST_DEBUG ("Parsing %s into a datetime", v);
+
+        ret = sscanf (v, "%04d-%02d-%02dT%02d:%02d:%02d.%15s",
+            &year, &month, &day, &hour, &minute, &second, usec_str);
+        if (ret < 3) {
+          /* FIXME theoretically, xmp can express datetimes with only year
+           * or year and month, but gstdatetime doesn't support it */
+          GST_WARNING ("Invalid datetime value: %s", v);
+        }
+
+        /* parse the usecs */
+        if (ret >= 7) {
+          gint num_digits = 0;
+
+          /* find the number of digits */
+          while (isdigit ((gint) usec_str[num_digits++]) && num_digits < 6);
+
+          if (num_digits > 0) {
+            /* fill up to 6 digits with 0 */
+            while (num_digits < 6) {
+              usec_str[num_digits++] = 0;
+            }
+
+            g_assert (num_digits == 6);
+
+            usec_str[num_digits] = '\0';
+            usecs = atoi (usec_str);
+          }
+        }
+
+        /* parse the timezone info */
+        if (v[len - 1] == 'Z') {
+          GST_LOG ("UTC timezone");
+
+          /* Having a Z at the end means UTC */
+          datetime = gst_date_time_new (0, year, month, day, hour, minute,
+              second + usecs / 1000000.0);
+        } else {
+          gchar *plus_pos = NULL;
+          gchar *neg_pos = NULL;
+          gchar *pos = NULL;
+
+          GST_LOG ("Checking for timezone information");
+
+          /* check if there is timezone info */
+          plus_pos = strrchr (v, '+');
+          neg_pos = strrchr (v, '-');
+          if (plus_pos) {
+            pos = plus_pos + 1;
+          } else if (neg_pos) {
+            pos = neg_pos + 1;
+          }
+
+          if (pos) {
+            gint ret_tz = sscanf (pos, "%d:%d", &gmt_offset_hour,
+                &gmt_offset_min);
+
+            GST_DEBUG ("Parsing timezone: %s", pos);
+
+            if (ret_tz == 2) {
+              gmt_offset = gmt_offset_hour * 60 + gmt_offset_min;
+              if (neg_pos != NULL && neg_pos + 1 == pos)
+                gmt_offset *= -1;
+
+              GST_LOG ("Timezone offset: %f (%d minutes)", gmt_offset / 60.0,
+                  gmt_offset);
+
+              /* no way to know if it is DST or not */
+              datetime =
+                  gst_date_time_new (gmt_offset / 60.0,
+                  year, month, day, hour, minute,
+                  second + usecs / ((gdouble) G_USEC_PER_SEC));
+            } else {
+              GST_WARNING ("Failed to parse timezone information");
+            }
+          } else {
+            GST_WARNING ("No timezone signal found");
+          }
+        }
+
+        if (datetime) {
+          gst_tag_list_add (list, merge_mode, tag, datetime, NULL);
+          gst_date_time_unref (datetime);
+        }
+
+      } else if (tag_type == GST_TYPE_DATE) {
+        GDate *date;
+        gint d, m, y;
+
+        /* this is ISO 8601 Date and Time Format
+         * %F     Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)
+         * %T     The time in 24-hour notation (%H:%M:%S). (SU)
+         * e.g. 2009-05-30T18:26:14+03:00 */
+
+        /* FIXME: this would be the proper way, but needs
+           #define _XOPEN_SOURCE before #include <time.h>
+
+           date = g_date_new ();
+           struct tm tm={0,};
+           strptime (dts, "%FT%TZ", &tm);
+           g_date_set_time_t (date, mktime(&tm));
+         */
+        /* FIXME: this cannot parse the date
+           date = g_date_new ();
+           g_date_set_parse (date, v);
+           if (g_date_valid (date)) {
+           gst_tag_list_add (list, merge_mode, tag,
+           date, NULL);
+           } else {
+           GST_WARNING ("unparsable date: '%s'", v);
+           }
+         */
+        /* poor mans straw */
+        sscanf (v, "%04d-%02d-%02dT", &y, &m, &d);
+        date = g_date_new_dmy (d, m, y);
+        gst_tag_list_add (list, merge_mode, tag, date, NULL);
+        g_date_free (date);
+      } else {
+        GST_WARNING ("unhandled type for %s from xmp", tag);
+      }
+      break;
+  }
+}
+
+/**
+ * gst_tag_list_from_xmp_buffer:
+ * @buffer: buffer
+ *
+ * Parse a xmp packet into a taglist.
+ *
+ * Returns: new taglist or %NULL, free the list when done
+ *
+ * Since: 0.10.29
+ */
+GstTagList *
+gst_tag_list_from_xmp_buffer (GstBuffer * buffer)
+{
+  GstTagList *list = NULL;
+  gchar *xps, *xp1, *xp2, *xpe, *ns, *ne;
+  gsize len, max_ft_len;
+  gboolean in_tag;
+  gchar *part, *pp;
+  guint i;
+  XmpTag *last_xmp_tag = NULL;
+  GSList *pending_tags = NULL;
+
+  /* Used for strucuture xmp tags */
+  XmpTag *context_tag = NULL;
+
+  GstXmpNamespaceMap ns_map[] = {
+    {"dc", NULL}
+    ,
+    {"exif", NULL}
+    ,
+    {"tiff", NULL}
+    ,
+    {"xap", NULL}
+    ,
+    {"photoshop", NULL}
+    ,
+    {"Iptc4xmpCore", NULL}
+    ,
+    {"Iptc4xmpExt", NULL}
+    ,
+    {NULL, NULL}
+  };
+
+  xmp_tags_initialize ();
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
+
+  GST_LOG ("Starting xmp parsing");
+
+  xps = gst_buffer_map (buffer, &len, NULL, GST_MAP_READ);
+  g_return_val_if_fail (len > 0, NULL);
+
+  xpe = &xps[len + 1];
+
+  /* check header and footer */
+  xp1 = g_strstr_len (xps, len, "<?xpacket begin");
+  if (!xp1)
+    goto missing_header;
+  xp1 = &xp1[strlen ("<?xpacket begin")];
+  while (*xp1 != '>' && *xp1 != '<' && xp1 < xpe)
+    xp1++;
+  if (*xp1 != '>')
+    goto missing_header;
+
+  max_ft_len = 1 + strlen ("<?xpacket end=\".\"?>");
+  if (len < max_ft_len)
+    goto missing_footer;
+
+  GST_DEBUG ("checking footer: [%s]", &xps[len - max_ft_len]);
+  xp2 = g_strstr_len (&xps[len - max_ft_len], max_ft_len, "<?xpacket ");
+  if (!xp2)
+    goto missing_footer;
+
+  GST_INFO ("xmp header okay");
+
+  /* skip > and text until first xml-node */
+  xp1++;
+  while (*xp1 != '<' && xp1 < xpe)
+    xp1++;
+
+  /* no tag can be longer that the whole buffer */
+  part = g_malloc (xp2 - xp1);
+  list = gst_tag_list_new ();
+
+  /* parse data into a list of nodes */
+  /* data is between xp1..xp2 */
+  in_tag = TRUE;
+  ns = ne = xp1;
+  pp = part;
+  while (ne < xp2) {
+    if (in_tag) {
+      ne++;
+      while (ne < xp2 && *ne != '>' && *ne != '<') {
+        if (*ne == '\n' || *ne == '\t' || *ne == ' ') {
+          while (ne < xp2 && (*ne == '\n' || *ne == '\t' || *ne == ' '))
+            ne++;
+          *pp++ = ' ';
+        } else {
+          *pp++ = *ne++;
+        }
+      }
+      *pp = '\0';
+      if (*ne != '>')
+        goto broken_xml;
+      /* create node */
+      /* {XML, ns, ne-ns} */
+      if (ns[0] != '/') {
+        gchar *as = strchr (part, ' ');
+        /* only log start nodes */
+        GST_INFO ("xml: %s", part);
+
+        if (as) {
+          gchar *ae, *d;
+
+          /* skip ' ' and scan the attributes */
+          as++;
+          d = ae = as;
+
+          /* split attr=value pairs */
+          while (*ae != '\0') {
+            if (*ae == '=') {
+              /* attr/value delimmiter */
+              d = ae;
+            } else if (*ae == '"') {
+              /* scan values */
+              gchar *v;
+
+              ae++;
+              while (*ae != '\0' && *ae != '"')
+                ae++;
+
+              *d = *ae = '\0';
+              v = &d[2];
+              GST_INFO ("   : [%s][%s]", as, v);
+              if (!strncmp (as, "xmlns:", 6)) {
+                i = 0;
+                /* we need to rewrite known namespaces to what we use in
+                 * tag_matches */
+                while (ns_match[i].ns_prefix) {
+                  if (!strcmp (ns_match[i].ns_uri, v))
+                    break;
+                  i++;
+                }
+                if (ns_match[i].ns_prefix) {
+                  if (strcmp (ns_map[i].original_ns, &as[6])) {
+                    ns_map[i].gstreamer_ns = g_strdup (&as[6]);
+                  }
+                }
+              } else {
+                XmpTag *xmp_tag = NULL;
+                /* FIXME: eventualy rewrite ns
+                 * find ':'
+                 * check if ns before ':' is in ns_map and ns_map[i].gstreamer_ns!=NULL
+                 * do 2 stage filter in tag_matches
+                 */
+                if (context_tag) {
+                  GSList *iter;
+
+                  for (iter = context_tag->children; iter;
+                      iter = g_slist_next (iter)) {
+                    XmpTag *child = iter->data;
+
+                    GST_DEBUG ("Looking at child tag %s : %s", child->tag_name,
+                        as);
+                    if (strcmp (child->tag_name, as) == 0) {
+                      xmp_tag = child;
+                      break;
+                    }
+                  }
+
+                } else {
+                  GST_LOG ("Looking for tag: %s", as);
+                  _gst_xmp_tag_get_mapping_reverse (as, &xmp_tag);
+                }
+                if (xmp_tag) {
+                  PendingXmpTag *ptag;
+
+                  GST_DEBUG ("Found xmp tag: %s -> %s", xmp_tag->tag_name,
+                      xmp_tag->gst_tag);
+
+                  /* we shouldn't find a xmp structure here */
+                  g_assert (xmp_tag->gst_tag != NULL);
+
+                  ptag = g_slice_new (PendingXmpTag);
+                  ptag->xmp_tag = xmp_tag;
+                  ptag->str = g_strdup (v);
+
+                  pending_tags = g_slist_append (pending_tags, ptag);
+                }
+              }
+              /* restore chars overwritten by '\0' */
+              *d = '=';
+              *ae = '"';
+            } else if (*ae == '\0' || *ae == ' ') {
+              /* end of attr/value pair */
+              as = &ae[1];
+            }
+            /* to next char if not eos */
+            if (*ae != '\0')
+              ae++;
+          }
+        } else {
+          /*
+             <dc:type><rdf:Bag><rdf:li>Image</rdf:li></rdf:Bag></dc:type>
+             <dc:creator><rdf:Seq><rdf:li/></rdf:Seq></dc:creator>
+           */
+          /* FIXME: eventualy rewrite ns */
+
+          /* skip rdf tags for now */
+          if (strncmp (part, "rdf:", 4)) {
+            /* if we're inside some struct, we look only on its children */
+            if (context_tag) {
+              GSList *iter;
+
+              /* check if this is the closing of the context */
+              if (part[0] == '/'
+                  && strcmp (part + 1, context_tag->tag_name) == 0) {
+                GST_DEBUG ("Closing context tag %s", part);
+                context_tag = NULL;
+              } else {
+
+                for (iter = context_tag->children; iter;
+                    iter = g_slist_next (iter)) {
+                  XmpTag *child = iter->data;
+
+                  GST_DEBUG ("Looking at child tag %s : %s", child->tag_name,
+                      part);
+                  if (strcmp (child->tag_name, part) == 0) {
+                    last_xmp_tag = child;
+                    break;
+                  }
+                }
+              }
+
+            } else {
+              GST_LOG ("Looking for tag: %s", part);
+              _gst_xmp_tag_get_mapping_reverse (part, &last_xmp_tag);
+              if (last_xmp_tag && last_xmp_tag->type == GstXmpTagTypeStruct) {
+                context_tag = last_xmp_tag;
+                last_xmp_tag = NULL;
+              }
+            }
+          }
+        }
+      }
+      GST_LOG ("Next cycle");
+      /* next cycle */
+      ne++;
+      if (ne < xp2) {
+        if (*ne != '<')
+          in_tag = FALSE;
+        ns = ne;
+        pp = part;
+      }
+    } else {
+      while (ne < xp2 && *ne != '<') {
+        *pp++ = *ne;
+        ne++;
+      }
+      *pp = '\0';
+      /* create node */
+      /* {TXT, ns, (ne-ns)-1} */
+      if (ns[0] != '\n' && &ns[1] <= ne) {
+        /* only log non-newline nodes, we still have to parse them */
+        GST_INFO ("txt: %s", part);
+        if (last_xmp_tag) {
+          PendingXmpTag *ptag;
+
+          GST_DEBUG ("Found tag %s -> %s", last_xmp_tag->tag_name,
+              last_xmp_tag->gst_tag);
+
+          if (last_xmp_tag->type == GstXmpTagTypeStruct) {
+            g_assert (context_tag == NULL);     /* we can't handle struct nesting currently */
+
+            context_tag = last_xmp_tag;
+          } else {
+            ptag = g_slice_new (PendingXmpTag);
+            ptag->xmp_tag = last_xmp_tag;
+            ptag->str = g_strdup (part);
+
+            pending_tags = g_slist_append (pending_tags, ptag);
+          }
+        }
+      }
+      /* next cycle */
+      in_tag = TRUE;
+      ns = ne;
+      pp = part;
+    }
+  }
+
+  while (pending_tags) {
+    PendingXmpTag *ptag = (PendingXmpTag *) pending_tags->data;
+
+    pending_tags = g_slist_delete_link (pending_tags, pending_tags);
+
+    read_one_tag (list, ptag->xmp_tag, ptag->str, &pending_tags);
+
+    g_free (ptag->str);
+    g_slice_free (PendingXmpTag, ptag);
+  }
+
+  GST_INFO ("xmp packet parsed, %d entries",
+      gst_structure_n_fields ((GstStructure *) list));
+
+  /* free resources */
+  i = 0;
+  while (ns_map[i].original_ns) {
+    g_free (ns_map[i].gstreamer_ns);
+    i++;
+  }
+  g_free (part);
+
+  gst_buffer_unmap (buffer, xps, len);
+
+  return list;
+
+  /* Errors */
+missing_header:
+  GST_WARNING ("malformed xmp packet header");
+  return NULL;
+missing_footer:
+  GST_WARNING ("malformed xmp packet footer");
+  return NULL;
+broken_xml:
+  GST_WARNING ("malformed xml tag: %s", part);
+  return NULL;
+}
+
+
+/* formatting */
+
+static void
+string_open_tag (GString * string, const char *tag)
+{
+  g_string_append_c (string, '<');
+  g_string_append (string, tag);
+  g_string_append_c (string, '>');
+}
+
+static void
+string_close_tag (GString * string, const char *tag)
+{
+  g_string_append (string, "</");
+  g_string_append (string, tag);
+  g_string_append (string, ">\n");
+}
+
+static char *
+gst_value_serialize_xmp (const GValue * value)
+{
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_STRING:
+      return g_markup_escape_text (g_value_get_string (value), -1);
+    case G_TYPE_INT:
+      return g_strdup_printf ("%d", g_value_get_int (value));
+    case G_TYPE_UINT:
+      return g_strdup_printf ("%u", g_value_get_uint (value));
+    case G_TYPE_DOUBLE:
+      return double_to_fraction_string (g_value_get_double (value));
+    default:
+      break;
+  }
+  /* put non-switchable types here */
+  if (G_VALUE_TYPE (value) == GST_TYPE_DATE) {
+    const GDate *date = gst_value_get_date (value);
+
+    return g_strdup_printf ("%04d-%02d-%02d",
+        (gint) g_date_get_year (date), (gint) g_date_get_month (date),
+        (gint) g_date_get_day (date));
+  } else if (G_VALUE_TYPE (value) == GST_TYPE_DATE_TIME) {
+    gint year, month, day, hour, min, sec, microsec;
+    gfloat gmt_offset = 0;
+    gint gmt_offset_hour, gmt_offset_min;
+    GstDateTime *datetime = (GstDateTime *) g_value_get_boxed (value);
+
+    year = gst_date_time_get_year (datetime);
+    month = gst_date_time_get_month (datetime);
+    day = gst_date_time_get_day (datetime);
+    hour = gst_date_time_get_hour (datetime);
+    min = gst_date_time_get_minute (datetime);
+    sec = gst_date_time_get_second (datetime);
+    microsec = gst_date_time_get_microsecond (datetime);
+    gmt_offset = gst_date_time_get_time_zone_offset (datetime);
+    if (gmt_offset == 0) {
+      /* UTC */
+      return g_strdup_printf ("%04d-%02d-%02dT%02d:%02d:%02d.%06dZ",
+          year, month, day, hour, min, sec, microsec);
+    } else {
+      gmt_offset_hour = ABS (gmt_offset);
+      gmt_offset_min = (ABS (gmt_offset) - gmt_offset_hour) * 60;
+
+      return g_strdup_printf ("%04d-%02d-%02dT%02d:%02d:%02d.%06d%c%02d:%02d",
+          year, month, day, hour, min, sec, microsec,
+          gmt_offset >= 0 ? '+' : '-', gmt_offset_hour, gmt_offset_min);
+    }
+  } else {
+    return NULL;
+  }
+}
+
+static void
+write_one_tag (const GstTagList * list, XmpTag * xmp_tag, gpointer user_data)
+{
+  guint i = 0, ct;
+  XmpSerializationData *serialization_data = user_data;
+  GString *data = serialization_data->data;
+  char *s;
+
+  /* struct type handled differently */
+  if (xmp_tag->type == GstXmpTagTypeStruct ||
+      xmp_tag->type == GstXmpTagTypeCompound) {
+    GSList *iter;
+    gboolean use_it = FALSE;
+
+    /* check if any of the inner tags are present on the taglist */
+    for (iter = xmp_tag->children; iter && !use_it; iter = g_slist_next (iter)) {
+      XmpTag *child_tag = iter->data;
+
+      if (gst_tag_list_get_value_index (list, child_tag->gst_tag, 0) != NULL) {
+        use_it = TRUE;
+        break;
+      }
+    }
+
+    if (use_it) {
+      if (xmp_tag->tag_name)
+        string_open_tag (data, xmp_tag->tag_name);
+
+      if (xmp_tag->supertype) {
+        string_open_tag (data, xmp_tag_type_get_name (xmp_tag->supertype));
+        if (xmp_tag->parse_type) {
+          g_string_append (data, "<rdf:li rdf:parseType=\"");
+          g_string_append (data, xmp_tag->parse_type);
+          g_string_append_c (data, '"');
+          g_string_append_c (data, '>');
+        } else {
+          string_open_tag (data, "rdf:li");
+        }
+      }
+
+      /* now write it */
+      for (iter = xmp_tag->children; iter; iter = g_slist_next (iter)) {
+        write_one_tag (list, iter->data, user_data);
+      }
+
+      if (xmp_tag->supertype) {
+        string_close_tag (data, "rdf:li");
+        string_close_tag (data, xmp_tag_type_get_name (xmp_tag->supertype));
+      }
+
+      if (xmp_tag->tag_name)
+        string_close_tag (data, xmp_tag->tag_name);
+    }
+    return;
+  }
+
+  /* at this point we must have a gst_tag */
+  g_assert (xmp_tag->gst_tag);
+  if (gst_tag_list_get_value_index (list, xmp_tag->gst_tag, 0) == NULL)
+    return;
+
+  ct = gst_tag_list_get_tag_size (list, xmp_tag->gst_tag);
+  string_open_tag (data, xmp_tag->tag_name);
+
+  /* fast path for single valued tag */
+  if (ct == 1 || xmp_tag->type == GstXmpTagTypeSimple) {
+    if (xmp_tag->serialize) {
+      s = xmp_tag->serialize (gst_tag_list_get_value_index (list,
+              xmp_tag->gst_tag, 0));
+    } else {
+      s = gst_value_serialize_xmp (gst_tag_list_get_value_index (list,
+              xmp_tag->gst_tag, 0));
+    }
+    if (s) {
+      g_string_append (data, s);
+      g_free (s);
+    } else {
+      GST_WARNING ("unhandled type for %s to xmp", xmp_tag->gst_tag);
+    }
+  } else {
+    const gchar *typename;
+
+    typename = xmp_tag_type_get_name (xmp_tag->type);
+
+    string_open_tag (data, typename);
+    for (i = 0; i < ct; i++) {
+      GST_DEBUG ("mapping %s[%u/%u] to xmp", xmp_tag->gst_tag, i, ct);
+      if (xmp_tag->serialize) {
+        s = xmp_tag->serialize (gst_tag_list_get_value_index (list,
+                xmp_tag->gst_tag, i));
+      } else {
+        s = gst_value_serialize_xmp (gst_tag_list_get_value_index (list,
+                xmp_tag->gst_tag, i));
+      }
+      if (s) {
+        string_open_tag (data, "rdf:li");
+        g_string_append (data, s);
+        string_close_tag (data, "rdf:li");
+        g_free (s);
+      } else {
+        GST_WARNING ("unhandled type for %s to xmp", xmp_tag->gst_tag);
+      }
+    }
+    string_close_tag (data, typename);
+  }
+
+  string_close_tag (data, xmp_tag->tag_name);
+}
+
+/**
+ * gst_tag_list_to_xmp_buffer_full:
+ * @list: tags
+ * @read_only: does the container forbid inplace editing
+ * @schemas: %NULL terminated array of schemas to be used on serialization
+ *
+ * Formats a taglist as a xmp packet using only the selected
+ * schemas. An empty list (%NULL) means that all schemas should
+ * be used
+ *
+ * Returns: new buffer or %NULL, unref the buffer when done
+ *
+ * Since: 0.10.33
+ */
+GstBuffer *
+gst_tag_list_to_xmp_buffer_full (const GstTagList * list, gboolean read_only,
+    const gchar ** schemas)
+{
+  GstBuffer *buffer = NULL;
+  XmpSerializationData serialization_data;
+  GString *data;
+  guint i;
+  gsize bsize;
+  gpointer bdata;
+
+  serialization_data.data = g_string_sized_new (4096);
+  serialization_data.schemas = schemas;
+  data = serialization_data.data;
+
+  xmp_tags_initialize ();
+
+  g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL);
+
+  /* xmp header */
+  g_string_append (data,
+      "<?xpacket begin=\"\xEF\xBB\xBF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n");
+  g_string_append (data,
+      "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"GStreamer\">\n");
+  g_string_append (data,
+      "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"");
+  i = 0;
+  while (ns_match[i].ns_prefix) {
+    if (xmp_serialization_data_use_schema (&serialization_data,
+            ns_match[i].ns_prefix)) {
+      g_string_append_printf (data, " xmlns:%s=\"%s\"",
+          ns_match[i].ns_prefix, ns_match[i].ns_uri);
+      if (ns_match[i].extra_ns) {
+        g_string_append_printf (data, " %s", ns_match[i].extra_ns);
+      }
+    }
+    i++;
+  }
+  g_string_append (data, ">\n");
+  g_string_append (data, "<rdf:Description rdf:about=\"\">\n");
+
+  /* iterate the schemas */
+  if (schemas == NULL) {
+    /* use all schemas */
+    schemas = gst_tag_xmp_list_schemas ();
+  }
+  for (i = 0; schemas[i] != NULL; i++) {
+    GstXmpSchema *schema = _gst_xmp_get_schema (schemas[i]);
+    GHashTableIter iter;
+    gpointer key, value;
+
+    if (schema == NULL)
+      continue;
+
+    /* Iterate over the hashtable */
+    g_hash_table_iter_init (&iter, schema);
+    while (g_hash_table_iter_next (&iter, &key, &value)) {
+      write_one_tag (list, value, (gpointer) & serialization_data);
+    }
+  }
+
+  /* xmp footer */
+  g_string_append (data, "</rdf:Description>\n");
+  g_string_append (data, "</rdf:RDF>\n");
+  g_string_append (data, "</x:xmpmeta>\n");
+
+  if (!read_only) {
+    /* the xmp spec recommand to add 2-4KB padding for in-place editable xmp */
+    guint i;
+
+    for (i = 0; i < 32; i++) {
+      g_string_append (data, "                " "                "
+          "                " "                " "\n");
+    }
+  }
+  g_string_append_printf (data, "<?xpacket end=\"%c\"?>",
+      (read_only ? 'r' : 'w'));
+
+  bsize = data->len;
+  bdata = g_string_free (data, FALSE);
+
+  buffer = gst_buffer_new ();
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (0, bdata, g_free, bsize, 0, bsize));
+
+  return buffer;
+}
+
+/**
+ * gst_tag_list_to_xmp_buffer:
+ * @list: tags
+ * @read_only: does the container forbid inplace editing
+ *
+ * Formats a taglist as a xmp packet.
+ *
+ * Returns: new buffer or %NULL, unref the buffer when done
+ *
+ * Since: 0.10.29
+ */
+GstBuffer *
+gst_tag_list_to_xmp_buffer (const GstTagList * list, gboolean read_only)
+{
+  return gst_tag_list_to_xmp_buffer_full (list, read_only, NULL);
+}
+
+#undef gst_xmp_schema_lookup
+#undef gst_xmp_schema_insert
diff --git a/gst-libs/gst/tag/id3v2.c b/gst-libs/gst/tag/id3v2.c
new file mode 100644
index 0000000..f1f2e4a
--- /dev/null
+++ b/gst-libs/gst/tag/id3v2.c
@@ -0,0 +1,618 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/* Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright 2002,2003 Scott Wheeler <wheeler@kde.org> (portions from taglib)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/tag/tag.h>
+
+#include "id3v2.h"
+
+#define HANDLE_INVALID_SYNCSAFE
+
+static gboolean id3v2_frames_to_tag_list (ID3TagsWorking * work, guint size);
+
+#ifndef GST_DISABLE_GST_DEBUG
+
+#define GST_CAT_DEFAULT id3v2_ensure_debug_category()
+
+GstDebugCategory *
+id3v2_ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat;
+
+    cat = (gsize) _gst_debug_category_new ("id3v2", 0, "ID3v2 tag parsing");
+
+    g_once_init_leave (&cat_gonce, cat);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+
+#endif /* GST_DISABLE_GST_DEBUG */
+
+guint
+id3v2_read_synch_uint (const guint8 * data, guint size)
+{
+  gint i;
+  guint result = 0;
+  gint invalid = 0;
+
+  g_assert (size <= 4);
+
+  size--;
+  for (i = 0; i <= size; i++) {
+    invalid |= data[i] & 0x80;
+    result |= (data[i] & 0x7f) << ((size - i) * 7);
+  }
+
+#ifdef HANDLE_INVALID_SYNCSAFE
+  if (invalid) {
+    GST_WARNING ("Invalid synch-safe integer in ID3v2 frame "
+        "- using the actual value instead");
+    result = 0;
+    for (i = 0; i <= size; i++) {
+      result |= data[i] << ((size - i) * 8);
+    }
+  }
+#endif
+  return result;
+}
+
+/**
+ * gst_tag_get_id3v2_tag_size:
+ * @buffer: buffer holding ID3v2 tag (or at least the start of one)
+ *
+ * Determines size of an ID3v2 tag on buffer containing at least ID3v2 header,
+ * i.e. at least #GST_TAG_ID3V2_HEADER_SIZE (10) bytes;
+ *
+ * Returns: Size of tag, or 0 if header is invalid or too small.
+ *
+ * Since: 0.10.36
+ */
+guint
+gst_tag_get_id3v2_tag_size (GstBuffer * buffer)
+{
+  guint8 *data, flags;
+  gsize size;
+  guint result = 0;
+
+  g_return_val_if_fail (buffer != NULL, 0);
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  if (size < ID3V2_HDR_SIZE)
+    goto too_small;
+
+  /* Check for 'ID3' string at start of buffer */
+  if (data[0] != 'I' || data[1] != 'D' || data[2] != '3')
+    goto no_tag;
+
+  /* Read the flags */
+  flags = data[5];
+
+  /* Read the size from the header */
+  result = id3v2_read_synch_uint (data + 6, 4);
+  if (result == 0)
+    goto empty;
+
+  result += ID3V2_HDR_SIZE;
+
+  /* Expand the read size to include a footer if there is one */
+  if ((flags & ID3V2_HDR_FLAG_FOOTER))
+    result += 10;
+
+  GST_DEBUG ("ID3v2 tag, size: %u bytes", result);
+
+done:
+  gst_buffer_unmap (buffer, data, size);
+
+  return result;
+
+too_small:
+  {
+    GST_DEBUG ("size too small");
+    goto done;
+  }
+no_tag:
+  {
+    GST_DEBUG ("No ID3v2 tag in data");
+    goto done;
+  }
+empty:
+  {
+    GST_DEBUG ("Empty tag size");
+    result = ID3V2_HDR_SIZE;
+    goto done;
+  }
+}
+
+guint8 *
+id3v2_ununsync_data (const guint8 * unsync_data, guint32 * size)
+{
+  const guint8 *end;
+  guint8 *out, *uu;
+  guint out_size;
+
+  uu = out = g_malloc (*size);
+
+  for (end = unsync_data + *size; unsync_data < end - 1; ++unsync_data, ++uu) {
+    *uu = *unsync_data;
+    if (G_UNLIKELY (*unsync_data == 0xff && *(unsync_data + 1) == 0x00))
+      ++unsync_data;
+  }
+
+  /* take care of last byte (if last two bytes weren't 0xff 0x00) */
+  if (unsync_data < end) {
+    *uu = *unsync_data;
+    ++uu;
+  }
+
+  out_size = uu - out;
+  GST_DEBUG ("size after un-unsyncing: %u (before: %u)", out_size, *size);
+
+  *size = out_size;
+  return out;
+}
+
+/**
+ * gst_tag_list_from_id3v2_tag:
+ * @buffer: buffer to convert
+ *
+ * Creates a new tag list that contains the information parsed out of a
+ * ID3 tag.
+ *
+ * Returns: A new #GstTagList with all tags that could be extracted from the
+ *          given vorbiscomment buffer or NULL on error.
+ *
+ * Since: 0.10.36
+ */
+GstTagList *
+gst_tag_list_from_id3v2_tag (GstBuffer * buffer)
+{
+  guint8 *data, *uu_data = NULL;
+  guint read_size;
+  gsize size;
+  ID3TagsWorking work;
+  guint8 flags;
+  guint16 version;
+
+  read_size = gst_tag_get_id3v2_tag_size (buffer);
+
+  /* Ignore tag if it has no frames attached, but skip the header then */
+  if (read_size < ID3V2_HDR_SIZE)
+    return NULL;
+
+  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+
+  /* Read the version */
+  version = GST_READ_UINT16_BE (data + 3);
+
+  /* Read the flags */
+  flags = data[5];
+
+  /* Validate the version. At the moment, we only support up to 2.4.0 */
+  if (ID3V2_VER_MAJOR (version) > 4 || ID3V2_VER_MINOR (version) > 0)
+    goto wrong_version;
+
+  GST_DEBUG ("ID3v2 header flags: %s %s %s %s",
+      (flags & ID3V2_HDR_FLAG_UNSYNC) ? "UNSYNC" : "",
+      (flags & ID3V2_HDR_FLAG_EXTHDR) ? "EXTENDED_HEADER" : "",
+      (flags & ID3V2_HDR_FLAG_EXPERIMENTAL) ? "EXPERIMENTAL" : "",
+      (flags & ID3V2_HDR_FLAG_FOOTER) ? "FOOTER" : "");
+
+  /* This shouldn't really happen! Caller should have checked first */
+  if (size < read_size)
+    goto not_enough_data;
+
+  GST_DEBUG ("Reading ID3v2 tag with revision 2.%d.%d of size %u", version >> 8,
+      version & 0xff, read_size);
+
+  GST_MEMDUMP ("ID3v2 tag", data, read_size);
+
+  memset (&work, 0, sizeof (ID3TagsWorking));
+  work.buffer = buffer;
+  work.hdr.version = version;
+  work.hdr.size = read_size;
+  work.hdr.flags = flags;
+  work.hdr.frame_data = data + ID3V2_HDR_SIZE;
+  if (flags & ID3V2_HDR_FLAG_FOOTER)
+    work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE - 10;
+  else
+    work.hdr.frame_data_size = read_size - ID3V2_HDR_SIZE;
+
+  /* in v2.3 the frame sizes are not syncsafe, so the entire tag had to be
+   * unsynced. In v2.4 the frame sizes are syncsafe so it's just the frame
+   * data that needs un-unsyncing, but not the frame headers. */
+  if ((flags & ID3V2_HDR_FLAG_UNSYNC) != 0 && ID3V2_VER_MAJOR (version) <= 3) {
+    GST_DEBUG ("Un-unsyncing entire tag");
+    uu_data = id3v2_ununsync_data (work.hdr.frame_data,
+        &work.hdr.frame_data_size);
+    work.hdr.frame_data = uu_data;
+    GST_MEMDUMP ("ID3v2 tag (un-unsyced)", uu_data, work.hdr.frame_data_size);
+  }
+
+  id3v2_frames_to_tag_list (&work, work.hdr.frame_data_size);
+
+  g_free (uu_data);
+
+  gst_buffer_unmap (buffer, data, size);
+
+  return work.tags;
+
+  /* ERRORS */
+wrong_version:
+  {
+    GST_WARNING ("ID3v2 tag is from revision 2.%d.%d, "
+        "but decoder only supports 2.%d.%d. Ignoring as per spec.",
+        version >> 8, version & 0xff, ID3V2_VERSION >> 8, ID3V2_VERSION & 0xff);
+    gst_buffer_unmap (buffer, data, size);
+    return NULL;
+  }
+not_enough_data:
+  {
+    GST_DEBUG
+        ("Found ID3v2 tag with revision 2.%d.%d - need %u more bytes to read",
+        version >> 8, version & 0xff, (guint) (read_size - size));
+    gst_buffer_unmap (buffer, data, size);
+    return NULL;
+  }
+}
+
+static guint
+id3v2_frame_hdr_size (guint id3v2ver)
+{
+  /* ID3v2 < 2.3.0 only had 6 byte header */
+  switch (ID3V2_VER_MAJOR (id3v2ver)) {
+    case 0:
+    case 1:
+    case 2:
+      return 6;
+    case 3:
+    case 4:
+    default:
+      return 10;
+  }
+}
+
+static const gchar obsolete_frame_ids[][5] = {
+  {"CRM"}, {"EQU"}, {"LNK"}, {"RVA"}, {"TIM"}, {"TSI"}, /* From 2.2 */
+  {"EQUA"}, {"RVAD"}, {"TIME"}, {"TRDA"}, {"TSIZ"}      /* From 2.3 */
+};
+
+static const struct ID3v2FrameIDConvert
+{
+  const gchar orig[5];
+  const gchar new[5];
+} frame_id_conversions[] = {
+  /* 2.3.x frames */
+  {
+  "TORY", "TDOR"}, {
+  "TYER", "TDRC"},
+      /* 2.2.x frames */
+  {
+  "BUF", "RBUF"}, {
+  "CNT", "PCNT"}, {
+  "COM", "COMM"}, {
+  "CRA", "AENC"}, {
+  "ETC", "ETCO"}, {
+  "GEO", "GEOB"}, {
+  "IPL", "TIPL"}, {
+  "MCI", "MCDI"}, {
+  "MLL", "MLLT"}, {
+  "PIC", "APIC"}, {
+  "POP", "POPM"}, {
+  "REV", "RVRB"}, {
+  "SLT", "SYLT"}, {
+  "STC", "SYTC"}, {
+  "TAL", "TALB"}, {
+  "TBP", "TBPM"}, {
+  "TCM", "TCOM"}, {
+  "TCO", "TCON"}, {
+  "TCR", "TCOP"}, {
+  "TDA", "TDAT"}, {             /* obsolete, but we need to parse it anyway */
+  "TDY", "TDLY"}, {
+  "TEN", "TENC"}, {
+  "TFT", "TFLT"}, {
+  "TKE", "TKEY"}, {
+  "TLA", "TLAN"}, {
+  "TLE", "TLEN"}, {
+  "TMT", "TMED"}, {
+  "TOA", "TOAL"}, {
+  "TOF", "TOFN"}, {
+  "TOL", "TOLY"}, {
+  "TOR", "TDOR"}, {
+  "TOT", "TOAL"}, {
+  "TP1", "TPE1"}, {
+  "TP2", "TPE2"}, {
+  "TP3", "TPE3"}, {
+  "TP4", "TPE4"}, {
+  "TPA", "TPOS"}, {
+  "TPB", "TPUB"}, {
+  "TRC", "TSRC"}, {
+  "TRD", "TDRC"}, {
+  "TRK", "TRCK"}, {
+  "TSS", "TSSE"}, {
+  "TT1", "TIT1"}, {
+  "TT2", "TIT2"}, {
+  "TT3", "TIT3"}, {
+  "TXT", "TOLY"}, {
+  "TXX", "TXXX"}, {
+  "TYE", "TDRC"}, {
+  "UFI", "UFID"}, {
+  "ULT", "USLT"}, {
+  "WAF", "WOAF"}, {
+  "WAR", "WOAR"}, {
+  "WAS", "WOAS"}, {
+  "WCM", "WCOM"}, {
+  "WCP", "WCOP"}, {
+  "WPB", "WPUB"}, {
+  "WXX", "WXXX"}
+};
+
+static gboolean
+convert_fid_to_v240 (gchar * frame_id)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (obsolete_frame_ids); ++i) {
+    if (strncmp (frame_id, obsolete_frame_ids[i], 5) == 0)
+      return TRUE;
+  }
+
+  for (i = 0; i < G_N_ELEMENTS (frame_id_conversions); ++i) {
+    if (strncmp (frame_id, frame_id_conversions[i].orig, 5) == 0) {
+      strcpy (frame_id, frame_id_conversions[i].new);
+      return FALSE;
+    }
+  }
+  return FALSE;
+}
+
+
+/* add unknown or unhandled ID3v2 frames to the taglist as binary blobs */
+static void
+id3v2_add_id3v2_frame_blob_to_taglist (ID3TagsWorking * work, guint size)
+{
+  GstBuffer *blob;
+  guint8 *frame_data;
+#if 0
+  GstCaps *caps;
+  gchar *media_type;
+#endif
+  guint frame_size, header_size;
+  guint i;
+
+  switch (ID3V2_VER_MAJOR (work->hdr.version)) {
+    case 1:
+    case 2:
+      header_size = 3 + 3;
+      break;
+    case 3:
+    case 4:
+      header_size = 4 + 4 + 2;
+      break;
+    default:
+      g_return_if_reached ();
+  }
+
+  frame_data = work->hdr.frame_data - header_size;
+  frame_size = size + header_size;
+
+  blob = gst_buffer_new_and_alloc (frame_size);
+  gst_buffer_fill (blob, 0, frame_data, frame_size);
+
+  /* Sanitize frame id */
+  for (i = 0; i < 4; i++) {
+    if (!g_ascii_isalnum (frame_data[i]))
+      frame_data[i] = '_';
+  }
+
+#if 0
+  media_type = g_strdup_printf ("application/x-gst-id3v2-%c%c%c%c-frame",
+      g_ascii_tolower (frame_data[0]), g_ascii_tolower (frame_data[1]),
+      g_ascii_tolower (frame_data[2]), g_ascii_tolower (frame_data[3]));
+  caps = gst_caps_new_simple (media_type, "version", G_TYPE_INT,
+      (gint) ID3V2_VER_MAJOR (work->hdr.version), NULL);
+  gst_buffer_set_caps (blob, caps);
+  gst_caps_unref (caps);
+  g_free (media_type);
+#endif
+
+  /* gst_util_dump_mem (GST_BUFFER_DATA (blob), GST_BUFFER_SIZE (blob)); */
+
+  gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+      GST_TAG_ID3V2_FRAME, blob, NULL);
+  gst_buffer_unref (blob);
+}
+
+static gboolean
+id3v2_frames_to_tag_list (ID3TagsWorking * work, guint size)
+{
+  guint frame_hdr_size;
+
+  /* Extended header if present */
+  if (work->hdr.flags & ID3V2_HDR_FLAG_EXTHDR) {
+    work->hdr.ext_hdr_size = id3v2_read_synch_uint (work->hdr.frame_data, 4);
+    if (work->hdr.ext_hdr_size < 6 ||
+        (work->hdr.ext_hdr_size) > work->hdr.frame_data_size) {
+      GST_DEBUG ("Invalid extended header. Broken tag");
+      return FALSE;
+    }
+    work->hdr.ext_flag_bytes = work->hdr.frame_data[4];
+    if (5 + work->hdr.ext_flag_bytes > work->hdr.frame_data_size) {
+      GST_DEBUG
+          ("Tag claims extended header, but doesn't have enough bytes. Broken tag");
+      return FALSE;
+    }
+
+    work->hdr.ext_flag_data = work->hdr.frame_data + 5;
+    work->hdr.frame_data += work->hdr.ext_hdr_size;
+    work->hdr.frame_data_size -= work->hdr.ext_hdr_size;
+  }
+
+  frame_hdr_size = id3v2_frame_hdr_size (work->hdr.version);
+  if (work->hdr.frame_data_size <= frame_hdr_size) {
+    GST_DEBUG ("Tag has no data frames. Broken tag");
+    return FALSE;               /* Must have at least one frame */
+  }
+
+  work->tags = gst_tag_list_new ();
+
+  while (work->hdr.frame_data_size > frame_hdr_size) {
+    guint frame_size = 0;
+    gchar frame_id[5] = "";
+    guint16 frame_flags = 0x0;
+    gboolean obsolete_id = FALSE;
+    gboolean read_synch_size = TRUE;
+    guint i;
+
+    /* Read the header */
+    switch (ID3V2_VER_MAJOR (work->hdr.version)) {
+      case 0:
+      case 1:
+      case 2:
+        frame_id[0] = work->hdr.frame_data[0];
+        frame_id[1] = work->hdr.frame_data[1];
+        frame_id[2] = work->hdr.frame_data[2];
+        frame_id[3] = 0;
+        frame_id[4] = 0;
+        obsolete_id = convert_fid_to_v240 (frame_id);
+
+        /* 3 byte non-synchsafe size */
+        frame_size = work->hdr.frame_data[3] << 16 |
+            work->hdr.frame_data[4] << 8 | work->hdr.frame_data[5];
+        frame_flags = 0;
+        break;
+      case 3:
+        read_synch_size = FALSE;        /* 2.3 frame size is not synch-safe */
+      case 4:
+      default:
+        frame_id[0] = work->hdr.frame_data[0];
+        frame_id[1] = work->hdr.frame_data[1];
+        frame_id[2] = work->hdr.frame_data[2];
+        frame_id[3] = work->hdr.frame_data[3];
+        frame_id[4] = 0;
+        if (read_synch_size)
+          frame_size = id3v2_read_synch_uint (work->hdr.frame_data + 4, 4);
+        else
+          frame_size = GST_READ_UINT32_BE (work->hdr.frame_data + 4);
+
+        frame_flags = GST_READ_UINT16_BE (work->hdr.frame_data + 8);
+
+        if (ID3V2_VER_MAJOR (work->hdr.version) == 3) {
+          frame_flags &= ID3V2_3_FRAME_FLAGS_MASK;
+          obsolete_id = convert_fid_to_v240 (frame_id);
+          if (obsolete_id)
+            GST_DEBUG ("Ignoring v2.3 frame %s", frame_id);
+        }
+        break;
+    }
+
+    work->hdr.frame_data += frame_hdr_size;
+    work->hdr.frame_data_size -= frame_hdr_size;
+
+    if (frame_size > work->hdr.frame_data_size || strcmp (frame_id, "") == 0)
+      break;                    /* No more frames to read */
+
+    /* Sanitize frame id */
+    switch (ID3V2_VER_MAJOR (work->hdr.version)) {
+      case 0:
+      case 1:
+      case 2:
+        for (i = 0; i < 3; i++) {
+          if (!g_ascii_isalnum (frame_id[i]))
+            frame_id[i] = '_';
+        }
+        break;
+      default:
+        for (i = 0; i < 4; i++) {
+          if (!g_ascii_isalnum (frame_id[i]))
+            frame_id[i] = '_';
+        }
+    }
+#if 1
+#if 0
+    GST_LOG
+        ("Frame @ %ld (0x%02lx) id %s size %u, next=%ld (0x%02lx) obsolete=%d",
+        (glong) (work->hdr.frame_data - start),
+        (glong) (work->hdr.frame_data - start), frame_id, frame_size,
+        (glong) (work->hdr.frame_data + frame_hdr_size + frame_size - start),
+        (glong) (work->hdr.frame_data + frame_hdr_size + frame_size - start),
+        obsolete_id);
+#endif
+#define flag_string(flag,str) \
+        ((frame_flags & (flag)) ? (str) : "")
+    GST_LOG ("Frame header flags: 0x%04x %s %s %s %s %s %s %s", frame_flags,
+        flag_string (ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE, "ALTER_PRESERVE"),
+        flag_string (ID3V2_FRAME_STATUS_READONLY, "READONLY"),
+        flag_string (ID3V2_FRAME_FORMAT_GROUPING_ID, "GROUPING_ID"),
+        flag_string (ID3V2_FRAME_FORMAT_COMPRESSION, "COMPRESSION"),
+        flag_string (ID3V2_FRAME_FORMAT_ENCRYPTION, "ENCRYPTION"),
+        flag_string (ID3V2_FRAME_FORMAT_UNSYNCHRONISATION, "UNSYNC"),
+        flag_string (ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR, "LENGTH_IND"));
+#undef flag_str
+#endif
+
+    if (!obsolete_id) {
+      /* Now, read, decompress etc the contents of the frame
+       * into a TagList entry */
+      work->cur_frame_size = frame_size;
+      work->frame_id = frame_id;
+      work->frame_flags = frame_flags;
+
+      if (id3v2_parse_frame (work)) {
+        GST_LOG ("Extracted frame with id %s", frame_id);
+      } else {
+        GST_LOG ("Failed to extract frame with id %s", frame_id);
+        id3v2_add_id3v2_frame_blob_to_taglist (work, frame_size);
+      }
+    }
+    work->hdr.frame_data += frame_size;
+    work->hdr.frame_data_size -= frame_size;
+  }
+
+  if (gst_structure_n_fields (GST_STRUCTURE (work->tags)) == 0) {
+    GST_DEBUG ("Could not extract any frames from tag. Broken or empty tag");
+    gst_tag_list_free (work->tags);
+    work->tags = NULL;
+    return FALSE;
+  }
+
+  /* Set day/month now if they were in a separate (obsolete) TDAT frame */
+  if (work->pending_day != 0 && work->pending_month != 0) {
+    GDate *date = NULL;
+
+    if (gst_tag_list_get_date (work->tags, GST_TAG_DATE, &date)) {
+      g_date_set_day (date, work->pending_day);
+      g_date_set_month (date, work->pending_month);
+      gst_tag_list_add (work->tags, GST_TAG_MERGE_REPLACE, GST_TAG_DATE,
+          date, NULL);
+      g_date_free (date);
+    }
+  }
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/tag/id3v2.h b/gst-libs/gst/tag/id3v2.h
new file mode 100644
index 0000000..fd21bb6
--- /dev/null
+++ b/gst-libs/gst/tag/id3v2.h
@@ -0,0 +1,120 @@
+/* Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ID3TAGS_H__
+#define __ID3TAGS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define ID3V2_MARK_SIZE 3
+#define ID3V2_HDR_SIZE GST_TAG_ID3V2_HEADER_SIZE
+
+/* From id3v2.c */
+guint id3v2_read_synch_uint (const guint8 * data, guint size);
+
+/* Things shared by id3tags.c and id3v2frames.c */
+#define ID3V2_VERSION 0x0400
+#define ID3V2_VER_MAJOR(v) ((v) >> 8)
+#define ID3V2_VER_MINOR(v) ((v) & 0xff)
+   
+typedef struct {
+  guint16 version;
+  guint8 flags;
+  guint32 size;
+    
+  guint8 *frame_data;
+  guint32 frame_data_size;
+
+  guint32 ext_hdr_size;
+  guint8 ext_flag_bytes;
+  guint8 *ext_flag_data;  
+} ID3v2Header;
+
+typedef struct {
+  ID3v2Header hdr;
+  
+  GstBuffer *buffer;
+  GstTagList *tags;
+
+  /* Current frame decoding */
+  guint cur_frame_size;
+  gchar *frame_id;
+  guint16 frame_flags;
+  
+  guint8 *parse_data;
+  guint parse_size;
+  
+  /* To collect day/month from obsolete TDAT frame if it exists */
+  guint pending_month;
+  guint pending_day;
+} ID3TagsWorking;
+
+enum {
+  ID3V2_HDR_FLAG_UNSYNC       = 0x80,
+  ID3V2_HDR_FLAG_EXTHDR       = 0x40,
+  ID3V2_HDR_FLAG_EXPERIMENTAL = 0x20,
+  ID3V2_HDR_FLAG_FOOTER       = 0x10
+};
+
+enum {
+  ID3V2_EXT_FLAG_UPDATE     = 0x80,
+  ID3V2_EXT_FLAG_CRC        = 0x40,
+  ID3V2_EXT_FLAG_RESTRICTED = 0x20
+};
+
+enum {
+  ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE  = 0x4000,
+  ID3V2_FRAME_STATUS_FILE_ALTER_PRESERVE   = 0x2000,
+  ID3V2_FRAME_STATUS_READONLY              = 0x1000,
+  ID3V2_FRAME_FORMAT_GROUPING_ID           = 0x0040,
+  ID3V2_FRAME_FORMAT_COMPRESSION           = 0x0008,
+  ID3V2_FRAME_FORMAT_ENCRYPTION            = 0x0004,
+  ID3V2_FRAME_FORMAT_UNSYNCHRONISATION     = 0x0002,
+  ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR = 0x0001
+};
+
+#define ID3V2_3_FRAME_FLAGS_MASK              \
+  (ID3V2_FRAME_STATUS_FRAME_ALTER_PRESERVE |  \
+   ID3V2_FRAME_STATUS_FILE_ALTER_PRESERVE  |  \
+   ID3V2_FRAME_STATUS_READONLY |              \
+   ID3V2_FRAME_FORMAT_GROUPING_ID |           \
+   ID3V2_FRAME_FORMAT_COMPRESSION |           \
+   ID3V2_FRAME_FORMAT_ENCRYPTION)
+
+/* FIXME 0.11: remove 'private' bit from GST_TAG_ID3V2_FRAME */
+/**
+ * GST_TAG_ID3V2_FRAME:
+ *
+ * Contains a single unprocessed ID3v2 frame. (buffer)
+ *
+ * (Not public API for now)
+ */
+#define GST_TAG_ID3V2_FRAME                  "private-id3v2-frame"
+
+/* From id3v2frames.c */
+gboolean id3v2_parse_frame (ID3TagsWorking *work);
+
+guint8 * id3v2_ununsync_data (const guint8 * unsync_data, guint32 * size);
+
+GstDebugCategory * id3v2_ensure_debug_category (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c
new file mode 100644
index 0000000..78aa80e
--- /dev/null
+++ b/gst-libs/gst/tag/id3v2frames.c
@@ -0,0 +1,1168 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/* Copyright 2006-2008 Tim-Philipp Müller <tim centricular net>
+ * Copyright 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright 2002,2003 Scott Wheeler <wheeler@kde.org> (portions from taglib)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <gst/tag/tag.h>
+#include <gst/base/gsttypefindhelper.h>
+
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#endif
+
+#include "id3v2.h"
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT id3v2_ensure_debug_category()
+#endif
+
+static gboolean parse_comment_frame (ID3TagsWorking * work);
+static gchar *parse_url_link_frame (ID3TagsWorking * work,
+    const gchar ** tag_name);
+static GArray *parse_text_identification_frame (ID3TagsWorking * work);
+static gchar *parse_user_text_identification_frame (ID3TagsWorking * work,
+    const gchar ** tag_name);
+static gchar *parse_unique_file_identifier (ID3TagsWorking * work,
+    const gchar ** tag_name);
+static gboolean parse_relative_volume_adjustment_two (ID3TagsWorking * work);
+static void parse_obsolete_tdat_frame (ID3TagsWorking * work);
+static gboolean id3v2_tag_to_taglist (ID3TagsWorking * work,
+    const gchar * tag_name, const gchar * tag_str);
+/* Parse a single string into an array of gchar* */
+static void parse_split_strings (guint8 encoding, gchar * data, gint data_size,
+    GArray ** out_fields);
+static void free_tag_strings (GArray * fields);
+static gboolean
+id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
+    GArray * tag_fields);
+static gboolean parse_picture_frame (ID3TagsWorking * work);
+
+#define ID3V2_ENCODING_ISO8859 0x00
+#define ID3V2_ENCODING_UTF16   0x01
+#define ID3V2_ENCODING_UTF16BE 0x02
+#define ID3V2_ENCODING_UTF8    0x03
+
+gboolean
+id3v2_parse_frame (ID3TagsWorking * work)
+{
+  const gchar *tag_name;
+  gboolean result = FALSE;
+  gint i;
+  guint8 *frame_data = work->hdr.frame_data;
+  guint frame_data_size = work->cur_frame_size;
+  gchar *tag_str = NULL;
+  GArray *tag_fields = NULL;
+  guint8 *uu_data = NULL;
+
+#ifdef HAVE_ZLIB
+  guint8 *uncompressed_data = NULL;
+#endif
+
+  /* Check that the frame id is valid */
+  for (i = 0; i < 5 && work->frame_id[i] != '\0'; i++) {
+    if (!g_ascii_isalnum (work->frame_id[i])) {
+      GST_DEBUG ("Encountered invalid frame_id");
+      return FALSE;
+    }
+  }
+
+  /* Can't handle encrypted frames right now (in case we ever do, we'll have
+   * to do the decryption after the un-unsynchronisation and decompression,
+   * not here) */
+  if (work->frame_flags & ID3V2_FRAME_FORMAT_ENCRYPTION) {
+    GST_WARNING ("Encrypted frames are not supported");
+    return FALSE;
+  }
+
+  tag_name = gst_tag_from_id3_tag (work->frame_id);
+  if (tag_name == NULL &&
+      strncmp (work->frame_id, "RVA2", 4) != 0 &&
+      strncmp (work->frame_id, "TXXX", 4) != 0 &&
+      strncmp (work->frame_id, "TDAT", 4) != 0 &&
+      strncmp (work->frame_id, "UFID", 4) != 0) {
+    return FALSE;
+  }
+
+  if (work->frame_flags & (ID3V2_FRAME_FORMAT_COMPRESSION |
+          ID3V2_FRAME_FORMAT_DATA_LENGTH_INDICATOR)) {
+    if (work->hdr.frame_data_size <= 4)
+      return FALSE;
+    if (ID3V2_VER_MAJOR (work->hdr.version) == 3) {
+      work->parse_size = GST_READ_UINT32_BE (frame_data);
+    } else {
+      work->parse_size = id3v2_read_synch_uint (frame_data, 4);
+    }
+    frame_data += 4;
+    frame_data_size -= 4;
+    GST_LOG ("Un-unsynced data size %d (of %d)", work->parse_size,
+        frame_data_size);
+    if (work->parse_size > frame_data_size) {
+      GST_WARNING ("ID3v2 frame %s data has invalid size %d (>%d)",
+          work->frame_id, work->parse_size, frame_data_size);
+      return FALSE;
+    }
+  }
+
+  /* in v2.3 the frame sizes are not syncsafe, so the entire tag had to be
+   * unsynced. In v2.4 the frame sizes are syncsafe so it's just the frame
+   * data that needs un-unsyncing, but not the frame headers. */
+  if (ID3V2_VER_MAJOR (work->hdr.version) == 4) {
+    if ((work->hdr.flags & ID3V2_HDR_FLAG_UNSYNC) != 0 ||
+        ((work->frame_flags & ID3V2_FRAME_FORMAT_UNSYNCHRONISATION) != 0)) {
+      GST_DEBUG ("Un-unsyncing frame %s", work->frame_id);
+      uu_data = id3v2_ununsync_data (frame_data, &frame_data_size);
+      frame_data = uu_data;
+      GST_MEMDUMP ("ID3v2 frame (un-unsyced)", frame_data, frame_data_size);
+    }
+  }
+
+  work->parse_size = frame_data_size;
+
+  if (work->frame_flags & ID3V2_FRAME_FORMAT_COMPRESSION) {
+#ifdef HAVE_ZLIB
+    uLongf destSize = work->parse_size;
+    Bytef *dest, *src;
+
+    uncompressed_data = g_malloc (work->parse_size);
+
+    dest = (Bytef *) uncompressed_data;
+    src = (Bytef *) frame_data;
+
+    if (uncompress (dest, &destSize, src, frame_data_size) != Z_OK) {
+      g_free (uncompressed_data);
+      g_free (uu_data);
+      return FALSE;
+    }
+    if (destSize != work->parse_size) {
+      GST_WARNING
+          ("Decompressing ID3v2 frame %s did not produce expected size %d bytes (got %lu)",
+          tag_name, work->parse_size, destSize);
+      g_free (uncompressed_data);
+      g_free (uu_data);
+      return FALSE;
+    }
+    work->parse_data = uncompressed_data;
+#else
+    GST_WARNING ("Compressed ID3v2 tag frame could not be decompressed, because"
+        " libgsttag-" GST_MAJORMINOR " was compiled without zlib support");
+    g_free (uu_data);
+    return FALSE;
+#endif
+  } else {
+    work->parse_data = frame_data;
+  }
+
+  if (work->frame_id[0] == 'T') {
+    if (strcmp (work->frame_id, "TDAT") == 0) {
+      parse_obsolete_tdat_frame (work);
+      result = TRUE;
+    } else if (strcmp (work->frame_id, "TXXX") == 0) {
+      /* Handle user text frame */
+      tag_str = parse_user_text_identification_frame (work, &tag_name);
+    } else {
+      /* Text identification frame */
+      tag_fields = parse_text_identification_frame (work);
+    }
+  } else if (work->frame_id[0] == 'W' && strcmp (work->frame_id, "WXXX") != 0) {
+    /* URL link frame: ISO-8859-1 encoded, one frame per tag */
+    tag_str = parse_url_link_frame (work, &tag_name);
+  } else if (!strcmp (work->frame_id, "COMM")) {
+    /* Comment */
+    result = parse_comment_frame (work);
+  } else if (!strcmp (work->frame_id, "APIC")) {
+    /* Attached picture */
+    result = parse_picture_frame (work);
+  } else if (!strcmp (work->frame_id, "RVA2")) {
+    /* Relative volume */
+    result = parse_relative_volume_adjustment_two (work);
+  } else if (!strcmp (work->frame_id, "UFID")) {
+    /* Unique file identifier */
+    tag_str = parse_unique_file_identifier (work, &tag_name);
+  }
+#ifdef HAVE_ZLIB
+  if (work->frame_flags & ID3V2_FRAME_FORMAT_COMPRESSION) {
+    g_free (uncompressed_data);
+    uncompressed_data = NULL;
+    work->parse_data = frame_data;
+  }
+#endif
+
+  if (tag_str != NULL) {
+    /* g_print ("Tag %s value %s\n", tag_name, tag_str); */
+    result = id3v2_tag_to_taglist (work, tag_name, tag_str);
+    g_free (tag_str);
+  }
+  if (tag_fields != NULL) {
+    if (strcmp (work->frame_id, "TCON") == 0) {
+      /* Genre strings need special treatment */
+      result |= id3v2_genre_fields_to_taglist (work, tag_name, tag_fields);
+    } else {
+      gint t;
+
+      for (t = 0; t < tag_fields->len; t++) {
+        tag_str = g_array_index (tag_fields, gchar *, t);
+        if (tag_str != NULL && tag_str[0] != '\0')
+          result |= id3v2_tag_to_taglist (work, tag_name, tag_str);
+      }
+    }
+    free_tag_strings (tag_fields);
+  }
+
+  g_free (uu_data);
+
+  return result;
+}
+
+static gboolean
+parse_comment_frame (ID3TagsWorking * work)
+{
+  guint dummy;
+  guint8 encoding;
+  gchar language[4];
+  GArray *fields = NULL;
+  gchar *description, *text;
+
+  if (work->parse_size < 6)
+    return FALSE;
+
+  encoding = work->parse_data[0];
+  language[0] = g_ascii_tolower (work->parse_data[1]);
+  language[1] = g_ascii_tolower (work->parse_data[2]);
+  language[2] = g_ascii_tolower (work->parse_data[3]);
+  language[3] = '\0';
+
+  parse_split_strings (encoding, (gchar *) work->parse_data + 4,
+      work->parse_size - 4, &fields);
+
+  if (fields == NULL || fields->len < 2) {
+    GST_WARNING ("Failed to decode comment frame");
+    goto fail;
+  }
+  description = g_array_index (fields, gchar *, 0);
+  text = g_array_index (fields, gchar *, 1);
+
+  if (!g_utf8_validate (text, -1, NULL)) {
+    GST_WARNING ("Converted string is not valid utf-8");
+    goto fail;
+  }
+
+  /* skip our own dummy descriptions (from id3v2mux) */
+  if (strlen (description) > 0 && g_utf8_validate (description, -1, NULL) &&
+      sscanf (description, "c%u", &dummy) != 1) {
+    gchar *s;
+
+    /* must be either an ISO-639-1 or ISO-639-2 language code */
+    if (language[0] != '\0' &&
+        g_ascii_isalpha (language[0]) &&
+        g_ascii_isalpha (language[1]) &&
+        (g_ascii_isalpha (language[2]) || language[2] == '\0')) {
+      const gchar *lang_code;
+
+      /* prefer two-letter ISO 639-1 code if we have a mapping */
+      lang_code = gst_tag_get_language_code (language);
+      s = g_strdup_printf ("%s[%s]=%s", description,
+          (lang_code) ? lang_code : language, text);
+    } else {
+      s = g_strdup_printf ("%s=%s", description, text);
+    }
+    gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+        GST_TAG_EXTENDED_COMMENT, s, NULL);
+    g_free (s);
+  } else if (text != NULL && *text != '\0') {
+    gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+        GST_TAG_COMMENT, text, NULL);
+  } else {
+    goto fail;
+  }
+
+  free_tag_strings (fields);
+  return TRUE;
+
+fail:
+  {
+    GST_WARNING ("failed to parse COMM frame");
+    free_tag_strings (fields);
+    return FALSE;
+  }
+}
+
+static GArray *
+parse_text_identification_frame (ID3TagsWorking * work)
+{
+  guchar encoding;
+  GArray *fields = NULL;
+
+  if (work->parse_size < 2)
+    return NULL;
+
+  encoding = work->parse_data[0];
+  parse_split_strings (encoding, (gchar *) work->parse_data + 1,
+      work->parse_size - 1, &fields);
+  if (fields) {
+    if (fields->len > 0) {
+      GST_LOG ("Read %d fields from Text ID frame of size %d with encoding %d"
+          ". First is '%s'", fields->len, work->parse_size - 1, encoding,
+          g_array_index (fields, gchar *, 0));
+    } else {
+      GST_LOG ("Read 0 fields from Text ID frame of size %d with encoding %d",
+          work->parse_size - 1, encoding);
+    }
+  }
+
+  return fields;
+}
+
+static gboolean
+link_is_known_license (const gchar * url)
+{
+  return g_str_has_prefix (url, "http://creativecommons.org/licenses/");
+}
+
+static gchar *
+parse_url_link_frame (ID3TagsWorking * work, const gchar ** tag_name)
+{
+  gsize len;
+  gchar *nul, *data, *link;
+
+  *tag_name = NULL;
+
+  if (work->parse_size == 0)
+    return NULL;
+
+  data = (gchar *) work->parse_data;
+  /* if there's more data then the string is long, we only want to parse the
+   * data up to the terminating zero to g_convert and ignore the rest, as
+   * per spec */
+  nul = memchr (data, '\0', work->parse_size);
+  if (nul != NULL) {
+    len = (gsize) (nul - data);
+  } else {
+    len = work->parse_size;
+  }
+
+  link = g_convert (data, len, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
+
+  if (link == NULL || !gst_uri_is_valid (link)) {
+    GST_DEBUG ("Invalid URI in %s frame: %s", work->frame_id,
+        GST_STR_NULL (link));
+    g_free (link);
+    return NULL;
+  }
+
+  /* we don't know if it's a link to a page that explains the copyright
+   * situation, or a link that points to/represents a license, the ID3 spec
+   * does not separate those two things; for now only put known license URIs
+   * into GST_TAG_LICENSE_URI and everything else into GST_TAG_COPYRIGHT_URI */
+  if (strcmp (work->frame_id, "WCOP") == 0) {
+    if (link_is_known_license (link))
+      *tag_name = GST_TAG_LICENSE_URI;
+    else
+      *tag_name = GST_TAG_COPYRIGHT_URI;
+  } else if (strcmp (work->frame_id, "WOAF") == 0) {
+    /* can't be bothered to create a CONTACT_URI tag for this, so let's just
+     * put into into GST_TAG_CONTACT, which is where it ends up when reading
+     * the info from vorbis comments as well */
+    *tag_name = GST_TAG_CONTACT;
+  }
+
+  return link;
+}
+
+
+static gchar *
+parse_user_text_identification_frame (ID3TagsWorking * work,
+    const gchar ** tag_name)
+{
+  gchar *ret;
+  guchar encoding;
+  GArray *fields = NULL;
+
+  *tag_name = NULL;
+
+  if (work->parse_size < 2)
+    return NULL;
+
+  encoding = work->parse_data[0];
+
+  parse_split_strings (encoding, (gchar *) work->parse_data + 1,
+      work->parse_size - 1, &fields);
+
+  if (fields == NULL)
+    return NULL;
+
+  if (fields->len != 2) {
+    GST_WARNING ("Expected 2 fields in TXXX frame, but got %d", fields->len);
+    free_tag_strings (fields);
+    return NULL;
+  }
+
+  *tag_name =
+      gst_tag_from_id3_user_tag ("TXXX", g_array_index (fields, gchar *, 0));
+
+  GST_LOG ("TXXX frame of size %d. Mapped descriptor '%s' to GStreamer tag %s",
+      work->parse_size - 1, g_array_index (fields, gchar *, 0),
+      GST_STR_NULL (*tag_name));
+
+  if (*tag_name) {
+    ret = g_strdup (g_array_index (fields, gchar *, 1));
+    /* GST_LOG ("%s = %s", *tag_name, GST_STR_NULL (ret)); */
+  } else {
+    ret = NULL;
+  }
+
+  free_tag_strings (fields);
+  return ret;
+}
+
+static gboolean
+parse_id_string (ID3TagsWorking * work, gchar ** p_str, gint * p_len,
+    gint * p_datalen)
+{
+  gint len, datalen;
+
+  if (work->parse_size < 2)
+    return FALSE;
+
+  for (len = 0; len < work->parse_size - 1; ++len) {
+    if (work->parse_data[len] == '\0')
+      break;
+  }
+
+  datalen = work->parse_size - (len + 1);
+  if (len == 0 || datalen <= 0)
+    return FALSE;
+
+  *p_str = g_strndup ((gchar *) work->parse_data, len);
+  *p_len = len;
+  *p_datalen = datalen;
+
+  return TRUE;
+}
+
+static gchar *
+parse_unique_file_identifier (ID3TagsWorking * work, const gchar ** tag_name)
+{
+  gint len, datalen;
+  gchar *owner_id, *data, *ret = NULL;
+
+  GST_LOG ("parsing UFID frame of size %d", work->parse_size);
+
+  if (!parse_id_string (work, &owner_id, &len, &datalen))
+    return NULL;
+
+  data = (gchar *) work->parse_data + len + 1;
+  GST_LOG ("UFID owner ID: %s (+ %d bytes of data)", owner_id, datalen);
+
+  if (strcmp (owner_id, "http://musicbrainz.org") == 0 &&
+      g_utf8_validate (data, datalen, NULL)) {
+    *tag_name = GST_TAG_MUSICBRAINZ_TRACKID;
+    ret = g_strndup (data, datalen);
+  } else {
+    GST_INFO ("Unknown UFID owner ID: %s", owner_id);
+  }
+  g_free (owner_id);
+
+  return ret;
+}
+
+/* parse data and return length of the next string in the given encoding,
+ * including the NUL terminator */
+static gint
+scan_encoded_string (guint8 encoding, gchar * data, gint data_size)
+{
+  gint i;
+
+  switch (encoding) {
+    case ID3V2_ENCODING_ISO8859:
+    case ID3V2_ENCODING_UTF8:
+      for (i = 0; i < data_size; ++i) {
+        if (data[i] == '\0')
+          return i + 1;
+      }
+      break;
+    case ID3V2_ENCODING_UTF16:
+    case ID3V2_ENCODING_UTF16BE:
+      /* we don't care about BOMs here and treat them as part of the string */
+      /* Find '\0\0' terminator */
+      for (i = 0; i < data_size - 1; i += 2) {
+        if (data[i] == '\0' && data[i + 1] == '\0')
+          return i + 2;
+      }
+      break;
+    default:
+      break;
+  }
+
+  return 0;
+}
+
+static gboolean
+parse_picture_frame (ID3TagsWorking * work)
+{
+  guint8 txt_encoding, pic_type;
+  gchar *mime_str = NULL;
+  gint len, datalen;
+
+  GST_LOG ("APIC frame (ID3v2.%u)", ID3V2_VER_MAJOR (work->hdr.version));
+
+  if (work->parse_size < 1 + 1 + 1 + 1 + 1)
+    goto not_enough_data;
+
+  txt_encoding = work->parse_data[0];
+  ++work->parse_data;
+  --work->parse_size;
+
+  /* Read image format; in early ID3v2 versions this is a fixed-length
+   * 3-character string without terminator; in later versions (>= 2.3.0)
+   * this is a NUL-terminated string of variable length */
+  if (ID3V2_VER_MAJOR (work->hdr.version) < 3) {
+    if (work->parse_size < 3)
+      goto not_enough_data;
+
+    mime_str = g_strndup ((gchar *) work->parse_data, 3);
+    len = 3;
+  } else {
+    if (!parse_id_string (work, &mime_str, &len, &datalen))
+      return FALSE;
+    ++len;                      /* for string terminator */
+  }
+
+  if (work->parse_size < len + 1 + 1 + 1)
+    goto not_enough_data;
+
+  work->parse_data += len;
+  work->parse_size -= len;
+
+  /* Read image type */
+  pic_type = work->parse_data[0];
+  ++work->parse_data;
+  --work->parse_size;
+
+  GST_LOG ("APIC frame mime type    : %s", GST_STR_NULL (mime_str));
+  GST_LOG ("APIC frame picture type : 0x%02x", (guint) pic_type);
+
+  if (work->parse_size < 1 + 1)
+    goto not_enough_data;
+
+  len = scan_encoded_string (txt_encoding, (gchar *) work->parse_data,
+      work->parse_size);
+
+  if (len < 1)
+    goto error;
+
+  /* just skip the description string ... */
+  GST_LOG ("Skipping description string (%d bytes in original coding)", len);
+
+  if (work->parse_size < len + 1)
+    goto not_enough_data;
+
+  work->parse_data += len;
+  work->parse_size -= len;
+
+  GST_DEBUG ("image data is %u bytes", work->parse_size);
+
+  if (work->parse_size <= 0)
+    goto not_enough_data;
+
+  if (!gst_tag_list_add_id3_image (work->tags, (guint8 *) work->parse_data,
+          work->parse_size, pic_type)) {
+    goto error;
+  }
+
+  g_free (mime_str);
+  return TRUE;
+
+not_enough_data:
+  {
+    GST_DEBUG ("not enough data, skipping APIC frame");
+    /* fall through to error */
+  }
+error:
+  {
+    GST_DEBUG ("problem parsing APIC frame, skipping");
+    g_free (mime_str);
+    return FALSE;
+  }
+}
+
+#define ID3V2_RVA2_CHANNEL_MASTER  1
+
+static gboolean
+parse_relative_volume_adjustment_two (ID3TagsWorking * work)
+{
+  const gchar *gain_tag_name = NULL;
+  const gchar *peak_tag_name = NULL;
+  gdouble gain_dB, peak_val;
+  guint64 peak;
+  guint8 *data, chan, peak_bits;
+  gchar *id;
+  gint len, datalen, i;
+
+  if (!parse_id_string (work, &id, &len, &datalen))
+    return FALSE;
+
+  if (datalen < (1 + 2 + 1)) {
+    GST_WARNING ("broken RVA2 frame, data size only %d bytes", datalen);
+    g_free (id);
+    return FALSE;
+  }
+
+  data = work->parse_data + len + 1;
+  chan = GST_READ_UINT8 (data);
+  gain_dB = (gdouble) ((gint16) GST_READ_UINT16_BE (data + 1)) / 512.0;
+  /* The meaning of the peak value is not defined in the ID3v2 spec. However,
+   * the first/only implementation of this seems to have been in XMMS, and
+   * other libs (like mutagen) seem to follow that implementation as well:
+   * see http://bugs.xmms.org/attachment.cgi?id=113&action=view */
+  peak_bits = GST_READ_UINT8 (data + 1 + 2);
+  if (peak_bits > 64) {
+    GST_WARNING ("silly peak precision of %d bits, ignoring", (gint) peak_bits);
+    peak_bits = 0;
+  }
+  data += 1 + 2 + 1;
+  datalen -= 1 + 2 + 1;
+  if (peak_bits == 16) {
+    peak = GST_READ_UINT16_BE (data);
+  } else {
+    peak = 0;
+    for (i = 0; i < (GST_ROUND_UP_8 (peak_bits) / 8) && datalen > 0; ++i) {
+      peak = peak << 8;
+      peak |= GST_READ_UINT8 (data);
+      ++data;
+      --datalen;
+    }
+  }
+
+  peak = peak << (64 - GST_ROUND_UP_8 (peak_bits));
+  peak_val =
+      gst_guint64_to_gdouble (peak) / gst_util_guint64_to_gdouble (G_MAXINT64);
+  GST_LOG ("RVA2 frame: id=%s, chan=%u, adj=%.2fdB, peak_bits=%u, peak=%.2f",
+      id, chan, gain_dB, (guint) peak_bits, peak_val);
+
+  if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "track") == 0) {
+    gain_tag_name = GST_TAG_TRACK_GAIN;
+    peak_tag_name = GST_TAG_TRACK_PEAK;
+  } else if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "album") == 0) {
+    gain_tag_name = GST_TAG_ALBUM_GAIN;
+    peak_tag_name = GST_TAG_ALBUM_PEAK;
+  } else {
+    GST_INFO ("Unhandled RVA2 frame id '%s' for channel %d", id, chan);
+  }
+
+  if (gain_tag_name) {
+    gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+        gain_tag_name, gain_dB, NULL);
+  }
+  if (peak_tag_name && peak_bits > 0) {
+    gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+        peak_tag_name, peak_val, NULL);
+  }
+
+  g_free (id);
+
+  return (gain_tag_name != NULL || peak_tag_name != NULL);
+}
+
+static void
+parse_obsolete_tdat_frame (ID3TagsWorking * work)
+{
+  if (work->parse_size >= 5 &&
+      work->parse_data[0] == ID3V2_ENCODING_ISO8859 &&
+      g_ascii_isdigit (work->parse_data[1]) &&
+      g_ascii_isdigit (work->parse_data[2]) &&
+      g_ascii_isdigit (work->parse_data[3]) &&
+      g_ascii_isdigit (work->parse_data[4])) {
+    work->pending_day = (10 * g_ascii_digit_value (work->parse_data[1])) +
+        g_ascii_digit_value (work->parse_data[2]);
+    work->pending_month = (10 * g_ascii_digit_value (work->parse_data[3])) +
+        g_ascii_digit_value (work->parse_data[4]);
+    GST_LOG ("date (dd/mm) %02u/%02u", work->pending_day, work->pending_month);
+  }
+}
+
+static gboolean
+id3v2_tag_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
+    const gchar * tag_str)
+{
+  GType tag_type = gst_tag_get_type (tag_name);
+  GstTagList *tag_list = work->tags;
+
+  if (tag_str == NULL)
+    return FALSE;
+
+  switch (tag_type) {
+    case G_TYPE_UINT:
+    {
+      gint current, total;
+
+      if (sscanf (tag_str, "%d/%d", &current, &total) == 2) {
+        if (total <= 0) {
+          GST_WARNING ("Ignoring invalid value for total %d in tag %s",
+              total, tag_name);
+        } else {
+          if (strcmp (tag_name, GST_TAG_TRACK_NUMBER) == 0) {
+            gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+                GST_TAG_TRACK_COUNT, total, NULL);
+          } else if (strcmp (tag_name, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
+            gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+                GST_TAG_ALBUM_VOLUME_COUNT, total, NULL);
+          }
+        }
+      } else if (sscanf (tag_str, "%d", &current) != 1) {
+        /* Not an integer in the string */
+        GST_WARNING ("Tag string for tag %s does not contain an integer - "
+            "ignoring", tag_name);
+        break;
+      }
+
+      if (current <= 0) {
+        GST_WARNING ("Ignoring invalid value %d in tag %s", current, tag_name);
+      } else {
+        gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, current,
+            NULL);
+      }
+      break;
+    }
+    case G_TYPE_UINT64:
+    {
+      guint64 tmp;
+
+      g_assert (strcmp (tag_name, GST_TAG_DURATION) == 0);
+      tmp = strtoul (tag_str, NULL, 10);
+      if (tmp == 0) {
+        break;
+      }
+      gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+          GST_TAG_DURATION, tmp * 1000 * 1000, NULL);
+      break;
+    }
+    case G_TYPE_STRING:{
+      const GValue *val;
+      guint i, num;
+
+      /* make sure we add each unique string only once per tag, we don't want
+       * to have the same genre in the genre list multiple times, for example,
+       * or the same DiscID in there twice just because it's contained in the
+       * tag multiple times under different TXXX user tags */
+      num = gst_tag_list_get_tag_size (tag_list, tag_name);
+      for (i = 0; i < num; ++i) {
+        val = gst_tag_list_get_value_index (tag_list, tag_name, i);
+        if (val != NULL && strcmp (g_value_get_string (val), tag_str) == 0)
+          break;
+      }
+      if (i == num) {
+        gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+            tag_name, tag_str, NULL);
+      }
+      break;
+    }
+
+    default:{
+      gchar *tmp = NULL;
+      GValue src = { 0, };
+      GValue dest = { 0, };
+
+      /* Ensure that any date string is complete */
+      if (tag_type == GST_TYPE_DATE) {
+        guint year = 1901, month = 1, day = 1;
+
+        /* Dates can be yyyy-MM-dd, yyyy-MM or yyyy, but we need
+         * the first type */
+        if (sscanf (tag_str, "%04u-%02u-%02u", &year, &month, &day) == 0)
+          break;
+
+        tmp = g_strdup_printf ("%04u-%02u-%02u", year, month, day);
+        tag_str = tmp;
+      }
+
+      /* handles anything else */
+      g_value_init (&src, G_TYPE_STRING);
+      g_value_set_string (&src, (const gchar *) tag_str);
+      g_value_init (&dest, tag_type);
+
+      if (g_value_transform (&src, &dest)) {
+        gst_tag_list_add_values (tag_list, GST_TAG_MERGE_APPEND,
+            tag_name, &dest, NULL);
+      } else if (tag_type == G_TYPE_DOUBLE) {
+        /* replaygain tags in TXXX frames ... */
+        g_value_set_double (&dest, g_strtod (tag_str, NULL));
+        gst_tag_list_add_values (tag_list, GST_TAG_MERGE_KEEP,
+            tag_name, &dest, NULL);
+        GST_LOG ("Converted string '%s' to double %f", tag_str,
+            g_value_get_double (&dest));
+      } else {
+        GST_WARNING ("Failed to transform tag from string to type '%s'",
+            g_type_name (tag_type));
+      }
+
+      g_value_unset (&src);
+      g_value_unset (&dest);
+      g_free (tmp);
+      break;
+    }
+  }
+
+  return TRUE;
+}
+
+/* Check that an array of characters contains only digits */
+static gboolean
+id3v2_are_digits (const gchar * chars, gint size)
+{
+  gint i;
+
+  for (i = 0; i < size; i++) {
+    if (!g_ascii_isdigit (chars[i]))
+      return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+id3v2_genre_string_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
+    const gchar * tag_str, gint len)
+{
+  g_return_val_if_fail (tag_str != NULL, FALSE);
+
+  /* If it's a number, it might be a defined genre */
+  if (id3v2_are_digits (tag_str, len)) {
+    tag_str = gst_tag_id3_genre_get (strtol (tag_str, NULL, 10));
+    return id3v2_tag_to_taglist (work, tag_name, tag_str);
+  }
+  /* Otherwise it might be "RX" or "CR" */
+  if (len == 2) {
+    if (g_ascii_strncasecmp ("rx", tag_str, len) == 0)
+      return id3v2_tag_to_taglist (work, tag_name, "Remix");
+
+    if (g_ascii_strncasecmp ("cr", tag_str, len) == 0)
+      return id3v2_tag_to_taglist (work, tag_name, "Cover");
+  }
+
+  /* Otherwise it's a string */
+  return id3v2_tag_to_taglist (work, tag_name, tag_str);
+}
+
+static gboolean
+id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
+    GArray * tag_fields)
+{
+  gchar *tag_str = NULL;
+  gboolean result = FALSE;
+  gint i;
+
+  for (i = 0; i < tag_fields->len; i++) {
+    gint len;
+
+    tag_str = g_array_index (tag_fields, gchar *, i);
+    if (tag_str == NULL)
+      continue;
+
+    len = strlen (tag_str);
+    /* Only supposed to see '(n)' type numeric genre strings in ID3 <= 2.3.0
+     * but apparently we see them in 2.4.0 sometimes too */
+    if (TRUE || work->hdr.version <= 0x300) {   /* <= 2.3.0 */
+      /* Check for genre numbers wrapped in parentheses, possibly
+       * followed by a string */
+      while (len >= 2) {
+        gint pos;
+        gboolean found = FALSE;
+
+        /* Double parenthesis ends the numeric genres, but we need
+         * to swallow the first one so we actually output '(' */
+        if (tag_str[0] == '(' && tag_str[1] == '(') {
+          tag_str++;
+          len--;
+          break;
+        }
+
+        /* If the first char is not a parenthesis, then stop
+         * looking for parenthesised genre strings */
+        if (tag_str[0] != '(')
+          break;
+
+        for (pos = 1; pos < len; pos++) {
+          if (tag_str[pos] == ')') {
+            gchar *tmp_str;
+
+            tmp_str = g_strndup (tag_str + 1, pos - 1);
+            result |=
+                id3v2_genre_string_to_taglist (work, tag_name, tmp_str,
+                pos - 1);
+            g_free (tmp_str);
+            tag_str += pos + 1;
+            len -= pos + 1;
+            found = TRUE;
+            break;
+          }
+
+          /* If we encounter a non-digit while searching for a closing 
+           * parenthesis, we should not try and interpret this as a 
+           * numeric genre string */
+          if (!g_ascii_isdigit (tag_str[pos]))
+            break;
+        }
+        if (!found)
+          break;                /* There was no closing parenthesis */
+      }
+    }
+
+    if (len > 0 && tag_str != NULL)
+      result |= id3v2_genre_string_to_taglist (work, tag_name, tag_str, len);
+  }
+  return result;
+}
+
+static const gchar utf16enc[] = "UTF-16";
+static const gchar utf16leenc[] = "UTF-16LE";
+static const gchar utf16beenc[] = "UTF-16BE";
+
+static gboolean
+find_utf16_bom (gchar * data, const gchar ** p_in_encoding)
+{
+  guint16 marker = (GST_READ_UINT8 (data) << 8) | GST_READ_UINT8 (data + 1);
+
+  switch (marker) {
+    case 0xFFFE:
+      *p_in_encoding = utf16leenc;
+      return TRUE;
+    case 0xFEFF:
+      *p_in_encoding = utf16beenc;
+      return TRUE;
+    default:
+      break;
+  }
+  return FALSE;
+}
+
+static void *
+string_utf8_dup (const gchar * start, const guint size)
+{
+  const gchar *env;
+  gsize bytes_read;
+  gchar *utf8;
+
+  /* Should we try the charsets specified
+   * via environment variables FIRST ? */
+  if (g_utf8_validate (start, size, NULL)) {
+    utf8 = g_strndup (start, size);
+    goto beach;
+  }
+
+  env = g_getenv ("GST_ID3V1_TAG_ENCODING");
+  if (!env || *env == '\0')
+    env = g_getenv ("GST_ID3_TAG_ENCODING");
+  if (!env || *env == '\0')
+    env = g_getenv ("GST_TAG_ENCODING");
+
+  /* Try charsets specified via the environment */
+  if (env && *env != '\0') {
+    gchar **c, **csets;
+
+    csets = g_strsplit (env, G_SEARCHPATH_SEPARATOR_S, -1);
+
+    for (c = csets; c && *c; ++c) {
+      if ((utf8 =
+              g_convert (start, size, "UTF-8", *c, &bytes_read, NULL, NULL))) {
+        if (bytes_read == size) {
+          GST_DEBUG ("Using charset %s to interperate id3 tags\n", *c);
+          g_strfreev (csets);
+          goto beach;
+        }
+        g_free (utf8);
+        utf8 = NULL;
+      }
+    }
+  }
+  /* Try current locale (if not UTF-8) */
+  if (!g_get_charset (&env)) {
+    if ((utf8 = g_locale_to_utf8 (start, size, &bytes_read, NULL, NULL))) {
+      if (bytes_read == size) {
+        goto beach;
+      }
+      g_free (utf8);
+      utf8 = NULL;
+    }
+  }
+
+  /* Try ISO-8859-1 */
+  utf8 =
+      g_convert (start, size, "UTF-8", "ISO-8859-1", &bytes_read, NULL, NULL);
+  if (utf8 != NULL && bytes_read == size) {
+    goto beach;
+  }
+
+  g_free (utf8);
+  return NULL;
+
+beach:
+
+  g_strchomp (utf8);
+
+  return (utf8);
+}
+
+static void
+parse_insert_string_field (guint8 encoding, gchar * data, gint data_size,
+    GArray * fields)
+{
+  gchar *field = NULL;
+
+  switch (encoding) {
+    case ID3V2_ENCODING_UTF16:
+    case ID3V2_ENCODING_UTF16BE:
+    {
+      const gchar *in_encode;
+
+      if (encoding == ID3V2_ENCODING_UTF16)
+        in_encode = utf16enc;
+      else
+        in_encode = utf16beenc;
+
+      /* Sometimes we see strings with multiple BOM markers at the start.
+       * In that case, we assume the innermost one is correct. If that fails
+       * to produce valid UTF-8, we try the other endianness anyway */
+      while (data_size > 2 && find_utf16_bom (data, &in_encode)) {
+        data += 2;              /* skip BOM */
+        data_size -= 2;
+      }
+
+      field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL);
+
+      if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) {
+        /* As a fallback, try interpreting UTF-16 in the other endianness */
+        if (in_encode == utf16beenc)
+          field = g_convert (data, data_size, "UTF-8", utf16leenc,
+              NULL, NULL, NULL);
+      }
+    }
+
+      break;
+    case ID3V2_ENCODING_ISO8859:
+      if (g_utf8_validate (data, data_size, NULL))
+        field = g_strndup (data, data_size);
+      else
+        /* field = g_convert (data, data_size, "UTF-8", "ISO-8859-1",
+           NULL, NULL, NULL); */
+        field = string_utf8_dup (data, data_size);
+      break;
+    default:
+      field = g_strndup (data, data_size);
+      break;
+  }
+
+  if (field) {
+    if (g_utf8_validate (field, -1, NULL)) {
+      g_array_append_val (fields, field);
+      return;
+    }
+
+    GST_DEBUG ("%s was bad UTF-8 after conversion from encoding %d. Ignoring",
+        field, encoding);
+    g_free (field);
+  }
+}
+
+static void
+parse_split_strings (guint8 encoding, gchar * data, gint data_size,
+    GArray ** out_fields)
+{
+  GArray *fields = g_array_new (FALSE, TRUE, sizeof (gchar *));
+  gint text_pos;
+  gint prev = 0;
+
+  g_return_if_fail (out_fields != NULL);
+
+  switch (encoding) {
+    case ID3V2_ENCODING_ISO8859:
+      for (text_pos = 0; text_pos < data_size; text_pos++) {
+        if (data[text_pos] == 0) {
+          parse_insert_string_field (encoding, data + prev,
+              text_pos - prev + 1, fields);
+          prev = text_pos + 1;
+        }
+      }
+      if (data_size - prev > 0 && data[prev] != 0x00) {
+        parse_insert_string_field (encoding, data + prev,
+            data_size - prev, fields);
+      }
+
+      break;
+    case ID3V2_ENCODING_UTF8:
+      for (prev = 0, text_pos = 0; text_pos < data_size; text_pos++) {
+        if (data[text_pos] == '\0') {
+          parse_insert_string_field (encoding, data + prev,
+              text_pos - prev + 1, fields);
+          prev = text_pos + 1;
+        }
+      }
+      if (data_size - prev > 0 && data[prev] != 0x00) {
+        parse_insert_string_field (encoding, data + prev,
+            data_size - prev, fields);
+      }
+      break;
+    case ID3V2_ENCODING_UTF16:
+    case ID3V2_ENCODING_UTF16BE:
+    {
+      /* Find '\0\0' terminator */
+      for (text_pos = 0; text_pos < data_size - 1; text_pos += 2) {
+        if (data[text_pos] == '\0' && data[text_pos + 1] == '\0') {
+          /* found a delimiter */
+          parse_insert_string_field (encoding, data + prev,
+              text_pos - prev + 2, fields);
+          text_pos++;           /* Advance to the 2nd NULL terminator */
+          prev = text_pos + 1;
+          break;
+        }
+      }
+      if (data_size - prev > 1 &&
+          (data[prev] != 0x00 || data[prev + 1] != 0x00)) {
+        /* There were 2 or more non-null chars left, convert those too */
+        parse_insert_string_field (encoding, data + prev,
+            data_size - prev, fields);
+      }
+      break;
+    }
+  }
+  if (fields->len > 0)
+    *out_fields = fields;
+  else
+    g_array_free (fields, TRUE);
+}
+
+static void
+free_tag_strings (GArray * fields)
+{
+  if (fields) {
+    gint i;
+    gchar *c;
+
+    for (i = 0; i < fields->len; i++) {
+      c = g_array_index (fields, gchar *, i);
+      g_free (c);
+    }
+    g_array_free (fields, TRUE);
+  }
+}
diff --git a/gst-libs/gst/tag/lang-tables.dat b/gst-libs/gst/tag/lang-tables.dat
new file mode 100644
index 0000000..3367f70
--- /dev/null
+++ b/gst-libs/gst/tag/lang-tables.dat
@@ -0,0 +1,447 @@
+/* generated by mklangtables.c iso-codes 3.15 */
+
+#include <glib.h>
+
+#define ISO_639_FLAG_2T  (1 << 0)
+#define ISO_639_FLAG_2B  (1 << 1)
+
+/* *INDENT-OFF* */
+
+static const struct
+{
+  const gchar iso_639_1[3];
+  const gchar iso_639_2[4];
+  guint8 flags;
+  guint16 name_offset;
+} iso_639_codes[] = {
+    /* Afar */
+  { "aa", "aar", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 0 },
+    /* Abkhazian */
+  { "ab", "abk", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 5 },
+    /* Avestan */
+  { "ae", "ave", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 15 },
+    /* Afrikaans */
+  { "af", "afr", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 23 },
+    /* Akan */
+  { "ak", "aka", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 33 },
+    /* Amharic */
+  { "am", "amh", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 38 },
+    /* Aragonese */
+  { "an", "arg", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 46 },
+    /* Arabic */
+  { "ar", "ara", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 56 },
+    /* Assamese */
+  { "as", "asm", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 63 },
+    /* Avaric */
+  { "av", "ava", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 72 },
+    /* Aymara */
+  { "ay", "aym", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 79 },
+    /* Azerbaijani */
+  { "az", "aze", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 86 },
+    /* Bashkir */
+  { "ba", "bak", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 98 },
+    /* Belarusian */
+  { "be", "bel", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 106 },
+    /* Bulgarian */
+  { "bg", "bul", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 117 },
+    /* Bihari languages */
+  { "bh", "bih", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 127 },
+    /* Bislama */
+  { "bi", "bis", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 144 },
+    /* Bambara */
+  { "bm", "bam", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 152 },
+    /* Bengali */
+  { "bn", "ben", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 160 },
+    /* Tibetan */
+  { "bo", "bod", ISO_639_FLAG_2T, 168 },
+  { "bo", "tib", ISO_639_FLAG_2B, 168 },
+    /* Breton */
+  { "br", "bre", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 176 },
+    /* Bosnian */
+  { "bs", "bos", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 183 },
+    /* Catalan; Valencian */
+  { "ca", "cat", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 191 },
+    /* Chechen */
+  { "ce", "che", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 210 },
+    /* Chamorro */
+  { "ch", "cha", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 218 },
+    /* Corsican */
+  { "co", "cos", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 227 },
+    /* Cree */
+  { "cr", "cre", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 236 },
+    /* Czech */
+  { "cs", "ces", ISO_639_FLAG_2T, 241 },
+  { "cs", "cze", ISO_639_FLAG_2B, 241 },
+    /* Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic */
+  { "cu", "chu", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 247 },
+    /* Chuvash */
+  { "cv", "chv", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 328 },
+    /* Welsh */
+  { "cy", "cym", ISO_639_FLAG_2T, 336 },
+  { "cy", "wel", ISO_639_FLAG_2B, 336 },
+    /* Danish */
+  { "da", "dan", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 342 },
+    /* German */
+  { "de", "deu", ISO_639_FLAG_2T, 349 },
+  { "de", "ger", ISO_639_FLAG_2B, 349 },
+    /* Divehi; Dhivehi; Maldivian */
+  { "dv", "div", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 356 },
+    /* Dzongkha */
+  { "dz", "dzo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 383 },
+    /* Ewe */
+  { "ee", "ewe", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 392 },
+    /* Greek, Modern (1453-) */
+  { "el", "ell", ISO_639_FLAG_2T, 396 },
+  { "el", "gre", ISO_639_FLAG_2B, 396 },
+    /* English */
+  { "en", "eng", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 418 },
+    /* Esperanto */
+  { "eo", "epo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 426 },
+    /* Spanish; Castilian */
+  { "es", "spa", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 436 },
+    /* Estonian */
+  { "et", "est", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 455 },
+    /* Basque */
+  { "eu", "eus", ISO_639_FLAG_2T, 464 },
+  { "eu", "baq", ISO_639_FLAG_2B, 464 },
+    /* Persian */
+  { "fa", "fas", ISO_639_FLAG_2T, 471 },
+  { "fa", "per", ISO_639_FLAG_2B, 471 },
+    /* Fulah */
+  { "ff", "ful", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 479 },
+    /* Finnish */
+  { "fi", "fin", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 485 },
+    /* Fijian */
+  { "fj", "fij", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 493 },
+    /* Faroese */
+  { "fo", "fao", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 500 },
+    /* French */
+  { "fr", "fra", ISO_639_FLAG_2T, 508 },
+  { "fr", "fre", ISO_639_FLAG_2B, 508 },
+    /* Western Frisian */
+  { "fy", "fry", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 515 },
+    /* Irish */
+  { "ga", "gle", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 531 },
+    /* Gaelic; Scottish Gaelic */
+  { "gd", "gla", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 537 },
+    /* Galician */
+  { "gl", "glg", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 561 },
+    /* Guarani */
+  { "gn", "grn", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 570 },
+    /* Gujarati */
+  { "gu", "guj", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 578 },
+    /* Manx */
+  { "gv", "glv", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 587 },
+    /* Hausa */
+  { "ha", "hau", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 592 },
+    /* Hebrew */
+  { "he", "heb", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 598 },
+    /* Hindi */
+  { "hi", "hin", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 605 },
+    /* Hiri Motu */
+  { "ho", "hmo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 611 },
+    /* Croatian */
+  { "hr", "hrv", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 621 },
+    /* Haitian; Haitian Creole */
+  { "ht", "hat", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 630 },
+    /* Hungarian */
+  { "hu", "hun", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 654 },
+    /* Armenian */
+  { "hy", "hye", ISO_639_FLAG_2T, 664 },
+  { "hy", "arm", ISO_639_FLAG_2B, 664 },
+    /* Herero */
+  { "hz", "her", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 673 },
+    /* Interlingua (International Auxiliary Language Association) */
+  { "ia", "ina", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 680 },
+    /* Indonesian */
+  { "id", "ind", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 739 },
+    /* Interlingue; Occidental */
+  { "ie", "ile", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 750 },
+    /* Igbo */
+  { "ig", "ibo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 774 },
+    /* Sichuan Yi; Nuosu */
+  { "ii", "iii", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 779 },
+    /* Inupiaq */
+  { "ik", "ipk", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 797 },
+    /* Ido */
+  { "io", "ido", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 805 },
+    /* Icelandic */
+  { "is", "isl", ISO_639_FLAG_2T, 809 },
+  { "is", "ice", ISO_639_FLAG_2B, 809 },
+    /* Italian */
+  { "it", "ita", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 819 },
+    /* Inuktitut */
+  { "iu", "iku", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 827 },
+    /* Japanese */
+  { "ja", "jpn", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 837 },
+    /* Javanese */
+  { "jv", "jav", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 846 },
+    /* Georgian */
+  { "ka", "kat", ISO_639_FLAG_2T, 855 },
+  { "ka", "geo", ISO_639_FLAG_2B, 855 },
+    /* Kongo */
+  { "kg", "kon", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 864 },
+    /* Kikuyu; Gikuyu */
+  { "ki", "kik", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 870 },
+    /* Kuanyama; Kwanyama */
+  { "kj", "kua", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 885 },
+    /* Kazakh */
+  { "kk", "kaz", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 904 },
+    /* Kalaallisut; Greenlandic */
+  { "kl", "kal", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 911 },
+    /* Central Khmer */
+  { "km", "khm", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 936 },
+    /* Kannada */
+  { "kn", "kan", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 950 },
+    /* Korean */
+  { "ko", "kor", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 958 },
+    /* Kanuri */
+  { "kr", "kau", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 965 },
+    /* Kashmiri */
+  { "ks", "kas", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 972 },
+    /* Kurdish */
+  { "ku", "kur", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 981 },
+    /* Komi */
+  { "kv", "kom", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 989 },
+    /* Cornish */
+  { "kw", "cor", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 994 },
+    /* Kirghiz; Kyrgyz */
+  { "ky", "kir", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1002 },
+    /* Latin */
+  { "la", "lat", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1018 },
+    /* Luxembourgish; Letzeburgesch */
+  { "lb", "ltz", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1024 },
+    /* Ganda */
+  { "lg", "lug", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1053 },
+    /* Limburgan; Limburger; Limburgish */
+  { "li", "lim", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1059 },
+    /* Lingala */
+  { "ln", "lin", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1092 },
+    /* Lao */
+  { "lo", "lao", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1100 },
+    /* Lithuanian */
+  { "lt", "lit", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1104 },
+    /* Luba-Katanga */
+  { "lu", "lub", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1115 },
+    /* Latvian */
+  { "lv", "lav", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1128 },
+    /* Malagasy */
+  { "mg", "mlg", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1136 },
+    /* Marshallese */
+  { "mh", "mah", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1145 },
+    /* Maori */
+  { "mi", "mri", ISO_639_FLAG_2T, 1157 },
+  { "mi", "mao", ISO_639_FLAG_2B, 1157 },
+    /* Macedonian */
+  { "mk", "mkd", ISO_639_FLAG_2T, 1163 },
+  { "mk", "mac", ISO_639_FLAG_2B, 1163 },
+    /* Malayalam */
+  { "ml", "mal", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1174 },
+    /* Mongolian */
+  { "mn", "mon", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1184 },
+    /* Moldavian; Moldovan */
+  { "mo", "mol", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1194 },
+    /* Marathi */
+  { "mr", "mar", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1214 },
+    /* Malay */
+  { "ms", "msa", ISO_639_FLAG_2T, 1222 },
+  { "ms", "may", ISO_639_FLAG_2B, 1222 },
+    /* Maltese */
+  { "mt", "mlt", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1228 },
+    /* Burmese */
+  { "my", "mya", ISO_639_FLAG_2T, 1236 },
+  { "my", "bur", ISO_639_FLAG_2B, 1236 },
+    /* Nauru */
+  { "na", "nau", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1244 },
+    /* Bokm?l, Norwegian; Norwegian Bokm?l */
+  { "nb", "nob", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1250 },
+    /* Ndebele, North; North Ndebele */
+  { "nd", "nde", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1288 },
+    /* Nepali */
+  { "ne", "nep", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1318 },
+    /* Ndonga */
+  { "ng", "ndo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1325 },
+    /* Dutch; Flemish */
+  { "nl", "nld", ISO_639_FLAG_2T, 1332 },
+  { "nl", "dut", ISO_639_FLAG_2B, 1332 },
+    /* Norwegian Nynorsk; Nynorsk, Norwegian */
+  { "nn", "nno", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1347 },
+    /* Norwegian */
+  { "no", "nor", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1385 },
+    /* Ndebele, South; South Ndebele */
+  { "nr", "nbl", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1395 },
+    /* Navajo; Navaho */
+  { "nv", "nav", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1425 },
+    /* Chichewa; Chewa; Nyanja */
+  { "ny", "nya", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1440 },
+    /* Occitan (post 1500) */
+  { "oc", "oci", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1464 },
+    /* Ojibwa */
+  { "oj", "oji", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1484 },
+    /* Oromo */
+  { "om", "orm", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1491 },
+    /* Oriya */
+  { "or", "ori", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1497 },
+    /* Ossetian; Ossetic */
+  { "os", "oss", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1503 },
+    /* Panjabi; Punjabi */
+  { "pa", "pan", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1521 },
+    /* Pali */
+  { "pi", "pli", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1538 },
+    /* Polish */
+  { "pl", "pol", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1543 },
+    /* Pushto; Pashto */
+  { "ps", "pus", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1550 },
+    /* Portuguese */
+  { "pt", "por", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1565 },
+    /* Quechua */
+  { "qu", "que", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1576 },
+    /* Romansh */
+  { "rm", "roh", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1584 },
+    /* Rundi */
+  { "rn", "run", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1592 },
+    /* Romanian */
+  { "ro", "ron", ISO_639_FLAG_2T, 1598 },
+  { "ro", "rum", ISO_639_FLAG_2B, 1598 },
+    /* Russian */
+  { "ru", "rus", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1607 },
+    /* Kinyarwanda */
+  { "rw", "kin", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1615 },
+    /* Sanskrit */
+  { "sa", "san", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1627 },
+    /* Sardinian */
+  { "sc", "srd", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1636 },
+    /* Sindhi */
+  { "sd", "snd", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1646 },
+    /* Northern Sami */
+  { "se", "sme", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1653 },
+    /* Sango */
+  { "sg", "sag", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1667 },
+    /* Sinhala; Sinhalese */
+  { "si", "sin", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1673 },
+    /* Slovak */
+  { "sk", "slk", ISO_639_FLAG_2T, 1692 },
+  { "sk", "slo", ISO_639_FLAG_2B, 1692 },
+    /* Slovenian */
+  { "sl", "slv", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1699 },
+    /* Samoan */
+  { "sm", "smo", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1709 },
+    /* Shona */
+  { "sn", "sna", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1716 },
+    /* Somali */
+  { "so", "som", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1722 },
+    /* Albanian */
+  { "sq", "sqi", ISO_639_FLAG_2T, 1729 },
+  { "sq", "alb", ISO_639_FLAG_2B, 1729 },
+    /* Serbian */
+  { "sr", "srp", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1738 },
+    /* Swati */
+  { "ss", "ssw", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1746 },
+    /* Sotho, Southern */
+  { "st", "sot", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1752 },
+    /* Sundanese */
+  { "su", "sun", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1768 },
+    /* Swedish */
+  { "sv", "swe", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1778 },
+    /* Swahili */
+  { "sw", "swa", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1786 },
+    /* Tamil */
+  { "ta", "tam", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1794 },
+    /* Telugu */
+  { "te", "tel", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1800 },
+    /* Tajik */
+  { "tg", "tgk", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1807 },
+    /* Thai */
+  { "th", "tha", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1813 },
+    /* Tigrinya */
+  { "ti", "tir", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1818 },
+    /* Turkmen */
+  { "tk", "tuk", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1827 },
+    /* Tagalog */
+  { "tl", "tgl", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1835 },
+    /* Tswana */
+  { "tn", "tsn", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1843 },
+    /* Tonga (Tonga Islands) */
+  { "to", "ton", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1850 },
+    /* Turkish */
+  { "tr", "tur", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1872 },
+    /* Tsonga */
+  { "ts", "tso", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1880 },
+    /* Tatar */
+  { "tt", "tat", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1887 },
+    /* Twi */
+  { "tw", "twi", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1893 },
+    /* Tahitian */
+  { "ty", "tah", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1897 },
+    /* Uighur; Uyghur */
+  { "ug", "uig", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1906 },
+    /* Ukrainian */
+  { "uk", "ukr", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1921 },
+    /* Urdu */
+  { "ur", "urd", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1931 },
+    /* Uzbek */
+  { "uz", "uzb", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1936 },
+    /* Venda */
+  { "ve", "ven", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1942 },
+    /* Vietnamese */
+  { "vi", "vie", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1948 },
+    /* Volap?k */
+  { "vo", "vol", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1959 },
+    /* Walloon */
+  { "wa", "wln", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1968 },
+    /* Wolof */
+  { "wo", "wol", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1976 },
+    /* Xhosa */
+  { "xh", "xho", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1982 },
+    /* Yiddish */
+  { "yi", "yid", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1988 },
+    /* Yoruba */
+  { "yo", "yor", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 1996 },
+    /* Zhuang; Chuang */
+  { "za", "zha", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 2003 },
+    /* Chinese */
+  { "zh", "zho", ISO_639_FLAG_2T, 2018 },
+  { "zh", "chi", ISO_639_FLAG_2B, 2018 },
+    /* Zulu */
+  { "zu", "zul", ISO_639_FLAG_2T | ISO_639_FLAG_2B, 2026 },
+};
+
+static const gchar iso_639_names[] =
+  "Afar\000Abkhazian\000Avestan\000Afrikaans\000Akan\000Amharic\000Aragonese"
+  "\000Arabic\000Assamese\000Avaric\000Aymara\000Azerbaijani\000Bashkir\000B"
+  "elarusian\000Bulgarian\000Bihari languages\000Bislama\000Bambara\000Benga"
+  "li\000Tibetan\000Breton\000Bosnian\000Catalan; Valencian\000Chechen\000Ch"
+  "amorro\000Corsican\000Cree\000Czech\000Church Slavic; Old Slavonic; Churc"
+  "h Slavonic; Old Bulgarian; Old Church Slavonic\000Chuvash\000Welsh\000Dan"
+  "ish\000German\000Divehi; Dhivehi; Maldivian\000Dzongkha\000Ewe\000Greek, "
+  "Modern (1453-)\000English\000Esperanto\000Spanish; Castilian\000Estonian"
+  "\000Basque\000Persian\000Fulah\000Finnish\000Fijian\000Faroese\000French"
+  "\000Western Frisian\000Irish\000Gaelic; Scottish Gaelic\000Galician\000Gu"
+  "arani\000Gujarati\000Manx\000Hausa\000Hebrew\000Hindi\000Hiri Motu\000Cro"
+  "atian\000Haitian; Haitian Creole\000Hungarian\000Armenian\000Herero\000In"
+  "terlingua (International Auxiliary Language Association)\000Indonesian"
+  "\000Interlingue; Occidental\000Igbo\000Sichuan Yi; Nuosu\000Inupiaq\000Id"
+  "o\000Icelandic\000Italian\000Inuktitut\000Japanese\000Javanese\000Georgia"
+  "n\000Kongo\000Kikuyu; Gikuyu\000Kuanyama; Kwanyama\000Kazakh\000Kalaallis"
+  "ut; Greenlandic\000Central Khmer\000Kannada\000Korean\000Kanuri\000Kashmi"
+  "ri\000Kurdish\000Komi\000Cornish\000Kirghiz; Kyrgyz\000Latin\000Luxembour"
+  "gish; Letzeburgesch\000Ganda\000Limburgan; Limburger; Limburgish\000Linga"
+  "la\000Lao\000Lithuanian\000Luba-Katanga\000Latvian\000Malagasy\000Marshal"
+  "lese\000Maori\000Macedonian\000Malayalam\000Mongolian\000Moldavian; Moldo"
+  "van\000Marathi\000Malay\000Maltese\000Burmese\000Nauru\000Bokm\303\245l, "
+  "Norwegian; Norwegian Bokm\303\245l\000Ndebele, North; North Ndebele\000Ne"
+  "pali\000Ndonga\000Dutch; Flemish\000Norwegian Nynorsk; Nynorsk, Norwegian"
+  "\000Norwegian\000Ndebele, South; South Ndebele\000Navajo; Navaho\000Chich"
+  "ewa; Chewa; Nyanja\000Occitan (post 1500)\000Ojibwa\000Oromo\000Oriya\000"
+  "Ossetian; Ossetic\000Panjabi; Punjabi\000Pali\000Polish\000Pushto; Pashto"
+  "\000Portuguese\000Quechua\000Romansh\000Rundi\000Romanian\000Russian\000K"
+  "inyarwanda\000Sanskrit\000Sardinian\000Sindhi\000Northern Sami\000Sango"
+  "\000Sinhala; Sinhalese\000Slovak\000Slovenian\000Samoan\000Shona\000Somal"
+  "i\000Albanian\000Serbian\000Swati\000Sotho, Southern\000Sundanese\000Swed"
+  "ish\000Swahili\000Tamil\000Telugu\000Tajik\000Thai\000Tigrinya\000Turkmen"
+  "\000Tagalog\000Tswana\000Tonga (Tonga Islands)\000Turkish\000Tsonga\000Ta"
+  "tar\000Twi\000Tahitian\000Uighur; Uyghur\000Ukrainian\000Urdu\000Uzbek"
+  "\000Venda\000Vietnamese\000Volap\303\274k\000Walloon\000Wolof\000Xhosa"
+  "\000Yiddish\000Yoruba\000Zhuang; Chuang\000Chinese\000Zulu";
+
+/* *INDENT-ON* */
diff --git a/gst-libs/gst/tag/lang.c b/gst-libs/gst/tag/lang.c
new file mode 100644
index 0000000..a0838fe
--- /dev/null
+++ b/gst-libs/gst/tag/lang.c
@@ -0,0 +1,494 @@
+/* GStreamer language codes and names utility functions
+ * Copyright (C) 2009 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttaglanguagecodes
+ * @short_description: mappings for ISO-639 language codes and names
+ * @see_also: #GstTagList
+ *
+ * <refsect2>
+ * <para>
+ * Provides helper functions to convert between the various ISO-639 language
+ * codes, and to map language codes to language names.
+ * </para>
+ * </refsect2>
+ */
+
+/* FIXME 0.11: maybe switch to ISO-639-2 everywhere incl. GST_TAG_LANGUAGE? */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#undef GETTEXT_PACKAGE
+#define GETTEXT_PACKAGE "iso_639"
+
+#define ISO_639_XML_PATH ISO_CODES_PREFIX "/share/xml/iso-codes/iso_639.xml"
+#define ISO_CODES_LOCALEDIR ISO_CODES_PREFIX "/share/locale"
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/gst.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "tag.h"
+#include "lang-tables.dat"
+
+#ifndef GST_DISABLE_GST_DEBUG
+
+#define GST_CAT_DEFAULT ensure_debug_category()
+
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("tag-langcodes", 0,
+        "GstTag language codes and names");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+
+#else
+
+#define ensure_debug_category() /* NOOP */
+
+#endif /* GST_DISABLE_GST_DEBUG */
+
+/* ------------------------------------------------------------------------- */
+
+/* Loading and initing */
+
+#if defined(HAVE_ISO_CODES)
+static const gchar *
+get_val (const gchar ** names, const gchar ** vals, const gchar * name)
+{
+  while (names != NULL && *names != NULL) {
+    if (strcmp (*names, name) == 0)
+      return *vals;
+    ++names;
+    ++vals;
+  }
+  return NULL;
+}
+
+static void
+parse_start_element (GMarkupParseContext * ctx, const gchar * element_name,
+    const gchar ** attr_names, const gchar ** attr_vals,
+    gpointer user_data, GError ** error)
+{
+  GHashTable *ht = (GHashTable *) user_data;
+  const gchar *c1, *c2t, *c2b, *name, *tname;
+
+  if (strcmp (element_name, "iso_639_entry") != 0)
+    return;
+
+  c1 = get_val (attr_names, attr_vals, "iso_639_1_code");
+
+  /* only interested in languages with an ISO 639-1 code for now */
+  if (c1 == NULL)
+    return;
+
+  c2t = get_val (attr_names, attr_vals, "iso_639_2T_code");
+  c2b = get_val (attr_names, attr_vals, "iso_639_2B_code");
+  name = get_val (attr_names, attr_vals, "name");
+
+  if (c2t == NULL || c2b == NULL || name == NULL) {
+    GST_WARNING ("broken iso_639.xml entry: c2t=%p, c2b=%p, name=%p", c2t,
+        c2b, name);
+    return;
+  }
+
+  /* translate language name */
+  tname = _(name);
+
+  /* if no translation was found, it will return the input string, which we
+   * we don't want to put into the hash table because it will be freed again */
+  if (G_UNLIKELY (tname == name))
+    tname = g_intern_string (name);
+
+  /* now overwrite default/fallback mappings with names in locale language */
+  g_hash_table_replace (ht, (gpointer) g_intern_string (c1), (gpointer) tname);
+  g_hash_table_replace (ht, (gpointer) g_intern_string (c2b), (gpointer) tname);
+  if (strcmp (c2t, c2b) != 0) {
+    g_hash_table_replace (ht, (gpointer) g_intern_string (c2t),
+        (gpointer) tname);
+  }
+
+  GST_LOG ("%s %s %s : %s - %s", c1, c2t, c2b, name, tname);
+}
+
+static void
+gst_tag_load_iso_639_xml (GHashTable * ht)
+{
+  GMappedFile *f;
+  GError *err = NULL;
+  gchar *xml_data;
+  gsize xml_len;
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      ISO_CODES_LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, ISO_CODES_LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  f = g_mapped_file_new (ISO_639_XML_PATH, FALSE, NULL);
+  if (f != NULL) {
+    xml_data = (gchar *) g_mapped_file_get_contents (f);
+    xml_len = g_mapped_file_get_length (f);
+  } else {
+    if (!g_file_get_contents (ISO_639_XML_PATH, &xml_data, &xml_len, &err)) {
+      GST_WARNING ("Could not read %s: %s", ISO_639_XML_PATH, err->message);
+      g_error_free (err);
+      return;
+    }
+  }
+
+  if (g_utf8_validate (xml_data, xml_len, NULL)) {
+    GMarkupParser xml_parser = { parse_start_element, NULL, NULL, NULL, NULL };
+    GMarkupParseContext *ctx;
+
+    ctx = g_markup_parse_context_new (&xml_parser, 0, ht, NULL);
+    if (!g_markup_parse_context_parse (ctx, xml_data, xml_len, &err)) {
+      GST_WARNING ("Parsing iso_639.xml failed: %s", err->message);
+      g_error_free (err);
+    }
+    g_markup_parse_context_free (ctx);
+  } else {
+    GST_WARNING ("iso_639.xml file is not valid UTF-8");
+    GST_MEMDUMP ("iso_639.xml file", (guint8 *) xml_data, xml_len);
+  }
+
+  /* ... and clean up */
+  if (f != NULL)
+    g_mapped_file_unref (f);
+  else
+    g_free (xml_data);
+}
+#endif /* HAVE_ISO_CODES */
+
+static GHashTable *
+gst_tag_get_iso_639_ht (void)
+{
+  static gsize once_val = 0;
+  int i;
+
+  if (g_once_init_enter (&once_val)) {
+    GHashTable *ht;
+    gsize done_val;
+
+    GST_MEMDUMP ("iso 639 language names (internal default/fallback)",
+        (guint8 *) iso_639_names, sizeof (iso_639_names));
+
+    /* maps code -> language name; all strings are either interned strings
+     * or const static strings from lang-table.c */
+    ht = g_hash_table_new (g_str_hash, g_str_equal);
+
+    /* set up default/fallback mappings */
+    for (i = 0; i < G_N_ELEMENTS (iso_639_codes); ++i) {
+      GST_LOG ("%3d %s %s %c%c 0x%04x  %s", i, iso_639_codes[i].iso_639_1,
+          iso_639_codes[i].iso_639_2,
+          ((iso_639_codes[i].flags & ISO_639_FLAG_2B)) ? 'B' : '.',
+          ((iso_639_codes[i].flags & ISO_639_FLAG_2T)) ? 'T' : '.',
+          iso_639_codes[i].name_offset,
+          iso_639_names + iso_639_codes[i].name_offset);
+
+#ifdef HAVE_ISO_CODES
+      /* intern these in order to minimise allocations when interning strings
+       * read from the xml file later */
+      g_intern_static_string (iso_639_codes[i].iso_639_1);
+      g_intern_static_string (iso_639_codes[i].iso_639_2);
+      g_intern_static_string (iso_639_names + iso_639_codes[i].name_offset);
+#endif
+
+      /* and add default mapping (these strings are always valid) */
+      g_hash_table_insert (ht, (gpointer) iso_639_codes[i].iso_639_1,
+          (gpointer) (iso_639_names + iso_639_codes[i].name_offset));
+      g_hash_table_insert (ht, (gpointer) iso_639_codes[i].iso_639_2,
+          (gpointer) (iso_639_names + iso_639_codes[i].name_offset));
+    }
+
+#ifdef HAVE_ISO_CODES
+    {
+      GstClockTime ts = gst_util_get_timestamp ();
+
+      gst_tag_load_iso_639_xml (ht);
+
+      ts = gst_util_get_timestamp () - ts;
+      GST_INFO ("iso_639.xml loading took %.2gms", (double) ts / GST_MSECOND);
+    }
+#else
+    GST_INFO ("iso-codes disabled or not available");
+#endif
+
+    done_val = (gsize) ht;
+    g_once_init_leave (&once_val, done_val);
+  }
+
+  return (GHashTable *) once_val;
+}
+
+/* ------------------------------------------------------------------------- */
+
+static int
+qsort_strcmp_func (const void *p1, const void *p2)
+{
+  return strcmp (*(char *const *) p1, *(char *const *) p2);
+}
+
+/**
+ * gst_tag_get_language_codes:
+ *
+ * Returns a list of known language codes (in form of two-letter ISO-639-1
+ * codes). This is useful for UIs to build a list of available languages for
+ * tagging purposes (e.g. to tag an audio track appropriately in a video or
+ * audio editor).
+ *
+ * Returns: NULL-terminated string array with two-letter language codes. Free
+ *     with g_strfreev() when no longer needed.
+ *
+ * Since: 0.10.26
+ */
+gchar **
+gst_tag_get_language_codes (void)
+{
+  GHashTableIter iter;
+  GHashTable *ht;
+  gpointer key;
+  gchar **codes;
+  int i;
+
+  ensure_debug_category ();
+
+  ht = gst_tag_get_iso_639_ht ();
+
+  /* we have at least two keys for each language (-1 code and -2 code) */
+  codes = g_new (gchar *, (g_hash_table_size (ht) / 2) + 1);
+
+  i = 0;
+  g_hash_table_iter_init (&iter, ht);
+  while (g_hash_table_iter_next (&iter, &key, NULL)) {
+    const gchar *lang_code = key;
+
+    if (strlen (lang_code) == 2) {
+      codes[i] = g_strdup (lang_code);
+      ++i;
+    }
+  }
+  codes[i] = NULL;
+
+  /* be nice and sort the list */
+  qsort (&codes[0], i, sizeof (gchar *), qsort_strcmp_func);
+
+  return codes;
+}
+
+/**
+ * gst_tag_get_language_name:
+ * @language_code: two or three-letter ISO-639 language code
+ *
+ * Returns the name of the language given an ISO-639 language code, such
+ * as often found in a GST_TAG_LANGUAGE tag. The name will be translated
+ * according to the current locale (if the library was built against the
+ * iso-codes package, otherwise the English name will be returned).
+ *
+ * Language codes are case-sensitive and expected to be lower case.
+ *
+ * Returns: language name in UTF-8 format, or NULL if @language_code could
+ *     not be mapped to a language name. The returned string must not be
+ *     modified and does not need to freed; it will stay valid until the
+ *     application is terminated.
+ *
+ * Since: 0.10.26
+ */
+const gchar *
+gst_tag_get_language_name (const gchar * language_code)
+{
+  const gchar *lang_name;
+  GHashTable *ht;
+
+  g_return_val_if_fail (language_code != NULL, NULL);
+
+  ensure_debug_category ();
+
+  ht = gst_tag_get_iso_639_ht ();
+
+  lang_name = g_hash_table_lookup (ht, (gpointer) language_code);
+  GST_LOG ("%s -> %s", language_code, GST_STR_NULL (lang_name));
+
+  return lang_name;
+}
+
+/**
+ * gst_tag_get_language_code_iso_639_1:
+ * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de")
+ *
+ * Returns two-letter ISO-639-1 language code given a three-letter ISO-639-2
+ * language code or two-letter ISO-639-1 language code (both are accepted for
+ * convenience).
+ *
+ * Language codes are case-sensitive and expected to be lower case.
+ *
+ * Returns: two-letter ISO-639-1 language code string that maps to @lang_code,
+ *     or NULL if no mapping is known. The returned string must not be
+ *     modified or freed.
+ *
+ * Since: 0.10.26
+ */
+const gchar *
+gst_tag_get_language_code_iso_639_1 (const gchar * lang_code)
+{
+  const gchar *c = NULL;
+  int i;
+
+  g_return_val_if_fail (lang_code != NULL, NULL);
+
+  ensure_debug_category ();
+
+  /* FIXME: we are being a bit inconsistent here in the sense that will only
+   * map the language codes from our static table. Theoretically the iso-codes
+   * XML file might have had additional codes that are now in the hash table.
+   * We keep it simple for now and don't waste memory on additional tables. */
+  for (i = 0; i < G_N_ELEMENTS (iso_639_codes); ++i) {
+    /* we check both codes here, so function can be used in a more versatile
+     * way, to convert a language tag to a two-letter language code and/or
+     * verify an existing code */
+    if (strcmp (lang_code, iso_639_codes[i].iso_639_1) == 0 ||
+        strcmp (lang_code, iso_639_codes[i].iso_639_2) == 0) {
+      c = iso_639_codes[i].iso_639_1;
+      break;
+    }
+  }
+
+  GST_LOG ("%s -> %s", lang_code, GST_STR_NULL (c));
+
+  return c;
+}
+
+static const gchar *
+gst_tag_get_language_code_iso_639_2X (const gchar * lang_code, guint8 flags)
+{
+  int i;
+
+  /* FIXME: we are being a bit inconsistent here in the sense that we will only
+   * map the language codes from our static table. Theoretically the iso-codes
+   * XML file might have had additional codes that are now in the hash table.
+   * We keep it simple for now and don't waste memory on additional tables.
+   * Also, we currently only parse the iso_639.xml file if language names or
+   * a list of all codes is requested, and it'd be nice to keep it like that. */
+  for (i = 0; i < G_N_ELEMENTS (iso_639_codes); ++i) {
+    /* we check both codes here, so function can be used in a more versatile
+     * way, to convert a language tag to a three-letter language code and/or
+     * verify an existing code */
+    if (strcmp (lang_code, iso_639_codes[i].iso_639_1) == 0 ||
+        strcmp (lang_code, iso_639_codes[i].iso_639_2) == 0) {
+      if ((iso_639_codes[i].flags & flags) == flags) {
+        return iso_639_codes[i].iso_639_2;
+      } else if (i > 0 && (iso_639_codes[i - 1].flags & flags) == flags &&
+          iso_639_codes[i].name_offset == iso_639_codes[i - 1].name_offset) {
+        return iso_639_codes[i - 1].iso_639_2;
+      } else if ((i + 1) < G_N_ELEMENTS (iso_639_codes) &&
+          (iso_639_codes[i + 1].flags & flags) == flags &&
+          iso_639_codes[i].name_offset == iso_639_codes[i + 1].name_offset) {
+        return iso_639_codes[i + 1].iso_639_2;
+      }
+    }
+  }
+  return NULL;
+}
+
+/**
+ * gst_tag_get_language_code_iso_639_2T:
+ * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de")
+ *
+ * Returns three-letter ISO-639-2 "terminological" language code given a
+ * two-letter ISO-639-1 language code or a three-letter ISO-639-2 language
+ * code (both are accepted for convenience).
+ *
+ * The "terminological" code is derived from the local name of the language
+ * (e.g. "deu" for German instead of "ger"). In most scenarios, the
+ * "terminological" codes are prefered over the "bibliographic" ones.
+ *
+ * Language codes are case-sensitive and expected to be lower case.
+ *
+ * Returns: three-letter ISO-639-2 language code string that maps to @lang_code,
+ *     or NULL if no mapping is known. The returned string must not be
+ *     modified or freed.
+ *
+ * Since: 0.10.26
+ */
+const gchar *
+gst_tag_get_language_code_iso_639_2T (const gchar * lang_code)
+{
+  const gchar *c;
+
+  g_return_val_if_fail (lang_code != NULL, NULL);
+
+  ensure_debug_category ();
+
+  c = gst_tag_get_language_code_iso_639_2X (lang_code, ISO_639_FLAG_2T);
+
+  GST_LOG ("%s -> %s", lang_code, GST_STR_NULL (c));
+
+  return c;
+}
+
+/**
+ * gst_tag_get_language_code_iso_639_2B:
+ * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de")
+ *
+ * Returns three-letter ISO-639-2 "bibliographic" language code given a
+ * two-letter ISO-639-1 language code or a three-letter ISO-639-2 language
+ * code (both are accepted for convenience).
+ *
+ * The "bibliographic" code is derived from the English name of the language
+ * (e.g. "ger" for German instead of "de" or "deu"). In most scenarios, the
+ * "terminological" codes are prefered.
+ *
+ * Language codes are case-sensitive and expected to be lower case.
+ *
+ * Returns: three-letter ISO-639-2 language code string that maps to @lang_code,
+ *     or NULL if no mapping is known. The returned string must not be
+ *     modified or freed.
+ *
+ * Since: 0.10.26
+ */
+const gchar *
+gst_tag_get_language_code_iso_639_2B (const gchar * lang_code)
+{
+  const gchar *c;
+
+  g_return_val_if_fail (lang_code != NULL, NULL);
+
+  ensure_debug_category ();
+
+  c = gst_tag_get_language_code_iso_639_2X (lang_code, ISO_639_FLAG_2B);
+
+  GST_LOG ("%s -> %s", lang_code, GST_STR_NULL (c));
+
+  return c;
+}
diff --git a/gst-libs/gst/tag/license-translations.dict b/gst-libs/gst/tag/license-translations.dict
new file mode 100644
index 0000000..1fa8ce4
--- /dev/null
+++ b/gst-libs/gst/tag/license-translations.dict
Binary files differ
diff --git a/gst-libs/gst/tag/licenses-tables.dat b/gst-libs/gst/tag/licenses-tables.dat
new file mode 100644
index 0000000..cdf254f
--- /dev/null
+++ b/gst-libs/gst/tag/licenses-tables.dat
@@ -0,0 +1,467 @@
+/* created by mklicensestables.c */
+static const struct {
+  /* jurisdictions in addition to the generic version, bitfield */
+  const guint64             jurisdictions;
+  const GstTagLicenseFlags  flags;
+  /* the bit after http://creativecommons.org/licenses/ */
+  const gchar               ref[18];
+  gint16                    title_idx;  /* index in string table */
+  gint16                    desc_idx;   /* index in string table */
+} licenses[] = {
+  /*  0 http://creativecommons.org/licenses/GPL/2.0/ */
+  { 0x8000000000000000, 0x02000d07, "GPL/2.0/", 0, -1 },
+  /*  1 http://creativecommons.org/licenses/LGPL/2.1/ */
+  { 0x8000000000000000, 0x02000d07, "LGPL/2.1/", 4, -1 },
+  /*  2 http://creativecommons.org/licenses/by-nc-nd/2.0/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/at/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/au/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/be/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/br/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/ca/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/cl/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/de/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/es/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/hr/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/it/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/kr/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/nl/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/pl/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/tw/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/uk/
+   *  2 http://creativecommons.org/licenses/by-nc-nd/2.0/za/
+   *  2 http://creativecommons.org/licenses/by-nd-nc/2.0/jp/ */
+  { 0x8000002c2871a96e, 0x01010303, "by-nc-nd/2.0/", 9, -1 },
+  /*  3 http://creativecommons.org/licenses/by-nc-nd/2.1/au/ */
+  { 0x0000000000000004, 0x01010303, "by-nc-nd/2.1/", 9, -1 },
+  /*  4 http://creativecommons.org/licenses/by-nc-nd/2.1/es/ */
+  { 0x0000000000002000, 0x01010303, "by-nc-nd/2.1/", 9, -1 },
+  /*  5 http://creativecommons.org/licenses/by-nc-nd/2.1/jp/ */
+  { 0x0000000000200000, 0x01010303, "by-nc-nd/2.1/", 9, -1 },
+  /*  6 http://creativecommons.org/licenses/by-nc-nd/2.5/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/ar/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/au/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/bg/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/br/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/ca/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/ch/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/cn/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/co/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/dk/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/es/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/hr/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/hu/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/il/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/in/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/it/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/mk/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/mt/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/mx/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/my/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/nl/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/pe/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/pl/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/pt/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/scotland/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/se/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/si/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/tw/
+   *  6 http://creativecommons.org/licenses/by-nc-nd/2.5/za/ */
+  { 0x80000027ff9f36f5, 0x01010303, "by-nc-nd/2.5/", 9, -1 },
+  /*  7 http://creativecommons.org/licenses/by-nc-nd/3.0/
+   *  7 http://creativecommons.org/licenses/by-nc-nd/3.0/us/ */
+  { 0x8000001000000000, 0x01010303, "by-nc-nd/3.0/", 9, -1 },
+  /*  8 http://creativecommons.org/licenses/by-nc-sa/1.0/
+   *  8 http://creativecommons.org/licenses/by-nc-sa/1.0/fi/
+   *  8 http://creativecommons.org/licenses/by-nc-sa/1.0/il/
+   *  8 http://creativecommons.org/licenses/by-nc-sa/1.0/nl/ */
+  { 0x8000000008044000, 0x01010707, "by-nc-sa/1.0/", 44, -1 },
+  /*  9 http://creativecommons.org/licenses/by-nc-sa/2.0/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/at/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/au/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/be/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/br/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/ca/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/cl/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/de/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/es/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/hr/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/it/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/jp/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/kr/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/nl/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/pl/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/tw/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/uk/
+   *  9 http://creativecommons.org/licenses/by-nc-sa/2.0/za/ */
+  { 0x8000002c2871a96e, 0x01010707, "by-nc-sa/2.0/", 44, -1 },
+  /* 10 http://creativecommons.org/licenses/by-nc-sa/2.1/au/ */
+  { 0x0000000000000004, 0x01010707, "by-nc-sa/2.1/", 44, -1 },
+  /* 11 http://creativecommons.org/licenses/by-nc-sa/2.1/es/ */
+  { 0x0000000000002000, 0x01010707, "by-nc-sa/2.1/", 44, -1 },
+  /* 12 http://creativecommons.org/licenses/by-nc-sa/2.1/jp/ */
+  { 0x0000000000200000, 0x01010707, "by-nc-sa/2.1/", 44, -1 },
+  /* 13 http://creativecommons.org/licenses/by-nc-sa/2.5/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/ar/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/au/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/bg/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/br/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/ca/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/ch/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/cn/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/co/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/dk/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/es/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/hr/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/hu/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/il/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/in/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/it/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/mk/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/mt/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/mx/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/my/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/nl/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/pl/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/pt/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/se/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/si/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/tw/
+   * 13 http://creativecommons.org/licenses/by-nc-sa/2.5/za/ */
+  { 0x800000277f9f36f5, 0x01010707, "by-nc-sa/2.5/", 44, -1 },
+  /* 14 http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/ */
+  { 0x0000000080000000, 0x01010703, "by-nc-sa/2.5/", 44, -1 },
+  /* 15 http://creativecommons.org/licenses/by-nc-sa/3.0/
+   * 15 http://creativecommons.org/licenses/by-nc-sa/3.0/us/ */
+  { 0x8000001000000000, 0x01010707, "by-nc-sa/3.0/", 44, -1 },
+  /* 16 http://creativecommons.org/licenses/by-nc/1.0/
+   * 16 http://creativecommons.org/licenses/by-nc/1.0/fi/
+   * 16 http://creativecommons.org/licenses/by-nc/1.0/il/
+   * 16 http://creativecommons.org/licenses/by-nc/1.0/nl/ */
+  { 0x8000000008044000, 0x01010307, "by-nc/1.0/", 81, -1 },
+  /* 17 http://creativecommons.org/licenses/by-nc/2.0/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/at/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/au/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/be/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/br/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/ca/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/cl/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/de/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/es/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/fr/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/hr/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/it/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/jp/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/kr/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/nl/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/pl/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/tw/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/uk/
+   * 17 http://creativecommons.org/licenses/by-nc/2.0/za/ */
+  { 0x8000002c2871a96e, 0x01010307, "by-nc/2.0/", 81, -1 },
+  /* 18 http://creativecommons.org/licenses/by-nc/2.1/au/ */
+  { 0x0000000000000004, 0x01010307, "by-nc/2.1/", 81, -1 },
+  /* 19 http://creativecommons.org/licenses/by-nc/2.1/es/ */
+  { 0x0000000000002000, 0x01010307, "by-nc/2.1/", 81, -1 },
+  /* 20 http://creativecommons.org/licenses/by-nc/2.1/jp/ */
+  { 0x0000000000200000, 0x01010307, "by-nc/2.1/", 81, -1 },
+  /* 21 http://creativecommons.org/licenses/by-nc/2.5/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/ar/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/au/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/bg/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/br/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/ca/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/ch/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/cn/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/co/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/dk/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/es/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/hr/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/hu/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/il/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/in/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/it/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/mk/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/mt/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/mx/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/my/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/nl/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/pe/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/pl/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/pt/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/se/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/si/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/tw/
+   * 21 http://creativecommons.org/licenses/by-nc/2.5/za/ */
+  { 0x800000277f9f36f5, 0x01010307, "by-nc/2.5/", 81, -1 },
+  /* 22 http://creativecommons.org/licenses/by-nc/2.5/scotland/ */
+  { 0x0000000080000000, 0x01010303, "by-nc/2.5/", 81, -1 },
+  /* 23 http://creativecommons.org/licenses/by-nc/3.0/
+   * 23 http://creativecommons.org/licenses/by-nc/3.0/us/ */
+  { 0x8000001000000000, 0x01010307, "by-nc/3.0/", 81, -1 },
+  /* 24 http://creativecommons.org/licenses/by-nd-nc/1.0/
+   * 24 http://creativecommons.org/licenses/by-nd-nc/1.0/fi/
+   * 24 http://creativecommons.org/licenses/by-nd-nc/1.0/il/
+   * 24 http://creativecommons.org/licenses/by-nd-nc/1.0/nl/ */
+  { 0x8000000008044000, 0x01010303, "by-nd-nc/1.0/", 107, -1 },
+  /* 25 http://creativecommons.org/licenses/by-nd-nc/2.0/jp/ */
+  { 0x0000000000200000, 0x01010303, "by-nd-nc/2.0/", 107, -1 },
+  /* 26 http://creativecommons.org/licenses/by-nd/1.0/
+   * 26 http://creativecommons.org/licenses/by-nd/1.0/fi/
+   * 26 http://creativecommons.org/licenses/by-nd/1.0/il/
+   * 26 http://creativecommons.org/licenses/by-nd/1.0/nl/ */
+  { 0x8000000008044000, 0x01000303, "by-nd/1.0/", 142, -1 },
+  /* 27 http://creativecommons.org/licenses/by-nd/2.0/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/at/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/au/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/be/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/br/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/ca/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/cl/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/de/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/es/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/fr/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/hr/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/it/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/jp/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/kr/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/nl/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/pl/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/tw/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/uk/
+   * 27 http://creativecommons.org/licenses/by-nd/2.0/za/ */
+  { 0x8000002c2871a96e, 0x01000303, "by-nd/2.0/", 142, -1 },
+  /* 28 http://creativecommons.org/licenses/by-nd/2.1/au/ */
+  { 0x0000000000000004, 0x01000303, "by-nd/2.1/", 142, -1 },
+  /* 29 http://creativecommons.org/licenses/by-nd/2.1/es/ */
+  { 0x0000000000002000, 0x01000303, "by-nd/2.1/", 142, -1 },
+  /* 30 http://creativecommons.org/licenses/by-nd/2.1/jp/ */
+  { 0x0000000000200000, 0x01000303, "by-nd/2.1/", 142, -1 },
+  /* 31 http://creativecommons.org/licenses/by-nd/2.5/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/ar/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/au/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/bg/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/br/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/ca/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/ch/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/cn/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/co/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/dk/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/es/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/hr/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/hu/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/il/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/in/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/it/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/mk/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/mt/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/mx/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/my/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/nl/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/pe/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/pl/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/pt/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/scotland/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/se/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/si/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/tw/
+   * 31 http://creativecommons.org/licenses/by-nd/2.5/za/ */
+  { 0x80000027ff9f36f5, 0x01000303, "by-nd/2.5/", 142, -1 },
+  /* 32 http://creativecommons.org/licenses/by-nd/3.0/
+   * 32 http://creativecommons.org/licenses/by-nd/3.0/us/ */
+  { 0x8000001000000000, 0x01000303, "by-nd/3.0/", 142, -1 },
+  /* 33 http://creativecommons.org/licenses/by-sa/1.0/
+   * 33 http://creativecommons.org/licenses/by-sa/1.0/fi/
+   * 33 http://creativecommons.org/licenses/by-sa/1.0/il/
+   * 33 http://creativecommons.org/licenses/by-sa/1.0/nl/ */
+  { 0x8000000008044000, 0x01000707, "by-sa/1.0/", 163, -1 },
+  /* 34 http://creativecommons.org/licenses/by-sa/2.0/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/at/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/au/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/be/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/br/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/ca/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/cl/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/de/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/es/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/fr/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/hr/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/it/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/jp/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/kr/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/nl/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/pl/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/tw/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/uk/
+   * 34 http://creativecommons.org/licenses/by-sa/2.0/za/ */
+  { 0x8000002c2871a96e, 0x01000707, "by-sa/2.0/", 163, -1 },
+  /* 35 http://creativecommons.org/licenses/by-sa/2.1/au/ */
+  { 0x0000000000000004, 0x01000707, "by-sa/2.1/", 163, -1 },
+  /* 36 http://creativecommons.org/licenses/by-sa/2.1/es/ */
+  { 0x0000000000002000, 0x01000707, "by-sa/2.1/", 163, -1 },
+  /* 37 http://creativecommons.org/licenses/by-sa/2.1/jp/ */
+  { 0x0000000000200000, 0x01000707, "by-sa/2.1/", 163, -1 },
+  /* 38 http://creativecommons.org/licenses/by-sa/2.5/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/ar/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/au/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/bg/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/br/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/ca/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/ch/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/cn/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/co/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/dk/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/es/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/hr/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/hu/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/il/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/in/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/it/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/mk/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/mt/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/mx/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/my/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/nl/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/pe/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/pl/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/pt/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/se/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/si/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/tw/
+   * 38 http://creativecommons.org/licenses/by-sa/2.5/za/ */
+  { 0x800000277f9f36f5, 0x01000707, "by-sa/2.5/", 163, -1 },
+  /* 39 http://creativecommons.org/licenses/by-sa/2.5/scotland/ */
+  { 0x0000000080000000, 0x01000703, "by-sa/2.5/", 163, -1 },
+  /* 40 http://creativecommons.org/licenses/by-sa/3.0/
+   * 40 http://creativecommons.org/licenses/by-sa/3.0/us/ */
+  { 0x8000001000000000, 0x01000707, "by-sa/3.0/", 163, -1 },
+  /* 41 http://creativecommons.org/licenses/by/1.0/
+   * 41 http://creativecommons.org/licenses/by/1.0/fi/
+   * 41 http://creativecommons.org/licenses/by/1.0/il/
+   * 41 http://creativecommons.org/licenses/by/1.0/nl/ */
+  { 0x8000000008044000, 0x01000307, "by/1.0/", 186, 198 },
+  /* 42 http://creativecommons.org/licenses/by/2.0/
+   * 42 http://creativecommons.org/licenses/by/2.0/at/
+   * 42 http://creativecommons.org/licenses/by/2.0/au/
+   * 42 http://creativecommons.org/licenses/by/2.0/be/
+   * 42 http://creativecommons.org/licenses/by/2.0/br/
+   * 42 http://creativecommons.org/licenses/by/2.0/ca/
+   * 42 http://creativecommons.org/licenses/by/2.0/cl/
+   * 42 http://creativecommons.org/licenses/by/2.0/de/
+   * 42 http://creativecommons.org/licenses/by/2.0/es/
+   * 42 http://creativecommons.org/licenses/by/2.0/fr/
+   * 42 http://creativecommons.org/licenses/by/2.0/hr/
+   * 42 http://creativecommons.org/licenses/by/2.0/it/
+   * 42 http://creativecommons.org/licenses/by/2.0/jp/
+   * 42 http://creativecommons.org/licenses/by/2.0/kr/
+   * 42 http://creativecommons.org/licenses/by/2.0/nl/
+   * 42 http://creativecommons.org/licenses/by/2.0/pl/
+   * 42 http://creativecommons.org/licenses/by/2.0/tw/
+   * 42 http://creativecommons.org/licenses/by/2.0/uk/
+   * 42 http://creativecommons.org/licenses/by/2.0/za/ */
+  { 0x8000002c2871a96e, 0x01000307, "by/2.0/", 186, 198 },
+  /* 43 http://creativecommons.org/licenses/by/2.1/au/ */
+  { 0x0000000000000004, 0x01000307, "by/2.1/", 186, 198 },
+  /* 44 http://creativecommons.org/licenses/by/2.1/es/ */
+  { 0x0000000000002000, 0x01000307, "by/2.1/", 186, 198 },
+  /* 45 http://creativecommons.org/licenses/by/2.1/jp/ */
+  { 0x0000000000200000, 0x01000307, "by/2.1/", 186, 198 },
+  /* 46 http://creativecommons.org/licenses/by/2.5/
+   * 46 http://creativecommons.org/licenses/by/2.5/ar/
+   * 46 http://creativecommons.org/licenses/by/2.5/au/
+   * 46 http://creativecommons.org/licenses/by/2.5/bg/
+   * 46 http://creativecommons.org/licenses/by/2.5/br/
+   * 46 http://creativecommons.org/licenses/by/2.5/ca/
+   * 46 http://creativecommons.org/licenses/by/2.5/ch/
+   * 46 http://creativecommons.org/licenses/by/2.5/cn/
+   * 46 http://creativecommons.org/licenses/by/2.5/co/
+   * 46 http://creativecommons.org/licenses/by/2.5/dk/
+   * 46 http://creativecommons.org/licenses/by/2.5/es/
+   * 46 http://creativecommons.org/licenses/by/2.5/hr/
+   * 46 http://creativecommons.org/licenses/by/2.5/hu/
+   * 46 http://creativecommons.org/licenses/by/2.5/il/
+   * 46 http://creativecommons.org/licenses/by/2.5/in/
+   * 46 http://creativecommons.org/licenses/by/2.5/it/
+   * 46 http://creativecommons.org/licenses/by/2.5/mk/
+   * 46 http://creativecommons.org/licenses/by/2.5/mt/
+   * 46 http://creativecommons.org/licenses/by/2.5/mx/
+   * 46 http://creativecommons.org/licenses/by/2.5/my/
+   * 46 http://creativecommons.org/licenses/by/2.5/nl/
+   * 46 http://creativecommons.org/licenses/by/2.5/pe/
+   * 46 http://creativecommons.org/licenses/by/2.5/pl/
+   * 46 http://creativecommons.org/licenses/by/2.5/pt/
+   * 46 http://creativecommons.org/licenses/by/2.5/se/
+   * 46 http://creativecommons.org/licenses/by/2.5/si/
+   * 46 http://creativecommons.org/licenses/by/2.5/tw/
+   * 46 http://creativecommons.org/licenses/by/2.5/za/ */
+  { 0x800000277f9f36f5, 0x01000307, "by/2.5/", 186, 198 },
+  /* 47 http://creativecommons.org/licenses/by/2.5/scotland/ */
+  { 0x0000000080000000, 0x01000303, "by/2.5/", 186, 198 },
+  /* 48 http://creativecommons.org/licenses/by/3.0/
+   * 48 http://creativecommons.org/licenses/by/3.0/us/ */
+  { 0x8000001000000000, 0x01000307, "by/3.0/", 186, 198 },
+  /* 49 http://creativecommons.org/licenses/devnations/2.0/ */
+  { 0x8000000000000000, 0x01020107, "devnations/2.0/", 277, -1 },
+  /* 50 http://creativecommons.org/licenses/nc-sa/1.0/
+   * 50 http://creativecommons.org/licenses/nc-sa/1.0/fi/
+   * 50 http://creativecommons.org/licenses/nc-sa/1.0/nl/ */
+  { 0x8000000008004000, 0x01010507, "nc-sa/1.0/", 296, -1 },
+  /* 51 http://creativecommons.org/licenses/nc-sa/2.0/jp/ */
+  { 0x0000000000200000, 0x01010507, "nc-sa/2.0/", 296, -1 },
+  /* 52 http://creativecommons.org/licenses/nc-sampling+/1.0/
+   * 52 http://creativecommons.org/licenses/nc-sampling+/1.0/tw/ */
+  { 0x8000000400000000, 0x01010307, "nc-sampling+/1.0/", 321, -1 },
+  /* 53 http://creativecommons.org/licenses/nc/1.0/
+   * 53 http://creativecommons.org/licenses/nc/1.0/fi/
+   * 53 http://creativecommons.org/licenses/nc/1.0/nl/ */
+  { 0x8000000008004000, 0x01010107, "nc/1.0/", 349, 363 },
+  /* 54 http://creativecommons.org/licenses/nc/2.0/jp/ */
+  { 0x0000000000200000, 0x01010107, "nc/2.0/", 349, 363 },
+  /* 55 http://creativecommons.org/licenses/nd-nc/1.0/
+   * 55 http://creativecommons.org/licenses/nd-nc/1.0/fi/
+   * 55 http://creativecommons.org/licenses/nd-nc/1.0/nl/ */
+  { 0x8000000008004000, 0x01010103, "nd-nc/1.0/", 547, -1 },
+  /* 56 http://creativecommons.org/licenses/nd-nc/2.0/jp/ */
+  { 0x0000000000200000, 0x01010103, "nd-nc/2.0/", 547, -1 },
+  /* 57 http://creativecommons.org/licenses/nd/1.0/
+   * 57 http://creativecommons.org/licenses/nd/1.0/fi/
+   * 57 http://creativecommons.org/licenses/nd/1.0/nl/ */
+  { 0x8000000008004000, 0x01000103, "nd/1.0/", 570, 579 },
+  /* 58 http://creativecommons.org/licenses/nd/2.0/jp/ */
+  { 0x0000000000200000, 0x01000103, "nd/2.0/", 570, 579 },
+  /* 59 http://creativecommons.org/licenses/publicdomain/ */
+  { 0x8000000000000000, 0x00000007, "publicdomain/", 712, -1 },
+  /* 60 http://creativecommons.org/licenses/sa/1.0/
+   * 60 http://creativecommons.org/licenses/sa/1.0/fi/
+   * 60 http://creativecommons.org/licenses/sa/1.0/nl/ */
+  { 0x8000000008004000, 0x01000507, "sa/1.0/", 726, 737 },
+  /* 61 http://creativecommons.org/licenses/sa/2.0/jp/ */
+  { 0x0000000000200000, 0x01000507, "sa/2.0/", 726, 737 },
+  /* 62 http://creativecommons.org/licenses/sampling+/1.0/
+   * 62 http://creativecommons.org/licenses/sampling+/1.0/br/
+   * 62 http://creativecommons.org/licenses/sampling+/1.0/de/
+   * 62 http://creativecommons.org/licenses/sampling+/1.0/tw/ */
+  { 0x8000000400000820, 0x0100030d, "sampling+/1.0/", 889, -1 },
+  /* 63 http://creativecommons.org/licenses/sampling/1.0/
+   * 63 http://creativecommons.org/licenses/sampling/1.0/br/
+   * 63 http://creativecommons.org/licenses/sampling/1.0/tw/ */
+  { 0x8000000400000020, 0x01000305, "sampling/1.0/", 903, -1 },
+};
+
+static const gchar license_strings[] =
+  "GPL\000LGPL\000Attribution-NonCommercial-NoDerivs\000Attribution-NonComme"
+  "rcial-ShareAlike\000Attribution-NonCommercial\000Attribution-NoDerivs-Non"
+  "Commercial\000Attribution-NoDerivs\000Attribution-ShareAlike\000Attributi"
+  "on\000You must attribute the work in the manner specified by the author o"
+  "r licensor.\000Developing Nations\000NonCommercial-ShareAlike\000NonComme"
+  "rcial Sampling Plus\000NonCommercial\000The licensor permits others to co"
+  "py, distribute and transmit the work. In return, licensees may not use th"
+  "e work for commercial purposes \342\200\224 unless they get the licensor'"
+  "s permission.\000NoDerivs-NonCommercial\000NoDerivs\000The licensor permi"
+  "ts others to copy, distribute and transmit only unaltered copies of the w"
+  "ork \342\200\224 not derivative works based on it.\000Public Domain\000Sh"
+  "areAlike\000The licensor permits others to distribute derivative works on"
+  "ly under the same license or one compatible with the one that governs the"
+  " licensor's work.\000Sampling Plus\000Sampling";
diff --git a/gst-libs/gst/tag/licenses.c b/gst-libs/gst/tag/licenses.c
new file mode 100644
index 0000000..f765cfd
--- /dev/null
+++ b/gst-libs/gst/tag/licenses.c
@@ -0,0 +1,632 @@
+/* GStreamer media licenses utility functions
+ * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttaglicenses
+ * @short_description: utility functions for Creative Commons licenses
+ * @see_also: #GstTagList
+ *
+ * Provides information about Creative Commons media licenses, which are
+ * often expressed in media files as a license URI in tags. Also useful
+ * for applications creating media files, in case the user wants to license
+ * the content under a Creative Commons license.
+ */
+
+/* FIXME: add API to check obsolete-ness / replace-by */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "tag.h"
+#include "licenses-tables.dat"
+
+#ifndef GST_DISABLE_GST_DEBUG
+
+#define GST_CAT_DEFAULT ensure_debug_category()
+
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("tag-licenses", 0,
+        "GstTag licenses");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+
+#else
+
+#define ensure_debug_category() /* NOOP */
+
+#endif /* GST_DISABLE_GST_DEBUG */
+
+/* -------------------------------------------------------------------------
+ *  Translations
+ * ------------------------------------------------------------------------- */
+
+#ifdef ENABLE_NLS
+static GVariant *
+gst_tag_get_license_translations_dictionary (void)
+{
+  static gsize var_gonce = 0;
+
+  if (g_once_init_enter (&var_gonce)) {
+    const gchar *dict_path;
+    GVariant *var = NULL;
+    GError *err = NULL;
+    gchar *data;
+    gsize len;
+
+    /* for gst-uninstalled */
+    dict_path = g_getenv ("GST_TAG_LICENSE_TRANSLATIONS_DICT");
+
+    if (dict_path == NULL)
+      dict_path = LICENSE_TRANSLATIONS_PATH;
+
+    GST_INFO ("Loading license translations from '%s'", dict_path);
+    if (g_file_get_contents (dict_path, &data, &len, &err)) {
+      var = g_variant_new_from_data (G_VARIANT_TYPE ("a{sa{ss}}"), data, len,
+          TRUE, (GDestroyNotify) g_free, data);
+    } else {
+      GST_WARNING ("Could not load translation dictionary %s", err->message);
+      g_error_free (err);
+      var = g_variant_new_array (G_VARIANT_TYPE ("{sa{ss}}"), NULL, 0);
+    }
+
+    g_once_init_leave (&var_gonce, (gsize) var);
+  }
+
+  return (GVariant *) var_gonce;
+}
+#endif
+
+#ifdef ENABLE_NLS
+
+#if !GLIB_CHECK_VERSION(2,28,0)
+static GVariant *
+gst_g_variant_lookup_value (GVariant * dictionary, const gchar * key,
+    const GVariantType * expected_type)
+{
+  GVariantIter iter;
+  GVariant *entry;
+  GVariant *value;
+
+  GST_ERROR ("here, using fallback");
+
+  g_assert (g_variant_is_of_type (dictionary, G_VARIANT_TYPE ("a{s*}")));
+  g_assert (expected_type != NULL);
+
+  g_variant_iter_init (&iter, dictionary);
+  while ((entry = g_variant_iter_next_value (&iter))) {
+    GVariant *entry_key;
+    gboolean matches;
+
+    entry_key = g_variant_get_child_value (entry, 0);
+    matches = strcmp (g_variant_get_string (entry_key, NULL), key) == 0;
+    g_variant_unref (entry_key);
+
+    if (matches)
+      break;
+
+    g_variant_unref (entry);
+  }
+
+  if (entry == NULL)
+    return NULL;
+
+  value = g_variant_get_child_value (entry, 1);
+  g_variant_unref (entry);
+
+  if (g_variant_is_of_type (value, G_VARIANT_TYPE_VARIANT)) {
+    GVariant *tmp;
+
+    tmp = g_variant_get_variant (value);
+    g_variant_unref (value);
+
+    if (expected_type && !g_variant_is_of_type (tmp, expected_type)) {
+      g_variant_unref (tmp);
+      tmp = NULL;
+    }
+
+    value = tmp;
+  }
+
+  g_assert (value == NULL || g_variant_is_of_type (value, expected_type));
+
+  return value;
+}
+
+#define g_variant_lookup_value gst_g_variant_lookup_value
+#endif /* !GLIB_CHECK_VERSION(2,28,0) */
+
+static gboolean
+gst_variant_lookup_string_value (GVariant * dict, const gchar * lang,
+    const gchar ** translation)
+{
+  GVariant *trans;
+
+  trans = g_variant_lookup_value (dict, lang, G_VARIANT_TYPE ("s"));
+  if (trans == NULL)
+    return FALSE;
+
+  *translation = g_variant_get_string (trans, NULL);
+  /* string will stay valid */
+  g_variant_unref (trans);
+  GST_TRACE ("Result: '%s' for language '%s'", *translation, lang);
+  return TRUE;
+}
+#endif
+
+static const gchar *
+gst_license_str_translate (const gchar * s)
+{
+#ifdef ENABLE_NLS
+  GVariant *v, *dict, *trans;
+
+  v = gst_tag_get_license_translations_dictionary ();
+  g_assert (v != NULL);
+
+  dict = g_variant_lookup_value (v, s, G_VARIANT_TYPE ("a{ss}"));
+  if (dict != NULL) {
+    const gchar *const *lang;
+    const gchar *env_lang;
+
+    /* for unit tests */
+    if ((env_lang = g_getenv ("GST_TAG_LICENSE_TRANSLATIONS_LANG"))) {
+      if (gst_variant_lookup_string_value (dict, env_lang, &s))
+        GST_TRACE ("Result: '%s' for forced language '%s'", s, env_lang);
+      goto beach;
+    }
+
+    lang = g_get_language_names ();
+    while (lang != NULL && *lang != NULL) {
+      GST_TRACE ("Looking up '%s' for language '%s'", s, *lang);
+      trans = g_variant_lookup_value (dict, *lang, G_VARIANT_TYPE ("s"));
+
+      if (trans != NULL) {
+        s = g_variant_get_string (trans, NULL);
+        /* s will stay valid */
+        g_variant_unref (trans);
+        GST_TRACE ("Result: '%s'", s);
+        break;
+      }
+
+      GST_TRACE ("No result for '%s' for language '%s'", s, *lang);
+      ++lang;
+    }
+
+  beach:
+
+    g_variant_unref (dict);
+  } else {
+    GST_WARNING ("No dict for string '%s'", s);
+  }
+#endif
+
+  return s;
+}
+
+/* -------------------------------------------------------------------------
+ *  License handling
+ * ------------------------------------------------------------------------- */
+
+#define CC_LICENSE_REF_PREFIX "http://creativecommons.org/licenses/"
+
+/* is this license 'generic' (and a base for any of the supported
+ * jurisdictions), or jurisdiction-specific only? */
+#define JURISDICTION_GENERIC (G_GUINT64_CONSTANT (1) << 63)
+
+static const gchar jurisdictions[] =
+    "ar\000at\000au\000be\000bg\000br\000ca\000ch\000cl\000cn\000co\000de\000"
+    "dk\000es\000fi\000fr\000hr\000hu\000il\000in\000it\000jp\000kr\000mk\000"
+    "mt\000mx\000my\000nl\000pe\000pl\000pt\000scotland\000se\000si\000tw\000"
+    "uk\000us\000za";
+
+/**
+ * gst_tag_get_licenses:
+ *
+ * Returns a list of known license references (in form of URIs). This is
+ * useful for UIs to build a list of available licenses for tagging purposes
+ * (e.g. to tag an audio track appropriately in a video or audio editor, or
+ * an image in a camera application).
+ *
+ * Returns: NULL-terminated array of license strings. Free with g_strfreev()
+ *     when no longer needed.
+ *
+ * Since: 0.10.36
+ */
+gchar **
+gst_tag_get_licenses (void)
+{
+  GPtrArray *arr;
+  int i;
+
+  arr = g_ptr_array_new ();
+  for (i = 0; i < G_N_ELEMENTS (licenses); ++i) {
+    const gchar *jurs;
+    gboolean is_generic;
+    guint64 jbits;
+    gchar *ref;
+
+    jbits = licenses[i].jurisdictions;
+    is_generic = (jbits & JURISDICTION_GENERIC) != 0;
+    if (is_generic) {
+      ref = g_strconcat (CC_LICENSE_REF_PREFIX, licenses[i].ref, NULL);
+      GST_LOG ("Adding %2d %s (generic)", i, ref);
+      g_ptr_array_add (arr, ref);
+      jbits &= ~JURISDICTION_GENERIC;
+    }
+
+    jurs = jurisdictions;
+    while (jbits != 0) {
+      if ((jbits & 1)) {
+        ref = g_strconcat (CC_LICENSE_REF_PREFIX, licenses[i].ref, jurs, "/",
+            NULL);
+        GST_LOG ("Adding %2d %s (%s: %s)", i, ref,
+            (is_generic) ? "derived" : "specific", jurs);
+        g_ptr_array_add (arr, ref);
+      }
+      g_assert (jurs < (jurisdictions + sizeof (jurisdictions)));
+      jurs += strlen (jurs) + 1;
+      jbits >>= 1;
+    }
+  }
+  g_ptr_array_add (arr, NULL);
+  return (gchar **) g_ptr_array_free (arr, FALSE);
+}
+
+static gint
+gst_tag_get_license_idx (const gchar * license_ref, const gchar ** jurisdiction)
+{
+  const gchar *ref, *jur_suffix;
+  int i;
+
+  GST_TRACE ("Looking up '%s'", license_ref);
+
+  if (!g_str_has_prefix (license_ref, CC_LICENSE_REF_PREFIX)) {
+    GST_WARNING ("unknown license prefix in ref '%s'", license_ref);
+    return -1;
+  }
+
+  if (jurisdiction != NULL)
+    *jurisdiction = NULL;
+
+  ref = license_ref + sizeof (CC_LICENSE_REF_PREFIX) - 1;
+  for (i = 0; i < G_N_ELEMENTS (licenses); ++i) {
+    guint64 jbits = licenses[i].jurisdictions;
+    const gchar *jurs, *lref = licenses[i].ref;
+    gsize lref_len = strlen (lref);
+
+    /* table should have "foo/bar/" with trailing slash */
+    g_assert (lref[lref_len - 1] == '/');
+
+    if ((jbits & JURISDICTION_GENERIC)) {
+      GST_TRACE ("[%2d] %s checking generic match", i, licenses[i].ref);
+
+      /* exact match? */
+      if (strcmp (ref, lref) == 0)
+        return i;
+
+      /* exact match but without the trailing slash in ref? */
+      if (strncmp (ref, lref, lref_len - 1) == 0 && ref[lref_len - 1] == '\0')
+        return i;
+    }
+
+    if (!g_str_has_prefix (ref, lref))
+      continue;
+
+    GST_TRACE ("[%2d] %s checking jurisdictions", i, licenses[i].ref);
+
+    jbits &= ~JURISDICTION_GENERIC;
+
+    jur_suffix = ref + lref_len;
+    if (*jur_suffix == '\0')
+      continue;
+
+    jurs = jurisdictions;
+    while (jbits != 0) {
+      guint jur_len = strlen (jurs);
+
+      if ((jbits & 1)) {
+        if (strncmp (jur_suffix, jurs, jur_len) == 0 &&
+            (jur_suffix[jur_len] == '\0' || jur_suffix[jur_len] == '/')) {
+          GST_LOG ("matched %s to %s with jurisdiction %s (idx %d)",
+              license_ref, licenses[i].ref, jurs, i);
+          if (jurisdiction != NULL)
+            *jurisdiction = jurs;
+          return i;
+        }
+      }
+      g_assert (jurs < (jurisdictions + sizeof (jurisdictions)));
+      jurs += jur_len + 1;
+      jbits >>= 1;
+    }
+  }
+
+  GST_WARNING ("unhandled license ref '%s'", license_ref);
+  return -1;
+}
+
+/**
+ * gst_tag_get_license_flags:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the flags of a license, which describe most of the features of
+ * a license in their most general form.
+ *
+ * Returns: the flags of the license, or 0 if the license is unknown
+ *
+ * Since: 0.10.36
+ */
+GstTagLicenseFlags
+gst_tag_get_license_flags (const gchar * license_ref)
+{
+  int idx;
+
+  g_return_val_if_fail (license_ref != NULL, 0);
+
+  idx = gst_tag_get_license_idx (license_ref, NULL);
+  return (idx < 0) ? 0 : licenses[idx].flags;
+}
+
+/**
+ * gst_tag_get_license_nick:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the nick name of a license, which is a short (untranslated) string
+ * such as e.g. "CC BY-NC-ND 2.0 UK".
+ *
+ * Returns: the nick name of the license, or NULL if the license is unknown
+ *
+ * Since: 0.10.36
+ */
+const gchar *
+gst_tag_get_license_nick (const gchar * license_ref)
+{
+  GstTagLicenseFlags flags;
+  const gchar *creator_prefix, *res;
+  gchar *nick, *c;
+
+  g_return_val_if_fail (license_ref != NULL, NULL);
+
+  flags = gst_tag_get_license_flags (license_ref);
+
+  if ((flags & GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE)) {
+    creator_prefix = "CC ";
+  } else if ((flags & GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE)) {
+    creator_prefix = "FSF ";
+  } else if (g_str_has_suffix (license_ref, "publicdomain/")) {
+    creator_prefix = "";
+  } else {
+    return NULL;
+  }
+
+  nick = g_strdup_printf ("%s%s", creator_prefix,
+      license_ref + sizeof (CC_LICENSE_REF_PREFIX) - 1);
+  g_strdelimit (nick, "/", ' ');
+  g_strchomp (nick);
+  for (c = nick; *c != '\0'; ++c)
+    *c = g_ascii_toupper (*c);
+
+  GST_LOG ("%s => nick %s", license_ref, nick);
+  res = g_intern_string (nick); /* for convenience */
+  g_free (nick);
+
+  return res;
+}
+
+/**
+ * gst_tag_get_license_title:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the title of a license, which is a short translated description
+ * of the license's features (generally not very pretty though).
+ *
+ * Returns: the title of the license, or NULL if the license is unknown or
+ *    no title is available.
+ *
+ * Since: 0.10.36
+ */
+const gchar *
+gst_tag_get_license_title (const gchar * license_ref)
+{
+  int idx;
+
+  g_return_val_if_fail (license_ref != NULL, NULL);
+
+  idx = gst_tag_get_license_idx (license_ref, NULL);
+
+  if (idx < 0 || licenses[idx].title_idx < 0)
+    return NULL;
+
+  return gst_license_str_translate (&license_strings[licenses[idx].title_idx]);
+}
+
+/**
+ * gst_tag_get_license_description:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the description of a license, which is a translated description
+ * of the license's main features.
+ *
+ * Returns: the description of the license, or NULL if the license is unknown
+ *    or a description is not available.
+ *
+ * Since: 0.10.36
+ */
+const gchar *
+gst_tag_get_license_description (const gchar * license_ref)
+{
+  int idx;
+
+  g_return_val_if_fail (license_ref != NULL, NULL);
+
+  idx = gst_tag_get_license_idx (license_ref, NULL);
+
+  if (idx < 0 || licenses[idx].desc_idx < 0)
+    return NULL;
+
+  return gst_license_str_translate (&license_strings[licenses[idx].desc_idx]);
+}
+
+/**
+ * gst_tag_get_license_jurisdiction:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the jurisdiction code of a license. This is usually a two-letter
+ * ISO 3166-1 alpha-2 code, but there is also the special case of Scotland,
+ * for which no code exists and which is thus represented as "scotland".
+ *
+ * Known jurisdictions: ar, at, au, be, bg, br, ca, ch, cl, cn, co, de,
+ * dk, es, fi, fr, hr, hu, il, in, it, jp, kr, mk, mt, mx, my, nl, pe, pl,
+ * pt, scotland, se, si, tw, uk, us, za.
+ *
+ * Returns: the jurisdiction code of the license, or NULL if the license is
+ *    unknown or is not specific to a particular jurisdiction.
+ *
+ * Since: 0.10.36
+ */
+const gchar *
+gst_tag_get_license_jurisdiction (const gchar * license_ref)
+{
+  const gchar *jurisdiction;
+  int idx;
+
+  g_return_val_if_fail (license_ref != NULL, NULL);
+
+  idx = gst_tag_get_license_idx (license_ref, &jurisdiction);
+  return (idx < 0) ? NULL : jurisdiction;
+}
+
+/**
+ * gst_tag_get_license_version:
+ * @license_ref: a license reference string in form of a URI,
+ *     e.g. "http://creativecommons.org/licenses/by-nc-nd/2.0/"
+ *
+ * Get the version of a license.
+ *
+ * Returns: the version of the license, or NULL if the license is not known or
+ *    has no version
+ *
+ * Since: 0.10.36
+ */
+const gchar *
+gst_tag_get_license_version (const gchar * license_ref)
+{
+  int idx;
+
+  g_return_val_if_fail (license_ref != NULL, NULL);
+
+  idx = gst_tag_get_license_idx (license_ref, NULL);
+  if (idx < 0)
+    return NULL;
+
+#define LICENSE_FLAG_CC_OR_FSF \
+ (GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE|\
+  GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE)
+
+  /* e.g. publicdomain isn't versioned */
+  if (!(licenses[idx].flags & LICENSE_FLAG_CC_OR_FSF))
+    return NULL;
+
+  /* KISS for now... */
+  if (strstr (licenses[idx].ref, "/1.0/"))
+    return "1.0";
+  else if (strstr (licenses[idx].ref, "/2.0/"))
+    return "2.0";
+  else if (strstr (licenses[idx].ref, "/2.1/"))
+    return "2.1";
+  else if (strstr (licenses[idx].ref, "/2.5/"))
+    return "2.5";
+  else if (strstr (licenses[idx].ref, "/3.0/"))
+    return "3.0";
+
+  GST_ERROR ("Could not determine version for ref '%s'", license_ref);
+  return NULL;
+}
+
+GType
+gst_tag_license_flags_get_type (void)
+{
+  /* FIXME: we should really be using glib-mkenums for this.. */
+#define C_FLAGS(v) ((guint) v)
+  static gsize id = 0;
+  static const GFlagsValue values[] = {
+    {C_FLAGS (GST_TAG_LICENSE_PERMITS_REPRODUCTION),
+        "GST_TAG_LICENSE_PERMITS_REPRODUCTION", "permits-reproduction"},
+    {C_FLAGS (GST_TAG_LICENSE_PERMITS_DISTRIBUTION),
+        "GST_TAG_LICENSE_PERMITS_DISTRIBUTION", "permits-distribution"},
+    {C_FLAGS (GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS),
+          "GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS",
+        "permits-derivative-works"},
+    {C_FLAGS (GST_TAG_LICENSE_PERMITS_SHARING),
+        "GST_TAG_LICENSE_PERMITS_SHARING", "permits-sharing"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_NOTICE),
+        "GST_TAG_LICENSE_REQUIRES_NOTICE", "requires-notice"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_ATTRIBUTION),
+        "GST_TAG_LICENSE_REQUIRES_ATTRIBUTION", "requires-attributions"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE),
+        "GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE", "requires-share-alike"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_SOURCE_CODE),
+        "GST_TAG_LICENSE_REQUIRES_SOURCE_CODE", "requires-source-code"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_COPYLEFT),
+        "GST_TAG_LICENSE_REQUIRES_COPYLEFT", "requires-copyleft"},
+    {C_FLAGS (GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT),
+          "GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT",
+        "requires-lesser-copyleft"},
+    {C_FLAGS (GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE),
+          "GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE",
+        "prohibits-commercial-use"},
+    {C_FLAGS (GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE),
+          "GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE",
+        "prohibits-high-income-nation-use"},
+    {C_FLAGS (GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE),
+          "GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE",
+        "creative-commons-license"},
+    {C_FLAGS (GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE),
+          "GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE",
+        "free-software-foundation-license"},
+    {0, NULL, NULL}
+  };
+
+  if (g_once_init_enter (&id)) {
+    GType tmp = g_flags_register_static ("GstTagLicenseFlags", values);
+    g_once_init_leave (&id, tmp);
+  }
+
+  return (GType) id;
+}
diff --git a/gst-libs/gst/tag/mklangtables.c b/gst-libs/gst/tag/mklangtables.c
new file mode 100644
index 0000000..3a6156f
--- /dev/null
+++ b/gst-libs/gst/tag/mklangtables.c
@@ -0,0 +1,239 @@
+/* GStreamer Language Tag Utility Functions
+ * Copyright (C) 2009 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* mklangtables.c:
+ * little program that reads iso_639.xml and outputs tables for us as fallback
+ * for when iso-codes are not available or we fail to read the file for some
+ * reason, and so we don't have to parse the xml file just to map codes.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+
+#define ISO_639_XML_PATH ISO_CODES_PREFIX "/share/xml/iso-codes/iso_639.xml"
+
+typedef struct
+{
+  gchar code_1[3];              /* de     */
+  gchar code_2t[4];             /* deu    */
+  gchar code_2b[4];             /* ger    */
+  const gchar *name;            /* German */
+  guint name_offset;            /* offset into string table */
+} IsoLang;
+
+static GArray *languages = NULL;
+
+static void
+dump_languages (void)
+{
+  GString *names;
+  const char *s;
+  int i, num_escaped;
+
+  g_assert (languages != NULL);
+
+  names = g_string_new ("");
+
+  g_print ("/* generated by " __FILE__ " iso-codes " ISO_CODES_VERSION " */\n");
+  g_print ("\n");
+  g_print ("#include <glib.h>\n");
+  g_print ("\n");
+  g_print ("#define ISO_639_FLAG_2T  (1 << 0)\n");
+  g_print ("#define ISO_639_FLAG_2B  (1 << 1)\n");
+  g_print ("\n");
+  g_print ("/* *INDENT-OFF* */\n");
+  g_print ("\n");
+  g_print ("static const struct\n");
+  g_print ("{\n");
+  g_print ("  const gchar iso_639_1[3];\n");
+  g_print ("  const gchar iso_639_2[4];\n");
+  g_print ("  guint8 flags;\n");
+  g_print ("  guint16 name_offset;\n");
+  g_print ("} iso_639_codes[] = {\n");
+
+  for (i = 0, num_escaped = 0; i < languages->len; ++i) {
+    IsoLang *lang = &g_array_index (languages, IsoLang, i);
+
+    /* For now just print those where there's both a ISO-639-1 and -2 code */
+    if (lang->code_1[0] == '\0')
+      continue;
+
+    /* save current offset */
+    lang->name_offset = names->len;
+
+    /* adjust for fact that \000 is 4 chars now but will take up only 1 later */
+    lang->name_offset -= num_escaped * 3;
+
+    /* append one char at a time, making sure to escape UTF-8 characters */
+    for (s = lang->name; s != NULL && *s != '\0'; ++s) {
+      if (g_ascii_isprint (*s) && *s != '"' && *s != '\\') {
+        g_string_append_c (names, *s);
+      } else {
+        g_string_append_printf (names, "\\%03o", (unsigned char) *s);
+        ++num_escaped;
+      }
+    }
+    g_string_append (names, "\\000");
+    ++num_escaped;
+
+    g_print ("    /* %s */\n", lang->name);
+    if (strcmp (lang->code_2b, lang->code_2t) == 0) {
+      g_print ("  { \"%s\", \"%s\", ISO_639_FLAG_2T | ISO_639_FLAG_2B, %u },\n",
+          lang->code_1, lang->code_2t, lang->name_offset);
+    } else {
+      /* if 639-2T and 639-2B differ, put 639-2T first */
+      g_print ("  { \"%s\", \"%s\", ISO_639_FLAG_2T, %u },\n",
+          lang->code_1, lang->code_2t, lang->name_offset);
+      g_print ("  { \"%s\", \"%s\", ISO_639_FLAG_2B, %u },\n",
+          lang->code_1, lang->code_2b, lang->name_offset);
+    }
+  }
+
+  g_print ("};\n");
+  g_print ("\n");
+  g_print ("static const gchar iso_639_names[] =\n");
+  s = names->str;
+  while (s != NULL && *s != '\0') {
+    gchar line[74], *lastesc;
+    guint left;
+
+    left = strlen (s);
+    g_strlcpy (line, s, MIN (left, sizeof (line)));
+    s += sizeof (line) - 1;
+    /* avoid partial escaped codes at the end of a line */
+    if ((lastesc = strrchr (line, '\\')) && strlen (lastesc) < 4) {
+      s -= strlen (lastesc);
+      *lastesc = '\0';
+    }
+    g_print ("  \"%s\"", line);
+    if (left < 74)
+      break;
+    g_print ("\n");
+  }
+  g_print (";\n");
+  g_print ("\n");
+  g_print ("/* *INDENT-ON* */\n");
+
+  g_string_free (names, TRUE);
+}
+
+static gboolean
+copy_attribute (gchar * dest, guint dest_len, const gchar ** attr_names,
+    const gchar ** attr_vals, const gchar * needle)
+{
+  while (attr_names != NULL && *attr_names != NULL) {
+    if (strcmp (*attr_names, needle) == 0) {
+      g_strlcpy (dest, *attr_vals, dest_len);
+      return TRUE;
+    }
+    ++attr_names;
+    ++attr_vals;
+  }
+  dest[0] = '\0';
+  return FALSE;
+}
+
+static void
+xml_start_element (GMarkupParseContext * ctx, const gchar * element_name,
+    const gchar ** attr_names, const gchar ** attr_vals,
+    gpointer user_data, GError ** error)
+{
+  gchar name[256];
+  IsoLang lang;
+
+  if (strcmp (element_name, "iso_639_entry") != 0)
+    return;
+
+  copy_attribute (lang.code_1, 3, attr_names, attr_vals, "iso_639_1_code");
+  copy_attribute (lang.code_2t, 4, attr_names, attr_vals, "iso_639_2T_code");
+  copy_attribute (lang.code_2b, 4, attr_names, attr_vals, "iso_639_2B_code");
+
+  copy_attribute (name, sizeof (name), attr_names, attr_vals, "name");
+  lang.name = g_intern_string (name);
+
+  g_array_append_val (languages, lang);
+}
+
+static void
+parse_iso_639_xml (const gchar * data, gsize len)
+{
+  GMarkupParser xml_parser = { xml_start_element, NULL, NULL, NULL, NULL };
+  GMarkupParseContext *ctx;
+  GError *err = NULL;
+
+  g_return_if_fail (g_utf8_validate (data, len, NULL));
+
+  ctx = g_markup_parse_context_new (&xml_parser, 0, NULL, NULL);
+  if (!g_markup_parse_context_parse (ctx, data, len, &err))
+    g_error ("Parsing failed: %s", err->message);
+
+  g_markup_parse_context_free (ctx);
+}
+
+static gint
+languages_sort_func (IsoLang * l1, IsoLang * l2)
+{
+  if (l1 == l2)
+    return 0;
+
+  if (l1->code_1[0] == '\0' && l2->code_1[0] != '\0')
+    return -1;
+
+  return strcmp (l1->code_1, l2->code_1);
+}
+
+int
+main (int argc, char **argv)
+{
+  GMappedFile *f;
+  gchar *xml_data;
+  gsize xml_len;
+
+  f = g_mapped_file_new (ISO_639_XML_PATH, FALSE, NULL);
+  if (f != NULL) {
+    xml_data = (gchar *) g_mapped_file_get_contents (f);
+    xml_len = g_mapped_file_get_length (f);
+  } else {
+    GError *err = NULL;
+
+    if (!g_file_get_contents (ISO_639_XML_PATH, &xml_data, &xml_len, &err))
+      g_error ("Could not read %s: %s", ISO_639_XML_PATH, err->message);
+  }
+
+  languages = g_array_new (FALSE, TRUE, sizeof (IsoLang));
+
+  parse_iso_639_xml (xml_data, xml_len);
+
+  g_array_sort (languages, (GCompareFunc) languages_sort_func);
+
+  dump_languages ();
+
+  g_array_free (languages, TRUE);
+
+  if (f != NULL)
+    g_mapped_file_unref (f);
+  else
+    g_free (xml_data);
+
+  return 0;
+}
diff --git a/gst-libs/gst/tag/mklicensestables.c b/gst-libs/gst/tag/mklicensestables.c
new file mode 100644
index 0000000..66249d9
--- /dev/null
+++ b/gst-libs/gst/tag/mklicensestables.c
@@ -0,0 +1,890 @@
+/* GStreamer License Utility Functions
+ * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* mklicensestables.c:
+ * little program that reads liblicense's license RDF files and outputs tables
+ * with the most important information, so we don't have to parse megabytes
+ * of mostly redundant RDF files to get some basic information (and vendors
+ * don't have to ship it all).
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "tag.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+/* TODO: we can merge some of the jurisdiction-only license table entries
+ * into one entry with multiple jurisdictions and without the 'generic' flag,
+ * .e.g. by-nc-nd/2.5/es + by-nc-nd/2.5/au => by-nc-nd/2.5/{es,au} */
+
+#define LIBLICENSE_DATA_PREFIX "/usr/share/liblicense/licenses"
+
+static GHashTable *unknown_sources;     /* NULL */
+
+static GList *licenses;         /* NULL */
+
+/* list of languages used for translations */
+static GList *langs;            /* NULL */
+
+/* keep in sync with licenses.c */
+static const gchar jurisdictions[] =
+    "ar\000at\000au\000be\000bg\000br\000ca\000ch\000cl\000cn\000co\000de\000"
+    "dk\000es\000fi\000fr\000hr\000hu\000il\000in\000it\000jp\000kr\000mk\000"
+    "mt\000mx\000my\000nl\000pe\000pl\000pt\000scotland\000se\000si\000tw\000"
+    "uk\000us\000za";
+
+/* keep in sync with gst_tag_get_license_version() */
+static const gchar known_versions[] = "1.0/2.0/2.1/2.5/3.0/";
+
+/* is this license 'generic' (and a base for any of the supported
+ * jurisdictions), or jurisdiction-specific only? */
+#define JURISDICTION_GENERIC (G_GUINT64_CONSTANT (1) << 63)
+
+typedef struct
+{
+  gchar *ref;
+  guint64 jurisdiction;
+  gchar *jurisdiction_suffix;   /* if not generic (e.g. "jp/") */
+  gchar *legalcode;
+  gchar *version;
+  gchar *replaced_by;
+  gchar *source;
+
+  GstTagLicenseFlags flags;
+
+  gboolean deprecated;
+
+  GHashTable *titles;
+  GHashTable *descriptions;
+
+  /* for processing */
+  const gchar *cur_lang;
+  gboolean packed_into_source;
+
+  /* list of licenses packed into this one (ie. this is the source of those) */
+  GList *derived;
+} License;
+
+static GstTagLicenseFlags
+ref_to_flag (const gchar * ref)
+{
+  if (strcmp (ref, "http://creativecommons.org/ns#Reproduction") == 0)
+    return GST_TAG_LICENSE_PERMITS_REPRODUCTION;
+  if (strcmp (ref, "http://creativecommons.org/ns#Distribution") == 0)
+    return GST_TAG_LICENSE_PERMITS_DISTRIBUTION;
+  if (strcmp (ref, "http://creativecommons.org/ns#DerivativeWorks") == 0)
+    return GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS;
+  if (strcmp (ref, "http://creativecommons.org/ns#Sharing") == 0)
+    return GST_TAG_LICENSE_PERMITS_SHARING;
+  if (strcmp (ref, "http://creativecommons.org/ns#Notice") == 0)
+    return GST_TAG_LICENSE_REQUIRES_NOTICE;
+  if (strcmp (ref, "http://creativecommons.org/ns#Attribution") == 0)
+    return GST_TAG_LICENSE_REQUIRES_ATTRIBUTION;
+  if (strcmp (ref, "http://creativecommons.org/ns#ShareAlike") == 0)
+    return GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE;
+  if (strcmp (ref, "http://creativecommons.org/ns#SourceCode") == 0)
+    return GST_TAG_LICENSE_REQUIRES_SOURCE_CODE;
+  if (strcmp (ref, "http://creativecommons.org/ns#Copyleft") == 0)
+    return GST_TAG_LICENSE_REQUIRES_COPYLEFT;
+  if (strcmp (ref, "http://creativecommons.org/ns#LesserCopyleft") == 0)
+    return GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT;
+  if (strcmp (ref, "http://creativecommons.org/ns#CommercialUse") == 0)
+    return GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE;
+  if (strcmp (ref, "http://creativecommons.org/ns#HighIncomeNationUse") == 0)
+    return GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE;
+
+  g_error ("Unknown permits/requires/prohibits: %s\n", ref);
+  return 0;
+};
+
+static guint64
+ref_to_jurisdiction (const gchar * ref)
+{
+  const gchar *j = jurisdictions;
+  gchar *jur;
+  guint64 bit = 1;
+
+  jur = g_strdup (ref + strlen ("http://creativecommons.org/international/"));
+  g_strdelimit (jur, "/", '\0');
+  while (j < jurisdictions + sizeof (jurisdictions)) {
+    if (strcmp (j, jur) == 0) {
+      g_free (jur);
+      g_assert (bit != 0 && bit != JURISDICTION_GENERIC);
+      return bit;
+    }
+    j += strlen (j) + 1;
+    bit <<= 1;
+  }
+  g_error ("Unknown jurisdiction '%s'\n", ref);
+}
+
+typedef enum
+{
+  TAG_CC_LICENSE,
+  TAG_CC_JURISDICTION,
+  TAG_CC_LEGALCODE,
+  TAG_CC_PROHIBITS,
+  TAG_CC_REQUIRES,
+  TAG_CC_PERMITS,
+  TAG_CC_DEPRECATED_ON,
+  TAG_DC_CREATOR,
+  TAG_DC_SOURCE,
+  TAG_DC_TITLE,
+  TAG_DC_DESCRIPTION,
+  TAG_DCQ_HAS_VERSION,
+  TAG_DCQ_IS_REPLACED_BY,
+  TAG_RDF_RDF,
+  TAG_RDF_DESCRIPTION,
+} Tag;
+
+static const struct
+{
+  const gchar *element_name;
+  const gchar *attribute;
+  const Tag element_tag;
+} tag_map[] = {
+  {
+  "cc:License", "rdf:about", TAG_CC_LICENSE}, {
+  "cc:deprecatedOn", "rdf:datatype", TAG_CC_DEPRECATED_ON}, {
+  "cc:jurisdiction", "rdf:resource", TAG_CC_JURISDICTION}, {
+  "cc:legalcode", "rdf:resource", TAG_CC_LEGALCODE}, {
+  "cc:prohibits", "rdf:resource", TAG_CC_PROHIBITS}, {
+  "cc:requires", "rdf:resource", TAG_CC_REQUIRES}, {
+  "cc:permits", "rdf:resource", TAG_CC_PERMITS}, {
+  "dc:creator", "rdf:resource", TAG_DC_CREATOR}, {
+  "dc:source", "rdf:resource", TAG_DC_SOURCE}, {
+  "dc:title", "xml:lang", TAG_DC_TITLE}, {
+  "dc:description", "xml:lang", TAG_DC_DESCRIPTION}, {
+  "dcq:hasVersion", NULL, TAG_DCQ_HAS_VERSION}, {
+  "dcq:isReplacedBy", "rdf:resource", TAG_DCQ_IS_REPLACED_BY}, {
+  "rdf:RDF", NULL, TAG_RDF_RDF}, {
+  "rdf:Description", "rdf:about", TAG_RDF_DESCRIPTION},
+      /* these three are just for by-nc-nd_2.0_jp_.rdf */
+  {
+  "dc:isBasedOn", "rdf:resource", TAG_DC_SOURCE}, {
+  "dc:hasVersion", NULL, TAG_DCQ_HAS_VERSION}, {
+  "dc:isReplacedBy", "rdf:resource", TAG_DCQ_IS_REPLACED_BY}
+};
+
+static void
+parse_start (GMarkupParseContext * ctx, const gchar * element_name,
+    const gchar ** attr_names, const gchar ** attr_vals,
+    gpointer user_data, GError ** err)
+{
+  License *license = user_data;
+  const gchar *ref = NULL;
+  int i;
+
+  for (i = 0; i < G_N_ELEMENTS (tag_map); ++i) {
+    if (strcmp (element_name, tag_map[i].element_name) == 0)
+      break;
+  }
+
+  if (i == G_N_ELEMENTS (tag_map))
+    g_error ("Unexpected tag '%s'\n", element_name);
+
+  if (tag_map[i].attribute == NULL)
+    return;
+
+  if (!g_markup_collect_attributes (element_name, attr_names, attr_vals,
+          err, G_MARKUP_COLLECT_STRING, tag_map[i].attribute, &ref,
+          G_MARKUP_COLLECT_INVALID)) {
+    return;
+  }
+
+  switch (tag_map[i].element_tag) {
+    case TAG_CC_LICENSE:
+      if (!g_str_has_prefix (ref, "http://creativecommons.org/licenses/"))
+        g_error ("Unexpected license reference: %s\n", ref);
+      /* we assume one license per file, and CC license ref */
+      g_assert (license->ref == NULL);
+      license->ref = g_strdup (ref);
+      break;
+    case TAG_CC_JURISDICTION:
+      if (!g_str_has_prefix (ref, "http://creativecommons.org/international/"))
+        g_error ("Unknown license jurisdiction: %s\n", ref);
+      /* we assume one jurisdiction per license */
+      g_assert (license->jurisdiction == JURISDICTION_GENERIC);
+      license->jurisdiction = ref_to_jurisdiction (ref);
+      license->jurisdiction_suffix =
+          g_strdup (ref + strlen ("http://creativecommons.org/international/"));
+      break;
+    case TAG_CC_LEGALCODE:
+      if (!g_str_has_prefix (ref, "http://creativecommons.org/licenses/"))
+        g_error ("Unexpected legalcode reference: %s\n", ref);
+      /* we assume one legalcode per license */
+      g_assert (license->legalcode == NULL);
+      license->legalcode = g_strdup (ref);
+      break;
+    case TAG_DC_CREATOR:
+      if (strcmp (ref, "http://creativecommons.org") == 0) {
+        license->flags |= GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE;
+      } else if (strcmp (ref, "http://fsf.org") == 0) {
+        license->flags |= GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE;
+      } else {
+        g_error ("Unknown license creator: %s\n", ref);
+      }
+      break;
+    case TAG_CC_DEPRECATED_ON:
+      break;
+    case TAG_CC_PROHIBITS:
+    case TAG_CC_REQUIRES:
+    case TAG_CC_PERMITS:
+      license->flags |= ref_to_flag (ref);
+      break;
+    case TAG_DC_TITLE:{
+      gchar *cur_lang;
+
+      cur_lang = g_strdelimit (g_strdup (ref), "-", '_');
+      license->cur_lang = g_intern_string (cur_lang);
+      if (!g_list_find_custom (langs, cur_lang, (GCompareFunc) strcmp))
+        langs = g_list_prepend (langs, (gpointer) license->cur_lang);
+
+      g_free (cur_lang);
+      break;
+    }
+    case TAG_DC_DESCRIPTION:{
+      gchar *cur_lang;
+
+      cur_lang = g_strdelimit (g_strdup (ref), "-", '_');
+      license->cur_lang = g_intern_string (cur_lang);
+      if (!g_list_find_custom (langs, cur_lang, (GCompareFunc) strcmp))
+        langs = g_list_prepend (langs, (gpointer) license->cur_lang);
+
+      g_free (cur_lang);
+      break;
+    }
+    case TAG_DCQ_IS_REPLACED_BY:
+      /* we assume one replacer per license for now */
+      g_assert (license->replaced_by == NULL);
+      license->replaced_by = g_strdup (ref);
+      break;
+    case TAG_RDF_DESCRIPTION:
+      if (!g_str_has_prefix (ref, "http://creativecommons.org/licenses/"))
+        g_error ("Unexpected license reference: %s\n", ref);
+      if (license->ref != NULL && strcmp (license->ref, ref) != 0) {
+        gchar *f, *r = g_strdup (ref);
+
+        /* work around bug in some of the RDFs ... */
+        if ((f = strstr (r, "by-nc-nd"))) {
+          memcpy (f, "by-nd-nc", 8);
+        }
+        if (strcmp (license->ref, r) != 0) {
+          g_error ("rdf:Description chunk for other than current license");
+        }
+        g_free (r);
+      }
+      break;
+    case TAG_DC_SOURCE:
+      if (!g_str_has_prefix (ref, "http://creativecommons.org/licenses/"))
+        g_error ("Unexpected source reference: %s\n", ref);
+      /* we assume one source (for jurisdiction-specific versions) */
+      g_assert (license->source == NULL);
+      license->source = g_strdup (ref);
+      break;
+    default:
+      g_printerr ("unhandled start tag: %s\n", element_name);
+      break;
+  }
+}
+
+static void
+parse_text (GMarkupParseContext * ctx, const gchar * text, gsize text_len,
+    gpointer user_data, GError ** err)
+{
+  License *license = user_data;
+  const gchar *element_name, *found;
+  int i;
+
+  element_name = g_markup_parse_context_get_element (ctx);
+  for (i = 0; i < G_N_ELEMENTS (tag_map); ++i) {
+    if (strcmp (element_name, tag_map[i].element_name) == 0)
+      break;
+  }
+
+  if (i == G_N_ELEMENTS (tag_map))
+    g_error ("Unexpected tag '%s'\n", element_name);
+
+  switch (tag_map[i].element_tag) {
+    case TAG_CC_LICENSE:
+    case TAG_CC_JURISDICTION:
+    case TAG_CC_LEGALCODE:
+    case TAG_DC_CREATOR:
+    case TAG_CC_PROHIBITS:
+    case TAG_CC_REQUIRES:
+    case TAG_CC_PERMITS:
+    case TAG_RDF_RDF:
+    case TAG_RDF_DESCRIPTION:
+      break;
+    case TAG_DC_TITLE:
+      if (license->titles == NULL) {
+        license->titles = g_hash_table_new (g_str_hash, g_str_equal);
+      }
+      g_hash_table_insert (license->titles, (gpointer) license->cur_lang,
+          (gpointer) g_intern_string (text));
+      break;
+    case TAG_DC_DESCRIPTION:{
+      gchar *txt = g_strdup (text);
+
+      if (license->descriptions == NULL) {
+        license->descriptions = g_hash_table_new (g_str_hash, g_str_equal);
+      }
+      g_strdelimit (txt, "\n", ' ');
+      g_hash_table_insert (license->descriptions, (gpointer) license->cur_lang,
+          (gpointer) g_intern_string (txt));
+      g_free (txt);
+      break;
+    }
+    case TAG_DCQ_HAS_VERSION:
+      /* we assume one version per license */
+      g_assert (license->version == NULL);
+      license->version = g_strdup (text);
+      found = strstr (known_versions, license->version);
+      if (found == NULL || found[strlen (license->version)] != '/')
+        g_error ("Unexpected version '%s', please add to table.", text);
+      break;
+    case TAG_CC_DEPRECATED_ON:
+      license->deprecated = TRUE;
+      break;
+    case TAG_DC_SOURCE:        // FIXME
+    default:
+      g_print ("text (%s) (%s): '%s'\n", element_name, license->cur_lang, text);
+  }
+}
+
+static void
+parse_passthrough (GMarkupParseContext * ctx, const gchar * text, gsize len,
+    gpointer user_data, GError ** err)
+{
+  if (!g_str_has_prefix (text, "<?xml ")) {
+    g_error ("Unexpected passthrough text: %s\n", text);
+  }
+}
+
+static void
+parse_error (GMarkupParseContext * ctx, GError * err, gpointer data)
+{
+  g_error ("parse error: %s\n", err->message);
+}
+
+static const GMarkupParser license_rdf_parser = {
+  parse_start, NULL, parse_text, parse_passthrough, parse_error
+};
+
+static void
+parse_license_rdf (const gchar * fn, const gchar * rdf)
+{
+  GMarkupParseContext *ctx;
+  License *license;
+  GError *err = NULL;
+
+  if (!g_utf8_validate (rdf, -1, NULL)) {
+    g_error ("%s is not valid UTF-8\n", fn);
+  }
+
+  license = g_new0 (License, 1);
+
+  /* mark as generic until proven otherwise */
+  license->jurisdiction = JURISDICTION_GENERIC;
+
+  ctx = g_markup_parse_context_new (&license_rdf_parser,
+      G_MARKUP_TREAT_CDATA_AS_TEXT, license, NULL);
+
+  /* g_print ("Parsing %s\n", fn); */
+
+  if (!g_markup_parse_context_parse (ctx, rdf, -1, &err)) {
+    g_error ("Error parsing file %s: %s\n", fn, err->message);
+  }
+
+  licenses = g_list_append (licenses, license);
+
+  g_markup_parse_context_free (ctx);
+}
+
+static void
+read_licenses (const gchar * licenses_dir)
+{
+  const gchar *name;
+  GError *err = NULL;
+  GDir *dir;
+
+  dir = g_dir_open (licenses_dir, 0, &err);
+
+  if (dir == NULL)
+    g_error ("Failed to g_dir_open('%s'): %s", licenses_dir, err->message);
+
+  while ((name = g_dir_read_name (dir))) {
+    gchar *fn, *rdf;
+
+    fn = g_build_filename (licenses_dir, name, NULL);
+    if (g_file_get_contents (fn, &rdf, NULL, &err)) {
+      parse_license_rdf (fn, rdf);
+      g_free (rdf);
+    } else {
+      g_printerr ("Could not read file '%s': %s\n", fn, err->message);
+      g_error_free (err);
+      err = NULL;
+    }
+    g_free (fn);
+  }
+
+  g_dir_close (dir);
+}
+
+static License *
+find_license (const gchar * ref)
+{
+  GList *l;
+
+  if (!g_str_has_prefix (ref, "http://creativecommons.org/"))
+    return NULL;
+
+  for (l = licenses; l != NULL; l = l->next) {
+    License *license = l->data;
+
+    if (strcmp (license->ref, ref) == 0)
+      return license;
+  }
+
+  return NULL;
+}
+
+static int
+license_ref_cmp (License * a, License * b)
+{
+  return strcmp (a->ref, b->ref);
+}
+
+#define STRING_TABLE_MAX_STRINGS 100
+typedef struct
+{
+  GString *s;
+  guint num_escaped;
+  guint num_strings;
+  guint indices[STRING_TABLE_MAX_STRINGS];
+  gchar *strings[STRING_TABLE_MAX_STRINGS];     /* unescaped strings */
+} StringTable;
+
+static StringTable *
+string_table_new (void)
+{
+  StringTable *t = g_new0 (StringTable, 1);
+
+  t->s = g_string_new (NULL);
+  return t;
+}
+
+static void
+string_table_free (StringTable * t)
+{
+  int i;
+
+  for (i = 0; i < t->num_strings; ++i)
+    g_free (t->strings[i]);
+
+  g_string_free (t->s, TRUE);
+  g_free (t);
+}
+
+static guint
+string_table_add_string (StringTable * t, const gchar * str)
+{
+  const gchar *s;
+  guint idx, i;
+
+  /* check if we already have this string */
+  for (i = 0; i < t->num_strings; ++i) {
+    if (strcmp (t->strings[i], str) == 0)
+      return t->indices[i];
+  }
+
+  /* save current offset */
+  idx = t->s->len;
+
+  /* adjust for fact that \000 is 4 chars now but will take up only 1 later */
+  idx -= t->num_escaped * 3;
+
+  /* append one char at a time, making sure to escape UTF-8 characters */
+  for (s = str; s != NULL && *s != '\0'; ++s) {
+    if (g_ascii_isprint (*s) && *s != '"' && *s != '\\') {
+      g_string_append_c (t->s, *s);
+    } else {
+      g_string_append_printf (t->s, "\\%03o", (unsigned char) *s);
+      t->num_escaped++;
+    }
+  }
+  g_string_append (t->s, "\\000");
+  t->num_escaped++;
+
+  t->indices[t->num_strings] = idx;
+  t->strings[t->num_strings] = g_strdup (str);
+  ++t->num_strings;
+
+  return idx;
+}
+
+static void
+string_table_print (StringTable * t)
+{
+  const gchar *s;
+
+  s = t->s->str;
+  while (s != NULL && *s != '\0') {
+    gchar line[74], *lastesc;
+    guint left;
+
+    left = strlen (s);
+    g_strlcpy (line, s, MIN (left, sizeof (line)));
+    s += sizeof (line) - 1;
+    /* avoid partial escaped codes at the end of a line */
+    if ((lastesc = strrchr (line, '\\')) && strlen (lastesc) < 4) {
+      s -= strlen (lastesc);
+      *lastesc = '\0';
+    }
+    g_print ("  \"%s\"", line);
+    if (left < 74)
+      break;
+    g_print ("\n");
+  }
+  g_print (";\n");
+}
+
+/* skip translation if translated string for e.g. "fr_ca" is same as for "fr" */
+static gboolean
+skip_translation (GHashTable * ht_strings, const gchar * lang,
+    const gchar * trans)
+{
+  const gchar *simple_trans;
+  gchar *simple_lang;
+
+  if (strchr (lang, '_') == NULL)
+    return FALSE;
+
+  simple_lang = g_strdup (lang);
+  g_strdelimit (simple_lang, "_", '\0');
+
+  simple_trans = g_hash_table_lookup (ht_strings, (gpointer) simple_lang);
+  g_free (simple_lang);
+
+  return (simple_trans != NULL && strcmp (trans, simple_trans) == 0);
+}
+
+static GVariant *
+create_translation_dict (GHashTable * ht_strings, const gchar * en)
+{
+  GVariantBuilder array;
+  guint count = 0;
+  GList *l;
+
+  g_variant_builder_init (&array, G_VARIANT_TYPE_ARRAY);
+
+  for (l = langs; l != NULL; l = l->next) {
+    const gchar *trans, *lang;
+
+    lang = (const gchar *) l->data;
+    trans = g_hash_table_lookup (ht_strings, (gpointer) lang);
+    if (trans != NULL && *trans != '\0' && strcmp (en, trans) != 0 &&
+        !skip_translation (ht_strings, lang, trans)) {
+      /* g_print ("%s (%s) => %s\n", en, lang, trans); */
+      g_variant_builder_add_value (&array,
+          g_variant_new_dict_entry (g_variant_new_string (lang),
+              g_variant_new_string (trans)));
+      ++count;
+    }
+  }
+
+  if (count == 0) {
+    g_variant_builder_clear (&array);
+    return NULL;
+  }
+
+  return g_variant_builder_end (&array);
+}
+
+static void
+write_translations_dictionary (GList * licenses, const gchar * dict_filename)
+{
+  /* maps C string => (dictionary of: locale => translation) */
+  GVariantBuilder array;
+  /* maps C string => boolean (if it's in the dictionary already */
+  GHashTable *translations;
+  GVariant *var;
+  GList *l;
+  FILE *f;
+
+  /* sort langs for prettiness / to make variant dumps easier to read */
+  langs = g_list_sort (langs, (GCompareFunc) strcmp);
+
+  g_variant_builder_init (&array, G_VARIANT_TYPE_ARRAY);
+
+  translations = g_hash_table_new (g_str_hash, g_str_equal);
+
+  for (l = licenses; l != NULL; l = l->next) {
+    const gchar *en;
+    License *license;
+
+    license = l->data;
+
+    if (license->packed_into_source)
+      continue;
+
+    /* add title + translations */
+    en = g_hash_table_lookup (license->titles, "en");
+    g_assert (en != NULL);
+
+    /* check if we already have added translations for this string */
+    if (!g_hash_table_lookup (translations, (gpointer) en)) {
+      GVariant *trans;
+
+      trans = create_translation_dict (license->titles, en);
+      if (trans != NULL) {
+        g_variant_builder_add_value (&array,
+            g_variant_new_dict_entry (g_variant_new_string (en), trans));
+        g_hash_table_insert (translations, (gpointer) en,
+            GINT_TO_POINTER (TRUE));
+      }
+    }
+
+    /* add description + translations */
+    if (license->descriptions == NULL)
+      continue;
+
+    en = g_hash_table_lookup (license->descriptions, "en");
+    g_assert (en != NULL);
+
+    /* check if we already have added translations for this string */
+    if (!g_hash_table_lookup (translations, (gpointer) en)) {
+      GVariant *trans;
+
+      trans = create_translation_dict (license->descriptions, en);
+      if (trans != NULL) {
+        g_variant_builder_add_value (&array,
+            g_variant_new_dict_entry (g_variant_new_string (en), trans));
+        g_hash_table_insert (translations, (gpointer) en,
+            GINT_TO_POINTER (TRUE));
+      }
+    }
+  }
+
+  var = g_variant_builder_end (&array);
+
+  f = fopen (dict_filename, "wb");
+  if (fwrite (g_variant_get_data (var), g_variant_get_size (var), 1, f) != 1) {
+    g_error ("failed to write dict to file: %s", g_strerror (errno));
+  }
+  fclose (f);
+
+  g_printerr ("Wrote dictionary to %s, size: %u, type: %s\n", dict_filename,
+      (guint) g_variant_get_size (var), (gchar *) g_variant_get_type (var));
+
+  g_variant_unref (var);
+  g_hash_table_destroy (translations);
+}
+
+int
+main (int argc, char **argv)
+{
+  gchar *translation_dict_fn = NULL;
+  GOptionContext *ctx;
+  GOptionEntry options[] = {
+    {"translation-dictionary", 0, 0, G_OPTION_ARG_FILENAME,
+          &translation_dict_fn, "Filename of translations dictionary to write",
+        NULL},
+    {NULL}
+  };
+  StringTable *string_table;
+  GError *err = NULL;
+  GList *l;
+  int idx = 0;
+
+  g_type_init ();
+
+  ctx = g_option_context_new ("");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_printerr ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+  g_option_context_free (ctx);
+
+  read_licenses (LIBLICENSE_DATA_PREFIX);
+
+  g_printerr ("%d licenses\n", g_list_length (licenses));
+
+  unknown_sources = g_hash_table_new (g_str_hash, g_str_equal);
+
+  for (l = licenses; l != NULL; l = l->next) {
+    License *license = l->data;
+
+    /* if the license has as source, check if we can 'pack' it into the
+     * original license as a jurisdiction-specific variant */
+    if (license->source != NULL) {
+      License *source = find_license (license->source);
+
+      if (source != NULL) {
+        if (source->flags != license->flags) {
+          g_printerr ("Source and derived license have different flags:\n"
+              "\t0x%08x : %s\n\t0x%08x : %s\n", source->flags, source->ref,
+              license->flags, license->ref);
+          source = NULL;
+        } else {
+          if (source->descriptions == NULL) {
+            /* neither should the derived one then */
+            g_assert (license->descriptions == NULL);
+          } else {
+            /* make sure we're not settling for fewer descriptions than
+             * there are */
+            g_assert (g_hash_table_size (license->titles) <=
+                g_hash_table_size (source->titles));
+            g_assert (g_hash_table_size (license->descriptions) <=
+                g_hash_table_size (source->descriptions));
+          }
+        }
+      } else {
+        /* a source is referenced that we haven't encountered
+         * (possibly a referencing bug? seems to happen e.g. when there's a
+         * 2.1 version of a jurisdiction license and it refers to a 2.1
+         * source version, but there's only a 2.0 or 2.5 source version. So
+         * maybe it's supposed to refer to the 2.0 source then, who knows) */
+        if (!g_hash_table_lookup (unknown_sources, license->source)) {
+          g_printerr ("Unknown source license %s\n", license->source);
+          g_hash_table_insert (unknown_sources, g_strdup (license->source),
+              GUINT_TO_POINTER (TRUE));
+        }
+        /* g_print ("Unknown source license %s referenced from %s\n",
+         * license->source, license->ref); */
+      }
+
+      /* should we pack this into the source or not */
+      if (source != NULL) {
+        source->jurisdiction |= license->jurisdiction;
+        source->derived = g_list_insert_sorted (source->derived, license,
+            (GCompareFunc) license_ref_cmp);
+        license->packed_into_source = TRUE;
+      }
+    } else {
+      /* no source license */
+      if (license->titles == NULL)
+        g_error ("License has no titles: %s\n", license->ref);
+      if (license->descriptions == NULL);
+      g_printerr ("License %s has no descriptions!\n", license->ref);
+    }
+  }
+
+  licenses = g_list_sort (licenses, (GCompareFunc) license_ref_cmp);
+
+  string_table = string_table_new ();
+
+  g_print ("/* created by mklicensestables.c */\n");
+  g_print ("static const struct {\n"
+      "  /* jurisdictions in addition to the generic version, bitfield */\n"
+      "  const guint64             jurisdictions;\n"
+      "  const GstTagLicenseFlags  flags;\n"
+      "  /* the bit after http://creativecommons.org/licenses/ */\n"
+      "  const gchar               ref[18];\n"
+      "  gint16                    title_idx;  /* index in string table */\n"
+      "  gint16                    desc_idx;   /* index in string table */\n"
+      "} licenses[] = {\n");
+
+  for (l = licenses; l != NULL; l = l->next) {
+    const gchar *title_en, *desc_en;
+    int idx_title, idx_desc;
+    License *license;
+
+    license = l->data;
+
+    if (license->packed_into_source)
+      continue;
+
+    title_en = g_hash_table_lookup (license->titles, "en");
+    g_assert (title_en != NULL);
+    idx_title = string_table_add_string (string_table, title_en);
+    g_assert (idx_title <= G_MAXINT16);
+
+    if (license->descriptions != NULL) {
+      desc_en = g_hash_table_lookup (license->descriptions, "en");
+      g_assert (desc_en != NULL);
+      idx_desc = string_table_add_string (string_table, desc_en);
+      g_assert (idx_desc <= G_MAXINT16);
+    } else {
+      idx_desc = -1;
+    }
+
+    /* output comments with license refs covered by the next stanza */
+    if (license->derived != NULL) {
+      GList *d;
+
+      g_print ("  /* %2d %s\n", idx, license->ref);
+
+      for (d = license->derived; d != NULL; d = d->next) {
+        License *derived_license = d->data;
+
+        g_print ("   * %2d %s%s\n", idx, derived_license->ref,
+            (d->next == NULL) ? " */" : "");
+      }
+    } else {
+      g_print ("  /* %2d %s */\n", idx, license->ref);
+    }
+    /* output essential data */
+    {
+      gchar *ref;
+
+      ref =
+          g_strdup (license->ref +
+          strlen ("http://creativecommons.org/licenses/"));
+
+      /* remove jurisdiction suffix from ref if this is non-generic, since
+       * the suffix is already contained in the jurisdiction flags */
+      if (license->jurisdiction_suffix != NULL) {
+        gsize suffix_len = strlen (license->jurisdiction_suffix);
+        gchar *cutoff;
+
+        cutoff = ref + strlen (ref) - suffix_len;
+        g_assert (!strncmp (cutoff, license->jurisdiction_suffix, suffix_len));
+        g_assert (cutoff[suffix_len - 1] == '/');
+        g_assert (cutoff[suffix_len] == '\0');
+        *cutoff = '\0';
+      }
+
+      g_print ("  { 0x%016" G_GINT64_MODIFIER "x, 0x%08x, \"%s\", %d, %d }%s\n",
+          license->jurisdiction, license->flags, ref, idx_title, idx_desc,
+          (l->next != NULL) ? "," : "");
+
+      g_free (ref);
+    }
+    ++idx;
+  }
+  g_print ("};\n");
+
+  g_print ("\nstatic const gchar license_strings[] =\n");
+  string_table_print (string_table);
+  string_table_free (string_table);
+  string_table = NULL;
+
+  if (translation_dict_fn != NULL) {
+    write_translations_dictionary (licenses, translation_dict_fn);
+  }
+
+  return 0;
+}
diff --git a/gst-libs/gst/tag/tag.h b/gst-libs/gst/tag/tag.h
new file mode 100644
index 0000000..69a3ba4
--- /dev/null
+++ b/gst-libs/gst/tag/tag.h
@@ -0,0 +1,650 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ * Copyright (C) 2006-2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TAG_TAG_H__
+#define __GST_TAG_TAG_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* Tag names */
+
+/**
+ * GST_TAG_MUSICBRAINZ_TRACKID
+ *
+ * MusicBrainz track ID
+ */
+#define GST_TAG_MUSICBRAINZ_TRACKID	"musicbrainz-trackid"
+/**
+ * GST_TAG_MUSICBRAINZ_ARTISTID
+ *
+ * MusicBrainz artist ID
+ */
+#define GST_TAG_MUSICBRAINZ_ARTISTID	"musicbrainz-artistid"
+/**
+ * GST_TAG_MUSICBRAINZ_ALBUMID
+ *
+ * MusicBrainz album ID
+ */
+#define GST_TAG_MUSICBRAINZ_ALBUMID	"musicbrainz-albumid"
+/**
+ * GST_TAG_MUSICBRAINZ_ALBUMARTISTID
+ *
+ * MusicBrainz album artist ID
+ */
+#define GST_TAG_MUSICBRAINZ_ALBUMARTISTID	"musicbrainz-albumartistid"
+/**
+ * GST_TAG_MUSICBRAINZ_TRMID
+ *
+ * MusicBrainz track TRM ID
+ */
+#define GST_TAG_MUSICBRAINZ_TRMID	"musicbrainz-trmid"
+
+/* FIXME 0.11: remove GST_TAG_MUSICBRAINZ_SORTNAME */
+#ifndef GST_DISABLE_DEPRECATED
+/**
+ * GST_TAG_MUSICBRAINZ_SORTNAME
+ *
+ * MusicBrainz artist sort name
+ *
+ * Deprecated.  Use GST_TAG_ARTIST_SORTNAME instead.
+ */
+#define GST_TAG_MUSICBRAINZ_SORTNAME	GST_TAG_ARTIST_SORTNAME
+#endif
+
+/**
+ * GST_TAG_CMML_STREAM
+ *
+ * Annodex CMML stream element tag
+ */
+#define GST_TAG_CMML_STREAM "cmml-stream"
+/**
+ * GST_TAG_CMML_HEAD
+ *
+ * Annodex CMML head element tag
+ */
+
+#define GST_TAG_CMML_HEAD "cmml-head"
+/**
+ * GST_TAG_CMML_CLIP
+ *
+ * Annodex CMML clip element tag
+ */
+#define GST_TAG_CMML_CLIP "cmml-clip"
+
+/* CDDA tags */
+
+/**
+ * GST_TAG_CDDA_CDDB_DISCID:
+ *
+ * CDDB disc id in its short form (e.g. 'aa063d0f')
+ */
+#define GST_TAG_CDDA_CDDB_DISCID              "discid"
+
+/**
+ * GST_TAG_CDDA_CDDB_DISCID_FULL:
+ *
+ * CDDB disc id including all details
+ */
+#define GST_TAG_CDDA_CDDB_DISCID_FULL         "discid-full"
+
+/**
+ * GST_TAG_CDDA_MUSICBRAINZ_DISCID:
+ *
+ * Musicbrainz disc id (e.g. 'ahg7JUcfR3vCYBphSDIogOOWrr0-')
+ */
+#define GST_TAG_CDDA_MUSICBRAINZ_DISCID       "musicbrainz-discid"
+
+/**
+ * GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL:
+ *
+ * Musicbrainz disc id details
+ */
+#define GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL  "musicbrainz-discid-full"
+
+/**
+ * GST_TAG_CAPTURING_SHUTTER_SPEED:
+ *
+ * Shutter speed used when capturing an image, in seconds. (fraction)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_SHUTTER_SPEED        "capturing-shutter-speed"
+
+/**
+ * GST_TAG_CAPTURING_FOCAL_RATIO:
+ *
+ * Focal ratio (f-number) used when capturing an image. (double)
+ *
+ * The value stored is the denominator of the focal ratio (f-number).
+ * For example, if this tag value is 2, the focal ratio is f/2.
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_FOCAL_RATIO          "capturing-focal-ratio"
+
+/**
+ * GST_TAG_CAPTURING_FOCAL_LENGTH:
+ *
+ * Focal length used when capturing an image, in mm. (double)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_FOCAL_LENGTH         "capturing-focal-length"
+
+/**
+ * GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO:
+ *
+ * Digital zoom ratio used when capturing an image. (double)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO   "capturing-digital-zoom-ratio"
+
+/**
+ * GST_TAG_CAPTURING_ISO_SPEED:
+ *
+ * ISO speed used when capturing an image. (integer)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_ISO_SPEED           "capturing-iso-speed"
+
+/**
+ * GST_TAG_CAPTURING_EXPOSURE_PROGRAM:
+ *
+ * Type of exposure control used when capturing an image. (string)
+ *
+ * The allowed values are:
+ *   "undefined"
+ *   "manual"
+ *   "normal" - automatically controlled
+ *   "aperture-priority" - user selects aperture value
+ *   "shutter-priority" - user selects shutter speed
+ *   "creative" - biased towards depth of field
+ *   "action" - biased towards fast shutter speed
+ *   "portrait" - closeup, leaving background out of focus
+ *   "landscape" - landscape photos, background in focus
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_EXPOSURE_PROGRAM     "capturing-exposure-program"
+
+/**
+ * GST_TAG_CAPTURING_EXPOSURE_MODE:
+ *
+ * Exposure mode used when capturing an image. (string)
+ *
+ * The allowed values are:
+ *   "auto-exposure"
+ *   "manual-exposure"
+ *   "auto-bracket"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_EXPOSURE_MODE       "capturing-exposure-mode"
+
+/**
+ * GST_TAG_CAPTURING_EXPOSURE_COMPENSATION:
+ *
+ * Exposure compensation using when capturing an image in EV. (double)
+ *
+ * Since: 0.10.33
+ */
+#define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation"
+
+/**
+ * GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE:
+ *
+ * Scene mode used when capturing an image. (string)
+ *
+ * The allowed values are:
+ *   "standard"
+ *   "landscape"
+ *   "portrait"
+ *   "night-scene"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE  "capturing-scene-capture-type"
+
+/**
+ * GST_TAG_CAPTURING_GAIN_ADJUSTMENT:
+ *
+ * Gain adjustment applied to an image. (string)
+ *
+ * The allowed values are:
+ *   "none"
+ *   "low-gain-up"
+ *   "high-gain-up"
+ *   "low-gain-down"
+ *   "high-gain-down"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_GAIN_ADJUSTMENT     "capturing-gain-adjustment"
+
+/**
+ * GST_TAG_CAPTURING_WHITE_BALANCE:
+ *
+ * White balance mode used when capturing an image. (string)
+ *
+ * The allowed values are:
+ *   "auto"
+ *   "manual"
+ *   "daylight"
+ *   "cloudy"
+ *   "tungsten"
+ *   "fluorescent"
+ *   "fluorescent h" (newer daylight-calibrated fluorescents)
+ *   "flash"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_WHITE_BALANCE       "capturing-white-balance"
+
+/**
+ * GST_TAG_CAPTURING_CONTRAST:
+ *
+ * Direction of contrast processing applied when capturing an image. (string)
+ *
+ * The allowed values are:
+ *  "normal"
+ *  "soft"
+ *  "hard"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_CONTRAST            "capturing-contrast"
+
+/**
+ * GST_TAG_CAPTURING_SATURATION:
+ *
+ * Direction of saturation processing applied when capturing an image. (string)
+ *
+ * The allowed values are:
+ *  "normal"
+ *  "low-saturation"
+ *  "high-saturation"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_SATURATION          "capturing-saturation"
+
+/**
+ * GST_TAG_CAPTURING_SHARPNESS:
+ *
+ * Direction of sharpness processing applied when capturing an image. (string)
+ *
+ * The allowed values are:
+ *  "normal"
+ *  "soft"
+ *  "hard"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_SHARPNESS          "capturing-sharpness"
+
+/**
+ * GST_TAG_CAPTURING_FLASH_FIRED:
+ *
+ * If flash was fired during the capture of an image. (boolean)
+ *
+ * Note that if this tag isn't present, it should not be assumed that
+ * the flash did not fire. It should be treated as unknown.
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_FLASH_FIRED         "capturing-flash-fired"
+
+/**
+ * GST_TAG_CAPTURING_FLASH_MODE:
+ *
+ * The flash mode selected during the capture of an image. (string)
+ *
+ * The allowed values are:
+ *  "auto"
+ *  "always"
+ *  "never"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_FLASH_MODE         "capturing-flash-mode"
+
+/**
+ * GST_TAG_CAPTURING_METERING_MODE:
+ *
+ * Defines the way a camera determines the exposure. (string)
+ *
+ * The allowed values are:
+ *   "unknown"
+ *   "average"
+ *   "center-weighted-average"
+ *   "spot"
+ *   "multi-spot"
+ *   "pattern"
+ *   "partial"
+ *   "other"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_METERING_MODE      "capturing-metering-mode"
+
+/**
+ * GST_TAG_CAPTURING_SOURCE:
+ *
+ * Indicates the source of capture. The device/medium used to do the
+ * capture. (string)
+ *
+ * Allowed values are:
+ *   "dsc" (= digital still camera)
+ *   "transparent-scanner"
+ *   "reflex-scanner"
+ *   "other"
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_CAPTURING_SOURCE             "capturing-source"
+
+/**
+ * GST_TAG_IMAGE_HORIZONTAL_PPI:
+ *
+ * Media (image/video) intended horizontal pixel density in ppi. (double)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_IMAGE_HORIZONTAL_PPI         "image-horizontal-ppi"
+/**
+ * GST_TAG_IMAGE_VERTICAL_PPI:
+ *
+ * Media (image/video) intended vertical pixel density in ppi. (double)
+ *
+ * Since: 0.10.31
+ */
+#define GST_TAG_IMAGE_VERTICAL_PPI           "image-vertical-ppi"
+
+
+/* additional information for image tags */
+
+/**
+ * GstTagImageType:
+ * @GST_TAG_IMAGE_TYPE_NONE                  : No image type. Can be used to
+ *      tell functions such as gst_tag_image_data_to_image_buffer() that no
+ *      image type should be set. (Since: 0.10.20)
+ * @GST_TAG_IMAGE_TYPE_UNDEFINED             : Undefined/other image type
+ * @GST_TAG_IMAGE_TYPE_FRONT_COVER           : Cover (front)
+ * @GST_TAG_IMAGE_TYPE_BACK_COVER            : Cover (back)
+ * @GST_TAG_IMAGE_TYPE_LEAFLET_PAGE          : Leaflet page
+ * @GST_TAG_IMAGE_TYPE_MEDIUM                : Medium (e.g. label side of CD)
+ * @GST_TAG_IMAGE_TYPE_LEAD_ARTIST           : Lead artist/lead performer/soloist
+ * @GST_TAG_IMAGE_TYPE_ARTIST                : Artist/performer
+ * @GST_TAG_IMAGE_TYPE_CONDUCTOR             : Conductor
+ * @GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA        : Band/orchestra
+ * @GST_TAG_IMAGE_TYPE_COMPOSER              : Composer
+ * @GST_TAG_IMAGE_TYPE_LYRICIST              : Lyricist/text writer
+ * @GST_TAG_IMAGE_TYPE_RECORDING_LOCATION    : Recording location
+ * @GST_TAG_IMAGE_TYPE_DURING_RECORDING      : During recording
+ * @GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE    : During performance
+ * @GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE         : Movie/video screen capture
+ * @GST_TAG_IMAGE_TYPE_FISH                  : A fish as funny as the ID3v2 spec
+ * @GST_TAG_IMAGE_TYPE_ILLUSTRATION          : Illustration
+ * @GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO      : Band/artist logotype
+ * @GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO : Publisher/studio logotype
+ *
+ * Type of image contained in an image tag (specified as field in
+ * the image buffer's caps structure)
+ *
+ * Since: 0.10.9
+ */
+/* Note: keep in sync with register_tag_image_type_enum() */
+typedef enum {
+  GST_TAG_IMAGE_TYPE_NONE = -1,
+  GST_TAG_IMAGE_TYPE_UNDEFINED = 0,
+  GST_TAG_IMAGE_TYPE_FRONT_COVER,
+  GST_TAG_IMAGE_TYPE_BACK_COVER,
+  GST_TAG_IMAGE_TYPE_LEAFLET_PAGE,
+  GST_TAG_IMAGE_TYPE_MEDIUM,
+  GST_TAG_IMAGE_TYPE_LEAD_ARTIST,
+  GST_TAG_IMAGE_TYPE_ARTIST,
+  GST_TAG_IMAGE_TYPE_CONDUCTOR,
+  GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA,
+  GST_TAG_IMAGE_TYPE_COMPOSER,
+  GST_TAG_IMAGE_TYPE_LYRICIST,
+  GST_TAG_IMAGE_TYPE_RECORDING_LOCATION,
+  GST_TAG_IMAGE_TYPE_DURING_RECORDING,
+  GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE,
+  GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE,
+  GST_TAG_IMAGE_TYPE_FISH,
+  GST_TAG_IMAGE_TYPE_ILLUSTRATION,
+  GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO,
+  GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO
+} GstTagImageType;
+
+#define GST_TYPE_TAG_IMAGE_TYPE  (gst_tag_image_type_get_type ())
+GType   gst_tag_image_type_get_type (void);
+
+/**
+ * GST_TAG_ID3V2_HEADER_SIZE:
+ *
+ * ID3V2 header size considered minimum input for some functions such as
+ * gst_tag_list_from_id3v2_tag() and gst_tag_get_id3v2_tag_size() for example.
+ *
+ * Since: 0.10.36
+ */
+#define GST_TAG_ID3V2_HEADER_SIZE            10
+
+/* functions for vorbis comment manipulation */
+
+const gchar *           gst_tag_from_vorbis_tag                 (const gchar *          vorbis_tag);
+const gchar *           gst_tag_to_vorbis_tag                   (const gchar *          gst_tag);
+void                    gst_vorbis_tag_add                      (GstTagList *           list, 
+                                                                 const gchar *          tag, 
+                                                                 const gchar *          value);
+
+GList *                 gst_tag_to_vorbis_comments              (const GstTagList *     list, 
+                                                                 const gchar *          tag);
+
+/* functions to convert GstBuffers with vorbiscomment contents to GstTagLists and back */
+GstTagList *            gst_tag_list_from_vorbiscomment         (const guint8 *         data,
+                                                                 gsize                  size,
+                                                                 const guint8 *         id_data,
+                                                                 const guint            id_data_length,
+                                                                 gchar **               vendor_string);
+GstTagList *            gst_tag_list_from_vorbiscomment_buffer  (GstBuffer *            buffer,
+                                                                 const guint8 *         id_data,
+                                                                 const guint            id_data_length,
+                                                                 gchar **               vendor_string);
+GstBuffer *             gst_tag_list_to_vorbiscomment_buffer    (const GstTagList *     list,
+                                                                 const guint8 *         id_data,
+                                                                 const guint            id_data_length,
+                                                                 const gchar *          vendor_string);
+
+/* functions for ID3 tag manipulation */
+
+/* FIXME 0.11: inconsistent API naming: gst_tag_list_new_from_id3v1(), gst_tag_list_from_*_buffer(),
+ * gst_tag_list_from_id3v2_tag(). Also, note gst.tag.list_xyz() namespace vs. gst.tag_list_xyz(),
+ * which is a bit confusing and possibly doesn't map too well */
+
+guint                   gst_tag_id3_genre_count                 (void);
+const gchar *           gst_tag_id3_genre_get                   (const guint            id);
+GstTagList *            gst_tag_list_new_from_id3v1             (const guint8 *         data);
+
+const gchar *           gst_tag_from_id3_tag                    (const gchar *          id3_tag);
+const gchar *           gst_tag_from_id3_user_tag               (const gchar *          type,
+                                                                 const gchar *          id3_user_tag);
+const gchar *           gst_tag_to_id3_tag                      (const gchar *          gst_tag);
+
+gboolean                gst_tag_list_add_id3_image (GstTagList   * tag_list,
+                                                    const guint8 * image_data,
+                                                    guint          image_data_len,
+                                                    guint          id3_picture_type);
+
+GstTagList *            gst_tag_list_from_id3v2_tag (GstBuffer * buffer);
+
+guint                   gst_tag_get_id3v2_tag_size  (GstBuffer * buffer);
+
+/* functions to  convert GstBuffers with xmp packets contents to GstTagLists and back */
+GstTagList *            gst_tag_list_from_xmp_buffer  (GstBuffer *  buffer);
+GstBuffer *             gst_tag_list_to_xmp_buffer    (const GstTagList * list,
+                                                       gboolean           read_only);
+GstBuffer *		gst_tag_list_to_xmp_buffer_full (const GstTagList * list,
+							gboolean read_only, const gchar ** schemas);
+const gchar**		gst_tag_xmp_list_schemas      (void);
+
+/* functions related to exif */
+GstBuffer *             gst_tag_list_to_exif_buffer (const GstTagList * taglist,
+                                                     gint byte_order,
+                                                     guint32 base_offset);
+
+GstBuffer *             gst_tag_list_to_exif_buffer_with_tiff_header (const GstTagList * taglist);
+
+GstTagList *            gst_tag_list_from_exif_buffer (GstBuffer * buffer,
+                                                       gint byte_order,
+                                                       guint32 base_offset);
+
+GstTagList *            gst_tag_list_from_exif_buffer_with_tiff_header (
+                                                      GstBuffer * buffer);
+
+/* other tag-related functions */
+
+gboolean                gst_tag_parse_extended_comment (const gchar  * ext_comment,
+                                                        gchar       ** key,
+                                                        gchar       ** lang,
+                                                        gchar       ** value,
+                                                        gboolean       fail_if_no_key);
+
+gchar                 * gst_tag_freeform_string_to_utf8 (const gchar  * data,
+                                                         gint           size,
+                                                         const gchar ** env_vars);
+
+GstBuffer             * gst_tag_image_data_to_image_buffer (const guint8   * image_data,
+                                                            guint            image_data_len,
+                                                            GstTagImageType  image_type);
+
+/* FIXME 0.11: get rid of this awkward register/init function, see tags.c */
+void                    gst_tag_register_musicbrainz_tags (void);
+
+
+/* language tag related functions */
+
+gchar **       gst_tag_get_language_codes (void);
+
+const gchar *  gst_tag_get_language_name (const gchar * language_code);
+
+const gchar *  gst_tag_get_language_code_iso_639_1 (const gchar * lang_code);
+
+const gchar *  gst_tag_get_language_code_iso_639_2B (const gchar * lang_code);
+
+const gchar *  gst_tag_get_language_code_iso_639_2T (const gchar * lang_code);
+
+/**
+ * gst_tag_get_language_code:
+ * @lang_code: ISO-639 language code (e.g. "deu" or "ger" or "de")
+ *
+ * Convenience macro wrapping gst_tag_get_language_code_iso_639_1().
+ *
+ * Since: 0.10.26
+ */
+#define gst_tag_get_language_code(lang_code) \
+    gst_tag_get_language_code_iso_639_1(lang_code)
+
+
+/* functions to deal with (mostly) Creative Commons licenses */
+
+/**
+ * GstTagLicenseFlags:
+ * @GST_TAG_LICENSE_PERMITS_REPRODUCTION: making multiple copies
+ *     is allowed
+ * @GST_TAG_LICENSE_PERMITS_DISTRIBUTION: distribution, public display
+ *     and public performance are allowed
+ * @GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS: distribution of derivative
+ *     works is allowed
+ * @GST_TAG_LICENSE_PERMITS_SHARING: commercial derivatives are allowed,
+ *     but only non-commercial distribution is allowed
+ * @GST_TAG_LICENSE_REQUIRES_NOTICE: copyright and license notices
+ *     must be kept intact
+ * @GST_TAG_LICENSE_REQUIRES_ATTRIBUTION: credit must be given to
+ *     copyright holder and/or author
+ * @GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE: derivative works must be
+ *     licensed under the same terms or compatible terms as the original work
+ * @GST_TAG_LICENSE_REQUIRES_SOURCE_CODE: source code (the preferred
+ *     form for making modifications) must be provided when exercising some
+ *     rights granted by the license
+ * @GST_TAG_LICENSE_REQUIRES_COPYLEFT: derivative and combined works
+ *     must be licensed under specified terms, similar to those of the original
+ *     work
+ * @GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT: derivative works must be
+ *     licensed under specified terms, with at least the same conditions as
+ *     the original work; combinations with the work may be licensed under
+ *     different terms
+ * @GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE: exercising rights for
+ *     commercial purposes is prohibited
+ * @GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE: use in a
+ *     non-developing country is prohibited
+ * @GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE: this license was created
+ *     by the Creative Commons project
+ * @GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE: this license was
+ *     created by the Free Software Foundation (FSF)
+ *
+ * See http://creativecommons.org/ns for more information.
+ *
+ * Since: 0.10.36
+ */
+typedef enum {
+  GST_TAG_LICENSE_PERMITS_REPRODUCTION             = (1 << 0),
+  GST_TAG_LICENSE_PERMITS_DISTRIBUTION             = (1 << 1),
+  GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS         = (1 << 2),
+  GST_TAG_LICENSE_PERMITS_SHARING                  = (1 << 3),
+
+  GST_TAG_LICENSE_REQUIRES_NOTICE                  = (1 << 8),
+  GST_TAG_LICENSE_REQUIRES_ATTRIBUTION             = (1 << 9),
+  GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE             = (1 << 10),
+  GST_TAG_LICENSE_REQUIRES_SOURCE_CODE             = (1 << 11),
+  GST_TAG_LICENSE_REQUIRES_COPYLEFT                = (1 << 12),
+  GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT         = (1 << 13),
+
+  GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE         = (1 << 16),
+  GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE = (1 << 17),
+
+  GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE         = (1 << 24),
+  GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE = (1 << 25)
+} GstTagLicenseFlags;
+
+gchar **            gst_tag_get_licenses (void);
+
+GstTagLicenseFlags  gst_tag_get_license_flags (const gchar * license_ref);
+
+const gchar *       gst_tag_get_license_nick  (const gchar * license_ref);
+
+const gchar *       gst_tag_get_license_title (const gchar * license_ref);
+
+const gchar *       gst_tag_get_license_version (const gchar * license_ref);
+
+const gchar *       gst_tag_get_license_description  (const gchar * license_ref);
+
+const gchar *       gst_tag_get_license_jurisdiction (const gchar * license_ref);
+
+GType               gst_tag_license_flags_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TAG_TAG_H__ */
diff --git a/gst-libs/gst/tag/tags.c b/gst-libs/gst/tag/tags.c
new file mode 100644
index 0000000..ed05e1b
--- /dev/null
+++ b/gst-libs/gst/tag/tags.c
@@ -0,0 +1,646 @@
+/* GStreamer non-core tag registration and tag utility functions
+ * Copyright (C) 2005 Ross Burton <ross@burtonini.com>
+ * Copyright (C) 2006-2008 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/base/gsttypefindhelper.h>
+#include <gst/gst.h>
+#include "tag.h"
+#include "id3v2.h"
+
+#include <string.h>
+
+/**
+ * SECTION:gsttag
+ * @short_description: additional tag definitions for plugins and applications
+ * @see_also: #GstTagList
+ * 
+ * <refsect2>
+ * <para>
+ * Contains additional standardized GStreamer tag definitions for plugins
+ * and applications, and functions to register them with the GStreamer
+ * tag system.
+ * </para>
+ * </refsect2>
+ */
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT gst_tag_ensure_debug_category()
+
+static GstDebugCategory *
+gst_tag_ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    GstDebugCategory *cat = NULL;
+
+    GST_DEBUG_CATEGORY_INIT (cat, "tag-tags", 0, "GstTag helper functions");
+
+    g_once_init_leave (&cat_gonce, (gsize) cat);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#endif /* GST_DISABLE_GST_DEBUG */
+
+static gpointer
+gst_tag_register_tags_internal (gpointer unused)
+{
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif
+
+  /* musicbrainz tags */
+  gst_tag_register (GST_TAG_MUSICBRAINZ_TRACKID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("track ID"), _("MusicBrainz track ID"), NULL);
+  gst_tag_register (GST_TAG_MUSICBRAINZ_ARTISTID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("artist ID"), _("MusicBrainz artist ID"), NULL);
+  gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("album ID"), _("MusicBrainz album ID"), NULL);
+  gst_tag_register (GST_TAG_MUSICBRAINZ_ALBUMARTISTID, GST_TAG_FLAG_META,
+      G_TYPE_STRING,
+      _("album artist ID"), _("MusicBrainz album artist ID"), NULL);
+  gst_tag_register (GST_TAG_MUSICBRAINZ_TRMID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("track TRM ID"), _("MusicBrainz TRM ID"), NULL);
+
+  /* CDDA tags */
+  gst_tag_register (GST_TAG_CDDA_CDDB_DISCID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, "discid", "CDDB discid for metadata retrieval",
+      gst_tag_merge_use_first);
+
+  gst_tag_register (GST_TAG_CDDA_CDDB_DISCID_FULL, GST_TAG_FLAG_META,
+      G_TYPE_STRING, "discid full",
+      "CDDB discid for metadata retrieval (full)", gst_tag_merge_use_first);
+
+  gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID, GST_TAG_FLAG_META,
+      G_TYPE_STRING, "musicbrainz-discid",
+      "Musicbrainz discid for metadata retrieval", gst_tag_merge_use_first);
+
+  gst_tag_register (GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL, GST_TAG_FLAG_META,
+      G_TYPE_STRING, "musicbrainz-discid-full",
+      "Musicbrainz discid for metadata retrieval (full)",
+      gst_tag_merge_use_first);
+
+  /* photography tags */
+  gst_tag_register (GST_TAG_CAPTURING_SHUTTER_SPEED, GST_TAG_FLAG_META,
+      GST_TYPE_FRACTION, _("capturing shutter speed"),
+      _("Shutter speed used when capturing an image, in seconds"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_FOCAL_RATIO, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("capturing focal ratio"),
+      _("Focal ratio (f-number) used when capturing the image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_FOCAL_LENGTH, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("capturing focal length"),
+      _("Focal length of the lens used capturing the image, in mm"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("capturing digital zoom ratio"),
+      _("Digital zoom ratio used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_ISO_SPEED, GST_TAG_FLAG_META,
+      G_TYPE_INT, _("capturing iso speed"),
+      _("The ISO speed used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing exposure program"),
+      _("The exposure program used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_MODE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing exposure mode"),
+      _("The exposure mode used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("capturing exposure compensation"),
+      _("The exposure compensation used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing scene capture type"),
+      _("The scene capture mode used when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing gain adjustment"),
+      _("The overall gain adjustment applied on an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_WHITE_BALANCE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing white balance"),
+      _("The white balance mode set when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_CONTRAST, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing contrast"),
+      _("The direction of contrast processing applied "
+          "when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_SATURATION, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing saturation"),
+      _("The direction of saturation processing applied when "
+          "capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_SHARPNESS, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing sharpness"),
+      _("The direction of sharpness processing applied "
+          "when capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_FLASH_FIRED, GST_TAG_FLAG_META,
+      G_TYPE_BOOLEAN, _("capturing flash fired"),
+      _("If the flash fired while capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_FLASH_MODE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing flash mode"),
+      _("The selected flash mode while capturing an image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_METERING_MODE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing metering mode"),
+      _("The metering mode used while determining exposure for capturing an"
+          " image"), NULL);
+
+  gst_tag_register (GST_TAG_CAPTURING_SOURCE, GST_TAG_FLAG_META,
+      G_TYPE_STRING, _("capturing source"),
+      _("The source or type of device used for the capture"), NULL);
+
+  gst_tag_register (GST_TAG_IMAGE_HORIZONTAL_PPI, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("image horizontal ppi"),
+      _("Media (image/video) intended horizontal pixel density in ppi"), NULL);
+
+  gst_tag_register (GST_TAG_IMAGE_VERTICAL_PPI, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("image vertical ppi"),
+      _("Media (image/video) intended vertical pixel density in ppi"), NULL);
+
+  gst_tag_register (GST_TAG_ID3V2_FRAME, GST_TAG_FLAG_META,
+      GST_TYPE_BUFFER, _("ID3v2 frame"), _("unparsed id3v2 tag frame"),
+      gst_tag_merge_use_first);
+
+  return NULL;
+}
+
+/* FIXME 0.11: rename this to gst_tag_init() or gst_tag_register_tags() or
+ * even better: make tags auto-register themselves, either by defining them
+ * to a wrapper func that does the initing, or by adding tag factories so
+ * that the core can load+register tags automatically when needed. */
+
+/**
+ * gst_tag_register_musicbrainz_tags
+ *
+ * Registers additional musicbrainz-specific tags with the GStreamer tag
+ * system. Plugins and applications that use these tags should call this
+ * function before using them. Can be called multiple times.
+ */
+void
+gst_tag_register_musicbrainz_tags (void)
+{
+  static GOnce mb_once = G_ONCE_INIT;
+
+  g_once (&mb_once, gst_tag_register_tags_internal, NULL);
+}
+
+static void
+register_tag_image_type_enum (GType * id)
+{
+  static const GEnumValue image_types[] = {
+    {GST_TAG_IMAGE_TYPE_NONE, "GST_TAG_IMAGE_TYPE_NONE", "none"},
+    {GST_TAG_IMAGE_TYPE_UNDEFINED, "GST_TAG_IMAGE_TYPE_UNDEFINED", "undefined"},
+    {GST_TAG_IMAGE_TYPE_FRONT_COVER, "GST_TAG_IMAGE_TYPE_FRONT_COVER",
+        "front-cover"},
+    {GST_TAG_IMAGE_TYPE_BACK_COVER, "GST_TAG_IMAGE_TYPE_BACK_COVER",
+        "back-cover"},
+    {GST_TAG_IMAGE_TYPE_LEAFLET_PAGE, "GST_TAG_IMAGE_TYPE_LEAFLET_PAGE",
+        "leaflet-page"},
+    {GST_TAG_IMAGE_TYPE_MEDIUM, "GST_TAG_IMAGE_TYPE_MEDIUM", "medium"},
+    {GST_TAG_IMAGE_TYPE_LEAD_ARTIST, "GST_TAG_IMAGE_TYPE_LEAD_ARTIST",
+        "lead-artist"},
+    {GST_TAG_IMAGE_TYPE_ARTIST, "GST_TAG_IMAGE_TYPE_ARTIST", "artist"},
+    {GST_TAG_IMAGE_TYPE_CONDUCTOR, "GST_TAG_IMAGE_TYPE_CONDUCTOR", "conductor"},
+    {GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA, "GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA",
+        "band-orchestra"},
+    {GST_TAG_IMAGE_TYPE_COMPOSER, "GST_TAG_IMAGE_TYPE_COMPOSER", "composer"},
+    {GST_TAG_IMAGE_TYPE_LYRICIST, "GST_TAG_IMAGE_TYPE_LYRICIST", "lyricist"},
+    {GST_TAG_IMAGE_TYPE_RECORDING_LOCATION,
+          "GST_TAG_IMAGE_TYPE_RECORDING_LOCATION",
+        "recording-location"},
+    {GST_TAG_IMAGE_TYPE_DURING_RECORDING, "GST_TAG_IMAGE_TYPE_DURING_RECORDING",
+        "during-recording"},
+    {GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE,
+          "GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE",
+        "during-performance"},
+    {GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE, "GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE",
+        "video-capture"},
+    {GST_TAG_IMAGE_TYPE_FISH, "GST_TAG_IMAGE_TYPE_FISH", "fish"},
+    {GST_TAG_IMAGE_TYPE_ILLUSTRATION, "GST_TAG_IMAGE_TYPE_ILLUSTRATION",
+        "illustration"},
+    {GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO, "GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO",
+        "artist-logo"},
+    {GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO,
+          "GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO",
+        "publisher-studio-logo"},
+    {0, NULL, NULL}
+  };
+
+  *id = g_enum_register_static ("GstTagImageType", image_types);
+
+  /* work around thread-safety issue with class creation in GLib */
+  g_type_class_ref (*id);
+}
+
+GType
+gst_tag_image_type_get_type (void)
+{
+  static GType id;
+
+  static GOnce once = G_ONCE_INIT;
+
+  g_once (&once, (GThreadFunc) register_tag_image_type_enum, &id);
+  return id;
+}
+
+static inline gboolean
+gst_tag_image_type_is_valid (GstTagImageType type)
+{
+  GEnumClass *klass;
+
+  gboolean res;
+
+  klass = g_type_class_ref (gst_tag_image_type_get_type ());
+  res = (g_enum_get_value (klass, type) != NULL);
+  g_type_class_unref (klass);
+
+  return res;
+}
+
+/**
+ * gst_tag_parse_extended_comment:
+ * @ext_comment: an extended comment string, see #GST_TAG_EXTENDED_COMMENT
+ * @key: return location for the comment description key, or NULL
+ * @lang: return location for the comment ISO-639 language code, or NULL
+ * @value: return location for the actual comment string, or NULL
+ * @fail_if_no_key: whether to fail if strings are not in key=value form
+ *
+ * Convenience function to parse a GST_TAG_EXTENDED_COMMENT string and
+ * separate it into its components.
+ *
+ * If successful, @key, @lang and/or @value will be set to newly allocated
+ * strings that you need to free with g_free() when done. @key and @lang
+ * may also be set to NULL by this function if there is no key or no language
+ * code in the extended comment string.
+ *
+ * Returns: TRUE if the string could be parsed, otherwise FALSE
+ *
+ * Since: 0.10.10
+ */
+gboolean
+gst_tag_parse_extended_comment (const gchar * ext_comment, gchar ** key,
+    gchar ** lang, gchar ** value, gboolean fail_if_no_key)
+{
+  const gchar *div, *bop, *bcl;
+
+  g_return_val_if_fail (ext_comment != NULL, FALSE);
+  g_return_val_if_fail (g_utf8_validate (ext_comment, -1, NULL), FALSE);
+
+  if (key)
+    *key = NULL;
+  if (lang)
+    *lang = NULL;
+
+  div = strchr (ext_comment, '=');
+  bop = strchr (ext_comment, '[');
+  bcl = strchr (ext_comment, ']');
+
+  if (div == NULL) {
+    if (fail_if_no_key)
+      return FALSE;
+    if (value)
+      *value = g_strdup (ext_comment);
+    return TRUE;
+  }
+
+  if (bop != NULL && bop < div) {
+    if (bcl < bop || bcl > div)
+      return FALSE;
+    if (key)
+      *key = g_strndup (ext_comment, bop - ext_comment);
+    if (lang)
+      *lang = g_strndup (bop + 1, bcl - bop - 1);
+  } else {
+    if (key)
+      *key = g_strndup (ext_comment, div - ext_comment);
+  }
+
+  if (value)
+    *value = g_strdup (div + 1);
+
+  return TRUE;
+}
+
+/**
+ * gst_tag_freeform_string_to_utf8:
+ * @data: string data
+ * @size: length of string data, or -1 if the string is NUL-terminated
+ * @env_vars: a NULL-terminated string array of environment variable names,
+ *            or NULL
+ *
+ * Convenience function to read a string with unknown character encoding. If
+ * the string is already in UTF-8 encoding, it will be returned right away.
+ * If not it tries to detect byte-order-mark for UTF-16/32 cases and use that.
+ * Otherwise, the environment will be searched for a number of environment
+ * variables (whose names are specified in the NULL-terminated string array
+ * @env_vars) containing a list of character encodings to try/use. If none
+ * are specified, the current locale will be tried. If that also doesn't work,
+ * WINDOWS-1252/ISO-8859-1 is assumed (which will almost always succeed).
+ *
+ * Returns: a newly-allocated string in UTF-8 encoding, or NULL
+ *
+ * Since: 0.10.13
+ */
+gchar *
+gst_tag_freeform_string_to_utf8 (const gchar * data, gint size,
+    const gchar ** env_vars)
+{
+  const gchar *cur_loc = NULL;
+
+  gsize bytes_read;
+
+  gchar *utf8 = NULL;
+
+  g_return_val_if_fail (data != NULL, NULL);
+
+  if (size < 0)
+    size = strlen (data);
+
+  /* chop off trailing string terminators to make sure utf8_validate doesn't
+   * get to see them (since that would make the utf8 check fail) */
+  while (size > 0 && data[size - 1] == '\0')
+    --size;
+
+  /* Should we try the charsets specified
+   * via environment variables FIRST ? */
+  if (g_utf8_validate (data, size, NULL)) {
+    utf8 = g_strndup (data, size);
+    GST_LOG ("String '%s' is valid UTF-8 already", utf8);
+    goto beach;
+  }
+
+  /* check for and use byte-order-mark for UTF-16/32 cases */
+  if (size >= 2) {
+    const gchar *c = NULL;
+    gint prefix, ssize;
+
+    if (size >= 4) {
+      prefix = 4;
+      ssize = GST_ROUND_DOWN_4 (size - 4);
+      switch (GST_READ_UINT32_BE (data)) {
+        case 0x0000FEFF:
+          c = "UTF-32BE";
+          break;
+        case 0xFFFE0000:
+          c = "UTF-32LE";
+          break;
+        default:
+          break;
+      }
+    }
+    if (!c) {
+      prefix = 2;
+      ssize = GST_ROUND_DOWN_2 (size - 2);
+      switch (GST_READ_UINT16_BE (data)) {
+        case 0xFEFF:
+          c = "UTF-16BE";
+          break;
+        case 0xFFFE:
+          c = "UTF-16LE";
+          break;
+        default:
+          break;
+      }
+    }
+    if (c) {
+      GST_LOG ("Trying to convert freeform string to UTF-8 from '%s'", c);
+      if ((utf8 =
+              g_convert (data + prefix, ssize, "UTF-8", c, &bytes_read, NULL,
+                  NULL))) {
+        if (bytes_read == ssize)
+          goto beach;
+        g_free (utf8);
+        utf8 = NULL;
+      }
+    }
+  }
+
+  while (env_vars && *env_vars != NULL) {
+    const gchar *env = NULL;
+
+    /* Try charsets specified via the environment */
+    env = g_getenv (*env_vars);
+    if (env != NULL && *env != '\0') {
+      gchar **c, **csets;
+
+      csets = g_strsplit (env, G_SEARCHPATH_SEPARATOR_S, -1);
+
+      for (c = csets; c && *c; ++c) {
+        GST_LOG ("Trying to convert freeform string to UTF-8 from '%s'", *c);
+        if ((utf8 =
+                g_convert (data, size, "UTF-8", *c, &bytes_read, NULL, NULL))) {
+          if (bytes_read == size) {
+            g_strfreev (csets);
+            goto beach;
+          }
+          g_free (utf8);
+          utf8 = NULL;
+        }
+      }
+
+      g_strfreev (csets);
+    }
+    ++env_vars;
+  }
+
+  /* Try current locale (if not UTF-8) */
+  if (!g_get_charset (&cur_loc)) {
+    GST_LOG ("Trying to convert freeform string using locale ('%s')", cur_loc);
+    if ((utf8 = g_locale_to_utf8 (data, size, &bytes_read, NULL, NULL))) {
+      if (bytes_read == size) {
+        goto beach;
+      }
+      g_free (utf8);
+      utf8 = NULL;
+    }
+  }
+
+  /* Try Windows-1252 (which is a superset of ISO 8859-1 that uses a control
+   * character range in ISO 8859-1 for more printable characters) */
+  {
+    GError *err = NULL;
+
+    GST_LOG ("Trying to convert freeform string using Windows-1252/ISO-8859-1 "
+        "fallback");
+    utf8 = g_convert (data, size, "UTF-8", "WINDOWS-1252", &bytes_read, NULL,
+        &err);
+    if (err != NULL) {
+      /* fallback in case iconv implementation doesn't support windows-1252
+       * for some reason */
+      if (err->code == G_CONVERT_ERROR_NO_CONVERSION) {
+        utf8 = g_convert (data, size, "UTF-8", "ISO-8859-1", &bytes_read,
+            NULL, NULL);
+      }
+      g_error_free (err);
+    }
+
+    if (utf8 != NULL && bytes_read == size)
+      goto beach;
+  }
+
+  g_free (utf8);
+  return NULL;
+
+beach:
+
+  g_strchomp (utf8);
+  if (utf8 && utf8[0] != '\0') {
+    GST_LOG ("Returning '%s'", utf8);
+    return utf8;
+  }
+
+  g_free (utf8);
+  return NULL;
+}
+
+/**
+ * gst_tag_image_data_to_image_buffer:
+ * @image_data: the (encoded) image
+ * @image_data_len: the length of the encoded image data at @image_data
+ * @image_type: type of the image, or #GST_TAG_IMAGE_TYPE_UNDEFINED. Pass
+ *     #GST_TAG_IMAGE_TYPE_NONE if no image type should be set at all (e.g.
+ *     for preview images)
+ *
+ * Helper function for tag-reading plugins to create a #GstBuffer suitable to
+ * add to a #GstTagList as an image tag (such as #GST_TAG_IMAGE or
+ * #GST_TAG_PREVIEW_IMAGE) from the encoded image data and an (optional) image
+ * type.
+ *
+ * Background: cover art and other images in tags are usually stored as a
+ * blob of binary image data, often accompanied by a MIME type or some other
+ * content type string (e.g. 'png', 'jpeg', 'jpg'). Sometimes there is also an
+ * 'image type' to indicate what kind of image this is (e.g. front cover,
+ * back cover, artist, etc.). The image data may also be an URI to the image
+ * rather than the image itself.
+ *
+ * In GStreamer, image tags are #GstBuffer<!-- -->s containing the raw image
+ * data, with the buffer caps describing the content type of the image
+ * (e.g. image/jpeg, image/png, text/uri-list). The buffer caps may contain
+ * an additional 'image-type' field of #GST_TYPE_TAG_IMAGE_TYPE to describe
+ * the type of image (front cover, back cover etc.). #GST_TAG_PREVIEW_IMAGE
+ * tags should not carry an image type, their type is already indicated via
+ * the special tag name.
+ *
+ * This function will do various checks and typefind the encoded image
+ * data (we can't trust the declared mime type).
+ *
+ * Returns: a newly-allocated image buffer for use in tag lists, or NULL
+ *
+ * Since: 0.10.20
+ */
+GstBuffer *
+gst_tag_image_data_to_image_buffer (const guint8 * image_data,
+    guint image_data_len, GstTagImageType image_type)
+{
+  const gchar *name;
+  GstBuffer *image;
+  GstCaps *caps;
+  guint8 *data;
+
+  g_return_val_if_fail (image_data != NULL, NULL);
+  g_return_val_if_fail (image_data_len > 0, NULL);
+  g_return_val_if_fail (gst_tag_image_type_is_valid (image_type), NULL);
+
+  GST_DEBUG ("image data len: %u bytes", image_data_len);
+
+  /* allocate space for a NUL terminator for an uri too */
+  image = gst_buffer_new_and_alloc (image_data_len + 1);
+  if (image == NULL)
+    goto alloc_failed;
+
+  data = gst_buffer_map (image, NULL, NULL, GST_MAP_WRITE);
+  memcpy (data, image_data, image_data_len);
+  data[image_data_len] = '\0';
+  gst_buffer_unmap (image, data, image_data_len + 1);
+
+  /* Find GStreamer media type, can't trust declared type */
+  caps = gst_type_find_helper_for_buffer (NULL, image, NULL);
+
+  if (caps == NULL)
+    goto no_type;
+
+  GST_DEBUG ("Found GStreamer media type: %" GST_PTR_FORMAT, caps);
+
+  /* sanity check: make sure typefound/declared caps are either URI or image */
+  name = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+
+  if (!g_str_has_prefix (name, "image/") &&
+      !g_str_has_prefix (name, "video/") &&
+      !g_str_equal (name, "text/uri-list")) {
+    GST_DEBUG ("Unexpected image type '%s', ignoring image frame", name);
+    goto error;
+  }
+
+  /* Decrease size by 1 if we don't have an URI list
+   * to keep the original size of the image
+   */
+  if (!g_str_equal (name, "text/uri-list"))
+    gst_buffer_set_size (image, image_data_len);
+
+  if (image_type != GST_TAG_IMAGE_TYPE_NONE) {
+    GST_LOG ("Setting image type: %d", image_type);
+    caps = gst_caps_make_writable (caps);
+    gst_caps_set_simple (caps, "image-type", GST_TYPE_TAG_IMAGE_TYPE,
+        image_type, NULL);
+  }
+
+  g_warning ("extra image data can't be set");
+  gst_caps_unref (caps);
+
+  return image;
+
+/* ERRORS */
+no_type:
+  {
+    GST_DEBUG ("Could not determine GStreamer media type, ignoring image");
+    /* fall through */
+  }
+error:
+  {
+    if (image)
+      gst_buffer_unref (image);
+    if (caps)
+      gst_caps_unref (caps);
+    return NULL;
+  }
+alloc_failed:
+  {
+    GST_WARNING ("failed to allocate buffer of %d for image", image_data_len);
+    gst_buffer_unref (image);
+    return NULL;
+  }
+
+}
diff --git a/gst-libs/gst/tag/xmpwriter.c b/gst-libs/gst/tag/xmpwriter.c
new file mode 100644
index 0000000..842f897
--- /dev/null
+++ b/gst-libs/gst/tag/xmpwriter.c
@@ -0,0 +1,322 @@
+/* GStreamer TagXmpWriter
+ * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gsttagxmpwriter
+ * @short_description: Interface for elements that provide XMP serialization
+ *
+ * <refsect2>
+ * <para>
+ * This interface is implemented by elements that are able to do XMP serialization. Examples for
+ * such elements are #jifmux and #qtmux.
+ * </para>
+ * <para>
+ * Applications can use this interface to configure which XMP schemas should be used when serializing
+ * tags into XMP. Schemas are represented by their names, a full list of the supported schemas can be
+ * obtained from gst_tag_xmp_list_schemas(). By default, all schemas are used.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xmpwriter.h"
+#include <string.h>
+#include <gst/tag/tag.h>
+
+static GQuark tag_xmp_writer_key;
+
+typedef struct
+{
+  GSList *schemas;
+  GStaticMutex lock;
+} GstTagXmpWriterData;
+
+GType
+gst_tag_xmp_writer_get_type (void)
+{
+  static volatile gsize xmp_config_type = 0;
+
+  if (g_once_init_enter (&xmp_config_type)) {
+    GType _type;
+    static const GTypeInfo xmp_config_info = {
+      sizeof (GstTagXmpWriterInterface),        /* class_size */
+      NULL,                     /* base_init */
+      NULL,                     /* base_finalize */
+      NULL,
+      NULL,                     /* class_finalize */
+      NULL,                     /* class_data */
+      0,
+      0,
+      NULL
+    };
+
+    _type = g_type_register_static (G_TYPE_INTERFACE, "GstTagXmpWriter",
+        &xmp_config_info, 0);
+    tag_xmp_writer_key = g_quark_from_static_string ("GST_TAG_XMP_WRITER");
+    g_type_interface_add_prerequisite (_type, GST_TYPE_ELEMENT);
+
+    g_once_init_leave (&xmp_config_type, _type);
+  }
+
+  return xmp_config_type;
+}
+
+static void
+gst_tag_xmp_writer_data_add_schema_unlocked (GstTagXmpWriterData * data,
+    const gchar * schema)
+{
+  if (!g_slist_find_custom (data->schemas, schema, (GCompareFunc) strcmp)) {
+    data->schemas = g_slist_prepend (data->schemas, g_strdup (schema));
+  }
+}
+
+static void
+gst_tag_xmp_writer_data_add_all_schemas_unlocked (GstTagXmpWriterData * data)
+{
+  const gchar **schemas;
+  gint i = 0;
+
+  /* initialize it with all schemas */
+  schemas = gst_tag_xmp_list_schemas ();
+  while (schemas[i] != NULL) {
+    gst_tag_xmp_writer_data_add_schema_unlocked (data, schemas[i]);
+    i++;
+  }
+}
+
+
+static void
+gst_tag_xmp_writer_data_free (gpointer p)
+{
+  GstTagXmpWriterData *data = (GstTagXmpWriterData *) p;
+  GSList *iter;
+
+  if (data->schemas) {
+    for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
+      g_free (iter->data);
+    }
+    g_slist_free (data->schemas);
+  }
+
+  g_static_mutex_free (&data->lock);
+
+  g_slice_free (GstTagXmpWriterData, data);
+}
+
+static GstTagXmpWriterData *
+gst_tag_xmp_writer_get_data (GstTagXmpWriter * xmpconfig)
+{
+  GstTagXmpWriterData *data;
+
+  data = g_object_get_qdata (G_OBJECT (xmpconfig), tag_xmp_writer_key);
+  if (!data) {
+    static GStaticMutex create_mutex = G_STATIC_MUTEX_INIT;
+
+    /* make sure no other thread is creating a GstTagXmpWriterData at the same time */
+    g_static_mutex_lock (&create_mutex);
+    data = g_object_get_qdata (G_OBJECT (xmpconfig), tag_xmp_writer_key);
+    if (!data) {
+      data = g_slice_new (GstTagXmpWriterData);
+      g_static_mutex_init (&data->lock);
+
+      data->schemas = NULL;
+      gst_tag_xmp_writer_data_add_all_schemas_unlocked (data);
+
+      g_object_set_qdata_full (G_OBJECT (xmpconfig), tag_xmp_writer_key, data,
+          gst_tag_xmp_writer_data_free);
+    }
+    g_static_mutex_unlock (&create_mutex);
+  }
+
+  return data;
+}
+
+/**
+ * gst_tag_xmp_writer_add_all_schemas:
+ * @config: a #GstTagXmpWriter
+ *
+ * Adds all available XMP schemas to the configuration. Meaning that
+ * all will be used.
+ *
+ * Since: 0.10.33
+ */
+void
+gst_tag_xmp_writer_add_all_schemas (GstTagXmpWriter * config)
+{
+  GstTagXmpWriterData *data;
+
+  g_return_if_fail (GST_IS_TAG_XMP_WRITER (config));
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  gst_tag_xmp_writer_data_add_all_schemas_unlocked (data);
+  g_static_mutex_unlock (&data->lock);
+}
+
+/**
+ * gst_tag_xmp_writer_add_schema:
+ * @config: a #GstTagXmpWriter
+ * @schema: the schema to be added
+ *
+ * Adds @schema to the list schemas
+ *
+ * Since: 0.10.33
+ */
+void
+gst_tag_xmp_writer_add_schema (GstTagXmpWriter * config, const gchar * schema)
+{
+  GstTagXmpWriterData *data;
+
+  g_return_if_fail (GST_IS_TAG_XMP_WRITER (config));
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  gst_tag_xmp_writer_data_add_schema_unlocked (data, schema);
+  g_static_mutex_unlock (&data->lock);
+}
+
+/**
+ * gst_tag_xmp_writer_has_schema:
+ * @config: a #GstTagXmpWriter
+ * @schema: the schema to test
+ *
+ * Checks if @schema is going to be used
+ *
+ * Returns: %TRUE if it is going to be used
+ * Since: 0.10.33
+ */
+gboolean
+gst_tag_xmp_writer_has_schema (GstTagXmpWriter * config, const gchar * schema)
+{
+  GstTagXmpWriterData *data;
+  gboolean ret = FALSE;
+  GSList *iter;
+
+  g_return_val_if_fail (GST_IS_TAG_XMP_WRITER (config), FALSE);
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
+    if (strcmp ((const gchar *) iter->data, schema) == 0) {
+      ret = TRUE;
+      break;
+    }
+  }
+  g_static_mutex_unlock (&data->lock);
+
+  return ret;
+}
+
+/**
+ * gst_tag_xmp_writer_remove_schema:
+ * @config: a #GstTagXmpWriter
+ * @schema: the schema to remove
+ *
+ * Removes a schema from the list of schemas to use. Nothing is done if
+ * the schema wasn't in the list
+ *
+ * Since: 0.10.33
+ */
+void
+gst_tag_xmp_writer_remove_schema (GstTagXmpWriter * config,
+    const gchar * schema)
+{
+  GstTagXmpWriterData *data;
+  GSList *iter = NULL;
+
+  g_return_if_fail (GST_IS_TAG_XMP_WRITER (config));
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
+    if (strcmp ((const gchar *) iter->data, schema) == 0) {
+      g_free (iter->data);
+      data->schemas = g_slist_delete_link (data->schemas, iter);
+      break;
+    }
+  }
+  g_static_mutex_unlock (&data->lock);
+}
+
+/**
+ * gst_tag_xmp_writer_remove_all_schemas:
+ * @config: a #GstTagXmpWriter
+ *
+ * Removes all schemas from the list of schemas to use. Meaning that no
+ * XMP will be generated.
+ *
+ * Since: 0.10.33
+ */
+void
+gst_tag_xmp_writer_remove_all_schemas (GstTagXmpWriter * config)
+{
+  GstTagXmpWriterData *data;
+  GSList *iter;
+
+  g_return_if_fail (GST_IS_TAG_XMP_WRITER (config));
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  if (data->schemas) {
+    for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
+      g_free (iter->data);
+    }
+    g_slist_free (data->schemas);
+  }
+  data->schemas = NULL;
+  g_static_mutex_unlock (&data->lock);
+}
+
+GstBuffer *
+gst_tag_xmp_writer_tag_list_to_xmp_buffer (GstTagXmpWriter * config,
+    const GstTagList * taglist, gboolean read_only)
+{
+  GstTagXmpWriterData *data;
+  GstBuffer *buf = NULL;
+  gint i = 0;
+  GSList *iter;
+
+  g_return_val_if_fail (GST_IS_TAG_XMP_WRITER (config), NULL);
+
+  data = gst_tag_xmp_writer_get_data (config);
+
+  g_static_mutex_lock (&data->lock);
+  if (data->schemas) {
+    gchar **array = g_new0 (gchar *, g_slist_length (data->schemas) + 1);
+    if (array) {
+      for (iter = data->schemas; iter; iter = g_slist_next (iter)) {
+        array[i++] = (gchar *) iter->data;
+      }
+      buf = gst_tag_list_to_xmp_buffer_full (taglist, read_only,
+          (const gchar **) array);
+      g_free (array);
+    }
+  }
+  g_static_mutex_unlock (&data->lock);
+
+  return buf;
+}
diff --git a/gst-libs/gst/tag/xmpwriter.h b/gst-libs/gst/tag/xmpwriter.h
new file mode 100644
index 0000000..a7f6e4a
--- /dev/null
+++ b/gst-libs/gst/tag/xmpwriter.h
@@ -0,0 +1,68 @@
+/* GStreamer XmpConfig
+ * Copyright (C) 2011 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __TAG_XMP_WRITER_H__
+#define __TAG_XMP_WRITER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TAG_XMP_WRITER \
+  (gst_tag_xmp_writer_get_type ())
+#define GST_TAG_XMP_WRITER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriter))
+#define GST_TAG_XMP_WRITER_INTERFACE(iface) \
+  (G_TYPE_CHECK_INTERFACE_CAST ((iface), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface))
+#define GST_IS_TAG_XMP_WRITER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TAG_XMP_WRITER))
+#define GST_IS_TAG_XMP_WRITER_INTERFACE(iface) \
+  (G_TYPE_CHECK_INTERFACE_TYPE ((iface), GST_TYPE_TAG_XMP_WRITER))
+#define GST_TAG_XMP_WRITER_GET_INTERFACE(inst) \
+  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_TAG_XMP_WRITER, GstTagXmpWriterInterface))
+
+typedef struct _GstTagXmpWriter GstTagXmpWriter;
+typedef struct _GstTagXmpWriterInterface GstTagXmpWriterInterface;
+
+struct _GstTagXmpWriterInterface {
+  GTypeInterface parent;
+};
+
+GType           gst_tag_xmp_writer_get_type		(void);
+
+void		gst_tag_xmp_writer_add_all_schemas	(GstTagXmpWriter * config);
+
+void		gst_tag_xmp_writer_add_schema	(GstTagXmpWriter * config,
+						const gchar * schema);
+
+gboolean	gst_tag_xmp_writer_has_schema	(GstTagXmpWriter * config,
+						const gchar * schema);
+
+void		gst_tag_xmp_writer_remove_schema	(GstTagXmpWriter * config,
+						const gchar * schema);
+
+void		gst_tag_xmp_writer_remove_all_schemas (GstTagXmpWriter * config);
+
+GstBuffer*	gst_tag_xmp_writer_tag_list_to_xmp_buffer 	(GstTagXmpWriter * config,
+							 const GstTagList * taglist,
+							 gboolean read_only);
+
+G_END_DECLS
+
+#endif /* __TAG_XMP_WRITER_H__ */
diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
new file mode 100644
index 0000000..15b0c60
--- /dev/null
+++ b/gst-libs/gst/video/Makefile.am
@@ -0,0 +1,99 @@
+# variables used for enum/marshal generation
+glib_enum_headers = video.h
+glib_enum_define = GST_VIDEO
+glib_gen_prefix = gst_video
+glib_gen_basename = video
+
+built_sources = video-enumtypes.c
+built_headers = video-enumtypes.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+
+lib_LTLIBRARIES = libgstvideo-@GST_MAJORMINOR@.la
+
+CLEANFILES = $(BUILT_SOURCES)
+
+libgstvideo_@GST_MAJORMINOR@_la_SOURCES = \
+	video.c gstvideosink.c gstvideofilter.c convertframe.c gstmetavideo.c gstvideopool.c
+nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES = $(BUILT_SOURCES)
+
+libgstvideo_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/video
+libgstvideo_@GST_MAJORMINOR@include_HEADERS = \
+	video.h gstvideosink.h gstvideofilter.h gstmetavideo.h gstvideopool.h
+nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS = $(built_headers)
+
+libgstvideo_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstvideo_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+if HAVE_INTROSPECTION
+BUILT_GIRSOURCES = GstVideo-@GST_MAJORMINOR@.gir
+
+gir_headers=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+gir_sources=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
+gir_cincludes=$(patsubst %,--c-include='gst/video/%',$(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+gir_cincludes+=$(patsubst %,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+
+GstVideo-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_MAJORMINOR@.la
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+		$(INTROSPECTION_SCANNER) -v --namespace GstVideo \
+		--nsversion=@GST_MAJORMINOR@ \
+		--strip-prefix=Gst \
+		$(gir_cincludes) \
+		-DGST_USE_UNSTABLE_API \
+		-I$(top_srcdir)/gst-libs \
+		-I$(top_builddir)/gst-libs \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		--library=libgstvideo-@GST_MAJORMINOR@.la \
+		--include=Gst-@GST_MAJORMINOR@ \
+		--include=GstBase-@GST_MAJORMINOR@ \
+		--libtool="$(top_builddir)/libtool" \
+		--pkg gstreamer-@GST_MAJORMINOR@ \
+		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+		--pkg-export gstreamer-video-@GST_MAJORMINOR@ \
+		--add-init-section="gst_init(NULL,NULL);" \
+		--output $@ \
+		$(gir_headers) \
+		$(gir_sources)
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(libdir)/girepository-1.0/
+
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+		$(INTROSPECTION_COMPILER) \
+		--includedir=$(srcdir) \
+		--includedir=$(builddir) \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+endif
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstvideo_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
new file mode 100644
index 0000000..065ba6d
--- /dev/null
+++ b/gst-libs/gst/video/Makefile.in
@@ -0,0 +1,1058 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+subdir = gst-libs/gst/video
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
+	"$(DESTDIR)$(typelibsdir)" \
+	"$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" \
+	"$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvideo_@GST_MAJORMINOR@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstvideo_@GST_MAJORMINOR@_la_OBJECTS =  \
+	libgstvideo_@GST_MAJORMINOR@_la-video.lo \
+	libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo \
+	libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo \
+	libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo \
+	libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo \
+	libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo
+am__objects_1 = libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo
+am__objects_2 =
+am__objects_3 = $(am__objects_1) $(am__objects_2)
+nodist_libgstvideo_@GST_MAJORMINOR@_la_OBJECTS = $(am__objects_3)
+libgstvideo_@GST_MAJORMINOR@_la_OBJECTS =  \
+	$(am_libgstvideo_@GST_MAJORMINOR@_la_OBJECTS) \
+	$(nodist_libgstvideo_@GST_MAJORMINOR@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvideo_@GST_MAJORMINOR@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) \
+	$(libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES) \
+	$(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES)
+DIST_SOURCES = $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES)
+DATA = $(gir_DATA) $(typelibs_DATA)
+HEADERS = $(libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# variables used for enum/marshal generation
+glib_enum_headers = video.h
+glib_enum_define = GST_VIDEO
+glib_gen_prefix = gst_video
+glib_gen_basename = video
+built_sources = video-enumtypes.c
+built_headers = video-enumtypes.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+lib_LTLIBRARIES = libgstvideo-@GST_MAJORMINOR@.la
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+libgstvideo_@GST_MAJORMINOR@_la_SOURCES = \
+	video.c gstvideosink.c gstvideofilter.c convertframe.c gstmetavideo.c gstvideopool.c
+
+nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES = $(BUILT_SOURCES)
+libgstvideo_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/video
+libgstvideo_@GST_MAJORMINOR@include_HEADERS = \
+	video.h gstvideosink.h gstvideofilter.h gstmetavideo.h gstvideopool.h
+
+nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS = $(built_headers)
+libgstvideo_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstvideo_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstVideo-@GST_MAJORMINOR@.gir
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstvideo_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstvideo_@GST_MAJORMINOR@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_cincludes = $(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/video/%',$(libgstvideo_@GST_MAJORMINOR@include_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst \
+@HAVE_INTROSPECTION_TRUE@	%,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
+
+# INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
+# install anything - we need to install inside our prefix.
+@HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvideo-@GST_MAJORMINOR@.la: $(libgstvideo_@GST_MAJORMINOR@_la_OBJECTS) $(libgstvideo_@GST_MAJORMINOR@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideo_@GST_MAJORMINOR@_la_LINK) -rpath $(libdir) $(libgstvideo_@GST_MAJORMINOR@_la_OBJECTS) $(libgstvideo_@GST_MAJORMINOR@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-convertframe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvideo_@GST_MAJORMINOR@_la-video.lo: video.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-video.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='video.c' object='libgstvideo_@GST_MAJORMINOR@_la-video.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-video.lo `test -f 'video.c' || echo '$(srcdir)/'`video.c
+
+libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo: gstvideosink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo `test -f 'gstvideosink.c' || echo '$(srcdir)/'`gstvideosink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideosink.c' object='libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideosink.lo `test -f 'gstvideosink.c' || echo '$(srcdir)/'`gstvideosink.c
+
+libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo: gstvideofilter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo `test -f 'gstvideofilter.c' || echo '$(srcdir)/'`gstvideofilter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideofilter.c' object='libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideofilter.lo `test -f 'gstvideofilter.c' || echo '$(srcdir)/'`gstvideofilter.c
+
+libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo: convertframe.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-convertframe.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo `test -f 'convertframe.c' || echo '$(srcdir)/'`convertframe.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-convertframe.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-convertframe.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='convertframe.c' object='libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-convertframe.lo `test -f 'convertframe.c' || echo '$(srcdir)/'`convertframe.c
+
+libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo: gstmetavideo.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo `test -f 'gstmetavideo.c' || echo '$(srcdir)/'`gstmetavideo.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstmetavideo.c' object='libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-gstmetavideo.lo `test -f 'gstmetavideo.c' || echo '$(srcdir)/'`gstmetavideo.c
+
+libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo: gstvideopool.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo `test -f 'gstvideopool.c' || echo '$(srcdir)/'`gstvideopool.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideopool.c' object='libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-gstvideopool.lo `test -f 'gstvideopool.c' || echo '$(srcdir)/'`gstvideopool.c
+
+libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo: video-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.Tpo -c -o libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo `test -f 'video-enumtypes.c' || echo '$(srcdir)/'`video-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.Tpo $(DEPDIR)/libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='video-enumtypes.c' object='libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_MAJORMINOR@_la-video-enumtypes.lo `test -f 'video-enumtypes.c' || echo '$(srcdir)/'`video-enumtypes.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-girDATA: $(gir_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(girdir)" || $(MKDIR_P) "$(DESTDIR)$(girdir)"
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+	done
+
+uninstall-girDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(girdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(girdir)" && rm -f $$files
+install-typelibsDATA: $(typelibs_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(typelibsdir)" || $(MKDIR_P) "$(DESTDIR)$(typelibsdir)"
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibsdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibsdir)" || exit $$?; \
+	done
+
+uninstall-typelibsDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(typelibs_DATA)'; test -n "$(typelibsdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(typelibsdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(typelibsdir)" && rm -f $$files
+install-libgstvideo_@GST_MAJORMINOR@includeHEADERS: $(libgstvideo_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstvideo_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)"
+	@list='$(libgstvideo_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstvideo_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-libgstvideo_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libgstvideo_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstvideo_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" && rm -f $$files
+install-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS: $(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libgstvideo_@GST_MAJORMINOR@includedir)" || $(MKDIR_P) "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)"
+	@list='$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstvideo_@GST_MAJORMINOR@includedir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS)'; test -n "$(libgstvideo_@GST_MAJORMINOR@includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)" "$(DESTDIR)$(libgstvideo_@GST_MAJORMINOR@includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-girDATA \
+	install-libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	install-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	install-typelibsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
+	uninstall-libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-girDATA \
+	install-html install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
+	install-libgstvideo_@GST_MAJORMINOR@includeHEADERS install-man \
+	install-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip install-typelibsDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-girDATA \
+	uninstall-libLTLIBRARIES \
+	uninstall-libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-nodist_libgstvideo_@GST_MAJORMINOR@includeHEADERS \
+	uninstall-typelibsDATA
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+@HAVE_INTROSPECTION_TRUE@GstVideo-@GST_MAJORMINOR@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_MAJORMINOR@.la
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstVideo \
+@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		$(gir_cincludes) \
+@HAVE_INTROSPECTION_TRUE@		-DGST_USE_UNSTABLE_API \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--library=libgstvideo-@GST_MAJORMINOR@.la \
+@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-video-@GST_MAJORMINOR@ \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--output $@ \
+@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
+@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(INTROSPECTION_COMPILER)
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(srcdir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_MAJORMINOR@` \
+@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_MAJORMINOR@ \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES) \
+	           $(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(libgstvideo_@GST_MAJORMINOR@_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS) \
+	           $(libgstvideo_@GST_MAJORMINOR@_la_LIBADD) \
+	           -ldl \
+	 -:HEADER_TARGET gstreamer-@GST_MAJORMINOR@/gst/tag \
+	 -:HEADERS $(libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	           $(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst-libs/gst/video/convertframe.c b/gst-libs/gst/video/convertframe.c
new file mode 100644
index 0000000..6639248
--- /dev/null
+++ b/gst-libs/gst/video/convertframe.c
@@ -0,0 +1,698 @@
+/* Small helper element for format conversion
+ * Copyright (C) 2005 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2010 Brandon Lewis <brandon.lewis@collabora.co.uk>
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include "video.h"
+
+static gboolean
+caps_are_raw (const GstCaps * caps)
+{
+  guint i, len;
+
+  len = gst_caps_get_size (caps);
+
+  for (i = 0; i < len; i++) {
+    GstStructure *st = gst_caps_get_structure (caps, i);
+    if (gst_structure_has_name (st, "video/x-raw"))
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
+static gboolean
+create_element (const gchar * factory_name, GstElement ** element,
+    GError ** err)
+{
+  *element = gst_element_factory_make (factory_name, NULL);
+  if (*element)
+    return TRUE;
+
+  if (err && *err == NULL) {
+    *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
+        "cannot create element '%s' - please check your GStreamer installation",
+        factory_name);
+  }
+
+  return FALSE;
+}
+
+static GstElement *
+get_encoder (const GstCaps * caps, GError ** err)
+{
+  GList *encoders = NULL;
+  GList *filtered = NULL;
+  GstElementFactory *factory = NULL;
+  GstElement *encoder = NULL;
+
+  encoders =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_ENCODER |
+      GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE, GST_RANK_NONE);
+
+  if (encoders == NULL) {
+    *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
+        "Cannot find any image encoder");
+    goto fail;
+  }
+
+  GST_INFO ("got factory list %p", encoders);
+  gst_plugin_feature_list_debug (encoders);
+
+  filtered =
+      gst_element_factory_list_filter (encoders, caps, GST_PAD_SRC, FALSE);
+  GST_INFO ("got filtered list %p", filtered);
+
+  if (filtered == NULL) {
+    gchar *tmp = gst_caps_to_string (caps);
+    *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
+        "Cannot find any image encoder for caps %s", tmp);
+    g_free (tmp);
+    goto fail;
+  }
+
+  gst_plugin_feature_list_debug (filtered);
+
+  factory = (GstElementFactory *) filtered->data;
+
+  GST_INFO ("got factory %p", factory);
+  encoder = gst_element_factory_create (factory, NULL);
+
+  GST_INFO ("created encoder element %p, %s", encoder,
+      gst_element_get_name (encoder));
+
+fail:
+  if (encoders)
+    gst_plugin_feature_list_free (encoders);
+  if (filtered)
+    gst_plugin_feature_list_free (filtered);
+
+  return encoder;
+}
+
+static GstElement *
+build_convert_frame_pipeline (GstElement ** src_element,
+    GstElement ** sink_element, const GstCaps * from_caps,
+    const GstCaps * to_caps, GError ** err)
+{
+  GstElement *src = NULL, *csp = NULL, *vscale = NULL;
+  GstElement *sink = NULL, *encoder = NULL, *pipeline;
+  GError *error = NULL;
+
+  /* videoscale is here to correct for the pixel-aspect-ratio for us */
+  GST_DEBUG ("creating elements");
+  if (!create_element ("appsrc", &src, &error) ||
+      !create_element ("videoconvert", &csp, &error) ||
+      !create_element ("videoscale", &vscale, &error) ||
+      !create_element ("appsink", &sink, &error))
+    goto no_elements;
+
+  pipeline = gst_pipeline_new ("videoconvert-pipeline");
+  if (pipeline == NULL)
+    goto no_pipeline;
+
+  /* Add black borders if necessary to keep the DAR */
+  g_object_set (vscale, "add-borders", TRUE, NULL);
+
+  GST_DEBUG ("adding elements");
+  gst_bin_add_many (GST_BIN (pipeline), src, csp, vscale, sink, NULL);
+
+  /* set caps */
+  g_object_set (src, "caps", from_caps, NULL);
+  g_object_set (sink, "caps", to_caps, NULL);
+
+  /* FIXME: linking is still way too expensive, profile this properly */
+  GST_DEBUG ("linking src->csp");
+  if (!gst_element_link_pads (src, "src", csp, "sink"))
+    goto link_failed;
+
+  GST_DEBUG ("linking csp->vscale");
+  if (!gst_element_link_pads (csp, "src", vscale, "sink"))
+    goto link_failed;
+
+  if (caps_are_raw (to_caps)) {
+    GST_DEBUG ("linking vscale->sink");
+
+    if (!gst_element_link_pads (vscale, "src", sink, "sink"))
+      goto link_failed;
+  } else {
+    encoder = get_encoder (to_caps, &error);
+    if (!encoder)
+      goto no_encoder;
+    gst_bin_add (GST_BIN (pipeline), encoder);
+
+    GST_DEBUG ("linking vscale->encoder");
+    if (!gst_element_link (vscale, encoder))
+      goto link_failed;
+
+    GST_DEBUG ("linking encoder->sink");
+    if (!gst_element_link_pads (encoder, "src", sink, "sink"))
+      goto link_failed;
+  }
+
+  g_object_set (src, "emit-signals", TRUE, NULL);
+  g_object_set (sink, "emit-signals", TRUE, NULL);
+
+  *src_element = src;
+  *sink_element = sink;
+
+  return pipeline;
+  /* ERRORS */
+no_encoder:
+  {
+    gst_object_unref (pipeline);
+
+    GST_ERROR ("could not find an encoder for provided caps");
+    if (err)
+      *err = error;
+    else
+      g_error_free (error);
+
+    return NULL;
+  }
+no_elements:
+  {
+    if (src)
+      gst_object_unref (src);
+    if (csp)
+      gst_object_unref (csp);
+    if (vscale)
+      gst_object_unref (vscale);
+    if (sink)
+      gst_object_unref (sink);
+    GST_ERROR ("Could not convert video frame: %s", error->message);
+    if (err)
+      *err = error;
+    else
+      g_error_free (error);
+    return NULL;
+  }
+no_pipeline:
+  {
+    gst_object_unref (src);
+    gst_object_unref (csp);
+    gst_object_unref (vscale);
+    gst_object_unref (sink);
+
+    GST_ERROR ("Could not convert video frame: no pipeline (unknown error)");
+    if (err)
+      *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+          "Could not convert video frame: no pipeline (unknown error)");
+    return NULL;
+  }
+link_failed:
+  {
+    gst_object_unref (pipeline);
+
+    GST_ERROR ("Could not convert video frame: failed to link elements");
+    if (err)
+      *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,
+          "Could not convert video frame: failed to link elements");
+    return NULL;
+  }
+}
+
+/**
+ * gst_video_convert_frame:
+ * @buf: a #GstBuffer
+ * @from_caps: the #GstCaps to convert from
+ * @to_caps: the #GstCaps to convert to
+ * @timeout: the maximum amount of time allowed for the processing.
+ * @error: pointer to a #GError. Can be %NULL.
+ *
+ * Converts a raw video buffer into the specified output caps.
+ *
+ * The output caps can be any raw video formats or any image formats (jpeg, png, ...).
+ *
+ * The width, height and pixel-aspect-ratio can also be specified in the output caps.
+ *
+ * Returns: The converted #GstBuffer, or %NULL if an error happened (in which case @err
+ * will point to the #GError).
+ *
+ * Since: 0.10.31
+ *
+ */
+GstBuffer *
+gst_video_convert_frame (GstBuffer * buf, GstCaps * from_caps,
+    const GstCaps * to_caps, GstClockTime timeout, GError ** error)
+{
+  GstMessage *msg;
+  GstBuffer *result = NULL;
+  GError *err = NULL;
+  GstBus *bus;
+  GstCaps *to_caps_copy = NULL;
+  GstFlowReturn ret;
+  GstElement *pipeline, *src, *sink;
+  guint i, n;
+
+  g_return_val_if_fail (buf != NULL, NULL);
+  g_return_val_if_fail (to_caps != NULL, NULL);
+  g_return_val_if_fail (from_caps != NULL, NULL);
+
+  to_caps_copy = gst_caps_new_empty ();
+  n = gst_caps_get_size (to_caps);
+  for (i = 0; i < n; i++) {
+    GstStructure *s = gst_caps_get_structure (to_caps, i);
+
+    s = gst_structure_copy (s);
+    gst_structure_remove_field (s, "framerate");
+    gst_caps_append_structure (to_caps_copy, s);
+  }
+
+  pipeline =
+      build_convert_frame_pipeline (&src, &sink, from_caps, to_caps_copy, &err);
+  if (!pipeline)
+    goto no_pipeline;
+
+  /* now set the pipeline to the paused state, after we push the buffer into
+   * appsrc, this should preroll the converted buffer in appsink */
+  GST_DEBUG ("running conversion pipeline to caps %" GST_PTR_FORMAT,
+      to_caps_copy);
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+
+  /* feed buffer in appsrc */
+  GST_DEBUG ("feeding buffer %p, size %" G_GSIZE_FORMAT ", caps %"
+      GST_PTR_FORMAT, buf, gst_buffer_get_size (buf), from_caps);
+  g_signal_emit_by_name (src, "push-buffer", buf, &ret);
+
+  /* now see what happens. We either got an error somewhere or the pipeline
+   * prerolled */
+  bus = gst_element_get_bus (pipeline);
+  msg = gst_bus_timed_pop_filtered (bus,
+      timeout, GST_MESSAGE_ERROR | GST_MESSAGE_ASYNC_DONE);
+
+  if (msg) {
+    switch (GST_MESSAGE_TYPE (msg)) {
+      case GST_MESSAGE_ASYNC_DONE:
+      {
+        /* we're prerolled, get the frame from appsink */
+        g_signal_emit_by_name (sink, "pull-preroll", &result);
+
+        if (result) {
+          GST_DEBUG ("conversion successful: result = %p", result);
+        } else {
+          GST_ERROR ("prerolled but no result frame?!");
+        }
+        break;
+      }
+      case GST_MESSAGE_ERROR:{
+        gchar *dbg = NULL;
+
+        gst_message_parse_error (msg, &err, &dbg);
+        if (err) {
+          GST_ERROR ("Could not convert video frame: %s", err->message);
+          GST_DEBUG ("%s [debug: %s]", err->message, GST_STR_NULL (dbg));
+          if (error)
+            *error = err;
+          else
+            g_error_free (err);
+        }
+        g_free (dbg);
+        break;
+      }
+      default:{
+        g_return_val_if_reached (NULL);
+      }
+    }
+    gst_message_unref (msg);
+  } else {
+    GST_ERROR ("Could not convert video frame: timeout during conversion");
+    if (error)
+      *error = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+          "Could not convert video frame: timeout during conversion");
+  }
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+  gst_caps_unref (to_caps_copy);
+
+  return result;
+
+  /* ERRORS */
+no_pipeline:
+  {
+    gst_caps_unref (to_caps_copy);
+
+    if (error)
+      *error = err;
+    else
+      g_error_free (err);
+
+    return NULL;
+  }
+}
+
+typedef struct
+{
+  GMutex *mutex;
+  GstElement *pipeline;
+  GstVideoConvertFrameCallback callback;
+  gpointer user_data;
+  GDestroyNotify destroy_notify;
+  GMainContext *context;
+  GstBuffer *buffer;
+  gulong timeout_id;
+  gboolean finished;
+} GstVideoConvertFrameContext;
+
+typedef struct
+{
+  GstVideoConvertFrameCallback callback;
+  GstBuffer *buffer;
+  GError *error;
+  gpointer user_data;
+  GDestroyNotify destroy_notify;
+
+  GstVideoConvertFrameContext *context;
+} GstVideoConvertFrameCallbackContext;
+
+static void
+gst_video_convert_frame_context_free (GstVideoConvertFrameContext * ctx)
+{
+  /* Wait until all users of the mutex are done */
+  g_mutex_lock (ctx->mutex);
+  g_mutex_unlock (ctx->mutex);
+  g_mutex_free (ctx->mutex);
+  if (ctx->timeout_id)
+    g_source_remove (ctx->timeout_id);
+  if (ctx->buffer)
+    gst_buffer_unref (ctx->buffer);
+  g_main_context_unref (ctx->context);
+
+  gst_element_set_state (ctx->pipeline, GST_STATE_NULL);
+  gst_object_unref (ctx->pipeline);
+
+  g_slice_free (GstVideoConvertFrameContext, ctx);
+}
+
+static void
+    gst_video_convert_frame_callback_context_free
+    (GstVideoConvertFrameCallbackContext * ctx)
+{
+  if (ctx->context)
+    gst_video_convert_frame_context_free (ctx->context);
+  g_slice_free (GstVideoConvertFrameCallbackContext, ctx);
+}
+
+static gboolean
+convert_frame_dispatch_callback (GstVideoConvertFrameCallbackContext * ctx)
+{
+  ctx->callback (ctx->buffer, ctx->error, ctx->user_data);
+
+  if (ctx->destroy_notify)
+    ctx->destroy_notify (ctx->user_data);
+
+  return FALSE;
+}
+
+static void
+convert_frame_finish (GstVideoConvertFrameContext * context, GstBuffer * buffer,
+    GError * error)
+{
+  GSource *source;
+  GstVideoConvertFrameCallbackContext *ctx;
+
+  if (context->timeout_id)
+    g_source_remove (context->timeout_id);
+  context->timeout_id = 0;
+
+  ctx = g_slice_new (GstVideoConvertFrameCallbackContext);
+  ctx->callback = context->callback;
+  ctx->user_data = context->user_data;
+  ctx->destroy_notify = context->destroy_notify;
+  ctx->buffer = buffer;
+  ctx->error = error;
+  ctx->context = context;
+
+  source = g_timeout_source_new (0);
+  g_source_set_callback (source,
+      (GSourceFunc) convert_frame_dispatch_callback, ctx,
+      (GDestroyNotify) gst_video_convert_frame_callback_context_free);
+  g_source_attach (source, context->context);
+  g_source_unref (source);
+
+  context->finished = TRUE;
+}
+
+static gboolean
+convert_frame_timeout_callback (GstVideoConvertFrameContext * context)
+{
+  GError *error;
+
+  g_mutex_lock (context->mutex);
+
+  if (context->finished)
+    goto done;
+
+  GST_ERROR ("Could not convert video frame: timeout");
+
+  error = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+      "Could not convert video frame: timeout");
+
+  convert_frame_finish (context, NULL, error);
+
+done:
+  g_mutex_unlock (context->mutex);
+  return FALSE;
+}
+
+static gboolean
+convert_frame_bus_callback (GstBus * bus, GstMessage * message,
+    GstVideoConvertFrameContext * context)
+{
+  g_mutex_lock (context->mutex);
+
+  if (context->finished)
+    goto done;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:{
+      GError *error;
+      gchar *dbg = NULL;
+
+      gst_message_parse_error (message, &error, &dbg);
+
+      GST_ERROR ("Could not convert video frame: %s", error->message);
+      GST_DEBUG ("%s [debug: %s]", error->message, GST_STR_NULL (dbg));
+
+      convert_frame_finish (context, NULL, error);
+
+      g_free (dbg);
+      break;
+    }
+    default:
+      break;
+  }
+
+done:
+  g_mutex_unlock (context->mutex);
+
+  return FALSE;
+}
+
+static void
+convert_frame_need_data_callback (GstElement * src, guint size,
+    GstVideoConvertFrameContext * context)
+{
+  GstFlowReturn ret = GST_FLOW_ERROR;
+  GError *error;
+
+  g_mutex_lock (context->mutex);
+
+  if (context->finished)
+    goto done;
+
+  g_signal_emit_by_name (src, "push-buffer", context->buffer, &ret);
+  gst_buffer_unref (context->buffer);
+  context->buffer = NULL;
+
+  if (ret != GST_FLOW_OK) {
+    GST_ERROR ("Could not push video frame: %s", gst_flow_get_name (ret));
+
+    error = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+        "Could not push video frame: %s", gst_flow_get_name (ret));
+
+    convert_frame_finish (context, NULL, error);
+  }
+
+  g_signal_handlers_disconnect_by_func (src, convert_frame_need_data_callback,
+      context);
+
+done:
+  g_mutex_unlock (context->mutex);
+}
+
+static void
+convert_frame_new_buffer_callback (GstElement * sink,
+    GstVideoConvertFrameContext * context)
+{
+  GstBuffer *buf = NULL;
+  GError *error = NULL;
+
+  g_mutex_lock (context->mutex);
+
+  if (context->finished)
+    goto done;
+
+  g_signal_emit_by_name (sink, "pull-preroll", &buf);
+
+  if (!buf) {
+    error = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+        "Could not get converted video frame");
+  }
+
+  convert_frame_finish (context, buf, error);
+
+  g_signal_handlers_disconnect_by_func (sink, convert_frame_need_data_callback,
+      context);
+
+done:
+  g_mutex_unlock (context->mutex);
+}
+
+/**
+ * gst_video_convert_frame_async:
+ * @buf: a #GstBuffer
+ * @from_caps: the #GstCaps to convert from
+ * @to_caps: the #GstCaps to convert to
+ * @timeout: the maximum amount of time allowed for the processing.
+ * @callback: %GstVideoConvertFrameCallback that will be called after conversion.
+ * @user_data: extra data that will be passed to the @callback
+ * @destroy_notify: %GDestroyNotify to be called after @user_data is not needed anymore
+ *
+ * Converts a raw video buffer into the specified output caps.
+ *
+ * The output caps can be any raw video formats or any image formats (jpeg, png, ...).
+ *
+ * The width, height and pixel-aspect-ratio can also be specified in the output caps.
+ *
+ * @callback will be called after conversion, when an error occured or if conversion didn't
+ * finish after @timeout. @callback will always be called from the thread default
+ * %GMainContext, see g_main_context_get_thread_default(). If GLib before 2.22 is used,
+ * this will always be the global default main context.
+ *
+ * @destroy_notify will be called after the callback was called and @user_data is not needed
+ * anymore.
+ *
+ * Since: 0.10.31
+ *
+ */
+void
+gst_video_convert_frame_async (GstBuffer * buf, GstCaps * from_caps,
+    const GstCaps * to_caps, GstClockTime timeout,
+    GstVideoConvertFrameCallback callback, gpointer user_data,
+    GDestroyNotify destroy_notify)
+{
+  GMainContext *context = NULL;
+  GError *error = NULL;
+  GstBus *bus;
+  GstCaps *to_caps_copy = NULL;
+  GstElement *pipeline, *src, *sink;
+  guint i, n;
+  GSource *source;
+  GstVideoConvertFrameContext *ctx;
+
+  g_return_if_fail (buf != NULL);
+  g_return_if_fail (to_caps != NULL);
+  g_return_if_fail (from_caps != NULL);
+  g_return_if_fail (callback != NULL);
+
+  context = g_main_context_get_thread_default ();
+
+  if (!context)
+    context = g_main_context_default ();
+
+  to_caps_copy = gst_caps_new_empty ();
+  n = gst_caps_get_size (to_caps);
+  for (i = 0; i < n; i++) {
+    GstStructure *s = gst_caps_get_structure (to_caps, i);
+
+    s = gst_structure_copy (s);
+    gst_structure_remove_field (s, "framerate");
+    gst_caps_append_structure (to_caps_copy, s);
+  }
+
+  pipeline =
+      build_convert_frame_pipeline (&src, &sink, from_caps, to_caps_copy,
+      &error);
+  if (!pipeline)
+    goto no_pipeline;
+
+  bus = gst_element_get_bus (pipeline);
+
+  ctx = g_slice_new0 (GstVideoConvertFrameContext);
+  ctx->mutex = g_mutex_new ();
+  ctx->buffer = gst_buffer_ref (buf);
+  ctx->callback = callback;
+  ctx->user_data = user_data;
+  ctx->destroy_notify = destroy_notify;
+  ctx->context = g_main_context_ref (context);
+  ctx->finished = FALSE;
+  ctx->pipeline = pipeline;
+
+  if (timeout != GST_CLOCK_TIME_NONE) {
+    source = g_timeout_source_new (timeout / GST_MSECOND);
+    g_source_set_callback (source,
+        (GSourceFunc) convert_frame_timeout_callback, ctx, NULL);
+    ctx->timeout_id = g_source_attach (source, context);
+    g_source_unref (source);
+  }
+
+  g_signal_connect (src, "need-data",
+      G_CALLBACK (convert_frame_need_data_callback), ctx);
+  g_signal_connect (sink, "new-preroll",
+      G_CALLBACK (convert_frame_new_buffer_callback), ctx);
+
+  source = gst_bus_create_watch (bus);
+  g_source_set_callback (source, (GSourceFunc) convert_frame_bus_callback,
+      ctx, NULL);
+  g_source_attach (source, context);
+  g_source_unref (source);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  gst_object_unref (bus);
+  gst_caps_unref (to_caps_copy);
+
+  return;
+  /* ERRORS */
+no_pipeline:
+  {
+    GstVideoConvertFrameCallbackContext *ctx;
+    GSource *source;
+
+    gst_caps_unref (to_caps_copy);
+
+    ctx = g_slice_new0 (GstVideoConvertFrameCallbackContext);
+    ctx->callback = callback;
+    ctx->user_data = user_data;
+    ctx->destroy_notify = destroy_notify;
+    ctx->buffer = NULL;
+    ctx->error = error;
+
+    source = g_timeout_source_new (0);
+    g_source_set_callback (source,
+        (GSourceFunc) convert_frame_dispatch_callback, ctx,
+        (GDestroyNotify) gst_video_convert_frame_callback_context_free);
+    g_source_attach (source, context);
+    g_source_unref (source);
+  }
+}
diff --git a/gst-libs/gst/video/gstmetavideo.c b/gst-libs/gst/video/gstmetavideo.c
new file mode 100644
index 0000000..2946704
--- /dev/null
+++ b/gst-libs/gst/video/gstmetavideo.c
@@ -0,0 +1,254 @@
+/* GStreamer
+ * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstmetavideo.h"
+
+/* video metadata */
+const GstMetaInfo *
+gst_meta_video_get_info (void)
+{
+  static const GstMetaInfo *meta_video_info = NULL;
+
+  if (meta_video_info == NULL) {
+    meta_video_info = gst_meta_register (GST_META_API_VIDEO, "GstMetaVideo",
+        sizeof (GstMetaVideo),
+        (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) NULL,
+        (GstMetaCopyFunction) NULL, (GstMetaTransformFunction) NULL);
+  }
+  return meta_video_info;
+}
+
+/**
+ * gst_buffer_get_meta_video_id:
+ * @buffer: a #GstBuffer
+ * @id: a metadata id
+ *
+ * Find the #GstMetaVideo on @buffer with the given @id.
+ *
+ * Buffers can contain multiple #GstMetaVideo metadata items when dealing with
+ * multiview buffers.
+ *
+ * Returns: the #GstMetaVideo with @id or %NULL when there is no such metadata
+ * on @buffer.
+ */
+GstMetaVideo *
+gst_buffer_get_meta_video_id (GstBuffer * buffer, gint id)
+{
+  gpointer state = NULL;
+  GstMeta *meta;
+  const GstMetaInfo *info = GST_META_INFO_VIDEO;
+
+  while ((meta = gst_buffer_iterate_meta (buffer, &state))) {
+    if (meta->info->api == info->api) {
+      GstMetaVideo *vmeta = (GstMetaVideo *) meta;
+      if (vmeta->id == id)
+        return vmeta;
+    }
+  }
+  return NULL;
+}
+
+/**
+ * gst_buffer_add_meta_video:
+ * @buffer: a #GstBuffer
+ * @flags: #GstVideoFlags
+ * @format: a #GstVideoFormat
+ * @width: the width
+ * @height: the height
+ *
+ * Attaches GstVideoMeta metadata to @buffer with the given parameters and the
+ * default offsets and strides for @format and @width x @height.
+ *
+ * This function calculates the default offsets and strides and then calls
+ * gst_buffer_add_meta_video_full() with them.
+ *
+ * Returns: the #GstMetaVideo on @buffer.
+ */
+GstMetaVideo *
+gst_buffer_add_meta_video (GstBuffer * buffer, GstVideoFlags flags,
+    GstVideoFormat format, guint width, guint height)
+{
+  GstMetaVideo *meta;
+  GstVideoInfo info;
+
+  gst_video_info_set_format (&info, format, width, height);
+
+  meta = gst_buffer_add_meta_video_full (buffer, flags, format, width, height,
+      info.finfo->n_planes, info.offset, info.stride);
+
+  return meta;
+}
+
+/**
+ * gst_buffer_add_meta_video_full:
+ * @buffer: a #GstBuffer
+ * @flags: #GstVideoFlags
+ * @format: a #GstVideoFormat
+ * @width: the width
+ * @height: the height
+ * @n_planes: number of planes
+ * @offset: offset of each plane
+ * @stride: stride of each plane
+ *
+ * Attaches GstVideoMeta metadata to @buffer with the given parameters.
+ *
+ * Returns: the #GstMetaVideo on @buffer.
+ */
+GstMetaVideo *
+gst_buffer_add_meta_video_full (GstBuffer * buffer, GstVideoFlags flags,
+    GstVideoFormat format, guint width, guint height,
+    guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
+    gint stride[GST_VIDEO_MAX_PLANES])
+{
+  GstMetaVideo *meta;
+  guint i;
+
+  meta =
+      (GstMetaVideo *) gst_buffer_add_meta (buffer, GST_META_INFO_VIDEO, NULL);
+
+  meta->flags = flags;
+  meta->format = format;
+  meta->id = 0;
+  meta->width = width;
+  meta->height = height;
+  meta->buffer = buffer;
+
+  meta->n_planes = n_planes;
+  for (i = 0; i < n_planes; i++) {
+    meta->offset[i] = offset[i];
+    meta->stride[i] = stride[i];
+  }
+  return meta;
+}
+
+static GstMemory *
+find_mem_for_offset (GstBuffer * buffer, guint * offset, GstMapFlags flags)
+{
+  guint n, i;
+  GstMemory *res = NULL;
+
+  n = gst_buffer_n_memory (buffer);
+  for (i = 0; i < n; i++) {
+    GstMemory *mem = NULL;
+    gsize size;
+
+    mem = gst_buffer_peek_memory (buffer, i, flags);
+    size = gst_memory_get_sizes (mem, NULL, NULL);
+
+    if (*offset < size) {
+      res = mem;
+      break;
+    }
+    *offset -= size;
+  }
+  return res;
+}
+
+/**
+ * gst_meta_video_map:
+ * @meta: a #GstVideoMeta
+ * @plane: a plane
+ * @stride: result stride
+ * @flags: @GstMapFlags
+ *
+ * Map the video plane with index @plane in @meta and return a pointer to the
+ * first byte of the plane and the stride of the plane.
+ *
+ * Returns: a pointer to the first byte of the plane data
+ */
+gpointer
+gst_meta_video_map (GstMetaVideo * meta, guint plane, gint * stride,
+    GstMapFlags flags)
+{
+  guint offset;
+  gboolean write;
+  GstBuffer *buffer;
+  GstMemory *mem;
+  guint8 *base;
+
+  g_return_val_if_fail (meta != NULL, NULL);
+  g_return_val_if_fail (plane < meta->n_planes, NULL);
+  g_return_val_if_fail (stride != NULL, NULL);
+
+  buffer = meta->buffer;
+  g_return_val_if_fail (buffer != NULL, NULL);
+
+  write = (flags & GST_MAP_WRITE) != 0;
+  g_return_val_if_fail (!write || gst_buffer_is_writable (buffer), NULL);
+
+  offset = meta->offset[plane];
+  *stride = meta->stride[plane];
+  /* find the memory block for this plane, this is the memory block containing
+   * the plane offset */
+  mem = find_mem_for_offset (buffer, &offset, flags);
+
+  base = gst_memory_map (mem, NULL, NULL, flags);
+
+  /* move to the right offset inside the block */
+  return base + offset;
+}
+
+/**
+ * gst_meta_video_unmap:
+ * @meta: a #GstVideoMeta
+ * @plane: a plane
+ * @data: the data to unmap
+ *
+ * Unmap previously mapped data with gst_video_meta_map().
+ *
+ * Returns: TRUE if the memory was successfully unmapped.
+ */
+gboolean
+gst_meta_video_unmap (GstMetaVideo * meta, guint plane, gpointer data)
+{
+  guint offset;
+  GstBuffer *buffer;
+  GstMemory *mem;
+  guint8 *base;
+
+  g_return_val_if_fail (meta != NULL, FALSE);
+  g_return_val_if_fail (plane < meta->n_planes, FALSE);
+
+  buffer = meta->buffer;
+  g_return_val_if_fail (buffer != NULL, FALSE);
+
+  offset = meta->offset[plane];
+  mem = find_mem_for_offset (buffer, &offset, GST_MAP_READ);
+  base = data;
+
+  gst_memory_unmap (mem, base - offset, -1);
+
+  return TRUE;
+}
+
+const GstMetaInfo *
+gst_meta_video_crop_get_info (void)
+{
+  static const GstMetaInfo *meta_video_crop_info = NULL;
+
+  if (meta_video_crop_info == NULL) {
+    meta_video_crop_info =
+        gst_meta_register (GST_META_API_VIDEO_CROP, "GstMetaVideoCrop",
+        sizeof (GstMetaVideoCrop), (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) NULL, (GstMetaCopyFunction) NULL,
+        (GstMetaTransformFunction) NULL);
+  }
+  return meta_video_crop_info;
+}
diff --git a/gst-libs/gst/video/gstmetavideo.h b/gst-libs/gst/video/gstmetavideo.h
new file mode 100644
index 0000000..12c1ed1
--- /dev/null
+++ b/gst-libs/gst/video/gstmetavideo.h
@@ -0,0 +1,116 @@
+/* GStreamer
+ * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_META_VIDEO_H__
+#define __GST_META_VIDEO_H__
+
+#include <gst/gst.h>
+
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_META_API_VIDEO   "GstMetaVideo"
+#define GST_META_INFO_VIDEO  (gst_meta_video_get_info())
+typedef struct _GstMetaVideo GstMetaVideo;
+
+#define GST_META_API_VIDEO_CROP   "GstMetaVideoCrop"
+#define GST_META_INFO_VIDEO_CROP  (gst_meta_video_crop_get_info())
+typedef struct _GstMetaVideoCrop GstMetaVideoCrop;
+
+/**
+ * GstMetaVideo:
+ * @meta: parent #GstMeta
+ * @buffer: the buffer this metadata belongs to
+ * @flags: additional video flags
+ * @format: the video format
+ * @id: identifier of the frame
+ * @width: the video width
+ * @height: the video height
+ * @n_planes: the number of planes in the image
+ * @offset: array of offsets for the planes
+ * @stride: array of strides for the planes
+ * @map: map the memory of a plane
+ * @unmap: unmap the memory of a plane
+ *
+ * Extra buffer metadata describing image properties
+ */
+struct _GstMetaVideo {
+  GstMeta            meta;
+
+  GstBuffer         *buffer;
+
+  GstVideoFlags      flags;
+  GstVideoFormat     format;
+  gint               id;
+  guint              width;
+  guint              height;
+
+  guint              n_planes;
+  gsize              offset[GST_VIDEO_MAX_PLANES];
+  gint               stride[GST_VIDEO_MAX_PLANES];
+
+  gpointer (*map)    (GstMetaVideo *meta, guint plane, gint *stride,
+                      GstMapFlags flags);
+  gboolean (*unmap)  (GstMetaVideo *meta, guint plane, gpointer data);
+};
+
+const GstMetaInfo * gst_meta_video_get_info (void);
+
+#define gst_buffer_get_meta_video(b) ((GstMetaVideo*)gst_buffer_get_meta((b),GST_META_INFO_VIDEO))
+GstMetaVideo * gst_buffer_get_meta_video_id    (GstBuffer *buffer, gint id);
+
+GstMetaVideo * gst_buffer_add_meta_video       (GstBuffer *buffer, GstVideoFlags flags,
+                                                GstVideoFormat format, guint width, guint height);
+GstMetaVideo * gst_buffer_add_meta_video_full  (GstBuffer *buffer, GstVideoFlags flags,
+                                                GstVideoFormat format, guint width, guint height,
+                                                guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
+                                                gint stride[GST_VIDEO_MAX_PLANES]);
+
+gpointer       gst_meta_video_map        (GstMetaVideo *meta, guint plane, gint *stride,
+                                          GstMapFlags flags);
+gboolean       gst_meta_video_unmap      (GstMetaVideo *meta, guint plane, gpointer data);
+
+/**
+ * GstMetaVideoCrop:
+ * @meta: parent #GstMeta
+ * @x: the horizontal offset
+ * @y: the vertical offset
+ * @width: the cropped width
+ * @height: the cropped height
+ *
+ * Extra buffer metadata describing image cropping.
+ */
+struct _GstMetaVideoCrop {
+  GstMeta       meta;
+
+  guint         x;
+  guint         y;
+  guint         width;
+  guint         height;
+};
+
+const GstMetaInfo * gst_meta_video_crop_get_info (void);
+
+#define gst_buffer_get_meta_video_crop(b) ((GstMetaVideoCrop*)gst_buffer_get_meta((b),GST_META_INFO_VIDEO_CROP))
+#define gst_buffer_add_meta_video_crop(b) ((GstMetaVideoCrop*)gst_buffer_add_meta((b),GST_META_INFO_VIDEO_CROP, NULL))
+
+G_END_DECLS
+
+#endif /* __GST_META_VIDEO_H__ */
diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
new file mode 100644
index 0000000..16b0cb2
--- /dev/null
+++ b/gst-libs/gst/video/gstvideofilter.c
@@ -0,0 +1,123 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+ /**
+ * SECTION:gstvideofilter
+ * @short_description: Base class for video filters
+ * 
+ * <refsect2>
+ * <para>
+ * Provides useful functions and a base class for video filters.
+ * </para>
+ * <para>
+ * The videofilter will by default enable QoS on the parent GstBaseTransform
+ * to implement frame dropping.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvideofilter.h"
+
+#include <gst/video/video.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_video_filter_debug);
+#define GST_CAT_DEFAULT gst_video_filter_debug
+
+static void gst_video_filter_class_init (gpointer g_class, gpointer class_data);
+static void gst_video_filter_init (GTypeInstance * instance, gpointer g_class);
+
+static GstBaseTransformClass *parent_class = NULL;
+
+GType
+gst_video_filter_get_type (void)
+{
+  static GType video_filter_type = 0;
+
+  if (!video_filter_type) {
+    static const GTypeInfo video_filter_info = {
+      sizeof (GstVideoFilterClass),
+      NULL,
+      NULL,
+      gst_video_filter_class_init,
+      NULL,
+      NULL,
+      sizeof (GstVideoFilter),
+      0,
+      gst_video_filter_init,
+    };
+
+    video_filter_type = g_type_register_static (GST_TYPE_BASE_TRANSFORM,
+        "GstVideoFilter", &video_filter_info, G_TYPE_FLAG_ABSTRACT);
+  }
+  return video_filter_type;
+}
+
+static gboolean
+gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
+    gsize * size)
+{
+  GstVideoInfo info;
+
+  if (!gst_video_info_from_caps (&info, caps)) {
+    GST_WARNING_OBJECT (btrans, "Failed to parse caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+
+  *size = info.size;
+
+  GST_DEBUG_OBJECT (btrans, "Returning size %" G_GSIZE_FORMAT " bytes"
+      "for caps %" GST_PTR_FORMAT, *size, caps);
+
+  return TRUE;
+}
+
+static void
+gst_video_filter_class_init (gpointer g_class, gpointer class_data)
+{
+  GstBaseTransformClass *trans_class;
+  GstVideoFilterClass *klass;
+
+  klass = (GstVideoFilterClass *) g_class;
+  trans_class = (GstBaseTransformClass *) klass;
+
+  trans_class->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_video_filter_get_unit_size);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  GST_DEBUG_CATEGORY_INIT (gst_video_filter_debug, "videofilter", 0,
+      "videofilter");
+}
+
+static void
+gst_video_filter_init (GTypeInstance * instance, gpointer g_class)
+{
+  GstVideoFilter *videofilter = GST_VIDEO_FILTER (instance);
+
+  GST_DEBUG_OBJECT (videofilter, "gst_video_filter_init");
+
+  videofilter->inited = FALSE;
+  /* enable QoS */
+  gst_base_transform_set_qos_enabled (GST_BASE_TRANSFORM (videofilter), TRUE);
+}
diff --git a/gst-libs/gst/video/gstvideofilter.h b/gst-libs/gst/video/gstvideofilter.h
new file mode 100644
index 0000000..bb0183e
--- /dev/null
+++ b/gst-libs/gst/video/gstvideofilter.h
@@ -0,0 +1,64 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_VIDEO_FILTER_H__
+#define __GST_VIDEO_FILTER_H__
+
+#include <gst/base/gstbasetransform.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstVideoFilter GstVideoFilter;
+typedef struct _GstVideoFilterClass GstVideoFilterClass;
+
+#define GST_TYPE_VIDEO_FILTER \
+  (gst_video_filter_get_type())
+#define GST_VIDEO_FILTER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_FILTER,GstVideoFilter))
+#define GST_VIDEO_FILTER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_FILTER,GstVideoFilterClass))
+#define GST_VIDEO_FILTER_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_VIDEO_FILTER, GstVideoFilterClass))
+#define GST_IS_VIDEO_FILTER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_FILTER))
+#define GST_IS_VIDEO_FILTER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_FILTER))
+
+struct _GstVideoFilter {
+  GstBaseTransform element;
+
+  gboolean inited;
+};
+
+/**
+ * GstVideoFilterClass:
+ * @parent_class: the parent class structure
+ *
+ * The video filter class structure.
+ */
+struct _GstVideoFilterClass {
+  GstBaseTransformClass parent_class;
+};
+
+GType gst_video_filter_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_FILTER_H__ */
diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c
new file mode 100644
index 0000000..435a327
--- /dev/null
+++ b/gst-libs/gst/video/gstvideopool.c
@@ -0,0 +1,74 @@
+/* GStreamer
+ * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gst/video/gstvideopool.h"
+
+/**
+ * gst_buffer_pool_config_set_video_alignment:
+ * @config: a #GstStructure
+ * @align: a #GstVideoAlignment
+ *
+ * Set the video alignment in @align to the bufferpool configuration
+ * @config
+ */
+void
+gst_buffer_pool_config_set_video_alignment (GstStructure * config,
+    GstVideoAlignment * align)
+{
+  g_return_if_fail (config != NULL);
+  g_return_if_fail (align != NULL);
+
+  gst_structure_set (config,
+      "padding-top", G_TYPE_UINT, align->padding_top,
+      "padding-bottom", G_TYPE_UINT, align->padding_bottom,
+      "padding-left", G_TYPE_UINT, align->padding_left,
+      "padding-right", G_TYPE_UINT, align->padding_right,
+      "stride-align0", G_TYPE_UINT, align->stride_align[0],
+      "stride-align1", G_TYPE_UINT, align->stride_align[1],
+      "stride-align2", G_TYPE_UINT, align->stride_align[2],
+      "stride-align3", G_TYPE_UINT, align->stride_align[3], NULL);
+}
+
+/**
+ * gst_buffer_pool_config_get_video_alignment:
+ * @config: a #GstStructure
+ * @align: a #GstVideoAlignment
+ *
+ * Get the video alignment from the bufferpool configuration @config in
+ * in @align
+ *
+ * Returns: #TRUE if @config could be parsed correctly.
+ */
+gboolean
+gst_buffer_pool_config_get_video_alignment (GstStructure * config,
+    GstVideoAlignment * align)
+{
+  g_return_val_if_fail (config != NULL, FALSE);
+  g_return_val_if_fail (align != NULL, FALSE);
+
+  return gst_structure_get (config,
+      "padding-top", G_TYPE_UINT, &align->padding_top,
+      "padding-bottom", G_TYPE_UINT, &align->padding_bottom,
+      "padding-left", G_TYPE_UINT, &align->padding_left,
+      "padding-right", G_TYPE_UINT, &align->padding_right,
+      "stride-align0", G_TYPE_UINT, &align->stride_align[0],
+      "stride-align1", G_TYPE_UINT, &align->stride_align[1],
+      "stride-align2", G_TYPE_UINT, &align->stride_align[2],
+      "stride-align3", G_TYPE_UINT, &align->stride_align[3], NULL);
+}
diff --git a/gst-libs/gst/video/gstvideopool.h b/gst-libs/gst/video/gstvideopool.h
new file mode 100644
index 0000000..179c724
--- /dev/null
+++ b/gst-libs/gst/video/gstvideopool.h
@@ -0,0 +1,74 @@
+/* GStreamer
+ * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_POOL_H__
+#define __GST_VIDEO_POOL_H__
+
+#include <gst/gst.h>
+
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_BUFFER_POOL_OPTION_META_VIDEO:
+ *
+ * An option that can be activated on bufferpool to request video metadata
+ * on buffers from the pool.
+ */
+#define GST_BUFFER_POOL_OPTION_META_VIDEO "GstBufferPoolOptionMetaVideo"
+
+/**
+ * GST_BUFFER_POOL_OPTION_VIDEO_LAYOUT:
+ *
+ * A bufferpool option to enable extra padding. When a bufferpool supports this
+ * option, gst_buffer_pool_set_video_alignment() can be called.
+ */
+#define GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT "GstBufferPoolOptionVideoAlignment"
+
+typedef struct _GstVideoAlignment GstVideoAlignment;
+
+/**
+ * GstVideoAlignment:
+ * @padding_left: extra pixels on the left side
+ * @padding_right: extra pixels on the right side
+ * @padding_top: extra pixels on the top
+ * @padding_bottom: extra pixels on the bottom
+ * @stride_align: array with extra alignment requirements for the strides
+ *
+ * Extra alignment paramters for the memory of video buffers. This
+ * structure is usually used to configure the bufferpool if it supports the
+ * #GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT.
+ */
+struct _GstVideoAlignment
+{
+  guint padding_top;
+  guint padding_bottom;
+  guint padding_left;
+  guint padding_right;
+  guint stride_align[GST_VIDEO_MAX_PLANES];
+};
+
+void             gst_buffer_pool_config_set_video_alignment  (GstStructure *config, GstVideoAlignment *align);
+gboolean         gst_buffer_pool_config_get_video_alignment  (GstStructure *config, GstVideoAlignment *align);
+
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_POOL_H__ */
diff --git a/gst-libs/gst/video/gstvideosink.c b/gst-libs/gst/video/gstvideosink.c
new file mode 100644
index 0000000..2e578d3
--- /dev/null
+++ b/gst-libs/gst/video/gstvideosink.c
@@ -0,0 +1,288 @@
+/*  GStreamer video sink base class
+ *  Copyright (C) <2003> Julien Moutte <julien@moutte.net>
+ *  Copyright (C) <2009> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstvideosink
+ * @short_description: Base class for video sinks
+ * 
+ * <refsect2>
+ * <para>
+ * Provides useful functions and a base class for video sinks. 
+ * </para>
+ * <para>
+ * GstVideoSink will configure the default base sink to drop frames that
+ * arrive later than 20ms as this is considered the default threshold for
+ * observing out-of-sync frames.
+ * </para>
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvideosink.h"
+
+enum
+{
+  PROP_SHOW_PREROLL_FRAME = 1
+};
+
+#define DEFAULT_SHOW_PREROLL_FRAME TRUE
+
+struct _GstVideoSinkPrivate
+{
+  gboolean show_preroll_frame;  /* ATOMIC */
+};
+
+GST_DEBUG_CATEGORY_STATIC (video_sink_debug);
+#define GST_CAT_DEFAULT video_sink_debug
+
+static GstBaseSinkClass *parent_class = NULL;
+
+static void gst_video_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_video_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GstFlowReturn gst_video_sink_show_preroll_frame (GstBaseSink * bsink,
+    GstBuffer * buf);
+static GstFlowReturn gst_video_sink_show_frame (GstBaseSink * bsink,
+    GstBuffer * buf);
+
+/**
+ * gst_video_sink_center_rect:
+ * @src: the #GstVideoRectangle describing the source area
+ * @dst: the #GstVideoRectangle describing the destination area
+ * @result: a pointer to a #GstVideoRectangle which will receive the result area
+ * @scaling: a #gboolean indicating if scaling should be applied or not
+ * 
+ * Takes @src rectangle and position it at the center of @dst rectangle with or
+ * without @scaling. It handles clipping if the @src rectangle is bigger than
+ * the @dst one and @scaling is set to FALSE.
+ */
+void
+gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst,
+    GstVideoRectangle * result, gboolean scaling)
+{
+  g_return_if_fail (result != NULL);
+
+  if (!scaling) {
+    result->w = MIN (src.w, dst.w);
+    result->h = MIN (src.h, dst.h);
+    result->x = (dst.w - result->w) / 2;
+    result->y = (dst.h - result->h) / 2;
+  } else {
+    gdouble src_ratio, dst_ratio;
+
+    src_ratio = (gdouble) src.w / src.h;
+    dst_ratio = (gdouble) dst.w / dst.h;
+
+    if (src_ratio > dst_ratio) {
+      result->w = dst.w;
+      result->h = dst.w / src_ratio;
+      result->x = 0;
+      result->y = (dst.h - result->h) / 2;
+    } else if (src_ratio < dst_ratio) {
+      result->w = dst.h * src_ratio;
+      result->h = dst.h;
+      result->x = (dst.w - result->w) / 2;
+      result->y = 0;
+    } else {
+      result->x = 0;
+      result->y = 0;
+      result->w = dst.w;
+      result->h = dst.h;
+    }
+  }
+
+  GST_DEBUG ("source is %dx%d dest is %dx%d, result is %dx%d with x,y %dx%d",
+      src.w, src.h, dst.w, dst.h, result->w, result->h, result->x, result->y);
+}
+
+/* Initing stuff */
+
+static void
+gst_video_sink_init (GstVideoSink * videosink)
+{
+  videosink->width = 0;
+  videosink->height = 0;
+
+  /* 20ms is more than enough, 80-130ms is noticable */
+  gst_base_sink_set_max_lateness (GST_BASE_SINK (videosink), 20 * GST_MSECOND);
+  gst_base_sink_set_qos_enabled (GST_BASE_SINK (videosink), TRUE);
+
+  videosink->priv = G_TYPE_INSTANCE_GET_PRIVATE (videosink,
+      GST_TYPE_VIDEO_SINK, GstVideoSinkPrivate);
+}
+
+static void
+gst_video_sink_class_init (GstVideoSinkClass * klass)
+{
+  GstBaseSinkClass *basesink_class = (GstBaseSinkClass *) klass;
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->set_property = gst_video_sink_set_property;
+  gobject_class->get_property = gst_video_sink_get_property;
+
+  /**
+   * GstVideoSink:show-preroll-frame
+   *
+   * Whether to show video frames during preroll. If set to #FALSE, video
+   * frames will only be rendered in PLAYING state.
+   *
+   * Since: 0.10.25
+   */
+  g_object_class_install_property (gobject_class, PROP_SHOW_PREROLL_FRAME,
+      g_param_spec_boolean ("show-preroll-frame", "Show preroll frame",
+          "Whether to render video frames during preroll",
+          DEFAULT_SHOW_PREROLL_FRAME,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  basesink_class->render = GST_DEBUG_FUNCPTR (gst_video_sink_show_frame);
+  basesink_class->preroll =
+      GST_DEBUG_FUNCPTR (gst_video_sink_show_preroll_frame);
+
+  g_type_class_add_private (klass, sizeof (GstVideoSinkPrivate));
+}
+
+static void
+gst_video_sink_base_init (gpointer g_class)
+{
+  GST_DEBUG_CATEGORY_INIT (video_sink_debug, "videosink", 0, "GstVideoSink");
+}
+
+static GstFlowReturn
+gst_video_sink_show_preroll_frame (GstBaseSink * bsink, GstBuffer * buf)
+{
+  GstVideoSinkClass *klass;
+  GstVideoSink *vsink;
+  gboolean do_show;
+
+  vsink = GST_VIDEO_SINK_CAST (bsink);
+  klass = GST_VIDEO_SINK_GET_CLASS (vsink);
+
+  do_show = g_atomic_int_get (&vsink->priv->show_preroll_frame);
+
+  if (G_UNLIKELY (!do_show)) {
+    GST_DEBUG_OBJECT (bsink, "not rendering frame with ts=%" GST_TIME_FORMAT
+        ", preroll rendering disabled",
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+  }
+
+  if (klass->show_frame == NULL || !do_show) {
+    if (parent_class->preroll != NULL)
+      return parent_class->preroll (bsink, buf);
+    else
+      return GST_FLOW_OK;
+  }
+
+  GST_LOG_OBJECT (bsink, "rendering frame, ts=%" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  return klass->show_frame (GST_VIDEO_SINK_CAST (bsink), buf);
+}
+
+static GstFlowReturn
+gst_video_sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
+{
+  GstVideoSinkClass *klass;
+
+  klass = GST_VIDEO_SINK_GET_CLASS (bsink);
+
+  if (klass->show_frame == NULL) {
+    if (parent_class->render != NULL)
+      return parent_class->render (bsink, buf);
+    else
+      return GST_FLOW_OK;
+  }
+
+  GST_LOG_OBJECT (bsink, "rendering frame, ts=%" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  return klass->show_frame (GST_VIDEO_SINK_CAST (bsink), buf);
+}
+
+static void
+gst_video_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVideoSink *vsink;
+
+  vsink = GST_VIDEO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_SHOW_PREROLL_FRAME:
+      g_atomic_int_set (&vsink->priv->show_preroll_frame,
+          g_value_get_boolean (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_video_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstVideoSink *vsink;
+
+  vsink = GST_VIDEO_SINK (object);
+
+  switch (prop_id) {
+    case PROP_SHOW_PREROLL_FRAME:
+      g_value_set_boolean (value,
+          g_atomic_int_get (&vsink->priv->show_preroll_frame));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* Public methods */
+
+GType
+gst_video_sink_get_type (void)
+{
+  static GType videosink_type = 0;
+
+  if (!videosink_type) {
+    static const GTypeInfo videosink_info = {
+      sizeof (GstVideoSinkClass),
+      gst_video_sink_base_init,
+      NULL,
+      (GClassInitFunc) gst_video_sink_class_init,
+      NULL,
+      NULL,
+      sizeof (GstVideoSink),
+      0,
+      (GInstanceInitFunc) gst_video_sink_init,
+    };
+
+    videosink_type = g_type_register_static (GST_TYPE_BASE_SINK,
+        "GstVideoSink", &videosink_info, 0);
+  }
+
+  return videosink_type;
+}
diff --git a/gst-libs/gst/video/gstvideosink.h b/gst-libs/gst/video/gstvideosink.h
new file mode 100644
index 0000000..4a115e4
--- /dev/null
+++ b/gst-libs/gst/video/gstvideosink.h
@@ -0,0 +1,132 @@
+/*  GStreamer video sink base class
+ *  Copyright (C) <2003> Julien Moutte <julien@moutte.net>
+ *  Copyright (C) <2009> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* FIXME 0.11: turn this into a proper base class */
+
+#ifndef __GST_VIDEO_SINK_H__
+#define __GST_VIDEO_SINK_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_SINK (gst_video_sink_get_type())
+#define GST_VIDEO_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_VIDEO_SINK, GstVideoSink))
+#define GST_VIDEO_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass))
+#define GST_IS_VIDEO_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_VIDEO_SINK))
+#define GST_IS_VIDEO_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_VIDEO_SINK))
+#define GST_VIDEO_SINK_GET_CLASS(klass) \
+  (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_VIDEO_SINK, GstVideoSinkClass))
+
+/**
+ * GST_VIDEO_SINK_CAST:
+ * @obj: a #GstVideoSink or derived object
+ *
+ * Cast @obj to a #GstVideoSink without runtime type check.
+ *
+ * Since: 0.10.12
+ */
+#define GST_VIDEO_SINK_CAST(obj)  ((GstVideoSink *) (obj))
+
+/**
+ * GST_VIDEO_SINK_PAD:
+ * @obj: a #GstVideoSink
+ *
+ * Get the sink #GstPad of @obj.
+ */
+#define GST_VIDEO_SINK_PAD(obj) GST_BASE_SINK_PAD(obj)
+
+#define GST_VIDEO_SINK_WIDTH(obj) (GST_VIDEO_SINK_CAST (obj)->width)
+#define GST_VIDEO_SINK_HEIGHT(obj) (GST_VIDEO_SINK_CAST (obj)->height)
+
+typedef struct _GstVideoSink GstVideoSink;
+typedef struct _GstVideoSinkClass GstVideoSinkClass;
+typedef struct _GstVideoRectangle GstVideoRectangle;
+typedef struct _GstVideoSinkPrivate GstVideoSinkPrivate;
+
+/**
+ * GstVideoRectangle:
+ * @x: X coordinate of rectangle's top-left point
+ * @y: Y coordinate of rectangle's top-left point
+ * @w: width of the rectangle
+ * @h: height of the rectangle
+ *
+ * Helper structure representing a rectangular area.
+ */
+struct _GstVideoRectangle {
+  gint x;
+  gint y;
+  gint w;
+  gint h;
+};
+
+/**
+ * GstVideoSink:
+ * @height: video height (derived class needs to set this)
+ * @width: video width (derived class needs to set this)
+ *
+ * The video sink instance structure. Derived video sinks should set the
+ * @height and @width members.
+ */
+struct _GstVideoSink {
+  GstBaseSink element;    /* FIXME 0.11: this should not be called 'element' */
+
+  /*< public >*/
+  gint width, height;
+
+  /*< private >*/
+  GstVideoSinkPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING - 1];
+};
+
+/**
+ * GstVideoSinkClass:
+ * @parent_class: the parent class structure
+ * @show_frame: render a video frame. Maps to #GstBaseSinkClass.render() and
+ *     #GstBaseSinkClass.preroll() vfuncs. Rendering during preroll will be
+ *     suppressed if the #GstVideoSink:show-preroll-frame property is set to 
+ *     %FALSE. Since: 0.10.25
+ *
+ * The video sink class structure. Derived classes should override the
+ * @show_frame virtual function.
+ */
+struct _GstVideoSinkClass {
+  GstBaseSinkClass parent_class;
+
+  GstFlowReturn  (*show_frame) (GstVideoSink *video_sink, GstBuffer *buf);
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING - 1];
+};
+
+GType gst_video_sink_get_type (void);
+
+void gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst,
+                                 GstVideoRectangle *result, gboolean scaling);
+
+G_END_DECLS
+
+#endif  /* __GST_VIDEO_SINK_H__ */
diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
new file mode 100644
index 0000000..130c980
--- /dev/null
+++ b/gst-libs/gst/video/video.c
@@ -0,0 +1,1538 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Library       <2002> Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2007 David A. Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "video.h"
+#include "gstmetavideo.h"
+
+static int fill_planes (GstVideoInfo * info);
+
+typedef struct
+{
+  guint32 fourcc;
+  GstVideoFormatInfo info;
+} VideoFormat;
+
+/* depths: bits, n_components, shift, depth */
+#define DPTH0            0, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+#define DPTH8            8, 1, { 0, 0, 0, 0 }, { 8, 0, 0, 0 }
+#define DPTH888          8, 3, { 0, 0, 0, 0 }, { 8, 8, 8, 0 }
+#define DPTH8888         8, 4, { 0, 0, 0, 0 }, { 8, 8, 8, 8 }
+#define DPTH10_10_10     10, 3, { 0, 0, 0, 0 }, { 10, 10, 10, 0 }
+#define DPTH16           16, 1, { 0, 0, 0, 0 }, { 16, 0, 0, 0 }
+#define DPTH16_16_16     16, 3, { 0, 0, 0, 0 }, { 16, 16, 16, 0 }
+#define DPTH16_16_16_16  16, 4, { 0, 0, 0, 0 }, { 16, 16, 16, 16 }
+#define DPTH555          16, 3, { 10, 5, 0, 0 }, { 5, 5, 5, 0 }
+#define DPTH565          16, 3, { 11, 5, 0, 0 }, { 5, 6, 5, 0 }
+
+/* pixel strides */
+#define PSTR0             { 0, 0, 0, 0 }
+#define PSTR1             { 1, 0, 0, 0 }
+#define PSTR111           { 1, 1, 1, 0 }
+#define PSTR1111          { 1, 1, 1, 1 }
+#define PSTR122           { 1, 2, 2, 0 }
+#define PSTR2             { 2, 0, 0, 0 }
+#define PSTR222           { 2, 2, 2, 0 }
+#define PSTR244           { 2, 4, 4, 0 }
+#define PSTR444           { 4, 4, 4, 0 }
+#define PSTR4444          { 4, 4, 4, 4 }
+#define PSTR333           { 3, 3, 3, 0 }
+#define PSTR488           { 4, 8, 8, 0 }
+#define PSTR8888          { 8, 8, 8, 8 }
+
+/* planes */
+#define PLANE_NA          0, { 0, 0, 0, 0 }
+#define PLANE0            1, { 0, 0, 0, 0 }
+#define PLANE011          2, { 0, 1, 1, 0 }
+#define PLANE012          3, { 0, 1, 2, 0 }
+#define PLANE0123         4, { 0, 1, 2, 3 }
+#define PLANE021          3, { 0, 2, 1, 0 }
+
+/* offsets */
+#define OFFS0             { 0, 0, 0, 0 }
+#define OFFS013           { 0, 1, 3, 0 }
+#define OFFS102           { 1, 0, 2, 0 }
+#define OFFS1230          { 1, 2, 3, 0 }
+#define OFFS012           { 0, 1, 2, 0 }
+#define OFFS210           { 2, 1, 0, 0 }
+#define OFFS123           { 1, 2, 3, 0 }
+#define OFFS321           { 3, 2, 1, 0 }
+#define OFFS0123          { 0, 1, 2, 3 }
+#define OFFS2103          { 2, 1, 0, 3 }
+#define OFFS3210          { 3, 2, 1, 0 }
+#define OFFS031           { 0, 3, 1, 0 }
+#define OFFS026           { 0, 2, 6, 0 }
+#define OFFS001           { 0, 0, 1, 0 }
+#define OFFS010           { 0, 1, 0, 0 }
+#define OFFS104           { 1, 0, 4, 0 }
+#define OFFS2460          { 2, 4, 6, 0 }
+
+/* subsampling */
+#define SUB410            { 0, 2, 2, 0 }, { 0, 2, 2, 0 }
+#define SUB411            { 0, 2, 2, 0 }, { 0, 0, 0, 0 }
+#define SUB420            { 0, 1, 1, 0 }, { 0, 1, 1, 0 }
+#define SUB422            { 0, 1, 1, 0 }, { 0, 0, 0, 0 }
+#define SUB4              { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+#define SUB444            { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+#define SUB4444           { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+#define SUB4204           { 0, 1, 1, 0 }, { 0, 1, 1, 0 }
+
+#define MAKE_YUV_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub ) \
+ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV, depth, pstride, plane, offs, sub } }
+#define MAKE_YUVA_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub) \
+ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA, depth, pstride, plane, offs, sub } }
+
+#define MAKE_RGB_FORMAT(name, desc, depth, pstride, plane, offs, sub) \
+ { 0x00000000, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_RGB, depth, pstride, plane, offs, sub } }
+#define MAKE_RGBA_FORMAT(name, desc, depth, pstride, plane, offs, sub) \
+ { 0x00000000, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_RGB | GST_VIDEO_FORMAT_FLAG_ALPHA, depth, pstride, plane, offs, sub } }
+
+#define MAKE_GRAY_FORMAT(name, desc, depth, pstride, plane, offs, sub) \
+ { 0x00000000, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_GRAY, depth, pstride, plane, offs, sub } }
+
+static VideoFormat formats[] = {
+  {0x00000000, {GST_VIDEO_FORMAT_UNKNOWN, "UNKNOWN", "unknown video", 0, DPTH0,
+              PSTR0, PLANE_NA,
+          OFFS0}},
+
+  MAKE_YUV_FORMAT (I420, "raw video", GST_MAKE_FOURCC ('I', '4', '2', '0'),
+      DPTH888, PSTR111,
+      PLANE012, OFFS0, SUB420),
+  MAKE_YUV_FORMAT (YV12, "raw video", GST_MAKE_FOURCC ('Y', 'V', '1', '2'),
+      DPTH888, PSTR111,
+      PLANE021, OFFS0, SUB420),
+  MAKE_YUV_FORMAT (YUY2, "raw video", GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
+      DPTH888, PSTR244,
+      PLANE0, OFFS013, SUB422),
+  MAKE_YUV_FORMAT (UYVY, "raw video", GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'),
+      DPTH888, PSTR244,
+      PLANE0, OFFS102, SUB422),
+  MAKE_YUVA_FORMAT (AYUV, "raw video", GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'),
+      DPTH8888,
+      PSTR4444, PLANE0, OFFS1230, SUB4444),
+  MAKE_RGB_FORMAT (RGBx, "raw video", DPTH888, PSTR444, PLANE0, OFFS012,
+      SUB444),
+  MAKE_RGB_FORMAT (BGRx, "raw video", DPTH888, PSTR444, PLANE0, OFFS210,
+      SUB444),
+  MAKE_RGB_FORMAT (xRGB, "raw video", DPTH888, PSTR444, PLANE0, OFFS123,
+      SUB444),
+  MAKE_RGB_FORMAT (xBGR, "raw video", DPTH888, PSTR444, PLANE0, OFFS321,
+      SUB444),
+  MAKE_RGBA_FORMAT (RGBA, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS0123,
+      SUB4444),
+  MAKE_RGBA_FORMAT (BGRA, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS2103,
+      SUB4444),
+  MAKE_RGBA_FORMAT (ARGB, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS1230,
+      SUB4444),
+  MAKE_RGBA_FORMAT (ABGR, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS3210,
+      SUB4444),
+  MAKE_RGB_FORMAT (RGB, "raw video", DPTH888, PSTR333, PLANE0, OFFS012, SUB444),
+  MAKE_RGB_FORMAT (BGR, "raw video", DPTH888, PSTR333, PLANE0, OFFS210, SUB444),
+
+  MAKE_YUV_FORMAT (Y41B, "raw video", GST_MAKE_FOURCC ('Y', '4', '1', 'B'),
+      DPTH888, PSTR111,
+      PLANE012, OFFS0, SUB411),
+  MAKE_YUV_FORMAT (Y42B, "raw video", GST_MAKE_FOURCC ('Y', '4', '2', 'B'),
+      DPTH888, PSTR111,
+      PLANE012, OFFS0, SUB422),
+  MAKE_YUV_FORMAT (YVYU, "raw video", GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'),
+      DPTH888, PSTR244,
+      PLANE0, OFFS031, SUB422),
+  MAKE_YUV_FORMAT (Y444, "raw video", GST_MAKE_FOURCC ('Y', '4', '4', '4'),
+      DPTH888, PSTR111,
+      PLANE012, OFFS0, SUB444),
+  MAKE_YUV_FORMAT (v210, "raw video", GST_MAKE_FOURCC ('v', '2', '1', '0'),
+      DPTH10_10_10,
+      PSTR0, PLANE0, OFFS0, SUB422),
+  MAKE_YUV_FORMAT (v216, "raw video", GST_MAKE_FOURCC ('v', '2', '1', '6'),
+      DPTH16_16_16,
+      PSTR488, PLANE0, OFFS026, SUB422),
+  MAKE_YUV_FORMAT (NV12, "raw video", GST_MAKE_FOURCC ('N', 'V', '1', '2'),
+      DPTH888, PSTR122,
+      PLANE011, OFFS001, SUB420),
+  MAKE_YUV_FORMAT (NV21, "raw video", GST_MAKE_FOURCC ('N', 'V', '2', '1'),
+      DPTH888, PSTR122,
+      PLANE011, OFFS010, SUB420),
+
+  MAKE_GRAY_FORMAT (GRAY8, "raw video", DPTH8, PSTR1, PLANE0, OFFS0, SUB4),
+  MAKE_GRAY_FORMAT (GRAY16_BE, "raw video", DPTH16, PSTR2, PLANE0, OFFS0, SUB4),
+  MAKE_GRAY_FORMAT (GRAY16_LE, "raw video", DPTH16, PSTR2, PLANE0, OFFS0, SUB4),
+
+  MAKE_YUV_FORMAT (v308, "raw video", GST_MAKE_FOURCC ('v', '3', '0', '8'),
+      DPTH888, PSTR333,
+      PLANE0, OFFS012, SUB444),
+  MAKE_YUV_FORMAT (Y800, "raw video", GST_MAKE_FOURCC ('Y', '8', '0', '0'),
+      DPTH8, PSTR1,
+      PLANE0, OFFS0, SUB4),
+  MAKE_YUV_FORMAT (Y16, "raw video", GST_MAKE_FOURCC ('Y', '1', '6', ' '),
+      DPTH16, PSTR2,
+      PLANE0, OFFS0, SUB4),
+
+  MAKE_RGB_FORMAT (RGB16, "raw video", DPTH565, PSTR222, PLANE0, OFFS0, SUB444),
+  MAKE_RGB_FORMAT (BGR16, "raw video", DPTH565, PSTR222, PLANE0, OFFS0, SUB444),
+  MAKE_RGB_FORMAT (RGB15, "raw video", DPTH555, PSTR222, PLANE0, OFFS0, SUB444),
+  MAKE_RGB_FORMAT (BGR15, "raw video", DPTH555, PSTR222, PLANE0, OFFS0, SUB444),
+
+  MAKE_YUV_FORMAT (UYVP, "raw video", GST_MAKE_FOURCC ('U', 'Y', 'V', 'P'),
+      DPTH10_10_10,
+      PSTR0, PLANE0, OFFS0, SUB422),
+  MAKE_YUVA_FORMAT (A420, "raw video", GST_MAKE_FOURCC ('A', '4', '2', '0'),
+      DPTH8888,
+      PSTR1111, PLANE0123, OFFS0, SUB4204),
+  MAKE_RGBA_FORMAT (RGB8_PALETTED, "raw video", DPTH8888, PSTR1111, PLANE0,
+      OFFS0, SUB4444),
+  MAKE_YUV_FORMAT (YUV9, "raw video", GST_MAKE_FOURCC ('Y', 'U', 'V', '9'),
+      DPTH888, PSTR111,
+      PLANE012, OFFS0, SUB410),
+  MAKE_YUV_FORMAT (YVU9, "raw video", GST_MAKE_FOURCC ('Y', 'V', 'U', '9'),
+      DPTH888, PSTR111,
+      PLANE021, OFFS0, SUB410),
+  MAKE_YUV_FORMAT (IYU1, "raw video", GST_MAKE_FOURCC ('I', 'Y', 'U', '1'),
+      DPTH888, PSTR0,
+      PLANE0, OFFS104, SUB411),
+  MAKE_RGBA_FORMAT (ARGB64, "raw video", DPTH16_16_16_16, PSTR8888, PLANE0,
+      OFFS2460,
+      SUB444),
+  MAKE_YUVA_FORMAT (AYUV64, "raw video", 0x00000000, DPTH16_16_16_16, PSTR8888,
+      PLANE0,
+      OFFS2460, SUB444),
+  MAKE_YUV_FORMAT (r210, "raw video", GST_MAKE_FOURCC ('r', '2', '1', '0'),
+      DPTH10_10_10,
+      PSTR444, PLANE0, OFFS0, SUB444),
+};
+
+/**
+ * SECTION:gstvideo
+ * @short_description: Support library for video operations
+ *
+ * <refsect2>
+ * <para>
+ * This library contains some helper functions and includes the
+ * videosink and videofilter base classes.
+ * </para>
+ * </refsect2>
+ */
+
+/**
+ * gst_video_calculate_display_ratio:
+ * @dar_n: Numerator of the calculated display_ratio
+ * @dar_d: Denominator of the calculated display_ratio
+ * @video_width: Width of the video frame in pixels
+ * @video_height: Height of the video frame in pixels
+ * @video_par_n: Numerator of the pixel aspect ratio of the input video.
+ * @video_par_d: Denominator of the pixel aspect ratio of the input video.
+ * @display_par_n: Numerator of the pixel aspect ratio of the display device
+ * @display_par_d: Denominator of the pixel aspect ratio of the display device
+ *
+ * Given the Pixel Aspect Ratio and size of an input video frame, and the
+ * pixel aspect ratio of the intended display device, calculates the actual
+ * display ratio the video will be rendered with.
+ *
+ * Returns: A boolean indicating success and a calculated Display Ratio in the
+ * dar_n and dar_d parameters.
+ * The return value is FALSE in the case of integer overflow or other error.
+ *
+ * Since: 0.10.7
+ */
+gboolean
+gst_video_calculate_display_ratio (guint * dar_n, guint * dar_d,
+    guint video_width, guint video_height,
+    guint video_par_n, guint video_par_d,
+    guint display_par_n, guint display_par_d)
+{
+  gint num, den;
+  gint tmp_n, tmp_d;
+
+  g_return_val_if_fail (dar_n != NULL, FALSE);
+  g_return_val_if_fail (dar_d != NULL, FALSE);
+
+  /* Calculate (video_width * video_par_n * display_par_d) /
+   * (video_height * video_par_d * display_par_n) */
+  if (!gst_util_fraction_multiply (video_width, video_height, video_par_n,
+          video_par_d, &tmp_n, &tmp_d))
+    goto error_overflow;
+
+  if (!gst_util_fraction_multiply (tmp_n, tmp_d, display_par_d, display_par_n,
+          &num, &den))
+    goto error_overflow;
+
+  g_return_val_if_fail (num > 0, FALSE);
+  g_return_val_if_fail (den > 0, FALSE);
+
+  *dar_n = num;
+  *dar_d = den;
+
+  return TRUE;
+
+  /* ERRORS */
+error_overflow:
+  {
+    GST_WARNING ("overflow in multiply");
+    return FALSE;
+  }
+}
+
+static GstVideoFormat
+gst_video_format_from_rgb32_masks (int red_mask, int green_mask, int blue_mask)
+{
+  if (red_mask == 0xff000000 && green_mask == 0x00ff0000 &&
+      blue_mask == 0x0000ff00) {
+    return GST_VIDEO_FORMAT_RGBx;
+  }
+  if (red_mask == 0x0000ff00 && green_mask == 0x00ff0000 &&
+      blue_mask == 0xff000000) {
+    return GST_VIDEO_FORMAT_BGRx;
+  }
+  if (red_mask == 0x00ff0000 && green_mask == 0x0000ff00 &&
+      blue_mask == 0x000000ff) {
+    return GST_VIDEO_FORMAT_xRGB;
+  }
+  if (red_mask == 0x000000ff && green_mask == 0x0000ff00 &&
+      blue_mask == 0x00ff0000) {
+    return GST_VIDEO_FORMAT_xBGR;
+  }
+
+  return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+static GstVideoFormat
+gst_video_format_from_rgba32_masks (int red_mask, int green_mask,
+    int blue_mask, int alpha_mask)
+{
+  if (red_mask == 0xff000000 && green_mask == 0x00ff0000 &&
+      blue_mask == 0x0000ff00 && alpha_mask == 0x000000ff) {
+    return GST_VIDEO_FORMAT_RGBA;
+  }
+  if (red_mask == 0x0000ff00 && green_mask == 0x00ff0000 &&
+      blue_mask == 0xff000000 && alpha_mask == 0x000000ff) {
+    return GST_VIDEO_FORMAT_BGRA;
+  }
+  if (red_mask == 0x00ff0000 && green_mask == 0x0000ff00 &&
+      blue_mask == 0x000000ff && alpha_mask == 0xff000000) {
+    return GST_VIDEO_FORMAT_ARGB;
+  }
+  if (red_mask == 0x000000ff && green_mask == 0x0000ff00 &&
+      blue_mask == 0x00ff0000 && alpha_mask == 0xff000000) {
+    return GST_VIDEO_FORMAT_ABGR;
+  }
+  return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+static GstVideoFormat
+gst_video_format_from_rgb24_masks (int red_mask, int green_mask, int blue_mask)
+{
+  if (red_mask == 0xff0000 && green_mask == 0x00ff00 && blue_mask == 0x0000ff) {
+    return GST_VIDEO_FORMAT_RGB;
+  }
+  if (red_mask == 0x0000ff && green_mask == 0x00ff00 && blue_mask == 0xff0000) {
+    return GST_VIDEO_FORMAT_BGR;
+  }
+
+  return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+#define GST_VIDEO_COMP1_MASK_16_INT 0xf800
+#define GST_VIDEO_COMP2_MASK_16_INT 0x07e0
+#define GST_VIDEO_COMP3_MASK_16_INT 0x001f
+
+#define GST_VIDEO_COMP1_MASK_15_INT 0x7c00
+#define GST_VIDEO_COMP2_MASK_15_INT 0x03e0
+#define GST_VIDEO_COMP3_MASK_15_INT 0x001f
+
+static GstVideoFormat
+gst_video_format_from_rgb16_masks (int red_mask, int green_mask, int blue_mask)
+{
+  if (red_mask == GST_VIDEO_COMP1_MASK_16_INT
+      && green_mask == GST_VIDEO_COMP2_MASK_16_INT
+      && blue_mask == GST_VIDEO_COMP3_MASK_16_INT) {
+    return GST_VIDEO_FORMAT_RGB16;
+  }
+  if (red_mask == GST_VIDEO_COMP3_MASK_16_INT
+      && green_mask == GST_VIDEO_COMP2_MASK_16_INT
+      && blue_mask == GST_VIDEO_COMP1_MASK_16_INT) {
+    return GST_VIDEO_FORMAT_BGR16;
+  }
+  if (red_mask == GST_VIDEO_COMP1_MASK_15_INT
+      && green_mask == GST_VIDEO_COMP2_MASK_15_INT
+      && blue_mask == GST_VIDEO_COMP3_MASK_15_INT) {
+    return GST_VIDEO_FORMAT_RGB15;
+  }
+  if (red_mask == GST_VIDEO_COMP3_MASK_15_INT
+      && green_mask == GST_VIDEO_COMP2_MASK_15_INT
+      && blue_mask == GST_VIDEO_COMP1_MASK_15_INT) {
+    return GST_VIDEO_FORMAT_BGR15;
+  }
+  return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+/**
+ * gst_video_format_from_masks:
+ * @depth: the amount of bits used for a pixel
+ * @bpp: the amount of bits used to store a pixel. This value is bigger than
+ *   @depth
+ * @endianness: the endianness of the masks
+ * @red_mask: the red mask
+ * @green_mask: the green mask
+ * @blue_mask: the blue mask
+ * @alpha_mask: the optional alpha mask
+ *
+ * Find the #GstVideoFormat for the given parameters.
+ *
+ * Returns: a #GstVideoFormat or GST_VIDEO_FORMAT_UNKNOWN when the parameters to
+ * not specify a known format.
+ */
+GstVideoFormat
+gst_video_format_from_masks (gint depth, gint bpp, gint endianness,
+    gint red_mask, gint green_mask, gint blue_mask, gint alpha_mask)
+{
+  GstVideoFormat format;
+
+  /* our caps system handles 24/32bpp RGB as big-endian. */
+  if ((bpp == 24 || bpp == 32) && endianness == G_LITTLE_ENDIAN) {
+    red_mask = GUINT32_TO_BE (red_mask);
+    green_mask = GUINT32_TO_BE (green_mask);
+    blue_mask = GUINT32_TO_BE (blue_mask);
+    endianness = G_BIG_ENDIAN;
+    if (bpp == 24) {
+      red_mask >>= 8;
+      green_mask >>= 8;
+      blue_mask >>= 8;
+    }
+  }
+
+  if (depth == 30 && bpp == 32) {
+    format = GST_VIDEO_FORMAT_r210;
+  } else if (depth == 24 && bpp == 32) {
+    format = gst_video_format_from_rgb32_masks (red_mask, green_mask,
+        blue_mask);
+  } else if (depth == 32 && bpp == 32 && alpha_mask) {
+    format = gst_video_format_from_rgba32_masks (red_mask, green_mask,
+        blue_mask, alpha_mask);
+  } else if (depth == 24 && bpp == 24) {
+    format = gst_video_format_from_rgb24_masks (red_mask, green_mask,
+        blue_mask);
+  } else if ((depth == 15 || depth == 16) && bpp == 16 &&
+      endianness == G_BYTE_ORDER) {
+    format = gst_video_format_from_rgb16_masks (red_mask, green_mask,
+        blue_mask);
+  } else if (depth == 8 && bpp == 8) {
+    format = GST_VIDEO_FORMAT_RGB8_PALETTED;
+  } else if (depth == 64 && bpp == 64) {
+    format = gst_video_format_from_rgba32_masks (red_mask, green_mask,
+        blue_mask, alpha_mask);
+    if (format == GST_VIDEO_FORMAT_ARGB) {
+      format = GST_VIDEO_FORMAT_ARGB64;
+    } else {
+      format = GST_VIDEO_FORMAT_UNKNOWN;
+    }
+  } else {
+    format = GST_VIDEO_FORMAT_UNKNOWN;
+  }
+  return format;
+}
+
+/**
+ * gst_video_format_from_fourcc:
+ * @fourcc: a FOURCC value representing raw YUV video
+ *
+ * Converts a FOURCC value into the corresponding #GstVideoFormat.
+ * If the FOURCC cannot be represented by #GstVideoFormat,
+ * #GST_VIDEO_FORMAT_UNKNOWN is returned.
+ *
+ * Since: 0.10.16
+ *
+ * Returns: the #GstVideoFormat describing the FOURCC value
+ */
+GstVideoFormat
+gst_video_format_from_fourcc (guint32 fourcc)
+{
+  switch (fourcc) {
+    case GST_MAKE_FOURCC ('I', '4', '2', '0'):
+      return GST_VIDEO_FORMAT_I420;
+    case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
+      return GST_VIDEO_FORMAT_YV12;
+    case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
+      return GST_VIDEO_FORMAT_YUY2;
+    case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'):
+      return GST_VIDEO_FORMAT_YVYU;
+    case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
+      return GST_VIDEO_FORMAT_UYVY;
+    case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'):
+      return GST_VIDEO_FORMAT_AYUV;
+    case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
+      return GST_VIDEO_FORMAT_Y41B;
+    case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
+      return GST_VIDEO_FORMAT_Y42B;
+    case GST_MAKE_FOURCC ('Y', '4', '4', '4'):
+      return GST_VIDEO_FORMAT_Y444;
+    case GST_MAKE_FOURCC ('v', '2', '1', '0'):
+      return GST_VIDEO_FORMAT_v210;
+    case GST_MAKE_FOURCC ('v', '2', '1', '6'):
+      return GST_VIDEO_FORMAT_v216;
+    case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
+      return GST_VIDEO_FORMAT_NV12;
+    case GST_MAKE_FOURCC ('N', 'V', '2', '1'):
+      return GST_VIDEO_FORMAT_NV21;
+    case GST_MAKE_FOURCC ('v', '3', '0', '8'):
+      return GST_VIDEO_FORMAT_v308;
+    case GST_MAKE_FOURCC ('Y', '8', '0', '0'):
+    case GST_MAKE_FOURCC ('Y', '8', ' ', ' '):
+    case GST_MAKE_FOURCC ('G', 'R', 'E', 'Y'):
+      return GST_VIDEO_FORMAT_Y800;
+    case GST_MAKE_FOURCC ('Y', '1', '6', ' '):
+      return GST_VIDEO_FORMAT_Y16;
+    case GST_MAKE_FOURCC ('U', 'Y', 'V', 'P'):
+      return GST_VIDEO_FORMAT_UYVP;
+    case GST_MAKE_FOURCC ('A', '4', '2', '0'):
+      return GST_VIDEO_FORMAT_A420;
+    case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
+      return GST_VIDEO_FORMAT_YUV9;
+    case GST_MAKE_FOURCC ('Y', 'V', 'U', '9'):
+      return GST_VIDEO_FORMAT_YVU9;
+    case GST_MAKE_FOURCC ('I', 'Y', 'U', '1'):
+      return GST_VIDEO_FORMAT_IYU1;
+    case GST_MAKE_FOURCC ('A', 'Y', '6', '4'):
+      return GST_VIDEO_FORMAT_AYUV64;
+    default:
+      return GST_VIDEO_FORMAT_UNKNOWN;
+  }
+}
+
+/**
+ * gst_video_format_from_string:
+ * @format: a format string
+ *
+ * Convert the @format string to its #GstVideoFormat.
+ *
+ * Returns: the #GstVideoFormat for @format or GST_VIDEO_FORMAT_UNKNOWN when the
+ * string is not a known format.
+ */
+GstVideoFormat
+gst_video_format_from_string (const gchar * format)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+    if (strcmp (GST_VIDEO_FORMAT_INFO_NAME (&formats[i].info), format) == 0)
+      return GST_VIDEO_FORMAT_INFO_FORMAT (&formats[i].info);
+  }
+  return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+
+/**
+ * gst_video_format_to_fourcc:
+ * @format: a #GstVideoFormat video format
+ *
+ * Converts a #GstVideoFormat value into the corresponding FOURCC.  Only
+ * a few YUV formats have corresponding FOURCC values.  If @format has
+ * no corresponding FOURCC value, 0 is returned.
+ *
+ * Since: 0.10.16
+ *
+ * Returns: the FOURCC corresponding to @format
+ */
+guint32
+gst_video_format_to_fourcc (GstVideoFormat format)
+{
+  g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, 0);
+
+  if (format >= G_N_ELEMENTS (formats))
+    return 0;
+
+  return formats[format].fourcc;
+}
+
+const gchar *
+gst_video_format_to_string (GstVideoFormat format)
+{
+  g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
+
+  if (format >= G_N_ELEMENTS (formats))
+    return NULL;
+
+  return GST_VIDEO_FORMAT_INFO_NAME (&formats[format].info);
+}
+
+/**
+ * gst_video_format_get_info:
+ * @format: a #GstVideoFormat
+ *
+ * Get the #GstVideoFormatInfo for @format
+ *
+ * Returns: The #GstVideoFormatInfo for @format.
+ */
+const GstVideoFormatInfo *
+gst_video_format_get_info (GstVideoFormat format)
+{
+  g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
+  g_return_val_if_fail (format < G_N_ELEMENTS (formats), NULL);
+
+  return &formats[format].info;
+}
+
+/**
+ * gst_video_info_init:
+ * @info: a #GstVideoInfo
+ *
+ * Initialize @info with default values.
+ */
+void
+gst_video_info_init (GstVideoInfo * info)
+{
+  g_return_if_fail (info != NULL);
+
+  memset (info, 0, sizeof (GstVideoInfo));
+  info->views = 1;
+  /* arrange for sensible defaults, e.g. if turned into caps */
+  info->fps_n = 0;
+  info->fps_d = 1;
+  info->par_n = 1;
+  info->par_d = 1;
+}
+
+/**
+ * gst_video_info_set_format:
+ * @info: a #GstVideoInfo
+ * @format: the format
+ * @width: a width
+ * @height: a height
+ *
+ * Set the default info for a video frame of @format and @width and @height.
+ */
+void
+gst_video_info_set_format (GstVideoInfo * info, GstVideoFormat format,
+    guint width, guint height)
+{
+  const GstVideoFormatInfo *finfo;
+
+  g_return_if_fail (info != NULL);
+  g_return_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN);
+
+  finfo = &formats[format].info;
+
+  info->flags = 0;
+  info->finfo = finfo;
+  info->width = width;
+  info->height = height;
+
+  fill_planes (info);
+}
+
+typedef struct
+{
+  const gchar *name;
+  GstVideoChromaSite site;
+} ChromaSiteInfo;
+
+static const ChromaSiteInfo chromasite[] = {
+  {"jpeg", GST_VIDEO_CHROMA_SITE_JPEG},
+  {"mpeg2", GST_VIDEO_CHROMA_SITE_MPEG2},
+  {"dv", GST_VIDEO_CHROMA_SITE_DV}
+};
+
+static GstVideoChromaSite
+gst_video_chroma_from_string (const gchar * s)
+{
+  gint i;
+  for (i = 0; i < G_N_ELEMENTS (chromasite); i++) {
+    if (g_str_equal (chromasite[i].name, s))
+      return chromasite[i].site;
+  }
+  return GST_VIDEO_CHROMA_SITE_UNKNOWN;
+}
+
+static const gchar *
+gst_video_chroma_to_string (GstVideoChromaSite site)
+{
+  gint i;
+  for (i = 0; i < G_N_ELEMENTS (chromasite); i++) {
+    if (chromasite[i].site == site)
+      return chromasite[i].name;
+  }
+  return NULL;
+}
+
+typedef struct
+{
+  const gchar *name;
+  GstVideoColorimetry color;
+} ColorimetryInfo;
+
+#define MAKE_COLORIMETRY(n,r,m,t,p) { GST_VIDEO_COLORIMETRY_ ##n, \
+  { GST_VIDEO_COLOR_RANGE ##r, GST_VIDEO_COLOR_MATRIX_ ##m, \
+  GST_VIDEO_TRANSFER_ ##t, GST_VIDEO_COLOR_PRIMARIES_ ##p } }
+
+static const ColorimetryInfo colorimetry[] = {
+  MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, BT470M),
+  MAKE_COLORIMETRY (BT709, _16_235, BT709, BT709, BT709),
+  MAKE_COLORIMETRY (SMPTE240M, _16_235, SMPTE240M, SMPTE240M, SMPTE240M),
+};
+
+static const ColorimetryInfo *
+gst_video_get_colorimetry (const gchar * s)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (colorimetry); i++) {
+    if (g_str_equal (colorimetry[i].name, s))
+      return &colorimetry[i];
+  }
+  return NULL;
+}
+
+#define IS_EQUAL(ci,i) (((ci)->color.range == (i)->range) && \
+                        ((ci)->color.matrix == (i)->matrix) && \
+                        ((ci)->color.transfer == (i)->transfer) && \
+                        ((ci)->color.primaries == (i)->primaries))
+
+
+/**
+ * gst_video_colorimetry_from_string
+ * @cinfo: a #GstVideoColorimetry
+ * @color: a colorimetry string
+ *
+ * Parse the colorimetry string and update @cinfo with the parsed
+ * values.
+ *
+ * Returns: #TRUE if @color points to valid colorimetry info.
+ */
+gboolean
+gst_video_colorimetry_from_string (GstVideoColorimetry * cinfo,
+    const gchar * color)
+{
+  const ColorimetryInfo *ci;
+
+  if ((ci = gst_video_get_colorimetry (color))) {
+    *cinfo = ci->color;
+  } else {
+    /* FIXME, split and parse */
+    cinfo->range = GST_VIDEO_COLOR_RANGE_16_235;
+    cinfo->matrix = GST_VIDEO_COLOR_MATRIX_BT601;
+    cinfo->transfer = GST_VIDEO_TRANSFER_BT709;
+    cinfo->primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
+  }
+  return TRUE;
+}
+
+static void
+gst_video_caps_set_colorimetry (GstCaps * caps, GstVideoColorimetry * cinfo)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (colorimetry); i++) {
+    if (IS_EQUAL (&colorimetry[i], cinfo)) {
+      gst_caps_set_simple (caps, "colorimetry", G_TYPE_STRING,
+          colorimetry[i].name, NULL);
+      return;
+    }
+  }
+  /* FIXME, construct colorimetry */
+}
+
+/**
+ * gst_video_colorimetry_matches:
+ * @info: a #GstVideoInfo
+ * @color: a colorimetry string
+ *
+ * Check if the colorimetry information in @info matches that of the
+ * string @color.
+ *
+ * Returns: #TRUE if @color conveys the same colorimetry info as the color
+ * information in @info.
+ */
+gboolean
+gst_video_colorimetry_matches (GstVideoColorimetry * cinfo, const gchar * color)
+{
+  const ColorimetryInfo *ci;
+
+  if ((ci = gst_video_get_colorimetry (color)))
+    return IS_EQUAL (ci, cinfo);
+
+  return FALSE;
+}
+
+/**
+ * gst_video_info_from_caps:
+ * @info: a #GstVideoInfo
+ * @caps: a #GstCaps
+ *
+ * Parse @caps and update @info.
+ *
+ * Returns: TRUE if @caps could be parsed
+ */
+gboolean
+gst_video_info_from_caps (GstVideoInfo * info, const GstCaps * caps)
+{
+  GstStructure *structure;
+  const gchar *s;
+  GstVideoFormat format;
+  gint width, height, views;
+  gint fps_n, fps_d;
+  gboolean interlaced;
+  gint par_n, par_d;
+
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE);
+
+  GST_DEBUG ("parsing caps %" GST_PTR_FORMAT, caps);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (!gst_structure_has_name (structure, "video/x-raw"))
+    goto wrong_name;
+
+  if (!(s = gst_structure_get_string (structure, "format")))
+    goto no_format;
+
+  format = gst_video_format_from_string (s);
+  if (format == GST_VIDEO_FORMAT_UNKNOWN)
+    goto unknown_format;
+
+  if (!gst_structure_get_int (structure, "width", &width))
+    goto no_width;
+  if (!gst_structure_get_int (structure, "height", &height))
+    goto no_height;
+
+  gst_video_info_set_format (info, format, width, height);
+
+  if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
+    info->fps_n = fps_n;
+    info->fps_d = fps_d;
+  } else {
+    info->fps_n = 0;
+    info->fps_d = 1;
+  }
+
+  if (!gst_structure_get_boolean (structure, "interlaced", &interlaced))
+    interlaced = FALSE;
+  if (interlaced)
+    info->flags |= GST_VIDEO_FLAG_INTERLACED;
+  else
+    info->flags &= ~GST_VIDEO_FLAG_INTERLACED;
+
+  if (gst_structure_get_int (structure, "views", &views))
+    info->views = views;
+  else
+    info->views = 1;
+
+  if ((s = gst_structure_get_string (structure, "chroma-site")))
+    info->chroma_site = gst_video_chroma_from_string (s);
+
+  if ((s = gst_structure_get_string (structure, "colorimetry")))
+    gst_video_colorimetry_from_string (&info->colorimetry, s);
+
+  if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
+          &par_n, &par_d)) {
+    info->par_n = par_n;
+    info->par_d = par_d;
+  } else {
+    info->par_n = 1;
+    info->par_d = 1;
+  }
+  return TRUE;
+
+  /* ERROR */
+wrong_name:
+  {
+    GST_ERROR ("wrong name, expected video/x-raw");
+    return FALSE;
+  }
+no_format:
+  {
+    GST_ERROR ("no format given");
+    return FALSE;
+  }
+unknown_format:
+  {
+    GST_ERROR ("unknown format given");
+    return FALSE;
+  }
+no_width:
+  {
+    GST_ERROR ("no width property given");
+    return FALSE;
+  }
+no_height:
+  {
+    GST_ERROR ("no height property given");
+    return FALSE;
+  }
+}
+
+/**
+ * gst_video_info_to_caps:
+ * @info: a #GstVideoInfo
+ *
+ * Convert the values of @info into a #GstCaps.
+ *
+ * Returns: a new #GstCaps containing the info of @info.
+ */
+GstCaps *
+gst_video_info_to_caps (GstVideoInfo * info)
+{
+  GstCaps *caps;
+  const gchar *format;
+
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (info->finfo != NULL, NULL);
+  g_return_val_if_fail (info->finfo->format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
+
+  format = gst_video_format_to_string (info->finfo->format);
+  g_return_val_if_fail (format != NULL, NULL);
+
+  caps = gst_caps_new_simple ("video/x-raw",
+      "format", G_TYPE_STRING, format,
+      "width", G_TYPE_INT, info->width,
+      "height", G_TYPE_INT, info->height,
+      "framerate", GST_TYPE_FRACTION, info->fps_n, info->fps_d,
+      "pixel-aspect-ratio", GST_TYPE_FRACTION, info->par_n, info->par_d, NULL);
+
+  if (info->flags & GST_VIDEO_FLAG_INTERLACED)
+    gst_caps_set_simple (caps, "interlaced", G_TYPE_BOOLEAN, TRUE, NULL);
+
+  if (info->chroma_site != GST_VIDEO_CHROMA_SITE_UNKNOWN)
+    gst_caps_set_simple (caps, "chroma-site", G_TYPE_STRING,
+        gst_video_chroma_to_string (info->chroma_site), NULL);
+
+  gst_video_caps_set_colorimetry (caps, &info->colorimetry);
+
+  if (info->views > 1)
+    gst_caps_set_simple (caps, "views", G_TYPE_INT, info->views, NULL);
+
+  return caps;
+}
+
+/**
+ * gst_video_frame_map_id:
+ * @frame: pointer to #GstVideoFrame
+ * @info: a #GstVideoInfo
+ * @buffer: the buffer to map
+ * @id: the frame id to map
+ * @flags: #GstMapFlags
+ *
+ * Use @info and @buffer to fill in the values of @frame with the video frame
+ * information of frame @id.
+ *
+ * When @id is -1, the default frame is mapped. When @id != -1, this function
+ * will return %FALSE when there is no GstMetaVideo with that id.
+ *
+ * All video planes of @buffer will be mapped and the pointers will be set in
+ * @frame->data.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info,
+    GstBuffer * buffer, gint id, GstMapFlags flags)
+{
+  GstMetaVideo *meta;
+  guint8 *data;
+  gsize size;
+  gint i;
+
+  g_return_val_if_fail (frame != NULL, FALSE);
+  g_return_val_if_fail (info != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+
+  if (id == -1)
+    meta = gst_buffer_get_meta_video (buffer);
+  else
+    meta = gst_buffer_get_meta_video_id (buffer, id);
+
+  frame->buffer = buffer;
+  frame->meta = meta;
+
+  if (meta) {
+    frame->info.flags = meta->flags;
+    frame->info.finfo = &formats[meta->format].info;
+    frame->info.width = meta->width;
+    frame->info.height = meta->height;
+    frame->id = meta->id;
+
+    for (i = 0; i < info->finfo->n_planes; i++) {
+      frame->data[i] =
+          gst_meta_video_map (meta, i, &frame->info.stride[i], flags);
+    }
+  } else {
+    /* no metadata, we really need to have the metadata when the id is
+     * specified. */
+    if (id != -1)
+      goto no_metadata;
+
+    /* copy the info */
+    frame->info = *info;
+    frame->id = id;
+
+    data = gst_buffer_map (buffer, &size, NULL, flags);
+
+    /* do some sanity checks */
+    if (size < info->size)
+      goto invalid_size;
+
+    /* set up pointers */
+    for (i = 0; i < info->finfo->n_planes; i++) {
+      frame->data[i] = data + info->offset[i];
+    }
+  }
+  return TRUE;
+
+  /* ERRORS */
+no_metadata:
+  {
+    GST_ERROR ("no GstMetaVideo for id", id);
+    return FALSE;
+  }
+invalid_size:
+  {
+    GST_ERROR ("invalid buffer size %" G_GSIZE_FORMAT " < %" G_GSIZE_FORMAT,
+        size, info->size);
+    gst_buffer_unmap (buffer, data, size);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_video_frame_map:
+ * @frame: pointer to #GstVideoFrame
+ * @info: a #GstVideoInfo
+ * @buffer: the buffer to map
+ * @flags: #GstMapFlags
+ *
+ * Use @info and @buffer to fill in the values of @frame.
+ *
+ * All video planes of @buffer will be mapped and the pointers will be set in
+ * @frame->data.
+ *
+ * Returns: %TRUE on success.
+ */
+gboolean
+gst_video_frame_map (GstVideoFrame * frame, GstVideoInfo * info,
+    GstBuffer * buffer, GstMapFlags flags)
+{
+  return gst_video_frame_map_id (frame, info, buffer, -1, flags);
+}
+
+/**
+ * gst_video_frame_unmap:
+ * @frame: a #GstVideoFrame
+ *
+ * Unmap the memory previously mapped with gst_video_frame_map.
+ */
+void
+gst_video_frame_unmap (GstVideoFrame * frame)
+{
+  GstBuffer *buffer;
+  GstMetaVideo *meta;
+  gint i;
+
+  g_return_if_fail (frame != NULL);
+
+  buffer = frame->buffer;
+  meta = frame->meta;
+
+  if (meta) {
+    for (i = 0; i < frame->info.finfo->n_planes; i++) {
+      gst_meta_video_unmap (meta, i, frame->data[i]);
+    }
+  } else {
+    guint8 *data;
+
+    data = frame->data[0];
+    data -= frame->info.offset[0];
+    gst_buffer_unmap (buffer, data, -1);
+  }
+}
+
+/**
+ * gst_video_frame_copy:
+ * @dest: a #GstVideoFrame
+ * @src: a #GstVideoFrame
+ *
+ * Copy the contents from @src to @dest.
+ *
+ * Returns: TRUE if the contents could be copied.
+ */
+gboolean
+gst_video_frame_copy (GstVideoFrame * dest, const GstVideoFrame * src)
+{
+  guint i, n_planes;
+  const GstVideoInfo *sinfo;
+  GstVideoInfo *dinfo;
+
+  sinfo = &src->info;
+  dinfo = &dest->info;
+
+  g_return_val_if_fail (dinfo->finfo->format == sinfo->finfo->format, FALSE);
+  g_return_val_if_fail (dinfo->width == sinfo->width
+      && dinfo->height == sinfo->height, FALSE);
+
+  n_planes = dinfo->finfo->n_planes;
+
+  for (i = 0; i < n_planes; i++) {
+    guint w, h, j;
+    guint8 *sp, *dp;
+    gint ss, ds;
+
+    sp = src->data[i];
+    dp = dest->data[i];
+
+    ss = sinfo->stride[i];
+    ds = dinfo->stride[i];
+
+    w = MIN (ABS (ss), ABS (ds));
+    h = GST_VIDEO_FRAME_COMP_HEIGHT (dest, i);
+
+    GST_DEBUG ("w %d h %d", w, h);
+
+    for (j = 0; j < h; j++) {
+      memcpy (dp, sp, w);
+      dp += ds;
+      sp += ss;
+    }
+  }
+  return TRUE;
+}
+
+static int
+fill_planes (GstVideoInfo * info)
+{
+  gint width, height;
+
+  width = info->width;
+  height = info->height;
+
+  switch (info->finfo->format) {
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+    case GST_VIDEO_FORMAT_UYVY:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_AYUV:
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_r210:
+      info->stride[0] = width * 4;
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+    case GST_VIDEO_FORMAT_RGB15:
+    case GST_VIDEO_FORMAT_BGR15:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_v308:
+      info->stride[0] = GST_ROUND_UP_4 (width * 3);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_v210:
+      info->stride[0] = ((width + 47) / 48) * 128;
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_v216:
+      info->stride[0] = GST_ROUND_UP_8 (width * 4);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y800:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y16:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_UYVP:
+      info->stride[0] = GST_ROUND_UP_4 ((width * 2 * 5 + 3) / 4);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_RGB8_PALETTED:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_IYU1:
+      info->stride[0] = GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) +
+          GST_ROUND_UP_4 (width) / 2);
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_ARGB64:
+    case GST_VIDEO_FORMAT_AYUV64:
+      info->stride[0] = width * 8;
+      info->offset[0] = 0;
+      info->size = info->stride[0] * height;
+      break;
+    case GST_VIDEO_FORMAT_I420:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2);
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+      info->offset[2] = info->offset[1] +
+          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
+      info->size = info->offset[2] +
+          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      break;
+    case GST_VIDEO_FORMAT_YV12:        /* same as I420, but plane 1+2 swapped */
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2);
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[2] = info->stride[0] * GST_ROUND_UP_2 (height);
+      info->offset[1] = info->offset[2] +
+          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
+      info->size = info->offset[1] +
+          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      break;
+    case GST_VIDEO_FORMAT_Y41B:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_16 (width) / 4;
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * height;
+      info->offset[2] = info->offset[1] + info->stride[1] * height;
+      /* simplification of ROUNDUP4(w)*h + 2*((ROUNDUP16(w)/4)*h */
+      info->size = (info->stride[0] + (GST_ROUND_UP_16 (width) / 2)) * height;
+      break;
+    case GST_VIDEO_FORMAT_Y42B:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_8 (width) / 2;
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * height;
+      info->offset[2] = info->offset[1] + info->stride[1] * height;
+      /* simplification of ROUNDUP4(w)*h + 2*(ROUNDUP8(w)/2)*h */
+      info->size = (info->stride[0] + GST_ROUND_UP_8 (width)) * height;
+      break;
+    case GST_VIDEO_FORMAT_Y444:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = info->stride[0];
+      info->stride[2] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * height;
+      info->offset[2] = info->offset[1] * 2;
+      info->size = info->stride[0] * height * 3;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+      info->size = info->stride[0] * GST_ROUND_UP_2 (height) * 3 / 2;
+      break;
+    case GST_VIDEO_FORMAT_A420:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2);
+      info->stride[2] = info->stride[1];
+      info->stride[3] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+      info->offset[2] = info->offset[1] +
+          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
+      info->offset[3] = info->offset[2] +
+          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      info->size = info->offset[3] + info->stride[0];
+      break;
+    case GST_VIDEO_FORMAT_YUV9:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4);
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * height;
+      info->offset[2] = info->offset[1] +
+          info->stride[1] * (GST_ROUND_UP_4 (height) / 4);
+      info->size = info->offset[2] +
+          info->stride[2] * (GST_ROUND_UP_4 (height) / 4);
+      break;
+    case GST_VIDEO_FORMAT_YVU9:
+      info->stride[0] = GST_ROUND_UP_4 (width);
+      info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4);
+      info->stride[2] = info->stride[1];
+      info->offset[0] = 0;
+      info->offset[2] = info->stride[0] * height;
+      info->offset[1] = info->offset[2] +
+          info->stride[1] * (GST_ROUND_UP_4 (height) / 4);
+      info->size = info->offset[2] +
+          info->stride[2] * (GST_ROUND_UP_4 (height) / 4);
+      break;
+    case GST_VIDEO_FORMAT_UNKNOWN:
+      GST_ERROR ("invalid format");
+      g_warning ("invalid format");
+      break;
+  }
+  return 0;
+}
+
+/**
+ * gst_video_format_convert:
+ * @info: a #GstVideoInfo
+ * @src_format: #GstFormat of the @src_value
+ * @src_value: value to convert
+ * @dest_format: #GstFormat of the @dest_value
+ * @dest_value: pointer to destination value
+ *
+ * Converts among various #GstFormat types.  This function handles
+ * GST_FORMAT_BYTES, GST_FORMAT_TIME, and GST_FORMAT_DEFAULT.  For
+ * raw video, GST_FORMAT_DEFAULT corresponds to video frames.  This
+ * function can be used to handle pad queries of the type GST_QUERY_CONVERT.
+ *
+ * Since: 0.10.16
+ *
+ * Returns: TRUE if the conversion was successful.
+ */
+gboolean
+gst_video_info_convert (GstVideoInfo * info,
+    GstFormat src_format, gint64 src_value,
+    GstFormat dest_format, gint64 * dest_value)
+{
+  gboolean ret = FALSE;
+  int size, fps_n, fps_d;
+
+  g_return_val_if_fail (info != NULL, 0);
+  g_return_val_if_fail (info->finfo != NULL, 0);
+  g_return_val_if_fail (info->finfo->format != GST_VIDEO_FORMAT_UNKNOWN, 0);
+  g_return_val_if_fail (info->size > 0, 0);
+
+  size = info->size;
+  fps_n = info->fps_n;
+  fps_d = info->fps_d;
+
+  GST_DEBUG ("converting value %" G_GINT64_FORMAT " from %s to %s",
+      src_value, gst_format_get_name (src_format),
+      gst_format_get_name (dest_format));
+
+  if (src_format == dest_format) {
+    *dest_value = src_value;
+    ret = TRUE;
+    goto done;
+  }
+
+  if (src_value == -1) {
+    *dest_value = -1;
+    ret = TRUE;
+    goto done;
+  }
+
+  /* bytes to frames */
+  if (src_format == GST_FORMAT_BYTES && dest_format == GST_FORMAT_DEFAULT) {
+    if (size != 0) {
+      *dest_value = gst_util_uint64_scale_int (src_value, 1, size);
+    } else {
+      GST_ERROR ("blocksize is 0");
+      *dest_value = 0;
+    }
+    ret = TRUE;
+    goto done;
+  }
+
+  /* frames to bytes */
+  if (src_format == GST_FORMAT_DEFAULT && dest_format == GST_FORMAT_BYTES) {
+    *dest_value = gst_util_uint64_scale_int (src_value, size, 1);
+    ret = TRUE;
+    goto done;
+  }
+
+  /* time to frames */
+  if (src_format == GST_FORMAT_TIME && dest_format == GST_FORMAT_DEFAULT) {
+    if (fps_d != 0) {
+      *dest_value = gst_util_uint64_scale (src_value,
+          fps_n, GST_SECOND * fps_d);
+    } else {
+      GST_ERROR ("framerate denominator is 0");
+      *dest_value = 0;
+    }
+    ret = TRUE;
+    goto done;
+  }
+
+  /* frames to time */
+  if (src_format == GST_FORMAT_DEFAULT && dest_format == GST_FORMAT_TIME) {
+    if (fps_n != 0) {
+      *dest_value = gst_util_uint64_scale (src_value,
+          GST_SECOND * fps_d, fps_n);
+    } else {
+      GST_ERROR ("framerate numerator is 0");
+      *dest_value = 0;
+    }
+    ret = TRUE;
+    goto done;
+  }
+
+  /* time to bytes */
+  if (src_format == GST_FORMAT_TIME && dest_format == GST_FORMAT_BYTES) {
+    if (fps_d != 0) {
+      *dest_value = gst_util_uint64_scale (src_value,
+          fps_n * size, GST_SECOND * fps_d);
+    } else {
+      GST_ERROR ("framerate denominator is 0");
+      *dest_value = 0;
+    }
+    ret = TRUE;
+    goto done;
+  }
+
+  /* bytes to time */
+  if (src_format == GST_FORMAT_BYTES && dest_format == GST_FORMAT_TIME) {
+    if (fps_n != 0 && size != 0) {
+      *dest_value = gst_util_uint64_scale (src_value,
+          GST_SECOND * fps_d, fps_n * size);
+    } else {
+      GST_ERROR ("framerate denominator and/or blocksize is 0");
+      *dest_value = 0;
+    }
+    ret = TRUE;
+  }
+
+done:
+
+  GST_DEBUG ("ret=%d result %" G_GINT64_FORMAT, ret, *dest_value);
+
+  return ret;
+}
+
+#define GST_VIDEO_EVENT_STILL_STATE_NAME "GstEventStillFrame"
+
+/**
+ * gst_video_event_new_still_frame:
+ * @in_still: boolean value for the still-frame state of the event.
+ *
+ * Creates a new Still Frame event. If @in_still is %TRUE, then the event
+ * represents the start of a still frame sequence. If it is %FALSE, then
+ * the event ends a still frame sequence.
+ *
+ * To parse an event created by gst_video_event_new_still_frame() use
+ * gst_video_event_parse_still_frame().
+ *
+ * Returns: The new GstEvent
+ * Since: 0.10.26
+ */
+GstEvent *
+gst_video_event_new_still_frame (gboolean in_still)
+{
+  GstEvent *still_event;
+  GstStructure *s;
+
+  s = gst_structure_new (GST_VIDEO_EVENT_STILL_STATE_NAME,
+      "still-state", G_TYPE_BOOLEAN, in_still, NULL);
+  still_event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s);
+
+  return still_event;
+}
+
+/**
+ * gst_video_event_parse_still_frame:
+ * @event: A #GstEvent to parse
+ * @in_still: A boolean to receive the still-frame status from the event, or NULL
+ *
+ * Parse a #GstEvent, identify if it is a Still Frame event, and
+ * return the still-frame state from the event if it is.
+ * If the event represents the start of a still frame, the in_still
+ * variable will be set to TRUE, otherwise FALSE. It is OK to pass NULL for the
+ * in_still variable order to just check whether the event is a valid still-frame
+ * event.
+ *
+ * Create a still frame event using gst_video_event_new_still_frame()
+ *
+ * Returns: %TRUE if the event is a valid still-frame event. %FALSE if not
+ * Since: 0.10.26
+ */
+gboolean
+gst_video_event_parse_still_frame (GstEvent * event, gboolean * in_still)
+{
+  const GstStructure *s;
+  gboolean ev_still_state;
+
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  if (GST_EVENT_TYPE (event) != GST_EVENT_CUSTOM_DOWNSTREAM)
+    return FALSE;               /* Not a still frame event */
+
+  s = gst_event_get_structure (event);
+  if (s == NULL
+      || !gst_structure_has_name (s, GST_VIDEO_EVENT_STILL_STATE_NAME))
+    return FALSE;               /* Not a still frame event */
+  if (!gst_structure_get_boolean (s, "still-state", &ev_still_state))
+    return FALSE;               /* Not a still frame event */
+  if (in_still)
+    *in_still = ev_still_state;
+  return TRUE;
+}
+
+/**
+ * gst_video_parse_caps_palette:
+ * @caps: #GstCaps to parse
+ *
+ * Returns the palette data from the caps as a #GstBuffer. For
+ * #GST_VIDEO_FORMAT_RGB8_PALETTED this is containing 256 #guint32
+ * values, each containing ARGB colors in native endianness.
+ *
+ * Returns: a #GstBuffer containing the palette data. Unref after usage.
+ * Since: 0.10.32
+ */
+GstBuffer *
+gst_video_parse_caps_palette (GstCaps * caps)
+{
+  GstStructure *s;
+  const GValue *p_v;
+  GstBuffer *p;
+
+  if (!gst_caps_is_fixed (caps))
+    return NULL;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  p_v = gst_structure_get_value (s, "palette_data");
+  if (!p_v || !GST_VALUE_HOLDS_BUFFER (p_v))
+    return NULL;
+
+  p = g_value_dup_boxed (p_v);
+
+  return p;
+}
diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
new file mode 100644
index 0000000..56716f4
--- /dev/null
+++ b/gst-libs/gst/video/video.h
@@ -0,0 +1,711 @@
+/* GStreamer
+ * Copyright (C) <2011> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_H__
+#define __GST_VIDEO_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#include <gst/video/video-enumtypes.h>
+
+/**
+ * GstVideoFormat:
+ * @GST_VIDEO_FORMAT_UNKNOWN: Unknown or unset video format id
+ * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV
+ * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped)
+ * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
+ * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
+ * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
+ * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last
+ * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last
+ * @GST_VIDEO_FORMAT_xRGB: sparse rgb packed into 32 bit, space first
+ * @GST_VIDEO_FORMAT_xBGR: sparse reverse rgb packed into 32 bit, space first
+ * @GST_VIDEO_FORMAT_RGBA: rgb with alpha channel last
+ * @GST_VIDEO_FORMAT_BGRA: reverse rgb with alpha channel last
+ * @GST_VIDEO_FORMAT_ARGB: rgb with alpha channel first
+ * @GST_VIDEO_FORMAT_ABGR: reverse rgb with alpha channel first
+ * @GST_VIDEO_FORMAT_RGB: rgb
+ * @GST_VIDEO_FORMAT_BGR: reverse rgb
+ * @GST_VIDEO_FORMAT_Y41B: planar 4:1:1 YUV (Since: 0.10.18)
+ * @GST_VIDEO_FORMAT_Y42B: planar 4:2:2 YUV (Since: 0.10.18)
+ * @GST_VIDEO_FORMAT_YVYU: packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) (Since: 0.10.23)
+ * @GST_VIDEO_FORMAT_Y444: planar 4:4:4 YUV (Since: 0.10.24)
+ * @GST_VIDEO_FORMAT_v210: packed 4:2:2 10-bit YUV, complex format (Since: 0.10.24)
+ * @GST_VIDEO_FORMAT_v216: packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order (Since: 0.10.24)
+ * @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane (Since: 0.10.26)
+ * @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane (Since: 0.10.26)
+ * @GST_VIDEO_FORMAT_GRAY8: 8-bit grayscale (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_Y800: same as GST_VIDEO_FORMAT_GRAY8 (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_Y16: same as GST_VIDEO_FORMAT_GRAY16_LE (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_RGB16: rgb 5-6-5 bits per component (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) (Since: 0.10.31)
+ * @GST_VIDEO_FORMAT_A420: planar 4:4:2:0 AYUV (Since: 0.10.31)
+ * @GST_VIDEO_FORMAT_RGB8_PALETTED: 8-bit paletted RGB (Since: 0.10.32)
+ * @GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV (Since: 0.10.32)
+ * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) (Since: 0.10.32)
+ * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) (Since: 0.10.32)
+ * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits per channel (Since: 0.10.33)
+ * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) (Since: 0.10.33)
+ * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel (Since: 0.10.33)
+ *
+ * Enum value describing the most common video formats.
+ */
+typedef enum {
+  GST_VIDEO_FORMAT_UNKNOWN,
+  GST_VIDEO_FORMAT_I420,
+  GST_VIDEO_FORMAT_YV12,
+  GST_VIDEO_FORMAT_YUY2,
+  GST_VIDEO_FORMAT_UYVY,
+  GST_VIDEO_FORMAT_AYUV,
+  GST_VIDEO_FORMAT_RGBx,
+  GST_VIDEO_FORMAT_BGRx,
+  GST_VIDEO_FORMAT_xRGB,
+  GST_VIDEO_FORMAT_xBGR,
+  GST_VIDEO_FORMAT_RGBA,
+  GST_VIDEO_FORMAT_BGRA,
+  GST_VIDEO_FORMAT_ARGB,
+  GST_VIDEO_FORMAT_ABGR,
+  GST_VIDEO_FORMAT_RGB,
+  GST_VIDEO_FORMAT_BGR,
+  GST_VIDEO_FORMAT_Y41B,
+  GST_VIDEO_FORMAT_Y42B,
+  GST_VIDEO_FORMAT_YVYU,
+  GST_VIDEO_FORMAT_Y444,
+  GST_VIDEO_FORMAT_v210,
+  GST_VIDEO_FORMAT_v216,
+  GST_VIDEO_FORMAT_NV12,
+  GST_VIDEO_FORMAT_NV21,
+  GST_VIDEO_FORMAT_GRAY8,
+  GST_VIDEO_FORMAT_GRAY16_BE,
+  GST_VIDEO_FORMAT_GRAY16_LE,
+  GST_VIDEO_FORMAT_v308,
+  GST_VIDEO_FORMAT_Y800,
+  GST_VIDEO_FORMAT_Y16,
+  GST_VIDEO_FORMAT_RGB16,
+  GST_VIDEO_FORMAT_BGR16,
+  GST_VIDEO_FORMAT_RGB15,
+  GST_VIDEO_FORMAT_BGR15,
+  GST_VIDEO_FORMAT_UYVP,
+  GST_VIDEO_FORMAT_A420,
+  GST_VIDEO_FORMAT_RGB8_PALETTED,
+  GST_VIDEO_FORMAT_YUV9,
+  GST_VIDEO_FORMAT_YVU9,
+  GST_VIDEO_FORMAT_IYU1,
+  GST_VIDEO_FORMAT_ARGB64,
+  GST_VIDEO_FORMAT_AYUV64,
+  GST_VIDEO_FORMAT_r210
+} GstVideoFormat;
+
+#define GST_VIDEO_MAX_PLANES 4
+#define GST_VIDEO_MAX_COMPONENTS 4
+
+typedef struct _GstVideoFormatInfo GstVideoFormatInfo;
+
+/**
+ * GstVideoFormatFlags:
+ * @GST_VIDEO_FORMAT_FLAG_YUV: The video format is YUV, components are numbered
+ *   0=Y, 1=U, 2=V.
+ * @GST_VIDEO_FORMAT_FLAG_RGB: The video format is RGB, components are numbered
+ *   0=R, 1=G, 2=B.
+ * @GST_VIDEO_FORMAT_FLAG_GRAY: The video is gray, there is one gray component
+ *   with index 0.
+ * @GST_VIDEO_FORMAT_FLAG_ALPHA: The video format has an alpha components with
+ *   the number 3.
+ * @GST_VIDEO_FORMAT_FLAG_LE: The video format has data stored in little
+ *   endianness.
+ * @GST_VIDEO_FORMAT_FLAG_PALETTE: The video format has a palette.
+ * @GST_VIDEO_FORMAT_FLAG_COMPLEX: The video format has a complex layout that
+ *   can't be described with the usual information in the #GstVideoFormatInfo.
+ *
+ * The different video flags that a format info can have.
+ */
+typedef enum
+{
+  GST_VIDEO_FORMAT_FLAG_YUV      = (1 << 0),
+  GST_VIDEO_FORMAT_FLAG_RGB      = (1 << 1),
+  GST_VIDEO_FORMAT_FLAG_GRAY     = (1 << 2),
+  GST_VIDEO_FORMAT_FLAG_ALPHA    = (1 << 3),
+  GST_VIDEO_FORMAT_FLAG_LE       = (1 << 4),
+  GST_VIDEO_FORMAT_FLAG_PALETTE  = (1 << 5),
+  GST_VIDEO_FORMAT_FLAG_COMPLEX  = (1 << 6)
+} GstVideoFormatFlags;
+
+#define GST_VIDEO_COMP_Y  0
+#define GST_VIDEO_COMP_U  1
+#define GST_VIDEO_COMP_V  2
+
+#define GST_VIDEO_COMP_R  0
+#define GST_VIDEO_COMP_G  1
+#define GST_VIDEO_COMP_B  2
+
+#define GST_VIDEO_COMP_A  3
+
+/**
+ * GstVideoFormatUnpack:
+ * @info: a #GstVideoFormatInfo
+ * @dest: a destination array
+ * @data: pointers to the data planes
+ * @stride: strides of the planes
+ * @x: the x position in the image to start from
+ * @y: the y position in the image to start from
+ * @width: the amount of pixels to unpack.
+ *
+ * Unpacks @width pixels from the given planes and strides containing data of
+ * format @info. The pixels will be unpacked into @dest which each component
+ * interleaved. @dest should at least be big enough to hold @width *
+ * n_components * size(unpack_format) bytes.
+ */
+typedef void (*GstVideoFormatUnpack)         (GstVideoFormatInfo *info, gpointer dest,
+                                              const gpointer data[GST_VIDEO_MAX_PLANES],
+                                              const gint stride[GST_VIDEO_MAX_PLANES],
+                                              gint x, gint y, gint width);
+/**
+ * GstVideoFormatPack:
+ * @info: a #GstVideoFormatInfo
+ * @src: a source array
+ * @data: pointers to the destination data planes
+ * @stride: strides of the destination planes
+ * @x: the x position in the image to pack to
+ * @y: the y position in the image to pack to
+ * @width: the amount of pixels to pack.
+ *
+ * Packs @width pixels from @src to the given planes and strides in the
+ * format @info. The pixels from source have each component interleaved
+ * and will be packed into the planes in @data.
+ */
+typedef void (*GstVideoFormatPack)           (GstVideoFormatInfo *info, const gpointer src,
+                                              gpointer data[GST_VIDEO_MAX_PLANES],
+                                              const gint stride[GST_VIDEO_MAX_PLANES],
+                                              gint x, gint y, gint width);
+
+/**
+ * GstVideoFormatInfo:
+ * @format: #GstVideoFormat
+ * @name: string representation of the format
+ * @description: use readable description of the format
+ * @flags: #GstVideoFormatFlags
+ * @bits: The number of bits used to pack data items. This can be less than 8
+ *    when multiple pixels are stored in a byte. for values > 8 multiple bytes
+ *    should be read according to the endianness flag before applying the shift
+ *    and mask.
+ * @n_components: the number of components in the video format.
+ * @shift: the number of bits to shift away to get the component data
+ * @depth: the depth in bits for each component
+ * @pixel_stride: the pixel stride of each component. This is the amount of
+ *    bytes to the pixel immediately to the right. When bits < 8, the stride is
+ *    expressed in bits.
+ * @n_planes: the number of planes for this format. The number of planes can be
+ *    less than the amount of components when multiple components are packed into
+ *    one plane.
+ * @plane: the plane number where a component can be found
+ * @offset: the offset in the plane where the first pixel of the components
+ *    can be found. If bits < 8 the amount is specified in bits.
+ * @w_sub: subsampling factor of the width for the component. Use
+ *     GST_VIDEO_SUB_SCALE to scale a width.
+ * @h_sub: subsampling factor of the height for the component. Use
+ *     GST_VIDEO_SUB_SCALE to scale a height.
+ * @unpack_format: the format of the unpacked pixels.
+ * @unpack_func: an unpack function for this format
+ * @pack_func: an pack function for this format
+ *
+ * Information for a video format.
+ */
+struct _GstVideoFormatInfo {
+  GstVideoFormat format;
+  const gchar *name;
+  const gchar *description;
+  GstVideoFormatFlags flags;
+  guint bits;
+  guint n_components;
+  guint shift[GST_VIDEO_MAX_COMPONENTS];
+  guint depth[GST_VIDEO_MAX_COMPONENTS];
+  gint  pixel_stride[GST_VIDEO_MAX_COMPONENTS];
+  guint n_planes;
+  guint plane[GST_VIDEO_MAX_COMPONENTS];
+  guint offset[GST_VIDEO_MAX_COMPONENTS];
+  guint w_sub[GST_VIDEO_MAX_COMPONENTS];
+  guint h_sub[GST_VIDEO_MAX_COMPONENTS];
+
+  GstVideoFormat unpack_format;
+  GstVideoFormatUnpack unpack_func;
+  GstVideoFormatPack pack_func;
+};
+
+#define GST_VIDEO_FORMAT_INFO_FORMAT(info)       ((info)->format)
+#define GST_VIDEO_FORMAT_INFO_NAME(info)         ((info)->name)
+#define GST_VIDEO_FORMAT_INFO_FLAGS(info)        ((info)->flags)
+
+#define GST_VIDEO_FORMAT_INFO_IS_YUV(info)       ((info)->flags & GST_VIDEO_FORMAT_FLAG_YUV)
+#define GST_VIDEO_FORMAT_INFO_IS_RGB(info)       ((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB)
+#define GST_VIDEO_FORMAT_INFO_IS_GRAY(info)      ((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY)
+#define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info)    ((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)
+#define GST_VIDEO_FORMAT_INFO_IS_LE(info)        ((info)->flags & GST_VIDEO_FORMAT_FLAG_LE)
+#define GST_VIDEO_FORMAT_INFO_HAS_PALETTE(info)  ((info)->flags & GST_VIDEO_FORMAT_FLAG_PALETTE)
+
+#define GST_VIDEO_FORMAT_INFO_BITS(info)         ((info)->bits)
+#define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components)
+#define GST_VIDEO_FORMAT_INFO_SHIFT(info,c)      ((info)->shift[c])
+#define GST_VIDEO_FORMAT_INFO_DEPTH(info,c)      ((info)->depth[c])
+#define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c)    ((info)->pixel_stride[c])
+#define GST_VIDEO_FORMAT_INFO_N_PLANES(info)     ((info)->n_planes)
+#define GST_VIDEO_FORMAT_INFO_PLANE(info,c)      ((info)->plane[c])
+#define GST_VIDEO_FORMAT_INFO_OFFSET(info,c)     ((info)->offset[c])
+#define GST_VIDEO_FORMAT_INFO_W_SUB(info,c)      ((info)->w_sub[c])
+#define GST_VIDEO_FORMAT_INFO_H_SUB(info,c)      ((info)->h_sub[c])
+
+#define GST_VIDEO_SUB_SCALE(scale,val)   (-((-((gint)val))>>(scale)))
+
+#define GST_VIDEO_FORMAT_INFO_SCALE_WIDTH(info,c,w)  GST_VIDEO_SUB_SCALE ((info)->w_sub[(c)],(w))
+#define GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT(info,c,h) GST_VIDEO_SUB_SCALE ((info)->h_sub[(c)],(h))
+
+#define GST_VIDEO_FORMAT_INFO_DATA(info,planes,comp) \
+  (((guint8*)(planes)[info->plane[comp]]) + info->offset[comp])
+#define GST_VIDEO_FORMAT_INFO_STRIDE(info,strides,comp) ((strides)[info->plane[comp]])
+
+/* format properties */
+GstVideoFormat gst_video_format_from_masks           (gint depth, gint bpp, gint endianness,
+                                                      gint red_mask, gint green_mask,
+                                                      gint blue_mask, gint alpha_mask) G_GNUC_CONST;
+
+GstVideoFormat gst_video_format_from_fourcc          (guint32 fourcc) G_GNUC_CONST;
+GstVideoFormat gst_video_format_from_string          (const gchar *format) G_GNUC_CONST;
+
+guint32        gst_video_format_to_fourcc            (GstVideoFormat format) G_GNUC_CONST;
+const gchar *  gst_video_format_to_string            (GstVideoFormat format) G_GNUC_CONST;
+
+const GstVideoFormatInfo *
+               gst_video_format_get_info             (GstVideoFormat format) G_GNUC_CONST;
+
+typedef struct _GstVideoInfo GstVideoInfo;
+typedef struct _GstVideoFrame GstVideoFrame;
+
+/**
+ * GstVideoFlags:
+ * @GST_META_VIDEO_FLAG_NONE: no flags
+ * @GST_META_VIDEO_FLAG_INTERLACED: The video is interlaced
+ * @GST_META_VIDEO_FLAG_TFF: The video has the top field first
+ * @GST_META_VIDEO_FLAG_RFF: The video has the repeat flag
+ * @GST_META_VIDEO_FLAG_ONEFIELD: one field
+ * @GST_META_VIDEO_FLAG_TELECINE: telecine
+ * @GST_META_VIDEO_FLAG_PROGRESSIVE: video is progressive
+ *
+ * Extra video flags
+ */
+typedef enum {
+  GST_VIDEO_FLAG_NONE        = 0,
+  GST_VIDEO_FLAG_INTERLACED  = (1 << 0),
+  GST_VIDEO_FLAG_TFF         = (1 << 1),
+  GST_VIDEO_FLAG_RFF         = (1 << 2),
+  GST_VIDEO_FLAG_ONEFIELD    = (1 << 3),
+  GST_VIDEO_FLAG_TELECINE    = (1 << 4),
+  GST_VIDEO_FLAG_PROGRESSIVE = (1 << 5)
+} GstVideoFlags;
+
+/**
+ * GstVideoChroma:
+ * @GST_VIDEO_CHROMA_SITE_UNKNOWN: unknown cositing
+ * @GST_VIDEO_CHROMA_SITE_NONE: no cositing
+ * @GST_VIDEO_CHROMA_SITE_H_COSITED: chroma is horizontally cosited
+ * @GST_VIDEO_CHROMA_SITE_V_COSITED: chroma is vertically cosited
+ * @GST_VIDEO_CHROMA_SITE_ALT_LINE: choma samples are sited on alternate lines
+ * @GST_VIDEO_CHROMA_SITE_COSITED: chroma samples cosited with luma samples
+ * @GST_VIDEO_CHROMA_SITE_JPEG: jpeg style cositing, also for mpeg1 and mjpeg
+ * @GST_VIDEO_CHROMA_SITE_MPEG2: mpeg2 style cositing
+ * @GST_VIDEO_CHROMA_SITE_DV: DV style cositing
+ *
+ * Various Chroma sitings.
+ */
+typedef enum {
+  GST_VIDEO_CHROMA_SITE_UNKNOWN   =  0,
+  GST_VIDEO_CHROMA_SITE_NONE      = (1 << 0),
+  GST_VIDEO_CHROMA_SITE_H_COSITED = (1 << 1),
+  GST_VIDEO_CHROMA_SITE_V_COSITED = (1 << 2),
+  GST_VIDEO_CHROMA_SITE_ALT_LINE  = (1 << 3),
+  /* some common chroma cositing */
+  GST_VIDEO_CHROMA_SITE_COSITED   = (GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED),
+  GST_VIDEO_CHROMA_SITE_JPEG      = (GST_VIDEO_CHROMA_SITE_NONE),
+  GST_VIDEO_CHROMA_SITE_MPEG2     = (GST_VIDEO_CHROMA_SITE_H_COSITED),
+  GST_VIDEO_CHROMA_SITE_DV        = (GST_VIDEO_CHROMA_SITE_COSITED | GST_VIDEO_CHROMA_SITE_ALT_LINE),
+} GstVideoChromaSite;
+
+/**
+ * GstVideoColorRange:
+ * @GST_VIDEO_COLOR_RANGE_UNKNOWN: unknown range
+ * @GST_VIDEO_COLOR_RANGE_0_255: [0..255] for 8 bit components
+ * @GST_VIDEO_COLOR_RANGE_16_235: [16..235] for 8 bit components. Chroma has
+ *                 [16..240] range.
+ *
+ * Possible color range values. These constants are defined for 8 bit color
+ * values and can be scaled for other bit depths.
+ */
+typedef enum {
+  GST_VIDEO_COLOR_RANGE_UNKNOWN = 0,
+  GST_VIDEO_COLOR_RANGE_0_255,
+  GST_VIDEO_COLOR_RANGE_16_235
+} GstVideoColorRange;
+
+/**
+ * GstVideoColorMatrix:
+ * @GST_VIDEO_COLOR_MATRIX_UNKNOWN: unknown matrix
+ * @GST_VIDEO_COLOR_MATRIX_RGB: identity matrix
+ * @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 transfer matrix
+ * @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 transfer matrix
+ * @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M transfer matrix
+ *
+ * The color matrix is used to convert between Y'PbPr and
+ * non-linear RGB (R'G'B')
+ */
+typedef enum {
+  GST_VIDEO_COLOR_MATRIX_UNKNOWN = 0,
+  GST_VIDEO_COLOR_MATRIX_RGB,
+  GST_VIDEO_COLOR_MATRIX_BT709,
+  GST_VIDEO_COLOR_MATRIX_BT601,
+  GST_VIDEO_COLOR_MATRIX_SMPTE240M
+} GstVideoColorMatrix;
+
+/**
+ * GstVideoTransferFunction:
+ * @GST_VIDEO_TRANSFER_UNKNOWN: unknown transfer function
+ * @GST_VIDEO_TRANSFER_GAMMA10: linear RGB, gamma 1.0 curve
+ * @GST_VIDEO_TRANSFER_GAMMA18: Gamma 1.8 curve
+ * @GST_VIDEO_TRANSFER_GAMMA20: Gamma 2.0 curve
+ * @GST_VIDEO_TRANSFER_GAMMA22: Gamma 2.2 curve
+ * @GST_VIDEO_TRANSFER_BT709: Gamma 2.2 curve with a linear segment in the lower
+ *                           range
+ * @GST_VIDEO_TRANSFER_SMPTE240M: Gamma 2.2 curve with a linear segment in the
+ *                               lower range
+ * @GST_VIDEO_TRANSFER_SRGB: Gamma 2.4 curve with a linear segment in the lower
+ *                          range
+ * @GST_VIDEO_TRANSFER_GAMMA28: Gamma 2.8 curve
+ *
+ * The video transfer function defines the formula for converting between
+ * non-linear RGB (R'G'B') and linear RGB
+ */
+typedef enum {
+  GST_VIDEO_TRANSFER_UNKNOWN = 0,
+  GST_VIDEO_TRANSFER_GAMMA10,
+  GST_VIDEO_TRANSFER_GAMMA18,
+  GST_VIDEO_TRANSFER_GAMMA20,
+  GST_VIDEO_TRANSFER_GAMMA22,
+  GST_VIDEO_TRANSFER_BT709,
+  GST_VIDEO_TRANSFER_SMPTE240M,
+  GST_VIDEO_TRANSFER_SRGB,
+  GST_VIDEO_TRANSFER_GAMMA28
+} GstVideoTransferFunction;
+
+/**
+ * GstVideoColorPrimaries:
+ * @GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: unknown color primaries
+ * @GST_VIDEO_COLOR_PRIMARIES_BT709: BT709 primaries
+ * @GST_VIDEO_COLOR_PRIMARIES_BT470M: BT470M primaries
+ * @GST_VIDEO_COLOR_PRIMARIES_BT470BG: BT470BG primaries
+ * @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries
+ * @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries
+ *
+ * The color primaries define the how to transform linear RGB values to and from
+ * the CIE XYZ colorspace.
+ */
+typedef enum {
+  GST_VIDEO_COLOR_PRIMARIES_UNKNOWN = 0,
+  GST_VIDEO_COLOR_PRIMARIES_BT709,
+  GST_VIDEO_COLOR_PRIMARIES_BT470M,
+  GST_VIDEO_COLOR_PRIMARIES_BT470BG,
+  GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
+  GST_VIDEO_COLOR_PRIMARIES_SMPTE240M
+} GstVideoColorPrimaries;
+
+/**
+ * GstVideoColorimetry:
+ * @range: the color range. This is the valid range for the samples.
+ *         It is used to convert the samples to Y'PbPr values.
+ * @matrix: the color matrix. Used to convert between Y'PbPr and
+ *          non-linear RGB (R'G'B')
+ * @transfer: the transfer function. used to convert between R'G'B' and RGB
+ * @primaries: color primaries. used to convert between R'G'B' and CIE XYZ
+ *
+ * Structure describing the color info.
+ */
+typedef struct {
+  GstVideoColorRange        range;
+  GstVideoColorMatrix       matrix;
+  GstVideoTransferFunction  transfer;
+  GstVideoColorPrimaries    primaries;
+} GstVideoColorimetry;
+
+/* predefined colorimetry */
+#define GST_VIDEO_COLORIMETRY_BT601       "bt601"
+#define GST_VIDEO_COLORIMETRY_BT709       "bt709"
+#define GST_VIDEO_COLORIMETRY_SMPTE240M   "smpte240m"
+
+gboolean     gst_video_colorimetry_matches     (GstVideoColorimetry *cinfo, const gchar *color);
+gboolean     gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color);
+gchar *      gst_video_colorimetry_to_string   (GstVideoColorimetry *cinfo);
+
+/**
+ * GstVideoInfo:
+ * @finfo: the format info of the video
+ * @flags: additional video flags
+ * @width: the width of the video
+ * @height: the height of the video
+ * @views: the number of views for multiview video
+ * @size: the default size of one frame
+ * @chroma_site: a #GstVideoChromaSite.
+ * @colorimetry: the colorimetry info
+ * @palette: a buffer with palette data
+ * @par_n: the pixel-aspect-ratio numerator
+ * @par_d: the pixel-aspect-ratio demnominator
+ * @fps_n: the framerate numerator
+ * @fps_d: the framerate demnominator
+ * @offset: offsets of the planes
+ * @stride: strides of the planes
+ *
+ * Information describing image properties. This information can be filled
+ * in from GstCaps with gst_video_info_from_caps(). The information is also used
+ * to store the specific video info when mapping a video frame with
+ * gst_video_frame_map().
+ *
+ * Use the provided macros to access the info in this structure.
+ */
+struct _GstVideoInfo {
+  const GstVideoFormatInfo *finfo;
+  GstVideoFlags             flags;
+  gint                      width;
+  gint                      height;
+  gsize                     size;
+  gint                      views;
+
+  GstVideoChromaSite        chroma_site;
+  GstVideoColorimetry       colorimetry;
+
+  GstBuffer                *palette;
+
+  gint                      par_n;
+  gint                      par_d;
+  gint                      fps_n;
+  gint                      fps_d;
+
+  gsize                     offset[GST_VIDEO_MAX_PLANES];
+  gint                      stride[GST_VIDEO_MAX_PLANES];
+};
+
+/* general info */
+#define GST_VIDEO_INFO_FORMAT(i)         (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
+#define GST_VIDEO_INFO_NAME(i)           (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
+#define GST_VIDEO_INFO_IS_YUV(i)         (GST_VIDEO_FORMAT_INFO_IS_YUV((i)->finfo))
+#define GST_VIDEO_INFO_IS_RGB(i)         (GST_VIDEO_FORMAT_INFO_IS_RGB((i)->finfo))
+#define GST_VIDEO_INFO_IS_GRAY(i)        (GST_VIDEO_FORMAT_INFO_IS_GRAY((i)->finfo))
+#define GST_VIDEO_INFO_HAS_ALPHA(i)      (GST_VIDEO_FORMAT_INFO_HAS_ALPHA((i)->finfo))
+
+#define GST_VIDEO_INFO_FLAGS(i)          ((i)->flags)
+#define GST_VIDEO_INFO_WIDTH(i)          ((i)->width)
+#define GST_VIDEO_INFO_HEIGHT(i)         ((i)->height)
+#define GST_VIDEO_INFO_SIZE(i)           ((i)->size)
+#define GST_VIDEO_INFO_VIEWS(i)          ((i)->views)
+#define GST_VIDEO_INFO_PAR_N(i)          ((i)->par_n)
+#define GST_VIDEO_INFO_PAR_D(i)          ((i)->par_d)
+#define GST_VIDEO_INFO_FPS_N(i)          ((i)->fps_n)
+#define GST_VIDEO_INFO_FPS_D(i)          ((i)->fps_d)
+
+/* dealing with planes */
+#define GST_VIDEO_INFO_N_PLANES(i)       (GST_VIDEO_FORMAT_INFO_N_PLANES((i)->finfo))
+#define GST_VIDEO_INFO_PLANE_OFFSET(i,p) ((i)->offset[p])
+#define GST_VIDEO_INFO_PLANE_STRIDE(i,p) ((i)->stride[p])
+
+/* dealing with components */
+#define GST_VIDEO_INFO_N_COMPONENTS(i)   GST_VIDEO_FORMAT_INFO_N_COMPONENTS((i)->finfo)
+#define GST_VIDEO_INFO_COMP_DATA(i,d,c)  GST_VIDEO_FORMAT_INFO_DATA((i)->finfo,d,c)
+#define GST_VIDEO_INFO_COMP_STRIDE(i,c)  GST_VIDEO_FORMAT_INFO_STRIDE((i)->finfo,(i)->stride,c)
+#define GST_VIDEO_INFO_COMP_WIDTH(i,c)   GST_VIDEO_FORMAT_INFO_SCALE_WIDTH((i)->finfo,c,(i)->width)
+#define GST_VIDEO_INFO_COMP_HEIGHT(i,c)  GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT((i)->finfo,c,(i)->height)
+#define GST_VIDEO_INFO_COMP_PLANE(i,c)   GST_VIDEO_FORMAT_INFO_PLANE((i)->finfo,c)
+#define GST_VIDEO_INFO_COMP_OFFSET(i,c)  GST_VIDEO_FORMAT_INFO_OFFSET((i)->finfo,c)
+#define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,c)
+
+void         gst_video_info_init        (GstVideoInfo *info);
+
+void         gst_video_info_set_format  (GstVideoInfo *info, GstVideoFormat format,
+                                         guint width, guint height);
+
+gboolean     gst_video_info_from_caps   (GstVideoInfo *info, const GstCaps  * caps);
+
+GstCaps *    gst_video_info_to_caps     (GstVideoInfo *info);
+
+gboolean     gst_video_info_convert     (GstVideoInfo *info,
+                                         GstFormat     src_format,
+                                         gint64        src_value,
+                                         GstFormat     dest_format,
+                                         gint64       *dest_value);
+
+/**
+ * GstVideoFrame:
+ * @info: the #GstVideoInfo
+ * @buffer: the mapped buffer
+ * @meta: pointer to metadata if any
+ * @id: id of the mapped frame. the id can for example be used to
+ *   indentify the frame in case of multiview video.
+ * @data: pointers to the plane data
+ *
+ * A video frame obtained from gst_video_frame_map()
+ */
+struct _GstVideoFrame {
+  GstVideoInfo info;
+
+  GstBuffer *buffer;
+  gpointer   meta;
+  gint       id;
+
+  gpointer   data[GST_VIDEO_MAX_PLANES];
+};
+
+gboolean    gst_video_frame_map           (GstVideoFrame *frame, GstVideoInfo *info,
+                                           GstBuffer *buffer, GstMapFlags flags);
+gboolean    gst_video_frame_map_id        (GstVideoFrame *frame, GstVideoInfo *info,
+                                           GstBuffer *buffer, gint id, GstMapFlags flags);
+void        gst_video_frame_unmap         (GstVideoFrame *frame);
+
+gboolean    gst_video_frame_copy          (GstVideoFrame *dest, const GstVideoFrame *src);
+
+/* general info */
+#define GST_VIDEO_FRAME_FORMAT(f)         (GST_VIDEO_INFO_FORMAT(&(f)->info))
+#define GST_VIDEO_FRAME_WIDTH(f)          (GST_VIDEO_INFO_WIDTH(&(f)->info))
+#define GST_VIDEO_FRAME_HEIGHT(f)         (GST_VIDEO_INFO_HEIGHT(&(f)->info))
+#define GST_VIDEO_FRAME_SIZE(f)           (GST_VIDEO_INFO_SIZE(&(f)->info))
+
+/* dealing with planes */
+#define GST_VIDEO_FRAME_N_PLANES(f)       (GST_VIDEO_INFO_N_PLANES(&(f)->info))
+#define GST_VIDEO_FRAME_PLANE_DATA(f,p)   ((f)->data[p])
+#define GST_VIDEO_FRAME_PLANE_OFFSET(f,p) (GST_VIDEO_INFO_PLANE_OFFSET(&(f)->info,p))
+#define GST_VIDEO_FRAME_PLANE_STRIDE(f,p) (GST_VIDEO_INFO_PLANE_STRIDE(&(f)->info,p))
+
+/* dealing with components */
+#define GST_VIDEO_FRAME_N_COMPONENTS(f)   GST_VIDEO_INFO_N_COMPONENTS(&(f)->info)
+#define GST_VIDEO_FRAME_COMP_DATA(f,c)    GST_VIDEO_INFO_COMP_DATA(&(f)->info,(f)->data,c)
+#define GST_VIDEO_FRAME_COMP_STRIDE(f,c)  GST_VIDEO_INFO_COMP_STRIDE(&(f)->info,c)
+#define GST_VIDEO_FRAME_COMP_WIDTH(f,c)   GST_VIDEO_INFO_COMP_WIDTH(&(f)->info,c)
+#define GST_VIDEO_FRAME_COMP_HEIGHT(f,c)  GST_VIDEO_INFO_COMP_HEIGHT(&(f)->info,c)
+#define GST_VIDEO_FRAME_COMP_PLANE(f,c)   GST_VIDEO_INFO_COMP_PLANE(&(f)->info,c)
+#define GST_VIDEO_FRAME_COMP_OFFSET(f,c)  GST_VIDEO_INFO_COMP_OFFSET(&(f)->info,c)
+#define GST_VIDEO_FRAME_COMP_PSTRIDE(f,c) GST_VIDEO_INFO_COMP_PSTRIDE(&(f)->info,c)
+
+#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]"
+#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]"
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_LE"
+# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_BE"
+#else
+# define GST_VIDEO_NE(s) G_STRINGIFY(s)"_BE"
+# define GST_VIDEO_OE(s) G_STRINGIFY(s)"_LE"
+#endif
+
+#define GST_VIDEO_FORMATS_ALL "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, "  \
+    "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, "  \
+    "YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, " \
+    "v308, Y800, Y16, RGB16, BGR16, RGB15, BGR15, UYVP, A420, "         \
+    "RGB8_PALETTED, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210 }"
+
+/**
+ * GST_VIDEO_CAPS_MAKE:
+ * @format: string format that describes the pixel layout, as string
+ *     (e.g. "I420", "RGB", "YV12", "YUY2", "AYUV", etc.)
+ *
+ * Generic caps string for video, for use in pad templates.
+ */
+#define GST_VIDEO_CAPS_MAKE(format)                                     \
+    "video/x-raw, "                                                     \
+    "format = (string) " format ", "                                    \
+    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
+    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
+    "framerate = " GST_VIDEO_FPS_RANGE
+
+/* buffer flags */
+
+/**
+ * GstVideoBufferFlags:
+ * @GST_VIDEO_BUFFER_FLAG_TFF:         If the #GstBuffer is interlaced, then the first field
+ *                                     in the video frame is the top field.  If unset, the
+ *                                     bottom field is first.
+ * @GST_VIDEO_BUFFER_FLAG_RFF:         If the #GstBuffer is interlaced, then the first field
+ *                                     (as defined by the %GST_VIDEO_BUFFER_TFF flag setting)
+ *                                     is repeated.
+ * @GST_VIDEO_BUFFER_FLAG_ONEFIELD:    If the #GstBuffer is interlaced, then only the
+ *                                     first field (as defined by the %GST_VIDEO_BUFFER_TFF
+ *                                     flag setting) is to be displayed.
+ * @GST_VIDEO_BUFFER_FLAG_PROGRESSIVE: If the #GstBuffer is telecined, then the
+ *                                     buffer is progressive if the %GST_VIDEO_BUFFER_PROGRESSIVE
+ *                                     flag is set, else it is telecine mixed.
+ *
+ * Additional video buffer flags.
+ */
+typedef enum {
+  GST_VIDEO_BUFFER_FLAG_TFF         = (GST_BUFFER_FLAG_LAST << 0),
+  GST_VIDEO_BUFFER_FLAG_RFF         = (GST_BUFFER_FLAG_LAST << 1),
+  GST_VIDEO_BUFFER_FLAG_ONEFIELD    = (GST_BUFFER_FLAG_LAST << 2),
+  GST_VIDEO_BUFFER_FLAG_PROGRESSIVE = (GST_BUFFER_FLAG_LAST << 3),
+
+  GST_VIDEO_BUFFER_FLAG_LAST        = (GST_BUFFER_FLAG_LAST << 8)
+} GstVideoBufferFlags;
+
+/* some helper functions */
+gboolean       gst_video_calculate_display_ratio (guint * dar_n,
+                                                  guint * dar_d,
+                                                  guint   video_width,
+                                                  guint   video_height,
+                                                  guint   video_par_n,
+                                                  guint   video_par_d,
+                                                  guint   display_par_n,
+                                                  guint   display_par_d);
+
+GstBuffer *    gst_video_parse_caps_palette      (GstCaps * caps);
+
+/* video still frame event creation and parsing */
+
+GstEvent *     gst_video_event_new_still_frame   (gboolean in_still);
+
+gboolean       gst_video_event_parse_still_frame (GstEvent * event, gboolean * in_still);
+
+
+/* convert/encode video frame from one format to another */
+
+typedef void (*GstVideoConvertFrameCallback) (GstBuffer * buf, GError *error, gpointer user_data);
+
+void           gst_video_convert_frame_async (GstBuffer                    * buf,
+                                              GstCaps                      * from_caps,
+                                              const GstCaps                * to_caps,
+                                              GstClockTime                   timeout,
+                                              GstVideoConvertFrameCallback   callback,
+                                              gpointer                       user_data,
+                                              GDestroyNotify                 destroy_notify);
+
+GstBuffer *    gst_video_convert_frame       (GstBuffer     * buf,
+                                              GstCaps       * from_caps,
+                                              const GstCaps * to_caps,
+                                              GstClockTime    timeout,
+                                              GError       ** error);
+G_END_DECLS
+
+#endif /* __GST_VIDEO_H__ */
diff --git a/gst-plugins-base.doap b/gst-plugins-base.doap
new file mode 100644
index 0000000..b0e4670
--- /dev/null
+++ b/gst-plugins-base.doap
@@ -0,0 +1,450 @@
+<Project
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+  xmlns="http://usefulinc.com/ns/doap#"
+  xmlns:foaf="http://xmlns.com/foaf/0.1/"
+  xmlns:admin="http://webns.net/mvcb/">
+
+ <name>GStreamer Base Plug-ins</name>
+ <shortname>gst-plugins-base</shortname>
+ <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-base.html" />
+ <created>2005-06-17</created>
+ <shortdesc xml:lang="en">
+a basic collection of elements
+ </shortdesc>
+ <description xml:lang="en">
+GStreamer Base Plug-ins is a well-groomed and well-maintained collection of
+GStreamer plug-ins and elements, spanning the range of possible types of
+elements one would want to write for GStreamer.  It also contains helper
+libraries and base classes useful for writing elements.
+A wide range of video and audio decoders, encoders, and filters are included.
+</description>
+ <category></category>
+ <bug-database rdf:resource="http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&amp;component=gst-plugins-base" />
+ <screenshots></screenshots>
+ <mailing-list rdf:resource="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" />
+ <programming-language>C</programming-language>
+ <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
+ <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
+
+ <repository>
+   <GitRepository>
+     <location rdf:resource="git://anongit.freedesktop.org/gstreamer/gst-plugins-base"/>
+     <browse rdf:resource="http://cgit.freedesktop.org/gstreamer/gst-plugins-base"/>
+   </GitRepository>
+ </repository> 
+
+ <release>
+  <Version>
+   <revision>0.11.1</revision>
+   <branch>0.11</branch>
+   <name>A handful sometimes, A heartful always</name>
+   <created>2011-09-29</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.11.1.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.11.1.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.0</revision>
+   <branch>0.11</branch>
+   <name>Just like a pacifier</name>
+   <created>2011-08-02</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.11.0.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.11.0.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.35</revision>
+   <branch>0.10</branch>
+   <name>Short Notice</name>
+   <created>2011-06-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.35.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.35.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.34</revision>
+   <branch>0.10</branch>
+   <name>Lemmings</name>
+   <created>2011-05-13</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.34.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.34.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.33</revision>
+   <branch>0.10</branch>
+   <name>Relaxing Distractions</name>
+   <created>2011-05-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.33.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.33.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.32</revision>
+   <branch>0.10</branch>
+   <name>Your Life You Like It Well</name>
+   <created>2011-01-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.32.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.32.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.31</revision>
+   <branch>0.10</branch>
+   <name>Dance Like It's 1982</name>
+   <created>2010-11-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.31.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.31.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.30</revision>
+   <branch>0.10</branch>
+   <name>Difficult Birth</name>
+   <created>2010-07-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.30.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.30.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.29</revision>
+   <branch>0.10</branch>
+   <name>Freaks</name>
+   <created>2010-04-27</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.29.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.29.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.28</revision>
+   <branch>0.10</branch>
+   <name>Those Norwegians</name>
+   <created>2010-03-08</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.28.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.28.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.27</revision>
+   <branch>0.10</branch>
+   <name>No Mistakes Allowed</name>
+   <created>2010-03-05</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.27.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.27.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.26</revision>
+   <branch>0.10</branch>
+   <name>You will know when you get there</name>
+   <created>2010-02-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.26.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.26.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.25</revision>
+   <branch>0.10</branch>
+   <name>Standard disclaimers apply</name>
+   <created>2009-10-05</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.25.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.25.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.24</revision>
+   <branch>0.10</branch>
+   <name>Counting the days</name>
+   <created>2009-08-04</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.24.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.24.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.23</revision>
+   <branch>0.10</branch>
+   <name>Emergency de-stress call</name>
+   <created>2009-05-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.23.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.23.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.22</revision>
+   <branch>0.10</branch>
+   <name>Hidey Hidey Hidey Ho</name>
+   <created>2009-01-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.22.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.22.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.21</revision>
+   <branch>0.10</branch>
+   <name>We Could Be Wrong</name>
+   <created>2008-10-02</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.21.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.21.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.20</revision>
+   <branch>0.10</branch>
+   <name>Here I Go Again</name>
+   <created>2008-06-18</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.20.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.20.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.19</revision>
+   <branch>0.10</branch>
+   <name>Good Times</name>
+   <created>2008-04-04</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.19.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.19.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.18</revision>
+   <branch>0.10</branch>
+   <name>I will follow</name>
+   <created>2008-03-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.18.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.18.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.17</revision>
+   <branch>0.10</branch>
+   <name>Peanut Butter and Jelly</name>
+   <created>2008-01-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.17.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.17.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.16</revision>
+   <branch>0.10</branch>
+   <name>Scheduled Interruption</name>
+   <created>2008-01-28</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.16.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.16.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.15</revision>
+   <branch>0.10</branch>
+   <name>No need to argue</name>
+   <created>2007-11-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.15.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.15.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.14</revision>
+   <branch>0.10</branch>
+   <name>Light Years Ahead</name>
+   <created>2007-08-03</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.14.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.14.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.13</revision>
+   <branch>0.10</branch>
+   <name>What's going on?</name>
+   <created>2007-06-05</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.13.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.13.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.12</revision>
+   <branch>0.10</branch>
+   <name>Zombie Horde</name>
+   <created>2007-03-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.12.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.12.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.11</revision>
+   <branch>0.10</branch>
+   <name>Dumb things</name>
+   <created>2006-12-06</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.11.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.11.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.10</revision>
+   <branch>0.10</branch>
+   <name>Chorizo</name>
+   <created>2006-09-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.10.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.10.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.9</revision>
+   <branch>0.10</branch>
+   <name>I walk the line</name>
+   <created>2006-07-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.9.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.9.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.8</revision>
+   <branch>0.10</branch>
+   <name>Moar gij zie mij nie</name>
+   <created>2006-06-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.8.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.8.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.7</revision>
+   <branch>0.10</branch>
+   <name>Leave the gun</name>
+   <created>2006-05-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.7.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.7.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.6</revision>
+   <branch>0.10</branch>
+   <name>Chao</name>
+   <created>2006-04-28</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.6.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-0.10.6.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.5</revision>
+   <branch>0.10</branch>
+   <name>Net</name>
+   <created>2006-03-13</created>
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.4</revision>
+   <branch>0.10</branch>
+   <name>Power</name>
+   <created>2006-03-10</created>
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.3</revision>
+   <branch>0.10</branch>
+   <name>Under Pressure</name>
+   <created>2006-02-09</created>
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.2</revision>
+   <branch>0.10</branch>
+   <name>Then the devil is six</name>
+   <created>2006-01-16</created>
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.1</revision>
+   <branch>0.10</branch>
+   <name>Dobro Dedek</name>
+   <created>2005-12-23</created>
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.0</revision>
+   <branch>0.10</branch>
+   <name>Mont-d'or</name>
+   <created>2005-12-05</created>
+  </Version>
+ </release>
+
+ <maintainer>
+  <foaf:Person>
+     <foaf:name>Wim Taymans</foaf:name>
+     <foaf:mbox_sha1sum>0d93fde052812d51a05fd86de9bdbf674423daa2</foaf:mbox_sha1sum>
+  </foaf:Person>
+ </maintainer>
+
+</Project>
diff --git a/gst-plugins-base.spec b/gst-plugins-base.spec
new file mode 100644
index 0000000..b5d7cba
--- /dev/null
+++ b/gst-plugins-base.spec
@@ -0,0 +1,306 @@
+%define majorminor  0.11
+%define gstreamer   gstreamer011
+
+%define gst_minver  0.11.0
+
+Name: 		%{gstreamer}-plugins-base
+Version: 	0.11.1
+Release: 	1.gst
+Summary: 	GStreamer streaming media framework plug-ins
+
+Group: 		Applications/Multimedia
+License: 	LGPL
+URL:		http://gstreamer.freedesktop.org/
+Vendor:         GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+Requires: 	%{gstreamer} >= %{gst_minver}
+BuildRequires: 	%{gstreamer}-devel >= %{gst_minver}
+BuildRequires:  gobject-introspection-devel >= 0.9.12
+
+BuildRequires:  gcc-c++
+BuildRequires:  gtk-doc >= 1.3
+BuildRequires:  orc-devel
+Requires:       orc
+
+Requires:      libogg >= 1.0
+Requires:      libvorbis >= 1.0
+BuildRequires: libogg-devel >= 1.0
+BuildRequires: libvorbis-devel >= 1.0
+BuildRequires:  libXv-devel
+Requires:       libXv-devel
+BuildRequires: alsa-lib-devel
+Requires:      alsa-lib
+BuildRequires: cdparanoia-devel
+Requires:      cdparanoia
+BuildRequires: libvisual-devel
+Requires:      libvisual
+BuildRequires: pango-devel
+Requires: pango
+BuildRequires: libtheora-devel >= 1.0
+Requires:      libtheora >= 1.0
+
+%description
+GStreamer is a streaming media framework, based on graphs of filters which
+operate on media data. Applications using this library can do anything
+from real-time sound processing to playing videos, and just about anything
+else media-related.  Its plugin-based architecture means that new data
+types or processing capabilities can be added simply by installing new
+plug-ins.
+
+%prep
+%setup -q -n gst-plugins-base-%{version}
+export DOCS_ARE_INCOMPLETE_PLEASE_FIXME=0
+%build
+%configure \
+  --enable-gtk-doc --enable-introspection=yes
+
+make %{?_smp_mflags}
+                                                                                
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%makeinstall
+
+# Clean out files that should not be part of the rpm.
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+
+%find_lang gst-plugins-base-%{majorminor}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f gst-plugins-base-%{majorminor}.lang
+%defattr(-, root, root)
+%doc AUTHORS COPYING README REQUIREMENTS gst-plugins-base.doap
+
+# helper programs
+%{_bindir}/gst-visualise-%{majorminor}
+%{_bindir}/gst-discoverer-%{majorminor}
+%{_mandir}/man1/gst-visualise-%{majorminor}*
+
+# libraries
+%{_libdir}/libgstaudio-%{majorminor}.so.*
+%{_libdir}/libgstcdda-%{majorminor}.so*
+%{_libdir}/libgstinterfaces-%{majorminor}.so.*
+%{_libdir}/libgstnetbuffer-%{majorminor}.so*
+%{_libdir}/libgstpbutils-%{majorminor}.so*
+%{_libdir}/libgstriff-%{majorminor}.so.*
+%{_libdir}/libgstrtp-%{majorminor}.so*
+%{_libdir}/libgsttag-%{majorminor}.so.*
+%{_libdir}/libgstvideo-%{majorminor}.so.*
+%{_libdir}/libgstfft-%{majorminor}.so.*
+%{_libdir}/libgstrtsp-%{majorminor}.so.*
+%{_libdir}/libgstsdp-%{majorminor}.so.*
+%{_libdir}/libgstapp-%{majorminor}.so.*
+
+# base plugins without external dependencies
+%{_libdir}/gstreamer-%{majorminor}/libgstadder.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioconvert.so
+%{_libdir}/gstreamer-%{majorminor}/libgstplayback.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttypefindfunctions.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstsubparse.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvolume.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideoconvert.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideoscale.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttcp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioresample.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstgdp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstapp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstencodebin.so
+
+# Here are packages not in the base plugins package but not dependant
+# on an external lib
+
+# @USE_GST_V4L2_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux2.so
+
+# base plugins with dependencies
+%{_libdir}/gstreamer-%{majorminor}/libgstalsa.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttheora.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvorbis.so
+%{_libdir}/gstreamer-%{majorminor}/libgstogg.so
+%{_libdir}/gstreamer-%{majorminor}/libgstximage*.so
+%{_libdir}/gstreamer-%{majorminor}/libgstxvimagesink.so
+%{_libdir}/gstreamer-%{majorminor}/libgstlibvisual.so
+%{_libdir}/gstreamer-%{majorminor}/libgstpango.so
+%{_libdir}/gstreamer-%{majorminor}/libgstcdparanoia.so
+%{_libdir}/gstreamer-%{majorminor}/libgstgio.so
+# @USE_SCHRO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstschro.so                                                                     
+%package devel
+Summary: 	GStreamer Plugin Library Headers
+Group: 		Development/Libraries
+Requires: 	%{gstreamer}-plugins-base = %{version}
+
+%description devel
+GStreamer Plugins Base library development and header files.
+
+%files devel
+%defattr(-, root, root)
+# plugin helper library headers
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-ids.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-media.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-read.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/video.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstmetavideo.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideopool.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalance.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalancechannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/interfaces-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixeroptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixertrack.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/navigation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/propertyprobe.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tuner.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunerchannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunernorm.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videooverlay.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpaudiopayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpdepayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioclock.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstringbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/tag.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertppayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/netbuffer/gstnetbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/cdda/gstcddabasesrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/mixerutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videoorientation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/descriptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/install-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/missing-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtcpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfft.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts16.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsp-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspbase64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspconnection.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspdefs.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspextension.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsprange.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsptransport.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspurl.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdp.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdpmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtppayloads.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagdemux.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/app/gstappsink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/app/gstappsrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/video-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/streamvolume.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/codec-utils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/encoding-profile.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/encoding-target.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/gstdiscoverer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/gstpluginsbaseversion.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/xmpwriter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioiec61937.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiodecoder.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioencoder.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagmux.h
+
+%{_libdir}/libgstfft-%{majorminor}.so
+%{_libdir}/libgstrtsp-%{majorminor}.so
+%{_libdir}/libgstsdp-%{majorminor}.so
+%{_libdir}/libgstaudio-%{majorminor}.so
+%{_libdir}/libgstriff-%{majorminor}.so
+%{_libdir}/libgsttag-%{majorminor}.so
+%{_libdir}/libgstvideo-%{majorminor}.so
+%{_libdir}/libgstrtp-%{majorminor}.so
+%{_libdir}/libgstinterfaces-%{majorminor}.so
+%{_libdir}/libgstnetbuffer-%{majorminor}.so
+%{_libdir}/libgstpbutils-%{majorminor}.so
+%{_libdir}/libgstcdda-%{majorminor}.so
+%{_libdir}/libgstapp-%{majorminor}.so
+
+# pkg-config files
+%{_libdir}/pkgconfig/gstreamer-plugins-base-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-audio-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-cdda-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-fft-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-interfaces-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-netbuffer-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-pbutils-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-riff-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-rtp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-rtsp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-sdp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-tag-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-video-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-app-%{majorminor}.pc
+
+%{_libdir}/girepository-1.0/GstApp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstAudio-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstFft-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstInterfaces-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstNetbuffer-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstPbutils-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRiff-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRtp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRtsp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstSdp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstTag-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstVideo-%{majorminor}.typelib
+%{_datadir}/gir-1.0/GstApp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstAudio-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstFft-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstInterfaces-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstNetbuffer-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstPbutils-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRiff-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRtp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRtsp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstSdp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstTag-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstVideo-%{majorminor}.gir
+
+# gtk-doc documentation
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-libs-%{majorminor}
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
+%doc %{_datadir}/gst-plugins-base/license-translations.dict
+
+%changelog
+* Sun Aug 07 2011 Thomas Vander Stichele <thomas at apestaart dot org>
+- rename to gstreamer011
+- require 0.11 gstreamer
+- properly use majorminor macro
+- libgstplayback.so now contains playbin/decodebin elements.
+- gstappbuffer is gone
+- added metavideo and videopool headers
+
+* Fri Dec 15 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+- add doap file
+- cleanups
+
+* Fri Sep 02 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+- clean up a little
+
+* Fri May 6 2005 Christian Schaller <christian at fluendo dot com>
+- Added libgstaudiorate and libgstsubparse to spec file
+
+* Thu May 5 2005 Christian Schaller <christian at fluendo dot com>
+- first attempt at spec file for gst-plugins-base
diff --git a/gst-plugins-base.spec.in b/gst-plugins-base.spec.in
new file mode 100644
index 0000000..f815c78
--- /dev/null
+++ b/gst-plugins-base.spec.in
@@ -0,0 +1,306 @@
+%define majorminor  @GST_MAJORMINOR@
+%define gstreamer   gstreamer011
+
+%define gst_minver  0.11.0
+
+Name: 		%{gstreamer}-plugins-base
+Version: 	@VERSION@
+Release: 	@PACKAGE_VERSION_RELEASE@.gst
+Summary: 	GStreamer streaming media framework plug-ins
+
+Group: 		Applications/Multimedia
+License: 	LGPL
+URL:		http://gstreamer.freedesktop.org/
+Vendor:         GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+Requires: 	%{gstreamer} >= %{gst_minver}
+BuildRequires: 	%{gstreamer}-devel >= %{gst_minver}
+BuildRequires:  gobject-introspection-devel >= 0.9.12
+
+BuildRequires:  gcc-c++
+BuildRequires:  gtk-doc >= 1.3
+BuildRequires:  orc-devel
+Requires:       orc
+
+@USE_VORBIS_TRUE@Requires:      libogg >= 1.0
+@USE_VORBIS_TRUE@Requires:      libvorbis >= 1.0
+@USE_VORBIS_TRUE@BuildRequires: libogg-devel >= 1.0
+@USE_VORBIS_TRUE@BuildRequires: libvorbis-devel >= 1.0
+@USE_XVIDEO_TRUE@BuildRequires:  libXv-devel
+@USE_XVIDEO_TRUE@Requires:       libXv-devel
+@USE_ALSA_TRUE@BuildRequires: alsa-lib-devel
+@USE_ALSA_TRUE@Requires:      alsa-lib
+@USE_CDPARANOIA_TRUE@BuildRequires: cdparanoia-devel
+@USE_CDPARANOIA_TRUE@Requires:      cdparanoia
+@USE_LIBVISUAL_TRUE@BuildRequires: libvisual-devel
+@USE_LIBVISUAL_TRUE@Requires:      libvisual
+@USE_PANGO_TRUE@BuildRequires: pango-devel
+@USE_PANGO_TRUE@Requires: pango
+@USE_THEORA_TRUE@BuildRequires: libtheora-devel >= 1.0
+@USE_THEORA_TRUE@Requires:      libtheora >= 1.0
+
+%description
+GStreamer is a streaming media framework, based on graphs of filters which
+operate on media data. Applications using this library can do anything
+from real-time sound processing to playing videos, and just about anything
+else media-related.  Its plugin-based architecture means that new data
+types or processing capabilities can be added simply by installing new
+plug-ins.
+
+%prep
+%setup -q -n gst-plugins-base-%{version}
+export DOCS_ARE_INCOMPLETE_PLEASE_FIXME=0
+%build
+%configure \
+  --enable-gtk-doc --enable-introspection=yes
+
+make %{?_smp_mflags}
+                                                                                
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%makeinstall
+
+# Clean out files that should not be part of the rpm.
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+
+%find_lang gst-plugins-base-%{majorminor}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f gst-plugins-base-%{majorminor}.lang
+%defattr(-, root, root)
+%doc AUTHORS COPYING README REQUIREMENTS gst-plugins-base.doap
+
+# helper programs
+%{_bindir}/gst-visualise-%{majorminor}
+%{_bindir}/gst-discoverer-%{majorminor}
+%{_mandir}/man1/gst-visualise-%{majorminor}*
+
+# libraries
+%{_libdir}/libgstaudio-%{majorminor}.so.*
+%{_libdir}/libgstcdda-%{majorminor}.so*
+%{_libdir}/libgstinterfaces-%{majorminor}.so.*
+%{_libdir}/libgstnetbuffer-%{majorminor}.so*
+%{_libdir}/libgstpbutils-%{majorminor}.so*
+%{_libdir}/libgstriff-%{majorminor}.so.*
+%{_libdir}/libgstrtp-%{majorminor}.so*
+%{_libdir}/libgsttag-%{majorminor}.so.*
+%{_libdir}/libgstvideo-%{majorminor}.so.*
+%{_libdir}/libgstfft-%{majorminor}.so.*
+%{_libdir}/libgstrtsp-%{majorminor}.so.*
+%{_libdir}/libgstsdp-%{majorminor}.so.*
+%{_libdir}/libgstapp-%{majorminor}.so.*
+
+# base plugins without external dependencies
+%{_libdir}/gstreamer-%{majorminor}/libgstadder.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioconvert.so
+%{_libdir}/gstreamer-%{majorminor}/libgstplayback.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttypefindfunctions.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstsubparse.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvolume.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideoconvert.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideoscale.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttcp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioresample.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstgdp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstapp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstencodebin.so
+
+# Here are packages not in the base plugins package but not dependant
+# on an external lib
+
+# @USE_GST_V4L2_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux2.so
+
+# base plugins with dependencies
+@USE_ALSA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstalsa.so
+@USE_THEORA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgsttheora.so
+@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvorbis.so
+@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstogg.so
+@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstximage*.so
+@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstxvimagesink.so
+@USE_LIBVISUAL_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstlibvisual.so
+@USE_PANGO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstpango.so
+@USE_CDPARANOIA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstcdparanoia.so
+@USE_GIO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstgio.so
+# @USE_SCHRO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstschro.so                                                                     
+%package devel
+Summary: 	GStreamer Plugin Library Headers
+Group: 		Development/Libraries
+Requires: 	%{gstreamer}-plugins-base = %{version}
+
+%description devel
+GStreamer Plugins Base library development and header files.
+
+%files devel
+%defattr(-, root, root)
+# plugin helper library headers
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-ids.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-media.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-read.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/video.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstmetavideo.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideopool.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalance.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalancechannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/interfaces-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixeroptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixertrack.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/navigation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/propertyprobe.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tuner.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunerchannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunernorm.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videooverlay.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpaudiopayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpdepayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioclock.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstringbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/tag.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertppayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/netbuffer/gstnetbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/cdda/gstcddabasesrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/mixerutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videoorientation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/descriptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/install-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/missing-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtcpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfft.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts16.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsp-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspbase64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspconnection.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspdefs.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspextension.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsprange.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsptransport.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspurl.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdp.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdpmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtppayloads.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagdemux.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/app/gstappsink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/app/gstappsrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/video-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/streamvolume.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/codec-utils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/encoding-profile.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/encoding-target.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/gstdiscoverer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/gstpluginsbaseversion.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/xmpwriter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioiec61937.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiodecoder.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioencoder.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagmux.h
+
+%{_libdir}/libgstfft-%{majorminor}.so
+%{_libdir}/libgstrtsp-%{majorminor}.so
+%{_libdir}/libgstsdp-%{majorminor}.so
+%{_libdir}/libgstaudio-%{majorminor}.so
+%{_libdir}/libgstriff-%{majorminor}.so
+%{_libdir}/libgsttag-%{majorminor}.so
+%{_libdir}/libgstvideo-%{majorminor}.so
+%{_libdir}/libgstrtp-%{majorminor}.so
+%{_libdir}/libgstinterfaces-%{majorminor}.so
+%{_libdir}/libgstnetbuffer-%{majorminor}.so
+%{_libdir}/libgstpbutils-%{majorminor}.so
+%{_libdir}/libgstcdda-%{majorminor}.so
+%{_libdir}/libgstapp-%{majorminor}.so
+
+# pkg-config files
+%{_libdir}/pkgconfig/gstreamer-plugins-base-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-audio-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-cdda-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-fft-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-interfaces-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-netbuffer-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-pbutils-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-riff-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-rtp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-rtsp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-sdp-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-tag-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-video-%{majorminor}.pc
+%{_libdir}/pkgconfig/gstreamer-app-%{majorminor}.pc
+
+%{_libdir}/girepository-1.0/GstApp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstAudio-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstFft-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstInterfaces-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstNetbuffer-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstPbutils-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRiff-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRtp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstRtsp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstSdp-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstTag-%{majorminor}.typelib
+%{_libdir}/girepository-1.0/GstVideo-%{majorminor}.typelib
+%{_datadir}/gir-1.0/GstApp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstAudio-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstFft-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstInterfaces-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstNetbuffer-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstPbutils-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRiff-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRtp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstRtsp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstSdp-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstTag-%{majorminor}.gir
+%{_datadir}/gir-1.0/GstVideo-%{majorminor}.gir
+
+# gtk-doc documentation
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-libs-%{majorminor}
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
+%doc %{_datadir}/gst-plugins-base/license-translations.dict
+
+%changelog
+* Sun Aug 07 2011 Thomas Vander Stichele <thomas at apestaart dot org>
+- rename to gstreamer011
+- require 0.11 gstreamer
+- properly use majorminor macro
+- libgstplayback.so now contains playbin/decodebin elements.
+- gstappbuffer is gone
+- added metavideo and videopool headers
+
+* Fri Dec 15 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+- add doap file
+- cleanups
+
+* Fri Sep 02 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+- clean up a little
+
+* Fri May 6 2005 Christian Schaller <christian at fluendo dot com>
+- Added libgstaudiorate and libgstsubparse to spec file
+
+* Thu May 5 2005 Christian Schaller <christian at fluendo dot com>
+- first attempt at spec file for gst-plugins-base
diff --git a/gst/Makefile.am b/gst/Makefile.am
new file mode 100644
index 0000000..f25a56d
--- /dev/null
+++ b/gst/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = $(GST_PLUGINS_SELECTED)
+DIST_SUBDIRS = $(GST_PLUGINS_ALL)
+
+include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/gst/Makefile.in b/gst/Makefile.in
new file mode 100644
index 0000000..5fb3dfd
--- /dev/null
+++ b/gst/Makefile.in
@@ -0,0 +1,774 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# include this at the end of $MODULE/ext/Makefile.am to force make to
+# build subdirectories in parallel when make -jN is used. We will end up
+# descending into all subdirectories a second time, but only after the first
+# (parallel) run has finished, so it should go right through the second time.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
+subdir = gst
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = $(GST_PLUGINS_SELECTED)
+DIST_SUBDIRS = $(GST_PLUGINS_ALL)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+.PHONY: independent-subdirs $(SUBDIRS)
+
+independent-subdirs: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/adder/Makefile.am b/gst/adder/Makefile.am
new file mode 100644
index 0000000..8fe5d21
--- /dev/null
+++ b/gst/adder/Makefile.am
@@ -0,0 +1,31 @@
+plugin_LTLIBRARIES = libgstadder.la
+
+ORC_SOURCE=gstadderorc
+include $(top_srcdir)/common/orc.mak
+
+
+libgstadder_la_SOURCES = gstadder.c
+nodist_libgstadder_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstadder_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstadder_la_LIBADD =  \
+	         $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+		 $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
+libgstadder_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstadder.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstadder -:SHARED libgstadder \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstadder_la_SOURCES) \
+	    $(nodist_libgstadder_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \
+	 -:LDFLAGS $(libgstadder_la_LDFLAGS) \
+	           $(libgstadder_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/adder/Makefile.in b/gst/adder/Makefile.in
new file mode 100644
index 0000000..fcb9842
--- /dev/null
+++ b/gst/adder/Makefile.in
@@ -0,0 +1,863 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+subdir = gst/adder
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstadder_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstadder_la_OBJECTS = libgstadder_la-gstadder.lo
+am__objects_1 = libgstadder_la-tmp-orc.lo
+nodist_libgstadder_la_OBJECTS = $(am__objects_1)
+libgstadder_la_OBJECTS = $(am_libgstadder_la_OBJECTS) \
+	$(nodist_libgstadder_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstadder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstadder_la_CFLAGS) $(CFLAGS) \
+	$(libgstadder_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstadder_la_SOURCES) $(nodist_libgstadder_la_SOURCES)
+DIST_SOURCES = $(libgstadder_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstadder.la
+ORC_SOURCE = gstadderorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstadder_la_SOURCES = gstadder.c
+nodist_libgstadder_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstadder_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstadder_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstadder_la_LIBADD = \
+	         $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+		 $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
+
+libgstadder_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstadder.h
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/adder/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/adder/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstadder.la: $(libgstadder_la_OBJECTS) $(libgstadder_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstadder_la_LINK) -rpath $(plugindir) $(libgstadder_la_OBJECTS) $(libgstadder_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstadder_la-gstadder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstadder_la-tmp-orc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstadder_la-gstadder.lo: gstadder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstadder_la_CFLAGS) $(CFLAGS) -MT libgstadder_la-gstadder.lo -MD -MP -MF $(DEPDIR)/libgstadder_la-gstadder.Tpo -c -o libgstadder_la-gstadder.lo `test -f 'gstadder.c' || echo '$(srcdir)/'`gstadder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstadder_la-gstadder.Tpo $(DEPDIR)/libgstadder_la-gstadder.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstadder.c' object='libgstadder_la-gstadder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstadder_la_CFLAGS) $(CFLAGS) -c -o libgstadder_la-gstadder.lo `test -f 'gstadder.c' || echo '$(srcdir)/'`gstadder.c
+
+libgstadder_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstadder_la_CFLAGS) $(CFLAGS) -MT libgstadder_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstadder_la-tmp-orc.Tpo -c -o libgstadder_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstadder_la-tmp-orc.Tpo $(DEPDIR)/libgstadder_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstadder_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstadder_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstadder_la_CFLAGS) $(CFLAGS) -c -o libgstadder_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-pluginLTLIBRARIES ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pluginLTLIBRARIES install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstadder -:SHARED libgstadder \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstadder_la_SOURCES) \
+	    $(nodist_libgstadder_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \
+	 -:LDFLAGS $(libgstadder_la_LDFLAGS) \
+	           $(libgstadder_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/adder/gstadder.c b/gst/adder/gstadder.c
new file mode 100644
index 0000000..d5f9907
--- /dev/null
+++ b/gst/adder/gstadder.c
@@ -0,0 +1,1312 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2001 Thomas <thomas@apestaart.org>
+ *               2005,2006 Wim Taymans <wim@fluendo.com>
+ *
+ * adder.c: Adder element, N in, one out, samples are added
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:element-adder
+ *
+ * The adder allows to mix several streams into one by adding the data.
+ * Mixed data is clamped to the min/max values of the data format.
+ *
+ * The adder currently mixes all data received on the sinkpads as soon as
+ * possible without trying to synchronize the streams.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch audiotestsrc freq=100 ! adder name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
+ * ]| This pipeline produces two sine waves mixed together.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-05-09 (0.10.7)
+ */
+/* Element-Checklist-Version: 5 */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "gstadder.h"
+#include <string.h>             /* strcmp */
+#include "gstadderorc.h"
+
+/* highest positive/lowest negative x-bit value we can use for clamping */
+#define MAX_INT_32  ((gint32) (0x7fffffff))
+#define MAX_INT_16  ((gint16) (0x7fff))
+#define MAX_INT_8   ((gint8)  (0x7f))
+#define MAX_UINT_32 ((guint32)(0xffffffff))
+#define MAX_UINT_16 ((guint16)(0xffff))
+#define MAX_UINT_8  ((guint8) (0xff))
+
+#define MIN_INT_32  ((gint32) (0x80000000))
+#define MIN_INT_16  ((gint16) (0x8000))
+#define MIN_INT_8   ((gint8)  (0x80))
+#define MIN_UINT_32 ((guint32)(0x00000000))
+#define MIN_UINT_16 ((guint16)(0x0000))
+#define MIN_UINT_8  ((guint8) (0x00))
+
+enum
+{
+  PROP_0,
+  PROP_FILTER_CAPS
+};
+
+#define GST_CAT_DEFAULT gst_adder_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+/* elementfactory information */
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define CAPS \
+  GST_AUDIO_CAPS_MAKE ("{ S32LE, U32LE, S16LE, U16LE, S8, U8, F32LE, F64LE }")
+#else
+#define CAPS \
+  GST_AUDIO_CAPS_MAKE ("{ S32BE, U32BE, S16BE, U16BE, S8, U8, F32BE, F64BE }")
+#endif
+
+static GstStaticPadTemplate gst_adder_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CAPS)
+    );
+
+static GstStaticPadTemplate gst_adder_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS (CAPS)
+    );
+
+#define gst_adder_parent_class parent_class
+G_DEFINE_TYPE (GstAdder, gst_adder, GST_TYPE_ELEMENT);
+
+static void gst_adder_dispose (GObject * object);
+static void gst_adder_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_adder_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static gboolean gst_adder_setcaps (GstAdder * adder, GstPad * pad,
+    GstCaps * caps);
+static gboolean gst_adder_query (GstPad * pad, GstQuery * query);
+static gboolean gst_adder_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_adder_sink_event (GstPad * pad, GstEvent * event);
+
+static GstPad *gst_adder_request_new_pad (GstElement * element,
+    GstPadTemplate * temp, const gchar * unused, const GstCaps * caps);
+static void gst_adder_release_pad (GstElement * element, GstPad * pad);
+
+static GstStateChangeReturn gst_adder_change_state (GstElement * element,
+    GstStateChange transition);
+
+static GstBuffer *gst_adder_do_clip (GstCollectPads * pads,
+    GstCollectData * data, GstBuffer * buffer, gpointer user_data);
+static GstFlowReturn gst_adder_collected (GstCollectPads * pads,
+    gpointer user_data);
+
+/* non-clipping versions (for float) */
+#define MAKE_FUNC_NC(name,type)                                 \
+static void name (type *out, type *in, gint samples) {          \
+  gint i;                                                       \
+  for (i = 0; i < samples; i++)                                 \
+    out[i] += in[i];                                            \
+}
+
+/* *INDENT-OFF* */
+MAKE_FUNC_NC (add_float64, gdouble)
+/* *INDENT-ON* */
+
+/* we can only accept caps that we and downstream can handle.
+ * if we have filtercaps set, use those to constrain the target caps.
+ */
+static GstCaps *
+gst_adder_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstAdder *adder;
+  GstCaps *result, *peercaps, *sinkcaps, *filter_caps;
+
+  adder = GST_ADDER (GST_PAD_PARENT (pad));
+
+  GST_OBJECT_LOCK (adder);
+  /* take filter */
+  if ((filter_caps = adder->filter_caps)) {
+    if (filter)
+      filter_caps =
+          gst_caps_intersect_full (filter, filter_caps,
+          GST_CAPS_INTERSECT_FIRST);
+    else
+      gst_caps_ref (filter_caps);
+  } else {
+    filter_caps = gst_caps_ref (filter);
+  }
+  GST_OBJECT_UNLOCK (adder);
+
+  if (filter_caps && gst_caps_is_empty (filter_caps)) {
+    GST_WARNING_OBJECT (pad, "Empty filter caps");
+    return filter_caps;
+  }
+
+  /* get the downstream possible caps */
+  peercaps = gst_pad_peer_get_caps (adder->srcpad, filter_caps);
+
+  /* get the allowed caps on this sinkpad */
+  sinkcaps = gst_pad_get_current_caps (pad);
+  if (sinkcaps == NULL) {
+    sinkcaps = gst_pad_get_pad_template_caps (pad);
+    if (!sinkcaps)
+      sinkcaps = gst_caps_new_any ();
+  }
+
+  if (peercaps) {
+    /* if the peer has caps, intersect */
+    GST_DEBUG_OBJECT (adder, "intersecting peer and template caps");
+    result =
+        gst_caps_intersect_full (peercaps, sinkcaps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (peercaps);
+    gst_caps_unref (sinkcaps);
+  } else {
+    /* the peer has no caps (or there is no peer), just use the allowed caps
+     * of this sinkpad. */
+    /* restrict with filter-caps if any */
+    if (filter_caps) {
+      GST_DEBUG_OBJECT (adder, "no peer caps, using filtered sinkcaps");
+      result =
+          gst_caps_intersect_full (filter_caps, sinkcaps,
+          GST_CAPS_INTERSECT_FIRST);
+      gst_caps_unref (sinkcaps);
+    } else {
+      GST_DEBUG_OBJECT (adder, "no peer caps, using sinkcaps");
+      result = sinkcaps;
+    }
+  }
+
+  if (filter_caps)
+    gst_caps_unref (filter_caps);
+
+  GST_LOG_OBJECT (adder, "getting caps on pad %p,%s to %" GST_PTR_FORMAT, pad,
+      GST_PAD_NAME (pad), result);
+
+  return result;
+}
+
+typedef struct
+{
+  GstPad *pad;
+  GstCaps *caps;
+} IterData;
+
+static void
+setcapsfunc (const GValue * item, IterData * data)
+{
+  GstPad *otherpad = g_value_get_object (item);
+
+  if (otherpad != data->pad)
+    gst_pad_set_caps (data->pad, data->caps);
+}
+
+/* the first caps we receive on any of the sinkpads will define the caps for all
+ * the other sinkpads because we can only mix streams with the same caps.
+ */
+static gboolean
+gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * caps)
+{
+  GstAudioInfo info;
+  GstIterator *it;
+  GstIteratorResult ires;
+  IterData idata;
+  gboolean done;
+
+  GST_LOG_OBJECT (adder, "setting caps pad %p,%s to %" GST_PTR_FORMAT, pad,
+      GST_PAD_NAME (pad), caps);
+
+  it = gst_element_iterate_pads (GST_ELEMENT_CAST (adder));
+
+  /* FIXME, see if the other pads can accept the format. Also lock the
+   * format on the other pads to this new format. */
+  idata.caps = caps;
+  idata.pad = pad;
+
+  done = FALSE;
+  while (!done) {
+    ires = gst_iterator_foreach (it, (GstIteratorForeachFunction) setcapsfunc,
+        &idata);
+
+    switch (ires) {
+      case GST_ITERATOR_RESYNC:
+        gst_iterator_resync (it);
+        break;
+      default:
+        done = TRUE;
+        break;
+    }
+  }
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto invalid_format;
+
+  switch (GST_AUDIO_INFO_FORMAT (&info)) {
+    case GST_AUDIO_FORMAT_S8:
+      adder->func = (GstAdderFunction) add_int8;
+      break;
+    case GST_AUDIO_FORMAT_U8:
+      adder->func = (GstAdderFunction) add_uint8;
+      break;
+    case GST_AUDIO_FORMAT_S16:
+      adder->func = (GstAdderFunction) add_int16;
+      break;
+    case GST_AUDIO_FORMAT_U16:
+      adder->func = (GstAdderFunction) add_uint16;
+      break;
+    case GST_AUDIO_FORMAT_S32:
+      adder->func = (GstAdderFunction) add_int32;
+      break;
+    case GST_AUDIO_FORMAT_U32:
+      adder->func = (GstAdderFunction) add_uint32;
+      break;
+    case GST_AUDIO_FORMAT_F32:
+      adder->func = (GstAdderFunction) add_float32;
+      break;
+    case GST_AUDIO_FORMAT_F64:
+      adder->func = (GstAdderFunction) add_float64;
+      break;
+    default:
+      goto invalid_format;
+  }
+  return TRUE;
+
+  /* ERRORS */
+invalid_format:
+  {
+    GST_DEBUG_OBJECT (adder, "invalid format set as caps");
+    return FALSE;
+  }
+}
+
+/* FIXME, the duration query should reflect how long you will produce
+ * data, that is the amount of stream time until you will emit EOS.
+ *
+ * For synchronized mixing this is always the max of all the durations
+ * of upstream since we emit EOS when all of them finished.
+ *
+ * We don't do synchronized mixing so this really depends on where the
+ * streams where punched in and what their relative offsets are against
+ * eachother which we can get from the first timestamps we see.
+ *
+ * When we add a new stream (or remove a stream) the duration might
+ * also become invalid again and we need to post a new DURATION
+ * message to notify this fact to the parent.
+ * For now we take the max of all the upstream elements so the simple
+ * cases work at least somewhat.
+ */
+static gboolean
+gst_adder_query_duration (GstAdder * adder, GstQuery * query)
+{
+  gint64 max;
+  gboolean res;
+  GstFormat format;
+  GstIterator *it;
+  gboolean done;
+  GValue item = { 0, };
+
+  /* parse format */
+  gst_query_parse_duration (query, &format, NULL);
+
+  max = -1;
+  res = TRUE;
+  done = FALSE;
+
+  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
+  while (!done) {
+    GstIteratorResult ires;
+
+    ires = gst_iterator_next (it, &item);
+    switch (ires) {
+      case GST_ITERATOR_DONE:
+        done = TRUE;
+        break;
+      case GST_ITERATOR_OK:
+      {
+        GstPad *pad = g_value_get_object (&item);
+        gint64 duration;
+
+        /* ask sink peer for duration */
+        res &= gst_pad_query_peer_duration (pad, format, &duration);
+        /* take max from all valid return values */
+        if (res) {
+          /* valid unknown length, stop searching */
+          if (duration == -1) {
+            max = duration;
+            done = TRUE;
+          }
+          /* else see if bigger than current max */
+          else if (duration > max)
+            max = duration;
+        }
+        g_value_reset (&item);
+        break;
+      }
+      case GST_ITERATOR_RESYNC:
+        max = -1;
+        res = TRUE;
+        gst_iterator_resync (it);
+        break;
+      default:
+        res = FALSE;
+        done = TRUE;
+        break;
+    }
+  }
+  g_value_unset (&item);
+  gst_iterator_free (it);
+
+  if (res) {
+    /* and store the max */
+    GST_DEBUG_OBJECT (adder, "Total duration in format %s: %"
+        GST_TIME_FORMAT, gst_format_get_name (format), GST_TIME_ARGS (max));
+    gst_query_set_duration (query, format, max);
+  }
+
+  return res;
+}
+
+static gboolean
+gst_adder_query_latency (GstAdder * adder, GstQuery * query)
+{
+  GstClockTime min, max;
+  gboolean live;
+  gboolean res;
+  GstIterator *it;
+  gboolean done;
+  GValue item = { 0, };
+
+  res = TRUE;
+  done = FALSE;
+
+  live = FALSE;
+  min = 0;
+  max = GST_CLOCK_TIME_NONE;
+
+  /* Take maximum of all latency values */
+  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
+  while (!done) {
+    GstIteratorResult ires;
+
+    ires = gst_iterator_next (it, &item);
+    switch (ires) {
+      case GST_ITERATOR_DONE:
+        done = TRUE;
+        break;
+      case GST_ITERATOR_OK:
+      {
+        GstPad *pad = g_value_get_object (&item);
+        GstQuery *peerquery;
+        GstClockTime min_cur, max_cur;
+        gboolean live_cur;
+
+        peerquery = gst_query_new_latency ();
+
+        /* Ask peer for latency */
+        res &= gst_pad_peer_query (pad, peerquery);
+
+        /* take max from all valid return values */
+        if (res) {
+          gst_query_parse_latency (peerquery, &live_cur, &min_cur, &max_cur);
+
+          if (min_cur > min)
+            min = min_cur;
+
+          if (max_cur != GST_CLOCK_TIME_NONE &&
+              ((max != GST_CLOCK_TIME_NONE && max_cur > max) ||
+                  (max == GST_CLOCK_TIME_NONE)))
+            max = max_cur;
+
+          live = live || live_cur;
+        }
+
+        gst_query_unref (peerquery);
+        g_value_reset (&item);
+        break;
+      }
+      case GST_ITERATOR_RESYNC:
+        live = FALSE;
+        min = 0;
+        max = GST_CLOCK_TIME_NONE;
+        res = TRUE;
+        gst_iterator_resync (it);
+        break;
+      default:
+        res = FALSE;
+        done = TRUE;
+        break;
+    }
+  }
+  g_value_unset (&item);
+  gst_iterator_free (it);
+
+  if (res) {
+    /* store the results */
+    GST_DEBUG_OBJECT (adder, "Calculated total latency: live %s, min %"
+        GST_TIME_FORMAT ", max %" GST_TIME_FORMAT,
+        (live ? "yes" : "no"), GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+    gst_query_set_latency (query, live, min, max);
+  }
+
+  return res;
+}
+
+static gboolean
+gst_adder_query (GstPad * pad, GstQuery * query)
+{
+  GstAdder *adder = GST_ADDER (gst_pad_get_parent (pad));
+  gboolean res = FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat format;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      switch (format) {
+        case GST_FORMAT_TIME:
+          /* FIXME, bring to stream time, might be tricky */
+          gst_query_set_position (query, format, adder->segment.position);
+          res = TRUE;
+          break;
+        case GST_FORMAT_DEFAULT:
+          gst_query_set_position (query, format, adder->offset);
+          res = TRUE;
+          break;
+        default:
+          break;
+      }
+      break;
+    }
+    case GST_QUERY_DURATION:
+      res = gst_adder_query_duration (adder, query);
+      break;
+    case GST_QUERY_LATENCY:
+      res = gst_adder_query_latency (adder, query);
+      break;
+    default:
+      /* FIXME, needs a custom query handler because we have multiple
+       * sinkpads */
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+
+  gst_object_unref (adder);
+  return res;
+}
+
+typedef struct
+{
+  GstEvent *event;
+  gboolean flush;
+} EventData;
+
+static gboolean
+forward_event_func (const GValue * val, GValue * ret, EventData * data)
+{
+  GstPad *pad = g_value_get_object (val);
+  GstEvent *event = data->event;
+
+  gst_event_ref (event);
+  GST_LOG_OBJECT (pad, "About to send event %s", GST_EVENT_TYPE_NAME (event));
+  if (!gst_pad_push_event (pad, event)) {
+    GST_WARNING_OBJECT (pad, "Sending event  %p (%s) failed.",
+        event, GST_EVENT_TYPE_NAME (event));
+    /* quick hack to unflush the pads, ideally we need a way to just unflush
+     * this single collect pad */
+    if (data->flush)
+      gst_pad_send_event (pad, gst_event_new_flush_stop (TRUE));
+  } else {
+    g_value_set_boolean (ret, TRUE);
+    GST_LOG_OBJECT (pad, "Sent event  %p (%s).",
+        event, GST_EVENT_TYPE_NAME (event));
+  }
+
+  /* continue on other pads, even if one failed */
+  return TRUE;
+}
+
+/* forwards the event to all sinkpads, takes ownership of the
+ * event
+ *
+ * Returns: TRUE if the event could be forwarded on all
+ * sinkpads.
+ */
+static gboolean
+forward_event (GstAdder * adder, GstEvent * event, gboolean flush)
+{
+  gboolean ret;
+  GstIterator *it;
+  GstIteratorResult ires;
+  GValue vret = { 0 };
+  EventData data;
+
+  GST_LOG_OBJECT (adder, "Forwarding event %p (%s)", event,
+      GST_EVENT_TYPE_NAME (event));
+
+  data.event = event;
+  data.flush = flush;
+
+  g_value_init (&vret, G_TYPE_BOOLEAN);
+  g_value_set_boolean (&vret, FALSE);
+  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
+  while (TRUE) {
+    ires =
+        gst_iterator_fold (it, (GstIteratorFoldFunction) forward_event_func,
+        &vret, &data);
+    switch (ires) {
+      case GST_ITERATOR_RESYNC:
+        GST_WARNING ("resync");
+        gst_iterator_resync (it);
+        g_value_set_boolean (&vret, TRUE);
+        break;
+      case GST_ITERATOR_OK:
+      case GST_ITERATOR_DONE:
+        ret = g_value_get_boolean (&vret);
+        goto done;
+      default:
+        ret = FALSE;
+        goto done;
+    }
+  }
+done:
+  gst_iterator_free (it);
+  GST_LOG_OBJECT (adder, "Forwarded event %p (%s), ret=%d", event,
+      GST_EVENT_TYPE_NAME (event), ret);
+  gst_event_unref (event);
+
+  return ret;
+}
+
+static gboolean
+gst_adder_src_event (GstPad * pad, GstEvent * event)
+{
+  GstAdder *adder;
+  gboolean result;
+
+  adder = GST_ADDER (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (pad, "Got %s event on src pad",
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstSeekFlags flags;
+      gdouble rate;
+      GstSeekType curtype, endtype;
+      gint64 cur, end;
+      gboolean flush;
+
+      /* parse the seek parameters */
+      gst_event_parse_seek (event, &rate, NULL, &flags, &curtype,
+          &cur, &endtype, &end);
+
+      if ((curtype != GST_SEEK_TYPE_NONE) && (curtype != GST_SEEK_TYPE_SET)) {
+        result = FALSE;
+        GST_DEBUG_OBJECT (adder,
+            "seeking failed, unhandled seek type for start: %d", curtype);
+        goto done;
+      }
+      if ((endtype != GST_SEEK_TYPE_NONE) && (endtype != GST_SEEK_TYPE_SET)) {
+        result = FALSE;
+        GST_DEBUG_OBJECT (adder,
+            "seeking failed, unhandled seek type for end: %d", endtype);
+        goto done;
+      }
+
+      flush = (flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH;
+
+      /* check if we are flushing */
+      if (flush) {
+        /* make sure we accept nothing anymore and return WRONG_STATE */
+        gst_collect_pads_set_flushing (adder->collect, TRUE);
+
+        /* flushing seek, start flush downstream, the flush will be done
+         * when all pads received a FLUSH_STOP. */
+        gst_pad_push_event (adder->srcpad, gst_event_new_flush_start ());
+
+        /* We can't send FLUSH_STOP here since upstream could start pushing data
+         * after we unlock adder->collect.
+         * We set flush_stop_pending to TRUE instead and send FLUSH_STOP after
+         * forwarding the seek upstream or from gst_adder_collected,
+         * whichever happens first.
+         */
+        g_atomic_int_set (&adder->flush_stop_pending, TRUE);
+      }
+      GST_DEBUG_OBJECT (adder, "handling seek event: %" GST_PTR_FORMAT, event);
+
+      /* now wait for the collected to be finished and mark a new
+       * segment. After we have the lock, no collect function is running and no
+       * new collect function will be called for as long as we're flushing. */
+      GST_OBJECT_LOCK (adder->collect);
+      adder->segment.rate = rate;
+      if (curtype == GST_SEEK_TYPE_SET)
+        adder->segment.start = cur;
+      else
+        adder->segment.start = 0;
+      if (endtype == GST_SEEK_TYPE_SET)
+        adder->segment.stop = end;
+      else
+        adder->segment.stop = GST_CLOCK_TIME_NONE;
+      if (flush) {
+        /* Yes, we need to call _set_flushing again *WHEN* the streaming threads
+         * have stopped so that the cookie gets properly updated. */
+        gst_collect_pads_set_flushing (adder->collect, TRUE);
+      }
+      GST_OBJECT_UNLOCK (adder->collect);
+      GST_DEBUG_OBJECT (adder, "forwarding seek event: %" GST_PTR_FORMAT,
+          event);
+
+      /* we're forwarding seek to all upstream peers and wait for one to reply
+       * with a newsegment-event before we send a newsegment-event downstream */
+      g_atomic_int_set (&adder->wait_for_new_segment, TRUE);
+      result = forward_event (adder, event, flush);
+      if (!result) {
+        /* seek failed. maybe source is a live source. */
+        GST_DEBUG_OBJECT (adder, "seeking failed");
+      }
+      if (g_atomic_int_compare_and_exchange (&adder->flush_stop_pending,
+              TRUE, FALSE)) {
+        GST_DEBUG_OBJECT (adder, "pending flush stop");
+        gst_pad_push_event (adder->srcpad, gst_event_new_flush_stop (TRUE));
+      }
+      break;
+    }
+    case GST_EVENT_QOS:
+      /* QoS might be tricky */
+      result = FALSE;
+      break;
+    case GST_EVENT_NAVIGATION:
+      /* navigation is rather pointless. */
+      result = FALSE;
+      break;
+    default:
+      /* just forward the rest for now */
+      GST_DEBUG_OBJECT (adder, "forward unhandled event: %s",
+          GST_EVENT_TYPE_NAME (event));
+      result = forward_event (adder, event, FALSE);
+      break;
+  }
+
+done:
+  gst_object_unref (adder);
+
+  return result;
+}
+
+static gboolean
+gst_adder_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstAdder *adder;
+  gboolean ret = TRUE;
+
+  adder = GST_ADDER (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (pad, "Got %s event on sink pad",
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_adder_setcaps (adder, pad, caps);
+      gst_event_unref (event);
+
+      goto beach;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      /* we received a flush-stop. The collect_event function will push the
+       * event past our element. We simply forward all flush-stop events, even
+       * when no flush-stop was pending, this is required because collectpads
+       * does not provide an API to handle-but-not-forward the flush-stop.
+       * We unset the pending flush-stop flag so that we don't send anymore
+       * flush-stop from the collect function later.
+       */
+      GST_OBJECT_LOCK (adder->collect);
+      g_atomic_int_set (&adder->new_segment_pending, TRUE);
+      g_atomic_int_set (&adder->flush_stop_pending, FALSE);
+      /* Clear pending tags */
+      if (adder->pending_events) {
+        g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL);
+        g_list_free (adder->pending_events);
+        adder->pending_events = NULL;
+      }
+      GST_OBJECT_UNLOCK (adder->collect);
+      break;
+    case GST_EVENT_TAG:
+      GST_OBJECT_LOCK (adder->collect);
+      /* collect tags here so we can push them out when we collect data */
+      adder->pending_events = g_list_append (adder->pending_events, event);
+      GST_OBJECT_UNLOCK (adder->collect);
+      goto beach;
+    case GST_EVENT_SEGMENT:
+      if (g_atomic_int_compare_and_exchange (&adder->wait_for_new_segment,
+              TRUE, FALSE)) {
+        /* make sure we push a new segment, to inform about new basetime
+         * see FIXME in gst_adder_collected() */
+        g_atomic_int_set (&adder->new_segment_pending, TRUE);
+      }
+      break;
+    default:
+      break;
+  }
+
+  /* now GstCollectPads can take care of the rest, e.g. EOS */
+  ret = adder->collect_event (pad, event);
+
+beach:
+  gst_object_unref (adder);
+  return ret;
+}
+
+static void
+gst_adder_class_init (GstAdderClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->set_property = gst_adder_set_property;
+  gobject_class->get_property = gst_adder_get_property;
+  gobject_class->dispose = gst_adder_dispose;
+
+  /**
+   * GstAdder:caps:
+   *
+   * Since: 0.10.24
+   */
+  g_object_class_install_property (gobject_class, PROP_FILTER_CAPS,
+      g_param_spec_boxed ("caps", "Target caps",
+          "Set target format for mixing (NULL means ANY). "
+          "Setting this property takes a reference to the supplied GstCaps "
+          "object.", GST_TYPE_CAPS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_adder_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_adder_sink_template));
+  gst_element_class_set_details_simple (gstelement_class, "Adder",
+      "Generic/Audio",
+      "Add N audio channels together",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gstelement_class->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_adder_request_new_pad);
+  gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_adder_release_pad);
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_adder_change_state);
+}
+
+static void
+gst_adder_init (GstAdder * adder)
+{
+  GstPadTemplate *template;
+
+  template = gst_static_pad_template_get (&gst_adder_src_template);
+  adder->srcpad = gst_pad_new_from_template (template, "src");
+  gst_object_unref (template);
+
+  gst_pad_set_getcaps_function (adder->srcpad,
+      GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
+  gst_pad_set_query_function (adder->srcpad,
+      GST_DEBUG_FUNCPTR (gst_adder_query));
+  gst_pad_set_event_function (adder->srcpad,
+      GST_DEBUG_FUNCPTR (gst_adder_src_event));
+  gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad);
+
+  gst_audio_info_init (&adder->info);
+  adder->padcount = 0;
+  adder->func = NULL;
+
+  adder->filter_caps = NULL;
+
+  /* keep track of the sinkpads requested */
+  adder->collect = gst_collect_pads_new ();
+  gst_collect_pads_set_function (adder->collect,
+      GST_DEBUG_FUNCPTR (gst_adder_collected), adder);
+  gst_collect_pads_set_clip_function (adder->collect,
+      GST_DEBUG_FUNCPTR (gst_adder_do_clip), adder);
+}
+
+static void
+gst_adder_dispose (GObject * object)
+{
+  GstAdder *adder = GST_ADDER (object);
+
+  if (adder->collect) {
+    gst_object_unref (adder->collect);
+    adder->collect = NULL;
+  }
+  gst_caps_replace (&adder->filter_caps, NULL);
+  if (adder->pending_events) {
+    g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL);
+    g_list_free (adder->pending_events);
+    adder->pending_events = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_adder_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAdder *adder = GST_ADDER (object);
+
+  switch (prop_id) {
+    case PROP_FILTER_CAPS:{
+      GstCaps *new_caps = NULL;
+      GstCaps *old_caps;
+      const GstCaps *new_caps_val = gst_value_get_caps (value);
+
+      if (new_caps_val != NULL) {
+        new_caps = (GstCaps *) new_caps_val;
+        gst_caps_ref (new_caps);
+      }
+
+      GST_OBJECT_LOCK (adder);
+      old_caps = adder->filter_caps;
+      adder->filter_caps = new_caps;
+      GST_OBJECT_UNLOCK (adder);
+
+      if (old_caps)
+        gst_caps_unref (old_caps);
+
+      GST_DEBUG_OBJECT (adder, "set new caps %" GST_PTR_FORMAT, new_caps);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_adder_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstAdder *adder = GST_ADDER (object);
+
+  switch (prop_id) {
+    case PROP_FILTER_CAPS:
+      GST_OBJECT_LOCK (adder);
+      gst_value_set_caps (value, adder->filter_caps);
+      GST_OBJECT_UNLOCK (adder);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+static GstPad *
+gst_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
+    const gchar * unused, const GstCaps * caps)
+{
+  gchar *name;
+  GstAdder *adder;
+  GstPad *newpad;
+  gint padcount;
+
+  if (templ->direction != GST_PAD_SINK)
+    goto not_sink;
+
+  adder = GST_ADDER (element);
+
+  /* increment pad counter */
+#if GLIB_CHECK_VERSION(2,29,5)
+  padcount = g_atomic_int_add (&adder->padcount, 1);
+#else
+  padcount = g_atomic_int_exchange_and_add (&adder->padcount, 1);
+#endif
+
+  name = g_strdup_printf ("sink%d", padcount);
+  newpad = gst_pad_new_from_template (templ, name);
+  GST_DEBUG_OBJECT (adder, "request new pad %s", name);
+  g_free (name);
+
+  gst_pad_set_getcaps_function (newpad,
+      GST_DEBUG_FUNCPTR (gst_adder_sink_getcaps));
+  gst_collect_pads_add_pad (adder->collect, newpad, sizeof (GstCollectData));
+
+  /* FIXME: hacked way to override/extend the event function of
+   * GstCollectPads; because it sets its own event function giving the
+   * element no access to events */
+  adder->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (newpad);
+  gst_pad_set_event_function (newpad, GST_DEBUG_FUNCPTR (gst_adder_sink_event));
+
+  /* takes ownership of the pad */
+  if (!gst_element_add_pad (GST_ELEMENT (adder), newpad))
+    goto could_not_add;
+
+  return newpad;
+
+  /* errors */
+not_sink:
+  {
+    g_warning ("gstadder: request new pad that is not a SINK pad\n");
+    return NULL;
+  }
+could_not_add:
+  {
+    GST_DEBUG_OBJECT (adder, "could not add pad");
+    gst_collect_pads_remove_pad (adder->collect, newpad);
+    gst_object_unref (newpad);
+    return NULL;
+  }
+}
+
+static void
+gst_adder_release_pad (GstElement * element, GstPad * pad)
+{
+  GstAdder *adder;
+
+  adder = GST_ADDER (element);
+
+  GST_DEBUG_OBJECT (adder, "release pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  gst_collect_pads_remove_pad (adder->collect, pad);
+  gst_element_remove_pad (element, pad);
+}
+
+static GstBuffer *
+gst_adder_do_clip (GstCollectPads * pads, GstCollectData * data,
+    GstBuffer * buffer, gpointer user_data)
+{
+  GstAdder *adder = GST_ADDER (user_data);
+  gint rate, bpf;
+
+  rate = GST_AUDIO_INFO_RATE (&adder->info);
+  bpf = GST_AUDIO_INFO_BPF (&adder->info);
+
+  buffer = gst_audio_buffer_clip (buffer, &data->segment, rate, bpf);
+
+  return buffer;
+}
+
+static GstFlowReturn
+gst_adder_collected (GstCollectPads * pads, gpointer user_data)
+{
+  /*
+   * combine streams by adding data values
+   * basic algorithm :
+   * - this function is called when all pads have a buffer
+   * - get available bytes on all pads.
+   * - repeat for each input pad :
+   *   - read available bytes, copy or add to target buffer
+   *   - if there's an EOS event, remove the input channel
+   * - push out the output buffer
+   *
+   * todo:
+   * - would be nice to have a mixing mode, where instead of adding we mix
+   *   - for float we could downscale after collect loop
+   *   - for int we need to downscale each input to avoid clipping or
+   *     mix into a temp (float) buffer and scale afterwards as well
+   */
+  GstAdder *adder;
+  GSList *collected, *next = NULL;
+  GstFlowReturn ret;
+  GstBuffer *outbuf = NULL, *gapbuf = NULL;
+  gpointer outdata = NULL;
+  guint outsize;
+  gint64 next_offset;
+  gint64 next_timestamp;
+  gint rate, bps, bpf;
+
+  adder = GST_ADDER (user_data);
+
+  /* this is fatal */
+  if (G_UNLIKELY (adder->func == NULL))
+    goto not_negotiated;
+
+  if (g_atomic_int_compare_and_exchange (&adder->flush_stop_pending,
+          TRUE, FALSE)) {
+    GST_DEBUG_OBJECT (adder, "pending flush stop");
+    gst_pad_push_event (adder->srcpad, gst_event_new_flush_stop (TRUE));
+  }
+
+  /* get available bytes for reading, this can be 0 which could mean empty
+   * buffers or EOS, which we will catch when we loop over the pads. */
+  outsize = gst_collect_pads_available (pads);
+  /* can only happen when no pads to collect or all EOS */
+  if (outsize == 0)
+    goto eos;
+
+  rate = GST_AUDIO_INFO_RATE (&adder->info);
+  bps = GST_AUDIO_INFO_BPS (&adder->info);
+  bpf = GST_AUDIO_INFO_BPF (&adder->info);
+
+  GST_LOG_OBJECT (adder,
+      "starting to cycle through channels, %d bytes available (bps = %d)",
+      outsize, bpf);
+
+  for (collected = pads->data; collected; collected = next) {
+    GstCollectData *collect_data;
+    GstBuffer *inbuf;
+    gboolean is_gap;
+
+    /* take next to see if this is the last collectdata */
+    next = g_slist_next (collected);
+
+    collect_data = (GstCollectData *) collected->data;
+
+    /* get a buffer of size bytes, if we get a buffer, it is at least outsize
+     * bytes big. */
+    inbuf = gst_collect_pads_take_buffer (pads, collect_data, outsize);
+    /* NULL means EOS or an empty buffer so we still need to flush in
+     * case of an empty buffer. */
+    if (inbuf == NULL) {
+      GST_LOG_OBJECT (adder, "channel %p: no bytes available", collect_data);
+      continue;
+    }
+
+    is_gap = GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP);
+
+    /* Try to make an output buffer */
+    if (outbuf == NULL) {
+      /* if this is a gap buffer but we have some more pads to check, skip it.
+       * If we are at the last buffer, take it, regardless if it is a GAP
+       * buffer or not. */
+      if (is_gap && next) {
+        GST_DEBUG_OBJECT (adder, "skipping, non-last GAP buffer");
+        /* we keep the GAP buffer, if we don't have anymore buffers (all pads
+         * EOS, we can use this one as the output buffer. */
+        if (gapbuf == NULL)
+          gapbuf = inbuf;
+        else
+          gst_buffer_unref (inbuf);
+        continue;
+      }
+
+      GST_LOG_OBJECT (adder, "channel %p: preparing output buffer of %d bytes",
+          collect_data, outsize);
+
+      outdata = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
+    } else {
+      if (!is_gap) {
+        /* we had a previous output buffer, mix this non-GAP buffer */
+        guint8 *indata;
+        gsize insize;
+
+        indata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
+
+        /* all buffers should have outsize, there are no short buffers because we
+         * asked for the max size above */
+        g_assert (insize == outsize);
+
+        GST_LOG_OBJECT (adder, "channel %p: mixing %" G_GSIZE_FORMAT " bytes"
+            " from data %p", collect_data, insize, indata);
+
+        /* further buffers, need to add them */
+        adder->func ((gpointer) outdata, (gpointer) indata, insize / bps);
+        gst_buffer_unmap (inbuf, indata, insize);
+      } else {
+        /* skip gap buffer */
+        GST_LOG_OBJECT (adder, "channel %p: skipping GAP buffer", collect_data);
+      }
+      gst_buffer_unref (inbuf);
+    }
+  }
+  if (outbuf)
+    gst_buffer_unmap (outbuf, outdata, outsize);
+
+  if (outbuf == NULL) {
+    /* no output buffer, reuse one of the GAP buffers then if we have one */
+    if (gapbuf) {
+      GST_LOG_OBJECT (adder, "reusing GAP buffer %p", gapbuf);
+      outbuf = gapbuf;
+    } else
+      /* assume EOS otherwise, this should not happen, really */
+      goto eos;
+  } else if (gapbuf)
+    /* we had an output buffer, unref the gapbuffer we kept */
+    gst_buffer_unref (gapbuf);
+
+  if (g_atomic_int_compare_and_exchange (&adder->new_segment_pending, TRUE,
+          FALSE)) {
+    GstEvent *event;
+
+    /* FIXME, use rate/applied_rate as set on all sinkpads.
+     * - currently we just set rate as received from last seek-event
+     *
+     * When seeking we set the start and stop positions as given in the seek
+     * event. We also adjust offset & timestamp acordingly.
+     * This basically ignores all newsegments sent by upstream.
+     */
+    event = gst_event_new_segment (&adder->segment);
+
+    if (adder->segment.rate > 0.0) {
+      adder->segment.position = adder->segment.start;
+    } else {
+      adder->segment.position = adder->segment.stop;
+    }
+    adder->offset = gst_util_uint64_scale (adder->segment.position,
+        rate, GST_SECOND);
+    GST_INFO_OBJECT (adder, "seg_start %" G_GUINT64_FORMAT ", seg_end %"
+        G_GUINT64_FORMAT, adder->segment.start, adder->segment.stop);
+    GST_INFO_OBJECT (adder, "timestamp %" G_GINT64_FORMAT ",new offset %"
+        G_GINT64_FORMAT, adder->segment.position, adder->offset);
+
+    if (event) {
+      if (!gst_pad_push_event (adder->srcpad, event)) {
+        GST_WARNING_OBJECT (adder->srcpad, "Sending event failed");
+      }
+    } else {
+      GST_WARNING_OBJECT (adder->srcpad, "Creating new segment event for "
+          "start:%" G_GINT64_FORMAT "  end:%" G_GINT64_FORMAT " failed",
+          adder->segment.start, adder->segment.stop);
+    }
+  }
+
+  if (G_UNLIKELY (adder->pending_events)) {
+    GList *tmp = adder->pending_events;
+
+    while (tmp) {
+      GstEvent *ev = (GstEvent *) tmp->data;
+
+      gst_pad_push_event (adder->srcpad, ev);
+      tmp = g_list_next (tmp);
+    }
+    g_list_free (adder->pending_events);
+    adder->pending_events = NULL;
+  }
+
+  /* for the next timestamp, use the sample counter, which will
+   * never accumulate rounding errors */
+  if (adder->segment.rate > 0.0) {
+    next_offset = adder->offset + outsize / bpf;
+  } else {
+    next_offset = adder->offset - outsize / bpf;
+  }
+  next_timestamp = gst_util_uint64_scale (next_offset, GST_SECOND, rate);
+
+
+  /* set timestamps on the output buffer */
+  if (adder->segment.rate > 0.0) {
+    GST_BUFFER_TIMESTAMP (outbuf) = adder->segment.position;
+    GST_BUFFER_OFFSET (outbuf) = adder->offset;
+    GST_BUFFER_OFFSET_END (outbuf) = next_offset;
+    GST_BUFFER_DURATION (outbuf) = next_timestamp - adder->segment.position;
+  } else {
+    GST_BUFFER_TIMESTAMP (outbuf) = next_timestamp;
+    GST_BUFFER_OFFSET (outbuf) = next_offset;
+    GST_BUFFER_OFFSET_END (outbuf) = adder->offset;
+    GST_BUFFER_DURATION (outbuf) = adder->segment.position - next_timestamp;
+  }
+
+  adder->offset = next_offset;
+  adder->segment.position = next_timestamp;
+
+  /* send it out */
+  GST_LOG_OBJECT (adder, "pushing outbuf %p, timestamp %" GST_TIME_FORMAT
+      " offset %" G_GINT64_FORMAT, outbuf,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+      GST_BUFFER_OFFSET (outbuf));
+  ret = gst_pad_push (adder->srcpad, outbuf);
+
+  GST_LOG_OBJECT (adder, "pushed outbuf, result = %s", gst_flow_get_name (ret));
+
+  return ret;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    GST_ELEMENT_ERROR (adder, STREAM, FORMAT, (NULL),
+        ("Unknown data received, not negotiated"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+eos:
+  {
+    GST_DEBUG_OBJECT (adder, "no data available, must be EOS");
+    gst_pad_push_event (adder->srcpad, gst_event_new_eos ());
+    return GST_FLOW_UNEXPECTED;
+  }
+}
+
+static GstStateChangeReturn
+gst_adder_change_state (GstElement * element, GstStateChange transition)
+{
+  GstAdder *adder;
+  GstStateChangeReturn ret;
+
+  adder = GST_ADDER (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      adder->segment.position = 0;
+      adder->offset = 0;
+      adder->flush_stop_pending = FALSE;
+      adder->new_segment_pending = TRUE;
+      adder->wait_for_new_segment = FALSE;
+      gst_segment_init (&adder->segment, GST_FORMAT_TIME);
+      gst_collect_pads_start (adder->collect);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      /* need to unblock the collectpads before calling the
+       * parent change_state so that streaming can finish */
+      gst_collect_pads_stop (adder->collect);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "adder", 0,
+      "audio channel mixing element");
+
+  gst_adder_orc_init ();
+
+  if (!gst_element_register (plugin, "adder", GST_RANK_NONE, GST_TYPE_ADDER)) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "adder",
+    "Adds multiple streams",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/adder/gstadder.h b/gst/adder/gstadder.h
new file mode 100644
index 0000000..5a50c03
--- /dev/null
+++ b/gst/adder/gstadder.h
@@ -0,0 +1,91 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *
+ * gstadder.h: Header for GstAdder element
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_ADDER_H__
+#define __GST_ADDER_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstcollectpads.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ADDER            (gst_adder_get_type())
+#define GST_ADDER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ADDER,GstAdder))
+#define GST_IS_ADDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ADDER))
+#define GST_ADDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_ADDER,GstAdderClass))
+#define GST_IS_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_ADDER))
+#define GST_ADDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_ADDER,GstAdderClass))
+
+typedef struct _GstAdder             GstAdder;
+typedef struct _GstAdderClass        GstAdderClass;
+typedef struct _GstAdderInputChannel GstAdderInputChannel;
+
+typedef void (*GstAdderFunction) (gpointer out, gpointer in, guint size);
+
+/**
+ * GstAdder:
+ *
+ * The adder object structure.
+ */
+struct _GstAdder {
+  GstElement      element;
+
+  GstPad         *srcpad;
+  GstCollectPads *collect;
+  /* pad counter, used for creating unique request pads */
+  gint            padcount;
+
+  /* the next are valid for both int and float */
+  GstAudioInfo    info;
+
+  /* function to add samples */
+  GstAdderFunction func;
+
+  /* counters to keep track of timestamps */
+  gint64          offset;
+
+  /* sink event handling */
+  GstPadEventFunction  collect_event;
+  GstSegment      segment;
+  volatile gboolean new_segment_pending;
+  volatile gboolean wait_for_new_segment;
+  /* src event handling */
+  volatile gboolean flush_stop_pending;
+
+  /* target caps */
+  GstCaps *filter_caps;
+
+  /* Pending inline events */
+  GList *pending_events;
+};
+
+struct _GstAdderClass {
+  GstElementClass parent_class;
+};
+
+GType    gst_adder_get_type (void);
+
+G_END_DECLS
+
+
+#endif /* __GST_ADDER_H__ */
diff --git a/gst/adder/gstadderorc-dist.c b/gst/adder/gstadderorc-dist.c
new file mode 100644
index 0000000..b1850f0
--- /dev/null
+++ b/gst/adder/gstadderorc-dist.c
@@ -0,0 +1,835 @@
+
+/* autogenerated from gstadderorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void add_int32 (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1,
+    int n);
+void add_int16 (gint16 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1,
+    int n);
+void add_int8 (gint8 * ORC_RESTRICT d1, const gint8 * ORC_RESTRICT s1, int n);
+void add_uint32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1,
+    int n);
+void add_uint16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1,
+    int n);
+void add_uint8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n);
+void add_float32 (float *ORC_RESTRICT d1, const float *ORC_RESTRICT s1, int n);
+
+void gst_adder_orc_init (void);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* add_int32 */
+#ifdef DISABLE_ORC
+void
+add_int32 (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addssl */
+    var34.i = ORC_CLAMP_SL ((orc_int64) var32.i + (orc_int64) var33.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_int32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addssl */
+    var34.i = ORC_CLAMP_SL ((orc_int64) var32.i + (orc_int64) var33.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_int32;
+void
+add_int32 (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_int32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_int16 */
+#ifdef DISABLE_ORC
+void
+add_int16 (gint16 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_union16 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr0[i];
+    /* 1: loadw */
+    var33 = ptr4[i];
+    /* 2: addssw */
+    var34.i = ORC_CLAMP_SW (var32.i + var33.i);
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_int16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_union16 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr0[i];
+    /* 1: loadw */
+    var33 = ptr4[i];
+    /* 2: addssw */
+    var34.i = ORC_CLAMP_SW (var32.i + var33.i);
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_int16;
+void
+add_int16 (gint16 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_int16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_int8 */
+#ifdef DISABLE_ORC
+void
+add_int8 (gint8 * ORC_RESTRICT d1, const gint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addssb */
+    var34 = ORC_CLAMP_SB (var32 + var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_int8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addssb */
+    var34 = ORC_CLAMP_SB (var32 + var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_int8;
+void
+add_int8 (gint8 * ORC_RESTRICT d1, const gint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_int8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_uint32 */
+#ifdef DISABLE_ORC
+void
+add_uint32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addusl */
+    var34.i =
+        ORC_CLAMP_UL ((orc_int64) (orc_uint32) var32.i +
+        (orc_int64) (orc_uint32) var33.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_uint32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addusl */
+    var34.i =
+        ORC_CLAMP_UL ((orc_int64) (orc_uint32) var32.i +
+        (orc_int64) (orc_uint32) var33.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_uint32;
+void
+add_uint32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_uint32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_uint16 */
+#ifdef DISABLE_ORC
+void
+add_uint16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_union16 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr0[i];
+    /* 1: loadw */
+    var33 = ptr4[i];
+    /* 2: addusw */
+    var34.i = ORC_CLAMP_UW ((orc_uint16) var32.i + (orc_uint16) var33.i);
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_uint16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_union16 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr0[i];
+    /* 1: loadw */
+    var33 = ptr4[i];
+    /* 2: addusw */
+    var34.i = ORC_CLAMP_UW ((orc_uint16) var32.i + (orc_uint16) var33.i);
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_uint16;
+void
+add_uint16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_uint16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_uint8 */
+#ifdef DISABLE_ORC
+void
+add_uint8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addusb */
+    var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_uint8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addusb */
+    var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_uint8;
+void
+add_uint8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_uint8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* add_float32 */
+#ifdef DISABLE_ORC
+void
+add_float32 (float *ORC_RESTRICT d1, const float *ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f + _src2.f;
+      var34.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_add_float32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 1: loadl */
+    var33 = ptr4[i];
+    /* 2: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f + _src2.f;
+      var34.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_add_float32;
+void
+add_float32 (float *ORC_RESTRICT d1, const float *ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_add_float32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+void
+gst_adder_orc_init (void)
+{
+#ifndef DISABLE_ORC
+  {
+    /* add_int32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_int32");
+    orc_program_set_backup_function (p, _backup_add_int32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 4, "s1");
+
+    orc_program_append_2 (p, "addssl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_int32 = p;
+  }
+  {
+    /* add_int16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_int16");
+    orc_program_set_backup_function (p, _backup_add_int16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 2, "s1");
+
+    orc_program_append_2 (p, "addssw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_int16 = p;
+  }
+  {
+    /* add_int8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_int8");
+    orc_program_set_backup_function (p, _backup_add_int8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+
+    orc_program_append_2 (p, "addssb", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_int8 = p;
+  }
+  {
+    /* add_uint32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_uint32");
+    orc_program_set_backup_function (p, _backup_add_uint32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 4, "s1");
+
+    orc_program_append_2 (p, "addusl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_uint32 = p;
+  }
+  {
+    /* add_uint16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_uint16");
+    orc_program_set_backup_function (p, _backup_add_uint16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 2, "s1");
+
+    orc_program_append_2 (p, "addusw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_uint16 = p;
+  }
+  {
+    /* add_uint8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_uint8");
+    orc_program_set_backup_function (p, _backup_add_uint8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+
+    orc_program_append_2 (p, "addusb", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_uint8 = p;
+  }
+  {
+    /* add_float32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "add_float32");
+    orc_program_set_backup_function (p, _backup_add_float32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 4, "s1");
+
+    orc_program_append_2 (p, "addf", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_add_float32 = p;
+  }
+#endif
+}
diff --git a/gst/adder/gstadderorc-dist.h b/gst/adder/gstadderorc-dist.h
new file mode 100644
index 0000000..31ba99e
--- /dev/null
+++ b/gst/adder/gstadderorc-dist.h
@@ -0,0 +1,85 @@
+
+/* autogenerated from gstadderorc.orc */
+
+#ifndef _GSTADDERORC_H_
+#define _GSTADDERORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void gst_adder_orc_init (void);
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void add_int32 (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void add_int16 (gint16 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1, int n);
+void add_int8 (gint8 * ORC_RESTRICT d1, const gint8 * ORC_RESTRICT s1, int n);
+void add_uint32 (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void add_uint16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void add_uint8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void add_float32 (float * ORC_RESTRICT d1, const float * ORC_RESTRICT s1, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/adder/gstadderorc.orc b/gst/adder/gstadderorc.orc
new file mode 100644
index 0000000..f8c3caf
--- /dev/null
+++ b/gst/adder/gstadderorc.orc
@@ -0,0 +1,52 @@
+
+.init gst_adder_orc_init
+
+.function add_int32
+.dest 4 d1 gint32
+.source 4 s1 gint32
+
+addssl d1, d1, s1
+
+
+.function add_int16
+.dest 2 d1 gint16
+.source 2 s1 gint16
+
+addssw d1, d1, s1
+
+
+.function add_int8
+.dest 1 d1 gint8
+.source 1 s1 gint8
+
+addssb d1, d1, s1
+
+
+.function add_uint32
+.dest 4 d1 guint32
+.source 4 s1 guint32
+
+addusl d1, d1, s1
+
+
+.function add_uint16
+.dest 2 d1 guint16
+.source 2 s1 guint16
+
+addusw d1, d1, s1
+
+
+.function add_uint8
+.dest 1 d1 guint8
+.source 1 s1 guint8
+
+addusb d1, d1, s1
+
+
+.function add_float32
+.dest 4 d1 float
+.source 4 s1 float
+
+addf d1, d1, s1
+
+
diff --git a/gst/app/Makefile.am b/gst/app/Makefile.am
new file mode 100644
index 0000000..2170623
--- /dev/null
+++ b/gst/app/Makefile.am
@@ -0,0 +1,21 @@
+plugin_LTLIBRARIES = libgstapp.la
+
+libgstapp_la_SOURCES = gstapp.c
+libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
+libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la
+libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstapp_la_LIBTOOLFLAGS = --tag=disable-static
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstapp -:SHARED libgstapp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstapp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \
+	 -:LDFLAGS $(libgstapp_la_LDFLAGS) \
+	           $(libgstapp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/app/Makefile.in b/gst/app/Makefile.in
new file mode 100644
index 0000000..17bfbcf
--- /dev/null
+++ b/gst/app/Makefile.in
@@ -0,0 +1,765 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/app
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstapp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la
+am_libgstapp_la_OBJECTS = libgstapp_la-gstapp.lo
+libgstapp_la_OBJECTS = $(am_libgstapp_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstapp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstapp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstapp_la_CFLAGS) $(CFLAGS) \
+	$(libgstapp_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstapp_la_SOURCES)
+DIST_SOURCES = $(libgstapp_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstapp.la
+libgstapp_la_SOURCES = gstapp.c
+libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
+libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la
+libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstapp_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/app/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/app/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstapp.la: $(libgstapp_la_OBJECTS) $(libgstapp_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstapp_la_LINK) -rpath $(plugindir) $(libgstapp_la_OBJECTS) $(libgstapp_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapp_la-gstapp.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstapp_la-gstapp.lo: gstapp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_la_CFLAGS) $(CFLAGS) -MT libgstapp_la-gstapp.lo -MD -MP -MF $(DEPDIR)/libgstapp_la-gstapp.Tpo -c -o libgstapp_la-gstapp.lo `test -f 'gstapp.c' || echo '$(srcdir)/'`gstapp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapp_la-gstapp.Tpo $(DEPDIR)/libgstapp_la-gstapp.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstapp.c' object='libgstapp_la-gstapp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstapp_la_CFLAGS) $(CFLAGS) -c -o libgstapp_la-gstapp.lo `test -f 'gstapp.c' || echo '$(srcdir)/'`gstapp.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstapp -:SHARED libgstapp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstapp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \
+	 -:LDFLAGS $(libgstapp_la_LDFLAGS) \
+	           $(libgstapp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/app/gstapp.c b/gst/app/gstapp.c
new file mode 100644
index 0000000..ca54ae4
--- /dev/null
+++ b/gst/app/gstapp.c
@@ -0,0 +1,68 @@
+/* GStreamer
+ * Copyright (C) 2007 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:element-appsrc
+ *
+ * The appsrc element can be used by applications to insert data into a
+ * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+ * external API functions.
+ *
+ * For the documentation of the API, please see the
+ * <link linkend="gst-plugins-base-libs-appsrc">libgstapp</link> section in the
+ * GStreamer Plugins Base Libraries documentation.
+ *
+ * Since: 0.10.22
+ */
+/**
+ * SECTION:element-appsink
+ *
+ * Appsink is a sink plugin that supports many different methods for making
+ * the application get a handle on the GStreamer data in a pipeline. Unlike
+ * most GStreamer elements, Appsink provides external API functions.
+ *
+ * For the documentation of the API, please see the
+ * <link linkend="gst-plugins-base-libs-appsink">libgstapp</link> section in
+ * the GStreamer Plugins Base Libraries documentation.
+ *
+ * Since: 0.10.22
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <gst/app/gstappsrc.h>
+#include <gst/app/gstappsink.h>
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_element_register (plugin, "appsrc", GST_RANK_NONE, GST_TYPE_APP_SRC);
+  gst_element_register (plugin, "appsink", GST_RANK_NONE, GST_TYPE_APP_SINK);
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "app",
+    "Elements used to communicate with applications",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
new file mode 100644
index 0000000..b8849b6
--- /dev/null
+++ b/gst/audioconvert/Makefile.am
@@ -0,0 +1,51 @@
+plugin_LTLIBRARIES = libgstaudioconvert.la
+
+ORC_SOURCE=gstaudioconvertorc
+include $(top_srcdir)/common/orc.mak
+
+libgstaudioconvert_la_SOURCES = \
+	gstaudioconvert.c \
+	audioconvert.c \
+	gstchannelmix.c \
+	gstaudioquantize.c \
+	plugin.c
+nodist_libgstaudioconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
+
+libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstaudioconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudioconvert_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+libgstaudioconvert_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	gstaudioconvert.h \
+	audioconvert.h \
+	gstchannelmix.h \
+	gstaudioquantize.h \
+	gstfastrandom.h \
+	plugin.h
+
+#TESTS = channelmixtest
+#noinst_PROGRAMS = channelmixtest
+
+#channelmixtest_CFLAGS = $(GST_CFLAGS)
+#channelmixtest_LDADD = libgstaudioconvert.la \
+#	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+#	$(GST_LIBS)
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudioconvert_la_SOURCES) \
+	 	   $(nodist_libgstaudioconvert_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \
+	           $(libgstaudioconvert_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/audioconvert/Makefile.in b/gst/audioconvert/Makefile.in
new file mode 100644
index 0000000..b6fcd5a
--- /dev/null
+++ b/gst/audioconvert/Makefile.in
@@ -0,0 +1,926 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+subdir = gst/audioconvert
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstaudioconvert_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstaudioconvert_la_OBJECTS =  \
+	libgstaudioconvert_la-gstaudioconvert.lo \
+	libgstaudioconvert_la-audioconvert.lo \
+	libgstaudioconvert_la-gstchannelmix.lo \
+	libgstaudioconvert_la-gstaudioquantize.lo \
+	libgstaudioconvert_la-plugin.lo
+am__objects_1 = libgstaudioconvert_la-tmp-orc.lo
+nodist_libgstaudioconvert_la_OBJECTS = $(am__objects_1)
+libgstaudioconvert_la_OBJECTS = $(am_libgstaudioconvert_la_OBJECTS) \
+	$(nodist_libgstaudioconvert_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstaudioconvert_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) \
+	$(libgstaudioconvert_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstaudioconvert_la_SOURCES) \
+	$(nodist_libgstaudioconvert_la_SOURCES)
+DIST_SOURCES = $(libgstaudioconvert_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstaudioconvert.la
+ORC_SOURCE = gstaudioconvertorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstaudioconvert_la_SOURCES = \
+	gstaudioconvert.c \
+	audioconvert.c \
+	gstchannelmix.c \
+	gstaudioquantize.c \
+	plugin.c
+
+nodist_libgstaudioconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstaudioconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudioconvert_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+
+libgstaudioconvert_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstaudioconvert.h \
+	audioconvert.h \
+	gstchannelmix.h \
+	gstaudioquantize.h \
+	gstfastrandom.h \
+	plugin.h
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioconvert/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/audioconvert/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstaudioconvert.la: $(libgstaudioconvert_la_OBJECTS) $(libgstaudioconvert_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstaudioconvert_la_LINK) -rpath $(plugindir) $(libgstaudioconvert_la_OBJECTS) $(libgstaudioconvert_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-audioconvert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstaudioconvert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-plugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-tmp-orc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstaudioconvert_la-gstaudioconvert.lo: gstaudioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-gstaudioconvert.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-gstaudioconvert.Tpo -c -o libgstaudioconvert_la-gstaudioconvert.lo `test -f 'gstaudioconvert.c' || echo '$(srcdir)/'`gstaudioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-gstaudioconvert.Tpo $(DEPDIR)/libgstaudioconvert_la-gstaudioconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioconvert.c' object='libgstaudioconvert_la-gstaudioconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstaudioconvert.lo `test -f 'gstaudioconvert.c' || echo '$(srcdir)/'`gstaudioconvert.c
+
+libgstaudioconvert_la-audioconvert.lo: audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-audioconvert.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-audioconvert.Tpo -c -o libgstaudioconvert_la-audioconvert.lo `test -f 'audioconvert.c' || echo '$(srcdir)/'`audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-audioconvert.Tpo $(DEPDIR)/libgstaudioconvert_la-audioconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='audioconvert.c' object='libgstaudioconvert_la-audioconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-audioconvert.lo `test -f 'audioconvert.c' || echo '$(srcdir)/'`audioconvert.c
+
+libgstaudioconvert_la-gstchannelmix.lo: gstchannelmix.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-gstchannelmix.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Tpo -c -o libgstaudioconvert_la-gstchannelmix.lo `test -f 'gstchannelmix.c' || echo '$(srcdir)/'`gstchannelmix.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Tpo $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstchannelmix.c' object='libgstaudioconvert_la-gstchannelmix.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstchannelmix.lo `test -f 'gstchannelmix.c' || echo '$(srcdir)/'`gstchannelmix.c
+
+libgstaudioconvert_la-gstaudioquantize.lo: gstaudioquantize.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-gstaudioquantize.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Tpo -c -o libgstaudioconvert_la-gstaudioquantize.lo `test -f 'gstaudioquantize.c' || echo '$(srcdir)/'`gstaudioquantize.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Tpo $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioquantize.c' object='libgstaudioconvert_la-gstaudioquantize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstaudioquantize.lo `test -f 'gstaudioquantize.c' || echo '$(srcdir)/'`gstaudioquantize.c
+
+libgstaudioconvert_la-plugin.lo: plugin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-plugin.Tpo -c -o libgstaudioconvert_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-plugin.Tpo $(DEPDIR)/libgstaudioconvert_la-plugin.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plugin.c' object='libgstaudioconvert_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+
+libgstaudioconvert_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Tpo -c -o libgstaudioconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Tpo $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstaudioconvert_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-pluginLTLIBRARIES ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pluginLTLIBRARIES install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+#TESTS = channelmixtest
+#noinst_PROGRAMS = channelmixtest
+
+#channelmixtest_CFLAGS = $(GST_CFLAGS)
+#channelmixtest_LDADD = libgstaudioconvert.la \
+#	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+#	$(GST_LIBS)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudioconvert_la_SOURCES) \
+	 	   $(nodist_libgstaudioconvert_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \
+	           $(libgstaudioconvert_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c
new file mode 100644
index 0000000..97dee20
--- /dev/null
+++ b/gst/audioconvert/audioconvert.c
@@ -0,0 +1,792 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim at fluendo dot com>
+ *
+ * audioconvert.c: Convert audio to different audio formats automatically
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+#include <string.h>
+
+#include "gstchannelmix.h"
+#include "gstaudioquantize.h"
+#include "audioconvert.h"
+#include "gstaudioconvertorc.h"
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define orc_audio_convert_unpack_u16_le orc_audio_convert_unpack_u16
+#define orc_audio_convert_unpack_u16_be orc_audio_convert_unpack_u16_swap
+#define orc_audio_convert_unpack_s16_le orc_audio_convert_unpack_s16
+#define orc_audio_convert_unpack_s16_be orc_audio_convert_unpack_s16_swap
+#define orc_audio_convert_unpack_u32_le orc_audio_convert_unpack_u32
+#define orc_audio_convert_unpack_u32_be orc_audio_convert_unpack_u32_swap
+#define orc_audio_convert_unpack_s32_le orc_audio_convert_unpack_s32
+#define orc_audio_convert_unpack_s32_be orc_audio_convert_unpack_s32_swap
+#define orc_audio_convert_unpack_float_le orc_audio_convert_unpack_float_s32
+#define orc_audio_convert_unpack_float_be orc_audio_convert_unpack_float_s32_swap
+#define orc_audio_convert_unpack_double_le orc_audio_convert_unpack_double_s32
+#define orc_audio_convert_unpack_double_be orc_audio_convert_unpack_double_s32_swap
+#define orc_audio_convert_unpack_float_hq_le orc_audio_convert_unpack_float_double
+#define orc_audio_convert_unpack_float_hq_be orc_audio_convert_unpack_float_double_swap
+#define orc_audio_convert_unpack_double_hq_le orc_audio_convert_unpack_double_double
+#define orc_audio_convert_unpack_double_hq_be orc_audio_convert_unpack_double_double_swap
+#define orc_audio_convert_unpack_u8_float orc_audio_convert_unpack_u8_double
+#define orc_audio_convert_unpack_u16_le_float orc_audio_convert_unpack_u16_double
+#define orc_audio_convert_unpack_u16_be_float orc_audio_convert_unpack_u16_double_swap
+#define orc_audio_convert_unpack_u32_le_float orc_audio_convert_unpack_u32_double
+#define orc_audio_convert_unpack_u32_be_float orc_audio_convert_unpack_u32_double_swap
+#define orc_audio_convert_unpack_s8_float orc_audio_convert_unpack_s8_double
+#define orc_audio_convert_unpack_s16_le_float orc_audio_convert_unpack_s16_double
+#define orc_audio_convert_unpack_s16_be_float orc_audio_convert_unpack_s16_double_swap
+#define orc_audio_convert_unpack_s32_le_float orc_audio_convert_unpack_s32_double
+#define orc_audio_convert_unpack_s32_be_float orc_audio_convert_unpack_s32_double_swap
+#define orc_audio_convert_pack_u8 orc_audio_convert_pack_u8
+#define orc_audio_convert_pack_u16_le orc_audio_convert_pack_u16
+#define orc_audio_convert_pack_u16_be orc_audio_convert_pack_u16_swap
+#define orc_audio_convert_pack_s16_le orc_audio_convert_pack_s16
+#define orc_audio_convert_pack_s16_be orc_audio_convert_pack_s16_swap
+#define orc_audio_convert_pack_u32_le orc_audio_convert_pack_u32
+#define orc_audio_convert_pack_u32_be orc_audio_convert_pack_u32_swap
+#define orc_audio_convert_pack_s32_le orc_audio_convert_pack_s32
+#define orc_audio_convert_pack_s32_be orc_audio_convert_pack_s32_swap
+#define orc_audio_convert_pack_float_le orc_audio_convert_pack_s32_float
+#define orc_audio_convert_pack_float_be orc_audio_convert_pack_s32_float_swap
+#define orc_audio_convert_pack_double_le orc_audio_convert_pack_s32_double
+#define orc_audio_convert_pack_double_be orc_audio_convert_pack_s32_double_swap
+#define orc_audio_convert_pack_float_hq_le orc_audio_convert_pack_double_float
+#define orc_audio_convert_pack_float_hq_be orc_audio_convert_pack_double_float_swap
+#define orc_audio_convert_pack_s8_float orc_audio_convert_pack_double_s8
+#define orc_audio_convert_pack_s16_le_float orc_audio_convert_pack_double_s16
+#define orc_audio_convert_pack_s16_be_float orc_audio_convert_pack_double_s16_swap
+#define orc_audio_convert_pack_s32_le_float orc_audio_convert_pack_double_s32
+#define orc_audio_convert_pack_s32_be_float orc_audio_convert_pack_double_s32_swap
+#define orc_audio_convert_pack_u8_float orc_audio_convert_pack_double_u8
+#define orc_audio_convert_pack_u16_le_float orc_audio_convert_pack_double_u16
+#define orc_audio_convert_pack_u16_be_float orc_audio_convert_pack_double_u16_swap
+#define orc_audio_convert_pack_u32_le_float orc_audio_convert_pack_double_u32
+#define orc_audio_convert_pack_u32_be_float orc_audio_convert_pack_double_u32_swap
+#else
+#define orc_audio_convert_unpack_u16_be orc_audio_convert_unpack_u16
+#define orc_audio_convert_unpack_u16_le orc_audio_convert_unpack_u16_swap
+#define orc_audio_convert_unpack_s16_be orc_audio_convert_unpack_s16
+#define orc_audio_convert_unpack_s16_le orc_audio_convert_unpack_s16_swap
+#define orc_audio_convert_unpack_u32_be orc_audio_convert_unpack_u32
+#define orc_audio_convert_unpack_u32_le orc_audio_convert_unpack_u32_swap
+#define orc_audio_convert_unpack_s32_be orc_audio_convert_unpack_s32
+#define orc_audio_convert_unpack_s32_le orc_audio_convert_unpack_s32_swap
+#define orc_audio_convert_unpack_float_be orc_audio_convert_unpack_float_s32
+#define orc_audio_convert_unpack_float_le orc_audio_convert_unpack_float_s32_swap
+#define orc_audio_convert_unpack_double_be orc_audio_convert_unpack_double_s32
+#define orc_audio_convert_unpack_double_le orc_audio_convert_unpack_double_s32_swap
+#define orc_audio_convert_unpack_float_hq_be orc_audio_convert_unpack_float_double
+#define orc_audio_convert_unpack_float_hq_le orc_audio_convert_unpack_float_double_swap
+#define orc_audio_convert_unpack_double_hq_be orc_audio_convert_unpack_double_double
+#define orc_audio_convert_unpack_double_hq_le orc_audio_convert_unpack_double_double_swap
+#define orc_audio_convert_unpack_u8_float orc_audio_convert_unpack_u8_double
+#define orc_audio_convert_unpack_u16_be_float orc_audio_convert_unpack_u16_double
+#define orc_audio_convert_unpack_u16_le_float orc_audio_convert_unpack_u16_double_swap
+#define orc_audio_convert_unpack_u32_be_float orc_audio_convert_unpack_u32_double
+#define orc_audio_convert_unpack_u32_le_float orc_audio_convert_unpack_u32_double_swap
+#define orc_audio_convert_unpack_s8_float orc_audio_convert_unpack_s8_double
+#define orc_audio_convert_unpack_s16_be_float orc_audio_convert_unpack_s16_double
+#define orc_audio_convert_unpack_s16_le_float orc_audio_convert_unpack_s16_double_swap
+#define orc_audio_convert_unpack_s32_be_float orc_audio_convert_unpack_s32_double
+#define orc_audio_convert_unpack_s32_le_float orc_audio_convert_unpack_s32_double_swap
+#define orc_audio_convert_pack_u8 orc_audio_convert_pack_u8
+#define orc_audio_convert_pack_u16_be orc_audio_convert_pack_u16
+#define orc_audio_convert_pack_u16_le orc_audio_convert_pack_u16_swap
+#define orc_audio_convert_pack_s16_be orc_audio_convert_pack_s16
+#define orc_audio_convert_pack_s16_le orc_audio_convert_pack_s16_swap
+#define orc_audio_convert_pack_u32_be orc_audio_convert_pack_u32
+#define orc_audio_convert_pack_u32_le orc_audio_convert_pack_u32_swap
+#define orc_audio_convert_pack_s32_be orc_audio_convert_pack_s32
+#define orc_audio_convert_pack_s32_le orc_audio_convert_pack_s32_swap
+#define orc_audio_convert_pack_float_be orc_audio_convert_pack_s32_float
+#define orc_audio_convert_pack_float_le orc_audio_convert_pack_s32_float_swap
+#define orc_audio_convert_pack_double_be orc_audio_convert_pack_s32_double
+#define orc_audio_convert_pack_double_le orc_audio_convert_pack_s32_double_swap
+#define orc_audio_convert_pack_float_hq_be orc_audio_convert_pack_double_float
+#define orc_audio_convert_pack_float_hq_le orc_audio_convert_pack_double_float_swap
+#define orc_audio_convert_pack_s8_float orc_audio_convert_pack_double_s8
+#define orc_audio_convert_pack_s16_be_float orc_audio_convert_pack_double_s16
+#define orc_audio_convert_pack_s16_le_float orc_audio_convert_pack_double_s16_swap
+#define orc_audio_convert_pack_s32_be_float orc_audio_convert_pack_double_s32
+#define orc_audio_convert_pack_s32_le_float orc_audio_convert_pack_double_s32_swap
+#define orc_audio_convert_pack_u8_float orc_audio_convert_pack_double_u8
+#define orc_audio_convert_pack_u16_be_float orc_audio_convert_pack_double_u16
+#define orc_audio_convert_pack_u16_le_float orc_audio_convert_pack_double_u16_swap
+#define orc_audio_convert_pack_u32_be_float orc_audio_convert_pack_double_u32
+#define orc_audio_convert_pack_u32_le_float orc_audio_convert_pack_double_u32_swap
+#endif
+
+/* sign bit in the intermediate format */
+#define SIGNED  (1U<<31)
+
+/*** 
+ * unpack code
+ */
+#define MAKE_UNPACK_FUNC_NAME(name)                                     \
+audio_convert_unpack_##name
+#define MAKE_ORC_UNPACK_FUNC_NAME(name)                                 \
+orc_audio_convert_unpack_##name
+
+/* unpack from integer to signed integer 32 */
+#define MAKE_UNPACK_FUNC_II(name, stride, sign, READ_FUNC)              \
+static void                                                             \
+MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
+        gint scale, gint count)                                         \
+{                                                                       \
+  for (;count; count--) {                                               \
+    *dst++ = (((gint32) READ_FUNC (src)) << scale) ^ (sign);            \
+    src+=stride;                                                        \
+  }                                                                     \
+}
+
+/* unpack from integer to signed integer 32 with orc */
+#define MAKE_UNPACK_FUNC_ORC_II(name, stride, sign, READ_FUNC)             \
+static void                                                             \
+MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
+        gint scale, gint count)                                         \
+{                                                                       \
+  MAKE_ORC_UNPACK_FUNC_NAME (name) (dst, src, scale, count);            \
+}
+
+/* unpack from float to signed integer 32 */
+#define MAKE_UNPACK_FUNC_FI(name, type, READ_FUNC)                            \
+static void                                                                   \
+MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
+{                                                                             \
+  gdouble temp;                                                               \
+                                                                              \
+  for (; count; count--) {                                                    \
+    /* blow up to 32 bit */                                                   \
+    temp = floor ((READ_FUNC (*src++) * 2147483647.0) + 0.5);                 \
+    *dst++ = (gint32) CLAMP (temp, G_MININT32, G_MAXINT32);                   \
+  }                                                                           \
+}
+
+/* unpack from float to signed integer 32 with orc */
+#define MAKE_UNPACK_FUNC_ORC_FI(name, type, READ_FUNC)                        \
+static void                                                                   \
+MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
+{                                                                             \
+  MAKE_ORC_UNPACK_FUNC_NAME (name) ((guint32 *) dst, src, count);                         \
+}
+
+/* unpack from float to float 64 (double) */
+#define MAKE_UNPACK_FUNC_FF(name, type, FUNC)                                 \
+static void                                                                   \
+MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
+    gint count)                                                               \
+{                                                                             \
+  for (; count; count--)                                                      \
+    *dst++ = (gdouble) FUNC (*src++);                                         \
+}
+
+/* unpack from float to float 64 (double) with orc */
+#define MAKE_UNPACK_FUNC_ORC_FF(name, type, FUNC)                                 \
+static void                                                                   \
+MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
+    gint count)                                                               \
+{                                                                             \
+  MAKE_ORC_UNPACK_FUNC_NAME (name) ((gdouble *) dst, src, count);             \
+}
+
+/* unpack from int to float 64 (double) */
+#define MAKE_UNPACK_FUNC_IF(name, stride, sign, READ_FUNC)                    \
+static void                                                                   \
+MAKE_UNPACK_FUNC_NAME (name) (guint8 * src, gdouble * dst, gint scale,        \
+    gint count)                                                               \
+{                                                                             \
+  gdouble tmp;                                                                \
+  for (; count; count--) {                                                    \
+    tmp = (gdouble) ((((gint32) READ_FUNC (src)) << scale) ^ (sign));         \
+    *dst++ = tmp * (1.0 / 2147483647.0);                                      \
+    src += stride;                                                            \
+  }                                                                           \
+}
+
+#define MAKE_UNPACK_FUNC_ORC_IF(name, stride, sign, READ_FUNC)          \
+static void                                                             \
+MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gdouble *dst,                \
+        gint scale, gint count)                                         \
+{                                                                       \
+  MAKE_ORC_UNPACK_FUNC_NAME (name) (dst, src, scale, count);            \
+}
+
+#define READ8(p)          GST_READ_UINT8(p)
+#define READ16_FROM_LE(p) GST_READ_UINT16_LE (p)
+#define READ16_FROM_BE(p) GST_READ_UINT16_BE (p)
+#define READ24_FROM_LE(p) (p[0] | (p[1] << 8) | (p[2] << 16))
+#define READ24_FROM_BE(p) (p[2] | (p[1] << 8) | (p[0] << 16))
+#define READ32_FROM_LE(p) GST_READ_UINT32_LE (p)
+#define READ32_FROM_BE(p) GST_READ_UINT32_BE (p)
+
+
+
+MAKE_UNPACK_FUNC_ORC_II (u8, 1, SIGNED, READ8);
+MAKE_UNPACK_FUNC_ORC_II (s8, 1, 0, READ8);
+MAKE_UNPACK_FUNC_ORC_II (u16_le, 2, SIGNED, READ16_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_II (s16_le, 2, 0, READ16_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_II (u16_be, 2, SIGNED, READ16_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_II (s16_be, 2, 0, READ16_FROM_BE);
+MAKE_UNPACK_FUNC_II (u24_le, 3, SIGNED, READ24_FROM_LE);
+MAKE_UNPACK_FUNC_II (s24_le, 3, 0, READ24_FROM_LE);
+MAKE_UNPACK_FUNC_II (u24_be, 3, SIGNED, READ24_FROM_BE);
+MAKE_UNPACK_FUNC_II (s24_be, 3, 0, READ24_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_II (u32_le, 4, SIGNED, READ32_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_II (s32_le, 4, 0, READ32_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_II (u32_be, 4, SIGNED, READ32_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_II (s32_be, 4, 0, READ32_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_FI (float_le, gfloat, GFLOAT_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_FI (float_be, gfloat, GFLOAT_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_FI (double_le, gdouble, GDOUBLE_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_FI (double_be, gdouble, GDOUBLE_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_FF (float_hq_le, gfloat, GFLOAT_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_FF (float_hq_be, gfloat, GFLOAT_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_FF (double_hq_le, gdouble, GDOUBLE_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_FF (double_hq_be, gdouble, GDOUBLE_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_IF (u8_float, 1, SIGNED, READ8);
+MAKE_UNPACK_FUNC_ORC_IF (s8_float, 1, 0, READ8);
+MAKE_UNPACK_FUNC_ORC_IF (u16_le_float, 2, SIGNED, READ16_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_IF (s16_le_float, 2, 0, READ16_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_IF (u16_be_float, 2, SIGNED, READ16_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_IF (s16_be_float, 2, 0, READ16_FROM_BE);
+MAKE_UNPACK_FUNC_IF (u24_le_float, 3, SIGNED, READ24_FROM_LE);
+MAKE_UNPACK_FUNC_IF (s24_le_float, 3, 0, READ24_FROM_LE);
+MAKE_UNPACK_FUNC_IF (u24_be_float, 3, SIGNED, READ24_FROM_BE);
+MAKE_UNPACK_FUNC_IF (s24_be_float, 3, 0, READ24_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_IF (u32_le_float, 4, SIGNED, READ32_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_IF (s32_le_float, 4, 0, READ32_FROM_LE);
+MAKE_UNPACK_FUNC_ORC_IF (u32_be_float, 4, SIGNED, READ32_FROM_BE);
+MAKE_UNPACK_FUNC_ORC_IF (s32_be_float, 4, 0, READ32_FROM_BE);
+
+/* One of the double_hq_* functions generated above is ineffecient, but it's
+ * never used anyway.  The same is true for one of the s32_* functions. */
+
+/*** 
+ * packing code
+ */
+#define MAKE_PACK_FUNC_NAME(name)                                       \
+audio_convert_pack_##name
+#define MAKE_PACK_FUNC_NAME_ORC(name)                                       \
+orc_audio_convert_pack_##name
+
+/*
+ * These functions convert the signed 32 bit integers to the
+ * target format. For this to work the following steps are done:
+ *
+ * 1) If the output format is unsigned we will XOR the sign bit. This
+ *    will do the same as if we add 1<<31.
+ * 2) Afterwards we shift to the target depth. It's necessary to left-shift
+ *    on signed values here to get arithmetical shifting.
+ * 3) This is then written into our target array by the corresponding write
+ *    function for the target width.
+ */
+
+/* pack from signed integer 32 to integer using Orc */
+#define MAKE_PACK_FUNC_ORC_II(name, stride, sign, WRITE_FUNC)           \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
+        gint scale, gint count)                                         \
+{                                                                       \
+  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
+}
+
+/* pack from signed integer 32 to integer */
+#define MAKE_PACK_FUNC_II(name, stride, sign, WRITE_FUNC)               \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
+        gint scale, gint count)                                         \
+{                                                                       \
+  gint32 tmp;                                                           \
+  for (;count; count--) {                                               \
+    tmp = (*src++ ^ (sign)) >> scale;                                   \
+    WRITE_FUNC (dst, tmp);                                              \
+    dst += stride;                                                      \
+  }                                                                     \
+}
+
+/* pack from signed integer 32 to float using orc */
+#define MAKE_PACK_FUNC_ORC_IF(name, type, FUNC)                         \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
+    gint count)                                                         \
+{                                                                       \
+  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, count);                     \
+}
+
+/* pack from signed integer 32 to float */
+#define MAKE_PACK_FUNC_IF(name, type, FUNC)                             \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
+    gint count)                                                         \
+{                                                                       \
+  for (; count; count--)                                                \
+    *dst++ = FUNC ((type) ((*src++) * (1.0 / 2147483647.0)));           \
+}
+
+/* pack from float 64 (double) to float */
+#define MAKE_PACK_FUNC_FF(name, type, FUNC)                             \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
+    gint count)                                                         \
+{                                                                       \
+  for (; count; count--)                                                \
+    *dst++ = FUNC ((type) (*src++));                                    \
+}
+
+/* pack from float 64 (double) to float with orc */
+#define MAKE_PACK_FUNC_ORC_FF(name, type, FUNC)                             \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
+    gint count)                                                         \
+{                                                                       \
+  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, count);                     \
+}
+
+/* pack from float 64 (double) to signed int.
+ * the floats are already in the correct range. Only a cast is needed.
+ */
+#define MAKE_PACK_FUNC_FI_S(name, stride, WRITE_FUNC)                   \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+    gint count)                                                         \
+{                                                                       \
+  gint32 tmp;                                                           \
+  for (; count; count--) {                                              \
+    tmp = (gint32) (*src);                                              \
+    WRITE_FUNC (dst, tmp);                                              \
+    src++;                                                              \
+    dst += stride;                                                      \
+  }                                                                     \
+}
+
+/* pack from float 64 (double) to unsigned int.
+ * the floats are already in the correct range. Only a cast is needed
+ * and an addition of 2^(target_depth-1) to get in the correct unsigned
+ * range. */
+#define MAKE_PACK_FUNC_FI_U(name, stride, WRITE_FUNC)                   \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+    gint count)                                                         \
+{                                                                       \
+  guint32 tmp;                                                          \
+  gdouble limit = (1U<<(32-scale-1));                                   \
+  for (; count; count--) {                                              \
+    tmp = (guint32) (*src + limit);                                     \
+    WRITE_FUNC (dst, tmp);                                              \
+    src++;                                                              \
+    dst += stride;                                                      \
+  }                                                                     \
+}
+
+/* pack from float 64 (double) to signed int with orc.
+ * the floats are already in the correct range. Only a cast is needed.
+ */
+#define MAKE_PACK_FUNC_ORC_FI_S(name, stride, WRITE_FUNC)               \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+    gint count)                                                         \
+{                                                                       \
+  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
+}
+
+/* pack from float 64 (double) to unsigned int with orc.
+ * the floats are already in the correct range. Only a cast is needed.
+ */
+#define MAKE_PACK_FUNC_ORC_FI_U(name, stride, WRITE_FUNC)               \
+static void                                                             \
+MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+    gint count)                                                         \
+{                                                                       \
+  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
+}
+
+#define WRITE8(p, v)       GST_WRITE_UINT8 (p, v)
+#define WRITE16_TO_LE(p,v) GST_WRITE_UINT16_LE (p, (guint16)(v))
+#define WRITE16_TO_BE(p,v) GST_WRITE_UINT16_BE (p, (guint16)(v))
+#define WRITE24_TO_LE(p,v) p[0] = v & 0xff; p[1] = (v >> 8) & 0xff; p[2] = (v >> 16) & 0xff
+#define WRITE24_TO_BE(p,v) p[2] = v & 0xff; p[1] = (v >> 8) & 0xff; p[0] = (v >> 16) & 0xff
+#define WRITE32_TO_LE(p,v) GST_WRITE_UINT32_LE (p, (guint32)(v))
+#define WRITE32_TO_BE(p,v) GST_WRITE_UINT32_BE (p, (guint32)(v))
+
+MAKE_PACK_FUNC_ORC_II (u8, 1, SIGNED, WRITE8);
+MAKE_PACK_FUNC_ORC_II (s8, 1, 0, WRITE8);
+MAKE_PACK_FUNC_ORC_II (u16_le, 2, SIGNED, WRITE16_TO_LE);
+MAKE_PACK_FUNC_ORC_II (s16_le, 2, 0, WRITE16_TO_LE);
+MAKE_PACK_FUNC_ORC_II (u16_be, 2, SIGNED, WRITE16_TO_BE);
+MAKE_PACK_FUNC_ORC_II (s16_be, 2, 0, WRITE16_TO_BE);
+MAKE_PACK_FUNC_II (u24_le, 3, SIGNED, WRITE24_TO_LE);
+MAKE_PACK_FUNC_II (s24_le, 3, 0, WRITE24_TO_LE);
+MAKE_PACK_FUNC_II (u24_be, 3, SIGNED, WRITE24_TO_BE);
+MAKE_PACK_FUNC_II (s24_be, 3, 0, WRITE24_TO_BE);
+MAKE_PACK_FUNC_ORC_II (u32_le, 4, SIGNED, WRITE32_TO_LE);
+MAKE_PACK_FUNC_ORC_II (s32_le, 4, 0, WRITE32_TO_LE);
+MAKE_PACK_FUNC_ORC_II (u32_be, 4, SIGNED, WRITE32_TO_BE);
+MAKE_PACK_FUNC_ORC_II (s32_be, 4, 0, WRITE32_TO_BE);
+MAKE_PACK_FUNC_ORC_IF (float_le, gfloat, GFLOAT_TO_LE);
+MAKE_PACK_FUNC_ORC_IF (float_be, gfloat, GFLOAT_TO_BE);
+MAKE_PACK_FUNC_ORC_IF (double_le, gdouble, GDOUBLE_TO_LE);
+MAKE_PACK_FUNC_ORC_IF (double_be, gdouble, GDOUBLE_TO_BE);
+MAKE_PACK_FUNC_ORC_FF (float_hq_le, gfloat, GFLOAT_TO_LE);
+MAKE_PACK_FUNC_ORC_FF (float_hq_be, gfloat, GFLOAT_TO_BE);
+MAKE_PACK_FUNC_ORC_FI_U (u8_float, 1, WRITE8);
+MAKE_PACK_FUNC_ORC_FI_S (s8_float, 1, WRITE8);
+MAKE_PACK_FUNC_ORC_FI_U (u16_le_float, 2, WRITE16_TO_LE);
+MAKE_PACK_FUNC_ORC_FI_S (s16_le_float, 2, WRITE16_TO_LE);
+MAKE_PACK_FUNC_ORC_FI_U (u16_be_float, 2, WRITE16_TO_BE);
+MAKE_PACK_FUNC_ORC_FI_S (s16_be_float, 2, WRITE16_TO_BE);
+MAKE_PACK_FUNC_FI_U (u24_le_float, 3, WRITE24_TO_LE);
+MAKE_PACK_FUNC_FI_S (s24_le_float, 3, WRITE24_TO_LE);
+MAKE_PACK_FUNC_FI_U (u24_be_float, 3, WRITE24_TO_BE);
+MAKE_PACK_FUNC_FI_S (s24_be_float, 3, WRITE24_TO_BE);
+MAKE_PACK_FUNC_ORC_FI_U (u32_le_float, 4, WRITE32_TO_LE);
+MAKE_PACK_FUNC_ORC_FI_S (s32_le_float, 4, WRITE32_TO_LE);
+MAKE_PACK_FUNC_ORC_FI_U (u32_be_float, 4, WRITE32_TO_BE);
+MAKE_PACK_FUNC_ORC_FI_S (s32_be_float, 4, WRITE32_TO_BE);
+
+/* For double_hq, packing and unpacking is the same, so we reuse the unpacking
+ * functions here. */
+#define audio_convert_pack_double_hq_le MAKE_UNPACK_FUNC_NAME (double_hq_le)
+#define audio_convert_pack_double_hq_be MAKE_UNPACK_FUNC_NAME (double_hq_be)
+
+static AudioConvertUnpack unpack_funcs[] = {
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_hq_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_hq_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_hq_le),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_hq_be),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_be_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_be_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_be_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_be_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_le_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_be_float),
+  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be_float),
+};
+
+static AudioConvertPack pack_funcs[] = {
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_hq_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_hq_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_hq_le),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_hq_be),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_be_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_be_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_be_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_be_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_le_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_be_float),
+  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_be_float),
+};
+
+#define DOUBLE_INTERMEDIATE_FORMAT(ctx)                   \
+    ((!GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->in.finfo) &&    \
+      !GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) ||  \
+     (ctx->ns != NOISE_SHAPING_NONE))
+
+static gint
+audio_convert_get_func_index (AudioConvertCtx * ctx,
+    const GstAudioFormatInfo * fmt)
+{
+  gint index = 0;
+
+  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (fmt)) {
+    index += (GST_AUDIO_FORMAT_INFO_WIDTH (fmt) / 8 - 1) * 4;
+    index += GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN (fmt) ? 0 : 2;
+    index += GST_AUDIO_FORMAT_INFO_IS_SIGNED (fmt) ? 1 : 0;
+    index += (ctx->ns == NOISE_SHAPING_NONE) ? 0 : 24;
+  } else {
+    /* this is float/double */
+    index = 16;
+    index += (GST_AUDIO_FORMAT_INFO_WIDTH (fmt) == 32) ? 0 : 2;
+    index += GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN (fmt) ? 0 : 1;
+    index += (DOUBLE_INTERMEDIATE_FORMAT (ctx)) ? 4 : 0;
+  }
+
+  return index;
+}
+
+static inline gboolean
+check_default (AudioConvertCtx * ctx, const GstAudioFormatInfo * fmt)
+{
+  if (!DOUBLE_INTERMEDIATE_FORMAT (ctx)) {
+    return GST_AUDIO_FORMAT_INFO_FORMAT (fmt) == GST_AUDIO_FORMAT_S32;
+  } else {
+    return GST_AUDIO_FORMAT_INFO_FORMAT (fmt) == GST_AUDIO_FORMAT_F64;
+  }
+}
+
+gboolean
+audio_convert_prepare_context (AudioConvertCtx * ctx, GstAudioInfo * in,
+    GstAudioInfo * out, GstAudioConvertDithering dither,
+    GstAudioConvertNoiseShaping ns)
+{
+  gint idx_in, idx_out;
+  gint in_depth, out_depth;
+
+  g_return_val_if_fail (ctx != NULL, FALSE);
+  g_return_val_if_fail (in != NULL, FALSE);
+  g_return_val_if_fail (out != NULL, FALSE);
+
+  /* first clean the existing context */
+  audio_convert_clean_context (ctx);
+
+  ctx->in = *in;
+  ctx->out = *out;
+
+  in_depth = GST_AUDIO_FORMAT_INFO_DEPTH (in->finfo);
+  out_depth = GST_AUDIO_FORMAT_INFO_DEPTH (out->finfo);
+
+  /* Don't dither or apply noise shaping if target depth is bigger than 20 bits
+   * as DA converters only can do a SNR up to 20 bits in reality.
+   * Also don't dither or apply noise shaping if target depth is larger than
+   * source depth. */
+  if (out_depth <= 20 && (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo)
+          || in_depth >= out_depth)) {
+    ctx->dither = dither;
+    ctx->ns = ns;
+  } else {
+    ctx->dither = DITHER_NONE;
+    ctx->ns = NOISE_SHAPING_NONE;
+  }
+
+  /* Use simple error feedback when output sample rate is smaller than
+   * 32000 as the other methods might move the noise to audible ranges */
+  if (ctx->ns > NOISE_SHAPING_ERROR_FEEDBACK && out->rate < 32000)
+    ctx->ns = NOISE_SHAPING_ERROR_FEEDBACK;
+
+  gst_channel_mix_setup_matrix (ctx);
+
+  idx_in = audio_convert_get_func_index (ctx, in->finfo);
+  ctx->unpack = unpack_funcs[idx_in];
+
+  idx_out = audio_convert_get_func_index (ctx, out->finfo);
+  ctx->pack = pack_funcs[idx_out];
+
+  /* if both formats are float/double or we use noise shaping use double as
+   * intermediate format and and switch mixing */
+  if (!DOUBLE_INTERMEDIATE_FORMAT (ctx)) {
+    GST_INFO ("use int mixing");
+    ctx->channel_mix = (AudioConvertMix) gst_channel_mix_mix_int;
+  } else {
+    GST_INFO ("use float mixing");
+    ctx->channel_mix = (AudioConvertMix) gst_channel_mix_mix_float;
+  }
+  GST_INFO ("unitsizes: %d -> %d", in->bpf, out->bpf);
+
+  /* check if input is in default format */
+  ctx->in_default = check_default (ctx, in->finfo);
+  /* check if channel mixer is passthrough */
+  ctx->mix_passthrough = gst_channel_mix_passthrough (ctx);
+  /* check if output is in default format */
+  ctx->out_default = check_default (ctx, out->finfo);
+
+  GST_INFO ("in default %d, mix passthrough %d, out default %d",
+      ctx->in_default, ctx->mix_passthrough, ctx->out_default);
+
+  ctx->in_scale =
+      GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo) ? (32 - in_depth) : 0;
+  ctx->out_scale =
+      GST_AUDIO_FORMAT_INFO_IS_INTEGER (out->finfo) ? (32 - out_depth) : 0;
+
+  gst_audio_quantize_setup (ctx);
+
+  return TRUE;
+}
+
+gboolean
+audio_convert_clean_context (AudioConvertCtx * ctx)
+{
+  g_return_val_if_fail (ctx != NULL, FALSE);
+
+  gst_audio_quantize_free (ctx);
+  gst_audio_info_init (&ctx->in);
+  gst_audio_info_init (&ctx->out);
+  gst_channel_mix_unset_matrix (ctx);
+
+  g_free (ctx->tmpbuf);
+  ctx->tmpbuf = NULL;
+  ctx->tmpbufsize = 0;
+
+  return TRUE;
+}
+
+gboolean
+audio_convert_get_sizes (AudioConvertCtx * ctx, gint samples, gint * srcsize,
+    gint * dstsize)
+{
+  g_return_val_if_fail (ctx != NULL, FALSE);
+
+  if (srcsize)
+    *srcsize = samples * ctx->in.bpf;
+  if (dstsize)
+    *dstsize = samples * ctx->out.bpf;
+
+  return TRUE;
+}
+
+gboolean
+audio_convert_convert (AudioConvertCtx * ctx, gpointer src,
+    gpointer dst, gint samples, gboolean src_writable)
+{
+  guint insize, outsize, size;
+  gpointer outbuf, tmpbuf;
+  guint intemp = 0, outtemp = 0, biggest;
+  gint in_width, out_width;
+
+  g_return_val_if_fail (ctx != NULL, FALSE);
+  g_return_val_if_fail (src != NULL, FALSE);
+  g_return_val_if_fail (dst != NULL, FALSE);
+  g_return_val_if_fail (samples >= 0, FALSE);
+
+  if (samples == 0)
+    return TRUE;
+
+  insize = ctx->in.bpf * samples;
+  outsize = ctx->out.bpf * samples;
+
+  in_width = GST_AUDIO_FORMAT_INFO_WIDTH (ctx->in.finfo);
+  out_width = GST_AUDIO_FORMAT_INFO_WIDTH (ctx->out.finfo);
+
+  /* find biggest temp buffer size */
+  size = (DOUBLE_INTERMEDIATE_FORMAT (ctx)) ? sizeof (gdouble)
+      : sizeof (gint32);
+
+  if (!ctx->in_default)
+    intemp = gst_util_uint64_scale (insize, size * 8, in_width);
+  if (!ctx->mix_passthrough || !ctx->out_default)
+    outtemp = gst_util_uint64_scale (outsize, size * 8, out_width);
+  biggest = MAX (intemp, outtemp);
+
+  /* see if one of the buffers can be used as temp */
+  if ((outsize >= biggest) && (ctx->out.bpf <= size))
+    tmpbuf = dst;
+  else if ((insize >= biggest) && src_writable && (ctx->in.bpf >= size))
+    tmpbuf = src;
+  else {
+    if (biggest > ctx->tmpbufsize) {
+      ctx->tmpbuf = g_realloc (ctx->tmpbuf, biggest);
+      ctx->tmpbufsize = biggest;
+    }
+    tmpbuf = ctx->tmpbuf;
+  }
+
+  /* start conversion */
+  if (!ctx->in_default) {
+    /* check if final conversion */
+    if (!(ctx->out_default && ctx->mix_passthrough))
+      outbuf = tmpbuf;
+    else
+      outbuf = dst;
+
+    /* unpack to default format */
+    ctx->unpack (src, outbuf, ctx->in_scale, samples * ctx->in.channels);
+
+    src = outbuf;
+  }
+
+  if (!ctx->mix_passthrough) {
+    /* check if final conversion */
+    if (!ctx->out_default)
+      outbuf = tmpbuf;
+    else
+      outbuf = dst;
+
+    /* convert channels */
+    ctx->channel_mix (ctx, src, outbuf, samples);
+
+    src = outbuf;
+  }
+
+  /* we only need to quantize if output format is int */
+  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) {
+    if (ctx->out_default)
+      outbuf = dst;
+    else
+      outbuf = tmpbuf;
+    ctx->quantize (ctx, src, outbuf, samples);
+  }
+
+  if (!ctx->out_default) {
+    /* pack default format into dst */
+    ctx->pack (src, dst, ctx->out_scale, samples * ctx->out.channels);
+  }
+
+  return TRUE;
+}
diff --git a/gst/audioconvert/audioconvert.h b/gst/audioconvert/audioconvert.h
new file mode 100644
index 0000000..638a42a
--- /dev/null
+++ b/gst/audioconvert/audioconvert.h
@@ -0,0 +1,146 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * audioconvert.h: audio format conversion library
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __AUDIO_CONVERT_H__
+#define __AUDIO_CONVERT_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+GST_DEBUG_CATEGORY_EXTERN (audio_convert_debug);
+#define GST_CAT_DEFAULT (audio_convert_debug)
+
+/**
+ * GstAudioConvertDithering:
+ * @DITHER_NONE: No dithering
+ * @DITHER_RPDF: Rectangular dithering
+ * @DITHER_TPDF: Triangular dithering (default)
+ * @DITHER_TPDF_HF: High frequency triangular dithering
+ *
+ * Set of available dithering methods when converting audio.
+ */
+typedef enum
+{
+  DITHER_NONE = 0,
+  DITHER_RPDF,
+  DITHER_TPDF,
+  DITHER_TPDF_HF
+} GstAudioConvertDithering;
+
+/**
+ * GstAudioConvertNoiseShaping:
+ * @NOISE_SHAPING_NONE: No noise shaping (default)
+ * @NOISE_SHAPING_ERROR_FEEDBACK: Error feedback
+ * @NOISE_SHAPING_SIMPLE: Simple 2-pole noise shaping
+ * @NOISE_SHAPING_MEDIUM: Medium 5-pole noise shaping
+ * @NOISE_SHAPING_HIGH: High 8-pole noise shaping
+ *
+ * Set of available noise shaping methods
+ */
+typedef enum
+{
+  NOISE_SHAPING_NONE = 0,
+  NOISE_SHAPING_ERROR_FEEDBACK,
+  NOISE_SHAPING_SIMPLE,
+  NOISE_SHAPING_MEDIUM,
+  NOISE_SHAPING_HIGH
+} GstAudioConvertNoiseShaping;
+
+typedef struct _AudioConvertCtx AudioConvertCtx;
+#if 0
+typedef struct _AudioConvertFmt AudioConvertFmt;
+
+struct _AudioConvertFmt
+{
+  /* general caps */
+  gboolean is_int;
+  gint endianness;
+  gint width;
+  gint rate;
+  gint channels;
+  GstAudioChannelPosition *pos;
+  gboolean unpositioned_layout;
+
+  /* int audio caps */
+  gboolean sign;
+  gint depth;
+
+  gint unit_size;
+};
+#endif
+
+typedef void (*AudioConvertUnpack) (gpointer src, gpointer dst, gint scale,
+    gint count);
+typedef void (*AudioConvertPack) (gpointer src, gpointer dst, gint scale,
+    gint count);
+
+typedef void (*AudioConvertMix) (AudioConvertCtx *, gpointer, gpointer, gint);
+typedef void (*AudioConvertQuantize) (AudioConvertCtx * ctx, gpointer src,
+    gpointer dst, gint count);
+
+struct _AudioConvertCtx
+{
+  GstAudioInfo in;
+  GstAudioInfo out;
+
+  AudioConvertUnpack unpack;
+  AudioConvertPack pack;
+
+  /* channel conversion matrix, m[in_channels][out_channels].
+   * If identity matrix, passthrough applies. */
+  gfloat **matrix;
+  /* temp storage for channelmix */
+  gpointer tmp;
+
+  gboolean in_default;
+  gboolean mix_passthrough;
+  gboolean out_default;
+
+  gpointer tmpbuf;
+  gint tmpbufsize;
+
+  gint in_scale;
+  gint out_scale;
+
+  AudioConvertMix channel_mix;
+
+  AudioConvertQuantize quantize;
+
+  GstAudioConvertDithering dither;
+  GstAudioConvertNoiseShaping ns;
+  /* last random number generated per channel for hifreq TPDF dither */
+  gpointer last_random;
+  /* contains the past quantization errors, error[out_channels][count] */
+  gdouble *error_buf;
+};
+
+gboolean audio_convert_prepare_context (AudioConvertCtx * ctx,
+    GstAudioInfo * in, GstAudioInfo * out,
+    GstAudioConvertDithering dither, GstAudioConvertNoiseShaping ns);
+gboolean audio_convert_get_sizes (AudioConvertCtx * ctx, gint samples,
+    gint * srcsize, gint * dstsize);
+
+gboolean audio_convert_clean_context (AudioConvertCtx * ctx);
+
+gboolean audio_convert_convert (AudioConvertCtx * ctx, gpointer src,
+    gpointer dst, gint samples, gboolean src_writable);
+
+#endif /* __AUDIO_CONVERT_H__ */
diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c
new file mode 100644
index 0000000..6cf8775
--- /dev/null
+++ b/gst/audioconvert/gstaudioconvert.c
@@ -0,0 +1,711 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2011 Wim Taymans <wim.taymans at gmail dot com>
+ *
+ * gstaudioconvert.c: Convert audio to different audio formats automatically
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-audioconvert
+ *
+ * Audioconvert converts raw audio buffers between various possible formats.
+ * It supports integer to float conversion, width/depth conversion,
+ * signedness and endianness conversion and channel transformations.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
+ * ]| This pipeline converts audio to 8-bit.  The level element shows that
+ * the output levels still match the one for a sine wave.
+ * |[
+ * gst-launch -v -m audiotestsrc ! audioconvert ! vorbisenc ! fakesink silent=TRUE
+ * ]| The vorbis encoder takes float audio data instead of the integer data
+ * generated by audiotestsrc.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-02 (0.10.4)
+ */
+
+/*
+ * design decisions:
+ * - audioconvert converts buffers in a set of supported caps. If it supports
+ *   a caps, it supports conversion from these caps to any other caps it
+ *   supports. (example: if it does A=>B and A=>C, it also does B=>C)
+ * - audioconvert does not save state between buffers. Every incoming buffer is
+ *   converted and the converted buffer is pushed out.
+ * conclusion:
+ * audioconvert is not supposed to be a one-element-does-anything solution for
+ * audio conversions.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstaudioconvert.h"
+#include "gstchannelmix.h"
+#include "gstaudioquantize.h"
+#include "plugin.h"
+
+GST_DEBUG_CATEGORY (audio_convert_debug);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+
+/*** DEFINITIONS **************************************************************/
+
+/* type functions */
+static void gst_audio_convert_dispose (GObject * obj);
+
+/* gstreamer functions */
+static gboolean gst_audio_convert_get_unit_size (GstBaseTransform * base,
+    GstCaps * caps, gsize * size);
+static GstCaps *gst_audio_convert_transform_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter);
+static void gst_audio_convert_fixate_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
+static gboolean gst_audio_convert_set_caps (GstBaseTransform * base,
+    GstCaps * incaps, GstCaps * outcaps);
+static GstFlowReturn gst_audio_convert_transform (GstBaseTransform * base,
+    GstBuffer * inbuf, GstBuffer * outbuf);
+static GstFlowReturn gst_audio_convert_transform_ip (GstBaseTransform * base,
+    GstBuffer * buf);
+static void gst_audio_convert_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_audio_convert_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+/* AudioConvert signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0,
+  ARG_DITHERING,
+  ARG_NOISE_SHAPING,
+};
+
+#define DEBUG_INIT \
+  GST_DEBUG_CATEGORY_INIT (audio_convert_debug, "audioconvert", 0, "audio conversion element"); \
+  GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
+#define gst_audio_convert_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAudioConvert, gst_audio_convert,
+    GST_TYPE_BASE_TRANSFORM, DEBUG_INIT);
+
+/*** GSTREAMER PROTOTYPES *****************************************************/
+
+#define STATIC_CAPS \
+GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
+
+static GstStaticPadTemplate gst_audio_convert_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    STATIC_CAPS);
+
+static GstStaticPadTemplate gst_audio_convert_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    STATIC_CAPS);
+
+#define GST_TYPE_AUDIO_CONVERT_DITHERING (gst_audio_convert_dithering_get_type ())
+static GType
+gst_audio_convert_dithering_get_type (void)
+{
+  static GType gtype = 0;
+
+  if (gtype == 0) {
+    static const GEnumValue values[] = {
+      {DITHER_NONE, "No dithering",
+          "none"},
+      {DITHER_RPDF, "Rectangular dithering", "rpdf"},
+      {DITHER_TPDF, "Triangular dithering (default)", "tpdf"},
+      {DITHER_TPDF_HF, "High frequency triangular dithering", "tpdf-hf"},
+      {0, NULL, NULL}
+    };
+
+    gtype = g_enum_register_static ("GstAudioConvertDithering", values);
+  }
+  return gtype;
+}
+
+#define GST_TYPE_AUDIO_CONVERT_NOISE_SHAPING (gst_audio_convert_ns_get_type ())
+static GType
+gst_audio_convert_ns_get_type (void)
+{
+  static GType gtype = 0;
+
+  if (gtype == 0) {
+    static const GEnumValue values[] = {
+      {NOISE_SHAPING_NONE, "No noise shaping (default)",
+          "none"},
+      {NOISE_SHAPING_ERROR_FEEDBACK, "Error feedback", "error-feedback"},
+      {NOISE_SHAPING_SIMPLE, "Simple 2-pole noise shaping", "simple"},
+      {NOISE_SHAPING_MEDIUM, "Medium 5-pole noise shaping", "medium"},
+      {NOISE_SHAPING_HIGH, "High 8-pole noise shaping", "high"},
+      {0, NULL, NULL}
+    };
+
+    gtype = g_enum_register_static ("GstAudioConvertNoiseShaping", values);
+  }
+  return gtype;
+}
+
+
+/*** TYPE FUNCTIONS ***********************************************************/
+static void
+gst_audio_convert_class_init (GstAudioConvertClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
+
+  gobject_class->dispose = gst_audio_convert_dispose;
+  gobject_class->set_property = gst_audio_convert_set_property;
+  gobject_class->get_property = gst_audio_convert_get_property;
+
+  g_object_class_install_property (gobject_class, ARG_DITHERING,
+      g_param_spec_enum ("dithering", "Dithering",
+          "Selects between different dithering methods.",
+          GST_TYPE_AUDIO_CONVERT_DITHERING, DITHER_TPDF,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_NOISE_SHAPING,
+      g_param_spec_enum ("noise-shaping", "Noise shaping",
+          "Selects between different noise shaping methods.",
+          GST_TYPE_AUDIO_CONVERT_NOISE_SHAPING, NOISE_SHAPING_NONE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_audio_convert_src_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_audio_convert_sink_template));
+  gst_element_class_set_details_simple (element_class,
+      "Audio converter", "Filter/Converter/Audio",
+      "Convert audio to different formats", "Benjamin Otte <otte@gnome.org>");
+
+  basetransform_class->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_get_unit_size);
+  basetransform_class->transform_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_transform_caps);
+  basetransform_class->fixate_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_fixate_caps);
+  basetransform_class->set_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_set_caps);
+  basetransform_class->transform_ip =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_transform_ip);
+  basetransform_class->transform =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_transform);
+
+  basetransform_class->passthrough_on_same_caps = TRUE;
+}
+
+static void
+gst_audio_convert_init (GstAudioConvert * this)
+{
+  this->dither = DITHER_TPDF;
+  this->ns = NOISE_SHAPING_NONE;
+  memset (&this->ctx, 0, sizeof (AudioConvertCtx));
+
+  gst_base_transform_set_gap_aware (GST_BASE_TRANSFORM (this), TRUE);
+}
+
+static void
+gst_audio_convert_dispose (GObject * obj)
+{
+  GstAudioConvert *this = GST_AUDIO_CONVERT (obj);
+
+  audio_convert_clean_context (&this->ctx);
+
+  G_OBJECT_CLASS (parent_class)->dispose (obj);
+}
+
+/*** GSTREAMER FUNCTIONS ******************************************************/
+
+/* BaseTransform vmethods */
+static gboolean
+gst_audio_convert_get_unit_size (GstBaseTransform * base, GstCaps * caps,
+    gsize * size)
+{
+  GstAudioInfo info;
+
+  g_assert (size);
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto parse_error;
+
+  *size = info.bpf;
+  GST_INFO_OBJECT (base, "unit_size = %" G_GSIZE_FORMAT, *size);
+
+  return TRUE;
+
+parse_error:
+  {
+    GST_INFO_OBJECT (base, "failed to parse caps to get unit_size");
+    return FALSE;
+  }
+}
+
+/* copies the given caps */
+static GstCaps *
+gst_audio_convert_caps_remove_format_info (GstCaps * caps)
+{
+  GstStructure *st;
+  gint i, n;
+  GstCaps *res;
+
+  res = gst_caps_new_empty ();
+
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    st = gst_caps_get_structure (caps, i);
+
+    /* If this is already expressed by the existing caps
+     * skip this structure */
+    if (i > 0 && gst_caps_is_subset_structure (res, st))
+      continue;
+
+    st = gst_structure_copy (st);
+    gst_structure_remove_fields (st, "format", "channel-positions", NULL);
+
+    gst_caps_append_structure (res, st);
+  }
+
+  return res;
+}
+
+/* The caps can be transformed into any other caps with format info removed.
+ * However, we should prefer passthrough, so if passthrough is possible,
+ * put it first in the list. */
+static GstCaps *
+gst_audio_convert_transform_caps (GstBaseTransform * btrans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  GstCaps *tmp, *tmp2;
+  GstCaps *result;
+
+  result = gst_caps_copy (caps);
+
+  /* Get all possible caps that we can transform to */
+  tmp = gst_audio_convert_caps_remove_format_info (caps);
+
+  if (filter) {
+    tmp2 = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (tmp);
+    tmp = tmp2;
+  }
+
+  result = tmp;
+
+  GST_DEBUG_OBJECT (btrans, "transformed %" GST_PTR_FORMAT " into %"
+      GST_PTR_FORMAT, caps, result);
+
+  return result;
+}
+
+static const GstAudioChannelPosition default_positions[8][8] = {
+  /* 1 channel */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+      },
+  /* 2 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      },
+  /* 3 channels (2.1) */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_LFE, /* or FRONT_CENTER for 3.0? */
+      },
+  /* 4 channels (4.0 or 3.1?) */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  /* 5 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      },
+  /* 6 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+      },
+  /* 7 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+      },
+  /* 8 channels */
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+      }
+};
+
+static const GValue *
+find_suitable_channel_layout (const GValue * val, guint chans)
+{
+  /* if output layout is fixed already and looks sane, we're done */
+  if (GST_VALUE_HOLDS_ARRAY (val) && gst_value_array_get_size (val) == chans)
+    return val;
+
+  /* if it's a list, go through it recursively and return the first
+   * sane-enough looking value we find */
+  if (GST_VALUE_HOLDS_LIST (val)) {
+    gint i;
+
+    for (i = 0; i < gst_value_list_get_size (val); ++i) {
+      const GValue *v, *ret;
+
+      v = gst_value_list_get_value (val, i);
+      if ((ret = find_suitable_channel_layout (v, chans)))
+        return ret;
+    }
+  }
+
+  return NULL;
+}
+
+static void
+gst_audio_convert_fixate_channels (GstBaseTransform * base, GstStructure * ins,
+    GstStructure * outs)
+{
+  const GValue *in_layout, *out_layout;
+  gint in_chans, out_chans;
+
+  if (!gst_structure_get_int (ins, "channels", &in_chans))
+    return;                     /* this shouldn't really happen, should it? */
+
+  if (!gst_structure_has_field (outs, "channels")) {
+    /* we could try to get the implied number of channels from the layout,
+     * but that seems overdoing it for a somewhat exotic corner case */
+    gst_structure_remove_field (outs, "channel-positions");
+    return;
+  }
+
+  /* ok, let's fixate the channels if they are not fixated yet */
+  gst_structure_fixate_field_nearest_int (outs, "channels", in_chans);
+
+  if (!gst_structure_get_int (outs, "channels", &out_chans)) {
+    /* shouldn't really happen ... */
+    gst_structure_remove_field (outs, "channel-positions");
+    return;
+  }
+
+  /* check if the output has a channel layout (or a list of layouts) */
+  out_layout = gst_structure_get_value (outs, "channel-positions");
+
+  /* get the channel layout of the input if any */
+  in_layout = gst_structure_get_value (ins, "channel-positions");
+
+  if (out_layout == NULL) {
+    if (out_chans <= 2 && (in_chans != out_chans || in_layout == NULL))
+      return;                   /* nothing to do, default layout will be assumed */
+    GST_WARNING_OBJECT (base, "downstream caps contain no channel layout");
+  }
+
+  if (in_chans == out_chans && in_layout != NULL) {
+    GValue res = { 0, };
+
+    /* same number of channels and no output layout: just use input layout */
+    if (out_layout == NULL) {
+      gst_structure_set_value (outs, "channel-positions", in_layout);
+      return;
+    }
+
+    /* if output layout is fixed already and looks sane, we're done */
+    if (GST_VALUE_HOLDS_ARRAY (out_layout) &&
+        gst_value_array_get_size (out_layout) == out_chans) {
+      return;
+    }
+
+    /* if the output layout is not fixed, check if the output layout contains
+     * the input layout */
+    if (gst_value_intersect (&res, in_layout, out_layout)) {
+      gst_structure_set_value (outs, "channel-positions", in_layout);
+      g_value_unset (&res);
+      return;
+    }
+
+    /* output layout is not fixed and does not contain the input layout, so
+     * just pick the first layout in the list (it should be a list ...) */
+    if ((out_layout = find_suitable_channel_layout (out_layout, out_chans))) {
+      gst_structure_set_value (outs, "channel-positions", out_layout);
+      return;
+    }
+
+    /* ... else fall back to default layout (NB: out_layout is NULL here) */
+    GST_WARNING_OBJECT (base, "unexpected output channel layout");
+  }
+
+  /* number of input channels != number of output channels:
+   * if this value contains a list of channel layouts (or even worse: a list
+   * with another list), just pick the first value and repeat until we find a
+   * channel position array or something else that's not a list; we assume
+   * the input if half-way sane and don't try to fall back on other list items
+   * if the first one is something unexpected or non-channel-pos-array-y */
+  if (out_layout != NULL && GST_VALUE_HOLDS_LIST (out_layout))
+    out_layout = find_suitable_channel_layout (out_layout, out_chans);
+
+  if (out_layout != NULL) {
+    if (GST_VALUE_HOLDS_ARRAY (out_layout) &&
+        gst_value_array_get_size (out_layout) == out_chans) {
+      /* looks sane enough, let's use it */
+      gst_structure_set_value (outs, "channel-positions", out_layout);
+      return;
+    }
+
+    /* what now?! Just ignore what we're given and use default positions */
+    GST_WARNING_OBJECT (base, "invalid or unexpected channel-positions");
+  }
+
+  /* missing or invalid output layout and we can't use the input layout for
+   * one reason or another, so just pick a default layout (we could be smarter
+   * and try to add/remove channels from the input layout, or pick a default
+   * layout based on LFE-presence in input layout, but let's save that for
+   * another day) */
+  if (out_chans > 0 && out_chans <= G_N_ELEMENTS (default_positions[0])) {
+    GST_DEBUG_OBJECT (base, "using default channel layout as fallback");
+    gst_audio_set_channel_positions (outs, default_positions[out_chans - 1]);
+  }
+}
+
+/* try to keep as many of the structure members the same by fixating the
+ * possible ranges; this way we convert the least amount of things as possible
+ */
+static void
+gst_audio_convert_fixate_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
+{
+  GstStructure *ins, *outs;
+  gint rate;
+  const gchar *fmt;
+
+  g_return_if_fail (gst_caps_is_fixed (caps));
+
+  GST_DEBUG_OBJECT (base, "trying to fixate othercaps %" GST_PTR_FORMAT
+      " based on caps %" GST_PTR_FORMAT, othercaps, caps);
+
+  ins = gst_caps_get_structure (caps, 0);
+  outs = gst_caps_get_structure (othercaps, 0);
+
+  gst_audio_convert_fixate_channels (base, ins, outs);
+
+  if ((fmt = gst_structure_get_string (ins, "format"))) {
+    /* FIXME, find the best format */
+    gst_structure_fixate_field_string (outs, "format", fmt);
+  }
+
+  if (gst_structure_get_int (ins, "rate", &rate)) {
+    if (gst_structure_has_field (outs, "rate")) {
+      gst_structure_fixate_field_nearest_int (outs, "rate", rate);
+    }
+  }
+  GST_DEBUG_OBJECT (base, "fixated othercaps to %" GST_PTR_FORMAT, othercaps);
+}
+
+static gboolean
+gst_audio_convert_set_caps (GstBaseTransform * base, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  GstAudioConvert *this = GST_AUDIO_CONVERT (base);
+  GstAudioInfo in_info;
+  GstAudioInfo out_info;
+
+  GST_DEBUG_OBJECT (base, "incaps %" GST_PTR_FORMAT ", outcaps %"
+      GST_PTR_FORMAT, incaps, outcaps);
+
+  if (!gst_audio_info_from_caps (&in_info, incaps))
+    goto invalid_in;
+  if (!gst_audio_info_from_caps (&out_info, outcaps))
+    goto invalid_out;
+
+  if (!audio_convert_prepare_context (&this->ctx, &in_info, &out_info,
+          this->dither, this->ns))
+    goto no_converter;
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_in:
+  {
+    GST_ERROR_OBJECT (base, "invalid input caps");
+    return FALSE;
+  }
+invalid_out:
+  {
+    GST_ERROR_OBJECT (base, "invalid output caps");
+    return FALSE;
+  }
+no_converter:
+  {
+    GST_ERROR_OBJECT (base, "could not find converter");
+    return FALSE;
+  }
+}
+
+static GstFlowReturn
+gst_audio_convert_transform_ip (GstBaseTransform * base, GstBuffer * buf)
+{
+  /* nothing to do here */
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf,
+    GstBuffer * outbuf)
+{
+  GstFlowReturn ret;
+  GstAudioConvert *this = GST_AUDIO_CONVERT (base);
+  gsize srcsize, dstsize;
+  gint insize, outsize;
+  gint samples;
+  gpointer src, dst;
+
+  /* get amount of samples to convert. */
+  samples = gst_buffer_get_size (inbuf) / this->ctx.in.bpf;
+
+  /* get in/output sizes, to see if the buffers we got are of correct
+   * sizes */
+  if (!audio_convert_get_sizes (&this->ctx, samples, &insize, &outsize))
+    goto error;
+
+  if (insize == 0 || outsize == 0)
+    return GST_FLOW_OK;
+
+  /* get src and dst data */
+  src = gst_buffer_map (inbuf, &srcsize, NULL, GST_MAP_READ);
+  dst = gst_buffer_map (outbuf, &dstsize, NULL, GST_MAP_WRITE);
+
+  /* check in and outsize */
+  if (srcsize < insize)
+    goto wrong_size;
+  if (dstsize < outsize)
+    goto wrong_size;
+
+  /* and convert the samples */
+  if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP)) {
+    if (!audio_convert_convert (&this->ctx, src, dst,
+            samples, gst_buffer_is_writable (inbuf)))
+      goto convert_error;
+  } else {
+    /* Create silence buffer */
+    gst_audio_format_fill_silence (this->ctx.out.finfo, dst, outsize);
+  }
+  ret = GST_FLOW_OK;
+
+done:
+  gst_buffer_unmap (outbuf, dst, outsize);
+  gst_buffer_unmap (inbuf, src, srcsize);
+
+  return ret;
+
+  /* ERRORS */
+error:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, FORMAT,
+        (NULL), ("cannot get input/output sizes for %d samples", samples));
+    return GST_FLOW_ERROR;
+  }
+wrong_size:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, FORMAT,
+        (NULL),
+        ("input/output buffers are of wrong size in: %" G_GSIZE_FORMAT " < %d"
+            " or out: %" G_GSIZE_FORMAT " < %d",
+            srcsize, insize, dstsize, outsize));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+convert_error:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, FORMAT,
+        (NULL), ("error while converting"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static void
+gst_audio_convert_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAudioConvert *this = GST_AUDIO_CONVERT (object);
+
+  switch (prop_id) {
+    case ARG_DITHERING:
+      this->dither = g_value_get_enum (value);
+      break;
+    case ARG_NOISE_SHAPING:
+      this->ns = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_convert_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAudioConvert *this = GST_AUDIO_CONVERT (object);
+
+  switch (prop_id) {
+    case ARG_DITHERING:
+      g_value_set_enum (value, this->dither);
+      break;
+    case ARG_NOISE_SHAPING:
+      g_value_set_enum (value, this->ns);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/gst/audioconvert/gstaudioconvert.h b/gst/audioconvert/gstaudioconvert.h
new file mode 100644
index 0000000..62f324f
--- /dev/null
+++ b/gst/audioconvert/gstaudioconvert.h
@@ -0,0 +1,60 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim at fluendo dot com>
+ *
+ * gstaudioconvert.h: Convert audio to different audio formats automatically
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_CONVERT_H__
+#define __GST_AUDIO_CONVERT_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/audio/audio.h>
+
+#include "audioconvert.h"
+
+#define GST_TYPE_AUDIO_CONVERT            (gst_audio_convert_get_type())
+#define GST_AUDIO_CONVERT(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CONVERT,GstAudioConvert))
+#define GST_AUDIO_CONVERT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CONVERT,GstAudioConvertClass))
+#define GST_IS_AUDIO_CONVERT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_CONVERT))
+#define GST_IS_AUDIO_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_CONVERT))
+
+typedef struct _GstAudioConvert GstAudioConvert;
+typedef struct _GstAudioConvertClass GstAudioConvertClass;
+
+/**
+ * GstAudioConvert:
+ *
+ * The audioconvert object structure.
+ */
+struct _GstAudioConvert
+{
+  GstBaseTransform element;
+
+  AudioConvertCtx ctx;
+
+  GstAudioConvertDithering dither;
+  GstAudioConvertNoiseShaping ns;
+};
+
+struct _GstAudioConvertClass
+{
+  GstBaseTransformClass parent_class;
+};
+
+#endif /* __GST_AUDIO_CONVERT_H__ */
diff --git a/gst/audioconvert/gstaudioconvertorc-dist.c b/gst/audioconvert/gstaudioconvertorc-dist.c
new file mode 100644
index 0000000..8080b1b
--- /dev/null
+++ b/gst/audioconvert/gstaudioconvertorc-dist.c
@@ -0,0 +1,6872 @@
+
+/* autogenerated from gstaudioconvertorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void orc_audio_convert_unpack_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_double (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_double (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_u8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32_float (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_float_swap (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_double (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_float (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_u8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* orc_audio_convert_unpack_u8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << p1;
+    /* 5: xorl */
+    var36.i = var39.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << ex->params[24];
+    /* 5: xorl */
+    var36.i = var39.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u8");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var35.i = var37.i << p1;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var35.i = var37.i << ex->params[24];
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s8");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_s8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var37.i = var36.i << p1;
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var37.i = var36.i << ex->params[24];
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u16");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_u16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var35.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var34.i = var35.i << p1;
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var35.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var34.i = var35.i << ex->params[24];
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s16 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s16");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_s16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << p1;
+    /* 5: xorl */
+    var36.i = var39.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << ex->params[24];
+    /* 5: xorl */
+    var36.i = var39.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u16_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var36.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var35.i = var37.i << p1;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var36.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var35.i = var37.i << ex->params[24];
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s16_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var36.i = var33.i << p1;
+    /* 3: xorl */
+    var35.i = var36.i ^ var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var36.i = var33.i << ex->params[24];
+    /* 3: xorl */
+    var35.i = var36.i ^ var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u32");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_u32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: shll */
+    var33.i = var32.i << p1;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: shll */
+    var33.i = var32.i << ex->params[24];
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s32 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s32");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_unpack_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var37.i = var36.i << p1;
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var37.i = var36.i << ex->params[24];
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var34.i = var35.i << p1;
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var34.i = var35.i << ex->params[24];
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s32_swap (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_float_s32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var33.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+  /* 3: loadpl */
+  var34.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 2: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var36.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var37.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f + _src2.f;
+      var38.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: convfl */
+    {
+      int tmp;
+      tmp = (int) var38.f;
+      if (tmp == 0x80000000 && !(var38.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_float_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var33.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+  /* 3: loadpl */
+  var34.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 2: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var36.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var37.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f + _src2.f;
+      var38.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: convfl */
+    {
+      int tmp;
+      tmp = (int) var38.f;
+      if (tmp == 0x80000000 && !(var38.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_float_s32");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_float_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x4f000000, "c1");
+      orc_program_add_constant (p, 4, 0x3f000000, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convfl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_float_s32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+  /* 4: loadpl */
+  var35.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var37.i = ORC_SWAP_L (var33.i);
+    /* 3: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var37.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var38.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var38.i);
+      _src2.i = ORC_DENORMAL (var35.i);
+      _dest1.f = _src1.f + _src2.f;
+      var39.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 6: convfl */
+    {
+      int tmp;
+      tmp = (int) var39.f;
+      if (tmp == 0x80000000 && !(var39.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_float_s32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+  /* 4: loadpl */
+  var35.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var37.i = ORC_SWAP_L (var33.i);
+    /* 3: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var37.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var38.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: addf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var38.i);
+      _src2.i = ORC_DENORMAL (var35.i);
+      _dest1.f = _src1.f + _src2.f;
+      var39.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 6: convfl */
+    {
+      int tmp;
+      tmp = (int) var39.f;
+      if (tmp == 0x80000000 && !(var39.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_float_s32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_float_s32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x4f000000, "c1");
+      orc_program_add_constant (p, 4, 0x3f000000, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convfl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_double_s32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 1: loadpq */
+  var33.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+  /* 3: loadpq */
+  var34.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: addd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f + _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 5: convdl */
+    {
+      int tmp;
+      tmp = var38.f;
+      if (tmp == 0x80000000 && !(var38.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_double_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 1: loadpq */
+  var33.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+  /* 3: loadpq */
+  var34.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: addd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f + _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 5: convdl */
+    {
+      int tmp;
+      tmp = var38.f;
+      if (tmp == 0x80000000 && !(var38.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_double_s32");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_double_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
+      orc_program_add_constant_int64 (p, 8, 0x3fe0000000000000ULL, "c2");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "loadq", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_double_s32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+  /* 4: loadpq */
+  var35.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: swapq */
+    var37.i = ORC_SWAP_Q (var33.i);
+    /* 3: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 5: addd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var38.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _dest1.f = _src1.f + _src2.f;
+      var39.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 6: convdl */
+    {
+      int tmp;
+      tmp = var39.f;
+      if (tmp == 0x80000000 && !(var39.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_double_s32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+  /* 4: loadpq */
+  var35.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: swapq */
+    var37.i = ORC_SWAP_Q (var33.i);
+    /* 3: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 5: addd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var38.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _dest1.f = _src1.f + _src2.f;
+      var39.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 6: convdl */
+    {
+      int tmp;
+      tmp = var39.f;
+      if (tmp == 0x80000000 && !(var39.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_double_s32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_double_s32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
+      orc_program_add_constant_int64 (p, 8, 0x3fe0000000000000ULL, "c2");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "swapq", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_float_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_float_double (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: convfd */
+    {
+      orc_union32 _src1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      var33.f = _src1.f;
+    }
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_float_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: convfd */
+    {
+      orc_union32 _src1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      var33.f = _src1.f;
+    }
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_float_double (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_float_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_float_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+
+      orc_program_append_2 (p, "convfd", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_float_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: convfd */
+    {
+      orc_union32 _src1;
+      _src1.i = ORC_DENORMAL (var35.i);
+      var34.f = _src1.f;
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_float_double_swap (OrcExecutor *
+    ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: convfd */
+    {
+      orc_union32 _src1;
+      _src1.i = ORC_DENORMAL (var35.i);
+      var34.f = _src1.f;
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
+    const gfloat * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_float_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_float_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convfd", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_double_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_double_double (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_double_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_double_double (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_double_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_double_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+
+      orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_double_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: swapq */
+    var33.i = ORC_SWAP_Q (var32.i);
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_double_double_swap (OrcExecutor *
+    ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: swapq */
+    var33.i = ORC_SWAP_Q (var32.i);
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_double_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_double_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+
+      orc_program_append_2 (p, "swapq", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u8_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << p1;
+    /* 5: xorl */
+    var40.i = var39.i ^ var35.i;
+    /* 6: convld */
+    var36.f = var40.i;
+    /* 7: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u8_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << ex->params[24];
+    /* 5: xorl */
+    var40.i = var39.i ^ var35.i;
+    /* 6: convld */
+    var36.f = var40.i;
+    /* 7: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u8_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u8_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s8_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var38.i = var37.i << p1;
+    /* 4: convld */
+    var35.f = var38.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s8_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var34;
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var38.i = var37.i << ex->params[24];
+    /* 4: convld */
+    var35.f = var38.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s8_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s8_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s8_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u16_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var37.i = var36.i << p1;
+    /* 4: xorl */
+    var38.i = var37.i ^ var34.i;
+    /* 5: convld */
+    var35.f = var38.i;
+    /* 6: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u16_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var37.i = var36.i << ex->params[24];
+    /* 4: xorl */
+    var38.i = var37.i ^ var34.i;
+    /* 5: convld */
+    var35.f = var38.i;
+    /* 6: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u16_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u16_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s16_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var35.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var36.i = var35.i << p1;
+    /* 3: convld */
+    var34.f = var36.i;
+    /* 4: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s16_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var35.i = (orc_uint16) var33.i;
+    /* 2: shll */
+    var36.i = var35.i << ex->params[24];
+    /* 3: convld */
+    var34.f = var36.i;
+    /* 4: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s16_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s16_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s16_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u16_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << p1;
+    /* 5: xorl */
+    var40.i = var39.i ^ var35.i;
+    /* 6: convld */
+    var36.f = var40.i;
+    /* 7: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u16_double_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var38.i = (orc_uint16) var37.i;
+    /* 3: shll */
+    var39.i = var38.i << ex->params[24];
+    /* 5: xorl */
+    var40.i = var39.i ^ var35.i;
+    /* 6: convld */
+    var36.f = var40.i;
+    /* 7: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u16_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u16_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s16_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var36.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var38.i = var37.i << p1;
+    /* 4: convld */
+    var35.f = var38.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s16_double_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var36.i = ORC_SWAP_W (var34.i);
+    /* 2: convuwl */
+    var37.i = (orc_uint16) var36.i;
+    /* 3: shll */
+    var38.i = var37.i << ex->params[24];
+    /* 4: convld */
+    var35.f = var38.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s16_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s16_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u32_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var36.i = var33.i << p1;
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: convld */
+    var35.f = var37.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u32_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var36.i = var33.i << ex->params[24];
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: convld */
+    var35.f = var37.i;
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u32_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u32_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s32_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var35.i = var33.i << p1;
+    /* 2: convld */
+    var34.f = var35.i;
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s32_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shll */
+    var35.i = var33.i << ex->params[24];
+    /* 2: convld */
+    var34.f = var35.i;
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s32_double (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s32_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s32_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_u32_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var37.i = var36.i << p1;
+    /* 4: xorl */
+    var38.i = var37.i ^ var34.i;
+    /* 5: convld */
+    var35.f = var38.i;
+    /* 6: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_u32_double_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var37.i = var36.i << ex->params[24];
+    /* 4: xorl */
+    var38.i = var37.i ^ var34.i;
+    /* 5: convld */
+    var35.f = var38.i;
+    /* 6: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_u32_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_u32_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_unpack_s32_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var36.i = var35.i << p1;
+    /* 3: convld */
+    var34.f = var36.i;
+    /* 4: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_unpack_s32_double_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: swapl */
+    var35.i = ORC_SWAP_L (var33.i);
+    /* 2: shll */
+    var36.i = var35.i << ex->params[24];
+    /* 3: convld */
+    var34.f = var36.i;
+    /* 4: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_unpack_s32_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_unpack_s32_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_u8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: xorl */
+    var37.i = var34.i ^ var35.i;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var37.i) >> p1;
+    /* 4: convlw */
+    var39.i = var38.i;
+    /* 5: convwb */
+    var36 = var39.i;
+    /* 6: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: xorl */
+    var37.i = var34.i ^ var35.i;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
+    /* 4: convlw */
+    var39.i = var38.i;
+    /* 5: convwb */
+    var36 = var39.i;
+    /* 6: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_u8");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: shrsl */
+    var36.i = var34.i >> p1;
+    /* 2: convlw */
+    var37.i = var36.i;
+    /* 3: convwb */
+    var35 = var37.i;
+    /* 4: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: shrsl */
+    var36.i = var34.i >> ex->params[24];
+    /* 2: convlw */
+    var37.i = var36.i;
+    /* 3: convwb */
+    var35 = var37.i;
+    /* 4: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s8");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_s8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_u16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_u16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var37.i = ((orc_uint32) var36.i) >> p1;
+    /* 4: convlw */
+    var35.i = var37.i;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var37.i = ((orc_uint32) var36.i) >> ex->params[24];
+    /* 4: convlw */
+    var35.i = var37.i;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_u16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_u16");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shrsl */
+    var35.i = var33.i >> p1;
+    /* 2: convlw */
+    var34.i = var35.i;
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shrsl */
+    var35.i = var33.i >> ex->params[24];
+    /* 2: convlw */
+    var34.i = var35.i;
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s16 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s16");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_s16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_u16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: xorl */
+    var37.i = var34.i ^ var35.i;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var37.i) >> p1;
+    /* 4: convlw */
+    var39.i = var38.i;
+    /* 5: swapw */
+    var36.i = ORC_SWAP_W (var39.i);
+    /* 6: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: xorl */
+    var37.i = var34.i ^ var35.i;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
+    /* 4: convlw */
+    var39.i = var38.i;
+    /* 5: swapw */
+    var36.i = ORC_SWAP_W (var39.i);
+    /* 6: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_u16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_u16_swap);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: shrsl */
+    var36.i = var34.i >> p1;
+    /* 2: convlw */
+    var37.i = var36.i;
+    /* 3: swapw */
+    var35.i = ORC_SWAP_W (var37.i);
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: shrsl */
+    var36.i = var34.i >> ex->params[24];
+    /* 2: convlw */
+    var37.i = var36.i;
+    /* 3: swapw */
+    var35.i = ORC_SWAP_W (var37.i);
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s16_swap);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_u32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_u32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var35.i = ((orc_uint32) var36.i) >> p1;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var35.i = ((orc_uint32) var36.i) >> ex->params[24];
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_u32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_u32");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_u32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: shrsl */
+    var33.i = var32.i >> p1;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: shrsl */
+    var33.i = var32.i >> ex->params[24];
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32");
+      orc_program_set_backup_function (p, _backup_orc_audio_convert_pack_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_u32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var37.i = ((orc_uint32) var36.i) >> p1;
+    /* 4: swapl */
+    var35.i = ORC_SWAP_L (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_u32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: xorl */
+    var36.i = var33.i ^ var34.i;
+    /* 3: shrul */
+    var37.i = ((orc_uint32) var36.i) >> ex->params[24];
+    /* 4: swapl */
+    var35.i = ORC_SWAP_L (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_u32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_u32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shrsl */
+    var35.i = var33.i >> p1;
+    /* 2: swapl */
+    var34.i = ORC_SWAP_L (var35.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: shrsl */
+    var35.i = var33.i >> ex->params[24];
+    /* 2: swapl */
+    var34.i = ORC_SWAP_L (var35.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32_float */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32_float (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convlf */
+    var35.f = var33.i;
+    /* 3: divf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var36.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32_float (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convlf */
+    var35.f = var33.i;
+    /* 3: divf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var36.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32_float (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32_float");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s32_float);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x4f000000, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convlf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "divf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32_float_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32_float_swap (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convlf */
+    var36.f = var33.i;
+    /* 3: divf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var36.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var37.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: swapl */
+    var35.i = ORC_SWAP_L (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32_float_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convlf */
+    var36.f = var33.i;
+    /* 3: divf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var36.i);
+      _src2.i = ORC_DENORMAL (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var37.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: swapl */
+    var35.i = ORC_SWAP_L (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32_float_swap (gfloat * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32_float_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s32_float_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x4f000000, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convlf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "divf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32_double */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32_double (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var35.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var35.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32_double (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32_double");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s32_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "divd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storeq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_s32_double_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: swapq */
+    var35.i = ORC_SWAP_Q (var37.i);
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_s32_double_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: swapq */
+    var35.i = ORC_SWAP_Q (var37.i);
+    /* 5: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_s32_double_swap (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_s32_double_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_s32_double_swap);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "divd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_float */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_float (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _dest.f = _src1.f;
+      var33.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_float (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _dest.f = _src1.f;
+      var33.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_float (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_float");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_float);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+
+      orc_program_append_2 (p, "convdf", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_float_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest.f = _src1.f;
+      var35.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: swapl */
+    var34.i = ORC_SWAP_L (var35.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_float_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest.f = _src1.f;
+      var35.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: swapl */
+    var34.i = ORC_SWAP_L (var35.i);
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_float_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_float_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_u8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_u8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var37.i = tmp;
+    }
+    /* 3: xorl */
+    var38.i = var37.i ^ var35.i;
+    /* 4: shrul */
+    var39.i = ((orc_uint32) var38.i) >> p1;
+    /* 5: convlw */
+    var40.i = var39.i;
+    /* 6: convwb */
+    var36 = var40.i;
+    /* 7: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var37.i = tmp;
+    }
+    /* 3: xorl */
+    var38.i = var37.i ^ var35.i;
+    /* 4: shrul */
+    var39.i = ((orc_uint32) var38.i) >> ex->params[24];
+    /* 5: convlw */
+    var40.i = var39.i;
+    /* 6: convwb */
+    var36 = var40.i;
+    /* 7: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_u8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_u8");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_s8 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_s8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_int8 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 2: shrsl */
+    var37.i = var36.i >> p1;
+    /* 3: convlw */
+    var38.i = var37.i;
+    /* 4: convwb */
+    var35 = var38.i;
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_s8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_int8 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 2: shrsl */
+    var37.i = var36.i >> ex->params[24];
+    /* 3: convlw */
+    var38.i = var37.i;
+    /* 4: convwb */
+    var35 = var38.i;
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_s8 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_s8");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_s8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_u16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_u16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var38.i = ((orc_uint32) var37.i) >> p1;
+    /* 5: convlw */
+    var35.i = var38.i;
+    /* 6: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
+    /* 5: convlw */
+    var35.i = var38.i;
+    /* 6: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_u16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_u16");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_s16 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_s16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var36.i = var35.i >> p1;
+    /* 3: convlw */
+    var34.i = var36.i;
+    /* 4: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_s16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var36.i = var35.i >> ex->params[24];
+    /* 3: convlw */
+    var34.i = var36.i;
+    /* 4: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_s16 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_s16");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_s16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_u16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var37.i = tmp;
+    }
+    /* 3: xorl */
+    var38.i = var37.i ^ var35.i;
+    /* 4: shrul */
+    var39.i = ((orc_uint32) var38.i) >> p1;
+    /* 5: convlw */
+    var40.i = var39.i;
+    /* 6: swapw */
+    var36.i = ORC_SWAP_W (var40.i);
+    /* 7: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_u16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var37.i = tmp;
+    }
+    /* 3: xorl */
+    var38.i = var37.i ^ var35.i;
+    /* 4: shrul */
+    var39.i = ((orc_uint32) var38.i) >> ex->params[24];
+    /* 5: convlw */
+    var40.i = var39.i;
+    /* 6: swapw */
+    var36.i = ORC_SWAP_W (var40.i);
+    /* 7: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_u16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_u16_swap);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_s16_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 2: shrsl */
+    var37.i = var36.i >> p1;
+    /* 3: convlw */
+    var38.i = var37.i;
+    /* 4: swapw */
+    var35.i = ORC_SWAP_W (var38.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_s16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var34.f;
+      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 2: shrsl */
+    var37.i = var36.i >> ex->params[24];
+    /* 3: convlw */
+    var38.i = var37.i;
+    /* 4: swapw */
+    var35.i = ORC_SWAP_W (var38.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_s16_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_s16_swap);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_u32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_u32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var35.i = ((orc_uint32) var37.i) >> p1;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var35.i = ((orc_uint32) var37.i) >> ex->params[24];
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_u32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_u32");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_u32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_s32 */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_s32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var34.i = var35.i >> p1;
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var34.i = var35.i >> ex->params[24];
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_s32 (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_s32");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_u32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var38.i = ((orc_uint32) var37.i) >> p1;
+    /* 5: swapl */
+    var35.i = ORC_SWAP_L (var38.i);
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_u32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var36.i = tmp;
+    }
+    /* 3: xorl */
+    var37.i = var36.i ^ var34.i;
+    /* 4: shrul */
+    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
+    /* 5: swapl */
+    var35.i = ORC_SWAP_L (var38.i);
+    /* 6: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_u32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_u32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_audio_convert_pack_double_s32_swap */
+#ifdef DISABLE_ORC
+void
+orc_audio_convert_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var36.i = var35.i >> p1;
+    /* 3: swapl */
+    var34.i = ORC_SWAP_L (var36.i);
+    /* 4: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_audio_convert_pack_double_s32_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdl */
+    {
+      int tmp;
+      tmp = var33.f;
+      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 2: shrsl */
+    var36.i = var35.i >> ex->params[24];
+    /* 3: swapl */
+    var34.i = ORC_SWAP_L (var36.i);
+    /* 4: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_audio_convert_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_audio_convert_pack_double_s32_swap");
+      orc_program_set_backup_function (p,
+          _backup_orc_audio_convert_pack_double_s32_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
diff --git a/gst/audioconvert/gstaudioconvertorc-dist.h b/gst/audioconvert/gstaudioconvertorc-dist.h
new file mode 100644
index 0000000..85121fa
--- /dev/null
+++ b/gst/audioconvert/gstaudioconvertorc-dist.h
@@ -0,0 +1,130 @@
+
+/* autogenerated from gstaudioconvertorc.orc */
+
+#ifndef _GSTAUDIOCONVERTORC_H_
+#define _GSTAUDIOCONVERTORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void orc_audio_convert_unpack_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_float_s32 (guint32 * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_s32 (guint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_double (gdouble * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_float_double_swap (gdouble * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_double (gdouble * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_double_double_swap (gdouble * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_unpack_u8_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s8_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u16 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s16 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u16_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s16_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u32 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_u32_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_s32_float (gfloat * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_float_swap (gfloat * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_double (gdouble * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_s32_double_swap (gdouble * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_float (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_float_swap (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_audio_convert_pack_double_u8 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s8 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u16 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s16 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u16_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s16_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u32 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s32 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_u32_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+void orc_audio_convert_pack_double_s32_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/audioconvert/gstaudioconvertorc.orc b/gst/audioconvert/gstaudioconvertorc.orc
new file mode 100644
index 0000000..aea1376
--- /dev/null
+++ b/gst/audioconvert/gstaudioconvertorc.orc
@@ -0,0 +1,591 @@
+
+.function orc_audio_convert_unpack_u8
+.dest 4 d1 gint32
+.source 1 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 2 t2
+.temp 4 t3
+
+convubw t2, s1
+convuwl t3, t2
+shll t3, t3, p1
+xorl d1, t3, c1
+
+
+.function orc_audio_convert_unpack_s8
+.dest 4 d1 gint32
+.source 1 s1 guint8
+.param 4 p1
+.temp 2 t2
+.temp 4 t3
+
+convubw t2, s1
+convuwl t3, t2
+shll d1, t3, p1
+
+
+.function orc_audio_convert_unpack_u16
+.dest 4 d1 gint32
+.source 2 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t2
+
+convuwl t2, s1
+shll t2, t2, p1
+xorl d1, t2, c1
+
+
+.function orc_audio_convert_unpack_s16
+.dest 4 d1 gint32
+.source 2 s1 guint8
+.param 4 p1
+.temp 4 t2
+
+convuwl t2, s1
+shll d1, t2, p1
+
+
+.function orc_audio_convert_unpack_u16_swap
+.dest 4 d1 gint32
+.source 2 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 2 t1
+.temp 4 t2
+
+swapw t1, s1
+convuwl t2, t1
+shll t2, t2, p1
+xorl d1, t2, c1
+
+
+.function orc_audio_convert_unpack_s16_swap
+.dest 4 d1 gint32
+.source 2 s1 guint8
+.param 4 p1
+.temp 2 t1
+.temp 4 t2
+
+swapw t1, s1
+convuwl t2, t1
+shll d1, t2, p1
+
+
+.function orc_audio_convert_unpack_u32
+.dest 4 d1 gint32
+.source 4 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+shll t1, s1, p1
+xorl d1, t1, c1
+
+
+.function orc_audio_convert_unpack_s32
+.dest 4 d1 gint32
+.source 4 s1 guint8
+.param 4 p1
+
+shll d1, s1, p1
+
+
+.function orc_audio_convert_unpack_u32_swap
+.dest 4 d1 gint32
+.source 4 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+swapl t1, s1
+shll t1, t1, p1
+xorl d1, t1, c1
+
+
+.function orc_audio_convert_unpack_s32_swap
+.dest 4 d1 gint32
+.source 4 s1 guint8
+.param 4 p1
+.temp 4 t1
+
+swapl t1, s1
+shll d1, t1, p1
+
+.function orc_audio_convert_unpack_float_s32
+.source 4 s1 gfloat
+.dest 4 d1 guint32
+.temp 4 t1
+
+loadl t1, s1
+# multiply with 2147483647.0
+mulf t1, t1, 0x4F000000
+# add 0.5 for rounding
+addf t1, t1, 0x3F000000
+convfl d1, t1
+
+.function orc_audio_convert_unpack_float_s32_swap
+.source 4 s1 gfloat
+.dest 4 d1 guint32
+.temp 4 t1
+
+swapl t1, s1
+# multiply with 2147483647.0
+mulf t1, t1, 0x4F000000
+# add 0.5 for rounding
+addf t1, t1, 0x3F000000
+convfl d1, t1
+
+.function orc_audio_convert_unpack_double_s32
+.source 8 s1 gdouble
+.dest 4 d1 guint32
+.temp 8 t1
+
+loadq t1, s1
+# multiply with 2147483647.0
+muld t1, t1, 0x41DFFFFFFFC00000L
+# add 0.5 for rounding
+addd t1, t1, 0x3FE0000000000000L
+convdl d1, t1
+
+.function orc_audio_convert_unpack_double_s32_swap
+.source 8 s1 gdouble
+.dest 4 d1 guint32
+.temp 8 t1
+
+swapq t1, s1
+# multiply with 2147483647.0
+muld t1, t1, 0x41DFFFFFFFC00000L
+# add 0.5 for rounding
+addd t1, t1, 0x3FE0000000000000L
+convdl d1, t1
+
+.function orc_audio_convert_unpack_float_double
+.dest 8 d1 gdouble
+.source 4 s1 gfloat
+
+convfd d1, s1
+
+.function orc_audio_convert_unpack_float_double_swap
+.dest 8 d1 gdouble
+.source 4 s1 gfloat
+.temp 4 t1
+
+swapl t1, s1
+convfd d1, t1
+
+.function orc_audio_convert_unpack_double_double
+.dest 8 d1 gdouble
+.source 8 s1 gdouble
+
+copyq d1, s1
+
+.function orc_audio_convert_unpack_double_double_swap
+.dest 8 d1 gdouble
+.source 8 s1 gdouble
+
+swapq d1, s1
+
+.function orc_audio_convert_unpack_u8_double
+.dest 8 d1 gdouble
+.source 1 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 2 t2
+.temp 4 t3
+
+convubw t2, s1
+convuwl t3, t2
+shll t3, t3, p1
+xorl t3, t3, c1
+convld d1, t3
+
+.function orc_audio_convert_unpack_s8_double
+.dest 8 d1 gdouble
+.source 1 s1 guint8
+.param 4 p1
+.temp 2 t2
+.temp 4 t3
+
+convubw t2, s1
+convuwl t3, t2
+shll t3, t3, p1
+convld d1, t3
+
+.function orc_audio_convert_unpack_u16_double
+.dest 8 d1 gdouble
+.source 2 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t2
+
+convuwl t2, s1
+shll t2, t2, p1
+xorl t2, t2, c1
+convld d1, t2
+
+.function orc_audio_convert_unpack_s16_double
+.dest 8 d1 gdouble
+.source 2 s1 guint8
+.param 4 p1
+.temp 4 t2
+
+convuwl t2, s1
+shll t2, t2, p1
+convld d1, t2
+
+.function orc_audio_convert_unpack_u16_double_swap
+.dest 8 d1 gdouble
+.source 2 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 2 t1
+.temp 4 t2
+
+swapw t1, s1
+convuwl t2, t1
+shll t2, t2, p1
+xorl t2, t2, c1
+convld d1, t2
+
+.function orc_audio_convert_unpack_s16_double_swap
+.dest 8 d1 gdouble
+.source 2 s1 guint8
+.param 4 p1
+.temp 2 t1
+.temp 4 t2
+
+swapw t1, s1
+convuwl t2, t1
+shll t2, t2, p1
+convld d1, t2
+
+.function orc_audio_convert_unpack_u32_double
+.dest 8 d1 gdouble
+.source 4 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+shll t1, s1, p1
+xorl t1, t1, c1
+convld d1, t1
+
+.function orc_audio_convert_unpack_s32_double
+.dest 8 d1 gdouble
+.source 4 s1 guint8
+.param 4 p1
+.temp 4 t1
+
+shll t1, s1, p1
+convld d1, t1
+
+.function orc_audio_convert_unpack_u32_double_swap
+.dest 8 d1 gdouble
+.source 4 s1 guint8
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+swapl t1, s1
+shll t1, t1, p1
+xorl t1, t1, c1
+convld d1, t1
+
+.function orc_audio_convert_unpack_s32_double_swap
+.dest 8 d1 gdouble
+.source 4 s1 guint8
+.param 4 p1
+.temp 4 t1
+
+swapl t1, s1
+shll t1, t1, p1
+convld d1, t1
+
+.function orc_audio_convert_pack_u8
+.dest 1 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+.temp 2 t2
+
+xorl t1, s1, c1
+shrul t1, t1, p1
+convlw t2, t1
+convwb d1, t2
+
+
+.function orc_audio_convert_pack_s8
+.dest 1 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.temp 4 t1
+.temp 2 t2
+
+shrsl t1, s1, p1
+convlw t2, t1
+convwb d1, t2
+
+
+
+.function orc_audio_convert_pack_u16
+.dest 2 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+xorl t1, s1, c1
+shrul t1, t1, p1
+convlw d1, t1
+
+
+.function orc_audio_convert_pack_s16
+.dest 2 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.temp 4 t1
+
+shrsl t1, s1, p1
+convlw d1, t1
+
+
+.function orc_audio_convert_pack_u16_swap
+.dest 2 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+.temp 2 t2
+
+xorl t1, s1, c1
+shrul t1, t1, p1
+convlw t2, t1
+swapw d1, t2
+
+
+.function orc_audio_convert_pack_s16_swap
+.dest 2 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.temp 4 t1
+.temp 2 t2
+
+shrsl t1, s1, p1
+convlw t2, t1
+swapw d1, t2
+
+
+
+.function orc_audio_convert_pack_u32
+.dest 4 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+xorl t1, s1, c1
+shrul d1, t1, p1
+
+
+.function orc_audio_convert_pack_s32
+.dest 4 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+
+shrsl d1, s1, p1
+
+
+.function orc_audio_convert_pack_u32_swap
+.dest 4 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+xorl t1, s1, c1
+shrul t1, t1, p1
+swapl d1, t1
+
+
+.function orc_audio_convert_pack_s32_swap
+.dest 4 d1 guint8
+.source 4 s1 gint32
+.param 4 p1
+.temp 4 t1
+
+shrsl t1, s1, p1
+swapl d1, t1
+
+.function orc_audio_convert_pack_s32_float
+.dest 4 d1 gfloat
+.source 4 s1 gint32
+.temp 4 t1
+
+convlf t1, s1
+# divide by 2147483647.0
+divf t1, t1, 0x4F000000
+storel d1, t1
+
+.function orc_audio_convert_pack_s32_float_swap
+.dest 4 d1 gfloat
+.source 4 s1 gint32
+.temp 4 t1
+
+convlf t1, s1
+# divide by 2147483647.0
+divf t1, t1, 0x4F000000
+swapl d1, t1
+
+.function orc_audio_convert_pack_s32_double
+.dest 8 d1 gdouble
+.source 4 s1 gint32
+.temp 8 t1
+
+convld t1, s1
+# divide by 2147483647.0
+divd t1, t1, 0x41DFFFFFFFC00000L
+storeq d1, t1
+
+.function orc_audio_convert_pack_s32_double_swap
+.dest 8 d1 gdouble
+.source 4 s1 gint32
+.temp 8 t1
+
+convld t1, s1
+# divide by 2147483647.0
+divd t1, t1, 0x41DFFFFFFFC00000L
+swapq d1, t1
+
+.function orc_audio_convert_pack_double_float
+.dest 4 d1 gfloat
+.source 8 s1 gdouble
+
+convdf d1, s1
+
+.function orc_audio_convert_pack_double_float_swap
+.dest 4 d1 gfloat
+.source 8 s1 gdouble
+.temp 4 t1
+
+convdf t1, s1
+swapl d1, t1
+
+.function orc_audio_convert_pack_double_u8
+.dest 1 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+.temp 2 t2
+
+convdl t1, s1
+xorl t1, t1, c1
+shrul t1, t1, p1
+convlw t2, t1
+convwb d1, t2
+
+.function orc_audio_convert_pack_double_s8
+.dest 1 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.temp 4 t1
+.temp 2 t2
+
+convdl t1, s1
+shrsl t1, t1, p1
+convlw t2, t1
+convwb d1, t2
+
+.function orc_audio_convert_pack_double_u16
+.dest 2 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+convdl t1, s1
+xorl t1, t1, c1
+shrul t1, t1, p1
+convlw d1, t1
+
+.function orc_audio_convert_pack_double_s16
+.dest 2 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.temp 4 t1
+
+convdl t1, s1
+shrsl t1, t1, p1
+convlw d1, t1
+
+.function orc_audio_convert_pack_double_u16_swap
+.dest 2 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+.temp 2 t2
+
+convdl t1, s1
+xorl t1, t1, c1
+shrul t1, t1, p1
+convlw t2, t1
+swapw d1, t2
+
+.function orc_audio_convert_pack_double_s16_swap
+.dest 2 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.temp 4 t1
+.temp 2 t2
+
+convdl t1, s1
+shrsl t1, t1, p1
+convlw t2, t1
+swapw d1, t2
+
+.function orc_audio_convert_pack_double_u32
+.dest 4 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+convdl t1, s1
+xorl t1, t1, c1
+shrul d1, t1, p1
+
+.function orc_audio_convert_pack_double_s32
+.dest 4 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.temp 4 t1
+
+convdl t1, s1
+shrsl d1, t1, p1
+
+.function orc_audio_convert_pack_double_u32_swap
+.dest 4 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.const 4 c1 0x80000000
+.temp 4 t1
+
+convdl t1, s1
+xorl t1, t1, c1
+shrul t1, t1, p1
+swapl d1, t1
+
+.function orc_audio_convert_pack_double_s32_swap
+.dest 4 d1 guint8
+.source 8 s1 gdouble
+.param 4 p1
+.temp 4 t1
+
+convdl t1, s1
+shrsl t1, t1, p1
+swapl d1, t1
+
diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
new file mode 100644
index 0000000..5d45d85
--- /dev/null
+++ b/gst/audioconvert/gstaudioquantize.c
@@ -0,0 +1,503 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * gstaudioquantize.c: quantizes audio to the target format and optionally
+ *                     applies dithering and noise shaping.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * FIXME: When doing dithering with int as intermediate format
+ *        one gets audible harmonics while the noise floor is
+ *        constant for double as intermediate format!
+ */
+
+/* TODO: - Maybe drop 5-pole noise shaping and use coefficients
+ *         generated by dmaker
+ *         http://shibatch.sf.net
+ */
+
+#include <gst/gst.h>
+#include <string.h>
+#include <math.h>
+#include "audioconvert.h"
+#include "gstaudioquantize.h"
+
+#include "gstfastrandom.h"
+
+#define MAKE_QUANTIZE_FUNC_NAME(name)                                   \
+gst_audio_quantize_quantize_##name
+
+/* Quantize functions for gint32 as intermediate format */
+
+#define MAKE_QUANTIZE_FUNC_I(name, DITHER_INIT_FUNC, ADD_DITHER_FUNC,   \
+                             ROUND_FUNC)                                \
+static void                                                             \
+MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
+                                gint32 *dst, gint count)                \
+{                                                                       \
+  gint scale = ctx->out_scale;                                          \
+  gint channels = ctx->out.channels;                                    \
+  gint chan_pos;                                                        \
+                                                                        \
+  if (scale > 0) {                                                      \
+    gint32 tmp;                                                         \
+    guint32 mask = 0xffffffff & (0xffffffff << scale);                  \
+    guint32 bias = 1U << (scale - 1);                                   \
+    DITHER_INIT_FUNC()                                                  \
+                                                                        \
+    for (;count;count--) {                                              \
+      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
+        tmp = *src++;                                                   \
+        ADD_DITHER_FUNC()                                               \
+        ROUND_FUNC()                                                    \
+        *dst = tmp & mask;                                              \
+        dst++;                                                          \
+      }                                                                 \
+    }                                                                   \
+  } else {                                                              \
+    for (;count;count--) {                                              \
+      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
+        *dst = *src++;                                                  \
+        dst++;                                                          \
+      }                                                                 \
+    }                                                                   \
+  }                                                                     \
+}
+
+
+/* Quantize functions for gdouble as intermediate format with
+ * int as target */
+
+#define MAKE_QUANTIZE_FUNC_F(name, DITHER_INIT_FUNC, NS_INIT_FUNC,      \
+                             ADD_NS_FUNC, ADD_DITHER_FUNC,              \
+                             UPDATE_ERROR_FUNC)                         \
+static void                                                             \
+MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gdouble *src,     \
+                                gdouble *dst, gint count)               \
+{                                                                       \
+  gint scale = ctx->out_scale;                                          \
+  gint channels = ctx->out.channels;                                    \
+  gint chan_pos;                                                        \
+  gdouble factor = (1U<<(32-scale-1)) - 1;                              \
+                                                                        \
+  if (scale > 0) {                                                      \
+    gdouble tmp;                                                        \
+    DITHER_INIT_FUNC()                                                  \
+    NS_INIT_FUNC()                                                      \
+                                                                        \
+    for (;count;count--) {                                              \
+      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
+        tmp = *src++;                                                   \
+        ADD_NS_FUNC()                                                   \
+        ADD_DITHER_FUNC()                                               \
+        tmp = floor(tmp * factor + 0.5);                                \
+        *dst = CLAMP (tmp, -factor - 1, factor);                        \
+        UPDATE_ERROR_FUNC()                                             \
+        dst++;                                                          \
+      }                                                                 \
+    }                                                                   \
+  } else {                                                              \
+    for (;count;count--) {                                              \
+      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
+        *dst = *src++ * 2147483647.0;                                   \
+        dst++;                                                          \
+      }                                                                 \
+    }                                                                   \
+  }                                                                     \
+}
+
+/* Rounding functions for int as intermediate format, only used when
+ * not using dithering. With dithering we include this offset in our
+ * dither noise instead. */
+
+#define ROUND()                                                         \
+        if (tmp > 0 && G_MAXINT32 - tmp <= bias)                        \
+          tmp = G_MAXINT32;                                             \
+        else                                                            \
+          tmp += bias;
+
+
+#define NONE_FUNC()
+
+/* Dithering definitions
+ * See http://en.wikipedia.org/wiki/Dithering or
+ * http://www.cadenzarecording.com/Dither.html for explainations.
+ *
+ * We already add the rounding offset to the dither noise here
+ * to have only one overflow check instead of two. */
+
+#define INIT_DITHER_RPDF_I()                                            \
+  gint32 rand;                                                          \
+  gint32 dither = (1<<(scale));
+
+#define ADD_DITHER_RPDF_I()                                             \
+        rand = gst_fast_random_int32_range (bias - dither,              \
+	    bias + dither);                                             \
+        if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
+                tmp = G_MAXINT32;                                       \
+        else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
+                tmp = G_MININT32;                                       \
+        else                                                            \
+                tmp += rand;
+
+#define INIT_DITHER_RPDF_F()                                            \
+  gdouble dither = 1.0/(1U<<(32 - scale - 1));
+
+#define ADD_DITHER_RPDF_F()                                             \
+        tmp += gst_fast_random_double_range (- dither, dither);
+
+#define INIT_DITHER_TPDF_I()                                            \
+  gint32 rand;                                                          \
+  gint32 dither = (1<<(scale - 1));                                     \
+  bias = bias >> 1;
+
+#define ADD_DITHER_TPDF_I()                                             \
+        rand = gst_fast_random_int32_range (bias - dither,              \
+                   bias + dither - 1)                                   \
+               + gst_fast_random_int32_range (bias - dither,            \
+                   bias + dither - 1);                                  \
+        if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
+                tmp = G_MAXINT32;                                       \
+        else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
+                tmp = G_MININT32;                                       \
+        else                                                            \
+                tmp += rand;
+
+#define INIT_DITHER_TPDF_F()                                            \
+  gdouble dither = 1.0/(1U<<(32 - scale));
+
+#define ADD_DITHER_TPDF_F()                                             \
+        tmp += gst_fast_random_double_range (- dither, dither)          \
+               + gst_fast_random_double_range (- dither, dither);
+
+#define INIT_DITHER_TPDF_HF_I()                                         \
+  gint32 rand;                                                          \
+  gint32 dither = (1<<(scale-1));                                       \
+  gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand;          \
+  bias = bias >> 1;
+
+#define ADD_DITHER_TPDF_HF_I()                                          \
+        tmp_rand = gst_fast_random_int32_range (bias - dither,          \
+                       bias + dither);                                  \
+        rand = tmp_rand - last_random[chan_pos];                        \
+        last_random[chan_pos] = tmp_rand;                               \
+        if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
+                tmp = G_MAXINT32;                                       \
+        else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
+                tmp = G_MININT32;                                       \
+        else                                                            \
+                tmp += rand;
+
+/* Like TPDF dither but the dither noise is oriented more to the
+ * higher frequencies */
+
+#define INIT_DITHER_TPDF_HF_F()                                         \
+  gdouble rand;                                                         \
+  gdouble dither = 1.0/(1U<<(32 - scale));                              \
+  gdouble *last_random = (gdouble *) ctx->last_random, tmp_rand;
+
+#define ADD_DITHER_TPDF_HF_F()                                          \
+        tmp_rand = gst_fast_random_double_range (- dither, dither);     \
+        rand = tmp_rand - last_random[chan_pos];                        \
+        last_random[chan_pos] = tmp_rand;                               \
+        tmp += rand;
+
+/* Noise shaping definitions.
+ * See http://en.wikipedia.org/wiki/Noise_shaping for explanations. */
+
+
+/* Simple error feedback: Just accumulate the dithering and quantization
+ * error and remove it from each sample. */
+
+#define INIT_NS_ERROR_FEEDBACK()                                        \
+  gdouble orig;                                                         \
+  gdouble *errors = ctx->error_buf;
+
+#define ADD_NS_ERROR_FEEDBACK()                                         \
+        orig = tmp;                                                     \
+        tmp -= errors[chan_pos];
+
+#define UPDATE_ERROR_ERROR_FEEDBACK()                                   \
+        errors[chan_pos] += (*dst)/factor - orig;
+
+/* Same as error feedback but also add 1/2 of the previous error value.
+ * This moves the noise a bit more into the higher frequencies. */
+
+#define INIT_NS_SIMPLE()                                                \
+  gdouble orig;                                                         \
+  gdouble *errors = ctx->error_buf, cur_error;
+
+#define ADD_NS_SIMPLE()                                                 \
+        cur_error = errors[chan_pos*2] - 0.5 * errors[chan_pos*2 + 1];  \
+        tmp -= cur_error;                                               \
+        orig = tmp;
+
+#define UPDATE_ERROR_SIMPLE()                                           \
+        errors[chan_pos*2 + 1] = errors[chan_pos*2];                    \
+        errors[chan_pos*2] = (*dst)/factor - orig;
+
+
+/* Noise shaping coefficients from[1], moves most power of the
+ * error noise into inaudible frequency ranges.
+ *
+ * [1]
+ * "Minimally Audible Noise Shaping", Stanley P. Lipshitz,
+ * John Vanderkooy, and Robert A. Wannamaker,
+ * J. Audio Eng. Soc., Vol. 39, No. 11, November 1991. */
+
+static const gdouble ns_medium_coeffs[] = {
+  2.033, -2.165, 1.959, -1.590, 0.6149
+};
+
+#define INIT_NS_MEDIUM()                                                \
+  gdouble orig;                                                         \
+  gdouble *errors = ctx->error_buf, cur_error;                          \
+  int j;
+
+#define ADD_NS_MEDIUM()                                                 \
+        cur_error = 0.0;                                                \
+        for (j = 0; j < 5; j++)                                         \
+          cur_error += errors[chan_pos*5 + j] * ns_medium_coeffs[j];    \
+        tmp -= cur_error;                                               \
+        orig = tmp;
+
+#define UPDATE_ERROR_MEDIUM()                                           \
+        for (j = 4; j > 0; j--)                                         \
+          errors[chan_pos*5 + j] = errors[chan_pos*5 + j-1];            \
+        errors[chan_pos*5] = (*dst)/factor - orig;
+
+/* Noise shaping coefficients by David Schleef, moves most power of the
+ * error noise into inaudible frequency ranges */
+
+static const gdouble ns_high_coeffs[] = {
+  2.08484, -2.92975, 3.27918, -3.31399, 2.61339, -1.72008, 0.876066, -0.340122
+};
+
+#define INIT_NS_HIGH()                                                  \
+  gdouble orig;                                                         \
+  gdouble *errors = ctx->error_buf, cur_error;                          \
+  int j;
+
+#define ADD_NS_HIGH()                                                   \
+        cur_error = 0.0;                                                \
+        for (j = 0; j < 8; j++)                                         \
+          cur_error += errors[chan_pos + j] * ns_high_coeffs[j];          \
+        tmp -= cur_error;                                               \
+        orig = tmp;
+
+#define UPDATE_ERROR_HIGH()                                             \
+        for (j = 7; j > 0; j--)                                         \
+          errors[chan_pos + j] = errors[chan_pos + j-1];                \
+        errors[chan_pos] = (*dst)/factor - orig;
+
+
+MAKE_QUANTIZE_FUNC_I (signed_none_none, NONE_FUNC, NONE_FUNC, ROUND);
+MAKE_QUANTIZE_FUNC_I (signed_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I,
+    NONE_FUNC);
+MAKE_QUANTIZE_FUNC_I (signed_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
+    NONE_FUNC);
+MAKE_QUANTIZE_FUNC_I (signed_tpdf_hf_none, INIT_DITHER_TPDF_HF_I,
+    ADD_DITHER_TPDF_HF_I, NONE_FUNC);
+
+MAKE_QUANTIZE_FUNC_I (unsigned_none_none, NONE_FUNC, NONE_FUNC, ROUND);
+MAKE_QUANTIZE_FUNC_I (unsigned_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I,
+    NONE_FUNC);
+MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
+    NONE_FUNC);
+MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_hf_none, INIT_DITHER_TPDF_HF_I,
+    ADD_DITHER_TPDF_HF_I, NONE_FUNC);
+
+MAKE_QUANTIZE_FUNC_F (float_none_error_feedback, NONE_FUNC,
+    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, NONE_FUNC,
+    UPDATE_ERROR_ERROR_FEEDBACK);
+MAKE_QUANTIZE_FUNC_F (float_none_simple, NONE_FUNC, INIT_NS_SIMPLE,
+    ADD_NS_SIMPLE, NONE_FUNC, UPDATE_ERROR_SIMPLE);
+MAKE_QUANTIZE_FUNC_F (float_none_medium, NONE_FUNC, INIT_NS_MEDIUM,
+    ADD_NS_MEDIUM, NONE_FUNC, UPDATE_ERROR_MEDIUM);
+MAKE_QUANTIZE_FUNC_F (float_none_high, NONE_FUNC, INIT_NS_HIGH, ADD_NS_HIGH,
+    NONE_FUNC, UPDATE_ERROR_HIGH);
+
+MAKE_QUANTIZE_FUNC_F (float_rpdf_error_feedback, INIT_DITHER_RPDF_F,
+    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_RPDF_F,
+    UPDATE_ERROR_ERROR_FEEDBACK);
+MAKE_QUANTIZE_FUNC_F (float_rpdf_simple, INIT_DITHER_RPDF_F, INIT_NS_SIMPLE,
+    ADD_NS_SIMPLE, ADD_DITHER_RPDF_F, UPDATE_ERROR_SIMPLE);
+MAKE_QUANTIZE_FUNC_F (float_rpdf_medium, INIT_DITHER_RPDF_F, INIT_NS_MEDIUM,
+    ADD_NS_MEDIUM, ADD_DITHER_RPDF_F, UPDATE_ERROR_MEDIUM);
+MAKE_QUANTIZE_FUNC_F (float_rpdf_high, INIT_DITHER_RPDF_F, INIT_NS_HIGH,
+    ADD_NS_HIGH, ADD_DITHER_RPDF_F, UPDATE_ERROR_HIGH);
+
+MAKE_QUANTIZE_FUNC_F (float_tpdf_error_feedback, INIT_DITHER_TPDF_F,
+    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_TPDF_F,
+    UPDATE_ERROR_ERROR_FEEDBACK);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_simple, INIT_DITHER_TPDF_F, INIT_NS_SIMPLE,
+    ADD_NS_SIMPLE, ADD_DITHER_TPDF_F, UPDATE_ERROR_SIMPLE);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_medium, INIT_DITHER_TPDF_F, INIT_NS_MEDIUM,
+    ADD_NS_MEDIUM, ADD_DITHER_TPDF_F, UPDATE_ERROR_MEDIUM);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_high, INIT_DITHER_TPDF_F, INIT_NS_HIGH,
+    ADD_NS_HIGH, ADD_DITHER_TPDF_F, UPDATE_ERROR_HIGH);
+
+MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_error_feedback, INIT_DITHER_TPDF_HF_F,
+    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_TPDF_HF_F,
+    UPDATE_ERROR_ERROR_FEEDBACK);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_simple, INIT_DITHER_TPDF_HF_F,
+    INIT_NS_SIMPLE, ADD_NS_SIMPLE, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_SIMPLE);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_medium, INIT_DITHER_TPDF_HF_F,
+    INIT_NS_MEDIUM, ADD_NS_MEDIUM, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_MEDIUM);
+MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_high, INIT_DITHER_TPDF_HF_F, INIT_NS_HIGH,
+    ADD_NS_HIGH, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_HIGH);
+
+static AudioConvertQuantize quantize_funcs[] = {
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_none_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_rpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_hf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_none_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_rpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_hf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_error_feedback),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_simple),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_medium),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_high),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_error_feedback),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_simple),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_medium),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_high),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_error_feedback),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_simple),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_medium),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_high),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_error_feedback),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_simple),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_medium),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_high)
+};
+
+static void
+gst_audio_quantize_setup_noise_shaping (AudioConvertCtx * ctx)
+{
+  switch (ctx->ns) {
+    case NOISE_SHAPING_HIGH:{
+      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 8);
+      break;
+    }
+    case NOISE_SHAPING_MEDIUM:{
+      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 5);
+      break;
+    }
+    case NOISE_SHAPING_SIMPLE:{
+      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 2);
+      break;
+    }
+    case NOISE_SHAPING_ERROR_FEEDBACK:
+      ctx->error_buf = g_new0 (gdouble, ctx->out.channels);
+      break;
+    case NOISE_SHAPING_NONE:
+    default:
+      ctx->error_buf = NULL;
+      break;
+  }
+  return;
+}
+
+static void
+gst_audio_quantize_free_noise_shaping (AudioConvertCtx * ctx)
+{
+  switch (ctx->ns) {
+    case NOISE_SHAPING_HIGH:
+    case NOISE_SHAPING_MEDIUM:
+    case NOISE_SHAPING_SIMPLE:
+    case NOISE_SHAPING_ERROR_FEEDBACK:
+    case NOISE_SHAPING_NONE:
+    default:
+      break;
+  }
+
+  g_free (ctx->error_buf);
+  ctx->error_buf = NULL;
+  return;
+}
+
+static void
+gst_audio_quantize_setup_dither (AudioConvertCtx * ctx)
+{
+  switch (ctx->dither) {
+    case DITHER_TPDF_HF:
+      if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo))
+        ctx->last_random = g_new0 (gint32, ctx->out.channels);
+      else
+        ctx->last_random = g_new0 (gdouble, ctx->out.channels);
+      break;
+    case DITHER_RPDF:
+    case DITHER_TPDF:
+      ctx->last_random = NULL;
+      break;
+    case DITHER_NONE:
+    default:
+      ctx->last_random = NULL;
+      break;
+  }
+  return;
+}
+
+static void
+gst_audio_quantize_free_dither (AudioConvertCtx * ctx)
+{
+  g_free (ctx->last_random);
+
+  return;
+}
+
+static void
+gst_audio_quantize_setup_quantize_func (AudioConvertCtx * ctx)
+{
+  gint index = 0;
+
+  if (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) {
+    ctx->quantize = NULL;
+    return;
+  }
+
+  if (ctx->ns == NOISE_SHAPING_NONE) {
+    index += ctx->dither;
+    index += GST_AUDIO_FORMAT_INFO_IS_SIGNED (ctx->out.finfo) ? 0 : 4;
+  } else {
+    index += 8 + (4 * ctx->dither);
+    index += ctx->ns - 1;
+  }
+
+  ctx->quantize = quantize_funcs[index];
+}
+
+gboolean
+gst_audio_quantize_setup (AudioConvertCtx * ctx)
+{
+  gst_audio_quantize_setup_dither (ctx);
+  gst_audio_quantize_setup_noise_shaping (ctx);
+  gst_audio_quantize_setup_quantize_func (ctx);
+
+  return TRUE;
+}
+
+void
+gst_audio_quantize_free (AudioConvertCtx * ctx)
+{
+  gst_audio_quantize_free_dither (ctx);
+  gst_audio_quantize_free_noise_shaping (ctx);
+}
diff --git a/gst/audioconvert/gstaudioquantize.h b/gst/audioconvert/gstaudioquantize.h
new file mode 100644
index 0000000..b7e5cce
--- /dev/null
+++ b/gst/audioconvert/gstaudioquantize.h
@@ -0,0 +1,34 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * gstaudioquantize.h: quantizes audio to the target format and optionally
+ *                     applies dithering and noise shaping.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+#include "audioconvert.h"
+
+#ifndef __GST_AUDIO_QUANTIZE_H__
+#define __GST_AUDIO_QUANTIZE_H__
+
+gboolean gst_audio_quantize_setup (AudioConvertCtx * ctx);
+void gst_audio_quantize_reset (AudioConvertCtx * ctx);
+void gst_audio_quantize_free (AudioConvertCtx * ctx);
+
+
+#endif /* __GST_AUDIO_QUANTIZE_H__ */
diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
new file mode 100644
index 0000000..a68f2c1
--- /dev/null
+++ b/gst/audioconvert/gstchannelmix.c
@@ -0,0 +1,743 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * gstchannelmix.c: setup of channel conversion matrices
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+#include <string.h>
+#include <gst/audio/multichannel.h>
+
+#include "gstchannelmix.h"
+
+/*
+ * Channel matrix functions.
+ */
+
+void
+gst_channel_mix_unset_matrix (AudioConvertCtx * this)
+{
+  gint i;
+
+  /* don't access if nothing there */
+  if (!this->matrix)
+    return;
+
+  /* free */
+  for (i = 0; i < this->in.channels; i++)
+    g_free (this->matrix[i]);
+  g_free (this->matrix);
+
+  this->matrix = NULL;
+  g_free (this->tmp);
+  this->tmp = NULL;
+}
+
+/*
+ * Detect and fill in identical channels. E.g.
+ * forward the left/right front channels in a
+ * 5.1 to 2.0 conversion.
+ */
+
+static void
+gst_channel_mix_fill_identical (AudioConvertCtx * this)
+{
+  gint ci, co;
+
+  /* Apart from the compatible channel assignments, we can also have
+   * same channel assignments. This is much simpler, we simply copy
+   * the value from source to dest! */
+  for (co = 0; co < this->out.channels; co++) {
+    /* find a channel in input with same position */
+    for (ci = 0; ci < this->in.channels; ci++) {
+      if (this->in.position[ci] == this->out.position[co]) {
+        this->matrix[ci][co] = 1.0;
+      }
+    }
+  }
+}
+
+/*
+ * Detect and fill in compatible channels. E.g.
+ * forward left/right front to mono (or the other
+ * way around) when going from 2.0 to 1.0.
+ */
+
+static void
+gst_channel_mix_fill_compatible (AudioConvertCtx * this)
+{
+  /* Conversions from one-channel to compatible two-channel configs */
+  struct
+  {
+    GstAudioChannelPosition pos1[2];
+    GstAudioChannelPosition pos2[1];
+  } conv[] = {
+    /* front: mono <-> stereo */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_MONO}},
+        /* front center: 2 <-> 1 */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}},
+        /* rear: 2 <-> 1 */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}
+  };
+  gint c;
+
+  /* conversions from compatible (but not the same) channel schemes */
+  for (c = 0; conv[c].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; c++) {
+    gint pos1_0 = -1, pos1_1 = -1, pos1_2 = -1;
+    gint pos2_0 = -1, pos2_1 = -1, pos2_2 = -1;
+    gint n;
+
+    for (n = 0; n < this->in.channels; n++) {
+      if (this->in.position[n] == conv[c].pos1[0])
+        pos1_0 = n;
+      else if (this->in.position[n] == conv[c].pos1[1])
+        pos1_1 = n;
+      else if (this->in.position[n] == conv[c].pos2[0])
+        pos1_2 = n;
+    }
+    for (n = 0; n < this->out.channels; n++) {
+      if (this->out.position[n] == conv[c].pos1[0])
+        pos2_0 = n;
+      else if (this->out.position[n] == conv[c].pos1[1])
+        pos2_1 = n;
+      else if (this->out.position[n] == conv[c].pos2[0])
+        pos2_2 = n;
+    }
+
+    /* The general idea here is to fill in channels from the same position
+     * as good as possible. This means mixing left<->center and right<->center.
+     */
+
+    /* left -> center */
+    if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 == -1 && pos2_2 != -1)
+      this->matrix[pos1_0][pos2_2] = 1.0;
+    else if (pos1_0 != -1 && pos1_2 != -1 && pos2_0 == -1 && pos2_2 != -1)
+      this->matrix[pos1_0][pos2_2] = 0.5;
+    else if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 != -1 && pos2_2 != -1)
+      this->matrix[pos1_0][pos2_2] = 1.0;
+
+    /* right -> center */
+    if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 == -1 && pos2_2 != -1)
+      this->matrix[pos1_1][pos2_2] = 1.0;
+    else if (pos1_1 != -1 && pos1_2 != -1 && pos2_1 == -1 && pos2_2 != -1)
+      this->matrix[pos1_1][pos2_2] = 0.5;
+    else if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 != -1 && pos2_2 != -1)
+      this->matrix[pos1_1][pos2_2] = 1.0;
+
+    /* center -> left */
+    if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 == -1 && pos2_0 != -1)
+      this->matrix[pos1_2][pos2_0] = 1.0;
+    else if (pos1_2 != -1 && pos1_0 != -1 && pos2_2 == -1 && pos2_0 != -1)
+      this->matrix[pos1_2][pos2_0] = 0.5;
+    else if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 != -1 && pos2_0 != -1)
+      this->matrix[pos1_2][pos2_0] = 1.0;
+
+    /* center -> right */
+    if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 == -1 && pos2_1 != -1)
+      this->matrix[pos1_2][pos2_1] = 1.0;
+    else if (pos1_2 != -1 && pos1_1 != -1 && pos2_2 == -1 && pos2_1 != -1)
+      this->matrix[pos1_2][pos2_1] = 0.5;
+    else if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 != -1 && pos2_1 != -1)
+      this->matrix[pos1_2][pos2_1] = 1.0;
+  }
+}
+
+/*
+ * Detect and fill in channels not handled by the
+ * above two, e.g. center to left/right front in
+ * 5.1 to 2.0 (or the other way around).
+ *
+ * Unfortunately, limited to static conversions
+ * for now.
+ */
+
+static void
+gst_channel_mix_detect_pos (GstAudioInfo * info,
+    gint * f, gboolean * has_f,
+    gint * c, gboolean * has_c, gint * r, gboolean * has_r,
+    gint * s, gboolean * has_s, gint * b, gboolean * has_b)
+{
+  gint n;
+
+  for (n = 0; n < info->channels; n++) {
+    switch (info->position[n]) {
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_MONO:
+        f[1] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT:
+        f[0] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT:
+        f[2] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER:
+        c[1] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
+        c[0] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
+        c[2] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_CENTER:
+        r[1] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_LEFT:
+        r[0] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT:
+        r[2] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT:
+        s[0] = n;
+        *has_s = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT:
+        s[2] = n;
+        *has_s = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_LFE:
+        *has_b = TRUE;
+        b[1] = n;
+        break;
+      default:
+        break;
+    }
+  }
+}
+
+static void
+gst_channel_mix_fill_one_other (gfloat ** matrix,
+    GstAudioInfo * from_info, gint * from_idx,
+    GstAudioInfo * to_info, gint * to_idx, gfloat ratio)
+{
+
+  /* src & dst have center => passthrough */
+  if (from_idx[1] != -1 && to_idx[1] != -1) {
+    matrix[from_idx[1]][to_idx[1]] = ratio;
+  }
+
+  /* src & dst have left => passthrough */
+  if (from_idx[0] != -1 && to_idx[0] != -1) {
+    matrix[from_idx[0]][to_idx[0]] = ratio;
+  }
+
+  /* src & dst have right => passthrough */
+  if (from_idx[2] != -1 && to_idx[2] != -1) {
+    matrix[from_idx[2]][to_idx[2]] = ratio;
+  }
+
+  /* src has left & dst has center => put into center */
+  if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
+    matrix[from_idx[0]][to_idx[1]] = 0.5 * ratio;
+  } else if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
+    matrix[from_idx[0]][to_idx[1]] = ratio;
+  }
+
+  /* src has right & dst has center => put into center */
+  if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
+    matrix[from_idx[2]][to_idx[1]] = 0.5 * ratio;
+  } else if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
+    matrix[from_idx[2]][to_idx[1]] = ratio;
+  }
+
+  /* src has center & dst has left => passthrough */
+  if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] != -1) {
+    matrix[from_idx[1]][to_idx[0]] = 0.5 * ratio;
+  } else if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] == -1) {
+    matrix[from_idx[1]][to_idx[0]] = ratio;
+  }
+
+  /* src has center & dst has right => passthrough */
+  if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] != -1) {
+    matrix[from_idx[1]][to_idx[2]] = 0.5 * ratio;
+  } else if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] == -1) {
+    matrix[from_idx[1]][to_idx[2]] = ratio;
+  }
+}
+
+#define RATIO_CENTER_FRONT (1.0 / sqrt (2.0))
+#define RATIO_CENTER_SIDE (1.0 / 2.0)
+#define RATIO_CENTER_REAR (1.0 / sqrt (8.0))
+
+#define RATIO_FRONT_CENTER (1.0 / sqrt (2.0))
+#define RATIO_FRONT_SIDE (1.0 / sqrt (2.0))
+#define RATIO_FRONT_REAR (1.0 / 2.0)
+
+#define RATIO_SIDE_CENTER (1.0 / 2.0)
+#define RATIO_SIDE_FRONT (1.0 / sqrt (2.0))
+#define RATIO_SIDE_REAR (1.0 / sqrt (2.0))
+
+#define RATIO_CENTER_BASS (1.0 / sqrt (2.0))
+#define RATIO_FRONT_BASS (1.0)
+#define RATIO_SIDE_BASS (1.0 / sqrt (2.0))
+#define RATIO_REAR_BASS (1.0 / sqrt (2.0))
+
+static void
+gst_channel_mix_fill_others (AudioConvertCtx * this)
+{
+  gboolean in_has_front = FALSE, out_has_front = FALSE,
+      in_has_center = FALSE, out_has_center = FALSE,
+      in_has_rear = FALSE, out_has_rear = FALSE,
+      in_has_side = FALSE, out_has_side = FALSE,
+      in_has_bass = FALSE, out_has_bass = FALSE;
+  /* LEFT, RIGHT, MONO */
+  gint in_f[3] = { -1, -1, -1 };
+  gint out_f[3] = { -1, -1, -1 };
+  /* LOC, ROC, CENTER */
+  gint in_c[3] = { -1, -1, -1 };
+  gint out_c[3] = { -1, -1, -1 };
+  /* RLEFT, RRIGHT, RCENTER */
+  gint in_r[3] = { -1, -1, -1 };
+  gint out_r[3] = { -1, -1, -1 };
+  /* SLEFT, INVALID, SRIGHT */
+  gint in_s[3] = { -1, -1, -1 };
+  gint out_s[3] = { -1, -1, -1 };
+  /* INVALID, LFE, INVALID */
+  gint in_b[3] = { -1, -1, -1 };
+  gint out_b[3] = { -1, -1, -1 };
+
+  /* First see where (if at all) the various channels from/to
+   * which we want to convert are located in our matrix/array. */
+  gst_channel_mix_detect_pos (&this->in,
+      in_f, &in_has_front,
+      in_c, &in_has_center, in_r, &in_has_rear,
+      in_s, &in_has_side, in_b, &in_has_bass);
+  gst_channel_mix_detect_pos (&this->out,
+      out_f, &out_has_front,
+      out_c, &out_has_center, out_r, &out_has_rear,
+      out_s, &out_has_side, out_b, &out_has_bass);
+
+  /* The general idea here is:
+   * - if the source has a channel that the destination doesn't have mix
+   *   it into the nearest available destination channel
+   * - if the destination has a channel that the source doesn't have mix
+   *   the nearest source channel into the destination channel
+   *
+   * The ratio for the mixing becomes lower as the distance between the
+   * channels gets larger
+   */
+
+  /* center <-> front/side/rear */
+  if (!in_has_center && in_has_front && out_has_center) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_c, RATIO_CENTER_FRONT);
+  } else if (!in_has_center && !in_has_front && in_has_side && out_has_center) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_c, RATIO_CENTER_SIDE);
+  } else if (!in_has_center && !in_has_front && !in_has_side && in_has_rear
+      && out_has_center) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
+        out_c, RATIO_CENTER_REAR);
+  } else if (in_has_center && !out_has_center && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_c, &this->out, out_f, RATIO_CENTER_FRONT);
+  } else if (in_has_center && !out_has_center && !out_has_front && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_c, &this->out, out_s, RATIO_CENTER_SIDE);
+  } else if (in_has_center && !out_has_center && !out_has_front && !out_has_side
+      && out_has_rear) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
+        out_r, RATIO_CENTER_REAR);
+  }
+
+  /* front <-> center/side/rear */
+  if (!in_has_front && in_has_center && !in_has_side && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_c, &this->out, out_f, RATIO_CENTER_FRONT);
+  } else if (!in_has_front && !in_has_center && in_has_side && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_f, RATIO_FRONT_SIDE);
+  } else if (!in_has_front && in_has_center && in_has_side && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_c, &this->out, out_f, 0.5 * RATIO_CENTER_FRONT);
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_f, 0.5 * RATIO_FRONT_SIDE);
+  } else if (!in_has_front && !in_has_center && !in_has_side && in_has_rear
+      && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
+        out_f, RATIO_FRONT_REAR);
+  } else if (in_has_front && out_has_center && !out_has_side && !out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_c, RATIO_CENTER_FRONT);
+  } else if (in_has_front && !out_has_center && out_has_side && !out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_s, RATIO_FRONT_SIDE);
+  } else if (in_has_front && out_has_center && out_has_side && !out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_c, 0.5 * RATIO_CENTER_FRONT);
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_s, 0.5 * RATIO_FRONT_SIDE);
+  } else if (in_has_front && !out_has_center && !out_has_side && !out_has_front
+      && out_has_rear) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_f, &this->out,
+        out_r, RATIO_FRONT_REAR);
+  }
+
+  /* side <-> center/front/rear */
+  if (!in_has_side && in_has_front && !in_has_rear && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_s, RATIO_FRONT_SIDE);
+  } else if (!in_has_side && !in_has_front && in_has_rear && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_r, &this->out, out_s, RATIO_SIDE_REAR);
+  } else if (!in_has_side && in_has_front && in_has_rear && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_s, 0.5 * RATIO_FRONT_SIDE);
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_r, &this->out, out_s, 0.5 * RATIO_SIDE_REAR);
+  } else if (!in_has_side && !in_has_front && !in_has_rear && in_has_center
+      && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
+        out_s, RATIO_CENTER_SIDE);
+  } else if (in_has_side && out_has_front && !out_has_rear && !out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_f, RATIO_FRONT_SIDE);
+  } else if (in_has_side && !out_has_front && out_has_rear && !out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_r, RATIO_SIDE_REAR);
+  } else if (in_has_side && out_has_front && out_has_rear && !out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_f, 0.5 * RATIO_FRONT_SIDE);
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_r, 0.5 * RATIO_SIDE_REAR);
+  } else if (in_has_side && !out_has_front && !out_has_rear && out_has_center
+      && !out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_s, &this->out,
+        out_c, RATIO_CENTER_SIDE);
+  }
+
+  /* rear <-> center/front/side */
+  if (!in_has_rear && in_has_side && out_has_rear) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_s, &this->out, out_r, RATIO_SIDE_REAR);
+  } else if (!in_has_rear && !in_has_side && in_has_front && out_has_rear) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_f, &this->out, out_r, RATIO_FRONT_REAR);
+  } else if (!in_has_rear && !in_has_side && !in_has_front && in_has_center
+      && out_has_rear) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
+        out_r, RATIO_CENTER_REAR);
+  } else if (in_has_rear && !out_has_rear && out_has_side) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_r, &this->out, out_s, RATIO_SIDE_REAR);
+  } else if (in_has_rear && !out_has_rear && !out_has_side && out_has_front) {
+    gst_channel_mix_fill_one_other (this->matrix,
+        &this->in, in_r, &this->out, out_f, RATIO_FRONT_REAR);
+  } else if (in_has_rear && !out_has_rear && !out_has_side && !out_has_front
+      && out_has_center) {
+    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
+        out_c, RATIO_CENTER_REAR);
+  }
+
+  /* bass <-> any */
+  if (in_has_bass && !out_has_bass) {
+    if (out_has_center) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_b, &this->out, out_c, RATIO_CENTER_BASS);
+    }
+    if (out_has_front) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_b, &this->out, out_f, RATIO_FRONT_BASS);
+    }
+    if (out_has_side) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_b, &this->out, out_s, RATIO_SIDE_BASS);
+    }
+    if (out_has_rear) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_b, &this->out, out_r, RATIO_REAR_BASS);
+    }
+  } else if (!in_has_bass && out_has_bass) {
+    if (in_has_center) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_c, &this->out, out_b, RATIO_CENTER_BASS);
+    }
+    if (in_has_front) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_f, &this->out, out_b, RATIO_FRONT_BASS);
+    }
+    if (in_has_side) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_s, &this->out, out_b, RATIO_REAR_BASS);
+    }
+    if (in_has_rear) {
+      gst_channel_mix_fill_one_other (this->matrix,
+          &this->in, in_r, &this->out, out_b, RATIO_REAR_BASS);
+    }
+  }
+}
+
+/*
+ * Normalize output values.
+ */
+
+static void
+gst_channel_mix_fill_normalize (AudioConvertCtx * this)
+{
+  gfloat sum, top = 0;
+  gint i, j;
+
+  for (j = 0; j < this->out.channels; j++) {
+    /* calculate sum */
+    sum = 0.0;
+    for (i = 0; i < this->in.channels; i++) {
+      sum += fabs (this->matrix[i][j]);
+    }
+    if (sum > top) {
+      top = sum;
+    }
+  }
+
+  /* normalize to this */
+  if (top == 0.0)
+    return;
+
+  for (j = 0; j < this->out.channels; j++) {
+    for (i = 0; i < this->in.channels; i++) {
+      this->matrix[i][j] /= top;
+    }
+  }
+}
+
+static gboolean
+gst_channel_mix_fill_special (AudioConvertCtx * this)
+{
+  GstAudioInfo *in = &this->in, *out = &this->out;
+
+  /* Special, standard conversions here */
+
+  /* Mono<->Stereo, just a fast-path */
+  if (in->channels == 2 && out->channels == 1 &&
+      ((in->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
+              in->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
+          (in->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
+              in->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
+      out->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_MONO) {
+    this->matrix[0][0] = 0.5;
+    this->matrix[1][0] = 0.5;
+    return TRUE;
+  } else if (in->channels == 1 && out->channels == 2 &&
+      ((out->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
+              out->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
+          (out->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
+              out->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
+      in->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_MONO) {
+    this->matrix[0][0] = 1.0;
+    this->matrix[0][1] = 1.0;
+    return TRUE;
+  }
+
+  /* TODO: 5.1 <-> Stereo and other standard conversions */
+
+  return FALSE;
+}
+
+/*
+ * Automagically generate conversion matrix.
+ */
+
+static void
+gst_channel_mix_fill_matrix (AudioConvertCtx * this)
+{
+  if (gst_channel_mix_fill_special (this))
+    return;
+
+  gst_channel_mix_fill_identical (this);
+
+  if (!GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS (&this->in)) {
+    gst_channel_mix_fill_compatible (this);
+    gst_channel_mix_fill_others (this);
+    gst_channel_mix_fill_normalize (this);
+  }
+}
+
+/* only call after this->out and this->in are filled in */
+void
+gst_channel_mix_setup_matrix (AudioConvertCtx * this)
+{
+  gint i, j;
+
+  /* don't lose memory */
+  gst_channel_mix_unset_matrix (this);
+
+  /* temp storage */
+  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (this->in.finfo) ||
+      GST_AUDIO_FORMAT_INFO_IS_INTEGER (this->out.finfo)) {
+    this->tmp = (gpointer) g_new (gint32, this->out.channels);
+  } else {
+    this->tmp = (gpointer) g_new (gdouble, this->out.channels);
+  }
+
+  /* allocate */
+  this->matrix = g_new0 (gfloat *, this->in.channels);
+  for (i = 0; i < this->in.channels; i++) {
+    this->matrix[i] = g_new (gfloat, this->out.channels);
+    for (j = 0; j < this->out.channels; j++)
+      this->matrix[i][j] = 0.;
+  }
+
+  /* setup the matrix' internal values */
+  gst_channel_mix_fill_matrix (this);
+
+#ifndef GST_DISABLE_GST_DEBUG
+  /* debug */
+  {
+    GString *s;
+    s = g_string_new ("Matrix for");
+    g_string_append_printf (s, " %d -> %d: ",
+        this->in.channels, this->out.channels);
+    g_string_append (s, "{");
+    for (i = 0; i < this->in.channels; i++) {
+      if (i != 0)
+        g_string_append (s, ",");
+      g_string_append (s, " {");
+      for (j = 0; j < this->out.channels; j++) {
+        if (j != 0)
+          g_string_append (s, ",");
+        g_string_append_printf (s, " %f", this->matrix[i][j]);
+      }
+      g_string_append (s, " }");
+    }
+    g_string_append (s, " }");
+    GST_DEBUG ("%s", s->str);
+    g_string_free (s, TRUE);
+  }
+#endif
+}
+
+gboolean
+gst_channel_mix_passthrough (AudioConvertCtx * this)
+{
+  gint i;
+
+  /* only NxN matrices can be identities */
+  if (this->in.channels != this->out.channels)
+    return FALSE;
+
+  /* this assumes a normalized matrix */
+  for (i = 0; i < this->in.channels; i++)
+    if (this->matrix[i][i] != 1.)
+      return FALSE;
+
+  return TRUE;
+}
+
+/* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
+ * you might need later on! */
+void
+gst_channel_mix_mix_int (AudioConvertCtx * this,
+    gint32 * in_data, gint32 * out_data, gint samples)
+{
+  gint in, out, n;
+  gint64 res;
+  gboolean backwards;
+  gint inchannels, outchannels;
+  gint32 *tmp = (gint32 *) this->tmp;
+
+  g_return_if_fail (this->matrix != NULL);
+  g_return_if_fail (this->tmp != NULL);
+
+  inchannels = this->in.channels;
+  outchannels = this->out.channels;
+  backwards = outchannels > inchannels;
+
+  /* FIXME: use liboil here? */
+  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
+      backwards ? n-- : n++) {
+    for (out = 0; out < outchannels; out++) {
+      /* convert */
+      res = 0;
+      for (in = 0; in < inchannels; in++) {
+        res += in_data[n * inchannels + in] * this->matrix[in][out];
+      }
+
+      /* clip (shouldn't we use doubles instead as intermediate format?) */
+      if (res < G_MININT32)
+        res = G_MININT32;
+      else if (res > G_MAXINT32)
+        res = G_MAXINT32;
+      tmp[out] = res;
+    }
+    memcpy (&out_data[n * outchannels], this->tmp,
+        sizeof (gint32) * outchannels);
+  }
+}
+
+void
+gst_channel_mix_mix_float (AudioConvertCtx * this,
+    gdouble * in_data, gdouble * out_data, gint samples)
+{
+  gint in, out, n;
+  gdouble res;
+  gboolean backwards;
+  gint inchannels, outchannels;
+  gdouble *tmp = (gdouble *) this->tmp;
+
+  g_return_if_fail (this->matrix != NULL);
+  g_return_if_fail (this->tmp != NULL);
+
+  inchannels = this->in.channels;
+  outchannels = this->out.channels;
+  backwards = outchannels > inchannels;
+
+  /* FIXME: use liboil here? */
+  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
+      backwards ? n-- : n++) {
+    for (out = 0; out < outchannels; out++) {
+      /* convert */
+      res = 0.0;
+      for (in = 0; in < inchannels; in++) {
+        res += in_data[n * inchannels + in] * this->matrix[in][out];
+      }
+
+      /* clip (shouldn't we use doubles instead as intermediate format?) */
+      if (res < -1.0)
+        res = -1.0;
+      else if (res > 1.0)
+        res = 1.0;
+      tmp[out] = res;
+    }
+    memcpy (&out_data[n * outchannels], this->tmp,
+        sizeof (gdouble) * outchannels);
+  }
+}
diff --git a/gst/audioconvert/gstchannelmix.h b/gst/audioconvert/gstchannelmix.h
new file mode 100644
index 0000000..e02748e
--- /dev/null
+++ b/gst/audioconvert/gstchannelmix.h
@@ -0,0 +1,56 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * gstchannelmix.h: setup of channel conversion matrices
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_CHANNEL_MIX_H__
+#define __GST_CHANNEL_MIX_H__
+
+#include <gst/gst.h>
+#include "audioconvert.h"
+
+/*
+ * Delete channel mixer matrix.
+ */
+void            gst_channel_mix_unset_matrix    (AudioConvertCtx * this);
+
+/*
+ * Setup channel mixer matrix.
+ */
+void            gst_channel_mix_setup_matrix    (AudioConvertCtx * this);
+
+/*
+ * Checks for passthrough (= identity matrix).
+ */
+gboolean        gst_channel_mix_passthrough     (AudioConvertCtx * this);
+
+/*
+ * Do actual mixing.
+ */
+void            gst_channel_mix_mix_int         (AudioConvertCtx * this,
+                                                 gint32          * in_data,
+                                                 gint32          * out_data,
+                                                 gint              samples);
+
+void            gst_channel_mix_mix_float       (AudioConvertCtx * this,
+                                                 gdouble         * in_data,
+                                                 gdouble         * out_data,
+                                                 gint              samples);
+
+#endif /* __GST_CHANNEL_MIX_H__ */
diff --git a/gst/audioconvert/gstfastrandom.h b/gst/audioconvert/gstfastrandom.h
new file mode 100644
index 0000000..022b87e
--- /dev/null
+++ b/gst/audioconvert/gstfastrandom.h
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) 2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * gstfastrandom.h: Fast, bad PNRG
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+
+#ifndef __GST_FAST_RANDOM__
+#define __GST_FAST_RANDOM__
+
+/* transform [0..2^32] -> [0..1] */
+#define GST_RAND_DOUBLE_TRANSFORM 2.3283064365386962890625e-10
+
+/* This is the base function, implementing a linear congruential generator
+ * and returning a pseudo random number between 0 and 2^32 - 1.
+ */
+static inline guint32
+gst_fast_random_uint32 (void)
+{
+  static guint32 state = 0xdeadbeef;
+
+  return (state = state * 1103515245 + 12345);
+}
+
+static inline guint32
+gst_fast_random_uint32_range (gint32 start, gint32 end)
+{
+  guint64 tmp = gst_fast_random_uint32 ();
+
+  tmp = (tmp * (end - start)) / G_MAXUINT32 + start;
+
+  return (guint32) tmp;
+}
+
+static inline gint32
+gst_fast_random_int32 (void)
+{
+  return (gint32) gst_fast_random_uint32 ();
+}
+
+static inline gint32
+gst_fast_random_int32_range (gint32 start, gint32 end)
+{
+  gint64 tmp = gst_fast_random_uint32 ();
+
+  tmp = (tmp * (end - start)) / G_MAXUINT32 + start;
+
+  return (gint32) tmp;
+}
+
+static inline gdouble
+gst_fast_random_double (void)
+{
+  gdouble ret;
+
+  ret = gst_fast_random_uint32 () * GST_RAND_DOUBLE_TRANSFORM;
+  ret = (ret + gst_fast_random_uint32 ()) * GST_RAND_DOUBLE_TRANSFORM;
+
+  if (ret >= 1.0)
+    return gst_fast_random_double ();
+
+  return ret;
+}
+
+static inline gdouble
+gst_fast_random_double_range (gdouble start, gdouble end)
+{
+  return gst_fast_random_double () * (end - start) + start;
+}
+
+#undef GST_RAND_DOUBLE_TRANSFORM
+
+#endif /* __GST_FAST_RANDOM__ */
+
diff --git a/gst/audioconvert/plugin.c b/gst/audioconvert/plugin.c
new file mode 100644
index 0000000..105f0e9
--- /dev/null
+++ b/gst/audioconvert/plugin.c
@@ -0,0 +1,49 @@
+/* GStreamer audio conversion plugin
+ * Copyright (C) 2004 Andy Wingo <wingo at pobox.com>
+ *
+ * plugin.c: the stubs for the audioconvert plugin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "plugin.h"
+
+#include <gst/audio/multichannel.h>
+#include "gstaudioconvertorc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  /* ensure GstAudioChannelPosition type is registered */
+  if (!gst_audio_channel_position_get_type ())
+    return FALSE;
+
+  if (!gst_element_register (plugin, "audioconvert",
+          GST_RANK_PRIMARY, gst_audio_convert_get_type ()))
+    return FALSE;
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "audioconvert",
+    "Convert audio to different formats",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/audioconvert/plugin.h b/gst/audioconvert/plugin.h
new file mode 100644
index 0000000..5aa3ec4
--- /dev/null
+++ b/gst/audioconvert/plugin.h
@@ -0,0 +1,35 @@
+/* GStreamer buffer-frames conversion plugin
+ * Copyright (C) 2004 Andy Wingo <wingo at pobox.com>
+ *
+ * plugin.h: the stubs for the buffer-frames-convert plugin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_PLUGIN_AUDIO_CONVERT_H__
+#define __GST_PLUGIN_AUDIO_CONVERT_H__
+
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+GType gst_audio_convert_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLUGIN_AUDIO_CONVERT_H__ */
diff --git a/gst/audiorate/Makefile.am b/gst/audiorate/Makefile.am
new file mode 100644
index 0000000..bcb6625
--- /dev/null
+++ b/gst/audiorate/Makefile.am
@@ -0,0 +1,25 @@
+noinst_HEADERS = gstaudiorate.h
+
+plugin_LTLIBRARIES = libgstaudiorate.la
+
+libgstaudiorate_la_SOURCES = gstaudiorate.c
+libgstaudiorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstaudiorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudiorate_la_LIBADD = $(GST_LIBS) \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la
+
+libgstaudiorate_la_LIBTOOLFLAGS = --tag=disable-static
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudiorate -:SHARED libgstaudiorate \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudiorate_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \
+	           $(libgstaudiorate_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/audiorate/Makefile.in b/gst/audiorate/Makefile.in
new file mode 100644
index 0000000..da18e94
--- /dev/null
+++ b/gst/audiorate/Makefile.in
@@ -0,0 +1,771 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/audiorate
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstaudiorate_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la
+am_libgstaudiorate_la_OBJECTS = libgstaudiorate_la-gstaudiorate.lo
+libgstaudiorate_la_OBJECTS = $(am_libgstaudiorate_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstaudiorate_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstaudiorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstaudiorate_la_CFLAGS) $(CFLAGS) \
+	$(libgstaudiorate_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstaudiorate_la_SOURCES)
+DIST_SOURCES = $(libgstaudiorate_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = gstaudiorate.h
+plugin_LTLIBRARIES = libgstaudiorate.la
+libgstaudiorate_la_SOURCES = gstaudiorate.c
+libgstaudiorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstaudiorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudiorate_la_LIBADD = $(GST_LIBS) \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la
+
+libgstaudiorate_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiorate/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/audiorate/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstaudiorate.la: $(libgstaudiorate_la_OBJECTS) $(libgstaudiorate_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstaudiorate_la_LINK) -rpath $(plugindir) $(libgstaudiorate_la_OBJECTS) $(libgstaudiorate_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiorate_la-gstaudiorate.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstaudiorate_la-gstaudiorate.lo: gstaudiorate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiorate_la_CFLAGS) $(CFLAGS) -MT libgstaudiorate_la-gstaudiorate.lo -MD -MP -MF $(DEPDIR)/libgstaudiorate_la-gstaudiorate.Tpo -c -o libgstaudiorate_la-gstaudiorate.lo `test -f 'gstaudiorate.c' || echo '$(srcdir)/'`gstaudiorate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiorate_la-gstaudiorate.Tpo $(DEPDIR)/libgstaudiorate_la-gstaudiorate.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiorate.c' object='libgstaudiorate_la-gstaudiorate.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiorate_la_CFLAGS) $(CFLAGS) -c -o libgstaudiorate_la-gstaudiorate.lo `test -f 'gstaudiorate.c' || echo '$(srcdir)/'`gstaudiorate.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudiorate -:SHARED libgstaudiorate \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudiorate_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \
+	           $(libgstaudiorate_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/audiorate/gstaudiorate.c b/gst/audiorate/gstaudiorate.c
new file mode 100644
index 0000000..743933c
--- /dev/null
+++ b/gst/audiorate/gstaudiorate.c
@@ -0,0 +1,769 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-audiorate
+ * @see_also: #GstVideoRate
+ *
+ * This element takes an incoming stream of timestamped raw audio frames and
+ * produces a perfect stream by inserting or dropping samples as needed.
+ *
+ * This operation may be of use to link to elements that require or otherwise
+ * implicitly assume a perfect stream as they do not store timestamps,
+ * but derive this by some means (e.g. bitrate for some AVI cases).
+ *
+ * The properties #GstAudioRate:in, #GstAudioRate:out, #GstAudioRate:add
+ * and #GstAudioRate:drop can be read to obtain information about number of
+ * input samples, output samples, dropped samples (i.e. the number of unused
+ * input samples) and inserted samples (i.e. the number of samples added to
+ * stream).
+ *
+ * When the #GstAudioRate:silent property is set to FALSE, a GObject property
+ * notification will be emitted whenever one of the #GstAudioRate:add or
+ * #GstAudioRate:drop values changes.
+ * This can potentially cause performance degradation.
+ * Note that property notification will happen from the streaming thread, so
+ * applications should be prepared for this.
+ *
+ * If the #GstAudioRate:tolerance property is non-zero, and an incoming buffer's
+ * timestamp deviates less than the property indicates from what would make a
+ * 'perfect time', then no samples will be added or dropped.
+ * Note that the output is still guaranteed to be a perfect stream, which means
+ * that the incoming data is then simply shifted (by less than the indicated
+ * tolerance) to a perfect time.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v alsasrc ! audiorate ! wavenc ! filesink location=alsa.wav
+ * ]| Capture audio from an ALSA device, and turn it into a perfect stream
+ * for saving in a raw audio file.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "gstaudiorate.h"
+
+#define GST_CAT_DEFAULT audio_rate_debug
+GST_DEBUG_CATEGORY_STATIC (audio_rate_debug);
+
+/* GstAudioRate signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+#define DEFAULT_SILENT     TRUE
+#define DEFAULT_TOLERANCE  0
+#define DEFAULT_SKIP_TO_FIRST FALSE
+
+enum
+{
+  ARG_0,
+  ARG_IN,
+  ARG_OUT,
+  ARG_ADD,
+  ARG_DROP,
+  ARG_SILENT,
+  ARG_TOLERANCE,
+  ARG_SKIP_TO_FIRST
+};
+
+static GstStaticPadTemplate gst_audio_rate_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
+    );
+
+static GstStaticPadTemplate gst_audio_rate_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
+    );
+
+static gboolean gst_audio_rate_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_audio_rate_src_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_audio_rate_chain (GstPad * pad, GstBuffer * buf);
+
+static void gst_audio_rate_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_audio_rate_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstStateChangeReturn gst_audio_rate_change_state (GstElement * element,
+    GstStateChange transition);
+
+/*static guint gst_audio_rate_signals[LAST_SIGNAL] = { 0 }; */
+
+static GParamSpec *pspec_drop = NULL;
+static GParamSpec *pspec_add = NULL;
+
+#define gst_audio_rate_parent_class parent_class
+G_DEFINE_TYPE (GstAudioRate, gst_audio_rate, GST_TYPE_ELEMENT);
+
+static void
+gst_audio_rate_class_init (GstAudioRateClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  object_class->set_property = gst_audio_rate_set_property;
+  object_class->get_property = gst_audio_rate_get_property;
+
+  g_object_class_install_property (object_class, ARG_IN,
+      g_param_spec_uint64 ("in", "In",
+          "Number of input samples", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, ARG_OUT,
+      g_param_spec_uint64 ("out", "Out", "Number of output samples", 0,
+          G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  pspec_add = g_param_spec_uint64 ("add", "Add", "Number of added samples",
+      0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, ARG_ADD, pspec_add);
+  pspec_drop = g_param_spec_uint64 ("drop", "Drop", "Number of dropped samples",
+      0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, ARG_DROP, pspec_drop);
+  g_object_class_install_property (object_class, ARG_SILENT,
+      g_param_spec_boolean ("silent", "silent",
+          "Don't emit notify for dropped and duplicated frames", DEFAULT_SILENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstAudioRate:tolerance
+   *
+   * The difference between incoming timestamp and next timestamp must exceed
+   * the given value for audiorate to add or drop samples.
+   *
+   * Since: 0.10.26
+   **/
+  g_object_class_install_property (object_class, ARG_TOLERANCE,
+      g_param_spec_uint64 ("tolerance", "tolerance",
+          "Only act if timestamp jitter/imperfection exceeds indicated tolerance (ns)",
+          0, G_MAXUINT64, DEFAULT_TOLERANCE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstAudioRate:skip-to-first:
+   *
+   * Don't produce buffers before the first one we receive.
+   *
+   * Since: 0.10.33
+   **/
+  g_object_class_install_property (object_class, ARG_SKIP_TO_FIRST,
+      g_param_spec_boolean ("skip-to-first", "Skip to first buffer",
+          "Don't produce buffers before the first one we receive",
+          DEFAULT_SKIP_TO_FIRST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (element_class,
+      "Audio rate adjuster", "Filter/Effect/Audio",
+      "Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream",
+      "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_audio_rate_sink_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_audio_rate_src_template));
+
+  element_class->change_state = gst_audio_rate_change_state;
+}
+
+static void
+gst_audio_rate_reset (GstAudioRate * audiorate)
+{
+  audiorate->next_offset = -1;
+  audiorate->next_ts = -1;
+  audiorate->discont = TRUE;
+  gst_segment_init (&audiorate->sink_segment, GST_FORMAT_UNDEFINED);
+  gst_segment_init (&audiorate->src_segment, GST_FORMAT_TIME);
+
+  GST_DEBUG_OBJECT (audiorate, "handle reset");
+}
+
+static gboolean
+gst_audio_rate_setcaps (GstAudioRate * audiorate, GstCaps * caps)
+{
+  GstAudioInfo info;
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto wrong_caps;
+
+  audiorate->info = info;
+
+  return TRUE;
+
+  /* ERRORS */
+wrong_caps:
+  {
+    GST_DEBUG_OBJECT (audiorate, "could not parse caps");
+    return FALSE;
+  }
+}
+
+static void
+gst_audio_rate_init (GstAudioRate * audiorate)
+{
+  audiorate->sinkpad =
+      gst_pad_new_from_static_template (&gst_audio_rate_sink_template, "sink");
+  gst_pad_set_event_function (audiorate->sinkpad, gst_audio_rate_sink_event);
+  gst_pad_set_chain_function (audiorate->sinkpad, gst_audio_rate_chain);
+  gst_pad_set_getcaps_function (audiorate->sinkpad, gst_pad_proxy_getcaps);
+  gst_element_add_pad (GST_ELEMENT (audiorate), audiorate->sinkpad);
+
+  audiorate->srcpad =
+      gst_pad_new_from_static_template (&gst_audio_rate_src_template, "src");
+  gst_pad_set_event_function (audiorate->srcpad, gst_audio_rate_src_event);
+  gst_pad_set_getcaps_function (audiorate->srcpad, gst_pad_proxy_getcaps);
+  gst_element_add_pad (GST_ELEMENT (audiorate), audiorate->srcpad);
+
+  audiorate->in = 0;
+  audiorate->out = 0;
+  audiorate->drop = 0;
+  audiorate->add = 0;
+  audiorate->silent = DEFAULT_SILENT;
+  audiorate->tolerance = DEFAULT_TOLERANCE;
+}
+
+static void
+gst_audio_rate_fill_to_time (GstAudioRate * audiorate, GstClockTime time)
+{
+  GstBuffer *buf;
+
+  GST_DEBUG_OBJECT (audiorate, "next_ts: %" GST_TIME_FORMAT
+      ", filling to %" GST_TIME_FORMAT, GST_TIME_ARGS (audiorate->next_ts),
+      GST_TIME_ARGS (time));
+
+  if (!GST_CLOCK_TIME_IS_VALID (time) ||
+      !GST_CLOCK_TIME_IS_VALID (audiorate->next_ts))
+    return;
+
+  /* feed an empty buffer to chain with the given timestamp,
+   * it will take care of filling */
+  buf = gst_buffer_new ();
+  GST_BUFFER_TIMESTAMP (buf) = time;
+  gst_audio_rate_chain (audiorate->sinkpad, buf);
+}
+
+static gboolean
+gst_audio_rate_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res;
+  GstAudioRate *audiorate;
+
+  audiorate = GST_AUDIO_RATE (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      if ((res = gst_audio_rate_setcaps (audiorate, caps))) {
+        res = gst_pad_push_event (audiorate->srcpad, event);
+      } else {
+        gst_event_unref (event);
+      }
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      GST_DEBUG_OBJECT (audiorate, "handling FLUSH_STOP");
+      gst_audio_rate_reset (audiorate);
+      res = gst_pad_push_event (audiorate->srcpad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &audiorate->sink_segment);
+
+      GST_DEBUG_OBJECT (audiorate, "handle NEWSEGMENT");
+#if 0
+      /* FIXME: bad things will likely happen if rate < 0 ... */
+      if (!update) {
+        /* a new segment starts. We need to figure out what will be the next
+         * sample offset. We mark the offsets as invalid so that the _chain
+         * function will perform this calculation. */
+        gst_audio_rate_fill_to_time (audiorate, audiorate->src_segment.stop);
+#endif
+        audiorate->next_offset = -1;
+        audiorate->next_ts = -1;
+#if 0
+      } else {
+        gst_audio_rate_fill_to_time (audiorate, audiorate->src_segment.start);
+      }
+#endif
+
+      GST_DEBUG_OBJECT (audiorate, "updated segment: %" GST_SEGMENT_FORMAT,
+          &audiorate->sink_segment);
+
+      if (audiorate->sink_segment.format == GST_FORMAT_TIME) {
+        /* TIME formats can be copied to src and forwarded */
+        res = gst_pad_push_event (audiorate->srcpad, event);
+        gst_segment_copy_into (&audiorate->sink_segment,
+            &audiorate->src_segment);
+      } else {
+        /* other formats will be handled in the _chain function */
+        gst_event_unref (event);
+        res = TRUE;
+      }
+      break;
+    }
+    case GST_EVENT_EOS:
+      /* Fill segment until the end */
+      if (GST_CLOCK_TIME_IS_VALID (audiorate->src_segment.stop))
+        gst_audio_rate_fill_to_time (audiorate, audiorate->src_segment.stop);
+      res = gst_pad_push_event (audiorate->srcpad, event);
+      break;
+    default:
+      res = gst_pad_push_event (audiorate->srcpad, event);
+      break;
+  }
+
+  gst_object_unref (audiorate);
+
+  return res;
+}
+
+static gboolean
+gst_audio_rate_src_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res;
+  GstAudioRate *audiorate;
+
+  audiorate = GST_AUDIO_RATE (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    default:
+      res = gst_pad_push_event (audiorate->sinkpad, event);
+      break;
+  }
+
+  gst_object_unref (audiorate);
+
+  return res;
+}
+
+static gboolean
+gst_audio_rate_convert (GstAudioRate * audiorate,
+    GstFormat src_fmt, guint64 src_val, GstFormat dest_fmt, guint64 * dest_val)
+{
+  return gst_audio_info_convert (&audiorate->info, src_fmt, src_val, dest_fmt,
+      (gint64 *) dest_val);
+}
+
+
+static gboolean
+gst_audio_rate_convert_segments (GstAudioRate * audiorate)
+{
+  GstFormat src_fmt, dst_fmt;
+
+  src_fmt = audiorate->sink_segment.format;
+  dst_fmt = audiorate->src_segment.format;
+
+#define CONVERT_VAL(field) gst_audio_rate_convert (audiorate, \
+		src_fmt, audiorate->sink_segment.field,       \
+		dst_fmt, &audiorate->src_segment.field);
+
+  audiorate->sink_segment.rate = audiorate->src_segment.rate;
+  audiorate->sink_segment.flags = audiorate->src_segment.flags;
+  audiorate->sink_segment.applied_rate = audiorate->src_segment.applied_rate;
+  CONVERT_VAL (start);
+  CONVERT_VAL (stop);
+  CONVERT_VAL (time);
+  CONVERT_VAL (base);
+  CONVERT_VAL (position);
+#undef CONVERT_VAL
+
+  return TRUE;
+}
+
+static void
+gst_audio_rate_notify_drop (GstAudioRate * audiorate)
+{
+#if !GLIB_CHECK_VERSION(2,26,0)
+  g_object_notify ((GObject *) audiorate, "drop");
+#else
+  g_object_notify_by_pspec ((GObject *) audiorate, pspec_drop);
+#endif
+}
+
+static void
+gst_audio_rate_notify_add (GstAudioRate * audiorate)
+{
+#if !GLIB_CHECK_VERSION(2,26,0)
+  g_object_notify ((GObject *) audiorate, "add");
+#else
+  g_object_notify_by_pspec ((GObject *) audiorate, pspec_add);
+#endif
+}
+
+static GstFlowReturn
+gst_audio_rate_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstAudioRate *audiorate;
+  GstClockTime in_time;
+  guint64 in_offset, in_offset_end, in_samples;
+  guint in_size;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstClockTimeDiff diff;
+  gint rate, bpf;
+
+  audiorate = GST_AUDIO_RATE (gst_pad_get_parent (pad));
+
+  rate = GST_AUDIO_INFO_RATE (&audiorate->info);
+  bpf = GST_AUDIO_INFO_BPF (&audiorate->info);
+
+  /* need to be negotiated now */
+  if (bpf == 0)
+    goto not_negotiated;
+
+  /* we have a new pending segment */
+  if (audiorate->next_offset == -1) {
+    gint64 pos;
+
+    /* update the TIME segment */
+    gst_audio_rate_convert_segments (audiorate);
+
+    /* first buffer, we are negotiated and we have a segment, calculate the
+     * current expected offsets based on the segment.start, which is the first
+     * media time of the segment and should match the media time of the first
+     * buffer in that segment, which is the offset expressed in DEFAULT units.
+     */
+    /* convert first timestamp of segment to sample position */
+    pos = gst_util_uint64_scale_int (audiorate->src_segment.start,
+        GST_AUDIO_INFO_RATE (&audiorate->info), GST_SECOND);
+
+    GST_DEBUG_OBJECT (audiorate, "resync to offset %" G_GINT64_FORMAT, pos);
+
+    /* resyncing is a discont */
+    audiorate->discont = TRUE;
+
+    audiorate->next_offset = pos;
+    audiorate->next_ts = gst_util_uint64_scale_int (audiorate->next_offset,
+        GST_SECOND, GST_AUDIO_INFO_RATE (&audiorate->info));
+
+    if (audiorate->skip_to_first && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+      GST_DEBUG_OBJECT (audiorate, "but skipping to first buffer instead");
+      pos = gst_util_uint64_scale_int (GST_BUFFER_TIMESTAMP (buf),
+          GST_AUDIO_INFO_RATE (&audiorate->info), GST_SECOND);
+      GST_DEBUG_OBJECT (audiorate, "so resync to offset %" G_GINT64_FORMAT,
+          pos);
+      audiorate->next_offset = pos;
+      audiorate->next_ts = GST_BUFFER_TIMESTAMP (buf);
+    }
+  }
+
+  audiorate->in++;
+
+  in_time = GST_BUFFER_TIMESTAMP (buf);
+  if (in_time == GST_CLOCK_TIME_NONE) {
+    GST_DEBUG_OBJECT (audiorate, "no timestamp, using expected next time");
+    in_time = audiorate->next_ts;
+  }
+
+  in_size = gst_buffer_get_size (buf);
+  in_samples = in_size / bpf;
+
+  /* calculate the buffer offset */
+  in_offset = gst_util_uint64_scale_int_round (in_time, rate, GST_SECOND);
+  in_offset_end = in_offset + in_samples;
+
+  GST_LOG_OBJECT (audiorate,
+      "in_time:%" GST_TIME_FORMAT ", in_duration:%" GST_TIME_FORMAT
+      ", in_size:%u, in_offset:%" G_GUINT64_FORMAT ", in_offset_end:%"
+      G_GUINT64_FORMAT ", ->next_offset:%" G_GUINT64_FORMAT ", ->next_ts:%"
+      GST_TIME_FORMAT, GST_TIME_ARGS (in_time),
+      GST_TIME_ARGS (GST_FRAMES_TO_CLOCK_TIME (in_samples, rate)),
+      in_size, in_offset, in_offset_end, audiorate->next_offset,
+      GST_TIME_ARGS (audiorate->next_ts));
+
+  diff = in_time - audiorate->next_ts;
+  if (diff <= (GstClockTimeDiff) audiorate->tolerance &&
+      diff >= (GstClockTimeDiff) - audiorate->tolerance) {
+    /* buffer time close enough to expected time,
+     * so produce a perfect stream by simply 'shifting'
+     * it to next ts and offset and sending */
+    GST_LOG_OBJECT (audiorate, "within tolerance %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (audiorate->tolerance));
+    /* The outgoing buffer's offset will be set to ->next_offset, we also
+     * need to adjust the offset_end value accordingly */
+    in_offset_end = audiorate->next_offset + in_samples;
+    goto send;
+  }
+
+  /* do we need to insert samples */
+  if (in_offset > audiorate->next_offset) {
+    GstBuffer *fill;
+    gint fillsize;
+    guint64 fillsamples;
+
+    /* We don't want to allocate a single unreasonably huge buffer - it might
+       be hundreds of megabytes. So, limit each output buffer to one second of
+       audio */
+    fillsamples = in_offset - audiorate->next_offset;
+
+    while (fillsamples > 0) {
+      guint64 cursamples = MIN (fillsamples, rate);
+      guint8 *data;
+
+      fillsamples -= cursamples;
+      fillsize = cursamples * bpf;
+
+      fill = gst_buffer_new_and_alloc (fillsize);
+
+      data = gst_buffer_map (fill, NULL, NULL, GST_MAP_WRITE);
+      /* FIXME, 0 might not be the silence byte for the negotiated format. */
+      memset (data, 0, fillsize);
+      gst_buffer_unmap (fill, data, fillsize);
+
+      GST_DEBUG_OBJECT (audiorate, "inserting %" G_GUINT64_FORMAT " samples",
+          cursamples);
+
+      GST_BUFFER_OFFSET (fill) = audiorate->next_offset;
+      audiorate->next_offset += cursamples;
+      GST_BUFFER_OFFSET_END (fill) = audiorate->next_offset;
+
+      /* Use next timestamp, then calculate following timestamp based on 
+       * offset to get duration. Neccesary complexity to get 'perfect' 
+       * streams */
+      GST_BUFFER_TIMESTAMP (fill) = audiorate->next_ts;
+      audiorate->next_ts = gst_util_uint64_scale_int (audiorate->next_offset,
+          GST_SECOND, rate);
+      GST_BUFFER_DURATION (fill) = audiorate->next_ts -
+          GST_BUFFER_TIMESTAMP (fill);
+
+      /* we created this buffer to fill a gap */
+      GST_BUFFER_FLAG_SET (fill, GST_BUFFER_FLAG_GAP);
+      /* set discont if it's pending, this is mostly done for the first buffer 
+       * and after a flushing seek */
+      if (audiorate->discont) {
+        GST_BUFFER_FLAG_SET (fill, GST_BUFFER_FLAG_DISCONT);
+        audiorate->discont = FALSE;
+      }
+
+      ret = gst_pad_push (audiorate->srcpad, fill);
+      if (ret != GST_FLOW_OK)
+        goto beach;
+      audiorate->out++;
+      audiorate->add += cursamples;
+
+      if (!audiorate->silent)
+        gst_audio_rate_notify_add (audiorate);
+    }
+
+  } else if (in_offset < audiorate->next_offset) {
+    /* need to remove samples */
+    if (in_offset_end <= audiorate->next_offset) {
+      guint64 drop = in_size / bpf;
+
+      audiorate->drop += drop;
+
+      GST_DEBUG_OBJECT (audiorate, "dropping %" G_GUINT64_FORMAT " samples",
+          drop);
+
+      /* we can drop the buffer completely */
+      gst_buffer_unref (buf);
+      buf = NULL;
+
+      if (!audiorate->silent)
+        gst_audio_rate_notify_drop (audiorate);
+
+      goto beach;
+    } else {
+      guint64 truncsamples;
+      guint truncsize, leftsize;
+      GstBuffer *trunc;
+
+      /* truncate buffer */
+      truncsamples = audiorate->next_offset - in_offset;
+      truncsize = truncsamples * bpf;
+      leftsize = in_size - truncsize;
+
+      trunc =
+          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, truncsize,
+          leftsize);
+
+      gst_buffer_unref (buf);
+      buf = trunc;
+
+      audiorate->drop += truncsamples;
+      GST_DEBUG_OBJECT (audiorate, "truncating %" G_GUINT64_FORMAT " samples",
+          truncsamples);
+
+      if (!audiorate->silent)
+        gst_audio_rate_notify_drop (audiorate);
+    }
+  }
+
+send:
+  if (gst_buffer_get_size (buf) == 0)
+    goto beach;
+
+  /* Now calculate parameters for whichever buffer (either the original
+   * or truncated one) we're pushing. */
+  GST_BUFFER_OFFSET (buf) = audiorate->next_offset;
+  GST_BUFFER_OFFSET_END (buf) = in_offset_end;
+
+  GST_BUFFER_TIMESTAMP (buf) = audiorate->next_ts;
+  audiorate->next_ts = gst_util_uint64_scale_int (in_offset_end,
+      GST_SECOND, rate);
+  GST_BUFFER_DURATION (buf) = audiorate->next_ts - GST_BUFFER_TIMESTAMP (buf);
+
+  if (audiorate->discont) {
+    /* we need to output a discont buffer, do so now */
+    GST_DEBUG_OBJECT (audiorate, "marking DISCONT on output buffer");
+    buf = gst_buffer_make_writable (buf);
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+    audiorate->discont = FALSE;
+  } else if (GST_BUFFER_IS_DISCONT (buf)) {
+    /* else we make everything continuous so we can safely remove the DISCONT
+     * flag from the buffer if there was one */
+    GST_DEBUG_OBJECT (audiorate, "removing DISCONT from buffer");
+    buf = gst_buffer_make_writable (buf);
+    GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
+  }
+
+  /* set last_stop on segment */
+  audiorate->src_segment.position =
+      GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf);
+
+  ret = gst_pad_push (audiorate->srcpad, buf);
+  buf = NULL;
+  audiorate->out++;
+
+  audiorate->next_offset = in_offset_end;
+beach:
+
+  if (buf)
+    gst_buffer_unref (buf);
+
+  gst_object_unref (audiorate);
+
+  return ret;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    gst_buffer_unref (buf);
+
+    GST_ELEMENT_ERROR (audiorate, STREAM, FORMAT,
+        (NULL), ("pipeline error, format was not negotiated"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static void
+gst_audio_rate_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstAudioRate *audiorate = GST_AUDIO_RATE (object);
+
+  switch (prop_id) {
+    case ARG_SILENT:
+      audiorate->silent = g_value_get_boolean (value);
+      break;
+    case ARG_TOLERANCE:
+      audiorate->tolerance = g_value_get_uint64 (value);
+      break;
+    case ARG_SKIP_TO_FIRST:
+      audiorate->skip_to_first = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_rate_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstAudioRate *audiorate = GST_AUDIO_RATE (object);
+
+  switch (prop_id) {
+    case ARG_IN:
+      g_value_set_uint64 (value, audiorate->in);
+      break;
+    case ARG_OUT:
+      g_value_set_uint64 (value, audiorate->out);
+      break;
+    case ARG_ADD:
+      g_value_set_uint64 (value, audiorate->add);
+      break;
+    case ARG_DROP:
+      g_value_set_uint64 (value, audiorate->drop);
+      break;
+    case ARG_SILENT:
+      g_value_set_boolean (value, audiorate->silent);
+      break;
+    case ARG_TOLERANCE:
+      g_value_set_uint64 (value, audiorate->tolerance);
+      break;
+    case ARG_SKIP_TO_FIRST:
+      g_value_set_boolean (value, audiorate->skip_to_first);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_audio_rate_change_state (GstElement * element, GstStateChange transition)
+{
+  GstAudioRate *audiorate = GST_AUDIO_RATE (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      audiorate->in = 0;
+      audiorate->out = 0;
+      audiorate->drop = 0;
+      audiorate->add = 0;
+      gst_audio_info_init (&audiorate->info);
+      gst_audio_rate_reset (audiorate);
+      break;
+    default:
+      break;
+  }
+
+  return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (audio_rate_debug, "audiorate", 0,
+      "AudioRate stream fixer");
+
+  return gst_element_register (plugin, "audiorate", GST_RANK_NONE,
+      GST_TYPE_AUDIO_RATE);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "audiorate",
+    "Adjusts audio frames",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/audiorate/gstaudiorate.h b/gst/audiorate/gstaudiorate.h
new file mode 100644
index 0000000..b0b191e
--- /dev/null
+++ b/gst/audiorate/gstaudiorate.h
@@ -0,0 +1,84 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_RATE_H__
+#define __GST_AUDIO_RATE_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_RATE \
+  (gst_audio_rate_get_type())
+#define GST_AUDIO_RATE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RATE,GstAudioRate))
+#define GST_AUDIO_RATE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RATE,GstAudioRate))
+#define GST_IS_AUDIO_RATE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RATE))
+#define GST_IS_AUDIO_RATE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RATE))
+
+typedef struct _GstAudioRate GstAudioRate;
+typedef struct _GstAudioRateClass GstAudioRateClass;
+
+/**
+ * GstAudioRate:
+ *
+ * Opaque data structure.
+ */
+struct _GstAudioRate
+{
+  GstElement element;
+
+  GstPad *sinkpad, *srcpad;
+
+  /* audio format */
+  GstAudioInfo info;
+
+  /* stats */
+  guint64 in, out, add, drop;
+  gboolean silent;
+  guint64 tolerance;
+  gboolean skip_to_first;
+
+  /* audio state */
+  guint64 next_offset;
+  guint64 next_ts;
+
+  gboolean discont;
+
+  gboolean new_segment;
+  /* we accept all formats on the sink */
+  GstSegment sink_segment;
+  /* we output TIME format on the src */
+  GstSegment src_segment;
+};
+
+struct _GstAudioRateClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_audio_rate_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_RATE_H__ */
diff --git a/gst/audioresample/Makefile.am b/gst/audioresample/Makefile.am
new file mode 100644
index 0000000..9c2999c
--- /dev/null
+++ b/gst/audioresample/Makefile.am
@@ -0,0 +1,57 @@
+plugin_LTLIBRARIES = libgstaudioresample.la
+
+# FIXME: we still link against orc if it's there, even if --disable-orc was used
+if HAVE_ORC
+ORC_TEST_LIBS = -lorc-test-0.4
+else
+ORC_TEST_LIBS = 
+endif
+
+libgstaudioresample_la_SOURCES = \
+	gstaudioresample.c \
+	speex_resampler_int.c \
+	speex_resampler_float.c \
+	speex_resampler_double.c
+
+libgstaudioresample_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ORC_CFLAGS)
+
+libgstaudioresample_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS) $(ORC_TEST_LIBS) \
+	$(LIBM)
+
+libgstaudioresample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudioresample_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	arch.h \
+	fixed_arm4.h \
+	fixed_arm5e.h \
+	fixed_bfin.h \
+	fixed_debug.h \
+	fixed_generic.h \
+	gstaudioresample.h \
+	resample.c \
+	resample_sse.h \
+	speex_resampler.h \
+	speex_resampler_wrapper.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudioresample -:SHARED libgstaudioresample \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudioresample_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \
+	           $(libgstaudioresample_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/audioresample/Makefile.in b/gst/audioresample/Makefile.in
new file mode 100644
index 0000000..7f8df9f
--- /dev/null
+++ b/gst/audioresample/Makefile.in
@@ -0,0 +1,834 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/audioresample
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstaudioresample_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstaudioresample_la_OBJECTS =  \
+	libgstaudioresample_la-gstaudioresample.lo \
+	libgstaudioresample_la-speex_resampler_int.lo \
+	libgstaudioresample_la-speex_resampler_float.lo \
+	libgstaudioresample_la-speex_resampler_double.lo
+libgstaudioresample_la_OBJECTS = $(am_libgstaudioresample_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstaudioresample_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) \
+	$(libgstaudioresample_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstaudioresample_la_SOURCES)
+DIST_SOURCES = $(libgstaudioresample_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstaudioresample.la
+@HAVE_ORC_FALSE@ORC_TEST_LIBS = 
+
+# FIXME: we still link against orc if it's there, even if --disable-orc was used
+@HAVE_ORC_TRUE@ORC_TEST_LIBS = -lorc-test-0.4
+libgstaudioresample_la_SOURCES = \
+	gstaudioresample.c \
+	speex_resampler_int.c \
+	speex_resampler_float.c \
+	speex_resampler_double.c
+
+libgstaudioresample_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ORC_CFLAGS)
+
+libgstaudioresample_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS) $(ORC_TEST_LIBS) \
+	$(LIBM)
+
+libgstaudioresample_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudioresample_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	arch.h \
+	fixed_arm4.h \
+	fixed_arm5e.h \
+	fixed_bfin.h \
+	fixed_debug.h \
+	fixed_generic.h \
+	gstaudioresample.h \
+	resample.c \
+	resample_sse.h \
+	speex_resampler.h \
+	speex_resampler_wrapper.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioresample/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/audioresample/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstaudioresample.la: $(libgstaudioresample_la_OBJECTS) $(libgstaudioresample_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstaudioresample_la_LINK) -rpath $(plugindir) $(libgstaudioresample_la_OBJECTS) $(libgstaudioresample_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioresample_la-gstaudioresample.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioresample_la-speex_resampler_double.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioresample_la-speex_resampler_float.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioresample_la-speex_resampler_int.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstaudioresample_la-gstaudioresample.lo: gstaudioresample.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -MT libgstaudioresample_la-gstaudioresample.lo -MD -MP -MF $(DEPDIR)/libgstaudioresample_la-gstaudioresample.Tpo -c -o libgstaudioresample_la-gstaudioresample.lo `test -f 'gstaudioresample.c' || echo '$(srcdir)/'`gstaudioresample.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioresample_la-gstaudioresample.Tpo $(DEPDIR)/libgstaudioresample_la-gstaudioresample.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudioresample.c' object='libgstaudioresample_la-gstaudioresample.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -c -o libgstaudioresample_la-gstaudioresample.lo `test -f 'gstaudioresample.c' || echo '$(srcdir)/'`gstaudioresample.c
+
+libgstaudioresample_la-speex_resampler_int.lo: speex_resampler_int.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -MT libgstaudioresample_la-speex_resampler_int.lo -MD -MP -MF $(DEPDIR)/libgstaudioresample_la-speex_resampler_int.Tpo -c -o libgstaudioresample_la-speex_resampler_int.lo `test -f 'speex_resampler_int.c' || echo '$(srcdir)/'`speex_resampler_int.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioresample_la-speex_resampler_int.Tpo $(DEPDIR)/libgstaudioresample_la-speex_resampler_int.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='speex_resampler_int.c' object='libgstaudioresample_la-speex_resampler_int.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -c -o libgstaudioresample_la-speex_resampler_int.lo `test -f 'speex_resampler_int.c' || echo '$(srcdir)/'`speex_resampler_int.c
+
+libgstaudioresample_la-speex_resampler_float.lo: speex_resampler_float.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -MT libgstaudioresample_la-speex_resampler_float.lo -MD -MP -MF $(DEPDIR)/libgstaudioresample_la-speex_resampler_float.Tpo -c -o libgstaudioresample_la-speex_resampler_float.lo `test -f 'speex_resampler_float.c' || echo '$(srcdir)/'`speex_resampler_float.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioresample_la-speex_resampler_float.Tpo $(DEPDIR)/libgstaudioresample_la-speex_resampler_float.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='speex_resampler_float.c' object='libgstaudioresample_la-speex_resampler_float.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -c -o libgstaudioresample_la-speex_resampler_float.lo `test -f 'speex_resampler_float.c' || echo '$(srcdir)/'`speex_resampler_float.c
+
+libgstaudioresample_la-speex_resampler_double.lo: speex_resampler_double.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -MT libgstaudioresample_la-speex_resampler_double.lo -MD -MP -MF $(DEPDIR)/libgstaudioresample_la-speex_resampler_double.Tpo -c -o libgstaudioresample_la-speex_resampler_double.lo `test -f 'speex_resampler_double.c' || echo '$(srcdir)/'`speex_resampler_double.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioresample_la-speex_resampler_double.Tpo $(DEPDIR)/libgstaudioresample_la-speex_resampler_double.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='speex_resampler_double.c' object='libgstaudioresample_la-speex_resampler_double.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioresample_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioresample_la_CFLAGS) $(CFLAGS) -c -o libgstaudioresample_la-speex_resampler_double.lo `test -f 'speex_resampler_double.c' || echo '$(srcdir)/'`speex_resampler_double.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudioresample -:SHARED libgstaudioresample \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudioresample_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \
+	           $(libgstaudioresample_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/audioresample/README b/gst/audioresample/README
new file mode 100644
index 0000000..faab16f
--- /dev/null
+++ b/gst/audioresample/README
@@ -0,0 +1,347 @@
+ arch.h            
+ fixed_arm4.h      
+ fixed_arm5e.h     
+ fixed_bfin.h      
+ fixed_debug.h     
+ fixed_generic.h   
+ resample.c        
+ speex_resampler.h 
+
+are taken from http://git.xiph.org/speex.git/ as of 2009-11-10.
+
+The only changes are:
+
+diff -Naur old/arch.h new/arch.h
+--- old/arch.h	2009-11-10 12:18:29.000000000 +0100
++++ new/arch.h	2009-11-10 12:19:09.000000000 +0100
+@@ -78,7 +78,10 @@
+ #include "../include/speex/speex_types.h"
+ #endif
+ 
++#ifndef ABS
+ #define ABS(x) ((x) < 0 ? (-(x)) : (x))      /**< Absolute integer value. */
++#endif
++
+ #define ABS16(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 16-bit value.  */
+ #define MIN16(a,b) ((a) < (b) ? (a) : (b))   /**< Maximum 16-bit value.   */
+ #define MAX16(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum 16-bit value.   */
+@@ -134,6 +137,28 @@
+ 
+ #else
+ 
++#ifdef DOUBLE_PRECISION
++typedef double spx_mem_t;
++typedef double spx_coef_t;
++typedef double spx_lsp_t;
++typedef double spx_sig_t;
++typedef double spx_word16_t;
++typedef double spx_word32_t;
++
++#define Q15ONE 1.0
++#define LPC_SCALING  1.
++#define SIG_SCALING  1.
++#define LSP_SCALING  1.
++#define GAMMA_SCALING 1.
++#define GAIN_SCALING 1.
++#define GAIN_SCALING_1 1.
++
++
++#define VERY_SMALL 1e-20
++#define VERY_LARGE32 1e20
++#define VERY_LARGE16 1e20
++#define Q15_ONE ((spx_word16_t)1.)
++#else /* !DOUBLE_PRECISION */
+ typedef float spx_mem_t;
+ typedef float spx_coef_t;
+ typedef float spx_lsp_t;
+@@ -154,6 +179,7 @@
+ #define VERY_LARGE32 1e15f
+ #define VERY_LARGE16 1e15f
+ #define Q15_ONE ((spx_word16_t)1.f)
++#endif /* DOUBLE_PRECISION */
+ 
+ #define QCONST16(x,bits) (x)
+ #define QCONST32(x,bits) (x)
+diff -Naur old/resample.c new/resample.c
+--- old/resample.c	2009-11-10 12:18:51.000000000 +0100
++++ new/resample.c	2009-11-10 12:19:09.000000000 +0100
+@@ -63,22 +63,27 @@
+ 
+ #ifdef OUTSIDE_SPEEX
+ #include <stdlib.h>
+-static void *
++
++#include <glib.h>
++
++#define EXPORT G_GNUC_INTERNAL
++
++static inline void *
+ speex_alloc (int size)
+ {
+-  return calloc (size, 1);
++  return g_malloc0 (size);
+ }
+ 
+-static void *
++static inline void *
+ speex_realloc (void *ptr, int size)
+ {
+-  return realloc (ptr, size);
++  return g_realloc (ptr, size);
+ }
+ 
+-static void
++static inline void
+ speex_free (void *ptr)
+ {
+-  free (ptr);
++  g_free (ptr);
+ }
+ 
+ #include "speex_resampler.h"
+@@ -90,7 +95,6 @@
+ #include "os_support.h"
+ #endif /* OUTSIDE_SPEEX */
+ 
+-#include "stack_alloc.h"
+ #include <math.h>
+ 
+ #ifndef M_PI
+@@ -263,10 +267,17 @@
+ };
+ 
+ /*8,24,40,56,80,104,128,160,200,256,320*/
++#ifdef DOUBLE_PRECISION
++static double
++compute_func (double x, struct FuncDef *func)
++{
++  double y, frac;
++#else
+ static double
+ compute_func (float x, struct FuncDef *func)
+ {
+   float y, frac;
++#endif
+   double interp[4];
+   int ind;
+   y = x * func->oversample;
+@@ -317,11 +328,19 @@
+ }
+ #else
+ /* The slow way of computing a sinc for the table. Should improve that some day */
++#ifdef DOUBLE_PRECISION
++static spx_word16_t
++sinc (double cutoff, double x, int N, struct FuncDef *window_func)
++{
++  /*fprintf (stderr, "%f ", x); */
++  double xx = x * cutoff;
++#else
+ static spx_word16_t
+ sinc (float cutoff, float x, int N, struct FuncDef *window_func)
+ {
+   /*fprintf (stderr, "%f ", x); */
+   float xx = x * cutoff;
++#endif
+   if (fabs (x) < 1e-6)
+     return cutoff;
+   else if (fabs (x) > .5 * N)
+@@ -372,6 +391,7 @@
+ }
+ #endif
+ 
++#ifndef DOUBLE_PRECISION
+ static int
+ resampler_basic_direct_single (SpeexResamplerState * st,
+     spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+@@ -428,6 +448,7 @@
+   st->samp_frac_num[channel_index] = samp_frac_num;
+   return out_sample;
+ }
++#endif
+ 
+ #ifdef FIXED_POINT
+ #else
+@@ -483,6 +504,7 @@
+ }
+ #endif
+ 
++#ifndef DOUBLE_PRECISION
+ static int
+ resampler_basic_interpolate_single (SpeexResamplerState * st,
+     spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+@@ -562,6 +584,7 @@
+   st->samp_frac_num[channel_index] = samp_frac_num;
+   return out_sample;
+ }
++#endif
+ 
+ #ifdef FIXED_POINT
+ #else
+@@ -592,10 +615,16 @@
+         PDIV32 (SHL32 ((samp_frac_num * st->oversample) % st->den_rate, 15),
+         st->den_rate);
+ #else
++#ifdef DOUBLE_PRECISION
++    const spx_word16_t frac =
++        ((double) ((samp_frac_num * st->oversample) % st->den_rate)) /
++        st->den_rate;
++#else
+     const spx_word16_t frac =
+         ((float) ((samp_frac_num * st->oversample) % st->den_rate)) /
+         st->den_rate;
+ #endif
++#endif
+     spx_word16_t interp[4];
+ 
+ 
+@@ -696,20 +725,27 @@
+       spx_int32_t j;
+       for (j = 0; j < st->filt_len; j++) {
+         st->sinc_table[i * st->filt_len + j] =
+-            sinc (st->cutoff,
+-            ((j - (spx_int32_t) st->filt_len / 2 + 1) -
++            sinc (st->cutoff, ((j - (spx_int32_t) st->filt_len / 2 + 1) -
++#ifdef DOUBLE_PRECISION
++                ((double) i) / st->den_rate), st->filt_len,
++#else
+                 ((float) i) / st->den_rate), st->filt_len,
++#endif
+             quality_map[st->quality].window_func);
+       }
+     }
+ #ifdef FIXED_POINT
+     st->resampler_ptr = resampler_basic_direct_single;
+ #else
++#ifdef DOUBLE_PRECISION
++    st->resampler_ptr = resampler_basic_direct_double;
++#else
+     if (st->quality > 8)
+       st->resampler_ptr = resampler_basic_direct_double;
+     else
+       st->resampler_ptr = resampler_basic_direct_single;
+ #endif
++#endif
+     /*fprintf (stderr, "resampler uses direct sinc table and normalised cutoff %f\n", cutoff); */
+   } else {
+     spx_int32_t i;
+@@ -725,16 +761,24 @@
+     }
+     for (i = -4; i < (spx_int32_t) (st->oversample * st->filt_len + 4); i++)
+       st->sinc_table[i + 4] =
++#ifdef DOUBLE_PRECISION
++          sinc (st->cutoff, (i / (double) st->oversample - st->filt_len / 2),
++#else
+           sinc (st->cutoff, (i / (float) st->oversample - st->filt_len / 2),
++#endif
+           st->filt_len, quality_map[st->quality].window_func);
+ #ifdef FIXED_POINT
+     st->resampler_ptr = resampler_basic_interpolate_single;
+ #else
++#ifdef DOUBLE_PRECISION
++    st->resampler_ptr = resampler_basic_interpolate_double;
++#else
+     if (st->quality > 8)
+       st->resampler_ptr = resampler_basic_interpolate_double;
+     else
+       st->resampler_ptr = resampler_basic_interpolate_single;
+ #endif
++#endif
+     /*fprintf (stderr, "resampler uses interpolated sinc table and normalised cutoff %f\n", cutoff); */
+   }
+   st->int_advance = st->num_rate / st->den_rate;
+@@ -964,11 +1008,18 @@
+     spx_uint32_t channel_index, const spx_int16_t * in, spx_uint32_t * in_len,
+     spx_int16_t * out, spx_uint32_t * out_len)
+ #else
++#ifdef DOUBLE_PRECISION
++EXPORT int
++speex_resampler_process_float (SpeexResamplerState * st,
++    spx_uint32_t channel_index, const double *in, spx_uint32_t * in_len,
++    double *out, spx_uint32_t * out_len)
++#else
+ EXPORT int
+ speex_resampler_process_float (SpeexResamplerState * st,
+     spx_uint32_t channel_index, const float *in, spx_uint32_t * in_len,
+     float *out, spx_uint32_t * out_len)
+ #endif
++#endif
+ {
+   int j;
+   spx_uint32_t ilen = *in_len;
+@@ -1086,9 +1137,16 @@
+   return RESAMPLER_ERR_SUCCESS;
+ }
+ 
++#ifdef DOUBLE_PRECISION
++EXPORT int
++speex_resampler_process_interleaved_float (SpeexResamplerState * st,
++    const double *in, spx_uint32_t * in_len, double *out,
++    spx_uint32_t * out_len)
++#else
+ EXPORT int
+ speex_resampler_process_interleaved_float (SpeexResamplerState * st,
+     const float *in, spx_uint32_t * in_len, float *out, spx_uint32_t * out_len)
++#endif
+ {
+   spx_uint32_t i;
+   int istride_save, ostride_save;
+diff -Naur old/speex_resampler.h new/speex_resampler.h
+--- old/speex_resampler.h	2009-11-10 12:18:09.000000000 +0100
++++ new/speex_resampler.h	2009-11-10 12:19:09.000000000 +0100
+@@ -77,10 +77,10 @@
+ #define speex_resampler_reset_mem CAT_PREFIX(RANDOM_PREFIX,_resampler_reset_mem)
+ #define speex_resampler_strerror CAT_PREFIX(RANDOM_PREFIX,_resampler_strerror)
+ 
+-#define spx_int16_t short
+-#define spx_int32_t int
+-#define spx_uint16_t unsigned short
+-#define spx_uint32_t unsigned int
++#define spx_int16_t gint16
++#define spx_int32_t gint32
++#define spx_uint16_t guint16
++#define spx_uint32_t guint32
+       
+ #else /* OUTSIDE_SPEEX */
+ 
+@@ -166,12 +166,21 @@
+  * @param out Output buffer
+  * @param out_len Size of the output buffer. Returns the number of samples written
+  */
++#ifdef DOUBLE_PRECISION
++int speex_resampler_process_float(SpeexResamplerState *st, 
++                                   spx_uint32_t channel_index, 
++                                   const double *in, 
++                                   spx_uint32_t *in_len, 
++                                   double *out, 
++                                   spx_uint32_t *out_len);
++#else
+ int speex_resampler_process_float(SpeexResamplerState *st, 
+                                    spx_uint32_t channel_index, 
+                                    const float *in, 
+                                    spx_uint32_t *in_len, 
+                                    float *out, 
+                                    spx_uint32_t *out_len);
++#endif
+ 
+ /** Resample an int array. The input and output buffers must *not* overlap.
+  * @param st Resampler state
+@@ -199,11 +208,19 @@
+  * @param out_len Size of the output buffer. Returns the number of samples written.
+  * This is all per-channel.
+  */
++#ifdef DOUBLE_PRECISION
++int speex_resampler_process_interleaved_float(SpeexResamplerState *st, 
++                                               const double *in, 
++                                               spx_uint32_t *in_len, 
++                                               double *out, 
++                                               spx_uint32_t *out_len);
++#else
+ int speex_resampler_process_interleaved_float(SpeexResamplerState *st, 
+                                                const float *in, 
+                                                spx_uint32_t *in_len, 
+                                                float *out, 
+                                                spx_uint32_t *out_len);
++#endif
+ 
+ /** Resample an interleaved int array. The input and output buffers must *not* overlap.
+  * @param st Resampler state
diff --git a/gst/audioresample/arch.h b/gst/audioresample/arch.h
new file mode 100644
index 0000000..c518458
--- /dev/null
+++ b/gst/audioresample/arch.h
@@ -0,0 +1,265 @@
+/* Copyright (C) 2003 Jean-Marc Valin */
+/**
+   @file arch.h
+   @brief Various architecture definitions Speex
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef ARCH_H
+#define ARCH_H
+
+#ifndef SPEEX_VERSION
+#define SPEEX_MAJOR_VERSION 1         /**< Major Speex version. */
+#define SPEEX_MINOR_VERSION 1         /**< Minor Speex version. */
+#define SPEEX_MICRO_VERSION 15        /**< Micro Speex version. */
+#define SPEEX_EXTRA_VERSION ""        /**< Extra Speex version. */
+#define SPEEX_VERSION "speex-1.2beta3"  /**< Speex version string. */
+#endif
+
+/* A couple test to catch stupid option combinations */
+#ifdef FIXED_POINT
+
+#ifdef FLOATING_POINT
+#error You cannot compile as floating point and fixed point at the same time
+#endif
+#ifdef _USE_SSE
+#error SSE is only for floating-point
+#endif
+#if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM))
+#error Make up your mind. What CPU do you have?
+#endif
+#ifdef VORBIS_PSYCHO
+#error Vorbis-psy model currently not implemented in fixed-point
+#endif
+
+#else
+
+#ifndef FLOATING_POINT
+#error You now need to define either FIXED_POINT or FLOATING_POINT
+#endif
+#if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
+#error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
+#endif
+#ifdef FIXED_POINT_DEBUG
+#error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?"
+#endif
+
+
+#endif
+
+#ifndef OUTSIDE_SPEEX
+#include "../include/speex/speex_types.h"
+#endif
+
+#ifndef ABS
+#define ABS(x) ((x) < 0 ? (-(x)) : (x))      /**< Absolute integer value. */
+#endif
+
+#define ABS16(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 16-bit value.  */
+#define MIN16(a,b) ((a) < (b) ? (a) : (b))   /**< Maximum 16-bit value.   */
+#define MAX16(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum 16-bit value.   */
+#define ABS32(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 32-bit value.  */
+#define MIN32(a,b) ((a) < (b) ? (a) : (b))   /**< Maximum 32-bit value.   */
+#define MAX32(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum 32-bit value.   */
+
+#ifdef FIXED_POINT
+
+typedef spx_int16_t spx_word16_t;
+typedef spx_int32_t spx_word32_t;
+typedef spx_word32_t spx_mem_t;
+typedef spx_word16_t spx_coef_t;
+typedef spx_word16_t spx_lsp_t;
+typedef spx_word32_t spx_sig_t;
+
+#define Q15ONE 32767
+
+#define LPC_SCALING  8192
+#define SIG_SCALING  16384
+#define LSP_SCALING  8192.
+#define GAMMA_SCALING 32768.
+#define GAIN_SCALING 64
+#define GAIN_SCALING_1 0.015625
+
+#define LPC_SHIFT    13
+#define LSP_SHIFT    13
+#define SIG_SHIFT    14
+#define GAIN_SHIFT   6
+
+#define VERY_SMALL 0
+#define VERY_LARGE32 ((spx_word32_t)2147483647)
+#define VERY_LARGE16 ((spx_word16_t)32767)
+#define Q15_ONE ((spx_word16_t)32767)
+
+
+#ifdef FIXED_DEBUG
+#include "fixed_debug.h"
+#else
+
+#include "fixed_generic.h"
+
+#ifdef ARM5E_ASM
+#include "fixed_arm5e.h"
+#elif defined (ARM4_ASM)
+#include "fixed_arm4.h"
+#elif defined (BFIN_ASM)
+#include "fixed_bfin.h"
+#endif
+
+#endif
+
+
+#else
+
+#ifdef DOUBLE_PRECISION
+typedef double spx_mem_t;
+typedef double spx_coef_t;
+typedef double spx_lsp_t;
+typedef double spx_sig_t;
+typedef double spx_word16_t;
+typedef double spx_word32_t;
+
+#define Q15ONE 1.0
+#define LPC_SCALING  1.
+#define SIG_SCALING  1.
+#define LSP_SCALING  1.
+#define GAMMA_SCALING 1.
+#define GAIN_SCALING 1.
+#define GAIN_SCALING_1 1.
+
+
+#define VERY_SMALL 1e-20
+#define VERY_LARGE32 1e20
+#define VERY_LARGE16 1e20
+#define Q15_ONE ((spx_word16_t)1.)
+#else /* !DOUBLE_PRECISION */
+typedef float spx_mem_t;
+typedef float spx_coef_t;
+typedef float spx_lsp_t;
+typedef float spx_sig_t;
+typedef float spx_word16_t;
+typedef float spx_word32_t;
+
+#define Q15ONE 1.0f
+#define LPC_SCALING  1.f
+#define SIG_SCALING  1.f
+#define LSP_SCALING  1.f
+#define GAMMA_SCALING 1.f
+#define GAIN_SCALING 1.f
+#define GAIN_SCALING_1 1.f
+
+
+#define VERY_SMALL 1e-15f
+#define VERY_LARGE32 1e15f
+#define VERY_LARGE16 1e15f
+#define Q15_ONE ((spx_word16_t)1.f)
+#endif /* DOUBLE_PRECISION */
+
+#define QCONST16(x,bits) (x)
+#define QCONST32(x,bits) (x)
+
+#define NEG16(x) (-(x))
+#define NEG32(x) (-(x))
+#define EXTRACT16(x) (x)
+#define EXTEND32(x) (x)
+#define SHR16(a,shift) (a)
+#define SHL16(a,shift) (a)
+#define SHR32(a,shift) (a)
+#define SHL32(a,shift) (a)
+#define PSHR16(a,shift) (a)
+#define PSHR32(a,shift) (a)
+#define VSHR32(a,shift) (a)
+#define SATURATE16(x,a) (x)
+#define SATURATE32(x,a) (x)
+
+#define PSHR(a,shift)       (a)
+#define SHR(a,shift)       (a)
+#define SHL(a,shift)       (a)
+#define SATURATE(x,a) (x)
+
+#define ADD16(a,b) ((a)+(b))
+#define SUB16(a,b) ((a)-(b))
+#define ADD32(a,b) ((a)+(b))
+#define SUB32(a,b) ((a)-(b))
+#define MULT16_16_16(a,b)     ((a)*(b))
+#define MULT16_16(a,b)     ((spx_word32_t)(a)*(spx_word32_t)(b))
+#define MAC16_16(c,a,b)     ((c)+(spx_word32_t)(a)*(spx_word32_t)(b))
+
+#define MULT16_32_Q11(a,b)     ((a)*(b))
+#define MULT16_32_Q13(a,b)     ((a)*(b))
+#define MULT16_32_Q14(a,b)     ((a)*(b))
+#define MULT16_32_Q15(a,b)     ((a)*(b))
+#define MULT16_32_P15(a,b)     ((a)*(b))
+
+#define MAC16_32_Q11(c,a,b)     ((c)+(a)*(b))
+#define MAC16_32_Q15(c,a,b)     ((c)+(a)*(b))
+
+#define MAC16_16_Q11(c,a,b)     ((c)+(a)*(b))
+#define MAC16_16_Q13(c,a,b)     ((c)+(a)*(b))
+#define MAC16_16_P13(c,a,b)     ((c)+(a)*(b))
+#define MULT16_16_Q11_32(a,b)     ((a)*(b))
+#define MULT16_16_Q13(a,b)     ((a)*(b))
+#define MULT16_16_Q14(a,b)     ((a)*(b))
+#define MULT16_16_Q15(a,b)     ((a)*(b))
+#define MULT16_16_P15(a,b)     ((a)*(b))
+#define MULT16_16_P13(a,b)     ((a)*(b))
+#define MULT16_16_P14(a,b)     ((a)*(b))
+
+#define DIV32_16(a,b)     (((spx_word32_t)(a))/(spx_word16_t)(b))
+#define PDIV32_16(a,b)     (((spx_word32_t)(a))/(spx_word16_t)(b))
+#define DIV32(a,b)     (((spx_word32_t)(a))/(spx_word32_t)(b))
+#define PDIV32(a,b)     (((spx_word32_t)(a))/(spx_word32_t)(b))
+
+
+#endif
+
+
+#if defined (CONFIG_TI_C54X) || defined (CONFIG_TI_C55X)
+
+/* 2 on TI C5x DSP */
+#define BYTES_PER_CHAR 2 
+#define BITS_PER_CHAR 16
+#define LOG2_BITS_PER_CHAR 4
+
+#else 
+
+#define BYTES_PER_CHAR 1
+#define BITS_PER_CHAR 8
+#define LOG2_BITS_PER_CHAR 3
+
+#endif
+
+
+
+#ifdef FIXED_DEBUG
+extern long long spx_mips;
+#endif
+
+
+#endif
diff --git a/gst/audioresample/fixed_arm4.h b/gst/audioresample/fixed_arm4.h
new file mode 100644
index 0000000..b6981ca
--- /dev/null
+++ b/gst/audioresample/fixed_arm4.h
@@ -0,0 +1,148 @@
+/* Copyright (C) 2004 Jean-Marc Valin */
+/**
+   @file fixed_arm4.h
+   @brief ARM4 fixed-point operations
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef FIXED_ARM4_H
+#define FIXED_ARM4_H
+
+#undef MULT16_32_Q14
+static inline spx_word32_t MULT16_32_Q14(spx_word16_t x, spx_word32_t y) {
+  int res;
+  int dummy;
+  asm (
+        "smull  %0,%1,%2,%3 \n\t"
+        "mov %0, %0, lsr #14 \n\t"
+        "add %0, %0, %1, lsl #18 \n\t"
+   : "=&r"(res), "=&r" (dummy)
+   : "r"(y),"r"((int)x));
+  return(res);
+}
+
+#undef MULT16_32_Q15
+static inline spx_word32_t MULT16_32_Q15(spx_word16_t x, spx_word32_t y) {
+  int res;
+  int dummy;
+  asm (
+        "smull  %0,%1,%2,%3 \n\t"
+        "mov %0, %0, lsr #15 \n\t"
+        "add %0, %0, %1, lsl #17 \n\t"
+   : "=&r"(res), "=&r" (dummy)
+   : "r"(y),"r"((int)x));
+  return(res);
+}
+
+#undef DIV32_16
+static inline short DIV32_16(int a, int b)
+{
+   int res=0;
+   int dead1, dead2, dead3, dead4, dead5;
+   __asm__ __volatile__ (
+         "\teor %5, %0, %1\n"
+         "\tmovs %4, %0\n"
+         "\trsbmi %0, %0, #0 \n"
+         "\tmovs %4, %1\n"
+         "\trsbmi %1, %1, #0 \n"
+         "\tmov %4, #1\n"
+
+         "\tsubs %3, %0, %1, asl #14 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #14 \n"
+
+         "\tsubs %3, %0, %1, asl #13 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #13 \n"
+
+         "\tsubs %3, %0, %1, asl #12 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #12 \n"
+
+         "\tsubs %3, %0, %1, asl #11 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #11 \n"
+
+         "\tsubs %3, %0, %1, asl #10 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #10 \n"
+
+         "\tsubs %3, %0, %1, asl #9 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #9 \n"
+
+         "\tsubs %3, %0, %1, asl #8 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #8 \n"
+
+         "\tsubs %3, %0, %1, asl #7 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #7 \n"
+
+         "\tsubs %3, %0, %1, asl #6 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #6 \n"
+         
+         "\tsubs %3, %0, %1, asl #5 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #5 \n"
+
+         "\tsubs %3, %0, %1, asl #4 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #4 \n"
+
+         "\tsubs %3, %0, %1, asl #3 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #3 \n"
+
+         "\tsubs %3, %0, %1, asl #2 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #2 \n"
+
+         "\tsubs %3, %0, %1, asl #1 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4, asl #1 \n"
+
+         "\tsubs %3, %0, %1 \n"
+         "\tmovpl %0, %3 \n"
+         "\torrpl %2, %2, %4 \n"
+
+         "\tmovs %5, %5, lsr #31 \n"
+         "\trsbne %2, %2, #0 \n"
+   : "=r" (dead1), "=r" (dead2), "=r" (res),
+   "=r" (dead3), "=r" (dead4), "=r" (dead5)
+   : "0" (a), "1" (b), "2" (res)
+   : "cc"
+                        );
+   return res;
+}
+
+
+#endif
diff --git a/gst/audioresample/fixed_arm5e.h b/gst/audioresample/fixed_arm5e.h
new file mode 100644
index 0000000..9b4861c
--- /dev/null
+++ b/gst/audioresample/fixed_arm5e.h
@@ -0,0 +1,178 @@
+/* Copyright (C) 2003 Jean-Marc Valin */
+/**
+   @file fixed_arm5e.h
+   @brief ARM-tuned fixed-point operations
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef FIXED_ARM5E_H
+#define FIXED_ARM5E_H
+
+#undef MULT16_16
+static inline spx_word32_t MULT16_16(spx_word16_t x, spx_word16_t y) {
+  int res;
+  asm ("smulbb  %0,%1,%2;\n"
+              : "=&r"(res)
+              : "%r"(x),"r"(y));
+  return(res);
+}
+
+#undef MAC16_16
+static inline spx_word32_t MAC16_16(spx_word32_t a, spx_word16_t x, spx_word32_t y) {
+  int res;
+  asm ("smlabb  %0,%1,%2,%3;\n"
+              : "=&r"(res)
+               : "%r"(x),"r"(y),"r"(a));
+  return(res);
+}
+
+#undef MULT16_32_Q15
+static inline spx_word32_t MULT16_32_Q15(spx_word16_t x, spx_word32_t y) {
+  int res;
+  asm ("smulwb  %0,%1,%2;\n"
+              : "=&r"(res)
+               : "%r"(y<<1),"r"(x));
+  return(res);
+}
+
+#undef MAC16_32_Q15
+static inline spx_word32_t MAC16_32_Q15(spx_word32_t a, spx_word16_t x, spx_word32_t y) {
+  int res;
+  asm ("smlawb  %0,%1,%2,%3;\n"
+              : "=&r"(res)
+               : "%r"(y<<1),"r"(x),"r"(a));
+  return(res);
+}
+
+#undef MULT16_32_Q11
+static inline spx_word32_t MULT16_32_Q11(spx_word16_t x, spx_word32_t y) {
+  int res;
+  asm ("smulwb  %0,%1,%2;\n"
+              : "=&r"(res)
+               : "%r"(y<<5),"r"(x));
+  return(res);
+}
+
+#undef MAC16_32_Q11
+static inline spx_word32_t MAC16_32_Q11(spx_word32_t a, spx_word16_t x, spx_word32_t y) {
+  int res;
+  asm ("smlawb  %0,%1,%2,%3;\n"
+              : "=&r"(res)
+               : "%r"(y<<5),"r"(x),"r"(a));
+  return(res);
+}
+
+#undef DIV32_16
+static inline short DIV32_16(int a, int b)
+{
+   int res=0;
+   int dead1, dead2, dead3, dead4, dead5;
+   __asm__ __volatile__ (
+         "\teor %5, %0, %1\n"
+         "\tmovs %4, %0\n"
+         "\trsbmi %0, %0, #0 \n"
+         "\tmovs %4, %1\n"
+         "\trsbmi %1, %1, #0 \n"
+         "\tmov %4, #1\n"
+
+         "\tsubs %3, %0, %1, asl #14 \n"
+         "\torrpl %2, %2, %4, asl #14 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #13 \n"
+         "\torrpl %2, %2, %4, asl #13 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #12 \n"
+         "\torrpl %2, %2, %4, asl #12 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #11 \n"
+         "\torrpl %2, %2, %4, asl #11 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #10 \n"
+         "\torrpl %2, %2, %4, asl #10 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #9 \n"
+         "\torrpl %2, %2, %4, asl #9 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #8 \n"
+         "\torrpl %2, %2, %4, asl #8 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #7 \n"
+         "\torrpl %2, %2, %4, asl #7 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #6 \n"
+         "\torrpl %2, %2, %4, asl #6 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #5 \n"
+         "\torrpl %2, %2, %4, asl #5 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #4 \n"
+         "\torrpl %2, %2, %4, asl #4 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #3 \n"
+         "\torrpl %2, %2, %4, asl #3 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #2 \n"
+         "\torrpl %2, %2, %4, asl #2 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1, asl #1 \n"
+         "\torrpl %2, %2, %4, asl #1 \n"
+         "\tmovpl %0, %3 \n"
+
+         "\tsubs %3, %0, %1 \n"
+         "\torrpl %2, %2, %4 \n"
+         "\tmovpl %0, %3 \n"
+         
+         "\tmovs %5, %5, lsr #31 \n"
+         "\trsbne %2, %2, #0 \n"
+   : "=r" (dead1), "=r" (dead2), "=r" (res),
+   "=r" (dead3), "=r" (dead4), "=r" (dead5)
+   : "0" (a), "1" (b), "2" (res)
+   : "memory", "cc"
+                        );
+   return res;
+}
+
+
+
+
+#endif
diff --git a/gst/audioresample/fixed_bfin.h b/gst/audioresample/fixed_bfin.h
new file mode 100644
index 0000000..9eb21e3
--- /dev/null
+++ b/gst/audioresample/fixed_bfin.h
@@ -0,0 +1,176 @@
+/* Copyright (C) 2005 Analog Devices
+   Author: Jean-Marc Valin */
+/**
+   @file fixed_bfin.h
+   @brief Blackfin fixed-point operations
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef FIXED_BFIN_H
+#define FIXED_BFIN_H
+
+#include "bfin.h"
+
+#undef PDIV32_16
+static inline spx_word16_t PDIV32_16(spx_word32_t a, spx_word16_t b)
+{
+   spx_word32_t res, bb;
+   bb = b;
+   a += b>>1;
+   __asm__  (
+         "P0 = 15;\n\t"
+         "R0 = %1;\n\t"
+         "R1 = %2;\n\t"
+         //"R0 = R0 + R1;\n\t"
+         "R0 <<= 1;\n\t"
+         "DIVS (R0, R1);\n\t"
+         "LOOP divide%= LC0 = P0;\n\t"
+         "LOOP_BEGIN divide%=;\n\t"
+            "DIVQ (R0, R1);\n\t"
+         "LOOP_END divide%=;\n\t"
+         "R0 = R0.L;\n\t"
+         "%0 = R0;\n\t"
+   : "=m" (res)
+   : "m" (a), "m" (bb)
+   : "P0", "R0", "R1", "ASTAT" BFIN_HWLOOP0_REGS);
+   return res;
+}
+
+#undef DIV32_16
+static inline spx_word16_t DIV32_16(spx_word32_t a, spx_word16_t b)
+{
+   spx_word32_t res, bb;
+   bb = b;
+   /* Make the roundinf consistent with the C version 
+      (do we need to do that?)*/
+   if (a<0) 
+      a += (b-1);
+   __asm__  (
+         "P0 = 15;\n\t"
+         "R0 = %1;\n\t"
+         "R1 = %2;\n\t"
+         "R0 <<= 1;\n\t"
+         "DIVS (R0, R1);\n\t"
+         "LOOP divide%= LC0 = P0;\n\t"
+         "LOOP_BEGIN divide%=;\n\t"
+            "DIVQ (R0, R1);\n\t"
+         "LOOP_END divide%=;\n\t"
+         "R0 = R0.L;\n\t"
+         "%0 = R0;\n\t"
+   : "=m" (res)
+   : "m" (a), "m" (bb)
+   : "P0", "R0", "R1", "ASTAT" BFIN_HWLOOP0_REGS);
+   return res;
+}
+
+#undef MAX16
+static inline spx_word16_t MAX16(spx_word16_t a, spx_word16_t b)
+{
+   spx_word32_t res;
+   __asm__  (
+         "%1 = %1.L (X);\n\t"
+         "%2 = %2.L (X);\n\t"
+         "%0 = MAX(%1,%2);"
+   : "=d" (res)
+   : "%d" (a), "d" (b)
+   : "ASTAT"
+   );
+   return res;
+}
+
+#undef MULT16_32_Q15
+static inline spx_word32_t MULT16_32_Q15(spx_word16_t a, spx_word32_t b)
+{
+   spx_word32_t res;
+   __asm__
+   (
+         "A1 = %2.L*%1.L (M);\n\t"
+         "A1 = A1 >>> 15;\n\t"
+         "%0 = (A1 += %2.L*%1.H) ;\n\t"
+   : "=&W" (res), "=&d" (b)
+   : "d" (a), "1" (b)
+   : "A1", "ASTAT"
+   );
+   return res;
+}
+
+#undef MAC16_32_Q15
+static inline spx_word32_t MAC16_32_Q15(spx_word32_t c, spx_word16_t a, spx_word32_t b)
+{
+   spx_word32_t res;
+   __asm__
+         (
+         "A1 = %2.L*%1.L (M);\n\t"
+         "A1 = A1 >>> 15;\n\t"
+         "%0 = (A1 += %2.L*%1.H);\n\t"
+         "%0 = %0 + %4;\n\t"
+   : "=&W" (res), "=&d" (b)
+   : "d" (a), "1" (b), "d" (c)
+   : "A1", "ASTAT"
+         );
+   return res;
+}
+
+#undef MULT16_32_Q14
+static inline spx_word32_t MULT16_32_Q14(spx_word16_t a, spx_word32_t b)
+{
+   spx_word32_t res;
+   __asm__
+         (
+         "%2 <<= 1;\n\t"
+         "A1 = %1.L*%2.L (M);\n\t"
+         "A1 = A1 >>> 15;\n\t"
+         "%0 = (A1 += %1.L*%2.H);\n\t"
+   : "=W" (res), "=d" (a), "=d" (b)
+   : "1" (a), "2" (b)
+   : "A1", "ASTAT"
+         );
+   return res;
+}
+
+#undef MAC16_32_Q14
+static inline spx_word32_t MAC16_32_Q14(spx_word32_t c, spx_word16_t a, spx_word32_t b)
+{
+   spx_word32_t res;
+   __asm__
+         (
+         "%1 <<= 1;\n\t"
+         "A1 = %2.L*%1.L (M);\n\t"
+         "A1 = A1 >>> 15;\n\t"
+         "%0 = (A1 += %2.L*%1.H);\n\t"
+         "%0 = %0 + %4;\n\t"
+   : "=&W" (res), "=&d" (b)
+   : "d" (a), "1" (b), "d" (c)
+   : "A1", "ASTAT"
+         );
+   return res;
+}
+
+#endif
diff --git a/gst/audioresample/fixed_debug.h b/gst/audioresample/fixed_debug.h
new file mode 100644
index 0000000..54f3866
--- /dev/null
+++ b/gst/audioresample/fixed_debug.h
@@ -0,0 +1,487 @@
+/* Copyright (C) 2003 Jean-Marc Valin */
+/**
+   @file fixed_debug.h
+   @brief Fixed-point operations with debugging
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef FIXED_DEBUG_H
+#define FIXED_DEBUG_H
+
+#include <stdio.h>
+
+extern long long spx_mips;
+#define MIPS_INC spx_mips++,
+
+#define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(((spx_word32_t)1)<<(bits))))
+#define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(((spx_word32_t)1)<<(bits))))
+
+
+#define VERIFY_SHORT(x) ((x)<=32767&&(x)>=-32768)
+#define VERIFY_INT(x) ((x)<=2147483647LL&&(x)>=-2147483648LL)
+
+static inline short NEG16(int x)
+{
+   int res;
+   if (!VERIFY_SHORT(x))
+   {
+      fprintf (stderr, "NEG16: input is not short: %d\n", (int)x);
+   }
+   res = -x;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "NEG16: output is not short: %d\n", (int)res);
+   spx_mips++;
+   return res;
+}
+static inline int NEG32(long long x)
+{
+   long long res;
+   if (!VERIFY_INT(x))
+   {
+      fprintf (stderr, "NEG16: input is not int: %d\n", (int)x);
+   }
+   res = -x;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "NEG16: output is not int: %d\n", (int)res);
+   spx_mips++;
+   return res;
+}
+
+#define EXTRACT16(x) _EXTRACT16(x, __FILE__, __LINE__)
+static inline short _EXTRACT16(int x, char *file, int line)
+{
+   int res;
+   if (!VERIFY_SHORT(x))
+   {
+      fprintf (stderr, "EXTRACT16: input is not short: %d in %s: line %d\n", x, file, line);
+   }
+   res = x;
+   spx_mips++;
+   return res;
+}
+
+#define EXTEND32(x) _EXTEND32(x, __FILE__, __LINE__)
+static inline int _EXTEND32(int x, char *file, int line)
+{
+   int res;
+   if (!VERIFY_SHORT(x))
+   {
+      fprintf (stderr, "EXTEND32: input is not short: %d in %s: line %d\n", x, file, line);
+   }
+   res = x;
+   spx_mips++;
+   return res;
+}
+
+#define SHR16(a, shift) _SHR16(a, shift, __FILE__, __LINE__)
+static inline short _SHR16(int a, int shift, char *file, int line) 
+{
+   int res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift))
+   {
+      fprintf (stderr, "SHR16: inputs are not short: %d >> %d in %s: line %d\n", a, shift, file, line);
+   }
+   res = a>>shift;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "SHR16: output is not short: %d in %s: line %d\n", res, file, line);
+   spx_mips++;
+   return res;
+}
+#define SHL16(a, shift) _SHL16(a, shift, __FILE__, __LINE__)
+static inline short _SHL16(int a, int shift, char *file, int line) 
+{
+   int res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift))
+   {
+      fprintf (stderr, "SHL16: inputs are not short: %d %d in %s: line %d\n", a, shift, file, line);
+   }
+   res = a<<shift;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "SHL16: output is not short: %d in %s: line %d\n", res, file, line);
+   spx_mips++;
+   return res;
+}
+
+static inline int SHR32(long long a, int shift) 
+{
+   long long  res;
+   if (!VERIFY_INT(a) || !VERIFY_SHORT(shift))
+   {
+      fprintf (stderr, "SHR32: inputs are not int: %d %d\n", (int)a, shift);
+   }
+   res = a>>shift;
+   if (!VERIFY_INT(res))
+   {
+      fprintf (stderr, "SHR32: output is not int: %d\n", (int)res);
+   }
+   spx_mips++;
+   return res;
+}
+static inline int SHL32(long long a, int shift) 
+{
+   long long  res;
+   if (!VERIFY_INT(a) || !VERIFY_SHORT(shift))
+   {
+      fprintf (stderr, "SHL32: inputs are not int: %d %d\n", (int)a, shift);
+   }
+   res = a<<shift;
+   if (!VERIFY_INT(res))
+   {
+      fprintf (stderr, "SHL32: output is not int: %d\n", (int)res);
+   }
+   spx_mips++;
+   return res;
+}
+
+#define PSHR16(a,shift) (SHR16(ADD16((a),((1<<((shift))>>1))),shift))
+#define PSHR32(a,shift) (SHR32(ADD32((a),((EXTEND32(1)<<((shift))>>1))),shift))
+#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift)))
+
+#define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
+#define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
+
+//#define SHR(a,shift) ((a) >> (shift))
+//#define SHL(a,shift) ((a) << (shift))
+
+#define ADD16(a, b) _ADD16(a, b, __FILE__, __LINE__)
+static inline short _ADD16(int a, int b, char *file, int line) 
+{
+   int res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "ADD16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
+   }
+   res = a+b;
+   if (!VERIFY_SHORT(res))
+   {
+      fprintf (stderr, "ADD16: output is not short: %d+%d=%d in %s: line %d\n", a,b,res, file, line);
+   }
+   spx_mips++;
+   return res;
+}
+
+#define SUB16(a, b) _SUB16(a, b, __FILE__, __LINE__)
+static inline short _SUB16(int a, int b, char *file, int line) 
+{
+   int res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "SUB16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
+   }
+   res = a-b;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "SUB16: output is not short: %d in %s: line %d\n", res, file, line);
+   spx_mips++;
+   return res;
+}
+
+#define ADD32(a, b) _ADD32(a, b, __FILE__, __LINE__)
+static inline int _ADD32(long long a, long long b, char *file, int line) 
+{
+   long long res;
+   if (!VERIFY_INT(a) || !VERIFY_INT(b))
+   {
+      fprintf (stderr, "ADD32: inputs are not int: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
+   }
+   res = a+b;
+   if (!VERIFY_INT(res))
+   {
+      fprintf (stderr, "ADD32: output is not int: %d in %s: line %d\n", (int)res, file, line);
+   }
+   spx_mips++;
+   return res;
+}
+
+static inline int SUB32(long long a, long long b) 
+{
+   long long res;
+   if (!VERIFY_INT(a) || !VERIFY_INT(b))
+   {
+      fprintf (stderr, "SUB32: inputs are not int: %d %d\n", (int)a, (int)b);
+   }
+   res = a-b;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "SUB32: output is not int: %d\n", (int)res);
+   spx_mips++;
+   return res;
+}
+
+#define ADD64(a,b) (MIPS_INC(a)+(b))
+
+/* result fits in 16 bits */
+static inline short MULT16_16_16(int a, int b) 
+{
+   int res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_16: inputs are not short: %d %d\n", a, b);
+   }
+   res = a*b;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_16: output is not short: %d\n", res);
+   spx_mips++;
+   return res;
+}
+
+#define MULT16_16(a, b) _MULT16_16(a, b, __FILE__, __LINE__)
+static inline int _MULT16_16(int a, int b, char *file, int line) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
+   }
+   res = ((long long)a)*b;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_16: output is not int: %d in %s: line %d\n", (int)res, file, line);
+   spx_mips++;
+   return res;
+}
+
+#define MAC16_16(c,a,b)     (spx_mips--,ADD32((c),MULT16_16((a),(b))))
+#define MAC16_16_Q11(c,a,b)     (EXTRACT16(ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),11)))))
+#define MAC16_16_Q13(c,a,b)     (EXTRACT16(ADD16((c),EXTRACT16(SHR32(MULT16_16((a),(b)),13)))))
+#define MAC16_16_P13(c,a,b)     (EXTRACT16(ADD32((c),SHR32(ADD32(4096,MULT16_16((a),(b))),13))))
+
+
+#define MULT16_32_QX(a, b, Q) _MULT16_32_QX(a, b, Q, __FILE__, __LINE__)
+static inline int _MULT16_32_QX(int a, long long b, int Q, char *file, int line)
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_INT(b))
+   {
+      fprintf (stderr, "MULT16_32_Q%d: inputs are not short+int: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line);
+   }
+   if (ABS32(b)>=(EXTEND32(1)<<(15+Q)))
+      fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line);      
+   res = (((long long)a)*(long long)b) >> Q;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_32_Q%d: output is not int: %d*%d=%d in %s: line %d\n", Q, (int)a, (int)b,(int)res, file, line);
+   spx_mips+=5;
+   return res;
+}
+
+static inline int MULT16_32_PX(int a, long long b, int Q)
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_INT(b))
+   {
+      fprintf (stderr, "MULT16_32_P%d: inputs are not short+int: %d %d\n", Q, (int)a, (int)b);
+   }
+   if (ABS32(b)>=(EXTEND32(1)<<(15+Q)))
+      fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d\n", Q, (int)a, (int)b);      
+   res = ((((long long)a)*(long long)b) + ((EXTEND32(1)<<Q)>>1))>> Q;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_32_P%d: output is not int: %d*%d=%d\n", Q, (int)a, (int)b,(int)res);
+   spx_mips+=5;
+   return res;
+}
+
+
+#define MULT16_32_Q11(a,b) MULT16_32_QX(a,b,11)
+#define MAC16_32_Q11(c,a,b) ADD32((c),MULT16_32_Q11((a),(b)))
+#define MULT16_32_Q12(a,b) MULT16_32_QX(a,b,12)
+#define MULT16_32_Q13(a,b) MULT16_32_QX(a,b,13)
+#define MULT16_32_Q14(a,b) MULT16_32_QX(a,b,14)
+#define MULT16_32_Q15(a,b) MULT16_32_QX(a,b,15)
+#define MULT16_32_P15(a,b) MULT16_32_PX(a,b,15)
+#define MAC16_32_Q15(c,a,b) ADD32((c),MULT16_32_Q15((a),(b)))
+
+static inline int SATURATE(int a, int b)
+{
+   if (a>b)
+      a=b;
+   if (a<-b)
+      a = -b;
+   return a;
+}
+
+static inline int MULT16_16_Q11_32(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_Q11: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res >>= 11;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_16_Q11: output is not short: %d*%d=%d\n", (int)a, (int)b, (int)res);
+   spx_mips+=3;
+   return res;
+}
+static inline short MULT16_16_Q13(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_Q13: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res >>= 13;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_Q13: output is not short: %d*%d=%d\n", a, b, (int)res);
+   spx_mips+=3;
+   return res;
+}
+static inline short MULT16_16_Q14(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_Q14: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res >>= 14;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_Q14: output is not short: %d\n", (int)res);
+   spx_mips+=3;
+   return res;
+}
+static inline short MULT16_16_Q15(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_Q15: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res >>= 15;
+   if (!VERIFY_SHORT(res))
+   {
+      fprintf (stderr, "MULT16_16_Q15: output is not short: %d\n", (int)res);
+   }
+   spx_mips+=3;
+   return res;
+}
+
+static inline short MULT16_16_P13(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_P13: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res += 4096;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_16_P13: overflow: %d*%d=%d\n", a, b, (int)res);
+   res >>= 13;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_P13: output is not short: %d*%d=%d\n", a, b, (int)res);
+   spx_mips+=4;
+   return res;
+}
+static inline short MULT16_16_P14(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_P14: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res += 8192;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_16_P14: overflow: %d*%d=%d\n", a, b, (int)res);
+   res >>= 14;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_P14: output is not short: %d*%d=%d\n", a, b, (int)res);
+   spx_mips+=4;
+   return res;
+}
+static inline short MULT16_16_P15(int a, int b) 
+{
+   long long res;
+   if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "MULT16_16_P15: inputs are not short: %d %d\n", a, b);
+   }
+   res = ((long long)a)*b;
+   res += 16384;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "MULT16_16_P15: overflow: %d*%d=%d\n", a, b, (int)res);
+   res >>= 15;
+   if (!VERIFY_SHORT(res))
+      fprintf (stderr, "MULT16_16_P15: output is not short: %d*%d=%d\n", a, b, (int)res);
+   spx_mips+=4;
+   return res;
+}
+
+#define DIV32_16(a, b) _DIV32_16(a, b, __FILE__, __LINE__)
+
+static inline int _DIV32_16(long long a, long long b, char *file, int line) 
+{
+   long long res;
+   if (b==0)
+   {
+      fprintf(stderr, "DIV32_16: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line);
+      return 0;
+   }
+   if (!VERIFY_INT(a) || !VERIFY_SHORT(b))
+   {
+      fprintf (stderr, "DIV32_16: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
+   }
+   res = a/b;
+   if (!VERIFY_SHORT(res))
+   {
+      fprintf (stderr, "DIV32_16: output is not short: %d / %d = %d in %s: line %d\n", (int)a,(int)b,(int)res, file, line);
+      if (res>32767)
+         res = 32767;
+      if (res<-32768)
+         res = -32768;
+   }
+   spx_mips+=20;
+   return res;
+}
+
+#define DIV32(a, b) _DIV32(a, b, __FILE__, __LINE__)
+static inline int _DIV32(long long a, long long b, char *file, int line) 
+{
+   long long res;
+   if (b==0)
+   {
+      fprintf(stderr, "DIV32: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line);
+      return 0;
+   }
+
+   if (!VERIFY_INT(a) || !VERIFY_INT(b))
+   {
+      fprintf (stderr, "DIV32: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
+   }
+   res = a/b;
+   if (!VERIFY_INT(res))
+      fprintf (stderr, "DIV32: output is not int: %d in %s: line %d\n", (int)res, file, line);
+   spx_mips+=36;
+   return res;
+}
+#define PDIV32(a,b) DIV32(ADD32((a),(b)>>1),b)
+#define PDIV32_16(a,b) DIV32_16(ADD32((a),(b)>>1),b)
+
+#endif
diff --git a/gst/audioresample/fixed_generic.h b/gst/audioresample/fixed_generic.h
new file mode 100644
index 0000000..3fb096e
--- /dev/null
+++ b/gst/audioresample/fixed_generic.h
@@ -0,0 +1,106 @@
+/* Copyright (C) 2003 Jean-Marc Valin */
+/**
+   @file fixed_generic.h
+   @brief Generic fixed-point operations
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef FIXED_GENERIC_H
+#define FIXED_GENERIC_H
+
+#define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(((spx_word32_t)1)<<(bits))))
+#define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(((spx_word32_t)1)<<(bits))))
+
+#define NEG16(x) (-(x))
+#define NEG32(x) (-(x))
+#define EXTRACT16(x) ((spx_word16_t)(x))
+#define EXTEND32(x) ((spx_word32_t)(x))
+#define SHR16(a,shift) ((a) >> (shift))
+#define SHL16(a,shift) ((a) << (shift))
+#define SHR32(a,shift) ((a) >> (shift))
+#define SHL32(a,shift) ((a) << (shift))
+#define PSHR16(a,shift) (SHR16((a)+((1<<((shift))>>1)),shift))
+#define PSHR32(a,shift) (SHR32((a)+((EXTEND32(1)<<((shift))>>1)),shift))
+#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift)))
+#define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
+#define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
+
+#define SHR(a,shift) ((a) >> (shift))
+#define SHL(a,shift) ((spx_word32_t)(a) << (shift))
+#define PSHR(a,shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift))
+#define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
+
+
+#define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b)))
+#define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b))
+#define ADD32(a,b) ((spx_word32_t)(a)+(spx_word32_t)(b))
+#define SUB32(a,b) ((spx_word32_t)(a)-(spx_word32_t)(b))
+
+
+/* result fits in 16 bits */
+#define MULT16_16_16(a,b)     ((((spx_word16_t)(a))*((spx_word16_t)(b))))
+
+/* (spx_word32_t)(spx_word16_t) gives TI compiler a hint that it's 16x16->32 multiply */
+#define MULT16_16(a,b)     (((spx_word32_t)(spx_word16_t)(a))*((spx_word32_t)(spx_word16_t)(b)))
+
+#define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b))))
+#define MULT16_32_Q12(a,b) ADD32(MULT16_16((a),SHR((b),12)), SHR(MULT16_16((a),((b)&0x00000fff)),12))
+#define MULT16_32_Q13(a,b) ADD32(MULT16_16((a),SHR((b),13)), SHR(MULT16_16((a),((b)&0x00001fff)),13))
+#define MULT16_32_Q14(a,b) ADD32(MULT16_16((a),SHR((b),14)), SHR(MULT16_16((a),((b)&0x00003fff)),14))
+
+#define MULT16_32_Q11(a,b) ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11))
+#define MAC16_32_Q11(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)))
+
+#define MULT16_32_P15(a,b) ADD32(MULT16_16((a),SHR((b),15)), PSHR(MULT16_16((a),((b)&0x00007fff)),15))
+#define MULT16_32_Q15(a,b) ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))
+#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)))
+
+
+#define MAC16_16_Q11(c,a,b)     (ADD32((c),SHR(MULT16_16((a),(b)),11)))
+#define MAC16_16_Q13(c,a,b)     (ADD32((c),SHR(MULT16_16((a),(b)),13)))
+#define MAC16_16_P13(c,a,b)     (ADD32((c),SHR(ADD32(4096,MULT16_16((a),(b))),13)))
+
+#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11))
+#define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13))
+#define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14))
+#define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15))
+
+#define MULT16_16_P13(a,b) (SHR(ADD32(4096,MULT16_16((a),(b))),13))
+#define MULT16_16_P14(a,b) (SHR(ADD32(8192,MULT16_16((a),(b))),14))
+#define MULT16_16_P15(a,b) (SHR(ADD32(16384,MULT16_16((a),(b))),15))
+
+#define MUL_16_32_R15(a,bh,bl) ADD32(MULT16_16((a),(bh)), SHR(MULT16_16((a),(bl)),15))
+
+#define DIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a))/((spx_word16_t)(b))))
+#define PDIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word16_t)(b))))
+#define DIV32(a,b) (((spx_word32_t)(a))/((spx_word32_t)(b)))
+#define PDIV32(a,b) (((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word32_t)(b)))
+
+#endif
diff --git a/gst/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c
new file mode 100644
index 0000000..358061e
--- /dev/null
+++ b/gst/audioresample/gstaudioresample.c
@@ -0,0 +1,1464 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2003,2004 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2007-2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-audioresample
+ *
+ * audioresample resamples raw audio buffers to different sample rates using
+ * a configurable windowing function to enhance quality.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! alsasink
+ * ]| Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa.
+ * To create the Ogg/Vorbis file refer to the documentation of vorbisenc.
+ * </refsect2>
+ */
+
+/* TODO:
+ *  - Enable SSE/ARM optimizations and select at runtime
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <math.h>
+
+#include "gstaudioresample.h"
+#include <gst/gstutils.h>
+#include <gst/audio/audio.h>
+#include <gst/base/gstbasetransform.h>
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#include <orc-test/orctest.h>
+#include <orc-test/orcprofile.h>
+#endif
+
+GST_DEBUG_CATEGORY (audio_resample_debug);
+#define GST_CAT_DEFAULT audio_resample_debug
+
+enum
+{
+  PROP_0,
+  PROP_QUALITY
+};
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define SUPPORTED_CAPS \
+  GST_AUDIO_CAPS_MAKE ("{ F32LE, F64LE, S32LE, S24LE, S16LE, S8 }")
+#else
+#define SUPPORTED_CAPS \
+  GST_AUDIO_CAPS_MAKE ("{ F32BE, F64BE, S32BE, S24BE, S16BE, S8 }")
+#endif
+
+/* If TRUE integer arithmetic resampling is faster and will be used if appropiate */
+#if defined AUDIORESAMPLE_FORMAT_INT
+static gboolean gst_audio_resample_use_int = TRUE;
+#elif defined AUDIORESAMPLE_FORMAT_FLOAT
+static gboolean gst_audio_resample_use_int = FALSE;
+#else
+static gboolean gst_audio_resample_use_int = FALSE;
+#endif
+
+static GstStaticPadTemplate gst_audio_resample_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SUPPORTED_CAPS));
+
+static GstStaticPadTemplate gst_audio_resample_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SUPPORTED_CAPS));
+
+static void gst_audio_resample_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_audio_resample_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+/* vmethods */
+static gboolean gst_audio_resample_get_unit_size (GstBaseTransform * base,
+    GstCaps * caps, gsize * size);
+static GstCaps *gst_audio_resample_transform_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter);
+static void gst_audio_resample_fixate_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
+static gboolean gst_audio_resample_transform_size (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * incaps, gsize insize,
+    GstCaps * outcaps, gsize * outsize);
+static gboolean gst_audio_resample_set_caps (GstBaseTransform * base,
+    GstCaps * incaps, GstCaps * outcaps);
+static GstFlowReturn gst_audio_resample_transform (GstBaseTransform * base,
+    GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_audio_resample_sink_event (GstBaseTransform * base,
+    GstEvent * event);
+static gboolean gst_audio_resample_start (GstBaseTransform * base);
+static gboolean gst_audio_resample_stop (GstBaseTransform * base);
+static gboolean gst_audio_resample_query (GstPad * pad, GstQuery * query);
+static const GstQueryType *gst_audio_resample_query_type (GstPad * pad);
+
+#define gst_audio_resample_parent_class parent_class
+G_DEFINE_TYPE (GstAudioResample, gst_audio_resample, GST_TYPE_BASE_TRANSFORM);
+
+static void
+gst_audio_resample_class_init (GstAudioResampleClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->set_property = gst_audio_resample_set_property;
+  gobject_class->get_property = gst_audio_resample_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_QUALITY,
+      g_param_spec_int ("quality", "Quality", "Resample quality with 0 being "
+          "the lowest and 10 being the best",
+          SPEEX_RESAMPLER_QUALITY_MIN, SPEEX_RESAMPLER_QUALITY_MAX,
+          SPEEX_RESAMPLER_QUALITY_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_audio_resample_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_audio_resample_sink_template));
+
+  gst_element_class_set_details_simple (gstelement_class, "Audio resampler",
+      "Filter/Converter/Audio", "Resamples audio",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  GST_BASE_TRANSFORM_CLASS (klass)->start =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_start);
+  GST_BASE_TRANSFORM_CLASS (klass)->stop =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_stop);
+  GST_BASE_TRANSFORM_CLASS (klass)->transform_size =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_transform_size);
+  GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_get_unit_size);
+  GST_BASE_TRANSFORM_CLASS (klass)->transform_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_transform_caps);
+  GST_BASE_TRANSFORM_CLASS (klass)->fixate_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_fixate_caps);
+  GST_BASE_TRANSFORM_CLASS (klass)->set_caps =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_set_caps);
+  GST_BASE_TRANSFORM_CLASS (klass)->transform =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_transform);
+  GST_BASE_TRANSFORM_CLASS (klass)->sink_event =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_sink_event);
+
+  GST_BASE_TRANSFORM_CLASS (klass)->passthrough_on_same_caps = TRUE;
+}
+
+static void
+gst_audio_resample_init (GstAudioResample * resample)
+{
+  GstBaseTransform *trans = GST_BASE_TRANSFORM (resample);
+
+  resample->quality = SPEEX_RESAMPLER_QUALITY_DEFAULT;
+
+  gst_base_transform_set_gap_aware (trans, TRUE);
+  gst_pad_set_query_function (trans->srcpad, gst_audio_resample_query);
+  gst_pad_set_query_type_function (trans->srcpad,
+      gst_audio_resample_query_type);
+}
+
+/* vmethods */
+static gboolean
+gst_audio_resample_start (GstBaseTransform * base)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+
+  resample->need_discont = TRUE;
+
+  resample->num_gap_samples = 0;
+  resample->num_nongap_samples = 0;
+  resample->t0 = GST_CLOCK_TIME_NONE;
+  resample->in_offset0 = GST_BUFFER_OFFSET_NONE;
+  resample->out_offset0 = GST_BUFFER_OFFSET_NONE;
+  resample->samples_in = 0;
+  resample->samples_out = 0;
+
+  resample->tmp_in = NULL;
+  resample->tmp_in_size = 0;
+  resample->tmp_out = NULL;
+  resample->tmp_out_size = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_resample_stop (GstBaseTransform * base)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+
+  if (resample->state) {
+    resample->funcs->destroy (resample->state);
+    resample->state = NULL;
+  }
+
+  resample->funcs = NULL;
+
+  g_free (resample->tmp_in);
+  resample->tmp_in = NULL;
+  resample->tmp_in_size = 0;
+
+  g_free (resample->tmp_out);
+  resample->tmp_out = NULL;
+  resample->tmp_out_size = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_resample_get_unit_size (GstBaseTransform * base, GstCaps * caps,
+    gsize * size)
+{
+  GstAudioInfo info;
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto invalid_caps;
+
+  *size = GST_AUDIO_INFO_BPF (&info);
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_caps:
+  {
+    GST_ERROR_OBJECT (base, "invalid caps");
+    return FALSE;
+  }
+}
+
+static GstCaps *
+gst_audio_resample_transform_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  const GValue *val;
+  GstStructure *s;
+  GstCaps *res;
+  gint i, n;
+
+  /* transform single caps into input_caps + input_caps with the rate
+   * field set to our supported range. This ensures that upstream knows
+   * about downstream's prefered rate(s) and can negotiate accordingly. */
+  res = gst_caps_new_empty ();
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    s = gst_caps_get_structure (caps, i);
+
+    /* If this is already expressed by the existing caps
+     * skip this structure */
+    if (i > 0 && gst_caps_is_subset_structure (res, s))
+      continue;
+
+    /* first, however, check if the caps contain a range for the rate field, in
+     * which case that side isn't going to care much about the exact sample rate
+     * chosen and we should just assume things will get fixated to something sane
+     * and we may just as well offer our full range instead of the range in the
+     * caps. If the rate is not an int range value, it's likely to express a
+     * real preference or limitation and we should maintain that structure as
+     * preference by putting it first into the transformed caps, and only add
+     * our full rate range as second option  */
+    s = gst_structure_copy (s);
+    val = gst_structure_get_value (s, "rate");
+    if (val == NULL || GST_VALUE_HOLDS_INT_RANGE (val)) {
+      /* overwrite existing range, or add field if it doesn't exist yet */
+      gst_structure_set (s, "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+    } else {
+      /* append caps with full range to existing caps with non-range rate field */
+      gst_caps_append_structure (res, gst_structure_copy (s));
+      gst_structure_set (s, "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+    }
+    gst_caps_append_structure (res, s);
+  }
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, res, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (res);
+    res = intersection;
+  }
+
+  return res;
+}
+
+/* Fixate rate to the allowed rate that has the smallest difference */
+static void
+gst_audio_resample_fixate_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
+{
+  GstStructure *s;
+  gint rate;
+
+  s = gst_caps_get_structure (caps, 0);
+  if (G_UNLIKELY (!gst_structure_get_int (s, "rate", &rate)))
+    return;
+
+  s = gst_caps_get_structure (othercaps, 0);
+  gst_structure_fixate_field_nearest_int (s, "rate", rate);
+}
+
+static const SpeexResampleFuncs *
+gst_audio_resample_get_funcs (gint width, gboolean fp)
+{
+  const SpeexResampleFuncs *funcs = NULL;
+
+  if (gst_audio_resample_use_int && (width == 8 || width == 16) && !fp)
+    funcs = &int_funcs;
+  else if ((!gst_audio_resample_use_int && (width == 8 || width == 16) && !fp)
+      || (width == 32 && fp))
+    funcs = &float_funcs;
+  else if ((width == 64 && fp) || ((width == 32 || width == 24) && !fp))
+    funcs = &double_funcs;
+  else
+    g_assert_not_reached ();
+
+  return funcs;
+}
+
+static SpeexResamplerState *
+gst_audio_resample_init_state (GstAudioResample * resample, gint width,
+    gint channels, gint inrate, gint outrate, gint quality, gboolean fp)
+{
+  SpeexResamplerState *ret = NULL;
+  gint err = RESAMPLER_ERR_SUCCESS;
+  const SpeexResampleFuncs *funcs = gst_audio_resample_get_funcs (width, fp);
+
+  ret = funcs->init (channels, inrate, outrate, quality, &err);
+
+  if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) {
+    GST_ERROR_OBJECT (resample, "Failed to create resampler state: %s",
+        funcs->strerror (err));
+    return NULL;
+  }
+
+  funcs->skip_zeros (ret);
+
+  return ret;
+}
+
+static gboolean
+gst_audio_resample_update_state (GstAudioResample * resample, gint width,
+    gint channels, gint inrate, gint outrate, gint quality, gboolean fp)
+{
+  gboolean ret = TRUE;
+  gboolean updated_latency = FALSE;
+
+  updated_latency = (resample->inrate != inrate
+      || quality != resample->quality) && resample->state != NULL;
+
+  if (resample->state == NULL) {
+    ret = TRUE;
+  } else if (resample->channels != channels || fp != resample->fp
+      || width != resample->width) {
+    resample->funcs->destroy (resample->state);
+    resample->state =
+        gst_audio_resample_init_state (resample, width, channels, inrate,
+        outrate, quality, fp);
+
+    resample->funcs = gst_audio_resample_get_funcs (width, fp);
+    ret = (resample->state != NULL);
+  } else if (resample->inrate != inrate || resample->outrate != outrate) {
+    gint err = RESAMPLER_ERR_SUCCESS;
+
+    err = resample->funcs->set_rate (resample->state, inrate, outrate);
+
+    if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS))
+      GST_ERROR_OBJECT (resample, "Failed to update rate: %s",
+          resample->funcs->strerror (err));
+
+    ret = (err == RESAMPLER_ERR_SUCCESS);
+  } else if (quality != resample->quality) {
+    gint err = RESAMPLER_ERR_SUCCESS;
+
+    err = resample->funcs->set_quality (resample->state, quality);
+
+    if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS))
+      GST_ERROR_OBJECT (resample, "Failed to update quality: %s",
+          resample->funcs->strerror (err));
+
+    ret = (err == RESAMPLER_ERR_SUCCESS);
+  }
+
+  resample->width = width;
+  resample->channels = channels;
+  resample->fp = fp;
+  resample->quality = quality;
+  resample->inrate = inrate;
+  resample->outrate = outrate;
+
+  if (updated_latency)
+    gst_element_post_message (GST_ELEMENT (resample),
+        gst_message_new_latency (GST_OBJECT (resample)));
+
+  return ret;
+}
+
+static void
+gst_audio_resample_reset_state (GstAudioResample * resample)
+{
+  if (resample->state)
+    resample->funcs->reset_mem (resample->state);
+}
+
+static gint
+_gcd (gint a, gint b)
+{
+  while (b != 0) {
+    int temp = a;
+
+    a = b;
+    b = temp % b;
+  }
+
+  return ABS (a);
+}
+
+static gboolean
+gst_audio_resample_transform_size (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, gsize size, GstCaps * othercaps,
+    gsize * othersize)
+{
+  gboolean ret = TRUE;
+  GstAudioInfo in, out;
+  guint32 ratio_den, ratio_num;
+  gint inrate, outrate, gcd;
+  gint bpf;
+
+  GST_LOG_OBJECT (base, "asked to transform size %" G_GSIZE_FORMAT
+      " in direction %s", size, direction == GST_PAD_SINK ? "SINK" : "SRC");
+
+  /* Get sample width -> bytes_per_samp, channels, inrate, outrate */
+  ret = gst_audio_info_from_caps (&in, caps);
+  ret &= gst_audio_info_from_caps (&out, othercaps);
+  if (G_UNLIKELY (!ret)) {
+    GST_ERROR_OBJECT (base, "Wrong caps");
+    return FALSE;
+  }
+  /* Number of samples in either buffer is size / (width*channels) ->
+   * calculate the factor */
+  bpf = GST_AUDIO_INFO_BPF (&in);
+  inrate = GST_AUDIO_INFO_RATE (&in);
+  outrate = GST_AUDIO_INFO_RATE (&out);
+
+  /* Convert source buffer size to samples */
+  size /= bpf;
+
+  /* Simplify the conversion ratio factors */
+  gcd = _gcd (inrate, outrate);
+  ratio_num = inrate / gcd;
+  ratio_den = outrate / gcd;
+
+  if (direction == GST_PAD_SINK) {
+    /* asked to convert size of an incoming buffer. Round up the output size */
+    *othersize = gst_util_uint64_scale_int_ceil (size, ratio_den, ratio_num);
+    *othersize *= bpf;
+  } else {
+    /* asked to convert size of an outgoing buffer. Round down the input size */
+    *othersize = gst_util_uint64_scale_int (size, ratio_num, ratio_den);
+    *othersize *= bpf;
+  }
+
+  GST_LOG_OBJECT (base,
+      "transformed size %" G_GSIZE_FORMAT " to %" G_GSIZE_FORMAT,
+      size * bpf, *othersize);
+
+  return ret;
+}
+
+static gboolean
+gst_audio_resample_set_caps (GstBaseTransform * base, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  gboolean ret;
+  gint width, inrate, outrate, channels;
+  gboolean fp;
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+  GstAudioInfo in, out;
+
+  GST_LOG ("incaps %" GST_PTR_FORMAT ", outcaps %"
+      GST_PTR_FORMAT, incaps, outcaps);
+
+  if (!gst_audio_info_from_caps (&in, incaps))
+    goto invalid_incaps;
+  if (!gst_audio_info_from_caps (&out, outcaps))
+    goto invalid_outcaps;
+
+  /* FIXME do some checks */
+
+  /* take new values */
+  width = GST_AUDIO_FORMAT_INFO_WIDTH (in.finfo);
+  channels = GST_AUDIO_INFO_CHANNELS (&in);
+  inrate = GST_AUDIO_INFO_RATE (&in);
+  outrate = GST_AUDIO_INFO_RATE (&out);
+  fp = GST_AUDIO_FORMAT_INFO_IS_FLOAT (in.finfo);
+
+  ret =
+      gst_audio_resample_update_state (resample, width, channels, inrate,
+      outrate, resample->quality, fp);
+
+  if (G_UNLIKELY (!ret))
+    return FALSE;
+
+  return TRUE;
+
+  /* ERROR */
+invalid_incaps:
+  {
+    GST_ERROR_OBJECT (base, "invalid incaps");
+    return FALSE;
+  }
+invalid_outcaps:
+  {
+    GST_ERROR_OBJECT (base, "invalid outcaps");
+    return FALSE;
+  }
+}
+
+#define GST_MAXINT24 (8388607)
+#define GST_MININT24 (-8388608)
+
+#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+#define GST_READ_UINT24 GST_READ_UINT24_LE
+#define GST_WRITE_UINT24 GST_WRITE_UINT24_LE
+#else
+#define GST_READ_UINT24 GST_READ_UINT24_BE
+#define GST_WRITE_UINT24 GST_WRITE_UINT24_BE
+#endif
+
+static void
+gst_audio_resample_convert_buffer (GstAudioResample * resample,
+    const guint8 * in, guint8 * out, guint len, gboolean inverse)
+{
+  len *= resample->channels;
+
+  if (inverse) {
+    if (gst_audio_resample_use_int && resample->width == 8 && !resample->fp) {
+      gint8 *o = (gint8 *) out;
+      gint16 *i = (gint16 *) in;
+      gint32 tmp;
+
+      while (len) {
+        tmp = *i + (G_MAXINT8 >> 1);
+        *o = CLAMP (tmp >> 8, G_MININT8, G_MAXINT8);
+        o++;
+        i++;
+        len--;
+      }
+    } else if (!gst_audio_resample_use_int && resample->width == 8
+        && !resample->fp) {
+      gint8 *o = (gint8 *) out;
+      gfloat *i = (gfloat *) in;
+      gfloat tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = (gint8) CLAMP (tmp * G_MAXINT8 + 0.5, G_MININT8, G_MAXINT8);
+        o++;
+        i++;
+        len--;
+      }
+    } else if (!gst_audio_resample_use_int && resample->width == 16
+        && !resample->fp) {
+      gint16 *o = (gint16 *) out;
+      gfloat *i = (gfloat *) in;
+      gfloat tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = (gint16) CLAMP (tmp * G_MAXINT16 + 0.5, G_MININT16, G_MAXINT16);
+        o++;
+        i++;
+        len--;
+      }
+    } else if (resample->width == 24 && !resample->fp) {
+      guint8 *o = (guint8 *) out;
+      gdouble *i = (gdouble *) in;
+      gdouble tmp;
+
+      while (len) {
+        tmp = *i;
+        GST_WRITE_UINT24 (o, (gint32) CLAMP (tmp * GST_MAXINT24 + 0.5,
+                GST_MININT24, GST_MAXINT24));
+        o += 3;
+        i++;
+        len--;
+      }
+    } else if (resample->width == 32 && !resample->fp) {
+      gint32 *o = (gint32 *) out;
+      gdouble *i = (gdouble *) in;
+      gdouble tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = (gint32) CLAMP (tmp * G_MAXINT32 + 0.5, G_MININT32, G_MAXINT32);
+        o++;
+        i++;
+        len--;
+      }
+    } else {
+      g_assert_not_reached ();
+    }
+  } else {
+    if (gst_audio_resample_use_int && resample->width == 8 && !resample->fp) {
+      gint8 *i = (gint8 *) in;
+      gint16 *o = (gint16 *) out;
+      gint32 tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = tmp << 8;
+        o++;
+        i++;
+        len--;
+      }
+    } else if (!gst_audio_resample_use_int && resample->width == 8
+        && !resample->fp) {
+      gint8 *i = (gint8 *) in;
+      gfloat *o = (gfloat *) out;
+      gfloat tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = tmp / G_MAXINT8;
+        o++;
+        i++;
+        len--;
+      }
+    } else if (!gst_audio_resample_use_int && resample->width == 16
+        && !resample->fp) {
+      gint16 *i = (gint16 *) in;
+      gfloat *o = (gfloat *) out;
+      gfloat tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = tmp / G_MAXINT16;
+        o++;
+        i++;
+        len--;
+      }
+    } else if (resample->width == 24 && !resample->fp) {
+      guint8 *i = (guint8 *) in;
+      gdouble *o = (gdouble *) out;
+      gdouble tmp;
+      guint32 tmp2;
+
+      while (len) {
+        tmp2 = GST_READ_UINT24 (i);
+        if (tmp2 & 0x00800000)
+          tmp2 |= 0xff000000;
+        tmp = (gint32) tmp2;
+        *o = tmp / GST_MAXINT24;
+        o++;
+        i += 3;
+        len--;
+      }
+    } else if (resample->width == 32 && !resample->fp) {
+      gint32 *i = (gint32 *) in;
+      gdouble *o = (gdouble *) out;
+      gdouble tmp;
+
+      while (len) {
+        tmp = *i;
+        *o = tmp / G_MAXINT32;
+        o++;
+        i++;
+        len--;
+      }
+    } else {
+      g_assert_not_reached ();
+    }
+  }
+}
+
+static guint8 *
+gst_audio_resample_workspace_realloc (guint8 ** workspace, guint * size,
+    guint new_size)
+{
+  guint8 *new;
+  if (new_size <= *size)
+    /* no need to resize */
+    return *workspace;
+  new = g_realloc (*workspace, new_size);
+  if (!new)
+    /* failure (re)allocating memeory */
+    return NULL;
+  /* success */
+  *workspace = new;
+  *size = new_size;
+  return *workspace;
+}
+
+/* Push history_len zeros into the filter, but discard the output. */
+static void
+gst_audio_resample_dump_drain (GstAudioResample * resample, guint history_len)
+{
+  gint outsize;
+  guint in_len, in_processed;
+  guint out_len, out_processed;
+  guint num, den;
+  gpointer buf;
+
+  g_assert (resample->state != NULL);
+
+  resample->funcs->get_ratio (resample->state, &num, &den);
+
+  in_len = in_processed = history_len;
+  out_processed = out_len =
+      gst_util_uint64_scale_int_ceil (history_len, den, num);
+  outsize = out_len * resample->channels * (resample->funcs->width / 8);
+
+  if (out_len == 0)
+    return;
+
+  buf = g_malloc (outsize);
+  resample->funcs->process (resample->state, NULL, &in_processed, buf,
+      &out_processed);
+  g_free (buf);
+
+  g_assert (in_len == in_processed);
+}
+
+static void
+gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len)
+{
+  GstBuffer *outbuf;
+  GstFlowReturn res;
+  gint outsize;
+  guint in_len, in_processed;
+  guint out_len, out_processed;
+  gint err;
+  guint num, den;
+  guint8 *data;
+
+  g_assert (resample->state != NULL);
+
+  /* Don't drain samples if we were reset. */
+  if (!GST_CLOCK_TIME_IS_VALID (resample->t0))
+    return;
+
+  resample->funcs->get_ratio (resample->state, &num, &den);
+
+  in_len = in_processed = history_len;
+  out_len = out_processed =
+      gst_util_uint64_scale_int_ceil (history_len, den, num);
+  outsize = out_len * resample->channels * (resample->width / 8);
+
+  if (out_len == 0)
+    return;
+
+  outbuf = gst_buffer_new_and_alloc (outsize);
+
+  data = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
+
+  if (resample->funcs->width != resample->width) {
+    /* need to convert data format;  allocate workspace */
+    if (!gst_audio_resample_workspace_realloc (&resample->tmp_out,
+            &resample->tmp_out_size, (resample->funcs->width / 8) * out_len *
+            resample->channels)) {
+      GST_ERROR_OBJECT (resample, "failed to allocate workspace");
+      return;
+    }
+
+    /* process */
+    err = resample->funcs->process (resample->state, NULL, &in_processed,
+        resample->tmp_out, &out_processed);
+
+    /* convert output format */
+    gst_audio_resample_convert_buffer (resample, resample->tmp_out,
+        data, out_processed, TRUE);
+  } else {
+    /* don't need to convert data format;  process */
+    err = resample->funcs->process (resample->state, NULL, &in_processed,
+        data, &out_processed);
+  }
+
+  /* If we wrote more than allocated something is really wrong now
+   * and we should better abort immediately */
+  g_assert (out_len >= out_processed);
+
+  outsize = out_processed * resample->channels * (resample->width / 8);
+  gst_buffer_unmap (outbuf, data, outsize);
+
+  if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) {
+    GST_WARNING_OBJECT (resample, "Failed to process drain: %s",
+        resample->funcs->strerror (err));
+    gst_buffer_unref (outbuf);
+    return;
+  }
+
+  /* time */
+  if (GST_CLOCK_TIME_IS_VALID (resample->t0)) {
+    GST_BUFFER_TIMESTAMP (outbuf) = resample->t0 +
+        gst_util_uint64_scale_int_round (resample->samples_out, GST_SECOND,
+        resample->outrate);
+    GST_BUFFER_DURATION (outbuf) = resample->t0 +
+        gst_util_uint64_scale_int_round (resample->samples_out + out_processed,
+        GST_SECOND, resample->outrate) - GST_BUFFER_TIMESTAMP (outbuf);
+  } else {
+    GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
+  }
+  /* offset */
+  if (resample->out_offset0 != GST_BUFFER_OFFSET_NONE) {
+    GST_BUFFER_OFFSET (outbuf) = resample->out_offset0 + resample->samples_out;
+    GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET (outbuf) + out_processed;
+  } else {
+    GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE;
+    GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE;
+  }
+  /* move along */
+  resample->samples_out += out_processed;
+  resample->samples_in += history_len;
+
+  if (G_UNLIKELY (out_processed == 0 && in_len * den > num)) {
+    GST_WARNING_OBJECT (resample, "Failed to get drain, dropping buffer");
+    gst_buffer_unref (outbuf);
+    return;
+  }
+
+  GST_LOG_OBJECT (resample,
+      "Pushing drain buffer of %u bytes with timestamp %" GST_TIME_FORMAT
+      " duration %" GST_TIME_FORMAT " offset %" G_GUINT64_FORMAT " offset_end %"
+      G_GUINT64_FORMAT, outsize,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), GST_BUFFER_OFFSET (outbuf),
+      GST_BUFFER_OFFSET_END (outbuf));
+
+  res = gst_pad_push (GST_BASE_TRANSFORM_SRC_PAD (resample), outbuf);
+
+  if (G_UNLIKELY (res != GST_FLOW_OK))
+    GST_WARNING_OBJECT (resample, "Failed to push drain: %s",
+        gst_flow_get_name (res));
+
+  return;
+}
+
+static gboolean
+gst_audio_resample_sink_event (GstBaseTransform * base, GstEvent * event)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_audio_resample_reset_state (resample);
+      if (resample->state)
+        resample->funcs->skip_zeros (resample->state);
+      resample->num_gap_samples = 0;
+      resample->num_nongap_samples = 0;
+      resample->t0 = GST_CLOCK_TIME_NONE;
+      resample->in_offset0 = GST_BUFFER_OFFSET_NONE;
+      resample->out_offset0 = GST_BUFFER_OFFSET_NONE;
+      resample->samples_in = 0;
+      resample->samples_out = 0;
+      resample->need_discont = TRUE;
+      break;
+    case GST_EVENT_SEGMENT:
+      if (resample->state) {
+        guint latency = resample->funcs->get_input_latency (resample->state);
+        gst_audio_resample_push_drain (resample, latency);
+      }
+      gst_audio_resample_reset_state (resample);
+      if (resample->state)
+        resample->funcs->skip_zeros (resample->state);
+      resample->num_gap_samples = 0;
+      resample->num_nongap_samples = 0;
+      resample->t0 = GST_CLOCK_TIME_NONE;
+      resample->in_offset0 = GST_BUFFER_OFFSET_NONE;
+      resample->out_offset0 = GST_BUFFER_OFFSET_NONE;
+      resample->samples_in = 0;
+      resample->samples_out = 0;
+      resample->need_discont = TRUE;
+      break;
+    case GST_EVENT_EOS:
+      if (resample->state) {
+        guint latency = resample->funcs->get_input_latency (resample->state);
+        gst_audio_resample_push_drain (resample, latency);
+      }
+      gst_audio_resample_reset_state (resample);
+      break;
+    default:
+      break;
+  }
+
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->sink_event (base, event);
+}
+
+static gboolean
+gst_audio_resample_check_discont (GstAudioResample * resample, GstBuffer * buf)
+{
+  guint64 offset;
+  guint64 delta;
+
+  /* is the incoming buffer a discontinuity? */
+  if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buf)))
+    return TRUE;
+
+  /* no valid timestamps or offsets to compare --> no discontinuity */
+  if (G_UNLIKELY (!(GST_BUFFER_TIMESTAMP_IS_VALID (buf) &&
+              GST_CLOCK_TIME_IS_VALID (resample->t0))))
+    return FALSE;
+
+  /* convert the inbound timestamp to an offset. */
+  offset =
+      gst_util_uint64_scale_int_round (GST_BUFFER_TIMESTAMP (buf) -
+      resample->t0, resample->inrate, GST_SECOND);
+
+  /* many elements generate imperfect streams due to rounding errors, so we
+   * permit a small error (up to one sample) without triggering a filter
+   * flush/restart (if triggered incorrectly, this will be audible) */
+  /* allow even up to more samples, since sink is not so strict anyway,
+   * so give that one a chance to handle this as configured */
+  delta = ABS ((gint64) (offset - resample->samples_in));
+  if (delta <= (resample->inrate >> 5))
+    return FALSE;
+
+  GST_WARNING_OBJECT (resample,
+      "encountered timestamp discontinuity of %" G_GUINT64_FORMAT " samples = %"
+      GST_TIME_FORMAT, delta,
+      GST_TIME_ARGS (gst_util_uint64_scale_int_round (delta, GST_SECOND,
+              resample->inrate)));
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
+    GstBuffer * outbuf)
+{
+  gsize in_size, out_size;
+  guint8 *in_data, *out_data;
+  guint32 in_len, in_processed;
+  guint32 out_len, out_processed;
+  guint filt_len = resample->funcs->get_filt_len (resample->state);
+
+  in_data = gst_buffer_map (inbuf, &in_size, NULL, GST_MAP_READ);
+  out_data = gst_buffer_map (outbuf, &out_size, NULL, GST_MAP_WRITE);
+
+  in_len = in_size / resample->channels;
+  out_len = out_size / resample->channels;
+
+  in_len /= (resample->width / 8);
+  out_len /= (resample->width / 8);
+
+  in_processed = in_len;
+  out_processed = out_len;
+
+  if (GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP)) {
+    resample->num_nongap_samples = 0;
+    if (resample->num_gap_samples < filt_len) {
+      guint zeros_to_push;
+      if (in_len >= filt_len - resample->num_gap_samples)
+        zeros_to_push = filt_len - resample->num_gap_samples;
+      else
+        zeros_to_push = in_len;
+
+      gst_audio_resample_push_drain (resample, zeros_to_push);
+      in_len -= zeros_to_push;
+      resample->num_gap_samples += zeros_to_push;
+    }
+
+    {
+      guint num, den;
+      resample->funcs->get_ratio (resample->state, &num, &den);
+      if (resample->samples_in + in_len >= filt_len / 2)
+        out_processed =
+            gst_util_uint64_scale_int_ceil (resample->samples_in + in_len -
+            filt_len / 2, den, num) - resample->samples_out;
+      else
+        out_processed = 0;
+
+      memset (out_data, 0, out_size);
+      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
+      resample->num_gap_samples += in_len;
+      in_processed = in_len;
+    }
+  } else {                      /* not a gap */
+
+    gint err;
+
+    if (resample->num_gap_samples > filt_len) {
+      /* push in enough zeros to restore the filter to the right offset */
+      guint num, den;
+      resample->funcs->get_ratio (resample->state, &num, &den);
+      gst_audio_resample_dump_drain (resample,
+          (resample->num_gap_samples - filt_len) % num);
+    }
+    resample->num_gap_samples = 0;
+    if (resample->num_nongap_samples < filt_len) {
+      resample->num_nongap_samples += in_len;
+      if (resample->num_nongap_samples > filt_len)
+        resample->num_nongap_samples = filt_len;
+    }
+
+    if (resample->funcs->width != resample->width) {
+      /* need to convert data format for processing;  ensure we have enough
+       * workspace available */
+      if (!gst_audio_resample_workspace_realloc (&resample->tmp_in,
+              &resample->tmp_in_size, in_len * resample->channels *
+              (resample->funcs->width / 8)) ||
+          !gst_audio_resample_workspace_realloc (&resample->tmp_out,
+              &resample->tmp_out_size, out_len * resample->channels *
+              (resample->funcs->width / 8))) {
+        GST_ERROR_OBJECT (resample, "failed to allocate workspace");
+        gst_buffer_unmap (inbuf, in_data, in_size);
+        gst_buffer_unmap (outbuf, out_data, out_size);
+        return GST_FLOW_ERROR;
+      }
+
+      /* convert input */
+      gst_audio_resample_convert_buffer (resample, in_data,
+          resample->tmp_in, in_len, FALSE);
+
+      /* process */
+      err = resample->funcs->process (resample->state,
+          resample->tmp_in, &in_processed, resample->tmp_out, &out_processed);
+
+      /* convert output */
+      gst_audio_resample_convert_buffer (resample, resample->tmp_out,
+          out_data, out_processed, TRUE);
+    } else {
+      /* no format conversion required;  process */
+      err = resample->funcs->process (resample->state,
+          in_data, &in_processed, out_data, &out_processed);
+    }
+
+    if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) {
+      GST_ERROR_OBJECT (resample, "Failed to convert data: %s",
+          resample->funcs->strerror (err));
+      gst_buffer_unmap (inbuf, in_data, in_size);
+      gst_buffer_unmap (outbuf, out_data, out_size);
+      return GST_FLOW_ERROR;
+    }
+  }
+
+  /* If we wrote more than allocated something is really wrong now and we
+   * should better abort immediately */
+  g_assert (out_len >= out_processed);
+
+  if (G_UNLIKELY (in_len != in_processed)) {
+    GST_WARNING_OBJECT (resample, "converted %d of %d input samples",
+        in_processed, in_len);
+  }
+
+  /* time */
+  if (GST_CLOCK_TIME_IS_VALID (resample->t0)) {
+    GST_BUFFER_TIMESTAMP (outbuf) = resample->t0 +
+        gst_util_uint64_scale_int_round (resample->samples_out, GST_SECOND,
+        resample->outrate);
+    GST_BUFFER_DURATION (outbuf) = resample->t0 +
+        gst_util_uint64_scale_int_round (resample->samples_out + out_processed,
+        GST_SECOND, resample->outrate) - GST_BUFFER_TIMESTAMP (outbuf);
+  } else {
+    GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
+  }
+  /* offset */
+  if (resample->out_offset0 != GST_BUFFER_OFFSET_NONE) {
+    GST_BUFFER_OFFSET (outbuf) = resample->out_offset0 + resample->samples_out;
+    GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET (outbuf) + out_processed;
+  } else {
+    GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE;
+    GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE;
+  }
+  /* move along */
+  resample->samples_out += out_processed;
+  resample->samples_in += in_len;
+
+  out_size = out_processed * resample->channels * (resample->width / 8);
+  gst_buffer_unmap (inbuf, in_data, in_size);
+  gst_buffer_unmap (outbuf, out_data, out_size);
+
+  GST_LOG_OBJECT (resample,
+      "Converted to buffer of %" G_GUINT32_FORMAT
+      " samples (%" G_GSIZE_FORMAT " bytes) with timestamp %" GST_TIME_FORMAT
+      ", duration %" GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT
+      ", offset_end %" G_GUINT64_FORMAT, out_processed, out_size,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+      GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf));
+
+  if (out_processed == 0) {
+    GST_DEBUG_OBJECT (resample, "buffer dropped");
+    return GST_BASE_TRANSFORM_FLOW_DROPPED;
+  }
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_audio_resample_transform (GstBaseTransform * base, GstBuffer * inbuf,
+    GstBuffer * outbuf)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+  GstFlowReturn ret;
+
+  if (resample->state == NULL) {
+    if (G_UNLIKELY (!(resample->state =
+                gst_audio_resample_init_state (resample, resample->width,
+                    resample->channels, resample->inrate, resample->outrate,
+                    resample->quality, resample->fp))))
+      return GST_FLOW_ERROR;
+
+    resample->funcs =
+        gst_audio_resample_get_funcs (resample->width, resample->fp);
+  }
+
+  GST_LOG_OBJECT (resample, "transforming buffer of %ld bytes, ts %"
+      GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT ", offset %"
+      G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
+      gst_buffer_get_size (inbuf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)),
+      GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf));
+
+  /* check for timestamp discontinuities;  flush/reset if needed, and set
+   * flag to resync timestamp and offset counters and send event
+   * downstream */
+  if (G_UNLIKELY (gst_audio_resample_check_discont (resample, inbuf))) {
+    gst_audio_resample_reset_state (resample);
+    resample->need_discont = TRUE;
+  }
+
+  /* handle discontinuity */
+  if (G_UNLIKELY (resample->need_discont)) {
+    resample->funcs->skip_zeros (resample->state);
+    resample->num_gap_samples = 0;
+    resample->num_nongap_samples = 0;
+    /* reset */
+    resample->samples_in = 0;
+    resample->samples_out = 0;
+    GST_DEBUG_OBJECT (resample, "found discontinuity; resyncing");
+    /* resync the timestamp and offset counters if possible */
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (inbuf)) {
+      resample->t0 = GST_BUFFER_TIMESTAMP (inbuf);
+    } else {
+      GST_DEBUG_OBJECT (resample, "... but new timestamp is invalid");
+      resample->t0 = GST_CLOCK_TIME_NONE;
+    }
+    if (GST_BUFFER_OFFSET_IS_VALID (inbuf)) {
+      resample->in_offset0 = GST_BUFFER_OFFSET (inbuf);
+      resample->out_offset0 =
+          gst_util_uint64_scale_int_round (resample->in_offset0,
+          resample->outrate, resample->inrate);
+    } else {
+      GST_DEBUG_OBJECT (resample, "... but new offset is invalid");
+      resample->in_offset0 = GST_BUFFER_OFFSET_NONE;
+      resample->out_offset0 = GST_BUFFER_OFFSET_NONE;
+    }
+    /* set DISCONT flag on output buffer */
+    GST_DEBUG_OBJECT (resample, "marking this buffer with the DISCONT flag");
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+    resample->need_discont = FALSE;
+  }
+
+  ret = gst_audio_resample_process (resample, inbuf, outbuf);
+  if (G_UNLIKELY (ret != GST_FLOW_OK))
+    return ret;
+
+  GST_DEBUG_OBJECT (resample, "input = samples [%" G_GUINT64_FORMAT ", %"
+      G_GUINT64_FORMAT ") = [%" G_GUINT64_FORMAT ", %" G_GUINT64_FORMAT
+      ") ns;  output = samples [%" G_GUINT64_FORMAT ", %" G_GUINT64_FORMAT
+      ") = [%" G_GUINT64_FORMAT ", %" G_GUINT64_FORMAT ") ns",
+      GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf),
+      GST_BUFFER_TIMESTAMP (inbuf), GST_BUFFER_TIMESTAMP (inbuf) +
+      GST_BUFFER_DURATION (inbuf), GST_BUFFER_OFFSET (outbuf),
+      GST_BUFFER_OFFSET_END (outbuf), GST_BUFFER_TIMESTAMP (outbuf),
+      GST_BUFFER_TIMESTAMP (outbuf) + GST_BUFFER_DURATION (outbuf));
+
+  return GST_FLOW_OK;
+}
+
+static gboolean
+gst_audio_resample_query (GstPad * pad, GstQuery * query)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (gst_pad_get_parent (pad));
+  GstBaseTransform *trans;
+  gboolean res = TRUE;
+  if (G_UNLIKELY (resample == NULL))
+    return FALSE;
+
+  trans = GST_BASE_TRANSFORM (resample);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      GstClockTime min, max;
+      gboolean live;
+      guint64 latency;
+      GstPad *peer;
+      gint rate = resample->inrate;
+      gint resampler_latency;
+
+      if (resample->state)
+        resampler_latency =
+            resample->funcs->get_input_latency (resample->state);
+      else
+        resampler_latency = 0;
+
+      if (gst_base_transform_is_passthrough (trans))
+        resampler_latency = 0;
+
+      if ((peer = gst_pad_get_peer (GST_BASE_TRANSFORM_SINK_PAD (trans)))) {
+        if ((res = gst_pad_query (peer, query))) {
+          gst_query_parse_latency (query, &live, &min, &max);
+
+          GST_DEBUG_OBJECT (resample, "Peer latency: min %"
+              GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+          /* add our own latency */
+          if (rate != 0 && resampler_latency != 0)
+            latency = gst_util_uint64_scale_round (resampler_latency,
+                GST_SECOND, rate);
+          else
+            latency = 0;
+
+          GST_DEBUG_OBJECT (resample, "Our latency: %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (latency));
+
+          min += latency;
+          if (GST_CLOCK_TIME_IS_VALID (max))
+            max += latency;
+
+          GST_DEBUG_OBJECT (resample, "Calculated total latency : min %"
+              GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+          gst_query_set_latency (query, live, min, max);
+        }
+        gst_object_unref (peer);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, query);
+      break;
+  }
+  gst_object_unref (resample);
+  return res;
+}
+
+static const GstQueryType *
+gst_audio_resample_query_type (GstPad * pad)
+{
+  static const GstQueryType types[] = {
+    GST_QUERY_LATENCY,
+    0
+  };
+
+  return types;
+}
+
+static void
+gst_audio_resample_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAudioResample *resample;
+  gint quality;
+
+  resample = GST_AUDIO_RESAMPLE (object);
+
+  switch (prop_id) {
+    case PROP_QUALITY:
+      GST_BASE_TRANSFORM_LOCK (resample);
+      quality = g_value_get_int (value);
+      GST_DEBUG_OBJECT (resample, "new quality %d", quality);
+
+      gst_audio_resample_update_state (resample, resample->width,
+          resample->channels, resample->inrate, resample->outrate,
+          quality, resample->fp);
+      GST_BASE_TRANSFORM_UNLOCK (resample);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_resample_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAudioResample *resample;
+
+  resample = GST_AUDIO_RESAMPLE (object);
+
+  switch (prop_id) {
+    case PROP_QUALITY:
+      g_value_set_int (value, resample->quality);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* FIXME: should have a benchmark fallback for the case where orc is disabled */
+#if defined(AUDIORESAMPLE_FORMAT_AUTO) && !defined(DISABLE_ORC)
+
+#define BENCHMARK_SIZE 512
+
+static gboolean
+_benchmark_int_float (SpeexResamplerState * st)
+{
+  gint16 in[BENCHMARK_SIZE] = { 0, }, G_GNUC_UNUSED out[BENCHMARK_SIZE / 2];
+  gfloat in_tmp[BENCHMARK_SIZE], out_tmp[BENCHMARK_SIZE / 2];
+  gint i;
+  guint32 inlen = BENCHMARK_SIZE, outlen = BENCHMARK_SIZE / 2;
+
+  for (i = 0; i < BENCHMARK_SIZE; i++) {
+    gfloat tmp = in[i];
+    in_tmp[i] = tmp / G_MAXINT16;
+  }
+
+  resample_float_resampler_process_interleaved_float (st,
+      (const guint8 *) in_tmp, &inlen, (guint8 *) out_tmp, &outlen);
+
+  if (outlen == 0) {
+    GST_ERROR ("Failed to use float resampler");
+    return FALSE;
+  }
+
+  for (i = 0; i < outlen; i++) {
+    gfloat tmp = out_tmp[i];
+    out[i] = CLAMP (tmp * G_MAXINT16 + 0.5, G_MININT16, G_MAXINT16);
+  }
+
+  return TRUE;
+}
+
+static gboolean
+_benchmark_int_int (SpeexResamplerState * st)
+{
+  gint16 in[BENCHMARK_SIZE] = { 0, }, out[BENCHMARK_SIZE / 2];
+  guint32 inlen = BENCHMARK_SIZE, outlen = BENCHMARK_SIZE / 2;
+
+  resample_int_resampler_process_interleaved_int (st, (const guint8 *) in,
+      &inlen, (guint8 *) out, &outlen);
+
+  if (outlen == 0) {
+    GST_ERROR ("Failed to use int resampler");
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+_benchmark_integer_resampling (void)
+{
+  OrcProfile a, b;
+  gdouble av, bv;
+  SpeexResamplerState *sta, *stb;
+  int i;
+
+  orc_profile_init (&a);
+  orc_profile_init (&b);
+
+  sta = resample_float_resampler_init (1, 48000, 24000, 4, NULL);
+  if (sta == NULL) {
+    GST_ERROR ("Failed to create float resampler state");
+    return FALSE;
+  }
+
+  stb = resample_int_resampler_init (1, 48000, 24000, 4, NULL);
+  if (stb == NULL) {
+    resample_float_resampler_destroy (sta);
+    GST_ERROR ("Failed to create int resampler state");
+    return FALSE;
+  }
+
+  /* Benchmark */
+  for (i = 0; i < 10; i++) {
+    orc_profile_start (&a);
+    if (!_benchmark_int_float (sta))
+      goto error;
+    orc_profile_stop (&a);
+  }
+
+  /* Benchmark */
+  for (i = 0; i < 10; i++) {
+    orc_profile_start (&b);
+    if (!_benchmark_int_int (stb))
+      goto error;
+    orc_profile_stop (&b);
+  }
+
+  /* Handle results */
+  orc_profile_get_ave_std (&a, &av, NULL);
+  orc_profile_get_ave_std (&b, &bv, NULL);
+
+  /* Remember benchmark result in global variable */
+  gst_audio_resample_use_int = (av > bv);
+  resample_float_resampler_destroy (sta);
+  resample_int_resampler_destroy (stb);
+
+  if (av > bv)
+    GST_INFO ("Using integer resampler if appropiate: %lf < %lf", bv, av);
+  else
+    GST_INFO ("Using float resampler for everything: %lf <= %lf", av, bv);
+
+  return TRUE;
+
+error:
+  resample_float_resampler_destroy (sta);
+  resample_int_resampler_destroy (stb);
+
+  return FALSE;
+}
+#endif /* defined(AUDIORESAMPLE_FORMAT_AUTO) && !defined(DISABLE_ORC) */
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (audio_resample_debug, "audioresample", 0,
+      "audio resampling element");
+
+#if defined(AUDIORESAMPLE_FORMAT_AUTO) && !defined(DISABLE_ORC)
+  if (!_benchmark_integer_resampling ())
+    return FALSE;
+#else
+  GST_WARNING ("Orc disabled, can't benchmark int vs. float resampler");
+  {
+    GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+    GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
+    GST_CAT_WARNING (GST_CAT_PERFORMANCE, "orc disabled, no benchmarking done");
+  }
+#endif
+
+  if (!gst_element_register (plugin, "audioresample", GST_RANK_PRIMARY,
+          GST_TYPE_AUDIO_RESAMPLE)) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "audioresample",
+    "Resamples audio", plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN);
diff --git a/gst/audioresample/gstaudioresample.h b/gst/audioresample/gstaudioresample.h
new file mode 100644
index 0000000..da75b64
--- /dev/null
+++ b/gst/audioresample/gstaudioresample.h
@@ -0,0 +1,98 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2007-2008> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __AUDIO_RESAMPLE_H__
+#define __AUDIO_RESAMPLE_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/audio/audio.h>
+
+#include "speex_resampler_wrapper.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AUDIO_RESAMPLE \
+  (gst_audio_resample_get_type())
+#define GST_AUDIO_RESAMPLE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RESAMPLE,GstAudioResample))
+#define GST_AUDIO_RESAMPLE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RESAMPLE,GstAudioResampleClass))
+#define GST_IS_AUDIO_RESAMPLE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RESAMPLE))
+#define GST_IS_AUDIO_RESAMPLE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RESAMPLE))
+
+typedef struct _GstAudioResample GstAudioResample;
+typedef struct _GstAudioResampleClass GstAudioResampleClass;
+
+/**
+ * GstAudioResample:
+ *
+ * Opaque data structure.
+ */
+struct _GstAudioResample {
+  GstBaseTransform element;
+
+  /* <private> */
+  gboolean need_discont;
+
+  GstClockTime t0;
+  guint64 in_offset0;
+  guint64 out_offset0;
+  guint64 samples_in;
+  guint64 samples_out;
+  
+  guint64 num_gap_samples;
+  guint64 num_nongap_samples;
+
+  GstAudioInfo in;
+  GstAudioInfo out;
+
+  /* properties */
+  gint quality;
+
+  /* state */
+  gboolean fp;
+  gint width;
+  gint channels;
+  gint inrate;
+  gint outrate;
+
+  guint8 *tmp_in;
+  guint tmp_in_size;
+
+  guint8 *tmp_out;
+  guint tmp_out_size;
+
+  SpeexResamplerState *state;
+  const SpeexResampleFuncs *funcs;
+};
+
+struct _GstAudioResampleClass {
+  GstBaseTransformClass parent_class;
+};
+
+GType gst_audio_resample_get_type(void);
+
+G_END_DECLS
+
+#endif /* __AUDIO_RESAMPLE_H__ */
diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
new file mode 100644
index 0000000..66c2c6d
--- /dev/null
+++ b/gst/audioresample/resample.c
@@ -0,0 +1,1429 @@
+/* Copyright (C) 2007-2008 Jean-Marc Valin
+   Copyright (C) 2008      Thorvald Natvig
+      
+   File: resample.c
+   Arbitrary resampling code
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+   3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+   The design goals of this code are:
+      - Very fast algorithm
+      - SIMD-friendly algorithm
+      - Low memory requirement
+      - Good *perceptual* quality (and not best SNR)
+
+   Warning: This resampler is relatively new. Although I think I got rid of 
+   all the major bugs and I don't expect the API to change anymore, there
+   may be something I've missed. So use with caution.
+
+   This algorithm is based on this original resampling algorithm:
+   Smith, Julius O. Digital Audio Resampling Home Page
+   Center for Computer Research in Music and Acoustics (CCRMA), 
+   Stanford University, 2007.
+   Web published at http://www-ccrma.stanford.edu/~jos/resample/.
+
+   There is one main difference, though. This resampler uses cubic 
+   interpolation instead of linear interpolation in the above paper. This
+   makes the table much smaller and makes it possible to compute that table
+   on a per-stream basis. In turn, being able to tweak the table for each 
+   stream makes it possible to both reduce complexity on simple ratios 
+   (e.g. 2/3), and get rid of the rounding operations in the inner loop. 
+   The latter both reduces CPU time and makes the algorithm more SIMD-friendly.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef OUTSIDE_SPEEX
+#include <stdlib.h>
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include <glib.h>
+
+#ifdef HAVE_ORC
+#include <orc/orc.h>
+#endif
+
+#define EXPORT G_GNUC_INTERNAL
+
+#ifdef _USE_SSE
+#ifndef HAVE_XMMINTRIN_H
+#undef _USE_SSE
+#endif
+#endif
+
+#ifdef _USE_SSE2
+#ifndef HAVE_EMMINTRIN_H
+#undef _USE_SSE2
+#endif
+#endif
+
+static inline void *
+speex_alloc (int size)
+{
+  return g_malloc0 (size);
+}
+
+static inline void *
+speex_realloc (void *ptr, int size)
+{
+  return g_realloc (ptr, size);
+}
+
+static inline void
+speex_free (void *ptr)
+{
+  g_free (ptr);
+}
+
+#include "speex_resampler.h"
+#include "arch.h"
+#else /* OUTSIDE_SPEEX */
+
+#include "../include/speex/speex_resampler.h"
+#include "arch.h"
+#include "os_support.h"
+#endif /* OUTSIDE_SPEEX */
+
+#include <math.h>
+
+#ifdef FIXED_POINT
+#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x)))
+#else
+#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x))))
+#endif
+
+#define IMAX(a,b) ((a) > (b) ? (a) : (b))
+#define IMIN(a,b) ((a) < (b) ? (a) : (b))
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#if defined _USE_SSE || defined _USE_SSE2
+#include "resample_sse.h"
+#endif
+
+/* Numer of elements to allocate on the stack */
+#ifdef VAR_ARRAYS
+#define FIXED_STACK_ALLOC 8192
+#else
+#define FIXED_STACK_ALLOC 1024
+#endif
+
+/* Allow selecting SSE or not when compiled with SSE support */
+#ifdef _USE_SSE
+#define SSE_FALLBACK(macro) \
+  if (st->use_sse) goto sse_##macro##_sse; {
+#define SSE_IMPLEMENTATION(macro) \
+  goto sse_##macro##_end; } sse_##macro##_sse: {
+#define SSE_END(macro) sse_##macro##_end:; }
+#else
+#define SSE_FALLBACK(macro)
+#endif
+
+#ifdef _USE_SSE2
+#define SSE2_FALLBACK(macro) \
+  if (st->use_sse2) goto sse2_##macro##_sse2; {
+#define SSE2_IMPLEMENTATION(macro) \
+  goto sse2_##macro##_end; } sse2_##macro##_sse2: {
+#define SSE2_END(macro) sse2_##macro##_end:; }
+#else
+#define SSE2_FALLBACK(macro)
+#endif
+
+
+typedef int (*resampler_basic_func) (SpeexResamplerState *, spx_uint32_t,
+    const spx_word16_t *, spx_uint32_t *, spx_word16_t *, spx_uint32_t *);
+
+struct SpeexResamplerState_
+{
+  spx_uint32_t in_rate;
+  spx_uint32_t out_rate;
+  spx_uint32_t num_rate;
+  spx_uint32_t den_rate;
+
+  int quality;
+  spx_uint32_t nb_channels;
+  spx_uint32_t filt_len;
+  spx_uint32_t mem_alloc_size;
+  spx_uint32_t buffer_size;
+  int int_advance;
+  int frac_advance;
+  float cutoff;
+  spx_uint32_t oversample;
+  int initialised;
+  int started;
+
+  /* These are per-channel */
+  spx_int32_t *last_sample;
+  spx_uint32_t *samp_frac_num;
+  spx_uint32_t *magic_samples;
+
+  spx_word16_t *mem;
+  spx_word16_t *sinc_table;
+  spx_uint32_t sinc_table_length;
+  resampler_basic_func resampler_ptr;
+
+  int in_stride;
+  int out_stride;
+
+  int use_sse:1;
+  int use_sse2:1;
+};
+
+static double kaiser12_table[68] = {
+  0.99859849, 1.00000000, 0.99859849, 0.99440475, 0.98745105, 0.97779076,
+  0.96549770, 0.95066529, 0.93340547, 0.91384741, 0.89213598, 0.86843014,
+  0.84290116, 0.81573067, 0.78710866, 0.75723148, 0.72629970, 0.69451601,
+  0.66208321, 0.62920216, 0.59606986, 0.56287762, 0.52980938, 0.49704014,
+  0.46473455, 0.43304576, 0.40211431, 0.37206735, 0.34301800, 0.31506490,
+  0.28829195, 0.26276832, 0.23854851, 0.21567274, 0.19416736, 0.17404546,
+  0.15530766, 0.13794294, 0.12192957, 0.10723616, 0.09382272, 0.08164178,
+  0.07063950, 0.06075685, 0.05193064, 0.04409466, 0.03718069, 0.03111947,
+  0.02584161, 0.02127838, 0.01736250, 0.01402878, 0.01121463, 0.00886058,
+  0.00691064, 0.00531256, 0.00401805, 0.00298291, 0.00216702, 0.00153438,
+  0.00105297, 0.00069463, 0.00043489, 0.00025272, 0.00013031, 0.0000527734,
+  0.00001000, 0.00000000
+};
+
+/*
+static double kaiser12_table[36] = {
+   0.99440475, 1.00000000, 0.99440475, 0.97779076, 0.95066529, 0.91384741,
+   0.86843014, 0.81573067, 0.75723148, 0.69451601, 0.62920216, 0.56287762,
+   0.49704014, 0.43304576, 0.37206735, 0.31506490, 0.26276832, 0.21567274,
+   0.17404546, 0.13794294, 0.10723616, 0.08164178, 0.06075685, 0.04409466,
+   0.03111947, 0.02127838, 0.01402878, 0.00886058, 0.00531256, 0.00298291,
+   0.00153438, 0.00069463, 0.00025272, 0.0000527734, 0.00000500, 0.00000000};
+*/
+static double kaiser10_table[36] = {
+  0.99537781, 1.00000000, 0.99537781, 0.98162644, 0.95908712, 0.92831446,
+  0.89005583, 0.84522401, 0.79486424, 0.74011713, 0.68217934, 0.62226347,
+  0.56155915, 0.50119680, 0.44221549, 0.38553619, 0.33194107, 0.28205962,
+  0.23636152, 0.19515633, 0.15859932, 0.12670280, 0.09935205, 0.07632451,
+  0.05731132, 0.04193980, 0.02979584, 0.02044510, 0.01345224, 0.00839739,
+  0.00488951, 0.00257636, 0.00115101, 0.00035515, 0.00000000, 0.00000000
+};
+
+static double kaiser8_table[36] = {
+  0.99635258, 1.00000000, 0.99635258, 0.98548012, 0.96759014, 0.94302200,
+  0.91223751, 0.87580811, 0.83439927, 0.78875245, 0.73966538, 0.68797126,
+  0.63451750, 0.58014482, 0.52566725, 0.47185369, 0.41941150, 0.36897272,
+  0.32108304, 0.27619388, 0.23465776, 0.19672670, 0.16255380, 0.13219758,
+  0.10562887, 0.08273982, 0.06335451, 0.04724088, 0.03412321, 0.02369490,
+  0.01563093, 0.00959968, 0.00527363, 0.00233883, 0.00050000, 0.00000000
+};
+
+static double kaiser6_table[36] = {
+  0.99733006, 1.00000000, 0.99733006, 0.98935595, 0.97618418, 0.95799003,
+  0.93501423, 0.90755855, 0.87598009, 0.84068475, 0.80211977, 0.76076565,
+  0.71712752, 0.67172623, 0.62508937, 0.57774224, 0.53019925, 0.48295561,
+  0.43647969, 0.39120616, 0.34752997, 0.30580127, 0.26632152, 0.22934058,
+  0.19505503, 0.16360756, 0.13508755, 0.10953262, 0.08693120, 0.06722600,
+  0.05031820, 0.03607231, 0.02432151, 0.01487334, 0.00752000, 0.00000000
+};
+
+struct FuncDef
+{
+  double *table;
+  int oversample;
+};
+
+static struct FuncDef _KAISER12 = { kaiser12_table, 64 };
+
+#define KAISER12 (&_KAISER12)
+/*static struct FuncDef _KAISER12 = {kaiser12_table, 32};
+#define KAISER12 (&_KAISER12)*/
+static struct FuncDef _KAISER10 = { kaiser10_table, 32 };
+
+#define KAISER10 (&_KAISER10)
+static struct FuncDef _KAISER8 = { kaiser8_table, 32 };
+
+#define KAISER8 (&_KAISER8)
+static struct FuncDef _KAISER6 = { kaiser6_table, 32 };
+
+#define KAISER6 (&_KAISER6)
+
+struct QualityMapping
+{
+  int base_length;
+  int oversample;
+  float downsample_bandwidth;
+  float upsample_bandwidth;
+  struct FuncDef *window_func;
+};
+
+
+/* This table maps conversion quality to internal parameters. There are two
+   reasons that explain why the up-sampling bandwidth is larger than the 
+   down-sampling bandwidth:
+   1) When up-sampling, we can assume that the spectrum is already attenuated
+      close to the Nyquist rate (from an A/D or a previous resampling filter)
+   2) Any aliasing that occurs very close to the Nyquist rate will be masked
+      by the sinusoids/noise just below the Nyquist rate (guaranteed only for
+      up-sampling).
+*/
+static const struct QualityMapping quality_map[11] = {
+  {8, 4, 0.830f, 0.860f, KAISER6},      /* Q0 */
+  {16, 4, 0.850f, 0.880f, KAISER6},     /* Q1 */
+  {32, 4, 0.882f, 0.910f, KAISER6},     /* Q2 *//* 82.3% cutoff ( ~60 dB stop) 6  */
+  {48, 8, 0.895f, 0.917f, KAISER8},     /* Q3 *//* 84.9% cutoff ( ~80 dB stop) 8  */
+  {64, 8, 0.921f, 0.940f, KAISER8},     /* Q4 *//* 88.7% cutoff ( ~80 dB stop) 8  */
+  {80, 16, 0.922f, 0.940f, KAISER10},   /* Q5 *//* 89.1% cutoff (~100 dB stop) 10 */
+  {96, 16, 0.940f, 0.945f, KAISER10},   /* Q6 *//* 91.5% cutoff (~100 dB stop) 10 */
+  {128, 16, 0.950f, 0.950f, KAISER10},  /* Q7 *//* 93.1% cutoff (~100 dB stop) 10 */
+  {160, 16, 0.960f, 0.960f, KAISER10},  /* Q8 *//* 94.5% cutoff (~100 dB stop) 10 */
+  {192, 32, 0.968f, 0.968f, KAISER12},  /* Q9 *//* 95.5% cutoff (~100 dB stop) 10 */
+  {256, 32, 0.975f, 0.975f, KAISER12},  /* Q10 *//* 96.6% cutoff (~100 dB stop) 10 */
+};
+
+/*8,24,40,56,80,104,128,160,200,256,320*/
+#ifdef DOUBLE_PRECISION
+static double
+compute_func (double x, struct FuncDef *func)
+{
+  double y, frac;
+#else
+static double
+compute_func (float x, struct FuncDef *func)
+{
+  float y, frac;
+#endif
+  double interp[4];
+  int ind;
+  y = x * func->oversample;
+  ind = (int) floor (y);
+  frac = (y - ind);
+  /* CSE with handle the repeated powers */
+  interp[3] = -0.1666666667 * frac + 0.1666666667 * (frac * frac * frac);
+  interp[2] = frac + 0.5 * (frac * frac) - 0.5 * (frac * frac * frac);
+  /*interp[2] = 1.f - 0.5f*frac - frac*frac + 0.5f*frac*frac*frac; */
+  interp[0] =
+      -0.3333333333 * frac + 0.5 * (frac * frac) -
+      0.1666666667 * (frac * frac * frac);
+  /* Just to make sure we don't have rounding problems */
+  interp[1] = 1.f - interp[3] - interp[2] - interp[0];
+
+  /*sum = frac*accum[1] + (1-frac)*accum[2]; */
+  return interp[0] * func->table[ind] + interp[1] * func->table[ind + 1] +
+      interp[2] * func->table[ind + 2] + interp[3] * func->table[ind + 3];
+}
+
+#if 0
+#include <stdio.h>
+int
+main (int argc, char **argv)
+{
+  int i;
+  for (i = 0; i < 256; i++) {
+    printf ("%f\n", compute_func (i / 256., KAISER12));
+  }
+  return 0;
+}
+#endif
+
+#ifdef FIXED_POINT
+/* The slow way of computing a sinc for the table. Should improve that some day */
+static spx_word16_t
+sinc (float cutoff, float x, int N, struct FuncDef *window_func)
+{
+  /*fprintf (stderr, "%f ", x); */
+  float xx = x * cutoff;
+  if (fabs (x) < 1e-6f)
+    return WORD2INT (32768. * cutoff);
+  else if (fabs (x) > .5f * N)
+    return 0;
+  /*FIXME: Can it really be any slower than this? */
+  return WORD2INT (32768. * cutoff * sin (G_PI * xx) / (G_PI * xx) *
+      compute_func (fabs (2. * x / N), window_func));
+}
+#else
+/* The slow way of computing a sinc for the table. Should improve that some day */
+#ifdef DOUBLE_PRECISION
+static spx_word16_t
+sinc (double cutoff, double x, int N, struct FuncDef *window_func)
+{
+  /*fprintf (stderr, "%f ", x); */
+  double xx = x * cutoff;
+#else
+static spx_word16_t
+sinc (float cutoff, float x, int N, struct FuncDef *window_func)
+{
+  /*fprintf (stderr, "%f ", x); */
+  float xx = x * cutoff;
+#endif
+  if (fabs (x) < 1e-6)
+    return cutoff;
+  else if (fabs (x) > .5 * N)
+    return 0;
+  /*FIXME: Can it really be any slower than this? */
+  return cutoff * sin (G_PI * xx) / (G_PI * xx) * compute_func (fabs (2. * x /
+          N), window_func);
+}
+#endif
+
+#ifdef FIXED_POINT
+static void
+cubic_coef (spx_word16_t x, spx_word16_t interp[4])
+{
+  /* Compute interpolation coefficients. I'm not sure whether this corresponds to cubic interpolation
+     but I know it's MMSE-optimal on a sinc */
+  spx_word16_t x2, x3;
+  x2 = MULT16_16_P15 (x, x);
+  x3 = MULT16_16_P15 (x, x2);
+  interp[0] =
+      PSHR32 (MULT16_16 (QCONST16 (-0.16667f, 15),
+          x) + MULT16_16 (QCONST16 (0.16667f, 15), x3), 15);
+  interp[1] =
+      EXTRACT16 (EXTEND32 (x) + SHR32 (SUB32 (EXTEND32 (x2), EXTEND32 (x3)),
+          1));
+  interp[3] =
+      PSHR32 (MULT16_16 (QCONST16 (-0.33333f, 15),
+          x) + MULT16_16 (QCONST16 (.5f, 15),
+          x2) - MULT16_16 (QCONST16 (0.16667f, 15), x3), 15);
+  /* Just to make sure we don't have rounding problems */
+  interp[2] = Q15_ONE - interp[0] - interp[1] - interp[3];
+  if (interp[2] < 32767)
+    interp[2] += 1;
+}
+#else
+static void
+cubic_coef (spx_word16_t frac, spx_word16_t interp[4])
+{
+  /* Compute interpolation coefficients. I'm not sure whether this corresponds to cubic interpolation
+     but I know it's MMSE-optimal on a sinc */
+  interp[0] = -0.16667f * frac + 0.16667f * frac * frac * frac;
+  interp[1] = frac + 0.5f * frac * frac - 0.5f * frac * frac * frac;
+  /*interp[2] = 1.f - 0.5f*frac - frac*frac + 0.5f*frac*frac*frac; */
+  interp[3] =
+      -0.33333f * frac + 0.5f * frac * frac - 0.16667f * frac * frac * frac;
+  /* Just to make sure we don't have rounding problems */
+  interp[2] = 1. - interp[0] - interp[1] - interp[3];
+}
+#endif
+
+#ifndef DOUBLE_PRECISION
+static int
+resampler_basic_direct_single (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+    spx_word16_t * out, spx_uint32_t * out_len)
+{
+  const int N = st->filt_len;
+  int out_sample = 0;
+  int last_sample = st->last_sample[channel_index];
+  spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index];
+  const spx_word16_t *sinc_table = st->sinc_table;
+  const int out_stride = st->out_stride;
+  const int int_advance = st->int_advance;
+  const int frac_advance = st->frac_advance;
+  const spx_uint32_t den_rate = st->den_rate;
+  spx_word32_t sum;
+  int j;
+
+  while (!(last_sample >= (spx_int32_t) * in_len
+          || out_sample >= (spx_int32_t) * out_len)) {
+    const spx_word16_t *sinc = &sinc_table[samp_frac_num * N];
+    const spx_word16_t *iptr = &in[last_sample];
+
+    SSE_FALLBACK (INNER_PRODUCT_SINGLE)
+        sum = 0;
+    for (j = 0; j < N; j++)
+      sum += MULT16_16 (sinc[j], iptr[j]);
+
+/*    This code is slower on most DSPs which have only 2 accumulators.
+      Plus this this forces truncation to 32 bits and you lose the HW guard bits.
+      I think we can trust the compiler and let it vectorize and/or unroll itself.
+      spx_word32_t accum[4] = {0,0,0,0};
+      for(j=0;j<N;j+=4) {
+        accum[0] += MULT16_16(sinc[j], iptr[j]);
+        accum[1] += MULT16_16(sinc[j+1], iptr[j+1]);
+        accum[2] += MULT16_16(sinc[j+2], iptr[j+2]);
+        accum[3] += MULT16_16(sinc[j+3], iptr[j+3]);
+      }
+      sum = accum[0] + accum[1] + accum[2] + accum[3];
+*/
+#ifdef OVERRIDE_INNER_PRODUCT_SINGLE
+    SSE_IMPLEMENTATION (INNER_PRODUCT_SINGLE)
+        sum = inner_product_single (sinc, iptr, N);
+    SSE_END (INNER_PRODUCT_SINGLE)
+#endif
+        out[out_stride * out_sample++] = SATURATE32 (PSHR32 (sum, 15), 32767);
+    last_sample += int_advance;
+    samp_frac_num += frac_advance;
+    if (samp_frac_num >= den_rate) {
+      samp_frac_num -= den_rate;
+      last_sample++;
+    }
+  }
+
+  st->last_sample[channel_index] = last_sample;
+  st->samp_frac_num[channel_index] = samp_frac_num;
+  return out_sample;
+}
+#endif
+
+#ifdef FIXED_POINT
+#else
+/* This is the same as the previous function, except with a double-precision accumulator */
+static int
+resampler_basic_direct_double (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+    spx_word16_t * out, spx_uint32_t * out_len)
+{
+  const int N = st->filt_len;
+  int out_sample = 0;
+  int last_sample = st->last_sample[channel_index];
+  spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index];
+  const spx_word16_t *sinc_table = st->sinc_table;
+  const int out_stride = st->out_stride;
+  const int int_advance = st->int_advance;
+  const int frac_advance = st->frac_advance;
+  const spx_uint32_t den_rate = st->den_rate;
+  double sum;
+  int j;
+
+  while (!(last_sample >= (spx_int32_t) * in_len
+          || out_sample >= (spx_int32_t) * out_len)) {
+    const spx_word16_t *sinc = &sinc_table[samp_frac_num * N];
+    const spx_word16_t *iptr = &in[last_sample];
+
+    SSE2_FALLBACK (INNER_PRODUCT_DOUBLE)
+    double accum[4] = { 0, 0, 0, 0 };
+
+    for (j = 0; j < N; j += 4) {
+      accum[0] += sinc[j] * iptr[j];
+      accum[1] += sinc[j + 1] * iptr[j + 1];
+      accum[2] += sinc[j + 2] * iptr[j + 2];
+      accum[3] += sinc[j + 3] * iptr[j + 3];
+    }
+    sum = accum[0] + accum[1] + accum[2] + accum[3];
+#ifdef OVERRIDE_INNER_PRODUCT_DOUBLE
+    SSE2_IMPLEMENTATION (INNER_PRODUCT_DOUBLE)
+        sum = inner_product_double (sinc, iptr, N);
+    SSE2_END (INNER_PRODUCT_DOUBLE)
+#endif
+        out[out_stride * out_sample++] = PSHR32 (sum, 15);
+    last_sample += int_advance;
+    samp_frac_num += frac_advance;
+    if (samp_frac_num >= den_rate) {
+      samp_frac_num -= den_rate;
+      last_sample++;
+    }
+  }
+
+  st->last_sample[channel_index] = last_sample;
+  st->samp_frac_num[channel_index] = samp_frac_num;
+  return out_sample;
+}
+#endif
+
+#ifndef DOUBLE_PRECISION
+static int
+resampler_basic_interpolate_single (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+    spx_word16_t * out, spx_uint32_t * out_len)
+{
+  const int N = st->filt_len;
+  int out_sample = 0;
+  int last_sample = st->last_sample[channel_index];
+  spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index];
+  const int out_stride = st->out_stride;
+  const int int_advance = st->int_advance;
+  const int frac_advance = st->frac_advance;
+  const spx_uint32_t den_rate = st->den_rate;
+  int j;
+  spx_word32_t sum;
+
+  while (!(last_sample >= (spx_int32_t) * in_len
+          || out_sample >= (spx_int32_t) * out_len)) {
+    const spx_word16_t *iptr = &in[last_sample];
+
+    const int offset = samp_frac_num * st->oversample / st->den_rate;
+#ifdef FIXED_POINT
+    const spx_word16_t frac =
+        PDIV32 (SHL32 ((samp_frac_num * st->oversample) % st->den_rate, 15),
+        st->den_rate);
+#else
+    const spx_word16_t frac =
+        ((float) ((samp_frac_num * st->oversample) % st->den_rate)) /
+        st->den_rate;
+#endif
+    spx_word16_t interp[4];
+
+
+    SSE_FALLBACK (INTERPOLATE_PRODUCT_SINGLE)
+    spx_word32_t accum[4] = { 0, 0, 0, 0 };
+
+    for (j = 0; j < N; j++) {
+      const spx_word16_t curr_in = iptr[j];
+      accum[0] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset - 2]);
+      accum[1] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset - 1]);
+      accum[2] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset]);
+      accum[3] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset + 1]);
+    }
+
+    cubic_coef (frac, interp);
+    sum =
+        MULT16_32_Q15 (interp[0], SHR32 (accum[0],
+            1)) + MULT16_32_Q15 (interp[1], SHR32 (accum[1],
+            1)) + MULT16_32_Q15 (interp[2], SHR32 (accum[2],
+            1)) + MULT16_32_Q15 (interp[3], SHR32 (accum[3], 1));
+#ifdef OVERRIDE_INTERPOLATE_PRODUCT_SINGLE
+    SSE_IMPLEMENTATION (INTERPOLATE_PRODUCT_SINGLE)
+        cubic_coef (frac, interp);
+    sum =
+        interpolate_product_single (iptr,
+        st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample,
+        interp);
+    SSE_END (INTERPOLATE_PRODUCT_SINGLE)
+#endif
+        out[out_stride * out_sample++] = SATURATE32 (PSHR32 (sum, 14), 32767);
+    last_sample += int_advance;
+    samp_frac_num += frac_advance;
+    if (samp_frac_num >= den_rate) {
+      samp_frac_num -= den_rate;
+      last_sample++;
+    }
+  }
+
+  st->last_sample[channel_index] = last_sample;
+  st->samp_frac_num[channel_index] = samp_frac_num;
+  return out_sample;
+}
+#endif
+
+#ifdef FIXED_POINT
+#else
+/* This is the same as the previous function, except with a double-precision accumulator */
+static int
+resampler_basic_interpolate_double (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_word16_t * in, spx_uint32_t * in_len,
+    spx_word16_t * out, spx_uint32_t * out_len)
+{
+  const int N = st->filt_len;
+  int out_sample = 0;
+  int last_sample = st->last_sample[channel_index];
+  spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index];
+  const int out_stride = st->out_stride;
+  const int int_advance = st->int_advance;
+  const int frac_advance = st->frac_advance;
+  const spx_uint32_t den_rate = st->den_rate;
+  int j;
+  spx_word32_t sum;
+
+  while (!(last_sample >= (spx_int32_t) * in_len
+          || out_sample >= (spx_int32_t) * out_len)) {
+    const spx_word16_t *iptr = &in[last_sample];
+
+    const int offset = samp_frac_num * st->oversample / st->den_rate;
+#ifdef FIXED_POINT
+    const spx_word16_t frac =
+        PDIV32 (SHL32 ((samp_frac_num * st->oversample) % st->den_rate, 15),
+        st->den_rate);
+#else
+#ifdef DOUBLE_PRECISION
+    const spx_word16_t frac =
+        ((double) ((samp_frac_num * st->oversample) % st->den_rate)) /
+        st->den_rate;
+#else
+    const spx_word16_t frac =
+        ((float) ((samp_frac_num * st->oversample) % st->den_rate)) /
+        st->den_rate;
+#endif
+#endif
+    spx_word16_t interp[4];
+
+
+    SSE2_FALLBACK (INTERPOLATE_PRODUCT_DOUBLE)
+    double accum[4] = { 0, 0, 0, 0 };
+
+    for (j = 0; j < N; j++) {
+      const double curr_in = iptr[j];
+      accum[0] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset - 2]);
+      accum[1] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset - 1]);
+      accum[2] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset]);
+      accum[3] +=
+          MULT16_16 (curr_in,
+          st->sinc_table[4 + (j + 1) * st->oversample - offset + 1]);
+    }
+
+    cubic_coef (frac, interp);
+    sum =
+        MULT16_32_Q15 (interp[0], accum[0]) + MULT16_32_Q15 (interp[1],
+        accum[1]) + MULT16_32_Q15 (interp[2],
+        accum[2]) + MULT16_32_Q15 (interp[3], accum[3]);
+#ifdef OVERRIDE_INTERPOLATE_PRODUCT_DOUBLE
+    SSE2_IMPLEMENTATION (INTERPOLATE_PRODUCT_DOUBLE)
+        cubic_coef (frac, interp);
+    sum =
+        interpolate_product_double (iptr,
+        st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample,
+        interp);
+    SSE2_END (INTERPOLATE_PRODUCT_DOUBLE)
+#endif
+        out[out_stride * out_sample++] = PSHR32 (sum, 15);
+    last_sample += int_advance;
+    samp_frac_num += frac_advance;
+    if (samp_frac_num >= den_rate) {
+      samp_frac_num -= den_rate;
+      last_sample++;
+    }
+  }
+
+  st->last_sample[channel_index] = last_sample;
+  st->samp_frac_num[channel_index] = samp_frac_num;
+  return out_sample;
+}
+#endif
+
+static void
+update_filter (SpeexResamplerState * st)
+{
+  spx_uint32_t old_length;
+
+  old_length = st->filt_len;
+  st->oversample = quality_map[st->quality].oversample;
+  st->filt_len = quality_map[st->quality].base_length;
+
+  if (st->num_rate > st->den_rate) {
+    /* down-sampling */
+    st->cutoff =
+        quality_map[st->quality].downsample_bandwidth * st->den_rate /
+        st->num_rate;
+    /* FIXME: divide the numerator and denominator by a certain amount if they're too large */
+    st->filt_len = st->filt_len * st->num_rate / st->den_rate;
+    /* Round down to make sure we have a multiple of 4 */
+    st->filt_len &= (~0x3);
+    if (2 * st->den_rate < st->num_rate)
+      st->oversample >>= 1;
+    if (4 * st->den_rate < st->num_rate)
+      st->oversample >>= 1;
+    if (8 * st->den_rate < st->num_rate)
+      st->oversample >>= 1;
+    if (16 * st->den_rate < st->num_rate)
+      st->oversample >>= 1;
+    if (st->oversample < 1)
+      st->oversample = 1;
+  } else {
+    /* up-sampling */
+    st->cutoff = quality_map[st->quality].upsample_bandwidth;
+  }
+
+  /* Choose the resampling type that requires the least amount of memory */
+  if (st->den_rate <= st->oversample) {
+    spx_uint32_t i;
+    if (!st->sinc_table)
+      st->sinc_table =
+          (spx_word16_t *) speex_alloc (st->filt_len * st->den_rate *
+          sizeof (spx_word16_t));
+    else if (st->sinc_table_length < st->filt_len * st->den_rate) {
+      st->sinc_table =
+          (spx_word16_t *) speex_realloc (st->sinc_table,
+          st->filt_len * st->den_rate * sizeof (spx_word16_t));
+      st->sinc_table_length = st->filt_len * st->den_rate;
+    }
+    for (i = 0; i < st->den_rate; i++) {
+      spx_int32_t j;
+      for (j = 0; j < st->filt_len; j++) {
+        st->sinc_table[i * st->filt_len + j] =
+            sinc (st->cutoff, ((j - (spx_int32_t) st->filt_len / 2 + 1) -
+#ifdef DOUBLE_PRECISION
+                ((double) i) / st->den_rate), st->filt_len,
+#else
+                ((float) i) / st->den_rate), st->filt_len,
+#endif
+            quality_map[st->quality].window_func);
+      }
+    }
+#ifdef FIXED_POINT
+    st->resampler_ptr = resampler_basic_direct_single;
+#else
+#ifdef DOUBLE_PRECISION
+    st->resampler_ptr = resampler_basic_direct_double;
+#else
+    if (st->quality > 8)
+      st->resampler_ptr = resampler_basic_direct_double;
+    else
+      st->resampler_ptr = resampler_basic_direct_single;
+#endif
+#endif
+    /*fprintf (stderr, "resampler uses direct sinc table and normalised cutoff %f\n", cutoff); */
+  } else {
+    spx_int32_t i;
+    if (!st->sinc_table)
+      st->sinc_table =
+          (spx_word16_t *) speex_alloc ((st->filt_len * st->oversample +
+              8) * sizeof (spx_word16_t));
+    else if (st->sinc_table_length < st->filt_len * st->oversample + 8) {
+      st->sinc_table =
+          (spx_word16_t *) speex_realloc (st->sinc_table,
+          (st->filt_len * st->oversample + 8) * sizeof (spx_word16_t));
+      st->sinc_table_length = st->filt_len * st->oversample + 8;
+    }
+    for (i = -4; i < (spx_int32_t) (st->oversample * st->filt_len + 4); i++)
+      st->sinc_table[i + 4] =
+#ifdef DOUBLE_PRECISION
+          sinc (st->cutoff, (i / (double) st->oversample - st->filt_len / 2),
+#else
+          sinc (st->cutoff, (i / (float) st->oversample - st->filt_len / 2),
+#endif
+          st->filt_len, quality_map[st->quality].window_func);
+#ifdef FIXED_POINT
+    st->resampler_ptr = resampler_basic_interpolate_single;
+#else
+#ifdef DOUBLE_PRECISION
+    st->resampler_ptr = resampler_basic_interpolate_double;
+#else
+    if (st->quality > 8)
+      st->resampler_ptr = resampler_basic_interpolate_double;
+    else
+      st->resampler_ptr = resampler_basic_interpolate_single;
+#endif
+#endif
+    /*fprintf (stderr, "resampler uses interpolated sinc table and normalised cutoff %f\n", cutoff); */
+  }
+  st->int_advance = st->num_rate / st->den_rate;
+  st->frac_advance = st->num_rate % st->den_rate;
+
+
+  /* Here's the place where we update the filter memory to take into account
+     the change in filter length. It's probably the messiest part of the code
+     due to handling of lots of corner cases. */
+  if (!st->mem) {
+    spx_uint32_t i;
+    st->mem_alloc_size = st->filt_len - 1 + st->buffer_size;
+    st->mem =
+        (spx_word16_t *) speex_alloc (st->nb_channels * st->mem_alloc_size *
+        sizeof (spx_word16_t));
+    for (i = 0; i < st->nb_channels * st->mem_alloc_size; i++)
+      st->mem[i] = 0;
+    /*speex_warning("init filter"); */
+  } else if (!st->started) {
+    spx_uint32_t i;
+    st->mem_alloc_size = st->filt_len - 1 + st->buffer_size;
+    st->mem =
+        (spx_word16_t *) speex_realloc (st->mem,
+        st->nb_channels * st->mem_alloc_size * sizeof (spx_word16_t));
+    for (i = 0; i < st->nb_channels * st->mem_alloc_size; i++)
+      st->mem[i] = 0;
+    /*speex_warning("reinit filter"); */
+  } else if (st->filt_len > old_length) {
+    spx_int32_t i;
+    /* Increase the filter length */
+    /*speex_warning("increase filter size"); */
+    int old_alloc_size = st->mem_alloc_size;
+    if ((st->filt_len - 1 + st->buffer_size) > st->mem_alloc_size) {
+      st->mem_alloc_size = st->filt_len - 1 + st->buffer_size;
+      st->mem =
+          (spx_word16_t *) speex_realloc (st->mem,
+          st->nb_channels * st->mem_alloc_size * sizeof (spx_word16_t));
+    }
+    for (i = st->nb_channels - 1; i >= 0; i--) {
+      spx_int32_t j;
+      spx_uint32_t olen = old_length;
+      /*if (st->magic_samples[i]) */
+      {
+        /* Try and remove the magic samples as if nothing had happened */
+
+        /* FIXME: This is wrong but for now we need it to avoid going over the array bounds */
+        olen = old_length + 2 * st->magic_samples[i];
+        for (j = old_length - 2 + st->magic_samples[i]; j >= 0; j--)
+          st->mem[i * st->mem_alloc_size + j + st->magic_samples[i]] =
+              st->mem[i * old_alloc_size + j];
+        for (j = 0; j < st->magic_samples[i]; j++)
+          st->mem[i * st->mem_alloc_size + j] = 0;
+        st->magic_samples[i] = 0;
+      }
+      if (st->filt_len > olen) {
+        /* If the new filter length is still bigger than the "augmented" length */
+        /* Copy data going backward */
+        for (j = 0; j < olen - 1; j++)
+          st->mem[i * st->mem_alloc_size + (st->filt_len - 2 - j)] =
+              st->mem[i * st->mem_alloc_size + (olen - 2 - j)];
+        /* Then put zeros for lack of anything better */
+        for (; j < st->filt_len - 1; j++)
+          st->mem[i * st->mem_alloc_size + (st->filt_len - 2 - j)] = 0;
+        /* Adjust last_sample */
+        st->last_sample[i] += (st->filt_len - olen) / 2;
+      } else {
+        /* Put back some of the magic! */
+        st->magic_samples[i] = (olen - st->filt_len) / 2;
+        for (j = 0; j < st->filt_len - 1 + st->magic_samples[i]; j++)
+          st->mem[i * st->mem_alloc_size + j] =
+              st->mem[i * st->mem_alloc_size + j + st->magic_samples[i]];
+      }
+    }
+  } else if (st->filt_len < old_length) {
+    spx_uint32_t i;
+    /* Reduce filter length, this a bit tricky. We need to store some of the memory as "magic"
+       samples so they can be used directly as input the next time(s) */
+    for (i = 0; i < st->nb_channels; i++) {
+      spx_uint32_t j;
+      spx_uint32_t old_magic = st->magic_samples[i];
+      st->magic_samples[i] = (old_length - st->filt_len) / 2;
+      /* We must copy some of the memory that's no longer used */
+      /* Copy data going backward */
+      for (j = 0; j < st->filt_len - 1 + st->magic_samples[i] + old_magic; j++)
+        st->mem[i * st->mem_alloc_size + j] =
+            st->mem[i * st->mem_alloc_size + j + st->magic_samples[i]];
+      st->magic_samples[i] += old_magic;
+    }
+  }
+
+}
+
+EXPORT SpeexResamplerState *
+speex_resampler_init (spx_uint32_t nb_channels, spx_uint32_t in_rate,
+    spx_uint32_t out_rate, int quality, int *err)
+{
+  return speex_resampler_init_frac (nb_channels, in_rate, out_rate, in_rate,
+      out_rate, quality, err);
+}
+
+#if defined HAVE_ORC && !defined DISABLE_ORC
+static void
+check_insn_set (SpeexResamplerState * st, const char *name)
+{
+  if (!name)
+    return;
+  if (!strcmp (name, "sse"))
+    st->use_sse = 1;
+  if (!strcmp (name, "sse2"))
+    st->use_sse = st->use_sse2 = 1;
+}
+#endif
+
+EXPORT SpeexResamplerState *
+speex_resampler_init_frac (spx_uint32_t nb_channels, spx_uint32_t ratio_num,
+    spx_uint32_t ratio_den, spx_uint32_t in_rate, spx_uint32_t out_rate,
+    int quality, int *err)
+{
+  spx_uint32_t i;
+  SpeexResamplerState *st;
+  if (quality > 10 || quality < 0) {
+    if (err)
+      *err = RESAMPLER_ERR_INVALID_ARG;
+    return NULL;
+  }
+  st = (SpeexResamplerState *) speex_alloc (sizeof (SpeexResamplerState));
+  st->initialised = 0;
+  st->started = 0;
+  st->in_rate = 0;
+  st->out_rate = 0;
+  st->num_rate = 0;
+  st->den_rate = 0;
+  st->quality = -1;
+  st->sinc_table_length = 0;
+  st->mem_alloc_size = 0;
+  st->filt_len = 0;
+  st->mem = 0;
+  st->resampler_ptr = 0;
+
+  st->cutoff = 1.f;
+  st->nb_channels = nb_channels;
+  st->in_stride = 1;
+  st->out_stride = 1;
+
+#ifdef FIXED_POINT
+  st->buffer_size = 160;
+#else
+  st->buffer_size = 160;
+#endif
+
+  st->use_sse = st->use_sse2 = 0;
+#if defined HAVE_ORC && !defined DISABLE_ORC
+  orc_init ();
+  {
+    OrcTarget *target = orc_target_get_default ();
+    if (target) {
+      unsigned int flags = orc_target_get_default_flags (target);
+      check_insn_set (st, orc_target_get_name (target));
+      for (i = 0; i < 32; ++i) {
+        if (flags & (1 << i)) {
+          check_insn_set (st, orc_target_get_flag_name (target, i));
+        }
+      }
+    }
+  }
+#endif
+
+  /* Per channel data */
+  st->last_sample = (spx_int32_t *) speex_alloc (nb_channels * sizeof (int));
+  st->magic_samples = (spx_uint32_t *) speex_alloc (nb_channels * sizeof (int));
+  st->samp_frac_num = (spx_uint32_t *) speex_alloc (nb_channels * sizeof (int));
+  for (i = 0; i < nb_channels; i++) {
+    st->last_sample[i] = 0;
+    st->magic_samples[i] = 0;
+    st->samp_frac_num[i] = 0;
+  }
+
+  speex_resampler_set_quality (st, quality);
+  speex_resampler_set_rate_frac (st, ratio_num, ratio_den, in_rate, out_rate);
+
+
+  update_filter (st);
+
+  st->initialised = 1;
+  if (err)
+    *err = RESAMPLER_ERR_SUCCESS;
+
+  return st;
+}
+
+EXPORT void
+speex_resampler_destroy (SpeexResamplerState * st)
+{
+  speex_free (st->mem);
+  speex_free (st->sinc_table);
+  speex_free (st->last_sample);
+  speex_free (st->magic_samples);
+  speex_free (st->samp_frac_num);
+  speex_free (st);
+}
+
+static int
+speex_resampler_process_native (SpeexResamplerState * st,
+    spx_uint32_t channel_index, spx_uint32_t * in_len, spx_word16_t * out,
+    spx_uint32_t * out_len)
+{
+  int j = 0;
+  const int N = st->filt_len;
+  int out_sample = 0;
+  spx_word16_t *mem = st->mem + channel_index * st->mem_alloc_size;
+  spx_uint32_t ilen;
+
+  st->started = 1;
+
+  /* Call the right resampler through the function ptr */
+  out_sample = st->resampler_ptr (st, channel_index, mem, in_len, out, out_len);
+
+  if (st->last_sample[channel_index] < (spx_int32_t) * in_len)
+    *in_len = st->last_sample[channel_index];
+  *out_len = out_sample;
+  st->last_sample[channel_index] -= *in_len;
+
+  ilen = *in_len;
+
+  for (j = 0; j < N - 1; ++j)
+    mem[j] = mem[j + ilen];
+
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+static int
+speex_resampler_magic (SpeexResamplerState * st, spx_uint32_t channel_index,
+    spx_word16_t ** out, spx_uint32_t out_len)
+{
+  spx_uint32_t tmp_in_len = st->magic_samples[channel_index];
+  spx_word16_t *mem = st->mem + channel_index * st->mem_alloc_size;
+  const int N = st->filt_len;
+
+  speex_resampler_process_native (st, channel_index, &tmp_in_len, *out,
+      &out_len);
+
+  st->magic_samples[channel_index] -= tmp_in_len;
+
+  /* If we couldn't process all "magic" input samples, save the rest for next time */
+  if (st->magic_samples[channel_index]) {
+    spx_uint32_t i;
+    for (i = 0; i < st->magic_samples[channel_index]; i++)
+      mem[N - 1 + i] = mem[N - 1 + i + tmp_in_len];
+  }
+  *out += out_len * st->out_stride;
+  return out_len;
+}
+
+#ifdef FIXED_POINT
+EXPORT int
+speex_resampler_process_int (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_int16_t * in, spx_uint32_t * in_len,
+    spx_int16_t * out, spx_uint32_t * out_len)
+#else
+#ifdef DOUBLE_PRECISION
+EXPORT int
+speex_resampler_process_float (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const double *in, spx_uint32_t * in_len,
+    double *out, spx_uint32_t * out_len)
+#else
+EXPORT int
+speex_resampler_process_float (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const float *in, spx_uint32_t * in_len,
+    float *out, spx_uint32_t * out_len)
+#endif
+#endif
+{
+  int j;
+  spx_uint32_t ilen = *in_len;
+  spx_uint32_t olen = *out_len;
+  spx_word16_t *x = st->mem + channel_index * st->mem_alloc_size;
+  const int filt_offs = st->filt_len - 1;
+  const spx_uint32_t xlen = st->mem_alloc_size - filt_offs;
+  const int istride = st->in_stride;
+
+  if (st->magic_samples[channel_index])
+    olen -= speex_resampler_magic (st, channel_index, &out, olen);
+  if (!st->magic_samples[channel_index]) {
+    while (ilen && olen) {
+      spx_uint32_t ichunk = (ilen > xlen) ? xlen : ilen;
+      spx_uint32_t ochunk = olen;
+
+      if (in) {
+        for (j = 0; j < ichunk; ++j)
+          x[j + filt_offs] = in[j * istride];
+      } else {
+        for (j = 0; j < ichunk; ++j)
+          x[j + filt_offs] = 0;
+      }
+      speex_resampler_process_native (st, channel_index, &ichunk, out, &ochunk);
+      ilen -= ichunk;
+      olen -= ochunk;
+      out += ochunk * st->out_stride;
+      if (in)
+        in += ichunk * istride;
+    }
+  }
+  *in_len -= ilen;
+  *out_len -= olen;
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+#ifdef FIXED_POINT
+EXPORT int
+speex_resampler_process_float (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const float *in, spx_uint32_t * in_len,
+    float *out, spx_uint32_t * out_len)
+#else
+EXPORT int
+speex_resampler_process_int (SpeexResamplerState * st,
+    spx_uint32_t channel_index, const spx_int16_t * in, spx_uint32_t * in_len,
+    spx_int16_t * out, spx_uint32_t * out_len)
+#endif
+{
+  int j;
+  const int istride_save = st->in_stride;
+  const int ostride_save = st->out_stride;
+  spx_uint32_t ilen = *in_len;
+  spx_uint32_t olen = *out_len;
+  spx_word16_t *x = st->mem + channel_index * st->mem_alloc_size;
+  const spx_uint32_t xlen = st->mem_alloc_size - (st->filt_len - 1);
+#ifdef VAR_ARRAYS
+  const unsigned int ylen =
+      (olen < FIXED_STACK_ALLOC) ? olen : FIXED_STACK_ALLOC;
+  VARDECL (spx_word16_t * ystack);
+  ALLOC (ystack, ylen, spx_word16_t);
+#else
+  const unsigned int ylen = FIXED_STACK_ALLOC;
+  spx_word16_t ystack[FIXED_STACK_ALLOC];
+#endif
+
+  st->out_stride = 1;
+
+  while (ilen && olen) {
+    spx_word16_t *y = ystack;
+    spx_uint32_t ichunk = (ilen > xlen) ? xlen : ilen;
+    spx_uint32_t ochunk = (olen > ylen) ? ylen : olen;
+    spx_uint32_t omagic = 0;
+
+    if (st->magic_samples[channel_index]) {
+      omagic = speex_resampler_magic (st, channel_index, &y, ochunk);
+      ochunk -= omagic;
+      olen -= omagic;
+    }
+    if (!st->magic_samples[channel_index]) {
+      if (in) {
+        for (j = 0; j < ichunk; ++j)
+#ifdef FIXED_POINT
+          x[j + st->filt_len - 1] = WORD2INT (in[j * istride_save]);
+#else
+          x[j + st->filt_len - 1] = in[j * istride_save];
+#endif
+      } else {
+        for (j = 0; j < ichunk; ++j)
+          x[j + st->filt_len - 1] = 0;
+      }
+
+      speex_resampler_process_native (st, channel_index, &ichunk, y, &ochunk);
+    } else {
+      ichunk = 0;
+      ochunk = 0;
+    }
+
+    for (j = 0; j < ochunk + omagic; ++j)
+#ifdef FIXED_POINT
+      out[j * ostride_save] = ystack[j];
+#else
+      out[j * ostride_save] = WORD2INT (ystack[j]);
+#endif
+
+    ilen -= ichunk;
+    olen -= ochunk;
+    out += (ochunk + omagic) * ostride_save;
+    if (in)
+      in += ichunk * istride_save;
+  }
+  st->out_stride = ostride_save;
+  *in_len -= ilen;
+  *out_len -= olen;
+
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+#ifdef DOUBLE_PRECISION
+EXPORT int
+speex_resampler_process_interleaved_float (SpeexResamplerState * st,
+    const double *in, spx_uint32_t * in_len, double *out,
+    spx_uint32_t * out_len)
+#else
+EXPORT int
+speex_resampler_process_interleaved_float (SpeexResamplerState * st,
+    const float *in, spx_uint32_t * in_len, float *out, spx_uint32_t * out_len)
+#endif
+{
+  spx_uint32_t i;
+  int istride_save, ostride_save;
+  spx_uint32_t bak_len = *out_len;
+  istride_save = st->in_stride;
+  ostride_save = st->out_stride;
+  st->in_stride = st->out_stride = st->nb_channels;
+  for (i = 0; i < st->nb_channels; i++) {
+    *out_len = bak_len;
+    if (in != NULL)
+      speex_resampler_process_float (st, i, in + i, in_len, out + i, out_len);
+    else
+      speex_resampler_process_float (st, i, NULL, in_len, out + i, out_len);
+  }
+  st->in_stride = istride_save;
+  st->out_stride = ostride_save;
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT int
+speex_resampler_process_interleaved_int (SpeexResamplerState * st,
+    const spx_int16_t * in, spx_uint32_t * in_len, spx_int16_t * out,
+    spx_uint32_t * out_len)
+{
+  spx_uint32_t i;
+  int istride_save, ostride_save;
+  spx_uint32_t bak_len = *out_len;
+  istride_save = st->in_stride;
+  ostride_save = st->out_stride;
+  st->in_stride = st->out_stride = st->nb_channels;
+  for (i = 0; i < st->nb_channels; i++) {
+    *out_len = bak_len;
+    if (in != NULL)
+      speex_resampler_process_int (st, i, in + i, in_len, out + i, out_len);
+    else
+      speex_resampler_process_int (st, i, NULL, in_len, out + i, out_len);
+  }
+  st->in_stride = istride_save;
+  st->out_stride = ostride_save;
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT int
+speex_resampler_set_rate (SpeexResamplerState * st, spx_uint32_t in_rate,
+    spx_uint32_t out_rate)
+{
+  return speex_resampler_set_rate_frac (st, in_rate, out_rate, in_rate,
+      out_rate);
+}
+
+EXPORT void
+speex_resampler_get_rate (SpeexResamplerState * st, spx_uint32_t * in_rate,
+    spx_uint32_t * out_rate)
+{
+  *in_rate = st->in_rate;
+  *out_rate = st->out_rate;
+}
+
+EXPORT int
+speex_resampler_set_rate_frac (SpeexResamplerState * st, spx_uint32_t ratio_num,
+    spx_uint32_t ratio_den, spx_uint32_t in_rate, spx_uint32_t out_rate)
+{
+  spx_uint32_t fact;
+  spx_uint32_t old_den;
+  spx_uint32_t i;
+  if (st->in_rate == in_rate && st->out_rate == out_rate
+      && st->num_rate == ratio_num && st->den_rate == ratio_den)
+    return RESAMPLER_ERR_SUCCESS;
+
+  old_den = st->den_rate;
+  st->in_rate = in_rate;
+  st->out_rate = out_rate;
+  st->num_rate = ratio_num;
+  st->den_rate = ratio_den;
+  /* FIXME: This is terribly inefficient, but who cares (at least for now)? */
+  for (fact = 2; fact <= IMIN (st->num_rate, st->den_rate); fact++) {
+    while ((st->num_rate % fact == 0) && (st->den_rate % fact == 0)) {
+      st->num_rate /= fact;
+      st->den_rate /= fact;
+    }
+  }
+
+  if (old_den > 0) {
+    for (i = 0; i < st->nb_channels; i++) {
+      st->samp_frac_num[i] = st->samp_frac_num[i] * st->den_rate / old_den;
+      /* Safety net */
+      if (st->samp_frac_num[i] >= st->den_rate)
+        st->samp_frac_num[i] = st->den_rate - 1;
+    }
+  }
+
+  if (st->initialised)
+    update_filter (st);
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT void
+speex_resampler_get_ratio (SpeexResamplerState * st, spx_uint32_t * ratio_num,
+    spx_uint32_t * ratio_den)
+{
+  *ratio_num = st->num_rate;
+  *ratio_den = st->den_rate;
+}
+
+EXPORT int
+speex_resampler_set_quality (SpeexResamplerState * st, int quality)
+{
+  if (quality > 10 || quality < 0)
+    return RESAMPLER_ERR_INVALID_ARG;
+  if (st->quality == quality)
+    return RESAMPLER_ERR_SUCCESS;
+  st->quality = quality;
+  if (st->initialised)
+    update_filter (st);
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT void
+speex_resampler_get_quality (SpeexResamplerState * st, int *quality)
+{
+  *quality = st->quality;
+}
+
+EXPORT void
+speex_resampler_set_input_stride (SpeexResamplerState * st, spx_uint32_t stride)
+{
+  st->in_stride = stride;
+}
+
+EXPORT void
+speex_resampler_get_input_stride (SpeexResamplerState * st,
+    spx_uint32_t * stride)
+{
+  *stride = st->in_stride;
+}
+
+EXPORT void
+speex_resampler_set_output_stride (SpeexResamplerState * st,
+    spx_uint32_t stride)
+{
+  st->out_stride = stride;
+}
+
+EXPORT void
+speex_resampler_get_output_stride (SpeexResamplerState * st,
+    spx_uint32_t * stride)
+{
+  *stride = st->out_stride;
+}
+
+EXPORT int
+speex_resampler_get_input_latency (SpeexResamplerState * st)
+{
+  return st->filt_len / 2;
+}
+
+EXPORT int
+speex_resampler_get_output_latency (SpeexResamplerState * st)
+{
+  return ((st->filt_len / 2) * st->den_rate +
+      (st->num_rate >> 1)) / st->num_rate;
+}
+
+EXPORT int
+speex_resampler_get_filt_len (SpeexResamplerState * st)
+{
+  return st->filt_len;
+}
+
+EXPORT int
+speex_resampler_skip_zeros (SpeexResamplerState * st)
+{
+  spx_uint32_t i;
+  for (i = 0; i < st->nb_channels; i++)
+    st->last_sample[i] = st->filt_len / 2;
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT int
+speex_resampler_reset_mem (SpeexResamplerState * st)
+{
+  spx_uint32_t i;
+  for (i = 0; i < st->nb_channels * (st->filt_len - 1); i++)
+    st->mem[i] = 0;
+  return RESAMPLER_ERR_SUCCESS;
+}
+
+EXPORT const char *
+speex_resampler_strerror (int err)
+{
+  switch (err) {
+    case RESAMPLER_ERR_SUCCESS:
+      return "Success.";
+    case RESAMPLER_ERR_ALLOC_FAILED:
+      return "Memory allocation failed.";
+    case RESAMPLER_ERR_BAD_STATE:
+      return "Bad resampler state.";
+    case RESAMPLER_ERR_INVALID_ARG:
+      return "Invalid argument.";
+    case RESAMPLER_ERR_PTR_OVERLAP:
+      return "Input and output buffers overlap.";
+    default:
+      return "Unknown error. Bad error code or strange version mismatch.";
+  }
+}
diff --git a/gst/audioresample/resample_sse.h b/gst/audioresample/resample_sse.h
new file mode 100644
index 0000000..36522a3
--- /dev/null
+++ b/gst/audioresample/resample_sse.h
@@ -0,0 +1,180 @@
+/* Copyright (C) 2007-2008 Jean-Marc Valin
+ * Copyright (C) 2008 Thorvald Natvig
+ */
+/**
+   @file resample_sse.h
+   @brief Resampler functions (SSE version)
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifdef HAVE_XMMINTRIN_H
+#include <xmmintrin.h>
+#endif
+
+#define OVERRIDE_INNER_PRODUCT_SINGLE
+static inline float inner_product_single(const float *a, const float *b, unsigned int len)
+{
+   int i;
+   float ret;
+   __m128 sum = _mm_setzero_ps();
+   for (i=0;i<len;i+=8)
+   {
+      sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+i), _mm_loadu_ps(b+i)));
+      sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+i+4), _mm_loadu_ps(b+i+4)));
+   }
+   sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum));
+   sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55));
+   _mm_store_ss(&ret, sum);
+   return ret;
+}
+
+#define OVERRIDE_INTERPOLATE_PRODUCT_SINGLE
+static inline float interpolate_product_single(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac) {
+  int i;
+  float ret;
+  __m128 sum = _mm_setzero_ps();
+  __m128 f = _mm_loadu_ps(frac);
+  for(i=0;i<len;i+=2)
+  {
+    sum = _mm_add_ps(sum, _mm_mul_ps(_mm_load1_ps(a+i), _mm_loadu_ps(b+i*oversample)));
+    sum = _mm_add_ps(sum, _mm_mul_ps(_mm_load1_ps(a+i+1), _mm_loadu_ps(b+(i+1)*oversample)));
+  }
+   sum = _mm_mul_ps(f, sum);
+   sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum));
+   sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55));
+   _mm_store_ss(&ret, sum);
+   return ret;
+}
+
+#ifdef _USE_SSE2
+#ifdef HAVE_EMMINTRIN_H
+#include <emmintrin.h>
+#endif
+#define OVERRIDE_INNER_PRODUCT_DOUBLE
+
+#ifdef DOUBLE_PRECISION
+static inline double inner_product_double(const double *a, const double *b, unsigned int len)
+{
+   int i;
+   double ret;
+   __m128d sum = _mm_setzero_pd();
+   for (i=0;i<len;i+=4)
+   {
+      sum = _mm_add_pd(sum, _mm_mul_pd(_mm_loadu_pd(a+i), _mm_loadu_pd(b+i)));
+      sum = _mm_add_pd(sum, _mm_mul_pd(_mm_loadu_pd(a+i+2), _mm_loadu_pd(b+i+2)));
+   }
+   sum = _mm_add_sd(sum, _mm_unpackhi_pd(sum, sum));
+   _mm_store_sd(&ret, sum);
+   return ret;
+}
+#else
+static inline double inner_product_double(const float *a, const float *b, unsigned int len)
+{
+   int i;
+   double ret;
+   __m128d sum = _mm_setzero_pd();
+   __m128 t;
+   for (i=0;i<len;i+=8)
+   {
+      t = _mm_mul_ps(_mm_loadu_ps(a+i), _mm_loadu_ps(b+i));
+      sum = _mm_add_pd(sum, _mm_cvtps_pd(t));
+      sum = _mm_add_pd(sum, _mm_cvtps_pd(_mm_movehl_ps(t, t)));
+
+      t = _mm_mul_ps(_mm_loadu_ps(a+i+4), _mm_loadu_ps(b+i+4));
+      sum = _mm_add_pd(sum, _mm_cvtps_pd(t));
+      sum = _mm_add_pd(sum, _mm_cvtps_pd(_mm_movehl_ps(t, t)));
+   }
+   sum = _mm_add_sd(sum, _mm_unpackhi_pd(sum, sum));
+   _mm_store_sd(&ret, sum);
+   return ret;
+}
+#endif
+
+
+#define OVERRIDE_INTERPOLATE_PRODUCT_DOUBLE
+
+#ifdef DOUBLE_PRECISION
+static inline double interpolate_product_double(const double *a, const double *b, unsigned int len, const spx_uint32_t oversample, double *frac) {
+  int i;
+  double ret;
+  __m128d sum;
+  __m128d sum1 = _mm_setzero_pd();
+  __m128d sum2 = _mm_setzero_pd();
+  __m128d f1 = _mm_loadu_pd(frac);
+  __m128d f2 = _mm_loadu_pd(frac+2);
+  __m128d t;
+  for(i=0;i<len;i+=2)
+  {
+    t = _mm_mul_pd(_mm_load1_pd(a+i), _mm_loadu_pd(b+i*oversample));
+    sum1 = _mm_add_pd(sum1, t);
+    sum2 = _mm_add_pd(sum2, _mm_unpackhi_pd(t, t));
+
+    t = _mm_mul_pd(_mm_load1_pd(a+i+1), _mm_loadu_pd(b+(i+1)*oversample));
+    sum1 = _mm_add_pd(sum1, t);
+    sum2 = _mm_add_pd(sum2, _mm_unpackhi_pd(t, t));
+  }
+  sum1 = _mm_mul_pd(f1, sum1);
+  sum2 = _mm_mul_pd(f2, sum2);
+  sum = _mm_add_pd(sum1, sum2);
+  sum = _mm_add_sd(sum, _mm_unpackhi_pd(sum, sum));
+  _mm_store_sd(&ret, sum);
+  return ret;
+}
+#else
+static inline double interpolate_product_double(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac) {
+  int i;
+  double ret;
+  __m128d sum;
+  __m128d sum1 = _mm_setzero_pd();
+  __m128d sum2 = _mm_setzero_pd();
+  __m128 f = _mm_loadu_ps(frac);
+  __m128d f1 = _mm_cvtps_pd(f);
+  __m128d f2 = _mm_cvtps_pd(_mm_movehl_ps(f,f));
+  __m128 t;
+  for(i=0;i<len;i+=2)
+  {
+    t = _mm_mul_ps(_mm_load1_ps(a+i), _mm_loadu_ps(b+i*oversample));
+    sum1 = _mm_add_pd(sum1, _mm_cvtps_pd(t));
+    sum2 = _mm_add_pd(sum2, _mm_cvtps_pd(_mm_movehl_ps(t, t)));
+
+    t = _mm_mul_ps(_mm_load1_ps(a+i+1), _mm_loadu_ps(b+(i+1)*oversample));
+    sum1 = _mm_add_pd(sum1, _mm_cvtps_pd(t));
+    sum2 = _mm_add_pd(sum2, _mm_cvtps_pd(_mm_movehl_ps(t, t)));
+  }
+  sum1 = _mm_mul_pd(f1, sum1);
+  sum2 = _mm_mul_pd(f2, sum2);
+  sum = _mm_add_pd(sum1, sum2);
+  sum = _mm_add_sd(sum, _mm_unpackhi_pd(sum, sum));
+  _mm_store_sd(&ret, sum);
+  return ret;
+}
+#endif
+
+#endif
diff --git a/gst/audioresample/speex_resampler.h b/gst/audioresample/speex_resampler.h
new file mode 100644
index 0000000..894b380
--- /dev/null
+++ b/gst/audioresample/speex_resampler.h
@@ -0,0 +1,367 @@
+/* Copyright (C) 2007 Jean-Marc Valin
+      
+   File: speex_resampler.h
+   Resampling code
+      
+   The design goals of this code are:
+      - Very fast algorithm
+      - Low memory requirement
+      - Good *perceptual* quality (and not best SNR)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+   3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef SPEEX_RESAMPLER_H
+#define SPEEX_RESAMPLER_H
+
+#ifdef OUTSIDE_SPEEX
+
+/********* WARNING: MENTAL SANITY ENDS HERE *************/
+
+/* If the resampler is defined outside of Speex, we change the symbol names so that 
+   there won't be any clash if linking with Speex later on. */
+
+/* #define RANDOM_PREFIX your software name here */
+#ifndef RANDOM_PREFIX
+#error "Please define RANDOM_PREFIX (above) to something specific to your project to prevent symbol name clashes"
+#endif
+
+#define CAT_PREFIX2(a,b) a ## b
+#define CAT_PREFIX(a,b) CAT_PREFIX2(a, b)
+      
+#define speex_resampler_init CAT_PREFIX(RANDOM_PREFIX,_resampler_init)
+#define speex_resampler_init_frac CAT_PREFIX(RANDOM_PREFIX,_resampler_init_frac)
+#define speex_resampler_destroy CAT_PREFIX(RANDOM_PREFIX,_resampler_destroy)
+#define speex_resampler_process_float CAT_PREFIX(RANDOM_PREFIX,_resampler_process_float)
+#define speex_resampler_process_int CAT_PREFIX(RANDOM_PREFIX,_resampler_process_int)
+#define speex_resampler_process_interleaved_float CAT_PREFIX(RANDOM_PREFIX,_resampler_process_interleaved_float)
+#define speex_resampler_process_interleaved_int CAT_PREFIX(RANDOM_PREFIX,_resampler_process_interleaved_int)
+#define speex_resampler_set_rate CAT_PREFIX(RANDOM_PREFIX,_resampler_set_rate)
+#define speex_resampler_get_rate CAT_PREFIX(RANDOM_PREFIX,_resampler_get_rate)
+#define speex_resampler_set_rate_frac CAT_PREFIX(RANDOM_PREFIX,_resampler_set_rate_frac)
+#define speex_resampler_get_ratio CAT_PREFIX(RANDOM_PREFIX,_resampler_get_ratio)
+#define speex_resampler_set_quality CAT_PREFIX(RANDOM_PREFIX,_resampler_set_quality)
+#define speex_resampler_get_quality CAT_PREFIX(RANDOM_PREFIX,_resampler_get_quality)
+#define speex_resampler_set_input_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_set_input_stride)
+#define speex_resampler_get_input_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_get_input_stride)
+#define speex_resampler_set_output_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_set_output_stride)
+#define speex_resampler_get_output_stride CAT_PREFIX(RANDOM_PREFIX,_resampler_get_output_stride)
+#define speex_resampler_get_input_latency CAT_PREFIX(RANDOM_PREFIX,_resampler_get_input_latency)
+#define speex_resampler_get_output_latency CAT_PREFIX(RANDOM_PREFIX,_resampler_get_output_latency)
+#define speex_resampler_get_filt_len CAT_PREFIX(RANDOM_PREFIX,_resampler_get_filt_len)
+#define speex_resampler_skip_zeros CAT_PREFIX(RANDOM_PREFIX,_resampler_skip_zeros)
+#define speex_resampler_reset_mem CAT_PREFIX(RANDOM_PREFIX,_resampler_reset_mem)
+#define speex_resampler_strerror CAT_PREFIX(RANDOM_PREFIX,_resampler_strerror)
+
+#define spx_int16_t gint16
+#define spx_int32_t gint32
+#define spx_uint16_t guint16
+#define spx_uint32_t guint32
+      
+#else /* OUTSIDE_SPEEX */
+
+#ifdef _BUILD_SPEEX
+# include "speex_types.h"
+#else
+# include <speex/speex_types.h>
+#endif
+
+#endif /* OUTSIDE_SPEEX */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SPEEX_RESAMPLER_QUALITY_MAX 10
+#define SPEEX_RESAMPLER_QUALITY_MIN 0
+#define SPEEX_RESAMPLER_QUALITY_DEFAULT 4
+#define SPEEX_RESAMPLER_QUALITY_VOIP 3
+#define SPEEX_RESAMPLER_QUALITY_DESKTOP 5
+
+enum {
+   RESAMPLER_ERR_SUCCESS         = 0,
+   RESAMPLER_ERR_ALLOC_FAILED    = 1,
+   RESAMPLER_ERR_BAD_STATE       = 2,
+   RESAMPLER_ERR_INVALID_ARG     = 3,
+   RESAMPLER_ERR_PTR_OVERLAP     = 4,
+   
+   RESAMPLER_ERR_MAX_ERROR
+};
+
+struct SpeexResamplerState_;
+typedef struct SpeexResamplerState_ SpeexResamplerState;
+
+/** Create a new resampler with integer input and output rates.
+ * @param nb_channels Number of channels to be processed
+ * @param in_rate Input sampling rate (integer number of Hz).
+ * @param out_rate Output sampling rate (integer number of Hz).
+ * @param quality Resampling quality between 0 and 10, where 0 has poor quality
+ * and 10 has very high quality.
+ * @return Newly created resampler state
+ * @retval NULL Error: not enough memory
+ */
+SpeexResamplerState *speex_resampler_init(spx_uint32_t nb_channels, 
+                                          spx_uint32_t in_rate, 
+                                          spx_uint32_t out_rate, 
+                                          int quality,
+                                          int *err);
+
+/** Create a new resampler with fractional input/output rates. The sampling 
+ * rate ratio is an arbitrary rational number with both the numerator and 
+ * denominator being 32-bit integers.
+ * @param nb_channels Number of channels to be processed
+ * @param ratio_num Numerator of the sampling rate ratio
+ * @param ratio_den Denominator of the sampling rate ratio
+ * @param in_rate Input sampling rate rounded to the nearest integer (in Hz).
+ * @param out_rate Output sampling rate rounded to the nearest integer (in Hz).
+ * @param quality Resampling quality between 0 and 10, where 0 has poor quality
+ * and 10 has very high quality.
+ * @return Newly created resampler state
+ * @retval NULL Error: not enough memory
+ */
+SpeexResamplerState *speex_resampler_init_frac(spx_uint32_t nb_channels, 
+                                               spx_uint32_t ratio_num, 
+                                               spx_uint32_t ratio_den, 
+                                               spx_uint32_t in_rate, 
+                                               spx_uint32_t out_rate, 
+                                               int quality,
+                                               int *err);
+
+/** Destroy a resampler state.
+ * @param st Resampler state
+ */
+void speex_resampler_destroy(SpeexResamplerState *st);
+
+/** Resample a float array. The input and output buffers must *not* overlap.
+ * @param st Resampler state
+ * @param channel_index Index of the channel to process for the multi-channel 
+ * base (0 otherwise)
+ * @param in Input buffer
+ * @param in_len Number of input samples in the input buffer. Returns the 
+ * number of samples processed
+ * @param out Output buffer
+ * @param out_len Size of the output buffer. Returns the number of samples written
+ */
+#ifdef DOUBLE_PRECISION
+int speex_resampler_process_float(SpeexResamplerState *st, 
+                                   spx_uint32_t channel_index, 
+                                   const double *in, 
+                                   spx_uint32_t *in_len, 
+                                   double *out, 
+                                   spx_uint32_t *out_len);
+#else
+int speex_resampler_process_float(SpeexResamplerState *st, 
+                                   spx_uint32_t channel_index, 
+                                   const float *in, 
+                                   spx_uint32_t *in_len, 
+                                   float *out, 
+                                   spx_uint32_t *out_len);
+#endif
+
+/** Resample an int array. The input and output buffers must *not* overlap.
+ * @param st Resampler state
+ * @param channel_index Index of the channel to process for the multi-channel 
+ * base (0 otherwise)
+ * @param in Input buffer
+ * @param in_len Number of input samples in the input buffer. Returns the number
+ * of samples processed
+ * @param out Output buffer
+ * @param out_len Size of the output buffer. Returns the number of samples written
+ */
+int speex_resampler_process_int(SpeexResamplerState *st, 
+                                 spx_uint32_t channel_index, 
+                                 const spx_int16_t *in, 
+                                 spx_uint32_t *in_len, 
+                                 spx_int16_t *out, 
+                                 spx_uint32_t *out_len);
+
+/** Resample an interleaved float array. The input and output buffers must *not* overlap.
+ * @param st Resampler state
+ * @param in Input buffer
+ * @param in_len Number of input samples in the input buffer. Returns the number
+ * of samples processed. This is all per-channel.
+ * @param out Output buffer
+ * @param out_len Size of the output buffer. Returns the number of samples written.
+ * This is all per-channel.
+ */
+#ifdef DOUBLE_PRECISION
+int speex_resampler_process_interleaved_float(SpeexResamplerState *st, 
+                                               const double *in, 
+                                               spx_uint32_t *in_len, 
+                                               double *out, 
+                                               spx_uint32_t *out_len);
+#else
+int speex_resampler_process_interleaved_float(SpeexResamplerState *st, 
+                                               const float *in, 
+                                               spx_uint32_t *in_len, 
+                                               float *out, 
+                                               spx_uint32_t *out_len);
+#endif
+
+/** Resample an interleaved int array. The input and output buffers must *not* overlap.
+ * @param st Resampler state
+ * @param in Input buffer
+ * @param in_len Number of input samples in the input buffer. Returns the number
+ * of samples processed. This is all per-channel.
+ * @param out Output buffer
+ * @param out_len Size of the output buffer. Returns the number of samples written.
+ * This is all per-channel.
+ */
+int speex_resampler_process_interleaved_int(SpeexResamplerState *st, 
+                                             const spx_int16_t *in, 
+                                             spx_uint32_t *in_len, 
+                                             spx_int16_t *out, 
+                                             spx_uint32_t *out_len);
+
+/** Set (change) the input/output sampling rates (integer value).
+ * @param st Resampler state
+ * @param in_rate Input sampling rate (integer number of Hz).
+ * @param out_rate Output sampling rate (integer number of Hz).
+ */
+int speex_resampler_set_rate(SpeexResamplerState *st, 
+                              spx_uint32_t in_rate, 
+                              spx_uint32_t out_rate);
+
+/** Get the current input/output sampling rates (integer value).
+ * @param st Resampler state
+ * @param in_rate Input sampling rate (integer number of Hz) copied.
+ * @param out_rate Output sampling rate (integer number of Hz) copied.
+ */
+void speex_resampler_get_rate(SpeexResamplerState *st, 
+                              spx_uint32_t *in_rate, 
+                              spx_uint32_t *out_rate);
+
+/** Set (change) the input/output sampling rates and resampling ratio 
+ * (fractional values in Hz supported).
+ * @param st Resampler state
+ * @param ratio_num Numerator of the sampling rate ratio
+ * @param ratio_den Denominator of the sampling rate ratio
+ * @param in_rate Input sampling rate rounded to the nearest integer (in Hz).
+ * @param out_rate Output sampling rate rounded to the nearest integer (in Hz).
+ */
+int speex_resampler_set_rate_frac(SpeexResamplerState *st, 
+                                   spx_uint32_t ratio_num, 
+                                   spx_uint32_t ratio_den, 
+                                   spx_uint32_t in_rate, 
+                                   spx_uint32_t out_rate);
+
+/** Get the current resampling ratio. This will be reduced to the least
+ * common denominator.
+ * @param st Resampler state
+ * @param ratio_num Numerator of the sampling rate ratio copied
+ * @param ratio_den Denominator of the sampling rate ratio copied
+ */
+void speex_resampler_get_ratio(SpeexResamplerState *st, 
+                               spx_uint32_t *ratio_num, 
+                               spx_uint32_t *ratio_den);
+
+/** Set (change) the conversion quality.
+ * @param st Resampler state
+ * @param quality Resampling quality between 0 and 10, where 0 has poor 
+ * quality and 10 has very high quality.
+ */
+int speex_resampler_set_quality(SpeexResamplerState *st, 
+                                 int quality);
+
+/** Get the conversion quality.
+ * @param st Resampler state
+ * @param quality Resampling quality between 0 and 10, where 0 has poor 
+ * quality and 10 has very high quality.
+ */
+void speex_resampler_get_quality(SpeexResamplerState *st, 
+                                 int *quality);
+
+/** Set (change) the input stride.
+ * @param st Resampler state
+ * @param stride Input stride
+ */
+void speex_resampler_set_input_stride(SpeexResamplerState *st, 
+                                      spx_uint32_t stride);
+
+/** Get the input stride.
+ * @param st Resampler state
+ * @param stride Input stride copied
+ */
+void speex_resampler_get_input_stride(SpeexResamplerState *st, 
+                                      spx_uint32_t *stride);
+
+/** Set (change) the output stride.
+ * @param st Resampler state
+ * @param stride Output stride
+ */
+void speex_resampler_set_output_stride(SpeexResamplerState *st, 
+                                      spx_uint32_t stride);
+
+/** Get the output stride.
+ * @param st Resampler state copied
+ * @param stride Output stride
+ */
+void speex_resampler_get_output_stride(SpeexResamplerState *st, 
+                                      spx_uint32_t *stride);
+
+/** Get the latency introduced by the resampler measured in input samples.
+ * @param st Resampler state
+ */
+int speex_resampler_get_input_latency(SpeexResamplerState *st);
+
+/** Get the latency introduced by the resampler measured in output samples.
+ * @param st Resampler state
+ */
+int speex_resampler_get_output_latency(SpeexResamplerState *st);
+
+/** Get the length of the filter in input samples.
+ * @param st Resampler state
+ */
+int speex_resampler_get_filt_len(SpeexResamplerState *st);
+
+/** Make sure that the first samples to go out of the resamplers don't have 
+ * leading zeros. This is only useful before starting to use a newly created 
+ * resampler. It is recommended to use that when resampling an audio file, as
+ * it will generate a file with the same length. For real-time processing,
+ * it is probably easier not to use this call (so that the output duration
+ * is the same for the first frame).
+ * @param st Resampler state
+ */
+int speex_resampler_skip_zeros(SpeexResamplerState *st);
+
+/** Reset a resampler so a new (unrelated) stream can be processed.
+ * @param st Resampler state
+ */
+int speex_resampler_reset_mem(SpeexResamplerState *st);
+
+/** Returns the English meaning for an error code
+ * @param err Error code
+ * @return English string
+ */
+const char *speex_resampler_strerror(int err);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/gst/audioresample/speex_resampler_double.c b/gst/audioresample/speex_resampler_double.c
new file mode 100644
index 0000000..ef2503d
--- /dev/null
+++ b/gst/audioresample/speex_resampler_double.c
@@ -0,0 +1,26 @@
+/* GStreamer
+ * Copyright (C) 2007-2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define _USE_SSE2
+#define FLOATING_POINT
+#define DOUBLE_PRECISION
+#define OUTSIDE_SPEEX
+#define RANDOM_PREFIX resample_double
+
+#include "resample.c"
diff --git a/gst/audioresample/speex_resampler_float.c b/gst/audioresample/speex_resampler_float.c
new file mode 100644
index 0000000..ef3df15
--- /dev/null
+++ b/gst/audioresample/speex_resampler_float.c
@@ -0,0 +1,26 @@
+/* GStreamer
+ * Copyright (C) 2007-2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define _USE_SSE
+#define _USE_SSE2
+#define FLOATING_POINT
+#define OUTSIDE_SPEEX
+#define RANDOM_PREFIX resample_float
+
+#include "resample.c"
diff --git a/gst/audioresample/speex_resampler_int.c b/gst/audioresample/speex_resampler_int.c
new file mode 100644
index 0000000..6b85860
--- /dev/null
+++ b/gst/audioresample/speex_resampler_int.c
@@ -0,0 +1,24 @@
+/* GStreamer
+ * Copyright (C) 2007-2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define FIXED_POINT 1
+#define OUTSIDE_SPEEX 1
+#define RANDOM_PREFIX resample_int
+
+#include "resample.c"
diff --git a/gst/audioresample/speex_resampler_wrapper.h b/gst/audioresample/speex_resampler_wrapper.h
new file mode 100644
index 0000000..08a82bc
--- /dev/null
+++ b/gst/audioresample/speex_resampler_wrapper.h
@@ -0,0 +1,168 @@
+/* GStreamer
+ * Copyright (C) 2007-2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SPEEX_RESAMPLER_WRAPPER_H__
+#define __SPEEX_RESAMPLER_WRAPPER_H__
+
+#define SPEEX_RESAMPLER_QUALITY_MAX 10
+#define SPEEX_RESAMPLER_QUALITY_MIN 0
+#define SPEEX_RESAMPLER_QUALITY_DEFAULT 4
+#define SPEEX_RESAMPLER_QUALITY_VOIP 3
+#define SPEEX_RESAMPLER_QUALITY_DESKTOP 5
+
+enum
+{
+  RESAMPLER_ERR_SUCCESS = 0,
+  RESAMPLER_ERR_ALLOC_FAILED = 1,
+  RESAMPLER_ERR_BAD_STATE = 2,
+  RESAMPLER_ERR_INVALID_ARG = 3,
+  RESAMPLER_ERR_PTR_OVERLAP = 4,
+
+  RESAMPLER_ERR_MAX_ERROR
+};
+
+typedef struct SpeexResamplerState_ SpeexResamplerState;
+
+typedef struct {
+  SpeexResamplerState *(*init) (guint32 nb_channels,
+    guint32 in_rate, guint32 out_rate, gint quality, gint * err);
+  void (*destroy) (SpeexResamplerState * st);
+  int (*process) (SpeexResamplerState *
+    st, const guint8 * in, guint32 * in_len, guint8 * out, guint32 * out_len);
+  int (*set_rate) (SpeexResamplerState * st,
+    guint32 in_rate, guint32 out_rate);
+  void (*get_rate) (SpeexResamplerState * st,
+    guint32 * in_rate, guint32 * out_rate);
+  void (*get_ratio) (SpeexResamplerState * st,
+    guint32 * ratio_num, guint32 * ratio_den);
+  int (*get_input_latency) (SpeexResamplerState * st);
+  int (*get_filt_len) (SpeexResamplerState * st);
+  int (*set_quality) (SpeexResamplerState * st, gint quality);
+  int (*reset_mem) (SpeexResamplerState * st);
+  int (*skip_zeros) (SpeexResamplerState * st);
+  const char * (*strerror) (gint err);
+  unsigned int width;
+} SpeexResampleFuncs;
+
+SpeexResamplerState *resample_float_resampler_init (guint32 nb_channels,
+    guint32 in_rate, guint32 out_rate, gint quality, gint * err);
+void resample_float_resampler_destroy (SpeexResamplerState * st);
+int resample_float_resampler_process_interleaved_float (SpeexResamplerState *
+    st, const guint8 * in, guint32 * in_len, guint8 * out, guint32 * out_len);
+int resample_float_resampler_set_rate (SpeexResamplerState * st,
+    guint32 in_rate, guint32 out_rate);
+void resample_float_resampler_get_rate (SpeexResamplerState * st,
+    guint32 * in_rate, guint32 * out_rate);
+void resample_float_resampler_get_ratio (SpeexResamplerState * st,
+    guint32 * ratio_num, guint32 * ratio_den);
+int resample_float_resampler_get_input_latency (SpeexResamplerState * st);
+int resample_float_resampler_get_filt_len (SpeexResamplerState * st);
+int resample_float_resampler_set_quality (SpeexResamplerState * st, gint quality);
+int resample_float_resampler_reset_mem (SpeexResamplerState * st);
+int resample_float_resampler_skip_zeros (SpeexResamplerState * st);
+const char * resample_float_resampler_strerror (gint err);
+
+static const SpeexResampleFuncs float_funcs =
+{
+  resample_float_resampler_init,
+  resample_float_resampler_destroy,
+  resample_float_resampler_process_interleaved_float,
+  resample_float_resampler_set_rate,
+  resample_float_resampler_get_rate,
+  resample_float_resampler_get_ratio,
+  resample_float_resampler_get_input_latency,
+  resample_float_resampler_get_filt_len,
+  resample_float_resampler_set_quality,
+  resample_float_resampler_reset_mem,
+  resample_float_resampler_skip_zeros,
+  resample_float_resampler_strerror,
+  32
+};
+
+SpeexResamplerState *resample_double_resampler_init (guint32 nb_channels,
+    guint32 in_rate, guint32 out_rate, gint quality, gint * err);
+void resample_double_resampler_destroy (SpeexResamplerState * st);
+int resample_double_resampler_process_interleaved_float (SpeexResamplerState *
+    st, const guint8 * in, guint32 * in_len, guint8 * out, guint32 * out_len);
+int resample_double_resampler_set_rate (SpeexResamplerState * st,
+    guint32 in_rate, guint32 out_rate);
+void resample_double_resampler_get_rate (SpeexResamplerState * st,
+    guint32 * in_rate, guint32 * out_rate);
+void resample_double_resampler_get_ratio (SpeexResamplerState * st,
+    guint32 * ratio_num, guint32 * ratio_den);
+int resample_double_resampler_get_input_latency (SpeexResamplerState * st);
+int resample_double_resampler_get_filt_len (SpeexResamplerState * st);
+int resample_double_resampler_set_quality (SpeexResamplerState * st, gint quality);
+int resample_double_resampler_reset_mem (SpeexResamplerState * st);
+int resample_double_resampler_skip_zeros (SpeexResamplerState * st);
+const char * resample_double_resampler_strerror (gint err);
+
+static const SpeexResampleFuncs double_funcs =
+{
+  resample_double_resampler_init,
+  resample_double_resampler_destroy,
+  resample_double_resampler_process_interleaved_float,
+  resample_double_resampler_set_rate,
+  resample_double_resampler_get_rate,
+  resample_double_resampler_get_ratio,
+  resample_double_resampler_get_input_latency,
+  resample_double_resampler_get_filt_len,
+  resample_double_resampler_set_quality,
+  resample_double_resampler_reset_mem,
+  resample_double_resampler_skip_zeros,
+  resample_double_resampler_strerror,
+  64
+};
+
+SpeexResamplerState *resample_int_resampler_init (guint32 nb_channels,
+    guint32 in_rate, guint32 out_rate, gint quality, gint * err);
+void resample_int_resampler_destroy (SpeexResamplerState * st);
+int resample_int_resampler_process_interleaved_int (SpeexResamplerState *
+    st, const guint8 * in, guint32 * in_len, guint8 * out, guint32 * out_len);
+int resample_int_resampler_set_rate (SpeexResamplerState * st,
+    guint32 in_rate, guint32 out_rate);
+void resample_int_resampler_get_rate (SpeexResamplerState * st,
+    guint32 * in_rate, guint32 * out_rate);
+void resample_int_resampler_get_ratio (SpeexResamplerState * st,
+    guint32 * ratio_num, guint32 * ratio_den);
+int resample_int_resampler_get_input_latency (SpeexResamplerState * st);
+int resample_int_resampler_get_filt_len (SpeexResamplerState * st);
+int resample_int_resampler_set_quality (SpeexResamplerState * st, gint quality);
+int resample_int_resampler_reset_mem (SpeexResamplerState * st);
+int resample_int_resampler_skip_zeros (SpeexResamplerState * st);
+const char * resample_int_resampler_strerror (gint err);
+
+static const SpeexResampleFuncs int_funcs =
+{
+  resample_int_resampler_init,
+  resample_int_resampler_destroy,
+  resample_int_resampler_process_interleaved_int,
+  resample_int_resampler_set_rate,
+  resample_int_resampler_get_rate,
+  resample_int_resampler_get_ratio,
+  resample_int_resampler_get_input_latency,
+  resample_int_resampler_get_filt_len,
+  resample_int_resampler_set_quality,
+  resample_int_resampler_reset_mem,
+  resample_int_resampler_skip_zeros,
+  resample_int_resampler_strerror,
+  16
+};
+
+#endif /* __SPEEX_RESAMPLER_WRAPPER_H__ */
diff --git a/gst/audiotestsrc/Makefile.am b/gst/audiotestsrc/Makefile.am
new file mode 100644
index 0000000..c00f9ff
--- /dev/null
+++ b/gst/audiotestsrc/Makefile.am
@@ -0,0 +1,25 @@
+plugin_LTLIBRARIES = libgstaudiotestsrc.la
+
+libgstaudiotestsrc_la_SOURCES = gstaudiotestsrc.c
+libgstaudiotestsrc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(GST_CONTROLLER_CFLAGS)
+libgstaudiotestsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudiotestsrc_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(GST_CONTROLLER_LIBS) $(LIBM)
+libgstaudiotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstaudiotestsrc.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \
+	           $(libgstaudiotestsrc_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/audiotestsrc/Makefile.in b/gst/audiotestsrc/Makefile.in
new file mode 100644
index 0000000..ac8387f
--- /dev/null
+++ b/gst/audiotestsrc/Makefile.in
@@ -0,0 +1,774 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/audiotestsrc
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstaudiotestsrc_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstaudiotestsrc_la_OBJECTS =  \
+	libgstaudiotestsrc_la-gstaudiotestsrc.lo
+libgstaudiotestsrc_la_OBJECTS = $(am_libgstaudiotestsrc_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstaudiotestsrc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstaudiotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstaudiotestsrc_la_CFLAGS) $(CFLAGS) \
+	$(libgstaudiotestsrc_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstaudiotestsrc_la_SOURCES)
+DIST_SOURCES = $(libgstaudiotestsrc_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstaudiotestsrc.la
+libgstaudiotestsrc_la_SOURCES = gstaudiotestsrc.c
+libgstaudiotestsrc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(GST_CONTROLLER_CFLAGS)
+libgstaudiotestsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstaudiotestsrc_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(GST_CONTROLLER_LIBS) $(LIBM)
+
+libgstaudiotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstaudiotestsrc.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstaudiotestsrc.la: $(libgstaudiotestsrc_la_OBJECTS) $(libgstaudiotestsrc_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstaudiotestsrc_la_LINK) -rpath $(plugindir) $(libgstaudiotestsrc_la_OBJECTS) $(libgstaudiotestsrc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudiotestsrc_la-gstaudiotestsrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstaudiotestsrc_la-gstaudiotestsrc.lo: gstaudiotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiotestsrc_la_CFLAGS) $(CFLAGS) -MT libgstaudiotestsrc_la-gstaudiotestsrc.lo -MD -MP -MF $(DEPDIR)/libgstaudiotestsrc_la-gstaudiotestsrc.Tpo -c -o libgstaudiotestsrc_la-gstaudiotestsrc.lo `test -f 'gstaudiotestsrc.c' || echo '$(srcdir)/'`gstaudiotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudiotestsrc_la-gstaudiotestsrc.Tpo $(DEPDIR)/libgstaudiotestsrc_la-gstaudiotestsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstaudiotestsrc.c' object='libgstaudiotestsrc_la-gstaudiotestsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudiotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudiotestsrc_la_CFLAGS) $(CFLAGS) -c -o libgstaudiotestsrc_la-gstaudiotestsrc.lo `test -f 'gstaudiotestsrc.c' || echo '$(srcdir)/'`gstaudiotestsrc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \
+	 -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \
+	           $(libgstaudiotestsrc_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c
new file mode 100644
index 0000000..01b7d8a
--- /dev/null
+++ b/gst/audiotestsrc/gstaudiotestsrc.c
@@ -0,0 +1,1297 @@
+/* GStreamer
+ * Copyright (C) 2005 Stefan Kost <ensonic@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION:element-audiotestsrc
+ *
+ * AudioTestSrc can be used to generate basic audio signals. It support several
+ * different waveforms and allows to set the base frequency and volume.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch audiotestsrc ! audioconvert ! alsasink
+ * ]| This pipeline produces a sine with default frequency, 440 Hz, and the
+ * default volume, 0.8 (relative to a maximum 1.0).
+ * |[
+ * gst-launch audiotestsrc wave=2 freq=200 ! audioconvert ! tee name=t ! queue ! alsasink t. ! queue ! libvisual_lv_scope ! videoconvert ! xvimagesink
+ * ]| In this example a saw wave is generated. The wave is shown using a
+ * scope visualizer from libvisual, allowing you to visually verify that
+ * the saw wave is correct.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gst/controller/gstcontroller.h>
+
+#include "gstaudiotestsrc.h"
+
+
+#define M_PI_M2 ( G_PI + G_PI )
+
+GST_DEBUG_CATEGORY_STATIC (audio_test_src_debug);
+#define GST_CAT_DEFAULT audio_test_src_debug
+
+#define DEFAULT_SAMPLES_PER_BUFFER   1024
+#define DEFAULT_WAVE                 GST_AUDIO_TEST_SRC_WAVE_SINE
+#define DEFAULT_FREQ                 440.0
+#define DEFAULT_VOLUME               0.8
+#define DEFAULT_IS_LIVE              FALSE
+#define DEFAULT_TIMESTAMP_OFFSET     G_GINT64_CONSTANT (0)
+#define DEFAULT_CAN_ACTIVATE_PUSH    TRUE
+#define DEFAULT_CAN_ACTIVATE_PULL    FALSE
+
+enum
+{
+  PROP_0,
+  PROP_SAMPLES_PER_BUFFER,
+  PROP_WAVE,
+  PROP_FREQ,
+  PROP_VOLUME,
+  PROP_IS_LIVE,
+  PROP_TIMESTAMP_OFFSET,
+  PROP_CAN_ACTIVATE_PUSH,
+  PROP_CAN_ACTIVATE_PULL,
+  PROP_LAST
+};
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define FORMAT_STR "{ S16LE, S32LE, F32LE, F64LE }"
+#define DEFAULT_FORMAT_STR "S16LE"
+#else
+#define FORMAT_STR "{ S16BE, S32BE, F32BE, F64BE }"
+#define DEFAULT_FORMAT_STR "S16BE"
+#endif
+
+static GstStaticPadTemplate gst_audio_test_src_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " FORMAT_STR ", "
+        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]")
+    );
+
+#define gst_audio_test_src_parent_class parent_class
+G_DEFINE_TYPE (GstAudioTestSrc, gst_audio_test_src, GST_TYPE_BASE_SRC);
+
+#define GST_TYPE_AUDIO_TEST_SRC_WAVE (gst_audiostestsrc_wave_get_type())
+static GType
+gst_audiostestsrc_wave_get_type (void)
+{
+  static GType audiostestsrc_wave_type = 0;
+  static const GEnumValue audiostestsrc_waves[] = {
+    {GST_AUDIO_TEST_SRC_WAVE_SINE, "Sine", "sine"},
+    {GST_AUDIO_TEST_SRC_WAVE_SQUARE, "Square", "square"},
+    {GST_AUDIO_TEST_SRC_WAVE_SAW, "Saw", "saw"},
+    {GST_AUDIO_TEST_SRC_WAVE_TRIANGLE, "Triangle", "triangle"},
+    {GST_AUDIO_TEST_SRC_WAVE_SILENCE, "Silence", "silence"},
+    {GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE, "White uniform noise", "white-noise"},
+    {GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE, "Pink noise", "pink-noise"},
+    {GST_AUDIO_TEST_SRC_WAVE_SINE_TAB, "Sine table", "sine-table"},
+    {GST_AUDIO_TEST_SRC_WAVE_TICKS, "Periodic Ticks", "ticks"},
+    {GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE, "White Gaussian noise",
+        "gaussian-noise"},
+    {GST_AUDIO_TEST_SRC_WAVE_RED_NOISE, "Red (brownian) noise", "red-noise"},
+    {GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE, "Blue noise", "blue-noise"},
+    {GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE, "Violet noise", "violet-noise"},
+    {0, NULL, NULL},
+  };
+
+  if (G_UNLIKELY (audiostestsrc_wave_type == 0)) {
+    audiostestsrc_wave_type = g_enum_register_static ("GstAudioTestSrcWave",
+        audiostestsrc_waves);
+  }
+  return audiostestsrc_wave_type;
+}
+
+static void gst_audio_test_src_finalize (GObject * object);
+
+static void gst_audio_test_src_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_audio_test_src_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static gboolean gst_audio_test_src_setcaps (GstBaseSrc * basesrc,
+    GstCaps * caps);
+static void gst_audio_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps);
+
+static gboolean gst_audio_test_src_is_seekable (GstBaseSrc * basesrc);
+static gboolean gst_audio_test_src_do_seek (GstBaseSrc * basesrc,
+    GstSegment * segment);
+static gboolean gst_audio_test_src_query (GstBaseSrc * basesrc,
+    GstQuery * query);
+
+static void gst_audio_test_src_change_wave (GstAudioTestSrc * src);
+
+static void gst_audio_test_src_get_times (GstBaseSrc * basesrc,
+    GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
+static gboolean gst_audio_test_src_start (GstBaseSrc * basesrc);
+static gboolean gst_audio_test_src_stop (GstBaseSrc * basesrc);
+static GstFlowReturn gst_audio_test_src_fill (GstBaseSrc * basesrc,
+    guint64 offset, guint length, GstBuffer * buffer);
+
+static void
+gst_audio_test_src_class_init (GstAudioTestSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+
+  gobject_class->set_property = gst_audio_test_src_set_property;
+  gobject_class->get_property = gst_audio_test_src_get_property;
+  gobject_class->finalize = gst_audio_test_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_SAMPLES_PER_BUFFER,
+      g_param_spec_int ("samplesperbuffer", "Samples per buffer",
+          "Number of samples in each outgoing buffer",
+          1, G_MAXINT, DEFAULT_SAMPLES_PER_BUFFER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_WAVE,
+      g_param_spec_enum ("wave", "Waveform", "Oscillator waveform",
+          GST_TYPE_AUDIO_TEST_SRC_WAVE, GST_AUDIO_TEST_SRC_WAVE_SINE,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_FREQ,
+      g_param_spec_double ("freq", "Frequency", "Frequency of test signal",
+          0.0, 20000.0, DEFAULT_FREQ,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_VOLUME,
+      g_param_spec_double ("volume", "Volume", "Volume of test signal", 0.0,
+          1.0, DEFAULT_VOLUME,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_IS_LIVE,
+      g_param_spec_boolean ("is-live", "Is Live",
+          "Whether to act as a live source", DEFAULT_IS_LIVE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass),
+      PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset",
+          "Timestamp offset",
+          "An offset added to timestamps set on buffers (in ns)", G_MININT64,
+          G_MAXINT64, DEFAULT_TIMESTAMP_OFFSET,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PUSH,
+      g_param_spec_boolean ("can-activate-push", "Can activate push",
+          "Can activate in push mode", DEFAULT_CAN_ACTIVATE_PUSH,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL,
+      g_param_spec_boolean ("can-activate-pull", "Can activate pull",
+          "Can activate in pull mode", DEFAULT_CAN_ACTIVATE_PULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_audio_test_src_src_template));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Audio test source", "Source/Audio",
+      "Creates audio test signals of given frequency and volume",
+      "Stefan Kost <ensonic@users.sf.net>");
+
+  gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_test_src_setcaps);
+  gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_audio_test_src_fixate);
+  gstbasesrc_class->is_seekable =
+      GST_DEBUG_FUNCPTR (gst_audio_test_src_is_seekable);
+  gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_audio_test_src_do_seek);
+  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_audio_test_src_query);
+  gstbasesrc_class->get_times =
+      GST_DEBUG_FUNCPTR (gst_audio_test_src_get_times);
+  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_audio_test_src_start);
+  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_audio_test_src_stop);
+  gstbasesrc_class->fill = GST_DEBUG_FUNCPTR (gst_audio_test_src_fill);
+}
+
+static void
+gst_audio_test_src_init (GstAudioTestSrc * src)
+{
+  src->volume = DEFAULT_VOLUME;
+  src->freq = DEFAULT_FREQ;
+
+  /* we operate in time */
+  gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
+  gst_base_src_set_live (GST_BASE_SRC (src), DEFAULT_IS_LIVE);
+
+  src->samples_per_buffer = DEFAULT_SAMPLES_PER_BUFFER;
+  src->generate_samples_per_buffer = src->samples_per_buffer;
+  src->timestamp_offset = DEFAULT_TIMESTAMP_OFFSET;
+  src->can_activate_pull = DEFAULT_CAN_ACTIVATE_PULL;
+
+  src->gen = NULL;
+
+  src->wave = DEFAULT_WAVE;
+  gst_base_src_set_blocksize (GST_BASE_SRC (src), -1);
+}
+
+static void
+gst_audio_test_src_finalize (GObject * object)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
+
+  if (src->gen)
+    g_rand_free (src->gen);
+  src->gen = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_audio_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (bsrc);
+  GstStructure *structure;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  GST_DEBUG_OBJECT (src, "fixating samplerate to %d", GST_AUDIO_DEF_RATE);
+
+  gst_structure_fixate_field_nearest_int (structure, "rate",
+      GST_AUDIO_DEF_RATE);
+
+  gst_structure_fixate_field_string (structure, "format", DEFAULT_FORMAT_STR);
+
+  /* fixate to mono unless downstream requires stereo, for backwards compat */
+  gst_structure_fixate_field_nearest_int (structure, "channels", 1);
+
+  GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
+}
+
+static gboolean
+gst_audio_test_src_setcaps (GstBaseSrc * basesrc, GstCaps * caps)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
+  GstAudioInfo info;
+
+  if (!gst_audio_info_from_caps (&info, caps))
+    goto invalid_caps;
+
+  GST_DEBUG_OBJECT (src, "negotiated to caps %" GST_PTR_FORMAT, caps);
+
+  src->info = info;
+
+  gst_audio_test_src_change_wave (src);
+
+  return TRUE;
+
+  /* ERROR */
+invalid_caps:
+  {
+    GST_ERROR_OBJECT (basesrc, "received invalid caps");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_audio_test_src_query (GstBaseSrc * basesrc, GstQuery * query)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
+  gboolean res = FALSE;
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+
+      if (!gst_audio_info_convert (&src->info, src_fmt, src_val, dest_fmt,
+              &dest_val))
+        goto error;
+
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_SCHEDULING:
+    {
+      /* if we can operate in pull mode */
+      gst_query_set_scheduling (query, src->can_activate_pull, TRUE, FALSE, 1,
+          -1, 1);
+      res = TRUE;
+      break;
+    }
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
+      break;
+  }
+
+  return res;
+  /* ERROR */
+error:
+  {
+    GST_DEBUG_OBJECT (src, "query failed");
+    return FALSE;
+  }
+}
+
+#define DEFINE_SINE(type,scale) \
+static void \
+gst_audio_test_src_create_sine_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble step, amp; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
+  amp = src->volume * scale; \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    for (c = 0; c < channels; ++c) { \
+      samples[i++] = (g##type) (sin (src->accumulator) * amp); \
+    } \
+  } \
+}
+
+DEFINE_SINE (int16, 32767.0);
+DEFINE_SINE (int32, 2147483647.0);
+DEFINE_SINE (float, 1.0);
+DEFINE_SINE (double, 1.0);
+
+static const ProcessFunc sine_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_sine_int16,
+  (ProcessFunc) gst_audio_test_src_create_sine_int32,
+  (ProcessFunc) gst_audio_test_src_create_sine_float,
+  (ProcessFunc) gst_audio_test_src_create_sine_double
+};
+
+#define DEFINE_SQUARE(type,scale) \
+static void \
+gst_audio_test_src_create_square_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble step, amp; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
+  amp = src->volume * scale; \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    for (c = 0; c < channels; ++c) { \
+      samples[i++] = (g##type) ((src->accumulator < G_PI) ? amp : -amp); \
+    } \
+  } \
+}
+
+DEFINE_SQUARE (int16, 32767.0);
+DEFINE_SQUARE (int32, 2147483647.0);
+DEFINE_SQUARE (float, 1.0);
+DEFINE_SQUARE (double, 1.0);
+
+static const ProcessFunc square_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_square_int16,
+  (ProcessFunc) gst_audio_test_src_create_square_int32,
+  (ProcessFunc) gst_audio_test_src_create_square_float,
+  (ProcessFunc) gst_audio_test_src_create_square_double
+};
+
+#define DEFINE_SAW(type,scale) \
+static void \
+gst_audio_test_src_create_saw_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble step, amp; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
+  amp = (src->volume * scale) / G_PI; \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    if (src->accumulator < G_PI) { \
+      for (c = 0; c < channels; ++c) \
+        samples[i++] = (g##type) (src->accumulator * amp); \
+    } else { \
+      for (c = 0; c < channels; ++c) \
+        samples[i++] = (g##type) ((M_PI_M2 - src->accumulator) * -amp); \
+    } \
+  } \
+}
+
+DEFINE_SAW (int16, 32767.0);
+DEFINE_SAW (int32, 2147483647.0);
+DEFINE_SAW (float, 1.0);
+DEFINE_SAW (double, 1.0);
+
+static const ProcessFunc saw_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_saw_int16,
+  (ProcessFunc) gst_audio_test_src_create_saw_int32,
+  (ProcessFunc) gst_audio_test_src_create_saw_float,
+  (ProcessFunc) gst_audio_test_src_create_saw_double
+};
+
+#define DEFINE_TRIANGLE(type,scale) \
+static void \
+gst_audio_test_src_create_triangle_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble step, amp; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
+  amp = (src->volume * scale) / G_PI_2; \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    if (src->accumulator < (G_PI_2)) { \
+      for (c = 0; c < channels; ++c) \
+        samples[i++] = (g##type) (src->accumulator * amp); \
+    } else if (src->accumulator < (G_PI * 1.5)) { \
+      for (c = 0; c < channels; ++c) \
+        samples[i++] = (g##type) ((src->accumulator - G_PI) * -amp); \
+    } else { \
+      for (c = 0; c < channels; ++c) \
+        samples[i++] = (g##type) ((M_PI_M2 - src->accumulator) * -amp); \
+    } \
+  } \
+}
+
+DEFINE_TRIANGLE (int16, 32767.0);
+DEFINE_TRIANGLE (int32, 2147483647.0);
+DEFINE_TRIANGLE (float, 1.0);
+DEFINE_TRIANGLE (double, 1.0);
+
+static const ProcessFunc triangle_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_triangle_int16,
+  (ProcessFunc) gst_audio_test_src_create_triangle_int32,
+  (ProcessFunc) gst_audio_test_src_create_triangle_float,
+  (ProcessFunc) gst_audio_test_src_create_triangle_double
+};
+
+#define DEFINE_SILENCE(type) \
+static void \
+gst_audio_test_src_create_silence_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  memset (samples, 0, src->generate_samples_per_buffer * sizeof (g##type) * src->info.channels); \
+}
+
+DEFINE_SILENCE (int16);
+DEFINE_SILENCE (int32);
+DEFINE_SILENCE (float);
+DEFINE_SILENCE (double);
+
+static const ProcessFunc silence_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_silence_int16,
+  (ProcessFunc) gst_audio_test_src_create_silence_int32,
+  (ProcessFunc) gst_audio_test_src_create_silence_float,
+  (ProcessFunc) gst_audio_test_src_create_silence_double
+};
+
+#define DEFINE_WHITE_NOISE(type,scale) \
+static void \
+gst_audio_test_src_create_white_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c; \
+  gdouble amp = (src->volume * scale); \
+  gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    for (c = 0; c < channels; ++c) \
+      samples[i++] = (g##type) (amp * g_rand_double_range (src->gen, -1.0, 1.0)); \
+  } \
+}
+
+DEFINE_WHITE_NOISE (int16, 32767.0);
+DEFINE_WHITE_NOISE (int32, 2147483647.0);
+DEFINE_WHITE_NOISE (float, 1.0);
+DEFINE_WHITE_NOISE (double, 1.0);
+
+static const ProcessFunc white_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_white_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_white_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_white_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_white_noise_double
+};
+
+/* pink noise calculation is based on
+ * http://www.firstpr.com.au/dsp/pink-noise/phil_burk_19990905_patest_pink.c
+ * which has been released under public domain
+ * Many thanks Phil!
+ */
+static void
+gst_audio_test_src_init_pink_noise (GstAudioTestSrc * src)
+{
+  gint i;
+  gint num_rows = 12;           /* arbitrary: 1 .. PINK_MAX_RANDOM_ROWS */
+  glong pmax;
+
+  src->pink.index = 0;
+  src->pink.index_mask = (1 << num_rows) - 1;
+  /* calculate maximum possible signed random value.
+   * Extra 1 for white noise always added. */
+  pmax = (num_rows + 1) * (1 << (PINK_RANDOM_BITS - 1));
+  src->pink.scalar = 1.0f / pmax;
+  /* Initialize rows. */
+  for (i = 0; i < num_rows; i++)
+    src->pink.rows[i] = 0;
+  src->pink.running_sum = 0;
+}
+
+/* Generate Pink noise values between -1.0 and +1.0 */
+static gdouble
+gst_audio_test_src_generate_pink_noise_value (GstAudioTestSrc * src)
+{
+  GstPinkNoise *pink = &src->pink;
+  glong new_random;
+  glong sum;
+
+  /* Increment and mask index. */
+  pink->index = (pink->index + 1) & pink->index_mask;
+
+  /* If index is zero, don't update any random values. */
+  if (pink->index != 0) {
+    /* Determine how many trailing zeros in PinkIndex. */
+    /* This algorithm will hang if n==0 so test first. */
+    gint num_zeros = 0;
+    gint n = pink->index;
+
+    while ((n & 1) == 0) {
+      n = n >> 1;
+      num_zeros++;
+    }
+
+    /* Replace the indexed ROWS random value.
+     * Subtract and add back to RunningSum instead of adding all the random
+     * values together. Only one changes each time.
+     */
+    pink->running_sum -= pink->rows[num_zeros];
+    new_random = 32768.0 - (65536.0 * (gulong) g_rand_int (src->gen)
+        / (G_MAXUINT32 + 1.0));
+    pink->running_sum += new_random;
+    pink->rows[num_zeros] = new_random;
+  }
+
+  /* Add extra white noise value. */
+  new_random = 32768.0 - (65536.0 * (gulong) g_rand_int (src->gen)
+      / (G_MAXUINT32 + 1.0));
+  sum = pink->running_sum + new_random;
+
+  /* Scale to range of -1.0 to 0.9999. */
+  return (pink->scalar * sum);
+}
+
+#define DEFINE_PINK(type, scale) \
+static void \
+gst_audio_test_src_create_pink_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble amp; \
+  \
+  amp = src->volume * scale; \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    for (c = 0; c < channels; ++c) { \
+      samples[i++] = \
+        (g##type) (gst_audio_test_src_generate_pink_noise_value (src) * \
+        amp); \
+    } \
+  } \
+}
+
+DEFINE_PINK (int16, 32767.0);
+DEFINE_PINK (int32, 2147483647.0);
+DEFINE_PINK (float, 1.0);
+DEFINE_PINK (double, 1.0);
+
+static const ProcessFunc pink_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_pink_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_pink_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_pink_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_pink_noise_double
+};
+
+static void
+gst_audio_test_src_init_sine_table (GstAudioTestSrc * src)
+{
+  gint i;
+  gdouble ang = 0.0;
+  gdouble step = M_PI_M2 / 1024.0;
+  gdouble amp = src->volume;
+
+  for (i = 0; i < 1024; i++) {
+    src->wave_table[i] = sin (ang) * amp;
+    ang += step;
+  }
+}
+
+#define DEFINE_SINE_TABLE(type,scale) \
+static void \
+gst_audio_test_src_create_sine_table_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels; \
+  gdouble step, scl; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  step = M_PI_M2 * src->freq / GST_AUDIO_INFO_RATE (&src->info); \
+  scl = 1024.0 / M_PI_M2; \
+  \
+  i = 0; \
+  while (i < (src->generate_samples_per_buffer * channels)) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    for (c = 0; c < channels; ++c) \
+      samples[i++] = (g##type) scale * src->wave_table[(gint) (src->accumulator * scl)]; \
+  } \
+}
+
+DEFINE_SINE_TABLE (int16, 32767.0);
+DEFINE_SINE_TABLE (int32, 2147483647.0);
+DEFINE_SINE_TABLE (float, 1.0);
+DEFINE_SINE_TABLE (double, 1.0);
+
+static const ProcessFunc sine_table_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_sine_table_int16,
+  (ProcessFunc) gst_audio_test_src_create_sine_table_int32,
+  (ProcessFunc) gst_audio_test_src_create_sine_table_float,
+  (ProcessFunc) gst_audio_test_src_create_sine_table_double
+};
+
+#define DEFINE_TICKS(type,scale) \
+static void \
+gst_audio_test_src_create_tick_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c, channels, samplerate; \
+  gdouble step, scl; \
+  \
+  channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  samplerate = GST_AUDIO_INFO_RATE (&src->info); \
+  step = M_PI_M2 * src->freq / samplerate; \
+  scl = 1024.0 / M_PI_M2; \
+  \
+  for (i = 0; i < src->generate_samples_per_buffer; i++) { \
+    src->accumulator += step; \
+    if (src->accumulator >= M_PI_M2) \
+      src->accumulator -= M_PI_M2; \
+    \
+    if ((src->next_sample + i)%samplerate < 1600) { \
+      for (c = 0; c < channels; ++c) \
+        samples[(i * channels) + c] = (g##type) scale * src->wave_table[(gint) (src->accumulator * scl)]; \
+    } else { \
+      for (c = 0; c < channels; ++c) \
+        samples[(i * channels) + c] = 0; \
+    } \
+  } \
+}
+
+DEFINE_TICKS (int16, 32767.0);
+DEFINE_TICKS (int32, 2147483647.0);
+DEFINE_TICKS (float, 1.0);
+DEFINE_TICKS (double, 1.0);
+
+static const ProcessFunc tick_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_tick_int16,
+  (ProcessFunc) gst_audio_test_src_create_tick_int32,
+  (ProcessFunc) gst_audio_test_src_create_tick_float,
+  (ProcessFunc) gst_audio_test_src_create_tick_double
+};
+
+/* Gaussian white noise using Box-Muller algorithm.  unit variance
+ * normally-distributed random numbers are generated in pairs as the real
+ * and imaginary parts of a compex random variable with
+ * uniformly-distributed argument and \chi^{2}-distributed modulus.
+ */
+
+#define DEFINE_GAUSSIAN_WHITE_NOISE(type,scale) \
+static void \
+gst_audio_test_src_create_gaussian_white_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c; \
+  gdouble amp = (src->volume * scale); \
+  gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  for (i = 0; i < src->generate_samples_per_buffer * channels; ) { \
+    for (c = 0; c < channels; ++c) { \
+      gdouble mag = sqrt (-2 * log (1.0 - g_rand_double (src->gen))); \
+      gdouble phs = g_rand_double_range (src->gen, 0.0, M_PI_M2); \
+      \
+      samples[i++] = (g##type) (amp * mag * cos (phs)); \
+      if (++c >= channels) \
+        break; \
+      samples[i++] = (g##type) (amp * mag * sin (phs)); \
+    } \
+  } \
+}
+
+DEFINE_GAUSSIAN_WHITE_NOISE (int16, 32767.0);
+DEFINE_GAUSSIAN_WHITE_NOISE (int32, 2147483647.0);
+DEFINE_GAUSSIAN_WHITE_NOISE (float, 1.0);
+DEFINE_GAUSSIAN_WHITE_NOISE (double, 1.0);
+
+static const ProcessFunc gaussian_white_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_gaussian_white_noise_double
+};
+
+/* Brownian (Red) Noise: noise where the power density decreases by 6 dB per
+ * octave with increasing frequency
+ *
+ * taken from http://vellocet.com/dsp/noise/VRand.html
+ * by Andrew Simper of Vellocet (andy@vellocet.com)
+ */
+
+#define DEFINE_RED_NOISE(type,scale) \
+static void \
+gst_audio_test_src_create_red_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c; \
+  gdouble amp = (src->volume * scale); \
+  gdouble state = src->red.state; \
+  gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  for (i = 0; i < src->generate_samples_per_buffer * channels; ) { \
+    for (c = 0; c < channels; ++c) { \
+      while (TRUE) { \
+        gdouble  r = g_rand_double_range (src->gen, -1.0, 1.0); \
+        state += r; \
+        if (state<-8.0f || state>8.0f) state -= r; \
+        else break; \
+      } \
+      samples[i++] = (g##type) (amp * state * 0.0625f); /* /16.0 */ \
+    } \
+  } \
+  src->red.state = state; \
+}
+
+DEFINE_RED_NOISE (int16, 32767.0);
+DEFINE_RED_NOISE (int32, 2147483647.0);
+DEFINE_RED_NOISE (float, 1.0);
+DEFINE_RED_NOISE (double, 1.0);
+
+static const ProcessFunc red_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_red_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_red_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_red_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_red_noise_double
+};
+
+/* Blue Noise: apply spectral inversion to pink noise */
+
+#define DEFINE_BLUE_NOISE(type) \
+static void \
+gst_audio_test_src_create_blue_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c; \
+  static gdouble flip=1.0; \
+  gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  gst_audio_test_src_create_pink_noise_##type (src, samples); \
+  for (i = 0; i < src->generate_samples_per_buffer * channels; ) { \
+    for (c = 0; c < channels; ++c) { \
+      samples[i++] *= flip; \
+    } \
+    flip *= -1.0; \
+  } \
+}
+
+DEFINE_BLUE_NOISE (int16);
+DEFINE_BLUE_NOISE (int32);
+DEFINE_BLUE_NOISE (float);
+DEFINE_BLUE_NOISE (double);
+
+static const ProcessFunc blue_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_blue_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_blue_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_blue_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_blue_noise_double
+};
+
+
+/* Violet Noise: apply spectral inversion to red noise */
+
+#define DEFINE_VIOLET_NOISE(type) \
+static void \
+gst_audio_test_src_create_violet_noise_##type (GstAudioTestSrc * src, g##type * samples) \
+{ \
+  gint i, c; \
+  static gdouble flip=1.0; \
+  gint channels = GST_AUDIO_INFO_CHANNELS (&src->info); \
+  \
+  gst_audio_test_src_create_red_noise_##type (src, samples); \
+  for (i = 0; i < src->generate_samples_per_buffer * channels; ) { \
+    for (c = 0; c < channels; ++c) { \
+      samples[i++] *= flip; \
+    } \
+    flip *= -1.0; \
+  } \
+}
+
+DEFINE_VIOLET_NOISE (int16);
+DEFINE_VIOLET_NOISE (int32);
+DEFINE_VIOLET_NOISE (float);
+DEFINE_VIOLET_NOISE (double);
+
+static const ProcessFunc violet_noise_funcs[] = {
+  (ProcessFunc) gst_audio_test_src_create_violet_noise_int16,
+  (ProcessFunc) gst_audio_test_src_create_violet_noise_int32,
+  (ProcessFunc) gst_audio_test_src_create_violet_noise_float,
+  (ProcessFunc) gst_audio_test_src_create_violet_noise_double
+};
+
+
+/*
+ * gst_audio_test_src_change_wave:
+ * Assign function pointer of wave genrator.
+ */
+static void
+gst_audio_test_src_change_wave (GstAudioTestSrc * src)
+{
+  gint idx;
+
+  switch (GST_AUDIO_FORMAT_INFO_FORMAT (src->info.finfo)) {
+    case GST_AUDIO_FORMAT_S16:
+      idx = 0;
+      break;
+    case GST_AUDIO_FORMAT_S32:
+      idx = 1;
+      break;
+    case GST_AUDIO_FORMAT_F32:
+      idx = 2;
+      break;
+    case GST_AUDIO_FORMAT_F64:
+      idx = 3;
+      break;
+    default:
+      src->process = NULL;
+      return;
+  }
+
+  switch (src->wave) {
+    case GST_AUDIO_TEST_SRC_WAVE_SINE:
+      src->process = sine_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_SQUARE:
+      src->process = square_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_SAW:
+      src->process = saw_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_TRIANGLE:
+      src->process = triangle_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_SILENCE:
+      src->process = silence_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      src->process = white_noise_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      gst_audio_test_src_init_pink_noise (src);
+      src->process = pink_noise_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_SINE_TAB:
+      gst_audio_test_src_init_sine_table (src);
+      src->process = sine_table_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_TICKS:
+      gst_audio_test_src_init_sine_table (src);
+      src->process = tick_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      src->process = gaussian_white_noise_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_RED_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      src->red.state = 0.0;
+      src->process = red_noise_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      gst_audio_test_src_init_pink_noise (src);
+      src->process = blue_noise_funcs[idx];
+      break;
+    case GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE:
+      if (!(src->gen))
+        src->gen = g_rand_new ();
+      src->red.state = 0.0;
+      src->process = violet_noise_funcs[idx];
+    default:
+      GST_ERROR ("invalid wave-form");
+      break;
+  }
+}
+
+/*
+ * gst_audio_test_src_change_volume:
+ * Recalc wave tables for precalculated waves.
+ */
+static void
+gst_audio_test_src_change_volume (GstAudioTestSrc * src)
+{
+  switch (src->wave) {
+    case GST_AUDIO_TEST_SRC_WAVE_SINE_TAB:
+      gst_audio_test_src_init_sine_table (src);
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+gst_audio_test_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
+    GstClockTime * start, GstClockTime * end)
+{
+  /* for live sources, sync on the timestamp of the buffer */
+  if (gst_base_src_is_live (basesrc)) {
+    GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
+
+    if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+      /* get duration to calculate end time */
+      GstClockTime duration = GST_BUFFER_DURATION (buffer);
+
+      if (GST_CLOCK_TIME_IS_VALID (duration)) {
+        *end = timestamp + duration;
+      }
+      *start = timestamp;
+    }
+  } else {
+    *start = -1;
+    *end = -1;
+  }
+}
+
+static gboolean
+gst_audio_test_src_start (GstBaseSrc * basesrc)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
+
+  src->next_sample = 0;
+  src->next_byte = 0;
+  src->next_time = 0;
+  src->check_seek_stop = FALSE;
+  src->eos_reached = FALSE;
+  src->tags_pushed = FALSE;
+  src->accumulator = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_test_src_stop (GstBaseSrc * basesrc)
+{
+  return TRUE;
+}
+
+/* seek to time, will be called when we operate in push mode. In pull mode we
+ * get the requested byte offset. */
+static gboolean
+gst_audio_test_src_do_seek (GstBaseSrc * basesrc, GstSegment * segment)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (basesrc);
+  GstClockTime time;
+  gint samplerate, bpf;
+
+  GST_DEBUG_OBJECT (src, "seeking %" GST_SEGMENT_FORMAT, segment);
+
+  time = segment->position;
+  src->reverse = (segment->rate < 0.0);
+
+  samplerate = GST_AUDIO_INFO_RATE (&src->info);
+  bpf = GST_AUDIO_INFO_BPF (&src->info);
+
+  /* now move to the time indicated */
+  src->next_sample = gst_util_uint64_scale_int (time, samplerate, GST_SECOND);
+  src->next_byte = src->next_sample * bpf;
+  if (samplerate == 0)
+    src->next_time = 0;
+  else
+    src->next_time =
+        gst_util_uint64_scale_int (src->next_sample, GST_SECOND, samplerate);
+
+  GST_DEBUG_OBJECT (src, "seeking next_sample=%" G_GINT64_FORMAT
+      " next_time=%" GST_TIME_FORMAT, src->next_sample,
+      GST_TIME_ARGS (src->next_time));
+
+  g_assert (src->next_time <= time);
+
+  if (!src->reverse) {
+    if (GST_CLOCK_TIME_IS_VALID (segment->start)) {
+      segment->time = segment->start;
+    }
+  } else {
+    if (GST_CLOCK_TIME_IS_VALID (segment->stop)) {
+      segment->time = segment->stop;
+    }
+  }
+
+  if (GST_CLOCK_TIME_IS_VALID (segment->stop)) {
+    time = segment->stop;
+    src->sample_stop = gst_util_uint64_scale_int (time, samplerate, GST_SECOND);
+    src->check_seek_stop = TRUE;
+  } else {
+    src->check_seek_stop = FALSE;
+  }
+  src->eos_reached = FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_test_src_is_seekable (GstBaseSrc * basesrc)
+{
+  /* we're seekable... */
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_audio_test_src_fill (GstBaseSrc * basesrc, guint64 offset,
+    guint length, GstBuffer * buffer)
+{
+  GstAudioTestSrc *src;
+  GstClockTime next_time;
+  gint64 next_sample, next_byte;
+  gint bytes, samples;
+  GstElementClass *eclass;
+  guint8 *data;
+  gint samplerate, bpf;
+
+  src = GST_AUDIO_TEST_SRC (basesrc);
+
+  /* example for tagging generated data */
+  if (!src->tags_pushed) {
+    GstTagList *taglist;
+
+    taglist = gst_tag_list_new ();
+
+    gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND,
+        GST_TAG_DESCRIPTION, "audiotest wave", NULL);
+
+    eclass = GST_ELEMENT_CLASS (parent_class);
+    if (eclass->send_event)
+      eclass->send_event (GST_ELEMENT_CAST (basesrc),
+          gst_event_new_tag (taglist));
+    src->tags_pushed = TRUE;
+  }
+
+  if (src->eos_reached) {
+    GST_INFO_OBJECT (src, "eos");
+    return GST_FLOW_UNEXPECTED;
+  }
+
+  samplerate = GST_AUDIO_INFO_RATE (&src->info);
+  bpf = GST_AUDIO_INFO_BPF (&src->info);
+
+  /* if no length was given, use our default length in samples otherwise convert
+   * the length in bytes to samples. */
+  if (length == -1)
+    samples = src->samples_per_buffer;
+  else
+    samples = length / bpf;
+
+  /* if no offset was given, use our next logical byte */
+  if (offset == -1)
+    offset = src->next_byte;
+
+  /* now see if we are at the byteoffset we think we are */
+  if (offset != src->next_byte) {
+    GST_DEBUG_OBJECT (src, "seek to new offset %" G_GUINT64_FORMAT, offset);
+    /* we have a discont in the expected sample offset, do a 'seek' */
+    src->next_sample = offset / bpf;
+    src->next_time =
+        gst_util_uint64_scale_int (src->next_sample, GST_SECOND, samplerate);
+    src->next_byte = offset;
+  }
+
+  /* check for eos */
+  if (src->check_seek_stop &&
+      (src->sample_stop > src->next_sample) &&
+      (src->sample_stop < src->next_sample + samples)
+      ) {
+    /* calculate only partial buffer */
+    src->generate_samples_per_buffer = src->sample_stop - src->next_sample;
+    next_sample = src->sample_stop;
+    src->eos_reached = TRUE;
+  } else {
+    /* calculate full buffer */
+    src->generate_samples_per_buffer = samples;
+    next_sample = src->next_sample + (src->reverse ? (-samples) : samples);
+  }
+
+  bytes = src->generate_samples_per_buffer * bpf;
+
+  next_byte = src->next_byte + (src->reverse ? (-bytes) : bytes);
+  next_time = gst_util_uint64_scale_int (next_sample, GST_SECOND, samplerate);
+
+  GST_LOG_OBJECT (src, "samplerate %d", samplerate);
+  GST_LOG_OBJECT (src, "next_sample %" G_GINT64_FORMAT ", ts %" GST_TIME_FORMAT,
+      next_sample, GST_TIME_ARGS (next_time));
+
+  GST_BUFFER_OFFSET (buffer) = src->next_sample;
+  GST_BUFFER_OFFSET_END (buffer) = next_sample;
+  if (!src->reverse) {
+    GST_BUFFER_TIMESTAMP (buffer) = src->timestamp_offset + src->next_time;
+    GST_BUFFER_DURATION (buffer) = next_time - src->next_time;
+  } else {
+    GST_BUFFER_TIMESTAMP (buffer) = src->timestamp_offset + next_time;
+    GST_BUFFER_DURATION (buffer) = src->next_time - next_time;
+  }
+
+  gst_object_sync_values (G_OBJECT (src), GST_BUFFER_TIMESTAMP (buffer));
+
+  src->next_time = next_time;
+  src->next_sample = next_sample;
+  src->next_byte = next_byte;
+
+  GST_LOG_OBJECT (src, "generating %u samples at ts %" GST_TIME_FORMAT,
+      src->generate_samples_per_buffer,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+
+  data = gst_buffer_map (buffer, NULL, NULL, GST_MAP_WRITE);
+  src->process (src, data);
+  gst_buffer_unmap (buffer, data, bytes);
+
+  if (G_UNLIKELY ((src->wave == GST_AUDIO_TEST_SRC_WAVE_SILENCE)
+          || (src->volume == 0.0))) {
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_GAP);
+  }
+
+  return GST_FLOW_OK;
+}
+
+static void
+gst_audio_test_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SAMPLES_PER_BUFFER:
+      src->samples_per_buffer = g_value_get_int (value);
+      break;
+    case PROP_WAVE:
+      src->wave = g_value_get_enum (value);
+      gst_audio_test_src_change_wave (src);
+      break;
+    case PROP_FREQ:
+      src->freq = g_value_get_double (value);
+      break;
+    case PROP_VOLUME:
+      src->volume = g_value_get_double (value);
+      gst_audio_test_src_change_volume (src);
+      break;
+    case PROP_IS_LIVE:
+      gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value));
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      src->timestamp_offset = g_value_get_int64 (value);
+      break;
+    case PROP_CAN_ACTIVATE_PUSH:
+      GST_BASE_SRC (src)->can_activate_push = g_value_get_boolean (value);
+      break;
+    case PROP_CAN_ACTIVATE_PULL:
+      src->can_activate_pull = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_audio_test_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SAMPLES_PER_BUFFER:
+      g_value_set_int (value, src->samples_per_buffer);
+      break;
+    case PROP_WAVE:
+      g_value_set_enum (value, src->wave);
+      break;
+    case PROP_FREQ:
+      g_value_set_double (value, src->freq);
+      break;
+    case PROP_VOLUME:
+      g_value_set_double (value, src->volume);
+      break;
+    case PROP_IS_LIVE:
+      g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      g_value_set_int64 (value, src->timestamp_offset);
+      break;
+    case PROP_CAN_ACTIVATE_PUSH:
+      g_value_set_boolean (value, GST_BASE_SRC (src)->can_activate_push);
+      break;
+    case PROP_CAN_ACTIVATE_PULL:
+      g_value_set_boolean (value, src->can_activate_pull);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  /* initialize gst controller library */
+  gst_controller_init (NULL, NULL);
+
+  GST_DEBUG_CATEGORY_INIT (audio_test_src_debug, "audiotestsrc", 0,
+      "Audio Test Source");
+
+  return gst_element_register (plugin, "audiotestsrc",
+      GST_RANK_NONE, GST_TYPE_AUDIO_TEST_SRC);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "audiotestsrc",
+    "Creates audio test signals of given frequency and volume",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/audiotestsrc/gstaudiotestsrc.h b/gst/audiotestsrc/gstaudiotestsrc.h
new file mode 100644
index 0000000..ac31392
--- /dev/null
+++ b/gst/audiotestsrc/gstaudiotestsrc.h
@@ -0,0 +1,146 @@
+/* GStreamer
+ * Copyright (C) 2005 Stefan Kost <ensonic@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_AUDIO_TEST_SRC_H__
+#define __GST_AUDIO_TEST_SRC_H__
+
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesrc.h>
+
+#include <gst/audio/audio.h>
+
+G_BEGIN_DECLS
+
+
+#define GST_TYPE_AUDIO_TEST_SRC \
+  (gst_audio_test_src_get_type())
+#define GST_AUDIO_TEST_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_TEST_SRC,GstAudioTestSrc))
+#define GST_AUDIO_TEST_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_TEST_SRC,GstAudioTestSrcClass))
+#define GST_IS_AUDIO_TEST_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_TEST_SRC))
+#define GST_IS_AUDIO_TEST_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_TEST_SRC))
+
+/**
+ * GstAudioTestSrcWave:
+ * @GST_AUDIO_TEST_SRC_WAVE_SINE: a sine wave
+ * @GST_AUDIO_TEST_SRC_WAVE_SQUARE: a square wave
+ * @GST_AUDIO_TEST_SRC_WAVE_SAW: a saw wave
+ * @GST_AUDIO_TEST_SRC_WAVE_TRIANGLE: a tringle wave
+ * @GST_AUDIO_TEST_SRC_WAVE_SILENCE: silence
+ * @GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE: white uniform noise
+ * @GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE: pink noise
+ * @GST_AUDIO_TEST_SRC_WAVE_SINE_TAB: sine wave using a table
+ * @GST_AUDIO_TEST_SRC_WAVE_TICKS: periodic ticks
+ * @GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE: white (zero mean) Gaussian noise;  volume sets the standard deviation of the noise in units of the range of values of the sample type, e.g. volume=0.1 produces noise with a standard deviation of 0.1*32767=3277 with 16-bit integer samples, or 0.1*1.0=0.1 with floating-point samples.
+ * @GST_AUDIO_TEST_SRC_WAVE_RED_NOISE: red (brownian) noise
+ * @GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE: spectraly inverted pink noise
+ * @GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE: spectraly inverted red (brownian) noise
+ *
+ * Different types of supported sound waves.
+ */
+typedef enum {
+  GST_AUDIO_TEST_SRC_WAVE_SINE,
+  GST_AUDIO_TEST_SRC_WAVE_SQUARE,
+  GST_AUDIO_TEST_SRC_WAVE_SAW,
+  GST_AUDIO_TEST_SRC_WAVE_TRIANGLE,
+  GST_AUDIO_TEST_SRC_WAVE_SILENCE,
+  GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_SINE_TAB,
+  GST_AUDIO_TEST_SRC_WAVE_TICKS,
+  GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_RED_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE,
+  GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE
+} GstAudioTestSrcWave;
+
+#define PINK_MAX_RANDOM_ROWS   (30)
+#define PINK_RANDOM_BITS       (16)
+#define PINK_RANDOM_SHIFT      ((sizeof(long)*8)-PINK_RANDOM_BITS)
+
+typedef struct {
+  glong      rows[PINK_MAX_RANDOM_ROWS];
+  glong      running_sum;   /* Used to optimize summing of generators. */
+  gint       index;         /* Incremented each sample. */
+  gint       index_mask;    /* Index wrapped by ANDing with this mask. */
+  gdouble    scalar;        /* Used to scale within range of -1.0 to +1.0 */
+} GstPinkNoise;
+
+typedef struct {
+  gdouble    state;         /* noise state */
+} GstRedNoise;
+
+typedef struct _GstAudioTestSrc GstAudioTestSrc;
+typedef struct _GstAudioTestSrcClass GstAudioTestSrcClass;
+
+typedef void (*ProcessFunc) (GstAudioTestSrc*, guint8 *);
+
+/**
+ * GstAudioTestSrc:
+ *
+ * audiotestsrc object structure.
+ */
+struct _GstAudioTestSrc {
+  GstBaseSrc parent;
+
+  ProcessFunc process;
+
+  /* parameters */
+  GstAudioTestSrcWave wave;
+  gdouble volume;
+  gdouble freq;
+
+  /* audio parameters */
+  GstAudioInfo info;
+  gint samples_per_buffer;
+
+  /*< private >*/
+  gboolean tags_pushed;			/* send tags just once ? */
+  GstClockTimeDiff timestamp_offset;    /* base offset */
+  GstClockTime next_time;               /* next timestamp */
+  gint64 next_sample;                   /* next sample to send */
+  gint64 next_byte;                     /* next byte to send */
+  gint64 sample_stop;
+  gboolean check_seek_stop;
+  gboolean eos_reached;
+  gint generate_samples_per_buffer;	/* used to generate a partial buffer */
+  gboolean can_activate_pull;
+  gboolean reverse;                  /* play backwards */
+
+  /* waveform specific context data */
+  GRand *gen;               /* random number generator */
+  gdouble accumulator;			/* phase angle */
+  GstPinkNoise pink;
+  GstRedNoise red;
+  gdouble wave_table[1024];
+};
+
+struct _GstAudioTestSrcClass {
+  GstBaseSrcClass parent_class;
+};
+
+GType gst_audio_test_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_AUDIO_TEST_SRC_H__ */
diff --git a/gst/encoding/Makefile.am b/gst/encoding/Makefile.am
new file mode 100644
index 0000000..dace539
--- /dev/null
+++ b/gst/encoding/Makefile.am
@@ -0,0 +1,53 @@
+# variables used for enum/marshal generation
+glib_enum_define = GST_ENCODE
+glib_gen_prefix = gst_encode
+glib_gen_basename = gstencode
+
+built_sources = gstencode-marshal.c
+built_headers = gstencode-marshal.h
+
+plugin_LTLIBRARIES = libgstencodebin.la
+
+libgstencodebin_la_SOURCES = 	\
+	gstencodebin.c		\
+	gstsmartencoder.c	\
+	gststreamcombiner.c	\
+	gststreamsplitter.c
+
+nodist_libgstencodebin_la_SOURCES = $(built_sources)
+libgstencodebin_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstencodebin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstencodebin_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_LIBS)
+libgstencodebin_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = 		\
+	gstencodebin.h		\
+	gststreamcombiner.h	\
+	gststreamsplitter.h	\
+	gstsmartencoder.h
+
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+
+EXTRA_DIST = gstencode-marshal.list
+
+CLEANFILES = $(BUILT_SOURCES)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstencodebin -:SHARED libgstencodebin \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstencodebin_la_SOURCES) \
+	 	   $(nodist_libgstencodebin_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \
+	 -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \
+	           $(libgstencodebin_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/encoding/Makefile.in b/gst/encoding/Makefile.in
new file mode 100644
index 0000000..ca1bf51
--- /dev/null
+++ b/gst/encoding/Makefile.in
@@ -0,0 +1,887 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/gst-glib-gen.mak
+subdir = gst/encoding
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstencodebin_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1)
+am_libgstencodebin_la_OBJECTS = libgstencodebin_la-gstencodebin.lo \
+	libgstencodebin_la-gstsmartencoder.lo \
+	libgstencodebin_la-gststreamcombiner.lo \
+	libgstencodebin_la-gststreamsplitter.lo
+am__objects_1 = libgstencodebin_la-gstencode-marshal.lo
+nodist_libgstencodebin_la_OBJECTS = $(am__objects_1)
+libgstencodebin_la_OBJECTS = $(am_libgstencodebin_la_OBJECTS) \
+	$(nodist_libgstencodebin_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstencodebin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstencodebin_la_CFLAGS) $(CFLAGS) \
+	$(libgstencodebin_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstencodebin_la_SOURCES) \
+	$(nodist_libgstencodebin_la_SOURCES)
+DIST_SOURCES = $(libgstencodebin_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# variables used for enum/marshal generation
+glib_enum_define = GST_ENCODE
+glib_gen_prefix = gst_encode
+glib_gen_basename = gstencode
+built_sources = gstencode-marshal.c
+built_headers = gstencode-marshal.h
+plugin_LTLIBRARIES = libgstencodebin.la
+libgstencodebin_la_SOURCES = \
+	gstencodebin.c		\
+	gstsmartencoder.c	\
+	gststreamcombiner.c	\
+	gststreamsplitter.c
+
+nodist_libgstencodebin_la_SOURCES = $(built_sources)
+libgstencodebin_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstencodebin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstencodebin_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_LIBS)
+
+libgstencodebin_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstencodebin.h		\
+	gststreamcombiner.h	\
+	gststreamsplitter.h	\
+	gstsmartencoder.h
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+EXTRA_DIST = gstencode-marshal.list
+CLEANFILES = $(BUILT_SOURCES)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/encoding/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/encoding/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstencodebin.la: $(libgstencodebin_la_OBJECTS) $(libgstencodebin_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstencodebin_la_LINK) -rpath $(plugindir) $(libgstencodebin_la_OBJECTS) $(libgstencodebin_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstencodebin_la-gstencode-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstencodebin_la-gstencodebin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstencodebin_la-gstsmartencoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstencodebin_la-gststreamcombiner.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstencodebin_la-gststreamsplitter.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstencodebin_la-gstencodebin.lo: gstencodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -MT libgstencodebin_la-gstencodebin.lo -MD -MP -MF $(DEPDIR)/libgstencodebin_la-gstencodebin.Tpo -c -o libgstencodebin_la-gstencodebin.lo `test -f 'gstencodebin.c' || echo '$(srcdir)/'`gstencodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstencodebin_la-gstencodebin.Tpo $(DEPDIR)/libgstencodebin_la-gstencodebin.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstencodebin.c' object='libgstencodebin_la-gstencodebin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -c -o libgstencodebin_la-gstencodebin.lo `test -f 'gstencodebin.c' || echo '$(srcdir)/'`gstencodebin.c
+
+libgstencodebin_la-gstsmartencoder.lo: gstsmartencoder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -MT libgstencodebin_la-gstsmartencoder.lo -MD -MP -MF $(DEPDIR)/libgstencodebin_la-gstsmartencoder.Tpo -c -o libgstencodebin_la-gstsmartencoder.lo `test -f 'gstsmartencoder.c' || echo '$(srcdir)/'`gstsmartencoder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstencodebin_la-gstsmartencoder.Tpo $(DEPDIR)/libgstencodebin_la-gstsmartencoder.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstsmartencoder.c' object='libgstencodebin_la-gstsmartencoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -c -o libgstencodebin_la-gstsmartencoder.lo `test -f 'gstsmartencoder.c' || echo '$(srcdir)/'`gstsmartencoder.c
+
+libgstencodebin_la-gststreamcombiner.lo: gststreamcombiner.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -MT libgstencodebin_la-gststreamcombiner.lo -MD -MP -MF $(DEPDIR)/libgstencodebin_la-gststreamcombiner.Tpo -c -o libgstencodebin_la-gststreamcombiner.lo `test -f 'gststreamcombiner.c' || echo '$(srcdir)/'`gststreamcombiner.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstencodebin_la-gststreamcombiner.Tpo $(DEPDIR)/libgstencodebin_la-gststreamcombiner.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gststreamcombiner.c' object='libgstencodebin_la-gststreamcombiner.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -c -o libgstencodebin_la-gststreamcombiner.lo `test -f 'gststreamcombiner.c' || echo '$(srcdir)/'`gststreamcombiner.c
+
+libgstencodebin_la-gststreamsplitter.lo: gststreamsplitter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -MT libgstencodebin_la-gststreamsplitter.lo -MD -MP -MF $(DEPDIR)/libgstencodebin_la-gststreamsplitter.Tpo -c -o libgstencodebin_la-gststreamsplitter.lo `test -f 'gststreamsplitter.c' || echo '$(srcdir)/'`gststreamsplitter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstencodebin_la-gststreamsplitter.Tpo $(DEPDIR)/libgstencodebin_la-gststreamsplitter.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gststreamsplitter.c' object='libgstencodebin_la-gststreamsplitter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -c -o libgstencodebin_la-gststreamsplitter.lo `test -f 'gststreamsplitter.c' || echo '$(srcdir)/'`gststreamsplitter.c
+
+libgstencodebin_la-gstencode-marshal.lo: gstencode-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -MT libgstencodebin_la-gstencode-marshal.lo -MD -MP -MF $(DEPDIR)/libgstencodebin_la-gstencode-marshal.Tpo -c -o libgstencodebin_la-gstencode-marshal.lo `test -f 'gstencode-marshal.c' || echo '$(srcdir)/'`gstencode-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstencodebin_la-gstencode-marshal.Tpo $(DEPDIR)/libgstencodebin_la-gstencode-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstencode-marshal.c' object='libgstencodebin_la-gstencode-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstencodebin_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstencodebin_la_CFLAGS) $(CFLAGS) -c -o libgstencodebin_la-gstencode-marshal.lo `test -f 'gstencode-marshal.c' || echo '$(srcdir)/'`gstencode-marshal.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstencodebin -:SHARED libgstencodebin \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstencodebin_la_SOURCES) \
+	 	   $(nodist_libgstencodebin_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \
+	 -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \
+	           $(libgstencodebin_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/encoding/gstencode-marshal.list b/gst/encoding/gstencode-marshal.list
new file mode 100644
index 0000000..00f26ed
--- /dev/null
+++ b/gst/encoding/gstencode-marshal.list
@@ -0,0 +1 @@
+OBJECT:BOXED
diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c
new file mode 100644
index 0000000..f081a1c
--- /dev/null
+++ b/gst/encoding/gstencodebin.c
@@ -0,0 +1,2078 @@
+/* GStreamer encoding bin
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstencodebin.h"
+#include "gstsmartencoder.h"
+#include "gststreamsplitter.h"
+#include "gststreamcombiner.h"
+#include <gst/gst-i18n-plugin.h>
+
+/**
+ * SECTION:element-encodebin
+ *
+ * EncodeBin provides a bin for encoding/muxing various streams according to
+ * a specified #GstEncodingProfile.
+ *
+ * Based on the profile that was set (via the #GstEncodeBin:profile property),
+ * EncodeBin will internally select and configure the required elements
+ * (encoders, muxers, but also audio and video converters) so that you can
+ * provide it raw or pre-encoded streams of data in input and have your
+ * encoded/muxed/converted stream in output.
+ *
+ * <refsect2>
+ * <title>Features</title>
+ * <itemizedlist>
+ * <listitem>
+ * Automatic encoder and muxer selection based on elements available on the
+ * system.
+ * </listitem>
+ * <listitem>
+ * Conversion of raw audio/video streams (scaling, framerate conversion,
+ * colorspace conversion, samplerate conversion) to conform to the profile
+ * output format.
+ * </listitem>
+ * <listitem>
+ * Variable number of streams. If the presence property for a stream encoding
+ * profile is 0, you can request any number of sink pads for it via the
+ * standard request pad gstreamer API or the #GstEncodeBin::request-pad action
+ * signal.
+ * </listitem>
+ * <listitem>
+ * Avoid reencoding (passthrough). If the input stream is already encoded and is
+ * compatible with what the #GstEncodingProfile expects, then the stream won't
+ * be re-encoded but just passed through downstream to the muxer or the output.
+ * </listitem>
+ * <listitem>
+ * Mix pre-encoded and raw streams as input. In addition to the passthrough
+ * feature above, you can feed both raw audio/video *AND* already-encoded data
+ * to a pad. #GstEncodeBin will take care of passing through the compatible
+ * segments and re-encoding the segments of media that need encoding.
+ * </listitem>
+ * <listitem>
+ * Standard behaviour is to use a #GstEncodingContainerProfile to have both
+ * encoding and muxing performed. But you can also provide a single stream
+ * profile (like #GstEncodingAudioProfile) to only have the encoding done and
+ * handle the encoded output yourself.
+ * </listitem>
+ * <listitem>
+ * Audio imperfection corrections. Incoming audio streams can have non perfect
+ * timestamps (jitter), like the streams coming from ASF files. #GstEncodeBin
+ * will automatically fix those imperfections for you. See
+ * #GstEncodeBin:audio-jitter-tolerance for more details.
+ * </listitem>
+ * <listitem>
+ * Variable or Constant video framerate. If your #GstEncodingVideoProfile has
+ * the variableframerate property deactivated (default), then the incoming
+ * raw video stream will be retimestampped in order to produce a constant
+ * framerate.
+ * </listitem>
+ * <listitem>
+ * Cross-boundary re-encoding. When feeding compatible pre-encoded streams that
+ * fall on segment boundaries, and for supported formats (right now only H263),
+ * the GOP will be decoded/reencoded when needed to produce an encoded output
+ * that fits exactly within the request GstSegment.
+ * </listitem>
+ * <listitem>
+ * Missing plugin support. If a #GstElement is missing to encode/mux to the
+ * request profile formats, a missing-plugin #GstMessage will be posted on the
+ * #GstBus, allowing systems that support the missing-plugin system to offer the
+ * user a way to install the missing element.
+ * </listitem>
+ * </itemizedlist>
+ * </refsect2>
+ */
+
+
+/* TODO/FIXME
+ *
+ * Handling mp3!xing!idv3 and theora!ogg tagsetting scenarios:
+ *  Once we have chosen a muxer:
+ *   When a new stream is requested:
+ *    If muxer isn't 'Formatter' OR doesn't have a TagSetter interface:
+ *      Find a Formatter for the given stream (preferably with TagSetter)
+ *       Insert that before muxer
+ **/
+
+#define fast_pad_link(a,b) gst_pad_link_full((a),(b),GST_PAD_LINK_CHECK_NOTHING)
+#define fast_element_link(a,b) gst_element_link_pads_full((a),"src",(b),"sink",GST_PAD_LINK_CHECK_NOTHING)
+
+typedef enum
+{
+  GST_ENC_FLAG_NO_AUDIO_CONVERSION = (1 << 0),
+  GST_ENC_FLAG_NO_VIDEO_CONVERSION = (1 << 1)
+} GstEncFlags;
+
+#define GST_TYPE_ENC_FLAGS (gst_enc_flags_get_type())
+GType gst_enc_flags_get_type (void);
+
+/* generic templates */
+static GstStaticPadTemplate muxer_src_template =
+GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate video_sink_template =
+GST_STATIC_PAD_TEMPLATE ("video_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate audio_sink_template =
+GST_STATIC_PAD_TEMPLATE ("audio_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+/* static GstStaticPadTemplate text_sink_template = */
+/* GST_STATIC_PAD_TEMPLATE ("text_%d", */
+/*     GST_PAD_SINK, */
+/*     GST_PAD_REQUEST, */
+/*     GST_STATIC_CAPS_ANY); */
+static GstStaticPadTemplate private_sink_template =
+GST_STATIC_PAD_TEMPLATE ("private_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+struct _GstEncodeBin
+{
+  GstBin parent;
+
+  /* the profile field is only valid if it could be entirely setup */
+  GstEncodingProfile *profile;
+
+  GList *streams;               /* List of StreamGroup, not sorted */
+
+  GstElement *muxer;
+  /* Ghostpad with changing target */
+  GstPad *srcpad;
+
+  /* TRUE if in PAUSED/PLAYING */
+  gboolean active;
+
+  /* available muxers, encoders and parsers */
+  GList *muxers;
+  GList *formatters;
+  GList *encoders;
+  GList *parsers;
+
+  /* Increasing counter for unique pad name */
+  guint last_pad_id;
+
+  /* Cached caps for identification */
+  GstCaps *raw_video_caps;
+  GstCaps *raw_audio_caps;
+  /* GstCaps *raw_text_caps; */
+
+  guint queue_buffers_max;
+  guint queue_bytes_max;
+  guint64 queue_time_max;
+
+  guint64 tolerance;
+  gboolean avoid_reencoding;
+
+  GstEncFlags flags;
+};
+
+struct _GstEncodeBinClass
+{
+  GstBinClass parent;
+
+  /* Action Signals */
+  GstPad *(*request_pad) (GstEncodeBin * encodebin, GstCaps * caps);
+};
+
+typedef struct _StreamGroup StreamGroup;
+
+struct _StreamGroup
+{
+  GstEncodeBin *ebin;
+  GstEncodingProfile *profile;
+  GstPad *ghostpad;             /* Sink ghostpad */
+  GstElement *inqueue;          /* Queue just after the ghostpad */
+  GstElement *splitter;
+  GList *converters;            /* List of conversion GstElement */
+  GstElement *capsfilter;       /* profile->restriction (if non-NULL/ANY) */
+  GstElement *encoder;          /* Encoder (can be NULL) */
+  GstElement *combiner;
+  GstElement *parser;
+  GstElement *smartencoder;
+  GstElement *outfilter;        /* Output capsfilter (streamprofile.format) */
+  GstElement *formatter;
+  GstElement *outqueue;         /* Queue just before the muxer */
+};
+
+/* Default for queues (same defaults as queue element) */
+#define DEFAULT_QUEUE_BUFFERS_MAX  200
+#define DEFAULT_QUEUE_BYTES_MAX    10 * 1024 * 1024
+#define DEFAULT_QUEUE_TIME_MAX     GST_SECOND
+#define DEFAULT_AUDIO_JITTER_TOLERANCE 20 * GST_MSECOND
+#define DEFAULT_AVOID_REENCODING   FALSE
+#define DEFAULT_FLAGS              0
+
+#define DEFAULT_RAW_CAPS			\
+  "video/x-raw; "				\
+  "audio/x-raw; "				\
+  "text/plain; "				\
+  "text/x-pango-markup; "			\
+  "video/x-dvd-subpicture; "			\
+  "subpicture/x-pgs"
+
+/* Properties */
+enum
+{
+  PROP_0,
+  PROP_PROFILE,
+  PROP_QUEUE_BUFFERS_MAX,
+  PROP_QUEUE_BYTES_MAX,
+  PROP_QUEUE_TIME_MAX,
+  PROP_AUDIO_JITTER_TOLERANCE,
+  PROP_AVOID_REENCODING,
+  PROP_FLAGS,
+  PROP_LAST
+};
+
+/* Signals */
+enum
+{
+  SIGNAL_REQUEST_PAD,
+  LAST_SIGNAL
+};
+
+#define C_FLAGS(v) ((guint) v)
+
+GType
+gst_enc_flags_get_type (void)
+{
+  static const GFlagsValue values[] = {
+    {C_FLAGS (GST_ENC_FLAG_NO_AUDIO_CONVERSION), "Do not use audio conversion "
+          "elements", "no-audio-conversion"},
+    {C_FLAGS (GST_ENC_FLAG_NO_VIDEO_CONVERSION), "Do not use video conversion "
+          "elements", "no-video-conversion"},
+    {0, NULL, NULL}
+  };
+  static volatile GType id = 0;
+
+  if (g_once_init_enter ((gsize *) & id)) {
+    GType _id;
+
+    _id = g_flags_register_static ("GstEncFlags", values);
+
+    g_once_init_leave ((gsize *) & id, _id);
+  }
+
+  return id;
+}
+
+static guint gst_encode_bin_signals[LAST_SIGNAL] = { 0 };
+
+static GstStaticCaps default_raw_caps = GST_STATIC_CAPS (DEFAULT_RAW_CAPS);
+
+GST_DEBUG_CATEGORY_STATIC (gst_encode_bin_debug);
+#define GST_CAT_DEFAULT gst_encode_bin_debug
+
+G_DEFINE_TYPE (GstEncodeBin, gst_encode_bin, GST_TYPE_BIN);
+
+static void gst_encode_bin_dispose (GObject * object);
+static void gst_encode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_encode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_encode_bin_change_state (GstElement * element,
+    GstStateChange transition);
+
+static GstPad *gst_encode_bin_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_encode_bin_release_pad (GstElement * element, GstPad * pad);
+
+static gboolean
+gst_encode_bin_set_profile (GstEncodeBin * ebin, GstEncodingProfile * profile);
+static void gst_encode_bin_tear_down_profile (GstEncodeBin * ebin);
+static gboolean gst_encode_bin_setup_profile (GstEncodeBin * ebin,
+    GstEncodingProfile * profile);
+
+static StreamGroup *_create_stream_group (GstEncodeBin * ebin,
+    GstEncodingProfile * sprof, const gchar * sinkpadname, GstCaps * sinkcaps);
+static void stream_group_remove (GstEncodeBin * ebin, StreamGroup * sgroup);
+static GstPad *gst_encode_bin_request_pad_signal (GstEncodeBin * encodebin,
+    GstCaps * caps);
+
+static inline GstElement *_get_formatter (GstEncodeBin * ebin,
+    GstEncodingProfile * sprof);
+
+static void
+gst_encode_bin_class_init (GstEncodeBinClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+
+  gobject_klass->dispose = gst_encode_bin_dispose;
+  gobject_klass->set_property = gst_encode_bin_set_property;
+  gobject_klass->get_property = gst_encode_bin_get_property;
+
+  /* Properties */
+
+  /**
+   * GstEncodeBin:profile:
+   *
+   * The #GstEncodingProfile to use. This property must be set before going
+   * to %GST_STATE_PAUSED or higher.
+   */
+  g_object_class_install_property (gobject_klass, PROP_PROFILE,
+      g_param_spec_object ("profile", "Profile",
+          "The GstEncodingProfile to use", GST_TYPE_ENCODING_PROFILE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_QUEUE_BYTES_MAX,
+      g_param_spec_uint ("queue-bytes-max", "Max. size (kB)",
+          "Max. amount of data in the queue (bytes, 0=disable)",
+          0, G_MAXUINT, DEFAULT_QUEUE_BYTES_MAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_QUEUE_BUFFERS_MAX,
+      g_param_spec_uint ("queue-buffers-max", "Max. size (buffers)",
+          "Max. number of buffers in the queue (0=disable)", 0, G_MAXUINT,
+          DEFAULT_QUEUE_BUFFERS_MAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_QUEUE_TIME_MAX,
+      g_param_spec_uint64 ("queue-time-max", "Max. size (ns)",
+          "Max. amount of data in the queue (in ns, 0=disable)", 0, G_MAXUINT64,
+          DEFAULT_QUEUE_TIME_MAX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_AUDIO_JITTER_TOLERANCE,
+      g_param_spec_uint64 ("audio-jitter-tolerance", "Audio jitter tolerance",
+          "Amount of timestamp jitter/imperfection to allow on audio streams before inserting/dropping samples (ns)",
+          0, G_MAXUINT64, DEFAULT_AUDIO_JITTER_TOLERANCE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_AVOID_REENCODING,
+      g_param_spec_boolean ("avoid-reencoding", "Avoid re-encoding",
+          "Whether to re-encode portions of compatible video streams that lay on segment boundaries",
+          DEFAULT_AVOID_REENCODING,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstEncodeBin:flags
+   *
+   * Control the behaviour of encodebin.
+   */
+  g_object_class_install_property (gobject_klass, PROP_FLAGS,
+      g_param_spec_flags ("flags", "Flags", "Flags to control behaviour",
+          GST_TYPE_ENC_FLAGS, DEFAULT_FLAGS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /* Signals */
+  /**
+   * GstEncodeBin::request-pad
+   * @encodebin: a #GstEncodeBin instance
+   * @caps: a #GstCaps
+   *
+   * Use this method to request an unused sink request #GstPad that can take the
+   * provided @caps as input. You must release the pad with
+   * gst_element_release_request_pad() when you are done with it.
+   *
+   * Returns: A compatible #GstPad, or %NULL if no compatible #GstPad could be
+   * created or is available.
+   */
+  gst_encode_bin_signals[SIGNAL_REQUEST_PAD] =
+      g_signal_new ("request-pad", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstEncodeBinClass,
+          request_pad), NULL, NULL, gst_encode_marshal_OBJECT__BOXED,
+      GST_TYPE_PAD, 1, GST_TYPE_CAPS);
+
+  klass->request_pad = gst_encode_bin_request_pad_signal;
+
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&muxer_src_template));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&video_sink_template));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&audio_sink_template));
+  /* gst_element_class_add_pad_template (gstelement_klass, */
+  /*     gst_static_pad_template_get (&text_sink_template)); */
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&private_sink_template));
+
+  gstelement_klass->change_state =
+      GST_DEBUG_FUNCPTR (gst_encode_bin_change_state);
+  gstelement_klass->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_encode_bin_request_new_pad);
+  gstelement_klass->release_pad =
+      GST_DEBUG_FUNCPTR (gst_encode_bin_release_pad);
+
+  gst_element_class_set_details_simple (gstelement_klass,
+      "Encoder Bin",
+      "Generic/Bin/Encoder",
+      "Convenience encoding/muxing element",
+      "Edward Hervey <edward.hervey@collabora.co.uk>");
+}
+
+static void
+gst_encode_bin_dispose (GObject * object)
+{
+  GstEncodeBin *ebin = (GstEncodeBin *) object;
+
+  if (ebin->muxers)
+    gst_plugin_feature_list_free (ebin->muxers);
+
+  if (ebin->formatters)
+    gst_plugin_feature_list_free (ebin->formatters);
+
+  if (ebin->encoders)
+    gst_plugin_feature_list_free (ebin->encoders);
+
+  if (ebin->parsers)
+    gst_plugin_feature_list_free (ebin->parsers);
+
+  gst_encode_bin_tear_down_profile (ebin);
+
+  if (ebin->raw_video_caps)
+    gst_caps_unref (ebin->raw_video_caps);
+  if (ebin->raw_audio_caps)
+    gst_caps_unref (ebin->raw_audio_caps);
+  /* if (ebin->raw_text_caps) */
+  /*   gst_caps_unref (ebin->raw_text_caps); */
+
+  G_OBJECT_CLASS (gst_encode_bin_parent_class)->dispose (object);
+}
+
+static void
+gst_encode_bin_init (GstEncodeBin * encode_bin)
+{
+  GstPadTemplate *tmpl;
+
+  encode_bin->muxers =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_MUXER,
+      GST_RANK_MARGINAL);
+
+  encode_bin->formatters =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_FORMATTER,
+      GST_RANK_SECONDARY);
+
+  encode_bin->encoders =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_ENCODER,
+      GST_RANK_MARGINAL);
+
+  encode_bin->parsers =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_PARSER,
+      GST_RANK_MARGINAL);
+
+  encode_bin->raw_video_caps = gst_caps_from_string ("video/x-raw");
+  encode_bin->raw_audio_caps = gst_caps_from_string ("audio/x-raw");
+  /* encode_bin->raw_text_caps = */
+  /*     gst_caps_from_string ("text/plain;text/x-pango-markup"); */
+
+  encode_bin->queue_buffers_max = DEFAULT_QUEUE_BUFFERS_MAX;
+  encode_bin->queue_bytes_max = DEFAULT_QUEUE_BYTES_MAX;
+  encode_bin->queue_time_max = DEFAULT_QUEUE_TIME_MAX;
+  encode_bin->tolerance = DEFAULT_AUDIO_JITTER_TOLERANCE;
+  encode_bin->avoid_reencoding = DEFAULT_AVOID_REENCODING;
+  encode_bin->flags = DEFAULT_FLAGS;
+
+  tmpl = gst_static_pad_template_get (&muxer_src_template);
+  encode_bin->srcpad = gst_ghost_pad_new_no_target_from_template ("src", tmpl);
+  gst_object_unref (tmpl);
+  gst_element_add_pad (GST_ELEMENT_CAST (encode_bin), encode_bin->srcpad);
+}
+
+static void
+gst_encode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstEncodeBin *ebin = (GstEncodeBin *) object;
+
+  switch (prop_id) {
+    case PROP_PROFILE:
+      gst_encode_bin_set_profile (ebin,
+          (GstEncodingProfile *) g_value_get_object (value));
+      break;
+    case PROP_QUEUE_BUFFERS_MAX:
+      ebin->queue_buffers_max = g_value_get_uint (value);
+      break;
+    case PROP_QUEUE_BYTES_MAX:
+      ebin->queue_bytes_max = g_value_get_uint (value);
+      break;
+    case PROP_QUEUE_TIME_MAX:
+      ebin->queue_time_max = g_value_get_uint64 (value);
+      break;
+    case PROP_AUDIO_JITTER_TOLERANCE:
+      ebin->tolerance = g_value_get_uint64 (value);
+      break;
+    case PROP_AVOID_REENCODING:
+      ebin->avoid_reencoding = g_value_get_boolean (value);
+      break;
+    case PROP_FLAGS:
+      ebin->flags = g_value_get_flags (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_encode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstEncodeBin *ebin = (GstEncodeBin *) object;
+
+  switch (prop_id) {
+    case PROP_PROFILE:
+      g_value_set_object (value, (GObject *) ebin->profile);
+      break;
+    case PROP_QUEUE_BUFFERS_MAX:
+      g_value_set_uint (value, ebin->queue_buffers_max);
+      break;
+    case PROP_QUEUE_BYTES_MAX:
+      g_value_set_uint (value, ebin->queue_bytes_max);
+      break;
+    case PROP_QUEUE_TIME_MAX:
+      g_value_set_uint64 (value, ebin->queue_time_max);
+      break;
+    case PROP_AUDIO_JITTER_TOLERANCE:
+      g_value_set_uint64 (value, ebin->tolerance);
+      break;
+    case PROP_AVOID_REENCODING:
+      g_value_set_boolean (value, ebin->avoid_reencoding);
+      break;
+    case PROP_FLAGS:
+      g_value_set_flags (value, ebin->flags);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static inline gboolean
+are_raw_caps (const GstCaps * caps)
+{
+  GstCaps *raw = gst_static_caps_get (&default_raw_caps);
+
+  if (gst_caps_can_intersect (caps, raw)) {
+    gst_caps_unref (raw);
+    return TRUE;
+  }
+  gst_caps_unref (raw);
+  return FALSE;
+}
+
+/* Returns the number of time a given stream profile is currently used
+ * in encodebin */
+static inline guint
+stream_profile_used_count (GstEncodeBin * ebin, GstEncodingProfile * sprof)
+{
+  guint nbprofused = 0;
+  GList *tmp;
+
+  for (tmp = ebin->streams; tmp; tmp = tmp->next) {
+    StreamGroup *sgroup = (StreamGroup *) tmp->data;
+
+    if (sgroup->profile == sprof)
+      nbprofused++;
+  }
+
+  return nbprofused;
+}
+
+static inline GstEncodingProfile *
+next_unused_stream_profile (GstEncodeBin * ebin, GType ptype, GstCaps * caps)
+{
+  GST_DEBUG_OBJECT (ebin, "ptype:%s, caps:%" GST_PTR_FORMAT,
+      g_type_name (ptype), caps);
+
+  if (G_UNLIKELY (ptype == G_TYPE_NONE && caps != NULL)) {
+    /* Identify the profile type based on raw caps */
+    if (gst_caps_can_intersect (ebin->raw_video_caps, caps))
+      ptype = GST_TYPE_ENCODING_VIDEO_PROFILE;
+    else if (gst_caps_can_intersect (ebin->raw_audio_caps, caps))
+      ptype = GST_TYPE_ENCODING_AUDIO_PROFILE;
+    /* else if (gst_caps_can_intersect (ebin->raw_text_caps, caps)) */
+    /*   ptype = GST_TYPE_ENCODING_TEXT_PROFILE; */
+    GST_DEBUG_OBJECT (ebin, "Detected profile type as being %s",
+        g_type_name (ptype));
+  }
+
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (ebin->profile)) {
+    const GList *tmp;
+
+    for (tmp =
+        gst_encoding_container_profile_get_profiles
+        (GST_ENCODING_CONTAINER_PROFILE (ebin->profile)); tmp;
+        tmp = tmp->next) {
+      GstEncodingProfile *sprof = (GstEncodingProfile *) tmp->data;
+
+      /* Pick an available Stream profile for which:
+       * * either it is of the compatibly raw type,
+       * * OR we can pass it through directly without encoding
+       */
+      if (G_TYPE_FROM_INSTANCE (sprof) == ptype) {
+        guint presence = gst_encoding_profile_get_presence (sprof);
+        GST_DEBUG ("Found a stream profile with the same type");
+        if ((presence == 0)
+            || (presence > stream_profile_used_count (ebin, sprof)))
+          return sprof;
+      } else if ((caps != NULL) && (ptype == G_TYPE_NONE)) {
+        GstCaps *outcaps;
+        gboolean res;
+
+        outcaps = gst_encoding_profile_get_input_caps (sprof);
+        GST_DEBUG ("Unknown stream, seeing if it's compatible with %"
+            GST_PTR_FORMAT, outcaps);
+        res = gst_caps_can_intersect (outcaps, caps);
+        gst_caps_unref (outcaps);
+
+        if (res)
+          return sprof;
+      }
+    }
+  }
+
+  return NULL;
+}
+
+static GstPad *
+request_pad_for_stream (GstEncodeBin * encodebin, GType ptype,
+    const gchar * name, GstCaps * caps)
+{
+  StreamGroup *sgroup;
+  GstEncodingProfile *sprof;
+
+  GST_DEBUG_OBJECT (encodebin, "name:%s caps:%" GST_PTR_FORMAT, name, caps);
+
+  /* Figure out if we have a unused GstEncodingProfile we can use for
+   * these caps */
+  sprof = next_unused_stream_profile (encodebin, ptype, caps);
+
+  if (G_UNLIKELY (sprof == NULL))
+    goto no_stream_profile;
+
+  sgroup = _create_stream_group (encodebin, sprof, name, caps);
+  if (G_UNLIKELY (sgroup == NULL))
+    goto no_stream_group;
+
+  return sgroup->ghostpad;
+
+no_stream_profile:
+  {
+    GST_WARNING_OBJECT (encodebin, "Couldn't find a compatible stream profile");
+    return NULL;
+  }
+
+no_stream_group:
+  {
+    GST_WARNING_OBJECT (encodebin, "Couldn't create a StreamGroup");
+    return NULL;
+  }
+}
+
+static GstPad *
+gst_encode_bin_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
+{
+  GstEncodeBin *ebin = (GstEncodeBin *) element;
+  GstPad *res = NULL;
+
+  GST_DEBUG_OBJECT (element, "templ:%s, name:%s", templ->name_template, name);
+
+  /* Identify the stream group */
+  if (caps != NULL) {
+    res = request_pad_for_stream (ebin, G_TYPE_NONE, name, (GstCaps *) caps);
+  }
+
+  if (res == NULL) {
+    GType ptype = G_TYPE_NONE;
+
+    if (!strcmp (templ->name_template, "video_%d"))
+      ptype = GST_TYPE_ENCODING_VIDEO_PROFILE;
+    else if (!strcmp (templ->name_template, "audio_%d"))
+      ptype = GST_TYPE_ENCODING_AUDIO_PROFILE;
+    /* else if (!strcmp (templ->name_template, "text_%d")) */
+    /*   ptype = GST_TYPE_ENCODING_TEXT_PROFILE; */
+
+    /* FIXME : Check uniqueness of pad */
+    /* FIXME : Check that the requested number is the last one, and if not,
+     * update the last_pad_id variable so that we don't create a pad with
+     * the same name/number in the future */
+
+    res = request_pad_for_stream (ebin, ptype, name, NULL);
+  }
+
+  return res;
+}
+
+static GstPad *
+gst_encode_bin_request_pad_signal (GstEncodeBin * encodebin, GstCaps * caps)
+{
+  GstPad *pad = request_pad_for_stream (encodebin, G_TYPE_NONE, NULL, caps);
+
+  return pad ? GST_PAD_CAST (gst_object_ref (pad)) : NULL;
+}
+
+static inline StreamGroup *
+find_stream_group_from_pad (GstEncodeBin * ebin, GstPad * pad)
+{
+  GList *tmp;
+
+  for (tmp = ebin->streams; tmp; tmp = tmp->next) {
+    StreamGroup *sgroup = (StreamGroup *) tmp->data;
+    if (G_UNLIKELY (sgroup->ghostpad == pad))
+      return sgroup;
+  }
+
+  return NULL;
+}
+
+static void
+gst_encode_bin_release_pad (GstElement * element, GstPad * pad)
+{
+  GstEncodeBin *ebin = (GstEncodeBin *) element;
+  StreamGroup *sgroup;
+
+  /* Find the associated StreamGroup */
+
+  sgroup = find_stream_group_from_pad (ebin, pad);
+  if (G_UNLIKELY (sgroup == NULL))
+    goto no_stream_group;
+
+  /* Release objects/data associated with the StreamGroup */
+  stream_group_remove (ebin, sgroup);
+
+  return;
+
+no_stream_group:
+  {
+    GST_WARNING_OBJECT (ebin, "Couldn't find corresponding StreamGroup");
+    return;
+  }
+}
+
+/* Create a parser for the given stream profile */
+static inline GstElement *
+_get_parser (GstEncodeBin * ebin, GstEncodingProfile * sprof)
+{
+  GList *parsers1, *parsers, *tmp;
+  GstElement *parser = NULL;
+  GstElementFactory *parserfact = NULL;
+  const GstCaps *format;
+
+  format = gst_encoding_profile_get_format (sprof);
+
+  GST_DEBUG ("Getting list of parsers for format %" GST_PTR_FORMAT, format);
+
+  /* FIXME : requesting twice the parsers twice is a bit ugly, we should
+   * have a method to request on more than one condition */
+  parsers1 =
+      gst_element_factory_list_filter (ebin->parsers, format,
+      GST_PAD_SRC, FALSE);
+  parsers =
+      gst_element_factory_list_filter (parsers1, format, GST_PAD_SINK, FALSE);
+  gst_plugin_feature_list_free (parsers1);
+
+  if (G_UNLIKELY (parsers == NULL)) {
+    GST_DEBUG ("Couldn't find any compatible parsers");
+    return NULL;
+  }
+
+  for (tmp = parsers; tmp; tmp = tmp->next) {
+    /* FIXME : We're only picking the first one so far */
+    /* FIXME : signal the user if he wants this */
+    parserfact = (GstElementFactory *) tmp->data;
+    break;
+  }
+
+  if (parserfact)
+    parser = gst_element_factory_create (parserfact, NULL);
+
+  gst_plugin_feature_list_free (parsers);
+
+  return parser;
+}
+
+static GstElement *
+_create_element_and_set_preset (GstElementFactory * factory,
+    const gchar * preset, const gchar * name)
+{
+  GstElement *res = NULL;
+
+  GST_DEBUG ("Creating element from factory %s", GST_OBJECT_NAME (factory));
+  res = gst_element_factory_create (factory, name);
+  if (preset && GST_IS_PRESET (res) &&
+      !gst_preset_load_preset (GST_PRESET (res), preset)) {
+    GST_WARNING ("Couldn't set preset [%s] on element [%s]",
+        preset, GST_OBJECT_NAME (factory));
+    gst_object_unref (res);
+    res = NULL;
+  }
+
+  return res;
+}
+
+/* Create the encoder for the given stream profile */
+static inline GstElement *
+_get_encoder (GstEncodeBin * ebin, GstEncodingProfile * sprof)
+{
+  GList *encoders, *tmp;
+  GstElement *encoder = NULL;
+  GstElementFactory *encoderfact = NULL;
+  const GstCaps *format;
+  const gchar *preset;
+
+  format = gst_encoding_profile_get_format (sprof);
+  preset = gst_encoding_profile_get_preset (sprof);
+
+  GST_DEBUG ("Getting list of encoders for format %" GST_PTR_FORMAT, format);
+
+  /* If stream caps are raw, return identity */
+  if (G_UNLIKELY (are_raw_caps (format))) {
+    GST_DEBUG ("Stream format is raw, returning identity as the encoder");
+    encoder = gst_element_factory_make ("identity", NULL);
+    goto beach;
+  }
+
+  encoders =
+      gst_element_factory_list_filter (ebin->encoders, format,
+      GST_PAD_SRC, FALSE);
+
+  if (G_UNLIKELY (encoders == NULL)) {
+    GST_DEBUG ("Couldn't find any compatible encoders");
+    goto beach;
+  }
+
+  for (tmp = encoders; tmp; tmp = tmp->next) {
+    encoderfact = (GstElementFactory *) tmp->data;
+    if ((encoder = _create_element_and_set_preset (encoderfact, preset, NULL)))
+      break;
+  }
+
+  gst_plugin_feature_list_free (encoders);
+
+beach:
+  return encoder;
+}
+
+static GstPad *
+local_element_request_pad (GstElement * element, GstPadTemplate * templ,
+    const gchar * name, const GstCaps * caps)
+{
+  GstPad *newpad = NULL;
+  GstElementClass *oclass;
+
+  oclass = GST_ELEMENT_GET_CLASS (element);
+
+  if (oclass->request_new_pad)
+    newpad = (oclass->request_new_pad) (element, templ, name, caps);
+
+  if (newpad)
+    gst_object_ref (newpad);
+
+  return newpad;
+}
+
+static GstPad *
+gst_element_get_pad_from_template (GstElement * element, GstPadTemplate * templ)
+{
+  GstPad *ret = NULL;
+  GstPadPresence presence;
+
+  /* If this function is ever exported, we need check the validity of `element'
+   * and `templ', and to make sure the template actually belongs to the
+   * element. */
+
+  presence = GST_PAD_TEMPLATE_PRESENCE (templ);
+
+  switch (presence) {
+    case GST_PAD_ALWAYS:
+    case GST_PAD_SOMETIMES:
+      ret = gst_element_get_static_pad (element, templ->name_template);
+      if (!ret && presence == GST_PAD_ALWAYS)
+        g_warning
+            ("Element %s has an ALWAYS template %s, but no pad of the same name",
+            GST_OBJECT_NAME (element), templ->name_template);
+      break;
+
+    case GST_PAD_REQUEST:
+      ret = gst_element_request_pad (element, templ, NULL, NULL);
+      break;
+  }
+
+  return ret;
+}
+
+/* FIXME : Improve algorithm for finding compatible muxer sink pad */
+static inline GstPad *
+get_compatible_muxer_sink_pad (GstEncodeBin * ebin, GstElement * encoder,
+    GstCaps * sinkcaps)
+{
+  GstPad *sinkpad;
+  GstPadTemplate *srctempl = NULL;
+  GstPadTemplate *sinktempl;
+
+  if (encoder) {
+    GstPad *srcpad;
+    srcpad = gst_element_get_static_pad (encoder, "src");
+
+    srctempl = gst_pad_get_pad_template (srcpad);
+
+    GST_DEBUG_OBJECT (ebin,
+        "Attempting to find pad from muxer %s compatible with %s:%s",
+        GST_ELEMENT_NAME (ebin->muxer), GST_DEBUG_PAD_NAME (srcpad));
+
+    gst_object_unref (srcpad);
+    sinktempl = gst_element_get_compatible_pad_template (ebin->muxer, srctempl);
+    gst_object_unref (srctempl);
+  } else {
+    srctempl =
+        gst_pad_template_new ("whatever", GST_PAD_SRC, GST_PAD_ALWAYS,
+        sinkcaps);
+    g_assert (srctempl != NULL);
+    sinktempl = gst_element_get_compatible_pad_template (ebin->muxer, srctempl);
+    g_object_unref (srctempl);
+  }
+
+  if (G_UNLIKELY (sinktempl == NULL))
+    goto no_template;
+
+  sinkpad = gst_element_get_pad_from_template (ebin->muxer, sinktempl);
+
+  return sinkpad;
+
+no_template:
+  {
+    GST_WARNING_OBJECT (ebin, "No compatible pad available on muxer");
+    return NULL;
+  }
+}
+
+static gboolean
+_has_class (GstElement * element, const gchar * classname)
+{
+  GstElementClass *klass;
+  const gchar *value;
+
+  klass = GST_ELEMENT_GET_CLASS (element);
+  value = gst_element_class_get_metadata (klass, GST_ELEMENT_METADATA_KLASS);
+
+  return strstr (value, classname) != NULL;
+}
+
+/* FIXME : Add handling of streams that don't need encoding  */
+/* FIXME : Add handling of streams that don't require conversion elements */
+/*
+ * Create the elements, StreamGroup, add the sink pad, link it to the muxer
+ *
+ * sinkpadname: If non-NULL, that name will be assigned to the sink ghost pad
+ * sinkcaps: If non-NULL will be used to figure out how to setup the group */
+static StreamGroup *
+_create_stream_group (GstEncodeBin * ebin, GstEncodingProfile * sprof,
+    const gchar * sinkpadname, GstCaps * sinkcaps)
+{
+  StreamGroup *sgroup = NULL;
+  GstPad *sinkpad, *srcpad, *muxerpad = NULL;
+  /* Element we will link to the encoder */
+  GstElement *last = NULL;
+  GList *tmp, *tosync = NULL;
+  GstCaps *format, *restriction;
+  const gchar *missing_element_name;
+
+  format = gst_encoding_profile_get_format (sprof);
+  restriction = gst_encoding_profile_get_restriction (sprof);
+
+  GST_DEBUG ("Creating group. format %" GST_PTR_FORMAT ", for caps %"
+      GST_PTR_FORMAT, format, sinkcaps);
+  GST_DEBUG ("avoid_reencoding:%d", ebin->avoid_reencoding);
+
+  sgroup = g_slice_new0 (StreamGroup);
+  sgroup->ebin = ebin;
+  sgroup->profile = sprof;
+
+  /* NOTE for people reading this code:
+   * 
+   * We construct the group starting by the furthest downstream element
+   * and making our way up adding/syncing/linking as we go.
+   *
+   * There are two parallel paths:
+   * * One for raw data which goes through converters and encoders
+   * * One for already encoded data
+   */
+
+  /* Exception to the rule above:
+   * We check if we have an available encoder so we can abort early */
+  /* FIXME : What if we only want to do passthrough ??? */
+  GST_LOG ("Checking for encoder availability");
+  sgroup->encoder = _get_encoder (ebin, sprof);
+  if (G_UNLIKELY (sgroup->encoder == NULL))
+    goto no_encoder;
+
+  /* Muxer.
+   * If we are handling a container profile, figure out if the muxer has a
+   * sinkpad compatible with the selected profile */
+  if (ebin->muxer) {
+    muxerpad = get_compatible_muxer_sink_pad (ebin, NULL, format);
+    if (G_UNLIKELY (muxerpad == NULL))
+      goto no_muxer_pad;
+
+  }
+
+  /* Output Queue.
+   * We only use a 1buffer long queue here, the actual queueing will be done
+   * in the input queue */
+  last = sgroup->outqueue = gst_element_factory_make ("queue", NULL);
+  g_object_set (sgroup->outqueue, "max-size-buffers", (guint32) 1,
+      "max-size-bytes", (guint32) 0, "max-size-time", (guint64) 0,
+      "silent", TRUE, NULL);
+
+  gst_bin_add (GST_BIN (ebin), sgroup->outqueue);
+  tosync = g_list_append (tosync, sgroup->outqueue);
+  srcpad = gst_element_get_static_pad (sgroup->outqueue, "src");
+  if (muxerpad) {
+    if (G_UNLIKELY (fast_pad_link (srcpad, muxerpad) != GST_PAD_LINK_OK)) {
+      goto muxer_link_failure;
+    }
+    gst_object_unref (muxerpad);
+  } else {
+    gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), srcpad);
+  }
+  gst_object_unref (srcpad);
+
+  /* Check if we need a formatter
+   * If we have no muxer or
+   * if the muxer isn't a formatter and doesn't implement the tagsetter interface
+   */
+  if (!ebin->muxer || (!GST_IS_TAG_SETTER (ebin->muxer)
+          || !_has_class (ebin->muxer, "Formatter"))) {
+    sgroup->formatter = _get_formatter (ebin, sprof);
+    if (sgroup->formatter) {
+      GST_DEBUG ("Adding formatter for %" GST_PTR_FORMAT, format);
+
+      gst_bin_add (GST_BIN (ebin), sgroup->formatter);
+      tosync = g_list_append (tosync, sgroup->formatter);
+      if (G_UNLIKELY (!fast_element_link (sgroup->formatter, last)))
+        goto formatter_link_failure;
+      last = sgroup->formatter;
+    }
+  }
+
+
+  /* Output capsfilter
+   * This will receive the format caps from the streamprofile */
+  GST_DEBUG ("Adding output capsfilter for %" GST_PTR_FORMAT, format);
+  sgroup->outfilter = gst_element_factory_make ("capsfilter", NULL);
+  g_object_set (sgroup->outfilter, "caps", format, NULL);
+
+  gst_bin_add (GST_BIN (ebin), sgroup->outfilter);
+  tosync = g_list_append (tosync, sgroup->outfilter);
+  if (G_UNLIKELY (!fast_element_link (sgroup->outfilter, last)))
+    goto outfilter_link_failure;
+  last = sgroup->outfilter;
+
+
+  /* FIXME :
+   *
+   *   The usage of parsers in encoding/muxing scenarios is
+   * just too undefined to just use as-is.
+   *
+   * Take the use-case where you want to re-mux a stream of type
+   * "my/media". You create a StreamEncodingProfile with that type
+   * as the target (as-is). And you use decodebin2/uridecodebin
+   * upstream.
+   *
+   * * demuxer exposes "my/media"
+   * * a parser is available for "my/media" which has a source pad
+   *   caps of "my/media,parsed=True"
+   * * decodebin2/uridecodebin exposes a new pad with the parsed caps
+   * * You request a new stream from encodebin, which will match the
+   *   streamprofile and creates a group (i.e. going through this method)
+   *   There is a matching parser (the same used in the decoder) whose
+   *   source pad caps intersects with the stream profile caps, you
+   *   therefore use it...
+   * * ... but that parser has a "my/media,parsed=False" sink pad caps
+   * * ... and you can't link your decodebin pad to encodebin.
+   *
+   * In the end, it comes down to parsers only taking into account the
+   * decoding use-cases.
+   *
+   * One way to solve that might be to :
+   * * Make parsers sink pad caps be "framed={False,True}" and the
+   *   source pad caps be "framed=True"
+   * * Modify decodebin2 accordingly to avoid looping and chaining
+   *   an infinite number of parsers
+   *
+   * Another way would be to have "well-known" caps properties to specify
+   * whether a stream has been parsed or not.
+   * * currently we fail. aacparse uses 'framed' and mp3parse uses 'parsed'
+   */
+  /* FIXME : Re-enable once parser situation is un-$#*@(%$#ed */
+#if 0
+  /* Parser.
+   * FIXME : identify smart parsers (used for re-encoding) */
+  sgroup->parser = _get_parser (ebin, sprof);
+
+  if (sgroup->parser != NULL) {
+    GST_DEBUG ("Got a parser %s", GST_ELEMENT_NAME (sgroup->parser));
+    gst_bin_add (GST_BIN (ebin), sgroup->parser);
+    tosync = g_list_append (tosync, sgroup->parser);
+    if (G_UNLIKELY (!gst_element_link (sgroup->parser, last)))
+      goto parser_link_failure;
+    last = sgroup->parser;
+  }
+#endif
+
+  /* Stream combiner */
+  sgroup->combiner = g_object_new (GST_TYPE_STREAM_COMBINER, NULL);
+
+  gst_bin_add (GST_BIN (ebin), sgroup->combiner);
+  tosync = g_list_append (tosync, sgroup->combiner);
+  if (G_UNLIKELY (!fast_element_link (sgroup->combiner, last)))
+    goto combiner_link_failure;
+
+
+  /* Stream splitter */
+  sgroup->splitter = g_object_new (GST_TYPE_STREAM_SPLITTER, NULL);
+
+  gst_bin_add (GST_BIN (ebin), sgroup->splitter);
+  tosync = g_list_append (tosync, sgroup->splitter);
+
+  /* Input queue
+   * FIXME : figure out what max-size to use for the input queue */
+  sgroup->inqueue = gst_element_factory_make ("queue", NULL);
+  g_object_set (sgroup->inqueue, "max-size-buffers",
+      (guint32) ebin->queue_buffers_max, "max-size-bytes",
+      (guint32) ebin->queue_bytes_max, "max-size-time",
+      (guint64) ebin->queue_time_max, "silent", TRUE, NULL);
+
+  gst_bin_add (GST_BIN (ebin), sgroup->inqueue);
+  tosync = g_list_append (tosync, sgroup->inqueue);
+  if (G_UNLIKELY (!fast_element_link (sgroup->inqueue, sgroup->splitter)))
+    goto splitter_link_failure;
+
+  /* Expose input queue sink pad as ghostpad */
+  sinkpad = gst_element_get_static_pad (sgroup->inqueue, "sink");
+  if (sinkpadname == NULL) {
+    gchar *pname =
+        g_strdup_printf ("%s_%d", gst_encoding_profile_get_type_nick (sprof),
+        ebin->last_pad_id++);
+    GST_DEBUG ("Adding ghost pad %s", pname);
+    sgroup->ghostpad = gst_ghost_pad_new (pname, sinkpad);
+    g_free (pname);
+  } else
+    sgroup->ghostpad = gst_ghost_pad_new (sinkpadname, sinkpad);
+  gst_object_unref (sinkpad);
+
+
+  /* Path 1 : Already-encoded data */
+  sinkpad =
+      local_element_request_pad (sgroup->combiner, NULL, "passthroughsink",
+      NULL);
+  if (G_UNLIKELY (sinkpad == NULL))
+    goto no_combiner_sinkpad;
+
+  if (ebin->avoid_reencoding) {
+    GstCaps *tmpcaps;
+
+    GST_DEBUG ("Asked to use Smart Encoder");
+    sgroup->smartencoder = g_object_new (GST_TYPE_SMART_ENCODER, NULL);
+
+    /* Check if stream format is compatible */
+    srcpad = gst_element_get_static_pad (sgroup->smartencoder, "src");
+    tmpcaps = gst_pad_get_caps (srcpad, NULL);
+    if (!gst_caps_can_intersect (tmpcaps, format)) {
+      GST_DEBUG ("We don't have a smart encoder for the stream format");
+      gst_object_unref (sgroup->smartencoder);
+      sgroup->smartencoder = NULL;
+    } else {
+      gst_bin_add ((GstBin *) ebin, sgroup->smartencoder);
+      fast_pad_link (srcpad, sinkpad);
+      tosync = g_list_append (tosync, sgroup->smartencoder);
+      sinkpad = gst_element_get_static_pad (sgroup->smartencoder, "sink");
+    }
+    gst_caps_unref (tmpcaps);
+    g_object_unref (srcpad);
+  }
+
+  srcpad =
+      local_element_request_pad (sgroup->splitter, NULL, "passthroughsrc",
+      NULL);
+  if (G_UNLIKELY (srcpad == NULL))
+    goto no_splitter_srcpad;
+
+  /* Go straight to splitter */
+  if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK))
+    goto passthrough_link_failure;
+  g_object_unref (sinkpad);
+  g_object_unref (srcpad);
+
+
+  /* Path 2 : Conversion / Encoding */
+
+  /* 1. Create the encoder */
+  GST_LOG ("Adding encoder");
+  last = sgroup->encoder;
+  gst_bin_add ((GstBin *) ebin, sgroup->encoder);
+  tosync = g_list_append (tosync, sgroup->encoder);
+
+  sinkpad =
+      local_element_request_pad (sgroup->combiner, NULL, "encodingsink", NULL);
+  if (G_UNLIKELY (sinkpad == NULL))
+    goto no_combiner_sinkpad;
+  srcpad = gst_element_get_static_pad (sgroup->encoder, "src");
+  if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK))
+    goto encoder_link_failure;
+  g_object_unref (sinkpad);
+  g_object_unref (srcpad);
+
+
+  /* 3. Create the conversion/restriction elements */
+  /* 3.1. capsfilter */
+  if (restriction && !gst_caps_is_any (restriction)) {
+    GST_LOG ("Adding capsfilter for restriction caps : %" GST_PTR_FORMAT,
+        restriction);
+
+    last = sgroup->capsfilter = gst_element_factory_make ("capsfilter", NULL);
+    g_object_set (sgroup->capsfilter, "caps", restriction, NULL);
+    gst_bin_add ((GstBin *) ebin, sgroup->capsfilter);
+    tosync = g_list_append (tosync, sgroup->capsfilter);
+    fast_element_link (sgroup->capsfilter, sgroup->encoder);
+  }
+
+  /* 3.2. restriction elements */
+  /* FIXME : Once we have properties for specific converters, use those */
+  if (GST_IS_ENCODING_VIDEO_PROFILE (sprof)) {
+    const gboolean native_video =
+        !!(ebin->flags & GST_ENC_FLAG_NO_VIDEO_CONVERSION);
+    GstElement *cspace = NULL, *scale, *vrate, *cspace2 = NULL;
+
+    GST_LOG ("Adding conversion elements for video stream");
+
+    if (!native_video) {
+      cspace = gst_element_factory_make ("videoconvert", NULL);
+      scale = gst_element_factory_make ("videoscale", NULL);
+      if (!scale) {
+        missing_element_name = "videoscale";
+        goto missing_element;
+      }
+      /* 4-tap scaling and black borders */
+      g_object_set (scale, "method", 2, "add-borders", TRUE, NULL);
+      cspace2 = gst_element_factory_make ("videoconvert", NULL);
+
+      if (!cspace || !cspace2) {
+        missing_element_name = "videoconvert";
+        goto missing_element;
+      }
+
+      gst_bin_add_many ((GstBin *) ebin, cspace, scale, cspace2, NULL);
+      tosync = g_list_append (tosync, cspace);
+      tosync = g_list_append (tosync, scale);
+      tosync = g_list_append (tosync, cspace2);
+
+      sgroup->converters = g_list_prepend (sgroup->converters, cspace);
+      sgroup->converters = g_list_prepend (sgroup->converters, scale);
+      sgroup->converters = g_list_prepend (sgroup->converters, cspace2);
+
+      if (!fast_element_link (cspace, scale) ||
+          !fast_element_link (scale, cspace2))
+        goto converter_link_failure;
+    }
+
+    if (!gst_encoding_video_profile_get_variableframerate
+        (GST_ENCODING_VIDEO_PROFILE (sprof))) {
+      vrate = gst_element_factory_make ("videorate", NULL);
+      if (!vrate) {
+        missing_element_name = "videorate";
+        goto missing_element;
+      }
+
+      gst_bin_add ((GstBin *) ebin, vrate);
+      tosync = g_list_prepend (tosync, vrate);
+      sgroup->converters = g_list_prepend (sgroup->converters, vrate);
+
+      if ((!native_video && !fast_element_link (cspace2, vrate))
+          || !fast_element_link (vrate, last))
+        goto converter_link_failure;
+
+      if (!native_video)
+        last = cspace;
+      else
+        last = vrate;
+    } else if (!native_video) {
+      if (!fast_element_link (cspace2, last))
+        goto converter_link_failure;
+      last = cspace;
+    }
+
+  } else if (GST_IS_ENCODING_AUDIO_PROFILE (sprof)
+      && !(ebin->flags & GST_ENC_FLAG_NO_AUDIO_CONVERSION)) {
+    GstElement *aconv, *ares, *arate, *aconv2;
+
+    GST_LOG ("Adding conversion elements for audio stream");
+
+    arate = gst_element_factory_make ("audiorate", NULL);
+    g_object_set (arate, "tolerance", (guint64) ebin->tolerance, NULL);
+    if (!arate) {
+      missing_element_name = "audiorate";
+      goto missing_element;
+    }
+    aconv = gst_element_factory_make ("audioconvert", NULL);
+    aconv2 = gst_element_factory_make ("audioconvert", NULL);
+    ares = gst_element_factory_make ("audioresample", NULL);
+    if (!aconv || !aconv2) {
+      missing_element_name = "audioconvert";
+      goto missing_element;
+    }
+    if (!ares) {
+      missing_element_name = "audioresample";
+      goto missing_element;
+    }
+
+    gst_bin_add_many ((GstBin *) ebin, arate, aconv, ares, aconv2, NULL);
+    tosync = g_list_append (tosync, arate);
+    tosync = g_list_append (tosync, aconv);
+    tosync = g_list_append (tosync, ares);
+    tosync = g_list_append (tosync, aconv2);
+    if (!fast_element_link (arate, aconv) ||
+        !fast_element_link (aconv, ares) ||
+        !fast_element_link (ares, aconv2) || !fast_element_link (aconv2, last))
+      goto converter_link_failure;
+
+    sgroup->converters = g_list_prepend (sgroup->converters, arate);
+    sgroup->converters = g_list_prepend (sgroup->converters, aconv);
+    sgroup->converters = g_list_prepend (sgroup->converters, ares);
+    sgroup->converters = g_list_prepend (sgroup->converters, aconv2);
+
+    last = arate;
+  }
+
+  /* Link to stream splitter */
+  sinkpad = gst_element_get_static_pad (last, "sink");
+  srcpad =
+      local_element_request_pad (sgroup->splitter, NULL, "encodingsrc", NULL);
+  if (G_UNLIKELY (srcpad == NULL))
+    goto no_splitter_srcpad;
+  if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK))
+    goto splitter_encoding_failure;
+  g_object_unref (sinkpad);
+  g_object_unref (srcpad);
+
+  /* End of Stream 2 setup */
+
+  /* Sync all elements to parent state */
+  for (tmp = tosync; tmp; tmp = tmp->next)
+    gst_element_sync_state_with_parent ((GstElement *) tmp->data);
+  g_list_free (tosync);
+
+  /* Add ghostpad */
+  GST_DEBUG ("Adding ghostpad %s:%s", GST_DEBUG_PAD_NAME (sgroup->ghostpad));
+  gst_pad_set_active (sgroup->ghostpad, TRUE);
+  gst_element_add_pad ((GstElement *) ebin, sgroup->ghostpad);
+
+  /* Add StreamGroup to our list of streams */
+
+  GST_DEBUG
+      ("Done creating elements, adding StreamGroup to our controlled stream list");
+
+  ebin->streams = g_list_prepend (ebin->streams, sgroup);
+
+  if (format)
+    gst_caps_unref (format);
+  if (restriction)
+    gst_caps_unref (restriction);
+
+  return sgroup;
+
+splitter_encoding_failure:
+  GST_ERROR_OBJECT (ebin, "Error linking splitter to encoding stream");
+  goto cleanup;
+
+no_encoder:
+  GST_ERROR_OBJECT (ebin, "Couldn't create encoder for format %" GST_PTR_FORMAT,
+      format);
+  /* missing plugin support */
+  gst_element_post_message (GST_ELEMENT_CAST (ebin),
+      gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin), format));
+  GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL),
+      ("Couldn't create encoder for format %" GST_PTR_FORMAT, format));
+  goto cleanup;
+
+no_muxer_pad:
+  GST_ERROR_OBJECT (ebin,
+      "Couldn't find a compatible muxer pad to link encoder to");
+  goto cleanup;
+
+missing_element:
+  gst_element_post_message (GST_ELEMENT_CAST (ebin),
+      gst_missing_element_message_new (GST_ELEMENT_CAST (ebin),
+          missing_element_name));
+  GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN,
+      (_("Missing element '%s' - check your GStreamer installation."),
+          missing_element_name), (NULL));
+  goto cleanup;
+
+encoder_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failed to link the encoder");
+  goto cleanup;
+
+muxer_link_failure:
+  GST_ERROR_OBJECT (ebin, "Couldn't link encoder to muxer");
+  goto cleanup;
+
+formatter_link_failure:
+  GST_ERROR_OBJECT (ebin, "Couldn't link output filter to output queue");
+  goto cleanup;
+
+outfilter_link_failure:
+  GST_ERROR_OBJECT (ebin,
+      "Couldn't link output filter to output queue/formatter");
+  goto cleanup;
+
+passthrough_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failed linking splitter in passthrough mode");
+  goto cleanup;
+
+no_splitter_srcpad:
+  GST_ERROR_OBJECT (ebin, "Couldn't get a source pad from the splitter");
+  goto cleanup;
+
+no_combiner_sinkpad:
+  GST_ERROR_OBJECT (ebin, "Couldn't get a sink pad from the combiner");
+  goto cleanup;
+
+splitter_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failure linking to the splitter");
+  goto cleanup;
+
+combiner_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failure linking to the combiner");
+  goto cleanup;
+
+#if 0
+parser_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failure linking the parser");
+  goto cleanup;
+#endif
+
+converter_link_failure:
+  GST_ERROR_OBJECT (ebin, "Failure linking the video converters");
+  goto cleanup;
+
+cleanup:
+  /* FIXME : Actually properly cleanup everything */
+  if (format)
+    gst_caps_unref (format);
+  if (restriction)
+    gst_caps_unref (restriction);
+  g_slice_free (StreamGroup, sgroup);
+  return NULL;
+}
+
+static gboolean
+_gst_caps_match_foreach (GQuark field_id, const GValue * value, gpointer data)
+{
+  GstStructure *structure = data;
+  const GValue *other_value = gst_structure_id_get_value (structure, field_id);
+
+  if (G_UNLIKELY (other_value == NULL))
+    return FALSE;
+  if (gst_value_compare (value, other_value) == GST_VALUE_EQUAL) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/*
+ * checks that there is at least one structure on caps_a that has
+ * all its fields exactly the same as one structure on caps_b
+ */
+static gboolean
+_gst_caps_match (const GstCaps * caps_a, const GstCaps * caps_b)
+{
+  gint i, j;
+  gboolean res = FALSE;
+
+  for (i = 0; i < gst_caps_get_size (caps_a); i++) {
+    GstStructure *structure_a = gst_caps_get_structure (caps_a, i);
+    for (j = 0; j < gst_caps_get_size (caps_b); j++) {
+      GstStructure *structure_b = gst_caps_get_structure (caps_b, j);
+
+      res = gst_structure_foreach (structure_a, _gst_caps_match_foreach,
+          structure_b);
+      if (res)
+        goto end;
+    }
+  }
+end:
+  return res;
+}
+
+static gboolean
+_factory_can_handle_caps (GstElementFactory * factory, const GstCaps * caps,
+    GstPadDirection dir, gboolean exact)
+{
+  GList *templates = factory->staticpadtemplates;
+
+  while (templates) {
+    GstStaticPadTemplate *template = (GstStaticPadTemplate *) templates->data;
+
+    if (template->direction == dir) {
+      GstCaps *tmp = gst_static_caps_get (&template->static_caps);
+
+      if ((exact && _gst_caps_match (caps, tmp)) ||
+          (!exact && gst_caps_can_intersect (tmp, caps))) {
+        gst_caps_unref (tmp);
+        return TRUE;
+      }
+      gst_caps_unref (tmp);
+    }
+    templates = g_list_next (templates);
+  }
+
+  return FALSE;
+}
+
+static inline GstElement *
+_get_formatter (GstEncodeBin * ebin, GstEncodingProfile * sprof)
+{
+  GList *formatters, *tmpfmtr;
+  GstElement *formatter = NULL;
+  GstElementFactory *formatterfact = NULL;
+  const GstCaps *format;
+  const gchar *preset;
+
+  format = gst_encoding_profile_get_format (sprof);
+  preset = gst_encoding_profile_get_preset (sprof);
+
+  GST_DEBUG ("Getting list of formatters for format %" GST_PTR_FORMAT, format);
+
+  formatters =
+      gst_element_factory_list_filter (ebin->formatters, format, GST_PAD_SRC,
+      FALSE);
+
+  if (formatters == NULL)
+    goto beach;
+
+  /* FIXME : signal the user if he wants this */
+  for (tmpfmtr = formatters; tmpfmtr; tmpfmtr = tmpfmtr->next) {
+    formatterfact = (GstElementFactory *) tmpfmtr->data;
+
+    GST_DEBUG_OBJECT (ebin, "Trying formatter %s",
+        GST_OBJECT_NAME (formatterfact));
+
+    if ((formatter =
+            _create_element_and_set_preset (formatterfact, preset, NULL)))
+      break;
+  }
+
+  gst_plugin_feature_list_free (formatters);
+
+beach:
+  return formatter;
+}
+
+static gint
+compare_elements (gconstpointer a, gconstpointer b, gpointer udata)
+{
+  GstCaps *caps = udata;
+  GstElementFactory *fac_a = (GstElementFactory *) a;
+  GstElementFactory *fac_b = (GstElementFactory *) b;
+
+  /* FIXME not quite sure this is the best algorithm to order the elements
+   * Some caps similarity comparison algorithm would fit better than going
+   * boolean (equals/not equals).
+   */
+  gboolean equals_a = _factory_can_handle_caps (fac_a, caps, GST_PAD_SRC, TRUE);
+  gboolean equals_b = _factory_can_handle_caps (fac_b, caps, GST_PAD_SRC, TRUE);
+
+  if (equals_a == equals_b) {
+    return gst_plugin_feature_get_rank ((GstPluginFeature *) fac_b) -
+        gst_plugin_feature_get_rank ((GstPluginFeature *) fac_a);
+  } else if (equals_a) {
+    return -1;
+  } else if (equals_b) {
+    return 1;
+  }
+  return 0;
+}
+
+static inline GstElement *
+_get_muxer (GstEncodeBin * ebin)
+{
+  GList *muxers, *formatters, *tmpmux;
+  GstElement *muxer = NULL;
+  GstElementFactory *muxerfact = NULL;
+  const GList *tmp;
+  const GstCaps *format;
+  const gchar *preset;
+
+  format = gst_encoding_profile_get_format (ebin->profile);
+  preset = gst_encoding_profile_get_preset (ebin->profile);
+
+  GST_DEBUG ("Getting list of muxers for format %" GST_PTR_FORMAT, format);
+
+  muxers =
+      gst_element_factory_list_filter (ebin->muxers, format, GST_PAD_SRC, TRUE);
+
+  formatters =
+      gst_element_factory_list_filter (ebin->formatters, format, GST_PAD_SRC,
+      TRUE);
+
+  muxers = g_list_sort_with_data (muxers, compare_elements, (gpointer) format);
+  formatters =
+      g_list_sort_with_data (formatters, compare_elements, (gpointer) format);
+
+  muxers = g_list_concat (muxers, formatters);
+
+  if (muxers == NULL)
+    goto beach;
+
+  /* FIXME : signal the user if he wants this */
+  for (tmpmux = muxers; tmpmux; tmpmux = tmpmux->next) {
+    gboolean cansinkstreams = TRUE;
+    const GList *profiles =
+        gst_encoding_container_profile_get_profiles
+        (GST_ENCODING_CONTAINER_PROFILE (ebin->profile));
+
+    muxerfact = (GstElementFactory *) tmpmux->data;
+
+    GST_DEBUG ("Trying muxer %s", GST_OBJECT_NAME (muxerfact));
+
+    /* See if the muxer can sink all of our stream profile caps */
+    for (tmp = profiles; tmp; tmp = tmp->next) {
+      GstEncodingProfile *sprof = (GstEncodingProfile *) tmp->data;
+
+      if (!_factory_can_handle_caps (muxerfact,
+              gst_encoding_profile_get_format (sprof), GST_PAD_SINK, FALSE)) {
+        GST_DEBUG ("Skipping muxer because it can't sink caps %"
+            GST_PTR_FORMAT, gst_encoding_profile_get_format (sprof));
+        cansinkstreams = FALSE;
+        break;
+      }
+    }
+
+    /* Only use a muxer than can use all streams and than can accept the
+     * preset (which may be present or not) */
+    if (cansinkstreams && (muxer =
+            _create_element_and_set_preset (muxerfact, preset, "muxer")))
+      break;
+  }
+
+  gst_plugin_feature_list_free (muxers);
+
+beach:
+  return muxer;
+}
+
+static gboolean
+create_elements_and_pads (GstEncodeBin * ebin)
+{
+  gboolean ret = TRUE;
+  GstElement *muxer = NULL;
+  GstPad *muxerpad;
+  const GList *tmp, *profiles;
+  GstEncodingProfile *sprof;
+
+  GST_DEBUG ("Current profile : %s",
+      gst_encoding_profile_get_name (ebin->profile));
+
+  if (GST_IS_ENCODING_CONTAINER_PROFILE (ebin->profile)) {
+    /* 1. Get the compatible muxer */
+    muxer = _get_muxer (ebin);
+    if (G_UNLIKELY (muxer == NULL))
+      goto no_muxer;
+
+    /* Record the muxer */
+    ebin->muxer = muxer;
+    gst_bin_add ((GstBin *) ebin, muxer);
+
+    /* 2. Ghost the muxer source pad */
+
+    /* FIXME : We should figure out if it's a static/request/dyamic pad, 
+     * but for the time being let's assume it's a static pad :) */
+    muxerpad = gst_element_get_static_pad (muxer, "src");
+    if (G_UNLIKELY (muxerpad == NULL))
+      goto no_muxer_pad;
+
+    if (!gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), muxerpad))
+      goto no_muxer_ghost_pad;
+
+    gst_object_unref (muxerpad);
+    /* 3. Activate fixed presence streams */
+    profiles =
+        gst_encoding_container_profile_get_profiles
+        (GST_ENCODING_CONTAINER_PROFILE (ebin->profile));
+    for (tmp = profiles; tmp; tmp = tmp->next) {
+      sprof = (GstEncodingProfile *) tmp->data;
+
+      GST_DEBUG ("Trying stream profile with presence %d",
+          gst_encoding_profile_get_presence (sprof));
+
+      if (gst_encoding_profile_get_presence (sprof) != 0) {
+        if (G_UNLIKELY (_create_stream_group (ebin, sprof, NULL, NULL) == NULL))
+          goto stream_error;
+      }
+    }
+  } else {
+    if (G_UNLIKELY (_create_stream_group (ebin, ebin->profile, NULL,
+                NULL) == NULL))
+      goto stream_error;
+  }
+
+  return ret;
+
+no_muxer:
+  {
+    GST_WARNING ("No available muxer for %" GST_PTR_FORMAT,
+        gst_encoding_profile_get_format (ebin->profile));
+    /* missing plugin support */
+    gst_element_post_message (GST_ELEMENT_CAST (ebin),
+        gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin),
+            gst_encoding_profile_get_format (ebin->profile)));
+    GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL),
+        ("No available muxer for format %" GST_PTR_FORMAT,
+            gst_encoding_profile_get_format (ebin->profile)));
+    return FALSE;
+  }
+
+no_muxer_pad:
+  {
+    GST_WARNING ("Can't get source pad from muxer (%s)",
+        GST_ELEMENT_NAME (muxer));
+    gst_bin_remove (GST_BIN (ebin), muxer);
+    return FALSE;
+  }
+
+no_muxer_ghost_pad:
+  {
+    GST_WARNING ("Couldn't set %s:%s as source ghostpad target",
+        GST_DEBUG_PAD_NAME (muxerpad));
+    gst_bin_remove (GST_BIN (ebin), muxer);
+    gst_object_unref (muxerpad);
+    return FALSE;
+  }
+
+stream_error:
+  {
+    GST_WARNING ("Could not create Streams");
+    if (muxer)
+      gst_bin_remove (GST_BIN (ebin), muxer);
+    ebin->muxer = NULL;
+    return FALSE;
+  }
+}
+
+static void
+release_pads (const GValue * item, GstElement * elt)
+{
+  GstPad *pad = g_value_get_object (item);
+  GstPad *peer = NULL;
+
+  GST_DEBUG_OBJECT (elt, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  /* Unlink from its peer pad */
+  if ((peer = gst_pad_get_peer (pad))) {
+    if (GST_PAD_DIRECTION (peer) == GST_PAD_SRC)
+      gst_pad_unlink (peer, pad);
+    else
+      gst_pad_unlink (pad, peer);
+    gst_object_unref (peer);
+  }
+
+  /* Release it from the object */
+  gst_element_release_request_pad (elt, pad);
+}
+
+static void inline
+stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
+{
+  GList *tmp;
+  GstPad *tmppad;
+  GstPad *pad;
+
+  GST_DEBUG_OBJECT (ebin, "Freeing StreamGroup %p", sgroup);
+
+  if (ebin->muxer) {
+    /* outqueue - Muxer */
+    tmppad = gst_element_get_static_pad (sgroup->outqueue, "src");
+    pad = gst_pad_get_peer (tmppad);
+
+    /* Remove muxer request sink pad */
+    gst_pad_unlink (tmppad, pad);
+    gst_element_release_request_pad (ebin->muxer, pad);
+    gst_object_unref (tmppad);
+    gst_object_unref (pad);
+  }
+  if (sgroup->outqueue)
+    gst_element_set_state (sgroup->outqueue, GST_STATE_NULL);
+
+  if (sgroup->formatter) {
+    /* capsfilter - formatter - outqueue */
+    gst_element_set_state (sgroup->formatter, GST_STATE_NULL);
+    gst_element_set_state (sgroup->outfilter, GST_STATE_NULL);
+    gst_element_unlink (sgroup->formatter, sgroup->outqueue);
+    gst_element_unlink (sgroup->outfilter, sgroup->formatter);
+  } else {
+    /* Capsfilter - outqueue */
+    gst_element_set_state (sgroup->outfilter, GST_STATE_NULL);
+    gst_element_unlink (sgroup->outfilter, sgroup->outqueue);
+  }
+  gst_element_set_state (sgroup->outqueue, GST_STATE_NULL);
+  gst_bin_remove (GST_BIN (ebin), sgroup->outqueue);
+
+  /* streamcombiner - parser - capsfilter */
+  if (sgroup->parser) {
+    gst_element_set_state (sgroup->parser, GST_STATE_NULL);
+    gst_element_unlink (sgroup->parser, sgroup->outfilter);
+    gst_element_unlink (sgroup->combiner, sgroup->parser);
+    gst_bin_remove ((GstBin *) ebin, sgroup->parser);
+  }
+
+  /* Sink Ghostpad */
+  if (sgroup->ghostpad)
+    gst_element_remove_pad (GST_ELEMENT_CAST (ebin), sgroup->ghostpad);
+
+  if (sgroup->inqueue)
+    gst_element_set_state (sgroup->inqueue, GST_STATE_NULL);
+
+  if (sgroup->encoder)
+    gst_element_set_state (sgroup->encoder, GST_STATE_NULL);
+  if (sgroup->outfilter)
+    gst_element_set_state (sgroup->outfilter, GST_STATE_NULL);
+  if (sgroup->smartencoder)
+    gst_element_set_state (sgroup->smartencoder, GST_STATE_NULL);
+
+  if (sgroup->capsfilter) {
+    gst_element_set_state (sgroup->capsfilter, GST_STATE_NULL);
+    gst_element_unlink (sgroup->capsfilter, sgroup->encoder);
+    gst_bin_remove ((GstBin *) ebin, sgroup->capsfilter);
+  }
+
+  for (tmp = sgroup->converters; tmp; tmp = tmp->next) {
+    GstElement *elt = (GstElement *) tmp->data;
+
+    gst_element_set_state (elt, GST_STATE_NULL);
+    gst_bin_remove ((GstBin *) ebin, elt);
+  }
+  if (sgroup->converters)
+    g_list_free (sgroup->converters);
+
+  if (sgroup->combiner) {
+    GstIterator *it = gst_element_iterate_sink_pads (sgroup->combiner);
+    GstIteratorResult itret = GST_ITERATOR_OK;
+
+    while (itret == GST_ITERATOR_OK || itret == GST_ITERATOR_RESYNC) {
+      itret =
+          gst_iterator_foreach (it, (GstIteratorForeachFunction) release_pads,
+          sgroup->combiner);
+      gst_iterator_resync (it);
+    }
+    gst_iterator_free (it);
+    gst_element_set_state (sgroup->combiner, GST_STATE_NULL);
+    gst_bin_remove ((GstBin *) ebin, sgroup->combiner);
+  }
+
+  if (sgroup->splitter) {
+    GstIterator *it = gst_element_iterate_src_pads (sgroup->splitter);
+    GstIteratorResult itret = GST_ITERATOR_OK;
+    while (itret == GST_ITERATOR_OK || itret == GST_ITERATOR_RESYNC) {
+      itret =
+          gst_iterator_foreach (it, (GstIteratorForeachFunction) release_pads,
+          sgroup->splitter);
+      gst_iterator_resync (it);
+    }
+    gst_iterator_free (it);
+
+    gst_element_set_state (sgroup->splitter, GST_STATE_NULL);
+    gst_bin_remove ((GstBin *) ebin, sgroup->splitter);
+  }
+
+  if (sgroup->inqueue)
+    gst_bin_remove ((GstBin *) ebin, sgroup->inqueue);
+
+  if (sgroup->encoder)
+    gst_bin_remove ((GstBin *) ebin, sgroup->encoder);
+
+  if (sgroup->smartencoder)
+    gst_bin_remove ((GstBin *) ebin, sgroup->smartencoder);
+
+  if (sgroup->outfilter)
+    gst_bin_remove ((GstBin *) ebin, sgroup->outfilter);
+
+  g_slice_free (StreamGroup, sgroup);
+}
+
+static void
+stream_group_remove (GstEncodeBin * ebin, StreamGroup * sgroup)
+{
+  ebin->streams = g_list_remove (ebin->streams, sgroup);
+
+  stream_group_free (ebin, sgroup);
+}
+
+static void
+gst_encode_bin_tear_down_profile (GstEncodeBin * ebin)
+{
+  if (G_UNLIKELY (ebin->profile == NULL))
+    return;
+
+  GST_DEBUG ("Tearing down profile %s",
+      gst_encoding_profile_get_name (ebin->profile));
+
+  while (ebin->streams)
+    stream_group_remove (ebin, (StreamGroup *) ebin->streams->data);
+
+  /* Set ghostpad target to NULL */
+  gst_ghost_pad_set_target (GST_GHOST_PAD (ebin->srcpad), NULL);
+
+  /* Remove muxer if present */
+  if (ebin->muxer) {
+    gst_element_set_state (ebin->muxer, GST_STATE_NULL);
+    gst_bin_remove (GST_BIN (ebin), ebin->muxer);
+    ebin->muxer = NULL;
+  }
+
+  /* free/clear profile */
+  gst_encoding_profile_unref (ebin->profile);
+  ebin->profile = NULL;
+}
+
+static gboolean
+gst_encode_bin_setup_profile (GstEncodeBin * ebin, GstEncodingProfile * profile)
+{
+  gboolean res;
+
+  g_return_val_if_fail (ebin->profile == NULL, FALSE);
+
+  GST_DEBUG ("Setting up profile %s (type:%s)",
+      gst_encoding_profile_get_name (profile),
+      gst_encoding_profile_get_type_nick (profile));
+
+  ebin->profile = profile;
+  gst_mini_object_ref ((GstMiniObject *) ebin->profile);
+
+  /* Create elements */
+  res = create_elements_and_pads (ebin);
+  if (res == FALSE)
+    gst_encode_bin_tear_down_profile (ebin);
+
+  return res;
+}
+
+static gboolean
+gst_encode_bin_set_profile (GstEncodeBin * ebin, GstEncodingProfile * profile)
+{
+  g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE);
+
+  GST_DEBUG_OBJECT (ebin, "profile : %s",
+      gst_encoding_profile_get_name (profile));
+
+  if (G_UNLIKELY (ebin->active)) {
+    GST_WARNING_OBJECT (ebin, "Element already active, can't change profile");
+    return FALSE;
+  }
+
+  /* If we're not active, we can deactivate the previous profile */
+  if (ebin->profile) {
+    gst_encode_bin_tear_down_profile (ebin);
+  }
+
+  return gst_encode_bin_setup_profile (ebin, profile);
+}
+
+static inline gboolean
+gst_encode_bin_activate (GstEncodeBin * ebin)
+{
+  ebin->active = ebin->profile != NULL;
+  return ebin->active;
+}
+
+static void
+gst_encode_bin_deactivate (GstEncodeBin * ebin)
+{
+  ebin->active = FALSE;
+}
+
+static GstStateChangeReturn
+gst_encode_bin_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstEncodeBin *ebin = (GstEncodeBin *) element;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      if (!gst_encode_bin_activate (ebin)) {
+        ret = GST_STATE_CHANGE_FAILURE;
+        goto beach;
+      }
+      break;
+    default:
+      break;
+  }
+
+  ret =
+      GST_ELEMENT_CLASS (gst_encode_bin_parent_class)->change_state (element,
+      transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    goto beach;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_encode_bin_deactivate (ebin);
+      break;
+    default:
+      break;
+  }
+
+beach:
+  return ret;
+}
+
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean res;
+
+  GST_DEBUG_CATEGORY_INIT (gst_encode_bin_debug, "encodebin", 0, "encoder bin");
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+
+
+  res = gst_element_register (plugin, "encodebin", GST_RANK_NONE,
+      GST_TYPE_ENCODE_BIN);
+
+  return res;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "encoding",
+    "various encoding-related elements", plugin_init, VERSION, GST_LICENSE,
+    GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/encoding/gstencodebin.h b/gst/encoding/gstencodebin.h
new file mode 100644
index 0000000..2d594b0
--- /dev/null
+++ b/gst/encoding/gstencodebin.h
@@ -0,0 +1,39 @@
+/* GStreamer encoding bin
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_ENCODEBIN_H__
+#define __GST_ENCODEBIN_H__
+
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils.h>
+#include "gstencode-marshal.h"
+
+#define GST_TYPE_ENCODE_BIN               (gst_encode_bin_get_type())
+#define GST_ENCODE_BIN(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ENCODE_BIN,GstEncodeBin))
+#define GST_ENCODE_BIN_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ENCODE_BIN,GstEncodeBinClass))
+#define GST_IS_ENCODE_BIN(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ENCODE_BIN))
+#define GST_IS_ENCODE_BIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ENCODE_BIN))
+
+typedef struct _GstEncodeBin GstEncodeBin;
+typedef struct _GstEncodeBinClass GstEncodeBinClass;
+
+GType gst_encode_bin_get_type(void);
+
+#endif /* __GST_ENCODEBIN_H__ */
diff --git a/gst/encoding/gstsmartencoder.c b/gst/encoding/gstsmartencoder.c
new file mode 100644
index 0000000..bfd7289
--- /dev/null
+++ b/gst/encoding/gstsmartencoder.c
@@ -0,0 +1,689 @@
+/* GStreamer Smart Video Encoder element
+ * Copyright (C) <2010> Edward Hervey <bilboed@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* TODO:
+ * * Implement get_caps/set_caps (store/forward caps)
+ * * Adjust template caps to the formats we can support
+ **/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "gstsmartencoder.h"
+
+GST_DEBUG_CATEGORY_STATIC (smart_encoder_debug);
+#define GST_CAT_DEFAULT smart_encoder_debug
+
+/* FIXME : Update this with new caps */
+/* WARNING : We can only allow formats with closed-GOP */
+#define ALLOWED_CAPS "video/x-h263;video/x-intel-h263;"\
+  "video/mpeg,mpegversion=(int)1,systemstream=(boolean)false;"\
+  "video/mpeg,mpegversion=(int)2,systemstream=(boolean)false;"
+
+static GstStaticPadTemplate src_template =
+GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (ALLOWED_CAPS)
+    );
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (ALLOWED_CAPS)
+    );
+
+static GQuark INTERNAL_ELEMENT;
+
+/* GstSmartEncoder signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  ARG_0
+      /* FILL ME */
+};
+
+static void
+_do_init (void)
+{
+  INTERNAL_ELEMENT = g_quark_from_string ("internal-element");
+};
+
+G_DEFINE_TYPE_EXTENDED (GstSmartEncoder, gst_smart_encoder, GST_TYPE_ELEMENT, 0,
+    _do_init ());
+
+static void gst_smart_encoder_dispose (GObject * object);
+
+static gboolean setup_recoder_pipeline (GstSmartEncoder * smart_encoder);
+
+static GstFlowReturn gst_smart_encoder_chain (GstPad * pad, GstBuffer * buf);
+static gboolean smart_encoder_sink_event (GstPad * pad, GstEvent * event);
+static GstCaps *smart_encoder_sink_getcaps (GstPad * pad, GstCaps * filter);
+static GstStateChangeReturn
+gst_smart_encoder_change_state (GstElement * element,
+    GstStateChange transition);
+
+static void
+gst_smart_encoder_class_init (GstSmartEncoderClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *element_class;
+
+  element_class = (GstElementClass *) klass;
+  gobject_class = G_OBJECT_CLASS (klass);
+
+  gst_smart_encoder_parent_class = g_type_class_peek_parent (klass);
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_template));
+
+  gst_element_class_set_details_simple (element_class, "Smart Video Encoder",
+      "Codec/Recoder/Video",
+      "Re-encodes portions of Video that lay on segment boundaries",
+      "Edward Hervey <bilboed@gmail.com>");
+
+  gobject_class->dispose = (GObjectFinalizeFunc) (gst_smart_encoder_dispose);
+  element_class->change_state = gst_smart_encoder_change_state;
+
+  GST_DEBUG_CATEGORY_INIT (smart_encoder_debug, "smartencoder", 0,
+      "Smart Encoder");
+}
+
+static void
+smart_encoder_reset (GstSmartEncoder * smart_encoder)
+{
+  gst_segment_init (smart_encoder->segment, GST_FORMAT_UNDEFINED);
+
+  if (smart_encoder->encoder) {
+    /* Clean up/remove elements */
+    gst_element_set_state (smart_encoder->encoder, GST_STATE_NULL);
+    gst_element_set_state (smart_encoder->decoder, GST_STATE_NULL);
+    gst_element_set_bus (smart_encoder->encoder, NULL);
+    gst_element_set_bus (smart_encoder->decoder, NULL);
+    gst_pad_set_active (smart_encoder->internal_srcpad, FALSE);
+    gst_pad_set_active (smart_encoder->internal_sinkpad, FALSE);
+    gst_object_unref (smart_encoder->encoder);
+    gst_object_unref (smart_encoder->decoder);
+    gst_object_unref (smart_encoder->internal_srcpad);
+    gst_object_unref (smart_encoder->internal_sinkpad);
+
+    smart_encoder->encoder = NULL;
+    smart_encoder->decoder = NULL;
+    smart_encoder->internal_sinkpad = NULL;
+    smart_encoder->internal_srcpad = NULL;
+  }
+
+  if (smart_encoder->newsegment) {
+    gst_event_unref (smart_encoder->newsegment);
+    smart_encoder->newsegment = NULL;
+  }
+}
+
+
+static void
+gst_smart_encoder_init (GstSmartEncoder * smart_encoder)
+{
+  smart_encoder->sinkpad =
+      gst_pad_new_from_static_template (&sink_template, "sink");
+  gst_pad_set_chain_function (smart_encoder->sinkpad, gst_smart_encoder_chain);
+  gst_pad_set_event_function (smart_encoder->sinkpad, smart_encoder_sink_event);
+  gst_pad_set_getcaps_function (smart_encoder->sinkpad,
+      smart_encoder_sink_getcaps);
+  gst_element_add_pad (GST_ELEMENT (smart_encoder), smart_encoder->sinkpad);
+
+  smart_encoder->srcpad =
+      gst_pad_new_from_static_template (&src_template, "src");
+  gst_pad_use_fixed_caps (smart_encoder->srcpad);
+  gst_element_add_pad (GST_ELEMENT (smart_encoder), smart_encoder->srcpad);
+
+  smart_encoder->segment = gst_segment_new ();
+
+  smart_encoder_reset (smart_encoder);
+}
+
+void
+gst_smart_encoder_dispose (GObject * object)
+{
+  GstSmartEncoder *smart_encoder = (GstSmartEncoder *) object;
+
+  if (smart_encoder->segment)
+    gst_segment_free (smart_encoder->segment);
+  smart_encoder->segment = NULL;
+  if (smart_encoder->available_caps)
+    gst_caps_unref (smart_encoder->available_caps);
+  smart_encoder->available_caps = NULL;
+  G_OBJECT_CLASS (gst_smart_encoder_parent_class)->dispose (object);
+}
+
+static GstFlowReturn
+gst_smart_encoder_reencode_gop (GstSmartEncoder * smart_encoder)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+  GList *tmp;
+
+  if (smart_encoder->encoder == NULL) {
+    if (!setup_recoder_pipeline (smart_encoder))
+      return GST_FLOW_ERROR;
+  }
+
+  /* Activate elements */
+  /* Set elements to PAUSED */
+  gst_element_set_state (smart_encoder->encoder, GST_STATE_PAUSED);
+  gst_element_set_state (smart_encoder->decoder, GST_STATE_PAUSED);
+
+  GST_INFO ("Pushing Flush start/stop to clean decoder/encoder");
+  gst_pad_push_event (smart_encoder->internal_srcpad,
+      gst_event_new_flush_start ());
+  gst_pad_push_event (smart_encoder->internal_srcpad,
+      gst_event_new_flush_stop (TRUE));
+
+  /* push newsegment */
+  GST_INFO ("Pushing newsegment %" GST_PTR_FORMAT, smart_encoder->newsegment);
+  gst_pad_push_event (smart_encoder->internal_srcpad,
+      gst_event_ref (smart_encoder->newsegment));
+
+  /* Push buffers through our pads */
+  GST_DEBUG ("Pushing pending buffers");
+
+  for (tmp = smart_encoder->pending_gop; tmp; tmp = tmp->next) {
+    GstBuffer *buf = (GstBuffer *) tmp->data;
+
+    res = gst_pad_push (smart_encoder->internal_srcpad, buf);
+    if (G_UNLIKELY (res != GST_FLOW_OK))
+      break;
+  }
+
+  if (G_UNLIKELY (res != GST_FLOW_OK)) {
+    GST_WARNING ("Error pushing pending buffers : %s", gst_flow_get_name (res));
+    /* Remove pending bfufers */
+    for (tmp = smart_encoder->pending_gop; tmp; tmp = tmp->next) {
+      gst_buffer_unref ((GstBuffer *) tmp->data);
+    }
+  } else {
+    GST_INFO ("Pushing out EOS to flush out decoder/encoder");
+    gst_pad_push_event (smart_encoder->internal_srcpad, gst_event_new_eos ());
+  }
+
+  /* Activate elements */
+  /* Set elements to PAUSED */
+  gst_element_set_state (smart_encoder->encoder, GST_STATE_NULL);
+  gst_element_set_state (smart_encoder->decoder, GST_STATE_NULL);
+
+  g_list_free (smart_encoder->pending_gop);
+  smart_encoder->pending_gop = NULL;
+
+  return res;
+}
+
+static GstFlowReturn
+gst_smart_encoder_push_pending_gop (GstSmartEncoder * smart_encoder)
+{
+  guint64 cstart, cstop;
+  GList *tmp;
+  GstFlowReturn res = GST_FLOW_OK;
+
+  GST_DEBUG ("Pushing pending GOP (%" GST_TIME_FORMAT " -- %" GST_TIME_FORMAT
+      ")", GST_TIME_ARGS (smart_encoder->gop_start),
+      GST_TIME_ARGS (smart_encoder->gop_stop));
+
+  /* If GOP is entirely within segment, just push downstream */
+  if (gst_segment_clip (smart_encoder->segment, GST_FORMAT_TIME,
+          smart_encoder->gop_start, smart_encoder->gop_stop, &cstart, &cstop)) {
+    if ((cstart != smart_encoder->gop_start)
+        || (cstop != smart_encoder->gop_stop)) {
+      GST_DEBUG ("GOP needs to be re-encoded from %" GST_TIME_FORMAT " to %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (cstart), GST_TIME_ARGS (cstop));
+      res = gst_smart_encoder_reencode_gop (smart_encoder);
+    } else {
+      /* The whole GOP is within the segment, push all pending buffers downstream */
+      GST_DEBUG ("GOP doesn't need to be modified, pushing downstream");
+      for (tmp = smart_encoder->pending_gop; tmp; tmp = tmp->next) {
+        GstBuffer *buf = (GstBuffer *) tmp->data;
+        res = gst_pad_push (smart_encoder->srcpad, buf);
+        if (G_UNLIKELY (res != GST_FLOW_OK))
+          break;
+      }
+    }
+  } else {
+    /* The whole GOP is outside the segment, there's most likely
+     * a bug somewhere. */
+    GST_WARNING
+        ("GOP is entirely outside of the segment, upstream gave us too much data");
+    for (tmp = smart_encoder->pending_gop; tmp; tmp = tmp->next) {
+      gst_buffer_unref ((GstBuffer *) tmp->data);
+    }
+  }
+
+  if (smart_encoder->pending_gop) {
+    g_list_free (smart_encoder->pending_gop);
+    smart_encoder->pending_gop = NULL;
+  }
+  smart_encoder->gop_start = GST_CLOCK_TIME_NONE;
+  smart_encoder->gop_stop = GST_CLOCK_TIME_NONE;
+
+  return res;
+}
+
+static GstFlowReturn
+gst_smart_encoder_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstSmartEncoder *smart_encoder;
+  GstFlowReturn res = GST_FLOW_OK;
+  gboolean discont, keyframe;
+
+  smart_encoder = GST_SMART_ENCODER (gst_object_get_parent (GST_OBJECT (pad)));
+
+  discont = GST_BUFFER_IS_DISCONT (buf);
+  keyframe = !GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+  GST_DEBUG ("New buffer %s %s %" GST_TIME_FORMAT,
+      discont ? "discont" : "",
+      keyframe ? "keyframe" : "", GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  if (keyframe) {
+    GST_DEBUG ("Got a keyframe");
+
+    /* If there's a pending GOP, flush it out */
+    if (smart_encoder->pending_gop) {
+      /* Mark gop_stop */
+      smart_encoder->gop_stop = GST_BUFFER_TIMESTAMP (buf);
+
+      /* flush pending */
+      res = gst_smart_encoder_push_pending_gop (smart_encoder);
+      if (G_UNLIKELY (res != GST_FLOW_OK))
+        goto beach;
+    }
+
+    /* Mark gop_start for new gop */
+    smart_encoder->gop_start = GST_BUFFER_TIMESTAMP (buf);
+  }
+
+  /* Store buffer */
+  smart_encoder->pending_gop = g_list_append (smart_encoder->pending_gop, buf);
+  /* Update GOP stop position */
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    smart_encoder->gop_stop = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_BUFFER_DURATION_IS_VALID (buf))
+      smart_encoder->gop_stop += GST_BUFFER_DURATION (buf);
+  }
+
+  GST_DEBUG ("Buffer stored , Current GOP : %" GST_TIME_FORMAT " -- %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (smart_encoder->gop_start),
+      GST_TIME_ARGS (smart_encoder->gop_stop));
+
+beach:
+  gst_object_unref (smart_encoder);
+  return res;
+}
+
+static gboolean
+smart_encoder_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = TRUE;
+  GstSmartEncoder *smart_encoder = GST_SMART_ENCODER (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      smart_encoder_reset (smart_encoder);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, smart_encoder->segment);
+
+      GST_DEBUG_OBJECT (smart_encoder, "segment: %" GST_SEGMENT_FORMAT,
+          smart_encoder->segment);
+      if (smart_encoder->segment->format != GST_FORMAT_TIME)
+        GST_ERROR
+            ("smart_encoder can not handle streams not specified in GST_FORMAT_TIME");
+
+      /* And keep a copy for further usage */
+      if (smart_encoder->newsegment)
+        gst_event_unref (smart_encoder->newsegment);
+      smart_encoder->newsegment = gst_event_ref (event);
+    }
+      break;
+    case GST_EVENT_EOS:
+      GST_DEBUG ("Eos, flushing remaining data");
+      gst_smart_encoder_push_pending_gop (smart_encoder);
+      break;
+    default:
+      break;
+  }
+
+  res = gst_pad_push_event (smart_encoder->srcpad, event);
+
+  gst_object_unref (smart_encoder);
+  return res;
+}
+
+static GstCaps *
+smart_encoder_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstCaps *peer, *tmpl, *res;
+  GstSmartEncoder *smart_encoder = GST_SMART_ENCODER (gst_pad_get_parent (pad));
+
+  /* Use computed caps */
+  if (smart_encoder->available_caps)
+    tmpl = gst_caps_ref (smart_encoder->available_caps);
+  else
+    tmpl = gst_static_pad_template_get_caps (&src_template);
+
+  /* Try getting it from downstream */
+  peer = gst_pad_peer_get_caps (smart_encoder->srcpad, tmpl);
+
+  if (peer == NULL) {
+    res = tmpl;
+  } else {
+    res = peer;
+    gst_caps_unref (tmpl);
+  }
+
+  gst_object_unref (smart_encoder);
+  return res;
+}
+
+/*****************************************
+ *    Internal encoder/decoder pipeline  *
+ ******************************************/
+
+static GstElementFactory *
+get_decoder_factory (GstCaps * caps)
+{
+  GstElementFactory *fact = NULL;
+  GList *decoders, *tmp;
+
+  tmp =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_DECODER,
+      GST_RANK_MARGINAL);
+  decoders = gst_element_factory_list_filter (tmp, caps, GST_PAD_SINK, FALSE);
+  gst_plugin_feature_list_free (tmp);
+
+  for (tmp = decoders; tmp; tmp = tmp->next) {
+    /* We just pick the first one */
+    fact = (GstElementFactory *) tmp->data;
+    gst_object_ref (fact);
+    break;
+  }
+
+  gst_plugin_feature_list_free (decoders);
+
+  return fact;
+}
+
+static GstElementFactory *
+get_encoder_factory (GstCaps * caps)
+{
+  GstElementFactory *fact = NULL;
+  GList *encoders, *tmp;
+
+  tmp =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_ENCODER,
+      GST_RANK_MARGINAL);
+  encoders = gst_element_factory_list_filter (tmp, caps, GST_PAD_SRC, FALSE);
+  gst_plugin_feature_list_free (tmp);
+
+  for (tmp = encoders; tmp; tmp = tmp->next) {
+    /* We just pick the first one */
+    fact = (GstElementFactory *) tmp->data;
+    gst_object_ref (fact);
+    break;
+  }
+
+  gst_plugin_feature_list_free (encoders);
+
+  return fact;
+}
+
+static GstElement *
+get_decoder (GstCaps * caps)
+{
+  GstElementFactory *fact = get_decoder_factory (caps);
+  GstElement *res = NULL;
+
+  if (fact) {
+    res = gst_element_factory_create (fact, "internal-decoder");
+    gst_object_unref (fact);
+  }
+  return res;
+}
+
+static GstElement *
+get_encoder (GstCaps * caps)
+{
+  GstElementFactory *fact = get_encoder_factory (caps);
+  GstElement *res = NULL;
+
+  if (fact) {
+    res = gst_element_factory_create (fact, "internal-encoder");
+    gst_object_unref (fact);
+  }
+  return res;
+}
+
+static GstFlowReturn
+internal_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstSmartEncoder *smart_encoder =
+      g_object_get_qdata ((GObject *) pad, INTERNAL_ELEMENT);
+
+  return gst_pad_push (smart_encoder->srcpad, buf);
+}
+
+static gboolean
+setup_recoder_pipeline (GstSmartEncoder * smart_encoder)
+{
+  GstPad *tmppad;
+  GstCaps *caps;
+
+  /* Fast path */
+  if (G_UNLIKELY (smart_encoder->encoder))
+    return TRUE;
+
+  GST_DEBUG ("Creating internal decoder and encoder");
+
+  /* Create decoder/encoder */
+  caps = gst_pad_get_current_caps (smart_encoder->sinkpad);
+  smart_encoder->decoder = get_decoder (caps);
+  if (G_UNLIKELY (smart_encoder->decoder == NULL))
+    goto no_decoder;
+  gst_caps_unref (caps);
+  gst_element_set_bus (smart_encoder->decoder, GST_ELEMENT_BUS (smart_encoder));
+
+  caps = gst_pad_get_current_caps (smart_encoder->sinkpad);
+  smart_encoder->encoder = get_encoder (caps);
+  if (G_UNLIKELY (smart_encoder->encoder == NULL))
+    goto no_encoder;
+  gst_caps_unref (caps);
+  gst_element_set_bus (smart_encoder->encoder, GST_ELEMENT_BUS (smart_encoder));
+
+  GST_DEBUG ("Creating internal pads");
+
+  /* Create internal pads */
+
+  /* Source pad which we'll use to feed data to decoders */
+  smart_encoder->internal_srcpad = gst_pad_new ("internal_src", GST_PAD_SRC);
+  g_object_set_qdata ((GObject *) smart_encoder->internal_srcpad,
+      INTERNAL_ELEMENT, smart_encoder);
+  gst_pad_set_active (smart_encoder->internal_srcpad, TRUE);
+
+  /* Sink pad which will get the buffers from the encoder.
+   * Note: We don't need an event function since we'll be discarding all
+   * of them. */
+  smart_encoder->internal_sinkpad = gst_pad_new ("internal_sink", GST_PAD_SINK);
+  g_object_set_qdata ((GObject *) smart_encoder->internal_sinkpad,
+      INTERNAL_ELEMENT, smart_encoder);
+  gst_pad_set_chain_function (smart_encoder->internal_sinkpad, internal_chain);
+  gst_pad_set_active (smart_encoder->internal_sinkpad, TRUE);
+
+  GST_DEBUG ("Linking pads to elements");
+
+  /* Link everything */
+  tmppad = gst_element_get_static_pad (smart_encoder->encoder, "src");
+  if (GST_PAD_LINK_FAILED (gst_pad_link (tmppad,
+              smart_encoder->internal_sinkpad)))
+    goto sinkpad_link_fail;
+  gst_object_unref (tmppad);
+
+  if (!gst_element_link (smart_encoder->decoder, smart_encoder->encoder))
+    goto encoder_decoder_link_fail;
+
+  tmppad = gst_element_get_static_pad (smart_encoder->decoder, "sink");
+  if (GST_PAD_LINK_FAILED (gst_pad_link (smart_encoder->internal_srcpad,
+              tmppad)))
+    goto srcpad_link_fail;
+  gst_object_unref (tmppad);
+
+  GST_DEBUG ("Done creating internal elements/pads");
+
+  return TRUE;
+
+no_decoder:
+  {
+    GST_WARNING ("Couldn't find a decoder for %" GST_PTR_FORMAT, caps);
+    gst_caps_unref (caps);
+    return FALSE;
+  }
+
+no_encoder:
+  {
+    GST_WARNING ("Couldn't find an encoder for %" GST_PTR_FORMAT, caps);
+    gst_caps_unref (caps);
+    return FALSE;
+  }
+
+srcpad_link_fail:
+  {
+    gst_object_unref (tmppad);
+    GST_WARNING ("Couldn't link internal srcpad to decoder");
+    return FALSE;
+  }
+
+sinkpad_link_fail:
+  {
+    gst_object_unref (tmppad);
+    GST_WARNING ("Couldn't link encoder to internal sinkpad");
+    return FALSE;
+  }
+
+encoder_decoder_link_fail:
+  {
+    GST_WARNING ("Couldn't link decoder to encoder");
+    return FALSE;
+  }
+}
+
+static GstStateChangeReturn
+gst_smart_encoder_find_elements (GstSmartEncoder * smart_encoder)
+{
+  guint i, n;
+  GstCaps *tmpl, *st, *res;
+  GstElementFactory *dec, *enc;
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+  if (G_UNLIKELY (smart_encoder->available_caps))
+    goto beach;
+
+  /* Iterate over all pad template caps and see if we have both an
+   * encoder and a decoder for those media types */
+  tmpl = gst_static_pad_template_get_caps (&src_template);
+  res = gst_caps_new_empty ();
+  n = gst_caps_get_size (tmpl);
+
+  for (i = 0; i < n; i++) {
+    st = gst_caps_copy_nth (tmpl, i);
+    GST_DEBUG_OBJECT (smart_encoder,
+        "Checking for available decoder and encoder for %" GST_PTR_FORMAT, st);
+    if (!(dec = get_decoder_factory (st))) {
+      gst_caps_unref (st);
+      continue;
+    }
+    gst_object_unref (dec);
+    if (!(enc = get_encoder_factory (st))) {
+      gst_caps_unref (st);
+      continue;
+    }
+    gst_object_unref (enc);
+    GST_DEBUG_OBJECT (smart_encoder, "OK");
+    gst_caps_append (res, st);
+  }
+
+  gst_caps_unref (tmpl);
+
+  if (gst_caps_is_empty (res))
+    ret = GST_STATE_CHANGE_FAILURE;
+  else
+    smart_encoder->available_caps = res;
+
+  GST_DEBUG_OBJECT (smart_encoder, "Done, available_caps:%" GST_PTR_FORMAT,
+      smart_encoder->available_caps);
+
+beach:
+  return ret;
+}
+
+/******************************************
+ *    GstElement vmethod implementations  *
+ ******************************************/
+
+static GstStateChangeReturn
+gst_smart_encoder_change_state (GstElement * element, GstStateChange transition)
+{
+  GstSmartEncoder *smart_encoder;
+  GstStateChangeReturn ret;
+
+  g_return_val_if_fail (GST_IS_SMART_ENCODER (element),
+      GST_STATE_CHANGE_FAILURE);
+
+  smart_encoder = GST_SMART_ENCODER (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      /* Figure out which elements are available  */
+      if ((ret =
+              gst_smart_encoder_find_elements (smart_encoder)) ==
+          GST_STATE_CHANGE_FAILURE)
+        goto beach;
+      break;
+    default:
+      break;
+  }
+
+  ret =
+      GST_ELEMENT_CLASS (gst_smart_encoder_parent_class)->change_state (element,
+      transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      smart_encoder_reset (smart_encoder);
+      break;
+    default:
+      break;
+  }
+
+beach:
+  return ret;
+}
diff --git a/gst/encoding/gstsmartencoder.h b/gst/encoding/gstsmartencoder.h
new file mode 100644
index 0000000..1536626
--- /dev/null
+++ b/gst/encoding/gstsmartencoder.h
@@ -0,0 +1,71 @@
+/* GStreamer video re-encoder element
+ * Copyright (C) <2010> Edward Hervey <bilboed@bilboed.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef __SMART_ENCODER_H__
+#define __SMART_ENCODER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SMART_ENCODER \
+  (gst_smart_encoder_get_type())
+#define GST_SMART_ENCODER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SMART_ENCODER,GstSmartEncoder))
+#define GST_SMART_ENCODER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SMART_ENCODER,GstSmartEncoderClass))
+#define GST_IS_SMART_ENCODER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SMART_ENCODER))
+#define GST_IS_SMART_ENCODER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SMART_ENCODER))
+
+typedef struct _GstSmartEncoder GstSmartEncoder;
+typedef struct _GstSmartEncoderClass GstSmartEncoderClass;
+
+struct _GstSmartEncoder {
+  GstElement element;
+
+  GstPad *sinkpad, *srcpad;
+
+  GstSegment *segment;
+  GstEvent *newsegment;
+
+  /* Pending GOP to be checked */
+  GList *pending_gop;
+  guint64 gop_start;		/* GOP start in running time */
+  guint64 gop_stop;		/* GOP end in running time */
+
+  /* Internal recoding elements */
+  GstPad *internal_sinkpad;
+  GstPad *internal_srcpad;
+  GstElement *decoder;
+  GstElement *encoder;
+
+  /* Available caps at runtime */
+  GstCaps *available_caps;
+};
+
+struct _GstSmartEncoderClass {
+  GstElementClass parent_class;
+};
+
+GType gst_smart_encoder_get_type(void);
+
+G_END_DECLS
+
+#endif /* __SMART_ENCODER_H__ */
diff --git a/gst/encoding/gststreamcombiner.c b/gst/encoding/gststreamcombiner.c
new file mode 100644
index 0000000..cc74ac5
--- /dev/null
+++ b/gst/encoding/gststreamcombiner.c
@@ -0,0 +1,253 @@
+/* GStreamer Stream Combiner
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gststreamcombiner.h"
+
+static GstStaticPadTemplate src_template =
+GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (gst_stream_combiner_debug);
+#define GST_CAT_DEFAULT gst_stream_combiner_debug
+
+G_DEFINE_TYPE (GstStreamCombiner, gst_stream_combiner, GST_TYPE_ELEMENT);
+
+#define STREAMS_LOCK(obj) (g_mutex_lock(obj->lock))
+#define STREAMS_UNLOCK(obj) (g_mutex_unlock(obj->lock))
+
+static void gst_stream_combiner_dispose (GObject * object);
+
+static GstPad *gst_stream_combiner_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_stream_combiner_release_pad (GstElement * element,
+    GstPad * pad);
+
+static void
+gst_stream_combiner_class_init (GstStreamCombinerClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+
+  gobject_klass->dispose = gst_stream_combiner_dispose;
+
+  GST_DEBUG_CATEGORY_INIT (gst_stream_combiner_debug, "streamcombiner", 0,
+      "Stream Combiner");
+
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&src_template));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&sink_template));
+
+  gstelement_klass->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_combiner_request_new_pad);
+  gstelement_klass->release_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_combiner_release_pad);
+
+  gst_element_class_set_details_simple (gstelement_klass,
+      "streamcombiner", "Generic",
+      "Recombines streams splitted by the streamsplitter element",
+      "Edward Hervey <edward.hervey@collabora.co.uk>");
+}
+
+static void
+gst_stream_combiner_dispose (GObject * object)
+{
+  GstStreamCombiner *stream_combiner = (GstStreamCombiner *) object;
+
+  if (stream_combiner->lock) {
+    g_mutex_free (stream_combiner->lock);
+    stream_combiner->lock = NULL;
+  }
+
+  G_OBJECT_CLASS (gst_stream_combiner_parent_class)->dispose (object);
+}
+
+static GstFlowReturn
+gst_stream_combiner_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstStreamCombiner *stream_combiner =
+      (GstStreamCombiner *) GST_PAD_PARENT (pad);
+  /* FIXME : IMPLEMENT */
+
+  /* with lock taken, check if we're the active stream, if not drop */
+  return gst_pad_push (stream_combiner->srcpad, buf);
+}
+
+static gboolean
+gst_stream_combiner_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamCombiner *stream_combiner =
+      (GstStreamCombiner *) GST_PAD_PARENT (pad);
+  /* FIXME : IMPLEMENT */
+
+  GST_DEBUG_OBJECT (pad, "Got event %s", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CUSTOM_DOWNSTREAM:
+      if (gst_event_has_name (event, "stream-switching-eos")) {
+        gst_event_unref (event);
+        event = gst_event_new_eos ();
+      }
+      break;
+    default:
+      break;
+  }
+
+  /* SEGMENT : lock, wait for other stream to EOS, select stream, unlock, push */
+  /* EOS : lock, mark pad as unused, unlock , drop event */
+  /* CUSTOM_REAL_EOS : push EOS downstream */
+  /* FLUSH_START : lock, mark as flushing, unlock. if wasn't flushing forward */
+  /* FLUSH_STOP : lock, unmark as flushing, unlock, if was flushing forward */
+  /* OTHER : if selected pad forward */
+  return gst_pad_push_event (stream_combiner->srcpad, event);
+}
+
+static GstCaps *
+gst_stream_combiner_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstStreamCombiner *stream_combiner =
+      (GstStreamCombiner *) GST_PAD_PARENT (pad);
+
+  return gst_pad_peer_get_caps (stream_combiner->srcpad, filter);
+}
+
+static gboolean
+gst_stream_combiner_src_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamCombiner *stream_combiner =
+      (GstStreamCombiner *) GST_PAD_PARENT (pad);
+  GstPad *sinkpad = NULL;
+
+  STREAMS_LOCK (stream_combiner);
+  if (stream_combiner->current)
+    sinkpad = stream_combiner->current;
+  else if (stream_combiner->sinkpads)
+    sinkpad = (GstPad *) stream_combiner->sinkpads->data;
+  STREAMS_UNLOCK (stream_combiner);
+
+  if (sinkpad)
+    /* Forward upstream as is */
+    return gst_pad_push_event (sinkpad, event);
+  return FALSE;
+}
+
+static gboolean
+gst_stream_combiner_src_query (GstPad * pad, GstQuery * query)
+{
+  GstStreamCombiner *stream_combiner =
+      (GstStreamCombiner *) GST_PAD_PARENT (pad);
+
+  GstPad *sinkpad = NULL;
+
+  STREAMS_LOCK (stream_combiner);
+  if (stream_combiner->current)
+    sinkpad = stream_combiner->current;
+  else if (stream_combiner->sinkpads)
+    sinkpad = (GstPad *) stream_combiner->sinkpads->data;
+  STREAMS_UNLOCK (stream_combiner);
+
+  if (sinkpad)
+    /* Forward upstream as is */
+    return gst_pad_peer_query (sinkpad, query);
+  return FALSE;
+}
+
+static void
+gst_stream_combiner_init (GstStreamCombiner * stream_combiner)
+{
+  stream_combiner->srcpad =
+      gst_pad_new_from_static_template (&src_template, "src");
+  gst_pad_set_event_function (stream_combiner->srcpad,
+      gst_stream_combiner_src_event);
+  gst_pad_set_query_function (stream_combiner->srcpad,
+      gst_stream_combiner_src_query);
+  gst_element_add_pad (GST_ELEMENT (stream_combiner), stream_combiner->srcpad);
+
+  stream_combiner->lock = g_mutex_new ();
+}
+
+static GstPad *
+gst_stream_combiner_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
+{
+  GstStreamCombiner *stream_combiner = (GstStreamCombiner *) element;
+  GstPad *sinkpad;
+
+  GST_DEBUG_OBJECT (element, "templ:%p, name:%s", templ, name);
+
+  sinkpad = gst_pad_new_from_static_template (&sink_template, name);
+  gst_pad_set_chain_function (sinkpad, gst_stream_combiner_chain);
+  gst_pad_set_event_function (sinkpad, gst_stream_combiner_sink_event);
+  gst_pad_set_getcaps_function (sinkpad, gst_stream_combiner_sink_getcaps);
+
+  STREAMS_LOCK (stream_combiner);
+  stream_combiner->sinkpads =
+      g_list_append (stream_combiner->sinkpads, sinkpad);
+  gst_pad_set_active (sinkpad, TRUE);
+  gst_element_add_pad (element, sinkpad);
+  stream_combiner->cookie++;
+  STREAMS_UNLOCK (stream_combiner);
+
+  GST_DEBUG_OBJECT (element, "Returning pad %p", sinkpad);
+
+  return sinkpad;
+}
+
+static void
+gst_stream_combiner_release_pad (GstElement * element, GstPad * pad)
+{
+  GstStreamCombiner *stream_combiner = (GstStreamCombiner *) element;
+  GList *tmp;
+
+  GST_DEBUG_OBJECT (element, "pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  STREAMS_LOCK (stream_combiner);
+  tmp = g_list_find (stream_combiner->sinkpads, pad);
+  if (tmp) {
+    GstPad *pad = (GstPad *) tmp->data;
+
+    stream_combiner->sinkpads =
+        g_list_delete_link (stream_combiner->sinkpads, tmp);
+    stream_combiner->cookie++;
+
+    if (pad == stream_combiner->current) {
+      /* Deactivate current flow */
+      GST_DEBUG_OBJECT (element, "Removed pad was the current one");
+      stream_combiner->current = NULL;
+    }
+    GST_DEBUG_OBJECT (element, "Removing pad from ourself");
+    gst_element_remove_pad (element, pad);
+  }
+  STREAMS_UNLOCK (stream_combiner);
+
+  return;
+}
diff --git a/gst/encoding/gststreamcombiner.h b/gst/encoding/gststreamcombiner.h
new file mode 100644
index 0000000..ce67277
--- /dev/null
+++ b/gst/encoding/gststreamcombiner.h
@@ -0,0 +1,60 @@
+/* GStreamer Stream Combiner
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_STREAMCOMBINER_H__
+#define __GST_STREAMCOMBINER_H__
+
+#include <gst/gst.h>
+
+#define GST_TYPE_STREAM_COMBINER               (gst_stream_combiner_get_type())
+#define GST_STREAM_COMBINER(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STREAM_COMBINER,GstStreamCombiner))
+#define GST_STREAM_COMBINER_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STREAM_COMBINER,GstStreamCombinerClass))
+#define GST_IS_STREAM_COMBINER(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STREAM_COMBINER))
+#define GST_IS_STREAM_COMBINER_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STREAM_COMBINER))
+
+typedef struct _GstStreamCombiner GstStreamCombiner;
+typedef struct _GstStreamCombinerClass GstStreamCombinerClass;
+
+struct _GstStreamCombiner {
+  GstElement parent;
+
+  GstPad *srcpad;
+
+  /* lock protects:
+   * * the current pad
+   * * the list of srcpads
+   */
+  GMutex *lock;
+  /* Currently activated srcpad */
+  GstPad *current;
+  GList *sinkpads;
+  guint32 cookie;
+
+};
+
+struct _GstStreamCombinerClass {
+  GstElementClass parent;
+};
+
+GType gst_stream_combiner_get_type(void);
+
+GstElement *gst_stream_combiner_new (gchar *name);
+
+#endif /* __GST_STREAMCOMBINER_H__ */
diff --git a/gst/encoding/gststreamsplitter.c b/gst/encoding/gststreamsplitter.c
new file mode 100644
index 0000000..ff9e679
--- /dev/null
+++ b/gst/encoding/gststreamsplitter.c
@@ -0,0 +1,448 @@
+/* GStreamer Stream Splitter
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gststreamsplitter.h"
+
+static GstStaticPadTemplate src_template =
+GST_STATIC_PAD_TEMPLATE ("src_%d", GST_PAD_SRC, GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (gst_stream_splitter_debug);
+#define GST_CAT_DEFAULT gst_stream_splitter_debug
+
+G_DEFINE_TYPE (GstStreamSplitter, gst_stream_splitter, GST_TYPE_ELEMENT);
+
+#define STREAMS_LOCK(obj) (g_mutex_lock(obj->lock))
+#define STREAMS_UNLOCK(obj) (g_mutex_unlock(obj->lock))
+
+static void gst_stream_splitter_dispose (GObject * object);
+
+static gboolean gst_stream_splitter_sink_setcaps (GstPad * pad, GstCaps * caps);
+
+static GstPad *gst_stream_splitter_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_stream_splitter_release_pad (GstElement * element,
+    GstPad * pad);
+
+static void
+gst_stream_splitter_class_init (GstStreamSplitterClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+
+  gobject_klass->dispose = gst_stream_splitter_dispose;
+
+  GST_DEBUG_CATEGORY_INIT (gst_stream_splitter_debug, "streamsplitter", 0,
+      "Stream Splitter");
+
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&src_template));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&sink_template));
+
+  gstelement_klass->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_splitter_request_new_pad);
+  gstelement_klass->release_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_splitter_release_pad);
+
+  gst_element_class_set_details_simple (gstelement_klass,
+      "streamsplitter", "Generic",
+      "Splits streams based on their media type",
+      "Edward Hervey <edward.hervey@collabora.co.uk>");
+}
+
+static void
+gst_stream_splitter_dispose (GObject * object)
+{
+  GstStreamSplitter *stream_splitter = (GstStreamSplitter *) object;
+
+  if (stream_splitter->lock) {
+    g_mutex_free (stream_splitter->lock);
+    stream_splitter->lock = NULL;
+  }
+
+  g_list_foreach (stream_splitter->pending_events, (GFunc) gst_event_unref,
+      NULL);
+  g_list_free (stream_splitter->pending_events);
+  stream_splitter->pending_events = NULL;
+
+  G_OBJECT_CLASS (gst_stream_splitter_parent_class)->dispose (object);
+}
+
+static GstFlowReturn
+gst_stream_splitter_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+  GstFlowReturn res;
+  GstPad *srcpad = NULL;
+
+  STREAMS_LOCK (stream_splitter);
+  if (stream_splitter->current)
+    srcpad = gst_object_ref (stream_splitter->current);
+  STREAMS_UNLOCK (stream_splitter);
+
+  if (G_UNLIKELY (srcpad == NULL))
+    goto nopad;
+
+  if (G_UNLIKELY (stream_splitter->pending_events)) {
+    GList *tmp;
+    GST_DEBUG_OBJECT (srcpad, "Pushing out pending events");
+
+    for (tmp = stream_splitter->pending_events; tmp; tmp = tmp->next) {
+      GstEvent *event = (GstEvent *) tmp->data;
+      gst_pad_push_event (srcpad, event);
+    }
+    g_list_free (stream_splitter->pending_events);
+    stream_splitter->pending_events = NULL;
+  }
+
+  /* Forward to currently activated stream */
+  res = gst_pad_push (srcpad, buf);
+  gst_object_unref (srcpad);
+
+  return res;
+
+nopad:
+  GST_WARNING_OBJECT (stream_splitter, "No output pad was configured");
+  return GST_FLOW_ERROR;
+}
+
+static gboolean
+gst_stream_splitter_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+  gboolean res = TRUE;
+  gboolean toall = FALSE;
+  gboolean store = FALSE;
+  gboolean eos = FALSE;
+  gboolean flushpending = FALSE;
+
+  /* FLUSH_START/STOP : forward to all
+   * EOS : transform to CUSTOM_REAL_EOS and forward to all
+   * INBAND events : store to send in chain function to selected chain
+   * OUT_OF_BAND events : send to all
+   */
+
+  GST_DEBUG_OBJECT (stream_splitter, "Got event %s",
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_stream_splitter_sink_setcaps (pad, caps);
+
+      store = TRUE;
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      flushpending = TRUE;
+      toall = TRUE;
+      break;
+    case GST_EVENT_FLUSH_START:
+      toall = TRUE;
+      break;
+    case GST_EVENT_EOS:
+      /* Replace with our custom eos event */
+      gst_event_unref (event);
+      event =
+          gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+          gst_structure_empty_new ("stream-switching-eos"));
+      toall = TRUE;
+      eos = TRUE;
+      break;
+    default:
+      if (GST_EVENT_TYPE (event) & GST_EVENT_TYPE_SERIALIZED)
+        store = TRUE;
+  }
+
+  if (flushpending) {
+    g_list_foreach (stream_splitter->pending_events, (GFunc) gst_event_unref,
+        NULL);
+    g_list_free (stream_splitter->pending_events);
+    stream_splitter->pending_events = NULL;
+  }
+
+  if (store) {
+    stream_splitter->pending_events =
+        g_list_append (stream_splitter->pending_events, event);
+  } else if (toall || eos) {
+    GList *tmp;
+    guint32 cookie;
+
+    /* Send to all pads */
+    STREAMS_LOCK (stream_splitter);
+  resync:
+    if (G_UNLIKELY (stream_splitter->srcpads == NULL)) {
+      STREAMS_UNLOCK (stream_splitter);
+      /* No source pads */
+      gst_event_unref (event);
+      res = FALSE;
+      goto beach;
+    }
+    tmp = stream_splitter->srcpads;
+    cookie = stream_splitter->cookie;
+    while (tmp) {
+      GstPad *srcpad = (GstPad *) tmp->data;
+      STREAMS_UNLOCK (stream_splitter);
+      /* In case of EOS, we first push out the real one to flush out
+       * each streams (but which will be discarded in the streamcombiner)
+       * before our custom one (which will be converted back to and EOS
+       * in the streamcombiner) */
+      if (eos)
+        gst_pad_push_event (srcpad, gst_event_new_eos ());
+      gst_event_ref (event);
+      res = gst_pad_push_event (srcpad, event);
+      STREAMS_LOCK (stream_splitter);
+      if (G_UNLIKELY (cookie != stream_splitter->cookie))
+        goto resync;
+      tmp = tmp->next;
+    }
+    STREAMS_UNLOCK (stream_splitter);
+    gst_event_unref (event);
+  } else {
+    GstPad *pad;
+
+    /* Only send to current pad */
+
+    STREAMS_LOCK (stream_splitter);
+    pad = stream_splitter->current;
+    STREAMS_UNLOCK (stream_splitter);
+    if (pad)
+      res = gst_pad_push_event (pad, event);
+    else {
+      gst_event_unref (event);
+      res = FALSE;
+    }
+  }
+
+beach:
+  return res;
+}
+
+static GstCaps *
+gst_stream_splitter_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+  guint32 cookie;
+  GList *tmp;
+  GstCaps *res = NULL;
+
+  /* Return the combination of all downstream caps */
+
+  STREAMS_LOCK (stream_splitter);
+
+resync:
+  if (G_UNLIKELY (stream_splitter->srcpads == NULL)) {
+    res = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+    goto beach;
+  }
+
+  res = NULL;
+  cookie = stream_splitter->cookie;
+  tmp = stream_splitter->srcpads;
+
+  while (tmp) {
+    GstPad *srcpad = (GstPad *) tmp->data;
+
+    STREAMS_UNLOCK (stream_splitter);
+    if (res) {
+      GstCaps *peercaps = gst_pad_peer_get_caps (srcpad, filter);
+      if (peercaps)
+        gst_caps_merge (res, gst_caps_make_writable (peercaps));
+    } else {
+      res = gst_pad_peer_get_caps (srcpad, filter);
+    }
+    STREAMS_LOCK (stream_splitter);
+
+    if (G_UNLIKELY (cookie != stream_splitter->cookie)) {
+      if (res)
+        gst_caps_unref (res);
+      goto resync;
+    }
+    tmp = tmp->next;
+  }
+
+beach:
+  STREAMS_UNLOCK (stream_splitter);
+  return res;
+}
+
+static gboolean
+gst_stream_splitter_sink_setcaps (GstPad * pad, GstCaps * caps)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+  guint32 cookie;
+  GList *tmp;
+  gboolean res;
+
+  GST_DEBUG_OBJECT (stream_splitter, "caps %" GST_PTR_FORMAT, caps);
+
+  /* Try on all pads, choose the one that succeeds as the current stream */
+  STREAMS_LOCK (stream_splitter);
+
+resync:
+  if (G_UNLIKELY (stream_splitter->srcpads == NULL)) {
+    res = FALSE;
+    goto beach;
+  }
+
+  res = FALSE;
+  tmp = stream_splitter->srcpads;
+  cookie = stream_splitter->cookie;
+
+  while (tmp) {
+    GstPad *srcpad = (GstPad *) tmp->data;
+    GstCaps *peercaps;
+
+    STREAMS_UNLOCK (stream_splitter);
+    peercaps = gst_pad_peer_get_caps (srcpad, NULL);
+    if (peercaps) {
+      res = gst_caps_can_intersect (caps, peercaps);
+      gst_caps_unref (peercaps);
+    }
+    STREAMS_LOCK (stream_splitter);
+
+    if (G_UNLIKELY (cookie != stream_splitter->cookie))
+      goto resync;
+
+    if (res) {
+      /* FIXME : we need to switch properly */
+      GST_DEBUG_OBJECT (srcpad, "Setting caps on this pad was succesfull");
+      stream_splitter->current = srcpad;
+      goto beach;
+    }
+    tmp = tmp->next;
+  }
+
+beach:
+  STREAMS_UNLOCK (stream_splitter);
+  return res;
+}
+
+static gboolean
+gst_stream_splitter_src_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+
+  GST_DEBUG_OBJECT (pad, "%s", GST_EVENT_TYPE_NAME (event));
+
+  /* Forward upstream as is */
+  return gst_pad_push_event (stream_splitter->sinkpad, event);
+}
+
+static gboolean
+gst_stream_splitter_src_query (GstPad * pad, GstQuery * query)
+{
+  GstStreamSplitter *stream_splitter =
+      (GstStreamSplitter *) GST_PAD_PARENT (pad);
+
+  GST_DEBUG_OBJECT (pad, "%s", GST_QUERY_TYPE_NAME (query));
+
+  /* Forward upstream as is */
+  return gst_pad_peer_query (stream_splitter->sinkpad, query);
+}
+
+static void
+gst_stream_splitter_init (GstStreamSplitter * stream_splitter)
+{
+  stream_splitter->sinkpad =
+      gst_pad_new_from_static_template (&sink_template, "sink");
+  /* FIXME : No buffer alloc for the time being, it will resort to the fallback */
+  /* gst_pad_set_bufferalloc_function (stream_splitter->sinkpad, */
+  /*     gst_stream_splitter_buffer_alloc); */
+  gst_pad_set_chain_function (stream_splitter->sinkpad,
+      gst_stream_splitter_chain);
+  gst_pad_set_event_function (stream_splitter->sinkpad,
+      gst_stream_splitter_sink_event);
+  gst_pad_set_getcaps_function (stream_splitter->sinkpad,
+      gst_stream_splitter_sink_getcaps);
+  gst_element_add_pad (GST_ELEMENT (stream_splitter), stream_splitter->sinkpad);
+
+  stream_splitter->lock = g_mutex_new ();
+}
+
+static GstPad *
+gst_stream_splitter_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
+{
+  GstStreamSplitter *stream_splitter = (GstStreamSplitter *) element;
+  GstPad *srcpad;
+
+  srcpad = gst_pad_new_from_static_template (&src_template, name);
+  gst_pad_set_event_function (srcpad, gst_stream_splitter_src_event);
+  gst_pad_set_query_function (srcpad, gst_stream_splitter_src_query);
+
+  STREAMS_LOCK (stream_splitter);
+  stream_splitter->srcpads = g_list_append (stream_splitter->srcpads, srcpad);
+  gst_pad_set_active (srcpad, TRUE);
+  gst_element_add_pad (element, srcpad);
+  stream_splitter->cookie++;
+  STREAMS_UNLOCK (stream_splitter);
+
+  return srcpad;
+}
+
+static void
+gst_stream_splitter_release_pad (GstElement * element, GstPad * pad)
+{
+  GstStreamSplitter *stream_splitter = (GstStreamSplitter *) element;
+  GList *tmp;
+
+  STREAMS_LOCK (stream_splitter);
+  tmp = g_list_find (stream_splitter->srcpads, pad);
+  if (tmp) {
+    GstPad *pad = (GstPad *) tmp->data;
+
+    stream_splitter->srcpads =
+        g_list_delete_link (stream_splitter->srcpads, tmp);
+    stream_splitter->cookie++;
+
+    if (pad == stream_splitter->current) {
+      /* Deactivate current flow */
+      GST_DEBUG_OBJECT (element, "Removed pad was the current one");
+      stream_splitter->current = NULL;
+    }
+
+    gst_element_remove_pad (element, pad);
+  }
+  STREAMS_UNLOCK (stream_splitter);
+
+  return;
+}
diff --git a/gst/encoding/gststreamsplitter.h b/gst/encoding/gststreamsplitter.h
new file mode 100644
index 0000000..b503c00
--- /dev/null
+++ b/gst/encoding/gststreamsplitter.h
@@ -0,0 +1,62 @@
+/* GStreamer Stream Splitter
+ * Copyright (C) 2010 Edward Hervey <edward.hervey@collabora.co.uk>
+ *           (C) 2009 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_STREAMSPLITTER_H__
+#define __GST_STREAMSPLITTER_H__
+
+#include <gst/gst.h>
+
+#define GST_TYPE_STREAM_SPLITTER               (gst_stream_splitter_get_type())
+#define GST_STREAM_SPLITTER(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STREAM_SPLITTER,GstStreamSplitter))
+#define GST_STREAM_SPLITTER_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STREAM_SPLITTER,GstStreamSplitterClass))
+#define GST_IS_STREAM_SPLITTER(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STREAM_SPLITTER))
+#define GST_IS_STREAM_SPLITTER_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STREAM_SPLITTER))
+
+typedef struct _GstStreamSplitter GstStreamSplitter;
+typedef struct _GstStreamSplitterClass GstStreamSplitterClass;
+
+struct _GstStreamSplitter {
+  GstElement parent;
+
+  GstPad *sinkpad;
+
+  /* lock protects:
+   * * the current pad
+   * * the list of srcpads
+   */
+  GMutex *lock;
+  /* Currently activated srcpad */
+  GstPad *current;
+  GList *srcpads;
+  guint32 cookie;
+
+  /* List of pending in-band events */
+  GList *pending_events;
+};
+
+struct _GstStreamSplitterClass {
+  GstElementClass parent;
+};
+
+GType gst_stream_splitter_get_type(void);
+
+GstElement *gst_stream_splitter_new (gchar *name);
+
+#endif /* __GST_STREAMSPLITTER_H__ */
diff --git a/gst/gdp/Makefile.am b/gst/gdp/Makefile.am
new file mode 100644
index 0000000..a8aba8b
--- /dev/null
+++ b/gst/gdp/Makefile.am
@@ -0,0 +1,29 @@
+plugin_LTLIBRARIES = libgstgdp.la
+
+libgstgdp_la_SOURCES = \
+	gstgdp.c \
+	gstgdppay.c \
+	gstgdpdepay.c
+
+libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_GDP_LIBS)
+libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS =			\
+		 gstgdppay.h		\
+		 gstgdpdepay.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstgdp -:SHARED libgstgdp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstgdp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \
+	 -:LDFLAGS $(libgstgdp_la_LDFLAGS) \
+	           $(libgstgdp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in
new file mode 100644
index 0000000..075389f
--- /dev/null
+++ b/gst/gdp/Makefile.in
@@ -0,0 +1,795 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/gdp
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstgdp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstgdp_la_OBJECTS = libgstgdp_la-gstgdp.lo \
+	libgstgdp_la-gstgdppay.lo libgstgdp_la-gstgdpdepay.lo
+libgstgdp_la_OBJECTS = $(am_libgstgdp_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstgdp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstgdp_la_CFLAGS) $(CFLAGS) \
+	$(libgstgdp_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstgdp_la_SOURCES)
+DIST_SOURCES = $(libgstgdp_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstgdp.la
+libgstgdp_la_SOURCES = \
+	gstgdp.c \
+	gstgdppay.c \
+	gstgdpdepay.c
+
+libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_GDP_LIBS)
+libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+		 gstgdppay.h		\
+		 gstgdpdepay.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/gdp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/gdp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstgdp.la: $(libgstgdp_la_OBJECTS) $(libgstgdp_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstgdp_la_LINK) -rpath $(plugindir) $(libgstgdp_la_OBJECTS) $(libgstgdp_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdppay.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstgdp_la-gstgdp.lo: gstgdp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdp.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdp.Tpo -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdp.Tpo $(DEPDIR)/libgstgdp_la-gstgdp.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgdp.c' object='libgstgdp_la-gstgdp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c
+
+libgstgdp_la-gstgdppay.lo: gstgdppay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdppay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo $(DEPDIR)/libgstgdp_la-gstgdppay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgdppay.c' object='libgstgdp_la-gstgdppay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c
+
+libgstgdp_la-gstgdpdepay.lo: gstgdpdepay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdpdepay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo $(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstgdpdepay.c' object='libgstgdp_la-gstgdpdepay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstgdp -:SHARED libgstgdp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstgdp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \
+	 -:LDFLAGS $(libgstgdp_la_LDFLAGS) \
+	           $(libgstgdp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/gdp/README b/gst/gdp/README
new file mode 100644
index 0000000..6b84afc
--- /dev/null
+++ b/gst/gdp/README
@@ -0,0 +1,22 @@
+Sample pipelines:
+- replacing tcpserversink protocol=gdp with gdppay ! tcpserversink:
+  - raw audio:
+    - server:
+      gst-launch -v audiotestsrc ! gdppay version=0.2 ! tcpserversink
+    - client:
+      gst-launch -v tcpclientsrc protocol=gdp ! alsasink sync=FALSE
+
+  - vorbis packets:
+    - server:
+      gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! gdppay version=0.2 ! tcpserversink
+    - client:
+      gst-launch -v tcpclientsrc protocol=gdp ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+
+  - ogg packets:
+    - server:
+      gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! oggmux ! gdppay version=0.2 ! tcpserversink
+    - client:
+      gst-launch -v tcpclientsrc protocol=gdp ! oggdemux ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+
+  In all the client pipelines, tcpclientsrc protocol=gdp can be replaced with
+  tcpclientsrc ! gdpdepay
diff --git a/gst/gdp/gstgdp.c b/gst/gdp/gstgdp.c
new file mode 100644
index 0000000..31d3259
--- /dev/null
+++ b/gst/gdp/gstgdp.c
@@ -0,0 +1,46 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gst/dataprotocol/dataprotocol.h>
+
+#include "gstgdppay.h"
+#include "gstgdpdepay.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_dp_init ();
+
+  if (!gst_gdp_depay_plugin_init (plugin))
+    return FALSE;
+
+  if (!gst_gdp_pay_plugin_init (plugin))
+    return FALSE;
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR,
+    "gdp",
+    "Payload/depayload GDP packets", plugin_init,
+    VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/gdp/gstgdpdepay.c b/gst/gdp/gstgdpdepay.c
new file mode 100644
index 0000000..b608977
--- /dev/null
+++ b/gst/gdp/gstgdpdepay.c
@@ -0,0 +1,479 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-gdpdepay
+ * @see_also: gdppay
+ *
+ * This element depayloads GStreamer Data Protocol buffers back to deserialized
+ * buffers and events.
+ *
+ * <refsect2>
+ * |[
+ * gst-launch -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink
+ * ]| This pipeline plays back a serialized video stream as created in the
+ * example for gdppay.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/dataprotocol/dataprotocol.h>
+
+#include "gstgdpdepay.h"
+
+enum
+{
+  PROP_0,
+};
+
+static GstStaticPadTemplate gdp_depay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-gdp"));
+
+static GstStaticPadTemplate gdp_depay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (gst_gdp_depay_debug);
+#define GST_CAT_DEFAULT gst_gdp_depay_debug
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_gdp_depay_debug, "gdpdepay", 0, \
+    "GDP depayloader");
+#define gst_gdp_depay_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGDPDepay, gst_gdp_depay,
+    GST_TYPE_ELEMENT, _do_init);
+
+static gboolean gst_gdp_depay_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_gdp_depay_src_event (GstPad * pad, GstEvent * event);
+
+static GstFlowReturn gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer);
+
+static GstStateChangeReturn gst_gdp_depay_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void gst_gdp_depay_finalize (GObject * object);
+
+static void
+gst_gdp_depay_class_init (GstGDPDepayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "GDP Depayloader", "GDP/Depayloader",
+      "Depayloads GStreamer Data Protocol buffers",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gdp_depay_sink_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gdp_depay_src_template));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_gdp_depay_change_state);
+  gobject_class->finalize = gst_gdp_depay_finalize;
+}
+
+static void
+gst_gdp_depay_init (GstGDPDepay * gdpdepay)
+{
+  gdpdepay->sinkpad =
+      gst_pad_new_from_static_template (&gdp_depay_sink_template, "sink");
+  gst_pad_set_chain_function (gdpdepay->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_depay_chain));
+  gst_pad_set_event_function (gdpdepay->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_depay_sink_event));
+  gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->sinkpad);
+
+  gdpdepay->srcpad =
+      gst_pad_new_from_static_template (&gdp_depay_src_template, "src");
+  gst_pad_set_event_function (gdpdepay->srcpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_depay_src_event));
+  /* our caps will always be decided by the incoming GDP caps buffers */
+  gst_pad_use_fixed_caps (gdpdepay->srcpad);
+  gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->srcpad);
+
+  gdpdepay->adapter = gst_adapter_new ();
+}
+
+static void
+gst_gdp_depay_finalize (GObject * gobject)
+{
+  GstGDPDepay *this;
+
+  this = GST_GDP_DEPAY (gobject);
+  if (this->caps)
+    gst_caps_unref (this->caps);
+  g_free (this->header);
+  gst_adapter_clear (this->adapter);
+  g_object_unref (this->adapter);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject));
+}
+
+static gboolean
+gst_gdp_depay_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstGDPDepay *this;
+  gboolean res = TRUE;
+
+  this = GST_GDP_DEPAY (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+      /* forward flush start */
+      res = gst_pad_push_event (this->srcpad, event);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      /* clear adapter on flush */
+      gst_adapter_clear (this->adapter);
+      /* forward flush stop */
+      res = gst_pad_push_event (this->srcpad, event);
+      break;
+    case GST_EVENT_EOS:
+      /* after EOS, we don't expect to output anything anymore */
+      res = gst_pad_push_event (this->srcpad, event);
+      break;
+    case GST_EVENT_SEGMENT:
+    case GST_EVENT_TAG:
+    case GST_EVENT_BUFFERSIZE:
+    default:
+      /* we unref most events as we take them from the datastream */
+      gst_event_unref (event);
+      break;
+  }
+  gst_object_unref (this);
+
+  return res;
+}
+
+static gboolean
+gst_gdp_depay_src_event (GstPad * pad, GstEvent * event)
+{
+  GstGDPDepay *this;
+  gboolean res = TRUE;
+
+  this = GST_GDP_DEPAY (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      /* we refuse seek for now. */
+      gst_event_unref (event);
+      res = FALSE;
+      break;
+    case GST_EVENT_QOS:
+    case GST_EVENT_NAVIGATION:
+    default:
+      /* everything else is passed */
+      res = gst_pad_push_event (this->sinkpad, event);
+      break;
+  }
+  gst_object_unref (this);
+
+  return res;
+}
+
+static GstFlowReturn
+gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstGDPDepay *this;
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstCaps *caps;
+  GstBuffer *buf;
+  GstEvent *event;
+  guint available;
+
+  this = GST_GDP_DEPAY (gst_pad_get_parent (pad));
+
+  /* On DISCONT, get rid of accumulated data. We assume a buffer after the
+   * DISCONT contains (part of) a new valid header, if not we error because we
+   * lost sync */
+  if (GST_BUFFER_IS_DISCONT (buffer)) {
+    gst_adapter_clear (this->adapter);
+    this->state = GST_GDP_DEPAY_STATE_HEADER;
+  }
+  gst_adapter_push (this->adapter, buffer);
+
+  while (TRUE) {
+    switch (this->state) {
+      case GST_GDP_DEPAY_STATE_HEADER:
+      {
+        guint8 *header;
+
+        /* collect a complete header, validate and store the header. Figure out
+         * the payload length and switch to the PAYLOAD state */
+        available = gst_adapter_available (this->adapter);
+        if (available < GST_DP_HEADER_LENGTH)
+          goto done;
+
+        GST_LOG_OBJECT (this, "reading GDP header from adapter");
+        header = gst_adapter_take (this->adapter, GST_DP_HEADER_LENGTH);
+        if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header)) {
+          g_free (header);
+          goto header_validate_error;
+        }
+
+        /* store types and payload length. Also store the header, which we need
+         * to make the payload. */
+        this->payload_length = gst_dp_header_payload_length (header);
+        this->payload_type = gst_dp_header_payload_type (header);
+        /* free previous header and store new one. */
+        g_free (this->header);
+        this->header = header;
+
+        GST_LOG_OBJECT (this,
+            "read GDP header, payload size %d, payload type %d, switching to state PAYLOAD",
+            this->payload_length, this->payload_type);
+        this->state = GST_GDP_DEPAY_STATE_PAYLOAD;
+        break;
+      }
+      case GST_GDP_DEPAY_STATE_PAYLOAD:
+      {
+        /* in this state we wait for all the payload data to be available in the
+         * adapter. Then we switch to the state where we actually process the
+         * payload. */
+        available = gst_adapter_available (this->adapter);
+        if (available < this->payload_length)
+          goto done;
+
+        /* change state based on type */
+        if (this->payload_type == GST_DP_PAYLOAD_BUFFER) {
+          GST_LOG_OBJECT (this, "switching to state BUFFER");
+          this->state = GST_GDP_DEPAY_STATE_BUFFER;
+        } else if (this->payload_type == GST_DP_PAYLOAD_CAPS) {
+          GST_LOG_OBJECT (this, "switching to state CAPS");
+          this->state = GST_GDP_DEPAY_STATE_CAPS;
+        } else if (this->payload_type >= GST_DP_PAYLOAD_EVENT_NONE) {
+          GST_LOG_OBJECT (this, "switching to state EVENT");
+          this->state = GST_GDP_DEPAY_STATE_EVENT;
+        } else {
+          goto wrong_type;
+        }
+
+        if (this->payload_length) {
+          const guint8 *data;
+          gboolean res;
+
+          data = gst_adapter_map (this->adapter, this->payload_length);
+          res = gst_dp_validate_payload (GST_DP_HEADER_LENGTH, this->header,
+              data);
+          gst_adapter_unmap (this->adapter, 0);
+
+          if (!res)
+            goto payload_validate_error;
+        }
+
+        break;
+      }
+      case GST_GDP_DEPAY_STATE_BUFFER:
+      {
+        /* if we receive a buffer without caps first, we error out */
+        if (!this->caps)
+          goto no_caps;
+
+        GST_LOG_OBJECT (this, "reading GDP buffer from adapter");
+        buf = gst_dp_buffer_from_header (GST_DP_HEADER_LENGTH, this->header);
+        if (!buf)
+          goto buffer_failed;
+
+        /* now take the payload if there is any */
+        if (this->payload_length > 0) {
+          guint8 *payload;
+
+          payload = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+          gst_adapter_copy (this->adapter, payload, 0, this->payload_length);
+          gst_buffer_unmap (buf, payload, this->payload_length);
+
+          gst_adapter_flush (this->adapter, this->payload_length);
+        }
+
+        /* set caps and push */
+        GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %"
+            GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT
+            ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT
+            ", size %" G_GSIZE_FORMAT ", flags 0x%x",
+            buf,
+            GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+            GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
+            GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf),
+            gst_buffer_get_size (buf), GST_BUFFER_FLAGS (buf));
+        ret = gst_pad_push (this->srcpad, buf);
+        if (ret != GST_FLOW_OK)
+          goto push_error;
+
+        GST_LOG_OBJECT (this, "switching to state HEADER");
+        this->state = GST_GDP_DEPAY_STATE_HEADER;
+        break;
+      }
+      case GST_GDP_DEPAY_STATE_CAPS:
+      {
+        guint8 *payload;
+
+        /* take the payload of the caps */
+        GST_LOG_OBJECT (this, "reading GDP caps from adapter");
+        payload = gst_adapter_take (this->adapter, this->payload_length);
+        caps = gst_dp_caps_from_packet (GST_DP_HEADER_LENGTH, this->header,
+            payload);
+        g_free (payload);
+        if (!caps)
+          goto caps_failed;
+
+        GST_DEBUG_OBJECT (this, "deserialized caps %" GST_PTR_FORMAT, caps);
+        gst_caps_replace (&(this->caps), caps);
+        gst_pad_set_caps (this->srcpad, caps);
+        /* drop the creation ref we still have */
+        gst_caps_unref (caps);
+
+        GST_LOG_OBJECT (this, "switching to state HEADER");
+        this->state = GST_GDP_DEPAY_STATE_HEADER;
+        break;
+      }
+      case GST_GDP_DEPAY_STATE_EVENT:
+      {
+        guint8 *payload;
+
+        GST_LOG_OBJECT (this, "reading GDP event from adapter");
+
+        /* adapter doesn't like 0 length payload */
+        if (this->payload_length > 0)
+          payload = gst_adapter_take (this->adapter, this->payload_length);
+        else
+          payload = NULL;
+        event = gst_dp_event_from_packet (GST_DP_HEADER_LENGTH, this->header,
+            payload);
+        g_free (payload);
+        if (!event)
+          goto event_failed;
+
+        GST_DEBUG_OBJECT (this, "deserialized event %p of type %s, pushing",
+            event, gst_event_type_get_name (event->type));
+        gst_pad_push_event (this->srcpad, event);
+
+        GST_LOG_OBJECT (this, "switching to state HEADER");
+        this->state = GST_GDP_DEPAY_STATE_HEADER;
+        break;
+      }
+    }
+  }
+
+done:
+  gst_object_unref (this);
+  return ret;
+
+  /* ERRORS */
+header_validate_error:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("GDP packet header does not validate"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+payload_validate_error:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("GDP packet payload does not validate"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+wrong_type:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("GDP packet header is of wrong type"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+no_caps:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("Received a buffer without first receiving caps"));
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+buffer_failed:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("could not create buffer from GDP packet"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+push_error:
+  {
+    GST_WARNING_OBJECT (this, "pushing depayloaded buffer returned %d", ret);
+    goto done;
+  }
+caps_failed:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("could not create caps from GDP packet"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+event_failed:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+        ("could not create event from GDP packet"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static GstStateChangeReturn
+gst_gdp_depay_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstGDPDepay *this = GST_GDP_DEPAY (element);
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (this->caps) {
+        gst_caps_unref (this->caps);
+        this->caps = NULL;
+      }
+      gst_adapter_clear (this->adapter);
+      break;
+    default:
+      break;
+  }
+  return ret;
+}
+
+gboolean
+gst_gdp_depay_plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "gdpdepay", GST_RANK_NONE,
+          GST_TYPE_GDP_DEPAY))
+    return FALSE;
+
+  return TRUE;
+}
diff --git a/gst/gdp/gstgdpdepay.h b/gst/gdp/gstgdpdepay.h
new file mode 100644
index 0000000..64b7db2
--- /dev/null
+++ b/gst/gdp/gstgdpdepay.h
@@ -0,0 +1,82 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GDP_DEPAY_H__
+#define __GST_GDP_DEPAY_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GDP_DEPAY \
+  (gst_gdp_depay_get_type())
+#define GST_GDP_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_DEPAY,GstGDPDepay))
+#define GST_GDP_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_DEPAY,GstGDPDepayClass))
+#define GST_IS_GDP_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_DEPAY))
+#define GST_IS_GDP_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_DEPAY))
+
+typedef enum {
+  GST_GDP_DEPAY_STATE_HEADER = 0,
+  GST_GDP_DEPAY_STATE_PAYLOAD,
+  GST_GDP_DEPAY_STATE_BUFFER,
+  GST_GDP_DEPAY_STATE_CAPS,
+  GST_GDP_DEPAY_STATE_EVENT,
+} GstGDPDepayState;
+
+
+typedef struct _GstGDPDepay GstGDPDepay;
+typedef struct _GstGDPDepayClass GstGDPDepayClass;
+
+/**
+ * GstGDPDepay:
+ *
+ * Private gdpdepay element structure.
+ */
+struct _GstGDPDepay
+{
+  GstElement element;
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  GstAdapter *adapter;
+  GstGDPDepayState state;
+  GstCaps *caps;
+
+  guint8 *header;
+  guint32 payload_length;
+  GstDPPayloadType payload_type;
+};
+
+struct _GstGDPDepayClass
+{
+  GstElementClass parent_class;
+};
+
+gboolean gst_gdp_depay_plugin_init (GstPlugin * plugin);
+
+GType gst_gdp_depay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GDP_DEPAY_H__ */
diff --git a/gst/gdp/gstgdppay.c b/gst/gdp/gstgdppay.c
new file mode 100644
index 0000000..6c59dfa
--- /dev/null
+++ b/gst/gdp/gstgdppay.c
@@ -0,0 +1,895 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-gdppay
+ * @see_also: gdpdepay
+ *
+ * This element payloads GStreamer buffers and events using the
+ * GStreamer Data Protocol.
+ *
+ * <refsect2>
+ * |[
+ * gst-launch -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp
+ * ]| This pipeline creates a serialized video stream that can be played back
+ * with the example shown in gdpdepay.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/dataprotocol/dataprotocol.h>
+
+#include "gstgdppay.h"
+
+static GstStaticPadTemplate gdp_pay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gdp_pay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-gdp"));
+
+GST_DEBUG_CATEGORY_STATIC (gst_gdp_pay_debug);
+#define GST_CAT_DEFAULT gst_gdp_pay_debug
+
+#define DEFAULT_CRC_HEADER TRUE
+#define DEFAULT_CRC_PAYLOAD FALSE
+#define DEFAULT_VERSION GST_DP_VERSION_1_0
+
+enum
+{
+  PROP_0,
+  PROP_CRC_HEADER,
+  PROP_CRC_PAYLOAD,
+  PROP_VERSION,
+};
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_gdp_pay_debug, "gdppay", 0, \
+    "GDP payloader");
+#define gst_gdp_pay_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGDPPay, gst_gdp_pay, GST_TYPE_ELEMENT, _do_init);
+
+static void gst_gdp_pay_reset (GstGDPPay * this);
+
+static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_gdp_pay_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event);
+
+static GstStateChangeReturn gst_gdp_pay_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void gst_gdp_pay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_gdp_pay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void gst_gdp_pay_finalize (GObject * gobject);
+
+static void
+gst_gdp_pay_class_init (GstGDPPayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->set_property = gst_gdp_pay_set_property;
+  gobject_class->get_property = gst_gdp_pay_get_property;
+  gobject_class->finalize = gst_gdp_pay_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_CRC_HEADER,
+      g_param_spec_boolean ("crc-header", "CRC Header",
+          "Calculate and store a CRC checksum on the header",
+          DEFAULT_CRC_HEADER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CRC_PAYLOAD,
+      g_param_spec_boolean ("crc-payload", "CRC Payload",
+          "Calculate and store a CRC checksum on the payload",
+          DEFAULT_CRC_PAYLOAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_VERSION,
+      g_param_spec_enum ("version", "Version",
+          "Version of the GStreamer Data Protocol",
+          GST_TYPE_DP_VERSION, DEFAULT_VERSION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "GDP Payloader", "GDP/Payloader",
+      "Payloads GStreamer Data Protocol buffers",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gdp_pay_sink_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gdp_pay_src_template));
+
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_gdp_pay_change_state);
+}
+
+static void
+gst_gdp_pay_init (GstGDPPay * gdppay)
+{
+  gdppay->sinkpad =
+      gst_pad_new_from_static_template (&gdp_pay_sink_template, "sink");
+  gst_pad_set_chain_function (gdppay->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_pay_chain));
+  gst_pad_set_event_function (gdppay->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_pay_sink_event));
+  gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->sinkpad);
+
+  gdppay->srcpad =
+      gst_pad_new_from_static_template (&gdp_pay_src_template, "src");
+  gst_pad_set_event_function (gdppay->srcpad,
+      GST_DEBUG_FUNCPTR (gst_gdp_pay_src_event));
+  gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->srcpad);
+
+  gdppay->crc_header = DEFAULT_CRC_HEADER;
+  gdppay->crc_payload = DEFAULT_CRC_PAYLOAD;
+  gdppay->header_flag = gdppay->crc_header | gdppay->crc_payload;
+  gdppay->version = DEFAULT_VERSION;
+  gdppay->offset = 0;
+
+  gdppay->packetizer = gst_dp_packetizer_new (gdppay->version);
+}
+
+static void
+gst_gdp_pay_finalize (GObject * gobject)
+{
+  GstGDPPay *this = GST_GDP_PAY (gobject);
+
+  gst_gdp_pay_reset (this);
+  gst_dp_packetizer_free (this->packetizer);
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject));
+}
+
+static void
+gst_gdp_pay_reset (GstGDPPay * this)
+{
+  GST_DEBUG_OBJECT (this, "Resetting GDP object");
+  /* clear the queued buffers */
+  while (this->queue) {
+    GstBuffer *buffer;
+
+    buffer = GST_BUFFER_CAST (this->queue->data);
+
+    /* delete buffer from queue now */
+    this->queue = g_list_delete_link (this->queue, this->queue);
+
+    gst_buffer_unref (buffer);
+  }
+  if (this->caps) {
+    gst_caps_unref (this->caps);
+    this->caps = NULL;
+  }
+  if (this->caps_buf) {
+    gst_buffer_unref (this->caps_buf);
+    this->caps_buf = NULL;
+  }
+  if (this->tag_buf) {
+    gst_buffer_unref (this->tag_buf);
+    this->tag_buf = NULL;
+  }
+  if (this->new_segment_buf) {
+    gst_buffer_unref (this->new_segment_buf);
+    this->new_segment_buf = NULL;
+  }
+  this->sent_streamheader = FALSE;
+  this->offset = 0;
+}
+
+/* set OFFSET and OFFSET_END with running count */
+static void
+gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+  GST_BUFFER_OFFSET (buffer) = this->offset;
+  GST_BUFFER_OFFSET_END (buffer) = this->offset + gst_buffer_get_size (buffer);
+  this->offset = GST_BUFFER_OFFSET_END (buffer);
+}
+
+static GstBuffer *
+gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps)
+{
+  GstBuffer *headerbuf;
+  GstBuffer *payloadbuf;
+  guint8 *header, *payload;
+  guint len, plen;
+
+  if (!this->packetizer->packet_from_caps (caps, this->header_flag, &len,
+          &header, &payload))
+    goto packet_failed;
+
+  GST_LOG_OBJECT (this, "creating GDP header and payload buffer from caps");
+  headerbuf = gst_buffer_new ();
+  gst_buffer_take_memory (headerbuf, -1,
+      gst_memory_new_wrapped (0, header, g_free, len, 0, len));
+
+  payloadbuf = gst_buffer_new ();
+  plen = gst_dp_header_payload_length (header);
+  gst_buffer_take_memory (payloadbuf, -1,
+      gst_memory_new_wrapped (0, payload, g_free, plen, 0, plen));
+
+  return gst_buffer_join (headerbuf, payloadbuf);
+
+  /* ERRORS */
+packet_failed:
+  {
+    GST_WARNING_OBJECT (this, "could not create GDP header from caps");
+    return NULL;
+  }
+}
+
+static GstBuffer *
+gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+  GstBuffer *headerbuf;
+  guint8 *header;
+  guint len;
+
+  if (!this->packetizer->header_from_buffer (buffer, this->header_flag, &len,
+          &header))
+    goto no_buffer;
+
+  GST_LOG_OBJECT (this, "creating GDP header and payload buffer from buffer");
+  headerbuf = gst_buffer_new ();
+  gst_buffer_take_memory (headerbuf, -1,
+      gst_memory_new_wrapped (0, header, g_free, len, 0, len));
+
+  /* we do not want to lose the ref on the incoming buffer */
+  gst_buffer_ref (buffer);
+
+  return gst_buffer_join (headerbuf, buffer);
+
+  /* ERRORS */
+no_buffer:
+  {
+    GST_WARNING_OBJECT (this, "could not create GDP header from buffer");
+    return NULL;
+  }
+}
+
+static GstBuffer *
+gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event)
+{
+  GstBuffer *headerbuf;
+  GstBuffer *payloadbuf;
+  guint8 *header, *payload;
+  guint len, plen;
+  gboolean ret;
+
+  ret =
+      this->packetizer->packet_from_event (event, this->header_flag, &len,
+      &header, &payload);
+  if (!ret)
+    goto no_event;
+
+  GST_LOG_OBJECT (this, "creating GDP header and payload buffer from event");
+  headerbuf = gst_buffer_new ();
+  gst_buffer_take_memory (headerbuf, -1,
+      gst_memory_new_wrapped (0, header, g_free, len, 0, len));
+
+  payloadbuf = gst_buffer_new ();
+  plen = gst_dp_header_payload_length (header);
+  if (plen && payload != NULL) {
+    gst_buffer_take_memory (payloadbuf, -1,
+        gst_memory_new_wrapped (0, payload, g_free, plen, 0, plen));
+  }
+
+  return gst_buffer_join (headerbuf, payloadbuf);
+
+  /* ERRORS */
+no_event:
+  {
+    GST_WARNING_OBJECT (this, "could not create GDP header from event %s (%d)",
+        gst_event_type_get_name (event->type), event->type);
+    return NULL;
+  }
+}
+
+
+/* set our caps with streamheader, based on the latest newsegment and caps,
+ * and (possibly) GDP-serialized buffers of the streamheaders on the src pad */
+static GstFlowReturn
+gst_gdp_pay_reset_streamheader (GstGDPPay * this)
+{
+  GstCaps *caps;
+  /* We use copies of these to avoid circular refcounts */
+  GstBuffer *new_segment_buf, *caps_buf, *tag_buf;
+  GstStructure *structure;
+  GstFlowReturn r = GST_FLOW_OK;
+  gboolean version_one_zero = TRUE;
+
+  GValue array = { 0 };
+  GValue value = { 0 };
+
+  GST_DEBUG_OBJECT (this, "start");
+  /* In version 0.2, we didn't need or send new segment or tags */
+  if (this->version == GST_DP_VERSION_0_2)
+    version_one_zero = FALSE;
+
+  if (version_one_zero) {
+    if (!this->new_segment_buf || !this->caps_buf) {
+      GST_DEBUG_OBJECT (this, "1.0, missing new_segment or caps, returning");
+      return GST_FLOW_OK;
+    }
+  } else {
+    if (!this->caps_buf) {
+      GST_DEBUG_OBJECT (this, "0.2, missing caps, returning");
+      return GST_FLOW_OK;
+    }
+  }
+
+  /* put copies of the buffers in a fixed list
+   * Stamp the buffers with offset and offset_end as well.
+   * We do this here so the offsets match the order the buffers go out in */
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  if (version_one_zero) {
+    gst_gdp_stamp_buffer (this, this->new_segment_buf);
+    GST_DEBUG_OBJECT (this, "1.0, appending copy of new segment buffer %p",
+        this->new_segment_buf);
+    new_segment_buf = gst_buffer_copy (this->new_segment_buf);
+    g_value_init (&value, GST_TYPE_BUFFER);
+    gst_value_set_buffer (&value, new_segment_buf);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+    gst_buffer_unref (new_segment_buf);
+
+    if (this->tag_buf) {
+      gst_gdp_stamp_buffer (this, this->tag_buf);
+      GST_DEBUG_OBJECT (this, "1.0, appending current tags buffer %p",
+          this->tag_buf);
+      tag_buf = this->tag_buf;
+      this->tag_buf = NULL;
+
+      g_value_init (&value, GST_TYPE_BUFFER);
+      gst_value_set_buffer (&value, tag_buf);
+      gst_value_array_append_value (&array, &value);
+      g_value_unset (&value);
+      gst_buffer_unref (tag_buf);
+    }
+  }
+
+  gst_gdp_stamp_buffer (this, this->caps_buf);
+  GST_DEBUG_OBJECT (this, "appending copy of caps buffer %p", this->caps_buf);
+  caps_buf = gst_buffer_copy (this->caps_buf);
+  g_value_init (&value, GST_TYPE_BUFFER);
+  gst_value_set_buffer (&value, caps_buf);
+  gst_value_array_append_value (&array, &value);
+  g_value_unset (&value);
+  gst_buffer_unref (caps_buf);
+
+  /* we also need to add GDP serializations of the streamheaders of the
+   * incoming caps */
+  structure = gst_caps_get_structure (this->caps, 0);
+  if (gst_structure_has_field (structure, "streamheader")) {
+    const GValue *sh;
+
+    GArray *buffers;
+
+    GstBuffer *buffer;
+
+    int i;
+
+    sh = gst_structure_get_value (structure, "streamheader");
+    buffers = g_value_peek_pointer (sh);
+    GST_DEBUG_OBJECT (this,
+        "Need to serialize %d incoming streamheader buffers on ours",
+        buffers->len);
+    for (i = 0; i < buffers->len; ++i) {
+      GValue *bufval;
+
+      GstBuffer *outbuffer;
+
+      bufval = &g_array_index (buffers, GValue, i);
+      buffer = g_value_peek_pointer (bufval);
+      /* this buffer is deserialized by gdpdepay as a regular buffer,
+         it needs IN_CAPS, because it's a streamheader - otherwise it
+         is mixed with regular data buffers */
+      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_IN_CAPS);
+      GST_BUFFER_OFFSET (buffer) = GST_BUFFER_OFFSET_NONE;
+      GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
+      GST_BUFFER_TIMESTAMP (buffer) = GST_CLOCK_TIME_NONE;
+
+      outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer);
+      if (!outbuffer) {
+        g_value_unset (&array);
+        goto no_buffer;
+      }
+
+      /* Setting IN_CAPS as other GDP event buffers */
+      GST_DEBUG_OBJECT (this,
+          "Setting IN_CAPS flag on outgoing buffer %" GST_PTR_FORMAT,
+          outbuffer);
+      GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+      GST_BUFFER_OFFSET (outbuffer) = GST_BUFFER_OFFSET_NONE;
+      GST_BUFFER_OFFSET_END (outbuffer) = GST_BUFFER_OFFSET_NONE;
+      GST_BUFFER_TIMESTAMP (outbuffer) = GST_CLOCK_TIME_NONE;
+
+      g_value_init (&value, GST_TYPE_BUFFER);
+      gst_value_set_buffer (&value, outbuffer);
+      gst_value_array_append_value (&array, &value);
+      g_value_unset (&value);
+
+      gst_buffer_unref (outbuffer);
+    }
+  } else {
+    GST_DEBUG_OBJECT (this, "no streamheader to serialize");
+  }
+
+  GST_DEBUG_OBJECT (this, "%d serialized buffers on streamheaders",
+      gst_value_array_get_size (&array));
+  caps = gst_caps_from_string ("application/x-gdp");
+  structure = gst_caps_get_structure (caps, 0);
+
+  gst_structure_set_value (structure, "streamheader", &array);
+  g_value_unset (&array);
+
+  GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps);
+  gst_pad_set_caps (this->srcpad, caps);
+
+  /* if these are our first ever buffers, send out new_segment first */
+  if (!this->sent_streamheader) {
+    GstEvent *event;
+    GstSegment segment;
+
+    gst_segment_init (&segment, GST_FORMAT_BYTES);
+    event = gst_event_new_segment (&segment);
+
+    GST_DEBUG_OBJECT (this, "Sending out new_segment event %p", event);
+    if (!gst_pad_push_event (this->srcpad, event)) {
+      GST_WARNING_OBJECT (this, "pushing new segment failed");
+      r = GST_FLOW_ERROR;
+      goto done;
+    }
+  }
+
+  /* push out these streamheader buffers, then flush our internal queue */
+  GST_DEBUG_OBJECT (this, "Pushing GDP new_segment buffer %p with offset %"
+      G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, this->new_segment_buf,
+      GST_BUFFER_OFFSET (this->new_segment_buf),
+      GST_BUFFER_OFFSET_END (this->new_segment_buf));
+  /* we stored these bufs with refcount 1, so make sure we keep a ref */
+  r = gst_pad_push (this->srcpad, gst_buffer_ref (this->new_segment_buf));
+  if (r != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (this, "pushing GDP newsegment buffer returned %d", r);
+    goto done;
+  }
+  if (this->tag_buf) {
+    GST_DEBUG_OBJECT (this, "Pushing GDP tag buffer %p", this->tag_buf);
+    /* we stored these bufs with refcount 1, so make sure we keep a ref */
+    r = gst_pad_push (this->srcpad, gst_buffer_ref (this->tag_buf));
+    if (r != GST_FLOW_OK) {
+      GST_WARNING_OBJECT (this, "pushing GDP tag buffer returned %d", r);
+      goto done;
+    }
+  }
+  GST_DEBUG_OBJECT (this, "Pushing GDP caps buffer %p", this->caps_buf);
+  r = gst_pad_push (this->srcpad, gst_buffer_ref (this->caps_buf));
+  if (r != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (this, "pushing GDP caps buffer returned %d", r);
+    goto done;
+  }
+  this->sent_streamheader = TRUE;
+  GST_DEBUG_OBJECT (this, "need to push %d queued buffers",
+      g_list_length (this->queue));
+  while (this->queue) {
+    GstBuffer *buffer;
+
+    buffer = GST_BUFFER_CAST (this->queue->data);
+    GST_DEBUG_OBJECT (this, "Pushing queued GDP buffer %p", buffer);
+
+    /* delete buffer from queue now */
+    this->queue = g_list_delete_link (this->queue, this->queue);
+
+    /* set caps and push */
+    r = gst_pad_push (this->srcpad, buffer);
+    if (r != GST_FLOW_OK) {
+      GST_WARNING_OBJECT (this, "pushing queued GDP buffer returned %d", r);
+      goto done;
+    }
+  }
+
+done:
+  gst_caps_unref (caps);
+  GST_DEBUG_OBJECT (this, "stop");
+  return r;
+
+  /* ERRORS */
+no_buffer:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL),
+        ("failed to create GDP buffer from streamheader"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* queue a buffer internally if we haven't sent streamheader buffers yet;
+ * otherwise, just push on, this takes ownership of the buffer. */
+static GstFlowReturn
+gst_gdp_queue_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+  if (this->sent_streamheader) {
+    GST_LOG_OBJECT (this, "Pushing GDP buffer %p, caps %" GST_PTR_FORMAT,
+        buffer, this->caps);
+    return gst_pad_push (this->srcpad, buffer);
+  }
+
+  /* store it on an internal queue. buffer remains reffed. */
+  this->queue = g_list_append (this->queue, buffer);
+  GST_DEBUG_OBJECT (this, "streamheader not sent yet, "
+      "queued buffer %p, now %d buffers queued",
+      buffer, g_list_length (this->queue));
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstGDPPay *this;
+#if 0
+  GstCaps *caps;
+#endif
+  GstBuffer *outbuffer;
+  GstFlowReturn ret;
+
+  this = GST_GDP_PAY (gst_pad_get_parent (pad));
+
+  /* we should have received a new_segment before, otherwise it's a bug.
+   * fake one in that case */
+  if (!this->new_segment_buf) {
+    GstEvent *event;
+    GstSegment segment;
+
+    GST_WARNING_OBJECT (this,
+        "did not receive new-segment before first buffer");
+    gst_segment_init (&segment, GST_FORMAT_BYTES);
+    event = gst_event_new_segment (&segment);
+    outbuffer = gst_gdp_buffer_from_event (this, event);
+    gst_event_unref (event);
+
+    /* GDP 0.2 doesn't know about new-segment, so this is not fatal */
+    if (!outbuffer) {
+      GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL),
+          ("Could not create GDP buffer from new segment event"));
+    } else {
+      GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer);
+      GST_BUFFER_DURATION (outbuffer) = 0;
+      GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+      GST_DEBUG_OBJECT (this, "Storing buffer %p as new_segment_buf",
+          outbuffer);
+      this->new_segment_buf = outbuffer;
+    }
+  }
+#if 0
+  /* make sure we've received caps before */
+  caps = gst_buffer_get_caps (buffer);
+  if (!this->caps && !caps)
+    goto no_caps;
+
+  /* if the caps have changed, process caps first */
+  if (caps && !gst_caps_is_equal (this->caps, caps)) {
+    GST_LOG_OBJECT (this, "caps changed to %p, %" GST_PTR_FORMAT, caps, caps);
+    gst_caps_replace (&(this->caps), caps);
+    outbuffer = gst_gdp_buffer_from_caps (this, caps);
+    if (!outbuffer)
+      goto no_caps_buffer;
+
+    GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer);
+    GST_BUFFER_DURATION (outbuffer) = 0;
+    GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+
+    if (this->caps_buf)
+      gst_buffer_unref (this->caps_buf);
+    this->caps_buf = outbuffer;
+    gst_gdp_pay_reset_streamheader (this);
+  }
+
+  if (caps)
+    gst_caps_unref (caps);
+#endif
+
+  /* create a GDP header packet,
+   * then create a GST buffer of the header packet and the buffer contents */
+  outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer);
+  if (!outbuffer)
+    goto no_buffer;
+
+  /* If the incoming buffer is IN_CAPS, that means we have it on the caps
+   * as streamheader, and we have serialized a GDP version of it and put it
+   * on our caps */
+  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_IN_CAPS)) {
+    GST_DEBUG_OBJECT (this, "Setting IN_CAPS flag on outgoing buffer %p",
+        outbuffer);
+    GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+  }
+
+  gst_gdp_stamp_buffer (this, outbuffer);
+  GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer);
+  GST_BUFFER_DURATION (outbuffer) = GST_BUFFER_DURATION (buffer);
+
+  ret = gst_gdp_queue_buffer (this, outbuffer);
+
+done:
+  gst_buffer_unref (buffer);
+  gst_object_unref (this);
+  return ret;
+
+  /* ERRORS */
+#if 0
+no_caps:
+  {
+    /* when returning a fatal error as a GstFlowReturn we must post an error
+     * message */
+    GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL),
+        ("first received buffer does not have caps set"));
+    if (caps)
+      gst_caps_unref (caps);
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+no_caps_buffer:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+        ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps));
+    gst_caps_unref (caps);
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+#endif
+no_buffer:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+        ("Could not create GDP buffer from buffer"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static gboolean
+gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstBuffer *outbuffer;
+  GstGDPPay *this = GST_GDP_PAY (gst_pad_get_parent (pad));
+  GstFlowReturn flowret;
+  GstCaps *caps;
+  gboolean ret = TRUE;
+
+  GST_DEBUG_OBJECT (this, "received event %p of type %s (%d)",
+      event, gst_event_type_get_name (event->type), event->type);
+
+  /* now turn the event into a buffer */
+  outbuffer = gst_gdp_buffer_from_event (this, event);
+  if (!outbuffer)
+    goto no_outbuffer;
+
+  GST_BUFFER_TIMESTAMP (outbuffer) = GST_EVENT_TIMESTAMP (event);
+  GST_BUFFER_DURATION (outbuffer) = 0;
+
+  /* if we got a new segment or tag event, we should put it on our streamheader,
+   * and not send it on */
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as new_segment_buf",
+          outbuffer);
+
+      if (this->new_segment_buf)
+        gst_buffer_unref (this->new_segment_buf);
+      this->new_segment_buf = outbuffer;
+
+      GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+      gst_gdp_pay_reset_streamheader (this);
+      break;
+    case GST_EVENT_CAPS:{
+      gst_event_parse_caps (event, &caps);
+      if (this->caps == NULL || !gst_caps_is_equal (this->caps, caps)) {
+        GST_INFO_OBJECT (pad, "caps changed to %" GST_PTR_FORMAT, caps);
+        gst_caps_replace (&this->caps, caps);
+        outbuffer = gst_gdp_buffer_from_caps (this, caps);
+        if (outbuffer == NULL)
+          goto no_buffer_from_caps;
+
+        GST_BUFFER_DURATION (outbuffer) = 0;
+        GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+        if (this->caps_buf)
+          gst_buffer_unref (this->caps_buf);
+        this->caps_buf = outbuffer;
+        gst_gdp_pay_reset_streamheader (this);
+      }
+      break;
+    }
+    case GST_EVENT_TAG:
+      GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as tag_buf",
+          outbuffer);
+
+      if (this->tag_buf)
+        gst_buffer_unref (this->tag_buf);
+      this->tag_buf = outbuffer;
+
+      GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_IN_CAPS);
+      gst_gdp_pay_reset_streamheader (this);
+      break;
+    default:
+      GST_DEBUG_OBJECT (this, "queuing GDP buffer %p of event %p", outbuffer,
+          event);
+      flowret = gst_gdp_queue_buffer (this, outbuffer);
+      if (flowret != GST_FLOW_OK)
+        goto push_error;
+      break;
+  }
+
+  /* if we have EOS, we should send on EOS ourselves */
+  if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+    GST_DEBUG_OBJECT (this, "Sending on EOS event %p", event);
+    /* ref, we unref later again */
+    ret = gst_pad_push_event (this->srcpad, gst_event_ref (event));
+  }
+
+done:
+  gst_event_unref (event);
+  gst_object_unref (this);
+
+  return ret;
+
+  /* ERRORS */
+no_outbuffer:
+  {
+    GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL),
+        ("Could not create GDP buffer from received event (type %s)",
+            gst_event_type_get_name (event->type)));
+    ret = FALSE;
+    goto done;
+  }
+no_buffer_from_caps:
+  {
+    GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+        ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps));
+    ret = FALSE;
+    goto done;
+  }
+push_error:
+  {
+    GST_WARNING_OBJECT (this, "queueing GDP event buffer returned %d", flowret);
+    ret = FALSE;
+    goto done;
+  }
+}
+
+static gboolean
+gst_gdp_pay_src_event (GstPad * pad, GstEvent * event)
+{
+  GstGDPPay *this;
+  gboolean res = TRUE;
+
+  this = GST_GDP_PAY (gst_pad_get_parent (pad));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      /* we refuse seek for now. */
+      gst_event_unref (event);
+      res = FALSE;
+      break;
+    case GST_EVENT_QOS:
+    case GST_EVENT_NAVIGATION:
+    default:
+      /* everything else is passed */
+      res = gst_pad_push_event (this->sinkpad, event);
+      break;
+  }
+  gst_object_unref (this);
+
+  return res;
+}
+
+static void
+gst_gdp_pay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstGDPPay *this;
+
+  g_return_if_fail (GST_IS_GDP_PAY (object));
+  this = GST_GDP_PAY (object);
+
+  switch (prop_id) {
+    case PROP_CRC_HEADER:
+      this->crc_header =
+          g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_HEADER : 0;
+      this->header_flag = this->crc_header | this->crc_payload;
+      break;
+    case PROP_CRC_PAYLOAD:
+      this->crc_payload =
+          g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_PAYLOAD : 0;
+      this->header_flag = this->crc_header | this->crc_payload;
+      break;
+    case PROP_VERSION:
+      this->version = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_gdp_pay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstGDPPay *this;
+
+  g_return_if_fail (GST_IS_GDP_PAY (object));
+  this = GST_GDP_PAY (object);
+
+  switch (prop_id) {
+    case PROP_CRC_HEADER:
+      g_value_set_boolean (value, this->crc_header);
+      break;
+    case PROP_CRC_PAYLOAD:
+      g_value_set_boolean (value, this->crc_payload);
+      break;
+    case PROP_VERSION:
+      g_value_set_enum (value, this->version);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstStateChangeReturn
+gst_gdp_pay_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstGDPPay *this = GST_GDP_PAY (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_gdp_pay_reset (this);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+gboolean
+gst_gdp_pay_plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "gdppay", GST_RANK_NONE, GST_TYPE_GDP_PAY))
+    return FALSE;
+
+  return TRUE;
+}
diff --git a/gst/gdp/gstgdppay.h b/gst/gdp/gstgdppay.h
new file mode 100644
index 0000000..3e280b5
--- /dev/null
+++ b/gst/gdp/gstgdppay.h
@@ -0,0 +1,81 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_GDP_PAY_H__
+#define __GST_GDP_PAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GDP_PAY \
+  (gst_gdp_pay_get_type())
+#define GST_GDP_PAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_PAY,GstGDPPay))
+#define GST_GDP_PAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_PAY,GstGDPPayClass))
+#define GST_IS_GDP_PAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_PAY))
+#define GST_IS_GDP_PAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_PAY))
+
+typedef struct _GstGDPPay GstGDPPay;
+typedef struct _GstGDPPayClass GstGDPPayClass;
+
+/**
+ * GstGDPPay:
+ *
+ * Private gdppay element structure.
+ */
+struct _GstGDPPay
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  GstCaps *caps; /* incoming caps */
+
+  GstBuffer *caps_buf;
+  GstBuffer *new_segment_buf;
+  GstBuffer *tag_buf;
+
+  gboolean sent_streamheader; /* TRUE after the first streamheaders are sent */
+  GList *queue; /* list of queued buffers before streamheaders are sent */
+  guint64 offset;
+
+  gboolean crc_header;
+  gboolean crc_payload;
+  GstDPHeaderFlag header_flag;
+  GstDPVersion version;
+  GstDPPacketizer *packetizer;
+};
+
+struct _GstGDPPayClass
+{
+  GstElementClass parent_class;
+};
+
+gboolean gst_gdp_pay_plugin_init (GstPlugin * plugin);
+
+GType gst_gdp_pay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GDP_PAY_H__ */
diff --git a/gst/playback/Makefile.am b/gst/playback/Makefile.am
new file mode 100644
index 0000000..dbe93ec
--- /dev/null
+++ b/gst/playback/Makefile.am
@@ -0,0 +1,68 @@
+# variables used for enum/marshal generation
+glib_enum_define = GST_PLAY
+glib_gen_prefix = gst_play
+glib_gen_basename = gstplay
+
+built_sources = gstplay-marshal.c
+built_headers = gstplay-marshal.h
+
+plugin_LTLIBRARIES = libgstplayback.la
+
+csp_cflags = -DCOLORSPACE=\"videoconvert\"
+
+libgstplayback_la_SOURCES = \
+	gstdecodebin2.c \
+	gsturidecodebin.c \
+	gstplayback.c \
+	gstplaybin2.c \
+	gstplaysink.c \
+	gstplay-enum.c \
+	gststreamselector.c \
+	gstsubtitleoverlay.c \
+	gstplaysinkvideoconvert.c \
+	gstplaysinkaudioconvert.c \
+	gststreamsynchronizer.c
+
+nodist_libgstplayback_la_SOURCES = $(built_sources)
+libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags)
+libgstplayback_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstplayback_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_LIBS)
+libgstplayback_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	gstplayback.h \
+	gstplaysink.h \
+	gstplay-enum.h \
+	gststreamselector.h \
+	gstrawcaps.h \
+	gstsubtitleoverlay.h \
+	gstplaysinkvideoconvert.h \
+	gstplaysinkaudioconvert.h \
+	gststreamsynchronizer.h
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+
+EXTRA_DIST = gstplay-marshal.list
+
+CLEANFILES = $(BUILT_SOURCES)
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstplayback -:SHARED libgstplayback \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstplayback_la_SOURCES) \
+	           $(nodist_libgstplayback_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \
+	 -:LDFLAGS $(libgstplayback_la_LDFLAGS) \
+	           $(libgstplayback_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/playback/Makefile.in b/gst/playback/Makefile.in
new file mode 100644
index 0000000..61f8abc
--- /dev/null
+++ b/gst/playback/Makefile.in
@@ -0,0 +1,974 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/gst-glib-gen.mak
+subdir = gst/playback
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstplayback_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1)
+am_libgstplayback_la_OBJECTS = libgstplayback_la-gstdecodebin2.lo \
+	libgstplayback_la-gsturidecodebin.lo \
+	libgstplayback_la-gstplayback.lo \
+	libgstplayback_la-gstplaybin2.lo \
+	libgstplayback_la-gstplaysink.lo \
+	libgstplayback_la-gstplay-enum.lo \
+	libgstplayback_la-gststreamselector.lo \
+	libgstplayback_la-gstsubtitleoverlay.lo \
+	libgstplayback_la-gstplaysinkvideoconvert.lo \
+	libgstplayback_la-gstplaysinkaudioconvert.lo \
+	libgstplayback_la-gststreamsynchronizer.lo
+am__objects_1 = libgstplayback_la-gstplay-marshal.lo
+nodist_libgstplayback_la_OBJECTS = $(am__objects_1)
+libgstplayback_la_OBJECTS = $(am_libgstplayback_la_OBJECTS) \
+	$(nodist_libgstplayback_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstplayback_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstplayback_la_CFLAGS) $(CFLAGS) \
+	$(libgstplayback_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstplayback_la_SOURCES) \
+	$(nodist_libgstplayback_la_SOURCES)
+DIST_SOURCES = $(libgstplayback_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# variables used for enum/marshal generation
+glib_enum_define = GST_PLAY
+glib_gen_prefix = gst_play
+glib_gen_basename = gstplay
+built_sources = gstplay-marshal.c
+built_headers = gstplay-marshal.h
+plugin_LTLIBRARIES = libgstplayback.la
+csp_cflags = -DCOLORSPACE=\"videoconvert\"
+libgstplayback_la_SOURCES = \
+	gstdecodebin2.c \
+	gsturidecodebin.c \
+	gstplayback.c \
+	gstplaybin2.c \
+	gstplaysink.c \
+	gstplay-enum.c \
+	gststreamselector.c \
+	gstsubtitleoverlay.c \
+	gstplaysinkvideoconvert.c \
+	gstplaysinkaudioconvert.c \
+	gststreamsynchronizer.c
+
+nodist_libgstplayback_la_SOURCES = $(built_sources)
+libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags)
+libgstplayback_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstplayback_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_LIBS)
+
+libgstplayback_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstplayback.h \
+	gstplaysink.h \
+	gstplay-enum.h \
+	gststreamselector.h \
+	gstrawcaps.h \
+	gstsubtitleoverlay.h \
+	gstplaysinkvideoconvert.h \
+	gstplaysinkaudioconvert.h \
+	gststreamsynchronizer.h
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+EXTRA_DIST = gstplay-marshal.list
+CLEANFILES = $(BUILT_SOURCES)
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/playback/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/playback/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstplayback.la: $(libgstplayback_la_OBJECTS) $(libgstplayback_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstplayback_la_LINK) -rpath $(plugindir) $(libgstplayback_la_OBJECTS) $(libgstplayback_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstdecodebin2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplay-enum.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplay-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplayback.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaybin2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysinkvideoconvert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gststreamselector.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gststreamsynchronizer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstsubtitleoverlay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gsturidecodebin.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstplayback_la-gstdecodebin2.lo: gstdecodebin2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstdecodebin2.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstdecodebin2.Tpo -c -o libgstplayback_la-gstdecodebin2.lo `test -f 'gstdecodebin2.c' || echo '$(srcdir)/'`gstdecodebin2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstdecodebin2.Tpo $(DEPDIR)/libgstplayback_la-gstdecodebin2.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstdecodebin2.c' object='libgstplayback_la-gstdecodebin2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstdecodebin2.lo `test -f 'gstdecodebin2.c' || echo '$(srcdir)/'`gstdecodebin2.c
+
+libgstplayback_la-gsturidecodebin.lo: gsturidecodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gsturidecodebin.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gsturidecodebin.Tpo -c -o libgstplayback_la-gsturidecodebin.lo `test -f 'gsturidecodebin.c' || echo '$(srcdir)/'`gsturidecodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gsturidecodebin.Tpo $(DEPDIR)/libgstplayback_la-gsturidecodebin.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsturidecodebin.c' object='libgstplayback_la-gsturidecodebin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gsturidecodebin.lo `test -f 'gsturidecodebin.c' || echo '$(srcdir)/'`gsturidecodebin.c
+
+libgstplayback_la-gstplayback.lo: gstplayback.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplayback.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplayback.Tpo -c -o libgstplayback_la-gstplayback.lo `test -f 'gstplayback.c' || echo '$(srcdir)/'`gstplayback.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplayback.Tpo $(DEPDIR)/libgstplayback_la-gstplayback.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplayback.c' object='libgstplayback_la-gstplayback.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplayback.lo `test -f 'gstplayback.c' || echo '$(srcdir)/'`gstplayback.c
+
+libgstplayback_la-gstplaybin2.lo: gstplaybin2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaybin2.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaybin2.Tpo -c -o libgstplayback_la-gstplaybin2.lo `test -f 'gstplaybin2.c' || echo '$(srcdir)/'`gstplaybin2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaybin2.Tpo $(DEPDIR)/libgstplayback_la-gstplaybin2.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplaybin2.c' object='libgstplayback_la-gstplaybin2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaybin2.lo `test -f 'gstplaybin2.c' || echo '$(srcdir)/'`gstplaybin2.c
+
+libgstplayback_la-gstplaysink.lo: gstplaysink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaysink.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaysink.Tpo -c -o libgstplayback_la-gstplaysink.lo `test -f 'gstplaysink.c' || echo '$(srcdir)/'`gstplaysink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaysink.Tpo $(DEPDIR)/libgstplayback_la-gstplaysink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplaysink.c' object='libgstplayback_la-gstplaysink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaysink.lo `test -f 'gstplaysink.c' || echo '$(srcdir)/'`gstplaysink.c
+
+libgstplayback_la-gstplay-enum.lo: gstplay-enum.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplay-enum.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplay-enum.Tpo -c -o libgstplayback_la-gstplay-enum.lo `test -f 'gstplay-enum.c' || echo '$(srcdir)/'`gstplay-enum.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplay-enum.Tpo $(DEPDIR)/libgstplayback_la-gstplay-enum.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplay-enum.c' object='libgstplayback_la-gstplay-enum.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplay-enum.lo `test -f 'gstplay-enum.c' || echo '$(srcdir)/'`gstplay-enum.c
+
+libgstplayback_la-gststreamselector.lo: gststreamselector.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gststreamselector.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gststreamselector.Tpo -c -o libgstplayback_la-gststreamselector.lo `test -f 'gststreamselector.c' || echo '$(srcdir)/'`gststreamselector.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gststreamselector.Tpo $(DEPDIR)/libgstplayback_la-gststreamselector.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gststreamselector.c' object='libgstplayback_la-gststreamselector.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gststreamselector.lo `test -f 'gststreamselector.c' || echo '$(srcdir)/'`gststreamselector.c
+
+libgstplayback_la-gstsubtitleoverlay.lo: gstsubtitleoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstsubtitleoverlay.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstsubtitleoverlay.Tpo -c -o libgstplayback_la-gstsubtitleoverlay.lo `test -f 'gstsubtitleoverlay.c' || echo '$(srcdir)/'`gstsubtitleoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstsubtitleoverlay.Tpo $(DEPDIR)/libgstplayback_la-gstsubtitleoverlay.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstsubtitleoverlay.c' object='libgstplayback_la-gstsubtitleoverlay.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstsubtitleoverlay.lo `test -f 'gstsubtitleoverlay.c' || echo '$(srcdir)/'`gstsubtitleoverlay.c
+
+libgstplayback_la-gstplaysinkvideoconvert.lo: gstplaysinkvideoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaysinkvideoconvert.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaysinkvideoconvert.Tpo -c -o libgstplayback_la-gstplaysinkvideoconvert.lo `test -f 'gstplaysinkvideoconvert.c' || echo '$(srcdir)/'`gstplaysinkvideoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaysinkvideoconvert.Tpo $(DEPDIR)/libgstplayback_la-gstplaysinkvideoconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplaysinkvideoconvert.c' object='libgstplayback_la-gstplaysinkvideoconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaysinkvideoconvert.lo `test -f 'gstplaysinkvideoconvert.c' || echo '$(srcdir)/'`gstplaysinkvideoconvert.c
+
+libgstplayback_la-gstplaysinkaudioconvert.lo: gstplaysinkaudioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaysinkaudioconvert.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Tpo -c -o libgstplayback_la-gstplaysinkaudioconvert.lo `test -f 'gstplaysinkaudioconvert.c' || echo '$(srcdir)/'`gstplaysinkaudioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Tpo $(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplaysinkaudioconvert.c' object='libgstplayback_la-gstplaysinkaudioconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaysinkaudioconvert.lo `test -f 'gstplaysinkaudioconvert.c' || echo '$(srcdir)/'`gstplaysinkaudioconvert.c
+
+libgstplayback_la-gststreamsynchronizer.lo: gststreamsynchronizer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gststreamsynchronizer.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gststreamsynchronizer.Tpo -c -o libgstplayback_la-gststreamsynchronizer.lo `test -f 'gststreamsynchronizer.c' || echo '$(srcdir)/'`gststreamsynchronizer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gststreamsynchronizer.Tpo $(DEPDIR)/libgstplayback_la-gststreamsynchronizer.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gststreamsynchronizer.c' object='libgstplayback_la-gststreamsynchronizer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gststreamsynchronizer.lo `test -f 'gststreamsynchronizer.c' || echo '$(srcdir)/'`gststreamsynchronizer.c
+
+libgstplayback_la-gstplay-marshal.lo: gstplay-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplay-marshal.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplay-marshal.Tpo -c -o libgstplayback_la-gstplay-marshal.lo `test -f 'gstplay-marshal.c' || echo '$(srcdir)/'`gstplay-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplay-marshal.Tpo $(DEPDIR)/libgstplayback_la-gstplay-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstplay-marshal.c' object='libgstplayback_la-gstplay-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplay-marshal.lo `test -f 'gstplay-marshal.c' || echo '$(srcdir)/'`gstplay-marshal.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstplayback -:SHARED libgstplayback \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstplayback_la_SOURCES) \
+	           $(nodist_libgstplayback_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \
+	 -:LDFLAGS $(libgstplayback_la_LDFLAGS) \
+	           $(libgstplayback_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
new file mode 100644
index 0000000..1c256e9
--- /dev/null
+++ b/gst/playback/gstdecodebin2.c
@@ -0,0 +1,4019 @@
+/* GStreamer
+ * Copyright (C) <2006> Edward Hervey <edward@fluendo.com>
+ * Copyright (C) <2009> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * Copyright (C) <2011> Hewlett-Packard Development Company, L.P.
+ *   Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-decodebin
+ *
+ * #GstBin that auto-magically constructs a decoding pipeline using available
+ * decoders and demuxers via auto-plugging.
+ *
+ * decodebin is considered stable now and replaces the old #decodebin element.
+ * #uridecodebin uses decodebin internally and is often more convenient to
+ * use, as it creates a suitable source element as well.
+ */
+
+/* Implementation notes:
+ *
+ * The following section describes how decodebin works internally.
+ *
+ * The first part of decodebin is its typefind element, which tries
+ * to determine the media type of the input stream. If the type is found
+ * autoplugging starts.
+ *
+ * decodebin internally organizes the elements it autoplugged into GstDecodeChains
+ * and GstDecodeGroups. A decode chain is a single chain of decoding, this
+ * means that if decodebin every autoplugs an element with two+ srcpads
+ * (e.g. a demuxer) this will end the chain and everything following this
+ * demuxer will be put into decode groups below the chain. Otherwise,
+ * if an element has a single srcpad that outputs raw data the decode chain
+ * is ended too and a GstDecodePad is stored and blocked.
+ *
+ * A decode group combines a number of chains that are created by a
+ * demuxer element. All those chains are connected through a multiqueue to
+ * the demuxer. A new group for the same demuxer is only created if the
+ * demuxer has signaled no-more-pads, in which case all following pads
+ * create a new chain in the new group.
+ *
+ * This continues until the top-level decode chain is complete. A decode
+ * chain is complete if it either ends with a blocked endpad, if autoplugging
+ * stopped because no suitable plugins could be found or if the active group
+ * is complete. A decode group on the other hand is complete if all child
+ * chains are complete.
+ *
+ * If this happens at some point, all endpads of all active groups are exposed.
+ * For this decodebin adds the endpads, signals no-more-pads and then unblocks
+ * them. Now playback starts.
+ *
+ * If one of the chains that end on a endpad receives EOS decodebin checks
+ * if all chains and groups are drained. In that case everything goes into EOS.
+ * If there is a chain where the active group is drained but there exist next
+ * groups, the active group is hidden (endpads are removed) and the next group
+ * is exposed. This means that in some cases more pads may be created even
+ * after the initial no-more-pads signal. This happens for example with
+ * so-called "chained oggs", most commonly found among ogg/vorbis internet
+ * radio streams.
+ *
+ * Note 1: If we're talking about blocked endpads this really means that the
+ * *target* pads of the endpads are blocked. Pads that are exposed to the outside
+ * should never ever be blocked!
+ *
+ * Note 2: If a group is complete and the parent's chain demuxer adds new pads
+ * but never signaled no-more-pads this additional pads will be ignored!
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+
+#include <string.h>
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils.h>
+
+#include "gstplay-marshal.h"
+#include "gstplay-enum.h"
+#include "gstplayback.h"
+#include "gstrawcaps.h"
+
+/* generic templates */
+static GstStaticPadTemplate decoder_bin_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate decoder_bin_src_template =
+GST_STATIC_PAD_TEMPLATE ("src%d",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (gst_decode_bin_debug);
+#define GST_CAT_DEFAULT gst_decode_bin_debug
+
+typedef struct _GstPendingPad GstPendingPad;
+typedef struct _GstDecodeElement GstDecodeElement;
+typedef struct _GstDecodeChain GstDecodeChain;
+typedef struct _GstDecodeGroup GstDecodeGroup;
+typedef struct _GstDecodePad GstDecodePad;
+typedef GstGhostPadClass GstDecodePadClass;
+typedef struct _GstDecodeBin GstDecodeBin;
+typedef struct _GstDecodeBinClass GstDecodeBinClass;
+
+#define GST_TYPE_DECODE_BIN             (gst_decode_bin_get_type())
+#define GST_DECODE_BIN_CAST(obj)        ((GstDecodeBin*)(obj))
+#define GST_DECODE_BIN(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DECODE_BIN,GstDecodeBin))
+#define GST_DECODE_BIN_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DECODE_BIN,GstDecodeBinClass))
+#define GST_IS_DECODE_BIN(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DECODE_BIN))
+#define GST_IS_DECODE_BIN_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DECODE_BIN))
+
+/**
+ *  GstDecodeBin:
+ *
+ *  The opaque #GstDecodeBin data structure
+ */
+struct _GstDecodeBin
+{
+  GstBin bin;                   /* we extend GstBin */
+
+  /* properties */
+  GstCaps *caps;                /* caps on which to stop decoding */
+  gchar *encoding;              /* encoding of subtitles */
+  gboolean use_buffering;       /* configure buffering on multiqueues */
+  gint low_percent;
+  gint high_percent;
+  guint max_size_bytes;
+  guint max_size_buffers;
+  guint64 max_size_time;
+  gboolean post_stream_topology;
+
+  GstElement *typefind;         /* this holds the typefind object */
+
+  GMutex *expose_lock;          /* Protects exposal and removal of groups */
+  GstDecodeChain *decode_chain; /* Top level decode chain */
+  gint nbpads;                  /* unique identifier for source pads */
+
+  GMutex *factories_lock;
+  guint32 factories_cookie;     /* Cookie from last time when factories was updated */
+  GList *factories;             /* factories we can use for selecting elements */
+
+  GMutex *subtitle_lock;        /* Protects changes to subtitles and encoding */
+  GList *subtitles;             /* List of elements with subtitle-encoding,
+                                 * protected by above mutex! */
+
+  gboolean have_type;           /* if we received the have_type signal */
+  guint have_type_id;           /* signal id for have-type from typefind */
+
+  gboolean async_pending;       /* async-start has been emited */
+
+  GMutex *dyn_lock;             /* lock protecting pad blocking */
+  gboolean shutdown;            /* if we are shutting down */
+  GList *blocked_pads;          /* pads that have set to block */
+
+  gboolean expose_allstreams;   /* Whether to expose unknow type streams or not */
+
+  gboolean upstream_seekable;   /* if upstream is seekable */
+};
+
+struct _GstDecodeBinClass
+{
+  GstBinClass parent_class;
+
+  /* signal fired when we found a pad that we cannot decode */
+  void (*unknown_type) (GstElement * element, GstPad * pad, GstCaps * caps);
+
+  /* signal fired to know if we continue trying to decode the given caps */
+    gboolean (*autoplug_continue) (GstElement * element, GstPad * pad,
+      GstCaps * caps);
+  /* signal fired to get a list of factories to try to autoplug */
+  GValueArray *(*autoplug_factories) (GstElement * element, GstPad * pad,
+      GstCaps * caps);
+  /* signal fired to sort the factories */
+  GValueArray *(*autoplug_sort) (GstElement * element, GstPad * pad,
+      GstCaps * caps, GValueArray * factories);
+  /* signal fired to select from the proposed list of factories */
+    GstAutoplugSelectResult (*autoplug_select) (GstElement * element,
+      GstPad * pad, GstCaps * caps, GstElementFactory * factory);
+
+  /* fired when the last group is drained */
+  void (*drained) (GstElement * element);
+};
+
+/* signals */
+enum
+{
+  SIGNAL_UNKNOWN_TYPE,
+  SIGNAL_AUTOPLUG_CONTINUE,
+  SIGNAL_AUTOPLUG_FACTORIES,
+  SIGNAL_AUTOPLUG_SELECT,
+  SIGNAL_AUTOPLUG_SORT,
+  SIGNAL_DRAINED,
+  LAST_SIGNAL
+};
+
+/* automatic sizes, while prerolling we buffer up to 2MB, we ignore time
+ * and buffers in this case. */
+#define AUTO_PREROLL_SIZE_BYTES                  2 * 1024 * 1024
+#define AUTO_PREROLL_SIZE_BUFFERS                0
+#define AUTO_PREROLL_NOT_SEEKABLE_SIZE_TIME      0
+#define AUTO_PREROLL_SEEKABLE_SIZE_TIME          10 * GST_SECOND
+
+/* whan playing, keep a max of 2MB of data but try to keep the number of buffers
+ * as low as possible (try to aim for 5 buffers) */
+#define AUTO_PLAY_SIZE_BYTES        2 * 1024 * 1024
+#define AUTO_PLAY_SIZE_BUFFERS      5
+#define AUTO_PLAY_SIZE_TIME         0
+
+#define DEFAULT_SUBTITLE_ENCODING NULL
+#define DEFAULT_USE_BUFFERING     FALSE
+#define DEFAULT_LOW_PERCENT       10
+#define DEFAULT_HIGH_PERCENT      99
+/* by default we use the automatic values above */
+#define DEFAULT_MAX_SIZE_BYTES    0
+#define DEFAULT_MAX_SIZE_BUFFERS  0
+#define DEFAULT_MAX_SIZE_TIME     0
+#define DEFAULT_POST_STREAM_TOPOLOGY FALSE
+#define DEFAULT_EXPOSE_ALL_STREAMS  TRUE
+
+/* Properties */
+enum
+{
+  PROP_0,
+  PROP_CAPS,
+  PROP_SUBTITLE_ENCODING,
+  PROP_SINK_CAPS,
+  PROP_USE_BUFFERING,
+  PROP_LOW_PERCENT,
+  PROP_HIGH_PERCENT,
+  PROP_MAX_SIZE_BYTES,
+  PROP_MAX_SIZE_BUFFERS,
+  PROP_MAX_SIZE_TIME,
+  PROP_POST_STREAM_TOPOLOGY,
+  PROP_EXPOSE_ALL_STREAMS,
+  PROP_LAST
+};
+
+static GstBinClass *parent_class;
+static guint gst_decode_bin_signals[LAST_SIGNAL] = { 0 };
+
+static GstStaticCaps default_raw_caps = GST_STATIC_CAPS (DEFAULT_RAW_CAPS);
+
+static void do_async_start (GstDecodeBin * dbin);
+static void do_async_done (GstDecodeBin * dbin);
+
+static void type_found (GstElement * typefind, guint probability,
+    GstCaps * caps, GstDecodeBin * decode_bin);
+
+static void decodebin_set_queue_size (GstDecodeBin * dbin,
+    GstElement * multiqueue, gboolean preroll);
+
+static gboolean gst_decode_bin_autoplug_continue (GstElement * element,
+    GstPad * pad, GstCaps * caps);
+static GValueArray *gst_decode_bin_autoplug_factories (GstElement *
+    element, GstPad * pad, GstCaps * caps);
+static GValueArray *gst_decode_bin_autoplug_sort (GstElement * element,
+    GstPad * pad, GstCaps * caps, GValueArray * factories);
+static GstAutoplugSelectResult gst_decode_bin_autoplug_select (GstElement *
+    element, GstPad * pad, GstCaps * caps, GstElementFactory * factory);
+
+static void gst_decode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_decode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_decode_bin_set_caps (GstDecodeBin * dbin, GstCaps * caps);
+static GstCaps *gst_decode_bin_get_caps (GstDecodeBin * dbin);
+static void caps_notify_cb (GstPad * pad, GParamSpec * unused,
+    GstDecodeChain * chain);
+
+static GstPad *find_sink_pad (GstElement * element);
+static GstStateChangeReturn gst_decode_bin_change_state (GstElement * element,
+    GstStateChange transition);
+
+#define EXPOSE_LOCK(dbin) G_STMT_START {				\
+    GST_LOG_OBJECT (dbin,						\
+		    "expose locking from thread %p",			\
+		    g_thread_self ());					\
+    g_mutex_lock (GST_DECODE_BIN_CAST(dbin)->expose_lock);		\
+    GST_LOG_OBJECT (dbin,						\
+		    "expose locked from thread %p",			\
+		    g_thread_self ());					\
+} G_STMT_END
+
+#define EXPOSE_UNLOCK(dbin) G_STMT_START {				\
+    GST_LOG_OBJECT (dbin,						\
+		    "expose unlocking from thread %p",			\
+		    g_thread_self ());					\
+    g_mutex_unlock (GST_DECODE_BIN_CAST(dbin)->expose_lock);		\
+} G_STMT_END
+
+#define DYN_LOCK(dbin) G_STMT_START {			\
+    GST_LOG_OBJECT (dbin,						\
+		    "dynlocking from thread %p",			\
+		    g_thread_self ());					\
+    g_mutex_lock (GST_DECODE_BIN_CAST(dbin)->dyn_lock);			\
+    GST_LOG_OBJECT (dbin,						\
+		    "dynlocked from thread %p",				\
+		    g_thread_self ());					\
+} G_STMT_END
+
+#define DYN_UNLOCK(dbin) G_STMT_START {			\
+    GST_LOG_OBJECT (dbin,						\
+		    "dynunlocking from thread %p",			\
+		    g_thread_self ());					\
+    g_mutex_unlock (GST_DECODE_BIN_CAST(dbin)->dyn_lock);		\
+} G_STMT_END
+
+#define SUBTITLE_LOCK(dbin) G_STMT_START {				\
+    GST_LOG_OBJECT (dbin,						\
+		    "subtitle locking from thread %p",			\
+		    g_thread_self ());					\
+    g_mutex_lock (GST_DECODE_BIN_CAST(dbin)->subtitle_lock);		\
+    GST_LOG_OBJECT (dbin,						\
+		    "subtitle lock from thread %p",			\
+		    g_thread_self ());					\
+} G_STMT_END
+
+#define SUBTITLE_UNLOCK(dbin) G_STMT_START {				\
+    GST_LOG_OBJECT (dbin,						\
+		    "subtitle unlocking from thread %p",		\
+		    g_thread_self ());					\
+    g_mutex_unlock (GST_DECODE_BIN_CAST(dbin)->subtitle_lock);		\
+} G_STMT_END
+
+struct _GstPendingPad
+{
+  GstPad *pad;
+  GstDecodeChain *chain;
+  gulong event_probe_id;
+};
+
+struct _GstDecodeElement
+{
+  GstElement *element;
+  GstElement *capsfilter;       /* Optional capsfilter for Parser/Convert */
+};
+
+/* GstDecodeGroup
+ *
+ * Streams belonging to the same group/chain of a media file
+ *
+ * When changing something here lock the parent chain!
+ */
+struct _GstDecodeGroup
+{
+  GstDecodeBin *dbin;
+  GstDecodeChain *parent;
+
+  GstElement *multiqueue;       /* Used for linking all child chains */
+  gulong overrunsig;            /* the overrun signal for multiqueue */
+
+  gboolean overrun;             /* TRUE if the multiqueue signaled overrun. This
+                                 * means that we should really expose the group */
+
+  gboolean no_more_pads;        /* TRUE if the demuxer signaled no-more-pads */
+  gboolean drained;             /* TRUE if the all children are drained */
+
+  GList *children;              /* List of GstDecodeChains in this group */
+
+  GList *reqpads;               /* List of RequestPads for multiqueue, there is
+                                 * exactly one RequestPad per child chain */
+};
+
+struct _GstDecodeChain
+{
+  GstDecodeGroup *parent;
+  GstDecodeBin *dbin;
+
+  GMutex *lock;                 /* Protects this chain and its groups */
+
+  GstPad *pad;                  /* srcpad that caused creation of this chain */
+
+  gboolean demuxer;             /* TRUE if elements->data is a demuxer */
+  GList *elements;              /* All elements in this group, first
+                                   is the latest and most downstream element */
+
+  /* Note: there are only groups if the last element of this chain
+   * is a demuxer, otherwise the chain will end with an endpad.
+   * The other way around this means, that endpad only exists if this
+   * chain doesn't end with a demuxer! */
+
+  GstDecodeGroup *active_group; /* Currently active group */
+  GList *next_groups;           /* head is newest group, tail is next group.
+                                   a new group will be created only if the head
+                                   group had no-more-pads. If it's only exposed
+                                   all new pads will be ignored! */
+  GList *pending_pads;          /* Pads that have no fixed caps yet */
+
+  GstDecodePad *endpad;         /* Pad of this chain that could be exposed */
+  gboolean deadend;             /* This chain is incomplete and can't be completed,
+                                   e.g. no suitable decoder could be found
+                                   e.g. stream got EOS without buffers
+                                 */
+  GstCaps *endcaps;             /* Caps that were used when linking to the endpad
+                                   or that resulted in the deadend
+                                 */
+
+  /* FIXME: This should be done directly via a thread! */
+  GList *old_groups;            /* Groups that should be freed later */
+};
+
+static void gst_decode_chain_free (GstDecodeChain * chain);
+static GstDecodeChain *gst_decode_chain_new (GstDecodeBin * dbin,
+    GstDecodeGroup * group, GstPad * pad);
+static void gst_decode_group_hide (GstDecodeGroup * group);
+static void gst_decode_group_free (GstDecodeGroup * group);
+static GstDecodeGroup *gst_decode_group_new (GstDecodeBin * dbin,
+    GstDecodeChain * chain);
+static gboolean gst_decode_chain_is_complete (GstDecodeChain * chain);
+static gboolean gst_decode_chain_expose (GstDecodeChain * chain,
+    GList ** endpads, gboolean * missing_plugin);
+static gboolean gst_decode_chain_is_drained (GstDecodeChain * chain);
+static gboolean gst_decode_group_is_complete (GstDecodeGroup * group);
+static GstPad *gst_decode_group_control_demuxer_pad (GstDecodeGroup * group,
+    GstPad * pad);
+static gboolean gst_decode_group_is_drained (GstDecodeGroup * group);
+
+static gboolean gst_decode_bin_expose (GstDecodeBin * dbin);
+
+#define CHAIN_MUTEX_LOCK(chain) G_STMT_START {				\
+    GST_LOG_OBJECT (chain->dbin,					\
+		    "locking chain %p from thread %p",			\
+		    chain, g_thread_self ());				\
+    g_mutex_lock (chain->lock);						\
+    GST_LOG_OBJECT (chain->dbin,					\
+		    "locked chain %p from thread %p",			\
+		    chain, g_thread_self ());				\
+} G_STMT_END
+
+#define CHAIN_MUTEX_UNLOCK(chain) G_STMT_START {                        \
+    GST_LOG_OBJECT (chain->dbin,					\
+		    "unlocking chain %p from thread %p",		\
+		    chain, g_thread_self ());				\
+    g_mutex_unlock (chain->lock);					\
+} G_STMT_END
+
+/* GstDecodePad
+ *
+ * GstPad private used for source pads of chains
+ */
+struct _GstDecodePad
+{
+  GstGhostPad parent;
+  GstDecodeBin *dbin;
+  GstDecodeChain *chain;
+
+  gboolean blocked;             /* the *target* pad is blocked */
+  gboolean exposed;             /* the pad is exposed */
+  gboolean drained;             /* an EOS has been seen on the pad */
+
+  gulong block_id;
+};
+
+GType gst_decode_pad_get_type (void);
+G_DEFINE_TYPE (GstDecodePad, gst_decode_pad, GST_TYPE_GHOST_PAD);
+#define GST_TYPE_DECODE_PAD (gst_decode_pad_get_type ())
+#define GST_DECODE_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DECODE_PAD,GstDecodePad))
+
+static GstDecodePad *gst_decode_pad_new (GstDecodeBin * dbin, GstPad * pad,
+    GstDecodeChain * chain);
+static void gst_decode_pad_activate (GstDecodePad * dpad,
+    GstDecodeChain * chain);
+static void gst_decode_pad_unblock (GstDecodePad * dpad);
+static void gst_decode_pad_set_blocked (GstDecodePad * dpad, gboolean blocked);
+
+static void gst_pending_pad_free (GstPendingPad * ppad);
+static GstProbeReturn pad_event_cb (GstPad * pad, GstProbeType type,
+    gpointer type_data, gpointer data);
+
+/********************************
+ * Standard GObject boilerplate *
+ ********************************/
+
+static void gst_decode_bin_class_init (GstDecodeBinClass * klass);
+static void gst_decode_bin_init (GstDecodeBin * decode_bin);
+static void gst_decode_bin_dispose (GObject * object);
+static void gst_decode_bin_finalize (GObject * object);
+
+static GType
+gst_decode_bin_get_type (void)
+{
+  static GType gst_decode_bin_type = 0;
+
+  if (!gst_decode_bin_type) {
+    static const GTypeInfo gst_decode_bin_info = {
+      sizeof (GstDecodeBinClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_decode_bin_class_init,
+      NULL,
+      NULL,
+      sizeof (GstDecodeBin),
+      0,
+      (GInstanceInitFunc) gst_decode_bin_init,
+      NULL
+    };
+
+    gst_decode_bin_type =
+        g_type_register_static (GST_TYPE_BIN, "GstDecodeBin",
+        &gst_decode_bin_info, 0);
+  }
+
+  return gst_decode_bin_type;
+}
+
+static gboolean
+_gst_boolean_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gboolean myboolean;
+
+  myboolean = g_value_get_boolean (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boolean (return_accu, myboolean);
+
+  /* stop emission if FALSE */
+  return myboolean;
+}
+
+/* we collect the first result */
+static gboolean
+_gst_array_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gpointer array;
+
+  array = g_value_get_boxed (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boxed (return_accu, array);
+
+  return FALSE;
+}
+
+static gboolean
+_gst_select_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  GstAutoplugSelectResult res;
+
+  res = g_value_get_enum (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_enum (return_accu, res);
+
+  return FALSE;
+}
+
+static gboolean
+_gst_array_hasvalue_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gpointer array;
+
+  array = g_value_get_boxed (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boxed (return_accu, array);
+
+  if (array != NULL)
+    return FALSE;
+
+  return TRUE;
+}
+
+static void
+gst_decode_bin_class_init (GstDecodeBinClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_klass->dispose = gst_decode_bin_dispose;
+  gobject_klass->finalize = gst_decode_bin_finalize;
+  gobject_klass->set_property = gst_decode_bin_set_property;
+  gobject_klass->get_property = gst_decode_bin_get_property;
+
+  /**
+   * GstDecodeBin::unknown-type:
+   * @bin: The decodebin.
+   * @pad: The new pad containing caps that cannot be resolved to a 'final'
+   *       stream type.
+   * @caps: The #GstCaps of the pad that cannot be resolved.
+   *
+   * This signal is emitted when a pad for which there is no further possible
+   * decoding is added to the decodebin.
+   */
+  gst_decode_bin_signals[SIGNAL_UNKNOWN_TYPE] =
+      g_signal_new ("unknown-type", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass, unknown_type),
+      NULL, NULL, gst_marshal_VOID__OBJECT_BOXED, G_TYPE_NONE, 2,
+      GST_TYPE_PAD, GST_TYPE_CAPS);
+
+  /**
+   * GstDecodeBin::autoplug-continue:
+   * @bin: The decodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps found.
+   *
+   * This signal is emitted whenever decodebin finds a new stream. It is
+   * emitted before looking for any elements that can handle that stream.
+   *
+   * <note>
+   *   Invocation of signal handlers stops after the first signal handler
+   *   returns #FALSE. Signal handlers are invoked in the order they were
+   *   connected in.
+   * </note>
+   *
+   * Returns: #TRUE if you wish decodebin to look for elements that can
+   * handle the given @caps. If #FALSE, those caps will be considered as
+   * final and the pad will be exposed as such (see 'pad-added' signal of
+   * #GstElement).
+   */
+  gst_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE] =
+      g_signal_new ("autoplug-continue", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass, autoplug_continue),
+      _gst_boolean_accumulator, NULL, gst_play_marshal_BOOLEAN__OBJECT_BOXED,
+      G_TYPE_BOOLEAN, 2, GST_TYPE_PAD, GST_TYPE_CAPS);
+
+  /**
+   * GstDecodeBin::autoplug-factories:
+   * @bin: The decodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps found.
+   *
+   * This function is emited when an array of possible factories for @caps on
+   * @pad is needed. Decodebin will by default return an array with all
+   * compatible factories, sorted by rank.
+   *
+   * If this function returns NULL, @pad will be exposed as a final caps.
+   *
+   * If this function returns an empty array, the pad will be considered as
+   * having an unhandled type media type.
+   *
+   * <note>
+   *   Only the signal handler that is connected first will ever by invoked.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: a #GValueArray* with a list of factories to try. The factories are
+   * by default tried in the returned order or based on the index returned by
+   * "autoplug-select".
+   */
+  gst_decode_bin_signals[SIGNAL_AUTOPLUG_FACTORIES] =
+      g_signal_new ("autoplug-factories", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass,
+          autoplug_factories), _gst_array_accumulator, NULL,
+      gst_play_marshal_BOXED__OBJECT_BOXED, G_TYPE_VALUE_ARRAY, 2,
+      GST_TYPE_PAD, GST_TYPE_CAPS);
+
+  /**
+   * GstDecodeBin::autoplug-sort:
+   * @bin: The decodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps.
+   * @factories: A #GValueArray of possible #GstElementFactory to use.
+   *
+   * Once decodebin has found the possible #GstElementFactory objects to try
+   * for @caps on @pad, this signal is emited. The purpose of the signal is for
+   * the application to perform additional sorting or filtering on the element
+   * factory array.
+   *
+   * The callee should copy and modify @factories or return #NULL if the
+   * order should not change.
+   *
+   * <note>
+   *   Invocation of signal handlers stops after one signal handler has
+   *   returned something else than #NULL. Signal handlers are invoked in
+   *   the order they were connected in.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: A new sorted array of #GstElementFactory objects.
+   */
+  gst_decode_bin_signals[SIGNAL_AUTOPLUG_SORT] =
+      g_signal_new ("autoplug-sort", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass, autoplug_sort),
+      _gst_array_hasvalue_accumulator, NULL,
+      gst_play_marshal_BOXED__OBJECT_BOXED_BOXED, G_TYPE_VALUE_ARRAY, 3,
+      GST_TYPE_PAD, GST_TYPE_CAPS, G_TYPE_VALUE_ARRAY);
+
+  /**
+   * GstDecodeBin::autoplug-select:
+   * @bin: The decodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps.
+   * @factory: A #GstElementFactory to use.
+   *
+   * This signal is emitted once decodebin has found all the possible
+   * #GstElementFactory that can be used to handle the given @caps. For each of
+   * those factories, this signal is emited.
+   *
+   * The signal handler should return a #GST_TYPE_AUTOPLUG_SELECT_RESULT enum
+   * value indicating what decodebin should do next.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_TRY will try to autoplug an element from
+   * @factory.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_EXPOSE will expose @pad without plugging
+   * any element to it.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_SKIP will skip @factory and move to the
+   * next factory.
+   *
+   * <note>
+   *   Only the signal handler that is connected first will ever by invoked.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: a #GST_TYPE_AUTOPLUG_SELECT_RESULT that indicates the required
+   * operation. the default handler will always return
+   * #GST_AUTOPLUG_SELECT_TRY.
+   */
+  gst_decode_bin_signals[SIGNAL_AUTOPLUG_SELECT] =
+      g_signal_new ("autoplug-select", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass, autoplug_select),
+      _gst_select_accumulator, NULL,
+      gst_play_marshal_ENUM__OBJECT_BOXED_OBJECT,
+      GST_TYPE_AUTOPLUG_SELECT_RESULT, 3, GST_TYPE_PAD, GST_TYPE_CAPS,
+      GST_TYPE_ELEMENT_FACTORY);
+
+  /**
+   * GstDecodeBin::drained
+   * @bin: The decodebin
+   *
+   * This signal is emitted once decodebin has finished decoding all the data.
+   *
+   * Since: 0.10.16
+   */
+  gst_decode_bin_signals[SIGNAL_DRAINED] =
+      g_signal_new ("drained", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodeBinClass, drained),
+      NULL, NULL, gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  g_object_class_install_property (gobject_klass, PROP_CAPS,
+      g_param_spec_boxed ("caps", "Caps", "The caps on which to stop decoding.",
+          GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_SUBTITLE_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 encoding. "
+          "If not set, the GST_SUBTITLE_ENCODING environment variable will "
+          "be checked for an encoding to use. If that is not set either, "
+          "ISO-8859-15 will be assumed.", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_SINK_CAPS,
+      g_param_spec_boxed ("sink-caps", "Sink Caps",
+          "The caps of the input data. (NULL = use typefind element)",
+          GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstDecodeBin::use-buffering
+   *
+   * Activate buffering in decodebin. This will instruct the multiqueues behind
+   * decoders to emit BUFFERING messages.
+
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_USE_BUFFERING,
+      g_param_spec_boolean ("use-buffering", "Use Buffering",
+          "Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds",
+          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstDecodeBin:low-percent
+   *
+   * Low threshold percent for buffering to start.
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_LOW_PERCENT,
+      g_param_spec_int ("low-percent", "Low percent",
+          "Low threshold for buffering to start", 0, 100,
+          DEFAULT_LOW_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstDecodeBin:high-percent
+   *
+   * High threshold percent for buffering to finish.
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_HIGH_PERCENT,
+      g_param_spec_int ("high-percent", "High percent",
+          "High threshold for buffering to finish", 0, 100,
+          DEFAULT_HIGH_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstDecodeBin:max-size-bytes
+   *
+   * Max amount amount of bytes in the queue (0=automatic).
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_MAX_SIZE_BYTES,
+      g_param_spec_uint ("max-size-bytes", "Max. size (bytes)",
+          "Max. amount of bytes in the queue (0=automatic)",
+          0, G_MAXUINT, DEFAULT_MAX_SIZE_BYTES,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstDecodeBin:max-size-buffers
+   *
+   * Max amount amount of buffers in the queue (0=automatic).
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_MAX_SIZE_BUFFERS,
+      g_param_spec_uint ("max-size-buffers", "Max. size (buffers)",
+          "Max. number of buffers in the queue (0=automatic)",
+          0, G_MAXUINT, DEFAULT_MAX_SIZE_BUFFERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstDecodeBin:max-size-time
+   *
+   * Max amount amount of time in the queue (in ns, 0=automatic).
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_MAX_SIZE_TIME,
+      g_param_spec_uint64 ("max-size-time", "Max. size (ns)",
+          "Max. amount of data in the queue (in ns, 0=automatic)",
+          0, G_MAXUINT64,
+          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstDecodeBin::post-stream-topology
+   *
+   * Post stream-topology messages on the bus every time the topology changes.
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_klass, PROP_POST_STREAM_TOPOLOGY,
+      g_param_spec_boolean ("post-stream-topology", "Post Stream Topology",
+          "Post stream-topology messages",
+          DEFAULT_POST_STREAM_TOPOLOGY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstDecodeBin::expose-all-streams
+   *
+   * Expose streams of unknown type.
+   *
+   * If set to %FALSE, then only the streams that can be decoded to the final
+   * caps (see 'caps' property) will have a pad exposed. Streams that do not
+   * match those caps but could have been decoded will not have decoder plugged
+   * in internally and will not have a pad exposed.
+   *
+   * Since: 0.10.30
+   */
+  g_object_class_install_property (gobject_klass, PROP_EXPOSE_ALL_STREAMS,
+      g_param_spec_boolean ("expose-all-streams", "Expose All Streams",
+          "Expose all streams, including those of unknown type or that don't match the 'caps' property",
+          DEFAULT_EXPOSE_ALL_STREAMS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
+
+  klass->autoplug_continue =
+      GST_DEBUG_FUNCPTR (gst_decode_bin_autoplug_continue);
+  klass->autoplug_factories =
+      GST_DEBUG_FUNCPTR (gst_decode_bin_autoplug_factories);
+  klass->autoplug_sort = GST_DEBUG_FUNCPTR (gst_decode_bin_autoplug_sort);
+  klass->autoplug_select = GST_DEBUG_FUNCPTR (gst_decode_bin_autoplug_select);
+
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&decoder_bin_sink_template));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&decoder_bin_src_template));
+
+  gst_element_class_set_details_simple (gstelement_klass,
+      "Decoder Bin", "Generic/Bin/Decoder",
+      "Autoplug and decode to raw media",
+      "Edward Hervey <edward.hervey@collabora.co.uk>, "
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstelement_klass->change_state =
+      GST_DEBUG_FUNCPTR (gst_decode_bin_change_state);
+}
+
+/* Must be called with factories lock! */
+static void
+gst_decode_bin_update_factories_list (GstDecodeBin * dbin)
+{
+  if (!dbin->factories
+      || dbin->factories_cookie !=
+      gst_default_registry_get_feature_list_cookie ()) {
+    if (dbin->factories)
+      gst_plugin_feature_list_free (dbin->factories);
+    dbin->factories =
+        gst_element_factory_list_get_elements
+        (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
+    dbin->factories_cookie = gst_default_registry_get_feature_list_cookie ();
+  }
+}
+
+static void
+gst_decode_bin_init (GstDecodeBin * decode_bin)
+{
+  /* first filter out the interesting element factories */
+  decode_bin->factories_lock = g_mutex_new ();
+
+  /* we create the typefind element only once */
+  decode_bin->typefind = gst_element_factory_make ("typefind", "typefind");
+  if (!decode_bin->typefind) {
+    g_warning ("can't find typefind element, decodebin will not work");
+  } else {
+    GstPad *pad;
+    GstPad *gpad;
+    GstPadTemplate *pad_tmpl;
+
+    /* add the typefind element */
+    if (!gst_bin_add (GST_BIN (decode_bin), decode_bin->typefind)) {
+      g_warning ("Could not add typefind element, decodebin will not work");
+      gst_object_unref (decode_bin->typefind);
+      decode_bin->typefind = NULL;
+    }
+
+    /* get the sinkpad */
+    pad = gst_element_get_static_pad (decode_bin->typefind, "sink");
+
+    /* get the pad template */
+    pad_tmpl = gst_static_pad_template_get (&decoder_bin_sink_template);
+
+    /* ghost the sink pad to ourself */
+    gpad = gst_ghost_pad_new_from_template ("sink", pad, pad_tmpl);
+    gst_pad_set_active (gpad, TRUE);
+    gst_element_add_pad (GST_ELEMENT (decode_bin), gpad);
+
+    gst_object_unref (pad_tmpl);
+    gst_object_unref (pad);
+
+    /* connect a signal to find out when the typefind element found
+     * a type */
+    decode_bin->have_type_id =
+        g_signal_connect (G_OBJECT (decode_bin->typefind), "have-type",
+        G_CALLBACK (type_found), decode_bin);
+  }
+
+  decode_bin->expose_lock = g_mutex_new ();
+  decode_bin->decode_chain = NULL;
+
+  decode_bin->dyn_lock = g_mutex_new ();
+  decode_bin->shutdown = FALSE;
+  decode_bin->blocked_pads = NULL;
+
+  decode_bin->subtitle_lock = g_mutex_new ();
+
+  decode_bin->encoding = g_strdup (DEFAULT_SUBTITLE_ENCODING);
+  decode_bin->caps = gst_static_caps_get (&default_raw_caps);
+  decode_bin->use_buffering = DEFAULT_USE_BUFFERING;
+  decode_bin->low_percent = DEFAULT_LOW_PERCENT;
+  decode_bin->high_percent = DEFAULT_HIGH_PERCENT;
+
+  decode_bin->max_size_bytes = DEFAULT_MAX_SIZE_BYTES;
+  decode_bin->max_size_buffers = DEFAULT_MAX_SIZE_BUFFERS;
+  decode_bin->max_size_time = DEFAULT_MAX_SIZE_TIME;
+
+  decode_bin->expose_allstreams = DEFAULT_EXPOSE_ALL_STREAMS;
+}
+
+static void
+gst_decode_bin_dispose (GObject * object)
+{
+  GstDecodeBin *decode_bin;
+
+  decode_bin = GST_DECODE_BIN (object);
+
+  if (decode_bin->factories)
+    gst_plugin_feature_list_free (decode_bin->factories);
+  decode_bin->factories = NULL;
+
+  if (decode_bin->decode_chain)
+    gst_decode_chain_free (decode_bin->decode_chain);
+  decode_bin->decode_chain = NULL;
+
+  if (decode_bin->caps)
+    gst_caps_unref (decode_bin->caps);
+  decode_bin->caps = NULL;
+
+  g_free (decode_bin->encoding);
+  decode_bin->encoding = NULL;
+
+  g_list_free (decode_bin->subtitles);
+  decode_bin->subtitles = NULL;
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_decode_bin_finalize (GObject * object)
+{
+  GstDecodeBin *decode_bin;
+
+  decode_bin = GST_DECODE_BIN (object);
+
+  if (decode_bin->expose_lock) {
+    g_mutex_free (decode_bin->expose_lock);
+    decode_bin->expose_lock = NULL;
+  }
+
+  if (decode_bin->dyn_lock) {
+    g_mutex_free (decode_bin->dyn_lock);
+    decode_bin->dyn_lock = NULL;
+  }
+
+  if (decode_bin->subtitle_lock) {
+    g_mutex_free (decode_bin->subtitle_lock);
+    decode_bin->subtitle_lock = NULL;
+  }
+
+  if (decode_bin->factories_lock) {
+    g_mutex_free (decode_bin->factories_lock);
+    decode_bin->factories_lock = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/* _set_caps
+ * Changes the caps on which decodebin will stop decoding.
+ * Will unref the previously set one. The refcount of the given caps will be
+ * increased.
+ * @caps can be NULL.
+ *
+ * MT-safe
+ */
+static void
+gst_decode_bin_set_caps (GstDecodeBin * dbin, GstCaps * caps)
+{
+  GST_DEBUG_OBJECT (dbin, "Setting new caps: %" GST_PTR_FORMAT, caps);
+
+  GST_OBJECT_LOCK (dbin);
+  gst_caps_replace (&dbin->caps, caps);
+  GST_OBJECT_UNLOCK (dbin);
+}
+
+/* _get_caps
+ * Returns the currently configured caps on which decodebin will stop decoding.
+ * The returned caps (if not NULL), will have its refcount incremented.
+ *
+ * MT-safe
+ */
+static GstCaps *
+gst_decode_bin_get_caps (GstDecodeBin * dbin)
+{
+  GstCaps *caps;
+
+  GST_DEBUG_OBJECT (dbin, "Getting currently set caps");
+
+  GST_OBJECT_LOCK (dbin);
+  caps = dbin->caps;
+  if (caps)
+    gst_caps_ref (caps);
+  GST_OBJECT_UNLOCK (dbin);
+
+  return caps;
+}
+
+static void
+gst_decode_bin_set_sink_caps (GstDecodeBin * dbin, GstCaps * caps)
+{
+  GST_DEBUG_OBJECT (dbin, "Setting new caps: %" GST_PTR_FORMAT, caps);
+
+  g_object_set (dbin->typefind, "force-caps", caps, NULL);
+}
+
+static GstCaps *
+gst_decode_bin_get_sink_caps (GstDecodeBin * dbin)
+{
+  GstCaps *caps;
+
+  GST_DEBUG_OBJECT (dbin, "Getting currently set caps");
+
+  g_object_get (dbin->typefind, "force-caps", &caps, NULL);
+
+  return caps;
+}
+
+static void
+gst_decode_bin_set_subs_encoding (GstDecodeBin * dbin, const gchar * encoding)
+{
+  GList *walk;
+
+  GST_DEBUG_OBJECT (dbin, "Setting new encoding: %s", GST_STR_NULL (encoding));
+
+  SUBTITLE_LOCK (dbin);
+  g_free (dbin->encoding);
+  dbin->encoding = g_strdup (encoding);
+
+  /* set the subtitle encoding on all added elements */
+  for (walk = dbin->subtitles; walk; walk = g_list_next (walk)) {
+    g_object_set (G_OBJECT (walk->data), "subtitle-encoding", dbin->encoding,
+        NULL);
+  }
+  SUBTITLE_UNLOCK (dbin);
+}
+
+static gchar *
+gst_decode_bin_get_subs_encoding (GstDecodeBin * dbin)
+{
+  gchar *encoding;
+
+  GST_DEBUG_OBJECT (dbin, "Getting currently set encoding");
+
+  SUBTITLE_LOCK (dbin);
+  encoding = g_strdup (dbin->encoding);
+  SUBTITLE_UNLOCK (dbin);
+
+  return encoding;
+}
+
+static void
+gst_decode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstDecodeBin *dbin;
+
+  dbin = GST_DECODE_BIN (object);
+
+  switch (prop_id) {
+    case PROP_CAPS:
+      gst_decode_bin_set_caps (dbin, g_value_get_boxed (value));
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      gst_decode_bin_set_subs_encoding (dbin, g_value_get_string (value));
+      break;
+    case PROP_SINK_CAPS:
+      gst_decode_bin_set_sink_caps (dbin, g_value_get_boxed (value));
+      break;
+    case PROP_USE_BUFFERING:
+      dbin->use_buffering = g_value_get_boolean (value);
+      break;
+    case PROP_LOW_PERCENT:
+      dbin->low_percent = g_value_get_int (value);
+      break;
+    case PROP_HIGH_PERCENT:
+      dbin->high_percent = g_value_get_int (value);
+      break;
+    case PROP_MAX_SIZE_BYTES:
+      dbin->max_size_bytes = g_value_get_uint (value);
+      break;
+    case PROP_MAX_SIZE_BUFFERS:
+      dbin->max_size_buffers = g_value_get_uint (value);
+      break;
+    case PROP_MAX_SIZE_TIME:
+      dbin->max_size_time = g_value_get_uint64 (value);
+      break;
+    case PROP_POST_STREAM_TOPOLOGY:
+      dbin->post_stream_topology = g_value_get_boolean (value);
+      break;
+    case PROP_EXPOSE_ALL_STREAMS:
+      dbin->expose_allstreams = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_decode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstDecodeBin *dbin;
+
+  dbin = GST_DECODE_BIN (object);
+  switch (prop_id) {
+    case PROP_CAPS:
+      g_value_take_boxed (value, gst_decode_bin_get_caps (dbin));
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      g_value_take_string (value, gst_decode_bin_get_subs_encoding (dbin));
+      break;
+    case PROP_SINK_CAPS:
+      g_value_take_boxed (value, gst_decode_bin_get_sink_caps (dbin));
+      break;
+    case PROP_USE_BUFFERING:
+      g_value_set_boolean (value, dbin->use_buffering);
+      break;
+    case PROP_LOW_PERCENT:
+      g_value_set_int (value, dbin->low_percent);
+      break;
+    case PROP_HIGH_PERCENT:
+      g_value_set_int (value, dbin->high_percent);
+      break;
+    case PROP_MAX_SIZE_BYTES:
+      g_value_set_uint (value, dbin->max_size_bytes);
+      break;
+    case PROP_MAX_SIZE_BUFFERS:
+      g_value_set_uint (value, dbin->max_size_buffers);
+      break;
+    case PROP_MAX_SIZE_TIME:
+      g_value_set_uint64 (value, dbin->max_size_time);
+      break;
+    case PROP_POST_STREAM_TOPOLOGY:
+      g_value_set_boolean (value, dbin->post_stream_topology);
+      break;
+    case PROP_EXPOSE_ALL_STREAMS:
+      g_value_set_boolean (value, dbin->expose_allstreams);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+/*****
+ * Default autoplug signal handlers
+ *****/
+static gboolean
+gst_decode_bin_autoplug_continue (GstElement * element, GstPad * pad,
+    GstCaps * caps)
+{
+  GST_DEBUG_OBJECT (element, "autoplug-continue returns TRUE");
+
+  /* by default we always continue */
+  return TRUE;
+}
+
+static GValueArray *
+gst_decode_bin_autoplug_factories (GstElement * element, GstPad * pad,
+    GstCaps * caps)
+{
+  GList *list, *tmp;
+  GValueArray *result;
+  GstDecodeBin *dbin = GST_DECODE_BIN_CAST (element);
+
+  GST_DEBUG_OBJECT (element, "finding factories");
+
+  /* return all compatible factories for caps */
+  g_mutex_lock (dbin->factories_lock);
+  gst_decode_bin_update_factories_list (dbin);
+  list =
+      gst_element_factory_list_filter (dbin->factories, caps, GST_PAD_SINK,
+      FALSE);
+  g_mutex_unlock (dbin->factories_lock);
+
+  result = g_value_array_new (g_list_length (list));
+  for (tmp = list; tmp; tmp = tmp->next) {
+    GstElementFactory *factory = GST_ELEMENT_FACTORY_CAST (tmp->data);
+    GValue val = { 0, };
+
+    g_value_init (&val, G_TYPE_OBJECT);
+    g_value_set_object (&val, factory);
+    g_value_array_append (result, &val);
+    g_value_unset (&val);
+  }
+  gst_plugin_feature_list_free (list);
+
+  GST_DEBUG_OBJECT (element, "autoplug-factories returns %p", result);
+
+  return result;
+}
+
+static GValueArray *
+gst_decode_bin_autoplug_sort (GstElement * element, GstPad * pad,
+    GstCaps * caps, GValueArray * factories)
+{
+  return NULL;
+}
+
+static GstAutoplugSelectResult
+gst_decode_bin_autoplug_select (GstElement * element, GstPad * pad,
+    GstCaps * caps, GstElementFactory * factory)
+{
+  GST_DEBUG_OBJECT (element, "default autoplug-select returns TRY");
+
+  /* Try factory. */
+  return GST_AUTOPLUG_SELECT_TRY;
+}
+
+/********
+ * Discovery methods
+ *****/
+
+static gboolean are_final_caps (GstDecodeBin * dbin, GstCaps * caps);
+static gboolean is_demuxer_element (GstElement * srcelement);
+
+static gboolean connect_pad (GstDecodeBin * dbin, GstElement * src,
+    GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GValueArray * factories,
+    GstDecodeChain * chain);
+static gboolean connect_element (GstDecodeBin * dbin, GstElement * element,
+    GstDecodeChain * chain);
+static void expose_pad (GstDecodeBin * dbin, GstElement * src,
+    GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GstDecodeChain * chain);
+
+static void pad_added_cb (GstElement * element, GstPad * pad,
+    GstDecodeChain * chain);
+static void pad_removed_cb (GstElement * element, GstPad * pad,
+    GstDecodeChain * chain);
+static void no_more_pads_cb (GstElement * element, GstDecodeChain * chain);
+
+static GstDecodeGroup *gst_decode_chain_get_current_group (GstDecodeChain *
+    chain);
+
+/* called when a new pad is discovered. It will perform some basic actions
+ * before trying to link something to it.
+ *
+ *  - Check the caps, don't do anything when there are no caps or when they have
+ *    no good type.
+ *  - signal AUTOPLUG_CONTINUE to check if we need to continue autoplugging this
+ *    pad.
+ *  - if the caps are non-fixed, setup a handler to continue autoplugging when
+ *    the caps become fixed (connect to notify::caps).
+ *  - get list of factories to autoplug.
+ *  - continue autoplugging to one of the factories.
+ */
+static void
+analyze_new_pad (GstDecodeBin * dbin, GstElement * src, GstPad * pad,
+    GstCaps * caps, GstDecodeChain * chain)
+{
+  gboolean apcontinue = TRUE;
+  GValueArray *factories = NULL, *result = NULL;
+  GstDecodePad *dpad;
+  GstElementFactory *factory;
+  const gchar *classification;
+  gboolean is_parser_converter = FALSE;
+  gboolean res;
+
+  GST_DEBUG_OBJECT (dbin, "Pad %s:%s caps:%" GST_PTR_FORMAT,
+      GST_DEBUG_PAD_NAME (pad), caps);
+
+  if (chain->elements
+      && src != ((GstDecodeElement *) chain->elements->data)->element
+      && src != ((GstDecodeElement *) chain->elements->data)->capsfilter) {
+    GST_ERROR_OBJECT (dbin, "New pad from not the last element in this chain");
+    return;
+  }
+
+  if (chain->endpad) {
+    GST_ERROR_OBJECT (dbin, "New pad in a chain that is already complete");
+    return;
+  }
+
+  if (chain->demuxer) {
+    GstDecodeGroup *group;
+    GstDecodeChain *oldchain = chain;
+
+    /* we are adding a new pad for a demuxer (see is_demuxer_element(),
+     * start a new chain for it */
+    CHAIN_MUTEX_LOCK (oldchain);
+    group = gst_decode_chain_get_current_group (chain);
+    if (group) {
+      chain = gst_decode_chain_new (dbin, group, pad);
+      group->children = g_list_prepend (group->children, chain);
+    }
+    CHAIN_MUTEX_UNLOCK (oldchain);
+    if (!group) {
+      GST_WARNING_OBJECT (dbin, "No current group");
+      return;
+    }
+  }
+
+  if ((caps == NULL) || gst_caps_is_empty (caps))
+    goto unknown_type;
+
+  if (gst_caps_is_any (caps))
+    goto any_caps;
+
+  dpad = gst_decode_pad_new (dbin, pad, chain);
+
+  /* 1. Emit 'autoplug-continue' the result will tell us if this pads needs
+   * further autoplugging. Only do this for fixed caps, for unfixed caps
+   * we will later come here again from the notify::caps handler. The
+   * problem with unfixed caps is that we can reliably tell if the output
+   * is e.g. accepted by a sink because only parts of the possible final
+   * caps might be accepted by the sink. */
+  if (gst_caps_is_fixed (caps))
+    g_signal_emit (G_OBJECT (dbin),
+        gst_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE], 0, dpad, caps,
+        &apcontinue);
+  else
+    apcontinue = TRUE;
+
+  /* 1.a if autoplug-continue is FALSE or caps is a raw format, goto pad_is_final */
+  if ((!apcontinue) || are_final_caps (dbin, caps))
+    goto expose_pad;
+
+  /* 1.b For Parser/Converter that can output different stream formats
+   * we insert a capsfilter with the sorted caps of all possible next
+   * elements and continue with the capsfilter srcpad */
+  factory = gst_element_get_factory (src);
+  classification = gst_element_factory_get_klass (factory);
+  is_parser_converter = (strstr (classification, "Parser")
+      && strstr (classification, "Converter"));
+
+  /* 1.c when the caps are not fixed yet, we can't be sure what element to
+   * connect. We delay autoplugging until the caps are fixed */
+  if (!is_parser_converter && !gst_caps_is_fixed (caps))
+    goto non_fixed;
+
+  /* 1.d else get the factories and if there's no compatible factory goto
+   * unknown_type */
+  g_signal_emit (G_OBJECT (dbin),
+      gst_decode_bin_signals[SIGNAL_AUTOPLUG_FACTORIES], 0, dpad, caps,
+      &factories);
+
+  /* NULL means that we can expose the pad */
+  if (factories == NULL)
+    goto expose_pad;
+
+  /* if the array is empty, we have a type for which we have no decoder */
+  if (factories->n_values == 0) {
+    if (!dbin->expose_allstreams) {
+      GstCaps *raw = gst_static_caps_get (&default_raw_caps);
+
+      /* If the caps are raw, this just means we don't want to expose them */
+      if (gst_caps_can_intersect (raw, caps)) {
+        g_value_array_free (factories);
+        gst_caps_unref (raw);
+        gst_object_unref (dpad);
+        goto discarded_type;
+      }
+      gst_caps_unref (raw);
+    }
+
+    /* if not we have a unhandled type with no compatible factories */
+    g_value_array_free (factories);
+    gst_object_unref (dpad);
+    goto unknown_type;
+  }
+
+  /* 1.e sort some more. */
+  g_signal_emit (G_OBJECT (dbin),
+      gst_decode_bin_signals[SIGNAL_AUTOPLUG_SORT], 0, dpad, caps, factories,
+      &result);
+  if (result) {
+    g_value_array_free (factories);
+    factories = result;
+  }
+
+  /* At this point we have a potential decoder, but we might not need it
+   * if it doesn't match the output caps  */
+  if (!dbin->expose_allstreams && gst_caps_is_fixed (caps)) {
+    guint i;
+    const GList *tmps;
+    gboolean dontuse = FALSE;
+
+    GST_DEBUG ("Checking if we can abort early");
+
+    /* 1.f Do an early check to see if the candidates are potential decoders, but
+     * due to the fact that they decode to a mediatype that is not final we don't
+     * need them */
+
+    for (i = 0; i < factories->n_values && !dontuse; i++) {
+      GstElementFactory *factory =
+          g_value_get_object (g_value_array_get_nth (factories, i));
+      GstCaps *tcaps;
+
+      /* We are only interested in skipping decoders */
+      if (strstr (gst_element_factory_get_klass (factory), "Decoder")) {
+
+        GST_DEBUG ("Trying factory %s",
+            gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
+
+        /* Check the source pad template caps to see if they match raw caps but don't match
+         * our final caps*/
+        for (tmps = gst_element_factory_get_static_pad_templates (factory);
+            tmps && !dontuse; tmps = tmps->next) {
+          GstStaticPadTemplate *st = (GstStaticPadTemplate *) tmps->data;
+          if (st->direction != GST_PAD_SRC)
+            continue;
+          tcaps = gst_static_pad_template_get_caps (st);
+
+          apcontinue = TRUE;
+
+          /* Emit autoplug-continue to see if the caps are considered to be raw caps */
+          g_signal_emit (G_OBJECT (dbin),
+              gst_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE], 0, dpad, tcaps,
+              &apcontinue);
+
+          /* If autoplug-continue returns TRUE and the caps are not final, don't use them */
+          if (apcontinue && !are_final_caps (dbin, tcaps))
+            dontuse = TRUE;
+          gst_caps_unref (tcaps);
+        }
+      }
+    }
+
+    if (dontuse) {
+      gst_object_unref (dpad);
+      g_value_array_free (factories);
+      goto discarded_type;
+    }
+  }
+
+  /* 1.g now get the factory template caps and insert the capsfilter if this
+   * is a parser/converter
+   */
+  if (is_parser_converter) {
+    GstCaps *filter_caps;
+    gint i;
+    GstPad *p;
+    GstDecodeElement *delem;
+
+    g_assert (chain->elements != NULL);
+    delem = (GstDecodeElement *) chain->elements->data;
+
+    filter_caps = gst_caps_new_empty ();
+    for (i = 0; i < factories->n_values; i++) {
+      GstElementFactory *factory =
+          g_value_get_object (g_value_array_get_nth (factories, i));
+      GstCaps *tcaps, *intersection;
+      const GList *tmps;
+
+      GST_DEBUG ("Trying factory %s",
+          gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
+
+      if (gst_element_get_factory (src) == factory) {
+        GST_DEBUG ("Skipping factory");
+        continue;
+      }
+
+      for (tmps = gst_element_factory_get_static_pad_templates (factory); tmps;
+          tmps = tmps->next) {
+        GstStaticPadTemplate *st = (GstStaticPadTemplate *) tmps->data;
+        if (st->direction != GST_PAD_SINK || st->presence != GST_PAD_ALWAYS)
+          continue;
+        tcaps = gst_static_pad_template_get_caps (st);
+        intersection =
+            gst_caps_intersect_full (tcaps, caps, GST_CAPS_INTERSECT_FIRST);
+        gst_caps_merge (filter_caps, intersection);
+        gst_caps_unref (tcaps);
+      }
+    }
+
+    /* Append the parser caps to prevent any not-negotiated errors */
+    gst_caps_merge (filter_caps, gst_caps_copy (caps));
+
+    delem->capsfilter = gst_element_factory_make ("capsfilter", NULL);
+    g_object_set (G_OBJECT (delem->capsfilter), "caps", filter_caps, NULL);
+    gst_caps_unref (filter_caps);
+    gst_element_set_state (delem->capsfilter, GST_STATE_PAUSED);
+    gst_bin_add (GST_BIN_CAST (dbin), gst_object_ref (delem->capsfilter));
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), NULL);
+    p = gst_element_get_static_pad (delem->capsfilter, "sink");
+    gst_pad_link_full (pad, p, GST_PAD_LINK_CHECK_NOTHING);
+    gst_object_unref (p);
+    p = gst_element_get_static_pad (delem->capsfilter, "src");
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), p);
+    pad = p;
+
+    if (!gst_caps_is_fixed (caps)) {
+      g_value_array_free (factories);
+      goto non_fixed;
+    }
+  }
+
+  /* 1.h else continue autoplugging something from the list. */
+  GST_LOG_OBJECT (pad, "Let's continue discovery on this pad");
+  res = connect_pad (dbin, src, dpad, pad, caps, factories, chain);
+
+  /* Need to unref the capsfilter srcpad here if
+   * we inserted a capsfilter */
+  if (is_parser_converter)
+    gst_object_unref (pad);
+
+  gst_object_unref (dpad);
+  g_value_array_free (factories);
+
+  if (!res)
+    goto unknown_type;
+
+  return;
+
+expose_pad:
+  {
+    GST_LOG_OBJECT (dbin, "Pad is final. autoplug-continue:%d", apcontinue);
+    expose_pad (dbin, src, dpad, pad, caps, chain);
+    gst_object_unref (dpad);
+    return;
+  }
+
+discarded_type:
+  {
+    GST_LOG_OBJECT (pad, "Known type, but discarded because not final caps");
+    chain->deadend = TRUE;
+    chain->endcaps = gst_caps_ref (caps);
+
+    /* Try to expose anything */
+    EXPOSE_LOCK (dbin);
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      gst_decode_bin_expose (dbin);
+    }
+    EXPOSE_UNLOCK (dbin);
+    do_async_done (dbin);
+
+    return;
+  }
+
+unknown_type:
+  {
+    GST_LOG_OBJECT (pad, "Unknown type, posting message and firing signal");
+
+    chain->deadend = TRUE;
+    chain->endcaps = gst_caps_ref (caps);
+
+    gst_element_post_message (GST_ELEMENT_CAST (dbin),
+        gst_missing_decoder_message_new (GST_ELEMENT_CAST (dbin), caps));
+
+    g_signal_emit (G_OBJECT (dbin),
+        gst_decode_bin_signals[SIGNAL_UNKNOWN_TYPE], 0, pad, caps);
+
+    /* Try to expose anything */
+    EXPOSE_LOCK (dbin);
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      gst_decode_bin_expose (dbin);
+    }
+    EXPOSE_UNLOCK (dbin);
+
+    if (src == dbin->typefind) {
+      gchar *desc;
+
+      if (caps && !gst_caps_is_empty (caps)) {
+        desc = gst_pb_utils_get_decoder_description (caps);
+        GST_ELEMENT_ERROR (dbin, STREAM, CODEC_NOT_FOUND,
+            (_("A %s plugin is required to play this stream, "
+                    "but not installed."), desc),
+            ("No decoder to handle media type '%s'",
+                gst_structure_get_name (gst_caps_get_structure (caps, 0))));
+        g_free (desc);
+      } else {
+        GST_ELEMENT_ERROR (dbin, STREAM, TYPE_NOT_FOUND,
+            (_("Could not determine type of stream")),
+            ("Stream caps %" GST_PTR_FORMAT, caps));
+      }
+      do_async_done (dbin);
+    }
+    return;
+  }
+non_fixed:
+  {
+    GST_DEBUG_OBJECT (pad, "pad has non-fixed caps delay autoplugging");
+    gst_object_unref (dpad);
+    goto setup_caps_delay;
+  }
+any_caps:
+  {
+    GST_WARNING_OBJECT (pad,
+        "pad has ANY caps, not able to autoplug to anything");
+    goto setup_caps_delay;
+  }
+setup_caps_delay:
+  {
+    GstPendingPad *ppad;
+
+    /* connect to caps notification */
+    CHAIN_MUTEX_LOCK (chain);
+    GST_LOG_OBJECT (dbin, "Chain %p has now %d dynamic pads", chain,
+        g_list_length (chain->pending_pads));
+    ppad = g_slice_new0 (GstPendingPad);
+    ppad->pad = gst_object_ref (pad);
+    ppad->chain = chain;
+    ppad->event_probe_id =
+        gst_pad_add_probe (pad, GST_PROBE_TYPE_EVENT, pad_event_cb, ppad, NULL);
+    chain->pending_pads = g_list_prepend (chain->pending_pads, ppad);
+    g_signal_connect (G_OBJECT (pad), "notify::caps",
+        G_CALLBACK (caps_notify_cb), chain);
+    CHAIN_MUTEX_UNLOCK (chain);
+
+    /* If we're here because we have a Parser/Converter
+     * we have to unref the pad */
+    if (is_parser_converter)
+      gst_object_unref (pad);
+
+    return;
+  }
+}
+
+
+/* connect_pad:
+ *
+ * Try to connect the given pad to an element created from one of the factories,
+ * and recursively.
+ *
+ * Note that dpad is ghosting pad, and so pad is linked; be sure to unset dpad's
+ * target before trying to link pad.
+ *
+ * Returns TRUE if an element was properly created and linked
+ */
+static gboolean
+connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
+    GstPad * pad, GstCaps * caps, GValueArray * factories,
+    GstDecodeChain * chain)
+{
+  gboolean res = FALSE;
+  GstPad *mqpad = NULL;
+  gboolean is_demuxer = chain->parent && !chain->elements;      /* First pad after the demuxer */
+
+  g_return_val_if_fail (factories != NULL, FALSE);
+  g_return_val_if_fail (factories->n_values > 0, FALSE);
+
+  GST_DEBUG_OBJECT (dbin, "pad %s:%s , chain:%p",
+      GST_DEBUG_PAD_NAME (pad), chain);
+
+  /* 1. is element demuxer or parser */
+  if (is_demuxer) {
+    GST_LOG_OBJECT (src,
+        "is a demuxer, connecting the pad through multiqueue '%s'",
+        GST_OBJECT_NAME (chain->parent->multiqueue));
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), NULL);
+    if (!(mqpad = gst_decode_group_control_demuxer_pad (chain->parent, pad)))
+      goto beach;
+    src = chain->parent->multiqueue;
+    pad = mqpad;
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), pad);
+  }
+
+  /* 2. Try to create an element and link to it */
+  while (factories->n_values > 0) {
+    GstAutoplugSelectResult ret;
+    GstElementFactory *factory;
+    GstDecodeElement *delem;
+    GstElement *element;
+    GstPad *sinkpad;
+    gboolean subtitle;
+
+    /* Set dpad target to pad again, it might've been unset
+     * below but we came back here because something failed
+     */
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), pad);
+
+    /* take first factory */
+    factory = g_value_get_object (g_value_array_get_nth (factories, 0));
+    /* Remove selected factory from the list. */
+    g_value_array_remove (factories, 0);
+
+    /* Check if the caps are really supported by the factory. The
+     * factory list is non-empty-subset filtered while caps
+     * are only accepted by a pad if they are a subset of the
+     * pad caps.
+     *
+     * FIXME: Only do this for fixed caps here. Non-fixed caps
+     * can happen if a Parser/Converter was autoplugged before
+     * this. We then assume that it will be able to convert to
+     * everything that the decoder would want.
+     *
+     * A subset check will fail here because the parser caps
+     * will be generic and while the decoder will only
+     * support a subset of the parser caps.
+     */
+    if (gst_caps_is_fixed (caps)) {
+      const GList *templs;
+      gboolean skip = FALSE;
+
+      templs = gst_element_factory_get_static_pad_templates (factory);
+
+      while (templs) {
+        GstStaticPadTemplate *templ = (GstStaticPadTemplate *) templs->data;
+
+        if (templ->direction == GST_PAD_SINK) {
+          GstCaps *templcaps = gst_static_caps_get (&templ->static_caps);
+
+          if (!gst_caps_is_subset (caps, templcaps)) {
+            gst_caps_unref (templcaps);
+            skip = TRUE;
+            break;
+          }
+
+          gst_caps_unref (templcaps);
+        }
+        templs = g_list_next (templs);
+      }
+      if (skip)
+        continue;
+    }
+
+    /* If the factory is for a parser we first check if the factory
+     * was already used for the current chain. If it was used already
+     * we would otherwise create an infinite loop here because the
+     * parser apparently accepts its own output as input.
+     * This is only done for parsers because it's perfectly valid
+     * to have other element classes after each other because a
+     * parser is the only one that does not change the data. A
+     * valid example for this would be multiple id3demux in a row.
+     */
+    if (strstr (gst_element_factory_get_klass (factory), "Parser")) {
+      gboolean skip = FALSE;
+      GList *l;
+
+      CHAIN_MUTEX_LOCK (chain);
+      for (l = chain->elements; l; l = l->next) {
+        GstDecodeElement *delem = (GstDecodeElement *) l->data;
+        GstElement *otherelement = delem->element;
+
+        if (gst_element_get_factory (otherelement) == factory) {
+          skip = TRUE;
+          break;
+        }
+      }
+      CHAIN_MUTEX_UNLOCK (chain);
+      if (skip) {
+        GST_DEBUG_OBJECT (dbin,
+            "Skipping factory '%s' because it was already used in this chain",
+            gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory)));
+        continue;
+      }
+    }
+
+    /* emit autoplug-select to see what we should do with it. */
+    g_signal_emit (G_OBJECT (dbin),
+        gst_decode_bin_signals[SIGNAL_AUTOPLUG_SELECT],
+        0, dpad, caps, factory, &ret);
+
+    switch (ret) {
+      case GST_AUTOPLUG_SELECT_TRY:
+        GST_DEBUG_OBJECT (dbin, "autoplug select requested try");
+        break;
+      case GST_AUTOPLUG_SELECT_EXPOSE:
+        GST_DEBUG_OBJECT (dbin, "autoplug select requested expose");
+        /* expose the pad, we don't have the source element */
+        expose_pad (dbin, src, dpad, pad, caps, chain);
+        res = TRUE;
+        goto beach;
+      case GST_AUTOPLUG_SELECT_SKIP:
+        GST_DEBUG_OBJECT (dbin, "autoplug select requested skip");
+        continue;
+      default:
+        GST_WARNING_OBJECT (dbin, "autoplug select returned unhandled %d", ret);
+        break;
+    }
+
+    /* 2.0. Unlink pad */
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), NULL);
+
+    /* 2.1. Try to create an element */
+    if ((element = gst_element_factory_create (factory, NULL)) == NULL) {
+      GST_WARNING_OBJECT (dbin, "Could not create an element from %s",
+          gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
+      continue;
+    }
+
+    /* ... activate it ... We do this before adding it to the bin so that we
+     * don't accidentally make it post error messages that will stop
+     * everything. */
+    if ((gst_element_set_state (element,
+                GST_STATE_READY)) == GST_STATE_CHANGE_FAILURE) {
+      GST_WARNING_OBJECT (dbin, "Couldn't set %s to READY",
+          GST_ELEMENT_NAME (element));
+      gst_object_unref (element);
+      continue;
+    }
+
+    /* 2.3. Find its sink pad, this should work after activating it. */
+    if (!(sinkpad = find_sink_pad (element))) {
+      GST_WARNING_OBJECT (dbin, "Element %s doesn't have a sink pad",
+          GST_ELEMENT_NAME (element));
+      gst_element_set_state (element, GST_STATE_NULL);
+      gst_object_unref (element);
+      continue;
+    }
+
+    /* 2.4 add it ... */
+    if (!(gst_bin_add (GST_BIN_CAST (dbin), element))) {
+      GST_WARNING_OBJECT (dbin, "Couldn't add %s to the bin",
+          GST_ELEMENT_NAME (element));
+      gst_object_unref (sinkpad);
+      gst_element_set_state (element, GST_STATE_NULL);
+      gst_object_unref (element);
+      continue;
+    }
+
+    /* 2.5 ...and try to link */
+    if ((gst_pad_link (pad, sinkpad)) != GST_PAD_LINK_OK) {
+      GST_WARNING_OBJECT (dbin, "Link failed on pad %s:%s",
+          GST_DEBUG_PAD_NAME (sinkpad));
+      gst_element_set_state (element, GST_STATE_NULL);
+      gst_object_unref (sinkpad);
+      gst_bin_remove (GST_BIN (dbin), element);
+      continue;
+    }
+    gst_object_unref (sinkpad);
+    GST_LOG_OBJECT (dbin, "linked on pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+    CHAIN_MUTEX_LOCK (chain);
+    delem = g_slice_new (GstDecodeElement);
+    delem->element = gst_object_ref (element);
+    delem->capsfilter = NULL;
+    chain->elements = g_list_prepend (chain->elements, delem);
+    chain->demuxer = is_demuxer_element (element);
+    CHAIN_MUTEX_UNLOCK (chain);
+
+    /* link this element further */
+    connect_element (dbin, element, chain);
+
+    /* try to configure the subtitle encoding property when we can */
+    if (g_object_class_find_property (G_OBJECT_GET_CLASS (element),
+            "subtitle-encoding")) {
+      SUBTITLE_LOCK (dbin);
+      GST_DEBUG_OBJECT (dbin,
+          "setting subtitle-encoding=%s to element", dbin->encoding);
+      g_object_set (G_OBJECT (element), "subtitle-encoding", dbin->encoding,
+          NULL);
+      SUBTITLE_UNLOCK (dbin);
+      subtitle = TRUE;
+    } else
+      subtitle = FALSE;
+
+    /* Bring the element to the state of the parent */
+    if ((gst_element_set_state (element,
+                GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE) {
+      GstDecodeElement *dtmp = NULL;
+      GstElement *tmp = NULL;
+
+      GST_WARNING_OBJECT (dbin, "Couldn't set %s to PAUSED",
+          GST_ELEMENT_NAME (element));
+
+      /* Remove all elements in this chain that were just added. No
+       * other thread could've added elements in the meantime */
+      CHAIN_MUTEX_LOCK (chain);
+      do {
+        GList *l;
+
+        dtmp = chain->elements->data;
+        tmp = dtmp->element;
+
+        /* Disconnect any signal handlers that might be connected
+         * in connect_element() or analyze_pad() */
+        g_signal_handlers_disconnect_by_func (tmp, pad_added_cb, chain);
+        g_signal_handlers_disconnect_by_func (tmp, pad_removed_cb, chain);
+        g_signal_handlers_disconnect_by_func (tmp, no_more_pads_cb, chain);
+
+        for (l = chain->pending_pads; l;) {
+          GstPendingPad *pp = l->data;
+          GList *n;
+
+          if (GST_PAD_PARENT (pp->pad) != tmp) {
+            l = l->next;
+            continue;
+          }
+
+          g_signal_handlers_disconnect_by_func (pp->pad, caps_notify_cb, chain);
+          gst_pad_remove_probe (pp->pad, pp->event_probe_id);
+          gst_object_unref (pp->pad);
+          g_slice_free (GstPendingPad, pp);
+
+          /* Remove element from the list, update list head and go to the
+           * next element in the list */
+          n = l->next;
+          chain->pending_pads = g_list_delete_link (chain->pending_pads, l);
+          l = n;
+        }
+
+        if (dtmp->capsfilter) {
+          gst_bin_remove (GST_BIN (dbin), dtmp->capsfilter);
+          gst_element_set_state (dtmp->capsfilter, GST_STATE_NULL);
+          gst_object_unref (dtmp->capsfilter);
+        }
+
+        gst_bin_remove (GST_BIN (dbin), tmp);
+        gst_element_set_state (tmp, GST_STATE_NULL);
+
+        gst_object_unref (tmp);
+        g_slice_free (GstDecodeElement, dtmp);
+
+        chain->elements = g_list_delete_link (chain->elements, chain->elements);
+      } while (tmp != element);
+      CHAIN_MUTEX_UNLOCK (chain);
+
+      continue;
+    }
+    if (subtitle) {
+      SUBTITLE_LOCK (dbin);
+      /* we added the element now, add it to the list of subtitle-encoding
+       * elements when we can set the property */
+      dbin->subtitles = g_list_prepend (dbin->subtitles, element);
+      SUBTITLE_UNLOCK (dbin);
+    }
+
+    res = TRUE;
+    break;
+  }
+
+beach:
+  if (mqpad)
+    gst_object_unref (mqpad);
+
+  return res;
+}
+
+static GstCaps *
+get_pad_caps (GstPad * pad)
+{
+  GstCaps *caps;
+
+  /* first check the pad caps, if this is set, we are positively sure it is
+   * fixed and exactly what the element will produce. */
+  caps = gst_pad_get_current_caps (pad);
+
+  /* then use the getcaps function if we don't have caps. These caps might not
+   * be fixed in some cases, in which case analyze_new_pad will set up a
+   * notify::caps signal to continue autoplugging. */
+  if (caps == NULL)
+    caps = gst_pad_get_caps (pad, NULL);
+
+  return caps;
+}
+
+static gboolean
+connect_element (GstDecodeBin * dbin, GstElement * element,
+    GstDecodeChain * chain)
+{
+  GList *pads;
+  gboolean res = TRUE;
+  gboolean dynamic = FALSE;
+  GList *to_connect = NULL;
+
+  GST_DEBUG_OBJECT (dbin, "Attempting to connect element %s [chain:%p] further",
+      GST_ELEMENT_NAME (element), chain);
+
+  /* 1. Loop over pad templates, grabbing existing pads along the way */
+  for (pads = GST_ELEMENT_GET_CLASS (element)->padtemplates; pads;
+      pads = g_list_next (pads)) {
+    GstPadTemplate *templ = GST_PAD_TEMPLATE (pads->data);
+    const gchar *templ_name;
+
+    /* we are only interested in source pads */
+    if (GST_PAD_TEMPLATE_DIRECTION (templ) != GST_PAD_SRC)
+      continue;
+
+    templ_name = GST_PAD_TEMPLATE_NAME_TEMPLATE (templ);
+    GST_DEBUG_OBJECT (dbin, "got a source pad template %s", templ_name);
+
+    /* figure out what kind of pad this is */
+    switch (GST_PAD_TEMPLATE_PRESENCE (templ)) {
+      case GST_PAD_ALWAYS:
+      {
+        /* get the pad that we need to autoplug */
+        GstPad *pad = gst_element_get_static_pad (element, templ_name);
+
+        if (pad) {
+          GST_DEBUG_OBJECT (dbin, "got the pad for always template %s",
+              templ_name);
+          /* here is the pad, we need to autoplug it */
+          to_connect = g_list_prepend (to_connect, pad);
+        } else {
+          /* strange, pad is marked as always but it's not
+           * there. Fix the element */
+          GST_WARNING_OBJECT (dbin,
+              "could not get the pad for always template %s", templ_name);
+        }
+        break;
+      }
+      case GST_PAD_SOMETIMES:
+      {
+        /* try to get the pad to see if it is already created or
+         * not */
+        GstPad *pad = gst_element_get_static_pad (element, templ_name);
+
+        if (pad) {
+          GST_DEBUG_OBJECT (dbin, "got the pad for sometimes template %s",
+              templ_name);
+          /* the pad is created, we need to autoplug it */
+          to_connect = g_list_prepend (to_connect, pad);
+        } else {
+          GST_DEBUG_OBJECT (dbin,
+              "did not get the sometimes pad of template %s", templ_name);
+          /* we have an element that will create dynamic pads */
+          dynamic = TRUE;
+        }
+        break;
+      }
+      case GST_PAD_REQUEST:
+        /* ignore request pads */
+        GST_DEBUG_OBJECT (dbin, "ignoring request padtemplate %s", templ_name);
+        break;
+    }
+  }
+
+  /* 2. if there are more potential pads, connect to relevant signals */
+  if (dynamic) {
+    GST_LOG_OBJECT (dbin, "Adding signals to element %s in chain %p",
+        GST_ELEMENT_NAME (element), chain);
+    g_signal_connect (G_OBJECT (element), "pad-added",
+        G_CALLBACK (pad_added_cb), chain);
+    g_signal_connect (G_OBJECT (element), "pad-removed",
+        G_CALLBACK (pad_removed_cb), chain);
+    g_signal_connect (G_OBJECT (element), "no-more-pads",
+        G_CALLBACK (no_more_pads_cb), chain);
+  }
+
+  /* 3. for every available pad, connect it */
+  for (pads = to_connect; pads; pads = g_list_next (pads)) {
+    GstPad *pad = GST_PAD_CAST (pads->data);
+    GstCaps *caps;
+
+    caps = get_pad_caps (pad);
+    analyze_new_pad (dbin, element, pad, caps, chain);
+    if (caps)
+      gst_caps_unref (caps);
+
+    gst_object_unref (pad);
+  }
+  g_list_free (to_connect);
+
+  return res;
+}
+
+/* expose_pad:
+ *
+ * Expose the given pad on the chain as a decoded pad.
+ */
+static void
+expose_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
+    GstPad * pad, GstCaps * caps, GstDecodeChain * chain)
+{
+  GstPad *mqpad = NULL;
+
+  GST_DEBUG_OBJECT (dbin, "pad %s:%s, chain:%p",
+      GST_DEBUG_PAD_NAME (pad), chain);
+
+  /* If this is the first pad for this chain, there are no other elements
+   * and the source element is not the multiqueue we must link through the
+   * multiqueue.
+   *
+   * This is the case if a demuxer directly exposed a raw pad.
+   */
+  if (chain->parent && !chain->elements && src != chain->parent->multiqueue) {
+    GST_LOG_OBJECT (src, "connecting the pad through multiqueue");
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), NULL);
+    if (!(mqpad = gst_decode_group_control_demuxer_pad (chain->parent, pad)))
+      goto beach;
+    pad = mqpad;
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), pad);
+  }
+
+  gst_decode_pad_activate (dpad, chain);
+  chain->endpad = gst_object_ref (dpad);
+  chain->endcaps = gst_caps_ref (caps);
+
+  EXPOSE_LOCK (dbin);
+  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+    gst_decode_bin_expose (dbin);
+  }
+  EXPOSE_UNLOCK (dbin);
+
+  if (mqpad)
+    gst_object_unref (mqpad);
+
+beach:
+  return;
+}
+
+/* check_upstream_seekable:
+ *
+ * Check if upstream is seekable.
+ */
+static void
+check_upstream_seekable (GstDecodeBin * dbin, GstPad * pad)
+{
+  GstQuery *query;
+  gint64 start = -1, stop = -1;
+
+  dbin->upstream_seekable = FALSE;
+
+  query = gst_query_new_seeking (GST_FORMAT_BYTES);
+  if (!gst_pad_peer_query (pad, query)) {
+    GST_DEBUG_OBJECT (dbin, "seeking query failed");
+    gst_query_unref (query);
+    return;
+  }
+
+  gst_query_parse_seeking (query, NULL, &dbin->upstream_seekable,
+      &start, &stop);
+
+  gst_query_unref (query);
+
+  /* try harder to query upstream size if we didn't get it the first time */
+  if (dbin->upstream_seekable && stop == -1) {
+    GST_DEBUG_OBJECT (dbin, "doing duration query to fix up unset stop");
+    gst_pad_query_peer_duration (pad, GST_FORMAT_BYTES, &stop);
+  }
+
+  /* if upstream doesn't know the size, it's likely that it's not seekable in
+   * practice even if it technically may be seekable */
+  if (dbin->upstream_seekable && (start != 0 || stop <= start)) {
+    GST_DEBUG_OBJECT (dbin, "seekable but unknown start/stop -> disable");
+    dbin->upstream_seekable = FALSE;
+  }
+
+  GST_DEBUG_OBJECT (dbin, "upstream seekable: %d", dbin->upstream_seekable);
+}
+
+static void
+type_found (GstElement * typefind, guint probability,
+    GstCaps * caps, GstDecodeBin * decode_bin)
+{
+  GstPad *pad, *sink_pad;
+
+  GST_DEBUG_OBJECT (decode_bin, "typefind found caps %" GST_PTR_FORMAT, caps);
+
+  /* If the typefinder (but not something else) finds text/plain - i.e. that's
+   * the top-level type of the file - then error out.
+   */
+  if (gst_structure_has_name (gst_caps_get_structure (caps, 0), "text/plain")) {
+    GST_ELEMENT_ERROR (decode_bin, STREAM, WRONG_TYPE,
+        (_("This appears to be a text file")),
+        ("decodebin cannot decode plain text files"));
+    goto exit;
+  }
+
+  /* FIXME: we can only deal with one type, we don't yet support dynamically changing
+   * caps from the typefind element */
+  if (decode_bin->have_type || decode_bin->decode_chain)
+    goto exit;
+
+  decode_bin->have_type = TRUE;
+
+  pad = gst_element_get_static_pad (typefind, "src");
+  sink_pad = gst_element_get_static_pad (typefind, "sink");
+
+  /* if upstream is seekable we can safely set a limit in time to the queues so
+   * that streams at low bitrates can preroll */
+  check_upstream_seekable (decode_bin, sink_pad);
+
+  /* need some lock here to prevent race with shutdown state change
+   * which might yank away e.g. decode_chain while building stuff here.
+   * In typical cases, STREAM_LOCK is held and handles that, it need not
+   * be held (if called from a proxied setcaps), so grab it anyway */
+  GST_PAD_STREAM_LOCK (sink_pad);
+  decode_bin->decode_chain = gst_decode_chain_new (decode_bin, NULL, pad);
+  analyze_new_pad (decode_bin, typefind, pad, caps, decode_bin->decode_chain);
+  GST_PAD_STREAM_UNLOCK (sink_pad);
+
+  gst_object_unref (sink_pad);
+  gst_object_unref (pad);
+
+exit:
+  return;
+}
+
+static GstProbeReturn
+pad_event_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer data)
+{
+  GstEvent *event = type_data;
+  GstPendingPad *ppad = (GstPendingPad *) data;
+  GstDecodeChain *chain = ppad->chain;
+  GstDecodeBin *dbin = chain->dbin;
+
+  g_assert (ppad);
+  g_assert (chain);
+  g_assert (dbin);
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      GST_DEBUG_OBJECT (dbin, "Received EOS on a non final pad, this stream "
+          "ended too early");
+      chain->deadend = TRUE;
+      /* we don't set the endcaps because NULL endcaps means early EOS */
+      EXPOSE_LOCK (dbin);
+      if (gst_decode_chain_is_complete (dbin->decode_chain))
+        gst_decode_bin_expose (dbin);
+      EXPOSE_UNLOCK (dbin);
+      break;
+    default:
+      break;
+  }
+  return GST_PROBE_OK;
+}
+
+static void
+pad_added_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
+{
+  GstCaps *caps;
+  GstDecodeBin *dbin;
+
+  dbin = chain->dbin;
+
+  GST_DEBUG_OBJECT (pad, "pad added, chain:%p", chain);
+
+  caps = get_pad_caps (pad);
+  analyze_new_pad (dbin, element, pad, caps, chain);
+  if (caps)
+    gst_caps_unref (caps);
+
+  EXPOSE_LOCK (dbin);
+  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+    GST_LOG_OBJECT (dbin,
+        "That was the last dynamic object, now attempting to expose the group");
+    if (!gst_decode_bin_expose (dbin))
+      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  }
+  EXPOSE_UNLOCK (dbin);
+}
+
+static void
+pad_removed_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
+{
+  GList *l;
+
+  GST_LOG_OBJECT (pad, "pad removed, chain:%p", chain);
+
+  /* In fact, we don't have to do anything here, the active group will be
+   * removed when the group's multiqueue is drained */
+  CHAIN_MUTEX_LOCK (chain);
+  for (l = chain->pending_pads; l; l = l->next) {
+    GstPendingPad *ppad = l->data;
+    GstPad *opad = ppad->pad;
+
+    if (pad == opad) {
+      g_signal_handlers_disconnect_by_func (pad, caps_notify_cb, chain);
+      gst_pending_pad_free (ppad);
+      chain->pending_pads = g_list_delete_link (chain->pending_pads, l);
+      break;
+    }
+  }
+  CHAIN_MUTEX_UNLOCK (chain);
+}
+
+static void
+no_more_pads_cb (GstElement * element, GstDecodeChain * chain)
+{
+  GstDecodeGroup *group = NULL;
+
+  GST_LOG_OBJECT (element, "got no more pads");
+
+  CHAIN_MUTEX_LOCK (chain);
+  if (!chain->elements
+      || ((GstDecodeElement *) chain->elements->data)->element != element) {
+    GST_LOG_OBJECT (chain->dbin, "no-more-pads from old chain element '%s'",
+        GST_OBJECT_NAME (element));
+    CHAIN_MUTEX_UNLOCK (chain);
+    return;
+  } else if (!chain->demuxer) {
+    GST_LOG_OBJECT (chain->dbin, "no-more-pads from a non-demuxer element '%s'",
+        GST_OBJECT_NAME (element));
+    CHAIN_MUTEX_UNLOCK (chain);
+    return;
+  }
+
+  /* when we received no_more_pads, we can complete the pads of the chain */
+  if (!chain->next_groups && chain->active_group) {
+    group = chain->active_group;
+  } else if (chain->next_groups) {
+    group = chain->next_groups->data;
+  }
+  if (!group) {
+    GST_ERROR_OBJECT (chain->dbin, "can't find group for element");
+    CHAIN_MUTEX_UNLOCK (chain);
+    return;
+  }
+
+  GST_DEBUG_OBJECT (element, "Setting group %p to complete", group);
+
+  group->no_more_pads = TRUE;
+  /* this group has prerolled enough to not need more pads,
+   * we can probably set its buffering state to playing now */
+  GST_DEBUG_OBJECT (group->dbin, "Setting group %p multiqueue to "
+      "'playing' buffering mode", group);
+  decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE);
+  CHAIN_MUTEX_UNLOCK (chain);
+
+  EXPOSE_LOCK (chain->dbin);
+  if (gst_decode_chain_is_complete (chain->dbin->decode_chain)) {
+    gst_decode_bin_expose (chain->dbin);
+  }
+  EXPOSE_UNLOCK (chain->dbin);
+}
+
+static void
+caps_notify_cb (GstPad * pad, GParamSpec * unused, GstDecodeChain * chain)
+{
+  GstElement *element;
+  GList *l;
+
+  GST_LOG_OBJECT (pad, "Notified caps for pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  /* Disconnect this; if we still need it, we'll reconnect to this in
+   * analyze_new_pad */
+  g_signal_handlers_disconnect_by_func (pad, caps_notify_cb, chain);
+
+  element = GST_ELEMENT_CAST (gst_pad_get_parent (pad));
+
+  CHAIN_MUTEX_LOCK (chain);
+  for (l = chain->pending_pads; l; l = l->next) {
+    GstPendingPad *ppad = l->data;
+    if (ppad->pad == pad) {
+      gst_pending_pad_free (ppad);
+      chain->pending_pads = g_list_delete_link (chain->pending_pads, l);
+      break;
+    }
+  }
+  CHAIN_MUTEX_UNLOCK (chain);
+
+  pad_added_cb (element, pad, chain);
+
+  gst_object_unref (element);
+}
+
+/* Decide whether an element is a demuxer based on the
+ * klass and number/type of src pad templates it has */
+static gboolean
+is_demuxer_element (GstElement * srcelement)
+{
+  GstElementFactory *srcfactory;
+  GstElementClass *elemclass;
+  GList *walk;
+  const gchar *klass;
+  gint potential_src_pads = 0;
+
+  srcfactory = gst_element_get_factory (srcelement);
+  klass = gst_element_factory_get_klass (srcfactory);
+
+  /* Can't be a demuxer unless it has Demux in the klass name */
+  if (!strstr (klass, "Demux"))
+    return FALSE;
+
+  /* Walk the src pad templates and count how many the element
+   * might produce */
+  elemclass = GST_ELEMENT_GET_CLASS (srcelement);
+
+  walk = gst_element_class_get_pad_template_list (elemclass);
+  while (walk != NULL) {
+    GstPadTemplate *templ;
+
+    templ = (GstPadTemplate *) walk->data;
+    if (GST_PAD_TEMPLATE_DIRECTION (templ) == GST_PAD_SRC) {
+      switch (GST_PAD_TEMPLATE_PRESENCE (templ)) {
+        case GST_PAD_ALWAYS:
+        case GST_PAD_SOMETIMES:
+          if (strstr (GST_PAD_TEMPLATE_NAME_TEMPLATE (templ), "%"))
+            potential_src_pads += 2;    /* Might make multiple pads */
+          else
+            potential_src_pads += 1;
+          break;
+        case GST_PAD_REQUEST:
+          potential_src_pads += 2;
+          break;
+      }
+    }
+    walk = g_list_next (walk);
+  }
+
+  if (potential_src_pads < 2)
+    return FALSE;
+
+  return TRUE;
+}
+
+/* Returns TRUE if the caps are compatible with the caps specified in the 'caps'
+ * property (which by default are the raw caps)
+ *
+ * The decodebin_lock should be taken !
+ */
+static gboolean
+are_final_caps (GstDecodeBin * dbin, GstCaps * caps)
+{
+  gboolean res;
+
+  GST_LOG_OBJECT (dbin, "Checking with caps %" GST_PTR_FORMAT, caps);
+
+  /* lock for getting the caps */
+  GST_OBJECT_LOCK (dbin);
+  res = gst_caps_can_intersect (dbin->caps, caps);
+  GST_OBJECT_UNLOCK (dbin);
+
+  GST_LOG_OBJECT (dbin, "Caps are %sfinal caps", res ? "" : "not ");
+
+  return res;
+}
+
+/****
+ * GstDecodeChain functions
+ ****/
+
+/* gst_decode_chain_get_current_group:
+ *
+ * Returns the current group of this chain, to which
+ * new chains should be attached or NULL if the last
+ * group didn't have no-more-pads.
+ *
+ * Not MT-safe: Call with parent chain lock!
+ */
+static GstDecodeGroup *
+gst_decode_chain_get_current_group (GstDecodeChain * chain)
+{
+  GstDecodeGroup *group;
+
+  if (!chain->next_groups && chain->active_group
+      && chain->active_group->overrun && !chain->active_group->no_more_pads) {
+    GST_WARNING_OBJECT (chain->dbin,
+        "Currently active group %p is exposed"
+        " and wants to add a new pad without having signaled no-more-pads",
+        chain->active_group);
+    return NULL;
+  }
+
+  if (chain->next_groups && (group = chain->next_groups->data) && group->overrun
+      && !group->no_more_pads) {
+    GST_WARNING_OBJECT (chain->dbin,
+        "Currently newest pending group %p "
+        "had overflow but didn't signal no-more-pads", group);
+    return NULL;
+  }
+
+  /* Now we know that we can really return something useful */
+  if (!chain->active_group) {
+    chain->active_group = group = gst_decode_group_new (chain->dbin, chain);
+  } else if (!chain->active_group->overrun
+      && !chain->active_group->no_more_pads) {
+    group = chain->active_group;
+  } else if (chain->next_groups && (group = chain->next_groups->data)
+      && !group->overrun && !group->no_more_pads) {
+    /* group = chain->next_groups->data */
+  } else {
+    group = gst_decode_group_new (chain->dbin, chain);
+    chain->next_groups = g_list_prepend (chain->next_groups, group);
+  }
+
+  return group;
+}
+
+static void gst_decode_group_free_internal (GstDecodeGroup * group,
+    gboolean hide);
+
+static void
+gst_decode_chain_free_internal (GstDecodeChain * chain, gboolean hide)
+{
+  GList *l;
+
+  CHAIN_MUTEX_LOCK (chain);
+
+  GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hiding" : "Freeing"),
+      chain);
+
+  if (chain->active_group) {
+    gst_decode_group_free_internal (chain->active_group, hide);
+    if (!hide)
+      chain->active_group = NULL;
+  }
+
+  for (l = chain->next_groups; l; l = l->next) {
+    gst_decode_group_free_internal ((GstDecodeGroup *) l->data, hide);
+    if (!hide)
+      l->data = NULL;
+  }
+  if (!hide) {
+    g_list_free (chain->next_groups);
+    chain->next_groups = NULL;
+  }
+
+  if (!hide) {
+    for (l = chain->old_groups; l; l = l->next) {
+      GstDecodeGroup *group = l->data;
+
+      gst_decode_group_free (group);
+    }
+    g_list_free (chain->old_groups);
+    chain->old_groups = NULL;
+  }
+
+  for (l = chain->pending_pads; l; l = l->next) {
+    GstPendingPad *ppad = l->data;
+    GstPad *pad = ppad->pad;
+
+    g_signal_handlers_disconnect_by_func (pad, caps_notify_cb, chain);
+    gst_pending_pad_free (ppad);
+    l->data = NULL;
+  }
+  g_list_free (chain->pending_pads);
+  chain->pending_pads = NULL;
+
+  for (l = chain->elements; l; l = l->next) {
+    GstDecodeElement *delem = l->data;
+    GstElement *element = delem->element;
+
+    g_signal_handlers_disconnect_by_func (element, pad_added_cb, chain);
+    g_signal_handlers_disconnect_by_func (element, pad_removed_cb, chain);
+    g_signal_handlers_disconnect_by_func (element, no_more_pads_cb, chain);
+
+    if (delem->capsfilter) {
+      if (GST_OBJECT_PARENT (delem->capsfilter) ==
+          GST_OBJECT_CAST (chain->dbin))
+        gst_bin_remove (GST_BIN_CAST (chain->dbin), delem->capsfilter);
+      if (!hide) {
+        gst_element_set_state (delem->capsfilter, GST_STATE_NULL);
+      }
+    }
+
+    if (GST_OBJECT_PARENT (element) == GST_OBJECT_CAST (chain->dbin))
+      gst_bin_remove (GST_BIN_CAST (chain->dbin), element);
+    if (!hide) {
+      gst_element_set_state (element, GST_STATE_NULL);
+    }
+
+    SUBTITLE_LOCK (chain->dbin);
+    /* remove possible subtitle element */
+    chain->dbin->subtitles = g_list_remove (chain->dbin->subtitles, element);
+    SUBTITLE_UNLOCK (chain->dbin);
+
+    if (!hide) {
+      if (delem->capsfilter) {
+        gst_object_unref (delem->capsfilter);
+        delem->capsfilter = NULL;
+      }
+
+      gst_object_unref (element);
+      l->data = NULL;
+
+      g_slice_free (GstDecodeElement, delem);
+    }
+  }
+  if (!hide) {
+    g_list_free (chain->elements);
+    chain->elements = NULL;
+  }
+
+  if (chain->endpad) {
+    if (chain->endpad->exposed) {
+      gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin),
+          GST_PAD_CAST (chain->endpad));
+    }
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (chain->endpad), NULL);
+    chain->endpad->exposed = FALSE;
+    if (!hide) {
+      gst_object_unref (chain->endpad);
+      chain->endpad = NULL;
+    }
+  }
+
+  if (chain->pad) {
+    gst_object_unref (chain->pad);
+    chain->pad = NULL;
+  }
+
+  if (chain->endcaps) {
+    gst_caps_unref (chain->endcaps);
+    chain->endcaps = NULL;
+  }
+
+  GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hidden" : "Freed"),
+      chain);
+  CHAIN_MUTEX_UNLOCK (chain);
+  if (!hide) {
+    g_mutex_free (chain->lock);
+    g_slice_free (GstDecodeChain, chain);
+  }
+}
+
+/* gst_decode_chain_free:
+ *
+ * Completely frees and removes the chain and all
+ * child groups from decodebin.
+ *
+ * MT-safe, don't hold the chain lock or any child chain's lock
+ * when calling this!
+ */
+static void
+gst_decode_chain_free (GstDecodeChain * chain)
+{
+  gst_decode_chain_free_internal (chain, FALSE);
+}
+
+/* gst_decode_chain_new:
+ *
+ * Creates a new decode chain and initializes it.
+ *
+ * It's up to the caller to add it to the list of child chains of
+ * a group!
+ */
+static GstDecodeChain *
+gst_decode_chain_new (GstDecodeBin * dbin, GstDecodeGroup * parent,
+    GstPad * pad)
+{
+  GstDecodeChain *chain = g_slice_new0 (GstDecodeChain);
+
+  GST_DEBUG_OBJECT (dbin, "Creating new chain %p with parent group %p", chain,
+      parent);
+
+  chain->dbin = dbin;
+  chain->parent = parent;
+  chain->lock = g_mutex_new ();
+  chain->pad = gst_object_ref (pad);
+
+  return chain;
+}
+
+/****
+ * GstDecodeGroup functions
+ ****/
+
+/* The overrun callback is used to expose groups that have not yet had their
+ * no_more_pads called while the (large) multiqueue overflowed. When this
+ * happens we must assume that the no_more_pads will not arrive anymore and we
+ * must expose the pads that we have.
+ */
+static void
+multi_queue_overrun_cb (GstElement * queue, GstDecodeGroup * group)
+{
+  GstDecodeBin *dbin;
+
+  dbin = group->dbin;
+
+  GST_LOG_OBJECT (dbin, "multiqueue '%s' (%p) is full", GST_OBJECT_NAME (queue),
+      queue);
+
+  group->overrun = TRUE;
+
+  /* FIXME: We should make sure that everything gets exposed now
+   * even if child chains are not complete because the will never
+   * be complete! Ignore any non-complete chains when exposing
+   * and never expose them later
+   */
+
+  EXPOSE_LOCK (dbin);
+  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+    if (!gst_decode_bin_expose (dbin))
+      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  }
+  EXPOSE_UNLOCK (group->dbin);
+}
+
+static void
+gst_decode_group_free_internal (GstDecodeGroup * group, gboolean hide)
+{
+  GList *l;
+
+  GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hiding" : "Freeing"),
+      group);
+  for (l = group->children; l; l = l->next) {
+    GstDecodeChain *chain = (GstDecodeChain *) l->data;
+
+    gst_decode_chain_free_internal (chain, hide);
+    if (!hide)
+      l->data = NULL;
+  }
+  if (!hide) {
+    g_list_free (group->children);
+    group->children = NULL;
+  }
+
+  if (!hide) {
+    for (l = group->reqpads; l; l = l->next) {
+      GstPad *pad = l->data;
+
+      gst_element_release_request_pad (group->multiqueue, pad);
+      gst_object_unref (pad);
+      l->data = NULL;
+    }
+    g_list_free (group->reqpads);
+    group->reqpads = NULL;
+  }
+
+  if (group->multiqueue) {
+    if (group->overrunsig) {
+      g_signal_handler_disconnect (group->multiqueue, group->overrunsig);
+      group->overrunsig = 0;
+    }
+
+    if (GST_OBJECT_PARENT (group->multiqueue) == GST_OBJECT_CAST (group->dbin))
+      gst_bin_remove (GST_BIN_CAST (group->dbin), group->multiqueue);
+    if (!hide) {
+      gst_element_set_state (group->multiqueue, GST_STATE_NULL);
+      gst_object_unref (group->multiqueue);
+      group->multiqueue = NULL;
+    }
+  }
+
+  GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hided" : "Freed"),
+      group);
+  if (!hide)
+    g_slice_free (GstDecodeGroup, group);
+}
+
+/* gst_decode_group_free:
+ *
+ * Completely frees and removes the decode group and all
+ * it's children.
+ *
+ * Never call this from any streaming thread!
+ *
+ * Not MT-safe, call with parent's chain lock!
+ */
+static void
+gst_decode_group_free (GstDecodeGroup * group)
+{
+  gst_decode_group_free_internal (group, FALSE);
+}
+
+/* gst_decode_group_hide:
+ *
+ * Hide the decode group only, this means that
+ * all child endpads are removed from decodebin
+ * and all signals are unconnected.
+ *
+ * No element is set to NULL state and completely
+ * unrefed here.
+ *
+ * Can be called from streaming threads.
+ *
+ * Not MT-safe, call with parent's chain lock!
+ */
+static void
+gst_decode_group_hide (GstDecodeGroup * group)
+{
+  gst_decode_group_free_internal (group, TRUE);
+}
+
+/* configure queue sizes, this depends on the buffering method and if we are
+ * playing or prerolling. */
+static void
+decodebin_set_queue_size (GstDecodeBin * dbin, GstElement * multiqueue,
+    gboolean preroll)
+{
+  guint max_bytes, max_buffers;
+  guint64 max_time;
+
+  if (preroll || dbin->use_buffering) {
+    /* takes queue limits, initially we only queue up up to the max bytes limit,
+     * with a default of 2MB. we use the same values for buffering mode. */
+    if ((max_bytes = dbin->max_size_bytes) == 0)
+      max_bytes = AUTO_PREROLL_SIZE_BYTES;
+    if ((max_buffers = dbin->max_size_buffers) == 0)
+      max_buffers = AUTO_PREROLL_SIZE_BUFFERS;
+    if ((max_time = dbin->max_size_time) == 0)
+      max_time = dbin->upstream_seekable ? AUTO_PREROLL_SEEKABLE_SIZE_TIME :
+          AUTO_PREROLL_NOT_SEEKABLE_SIZE_TIME;
+  } else {
+    /* update runtime limits. At runtime, we try to keep the amount of buffers
+     * in the queues as low as possible (but at least 5 buffers). */
+    if ((max_bytes = dbin->max_size_bytes) == 0)
+      max_bytes = AUTO_PLAY_SIZE_BYTES;
+    if ((max_buffers = dbin->max_size_buffers) == 0)
+      max_buffers = AUTO_PLAY_SIZE_BUFFERS;
+    if ((max_time = dbin->max_size_time) == 0)
+      max_time = AUTO_PLAY_SIZE_TIME;
+  }
+
+  g_object_set (multiqueue,
+      "max-size-bytes", max_bytes, "max-size-time", max_time,
+      "max-size-buffers", max_buffers, NULL);
+}
+
+/* gst_decode_group_new:
+ * @dbin: Parent decodebin
+ * @parent: Parent chain or %NULL
+ *
+ * Creates a new GstDecodeGroup. It is up to the caller to add it to the list
+ * of groups.
+ */
+static GstDecodeGroup *
+gst_decode_group_new (GstDecodeBin * dbin, GstDecodeChain * parent)
+{
+  GstDecodeGroup *group = g_slice_new0 (GstDecodeGroup);
+  GstElement *mq;
+
+  GST_DEBUG_OBJECT (dbin, "Creating new group %p with parent chain %p", group,
+      parent);
+
+  group->dbin = dbin;
+  group->parent = parent;
+
+  mq = group->multiqueue = gst_element_factory_make ("multiqueue", NULL);
+  if (G_UNLIKELY (!group->multiqueue))
+    goto missing_multiqueue;
+
+  /* default is for use-buffering is FALSE */
+  if (dbin->use_buffering) {
+    g_object_set (mq,
+        "use-buffering", TRUE,
+        "low-percent", dbin->low_percent,
+        "high-percent", dbin->high_percent, NULL);
+  }
+
+  /* configure queue sizes for preroll */
+  decodebin_set_queue_size (dbin, mq, TRUE);
+
+  group->overrunsig = g_signal_connect (G_OBJECT (mq), "overrun",
+      G_CALLBACK (multi_queue_overrun_cb), group);
+
+  gst_bin_add (GST_BIN (dbin), gst_object_ref (mq));
+  gst_element_set_state (mq, GST_STATE_PAUSED);
+
+  return group;
+
+  /* ERRORS */
+missing_multiqueue:
+  {
+    gst_element_post_message (GST_ELEMENT_CAST (dbin),
+        gst_missing_element_message_new (GST_ELEMENT_CAST (dbin),
+            "multiqueue"));
+    GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL), ("no multiqueue!"));
+    g_slice_free (GstDecodeGroup, group);
+    return NULL;
+  }
+}
+
+/* gst_decode_group_control_demuxer_pad
+ *
+ * Adds a new demuxer srcpad to the given group.
+ *
+ * Returns the srcpad of the multiqueue corresponding the given pad.
+ * Returns NULL if there was an error.
+ */
+static GstPad *
+gst_decode_group_control_demuxer_pad (GstDecodeGroup * group, GstPad * pad)
+{
+  GstDecodeBin *dbin;
+  GstPad *srcpad, *sinkpad;
+  GstIterator *it = NULL;
+  GValue item = { 0, };
+
+  dbin = group->dbin;
+
+  GST_LOG_OBJECT (dbin, "group:%p pad %s:%s", group, GST_DEBUG_PAD_NAME (pad));
+
+  srcpad = NULL;
+
+  if (G_UNLIKELY (!group->multiqueue))
+    return NULL;
+
+  if (!(sinkpad = gst_element_get_request_pad (group->multiqueue, "sink%d"))) {
+    GST_ERROR_OBJECT (dbin, "Couldn't get sinkpad from multiqueue");
+    return NULL;
+  }
+
+  if ((gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) {
+    GST_ERROR_OBJECT (dbin, "Couldn't link demuxer and multiqueue");
+    goto error;
+  }
+
+  it = gst_pad_iterate_internal_links (sinkpad);
+
+  if (!it || (gst_iterator_next (it, &item)) != GST_ITERATOR_OK
+      || ((srcpad = g_value_dup_object (&item)) == NULL)) {
+    GST_ERROR_OBJECT (dbin,
+        "Couldn't get srcpad from multiqueue for sinkpad %" GST_PTR_FORMAT,
+        sinkpad);
+    goto error;
+  }
+  CHAIN_MUTEX_LOCK (group->parent);
+  group->reqpads = g_list_prepend (group->reqpads, gst_object_ref (sinkpad));
+  CHAIN_MUTEX_UNLOCK (group->parent);
+
+beach:
+  g_value_unset (&item);
+  if (it)
+    gst_iterator_free (it);
+  gst_object_unref (sinkpad);
+  return srcpad;
+
+error:
+  gst_element_release_request_pad (group->multiqueue, sinkpad);
+  goto beach;
+}
+
+/* gst_decode_group_is_complete:
+ *
+ * Checks if the group is complete, this means that
+ * a) overrun of the multiqueue or no-more-pads happened
+ * b) all child chains are complete
+ *
+ * Not MT-safe, always call with decodebin expose lock
+ */
+static gboolean
+gst_decode_group_is_complete (GstDecodeGroup * group)
+{
+  GList *l;
+  gboolean complete = TRUE;
+
+  if (!group->overrun && !group->no_more_pads) {
+    complete = FALSE;
+    goto out;
+  }
+
+  for (l = group->children; l; l = l->next) {
+    GstDecodeChain *chain = l->data;
+
+    if (!gst_decode_chain_is_complete (chain)) {
+      complete = FALSE;
+      goto out;
+    }
+  }
+
+out:
+  GST_DEBUG_OBJECT (group->dbin, "Group %p is complete: %d", group, complete);
+  return complete;
+}
+
+/* gst_decode_chain_is_complete:
+ *
+ * Returns TRUE if the chain is complete, this means either
+ * a) This chain is a dead end, i.e. we have no suitable plugins
+ * b) This chain ends in an endpad and this is blocked or exposed
+ *
+ * Not MT-safe, always call with decodebin expose lock
+ */
+static gboolean
+gst_decode_chain_is_complete (GstDecodeChain * chain)
+{
+  gboolean complete = FALSE;
+
+  CHAIN_MUTEX_LOCK (chain);
+  if (chain->deadend) {
+    complete = TRUE;
+    goto out;
+  }
+
+  if (chain->endpad && (chain->endpad->blocked || chain->endpad->exposed)) {
+    complete = TRUE;
+    goto out;
+  }
+
+  if (chain->demuxer) {
+    if (chain->active_group
+        && gst_decode_group_is_complete (chain->active_group)) {
+      complete = TRUE;
+      goto out;
+    }
+  }
+
+out:
+  CHAIN_MUTEX_UNLOCK (chain);
+  GST_DEBUG_OBJECT (chain->dbin, "Chain %p is complete: %d", chain, complete);
+  return complete;
+}
+
+static gboolean
+drain_and_switch_chains (GstDecodeChain * chain, GstDecodePad * drainpad,
+    gboolean * last_group, gboolean * drained, gboolean * switched);
+/* drain_and_switch_chains/groups:
+ *
+ * CALL WITH CHAIN LOCK (or group parent) TAKEN !
+ *
+ * Goes down the chains/groups until it finds the chain
+ * to which the drainpad belongs.
+ *
+ * It marks that pad/chain as drained and then will figure
+ * out which group to switch to or not.
+ *
+ * last_chain will be set to TRUE if the group to which the
+ * pad belongs is the last one.
+ *
+ * drained will be set to TRUE if the chain/group is drained.
+ *
+ * Returns: TRUE if the chain contained the target pad */
+static gboolean
+drain_and_switch_group (GstDecodeGroup * group, GstDecodePad * drainpad,
+    gboolean * last_group, gboolean * drained, gboolean * switched)
+{
+  gboolean handled = FALSE;
+  gboolean alldrained = TRUE;
+  GList *tmp;
+
+  GST_DEBUG ("Checking group %p (target pad %s:%s)",
+      group, GST_DEBUG_PAD_NAME (drainpad));
+
+  /* Definitely can't be in drained groups */
+  if (G_UNLIKELY (group->drained)) {
+    goto beach;
+  }
+
+  /* Figure out if all our chains are drained with the
+   * new information */
+  for (tmp = group->children; tmp; tmp = tmp->next) {
+    GstDecodeChain *chain = (GstDecodeChain *) tmp->data;
+    gboolean subdrained = FALSE;
+
+    handled |=
+        drain_and_switch_chains (chain, drainpad, last_group, &subdrained,
+        switched);
+    if (!subdrained)
+      alldrained = FALSE;
+  }
+
+beach:
+  GST_DEBUG ("group %p (last_group:%d, drained:%d, switched:%d, handled:%d)",
+      group, *last_group, alldrained, *switched, handled);
+  *drained = alldrained;
+  return handled;
+}
+
+static gboolean
+drain_and_switch_chains (GstDecodeChain * chain, GstDecodePad * drainpad,
+    gboolean * last_group, gboolean * drained, gboolean * switched)
+{
+  gboolean handled = FALSE;
+  GstDecodeBin *dbin = chain->dbin;
+
+  GST_DEBUG ("Checking chain %p (target pad %s:%s)",
+      chain, GST_DEBUG_PAD_NAME (drainpad));
+
+  CHAIN_MUTEX_LOCK (chain);
+
+  if (chain->endpad) {
+    /* Check if we're reached the target endchain */
+    if (chain == drainpad->chain) {
+      GST_DEBUG ("Found the target chain");
+      drainpad->drained = TRUE;
+      handled = TRUE;
+    }
+
+    *drained = chain->endpad->drained;
+    goto beach;
+  }
+
+  /* We known there are groups to switch to */
+  if (chain->next_groups)
+    *last_group = FALSE;
+
+  /* Check the active group */
+  if (chain->active_group) {
+    gboolean subdrained = FALSE;
+    handled = drain_and_switch_group (chain->active_group, drainpad,
+        last_group, &subdrained, switched);
+
+    /* The group is drained, see if we can switch to another */
+    if (handled && subdrained && !*switched) {
+      if (chain->next_groups) {
+        /* Switch to next group */
+        GST_DEBUG_OBJECT (dbin, "Hiding current group %p", chain->active_group);
+        gst_decode_group_hide (chain->active_group);
+        chain->old_groups =
+            g_list_prepend (chain->old_groups, chain->active_group);
+        GST_DEBUG_OBJECT (dbin, "Switching to next group %p",
+            chain->next_groups->data);
+        chain->active_group = chain->next_groups->data;
+        chain->next_groups =
+            g_list_delete_link (chain->next_groups, chain->next_groups);
+        *switched = TRUE;
+        *drained = FALSE;
+      } else {
+        GST_DEBUG ("Group %p was the last in chain %p", chain->active_group,
+            chain);
+        *drained = TRUE;
+        /* We're drained ! */
+      }
+    }
+  }
+
+beach:
+  CHAIN_MUTEX_UNLOCK (chain);
+
+  GST_DEBUG ("Chain %p (handled:%d, last_group:%d, drained:%d, switched:%d)",
+      chain, handled, *last_group, *drained, *switched);
+
+  return handled;
+}
+
+/* check if the group is drained, meaning all pads have seen an EOS
+ * event.  */
+static gboolean
+gst_decode_pad_handle_eos (GstDecodePad * pad)
+{
+  gboolean last_group = TRUE;
+  gboolean switched = FALSE;
+  gboolean drained = FALSE;
+  GstDecodeChain *chain = pad->chain;
+  GstDecodeBin *dbin = chain->dbin;
+
+  GST_LOG_OBJECT (dbin, "pad %p", pad);
+  drain_and_switch_chains (dbin->decode_chain, pad, &last_group, &drained,
+      &switched);
+
+  if (switched) {
+    /* If we resulted in a group switch, expose what's needed */
+    EXPOSE_LOCK (dbin);
+    if (gst_decode_chain_is_complete (dbin->decode_chain))
+      gst_decode_bin_expose (dbin);
+    EXPOSE_UNLOCK (dbin);
+  }
+
+  return last_group;
+}
+
+/* gst_decode_group_is_drained:
+ *
+ * Check is this group is drained and cache this result.
+ * The group is drained if all child chains are drained.
+ *
+ * Not MT-safe, call with group->parent's lock */
+static gboolean
+gst_decode_group_is_drained (GstDecodeGroup * group)
+{
+  GList *l;
+  gboolean drained = TRUE;
+
+  if (group->drained) {
+    drained = TRUE;
+    goto out;
+  }
+
+  for (l = group->children; l; l = l->next) {
+    GstDecodeChain *chain = l->data;
+
+    CHAIN_MUTEX_LOCK (chain);
+    if (!gst_decode_chain_is_drained (chain))
+      drained = FALSE;
+    CHAIN_MUTEX_UNLOCK (chain);
+    if (!drained)
+      goto out;
+  }
+  group->drained = drained;
+
+out:
+  GST_DEBUG_OBJECT (group->dbin, "Group %p is drained: %d", group, drained);
+  return drained;
+}
+
+/* gst_decode_chain_is_drained:
+ *
+ * Check is the chain is drained, which means that
+ * either
+ *
+ * a) it's endpad is drained
+ * b) there are no pending pads, the active group is drained
+ *    and there are no next groups
+ *
+ * Not MT-safe, call with chain lock
+ */
+static gboolean
+gst_decode_chain_is_drained (GstDecodeChain * chain)
+{
+  gboolean drained = FALSE;
+
+  if (chain->endpad) {
+    drained = chain->endpad->drained;
+    goto out;
+  }
+
+  if (chain->pending_pads) {
+    drained = FALSE;
+    goto out;
+  }
+
+  if (chain->active_group && gst_decode_group_is_drained (chain->active_group)
+      && !chain->next_groups) {
+    drained = TRUE;
+    goto out;
+  }
+
+out:
+  GST_DEBUG_OBJECT (chain->dbin, "Chain %p is drained: %d", chain, drained);
+  return drained;
+}
+
+/* sort_end_pads:
+ * GCompareFunc to use with lists of GstPad.
+ * Sorts pads by mime type.
+ * First video (raw, then non-raw), then audio (raw, then non-raw),
+ * then others.
+ *
+ * Return: negative if a<b, 0 if a==b, positive if a>b
+ */
+static gint
+sort_end_pads (GstDecodePad * da, GstDecodePad * db)
+{
+  gint va, vb;
+  GstCaps *capsa, *capsb;
+  GstStructure *sa, *sb;
+  const gchar *namea, *nameb;
+
+  capsa = get_pad_caps (GST_PAD_CAST (da));
+  capsb = get_pad_caps (GST_PAD_CAST (db));
+
+  sa = gst_caps_get_structure ((const GstCaps *) capsa, 0);
+  sb = gst_caps_get_structure ((const GstCaps *) capsb, 0);
+
+  namea = gst_structure_get_name (sa);
+  nameb = gst_structure_get_name (sb);
+
+  if (g_strrstr (namea, "video/x-raw"))
+    va = 0;
+  else if (g_strrstr (namea, "video/"))
+    va = 1;
+  else if (g_strrstr (namea, "audio/x-raw"))
+    va = 2;
+  else if (g_strrstr (namea, "audio/"))
+    va = 3;
+  else
+    va = 4;
+
+  if (g_strrstr (nameb, "video/x-raw"))
+    vb = 0;
+  else if (g_strrstr (nameb, "video/"))
+    vb = 1;
+  else if (g_strrstr (nameb, "audio/x-raw"))
+    vb = 2;
+  else if (g_strrstr (nameb, "audio/"))
+    vb = 3;
+  else
+    vb = 4;
+
+  gst_caps_unref (capsa);
+  gst_caps_unref (capsb);
+
+  return va - vb;
+}
+
+static GstCaps *
+_gst_element_get_linked_caps (GstElement * src, GstElement * sink)
+{
+  GstIterator *it;
+  GstElement *parent;
+  GstPad *pad, *peer;
+  gboolean done = FALSE;
+  GstCaps *caps = NULL;
+  GValue item = { 0, };
+
+  it = gst_element_iterate_src_pads (src);
+  while (!done) {
+    switch (gst_iterator_next (it, &item)) {
+      case GST_ITERATOR_OK:
+        pad = g_value_get_object (&item);
+        peer = gst_pad_get_peer (pad);
+        if (peer) {
+          parent = gst_pad_get_parent_element (peer);
+          if (parent == sink) {
+            caps = gst_pad_get_current_caps (pad);
+            done = TRUE;
+          }
+
+          if (parent)
+            gst_object_unref (parent);
+          gst_object_unref (peer);
+        }
+        g_value_reset (&item);
+        break;
+      case GST_ITERATOR_RESYNC:
+        gst_iterator_resync (it);
+        break;
+      case GST_ITERATOR_ERROR:
+      case GST_ITERATOR_DONE:
+        done = TRUE;
+        break;
+    }
+  }
+  g_value_unset (&item);
+  gst_iterator_free (it);
+
+  return caps;
+}
+
+static GQuark topology_structure_name = 0;
+static GQuark topology_caps = 0;
+static GQuark topology_next = 0;
+static GQuark topology_pad = 0;
+
+/* FIXME: Invent gst_structure_take_structure() to prevent all the
+ * structure copying for nothing
+ */
+static GstStructure *
+gst_decode_chain_get_topology (GstDecodeChain * chain)
+{
+  GstStructure *s, *u;
+  GList *l;
+  GstCaps *caps;
+
+  if (G_UNLIKELY ((chain->endpad || chain->deadend)
+          && (chain->endcaps == NULL))) {
+    GST_WARNING ("End chain without valid caps !");
+    return NULL;
+  }
+
+  u = gst_structure_id_empty_new (topology_structure_name);
+
+  /* Now at the last element */
+  if (chain->elements && (chain->endpad || chain->deadend)) {
+    s = gst_structure_id_empty_new (topology_structure_name);
+    gst_structure_id_set (u, topology_caps, GST_TYPE_CAPS, chain->endcaps,
+        NULL);
+
+    if (chain->endpad)
+      gst_structure_id_set (u, topology_pad, GST_TYPE_PAD, chain->endpad, NULL);
+    gst_structure_id_set (s, topology_next, GST_TYPE_STRUCTURE, u, NULL);
+    gst_structure_free (u);
+    u = s;
+  } else if (chain->active_group) {
+    GValue list = { 0, };
+    GValue item = { 0, };
+
+    g_value_init (&list, GST_TYPE_LIST);
+    g_value_init (&item, GST_TYPE_STRUCTURE);
+    for (l = chain->active_group->children; l; l = l->next) {
+      s = gst_decode_chain_get_topology (l->data);
+      if (s) {
+        gst_value_set_structure (&item, s);
+        gst_value_list_append_value (&list, &item);
+        g_value_reset (&item);
+        gst_structure_free (s);
+      }
+    }
+    gst_structure_id_set_value (u, topology_next, &list);
+    g_value_unset (&list);
+    g_value_unset (&item);
+  }
+
+  /* Get caps between all elements in this chain */
+  l = (chain->elements && chain->elements->next) ? chain->elements : NULL;
+  for (; l && l->next; l = l->next) {
+    GstDecodeElement *delem, *delem_next;
+    GstElement *elem, *elem_next;
+    GstCaps *caps;
+
+    delem = l->data;
+    elem = delem->element;
+    delem_next = l->next->data;
+    elem_next = delem_next->element;
+
+    caps = _gst_element_get_linked_caps (elem_next, elem);
+
+    if (caps) {
+      s = gst_structure_id_empty_new (topology_structure_name);
+      gst_structure_id_set (u, topology_caps, GST_TYPE_CAPS, caps, NULL);
+      gst_caps_unref (caps);
+
+      gst_structure_id_set (s, topology_next, GST_TYPE_STRUCTURE, u, NULL);
+      gst_structure_free (u);
+      u = s;
+    }
+  }
+
+  /* Caps that resulted in this chain */
+  caps = gst_pad_get_current_caps (chain->pad);
+  if (!caps) {
+    caps = get_pad_caps (chain->pad);
+    if (G_UNLIKELY (!gst_caps_is_fixed (caps))) {
+      GST_ERROR_OBJECT (chain->pad,
+          "Couldn't get fixed caps, got %" GST_PTR_FORMAT, caps);
+      gst_caps_unref (caps);
+      caps = NULL;
+    }
+  }
+  gst_structure_set (u, "caps", GST_TYPE_CAPS, caps, NULL);
+  gst_caps_unref (caps);
+
+  return u;
+}
+
+static void
+gst_decode_bin_post_topology_message (GstDecodeBin * dbin)
+{
+  GstStructure *s;
+  GstMessage *msg;
+
+  s = gst_decode_chain_get_topology (dbin->decode_chain);
+
+  msg = gst_message_new_element (GST_OBJECT (dbin), s);
+  gst_element_post_message (GST_ELEMENT (dbin), msg);
+}
+
+/* Must only be called if the toplevel chain is complete and blocked! */
+/* Not MT-safe, call with decodebin expose lock! */
+static gboolean
+gst_decode_bin_expose (GstDecodeBin * dbin)
+{
+  GList *tmp, *endpads = NULL;
+  gboolean missing_plugin = FALSE;
+  gboolean already_exposed = TRUE;
+
+  GST_DEBUG_OBJECT (dbin, "Exposing currently active chains/groups");
+
+  /* Don't expose if we're currently shutting down */
+  DYN_LOCK (dbin);
+  if (G_UNLIKELY (dbin->shutdown == TRUE)) {
+    GST_WARNING_OBJECT (dbin, "Currently, shutting down, aborting exposing");
+    DYN_UNLOCK (dbin);
+    return FALSE;
+  }
+  DYN_UNLOCK (dbin);
+
+  /* Get the pads that we're going to expose and mark things as exposed */
+  if (!gst_decode_chain_expose (dbin->decode_chain, &endpads, &missing_plugin)) {
+    g_list_foreach (endpads, (GFunc) gst_object_unref, NULL);
+    g_list_free (endpads);
+    GST_ERROR_OBJECT (dbin, "Broken chain/group tree");
+    g_return_val_if_reached (FALSE);
+    return FALSE;
+  }
+  if (endpads == NULL) {
+    if (missing_plugin) {
+      GST_WARNING_OBJECT (dbin, "No suitable plugins found");
+      GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL),
+          ("no suitable plugins found"));
+    } else {
+      /* in this case, the stream ended without buffers,
+       * just post a warning */
+      GST_WARNING_OBJECT (dbin, "All streams finished without buffers");
+      GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL),
+          ("all streams without buffers"));
+    }
+    return FALSE;
+  }
+
+  /* Check if this was called when everything was exposed already */
+  for (tmp = endpads; tmp && already_exposed; tmp = tmp->next) {
+    GstDecodePad *dpad = tmp->data;
+
+    already_exposed &= dpad->exposed;
+    if (!already_exposed)
+      break;
+  }
+  if (already_exposed) {
+    GST_DEBUG_OBJECT (dbin, "Everything was exposed already!");
+    g_list_foreach (endpads, (GFunc) gst_object_unref, NULL);
+    g_list_free (endpads);
+    return TRUE;
+  }
+
+  /* Set all already exposed pads to blocked */
+  for (tmp = endpads; tmp; tmp = tmp->next) {
+    GstDecodePad *dpad = tmp->data;
+
+    if (dpad->exposed) {
+      GST_DEBUG_OBJECT (dpad, "blocking exposed pad");
+      gst_decode_pad_set_blocked (dpad, TRUE);
+    }
+  }
+
+  /* re-order pads : video, then audio, then others */
+  endpads = g_list_sort (endpads, (GCompareFunc) sort_end_pads);
+
+  /* Expose pads */
+  for (tmp = endpads; tmp; tmp = tmp->next) {
+    GstDecodePad *dpad = (GstDecodePad *) tmp->data;
+    gchar *padname;
+
+    /* 1. rewrite name */
+    padname = g_strdup_printf ("src%d", dbin->nbpads);
+    dbin->nbpads++;
+    GST_DEBUG_OBJECT (dbin, "About to expose dpad %s as %s",
+        GST_OBJECT_NAME (dpad), padname);
+    gst_object_set_name (GST_OBJECT (dpad), padname);
+    g_free (padname);
+
+    /* 2. activate and add */
+    if (!dpad->exposed
+        && !gst_element_add_pad (GST_ELEMENT (dbin), GST_PAD_CAST (dpad))) {
+      /* not really fatal, we can try to add the other pads */
+      g_warning ("error adding pad to decodebin");
+      continue;
+    }
+    dpad->exposed = TRUE;
+
+    /* 3. emit signal */
+    GST_INFO_OBJECT (dpad, "added new decoded pad");
+  }
+
+  /* 4. Signal no-more-pads. This allows the application to hook stuff to the
+   * exposed pads */
+  GST_LOG_OBJECT (dbin, "signalling no-more-pads");
+  gst_element_no_more_pads (GST_ELEMENT (dbin));
+
+  /* 5. Send a custom element message with the stream topology */
+  if (dbin->post_stream_topology)
+    gst_decode_bin_post_topology_message (dbin);
+
+  /* 6. Unblock internal pads. The application should have connected stuff now
+   * so that streaming can continue. */
+  for (tmp = endpads; tmp; tmp = tmp->next) {
+    GstDecodePad *dpad = (GstDecodePad *) tmp->data;
+
+    GST_DEBUG_OBJECT (dpad, "unblocking");
+    gst_decode_pad_unblock (dpad);
+    GST_DEBUG_OBJECT (dpad, "unblocked");
+    gst_object_unref (dpad);
+  }
+  g_list_free (endpads);
+
+  do_async_done (dbin);
+  GST_DEBUG_OBJECT (dbin, "Exposed everything");
+  return TRUE;
+}
+
+/* gst_decode_chain_expose:
+ *
+ * Check if the chain can be exposed and add all endpads
+ * to the endpads list.
+ *
+ * Also update the active group's multiqueue to the
+ * runtime limits.
+ *
+ * Not MT-safe, call with decodebin expose lock! *
+ */
+static gboolean
+gst_decode_chain_expose (GstDecodeChain * chain, GList ** endpads,
+    gboolean * missing_plugin)
+{
+  GstDecodeGroup *group;
+  GList *l;
+  GstDecodeBin *dbin;
+
+  if (chain->deadend) {
+    if (chain->endcaps)
+      *missing_plugin = TRUE;
+    return TRUE;
+  }
+
+  if (chain->endpad) {
+    if (!chain->endpad->blocked && !chain->endpad->exposed)
+      return FALSE;
+    *endpads = g_list_prepend (*endpads, gst_object_ref (chain->endpad));
+    return TRUE;
+  }
+
+  group = chain->active_group;
+  if (!group)
+    return FALSE;
+  if (!group->no_more_pads && !group->overrun)
+    return FALSE;
+
+  dbin = group->dbin;
+
+  /* configure queues for playback */
+  decodebin_set_queue_size (dbin, group->multiqueue, FALSE);
+
+  /* we can now disconnect any overrun signal, which is used to expose the
+   * group. */
+  if (group->overrunsig) {
+    GST_LOG_OBJECT (dbin, "Disconnecting overrun");
+    g_signal_handler_disconnect (group->multiqueue, group->overrunsig);
+    group->overrunsig = 0;
+  }
+
+  for (l = group->children; l; l = l->next) {
+    GstDecodeChain *childchain = l->data;
+
+    if (!gst_decode_chain_expose (childchain, endpads, missing_plugin))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/*************************
+ * GstDecodePad functions
+ *************************/
+
+static void
+gst_decode_pad_class_init (GstDecodePadClass * klass)
+{
+}
+
+static void
+gst_decode_pad_init (GstDecodePad * pad)
+{
+  pad->chain = NULL;
+  pad->blocked = FALSE;
+  pad->exposed = FALSE;
+  pad->drained = FALSE;
+  gst_object_ref_sink (pad);
+}
+
+static GstProbeReturn
+source_pad_blocked_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstDecodePad *dpad = user_data;
+  GstDecodeChain *chain;
+  GstDecodeBin *dbin;
+
+  chain = dpad->chain;
+  dbin = chain->dbin;
+
+  GST_LOG_OBJECT (dpad, "blocked: dpad->chain:%p", chain);
+
+  dpad->blocked = TRUE;
+
+  EXPOSE_LOCK (dbin);
+  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+    if (!gst_decode_bin_expose (dbin))
+      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  }
+  EXPOSE_UNLOCK (dbin);
+
+  return GST_PROBE_OK;
+}
+
+static GstProbeReturn
+source_pad_event_probe (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstEvent *event = type_data;
+  GstDecodePad *dpad = user_data;
+  gboolean res = TRUE;
+
+  GST_LOG_OBJECT (pad, "%s dpad:%p", GST_EVENT_TYPE_NAME (event), dpad);
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+    GST_DEBUG_OBJECT (pad, "we received EOS");
+
+    /* Check if all pads are drained.
+     * * If there is no next group, we will let the EOS go through.
+     * * If there is a next group but the current group isn't completely
+     *   drained, we will drop the EOS event.
+     * * If there is a next group to expose and this was the last non-drained
+     *   pad for that group, we will remove the ghostpad of the current group
+     *   first, which unlinks the peer and so drops the EOS. */
+    res = gst_decode_pad_handle_eos (dpad);
+  }
+  if (res)
+    return GST_PROBE_OK;
+  else
+    return GST_PROBE_DROP;
+}
+
+static void
+gst_decode_pad_set_blocked (GstDecodePad * dpad, gboolean blocked)
+{
+  GstDecodeBin *dbin = dpad->dbin;
+  GstPad *opad;
+
+  DYN_LOCK (dbin);
+
+  GST_DEBUG_OBJECT (dpad, "blocking pad: %d", blocked);
+
+  opad = gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (dpad));
+  if (!opad)
+    goto out;
+
+  /* do not block if shutting down.
+   * we do not consider/expect it blocked further below, but use other trick */
+  if (!blocked || !dbin->shutdown) {
+    if (blocked) {
+      if (dpad->block_id == 0)
+        dpad->block_id = gst_pad_add_probe (opad, GST_PROBE_TYPE_BLOCK,
+            source_pad_blocked_cb, gst_object_ref (dpad),
+            (GDestroyNotify) gst_object_unref);
+    } else {
+      if (dpad->block_id != 0) {
+        gst_pad_remove_probe (opad, dpad->block_id);
+        dpad->block_id = 0;
+      }
+      dpad->blocked = FALSE;
+    }
+  }
+
+  if (blocked) {
+    if (dbin->shutdown) {
+      /* deactivate to force flushing state to prevent NOT_LINKED errors */
+      gst_pad_set_active (GST_PAD_CAST (dpad), FALSE);
+      /* note that deactivating the target pad would have no effect here,
+       * since elements are typically connected first (and pads exposed),
+       * and only then brought to PAUSED state (so pads activated) */
+    } else {
+      gst_object_ref (dpad);
+      dbin->blocked_pads = g_list_prepend (dbin->blocked_pads, dpad);
+    }
+  } else {
+    GList *l;
+
+    if ((l = g_list_find (dbin->blocked_pads, dpad))) {
+      gst_object_unref (dpad);
+      dbin->blocked_pads = g_list_delete_link (dbin->blocked_pads, l);
+    }
+  }
+  gst_object_unref (opad);
+out:
+  DYN_UNLOCK (dbin);
+}
+
+static void
+gst_decode_pad_add_drained_check (GstDecodePad * dpad)
+{
+  gst_pad_add_probe (GST_PAD_CAST (dpad), GST_PROBE_TYPE_EVENT,
+      source_pad_event_probe, dpad, NULL);
+}
+
+static void
+gst_decode_pad_activate (GstDecodePad * dpad, GstDecodeChain * chain)
+{
+  g_return_if_fail (chain != NULL);
+
+  dpad->chain = chain;
+  gst_pad_set_active (GST_PAD_CAST (dpad), TRUE);
+  gst_decode_pad_set_blocked (dpad, TRUE);
+  gst_decode_pad_add_drained_check (dpad);
+}
+
+static void
+gst_decode_pad_unblock (GstDecodePad * dpad)
+{
+  gst_decode_pad_set_blocked (dpad, FALSE);
+}
+
+/*gst_decode_pad_new:
+ *
+ * Creates a new GstDecodePad for the given pad.
+ */
+static GstDecodePad *
+gst_decode_pad_new (GstDecodeBin * dbin, GstPad * pad, GstDecodeChain * chain)
+{
+  GstDecodePad *dpad;
+  GstPadTemplate *pad_tmpl;
+
+  GST_DEBUG_OBJECT (dbin, "making new decodepad");
+  pad_tmpl = gst_static_pad_template_get (&decoder_bin_src_template);
+  dpad =
+      g_object_new (GST_TYPE_DECODE_PAD, "direction", GST_PAD_DIRECTION (pad),
+      "template", pad_tmpl, NULL);
+  gst_ghost_pad_construct (GST_GHOST_PAD_CAST (dpad));
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), pad);
+  dpad->chain = chain;
+  dpad->dbin = dbin;
+  gst_object_unref (pad_tmpl);
+
+  return dpad;
+}
+
+static void
+gst_pending_pad_free (GstPendingPad * ppad)
+{
+  g_assert (ppad);
+  g_assert (ppad->pad);
+
+  if (ppad->event_probe_id != 0)
+    gst_pad_remove_probe (ppad->pad, ppad->event_probe_id);
+  gst_object_unref (ppad->pad);
+  g_slice_free (GstPendingPad, ppad);
+}
+
+/*****
+ * Element add/remove
+ *****/
+
+static void
+do_async_start (GstDecodeBin * dbin)
+{
+  GstMessage *message;
+
+  dbin->async_pending = TRUE;
+
+  message = gst_message_new_async_start (GST_OBJECT_CAST (dbin));
+  parent_class->handle_message (GST_BIN_CAST (dbin), message);
+}
+
+static void
+do_async_done (GstDecodeBin * dbin)
+{
+  GstMessage *message;
+
+  if (dbin->async_pending) {
+    message = gst_message_new_async_done (GST_OBJECT_CAST (dbin), FALSE);
+    parent_class->handle_message (GST_BIN_CAST (dbin), message);
+
+    dbin->async_pending = FALSE;
+  }
+}
+
+/*****
+ * convenience functions
+ *****/
+
+/* find_sink_pad
+ *
+ * Returns the first sink pad of the given element, or NULL if it doesn't have
+ * any.
+ */
+
+static GstPad *
+find_sink_pad (GstElement * element)
+{
+  GstIterator *it;
+  GstPad *pad = NULL;
+  GValue item = { 0, };
+
+  it = gst_element_iterate_sink_pads (element);
+
+  if ((gst_iterator_next (it, &item)) == GST_ITERATOR_OK)
+    pad = g_value_dup_object (&item);
+  g_value_unset (&item);
+  gst_iterator_free (it);
+
+  return pad;
+}
+
+/* call with dyn_lock held */
+static void
+unblock_pads (GstDecodeBin * dbin)
+{
+  GList *tmp;
+
+  GST_LOG_OBJECT (dbin, "unblocking pads");
+
+  for (tmp = dbin->blocked_pads; tmp; tmp = tmp->next) {
+    GstDecodePad *dpad = (GstDecodePad *) tmp->data;
+    GstPad *opad;
+
+    opad = gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (dpad));
+    if (!opad)
+      continue;
+
+    GST_DEBUG_OBJECT (dpad, "unblocking");
+    if (dpad->block_id != 0) {
+      gst_pad_remove_probe (opad, dpad->block_id);
+      dpad->block_id = 0;
+    }
+    dpad->blocked = FALSE;
+    /* make flushing, prevent NOT_LINKED */
+    GST_PAD_SET_FLUSHING (GST_PAD_CAST (dpad));
+    gst_object_unref (dpad);
+    gst_object_unref (opad);
+    GST_DEBUG_OBJECT (dpad, "unblocked");
+  }
+
+  /* clear, no more blocked pads */
+  g_list_free (dbin->blocked_pads);
+  dbin->blocked_pads = NULL;
+}
+
+static GstStateChangeReturn
+gst_decode_bin_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstDecodeBin *dbin = GST_DECODE_BIN (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (dbin->typefind == NULL)
+        goto missing_typefind;
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      /* Make sure we've cleared all existing chains */
+      if (dbin->decode_chain) {
+        gst_decode_chain_free (dbin->decode_chain);
+        dbin->decode_chain = NULL;
+      }
+      DYN_LOCK (dbin);
+      GST_LOG_OBJECT (dbin, "clearing shutdown flag");
+      dbin->shutdown = FALSE;
+      DYN_UNLOCK (dbin);
+      dbin->have_type = FALSE;
+      ret = GST_STATE_CHANGE_ASYNC;
+      do_async_start (dbin);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      DYN_LOCK (dbin);
+      GST_LOG_OBJECT (dbin, "setting shutdown flag");
+      dbin->shutdown = TRUE;
+      unblock_pads (dbin);
+      DYN_UNLOCK (dbin);
+    default:
+      break;
+  }
+
+  {
+    GstStateChangeReturn bret;
+
+    bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+    if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE))
+      goto activate_failed;
+    else if (G_UNLIKELY (bret == GST_STATE_CHANGE_NO_PREROLL)) {
+      do_async_done (dbin);
+      ret = bret;
+    }
+  }
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      do_async_done (dbin);
+      if (dbin->decode_chain) {
+        gst_decode_chain_free (dbin->decode_chain);
+        dbin->decode_chain = NULL;
+      }
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+    default:
+      break;
+  }
+
+  return ret;
+
+/* ERRORS */
+missing_typefind:
+  {
+    gst_element_post_message (element,
+        gst_missing_element_message_new (element, "typefind"));
+    GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL), ("no typefind!"));
+    return GST_STATE_CHANGE_FAILURE;
+  }
+activate_failed:
+  {
+    GST_DEBUG_OBJECT (element,
+        "element failed to change states -- activation problem?");
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
+
+gboolean
+gst_decode_bin_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_decode_bin_debug, "decodebin", 0, "decoder bin");
+
+  /* Register some quarks here for the stream topology message */
+  topology_structure_name = g_quark_from_static_string ("stream-topology");
+  topology_caps = g_quark_from_static_string ("caps");
+  topology_next = g_quark_from_static_string ("next");
+  topology_pad = g_quark_from_static_string ("pad");
+
+  return gst_element_register (plugin, "decodebin", GST_RANK_NONE,
+      GST_TYPE_DECODE_BIN);
+}
diff --git a/gst/playback/gstplay-enum.c b/gst/playback/gstplay-enum.c
new file mode 100644
index 0000000..e337fdf
--- /dev/null
+++ b/gst/playback/gstplay-enum.c
@@ -0,0 +1,81 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstplay-enum.h"
+
+#define C_ENUM(v) ((gint) v)
+#define C_FLAGS(v) ((guint) v)
+
+GType
+gst_autoplug_select_result_get_type (void)
+{
+  static const GEnumValue values[] = {
+    {C_ENUM (GST_AUTOPLUG_SELECT_TRY), "GST_AUTOPLUG_SELECT_TRY", "try"},
+    {C_ENUM (GST_AUTOPLUG_SELECT_EXPOSE), "GST_AUTOPLUG_SELECT_EXPOSE",
+        "expose"},
+    {C_ENUM (GST_AUTOPLUG_SELECT_SKIP), "GST_AUTOPLUG_SELECT_SKIP", "skip"},
+    {0, NULL, NULL}
+  };
+  static volatile GType id = 0;
+
+  if (g_once_init_enter ((gsize *) & id)) {
+    GType _id;
+
+    _id = g_enum_register_static ("GstAutoplugSelectResult", values);
+
+    g_once_init_leave ((gsize *) & id, _id);
+  }
+
+  return id;
+}
+
+GType
+gst_play_flags_get_type (void)
+{
+  static const GFlagsValue values[] = {
+    {C_FLAGS (GST_PLAY_FLAG_VIDEO), "Render the video stream", "video"},
+    {C_FLAGS (GST_PLAY_FLAG_AUDIO), "Render the audio stream", "audio"},
+    {C_FLAGS (GST_PLAY_FLAG_TEXT), "Render subtitles", "text"},
+    {C_FLAGS (GST_PLAY_FLAG_VIS),
+        "Render visualisation when no video is present", "vis"},
+    {C_FLAGS (GST_PLAY_FLAG_SOFT_VOLUME), "Use software volume", "soft-volume"},
+    {C_FLAGS (GST_PLAY_FLAG_NATIVE_AUDIO), "Only use native audio formats",
+        "native-audio"},
+    {C_FLAGS (GST_PLAY_FLAG_NATIVE_VIDEO), "Only use native video formats",
+        "native-video"},
+    {C_FLAGS (GST_PLAY_FLAG_DOWNLOAD), "Attempt progressive download buffering",
+        "download"},
+    {C_FLAGS (GST_PLAY_FLAG_BUFFERING), "Buffer demuxed/parsed data",
+        "buffering"},
+    {C_FLAGS (GST_PLAY_FLAG_DEINTERLACE), "Deinterlace video if necessary",
+        "deinterlace"},
+    {0, NULL, NULL}
+  };
+  static volatile GType id = 0;
+
+  if (g_once_init_enter ((gsize *) & id)) {
+    GType _id;
+
+    _id = g_flags_register_static ("GstPlayFlags", values);
+
+    g_once_init_leave ((gsize *) & id, _id);
+  }
+
+  return id;
+}
diff --git a/gst/playback/gstplay-enum.h b/gst/playback/gstplay-enum.h
new file mode 100644
index 0000000..b0709ab
--- /dev/null
+++ b/gst/playback/gstplay-enum.h
@@ -0,0 +1,80 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PLAY_ENUM_H__
+#define __GST_PLAY_ENUM_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstAutoplugSelectResult:
+ * @GST_AUTOPLUG_SELECT_TRY: try to autoplug the current factory
+ * @GST_AUTOPLUG_SELECT_EXPOSE: expose the pad as a raw stream
+ * @GST_AUTOPLUG_SELECT_SKIP: skip the current factory
+ *
+ * return values for the autoplug-select signal.
+ */
+typedef enum {
+  GST_AUTOPLUG_SELECT_TRY,
+  GST_AUTOPLUG_SELECT_EXPOSE,
+  GST_AUTOPLUG_SELECT_SKIP
+} GstAutoplugSelectResult;
+
+#define GST_TYPE_AUTOPLUG_SELECT_RESULT (gst_autoplug_select_result_get_type())
+GType gst_autoplug_select_result_get_type (void);
+
+/**
+ * GstPlayFlags:
+ * @GST_PLAY_FLAG_VIDEO: Enable rendering of the video stream
+ * @GST_PLAY_FLAG_AUDIO: Enable rendering of the audio stream
+ * @GST_PLAY_FLAG_TEXT: Enable rendering of subtitles
+ * @GST_PLAY_FLAG_VIS: Enable rendering of visualisations when there is
+ *       no video stream.
+ * @GST_PLAY_FLAG_SOFT_VOLUME: Use software volume
+ * @GST_PLAY_FLAG_NATIVE_AUDIO: only allow native audio formats, this omits
+ *   configuration of audioconvert and audioresample.
+ * @GST_PLAY_FLAG_NATIVE_VIDEO: only allow native video formats, this omits
+ *   configuration of videoconvert and videoscale.
+ * @GST_PLAY_FLAG_DOWNLOAD: enable progressice download buffering for selected
+ *   formats.
+ * @GST_PLAY_FLAG_BUFFERING: enable buffering of the demuxed or parsed data.
+ *
+ * Extra flags to configure the behaviour of the sinks.
+ */
+typedef enum {
+  GST_PLAY_FLAG_VIDEO         = (1 << 0),
+  GST_PLAY_FLAG_AUDIO         = (1 << 1),
+  GST_PLAY_FLAG_TEXT          = (1 << 2),
+  GST_PLAY_FLAG_VIS           = (1 << 3),
+  GST_PLAY_FLAG_SOFT_VOLUME   = (1 << 4),
+  GST_PLAY_FLAG_NATIVE_AUDIO  = (1 << 5),
+  GST_PLAY_FLAG_NATIVE_VIDEO  = (1 << 6),
+  GST_PLAY_FLAG_DOWNLOAD      = (1 << 7),
+  GST_PLAY_FLAG_BUFFERING     = (1 << 8),
+  GST_PLAY_FLAG_DEINTERLACE   = (1 << 9)
+} GstPlayFlags;
+
+#define GST_TYPE_PLAY_FLAGS (gst_play_flags_get_type())
+GType gst_play_flags_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_PLAY_ENUM_H__ */
diff --git a/gst/playback/gstplay-marshal.list b/gst/playback/gstplay-marshal.list
new file mode 100644
index 0000000..ace5d91
--- /dev/null
+++ b/gst/playback/gstplay-marshal.list
@@ -0,0 +1,9 @@
+BOOLEAN:OBJECT,BOXED
+BOOLEAN:OBJECT,OBJECT,OBJECT
+BOXED:OBJECT,BOXED
+ENUM:OBJECT,OBJECT,BOXED
+ENUM:OBJECT,BOXED,OBJECT
+BOXED:OBJECT,BOXED,BOXED
+BOXED:INT
+OBJECT:BOXED
+OBJECT:INT
diff --git a/gst/playback/gstplayback.c b/gst/playback/gstplayback.c
new file mode 100644
index 0000000..75eddd7
--- /dev/null
+++ b/gst/playback/gstplayback.c
@@ -0,0 +1,67 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/pbutils/pbutils.h>
+
+#include "gstplayback.h"
+#include "gstplaysink.h"
+#include "gststreamselector.h"
+#include "gstsubtitleoverlay.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean res;
+
+  gst_pb_utils_init ();
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_STREAM_SELECTOR);
+
+  res = gst_play_bin2_plugin_init (plugin);
+  res &= gst_play_sink_plugin_init (plugin);
+  res &= gst_subtitle_overlay_plugin_init (plugin);
+
+  res &= gst_decode_bin_plugin_init (plugin);
+  res &= gst_uri_decode_bin_plugin_init (plugin);
+
+  return res;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "playback",
+    "various playback elements", plugin_init, VERSION, GST_LICENSE,
+    GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/playback/gstplayback.h b/gst/playback/gstplayback.h
new file mode 100644
index 0000000..910b1a3
--- /dev/null
+++ b/gst/playback/gstplayback.h
@@ -0,0 +1,33 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PLAY_BACK_H__
+#define __GST_PLAY_BACK_H__
+
+
+#include <gst/gst.h>
+
+gboolean gst_decode_bin_plugin_init (GstPlugin * plugin);
+gboolean gst_uri_decode_bin_plugin_init (GstPlugin * plugin);
+
+gboolean gst_play_bin_plugin_init (GstPlugin * plugin);
+gboolean gst_play_bin2_plugin_init (GstPlugin * plugin);
+
+
+#endif /* __GST_PLAY_BACK_H__ */
diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
new file mode 100644
index 0000000..8498a3e
--- /dev/null
+++ b/gst/playback/gstplaybin2.c
@@ -0,0 +1,3921 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-playbin
+ *
+ * Playbin provides a stand-alone everything-in-one abstraction for an
+ * audio and/or video player.
+ *
+ * Playbin can handle both audio and video files and features
+ * <itemizedlist>
+ * <listitem>
+ * automatic file type recognition and based on that automatic
+ * selection and usage of the right audio/video/subtitle demuxers/decoders
+ * </listitem>
+ * <listitem>
+ * visualisations for audio files
+ * </listitem>
+ * <listitem>
+ * subtitle support for video files. Subtitles can be store in external
+ * files.
+ * </listitem>
+ * <listitem>
+ * stream selection between different video/audio/subtitles streams
+ * </listitem>
+ * <listitem>
+ * meta info (tag) extraction
+ * </listitem>
+ * <listitem>
+ * easy access to the last video frame
+ * </listitem>
+ * <listitem>
+ * buffering when playing streams over a network
+ * </listitem>
+ * <listitem>
+ * volume control with mute option
+ * </listitem>
+ * </itemizedlist>
+ *
+ * <refsect2>
+ * <title>Usage</title>
+ * <para>
+ * A playbin element can be created just like any other element using
+ * gst_element_factory_make(). The file/URI to play should be set via the #GstPlayBin:uri
+ * property. This must be an absolute URI, relative file paths are not allowed.
+ * Example URIs are file:///home/joe/movie.avi or http://www.joedoe.com/foo.ogg
+ *
+ * Playbin is a #GstPipeline. It will notify the application of everything
+ * that's happening (errors, end of stream, tags found, state changes, etc.)
+ * by posting messages on its #GstBus. The application needs to watch the
+ * bus.
+ *
+ * Playback can be initiated by setting the element to PLAYING state using
+ * gst_element_set_state(). Note that the state change will take place in
+ * the background in a separate thread, when the function returns playback
+ * is probably not happening yet and any errors might not have occured yet.
+ * Applications using playbin should ideally be written to deal with things
+ * completely asynchroneous.
+ *
+ * When playback has finished (an EOS message has been received on the bus)
+ * or an error has occured (an ERROR message has been received on the bus) or
+ * the user wants to play a different track, playbin should be set back to
+ * READY or NULL state, then the #GstPlayBin:uri property should be set to the
+ * new location and then playbin be set to PLAYING state again.
+ *
+ * Seeking can be done using gst_element_seek_simple() or gst_element_seek()
+ * on the playbin element. Again, the seek will not be executed
+ * instantaneously, but will be done in a background thread. When the seek
+ * call returns the seek will most likely still be in process. An application
+ * may wait for the seek to finish (or fail) using gst_element_get_state() with
+ * -1 as the timeout, but this will block the user interface and is not
+ * recommended at all.
+ *
+ * Applications may query the current position and duration of the stream
+ * via gst_element_query_position() and gst_element_query_duration() and
+ * setting the format passed to GST_FORMAT_TIME. If the query was successful,
+ * the duration or position will have been returned in units of nanoseconds.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Advanced Usage: specifying the audio and video sink</title>
+ * <para>
+ * By default, if no audio sink or video sink has been specified via the
+ * #GstPlayBin:audio-sink or #GstPlayBin:video-sink property, playbin will use the autoaudiosink
+ * and autovideosink elements to find the first-best available output method.
+ * This should work in most cases, but is not always desirable. Often either
+ * the user or application might want to specify more explicitly what to use
+ * for audio and video output.
+ *
+ * If the application wants more control over how audio or video should be
+ * output, it may create the audio/video sink elements itself (for example
+ * using gst_element_factory_make()) and provide them to playbin using the
+ * #GstPlayBin:audio-sink or #GstPlayBin:video-sink property.
+ *
+ * GNOME-based applications, for example, will usually want to create
+ * gconfaudiosink and gconfvideosink elements and make playbin use those,
+ * so that output happens to whatever the user has configured in the GNOME
+ * Multimedia System Selector configuration dialog.
+ *
+ * The sink elements do not necessarily need to be ready-made sinks. It is
+ * possible to create container elements that look like a sink to playbin,
+ * but in reality contain a number of custom elements linked together. This
+ * can be achieved by creating a #GstBin and putting elements in there and
+ * linking them, and then creating a sink #GstGhostPad for the bin and pointing
+ * it to the sink pad of the first element within the bin. This can be used
+ * for a number of purposes, for example to force output to a particular
+ * format or to modify or observe the data before it is output.
+ *
+ * It is also possible to 'suppress' audio and/or video output by using
+ * 'fakesink' elements (or capture it from there using the fakesink element's
+ * "handoff" signal, which, nota bene, is fired from the streaming thread!).
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Retrieving Tags and Other Meta Data</title>
+ * <para>
+ * Most of the common meta data (artist, title, etc.) can be retrieved by
+ * watching for TAG messages on the pipeline's bus (see above).
+ *
+ * Other more specific meta information like width/height/framerate of video
+ * streams or samplerate/number of channels of audio streams can be obtained
+ * from the negotiated caps on the sink pads of the sinks.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Buffering</title>
+ * Playbin handles buffering automatically for the most part, but applications
+ * need to handle parts of the buffering process as well. Whenever playbin is
+ * buffering, it will post BUFFERING messages on the bus with a percentage
+ * value that shows the progress of the buffering process. Applications need
+ * to set playbin to PLAYING or PAUSED state in response to these messages.
+ * They may also want to convey the buffering progress to the user in some
+ * way. Here is how to extract the percentage information from the message
+ * (requires GStreamer >= 0.10.11):
+ * |[
+ * switch (GST_MESSAGE_TYPE (msg)) {
+ *   case GST_MESSAGE_BUFFERING: {
+ *     gint percent = 0;
+ *     gst_message_parse_buffering (msg, &amp;percent);
+ *     g_print ("Buffering (%%u percent done)", percent);
+ *     break;
+ *   }
+ *   ...
+ * }
+ * ]|
+ * Note that applications should keep/set the pipeline in the PAUSED state when
+ * a BUFFERING message is received with a buffer percent value < 100 and set
+ * the pipeline back to PLAYING state when a BUFFERING message with a value
+ * of 100 percent is received (if PLAYING is the desired state, that is).
+ * </refsect2>
+ * <refsect2>
+ * <title>Embedding the video window in your application</title>
+ * By default, playbin (or rather the video sinks used) will create their own
+ * window. Applications will usually want to force output to a window of their
+ * own, however. This can be done using the #GstXOverlay interface, which most
+ * video sinks implement. See the documentation there for more details.
+ * </refsect2>
+ * <refsect2>
+ * <title>Specifying which CD/DVD device to use</title>
+ * The device to use for CDs/DVDs needs to be set on the source element
+ * playbin creates before it is opened. The only way to do this at the moment
+ * is to connect to playbin's "notify::source" signal, which will be emitted
+ * by playbin when it has created the source element for a particular URI.
+ * In the signal callback you can check if the source element has a "device"
+ * property and set it appropriately. In future ways might be added to specify
+ * the device as part of the URI, but at the time of writing this is not
+ * possible yet.
+ * </refsect2>
+ * <refsect2>
+ * <title>Handling redirects</title>
+ * <para>
+ * Some elements may post 'redirect' messages on the bus to tell the
+ * application to open another location. These are element messages containing
+ * a structure named 'redirect' along with a 'new-location' field of string
+ * type. The new location may be a relative or an absolute URI. Examples
+ * for such redirects can be found in many quicktime movie trailers.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch -v playbin uri=file:///path/to/somefile.avi
+ * ]| This will play back the given AVI video file, given that the video and
+ * audio decoders required to decode the content are installed. Since no
+ * special audio sink or video sink is supplied (not possible via gst-launch),
+ * playbin will try to find a suitable audio and video sink automatically
+ * using the autoaudiosink and autovideosink elements.
+ * |[
+ * gst-launch -v playbin uri=cdda://4
+ * ]| This will play back track 4 on an audio CD in your disc drive (assuming
+ * the drive is detected automatically by the plugin).
+ * |[
+ * gst-launch -v playbin uri=dvd://1
+ * ]| This will play back title 1 of a DVD in your disc drive (assuming
+ * the drive is detected automatically by the plugin).
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/interfaces/streamvolume.h>
+
+#include "gstplay-enum.h"
+#include "gstplay-marshal.h"
+#include "gstplayback.h"
+#include "gstplaysink.h"
+#include "gstsubtitleoverlay.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_play_bin_debug);
+#define GST_CAT_DEFAULT gst_play_bin_debug
+
+#define GST_TYPE_PLAY_BIN               (gst_play_bin_get_type())
+#define GST_PLAY_BIN(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PLAY_BIN,GstPlayBin))
+#define GST_PLAY_BIN_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PLAY_BIN,GstPlayBinClass))
+#define GST_IS_PLAY_BIN(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAY_BIN))
+#define GST_IS_PLAY_BIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAY_BIN))
+
+#define VOLUME_MAX_DOUBLE 10.0
+
+typedef struct _GstPlayBin GstPlayBin;
+typedef struct _GstPlayBinClass GstPlayBinClass;
+typedef struct _GstSourceGroup GstSourceGroup;
+typedef struct _GstSourceSelect GstSourceSelect;
+
+typedef GstCaps *(*SourceSelectGetMediaCapsFunc) (void);
+
+/* has the info for a selector and provides the link to the sink */
+struct _GstSourceSelect
+{
+  const gchar *media_list[8];   /* the media types for the selector */
+  SourceSelectGetMediaCapsFunc get_media_caps;  /* more complex caps for the selector */
+  GstPlaySinkType type;         /* the sink pad type of the selector */
+
+  GstElement *selector;         /* the selector */
+  GPtrArray *channels;
+  GstPad *srcpad;               /* the source pad of the selector */
+  GstPad *sinkpad;              /* the sinkpad of the sink when the selector
+                                 * is linked
+                                 */
+  GstEvent *sinkpad_delayed_event;
+  gulong sinkpad_data_probe;
+  gulong block_id;
+};
+
+#define GST_SOURCE_GROUP_GET_LOCK(group) (((GstSourceGroup*)(group))->lock)
+#define GST_SOURCE_GROUP_LOCK(group) (g_mutex_lock (GST_SOURCE_GROUP_GET_LOCK(group)))
+#define GST_SOURCE_GROUP_UNLOCK(group) (g_mutex_unlock (GST_SOURCE_GROUP_GET_LOCK(group)))
+
+enum
+{
+  PLAYBIN_STREAM_AUDIO = 0,
+  PLAYBIN_STREAM_VIDEO,
+  PLAYBIN_STREAM_TEXT,
+  PLAYBIN_STREAM_LAST
+};
+
+/* a structure to hold the objects for decoding a uri and the subtitle uri
+ */
+struct _GstSourceGroup
+{
+  GstPlayBin *playbin;
+
+  GMutex *lock;
+
+  gboolean valid;               /* the group has valid info to start playback */
+  gboolean active;              /* the group is active */
+
+  /* properties */
+  gchar *uri;
+  gchar *suburi;
+  GValueArray *streaminfo;
+  GstElement *source;
+
+  GPtrArray *video_channels;    /* links to selector pads */
+  GPtrArray *audio_channels;    /* links to selector pads */
+  GPtrArray *text_channels;     /* links to selector pads */
+
+  GstElement *audio_sink;       /* autoplugged audio and video sinks */
+  GstElement *video_sink;
+
+  /* uridecodebins for uri and subtitle uri */
+  GstElement *uridecodebin;
+  GstElement *suburidecodebin;
+  gint pending;
+  gboolean sub_pending;
+
+  gulong pad_added_id;
+  gulong pad_removed_id;
+  gulong no_more_pads_id;
+  gulong notify_source_id;
+  gulong drained_id;
+  gulong autoplug_factories_id;
+  gulong autoplug_select_id;
+  gulong autoplug_continue_id;
+
+  gulong sub_pad_added_id;
+  gulong sub_pad_removed_id;
+  gulong sub_no_more_pads_id;
+  gulong sub_autoplug_continue_id;
+
+  gulong block_id;
+
+  GMutex *stream_changed_pending_lock;
+  GList *stream_changed_pending;
+
+  /* selectors for different streams */
+  GstSourceSelect selector[PLAYBIN_STREAM_LAST];
+};
+
+#define GST_PLAY_BIN_GET_LOCK(bin) (&((GstPlayBin*)(bin))->lock)
+#define GST_PLAY_BIN_LOCK(bin) (g_static_rec_mutex_lock (GST_PLAY_BIN_GET_LOCK(bin)))
+#define GST_PLAY_BIN_UNLOCK(bin) (g_static_rec_mutex_unlock (GST_PLAY_BIN_GET_LOCK(bin)))
+
+/* lock to protect dynamic callbacks, like no-more-pads */
+#define GST_PLAY_BIN_DYN_LOCK(bin)    g_mutex_lock ((bin)->dyn_lock)
+#define GST_PLAY_BIN_DYN_UNLOCK(bin)  g_mutex_unlock ((bin)->dyn_lock)
+
+/* lock for shutdown */
+#define GST_PLAY_BIN_SHUTDOWN_LOCK(bin,label)           \
+G_STMT_START {                                          \
+  if (G_UNLIKELY (g_atomic_int_get (&bin->shutdown)))   \
+    goto label;                                         \
+  GST_PLAY_BIN_DYN_LOCK (bin);                          \
+  if (G_UNLIKELY (g_atomic_int_get (&bin->shutdown))) { \
+    GST_PLAY_BIN_DYN_UNLOCK (bin);                      \
+    goto label;                                         \
+  }                                                     \
+} G_STMT_END
+
+/* unlock for shutdown */
+#define GST_PLAY_BIN_SHUTDOWN_UNLOCK(bin)         \
+  GST_PLAY_BIN_DYN_UNLOCK (bin);                  \
+
+/**
+ * GstPlayBin:
+ *
+ * playbin element structure
+ */
+struct _GstPlayBin
+{
+  GstPipeline parent;
+
+  GStaticRecMutex lock;         /* to protect group switching */
+
+  /* the groups, we use a double buffer to switch between current and next */
+  GstSourceGroup groups[2];     /* array with group info */
+  GstSourceGroup *curr_group;   /* pointer to the currently playing group */
+  GstSourceGroup *next_group;   /* pointer to the next group */
+
+  /* properties */
+  guint connection_speed;       /* connection speed in bits/sec (0 = unknown) */
+  gint current_video;           /* the currently selected stream */
+  gint current_audio;           /* the currently selected stream */
+  gint current_text;            /* the currently selected stream */
+
+  guint64 buffer_duration;      /* When buffering, the max buffer duration (ns) */
+  guint buffer_size;            /* When buffering, the max buffer size (bytes) */
+
+  /* our play sink */
+  GstPlaySink *playsink;
+
+  /* the last activated source */
+  GstElement *source;
+
+  /* lock protecting dynamic adding/removing */
+  GMutex *dyn_lock;
+  /* if we are shutting down or not */
+  gint shutdown;
+
+  GMutex *elements_lock;
+  guint32 elements_cookie;
+  GList *elements;              /* factories we can use for selecting elements */
+
+  gboolean have_selector;       /* set to FALSE when we fail to create an
+                                 * input-selector, so that we only post a
+                                 * warning once */
+
+  GstElement *audio_sink;       /* configured audio sink, or NULL      */
+  GstElement *video_sink;       /* configured video sink, or NULL      */
+  GstElement *text_sink;        /* configured text sink, or NULL       */
+
+  struct
+  {
+    gboolean valid;
+    GstFormat format;
+    gint64 duration;
+  } duration[5];                /* cached durations */
+
+  guint64 ring_buffer_max_size; /* 0 means disabled */
+};
+
+struct _GstPlayBinClass
+{
+  GstPipelineClass parent_class;
+
+  /* notify app that the current uri finished decoding and it is possible to
+   * queue a new one for gapless playback */
+  void (*about_to_finish) (GstPlayBin * playbin);
+
+  /* notify app that number of audio/video/text streams changed */
+  void (*video_changed) (GstPlayBin * playbin);
+  void (*audio_changed) (GstPlayBin * playbin);
+  void (*text_changed) (GstPlayBin * playbin);
+
+  /* notify app that the tags of audio/video/text streams changed */
+  void (*video_tags_changed) (GstPlayBin * playbin, gint stream);
+  void (*audio_tags_changed) (GstPlayBin * playbin, gint stream);
+  void (*text_tags_changed) (GstPlayBin * playbin, gint stream);
+
+  /* get audio/video/text tags for a stream */
+  GstTagList *(*get_video_tags) (GstPlayBin * playbin, gint stream);
+  GstTagList *(*get_audio_tags) (GstPlayBin * playbin, gint stream);
+  GstTagList *(*get_text_tags) (GstPlayBin * playbin, gint stream);
+
+  /* get the last video frame and convert it to the given caps */
+  GstBuffer *(*convert_frame) (GstPlayBin * playbin, GstCaps * caps);
+
+  /* get audio/video/text pad for a stream */
+  GstPad *(*get_video_pad) (GstPlayBin * playbin, gint stream);
+  GstPad *(*get_audio_pad) (GstPlayBin * playbin, gint stream);
+  GstPad *(*get_text_pad) (GstPlayBin * playbin, gint stream);
+};
+
+/* props */
+#define DEFAULT_URI               NULL
+#define DEFAULT_SUBURI            NULL
+#define DEFAULT_SOURCE            NULL
+#define DEFAULT_FLAGS             GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | \
+                                  GST_PLAY_FLAG_SOFT_VOLUME
+#define DEFAULT_N_VIDEO           0
+#define DEFAULT_CURRENT_VIDEO     -1
+#define DEFAULT_N_AUDIO           0
+#define DEFAULT_CURRENT_AUDIO     -1
+#define DEFAULT_N_TEXT            0
+#define DEFAULT_CURRENT_TEXT      -1
+#define DEFAULT_SUBTITLE_ENCODING NULL
+#define DEFAULT_AUDIO_SINK        NULL
+#define DEFAULT_VIDEO_SINK        NULL
+#define DEFAULT_VIS_PLUGIN        NULL
+#define DEFAULT_TEXT_SINK         NULL
+#define DEFAULT_VOLUME            1.0
+#define DEFAULT_MUTE              FALSE
+#define DEFAULT_FRAME             NULL
+#define DEFAULT_FONT_DESC         NULL
+#define DEFAULT_CONNECTION_SPEED  0
+#define DEFAULT_BUFFER_DURATION   -1
+#define DEFAULT_BUFFER_SIZE       -1
+#define DEFAULT_RING_BUFFER_MAX_SIZE 0
+
+enum
+{
+  PROP_0,
+  PROP_URI,
+  PROP_SUBURI,
+  PROP_SOURCE,
+  PROP_FLAGS,
+  PROP_N_VIDEO,
+  PROP_CURRENT_VIDEO,
+  PROP_N_AUDIO,
+  PROP_CURRENT_AUDIO,
+  PROP_N_TEXT,
+  PROP_CURRENT_TEXT,
+  PROP_SUBTITLE_ENCODING,
+  PROP_AUDIO_SINK,
+  PROP_VIDEO_SINK,
+  PROP_VIS_PLUGIN,
+  PROP_TEXT_SINK,
+  PROP_VOLUME,
+  PROP_MUTE,
+  PROP_FRAME,
+  PROP_FONT_DESC,
+  PROP_CONNECTION_SPEED,
+  PROP_BUFFER_SIZE,
+  PROP_BUFFER_DURATION,
+  PROP_AV_OFFSET,
+  PROP_RING_BUFFER_MAX_SIZE,
+  PROP_LAST
+};
+
+/* signals */
+enum
+{
+  SIGNAL_ABOUT_TO_FINISH,
+  SIGNAL_CONVERT_FRAME,
+  SIGNAL_VIDEO_CHANGED,
+  SIGNAL_AUDIO_CHANGED,
+  SIGNAL_TEXT_CHANGED,
+  SIGNAL_VIDEO_TAGS_CHANGED,
+  SIGNAL_AUDIO_TAGS_CHANGED,
+  SIGNAL_TEXT_TAGS_CHANGED,
+  SIGNAL_GET_VIDEO_TAGS,
+  SIGNAL_GET_AUDIO_TAGS,
+  SIGNAL_GET_TEXT_TAGS,
+  SIGNAL_GET_VIDEO_PAD,
+  SIGNAL_GET_AUDIO_PAD,
+  SIGNAL_GET_TEXT_PAD,
+  SIGNAL_SOURCE_SETUP,
+  LAST_SIGNAL
+};
+
+static void gst_play_bin_class_init (GstPlayBinClass * klass);
+static void gst_play_bin_init (GstPlayBin * playbin);
+static void gst_play_bin_finalize (GObject * object);
+
+static void gst_play_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * spec);
+static void gst_play_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * spec);
+
+static GstStateChangeReturn gst_play_bin_change_state (GstElement * element,
+    GstStateChange transition);
+
+static void gst_play_bin_handle_message (GstBin * bin, GstMessage * message);
+static gboolean gst_play_bin_query (GstElement * element, GstQuery * query);
+
+static GstTagList *gst_play_bin_get_video_tags (GstPlayBin * playbin,
+    gint stream);
+static GstTagList *gst_play_bin_get_audio_tags (GstPlayBin * playbin,
+    gint stream);
+static GstTagList *gst_play_bin_get_text_tags (GstPlayBin * playbin,
+    gint stream);
+
+static GstBuffer *gst_play_bin_convert_frame (GstPlayBin * playbin,
+    GstCaps * caps);
+
+static GstPad *gst_play_bin_get_video_pad (GstPlayBin * playbin, gint stream);
+static GstPad *gst_play_bin_get_audio_pad (GstPlayBin * playbin, gint stream);
+static GstPad *gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream);
+
+static gboolean setup_next_source (GstPlayBin * playbin, GstState target);
+
+static void no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group);
+static void pad_removed_cb (GstElement * decodebin, GstPad * pad,
+    GstSourceGroup * group);
+
+static void gst_play_bin_suburidecodebin_block (GstSourceGroup * group,
+    GstElement * suburidecodebin, gboolean block);
+static void gst_play_bin_suburidecodebin_seek_to_start (GstElement *
+    suburidecodebin);
+
+static GstElementClass *parent_class;
+
+static guint gst_play_bin_signals[LAST_SIGNAL] = { 0 };
+
+#define REMOVE_SIGNAL(obj,id)            \
+if (id) {                                \
+  g_signal_handler_disconnect (obj, id); \
+  id = 0;                                \
+}
+
+static GType
+gst_play_bin_get_type (void)
+{
+  static GType gst_play_bin_type = 0;
+
+  if (!gst_play_bin_type) {
+    static const GTypeInfo gst_play_bin_info = {
+      sizeof (GstPlayBinClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_play_bin_class_init,
+      NULL,
+      NULL,
+      sizeof (GstPlayBin),
+      0,
+      (GInstanceInitFunc) gst_play_bin_init,
+      NULL
+    };
+    static const GInterfaceInfo svol_info = {
+      NULL, NULL, NULL
+    };
+
+    gst_play_bin_type = g_type_register_static (GST_TYPE_PIPELINE,
+        "GstPlayBin", &gst_play_bin_info, 0);
+
+    g_type_add_interface_static (gst_play_bin_type, GST_TYPE_STREAM_VOLUME,
+        &svol_info);
+  }
+
+  return gst_play_bin_type;
+}
+
+static void
+gst_play_bin_class_init (GstPlayBinClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+  GstBinClass *gstbin_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+  gstbin_klass = (GstBinClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_klass->set_property = gst_play_bin_set_property;
+  gobject_klass->get_property = gst_play_bin_get_property;
+
+  gobject_klass->finalize = gst_play_bin_finalize;
+
+  /**
+   * GstPlayBin:uri
+   *
+   * Set the next URI that playbin will play. This property can be set from the
+   * about-to-finish signal to queue the next media file.
+   */
+  g_object_class_install_property (gobject_klass, PROP_URI,
+      g_param_spec_string ("uri", "URI", "URI of the media to play",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin:suburi
+   *
+   * Set the next subtitle URI that playbin will play. This property can be
+   * set from the about-to-finish signal to queue the next subtitle media file.
+   */
+  g_object_class_install_property (gobject_klass, PROP_SUBURI,
+      g_param_spec_string ("suburi", ".sub-URI", "Optional URI of a subtitle",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_SOURCE,
+      g_param_spec_object ("source", "Source", "Source element",
+          GST_TYPE_ELEMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin:flags
+   *
+   * Control the behaviour of playbin.
+   */
+  g_object_class_install_property (gobject_klass, PROP_FLAGS,
+      g_param_spec_flags ("flags", "Flags", "Flags to control behaviour",
+          GST_TYPE_PLAY_FLAGS, DEFAULT_FLAGS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin:n-video
+   *
+   * Get the total number of available video streams.
+   */
+  g_object_class_install_property (gobject_klass, PROP_N_VIDEO,
+      g_param_spec_int ("n-video", "Number Video",
+          "Total number of video streams", 0, G_MAXINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:current-video
+   *
+   * Get or set the currently playing video stream. By default the first video
+   * stream with data is played.
+   */
+  g_object_class_install_property (gobject_klass, PROP_CURRENT_VIDEO,
+      g_param_spec_int ("current-video", "Current Video",
+          "Currently playing video stream (-1 = auto)",
+          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:n-audio
+   *
+   * Get the total number of available audio streams.
+   */
+  g_object_class_install_property (gobject_klass, PROP_N_AUDIO,
+      g_param_spec_int ("n-audio", "Number Audio",
+          "Total number of audio streams", 0, G_MAXINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:current-audio
+   *
+   * Get or set the currently playing audio stream. By default the first audio
+   * stream with data is played.
+   */
+  g_object_class_install_property (gobject_klass, PROP_CURRENT_AUDIO,
+      g_param_spec_int ("current-audio", "Current audio",
+          "Currently playing audio stream (-1 = auto)",
+          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:n-text
+   *
+   * Get the total number of available subtitle streams.
+   */
+  g_object_class_install_property (gobject_klass, PROP_N_TEXT,
+      g_param_spec_int ("n-text", "Number Text",
+          "Total number of text streams", 0, G_MAXINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:current-text:
+   *
+   * Get or set the currently playing subtitle stream. By default the first
+   * subtitle stream with data is played.
+   */
+  g_object_class_install_property (gobject_klass, PROP_CURRENT_TEXT,
+      g_param_spec_int ("current-text", "Current Text",
+          "Currently playing text stream (-1 = auto)",
+          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_SUBTITLE_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 encoding. "
+          "If not set, the GST_SUBTITLE_ENCODING environment variable will "
+          "be checked for an encoding to use. If that is not set either, "
+          "ISO-8859-15 will be assumed.", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_VIDEO_SINK,
+      g_param_spec_object ("video-sink", "Video Sink",
+          "the video output element to use (NULL = default sink)",
+          GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_AUDIO_SINK,
+      g_param_spec_object ("audio-sink", "Audio Sink",
+          "the audio output element to use (NULL = default sink)",
+          GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_VIS_PLUGIN,
+      g_param_spec_object ("vis-plugin", "Vis plugin",
+          "the visualization element to use (NULL = default)",
+          GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_TEXT_SINK,
+      g_param_spec_object ("text-sink", "Text plugin",
+          "the text output element to use (NULL = default textoverlay)",
+          GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin:volume:
+   *
+   * Get or set the current audio stream volume. 1.0 means 100%,
+   * 0.0 means mute. This uses a linear volume scale.
+   *
+   */
+  g_object_class_install_property (gobject_klass, PROP_VOLUME,
+      g_param_spec_double ("volume", "Volume", "The audio volume, 1.0=100%",
+          0.0, VOLUME_MAX_DOUBLE, 1.0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_MUTE,
+      g_param_spec_boolean ("mute", "Mute",
+          "Mute the audio channel without changing the volume", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin:frame:
+   * @playbin: a #GstPlayBin
+   *
+   * Get the currently rendered or prerolled frame in the video sink.
+   * The #GstCaps on the buffer will describe the format of the buffer.
+   */
+  g_object_class_install_property (gobject_klass, PROP_FRAME,
+      g_param_spec_boxed ("frame", "Frame",
+          "The last frame (NULL = no video available)",
+          GST_TYPE_BUFFER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_FONT_DESC,
+      g_param_spec_string ("subtitle-font-desc",
+          "Subtitle font description",
+          "Pango font description of font "
+          "to be used for subtitle rendering", NULL,
+          G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_CONNECTION_SPEED,
+      g_param_spec_uint ("connection-speed", "Connection Speed",
+          "Network connection speed in kbps (0 = unknown)",
+          0, G_MAXUINT / 1000, DEFAULT_CONNECTION_SPEED,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_klass, PROP_BUFFER_SIZE,
+      g_param_spec_int ("buffer-size", "Buffer size (bytes)",
+          "Buffer size when buffering network streams",
+          -1, G_MAXINT, DEFAULT_BUFFER_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_BUFFER_DURATION,
+      g_param_spec_int64 ("buffer-duration", "Buffer duration (ns)",
+          "Buffer duration when buffering network streams",
+          -1, G_MAXINT64, DEFAULT_BUFFER_DURATION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlayBin:av-offset:
+   *
+   * Control the synchronisation offset between the audio and video streams.
+   * Positive values make the audio ahead of the video and negative values make
+   * the audio go behind the video.
+   *
+   * Since: 0.10.30
+   */
+  g_object_class_install_property (gobject_klass, PROP_AV_OFFSET,
+      g_param_spec_int64 ("av-offset", "AV Offset",
+          "The synchronisation offset between audio and video in nanoseconds",
+          G_MININT64, G_MAXINT64, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstQueue2:ring-buffer-max-size
+   *
+   * The maximum size of the ring buffer in bytes. If set to 0, the ring
+   * buffer is disabled. Default 0.
+   *
+   * Since: 0.10.31
+   */
+  g_object_class_install_property (gobject_klass, PROP_RING_BUFFER_MAX_SIZE,
+      g_param_spec_uint64 ("ring-buffer-max-size",
+          "Max. ring buffer size (bytes)",
+          "Max. amount of data in the ring buffer (bytes, 0 = ring buffer disabled)",
+          0, G_MAXUINT, DEFAULT_RING_BUFFER_MAX_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin::about-to-finish
+   * @playbin: a #GstPlayBin
+   *
+   * This signal is emitted when the current uri is about to finish. You can
+   * set the uri and suburi to make sure that playback continues.
+   */
+  gst_play_bin_signals[SIGNAL_ABOUT_TO_FINISH] =
+      g_signal_new ("about-to-finish", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, about_to_finish), NULL, NULL,
+      gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstPlayBin::video-changed
+   * @playbin: a #GstPlayBin
+   *
+   * This signal is emitted whenever the number or order of the video
+   * streams has changed. The application will most likely want to select
+   * a new video stream.
+   */
+  gst_play_bin_signals[SIGNAL_VIDEO_CHANGED] =
+      g_signal_new ("video-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, video_changed), NULL, NULL,
+      gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+  /**
+   * GstPlayBin::audio-changed
+   * @playbin: a #GstPlayBin
+   *
+   * This signal is emitted whenever the number or order of the audio
+   * streams has changed. The application will most likely want to select
+   * a new audio stream.
+   */
+  gst_play_bin_signals[SIGNAL_AUDIO_CHANGED] =
+      g_signal_new ("audio-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, audio_changed), NULL, NULL,
+      gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+  /**
+   * GstPlayBin::text-changed
+   * @playbin: a #GstPlayBin
+   *
+   * This signal is emitted whenever the number or order of the text
+   * streams has changed. The application will most likely want to select
+   * a new text stream.
+   */
+  gst_play_bin_signals[SIGNAL_TEXT_CHANGED] =
+      g_signal_new ("text-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, text_changed), NULL, NULL,
+      gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstPlayBin::video-tags-changed
+   * @playbin: a #GstPlayBin
+   * @stream: stream index with changed tags
+   *
+   * This signal is emitted whenever the tags of a video stream have changed.
+   * The application will most likely want to get the new tags.
+   *
+   * Since: 0.10.24
+   */
+  gst_play_bin_signals[SIGNAL_VIDEO_TAGS_CHANGED] =
+      g_signal_new ("video-tags-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, video_tags_changed), NULL, NULL,
+      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  /**
+   * GstPlayBin::audio-tags-changed
+   * @playbin: a #GstPlayBin
+   * @stream: stream index with changed tags
+   *
+   * This signal is emitted whenever the tags of an audio stream have changed.
+   * The application will most likely want to get the new tags.
+   *
+   * Since: 0.10.24
+   */
+  gst_play_bin_signals[SIGNAL_AUDIO_TAGS_CHANGED] =
+      g_signal_new ("audio-tags-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, audio_tags_changed), NULL, NULL,
+      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  /**
+   * GstPlayBin::text-tags-changed
+   * @playbin: a #GstPlayBin
+   * @stream: stream index with changed tags
+   *
+   * This signal is emitted whenever the tags of a text stream have changed.
+   * The application will most likely want to get the new tags.
+   *
+   * Since: 0.10.24
+   */
+  gst_play_bin_signals[SIGNAL_TEXT_TAGS_CHANGED] =
+      g_signal_new ("text-tags-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstPlayBinClass, text_tags_changed), NULL, NULL,
+      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+
+  /**
+   * GstPlayBin::source-setup:
+   * @playbin: a #GstPlayBin
+   * @source: source element
+   *
+   * This signal is emitted after the source element has been created, so
+   * it can be configured by setting additional properties (e.g. set a
+   * proxy server for an http source, or set the device and read speed for
+   * an audio cd source). This is functionally equivalent to connecting to
+   * the notify::source signal, but more convenient.
+   *
+   * Since: 0.10.33
+   */
+  gst_play_bin_signals[SIGNAL_SOURCE_SETUP] =
+      g_signal_new ("source-setup", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+      gst_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+
+  /**
+   * GstPlayBin::get-video-tags
+   * @playbin: a #GstPlayBin
+   * @stream: a video stream number
+   *
+   * Action signal to retrieve the tags of a specific video stream number.
+   * This information can be used to select a stream.
+   *
+   * Returns: a GstTagList with tags or NULL when the stream number does not
+   * exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_VIDEO_TAGS] =
+      g_signal_new ("get-video-tags", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_video_tags), NULL, NULL,
+      gst_play_marshal_BOXED__INT, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
+  /**
+   * GstPlayBin::get-audio-tags
+   * @playbin: a #GstPlayBin
+   * @stream: an audio stream number
+   *
+   * Action signal to retrieve the tags of a specific audio stream number.
+   * This information can be used to select a stream.
+   *
+   * Returns: a GstTagList with tags or NULL when the stream number does not
+   * exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_AUDIO_TAGS] =
+      g_signal_new ("get-audio-tags", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_audio_tags), NULL, NULL,
+      gst_play_marshal_BOXED__INT, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
+  /**
+   * GstPlayBin::get-text-tags
+   * @playbin: a #GstPlayBin
+   * @stream: a text stream number
+   *
+   * Action signal to retrieve the tags of a specific text stream number.
+   * This information can be used to select a stream.
+   *
+   * Returns: a GstTagList with tags or NULL when the stream number does not
+   * exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_TEXT_TAGS] =
+      g_signal_new ("get-text-tags", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_text_tags), NULL, NULL,
+      gst_play_marshal_BOXED__INT, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
+  /**
+   * GstPlayBin::convert-frame
+   * @playbin: a #GstPlayBin
+   * @caps: the target format of the frame
+   *
+   * Action signal to retrieve the currently playing video frame in the format
+   * specified by @caps.
+   * If @caps is %NULL, no conversion will be performed and this function is
+   * equivalent to the #GstPlayBin::frame property.
+   *
+   * Returns: a #GstBuffer of the current video frame converted to #caps.
+   * The caps on the buffer will describe the final layout of the buffer data.
+   * %NULL is returned when no current buffer can be retrieved or when the
+   * conversion failed.
+   */
+  gst_play_bin_signals[SIGNAL_CONVERT_FRAME] =
+      g_signal_new ("convert-frame", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, convert_frame), NULL, NULL,
+      gst_play_marshal_BUFFER__BOXED, GST_TYPE_BUFFER, 1, GST_TYPE_CAPS);
+
+  /**
+   * GstPlayBin::get-video-pad
+   * @playbin: a #GstPlayBin
+   * @stream: a video stream number
+   *
+   * Action signal to retrieve the stream-selector sinkpad for a specific
+   * video stream.
+   * This pad can be used for notifications of caps changes, stream-specific
+   * queries, etc.
+   *
+   * Returns: a #GstPad, or NULL when the stream number does not exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_VIDEO_PAD] =
+      g_signal_new ("get-video-pad", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_video_pad), NULL, NULL,
+      gst_play_marshal_OBJECT__INT, GST_TYPE_PAD, 1, G_TYPE_INT);
+  /**
+   * GstPlayBin::get-audio-pad
+   * @playbin: a #GstPlayBin
+   * @stream: an audio stream number
+   *
+   * Action signal to retrieve the stream-selector sinkpad for a specific
+   * audio stream.
+   * This pad can be used for notifications of caps changes, stream-specific
+   * queries, etc.
+   *
+   * Returns: a #GstPad, or NULL when the stream number does not exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_AUDIO_PAD] =
+      g_signal_new ("get-audio-pad", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_audio_pad), NULL, NULL,
+      gst_play_marshal_OBJECT__INT, GST_TYPE_PAD, 1, G_TYPE_INT);
+  /**
+   * GstPlayBin::get-text-pad
+   * @playbin: a #GstPlayBin
+   * @stream: a text stream number
+   *
+   * Action signal to retrieve the stream-selector sinkpad for a specific
+   * text stream.
+   * This pad can be used for notifications of caps changes, stream-specific
+   * queries, etc.
+   *
+   * Returns: a #GstPad, or NULL when the stream number does not exist.
+   */
+  gst_play_bin_signals[SIGNAL_GET_TEXT_PAD] =
+      g_signal_new ("get-text-pad", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlayBinClass, get_text_pad), NULL, NULL,
+      gst_play_marshal_OBJECT__INT, GST_TYPE_PAD, 1, G_TYPE_INT);
+
+  klass->get_video_tags = gst_play_bin_get_video_tags;
+  klass->get_audio_tags = gst_play_bin_get_audio_tags;
+  klass->get_text_tags = gst_play_bin_get_text_tags;
+
+  klass->convert_frame = gst_play_bin_convert_frame;
+
+  klass->get_video_pad = gst_play_bin_get_video_pad;
+  klass->get_audio_pad = gst_play_bin_get_audio_pad;
+  klass->get_text_pad = gst_play_bin_get_text_pad;
+
+  gst_element_class_set_details_simple (gstelement_klass,
+      "Player Bin 2", "Generic/Bin/Player",
+      "Autoplug and play media from an uri",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gstelement_klass->change_state =
+      GST_DEBUG_FUNCPTR (gst_play_bin_change_state);
+  gstelement_klass->query = GST_DEBUG_FUNCPTR (gst_play_bin_query);
+
+  gstbin_klass->handle_message =
+      GST_DEBUG_FUNCPTR (gst_play_bin_handle_message);
+}
+
+static void
+init_group (GstPlayBin * playbin, GstSourceGroup * group)
+{
+  int n;
+
+  /* store the array for the different channels */
+  group->video_channels = g_ptr_array_new ();
+  group->audio_channels = g_ptr_array_new ();
+  group->text_channels = g_ptr_array_new ();
+  group->lock = g_mutex_new ();
+  /* init selectors. The selector is found by finding the first prefix that
+   * matches the media. */
+  group->playbin = playbin;
+  /* If you add any items to these lists, check that media_list[] is defined
+   * above to be large enough to hold MAX(items)+1, so as to accomodate a
+   * NULL terminator (set when the memory is zeroed on allocation) */
+  group->selector[PLAYBIN_STREAM_AUDIO].media_list[0] = "audio/";
+  group->selector[PLAYBIN_STREAM_AUDIO].type = GST_PLAY_SINK_TYPE_AUDIO;
+  group->selector[PLAYBIN_STREAM_AUDIO].channels = group->audio_channels;
+  group->selector[PLAYBIN_STREAM_VIDEO].media_list[0] = "video/";
+  group->selector[PLAYBIN_STREAM_VIDEO].type = GST_PLAY_SINK_TYPE_VIDEO;
+  group->selector[PLAYBIN_STREAM_VIDEO].channels = group->video_channels;
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[0] = "text/";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[1] = "application/x-subtitle";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[2] = "application/x-ssa";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[3] = "application/x-ass";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[4] = "video/x-dvd-subpicture";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[5] = "subpicture/";
+  group->selector[PLAYBIN_STREAM_TEXT].media_list[6] = "subtitle/";
+  group->selector[PLAYBIN_STREAM_TEXT].get_media_caps =
+      gst_subtitle_overlay_create_factory_caps;
+  group->selector[PLAYBIN_STREAM_TEXT].type = GST_PLAY_SINK_TYPE_TEXT;
+  group->selector[PLAYBIN_STREAM_TEXT].channels = group->text_channels;
+
+  for (n = 0; n < PLAYBIN_STREAM_LAST; n++) {
+    GstSourceSelect *select = &group->selector[n];
+    select->sinkpad_delayed_event = NULL;
+    select->sinkpad_data_probe = 0;
+  }
+}
+
+static void
+free_group (GstPlayBin * playbin, GstSourceGroup * group)
+{
+  int n;
+
+  for (n = 0; n < PLAYBIN_STREAM_LAST; n++) {
+    GstSourceSelect *select = &group->selector[n];
+    if (select->sinkpad && select->sinkpad_data_probe)
+      gst_pad_remove_probe (select->sinkpad, select->sinkpad_data_probe);
+    if (select->sinkpad_delayed_event)
+      gst_event_unref (select->sinkpad_delayed_event);
+  }
+
+  g_free (group->uri);
+  g_free (group->suburi);
+  g_ptr_array_free (group->video_channels, TRUE);
+  g_ptr_array_free (group->audio_channels, TRUE);
+  g_ptr_array_free (group->text_channels, TRUE);
+
+  g_mutex_free (group->lock);
+  if (group->audio_sink) {
+    if (group->audio_sink != playbin->audio_sink)
+      gst_element_set_state (group->audio_sink, GST_STATE_NULL);
+    gst_object_unref (group->audio_sink);
+  }
+  group->audio_sink = NULL;
+  if (group->video_sink) {
+    if (group->video_sink != playbin->video_sink)
+      gst_element_set_state (group->video_sink, GST_STATE_NULL);
+    gst_object_unref (group->video_sink);
+  }
+  group->video_sink = NULL;
+
+  g_list_free (group->stream_changed_pending);
+  group->stream_changed_pending = NULL;
+
+  if (group->stream_changed_pending_lock)
+    g_mutex_free (group->stream_changed_pending_lock);
+  group->stream_changed_pending_lock = NULL;
+}
+
+static void
+notify_volume_cb (GObject * selector, GParamSpec * pspec, GstPlayBin * playbin)
+{
+  g_object_notify (G_OBJECT (playbin), "volume");
+}
+
+static void
+notify_mute_cb (GObject * selector, GParamSpec * pspec, GstPlayBin * playbin)
+{
+  g_object_notify (G_OBJECT (playbin), "mute");
+}
+
+/* Must be called with elements lock! */
+static void
+gst_play_bin_update_elements_list (GstPlayBin * playbin)
+{
+  GList *res, *tmp;
+
+  if (!playbin->elements ||
+      playbin->elements_cookie !=
+      gst_default_registry_get_feature_list_cookie ()) {
+    if (playbin->elements)
+      gst_plugin_feature_list_free (playbin->elements);
+    res =
+        gst_element_factory_list_get_elements
+        (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
+    tmp =
+        gst_element_factory_list_get_elements
+        (GST_ELEMENT_FACTORY_TYPE_AUDIOVIDEO_SINKS, GST_RANK_MARGINAL);
+    playbin->elements = g_list_concat (res, tmp);
+    playbin->elements =
+        g_list_sort (playbin->elements, gst_plugin_feature_rank_compare_func);
+    playbin->elements_cookie = gst_default_registry_get_feature_list_cookie ();
+  }
+}
+
+static void
+gst_play_bin_init (GstPlayBin * playbin)
+{
+  g_static_rec_mutex_init (&playbin->lock);
+  playbin->dyn_lock = g_mutex_new ();
+
+  /* assume we can create a selector */
+  playbin->have_selector = TRUE;
+
+  /* init groups */
+  playbin->curr_group = &playbin->groups[0];
+  playbin->next_group = &playbin->groups[1];
+  init_group (playbin, &playbin->groups[0]);
+  init_group (playbin, &playbin->groups[1]);
+
+  /* first filter out the interesting element factories */
+  playbin->elements_lock = g_mutex_new ();
+
+  /* add sink */
+  playbin->playsink = g_object_new (GST_TYPE_PLAY_SINK, NULL);
+  gst_bin_add (GST_BIN_CAST (playbin), GST_ELEMENT_CAST (playbin->playsink));
+  gst_play_sink_set_flags (playbin->playsink, DEFAULT_FLAGS);
+  /* Connect to notify::volume and notify::mute signals for proxying */
+  g_signal_connect (playbin->playsink, "notify::volume",
+      G_CALLBACK (notify_volume_cb), playbin);
+  g_signal_connect (playbin->playsink, "notify::mute",
+      G_CALLBACK (notify_mute_cb), playbin);
+
+  playbin->current_video = DEFAULT_CURRENT_VIDEO;
+  playbin->current_audio = DEFAULT_CURRENT_AUDIO;
+  playbin->current_text = DEFAULT_CURRENT_TEXT;
+
+  playbin->buffer_duration = DEFAULT_BUFFER_DURATION;
+  playbin->buffer_size = DEFAULT_BUFFER_SIZE;
+  playbin->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE;
+}
+
+static void
+gst_play_bin_finalize (GObject * object)
+{
+  GstPlayBin *playbin;
+
+  playbin = GST_PLAY_BIN (object);
+
+  free_group (playbin, &playbin->groups[0]);
+  free_group (playbin, &playbin->groups[1]);
+
+  if (playbin->source)
+    gst_object_unref (playbin->source);
+  if (playbin->video_sink) {
+    gst_element_set_state (playbin->video_sink, GST_STATE_NULL);
+    gst_object_unref (playbin->video_sink);
+  }
+  if (playbin->audio_sink) {
+    gst_element_set_state (playbin->audio_sink, GST_STATE_NULL);
+    gst_object_unref (playbin->audio_sink);
+  }
+  if (playbin->text_sink) {
+    gst_element_set_state (playbin->text_sink, GST_STATE_NULL);
+    gst_object_unref (playbin->text_sink);
+  }
+
+  if (playbin->elements)
+    gst_plugin_feature_list_free (playbin->elements);
+
+  g_static_rec_mutex_free (&playbin->lock);
+  g_mutex_free (playbin->dyn_lock);
+  g_mutex_free (playbin->elements_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_playbin_uri_is_valid (GstPlayBin * playbin, const gchar * uri)
+{
+  const gchar *c;
+
+  GST_LOG_OBJECT (playbin, "checking uri '%s'", uri);
+
+  /* this just checks the protocol */
+  if (!gst_uri_is_valid (uri))
+    return FALSE;
+
+  for (c = uri; *c != '\0'; ++c) {
+    if (!g_ascii_isprint (*c))
+      goto invalid;
+    if (*c == ' ')
+      goto invalid;
+  }
+
+  return TRUE;
+
+invalid:
+  {
+    GST_WARNING_OBJECT (playbin, "uri '%s' not valid, character #%u",
+        uri, (guint) ((guintptr) c - (guintptr) uri));
+    return FALSE;
+  }
+}
+
+static void
+gst_play_bin_set_uri (GstPlayBin * playbin, const gchar * uri)
+{
+  GstSourceGroup *group;
+
+  if (uri == NULL) {
+    g_warning ("cannot set NULL uri");
+    return;
+  }
+
+  if (!gst_playbin_uri_is_valid (playbin, uri)) {
+    if (g_str_has_prefix (uri, "file:")) {
+      GST_ERROR_OBJECT (playbin, "malformed file URI '%s' - make sure to "
+          "escape spaces and non-ASCII characters properly and specify an "
+          "absolute path. Use gst_filename_to_uri() to convert filenames "
+          "to URIs", uri);
+    } else {
+      GST_ERROR_OBJECT (playbin, "malformed URI '%s'", uri);
+    }
+  }
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = playbin->next_group;
+
+  GST_SOURCE_GROUP_LOCK (group);
+  /* store the uri in the next group we will play */
+  g_free (group->uri);
+  group->uri = g_strdup (uri);
+  group->valid = TRUE;
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  GST_DEBUG ("set new uri to %s", uri);
+  GST_PLAY_BIN_UNLOCK (playbin);
+}
+
+static void
+gst_play_bin_set_suburi (GstPlayBin * playbin, const gchar * suburi)
+{
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = playbin->next_group;
+
+  GST_SOURCE_GROUP_LOCK (group);
+  g_free (group->suburi);
+  group->suburi = g_strdup (suburi);
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  GST_DEBUG ("setting new .sub uri to %s", suburi);
+
+  GST_PLAY_BIN_UNLOCK (playbin);
+}
+
+static void
+gst_play_bin_set_flags (GstPlayBin * playbin, GstPlayFlags flags)
+{
+  gst_play_sink_set_flags (playbin->playsink, flags);
+  gst_play_sink_reconfigure (playbin->playsink);
+}
+
+static GstPlayFlags
+gst_play_bin_get_flags (GstPlayBin * playbin)
+{
+  GstPlayFlags flags;
+
+  flags = gst_play_sink_get_flags (playbin->playsink);
+
+  return flags;
+}
+
+/* get the currently playing group or if nothing is playing, the next
+ * group. Must be called with the PLAY_BIN_LOCK. */
+static GstSourceGroup *
+get_group (GstPlayBin * playbin)
+{
+  GstSourceGroup *result;
+
+  if (!(result = playbin->curr_group))
+    result = playbin->next_group;
+
+  return result;
+}
+
+static GstPad *
+gst_play_bin_get_video_pad (GstPlayBin * playbin, gint stream)
+{
+  GstPad *sinkpad = NULL;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  if (stream < group->video_channels->len) {
+    sinkpad = g_ptr_array_index (group->video_channels, stream);
+    gst_object_ref (sinkpad);
+  }
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return sinkpad;
+}
+
+static GstPad *
+gst_play_bin_get_audio_pad (GstPlayBin * playbin, gint stream)
+{
+  GstPad *sinkpad = NULL;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  if (stream < group->audio_channels->len) {
+    sinkpad = g_ptr_array_index (group->audio_channels, stream);
+    gst_object_ref (sinkpad);
+  }
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return sinkpad;
+}
+
+static GstPad *
+gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream)
+{
+  GstPad *sinkpad = NULL;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  if (stream < group->text_channels->len) {
+    sinkpad = g_ptr_array_index (group->text_channels, stream);
+    gst_object_ref (sinkpad);
+  }
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return sinkpad;
+}
+
+
+static GstTagList *
+get_tags (GstPlayBin * playbin, GPtrArray * channels, gint stream)
+{
+  GstTagList *result;
+  GstPad *sinkpad;
+
+  if (!channels || stream >= channels->len)
+    return NULL;
+
+  sinkpad = g_ptr_array_index (channels, stream);
+  g_object_get (sinkpad, "tags", &result, NULL);
+
+  return result;
+}
+
+static GstTagList *
+gst_play_bin_get_video_tags (GstPlayBin * playbin, gint stream)
+{
+  GstTagList *result;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  result = get_tags (playbin, group->video_channels, stream);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return result;
+}
+
+static GstTagList *
+gst_play_bin_get_audio_tags (GstPlayBin * playbin, gint stream)
+{
+  GstTagList *result;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  result = get_tags (playbin, group->audio_channels, stream);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return result;
+}
+
+static GstTagList *
+gst_play_bin_get_text_tags (GstPlayBin * playbin, gint stream)
+{
+  GstTagList *result;
+  GstSourceGroup *group;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+  result = get_tags (playbin, group->text_channels, stream);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return result;
+}
+
+static GstBuffer *
+gst_play_bin_convert_frame (GstPlayBin * playbin, GstCaps * caps)
+{
+  return gst_play_sink_convert_frame (playbin->playsink, caps);
+}
+
+/* Returns current stream number, or -1 if none has been selected yet */
+static int
+get_current_stream_number (GstPlayBin * playbin, GPtrArray * channels)
+{
+  /* Internal API cleanup would make this easier... */
+  int i;
+  GstPad *pad, *current;
+  GstObject *selector = NULL;
+  int ret = -1;
+
+  for (i = 0; i < channels->len; i++) {
+    pad = g_ptr_array_index (channels, i);
+    if ((selector = gst_pad_get_parent (pad))) {
+      g_object_get (selector, "active-pad", &current, NULL);
+      gst_object_unref (selector);
+
+      if (pad == current) {
+        gst_object_unref (current);
+        ret = i;
+        break;
+      }
+
+      if (current)
+        gst_object_unref (current);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_play_bin_set_current_video_stream (GstPlayBin * playbin, gint stream)
+{
+  GstSourceGroup *group;
+  GPtrArray *channels;
+  GstPad *sinkpad;
+
+  GST_PLAY_BIN_LOCK (playbin);
+
+  GST_DEBUG_OBJECT (playbin, "Changing current video stream %d -> %d",
+      playbin->current_video, stream);
+
+  group = get_group (playbin);
+  if (!(channels = group->video_channels))
+    goto no_channels;
+
+  if (stream == -1 || channels->len <= stream) {
+    sinkpad = NULL;
+  } else {
+    /* take channel from selected stream */
+    sinkpad = g_ptr_array_index (channels, stream);
+  }
+
+  if (sinkpad)
+    gst_object_ref (sinkpad);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  if (sinkpad) {
+    GstObject *selector;
+
+    if ((selector = gst_pad_get_parent (sinkpad))) {
+      /* activate the selected pad */
+      g_object_set (selector, "active-pad", sinkpad, NULL);
+      gst_object_unref (selector);
+    }
+    gst_object_unref (sinkpad);
+  }
+  return TRUE;
+
+no_channels:
+  {
+    GST_PLAY_BIN_UNLOCK (playbin);
+    GST_DEBUG_OBJECT (playbin, "can't switch video, we have no channels");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_play_bin_set_current_audio_stream (GstPlayBin * playbin, gint stream)
+{
+  GstSourceGroup *group;
+  GPtrArray *channels;
+  GstPad *sinkpad;
+
+  GST_PLAY_BIN_LOCK (playbin);
+
+  GST_DEBUG_OBJECT (playbin, "Changing current audio stream %d -> %d",
+      playbin->current_audio, stream);
+
+  group = get_group (playbin);
+  if (!(channels = group->audio_channels))
+    goto no_channels;
+
+  if (stream == -1 || channels->len <= stream) {
+    sinkpad = NULL;
+  } else {
+    /* take channel from selected stream */
+    sinkpad = g_ptr_array_index (channels, stream);
+  }
+
+  if (sinkpad)
+    gst_object_ref (sinkpad);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  if (sinkpad) {
+    GstObject *selector;
+
+    if ((selector = gst_pad_get_parent (sinkpad))) {
+      /* activate the selected pad */
+      g_object_set (selector, "active-pad", sinkpad, NULL);
+      gst_object_unref (selector);
+    }
+    gst_object_unref (sinkpad);
+  }
+  return TRUE;
+
+no_channels:
+  {
+    GST_PLAY_BIN_UNLOCK (playbin);
+    GST_DEBUG_OBJECT (playbin, "can't switch audio, we have no channels");
+    return FALSE;
+  }
+}
+
+static void
+gst_play_bin_suburidecodebin_seek_to_start (GstElement * suburidecodebin)
+{
+  GstIterator *it = gst_element_iterate_src_pads (suburidecodebin);
+  GstPad *sinkpad;
+  GValue item = { 0, };
+
+  if (it && gst_iterator_next (it, &item) == GST_ITERATOR_OK
+      && ((sinkpad = g_value_get_object (&item)) != NULL)) {
+    GstEvent *event;
+
+    event =
+        gst_event_new_seek (1.0, GST_FORMAT_BYTES, GST_SEEK_FLAG_NONE,
+        GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, -1);
+    if (!gst_pad_send_event (sinkpad, event)) {
+      event =
+          gst_event_new_seek (1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_NONE,
+          GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, -1);
+      if (!gst_pad_send_event (sinkpad, event))
+        GST_DEBUG_OBJECT (suburidecodebin, "Seeking to the beginning failed!");
+    }
+
+    g_value_unset (&item);
+  }
+
+  if (it)
+    gst_iterator_free (it);
+}
+
+static void
+gst_play_bin_suburidecodebin_block (GstSourceGroup * group,
+    GstElement * suburidecodebin, gboolean block)
+{
+  GstIterator *it = gst_element_iterate_src_pads (suburidecodebin);
+  gboolean done = FALSE;
+  GValue item = { 0, };
+
+  GST_DEBUG_OBJECT (suburidecodebin, "Blocking suburidecodebin: %d", block);
+
+  if (!it)
+    return;
+  while (!done) {
+    GstPad *sinkpad;
+
+    switch (gst_iterator_next (it, &item)) {
+      case GST_ITERATOR_OK:
+        sinkpad = g_value_get_object (&item);
+        if (block) {
+          group->block_id =
+              gst_pad_add_probe (sinkpad, GST_PROBE_TYPE_BLOCK, NULL, NULL,
+              NULL);
+        } else if (group->block_id) {
+          gst_pad_remove_probe (sinkpad, group->block_id);
+          group->block_id = 0;
+        }
+        g_value_reset (&item);
+        break;
+      case GST_ITERATOR_DONE:
+        done = TRUE;
+        break;
+      case GST_ITERATOR_RESYNC:
+        gst_iterator_resync (it);
+        break;
+      case GST_ITERATOR_ERROR:
+        done = TRUE;
+        break;
+    }
+  }
+  g_value_unset (&item);
+  gst_iterator_free (it);
+}
+
+static gboolean
+gst_play_bin_set_current_text_stream (GstPlayBin * playbin, gint stream)
+{
+  GstSourceGroup *group;
+  GPtrArray *channels;
+  GstPad *sinkpad;
+
+  GST_PLAY_BIN_LOCK (playbin);
+
+  GST_DEBUG_OBJECT (playbin, "Changing current text stream %d -> %d",
+      playbin->current_text, stream);
+
+  group = get_group (playbin);
+  if (!(channels = group->text_channels))
+    goto no_channels;
+
+  if (stream == -1 || channels->len <= stream) {
+    sinkpad = NULL;
+  } else {
+    /* take channel from selected stream */
+    sinkpad = g_ptr_array_index (channels, stream);
+  }
+
+  if (sinkpad)
+    gst_object_ref (sinkpad);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  if (sinkpad) {
+    GstObject *selector;
+
+    if ((selector = gst_pad_get_parent (sinkpad))) {
+      GstPad *old_sinkpad;
+
+      g_object_get (selector, "active-pad", &old_sinkpad, NULL);
+
+      if (old_sinkpad != sinkpad) {
+        gboolean need_unblock, need_block, need_seek;
+        GstPad *src, *peer = NULL, *oldpeer = NULL;
+        GstElement *parent_element = NULL, *old_parent_element = NULL;
+
+        /* Now check if we need to seek the suburidecodebin to the beginning
+         * or if we need to block all suburidecodebin sinkpads or if we need
+         * to unblock all suburidecodebin sinkpads
+         */
+        if (sinkpad)
+          peer = gst_pad_get_peer (sinkpad);
+        if (old_sinkpad)
+          oldpeer = gst_pad_get_peer (old_sinkpad);
+
+        if (peer)
+          parent_element = gst_pad_get_parent_element (peer);
+        if (oldpeer)
+          old_parent_element = gst_pad_get_parent_element (oldpeer);
+
+        need_block = (old_parent_element == group->suburidecodebin
+            && parent_element != old_parent_element);
+        need_unblock = (parent_element == group->suburidecodebin
+            && parent_element != old_parent_element);
+        need_seek = (parent_element == group->suburidecodebin);
+
+        if (peer)
+          gst_object_unref (peer);
+        if (oldpeer)
+          gst_object_unref (oldpeer);
+        if (parent_element)
+          gst_object_unref (parent_element);
+        if (old_parent_element)
+          gst_object_unref (old_parent_element);
+
+        /* Block all suburidecodebin sinkpads */
+        if (need_block)
+          gst_play_bin_suburidecodebin_block (group, group->suburidecodebin,
+              TRUE);
+
+        /* activate the selected pad */
+        g_object_set (selector, "active-pad", sinkpad, NULL);
+
+        src = gst_element_get_static_pad (GST_ELEMENT_CAST (selector), "src");
+        peer = gst_pad_get_peer (src);
+        if (peer) {
+          GstStructure *s;
+          GstEvent *event;
+          /* Flush the subtitle renderer to remove any
+           * currently displayed subtitles. This event will
+           * never travel outside subtitleoverlay!
+           */
+          s = gst_structure_empty_new ("subtitleoverlay-flush-subtitle");
+          event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_OOB, s);
+          gst_pad_send_event (peer, event);
+          gst_object_unref (peer);
+        }
+        gst_object_unref (src);
+
+        /* Unblock pads if necessary */
+        if (need_unblock)
+          gst_play_bin_suburidecodebin_block (group, group->suburidecodebin,
+              FALSE);
+
+        /* seek to the beginning */
+        if (need_seek)
+          gst_play_bin_suburidecodebin_seek_to_start (group->suburidecodebin);
+      }
+      gst_object_unref (selector);
+
+      if (old_sinkpad)
+        gst_object_unref (old_sinkpad);
+    }
+    gst_object_unref (sinkpad);
+  }
+  return TRUE;
+
+no_channels:
+  {
+    GST_PLAY_BIN_UNLOCK (playbin);
+    return FALSE;
+  }
+}
+
+static void
+gst_play_bin_set_sink (GstPlayBin * playbin, GstElement ** elem,
+    const gchar * dbg, GstElement * sink)
+{
+  GST_INFO_OBJECT (playbin, "Setting %s sink to %" GST_PTR_FORMAT, dbg, sink);
+
+  GST_PLAY_BIN_LOCK (playbin);
+  if (*elem != sink) {
+    GstElement *old;
+
+    old = *elem;
+    if (sink)
+      gst_object_ref_sink (sink);
+
+    *elem = sink;
+    if (old)
+      gst_object_unref (old);
+  }
+  GST_LOG_OBJECT (playbin, "%s sink now %" GST_PTR_FORMAT, dbg, *elem);
+  GST_PLAY_BIN_UNLOCK (playbin);
+}
+
+static void
+gst_play_bin_set_encoding (GstPlayBin * playbin, const gchar * encoding)
+{
+  GstElement *elem;
+
+  GST_PLAY_BIN_LOCK (playbin);
+
+  /* set subtitles on all current and next decodebins. */
+  if ((elem = playbin->groups[0].uridecodebin))
+    g_object_set (G_OBJECT (elem), "subtitle-encoding", encoding, NULL);
+  if ((elem = playbin->groups[0].suburidecodebin))
+    g_object_set (G_OBJECT (elem), "subtitle-encoding", encoding, NULL);
+  if ((elem = playbin->groups[1].uridecodebin))
+    g_object_set (G_OBJECT (elem), "subtitle-encoding", encoding, NULL);
+  if ((elem = playbin->groups[1].suburidecodebin))
+    g_object_set (G_OBJECT (elem), "subtitle-encoding", encoding, NULL);
+
+  gst_play_sink_set_subtitle_encoding (playbin->playsink, encoding);
+  GST_PLAY_BIN_UNLOCK (playbin);
+}
+
+static void
+gst_play_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstPlayBin *playbin = GST_PLAY_BIN (object);
+
+  switch (prop_id) {
+    case PROP_URI:
+      gst_play_bin_set_uri (playbin, g_value_get_string (value));
+      break;
+    case PROP_SUBURI:
+      gst_play_bin_set_suburi (playbin, g_value_get_string (value));
+      break;
+    case PROP_FLAGS:
+      gst_play_bin_set_flags (playbin, g_value_get_flags (value));
+      break;
+    case PROP_CURRENT_VIDEO:
+      gst_play_bin_set_current_video_stream (playbin, g_value_get_int (value));
+      break;
+    case PROP_CURRENT_AUDIO:
+      gst_play_bin_set_current_audio_stream (playbin, g_value_get_int (value));
+      break;
+    case PROP_CURRENT_TEXT:
+      gst_play_bin_set_current_text_stream (playbin, g_value_get_int (value));
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      gst_play_bin_set_encoding (playbin, g_value_get_string (value));
+      break;
+    case PROP_VIDEO_SINK:
+      gst_play_bin_set_sink (playbin, &playbin->video_sink, "video",
+          g_value_get_object (value));
+      break;
+    case PROP_AUDIO_SINK:
+      gst_play_bin_set_sink (playbin, &playbin->audio_sink, "audio",
+          g_value_get_object (value));
+      break;
+    case PROP_VIS_PLUGIN:
+      gst_play_sink_set_vis_plugin (playbin->playsink,
+          g_value_get_object (value));
+      break;
+    case PROP_TEXT_SINK:
+      gst_play_bin_set_sink (playbin, &playbin->text_sink, "text",
+          g_value_get_object (value));
+      break;
+    case PROP_VOLUME:
+      gst_play_sink_set_volume (playbin->playsink, g_value_get_double (value));
+      break;
+    case PROP_MUTE:
+      gst_play_sink_set_mute (playbin->playsink, g_value_get_boolean (value));
+      break;
+    case PROP_FONT_DESC:
+      gst_play_sink_set_font_desc (playbin->playsink,
+          g_value_get_string (value));
+      break;
+    case PROP_CONNECTION_SPEED:
+      GST_PLAY_BIN_LOCK (playbin);
+      playbin->connection_speed = g_value_get_uint (value) * 1000;
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_BUFFER_SIZE:
+      playbin->buffer_size = g_value_get_int (value);
+      break;
+    case PROP_BUFFER_DURATION:
+      playbin->buffer_duration = g_value_get_int64 (value);
+      break;
+    case PROP_AV_OFFSET:
+      gst_play_sink_set_av_offset (playbin->playsink,
+          g_value_get_int64 (value));
+      break;
+    case PROP_RING_BUFFER_MAX_SIZE:
+      playbin->ring_buffer_max_size = g_value_get_uint64 (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstElement *
+gst_play_bin_get_current_sink (GstPlayBin * playbin, GstElement ** elem,
+    const gchar * dbg, GstPlaySinkType type)
+{
+  GstElement *sink = gst_play_sink_get_sink (playbin->playsink, type);
+
+  GST_LOG_OBJECT (playbin, "play_sink_get_sink() returned %s sink %"
+      GST_PTR_FORMAT ", the originally set %s sink is %" GST_PTR_FORMAT,
+      dbg, sink, dbg, *elem);
+
+  if (sink == NULL) {
+    GST_PLAY_BIN_LOCK (playbin);
+    if ((sink = *elem))
+      gst_object_ref (sink);
+    GST_PLAY_BIN_UNLOCK (playbin);
+  }
+
+  return sink;
+}
+
+static void
+gst_play_bin_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstPlayBin *playbin = GST_PLAY_BIN (object);
+
+  switch (prop_id) {
+    case PROP_URI:
+    {
+      GstSourceGroup *group;
+
+      GST_PLAY_BIN_LOCK (playbin);
+      group = get_group (playbin);
+      g_value_set_string (value, group->uri);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    }
+    case PROP_SUBURI:
+    {
+      GstSourceGroup *group;
+
+      GST_PLAY_BIN_LOCK (playbin);
+      group = get_group (playbin);
+      g_value_set_string (value, group->suburi);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    }
+    case PROP_SOURCE:
+    {
+      GST_OBJECT_LOCK (playbin);
+      g_value_set_object (value, playbin->source);
+      GST_OBJECT_UNLOCK (playbin);
+      break;
+    }
+    case PROP_FLAGS:
+      g_value_set_flags (value, gst_play_bin_get_flags (playbin));
+      break;
+    case PROP_N_VIDEO:
+    {
+      GstSourceGroup *group;
+      gint n_video;
+
+      GST_PLAY_BIN_LOCK (playbin);
+      group = get_group (playbin);
+      n_video = (group->video_channels ? group->video_channels->len : 0);
+      g_value_set_int (value, n_video);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    }
+    case PROP_CURRENT_VIDEO:
+      GST_PLAY_BIN_LOCK (playbin);
+      g_value_set_int (value, playbin->current_video);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_N_AUDIO:
+    {
+      GstSourceGroup *group;
+      gint n_audio;
+
+      GST_PLAY_BIN_LOCK (playbin);
+      group = get_group (playbin);
+      n_audio = (group->audio_channels ? group->audio_channels->len : 0);
+      g_value_set_int (value, n_audio);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    }
+    case PROP_CURRENT_AUDIO:
+      GST_PLAY_BIN_LOCK (playbin);
+      g_value_set_int (value, playbin->current_audio);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_N_TEXT:
+    {
+      GstSourceGroup *group;
+      gint n_text;
+
+      GST_PLAY_BIN_LOCK (playbin);
+      group = get_group (playbin);
+      n_text = (group->text_channels ? group->text_channels->len : 0);
+      g_value_set_int (value, n_text);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    }
+    case PROP_CURRENT_TEXT:
+      GST_PLAY_BIN_LOCK (playbin);
+      g_value_set_int (value, playbin->current_text);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      GST_PLAY_BIN_LOCK (playbin);
+      g_value_take_string (value,
+          gst_play_sink_get_subtitle_encoding (playbin->playsink));
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_VIDEO_SINK:
+      g_value_take_object (value,
+          gst_play_bin_get_current_sink (playbin, &playbin->video_sink,
+              "video", GST_PLAY_SINK_TYPE_VIDEO));
+      break;
+    case PROP_AUDIO_SINK:
+      g_value_take_object (value,
+          gst_play_bin_get_current_sink (playbin, &playbin->audio_sink,
+              "audio", GST_PLAY_SINK_TYPE_AUDIO));
+      break;
+    case PROP_VIS_PLUGIN:
+      g_value_take_object (value,
+          gst_play_sink_get_vis_plugin (playbin->playsink));
+      break;
+    case PROP_TEXT_SINK:
+      g_value_take_object (value,
+          gst_play_bin_get_current_sink (playbin, &playbin->text_sink,
+              "text", GST_PLAY_SINK_TYPE_TEXT));
+      break;
+    case PROP_VOLUME:
+      g_value_set_double (value, gst_play_sink_get_volume (playbin->playsink));
+      break;
+    case PROP_MUTE:
+      g_value_set_boolean (value, gst_play_sink_get_mute (playbin->playsink));
+      break;
+    case PROP_FRAME:
+      gst_value_take_buffer (value,
+          gst_play_sink_get_last_frame (playbin->playsink));
+      break;
+    case PROP_FONT_DESC:
+      g_value_take_string (value,
+          gst_play_sink_get_font_desc (playbin->playsink));
+      break;
+    case PROP_CONNECTION_SPEED:
+      GST_PLAY_BIN_LOCK (playbin);
+      g_value_set_uint (value, playbin->connection_speed / 1000);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_BUFFER_SIZE:
+      GST_OBJECT_LOCK (playbin);
+      g_value_set_int (value, playbin->buffer_size);
+      GST_OBJECT_UNLOCK (playbin);
+      break;
+    case PROP_BUFFER_DURATION:
+      GST_OBJECT_LOCK (playbin);
+      g_value_set_int64 (value, playbin->buffer_duration);
+      GST_OBJECT_UNLOCK (playbin);
+      break;
+    case PROP_AV_OFFSET:
+      g_value_set_int64 (value,
+          gst_play_sink_get_av_offset (playbin->playsink));
+      break;
+    case PROP_RING_BUFFER_MAX_SIZE:
+      g_value_set_uint64 (value, playbin->ring_buffer_max_size);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_play_bin_update_cached_duration_from_query (GstPlayBin * playbin,
+    gboolean valid, GstQuery * query)
+{
+  GstFormat fmt;
+  gint64 duration;
+  gint i;
+
+  GST_DEBUG_OBJECT (playbin, "Updating cached duration from query");
+  gst_query_parse_duration (query, &fmt, &duration);
+
+  for (i = 0; i < G_N_ELEMENTS (playbin->duration); i++) {
+    if (playbin->duration[i].format == 0 || fmt == playbin->duration[i].format) {
+      playbin->duration[i].valid = valid;
+      playbin->duration[i].format = fmt;
+      playbin->duration[i].duration = valid ? duration : -1;
+      break;
+    }
+  }
+}
+
+static void
+gst_play_bin_update_cached_duration (GstPlayBin * playbin)
+{
+  const GstFormat formats[] =
+      { GST_FORMAT_TIME, GST_FORMAT_BYTES, GST_FORMAT_DEFAULT };
+  gboolean ret;
+  GstQuery *query;
+  gint i;
+
+  GST_DEBUG_OBJECT (playbin, "Updating cached durations before group switch");
+  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
+    query = gst_query_new_duration (formats[i]);
+    ret =
+        GST_ELEMENT_CLASS (parent_class)->query (GST_ELEMENT_CAST (playbin),
+        query);
+    gst_play_bin_update_cached_duration_from_query (playbin, ret, query);
+    gst_query_unref (query);
+  }
+}
+
+static gboolean
+gst_play_bin_query (GstElement * element, GstQuery * query)
+{
+  GstPlayBin *playbin = GST_PLAY_BIN (element);
+  gboolean ret;
+
+  /* During a group switch we shouldn't allow duration queries
+   * because it's not clear if the old or new group's duration
+   * is returned and if the sinks are already playing new data
+   * or old data. See bug #585969
+   *
+   * While we're at it, also don't do any other queries during
+   * a group switch or any other event that causes topology changes
+   * by taking the playbin lock in any case.
+   */
+  GST_PLAY_BIN_LOCK (playbin);
+
+  if (GST_QUERY_TYPE (query) == GST_QUERY_DURATION) {
+    GstSourceGroup *group = playbin->curr_group;
+    gboolean pending;
+
+    GST_SOURCE_GROUP_LOCK (group);
+    if (group->stream_changed_pending_lock) {
+      g_mutex_lock (group->stream_changed_pending_lock);
+      pending = group->pending || group->stream_changed_pending;
+      g_mutex_unlock (group->stream_changed_pending_lock);
+    } else {
+      pending = group->pending;
+    }
+    if (pending) {
+      GstFormat fmt;
+      gint i;
+
+      ret = FALSE;
+      gst_query_parse_duration (query, &fmt, NULL);
+      for (i = 0; i < G_N_ELEMENTS (playbin->duration); i++) {
+        if (fmt == playbin->duration[i].format) {
+          ret = playbin->duration[i].valid;
+          gst_query_set_duration (query, fmt,
+              (ret ? playbin->duration[i].duration : -1));
+          break;
+        }
+      }
+      /* if nothing cached yet, we might as well request duration,
+       * such as during initial startup */
+      if (ret) {
+        GST_DEBUG_OBJECT (playbin,
+            "Taking cached duration because of pending group switch: %d", ret);
+        GST_SOURCE_GROUP_UNLOCK (group);
+        GST_PLAY_BIN_UNLOCK (playbin);
+        return ret;
+      }
+    }
+    GST_SOURCE_GROUP_UNLOCK (group);
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->query (element, query);
+
+  if (GST_QUERY_TYPE (query) == GST_QUERY_DURATION)
+    gst_play_bin_update_cached_duration_from_query (playbin, ret, query);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return ret;
+}
+
+/* mime types we are not handling on purpose right now, don't post a
+ * missing-plugin message for these */
+static const gchar *blacklisted_mimes[] = {
+  NULL
+};
+
+static void
+gst_play_bin_handle_message (GstBin * bin, GstMessage * msg)
+{
+  GstPlayBin *playbin = GST_PLAY_BIN (bin);
+  GstSourceGroup *group;
+
+  if (gst_is_missing_plugin_message (msg)) {
+    gchar *detail;
+    guint i;
+
+    detail = gst_missing_plugin_message_get_installer_detail (msg);
+    for (i = 0; detail != NULL && blacklisted_mimes[i] != NULL; ++i) {
+      if (strstr (detail, "|decoder-") && strstr (detail, blacklisted_mimes[i])) {
+        GST_LOG_OBJECT (bin, "suppressing message %" GST_PTR_FORMAT, msg);
+        gst_message_unref (msg);
+        g_free (detail);
+        return;
+      }
+    }
+    g_free (detail);
+  } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ELEMENT) {
+    const GstStructure *s = gst_message_get_structure (msg);
+
+    /* Drop all stream-changed messages except the last one */
+    if (strcmp ("playbin-stream-changed", gst_structure_get_name (s)) == 0) {
+      guint32 seqnum = gst_message_get_seqnum (msg);
+      GList *l, *l_prev;
+
+      group = playbin->curr_group;
+      g_mutex_lock (group->stream_changed_pending_lock);
+      for (l = group->stream_changed_pending; l;) {
+        guint32 l_seqnum = GPOINTER_TO_UINT (l->data);
+
+        if (l_seqnum == seqnum) {
+          l_prev = l;
+          l = l->next;
+          group->stream_changed_pending =
+              g_list_delete_link (group->stream_changed_pending, l_prev);
+          if (group->stream_changed_pending) {
+            gst_message_unref (msg);
+            msg = NULL;
+            break;
+          }
+        } else {
+          l = l->next;
+        }
+      }
+      g_mutex_unlock (group->stream_changed_pending_lock);
+    }
+  } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ASYNC_START ||
+      GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ASYNC_DONE) {
+    GstObject *src = GST_OBJECT_CAST (msg->src);
+
+    /* Ignore async state changes from the uridecodebin children,
+     * see bug #602000. */
+    group = playbin->curr_group;
+    if (src && (group = playbin->curr_group) &&
+        ((group->uridecodebin && src == GST_OBJECT_CAST (group->uridecodebin))
+            || (group->suburidecodebin
+                && src == GST_OBJECT_CAST (group->suburidecodebin)))) {
+      GST_DEBUG_OBJECT (playbin,
+          "Ignoring async state change of uridecodebin: %s",
+          GST_OBJECT_NAME (src));
+      gst_message_unref (msg);
+      msg = NULL;
+    }
+  } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
+    /* If we get an error of the subtitle uridecodebin transform
+     * them into warnings and disable the subtitles */
+    group = playbin->curr_group;
+    if (group && group->suburidecodebin) {
+      if (G_UNLIKELY (gst_object_has_ancestor (msg->src, GST_OBJECT_CAST
+                  (group->suburidecodebin)))) {
+        GError *err;
+        gchar *debug = NULL;
+        GstMessage *new_msg;
+        GstIterator *it;
+        gboolean done = FALSE;
+        GValue item = { 0, };
+
+        gst_message_parse_error (msg, &err, &debug);
+        new_msg = gst_message_new_warning (msg->src, err, debug);
+
+        gst_message_unref (msg);
+        g_error_free (err);
+        g_free (debug);
+        msg = new_msg;
+
+        REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id);
+        REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
+        REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id);
+        REMOVE_SIGNAL (group->suburidecodebin, group->sub_autoplug_continue_id);
+
+        it = gst_element_iterate_src_pads (group->suburidecodebin);
+        while (it && !done) {
+          GstPad *p = NULL;
+          GstIteratorResult res;
+
+          res = gst_iterator_next (it, &item);
+
+          switch (res) {
+            case GST_ITERATOR_DONE:
+              done = TRUE;
+              break;
+            case GST_ITERATOR_OK:
+              p = g_value_get_object (&item);
+              pad_removed_cb (NULL, p, group);
+              g_value_reset (&item);
+              break;
+
+            case GST_ITERATOR_RESYNC:
+              gst_iterator_resync (it);
+              break;
+            case GST_ITERATOR_ERROR:
+              done = TRUE;
+              break;
+          }
+        }
+        g_value_unset (&item);
+        if (it)
+          gst_iterator_free (it);
+
+        gst_object_ref (group->suburidecodebin);
+        gst_bin_remove (bin, group->suburidecodebin);
+        gst_element_set_locked_state (group->suburidecodebin, FALSE);
+
+        if (group->sub_pending) {
+          group->sub_pending = FALSE;
+          no_more_pads_cb (NULL, group);
+        }
+      }
+    }
+  }
+
+  if (msg)
+    GST_BIN_CLASS (parent_class)->handle_message (bin, msg);
+}
+
+static void
+selector_active_pad_changed (GObject * selector, GParamSpec * pspec,
+    GstPlayBin * playbin)
+{
+  const gchar *property;
+  GstSourceGroup *group;
+  GstSourceSelect *select = NULL;
+  int i;
+
+  GST_PLAY_BIN_LOCK (playbin);
+  group = get_group (playbin);
+
+  for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+    if (selector == G_OBJECT (group->selector[i].selector)) {
+      select = &group->selector[i];
+    }
+  }
+
+  /* We got a pad-change after our group got switched out; no need to notify */
+  if (!select) {
+    GST_PLAY_BIN_UNLOCK (playbin);
+    return;
+  }
+
+  switch (select->type) {
+    case GST_PLAY_SINK_TYPE_VIDEO:
+    case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+      property = "current-video";
+      playbin->current_video = get_current_stream_number (playbin,
+          group->video_channels);
+      break;
+    case GST_PLAY_SINK_TYPE_AUDIO:
+    case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+      property = "current-audio";
+      playbin->current_audio = get_current_stream_number (playbin,
+          group->audio_channels);
+      break;
+    case GST_PLAY_SINK_TYPE_TEXT:
+      property = "current-text";
+      playbin->current_text = get_current_stream_number (playbin,
+          group->text_channels);
+      break;
+    default:
+      property = NULL;
+  }
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  if (property)
+    g_object_notify (G_OBJECT (playbin), property);
+}
+
+/* this callback sends a delayed event once the pad becomes unblocked */
+static GstProbeReturn
+stream_changed_data_probe (GstPad * pad, GstProbeType type,
+    GstMiniObject * object, gpointer data)
+{
+  GstSourceSelect *select = (GstSourceSelect *) data;
+  GstEvent *e;
+
+  /* we need do this just once, so cleanup first */
+  gst_pad_remove_probe (pad, select->sinkpad_data_probe);
+  select->sinkpad_data_probe = 0;
+  e = select->sinkpad_delayed_event;
+  select->sinkpad_delayed_event = NULL;
+
+  /* really, this should not happen */
+  if (!e) {
+    GST_WARNING ("Data probed called, but no delayed event");
+    return GST_PROBE_OK;
+  }
+
+  if (GST_IS_EVENT (object)
+      && GST_EVENT_TYPE (GST_EVENT_CAST (object)) == GST_EVENT_SEGMENT) {
+    /* push the event first, then send the delayed one */
+    gst_event_ref (GST_EVENT_CAST (object));
+    gst_pad_send_event (pad, GST_EVENT_CAST (object));
+    gst_pad_send_event (pad, e);
+    return GST_PROBE_DROP;
+  } else {
+    /* send delayed event, then allow the caller to go on */
+    gst_pad_send_event (pad, e);
+    return GST_PROBE_OK;
+  }
+}
+
+/* helper function to lookup stuff in lists */
+static gboolean
+array_has_value (const gchar * values[], const gchar * value)
+{
+  gint i;
+
+  for (i = 0; values[i]; i++) {
+    if (values[i] && g_str_has_prefix (value, values[i]))
+      return TRUE;
+  }
+  return FALSE;
+}
+
+typedef struct
+{
+  GstPlayBin *playbin;
+  gint stream_id;
+  GstPlaySinkType type;
+} NotifyTagsData;
+
+static void
+notify_tags_cb (GObject * object, GParamSpec * pspec, gpointer user_data)
+{
+  NotifyTagsData *ntdata = (NotifyTagsData *) user_data;
+  gint signal;
+
+  GST_DEBUG_OBJECT (ntdata->playbin, "Tags on pad %" GST_PTR_FORMAT
+      " with stream id %d and type %d have changed",
+      object, ntdata->stream_id, ntdata->type);
+
+  switch (ntdata->type) {
+    case GST_PLAY_SINK_TYPE_VIDEO:
+    case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+      signal = SIGNAL_VIDEO_TAGS_CHANGED;
+      break;
+    case GST_PLAY_SINK_TYPE_AUDIO:
+    case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+      signal = SIGNAL_AUDIO_TAGS_CHANGED;
+      break;
+    case GST_PLAY_SINK_TYPE_TEXT:
+      signal = SIGNAL_TEXT_TAGS_CHANGED;
+      break;
+    default:
+      signal = -1;
+      break;
+  }
+
+  if (signal >= 0)
+    g_signal_emit (G_OBJECT (ntdata->playbin), gst_play_bin_signals[signal], 0,
+        ntdata->stream_id);
+}
+
+/* this function is called when a new pad is added to decodebin. We check the
+ * type of the pad and add it to the selector element of the group.
+ */
+static void
+pad_added_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GstCaps *caps;
+  const GstStructure *s;
+  const gchar *name;
+  GstPad *sinkpad;
+  GstPadLinkReturn res;
+  GstSourceSelect *select = NULL;
+  gint i;
+  gboolean changed = FALSE;
+
+  playbin = group->playbin;
+
+  caps = gst_pad_get_caps (pad, NULL);
+  s = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (s);
+
+  GST_DEBUG_OBJECT (playbin,
+      "pad %s:%s with caps %" GST_PTR_FORMAT " added in group %p",
+      GST_DEBUG_PAD_NAME (pad), caps, group);
+
+  /* major type of the pad, this determines the selector to use */
+  for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+    if (array_has_value (group->selector[i].media_list, name)) {
+      select = &group->selector[i];
+      break;
+    } else if (group->selector[i].get_media_caps) {
+      GstCaps *media_caps = group->selector[i].get_media_caps ();
+
+      if (media_caps && gst_caps_can_intersect (media_caps, caps)) {
+        select = &group->selector[i];
+        gst_caps_unref (media_caps);
+        break;
+      }
+      gst_caps_unref (media_caps);
+    }
+  }
+  /* no selector found for the media type, don't bother linking it to a
+   * selector. This will leave the pad unlinked and thus ignored. */
+  if (select == NULL)
+    goto unknown_type;
+
+  GST_SOURCE_GROUP_LOCK (group);
+  if (select->selector == NULL && playbin->have_selector) {
+    /* no selector, create one */
+    GST_DEBUG_OBJECT (playbin, "creating new input selector");
+    select->selector = gst_element_factory_make ("input-selector", NULL);
+    if (select->selector == NULL) {
+      /* post the missing selector message only once */
+      playbin->have_selector = FALSE;
+      gst_element_post_message (GST_ELEMENT_CAST (playbin),
+          gst_missing_element_message_new (GST_ELEMENT_CAST (playbin),
+              "input-selector"));
+      GST_ELEMENT_WARNING (playbin, CORE, MISSING_PLUGIN,
+          (_("Missing element '%s' - check your GStreamer installation."),
+              "input-selector"), (NULL));
+    } else {
+      g_object_set (select->selector, "sync-streams", TRUE, NULL);
+
+      g_signal_connect (select->selector, "notify::active-pad",
+          G_CALLBACK (selector_active_pad_changed), playbin);
+
+      GST_DEBUG_OBJECT (playbin, "adding new selector %p", select->selector);
+      gst_bin_add (GST_BIN_CAST (playbin), select->selector);
+      gst_element_set_state (select->selector, GST_STATE_PAUSED);
+    }
+  }
+
+  if (select->srcpad == NULL) {
+    if (select->selector) {
+      /* save source pad of the selector */
+      select->srcpad = gst_element_get_static_pad (select->selector, "src");
+    } else {
+      /* no selector, use the pad as the source pad then */
+      select->srcpad = gst_object_ref (pad);
+    }
+
+    /* block the selector srcpad. It's possible that multiple decodebins start
+     * pushing data into the selectors before we have a chance to collect all
+     * streams and connect the sinks, resulting in not-linked errors. After we
+     * configured the sinks we will unblock them all. */
+    GST_DEBUG_OBJECT (playbin, "blocking %" GST_PTR_FORMAT, select->srcpad);
+    select->block_id =
+        gst_pad_add_probe (select->srcpad, GST_PROBE_TYPE_BLOCK, NULL, NULL,
+        NULL);
+  }
+
+  /* get sinkpad for the new stream */
+  if (select->selector) {
+    if ((sinkpad = gst_element_get_request_pad (select->selector, "sink%d"))) {
+      gulong notify_tags_handler = 0;
+      NotifyTagsData *ntdata;
+
+      GST_DEBUG_OBJECT (playbin, "got pad %s:%s from selector",
+          GST_DEBUG_PAD_NAME (sinkpad));
+
+      /* store the selector for the pad */
+      g_object_set_data (G_OBJECT (sinkpad), "playbin.select", select);
+
+      /* connect to the notify::tags signal for our
+       * own *-tags-changed signals
+       */
+      ntdata = g_new0 (NotifyTagsData, 1);
+      ntdata->playbin = playbin;
+      ntdata->stream_id = select->channels->len;
+      ntdata->type = select->type;
+
+      notify_tags_handler =
+          g_signal_connect_data (G_OBJECT (sinkpad), "notify::tags",
+          G_CALLBACK (notify_tags_cb), ntdata, (GClosureNotify) g_free,
+          (GConnectFlags) 0);
+      g_object_set_data (G_OBJECT (sinkpad), "playbin.notify_tags_handler",
+          (gpointer) (guintptr) notify_tags_handler);
+
+      /* store the pad in the array */
+      GST_DEBUG_OBJECT (playbin, "pad %p added to array", sinkpad);
+      g_ptr_array_add (select->channels, sinkpad);
+
+      res = gst_pad_link (pad, sinkpad);
+      if (GST_PAD_LINK_FAILED (res))
+        goto link_failed;
+
+      /* store selector pad so we can release it */
+      g_object_set_data (G_OBJECT (pad), "playbin.sinkpad", sinkpad);
+
+      changed = TRUE;
+      GST_DEBUG_OBJECT (playbin, "linked pad %s:%s to selector %p",
+          GST_DEBUG_PAD_NAME (pad), select->selector);
+    }
+  } else {
+    /* no selector, don't configure anything, we'll link the new pad directly to
+     * the sink. */
+    changed = FALSE;
+    sinkpad = NULL;
+  }
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  if (changed) {
+    int signal;
+    gboolean always_ok = (decodebin == group->suburidecodebin);
+
+    switch (select->type) {
+      case GST_PLAY_SINK_TYPE_VIDEO:
+      case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+        /* we want to return NOT_LINKED for unselected pads but only for pads
+         * from the normal uridecodebin. This makes sure that subtitle streams
+         * are not raced past audio/video from decodebin's multiqueue.
+         * For pads from suburidecodebin OK should always be returned, otherwise
+         * it will most likely stop. */
+        g_object_set (sinkpad, "always-ok", always_ok, NULL);
+        signal = SIGNAL_VIDEO_CHANGED;
+        break;
+      case GST_PLAY_SINK_TYPE_AUDIO:
+      case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+        g_object_set (sinkpad, "always-ok", always_ok, NULL);
+        signal = SIGNAL_AUDIO_CHANGED;
+        break;
+      case GST_PLAY_SINK_TYPE_TEXT:
+        g_object_set (sinkpad, "always-ok", always_ok, NULL);
+        signal = SIGNAL_TEXT_CHANGED;
+        break;
+      default:
+        signal = -1;
+    }
+
+    if (signal >= 0)
+      g_signal_emit (G_OBJECT (playbin), gst_play_bin_signals[signal], 0, NULL);
+  }
+
+done:
+  gst_caps_unref (caps);
+  return;
+
+  /* ERRORS */
+unknown_type:
+  {
+    GST_ERROR_OBJECT (playbin, "unknown type %s for pad %s:%s",
+        name, GST_DEBUG_PAD_NAME (pad));
+    goto done;
+  }
+link_failed:
+  {
+    GST_ERROR_OBJECT (playbin,
+        "failed to link pad %s:%s to selector, reason %d",
+        GST_DEBUG_PAD_NAME (pad), res);
+    GST_SOURCE_GROUP_UNLOCK (group);
+    goto done;
+  }
+}
+
+/* called when a pad is removed from the uridecodebin. We unlink the pad from
+ * the selector. This will make the selector select a new pad. */
+static void
+pad_removed_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GstPad *peer;
+  GstElement *selector;
+  GstSourceSelect *select;
+
+  playbin = group->playbin;
+
+  GST_DEBUG_OBJECT (playbin,
+      "pad %s:%s removed from group %p", GST_DEBUG_PAD_NAME (pad), group);
+
+  GST_SOURCE_GROUP_LOCK (group);
+  /* get the selector sinkpad */
+  if (!(peer = g_object_get_data (G_OBJECT (pad), "playbin.sinkpad")))
+    goto not_linked;
+
+  if ((select = g_object_get_data (G_OBJECT (peer), "playbin.select"))) {
+    gulong notify_tags_handler;
+
+    notify_tags_handler =
+        (guintptr) g_object_get_data (G_OBJECT (peer),
+        "playbin.notify_tags_handler");
+    if (notify_tags_handler != 0)
+      g_signal_handler_disconnect (G_OBJECT (peer), notify_tags_handler);
+    g_object_set_data (G_OBJECT (peer), "playbin.notify_tags_handler", NULL);
+
+    /* remove the pad from the array */
+    g_ptr_array_remove (select->channels, peer);
+    GST_DEBUG_OBJECT (playbin, "pad %p removed from array", peer);
+  }
+
+  /* unlink the pad now (can fail, the pad is unlinked before it's removed) */
+  gst_pad_unlink (pad, peer);
+
+  /* get selector, this can be NULL when the element is removing the pads
+   * because it's being disposed. */
+  selector = GST_ELEMENT_CAST (gst_pad_get_parent (peer));
+  if (!selector) {
+    gst_object_unref (peer);
+    goto no_selector;
+  }
+
+  /* release the pad to the selector, this will make the selector choose a new
+   * pad. */
+  gst_element_release_request_pad (selector, peer);
+  gst_object_unref (peer);
+
+  gst_object_unref (selector);
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  return;
+
+  /* ERRORS */
+not_linked:
+  {
+    GST_DEBUG_OBJECT (playbin, "pad not linked");
+    GST_SOURCE_GROUP_UNLOCK (group);
+    return;
+  }
+no_selector:
+  {
+    GST_DEBUG_OBJECT (playbin, "selector not found");
+    GST_SOURCE_GROUP_UNLOCK (group);
+    return;
+  }
+}
+
+/* we get called when all pads are available and we must connect the sinks to
+ * them.
+ * The main purpose of the code is to see if we have video/audio and subtitles
+ * and pick the right pipelines to display them.
+ *
+ * The selectors installed on the group tell us about the presence of
+ * audio/video and subtitle streams. This allows us to see if we need
+ * visualisation, video or/and audio.
+ */
+static void
+no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GstPadLinkReturn res;
+  gint i;
+  gboolean configure;
+
+  playbin = group->playbin;
+
+  GST_DEBUG_OBJECT (playbin, "no more pads in group %p", group);
+
+  GST_PLAY_BIN_SHUTDOWN_LOCK (playbin, shutdown);
+
+  GST_SOURCE_GROUP_LOCK (group);
+  for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+    GstSourceSelect *select = &group->selector[i];
+
+    /* check if the specific media type was detected and thus has a selector
+     * created for it. If there is the media type, get a sinkpad from the sink
+     * and link it. We only do this if we have not yet requested the sinkpad
+     * before. */
+    if (select->srcpad && select->sinkpad == NULL) {
+      GST_DEBUG_OBJECT (playbin, "requesting new sink pad %d", select->type);
+      select->sinkpad =
+          gst_play_sink_request_pad (playbin->playsink, select->type);
+
+      res = gst_pad_link (select->srcpad, select->sinkpad);
+      GST_DEBUG_OBJECT (playbin, "linked type %s, result: %d",
+          select->media_list[0], res);
+      if (res != GST_PAD_LINK_OK) {
+        GST_ELEMENT_ERROR (playbin, CORE, PAD,
+            ("Internal playbin error."),
+            ("Failed to link selector to sink. Error %d", res));
+      }
+    }
+  }
+  GST_DEBUG_OBJECT (playbin, "pending %d > %d", group->pending,
+      group->pending - 1);
+
+  if (group->pending > 0)
+    group->pending--;
+
+  if (group->suburidecodebin == decodebin)
+    group->sub_pending = FALSE;
+
+  if (group->pending == 0) {
+    /* we are the last group to complete, we will configure the output and then
+     * signal the other waiters. */
+    GST_LOG_OBJECT (playbin, "last group complete");
+    configure = TRUE;
+  } else {
+    GST_LOG_OBJECT (playbin, "have more pending groups");
+    configure = FALSE;
+  }
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  if (configure) {
+    /* if we have custom sinks, configure them now */
+    GST_SOURCE_GROUP_LOCK (group);
+
+    if (group->audio_sink) {
+      GST_INFO_OBJECT (playbin, "setting custom audio sink %" GST_PTR_FORMAT,
+          group->audio_sink);
+      gst_play_sink_set_sink (playbin->playsink, GST_PLAY_SINK_TYPE_AUDIO,
+          group->audio_sink);
+    }
+
+    if (group->video_sink) {
+      GST_INFO_OBJECT (playbin, "setting custom video sink %" GST_PTR_FORMAT,
+          group->video_sink);
+      gst_play_sink_set_sink (playbin->playsink, GST_PLAY_SINK_TYPE_VIDEO,
+          group->video_sink);
+    }
+
+    if (playbin->text_sink) {
+      GST_INFO_OBJECT (playbin, "setting custom text sink %" GST_PTR_FORMAT,
+          playbin->text_sink);
+      gst_play_sink_set_sink (playbin->playsink, GST_PLAY_SINK_TYPE_TEXT,
+          playbin->text_sink);
+    }
+
+    GST_SOURCE_GROUP_UNLOCK (group);
+
+    /* signal the other decodebins that they can continue now. */
+    GST_SOURCE_GROUP_LOCK (group);
+    /* unblock all selectors */
+    for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+      GstSourceSelect *select = &group->selector[i];
+
+      /* All streamsynchronizer streams should see stream-changed message,
+       * to arrange for blocking unblocking. */
+      if (select->sinkpad) {
+        GstStructure *s;
+        GstMessage *msg;
+        GstEvent *event;
+        guint32 seqnum;
+
+        s = gst_structure_new ("playbin-stream-changed", "uri", G_TYPE_STRING,
+            group->uri, NULL);
+        if (group->suburi)
+          gst_structure_set (s, "suburi", G_TYPE_STRING, group->suburi, NULL);
+        msg = gst_message_new_element (GST_OBJECT_CAST (playbin), s);
+        seqnum = gst_message_get_seqnum (msg);
+        event = gst_event_new_sink_message (msg);
+        g_mutex_lock (group->stream_changed_pending_lock);
+        group->stream_changed_pending =
+            g_list_prepend (group->stream_changed_pending,
+            GUINT_TO_POINTER (seqnum));
+
+        /* remove any data probe we might have, and replace */
+        if (select->sinkpad_delayed_event)
+          gst_event_unref (select->sinkpad_delayed_event);
+        select->sinkpad_delayed_event = event;
+        if (select->sinkpad_data_probe)
+          gst_pad_remove_probe (select->sinkpad, select->sinkpad_data_probe);
+
+        /* we go to the trouble of setting a probe on the pad to send
+           the playbin-stream-changed event as sending it here might
+           find that the pad is blocked, so we'd block here, and the
+           pad might not be linked yet. Additionally, sending it here
+           apparently would be on the wrong thread */
+        select->sinkpad_data_probe =
+            gst_pad_add_probe (select->sinkpad, GST_PROBE_TYPE_DATA,
+            (GstPadProbeCallback) stream_changed_data_probe, (gpointer) select,
+            NULL);
+
+        g_mutex_unlock (group->stream_changed_pending_lock);
+        gst_message_unref (msg);
+      }
+
+      if (select->srcpad) {
+        GST_DEBUG_OBJECT (playbin, "unblocking %" GST_PTR_FORMAT,
+            select->srcpad);
+        if (select->block_id) {
+          gst_pad_remove_probe (select->srcpad, select->block_id);
+          select->block_id = 0;
+        }
+      }
+    }
+    GST_SOURCE_GROUP_UNLOCK (group);
+  }
+
+  GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin);
+
+  return;
+
+shutdown:
+  {
+    GST_DEBUG ("ignoring, we are shutting down");
+    /* Request a flushing pad from playsink that we then link to the selector.
+     * Then we unblock the selectors so that they stop with a WRONG_STATE
+     * instead of a NOT_LINKED error.
+     */
+    GST_SOURCE_GROUP_LOCK (group);
+    for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+      GstSourceSelect *select = &group->selector[i];
+
+      if (select->srcpad) {
+        if (select->sinkpad == NULL) {
+          GST_DEBUG_OBJECT (playbin, "requesting new flushing sink pad");
+          select->sinkpad =
+              gst_play_sink_request_pad (playbin->playsink,
+              GST_PLAY_SINK_TYPE_FLUSHING);
+          res = gst_pad_link (select->srcpad, select->sinkpad);
+          GST_DEBUG_OBJECT (playbin, "linked flushing, result: %d", res);
+        }
+        GST_DEBUG_OBJECT (playbin, "unblocking %" GST_PTR_FORMAT,
+            select->srcpad);
+        if (select->block_id) {
+          gst_pad_remove_probe (select->srcpad, select->block_id);
+          select->block_id = 0;
+        }
+      }
+    }
+    GST_SOURCE_GROUP_UNLOCK (group);
+    return;
+  }
+}
+
+static void
+drained_cb (GstElement * decodebin, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+
+  playbin = group->playbin;
+
+  GST_DEBUG_OBJECT (playbin, "about to finish in group %p", group);
+
+  /* after this call, we should have a next group to activate or we EOS */
+  g_signal_emit (G_OBJECT (playbin),
+      gst_play_bin_signals[SIGNAL_ABOUT_TO_FINISH], 0, NULL);
+
+  /* now activate the next group. If the app did not set a uri, this will
+   * fail and we can do EOS */
+  setup_next_source (playbin, GST_STATE_PAUSED);
+}
+
+/* Like gst_element_factory_can_sink_any_caps() but doesn't
+ * allow ANY caps on the sinkpad template */
+static gboolean
+_factory_can_sink_caps (GstElementFactory * factory, GstCaps * caps)
+{
+  const GList *templs;
+
+  templs = gst_element_factory_get_static_pad_templates (factory);
+
+  while (templs) {
+    GstStaticPadTemplate *templ = (GstStaticPadTemplate *) templs->data;
+
+    if (templ->direction == GST_PAD_SINK) {
+      GstCaps *templcaps = gst_static_caps_get (&templ->static_caps);
+
+      if (!gst_caps_is_any (templcaps)
+          && gst_caps_can_intersect (templcaps, caps)) {
+        gst_caps_unref (templcaps);
+        return TRUE;
+      }
+      gst_caps_unref (templcaps);
+    }
+    templs = g_list_next (templs);
+  }
+
+  return FALSE;
+}
+
+/* Called when we must provide a list of factories to plug to @pad with @caps.
+ * We first check if we have a sink that can handle the format and if we do, we
+ * return NULL, to expose the pad. If we have no sink (or the sink does not
+ * work), we return the list of elements that can connect. */
+static GValueArray *
+autoplug_factories_cb (GstElement * decodebin, GstPad * pad,
+    GstCaps * caps, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GList *mylist, *tmp;
+  GValueArray *result;
+
+  playbin = group->playbin;
+
+  GST_DEBUG_OBJECT (playbin, "factories group %p for %s:%s, %" GST_PTR_FORMAT,
+      group, GST_DEBUG_PAD_NAME (pad), caps);
+
+  /* filter out the elements based on the caps. */
+  g_mutex_lock (playbin->elements_lock);
+  gst_play_bin_update_elements_list (playbin);
+  mylist =
+      gst_element_factory_list_filter (playbin->elements, caps, GST_PAD_SINK,
+      FALSE);
+  g_mutex_unlock (playbin->elements_lock);
+
+  GST_DEBUG_OBJECT (playbin, "found factories %p", mylist);
+  GST_PLUGIN_FEATURE_LIST_DEBUG (mylist);
+
+  /* 2 additional elements for the already set audio/video sinks */
+  result = g_value_array_new (g_list_length (mylist) + 2);
+
+  /* Check if we already have an audio/video sink and if this is the case
+   * put it as the first element of the array */
+  if (group->audio_sink) {
+    GstElementFactory *factory = gst_element_get_factory (group->audio_sink);
+
+    if (factory && _factory_can_sink_caps (factory, caps)) {
+      GValue val = { 0, };
+
+      g_value_init (&val, G_TYPE_OBJECT);
+      g_value_set_object (&val, factory);
+      result = g_value_array_append (result, &val);
+      g_value_unset (&val);
+    }
+  }
+
+  if (group->video_sink) {
+    GstElementFactory *factory = gst_element_get_factory (group->video_sink);
+
+    if (factory && _factory_can_sink_caps (factory, caps)) {
+      GValue val = { 0, };
+
+      g_value_init (&val, G_TYPE_OBJECT);
+      g_value_set_object (&val, factory);
+      result = g_value_array_append (result, &val);
+      g_value_unset (&val);
+    }
+  }
+
+  for (tmp = mylist; tmp; tmp = tmp->next) {
+    GstElementFactory *factory = GST_ELEMENT_FACTORY_CAST (tmp->data);
+    GValue val = { 0, };
+
+    if (group->audio_sink && gst_element_factory_list_is_type (factory,
+            GST_ELEMENT_FACTORY_TYPE_SINK |
+            GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO)) {
+      continue;
+    }
+    if (group->video_sink && gst_element_factory_list_is_type (factory,
+            GST_ELEMENT_FACTORY_TYPE_SINK | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO
+            | GST_ELEMENT_FACTORY_TYPE_MEDIA_IMAGE)) {
+      continue;
+    }
+
+    g_value_init (&val, G_TYPE_OBJECT);
+    g_value_set_object (&val, factory);
+    g_value_array_append (result, &val);
+    g_value_unset (&val);
+  }
+  gst_plugin_feature_list_free (mylist);
+
+  return result;
+}
+
+/* autoplug-continue decides, if a pad has raw caps that can be exposed
+ * directly or if further decoding is necessary. We use this to expose
+ * supported subtitles directly */
+
+/* FIXME 0.11: Remove the checks for ANY caps, a sink should specify
+ * explicitely the caps it supports and if it claims to support ANY
+ * caps it really should support everything */
+static gboolean
+autoplug_continue_cb (GstElement * element, GstPad * pad, GstCaps * caps,
+    GstSourceGroup * group)
+{
+  gboolean ret = TRUE;
+  GstElement *sink;
+  GstPad *sinkpad = NULL;
+
+  GST_PLAY_BIN_LOCK (group->playbin);
+  GST_SOURCE_GROUP_LOCK (group);
+
+  if ((sink = group->playbin->text_sink))
+    sinkpad = gst_element_get_static_pad (sink, "sink");
+  if (sinkpad) {
+    GstCaps *sinkcaps;
+
+    /* Ignore errors here, if a custom sink fails to go
+     * to READY things are wrong and will error out later
+     */
+    if (GST_STATE (sink) < GST_STATE_READY)
+      gst_element_set_state (sink, GST_STATE_READY);
+
+    sinkcaps = gst_pad_get_caps (sinkpad, NULL);
+    if (!gst_caps_is_any (sinkcaps))
+      ret = !gst_pad_accept_caps (sinkpad, caps);
+    gst_caps_unref (sinkcaps);
+    gst_object_unref (sinkpad);
+  } else {
+    GstCaps *subcaps = gst_subtitle_overlay_create_factory_caps ();
+    ret = !gst_caps_is_subset (caps, subcaps);
+    gst_caps_unref (subcaps);
+  }
+  /* If autoplugging can stop don't do additional checks */
+  if (!ret)
+    goto done;
+
+  /* If this is from the subtitle uridecodebin we don't need to
+   * check the audio and video sink */
+  if (group->suburidecodebin
+      && gst_object_has_ancestor (GST_OBJECT_CAST (element),
+          GST_OBJECT_CAST (group->suburidecodebin)))
+    goto done;
+
+  if ((sink = group->audio_sink)) {
+    sinkpad = gst_element_get_static_pad (sink, "sink");
+    if (sinkpad) {
+      GstCaps *sinkcaps;
+
+      /* Ignore errors here, if a custom sink fails to go
+       * to READY things are wrong and will error out later
+       */
+      if (GST_STATE (sink) < GST_STATE_READY)
+        gst_element_set_state (sink, GST_STATE_READY);
+
+      sinkcaps = gst_pad_get_caps (sinkpad, NULL);
+      if (!gst_caps_is_any (sinkcaps))
+        ret = !gst_pad_accept_caps (sinkpad, caps);
+      gst_caps_unref (sinkcaps);
+      gst_object_unref (sinkpad);
+    }
+  }
+  if (!ret)
+    goto done;
+
+  if ((sink = group->video_sink)) {
+    sinkpad = gst_element_get_static_pad (sink, "sink");
+    if (sinkpad) {
+      GstCaps *sinkcaps;
+
+      /* Ignore errors here, if a custom sink fails to go
+       * to READY things are wrong and will error out later
+       */
+      if (GST_STATE (sink) < GST_STATE_READY)
+        gst_element_set_state (sink, GST_STATE_READY);
+
+      sinkcaps = gst_pad_get_caps (sinkpad, NULL);
+      if (!gst_caps_is_any (sinkcaps))
+        ret = !gst_pad_accept_caps (sinkpad, caps);
+      gst_caps_unref (sinkcaps);
+      gst_object_unref (sinkpad);
+    }
+  }
+
+done:
+  GST_SOURCE_GROUP_UNLOCK (group);
+  GST_PLAY_BIN_UNLOCK (group->playbin);
+
+  GST_DEBUG_OBJECT (group->playbin,
+      "continue autoplugging group %p for %s:%s, %" GST_PTR_FORMAT ": %d",
+      group, GST_DEBUG_PAD_NAME (pad), caps, ret);
+
+  return ret;
+}
+
+static gboolean
+sink_accepts_caps (GstElement * sink, GstCaps * caps)
+{
+  GstPad *sinkpad;
+
+  /* ... activate it ... We do this before adding it to the bin so that we
+   * don't accidentally make it post error messages that will stop
+   * everything. */
+  if (GST_STATE (sink) < GST_STATE_READY &&
+      gst_element_set_state (sink,
+          GST_STATE_READY) == GST_STATE_CHANGE_FAILURE) {
+    return FALSE;
+  }
+
+  if ((sinkpad = gst_element_get_static_pad (sink, "sink"))) {
+    /* Got the sink pad, now let's see if the element actually does accept the
+     * caps that we have */
+    if (!gst_pad_accept_caps (sinkpad, caps)) {
+      gst_object_unref (sinkpad);
+      return FALSE;
+    }
+    gst_object_unref (sinkpad);
+  }
+
+  return TRUE;
+}
+
+/* We are asked to select an element. See if the next element to check
+ * is a sink. If this is the case, we see if the sink works by setting it to
+ * READY. If the sink works, we return SELECT_EXPOSE to make decodebin
+ * expose the raw pad so that we can setup the mixers. */
+static GstAutoplugSelectResult
+autoplug_select_cb (GstElement * decodebin, GstPad * pad,
+    GstCaps * caps, GstElementFactory * factory, GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GstElement *element;
+  const gchar *klass;
+  GstPlaySinkType type;
+  GstElement **sinkp;
+
+  playbin = group->playbin;
+
+  GST_DEBUG_OBJECT (playbin, "select group %p for %s:%s, %" GST_PTR_FORMAT,
+      group, GST_DEBUG_PAD_NAME (pad), caps);
+
+  GST_DEBUG_OBJECT (playbin, "checking factory %s", GST_OBJECT_NAME (factory));
+
+  /* if it's not a sink, we just make decodebin try it */
+  if (!gst_element_factory_list_is_type (factory,
+          GST_ELEMENT_FACTORY_TYPE_SINK))
+    return GST_AUTOPLUG_SELECT_TRY;
+
+  /* it's a sink, see if an instance of it actually works */
+  GST_DEBUG_OBJECT (playbin, "we found a sink");
+
+  klass = gst_element_factory_get_klass (factory);
+
+  /* figure out the klass */
+  if (strstr (klass, "Audio")) {
+    GST_DEBUG_OBJECT (playbin, "we found an audio sink");
+    type = GST_PLAY_SINK_TYPE_AUDIO;
+    sinkp = &group->audio_sink;
+  } else if (strstr (klass, "Video")) {
+    GST_DEBUG_OBJECT (playbin, "we found a video sink");
+    type = GST_PLAY_SINK_TYPE_VIDEO;
+    sinkp = &group->video_sink;
+  } else {
+    /* unknown klass, skip this element */
+    GST_WARNING_OBJECT (playbin, "unknown sink klass %s found", klass);
+    return GST_AUTOPLUG_SELECT_SKIP;
+  }
+
+  /* if we are asked to do visualisations and it's an audio sink, skip the
+   * element. We can only do visualisations with raw sinks */
+  if (gst_play_sink_get_flags (playbin->playsink) & GST_PLAY_FLAG_VIS) {
+    if (type == GST_PLAY_SINK_TYPE_AUDIO) {
+      GST_DEBUG_OBJECT (playbin, "skip audio sink because of vis");
+      return GST_AUTOPLUG_SELECT_SKIP;
+    }
+  }
+
+  /* now see if we already have a sink element */
+  GST_SOURCE_GROUP_LOCK (group);
+  if (*sinkp) {
+    GstElement *sink = gst_object_ref (*sinkp);
+
+    if (sink_accepts_caps (sink, caps)) {
+      GST_DEBUG_OBJECT (playbin,
+          "Existing sink '%s' accepts caps: %" GST_PTR_FORMAT,
+          GST_ELEMENT_NAME (sink), caps);
+      gst_object_unref (sink);
+      GST_SOURCE_GROUP_UNLOCK (group);
+      return GST_AUTOPLUG_SELECT_EXPOSE;
+    } else {
+      GST_DEBUG_OBJECT (playbin,
+          "Existing sink '%s' does not accept caps: %" GST_PTR_FORMAT,
+          GST_ELEMENT_NAME (sink), caps);
+      gst_object_unref (sink);
+      GST_SOURCE_GROUP_UNLOCK (group);
+      return GST_AUTOPLUG_SELECT_SKIP;
+    }
+  }
+  GST_DEBUG_OBJECT (playbin, "we have no pending sink, try to create one");
+
+  if ((element = gst_element_factory_create (factory, NULL)) == NULL) {
+    GST_WARNING_OBJECT (playbin, "Could not create an element from %s",
+        gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
+    GST_SOURCE_GROUP_UNLOCK (group);
+    return GST_AUTOPLUG_SELECT_SKIP;
+  }
+
+  /* Check if the selected sink actually supports the
+   * caps and can be set to READY*/
+  if (!sink_accepts_caps (element, caps)) {
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (element);
+    GST_SOURCE_GROUP_UNLOCK (group);
+    return GST_AUTOPLUG_SELECT_SKIP;
+  }
+
+  /* remember the sink in the group now, the element is floating, we take
+   * ownership now 
+   *
+   * store the sink in the group, we will configure it later when we
+   * reconfigure the sink */
+  GST_DEBUG_OBJECT (playbin, "remember sink");
+  gst_object_ref_sink (element);
+  *sinkp = element;
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  /* tell decodebin to expose the pad because we are going to use this
+   * sink */
+  GST_DEBUG_OBJECT (playbin, "we found a working sink, expose pad");
+
+  return GST_AUTOPLUG_SELECT_EXPOSE;
+}
+
+static void
+notify_source_cb (GstElement * uridecodebin, GParamSpec * pspec,
+    GstSourceGroup * group)
+{
+  GstPlayBin *playbin;
+  GstElement *source;
+
+  playbin = group->playbin;
+
+  g_object_get (group->uridecodebin, "source", &source, NULL);
+
+  GST_OBJECT_LOCK (playbin);
+  if (playbin->source)
+    gst_object_unref (playbin->source);
+  playbin->source = source;
+  GST_OBJECT_UNLOCK (playbin);
+
+  g_object_notify (G_OBJECT (playbin), "source");
+
+  g_signal_emit (playbin, gst_play_bin_signals[SIGNAL_SOURCE_SETUP],
+      0, playbin->source);
+}
+
+/* must be called with the group lock */
+static gboolean
+group_set_locked_state_unlocked (GstPlayBin * playbin, GstSourceGroup * group,
+    gboolean locked)
+{
+  GST_DEBUG_OBJECT (playbin, "locked_state %d on group %p", locked, group);
+
+  if (group->uridecodebin)
+    gst_element_set_locked_state (group->uridecodebin, locked);
+  if (group->suburidecodebin)
+    gst_element_set_locked_state (group->suburidecodebin, locked);
+
+  return TRUE;
+}
+
+/* must be called with PLAY_BIN_LOCK */
+static gboolean
+activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target)
+{
+  GstElement *uridecodebin;
+  GstElement *suburidecodebin = NULL;
+  GstPlayFlags flags;
+
+  g_return_val_if_fail (group->valid, FALSE);
+  g_return_val_if_fail (!group->active, FALSE);
+
+  GST_DEBUG_OBJECT (playbin, "activating group %p", group);
+
+  GST_SOURCE_GROUP_LOCK (group);
+
+  /* First set up the custom sources */
+  if (playbin->audio_sink)
+    group->audio_sink = gst_object_ref (playbin->audio_sink);
+  if (playbin->video_sink)
+    group->video_sink = gst_object_ref (playbin->video_sink);
+
+  g_list_free (group->stream_changed_pending);
+  group->stream_changed_pending = NULL;
+  if (!group->stream_changed_pending_lock)
+    group->stream_changed_pending_lock = g_mutex_new ();
+
+  if (group->uridecodebin) {
+    GST_DEBUG_OBJECT (playbin, "reusing existing uridecodebin");
+    uridecodebin = group->uridecodebin;
+    gst_element_set_state (uridecodebin, GST_STATE_READY);
+    gst_bin_add (GST_BIN_CAST (playbin), gst_object_ref (uridecodebin));
+  } else {
+    GST_DEBUG_OBJECT (playbin, "making new uridecodebin");
+    uridecodebin = gst_element_factory_make ("uridecodebin", NULL);
+    if (!uridecodebin)
+      goto no_decodebin;
+    gst_bin_add (GST_BIN_CAST (playbin), uridecodebin);
+    group->uridecodebin = gst_object_ref (uridecodebin);
+  }
+
+  flags = gst_play_sink_get_flags (playbin->playsink);
+
+  g_object_set (uridecodebin,
+      /* configure connection speed */
+      "connection-speed", playbin->connection_speed / 1000,
+      /* configure uri */
+      "uri", group->uri,
+      /* configure download buffering */
+      "download", ((flags & GST_PLAY_FLAG_DOWNLOAD) != 0),
+      /* configure buffering of demuxed/parsed data */
+      "use-buffering", ((flags & GST_PLAY_FLAG_BUFFERING) != 0),
+      /* configure buffering parameters */
+      "buffer-duration", playbin->buffer_duration,
+      "buffer-size", playbin->buffer_size,
+      "ring-buffer-max-size", playbin->ring_buffer_max_size, NULL);
+
+  /* connect pads and other things */
+  group->pad_added_id = g_signal_connect (uridecodebin, "pad-added",
+      G_CALLBACK (pad_added_cb), group);
+  group->pad_removed_id = g_signal_connect (uridecodebin, "pad-removed",
+      G_CALLBACK (pad_removed_cb), group);
+  group->no_more_pads_id = g_signal_connect (uridecodebin, "no-more-pads",
+      G_CALLBACK (no_more_pads_cb), group);
+  group->notify_source_id = g_signal_connect (uridecodebin, "notify::source",
+      G_CALLBACK (notify_source_cb), group);
+
+  /* we have 1 pending no-more-pads */
+  group->pending = 1;
+
+  /* is called when the uridecodebin is out of data and we can switch to the
+   * next uri */
+  group->drained_id =
+      g_signal_connect (uridecodebin, "drained", G_CALLBACK (drained_cb),
+      group);
+
+  /* will be called when a new media type is found. We return a list of decoders
+   * including sinks for decodebin to try */
+  group->autoplug_factories_id =
+      g_signal_connect (uridecodebin, "autoplug-factories",
+      G_CALLBACK (autoplug_factories_cb), group);
+  group->autoplug_select_id =
+      g_signal_connect (uridecodebin, "autoplug-select",
+      G_CALLBACK (autoplug_select_cb), group);
+  group->autoplug_continue_id =
+      g_signal_connect (uridecodebin, "autoplug-continue",
+      G_CALLBACK (autoplug_continue_cb), group);
+
+  if (group->suburi) {
+    /* subtitles */
+    if (group->suburidecodebin) {
+      GST_DEBUG_OBJECT (playbin, "reusing existing suburidecodebin");
+      suburidecodebin = group->suburidecodebin;
+      gst_element_set_state (suburidecodebin, GST_STATE_READY);
+      gst_bin_add (GST_BIN_CAST (playbin), gst_object_ref (suburidecodebin));
+    } else {
+      GST_DEBUG_OBJECT (playbin, "making new suburidecodebin");
+      suburidecodebin = gst_element_factory_make ("uridecodebin", NULL);
+      if (!suburidecodebin)
+        goto no_decodebin;
+
+      gst_bin_add (GST_BIN_CAST (playbin), suburidecodebin);
+      group->suburidecodebin = gst_object_ref (suburidecodebin);
+    }
+
+    g_object_set (suburidecodebin,
+        /* configure connection speed */
+        "connection-speed", playbin->connection_speed,
+        /* configure uri */
+        "uri", group->suburi, NULL);
+
+    /* connect pads and other things */
+    group->sub_pad_added_id = g_signal_connect (suburidecodebin, "pad-added",
+        G_CALLBACK (pad_added_cb), group);
+    group->sub_pad_removed_id = g_signal_connect (suburidecodebin,
+        "pad-removed", G_CALLBACK (pad_removed_cb), group);
+    group->sub_no_more_pads_id = g_signal_connect (suburidecodebin,
+        "no-more-pads", G_CALLBACK (no_more_pads_cb), group);
+
+    group->sub_autoplug_continue_id =
+        g_signal_connect (suburidecodebin, "autoplug-continue",
+        G_CALLBACK (autoplug_continue_cb), group);
+
+    /* we have 2 pending no-more-pads */
+    group->pending = 2;
+    group->sub_pending = TRUE;
+  } else {
+    group->sub_pending = FALSE;
+  }
+
+  /* release the group lock before setting the state of the decodebins, they
+   * might fire signals in this thread that we need to handle with the
+   * group_lock taken. */
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  if (suburidecodebin) {
+    if (gst_element_set_state (suburidecodebin,
+            target) == GST_STATE_CHANGE_FAILURE) {
+      GST_DEBUG_OBJECT (playbin,
+          "failed state change of subtitle uridecodebin");
+      GST_SOURCE_GROUP_LOCK (group);
+
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id);
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id);
+      REMOVE_SIGNAL (group->suburidecodebin, group->sub_autoplug_continue_id);
+      /* Might already be removed because of an error message */
+      if (GST_OBJECT_PARENT (suburidecodebin) == GST_OBJECT_CAST (playbin))
+        gst_bin_remove (GST_BIN_CAST (playbin), suburidecodebin);
+      if (group->sub_pending) {
+        group->pending--;
+        group->sub_pending = FALSE;
+      }
+      gst_element_set_state (suburidecodebin, GST_STATE_READY);
+      GST_SOURCE_GROUP_UNLOCK (group);
+    }
+  }
+  if (gst_element_set_state (uridecodebin, target) == GST_STATE_CHANGE_FAILURE)
+    goto uridecodebin_failure;
+
+  GST_SOURCE_GROUP_LOCK (group);
+  /* alow state changes of the playbin affect the group elements now */
+  group_set_locked_state_unlocked (playbin, group, FALSE);
+  group->active = TRUE;
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  return TRUE;
+
+  /* ERRORS */
+no_decodebin:
+  {
+    GstMessage *msg;
+
+    /* delete any custom sinks we might have */
+    if (group->audio_sink) {
+      /* If this is a automatically created sink set it to NULL */
+      if (group->audio_sink != playbin->audio_sink)
+        gst_element_set_state (group->audio_sink, GST_STATE_NULL);
+      gst_object_unref (group->audio_sink);
+    }
+    group->audio_sink = NULL;
+    if (group->video_sink) {
+      /* If this is a automatically created sink set it to NULL */
+      if (group->video_sink != playbin->video_sink)
+        gst_element_set_state (group->video_sink, GST_STATE_NULL);
+      gst_object_unref (group->video_sink);
+    }
+    group->video_sink = NULL;
+
+    GST_SOURCE_GROUP_UNLOCK (group);
+    msg =
+        gst_missing_element_message_new (GST_ELEMENT_CAST (playbin),
+        "uridecodebin");
+    gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
+
+    GST_ELEMENT_ERROR (playbin, CORE, MISSING_PLUGIN,
+        (_("Could not create \"uridecodebin\" element.")), (NULL));
+    return FALSE;
+  }
+uridecodebin_failure:
+  {
+    /* delete any custom sinks we might have */
+    if (group->audio_sink) {
+      /* If this is a automatically created sink set it to NULL */
+      if (group->audio_sink != playbin->audio_sink)
+        gst_element_set_state (group->audio_sink, GST_STATE_NULL);
+      gst_object_unref (group->audio_sink);
+    }
+    group->audio_sink = NULL;
+    if (group->video_sink) {
+      /* If this is a automatically created sink set it to NULL */
+      if (group->video_sink != playbin->video_sink)
+        gst_element_set_state (group->video_sink, GST_STATE_NULL);
+      gst_object_unref (group->video_sink);
+    }
+    group->video_sink = NULL;
+
+    GST_DEBUG_OBJECT (playbin, "failed state change of uridecodebin");
+    return FALSE;
+  }
+}
+
+/* unlink a group of uridecodebins from the sink.
+ * must be called with PLAY_BIN_LOCK */
+static gboolean
+deactivate_group (GstPlayBin * playbin, GstSourceGroup * group)
+{
+  gint i;
+
+  g_return_val_if_fail (group->valid, FALSE);
+  g_return_val_if_fail (group->active, FALSE);
+
+  GST_DEBUG_OBJECT (playbin, "unlinking group %p", group);
+
+  GST_SOURCE_GROUP_LOCK (group);
+  group->active = FALSE;
+  for (i = 0; i < PLAYBIN_STREAM_LAST; i++) {
+    GstSourceSelect *select = &group->selector[i];
+
+    GST_DEBUG_OBJECT (playbin, "unlinking selector %s", select->media_list[0]);
+
+    if (select->srcpad) {
+      if (select->sinkpad) {
+        GST_LOG_OBJECT (playbin, "unlinking from sink");
+        gst_pad_unlink (select->srcpad, select->sinkpad);
+
+        /* release back */
+        GST_LOG_OBJECT (playbin, "release sink pad");
+        gst_play_sink_release_pad (playbin->playsink, select->sinkpad);
+        select->sinkpad = NULL;
+      }
+
+      gst_object_unref (select->srcpad);
+      select->srcpad = NULL;
+    }
+
+    if (select->selector) {
+      gint n;
+
+      /* release and unref requests pad from the selector */
+      for (n = 0; n < select->channels->len; n++) {
+        GstPad *sinkpad = g_ptr_array_index (select->channels, n);
+
+        gst_element_release_request_pad (select->selector, sinkpad);
+        gst_object_unref (sinkpad);
+      }
+      g_ptr_array_set_size (select->channels, 0);
+
+      gst_element_set_state (select->selector, GST_STATE_NULL);
+      gst_bin_remove (GST_BIN_CAST (playbin), select->selector);
+      select->selector = NULL;
+    }
+  }
+  /* delete any custom sinks we might have */
+  if (group->audio_sink) {
+    /* If this is a automatically created sink set it to NULL */
+    if (group->audio_sink != playbin->audio_sink)
+      gst_element_set_state (group->audio_sink, GST_STATE_NULL);
+    gst_object_unref (group->audio_sink);
+  }
+  group->audio_sink = NULL;
+  if (group->video_sink) {
+    /* If this is a automatically created sink set it to NULL */
+    if (group->video_sink != playbin->video_sink)
+      gst_element_set_state (group->video_sink, GST_STATE_NULL);
+    gst_object_unref (group->video_sink);
+  }
+  group->video_sink = NULL;
+
+  if (group->uridecodebin) {
+    REMOVE_SIGNAL (group->uridecodebin, group->pad_added_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->drained_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id);
+    REMOVE_SIGNAL (group->uridecodebin, group->autoplug_continue_id);
+    gst_bin_remove (GST_BIN_CAST (playbin), group->uridecodebin);
+  }
+
+  if (group->suburidecodebin) {
+    REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_added_id);
+    REMOVE_SIGNAL (group->suburidecodebin, group->sub_pad_removed_id);
+    REMOVE_SIGNAL (group->suburidecodebin, group->sub_no_more_pads_id);
+    REMOVE_SIGNAL (group->suburidecodebin, group->sub_autoplug_continue_id);
+
+    /* Might already be removed because of errors */
+    if (GST_OBJECT_PARENT (group->suburidecodebin) == GST_OBJECT_CAST (playbin))
+      gst_bin_remove (GST_BIN_CAST (playbin), group->suburidecodebin);
+  }
+
+  GST_SOURCE_GROUP_UNLOCK (group);
+
+  return TRUE;
+}
+
+/* setup the next group to play, this assumes the next_group is valid and
+ * configured. It swaps out the current_group and activates the valid
+ * next_group. */
+static gboolean
+setup_next_source (GstPlayBin * playbin, GstState target)
+{
+  GstSourceGroup *new_group, *old_group;
+
+  GST_DEBUG_OBJECT (playbin, "setup sources");
+
+  /* see if there is a next group */
+  GST_PLAY_BIN_LOCK (playbin);
+  new_group = playbin->next_group;
+  if (!new_group || !new_group->valid)
+    goto no_next_group;
+
+  /* first unlink the current source, if any */
+  old_group = playbin->curr_group;
+  if (old_group && old_group->valid && old_group->active) {
+    gst_play_bin_update_cached_duration (playbin);
+    /* unlink our pads with the sink */
+    deactivate_group (playbin, old_group);
+    old_group->valid = FALSE;
+  }
+
+  /* swap old and new */
+  playbin->curr_group = new_group;
+  playbin->next_group = old_group;
+
+  /* activate the new group */
+  if (!activate_group (playbin, new_group, target))
+    goto activate_failed;
+
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return TRUE;
+
+  /* ERRORS */
+no_next_group:
+  {
+    GST_DEBUG_OBJECT (playbin, "no next group");
+    if (target == GST_STATE_READY && new_group && new_group->uri == NULL)
+      GST_ELEMENT_ERROR (playbin, RESOURCE, NOT_FOUND, ("No URI set"), (NULL));
+    GST_PLAY_BIN_UNLOCK (playbin);
+    return FALSE;
+  }
+activate_failed:
+  {
+    GST_DEBUG_OBJECT (playbin, "activate failed");
+    GST_PLAY_BIN_UNLOCK (playbin);
+    return FALSE;
+  }
+}
+
+/* The group that is currently playing is copied again to the
+ * next_group so that it will start playing the next time.
+ */
+static gboolean
+save_current_group (GstPlayBin * playbin)
+{
+  GstSourceGroup *curr_group;
+
+  GST_DEBUG_OBJECT (playbin, "save current group");
+
+  /* see if there is a current group */
+  GST_PLAY_BIN_LOCK (playbin);
+  curr_group = playbin->curr_group;
+  if (curr_group && curr_group->valid) {
+    /* unlink our pads with the sink */
+    deactivate_group (playbin, curr_group);
+  }
+  /* swap old and new */
+  playbin->curr_group = playbin->next_group;
+  playbin->next_group = curr_group;
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return TRUE;
+}
+
+/* clear the locked state from all groups. This function is called before a
+ * state change to NULL is performed on them. */
+static gboolean
+groups_set_locked_state (GstPlayBin * playbin, gboolean locked)
+{
+  GST_DEBUG_OBJECT (playbin, "setting locked state to %d on all groups",
+      locked);
+
+  GST_PLAY_BIN_LOCK (playbin);
+  GST_SOURCE_GROUP_LOCK (playbin->curr_group);
+  group_set_locked_state_unlocked (playbin, playbin->curr_group, locked);
+  GST_SOURCE_GROUP_UNLOCK (playbin->curr_group);
+  GST_SOURCE_GROUP_LOCK (playbin->next_group);
+  group_set_locked_state_unlocked (playbin, playbin->next_group, locked);
+  GST_SOURCE_GROUP_UNLOCK (playbin->next_group);
+  GST_PLAY_BIN_UNLOCK (playbin);
+
+  return TRUE;
+}
+
+static GstStateChangeReturn
+gst_play_bin_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstPlayBin *playbin;
+  gboolean do_save = FALSE;
+
+  playbin = GST_PLAY_BIN (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      memset (&playbin->duration, 0, sizeof (playbin->duration));
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_LOG_OBJECT (playbin, "clearing shutdown flag");
+      memset (&playbin->duration, 0, sizeof (playbin->duration));
+      g_atomic_int_set (&playbin->shutdown, 0);
+
+      if (!setup_next_source (playbin, GST_STATE_READY)) {
+        ret = GST_STATE_CHANGE_FAILURE;
+        goto failure;
+      }
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+    async_down:
+      /* FIXME unlock our waiting groups */
+      GST_LOG_OBJECT (playbin, "setting shutdown flag");
+      g_atomic_int_set (&playbin->shutdown, 1);
+      memset (&playbin->duration, 0, sizeof (playbin->duration));
+
+      /* wait for all callbacks to end by taking the lock.
+       * No dynamic (critical) new callbacks will
+       * be able to happen as we set the shutdown flag. */
+      GST_PLAY_BIN_DYN_LOCK (playbin);
+      GST_LOG_OBJECT (playbin, "dynamic lock taken, we can continue shutdown");
+      GST_PLAY_BIN_DYN_UNLOCK (playbin);
+      if (!do_save)
+        break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      /* we go async to PAUSED, so if that fails, we never make it to PAUSED
+       * an no state change PAUSED to READY passes here,
+       * though it is a nice-to-have ... */
+      if (!g_atomic_int_get (&playbin->shutdown)) {
+        do_save = TRUE;
+        goto async_down;
+      }
+      memset (&playbin->duration, 0, sizeof (playbin->duration));
+
+      /* unlock so that all groups go to NULL */
+      groups_set_locked_state (playbin, FALSE);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    goto failure;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      /* FIXME Release audio device when we implement that */
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      save_current_group (playbin);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+    {
+      guint i;
+
+      /* also do missed state change down to READY */
+      if (do_save)
+        save_current_group (playbin);
+      /* Deactive the groups, set the uridecodebins to NULL
+       * and unref them.
+       */
+      for (i = 0; i < 2; i++) {
+        if (playbin->groups[i].active && playbin->groups[i].valid) {
+          deactivate_group (playbin, &playbin->groups[i]);
+          playbin->groups[i].valid = FALSE;
+        }
+
+        if (playbin->groups[i].uridecodebin) {
+          gst_element_set_state (playbin->groups[i].uridecodebin,
+              GST_STATE_NULL);
+          gst_object_unref (playbin->groups[i].uridecodebin);
+          playbin->groups[i].uridecodebin = NULL;
+        }
+
+        if (playbin->groups[i].suburidecodebin) {
+          gst_element_set_state (playbin->groups[i].suburidecodebin,
+              GST_STATE_NULL);
+          gst_object_unref (playbin->groups[i].suburidecodebin);
+          playbin->groups[i].suburidecodebin = NULL;
+        }
+      }
+
+      /* Set our sinks back to NULL, they might not be child of playbin */
+      if (playbin->audio_sink)
+        gst_element_set_state (playbin->audio_sink, GST_STATE_NULL);
+      if (playbin->video_sink)
+        gst_element_set_state (playbin->video_sink, GST_STATE_NULL);
+      if (playbin->text_sink)
+        gst_element_set_state (playbin->text_sink, GST_STATE_NULL);
+
+      /* make sure the groups don't perform a state change anymore until we
+       * enable them again */
+      groups_set_locked_state (playbin, TRUE);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return ret;
+
+  /* ERRORS */
+failure:
+  {
+    if (transition == GST_STATE_CHANGE_READY_TO_PAUSED) {
+      GstSourceGroup *curr_group;
+
+      curr_group = playbin->curr_group;
+      if (curr_group && curr_group->active && curr_group->valid) {
+        /* unlink our pads with the sink */
+        deactivate_group (playbin, curr_group);
+        curr_group->valid = FALSE;
+      }
+
+      /* Swap current and next group back */
+      playbin->curr_group = playbin->next_group;
+      playbin->next_group = curr_group;
+    }
+    return ret;
+  }
+}
+
+gboolean
+gst_play_bin2_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_play_bin_debug, "playbin", 0, "play bin");
+
+  return gst_element_register (plugin, "playbin", GST_RANK_NONE,
+      GST_TYPE_PLAY_BIN);
+}
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
new file mode 100644
index 0000000..76e6e3a
--- /dev/null
+++ b/gst/playback/gstplaysink.c
@@ -0,0 +1,3665 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/video/video.h>
+
+#include "gstplaysink.h"
+#include "gststreamsynchronizer.h"
+#include "gstplaysinkvideoconvert.h"
+#include "gstplaysinkaudioconvert.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_play_sink_debug);
+#define GST_CAT_DEFAULT gst_play_sink_debug
+
+#define VOLUME_MAX_DOUBLE 10.0
+
+#define DEFAULT_FLAGS             GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | \
+                                  GST_PLAY_FLAG_SOFT_VOLUME
+
+#define GST_PLAY_CHAIN(c) ((GstPlayChain *)(c))
+
+/* holds the common data fields for the audio and video pipelines. We keep them
+ * in a structure to more easily have all the info available. */
+typedef struct
+{
+  GstPlaySink *playsink;
+  GstElement *bin;
+  gboolean added;
+  gboolean activated;
+  gboolean raw;
+} GstPlayChain;
+
+typedef struct
+{
+  GstPlayChain chain;
+  GstPad *sinkpad;
+  GstElement *queue;
+  GstElement *conv;
+  GstElement *volume;           /* element with the volume property */
+  gboolean sink_volume;         /* if the volume was provided by the sink */
+  GstElement *mute;             /* element with the mute property */
+  GstElement *sink;
+  GstElement *ts_offset;
+} GstPlayAudioChain;
+
+typedef struct
+{
+  GstPlayChain chain;
+  GstPad *sinkpad, *srcpad;
+  GstElement *conv;
+  GstElement *deinterlace;
+} GstPlayVideoDeinterlaceChain;
+
+typedef struct
+{
+  GstPlayChain chain;
+  GstPad *sinkpad;
+  GstElement *queue;
+  GstElement *conv;
+  GstElement *sink;
+  gboolean async;
+  GstElement *ts_offset;
+} GstPlayVideoChain;
+
+typedef struct
+{
+  GstPlayChain chain;
+  GstPad *sinkpad;
+  GstElement *queue;
+  GstElement *conv;
+  GstElement *resample;
+  GstPad *blockpad;             /* srcpad of resample, used for switching the vis */
+  GstPad *vissinkpad;           /* visualisation sinkpad, */
+  GstElement *vis;
+  GstPad *vissrcpad;            /* visualisation srcpad, */
+  GstPad *srcpad;               /* outgoing srcpad, used to connect to the next
+                                 * chain */
+} GstPlayVisChain;
+
+typedef struct
+{
+  GstPlayChain chain;
+  GstPad *sinkpad;
+  GstElement *queue;
+  GstElement *identity;
+  GstElement *overlay;
+  GstPad *videosinkpad;
+  GstPad *textsinkpad;
+  GstPad *srcpad;               /* outgoing srcpad, used to connect to the next
+                                 * chain */
+  GstElement *sink;             /* custom sink to receive subtitle buffers */
+} GstPlayTextChain;
+
+#define GST_PLAY_SINK_GET_LOCK(playsink) (&((GstPlaySink *)playsink)->lock)
+#define GST_PLAY_SINK_LOCK(playsink)     G_STMT_START { \
+  GST_LOG_OBJECT (playsink, "locking from thread %p", g_thread_self ()); \
+  g_static_rec_mutex_lock (GST_PLAY_SINK_GET_LOCK (playsink)); \
+  GST_LOG_OBJECT (playsink, "locked from thread %p", g_thread_self ()); \
+} G_STMT_END
+#define GST_PLAY_SINK_UNLOCK(playsink)   G_STMT_START { \
+  GST_LOG_OBJECT (playsink, "unlocking from thread %p", g_thread_self ()); \
+  g_static_rec_mutex_unlock (GST_PLAY_SINK_GET_LOCK (playsink)); \
+} G_STMT_END
+
+#define PENDING_FLAG_SET(playsink, flagtype) \
+  ((playsink->pending_blocked_pads) |= (1 << flagtype))
+#define PENDING_FLAG_UNSET(playsink, flagtype) \
+  ((playsink->pending_blocked_pads) &= ~(1 << flagtype))
+#define PENDING_FLAG_IS_SET(playsink, flagtype) \
+  ((playsink->pending_blocked_pads) & (1 << flagtype))
+#define PENDING_VIDEO_BLOCK(playsink) \
+  ((playsink->pending_blocked_pads) & (1 << GST_PLAY_SINK_TYPE_VIDEO_RAW | 1 << GST_PLAY_SINK_TYPE_VIDEO))
+#define PENDING_AUDIO_BLOCK(playsink) \
+  ((playsink->pending_blocked_pads) & (1 << GST_PLAY_SINK_TYPE_AUDIO_RAW | 1 << GST_PLAY_SINK_TYPE_AUDIO))
+#define PENDING_TEXT_BLOCK(playsink) \
+  PENDING_FLAG_IS_SET(playsink, GST_PLAY_SINK_TYPE_TEXT)
+
+struct _GstPlaySink
+{
+  GstBin bin;
+
+  GStaticRecMutex lock;
+
+  gboolean async_pending;
+  gboolean need_async_start;
+
+  GstPlayFlags flags;
+
+  GstStreamSynchronizer *stream_synchronizer;
+
+  /* chains */
+  GstPlayAudioChain *audiochain;
+  GstPlayVideoDeinterlaceChain *videodeinterlacechain;
+  GstPlayVideoChain *videochain;
+  GstPlayVisChain *vischain;
+  GstPlayTextChain *textchain;
+
+  /* audio */
+  GstPad *audio_pad;
+  gboolean audio_pad_raw;
+  gboolean audio_pad_blocked;
+  GstPad *audio_srcpad_stream_synchronizer;
+  GstPad *audio_sinkpad_stream_synchronizer;
+  gulong audio_block_id;
+  /* audio tee */
+  GstElement *audio_tee;
+  GstPad *audio_tee_sink;
+  GstPad *audio_tee_asrc;
+  GstPad *audio_tee_vissrc;
+  /* video */
+  GstPad *video_pad;
+  gboolean video_pad_raw;
+  gboolean video_pad_blocked;
+  GstPad *video_srcpad_stream_synchronizer;
+  GstPad *video_sinkpad_stream_synchronizer;
+  gulong video_block_id;
+  /* text */
+  GstPad *text_pad;
+  gboolean text_pad_blocked;
+  GstPad *text_srcpad_stream_synchronizer;
+  GstPad *text_sinkpad_stream_synchronizer;
+  gulong text_block_id;
+
+  guint32 pending_blocked_pads;
+
+  /* properties */
+  GstElement *audio_sink;
+  GstElement *video_sink;
+  GstElement *visualisation;
+  GstElement *text_sink;
+  gdouble volume;
+  gboolean mute;
+  gchar *font_desc;             /* font description */
+  gchar *subtitle_encoding;     /* subtitle encoding */
+  guint connection_speed;       /* connection speed in bits/sec (0 = unknown) */
+  gint count;
+  gboolean volume_changed;      /* volume/mute changed while no audiochain */
+  gboolean mute_changed;        /* ... has been created yet */
+  gint64 av_offset;
+};
+
+struct _GstPlaySinkClass
+{
+  GstBinClass parent_class;
+
+    gboolean (*reconfigure) (GstPlaySink * playsink);
+
+  GstBuffer *(*convert_frame) (GstPlaySink * playsink, GstCaps * caps);
+};
+
+
+static GstStaticPadTemplate audiotemplate =
+GST_STATIC_PAD_TEMPLATE ("audio_sink",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate videotemplate =
+GST_STATIC_PAD_TEMPLATE ("video_sink",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate texttemplate = GST_STATIC_PAD_TEMPLATE ("text_sink",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+/* FIXME 0.11: Remove */
+static GstStaticPadTemplate audiorawtemplate =
+GST_STATIC_PAD_TEMPLATE ("audio_raw_sink",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate videorawtemplate =
+GST_STATIC_PAD_TEMPLATE ("video_raw_sink",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+
+/* props */
+enum
+{
+  PROP_0,
+  PROP_FLAGS,
+  PROP_MUTE,
+  PROP_VOLUME,
+  PROP_FONT_DESC,
+  PROP_SUBTITLE_ENCODING,
+  PROP_VIS_PLUGIN,
+  PROP_FRAME,
+  PROP_AV_OFFSET,
+  PROP_LAST
+};
+
+/* signals */
+enum
+{
+  LAST_SIGNAL
+};
+
+static void gst_play_sink_dispose (GObject * object);
+static void gst_play_sink_finalize (GObject * object);
+static void gst_play_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * spec);
+static void gst_play_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * spec);
+
+static GstPad *gst_play_sink_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_play_sink_release_request_pad (GstElement * element,
+    GstPad * pad);
+static gboolean gst_play_sink_send_event (GstElement * element,
+    GstEvent * event);
+static GstStateChangeReturn gst_play_sink_change_state (GstElement * element,
+    GstStateChange transition);
+
+static void gst_play_sink_handle_message (GstBin * bin, GstMessage * message);
+
+static void notify_volume_cb (GObject * object, GParamSpec * pspec,
+    GstPlaySink * playsink);
+static void notify_mute_cb (GObject * object, GParamSpec * pspec,
+    GstPlaySink * playsink);
+
+static void update_av_offset (GstPlaySink * playsink);
+
+void
+gst_play_marshal_BUFFER__BOXED (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data)
+{
+  typedef GstBuffer *(*GMarshalFunc_OBJECT__BOXED) (gpointer data1,
+      gpointer arg_1, gpointer data2);
+  register GMarshalFunc_OBJECT__BOXED callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  GstBuffer *v_return;
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_OBJECT__BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1, g_value_get_boxed (param_values + 1), data2);
+
+  gst_value_take_buffer (return_value, v_return);
+}
+
+/* static guint gst_play_sink_signals[LAST_SIGNAL] = { 0 }; */
+
+G_DEFINE_TYPE (GstPlaySink, gst_play_sink, GST_TYPE_BIN);
+
+static void
+gst_play_sink_class_init (GstPlaySinkClass * klass)
+{
+  GObjectClass *gobject_klass;
+  GstElementClass *gstelement_klass;
+  GstBinClass *gstbin_klass;
+
+  gobject_klass = (GObjectClass *) klass;
+  gstelement_klass = (GstElementClass *) klass;
+  gstbin_klass = (GstBinClass *) klass;
+
+  gobject_klass->dispose = gst_play_sink_dispose;
+  gobject_klass->finalize = gst_play_sink_finalize;
+  gobject_klass->set_property = gst_play_sink_set_property;
+  gobject_klass->get_property = gst_play_sink_get_property;
+
+
+  /**
+   * GstPlaySink:flags
+   *
+   * Control the behaviour of playsink.
+   */
+  g_object_class_install_property (gobject_klass, PROP_FLAGS,
+      g_param_spec_flags ("flags", "Flags", "Flags to control behaviour",
+          GST_TYPE_PLAY_FLAGS, DEFAULT_FLAGS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlaySink:volume:
+   *
+   * Get or set the current audio stream volume. 1.0 means 100%,
+   * 0.0 means mute. This uses a linear volume scale.
+   *
+   */
+  g_object_class_install_property (gobject_klass, PROP_VOLUME,
+      g_param_spec_double ("volume", "Volume", "The audio volume, 1.0=100%",
+          0.0, VOLUME_MAX_DOUBLE, 1.0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_MUTE,
+      g_param_spec_boolean ("mute", "Mute",
+          "Mute the audio channel without changing the volume", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_FONT_DESC,
+      g_param_spec_string ("subtitle-font-desc",
+          "Subtitle font description",
+          "Pango font description of font "
+          "to be used for subtitle rendering", NULL,
+          G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_SUBTITLE_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 encoding. "
+          "If not set, the GST_SUBTITLE_ENCODING environment variable will "
+          "be checked for an encoding to use. If that is not set either, "
+          "ISO-8859-15 will be assumed.", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_VIS_PLUGIN,
+      g_param_spec_object ("vis-plugin", "Vis plugin",
+          "the visualization element to use (NULL = default)",
+          GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlaySink:frame:
+   *
+   * Get the currently rendered or prerolled frame in the video sink.
+   * The #GstCaps on the buffer will describe the format of the buffer.
+   *
+   * Since: 0.10.30
+   */
+  g_object_class_install_property (gobject_klass, PROP_FRAME,
+      g_param_spec_boxed ("frame", "Frame",
+          "The last frame (NULL = no video available)",
+          GST_TYPE_BUFFER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstPlaySink:av-offset:
+   *
+   * Control the synchronisation offset between the audio and video streams.
+   * Positive values make the audio ahead of the video and negative values make
+   * the audio go behind the video.
+   *
+   * Since: 0.10.30
+   */
+  g_object_class_install_property (gobject_klass, PROP_AV_OFFSET,
+      g_param_spec_int64 ("av-offset", "AV Offset",
+          "The synchronisation offset between audio and video in nanoseconds",
+          G_MININT64, G_MAXINT64, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_signal_new ("reconfigure", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstPlaySinkClass,
+          reconfigure), NULL, NULL, gst_marshal_BOOLEAN__VOID, G_TYPE_BOOLEAN,
+      0, G_TYPE_NONE);
+  /**
+   * GstPlaySink::convert-frame
+   * @playsink: a #GstPlaySink
+   * @caps: the target format of the frame
+   *
+   * Action signal to retrieve the currently playing video frame in the format
+   * specified by @caps.
+   * If @caps is %NULL, no conversion will be performed and this function is
+   * equivalent to the #GstPlaySink::frame property.
+   *
+   * Returns: a #GstBuffer of the current video frame converted to #caps.
+   * The caps on the buffer will describe the final layout of the buffer data.
+   * %NULL is returned when no current buffer can be retrieved or when the
+   * conversion failed.
+   *
+   * Since: 0.10.30
+   */
+  g_signal_new ("convert-frame", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstPlaySinkClass, convert_frame), NULL, NULL,
+      gst_play_marshal_BUFFER__BOXED, GST_TYPE_BUFFER, 1, GST_TYPE_CAPS);
+
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&audiorawtemplate));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&audiotemplate));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&videorawtemplate));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&videotemplate));
+  gst_element_class_add_pad_template (gstelement_klass,
+      gst_static_pad_template_get (&texttemplate));
+  gst_element_class_set_details_simple (gstelement_klass, "Player Sink",
+      "Generic/Bin/Sink",
+      "Convenience sink for multiple streams",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gstelement_klass->change_state =
+      GST_DEBUG_FUNCPTR (gst_play_sink_change_state);
+  gstelement_klass->send_event = GST_DEBUG_FUNCPTR (gst_play_sink_send_event);
+  gstelement_klass->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_play_sink_request_new_pad);
+  gstelement_klass->release_pad =
+      GST_DEBUG_FUNCPTR (gst_play_sink_release_request_pad);
+
+  gstbin_klass->handle_message =
+      GST_DEBUG_FUNCPTR (gst_play_sink_handle_message);
+
+  klass->reconfigure = GST_DEBUG_FUNCPTR (gst_play_sink_reconfigure);
+  klass->convert_frame = GST_DEBUG_FUNCPTR (gst_play_sink_convert_frame);
+}
+
+static void
+gst_play_sink_init (GstPlaySink * playsink)
+{
+  /* init groups */
+  playsink->video_sink = NULL;
+  playsink->audio_sink = NULL;
+  playsink->visualisation = NULL;
+  playsink->text_sink = NULL;
+  playsink->volume = 1.0;
+  playsink->font_desc = NULL;
+  playsink->subtitle_encoding = NULL;
+  playsink->flags = DEFAULT_FLAGS;
+
+  playsink->stream_synchronizer =
+      g_object_new (GST_TYPE_STREAM_SYNCHRONIZER, NULL);
+  gst_bin_add (GST_BIN_CAST (playsink),
+      GST_ELEMENT_CAST (playsink->stream_synchronizer));
+
+  g_static_rec_mutex_init (&playsink->lock);
+  GST_OBJECT_FLAG_SET (playsink, GST_ELEMENT_IS_SINK);
+}
+
+static void
+disconnect_chain (GstPlayAudioChain * chain, GstPlaySink * playsink)
+{
+  if (chain) {
+    if (chain->volume)
+      g_signal_handlers_disconnect_by_func (chain->volume, notify_volume_cb,
+          playsink);
+    if (chain->mute)
+      g_signal_handlers_disconnect_by_func (chain->mute, notify_mute_cb,
+          playsink);
+  }
+}
+
+static void
+free_chain (GstPlayChain * chain)
+{
+  if (chain) {
+    if (chain->bin)
+      gst_object_unref (chain->bin);
+    g_free (chain);
+  }
+}
+
+static void
+gst_play_sink_dispose (GObject * object)
+{
+  GstPlaySink *playsink;
+
+  playsink = GST_PLAY_SINK (object);
+
+  if (playsink->audio_sink != NULL) {
+    gst_element_set_state (playsink->audio_sink, GST_STATE_NULL);
+    gst_object_unref (playsink->audio_sink);
+    playsink->audio_sink = NULL;
+  }
+  if (playsink->video_sink != NULL) {
+    gst_element_set_state (playsink->video_sink, GST_STATE_NULL);
+    gst_object_unref (playsink->video_sink);
+    playsink->video_sink = NULL;
+  }
+  if (playsink->visualisation != NULL) {
+    gst_element_set_state (playsink->visualisation, GST_STATE_NULL);
+    gst_object_unref (playsink->visualisation);
+    playsink->visualisation = NULL;
+  }
+  if (playsink->text_sink != NULL) {
+    gst_element_set_state (playsink->text_sink, GST_STATE_NULL);
+    gst_object_unref (playsink->text_sink);
+    playsink->text_sink = NULL;
+  }
+
+  free_chain ((GstPlayChain *) playsink->videodeinterlacechain);
+  playsink->videodeinterlacechain = NULL;
+  free_chain ((GstPlayChain *) playsink->videochain);
+  playsink->videochain = NULL;
+  free_chain ((GstPlayChain *) playsink->audiochain);
+  playsink->audiochain = NULL;
+  free_chain ((GstPlayChain *) playsink->vischain);
+  playsink->vischain = NULL;
+  free_chain ((GstPlayChain *) playsink->textchain);
+  playsink->textchain = NULL;
+
+  if (playsink->audio_tee_sink) {
+    gst_object_unref (playsink->audio_tee_sink);
+    playsink->audio_tee_sink = NULL;
+  }
+
+  if (playsink->audio_tee_vissrc) {
+    gst_element_release_request_pad (playsink->audio_tee,
+        playsink->audio_tee_vissrc);
+    gst_object_unref (playsink->audio_tee_vissrc);
+    playsink->audio_tee_vissrc = NULL;
+  }
+
+  if (playsink->audio_tee_asrc) {
+    gst_element_release_request_pad (playsink->audio_tee,
+        playsink->audio_tee_asrc);
+    gst_object_unref (playsink->audio_tee_asrc);
+    playsink->audio_tee_asrc = NULL;
+  }
+
+  g_free (playsink->font_desc);
+  playsink->font_desc = NULL;
+
+  g_free (playsink->subtitle_encoding);
+  playsink->subtitle_encoding = NULL;
+
+  playsink->stream_synchronizer = NULL;
+
+  G_OBJECT_CLASS (gst_play_sink_parent_class)->dispose (object);
+}
+
+static void
+gst_play_sink_finalize (GObject * object)
+{
+  GstPlaySink *playsink;
+
+  playsink = GST_PLAY_SINK (object);
+
+  g_static_rec_mutex_free (&playsink->lock);
+
+  G_OBJECT_CLASS (gst_play_sink_parent_class)->finalize (object);
+}
+
+void
+gst_play_sink_set_sink (GstPlaySink * playsink, GstPlaySinkType type,
+    GstElement * sink)
+{
+  GstElement **elem = NULL, *old = NULL;
+
+  GST_LOG ("Setting sink %" GST_PTR_FORMAT " as sink type %d", sink, type);
+
+  GST_PLAY_SINK_LOCK (playsink);
+  switch (type) {
+    case GST_PLAY_SINK_TYPE_AUDIO:
+    case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+      elem = &playsink->audio_sink;
+      break;
+    case GST_PLAY_SINK_TYPE_VIDEO:
+    case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+      elem = &playsink->video_sink;
+      break;
+    case GST_PLAY_SINK_TYPE_TEXT:
+      elem = &playsink->text_sink;
+      break;
+    default:
+      break;
+  }
+  if (elem) {
+    old = *elem;
+    if (sink)
+      gst_object_ref (sink);
+    *elem = sink;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  if (old) {
+    if (old != sink)
+      gst_element_set_state (old, GST_STATE_NULL);
+    gst_object_unref (old);
+  }
+}
+
+GstElement *
+gst_play_sink_get_sink (GstPlaySink * playsink, GstPlaySinkType type)
+{
+  GstElement *result = NULL;
+  GstElement *elem = NULL, *chainp = NULL;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  switch (type) {
+    case GST_PLAY_SINK_TYPE_AUDIO:
+    case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+    {
+      GstPlayAudioChain *chain;
+      if ((chain = (GstPlayAudioChain *) playsink->audiochain))
+        chainp = chain->sink;
+      elem = playsink->audio_sink;
+      break;
+    }
+    case GST_PLAY_SINK_TYPE_VIDEO:
+    case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+    {
+      GstPlayVideoChain *chain;
+      if ((chain = (GstPlayVideoChain *) playsink->videochain))
+        chainp = chain->sink;
+      elem = playsink->video_sink;
+      break;
+    }
+    case GST_PLAY_SINK_TYPE_TEXT:
+    {
+      GstPlayTextChain *chain;
+      if ((chain = (GstPlayTextChain *) playsink->textchain))
+        chainp = chain->sink;
+      elem = playsink->text_sink;
+      break;
+    }
+    default:
+      break;
+  }
+  if (chainp) {
+    /* we have an active chain with a sink, get the sink */
+    result = gst_object_ref (chainp);
+  }
+  /* nothing found, return last configured sink */
+  if (result == NULL && elem)
+    result = gst_object_ref (elem);
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+static GstProbeReturn
+gst_play_sink_vis_blocked (GstPad * tee_pad, GstProbeType type,
+    gpointer type_data, gpointer user_data)
+{
+  GstPlaySink *playsink;
+  GstPlayVisChain *chain;
+
+  playsink = GST_PLAY_SINK (user_data);
+
+  GST_PLAY_SINK_LOCK (playsink);
+  GST_DEBUG_OBJECT (playsink, "vis pad blocked");
+  /* now try to change the plugin in the running vis chain */
+  if (!(chain = (GstPlayVisChain *) playsink->vischain))
+    goto done;
+
+  /* unlink the old plugin and unghost the pad */
+  gst_pad_unlink (chain->blockpad, chain->vissinkpad);
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (chain->srcpad), NULL);
+
+  /* set the old plugin to NULL and remove */
+  gst_element_set_state (chain->vis, GST_STATE_NULL);
+  gst_bin_remove (GST_BIN_CAST (chain->chain.bin), chain->vis);
+
+  /* add new plugin and set state to playing */
+  chain->vis = playsink->visualisation;
+  gst_bin_add (GST_BIN_CAST (chain->chain.bin), chain->vis);
+  gst_element_set_state (chain->vis, GST_STATE_PLAYING);
+
+  /* get pads */
+  chain->vissinkpad = gst_element_get_static_pad (chain->vis, "sink");
+  chain->vissrcpad = gst_element_get_static_pad (chain->vis, "src");
+
+  /* link pads */
+  gst_pad_link_full (chain->blockpad, chain->vissinkpad,
+      GST_PAD_LINK_CHECK_NOTHING);
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (chain->srcpad),
+      chain->vissrcpad);
+
+done:
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  /* remove the probe and unblock the pad */
+  return GST_PROBE_REMOVE;
+}
+
+void
+gst_play_sink_set_vis_plugin (GstPlaySink * playsink, GstElement * vis)
+{
+  GstPlayVisChain *chain;
+
+  /* setting NULL means creating the default vis plugin */
+  if (vis == NULL)
+    vis = gst_element_factory_make ("goom", "vis");
+
+  /* simply return if we don't have a vis plugin here */
+  if (vis == NULL)
+    return;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  /* first store the new vis */
+  if (playsink->visualisation)
+    gst_object_unref (playsink->visualisation);
+  /* take ownership */
+  gst_object_ref_sink (vis);
+  playsink->visualisation = vis;
+
+  /* now try to change the plugin in the running vis chain, if we have no chain,
+   * we don't bother, any future vis chain will be created with the new vis
+   * plugin. */
+  if (!(chain = (GstPlayVisChain *) playsink->vischain))
+    goto done;
+
+  /* block the pad, the next time the callback is called we can change the
+   * visualisation. It's possible that this never happens or that the pad was
+   * already blocked. If the callback never happens, we don't have new data so
+   * we don't need the new vis plugin. If the pad was already blocked, the
+   * function returns FALSE but the previous pad block will do the right thing
+   * anyway. */
+  GST_DEBUG_OBJECT (playsink, "blocking vis pad");
+  gst_pad_add_probe (chain->blockpad, GST_PROBE_TYPE_BLOCK,
+      gst_play_sink_vis_blocked, playsink, NULL);
+done:
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return;
+}
+
+GstElement *
+gst_play_sink_get_vis_plugin (GstPlaySink * playsink)
+{
+  GstElement *result = NULL;
+  GstPlayVisChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  if ((chain = (GstPlayVisChain *) playsink->vischain)) {
+    /* we have an active chain, get the sink */
+    if (chain->vis)
+      result = gst_object_ref (chain->vis);
+  }
+  /* nothing found, return last configured sink */
+  if (result == NULL && playsink->visualisation)
+    result = gst_object_ref (playsink->visualisation);
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+void
+gst_play_sink_set_volume (GstPlaySink * playsink, gdouble volume)
+{
+  GstPlayAudioChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  playsink->volume = volume;
+  chain = (GstPlayAudioChain *) playsink->audiochain;
+  if (chain && chain->volume) {
+    GST_LOG_OBJECT (playsink, "elements: volume=%" GST_PTR_FORMAT ", mute=%"
+        GST_PTR_FORMAT "; new volume=%.03f, mute=%d", chain->volume,
+        chain->mute, volume, playsink->mute);
+    /* if there is a mute element or we are not muted, set the volume */
+    if (chain->mute || !playsink->mute)
+      g_object_set (chain->volume, "volume", volume, NULL);
+  } else {
+    GST_LOG_OBJECT (playsink, "no volume element");
+    playsink->volume_changed = TRUE;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+}
+
+gdouble
+gst_play_sink_get_volume (GstPlaySink * playsink)
+{
+  gdouble result;
+  GstPlayAudioChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayAudioChain *) playsink->audiochain;
+  result = playsink->volume;
+  if (chain && chain->volume) {
+    if (chain->mute || !playsink->mute) {
+      g_object_get (chain->volume, "volume", &result, NULL);
+      playsink->volume = result;
+    }
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+void
+gst_play_sink_set_mute (GstPlaySink * playsink, gboolean mute)
+{
+  GstPlayAudioChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  playsink->mute = mute;
+  chain = (GstPlayAudioChain *) playsink->audiochain;
+  if (chain) {
+    if (chain->mute) {
+      g_object_set (chain->mute, "mute", mute, NULL);
+    } else if (chain->volume) {
+      if (mute)
+        g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL);
+      else
+        g_object_set (chain->volume, "volume", (gdouble) playsink->volume,
+            NULL);
+    }
+  } else {
+    playsink->mute_changed = TRUE;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+}
+
+gboolean
+gst_play_sink_get_mute (GstPlaySink * playsink)
+{
+  gboolean result;
+  GstPlayAudioChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayAudioChain *) playsink->audiochain;
+  if (chain && chain->mute) {
+    g_object_get (chain->mute, "mute", &result, NULL);
+    playsink->mute = result;
+  } else {
+    result = playsink->mute;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+static void
+post_missing_element_message (GstPlaySink * playsink, const gchar * name)
+{
+  GstMessage *msg;
+
+  msg = gst_missing_element_message_new (GST_ELEMENT_CAST (playsink), name);
+  gst_element_post_message (GST_ELEMENT_CAST (playsink), msg);
+}
+
+static gboolean
+add_chain (GstPlayChain * chain, gboolean add)
+{
+  if (chain->added == add)
+    return TRUE;
+
+  if (add)
+    gst_bin_add (GST_BIN_CAST (chain->playsink), chain->bin);
+  else {
+    gst_bin_remove (GST_BIN_CAST (chain->playsink), chain->bin);
+    /* we don't want to lose our sink status */
+    GST_OBJECT_FLAG_SET (chain->playsink, GST_ELEMENT_IS_SINK);
+  }
+
+  chain->added = add;
+
+  return TRUE;
+}
+
+static gboolean
+activate_chain (GstPlayChain * chain, gboolean activate)
+{
+  GstState state;
+
+  if (chain->activated == activate)
+    return TRUE;
+
+  GST_OBJECT_LOCK (chain->playsink);
+  state = GST_STATE_TARGET (chain->playsink);
+  GST_OBJECT_UNLOCK (chain->playsink);
+
+  if (activate)
+    gst_element_set_state (chain->bin, state);
+  else
+    gst_element_set_state (chain->bin, GST_STATE_NULL);
+
+  chain->activated = activate;
+
+  return TRUE;
+}
+
+static gboolean
+element_is_sink (GstElement * element)
+{
+  gboolean is_sink;
+
+  GST_OBJECT_LOCK (element);
+  is_sink = GST_OBJECT_FLAG_IS_SET (element, GST_ELEMENT_IS_SINK);
+  GST_OBJECT_UNLOCK (element);
+
+  GST_DEBUG_OBJECT (element, "is a sink: %s", (is_sink) ? "yes" : "no");
+  return is_sink;
+}
+
+static gboolean
+element_has_property (GstElement * element, const gchar * pname, GType type)
+{
+  GParamSpec *pspec;
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element), pname);
+
+  if (pspec == NULL) {
+    GST_DEBUG_OBJECT (element, "no %s property", pname);
+    return FALSE;
+  }
+
+  if (type == G_TYPE_INVALID || type == pspec->value_type ||
+      g_type_is_a (pspec->value_type, type)) {
+    GST_DEBUG_OBJECT (element, "has %s property of type %s", pname,
+        (type == G_TYPE_INVALID) ? "any type" : g_type_name (type));
+    return TRUE;
+  }
+
+  GST_WARNING_OBJECT (element, "has %s property, but property is of type %s "
+      "and we expected it to be of type %s", pname,
+      g_type_name (pspec->value_type), g_type_name (type));
+
+  return FALSE;
+}
+
+typedef struct
+{
+  const gchar *prop_name;
+  GType prop_type;
+  gboolean need_sink;
+} FindPropertyHelper;
+
+static gint
+find_property (const GValue * item, FindPropertyHelper * helper)
+{
+  GstElement *element = g_value_get_object (item);
+  if (helper->need_sink && !element_is_sink (element)) {
+    return 1;
+  }
+
+  if (!element_has_property (element, helper->prop_name, helper->prop_type)) {
+    return 1;
+  }
+
+  GST_INFO_OBJECT (element, "found %s with %s property", helper->prop_name,
+      (helper->need_sink) ? "sink" : "element");
+  return 0;                     /* keep it */
+}
+
+/* FIXME: why not move these functions into core? */
+/* find a sink in the hierarchy with a property named @name. This function does
+ * not increase the refcount of the returned object and thus remains valid as
+ * long as the bin is valid. */
+static GstElement *
+gst_play_sink_find_property_sinks (GstPlaySink * playsink, GstElement * obj,
+    const gchar * name, GType expected_type)
+{
+  GstElement *result = NULL;
+  GstIterator *it;
+
+  if (element_has_property (obj, name, expected_type)) {
+    result = obj;
+  } else if (GST_IS_BIN (obj)) {
+    gboolean found;
+    GValue item = { 0, };
+    FindPropertyHelper helper = { name, expected_type, TRUE };
+
+    it = gst_bin_iterate_recurse (GST_BIN_CAST (obj));
+    found = gst_iterator_find_custom (it,
+        (GCompareFunc) find_property, &item, &helper);
+    gst_iterator_free (it);
+    if (found) {
+      result = g_value_get_object (&item);
+      /* we don't need the extra ref */
+      g_value_unset (&item);
+    }
+  }
+  return result;
+}
+
+/* find an object in the hierarchy with a property named @name */
+static GstElement *
+gst_play_sink_find_property (GstPlaySink * playsink, GstElement * obj,
+    const gchar * name, GType expected_type)
+{
+  GstElement *result = NULL;
+  GstIterator *it;
+
+  if (GST_IS_BIN (obj)) {
+    gboolean found;
+    GValue item = { 0, };
+    FindPropertyHelper helper = { name, expected_type, FALSE };
+
+    it = gst_bin_iterate_recurse (GST_BIN_CAST (obj));
+    found = gst_iterator_find_custom (it,
+        (GCompareFunc) find_property, &item, &helper);
+    gst_iterator_free (it);
+    if (found)
+      result = g_value_dup_object (&item);
+    g_value_unset (&item);
+  } else {
+    if (element_has_property (obj, name, expected_type)) {
+      result = obj;
+      gst_object_ref (obj);
+    }
+  }
+  return result;
+}
+
+static void
+do_async_start (GstPlaySink * playsink)
+{
+  GstMessage *message;
+
+  if (!playsink->need_async_start) {
+    GST_INFO_OBJECT (playsink, "no async_start needed");
+    return;
+  }
+
+  playsink->async_pending = TRUE;
+
+  GST_INFO_OBJECT (playsink, "Sending async_start message");
+  message = gst_message_new_async_start (GST_OBJECT_CAST (playsink));
+  GST_BIN_CLASS (gst_play_sink_parent_class)->handle_message (GST_BIN_CAST
+      (playsink), message);
+}
+
+static void
+do_async_done (GstPlaySink * playsink)
+{
+  GstMessage *message;
+
+  if (playsink->async_pending) {
+    GST_INFO_OBJECT (playsink, "Sending async_done message");
+    message = gst_message_new_async_done (GST_OBJECT_CAST (playsink), FALSE);
+    GST_BIN_CLASS (gst_play_sink_parent_class)->handle_message (GST_BIN_CAST
+        (playsink), message);
+
+    playsink->async_pending = FALSE;
+  }
+
+  playsink->need_async_start = FALSE;
+}
+
+/* try to change the state of an element. This function returns the element when
+ * the state change could be performed. When this function returns NULL an error
+ * occured and the element is unreffed if @unref is TRUE. */
+static GstElement *
+try_element (GstPlaySink * playsink, GstElement * element, gboolean unref)
+{
+  GstStateChangeReturn ret;
+
+  if (element) {
+    ret = gst_element_set_state (element, GST_STATE_READY);
+    if (ret == GST_STATE_CHANGE_FAILURE) {
+      GST_DEBUG_OBJECT (playsink, "failed state change..");
+      gst_element_set_state (element, GST_STATE_NULL);
+      if (unref)
+        gst_object_unref (element);
+      element = NULL;
+    }
+  }
+  return element;
+}
+
+/* make the element (bin) that contains the elements needed to perform
+ * video display. Only used for *raw* video streams.
+ *
+ *  +------------------------------------------------------------+
+ *  | vbin                                                       |
+ *  |      +-------+   +----------+   +----------+   +---------+ |
+ *  |      | queue |   |colorspace|   |videoscale|   |videosink| |
+ *  |   +-sink    src-sink       src-sink       src-sink       | |
+ *  |   |  +-------+   +----------+   +----------+   +---------+ |
+ * sink-+                                                        |
+ *  +------------------------------------------------------------+
+ *
+ */
+static GstPlayVideoDeinterlaceChain *
+gen_video_deinterlace_chain (GstPlaySink * playsink)
+{
+  GstPlayVideoDeinterlaceChain *chain;
+  GstBin *bin;
+  GstPad *pad;
+  GstElement *head = NULL, *prev = NULL;
+
+  chain = g_new0 (GstPlayVideoDeinterlaceChain, 1);
+  chain->chain.playsink = playsink;
+
+  GST_DEBUG_OBJECT (playsink, "making video deinterlace chain %p", chain);
+
+  /* create a bin to hold objects, as we create them we add them to this bin so
+   * that when something goes wrong we only need to unref the bin */
+  chain->chain.bin = gst_bin_new ("vdbin");
+  bin = GST_BIN_CAST (chain->chain.bin);
+  gst_object_ref_sink (bin);
+
+  GST_DEBUG_OBJECT (playsink, "creating " COLORSPACE);
+  chain->conv = gst_element_factory_make (COLORSPACE, "vdconv");
+  if (chain->conv == NULL) {
+    post_missing_element_message (playsink, COLORSPACE);
+    GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            COLORSPACE), ("video rendering might fail"));
+  } else {
+    gst_bin_add (bin, chain->conv);
+    head = chain->conv;
+    prev = chain->conv;
+  }
+
+  GST_DEBUG_OBJECT (playsink, "creating deinterlace");
+  chain->deinterlace = gst_element_factory_make ("deinterlace", "deinterlace");
+  if (chain->deinterlace == NULL) {
+    post_missing_element_message (playsink, "deinterlace");
+    GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "deinterlace"), ("deinterlacing won't work"));
+  } else {
+    gst_bin_add (bin, chain->deinterlace);
+    if (prev) {
+      if (!gst_element_link_pads_full (prev, "src", chain->deinterlace, "sink",
+              GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+        goto link_failed;
+    } else {
+      head = chain->deinterlace;
+    }
+    prev = chain->deinterlace;
+  }
+
+  if (head) {
+    pad = gst_element_get_static_pad (head, "sink");
+    chain->sinkpad = gst_ghost_pad_new ("sink", pad);
+    gst_object_unref (pad);
+  } else {
+    chain->sinkpad = gst_ghost_pad_new_no_target ("sink", GST_PAD_SINK);
+  }
+
+  if (prev) {
+    pad = gst_element_get_static_pad (prev, "src");
+    chain->srcpad = gst_ghost_pad_new ("src", pad);
+    gst_object_unref (pad);
+  } else {
+    chain->srcpad = gst_ghost_pad_new ("src", chain->sinkpad);
+  }
+
+  gst_element_add_pad (chain->chain.bin, chain->sinkpad);
+  gst_element_add_pad (chain->chain.bin, chain->srcpad);
+
+  return chain;
+
+link_failed:
+  {
+    GST_ELEMENT_ERROR (playsink, CORE, PAD,
+        (NULL), ("Failed to configure the video deinterlace chain."));
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+}
+
+/* make the element (bin) that contains the elements needed to perform
+ * video display.
+ *
+ *  +------------------------------------------------------------+
+ *  | vbin                                                       |
+ *  |      +-------+   +----------+   +----------+   +---------+ |
+ *  |      | queue |   |colorspace|   |videoscale|   |videosink| |
+ *  |   +-sink    src-sink       src-sink       src-sink       | |
+ *  |   |  +-------+   +----------+   +----------+   +---------+ |
+ * sink-+                                                        |
+ *  +------------------------------------------------------------+
+ *
+ */
+static GstPlayVideoChain *
+gen_video_chain (GstPlaySink * playsink, gboolean raw, gboolean async)
+{
+  GstPlayVideoChain *chain;
+  GstBin *bin;
+  GstPad *pad;
+  GstElement *head = NULL, *prev = NULL, *elem = NULL;
+
+  chain = g_new0 (GstPlayVideoChain, 1);
+  chain->chain.playsink = playsink;
+  chain->chain.raw = raw;
+
+  GST_DEBUG_OBJECT (playsink, "making video chain %p", chain);
+
+  if (playsink->video_sink) {
+    GST_DEBUG_OBJECT (playsink, "trying configured videosink");
+    chain->sink = try_element (playsink, playsink->video_sink, FALSE);
+  } else {
+    /* only try fallback if no specific sink was chosen */
+    if (chain->sink == NULL) {
+      GST_DEBUG_OBJECT (playsink, "trying autovideosink");
+      elem = gst_element_factory_make ("autovideosink", "videosink");
+      chain->sink = try_element (playsink, elem, TRUE);
+    }
+    if (chain->sink == NULL) {
+      /* if default sink from config.h is different then try it too */
+      if (strcmp (DEFAULT_VIDEOSINK, "autovideosink")) {
+        GST_DEBUG_OBJECT (playsink, "trying " DEFAULT_VIDEOSINK);
+        elem = gst_element_factory_make (DEFAULT_VIDEOSINK, "videosink");
+        chain->sink = try_element (playsink, elem, TRUE);
+      }
+    }
+    if (chain->sink)
+      playsink->video_sink = gst_object_ref (chain->sink);
+  }
+  if (chain->sink == NULL)
+    goto no_sinks;
+  head = chain->sink;
+
+  /* if we can disable async behaviour of the sink, we can avoid adding a
+   * queue for the audio chain. */
+  elem =
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "async",
+      G_TYPE_BOOLEAN);
+  if (elem) {
+    GST_DEBUG_OBJECT (playsink, "setting async property to %d on element %s",
+        async, GST_ELEMENT_NAME (elem));
+    g_object_set (elem, "async", async, NULL);
+    chain->async = async;
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no async property on the sink");
+    chain->async = TRUE;
+  }
+
+  /* find ts-offset element */
+  gst_object_replace ((GstObject **) & chain->ts_offset, (GstObject *)
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset",
+          G_TYPE_INT64));
+
+  /* create a bin to hold objects, as we create them we add them to this bin so
+   * that when something goes wrong we only need to unref the bin */
+  chain->chain.bin = gst_bin_new ("vbin");
+  bin = GST_BIN_CAST (chain->chain.bin);
+  gst_object_ref_sink (bin);
+  gst_bin_add (bin, chain->sink);
+
+  /* decouple decoder from sink, this improves playback quite a lot since the
+   * decoder can continue while the sink blocks for synchronisation. We don't
+   * need a lot of buffers as this consumes a lot of memory and we don't want
+   * too little because else we would be context switching too quickly. */
+  chain->queue = gst_element_factory_make ("queue", "vqueue");
+  if (chain->queue == NULL) {
+    post_missing_element_message (playsink, "queue");
+    GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "queue"), ("video rendering might be suboptimal"));
+    head = chain->sink;
+    prev = NULL;
+  } else {
+    g_object_set (G_OBJECT (chain->queue), "max-size-buffers", 3,
+        "max-size-bytes", 0, "max-size-time", (gint64) 0, "silent", TRUE, NULL);
+    gst_bin_add (bin, chain->queue);
+    head = prev = chain->queue;
+  }
+
+  if (!(playsink->flags & GST_PLAY_FLAG_NATIVE_VIDEO)) {
+    GST_DEBUG_OBJECT (playsink, "creating videoconverter");
+    chain->conv =
+        g_object_new (GST_TYPE_PLAY_SINK_VIDEO_CONVERT, "name", "vconv", NULL);
+    gst_bin_add (bin, chain->conv);
+    if (prev) {
+      if (!gst_element_link_pads_full (prev, "src", chain->conv, "sink",
+              GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+        goto link_failed;
+    } else {
+      head = chain->conv;
+    }
+    prev = chain->conv;
+  }
+
+  if (prev) {
+    GST_DEBUG_OBJECT (playsink, "linking to sink");
+    if (!gst_element_link_pads_full (prev, "src", chain->sink, NULL,
+            GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+      goto link_failed;
+  }
+
+  pad = gst_element_get_static_pad (head, "sink");
+  chain->sinkpad = gst_ghost_pad_new ("sink", pad);
+  gst_object_unref (pad);
+
+  gst_element_add_pad (chain->chain.bin, chain->sinkpad);
+
+  return chain;
+
+  /* ERRORS */
+no_sinks:
+  {
+    if (!elem && !playsink->video_sink) {
+      post_missing_element_message (playsink, "autovideosink");
+      if (strcmp (DEFAULT_VIDEOSINK, "autovideosink")) {
+        post_missing_element_message (playsink, DEFAULT_VIDEOSINK);
+        GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+            (_("Both autovideosink and %s elements are missing."),
+                DEFAULT_VIDEOSINK), (NULL));
+      } else {
+        GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+            (_("The autovideosink element is missing.")), (NULL));
+      }
+    } else {
+      if (playsink->video_sink) {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("Configured videosink %s is not working."),
+                GST_ELEMENT_NAME (playsink->video_sink)), (NULL));
+      } else if (strcmp (DEFAULT_VIDEOSINK, "autovideosink")) {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("Both autovideosink and %s elements are not working."),
+                DEFAULT_VIDEOSINK), (NULL));
+      } else {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("The autovideosink element is not working.")), (NULL));
+      }
+    }
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+link_failed:
+  {
+    GST_ELEMENT_ERROR (playsink, CORE, PAD,
+        (NULL), ("Failed to configure the video sink."));
+    /* checking sink made it READY */
+    gst_element_set_state (chain->sink, GST_STATE_NULL);
+    /* Remove chain from the bin to allow reuse later */
+    gst_bin_remove (bin, chain->sink);
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+}
+
+static gboolean
+setup_video_chain (GstPlaySink * playsink, gboolean raw, gboolean async)
+{
+  GstElement *elem;
+  GstPlayVideoChain *chain;
+  GstStateChangeReturn ret;
+
+  chain = playsink->videochain;
+
+  chain->chain.raw = raw;
+
+  /* if the chain was active we don't do anything */
+  if (GST_PLAY_CHAIN (chain)->activated == TRUE)
+    return TRUE;
+
+  /* try to set the sink element to READY again */
+  ret = gst_element_set_state (chain->sink, GST_STATE_READY);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return FALSE;
+
+  /* find ts-offset element */
+
+  gst_object_replace ((GstObject **) & chain->ts_offset, (GstObject *)
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset",
+          G_TYPE_INT64));
+
+  /* if we can disable async behaviour of the sink, we can avoid adding a
+   * queue for the audio chain. */
+  elem =
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "async",
+      G_TYPE_BOOLEAN);
+  if (elem) {
+    GST_DEBUG_OBJECT (playsink, "setting async property to %d on element %s",
+        async, GST_ELEMENT_NAME (elem));
+    g_object_set (elem, "async", async, NULL);
+    chain->async = async;
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no async property on the sink");
+    chain->async = TRUE;
+  }
+  return TRUE;
+}
+
+/* make an element for playback of video with subtitles embedded.
+ * Only used for *raw* video streams.
+ *
+ *  +--------------------------------------------+
+ *  | tbin                                       |
+ *  |     +--------+      +-----------------+    |
+ *  |     | queue  |      | subtitleoverlay |    |
+ * video--src     sink---video_sink         |    |
+ *  |     +--------+     |                src--src
+ * text------------------text_sink          |    |
+ *  |                     +-----------------+    |
+ *  +--------------------------------------------+
+ *
+ */
+static GstPlayTextChain *
+gen_text_chain (GstPlaySink * playsink)
+{
+  GstPlayTextChain *chain;
+  GstBin *bin;
+  GstElement *elem;
+  GstPad *videosinkpad, *textsinkpad, *srcpad;
+
+  chain = g_new0 (GstPlayTextChain, 1);
+  chain->chain.playsink = playsink;
+
+  GST_DEBUG_OBJECT (playsink, "making text chain %p", chain);
+
+  chain->chain.bin = gst_bin_new ("tbin");
+  bin = GST_BIN_CAST (chain->chain.bin);
+  gst_object_ref_sink (bin);
+
+  videosinkpad = textsinkpad = srcpad = NULL;
+
+  /* first try to hook the text pad to the custom sink */
+  if (playsink->text_sink) {
+    GST_DEBUG_OBJECT (playsink, "trying configured textsink");
+    chain->sink = try_element (playsink, playsink->text_sink, FALSE);
+    if (chain->sink) {
+      elem =
+          gst_play_sink_find_property_sinks (playsink, chain->sink, "async",
+          G_TYPE_BOOLEAN);
+      if (elem) {
+        /* make sure the sparse subtitles don't participate in the preroll */
+        g_object_set (elem, "async", FALSE, NULL);
+        GST_DEBUG_OBJECT (playsink, "adding custom text sink");
+        gst_bin_add (bin, chain->sink);
+        /* NOTE streamsynchronizer needs streams decoupled */
+        /* make a little queue */
+        chain->queue = gst_element_factory_make ("queue", "subqueue");
+        if (chain->queue == NULL) {
+          post_missing_element_message (playsink, "queue");
+          GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+              (_("Missing element '%s' - check your GStreamer installation."),
+                  "queue"), ("rendering might be suboptimal"));
+        } else {
+          g_object_set (G_OBJECT (chain->queue), "max-size-buffers", 3,
+              "max-size-bytes", 0, "max-size-time", (gint64) 0,
+              "silent", TRUE, NULL);
+          gst_bin_add (bin, chain->queue);
+        }
+        /* we have a custom sink, this will be our textsinkpad */
+        if (gst_element_link_pads_full (chain->queue, "src", chain->sink,
+                "sink", GST_PAD_LINK_CHECK_TEMPLATE_CAPS)) {
+          /* we're all fine now and we can add the sink to the chain */
+          GST_DEBUG_OBJECT (playsink, "using custom text sink");
+          textsinkpad = gst_element_get_static_pad (chain->queue, "sink");
+        } else {
+          GST_WARNING_OBJECT (playsink,
+              "can't find a sink pad on custom text sink");
+          gst_bin_remove (bin, chain->sink);
+          gst_bin_remove (bin, chain->queue);
+          chain->sink = NULL;
+          chain->queue = NULL;
+        }
+        /* try to set sync to true but it's no biggie when we can't */
+        if ((elem =
+                gst_play_sink_find_property_sinks (playsink, chain->sink,
+                    "sync", G_TYPE_BOOLEAN)))
+          g_object_set (elem, "sync", TRUE, NULL);
+
+        if (!textsinkpad)
+          gst_bin_remove (bin, chain->sink);
+      } else {
+        GST_WARNING_OBJECT (playsink,
+            "can't find async property in custom text sink");
+      }
+    }
+    if (textsinkpad == NULL) {
+      GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+          (_("Custom text sink element is not usable.")),
+          ("fallback to default textoverlay"));
+    }
+  }
+
+  if (textsinkpad == NULL) {
+    if (!(playsink->flags & GST_PLAY_FLAG_NATIVE_VIDEO)) {
+      /* make a little queue */
+      chain->queue = gst_element_factory_make ("queue", "vqueue");
+      if (chain->queue == NULL) {
+        post_missing_element_message (playsink, "queue");
+        GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+            (_("Missing element '%s' - check your GStreamer installation."),
+                "queue"), ("video rendering might be suboptimal"));
+      } else {
+        g_object_set (G_OBJECT (chain->queue), "max-size-buffers", 3,
+            "max-size-bytes", 0, "max-size-time", (gint64) 0,
+            "silent", TRUE, NULL);
+        gst_bin_add (bin, chain->queue);
+        videosinkpad = gst_element_get_static_pad (chain->queue, "sink");
+      }
+
+      chain->overlay =
+          gst_element_factory_make ("subtitleoverlay", "suboverlay");
+      if (chain->overlay == NULL) {
+        post_missing_element_message (playsink, "subtitleoverlay");
+        GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+            (_("Missing element '%s' - check your GStreamer installation."),
+                "subtitleoverlay"), ("subtitle rendering disabled"));
+      } else {
+        GstElement *element;
+
+        gst_bin_add (bin, chain->overlay);
+
+        g_object_set (G_OBJECT (chain->overlay), "silent", FALSE, NULL);
+        if (playsink->font_desc) {
+          g_object_set (G_OBJECT (chain->overlay), "font-desc",
+              playsink->font_desc, NULL);
+        }
+        if (playsink->subtitle_encoding) {
+          g_object_set (G_OBJECT (chain->overlay), "subtitle-encoding",
+              playsink->subtitle_encoding, NULL);
+        }
+
+        gst_element_link_pads_full (chain->queue, "src", chain->overlay,
+            "video_sink", GST_PAD_LINK_CHECK_TEMPLATE_CAPS);
+
+        /* make another little queue to decouple streams */
+        element = gst_element_factory_make ("queue", "subqueue");
+        if (element == NULL) {
+          post_missing_element_message (playsink, "queue");
+          GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+              (_("Missing element '%s' - check your GStreamer installation."),
+                  "queue"), ("rendering might be suboptimal"));
+        } else {
+          g_object_set (G_OBJECT (element), "max-size-buffers", 3,
+              "max-size-bytes", 0, "max-size-time", (gint64) 0,
+              "silent", TRUE, NULL);
+          gst_bin_add (bin, element);
+          gst_element_link_pads_full (element, "src", chain->overlay,
+              "subtitle_sink", GST_PAD_LINK_CHECK_TEMPLATE_CAPS);
+          textsinkpad = gst_element_get_static_pad (element, "sink");
+          srcpad = gst_element_get_static_pad (chain->overlay, "src");
+        }
+      }
+    }
+  }
+
+  if (videosinkpad == NULL) {
+    /* if we still don't have a videosink, we don't have an overlay. the only
+     * thing we can do is insert an identity and ghost the src
+     * and sink pads. */
+    chain->identity = gst_element_factory_make ("identity", "tidentity");
+    if (chain->identity == NULL) {
+      post_missing_element_message (playsink, "identity");
+      GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+          (_("Missing element '%s' - check your GStreamer installation."),
+              "identity"), (NULL));
+    } else {
+      g_object_set (chain->identity, "signal-handoffs", FALSE, NULL);
+      g_object_set (chain->identity, "silent", TRUE, NULL);
+      gst_bin_add (bin, chain->identity);
+      srcpad = gst_element_get_static_pad (chain->identity, "src");
+      videosinkpad = gst_element_get_static_pad (chain->identity, "sink");
+    }
+  }
+
+  /* expose the ghostpads */
+  if (videosinkpad) {
+    chain->videosinkpad = gst_ghost_pad_new ("sink", videosinkpad);
+    gst_object_unref (videosinkpad);
+    gst_element_add_pad (chain->chain.bin, chain->videosinkpad);
+  }
+  if (textsinkpad) {
+    chain->textsinkpad = gst_ghost_pad_new ("text_sink", textsinkpad);
+    gst_object_unref (textsinkpad);
+    gst_element_add_pad (chain->chain.bin, chain->textsinkpad);
+  }
+  if (srcpad) {
+    chain->srcpad = gst_ghost_pad_new ("src", srcpad);
+    gst_object_unref (srcpad);
+    gst_element_add_pad (chain->chain.bin, chain->srcpad);
+  }
+
+  return chain;
+}
+
+static void
+notify_volume_cb (GObject * object, GParamSpec * pspec, GstPlaySink * playsink)
+{
+  gdouble vol;
+
+  g_object_get (object, "volume", &vol, NULL);
+  playsink->volume = vol;
+
+  g_object_notify (G_OBJECT (playsink), "volume");
+}
+
+static void
+notify_mute_cb (GObject * object, GParamSpec * pspec, GstPlaySink * playsink)
+{
+  gboolean mute;
+
+  g_object_get (object, "mute", &mute, NULL);
+  playsink->mute = mute;
+
+  g_object_notify (G_OBJECT (playsink), "mute");
+}
+
+/* make the chain that contains the elements needed to perform
+ * audio playback.
+ *
+ * We add a tee as the first element so that we can link the visualisation chain
+ * to it when requested.
+ *
+ *  +-------------------------------------------------------------+
+ *  | abin                                                        |
+ *  |      +---------+   +----------+   +---------+   +---------+ |
+ *  |      |audioconv|   |audioscale|   | volume  |   |audiosink| |
+ *  |   +-srck      src-sink       src-sink      src-sink       | |
+ *  |   |  +---------+   +----------+   +---------+   +---------+ |
+ * sink-+                                                         |
+ *  +-------------------------------------------------------------+
+ */
+static GstPlayAudioChain *
+gen_audio_chain (GstPlaySink * playsink, gboolean raw)
+{
+  GstPlayAudioChain *chain;
+  GstBin *bin;
+  gboolean have_volume;
+  GstPad *pad;
+  GstElement *head, *prev, *elem = NULL;
+
+  chain = g_new0 (GstPlayAudioChain, 1);
+  chain->chain.playsink = playsink;
+  chain->chain.raw = raw;
+
+  GST_DEBUG_OBJECT (playsink, "making audio chain %p", chain);
+
+  if (playsink->audio_sink) {
+    GST_DEBUG_OBJECT (playsink, "trying configured audiosink %" GST_PTR_FORMAT,
+        playsink->audio_sink);
+    chain->sink = try_element (playsink, playsink->audio_sink, FALSE);
+  } else {
+    /* only try fallback if no specific sink was chosen */
+    if (chain->sink == NULL) {
+      GST_DEBUG_OBJECT (playsink, "trying autoaudiosink");
+      elem = gst_element_factory_make ("autoaudiosink", "audiosink");
+      chain->sink = try_element (playsink, elem, TRUE);
+    }
+    if (chain->sink == NULL) {
+      /* if default sink from config.h is different then try it too */
+      if (strcmp (DEFAULT_AUDIOSINK, "autoaudiosink")) {
+        GST_DEBUG_OBJECT (playsink, "trying " DEFAULT_AUDIOSINK);
+        elem = gst_element_factory_make (DEFAULT_AUDIOSINK, "audiosink");
+        chain->sink = try_element (playsink, elem, TRUE);
+      }
+    }
+    if (chain->sink)
+      playsink->audio_sink = gst_object_ref (chain->sink);
+  }
+  if (chain->sink == NULL)
+    goto no_sinks;
+
+  chain->chain.bin = gst_bin_new ("abin");
+  bin = GST_BIN_CAST (chain->chain.bin);
+  gst_object_ref_sink (bin);
+  gst_bin_add (bin, chain->sink);
+
+  /* we have to add a queue when we need to decouple for the video sink in
+   * visualisations and for streamsynchronizer */
+  GST_DEBUG_OBJECT (playsink, "adding audio queue");
+  chain->queue = gst_element_factory_make ("queue", "aqueue");
+  if (chain->queue == NULL) {
+    post_missing_element_message (playsink, "queue");
+    GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "queue"), ("audio playback and visualizations might not work"));
+    head = chain->sink;
+    prev = NULL;
+  } else {
+    g_object_set (chain->queue, "silent", TRUE, NULL);
+    gst_bin_add (bin, chain->queue);
+    prev = head = chain->queue;
+  }
+
+  /* find ts-offset element */
+  gst_object_replace ((GstObject **) & chain->ts_offset, (GstObject *)
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset",
+          G_TYPE_INT64));
+
+  /* check if the sink, or something within the sink, has the volume property.
+   * If it does we don't need to add a volume element.  */
+  elem =
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "volume",
+      G_TYPE_DOUBLE);
+  if (elem) {
+    chain->volume = elem;
+
+    g_signal_connect (chain->volume, "notify::volume",
+        G_CALLBACK (notify_volume_cb), playsink);
+
+    GST_DEBUG_OBJECT (playsink, "the sink has a volume property");
+    have_volume = TRUE;
+    chain->sink_volume = TRUE;
+    /* if the sink also has a mute property we can use this as well. We'll only
+     * use the mute property if there is a volume property. We can simulate the
+     * mute with the volume otherwise. */
+    chain->mute =
+        gst_play_sink_find_property_sinks (playsink, chain->sink, "mute",
+        G_TYPE_BOOLEAN);
+    if (chain->mute) {
+      GST_DEBUG_OBJECT (playsink, "the sink has a mute property");
+      g_signal_connect (chain->mute, "notify::mute",
+          G_CALLBACK (notify_mute_cb), playsink);
+    }
+    /* use the sink to control the volume and mute */
+    if (playsink->volume_changed) {
+      g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL);
+      playsink->volume_changed = FALSE;
+    }
+    if (playsink->mute_changed) {
+      if (chain->mute) {
+        g_object_set (chain->mute, "mute", playsink->mute, NULL);
+      } else {
+        if (playsink->mute)
+          g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL);
+      }
+      playsink->mute_changed = FALSE;
+    }
+  } else {
+    /* no volume, we need to add a volume element when we can */
+    GST_DEBUG_OBJECT (playsink, "the sink has no volume property");
+    have_volume = FALSE;
+    chain->sink_volume = FALSE;
+  }
+
+  if (!(playsink->flags & GST_PLAY_FLAG_NATIVE_AUDIO) || (!have_volume
+          && playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME)) {
+    GST_DEBUG_OBJECT (playsink, "creating audioconvert");
+    chain->conv =
+        g_object_new (GST_TYPE_PLAY_SINK_AUDIO_CONVERT, "name", "aconv", NULL);
+    gst_bin_add (bin, chain->conv);
+    if (prev) {
+      if (!gst_element_link_pads_full (prev, "src", chain->conv, "sink",
+              GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+        goto link_failed;
+    } else {
+      head = chain->conv;
+    }
+    prev = chain->conv;
+
+    GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv)->use_converters =
+        !(playsink->flags & GST_PLAY_FLAG_NATIVE_AUDIO);
+    GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv)->use_volume = (!have_volume
+        && playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME);
+
+    if (!have_volume && playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME) {
+      GstPlaySinkAudioConvert *conv =
+          GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv);
+
+      if (conv->volume) {
+        chain->volume = conv->volume;
+        have_volume = TRUE;
+
+        g_signal_connect (chain->volume, "notify::volume",
+            G_CALLBACK (notify_volume_cb), playsink);
+
+        /* volume also has the mute property */
+        chain->mute = chain->volume;
+        g_signal_connect (chain->mute, "notify::mute",
+            G_CALLBACK (notify_mute_cb), playsink);
+
+        /* configure with the latest volume and mute */
+        g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume,
+            NULL);
+        g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL);
+      }
+    }
+  }
+
+  if (prev) {
+    /* we only have to link to the previous element if we have something in
+     * front of the sink */
+    GST_DEBUG_OBJECT (playsink, "linking to sink");
+    if (!gst_element_link_pads_full (prev, "src", chain->sink, NULL,
+            GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+      goto link_failed;
+  }
+
+  /* post a warning if we have no way to configure the volume */
+  if (!have_volume) {
+    GST_ELEMENT_WARNING (playsink, STREAM, NOT_IMPLEMENTED,
+        (_("No volume control found")), ("Volume/mute is not available"));
+  }
+
+  /* and ghost the sinkpad of the headmost element */
+  GST_DEBUG_OBJECT (playsink, "ghosting sink pad");
+  pad = gst_element_get_static_pad (head, "sink");
+  chain->sinkpad = gst_ghost_pad_new ("sink", pad);
+  gst_object_unref (pad);
+  gst_element_add_pad (chain->chain.bin, chain->sinkpad);
+
+  return chain;
+
+  /* ERRORS */
+no_sinks:
+  {
+    if (!elem && !playsink->audio_sink) {
+      post_missing_element_message (playsink, "autoaudiosink");
+      if (strcmp (DEFAULT_AUDIOSINK, "autoaudiosink")) {
+        post_missing_element_message (playsink, DEFAULT_AUDIOSINK);
+        GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+            (_("Both autoaudiosink and %s elements are missing."),
+                DEFAULT_AUDIOSINK), (NULL));
+      } else {
+        GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+            (_("The autoaudiosink element is missing.")), (NULL));
+      }
+    } else {
+      if (playsink->audio_sink) {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("Configured audiosink %s is not working."),
+                GST_ELEMENT_NAME (playsink->audio_sink)), (NULL));
+      } else if (strcmp (DEFAULT_AUDIOSINK, "autoaudiosink")) {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("Both autoaudiosink and %s elements are not working."),
+                DEFAULT_AUDIOSINK), (NULL));
+      } else {
+        GST_ELEMENT_ERROR (playsink, CORE, STATE_CHANGE,
+            (_("The autoaudiosink element is not working.")), (NULL));
+      }
+    }
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+link_failed:
+  {
+    GST_ELEMENT_ERROR (playsink, CORE, PAD,
+        (NULL), ("Failed to configure the audio sink."));
+    /* checking sink made it READY */
+    gst_element_set_state (chain->sink, GST_STATE_NULL);
+    /* Remove chain from the bin to allow reuse later */
+    gst_bin_remove (bin, chain->sink);
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+}
+
+static gboolean
+setup_audio_chain (GstPlaySink * playsink, gboolean raw)
+{
+  GstElement *elem;
+  GstPlayAudioChain *chain;
+  GstStateChangeReturn ret;
+
+  chain = playsink->audiochain;
+
+  chain->chain.raw = raw;
+
+  /* if the chain was active we don't do anything */
+  if (GST_PLAY_CHAIN (chain)->activated == TRUE)
+    return TRUE;
+
+  /* try to set the sink element to READY again */
+  ret = gst_element_set_state (chain->sink, GST_STATE_READY);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return FALSE;
+
+  /* find ts-offset element */
+  gst_object_replace ((GstObject **) & chain->ts_offset, (GstObject *)
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset",
+          G_TYPE_INT64));
+
+  /* check if the sink, or something within the sink, has the volume property.
+   * If it does we don't need to add a volume element.  */
+  elem =
+      gst_play_sink_find_property_sinks (playsink, chain->sink, "volume",
+      G_TYPE_DOUBLE);
+  if (elem) {
+    chain->volume = elem;
+
+    if (playsink->volume_changed) {
+      GST_DEBUG_OBJECT (playsink, "the sink has a volume property, setting %f",
+          playsink->volume);
+      /* use the sink to control the volume */
+      g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL);
+      playsink->volume_changed = FALSE;
+    }
+
+    g_signal_connect (chain->volume, "notify::volume",
+        G_CALLBACK (notify_volume_cb), playsink);
+    /* if the sink also has a mute property we can use this as well. We'll only
+     * use the mute property if there is a volume property. We can simulate the
+     * mute with the volume otherwise. */
+    chain->mute =
+        gst_play_sink_find_property_sinks (playsink, chain->sink, "mute",
+        G_TYPE_BOOLEAN);
+    if (chain->mute) {
+      GST_DEBUG_OBJECT (playsink, "the sink has a mute property");
+      g_signal_connect (chain->mute, "notify::mute",
+          G_CALLBACK (notify_mute_cb), playsink);
+    }
+
+    GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv)->use_volume = FALSE;
+  } else {
+    GstPlaySinkAudioConvert *conv =
+        GST_PLAY_SINK_AUDIO_CONVERT_CAST (chain->conv);
+
+    /* no volume, we need to add a volume element when we can */
+    conv->use_volume = TRUE;
+    GST_DEBUG_OBJECT (playsink, "the sink has no volume property");
+
+    /* Disconnect signals */
+    disconnect_chain (chain, playsink);
+
+    if (conv->volume) {
+      chain->volume = conv->volume;
+      chain->mute = chain->volume;
+
+      g_signal_connect (chain->volume, "notify::volume",
+          G_CALLBACK (notify_volume_cb), playsink);
+
+      g_signal_connect (chain->mute, "notify::mute",
+          G_CALLBACK (notify_mute_cb), playsink);
+
+      /* configure with the latest volume and mute */
+      g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL);
+      g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL);
+    }
+
+    GST_DEBUG_OBJECT (playsink, "reusing existing volume element");
+  }
+  return TRUE;
+}
+
+/*
+ *  +-------------------------------------------------------------------+
+ *  | visbin                                                            |
+ *  |      +----------+   +------------+   +----------+   +-------+     |
+ *  |      | visqueue |   | audioconv  |   | audiores |   |  vis  |     |
+ *  |   +-sink       src-sink + samp  src-sink       src-sink    src-+  |
+ *  |   |  +----------+   +------------+   +----------+   +-------+  |  |
+ * sink-+                                                            +-src
+ *  +-------------------------------------------------------------------+
+ *
+ */
+static GstPlayVisChain *
+gen_vis_chain (GstPlaySink * playsink)
+{
+  GstPlayVisChain *chain;
+  GstBin *bin;
+  gboolean res;
+  GstPad *pad;
+  GstElement *elem;
+
+  chain = g_new0 (GstPlayVisChain, 1);
+  chain->chain.playsink = playsink;
+
+  GST_DEBUG_OBJECT (playsink, "making vis chain %p", chain);
+
+  chain->chain.bin = gst_bin_new ("visbin");
+  bin = GST_BIN_CAST (chain->chain.bin);
+  gst_object_ref_sink (bin);
+
+  /* we're queuing raw audio here, we can remove this queue when we can disable
+   * async behaviour in the video sink. */
+  chain->queue = gst_element_factory_make ("queue", "visqueue");
+  if (chain->queue == NULL)
+    goto no_queue;
+  g_object_set (chain->queue, "silent", TRUE, NULL);
+  gst_bin_add (bin, chain->queue);
+
+  chain->conv = gst_element_factory_make ("audioconvert", "aconv");
+  if (chain->conv == NULL)
+    goto no_audioconvert;
+  gst_bin_add (bin, chain->conv);
+
+  chain->resample = gst_element_factory_make ("audioresample", "aresample");
+  if (chain->resample == NULL)
+    goto no_audioresample;
+  gst_bin_add (bin, chain->resample);
+
+  /* this pad will be used for blocking the dataflow and switching the vis
+   * plugin */
+  chain->blockpad = gst_element_get_static_pad (chain->resample, "src");
+
+  if (playsink->visualisation) {
+    GST_DEBUG_OBJECT (playsink, "trying configure vis");
+    chain->vis = try_element (playsink, playsink->visualisation, FALSE);
+  }
+  if (chain->vis == NULL) {
+    GST_DEBUG_OBJECT (playsink, "trying goom");
+    elem = gst_element_factory_make ("goom", "vis");
+    chain->vis = try_element (playsink, elem, TRUE);
+  }
+  if (chain->vis == NULL)
+    goto no_goom;
+
+  gst_bin_add (bin, chain->vis);
+
+  res = gst_element_link_pads_full (chain->queue, "src", chain->conv, "sink",
+      GST_PAD_LINK_CHECK_NOTHING);
+  res &=
+      gst_element_link_pads_full (chain->conv, "src", chain->resample, "sink",
+      GST_PAD_LINK_CHECK_NOTHING);
+  res &=
+      gst_element_link_pads_full (chain->resample, "src", chain->vis, "sink",
+      GST_PAD_LINK_CHECK_NOTHING);
+  if (!res)
+    goto link_failed;
+
+  chain->vissinkpad = gst_element_get_static_pad (chain->vis, "sink");
+  chain->vissrcpad = gst_element_get_static_pad (chain->vis, "src");
+
+  pad = gst_element_get_static_pad (chain->queue, "sink");
+  chain->sinkpad = gst_ghost_pad_new ("sink", pad);
+  gst_object_unref (pad);
+  gst_element_add_pad (chain->chain.bin, chain->sinkpad);
+
+  chain->srcpad = gst_ghost_pad_new ("src", chain->vissrcpad);
+  gst_element_add_pad (chain->chain.bin, chain->srcpad);
+
+  return chain;
+
+  /* ERRORS */
+no_queue:
+  {
+    post_missing_element_message (playsink, "queue");
+    GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "queue"), (NULL));
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+no_audioconvert:
+  {
+    post_missing_element_message (playsink, "audioconvert");
+    GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "audioconvert"), ("possibly a liboil version mismatch?"));
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+no_audioresample:
+  {
+    post_missing_element_message (playsink, "audioresample");
+    GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "audioresample"), (NULL));
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+no_goom:
+  {
+    post_missing_element_message (playsink, "goom");
+    GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+        (_("Missing element '%s' - check your GStreamer installation."),
+            "goom"), (NULL));
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+link_failed:
+  {
+    GST_ELEMENT_ERROR (playsink, CORE, PAD,
+        (NULL), ("Failed to configure the visualisation element."));
+    /* element made it to READY */
+    gst_element_set_state (chain->vis, GST_STATE_NULL);
+    free_chain ((GstPlayChain *) chain);
+    return NULL;
+  }
+}
+
+/* this function is called when all the request pads are requested and when we
+ * have to construct the final pipeline. Based on the flags we construct the
+ * final output pipelines.
+ */
+gboolean
+gst_play_sink_reconfigure (GstPlaySink * playsink)
+{
+  GstPlayFlags flags;
+  gboolean need_audio, need_video, need_deinterlace, need_vis, need_text;
+
+  GST_DEBUG_OBJECT (playsink, "reconfiguring");
+
+  /* assume we need nothing */
+  need_audio = need_video = need_deinterlace = need_vis = need_text = FALSE;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  GST_OBJECT_LOCK (playsink);
+  /* get flags, there are protected with the object lock */
+  flags = playsink->flags;
+  GST_OBJECT_UNLOCK (playsink);
+
+  /* figure out which components we need */
+  if (flags & GST_PLAY_FLAG_TEXT && playsink->text_pad) {
+    /* we have subtitles and we are requested to show it */
+    need_text = TRUE;
+  }
+
+  if (((flags & GST_PLAY_FLAG_VIDEO)
+          || (flags & GST_PLAY_FLAG_NATIVE_VIDEO)) && playsink->video_pad) {
+    /* we have video and we are requested to show it */
+    need_video = TRUE;
+
+    /* we only deinterlace if native video is not requested and
+     * we have raw video */
+    if ((flags & GST_PLAY_FLAG_DEINTERLACE)
+        && !(flags & GST_PLAY_FLAG_NATIVE_VIDEO) && playsink->video_pad_raw)
+      need_deinterlace = TRUE;
+  }
+
+  if (playsink->audio_pad) {
+    if ((flags & GST_PLAY_FLAG_AUDIO) || (flags & GST_PLAY_FLAG_NATIVE_AUDIO)) {
+      need_audio = TRUE;
+    }
+    if (playsink->audio_pad_raw) {
+      /* only can do vis with raw uncompressed audio */
+      if (flags & GST_PLAY_FLAG_VIS && !need_video) {
+        /* also add video when we add visualisation */
+        need_video = TRUE;
+        need_vis = TRUE;
+      }
+    }
+  }
+
+  /* we have a text_pad and we need text rendering, in this case we need a
+   * video_pad to combine the video with the text or visualizations */
+  if (need_text && !need_video) {
+    if (playsink->video_pad) {
+      need_video = TRUE;
+    } else if (need_audio) {
+      GST_ELEMENT_WARNING (playsink, STREAM, FORMAT,
+          (_("Can't play a text file without video or visualizations.")),
+          ("Have text pad but no video pad or visualizations"));
+      need_text = FALSE;
+    } else {
+      GST_ELEMENT_ERROR (playsink, STREAM, FORMAT,
+          (_("Can't play a text file without video or visualizations.")),
+          ("Have text pad but no video pad or visualizations"));
+      GST_PLAY_SINK_UNLOCK (playsink);
+      return FALSE;
+    }
+  }
+
+  GST_DEBUG_OBJECT (playsink, "audio:%d, video:%d, vis:%d, text:%d", need_audio,
+      need_video, need_vis, need_text);
+
+  /* set up video pipeline */
+  if (need_video) {
+    gboolean raw, async;
+
+    /* we need a raw sink when we do vis or when we have a raw pad */
+    raw = need_vis ? TRUE : playsink->video_pad_raw;
+    /* we try to set the sink async=FALSE when we need vis, this way we can
+     * avoid a queue in the audio chain. */
+    async = !need_vis;
+
+    GST_DEBUG_OBJECT (playsink, "adding video, raw %d",
+        playsink->video_pad_raw);
+
+    if (playsink->videochain) {
+      /* try to reactivate the chain */
+      if (!setup_video_chain (playsink, raw, async)) {
+        if (playsink->video_sinkpad_stream_synchronizer) {
+          gst_element_release_request_pad (GST_ELEMENT_CAST
+              (playsink->stream_synchronizer),
+              playsink->video_sinkpad_stream_synchronizer);
+          gst_object_unref (playsink->video_sinkpad_stream_synchronizer);
+          playsink->video_sinkpad_stream_synchronizer = NULL;
+          gst_object_unref (playsink->video_srcpad_stream_synchronizer);
+          playsink->video_srcpad_stream_synchronizer = NULL;
+        }
+
+        add_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+
+        /* Remove the sink from the bin to keep its state
+         * and unparent it to allow reuse */
+        if (playsink->videochain->sink)
+          gst_bin_remove (GST_BIN_CAST (playsink->videochain->chain.bin),
+              playsink->videochain->sink);
+
+        activate_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+        free_chain ((GstPlayChain *) playsink->videochain);
+        playsink->videochain = NULL;
+      }
+    }
+
+    if (!playsink->videochain)
+      playsink->videochain = gen_video_chain (playsink, raw, async);
+    if (!playsink->videochain)
+      goto no_chain;
+
+    if (!playsink->video_sinkpad_stream_synchronizer) {
+      GValue item = { 0, };
+      GstIterator *it;
+
+      playsink->video_sinkpad_stream_synchronizer =
+          gst_element_get_request_pad (GST_ELEMENT_CAST
+          (playsink->stream_synchronizer), "sink_%d");
+      it = gst_pad_iterate_internal_links
+          (playsink->video_sinkpad_stream_synchronizer);
+      g_assert (it);
+      gst_iterator_next (it, &item);
+      playsink->video_srcpad_stream_synchronizer = g_value_dup_object (&item);
+      g_value_unset (&item);
+      g_assert (playsink->video_srcpad_stream_synchronizer);
+      gst_iterator_free (it);
+    }
+
+    if (playsink->video_pad)
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->video_pad),
+          playsink->video_sinkpad_stream_synchronizer);
+
+    if (need_deinterlace) {
+      if (!playsink->videodeinterlacechain)
+        playsink->videodeinterlacechain =
+            gen_video_deinterlace_chain (playsink);
+      if (!playsink->videodeinterlacechain)
+        goto no_chain;
+
+      GST_DEBUG_OBJECT (playsink, "adding video deinterlace chain");
+
+      GST_DEBUG_OBJECT (playsink, "setting up deinterlacing chain");
+
+      add_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), TRUE);
+      activate_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), TRUE);
+
+      gst_pad_link_full (playsink->video_srcpad_stream_synchronizer,
+          playsink->videodeinterlacechain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+    } else {
+      if (playsink->videodeinterlacechain) {
+        add_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), FALSE);
+        activate_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain),
+            FALSE);
+      }
+    }
+
+    GST_DEBUG_OBJECT (playsink, "adding video chain");
+    add_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
+    activate_chain (GST_PLAY_CHAIN (playsink->videochain), TRUE);
+    /* if we are not part of vis or subtitles, set the ghostpad target */
+    if (!need_vis && !need_text && (!playsink->textchain
+            || !playsink->text_pad)) {
+      GST_DEBUG_OBJECT (playsink, "ghosting video sinkpad");
+      if (need_deinterlace)
+        gst_pad_link_full (playsink->videodeinterlacechain->srcpad,
+            playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+      else
+        gst_pad_link_full (playsink->video_srcpad_stream_synchronizer,
+            playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+    }
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no video needed");
+    if (playsink->videochain) {
+      GST_DEBUG_OBJECT (playsink, "removing video chain");
+      if (playsink->vischain) {
+        GstPad *srcpad;
+
+        GST_DEBUG_OBJECT (playsink, "unlinking vis chain");
+
+        /* also had visualisation, release the tee srcpad before we then
+         * unlink the video from it */
+        if (playsink->audio_tee_vissrc) {
+          gst_element_release_request_pad (playsink->audio_tee,
+              playsink->audio_tee_vissrc);
+          gst_object_unref (playsink->audio_tee_vissrc);
+          playsink->audio_tee_vissrc = NULL;
+        }
+        srcpad =
+            gst_element_get_static_pad (playsink->vischain->chain.bin, "src");
+        gst_pad_unlink (srcpad, playsink->videochain->sinkpad);
+      }
+
+      if (playsink->video_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->video_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->video_sinkpad_stream_synchronizer);
+        playsink->video_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->video_srcpad_stream_synchronizer);
+        playsink->video_srcpad_stream_synchronizer = NULL;
+      }
+
+      add_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+      activate_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+      if (playsink->videochain->ts_offset)
+        gst_object_unref (playsink->videochain->ts_offset);
+      playsink->videochain->ts_offset = NULL;
+    }
+
+    if (playsink->videodeinterlacechain) {
+      add_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), FALSE);
+      activate_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), FALSE);
+    }
+
+    if (playsink->video_pad)
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->video_pad), NULL);
+  }
+
+  if (need_audio) {
+    gboolean raw;
+
+    GST_DEBUG_OBJECT (playsink, "adding audio");
+
+    /* get a raw sink if we are asked for a raw pad */
+    raw = playsink->audio_pad_raw;
+
+    if (playsink->audiochain) {
+      /* try to reactivate the chain */
+      if (!setup_audio_chain (playsink, raw)) {
+        GST_DEBUG_OBJECT (playsink, "removing current audio chain");
+        if (playsink->audio_tee_asrc) {
+          gst_element_release_request_pad (playsink->audio_tee,
+              playsink->audio_tee_asrc);
+          gst_object_unref (playsink->audio_tee_asrc);
+          playsink->audio_tee_asrc = NULL;
+        }
+
+        if (playsink->audio_sinkpad_stream_synchronizer) {
+          gst_element_release_request_pad (GST_ELEMENT_CAST
+              (playsink->stream_synchronizer),
+              playsink->audio_sinkpad_stream_synchronizer);
+          gst_object_unref (playsink->audio_sinkpad_stream_synchronizer);
+          playsink->audio_sinkpad_stream_synchronizer = NULL;
+          gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
+          playsink->audio_srcpad_stream_synchronizer = NULL;
+        }
+
+        add_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+
+        /* Remove the sink from the bin to keep its state
+         * and unparent it to allow reuse */
+        if (playsink->audiochain->sink)
+          gst_bin_remove (GST_BIN_CAST (playsink->audiochain->chain.bin),
+              playsink->audiochain->sink);
+
+        activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+        disconnect_chain (playsink->audiochain, playsink);
+        playsink->audiochain->volume = NULL;
+        playsink->audiochain->mute = NULL;
+        if (playsink->audiochain->ts_offset)
+          gst_object_unref (playsink->audiochain->ts_offset);
+        playsink->audiochain->ts_offset = NULL;
+        free_chain ((GstPlayChain *) playsink->audiochain);
+        playsink->audiochain = NULL;
+        playsink->volume_changed = playsink->mute_changed = FALSE;
+      }
+    }
+
+    if (!playsink->audiochain) {
+      GST_DEBUG_OBJECT (playsink, "creating new audio chain");
+      playsink->audiochain = gen_audio_chain (playsink, raw);
+    }
+
+    if (!playsink->audio_sinkpad_stream_synchronizer) {
+      GValue item = { 0, };
+      GstIterator *it;
+
+      playsink->audio_sinkpad_stream_synchronizer =
+          gst_element_get_request_pad (GST_ELEMENT_CAST
+          (playsink->stream_synchronizer), "sink_%d");
+      it = gst_pad_iterate_internal_links
+          (playsink->audio_sinkpad_stream_synchronizer);
+      g_assert (it);
+      gst_iterator_next (it, &item);
+      playsink->audio_srcpad_stream_synchronizer = g_value_dup_object (&item);
+      g_value_unset (&item);
+      g_assert (playsink->audio_srcpad_stream_synchronizer);
+      gst_iterator_free (it);
+    }
+
+    if (playsink->audiochain) {
+      GST_DEBUG_OBJECT (playsink, "adding audio chain");
+      if (playsink->audio_tee_asrc == NULL) {
+        playsink->audio_tee_asrc =
+            gst_element_get_request_pad (playsink->audio_tee, "src%d");
+      }
+      add_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
+      activate_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
+      gst_pad_link_full (playsink->audio_tee_asrc,
+          playsink->audio_sinkpad_stream_synchronizer,
+          GST_PAD_LINK_CHECK_NOTHING);
+      gst_pad_link_full (playsink->audio_srcpad_stream_synchronizer,
+          playsink->audiochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+    }
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no audio needed");
+    /* we have no audio or we are requested to not play audio */
+    if (playsink->audiochain) {
+      GST_DEBUG_OBJECT (playsink, "removing audio chain");
+      /* release the audio pad */
+      if (playsink->audio_tee_asrc) {
+        gst_element_release_request_pad (playsink->audio_tee,
+            playsink->audio_tee_asrc);
+        gst_object_unref (playsink->audio_tee_asrc);
+        playsink->audio_tee_asrc = NULL;
+      }
+
+      if (playsink->audio_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->audio_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->audio_sinkpad_stream_synchronizer);
+        playsink->audio_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
+        playsink->audio_srcpad_stream_synchronizer = NULL;
+      }
+
+      if (playsink->audiochain->sink_volume) {
+        disconnect_chain (playsink->audiochain, playsink);
+        playsink->audiochain->volume = NULL;
+        playsink->audiochain->mute = NULL;
+        if (playsink->audiochain->ts_offset)
+          gst_object_unref (playsink->audiochain->ts_offset);
+        playsink->audiochain->ts_offset = NULL;
+      }
+      add_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+      activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+    }
+  }
+
+  if (need_vis) {
+    GstPad *srcpad;
+
+    if (!playsink->vischain)
+      playsink->vischain = gen_vis_chain (playsink);
+
+    GST_DEBUG_OBJECT (playsink, "adding visualisation");
+
+    if (playsink->vischain) {
+      GST_DEBUG_OBJECT (playsink, "setting up vis chain");
+      srcpad =
+          gst_element_get_static_pad (playsink->vischain->chain.bin, "src");
+      add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+      activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+      if (playsink->audio_tee_vissrc == NULL) {
+        playsink->audio_tee_vissrc =
+            gst_element_get_request_pad (playsink->audio_tee, "src%d");
+      }
+      gst_pad_link_full (playsink->audio_tee_vissrc,
+          playsink->vischain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+      gst_pad_link_full (srcpad, playsink->video_sinkpad_stream_synchronizer,
+          GST_PAD_LINK_CHECK_NOTHING);
+      gst_pad_link_full (playsink->video_srcpad_stream_synchronizer,
+          playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+      gst_object_unref (srcpad);
+    }
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no vis needed");
+    if (playsink->vischain) {
+      if (playsink->audio_tee_vissrc) {
+        gst_element_release_request_pad (playsink->audio_tee,
+            playsink->audio_tee_vissrc);
+        gst_object_unref (playsink->audio_tee_vissrc);
+        playsink->audio_tee_vissrc = NULL;
+      }
+      GST_DEBUG_OBJECT (playsink, "removing vis chain");
+      add_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
+      activate_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
+    }
+  }
+
+  if (need_text) {
+    GST_DEBUG_OBJECT (playsink, "adding text");
+    if (!playsink->textchain) {
+      GST_DEBUG_OBJECT (playsink, "creating text chain");
+      playsink->textchain = gen_text_chain (playsink);
+    }
+    if (playsink->textchain) {
+      GstIterator *it;
+
+      GST_DEBUG_OBJECT (playsink, "adding text chain");
+      if (playsink->textchain->overlay)
+        g_object_set (G_OBJECT (playsink->textchain->overlay), "silent", FALSE,
+            NULL);
+      add_chain (GST_PLAY_CHAIN (playsink->textchain), TRUE);
+
+      if (!playsink->text_sinkpad_stream_synchronizer) {
+        GValue item = { 0, };
+
+        playsink->text_sinkpad_stream_synchronizer =
+            gst_element_get_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer), "sink_%d");
+        it = gst_pad_iterate_internal_links
+            (playsink->text_sinkpad_stream_synchronizer);
+        g_assert (it);
+        gst_iterator_next (it, &item);
+        playsink->text_srcpad_stream_synchronizer = g_value_dup_object (&item);
+        g_value_unset (&item);
+        g_assert (playsink->text_srcpad_stream_synchronizer);
+        gst_iterator_free (it);
+
+        gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad),
+            playsink->text_sinkpad_stream_synchronizer);
+        gst_pad_link_full (playsink->text_srcpad_stream_synchronizer,
+            playsink->textchain->textsinkpad, GST_PAD_LINK_CHECK_NOTHING);
+      }
+
+      if (need_vis) {
+        GstPad *srcpad;
+
+        srcpad =
+            gst_element_get_static_pad (playsink->vischain->chain.bin, "src");
+        gst_pad_unlink (srcpad, playsink->videochain->sinkpad);
+        gst_pad_link_full (srcpad, playsink->textchain->videosinkpad,
+            GST_PAD_LINK_CHECK_NOTHING);
+        gst_object_unref (srcpad);
+      } else {
+        if (need_deinterlace)
+          gst_pad_link_full (playsink->videodeinterlacechain->srcpad,
+              playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING);
+        else
+          gst_pad_link_full (playsink->video_srcpad_stream_synchronizer,
+              playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING);
+      }
+      gst_pad_link_full (playsink->textchain->srcpad,
+          playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
+
+      activate_chain (GST_PLAY_CHAIN (playsink->textchain), TRUE);
+    }
+  } else {
+    GST_DEBUG_OBJECT (playsink, "no text needed");
+    /* we have no subtitles/text or we are requested to not show them */
+
+    if (playsink->text_sinkpad_stream_synchronizer) {
+      gst_element_release_request_pad (GST_ELEMENT_CAST
+          (playsink->stream_synchronizer),
+          playsink->text_sinkpad_stream_synchronizer);
+      gst_object_unref (playsink->text_sinkpad_stream_synchronizer);
+      playsink->text_sinkpad_stream_synchronizer = NULL;
+      gst_object_unref (playsink->text_srcpad_stream_synchronizer);
+      playsink->text_srcpad_stream_synchronizer = NULL;
+    }
+
+    if (playsink->textchain) {
+      if (playsink->text_pad == NULL) {
+        /* no text pad, remove the chain entirely */
+        GST_DEBUG_OBJECT (playsink, "removing text chain");
+        add_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+        activate_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+      } else {
+        /* we have a chain and a textpad, turn the subtitles off */
+        GST_DEBUG_OBJECT (playsink, "turning off the text");
+        if (playsink->textchain->overlay)
+          g_object_set (G_OBJECT (playsink->textchain->overlay), "silent", TRUE,
+              NULL);
+      }
+    }
+    if (!need_video && playsink->video_pad) {
+      if (playsink->video_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->video_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->video_sinkpad_stream_synchronizer);
+        playsink->video_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->video_srcpad_stream_synchronizer);
+        playsink->video_srcpad_stream_synchronizer = NULL;
+      }
+
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->video_pad), NULL);
+    }
+
+    if (playsink->text_pad && !playsink->textchain)
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad), NULL);
+  }
+  update_av_offset (playsink);
+  do_async_done (playsink);
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return TRUE;
+
+  /* ERRORS */
+no_chain:
+  {
+    /* gen_ chain already posted error */
+    GST_DEBUG_OBJECT (playsink, "failed to setup chain");
+    GST_PLAY_SINK_UNLOCK (playsink);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_play_sink_set_flags:
+ * @playsink: a #GstPlaySink
+ * @flags: #GstPlayFlags
+ *
+ * Configure @flags on @playsink. The flags control the behaviour of @playsink
+ * when constructing the sink pipelins.
+ *
+ * Returns: TRUE if the flags could be configured.
+ */
+gboolean
+gst_play_sink_set_flags (GstPlaySink * playsink, GstPlayFlags flags)
+{
+  g_return_val_if_fail (GST_IS_PLAY_SINK (playsink), FALSE);
+
+  GST_OBJECT_LOCK (playsink);
+  playsink->flags = flags;
+  GST_OBJECT_UNLOCK (playsink);
+
+  return TRUE;
+}
+
+/**
+ * gst_play_sink_get_flags:
+ * @playsink: a #GstPlaySink
+ *
+ * Get the flags of @playsink. That flags control the behaviour of the sink when
+ * it constructs the sink pipelines.
+ *
+ * Returns: the currently configured #GstPlayFlags.
+ */
+GstPlayFlags
+gst_play_sink_get_flags (GstPlaySink * playsink)
+{
+  GstPlayFlags res;
+
+  g_return_val_if_fail (GST_IS_PLAY_SINK (playsink), 0);
+
+  GST_OBJECT_LOCK (playsink);
+  res = playsink->flags;
+  GST_OBJECT_UNLOCK (playsink);
+
+  return res;
+}
+
+void
+gst_play_sink_set_font_desc (GstPlaySink * playsink, const gchar * desc)
+{
+  GstPlayTextChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayTextChain *) playsink->textchain;
+  g_free (playsink->font_desc);
+  playsink->font_desc = g_strdup (desc);
+  if (chain && chain->overlay) {
+    g_object_set (chain->overlay, "font-desc", desc, NULL);
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+}
+
+gchar *
+gst_play_sink_get_font_desc (GstPlaySink * playsink)
+{
+  gchar *result = NULL;
+  GstPlayTextChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayTextChain *) playsink->textchain;
+  if (chain && chain->overlay) {
+    g_object_get (chain->overlay, "font-desc", &result, NULL);
+    playsink->font_desc = g_strdup (result);
+  } else {
+    result = g_strdup (playsink->font_desc);
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+void
+gst_play_sink_set_subtitle_encoding (GstPlaySink * playsink,
+    const gchar * encoding)
+{
+  GstPlayTextChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayTextChain *) playsink->textchain;
+  g_free (playsink->subtitle_encoding);
+  playsink->subtitle_encoding = g_strdup (encoding);
+  if (chain && chain->overlay) {
+    g_object_set (chain->overlay, "subtitle-encoding", encoding, NULL);
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+}
+
+gchar *
+gst_play_sink_get_subtitle_encoding (GstPlaySink * playsink)
+{
+  gchar *result = NULL;
+  GstPlayTextChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  chain = (GstPlayTextChain *) playsink->textchain;
+  if (chain && chain->overlay) {
+    g_object_get (chain->overlay, "subtitle-encoding", &result, NULL);
+    playsink->subtitle_encoding = g_strdup (result);
+  } else {
+    result = g_strdup (playsink->subtitle_encoding);
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+static void
+update_av_offset (GstPlaySink * playsink)
+{
+  gint64 av_offset;
+  GstPlayAudioChain *achain;
+  GstPlayVideoChain *vchain;
+
+  av_offset = playsink->av_offset;
+  achain = (GstPlayAudioChain *) playsink->audiochain;
+  vchain = (GstPlayVideoChain *) playsink->videochain;
+
+  if (achain && vchain && achain->ts_offset && vchain->ts_offset) {
+    g_object_set (achain->ts_offset, "ts-offset", MAX (0, -av_offset), NULL);
+    g_object_set (vchain->ts_offset, "ts-offset", MAX (0, av_offset), NULL);
+  } else {
+    GST_LOG_OBJECT (playsink, "no ts_offset elements");
+  }
+}
+
+void
+gst_play_sink_set_av_offset (GstPlaySink * playsink, gint64 av_offset)
+{
+  GST_PLAY_SINK_LOCK (playsink);
+  playsink->av_offset = av_offset;
+  update_av_offset (playsink);
+  GST_PLAY_SINK_UNLOCK (playsink);
+}
+
+gint64
+gst_play_sink_get_av_offset (GstPlaySink * playsink)
+{
+  gint64 result;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  result = playsink->av_offset;
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+/**
+ * gst_play_sink_get_last_frame:
+ * @playsink: a #GstPlaySink
+ *
+ * Get the last displayed frame from @playsink. This frame is in the native
+ * format of the sink element, the caps on the result buffer contain the format
+ * of the frame data.
+ *
+ * Returns: a #GstBuffer with the frame data or %NULL when no video frame is
+ * available.
+ */
+GstBuffer *
+gst_play_sink_get_last_frame (GstPlaySink * playsink)
+{
+  GstBuffer *result = NULL;
+  GstPlayVideoChain *chain;
+
+  GST_PLAY_SINK_LOCK (playsink);
+  GST_DEBUG_OBJECT (playsink, "taking last frame");
+  /* get the video chain if we can */
+  if ((chain = (GstPlayVideoChain *) playsink->videochain)) {
+    GST_DEBUG_OBJECT (playsink, "found video chain");
+    /* see if the chain is active */
+    if (chain->chain.activated && chain->sink) {
+      GstElement *elem;
+
+      GST_DEBUG_OBJECT (playsink, "video chain active and has a sink");
+
+      /* find and get the last-buffer property now */
+      if ((elem =
+              gst_play_sink_find_property (playsink, chain->sink,
+                  "last-buffer", GST_TYPE_BUFFER))) {
+        GST_DEBUG_OBJECT (playsink, "getting last-buffer property");
+        g_object_get (elem, "last-buffer", &result, NULL);
+        gst_object_unref (elem);
+      }
+    }
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return result;
+}
+
+/**
+ * gst_play_sink_convert_frame:
+ * @playsink: a #GstPlaySink
+ * @caps: a #GstCaps
+ *
+ * Get the last displayed frame from @playsink. If caps is %NULL, the video will
+ * be in the native format of the sink element and the caps on the buffer
+ * describe the format of the frame. If @caps is not %NULL, the video
+ * frame will be converted to the format of the caps.
+ *
+ * Returns: a #GstBuffer with the frame data or %NULL when no video frame is
+ * available or when the conversion failed.
+ */
+GstBuffer *
+gst_play_sink_convert_frame (GstPlaySink * playsink, GstCaps * caps)
+{
+  GstBuffer *result;
+
+  result = gst_play_sink_get_last_frame (playsink);
+  if (result != NULL && caps != NULL) {
+    GstBuffer *temp;
+    GError *err = NULL;
+
+    /* FIXME, need to get the input buffer caps */
+    temp = gst_video_convert_frame (result, NULL, caps, 25 * GST_SECOND, &err);
+    gst_buffer_unref (result);
+    if (temp == NULL && err) {
+      /* I'm really uncertain whether we should make playsink post an error
+       * on the bus or not. It's not like it's a critical issue regarding
+       * playsink behaviour. */
+      GST_ERROR ("Error converting frame: %s", err->message);
+    }
+    result = temp;
+  }
+  return result;
+}
+
+static gboolean
+is_raw_structure (GstStructure * s)
+{
+  const gchar *name;
+
+  name = gst_structure_get_name (s);
+
+  if (g_str_has_prefix (name, "video/x-raw") ||
+      g_str_has_prefix (name, "audio/x-raw"))
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean
+is_raw_pad (GstPad * pad)
+{
+  GstPad *peer = gst_pad_get_peer (pad);
+  GstCaps *caps;
+  gboolean raw = TRUE;
+
+  if (!peer)
+    return raw;
+
+  caps = gst_pad_get_current_caps (peer);
+  if (!caps) {
+    guint i, n;
+
+    caps = gst_pad_get_caps (peer, NULL);
+
+    n = gst_caps_get_size (caps);
+    for (i = 0; i < n; i++) {
+      gboolean r = is_raw_structure (gst_caps_get_structure (caps, i));
+
+      if (i == 0) {
+        raw = r;
+      } else if (raw != r) {
+        GST_ERROR_OBJECT (pad,
+            "Caps contains raw and non-raw structures: %" GST_PTR_FORMAT, caps);
+        raw = FALSE;
+        break;
+      }
+    }
+  } else {
+    raw = is_raw_structure (gst_caps_get_structure (caps, 0));
+  }
+  gst_caps_unref (caps);
+  gst_object_unref (peer);
+
+  return raw;
+}
+
+static GstProbeReturn
+sinkpad_blocked_cb (GstPad * blockedpad, GstProbeType type, gpointer type_data,
+    gpointer user_data);
+
+static void
+video_set_blocked (GstPlaySink * playsink, gboolean blocked)
+{
+  if (playsink->video_pad) {
+    GstPad *opad =
+        GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD
+            (playsink->video_pad)));
+    if (blocked && playsink->video_block_id == 0) {
+      playsink->video_block_id =
+          gst_pad_add_probe (opad, GST_PROBE_TYPE_BLOCK, sinkpad_blocked_cb,
+          gst_object_ref (playsink), (GDestroyNotify) gst_object_unref);
+    } else if (!blocked && playsink->video_block_id) {
+      gst_pad_remove_probe (opad, playsink->video_block_id);
+      PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_VIDEO_RAW);
+      PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_VIDEO);
+      playsink->video_block_id = 0;
+      playsink->video_pad_blocked = FALSE;
+    }
+    gst_object_unref (opad);
+  }
+}
+
+static void
+audio_set_blocked (GstPlaySink * playsink, gboolean blocked)
+{
+  if (playsink->audio_pad) {
+    GstPad *opad =
+        GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD
+            (playsink->audio_pad)));
+    if (blocked && playsink->audio_block_id == 0) {
+      playsink->audio_block_id =
+          gst_pad_add_probe (opad, GST_PROBE_TYPE_BLOCK, sinkpad_blocked_cb,
+          gst_object_ref (playsink), (GDestroyNotify) gst_object_unref);
+    } else if (!blocked && playsink->audio_block_id) {
+      gst_pad_remove_probe (opad, playsink->audio_block_id);
+      PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_AUDIO_RAW);
+      PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_AUDIO);
+      playsink->audio_block_id = 0;
+      playsink->audio_pad_blocked = FALSE;
+    }
+    gst_object_unref (opad);
+  }
+}
+
+static void
+text_set_blocked (GstPlaySink * playsink, gboolean blocked)
+{
+  if (playsink->text_pad) {
+    GstPad *opad =
+        GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD
+            (playsink->text_pad)));
+    if (blocked && playsink->text_block_id == 0) {
+      playsink->text_block_id =
+          gst_pad_add_probe (opad, GST_PROBE_TYPE_BLOCK, sinkpad_blocked_cb,
+          gst_object_ref (playsink), (GDestroyNotify) gst_object_unref);
+    } else if (!blocked && playsink->text_block_id) {
+      gst_pad_remove_probe (opad, playsink->text_block_id);
+      PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_TEXT);
+      playsink->text_block_id = 0;
+      playsink->text_pad_blocked = FALSE;
+    }
+    gst_object_unref (opad);
+  }
+}
+
+static GstProbeReturn
+sinkpad_blocked_cb (GstPad * blockedpad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstPlaySink *playsink = (GstPlaySink *) user_data;
+  GstPad *pad;
+
+  GST_PLAY_SINK_LOCK (playsink);
+
+  pad = GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (blockedpad)));
+  if (pad == playsink->video_pad) {
+    playsink->video_pad_blocked = TRUE;
+    GST_DEBUG_OBJECT (pad, "Video pad blocked");
+  } else if (pad == playsink->audio_pad) {
+    playsink->audio_pad_blocked = TRUE;
+    GST_DEBUG_OBJECT (pad, "Audio pad blocked");
+  } else if (pad == playsink->text_pad) {
+    playsink->text_pad_blocked = TRUE;
+    GST_DEBUG_OBJECT (pad, "Text pad blocked");
+  }
+
+  /* We reconfigure when for ALL streams:
+   * * there isn't a pad
+   * * OR the pad is blocked
+   * * OR there are no pending blocks on that pad
+   */
+
+  if ((!playsink->video_pad || playsink->video_pad_blocked
+          || !PENDING_VIDEO_BLOCK (playsink)) && (!playsink->audio_pad
+          || playsink->audio_pad_blocked || !PENDING_AUDIO_BLOCK (playsink))
+      && (!playsink->text_pad || playsink->text_pad_blocked
+          || !PENDING_TEXT_BLOCK (playsink))) {
+    GST_DEBUG_OBJECT (playsink, "All pads blocked -- reconfiguring");
+
+    if (playsink->video_pad) {
+      playsink->video_pad_raw = is_raw_pad (playsink->video_pad);
+      GST_DEBUG_OBJECT (playsink, "Video pad is raw: %d",
+          playsink->video_pad_raw);
+    }
+
+    if (playsink->audio_pad) {
+      playsink->audio_pad_raw = is_raw_pad (playsink->audio_pad);
+      GST_DEBUG_OBJECT (playsink, "Audio pad is raw: %d",
+          playsink->audio_pad_raw);
+    }
+
+    gst_play_sink_reconfigure (playsink);
+
+    video_set_blocked (playsink, FALSE);
+    audio_set_blocked (playsink, FALSE);
+    text_set_blocked (playsink, FALSE);
+  }
+
+  gst_object_unref (pad);
+
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  return GST_PROBE_OK;
+}
+
+static void
+caps_notify_cb (GstPad * pad, GParamSpec * unused, GstPlaySink * playsink)
+{
+  gboolean reconfigure = FALSE;
+  GstCaps *caps;
+  gboolean raw;
+
+  g_object_get (pad, "caps", &caps, NULL);
+  if (!caps)
+    return;
+
+  if (pad == playsink->audio_pad) {
+    raw = is_raw_pad (pad);
+    reconfigure = (! !playsink->audio_pad_raw != ! !raw)
+        && playsink->audiochain;
+    GST_DEBUG_OBJECT (pad,
+        "Audio caps changed: raw %d reconfigure %d caps %" GST_PTR_FORMAT, raw,
+        reconfigure, caps);
+  } else if (pad == playsink->video_pad) {
+    raw = is_raw_pad (pad);
+    reconfigure = (! !playsink->video_pad_raw != ! !raw)
+        && playsink->videochain;
+    GST_DEBUG_OBJECT (pad,
+        "Video caps changed: raw %d reconfigure %d caps %" GST_PTR_FORMAT, raw,
+        reconfigure, caps);
+  }
+
+  gst_caps_unref (caps);
+
+  if (reconfigure) {
+    GST_PLAY_SINK_LOCK (playsink);
+    video_set_blocked (playsink, TRUE);
+    audio_set_blocked (playsink, TRUE);
+    text_set_blocked (playsink, TRUE);
+    GST_PLAY_SINK_UNLOCK (playsink);
+  }
+}
+
+/**
+ * gst_play_sink_request_pad
+ * @playsink: a #GstPlaySink
+ * @type: a #GstPlaySinkType
+ *
+ * Create or return a pad of @type.
+ *
+ * Returns: a #GstPad of @type or %NULL when the pad could not be created.
+ */
+GstPad *
+gst_play_sink_request_pad (GstPlaySink * playsink, GstPlaySinkType type)
+{
+  GstPad *res = NULL;
+  gboolean created = FALSE;
+  gboolean activate = TRUE;
+  const gchar *pad_name = NULL;
+  gulong *block_id = NULL;
+
+  GST_DEBUG_OBJECT (playsink, "request pad type %d", type);
+
+  GST_PLAY_SINK_LOCK (playsink);
+  switch (type) {
+    case GST_PLAY_SINK_TYPE_AUDIO_RAW:
+    case GST_PLAY_SINK_TYPE_AUDIO:
+      pad_name = "audio_sink";
+      if (!playsink->audio_tee) {
+        GST_LOG_OBJECT (playsink, "creating tee");
+        /* create tee when needed. This element will feed the audio sink chain
+         * and the vis chain. */
+        playsink->audio_tee = gst_element_factory_make ("tee", "audiotee");
+        if (playsink->audio_tee == NULL) {
+          post_missing_element_message (playsink, "tee");
+          GST_ELEMENT_ERROR (playsink, CORE, MISSING_PLUGIN,
+              (_("Missing element '%s' - check your GStreamer installation."),
+                  "tee"), (NULL));
+          res = NULL;
+          break;
+        } else {
+          playsink->audio_tee_sink =
+              gst_element_get_static_pad (playsink->audio_tee, "sink");
+          gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_tee);
+          gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED);
+        }
+      } else {
+        gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED);
+      }
+      if (!playsink->audio_pad) {
+        GST_LOG_OBJECT (playsink, "ghosting tee sinkpad");
+        playsink->audio_pad =
+            gst_ghost_pad_new (pad_name, playsink->audio_tee_sink);
+        g_signal_connect (G_OBJECT (playsink->audio_pad), "notify::caps",
+            G_CALLBACK (caps_notify_cb), playsink);
+        created = TRUE;
+      }
+      playsink->audio_pad_raw = FALSE;
+      res = playsink->audio_pad;
+      block_id = &playsink->audio_block_id;
+      break;
+    case GST_PLAY_SINK_TYPE_VIDEO_RAW:
+    case GST_PLAY_SINK_TYPE_VIDEO:
+      pad_name = "video_sink";
+      if (!playsink->video_pad) {
+        GST_LOG_OBJECT (playsink, "ghosting videosink");
+        playsink->video_pad =
+            gst_ghost_pad_new_no_target (pad_name, GST_PAD_SINK);
+        g_signal_connect (G_OBJECT (playsink->video_pad), "notify::caps",
+            G_CALLBACK (caps_notify_cb), playsink);
+        created = TRUE;
+      }
+      playsink->video_pad_raw = FALSE;
+      res = playsink->video_pad;
+      block_id = &playsink->video_block_id;
+      break;
+    case GST_PLAY_SINK_TYPE_TEXT:
+      GST_LOG_OBJECT (playsink, "ghosting text");
+      if (!playsink->text_pad) {
+        playsink->text_pad =
+            gst_ghost_pad_new_no_target ("text_sink", GST_PAD_SINK);
+        created = TRUE;
+      }
+      res = playsink->text_pad;
+      block_id = &playsink->text_block_id;
+      break;
+    case GST_PLAY_SINK_TYPE_FLUSHING:
+    {
+      gchar *padname;
+
+      /* we need a unique padname for the flushing pad. */
+      padname = g_strdup_printf ("flushing_%d", playsink->count);
+      res = gst_ghost_pad_new_no_target (padname, GST_PAD_SINK);
+      g_free (padname);
+      playsink->count++;
+      activate = FALSE;
+      created = TRUE;
+      break;
+    }
+    default:
+      res = NULL;
+      break;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  if (created && res) {
+    /* we have to add the pad when it's active or we get an error when the
+     * element is 'running' */
+    gst_pad_set_active (res, TRUE);
+    gst_element_add_pad (GST_ELEMENT_CAST (playsink), res);
+    if (block_id && *block_id == 0) {
+      GstPad *blockpad =
+          GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (res)));
+
+      *block_id =
+          gst_pad_add_probe (blockpad, GST_PROBE_TYPE_BLOCK, sinkpad_blocked_cb,
+          gst_object_ref (playsink), (GDestroyNotify) gst_object_unref);
+      PENDING_FLAG_SET (playsink, type);
+      gst_object_unref (blockpad);
+    }
+    if (!activate)
+      gst_pad_set_active (res, activate);
+  }
+
+  return res;
+}
+
+static GstPad *
+gst_play_sink_request_new_pad (GstElement * element, GstPadTemplate * templ,
+    const gchar * name, const GstCaps * caps)
+{
+  GstPlaySink *psink;
+  GstPad *pad;
+  GstPlaySinkType type;
+  const gchar *tplname;
+
+  g_return_val_if_fail (templ != NULL, NULL);
+
+  GST_DEBUG_OBJECT (element, "name:%s", name);
+
+  psink = GST_PLAY_SINK (element);
+  tplname = GST_PAD_TEMPLATE_NAME_TEMPLATE (templ);
+
+  /* Figure out the GstPlaySinkType based on the template */
+  if (!strcmp (tplname, "audio_sink"))
+    type = GST_PLAY_SINK_TYPE_AUDIO;
+  else if (!strcmp (tplname, "audio_raw_sink"))
+    type = GST_PLAY_SINK_TYPE_AUDIO_RAW;
+  else if (!strcmp (tplname, "video_sink"))
+    type = GST_PLAY_SINK_TYPE_VIDEO;
+  else if (!strcmp (tplname, "video_raw_sink"))
+    type = GST_PLAY_SINK_TYPE_VIDEO_RAW;
+  else if (!strcmp (tplname, "text_sink"))
+    type = GST_PLAY_SINK_TYPE_TEXT;
+  else
+    goto unknown_template;
+
+  pad = gst_play_sink_request_pad (psink, type);
+  return pad;
+
+unknown_template:
+  GST_WARNING_OBJECT (element, "Unknown pad template");
+  return NULL;
+}
+
+void
+gst_play_sink_release_pad (GstPlaySink * playsink, GstPad * pad)
+{
+  GstPad **res = NULL;
+  gboolean untarget = TRUE;
+
+  GST_DEBUG_OBJECT (playsink, "release pad %" GST_PTR_FORMAT, pad);
+
+  GST_PLAY_SINK_LOCK (playsink);
+  if (pad == playsink->video_pad) {
+    res = &playsink->video_pad;
+    g_signal_handlers_disconnect_by_func (playsink->video_pad, caps_notify_cb,
+        playsink);
+  } else if (pad == playsink->audio_pad) {
+    res = &playsink->audio_pad;
+    g_signal_handlers_disconnect_by_func (playsink->audio_pad, caps_notify_cb,
+        playsink);
+  } else if (pad == playsink->text_pad) {
+    res = &playsink->text_pad;
+  } else {
+    /* try to release the given pad anyway, these could be the FLUSHING pads. */
+    res = &pad;
+    untarget = FALSE;
+  }
+  GST_PLAY_SINK_UNLOCK (playsink);
+
+  if (*res) {
+    GST_DEBUG_OBJECT (playsink, "deactivate pad %" GST_PTR_FORMAT, *res);
+    gst_pad_set_active (*res, FALSE);
+    if (untarget) {
+      GST_DEBUG_OBJECT (playsink, "untargeting pad %" GST_PTR_FORMAT, *res);
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (*res), NULL);
+    }
+    GST_DEBUG_OBJECT (playsink, "remove pad %" GST_PTR_FORMAT, *res);
+    gst_element_remove_pad (GST_ELEMENT_CAST (playsink), *res);
+    *res = NULL;
+  }
+}
+
+static void
+gst_play_sink_release_request_pad (GstElement * element, GstPad * pad)
+{
+  GstPlaySink *psink = GST_PLAY_SINK (element);
+
+  gst_play_sink_release_pad (psink, pad);
+}
+
+static void
+gst_play_sink_handle_message (GstBin * bin, GstMessage * message)
+{
+  GstPlaySink *playsink;
+
+  playsink = GST_PLAY_SINK_CAST (bin);
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_STEP_DONE:
+    {
+      GstFormat format;
+      guint64 amount;
+      gdouble rate;
+      gboolean flush, intermediate, eos;
+      guint64 duration;
+
+      GST_INFO_OBJECT (playsink, "Handling step-done message");
+      gst_message_parse_step_done (message, &format, &amount, &rate, &flush,
+          &intermediate, &duration, &eos);
+
+      if (format == GST_FORMAT_BUFFERS) {
+        /* for the buffer format, we align the other streams */
+        if (playsink->audiochain) {
+          GstEvent *event;
+
+          event =
+              gst_event_new_step (GST_FORMAT_TIME, duration, rate, flush,
+              intermediate);
+
+          if (!gst_element_send_event (playsink->audiochain->chain.bin, event)) {
+            GST_DEBUG_OBJECT (playsink, "Event failed when sent to audio sink");
+          }
+        }
+      }
+      GST_BIN_CLASS (gst_play_sink_parent_class)->handle_message (bin, message);
+      break;
+    }
+    default:
+      GST_BIN_CLASS (gst_play_sink_parent_class)->handle_message (bin, message);
+      break;
+  }
+}
+
+/* Send an event to our sinks until one of them works; don't then send to the
+ * remaining sinks (unlike GstBin)
+ * Special case: If a text sink is set we need to send the event
+ * to them in case it's source is different from the a/v stream's source.
+ */
+static gboolean
+gst_play_sink_send_event_to_sink (GstPlaySink * playsink, GstEvent * event)
+{
+  gboolean res = TRUE;
+
+  if (playsink->textchain && playsink->textchain->sink) {
+    gst_event_ref (event);
+    if ((res = gst_element_send_event (playsink->textchain->chain.bin, event))) {
+      GST_DEBUG_OBJECT (playsink, "Sent event succesfully to text sink");
+    } else {
+      GST_DEBUG_OBJECT (playsink, "Event failed when sent to text sink");
+    }
+  }
+
+  if (playsink->videochain) {
+    gst_event_ref (event);
+    if ((res = gst_element_send_event (playsink->videochain->chain.bin, event))) {
+      GST_DEBUG_OBJECT (playsink, "Sent event succesfully to video sink");
+      goto done;
+    }
+    GST_DEBUG_OBJECT (playsink, "Event failed when sent to video sink");
+  }
+  if (playsink->audiochain) {
+    gst_event_ref (event);
+    if ((res = gst_element_send_event (playsink->audiochain->chain.bin, event))) {
+      GST_DEBUG_OBJECT (playsink, "Sent event succesfully to audio sink");
+      goto done;
+    }
+    GST_DEBUG_OBJECT (playsink, "Event failed when sent to audio sink");
+  }
+
+done:
+  gst_event_unref (event);
+  return res;
+}
+
+/* We only want to send the event to a single sink (overriding GstBin's
+ * behaviour), but we want to keep GstPipeline's behaviour - wrapping seek
+ * events appropriately. So, this is a messy duplication of code. */
+static gboolean
+gst_play_sink_send_event (GstElement * element, GstEvent * event)
+{
+  gboolean res = FALSE;
+  GstEventType event_type = GST_EVENT_TYPE (event);
+  GstPlaySink *playsink;
+
+  playsink = GST_PLAY_SINK_CAST (element);
+
+  switch (event_type) {
+    case GST_EVENT_SEEK:
+      GST_DEBUG_OBJECT (element, "Sending event to a sink");
+      res = gst_play_sink_send_event_to_sink (playsink, event);
+      break;
+    case GST_EVENT_STEP:
+    {
+      GstFormat format;
+      guint64 amount;
+      gdouble rate;
+      gboolean flush, intermediate;
+
+      gst_event_parse_step (event, &format, &amount, &rate, &flush,
+          &intermediate);
+
+      if (format == GST_FORMAT_BUFFERS) {
+        /* for buffers, we will try to step video frames, for other formats we
+         * send the step to all sinks */
+        res = gst_play_sink_send_event_to_sink (playsink, event);
+      } else {
+        res =
+            GST_ELEMENT_CLASS (gst_play_sink_parent_class)->send_event (element,
+            event);
+      }
+      break;
+    }
+    default:
+      res =
+          GST_ELEMENT_CLASS (gst_play_sink_parent_class)->send_event (element,
+          event);
+      break;
+  }
+  return res;
+}
+
+static GstStateChangeReturn
+gst_play_sink_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstStateChangeReturn bret;
+
+  GstPlaySink *playsink;
+
+  playsink = GST_PLAY_SINK (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      playsink->need_async_start = TRUE;
+      /* we want to go async to PAUSED until we managed to configure and add the
+       * sinks */
+      do_async_start (playsink);
+      ret = GST_STATE_CHANGE_ASYNC;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      /* unblock all pads here */
+      GST_PLAY_SINK_LOCK (playsink);
+      video_set_blocked (playsink, FALSE);
+      audio_set_blocked (playsink, FALSE);
+      text_set_blocked (playsink, FALSE);
+      GST_PLAY_SINK_UNLOCK (playsink);
+      /* fall through */
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      if (playsink->audiochain && playsink->audiochain->sink_volume) {
+        /* remove our links to the mute and volume elements when they were
+         * provided by a sink */
+        disconnect_chain (playsink->audiochain, playsink);
+        playsink->audiochain->volume = NULL;
+        playsink->audiochain->mute = NULL;
+      }
+
+      if (playsink->audiochain && playsink->audiochain->ts_offset) {
+        gst_object_unref (playsink->audiochain->ts_offset);
+        playsink->audiochain->ts_offset = NULL;
+      }
+
+      if (playsink->videochain && playsink->videochain->ts_offset) {
+        gst_object_unref (playsink->videochain->ts_offset);
+        playsink->videochain->ts_offset = NULL;
+      }
+      ret = GST_STATE_CHANGE_SUCCESS;
+      break;
+    default:
+      /* all other state changes return SUCCESS by default, this value can be
+       * overridden by the result of the children */
+      ret = GST_STATE_CHANGE_SUCCESS;
+      break;
+  }
+
+  /* do the state change of the children */
+  bret =
+      GST_ELEMENT_CLASS (gst_play_sink_parent_class)->change_state (element,
+      transition);
+  /* now look at the result of our children and adjust the return value */
+  switch (bret) {
+    case GST_STATE_CHANGE_FAILURE:
+      /* failure, we stop */
+      goto activate_failed;
+    case GST_STATE_CHANGE_NO_PREROLL:
+      /* some child returned NO_PREROLL. This is strange but we never know. We
+       * commit our async state change (if any) and return the NO_PREROLL */
+      do_async_done (playsink);
+      ret = bret;
+      break;
+    case GST_STATE_CHANGE_ASYNC:
+      /* some child was async, return this */
+      ret = bret;
+      break;
+    default:
+      /* return our previously configured return value */
+      break;
+  }
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      /* FIXME Release audio device when we implement that */
+      playsink->need_async_start = TRUE;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      if (playsink->video_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->video_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->video_sinkpad_stream_synchronizer);
+        playsink->video_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->video_srcpad_stream_synchronizer);
+        playsink->video_srcpad_stream_synchronizer = NULL;
+      }
+      if (playsink->audio_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->audio_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->audio_sinkpad_stream_synchronizer);
+        playsink->audio_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
+        playsink->audio_srcpad_stream_synchronizer = NULL;
+      }
+      if (playsink->text_sinkpad_stream_synchronizer) {
+        gst_element_release_request_pad (GST_ELEMENT_CAST
+            (playsink->stream_synchronizer),
+            playsink->text_sinkpad_stream_synchronizer);
+        gst_object_unref (playsink->text_sinkpad_stream_synchronizer);
+        playsink->text_sinkpad_stream_synchronizer = NULL;
+        gst_object_unref (playsink->text_srcpad_stream_synchronizer);
+        playsink->text_srcpad_stream_synchronizer = NULL;
+      }
+    }
+      /* fall through */
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      /* remove sinks we added */
+      if (playsink->videodeinterlacechain) {
+        activate_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain),
+            FALSE);
+        add_chain (GST_PLAY_CHAIN (playsink->videodeinterlacechain), FALSE);
+      }
+      if (playsink->videochain) {
+        activate_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+        add_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
+      }
+      if (playsink->audiochain) {
+        activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+        add_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
+      }
+      if (playsink->vischain) {
+        activate_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
+        add_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
+      }
+      if (playsink->textchain) {
+        activate_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+        add_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE);
+      }
+      do_async_done (playsink);
+      /* when going to READY, keep elements around as long as possible,
+       * so they may be re-used faster next time/url around.
+       * when really going to NULL, clean up everything completely. */
+      if (transition == GST_STATE_CHANGE_READY_TO_NULL) {
+
+        /* Unparent the sinks to allow reuse */
+        if (playsink->videochain && playsink->videochain->sink)
+          gst_bin_remove (GST_BIN_CAST (playsink->videochain->chain.bin),
+              playsink->videochain->sink);
+        if (playsink->audiochain && playsink->audiochain->sink)
+          gst_bin_remove (GST_BIN_CAST (playsink->audiochain->chain.bin),
+              playsink->audiochain->sink);
+        if (playsink->textchain && playsink->textchain->sink)
+          gst_bin_remove (GST_BIN_CAST (playsink->textchain->chain.bin),
+              playsink->textchain->sink);
+
+        if (playsink->audio_sink != NULL)
+          gst_element_set_state (playsink->audio_sink, GST_STATE_NULL);
+        if (playsink->video_sink != NULL)
+          gst_element_set_state (playsink->video_sink, GST_STATE_NULL);
+        if (playsink->visualisation != NULL)
+          gst_element_set_state (playsink->visualisation, GST_STATE_NULL);
+        if (playsink->text_sink != NULL)
+          gst_element_set_state (playsink->text_sink, GST_STATE_NULL);
+
+        free_chain ((GstPlayChain *) playsink->videodeinterlacechain);
+        playsink->videodeinterlacechain = NULL;
+        free_chain ((GstPlayChain *) playsink->videochain);
+        playsink->videochain = NULL;
+        free_chain ((GstPlayChain *) playsink->audiochain);
+        playsink->audiochain = NULL;
+        free_chain ((GstPlayChain *) playsink->vischain);
+        playsink->vischain = NULL;
+        free_chain ((GstPlayChain *) playsink->textchain);
+        playsink->textchain = NULL;
+      }
+      break;
+    default:
+      break;
+  }
+  return ret;
+
+  /* ERRORS */
+activate_failed:
+  {
+    GST_DEBUG_OBJECT (element,
+        "element failed to change states -- activation problem?");
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
+
+static void
+gst_play_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * spec)
+{
+  GstPlaySink *playsink = GST_PLAY_SINK (object);
+
+  switch (prop_id) {
+    case PROP_FLAGS:
+      gst_play_sink_set_flags (playsink, g_value_get_flags (value));
+      break;
+    case PROP_VOLUME:
+      gst_play_sink_set_volume (playsink, g_value_get_double (value));
+      break;
+    case PROP_MUTE:
+      gst_play_sink_set_mute (playsink, g_value_get_boolean (value));
+      break;
+    case PROP_FONT_DESC:
+      gst_play_sink_set_font_desc (playsink, g_value_get_string (value));
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      gst_play_sink_set_subtitle_encoding (playsink,
+          g_value_get_string (value));
+      break;
+    case PROP_VIS_PLUGIN:
+      gst_play_sink_set_vis_plugin (playsink, g_value_get_object (value));
+      break;
+    case PROP_AV_OFFSET:
+      gst_play_sink_set_av_offset (playsink, g_value_get_int64 (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
+      break;
+  }
+}
+
+static void
+gst_play_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * spec)
+{
+  GstPlaySink *playsink = GST_PLAY_SINK (object);
+
+  switch (prop_id) {
+    case PROP_FLAGS:
+      g_value_set_flags (value, gst_play_sink_get_flags (playsink));
+      break;
+    case PROP_VOLUME:
+      g_value_set_double (value, gst_play_sink_get_volume (playsink));
+      break;
+    case PROP_MUTE:
+      g_value_set_boolean (value, gst_play_sink_get_mute (playsink));
+      break;
+    case PROP_FONT_DESC:
+      g_value_take_string (value, gst_play_sink_get_font_desc (playsink));
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      g_value_take_string (value,
+          gst_play_sink_get_subtitle_encoding (playsink));
+      break;
+    case PROP_VIS_PLUGIN:
+      g_value_take_object (value, gst_play_sink_get_vis_plugin (playsink));
+      break;
+    case PROP_FRAME:
+      gst_value_take_buffer (value, gst_play_sink_get_last_frame (playsink));
+      break;
+    case PROP_AV_OFFSET:
+      g_value_set_int64 (value, gst_play_sink_get_av_offset (playsink));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
+      break;
+  }
+}
+
+
+gboolean
+gst_play_sink_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_play_sink_debug, "playsink", 0, "play bin");
+
+  return gst_element_register (plugin, "playsink", GST_RANK_NONE,
+      GST_TYPE_PLAY_SINK);
+}
diff --git a/gst/playback/gstplaysink.h b/gst/playback/gstplaysink.h
new file mode 100644
index 0000000..6759ea4
--- /dev/null
+++ b/gst/playback/gstplaysink.h
@@ -0,0 +1,113 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_PLAY_SINK_H__
+#define __GST_PLAY_SINK_H__
+
+#include <gst/gst.h>
+
+#include "gstplay-enum.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_PLAY_SINK \
+  (gst_play_sink_get_type())
+#define GST_PLAY_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAY_SINK, GstPlaySink))
+#define GST_PLAY_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAY_SINK, GstPlaySinkClass))
+#define GST_IS_PLAY_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAY_SINK))
+#define GST_IS_PLAY_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAY_SINK))
+#define GST_PLAY_SINK_CAST(obj) \
+  ((GstPlaySink*)(obj))
+
+/**
+ * GstPlaySinkType:
+ * @GST_PLAY_SINK_TYPE_AUDIO: an audio pad
+ * @GST_PLAY_SINK_TYPE_AUDIO_RAW: a raw audio pad. Deprecated.
+ * @GST_PLAY_SINK_TYPE_VIDEO: a video pad
+ * @GST_PLAY_SINK_TYPE_VIDEO_RAW: a raw video pad. Deprecated.
+ * @GST_PLAY_SINK_TYPE_TEXT: a text pad
+ * @GST_PLAY_SINK_TYPE_LAST: the last type
+ * @GST_PLAY_SINK_TYPE_FLUSHING: a flushing pad, used when shutting down
+ *
+ * Types of pads that can be requested from the sinks.
+ */
+typedef enum {
+  GST_PLAY_SINK_TYPE_AUDIO     = 0,
+  GST_PLAY_SINK_TYPE_AUDIO_RAW = 1,
+  GST_PLAY_SINK_TYPE_VIDEO     = 2,
+  GST_PLAY_SINK_TYPE_VIDEO_RAW = 3,
+  GST_PLAY_SINK_TYPE_TEXT      = 4,
+  GST_PLAY_SINK_TYPE_LAST      = 5,
+
+  /* this is a dummy pad */
+  GST_PLAY_SINK_TYPE_FLUSHING  = 6
+} GstPlaySinkType;
+
+typedef struct _GstPlaySink GstPlaySink;
+typedef struct _GstPlaySinkClass GstPlaySinkClass;
+
+GType gst_play_sink_get_type (void);
+
+GstPad *         gst_play_sink_request_pad    (GstPlaySink *playsink, GstPlaySinkType type);
+void             gst_play_sink_release_pad    (GstPlaySink *playsink, GstPad *pad);
+
+void             gst_play_sink_set_sink       (GstPlaySink * playsink, GstPlaySinkType type, GstElement * sink);
+GstElement *     gst_play_sink_get_sink       (GstPlaySink * playsink, GstPlaySinkType type);
+
+void             gst_play_sink_set_vis_plugin (GstPlaySink * playsink, GstElement * vis);
+GstElement *     gst_play_sink_get_vis_plugin (GstPlaySink * playsink);
+
+void             gst_play_sink_set_volume     (GstPlaySink *playsink, gdouble volume);
+gdouble          gst_play_sink_get_volume     (GstPlaySink *playsink);
+
+void             gst_play_sink_set_mute       (GstPlaySink *playsink, gboolean mute);
+gboolean         gst_play_sink_get_mute       (GstPlaySink *playsink);
+
+gboolean         gst_play_sink_set_flags      (GstPlaySink * playsink, GstPlayFlags flags);
+GstPlayFlags     gst_play_sink_get_flags      (GstPlaySink * playsink);
+
+void             gst_play_sink_set_font_desc  (GstPlaySink *playsink, const gchar * desc);
+gchar *          gst_play_sink_get_font_desc  (GstPlaySink *playsink);
+void             gst_play_sink_set_subtitle_encoding  (GstPlaySink *playsink, const gchar * encoding);
+gchar *          gst_play_sink_get_subtitle_encoding  (GstPlaySink *playsink);
+
+void             gst_play_sink_set_av_offset  (GstPlaySink *playsink, gint64 av_offset);
+gint64           gst_play_sink_get_av_offset  (GstPlaySink *playsink);
+
+GstBuffer *      gst_play_sink_get_last_frame (GstPlaySink * playsink);
+GstBuffer *      gst_play_sink_convert_frame  (GstPlaySink * playsink, GstCaps * caps);
+
+gboolean         gst_play_sink_reconfigure    (GstPlaySink * playsink);
+
+gboolean         gst_play_sink_plugin_init    (GstPlugin * plugin);
+
+void
+gst_play_marshal_BUFFER__BOXED (GClosure * closure,
+    GValue * return_value G_GNUC_UNUSED,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data);
+
+G_END_DECLS
+
+#endif /* __GST_PLAY_SINK_H__ */
diff --git a/gst/playback/gstplaysinkaudioconvert.c b/gst/playback/gstplaysinkaudioconvert.c
new file mode 100644
index 0000000..08f356e
--- /dev/null
+++ b/gst/playback/gstplaysinkaudioconvert.c
@@ -0,0 +1,498 @@
+/* GStreamer
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplaysinkaudioconvert.h"
+
+#include <gst/pbutils/pbutils.h>
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_play_sink_audio_convert_debug);
+#define GST_CAT_DEFAULT gst_play_sink_audio_convert_debug
+
+#define parent_class gst_play_sink_audio_convert_parent_class
+
+G_DEFINE_TYPE (GstPlaySinkAudioConvert, gst_play_sink_audio_convert,
+    GST_TYPE_BIN);
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static gboolean
+is_raw_caps (GstCaps * caps)
+{
+  gint i, n;
+  GstStructure *s;
+  const gchar *name;
+
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    s = gst_caps_get_structure (caps, i);
+    name = gst_structure_get_name (s);
+    if (!g_str_has_prefix (name, "audio/x-raw"))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+static void
+post_missing_element_message (GstPlaySinkAudioConvert * self,
+    const gchar * name)
+{
+  GstMessage *msg;
+
+  msg = gst_missing_element_message_new (GST_ELEMENT_CAST (self), name);
+  gst_element_post_message (GST_ELEMENT_CAST (self), msg);
+}
+
+static GstProbeReturn
+pad_blocked_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstPlaySinkAudioConvert *self = user_data;
+  GstPad *peer;
+  GstCaps *caps;
+  gboolean raw;
+
+  GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+  GST_DEBUG_OBJECT (self, "Pad blocked");
+
+  /* There must be a peer at this point */
+  peer = gst_pad_get_peer (self->sinkpad);
+  caps = gst_pad_get_current_caps (peer);
+  if (!caps)
+    caps = gst_pad_get_caps (peer, NULL);
+  gst_object_unref (peer);
+
+  raw = is_raw_caps (caps);
+  GST_DEBUG_OBJECT (self, "Caps %" GST_PTR_FORMAT " are raw: %d", caps, raw);
+  gst_caps_unref (caps);
+
+  if (raw == self->raw)
+    goto unblock;
+  self->raw = raw;
+
+  if (raw) {
+    GstBin *bin = GST_BIN_CAST (self);
+    GstElement *head = NULL, *prev = NULL;
+    GstPad *pad;
+
+    GST_DEBUG_OBJECT (self, "Creating raw conversion pipeline");
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+
+    if (self->use_converters) {
+      self->conv = gst_element_factory_make ("audioconvert", "conv");
+      if (self->conv == NULL) {
+        post_missing_element_message (self, "audioconvert");
+        GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN,
+            (_("Missing element '%s' - check your GStreamer installation."),
+                "audioconvert"), ("audio rendering might fail"));
+      } else {
+        gst_bin_add (bin, self->conv);
+        gst_element_sync_state_with_parent (self->conv);
+        prev = head = self->conv;
+      }
+
+      self->resample = gst_element_factory_make ("audioresample", "resample");
+      if (self->resample == NULL) {
+        post_missing_element_message (self, "audioresample");
+        GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN,
+            (_("Missing element '%s' - check your GStreamer installation."),
+                "audioresample"), ("possibly a liboil version mismatch?"));
+      } else {
+        gst_bin_add (bin, self->resample);
+        gst_element_sync_state_with_parent (self->resample);
+        if (prev) {
+          if (!gst_element_link_pads_full (prev, "src", self->resample, "sink",
+                  GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+            goto link_failed;
+        } else {
+          head = self->resample;
+        }
+        prev = self->resample;
+      }
+    }
+
+    if (self->use_volume && self->volume) {
+      gst_bin_add (bin, gst_object_ref (self->volume));
+      gst_element_sync_state_with_parent (self->volume);
+      if (prev) {
+        if (!gst_element_link_pads_full (prev, "src", self->volume, "sink",
+                GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+          goto link_failed;
+      } else {
+        head = self->volume;
+      }
+      prev = self->volume;
+    }
+
+    if (head) {
+      pad = gst_element_get_static_pad (head, "sink");
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), pad);
+      gst_object_unref (pad);
+    }
+
+    if (prev) {
+      pad = gst_element_get_static_pad (prev, "src");
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), pad);
+      gst_object_unref (pad);
+    }
+
+    if (!head && !prev) {
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+          self->sink_proxypad);
+    }
+
+    GST_DEBUG_OBJECT (self, "Raw conversion pipeline created");
+  } else {
+    GstBin *bin = GST_BIN_CAST (self);
+
+    GST_DEBUG_OBJECT (self, "Removing raw conversion pipeline");
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+
+    if (self->conv) {
+      gst_element_set_state (self->conv, GST_STATE_NULL);
+      gst_bin_remove (bin, self->conv);
+      self->conv = NULL;
+    }
+    if (self->resample) {
+      gst_element_set_state (self->resample, GST_STATE_NULL);
+      gst_bin_remove (bin, self->resample);
+      self->resample = NULL;
+    }
+    if (self->volume) {
+      gst_element_set_state (self->volume, GST_STATE_NULL);
+      if (GST_OBJECT_PARENT (self->volume) == GST_OBJECT_CAST (self)) {
+        gst_bin_remove (GST_BIN_CAST (self), self->volume);
+      }
+    }
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+        self->sink_proxypad);
+
+    GST_DEBUG_OBJECT (self, "Raw conversion pipeline removed");
+  }
+
+unblock:
+  self->sink_proxypad_block_id = 0;
+  GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+
+  return GST_PROBE_REMOVE;
+
+link_failed:
+  {
+    GST_ELEMENT_ERROR (self, CORE, PAD,
+        (NULL), ("Failed to configure the audio converter."));
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+        self->sink_proxypad);
+    self->sink_proxypad_block_id = 0;
+    GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+
+    return GST_PROBE_REMOVE;
+  }
+}
+
+static void
+block_proxypad (GstPlaySinkAudioConvert * self)
+{
+  if (self->sink_proxypad_block_id == 0) {
+    self->sink_proxypad_block_id =
+        gst_pad_add_probe (self->sink_proxypad, GST_PROBE_TYPE_BLOCK,
+        pad_blocked_cb, gst_object_ref (self),
+        (GDestroyNotify) gst_object_unref);
+  }
+}
+
+static void
+unblock_proxypad (GstPlaySinkAudioConvert * self)
+{
+  if (self->sink_proxypad_block_id != 0) {
+    gst_pad_remove_probe (self->sink_proxypad, self->sink_proxypad_block_id);
+    self->sink_proxypad_block_id = 0;
+  }
+}
+
+static gboolean
+gst_play_sink_audio_convert_sink_setcaps (GstPlaySinkAudioConvert * self,
+    GstCaps * caps)
+{
+  GstStructure *s;
+  const gchar *name;
+  gboolean reconfigure = FALSE;
+
+  GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+  s = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (s);
+
+  if (g_str_has_prefix (name, "audio/x-raw")) {
+    if (!self->raw && !gst_pad_is_blocked (self->sink_proxypad)) {
+      GST_DEBUG_OBJECT (self, "Changing caps from non-raw to raw");
+      reconfigure = TRUE;
+      block_proxypad (self);
+    }
+  } else {
+    if (self->raw && !gst_pad_is_blocked (self->sink_proxypad)) {
+      GST_DEBUG_OBJECT (self, "Changing caps from raw to non-raw");
+      reconfigure = TRUE;
+      block_proxypad (self);
+    }
+  }
+
+  /* Otherwise the setcaps below fails */
+  if (reconfigure) {
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+  }
+
+  GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+
+  GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps);
+
+  return TRUE;
+}
+
+static gboolean
+gst_play_sink_audio_convert_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstPlaySinkAudioConvert *self =
+      GST_PLAY_SINK_AUDIO_CONVERT (gst_pad_get_parent (pad));
+  gboolean ret;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_play_sink_audio_convert_sink_setcaps (self, caps);
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+      GST_DEBUG_OBJECT (self, "Segment before %" GST_SEGMENT_FORMAT,
+          &self->segment);
+      gst_event_copy_segment (event, &self->segment);
+      GST_DEBUG_OBJECT (self, "Segment after %" GST_SEGMENT_FORMAT,
+          &self->segment);
+      GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+      GST_DEBUG_OBJECT (self, "Resetting segment");
+      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+      GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static GstCaps *
+gst_play_sink_audio_convert_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstPlaySinkAudioConvert *self =
+      GST_PLAY_SINK_AUDIO_CONVERT (gst_pad_get_parent (pad));
+  GstCaps *ret;
+  GstPad *otherpad, *peer;
+
+  GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+  if (pad == self->srcpad)
+    otherpad = gst_object_ref (self->sinkpad);
+  else
+    otherpad = gst_object_ref (self->srcpad);
+  GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+
+  peer = gst_pad_get_peer (otherpad);
+  if (peer) {
+    ret = gst_pad_get_caps (peer, filter);
+    gst_object_unref (peer);
+  } else {
+    ret = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+  }
+
+  gst_object_unref (otherpad);
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static void
+gst_play_sink_audio_convert_finalize (GObject * object)
+{
+  GstPlaySinkAudioConvert *self = GST_PLAY_SINK_AUDIO_CONVERT_CAST (object);
+
+  if (self->volume)
+    gst_object_unref (self->volume);
+
+  gst_object_unref (self->sink_proxypad);
+  g_mutex_free (self->lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_play_sink_audio_convert_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstPlaySinkAudioConvert *self = GST_PLAY_SINK_AUDIO_CONVERT_CAST (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+      unblock_proxypad (self);
+      GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+      if (self->conv) {
+        gst_element_set_state (self->conv, GST_STATE_NULL);
+        gst_bin_remove (GST_BIN_CAST (self), self->conv);
+        self->conv = NULL;
+      }
+      if (self->resample) {
+        gst_element_set_state (self->resample, GST_STATE_NULL);
+        gst_bin_remove (GST_BIN_CAST (self), self->resample);
+        self->resample = NULL;
+      }
+      if (self->volume) {
+        gst_element_set_state (self->volume, GST_STATE_NULL);
+        if (GST_OBJECT_PARENT (self->volume) == GST_OBJECT_CAST (self)) {
+          gst_bin_remove (GST_BIN_CAST (self), self->volume);
+        }
+      }
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+          self->sink_proxypad);
+      self->raw = FALSE;
+      GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
+      unblock_proxypad (self);
+      GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_play_sink_audio_convert_class_init (GstPlaySinkAudioConvertClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  GST_DEBUG_CATEGORY_INIT (gst_play_sink_audio_convert_debug,
+      "playsinkaudioconvert", 0, "play bin");
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_play_sink_audio_convert_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sinktemplate));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Player Sink Audio Converter", "Audio/Bin/Converter",
+      "Convenience bin for audio conversion",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_play_sink_audio_convert_change_state);
+}
+
+static void
+gst_play_sink_audio_convert_init (GstPlaySinkAudioConvert * self)
+{
+  GstPadTemplate *templ;
+
+  self->lock = g_mutex_new ();
+  gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+
+  templ = gst_static_pad_template_get (&sinktemplate);
+  self->sinkpad = gst_ghost_pad_new_no_target_from_template ("sink", templ);
+  gst_pad_set_event_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_audio_convert_sink_event));
+  gst_pad_set_getcaps_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_audio_convert_getcaps));
+
+  self->sink_proxypad =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (self->sinkpad)));
+
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->sinkpad);
+  gst_object_unref (templ);
+
+  templ = gst_static_pad_template_get (&srctemplate);
+  self->srcpad = gst_ghost_pad_new_no_target_from_template ("src", templ);
+  gst_pad_set_getcaps_function (self->srcpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_audio_convert_getcaps));
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->srcpad);
+  gst_object_unref (templ);
+
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+      self->sink_proxypad);
+
+  /* FIXME: Only create this on demand but for now we need
+   * it to always exist because of playsink's volume proxying
+   * logic.
+   */
+  self->volume = gst_element_factory_make ("volume", "volume");
+  if (self->volume)
+    gst_object_ref_sink (self->volume);
+}
diff --git a/gst/playback/gstplaysinkaudioconvert.h b/gst/playback/gstplaysinkaudioconvert.h
new file mode 100644
index 0000000..f9a0791
--- /dev/null
+++ b/gst/playback/gstplaysinkaudioconvert.h
@@ -0,0 +1,89 @@
+/* GStreamer
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+
+#ifndef __GST_PLAY_SINK_AUDIO_CONVERT_H__
+#define __GST_PLAY_SINK_AUDIO_CONVERT_H__
+
+G_BEGIN_DECLS
+#define GST_TYPE_PLAY_SINK_AUDIO_CONVERT \
+  (gst_play_sink_audio_convert_get_type())
+#define GST_PLAY_SINK_AUDIO_CONVERT(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAY_SINK_AUDIO_CONVERT, GstPlaySinkAudioConvert))
+#define GST_PLAY_SINK_AUDIO_CONVERT_CAST(obj) \
+  ((GstPlaySinkAudioConvert *) obj)
+#define GST_PLAY_SINK_AUDIO_CONVERT_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAY_SINK_AUDIO_CONVERT, GstPlaySinkAudioConvertClass))
+#define GST_IS_PLAY_SINK_AUDIO_CONVERT(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAY_SINK_AUDIO_CONVERT))
+#define GST_IS_PLAY_SINK_AUDIO_CONVERT_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAY_SINK_AUDIO_CONVERT))
+
+#define GST_PLAY_SINK_AUDIO_CONVERT_LOCK(obj) G_STMT_START {                   \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locking from thread %p",                           \
+                    g_thread_self ());                                  \
+    g_mutex_lock (GST_PLAY_SINK_AUDIO_CONVERT_CAST(obj)->lock);                \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locked from thread %p",                            \
+                    g_thread_self ());                                  \
+} G_STMT_END
+
+#define GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK(obj) G_STMT_START {                 \
+    GST_LOG_OBJECT (obj,                                                \
+                    "unlocking from thread %p",                         \
+                    g_thread_self ());                                  \
+    g_mutex_unlock (GST_PLAY_SINK_AUDIO_CONVERT_CAST(obj)->lock);              \
+} G_STMT_END
+
+typedef struct _GstPlaySinkAudioConvert GstPlaySinkAudioConvert;
+typedef struct _GstPlaySinkAudioConvertClass GstPlaySinkAudioConvertClass;
+
+struct _GstPlaySinkAudioConvert
+{
+  GstBin parent;
+
+  /* < private > */
+  GMutex *lock;
+
+  GstPad *sinkpad, *sink_proxypad;
+  gulong sink_proxypad_block_id;
+  GstSegment segment;
+
+  GstPad *srcpad;
+
+  gboolean raw;
+  GstElement *conv, *resample;
+
+  /* < pseudo public > */
+  GstElement *volume;
+  gboolean use_volume;
+  gboolean use_converters;
+};
+
+struct _GstPlaySinkAudioConvertClass
+{
+  GstBinClass parent;
+};
+
+GType gst_play_sink_audio_convert_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_PLAY_SINK_AUDIO_CONVERT_H__ */
diff --git a/gst/playback/gstplaysinkvideoconvert.c b/gst/playback/gstplaysinkvideoconvert.c
new file mode 100644
index 0000000..68a77b2
--- /dev/null
+++ b/gst/playback/gstplaysinkvideoconvert.c
@@ -0,0 +1,462 @@
+/* GStreamer
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstplaysinkvideoconvert.h"
+
+#include <gst/pbutils/pbutils.h>
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_play_sink_video_convert_debug);
+#define GST_CAT_DEFAULT gst_play_sink_video_convert_debug
+
+#define parent_class gst_play_sink_video_convert_parent_class
+
+G_DEFINE_TYPE (GstPlaySinkVideoConvert, gst_play_sink_video_convert,
+    GST_TYPE_BIN);
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static gboolean
+is_raw_caps (GstCaps * caps)
+{
+  gint i, n;
+  GstStructure *s;
+  const gchar *name;
+
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    s = gst_caps_get_structure (caps, i);
+    name = gst_structure_get_name (s);
+    if (!g_str_has_prefix (name, "video/x-raw"))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+static void
+post_missing_element_message (GstPlaySinkVideoConvert * self,
+    const gchar * name)
+{
+  GstMessage *msg;
+
+  msg = gst_missing_element_message_new (GST_ELEMENT_CAST (self), name);
+  gst_element_post_message (GST_ELEMENT_CAST (self), msg);
+}
+
+static GstProbeReturn
+pad_blocked_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstPlaySinkVideoConvert *self = user_data;
+  GstPad *peer;
+  GstCaps *caps;
+  gboolean raw;
+
+  GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+  GST_DEBUG_OBJECT (self, "Pad blocked");
+
+  /* There must be a peer at this point */
+  peer = gst_pad_get_peer (self->sinkpad);
+  caps = gst_pad_get_current_caps (peer);
+  if (!caps)
+    caps = gst_pad_get_caps (peer, NULL);
+  gst_object_unref (peer);
+
+  raw = is_raw_caps (caps);
+  GST_DEBUG_OBJECT (self, "Caps %" GST_PTR_FORMAT " are raw: %d", caps, raw);
+  gst_caps_unref (caps);
+
+  if (raw == self->raw)
+    goto unblock;
+  self->raw = raw;
+
+  if (raw) {
+    GstBin *bin = GST_BIN_CAST (self);
+    GstElement *head = NULL, *prev = NULL;
+    GstPad *pad;
+
+    GST_DEBUG_OBJECT (self, "Creating raw conversion pipeline");
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+
+    self->conv = gst_element_factory_make (COLORSPACE, "conv");
+    if (self->conv == NULL) {
+      post_missing_element_message (self, COLORSPACE);
+      GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN,
+          (_("Missing element '%s' - check your GStreamer installation."),
+              COLORSPACE), ("video rendering might fail"));
+    } else {
+      gst_bin_add (bin, self->conv);
+      gst_element_sync_state_with_parent (self->conv);
+      prev = head = self->conv;
+    }
+
+    self->scale = gst_element_factory_make ("videoscale", "scale");
+    if (self->scale == NULL) {
+      post_missing_element_message (self, "videoscale");
+      GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN,
+          (_("Missing element '%s' - check your GStreamer installation."),
+              "videoscale"), ("possibly a liboil version mismatch?"));
+    } else {
+      /* Add black borders if necessary to keep the DAR */
+      g_object_set (self->scale, "add-borders", TRUE, NULL);
+      gst_bin_add (bin, self->scale);
+      gst_element_sync_state_with_parent (self->scale);
+      if (prev) {
+        if (!gst_element_link_pads_full (prev, "src", self->scale, "sink",
+                GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+          goto link_failed;
+      } else {
+        head = self->scale;
+      }
+      prev = self->scale;
+    }
+
+    if (head) {
+      pad = gst_element_get_static_pad (head, "sink");
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), pad);
+      gst_object_unref (pad);
+    }
+
+    if (prev) {
+      pad = gst_element_get_static_pad (prev, "src");
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), pad);
+      gst_object_unref (pad);
+    }
+
+    if (!head && !prev) {
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+          self->sink_proxypad);
+    }
+
+    GST_DEBUG_OBJECT (self, "Raw conversion pipeline created");
+  } else {
+    GstBin *bin = GST_BIN_CAST (self);
+
+    GST_DEBUG_OBJECT (self, "Removing raw conversion pipeline");
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+
+    if (self->conv) {
+      gst_element_set_state (self->conv, GST_STATE_NULL);
+      gst_bin_remove (bin, self->conv);
+      self->conv = NULL;
+    }
+    if (self->scale) {
+      gst_element_set_state (self->scale, GST_STATE_NULL);
+      gst_bin_remove (bin, self->scale);
+      self->scale = NULL;
+    }
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+        self->sink_proxypad);
+
+    GST_DEBUG_OBJECT (self, "Raw conversion pipeline removed");
+  }
+
+unblock:
+  self->sink_proxypad_block_id = 0;
+  GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+
+  return GST_PROBE_REMOVE;
+
+link_failed:
+  {
+    GST_ELEMENT_ERROR (self, CORE, PAD,
+        (NULL), ("Failed to configure the video converter."));
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+        self->sink_proxypad);
+    self->sink_proxypad_block_id = 0;
+    GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+
+    return GST_PROBE_REMOVE;
+  }
+}
+
+static void
+block_proxypad (GstPlaySinkVideoConvert * self)
+{
+  if (self->sink_proxypad_block_id == 0) {
+    self->sink_proxypad_block_id =
+        gst_pad_add_probe (self->sink_proxypad, GST_PROBE_TYPE_BLOCK,
+        pad_blocked_cb, gst_object_ref (self),
+        (GDestroyNotify) gst_object_unref);
+  }
+}
+
+static void
+unblock_proxypad (GstPlaySinkVideoConvert * self)
+{
+  if (self->sink_proxypad_block_id != 0) {
+    gst_pad_remove_probe (self->sink_proxypad, self->sink_proxypad_block_id);
+    self->sink_proxypad_block_id = 0;
+  }
+}
+
+static gboolean
+gst_play_sink_video_convert_sink_setcaps (GstPlaySinkVideoConvert * self,
+    GstCaps * caps)
+{
+  GstStructure *s;
+  const gchar *name;
+  gboolean reconfigure = FALSE;
+
+  GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+  s = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (s);
+
+  if (g_str_has_prefix (name, "video/x-raw")) {
+    if (!self->raw && !gst_pad_is_blocked (self->sink_proxypad)) {
+      GST_DEBUG_OBJECT (self, "Changing caps from non-raw to raw");
+      reconfigure = TRUE;
+      block_proxypad (self);
+    }
+  } else {
+    if (self->raw && !gst_pad_is_blocked (self->sink_proxypad)) {
+      GST_DEBUG_OBJECT (self, "Changing caps from raw to non-raw");
+      reconfigure = TRUE;
+      block_proxypad (self);
+    }
+  }
+
+  /* Otherwise the setcaps below fails */
+  if (reconfigure) {
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+  }
+  GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+
+  GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps);
+
+  return TRUE;
+}
+
+static gboolean
+gst_play_sink_video_convert_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstPlaySinkVideoConvert *self =
+      GST_PLAY_SINK_VIDEO_CONVERT (gst_pad_get_parent (pad));
+  gboolean ret;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_play_sink_video_convert_sink_setcaps (self, caps);
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+      GST_DEBUG_OBJECT (self, "Segment before %" GST_SEGMENT_FORMAT,
+          &self->segment);
+      gst_event_copy_segment (event, &self->segment);
+      GST_DEBUG_OBJECT (self, "Segment after %" GST_SEGMENT_FORMAT,
+          &self->segment);
+      GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+      GST_DEBUG_OBJECT (self, "Resetting segment");
+      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+      GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static GstCaps *
+gst_play_sink_video_convert_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstPlaySinkVideoConvert *self =
+      GST_PLAY_SINK_VIDEO_CONVERT (gst_pad_get_parent (pad));
+  GstCaps *ret;
+  GstPad *otherpad, *peer;
+
+  GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+  if (pad == self->srcpad)
+    otherpad = gst_object_ref (self->sinkpad);
+  else
+    otherpad = gst_object_ref (self->srcpad);
+  GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+
+  peer = gst_pad_get_peer (otherpad);
+  if (peer) {
+    ret = gst_pad_get_caps (peer, filter);
+    gst_object_unref (peer);
+  } else {
+    ret = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+  }
+
+  gst_object_unref (otherpad);
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static void
+gst_play_sink_video_convert_finalize (GObject * object)
+{
+  GstPlaySinkVideoConvert *self = GST_PLAY_SINK_VIDEO_CONVERT_CAST (object);
+
+  gst_object_unref (self->sink_proxypad);
+  g_mutex_free (self->lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_play_sink_video_convert_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstPlaySinkVideoConvert *self = GST_PLAY_SINK_VIDEO_CONVERT_CAST (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+      unblock_proxypad (self);
+      GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+      gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+      if (self->conv) {
+        gst_element_set_state (self->conv, GST_STATE_NULL);
+        gst_bin_remove (GST_BIN_CAST (self), self->conv);
+        self->conv = NULL;
+      }
+      if (self->scale) {
+        gst_element_set_state (self->scale, GST_STATE_NULL);
+        gst_bin_remove (GST_BIN_CAST (self), self->scale);
+        self->scale = NULL;
+      }
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+          self->sink_proxypad);
+      self->raw = FALSE;
+      GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
+      if (!gst_pad_is_blocked (self->sink_proxypad))
+        block_proxypad (self);
+      GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_play_sink_video_convert_class_init (GstPlaySinkVideoConvertClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  GST_DEBUG_CATEGORY_INIT (gst_play_sink_video_convert_debug,
+      "playsinkvideoconvert", 0, "play bin");
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_play_sink_video_convert_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sinktemplate));
+  gst_element_class_set_details_simple (gstelement_class,
+      "Player Sink Video Converter", "Video/Bin/Converter",
+      "Convenience bin for video conversion",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_play_sink_video_convert_change_state);
+}
+
+static void
+gst_play_sink_video_convert_init (GstPlaySinkVideoConvert * self)
+{
+  GstPadTemplate *templ;
+
+  self->lock = g_mutex_new ();
+  gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+
+  templ = gst_static_pad_template_get (&sinktemplate);
+  self->sinkpad = gst_ghost_pad_new_no_target_from_template ("sink", templ);
+  gst_pad_set_event_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_video_convert_sink_event));
+  gst_pad_set_getcaps_function (self->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_video_convert_getcaps));
+
+  self->sink_proxypad =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (self->sinkpad)));
+
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->sinkpad);
+  gst_object_unref (templ);
+
+  templ = gst_static_pad_template_get (&srctemplate);
+  self->srcpad = gst_ghost_pad_new_no_target_from_template ("src", templ);
+  gst_pad_set_getcaps_function (self->srcpad,
+      GST_DEBUG_FUNCPTR (gst_play_sink_video_convert_getcaps));
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->srcpad);
+  gst_object_unref (templ);
+
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+      self->sink_proxypad);
+}
diff --git a/gst/playback/gstplaysinkvideoconvert.h b/gst/playback/gstplaysinkvideoconvert.h
new file mode 100644
index 0000000..9c32976
--- /dev/null
+++ b/gst/playback/gstplaysinkvideoconvert.h
@@ -0,0 +1,84 @@
+/* GStreamer
+ * Copyright (C) <2011> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+
+#ifndef __GST_PLAY_SINK_VIDEO_CONVERT_H__
+#define __GST_PLAY_SINK_VIDEO_CONVERT_H__
+
+G_BEGIN_DECLS
+#define GST_TYPE_PLAY_SINK_VIDEO_CONVERT \
+  (gst_play_sink_video_convert_get_type())
+#define GST_PLAY_SINK_VIDEO_CONVERT(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAY_SINK_VIDEO_CONVERT, GstPlaySinkVideoConvert))
+#define GST_PLAY_SINK_VIDEO_CONVERT_CAST(obj) \
+  ((GstPlaySinkVideoConvert *) obj)
+#define GST_PLAY_SINK_VIDEO_CONVERT_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAY_SINK_VIDEO_CONVERT, GstPlaySinkVideoConvertClass))
+#define GST_IS_PLAY_SINK_VIDEO_CONVERT(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAY_SINK_VIDEO_CONVERT))
+#define GST_IS_PLAY_SINK_VIDEO_CONVERT_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAY_SINK_VIDEO_CONVERT))
+
+#define GST_PLAY_SINK_VIDEO_CONVERT_LOCK(obj) G_STMT_START {                   \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locking from thread %p",                           \
+                    g_thread_self ());                                  \
+    g_mutex_lock (GST_PLAY_SINK_VIDEO_CONVERT_CAST(obj)->lock);                \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locked from thread %p",                            \
+                    g_thread_self ());                                  \
+} G_STMT_END
+
+#define GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK(obj) G_STMT_START {                 \
+    GST_LOG_OBJECT (obj,                                                \
+                    "unlocking from thread %p",                         \
+                    g_thread_self ());                                  \
+    g_mutex_unlock (GST_PLAY_SINK_VIDEO_CONVERT_CAST(obj)->lock);              \
+} G_STMT_END
+
+typedef struct _GstPlaySinkVideoConvert GstPlaySinkVideoConvert;
+typedef struct _GstPlaySinkVideoConvertClass GstPlaySinkVideoConvertClass;
+
+struct _GstPlaySinkVideoConvert
+{
+  GstBin parent;
+
+  /* < private > */
+  GMutex *lock;
+
+  GstPad *sinkpad, *sink_proxypad;
+  gulong sink_proxypad_block_id;
+  GstSegment segment;
+
+  GstPad *srcpad;
+
+  gboolean raw;
+  GstElement *conv, *scale;
+};
+
+struct _GstPlaySinkVideoConvertClass
+{
+  GstBinClass parent;
+};
+
+GType gst_play_sink_video_convert_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_PLAY_SINK_VIDEO_CONVERT_H__ */
diff --git a/gst/playback/gstrawcaps.h b/gst/playback/gstrawcaps.h
new file mode 100644
index 0000000..7f9ef35
--- /dev/null
+++ b/gst/playback/gstrawcaps.h
@@ -0,0 +1,39 @@
+/* GStreamer
+ * Copyright (C) <2009> Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_RAW_CAPS_H__
+#define __GST_RAW_CAPS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define DEFAULT_RAW_CAPS \
+    "video/x-raw; " \
+    "audio/x-raw; " \
+    "text/plain; " \
+    "text/x-pango-markup; " \
+    "video/x-dvd-subpicture; " \
+    "subpicture/x-pgs"
+
+G_END_DECLS
+
+#endif /* __GST_RAW_CAPS__ */
+
diff --git a/gst/playback/gststreamselector.c b/gst/playback/gststreamselector.c
new file mode 100644
index 0000000..24f0031
--- /dev/null
+++ b/gst/playback/gststreamselector.c
@@ -0,0 +1,690 @@
+/* GStreamer
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gststreamselector.h"
+
+GST_DEBUG_CATEGORY_STATIC (stream_selector_debug);
+#define GST_CAT_DEFAULT stream_selector_debug
+
+static GstStaticPadTemplate gst_stream_selector_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_stream_selector_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+enum
+{
+  PROP_0,
+  PROP_N_PADS,
+  PROP_ACTIVE_PAD,
+  PROP_LAST
+};
+
+static gboolean gst_stream_selector_is_active_sinkpad (GstStreamSelector * sel,
+    GstPad * pad);
+static GstPad *gst_stream_selector_activate_sinkpad (GstStreamSelector * sel,
+    GstPad * pad);
+static GstPad *gst_stream_selector_get_linked_pad (GstPad * pad,
+    gboolean strict);
+
+#define GST_TYPE_SELECTOR_PAD \
+  (gst_selector_pad_get_type())
+#define GST_SELECTOR_PAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SELECTOR_PAD, GstSelectorPad))
+#define GST_SELECTOR_PAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SELECTOR_PAD, GstSelectorPadClass))
+#define GST_IS_SELECTOR_PAD(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SELECTOR_PAD))
+#define GST_IS_SELECTOR_PAD_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SELECTOR_PAD))
+#define GST_SELECTOR_PAD_CAST(obj) \
+  ((GstSelectorPad *)(obj))
+
+typedef struct _GstSelectorPad GstSelectorPad;
+typedef struct _GstSelectorPadClass GstSelectorPadClass;
+
+struct _GstSelectorPad
+{
+  GstPad parent;
+
+  gboolean active;
+  gboolean eos;
+  gboolean segment_pending;
+  GstSegment segment;
+  GstTagList *tags;
+};
+
+struct _GstSelectorPadClass
+{
+  GstPadClass parent;
+};
+
+static void gst_selector_pad_class_init (GstSelectorPadClass * klass);
+static void gst_selector_pad_init (GstSelectorPad * pad);
+static void gst_selector_pad_finalize (GObject * object);
+
+static void gst_selector_pad_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstPadClass *selector_pad_parent_class = NULL;
+
+static void gst_selector_pad_reset (GstSelectorPad * pad);
+static gboolean gst_selector_pad_event (GstPad * pad, GstEvent * event);
+static GstCaps *gst_selector_pad_getcaps (GstPad * pad, GstCaps * filter);
+static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstBuffer * buf);
+
+enum
+{
+  PROP_PAD_0,
+  PROP_PAD_TAGS,
+  PROP_PAD_ACTIVE,
+  PROP_PAD_LAST
+};
+
+static GType
+gst_selector_pad_get_type (void)
+{
+  static GType selector_pad_type = 0;
+
+  if (!selector_pad_type) {
+    static const GTypeInfo selector_pad_info = {
+      sizeof (GstSelectorPadClass),
+      NULL,
+      NULL,
+      (GClassInitFunc) gst_selector_pad_class_init,
+      NULL,
+      NULL,
+      sizeof (GstSelectorPad),
+      0,
+      (GInstanceInitFunc) gst_selector_pad_init,
+    };
+
+    selector_pad_type =
+        g_type_register_static (GST_TYPE_PAD, "GstPlaybinSelectorPad",
+        &selector_pad_info, 0);
+  }
+  return selector_pad_type;
+}
+
+static void
+gst_selector_pad_class_init (GstSelectorPadClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  selector_pad_parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_selector_pad_finalize;
+  gobject_class->get_property = gst_selector_pad_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_PAD_TAGS,
+      g_param_spec_boxed ("tags", "Tags",
+          "The currently active tags on the pad", GST_TYPE_TAG_LIST,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_PAD_ACTIVE,
+      g_param_spec_boolean ("active", "Active",
+          "If the pad is currently active", FALSE,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_selector_pad_init (GstSelectorPad * pad)
+{
+  gst_selector_pad_reset (pad);
+}
+
+static void
+gst_selector_pad_finalize (GObject * object)
+{
+  GstSelectorPad *pad;
+
+  pad = GST_SELECTOR_PAD_CAST (object);
+
+  if (pad->tags)
+    gst_tag_list_free (pad->tags);
+
+  G_OBJECT_CLASS (selector_pad_parent_class)->finalize (object);
+}
+
+static void
+gst_selector_pad_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstSelectorPad *pad;
+
+  pad = GST_SELECTOR_PAD (object);
+
+  switch (prop_id) {
+    case PROP_PAD_TAGS:
+      GST_OBJECT_LOCK (object);
+      g_value_set_boxed (value, pad->tags);
+      GST_OBJECT_UNLOCK (object);
+      break;
+    case PROP_PAD_ACTIVE:
+    {
+      GstStreamSelector *sel;
+
+      sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+      g_value_set_boolean (value, gst_stream_selector_is_active_sinkpad (sel,
+              GST_PAD_CAST (pad)));
+      gst_object_unref (sel);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_selector_pad_reset (GstSelectorPad * pad)
+{
+  pad->active = FALSE;
+  pad->eos = FALSE;
+  gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED);
+}
+
+static gboolean
+gst_selector_pad_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res = TRUE;
+  gboolean forward = TRUE;
+  GstStreamSelector *sel;
+  GstSelectorPad *selpad;
+  GstPad *active_sinkpad;
+
+  sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+  selpad = GST_SELECTOR_PAD_CAST (pad);
+
+  /* only forward if we are dealing with the active sinkpad */
+  active_sinkpad = gst_stream_selector_activate_sinkpad (sel, pad);
+  forward = (active_sinkpad == pad);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_selector_pad_reset (selpad);
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &selpad->segment);
+
+      GST_DEBUG_OBJECT (selpad, "configured SEGMENT %" GST_SEGMENT_FORMAT,
+          &selpad->segment);
+      /* if we are not going to forward the segment, mark the segment as
+       * pending */
+      if (!forward)
+        selpad->segment_pending = TRUE;
+      break;
+    }
+    case GST_EVENT_TAG:
+    {
+      GstTagList *tags;
+
+      GST_OBJECT_LOCK (selpad);
+      if (selpad->tags)
+        gst_tag_list_free (selpad->tags);
+      gst_event_parse_tag (event, &tags);
+      if (tags)
+        tags = gst_tag_list_copy (tags);
+      selpad->tags = tags;
+      GST_DEBUG_OBJECT (sel, "received tags %" GST_PTR_FORMAT, selpad->tags);
+      GST_OBJECT_UNLOCK (selpad);
+      break;
+    }
+    case GST_EVENT_EOS:
+      selpad->eos = TRUE;
+      break;
+    default:
+      break;
+  }
+  if (forward)
+    res = gst_pad_push_event (sel->srcpad, event);
+  else
+    gst_event_unref (event);
+
+  gst_object_unref (sel);
+
+  return res;
+}
+
+static GstCaps *
+gst_selector_pad_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstStreamSelector *sel;
+  GstCaps *caps;
+
+  sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+
+  GST_DEBUG_OBJECT (sel, "Getting caps of srcpad peer");
+  caps = gst_pad_peer_get_caps (sel->srcpad, filter);
+  if (caps == NULL)
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+
+  gst_object_unref (sel);
+
+  return caps;
+}
+
+static GstFlowReturn
+gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
+{
+  GstStreamSelector *sel;
+  GstFlowReturn res;
+  GstPad *active_sinkpad;
+  GstSelectorPad *selpad;
+  GstClockTime timestamp;
+  GstSegment *seg;
+
+  sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+  selpad = GST_SELECTOR_PAD_CAST (pad);
+  seg = &selpad->segment;
+
+  active_sinkpad = gst_stream_selector_activate_sinkpad (sel, pad);
+
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+  if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+    GST_DEBUG_OBJECT (sel, "received timestamp %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (timestamp));
+    seg->position = timestamp;
+  }
+
+  /* Ignore buffers from pads except the selected one */
+  if (pad != active_sinkpad)
+    goto ignore;
+
+  /* if we have a pending segment, push it out now */
+  if (selpad->segment_pending) {
+    gst_pad_push_event (sel->srcpad, gst_event_new_segment (seg));
+    selpad->segment_pending = FALSE;
+  }
+
+  /* forward */
+  GST_DEBUG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s", buf,
+      GST_DEBUG_PAD_NAME (pad));
+  res = gst_pad_push (sel->srcpad, buf);
+done:
+  gst_object_unref (sel);
+  return res;
+  /* dropped buffers */
+ignore:
+  {
+    GST_DEBUG_OBJECT (sel, "Ignoring buffer %p from pad %s:%s",
+        buf, GST_DEBUG_PAD_NAME (pad));
+    gst_buffer_unref (buf);
+    res = GST_FLOW_NOT_LINKED;
+    goto done;
+  }
+}
+
+static void gst_stream_selector_dispose (GObject * object);
+
+static void gst_stream_selector_init (GstStreamSelector * sel);
+static void gst_stream_selector_base_init (GstStreamSelectorClass * klass);
+static void gst_stream_selector_class_init (GstStreamSelectorClass * klass);
+
+static void gst_stream_selector_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_stream_selector_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstPad *gst_stream_selector_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * unused, const GstCaps * caps);
+static void gst_stream_selector_release_pad (GstElement * element,
+    GstPad * pad);
+static GstIterator *gst_stream_selector_pad_iterate_linked_pads (GstPad * pad);
+static GstCaps *gst_stream_selector_getcaps (GstPad * pad, GstCaps * filter);
+
+static GstElementClass *parent_class = NULL;
+
+GType
+gst_stream_selector_get_type (void)
+{
+  static GType stream_selector_type = 0;
+
+  if (!stream_selector_type) {
+    static const GTypeInfo stream_selector_info = {
+      sizeof (GstStreamSelectorClass),
+      (GBaseInitFunc) gst_stream_selector_base_init,
+      NULL,
+      (GClassInitFunc) gst_stream_selector_class_init,
+      NULL,
+      NULL,
+      sizeof (GstStreamSelector),
+      0,
+      (GInstanceInitFunc) gst_stream_selector_init,
+    };
+    stream_selector_type =
+        g_type_register_static (GST_TYPE_ELEMENT,
+        "GstStreamSelector", &stream_selector_info, 0);
+    GST_DEBUG_CATEGORY_INIT (stream_selector_debug,
+        "streamselector", 0, "A stream-selector element");
+  }
+
+  return stream_selector_type;
+}
+
+static void
+gst_stream_selector_base_init (GstStreamSelectorClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_set_details_simple (element_class,
+      "StreamSelector", "Generic",
+      "N-to-1 input stream_selectoring",
+      "Julien Moutte <julien@moutte.net>, "
+      "Jan Schmidt <thaytan@mad.scientist.com>, "
+      "Wim Taymans <wim.taymans@gmail.com>");
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_stream_selector_sink_factory));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_stream_selector_src_factory));
+}
+
+static void
+gst_stream_selector_class_init (GstStreamSelectorClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->dispose = gst_stream_selector_dispose;
+
+  gobject_class->set_property = gst_stream_selector_set_property;
+  gobject_class->get_property = gst_stream_selector_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_N_PADS,
+      g_param_spec_uint ("n-pads", "Number of Pads",
+          "The number of sink pads", 0, G_MAXUINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
+      g_param_spec_object ("active-pad", "Active Pad",
+          "The currently active sink pad", GST_TYPE_PAD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gstelement_class->request_new_pad = gst_stream_selector_request_new_pad;
+  gstelement_class->release_pad = gst_stream_selector_release_pad;
+}
+
+static void
+gst_stream_selector_init (GstStreamSelector * sel)
+{
+  sel->srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  gst_pad_set_iterate_internal_links_function (sel->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_selector_pad_iterate_linked_pads));
+  gst_pad_set_getcaps_function (sel->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_selector_getcaps));
+  gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad);
+  /* sinkpad management */
+  sel->padcount = 0;
+  sel->active_sinkpad = NULL;
+  gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED);
+}
+
+static void
+gst_stream_selector_dispose (GObject * object)
+{
+  GstStreamSelector *sel = GST_STREAM_SELECTOR (object);
+
+  if (sel->active_sinkpad) {
+    gst_object_unref (sel->active_sinkpad);
+    sel->active_sinkpad = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_stream_selector_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstStreamSelector *sel = GST_STREAM_SELECTOR (object);
+
+  switch (prop_id) {
+    case PROP_ACTIVE_PAD:
+    {
+      GstPad *pad = NULL;
+      GstPad **active_pad_p;
+
+      pad = g_value_get_object (value);
+
+      GST_OBJECT_LOCK (object);
+      if (pad != sel->active_sinkpad) {
+        GstSelectorPad *selpad;
+
+        selpad = GST_SELECTOR_PAD_CAST (pad);
+        /* we can only activate pads that have data received */
+        if (selpad && !selpad->active) {
+          GST_DEBUG_OBJECT (sel, "No data received on pad %" GST_PTR_FORMAT,
+              pad);
+        } else {
+          active_pad_p = &sel->active_sinkpad;
+          gst_object_replace ((GstObject **) active_pad_p,
+              GST_OBJECT_CAST (pad));
+          GST_DEBUG_OBJECT (sel, "New active pad is %" GST_PTR_FORMAT,
+              sel->active_sinkpad);
+        }
+      }
+      GST_OBJECT_UNLOCK (object);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_stream_selector_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstStreamSelector *sel = GST_STREAM_SELECTOR (object);
+
+  switch (prop_id) {
+    case PROP_N_PADS:
+      GST_OBJECT_LOCK (object);
+      g_value_set_uint (value, sel->n_pads);
+      GST_OBJECT_UNLOCK (object);
+      break;
+    case PROP_ACTIVE_PAD:{
+      GST_OBJECT_LOCK (object);
+      g_value_set_object (value, sel->active_sinkpad);
+      GST_OBJECT_UNLOCK (object);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstPad *
+gst_stream_selector_get_linked_pad (GstPad * pad, gboolean strict)
+{
+  GstStreamSelector *sel;
+  GstPad *otherpad = NULL;
+
+  sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+
+  GST_OBJECT_LOCK (sel);
+  if (pad == sel->srcpad)
+    otherpad = sel->active_sinkpad;
+  else if (pad == sel->active_sinkpad || !strict)
+    otherpad = sel->srcpad;
+  if (otherpad)
+    gst_object_ref (otherpad);
+  GST_OBJECT_UNLOCK (sel);
+  gst_object_unref (sel);
+  return otherpad;
+}
+
+static GstCaps *
+gst_stream_selector_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstPad *otherpad;
+  GstObject *parent;
+  GstCaps *caps;
+
+  otherpad = gst_stream_selector_get_linked_pad (pad, FALSE);
+  parent = gst_object_get_parent (GST_OBJECT (pad));
+  if (!otherpad) {
+    GST_DEBUG_OBJECT (parent,
+        "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+  } else {
+    GST_DEBUG_OBJECT (parent,
+        "Pad %s:%s is linked (to %s:%s), returning peer caps",
+        GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad));
+    /* if the peer has caps, use those. If the pad is not linked, this function
+     * returns NULL and we return ANY */
+    if (!(caps = gst_pad_peer_get_caps (otherpad, filter)))
+      caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+    gst_object_unref (otherpad);
+  }
+
+  gst_object_unref (parent);
+  return caps;
+}
+
+/* check if the pad is the active sinkpad */
+static gboolean
+gst_stream_selector_is_active_sinkpad (GstStreamSelector * sel, GstPad * pad)
+{
+  gboolean res;
+
+  GST_OBJECT_LOCK (sel);
+  res = (pad == sel->active_sinkpad);
+  GST_OBJECT_UNLOCK (sel);
+
+  return res;
+}
+
+/* Get or create the active sinkpad */
+static GstPad *
+gst_stream_selector_activate_sinkpad (GstStreamSelector * sel, GstPad * pad)
+{
+  GstPad *active_sinkpad;
+  GstSelectorPad *selpad;
+
+  selpad = GST_SELECTOR_PAD_CAST (pad);
+
+  GST_OBJECT_LOCK (sel);
+  selpad->active = TRUE;
+  active_sinkpad = sel->active_sinkpad;
+  if (active_sinkpad == NULL) {
+    /* first pad we get an alloc on becomes the activated pad by default */
+    active_sinkpad = sel->active_sinkpad = gst_object_ref (pad);
+    GST_DEBUG_OBJECT (sel, "Activating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+  }
+  GST_OBJECT_UNLOCK (sel);
+
+  return active_sinkpad;
+}
+
+static GstIterator *
+gst_stream_selector_pad_iterate_linked_pads (GstPad * pad)
+{
+  GstStreamSelector *sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
+  GValue value = { 0, };
+  GstPad *otherpad;
+  GstIterator *ret = NULL;
+
+  otherpad = gst_stream_selector_get_linked_pad (pad, TRUE);
+  if (otherpad) {
+    g_value_init (&value, GST_TYPE_PAD);
+    g_value_set_object (&value, otherpad);
+    ret = gst_iterator_new_single (GST_TYPE_PAD, &value);
+    g_value_unset (&value);
+    gst_object_unref (otherpad);
+  }
+  gst_object_unref (sel);
+
+  return ret;
+}
+
+static GstPad *
+gst_stream_selector_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * unused, const GstCaps * caps)
+{
+  GstStreamSelector *sel;
+  gchar *name = NULL;
+  GstPad *sinkpad = NULL;
+
+  sel = GST_STREAM_SELECTOR (element);
+  g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
+  GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
+  GST_OBJECT_LOCK (sel);
+  name = g_strdup_printf ("sink%d", sel->padcount++);
+  sinkpad = g_object_new (GST_TYPE_SELECTOR_PAD,
+      "name", name, "direction", templ->direction, "template", templ, NULL);
+  g_free (name);
+  sel->n_pads++;
+  GST_OBJECT_UNLOCK (sel);
+
+  gst_pad_set_event_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_selector_pad_event));
+  gst_pad_set_getcaps_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_selector_pad_getcaps));
+  gst_pad_set_chain_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_selector_pad_chain));
+  gst_pad_set_iterate_internal_links_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_selector_pad_iterate_linked_pads));
+
+  gst_pad_set_active (sinkpad, TRUE);
+  gst_element_add_pad (GST_ELEMENT (sel), sinkpad);
+  return sinkpad;
+}
+
+static void
+gst_stream_selector_release_pad (GstElement * element, GstPad * pad)
+{
+  GstStreamSelector *sel;
+
+  sel = GST_STREAM_SELECTOR (element);
+  GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+  GST_OBJECT_LOCK (sel);
+  /* if the pad was the active pad, makes us select a new one */
+  if (sel->active_sinkpad == pad) {
+    GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+    sel->active_sinkpad = NULL;
+  }
+  sel->n_pads--;
+  GST_OBJECT_UNLOCK (sel);
+
+  gst_pad_set_active (pad, FALSE);
+  gst_element_remove_pad (GST_ELEMENT (sel), pad);
+}
diff --git a/gst/playback/gststreamselector.h b/gst/playback/gststreamselector.h
new file mode 100644
index 0000000..5200a0b
--- /dev/null
+++ b/gst/playback/gststreamselector.h
@@ -0,0 +1,62 @@
+/* GStreamer
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+ 
+#ifndef __GST_STREAM_SELECTOR_H__
+#define __GST_STREAM_SELECTOR_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_STREAM_SELECTOR \
+  (gst_stream_selector_get_type())
+#define GST_STREAM_SELECTOR(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_SELECTOR, GstStreamSelector))
+#define GST_STREAM_SELECTOR_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_STREAM_SELECTOR, GstStreamSelectorClass))
+#define GST_IS_STREAM_SELECTOR(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_SELECTOR))
+#define GST_IS_STREAM_SELECTOR_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_STREAM_SELECTOR))
+
+typedef struct _GstStreamSelector GstStreamSelector;
+typedef struct _GstStreamSelectorClass GstStreamSelectorClass;
+
+struct _GstStreamSelector {
+  GstElement element;
+
+  GstPad *srcpad;
+
+  GstPad *active_sinkpad;
+  guint n_pads;
+  guint padcount;
+
+  GstSegment segment;
+};
+
+struct _GstStreamSelectorClass {
+  GstElementClass parent_class;
+};
+
+GType gst_stream_selector_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_STREAM_SELECTOR_H__ */
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
new file mode 100644
index 0000000..017a944
--- /dev/null
+++ b/gst/playback/gststreamsynchronizer.c
@@ -0,0 +1,944 @@
+/* GStreamer
+ * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gststreamsynchronizer.h"
+
+GST_DEBUG_CATEGORY_STATIC (stream_synchronizer_debug);
+#define GST_CAT_DEFAULT stream_synchronizer_debug
+
+#define GST_STREAM_SYNCHRONIZER_LOCK(obj) G_STMT_START {                   \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locking from thread %p",                           \
+                    g_thread_self ());                                  \
+    g_mutex_lock (GST_STREAM_SYNCHRONIZER_CAST(obj)->lock);                \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locked from thread %p",                            \
+                    g_thread_self ());                                  \
+} G_STMT_END
+
+#define GST_STREAM_SYNCHRONIZER_UNLOCK(obj) G_STMT_START {                 \
+    GST_LOG_OBJECT (obj,                                                \
+                    "unlocking from thread %p",                         \
+                    g_thread_self ());                                  \
+    g_mutex_unlock (GST_STREAM_SYNCHRONIZER_CAST(obj)->lock);              \
+} G_STMT_END
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src_%d",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink_%d",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+static const gboolean passthrough = TRUE;
+
+#define gst_stream_synchronizer_parent_class parent_class
+G_DEFINE_TYPE (GstStreamSynchronizer, gst_stream_synchronizer,
+    GST_TYPE_ELEMENT);
+
+typedef struct
+{
+  GstStreamSynchronizer *transform;
+  guint stream_number;
+  GstPad *srcpad;
+  GstPad *sinkpad;
+  GstSegment segment;
+
+  gboolean wait;
+  gboolean new_stream;
+  gboolean drop_discont;
+  gboolean is_eos;
+  gboolean seen_data;
+
+  gint64 running_time_diff;
+} GstStream;
+
+/* Must be called with lock! */
+static GstPad *
+gst_stream_get_other_pad (GstStream * stream, GstPad * pad)
+{
+  if (stream->sinkpad == pad)
+    return gst_object_ref (stream->srcpad);
+  else if (stream->srcpad == pad)
+    return gst_object_ref (stream->sinkpad);
+
+  return NULL;
+}
+
+static GstPad *
+gst_stream_get_other_pad_from_pad (GstPad * pad)
+{
+  GstStreamSynchronizer *self =
+      GST_STREAM_SYNCHRONIZER (gst_pad_get_parent (pad));
+  GstStream *stream;
+  GstPad *opad = NULL;
+
+  GST_STREAM_SYNCHRONIZER_LOCK (self);
+  stream = gst_pad_get_element_private (pad);
+  if (!stream)
+    goto out;
+
+  opad = gst_stream_get_other_pad (stream, pad);
+
+out:
+  GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+  gst_object_unref (self);
+
+  if (!opad)
+    GST_WARNING_OBJECT (pad, "Trying to get other pad after releasing");
+
+  return opad;
+}
+
+/* Generic pad functions */
+static GstIterator *
+gst_stream_synchronizer_iterate_internal_links (GstPad * pad)
+{
+  GstIterator *it = NULL;
+  GstPad *opad;
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    GValue value = { 0, };
+
+    g_value_init (&value, GST_TYPE_PAD);
+    g_value_set_object (&value, opad);
+    it = gst_iterator_new_single (GST_TYPE_PAD, &value);
+    g_value_unset (&value);
+    gst_object_unref (opad);
+  }
+
+  return it;
+}
+
+static gboolean
+gst_stream_synchronizer_query (GstPad * pad, GstQuery * query)
+{
+  GstPad *opad;
+  gboolean ret = FALSE;
+
+  GST_LOG_OBJECT (pad, "Handling query %s", GST_QUERY_TYPE_NAME (query));
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_peer_query (opad, query);
+    gst_object_unref (opad);
+  }
+
+  return ret;
+}
+
+static GstCaps *
+gst_stream_synchronizer_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstPad *opad;
+  GstCaps *ret = NULL;
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_peer_get_caps (opad, filter);
+    gst_object_unref (opad);
+  }
+
+  if (ret == NULL)
+    ret = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+
+  GST_LOG_OBJECT (pad, "Returning caps: %" GST_PTR_FORMAT, ret);
+
+  return ret;
+}
+
+static gboolean
+gst_stream_synchronizer_acceptcaps (GstPad * pad, GstCaps * caps)
+{
+  GstPad *opad;
+  gboolean ret = FALSE;
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_peer_accept_caps (opad, caps);
+    gst_object_unref (opad);
+  }
+
+  GST_LOG_OBJECT (pad, "Caps%s accepted: %" GST_PTR_FORMAT, (ret ? "" : " not"),
+      caps);
+
+  return ret;
+}
+
+/* srcpad functions */
+static gboolean
+gst_stream_synchronizer_src_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamSynchronizer *self =
+      GST_STREAM_SYNCHRONIZER (gst_pad_get_parent (pad));
+  GstPad *opad;
+  gboolean ret = FALSE;
+
+  if (passthrough)
+    goto skip_adjustments;
+
+  GST_LOG_OBJECT (pad, "Handling event %s: %" GST_PTR_FORMAT,
+      GST_EVENT_TYPE_NAME (event), event);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_QOS:{
+      gdouble proportion;
+      GstClockTimeDiff diff;
+      GstClockTime timestamp;
+      gint64 running_time_diff;
+      GstStream *stream;
+
+      gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
+      gst_event_unref (event);
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      stream = gst_pad_get_element_private (pad);
+      if (stream)
+        running_time_diff = stream->running_time_diff;
+      else
+        running_time_diff = -1;
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+
+      if (running_time_diff == -1) {
+        GST_WARNING_OBJECT (pad, "QOS event before group start");
+        goto out;
+      } else if (timestamp < running_time_diff) {
+        GST_DEBUG_OBJECT (pad, "QOS event from previous group");
+        goto out;
+      }
+
+      GST_LOG_OBJECT (pad,
+          "Adjusting QOS event: %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT " = %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (timestamp),
+          GST_TIME_ARGS (running_time_diff),
+          GST_TIME_ARGS (timestamp - running_time_diff));
+
+      timestamp -= running_time_diff;
+
+      /* That case is invalid for QoS events */
+      if (diff < 0 && -diff > timestamp) {
+        GST_DEBUG_OBJECT (pad, "QOS event from previous group");
+        ret = TRUE;
+        goto out;
+      }
+
+      event =
+          gst_event_new_qos (GST_QOS_TYPE_UNDERFLOW, proportion, diff,
+          timestamp);
+      break;
+    }
+    default:
+      break;
+  }
+
+skip_adjustments:
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_push_event (opad, event);
+    gst_object_unref (opad);
+  }
+
+out:
+  gst_object_unref (self);
+
+  return ret;
+}
+
+/* sinkpad functions */
+static gboolean
+gst_stream_synchronizer_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstStreamSynchronizer *self =
+      GST_STREAM_SYNCHRONIZER (gst_pad_get_parent (pad));
+  GstPad *opad;
+  gboolean ret = FALSE;
+
+  if (passthrough)
+    goto skip_adjustments;
+
+  GST_LOG_OBJECT (pad, "Handling event %s: %" GST_PTR_FORMAT,
+      GST_EVENT_TYPE_NAME (event), event);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SINK_MESSAGE:{
+      GstMessage *message;
+
+      gst_event_parse_sink_message (event, &message);
+      if (gst_message_has_name (message, "playbin-stream-changed")) {
+        GstStream *stream;
+
+        GST_STREAM_SYNCHRONIZER_LOCK (self);
+        stream = gst_pad_get_element_private (pad);
+        if (stream) {
+          GList *l;
+          gboolean all_wait = TRUE;
+
+          GST_DEBUG_OBJECT (pad, "Stream %d changed", stream->stream_number);
+
+          stream->is_eos = FALSE;
+          stream->wait = TRUE;
+          stream->new_stream = TRUE;
+
+          for (l = self->streams; l; l = l->next) {
+            GstStream *ostream = l->data;
+
+            all_wait = all_wait && ostream->wait;
+            if (!all_wait)
+              break;
+          }
+          if (all_wait) {
+            gint64 position = 0;
+
+            GST_DEBUG_OBJECT (self, "All streams have changed -- unblocking");
+
+            for (l = self->streams; l; l = l->next) {
+              GstStream *ostream = l->data;
+              gint64 stop_running_time;
+              gint64 position_running_time;
+
+              ostream->wait = FALSE;
+
+              stop_running_time =
+                  gst_segment_to_running_time (&ostream->segment,
+                  GST_FORMAT_TIME, ostream->segment.stop);
+              position_running_time =
+                  gst_segment_to_running_time (&ostream->segment,
+                  GST_FORMAT_TIME, ostream->segment.position);
+              position =
+                  MAX (position, MAX (stop_running_time,
+                      position_running_time));
+            }
+            position = MAX (0, position);
+            self->group_start_time = MAX (self->group_start_time, position);
+
+            GST_DEBUG_OBJECT (self, "New group start time: %" GST_TIME_FORMAT,
+                GST_TIME_ARGS (self->group_start_time));
+
+            g_cond_broadcast (self->stream_finish_cond);
+          }
+        }
+        GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      }
+      gst_message_unref (message);
+      break;
+    }
+    case GST_EVENT_SEGMENT:{
+      GstStream *stream;
+      GstSegment segment;
+
+      gst_event_copy_segment (event, &segment);
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      stream = gst_pad_get_element_private (pad);
+      if (stream) {
+        if (stream->wait) {
+          GST_DEBUG_OBJECT (pad, "Stream %d is waiting", stream->stream_number);
+          g_cond_wait (self->stream_finish_cond, self->lock);
+          stream = gst_pad_get_element_private (pad);
+          if (stream)
+            stream->wait = FALSE;
+        }
+      }
+
+      if (self->shutdown) {
+        GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+        gst_event_unref (event);
+        goto done;
+      }
+
+      if (stream && segment.format == GST_FORMAT_TIME) {
+        if (stream->new_stream) {
+          gint64 position_running_time = 0;
+          gint64 stop_running_time = 0;
+
+          if (stream->segment.format == GST_FORMAT_TIME) {
+            position_running_time =
+                gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
+                stream->segment.position);
+            position_running_time = MAX (position_running_time, 0);
+            stop_running_time =
+                gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
+                stream->segment.stop);
+            stop_running_time = MAX (position_running_time, 0);
+
+            if (stop_running_time != position_running_time) {
+              GST_WARNING_OBJECT (pad,
+                  "Gap between position and segment stop: %" GST_TIME_FORMAT
+                  " != %" GST_TIME_FORMAT, GST_TIME_ARGS (stop_running_time),
+                  GST_TIME_ARGS (position_running_time));
+            }
+
+            if (stop_running_time < position_running_time) {
+              GST_DEBUG_OBJECT (pad, "Updating stop position");
+              stream->segment.stop = stream->segment.position;
+              gst_pad_push_event (stream->srcpad,
+                  gst_event_new_segment (&stream->segment));
+            }
+            stop_running_time = MAX (stop_running_time, position_running_time);
+            GST_DEBUG_OBJECT (pad,
+                "Stop running time of last group: %" GST_TIME_FORMAT,
+                GST_TIME_ARGS (stop_running_time));
+          }
+          stream->new_stream = FALSE;
+          stream->drop_discont = TRUE;
+
+          if (stop_running_time < self->group_start_time) {
+            gint64 diff = self->group_start_time - stop_running_time;
+
+            GST_DEBUG_OBJECT (pad,
+                "Advancing running time for other streams by: %"
+                GST_TIME_FORMAT, GST_TIME_ARGS (diff));
+
+            segment.base += diff;
+          }
+        }
+
+        GST_DEBUG_OBJECT (pad, "Segment was: %" GST_SEGMENT_FORMAT,
+            &stream->segment);
+        gst_segment_copy_into (&segment, &stream->segment);
+        GST_DEBUG_OBJECT (pad, "Segment now is: %" GST_SEGMENT_FORMAT,
+            &stream->segment);
+
+        GST_DEBUG_OBJECT (pad, "Stream start running time: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (stream->segment.base));
+        stream->running_time_diff = stream->segment.base;
+      } else if (stream) {
+        GST_WARNING_OBJECT (pad, "Non-TIME segment: %s",
+            gst_format_get_name (segment.format));
+        gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
+      }
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:{
+      GstStream *stream;
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      stream = gst_pad_get_element_private (pad);
+      if (stream) {
+        GST_DEBUG_OBJECT (pad, "Resetting segment for stream %d",
+            stream->stream_number);
+        gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
+
+        stream->is_eos = FALSE;
+        stream->wait = FALSE;
+        stream->new_stream = FALSE;
+        stream->drop_discont = FALSE;
+        stream->seen_data = FALSE;
+      }
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      break;
+    }
+    case GST_EVENT_EOS:{
+      GstStream *stream;
+      GList *l;
+      gboolean all_eos = TRUE;
+      gboolean seen_data;
+      GSList *pads = NULL;
+      GstPad *srcpad;
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      stream = gst_pad_get_element_private (pad);
+      if (!stream) {
+        GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+        GST_WARNING_OBJECT (pad, "EOS for unknown stream");
+        break;
+      }
+
+      GST_DEBUG_OBJECT (pad, "Have EOS for stream %d", stream->stream_number);
+      stream->is_eos = TRUE;
+
+      seen_data = stream->seen_data;
+      srcpad = gst_object_ref (stream->srcpad);
+
+      for (l = self->streams; l; l = l->next) {
+        GstStream *ostream = l->data;
+
+        all_eos = all_eos && ostream->is_eos;
+        if (!all_eos)
+          break;
+      }
+
+      if (all_eos) {
+        GST_DEBUG_OBJECT (self, "All streams are EOS -- forwarding");
+        for (l = self->streams; l; l = l->next) {
+          GstStream *ostream = l->data;
+          /* local snapshot of current pads */
+          gst_object_ref (ostream->srcpad);
+          pads = g_slist_prepend (pads, ostream->srcpad);
+        }
+      }
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      /* drop lock when sending eos, which may block in e.g. preroll */
+      if (pads) {
+        GstPad *pad;
+        GSList *epad;
+
+        ret = TRUE;
+        epad = pads;
+        while (epad) {
+          pad = epad->data;
+          GST_DEBUG_OBJECT (pad, "Pushing EOS");
+          ret = ret && gst_pad_push_event (pad, gst_event_new_eos ());
+          gst_object_unref (pad);
+          epad = g_slist_next (epad);
+        }
+        g_slist_free (pads);
+      } else {
+        /* if EOS, but no data has passed, then send something to replace EOS
+         * for preroll purposes */
+        if (!seen_data) {
+          GstBuffer *buf = gst_buffer_new ();
+
+          gst_pad_push (srcpad, buf);
+        }
+      }
+      gst_object_unref (srcpad);
+      goto done;
+      break;
+    }
+    default:
+      break;
+  }
+
+skip_adjustments:
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_push_event (opad, event);
+    gst_object_unref (opad);
+  }
+
+done:
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_stream_synchronizer_sink_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstStreamSynchronizer *self =
+      GST_STREAM_SYNCHRONIZER (gst_pad_get_parent (pad));
+  GstPad *opad;
+  GstFlowReturn ret = GST_FLOW_ERROR;
+  GstStream *stream;
+  GstClockTime timestamp = GST_CLOCK_TIME_NONE;
+  GstClockTime timestamp_end = GST_CLOCK_TIME_NONE;
+
+  if (passthrough) {
+    opad = gst_stream_get_other_pad_from_pad (pad);
+    if (opad) {
+      ret = gst_pad_push (opad, buffer);
+      gst_object_unref (opad);
+    }
+    goto done;
+  }
+
+  GST_LOG_OBJECT (pad, "Handling buffer %p: size=%" G_GSIZE_FORMAT
+      ", timestamp=%" GST_TIME_FORMAT " duration=%" GST_TIME_FORMAT
+      " offset=%" G_GUINT64_FORMAT " offset_end=%" G_GUINT64_FORMAT,
+      buffer, gst_buffer_get_size (buffer),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
+      GST_BUFFER_OFFSET (buffer), GST_BUFFER_OFFSET_END (buffer));
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)
+      && GST_BUFFER_DURATION_IS_VALID (buffer))
+    timestamp_end = timestamp + GST_BUFFER_DURATION (buffer);
+
+  GST_STREAM_SYNCHRONIZER_LOCK (self);
+  stream = gst_pad_get_element_private (pad);
+
+  stream->seen_data = TRUE;
+  if (stream && stream->drop_discont) {
+    buffer = gst_buffer_make_writable (buffer);
+    GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
+    stream->drop_discont = FALSE;
+  }
+
+  if (stream && stream->segment.format == GST_FORMAT_TIME
+      && GST_CLOCK_TIME_IS_VALID (timestamp)) {
+    GST_LOG_OBJECT (pad,
+        "Updating last-stop from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (stream->segment.position), GST_TIME_ARGS (timestamp));
+    stream->segment.position = timestamp;
+  }
+  GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+
+  opad = gst_stream_get_other_pad_from_pad (pad);
+  if (opad) {
+    ret = gst_pad_push (opad, buffer);
+    gst_object_unref (opad);
+  }
+
+  GST_LOG_OBJECT (pad, "Push returned: %s", gst_flow_get_name (ret));
+  if (ret == GST_FLOW_OK) {
+    GList *l;
+
+    GST_STREAM_SYNCHRONIZER_LOCK (self);
+    stream = gst_pad_get_element_private (pad);
+    if (stream && stream->segment.format == GST_FORMAT_TIME
+        && GST_CLOCK_TIME_IS_VALID (timestamp_end)) {
+      GST_LOG_OBJECT (pad,
+          "Updating last-stop from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (stream->segment.position),
+          GST_TIME_ARGS (timestamp_end));
+      stream->segment.position = timestamp_end;
+    }
+
+    /* Advance EOS streams if necessary. For non-EOS
+     * streams the demuxers should already do this! */
+    for (l = self->streams; l; l = l->next) {
+      GstStream *ostream = l->data;
+      gint64 position;
+
+      if (!ostream->is_eos || ostream->segment.format != GST_FORMAT_TIME)
+        continue;
+
+      if (ostream->segment.position != -1)
+        position = ostream->segment.position;
+      else
+        position = ostream->segment.start;
+
+      /* Is there a 1 second lag? */
+      if (position != -1 && position + GST_SECOND < timestamp_end) {
+        gint64 new_start, new_stop;
+
+        new_start = timestamp_end - GST_SECOND;
+        if (ostream->segment.stop == -1)
+          new_stop = -1;
+        else
+          new_stop = MAX (new_start, ostream->segment.stop);
+
+        GST_DEBUG_OBJECT (ostream->sinkpad,
+            "Advancing stream %u from %" GST_TIME_FORMAT " to %"
+            GST_TIME_FORMAT, ostream->stream_number, GST_TIME_ARGS (position),
+            GST_TIME_ARGS (new_start));
+
+        ostream->segment.start = new_start;
+        ostream->segment.stop = new_stop;
+        ostream->segment.time = new_start;
+        ostream->segment.position = new_start;
+
+        gst_pad_push_event (ostream->srcpad,
+            gst_event_new_segment (&ostream->segment));
+      }
+    }
+    GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+  }
+
+done:
+
+  gst_object_unref (self);
+
+  return ret;
+}
+
+/* GstElement vfuncs */
+static GstPad *
+gst_stream_synchronizer_request_new_pad (GstElement * element,
+    GstPadTemplate * temp, const gchar * name, const GstCaps * caps)
+{
+  GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (element);
+  GstStream *stream;
+  gchar *tmp;
+
+  GST_STREAM_SYNCHRONIZER_LOCK (self);
+  GST_DEBUG_OBJECT (self, "Requesting new pad for stream %d",
+      self->current_stream_number);
+
+  stream = g_slice_new0 (GstStream);
+  stream->transform = self;
+  stream->stream_number = self->current_stream_number;
+
+  tmp = g_strdup_printf ("sink_%d", self->current_stream_number);
+  stream->sinkpad = gst_pad_new_from_static_template (&sinktemplate, tmp);
+  g_free (tmp);
+  gst_pad_set_element_private (stream->sinkpad, stream);
+  gst_pad_set_iterate_internal_links_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_iterate_internal_links));
+  gst_pad_set_query_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_query));
+  gst_pad_set_getcaps_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_getcaps));
+  gst_pad_set_acceptcaps_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_acceptcaps));
+  gst_pad_set_event_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_sink_event));
+  gst_pad_set_chain_function (stream->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_sink_chain));
+
+  tmp = g_strdup_printf ("src_%d", self->current_stream_number);
+  stream->srcpad = gst_pad_new_from_static_template (&srctemplate, tmp);
+  g_free (tmp);
+  gst_pad_set_element_private (stream->srcpad, stream);
+  gst_pad_set_iterate_internal_links_function (stream->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_iterate_internal_links));
+  gst_pad_set_query_function (stream->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_query));
+  gst_pad_set_getcaps_function (stream->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_getcaps));
+  gst_pad_set_acceptcaps_function (stream->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_acceptcaps));
+  gst_pad_set_event_function (stream->srcpad,
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_src_event));
+
+  gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
+
+  self->streams = g_list_prepend (self->streams, stream);
+  self->current_stream_number++;
+  GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+
+  /* Add pads and activate unless we're going to NULL */
+  g_static_rec_mutex_lock (GST_STATE_GET_LOCK (self));
+  if (GST_STATE_TARGET (self) != GST_STATE_NULL) {
+    gst_pad_set_active (stream->srcpad, TRUE);
+    gst_pad_set_active (stream->sinkpad, TRUE);
+  }
+  gst_element_add_pad (GST_ELEMENT_CAST (self), stream->srcpad);
+  gst_element_add_pad (GST_ELEMENT_CAST (self), stream->sinkpad);
+  g_static_rec_mutex_unlock (GST_STATE_GET_LOCK (self));
+
+  return stream->sinkpad;
+}
+
+/* Must be called with lock! */
+static void
+gst_stream_synchronizer_release_stream (GstStreamSynchronizer * self,
+    GstStream * stream)
+{
+  GList *l;
+
+  GST_DEBUG_OBJECT (self, "Releasing stream %d", stream->stream_number);
+
+  for (l = self->streams; l; l = l->next) {
+    if (l->data == stream) {
+      self->streams = g_list_delete_link (self->streams, l);
+      break;
+    }
+  }
+  g_assert (l != NULL);
+
+  /* we can drop the lock, since stream exists now only local.
+   * Moreover, we should drop, to prevent deadlock with STREAM_LOCK
+   * (due to reverse lock order) when deactivating pads */
+  GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+
+  gst_pad_set_element_private (stream->srcpad, NULL);
+  gst_pad_set_element_private (stream->sinkpad, NULL);
+  gst_pad_set_active (stream->srcpad, FALSE);
+  gst_element_remove_pad (GST_ELEMENT_CAST (self), stream->srcpad);
+  gst_pad_set_active (stream->sinkpad, FALSE);
+  gst_element_remove_pad (GST_ELEMENT_CAST (self), stream->sinkpad);
+
+  if (stream->segment.format == GST_FORMAT_TIME) {
+    gint64 stop_running_time;
+    gint64 position_running_time;
+
+    stop_running_time =
+        gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
+        stream->segment.stop);
+    position_running_time =
+        gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
+        stream->segment.position);
+    stop_running_time = MAX (stop_running_time, position_running_time);
+
+    GST_DEBUG_OBJECT (stream->sinkpad,
+        "Stop running time was: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (stop_running_time));
+
+    self->group_start_time = MAX (self->group_start_time, stop_running_time);
+  }
+
+  g_slice_free (GstStream, stream);
+
+  /* NOTE: In theory we have to check here if all streams
+   * are EOS but the one that was removed wasn't and then
+   * send EOS downstream. But due to the way how playsink
+   * works this is not necessary and will only cause problems
+   * for gapless playback. playsink will only add/remove pads
+   * when it's reconfigured, which happens when the streams
+   * change
+   */
+
+  /* lock for good measure, since the caller had it */
+  GST_STREAM_SYNCHRONIZER_LOCK (self);
+}
+
+static void
+gst_stream_synchronizer_release_pad (GstElement * element, GstPad * pad)
+{
+  GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (element);
+  GstStream *stream;
+
+  GST_STREAM_SYNCHRONIZER_LOCK (self);
+  stream = gst_pad_get_element_private (pad);
+  if (stream) {
+    g_assert (stream->sinkpad == pad);
+
+    gst_stream_synchronizer_release_stream (self, stream);
+  }
+  GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+}
+
+static GstStateChangeReturn
+gst_stream_synchronizer_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (element);
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      GST_DEBUG_OBJECT (self, "State change NULL->READY");
+      self->shutdown = FALSE;
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_DEBUG_OBJECT (self, "State change READY->PAUSED");
+      self->group_start_time = 0;
+      self->shutdown = FALSE;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      GST_DEBUG_OBJECT (self, "State change PAUSED->PLAYING");
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (self, "State change READY->NULL");
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      g_cond_broadcast (self->stream_finish_cond);
+      self->shutdown = TRUE;
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+    default:
+      break;
+  }
+
+  {
+    GstStateChangeReturn bret;
+
+    bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+    GST_DEBUG_OBJECT (self, "Base class state changed returned: %d", bret);
+    if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE))
+      return ret;
+  }
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      GST_DEBUG_OBJECT (self, "State change PLAYING->PAUSED");
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      GList *l;
+
+      GST_DEBUG_OBJECT (self, "State change PAUSED->READY");
+      self->group_start_time = 0;
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      for (l = self->streams; l; l = l->next) {
+        GstStream *stream = l->data;
+
+        gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
+        stream->wait = FALSE;
+        stream->new_stream = FALSE;
+        stream->drop_discont = FALSE;
+        stream->is_eos = FALSE;
+      }
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      break;
+    }
+    case GST_STATE_CHANGE_READY_TO_NULL:{
+      GST_DEBUG_OBJECT (self, "State change READY->NULL");
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      while (self->streams)
+        gst_stream_synchronizer_release_stream (self, self->streams->data);
+      self->current_stream_number = 0;
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+/* GObject vfuncs */
+static void
+gst_stream_synchronizer_finalize (GObject * object)
+{
+  GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (object);
+
+  if (self->lock) {
+    g_mutex_free (self->lock);
+    self->lock = NULL;
+  }
+
+  if (self->stream_finish_cond) {
+    g_cond_free (self->stream_finish_cond);
+    self->stream_finish_cond = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/* GObject type initialization */
+static void
+gst_stream_synchronizer_init (GstStreamSynchronizer * self)
+{
+  self->lock = g_mutex_new ();
+  self->stream_finish_cond = g_cond_new ();
+}
+
+static void
+gst_stream_synchronizer_class_init (GstStreamSynchronizerClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *element_class = (GstElementClass *) klass;
+
+  GST_DEBUG_CATEGORY_INIT (stream_synchronizer_debug,
+      "streamsynchronizer", 0, "Stream Synchronizer");
+
+  gobject_class->finalize = gst_stream_synchronizer_finalize;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&srctemplate));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sinktemplate));
+
+  gst_element_class_set_details_simple (element_class,
+      "Stream Synchronizer", "Generic",
+      "Synchronizes a group of streams to have equal durations and starting points",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  element_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_change_state);
+  element_class->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_request_new_pad);
+  element_class->release_pad =
+      GST_DEBUG_FUNCPTR (gst_stream_synchronizer_release_pad);
+}
diff --git a/gst/playback/gststreamsynchronizer.h b/gst/playback/gststreamsynchronizer.h
new file mode 100644
index 0000000..e2379ae
--- /dev/null
+++ b/gst/playback/gststreamsynchronizer.h
@@ -0,0 +1,67 @@
+/* GStreamer
+ * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_STREAM_SYNCHRONIZER_H__
+#define __GST_STREAM_SYNCHRONIZER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_STREAM_SYNCHRONIZER \
+  (gst_stream_synchronizer_get_type())
+#define GST_STREAM_SYNCHRONIZER(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAM_SYNCHRONIZER, GstStreamSynchronizer))
+#define GST_STREAM_SYNCHRONIZER_CAST(obj) \
+  ((GstStreamSynchronizer *) obj)
+#define GST_STREAM_SYNCHRONIZER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_STREAM_SYNCHRONIZER, GstStreamSynchronizerClass))
+#define GST_IS_STREAM_SYNCHRONIZER(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAM_SYNCHRONIZER))
+#define GST_IS_STREAM_SYNCHRONIZER_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_STREAM_SYNCHRONIZER))
+
+typedef struct _GstStreamSynchronizer GstStreamSynchronizer;
+typedef struct _GstStreamSynchronizerClass GstStreamSynchronizerClass;
+
+struct _GstStreamSynchronizer
+{
+  GstElement parent;
+
+  /* < private > */
+  GMutex *lock;
+  GCond *stream_finish_cond;
+  gboolean shutdown;
+
+  GList *streams;
+  guint current_stream_number;
+
+  GstClockTime group_start_time;
+};
+
+struct _GstStreamSynchronizerClass
+{
+  GstElementClass parent;
+};
+
+GType gst_stream_synchronizer_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_STREAM_SYNCHRONIZER_H__ */
diff --git a/gst/playback/gstsubtitleoverlay.c b/gst/playback/gstsubtitleoverlay.c
new file mode 100644
index 0000000..4d4573e
--- /dev/null
+++ b/gst/playback/gstsubtitleoverlay.c
@@ -0,0 +1,2124 @@
+/*
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-subtitleoverlay
+ *
+ * #GstBin that auto-magically overlays a video stream with subtitles by
+ * autoplugging the required elements.
+ *
+ * It supports raw, timestamped text, different textual subtitle formats and
+ * DVD subpicture subtitles.
+ *
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch -v filesrc location=test.mkv ! matroskademux name=demux ! "video/x-h264" ! queue2 ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! "video/x-dvd-subpicture" ! queue2 ! overlay.
+ * ]| This will play back the given Matroska file with h264 video and subpicture subtitles.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstsubtitleoverlay.h"
+
+#include <gst/gstfilter.h>
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/video/video.h>
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (subtitle_overlay_debug);
+#define GST_CAT_DEFAULT subtitle_overlay_debug
+
+#define IS_SUBTITLE_CHAIN_IGNORE_ERROR(flow) \
+  G_UNLIKELY (flow == GST_FLOW_ERROR || flow == GST_FLOW_NOT_NEGOTIATED)
+
+#define IS_VIDEO_CHAIN_IGNORE_ERROR(flow) \
+  G_UNLIKELY (flow == GST_FLOW_ERROR)
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate video_sinktemplate =
+GST_STATIC_PAD_TEMPLATE ("video_sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate subtitle_sinktemplate =
+GST_STATIC_PAD_TEMPLATE ("subtitle_sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+enum
+{
+  PROP_0,
+  PROP_SILENT,
+  PROP_FONT_DESC,
+  PROP_SUBTITLE_ENCODING
+};
+
+#define gst_subtitle_overlay_parent_class parent_class
+G_DEFINE_TYPE (GstSubtitleOverlay, gst_subtitle_overlay, GST_TYPE_BIN);
+
+static GQuark _subtitle_overlay_event_marker_id = 0;
+
+static void
+do_async_start (GstSubtitleOverlay * self)
+{
+  if (!self->do_async) {
+    GstMessage *msg = gst_message_new_async_start (GST_OBJECT_CAST (self));
+
+    GST_DEBUG_OBJECT (self, "Posting async-start");
+    GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (self), msg);
+    self->do_async = TRUE;
+  }
+}
+
+static void
+do_async_done (GstSubtitleOverlay * self)
+{
+  if (self->do_async) {
+    GstMessage *msg =
+        gst_message_new_async_done (GST_OBJECT_CAST (self), FALSE);
+
+    GST_DEBUG_OBJECT (self, "Posting async-done");
+    GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (self), msg);
+    self->do_async = FALSE;
+  }
+}
+
+static GstProbeReturn
+_pad_blocked_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data);
+
+static void
+block_video (GstSubtitleOverlay * self)
+{
+  if (self->video_block_id != 0)
+    return;
+
+  if (self->video_block_pad) {
+    self->video_block_id =
+        gst_pad_add_probe (self->video_block_pad, GST_PROBE_TYPE_BLOCK,
+        _pad_blocked_cb, gst_object_ref (self),
+        (GDestroyNotify) gst_object_unref);
+  }
+}
+
+static void
+unblock_video (GstSubtitleOverlay * self)
+{
+  if (self->video_block_id) {
+    gst_pad_remove_probe (self->video_block_pad, self->video_block_id);
+    self->video_sink_blocked = FALSE;
+    self->video_block_id = 0;
+  }
+}
+
+static void
+block_subtitle (GstSubtitleOverlay * self)
+{
+  if (self->subtitle_block_id != 0)
+    return;
+
+  if (self->subtitle_block_pad) {
+    self->subtitle_block_id =
+        gst_pad_add_probe (self->subtitle_block_pad, GST_PROBE_TYPE_BLOCK,
+        _pad_blocked_cb, gst_object_ref (self),
+        (GDestroyNotify) gst_object_unref);
+  }
+}
+
+static void
+unblock_subtitle (GstSubtitleOverlay * self)
+{
+  if (self->subtitle_block_id) {
+    gst_pad_remove_probe (self->subtitle_block_pad, self->subtitle_block_id);
+    self->subtitle_sink_blocked = FALSE;
+    self->subtitle_block_id = 0;
+  }
+}
+
+static void
+gst_subtitle_overlay_finalize (GObject * object)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (object);
+
+  if (self->lock) {
+    g_mutex_free (self->lock);
+    self->lock = NULL;
+  }
+
+  if (self->factories_lock) {
+    g_mutex_free (self->factories_lock);
+    self->factories_lock = NULL;
+  }
+
+  if (self->factories)
+    gst_plugin_feature_list_free (self->factories);
+  self->factories = NULL;
+  gst_caps_replace (&self->factory_caps, NULL);
+
+  if (self->font_desc) {
+    g_free (self->font_desc);
+    self->font_desc = NULL;
+  }
+
+  if (self->encoding) {
+    g_free (self->encoding);
+    self->encoding = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+_is_renderer (GstElementFactory * factory)
+{
+  const gchar *klass, *name;
+
+  klass = gst_element_factory_get_klass (factory);
+  name = gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory));
+
+  if (strstr (klass, "Overlay/Subtitle") != NULL ||
+      strstr (klass, "Overlay/SubPicture") != NULL)
+    return TRUE;
+  if (strcmp (name, "textoverlay") == 0)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean
+_is_parser (GstElementFactory * factory)
+{
+  const gchar *klass;
+
+  klass = gst_element_factory_get_klass (factory);
+
+  if (strstr (klass, "Parser/Subtitle") != NULL)
+    return TRUE;
+  return FALSE;
+}
+
+static const gchar *_sub_pad_names[] = { "subpicture", "subpicture_sink",
+  "text", "text_sink",
+  "subtitle_sink", "subtitle"
+};
+
+static inline gboolean
+_is_raw_video (GstStructure * s)
+{
+  const gchar *name;
+
+  name = gst_structure_get_name (s);
+
+  if (g_str_has_prefix (name, "video/x-raw"))
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean
+_is_raw_video_pad (GstPad * pad)
+{
+  GstCaps *caps = gst_pad_get_current_caps (pad);
+  gboolean raw;
+
+  raw = _is_raw_video (gst_caps_get_structure (caps, 0));
+
+  gst_caps_unref (caps);
+
+  return raw;
+}
+
+static GstCaps *
+_get_sub_caps (GstElementFactory * factory)
+{
+  const GList *templates;
+  GList *walk;
+  gboolean is_parser = _is_parser (factory);
+
+  templates = gst_element_factory_get_static_pad_templates (factory);
+  for (walk = (GList *) templates; walk; walk = g_list_next (walk)) {
+    GstStaticPadTemplate *templ = walk->data;
+
+    if (templ->direction == GST_PAD_SINK && templ->presence == GST_PAD_ALWAYS) {
+      gboolean found = FALSE;
+
+      if (is_parser) {
+        found = TRUE;
+      } else {
+        guint i;
+
+        for (i = 0; i < G_N_ELEMENTS (_sub_pad_names); i++) {
+          if (strcmp (templ->name_template, _sub_pad_names[i]) == 0) {
+            found = TRUE;
+            break;
+          }
+        }
+      }
+      if (found)
+        return gst_static_caps_get (&templ->static_caps);
+    }
+  }
+  return NULL;
+}
+
+static gboolean
+_factory_filter (GstPluginFeature * feature, GstCaps ** subcaps)
+{
+  GstElementFactory *factory;
+  guint rank;
+  const gchar *name;
+  const GList *templates;
+  GList *walk;
+  gboolean is_renderer;
+  GstCaps *templ_caps = NULL;
+  gboolean have_video_sink = FALSE;
+
+  /* we only care about element factories */
+  if (!GST_IS_ELEMENT_FACTORY (feature))
+    return FALSE;
+
+  factory = GST_ELEMENT_FACTORY_CAST (feature);
+
+  /* only select elements with autoplugging rank or textoverlay */
+  name = gst_plugin_feature_get_name (feature);
+  rank = gst_plugin_feature_get_rank (feature);
+  if (strcmp ("textoverlay", name) != 0 && rank < GST_RANK_MARGINAL)
+    return FALSE;
+
+  /* Check if it's a renderer or a parser */
+  if (_is_renderer (factory)) {
+    is_renderer = TRUE;
+  } else if (_is_parser (factory)) {
+    is_renderer = FALSE;
+  } else {
+    return FALSE;
+  }
+
+  /* Check if there's a video sink in case of a renderer */
+  if (is_renderer) {
+    templates = gst_element_factory_get_static_pad_templates (factory);
+    for (walk = (GList *) templates; walk; walk = g_list_next (walk)) {
+      GstStaticPadTemplate *templ = walk->data;
+
+      /* we only care about the always-sink templates */
+      if (templ->direction == GST_PAD_SINK && templ->presence == GST_PAD_ALWAYS) {
+        if (strcmp (templ->name_template, "video") == 0 ||
+            strcmp (templ->name_template, "video_sink") == 0) {
+          have_video_sink = TRUE;
+        }
+      }
+    }
+  }
+  templ_caps = _get_sub_caps (factory);
+
+  if (is_renderer && have_video_sink && templ_caps) {
+    GstCaps *tmp;
+
+    GST_DEBUG ("Found renderer element %s (%s) with caps %" GST_PTR_FORMAT,
+        gst_element_factory_get_longname (factory),
+        gst_plugin_feature_get_name (feature), templ_caps);
+    tmp = gst_caps_union (*subcaps, templ_caps);
+    gst_caps_unref (templ_caps);
+    gst_caps_replace (subcaps, tmp);
+    gst_caps_unref (tmp);
+    return TRUE;
+  } else if (!is_renderer && !have_video_sink && templ_caps) {
+    GstCaps *tmp;
+
+    GST_DEBUG ("Found parser element %s (%s) with caps %" GST_PTR_FORMAT,
+        gst_element_factory_get_longname (factory),
+        gst_plugin_feature_get_name (feature), templ_caps);
+    tmp = gst_caps_union (*subcaps, templ_caps);
+    gst_caps_unref (templ_caps);
+    gst_caps_replace (subcaps, tmp);
+    gst_caps_unref (tmp);
+    return TRUE;
+  } else {
+    if (templ_caps)
+      gst_caps_unref (templ_caps);
+    return FALSE;
+  }
+}
+
+/* Call with factories_lock! */
+static gboolean
+gst_subtitle_overlay_update_factory_list (GstSubtitleOverlay * self)
+{
+  if (!self->factories
+      || self->factories_cookie !=
+      gst_default_registry_get_feature_list_cookie ()) {
+    GstCaps *subcaps;
+    GList *factories;
+
+    subcaps = gst_caps_new_empty ();
+
+    factories = gst_default_registry_feature_filter (
+        (GstPluginFeatureFilter) _factory_filter, FALSE, &subcaps);
+    GST_DEBUG_OBJECT (self, "Created factory caps: %" GST_PTR_FORMAT, subcaps);
+    gst_caps_replace (&self->factory_caps, subcaps);
+    gst_caps_unref (subcaps);
+    if (self->factories)
+      gst_plugin_feature_list_free (self->factories);
+    self->factories = factories;
+    self->factories_cookie = gst_default_registry_get_feature_list_cookie ();
+  }
+
+  return (self->factories != NULL);
+}
+
+G_LOCK_DEFINE_STATIC (_factory_caps);
+static GstCaps *_factory_caps = NULL;
+static guint32 _factory_caps_cookie = 0;
+
+GstCaps *
+gst_subtitle_overlay_create_factory_caps (void)
+{
+  GList *factories;
+  GstCaps *subcaps = NULL;
+
+  G_LOCK (_factory_caps);
+  if (!_factory_caps
+      || _factory_caps_cookie !=
+      gst_default_registry_get_feature_list_cookie ()) {
+    if (_factory_caps)
+      gst_caps_unref (_factory_caps);
+    _factory_caps = gst_caps_new_empty ();
+
+    factories = gst_default_registry_feature_filter (
+        (GstPluginFeatureFilter) _factory_filter, FALSE, &_factory_caps);
+    GST_DEBUG ("Created factory caps: %" GST_PTR_FORMAT, _factory_caps);
+    gst_plugin_feature_list_free (factories);
+    _factory_caps_cookie = gst_default_registry_get_feature_list_cookie ();
+  }
+  subcaps = gst_caps_ref (_factory_caps);
+  G_UNLOCK (_factory_caps);
+
+  return subcaps;
+}
+
+static gboolean
+_filter_factories_for_caps (GstElementFactory * factory, const GstCaps * caps)
+{
+  GstCaps *fcaps = _get_sub_caps (factory);
+  gboolean ret = (fcaps) ? gst_caps_can_intersect (fcaps, caps) : FALSE;
+
+  if (fcaps)
+    gst_caps_unref (fcaps);
+
+  if (ret)
+    gst_object_ref (factory);
+  return ret;
+}
+
+static gint
+_sort_by_ranks (GstPluginFeature * f1, GstPluginFeature * f2)
+{
+  gint diff;
+  const gchar *rname1, *rname2;
+
+  diff = gst_plugin_feature_get_rank (f2) - gst_plugin_feature_get_rank (f1);
+  if (diff != 0)
+    return diff;
+
+  /* If the ranks are the same sort by name to get deterministic results */
+  rname1 = gst_plugin_feature_get_name (f1);
+  rname2 = gst_plugin_feature_get_name (f2);
+
+  diff = strcmp (rname1, rname2);
+
+  return diff;
+}
+
+static GstPad *
+_get_sub_pad (GstElement * element)
+{
+  GstPad *pad;
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (_sub_pad_names); i++) {
+    pad = gst_element_get_static_pad (element, _sub_pad_names[i]);
+    if (pad)
+      return pad;
+  }
+  return NULL;
+}
+
+static GstPad *
+_get_video_pad (GstElement * element)
+{
+  static const gchar *pad_names[] = { "video", "video_sink" };
+  GstPad *pad;
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (pad_names); i++) {
+    pad = gst_element_get_static_pad (element, pad_names[i]);
+    if (pad)
+      return pad;
+  }
+  return NULL;
+}
+
+static gboolean
+_create_element (GstSubtitleOverlay * self, GstElement ** element,
+    const gchar * factory_name, GstElementFactory * factory,
+    const gchar * element_name, gboolean mandatory)
+{
+  GstElement *elt;
+
+  g_assert (!factory || !factory_name);
+
+  if (factory_name) {
+    elt = gst_element_factory_make (factory_name, element_name);
+  } else {
+    factory_name =
+        gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory));
+    elt = gst_element_factory_create (factory, element_name);
+  }
+
+  if (G_UNLIKELY (!elt)) {
+    if (!factory) {
+      GstMessage *msg;
+
+      msg =
+          gst_missing_element_message_new (GST_ELEMENT_CAST (self),
+          factory_name);
+      gst_element_post_message (GST_ELEMENT_CAST (self), msg);
+
+      if (mandatory)
+        GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL),
+            ("no '%s' plugin found", factory_name));
+      else
+        GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN, (NULL),
+            ("no '%s' plugin found", factory_name));
+    } else {
+      if (mandatory) {
+        GST_ELEMENT_ERROR (self, CORE, FAILED, (NULL),
+            ("can't instantiate '%s'", factory_name));
+      } else {
+        GST_ELEMENT_WARNING (self, CORE, FAILED, (NULL),
+            ("can't instantiate '%s'", factory_name));
+      }
+    }
+
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (gst_element_set_state (elt,
+              GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS)) {
+    gst_object_unref (elt);
+    if (mandatory) {
+      GST_ELEMENT_ERROR (self, CORE, STATE_CHANGE, (NULL),
+          ("failed to set '%s' to READY", factory_name));
+    } else {
+      GST_WARNING_OBJECT (self, "Failed to set '%s' to READY", factory_name);
+    }
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (!gst_bin_add (GST_BIN_CAST (self), gst_object_ref (elt)))) {
+    gst_element_set_state (elt, GST_STATE_NULL);
+    gst_object_unref (elt);
+    if (mandatory) {
+      GST_ELEMENT_ERROR (self, CORE, FAILED, (NULL),
+          ("failed to add '%s' to subtitleoverlay", factory_name));
+    } else {
+      GST_WARNING_OBJECT (self, "Failed to add '%s' to subtitleoverlay",
+          factory_name);
+    }
+    return FALSE;
+  }
+
+  gst_element_sync_state_with_parent (elt);
+  *element = elt;
+  return TRUE;
+}
+
+static void
+_remove_element (GstSubtitleOverlay * self, GstElement ** element)
+{
+  if (*element) {
+    gst_bin_remove (GST_BIN_CAST (self), *element);
+    gst_element_set_state (*element, GST_STATE_NULL);
+    gst_object_unref (*element);
+    *element = NULL;
+  }
+}
+
+static void
+_generate_update_segment_event (GstSegment * segment, GstEvent ** event1)
+{
+  GstEvent *event;
+  GstStructure *structure;
+
+  event = gst_event_new_segment (segment);
+  structure = gst_event_writable_structure (event);
+  gst_structure_id_set (structure, _subtitle_overlay_event_marker_id,
+      G_TYPE_BOOLEAN, TRUE, NULL);
+  *event1 = event;
+}
+
+static gboolean
+_setup_passthrough (GstSubtitleOverlay * self)
+{
+  GstPad *src, *sink;
+  GstElement *identity;
+
+  GST_DEBUG_OBJECT (self, "Doing video passthrough");
+
+  if (self->passthrough_identity) {
+    GST_DEBUG_OBJECT (self, "Already in passthrough mode");
+    goto out;
+  }
+
+  /* Unlink & destroy everything */
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->video_sinkpad), NULL);
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad), NULL);
+  self->silent_property = NULL;
+  _remove_element (self, &self->post_colorspace);
+  _remove_element (self, &self->overlay);
+  _remove_element (self, &self->parser);
+  _remove_element (self, &self->renderer);
+  _remove_element (self, &self->pre_colorspace);
+  _remove_element (self, &self->passthrough_identity);
+
+  if (G_UNLIKELY (!_create_element (self, &self->passthrough_identity,
+              "identity", NULL, "passthrough-identity", TRUE))) {
+    return FALSE;
+  }
+
+  identity = self->passthrough_identity;
+  g_object_set (G_OBJECT (identity), "silent", TRUE, "signal-handoffs", FALSE,
+      NULL);
+
+  /* Set src ghostpad target */
+  src = gst_element_get_static_pad (self->passthrough_identity, "src");
+  if (G_UNLIKELY (!src)) {
+    GST_ELEMENT_ERROR (self, CORE, PAD, (NULL),
+        ("Failed to get srcpad from identity"));
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad),
+              src))) {
+    GST_ELEMENT_ERROR (self, CORE, PAD, (NULL),
+        ("Failed to set srcpad target"));
+    gst_object_unref (src);
+    return FALSE;
+  }
+  gst_object_unref (src);
+
+  sink = gst_element_get_static_pad (self->passthrough_identity, "sink");
+  if (G_UNLIKELY (!sink)) {
+    GST_ELEMENT_ERROR (self, CORE, PAD, (NULL),
+        ("Failed to get sinkpad from identity"));
+    return FALSE;
+  }
+
+  /* Send segment to the identity. This is dropped because identity
+   * is not linked downstream yet */
+  if (self->video_segment.format != GST_FORMAT_UNDEFINED) {
+    GstEvent *event1;
+
+    _generate_update_segment_event (&self->video_segment, &event1);
+    GST_DEBUG_OBJECT (self,
+        "Pushing video segment event: %" GST_PTR_FORMAT, event1);
+    gst_pad_send_event (sink, event1);
+  }
+
+  /* Link sink ghostpads to identity */
+  if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+              (self->video_sinkpad), sink))) {
+    GST_ELEMENT_ERROR (self, CORE, PAD, (NULL),
+        ("Failed to set video sinkpad target"));
+    gst_object_unref (sink);
+    return FALSE;
+  }
+  gst_object_unref (sink);
+
+  GST_DEBUG_OBJECT (self, "Video passthrough setup successfully");
+
+out:
+  /* Unblock pads */
+  unblock_video (self);
+  unblock_subtitle (self);
+
+  return TRUE;
+}
+
+/* Must be called with subtitleoverlay lock! */
+static void
+gst_subtitle_overlay_set_fps (GstSubtitleOverlay * self)
+{
+  GObjectClass *gobject_class;
+  GParamSpec *pspec;
+
+  if (!self->parser || self->fps_d == 0)
+    return;
+
+  gobject_class = G_OBJECT_GET_CLASS (self->parser);
+  pspec = g_object_class_find_property (gobject_class, "video-fps");
+  if (!pspec || pspec->value_type != GST_TYPE_FRACTION)
+    return;
+
+  GST_DEBUG_OBJECT (self, "Updating video-fps property in parser");
+  g_object_set (self->parser, "video-fps", self->fps_n, self->fps_d, NULL);
+}
+
+static const gchar *
+_get_silent_property (GstElement * element, gboolean * invert)
+{
+  static const struct
+  {
+    const gchar *name;
+    gboolean invert;
+  } properties[] = { {
+  "silent", FALSE}, {
+  "enable", TRUE}};
+  GObjectClass *gobject_class;
+  GParamSpec *pspec;
+  guint i;
+
+  gobject_class = G_OBJECT_GET_CLASS (element);
+
+  for (i = 0; i < G_N_ELEMENTS (properties); i++) {
+    pspec = g_object_class_find_property (gobject_class, properties[i].name);
+    if (pspec && pspec->value_type == G_TYPE_BOOLEAN) {
+      *invert = properties[i].invert;
+      return properties[i].name;
+    }
+  }
+  return NULL;
+}
+
+static gboolean
+_has_subtitle_encoding_property (GstElement * element)
+{
+  GParamSpec *pspec;
+
+  pspec =
+      g_object_class_find_property (G_OBJECT_GET_CLASS (element),
+      "subtitle-encoding");
+  return (pspec && pspec->value_type == G_TYPE_STRING);
+}
+
+static gboolean
+_has_font_desc_property (GstElement * element)
+{
+  GParamSpec *pspec;
+
+  pspec =
+      g_object_class_find_property (G_OBJECT_GET_CLASS (element), "font-desc");
+  return (pspec && pspec->value_type == G_TYPE_STRING);
+}
+
+static GstProbeReturn
+_pad_blocked_cb (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY_CAST (user_data);
+  GstCaps *subcaps;
+  GList *l, *factories = NULL;
+
+  GST_DEBUG_OBJECT (pad, "Pad blocked");
+
+  GST_SUBTITLE_OVERLAY_LOCK (self);
+  if (pad == self->video_block_pad)
+    self->video_sink_blocked = TRUE;
+  else if (pad == self->subtitle_block_pad)
+    self->subtitle_sink_blocked = TRUE;
+
+  /* Now either both or the video sink are blocked */
+
+  /* Get current subtitle caps */
+  subcaps = self->subcaps;
+  if (!subcaps) {
+    GstPad *peer;
+
+    peer = gst_pad_get_peer (self->subtitle_sinkpad);
+    if (peer) {
+      subcaps = gst_pad_get_current_caps (peer);
+      if (!subcaps) {
+        subcaps = gst_pad_get_caps (peer, NULL);
+        if (!gst_caps_is_fixed (subcaps)) {
+          gst_caps_unref (subcaps);
+          subcaps = NULL;
+        }
+      }
+      gst_object_unref (peer);
+    }
+    gst_caps_replace (&self->subcaps, subcaps);
+    if (subcaps)
+      gst_caps_unref (subcaps);
+  }
+  GST_DEBUG_OBJECT (self, "Current subtitle caps: %" GST_PTR_FORMAT, subcaps);
+
+  /* If there are no subcaps but the subtitle sink is blocked upstream
+   * must behave wrong as there are no fixed caps set for the first
+   * buffer or in-order event */
+  if (G_UNLIKELY (!subcaps && self->subtitle_sink_blocked)) {
+    GST_ELEMENT_WARNING (self, CORE, NEGOTIATION, (NULL),
+        ("Subtitle sink is blocked but we have no subtitle caps"));
+    subcaps = NULL;
+  }
+
+  if (self->subtitle_error || (self->silent && !self->silent_property)) {
+    _setup_passthrough (self);
+    do_async_done (self);
+    goto out;
+  }
+
+  /* Now do something with the caps */
+  if (subcaps && !self->subtitle_flush) {
+    GstPad *target =
+        gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad));
+
+    if (target && gst_pad_accept_caps (target, subcaps)) {
+      GST_DEBUG_OBJECT (pad, "Target accepts caps");
+
+      gst_object_unref (target);
+
+      /* Unblock pads */
+      unblock_video (self);
+      unblock_subtitle (self);
+
+      goto out;
+    } else if (target) {
+      gst_object_unref (target);
+    }
+  }
+
+  if (self->subtitle_sink_blocked && !self->video_sink_blocked) {
+    GST_DEBUG_OBJECT (self, "Subtitle sink blocked but video not blocked");
+    block_video (self);
+    goto out;
+  }
+
+  self->subtitle_flush = FALSE;
+
+  /* Find our factories */
+  g_mutex_lock (self->factories_lock);
+  gst_subtitle_overlay_update_factory_list (self);
+  if (subcaps) {
+    factories = gst_filter_run (self->factories,
+        (GstFilterFunc) _filter_factories_for_caps, FALSE, subcaps);
+    if (!factories) {
+      GstMessage *msg;
+
+      msg = gst_missing_decoder_message_new (GST_ELEMENT_CAST (self), subcaps);
+      gst_element_post_message (GST_ELEMENT_CAST (self), msg);
+      GST_ELEMENT_WARNING (self, CORE, MISSING_PLUGIN, (NULL),
+          ("no suitable subtitle plugin found"));
+      subcaps = NULL;
+      self->subtitle_error = TRUE;
+    }
+  }
+  g_mutex_unlock (self->factories_lock);
+
+  if (!subcaps) {
+    _setup_passthrough (self);
+    do_async_done (self);
+    goto out;
+  }
+
+  /* Now the interesting parts are done: subtitle overlaying! */
+
+  /* Sort the factories by rank */
+  factories = g_list_sort (factories, (GCompareFunc) _sort_by_ranks);
+
+  for (l = factories; l; l = l->next) {
+    GstElementFactory *factory = l->data;
+    gboolean is_renderer = _is_renderer (factory);
+    GstElement *element;
+    GstPad *sink, *src;
+
+    /* Unlink & destroy everything */
+
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->video_sinkpad), NULL);
+    gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad),
+        NULL);
+    self->silent_property = NULL;
+    _remove_element (self, &self->post_colorspace);
+    _remove_element (self, &self->overlay);
+    _remove_element (self, &self->parser);
+    _remove_element (self, &self->renderer);
+    _remove_element (self, &self->pre_colorspace);
+    _remove_element (self, &self->passthrough_identity);
+
+    GST_DEBUG_OBJECT (self, "Trying factory '%s'",
+        GST_STR_NULL (gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST
+                (factory))));
+
+    if (G_UNLIKELY ((is_renderer
+                && !_create_element (self, &self->renderer, NULL, factory,
+                    "renderer", FALSE)) || (!is_renderer
+                && !_create_element (self, &self->parser, NULL, factory,
+                    "parser", FALSE))))
+      continue;
+
+    element = is_renderer ? self->renderer : self->parser;
+
+    /* If this is a parser, create textoverlay and link video and the parser to it
+     * Else link the renderer to the output colorspace */
+    if (!is_renderer) {
+      GstElement *overlay;
+      GstPad *video_peer;
+
+      /* Try to get the latest video framerate */
+      video_peer = gst_pad_get_peer (self->video_sinkpad);
+      if (video_peer) {
+        GstCaps *video_caps;
+
+        video_caps = gst_pad_get_current_caps (video_peer);
+        if (!video_caps) {
+          video_caps = gst_pad_get_caps (video_peer, NULL);
+          if (!gst_caps_is_fixed (video_caps)) {
+            gst_caps_unref (video_caps);
+            video_caps = NULL;
+          }
+        }
+
+        if (video_caps) {
+          GstVideoInfo info;
+
+          if (gst_video_info_from_caps (&info, video_caps)) {
+            if (self->fps_n != info.fps_n || self->fps_d != info.fps_d) {
+              GST_DEBUG_OBJECT (self, "New video fps: %d/%d", info.fps_n,
+                  info.fps_d);
+              self->fps_n = info.fps_n;
+              self->fps_d = info.fps_d;
+            }
+          }
+        }
+
+        if (video_caps)
+          gst_caps_unref (video_caps);
+        gst_object_unref (video_peer);
+      }
+
+      if (_has_subtitle_encoding_property (self->parser))
+        g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
+
+      /* Try to set video fps on the parser */
+      gst_subtitle_overlay_set_fps (self);
+
+      /* First link everything internally */
+      if (G_UNLIKELY (!_create_element (self, &self->overlay, "textoverlay",
+                  NULL, "overlay", FALSE))) {
+        continue;
+      }
+      overlay = self->overlay;
+      self->silent_property = "silent";
+      self->silent_property_invert = FALSE;
+
+      /* Set some properties */
+      g_object_set (G_OBJECT (overlay),
+          "halign", "center", "valign", "bottom", "wait-text", FALSE, NULL);
+      if (self->font_desc)
+        g_object_set (G_OBJECT (overlay), "font-desc", self->font_desc, NULL);
+
+      src = gst_element_get_static_pad (element, "src");
+      if (G_UNLIKELY (!src)) {
+        continue;
+      }
+
+      sink = gst_element_get_static_pad (overlay, "text_sink");
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Can't get text sink from textoverlay");
+        gst_object_unref (src);
+        continue;
+      }
+
+      if (G_UNLIKELY (gst_pad_link (src, sink) != GST_PAD_LINK_OK)) {
+        GST_WARNING_OBJECT (self, "Can't link parser to textoverlay");
+        gst_object_unref (sink);
+        gst_object_unref (src);
+        continue;
+      }
+      gst_object_unref (sink);
+      gst_object_unref (src);
+
+      if (G_UNLIKELY (!_create_element (self, &self->post_colorspace,
+                  COLORSPACE, NULL, "post-colorspace", FALSE))) {
+        continue;
+      }
+
+      src = gst_element_get_static_pad (overlay, "src");
+      if (G_UNLIKELY (!src)) {
+        GST_WARNING_OBJECT (self, "Can't get src pad from overlay");
+        continue;
+      }
+
+      sink = gst_element_get_static_pad (self->post_colorspace, "sink");
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+        gst_object_unref (src);
+        continue;
+      }
+
+      if (G_UNLIKELY (gst_pad_link (src, sink) != GST_PAD_LINK_OK)) {
+        GST_WARNING_OBJECT (self, "Can't link overlay with " COLORSPACE);
+        gst_object_unref (src);
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (src);
+      gst_object_unref (sink);
+
+      if (G_UNLIKELY (!_create_element (self, &self->pre_colorspace,
+                  COLORSPACE, NULL, "pre-colorspace", FALSE))) {
+        continue;
+      }
+
+      sink = gst_element_get_static_pad (overlay, "video_sink");
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Can't get video sink from textoverlay");
+        continue;
+      }
+
+      src = gst_element_get_static_pad (self->pre_colorspace, "src");
+      if (G_UNLIKELY (!src)) {
+        GST_WARNING_OBJECT (self, "Can't get srcpad from " COLORSPACE);
+        gst_object_unref (sink);
+        continue;
+      }
+
+      if (G_UNLIKELY (gst_pad_link (src, sink) != GST_PAD_LINK_OK)) {
+        GST_WARNING_OBJECT (self, "Can't link " COLORSPACE " to textoverlay");
+        gst_object_unref (src);
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (src);
+      gst_object_unref (sink);
+
+      /* Set src ghostpad target */
+      src = gst_element_get_static_pad (self->post_colorspace, "src");
+      if (G_UNLIKELY (!src)) {
+        GST_WARNING_OBJECT (self, "Can't get src pad from " COLORSPACE);
+        continue;
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->srcpad), src))) {
+        GST_WARNING_OBJECT (self, "Can't set srcpad target");
+        gst_object_unref (src);
+        continue;
+      }
+      gst_object_unref (src);
+
+      /* Send segments to the parser/overlay if necessary. These are not sent
+       * outside this element because of the proxy pad event function */
+      if (self->video_segment.format != GST_FORMAT_UNDEFINED) {
+        GstEvent *event1;
+
+        sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+          continue;
+        }
+
+        _generate_update_segment_event (&self->video_segment, &event1);
+        GST_DEBUG_OBJECT (self,
+            "Pushing video segment event: %" GST_PTR_FORMAT, event1);
+        gst_pad_send_event (sink, event1);
+
+        gst_object_unref (sink);
+      }
+
+      if (self->subtitle_segment.format != GST_FORMAT_UNDEFINED) {
+        GstEvent *event1;
+
+        sink = gst_element_get_static_pad (element, "sink");
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Failed to get subpad");
+          continue;
+        }
+
+        _generate_update_segment_event (&self->subtitle_segment, &event1);
+        GST_DEBUG_OBJECT (self,
+            "Pushing subtitle segment event: %" GST_PTR_FORMAT, event1);
+        gst_pad_send_event (sink, event1);
+
+        gst_object_unref (sink);
+      }
+
+      /* Set the sink ghostpad targets */
+      sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+        continue;
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->video_sinkpad), sink))) {
+        GST_WARNING_OBJECT (self, "Can't set video sinkpad target");
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (sink);
+
+      /* Link subtitle identity to subtitle pad of our element */
+      sink = gst_element_get_static_pad (element, "sink");
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Failed to get subpad");
+        continue;
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->subtitle_sinkpad), sink))) {
+        GST_WARNING_OBJECT (self, "Failed to set subtitle sink target");
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (sink);
+    } else {
+      const gchar *name =
+          gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory));
+      gboolean is_raw_video = _is_raw_video_pad (self->video_sinkpad);
+
+      if (strcmp (name, "textoverlay") == 0) {
+        /* Set some textoverlay specific properties */
+        g_object_set (G_OBJECT (element),
+            "halign", "center", "valign", "bottom", "wait-text", FALSE, NULL);
+        if (self->font_desc)
+          g_object_set (G_OBJECT (element), "font-desc", self->font_desc, NULL);
+        self->silent_property = "silent";
+        self->silent_property_invert = FALSE;
+      } else {
+        self->silent_property =
+            _get_silent_property (element, &self->silent_property_invert);
+        if (_has_subtitle_encoding_property (self->renderer))
+          g_object_set (self->renderer, "subtitle-encoding", self->encoding,
+              NULL);
+        if (_has_font_desc_property (self->renderer))
+          g_object_set (self->renderer, "font-desc", self->font_desc, NULL);
+      }
+
+      if (is_raw_video) {
+        /* First check that renderer also supports raw video */
+        sink = _get_video_pad (element);
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get video sink from renderer");
+          continue;
+        }
+
+        if (G_UNLIKELY (!_is_raw_video_pad (sink))) {
+          GST_DEBUG_OBJECT (self, "Renderer doesn't support raw video");
+          gst_object_unref (sink);
+          continue;
+        }
+        gst_object_unref (sink);
+
+        /* First link everything internally */
+        if (G_UNLIKELY (!_create_element (self, &self->post_colorspace,
+                    COLORSPACE, NULL, "post-colorspace", FALSE))) {
+          continue;
+        }
+        src = gst_element_get_static_pad (element, "src");
+        if (G_UNLIKELY (!src)) {
+          GST_WARNING_OBJECT (self, "Can't get src pad from renderer");
+          continue;
+        }
+
+        sink = gst_element_get_static_pad (self->post_colorspace, "sink");
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+          gst_object_unref (src);
+          continue;
+        }
+
+        if (G_UNLIKELY (gst_pad_link (src, sink) != GST_PAD_LINK_OK)) {
+          GST_WARNING_OBJECT (self, "Can't link renderer with " COLORSPACE);
+          gst_object_unref (src);
+          gst_object_unref (sink);
+          continue;
+        }
+        gst_object_unref (src);
+        gst_object_unref (sink);
+
+        if (G_UNLIKELY (!_create_element (self, &self->pre_colorspace,
+                    COLORSPACE, NULL, "pre-colorspace", FALSE))) {
+          continue;
+        }
+
+        sink = _get_video_pad (element);
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get video sink from renderer");
+          continue;
+        }
+
+        src = gst_element_get_static_pad (self->pre_colorspace, "src");
+        if (G_UNLIKELY (!src)) {
+          GST_WARNING_OBJECT (self, "Can't get srcpad from " COLORSPACE);
+          gst_object_unref (sink);
+          continue;
+        }
+
+        if (G_UNLIKELY (gst_pad_link (src, sink) != GST_PAD_LINK_OK)) {
+          GST_WARNING_OBJECT (self, "Can't link " COLORSPACE " to renderer");
+          gst_object_unref (src);
+          gst_object_unref (sink);
+          continue;
+        }
+        gst_object_unref (src);
+        gst_object_unref (sink);
+
+        /* Set src ghostpad target */
+        src = gst_element_get_static_pad (self->post_colorspace, "src");
+        if (G_UNLIKELY (!src)) {
+          GST_WARNING_OBJECT (self, "Can't get src pad from " COLORSPACE);
+          continue;
+        }
+      } else {                  /* No raw video pad */
+        GstCaps *allowed_caps, *video_caps = NULL;
+        GstPad *video_peer;
+        gboolean can_intersect = FALSE;
+
+        video_peer = gst_pad_get_peer (self->video_sinkpad);
+        if (video_peer) {
+          video_caps = gst_pad_get_current_caps (video_peer);
+          if (!video_caps) {
+            video_caps = gst_pad_get_caps (video_peer, NULL);
+          }
+          gst_object_unref (video_peer);
+        }
+
+        sink = _get_video_pad (element);
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get video sink from renderer");
+          continue;
+        }
+        allowed_caps = gst_pad_get_caps (sink, NULL);
+        gst_object_unref (sink);
+
+        if (allowed_caps && video_caps)
+          can_intersect = gst_caps_can_intersect (allowed_caps, video_caps);
+
+        if (allowed_caps)
+          gst_caps_unref (allowed_caps);
+
+        if (video_caps)
+          gst_caps_unref (video_caps);
+
+        if (G_UNLIKELY (!can_intersect)) {
+          GST_WARNING_OBJECT (self, "Renderer with custom caps is not "
+              "compatible with video stream");
+          continue;
+        }
+
+        src = gst_element_get_static_pad (element, "src");
+        if (G_UNLIKELY (!src)) {
+          GST_WARNING_OBJECT (self, "Can't get src pad from renderer");
+          continue;
+        }
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->srcpad), src))) {
+        GST_WARNING_OBJECT (self, "Can't set srcpad target");
+        gst_object_unref (src);
+        continue;
+      }
+      gst_object_unref (src);
+
+      /* Send segments to the renderer if necessary. These are not sent
+       * outside this element because of the proxy pad event handler */
+      if (self->video_segment.format != GST_FORMAT_UNDEFINED) {
+        GstEvent *event1;
+
+        sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+          continue;
+        }
+
+        _generate_update_segment_event (&self->video_segment, &event1);
+        GST_DEBUG_OBJECT (self,
+            "Pushing video segment event: %" GST_PTR_FORMAT, event1);
+        gst_pad_send_event (sink, event1);
+        gst_object_unref (sink);
+      }
+
+      if (self->subtitle_segment.format != GST_FORMAT_UNDEFINED) {
+        GstEvent *event1;
+
+        sink = _get_sub_pad (element);
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Failed to get subpad");
+          continue;
+        }
+
+        _generate_update_segment_event (&self->subtitle_segment, &event1);
+        GST_DEBUG_OBJECT (self,
+            "Pushing subtitle segment event: %" GST_PTR_FORMAT, event1);
+        gst_pad_send_event (sink, event1);
+        gst_object_unref (sink);
+      }
+
+      /* Set the sink ghostpad targets */
+      if (self->pre_colorspace) {
+        sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+          continue;
+        }
+      } else {
+        sink = _get_video_pad (element);
+        if (G_UNLIKELY (!sink)) {
+          GST_WARNING_OBJECT (self, "Can't get sink pad from %" GST_PTR_FORMAT,
+              element);
+          continue;
+        }
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->video_sinkpad), sink))) {
+        GST_WARNING_OBJECT (self, "Can't set video sinkpad target");
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (sink);
+
+      sink = _get_sub_pad (element);
+      if (G_UNLIKELY (!sink)) {
+        GST_WARNING_OBJECT (self, "Failed to get subpad");
+        continue;
+      }
+
+      if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
+                  (self->subtitle_sinkpad), sink))) {
+        GST_WARNING_OBJECT (self, "Failed to set subtitle sink target");
+        gst_object_unref (sink);
+        continue;
+      }
+      gst_object_unref (sink);
+    }
+
+    break;
+  }
+
+  if (G_UNLIKELY (l == NULL)) {
+    GST_ELEMENT_WARNING (self, CORE, FAILED, (NULL),
+        ("Failed to find any usable factories"));
+    self->subtitle_error = TRUE;
+    _setup_passthrough (self);
+    do_async_done (self);
+  } else {
+    GST_DEBUG_OBJECT (self, "Everything worked, unblocking pads");
+    unblock_video (self);
+    unblock_subtitle (self);
+    do_async_done (self);
+  }
+
+out:
+  if (factories)
+    gst_plugin_feature_list_free (factories);
+  GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+  return GST_PROBE_OK;
+}
+
+static GstStateChangeReturn
+gst_subtitle_overlay_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (element);
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      GST_DEBUG_OBJECT (self, "State change NULL->READY");
+      g_mutex_lock (self->factories_lock);
+      if (G_UNLIKELY (!gst_subtitle_overlay_update_factory_list (self))) {
+        g_mutex_unlock (self->factories_lock);
+        return GST_STATE_CHANGE_FAILURE;
+      }
+      g_mutex_unlock (self->factories_lock);
+
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      /* Set the internal pads to blocking */
+      block_video (self);
+      block_subtitle (self);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_DEBUG_OBJECT (self, "State change READY->PAUSED");
+      gst_segment_init (&self->video_segment, GST_FORMAT_UNDEFINED);
+      gst_segment_init (&self->subtitle_segment, GST_FORMAT_UNDEFINED);
+
+      self->fps_n = self->fps_d = 0;
+
+      self->subtitle_flush = FALSE;
+      self->subtitle_error = FALSE;
+
+      self->downstream_chain_error = FALSE;
+
+      do_async_start (self);
+      ret = GST_STATE_CHANGE_ASYNC;
+
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      GST_DEBUG_OBJECT (self, "State change PAUSED->PLAYING");
+    default:
+      break;
+  }
+
+  {
+    GstStateChangeReturn bret;
+
+    bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+    GST_DEBUG_OBJECT (self, "Base class state changed returned: %d", bret);
+    if (G_UNLIKELY (bret == GST_STATE_CHANGE_FAILURE))
+      return ret;
+    else if (bret == GST_STATE_CHANGE_ASYNC)
+      ret = bret;
+    else if (G_UNLIKELY (bret == GST_STATE_CHANGE_NO_PREROLL)) {
+      do_async_done (self);
+      ret = bret;
+    }
+  }
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      GST_DEBUG_OBJECT (self, "State change PLAYING->PAUSED");
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG_OBJECT (self, "State change PAUSED->READY");
+      do_async_done (self);
+
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      GST_DEBUG_OBJECT (self, "State change READY->NULL");
+
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      gst_caps_replace (&self->subcaps, NULL);
+
+      /* Unlink ghost pads */
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->srcpad), NULL);
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->video_sinkpad), NULL);
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad),
+          NULL);
+
+      /* Unblock pads */
+      unblock_video (self);
+      unblock_subtitle (self);
+
+      /* Remove elements */
+      self->silent_property = NULL;
+      _remove_element (self, &self->post_colorspace);
+      _remove_element (self, &self->overlay);
+      _remove_element (self, &self->parser);
+      _remove_element (self, &self->renderer);
+      _remove_element (self, &self->pre_colorspace);
+      _remove_element (self, &self->passthrough_identity);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_subtitle_overlay_handle_message (GstBin * bin, GstMessage * message)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY_CAST (bin);
+
+  if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR) {
+    GstObject *src = GST_MESSAGE_SRC (message);
+
+    /* Convert error messages from the subtitle pipeline to
+     * warnings and switch to passthrough mode */
+    if (src && (
+            (self->overlay
+                && gst_object_has_ancestor (src,
+                    GST_OBJECT_CAST (self->overlay))) || (self->parser
+                && gst_object_has_ancestor (src,
+                    GST_OBJECT_CAST (self->parser))) || (self->renderer
+                && gst_object_has_ancestor (src,
+                    GST_OBJECT_CAST (self->renderer))))) {
+      GError *err = NULL;
+      gchar *debug = NULL;
+      GstMessage *wmsg;
+
+      gst_message_parse_error (message, &err, &debug);
+      GST_DEBUG_OBJECT (self,
+          "Got error message from subtitle element %s: %s (%s)",
+          GST_MESSAGE_SRC_NAME (message), GST_STR_NULL (err->message),
+          GST_STR_NULL (debug));
+
+      wmsg = gst_message_new_warning (src, err, debug);
+      gst_message_unref (message);
+      g_error_free (err);
+      g_free (debug);
+      message = wmsg;
+
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      self->subtitle_error = TRUE;
+
+      block_subtitle (self);
+      block_video (self);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+    }
+  }
+
+  GST_BIN_CLASS (parent_class)->handle_message (bin, message);
+}
+
+static void
+gst_subtitle_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY_CAST (object);
+
+  switch (prop_id) {
+    case PROP_SILENT:
+      g_value_set_boolean (value, self->silent);
+      break;
+    case PROP_FONT_DESC:
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      g_value_set_string (value, self->font_desc);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      g_value_set_string (value, self->encoding);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_subtitle_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY_CAST (object);
+
+  switch (prop_id) {
+    case PROP_SILENT:
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      self->silent = g_value_get_boolean (value);
+      if (self->silent_property) {
+        gboolean silent = self->silent;
+
+        if (self->silent_property_invert)
+          silent = !silent;
+
+        if (self->overlay)
+          g_object_set (self->overlay, self->silent_property, silent, NULL);
+        else if (self->renderer)
+          g_object_set (self->renderer, self->silent_property, silent, NULL);
+      } else {
+        block_subtitle (self);
+        block_video (self);
+      }
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    case PROP_FONT_DESC:
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      g_free (self->font_desc);
+      self->font_desc = g_value_dup_string (value);
+      if (self->overlay)
+        g_object_set (self->overlay, "font-desc", self->font_desc, NULL);
+      else if (self->renderer && _has_font_desc_property (self->renderer))
+        g_object_set (self->renderer, "font-desc", self->font_desc, NULL);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      g_free (self->encoding);
+      self->encoding = g_value_dup_string (value);
+      if (self->renderer && _has_subtitle_encoding_property (self->renderer))
+        g_object_set (self->renderer, "subtitle-encoding", self->encoding,
+            NULL);
+      if (self->parser && _has_subtitle_encoding_property (self->parser))
+        g_object_set (self->parser, "subtitle-encoding", self->encoding, NULL);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_subtitle_overlay_class_init (GstSubtitleOverlayClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *element_class = (GstElementClass *) klass;
+  GstBinClass *bin_class = (GstBinClass *) klass;
+
+  gobject_class->finalize = gst_subtitle_overlay_finalize;
+  gobject_class->set_property = gst_subtitle_overlay_set_property;
+  gobject_class->get_property = gst_subtitle_overlay_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_SILENT,
+      g_param_spec_boolean ("silent",
+          "Silent",
+          "Whether to show subtitles", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_FONT_DESC,
+      g_param_spec_string ("font-desc",
+          "Subtitle font description",
+          "Pango font description of font "
+          "to be used for subtitle rendering", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SUBTITLE_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 encoding. "
+          "If not set, the GST_SUBTITLE_ENCODING environment variable will "
+          "be checked for an encoding to use. If that is not set either, "
+          "ISO-8859-15 will be assumed.", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&srctemplate));
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&video_sinktemplate));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&subtitle_sinktemplate));
+
+  gst_element_class_set_details_simple (element_class, "Subtitle Overlay",
+      "Video/Overlay/Subtitle",
+      "Overlays a video stream with subtitles",
+      "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+  element_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_change_state);
+
+  bin_class->handle_message =
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_handle_message);
+}
+
+static GstFlowReturn
+gst_subtitle_overlay_src_proxy_chain (GstPad * proxypad, GstBuffer * buffer)
+{
+  GstPad *ghostpad;
+  GstSubtitleOverlay *self;
+  GstFlowReturn ret;
+
+  ghostpad = GST_PAD_CAST (gst_pad_get_parent (proxypad));
+  if (G_UNLIKELY (!ghostpad)) {
+    gst_buffer_unref (buffer);
+    return GST_FLOW_ERROR;
+  }
+  self = GST_SUBTITLE_OVERLAY_CAST (gst_pad_get_parent (ghostpad));
+  if (G_UNLIKELY (!self || self->srcpad != ghostpad)) {
+    gst_buffer_unref (buffer);
+    gst_object_unref (ghostpad);
+    return GST_FLOW_ERROR;
+  }
+
+  ret = gst_proxy_pad_chain_default (proxypad, buffer);
+
+  if (IS_VIDEO_CHAIN_IGNORE_ERROR (ret)) {
+    GST_ERROR_OBJECT (self, "Downstream chain error: %s",
+        gst_flow_get_name (ret));
+    self->downstream_chain_error = TRUE;
+  }
+
+  gst_object_unref (self);
+  gst_object_unref (ghostpad);
+
+  return ret;
+}
+
+static gboolean
+gst_subtitle_overlay_src_proxy_event (GstPad * proxypad, GstEvent * event)
+{
+  GstPad *ghostpad = NULL;
+  GstSubtitleOverlay *self = NULL;
+  gboolean ret = FALSE;
+  const GstStructure *s;
+
+  ghostpad = GST_PAD_CAST (gst_pad_get_parent (proxypad));
+  if (G_UNLIKELY (!ghostpad))
+    goto out;
+  self = GST_SUBTITLE_OVERLAY_CAST (gst_pad_get_parent (ghostpad));
+  if (G_UNLIKELY (!self || self->srcpad != ghostpad))
+    goto out;
+
+  s = gst_event_get_structure (event);
+  if (s && gst_structure_id_has_field (s, _subtitle_overlay_event_marker_id)) {
+    GST_DEBUG_OBJECT (ghostpad, "Dropping event with marker: %" GST_PTR_FORMAT,
+        event);
+    gst_event_unref (event);
+    event = NULL;
+    ret = TRUE;
+  } else {
+    ret = gst_proxy_pad_event_default (proxypad, event);
+    event = NULL;
+  }
+
+out:
+  if (event)
+    gst_event_unref (event);
+  if (self)
+    gst_object_unref (self);
+  if (ghostpad)
+    gst_object_unref (ghostpad);
+  return ret;
+}
+
+static gboolean
+gst_subtitle_overlay_video_sink_setcaps (GstSubtitleOverlay * self,
+    GstCaps * caps)
+{
+  GstPad *target;
+  gboolean ret = TRUE;
+  GstVideoInfo info;
+
+  GST_DEBUG_OBJECT (self, "Setting caps: %" GST_PTR_FORMAT, caps);
+
+  if (!gst_video_info_from_caps (&info, caps)) {
+    GST_ERROR_OBJECT (self, "Failed to parse caps");
+    ret = FALSE;
+    GST_SUBTITLE_OVERLAY_UNLOCK (self);
+    goto out;
+  }
+
+  target = gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->video_sinkpad));
+
+  GST_SUBTITLE_OVERLAY_LOCK (self);
+
+  if (!target || !gst_pad_accept_caps (target, caps)) {
+    GST_DEBUG_OBJECT (target, "Target did not accept caps -- reconfiguring");
+
+    block_subtitle (self);
+    block_video (self);
+  }
+
+  GST_SUBTITLE_OVERLAY_LOCK (self);
+  if (self->fps_n != info.fps_n || self->fps_d != info.fps_d) {
+    GST_DEBUG_OBJECT (self, "New video fps: %d/%d", info.fps_n, info.fps_d);
+    self->fps_n = info.fps_n;
+    self->fps_d = info.fps_d;
+    gst_subtitle_overlay_set_fps (self);
+  }
+  GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+out:
+  if (target)
+    gst_object_unref (target);
+  return ret;
+}
+
+static gboolean
+gst_subtitle_overlay_video_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (gst_pad_get_parent (pad));
+  gboolean ret;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+    {
+      GST_DEBUG_OBJECT (pad,
+          "Resetting video segment because of flush-stop event");
+      gst_segment_init (&self->video_segment, GST_FORMAT_UNDEFINED);
+      self->fps_n = self->fps_d = 0;
+      break;
+    }
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_subtitle_overlay_video_sink_setcaps (self, caps);
+      if (!ret)
+        goto done;
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+    GST_DEBUG_OBJECT (pad, "segment event: %" GST_PTR_FORMAT, event);
+    gst_event_copy_segment (event, &self->video_segment);
+
+    if (self->video_segment.format != GST_FORMAT_TIME)
+      goto invalid_format;
+  }
+
+done:
+  gst_event_unref (event);
+  gst_object_unref (self);
+
+  return ret;
+
+  /* ERRORS */
+invalid_format:
+  {
+    GST_ERROR_OBJECT (pad, "Newsegment event in non-time format: %s",
+        gst_format_get_name (self->video_segment.format));
+    ret = FALSE;
+    goto done;
+  }
+}
+
+static GstFlowReturn
+gst_subtitle_overlay_video_sink_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (GST_PAD_PARENT (pad));
+  GstFlowReturn ret = gst_proxy_pad_chain_default (pad, buffer);
+
+  if (G_UNLIKELY (self->downstream_chain_error) || self->passthrough_identity) {
+    return ret;
+  } else if (IS_VIDEO_CHAIN_IGNORE_ERROR (ret)) {
+    GST_DEBUG_OBJECT (self, "Subtitle renderer produced chain error: %s",
+        gst_flow_get_name (ret));
+    GST_SUBTITLE_OVERLAY_LOCK (self);
+    self->subtitle_error = TRUE;
+    block_subtitle (self);
+    block_video (self);
+    GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+    return GST_FLOW_OK;
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_subtitle_overlay_subtitle_sink_chain (GstPad * pad, GstBuffer * buffer)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (GST_PAD_PARENT (pad));
+
+  if (self->subtitle_error) {
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  } else {
+    GstFlowReturn ret = gst_proxy_pad_chain_default (pad, buffer);
+
+    if (IS_SUBTITLE_CHAIN_IGNORE_ERROR (ret)) {
+      GST_DEBUG_OBJECT (self, "Subtitle chain error: %s",
+          gst_flow_get_name (ret));
+      GST_SUBTITLE_OVERLAY_LOCK (self);
+      self->subtitle_error = TRUE;
+      block_subtitle (self);
+      block_video (self);
+      GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+      return GST_FLOW_OK;
+    }
+
+    return ret;
+  }
+}
+
+static GstCaps *
+gst_subtitle_overlay_subtitle_sink_getcaps (GstPad * pad, GstCaps * filter)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (gst_pad_get_parent (pad));
+  GstCaps *ret;
+
+  g_mutex_lock (self->factories_lock);
+  if (G_UNLIKELY (!gst_subtitle_overlay_update_factory_list (self)))
+    ret = GST_CAPS_NONE;
+  else if (filter)
+    ret =
+        gst_caps_intersect_full (filter, self->factory_caps,
+        GST_CAPS_INTERSECT_FIRST);
+  else
+    ret = gst_caps_ref (self->factory_caps);
+  g_mutex_unlock (self->factories_lock);
+
+  GST_DEBUG_OBJECT (pad, "Returning subtitle caps %" GST_PTR_FORMAT, ret);
+
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static gboolean
+gst_subtitle_overlay_subtitle_sink_acceptcaps (GstPad * pad, GstCaps * caps)
+{
+  GstCaps *othercaps = gst_subtitle_overlay_subtitle_sink_getcaps (pad, NULL);
+  gboolean ret = gst_caps_is_subset (caps, othercaps);
+
+  gst_caps_unref (othercaps);
+
+  return ret;
+}
+
+static gboolean
+gst_subtitle_overlay_subtitle_sink_setcaps (GstSubtitleOverlay * self,
+    GstCaps * caps)
+{
+  gboolean ret = TRUE;
+  GstPad *target = NULL;;
+
+  GST_DEBUG_OBJECT (self, "Setting caps: %" GST_PTR_FORMAT, caps);
+
+  target =
+      gst_ghost_pad_get_target (GST_GHOST_PAD_CAST (self->subtitle_sinkpad));
+
+  GST_SUBTITLE_OVERLAY_LOCK (self);
+  gst_caps_replace (&self->subcaps, caps);
+
+  if (target && gst_pad_accept_caps (target, caps)) {
+    GST_DEBUG_OBJECT (self, "Target accepts caps");
+    GST_SUBTITLE_OVERLAY_UNLOCK (self);
+    goto out;
+  }
+
+  GST_DEBUG_OBJECT (self, "Target did not accept caps");
+
+  self->subtitle_error = FALSE;
+  block_subtitle (self);
+  block_video (self);
+  GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+out:
+  if (target)
+    gst_object_unref (target);
+
+  return ret;
+}
+
+static GstPadLinkReturn
+gst_subtitle_overlay_subtitle_sink_link (GstPad * pad, GstPad * peer)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (gst_pad_get_parent (pad));
+  GstPadLinkReturn ret;
+  GstCaps *caps;
+
+  GST_DEBUG_OBJECT (pad, "Linking pad to peer %" GST_PTR_FORMAT, peer);
+
+  caps = gst_pad_get_current_caps (peer);
+  if (!caps) {
+    caps = gst_pad_get_caps (peer, NULL);
+    if (!gst_caps_is_fixed (caps)) {
+      gst_caps_unref (caps);
+      caps = NULL;
+    }
+  }
+
+  if (caps) {
+    GST_SUBTITLE_OVERLAY_LOCK (self);
+    GST_DEBUG_OBJECT (pad, "Have fixed peer caps: %" GST_PTR_FORMAT, caps);
+    gst_caps_replace (&self->subcaps, caps);
+
+    self->subtitle_error = FALSE;
+
+    block_subtitle (self);
+    block_video (self);
+    GST_SUBTITLE_OVERLAY_UNLOCK (self);
+    gst_caps_unref (caps);
+  }
+
+  ret = gst_ghost_pad_link_default (pad, peer);
+
+  gst_object_unref (self);
+  return ret;
+}
+
+static void
+gst_subtitle_overlay_subtitle_sink_unlink (GstPad * pad)
+{
+  GstSubtitleOverlay *self =
+      GST_SUBTITLE_OVERLAY (gst_object_ref (GST_PAD_PARENT (pad)));
+
+  /* FIXME: Can't use gst_pad_get_parent() here because this is called with
+   * the object lock from state changes
+   */
+
+  GST_DEBUG_OBJECT (pad, "Pad unlinking");
+  gst_caps_replace (&self->subcaps, NULL);
+
+  gst_ghost_pad_unlink_default (pad);
+
+  GST_SUBTITLE_OVERLAY_LOCK (self);
+  self->subtitle_error = FALSE;
+
+  block_subtitle (self);
+  block_video (self);
+  GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+  gst_object_unref (self);
+}
+
+static gboolean
+gst_subtitle_overlay_subtitle_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstSubtitleOverlay *self = GST_SUBTITLE_OVERLAY (gst_pad_get_parent (pad));
+  gboolean ret;
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_DOWNSTREAM_OOB &&
+      gst_event_has_name (event, "subtitleoverlay-flush-subtitle")) {
+    GST_DEBUG_OBJECT (pad, "Custom subtitle flush event");
+    GST_SUBTITLE_OVERLAY_LOCK (self);
+    self->subtitle_flush = TRUE;
+    self->subtitle_error = FALSE;
+    block_subtitle (self);
+    block_video (self);
+    GST_SUBTITLE_OVERLAY_UNLOCK (self);
+
+    gst_event_unref (event);
+    event = NULL;
+    ret = TRUE;
+    goto out;
+  }
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_subtitle_overlay_subtitle_sink_setcaps (self, caps);
+      if (!ret)
+        goto out;
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      GST_DEBUG_OBJECT (pad,
+          "Resetting subtitle segment because of flush-stop");
+      gst_segment_init (&self->subtitle_segment, GST_FORMAT_UNDEFINED);
+      /* fall through */
+    case GST_EVENT_FLUSH_START:
+    case GST_EVENT_SEGMENT:
+    case GST_EVENT_EOS:
+    {
+      GstStructure *structure;
+
+      /* Add our event marker to make sure no events from here go ever outside
+       * the element, they're only interesting for our internal elements */
+      event = GST_EVENT_CAST (gst_event_make_writable (event));
+      structure = gst_event_writable_structure (event);
+
+      gst_structure_id_set (structure, _subtitle_overlay_event_marker_id,
+          G_TYPE_BOOLEAN, TRUE, NULL);
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+    GST_DEBUG_OBJECT (pad, "segment event: %" GST_PTR_FORMAT, event);
+    gst_event_copy_segment (event, &self->subtitle_segment);
+    GST_DEBUG_OBJECT (pad, "New subtitle segment: %" GST_SEGMENT_FORMAT,
+        &self->subtitle_segment);
+  }
+  gst_event_unref (event);
+
+out:
+  gst_object_unref (self);
+  return ret;
+}
+
+static void
+gst_subtitle_overlay_init (GstSubtitleOverlay * self)
+{
+  GstPadTemplate *templ;
+  GstPad *proxypad = NULL;
+
+  self->lock = g_mutex_new ();
+  self->factories_lock = g_mutex_new ();
+
+  templ = gst_static_pad_template_get (&srctemplate);
+  self->srcpad = gst_ghost_pad_new_no_target_from_template ("src", templ);
+
+  proxypad =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (self->srcpad)));
+  gst_pad_set_event_function (proxypad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_src_proxy_event));
+  gst_pad_set_chain_function (proxypad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_src_proxy_chain));
+  gst_object_unref (proxypad);
+
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->srcpad);
+
+  templ = gst_static_pad_template_get (&video_sinktemplate);
+  self->video_sinkpad =
+      gst_ghost_pad_new_no_target_from_template ("video_sink", templ);
+  gst_pad_set_event_function (self->video_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_video_sink_event));
+  gst_pad_set_chain_function (self->video_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_video_sink_chain));
+
+  proxypad =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD
+          (self->video_sinkpad)));
+  self->video_block_pad = proxypad;
+
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->video_sinkpad);
+
+  templ = gst_static_pad_template_get (&subtitle_sinktemplate);
+  self->subtitle_sinkpad =
+      gst_ghost_pad_new_no_target_from_template ("subtitle_sink", templ);
+  gst_pad_set_link_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_link));
+  gst_pad_set_unlink_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_unlink));
+  gst_pad_set_event_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_event));
+  gst_pad_set_chain_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_chain));
+  gst_pad_set_getcaps_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_getcaps));
+  gst_pad_set_acceptcaps_function (self->subtitle_sinkpad,
+      GST_DEBUG_FUNCPTR (gst_subtitle_overlay_subtitle_sink_acceptcaps));
+
+  proxypad =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD
+          (self->subtitle_sinkpad)));
+  self->subtitle_block_pad = proxypad;
+
+  gst_element_add_pad (GST_ELEMENT_CAST (self), self->subtitle_sinkpad);
+
+  self->fps_n = 0;
+  self->fps_d = 0;
+}
+
+gboolean
+gst_subtitle_overlay_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (subtitle_overlay_debug, "subtitleoverlay", 0,
+      "Subtitle Overlay");
+
+  _subtitle_overlay_event_marker_id =
+      g_quark_from_static_string ("gst-subtitle-overlay-event-marker");
+
+  return gst_element_register (plugin, "subtitleoverlay", GST_RANK_NONE,
+      GST_TYPE_SUBTITLE_OVERLAY);
+}
diff --git a/gst/playback/gstsubtitleoverlay.h b/gst/playback/gstsubtitleoverlay.h
new file mode 100644
index 0000000..0fe6b1b
--- /dev/null
+++ b/gst/playback/gstsubtitleoverlay.h
@@ -0,0 +1,121 @@
+/* GStreamer
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_SUBTITLE_OVERLAY_H__
+#define __GST_SUBTITLE_OVERLAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_SUBTITLE_OVERLAY \
+  (gst_subtitle_overlay_get_type())
+#define GST_SUBTITLE_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SUBTITLE_OVERLAY, GstSubtitleOverlay))
+#define GST_SUBTITLE_OVERLAY_CAST(obj) \
+  ((GstSubtitleOverlay *) obj)
+#define GST_SUBTITLE_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SUBTITLE_OVERLAY, GstSubtitleOverlayClass))
+#define GST_IS_SUBTITLE_OVERLAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SUBTITLE_OVERLAY))
+#define GST_IS_SUBTITLE_OVERLAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SUBTITLE_OVERLAY))
+
+#define GST_SUBTITLE_OVERLAY_LOCK(obj) G_STMT_START {                   \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locking from thread %p",                           \
+                    g_thread_self ());                                  \
+    g_mutex_lock (GST_SUBTITLE_OVERLAY_CAST(obj)->lock);                \
+    GST_LOG_OBJECT (obj,                                                \
+                    "locked from thread %p",                            \
+                    g_thread_self ());                                  \
+} G_STMT_END
+
+#define GST_SUBTITLE_OVERLAY_UNLOCK(obj) G_STMT_START {                 \
+    GST_LOG_OBJECT (obj,                                                \
+                    "unlocking from thread %p",                         \
+                    g_thread_self ());                                  \
+    g_mutex_unlock (GST_SUBTITLE_OVERLAY_CAST(obj)->lock);              \
+} G_STMT_END
+
+typedef struct _GstSubtitleOverlay GstSubtitleOverlay;
+typedef struct _GstSubtitleOverlayClass GstSubtitleOverlayClass;
+
+struct _GstSubtitleOverlay
+{
+  GstBin parent;
+
+  gboolean silent;
+  gchar *font_desc;
+  gchar *encoding;
+
+  /* < private > */
+  gboolean do_async;
+
+  GstPad *srcpad;
+  gboolean downstream_chain_error;
+
+  GstPad *video_sinkpad;
+  GstPad *video_block_pad;
+  gulong video_block_id;
+  gboolean video_sink_blocked;
+  GstSegment video_segment;
+  gint fps_n, fps_d;
+
+  GstPad *subtitle_sinkpad;
+  GstPad *subtitle_block_pad;
+  gulong subtitle_block_id;
+  gboolean subtitle_sink_blocked;
+  GstSegment subtitle_segment;
+  gboolean subtitle_flush;
+  gboolean subtitle_error;
+
+  GMutex *factories_lock;
+  GList *factories;
+  guint32 factories_cookie;
+  GstCaps *factory_caps;
+
+  GMutex *lock;
+  GstCaps *subcaps;
+
+  GstElement *passthrough_identity;
+
+  GstElement *pre_colorspace;
+  GstElement *post_colorspace;
+
+  GstElement *parser;
+  GstElement *overlay;
+
+  GstElement *renderer;
+
+  const gchar *silent_property;
+  gboolean silent_property_invert;
+};
+
+struct _GstSubtitleOverlayClass
+{
+  GstBinClass parent;
+};
+
+GType gst_subtitle_overlay_get_type (void);
+gboolean gst_subtitle_overlay_plugin_init (GstPlugin * plugin);
+
+GstCaps *gst_subtitle_overlay_create_factory_caps (void);
+
+G_END_DECLS
+#endif /* __GST_SUBTITLE_OVERLAY_H__ */
diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c
new file mode 100644
index 0000000..1988b63
--- /dev/null
+++ b/gst/playback/gsturidecodebin.c
@@ -0,0 +1,2553 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-uridecodebin
+ *
+ * Decodes data from a URI into raw media. It selects a source element that can
+ * handle the given #GstURIDecodeBin:uri scheme and connects it to a decodebin.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/gst.h>
+#include <gst/gst-i18n-plugin.h>
+#include <gst/pbutils/missing-plugins.h>
+
+#include "gstplay-marshal.h"
+#include "gstplay-enum.h"
+#include "gstrawcaps.h"
+#include "gstplayback.h"
+
+#define GST_TYPE_URI_DECODE_BIN \
+  (gst_uri_decode_bin_get_type())
+#define GST_URI_DECODE_BIN(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_URI_DECODE_BIN,GstURIDecodeBin))
+#define GST_URI_DECODE_BIN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_URI_DECODE_BIN,GstURIDecodeBinClass))
+#define GST_IS_URI_DECODE_BIN(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_URI_DECODE_BIN))
+#define GST_IS_URI_DECODE_BIN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_URI_DECODE_BIN))
+#define GST_URI_DECODE_BIN_CAST(obj) ((GstURIDecodeBin *) (obj))
+
+typedef struct _GstURIDecodeBin GstURIDecodeBin;
+typedef struct _GstURIDecodeBinClass GstURIDecodeBinClass;
+
+#define GST_URI_DECODE_BIN_GET_LOCK(dec) (((GstURIDecodeBin*)(dec))->lock)
+#define GST_URI_DECODE_BIN_LOCK(dec) (g_mutex_lock(GST_URI_DECODE_BIN_GET_LOCK(dec)))
+#define GST_URI_DECODE_BIN_UNLOCK(dec) (g_mutex_unlock(GST_URI_DECODE_BIN_GET_LOCK(dec)))
+
+typedef struct _GstURIDecodeBinStream
+{
+  gulong probe_id;
+  guint bitrate;
+} GstURIDecodeBinStream;
+
+/**
+ * GstURIDecodeBin
+ *
+ * uridecodebin element struct
+ */
+struct _GstURIDecodeBin
+{
+  GstBin parent_instance;
+
+  GMutex *lock;                 /* lock for constructing */
+
+  GMutex *factories_lock;
+  guint32 factories_cookie;
+  GList *factories;             /* factories we can use for selecting elements */
+
+  gchar *uri;
+  guint connection_speed;
+  GstCaps *caps;
+  gchar *encoding;
+
+  gboolean is_stream;
+  gboolean is_download;
+  gboolean need_queue;
+  guint64 buffer_duration;      /* When buffering, buffer duration (ns) */
+  guint buffer_size;            /* When buffering, buffer size (bytes) */
+  gboolean download;
+  gboolean use_buffering;
+
+  GstElement *source;
+  GstElement *queue;
+  GstElement *typefind;
+  guint have_type_id;           /* have-type signal id from typefind */
+  GSList *decodebins;
+  GSList *pending_decodebins;
+  GHashTable *streams;
+  gint numpads;
+
+  /* for dynamic sources */
+  guint src_np_sig_id;          /* new-pad signal id */
+  guint src_nmp_sig_id;         /* no-more-pads signal id */
+  gint pending;
+
+  gboolean async_pending;       /* async-start has been emited */
+
+  gboolean expose_allstreams;   /* Whether to expose unknow type streams or not */
+
+  guint64 ring_buffer_max_size; /* 0 means disabled */
+};
+
+struct _GstURIDecodeBinClass
+{
+  GstBinClass parent_class;
+
+  /* signal fired when we found a pad that we cannot decode */
+  void (*unknown_type) (GstElement * element, GstPad * pad, GstCaps * caps);
+
+  /* signal fired to know if we continue trying to decode the given caps */
+    gboolean (*autoplug_continue) (GstElement * element, GstPad * pad,
+      GstCaps * caps);
+  /* signal fired to get a list of factories to try to autoplug */
+  GValueArray *(*autoplug_factories) (GstElement * element, GstPad * pad,
+      GstCaps * caps);
+  /* signal fired to sort the factories */
+  GValueArray *(*autoplug_sort) (GstElement * element, GstPad * pad,
+      GstCaps * caps, GValueArray * factories);
+  /* signal fired to select from the proposed list of factories */
+    GstAutoplugSelectResult (*autoplug_select) (GstElement * element,
+      GstPad * pad, GstCaps * caps, GstElementFactory * factory);
+
+  /* emited when all data is decoded */
+  void (*drained) (GstElement * element);
+};
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src%d",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticCaps default_raw_caps = GST_STATIC_CAPS (DEFAULT_RAW_CAPS);
+
+GST_DEBUG_CATEGORY_STATIC (gst_uri_decode_bin_debug);
+#define GST_CAT_DEFAULT gst_uri_decode_bin_debug
+
+/* signals */
+enum
+{
+  SIGNAL_UNKNOWN_TYPE,
+  SIGNAL_AUTOPLUG_CONTINUE,
+  SIGNAL_AUTOPLUG_FACTORIES,
+  SIGNAL_AUTOPLUG_SELECT,
+  SIGNAL_DRAINED,
+  SIGNAL_AUTOPLUG_SORT,
+  SIGNAL_SOURCE_SETUP,
+  LAST_SIGNAL
+};
+
+/* properties */
+#define DEFAULT_PROP_URI            NULL
+#define DEFAULT_PROP_SOURCE         NULL
+#define DEFAULT_CONNECTION_SPEED    0
+#define DEFAULT_CAPS                (gst_static_caps_get (&default_raw_caps))
+#define DEFAULT_SUBTITLE_ENCODING   NULL
+#define DEFAULT_BUFFER_DURATION     -1
+#define DEFAULT_BUFFER_SIZE         -1
+#define DEFAULT_DOWNLOAD            FALSE
+#define DEFAULT_USE_BUFFERING       FALSE
+#define DEFAULT_EXPOSE_ALL_STREAMS  TRUE
+#define DEFAULT_RING_BUFFER_MAX_SIZE 0
+
+enum
+{
+  PROP_0,
+  PROP_URI,
+  PROP_SOURCE,
+  PROP_CONNECTION_SPEED,
+  PROP_CAPS,
+  PROP_SUBTITLE_ENCODING,
+  PROP_BUFFER_SIZE,
+  PROP_BUFFER_DURATION,
+  PROP_DOWNLOAD,
+  PROP_USE_BUFFERING,
+  PROP_EXPOSE_ALL_STREAMS,
+  PROP_RING_BUFFER_MAX_SIZE,
+  PROP_LAST
+};
+
+static guint gst_uri_decode_bin_signals[LAST_SIGNAL] = { 0 };
+
+GType gst_uri_decode_bin_get_type (void);
+#define gst_uri_decode_bin_parent_class parent_class
+G_DEFINE_TYPE (GstURIDecodeBin, gst_uri_decode_bin, GST_TYPE_BIN);
+
+static void remove_decoders (GstURIDecodeBin * bin, gboolean force);
+static void gst_uri_decode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_uri_decode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_uri_decode_bin_finalize (GObject * obj);
+
+static void handle_message (GstBin * bin, GstMessage * msg);
+
+static gboolean gst_uri_decode_bin_query (GstElement * element,
+    GstQuery * query);
+static GstStateChangeReturn gst_uri_decode_bin_change_state (GstElement *
+    element, GstStateChange transition);
+
+static gboolean
+_gst_boolean_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gboolean myboolean;
+
+  myboolean = g_value_get_boolean (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boolean (return_accu, myboolean);
+
+  /* stop emission if FALSE */
+  return myboolean;
+}
+
+static gboolean
+_gst_array_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gpointer array;
+
+  array = g_value_get_boxed (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boxed (return_accu, array);
+
+  return FALSE;
+}
+
+static gboolean
+_gst_select_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  GstAutoplugSelectResult res;
+
+  res = g_value_get_enum (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_enum (return_accu, res);
+
+  return FALSE;
+}
+
+static gboolean
+_gst_array_hasvalue_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gpointer array;
+
+  array = g_value_get_boxed (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boxed (return_accu, array);
+
+  if (array != NULL)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_uri_decode_bin_autoplug_continue (GstElement * element, GstPad * pad,
+    GstCaps * caps)
+{
+  /* by default we always continue */
+  return TRUE;
+}
+
+/* Must be called with factories lock! */
+static void
+gst_uri_decode_bin_update_factories_list (GstURIDecodeBin * dec)
+{
+  if (!dec->factories ||
+      dec->factories_cookie !=
+      gst_default_registry_get_feature_list_cookie ()) {
+    if (dec->factories)
+      gst_plugin_feature_list_free (dec->factories);
+    dec->factories =
+        gst_element_factory_list_get_elements
+        (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
+    dec->factories_cookie = gst_default_registry_get_feature_list_cookie ();
+  }
+}
+
+static GValueArray *
+gst_uri_decode_bin_autoplug_factories (GstElement * element, GstPad * pad,
+    GstCaps * caps)
+{
+  GList *list, *tmp;
+  GValueArray *result;
+  GstURIDecodeBin *dec = GST_URI_DECODE_BIN_CAST (element);
+
+  GST_DEBUG_OBJECT (element, "finding factories");
+
+  /* return all compatible factories for caps */
+  g_mutex_lock (dec->factories_lock);
+  gst_uri_decode_bin_update_factories_list (dec);
+  list =
+      gst_element_factory_list_filter (dec->factories, caps, GST_PAD_SINK,
+      FALSE);
+  g_mutex_unlock (dec->factories_lock);
+
+  result = g_value_array_new (g_list_length (list));
+  for (tmp = list; tmp; tmp = tmp->next) {
+    GstElementFactory *factory = GST_ELEMENT_FACTORY_CAST (tmp->data);
+    GValue val = { 0, };
+
+    g_value_init (&val, G_TYPE_OBJECT);
+    g_value_set_object (&val, factory);
+    g_value_array_append (result, &val);
+    g_value_unset (&val);
+  }
+  gst_plugin_feature_list_free (list);
+
+  GST_DEBUG_OBJECT (element, "autoplug-factories returns %p", result);
+
+  return result;
+}
+
+static GValueArray *
+gst_uri_decode_bin_autoplug_sort (GstElement * element, GstPad * pad,
+    GstCaps * caps, GValueArray * factories)
+{
+  return NULL;
+}
+
+static GstAutoplugSelectResult
+gst_uri_decode_bin_autoplug_select (GstElement * element, GstPad * pad,
+    GstCaps * caps, GstElementFactory * factory)
+{
+  GST_DEBUG_OBJECT (element, "default autoplug-select returns TRY");
+
+  /* Try factory. */
+  return GST_AUTOPLUG_SELECT_TRY;
+}
+
+static void
+gst_uri_decode_bin_class_init (GstURIDecodeBinClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBinClass *gstbin_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gstelement_class = GST_ELEMENT_CLASS (klass);
+  gstbin_class = GST_BIN_CLASS (klass);
+
+  gobject_class->set_property = gst_uri_decode_bin_set_property;
+  gobject_class->get_property = gst_uri_decode_bin_get_property;
+  gobject_class->finalize = gst_uri_decode_bin_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_URI,
+      g_param_spec_string ("uri", "URI", "URI to decode",
+          DEFAULT_PROP_URI, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SOURCE,
+      g_param_spec_object ("source", "Source", "Source object used",
+          GST_TYPE_ELEMENT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CONNECTION_SPEED,
+      g_param_spec_uint ("connection-speed", "Connection Speed",
+          "Network connection speed in kbps (0 = unknown)",
+          0, G_MAXUINT / 1000, DEFAULT_CONNECTION_SPEED,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CAPS,
+      g_param_spec_boxed ("caps", "Caps",
+          "The caps on which to stop decoding. (NULL = default)",
+          GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SUBTITLE_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 encoding. "
+          "If not set, the GST_SUBTITLE_ENCODING environment variable will "
+          "be checked for an encoding to use. If that is not set either, "
+          "ISO-8859-15 will be assumed.", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_BUFFER_SIZE,
+      g_param_spec_int ("buffer-size", "Buffer size (bytes)",
+          "Buffer size when buffering streams (-1 default value)",
+          -1, G_MAXINT, DEFAULT_BUFFER_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BUFFER_DURATION,
+      g_param_spec_int64 ("buffer-duration", "Buffer duration (ns)",
+          "Buffer duration when buffering streams (-1 default value)",
+          -1, G_MAXINT64, DEFAULT_BUFFER_DURATION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstURIDecodeBin::download:
+   *
+   * For certain media type, enable download buffering.
+   */
+  g_object_class_install_property (gobject_class, PROP_DOWNLOAD,
+      g_param_spec_boolean ("download", "Download",
+          "Attempt download buffering when buffering network streams",
+          DEFAULT_DOWNLOAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstURIDecodeBin::use-buffering:
+   *
+   * Emit BUFFERING messages based on low-/high-percent thresholds of the
+   * demuxed or parsed data.
+   * When download buffering is activated and used for the current media
+   * type, this property does nothing. Otherwise perform buffering on the
+   * demuxed or parsed media.
+   *
+   * Since: 0.10.26
+   */
+  g_object_class_install_property (gobject_class, PROP_USE_BUFFERING,
+      g_param_spec_boolean ("use-buffering", "Use Buffering",
+          "Perform buffering on demuxed/parsed media",
+          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstURIDecodeBin::expose-all-streams
+   *
+   * Expose streams of unknown type.
+   *
+   * If set to %FALSE, then only the streams that can be decoded to the final
+   * caps (see 'caps' property) will have a pad exposed. Streams that do not
+   * match those caps but could have been decoded will not have decoder plugged
+   * in internally and will not have a pad exposed. 
+   *
+   * Since: 0.10.30
+   */
+  g_object_class_install_property (gobject_class, PROP_EXPOSE_ALL_STREAMS,
+      g_param_spec_boolean ("expose-all-streams", "Expose All Streams",
+          "Expose all streams, including those of unknown type or that don't match the 'caps' property",
+          DEFAULT_EXPOSE_ALL_STREAMS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstURIDecodeBin::ring-buffer-max-size
+   *
+   * The maximum size of the ring buffer in kilobytes. If set to 0, the ring
+   * buffer is disabled. Default is 0.
+   *
+   * Since: 0.10.31
+   */
+  g_object_class_install_property (gobject_class, PROP_RING_BUFFER_MAX_SIZE,
+      g_param_spec_uint64 ("ring-buffer-max-size",
+          "Max. ring buffer size (bytes)",
+          "Max. amount of data in the ring buffer (bytes, 0 = ring buffer disabled)",
+          0, G_MAXUINT, DEFAULT_RING_BUFFER_MAX_SIZE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstURIDecodeBin::unknown-type:
+   * @bin: The uridecodebin.
+   * @pad: the new pad containing caps that cannot be resolved to a 'final'.
+   * stream type.
+   * @caps: the #GstCaps of the pad that cannot be resolved.
+   *
+   * This signal is emitted when a pad for which there is no further possible
+   * decoding is added to the uridecodebin.
+   */
+  gst_uri_decode_bin_signals[SIGNAL_UNKNOWN_TYPE] =
+      g_signal_new ("unknown-type", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstURIDecodeBinClass, unknown_type),
+      NULL, NULL, gst_marshal_VOID__OBJECT_BOXED, G_TYPE_NONE, 2,
+      GST_TYPE_PAD, GST_TYPE_CAPS);
+
+  /**
+   * GstURIDecodeBin::autoplug-continue:
+   * @bin: The uridecodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps found.
+   *
+   * This signal is emitted whenever uridecodebin finds a new stream. It is
+   * emitted before looking for any elements that can handle that stream.
+   *
+   * <note>
+   *   Invocation of signal handlers stops after the first signal handler
+   *   returns #FALSE. Signal handlers are invoked in the order they were
+   *   connected in.
+   * </note>
+   *
+   * Returns: #TRUE if you wish uridecodebin to look for elements that can
+   * handle the given @caps. If #FALSE, those caps will be considered as
+   * final and the pad will be exposed as such (see 'pad-added' signal of
+   * #GstElement).
+   */
+  gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE] =
+      g_signal_new ("autoplug-continue", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstURIDecodeBinClass,
+          autoplug_continue), _gst_boolean_accumulator, NULL,
+      gst_play_marshal_BOOLEAN__OBJECT_BOXED, G_TYPE_BOOLEAN, 2, GST_TYPE_PAD,
+      GST_TYPE_CAPS);
+
+  /**
+   * GstURIDecodeBin::autoplug-factories:
+   * @bin: The uridecodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps found.
+   *
+   * This function is emited when an array of possible factories for @caps on
+   * @pad is needed. Uridecodebin will by default return an array with all
+   * compatible factories, sorted by rank.
+   *
+   * If this function returns NULL, @pad will be exposed as a final caps.
+   *
+   * If this function returns an empty array, the pad will be considered as
+   * having an unhandled type media type.
+   *
+   * <note>
+   *   Only the signal handler that is connected first will ever by invoked.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: a #GValueArray* with a list of factories to try. The factories are
+   * by default tried in the returned order or based on the index returned by
+   * "autoplug-select".
+   */
+  gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_FACTORIES] =
+      g_signal_new ("autoplug-factories", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstURIDecodeBinClass,
+          autoplug_factories), _gst_array_accumulator, NULL,
+      gst_play_marshal_BOXED__OBJECT_BOXED, G_TYPE_VALUE_ARRAY, 2,
+      GST_TYPE_PAD, GST_TYPE_CAPS);
+
+  /**
+   * GstURIDecodeBin::autoplug-sort:
+   * @bin: The uridecodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps.
+   * @factories: A #GValueArray of possible #GstElementFactory to use.
+   *
+   * Once decodebin has found the possible #GstElementFactory objects to try
+   * for @caps on @pad, this signal is emited. The purpose of the signal is for
+   * the application to perform additional sorting or filtering on the element
+   * factory array.
+   *
+   * The callee should copy and modify @factories or return #NULL if the
+   * order should not change.
+   *
+   * <note>
+   *   Invocation of signal handlers stops after one signal handler has
+   *   returned something else than #NULL. Signal handlers are invoked in
+   *   the order they were connected in.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: A new sorted array of #GstElementFactory objects.
+   *
+   * Since: 0.10.33
+   */
+  gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_SORT] =
+      g_signal_new ("autoplug-sort", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstURIDecodeBinClass, autoplug_sort),
+      _gst_array_hasvalue_accumulator, NULL,
+      gst_play_marshal_BOXED__OBJECT_BOXED_BOXED, G_TYPE_VALUE_ARRAY, 3,
+      GST_TYPE_PAD, GST_TYPE_CAPS, G_TYPE_VALUE_ARRAY);
+
+  /**
+   * GstURIDecodeBin::autoplug-select:
+   * @bin: The uridecodebin.
+   * @pad: The #GstPad.
+   * @caps: The #GstCaps.
+   * @factory: A #GstElementFactory to use.
+   *
+   * This signal is emitted once uridecodebin has found all the possible
+   * #GstElementFactory that can be used to handle the given @caps. For each of
+   * those factories, this signal is emited.
+   *
+   * The signal handler should return a #GST_TYPE_AUTOPLUG_SELECT_RESULT enum
+   * value indicating what decodebin should do next.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_TRY will try to autoplug an element from
+   * @factory.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_EXPOSE will expose @pad without plugging
+   * any element to it.
+   *
+   * A value of #GST_AUTOPLUG_SELECT_SKIP will skip @factory and move to the
+   * next factory.
+   *
+   * <note>
+   *   Only the signal handler that is connected first will ever by invoked.
+   *   Don't connect signal handlers with the #G_CONNECT_AFTER flag to this
+   *   signal, they will never be invoked!
+   * </note>
+   *
+   * Returns: a #GST_TYPE_AUTOPLUG_SELECT_RESULT that indicates the required
+   * operation. The default handler will always return
+   * #GST_AUTOPLUG_SELECT_TRY.
+   */
+  gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_SELECT] =
+      g_signal_new ("autoplug-select", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstURIDecodeBinClass,
+          autoplug_select), _gst_select_accumulator, NULL,
+      gst_play_marshal_ENUM__OBJECT_BOXED_OBJECT,
+      GST_TYPE_AUTOPLUG_SELECT_RESULT, 3, GST_TYPE_PAD, GST_TYPE_CAPS,
+      GST_TYPE_ELEMENT_FACTORY);
+
+  /**
+   * GstURIDecodeBin::drained:
+   *
+   * This signal is emitted when the data for the current uri is played.
+   */
+  gst_uri_decode_bin_signals[SIGNAL_DRAINED] =
+      g_signal_new ("drained", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST,
+      G_STRUCT_OFFSET (GstURIDecodeBinClass, drained), NULL, NULL,
+      gst_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstURIDecodeBin::source-setup:
+   * @bin: the uridecodebin.
+   * @source: source element
+   *
+   * This signal is emitted after the source element has been created, so
+   * it can be configured by setting additional properties (e.g. set a
+   * proxy server for an http source, or set the device and read speed for
+   * an audio cd source). This is functionally equivalent to connecting to
+   * the notify::source signal, but more convenient.
+   *
+   * Since: 0.10.33
+   */
+  gst_uri_decode_bin_signals[SIGNAL_SOURCE_SETUP] =
+      g_signal_new ("source-setup", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+      gst_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+  gst_element_class_set_details_simple (gstelement_class,
+      "URI Decoder", "Generic/Bin/Decoder",
+      "Autoplug and decode an URI to raw media",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gstelement_class->query = GST_DEBUG_FUNCPTR (gst_uri_decode_bin_query);
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_uri_decode_bin_change_state);
+
+  gstbin_class->handle_message = GST_DEBUG_FUNCPTR (handle_message);
+
+  klass->autoplug_continue =
+      GST_DEBUG_FUNCPTR (gst_uri_decode_bin_autoplug_continue);
+  klass->autoplug_factories =
+      GST_DEBUG_FUNCPTR (gst_uri_decode_bin_autoplug_factories);
+  klass->autoplug_sort = GST_DEBUG_FUNCPTR (gst_uri_decode_bin_autoplug_sort);
+  klass->autoplug_select =
+      GST_DEBUG_FUNCPTR (gst_uri_decode_bin_autoplug_select);
+}
+
+static void
+gst_uri_decode_bin_init (GstURIDecodeBin * dec)
+{
+  /* first filter out the interesting element factories */
+  dec->factories_lock = g_mutex_new ();
+
+  dec->lock = g_mutex_new ();
+
+  dec->uri = g_strdup (DEFAULT_PROP_URI);
+  dec->connection_speed = DEFAULT_CONNECTION_SPEED;
+  dec->caps = DEFAULT_CAPS;
+  dec->encoding = g_strdup (DEFAULT_SUBTITLE_ENCODING);
+
+  dec->buffer_duration = DEFAULT_BUFFER_DURATION;
+  dec->buffer_size = DEFAULT_BUFFER_SIZE;
+  dec->download = DEFAULT_DOWNLOAD;
+  dec->use_buffering = DEFAULT_USE_BUFFERING;
+  dec->expose_allstreams = DEFAULT_EXPOSE_ALL_STREAMS;
+  dec->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE;
+
+  GST_OBJECT_FLAG_SET (dec, GST_ELEMENT_IS_SOURCE);
+}
+
+static void
+gst_uri_decode_bin_finalize (GObject * obj)
+{
+  GstURIDecodeBin *dec = GST_URI_DECODE_BIN (obj);
+
+  remove_decoders (dec, TRUE);
+  g_mutex_free (dec->lock);
+  g_mutex_free (dec->factories_lock);
+  g_free (dec->uri);
+  g_free (dec->encoding);
+  if (dec->factories)
+    gst_plugin_feature_list_free (dec->factories);
+  if (dec->caps)
+    gst_caps_unref (dec->caps);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_uri_decode_bin_set_encoding (GstURIDecodeBin * dec, const gchar * encoding)
+{
+  GSList *walk;
+
+  GST_URI_DECODE_BIN_LOCK (dec);
+
+  /* set property first */
+  GST_OBJECT_LOCK (dec);
+  g_free (dec->encoding);
+  dec->encoding = g_strdup (encoding);
+  GST_OBJECT_UNLOCK (dec);
+
+  /* set the property on all decodebins now */
+  for (walk = dec->decodebins; walk; walk = g_slist_next (walk)) {
+    GObject *decodebin = G_OBJECT (walk->data);
+
+    g_object_set (decodebin, "subtitle-encoding", encoding, NULL);
+  }
+  GST_URI_DECODE_BIN_UNLOCK (dec);
+}
+
+static void
+gst_uri_decode_bin_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstURIDecodeBin *dec = GST_URI_DECODE_BIN (object);
+
+  switch (prop_id) {
+    case PROP_URI:
+      GST_OBJECT_LOCK (dec);
+      g_free (dec->uri);
+      dec->uri = g_value_dup_string (value);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_CONNECTION_SPEED:
+      GST_OBJECT_LOCK (dec);
+      dec->connection_speed = g_value_get_uint (value) * 1000;
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_CAPS:
+      GST_OBJECT_LOCK (dec);
+      if (dec->caps)
+        gst_caps_unref (dec->caps);
+      dec->caps = g_value_dup_boxed (value);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      gst_uri_decode_bin_set_encoding (dec, g_value_get_string (value));
+      break;
+    case PROP_BUFFER_SIZE:
+      dec->buffer_size = g_value_get_int (value);
+      break;
+    case PROP_BUFFER_DURATION:
+      dec->buffer_duration = g_value_get_int64 (value);
+      break;
+    case PROP_DOWNLOAD:
+      dec->download = g_value_get_boolean (value);
+      break;
+    case PROP_USE_BUFFERING:
+      dec->use_buffering = g_value_get_boolean (value);
+      break;
+    case PROP_EXPOSE_ALL_STREAMS:
+      dec->expose_allstreams = g_value_get_boolean (value);
+      break;
+    case PROP_RING_BUFFER_MAX_SIZE:
+      dec->ring_buffer_max_size = g_value_get_uint64 (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_uri_decode_bin_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstURIDecodeBin *dec = GST_URI_DECODE_BIN (object);
+
+  switch (prop_id) {
+    case PROP_URI:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_string (value, dec->uri);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_SOURCE:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_object (value, dec->source);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_CONNECTION_SPEED:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_uint (value, dec->connection_speed / 1000);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_CAPS:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_boxed (value, dec->caps);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_SUBTITLE_ENCODING:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_string (value, dec->encoding);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_BUFFER_SIZE:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_int (value, dec->buffer_size);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_BUFFER_DURATION:
+      GST_OBJECT_LOCK (dec);
+      g_value_set_int64 (value, dec->buffer_duration);
+      GST_OBJECT_UNLOCK (dec);
+      break;
+    case PROP_DOWNLOAD:
+      g_value_set_boolean (value, dec->download);
+      break;
+    case PROP_USE_BUFFERING:
+      g_value_set_boolean (value, dec->use_buffering);
+      break;
+    case PROP_EXPOSE_ALL_STREAMS:
+      g_value_set_boolean (value, dec->expose_allstreams);
+      break;
+    case PROP_RING_BUFFER_MAX_SIZE:
+      g_value_set_uint64 (value, dec->ring_buffer_max_size);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+do_async_start (GstURIDecodeBin * dbin)
+{
+  GstMessage *message;
+
+  dbin->async_pending = TRUE;
+
+  message = gst_message_new_async_start (GST_OBJECT_CAST (dbin));
+  GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (dbin), message);
+}
+
+static void
+do_async_done (GstURIDecodeBin * dbin)
+{
+  GstMessage *message;
+
+  if (dbin->async_pending) {
+    GST_DEBUG_OBJECT (dbin, "posting ASYNC_DONE");
+    message = gst_message_new_async_done (GST_OBJECT_CAST (dbin), FALSE);
+    GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (dbin), message);
+
+    dbin->async_pending = FALSE;
+  }
+}
+
+#define DEFAULT_QUEUE_SIZE          (3 * GST_SECOND)
+#define DEFAULT_QUEUE_MIN_THRESHOLD ((DEFAULT_QUEUE_SIZE * 30) / 100)
+#define DEFAULT_QUEUE_THRESHOLD     ((DEFAULT_QUEUE_SIZE * 95) / 100)
+
+static void
+unknown_type_cb (GstElement * element, GstPad * pad, GstCaps * caps,
+    GstURIDecodeBin * decoder)
+{
+  gchar *capsstr;
+
+  capsstr = gst_caps_to_string (caps);
+  GST_ELEMENT_WARNING (decoder, STREAM, CODEC_NOT_FOUND,
+      (_("No decoder available for type \'%s\'."), capsstr), (NULL));
+  g_free (capsstr);
+}
+
+/* add a streaminfo that indicates that the stream is handled by the
+ * given element. This usually means that a stream without actual data is
+ * produced but one that is sunken by an element. Examples of this are:
+ * cdaudio, a hardware decoder/sink, dvd meta bins etc...
+ */
+static void
+add_element_stream (GstElement * element, GstURIDecodeBin * decoder)
+{
+  g_warning ("add element stream");
+}
+
+/* when the decoder element signals that no more pads will be generated, we
+ * can commit the current group.
+ */
+static void
+no_more_pads_full (GstElement * element, gboolean subs,
+    GstURIDecodeBin * decoder)
+{
+  gboolean final;
+
+  /* setup phase */
+  GST_DEBUG_OBJECT (element, "no more pads, %d pending", decoder->pending);
+
+  GST_URI_DECODE_BIN_LOCK (decoder);
+  final = (decoder->pending == 0);
+
+  /* nothing pending, we can exit */
+  if (final)
+    goto done;
+
+  /* the object has no pending no_more_pads */
+  if (!g_object_get_data (G_OBJECT (element), "pending"))
+    goto done;
+  g_object_set_data (G_OBJECT (element), "pending", NULL);
+
+  decoder->pending--;
+  final = (decoder->pending == 0);
+
+done:
+  GST_URI_DECODE_BIN_UNLOCK (decoder);
+
+  if (final)
+    gst_element_no_more_pads (GST_ELEMENT_CAST (decoder));
+
+  return;
+}
+
+static void
+no_more_pads (GstElement * element, GstURIDecodeBin * decoder)
+{
+  no_more_pads_full (element, FALSE, decoder);
+}
+
+static void
+source_no_more_pads (GstElement * element, GstURIDecodeBin * bin)
+{
+  GST_DEBUG_OBJECT (bin, "No more pads in source element %s.",
+      GST_ELEMENT_NAME (element));
+
+  g_signal_handler_disconnect (element, bin->src_np_sig_id);
+  bin->src_np_sig_id = 0;
+  g_signal_handler_disconnect (element, bin->src_nmp_sig_id);
+  bin->src_nmp_sig_id = 0;
+
+  no_more_pads_full (element, FALSE, bin);
+}
+
+static void
+configure_stream_buffering (GstURIDecodeBin * decoder)
+{
+  GstElement *queue = NULL;
+  GHashTableIter iter;
+  gpointer key, value;
+  gint bitrate = 0;
+
+  /* automatic configuration enabled ? */
+  if (decoder->buffer_size != -1)
+    return;
+
+  GST_URI_DECODE_BIN_LOCK (decoder);
+  if (decoder->queue)
+    queue = gst_object_ref (decoder->queue);
+
+  g_hash_table_iter_init (&iter, decoder->streams);
+  while (g_hash_table_iter_next (&iter, &key, &value)) {
+    GstURIDecodeBinStream *stream = value;
+
+    if (stream->bitrate && bitrate >= 0)
+      bitrate += stream->bitrate;
+    else
+      bitrate = -1;
+  }
+  GST_URI_DECODE_BIN_UNLOCK (decoder);
+
+  GST_DEBUG_OBJECT (decoder, "overall bitrate %d", bitrate);
+  if (!queue)
+    return;
+
+  if (bitrate > 0) {
+    guint64 time;
+    guint bytes;
+
+    /* all streams have a bitrate;
+     * configure queue size based on queue duration using combined bitrate */
+    g_object_get (queue, "max-size-time", &time, NULL);
+    GST_DEBUG_OBJECT (decoder, "queue buffering time %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (time));
+    if (time > 0) {
+      bytes = gst_util_uint64_scale (time, bitrate, 8 * GST_SECOND);
+      GST_DEBUG_OBJECT (decoder, "corresponds to buffer size %d", bytes);
+      g_object_set (queue, "max-size-bytes", bytes, NULL);
+    }
+  }
+
+  gst_object_unref (queue);
+}
+
+static GstProbeReturn
+decoded_pad_event_probe (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstEvent *event = type_data;
+  GstURIDecodeBin *decoder = user_data;
+
+  GST_LOG_OBJECT (pad, "%s, decoder %p", GST_EVENT_TYPE_NAME (event), decoder);
+
+  /* look for a bitrate tag */
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_TAG:
+    {
+      GstTagList *list;
+      guint bitrate = 0;
+      GstURIDecodeBinStream *stream;
+
+      gst_event_parse_tag (event, &list);
+      if (!gst_tag_list_get_uint_index (list, GST_TAG_NOMINAL_BITRATE, 0,
+              &bitrate)) {
+        gst_tag_list_get_uint_index (list, GST_TAG_BITRATE, 0, &bitrate);
+      }
+      GST_DEBUG_OBJECT (pad, "found bitrate %u", bitrate);
+      if (bitrate) {
+        GST_URI_DECODE_BIN_LOCK (decoder);
+        stream = g_hash_table_lookup (decoder->streams, pad);
+        GST_URI_DECODE_BIN_UNLOCK (decoder);
+        if (stream) {
+          stream->bitrate = bitrate;
+          /* no longer need this probe now */
+          gst_pad_remove_probe (pad, stream->probe_id);
+          /* configure buffer if possible */
+          configure_stream_buffering (decoder);
+        }
+      }
+      break;
+    }
+    default:
+      break;
+  }
+
+  /* never drop */
+  return GST_PROBE_OK;
+}
+
+/* Called by the signal handlers when a decodebin has found a new raw pad */
+static void
+new_decoded_pad_added_cb (GstElement * element, GstPad * pad,
+    GstURIDecodeBin * decoder)
+{
+  GstPad *newpad;
+  GstPadTemplate *pad_tmpl;
+  gchar *padname;
+  GstURIDecodeBinStream *stream;
+
+  GST_DEBUG_OBJECT (element, "new decoded pad, name: <%s>", GST_PAD_NAME (pad));
+
+  GST_URI_DECODE_BIN_LOCK (decoder);
+  padname = g_strdup_printf ("src%d", decoder->numpads);
+  decoder->numpads++;
+  GST_URI_DECODE_BIN_UNLOCK (decoder);
+
+  pad_tmpl = gst_static_pad_template_get (&srctemplate);
+  newpad = gst_ghost_pad_new_from_template (padname, pad, pad_tmpl);
+  gst_object_unref (pad_tmpl);
+  g_free (padname);
+
+  /* store ref to the ghostpad so we can remove it */
+  g_object_set_data (G_OBJECT (pad), "uridecodebin.ghostpad", newpad);
+
+  /* add event probe to monitor tags */
+  stream = g_slice_alloc0 (sizeof (GstURIDecodeBinStream));
+  stream->probe_id =
+      gst_pad_add_probe (pad, GST_PROBE_TYPE_EVENT, decoded_pad_event_probe,
+      decoder, NULL);
+  GST_URI_DECODE_BIN_LOCK (decoder);
+  g_hash_table_insert (decoder->streams, pad, stream);
+  GST_URI_DECODE_BIN_UNLOCK (decoder);
+
+  gst_pad_set_active (newpad, TRUE);
+  gst_element_add_pad (GST_ELEMENT_CAST (decoder), newpad);
+}
+
+static GstProbeReturn
+source_pad_event_probe (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstEvent *event = type_data;
+  GstURIDecodeBin *decoder = user_data;
+
+  GST_LOG_OBJECT (pad, "%s, decoder %p", GST_EVENT_TYPE_NAME (event), decoder);
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+    GST_DEBUG_OBJECT (pad, "we received EOS");
+
+    g_signal_emit (decoder,
+        gst_uri_decode_bin_signals[SIGNAL_DRAINED], 0, NULL);
+  }
+  /* never drop events */
+  return GST_PROBE_OK;
+}
+
+/* called when we found a raw pad on the source element. We need to set up a
+ * padprobe to detect EOS before exposing the pad. */
+static void
+expose_decoded_pad (GstElement * element, GstPad * pad,
+    GstURIDecodeBin * decoder)
+{
+  gst_pad_add_probe (pad, GST_PROBE_TYPE_EVENT, source_pad_event_probe, decoder,
+      NULL);
+
+  new_decoded_pad_added_cb (element, pad, decoder);
+}
+
+static void
+pad_removed_cb (GstElement * element, GstPad * pad, GstURIDecodeBin * decoder)
+{
+  GstPad *ghost;
+
+  GST_DEBUG_OBJECT (element, "pad removed name: <%s:%s>",
+      GST_DEBUG_PAD_NAME (pad));
+
+  /* we only care about srcpads */
+  if (!GST_PAD_IS_SRC (pad))
+    return;
+
+  if (!(ghost = g_object_get_data (G_OBJECT (pad), "uridecodebin.ghostpad")))
+    goto no_ghost;
+
+  /* unghost the pad */
+  gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (ghost), NULL);
+
+  /* deactivate and remove */
+  gst_pad_set_active (pad, FALSE);
+  gst_element_remove_pad (GST_ELEMENT_CAST (decoder), ghost);
+
+  return;
+
+  /* ERRORS */
+no_ghost:
+  {
+    GST_WARNING_OBJECT (element, "no ghost pad found");
+    return;
+  }
+}
+
+/* helper function to lookup stuff in lists */
+static gboolean
+array_has_value (const gchar * values[], const gchar * value)
+{
+  gint i;
+
+  for (i = 0; values[i]; i++) {
+    if (g_str_has_prefix (value, values[i]))
+      return TRUE;
+  }
+  return FALSE;
+}
+
+static gboolean
+array_has_uri_value (const gchar * values[], const gchar * value)
+{
+  gint i;
+
+  for (i = 0; values[i]; i++) {
+    if (!g_ascii_strncasecmp (value, values[i], strlen (values[i])))
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/* list of URIs that we consider to be streams and that need buffering.
+ * We have no mechanism yet to figure this out with a query. */
+static const gchar *stream_uris[] = { "http://", "https://", "mms://",
+  "mmsh://", "mmsu://", "mmst://", "fd://", "myth://", "ssh://",
+  "ftp://", "sftp://",
+  NULL
+};
+
+/* list of URIs that need a queue because they are pretty bursty */
+static const gchar *queue_uris[] = { "cdda://", NULL };
+
+/* blacklisted URIs, we know they will always fail. */
+static const gchar *blacklisted_uris[] = { NULL };
+
+/* mime types that we don't consider to be media types */
+#if 0
+static const gchar *no_media_mimes[] = {
+  "application/x-executable", "application/x-bzip", "application/x-gzip",
+  "application/zip", "application/x-compress", NULL
+};
+#endif
+
+/* media types we can download */
+static const gchar *download_media[] = {
+  "video/quicktime", "video/mj2", "audio/x-m4a", "application/x-3gp",
+  "video/x-flv", "video/x-msvideo", "video/webm", NULL
+};
+
+#define IS_STREAM_URI(uri)          (array_has_uri_value (stream_uris, uri))
+#define IS_QUEUE_URI(uri)           (array_has_uri_value (queue_uris, uri))
+#define IS_BLACKLISTED_URI(uri)     (array_has_uri_value (blacklisted_uris, uri))
+#define IS_NO_MEDIA_MIME(mime)      (array_has_value (no_media_mimes, mime))
+#define IS_DOWNLOAD_MEDIA(media)    (array_has_value (download_media, media))
+
+/*
+ * Generate and configure a source element.
+ */
+static GstElement *
+gen_source_element (GstURIDecodeBin * decoder)
+{
+  GstElement *source;
+
+  if (!decoder->uri)
+    goto no_uri;
+
+  GST_LOG_OBJECT (decoder, "finding source for %s", decoder->uri);
+
+  if (!gst_uri_is_valid (decoder->uri))
+    goto invalid_uri;
+
+  if (IS_BLACKLISTED_URI (decoder->uri))
+    goto uri_blacklisted;
+
+  source = gst_element_make_from_uri (GST_URI_SRC, decoder->uri, "source");
+  if (!source)
+    goto no_source;
+
+  GST_LOG_OBJECT (decoder, "found source type %s", G_OBJECT_TYPE_NAME (source));
+
+  decoder->is_stream = IS_STREAM_URI (decoder->uri);
+  GST_LOG_OBJECT (decoder, "source is stream: %d", decoder->is_stream);
+
+  decoder->need_queue = IS_QUEUE_URI (decoder->uri);
+  GST_LOG_OBJECT (decoder, "source needs queue: %d", decoder->need_queue);
+
+  /* make HTTP sources send extra headers so we get icecast
+   * metadata in case the stream is an icecast stream */
+  if (!strncmp (decoder->uri, "http://", 7) &&
+      g_object_class_find_property (G_OBJECT_GET_CLASS (source),
+          "iradio-mode")) {
+    GST_LOG_OBJECT (decoder, "configuring iradio-mode");
+    g_object_set (source, "iradio-mode", TRUE, NULL);
+  }
+
+  if (g_object_class_find_property (G_OBJECT_GET_CLASS (source),
+          "connection-speed")) {
+    GST_DEBUG_OBJECT (decoder,
+        "setting connection-speed=%d to source element",
+        decoder->connection_speed / 1000);
+    g_object_set (source, "connection-speed",
+        decoder->connection_speed / 1000, NULL);
+  }
+  if (g_object_class_find_property (G_OBJECT_GET_CLASS (source),
+          "subtitle-encoding")) {
+    GST_DEBUG_OBJECT (decoder,
+        "setting subtitle-encoding=%s to source element", decoder->encoding);
+    g_object_set (source, "subtitle-encoding", decoder->encoding, NULL);
+  }
+  return source;
+
+  /* ERRORS */
+no_uri:
+  {
+    GST_ELEMENT_ERROR (decoder, RESOURCE, NOT_FOUND,
+        (_("No URI specified to play from.")), (NULL));
+    return NULL;
+  }
+invalid_uri:
+  {
+    GST_ELEMENT_ERROR (decoder, RESOURCE, NOT_FOUND,
+        (_("Invalid URI \"%s\"."), decoder->uri), (NULL));
+    return NULL;
+  }
+uri_blacklisted:
+  {
+    GST_ELEMENT_ERROR (decoder, RESOURCE, FAILED,
+        (_("This stream type cannot be played yet.")), (NULL));
+    return NULL;
+  }
+no_source:
+  {
+    gchar *prot = gst_uri_get_protocol (decoder->uri);
+
+    /* whoops, could not create the source element, dig a little deeper to
+     * figure out what might be wrong. */
+    if (prot) {
+      GstMessage *msg;
+
+      msg =
+          gst_missing_uri_source_message_new (GST_ELEMENT_CAST (decoder), prot);
+      gst_element_post_message (GST_ELEMENT_CAST (decoder), msg);
+
+      GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN,
+          (_("No URI handler implemented for \"%s\"."), prot), (NULL));
+      g_free (prot);
+    } else
+      goto invalid_uri;
+
+    return NULL;
+  }
+}
+
+/**
+ * has_all_raw_caps:
+ * @pad: a #GstPad
+ * @all_raw: pointer to hold the result
+ *
+ * check if the caps of the pad are all raw. The caps are all raw if
+ * all of its structures contain audio/x-raw or video/x-raw.
+ *
+ * Returns: %FALSE @pad has no caps. Else TRUE and @all_raw set t the result.
+ */
+static gboolean
+has_all_raw_caps (GstPad * pad, GstCaps * rawcaps, gboolean * all_raw)
+{
+  GstCaps *caps, *intersection;
+  gint capssize;
+  gboolean res = FALSE;
+
+  caps = gst_pad_get_caps (pad, NULL);
+  if (caps == NULL)
+    return FALSE;
+
+  GST_DEBUG_OBJECT (pad, "have caps %" GST_PTR_FORMAT, caps);
+
+  capssize = gst_caps_get_size (caps);
+  /* no caps, skip and move to the next pad */
+  if (capssize == 0 || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
+    goto done;
+
+  intersection = gst_caps_intersect (caps, rawcaps);
+  *all_raw = !gst_caps_is_empty (intersection)
+      && (gst_caps_get_size (intersection) == capssize);
+  gst_caps_unref (intersection);
+
+  res = TRUE;
+
+done:
+  gst_caps_unref (caps);
+  return res;
+}
+
+static void
+post_missing_plugin_error (GstElement * dec, const gchar * element_name)
+{
+  GstMessage *msg;
+
+  msg = gst_missing_element_message_new (dec, element_name);
+  gst_element_post_message (dec, msg);
+
+  GST_ELEMENT_ERROR (dec, CORE, MISSING_PLUGIN,
+      (_("Missing element '%s' - check your GStreamer installation."),
+          element_name), (NULL));
+}
+
+/**
+ * analyse_source:
+ * @decoder: a #GstURIDecodeBin
+ * @is_raw: are all pads raw data
+ * @have_out: does the source have output
+ * @is_dynamic: is this a dynamic source
+ * @use_queue: put a queue before raw output pads
+ *
+ * Check the source of @decoder and collect information about it.
+ *
+ * @is_raw will be set to TRUE if the source only produces raw pads. When this
+ * function returns, all of the raw pad of the source will be added
+ * to @decoder.
+ *
+ * @have_out: will be set to TRUE if the source has output pads.
+ *
+ * @is_dynamic: TRUE if the element will create (more) pads dynamically later
+ * on.
+ *
+ * Returns: FALSE if a fatal error occured while scanning.
+ */
+static gboolean
+analyse_source (GstURIDecodeBin * decoder, gboolean * is_raw,
+    gboolean * have_out, gboolean * is_dynamic, gboolean use_queue)
+{
+  GstIterator *pads_iter;
+  gboolean done = FALSE;
+  gboolean res = TRUE;
+  GstCaps *rawcaps;
+  GstPad *pad;
+  GValue item = { 0, };
+
+  *have_out = FALSE;
+  *is_raw = FALSE;
+  *is_dynamic = FALSE;
+
+  g_object_get (decoder, "caps", &rawcaps, NULL);
+  if (!rawcaps)
+    rawcaps = DEFAULT_CAPS;
+
+  pads_iter = gst_element_iterate_src_pads (decoder->source);
+  while (!done) {
+    switch (gst_iterator_next (pads_iter, &item)) {
+      case GST_ITERATOR_ERROR:
+        res = FALSE;
+        /* FALLTROUGH */
+      case GST_ITERATOR_DONE:
+        done = TRUE;
+        break;
+      case GST_ITERATOR_RESYNC:
+        /* reset results and resync */
+        *have_out = FALSE;
+        *is_raw = FALSE;
+        *is_dynamic = FALSE;
+        gst_iterator_resync (pads_iter);
+        break;
+      case GST_ITERATOR_OK:
+        pad = g_value_get_object (&item);
+        /* we now officially have an ouput pad */
+        *have_out = TRUE;
+
+        /* if FALSE, this pad has no caps and we continue with the next pad. */
+        if (!has_all_raw_caps (pad, rawcaps, is_raw)) {
+          g_value_reset (&item);
+          break;
+        }
+
+        /* caps on source pad are all raw, we can add the pad */
+        if (*is_raw) {
+          GstElement *outelem;
+
+          if (use_queue) {
+            GstPad *sinkpad;
+
+            /* insert a queue element right before the raw pad */
+            outelem = gst_element_factory_make ("queue2", NULL);
+            if (!outelem)
+              goto no_queue2;
+
+            gst_bin_add (GST_BIN_CAST (decoder), outelem);
+
+            sinkpad = gst_element_get_static_pad (outelem, "sink");
+            gst_pad_link (pad, sinkpad);
+            gst_object_unref (sinkpad);
+            gst_object_unref (pad);
+
+            /* save queue pointer so we can remove it later */
+            decoder->queue = outelem;
+
+            /* get the new raw srcpad */
+            pad = gst_element_get_static_pad (outelem, "src");
+          } else {
+            outelem = decoder->source;
+          }
+          expose_decoded_pad (outelem, pad, decoder);
+        }
+        g_value_reset (&item);
+        break;
+    }
+  }
+  g_value_unset (&item);
+  gst_iterator_free (pads_iter);
+  gst_caps_unref (rawcaps);
+
+  if (!*have_out) {
+    GstElementClass *elemclass;
+    GList *walk;
+
+    /* element has no output pads, check for padtemplates that list SOMETIMES
+     * pads. */
+    elemclass = GST_ELEMENT_GET_CLASS (decoder->source);
+
+    walk = gst_element_class_get_pad_template_list (elemclass);
+    while (walk != NULL) {
+      GstPadTemplate *templ;
+
+      templ = (GstPadTemplate *) walk->data;
+      if (GST_PAD_TEMPLATE_DIRECTION (templ) == GST_PAD_SRC) {
+        if (GST_PAD_TEMPLATE_PRESENCE (templ) == GST_PAD_SOMETIMES)
+          *is_dynamic = TRUE;
+        break;
+      }
+      walk = g_list_next (walk);
+    }
+  }
+
+  return res;
+no_queue2:
+  {
+    post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "queue2");
+
+    g_value_unset (&item);
+    gst_iterator_free (pads_iter);
+    gst_caps_unref (rawcaps);
+
+    return FALSE;
+  }
+}
+
+/* Remove all decodebin from ourself
+ * If force is FALSE, then the decodebin instances will be stored in
+ * pending_decodebins for re-use later on.
+ * If force is TRUE, then all decodebin instances will be unreferenced
+ * and cleared, including the pending ones. */
+static void
+remove_decoders (GstURIDecodeBin * bin, gboolean force)
+{
+  GSList *walk;
+
+  for (walk = bin->decodebins; walk; walk = g_slist_next (walk)) {
+    GstElement *decoder = GST_ELEMENT_CAST (walk->data);
+
+    GST_DEBUG_OBJECT (bin, "removing old decoder element");
+    if (force) {
+      gst_element_set_state (decoder, GST_STATE_NULL);
+      gst_bin_remove (GST_BIN_CAST (bin), decoder);
+    } else {
+      GstCaps *caps;
+
+      gst_element_set_state (decoder, GST_STATE_READY);
+      /* add it to our list of pending decodebins */
+      g_object_ref (decoder);
+      gst_bin_remove (GST_BIN_CAST (bin), decoder);
+      /* restore some properties we might have changed */
+      g_object_set (decoder, "sink-caps", NULL, NULL);
+      caps = DEFAULT_CAPS;
+      g_object_set (decoder, "caps", caps, NULL);
+      gst_caps_unref (caps);
+
+      bin->pending_decodebins =
+          g_slist_prepend (bin->pending_decodebins, decoder);
+    }
+  }
+  g_slist_free (bin->decodebins);
+  bin->decodebins = NULL;
+  if (force) {
+    GSList *tmp;
+
+    for (tmp = bin->pending_decodebins; tmp; tmp = tmp->next) {
+      gst_element_set_state ((GstElement *) tmp->data, GST_STATE_NULL);
+      gst_object_unref ((GstElement *) tmp->data);
+    }
+    g_slist_free (bin->pending_decodebins);
+    bin->pending_decodebins = NULL;
+
+  }
+
+  /* Don't loose the SOURCE flag */
+  GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_IS_SOURCE);
+}
+
+static void
+proxy_unknown_type_signal (GstElement * element, GstPad * pad, GstCaps * caps,
+    GstURIDecodeBin * dec)
+{
+  GST_DEBUG_OBJECT (dec, "unknown-type signaled");
+
+  g_signal_emit (dec,
+      gst_uri_decode_bin_signals[SIGNAL_UNKNOWN_TYPE], 0, pad, caps);
+}
+
+static gboolean
+proxy_autoplug_continue_signal (GstElement * element, GstPad * pad,
+    GstCaps * caps, GstURIDecodeBin * dec)
+{
+  gboolean result;
+
+  g_signal_emit (dec,
+      gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_CONTINUE], 0, pad, caps,
+      &result);
+
+  GST_DEBUG_OBJECT (dec, "autoplug-continue returned %d", result);
+
+  return result;
+}
+
+static GValueArray *
+proxy_autoplug_factories_signal (GstElement * element, GstPad * pad,
+    GstCaps * caps, GstURIDecodeBin * dec)
+{
+  GValueArray *result;
+
+  g_signal_emit (dec,
+      gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_FACTORIES], 0, pad, caps,
+      &result);
+
+  GST_DEBUG_OBJECT (dec, "autoplug-factories returned %p", result);
+
+  return result;
+}
+
+static GValueArray *
+proxy_autoplug_sort_signal (GstElement * element, GstPad * pad,
+    GstCaps * caps, GValueArray * factories, GstURIDecodeBin * dec)
+{
+  GValueArray *result;
+
+  g_signal_emit (dec,
+      gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_SORT], 0, pad, caps,
+      factories, &result);
+
+  GST_DEBUG_OBJECT (dec, "autoplug-sort returned %p", result);
+
+  return result;
+}
+
+static GstAutoplugSelectResult
+proxy_autoplug_select_signal (GstElement * element, GstPad * pad,
+    GstCaps * caps, GstElementFactory * factory, GstURIDecodeBin * dec)
+{
+  GstAutoplugSelectResult result;
+
+  g_signal_emit (dec,
+      gst_uri_decode_bin_signals[SIGNAL_AUTOPLUG_SELECT], 0, pad, caps, factory,
+      &result);
+
+  GST_DEBUG_OBJECT (dec, "autoplug-select returned %d", result);
+
+  return result;
+}
+
+static void
+proxy_drained_signal (GstElement * element, GstURIDecodeBin * dec)
+{
+  GST_DEBUG_OBJECT (dec, "drained signaled");
+
+  g_signal_emit (dec, gst_uri_decode_bin_signals[SIGNAL_DRAINED], 0, NULL);
+}
+
+/* make a decodebin and connect to all the signals */
+static GstElement *
+make_decoder (GstURIDecodeBin * decoder)
+{
+  GstElement *decodebin;
+
+  /* re-use pending decodebin */
+  if (decoder->pending_decodebins) {
+    GSList *first = decoder->pending_decodebins;
+    GST_LOG_OBJECT (decoder, "re-using pending decodebin");
+    decodebin = (GstElement *) first->data;
+    decoder->pending_decodebins =
+        g_slist_delete_link (decoder->pending_decodebins, first);
+  } else {
+    GST_LOG_OBJECT (decoder, "making new decodebin");
+
+    /* now create the decoder element */
+    decodebin = gst_element_factory_make ("decodebin", NULL);
+
+    if (!decodebin)
+      goto no_decodebin;
+
+    /* sanity check */
+    if (decodebin->numsinkpads == 0)
+      goto no_typefind;
+
+    /* connect signals to proxy */
+    g_signal_connect (decodebin, "unknown-type",
+        G_CALLBACK (proxy_unknown_type_signal), decoder);
+    g_signal_connect (decodebin, "autoplug-continue",
+        G_CALLBACK (proxy_autoplug_continue_signal), decoder);
+    g_signal_connect (decodebin, "autoplug-factories",
+        G_CALLBACK (proxy_autoplug_factories_signal), decoder);
+    g_signal_connect (decodebin, "autoplug-sort",
+        G_CALLBACK (proxy_autoplug_sort_signal), decoder);
+    g_signal_connect (decodebin, "autoplug-select",
+        G_CALLBACK (proxy_autoplug_select_signal), decoder);
+    g_signal_connect (decodebin, "drained",
+        G_CALLBACK (proxy_drained_signal), decoder);
+
+    /* set up callbacks to create the links between decoded data
+     * and video/audio/subtitle rendering/output. */
+    g_signal_connect (decodebin,
+        "pad-added", G_CALLBACK (new_decoded_pad_added_cb), decoder);
+    g_signal_connect (decodebin,
+        "pad-removed", G_CALLBACK (pad_removed_cb), decoder);
+    g_signal_connect (decodebin, "no-more-pads",
+        G_CALLBACK (no_more_pads), decoder);
+    g_signal_connect (decodebin,
+        "unknown-type", G_CALLBACK (unknown_type_cb), decoder);
+  }
+
+  /* configure caps if we have any */
+  if (decoder->caps)
+    g_object_set (decodebin, "caps", decoder->caps, NULL);
+
+  /* Propagate expose-all-streams property */
+  g_object_set (decodebin, "expose-all-streams", decoder->expose_allstreams,
+      NULL);
+
+  if (!decoder->is_stream) {
+    /* propagate the use-buffering property but only when we are not already
+     * doing stream buffering with queue2. FIXME, we might want to do stream
+     * buffering with the multiqueue buffering instead of queue2. */
+    g_object_set (decodebin, "use-buffering", decoder->use_buffering, NULL);
+
+    if (decoder->use_buffering) {
+      guint max_bytes;
+      guint64 max_time;
+
+      /* configure sizes when buffering */
+      if ((max_bytes = decoder->buffer_size) == -1)
+        max_bytes = 2 * 1024 * 1024;
+      if ((max_time = decoder->buffer_duration) == -1)
+        max_time = 2 * GST_SECOND;
+
+      g_object_set (decodebin, "max-size-bytes", max_bytes, "max-size-buffers",
+          (guint) 0, "max-size-time", max_time, NULL);
+    }
+  }
+
+  g_object_set_data (G_OBJECT (decodebin), "pending", GINT_TO_POINTER (1));
+  g_object_set (decodebin, "subtitle-encoding", decoder->encoding, NULL);
+  decoder->pending++;
+  GST_LOG_OBJECT (decoder, "have %d pending dynamic objects", decoder->pending);
+
+  gst_bin_add (GST_BIN_CAST (decoder), decodebin);
+
+  decoder->decodebins = g_slist_prepend (decoder->decodebins, decodebin);
+
+  return decodebin;
+
+  /* ERRORS */
+no_decodebin:
+  {
+    post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "decodebin");
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No decodebin element, check your installation"));
+    return NULL;
+  }
+no_typefind:
+  {
+    gst_object_unref (decodebin);
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No typefind element, decodebin is unusable, check your installation"));
+    return NULL;
+  }
+}
+
+/* signaled when we have a stream and we need to configure the download
+ * buffering or regular buffering */
+static void
+type_found (GstElement * typefind, guint probability,
+    GstCaps * caps, GstURIDecodeBin * decoder)
+{
+  GstElement *dec_elem, *queue;
+  GstStructure *s;
+  const gchar *media_type;
+
+  GST_DEBUG_OBJECT (decoder, "typefind found caps %" GST_PTR_FORMAT, caps);
+
+  s = gst_caps_get_structure (caps, 0);
+  media_type = gst_structure_get_name (s);
+
+  /* remember if we need download buffering */
+  decoder->is_download = IS_DOWNLOAD_MEDIA (media_type) && decoder->download;
+  /* only enable download buffering if the upstream duration is known */
+  if (decoder->is_download) {
+    gint64 dur;
+
+    decoder->is_download =
+        (gst_element_query_duration (typefind, GST_FORMAT_BYTES, &dur)
+        && dur != -1);
+  }
+
+  dec_elem = make_decoder (decoder);
+  if (!dec_elem)
+    goto no_decodebin;
+
+  queue = gst_element_factory_make ("queue2", NULL);
+  if (!queue)
+    goto no_queue2;
+
+  g_object_set (queue, "use-buffering", TRUE, NULL);
+  g_object_set (queue, "ring-buffer-max-size", decoder->ring_buffer_max_size,
+      NULL);
+
+  GST_DEBUG_OBJECT (decoder, "check media-type %s, %d", media_type,
+      decoder->download);
+
+  if (decoder->is_download) {
+    gchar *temp_template, *filename;
+    const gchar *tmp_dir, *prgname;
+
+    tmp_dir = g_get_tmp_dir ();
+    prgname = g_get_prgname ();
+    if (prgname == NULL)
+      prgname = "GStreamer";
+
+    filename = g_strdup_printf ("%s-XXXXXX", prgname);
+
+    /* build our filename */
+    temp_template = g_build_filename (tmp_dir, filename, NULL);
+
+    GST_DEBUG_OBJECT (decoder, "enable download buffering in %s (%s, %s, %s)",
+        temp_template, tmp_dir, prgname, filename);
+
+    /* configure progressive download for selected media types */
+    g_object_set (queue, "temp-template", temp_template, NULL);
+
+    g_free (filename);
+    g_free (temp_template);
+  }
+
+  /* Disable max-size-buffers */
+  g_object_set (queue, "max-size-buffers", 0, NULL);
+
+  /* If buffer size or duration are set, set them on the queue2 element */
+  if (decoder->buffer_size != -1)
+    g_object_set (queue, "max-size-bytes", decoder->buffer_size, NULL);
+  if (decoder->buffer_duration != -1)
+    g_object_set (queue, "max-size-time", decoder->buffer_duration, NULL);
+
+  gst_bin_add (GST_BIN_CAST (decoder), queue);
+
+  if (!gst_element_link_pads (typefind, "src", queue, "sink"))
+    goto could_not_link;
+
+  /* to force caps on the decodebin element and avoid reparsing stuff by
+   * typefind. It also avoids a deadlock in the way typefind activates pads in
+   * the state change */
+  g_object_set (dec_elem, "sink-caps", caps, NULL);
+
+  if (!gst_element_link_pads (queue, "src", dec_elem, "sink"))
+    goto could_not_link;
+
+  /* PLAYING in one go might fail (see bug #632782) */
+  gst_element_set_state (dec_elem, GST_STATE_PAUSED);
+  gst_element_set_state (dec_elem, GST_STATE_PLAYING);
+  gst_element_set_state (queue, GST_STATE_PLAYING);
+
+  do_async_done (decoder);
+
+  return;
+
+  /* ERRORS */
+no_decodebin:
+  {
+    /* error was posted */
+    return;
+  }
+could_not_link:
+  {
+    GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION,
+        (NULL), ("Can't link typefind to decodebin element"));
+    return;
+  }
+no_queue2:
+  {
+    post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "queue2");
+    return;
+  }
+}
+
+/* setup a streaming source. This will first plug a typefind element to the
+ * source. After we find the type, we decide to plug a queue2 and continue to
+ * plug a decodebin starting from the found caps */
+static gboolean
+setup_streaming (GstURIDecodeBin * decoder)
+{
+  GstElement *typefind;
+
+  /* now create the decoder element */
+  typefind = gst_element_factory_make ("typefind", NULL);
+  if (!typefind)
+    goto no_typefind;
+
+  gst_bin_add (GST_BIN_CAST (decoder), typefind);
+
+  if (!gst_element_link_pads (decoder->source, NULL, typefind, "sink"))
+    goto could_not_link;
+
+  decoder->typefind = typefind;
+
+  /* connect a signal to find out when the typefind element found
+   * a type */
+  decoder->have_type_id =
+      g_signal_connect (decoder->typefind, "have-type",
+      G_CALLBACK (type_found), decoder);
+
+  do_async_start (decoder);
+
+  return TRUE;
+
+  /* ERRORS */
+no_typefind:
+  {
+    post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "typefind");
+    GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+        ("No typefind element, check your installation"));
+    return FALSE;
+  }
+could_not_link:
+  {
+    GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION,
+        (NULL), ("Can't link source to typefind element"));
+    gst_bin_remove (GST_BIN_CAST (decoder), typefind);
+    /* Don't loose the SOURCE flag */
+    GST_OBJECT_FLAG_SET (decoder, GST_ELEMENT_IS_SOURCE);
+    return FALSE;
+  }
+}
+
+static void
+free_stream (gpointer value)
+{
+  g_slice_free (GstURIDecodeBinStream, value);
+}
+
+/* remove source and all related elements */
+static void
+remove_source (GstURIDecodeBin * bin)
+{
+  GstElement *source = bin->source;
+
+  if (source) {
+    GST_DEBUG_OBJECT (bin, "removing old src element");
+    gst_element_set_state (source, GST_STATE_NULL);
+
+    if (bin->src_np_sig_id) {
+      g_signal_handler_disconnect (source, bin->src_np_sig_id);
+      bin->src_np_sig_id = 0;
+    }
+    if (bin->src_nmp_sig_id) {
+      g_signal_handler_disconnect (source, bin->src_nmp_sig_id);
+      bin->src_nmp_sig_id = 0;
+    }
+    gst_bin_remove (GST_BIN_CAST (bin), source);
+    bin->source = NULL;
+  }
+  if (bin->queue) {
+    GST_DEBUG_OBJECT (bin, "removing old queue element");
+    gst_element_set_state (bin->queue, GST_STATE_NULL);
+    gst_bin_remove (GST_BIN_CAST (bin), bin->queue);
+    bin->queue = NULL;
+  }
+  if (bin->typefind) {
+    GST_DEBUG_OBJECT (bin, "removing old typefind element");
+    gst_element_set_state (bin->typefind, GST_STATE_NULL);
+    gst_bin_remove (GST_BIN_CAST (bin), bin->typefind);
+    bin->typefind = NULL;
+  }
+  if (bin->streams) {
+    g_hash_table_destroy (bin->streams);
+    bin->streams = NULL;
+  }
+  /* Don't loose the SOURCE flag */
+  GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_IS_SOURCE);
+}
+
+/* is called when a dynamic source element created a new pad. */
+static void
+source_new_pad (GstElement * element, GstPad * pad, GstURIDecodeBin * bin)
+{
+  GstElement *decoder;
+  gboolean is_raw;
+  GstCaps *rawcaps;
+
+  GST_URI_DECODE_BIN_LOCK (bin);
+  GST_DEBUG_OBJECT (bin, "Found new pad %s.%s in source element %s",
+      GST_DEBUG_PAD_NAME (pad), GST_ELEMENT_NAME (element));
+
+  g_object_get (bin, "caps", &rawcaps, NULL);
+  if (!rawcaps)
+    rawcaps = DEFAULT_CAPS;
+
+  /* if this is a pad with all raw caps, we can expose it */
+  if (has_all_raw_caps (pad, rawcaps, &is_raw) && is_raw) {
+    /* it's all raw, create output pads. */
+    GST_URI_DECODE_BIN_UNLOCK (bin);
+    gst_caps_unref (rawcaps);
+    expose_decoded_pad (element, pad, bin);
+    return;
+  }
+  gst_caps_unref (rawcaps);
+
+  /* not raw, create decoder */
+  decoder = make_decoder (bin);
+  if (!decoder)
+    goto no_decodebin;
+
+  /* and link to decoder */
+  if (!gst_element_link_pads (bin->source, NULL, decoder, "sink"))
+    goto could_not_link;
+
+  GST_DEBUG_OBJECT (bin, "linked decoder to new pad");
+
+  gst_element_set_state (decoder, GST_STATE_PLAYING);
+  GST_URI_DECODE_BIN_UNLOCK (bin);
+
+  return;
+
+  /* ERRORS */
+no_decodebin:
+  {
+    /* error was posted */
+    GST_URI_DECODE_BIN_UNLOCK (bin);
+    return;
+  }
+could_not_link:
+  {
+    GST_ELEMENT_ERROR (bin, CORE, NEGOTIATION,
+        (NULL), ("Can't link source to decoder element"));
+    GST_URI_DECODE_BIN_UNLOCK (bin);
+    return;
+  }
+}
+
+/* construct and run the source and decoder elements until we found
+ * all the streams or until a preroll queue has been filled.
+*/
+static gboolean
+setup_source (GstURIDecodeBin * decoder)
+{
+  gboolean is_raw, have_out, is_dynamic;
+
+  GST_DEBUG_OBJECT (decoder, "setup source");
+
+  /* delete old src */
+  remove_source (decoder);
+
+  decoder->pending = 0;
+
+  /* create and configure an element that can handle the uri */
+  if (!(decoder->source = gen_source_element (decoder)))
+    goto no_source;
+
+  /* state will be merged later - if file is not found, error will be
+   * handled by the application right after. */
+  gst_bin_add (GST_BIN_CAST (decoder), decoder->source);
+
+  /* notify of the new source used */
+  g_object_notify (G_OBJECT (decoder), "source");
+
+  g_signal_emit (decoder, gst_uri_decode_bin_signals[SIGNAL_SOURCE_SETUP],
+      0, decoder->source);
+
+  /* remove the old decoders now, if any */
+  remove_decoders (decoder, FALSE);
+
+  /* stream admin setup */
+  decoder->streams = g_hash_table_new_full (NULL, NULL, NULL, free_stream);
+
+  /* see if the source element emits raw audio/video all by itself,
+   * if so, we can create streams for the pads and be done with it.
+   * Also check that is has source pads, if not, we assume it will
+   * do everything itself.  */
+  if (!analyse_source (decoder, &is_raw, &have_out, &is_dynamic,
+          decoder->need_queue))
+    goto invalid_source;
+
+  if (is_raw) {
+    GST_DEBUG_OBJECT (decoder, "Source provides all raw data");
+    /* source provides raw data, we added the pads and we can now signal a
+     * no_more pads because we are done. */
+    gst_element_no_more_pads (GST_ELEMENT_CAST (decoder));
+    return TRUE;
+  }
+  if (!have_out && !is_dynamic) {
+    GST_DEBUG_OBJECT (decoder, "Source has no output pads");
+    /* create a stream to indicate that this uri is handled by a self
+     * contained element. We are now done. */
+    add_element_stream (decoder->source, decoder);
+    return TRUE;
+  }
+  if (is_dynamic) {
+    GST_DEBUG_OBJECT (decoder, "Source has dynamic output pads");
+    /* connect a handler for the new-pad signal */
+    decoder->src_np_sig_id =
+        g_signal_connect (decoder->source, "pad-added",
+        G_CALLBACK (source_new_pad), decoder);
+    decoder->src_nmp_sig_id =
+        g_signal_connect (decoder->source, "no-more-pads",
+        G_CALLBACK (source_no_more_pads), decoder);
+    g_object_set_data (G_OBJECT (decoder->source), "pending",
+        GINT_TO_POINTER (1));
+    decoder->pending++;
+  } else {
+    if (decoder->is_stream) {
+      GST_DEBUG_OBJECT (decoder, "Setting up streaming");
+      /* do the stream things here */
+      if (!setup_streaming (decoder))
+        goto streaming_failed;
+    } else {
+      GstElement *dec_elem;
+
+      /* no streaming source, we can link now */
+      GST_DEBUG_OBJECT (decoder, "Plugging decodebin to source");
+
+      dec_elem = make_decoder (decoder);
+      if (!dec_elem)
+        goto no_decoder;
+
+      if (!gst_element_link_pads (decoder->source, NULL, dec_elem, "sink"))
+        goto could_not_link;
+    }
+  }
+  return TRUE;
+
+  /* ERRORS */
+no_source:
+  {
+    /* error message was already posted */
+    return FALSE;
+  }
+invalid_source:
+  {
+    GST_ELEMENT_ERROR (decoder, CORE, FAILED,
+        (_("Source element is invalid.")), (NULL));
+    return FALSE;
+  }
+no_decoder:
+  {
+    /* message was posted */
+    return FALSE;
+  }
+streaming_failed:
+  {
+    /* message was posted */
+    return FALSE;
+  }
+could_not_link:
+  {
+    GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION,
+        (NULL), ("Can't link source to decoder element"));
+    return FALSE;
+  }
+}
+
+static void
+value_list_append_structure_list (GValue * list_val, GstStructure ** first,
+    GList * structure_list)
+{
+  GList *l;
+
+  for (l = structure_list; l != NULL; l = l->next) {
+    GValue val = { 0, };
+
+    if (*first == NULL)
+      *first = gst_structure_copy ((GstStructure *) l->data);
+
+    g_value_init (&val, GST_TYPE_STRUCTURE);
+    g_value_take_boxed (&val, gst_structure_copy ((GstStructure *) l->data));
+    gst_value_list_append_value (list_val, &val);
+    g_value_unset (&val);
+  }
+}
+
+/* if it's a redirect message with multiple redirect locations we might
+ * want to pick a different 'best' location depending on the required
+ * bitrates and the connection speed */
+static GstMessage *
+handle_redirect_message (GstURIDecodeBin * dec, GstMessage * msg)
+{
+  const GValue *locations_list, *location_val;
+  GstMessage *new_msg;
+  GstStructure *new_structure = NULL;
+  GList *l_good = NULL, *l_neutral = NULL, *l_bad = NULL;
+  GValue new_list = { 0, };
+  guint size, i;
+  const GstStructure *structure;
+
+  GST_DEBUG_OBJECT (dec, "redirect message: %" GST_PTR_FORMAT, msg);
+  GST_DEBUG_OBJECT (dec, "connection speed: %u", dec->connection_speed);
+
+  structure = gst_message_get_structure (msg);
+  if (dec->connection_speed == 0 || structure == NULL)
+    return msg;
+
+  locations_list = gst_structure_get_value (structure, "locations");
+  if (locations_list == NULL)
+    return msg;
+
+  size = gst_value_list_get_size (locations_list);
+  if (size < 2)
+    return msg;
+
+  /* maintain existing order as much as possible, just sort references
+   * with too high a bitrate to the end (the assumption being that if
+   * bitrates are given they are given for all interesting streams and
+   * that the you-need-at-least-version-xyz redirect has the same bitrate
+   * as the lowest referenced redirect alternative) */
+  for (i = 0; i < size; ++i) {
+    const GstStructure *s;
+    gint bitrate = 0;
+
+    location_val = gst_value_list_get_value (locations_list, i);
+    s = (const GstStructure *) g_value_get_boxed (location_val);
+    if (!gst_structure_get_int (s, "minimum-bitrate", &bitrate) || bitrate <= 0) {
+      GST_DEBUG_OBJECT (dec, "no bitrate: %" GST_PTR_FORMAT, s);
+      l_neutral = g_list_append (l_neutral, (gpointer) s);
+    } else if (bitrate > dec->connection_speed) {
+      GST_DEBUG_OBJECT (dec, "bitrate too high: %" GST_PTR_FORMAT, s);
+      l_bad = g_list_append (l_bad, (gpointer) s);
+    } else if (bitrate <= dec->connection_speed) {
+      GST_DEBUG_OBJECT (dec, "bitrate OK: %" GST_PTR_FORMAT, s);
+      l_good = g_list_append (l_good, (gpointer) s);
+    }
+  }
+
+  g_value_init (&new_list, GST_TYPE_LIST);
+  value_list_append_structure_list (&new_list, &new_structure, l_good);
+  value_list_append_structure_list (&new_list, &new_structure, l_neutral);
+  value_list_append_structure_list (&new_list, &new_structure, l_bad);
+  gst_structure_set_value (new_structure, "locations", &new_list);
+  g_value_unset (&new_list);
+
+  g_list_free (l_good);
+  g_list_free (l_neutral);
+  g_list_free (l_bad);
+
+  new_msg = gst_message_new_element (msg->src, new_structure);
+  gst_message_unref (msg);
+
+  GST_DEBUG_OBJECT (dec, "new redirect message: %" GST_PTR_FORMAT, new_msg);
+  return new_msg;
+}
+
+static void
+handle_message (GstBin * bin, GstMessage * msg)
+{
+  if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ELEMENT
+      && gst_message_has_name (msg, "redirect")) {
+    /* sort redirect messages based on the connection speed. This simplifies
+     * the user of this element as it can in most cases just pick the first item
+     * of the sorted list as a good redirection candidate. It can of course
+     * choose something else from the list if it has a better way. */
+    msg = handle_redirect_message (GST_URI_DECODE_BIN (bin), msg);
+  }
+  GST_BIN_CLASS (parent_class)->handle_message (bin, msg);
+}
+
+/* generic struct passed to all query fold methods
+ * FIXME, move to core.
+ */
+typedef struct
+{
+  GstQuery *query;
+  gint64 min;
+  gint64 max;
+  gboolean seekable;
+  gboolean live;
+} QueryFold;
+
+typedef void (*QueryInitFunction) (GstURIDecodeBin * dec, QueryFold * fold);
+typedef void (*QueryDoneFunction) (GstURIDecodeBin * dec, QueryFold * fold);
+
+/* for duration/position we collect all durations/positions and take
+ * the MAX of all valid results */
+static void
+decoder_query_init (GstURIDecodeBin * dec, QueryFold * fold)
+{
+  fold->min = 0;
+  fold->max = -1;
+  fold->seekable = TRUE;
+  fold->live = 0;
+}
+
+static gboolean
+decoder_query_duration_fold (const GValue * item, GValue * ret,
+    QueryFold * fold)
+{
+  GstPad *pad = g_value_get_object (item);
+
+  if (gst_pad_query (pad, fold->query)) {
+    gint64 duration;
+
+    g_value_set_boolean (ret, TRUE);
+
+    gst_query_parse_duration (fold->query, NULL, &duration);
+
+    GST_DEBUG_OBJECT (item, "got duration %" G_GINT64_FORMAT, duration);
+
+    if (duration > fold->max)
+      fold->max = duration;
+  }
+  return TRUE;
+}
+
+static void
+decoder_query_duration_done (GstURIDecodeBin * dec, QueryFold * fold)
+{
+  GstFormat format;
+
+  gst_query_parse_duration (fold->query, &format, NULL);
+  /* store max in query result */
+  gst_query_set_duration (fold->query, format, fold->max);
+
+  GST_DEBUG ("max duration %" G_GINT64_FORMAT, fold->max);
+}
+
+static gboolean
+decoder_query_position_fold (const GValue * item, GValue * ret,
+    QueryFold * fold)
+{
+  GstPad *pad = g_value_get_object (item);
+
+  if (gst_pad_query (pad, fold->query)) {
+    gint64 position;
+
+    g_value_set_boolean (ret, TRUE);
+
+    gst_query_parse_position (fold->query, NULL, &position);
+
+    GST_DEBUG_OBJECT (item, "got position %" G_GINT64_FORMAT, position);
+
+    if (position > fold->max)
+      fold->max = position;
+  }
+
+  return TRUE;
+}
+
+static void
+decoder_query_position_done (GstURIDecodeBin * dec, QueryFold * fold)
+{
+  GstFormat format;
+
+  gst_query_parse_position (fold->query, &format, NULL);
+  /* store max in query result */
+  gst_query_set_position (fold->query, format, fold->max);
+
+  GST_DEBUG_OBJECT (dec, "max position %" G_GINT64_FORMAT, fold->max);
+}
+
+static gboolean
+decoder_query_latency_fold (const GValue * item, GValue * ret, QueryFold * fold)
+{
+  GstPad *pad = g_value_get_object (item);
+
+  if (gst_pad_query (pad, fold->query)) {
+    GstClockTime min, max;
+    gboolean live;
+
+    g_value_set_boolean (ret, TRUE);
+
+    gst_query_parse_latency (fold->query, &live, &min, &max);
+
+    GST_DEBUG_OBJECT (item,
+        "got latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
+        ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live);
+
+    /* for the combined latency we collect the MAX of all min latencies and
+     * the MIN of all max latencies */
+    if (min > fold->min)
+      fold->min = min;
+    if (fold->max == -1)
+      fold->max = max;
+    else if (max < fold->max)
+      fold->max = max;
+    if (fold->live == FALSE)
+      fold->live = live;
+  }
+
+  return TRUE;
+}
+
+static void
+decoder_query_latency_done (GstURIDecodeBin * dec, QueryFold * fold)
+{
+  /* store max in query result */
+  gst_query_set_latency (fold->query, fold->live, fold->min, fold->max);
+
+  GST_DEBUG_OBJECT (dec,
+      "latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
+      ", live %d", GST_TIME_ARGS (fold->min), GST_TIME_ARGS (fold->max),
+      fold->live);
+}
+
+/* we are seekable if all srcpads are seekable */
+static gboolean
+decoder_query_seeking_fold (const GValue * item, GValue * ret, QueryFold * fold)
+{
+  GstPad *pad = g_value_get_object (item);
+
+  if (gst_pad_query (pad, fold->query)) {
+    gboolean seekable;
+
+    g_value_set_boolean (ret, TRUE);
+    gst_query_parse_seeking (fold->query, NULL, &seekable, NULL, NULL);
+
+    GST_DEBUG_OBJECT (item, "got seekable %d", seekable);
+
+    if (fold->seekable == TRUE)
+      fold->seekable = seekable;
+  }
+
+  return TRUE;
+}
+
+static void
+decoder_query_seeking_done (GstURIDecodeBin * dec, QueryFold * fold)
+{
+  GstFormat format;
+
+  gst_query_parse_seeking (fold->query, &format, NULL, NULL, NULL);
+  gst_query_set_seeking (fold->query, format, fold->seekable, 0, -1);
+
+  GST_DEBUG_OBJECT (dec, "seekable %d", fold->seekable);
+}
+
+/* generic fold, return first valid result */
+static gboolean
+decoder_query_generic_fold (const GValue * item, GValue * ret, QueryFold * fold)
+{
+  GstPad *pad = g_value_get_object (item);
+  gboolean res;
+
+  if ((res = gst_pad_query (pad, fold->query))) {
+    g_value_set_boolean (ret, TRUE);
+    GST_DEBUG_OBJECT (item, "answered query %p", fold->query);
+  }
+
+  /* and stop as soon as we have a valid result */
+  return !res;
+}
+
+
+/* we're a bin, the default query handler iterates sink elements, which we don't
+ * have normally. We should just query all source pads.
+ */
+static gboolean
+gst_uri_decode_bin_query (GstElement * element, GstQuery * query)
+{
+  GstURIDecodeBin *decoder;
+  gboolean res = FALSE;
+  GstIterator *iter;
+  GstIteratorFoldFunction fold_func;
+  QueryInitFunction fold_init = NULL;
+  QueryDoneFunction fold_done = NULL;
+  QueryFold fold_data;
+  GValue ret = { 0 };
+
+  decoder = GST_URI_DECODE_BIN (element);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:
+      /* iterate and collect durations */
+      fold_func = (GstIteratorFoldFunction) decoder_query_duration_fold;
+      fold_init = decoder_query_init;
+      fold_done = decoder_query_duration_done;
+      break;
+    case GST_QUERY_POSITION:
+      /* iterate and collect durations */
+      fold_func = (GstIteratorFoldFunction) decoder_query_position_fold;
+      fold_init = decoder_query_init;
+      fold_done = decoder_query_position_done;
+      break;
+    case GST_QUERY_LATENCY:
+      /* iterate and collect durations */
+      fold_func = (GstIteratorFoldFunction) decoder_query_latency_fold;
+      fold_init = decoder_query_init;
+      fold_done = decoder_query_latency_done;
+      break;
+    case GST_QUERY_SEEKING:
+      /* iterate and collect durations */
+      fold_func = (GstIteratorFoldFunction) decoder_query_seeking_fold;
+      fold_init = decoder_query_init;
+      fold_done = decoder_query_seeking_done;
+      break;
+    default:
+      fold_func = (GstIteratorFoldFunction) decoder_query_generic_fold;
+      break;
+  }
+
+  fold_data.query = query;
+
+  g_value_init (&ret, G_TYPE_BOOLEAN);
+  g_value_set_boolean (&ret, FALSE);
+
+  iter = gst_element_iterate_src_pads (element);
+  GST_DEBUG_OBJECT (element, "Sending query %p (type %d) to src pads",
+      query, GST_QUERY_TYPE (query));
+
+  if (fold_init)
+    fold_init (decoder, &fold_data);
+
+  while (TRUE) {
+    GstIteratorResult ires;
+
+    ires = gst_iterator_fold (iter, fold_func, &ret, &fold_data);
+
+    switch (ires) {
+      case GST_ITERATOR_RESYNC:
+        gst_iterator_resync (iter);
+        if (fold_init)
+          fold_init (decoder, &fold_data);
+        g_value_set_boolean (&ret, FALSE);
+        break;
+      case GST_ITERATOR_OK:
+      case GST_ITERATOR_DONE:
+        res = g_value_get_boolean (&ret);
+        if (fold_done != NULL && res)
+          fold_done (decoder, &fold_data);
+        goto done;
+      default:
+        res = FALSE;
+        goto done;
+    }
+  }
+done:
+  gst_iterator_free (iter);
+
+  return res;
+}
+
+static GstStateChangeReturn
+gst_uri_decode_bin_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+  GstURIDecodeBin *decoder;
+
+  decoder = GST_URI_DECODE_BIN (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      if (!setup_source (decoder))
+        goto source_failed;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      GST_DEBUG ("ready to paused");
+      if (ret == GST_STATE_CHANGE_FAILURE)
+        goto setup_failed;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_DEBUG ("paused to ready");
+      remove_decoders (decoder, FALSE);
+      remove_source (decoder);
+      do_async_done (decoder);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      GST_DEBUG ("ready to null");
+      remove_decoders (decoder, TRUE);
+      remove_source (decoder);
+      break;
+    default:
+      break;
+  }
+  return ret;
+
+  /* ERRORS */
+source_failed:
+  {
+    return GST_STATE_CHANGE_FAILURE;
+  }
+setup_failed:
+  {
+    /* clean up leftover groups */
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
+
+gboolean
+gst_uri_decode_bin_plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gst_uri_decode_bin_debug, "uridecodebin", 0,
+      "URI decoder element");
+
+  return gst_element_register (plugin, "uridecodebin", GST_RANK_NONE,
+      GST_TYPE_URI_DECODE_BIN);
+}
diff --git a/gst/subparse/Makefile.am b/gst/subparse/Makefile.am
new file mode 100644
index 0000000..4a33bd4
--- /dev/null
+++ b/gst/subparse/Makefile.am
@@ -0,0 +1,33 @@
+plugin_LTLIBRARIES = libgstsubparse.la
+
+if USE_XML
+SAMIPARSE_SOURCES = samiparse.c samiparse.h
+else
+SAMIPARSE_SOURCES = 
+endif
+
+libgstsubparse_la_SOURCES = \
+	gstssaparse.c \
+	gstssaparse.h \
+	gstsubparse.c \
+	gstsubparse.h \
+	$(SAMIPARSE_SOURCES) \
+	tmplayerparse.c \
+	tmplayerparse.h \
+	mpl2parse.c \
+	mpl2parse.h \
+        qttextparse.c \
+        qttextparse.h
+
+libgstsubparse_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstsubparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstsubparse_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstsubparse_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	gstssaparse.h \
+	gstsubparse.h \
+	samiparse.h \
+	tmplayerparse.h \
+	mpl2parse.h \
+        qttextparse.h
diff --git a/gst/subparse/Makefile.in b/gst/subparse/Makefile.in
new file mode 100644
index 0000000..6b95299
--- /dev/null
+++ b/gst/subparse/Makefile.in
@@ -0,0 +1,830 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/subparse
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstsubparse_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am__libgstsubparse_la_SOURCES_DIST = gstssaparse.c gstssaparse.h \
+	gstsubparse.c gstsubparse.h samiparse.c samiparse.h \
+	tmplayerparse.c tmplayerparse.h mpl2parse.c mpl2parse.h \
+	qttextparse.c qttextparse.h
+@USE_XML_TRUE@am__objects_1 = libgstsubparse_la-samiparse.lo
+am_libgstsubparse_la_OBJECTS = libgstsubparse_la-gstssaparse.lo \
+	libgstsubparse_la-gstsubparse.lo $(am__objects_1) \
+	libgstsubparse_la-tmplayerparse.lo \
+	libgstsubparse_la-mpl2parse.lo \
+	libgstsubparse_la-qttextparse.lo
+libgstsubparse_la_OBJECTS = $(am_libgstsubparse_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstsubparse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstsubparse_la_CFLAGS) $(CFLAGS) \
+	$(libgstsubparse_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstsubparse_la_SOURCES)
+DIST_SOURCES = $(am__libgstsubparse_la_SOURCES_DIST)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstsubparse.la
+@USE_XML_FALSE@SAMIPARSE_SOURCES = 
+@USE_XML_TRUE@SAMIPARSE_SOURCES = samiparse.c samiparse.h
+libgstsubparse_la_SOURCES = \
+	gstssaparse.c \
+	gstssaparse.h \
+	gstsubparse.c \
+	gstsubparse.h \
+	$(SAMIPARSE_SOURCES) \
+	tmplayerparse.c \
+	tmplayerparse.h \
+	mpl2parse.c \
+	mpl2parse.h \
+        qttextparse.c \
+        qttextparse.h
+
+libgstsubparse_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstsubparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstsubparse_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstsubparse_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstssaparse.h \
+	gstsubparse.h \
+	samiparse.h \
+	tmplayerparse.h \
+	mpl2parse.h \
+        qttextparse.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/subparse/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/subparse/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstsubparse.la: $(libgstsubparse_la_OBJECTS) $(libgstsubparse_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstsubparse_la_LINK) -rpath $(plugindir) $(libgstsubparse_la_OBJECTS) $(libgstsubparse_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-gstssaparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-gstsubparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-mpl2parse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-qttextparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-samiparse.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsubparse_la-tmplayerparse.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstsubparse_la-gstssaparse.lo: gstssaparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-gstssaparse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-gstssaparse.Tpo -c -o libgstsubparse_la-gstssaparse.lo `test -f 'gstssaparse.c' || echo '$(srcdir)/'`gstssaparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-gstssaparse.Tpo $(DEPDIR)/libgstsubparse_la-gstssaparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstssaparse.c' object='libgstsubparse_la-gstssaparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-gstssaparse.lo `test -f 'gstssaparse.c' || echo '$(srcdir)/'`gstssaparse.c
+
+libgstsubparse_la-gstsubparse.lo: gstsubparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-gstsubparse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-gstsubparse.Tpo -c -o libgstsubparse_la-gstsubparse.lo `test -f 'gstsubparse.c' || echo '$(srcdir)/'`gstsubparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-gstsubparse.Tpo $(DEPDIR)/libgstsubparse_la-gstsubparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstsubparse.c' object='libgstsubparse_la-gstsubparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-gstsubparse.lo `test -f 'gstsubparse.c' || echo '$(srcdir)/'`gstsubparse.c
+
+libgstsubparse_la-samiparse.lo: samiparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-samiparse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-samiparse.Tpo -c -o libgstsubparse_la-samiparse.lo `test -f 'samiparse.c' || echo '$(srcdir)/'`samiparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-samiparse.Tpo $(DEPDIR)/libgstsubparse_la-samiparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='samiparse.c' object='libgstsubparse_la-samiparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-samiparse.lo `test -f 'samiparse.c' || echo '$(srcdir)/'`samiparse.c
+
+libgstsubparse_la-tmplayerparse.lo: tmplayerparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-tmplayerparse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-tmplayerparse.Tpo -c -o libgstsubparse_la-tmplayerparse.lo `test -f 'tmplayerparse.c' || echo '$(srcdir)/'`tmplayerparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-tmplayerparse.Tpo $(DEPDIR)/libgstsubparse_la-tmplayerparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmplayerparse.c' object='libgstsubparse_la-tmplayerparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-tmplayerparse.lo `test -f 'tmplayerparse.c' || echo '$(srcdir)/'`tmplayerparse.c
+
+libgstsubparse_la-mpl2parse.lo: mpl2parse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-mpl2parse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-mpl2parse.Tpo -c -o libgstsubparse_la-mpl2parse.lo `test -f 'mpl2parse.c' || echo '$(srcdir)/'`mpl2parse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-mpl2parse.Tpo $(DEPDIR)/libgstsubparse_la-mpl2parse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mpl2parse.c' object='libgstsubparse_la-mpl2parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-mpl2parse.lo `test -f 'mpl2parse.c' || echo '$(srcdir)/'`mpl2parse.c
+
+libgstsubparse_la-qttextparse.lo: qttextparse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -MT libgstsubparse_la-qttextparse.lo -MD -MP -MF $(DEPDIR)/libgstsubparse_la-qttextparse.Tpo -c -o libgstsubparse_la-qttextparse.lo `test -f 'qttextparse.c' || echo '$(srcdir)/'`qttextparse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstsubparse_la-qttextparse.Tpo $(DEPDIR)/libgstsubparse_la-qttextparse.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='qttextparse.c' object='libgstsubparse_la-qttextparse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsubparse_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsubparse_la_CFLAGS) $(CFLAGS) -c -o libgstsubparse_la-qttextparse.lo `test -f 'qttextparse.c' || echo '$(srcdir)/'`qttextparse.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c
new file mode 100644
index 0000000..dc75364
--- /dev/null
+++ b/gst/subparse/gstssaparse.c
@@ -0,0 +1,401 @@
+/* GStreamer SSA subtitle parser
+ * Copyright (c) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* Super-primitive SSA parser - we just want the text and ignore
+ * everything else like styles and timing codes etc. for now */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>             /* atoi() */
+#include <string.h>
+
+#include "gstssaparse.h"
+
+GST_DEBUG_CATEGORY_STATIC (ssa_parse_debug);
+#define GST_CAT_DEFAULT ssa_parse_debug
+
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-ssa; application/x-ass")
+    );
+
+static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("text/x-pango-markup")
+    );
+
+#define gst_ssa_parse_parent_class parent_class
+G_DEFINE_TYPE (GstSsaParse, gst_ssa_parse, GST_TYPE_ELEMENT);
+
+static GstStateChangeReturn gst_ssa_parse_change_state (GstElement *
+    element, GstStateChange transition);
+static gboolean gst_ssa_parse_setcaps (GstPad * sinkpad, GstCaps * caps);
+static gboolean gst_ssa_parse_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_ssa_parse_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_ssa_parse_chain (GstPad * sinkpad, GstBuffer * buf);
+
+static void
+gst_ssa_parse_dispose (GObject * object)
+{
+  GstSsaParse *parse = GST_SSA_PARSE (object);
+
+  g_free (parse->ini);
+  parse->ini = NULL;
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
+}
+
+static void
+gst_ssa_parse_init (GstSsaParse * parse)
+{
+  parse->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
+  gst_pad_set_chain_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ssa_parse_chain));
+  gst_pad_set_event_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_ssa_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+
+  parse->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
+  gst_pad_set_event_function (parse->srcpad,
+      GST_DEBUG_FUNCPTR (gst_ssa_parse_src_event));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
+  gst_pad_use_fixed_caps (parse->srcpad);
+  gst_pad_set_caps (parse->srcpad,
+      gst_static_pad_template_get_caps (&src_templ));
+
+  parse->ini = NULL;
+  parse->framed = FALSE;
+  parse->send_tags = FALSE;
+}
+
+static void
+gst_ssa_parse_class_init (GstSsaParseClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  object_class->dispose = gst_ssa_parse_dispose;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_templ));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_templ));
+  gst_element_class_set_details_simple (element_class,
+      "SSA Subtitle Parser", "Codec/Parser/Subtitle",
+      "Parses SSA subtitle streams",
+      "Tim-Philipp Müller <tim centricular net>");
+
+  GST_DEBUG_CATEGORY_INIT (ssa_parse_debug, "ssaparse", 0,
+      "SSA subtitle parser");
+
+  element_class->change_state = GST_DEBUG_FUNCPTR (gst_ssa_parse_change_state);
+}
+
+static gboolean
+gst_ssa_parse_src_event (GstPad * pad, GstEvent * event)
+{
+  return gst_pad_event_default (pad, event);
+}
+
+static gboolean
+gst_ssa_parse_sink_event (GstPad * pad, GstEvent * event)
+{
+  gboolean res;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_ssa_parse_setcaps (pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    default:
+      res = gst_pad_event_default (pad, event);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_ssa_parse_setcaps (GstPad * sinkpad, GstCaps * caps)
+{
+  GstSsaParse *parse = GST_SSA_PARSE (GST_PAD_PARENT (sinkpad));
+  const GValue *val;
+  GstStructure *s;
+  const guchar bom_utf8[] = { 0xEF, 0xBB, 0xBF };
+  GstBuffer *priv;
+  gchar *data, *ptr;
+  gsize size, left;
+
+  s = gst_caps_get_structure (caps, 0);
+  val = gst_structure_get_value (s, "codec_data");
+  if (val == NULL) {
+    parse->framed = FALSE;
+    GST_ERROR ("Only SSA subtitles embedded in containers are supported");
+    return FALSE;
+  }
+
+  parse->framed = TRUE;
+  parse->send_tags = TRUE;
+
+  priv = (GstBuffer *) g_value_get_boxed (val);
+  g_return_val_if_fail (priv != NULL, FALSE);
+
+  gst_buffer_ref (priv);
+
+  data = gst_buffer_map (priv, &size, NULL, GST_MAP_READ);
+
+  ptr = data;
+  left = size;
+
+  /* skip UTF-8 BOM */
+  if (left >= 3 && memcmp (ptr, bom_utf8, 3) == 0) {
+    ptr += 3;
+    left -= 3;
+  }
+
+  if (!strstr (data, "[Script Info]")) {
+    GST_WARNING_OBJECT (parse, "Invalid Init section - no Script Info header");
+    gst_buffer_unref (priv);
+    return FALSE;
+  }
+
+  if (!g_utf8_validate (ptr, left, NULL)) {
+    GST_WARNING_OBJECT (parse, "Init section is not valid UTF-8");
+    gst_buffer_unref (priv);
+    return FALSE;
+  }
+
+  /* FIXME: parse initial section */
+  parse->ini = g_strndup (ptr, left);
+  GST_LOG_OBJECT (parse, "Init section:\n%s", parse->ini);
+
+  gst_buffer_unmap (priv, data, size);
+  gst_buffer_unref (priv);
+
+  return TRUE;
+}
+
+static gboolean
+gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
+{
+  gchar *t, *end;
+  gboolean removed_any = FALSE;
+
+  while ((t = strchr (txt, '{'))) {
+    end = strchr (txt, '}');
+    if (end == NULL) {
+      GST_WARNING_OBJECT (parse, "Missing { for style override code");
+      return removed_any;
+    }
+    /* move terminating NUL character forward as well */
+    g_memmove (t, end + 1, strlen (end + 1) + 1);
+    removed_any = TRUE;
+  }
+
+  /* these may occur outside of curly brackets. We don't handle the different
+   * wrapping modes yet, so just remove these markers from the text for now */
+  while ((t = strstr (txt, "\\n"))) {
+    t[0] = ' ';
+    t[1] = '\n';
+  }
+  while ((t = strstr (txt, "\\N"))) {
+    t[0] = ' ';
+    t[1] = '\n';
+  }
+  while ((t = strstr (txt, "\\h"))) {
+    t[0] = ' ';
+    t[1] = ' ';
+  }
+
+  return removed_any;
+}
+
+/**
+ * gst_ssa_parse_push_line:
+ * @parse: caller element
+ * @txt: text to push
+ * @start: timestamp for the buffer
+ * @duration: duration for the buffer
+ *
+ * Parse the text in a buffer with the given properties and
+ * push it to the srcpad of the @parse element
+ *
+ * Returns: result of the push of the created buffer
+ */
+static GstFlowReturn
+gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
+    GstClockTime start, GstClockTime duration)
+{
+  GstFlowReturn ret;
+  GstBuffer *buf;
+  gchar *t, *escaped;
+  gint num, i, len;
+
+  num = atoi (txt);
+  GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
+      num, GST_TIME_ARGS (start));
+
+  /* skip all non-text fields before the actual text */
+  t = txt;
+  for (i = 0; i < 8; ++i) {
+    t = strchr (t, ',');
+    if (t == NULL)
+      return GST_FLOW_ERROR;
+    ++t;
+  }
+
+  GST_LOG_OBJECT (parse, "Text : %s", t);
+
+  if (gst_ssa_parse_remove_override_codes (parse, t)) {
+    GST_LOG_OBJECT (parse, "Clean: %s", t);
+  }
+
+  /* we claim to output pango markup, so we must escape the
+   * text even if we don't actually use any pango markup yet */
+  escaped = g_markup_printf_escaped ("%s", t);
+
+  len = strlen (escaped);
+
+  /* allocate enough for a terminating NUL, but don't include it in buf size */
+  buf = gst_buffer_new_and_alloc (len + 1);
+  gst_buffer_fill (buf, 0, escaped, len + 1);
+  gst_buffer_set_size (buf, len);
+  g_free (escaped);
+
+  GST_BUFFER_TIMESTAMP (buf) = start;
+  GST_BUFFER_DURATION (buf) = duration;
+
+  GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT
+      " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
+      GST_TIME_ARGS (duration));
+
+  ret = gst_pad_push (parse->srcpad, buf);
+
+  if (ret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (parse, "Push of text '%s' returned flow %s", txt,
+        gst_flow_get_name (ret));
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_ssa_parse_chain (GstPad * sinkpad, GstBuffer * buf)
+{
+  GstFlowReturn ret;
+  GstSsaParse *parse = GST_SSA_PARSE (GST_PAD_PARENT (sinkpad));
+  GstClockTime ts;
+  gchar *txt;
+  gchar *data;
+  gsize size;
+
+  if (G_UNLIKELY (!parse->framed))
+    goto not_framed;
+
+  if (G_UNLIKELY (parse->send_tags)) {
+    GstTagList *tags;
+
+    tags = gst_tag_list_new ();
+    gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_SUBTITLE_CODEC,
+        "SubStation Alpha", NULL);
+    gst_element_found_tags_for_pad (GST_ELEMENT (parse), parse->srcpad, tags);
+    parse->send_tags = FALSE;
+  }
+
+  /* make double-sure it's 0-terminated and all */
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  txt = g_strndup (data, size);
+  gst_buffer_unmap (buf, data, size);
+
+  if (txt == NULL)
+    goto empty_text;
+
+  ts = GST_BUFFER_TIMESTAMP (buf);
+  ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf));
+
+  if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) {
+    GstSegment segment;
+
+    /* just advance time without sending anything */
+    gst_segment_init (&segment, GST_FORMAT_TIME);
+    segment.start = ts;
+    segment.time = ts;
+    gst_pad_push_event (parse->srcpad, gst_event_new_segment (&segment));
+    ret = GST_FLOW_OK;
+  }
+
+  gst_buffer_unref (buf);
+  g_free (txt);
+
+  return ret;
+
+/* ERRORS */
+not_framed:
+  {
+    GST_ELEMENT_ERROR (parse, STREAM, FORMAT, (NULL),
+        ("Only SSA subtitles embedded in containers are supported"));
+    gst_buffer_unref (buf);
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+empty_text:
+  {
+    GST_ELEMENT_WARNING (parse, STREAM, FORMAT, (NULL),
+        ("Received empty subtitle"));
+    gst_buffer_unref (buf);
+    return GST_FLOW_OK;
+  }
+}
+
+static GstStateChangeReturn
+gst_ssa_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstSsaParse *parse = GST_SSA_PARSE (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      g_free (parse->ini);
+      parse->ini = NULL;
+      parse->framed = FALSE;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/gst/subparse/gstssaparse.h b/gst/subparse/gstssaparse.h
new file mode 100644
index 0000000..518c3cd
--- /dev/null
+++ b/gst/subparse/gstssaparse.h
@@ -0,0 +1,57 @@
+/* GStreamer SSA subtitle parser
+ * Copyright (c) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_SSA_PARSE_H__
+#define __GST_SSA_PARSE_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SSA_PARSE            (gst_ssa_parse_get_type ())
+#define GST_SSA_PARSE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SSA_PARSE, GstSsaParse))
+#define GST_SSA_PARSE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SSA_PARSE, GstSsaParseClass))
+#define GST_IS_SSA_PARSE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SSA_PARSE))
+#define GST_IS_SSA_PARSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SSA_PARSE))
+
+typedef struct _GstSsaParse GstSsaParse;
+typedef struct _GstSsaParseClass GstSsaParseClass;
+
+struct _GstSsaParse {
+  GstElement element;
+
+  GstPad         *sinkpad;
+  GstPad         *srcpad;
+
+  gboolean        framed;
+  gboolean        send_tags;
+
+  gchar          *ini;
+};
+
+struct _GstSsaParseClass {
+  GstElementClass   parent_class;
+};
+
+GType gst_ssa_parse_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_SSA_PARSE_H__ */
+
diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
new file mode 100644
index 0000000..2a12d96
--- /dev/null
+++ b/gst/subparse/gstsubparse.c
@@ -0,0 +1,1833 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2004 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <glib.h>
+
+#include "gstsubparse.h"
+#include "gstssaparse.h"
+#include "samiparse.h"
+#include "tmplayerparse.h"
+#include "mpl2parse.h"
+#include "qttextparse.h"
+
+GST_DEBUG_CATEGORY (sub_parse_debug);
+
+#define DEFAULT_ENCODING   NULL
+
+enum
+{
+  PROP_0,
+  PROP_ENCODING,
+  PROP_VIDEOFPS
+};
+
+static void
+gst_sub_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void
+gst_sub_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+
+#ifndef GST_DISABLE_XML
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-subtitle; application/x-subtitle-sami; "
+        "application/x-subtitle-tmplayer; application/x-subtitle-mpl2; "
+        "application/x-subtitle-dks; application/x-subtitle-qttext")
+    );
+#else
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-subtitle; application/x-subtitle-dks; "
+        "application/x-subtitle-tmplayer; application/x-subtitle-mpl2; "
+        "application/x-subtitle-qttext")
+    );
+#endif
+
+static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("text/plain; text/x-pango-markup")
+    );
+
+
+static gboolean gst_sub_parse_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_sub_parse_src_query (GstPad * pad, GstQuery * query);
+static gboolean gst_sub_parse_sink_event (GstPad * pad, GstEvent * event);
+
+static GstStateChangeReturn gst_sub_parse_change_state (GstElement * element,
+    GstStateChange transition);
+
+static GstFlowReturn gst_sub_parse_chain (GstPad * sinkpad, GstBuffer * buf);
+
+#define gst_sub_parse_parent_class parent_class
+G_DEFINE_TYPE (GstSubParse, gst_sub_parse, GST_TYPE_ELEMENT);
+
+static void
+gst_sub_parse_dispose (GObject * object)
+{
+  GstSubParse *subparse = GST_SUBPARSE (object);
+
+  GST_DEBUG_OBJECT (subparse, "cleaning up subtitle parser");
+
+  switch (subparse->parser_type) {
+    case GST_SUB_PARSE_FORMAT_QTTEXT:
+      qttext_context_deinit (&subparse->state);
+      break;
+#ifndef GST_DISABLE_XML
+    case GST_SUB_PARSE_FORMAT_SAMI:
+      sami_context_deinit (&subparse->state);
+      break;
+#endif
+    default:
+      break;
+  }
+
+  if (subparse->encoding) {
+    g_free (subparse->encoding);
+    subparse->encoding = NULL;
+  }
+
+  if (subparse->detected_encoding) {
+    g_free (subparse->detected_encoding);
+    subparse->detected_encoding = NULL;
+  }
+
+  if (subparse->adapter) {
+    g_object_unref (subparse->adapter);
+    subparse->adapter = NULL;
+  }
+
+  if (subparse->textbuf) {
+    g_string_free (subparse->textbuf, TRUE);
+    subparse->textbuf = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
+}
+
+static void
+gst_sub_parse_class_init (GstSubParseClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  object_class->dispose = gst_sub_parse_dispose;
+  object_class->set_property = gst_sub_parse_set_property;
+  object_class->get_property = gst_sub_parse_get_property;
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_templ));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_templ));
+  gst_element_class_set_details_simple (element_class,
+      "Subtitle parser", "Codec/Parser/Subtitle",
+      "Parses subtitle (.sub) files into text streams",
+      "Gustavo J. A. M. Carneiro <gjc@inescporto.pt>, "
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  element_class->change_state = gst_sub_parse_change_state;
+
+  g_object_class_install_property (object_class, PROP_ENCODING,
+      g_param_spec_string ("subtitle-encoding", "subtitle charset encoding",
+          "Encoding to assume if input subtitles are not in UTF-8 or any other "
+          "Unicode encoding. If not set, the GST_SUBTITLE_ENCODING environment "
+          "variable will be checked for an encoding to use. If that is not set "
+          "either, ISO-8859-15 will be assumed.", DEFAULT_ENCODING,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (object_class, PROP_VIDEOFPS,
+      gst_param_spec_fraction ("video-fps", "Video framerate",
+          "Framerate of the video stream. This is needed by some subtitle "
+          "formats to synchronize subtitles and video properly. If not set "
+          "and the subtitle format requires it subtitles may be out of sync.",
+          0, 1, G_MAXINT, 1, 24000, 1001,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_sub_parse_init (GstSubParse * subparse)
+{
+  subparse->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
+  gst_pad_set_chain_function (subparse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_sub_parse_chain));
+  gst_pad_set_event_function (subparse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_sub_parse_sink_event));
+  gst_element_add_pad (GST_ELEMENT (subparse), subparse->sinkpad);
+
+  subparse->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
+  gst_pad_set_event_function (subparse->srcpad,
+      GST_DEBUG_FUNCPTR (gst_sub_parse_src_event));
+  gst_pad_set_query_function (subparse->srcpad,
+      GST_DEBUG_FUNCPTR (gst_sub_parse_src_query));
+  gst_element_add_pad (GST_ELEMENT (subparse), subparse->srcpad);
+
+  subparse->textbuf = g_string_new (NULL);
+  subparse->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN;
+  subparse->flushing = FALSE;
+  gst_segment_init (&subparse->segment, GST_FORMAT_TIME);
+  subparse->need_segment = TRUE;
+  subparse->encoding = g_strdup (DEFAULT_ENCODING);
+  subparse->detected_encoding = NULL;
+  subparse->adapter = gst_adapter_new ();
+
+  subparse->fps_n = 24000;
+  subparse->fps_d = 1001;
+}
+
+/*
+ * Source pad functions.
+ */
+
+static gboolean
+gst_sub_parse_src_query (GstPad * pad, GstQuery * query)
+{
+  GstSubParse *self = GST_SUBPARSE (gst_pad_get_parent (pad));
+  gboolean ret = FALSE;
+
+  GST_DEBUG ("Handling %s query", GST_QUERY_TYPE_NAME (query));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:{
+      GstFormat fmt;
+
+      gst_query_parse_position (query, &fmt, NULL);
+      if (fmt != GST_FORMAT_TIME) {
+        ret = gst_pad_peer_query (self->sinkpad, query);
+      } else {
+        ret = TRUE;
+        gst_query_set_position (query, GST_FORMAT_TIME, self->segment.position);
+      }
+      break;
+    }
+    case GST_QUERY_SEEKING:
+    {
+      GstFormat fmt;
+      gboolean seekable = FALSE;
+
+      ret = TRUE;
+
+      gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+      if (fmt == GST_FORMAT_TIME) {
+        GstQuery *peerquery = gst_query_new_seeking (GST_FORMAT_BYTES);
+
+        seekable = gst_pad_peer_query (self->sinkpad, peerquery);
+        if (seekable)
+          gst_query_parse_seeking (peerquery, NULL, &seekable, NULL, NULL);
+        gst_query_unref (peerquery);
+      }
+
+      gst_query_set_seeking (query, fmt, seekable, seekable ? 0 : -1, -1);
+      break;
+    }
+    default:
+      ret = gst_pad_peer_query (self->sinkpad, query);
+      break;
+  }
+
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static gboolean
+gst_sub_parse_src_event (GstPad * pad, GstEvent * event)
+{
+  GstSubParse *self = GST_SUBPARSE (gst_pad_get_parent (pad));
+  gboolean ret = FALSE;
+
+  GST_DEBUG ("Handling %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstFormat format;
+      GstSeekFlags flags;
+      GstSeekType start_type, stop_type;
+      gint64 start, stop;
+      gdouble rate;
+      gboolean update;
+
+      gst_event_parse_seek (event, &rate, &format, &flags,
+          &start_type, &start, &stop_type, &stop);
+
+      if (format != GST_FORMAT_TIME) {
+        GST_WARNING_OBJECT (self, "we only support seeking in TIME format");
+        gst_event_unref (event);
+        goto beach;
+      }
+
+      /* Convert that seek to a seeking in bytes at position 0,
+         FIXME: could use an index */
+      ret = gst_pad_push_event (self->sinkpad,
+          gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+              GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, 0));
+
+      if (ret) {
+        /* Apply the seek to our segment */
+        gst_segment_do_seek (&self->segment, rate, format, flags,
+            start_type, start, stop_type, stop, &update);
+
+        GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT,
+            &self->segment);
+
+        self->next_offset = 0;
+
+        self->need_segment = TRUE;
+      } else {
+        GST_WARNING_OBJECT (self, "seek to 0 bytes failed");
+      }
+
+      gst_event_unref (event);
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+beach:
+  gst_object_unref (self);
+
+  return ret;
+}
+
+static void
+gst_sub_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstSubParse *subparse = GST_SUBPARSE (object);
+
+  GST_OBJECT_LOCK (subparse);
+  switch (prop_id) {
+    case PROP_ENCODING:
+      g_free (subparse->encoding);
+      subparse->encoding = g_value_dup_string (value);
+      GST_LOG_OBJECT (object, "subtitle encoding set to %s",
+          GST_STR_NULL (subparse->encoding));
+      break;
+    case PROP_VIDEOFPS:
+    {
+      subparse->fps_n = gst_value_get_fraction_numerator (value);
+      subparse->fps_d = gst_value_get_fraction_denominator (value);
+      GST_DEBUG_OBJECT (object, "video framerate set to %d/%d", subparse->fps_n,
+          subparse->fps_d);
+
+      if (!subparse->state.have_internal_fps) {
+        subparse->state.fps_n = subparse->fps_n;
+        subparse->state.fps_d = subparse->fps_d;
+      }
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (subparse);
+}
+
+static void
+gst_sub_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstSubParse *subparse = GST_SUBPARSE (object);
+
+  GST_OBJECT_LOCK (subparse);
+  switch (prop_id) {
+    case PROP_ENCODING:
+      g_value_set_string (value, subparse->encoding);
+      break;
+    case PROP_VIDEOFPS:
+      gst_value_set_fraction (value, subparse->fps_n, subparse->fps_d);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (subparse);
+}
+
+static const gchar *
+gst_sub_parse_get_format_description (GstSubParseFormat format)
+{
+  switch (format) {
+    case GST_SUB_PARSE_FORMAT_MDVDSUB:
+      return "MicroDVD";
+    case GST_SUB_PARSE_FORMAT_SUBRIP:
+      return "SubRip";
+    case GST_SUB_PARSE_FORMAT_MPSUB:
+      return "MPSub";
+    case GST_SUB_PARSE_FORMAT_SAMI:
+      return "SAMI";
+    case GST_SUB_PARSE_FORMAT_TMPLAYER:
+      return "TMPlayer";
+    case GST_SUB_PARSE_FORMAT_MPL2:
+      return "MPL2";
+    case GST_SUB_PARSE_FORMAT_SUBVIEWER:
+      return "SubViewer";
+    case GST_SUB_PARSE_FORMAT_DKS:
+      return "DKS";
+    case GST_SUB_PARSE_FORMAT_QTTEXT:
+      return "QTtext";
+    default:
+    case GST_SUB_PARSE_FORMAT_UNKNOWN:
+      break;
+  }
+  return NULL;
+}
+
+static gchar *
+gst_convert_to_utf8 (const gchar * str, gsize len, const gchar * encoding,
+    gsize * consumed, GError ** err)
+{
+  gchar *ret = NULL;
+
+  *consumed = 0;
+  /* The char cast is necessary in glib < 2.24 */
+  ret =
+      g_convert_with_fallback (str, len, "UTF-8", encoding, (char *) "*",
+      consumed, NULL, err);
+  if (ret == NULL)
+    return ret;
+
+  /* + 3 to skip UTF-8 BOM if it was added */
+  len = strlen (ret);
+  if (len >= 3 && (guint8) ret[0] == 0xEF && (guint8) ret[1] == 0xBB
+      && (guint8) ret[2] == 0xBF)
+    g_memmove (ret, ret + 3, len + 1 - 3);
+
+  return ret;
+}
+
+static gchar *
+detect_encoding (const gchar * str, gsize len)
+{
+  if (len >= 3 && (guint8) str[0] == 0xEF && (guint8) str[1] == 0xBB
+      && (guint8) str[2] == 0xBF)
+    return g_strdup ("UTF-8");
+
+  if (len >= 2 && (guint8) str[0] == 0xFE && (guint8) str[1] == 0xFF)
+    return g_strdup ("UTF-16BE");
+
+  if (len >= 2 && (guint8) str[0] == 0xFF && (guint8) str[1] == 0xFE)
+    return g_strdup ("UTF-16LE");
+
+  if (len >= 4 && (guint8) str[0] == 0x00 && (guint8) str[1] == 0x00
+      && (guint8) str[2] == 0xFE && (guint8) str[3] == 0xFF)
+    return g_strdup ("UTF-32BE");
+
+  if (len >= 4 && (guint8) str[0] == 0xFF && (guint8) str[1] == 0xFE
+      && (guint8) str[2] == 0x00 && (guint8) str[3] == 0x00)
+    return g_strdup ("UTF-32LE");
+
+  return NULL;
+}
+
+static gchar *
+convert_encoding (GstSubParse * self, const gchar * str, gsize len,
+    gsize * consumed)
+{
+  const gchar *encoding;
+  GError *err = NULL;
+  gchar *ret = NULL;
+
+  *consumed = 0;
+
+  /* First try any detected encoding */
+  if (self->detected_encoding) {
+    ret =
+        gst_convert_to_utf8 (str, len, self->detected_encoding, consumed, &err);
+
+    if (!err)
+      return ret;
+
+    GST_WARNING_OBJECT (self, "could not convert string from '%s' to UTF-8: %s",
+        self->detected_encoding, err->message);
+    g_free (self->detected_encoding);
+    self->detected_encoding = NULL;
+    g_error_free (err);
+  }
+
+  /* Otherwise check if it's UTF8 */
+  if (self->valid_utf8) {
+    if (g_utf8_validate (str, len, NULL)) {
+      GST_LOG_OBJECT (self, "valid UTF-8, no conversion needed");
+      *consumed = len;
+      return g_strndup (str, len);
+    }
+    GST_INFO_OBJECT (self, "invalid UTF-8!");
+    self->valid_utf8 = FALSE;
+  }
+
+  /* Else try fallback */
+  encoding = self->encoding;
+  if (encoding == NULL || *encoding == '\0') {
+    encoding = g_getenv ("GST_SUBTITLE_ENCODING");
+  }
+  if (encoding == NULL || *encoding == '\0') {
+    /* if local encoding is UTF-8 and no encoding specified
+     * via the environment variable, assume ISO-8859-15 */
+    if (g_get_charset (&encoding)) {
+      encoding = "ISO-8859-15";
+    }
+  }
+
+  ret = gst_convert_to_utf8 (str, len, encoding, consumed, &err);
+
+  if (err) {
+    GST_WARNING_OBJECT (self, "could not convert string from '%s' to UTF-8: %s",
+        encoding, err->message);
+    g_error_free (err);
+
+    /* invalid input encoding, fall back to ISO-8859-15 (always succeeds) */
+    ret = gst_convert_to_utf8 (str, len, "ISO-8859-15", consumed, NULL);
+  }
+
+  GST_LOG_OBJECT (self,
+      "successfully converted %" G_GSIZE_FORMAT " characters from %s to UTF-8"
+      "%s", len, encoding, (err) ? " , using ISO-8859-15 as fallback" : "");
+
+  return ret;
+}
+
+static gchar *
+get_next_line (GstSubParse * self)
+{
+  char *line = NULL;
+  const char *line_end;
+  int line_len;
+  gboolean have_r = FALSE;
+
+  line_end = strchr (self->textbuf->str, '\n');
+
+  if (!line_end) {
+    /* end-of-line not found; return for more data */
+    return NULL;
+  }
+
+  /* get rid of '\r' */
+  if (line_end != self->textbuf->str && *(line_end - 1) == '\r') {
+    line_end--;
+    have_r = TRUE;
+  }
+
+  line_len = line_end - self->textbuf->str;
+  line = g_strndup (self->textbuf->str, line_len);
+  self->textbuf = g_string_erase (self->textbuf, 0,
+      line_len + (have_r ? 2 : 1));
+  return line;
+}
+
+static gchar *
+parse_mdvdsub (ParserState * state, const gchar * line)
+{
+  const gchar *line_split;
+  gchar *line_chunk;
+  guint start_frame, end_frame;
+  guint64 clip_start = 0, clip_stop = 0;
+  gboolean in_seg = FALSE;
+  GString *markup;
+  gchar *ret;
+
+  /* style variables */
+  gboolean italic;
+  gboolean bold;
+  guint fontsize;
+  gdouble fps = 0.0;
+
+  if (sscanf (line, "{%u}{%u}", &start_frame, &end_frame) != 2) {
+    g_warning ("Parse of the following line, assumed to be in microdvd .sub"
+        " format, failed:\n%s", line);
+    return NULL;
+  }
+
+  /* skip the {%u}{%u} part */
+  line = strchr (line, '}') + 1;
+  line = strchr (line, '}') + 1;
+
+  /* see if there's a first line with a framerate */
+  if (start_frame == 1 && end_frame == 1) {
+    gchar *rest, *end = NULL;
+
+    rest = g_strdup (line);
+    g_strdelimit (rest, ",", '.');
+    fps = g_ascii_strtod (rest, &end);
+    if (end != rest) {
+      gst_util_double_to_fraction (fps, &state->fps_n, &state->fps_d);
+      GST_INFO ("framerate from file: %d/%d ('%s')", state->fps_n,
+          state->fps_d, rest);
+    }
+    g_free (rest);
+    return NULL;
+  }
+
+  state->start_time =
+      gst_util_uint64_scale (start_frame, GST_SECOND * state->fps_d,
+      state->fps_n);
+  state->duration =
+      gst_util_uint64_scale (end_frame - start_frame, GST_SECOND * state->fps_d,
+      state->fps_n);
+
+  /* Check our segment start/stop */
+  in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
+      state->start_time, state->start_time + state->duration, &clip_start,
+      &clip_stop);
+
+  /* No need to parse that text if it's out of segment */
+  if (in_seg) {
+    state->start_time = clip_start;
+    state->duration = clip_stop - clip_start;
+  } else {
+    return NULL;
+  }
+
+  markup = g_string_new (NULL);
+  while (1) {
+    italic = FALSE;
+    bold = FALSE;
+    fontsize = 0;
+    /* parse style markup */
+    if (strncmp (line, "{y:i}", 5) == 0) {
+      italic = TRUE;
+      line = strchr (line, '}') + 1;
+    }
+    if (strncmp (line, "{y:b}", 5) == 0) {
+      bold = TRUE;
+      line = strchr (line, '}') + 1;
+    }
+    if (sscanf (line, "{s:%u}", &fontsize) == 1) {
+      line = strchr (line, '}') + 1;
+    }
+    /* forward slashes at beginning/end signify italics too */
+    if (g_str_has_prefix (line, "/")) {
+      italic = TRUE;
+      ++line;
+    }
+    if ((line_split = strchr (line, '|')))
+      line_chunk = g_markup_escape_text (line, line_split - line);
+    else
+      line_chunk = g_markup_escape_text (line, strlen (line));
+
+    /* Remove italics markers at end of line/stanza (CHECKME: are end slashes
+     * always at the end of a line or can they span multiple lines?) */
+    if (g_str_has_suffix (line_chunk, "/")) {
+      line_chunk[strlen (line_chunk) - 1] = '\0';
+    }
+
+    markup = g_string_append (markup, "<span");
+    if (italic)
+      g_string_append (markup, " style=\"italic\"");
+    if (bold)
+      g_string_append (markup, " weight=\"bold\"");
+    if (fontsize)
+      g_string_append_printf (markup, " size=\"%u\"", fontsize * 1000);
+    g_string_append_printf (markup, ">%s</span>", line_chunk);
+    g_free (line_chunk);
+    if (line_split) {
+      g_string_append (markup, "\n");
+      line = line_split + 1;
+    } else {
+      break;
+    }
+  }
+  ret = markup->str;
+  g_string_free (markup, FALSE);
+  GST_DEBUG ("parse_mdvdsub returning (%f+%f): %s",
+      state->start_time / (double) GST_SECOND,
+      state->duration / (double) GST_SECOND, ret);
+  return ret;
+}
+
+static void
+strip_trailing_newlines (gchar * txt)
+{
+  if (txt) {
+    guint len;
+
+    len = strlen (txt);
+    while (len > 1 && txt[len - 1] == '\n') {
+      txt[len - 1] = '\0';
+      --len;
+    }
+  }
+}
+
+/* we want to escape text in general, but retain basic markup like
+ * <i></i>, <u></u>, and <b></b>. The easiest and safest way is to
+ * just unescape a white list of allowed markups again after
+ * escaping everything (the text between these simple markers isn't
+ * necessarily escaped, so it seems best to do it like this) */
+static void
+subrip_unescape_formatting (gchar * txt)
+{
+  gchar *pos;
+
+  for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
+    if (g_ascii_strncasecmp (pos, "&lt;u&gt;", 9) == 0 ||
+        g_ascii_strncasecmp (pos, "&lt;i&gt;", 9) == 0 ||
+        g_ascii_strncasecmp (pos, "&lt;b&gt;", 9) == 0) {
+      pos[0] = '<';
+      pos[1] = g_ascii_tolower (pos[4]);
+      pos[2] = '>';
+      /* move NUL terminator as well */
+      g_memmove (pos + 3, pos + 9, strlen (pos + 9) + 1);
+      pos += 2;
+    }
+  }
+
+  for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
+    if (g_ascii_strncasecmp (pos, "&lt;/u&gt;", 10) == 0 ||
+        g_ascii_strncasecmp (pos, "&lt;/i&gt;", 10) == 0 ||
+        g_ascii_strncasecmp (pos, "&lt;/b&gt;", 10) == 0) {
+      pos[0] = '<';
+      pos[1] = '/';
+      pos[2] = g_ascii_tolower (pos[5]);
+      pos[3] = '>';
+      /* move NUL terminator as well */
+      g_memmove (pos + 4, pos + 10, strlen (pos + 10) + 1);
+      pos += 3;
+    }
+  }
+}
+
+
+static gboolean
+subrip_remove_unhandled_tag (gchar * start, gchar * stop)
+{
+  gchar *tag, saved;
+
+  tag = start + strlen ("&lt;");
+  if (*tag == '/')
+    ++tag;
+
+  if (g_ascii_tolower (*tag) < 'a' || g_ascii_tolower (*tag) > 'z')
+    return FALSE;
+
+  saved = *stop;
+  *stop = '\0';
+  GST_LOG ("removing unhandled tag '%s'", start);
+  *stop = saved;
+  g_memmove (start, stop, strlen (stop) + 1);
+  return TRUE;
+}
+
+/* remove tags we haven't explicitly allowed earlier on, like font tags
+ * for example */
+static void
+subrip_remove_unhandled_tags (gchar * txt)
+{
+  gchar *pos, *gt;
+
+  for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
+    if (strncmp (pos, "&lt;", 4) == 0 && (gt = strstr (pos + 4, "&gt;"))) {
+      if (subrip_remove_unhandled_tag (pos, gt + strlen ("&gt;")))
+        --pos;
+    }
+  }
+}
+
+/* we only allow <i>, <u> and <b>, so let's take a simple approach. This code
+ * assumes the input has been escaped and subrip_unescape_formatting() has then
+ * been run over the input! This function adds missing closing markup tags and
+ * removes broken closing tags for tags that have never been opened. */
+static void
+subrip_fix_up_markup (gchar ** p_txt)
+{
+  gchar *cur, *next_tag;
+  gchar open_tags[32];
+  guint num_open_tags = 0;
+
+  g_assert (*p_txt != NULL);
+
+  cur = *p_txt;
+  while (*cur != '\0') {
+    next_tag = strchr (cur, '<');
+    if (next_tag == NULL)
+      break;
+    ++next_tag;
+    switch (*next_tag) {
+      case '/':{
+        ++next_tag;
+        if (num_open_tags == 0 || open_tags[num_open_tags - 1] != *next_tag) {
+          GST_LOG ("broken input, closing tag '%c' is not open", *next_tag);
+          g_memmove (next_tag - 2, next_tag + 2, strlen (next_tag + 2) + 1);
+          next_tag -= 2;
+        } else {
+          /* it's all good, closing tag which is open */
+          --num_open_tags;
+        }
+        break;
+      }
+      case 'i':
+      case 'b':
+      case 'u':
+        if (num_open_tags == G_N_ELEMENTS (open_tags))
+          return;               /* something dodgy is going on, stop parsing */
+        open_tags[num_open_tags] = *next_tag;
+        ++num_open_tags;
+        break;
+      default:
+        GST_ERROR ("unexpected tag '%c' (%s)", *next_tag, next_tag);
+        g_assert_not_reached ();
+        break;
+    }
+    cur = next_tag;
+  }
+
+  if (num_open_tags > 0) {
+    GString *s;
+
+    s = g_string_new (*p_txt);
+    while (num_open_tags > 0) {
+      GST_LOG ("adding missing closing tag '%c'", open_tags[num_open_tags - 1]);
+      g_string_append_c (s, '<');
+      g_string_append_c (s, '/');
+      g_string_append_c (s, open_tags[num_open_tags - 1]);
+      g_string_append_c (s, '>');
+      --num_open_tags;
+    }
+    g_free (*p_txt);
+    *p_txt = g_string_free (s, FALSE);
+  }
+}
+
+static gboolean
+parse_subrip_time (const gchar * ts_string, GstClockTime * t)
+{
+  gchar s[128] = { '\0', };
+  gchar *end, *p;
+  guint hour, min, sec, msec, len;
+
+  while (*ts_string == ' ')
+    ++ts_string;
+
+  g_strlcpy (s, ts_string, sizeof (s));
+  if ((end = strstr (s, "-->")))
+    *end = '\0';
+  g_strchomp (s);
+
+  /* ms may be in these formats:
+   * hh:mm:ss,500 = 500ms
+   * hh:mm:ss,  5 =   5ms
+   * hh:mm:ss, 5  =  50ms
+   * hh:mm:ss, 50 =  50ms
+   * hh:mm:ss,5   = 500ms
+   * and the same with . instead of ,.
+   * sscanf() doesn't differentiate between '  5' and '5' so munge
+   * the white spaces within the timestamp to '0' (I'm sure there's a
+   * way to make sscanf() do this for us, but how?)
+   */
+  g_strdelimit (s, " ", '0');
+  g_strdelimit (s, ".", ',');
+
+  /* make sure we have exactly three digits after he comma */
+  p = strchr (s, ',');
+  g_assert (p != NULL);
+  ++p;
+  len = strlen (p);
+  if (len > 3) {
+    p[3] = '\0';
+  } else
+    while (len < 3) {
+      g_strlcat (&p[len], "0", 2);
+      ++len;
+    }
+
+  GST_LOG ("parsing timestamp '%s'", s);
+  if (sscanf (s, "%u:%u:%u,%u", &hour, &min, &sec, &msec) != 4) {
+    GST_WARNING ("failed to parse subrip timestamp string '%s'", s);
+    return FALSE;
+  }
+
+  *t = ((hour * 3600) + (min * 60) + sec) * GST_SECOND + msec * GST_MSECOND;
+  return TRUE;
+}
+
+static gchar *
+parse_subrip (ParserState * state, const gchar * line)
+{
+  int subnum;
+  gchar *ret;
+
+  switch (state->state) {
+    case 0:
+      /* looking for a single integer */
+      if (sscanf (line, "%u", &subnum) == 1)
+        state->state = 1;
+      return NULL;
+    case 1:
+    {
+      GstClockTime ts_start, ts_end;
+      gchar *end_time;
+
+      /* looking for start_time --> end_time */
+      if ((end_time = strstr (line, " --> ")) &&
+          parse_subrip_time (line, &ts_start) &&
+          parse_subrip_time (end_time + strlen (" --> "), &ts_end) &&
+          state->start_time <= ts_end) {
+        state->state = 2;
+        state->start_time = ts_start;
+        state->duration = ts_end - ts_start;
+      } else {
+        GST_DEBUG ("error parsing subrip time line '%s'", line);
+        state->state = 0;
+      }
+      return NULL;
+    }
+    case 2:
+    {
+      /* No need to parse that text if it's out of segment */
+      guint64 clip_start = 0, clip_stop = 0;
+      gboolean in_seg = FALSE;
+
+      /* Check our segment start/stop */
+      in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
+          state->start_time, state->start_time + state->duration,
+          &clip_start, &clip_stop);
+
+      if (in_seg) {
+        state->start_time = clip_start;
+        state->duration = clip_stop - clip_start;
+      } else {
+        state->state = 0;
+        return NULL;
+      }
+    }
+      /* looking for subtitle text; empty line ends this subtitle entry */
+      if (state->buf->len)
+        g_string_append_c (state->buf, '\n');
+      g_string_append (state->buf, line);
+      if (strlen (line) == 0) {
+        ret = g_markup_escape_text (state->buf->str, state->buf->len);
+        g_string_truncate (state->buf, 0);
+        state->state = 0;
+        subrip_unescape_formatting (ret);
+        subrip_remove_unhandled_tags (ret);
+        strip_trailing_newlines (ret);
+        subrip_fix_up_markup (&ret);
+        return ret;
+      }
+      return NULL;
+    default:
+      g_return_val_if_reached (NULL);
+  }
+}
+
+static void
+unescape_newlines_br (gchar * read)
+{
+  gchar *write = read;
+
+  /* Replace all occurences of '[br]' with a newline as version 2
+   * of the subviewer format uses this for newlines */
+
+  if (read[0] == '\0' || read[1] == '\0' || read[2] == '\0' || read[3] == '\0')
+    return;
+
+  do {
+    if (strncmp (read, "[br]", 4) == 0) {
+      *write = '\n';
+      read += 4;
+    } else {
+      *write = *read;
+      read++;
+    }
+    write++;
+  } while (*read);
+
+  *write = '\0';
+}
+
+static gchar *
+parse_subviewer (ParserState * state, const gchar * line)
+{
+  guint h1, m1, s1, ms1;
+  guint h2, m2, s2, ms2;
+  gchar *ret;
+
+  /* TODO: Maybe also parse the fields in the header, especially DELAY.
+   * For examples see the unit test or
+   * http://www.doom9.org/index.html?/sub.htm */
+
+  switch (state->state) {
+    case 0:
+      /* looking for start_time,end_time */
+      if (sscanf (line, "%u:%u:%u.%u,%u:%u:%u.%u",
+              &h1, &m1, &s1, &ms1, &h2, &m2, &s2, &ms2) == 8) {
+        state->state = 1;
+        state->start_time =
+            (((guint64) h1) * 3600 + m1 * 60 + s1) * GST_SECOND +
+            ms1 * GST_MSECOND;
+        state->duration =
+            (((guint64) h2) * 3600 + m2 * 60 + s2) * GST_SECOND +
+            ms2 * GST_MSECOND - state->start_time;
+      }
+      return NULL;
+    case 1:
+    {
+      /* No need to parse that text if it's out of segment */
+      guint64 clip_start = 0, clip_stop = 0;
+      gboolean in_seg = FALSE;
+
+      /* Check our segment start/stop */
+      in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
+          state->start_time, state->start_time + state->duration,
+          &clip_start, &clip_stop);
+
+      if (in_seg) {
+        state->start_time = clip_start;
+        state->duration = clip_stop - clip_start;
+      } else {
+        state->state = 0;
+        return NULL;
+      }
+    }
+      /* looking for subtitle text; empty line ends this subtitle entry */
+      if (state->buf->len)
+        g_string_append_c (state->buf, '\n');
+      g_string_append (state->buf, line);
+      if (strlen (line) == 0) {
+        ret = g_strdup (state->buf->str);
+        unescape_newlines_br (ret);
+        strip_trailing_newlines (ret);
+        g_string_truncate (state->buf, 0);
+        state->state = 0;
+        return ret;
+      }
+      return NULL;
+    default:
+      g_assert_not_reached ();
+      return NULL;
+  }
+}
+
+static gchar *
+parse_mpsub (ParserState * state, const gchar * line)
+{
+  gchar *ret;
+  float t1, t2;
+
+  switch (state->state) {
+    case 0:
+      /* looking for two floats (offset, duration) */
+      if (sscanf (line, "%f %f", &t1, &t2) == 2) {
+        state->state = 1;
+        state->start_time += state->duration + GST_SECOND * t1;
+        state->duration = GST_SECOND * t2;
+      }
+      return NULL;
+    case 1:
+    {                           /* No need to parse that text if it's out of segment */
+      guint64 clip_start = 0, clip_stop = 0;
+      gboolean in_seg = FALSE;
+
+      /* Check our segment start/stop */
+      in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
+          state->start_time, state->start_time + state->duration,
+          &clip_start, &clip_stop);
+
+      if (in_seg) {
+        state->start_time = clip_start;
+        state->duration = clip_stop - clip_start;
+      } else {
+        state->state = 0;
+        return NULL;
+      }
+    }
+      /* looking for subtitle text; empty line ends this
+       * subtitle entry */
+      if (state->buf->len)
+        g_string_append_c (state->buf, '\n');
+      g_string_append (state->buf, line);
+      if (strlen (line) == 0) {
+        ret = g_strdup (state->buf->str);
+        g_string_truncate (state->buf, 0);
+        state->state = 0;
+        return ret;
+      }
+      return NULL;
+    default:
+      g_assert_not_reached ();
+      return NULL;
+  }
+}
+
+static const gchar *
+dks_skip_timestamp (const gchar * line)
+{
+  while (*line && *line != ']')
+    line++;
+  if (*line == ']')
+    line++;
+  return line;
+}
+
+static gchar *
+parse_dks (ParserState * state, const gchar * line)
+{
+  guint h, m, s;
+
+  switch (state->state) {
+    case 0:
+      /* Looking for the start time and text */
+      if (sscanf (line, "[%u:%u:%u]", &h, &m, &s) == 3) {
+        const gchar *text;
+        state->start_time = (((guint64) h) * 3600 + m * 60 + s) * GST_SECOND;
+        text = dks_skip_timestamp (line);
+        if (*text) {
+          state->state = 1;
+          g_string_append (state->buf, text);
+        }
+      }
+      return NULL;
+    case 1:
+    {
+      guint64 clip_start = 0, clip_stop = 0;
+      gboolean in_seg;
+      gchar *ret;
+
+      /* Looking for the end time */
+      if (sscanf (line, "[%u:%u:%u]", &h, &m, &s) == 3) {
+        state->state = 0;
+        state->duration = (((guint64) h) * 3600 + m * 60 + s) * GST_SECOND -
+            state->start_time;
+      } else {
+        GST_WARNING ("Failed to parse subtitle end time");
+        return NULL;
+      }
+
+      /* Check if this subtitle is out of the current segment */
+      in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
+          state->start_time, state->start_time + state->duration,
+          &clip_start, &clip_stop);
+
+      if (!in_seg) {
+        return NULL;
+      }
+
+      state->start_time = clip_start;
+      state->duration = clip_stop - clip_start;
+
+      ret = g_strdup (state->buf->str);
+      g_string_truncate (state->buf, 0);
+      unescape_newlines_br (ret);
+      return ret;
+    }
+    default:
+      g_assert_not_reached ();
+      return NULL;
+  }
+}
+
+static void
+parser_state_init (ParserState * state)
+{
+  GST_DEBUG ("initialising parser");
+
+  if (state->buf) {
+    g_string_truncate (state->buf, 0);
+  } else {
+    state->buf = g_string_new (NULL);
+  }
+
+  state->start_time = 0;
+  state->duration = 0;
+  state->max_duration = 0;      /* no limit */
+  state->state = 0;
+  state->segment = NULL;
+}
+
+static void
+parser_state_dispose (GstSubParse * self, ParserState * state)
+{
+  if (state->buf) {
+    g_string_free (state->buf, TRUE);
+    state->buf = NULL;
+  }
+  if (state->user_data) {
+    switch (self->parser_type) {
+#ifndef GST_DISABLE_XML
+      case GST_SUB_PARSE_FORMAT_SAMI:
+        sami_context_reset (state);
+        break;
+#endif
+      default:
+        break;
+    }
+  }
+}
+
+/* regex type enum */
+typedef enum
+{
+  GST_SUB_PARSE_REGEX_UNKNOWN = 0,
+  GST_SUB_PARSE_REGEX_MDVDSUB = 1,
+  GST_SUB_PARSE_REGEX_SUBRIP = 2,
+  GST_SUB_PARSE_REGEX_DKS = 3,
+} GstSubParseRegex;
+
+static gpointer
+gst_sub_parse_data_format_autodetect_regex_once (GstSubParseRegex regtype)
+{
+  gpointer result = NULL;
+  GError *gerr = NULL;
+  switch (regtype) {
+    case GST_SUB_PARSE_REGEX_MDVDSUB:
+      result =
+          (gpointer) g_regex_new ("^\\{[0-9]+\\}\\{[0-9]+\\}",
+          G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
+      if (result == NULL) {
+        g_warning ("Compilation of mdvd regex failed: %s", gerr->message);
+        g_error_free (gerr);
+      }
+      break;
+    case GST_SUB_PARSE_REGEX_SUBRIP:
+      result = (gpointer) g_regex_new ("^ {0,3}[ 0-9]{1,4}\\s*(\x0d)?\x0a"
+          " ?[0-9]{1,2}: ?[0-9]{1,2}: ?[0-9]{1,2}[,.] {0,2}[0-9]{1,3}"
+          " +--> +[0-9]{1,2}: ?[0-9]{1,2}: ?[0-9]{1,2}[,.] {0,2}[0-9]{1,2}",
+          G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
+      if (result == NULL) {
+        g_warning ("Compilation of subrip regex failed: %s", gerr->message);
+        g_error_free (gerr);
+      }
+      break;
+    case GST_SUB_PARSE_REGEX_DKS:
+      result = (gpointer) g_regex_new ("^\\[[0-9]+:[0-9]+:[0-9]+\\].*",
+          G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
+      if (result == NULL) {
+        g_warning ("Compilation of dks regex failed: %s", gerr->message);
+        g_error_free (gerr);
+      }
+      break;
+    default:
+      GST_WARNING ("Trying to allocate regex of unknown type %u", regtype);
+  }
+  return result;
+}
+
+/*
+ * FIXME: maybe we should pass along a second argument, the preceding
+ * text buffer, because that is how this originally worked, even though
+ * I don't really see the use of that.
+ */
+
+static GstSubParseFormat
+gst_sub_parse_data_format_autodetect (gchar * match_str)
+{
+  guint n1, n2, n3;
+
+  static GOnce mdvd_rx_once = G_ONCE_INIT;
+  static GOnce subrip_rx_once = G_ONCE_INIT;
+  static GOnce dks_rx_once = G_ONCE_INIT;
+
+  GRegex *mdvd_grx;
+  GRegex *subrip_grx;
+  GRegex *dks_grx;
+
+  g_once (&mdvd_rx_once,
+      (GThreadFunc) gst_sub_parse_data_format_autodetect_regex_once,
+      (gpointer) GST_SUB_PARSE_REGEX_MDVDSUB);
+  g_once (&subrip_rx_once,
+      (GThreadFunc) gst_sub_parse_data_format_autodetect_regex_once,
+      (gpointer) GST_SUB_PARSE_REGEX_SUBRIP);
+  g_once (&dks_rx_once,
+      (GThreadFunc) gst_sub_parse_data_format_autodetect_regex_once,
+      (gpointer) GST_SUB_PARSE_REGEX_DKS);
+
+  mdvd_grx = (GRegex *) mdvd_rx_once.retval;
+  subrip_grx = (GRegex *) subrip_rx_once.retval;
+  dks_grx = (GRegex *) dks_rx_once.retval;
+
+  if (g_regex_match (mdvd_grx, match_str, 0, NULL) == TRUE) {
+    GST_LOG ("MicroDVD (frame based) format detected");
+    return GST_SUB_PARSE_FORMAT_MDVDSUB;
+  }
+  if (g_regex_match (subrip_grx, match_str, 0, NULL) == TRUE) {
+    GST_LOG ("SubRip (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_SUBRIP;
+  }
+  if (g_regex_match (dks_grx, match_str, 0, NULL) == TRUE) {
+    GST_LOG ("DKS (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_DKS;
+  }
+
+  if (!strncmp (match_str, "FORMAT=TIME", 11)) {
+    GST_LOG ("MPSub (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_MPSUB;
+  }
+#ifndef GST_DISABLE_XML
+  if (strstr (match_str, "<SAMI>") != NULL ||
+      strstr (match_str, "<sami>") != NULL) {
+    GST_LOG ("SAMI (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_SAMI;
+  }
+#endif
+  /* we're boldly assuming the first subtitle appears within the first hour */
+  if (sscanf (match_str, "0:%02u:%02u:", &n1, &n2) == 2 ||
+      sscanf (match_str, "0:%02u:%02u=", &n1, &n2) == 2 ||
+      sscanf (match_str, "00:%02u:%02u:", &n1, &n2) == 2 ||
+      sscanf (match_str, "00:%02u:%02u=", &n1, &n2) == 2 ||
+      sscanf (match_str, "00:%02u:%02u,%u=", &n1, &n2, &n3) == 3) {
+    GST_LOG ("TMPlayer (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_TMPLAYER;
+  }
+  if (sscanf (match_str, "[%u][%u]", &n1, &n2) == 2) {
+    GST_LOG ("MPL2 (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_MPL2;
+  }
+  if (strstr (match_str, "[INFORMATION]") != NULL) {
+    GST_LOG ("SubViewer (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_SUBVIEWER;
+  }
+  if (strstr (match_str, "{QTtext}") != NULL) {
+    GST_LOG ("QTtext (time based) format detected");
+    return GST_SUB_PARSE_FORMAT_QTTEXT;
+  }
+
+  GST_DEBUG ("no subtitle format detected");
+  return GST_SUB_PARSE_FORMAT_UNKNOWN;
+}
+
+static GstCaps *
+gst_sub_parse_format_autodetect (GstSubParse * self)
+{
+  gchar *data;
+  GstSubParseFormat format;
+
+  if (strlen (self->textbuf->str) < 30) {
+    GST_DEBUG ("File too small to be a subtitles file");
+    return NULL;
+  }
+
+  data = g_strndup (self->textbuf->str, 35);
+  format = gst_sub_parse_data_format_autodetect (data);
+  g_free (data);
+
+  self->parser_type = format;
+  self->subtitle_codec = gst_sub_parse_get_format_description (format);
+  parser_state_init (&self->state);
+
+  switch (format) {
+    case GST_SUB_PARSE_FORMAT_MDVDSUB:
+      self->parse_line = parse_mdvdsub;
+      return gst_caps_new_simple ("text/x-pango-markup", NULL);
+    case GST_SUB_PARSE_FORMAT_SUBRIP:
+      self->parse_line = parse_subrip;
+      return gst_caps_new_simple ("text/x-pango-markup", NULL);
+    case GST_SUB_PARSE_FORMAT_MPSUB:
+      self->parse_line = parse_mpsub;
+      return gst_caps_new_simple ("text/plain", NULL);
+#ifndef GST_DISABLE_XML
+    case GST_SUB_PARSE_FORMAT_SAMI:
+      self->parse_line = parse_sami;
+      sami_context_init (&self->state);
+      return gst_caps_new_simple ("text/x-pango-markup", NULL);
+#endif
+    case GST_SUB_PARSE_FORMAT_TMPLAYER:
+      self->parse_line = parse_tmplayer;
+      self->state.max_duration = 5 * GST_SECOND;
+      return gst_caps_new_simple ("text/plain", NULL);
+    case GST_SUB_PARSE_FORMAT_MPL2:
+      self->parse_line = parse_mpl2;
+      return gst_caps_new_simple ("text/x-pango-markup", NULL);
+    case GST_SUB_PARSE_FORMAT_DKS:
+      self->parse_line = parse_dks;
+      return gst_caps_new_simple ("text/plain", NULL);
+    case GST_SUB_PARSE_FORMAT_SUBVIEWER:
+      self->parse_line = parse_subviewer;
+      return gst_caps_new_simple ("text/plain", NULL);
+    case GST_SUB_PARSE_FORMAT_QTTEXT:
+      self->parse_line = parse_qttext;
+      qttext_context_init (&self->state);
+      return gst_caps_new_simple ("text/x-pango-markup", NULL);
+    case GST_SUB_PARSE_FORMAT_UNKNOWN:
+    default:
+      GST_DEBUG ("no subtitle format detected");
+      GST_ELEMENT_ERROR (self, STREAM, WRONG_TYPE,
+          ("The input is not a valid/supported subtitle file"), (NULL));
+      return NULL;
+  }
+}
+
+static void
+feed_textbuf (GstSubParse * self, GstBuffer * buf)
+{
+  gboolean discont;
+  gsize consumed;
+  gchar *input = NULL;
+  const guint8 *data;
+  gsize avail;
+
+  discont = GST_BUFFER_IS_DISCONT (buf);
+
+  if (GST_BUFFER_OFFSET_IS_VALID (buf) &&
+      GST_BUFFER_OFFSET (buf) != self->offset) {
+    self->offset = GST_BUFFER_OFFSET (buf);
+    discont = TRUE;
+  }
+
+  if (discont) {
+    GST_INFO ("discontinuity");
+    /* flush the parser state */
+    parser_state_init (&self->state);
+    g_string_truncate (self->textbuf, 0);
+    gst_adapter_clear (self->adapter);
+#ifndef GST_DISABLE_XML
+    if (self->parser_type == GST_SUB_PARSE_FORMAT_SAMI)
+      sami_context_reset (&self->state);
+#endif
+    /* we could set a flag to make sure that the next buffer we push out also
+     * has the DISCONT flag set, but there's no point really given that it's
+     * subtitles which are discontinuous by nature. */
+  }
+
+  self->offset = GST_BUFFER_OFFSET (buf) + gst_buffer_get_size (buf);
+  self->next_offset = self->offset;
+
+  gst_adapter_push (self->adapter, buf);
+
+  avail = gst_adapter_available (self->adapter);
+  data = gst_adapter_map (self->adapter, avail);
+  input = convert_encoding (self, (const gchar *) data, avail, &consumed);
+
+  if (input && consumed > 0) {
+    self->textbuf = g_string_append (self->textbuf, input);
+    gst_adapter_unmap (self->adapter, consumed);
+  } else {
+    gst_adapter_unmap (self->adapter, 0);
+  }
+
+  g_free (input);
+}
+
+static GstFlowReturn
+handle_buffer (GstSubParse * self, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstCaps *caps = NULL;
+  gchar *line, *subtitle, *data;
+  gsize size;
+
+  if (self->first_buffer) {
+    data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+    self->detected_encoding = detect_encoding (data, size);
+    gst_buffer_unmap (buf, data, size);
+    self->first_buffer = FALSE;
+    self->state.fps_n = self->fps_n;
+    self->state.fps_d = self->fps_d;
+  }
+
+  feed_textbuf (self, buf);
+
+  /* make sure we know the format */
+  if (G_UNLIKELY (self->parser_type == GST_SUB_PARSE_FORMAT_UNKNOWN)) {
+    if (!(caps = gst_sub_parse_format_autodetect (self))) {
+      return GST_FLOW_UNEXPECTED;
+    }
+    if (!gst_pad_set_caps (self->srcpad, caps)) {
+      gst_caps_unref (caps);
+      return GST_FLOW_UNEXPECTED;
+    }
+    gst_caps_unref (caps);
+
+    /* push tags */
+    if (self->subtitle_codec != NULL) {
+      GstTagList *tags;
+
+      tags = gst_tag_list_new ();
+      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_SUBTITLE_CODEC,
+          self->subtitle_codec, NULL);
+      gst_element_found_tags_for_pad (GST_ELEMENT (self), self->srcpad, tags);
+    }
+  }
+
+  while (!self->flushing && (line = get_next_line (self))) {
+    guint offset = 0;
+
+    /* Set segment on our parser state machine */
+    self->state.segment = &self->segment;
+    /* Now parse the line, out of segment lines will just return NULL */
+    GST_LOG_OBJECT (self, "Parsing line '%s'", line + offset);
+    subtitle = self->parse_line (&self->state, line + offset);
+    g_free (line);
+
+    if (subtitle) {
+      guint subtitle_len = strlen (subtitle);
+
+      /* +1 for terminating NUL character */
+      buf = gst_buffer_new_and_alloc (subtitle_len + 1);
+
+      /* copy terminating NUL character as well */
+      gst_buffer_fill (buf, 0, subtitle, subtitle_len + 1);
+      gst_buffer_set_size (buf, subtitle_len);
+
+      GST_BUFFER_TIMESTAMP (buf) = self->state.start_time;
+      GST_BUFFER_DURATION (buf) = self->state.duration;
+
+      /* in some cases (e.g. tmplayer) we can only determine the duration
+       * of a text chunk from the timestamp of the next text chunk; in those
+       * cases, we probably want to limit the duration to something
+       * reasonable, so we don't end up showing some text for e.g. 40 seconds
+       * just because nothing else is being said during that time */
+      if (self->state.max_duration > 0 && GST_BUFFER_DURATION_IS_VALID (buf)) {
+        if (GST_BUFFER_DURATION (buf) > self->state.max_duration)
+          GST_BUFFER_DURATION (buf) = self->state.max_duration;
+      }
+
+      self->segment.position = self->state.start_time;
+
+      GST_DEBUG_OBJECT (self, "Sending text '%s', %" GST_TIME_FORMAT " + %"
+          GST_TIME_FORMAT, subtitle, GST_TIME_ARGS (self->state.start_time),
+          GST_TIME_ARGS (self->state.duration));
+
+      ret = gst_pad_push (self->srcpad, buf);
+
+      /* move this forward (the tmplayer parser needs this) */
+      if (self->state.duration != GST_CLOCK_TIME_NONE)
+        self->state.start_time += self->state.duration;
+
+      g_free (subtitle);
+      subtitle = NULL;
+
+      if (ret != GST_FLOW_OK) {
+        GST_DEBUG_OBJECT (self, "flow: %s", gst_flow_get_name (ret));
+        break;
+      }
+    }
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_sub_parse_chain (GstPad * sinkpad, GstBuffer * buf)
+{
+  GstFlowReturn ret;
+  GstSubParse *self;
+
+  self = GST_SUBPARSE (GST_PAD_PARENT (sinkpad));
+
+  /* Push newsegment if needed */
+  if (self->need_segment) {
+    GST_LOG_OBJECT (self, "pushing newsegment event with %" GST_SEGMENT_FORMAT,
+        &self->segment);
+
+    gst_pad_push_event (self->srcpad, gst_event_new_segment (&self->segment));
+    self->need_segment = FALSE;
+  }
+
+  ret = handle_buffer (self, buf);
+
+  return ret;
+}
+
+static gboolean
+gst_sub_parse_sink_event (GstPad * pad, GstEvent * event)
+{
+  GstSubParse *self = GST_SUBPARSE (gst_pad_get_parent (pad));
+  gboolean ret = FALSE;
+
+  GST_DEBUG ("Handling %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:{
+      /* Make sure the last subrip chunk is pushed out even
+       * if the file does not have an empty line at the end */
+      if (self->parser_type == GST_SUB_PARSE_FORMAT_SUBRIP ||
+          self->parser_type == GST_SUB_PARSE_FORMAT_TMPLAYER ||
+          self->parser_type == GST_SUB_PARSE_FORMAT_MPL2 ||
+          self->parser_type == GST_SUB_PARSE_FORMAT_QTTEXT) {
+        gchar term_chars[] = { '\n', '\n', '\0' };
+        GstBuffer *buf = gst_buffer_new_and_alloc (2 + 1);
+
+        GST_DEBUG ("EOS. Pushing remaining text (if any)");
+        gst_buffer_fill (buf, 0, term_chars, 3);
+        gst_buffer_set_size (buf, 2);
+
+        GST_BUFFER_OFFSET (buf) = self->offset;
+        gst_sub_parse_chain (pad, buf);
+      }
+      ret = gst_pad_event_default (pad, event);
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &self->segment);
+      GST_DEBUG_OBJECT (self, "newsegment (%s)",
+          gst_format_get_name (self->segment.format));
+
+      /* if not time format, we'll either start with a 0 timestamp anyway or
+       * it's following a seek in which case we'll have saved the requested
+       * seek segment and don't want to overwrite it (remember that on a seek
+       * we always just seek back to the start in BYTES format and just throw
+       * away all text that's before the requested position; if the subtitles
+       * come from an upstream demuxer, it won't be able to handle our BYTES
+       * seek request and instead send us a newsegment from the seek request
+       * it received via its video pads instead, so all is fine then too) */
+      ret = TRUE;
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_FLUSH_START:
+    {
+      self->flushing = TRUE;
+
+      ret = gst_pad_event_default (pad, event);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+    {
+      self->flushing = FALSE;
+
+      ret = gst_pad_event_default (pad, event);
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, event);
+      break;
+  }
+
+  gst_object_unref (self);
+
+  return ret;
+}
+
+
+static GstStateChangeReturn
+gst_sub_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstSubParse *self = GST_SUBPARSE (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      /* format detection will init the parser state */
+      self->offset = 0;
+      self->next_offset = 0;
+      self->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN;
+      self->valid_utf8 = TRUE;
+      self->first_buffer = TRUE;
+      g_free (self->detected_encoding);
+      self->detected_encoding = NULL;
+      g_string_truncate (self->textbuf, 0);
+      gst_adapter_clear (self->adapter);
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      parser_state_dispose (self, &self->state);
+      self->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+/*
+ * Typefind support.
+ */
+
+/* FIXME 0.11: these caps are ugly, use app/x-subtitle + type field or so;
+ * also, give different  subtitle formats really different types */
+static GstStaticCaps mpl2_caps =
+GST_STATIC_CAPS ("application/x-subtitle-mpl2");
+#define SUB_CAPS (gst_static_caps_get (&sub_caps))
+
+static GstStaticCaps tmp_caps =
+GST_STATIC_CAPS ("application/x-subtitle-tmplayer");
+#define TMP_CAPS (gst_static_caps_get (&tmp_caps))
+
+static GstStaticCaps sub_caps = GST_STATIC_CAPS ("application/x-subtitle");
+#define MPL2_CAPS (gst_static_caps_get (&mpl2_caps))
+
+#ifndef GST_DISABLE_XML
+static GstStaticCaps smi_caps = GST_STATIC_CAPS ("application/x-subtitle-sami");
+#define SAMI_CAPS (gst_static_caps_get (&smi_caps))
+#endif
+
+static GstStaticCaps dks_caps = GST_STATIC_CAPS ("application/x-subtitle-dks");
+#define DKS_CAPS (gst_static_caps_get (&dks_caps))
+
+static GstStaticCaps qttext_caps =
+GST_STATIC_CAPS ("application/x-subtitle-qttext");
+#define QTTEXT_CAPS (gst_static_caps_get (&qttext_caps))
+
+static void
+gst_subparse_type_find (GstTypeFind * tf, gpointer private)
+{
+  GstSubParseFormat format;
+  const guint8 *data;
+  GstCaps *caps;
+  gchar *str;
+  gchar *encoding = NULL;
+  const gchar *end;
+
+  if (!(data = gst_type_find_peek (tf, 0, 129)))
+    return;
+
+  /* make sure string passed to _autodetect() is NUL-terminated */
+  str = g_malloc0 (129);
+  memcpy (str, data, 128);
+
+  if ((encoding = detect_encoding (str, 128)) != NULL) {
+    gchar *converted_str;
+    GError *err = NULL;
+    gsize tmp;
+
+    converted_str = gst_convert_to_utf8 (str, 128, encoding, &tmp, &err);
+    if (converted_str == NULL) {
+      GST_DEBUG ("Encoding '%s' detected but conversion failed: %s", encoding,
+          err->message);
+      g_error_free (err);
+      g_free (encoding);
+    } else {
+      g_free (str);
+      str = converted_str;
+      g_free (encoding);
+    }
+  }
+
+  /* Check if at least the first 120 chars are valid UTF8,
+   * otherwise convert as always */
+  if (!g_utf8_validate (str, 128, &end) && (end - str) < 120) {
+    gchar *converted_str;
+    GError *err = NULL;
+    gsize tmp;
+    const gchar *enc;
+
+    enc = g_getenv ("GST_SUBTITLE_ENCODING");
+    if (enc == NULL || *enc == '\0') {
+      /* if local encoding is UTF-8 and no encoding specified
+       * via the environment variable, assume ISO-8859-15 */
+      if (g_get_charset (&enc)) {
+        enc = "ISO-8859-15";
+      }
+    }
+    converted_str = gst_convert_to_utf8 (str, 128, enc, &tmp, &err);
+    if (converted_str != NULL) {
+      g_free (str);
+      str = converted_str;
+    }
+  }
+
+  format = gst_sub_parse_data_format_autodetect (str);
+  g_free (str);
+
+  switch (format) {
+    case GST_SUB_PARSE_FORMAT_MDVDSUB:
+      GST_DEBUG ("MicroDVD format detected");
+      caps = SUB_CAPS;
+      break;
+    case GST_SUB_PARSE_FORMAT_SUBRIP:
+      GST_DEBUG ("SubRip format detected");
+      caps = SUB_CAPS;
+      break;
+    case GST_SUB_PARSE_FORMAT_MPSUB:
+      GST_DEBUG ("MPSub format detected");
+      caps = SUB_CAPS;
+      break;
+#ifndef GST_DISABLE_XML
+    case GST_SUB_PARSE_FORMAT_SAMI:
+      GST_DEBUG ("SAMI (time-based) format detected");
+      caps = SAMI_CAPS;
+      break;
+#endif
+    case GST_SUB_PARSE_FORMAT_TMPLAYER:
+      GST_DEBUG ("TMPlayer (time based) format detected");
+      caps = TMP_CAPS;
+      break;
+      /* FIXME: our MPL2 typefinding is not really good enough to warrant
+       * returning a high probability (however, since we registered our
+       * typefinder here with a rank of MARGINAL we should pretty much only
+       * be called if most other typefinders have already run */
+    case GST_SUB_PARSE_FORMAT_MPL2:
+      GST_DEBUG ("MPL2 (time based) format detected");
+      caps = MPL2_CAPS;
+      break;
+    case GST_SUB_PARSE_FORMAT_SUBVIEWER:
+      GST_DEBUG ("SubViewer format detected");
+      caps = SUB_CAPS;
+      break;
+    case GST_SUB_PARSE_FORMAT_DKS:
+      GST_DEBUG ("DKS format detected");
+      caps = DKS_CAPS;
+      break;
+    case GST_SUB_PARSE_FORMAT_QTTEXT:
+      GST_DEBUG ("QTtext format detected");
+      caps = QTTEXT_CAPS;
+      break;
+    default:
+    case GST_SUB_PARSE_FORMAT_UNKNOWN:
+      GST_DEBUG ("no subtitle format detected");
+      return;
+  }
+
+  /* if we're here, it's ok */
+  gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, caps);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  static const gchar *sub_exts[] =
+      { "srt", "sub", "mpsub", "mdvd", "smi", "txt", "dks", NULL };
+
+  GST_DEBUG_CATEGORY_INIT (sub_parse_debug, "subparse", 0, ".sub parser");
+
+  if (!gst_type_find_register (plugin, "subparse_typefind", GST_RANK_MARGINAL,
+          gst_subparse_type_find, (gchar **) sub_exts, SUB_CAPS, NULL, NULL))
+    return FALSE;
+
+  if (!gst_element_register (plugin, "subparse",
+          GST_RANK_PRIMARY, GST_TYPE_SUBPARSE) ||
+      !gst_element_register (plugin, "ssaparse",
+          GST_RANK_PRIMARY, GST_TYPE_SSA_PARSE)) {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "subparse",
+    "Subtitle parsing",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/subparse/gstsubparse.h b/gst/subparse/gstsubparse.h
new file mode 100644
index 0000000..93c1968
--- /dev/null
+++ b/gst/subparse/gstsubparse.h
@@ -0,0 +1,119 @@
+/* GStreamer
+ * Copyright (C) <2002> David A. Schleef <ds@schleef.org>
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_SUBPARSE_H__
+#define __GST_SUBPARSE_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+GST_DEBUG_CATEGORY_EXTERN (sub_parse_debug);
+#define GST_CAT_DEFAULT sub_parse_debug
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SUBPARSE \
+  (gst_sub_parse_get_type ())
+#define GST_SUBPARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SUBPARSE, GstSubParse))
+#define GST_SUBPARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SUBPARSE, GstSubParseClass))
+#define GST_IS_SUBPARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SUBPARSE))
+#define GST_IS_SUBPARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SUBPARSE))
+
+typedef struct _GstSubParse GstSubParse;
+typedef struct _GstSubParseClass GstSubParseClass;
+
+/* format enum */
+typedef enum
+{
+  GST_SUB_PARSE_FORMAT_UNKNOWN = 0,
+  GST_SUB_PARSE_FORMAT_MDVDSUB = 1,
+  GST_SUB_PARSE_FORMAT_SUBRIP = 2,
+  GST_SUB_PARSE_FORMAT_MPSUB = 3,
+  GST_SUB_PARSE_FORMAT_SAMI = 4,
+  GST_SUB_PARSE_FORMAT_TMPLAYER = 5,
+  GST_SUB_PARSE_FORMAT_MPL2 = 6,
+  GST_SUB_PARSE_FORMAT_SUBVIEWER = 7,
+  GST_SUB_PARSE_FORMAT_DKS = 8,
+  GST_SUB_PARSE_FORMAT_QTTEXT = 9
+} GstSubParseFormat;
+
+typedef struct {
+  int      state;
+  GString *buf;
+  guint64  start_time;
+  guint64  duration;
+  guint64  max_duration; /* to clamp duration, 0 = no limit (used by tmplayer parser) */
+  GstSegment *segment;
+  gpointer user_data;
+  gboolean have_internal_fps; /* If TRUE don't overwrite fps by property */
+  gint fps_n, fps_d;     /* used by frame based parsers */
+} ParserState;
+
+typedef gchar* (*Parser) (ParserState *state, const gchar *line);
+
+struct _GstSubParse {
+  GstElement element;
+
+  GstPad *sinkpad,*srcpad;
+
+  /* contains the input in the input encoding */
+  GstAdapter *adapter;
+  /* contains the UTF-8 decoded input */
+  GString *textbuf;
+
+  GstSubParseFormat parser_type;
+  gboolean parser_detected;
+  const gchar *subtitle_codec;
+
+  Parser parse_line;
+  ParserState state;
+
+  /* seek */
+  guint64 offset;
+  guint64 next_offset;
+  
+  /* Segment */
+  GstSegment    segment;
+  gboolean      need_segment;
+  
+  gboolean flushing;
+  gboolean valid_utf8;
+  gchar   *detected_encoding;
+  gchar   *encoding;
+
+  gboolean first_buffer;
+
+  /* used by frame based parsers */
+  gint fps_n, fps_d;          
+};
+
+struct _GstSubParseClass {
+  GstElementClass parent_class;
+};
+
+GType gst_sub_parse_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_SUBPARSE_H__ */
diff --git a/gst/subparse/mpl2parse.c b/gst/subparse/mpl2parse.c
new file mode 100644
index 0000000..b043064
--- /dev/null
+++ b/gst/subparse/mpl2parse.c
@@ -0,0 +1,107 @@
+/* GStreamer mpl2 format subtitle parser
+ * Copyright (C) 2006 Kamil Pawlowski <kamilpe gmail com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "mpl2parse.h"
+
+#include <stdio.h>
+#include <string.h>
+
+/* From http://lists.mplayerhq.hu/pipermail/mplayer-users/2003-February/030222.html
+ *
+ * [123][456] Sample subtitle
+ * [1234][5678] Line 1|Line 2
+ * [12345][67890] /Italic|Normal
+ * [12345][67890] /Italic|/Italic
+ * [12345][67890] Normal|/Italic 
+ *
+ * (The space between the last ']' bracket and the text appears to be optional)
+ */
+
+static gchar *
+mpl2_parse_line (ParserState * state, const gchar * line, guint line_num)
+{
+  GString *markup;
+  gint dc_start, dc_stop;
+
+  /* parse subtitle file line */
+  if (sscanf (line, "[%u][%u]", &dc_start, &dc_stop) != 2) {
+    GST_WARNING ("failed to extract timestamps for line '%s'", line);
+    return NULL;
+  }
+
+  GST_LOG ("line format %u %u", dc_start, dc_stop);
+  state->start_time = GST_SECOND / 10 * dc_start;
+  state->duration = (GST_SECOND / 10 * dc_stop) - state->start_time;
+
+  /* skip brackets with timestamps */
+  line = strchr (line, ']') + 1;
+  line = strchr (line, ']') + 1;
+
+  markup = g_string_new (NULL);
+
+  while (1) {
+    const gchar *sep;
+    gchar *line_chunk_escaped;
+    gboolean italics;
+
+    /* skip leading white spaces */
+    while (*line == ' ' || *line == '\t')
+      ++line;
+
+    /* a '/' at the beginning indicates italics */
+    if (*line == '/') {
+      italics = TRUE;
+      g_string_append (markup, "<i>");
+      ++line;
+    } else {
+      italics = FALSE;
+    }
+
+    if ((sep = strchr (line, '|')))
+      line_chunk_escaped = g_markup_escape_text (line, sep - line);
+    else
+      line_chunk_escaped = g_markup_escape_text (line, -1);
+
+    GST_LOG ("escaped line: %s", line_chunk_escaped);
+    g_string_append (markup, line_chunk_escaped);
+
+    g_free (line_chunk_escaped);
+
+    if (italics)
+      g_string_append (markup, "</i>");
+    if (sep == NULL)
+      break;
+
+    /* move after the '|' and append another line */
+    g_string_append (markup, "\n");
+    line = sep + 1;
+  }
+
+  return g_strstrip (g_string_free (markup, FALSE));
+}
+
+gchar *
+parse_mpl2 (ParserState * state, const gchar * line)
+{
+  gchar *ret;
+
+  ret = mpl2_parse_line (state, line, state->state);
+  ++state->state;
+  return ret;
+}
diff --git a/gst/subparse/mpl2parse.h b/gst/subparse/mpl2parse.h
new file mode 100644
index 0000000..aed62c0
--- /dev/null
+++ b/gst/subparse/mpl2parse.h
@@ -0,0 +1,32 @@
+/* GStreamer mpl2 format subtitle parser
+ * Copyright (C) 2006 Kamil Pawlowski <kamilpe gmail com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _MPL2_PARSE_H_
+#define _MPL2_PARSE_H_
+
+#include "gstsubparse.h"
+
+G_BEGIN_DECLS
+
+gchar * parse_mpl2 (ParserState * state, const gchar * line);
+
+G_END_DECLS
+
+#endif /* _MPL2_PARSE_H_ */
+
diff --git a/gst/subparse/qttextparse.c b/gst/subparse/qttextparse.c
new file mode 100644
index 0000000..b48daf9
--- /dev/null
+++ b/gst/subparse/qttextparse.c
@@ -0,0 +1,453 @@
+/* GStreamer QTtext subtitle parser
+ * Copyright (c) 2009 Thiago Santos <thiago.sousa.santos collabora co uk>>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* References:
+ * http://www.apple.com/quicktime/tutorials/texttracks.html
+ * http://www.apple.com/quicktime/tutorials/textdescriptors.html
+ */
+
+#include "qttextparse.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MIN_TO_NSEC  (60 * GST_SECOND)
+#define HOUR_TO_NSEC (60 * MIN_TO_NSEC)
+
+#define GST_QTTEXT_CONTEXT(state) ((GstQTTextContext *) (state)->user_data)
+
+typedef struct _GstQTTextContext GstQTTextContext;
+
+struct _GstQTTextContext
+{
+  /* timing variables */
+  gint timescale;
+  gboolean absolute;
+  guint64 start_time;
+
+  gboolean markup_open;
+  gboolean need_markup;
+
+  gchar *font;
+  gint font_size;
+  gchar *bg_color;
+  gchar *fg_color;
+
+  gboolean bold;
+  gboolean italic;
+};
+
+void
+qttext_context_init (ParserState * state)
+{
+  GstQTTextContext *context;
+
+  state->user_data = g_new0 (GstQTTextContext, 1);
+
+  context = GST_QTTEXT_CONTEXT (state);
+
+  /* we use 1000 as a default */
+  context->timescale = 1000;
+  context->absolute = TRUE;
+
+  context->markup_open = FALSE;
+  context->need_markup = FALSE;
+
+  context->font_size = 12;
+}
+
+void
+qttext_context_deinit (ParserState * state)
+{
+  if (state->user_data != NULL) {
+    GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+    g_free (context->font);
+    g_free (context->bg_color);
+    g_free (context->fg_color);
+
+    g_free (state->user_data);
+    state->user_data = NULL;
+  }
+}
+
+/*
+ * Reads the string right after the ':'
+ */
+static gchar *
+read_str (const gchar * line, const gchar * end)
+{
+  gint index = 0;
+
+  while (line[index] != ':' && line[index] != '}') {
+    index++;
+  }
+  if (line[index] != ':')
+    return NULL;
+  index++;
+  while (line[index] == ' ')
+    index++;
+
+  return g_strndup (line + index, (end - (line + index)));
+}
+
+/* search for the ':' and parse the number right after it */
+static gint
+read_int (const gchar * line)
+{
+  gint index = 0;
+  while (line[index] != ':' && line[index] != '}') {
+    index++;
+  }
+  if (line[index] != ':')
+    return 0;
+  index++;
+  return atoi (line + index);
+}
+
+/* skip the ':' and then match the following string
+ * with 'match', but only if it before 'upto' */
+static gboolean
+string_match (const gchar * line, const gchar * match, const gchar * upto)
+{
+  gchar *result = strstr (line, match);
+  return (result < upto);
+}
+
+/*
+ * Reads the color values and stores them in r, g and b.
+ */
+static gboolean
+read_color (const gchar * line, gint * r, gint * g, gint * b)
+{
+  gint index = 0;
+  while (line[index] != ':' && line[index] != '}') {
+    index++;
+  }
+  if (line[index] != ':')
+    return FALSE;
+  index++;
+
+  *r = atoi (line + index);
+
+  while (line[index] != '}' && line[index] != ',') {
+    index++;
+  }
+  if (line[index] != ',')
+    return FALSE;
+  index++;
+
+  *g = atoi (line + index);
+
+  while (line[index] != '}' && line[index] != ',') {
+    index++;
+  }
+  if (line[index] != ',')
+    return FALSE;
+  index++;
+
+  *b = atoi (line + index);
+
+  return TRUE;
+}
+
+static gchar *
+make_color (gint r, gint g, gint b)
+{
+  /* qttext goes up to 65535, while pango goes to 255 */
+  r /= 256;
+  g /= 256;
+  b /= 256;
+  return g_strdup_printf ("#%02X%02X%02X", r, g, b);
+}
+
+static gboolean
+qttext_parse_tag (ParserState * state, const gchar * line, gint * index)
+{
+  gchar *next;
+  gint next_index;
+  gint aux;
+  gchar *str;
+  gint r, g, b;
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+
+  g_assert (line[*index] == '{');
+
+  next = strchr (line + *index, '}');
+  if (next == NULL) {
+    goto error_out;
+  } else {
+    next_index = 1 + (next - line);
+  }
+  g_assert (line[next_index - 1] == '}');
+
+  *index = *index + 1;          /* skip the { */
+
+  /* now identify our tag */
+  /* FIXME: those should be case unsensitive */
+  /* TODO: there are other tags that could be added here */
+  if (strncmp (line + *index, "QTtext", 6) == 0) {
+    /* NOP */
+
+  } else if (strncmp (line + *index, "font", 4) == 0) {
+    str = read_str (line + *index + 4, line + next_index - 1);
+    if (str) {
+      g_free (context->font);
+      context->font = str;
+      context->need_markup = TRUE;
+      GST_DEBUG ("Setting qttext font to %s", str);
+    } else {
+      GST_WARNING ("Failed to parse qttext font at line: %s", line);
+    }
+
+  } else if (strncmp (line + *index, "size", 4) == 0) {
+    aux = read_int (line + *index + 4);
+    if (aux == 0) {
+      GST_WARNING ("Invalid size at line %s, using 12", line);
+      context->font_size = 12;
+    } else {
+      GST_DEBUG ("Setting qttext font-size to: %d", aux);
+      context->font_size = aux;
+    }
+    context->need_markup = TRUE;
+
+  } else if (strncmp (line + *index, "textColor", 9) == 0) {
+    if (read_color (line + *index + 9, &r, &g, &b)) {
+      context->fg_color = make_color (r, g, b);
+      GST_DEBUG ("Setting qttext fg color to %s", context->fg_color);
+    } else {
+      GST_WARNING ("Failed to read textColor at line %s", line);
+    }
+    context->need_markup = TRUE;
+
+  } else if (strncmp (line + *index, "backColor", 9) == 0) {
+    if (read_color (line + *index + 9, &r, &g, &b)) {
+      context->bg_color = make_color (r, g, b);
+      GST_DEBUG ("Setting qttext bg color to %s", context->bg_color);
+    } else {
+      GST_WARNING ("Failed to read backColor at line %s, disabling", line);
+      g_free (context->bg_color);
+      context->bg_color = NULL;
+    }
+    context->need_markup = TRUE;
+
+  } else if (strncmp (line + *index, "plain", 5) == 0) {
+    context->bold = FALSE;
+    context->italic = FALSE;
+    context->need_markup = TRUE;
+    GST_DEBUG ("Setting qttext style to plain");
+
+  } else if (strncmp (line + *index, "bold", 4) == 0) {
+    context->bold = TRUE;
+    context->italic = FALSE;
+    context->need_markup = TRUE;
+    GST_DEBUG ("Setting qttext style to bold");
+
+  } else if (strncmp (line + *index, "italic", 6) == 0) {
+    context->bold = FALSE;
+    context->italic = TRUE;
+    context->need_markup = TRUE;
+    GST_DEBUG ("Setting qttext style to italic");
+
+  } else if (strncmp (line + *index, "timescale", 9) == 0) {
+    aux = read_int (line + *index + 9);
+    if (aux == 0) {
+      GST_WARNING ("Couldn't interpret timescale at line %s, using 1000", line);
+      context->timescale = 1000;
+    } else {
+      GST_DEBUG ("Setting qttext timescale to: %d", aux);
+      context->timescale = aux;
+    }
+
+  } else if (strncmp (line + *index, "timestamps", 10) == 0) {
+    if (string_match (line + *index + 10, "relative", line + next_index)) {
+      GST_DEBUG ("Setting qttext timestamps to relative");
+      context->absolute = FALSE;
+    } else {
+      /* call it absolute otherwise */
+      GST_DEBUG ("Setting qttext timestamps to absolute");
+      context->absolute = TRUE;
+    }
+
+  } else {
+    GST_WARNING ("Unused qttext tag starting at: %s", line + *index);
+  }
+
+  *index = next_index;
+  return TRUE;
+
+error_out:
+  {
+    GST_WARNING ("Failed to parse qttext tag at line %s", line);
+    return FALSE;
+  }
+}
+
+static guint64
+qttext_parse_timestamp (ParserState * state, const gchar * line, gint index)
+{
+  int ret;
+  gint hour, min, sec, dec;
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+
+  ret = sscanf (line + index, "[%d:%d:%d.%d]", &hour, &min, &sec, &dec);
+  if (ret != 3 && ret != 4) {
+    /* bad timestamp */
+    GST_WARNING ("Bad qttext timestamp found: %s", line);
+    return 0;
+  }
+
+  if (ret == 3) {
+    /* be forgiving for missing decimal part */
+    dec = 0;
+  }
+
+  /* parse the decimal part according to the timescale */
+  g_assert (context->timescale != 0);
+  dec = (GST_SECOND * dec) / context->timescale;
+
+  /* return the result */
+  return hour * HOUR_TO_NSEC + min * MIN_TO_NSEC + sec * GST_SECOND + dec;
+}
+
+static void
+qttext_open_markup (ParserState * state)
+{
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+
+  g_string_append (state->buf, "<span");
+
+  /* add your markup tags here */
+  if (context->font)
+    g_string_append_printf (state->buf, " font='%s %d'", context->font,
+        context->font_size);
+  else
+    g_string_append_printf (state->buf, " font='%d'", context->font_size);
+
+  if (context->bg_color)
+    g_string_append_printf (state->buf, " bgcolor='%s'", context->bg_color);
+  if (context->fg_color)
+    g_string_append_printf (state->buf, " color='%s'", context->fg_color);
+
+  if (context->bold)
+    g_string_append (state->buf, " weight='bold'");
+  if (context->italic)
+    g_string_append (state->buf, " style='italic'");
+
+  g_string_append (state->buf, ">");
+}
+
+static void
+qttext_prepare_text (ParserState * state)
+{
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+  if (state->buf == NULL) {
+    state->buf = g_string_sized_new (256);      /* this should be enough */
+  } else {
+    g_string_append (state->buf, "\n");
+  }
+
+  /* if needed, add pango markup */
+  if (context->need_markup) {
+    if (context->markup_open) {
+      g_string_append (state->buf, "</span>");
+    }
+    qttext_open_markup (state);
+    context->markup_open = TRUE;
+  }
+}
+
+static void
+qttext_parse_text (ParserState * state, const gchar * line, gint index)
+{
+  qttext_prepare_text (state);
+  g_string_append (state->buf, line + index);
+}
+
+static gchar *
+qttext_get_text (ParserState * state)
+{
+  gchar *ret;
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+  if (state->buf == NULL)
+    return NULL;
+
+  if (context->markup_open) {
+    g_string_append (state->buf, "</span>");
+  }
+  ret = g_string_free (state->buf, FALSE);
+  state->buf = NULL;
+  context->markup_open = FALSE;
+  return ret;
+}
+
+gchar *
+parse_qttext (ParserState * state, const gchar * line)
+{
+  gint i;
+  guint64 ts;
+  gchar *ret = NULL;
+  GstQTTextContext *context = GST_QTTEXT_CONTEXT (state);
+
+  i = 0;
+  while (line[i] != '\0') {
+    /* find first interesting character from 'i' onwards */
+
+    if (line[i] == '{') {
+      /* this is a tag, parse it */
+      if (!qttext_parse_tag (state, line, &i)) {
+        break;
+      }
+    } else if (line[i] == '[') {
+      /* this is a time, convert it to a timestamp */
+      ts = qttext_parse_timestamp (state, line, i);
+
+      /* check if we have pending text to send, in case we prepare it */
+      if (state->buf) {
+        ret = qttext_get_text (state);
+        if (context->absolute)
+          state->duration = ts - context->start_time;
+        else
+          state->duration = ts;
+        state->start_time = context->start_time;
+      }
+      state->buf = NULL;
+
+      if (ts == 0) {
+        /* this is an error */
+      } else {
+        if (context->absolute)
+          context->start_time = ts;
+        else
+          context->start_time += ts;
+      }
+
+      /* we assume there is nothing else on this line */
+      break;
+
+    } else if (line[i] == ' ' || line[i] == '\t') {
+      i++;                      /* NOP */
+    } else {
+      /* this is the actual text, output the rest of the line as it */
+      qttext_parse_text (state, line, i);
+      break;
+    }
+  }
+  return ret;
+}
diff --git a/gst/subparse/qttextparse.h b/gst/subparse/qttextparse.h
new file mode 100644
index 0000000..6d4f393
--- /dev/null
+++ b/gst/subparse/qttextparse.h
@@ -0,0 +1,36 @@
+/* GStreamer QTtext subtitle parser
+ * Copyright (c) 2009  Thiago Santos <thiago.sousa.santos collabora co uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _QTTEXT_PARSE_H_
+#define _QTTEXT_PARSE_H_
+
+#include "gstsubparse.h"
+
+G_BEGIN_DECLS
+
+gchar * parse_qttext          (ParserState * state, const gchar * line);
+
+void    qttext_context_init   (ParserState * state);
+
+void    qttext_context_deinit (ParserState * state);
+
+G_END_DECLS
+
+#endif /* _QTTEXT_PARSE_H_ */
+
diff --git a/gst/subparse/samiparse.c b/gst/subparse/samiparse.c
new file mode 100644
index 0000000..135748a
--- /dev/null
+++ b/gst/subparse/samiparse.c
@@ -0,0 +1,474 @@
+/* GStreamer SAMI subtitle parser
+ * Copyright (c) 2006 Young-Ho Cha <ganadist at chollian net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "samiparse.h"
+
+#include <libxml/HTMLparser.h>
+#include <string.h>
+
+#define ITALIC_TAG 'i'
+#define SPAN_TAG   's'
+#define RUBY_TAG   'r'
+#define RT_TAG     't'
+#define CLEAR_TAG  '0'
+
+typedef struct _GstSamiContext GstSamiContext;
+
+struct _GstSamiContext
+{
+  GString *buf;                 /* buffer to collect content */
+  GString *rubybuf;             /* buffer to collect ruby content */
+  GString *resultbuf;           /* when opening the next 'sync' tag, move
+                                 * from 'buf' to avoid to append following
+                                 * content */
+  GString *state;               /* in many sami files there are tags that
+                                 * are not closed, so for each open tag the
+                                 * parser will append a tag flag here so
+                                 * that tags can be closed properly on
+                                 * 'sync' tags. See _context_push_state()
+                                 * and _context_pop_state(). */
+  htmlParserCtxtPtr htmlctxt;   /* html parser context */
+  gboolean has_result;          /* set when ready to push out result */
+  gboolean in_sync;             /* flag to avoid appending anything except the
+                                 * content of the sync elements to buf */
+  guint64 time1;                /* previous start attribute in sync tag */
+  guint64 time2;                /* current start attribute in sync tag  */
+};
+
+static gchar *
+has_tag (GString * str, const gchar tag)
+{
+  return strrchr (str->str, tag);
+}
+
+static void
+sami_context_push_state (GstSamiContext * sctx, char state)
+{
+  GST_LOG ("state %c", state);
+  g_string_append_c (sctx->state, state);
+}
+
+static void
+sami_context_pop_state (GstSamiContext * sctx, char state)
+{
+  GString *str = g_string_new ("");
+  GString *context_state = sctx->state;
+  int i;
+
+  GST_LOG ("state %c", state);
+  for (i = context_state->len - 1; i >= 0; i--) {
+    switch (context_state->str[i]) {
+      case ITALIC_TAG:         /* <i> */
+      {
+        g_string_append (str, "</i>");
+        break;
+      }
+      case SPAN_TAG:           /* <span foreground= > */
+      {
+        g_string_append (str, "</span>");
+        break;
+      }
+      case RUBY_TAG:           /* <span size= >  -- ruby */
+      {
+        break;
+      }
+      case RT_TAG:             /*  ruby */
+      {
+        /* FIXME: support for furigana/ruby once implemented in pango */
+        g_string_append (sctx->rubybuf, "</span>");
+        if (has_tag (context_state, ITALIC_TAG)) {
+          g_string_append (sctx->rubybuf, "</i>");
+        }
+
+        break;
+      }
+      default:
+        break;
+    }
+    if (context_state->str[i] == state) {
+      g_string_append (sctx->buf, str->str);
+      g_string_free (str, TRUE);
+      g_string_truncate (context_state, i);
+      return;
+    }
+  }
+  if (state == CLEAR_TAG) {
+    g_string_append (sctx->buf, str->str);
+    g_string_truncate (context_state, 0);
+  }
+  g_string_free (str, TRUE);
+}
+
+static void
+handle_start_sync (GstSamiContext * sctx, const xmlChar ** atts)
+{
+  int i;
+
+  sami_context_pop_state (sctx, CLEAR_TAG);
+  if (atts != NULL) {
+    for (i = 0; (atts[i] != NULL); i += 2) {
+      const xmlChar *key, *value;
+
+      key = atts[i];
+      value = atts[i + 1];
+
+      if (!value)
+        continue;
+      if (!xmlStrncmp ((const xmlChar *) "start", key, 5)) {
+        /* Only set a new start time if we don't have text pending */
+        if (sctx->resultbuf->len == 0)
+          sctx->time1 = sctx->time2;
+
+        sctx->time2 = atoi ((const char *) value) * GST_MSECOND;
+        g_string_append (sctx->resultbuf, sctx->buf->str);
+        sctx->has_result = (sctx->resultbuf->len != 0) ? TRUE : FALSE;
+        g_string_truncate (sctx->buf, 0);
+      }
+    }
+  }
+}
+
+static void
+handle_start_font (GstSamiContext * sctx, const xmlChar ** atts)
+{
+  int i;
+
+  sami_context_pop_state (sctx, SPAN_TAG);
+  if (atts != NULL) {
+    g_string_append (sctx->buf, "<span");
+    for (i = 0; (atts[i] != NULL); i += 2) {
+      const xmlChar *key, *value;
+
+      key = atts[i];
+      value = atts[i + 1];
+
+      if (!value)
+        continue;
+      if (!xmlStrncmp ((const xmlChar *) "color", key, 5)) {
+        /*
+         * There are invalid color value in many
+         * sami files.
+         * It will fix hex color value that start without '#'
+         */
+        const gchar *sharp = "";
+        int len = xmlStrlen (value);
+
+        if (!(*value == '#' && len == 7)) {
+          gchar *r;
+
+          /* check if it looks like hex */
+          if (strtol ((const char *) value, &r, 16) >= 0 &&
+              ((xmlChar *) r == (value + 6) && len == 6)) {
+            sharp = "#";
+          }
+        }
+        /* some colours can be found in many sami files, but X RGB database
+         * doesn't contain a colour by this name, so map explicitly */
+        if (!xmlStrncasecmp (value, (const xmlChar *) "aqua", len)) {
+          value = (const xmlChar *) "#00ffff";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "crimson", len)) {
+          value = (const xmlChar *) "#dc143c";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "fuchsia", len)) {
+          value = (const xmlChar *) "#ff00ff";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "indigo", len)) {
+          value = (const xmlChar *) "#4b0082";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "lime", len)) {
+          value = (const xmlChar *) "#00ff00";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "olive", len)) {
+          value = (const xmlChar *) "#808000";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "silver", len)) {
+          value = (const xmlChar *) "#c0c0c0";
+        } else if (!xmlStrncasecmp (value, (const xmlChar *) "teal", len)) {
+          value = (const xmlChar *) "#008080";
+        }
+        g_string_append_printf (sctx->buf, " foreground=\"%s%s\"", sharp,
+            value);
+      } else if (!xmlStrncasecmp ((const xmlChar *) "face", key, 4)) {
+        g_string_append_printf (sctx->buf, " font_family=\"%s\"", value);
+      }
+    }
+    g_string_append_c (sctx->buf, '>');
+    sami_context_push_state (sctx, SPAN_TAG);
+  }
+}
+
+static void
+start_sami_element (void *ctx, const xmlChar * name, const xmlChar ** atts)
+{
+  GstSamiContext *sctx = (GstSamiContext *) ctx;
+
+  GST_LOG ("name:%s", name);
+
+  if (!xmlStrncmp ((const xmlChar *) "sync", name, 4)) {
+    handle_start_sync (sctx, atts);
+    sctx->in_sync = TRUE;
+  } else if (!xmlStrncmp ((const xmlChar *) "font", name, 4)) {
+    handle_start_font (sctx, atts);
+  } else if (!xmlStrncmp ((const xmlChar *) "ruby", name, 4)) {
+    sami_context_push_state (sctx, RUBY_TAG);
+  } else if (!xmlStrncmp ((const xmlChar *) "br", name, 2)) {
+    g_string_append_c (sctx->buf, '\n');
+    /* FIXME: support for furigana/ruby once implemented in pango */
+  } else if (!xmlStrncmp ((const xmlChar *) "rt", name, 2)) {
+    if (has_tag (sctx->state, ITALIC_TAG)) {
+      g_string_append (sctx->rubybuf, "<i>");
+    }
+    g_string_append (sctx->rubybuf, "<span size='xx-small' rise='-100'>");
+    sami_context_push_state (sctx, RT_TAG);
+  } else if (!xmlStrncmp ((const xmlChar *) "p", name, 1)) {
+  } else if (!xmlStrncmp ((const xmlChar *) "i", name, 1)) {
+    g_string_append (sctx->buf, "<i>");
+    sami_context_push_state (sctx, ITALIC_TAG);
+  }
+}
+
+static void
+end_sami_element (void *ctx, const xmlChar * name)
+{
+  GstSamiContext *sctx = (GstSamiContext *) ctx;
+
+  GST_LOG ("name:%s", name);
+
+  if (!xmlStrncmp ((const xmlChar *) "sync", name, 4)) {
+    sctx->in_sync = FALSE;
+  } else if ((!xmlStrncmp ((const xmlChar *) "body", name, 4)) ||
+      (!xmlStrncmp ((const xmlChar *) "sami", name, 4))) {
+    /* We will usually have one buffer left when the body is closed
+     * as we need the next sync to actually send it */
+    if (sctx->buf->len != 0) {
+      /* Only set a new start time if we don't have text pending */
+      if (sctx->resultbuf->len == 0)
+        sctx->time1 = sctx->time2;
+
+      sctx->time2 = GST_CLOCK_TIME_NONE;
+      g_string_append (sctx->resultbuf, sctx->buf->str);
+      sctx->has_result = (sctx->resultbuf->len != 0) ? TRUE : FALSE;
+      g_string_truncate (sctx->buf, 0);
+    }
+  } else if (!xmlStrncmp ((const xmlChar *) "font", name, 4)) {
+    sami_context_pop_state (sctx, SPAN_TAG);
+  } else if (!xmlStrncmp ((const xmlChar *) "ruby", name, 4)) {
+    sami_context_pop_state (sctx, RUBY_TAG);
+  } else if (!xmlStrncmp ((const xmlChar *) "i", name, 1)) {
+    sami_context_pop_state (sctx, ITALIC_TAG);
+  }
+}
+
+static void
+characters_sami (void *ctx, const xmlChar * ch, int len)
+{
+  GstSamiContext *sctx = (GstSamiContext *) ctx;
+  gchar *escaped;
+  gchar *tmp;
+  gint i;
+
+  /* Skip everything except content of the sync elements */
+  if (!sctx->in_sync)
+    return;
+
+  escaped = g_markup_escape_text ((const gchar *) ch, len);
+  g_strstrip (escaped);
+
+  /* Remove double spaces forom the string as those are
+   * usually added by newlines and indention */
+  tmp = escaped;
+  for (i = 0; i <= strlen (escaped); i++) {
+    escaped[i] = *tmp;
+    if (*tmp != ' ') {
+      tmp++;
+      continue;
+    }
+    while (*tmp == ' ')
+      tmp++;
+  }
+
+  if (has_tag (sctx->state, RT_TAG)) {
+    g_string_append_c (sctx->rubybuf, ' ');
+    g_string_append (sctx->rubybuf, escaped);
+    g_string_append_c (sctx->rubybuf, ' ');
+  } else {
+    g_string_append (sctx->buf, escaped);
+  }
+  g_free (escaped);
+}
+
+static xmlSAXHandler samiSAXHandlerStruct = {
+  NULL,                         /* internalSubset */
+  NULL,                         /* isStandalone */
+  NULL,                         /* hasInternalSubset */
+  NULL,                         /* hasExternalSubset */
+  NULL,                         /* resolveEntity */
+  NULL,                         /* getEntity */
+  NULL,                         /* entityDecl */
+  NULL,                         /* notationDecl */
+  NULL,                         /* attributeDecl */
+  NULL,                         /* elementDecl */
+  NULL,                         /* unparsedEntityDecl */
+  NULL,                         /* setDocumentLocator */
+  NULL,                         /* startDocument */
+  NULL,                         /* endDocument */
+  start_sami_element,           /* startElement */
+  end_sami_element,             /* endElement */
+  NULL,                         /* reference */
+  characters_sami,              /* characters */
+  NULL,                         /* ignorableWhitespace */
+  NULL,                         /* processingInstruction */
+  NULL,                         /* comment */
+  NULL,                         /* xmlParserWarning */
+  NULL,                         /* xmlParserError */
+  NULL,                         /* xmlParserError */
+  NULL,                         /* getParameterEntity */
+  NULL,                         /* cdataBlock */
+  NULL,                         /* externalSubset */
+  1,                            /* initialized */
+  NULL,                         /* private */
+  NULL,                         /* startElementNsSAX2Func */
+  NULL,                         /* endElementNsSAX2Func */
+  NULL                          /* xmlStructuredErrorFunc */
+};
+
+static xmlSAXHandlerPtr samiSAXHandler = &samiSAXHandlerStruct;
+
+void
+sami_context_init (ParserState * state)
+{
+  GstSamiContext *context;
+
+  g_assert (state->user_data == NULL);
+  state->user_data = (gpointer) g_new0 (GstSamiContext, 1);
+  context = (GstSamiContext *) state->user_data;
+
+  context->htmlctxt = htmlCreatePushParserCtxt (samiSAXHandler, context,
+      "", 0, NULL, XML_CHAR_ENCODING_UTF8);
+  context->buf = g_string_new ("");
+  context->rubybuf = g_string_new ("");
+  context->resultbuf = g_string_new ("");
+  context->state = g_string_new ("");
+}
+
+void
+sami_context_deinit (ParserState * state)
+{
+  GstSamiContext *context = (GstSamiContext *) state->user_data;
+
+  if (context) {
+    htmlParserCtxtPtr htmlctxt = context->htmlctxt;
+
+    /* destroy sax context */
+    htmlDocPtr doc;
+
+    htmlParseChunk (htmlctxt, "", 0, 1);
+    doc = htmlctxt->myDoc;
+    htmlFreeParserCtxt (htmlctxt);
+    context->htmlctxt = NULL;
+    if (doc)
+      xmlFreeDoc (doc);
+    g_string_free (context->buf, TRUE);
+    g_string_free (context->rubybuf, TRUE);
+    g_string_free (context->resultbuf, TRUE);
+    g_string_free (context->state, TRUE);
+    g_free (context);
+    state->user_data = NULL;
+  }
+}
+
+void
+sami_context_reset (ParserState * state)
+{
+  GstSamiContext *context = (GstSamiContext *) state->user_data;
+
+  if (context) {
+    g_string_truncate (context->buf, 0);
+    g_string_truncate (context->rubybuf, 0);
+    g_string_truncate (context->resultbuf, 0);
+    g_string_truncate (context->state, 0);
+    context->has_result = FALSE;
+    context->in_sync = FALSE;
+    context->time1 = 0;
+    context->time2 = 0;
+  }
+}
+
+static gchar *
+fix_invalid_entities (const gchar * line)
+{
+  const gchar *cp, *pp;         /* current pointer, previous pointer */
+  gssize size;
+  GString *ret = g_string_new (NULL);
+
+  pp = line;
+  cp = strchr (line, '&');
+  while (cp) {
+    size = cp - pp;
+    ret = g_string_append_len (ret, pp, size);
+    cp++;
+    if (g_ascii_strncasecmp (cp, "nbsp;", 5)
+        && (!g_ascii_strncasecmp (cp, "nbsp", 4))) {
+      /* translate "&nbsp" to "&nbsp;" */
+      ret = g_string_append_len (ret, "&nbsp;", 6);
+      cp += 4;
+    } else if (g_ascii_strncasecmp (cp, "quot;", 5)
+        && g_ascii_strncasecmp (cp, "amp;", 4)
+        && g_ascii_strncasecmp (cp, "apos;", 5)
+        && g_ascii_strncasecmp (cp, "lt;", 3)
+        && g_ascii_strncasecmp (cp, "gt;", 3)
+        && g_ascii_strncasecmp (cp, "nbsp;", 5)
+        && cp[0] != '#') {
+      /* translate "&" to "&amp;" */
+      ret = g_string_append_len (ret, "&amp;", 5);
+    } else {
+      /* do not translate */
+      ret = g_string_append_c (ret, '&');
+    }
+
+    pp = cp;
+    cp = strchr (pp, '&');
+  }
+  ret = g_string_append (ret, pp);
+  return g_string_free (ret, FALSE);
+}
+
+gchar *
+parse_sami (ParserState * state, const gchar * line)
+{
+  gchar *fixed_line;
+  GstSamiContext *context = (GstSamiContext *) state->user_data;
+
+  fixed_line = fix_invalid_entities (line);
+  htmlParseChunk (context->htmlctxt, fixed_line, strlen (fixed_line), 0);
+  g_free (fixed_line);
+
+  if (context->has_result) {
+    gchar *r;
+
+    if (context->rubybuf->len) {
+      context->rubybuf = g_string_append_c (context->rubybuf, '\n');
+      g_string_prepend (context->resultbuf, context->rubybuf->str);
+      context->rubybuf = g_string_truncate (context->rubybuf, 0);
+    }
+
+    r = g_string_free (context->resultbuf, FALSE);
+    context->resultbuf = g_string_new ("");
+    state->start_time = context->time1;
+    state->duration = context->time2 - context->time1;
+    context->has_result = FALSE;
+    return r;
+  }
+  return NULL;
+}
diff --git a/gst/subparse/samiparse.h b/gst/subparse/samiparse.h
new file mode 100644
index 0000000..a45de01
--- /dev/null
+++ b/gst/subparse/samiparse.h
@@ -0,0 +1,38 @@
+/* GStreamer SAMI subtitle parser
+ * Copyright (c) 2006  Young-Ho Cha <ganadist chollian net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _SAMI_PARSE_H_
+#define _SAMI_PARSE_H_
+
+#include "gstsubparse.h"
+
+G_BEGIN_DECLS
+
+gchar * parse_sami          (ParserState * state, const gchar * line);
+
+void    sami_context_init   (ParserState * state);
+
+void    sami_context_deinit (ParserState * state);
+
+void    sami_context_reset  (ParserState * state);
+
+G_END_DECLS
+
+#endif /* _SAMI_PARSE_H_ */
+
diff --git a/gst/subparse/tmplayerparse.c b/gst/subparse/tmplayerparse.c
new file mode 100644
index 0000000..3937de6
--- /dev/null
+++ b/gst/subparse/tmplayerparse.c
@@ -0,0 +1,154 @@
+/* GStreamer tmplayer format subtitle parser
+ * Copyright (C) 2006-2008 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "tmplayerparse.h"
+
+#include <stdio.h>
+#include <string.h>
+
+/* From http://forum.doom9.org/archive/index.php/t-81059.html:
+ * 
+ * TMPlayer format, which comes in five varieties:
+ * 
+ * time-base 00:00:00:
+ * 00:00:50:This is the Earth at a time|when the dinosaurs roamed...
+ * 00:00:53:
+ * 00:00:54:a lush and fertile planet.
+ * 00:00:56:
+ * 
+ * time-base 0:00:00:
+ * 0:00:50:This is the Earth at a time|when the dinosaurs roamed...
+ * 0:00:53:
+ * 0:00:54:a lush and fertile planet.
+ * 0:00:56:
+ * 
+ * time-base 00:00:00=
+ * 00:00:50=This is the Earth at a time|when the dinosaurs roamed...
+ * 00:00:53=
+ * 00:00:54=a lush and fertile planet.
+ * 00:00:56=
+ * 
+ * time-base 0:00:00=
+ * 0:00:50=This is the Earth at a time|when the dinosaurs roamed...
+ * 0:00:53=
+ * 0:00:54=a lush and fertile planet.
+ * 0:00:56=
+ * 
+ * and multiline time-base 00:00:00,1=
+ * 00:00:50,1=This is the Earth at a time
+ * 00:00:50,2=when the dinosaurs roamed...
+ * 00:00:53,1=
+ * 00:00:54,1=a lush and fertile planet.
+ * 00:00:56,1=
+ *
+ * --------------------------------------------------------------------------
+ *
+ * And another variety (which is 'time-base 0:00:00:' but without empty lines):
+ *
+ * 00:00:01:This is the Earth at a time|when the dinosaurs roamed...
+ * 00:00:03:a lush and fertile planet.
+ * 00:00:06:More text here
+ * 00:00:12:Yet another line
+ *
+ */
+
+static gchar *
+tmplayer_process_buffer (ParserState * state)
+{
+  gchar *ret;
+
+  ret = g_strndup (state->buf->str, state->buf->len);
+  g_strdelimit (ret, "|", '\n');
+  g_string_truncate (state->buf, 0);
+  return ret;
+}
+
+static gchar *
+tmplayer_parse_line (ParserState * state, const gchar * line, guint line_num)
+{
+  GstClockTime ts = GST_CLOCK_TIME_NONE;
+  const gchar *text_start = NULL;
+  gchar *ret = NULL;
+  gchar divc = '\0';
+  guint h, m, s, l = 1;
+
+  if (sscanf (line, "%u:%02u:%02u,%u%c", &h, &m, &s, &l, &divc) == 5 &&
+      (divc == '=')) {
+    GST_LOG ("multiline format %u %u %u %u", h, m, s, l);
+    ts = GST_SECOND * ((((h * 60) + m) * 60) + s);
+    text_start = strchr (line, '=');
+  } else if (sscanf (line, "%u:%02u:%02u%c", &h, &m, &s, &divc) == 4 &&
+      (divc == '=' || divc == ':')) {
+    GST_LOG ("single line format %u %u %u %u %c", h, m, s, l, divc);
+    ts = GST_SECOND * ((((h * 60) + m) * 60) + s);
+    text_start = strchr (line + 6, divc);
+  } else if (line[0] == '\0' && state->buf->len > 0 &&
+      GST_CLOCK_TIME_IS_VALID (state->start_time)) {
+    /* if we get an empty line (could be the end of the file, but doesn't have
+     * to be), just push whatever is still in the buffer without a duration */
+    GST_LOG ("empty line, and there's still text in the buffer");
+    ret = tmplayer_process_buffer (state);
+    state->duration = GST_CLOCK_TIME_NONE;
+    return ret;
+  } else {
+    GST_WARNING ("failed to parse line: '%s'", line);
+    return NULL;
+  }
+
+  /* if this is a line without text, or the first line in a multiline file,
+   * process and return the data in the buffer, which is the previous line(s) */
+  if (text_start == NULL || text_start[1] == '\0' ||
+      (l == 1 && state->buf->len > 0)) {
+
+    if (GST_CLOCK_TIME_IS_VALID (state->start_time) &&
+        state->start_time < ts && line_num > 0) {
+      ret = tmplayer_process_buffer (state);
+      state->duration = ts - state->start_time;
+      /* ..and append current line's text (if there is any) for the next round.
+       * We don't have to store ts as pending_start_time, since we deduce the
+       * durations from the start times anyway, so as long as the parser just
+       * forwards state->start_time by duration after it pushes the line we
+       * are about to return it will all be good. */
+      g_string_append (state->buf, text_start + 1);
+    } else if (line_num > 0) {
+      GST_WARNING ("end of subtitle unit but no valid start time?!");
+    }
+  } else {
+    if (l > 1)
+      g_string_append_c (state->buf, '\n');
+    g_string_append (state->buf, text_start + 1);
+    state->start_time = ts;
+  }
+
+  GST_LOG ("returning: '%s'", GST_STR_NULL (ret));
+  return ret;
+}
+
+gchar *
+parse_tmplayer (ParserState * state, const gchar * line)
+{
+  gchar *ret;
+
+  /* GST_LOG ("Parsing: %s", line); */
+
+  ret = tmplayer_parse_line (state, line, state->state);
+  ++state->state;
+
+  return ret;
+}
diff --git a/gst/subparse/tmplayerparse.h b/gst/subparse/tmplayerparse.h
new file mode 100644
index 0000000..a0001af
--- /dev/null
+++ b/gst/subparse/tmplayerparse.h
@@ -0,0 +1,32 @@
+/* GStreamer tmplayer format subtitle parser
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _TMPLAYER_PARSE_H_
+#define _TMPLAYER_PARSE_H_
+
+#include "gstsubparse.h"
+
+G_BEGIN_DECLS
+
+gchar * parse_tmplayer          (ParserState * state, const gchar * line);
+
+G_END_DECLS
+
+#endif /* _TMPLAYER_PARSE_H_ */
+
diff --git a/gst/tcp/Makefile.am b/gst/tcp/Makefile.am
new file mode 100644
index 0000000..a970a2b
--- /dev/null
+++ b/gst/tcp/Makefile.am
@@ -0,0 +1,56 @@
+plugin_LTLIBRARIES = libgsttcp.la
+
+# variables used for enum/marshal generation
+glib_enum_headers = gsttcp.h
+glib_enum_define = GST_TCP
+glib_gen_prefix = gst_tcp
+glib_gen_basename = gsttcp
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
+built_sources = gsttcp-enumtypes.c gsttcp-marshal.c
+built_headers = gsttcp-enumtypes.h gsttcp-marshal.h
+
+BUILT_SOURCES = $(built_sources) $(built_headers)
+
+libgsttcp_la_SOURCES = \
+	gsttcpplugin.c \
+	gsttcp.c \
+	gstmultifdsink.c  \
+	gsttcpclientsrc.c gsttcpclientsink.c \
+	gsttcpserversrc.c gsttcpserversink.c
+
+nodist_libgsttcp_la_SOURCES = \
+	$(built_sources)
+
+# remove ENABLE_NEW when dataprotocol is stable
+libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_GDP_CFLAGS) $(GST_CFLAGS) -DGST_ENABLE_NEW
+libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_GDP_LIBS) $(GST_LIBS)
+libgsttcp_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+  gsttcpplugin.h \
+  gsttcp.h \
+  gstmultifdsink.h  \
+  gsttcpclientsrc.h gsttcpclientsink.h \
+  gsttcpserversrc.h gsttcpserversink.h
+
+CLEANFILES = $(BUILT_SOURCES)
+
+EXTRA_DIST = gsttcp-marshal.list
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgsttcp -:SHARED libgsttcp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttcp_la_SOURCES) \
+	 	   $(nodist_libgsttcp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttcp_la_LDFLAGS) \
+	           $(libgsttcp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/tcp/Makefile.in b/gst/tcp/Makefile.in
new file mode 100644
index 0000000..dc8d3a1
--- /dev/null
+++ b/gst/tcp/Makefile.in
@@ -0,0 +1,929 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# these are the variables your Makefile.am should set
+# the example is based on the colorbalance interface
+
+#glib_enum_headers=$(colorbalance_headers)
+#glib_enum_define=GST_COLOR_BALANCE
+#glib_gen_prefix=gst_color_balance
+#glib_gen_basename=colorbalance
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/gst-glib-gen.mak
+subdir = gst/tcp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgsttcp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgsttcp_la_OBJECTS = libgsttcp_la-gsttcpplugin.lo \
+	libgsttcp_la-gsttcp.lo libgsttcp_la-gstmultifdsink.lo \
+	libgsttcp_la-gsttcpclientsrc.lo \
+	libgsttcp_la-gsttcpclientsink.lo \
+	libgsttcp_la-gsttcpserversrc.lo \
+	libgsttcp_la-gsttcpserversink.lo
+am__objects_1 = libgsttcp_la-gsttcp-enumtypes.lo \
+	libgsttcp_la-gsttcp-marshal.lo
+nodist_libgsttcp_la_OBJECTS = $(am__objects_1)
+libgsttcp_la_OBJECTS = $(am_libgsttcp_la_OBJECTS) \
+	$(nodist_libgsttcp_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgsttcp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgsttcp_la_CFLAGS) $(CFLAGS) \
+	$(libgsttcp_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgsttcp_la_SOURCES) $(nodist_libgsttcp_la_SOURCES)
+DIST_SOURCES = $(libgsttcp_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgsttcp.la
+
+# variables used for enum/marshal generation
+glib_enum_headers = gsttcp.h
+glib_enum_define = GST_TCP
+glib_gen_prefix = gst_tcp
+glib_gen_basename = gsttcp
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+built_sources = gsttcp-enumtypes.c gsttcp-marshal.c
+built_headers = gsttcp-enumtypes.h gsttcp-marshal.h
+BUILT_SOURCES = $(built_sources) $(built_headers)
+libgsttcp_la_SOURCES = \
+	gsttcpplugin.c \
+	gsttcp.c \
+	gstmultifdsink.c  \
+	gsttcpclientsrc.c gsttcpclientsink.c \
+	gsttcpserversrc.c gsttcpserversink.c
+
+nodist_libgsttcp_la_SOURCES = \
+	$(built_sources)
+
+
+# remove ENABLE_NEW when dataprotocol is stable
+libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_GDP_CFLAGS) $(GST_CFLAGS) -DGST_ENABLE_NEW
+libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_GDP_LIBS) $(GST_LIBS)
+libgsttcp_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+  gsttcpplugin.h \
+  gsttcp.h \
+  gstmultifdsink.h  \
+  gsttcpclientsrc.h gsttcpclientsink.h \
+  gsttcpserversrc.h gsttcpserversink.h
+
+CLEANFILES = $(BUILT_SOURCES)
+EXTRA_DIST = gsttcp-marshal.list
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/tcp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/tcp/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgsttcp.la: $(libgsttcp_la_OBJECTS) $(libgsttcp_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsttcp_la_LINK) -rpath $(plugindir) $(libgsttcp_la_OBJECTS) $(libgsttcp_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultifdsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcp-enumtypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcp-marshal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpserversink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpserversrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgsttcp_la-gsttcpplugin.lo: gsttcpplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpplugin.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo -c -o libgsttcp_la-gsttcpplugin.lo `test -f 'gsttcpplugin.c' || echo '$(srcdir)/'`gsttcpplugin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo $(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcpplugin.c' object='libgsttcp_la-gsttcpplugin.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcpplugin.lo `test -f 'gsttcpplugin.c' || echo '$(srcdir)/'`gsttcpplugin.c
+
+libgsttcp_la-gsttcp.lo: gsttcp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcp.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcp.Tpo -c -o libgsttcp_la-gsttcp.lo `test -f 'gsttcp.c' || echo '$(srcdir)/'`gsttcp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcp.Tpo $(DEPDIR)/libgsttcp_la-gsttcp.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcp.c' object='libgsttcp_la-gsttcp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcp.lo `test -f 'gsttcp.c' || echo '$(srcdir)/'`gsttcp.c
+
+libgsttcp_la-gstmultifdsink.lo: gstmultifdsink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gstmultifdsink.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gstmultifdsink.Tpo -c -o libgsttcp_la-gstmultifdsink.lo `test -f 'gstmultifdsink.c' || echo '$(srcdir)/'`gstmultifdsink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gstmultifdsink.Tpo $(DEPDIR)/libgsttcp_la-gstmultifdsink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstmultifdsink.c' object='libgsttcp_la-gstmultifdsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gstmultifdsink.lo `test -f 'gstmultifdsink.c' || echo '$(srcdir)/'`gstmultifdsink.c
+
+libgsttcp_la-gsttcpclientsrc.lo: gsttcpclientsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpclientsrc.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Tpo -c -o libgsttcp_la-gsttcpclientsrc.lo `test -f 'gsttcpclientsrc.c' || echo '$(srcdir)/'`gsttcpclientsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Tpo $(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcpclientsrc.c' object='libgsttcp_la-gsttcpclientsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcpclientsrc.lo `test -f 'gsttcpclientsrc.c' || echo '$(srcdir)/'`gsttcpclientsrc.c
+
+libgsttcp_la-gsttcpclientsink.lo: gsttcpclientsink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpclientsink.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpclientsink.Tpo -c -o libgsttcp_la-gsttcpclientsink.lo `test -f 'gsttcpclientsink.c' || echo '$(srcdir)/'`gsttcpclientsink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpclientsink.Tpo $(DEPDIR)/libgsttcp_la-gsttcpclientsink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcpclientsink.c' object='libgsttcp_la-gsttcpclientsink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcpclientsink.lo `test -f 'gsttcpclientsink.c' || echo '$(srcdir)/'`gsttcpclientsink.c
+
+libgsttcp_la-gsttcpserversrc.lo: gsttcpserversrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpserversrc.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpserversrc.Tpo -c -o libgsttcp_la-gsttcpserversrc.lo `test -f 'gsttcpserversrc.c' || echo '$(srcdir)/'`gsttcpserversrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpserversrc.Tpo $(DEPDIR)/libgsttcp_la-gsttcpserversrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcpserversrc.c' object='libgsttcp_la-gsttcpserversrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcpserversrc.lo `test -f 'gsttcpserversrc.c' || echo '$(srcdir)/'`gsttcpserversrc.c
+
+libgsttcp_la-gsttcpserversink.lo: gsttcpserversink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpserversink.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpserversink.Tpo -c -o libgsttcp_la-gsttcpserversink.lo `test -f 'gsttcpserversink.c' || echo '$(srcdir)/'`gsttcpserversink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpserversink.Tpo $(DEPDIR)/libgsttcp_la-gsttcpserversink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcpserversink.c' object='libgsttcp_la-gsttcpserversink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcpserversink.lo `test -f 'gsttcpserversink.c' || echo '$(srcdir)/'`gsttcpserversink.c
+
+libgsttcp_la-gsttcp-enumtypes.lo: gsttcp-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcp-enumtypes.Tpo -c -o libgsttcp_la-gsttcp-enumtypes.lo `test -f 'gsttcp-enumtypes.c' || echo '$(srcdir)/'`gsttcp-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcp-enumtypes.Tpo $(DEPDIR)/libgsttcp_la-gsttcp-enumtypes.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcp-enumtypes.c' object='libgsttcp_la-gsttcp-enumtypes.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcp-enumtypes.lo `test -f 'gsttcp-enumtypes.c' || echo '$(srcdir)/'`gsttcp-enumtypes.c
+
+libgsttcp_la-gsttcp-marshal.lo: gsttcp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcp-marshal.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcp-marshal.Tpo -c -o libgsttcp_la-gsttcp-marshal.lo `test -f 'gsttcp-marshal.c' || echo '$(srcdir)/'`gsttcp-marshal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcp-marshal.Tpo $(DEPDIR)/libgsttcp_la-gsttcp-marshal.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttcp-marshal.c' object='libgsttcp_la-gsttcp-marshal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsttcp-marshal.lo `test -f 'gsttcp-marshal.c' || echo '$(srcdir)/'`gsttcp-marshal.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# these are all the rules generating the relevant files
+$(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_gen_prefix)_marshal $^ > $(glib_gen_basename)-marshal.h.tmp && \
+	mv $(glib_gen_basename)-marshal.h.tmp $(glib_gen_basename)-marshal.h
+
+$(glib_gen_basename)-marshal.c: $(glib_gen_basename)-marshal.list
+	$(AM_V_GEN)echo "#include \"$(glib_gen_basename)-marshal.h\"" >> $(glib_gen_basename)-marshal.c.tmp && \
+	glib-genmarshal --body --prefix=$(glib_gen_prefix)_marshal $^ >> $(glib_gen_basename)-marshal.c.tmp && \
+	mv $(glib_gen_basename)-marshal.c.tmp $(glib_gen_basename)-marshal.c
+
+$(glib_gen_basename)-enumtypes.h: $(glib_enum_headers)
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+	--fprod "\n/* enumerations from \"@filename@\" */\n" \
+	--vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+	--ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
+	$^ > $@
+
+$(glib_gen_basename)-enumtypes.c: $(glib_enum_headers)
+	@if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
+	$(AM_V_GEN)glib-mkenums \
+	--fhead "#include \"$(glib_gen_basename)-enumtypes.h\"\n$(enum_headers)" \
+	--fprod "\n/* enumerations from \"@filename@\" */" \
+	--vhead "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {"     \
+	--vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+	--vtail "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n" \
+	$^ > $@
+
+# a hack rule to make sure .Plo files exist because they get include'd
+# from Makefile's
+.deps/%-marshal.Plo:
+	@touch $@
+
+.deps/%-enumtypes.Plo:
+	@touch $@
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgsttcp -:SHARED libgsttcp \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttcp_la_SOURCES) \
+	 	   $(nodist_libgsttcp_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttcp_la_LDFLAGS) \
+	           $(libgsttcp_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/tcp/README b/gst/tcp/README
new file mode 100644
index 0000000..47e4894
--- /dev/null
+++ b/gst/tcp/README
@@ -0,0 +1,53 @@
+This part of the documentation is for the new tcp elements:
+- tcpclientsrc
+- tcpclientsink
+- tcpserversrc
+- tcpserversink
+                                                                                
+TESTS
+-----
+Use these tests to test functionality of the various tcp plugins
+
+* server: nc -l -p 3000
+  client: nc localhost 3000
+  everything you type in the server is shown on the client
+  everything you type in the client is shown on the server
+
+* server: nc -l -p 3000
+  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+  everything you type in the server is shown on the client
+
+* server: nc -l -p 3000
+  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+  everything you type in the client is shown on the server
+
+* server: gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
+  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+
+* server: gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
+  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+  -> Received first buffer without caps set
+
+TODO
+----
+- implement DNS resolution
+
+multifdsink
+-----------
+- operation:
+  - client fd gets added when "add" signal gets emitted on multifdsink
+  - signal handler creates a GstTCPClient structure, adds it to ->clients,
+    and adds the fd to ->fd_hash, then emits client-added
+  - client 
+
+  - when a buffer comes in:
+    - the _render vmethod puts the buffer on the global queue
+    - and increases bytes_to_serve
+    - (currently it sets streamheaders, but since this is treated globally
+       this is wrong - clients can be at different positions in the stream)
+
+  - when a client issues a write (ie requests data):
+    - when using GDP, if no caps sent yet, send caps first, then set caps_sent
+    - if streamheader buffers, and we haven't sent yet to this client,
+      send current streamheader buffers, then set streamheader_sent
+    - send out buffers
diff --git a/gst/tcp/gstmultifdsink.c b/gst/tcp/gstmultifdsink.c
new file mode 100644
index 0000000..e4e6310
--- /dev/null
+++ b/gst/tcp/gstmultifdsink.c
@@ -0,0 +1,2894 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2006 Wim Taymans <wim at fluendo dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-multifdsink
+ * @see_also: tcpserversink
+ *
+ * This plugin writes incoming data to a set of file descriptors. The
+ * file descriptors can be added to multifdsink by emitting the #GstMultiFdSink::add signal. 
+ * For each descriptor added, the #GstMultiFdSink::client-added signal will be called.
+ *
+ * As of version 0.10.8, a client can also be added with the #GstMultiFdSink::add-full signal
+ * that allows for more control over what and how much data a client 
+ * initially receives.
+ *
+ * Clients can be removed from multifdsink by emitting the #GstMultiFdSink::remove signal. For
+ * each descriptor removed, the #GstMultiFdSink::client-removed signal will be called. The
+ * #GstMultiFdSink::client-removed signal can also be fired when multifdsink decides that a
+ * client is not active anymore or, depending on the value of the
+ * #GstMultiFdSink:recover-policy property, if the client is reading too slowly.
+ * In all cases, multifdsink will never close a file descriptor itself.
+ * The user of multifdsink is responsible for closing all file descriptors.
+ * This can for example be done in response to the #GstMultiFdSink::client-fd-removed signal.
+ * Note that multifdsink still has a reference to the file descriptor when the
+ * #GstMultiFdSink::client-removed signal is emitted, so that "get-stats" can be performed on
+ * the descriptor; it is therefore not safe to close the file descriptor in
+ * the #GstMultiFdSink::client-removed signal handler, and you should use the 
+ * #GstMultiFdSink::client-fd-removed signal to safely close the fd.
+ *
+ * Multifdsink internally keeps a queue of the incoming buffers and uses a
+ * separate thread to send the buffers to the clients. This ensures that no
+ * client write can block the pipeline and that clients can read with different
+ * speeds.
+ *
+ * When adding a client to multifdsink, the #GstMultiFdSink:sync-method property will define
+ * which buffer in the queued buffers will be sent first to the client. Clients 
+ * can be sent the most recent buffer (which might not be decodable by the 
+ * client if it is not a keyframe), the next keyframe received in 
+ * multifdsink (which can take some time depending on the keyframe rate), or the
+ * last received keyframe (which will cause a simple burst-on-connect). 
+ * Multifdsink will always keep at least one keyframe in its internal buffers
+ * when the sync-mode is set to latest-keyframe.
+ *
+ * As of version 0.10.8, there are additional values for the #GstMultiFdSink:sync-method 
+ * property to allow finer control over burst-on-connect behaviour. By selecting
+ * the 'burst' method a minimum burst size can be chosen, 'burst-keyframe'
+ * additionally requires that the burst begin with a keyframe, and 
+ * 'burst-with-keyframe' attempts to burst beginning with a keyframe, but will
+ * prefer a minimum burst size even if it requires not starting with a keyframe.
+ *
+ * Multifdsink can be instructed to keep at least a minimum amount of data
+ * expressed in time or byte units in its internal queues with the the 
+ * #GstMultiFdSink:time-min and #GstMultiFdSink:bytes-min properties respectively.
+ * These properties are useful if the application adds clients with the 
+ * #GstMultiFdSink::add-full signal to make sure that a burst connect can
+ * actually be honored. 
+ *
+ * When streaming data, clients are allowed to read at a different rate than
+ * the rate at which multifdsink receives data. If the client is reading too
+ * fast, no data will be send to the client until multifdsink receives more
+ * data. If the client, however, reads too slowly, data for that client will be 
+ * queued up in multifdsink. Two properties control the amount of data 
+ * (buffers) that is queued in multifdsink: #GstMultiFdSink:buffers-max and 
+ * #GstMultiFdSink:buffers-soft-max. A client that falls behind by
+ * #GstMultiFdSink:buffers-max is removed from multifdsink forcibly.
+ *
+ * A client with a lag of at least #GstMultiFdSink:buffers-soft-max enters the recovery
+ * procedure which is controlled with the #GstMultiFdSink:recover-policy property.
+ * A recover policy of NONE will do nothing, RESYNC_LATEST will send the most recently
+ * received buffer as the next buffer for the client, RESYNC_SOFT_LIMIT
+ * positions the client to the soft limit in the buffer queue and
+ * RESYNC_KEYFRAME positions the client at the most recent keyframe in the
+ * buffer queue.
+ *
+ * multifdsink will by default synchronize on the clock before serving the 
+ * buffers to the clients. This behaviour can be disabled by setting the sync 
+ * property to FALSE. Multifdsink will by default not do QoS and will never
+ * drop late buffers.
+ *
+ * Last reviewed on 2006-09-12 (0.10.10)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst-i18n-plugin.h>
+
+#include <sys/ioctl.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <netinet/in.h>
+
+#ifdef HAVE_FIONREAD_IN_SYS_FILIO
+#include <sys/filio.h>
+#endif
+
+#include "gstmultifdsink.h"
+#include "gsttcp-marshal.h"
+
+#define NOT_IMPLEMENTED 0
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (multifdsink_debug);
+#define GST_CAT_DEFAULT (multifdsink_debug)
+
+/* MultiFdSink signals and args */
+enum
+{
+  /* methods */
+  SIGNAL_ADD,
+  SIGNAL_ADD_BURST,
+  SIGNAL_REMOVE,
+  SIGNAL_REMOVE_FLUSH,
+  SIGNAL_CLEAR,
+  SIGNAL_GET_STATS,
+
+  /* signals */
+  SIGNAL_CLIENT_ADDED,
+  SIGNAL_CLIENT_REMOVED,
+  SIGNAL_CLIENT_FD_REMOVED,
+
+  LAST_SIGNAL
+};
+
+
+/* this is really arbitrarily chosen */
+#define DEFAULT_MODE                    1
+#define DEFAULT_BUFFERS_MAX             -1
+#define DEFAULT_BUFFERS_SOFT_MAX        -1
+#define DEFAULT_TIME_MIN                -1
+#define DEFAULT_BYTES_MIN               -1
+#define DEFAULT_BUFFERS_MIN             -1
+#define DEFAULT_UNIT_TYPE               GST_TCP_UNIT_TYPE_BUFFERS
+#define DEFAULT_UNITS_MAX               -1
+#define DEFAULT_UNITS_SOFT_MAX          -1
+#define DEFAULT_RECOVER_POLICY          GST_RECOVER_POLICY_NONE
+#define DEFAULT_TIMEOUT                 0
+#define DEFAULT_SYNC_METHOD             GST_SYNC_METHOD_LATEST
+
+#define DEFAULT_BURST_UNIT              GST_TCP_UNIT_TYPE_UNDEFINED
+#define DEFAULT_BURST_VALUE             0
+
+#define DEFAULT_QOS_DSCP                -1
+#define DEFAULT_HANDLE_READ             TRUE
+
+#define DEFAULT_RESEND_STREAMHEADER      TRUE
+
+enum
+{
+  PROP_0,
+  PROP_MODE,
+  PROP_BUFFERS_QUEUED,
+  PROP_BYTES_QUEUED,
+  PROP_TIME_QUEUED,
+
+  PROP_UNIT_TYPE,
+  PROP_UNITS_MAX,
+  PROP_UNITS_SOFT_MAX,
+
+  PROP_BUFFERS_MAX,
+  PROP_BUFFERS_SOFT_MAX,
+
+  PROP_TIME_MIN,
+  PROP_BYTES_MIN,
+  PROP_BUFFERS_MIN,
+
+  PROP_RECOVER_POLICY,
+  PROP_TIMEOUT,
+  PROP_SYNC_METHOD,
+  PROP_BYTES_TO_SERVE,
+  PROP_BYTES_SERVED,
+
+  PROP_BURST_UNIT,
+  PROP_BURST_VALUE,
+
+  PROP_QOS_DSCP,
+
+  PROP_HANDLE_READ,
+
+  PROP_RESEND_STREAMHEADER,
+
+  PROP_NUM_FDS,
+
+  PROP_LAST
+};
+
+/* For backward compat, we can't really select the poll mode anymore with
+ * GstPoll. */
+#define GST_TYPE_FDSET_MODE (gst_fdset_mode_get_type())
+static GType
+gst_fdset_mode_get_type (void)
+{
+  static GType fdset_mode_type = 0;
+  static const GEnumValue fdset_mode[] = {
+    {0, "Select", "select"},
+    {1, "Poll", "poll"},
+    {2, "EPoll", "epoll"},
+    {0, NULL, NULL},
+  };
+
+  if (!fdset_mode_type) {
+    fdset_mode_type = g_enum_register_static ("GstFDSetMode", fdset_mode);
+  }
+  return fdset_mode_type;
+}
+
+#define GST_TYPE_RECOVER_POLICY (gst_recover_policy_get_type())
+static GType
+gst_recover_policy_get_type (void)
+{
+  static GType recover_policy_type = 0;
+  static const GEnumValue recover_policy[] = {
+    {GST_RECOVER_POLICY_NONE,
+        "Do not try to recover", "none"},
+    {GST_RECOVER_POLICY_RESYNC_LATEST,
+        "Resync client to latest buffer", "latest"},
+    {GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT,
+        "Resync client to soft limit", "soft-limit"},
+    {GST_RECOVER_POLICY_RESYNC_KEYFRAME,
+        "Resync client to most recent keyframe", "keyframe"},
+    {0, NULL, NULL},
+  };
+
+  if (!recover_policy_type) {
+    recover_policy_type =
+        g_enum_register_static ("GstRecoverPolicy", recover_policy);
+  }
+  return recover_policy_type;
+}
+
+#define GST_TYPE_SYNC_METHOD (gst_sync_method_get_type())
+static GType
+gst_sync_method_get_type (void)
+{
+  static GType sync_method_type = 0;
+  static const GEnumValue sync_method[] = {
+    {GST_SYNC_METHOD_LATEST,
+        "Serve starting from the latest buffer", "latest"},
+    {GST_SYNC_METHOD_NEXT_KEYFRAME,
+        "Serve starting from the next keyframe", "next-keyframe"},
+    {GST_SYNC_METHOD_LATEST_KEYFRAME,
+          "Serve everything since the latest keyframe (burst)",
+        "latest-keyframe"},
+    {GST_SYNC_METHOD_BURST, "Serve burst-value data to client", "burst"},
+    {GST_SYNC_METHOD_BURST_KEYFRAME,
+          "Serve burst-value data starting on a keyframe",
+        "burst-keyframe"},
+    {GST_SYNC_METHOD_BURST_WITH_KEYFRAME,
+          "Serve burst-value data preferably starting on a keyframe",
+        "burst-with-keyframe"},
+    {0, NULL, NULL},
+  };
+
+  if (!sync_method_type) {
+    sync_method_type = g_enum_register_static ("GstSyncMethod", sync_method);
+  }
+  return sync_method_type;
+}
+
+#define GST_TYPE_UNIT_TYPE (gst_unit_type_get_type())
+static GType
+gst_unit_type_get_type (void)
+{
+  static GType unit_type_type = 0;
+  static const GEnumValue unit_type[] = {
+    {GST_TCP_UNIT_TYPE_UNDEFINED, "Undefined", "undefined"},
+    {GST_TCP_UNIT_TYPE_BUFFERS, "Buffers", "buffers"},
+    {GST_TCP_UNIT_TYPE_BYTES, "Bytes", "bytes"},
+    {GST_TCP_UNIT_TYPE_TIME, "Time", "time"},
+    {0, NULL, NULL},
+  };
+
+  if (!unit_type_type) {
+    unit_type_type = g_enum_register_static ("GstTCPUnitType", unit_type);
+  }
+  return unit_type_type;
+}
+
+#define GST_TYPE_CLIENT_STATUS (gst_client_status_get_type())
+static GType
+gst_client_status_get_type (void)
+{
+  static GType client_status_type = 0;
+  static const GEnumValue client_status[] = {
+    {GST_CLIENT_STATUS_OK, "ok", "ok"},
+    {GST_CLIENT_STATUS_CLOSED, "Closed", "closed"},
+    {GST_CLIENT_STATUS_REMOVED, "Removed", "removed"},
+    {GST_CLIENT_STATUS_SLOW, "Too slow", "slow"},
+    {GST_CLIENT_STATUS_ERROR, "Error", "error"},
+    {GST_CLIENT_STATUS_DUPLICATE, "Duplicate", "duplicate"},
+    {GST_CLIENT_STATUS_FLUSHING, "Flushing", "flushing"},
+    {0, NULL, NULL},
+  };
+
+  if (!client_status_type) {
+    client_status_type =
+        g_enum_register_static ("GstClientStatus", client_status);
+  }
+  return client_status_type;
+}
+
+static void gst_multi_fd_sink_finalize (GObject * object);
+
+static void gst_multi_fd_sink_remove_client_link (GstMultiFdSink * sink,
+    GList * link);
+
+static GstFlowReturn gst_multi_fd_sink_render (GstBaseSink * bsink,
+    GstBuffer * buf);
+static GstStateChangeReturn gst_multi_fd_sink_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void gst_multi_fd_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_multi_fd_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define gst_multi_fd_sink_parent_class parent_class
+G_DEFINE_TYPE (GstMultiFdSink, gst_multi_fd_sink, GST_TYPE_BASE_SINK);
+
+static guint gst_multi_fd_sink_signals[LAST_SIGNAL] = { 0 };
+
+static void
+gst_multi_fd_sink_class_init (GstMultiFdSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+
+  gobject_class->set_property = gst_multi_fd_sink_set_property;
+  gobject_class->get_property = gst_multi_fd_sink_get_property;
+  gobject_class->finalize = gst_multi_fd_sink_finalize;
+
+  /**
+   * GstMultiFdSink::mode
+   *
+   * The mode for selecting activity on the fds. 
+   *
+   * This property is deprecated since 0.10.18, if will now automatically
+   * select and use the most optimal method.
+   */
+  g_object_class_install_property (gobject_class, PROP_MODE,
+      g_param_spec_enum ("mode", "Mode",
+          "The mode for selecting activity on the fds (deprecated)",
+          GST_TYPE_FDSET_MODE, DEFAULT_MODE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_BUFFERS_MAX,
+      g_param_spec_int ("buffers-max", "Buffers max",
+          "max number of buffers to queue for a client (-1 = no limit)", -1,
+          G_MAXINT, DEFAULT_BUFFERS_MAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BUFFERS_SOFT_MAX,
+      g_param_spec_int ("buffers-soft-max", "Buffers soft max",
+          "Recover client when going over this limit (-1 = no limit)", -1,
+          G_MAXINT, DEFAULT_BUFFERS_SOFT_MAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_BYTES_MIN,
+      g_param_spec_int ("bytes-min", "Bytes min",
+          "min number of bytes to queue (-1 = as little as possible)", -1,
+          G_MAXINT, DEFAULT_BYTES_MIN,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_TIME_MIN,
+      g_param_spec_int64 ("time-min", "Time min",
+          "min number of time to queue (-1 = as little as possible)", -1,
+          G_MAXINT64, DEFAULT_TIME_MIN,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BUFFERS_MIN,
+      g_param_spec_int ("buffers-min", "Buffers min",
+          "min number of buffers to queue (-1 = as few as possible)", -1,
+          G_MAXINT, DEFAULT_BUFFERS_MIN,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_UNIT_TYPE,
+      g_param_spec_enum ("unit-type", "Units type",
+          "The unit to measure the max/soft-max/queued properties",
+          GST_TYPE_UNIT_TYPE, DEFAULT_UNIT_TYPE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_UNITS_MAX,
+      g_param_spec_int64 ("units-max", "Units max",
+          "max number of units to queue (-1 = no limit)", -1, G_MAXINT64,
+          DEFAULT_UNITS_MAX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_UNITS_SOFT_MAX,
+      g_param_spec_int64 ("units-soft-max", "Units soft max",
+          "Recover client when going over this limit (-1 = no limit)", -1,
+          G_MAXINT64, DEFAULT_UNITS_SOFT_MAX,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_BUFFERS_QUEUED,
+      g_param_spec_uint ("buffers-queued", "Buffers queued",
+          "Number of buffers currently queued", 0, G_MAXUINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+#if NOT_IMPLEMENTED
+  g_object_class_install_property (gobject_class, PROP_BYTES_QUEUED,
+      g_param_spec_uint ("bytes-queued", "Bytes queued",
+          "Number of bytes currently queued", 0, G_MAXUINT, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_TIME_QUEUED,
+      g_param_spec_uint64 ("time-queued", "Time queued",
+          "Number of time currently queued", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+#endif
+
+  g_object_class_install_property (gobject_class, PROP_RECOVER_POLICY,
+      g_param_spec_enum ("recover-policy", "Recover Policy",
+          "How to recover when client reaches the soft max",
+          GST_TYPE_RECOVER_POLICY, DEFAULT_RECOVER_POLICY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_TIMEOUT,
+      g_param_spec_uint64 ("timeout", "Timeout",
+          "Maximum inactivity timeout in nanoseconds for a client (0 = no limit)",
+          0, G_MAXUINT64, DEFAULT_TIMEOUT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SYNC_METHOD,
+      g_param_spec_enum ("sync-method", "Sync Method",
+          "How to sync new clients to the stream", GST_TYPE_SYNC_METHOD,
+          DEFAULT_SYNC_METHOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BYTES_TO_SERVE,
+      g_param_spec_uint64 ("bytes-to-serve", "Bytes to serve",
+          "Number of bytes received to serve to clients", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BYTES_SERVED,
+      g_param_spec_uint64 ("bytes-served", "Bytes served",
+          "Total number of bytes send to all clients", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_BURST_UNIT,
+      g_param_spec_enum ("burst-unit", "Burst unit",
+          "The format of the burst units (when sync-method is burst[[-with]-keyframe])",
+          GST_TYPE_UNIT_TYPE, DEFAULT_BURST_UNIT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BURST_VALUE,
+      g_param_spec_uint64 ("burst-value", "Burst value",
+          "The amount of burst expressed in burst-unit", 0, G_MAXUINT64,
+          DEFAULT_BURST_VALUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_QOS_DSCP,
+      g_param_spec_int ("qos-dscp", "QoS diff srv code point",
+          "Quality of Service, differentiated services code point (-1 default)",
+          -1, 63, DEFAULT_QOS_DSCP,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstMultiFdSink::handle-read
+   *
+   * Handle read requests from clients and discard the data.
+   *
+   * Since: 0.10.23
+   */
+  g_object_class_install_property (gobject_class, PROP_HANDLE_READ,
+      g_param_spec_boolean ("handle-read", "Handle Read",
+          "Handle client reads and discard the data",
+          DEFAULT_HANDLE_READ, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstMultiFdSink::resend-streamheader
+   *
+   * Resend the streamheaders to existing clients when they change.
+   *
+   * Since: 0.10.23
+   */
+  g_object_class_install_property (gobject_class, PROP_RESEND_STREAMHEADER,
+      g_param_spec_boolean ("resend-streamheader", "Resend streamheader",
+          "Resend the streamheader if it changes in the caps",
+          DEFAULT_RESEND_STREAMHEADER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_NUM_FDS,
+      g_param_spec_uint ("num-fds", "Number of fds",
+          "The current number of client file descriptors.",
+          0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstMultiFdSink::add:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   * @fd:             the file descriptor to add to multifdsink
+   *
+   * Hand the given open file descriptor to multifdsink to write to.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_ADD] =
+      g_signal_new ("add", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          add), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1,
+      G_TYPE_INT);
+  /**
+   * GstMultiFdSink::add-full:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   * @fd:             the file descriptor to add to multifdsink
+   * @sync:           the sync method to use
+   * @unit_type_min:  the unit-type of @value_min
+   * @value_min:      the minimum amount of data to burst expressed in
+   *                  @unit_type_min units.
+   * @unit_type_max:  the unit-type of @value_max
+   * @value_max:      the maximum amount of data to burst expressed in
+   *                  @unit_type_max units.
+   *
+   * Hand the given open file descriptor to multifdsink to write to and
+   * specify the burst parameters for the new connection.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_ADD_BURST] =
+      g_signal_new ("add-full", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          add_full), NULL, NULL,
+      gst_tcp_marshal_VOID__INT_ENUM_INT_UINT64_INT_UINT64, G_TYPE_NONE, 6,
+      G_TYPE_INT, GST_TYPE_SYNC_METHOD, GST_TYPE_UNIT_TYPE, G_TYPE_UINT64,
+      GST_TYPE_UNIT_TYPE, G_TYPE_UINT64);
+  /**
+   * GstMultiFdSink::remove:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   * @fd:             the file descriptor to remove from multifdsink
+   *
+   * Remove the given open file descriptor from multifdsink.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_REMOVE] =
+      g_signal_new ("remove", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          remove), NULL, NULL, gst_tcp_marshal_VOID__INT, G_TYPE_NONE, 1,
+      G_TYPE_INT);
+  /**
+   * GstMultiFdSink::remove-flush:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   * @fd:             the file descriptor to remove from multifdsink
+   *
+   * Remove the given open file descriptor from multifdsink after flushing all
+   * the pending data to the fd.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_REMOVE_FLUSH] =
+      g_signal_new ("remove-flush", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          remove_flush), NULL, NULL, gst_tcp_marshal_VOID__INT, G_TYPE_NONE, 1,
+      G_TYPE_INT);
+  /**
+   * GstMultiFdSink::clear:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   *
+   * Remove all file descriptors from multifdsink.  Since multifdsink did not
+   * open fd's itself, it does not explicitly close the fd.  The application
+   * should do so by connecting to the client-fd-removed callback.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_CLEAR] =
+      g_signal_new ("clear", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          clear), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+  /**
+   * GstMultiFdSink::get-stats:
+   * @gstmultifdsink: the multifdsink element to emit this signal on
+   * @fd:             the file descriptor to get stats of from multifdsink
+   *
+   * Get statistics about @fd. This function returns a GValueArray to ease
+   * automatic wrapping for bindings.
+   *
+   * Returns: a GValueArray with the statistics. The array contains guint64
+   *     values that represent respectively: total number of bytes sent, time
+   *     when the client was added, time when the client was
+   *     disconnected/removed, time the client is/was active, last activity
+   *     time (in epoch seconds), number of buffers dropped.
+   *     All times are expressed in nanoseconds (GstClockTime).
+   *     The array can be 0-length if the client was not found.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_GET_STATS] =
+      g_signal_new ("get-stats", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          get_stats), NULL, NULL, gst_tcp_marshal_BOXED__INT,
+      G_TYPE_VALUE_ARRAY, 1, G_TYPE_INT);
+
+  /**
+   * GstMultiFdSink::client-added:
+   * @gstmultifdsink: the multifdsink element that emitted this signal
+   * @fd:             the file descriptor that was added to multifdsink
+   *
+   * The given file descriptor was added to multifdsink. This signal will
+   * be emitted from the streaming thread so application should be prepared
+   * for that.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_CLIENT_ADDED] =
+      g_signal_new ("client-added", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstMultiFdSinkClass, client_added),
+      NULL, NULL, gst_tcp_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+  /**
+   * GstMultiFdSink::client-removed:
+   * @gstmultifdsink: the multifdsink element that emitted this signal
+   * @fd:             the file descriptor that is to be removed from multifdsink
+   * @status:         the reason why the client was removed
+   *
+   * The given file descriptor is about to be removed from multifdsink. This
+   * signal will be emitted from the streaming thread so applications should
+   * be prepared for that.
+   *
+   * @gstmultifdsink still holds a handle to @fd so it is possible to call
+   * the get-stats signal from this callback. For the same reason it is
+   * not safe to close() and reuse @fd in this callback.
+   */
+  gst_multi_fd_sink_signals[SIGNAL_CLIENT_REMOVED] =
+      g_signal_new ("client-removed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          client_removed), NULL, NULL, gst_tcp_marshal_VOID__INT_BOXED,
+      G_TYPE_NONE, 2, G_TYPE_INT, GST_TYPE_CLIENT_STATUS);
+  /**
+   * GstMultiFdSink::client-fd-removed:
+   * @gstmultifdsink: the multifdsink element that emitted this signal
+   * @fd:             the file descriptor that was removed from multifdsink
+   *
+   * The given file descriptor was removed from multifdsink. This signal will
+   * be emitted from the streaming thread so applications should be prepared
+   * for that.
+   *
+   * In this callback, @gstmultifdsink has removed all the information
+   * associated with @fd and it is therefore not possible to call get-stats
+   * with @fd. It is however safe to close() and reuse @fd in the callback.
+   *
+   * Since: 0.10.7
+   */
+  gst_multi_fd_sink_signals[SIGNAL_CLIENT_FD_REMOVED] =
+      g_signal_new ("client-fd-removed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstMultiFdSinkClass,
+          client_fd_removed), NULL, NULL, gst_tcp_marshal_VOID__INT,
+      G_TYPE_NONE, 1, G_TYPE_INT);
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sinktemplate));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Multi filedescriptor sink", "Sink/Network",
+      "Send data to multiple filedescriptors",
+      "Thomas Vander Stichele <thomas at apestaart dot org>, "
+      "Wim Taymans <wim@fluendo.com>");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_multi_fd_sink_change_state);
+
+  gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_render);
+
+  klass->add = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_add);
+  klass->add_full = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_add_full);
+  klass->remove = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_remove);
+  klass->remove_flush = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_remove_flush);
+  klass->clear = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_clear);
+  klass->get_stats = GST_DEBUG_FUNCPTR (gst_multi_fd_sink_get_stats);
+
+  GST_DEBUG_CATEGORY_INIT (multifdsink_debug, "multifdsink", 0, "FD sink");
+}
+
+static void
+gst_multi_fd_sink_init (GstMultiFdSink * this)
+{
+  GST_OBJECT_FLAG_UNSET (this, GST_MULTI_FD_SINK_OPEN);
+
+  this->mode = DEFAULT_MODE;
+
+  CLIENTS_LOCK_INIT (this);
+  this->clients = NULL;
+  this->fd_hash = g_hash_table_new (g_int_hash, g_int_equal);
+
+  this->bufqueue = g_array_new (FALSE, TRUE, sizeof (GstBuffer *));
+  this->unit_type = DEFAULT_UNIT_TYPE;
+  this->units_max = DEFAULT_UNITS_MAX;
+  this->units_soft_max = DEFAULT_UNITS_SOFT_MAX;
+  this->time_min = DEFAULT_TIME_MIN;
+  this->bytes_min = DEFAULT_BYTES_MIN;
+  this->buffers_min = DEFAULT_BUFFERS_MIN;
+  this->recover_policy = DEFAULT_RECOVER_POLICY;
+
+  this->timeout = DEFAULT_TIMEOUT;
+  this->def_sync_method = DEFAULT_SYNC_METHOD;
+  this->def_burst_unit = DEFAULT_BURST_UNIT;
+  this->def_burst_value = DEFAULT_BURST_VALUE;
+
+  this->qos_dscp = DEFAULT_QOS_DSCP;
+  this->handle_read = DEFAULT_HANDLE_READ;
+
+  this->resend_streamheader = DEFAULT_RESEND_STREAMHEADER;
+
+  this->header_flags = 0;
+}
+
+static void
+gst_multi_fd_sink_finalize (GObject * object)
+{
+  GstMultiFdSink *this;
+
+  this = GST_MULTI_FD_SINK (object);
+
+  CLIENTS_LOCK_FREE (this);
+  g_hash_table_destroy (this->fd_hash);
+  g_array_free (this->bufqueue, TRUE);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gint
+setup_dscp_client (GstMultiFdSink * sink, GstTCPClient * client)
+{
+  gint tos;
+  gint ret;
+  union gst_sockaddr
+  {
+    struct sockaddr sa;
+    struct sockaddr_in6 sa_in6;
+    struct sockaddr_storage sa_stor;
+  } sa;
+  socklen_t slen = sizeof (sa);
+  gint af;
+
+  /* don't touch */
+  if (sink->qos_dscp < 0)
+    return 0;
+
+  if ((ret = getsockname (client->fd.fd, &sa.sa, &slen)) < 0) {
+    GST_DEBUG_OBJECT (sink, "could not get sockname: %s", g_strerror (errno));
+    return ret;
+  }
+
+  af = sa.sa.sa_family;
+
+  /* if this is an IPv4-mapped address then do IPv4 QoS */
+  if (af == AF_INET6) {
+
+    GST_DEBUG_OBJECT (sink, "check IP6 socket");
+    if (IN6_IS_ADDR_V4MAPPED (&(sa.sa_in6.sin6_addr))) {
+      GST_DEBUG_OBJECT (sink, "mapped to IPV4");
+      af = AF_INET;
+    }
+  }
+
+  /* extract and shift 6 bits of the DSCP */
+  tos = (sink->qos_dscp & 0x3f) << 2;
+
+  switch (af) {
+    case AF_INET:
+      ret = setsockopt (client->fd.fd, IPPROTO_IP, IP_TOS, &tos, sizeof (tos));
+      break;
+    case AF_INET6:
+#ifdef IPV6_TCLASS
+      ret =
+          setsockopt (client->fd.fd, IPPROTO_IPV6, IPV6_TCLASS, &tos,
+          sizeof (tos));
+      break;
+#endif
+    default:
+      ret = 0;
+      GST_ERROR_OBJECT (sink, "unsupported AF");
+      break;
+  }
+  if (ret)
+    GST_DEBUG_OBJECT (sink, "could not set DSCP: %s", g_strerror (errno));
+
+  return ret;
+}
+
+
+static void
+setup_dscp (GstMultiFdSink * sink)
+{
+  GList *clients, *next;
+
+  CLIENTS_LOCK (sink);
+  for (clients = sink->clients; clients; clients = next) {
+    GstTCPClient *client;
+
+    client = (GstTCPClient *) clients->data;
+    next = g_list_next (clients);
+
+    setup_dscp_client (sink, client);
+  }
+  CLIENTS_UNLOCK (sink);
+}
+
+/* "add-full" signal implementation */
+void
+gst_multi_fd_sink_add_full (GstMultiFdSink * sink, int fd,
+    GstSyncMethod sync_method, GstTCPUnitType min_unit, guint64 min_value,
+    GstTCPUnitType max_unit, guint64 max_value)
+{
+  GstTCPClient *client;
+  GList *clink;
+  GTimeVal now;
+  gint flags;
+  struct stat statbuf;
+
+  GST_DEBUG_OBJECT (sink, "[fd %5d] adding client, sync_method %d, "
+      "min_unit %d, min_value %" G_GUINT64_FORMAT
+      ", max_unit %d, max_value %" G_GUINT64_FORMAT, fd, sync_method,
+      min_unit, min_value, max_unit, max_value);
+
+  /* do limits check if we can */
+  if (min_unit == max_unit) {
+    if (max_value != -1 && min_value != -1 && max_value < min_value)
+      goto wrong_limits;
+  }
+
+  /* create client datastructure */
+  client = g_new0 (GstTCPClient, 1);
+  client->fd.fd = fd;
+  client->status = GST_CLIENT_STATUS_OK;
+  client->bufpos = -1;
+  client->flushcount = -1;
+  client->bufoffset = 0;
+  client->sending = NULL;
+  client->bytes_sent = 0;
+  client->dropped_buffers = 0;
+  client->avg_queue_size = 0;
+  client->first_buffer_ts = GST_CLOCK_TIME_NONE;
+  client->last_buffer_ts = GST_CLOCK_TIME_NONE;
+  client->new_connection = TRUE;
+  client->burst_min_unit = min_unit;
+  client->burst_min_value = min_value;
+  client->burst_max_unit = max_unit;
+  client->burst_max_value = max_value;
+  client->sync_method = sync_method;
+  client->currently_removing = FALSE;
+
+  /* update start time */
+  g_get_current_time (&now);
+  client->connect_time = GST_TIMEVAL_TO_TIME (now);
+  client->disconnect_time = 0;
+  /* set last activity time to connect time */
+  client->last_activity_time = client->connect_time;
+
+  CLIENTS_LOCK (sink);
+
+  /* check the hash to find a duplicate fd */
+  clink = g_hash_table_lookup (sink->fd_hash, &client->fd.fd);
+  if (clink != NULL)
+    goto duplicate;
+
+  /* we can add the fd now */
+  clink = sink->clients = g_list_prepend (sink->clients, client);
+  g_hash_table_insert (sink->fd_hash, &client->fd.fd, clink);
+  sink->clients_cookie++;
+
+  /* set the socket to non blocking */
+  if (fcntl (fd, F_SETFL, O_NONBLOCK) < 0) {
+    GST_ERROR_OBJECT (sink, "failed to make socket %d non-blocking: %s", fd,
+        g_strerror (errno));
+  }
+
+  /* we always read from a client */
+  gst_poll_add_fd (sink->fdset, &client->fd);
+
+  /* we don't try to read from write only fds */
+  if (sink->handle_read) {
+    flags = fcntl (fd, F_GETFL, 0);
+    if ((flags & O_ACCMODE) != O_WRONLY) {
+      gst_poll_fd_ctl_read (sink->fdset, &client->fd, TRUE);
+    }
+  }
+  /* figure out the mode, can't use send() for non sockets */
+  if (fstat (fd, &statbuf) == 0 && S_ISSOCK (statbuf.st_mode)) {
+    client->is_socket = TRUE;
+    setup_dscp_client (sink, client);
+  }
+
+  gst_poll_restart (sink->fdset);
+
+  CLIENTS_UNLOCK (sink);
+
+  g_signal_emit (G_OBJECT (sink),
+      gst_multi_fd_sink_signals[SIGNAL_CLIENT_ADDED], 0, fd);
+
+  return;
+
+  /* errors */
+wrong_limits:
+  {
+    GST_WARNING_OBJECT (sink,
+        "[fd %5d] wrong values min =%" G_GUINT64_FORMAT ", max=%"
+        G_GUINT64_FORMAT ", unit %d specified when adding client", fd,
+        min_value, max_value, min_unit);
+    return;
+  }
+duplicate:
+  {
+    client->status = GST_CLIENT_STATUS_DUPLICATE;
+    CLIENTS_UNLOCK (sink);
+    GST_WARNING_OBJECT (sink, "[fd %5d] duplicate client found, refusing", fd);
+    g_signal_emit (G_OBJECT (sink),
+        gst_multi_fd_sink_signals[SIGNAL_CLIENT_REMOVED], 0, fd,
+        client->status);
+    g_free (client);
+    return;
+  }
+}
+
+/* "add" signal implemntation */
+void
+gst_multi_fd_sink_add (GstMultiFdSink * sink, int fd)
+{
+  gst_multi_fd_sink_add_full (sink, fd, sink->def_sync_method,
+      sink->def_burst_unit, sink->def_burst_value, sink->def_burst_unit, -1);
+}
+
+/* "remove" signal implementation */
+void
+gst_multi_fd_sink_remove (GstMultiFdSink * sink, int fd)
+{
+  GList *clink;
+
+  GST_DEBUG_OBJECT (sink, "[fd %5d] removing client", fd);
+
+  CLIENTS_LOCK (sink);
+  clink = g_hash_table_lookup (sink->fd_hash, &fd);
+  if (clink != NULL) {
+    GstTCPClient *client = (GstTCPClient *) clink->data;
+
+    if (client->status != GST_CLIENT_STATUS_OK) {
+      GST_INFO_OBJECT (sink,
+          "[fd %5d] Client already disconnecting with status %d",
+          fd, client->status);
+      goto done;
+    }
+
+    client->status = GST_CLIENT_STATUS_REMOVED;
+    gst_multi_fd_sink_remove_client_link (sink, clink);
+    gst_poll_restart (sink->fdset);
+  } else {
+    GST_WARNING_OBJECT (sink, "[fd %5d] no client with this fd found!", fd);
+  }
+
+done:
+  CLIENTS_UNLOCK (sink);
+}
+
+/* "remove-flush" signal implementation */
+void
+gst_multi_fd_sink_remove_flush (GstMultiFdSink * sink, int fd)
+{
+  GList *clink;
+
+  GST_DEBUG_OBJECT (sink, "[fd %5d] flushing client", fd);
+
+  CLIENTS_LOCK (sink);
+  clink = g_hash_table_lookup (sink->fd_hash, &fd);
+  if (clink != NULL) {
+    GstTCPClient *client = (GstTCPClient *) clink->data;
+
+    if (client->status != GST_CLIENT_STATUS_OK) {
+      GST_INFO_OBJECT (sink,
+          "[fd %5d] Client already disconnecting with status %d",
+          fd, client->status);
+      goto done;
+    }
+
+    /* take the position of the client as the number of buffers left to flush.
+     * If the client was at position -1, we flush 0 buffers, 0 == flush 1
+     * buffer, etc... */
+    client->flushcount = client->bufpos + 1;
+    /* mark client as flushing. We can not remove the client right away because
+     * it might have some buffers to flush in the ->sending queue. */
+    client->status = GST_CLIENT_STATUS_FLUSHING;
+  } else {
+    GST_WARNING_OBJECT (sink, "[fd %5d] no client with this fd found!", fd);
+  }
+done:
+  CLIENTS_UNLOCK (sink);
+}
+
+/* can be called both through the signal (i.e. from any thread) or when 
+ * stopping, after the writing thread has shut down */
+void
+gst_multi_fd_sink_clear (GstMultiFdSink * sink)
+{
+  GList *clients, *next;
+  guint32 cookie;
+
+  GST_DEBUG_OBJECT (sink, "clearing all clients");
+
+  CLIENTS_LOCK (sink);
+restart:
+  cookie = sink->clients_cookie;
+  for (clients = sink->clients; clients; clients = next) {
+    GstTCPClient *client;
+
+    if (cookie != sink->clients_cookie) {
+      GST_DEBUG_OBJECT (sink, "cookie changed while removing all clients");
+      goto restart;
+    }
+
+    client = (GstTCPClient *) clients->data;
+    next = g_list_next (clients);
+
+    client->status = GST_CLIENT_STATUS_REMOVED;
+    gst_multi_fd_sink_remove_client_link (sink, clients);
+  }
+  gst_poll_restart (sink->fdset);
+  CLIENTS_UNLOCK (sink);
+}
+
+/* "get-stats" signal implementation
+ * the array returned contains:
+ *
+ * guint64 : bytes_sent
+ * guint64 : connect time (in nanoseconds, since Epoch)
+ * guint64 : disconnect time (in nanoseconds, since Epoch)
+ * guint64 : time the client is/was connected (in nanoseconds)
+ * guint64 : last activity time (in nanoseconds, since Epoch)
+ * guint64 : buffers dropped due to recovery
+ * guint64 : timestamp of the first buffer sent (in nanoseconds)
+ * guint64 : timestamp of the last buffer sent (in nanoseconds)
+ */
+GValueArray *
+gst_multi_fd_sink_get_stats (GstMultiFdSink * sink, int fd)
+{
+  GstTCPClient *client;
+  GValueArray *result = NULL;
+  GList *clink;
+
+  CLIENTS_LOCK (sink);
+  clink = g_hash_table_lookup (sink->fd_hash, &fd);
+  if (clink == NULL)
+    goto noclient;
+
+  client = (GstTCPClient *) clink->data;
+  if (client != NULL) {
+    GValue value = { 0 };
+    guint64 interval;
+
+    result = g_value_array_new (7);
+
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->bytes_sent);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->connect_time);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    if (client->disconnect_time == 0) {
+      GTimeVal nowtv;
+
+      g_get_current_time (&nowtv);
+
+      interval = GST_TIMEVAL_TO_TIME (nowtv) - client->connect_time;
+    } else {
+      interval = client->disconnect_time - client->connect_time;
+    }
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->disconnect_time);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, interval);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->last_activity_time);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->dropped_buffers);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->first_buffer_ts);
+    result = g_value_array_append (result, &value);
+    g_value_unset (&value);
+    g_value_init (&value, G_TYPE_UINT64);
+    g_value_set_uint64 (&value, client->last_buffer_ts);
+    result = g_value_array_append (result, &value);
+  }
+
+noclient:
+  CLIENTS_UNLOCK (sink);
+
+  /* python doesn't like a NULL pointer yet */
+  if (result == NULL) {
+    GST_WARNING_OBJECT (sink, "[fd %5d] no client with this found!", fd);
+    result = g_value_array_new (0);
+  }
+
+  return result;
+}
+
+/* should be called with the clientslock helt.
+ * Note that we don't close the fd as we didn't open it in the first
+ * place. An application should connect to the client-fd-removed signal and
+ * close the fd itself.
+ */
+static void
+gst_multi_fd_sink_remove_client_link (GstMultiFdSink * sink, GList * link)
+{
+  int fd;
+  GTimeVal now;
+  GstTCPClient *client = (GstTCPClient *) link->data;
+  GstMultiFdSinkClass *fclass;
+
+  fclass = GST_MULTI_FD_SINK_GET_CLASS (sink);
+
+  fd = client->fd.fd;
+
+  if (client->currently_removing) {
+    GST_WARNING_OBJECT (sink, "[fd %5d] client is already being removed", fd);
+    return;
+  } else {
+    client->currently_removing = TRUE;
+  }
+
+  /* FIXME: if we keep track of ip we can log it here and signal */
+  switch (client->status) {
+    case GST_CLIENT_STATUS_OK:
+      GST_WARNING_OBJECT (sink, "[fd %5d] removing client %p for no reason",
+          fd, client);
+      break;
+    case GST_CLIENT_STATUS_CLOSED:
+      GST_DEBUG_OBJECT (sink, "[fd %5d] removing client %p because of close",
+          fd, client);
+      break;
+    case GST_CLIENT_STATUS_REMOVED:
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] removing client %p because the app removed it", fd, client);
+      break;
+    case GST_CLIENT_STATUS_SLOW:
+      GST_INFO_OBJECT (sink,
+          "[fd %5d] removing client %p because it was too slow", fd, client);
+      break;
+    case GST_CLIENT_STATUS_ERROR:
+      GST_WARNING_OBJECT (sink,
+          "[fd %5d] removing client %p because of error", fd, client);
+      break;
+    case GST_CLIENT_STATUS_FLUSHING:
+    default:
+      GST_WARNING_OBJECT (sink,
+          "[fd %5d] removing client %p with invalid reason %d", fd, client,
+          client->status);
+      break;
+  }
+
+  gst_poll_remove_fd (sink->fdset, &client->fd);
+
+  g_get_current_time (&now);
+  client->disconnect_time = GST_TIMEVAL_TO_TIME (now);
+
+  /* free client buffers */
+  g_slist_foreach (client->sending, (GFunc) gst_mini_object_unref, NULL);
+  g_slist_free (client->sending);
+  client->sending = NULL;
+
+  if (client->caps)
+    gst_caps_unref (client->caps);
+  client->caps = NULL;
+
+  /* unlock the mutex before signaling because the signal handler
+   * might query some properties */
+  CLIENTS_UNLOCK (sink);
+
+  g_signal_emit (G_OBJECT (sink),
+      gst_multi_fd_sink_signals[SIGNAL_CLIENT_REMOVED], 0, fd, client->status);
+
+  /* lock again before we remove the client completely */
+  CLIENTS_LOCK (sink);
+
+  /* fd cannot be reused in the above signal callback so we can safely
+   * remove it from the hashtable here */
+  if (!g_hash_table_remove (sink->fd_hash, &client->fd.fd)) {
+    GST_WARNING_OBJECT (sink,
+        "[fd %5d] error removing client %p from hash", client->fd.fd, client);
+  }
+  /* after releasing the lock above, the link could be invalid, more
+   * precisely, the next and prev pointers could point to invalid list
+   * links. One optimisation could be to add a cookie to the linked list
+   * and take a shortcut when it did not change between unlocking and locking
+   * our mutex. For now we just walk the list again. */
+  sink->clients = g_list_remove (sink->clients, client);
+  sink->clients_cookie++;
+
+  if (fclass->removed)
+    fclass->removed (sink, client->fd.fd);
+
+  g_free (client);
+  CLIENTS_UNLOCK (sink);
+
+  /* and the fd is really gone now */
+  g_signal_emit (G_OBJECT (sink),
+      gst_multi_fd_sink_signals[SIGNAL_CLIENT_FD_REMOVED], 0, fd);
+
+  CLIENTS_LOCK (sink);
+}
+
+/* handle a read on a client fd,
+ * which either indicates a close or should be ignored
+ * returns FALSE if some error occured or the client closed. */
+static gboolean
+gst_multi_fd_sink_handle_client_read (GstMultiFdSink * sink,
+    GstTCPClient * client)
+{
+  int avail, fd;
+  gboolean ret;
+
+  fd = client->fd.fd;
+
+  if (ioctl (fd, FIONREAD, &avail) < 0)
+    goto ioctl_failed;
+
+  GST_DEBUG_OBJECT (sink, "[fd %5d] select reports client read of %d bytes",
+      fd, avail);
+
+  ret = TRUE;
+
+  if (avail == 0) {
+    /* client sent close, so remove it */
+    GST_DEBUG_OBJECT (sink, "[fd %5d] client asked for close, removing", fd);
+    client->status = GST_CLIENT_STATUS_CLOSED;
+    ret = FALSE;
+  } else if (avail < 0) {
+    GST_WARNING_OBJECT (sink, "[fd %5d] avail < 0, removing", fd);
+    client->status = GST_CLIENT_STATUS_ERROR;
+    ret = FALSE;
+  } else {
+    guint8 dummy[512];
+    gint nread;
+
+    /* just Read 'n' Drop, could also just drop the client as it's not supposed
+     * to write to us except for closing the socket, I guess it's because we
+     * like to listen to our customers. */
+    do {
+      /* this is the maximum we can read */
+      gint to_read = MIN (avail, 512);
+
+      GST_DEBUG_OBJECT (sink, "[fd %5d] client wants us to read %d bytes",
+          fd, to_read);
+
+      nread = read (fd, dummy, to_read);
+      if (nread < -1) {
+        GST_WARNING_OBJECT (sink, "[fd %5d] could not read %d bytes: %s (%d)",
+            fd, to_read, g_strerror (errno), errno);
+        client->status = GST_CLIENT_STATUS_ERROR;
+        ret = FALSE;
+        break;
+      } else if (nread == 0) {
+        GST_WARNING_OBJECT (sink, "[fd %5d] 0 bytes in read, removing", fd);
+        client->status = GST_CLIENT_STATUS_ERROR;
+        ret = FALSE;
+        break;
+      }
+      avail -= nread;
+    }
+    while (avail > 0);
+  }
+  return ret;
+
+  /* ERRORS */
+ioctl_failed:
+  {
+    GST_WARNING_OBJECT (sink, "[fd %5d] ioctl failed: %s (%d)",
+        fd, g_strerror (errno), errno);
+    client->status = GST_CLIENT_STATUS_ERROR;
+    return FALSE;
+  }
+}
+
+static gboolean
+is_sync_frame (GstMultiFdSink * sink, GstBuffer * buffer)
+{
+  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) {
+    return FALSE;
+  } else if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_IN_CAPS)) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/* queue the given buffer for the given client, possibly adding the GDP
+ * header if GDP is being used */
+static gboolean
+gst_multi_fd_sink_client_queue_buffer (GstMultiFdSink * sink,
+    GstTCPClient * client, GstBuffer * buffer)
+{
+  GstCaps *caps;
+
+  /* TRUE: send them if the new caps have them */
+  gboolean send_streamheader = FALSE;
+  GstStructure *s;
+
+#if 0
+  /* before we queue the buffer, we check if we need to queue streamheader
+   * buffers (because it's a new client, or because they changed) */
+  caps = gst_buffer_get_caps (buffer);  /* cleaned up after streamheader */
+#else
+  caps = NULL;
+#endif
+  if (!client->caps) {
+    GST_DEBUG_OBJECT (sink,
+        "[fd %5d] no previous caps for this client, send streamheader",
+        client->fd.fd);
+    send_streamheader = TRUE;
+    client->caps = gst_caps_ref (caps);
+  } else {
+    /* there were previous caps recorded, so compare */
+    if (!gst_caps_is_equal (caps, client->caps)) {
+      const GValue *sh1, *sh2;
+
+      /* caps are not equal, but could still have the same streamheader */
+      s = gst_caps_get_structure (caps, 0);
+      if (!gst_structure_has_field (s, "streamheader")) {
+        /* no new streamheader, so nothing new to send */
+        GST_DEBUG_OBJECT (sink,
+            "[fd %5d] new caps do not have streamheader, not sending",
+            client->fd.fd);
+      } else {
+        /* there is a new streamheader */
+        s = gst_caps_get_structure (client->caps, 0);
+        if (!gst_structure_has_field (s, "streamheader")) {
+          /* no previous streamheader, so send the new one */
+          GST_DEBUG_OBJECT (sink,
+              "[fd %5d] previous caps did not have streamheader, sending",
+              client->fd.fd);
+          send_streamheader = TRUE;
+        } else {
+          /* both old and new caps have streamheader set */
+          if (!sink->resend_streamheader) {
+            GST_DEBUG_OBJECT (sink,
+                "[fd %5d] asked to not resend the streamheader, not sending",
+                client->fd.fd);
+            send_streamheader = FALSE;
+          } else {
+            sh1 = gst_structure_get_value (s, "streamheader");
+            s = gst_caps_get_structure (caps, 0);
+            sh2 = gst_structure_get_value (s, "streamheader");
+            if (gst_value_compare (sh1, sh2) != GST_VALUE_EQUAL) {
+              GST_DEBUG_OBJECT (sink,
+                  "[fd %5d] new streamheader different from old, sending",
+                  client->fd.fd);
+              send_streamheader = TRUE;
+            }
+          }
+        }
+      }
+    }
+    /* Replace the old caps */
+    gst_caps_unref (client->caps);
+    client->caps = gst_caps_ref (caps);
+  }
+
+  if (G_UNLIKELY (send_streamheader)) {
+    const GValue *sh;
+    GArray *buffers;
+    int i;
+
+    GST_LOG_OBJECT (sink,
+        "[fd %5d] sending streamheader from caps %" GST_PTR_FORMAT,
+        client->fd.fd, caps);
+    s = gst_caps_get_structure (caps, 0);
+    if (!gst_structure_has_field (s, "streamheader")) {
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] no new streamheader, so nothing to send", client->fd.fd);
+    } else {
+      GST_LOG_OBJECT (sink,
+          "[fd %5d] sending streamheader from caps %" GST_PTR_FORMAT,
+          client->fd.fd, caps);
+      sh = gst_structure_get_value (s, "streamheader");
+      g_assert (G_VALUE_TYPE (sh) == GST_TYPE_ARRAY);
+      buffers = g_value_peek_pointer (sh);
+      GST_DEBUG_OBJECT (sink, "%d streamheader buffers", buffers->len);
+      for (i = 0; i < buffers->len; ++i) {
+        GValue *bufval;
+        GstBuffer *buffer;
+
+        bufval = &g_array_index (buffers, GValue, i);
+        g_assert (G_VALUE_TYPE (bufval) == GST_TYPE_BUFFER);
+        buffer = g_value_peek_pointer (bufval);
+        GST_DEBUG_OBJECT (sink,
+            "[fd %5d] queueing streamheader buffer of length %" G_GSIZE_FORMAT,
+            client->fd.fd, gst_buffer_get_size (buffer));
+        gst_buffer_ref (buffer);
+
+        client->sending = g_slist_append (client->sending, buffer);
+      }
+    }
+  }
+
+  gst_caps_unref (caps);
+  caps = NULL;
+
+  GST_LOG_OBJECT (sink, "[fd %5d] queueing buffer of length %" G_GSIZE_FORMAT,
+      client->fd.fd, gst_buffer_get_size (buffer));
+
+  gst_buffer_ref (buffer);
+  client->sending = g_slist_append (client->sending, buffer);
+
+  return TRUE;
+}
+
+/* find the keyframe in the list of buffers starting the
+ * search from @idx. @direction as -1 will search backwards, 
+ * 1 will search forwards.
+ * Returns: the index or -1 if there is no keyframe after idx.
+ */
+static gint
+find_syncframe (GstMultiFdSink * sink, gint idx, gint direction)
+{
+  gint i, len, result;
+
+  /* take length of queued buffers */
+  len = sink->bufqueue->len;
+
+  /* assume we don't find a keyframe */
+  result = -1;
+
+  /* then loop over all buffers to find the first keyframe */
+  for (i = idx; i >= 0 && i < len; i += direction) {
+    GstBuffer *buf;
+
+    buf = g_array_index (sink->bufqueue, GstBuffer *, i);
+    if (is_sync_frame (sink, buf)) {
+      GST_LOG_OBJECT (sink, "found keyframe at %d from %d, direction %d",
+          i, idx, direction);
+      result = i;
+      break;
+    }
+  }
+  return result;
+}
+
+#define find_next_syncframe(s,i) 	find_syncframe(s,i,1)
+#define find_prev_syncframe(s,i) 	find_syncframe(s,i,-1)
+
+/* Get the number of buffers from the buffer queue needed to satisfy
+ * the maximum max in the configured units.
+ * If units are not BUFFERS, and there are insufficient buffers in the
+ * queue to satify the limit, return len(queue) + 1 */
+static gint
+get_buffers_max (GstMultiFdSink * sink, gint64 max)
+{
+  switch (sink->unit_type) {
+    case GST_TCP_UNIT_TYPE_BUFFERS:
+      return max;
+    case GST_TCP_UNIT_TYPE_TIME:
+    {
+      GstBuffer *buf;
+      int i;
+      int len;
+      gint64 diff;
+      GstClockTime first = GST_CLOCK_TIME_NONE;
+
+      len = sink->bufqueue->len;
+
+      for (i = 0; i < len; i++) {
+        buf = g_array_index (sink->bufqueue, GstBuffer *, i);
+        if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+          if (first == -1)
+            first = GST_BUFFER_TIMESTAMP (buf);
+
+          diff = first - GST_BUFFER_TIMESTAMP (buf);
+
+          if (diff > max)
+            return i + 1;
+        }
+      }
+      return len + 1;
+    }
+    case GST_TCP_UNIT_TYPE_BYTES:
+    {
+      GstBuffer *buf;
+      int i;
+      int len;
+      gint acc = 0;
+
+      len = sink->bufqueue->len;
+
+      for (i = 0; i < len; i++) {
+        buf = g_array_index (sink->bufqueue, GstBuffer *, i);
+        acc += gst_buffer_get_size (buf);
+
+        if (acc > max)
+          return i + 1;
+      }
+      return len + 1;
+    }
+    default:
+      return max;
+  }
+}
+
+/* find the positions in the buffer queue where *_min and *_max
+ * is satisfied
+ */
+/* count the amount of data in the buffers and return the index
+ * that satifies the given limits.
+ *
+ * Returns: index @idx in the buffer queue so that the given limits are
+ * satisfied. TRUE if all the limits could be satisfied, FALSE if not
+ * enough data was in the queue.
+ *
+ * FIXME, this code might now work if any of the units is in buffers...
+ */
+static gboolean
+find_limits (GstMultiFdSink * sink,
+    gint * min_idx, gint bytes_min, gint buffers_min, gint64 time_min,
+    gint * max_idx, gint bytes_max, gint buffers_max, gint64 time_max)
+{
+  GstClockTime first, time;
+  gint i, len, bytes;
+  gboolean result, max_hit;
+
+  /* take length of queue */
+  len = sink->bufqueue->len;
+
+  /* this must hold */
+  g_assert (len > 0);
+
+  GST_LOG_OBJECT (sink,
+      "bytes_min %d, buffers_min %d, time_min %" GST_TIME_FORMAT
+      ", bytes_max %d, buffers_max %d, time_max %" GST_TIME_FORMAT, bytes_min,
+      buffers_min, GST_TIME_ARGS (time_min), bytes_max, buffers_max,
+      GST_TIME_ARGS (time_max));
+
+  /* do the trivial buffer limit test */
+  if (buffers_min != -1 && len < buffers_min) {
+    *min_idx = len - 1;
+    *max_idx = len - 1;
+    return FALSE;
+  }
+
+  result = FALSE;
+  /* else count bytes and time */
+  first = -1;
+  bytes = 0;
+  /* unset limits */
+  *min_idx = -1;
+  *max_idx = -1;
+  max_hit = FALSE;
+
+  i = 0;
+  /* loop through the buffers, when a limit is ok, mark it 
+   * as -1, we have at least one buffer in the queue. */
+  do {
+    GstBuffer *buf;
+
+    /* if we checked all min limits, update result */
+    if (bytes_min == -1 && time_min == -1 && *min_idx == -1) {
+      /* don't go below 0 */
+      *min_idx = MAX (i - 1, 0);
+    }
+    /* if we reached one max limit break out */
+    if (max_hit) {
+      /* i > 0 when we get here, we subtract one to get the position
+       * of the previous buffer. */
+      *max_idx = i - 1;
+      /* we have valid complete result if we found a min_idx too */
+      result = *min_idx != -1;
+      break;
+    }
+    buf = g_array_index (sink->bufqueue, GstBuffer *, i);
+
+    bytes += gst_buffer_get_size (buf);
+
+    /* take timestamp and save for the base first timestamp */
+    if ((time = GST_BUFFER_TIMESTAMP (buf)) != -1) {
+      GST_LOG_OBJECT (sink, "Ts %" GST_TIME_FORMAT " on buffer",
+          GST_TIME_ARGS (time));
+      if (first == -1)
+        first = time;
+
+      /* increase max usage if we did not fill enough. Note that
+       * buffers are sorted from new to old, so the first timestamp is
+       * bigger than the next one. */
+      if (time_min != -1 && first - time >= time_min)
+        time_min = -1;
+      if (time_max != -1 && first - time >= time_max)
+        max_hit = TRUE;
+    } else {
+      GST_LOG_OBJECT (sink, "No timestamp on buffer");
+    }
+    /* time is OK or unknown, check and increase if not enough bytes */
+    if (bytes_min != -1) {
+      if (bytes >= bytes_min)
+        bytes_min = -1;
+    }
+    if (bytes_max != -1) {
+      if (bytes >= bytes_max) {
+        max_hit = TRUE;
+      }
+    }
+    i++;
+  }
+  while (i < len);
+
+  /* if we did not hit the max or min limit, set to buffer size */
+  if (*max_idx == -1)
+    *max_idx = len - 1;
+  /* make sure min does not exceed max */
+  if (*min_idx == -1)
+    *min_idx = *max_idx;
+
+  return result;
+}
+
+/* parse the unit/value pair and assign it to the result value of the
+ * right type, leave the other values untouched 
+ *
+ * Returns: FALSE if the unit is unknown or undefined. TRUE otherwise.
+ */
+static gboolean
+assign_value (GstTCPUnitType unit, guint64 value, gint * bytes, gint * buffers,
+    GstClockTime * time)
+{
+  gboolean res = TRUE;
+
+  /* set only the limit of the given format to the given value */
+  switch (unit) {
+    case GST_TCP_UNIT_TYPE_BUFFERS:
+      *buffers = (gint) value;
+      break;
+    case GST_TCP_UNIT_TYPE_TIME:
+      *time = value;
+      break;
+    case GST_TCP_UNIT_TYPE_BYTES:
+      *bytes = (gint) value;
+      break;
+    case GST_TCP_UNIT_TYPE_UNDEFINED:
+    default:
+      res = FALSE;
+      break;
+  }
+  return res;
+}
+
+/* count the index in the buffer queue to satisfy the given unit
+ * and value pair starting from buffer at index 0.
+ *
+ * Returns: TRUE if there was enough data in the queue to satisfy the
+ * burst values. @idx contains the index in the buffer that contains enough
+ * data to satisfy the limits or the last buffer in the queue when the
+ * function returns FALSE.
+ */
+static gboolean
+count_burst_unit (GstMultiFdSink * sink, gint * min_idx,
+    GstTCPUnitType min_unit, guint64 min_value, gint * max_idx,
+    GstTCPUnitType max_unit, guint64 max_value)
+{
+  gint bytes_min = -1, buffers_min = -1;
+  gint bytes_max = -1, buffers_max = -1;
+  GstClockTime time_min = GST_CLOCK_TIME_NONE, time_max = GST_CLOCK_TIME_NONE;
+
+  assign_value (min_unit, min_value, &bytes_min, &buffers_min, &time_min);
+  assign_value (max_unit, max_value, &bytes_max, &buffers_max, &time_max);
+
+  return find_limits (sink, min_idx, bytes_min, buffers_min, time_min,
+      max_idx, bytes_max, buffers_max, time_max);
+}
+
+/* decide where in the current buffer queue this new client should start
+ * receiving buffers from.
+ * This function is called whenever a client is connected and has not yet
+ * received a buffer.
+ * If this returns -1, it means that we haven't found a good point to
+ * start streaming from yet, and this function should be called again later
+ * when more buffers have arrived.
+ */
+static gint
+gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
+{
+  gint result;
+
+  GST_DEBUG_OBJECT (sink,
+      "[fd %5d] new client, deciding where to start in queue", client->fd.fd);
+  GST_DEBUG_OBJECT (sink, "queue is currently %d buffers long",
+      sink->bufqueue->len);
+  switch (client->sync_method) {
+    case GST_SYNC_METHOD_LATEST:
+      /* no syncing, we are happy with whatever the client is going to get */
+      result = client->bufpos;
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] SYNC_METHOD_LATEST, position %d", client->fd.fd, result);
+      break;
+    case GST_SYNC_METHOD_NEXT_KEYFRAME:
+    {
+      /* if one of the new buffers (between client->bufpos and 0) in the queue
+       * is a sync point, we can proceed, otherwise we need to keep waiting */
+      GST_LOG_OBJECT (sink,
+          "[fd %5d] new client, bufpos %d, waiting for keyframe", client->fd.fd,
+          client->bufpos);
+
+      result = find_prev_syncframe (sink, client->bufpos);
+      if (result != -1) {
+        GST_DEBUG_OBJECT (sink,
+            "[fd %5d] SYNC_METHOD_NEXT_KEYFRAME: result %d",
+            client->fd.fd, result);
+        break;
+      }
+
+      /* client is not on a syncbuffer, need to skip these buffers and
+       * wait some more */
+      GST_LOG_OBJECT (sink,
+          "[fd %5d] new client, skipping buffer(s), no syncpoint found",
+          client->fd.fd);
+      client->bufpos = -1;
+      break;
+    }
+    case GST_SYNC_METHOD_LATEST_KEYFRAME:
+    {
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] SYNC_METHOD_LATEST_KEYFRAME", client->fd.fd);
+
+      /* for new clients we initially scan the complete buffer queue for
+       * a sync point when a buffer is added. If we don't find a keyframe,
+       * we need to wait for the next keyframe and so we change the client's
+       * sync method to GST_SYNC_METHOD_NEXT_KEYFRAME.
+       */
+      result = find_next_syncframe (sink, 0);
+      if (result != -1) {
+        GST_DEBUG_OBJECT (sink,
+            "[fd %5d] SYNC_METHOD_LATEST_KEYFRAME: result %d", client->fd.fd,
+            result);
+        break;
+      }
+
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] SYNC_METHOD_LATEST_KEYFRAME: no keyframe found, "
+          "switching to SYNC_METHOD_NEXT_KEYFRAME", client->fd.fd);
+      /* throw client to the waiting state */
+      client->bufpos = -1;
+      /* and make client sync to next keyframe */
+      client->sync_method = GST_SYNC_METHOD_NEXT_KEYFRAME;
+      break;
+    }
+    case GST_SYNC_METHOD_BURST:
+    {
+      gboolean ok;
+      gint max;
+
+      /* move to the position where we satisfy the client's burst
+       * parameters. If we could not satisfy the parameters because there
+       * is not enough data, we just send what we have (which is in result).
+       * We use the max value to limit the search
+       */
+      ok = count_burst_unit (sink, &result, client->burst_min_unit,
+          client->burst_min_value, &max, client->burst_max_unit,
+          client->burst_max_value);
+      GST_DEBUG_OBJECT (sink,
+          "[fd %5d] SYNC_METHOD_BURST: burst_unit returned %d, result %d",
+          client->fd.fd, ok, result);
+
+      GST_LOG_OBJECT (sink, "min %d, max %d", result, max);
+
+      /* we hit the max and it is below the min, use that then */
+      if (max != -1 && max <= result) {
+        result = MAX (max - 1, 0);
+        GST_DEBUG_OBJECT (sink,
+            "[fd %5d] SYNC_METHOD_BURST: result above max, taken down to %d",
+            client->fd.fd, result);
+      }
+      break;
+    }
+    case GST_SYNC_METHOD_BURST_KEYFRAME:
+    {
+      gint min_idx, max_idx;
+      gint next_syncframe, prev_syncframe;
+
+      /* BURST_KEYFRAME:
+       *
+       * _always_ start sending a keyframe to the client. We first search
+       * a keyframe between min/max limits. If there is none, we send it the
+       * last keyframe before min. If there is none, the behaviour is like
+       * NEXT_KEYFRAME.
+       */
+      /* gather burst limits */
+      count_burst_unit (sink, &min_idx, client->burst_min_unit,
+          client->burst_min_value, &max_idx, client->burst_max_unit,
+          client->burst_max_value);
+
+      GST_LOG_OBJECT (sink, "min %d, max %d", min_idx, max_idx);
+
+      /* first find a keyframe after min_idx */
+      next_syncframe = find_next_syncframe (sink, min_idx);
+      if (next_syncframe != -1 && next_syncframe < max_idx) {
+        /* we have a valid keyframe and it's below the max */
+        GST_LOG_OBJECT (sink, "found keyframe in min/max limits");
+        result = next_syncframe;
+        break;
+      }
+
+      /* no valid keyframe, try to find one below min */
+      prev_syncframe = find_prev_syncframe (sink, min_idx);
+      if (prev_syncframe != -1) {
+        GST_WARNING_OBJECT (sink,
+            "using keyframe below min in BURST_KEYFRAME sync mode");
+        result = prev_syncframe;
+        break;
+      }
+
+      /* no prev keyframe or not enough data  */
+      GST_WARNING_OBJECT (sink,
+          "no prev keyframe found in BURST_KEYFRAME sync mode, waiting for next");
+
+      /* throw client to the waiting state */
+      client->bufpos = -1;
+      /* and make client sync to next keyframe */
+      client->sync_method = GST_SYNC_METHOD_NEXT_KEYFRAME;
+      result = -1;
+      break;
+    }
+    case GST_SYNC_METHOD_BURST_WITH_KEYFRAME:
+    {
+      gint min_idx, max_idx;
+      gint next_syncframe;
+
+      /* BURST_WITH_KEYFRAME:
+       *
+       * try to start sending a keyframe to the client. We first search
+       * a keyframe between min/max limits. If there is none, we send it the
+       * amount of data up 'till min.
+       */
+      /* gather enough data to burst */
+      count_burst_unit (sink, &min_idx, client->burst_min_unit,
+          client->burst_min_value, &max_idx, client->burst_max_unit,
+          client->burst_max_value);
+
+      GST_LOG_OBJECT (sink, "min %d, max %d", min_idx, max_idx);
+
+      /* first find a keyframe after min_idx */
+      next_syncframe = find_next_syncframe (sink, min_idx);
+      if (next_syncframe != -1 && next_syncframe < max_idx) {
+        /* we have a valid keyframe and it's below the max */
+        GST_LOG_OBJECT (sink, "found keyframe in min/max limits");
+        result = next_syncframe;
+        break;
+      }
+
+      /* no keyframe, send data from min_idx */
+      GST_WARNING_OBJECT (sink, "using min in BURST_WITH_KEYFRAME sync mode");
+
+      /* make sure we don't go over the max limit */
+      if (max_idx != -1 && max_idx <= min_idx) {
+        result = MAX (max_idx - 1, 0);
+      } else {
+        result = min_idx;
+      }
+
+      break;
+    }
+    default:
+      g_warning ("unknown sync method %d", client->sync_method);
+      result = client->bufpos;
+      break;
+  }
+  return result;
+}
+
+/* Handle a write on a client,
+ * which indicates a read request from a client.
+ *
+ * For each client we maintain a queue of GstBuffers that contain the raw bytes
+ * we need to send to the client. In the case of the GDP protocol, we create
+ * buffers out of the header bytes so that we can focus only on sending
+ * buffers.
+ *
+ * We first check to see if we need to send caps (in GDP) and streamheaders.
+ * If so, we queue them.
+ *
+ * Then we run into the main loop that tries to send as many buffers as
+ * possible. It will first exhaust the client->sending queue and if the queue
+ * is empty, it will pick a buffer from the global queue.
+ *
+ * Sending the buffers from the client->sending queue is basically writing
+ * the bytes to the socket and maintaining a count of the bytes that were
+ * sent. When the buffer is completely sent, it is removed from the
+ * client->sending queue and we try to pick a new buffer for sending.
+ *
+ * When the sending returns a partial buffer we stop sending more data as
+ * the next send operation could block.
+ *
+ * This functions returns FALSE if some error occured.
+ */
+static gboolean
+gst_multi_fd_sink_handle_client_write (GstMultiFdSink * sink,
+    GstTCPClient * client)
+{
+  int fd = client->fd.fd;
+  gboolean more;
+  gboolean flushing;
+  GstClockTime now;
+  GTimeVal nowtv;
+
+  g_get_current_time (&nowtv);
+  now = GST_TIMEVAL_TO_TIME (nowtv);
+
+  flushing = client->status == GST_CLIENT_STATUS_FLUSHING;
+
+  more = TRUE;
+  do {
+    gint maxsize;
+
+    if (!client->sending) {
+      /* client is not working on a buffer */
+      if (client->bufpos == -1) {
+        /* client is too fast, remove from write queue until new buffer is
+         * available */
+        gst_poll_fd_ctl_write (sink->fdset, &client->fd, FALSE);
+        /* if we flushed out all of the client buffers, we can stop */
+        if (client->flushcount == 0)
+          goto flushed;
+
+        return TRUE;
+      } else {
+        /* client can pick a buffer from the global queue */
+        GstBuffer *buf;
+        GstClockTime timestamp;
+
+        /* for new connections, we need to find a good spot in the
+         * bufqueue to start streaming from */
+        if (client->new_connection && !flushing) {
+          gint position = gst_multi_fd_sink_new_client (sink, client);
+
+          if (position >= 0) {
+            /* we got a valid spot in the queue */
+            client->new_connection = FALSE;
+            client->bufpos = position;
+          } else {
+            /* cannot send data to this client yet */
+            gst_poll_fd_ctl_write (sink->fdset, &client->fd, FALSE);
+            return TRUE;
+          }
+        }
+
+        /* we flushed all remaining buffers, no need to get a new one */
+        if (client->flushcount == 0)
+          goto flushed;
+
+        /* grab buffer */
+        buf = g_array_index (sink->bufqueue, GstBuffer *, client->bufpos);
+        client->bufpos--;
+
+        /* update stats */
+        timestamp = GST_BUFFER_TIMESTAMP (buf);
+        if (client->first_buffer_ts == GST_CLOCK_TIME_NONE)
+          client->first_buffer_ts = timestamp;
+        if (timestamp != -1)
+          client->last_buffer_ts = timestamp;
+
+        /* decrease flushcount */
+        if (client->flushcount != -1)
+          client->flushcount--;
+
+        GST_LOG_OBJECT (sink, "[fd %5d] client %p at position %d",
+            fd, client, client->bufpos);
+
+        /* queueing a buffer will ref it */
+        gst_multi_fd_sink_client_queue_buffer (sink, client, buf);
+
+        /* need to start from the first byte for this new buffer */
+        client->bufoffset = 0;
+      }
+    }
+
+    /* see if we need to send something */
+    if (client->sending) {
+      ssize_t wrote;
+      GstBuffer *head;
+      guint8 *data;
+      gsize size;
+
+      /* pick first buffer from list */
+      head = GST_BUFFER (client->sending->data);
+
+      data = gst_buffer_map (head, &size, NULL, GST_MAP_READ);
+      maxsize = size - client->bufoffset;
+
+      /* try to write the complete buffer */
+#ifdef MSG_NOSIGNAL
+#define FLAGS MSG_NOSIGNAL
+#else
+#define FLAGS 0
+#endif
+      if (client->is_socket) {
+        wrote = send (fd, data + client->bufoffset, maxsize, FLAGS);
+      } else {
+        wrote = write (fd, data + client->bufoffset, maxsize);
+      }
+      gst_buffer_unmap (head, data, size);
+
+      if (wrote < 0) {
+        /* hmm error.. */
+        if (errno == EAGAIN) {
+          /* nothing serious, resource was unavailable, try again later */
+          more = FALSE;
+        } else if (errno == ECONNRESET) {
+          goto connection_reset;
+        } else {
+          goto write_error;
+        }
+      } else {
+        if (wrote < maxsize) {
+          /* partial write means that the client cannot read more and we should
+           * stop sending more */
+          GST_LOG_OBJECT (sink,
+              "partial write on %d of %" G_GSSIZE_FORMAT " bytes", fd, wrote);
+          client->bufoffset += wrote;
+          more = FALSE;
+        } else {
+          /* complete buffer was written, we can proceed to the next one */
+          client->sending = g_slist_remove (client->sending, head);
+          gst_buffer_unref (head);
+          /* make sure we start from byte 0 for the next buffer */
+          client->bufoffset = 0;
+        }
+        /* update stats */
+        client->bytes_sent += wrote;
+        client->last_activity_time = now;
+        sink->bytes_served += wrote;
+      }
+    }
+  } while (more);
+
+  return TRUE;
+
+  /* ERRORS */
+flushed:
+  {
+    GST_DEBUG_OBJECT (sink, "[fd %5d] flushed, removing", fd);
+    client->status = GST_CLIENT_STATUS_REMOVED;
+    return FALSE;
+  }
+connection_reset:
+  {
+    GST_DEBUG_OBJECT (sink, "[fd %5d] connection reset by peer, removing", fd);
+    client->status = GST_CLIENT_STATUS_CLOSED;
+    return FALSE;
+  }
+write_error:
+  {
+    GST_WARNING_OBJECT (sink,
+        "[fd %5d] could not write, removing client: %s (%d)", fd,
+        g_strerror (errno), errno);
+    client->status = GST_CLIENT_STATUS_ERROR;
+    return FALSE;
+  }
+}
+
+/* calculate the new position for a client after recovery. This function
+ * does not update the client position but merely returns the required
+ * position.
+ */
+static gint
+gst_multi_fd_sink_recover_client (GstMultiFdSink * sink, GstTCPClient * client)
+{
+  gint newbufpos;
+
+  GST_WARNING_OBJECT (sink,
+      "[fd %5d] client %p is lagging at %d, recover using policy %d",
+      client->fd.fd, client, client->bufpos, sink->recover_policy);
+
+  switch (sink->recover_policy) {
+    case GST_RECOVER_POLICY_NONE:
+      /* do nothing, client will catch up or get kicked out when it reaches
+       * the hard max */
+      newbufpos = client->bufpos;
+      break;
+    case GST_RECOVER_POLICY_RESYNC_LATEST:
+      /* move to beginning of queue */
+      newbufpos = -1;
+      break;
+    case GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT:
+      /* move to beginning of soft max */
+      newbufpos = get_buffers_max (sink, sink->units_soft_max);
+      break;
+    case GST_RECOVER_POLICY_RESYNC_KEYFRAME:
+      /* find keyframe in buffers, we search backwards to find the
+       * closest keyframe relative to what this client already received. */
+      newbufpos = MIN (sink->bufqueue->len - 1,
+          get_buffers_max (sink, sink->units_soft_max) - 1);
+
+      while (newbufpos >= 0) {
+        GstBuffer *buf;
+
+        buf = g_array_index (sink->bufqueue, GstBuffer *, newbufpos);
+        if (is_sync_frame (sink, buf)) {
+          /* found a buffer that is not a delta unit */
+          break;
+        }
+        newbufpos--;
+      }
+      break;
+    default:
+      /* unknown recovery procedure */
+      newbufpos = get_buffers_max (sink, sink->units_soft_max);
+      break;
+  }
+  return newbufpos;
+}
+
+/* Queue a buffer on the global queue.
+ *
+ * This function adds the buffer to the front of a GArray. It removes the
+ * tail buffer if the max queue size is exceeded, unreffing the queued buffer.
+ * Note that unreffing the buffer is not a problem as clients who
+ * started writing out this buffer will still have a reference to it in the
+ * client->sending queue.
+ *
+ * After adding the buffer, we update all client positions in the queue. If
+ * a client moves over the soft max, we start the recovery procedure for this
+ * slow client. If it goes over the hard max, it is put into the slow list
+ * and removed.
+ *
+ * Special care is taken of clients that were waiting for a new buffer (they
+ * had a position of -1) because they can proceed after adding this new buffer.
+ * This is done by adding the client back into the write fd_set and signalling
+ * the select thread that the fd_set changed.
+ */
+static void
+gst_multi_fd_sink_queue_buffer (GstMultiFdSink * sink, GstBuffer * buf)
+{
+  GList *clients, *next;
+  gint queuelen;
+  gboolean need_signal = FALSE;
+  gint max_buffer_usage;
+  gint i;
+  GTimeVal nowtv;
+  GstClockTime now;
+  gint max_buffers, soft_max_buffers;
+  guint cookie;
+
+  g_get_current_time (&nowtv);
+  now = GST_TIMEVAL_TO_TIME (nowtv);
+
+  CLIENTS_LOCK (sink);
+  /* add buffer to queue */
+  g_array_prepend_val (sink->bufqueue, buf);
+  queuelen = sink->bufqueue->len;
+
+  if (sink->units_max > 0)
+    max_buffers = get_buffers_max (sink, sink->units_max);
+  else
+    max_buffers = -1;
+
+  if (sink->units_soft_max > 0)
+    soft_max_buffers = get_buffers_max (sink, sink->units_soft_max);
+  else
+    soft_max_buffers = -1;
+  GST_LOG_OBJECT (sink, "Using max %d, softmax %d", max_buffers,
+      soft_max_buffers);
+
+  /* then loop over the clients and update the positions */
+  max_buffer_usage = 0;
+
+restart:
+  cookie = sink->clients_cookie;
+  for (clients = sink->clients; clients; clients = next) {
+    GstTCPClient *client;
+
+    if (cookie != sink->clients_cookie) {
+      GST_DEBUG_OBJECT (sink, "Clients cookie outdated, restarting");
+      goto restart;
+    }
+
+    client = (GstTCPClient *) clients->data;
+    next = g_list_next (clients);
+
+    client->bufpos++;
+    GST_LOG_OBJECT (sink, "[fd %5d] client %p at position %d",
+        client->fd.fd, client, client->bufpos);
+    /* check soft max if needed, recover client */
+    if (soft_max_buffers > 0 && client->bufpos >= soft_max_buffers) {
+      gint newpos;
+
+      newpos = gst_multi_fd_sink_recover_client (sink, client);
+      if (newpos != client->bufpos) {
+        client->dropped_buffers += client->bufpos - newpos;
+        client->bufpos = newpos;
+        client->discont = TRUE;
+        GST_INFO_OBJECT (sink, "[fd %5d] client %p position reset to %d",
+            client->fd.fd, client, client->bufpos);
+      } else {
+        GST_INFO_OBJECT (sink,
+            "[fd %5d] client %p not recovering position",
+            client->fd.fd, client);
+      }
+    }
+    /* check hard max and timeout, remove client */
+    if ((max_buffers > 0 && client->bufpos >= max_buffers) ||
+        (sink->timeout > 0
+            && now - client->last_activity_time > sink->timeout)) {
+      /* remove client */
+      GST_WARNING_OBJECT (sink, "[fd %5d] client %p is too slow, removing",
+          client->fd.fd, client);
+      /* remove the client, the fd set will be cleared and the select thread
+       * will be signaled */
+      client->status = GST_CLIENT_STATUS_SLOW;
+      /* set client to invalid position while being removed */
+      client->bufpos = -1;
+      gst_multi_fd_sink_remove_client_link (sink, clients);
+      need_signal = TRUE;
+      continue;
+    } else if (client->bufpos == 0 || client->new_connection) {
+      /* can send data to this client now. need to signal the select thread that
+       * the fd_set changed */
+      gst_poll_fd_ctl_write (sink->fdset, &client->fd, TRUE);
+      need_signal = TRUE;
+    }
+    /* keep track of maximum buffer usage */
+    if (client->bufpos > max_buffer_usage) {
+      max_buffer_usage = client->bufpos;
+    }
+  }
+
+  /* make sure we respect bytes-min, buffers-min and time-min when they are set */
+  {
+    gint usage, max;
+
+    GST_LOG_OBJECT (sink,
+        "extending queue %d to respect time_min %" GST_TIME_FORMAT
+        ", bytes_min %d, buffers_min %d", max_buffer_usage,
+        GST_TIME_ARGS (sink->time_min), sink->bytes_min, sink->buffers_min);
+
+    /* get index where the limits are ok, we don't really care if all limits
+     * are ok, we just queue as much as we need. We also don't compare against
+     * the max limits. */
+    find_limits (sink, &usage, sink->bytes_min, sink->buffers_min,
+        sink->time_min, &max, -1, -1, -1);
+
+    max_buffer_usage = MAX (max_buffer_usage, usage + 1);
+    GST_LOG_OBJECT (sink, "extended queue to %d", max_buffer_usage);
+  }
+
+  /* now look for sync points and make sure there is at least one
+   * sync point in the queue. We only do this if the LATEST_KEYFRAME or 
+   * BURST_KEYFRAME mode is selected */
+  if (sink->def_sync_method == GST_SYNC_METHOD_LATEST_KEYFRAME ||
+      sink->def_sync_method == GST_SYNC_METHOD_BURST_KEYFRAME) {
+    /* no point in searching beyond the queue length */
+    gint limit = queuelen;
+    GstBuffer *buf;
+
+    /* no point in searching beyond the soft-max if any. */
+    if (soft_max_buffers > 0) {
+      limit = MIN (limit, soft_max_buffers);
+    }
+    GST_LOG_OBJECT (sink,
+        "extending queue to include sync point, now at %d, limit is %d",
+        max_buffer_usage, limit);
+    for (i = 0; i < limit; i++) {
+      buf = g_array_index (sink->bufqueue, GstBuffer *, i);
+      if (is_sync_frame (sink, buf)) {
+        /* found a sync frame, now extend the buffer usage to
+         * include at least this frame. */
+        max_buffer_usage = MAX (max_buffer_usage, i);
+        break;
+      }
+    }
+    GST_LOG_OBJECT (sink, "max buffer usage is now %d", max_buffer_usage);
+  }
+
+  GST_LOG_OBJECT (sink, "len %d, usage %d", queuelen, max_buffer_usage);
+
+  /* nobody is referencing units after max_buffer_usage so we can
+   * remove them from the queue. We remove them in reverse order as
+   * this is the most optimal for GArray. */
+  for (i = queuelen - 1; i > max_buffer_usage; i--) {
+    GstBuffer *old;
+
+    /* queue exceeded max size */
+    queuelen--;
+    old = g_array_index (sink->bufqueue, GstBuffer *, i);
+    sink->bufqueue = g_array_remove_index (sink->bufqueue, i);
+
+    /* unref tail buffer */
+    gst_buffer_unref (old);
+  }
+  /* save for stats */
+  sink->buffers_queued = max_buffer_usage;
+  CLIENTS_UNLOCK (sink);
+
+  /* and send a signal to thread if fd_set changed */
+  if (need_signal) {
+    gst_poll_restart (sink->fdset);
+  }
+}
+
+/* Handle the clients. Basically does a blocking select for one
+ * of the client fds to become read or writable. We also have a
+ * filedescriptor to receive commands on that we need to check.
+ *
+ * After going out of the select call, we read and write to all
+ * clients that can do so. Badly behaving clients are put on a
+ * garbage list and removed.
+ */
+static void
+gst_multi_fd_sink_handle_clients (GstMultiFdSink * sink)
+{
+  int result;
+  GList *clients, *next;
+  gboolean try_again;
+  GstMultiFdSinkClass *fclass;
+  guint cookie;
+
+  fclass = GST_MULTI_FD_SINK_GET_CLASS (sink);
+
+  do {
+    try_again = FALSE;
+
+    /* check for:
+     * - server socket input (ie, new client connections)
+     * - client socket input (ie, clients saying goodbye)
+     * - client socket output (ie, client reads)          */
+    GST_LOG_OBJECT (sink, "waiting on action on fdset");
+
+    result = gst_poll_wait (sink->fdset, sink->timeout != 0 ? sink->timeout :
+        GST_CLOCK_TIME_NONE);
+
+    /* Handle the special case in which the sink is not receiving more buffers
+     * and will not disconnect innactive client in the streaming thread. */
+    if (G_UNLIKELY (result == 0)) {
+      GstClockTime now;
+      GTimeVal nowtv;
+
+      g_get_current_time (&nowtv);
+      now = GST_TIMEVAL_TO_TIME (nowtv);
+
+      CLIENTS_LOCK (sink);
+      for (clients = sink->clients; clients; clients = next) {
+        GstTCPClient *client;
+
+        client = (GstTCPClient *) clients->data;
+        next = g_list_next (clients);
+        if (sink->timeout > 0
+            && now - client->last_activity_time > sink->timeout) {
+          client->status = GST_CLIENT_STATUS_SLOW;
+          gst_multi_fd_sink_remove_client_link (sink, clients);
+        }
+      }
+      CLIENTS_UNLOCK (sink);
+      return;
+    } else if (result < 0) {
+      GST_WARNING_OBJECT (sink, "wait failed: %s (%d)", g_strerror (errno),
+          errno);
+      if (errno == EBADF) {
+        /* ok, so one or more of the fds is invalid. We loop over them to find
+         * the ones that give an error to the F_GETFL fcntl. */
+        CLIENTS_LOCK (sink);
+      restart:
+        cookie = sink->clients_cookie;
+        for (clients = sink->clients; clients; clients = next) {
+          GstTCPClient *client;
+          int fd;
+          long flags;
+          int res;
+
+          if (cookie != sink->clients_cookie) {
+            GST_DEBUG_OBJECT (sink, "Cookie changed finding bad fd");
+            goto restart;
+          }
+
+          client = (GstTCPClient *) clients->data;
+          next = g_list_next (clients);
+
+          fd = client->fd.fd;
+
+          res = fcntl (fd, F_GETFL, &flags);
+          if (res == -1) {
+            GST_WARNING_OBJECT (sink, "fnctl failed for %d, removing: %s (%d)",
+                fd, g_strerror (errno), errno);
+            if (errno == EBADF) {
+              client->status = GST_CLIENT_STATUS_ERROR;
+              /* releases the CLIENTS lock */
+              gst_multi_fd_sink_remove_client_link (sink, clients);
+            }
+          }
+        }
+        CLIENTS_UNLOCK (sink);
+        /* after this, go back in the select loop as the read/writefds
+         * are not valid */
+        try_again = TRUE;
+      } else if (errno == EINTR) {
+        /* interrupted system call, just redo the wait */
+        try_again = TRUE;
+      } else if (errno == EBUSY) {
+        /* the call to gst_poll_wait() was flushed */
+        return;
+      } else {
+        /* this is quite bad... */
+        GST_ELEMENT_ERROR (sink, RESOURCE, READ, (NULL),
+            ("select failed: %s (%d)", g_strerror (errno), errno));
+        return;
+      }
+    } else {
+      GST_LOG_OBJECT (sink, "wait done: %d sockets with events", result);
+    }
+  } while (try_again);
+
+  /* subclasses can check fdset with this virtual function */
+  if (fclass->wait)
+    fclass->wait (sink, sink->fdset);
+
+  /* Check the clients */
+  CLIENTS_LOCK (sink);
+
+restart2:
+  cookie = sink->clients_cookie;
+  for (clients = sink->clients; clients; clients = next) {
+    GstTCPClient *client;
+
+    if (sink->clients_cookie != cookie) {
+      GST_DEBUG_OBJECT (sink, "Restarting loop, cookie out of date");
+      goto restart2;
+    }
+
+    client = (GstTCPClient *) clients->data;
+    next = g_list_next (clients);
+
+    if (client->status != GST_CLIENT_STATUS_FLUSHING
+        && client->status != GST_CLIENT_STATUS_OK) {
+      gst_multi_fd_sink_remove_client_link (sink, clients);
+      continue;
+    }
+
+    if (gst_poll_fd_has_closed (sink->fdset, &client->fd)) {
+      client->status = GST_CLIENT_STATUS_CLOSED;
+      gst_multi_fd_sink_remove_client_link (sink, clients);
+      continue;
+    }
+    if (gst_poll_fd_has_error (sink->fdset, &client->fd)) {
+      GST_WARNING_OBJECT (sink, "gst_poll_fd_has_error for %d", client->fd.fd);
+      client->status = GST_CLIENT_STATUS_ERROR;
+      gst_multi_fd_sink_remove_client_link (sink, clients);
+      continue;
+    }
+    if (gst_poll_fd_can_read (sink->fdset, &client->fd)) {
+      /* handle client read */
+      if (!gst_multi_fd_sink_handle_client_read (sink, client)) {
+        gst_multi_fd_sink_remove_client_link (sink, clients);
+        continue;
+      }
+    }
+    if (gst_poll_fd_can_write (sink->fdset, &client->fd)) {
+      /* handle client write */
+      if (!gst_multi_fd_sink_handle_client_write (sink, client)) {
+        gst_multi_fd_sink_remove_client_link (sink, clients);
+        continue;
+      }
+    }
+  }
+  CLIENTS_UNLOCK (sink);
+}
+
+/* we handle the client communication in another thread so that we do not block
+ * the gstreamer thread while we select() on the client fds */
+static gpointer
+gst_multi_fd_sink_thread (GstMultiFdSink * sink)
+{
+  while (sink->running) {
+    gst_multi_fd_sink_handle_clients (sink);
+  }
+  return NULL;
+}
+
+static GstFlowReturn
+gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf)
+{
+  GstMultiFdSink *sink;
+  gboolean in_caps;
+#if 0
+  GstCaps *bufcaps, *padcaps;
+#endif
+
+  sink = GST_MULTI_FD_SINK (bsink);
+
+  g_return_val_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_MULTI_FD_SINK_OPEN),
+      GST_FLOW_WRONG_STATE);
+
+#if 0
+  /* since we check every buffer for streamheader caps, we need to make
+   * sure every buffer has caps set */
+  bufcaps = gst_buffer_get_caps (buf);
+  padcaps = GST_PAD_CAPS (GST_BASE_SINK_PAD (bsink));
+
+  /* make sure we have caps on the pad */
+  if (!padcaps && !bufcaps)
+    goto no_caps;
+#endif
+
+  /* get IN_CAPS first, code below might mess with the flags */
+  in_caps = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
+
+#if 0
+  /* stamp the buffer with previous caps if no caps set */
+  if (!bufcaps) {
+    if (!gst_buffer_is_writable (buf)) {
+      /* metadata is not writable, copy will be made and original buffer
+       * will be unreffed so we need to ref so that we don't lose the
+       * buffer in the render method. */
+      gst_buffer_ref (buf);
+      /* the new buffer is ours only, we keep it out of the scope of this
+       * function */
+      buf = gst_buffer_make_writable (buf);
+    } else {
+      /* else the metadata is writable, we ref because we keep the buffer
+       * out of the scope of this method */
+      gst_buffer_ref (buf);
+    }
+    /* buffer metadata is writable now, set the caps */
+    gst_buffer_set_caps (buf, padcaps);
+  } else {
+    gst_caps_unref (bufcaps);
+
+    /* since we keep this buffer out of the scope of this method */
+    gst_buffer_ref (buf);
+  }
+#endif
+
+  GST_LOG_OBJECT (sink, "received buffer %p, in_caps: %s, offset %"
+      G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT
+      ", timestamp %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
+      buf, in_caps ? "yes" : "no", GST_BUFFER_OFFSET (buf),
+      GST_BUFFER_OFFSET_END (buf),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+  /* if we get IN_CAPS buffers, but the previous buffer was not IN_CAPS,
+   * it means we're getting new streamheader buffers, and we should clear
+   * the old ones */
+  if (in_caps && sink->previous_buffer_in_caps == FALSE) {
+    GST_DEBUG_OBJECT (sink,
+        "receiving new IN_CAPS buffers, clearing old streamheader");
+    g_slist_foreach (sink->streamheader, (GFunc) gst_mini_object_unref, NULL);
+    g_slist_free (sink->streamheader);
+    sink->streamheader = NULL;
+  }
+
+  /* save the current in_caps */
+  sink->previous_buffer_in_caps = in_caps;
+
+  /* if the incoming buffer is marked as IN CAPS, then we assume for now
+   * it's a streamheader that needs to be sent to each new client, so we
+   * put it on our internal list of streamheader buffers.
+   * FIXME: we could check if the buffer's contents are in fact part of the
+   * current streamheader.
+   *
+   * We don't send the buffer to the client, since streamheaders are sent
+   * separately when necessary. */
+  if (in_caps) {
+    GST_DEBUG_OBJECT (sink, "appending IN_CAPS buffer with length %"
+        G_GSIZE_FORMAT " to streamheader", gst_buffer_get_size (buf));
+    sink->streamheader = g_slist_append (sink->streamheader, buf);
+  } else {
+    /* queue the buffer, this is a regular data buffer. */
+    gst_multi_fd_sink_queue_buffer (sink, buf);
+
+    sink->bytes_to_serve += gst_buffer_get_size (buf);
+  }
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+#if 0
+no_caps:
+  {
+    GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, (NULL),
+        ("Received first buffer without caps set"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+#endif
+}
+
+static void
+gst_multi_fd_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstMultiFdSink *multifdsink;
+
+  multifdsink = GST_MULTI_FD_SINK (object);
+
+  switch (prop_id) {
+    case PROP_MODE:
+      multifdsink->mode = g_value_get_enum (value);
+      break;
+    case PROP_BUFFERS_MAX:
+      multifdsink->units_max = g_value_get_int (value);
+      break;
+    case PROP_BUFFERS_SOFT_MAX:
+      multifdsink->units_soft_max = g_value_get_int (value);
+      break;
+    case PROP_TIME_MIN:
+      multifdsink->time_min = g_value_get_int64 (value);
+      break;
+    case PROP_BYTES_MIN:
+      multifdsink->bytes_min = g_value_get_int (value);
+      break;
+    case PROP_BUFFERS_MIN:
+      multifdsink->buffers_min = g_value_get_int (value);
+      break;
+    case PROP_UNIT_TYPE:
+      multifdsink->unit_type = g_value_get_enum (value);
+      break;
+    case PROP_UNITS_MAX:
+      multifdsink->units_max = g_value_get_int64 (value);
+      break;
+    case PROP_UNITS_SOFT_MAX:
+      multifdsink->units_soft_max = g_value_get_int64 (value);
+      break;
+    case PROP_RECOVER_POLICY:
+      multifdsink->recover_policy = g_value_get_enum (value);
+      break;
+    case PROP_TIMEOUT:
+      multifdsink->timeout = g_value_get_uint64 (value);
+      break;
+    case PROP_SYNC_METHOD:
+      multifdsink->def_sync_method = g_value_get_enum (value);
+      break;
+    case PROP_BURST_UNIT:
+      multifdsink->def_burst_unit = g_value_get_enum (value);
+      break;
+    case PROP_BURST_VALUE:
+      multifdsink->def_burst_value = g_value_get_uint64 (value);
+      break;
+    case PROP_QOS_DSCP:
+      multifdsink->qos_dscp = g_value_get_int (value);
+      setup_dscp (multifdsink);
+      break;
+    case PROP_HANDLE_READ:
+      multifdsink->handle_read = g_value_get_boolean (value);
+      break;
+    case PROP_RESEND_STREAMHEADER:
+      multifdsink->resend_streamheader = g_value_get_boolean (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_multi_fd_sink_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstMultiFdSink *multifdsink;
+
+  multifdsink = GST_MULTI_FD_SINK (object);
+
+  switch (prop_id) {
+    case PROP_MODE:
+      g_value_set_enum (value, multifdsink->mode);
+      break;
+    case PROP_BUFFERS_MAX:
+      g_value_set_int (value, multifdsink->units_max);
+      break;
+    case PROP_BUFFERS_SOFT_MAX:
+      g_value_set_int (value, multifdsink->units_soft_max);
+      break;
+    case PROP_TIME_MIN:
+      g_value_set_int64 (value, multifdsink->time_min);
+      break;
+    case PROP_BYTES_MIN:
+      g_value_set_int (value, multifdsink->bytes_min);
+      break;
+    case PROP_BUFFERS_MIN:
+      g_value_set_int (value, multifdsink->buffers_min);
+      break;
+    case PROP_BUFFERS_QUEUED:
+      g_value_set_uint (value, multifdsink->buffers_queued);
+      break;
+    case PROP_BYTES_QUEUED:
+      g_value_set_uint (value, multifdsink->bytes_queued);
+      break;
+    case PROP_TIME_QUEUED:
+      g_value_set_uint64 (value, multifdsink->time_queued);
+      break;
+    case PROP_UNIT_TYPE:
+      g_value_set_enum (value, multifdsink->unit_type);
+      break;
+    case PROP_UNITS_MAX:
+      g_value_set_int64 (value, multifdsink->units_max);
+      break;
+    case PROP_UNITS_SOFT_MAX:
+      g_value_set_int64 (value, multifdsink->units_soft_max);
+      break;
+    case PROP_RECOVER_POLICY:
+      g_value_set_enum (value, multifdsink->recover_policy);
+      break;
+    case PROP_TIMEOUT:
+      g_value_set_uint64 (value, multifdsink->timeout);
+      break;
+    case PROP_SYNC_METHOD:
+      g_value_set_enum (value, multifdsink->def_sync_method);
+      break;
+    case PROP_BYTES_TO_SERVE:
+      g_value_set_uint64 (value, multifdsink->bytes_to_serve);
+      break;
+    case PROP_BYTES_SERVED:
+      g_value_set_uint64 (value, multifdsink->bytes_served);
+      break;
+    case PROP_BURST_UNIT:
+      g_value_set_enum (value, multifdsink->def_burst_unit);
+      break;
+    case PROP_BURST_VALUE:
+      g_value_set_uint64 (value, multifdsink->def_burst_value);
+      break;
+    case PROP_QOS_DSCP:
+      g_value_set_int (value, multifdsink->qos_dscp);
+      break;
+    case PROP_HANDLE_READ:
+      g_value_set_boolean (value, multifdsink->handle_read);
+      break;
+    case PROP_RESEND_STREAMHEADER:
+      g_value_set_boolean (value, multifdsink->resend_streamheader);
+      break;
+    case PROP_NUM_FDS:
+      g_value_set_uint (value, g_hash_table_size (multifdsink->fd_hash));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+/* create a socket for sending to remote machine */
+static gboolean
+gst_multi_fd_sink_start (GstBaseSink * bsink)
+{
+  GstMultiFdSinkClass *fclass;
+  GstMultiFdSink *this;
+
+  if (GST_OBJECT_FLAG_IS_SET (bsink, GST_MULTI_FD_SINK_OPEN))
+    return TRUE;
+
+  this = GST_MULTI_FD_SINK (bsink);
+  fclass = GST_MULTI_FD_SINK_GET_CLASS (this);
+
+  GST_INFO_OBJECT (this, "starting in mode %d", this->mode);
+  if ((this->fdset = gst_poll_new (TRUE)) == NULL)
+    goto socket_pair;
+
+  this->streamheader = NULL;
+  this->bytes_to_serve = 0;
+  this->bytes_served = 0;
+
+  if (fclass->init) {
+    fclass->init (this);
+  }
+
+  this->running = TRUE;
+  this->thread = g_thread_create ((GThreadFunc) gst_multi_fd_sink_thread,
+      this, TRUE, NULL);
+
+  GST_OBJECT_FLAG_SET (this, GST_MULTI_FD_SINK_OPEN);
+
+  return TRUE;
+
+  /* ERRORS */
+socket_pair:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ_WRITE, (NULL),
+        GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+}
+
+static gboolean
+multifdsink_hash_remove (gpointer key, gpointer value, gpointer data)
+{
+  return TRUE;
+}
+
+static gboolean
+gst_multi_fd_sink_stop (GstBaseSink * bsink)
+{
+  GstMultiFdSinkClass *fclass;
+  GstMultiFdSink *this;
+  GstBuffer *buf;
+  int i;
+
+  this = GST_MULTI_FD_SINK (bsink);
+  fclass = GST_MULTI_FD_SINK_GET_CLASS (this);
+
+  if (!GST_OBJECT_FLAG_IS_SET (bsink, GST_MULTI_FD_SINK_OPEN))
+    return TRUE;
+
+  this->running = FALSE;
+
+  gst_poll_set_flushing (this->fdset, TRUE);
+  if (this->thread) {
+    GST_DEBUG_OBJECT (this, "joining thread");
+    g_thread_join (this->thread);
+    GST_DEBUG_OBJECT (this, "joined thread");
+    this->thread = NULL;
+  }
+
+  /* free the clients */
+  gst_multi_fd_sink_clear (this);
+
+  if (this->streamheader) {
+    g_slist_foreach (this->streamheader, (GFunc) gst_mini_object_unref, NULL);
+    g_slist_free (this->streamheader);
+    this->streamheader = NULL;
+  }
+
+  if (fclass->close)
+    fclass->close (this);
+
+  if (this->fdset) {
+    gst_poll_free (this->fdset);
+    this->fdset = NULL;
+  }
+  g_hash_table_foreach_remove (this->fd_hash, multifdsink_hash_remove, this);
+
+  /* remove all queued buffers */
+  if (this->bufqueue) {
+    GST_DEBUG_OBJECT (this, "Emptying bufqueue with %d buffers",
+        this->bufqueue->len);
+    for (i = this->bufqueue->len - 1; i >= 0; --i) {
+      buf = g_array_index (this->bufqueue, GstBuffer *, i);
+      GST_LOG_OBJECT (this, "Removing buffer %p (%d) with refcount %d", buf, i,
+          GST_MINI_OBJECT_REFCOUNT (buf));
+      gst_buffer_unref (buf);
+      this->bufqueue = g_array_remove_index (this->bufqueue, i);
+    }
+    /* freeing the array is done in _finalize */
+  }
+  GST_OBJECT_FLAG_UNSET (this, GST_MULTI_FD_SINK_OPEN);
+
+  return TRUE;
+}
+
+static GstStateChangeReturn
+gst_multi_fd_sink_change_state (GstElement * element, GstStateChange transition)
+{
+  GstMultiFdSink *sink;
+  GstStateChangeReturn ret;
+
+  sink = GST_MULTI_FD_SINK (element);
+
+  /* we disallow changing the state from the streaming thread */
+  if (g_thread_self () == sink->thread)
+    return GST_STATE_CHANGE_FAILURE;
+
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      if (!gst_multi_fd_sink_start (GST_BASE_SINK (sink)))
+        goto start_failed;
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_multi_fd_sink_stop (GST_BASE_SINK (sink));
+      break;
+    default:
+      break;
+  }
+  return ret;
+
+  /* ERRORS */
+start_failed:
+  {
+    /* error message was posted */
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
diff --git a/gst/tcp/gstmultifdsink.h b/gst/tcp/gstmultifdsink.h
new file mode 100644
index 0000000..b0465af
--- /dev/null
+++ b/gst/tcp/gstmultifdsink.h
@@ -0,0 +1,285 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_MULTI_FD_SINK_H__
+#define __GST_MULTI_FD_SINK_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+G_BEGIN_DECLS
+
+#include "gsttcp.h"
+
+#define GST_TYPE_MULTI_FD_SINK \
+  (gst_multi_fd_sink_get_type())
+#define GST_MULTI_FD_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MULTI_FD_SINK,GstMultiFdSink))
+#define GST_MULTI_FD_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTI_FD_SINK,GstMultiFdSinkClass))
+#define GST_IS_MULTI_FD_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTI_FD_SINK))
+#define GST_IS_MULTI_FD_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTI_FD_SINK))
+#define GST_MULTI_FD_SINK_GET_CLASS(klass) \
+  (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_MULTI_FD_SINK, GstMultiFdSinkClass))
+
+
+typedef struct _GstMultiFdSink GstMultiFdSink;
+typedef struct _GstMultiFdSinkClass GstMultiFdSinkClass;
+
+typedef enum {
+  GST_MULTI_FD_SINK_OPEN             = (GST_ELEMENT_FLAG_LAST << 0),
+
+  GST_MULTI_FD_SINK_FLAG_LAST        = (GST_ELEMENT_FLAG_LAST << 2)
+} GstMultiFdSinkFlags;
+
+/**
+ * GstRecoverPolicy:
+ * @GST_RECOVER_POLICY_NONE             : no recovering is done
+ * @GST_RECOVER_POLICY_RESYNC_LATEST    : client is moved to last buffer
+ * @GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT: client is moved to the soft limit
+ * @GST_RECOVER_POLICY_RESYNC_KEYFRAME  : client is moved to latest keyframe
+ *
+ * Possible values for the recovery procedure to use when a client consumes
+ * data too slow and has a backlag of more that soft-limit buffers.
+ */
+typedef enum
+{
+  GST_RECOVER_POLICY_NONE,
+  GST_RECOVER_POLICY_RESYNC_LATEST,
+  GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT,
+  GST_RECOVER_POLICY_RESYNC_KEYFRAME
+} GstRecoverPolicy;
+
+/**
+ * GstSyncMethod:
+ * @GST_SYNC_METHOD_LATEST              : client receives most recent buffer
+ * @GST_SYNC_METHOD_NEXT_KEYFRAME       : client receives next keyframe
+ * @GST_SYNC_METHOD_LATEST_KEYFRAME     : client receives latest keyframe (burst)
+ * @GST_SYNC_METHOD_BURST               : client receives specific amount of data
+ * @GST_SYNC_METHOD_BURST_KEYFRAME      : client receives specific amount of data 
+ *                                        starting from latest keyframe
+ * @GST_SYNC_METHOD_BURST_WITH_KEYFRAME : client receives specific amount of data from
+ *                                        a keyframe, or if there is not enough data after
+ *                                        the keyframe, starting before the keyframe
+ *
+ * This enum defines the selection of the first buffer that is sent
+ * to a new client.
+ */
+typedef enum
+{
+  GST_SYNC_METHOD_LATEST,
+  GST_SYNC_METHOD_NEXT_KEYFRAME,
+  GST_SYNC_METHOD_LATEST_KEYFRAME,
+  GST_SYNC_METHOD_BURST,
+  GST_SYNC_METHOD_BURST_KEYFRAME,
+  GST_SYNC_METHOD_BURST_WITH_KEYFRAME
+} GstSyncMethod;
+
+/**
+ * GstTCPUnitType:
+ * @GST_TCP_UNIT_TYPE_UNDEFINED: undefined
+ * @GST_TCP_UNIT_TYPE_BUFFERS  : buffers
+ * @GST_TCP_UNIT_TYPE_TIME     : timeunits (in nanoseconds)
+ * @GST_TCP_UNIT_TYPE_BYTES    : bytes
+ *
+ * The units used to specify limits.
+ */
+typedef enum
+{
+  GST_TCP_UNIT_TYPE_UNDEFINED,
+  GST_TCP_UNIT_TYPE_BUFFERS,
+  GST_TCP_UNIT_TYPE_TIME,
+  GST_TCP_UNIT_TYPE_BYTES
+} GstTCPUnitType;
+
+/**
+ * GstClientStatus:
+ * @GST_CLIENT_STATUS_OK       : client is ok
+ * @GST_CLIENT_STATUS_CLOSED   : client closed the socket
+ * @GST_CLIENT_STATUS_REMOVED  : client is removed
+ * @GST_CLIENT_STATUS_SLOW     : client is too slow
+ * @GST_CLIENT_STATUS_ERROR    : client is in error
+ * @GST_CLIENT_STATUS_DUPLICATE: same client added twice
+ * @GST_CLIENT_STATUS_FLUSHING : client is flushing out the remaining buffers.
+ *
+ * This specifies the reason why a client was removed from
+ * multifdsink and is received in the "client-removed" signal.
+ */
+typedef enum
+{
+  GST_CLIENT_STATUS_OK          = 0,
+  GST_CLIENT_STATUS_CLOSED      = 1,
+  GST_CLIENT_STATUS_REMOVED     = 2,
+  GST_CLIENT_STATUS_SLOW        = 3,
+  GST_CLIENT_STATUS_ERROR       = 4,
+  GST_CLIENT_STATUS_DUPLICATE   = 5,
+  GST_CLIENT_STATUS_FLUSHING    = 6
+} GstClientStatus;
+
+/* structure for a client
+ */
+typedef struct {
+  GstPollFD fd;
+
+  gint bufpos;                  /* position of this client in the global queue */
+  gint flushcount;              /* the remaining number of buffers to flush out or -1 if the 
+                                   client is not flushing. */
+
+  GstClientStatus status;
+  gboolean is_socket;
+
+  GSList *sending;              /* the buffers we need to send */
+  gint bufoffset;               /* offset in the first buffer */
+
+  gboolean discont;
+
+  gboolean caps_sent;
+  gboolean new_connection;
+
+  gboolean currently_removing;
+
+  /* method to sync client when connecting */
+  GstSyncMethod sync_method;
+  GstTCPUnitType   burst_min_unit;
+  guint64       burst_min_value;
+  GstTCPUnitType   burst_max_unit;
+  guint64       burst_max_value;
+
+  GstCaps *caps;                /* caps of last queued buffer */
+
+  /* stats */
+  guint64 bytes_sent;
+  guint64 connect_time;
+  guint64 disconnect_time;
+  guint64 last_activity_time;
+  guint64 dropped_buffers;
+  guint64 avg_queue_size;
+  guint64 first_buffer_ts;
+  guint64 last_buffer_ts;
+} GstTCPClient;
+
+#define CLIENTS_LOCK_INIT(fdsink)       (g_static_rec_mutex_init(&fdsink->clientslock))
+#define CLIENTS_LOCK_FREE(fdsink)       (g_static_rec_mutex_free(&fdsink->clientslock))
+#define CLIENTS_LOCK(fdsink)            (g_static_rec_mutex_lock(&fdsink->clientslock))
+#define CLIENTS_UNLOCK(fdsink)          (g_static_rec_mutex_unlock(&fdsink->clientslock))
+
+/**
+ * GstMultiFdSink:
+ *
+ * The multifdsink object structure.
+ */
+struct _GstMultiFdSink {
+  GstBaseSink element;
+
+  /*< private >*/
+  guint64 bytes_to_serve; /* how much bytes we must serve */
+  guint64 bytes_served; /* how much bytes have we served */
+
+  GStaticRecMutex clientslock;  /* lock to protect the clients list */
+  GList *clients;       /* list of clients we are serving */
+  GHashTable *fd_hash;  /* index on fd to client */
+  guint clients_cookie; /* Cookie to detect changes to the clients list */
+
+  gint mode;
+  GstPoll *fdset;
+
+  GSList *streamheader; /* GSList of GstBuffers to use as streamheader */
+  gboolean previous_buffer_in_caps;
+
+  guint mtu;
+  gint qos_dscp;
+  gboolean handle_read;
+
+  GArray *bufqueue;     /* global queue of buffers */
+
+  gboolean running;     /* the thread state */
+  GThread *thread;      /* the sender thread */
+
+  /* these values are used to check if a client is reading fast
+   * enough and to control receovery */
+  GstTCPUnitType unit_type;/* the type of the units */
+  gint64 units_max;       /* max units to queue for a client */
+  gint64 units_soft_max;  /* max units a client can lag before recovery starts */
+  GstRecoverPolicy recover_policy;
+  GstClockTime timeout; /* max amount of nanoseconds to remain idle */
+
+  GstSyncMethod def_sync_method;    /* what method to use for connecting clients */
+  GstTCPUnitType   def_burst_unit;
+  guint64       def_burst_value;
+
+  /* these values are used to control the amount of data
+   * kept in the queues. It allows clients to perform a burst
+   * on connect. */
+  gint   bytes_min;	/* min number of bytes to queue */
+  gint64 time_min;	/* min time to queue */
+  gint   buffers_min;   /* min number of buffers to queue */
+
+  gboolean resend_streamheader; /* resend streamheader if it changes */
+
+  /* stats */
+  gint buffers_queued;  /* number of queued buffers */
+  gint bytes_queued;    /* number of queued bytes */
+  gint time_queued;     /* number of queued time */
+
+  guint8 header_flags;
+};
+
+struct _GstMultiFdSinkClass {
+  GstBaseSinkClass parent_class;
+
+  /* element methods */
+  void          (*add)          (GstMultiFdSink *sink, int fd);
+  void          (*add_full)     (GstMultiFdSink *sink, int fd, GstSyncMethod sync,
+		                 GstTCPUnitType format, guint64 value, 
+				 GstTCPUnitType max_unit, guint64 max_value);
+  void          (*remove)       (GstMultiFdSink *sink, int fd);
+  void          (*remove_flush) (GstMultiFdSink *sink, int fd);
+  void          (*clear)        (GstMultiFdSink *sink);
+  GValueArray*  (*get_stats)    (GstMultiFdSink *sink, int fd);
+
+  /* vtable */
+  gboolean (*init)   (GstMultiFdSink *sink);
+  gboolean (*wait)   (GstMultiFdSink *sink, GstPoll *set);
+  gboolean (*close)  (GstMultiFdSink *sink);
+  void (*removed) (GstMultiFdSink *sink, int fd);
+
+  /* signals */
+  void (*client_added) (GstElement *element, gint fd);
+  void (*client_removed) (GstElement *element, gint fd, GstClientStatus status);
+  void (*client_fd_removed) (GstElement *element, gint fd);
+};
+
+GType gst_multi_fd_sink_get_type (void);
+
+void          gst_multi_fd_sink_add          (GstMultiFdSink *sink, int fd);
+void          gst_multi_fd_sink_add_full     (GstMultiFdSink *sink, int fd, GstSyncMethod sync, 
+                                              GstTCPUnitType min_unit, guint64 min_value,
+                                              GstTCPUnitType max_unit, guint64 max_value);
+void          gst_multi_fd_sink_remove       (GstMultiFdSink *sink, int fd);
+void          gst_multi_fd_sink_remove_flush (GstMultiFdSink *sink, int fd);
+void          gst_multi_fd_sink_clear        (GstMultiFdSink *sink);
+GValueArray*  gst_multi_fd_sink_get_stats    (GstMultiFdSink *sink, int fd);
+
+G_END_DECLS
+
+#endif /* __GST_MULTI_FD_SINK_H__ */
diff --git a/gst/tcp/gsttcp-marshal.list b/gst/tcp/gsttcp-marshal.list
new file mode 100644
index 0000000..0d7208e
--- /dev/null
+++ b/gst/tcp/gsttcp-marshal.list
@@ -0,0 +1,5 @@
+VOID:STRING,UINT
+VOID:INT
+VOID:INT,BOXED
+VOID:INT,ENUM,INT,UINT64,INT,UINT64
+BOXED:INT
diff --git a/gst/tcp/gsttcp.c b/gst/tcp/gsttcp.c
new file mode 100644
index 0000000..f1b83a4
--- /dev/null
+++ b/gst/tcp/gsttcp.c
@@ -0,0 +1,475 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * gsttcp.c: TCP functions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+
+#ifdef HAVE_FIONREAD_IN_SYS_FILIO
+#include <sys/filio.h>
+#endif
+
+#include "gsttcp.h"
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY_EXTERN (tcp_debug);
+#define GST_CAT_DEFAULT tcp_debug
+
+#ifndef MSG_NOSIGNAL
+#define MSG_NOSIGNAL 0
+#endif
+
+/* resolve host to IP address, throwing errors if it fails */
+/* host can already be an IP address */
+/* returns a newly allocated gchar * with the dotted ip address,
+   or NULL, in which case it already fired an error. */
+gchar *
+gst_tcp_host_to_ip (GstElement * element, const gchar * host)
+{
+  struct hostent *hostinfo;
+  char **addrs;
+  gchar *ip;
+  struct in_addr addr;
+
+  GST_DEBUG_OBJECT (element, "resolving host %s", host);
+
+  /* first check if it already is an IP address */
+  if (inet_aton (host, &addr)) {
+    ip = g_strdup (host);
+    goto beach;
+  }
+  /* FIXME: could do a localhost check here */
+
+  /* perform a name lookup */
+  if (!(hostinfo = gethostbyname (host)))
+    goto resolve_error;
+
+  if (hostinfo->h_addrtype != AF_INET)
+    goto not_ip;
+
+  addrs = hostinfo->h_addr_list;
+
+  /* There could be more than one IP address, but we just return the first */
+  ip = g_strdup (inet_ntoa (*(struct in_addr *) *addrs));
+
+beach:
+  GST_DEBUG_OBJECT (element, "resolved to IP %s", ip);
+  return ip;
+
+resolve_error:
+  {
+    GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, (NULL),
+        ("Could not find IP address for host \"%s\".", host));
+    return NULL;
+  }
+not_ip:
+  {
+    GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, (NULL),
+        ("host \"%s\" is not an IP host", host));
+    return NULL;
+  }
+}
+
+/* write buffer to given socket incrementally.
+ * Returns number of bytes written.
+ */
+gint
+gst_tcp_socket_write (int socket, const void *buf, size_t count)
+{
+  size_t bytes_written = 0;
+
+  while (bytes_written < count) {
+    ssize_t wrote = send (socket, (const char *) buf + bytes_written,
+        count - bytes_written, MSG_NOSIGNAL);
+
+    if (wrote <= 0) {
+      GST_WARNING ("error while writing");
+      return bytes_written;
+    }
+    bytes_written += wrote;
+  }
+
+  GST_LOG ("wrote %" G_GSIZE_FORMAT " bytes succesfully", bytes_written);
+  return bytes_written;
+}
+
+/* atomically read count bytes into buf, cancellable. return val of GST_FLOW_OK
+ * indicates success, anything else is failure.
+ */
+static GstFlowReturn
+gst_tcp_socket_read (GstElement * this, int socket, void *buf, size_t count,
+    GstPoll * fdset)
+{
+  ssize_t n;
+  size_t bytes_read;
+  int num_to_read;
+  int ret;
+
+  bytes_read = 0;
+
+  while (bytes_read < count) {
+    /* do a blocking select on the socket */
+    /* no action (0) is an error too in our case */
+    if ((ret = gst_poll_wait (fdset, GST_CLOCK_TIME_NONE)) <= 0) {
+      if (ret == -1 && errno == EBUSY)
+        goto cancelled;
+      else
+        goto select_error;
+    }
+
+    /* ask how much is available for reading on the socket */
+    if (ioctl (socket, FIONREAD, &num_to_read) < 0)
+      goto ioctl_error;
+
+    if (num_to_read == 0)
+      goto got_eos;
+
+    /* sizeof(ssize_t) >= sizeof(int), so I know num_to_read <= SSIZE_MAX */
+
+    num_to_read = MIN (num_to_read, count - bytes_read);
+
+    n = read (socket, ((guint8 *) buf) + bytes_read, num_to_read);
+
+    if (n < 0)
+      goto read_error;
+
+    if (n < num_to_read)
+      goto short_read;
+
+    bytes_read += num_to_read;
+  }
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+select_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("select failed: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+cancelled:
+  {
+    GST_DEBUG_OBJECT (this, "Select was cancelled");
+    return GST_FLOW_WRONG_STATE;
+  }
+ioctl_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("ioctl failed: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+got_eos:
+  {
+    GST_DEBUG_OBJECT (this, "Got EOS on socket stream");
+    return GST_FLOW_UNEXPECTED;
+  }
+read_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("read failed: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+short_read:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("short read: wanted %d bytes, got %" G_GSSIZE_FORMAT, num_to_read, n));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* close the socket and reset the fd.  Used to clean up after errors. */
+void
+gst_tcp_socket_close (GstPollFD * socket)
+{
+  if (socket->fd >= 0) {
+    close (socket->fd);
+    socket->fd = -1;
+  }
+}
+
+/* read a buffer from the given socket
+ * returns:
+ * - a GstBuffer in which data should be read
+ * - NULL, indicating a connection close or an error, to be handled with
+ *         EOS
+ */
+GstFlowReturn
+gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
+    GstBuffer ** buf)
+{
+  int ret;
+  gssize bytes_read;
+  int readsize;
+  guint8 *data;
+
+  *buf = NULL;
+
+  /* do a blocking select on the socket */
+  /* no action (0) is an error too in our case */
+  if ((ret = gst_poll_wait (fdset, GST_CLOCK_TIME_NONE)) <= 0) {
+    if (ret == -1 && errno == EBUSY)
+      goto cancelled;
+    else
+      goto select_error;
+  }
+
+  /* ask how much is available for reading on the socket */
+  if (ioctl (socket, FIONREAD, &readsize) < 0)
+    goto ioctl_error;
+
+  if (readsize == 0)
+    goto got_eos;
+
+  /* sizeof(ssize_t) >= sizeof(int), so I know readsize <= SSIZE_MAX */
+
+  *buf = gst_buffer_new_and_alloc (readsize);
+
+  data = gst_buffer_map (*buf, NULL, NULL, GST_MAP_WRITE);
+  bytes_read = read (socket, data, readsize);
+  gst_buffer_unmap (*buf, data, bytes_read);
+
+  if (bytes_read < 0)
+    goto read_error;
+
+  if (bytes_read < readsize)
+    /* but mom, you promised to give me readsize bytes! */
+    goto short_read;
+
+  GST_LOG_OBJECT (this,
+      "returning buffer of size %" G_GSSIZE_FORMAT, bytes_read);
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+select_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("select failed: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+cancelled:
+  {
+    GST_DEBUG_OBJECT (this, "Select was cancelled");
+    return GST_FLOW_WRONG_STATE;
+  }
+ioctl_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("ioctl failed: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+got_eos:
+  {
+    GST_DEBUG_OBJECT (this, "Got EOS on socket stream");
+    return GST_FLOW_UNEXPECTED;
+  }
+read_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("read failed: %s", g_strerror (errno)));
+    gst_buffer_unref (*buf);
+    *buf = NULL;
+    return GST_FLOW_ERROR;
+  }
+short_read:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("short read: wanted %d bytes, got %" G_GSSIZE_FORMAT, readsize,
+            bytes_read));
+    gst_buffer_unref (*buf);
+    *buf = NULL;
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* read a buffer from the given socket
+ * returns:
+ * - a GstBuffer in which data should be read
+ * - NULL, indicating a connection close or an error, to be handled with
+ *         EOS
+ */
+GstFlowReturn
+gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
+    GstBuffer ** buf)
+{
+  GstFlowReturn ret;
+  guint8 *header = NULL;
+  guint8 *data;
+  gsize size;
+
+  GST_LOG_OBJECT (this, "Reading %d bytes for buffer packet header",
+      GST_DP_HEADER_LENGTH);
+
+  *buf = NULL;
+  header = g_malloc (GST_DP_HEADER_LENGTH);
+
+  ret = gst_tcp_socket_read (this, socket, header, GST_DP_HEADER_LENGTH, fdset);
+
+  if (ret != GST_FLOW_OK)
+    goto header_read_error;
+
+  if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header))
+    goto validate_error;
+
+  if (gst_dp_header_payload_type (header) != GST_DP_PAYLOAD_BUFFER)
+    goto is_not_buffer;
+
+  GST_LOG_OBJECT (this, "validated buffer packet header");
+
+  *buf = gst_dp_buffer_from_header (GST_DP_HEADER_LENGTH, header);
+
+  g_free (header);
+
+  data = gst_buffer_map (*buf, &size, NULL, GST_MAP_WRITE);
+  ret = gst_tcp_socket_read (this, socket, data, size, fdset);
+  gst_buffer_unmap (*buf, data, size);
+
+  if (ret != GST_FLOW_OK)
+    goto data_read_error;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+header_read_error:
+  {
+    g_free (header);
+    return ret;
+  }
+validate_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("GDP buffer packet header does not validate"));
+    g_free (header);
+    return GST_FLOW_ERROR;
+  }
+is_not_buffer:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("GDP packet contains something that is not a buffer (type %d)",
+            gst_dp_header_payload_type (header)));
+    g_free (header);
+    return GST_FLOW_ERROR;
+  }
+data_read_error:
+  {
+    gst_buffer_unref (*buf);
+    *buf = NULL;
+    return ret;
+  }
+}
+
+GstFlowReturn
+gst_tcp_gdp_read_caps (GstElement * this, int socket, GstPoll * fdset,
+    GstCaps ** caps)
+{
+  GstFlowReturn ret;
+  guint8 *header = NULL;
+  guint8 *payload = NULL;
+  size_t payload_length;
+
+  GST_LOG_OBJECT (this, "Reading %d bytes for caps packet header",
+      GST_DP_HEADER_LENGTH);
+
+  *caps = NULL;
+  header = g_malloc (GST_DP_HEADER_LENGTH);
+
+  ret = gst_tcp_socket_read (this, socket, header, GST_DP_HEADER_LENGTH, fdset);
+
+  if (ret != GST_FLOW_OK)
+    goto header_read_error;
+
+  if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header))
+    goto header_validate_error;
+
+  if (gst_dp_header_payload_type (header) != GST_DP_PAYLOAD_CAPS)
+    goto is_not_caps;
+
+  GST_LOG_OBJECT (this, "validated caps packet header");
+
+  payload_length = gst_dp_header_payload_length (header);
+  payload = g_malloc (payload_length);
+
+  GST_LOG_OBJECT (this,
+      "Reading %" G_GSIZE_FORMAT " bytes for caps packet payload",
+      payload_length);
+
+  ret = gst_tcp_socket_read (this, socket, payload, payload_length, fdset);
+
+  if (ret != GST_FLOW_OK)
+    goto payload_read_error;
+
+  if (!gst_dp_validate_payload (GST_DP_HEADER_LENGTH, header, payload))
+    goto payload_validate_error;
+
+  *caps = gst_dp_caps_from_packet (GST_DP_HEADER_LENGTH, header, payload);
+
+  GST_DEBUG_OBJECT (this, "Got caps over GDP: %" GST_PTR_FORMAT, *caps);
+
+  g_free (header);
+  g_free (payload);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+header_read_error:
+  {
+    g_free (header);
+    return ret;
+  }
+header_validate_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("GDP caps packet header does not validate"));
+    g_free (header);
+    return GST_FLOW_ERROR;
+  }
+is_not_caps:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("GDP packet contains something that is not a caps (type %d)",
+            gst_dp_header_payload_type (header)));
+    g_free (header);
+    return GST_FLOW_ERROR;
+  }
+payload_read_error:
+  {
+    g_free (header);
+    g_free (payload);
+    return ret;
+  }
+payload_validate_error:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("GDP caps packet payload does not validate"));
+    g_free (header);
+    g_free (payload);
+    return GST_FLOW_ERROR;
+  }
+}
diff --git a/gst/tcp/gsttcp.h b/gst/tcp/gsttcp.h
new file mode 100644
index 0000000..64299ef
--- /dev/null
+++ b/gst/tcp/gsttcp.h
@@ -0,0 +1,50 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * gsttcp.h: helper functions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_TCP_HELP_H__
+#define __GST_TCP_HELP_H__
+
+#include "gsttcp-enumtypes.h"
+#include <gst/gst.h>
+#undef GST_DISABLE_DEPRECATED
+#include <gst/dataprotocol/dataprotocol.h>
+
+#define TCP_HIGHEST_PORT        65535
+#define TCP_DEFAULT_HOST        "localhost"
+#define TCP_DEFAULT_PORT        4953
+
+G_BEGIN_DECLS
+
+gchar * gst_tcp_host_to_ip (GstElement *element, const gchar *host);
+
+gint gst_tcp_socket_write (int socket, const void *buf, size_t count);
+
+void gst_tcp_socket_close (GstPollFD *socket);
+
+GstFlowReturn gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset, GstBuffer **buf);
+
+GstFlowReturn gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset, GstBuffer **buf);
+GstFlowReturn gst_tcp_gdp_read_caps (GstElement * this, int socket, GstPoll * fdset, GstCaps **caps);
+
+G_END_DECLS
+
+#endif /* __GST_TCP_HELP_H__ */
diff --git a/gst/tcp/gsttcpclientsink.c b/gst/tcp/gsttcpclientsink.c
new file mode 100644
index 0000000..a8dc756
--- /dev/null
+++ b/gst/tcp/gsttcpclientsink.c
@@ -0,0 +1,358 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-tcpclientsink
+ * @see_also: #tcpclientsrc
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * # server:
+ * nc -l -p 3000
+ * # client:
+ * gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+ * ]| everything you type in the client is shown on the server
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst-i18n-plugin.h>
+#include <gst/dataprotocol/dataprotocol.h>
+#include "gsttcp.h"
+#include "gsttcpclientsink.h"
+#include <string.h>             /* memset */
+
+/* TCPClientSink signals and args */
+enum
+{
+  FRAME_ENCODED,
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+GST_DEBUG_CATEGORY_STATIC (tcpclientsink_debug);
+#define GST_CAT_DEFAULT (tcpclientsink_debug)
+
+enum
+{
+  ARG_0,
+  ARG_HOST,
+  ARG_PORT
+};
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static void gst_tcp_client_sink_finalize (GObject * gobject);
+
+static gboolean gst_tcp_client_sink_setcaps (GstBaseSink * bsink,
+    GstCaps * caps);
+static GstFlowReturn gst_tcp_client_sink_render (GstBaseSink * bsink,
+    GstBuffer * buf);
+static GstStateChangeReturn gst_tcp_client_sink_change_state (GstElement *
+    element, GstStateChange transition);
+
+static void gst_tcp_client_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_tcp_client_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+
+/*static guint gst_tcp_client_sink_signals[LAST_SIGNAL] = { 0 }; */
+
+#define gst_tcp_client_sink_parent_class parent_class
+G_DEFINE_TYPE (GstTCPClientSink, gst_tcp_client_sink, GST_TYPE_BASE_SINK);
+
+static void
+gst_tcp_client_sink_class_init (GstTCPClientSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->set_property = gst_tcp_client_sink_set_property;
+  gobject_class->get_property = gst_tcp_client_sink_get_property;
+  gobject_class->finalize = gst_tcp_client_sink_finalize;
+
+  g_object_class_install_property (gobject_class, ARG_HOST,
+      g_param_spec_string ("host", "Host", "The host/IP to send the packets to",
+          TCP_DEFAULT_HOST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_PORT,
+      g_param_spec_int ("port", "Port", "The port to send the packets to",
+          0, TCP_HIGHEST_PORT, TCP_DEFAULT_PORT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&sinktemplate));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "TCP client sink", "Sink/Network",
+      "Send data as a client over the network via TCP",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gstelement_class->change_state = gst_tcp_client_sink_change_state;
+
+  gstbasesink_class->set_caps = gst_tcp_client_sink_setcaps;
+  gstbasesink_class->render = gst_tcp_client_sink_render;
+
+  GST_DEBUG_CATEGORY_INIT (tcpclientsink_debug, "tcpclientsink", 0, "TCP sink");
+}
+
+static void
+gst_tcp_client_sink_init (GstTCPClientSink * this)
+{
+  this->host = g_strdup (TCP_DEFAULT_HOST);
+  this->port = TCP_DEFAULT_PORT;
+
+  this->sock_fd.fd = -1;
+  GST_OBJECT_FLAG_UNSET (this, GST_TCP_CLIENT_SINK_OPEN);
+}
+
+static void
+gst_tcp_client_sink_finalize (GObject * gobject)
+{
+  GstTCPClientSink *this = GST_TCP_CLIENT_SINK (gobject);
+
+  g_free (this->host);
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static gboolean
+gst_tcp_client_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+{
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_tcp_client_sink_render (GstBaseSink * bsink, GstBuffer * buf)
+{
+  size_t wrote = 0;
+  GstTCPClientSink *sink;
+  guint8 *data;
+  gsize size;
+
+  sink = GST_TCP_CLIENT_SINK (bsink);
+
+  g_return_val_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_TCP_CLIENT_SINK_OPEN),
+      GST_FLOW_WRONG_STATE);
+
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  GST_LOG_OBJECT (sink, "writing %" G_GSIZE_FORMAT " bytes for buffer data",
+      size);
+
+  /* write buffer data */
+  wrote = gst_tcp_socket_write (sink->sock_fd.fd, data, size);
+  gst_buffer_unmap (buf, data, size);
+
+  if (wrote < size)
+    goto write_error;
+
+  sink->data_written += wrote;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+write_error:
+  {
+    GST_ELEMENT_ERROR (sink, RESOURCE, WRITE,
+        (_("Error while sending data to \"%s:%d\"."), sink->host, sink->port),
+        ("Only %" G_GSIZE_FORMAT " of %" G_GSIZE_FORMAT " bytes written: %s",
+            wrote, size, g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+gst_tcp_client_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTCPClientSink *tcpclientsink;
+
+  g_return_if_fail (GST_IS_TCP_CLIENT_SINK (object));
+  tcpclientsink = GST_TCP_CLIENT_SINK (object);
+
+  switch (prop_id) {
+    case ARG_HOST:
+      if (!g_value_get_string (value)) {
+        g_warning ("host property cannot be NULL");
+        break;
+      }
+      g_free (tcpclientsink->host);
+      tcpclientsink->host = g_strdup (g_value_get_string (value));
+      break;
+    case ARG_PORT:
+      tcpclientsink->port = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tcp_client_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTCPClientSink *tcpclientsink;
+
+  g_return_if_fail (GST_IS_TCP_CLIENT_SINK (object));
+  tcpclientsink = GST_TCP_CLIENT_SINK (object);
+
+  switch (prop_id) {
+    case ARG_HOST:
+      g_value_set_string (value, tcpclientsink->host);
+      break;
+    case ARG_PORT:
+      g_value_set_int (value, tcpclientsink->port);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+/* create a socket for sending to remote machine */
+static gboolean
+gst_tcp_client_sink_start (GstTCPClientSink * this)
+{
+  int ret;
+  gchar *ip;
+
+  if (GST_OBJECT_FLAG_IS_SET (this, GST_TCP_CLIENT_SINK_OPEN))
+    return TRUE;
+
+  /* reset caps_sent flag */
+  this->caps_sent = FALSE;
+
+  /* create sending client socket */
+  GST_DEBUG_OBJECT (this, "opening sending client socket to %s:%d", this->host,
+      this->port);
+  if ((this->sock_fd.fd = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
+    GST_ELEMENT_ERROR (this, RESOURCE, OPEN_WRITE, (NULL), GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+  GST_DEBUG_OBJECT (this, "opened sending client socket with fd %d",
+      this->sock_fd.fd);
+
+  /* look up name if we need to */
+  ip = gst_tcp_host_to_ip (GST_ELEMENT (this), this->host);
+  if (!ip) {
+    gst_tcp_socket_close (&this->sock_fd);
+    return FALSE;
+  }
+  GST_DEBUG_OBJECT (this, "IP address for host %s is %s", this->host, ip);
+
+  /* connect to server */
+  memset (&this->server_sin, 0, sizeof (this->server_sin));
+  this->server_sin.sin_family = AF_INET;        /* network socket */
+  this->server_sin.sin_port = htons (this->port);       /* on port */
+  this->server_sin.sin_addr.s_addr = inet_addr (ip);    /* on host ip */
+  g_free (ip);
+
+  GST_DEBUG_OBJECT (this, "connecting to server");
+  ret = connect (this->sock_fd.fd, (struct sockaddr *) &this->server_sin,
+      sizeof (this->server_sin));
+
+  if (ret) {
+    gst_tcp_socket_close (&this->sock_fd);
+    switch (errno) {
+      case ECONNREFUSED:
+        GST_ELEMENT_ERROR (this, RESOURCE, OPEN_WRITE,
+            (_("Connection to %s:%d refused."), this->host, this->port),
+            (NULL));
+        return FALSE;
+        break;
+      default:
+        GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
+            ("connect to %s:%d failed: %s", this->host, this->port,
+                g_strerror (errno)));
+        return FALSE;
+        break;
+    }
+  }
+
+  GST_OBJECT_FLAG_SET (this, GST_TCP_CLIENT_SINK_OPEN);
+
+  this->data_written = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_tcp_client_sink_stop (GstTCPClientSink * this)
+{
+  if (!GST_OBJECT_FLAG_IS_SET (this, GST_TCP_CLIENT_SINK_OPEN))
+    return TRUE;
+
+  gst_tcp_socket_close (&this->sock_fd);
+
+  GST_OBJECT_FLAG_UNSET (this, GST_TCP_CLIENT_SINK_OPEN);
+
+  return TRUE;
+}
+
+static GstStateChangeReturn
+gst_tcp_client_sink_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstTCPClientSink *sink;
+  GstStateChangeReturn res;
+
+  sink = GST_TCP_CLIENT_SINK (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      if (!gst_tcp_client_sink_start (sink))
+        goto start_failure;
+      break;
+    default:
+      break;
+  }
+  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_tcp_client_sink_stop (sink);
+    default:
+      break;
+  }
+  return res;
+
+start_failure:
+  {
+    return GST_STATE_CHANGE_FAILURE;
+  }
+}
diff --git a/gst/tcp/gsttcpclientsink.h b/gst/tcp/gsttcpclientsink.h
new file mode 100644
index 0000000..09556ff
--- /dev/null
+++ b/gst/tcp/gsttcpclientsink.h
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TCP_CLIENT_SINK_H__
+#define __GST_TCP_CLIENT_SINK_H__
+
+
+#include <gst/gst.h>
+#include <gst/base/gstbasesink.h>
+
+#include "gsttcp.h"
+
+G_BEGIN_DECLS
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <arpa/inet.h>
+#include "gsttcp.h"
+
+#define GST_TYPE_TCP_CLIENT_SINK \
+  (gst_tcp_client_sink_get_type())
+#define GST_TCP_CLIENT_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TCP_CLIENT_SINK,GstTCPClientSink))
+#define GST_TCP_CLIENT_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TCP_CLIENT_SINK,GstTCPClientSinkClass))
+#define GST_IS_TCP_CLIENT_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TCP_CLIENT_SINK))
+#define GST_IS_TCP_CLIENT_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TCP_CLIENT_SINK))
+
+typedef struct _GstTCPClientSink GstTCPClientSink;
+typedef struct _GstTCPClientSinkClass GstTCPClientSinkClass;
+
+typedef enum {
+  GST_TCP_CLIENT_SINK_OPEN             = (GST_ELEMENT_FLAG_LAST << 0),
+
+  GST_TCP_CLIENT_SINK_FLAG_LAST        = (GST_ELEMENT_FLAG_LAST << 2),
+} GstTCPClientSinkFlags;
+
+struct _GstTCPClientSink {
+  GstBaseSink element;
+
+  /* server information */
+  int port;
+  gchar *host;
+  struct sockaddr_in server_sin;
+
+  /* socket */
+  GstPollFD sock_fd;
+
+  size_t data_written; /* how much bytes have we written ? */
+  gboolean caps_sent; /* whether or not we sent caps already */
+};
+
+struct _GstTCPClientSinkClass {
+  GstBaseSinkClass parent_class;
+};
+
+GType gst_tcp_client_sink_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_TCP_CLIENT_SINK_H__ */
diff --git a/gst/tcp/gsttcpclientsrc.c b/gst/tcp/gsttcpclientsrc.c
new file mode 100644
index 0000000..3a83fba
--- /dev/null
+++ b/gst/tcp/gsttcpclientsrc.c
@@ -0,0 +1,392 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-tcpclientsrc
+ * @see_also: #tcpclientsink
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * # server:
+ * nc -l -p 3000
+ * # client:
+ * gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+ * ]| everything you type in the server is shown on the client
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+#include "gsttcp.h"
+#include "gsttcpclientsrc.h"
+#include <string.h>             /* memset */
+#include <unistd.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+
+
+GST_DEBUG_CATEGORY_STATIC (tcpclientsrc_debug);
+#define GST_CAT_DEFAULT tcpclientsrc_debug
+
+#define MAX_READ_SIZE                   4 * 1024
+
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+
+enum
+{
+  PROP_0,
+  PROP_HOST,
+  PROP_PORT
+};
+
+#define gst_tcp_client_src_parent_class parent_class
+G_DEFINE_TYPE (GstTCPClientSrc, gst_tcp_client_src, GST_TYPE_PUSH_SRC);
+
+
+static void gst_tcp_client_src_finalize (GObject * gobject);
+
+static GstCaps *gst_tcp_client_src_getcaps (GstBaseSrc * psrc,
+    GstCaps * filter);
+
+static GstFlowReturn gst_tcp_client_src_create (GstPushSrc * psrc,
+    GstBuffer ** outbuf);
+static gboolean gst_tcp_client_src_stop (GstBaseSrc * bsrc);
+static gboolean gst_tcp_client_src_start (GstBaseSrc * bsrc);
+static gboolean gst_tcp_client_src_unlock (GstBaseSrc * bsrc);
+static gboolean gst_tcp_client_src_unlock_stop (GstBaseSrc * bsrc);
+
+static void gst_tcp_client_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_tcp_client_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void
+gst_tcp_client_src_class_init (GstTCPClientSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstPushSrcClass *gstpush_src_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstpush_src_class = (GstPushSrcClass *) klass;
+
+  gobject_class->set_property = gst_tcp_client_src_set_property;
+  gobject_class->get_property = gst_tcp_client_src_get_property;
+  gobject_class->finalize = gst_tcp_client_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_HOST,
+      g_param_spec_string ("host", "Host",
+          "The host IP address to receive packets from", TCP_DEFAULT_HOST,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_PORT,
+      g_param_spec_int ("port", "Port", "The port to receive packets from", 0,
+          TCP_HIGHEST_PORT, TCP_DEFAULT_PORT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "TCP client source", "Source/Network",
+      "Receive data as a client over the network via TCP",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gstbasesrc_class->get_caps = gst_tcp_client_src_getcaps;
+  gstbasesrc_class->start = gst_tcp_client_src_start;
+  gstbasesrc_class->stop = gst_tcp_client_src_stop;
+  gstbasesrc_class->unlock = gst_tcp_client_src_unlock;
+  gstbasesrc_class->unlock_stop = gst_tcp_client_src_unlock_stop;
+
+  gstpush_src_class->create = gst_tcp_client_src_create;
+
+  GST_DEBUG_CATEGORY_INIT (tcpclientsrc_debug, "tcpclientsrc", 0,
+      "TCP Client Source");
+}
+
+static void
+gst_tcp_client_src_init (GstTCPClientSrc * this)
+{
+  this->port = TCP_DEFAULT_PORT;
+  this->host = g_strdup (TCP_DEFAULT_HOST);
+  this->sock_fd.fd = -1;
+  this->caps = NULL;
+
+  GST_OBJECT_FLAG_UNSET (this, GST_TCP_CLIENT_SRC_OPEN);
+}
+
+static void
+gst_tcp_client_src_finalize (GObject * gobject)
+{
+  GstTCPClientSrc *this = GST_TCP_CLIENT_SRC (gobject);
+
+  g_free (this->host);
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static GstCaps *
+gst_tcp_client_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
+{
+  GstTCPClientSrc *src;
+  GstCaps *caps = NULL;
+
+  src = GST_TCP_CLIENT_SRC (bsrc);
+
+  if (!GST_OBJECT_FLAG_IS_SET (src, GST_TCP_CLIENT_SRC_OPEN))
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+  else if (src->caps && filter)
+    caps =
+        gst_caps_intersect_full (filter, src->caps, GST_CAPS_INTERSECT_FIRST);
+  else if (src->caps)
+    caps = gst_caps_copy (src->caps);
+  else
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+
+  GST_DEBUG_OBJECT (src, "returning caps %" GST_PTR_FORMAT, caps);
+  g_assert (GST_IS_CAPS (caps));
+  return caps;
+}
+
+static GstFlowReturn
+gst_tcp_client_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
+{
+  GstTCPClientSrc *src;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  src = GST_TCP_CLIENT_SRC (psrc);
+
+  if (!GST_OBJECT_FLAG_IS_SET (src, GST_TCP_CLIENT_SRC_OPEN))
+    goto wrong_state;
+
+  GST_LOG_OBJECT (src, "asked for a buffer");
+
+  /* read the buffer header */
+  ret = gst_tcp_read_buffer (GST_ELEMENT (src), src->sock_fd.fd,
+      src->fdset, outbuf);
+
+  if (ret == GST_FLOW_OK) {
+    GST_LOG_OBJECT (src,
+        "Returning buffer from _get of size %" G_GSIZE_FORMAT ", ts %"
+        GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
+        ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
+        gst_buffer_get_size (*outbuf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
+        GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));
+  }
+
+  return ret;
+
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (src, "connection to closed, cannot read data");
+    return GST_FLOW_WRONG_STATE;
+  }
+}
+
+static void
+gst_tcp_client_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTCPClientSrc *tcpclientsrc = GST_TCP_CLIENT_SRC (object);
+
+  switch (prop_id) {
+    case PROP_HOST:
+      if (!g_value_get_string (value)) {
+        g_warning ("host property cannot be NULL");
+        break;
+      }
+      g_free (tcpclientsrc->host);
+      tcpclientsrc->host = g_strdup (g_value_get_string (value));
+      break;
+    case PROP_PORT:
+      tcpclientsrc->port = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tcp_client_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTCPClientSrc *tcpclientsrc = GST_TCP_CLIENT_SRC (object);
+
+  switch (prop_id) {
+    case PROP_HOST:
+      g_value_set_string (value, tcpclientsrc->host);
+      break;
+    case PROP_PORT:
+      g_value_set_int (value, tcpclientsrc->port);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* create a socket for connecting to remote server */
+static gboolean
+gst_tcp_client_src_start (GstBaseSrc * bsrc)
+{
+  int ret;
+  gchar *ip;
+  GstTCPClientSrc *src = GST_TCP_CLIENT_SRC (bsrc);
+
+  if ((src->fdset = gst_poll_new (TRUE)) == NULL)
+    goto socket_pair;
+
+  /* create receiving client socket */
+  GST_DEBUG_OBJECT (src, "opening receiving client socket to %s:%d",
+      src->host, src->port);
+
+  if ((src->sock_fd.fd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
+    goto no_socket;
+
+  GST_DEBUG_OBJECT (src, "opened receiving client socket with fd %d",
+      src->sock_fd.fd);
+  GST_OBJECT_FLAG_SET (src, GST_TCP_CLIENT_SRC_OPEN);
+
+  /* look up name if we need to */
+  if (!(ip = gst_tcp_host_to_ip (GST_ELEMENT (src), src->host)))
+    goto name_resolv;
+
+  GST_DEBUG_OBJECT (src, "IP address for host %s is %s", src->host, ip);
+
+  /* connect to server */
+  memset (&src->server_sin, 0, sizeof (src->server_sin));
+  src->server_sin.sin_family = AF_INET; /* network socket */
+  src->server_sin.sin_port = htons (src->port); /* on port */
+  src->server_sin.sin_addr.s_addr = inet_addr (ip);     /* on host ip */
+  g_free (ip);
+
+  GST_DEBUG_OBJECT (src, "connecting to server");
+  ret = connect (src->sock_fd.fd, (struct sockaddr *) &src->server_sin,
+      sizeof (src->server_sin));
+  if (ret)
+    goto connect_failed;
+
+  /* add the socket to the poll */
+  gst_poll_add_fd (src->fdset, &src->sock_fd);
+  gst_poll_fd_ctl_read (src->fdset, &src->sock_fd, TRUE);
+
+  return TRUE;
+
+socket_pair:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
+        GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+no_socket:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+name_resolv:
+  {
+    gst_tcp_client_src_stop (GST_BASE_SRC (src));
+    return FALSE;
+  }
+connect_failed:
+  {
+    gst_tcp_client_src_stop (GST_BASE_SRC (src));
+    switch (errno) {
+      case ECONNREFUSED:
+        GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+            (_("Connection to %s:%d refused."), src->host, src->port), (NULL));
+        break;
+      default:
+        GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+            ("connect to %s:%d failed: %s", src->host, src->port,
+                g_strerror (errno)));
+        break;
+    }
+    return FALSE;
+  }
+}
+
+/* close the socket and associated resources
+ * unset OPEN flag
+ * used both to recover from errors and go to NULL state */
+static gboolean
+gst_tcp_client_src_stop (GstBaseSrc * bsrc)
+{
+  GstTCPClientSrc *src;
+
+  src = GST_TCP_CLIENT_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (src, "closing socket");
+
+  if (src->fdset != NULL) {
+    gst_poll_free (src->fdset);
+    src->fdset = NULL;
+  }
+
+  gst_tcp_socket_close (&src->sock_fd);
+  src->caps_received = FALSE;
+  if (src->caps) {
+    gst_caps_unref (src->caps);
+    src->caps = NULL;
+  }
+  GST_OBJECT_FLAG_UNSET (src, GST_TCP_CLIENT_SRC_OPEN);
+
+  return TRUE;
+}
+
+/* will be called only between calls to start() and stop() */
+static gboolean
+gst_tcp_client_src_unlock (GstBaseSrc * bsrc)
+{
+  GstTCPClientSrc *src = GST_TCP_CLIENT_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (src, "set to flushing");
+  gst_poll_set_flushing (src->fdset, TRUE);
+
+  return TRUE;
+}
+
+/* will be called only between calls to start() and stop() */
+static gboolean
+gst_tcp_client_src_unlock_stop (GstBaseSrc * bsrc)
+{
+  GstTCPClientSrc *src = GST_TCP_CLIENT_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (src, "unset flushing");
+  gst_poll_set_flushing (src->fdset, FALSE);
+
+  return TRUE;
+}
diff --git a/gst/tcp/gsttcpclientsrc.h b/gst/tcp/gsttcpclientsrc.h
new file mode 100644
index 0000000..77d5702
--- /dev/null
+++ b/gst/tcp/gsttcpclientsrc.h
@@ -0,0 +1,82 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TCP_CLIENT_SRC_H__
+#define __GST_TCP_CLIENT_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+G_BEGIN_DECLS
+
+#include <netdb.h>                        /* sockaddr_in */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>                   /* sockaddr_in */
+#include <unistd.h>
+
+#include "gsttcp.h"
+
+#define GST_TYPE_TCP_CLIENT_SRC \
+  (gst_tcp_client_src_get_type())
+#define GST_TCP_CLIENT_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TCP_CLIENT_SRC,GstTCPClientSrc))
+#define GST_TCP_CLIENT_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TCP_CLIENT_SRC,GstTCPClientSrcClass))
+#define GST_IS_TCP_CLIENT_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TCP_CLIENT_SRC))
+#define GST_IS_TCP_CLIENT_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TCP_CLIENT_SRC))
+
+typedef struct _GstTCPClientSrc GstTCPClientSrc;
+typedef struct _GstTCPClientSrcClass GstTCPClientSrcClass;
+
+typedef enum {
+  GST_TCP_CLIENT_SRC_OPEN       = (GST_ELEMENT_FLAG_LAST << 0),
+
+  GST_TCP_CLIENT_SRC_FLAG_LAST  = (GST_ELEMENT_FLAG_LAST << 2)
+} GstTCPClientSrcFlags;
+
+struct _GstTCPClientSrc {
+  GstPushSrc element;
+
+  /* server information */
+  int port;
+  gchar *host;
+  struct sockaddr_in server_sin;
+
+  /* socket */
+  GstPollFD sock_fd;
+  GstPoll *fdset;
+
+  gboolean caps_received;      /* if we have received caps yet */
+  GstCaps *caps;
+};
+
+struct _GstTCPClientSrcClass {
+  GstPushSrcClass parent_class;
+};
+
+GType gst_tcp_client_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TCP_CLIENT_SRC_H__ */
diff --git a/gst/tcp/gsttcpplugin.c b/gst/tcp/gsttcpplugin.c
new file mode 100644
index 0000000..bb2cf48
--- /dev/null
+++ b/gst/tcp/gsttcpplugin.c
@@ -0,0 +1,63 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/dataprotocol/dataprotocol.h>
+#include "gsttcpclientsrc.h"
+#include "gsttcpclientsink.h"
+#include "gsttcpserversrc.h"
+#include "gsttcpserversink.h"
+#include "gstmultifdsink.h"
+
+GST_DEBUG_CATEGORY (tcp_debug);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_dp_init ();
+
+  if (!gst_element_register (plugin, "tcpclientsink", GST_RANK_NONE,
+          GST_TYPE_TCP_CLIENT_SINK))
+    return FALSE;
+  if (!gst_element_register (plugin, "tcpclientsrc", GST_RANK_NONE,
+          GST_TYPE_TCP_CLIENT_SRC))
+    return FALSE;
+  if (!gst_element_register (plugin, "tcpserversink", GST_RANK_NONE,
+          GST_TYPE_TCP_SERVER_SINK))
+    return FALSE;
+  if (!gst_element_register (plugin, "tcpserversrc", GST_RANK_NONE,
+          GST_TYPE_TCP_SERVER_SRC))
+    return FALSE;
+  if (!gst_element_register (plugin, "multifdsink", GST_RANK_NONE,
+          GST_TYPE_MULTI_FD_SINK))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (tcp_debug, "tcp", 0, "TCP calls");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "tcp",
+    "transfer data over the network via TCP",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/tcp/gsttcpplugin.h b/gst/tcp/gsttcpplugin.h
new file mode 100644
index 0000000..38b91be
--- /dev/null
+++ b/gst/tcp/gsttcpplugin.h
@@ -0,0 +1,40 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TCP_H__
+#define __GST_TCP_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif                          /* __cplusplus */
+
+  typedef enum
+  {
+    CONTROL_ZERO,
+    CONTROL_NONE,
+    CONTROL_TCP
+  } Gst_TCP_Control;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __GST_TCP_H__ */
diff --git a/gst/tcp/gsttcpserversink.c b/gst/tcp/gsttcpserversink.c
new file mode 100644
index 0000000..1c9ea4a
--- /dev/null
+++ b/gst/tcp/gsttcpserversink.c
@@ -0,0 +1,371 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-tcpserversink
+ * @see_also: #multifdsink
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * # server:
+ * gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
+ * # client:
+ * gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
+ * ]| 
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst-i18n-plugin.h>
+#include <string.h>             /* memset */
+
+#include <sys/ioctl.h>
+
+#ifdef HAVE_FIONREAD_IN_SYS_FILIO
+#include <sys/filio.h>
+#endif
+
+#include "gsttcp.h"
+#include "gsttcpserversink.h"
+#include "gsttcp-marshal.h"
+
+#define TCP_BACKLOG             5
+
+GST_DEBUG_CATEGORY_STATIC (tcpserversink_debug);
+#define GST_CAT_DEFAULT (tcpserversink_debug)
+
+enum
+{
+  ARG_0,
+  ARG_HOST,
+  ARG_PORT,
+};
+
+static void gst_tcp_server_sink_finalize (GObject * gobject);
+
+static gboolean gst_tcp_server_sink_handle_wait (GstMultiFdSink * sink,
+    GstPoll * set);
+static gboolean gst_tcp_server_sink_init_send (GstMultiFdSink * this);
+static gboolean gst_tcp_server_sink_close (GstMultiFdSink * this);
+static void gst_tcp_server_sink_removed (GstMultiFdSink * sink, int fd);
+
+static void gst_tcp_server_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_tcp_server_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define gst_tcp_server_sink_parent_class parent_class
+G_DEFINE_TYPE (GstTCPServerSink, gst_tcp_server_sink, GST_TYPE_MULTI_FD_SINK);
+
+static void
+gst_tcp_server_sink_class_init (GstTCPServerSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstMultiFdSinkClass *gstmultifdsink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstmultifdsink_class = (GstMultiFdSinkClass *) klass;
+
+  gobject_class->set_property = gst_tcp_server_sink_set_property;
+  gobject_class->get_property = gst_tcp_server_sink_get_property;
+  gobject_class->finalize = gst_tcp_server_sink_finalize;
+
+  g_object_class_install_property (gobject_class, ARG_HOST,
+      g_param_spec_string ("host", "host", "The host/IP to send the packets to",
+          TCP_DEFAULT_HOST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_PORT,
+      g_param_spec_int ("port", "port", "The port to send the packets to",
+          0, TCP_HIGHEST_PORT, TCP_DEFAULT_PORT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "TCP server sink", "Sink/Network",
+      "Send data as a server over the network via TCP",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gstmultifdsink_class->init = gst_tcp_server_sink_init_send;
+  gstmultifdsink_class->wait = gst_tcp_server_sink_handle_wait;
+  gstmultifdsink_class->close = gst_tcp_server_sink_close;
+  gstmultifdsink_class->removed = gst_tcp_server_sink_removed;
+
+  GST_DEBUG_CATEGORY_INIT (tcpserversink_debug, "tcpserversink", 0, "TCP sink");
+}
+
+static void
+gst_tcp_server_sink_init (GstTCPServerSink * this)
+{
+  this->server_port = TCP_DEFAULT_PORT;
+  /* should support as minimum 576 for IPV4 and 1500 for IPV6 */
+  /* this->mtu = 1500; */
+  this->host = g_strdup (TCP_DEFAULT_HOST);
+
+  this->server_sock.fd = -1;
+}
+
+static void
+gst_tcp_server_sink_finalize (GObject * gobject)
+{
+  GstTCPServerSink *this = GST_TCP_SERVER_SINK (gobject);
+
+  g_free (this->host);
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+/* handle a read request on the server,
+ * which indicates a new client connection */
+static gboolean
+gst_tcp_server_sink_handle_server_read (GstTCPServerSink * sink)
+{
+  /* new client */
+  int client_sock_fd;
+  struct sockaddr_in client_address;
+  socklen_t client_address_len;
+
+  /* For some stupid reason, client_address and client_address_len has to be
+   * zeroed */
+  memset (&client_address, 0, sizeof (client_address));
+  client_address_len = 0;
+
+  client_sock_fd =
+      accept (sink->server_sock.fd, (struct sockaddr *) &client_address,
+      &client_address_len);
+  if (client_sock_fd == -1)
+    goto accept_failed;
+
+  gst_multi_fd_sink_add (GST_MULTI_FD_SINK (sink), client_sock_fd);
+
+  GST_DEBUG_OBJECT (sink, "added new client ip %s with fd %d",
+      inet_ntoa (client_address.sin_addr), client_sock_fd);
+
+  return TRUE;
+
+  /* ERRORS */
+accept_failed:
+  {
+    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE, (NULL),
+        ("Could not accept client on server socket %d: %s (%d)",
+            sink->server_sock.fd, g_strerror (errno), errno));
+    return FALSE;
+  }
+}
+
+static void
+gst_tcp_server_sink_removed (GstMultiFdSink * sink, int fd)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  GstTCPServerSink *this = GST_TCP_SERVER_SINK (sink);
+#endif
+
+  GST_LOG_OBJECT (this, "closing fd %d", fd);
+  if (close (fd) < 0) {
+    GST_WARNING_OBJECT (this, "error closing fd %d: %s", fd,
+        g_strerror (errno));
+  }
+}
+
+static gboolean
+gst_tcp_server_sink_handle_wait (GstMultiFdSink * sink, GstPoll * set)
+{
+  GstTCPServerSink *this = GST_TCP_SERVER_SINK (sink);
+
+  if (gst_poll_fd_can_read (set, &this->server_sock)) {
+    /* handle new client connection on server socket */
+    if (!gst_tcp_server_sink_handle_server_read (this))
+      goto connection_failed;
+  }
+  return TRUE;
+
+  /* ERRORS */
+connection_failed:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
+        ("client connection failed: %s", g_strerror (errno)));
+    return FALSE;
+  }
+}
+
+static void
+gst_tcp_server_sink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTCPServerSink *sink;
+
+  g_return_if_fail (GST_IS_TCP_SERVER_SINK (object));
+  sink = GST_TCP_SERVER_SINK (object);
+
+  switch (prop_id) {
+    case ARG_HOST:
+      if (!g_value_get_string (value)) {
+        g_warning ("host property cannot be NULL");
+        break;
+      }
+      g_free (sink->host);
+      sink->host = g_strdup (g_value_get_string (value));
+      break;
+    case ARG_PORT:
+      sink->server_port = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tcp_server_sink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTCPServerSink *sink;
+
+  g_return_if_fail (GST_IS_TCP_SERVER_SINK (object));
+  sink = GST_TCP_SERVER_SINK (object);
+
+  switch (prop_id) {
+    case ARG_HOST:
+      g_value_set_string (value, sink->host);
+      break;
+    case ARG_PORT:
+      g_value_set_int (value, sink->server_port);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+
+/* create a socket for sending to remote machine */
+static gboolean
+gst_tcp_server_sink_init_send (GstMultiFdSink * parent)
+{
+  int ret;
+  GstTCPServerSink *this = GST_TCP_SERVER_SINK (parent);
+
+  /* create sending server socket */
+  if ((this->server_sock.fd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
+    goto no_socket;
+
+  GST_DEBUG_OBJECT (this, "opened sending server socket with fd %d",
+      this->server_sock.fd);
+
+  /* make address reusable */
+  ret = 1;
+  if (setsockopt (this->server_sock.fd, SOL_SOCKET, SO_REUSEADDR,
+          (void *) &ret, sizeof (ret)) < 0)
+    goto reuse_failed;
+
+  /* keep connection alive; avoids SIGPIPE during write */
+  ret = 1;
+  if (setsockopt (this->server_sock.fd, SOL_SOCKET, SO_KEEPALIVE,
+          (void *) &ret, sizeof (ret)) < 0)
+    goto keepalive_failed;
+
+  /* name the socket */
+  memset (&this->server_sin, 0, sizeof (this->server_sin));
+  this->server_sin.sin_family = AF_INET;        /* network socket */
+  this->server_sin.sin_port = htons (this->server_port);        /* on port */
+  this->server_sin.sin_addr.s_addr = htonl (INADDR_ANY);        /* for hosts */
+
+  /* bind it */
+  GST_DEBUG_OBJECT (this, "binding server socket to address");
+  ret = bind (this->server_sock.fd, (struct sockaddr *) &this->server_sin,
+      sizeof (this->server_sin));
+  if (ret)
+    goto bind_failed;
+
+  /* set the server socket to nonblocking */
+  fcntl (this->server_sock.fd, F_SETFL, O_NONBLOCK);
+
+  GST_DEBUG_OBJECT (this, "listening on server socket %d with queue of %d",
+      this->server_sock.fd, TCP_BACKLOG);
+  if (listen (this->server_sock.fd, TCP_BACKLOG) == -1)
+    goto listen_failed;
+
+  GST_DEBUG_OBJECT (this,
+      "listened on server socket %d, returning from connection setup",
+      this->server_sock.fd);
+
+  gst_poll_add_fd (parent->fdset, &this->server_sock);
+  gst_poll_fd_ctl_read (parent->fdset, &this->server_sock, TRUE);
+
+  return TRUE;
+
+  /* ERRORS */
+no_socket:
+  {
+    GST_ELEMENT_ERROR (this, RESOURCE, OPEN_WRITE, (NULL), GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+reuse_failed:
+  {
+    gst_tcp_socket_close (&this->server_sock);
+    GST_ELEMENT_ERROR (this, RESOURCE, SETTINGS, (NULL),
+        ("Could not setsockopt: %s", g_strerror (errno)));
+    return FALSE;
+  }
+keepalive_failed:
+  {
+    gst_tcp_socket_close (&this->server_sock);
+    GST_ELEMENT_ERROR (this, RESOURCE, SETTINGS, (NULL),
+        ("Could not setsockopt: %s", g_strerror (errno)));
+    return FALSE;
+  }
+listen_failed:
+  {
+    gst_tcp_socket_close (&this->server_sock);
+    GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
+        ("Could not listen on server socket: %s", g_strerror (errno)));
+    return FALSE;
+  }
+bind_failed:
+  {
+    gst_tcp_socket_close (&this->server_sock);
+    switch (errno) {
+      default:
+        GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
+            ("bind on port %d failed: %s", this->server_port,
+                g_strerror (errno)));
+        break;
+    }
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_tcp_server_sink_close (GstMultiFdSink * parent)
+{
+  GstTCPServerSink *this = GST_TCP_SERVER_SINK (parent);
+
+  if (this->server_sock.fd != -1) {
+    gst_poll_remove_fd (parent->fdset, &this->server_sock);
+
+    close (this->server_sock.fd);
+    this->server_sock.fd = -1;
+  }
+  return TRUE;
+}
diff --git a/gst/tcp/gsttcpserversink.h b/gst/tcp/gsttcpserversink.h
new file mode 100644
index 0000000..ac8846d
--- /dev/null
+++ b/gst/tcp/gsttcpserversink.h
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TCP_SERVER_SINK_H__
+#define __GST_TCP_SERVER_SINK_H__
+
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <arpa/inet.h>
+#include "gstmultifdsink.h"
+
+#define GST_TYPE_TCP_SERVER_SINK \
+  (gst_tcp_server_sink_get_type())
+#define GST_TCP_SERVER_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TCP_SERVER_SINK,GstTCPServerSink))
+#define GST_TCP_SERVER_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TCP_SERVER_SINK,GstTCPServerSinkClass))
+#define GST_IS_TCP_SERVER_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TCP_SERVER_SINK))
+#define GST_IS_TCP_SERVER_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TCP_SERVER_SINK))
+
+typedef struct _GstTCPServerSink GstTCPServerSink;
+typedef struct _GstTCPServerSinkClass GstTCPServerSinkClass;
+
+typedef enum {
+  GST_TCP_SERVER_SINK_OPEN             = (GST_ELEMENT_FLAG_LAST << 0),
+
+  GST_TCP_SERVER_SINK_FLAG_LAST        = (GST_ELEMENT_FLAG_LAST << 2)
+} GstTCPServerSinkFlags;
+
+/**
+ * GstTCPServerSink:
+ *
+ * Opaque data structure.
+ */
+struct _GstTCPServerSink {
+  GstMultiFdSink element;
+
+  /* server information */
+  int server_port;
+  gchar *host;
+  struct sockaddr_in server_sin;
+
+  /* socket */
+  GstPollFD server_sock;
+};
+
+struct _GstTCPServerSinkClass {
+  GstMultiFdSinkClass parent_class;
+};
+
+GType gst_tcp_server_sink_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_TCP_SERVER_SINK_H__ */
diff --git a/gst/tcp/gsttcpserversrc.c b/gst/tcp/gsttcpserversrc.c
new file mode 100644
index 0000000..786557e
--- /dev/null
+++ b/gst/tcp/gsttcpserversrc.c
@@ -0,0 +1,412 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-tcpserversrc
+ * @see_also: #tcpserversink
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * # server:
+ * gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
+ * # client:
+ * gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
+ * ]| 
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+#include "gsttcp.h"
+#include "gsttcpserversrc.h"
+#include <string.h>             /* memset */
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+
+GST_DEBUG_CATEGORY_STATIC (tcpserversrc_debug);
+#define GST_CAT_DEFAULT tcpserversrc_debug
+
+#define TCP_DEFAULT_LISTEN_HOST         NULL    /* listen on all interfaces */
+#define TCP_BACKLOG                     1       /* client connection queue */
+
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+
+enum
+{
+  PROP_0,
+  PROP_HOST,
+  PROP_PORT
+};
+
+#define gst_tcp_server_src_parent_class parent_class
+G_DEFINE_TYPE (GstTCPServerSrc, gst_tcp_server_src, GST_TYPE_PUSH_SRC);
+
+
+static void gst_tcp_server_src_finalize (GObject * gobject);
+
+static gboolean gst_tcp_server_src_start (GstBaseSrc * bsrc);
+static gboolean gst_tcp_server_src_stop (GstBaseSrc * bsrc);
+static gboolean gst_tcp_server_src_unlock (GstBaseSrc * bsrc);
+static GstFlowReturn gst_tcp_server_src_create (GstPushSrc * psrc,
+    GstBuffer ** buf);
+
+static void gst_tcp_server_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_tcp_server_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void
+gst_tcp_server_src_class_init (GstTCPServerSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstPushSrcClass *gstpush_src_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstpush_src_class = (GstPushSrcClass *) klass;
+
+  gobject_class->set_property = gst_tcp_server_src_set_property;
+  gobject_class->get_property = gst_tcp_server_src_get_property;
+  gobject_class->finalize = gst_tcp_server_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_HOST,
+      g_param_spec_string ("host", "Host", "The hostname to listen as",
+          TCP_DEFAULT_LISTEN_HOST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_PORT,
+      g_param_spec_int ("port", "Port", "The port to listen to",
+          0, TCP_HIGHEST_PORT, TCP_DEFAULT_PORT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "TCP server source", "Source/Network",
+      "Receive data as a server over the network via TCP",
+      "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+  gstbasesrc_class->start = gst_tcp_server_src_start;
+  gstbasesrc_class->stop = gst_tcp_server_src_stop;
+  gstbasesrc_class->unlock = gst_tcp_server_src_unlock;
+
+  gstpush_src_class->create = gst_tcp_server_src_create;
+
+  GST_DEBUG_CATEGORY_INIT (tcpserversrc_debug, "tcpserversrc", 0,
+      "TCP Server Source");
+}
+
+static void
+gst_tcp_server_src_init (GstTCPServerSrc * src)
+{
+  src->server_port = TCP_DEFAULT_PORT;
+  src->host = g_strdup (TCP_DEFAULT_HOST);
+  src->server_sock_fd.fd = -1;
+  src->client_sock_fd.fd = -1;
+
+  GST_OBJECT_FLAG_UNSET (src, GST_TCP_SERVER_SRC_OPEN);
+}
+
+static void
+gst_tcp_server_src_finalize (GObject * gobject)
+{
+  GstTCPServerSrc *src = GST_TCP_SERVER_SRC (gobject);
+
+  g_free (src->host);
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static GstFlowReturn
+gst_tcp_server_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
+{
+  GstTCPServerSrc *src;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  src = GST_TCP_SERVER_SRC (psrc);
+
+  if (!GST_OBJECT_FLAG_IS_SET (src, GST_TCP_SERVER_SRC_OPEN))
+    goto wrong_state;
+
+restart:
+  if (src->client_sock_fd.fd >= 0) {
+    /* if we have a client, wait for read */
+    gst_poll_fd_ctl_read (src->fdset, &src->server_sock_fd, FALSE);
+    gst_poll_fd_ctl_read (src->fdset, &src->client_sock_fd, TRUE);
+  } else {
+    /* else wait on server socket for connections */
+    gst_poll_fd_ctl_read (src->fdset, &src->server_sock_fd, TRUE);
+  }
+
+  /* no action (0) is an error too in our case */
+  if ((ret = gst_poll_wait (src->fdset, GST_CLOCK_TIME_NONE)) <= 0) {
+    if (ret == -1 && errno == EBUSY)
+      goto select_cancelled;
+    else
+      goto select_error;
+  }
+
+  /* if we have no client socket we can accept one now */
+  if (src->client_sock_fd.fd < 0) {
+    if (gst_poll_fd_can_read (src->fdset, &src->server_sock_fd)) {
+      if ((src->client_sock_fd.fd =
+              accept (src->server_sock_fd.fd,
+                  (struct sockaddr *) &src->client_sin,
+                  &src->client_sin_len)) == -1)
+        goto accept_error;
+
+      gst_poll_add_fd (src->fdset, &src->client_sock_fd);
+    }
+    /* and restart now to poll the socket. */
+    goto restart;
+  }
+
+  GST_LOG_OBJECT (src, "asked for a buffer");
+
+  ret = gst_tcp_read_buffer (GST_ELEMENT (src), src->client_sock_fd.fd,
+      src->fdset, outbuf);
+
+  if (ret == GST_FLOW_OK) {
+    GST_LOG_OBJECT (src,
+        "Returning buffer from _get of size %" G_GSIZE_FORMAT ", ts %"
+        GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
+        ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
+        gst_buffer_get_size (*outbuf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
+        GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));
+  }
+
+  return ret;
+
+wrong_state:
+  {
+    GST_DEBUG_OBJECT (src, "connection to closed, cannot read data");
+    return GST_FLOW_WRONG_STATE;
+  }
+select_error:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+        ("Select error: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+select_cancelled:
+  {
+    GST_DEBUG_OBJECT (src, "select canceled");
+    return GST_FLOW_WRONG_STATE;
+  }
+accept_error:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+        ("Could not accept client on server socket: %s", g_strerror (errno)));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+gst_tcp_server_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTCPServerSrc *tcpserversrc = GST_TCP_SERVER_SRC (object);
+
+  switch (prop_id) {
+    case PROP_HOST:
+      if (!g_value_get_string (value)) {
+        g_warning ("host property cannot be NULL");
+        break;
+      }
+      g_free (tcpserversrc->host);
+      tcpserversrc->host = g_strdup (g_value_get_string (value));
+      break;
+    case PROP_PORT:
+      tcpserversrc->server_port = g_value_get_int (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_tcp_server_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTCPServerSrc *tcpserversrc = GST_TCP_SERVER_SRC (object);
+
+  switch (prop_id) {
+    case PROP_HOST:
+      g_value_set_string (value, tcpserversrc->host);
+      break;
+    case PROP_PORT:
+      g_value_set_int (value, tcpserversrc->server_port);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* set up server */
+static gboolean
+gst_tcp_server_src_start (GstBaseSrc * bsrc)
+{
+  int ret;
+  GstTCPServerSrc *src = GST_TCP_SERVER_SRC (bsrc);
+
+  /* reset caps_received flag */
+  src->caps_received = FALSE;
+
+  /* create the server listener socket */
+  if ((src->server_sock_fd.fd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
+    goto socket_error;
+
+  GST_DEBUG_OBJECT (src, "opened receiving server socket with fd %d",
+      src->server_sock_fd.fd);
+
+  /* make address reusable */
+  ret = 1;
+  if (setsockopt (src->server_sock_fd.fd, SOL_SOCKET, SO_REUSEADDR, &ret,
+          sizeof (int)) < 0)
+    goto sock_opt;
+
+  /* name the socket */
+  memset (&src->server_sin, 0, sizeof (src->server_sin));
+  src->server_sin.sin_family = AF_INET; /* network socket */
+  src->server_sin.sin_port = htons (src->server_port);  /* on port */
+  if (src->host) {
+    gchar *host;
+
+    if (!(host = gst_tcp_host_to_ip (GST_ELEMENT (src), src->host)))
+      goto host_error;
+    src->server_sin.sin_addr.s_addr = inet_addr (host);
+    g_free (host);
+  } else
+    src->server_sin.sin_addr.s_addr = htonl (INADDR_ANY);
+
+  /* bind it */
+  GST_DEBUG_OBJECT (src, "binding server socket to address");
+  if ((ret = bind (src->server_sock_fd.fd, (struct sockaddr *) &src->server_sin,
+              sizeof (src->server_sin))) < 0)
+    goto bind_error;
+
+  GST_DEBUG_OBJECT (src, "listening on server socket %d with queue of %d",
+      src->server_sock_fd.fd, TCP_BACKLOG);
+
+  if (listen (src->server_sock_fd.fd, TCP_BACKLOG) == -1)
+    goto listen_error;
+
+  /* create an fdset to keep track of our file descriptors */
+  if ((src->fdset = gst_poll_new (TRUE)) == NULL)
+    goto socket_pair;
+
+  gst_poll_add_fd (src->fdset, &src->server_sock_fd);
+
+  GST_DEBUG_OBJECT (src, "received client");
+
+  GST_OBJECT_FLAG_SET (src, GST_TCP_SERVER_SRC_OPEN);
+
+  return TRUE;
+
+  /* ERRORS */
+socket_error:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL), GST_ERROR_SYSTEM);
+    return FALSE;
+  }
+sock_opt:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
+        ("Could not setsockopt: %s", g_strerror (errno)));
+    gst_tcp_socket_close (&src->server_sock_fd);
+    return FALSE;
+  }
+host_error:
+  {
+    gst_tcp_socket_close (&src->server_sock_fd);
+    return FALSE;
+  }
+bind_error:
+  {
+    gst_tcp_socket_close (&src->server_sock_fd);
+    switch (errno) {
+      default:
+        GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+            ("bind failed: %s", g_strerror (errno)));
+        break;
+    }
+    return FALSE;
+  }
+listen_error:
+  {
+    gst_tcp_socket_close (&src->server_sock_fd);
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
+        ("Could not listen on server socket: %s", g_strerror (errno)));
+    return FALSE;
+  }
+socket_pair:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
+        GST_ERROR_SYSTEM);
+    gst_tcp_socket_close (&src->server_sock_fd);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_tcp_server_src_stop (GstBaseSrc * bsrc)
+{
+  GstTCPServerSrc *src = GST_TCP_SERVER_SRC (bsrc);
+
+  gst_poll_free (src->fdset);
+  src->fdset = NULL;
+
+  gst_tcp_socket_close (&src->server_sock_fd);
+  gst_tcp_socket_close (&src->client_sock_fd);
+
+  GST_OBJECT_FLAG_UNSET (src, GST_TCP_SERVER_SRC_OPEN);
+
+  return TRUE;
+}
+
+/* will be called only between calls to start() and stop() */
+static gboolean
+gst_tcp_server_src_unlock (GstBaseSrc * bsrc)
+{
+  GstTCPServerSrc *src = GST_TCP_SERVER_SRC (bsrc);
+
+  gst_poll_set_flushing (src->fdset, TRUE);
+
+  return TRUE;
+}
diff --git a/gst/tcp/gsttcpserversrc.h b/gst/tcp/gsttcpserversrc.h
new file mode 100644
index 0000000..f5e80e2
--- /dev/null
+++ b/gst/tcp/gsttcpserversrc.h
@@ -0,0 +1,88 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_TCP_SERVER_SRC_H__
+#define __GST_TCP_SERVER_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+G_END_DECLS
+
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "gsttcp.h"
+
+#include <fcntl.h>
+
+#define GST_TYPE_TCP_SERVER_SRC \
+  (gst_tcp_server_src_get_type())
+#define GST_TCP_SERVER_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TCP_SERVER_SRC,GstTCPServerSrc))
+#define GST_TCP_SERVER_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TCP_SERVER_SRC,GstTCPServerSrcClass))
+#define GST_IS_TCP_SERVER_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TCP_SERVER_SRC))
+#define GST_IS_TCP_SERVER_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TCP_SERVER_SRC))
+
+typedef struct _GstTCPServerSrc GstTCPServerSrc;
+typedef struct _GstTCPServerSrcClass GstTCPServerSrcClass;
+
+typedef enum {
+  GST_TCP_SERVER_SRC_OPEN       = (GST_ELEMENT_FLAG_LAST << 0),
+
+  GST_TCP_SERVER_SRC_FLAG_LAST  = (GST_ELEMENT_FLAG_LAST << 2)
+} GstTCPServerSrcFlags;
+
+struct _GstTCPServerSrc {
+  GstPushSrc element;
+
+  /* server information */
+  int server_port;
+  gchar *host;
+  struct sockaddr_in server_sin;
+  GstPollFD server_sock_fd;
+
+  /* client information */
+  struct sockaddr_in client_sin;
+  socklen_t client_sin_len;
+  GstPollFD client_sock_fd;
+
+  GstPoll *fdset;
+
+  gboolean caps_received;      /* if we have received caps yet */
+};
+
+struct _GstTCPServerSrcClass {
+  GstPushSrcClass parent_class;
+};
+
+GType gst_tcp_server_src_get_type (void);
+
+G_BEGIN_DECLS
+
+#endif /* __GST_TCP_SERVER_SRC_H__ */
diff --git a/gst/typefind/Makefile.am b/gst/typefind/Makefile.am
new file mode 100644
index 0000000..3258b15
--- /dev/null
+++ b/gst/typefind/Makefile.am
@@ -0,0 +1,26 @@
+plugin_LTLIBRARIES = libgsttypefindfunctions.la
+
+libgsttypefindfunctions_la_SOURCES = gsttypefindfunctions.c
+libgsttypefindfunctions_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) $(GIO_CFLAGS)
+libgsttypefindfunctions_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttypefindfunctions_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) $(GIO_LIBS)
+
+libgsttypefindfunctions_la_LIBTOOLFLAGS = --tag=disable-static
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \
+	           $(libgsttypefindfunctions_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/typefind/Makefile.in b/gst/typefind/Makefile.in
new file mode 100644
index 0000000..be4c8cf
--- /dev/null
+++ b/gst/typefind/Makefile.in
@@ -0,0 +1,774 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/typefind
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgsttypefindfunctions_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgsttypefindfunctions_la_OBJECTS =  \
+	libgsttypefindfunctions_la-gsttypefindfunctions.lo
+libgsttypefindfunctions_la_OBJECTS =  \
+	$(am_libgsttypefindfunctions_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgsttypefindfunctions_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgsttypefindfunctions_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgsttypefindfunctions_la_CFLAGS) \
+	$(CFLAGS) $(libgsttypefindfunctions_la_LDFLAGS) $(LDFLAGS) -o \
+	$@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgsttypefindfunctions_la_SOURCES)
+DIST_SOURCES = $(libgsttypefindfunctions_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgsttypefindfunctions.la
+libgsttypefindfunctions_la_SOURCES = gsttypefindfunctions.c
+libgsttypefindfunctions_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) $(GIO_CFLAGS)
+
+libgsttypefindfunctions_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsttypefindfunctions_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) $(GIO_LIBS)
+
+libgsttypefindfunctions_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/typefind/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/typefind/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgsttypefindfunctions.la: $(libgsttypefindfunctions_la_OBJECTS) $(libgsttypefindfunctions_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgsttypefindfunctions_la_LINK) -rpath $(plugindir) $(libgsttypefindfunctions_la_OBJECTS) $(libgsttypefindfunctions_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttypefindfunctions_la-gsttypefindfunctions.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgsttypefindfunctions_la-gsttypefindfunctions.lo: gsttypefindfunctions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttypefindfunctions_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttypefindfunctions_la_CFLAGS) $(CFLAGS) -MT libgsttypefindfunctions_la-gsttypefindfunctions.lo -MD -MP -MF $(DEPDIR)/libgsttypefindfunctions_la-gsttypefindfunctions.Tpo -c -o libgsttypefindfunctions_la-gsttypefindfunctions.lo `test -f 'gsttypefindfunctions.c' || echo '$(srcdir)/'`gsttypefindfunctions.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttypefindfunctions_la-gsttypefindfunctions.Tpo $(DEPDIR)/libgsttypefindfunctions_la-gsttypefindfunctions.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gsttypefindfunctions.c' object='libgsttypefindfunctions_la-gsttypefindfunctions.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttypefindfunctions_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttypefindfunctions_la_CFLAGS) $(CFLAGS) -c -o libgsttypefindfunctions_la-gsttypefindfunctions.lo `test -f 'gsttypefindfunctions.c' || echo '$(srcdir)/'`gsttypefindfunctions.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \
+	 -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \
+	           $(libgsttypefindfunctions_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c
new file mode 100644
index 0000000..2e2a567
--- /dev/null
+++ b/gst/typefind/gsttypefindfunctions.c
@@ -0,0 +1,4623 @@
+/* GStreamer
+ * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ * Copyright (C) 2005-2009 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * gsttypefindfunctions.c: collection of various typefind functions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gprintf.h>
+
+/* don't want to add gio xdgmime typefinder if gio was disabled via configure */
+#ifdef HAVE_GIO
+#include <gio/gio.h>
+#define USE_GIO
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <gst/pbutils/pbutils.h>
+
+GST_DEBUG_CATEGORY_STATIC (type_find_debug);
+#define GST_CAT_DEFAULT type_find_debug
+
+/* so our code stays ready for 0.11 */
+#define gst_type_find_peek(tf,off,len) \
+    ((const guint8 *)gst_type_find_peek((tf),(off),(len)))
+
+/* DataScanCtx: helper for typefind functions that scan through data
+ * step-by-step, to avoid doing a peek at each and every offset */
+
+#define DATA_SCAN_CTX_CHUNK_SIZE 4096
+
+typedef struct
+{
+  guint64 offset;
+  const guint8 *data;
+  gint size;
+} DataScanCtx;
+
+static inline void
+data_scan_ctx_advance (GstTypeFind * tf, DataScanCtx * c, guint bytes_to_skip)
+{
+  c->offset += bytes_to_skip;
+  if (G_LIKELY (c->size > bytes_to_skip)) {
+    c->size -= bytes_to_skip;
+    c->data += bytes_to_skip;
+  } else {
+    c->data += c->size;
+    c->size = 0;
+  }
+}
+
+static inline gboolean
+data_scan_ctx_ensure_data (GstTypeFind * tf, DataScanCtx * c, gint min_len)
+{
+  const guint8 *data;
+  guint64 len;
+  guint chunk_len = MAX (DATA_SCAN_CTX_CHUNK_SIZE, min_len);
+
+  if (G_LIKELY (c->size >= min_len))
+    return TRUE;
+
+  data = gst_type_find_peek (tf, c->offset, chunk_len);
+  if (G_LIKELY (data != NULL)) {
+    c->data = data;
+    c->size = chunk_len;
+    return TRUE;
+  }
+
+  /* if there's less than our chunk size, try to get as much as we can, but
+   * always at least min_len bytes (we might be typefinding the first buffer
+   * of the stream and not have as much data available as we'd like) */
+  len = gst_type_find_get_length (tf);
+  if (len > 0) {
+    len = CLAMP (len - c->offset, min_len, chunk_len);
+  } else {
+    len = min_len;
+  }
+
+  data = gst_type_find_peek (tf, c->offset, len);
+  if (data != NULL) {
+    c->data = data;
+    c->size = len;
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+static inline gboolean
+data_scan_ctx_memcmp (GstTypeFind * tf, DataScanCtx * c, guint offset,
+    const gchar * data, guint len)
+{
+  if (!data_scan_ctx_ensure_data (tf, c, offset + len))
+    return FALSE;
+
+  return (memcmp (c->data + offset, data, len) == 0);
+}
+
+/*** text/plain ***/
+static gboolean xml_check_first_element (GstTypeFind * tf,
+    const gchar * element, guint elen, gboolean strict);
+static gboolean sdp_check_header (GstTypeFind * tf);
+
+static GstStaticCaps utf8_caps = GST_STATIC_CAPS ("text/plain");
+
+#define UTF8_CAPS gst_static_caps_get(&utf8_caps)
+
+static gboolean
+utf8_type_find_have_valid_utf8_at_offset (GstTypeFind * tf, guint64 offset,
+    GstTypeFindProbability * prob)
+{
+  const guint8 *data;
+
+  /* randomly decided values */
+  guint min_size = 16;          /* minimum size  */
+  guint size = 32 * 1024;       /* starting size */
+  guint probability = 95;       /* starting probability */
+  guint step = 10;              /* how much we reduce probability in each
+                                 * iteration */
+
+  while (probability > step && size > min_size) {
+    data = gst_type_find_peek (tf, offset, size);
+    if (data) {
+      gchar *end;
+      gchar *start = (gchar *) data;
+
+      if (g_utf8_validate (start, size, (const gchar **) &end) || (end - start + 4 > size)) {   /* allow last char to be cut off */
+        *prob = probability;
+        return TRUE;
+      }
+      *prob = 0;
+      return FALSE;
+    }
+    size /= 2;
+    probability -= step;
+  }
+  *prob = 0;
+  return FALSE;
+}
+
+static void
+utf8_type_find (GstTypeFind * tf, gpointer unused)
+{
+  GstTypeFindProbability start_prob, mid_prob;
+  guint64 length;
+
+  /* leave xml to the xml typefinders */
+  if (xml_check_first_element (tf, "", 0, TRUE))
+    return;
+
+  /* leave sdp to the sdp typefinders */
+  if (sdp_check_header (tf))
+    return;
+
+  /* check beginning of stream */
+  if (!utf8_type_find_have_valid_utf8_at_offset (tf, 0, &start_prob))
+    return;
+
+  GST_LOG ("start is plain text with probability of %u", start_prob);
+
+  /* POSSIBLE is the highest probability we ever return if we can't
+   * probe into the middle of the file and don't know its length */
+
+  length = gst_type_find_get_length (tf);
+  if (length == 0 || length == (guint64) - 1) {
+    gst_type_find_suggest (tf, MIN (start_prob, GST_TYPE_FIND_POSSIBLE),
+        UTF8_CAPS);
+    return;
+  }
+
+  if (length < 64 * 1024) {
+    gst_type_find_suggest (tf, start_prob, UTF8_CAPS);
+    return;
+  }
+
+  /* check middle of stream */
+  if (!utf8_type_find_have_valid_utf8_at_offset (tf, length / 2, &mid_prob))
+    return;
+
+  GST_LOG ("middle is plain text with probability of %u", mid_prob);
+  gst_type_find_suggest (tf, (start_prob + mid_prob) / 2, UTF8_CAPS);
+}
+
+/*** text/uri-list ***/
+
+static GstStaticCaps uri_caps = GST_STATIC_CAPS ("text/uri-list");
+
+#define URI_CAPS (gst_static_caps_get(&uri_caps))
+#define BUFFER_SIZE 16          /* If the string is < 16 bytes we're screwed */
+#define INC_BUFFER {                                                    \
+  pos++;                                                                \
+  if (pos == BUFFER_SIZE) {                                             \
+    pos = 0;                                                            \
+    offset += BUFFER_SIZE;                                              \
+    data = gst_type_find_peek (tf, offset, BUFFER_SIZE);                \
+    if (data == NULL) return;                                           \
+  } else {                                                              \
+    data++;                                                             \
+  }                                                                     \
+}
+static void
+uri_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, BUFFER_SIZE);
+  guint pos = 0;
+  guint offset = 0;
+
+  if (data) {
+    /* Search for # comment lines */
+    while (*data == '#') {
+      /* Goto end of line */
+      while (*data != '\n') {
+        INC_BUFFER;
+      }
+
+      INC_BUFFER;
+    }
+
+    if (!g_ascii_isalpha (*data)) {
+      /* Had a non alpha char - can't be uri-list */
+      return;
+    }
+
+    INC_BUFFER;
+
+    while (g_ascii_isalnum (*data)) {
+      INC_BUFFER;
+    }
+
+    if (*data != ':') {
+      /* First non alpha char is not a : */
+      return;
+    }
+
+    /* Get the next 2 bytes as well */
+    data = gst_type_find_peek (tf, offset + pos, 3);
+    if (data == NULL)
+      return;
+
+    if (data[1] != '/' && data[2] != '/') {
+      return;
+    }
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, URI_CAPS);
+  }
+}
+
+/*** application/x-hls ***/
+
+static GstStaticCaps hls_caps = GST_STATIC_CAPS ("application/x-hls");
+#define HLS_CAPS (gst_static_caps_get(&hls_caps))
+
+/* See http://tools.ietf.org/html/draft-pantos-http-live-streaming-05 */
+static void
+hls_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 7)))
+    return;
+
+  if (memcmp (c.data, "#EXTM3U", 7))
+    return;
+
+  data_scan_ctx_advance (tf, &c, 7);
+
+  /* Check only the first 256 bytes */
+  while (c.offset < 256) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 21)))
+      return;
+
+    /* Search for # comment lines */
+    if (c.data[0] == '#' && (memcmp (c.data, "#EXT-X-TARGETDURATION", 21) == 0
+            || memcmp (c.data, "#EXT-X-STREAM-INF", 17) == 0)) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HLS_CAPS);
+      return;
+    }
+
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+}
+
+
+/*** application/xml **********************************************************/
+
+#define XML_BUFFER_SIZE 16
+#define XML_INC_BUFFER {                                                \
+  pos++;                                                                \
+  if (pos == XML_BUFFER_SIZE) {                                         \
+    pos = 0;                                                            \
+    offset += XML_BUFFER_SIZE;                                          \
+    data = gst_type_find_peek (tf, offset, XML_BUFFER_SIZE);            \
+    if (data == NULL) return FALSE;                                     \
+  } else {                                                              \
+    data++;                                                             \
+  }                                                                     \
+}
+
+static gboolean
+xml_check_first_element (GstTypeFind * tf, const gchar * element, guint elen,
+    gboolean strict)
+{
+  gboolean got_xmldec;
+  const guint8 *data;
+  guint offset = 0;
+  guint pos = 0;
+
+  data = gst_type_find_peek (tf, 0, XML_BUFFER_SIZE);
+  if (!data)
+    return FALSE;
+
+  /* look for the XMLDec
+   * see XML spec 2.8, Prolog and Document Type Declaration
+   * http://www.w3.org/TR/2004/REC-xml-20040204/#sec-prolog-dtd */
+  got_xmldec = (memcmp (data, "<?xml", 5) == 0);
+
+  if (strict && !got_xmldec)
+    return FALSE;
+
+  /* skip XMLDec in any case if we've got one */
+  if (got_xmldec) {
+    pos += 5;
+    data += 5;
+  }
+
+  /* look for the first element, it has to be the requested element. Bail
+   * out if it is not within the first 4kB. */
+  while (data && (offset + pos) < 4096) {
+    while (*data != '<' && (offset + pos) < 4096) {
+      XML_INC_BUFFER;
+    }
+
+    XML_INC_BUFFER;
+    if (!g_ascii_isalpha (*data)) {
+      /* if not alphabetic, it's a PI or an element / attribute declaration
+       * like <?xxx or <!xxx */
+      XML_INC_BUFFER;
+      continue;
+    }
+
+    /* the first normal element, check if it's the one asked for */
+    data = gst_type_find_peek (tf, offset + pos, elen + 1);
+    return (data && element && strncmp ((char *) data, element, elen) == 0);
+  }
+
+  return FALSE;
+}
+
+static GstStaticCaps generic_xml_caps = GST_STATIC_CAPS ("application/xml");
+
+#define GENERIC_XML_CAPS (gst_static_caps_get(&generic_xml_caps))
+static void
+xml_type_find (GstTypeFind * tf, gpointer unused)
+{
+  if (xml_check_first_element (tf, "", 0, TRUE)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MINIMUM, GENERIC_XML_CAPS);
+  }
+}
+
+/*** application/sdp *********************************************************/
+
+static GstStaticCaps sdp_caps = GST_STATIC_CAPS ("application/sdp");
+
+#define SDP_CAPS (gst_static_caps_get(&sdp_caps))
+static gboolean
+sdp_check_header (GstTypeFind * tf)
+{
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 0, 5);
+  if (!data)
+    return FALSE;
+
+  /* sdp must start with v=0[\r]\n */
+  if (memcmp (data, "v=0", 3))
+    return FALSE;
+
+  if (data[3] == '\r' && data[4] == '\n')
+    return TRUE;
+  if (data[3] == '\n')
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+sdp_type_find (GstTypeFind * tf, gpointer unused)
+{
+  if (sdp_check_header (tf))
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SDP_CAPS);
+}
+
+/*** application/smil *********************************************************/
+
+static GstStaticCaps smil_caps = GST_STATIC_CAPS ("application/smil");
+
+#define SMIL_CAPS (gst_static_caps_get(&smil_caps))
+static void
+smil_type_find (GstTypeFind * tf, gpointer unused)
+{
+  if (xml_check_first_element (tf, "smil", 4, FALSE)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SMIL_CAPS);
+  }
+}
+
+/*** text/html ***/
+
+static GstStaticCaps html_caps = GST_STATIC_CAPS ("text/html");
+
+#define HTML_CAPS gst_static_caps_get (&html_caps)
+
+static void
+html_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const gchar *d, *data;
+
+  data = (const gchar *) gst_type_find_peek (tf, 0, 16);
+  if (!data)
+    return;
+
+  if (!g_ascii_strncasecmp (data, "<!DOCTYPE HTML", 14)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS);
+  } else if (xml_check_first_element (tf, "html", 4, FALSE)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS);
+  } else if ((d = memchr (data, '<', 16))) {
+    data = (const gchar *) gst_type_find_peek (tf, d - data, 6);
+    if (data && g_ascii_strncasecmp (data, "<html>", 6) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS);
+    }
+  }
+}
+
+/*** audio/midi ***/
+
+static GstStaticCaps mid_caps = GST_STATIC_CAPS ("audio/midi");
+
+#define MID_CAPS gst_static_caps_get(&mid_caps)
+static void
+mid_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  /* http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html */
+  if (data && data[0] == 'M' && data[1] == 'T' && data[2] == 'h'
+      && data[3] == 'd')
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MID_CAPS);
+}
+
+/*** audio/mobile-xmf ***/
+
+static GstStaticCaps mxmf_caps = GST_STATIC_CAPS ("audio/mobile-xmf");
+
+#define MXMF_CAPS gst_static_caps_get(&mxmf_caps)
+static void
+mxmf_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = NULL;
+
+  /* Search FileId "XMF_" 4 bytes */
+  data = gst_type_find_peek (tf, 0, 4);
+  if (data && data[0] == 'X' && data[1] == 'M' && data[2] == 'F'
+      && data[3] == '_') {
+    /* Search Format version "2.00" 4 bytes */
+    data = gst_type_find_peek (tf, 4, 4);
+    if (data && data[0] == '2' && data[1] == '.' && data[2] == '0'
+        && data[3] == '0') {
+      /* Search TypeId 2     1 byte */
+      data = gst_type_find_peek (tf, 11, 1);
+      if (data && data[0] == 2) {
+        gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MXMF_CAPS);
+      }
+    }
+  }
+}
+
+
+/*** video/x-fli ***/
+
+static GstStaticCaps flx_caps = GST_STATIC_CAPS ("video/x-fli");
+
+#define FLX_CAPS gst_static_caps_get(&flx_caps)
+static void
+flx_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 134);
+
+  if (data) {
+    /* check magic and the frame type of the first frame */
+    if ((data[4] == 0x11 || data[4] == 0x12 ||
+            data[4] == 0x30 || data[4] == 0x44) &&
+        data[5] == 0xaf &&
+        ((data[132] == 0x00 || data[132] == 0xfa) && data[133] == 0xf1)) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLX_CAPS);
+    }
+    return;
+  }
+  data = gst_type_find_peek (tf, 0, 6);
+  if (data) {
+    /* check magic only */
+    if ((data[4] == 0x11 || data[4] == 0x12 ||
+            data[4] == 0x30 || data[4] == 0x44) && data[5] == 0xaf) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, FLX_CAPS);
+    }
+    return;
+  }
+}
+
+/*** application/x-id3 ***/
+
+static GstStaticCaps id3_caps = GST_STATIC_CAPS ("application/x-id3");
+
+#define ID3_CAPS gst_static_caps_get(&id3_caps)
+static void
+id3v2_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 10);
+
+  if (data && memcmp (data, "ID3", 3) == 0 &&
+      data[3] != 0xFF && data[4] != 0xFF &&
+      (data[6] & 0x80) == 0 && (data[7] & 0x80) == 0 &&
+      (data[8] & 0x80) == 0 && (data[9] & 0x80) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
+  }
+}
+
+static void
+id3v1_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, -128, 3);
+
+  if (data && memcmp (data, "TAG", 3) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
+  }
+}
+
+/*** application/x-ape ***/
+
+static GstStaticCaps apetag_caps = GST_STATIC_CAPS ("application/x-apetag");
+
+#define APETAG_CAPS gst_static_caps_get(&apetag_caps)
+static void
+apetag_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+
+  /* APEv1/2 at start of file */
+  data = gst_type_find_peek (tf, 0, 8);
+  if (data && !memcmp (data, "APETAGEX", 8)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS);
+    return;
+  }
+
+  /* APEv1/2 at end of file */
+  data = gst_type_find_peek (tf, -32, 8);
+  if (data && !memcmp (data, "APETAGEX", 8)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, APETAG_CAPS);
+    return;
+  }
+}
+
+/*** audio/x-ttafile ***/
+
+static GstStaticCaps tta_caps = GST_STATIC_CAPS ("audio/x-ttafile");
+
+#define TTA_CAPS gst_static_caps_get(&tta_caps)
+static void
+tta_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 3);
+
+  if (data) {
+    if (memcmp (data, "TTA", 3) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, TTA_CAPS);
+      return;
+    }
+  }
+}
+
+/*** audio/x-flac ***/
+static GstStaticCaps flac_caps = GST_STATIC_CAPS ("audio/x-flac");
+
+#define FLAC_CAPS (gst_static_caps_get(&flac_caps))
+
+static void
+flac_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 4)))
+    return;
+
+  /* standard flac (also old/broken flac-in-ogg with an initial 4-byte marker
+   * packet and without the usual packet framing) */
+  if (memcmp (c.data, "fLaC", 4) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
+    return;
+  }
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 6)))
+    return;
+
+  /* flac-in-ogg, see http://flac.sourceforge.net/ogg_mapping.html */
+  if (memcmp (c.data, "\177FLAC\001", 6) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FLAC_CAPS);
+    return;
+  }
+
+/* disabled because it happily typefinds /dev/urandom as audio/x-flac, and
+ * because I yet have to see header-less flac in the wild */
+#if 0
+  /* flac without headers (subset format) */
+  /* 64K should be enough */
+  while (c.offset < (64 * 1024)) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 4)))
+      break;
+
+    /* look for frame header,
+     * http://flac.sourceforge.net/format.html#frame_header
+     */
+    if (c.data[0] == 0xff && (c.data[1] >> 2) == 0x3e) {
+      /* bit 15 in the header must be 0 */
+      if (((c.data[1] >> 1) & 0x01) == 0x01)
+        goto advance;
+
+      /* blocksize must be != 0x00 */
+      if ((c.data[2] >> 4) == 0x00)
+        goto advance;
+
+      /* samplerate must be != 0x0f */
+      if ((c.data[2] & 0x0f) == 0x0f)
+        goto advance;
+      /* also 0 is invalid, as it means get the info from the header and we
+       * don't have headers if we are here */
+      if ((c.data[2] & 0x0f) == 0x00)
+        goto advance;
+
+      /* channel assignment must be < 11 */
+      if ((c.data[3] >> 4) >= 11)
+        goto advance;
+
+      /* sample size must be != 0x07 and != 0x05 */
+      if (((c.data[3] >> 1) & 0x07) == 0x07)
+        goto advance;
+      if (((c.data[3] >> 1) & 0x07) == 0x05)
+        goto advance;
+      /* also 0 is invalid, as it means get the info from the header and we
+       * don't have headers if we are here */
+      if (((c.data[3] >> 1) & 0x07) == 0x00)
+        goto advance;
+
+      /* next bit must be 0 */
+      if ((c.data[3] & 0x01) == 0x01)
+        goto advance;
+
+      /* FIXME: shouldn't we include the crc check ? */
+
+      GST_DEBUG ("Found flac without headers at %d", (gint) c.offset);
+      gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, FLAC_CAPS);
+      return;
+    }
+  advance:
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+#endif
+}
+
+/*** audio/mpeg version 2, 4 ***/
+
+static GstStaticCaps aac_caps = GST_STATIC_CAPS ("audio/mpeg, "
+    "mpegversion = (int) { 2, 4 }, framed = (bool) false");
+#define AAC_CAPS (gst_static_caps_get(&aac_caps))
+#define AAC_AMOUNT (4096)
+static void
+aac_type_find (GstTypeFind * tf, gpointer unused)
+{
+  /* LUT to convert the AudioObjectType from the ADTS header to a string */
+  DataScanCtx c = { 0, NULL, 0 };
+
+  while (c.offset < AAC_AMOUNT) {
+    guint snc, len;
+
+    /* detect adts header or adif header.
+     * The ADIF header is 4 bytes, that should be OK. The ADTS header, on
+     * the other hand, is 14 bits only, so we require one valid frame with
+     * again a valid syncpoint on the next one (28 bits) for certainty. We
+     * require 4 kB, which is quite a lot, since frames are generally 200-400
+     * bytes.
+     * LOAS has 2 possible syncwords, which are 11 bits and 16 bits long.
+     * The following stream syntax depends on which one is found.
+     */
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 6)))
+      break;
+
+    snc = GST_READ_UINT16_BE (c.data);
+    if (G_UNLIKELY ((snc & 0xfff6) == 0xfff0)) {
+      /* ADTS header - find frame length */
+      GST_DEBUG ("Found one ADTS syncpoint at offset 0x%" G_GINT64_MODIFIER
+          "x, tracing next...", c.offset);
+      len = ((c.data[3] & 0x03) << 11) |
+          (c.data[4] << 3) | ((c.data[5] & 0xe0) >> 5);
+
+      if (len == 0 || !data_scan_ctx_ensure_data (tf, &c, len + 2)) {
+        GST_DEBUG ("Wrong sync or next frame not within reach, len=%u", len);
+        goto next;
+      }
+
+      /* check if there's a second ADTS frame */
+      snc = GST_READ_UINT16_BE (c.data + len);
+      if ((snc & 0xfff6) == 0xfff0) {
+        GstCaps *caps;
+        guint mpegversion, sample_freq_idx, channel_config, profile_idx, rate;
+        guint8 audio_config[2];
+
+        mpegversion = (c.data[1] & 0x08) ? 2 : 4;
+        profile_idx = c.data[2] >> 6;
+        sample_freq_idx = ((c.data[2] & 0x3c) >> 2);
+        channel_config = ((c.data[2] & 0x01) << 2) + (c.data[3] >> 6);
+
+        GST_DEBUG ("Found second ADTS-%d syncpoint at offset 0x%"
+            G_GINT64_MODIFIER "x, framelen %u", mpegversion, c.offset, len);
+
+        /* 0xd and 0xe are reserved. 0xf means the sample frequency is directly
+         * specified in the header, but that's not allowed for ADTS */
+        if (sample_freq_idx > 0xc) {
+          GST_DEBUG ("Unexpected sample frequency index %d or wrong sync",
+              sample_freq_idx);
+          goto next;
+        }
+
+        rate = gst_codec_utils_aac_get_sample_rate_from_index (sample_freq_idx);
+        GST_LOG ("ADTS: profile=%u, rate=%u", profile_idx, rate);
+
+        /* The ADTS frame header is slightly different from the
+         * AudioSpecificConfig defined for the MPEG-4 container, so we just
+         * construct enough of it for getting the level here. */
+        /* ADTS counts profiles from 0 instead of 1 to save bits */
+        audio_config[0] = (profile_idx + 1) << 3;
+        audio_config[0] |= (sample_freq_idx >> 1) & 0x7;
+        audio_config[1] = (sample_freq_idx & 0x1) << 7;
+        audio_config[1] |= (channel_config & 0xf) << 3;
+
+        caps = gst_caps_new_simple ("audio/mpeg",
+            "framed", G_TYPE_BOOLEAN, FALSE,
+            "mpegversion", G_TYPE_INT, mpegversion,
+            "stream-format", G_TYPE_STRING, "adts", NULL);
+
+        gst_codec_utils_aac_caps_set_level_and_profile (caps, audio_config, 2);
+
+        /* add rate and number of channels if we can */
+        if (channel_config != 0 && channel_config <= 7) {
+          const guint channels_map[] = { 0, 1, 2, 3, 4, 5, 6, 8 };
+
+          gst_caps_set_simple (caps, "channels", G_TYPE_INT,
+              channels_map[channel_config], "rate", G_TYPE_INT, rate, NULL);
+        }
+
+        gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, caps);
+        gst_caps_unref (caps);
+        break;
+      }
+
+      GST_DEBUG ("No next frame found... (should have been at 0x%x)", len);
+    } else if (G_UNLIKELY (((snc & 0xffe0) == 0x56e0) || (snc == 0x4de1))) {
+      /* LOAS frame */
+
+      GST_DEBUG ("Found one LOAS syncword at offset 0x%" G_GINT64_MODIFIER
+          "x, tracing next...", c.offset);
+
+      /* check length of frame for each type of detectable LOAS streams */
+      if (snc == 0x4de1) {
+        /* EPAudioSyncStream */
+        len = ((c.data[2] & 0x0f) << 9) | (c.data[3] << 1) |
+            ((c.data[4] & 0x80) >> 7);
+        /* add size of EP sync stream header */
+        len += 7;
+      } else {
+        /* AudioSyncStream */
+        len = ((c.data[1] & 0x1f) << 8) | c.data[2];
+        /* add size of sync stream header */
+        len += 3;
+      }
+
+      if (len == 0 || !data_scan_ctx_ensure_data (tf, &c, len + 2)) {
+        GST_DEBUG ("Wrong sync or next frame not within reach, len=%u", len);
+        goto next;
+      }
+
+      /* check if there's a second LOAS frame */
+      snc = GST_READ_UINT16_BE (c.data + len);
+      if (((snc & 0xffe0) == 0x56e0) || (snc == 0x4de1)) {
+        GST_DEBUG ("Found second LOAS syncword at offset 0x%"
+            G_GINT64_MODIFIER "x, framelen %u", c.offset, len);
+
+        gst_type_find_suggest_simple (tf, GST_TYPE_FIND_LIKELY, "audio/mpeg",
+            "framed", G_TYPE_BOOLEAN, FALSE,
+            "mpegversion", G_TYPE_INT, 4,
+            "stream-format", G_TYPE_STRING, "loas", NULL);
+        break;
+      }
+
+      GST_DEBUG ("No next frame found... (should have been at 0x%x)", len);
+    } else if (!memcmp (c.data, "ADIF", 4)) {
+      /* ADIF header */
+      gst_type_find_suggest_simple (tf, GST_TYPE_FIND_LIKELY, "audio/mpeg",
+          "framed", G_TYPE_BOOLEAN, FALSE, "mpegversion", G_TYPE_INT, 4,
+          "stream-format", G_TYPE_STRING, "adif", NULL);
+      break;
+    }
+
+  next:
+
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+}
+
+/*** audio/mpeg version 1 ***/
+
+/*
+ * The chance that random data is identified as a valid mp3 header is 63 / 2^18
+ * (0.024%) per try. This makes the function for calculating false positives
+ *   1 - (1 - ((63 / 2 ^18) ^ GST_MP3_TYPEFIND_MIN_HEADERS)) ^ buffersize)
+ * This has the following probabilities of false positives:
+ * datasize               MIN_HEADERS
+ * (bytes)      1       2       3       4
+ * 4096         62.6%    0.02%   0%      0%
+ * 16384        98%      0.09%   0%      0%
+ * 1 MiB       100%      5.88%   0%      0%
+ * 1 GiB       100%    100%      1.44%   0%
+ * 1 TiB       100%    100%    100%      0.35%
+ * This means that the current choice (3 headers by most of the time 4096 byte
+ * buffers is pretty safe for now.
+ *
+ * The max. size of each frame is 1440 bytes, which means that for N frames to
+ * be detected, we need 1440 * GST_MP3_TYPEFIND_MIN_HEADERS + 3 bytes of data.
+ * Assuming we step into the stream right after the frame header, this
+ * means we need 1440 * (GST_MP3_TYPEFIND_MIN_HEADERS + 1) - 1 + 3 bytes
+ * of data (5762) to always detect any mp3.
+ */
+
+static const guint mp3types_bitrates[2][3][16] =
+    { {{0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,},
+    {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
+    {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}},
+{{0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
+    {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
+    {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}},
+};
+
+static const guint mp3types_freqs[3][3] = { {11025, 12000, 8000},
+{22050, 24000, 16000},
+{44100, 48000, 32000}
+};
+
+static inline guint
+mp3_type_frame_length_from_header (guint32 header, guint * put_layer,
+    guint * put_channels, guint * put_bitrate, guint * put_samplerate,
+    gboolean * may_be_free_format, gint possible_free_framelen)
+{
+  guint bitrate, layer, length, mode, samplerate, version, channels;
+
+  if ((header & 0xffe00000) != 0xffe00000)
+    return 0;
+
+  /* we don't need extension, copyright, original or
+   * emphasis for the frame length */
+  header >>= 6;
+
+  /* mode */
+  mode = header & 0x3;
+  header >>= 3;
+
+  /* padding */
+  length = header & 0x1;
+  header >>= 1;
+
+  /* sampling frequency */
+  samplerate = header & 0x3;
+  if (samplerate == 3)
+    return 0;
+  header >>= 2;
+
+  /* bitrate index */
+  bitrate = header & 0xF;
+  if (bitrate == 0 && possible_free_framelen == -1) {
+    GST_LOG ("Possibly a free format mp3 - signalling");
+    *may_be_free_format = TRUE;
+  }
+  if (bitrate == 15 || (bitrate == 0 && possible_free_framelen == -1))
+    return 0;
+
+  /* ignore error correction, too */
+  header >>= 5;
+
+  /* layer */
+  layer = 4 - (header & 0x3);
+  if (layer == 4)
+    return 0;
+  header >>= 2;
+
+  /* version 0=MPEG2.5; 2=MPEG2; 3=MPEG1 */
+  version = header & 0x3;
+  if (version == 1)
+    return 0;
+
+  /* lookup */
+  channels = (mode == 3) ? 1 : 2;
+  samplerate = mp3types_freqs[version > 0 ? version - 1 : 0][samplerate];
+  if (bitrate == 0) {
+    if (layer == 1) {
+      length *= 4;
+      length += possible_free_framelen;
+      bitrate = length * samplerate / 48000;
+    } else {
+      length += possible_free_framelen;
+      bitrate = length * samplerate /
+          ((layer == 3 && version != 3) ? 72000 : 144000);
+    }
+  } else {
+    /* calculating */
+    bitrate = mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][bitrate];
+    if (layer == 1) {
+      length = ((12000 * bitrate / samplerate) + length) * 4;
+    } else {
+      length += ((layer == 3
+              && version != 3) ? 72000 : 144000) * bitrate / samplerate;
+    }
+  }
+
+  GST_LOG ("mp3typefind: calculated mp3 frame length of %u bytes", length);
+  GST_LOG
+      ("mp3typefind: samplerate = %u - bitrate = %u - layer = %u - version = %u"
+      " - channels = %u", samplerate, bitrate, layer, version, channels);
+
+  if (put_layer)
+    *put_layer = layer;
+  if (put_channels)
+    *put_channels = channels;
+  if (put_bitrate)
+    *put_bitrate = bitrate;
+  if (put_samplerate)
+    *put_samplerate = samplerate;
+
+  return length;
+}
+
+
+static GstStaticCaps mp3_caps = GST_STATIC_CAPS ("audio/mpeg, "
+    "mpegversion = (int) 1, layer = (int) [ 1, 3 ]");
+#define MP3_CAPS (gst_static_caps_get(&mp3_caps))
+/*
+ * random values for typefinding
+ * if no more data is available, we will return a probability of
+ * (found_headers/TRY_HEADERS) * (MAXIMUM * (TRY_SYNC - bytes_skipped)
+ *        / TRY_SYNC)
+ * if found_headers >= MIN_HEADERS
+ */
+#define GST_MP3_TYPEFIND_MIN_HEADERS (2)
+#define GST_MP3_TYPEFIND_TRY_HEADERS (5)
+#define GST_MP3_TYPEFIND_TRY_SYNC (GST_TYPE_FIND_MAXIMUM * 100) /* 10kB */
+#define GST_MP3_TYPEFIND_SYNC_SIZE (2048)
+#define GST_MP3_WRONG_HEADER (10)
+
+static void
+mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
+    guint * found_layer, GstTypeFindProbability * found_prob)
+{
+  const guint8 *data = NULL;
+  const guint8 *data_end = NULL;
+  guint size;
+  guint64 skipped;
+  gint last_free_offset = -1;
+  gint last_free_framelen = -1;
+  gboolean headerstart = TRUE;
+
+  *found_layer = 0;
+  *found_prob = 0;
+
+  size = 0;
+  skipped = 0;
+  while (skipped < GST_MP3_TYPEFIND_TRY_SYNC) {
+    if (size <= 0) {
+      size = GST_MP3_TYPEFIND_SYNC_SIZE * 2;
+      do {
+        size /= 2;
+        data = gst_type_find_peek (tf, skipped + start_off, size);
+      } while (size > 10 && !data);
+      if (!data)
+        break;
+      data_end = data + size;
+    }
+    if (*data == 0xFF) {
+      const guint8 *head_data = NULL;
+      guint layer = 0, bitrate, samplerate, channels;
+      guint found = 0;          /* number of valid headers found */
+      guint64 offset = skipped;
+      gboolean changed = FALSE;
+
+      while (found < GST_MP3_TYPEFIND_TRY_HEADERS) {
+        guint32 head;
+        guint length;
+        guint prev_layer = 0;
+        guint prev_channels = 0, prev_samplerate = 0;
+        gboolean free = FALSE;
+
+        if ((gint64) (offset - skipped + 4) >= 0 &&
+            data + offset - skipped + 4 < data_end) {
+          head_data = data + offset - skipped;
+        } else {
+          head_data = gst_type_find_peek (tf, offset + start_off, 4);
+        }
+        if (!head_data)
+          break;
+        head = GST_READ_UINT32_BE (head_data);
+        if (!(length = mp3_type_frame_length_from_header (head, &layer,
+                    &channels, &bitrate, &samplerate, &free,
+                    last_free_framelen))) {
+          if (free) {
+            if (last_free_offset == -1)
+              last_free_offset = offset;
+            else {
+              last_free_framelen = offset - last_free_offset;
+              offset = last_free_offset;
+              continue;
+            }
+          } else {
+            last_free_framelen = -1;
+          }
+
+          /* Mark the fact that we didn't find a valid header at the beginning */
+          if (found == 0)
+            headerstart = FALSE;
+
+          GST_LOG ("%d. header at offset %" G_GUINT64_FORMAT
+              " (0x%" G_GINT64_MODIFIER "x) was not an mp3 header "
+              "(possibly-free: %s)", found + 1, start_off + offset,
+              start_off + offset, free ? "yes" : "no");
+          break;
+        }
+        if ((prev_layer && prev_layer != layer) ||
+            /* (prev_bitrate && prev_bitrate != bitrate) || <-- VBR */
+            (prev_samplerate && prev_samplerate != samplerate) ||
+            (prev_channels && prev_channels != channels)) {
+          /* this means an invalid property, or a change, which might mean
+           * that this is not a mp3 but just a random bytestream. It could
+           * be a freaking funky encoded mp3 though. We'll just not count
+           * this header*/
+          if (prev_layer)
+            changed = TRUE;
+          prev_layer = layer;
+          prev_channels = channels;
+          prev_samplerate = samplerate;
+        } else {
+          found++;
+          GST_LOG ("found %d. header at offset %" G_GUINT64_FORMAT " (0x%"
+              G_GINT64_MODIFIER "X)", found, start_off + offset,
+              start_off + offset);
+        }
+        offset += length;
+      }
+      g_assert (found <= GST_MP3_TYPEFIND_TRY_HEADERS);
+      if (head_data == NULL &&
+          gst_type_find_peek (tf, offset + start_off - 1, 1) == NULL)
+        /* Incomplete last frame - don't count it. */
+        found--;
+      if (found == GST_MP3_TYPEFIND_TRY_HEADERS ||
+          (found >= GST_MP3_TYPEFIND_MIN_HEADERS && head_data == NULL)) {
+        /* we can make a valid guess */
+        guint probability = found * GST_TYPE_FIND_MAXIMUM *
+            (GST_MP3_TYPEFIND_TRY_SYNC - skipped) /
+            GST_MP3_TYPEFIND_TRY_HEADERS / GST_MP3_TYPEFIND_TRY_SYNC;
+
+        if (!headerstart
+            && probability > (GST_TYPE_FIND_MINIMUM + GST_MP3_WRONG_HEADER))
+          probability -= GST_MP3_WRONG_HEADER;
+        if (probability < GST_TYPE_FIND_MINIMUM)
+          probability = GST_TYPE_FIND_MINIMUM;
+        if (start_off > 0)
+          probability /= 2;
+        if (!changed)
+          probability = (probability + GST_TYPE_FIND_MAXIMUM) / 2;
+
+        GST_INFO
+            ("audio/mpeg calculated %u  =  %u  *  %u / %u  *  (%u - %"
+            G_GUINT64_FORMAT ") / %u", probability, GST_TYPE_FIND_MAXIMUM,
+            found, GST_MP3_TYPEFIND_TRY_HEADERS, GST_MP3_TYPEFIND_TRY_SYNC,
+            (guint64) skipped, GST_MP3_TYPEFIND_TRY_SYNC);
+        /* make sure we're not id3 tagged */
+        head_data = gst_type_find_peek (tf, -128, 3);
+        if (head_data && (memcmp (head_data, "TAG", 3) == 0)) {
+          probability = 0;
+        }
+        g_assert (probability <= GST_TYPE_FIND_MAXIMUM);
+
+        *found_prob = probability;
+        if (probability > 0)
+          *found_layer = layer;
+        return;
+      }
+    }
+    data++;
+    skipped++;
+    size--;
+  }
+}
+
+static void
+mp3_type_find (GstTypeFind * tf, gpointer unused)
+{
+  GstTypeFindProbability prob, mid_prob;
+  const guint8 *data;
+  guint layer, mid_layer;
+  guint64 length;
+
+  mp3_type_find_at_offset (tf, 0, &layer, &prob);
+  length = gst_type_find_get_length (tf);
+
+  if (length == 0 || length == (guint64) - 1) {
+    if (prob != 0)
+      goto suggest;
+    return;
+  }
+
+  /* if we're pretty certain already, skip the additional check */
+  if (prob >= GST_TYPE_FIND_LIKELY)
+    goto suggest;
+
+  mp3_type_find_at_offset (tf, length / 2, &mid_layer, &mid_prob);
+
+  if (mid_prob > 0) {
+    if (prob == 0) {
+      GST_LOG ("detected audio/mpeg only in the middle (p=%u)", mid_prob);
+      layer = mid_layer;
+      prob = mid_prob;
+      goto suggest;
+    }
+
+    if (layer != mid_layer) {
+      GST_WARNING ("audio/mpeg layer discrepancy: %u vs. %u", layer, mid_layer);
+      return;                   /* FIXME: or should we just go with the one in the middle? */
+    }
+
+    /* detected mpeg audio both in middle of the file and at the start */
+    prob = (prob + mid_prob) / 2;
+    goto suggest;
+  }
+
+  /* let's see if there's a valid header right at the start */
+  data = gst_type_find_peek (tf, 0, 4); /* use min. frame size? */
+  if (data && mp3_type_frame_length_from_header (GST_READ_UINT32_BE (data),
+          &layer, NULL, NULL, NULL, NULL, 0) != 0) {
+    if (prob == 0)
+      prob = GST_TYPE_FIND_POSSIBLE - 10;
+    else
+      prob = MAX (GST_TYPE_FIND_POSSIBLE - 10, prob + 10);
+  }
+
+  if (prob > 0)
+    goto suggest;
+
+  return;
+
+suggest:
+  {
+    g_return_if_fail (layer >= 1 && layer <= 3);
+
+    gst_type_find_suggest_simple (tf, prob, "audio/mpeg",
+        "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, layer, NULL);
+  }
+}
+
+/*** audio/x-musepack ***/
+
+static GstStaticCaps musepack_caps =
+GST_STATIC_CAPS ("audio/x-musepack, streamversion= (int) { 7, 8 }");
+
+#define MUSEPACK_CAPS (gst_static_caps_get(&musepack_caps))
+static void
+musepack_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+  GstTypeFindProbability prop = GST_TYPE_FIND_MINIMUM;
+  gint streamversion = -1;
+
+  if (data && memcmp (data, "MP+", 3) == 0) {
+    streamversion = 7;
+    if ((data[3] & 0x7f) == 7) {
+      prop = GST_TYPE_FIND_MAXIMUM;
+    } else {
+      prop = GST_TYPE_FIND_LIKELY + 10;
+    }
+  } else if (data && memcmp (data, "MPCK", 4) == 0) {
+    streamversion = 8;
+    prop = GST_TYPE_FIND_MAXIMUM;
+  }
+
+  if (streamversion != -1) {
+    gst_type_find_suggest_simple (tf, prop, "audio/x-musepack",
+        "streamversion", G_TYPE_INT, streamversion, NULL);
+  }
+}
+
+/*** audio/x-ac3 ***/
+/* FIXME 0.11: should be audio/ac3, but isn't for backwards compatibility */
+static GstStaticCaps ac3_caps = GST_STATIC_CAPS ("audio/x-ac3");
+
+#define AC3_CAPS (gst_static_caps_get(&ac3_caps))
+
+static GstStaticCaps eac3_caps = GST_STATIC_CAPS ("audio/x-eac3");
+
+#define EAC3_CAPS (gst_static_caps_get(&eac3_caps))
+
+struct ac3_frmsize
+{
+  unsigned short bit_rate;
+  unsigned short frm_size[3];
+};
+
+static const struct ac3_frmsize ac3_frmsizecod_tbl[] = {
+  {32, {64, 69, 96}},
+  {32, {64, 70, 96}},
+  {40, {80, 87, 120}},
+  {40, {80, 88, 120}},
+  {48, {96, 104, 144}},
+  {48, {96, 105, 144}},
+  {56, {112, 121, 168}},
+  {56, {112, 122, 168}},
+  {64, {128, 139, 192}},
+  {64, {128, 140, 192}},
+  {80, {160, 174, 240}},
+  {80, {160, 175, 240}},
+  {96, {192, 208, 288}},
+  {96, {192, 209, 288}},
+  {112, {224, 243, 336}},
+  {112, {224, 244, 336}},
+  {128, {256, 278, 384}},
+  {128, {256, 279, 384}},
+  {160, {320, 348, 480}},
+  {160, {320, 349, 480}},
+  {192, {384, 417, 576}},
+  {192, {384, 418, 576}},
+  {224, {448, 487, 672}},
+  {224, {448, 488, 672}},
+  {256, {512, 557, 768}},
+  {256, {512, 558, 768}},
+  {320, {640, 696, 960}},
+  {320, {640, 697, 960}},
+  {384, {768, 835, 1152}},
+  {384, {768, 836, 1152}},
+  {448, {896, 975, 1344}},
+  {448, {896, 976, 1344}},
+  {512, {1024, 1114, 1536}},
+  {512, {1024, 1115, 1536}},
+  {576, {1152, 1253, 1728}},
+  {576, {1152, 1254, 1728}},
+  {640, {1280, 1393, 1920}},
+  {640, {1280, 1394, 1920}}
+};
+
+static void
+ac3_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+
+  /* Search for an ac3 frame; not neccesarily right at the start, but give it
+   * a lower probability if not found right at the start. Check that the
+   * frame is followed by a second frame at the expected offset.
+   * We could also check the two ac3 CRCs, but we don't do that right now */
+  while (c.offset < 1024) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 5)))
+      break;
+
+    if (c.data[0] == 0x0b && c.data[1] == 0x77) {
+      guint bsid = c.data[5] >> 3;
+
+      if (bsid <= 8) {
+        /* ac3 */
+        guint fscod = c.data[4] >> 6;
+        guint frmsizecod = c.data[4] & 0x3f;
+
+        if (fscod < 3 && frmsizecod < 38) {
+          DataScanCtx c_next = c;
+          guint frame_size;
+
+          frame_size = ac3_frmsizecod_tbl[frmsizecod].frm_size[fscod];
+          GST_LOG ("possible AC3 frame sync at offset %"
+              G_GUINT64_FORMAT ", size=%u", c.offset, frame_size);
+          if (data_scan_ctx_ensure_data (tf, &c_next, (frame_size * 2) + 5)) {
+            data_scan_ctx_advance (tf, &c_next, frame_size * 2);
+
+            if (c_next.data[0] == 0x0b && c_next.data[1] == 0x77) {
+              fscod = c_next.data[4] >> 6;
+              frmsizecod = c_next.data[4] & 0x3f;
+
+              if (fscod < 3 && frmsizecod < 38) {
+                GstTypeFindProbability prob;
+
+                GST_LOG ("found second AC3 frame (size=%u), looks good",
+                    ac3_frmsizecod_tbl[frmsizecod].frm_size[fscod]);
+                if (c.offset == 0)
+                  prob = GST_TYPE_FIND_MAXIMUM;
+                else
+                  prob = GST_TYPE_FIND_NEARLY_CERTAIN;
+
+                gst_type_find_suggest (tf, prob, AC3_CAPS);
+                return;
+              }
+            } else {
+              GST_LOG ("no second AC3 frame found, false sync");
+            }
+          }
+        }
+      } else if (bsid <= 16 && bsid > 10) {
+        /* eac3 */
+        DataScanCtx c_next = c;
+        guint frame_size;
+
+        frame_size = (((c.data[2] & 0x07) << 8) + c.data[3]) + 1;
+        GST_LOG ("possible E-AC3 frame sync at offset %"
+            G_GUINT64_FORMAT ", size=%u", c.offset, frame_size);
+        if (data_scan_ctx_ensure_data (tf, &c_next, (frame_size * 2) + 5)) {
+          data_scan_ctx_advance (tf, &c_next, frame_size * 2);
+
+          if (c_next.data[0] == 0x0b && c_next.data[1] == 0x77) {
+            GstTypeFindProbability prob;
+
+            GST_LOG ("found second E-AC3 frame, looks good");
+            if (c.offset == 0)
+              prob = GST_TYPE_FIND_MAXIMUM;
+            else
+              prob = GST_TYPE_FIND_NEARLY_CERTAIN;
+
+            gst_type_find_suggest (tf, prob, EAC3_CAPS);
+            return;
+          } else {
+            GST_LOG ("no second E-AC3 frame found, false sync");
+          }
+        }
+      } else {
+        GST_LOG ("invalid AC3 BSID: %u", bsid);
+      }
+    }
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+}
+
+/*** audio/x-dts ***/
+static GstStaticCaps dts_caps = GST_STATIC_CAPS ("audio/x-dts");
+#define DTS_CAPS (gst_static_caps_get (&dts_caps))
+#define DTS_MIN_FRAMESIZE 96
+#define DTS_MAX_FRAMESIZE 18725 /* 16384*16/14 */
+
+static gboolean
+dts_parse_frame_header (DataScanCtx * c, guint * frame_size,
+    guint * sample_rate, guint * channels, guint * depth, guint * endianness)
+{
+  static const int sample_rates[16] = { 0, 8000, 16000, 32000, 0, 0, 11025,
+    22050, 44100, 0, 0, 12000, 24000, 48000, 96000, 192000
+  };
+  static const guint8 channels_table[16] = { 1, 2, 2, 2, 2, 3, 3, 4, 4, 5,
+    6, 6, 6, 7, 8, 8
+  };
+  guint16 hdr[8];
+  guint32 marker;
+  guint num_blocks, chans, lfe, i;
+
+  marker = GST_READ_UINT32_BE (c->data);
+
+  /* raw big endian or 14-bit big endian */
+  if (marker == 0x7FFE8001 || marker == 0x1FFFE800) {
+    *endianness = G_BIG_ENDIAN;
+    for (i = 0; i < G_N_ELEMENTS (hdr); ++i)
+      hdr[i] = GST_READ_UINT16_BE (c->data + (i * sizeof (guint16)));
+  } else
+    /* raw little endian or 14-bit little endian */
+  if (marker == 0xFE7F0180 || marker == 0xFF1F00E8) {
+    *endianness = G_LITTLE_ENDIAN;
+    for (i = 0; i < G_N_ELEMENTS (hdr); ++i)
+      hdr[i] = GST_READ_UINT16_LE (c->data + (i * sizeof (guint16)));
+  } else {
+    return FALSE;
+  }
+
+  GST_LOG ("dts sync marker 0x%08x at offset %u", marker, (guint) c->offset);
+
+  /* 14-bit mode */
+  if (marker == 0x1FFFE800 || marker == 0xFF1F00E8) {
+    if ((hdr[2] & 0xFFF0) != 0x07F0)
+      return FALSE;
+    /* discard top 2 bits (2 void), shift in 2 */
+    hdr[0] = (hdr[0] << 2) | ((hdr[1] >> 12) & 0x0003);
+    /* discard top 4 bits (2 void, 2 shifted into hdr[0]), shift in 4 etc. */
+    hdr[1] = (hdr[1] << 4) | ((hdr[2] >> 10) & 0x000F);
+    hdr[2] = (hdr[2] << 6) | ((hdr[3] >> 8) & 0x003F);
+    hdr[3] = (hdr[3] << 8) | ((hdr[4] >> 6) & 0x00FF);
+    hdr[4] = (hdr[4] << 10) | ((hdr[5] >> 4) & 0x03FF);
+    hdr[5] = (hdr[5] << 12) | ((hdr[6] >> 2) & 0x0FFF);
+    hdr[6] = (hdr[6] << 14) | ((hdr[7] >> 0) & 0x3FFF);
+    g_assert (hdr[0] == 0x7FFE && hdr[1] == 0x8001);
+    *depth = 14;
+  } else {
+    *depth = 16;
+  }
+
+  GST_LOG ("frame header: %04x%04x%04x%04x", hdr[2], hdr[3], hdr[4], hdr[5]);
+
+  num_blocks = (hdr[2] >> 2) & 0x7F;
+  *frame_size = (((hdr[2] & 0x03) << 12) | (hdr[3] >> 4)) + 1;
+  chans = ((hdr[3] & 0x0F) << 2) | (hdr[4] >> 14);
+  *sample_rate = sample_rates[(hdr[4] >> 10) & 0x0F];
+  lfe = (hdr[5] >> 9) & 0x03;
+
+  if (num_blocks < 5 || *frame_size < 96 || *sample_rate == 0)
+    return FALSE;
+
+  if (marker == 0x1FFFE800 || marker == 0xFF1F00E8)
+    *frame_size = (*frame_size * 16) / 14;      /* FIXME: round up? */
+
+  if (chans < G_N_ELEMENTS (channels_table))
+    *channels = channels_table[chans] + ((lfe) ? 1 : 0);
+  else
+    *channels = 0;
+
+  return TRUE;
+}
+
+static void
+dts_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+
+  /* Search for an dts frame; not neccesarily right at the start, but give it
+   * a lower probability if not found right at the start. Check that the
+   * frame is followed by a second frame at the expected offset. */
+  while (c.offset <= DTS_MAX_FRAMESIZE) {
+    guint frame_size = 0, rate = 0, chans = 0, depth = 0, endianness = 0;
+
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, DTS_MIN_FRAMESIZE)))
+      return;
+
+    if (G_UNLIKELY (dts_parse_frame_header (&c, &frame_size, &rate, &chans,
+                &depth, &endianness))) {
+      GstTypeFindProbability prob;
+      DataScanCtx next_c;
+
+      prob = (c.offset == 0) ? GST_TYPE_FIND_LIKELY : GST_TYPE_FIND_POSSIBLE;
+
+      /* check for second frame sync */
+      next_c = c;
+      data_scan_ctx_advance (tf, &next_c, frame_size);
+      if (data_scan_ctx_ensure_data (tf, &next_c, 4)) {
+        GST_LOG ("frame size: %u 0x%04x", frame_size, frame_size);
+        GST_MEMDUMP ("second frame sync", next_c.data, 4);
+        if (GST_READ_UINT32_BE (c.data) == GST_READ_UINT32_BE (next_c.data))
+          prob = GST_TYPE_FIND_MAXIMUM;
+      }
+
+      if (chans > 0) {
+        gst_type_find_suggest_simple (tf, prob, "audio/x-dts",
+            "rate", G_TYPE_INT, rate, "channels", G_TYPE_INT, chans,
+            "depth", G_TYPE_INT, depth, "endianness", G_TYPE_INT, endianness,
+            "framed", G_TYPE_BOOLEAN, FALSE, NULL);
+      } else {
+        gst_type_find_suggest_simple (tf, prob, "audio/x-dts",
+            "rate", G_TYPE_INT, rate, "depth", G_TYPE_INT, depth,
+            "endianness", G_TYPE_INT, endianness,
+            "framed", G_TYPE_BOOLEAN, FALSE, NULL);
+      }
+
+      return;
+    }
+
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+}
+
+/*** gsm ***/
+
+/* can only be detected by using the extension, in which case we use the default
+ * GSM properties */
+static GstStaticCaps gsm_caps =
+GST_STATIC_CAPS ("audio/x-gsm, rate=8000, channels=1");
+
+#define GSM_CAPS (gst_static_caps_get(&gsm_caps))
+
+/*** wavpack ***/
+
+static GstStaticCaps wavpack_caps =
+GST_STATIC_CAPS ("audio/x-wavpack, framed = (boolean) false");
+
+#define WAVPACK_CAPS (gst_static_caps_get(&wavpack_caps))
+
+static GstStaticCaps wavpack_correction_caps =
+GST_STATIC_CAPS ("audio/x-wavpack-correction, framed = (boolean) false");
+
+#define WAVPACK_CORRECTION_CAPS (gst_static_caps_get(&wavpack_correction_caps))
+
+static void
+wavpack_type_find (GstTypeFind * tf, gpointer unused)
+{
+  guint64 offset;
+  guint32 blocksize;
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 0, 32);
+  if (!data)
+    return;
+
+  if (data[0] != 'w' || data[1] != 'v' || data[2] != 'p' || data[3] != 'k')
+    return;
+
+  /* Note: wavpack blocks can be fairly large (easily 60-110k), possibly
+   * larger than the max. limits imposed by certain typefinding elements
+   * like id3demux or apedemux, so typefinding is most likely only going to
+   * work in pull-mode */
+  blocksize = GST_READ_UINT32_LE (data + 4);
+  GST_LOG ("wavpack header, blocksize=0x%04x", blocksize);
+  offset = 32;
+  while (offset < 32 + blocksize) {
+    guint32 sublen;
+
+    /* get chunk header */
+    GST_LOG ("peeking at chunk at offset 0x%04x", (guint) offset);
+    data = gst_type_find_peek (tf, offset, 4);
+    if (data == NULL)
+      break;
+    sublen = ((guint32) data[1]) << 1;
+    if (data[0] & 0x80) {
+      sublen |= (((guint32) data[2]) << 9) | (((guint32) data[3]) << 17);
+      sublen += 1 + 3;          /* id + length */
+    } else {
+      sublen += 1 + 1;          /* id + length */
+    }
+    if (sublen > blocksize - offset + 32) {
+      GST_LOG ("chunk length too big (%u > %" G_GUINT64_FORMAT ")", sublen,
+          blocksize - offset);
+      break;
+    }
+    if ((data[0] & 0x20) == 0) {
+      switch (data[0] & 0x0f) {
+        case 0xa:              /* ID_WV_BITSTREAM  */
+        case 0xc:              /* ID_WVX_BITSTREAM */
+          gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, WAVPACK_CAPS);
+          return;
+        case 0xb:              /* ID_WVC_BITSTREAM */
+          gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY,
+              WAVPACK_CORRECTION_CAPS);
+          return;
+        default:
+          break;
+      }
+    }
+    offset += sublen;
+  }
+}
+
+/*** application/postscrip ***/
+static GstStaticCaps postscript_caps =
+GST_STATIC_CAPS ("application/postscript");
+
+#define POSTSCRIPT_CAPS (gst_static_caps_get(&postscript_caps))
+
+static void
+postscript_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 3);
+  if (!data)
+    return;
+
+  if (data[0] == 0x04)
+    data++;
+  if (data[0] == '%' && data[1] == '!')
+    gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, POSTSCRIPT_CAPS);
+
+}
+
+/*** image/svg+xml ***/
+static GstStaticCaps svg_caps = GST_STATIC_CAPS ("image/svg+xml");
+
+#define SVG_CAPS (gst_static_caps_get(&svg_caps))
+
+static void
+svg_type_find (GstTypeFind * tf, gpointer unused)
+{
+  static const gchar svg_doctype[] = "!DOCTYPE svg";
+  static const gchar svg_tag[] = "<svg";
+  DataScanCtx c = { 0, NULL, 0 };
+
+  while (c.offset <= 1024) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 12)))
+      break;
+
+    if (memcmp (svg_doctype, c.data, 12) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SVG_CAPS);
+      return;
+    } else if (memcmp (svg_tag, c.data, 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, SVG_CAPS);
+      return;
+    }
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+}
+
+/*** multipart/x-mixed-replace mimestream ***/
+
+static GstStaticCaps multipart_caps =
+GST_STATIC_CAPS ("multipart/x-mixed-replace");
+#define MULTIPART_CAPS gst_static_caps_get(&multipart_caps)
+
+/* multipart/x-mixed replace is: 
+ *   <maybe some whitespace>--<some ascii chars>[\r]\n
+ *   <more ascii chars>[\r]\nContent-type:<more ascii>[\r]\n */
+static void
+multipart_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+  const guint8 *x;
+
+#define MULTIPART_MAX_BOUNDARY_OFFSET 16
+  data = gst_type_find_peek (tf, 0, MULTIPART_MAX_BOUNDARY_OFFSET);
+  if (!data)
+    return;
+
+  for (x = data;
+      x - data < MULTIPART_MAX_BOUNDARY_OFFSET - 2 && g_ascii_isspace (*x);
+      x++);
+  if (x[0] != '-' || x[1] != '-')
+    return;
+
+  /* Could be okay, peek what should be enough for a complete header */
+#define MULTIPART_MAX_HEADER_SIZE 256
+  data = gst_type_find_peek (tf, 0, MULTIPART_MAX_HEADER_SIZE);
+  if (!data)
+    return;
+
+  for (x = data; x - data < MULTIPART_MAX_HEADER_SIZE - 14; x++) {
+    if (!isascii (*x)) {
+      return;
+    }
+    if (*x == '\n' &&
+        !g_ascii_strncasecmp ("content-type:", (gchar *) x + 1, 13)) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MULTIPART_CAPS);
+      return;
+    }
+  }
+}
+
+/*** video/mpeg systemstream ***/
+static GstStaticCaps mpeg_sys_caps = GST_STATIC_CAPS ("video/mpeg, "
+    "systemstream = (boolean) true, mpegversion = (int) [ 1, 2 ]");
+
+#define MPEG_SYS_CAPS gst_static_caps_get(&mpeg_sys_caps)
+#define IS_MPEG_HEADER(data) (G_UNLIKELY((((guint8 *)(data))[0] == 0x00) &&  \
+                                         (((guint8 *)(data))[1] == 0x00) &&  \
+                                         (((guint8 *)(data))[2] == 0x01)))
+
+#define IS_MPEG_PACK_CODE(b) ((b) == 0xBA)
+#define IS_MPEG_SYS_CODE(b) ((b) == 0xBB)
+#define IS_MPEG_PACK_HEADER(data)       (IS_MPEG_HEADER (data) &&            \
+                                         IS_MPEG_PACK_CODE (((guint8 *)(data))[3]))
+
+#define IS_MPEG_PES_CODE(b) (((b) & 0xF0) == 0xE0 || ((b) & 0xF0) == 0xC0 || \
+                             (b) >= 0xBD)
+#define IS_MPEG_PES_HEADER(data)        (IS_MPEG_HEADER (data) &&            \
+                                         IS_MPEG_PES_CODE (((guint8 *)(data))[3]))
+
+#define MPEG2_MAX_PROBE_LENGTH (128 * 1024)     /* 128kB should be 64 packs of the 
+                                                 * most common 2kB pack size. */
+
+#define MPEG2_MIN_SYS_HEADERS 2
+#define MPEG2_MAX_SYS_HEADERS 5
+
+static gboolean
+mpeg_sys_is_valid_pack (GstTypeFind * tf, const guint8 * data, guint len,
+    guint * pack_size)
+{
+  /* Check the pack header @ offset for validity, assuming that the 4 byte header
+   * itself has already been checked. */
+  guint8 stuff_len;
+
+  if (len < 12)
+    return FALSE;
+
+  /* Check marker bits */
+  if ((data[4] & 0xC4) == 0x44) {
+    /* MPEG-2 PACK */
+    if (len < 14)
+      return FALSE;
+
+    if ((data[6] & 0x04) != 0x04 ||
+        (data[8] & 0x04) != 0x04 ||
+        (data[9] & 0x01) != 0x01 || (data[12] & 0x03) != 0x03)
+      return FALSE;
+
+    stuff_len = data[13] & 0x07;
+
+    /* Check the following header bytes, if we can */
+    if ((14 + stuff_len + 4) <= len) {
+      if (!IS_MPEG_HEADER (data + 14 + stuff_len))
+        return FALSE;
+    }
+    if (pack_size)
+      *pack_size = 14 + stuff_len;
+    return TRUE;
+  } else if ((data[4] & 0xF1) == 0x21) {
+    /* MPEG-1 PACK */
+    if ((data[6] & 0x01) != 0x01 ||
+        (data[8] & 0x01) != 0x01 ||
+        (data[9] & 0x80) != 0x80 || (data[11] & 0x01) != 0x01)
+      return FALSE;
+
+    /* Check the following header bytes, if we can */
+    if ((12 + 4) <= len) {
+      if (!IS_MPEG_HEADER (data + 12))
+        return FALSE;
+    }
+    if (pack_size)
+      *pack_size = 12;
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+static gboolean
+mpeg_sys_is_valid_pes (GstTypeFind * tf, const guint8 * data, guint len,
+    guint * pack_size)
+{
+  guint pes_packet_len;
+
+  /* Check the PES header at the given position, assuming the header code itself
+   * was already checked */
+  if (len < 6)
+    return FALSE;
+
+  /* For MPEG Program streams, unbounded PES is not allowed, so we must have a
+   * valid length present */
+  pes_packet_len = GST_READ_UINT16_BE (data + 4);
+  if (pes_packet_len == 0)
+    return FALSE;
+
+  /* Check the following header, if we can */
+  if (6 + pes_packet_len + 4 <= len) {
+    if (!IS_MPEG_HEADER (data + 6 + pes_packet_len))
+      return FALSE;
+  }
+
+  if (pack_size)
+    *pack_size = 6 + pes_packet_len;
+  return TRUE;
+}
+
+static gboolean
+mpeg_sys_is_valid_sys (GstTypeFind * tf, const guint8 * data, guint len,
+    guint * pack_size)
+{
+  guint sys_hdr_len;
+
+  /* Check the System header at the given position, assuming the header code itself
+   * was already checked */
+  if (len < 6)
+    return FALSE;
+  sys_hdr_len = GST_READ_UINT16_BE (data + 4);
+  if (sys_hdr_len < 6)
+    return FALSE;
+
+  /* Check the following header, if we can */
+  if (6 + sys_hdr_len + 4 <= len) {
+    if (!IS_MPEG_HEADER (data + 6 + sys_hdr_len))
+      return FALSE;
+  }
+
+  if (pack_size)
+    *pack_size = 6 + sys_hdr_len;
+
+  return TRUE;
+}
+
+/* calculation of possibility to identify random data as mpeg systemstream:
+ * bits that must match in header detection:            32 (or more)
+ * chance that random data is identifed:                1/2^32
+ * chance that MPEG2_MIN_PACK_HEADERS headers are identified:
+ *       1/2^(32*MPEG2_MIN_PACK_HEADERS)
+ * chance that this happens in MPEG2_MAX_PROBE_LENGTH bytes:
+ *       1-(1+1/2^(32*MPEG2_MIN_PACK_HEADERS)^MPEG2_MAX_PROBE_LENGTH)
+ * for current values:
+ *       1-(1+1/2^(32*4)^101024)
+ *       = <some_number>
+ * Since we also check marker bits and pes packet lengths, this probability is a
+ * very coarse upper bound.
+ */
+static void
+mpeg_sys_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data, *data0, *first_sync, *end;
+  gint mpegversion = 0;
+  guint pack_headers = 0;
+  guint pes_headers = 0;
+  guint pack_size;
+  guint since_last_sync = 0;
+  guint32 sync_word = 0xffffffff;
+
+  G_STMT_START {
+    gint len;
+
+    len = MPEG2_MAX_PROBE_LENGTH;
+    do {
+      len = len / 2;
+      data = gst_type_find_peek (tf, 0, 5 + len);
+    } while (data == NULL && len >= 32);
+
+    if (!data)
+      return;
+
+    end = data + len;
+  }
+  G_STMT_END;
+
+  data0 = data;
+  first_sync = NULL;
+
+  while (data < end) {
+    sync_word <<= 8;
+    if (sync_word == 0x00000100) {
+      /* Found potential sync word */
+      if (first_sync == NULL)
+        first_sync = data - 3;
+
+      if (since_last_sync > 4) {
+        /* If more than 4 bytes since the last sync word, reset our counters,
+         * as we're only interested in counting contiguous packets */
+        pes_headers = pack_headers = 0;
+      }
+      pack_size = 0;
+
+      if (IS_MPEG_PACK_CODE (data[0])) {
+        if ((data[1] & 0xC0) == 0x40) {
+          /* MPEG-2 */
+          mpegversion = 2;
+        } else if ((data[1] & 0xF0) == 0x20) {
+          mpegversion = 1;
+        }
+        if (mpegversion != 0 &&
+            mpeg_sys_is_valid_pack (tf, data - 3, end - data + 3, &pack_size)) {
+          pack_headers++;
+        }
+      } else if (IS_MPEG_PES_CODE (data[0])) {
+        /* PES stream */
+        if (mpeg_sys_is_valid_pes (tf, data - 3, end - data + 3, &pack_size)) {
+          pes_headers++;
+          if (mpegversion == 0)
+            mpegversion = 2;
+        }
+      } else if (IS_MPEG_SYS_CODE (data[0])) {
+        if (mpeg_sys_is_valid_sys (tf, data - 3, end - data + 3, &pack_size)) {
+          pack_headers++;
+        }
+      }
+
+      /* If we found a packet with a known size, skip the bytes in it and loop
+       * around to check the next packet. */
+      if (pack_size != 0) {
+        data += pack_size - 3;
+        sync_word = 0xffffffff;
+        since_last_sync = 0;
+        continue;
+      }
+    }
+
+    sync_word |= data[0];
+    since_last_sync++;
+    data++;
+
+    /* If we have found MAX headers, and *some* were pes headers (pack headers
+     * are optional in an mpeg system stream) then return our high-probability
+     * result */
+    if (pes_headers > 0 && (pack_headers + pes_headers) > MPEG2_MAX_SYS_HEADERS)
+      goto suggest;
+  }
+
+  /* If we at least saw MIN headers, and *some* were pes headers (pack headers
+   * are optional in an mpeg system stream) then return a lower-probability 
+   * result */
+  if (pes_headers > 0 && (pack_headers + pes_headers) > MPEG2_MIN_SYS_HEADERS)
+    goto suggest;
+
+  return;
+suggest:
+  {
+    guint prob;
+
+    prob = GST_TYPE_FIND_POSSIBLE + (10 * (pack_headers + pes_headers));
+    prob = MIN (prob, GST_TYPE_FIND_MAXIMUM);
+
+    /* lower probability if the first packet wasn't right at the start */
+    if (data0 != first_sync && prob >= 10)
+      prob -= 10;
+
+    GST_LOG ("Suggesting MPEG %d system stream, %d packs, %d pes, prob %u%%\n",
+        mpegversion, pack_headers, pes_headers, prob);
+
+    gst_type_find_suggest_simple (tf, prob, "video/mpeg",
+        "systemstream", G_TYPE_BOOLEAN, TRUE,
+        "mpegversion", G_TYPE_INT, mpegversion, NULL);
+  }
+};
+
+/*** video/mpegts Transport Stream ***/
+static GstStaticCaps mpegts_caps = GST_STATIC_CAPS ("video/mpegts, "
+    "systemstream = (boolean) true, packetsize = (int) [ 188, 208 ]");
+#define MPEGTS_CAPS gst_static_caps_get(&mpegts_caps)
+
+#define GST_MPEGTS_TYPEFIND_MIN_HEADERS 4
+#define GST_MPEGTS_TYPEFIND_MAX_HEADERS 10
+#define GST_MPEGTS_MAX_PACKET_SIZE 208
+#define GST_MPEGTS_TYPEFIND_SYNC_SIZE \
+            (GST_MPEGTS_TYPEFIND_MIN_HEADERS * GST_MPEGTS_MAX_PACKET_SIZE)
+#define GST_MPEGTS_TYPEFIND_MAX_SYNC \
+            (GST_MPEGTS_TYPEFIND_MAX_HEADERS * GST_MPEGTS_MAX_PACKET_SIZE)
+#define GST_MPEGTS_TYPEFIND_SCAN_LENGTH \
+            (GST_MPEGTS_TYPEFIND_MAX_SYNC * 4)
+
+#define MPEGTS_HDR_SIZE 4
+/* Check for sync byte, error_indicator == 0 and packet has payload */
+#define IS_MPEGTS_HEADER(data) (((data)[0] == 0x47) && \
+                                (((data)[1] & 0x80) == 0x00) && \
+                                (((data)[3] & 0x30) != 0x00))
+
+/* Helper function to search ahead at intervals of packet_size for mpegts
+ * headers */
+static gint
+mpeg_ts_probe_headers (GstTypeFind * tf, guint64 offset, gint packet_size)
+{
+  /* We always enter this function having found at least one header already */
+  gint found = 1;
+  const guint8 *data = NULL;
+
+  GST_LOG ("looking for mpeg-ts packets of size %u", packet_size);
+  while (found < GST_MPEGTS_TYPEFIND_MAX_HEADERS) {
+    offset += packet_size;
+
+    data = gst_type_find_peek (tf, offset, MPEGTS_HDR_SIZE);
+    if (data == NULL || !IS_MPEGTS_HEADER (data))
+      return found;
+
+    found++;
+    GST_LOG ("mpeg-ts sync #%2d at offset %" G_GUINT64_FORMAT, found, offset);
+  }
+
+  return found;
+}
+
+/* Try and detect at least 4 packets in at most 10 packets worth of
+ * data. Need to try several possible packet sizes */
+static void
+mpeg_ts_type_find (GstTypeFind * tf, gpointer unused)
+{
+  /* TS packet sizes to test: normal, DVHS packet size and 
+   * FEC with 16 or 20 byte codes packet size. */
+  const gint pack_sizes[] = { 188, 192, 204, 208 };
+  const guint8 *data = NULL;
+  guint size = 0;
+  guint64 skipped = 0;
+
+  while (skipped < GST_MPEGTS_TYPEFIND_SCAN_LENGTH) {
+    if (size < MPEGTS_HDR_SIZE) {
+      data = gst_type_find_peek (tf, skipped, GST_MPEGTS_TYPEFIND_SYNC_SIZE);
+      if (!data)
+        break;
+      size = GST_MPEGTS_TYPEFIND_SYNC_SIZE;
+    }
+
+    /* Have at least MPEGTS_HDR_SIZE bytes at this point */
+    if (IS_MPEGTS_HEADER (data)) {
+      gint p;
+
+      GST_LOG ("possible mpeg-ts sync at offset %" G_GUINT64_FORMAT, skipped);
+
+      for (p = 0; p < G_N_ELEMENTS (pack_sizes); p++) {
+        gint found;
+
+        /* Probe ahead at size pack_sizes[p] */
+        found = mpeg_ts_probe_headers (tf, skipped, pack_sizes[p]);
+        if (found >= GST_MPEGTS_TYPEFIND_MIN_HEADERS) {
+          gint probability;
+
+          /* found at least 4 headers. 10 headers = MAXIMUM probability. 
+           * Arbitrarily, I assigned 10% probability for each header we
+           * found, 40% -> 100% */
+          probability = MIN (10 * found, GST_TYPE_FIND_MAXIMUM);
+
+          gst_type_find_suggest_simple (tf, probability, "video/mpegts",
+              "systemstream", G_TYPE_BOOLEAN, TRUE,
+              "packetsize", G_TYPE_INT, pack_sizes[p], NULL);
+          return;
+        }
+      }
+    }
+    data++;
+    skipped++;
+    size--;
+  }
+}
+
+#define GST_MPEGVID_TYPEFIND_TRY_PICTURES 6
+#define GST_MPEGVID_TYPEFIND_TRY_SYNC (100 * 1024)      /* 100 kB */
+
+/* Scan ahead a maximum of max_extra_offset bytes until the next IS_MPEG_HEADER
+ * offset.  After the call, offset will be after the 0x000001, i.e. at the 4th
+ * byte of the MPEG header.  Returns TRUE if a header was found, FALSE if not.
+ */
+static gboolean
+mpeg_find_next_header (GstTypeFind * tf, DataScanCtx * c,
+    guint64 max_extra_offset)
+{
+  guint64 extra_offset;
+
+  for (extra_offset = 0; extra_offset <= max_extra_offset; ++extra_offset) {
+    if (!data_scan_ctx_ensure_data (tf, c, 4))
+      return FALSE;
+    if (IS_MPEG_HEADER (c->data)) {
+      data_scan_ctx_advance (tf, c, 3);
+      return TRUE;
+    }
+    data_scan_ctx_advance (tf, c, 1);
+  }
+  return FALSE;
+}
+
+/*** video/mpeg MPEG-4 elementary video stream ***/
+
+static GstStaticCaps mpeg4_video_caps = GST_STATIC_CAPS ("video/mpeg, "
+    "systemstream=(boolean)false, mpegversion=4, parsed=(boolean)false");
+#define MPEG4_VIDEO_CAPS gst_static_caps_get(&mpeg4_video_caps)
+
+/*
+ * This typefind is based on the elementary video header defined in
+ * http://xhelmboyx.tripod.com/formats/mpeg-layout.txt
+ * In addition, it allows the visual object sequence header to be
+ * absent, and even the VOS header to be absent.  In the latter case,
+ * a number of VOPs have to be present.
+ */
+static void
+mpeg4_video_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+  gboolean seen_vios_at_0 = FALSE;
+  gboolean seen_vios = FALSE;
+  gboolean seen_vos = FALSE;
+  gboolean seen_vol = FALSE;
+  guint num_vop_headers = 0;
+  guint8 sc;
+
+  while (c.offset < GST_MPEGVID_TYPEFIND_TRY_SYNC) {
+    if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES)
+      break;
+
+    if (!mpeg_find_next_header (tf, &c,
+            GST_MPEGVID_TYPEFIND_TRY_SYNC - c.offset))
+      break;
+
+    sc = c.data[0];
+
+    /* visual_object_sequence_start_code */
+    if (sc == 0xB0) {
+      if (seen_vios)
+        break;                  /* Terminate at second vios */
+      if (c.offset == 0)
+        seen_vios_at_0 = TRUE;
+      seen_vios = TRUE;
+      data_scan_ctx_advance (tf, &c, 2);
+      if (!mpeg_find_next_header (tf, &c, 0))
+        break;
+
+      sc = c.data[0];
+
+      /* Optional metadata */
+      if (sc == 0xB2)
+        if (!mpeg_find_next_header (tf, &c, 24))
+          break;
+    }
+
+    /* visual_object_start_code (consider it optional) */
+    if (sc == 0xB5) {
+      data_scan_ctx_advance (tf, &c, 2);
+      /* may contain ID marker and YUV clamping */
+      if (!mpeg_find_next_header (tf, &c, 7))
+        break;
+
+      sc = c.data[0];
+    }
+
+    /* video_object_start_code */
+    if (sc <= 0x1F) {
+      if (seen_vos)
+        break;                  /* Terminate at second vos */
+      seen_vos = TRUE;
+      data_scan_ctx_advance (tf, &c, 2);
+      continue;
+    }
+
+    /* video_object_layer_start_code */
+    if (sc >= 0x20 && sc <= 0x2F) {
+      seen_vol = TRUE;
+      data_scan_ctx_advance (tf, &c, 5);
+      continue;
+    }
+
+    /* video_object_plane_start_code */
+    if (sc == 0xB6) {
+      num_vop_headers++;
+      data_scan_ctx_advance (tf, &c, 2);
+      continue;
+    }
+
+    /* Unknown start code. */
+  }
+
+  if (num_vop_headers > 0 || seen_vol) {
+    GstTypeFindProbability probability = 0;
+
+    GST_LOG ("Found %d pictures, vios: %d, vos:%d, vol:%d", num_vop_headers,
+        seen_vios, seen_vos, seen_vol);
+
+    if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_vios_at_0
+        && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_MAXIMUM - 1;
+    else if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_vios
+        && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 1;
+    else if (seen_vios_at_0 && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 6;
+    else if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_vos
+        && seen_vol)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 6;
+    else if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_vol)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 9;
+    else if (num_vop_headers >= GST_MPEGVID_TYPEFIND_TRY_PICTURES)
+      probability = GST_TYPE_FIND_LIKELY - 1;
+    else if (num_vop_headers > 2 && seen_vios && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_LIKELY - 9;
+    else if (seen_vios && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_LIKELY - 20;
+    else if (num_vop_headers > 0 && seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_POSSIBLE;
+    else if (num_vop_headers > 0)
+      probability = GST_TYPE_FIND_POSSIBLE - 10;
+    else if (seen_vos && seen_vol)
+      probability = GST_TYPE_FIND_POSSIBLE - 20;
+
+    gst_type_find_suggest (tf, probability, MPEG4_VIDEO_CAPS);
+  }
+}
+
+/*** video/x-h263 H263 video stream ***/
+static GstStaticCaps h263_video_caps = GST_STATIC_CAPS ("video/x-h263");
+
+#define H263_VIDEO_CAPS gst_static_caps_get(&h263_video_caps)
+
+#define H263_MAX_PROBE_LENGTH (128 * 1024)
+
+static void
+h263_video_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+  guint64 data = 0;
+  guint64 psc = 0;
+  guint8 tr = 0;
+  guint format;
+  guint good = 0;
+  guint bad = 0;
+
+  while (c.offset < H263_MAX_PROBE_LENGTH) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 4)))
+      break;
+
+    /* Find the picture start code */
+    data = (data << 8) + c.data[0];
+    psc = data & G_GUINT64_CONSTANT (0xfffffc0000);
+    if (psc == 0x800000) {
+      /* Found PSC */
+      /* TR */
+      tr = (data & 0x3fc) >> 2;
+      /* Source Format */
+      format = tr & 0x07;
+
+      /* Now that we have a Valid PSC, check if we also have a valid PTYPE and
+         the Source Format, which should range between 1 and 5 */
+      if (((tr >> 6) == 0x2) && (format > 0 && format < 6))
+        good++;
+      else
+        bad++;
+
+      /* FIXME: maybe bail out early if we get mostly bad syncs ? */
+    }
+
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+
+  if (good > 0 && bad == 0)
+    gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, H263_VIDEO_CAPS);
+  else if (good > 2 * bad)
+    gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, H263_VIDEO_CAPS);
+
+  return;
+}
+
+/*** video/x-h264 H264 elementary video stream ***/
+
+static GstStaticCaps h264_video_caps =
+GST_STATIC_CAPS ("video/x-h264,stream-format=byte-stream");
+
+#define H264_VIDEO_CAPS gst_static_caps_get(&h264_video_caps)
+
+#define H264_MAX_PROBE_LENGTH (128 * 1024)      /* 128kB for HD should be enough. */
+
+static void
+h264_video_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+
+  /* Stream consists of: a series of sync codes (00 00 00 01) followed 
+   * by NALs
+   */
+  int nut, ref;
+  int good = 0;
+  int bad = 0;
+
+  while (c.offset < H264_MAX_PROBE_LENGTH) {
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 4)))
+      break;
+
+    if (IS_MPEG_HEADER (c.data)) {
+      nut = c.data[3] & 0x9f;   /* forbiden_zero_bit | nal_unit_type */
+      ref = c.data[3] & 0x60;   /* nal_ref_idc */
+
+      /* if forbiden bit is different to 0 won't be h264 */
+      if (nut > 0x1f) {
+        bad++;
+        break;
+      }
+
+      /* collect statistics about the NAL types */
+      if ((nut >= 1 && nut <= 13) || nut == 19) {
+        if ((nut == 5 && ref == 0) ||
+            ((nut == 6 || (nut >= 9 && nut <= 12)) && ref != 0)) {
+          bad++;
+        } else {
+          good++;
+        }
+      } else if (nut >= 14 && nut <= 33) {
+        /* reserved */
+        /* Theoretically these are good, since if they exist in the
+           stream it merely means that a newer backwards-compatible
+           h.264 stream.  But we should be identifying that separately. */
+        bad++;
+      } else {
+        /* unspecified, application specific */
+        /* don't consider these bad */
+      }
+
+      GST_DEBUG ("good %d bad %d", good, bad);
+
+      if (good >= 10 && bad < 4) {
+        gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, H264_VIDEO_CAPS);
+        return;
+      }
+
+      data_scan_ctx_advance (tf, &c, 4);
+    }
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+
+  if (good >= 2 && bad < 1) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, H264_VIDEO_CAPS);
+    return;
+  }
+}
+
+/*** video/mpeg video stream ***/
+
+static GstStaticCaps mpeg_video_caps = GST_STATIC_CAPS ("video/mpeg, "
+    "systemstream = (boolean) false");
+#define MPEG_VIDEO_CAPS gst_static_caps_get(&mpeg_video_caps)
+
+/*
+ * Idea is the same as MPEG system stream typefinding: We check each
+ * byte of the stream to see if - from that point on - the stream
+ * matches a predefined set of marker bits as defined in the MPEG
+ * video specs.
+ *
+ * I'm sure someone will do a chance calculation here too.
+ */
+
+static void
+mpeg_video_stream_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+  gboolean seen_seq_at_0 = FALSE;
+  gboolean seen_seq = FALSE;
+  gboolean seen_gop = FALSE;
+  guint64 last_pic_offset = 0;
+  guint num_pic_headers = 0;
+  gint found = 0;
+
+  while (c.offset < GST_MPEGVID_TYPEFIND_TRY_SYNC) {
+    if (found >= GST_MPEGVID_TYPEFIND_TRY_PICTURES)
+      break;
+
+    if (!data_scan_ctx_ensure_data (tf, &c, 5))
+      break;
+
+    if (!IS_MPEG_HEADER (c.data))
+      goto next;
+
+    /* a pack header indicates that this isn't an elementary stream */
+    if (c.data[3] == 0xBA && mpeg_sys_is_valid_pack (tf, c.data, c.size, NULL))
+      return;
+
+    /* do we have a sequence header? */
+    if (c.data[3] == 0xB3) {
+      seen_seq_at_0 = seen_seq_at_0 || (c.offset == 0);
+      seen_seq = TRUE;
+      data_scan_ctx_advance (tf, &c, 4 + 8);
+      continue;
+    }
+
+    /* or a GOP header */
+    if (c.data[3] == 0xB8) {
+      seen_gop = TRUE;
+      data_scan_ctx_advance (tf, &c, 8);
+      continue;
+    }
+
+    /* but what we'd really like to see is a picture header */
+    if (c.data[3] == 0x00) {
+      ++num_pic_headers;
+      last_pic_offset = c.offset;
+      data_scan_ctx_advance (tf, &c, 8);
+      continue;
+    }
+
+    /* ... each followed by a slice header with slice_vertical_pos=1 that's
+     * not too far away from the previously seen picture header. */
+    if (c.data[3] == 0x01 && num_pic_headers > found &&
+        (c.offset - last_pic_offset) >= 4 &&
+        (c.offset - last_pic_offset) <= 64) {
+      data_scan_ctx_advance (tf, &c, 4);
+      found += 1;
+      continue;
+    }
+
+  next:
+
+    data_scan_ctx_advance (tf, &c, 1);
+  }
+
+  if (found > 0 || seen_seq) {
+    GstTypeFindProbability probability = 0;
+
+    GST_LOG ("Found %d pictures, seq:%d, gop:%d", found, seen_seq, seen_gop);
+
+    if (found >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_seq && seen_gop)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 1;
+    else if (found >= GST_MPEGVID_TYPEFIND_TRY_PICTURES && seen_seq)
+      probability = GST_TYPE_FIND_NEARLY_CERTAIN - 9;
+    else if (found >= GST_MPEGVID_TYPEFIND_TRY_PICTURES)
+      probability = GST_TYPE_FIND_LIKELY;
+    else if (seen_seq_at_0 && seen_gop && found > 2)
+      probability = GST_TYPE_FIND_LIKELY - 10;
+    else if (seen_seq && seen_gop && found > 2)
+      probability = GST_TYPE_FIND_LIKELY - 20;
+    else if (seen_seq_at_0 && found > 0)
+      probability = GST_TYPE_FIND_POSSIBLE;
+    else if (seen_seq && found > 0)
+      probability = GST_TYPE_FIND_POSSIBLE - 5;
+    else if (found > 0)
+      probability = GST_TYPE_FIND_POSSIBLE - 10;
+    else if (seen_seq)
+      probability = GST_TYPE_FIND_POSSIBLE - 20;
+
+    gst_type_find_suggest_simple (tf, probability, "video/mpeg",
+        "systemstream", G_TYPE_BOOLEAN, FALSE,
+        "mpegversion", G_TYPE_INT, 1, NULL);
+  }
+}
+
+/*** audio/x-aiff ***/
+
+static GstStaticCaps aiff_caps = GST_STATIC_CAPS ("audio/x-aiff");
+
+#define AIFF_CAPS gst_static_caps_get(&aiff_caps)
+static void
+aiff_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data && memcmp (data, "FORM", 4) == 0) {
+    data += 8;
+    if (memcmp (data, "AIFF", 4) == 0 || memcmp (data, "AIFC", 4) == 0)
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, AIFF_CAPS);
+  }
+}
+
+/*** audio/x-svx ***/
+
+static GstStaticCaps svx_caps = GST_STATIC_CAPS ("audio/x-svx");
+
+#define SVX_CAPS gst_static_caps_get(&svx_caps)
+static void
+svx_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data && memcmp (data, "FORM", 4) == 0) {
+    data += 8;
+    if (memcmp (data, "8SVX", 4) == 0 || memcmp (data, "16SV", 4) == 0)
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SVX_CAPS);
+  }
+}
+
+/*** audio/x-shorten ***/
+
+static GstStaticCaps shn_caps = GST_STATIC_CAPS ("audio/x-shorten");
+
+#define SHN_CAPS gst_static_caps_get(&shn_caps)
+static void
+shn_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data && memcmp (data, "ajkg", 4) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SHN_CAPS);
+  }
+  data = gst_type_find_peek (tf, -8, 8);
+  if (data && memcmp (data, "SHNAMPSK", 8) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SHN_CAPS);
+  }
+}
+
+/*** application/x-ape ***/
+
+static GstStaticCaps ape_caps = GST_STATIC_CAPS ("application/x-ape");
+
+#define APE_CAPS gst_static_caps_get(&ape_caps)
+static void
+ape_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data && memcmp (data, "MAC ", 4) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY + 10, APE_CAPS);
+  }
+}
+
+/*** ISO FORMATS ***/
+
+/*** audio/x-m4a ***/
+
+static GstStaticCaps m4a_caps = GST_STATIC_CAPS ("audio/x-m4a");
+
+#define M4A_CAPS (gst_static_caps_get(&m4a_caps))
+static void
+m4a_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 4, 8);
+
+  if (data && (memcmp (data, "ftypM4A ", 8) == 0)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, M4A_CAPS);
+  }
+}
+
+/*** application/x-3gp ***/
+
+/* The Q is there because variables can't start with a number. */
+static GstStaticCaps q3gp_caps = GST_STATIC_CAPS ("application/x-3gp");
+#define Q3GP_CAPS (gst_static_caps_get(&q3gp_caps))
+
+static const gchar *
+q3gp_type_find_get_profile (const guint8 * data)
+{
+  switch (GST_MAKE_FOURCC (data[0], data[1], data[2], 0)) {
+    case GST_MAKE_FOURCC ('3', 'g', 'g', 0):
+      return "general";
+    case GST_MAKE_FOURCC ('3', 'g', 'p', 0):
+      return "basic";
+    case GST_MAKE_FOURCC ('3', 'g', 's', 0):
+      return "streaming-server";
+    case GST_MAKE_FOURCC ('3', 'g', 'r', 0):
+      return "progressive-download";
+    default:
+      break;
+  }
+  return NULL;
+}
+
+static void
+q3gp_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const gchar *profile;
+  guint32 ftyp_size = 0;
+  gint offset = 0;
+  const guint8 *data = NULL;
+
+  if ((data = gst_type_find_peek (tf, 0, 12)) == NULL) {
+    return;
+  }
+
+  data += 4;
+  if (memcmp (data, "ftyp", 4) != 0) {
+    return;
+  }
+
+  /* check major brand */
+  data += 4;
+  if ((profile = q3gp_type_find_get_profile (data))) {
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM,
+        "application/x-3gp", "profile", G_TYPE_STRING, profile, NULL);
+    return;
+  }
+
+  /* check compatible brands */
+  if ((data = gst_type_find_peek (tf, 0, 4)) != NULL) {
+    ftyp_size = GST_READ_UINT32_BE (data);
+  }
+  for (offset = 16; offset < ftyp_size; offset += 4) {
+    if ((data = gst_type_find_peek (tf, offset, 3)) == NULL) {
+      break;
+    }
+    if ((profile = q3gp_type_find_get_profile (data))) {
+      gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM,
+          "application/x-3gp", "profile", G_TYPE_STRING, profile, NULL);
+      return;
+    }
+  }
+
+  return;
+
+}
+
+/*** video/mj2 and image/jp2 ***/
+static GstStaticCaps mj2_caps = GST_STATIC_CAPS ("video/mj2");
+
+#define MJ2_CAPS gst_static_caps_get(&mj2_caps)
+
+static GstStaticCaps jp2_caps = GST_STATIC_CAPS ("image/jp2");
+
+#define JP2_CAPS gst_static_caps_get(&jp2_caps)
+
+static void
+jp2_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 0, 24);
+  if (!data)
+    return;
+
+  /* jp2 signature */
+  if (memcmp (data, "\000\000\000\014jP  \015\012\207\012", 12) != 0)
+    return;
+
+  /* check ftyp box */
+  data += 12;
+  if (memcmp (data + 4, "ftyp", 4) == 0) {
+    if (memcmp (data + 8, "jp2 ", 4) == 0)
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, JP2_CAPS);
+    else if (memcmp (data + 8, "mjp2", 4) == 0)
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MJ2_CAPS);
+  }
+}
+
+/*** video/quicktime ***/
+
+static GstStaticCaps qt_caps = GST_STATIC_CAPS ("video/quicktime");
+
+#define QT_CAPS gst_static_caps_get(&qt_caps)
+#define STRNCMP(x,y,z) (strncmp ((char*)(x), (char*)(y), z))
+
+/* FIXME 0.11: go through http://www.ftyps.com/ */
+static void
+qt_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+  guint tip = 0;
+  guint64 offset = 0;
+  guint64 size;
+  const gchar *variant = NULL;
+
+  while ((data = gst_type_find_peek (tf, offset, 12)) != NULL) {
+    guint64 new_offset;
+
+    if (STRNCMP (&data[4], "ftypqt  ", 8) == 0) {
+      tip = GST_TYPE_FIND_MAXIMUM;
+      break;
+    }
+
+    if (STRNCMP (&data[4], "ftypisom", 8) == 0 ||
+        STRNCMP (&data[4], "ftypavc1", 8) == 0 ||
+        STRNCMP (&data[4], "ftypmp42", 8) == 0) {
+      tip = GST_TYPE_FIND_MAXIMUM;
+      variant = "iso";
+      break;
+    }
+
+    /* box/atom types that are in common with ISO base media file format */
+    if (STRNCMP (&data[4], "moov", 4) == 0 ||
+        STRNCMP (&data[4], "mdat", 4) == 0 ||
+        STRNCMP (&data[4], "ftyp", 4) == 0 ||
+        STRNCMP (&data[4], "free", 4) == 0 ||
+        STRNCMP (&data[4], "uuid", 4) == 0 ||
+        STRNCMP (&data[4], "skip", 4) == 0) {
+      if (tip == 0) {
+        tip = GST_TYPE_FIND_LIKELY;
+      } else {
+        tip = GST_TYPE_FIND_NEARLY_CERTAIN;
+      }
+    }
+    /* other box/atom types, apparently quicktime specific */
+    else if (STRNCMP (&data[4], "pnot", 4) == 0 ||
+        STRNCMP (&data[4], "PICT", 4) == 0 ||
+        STRNCMP (&data[4], "wide", 4) == 0 ||
+        STRNCMP (&data[4], "prfl", 4) == 0) {
+      tip = GST_TYPE_FIND_MAXIMUM;
+      break;
+    } else {
+      tip = 0;
+      break;
+    }
+
+    size = GST_READ_UINT32_BE (data);
+    /* check compatible brands rather than ever expaning major brands above */
+    if ((STRNCMP (&data[4], "ftyp", 4) == 0) && (size >= 16)) {
+      new_offset = offset + 12;
+      while (new_offset + 4 <= offset + size) {
+        data = gst_type_find_peek (tf, new_offset, 4);
+        if (data == NULL)
+          goto done;
+        if (STRNCMP (&data[4], "isom", 4) == 0 ||
+            STRNCMP (&data[4], "avc1", 4) == 0 ||
+            STRNCMP (&data[4], "mp41", 4) == 0 ||
+            STRNCMP (&data[4], "mp42", 4) == 0) {
+          tip = GST_TYPE_FIND_MAXIMUM;
+          variant = "iso";
+          goto done;
+        }
+        new_offset += 4;
+      }
+    }
+    if (size == 1) {
+      const guint8 *sizedata;
+
+      sizedata = gst_type_find_peek (tf, offset + 8, 8);
+      if (sizedata == NULL)
+        break;
+
+      size = GST_READ_UINT64_BE (sizedata);
+    } else {
+      if (size < 8)
+        break;
+    }
+    new_offset = offset + size;
+    if (new_offset <= offset)
+      break;
+    offset = new_offset;
+  }
+
+done:
+  if (tip > 0) {
+    if (variant) {
+      GstCaps *caps = gst_caps_copy (QT_CAPS);
+
+      gst_caps_set_simple (caps, "variant", G_TYPE_STRING, variant, NULL);
+      gst_type_find_suggest (tf, tip, caps);
+      gst_caps_unref (caps);
+    } else {
+      gst_type_find_suggest (tf, tip, QT_CAPS);
+    }
+  }
+};
+
+
+/*** image/x-quicktime ***/
+
+static GstStaticCaps qtif_caps = GST_STATIC_CAPS ("image/x-quicktime");
+
+#define QTIF_CAPS gst_static_caps_get(&qtif_caps)
+
+/* how many atoms we check before we give up */
+#define QTIF_MAXROUNDS 25
+
+static void
+qtif_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+  gboolean found_idsc = FALSE;
+  gboolean found_idat = FALSE;
+  guint64 offset = 0;
+  guint rounds = 0;
+
+  while ((data = gst_type_find_peek (tf, offset, 8)) != NULL) {
+    guint64 size;
+
+    size = GST_READ_UINT32_BE (data);
+    if (size == 1) {
+      const guint8 *sizedata;
+
+      sizedata = gst_type_find_peek (tf, offset + 8, 8);
+      if (sizedata == NULL)
+        break;
+
+      size = GST_READ_UINT64_BE (sizedata);
+    }
+    if (size < 8)
+      break;
+
+    if (STRNCMP (data + 4, "idsc", 4) == 0)
+      found_idsc = TRUE;
+    if (STRNCMP (data + 4, "idat", 4) == 0)
+      found_idat = TRUE;
+
+    if (found_idsc && found_idat) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, QTIF_CAPS);
+      return;
+    }
+
+    offset += size;
+    if (++rounds > QTIF_MAXROUNDS)
+      break;
+  }
+
+  if (found_idsc || found_idat) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, QTIF_CAPS);
+    return;
+  }
+};
+
+/*** audio/x-mod ***/
+
+static GstStaticCaps mod_caps = GST_STATIC_CAPS ("audio/x-mod");
+
+#define MOD_CAPS gst_static_caps_get(&mod_caps)
+/* FIXME: M15 CheckType to do */
+static void
+mod_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data;
+
+  /* MOD */
+  if ((data = gst_type_find_peek (tf, 1080, 4)) != NULL) {
+    /* Protracker and variants */
+    if ((memcmp (data, "M.K.", 4) == 0) || (memcmp (data, "M!K!", 4) == 0) ||
+        /* Star Tracker */
+        (memcmp (data, "FLT", 3) == 0 && isdigit (data[3])) ||
+        (memcmp (data, "EXO", 3) == 0 && isdigit (data[3])) ||
+        /* Oktalyzer (Amiga) */
+        (memcmp (data, "OKTA", 4) == 0) ||
+        /* Oktalyser (Atari) */
+        (memcmp (data, "CD81", 4) == 0) ||
+        /* Fasttracker */
+        (memcmp (data + 1, "CHN", 3) == 0 && isdigit (data[0])) ||
+        /* Fasttracker or Taketracker */
+        (memcmp (data + 2, "CH", 2) == 0 && isdigit (data[0])
+            && isdigit (data[1])) || (memcmp (data + 2, "CN", 2) == 0
+            && isdigit (data[0]) && isdigit (data[1]))) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  /* XM */
+  if ((data = gst_type_find_peek (tf, 0, 38)) != NULL) {
+    if (memcmp (data, "Extended Module: ", 17) == 0 && data[37] == 0x1A) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  /* OKT */
+  if (data || (data = gst_type_find_peek (tf, 0, 8)) != NULL) {
+    if (memcmp (data, "OKTASONG", 8) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  if (data || (data = gst_type_find_peek (tf, 0, 4)) != NULL) {
+    /* 669 */
+    if ((memcmp (data, "if", 2) == 0) || (memcmp (data, "JN", 2) == 0)) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, MOD_CAPS);
+      return;
+    }
+    /* AMF */
+    if ((memcmp (data, "AMF", 3) == 0 && data[3] > 10 && data[3] < 14) ||
+        /* IT */
+        (memcmp (data, "IMPM", 4) == 0) ||
+        /* MED */
+        (memcmp (data, "MMD0", 4) == 0) || (memcmp (data, "MMD1", 4) == 0) ||
+        /* MTM */
+        (memcmp (data, "MTM", 3) == 0)) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+    /* DSM */
+    if (memcmp (data, "RIFF", 4) == 0) {
+      const guint8 *data2 = gst_type_find_peek (tf, 8, 4);
+
+      if (data2) {
+        if (memcmp (data2, "DSMF", 4) == 0) {
+          gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+          return;
+        }
+      }
+    }
+    /* FAM */
+    if (memcmp (data, "FAM\xFE", 4) == 0) {
+      const guint8 *data2 = gst_type_find_peek (tf, 44, 3);
+
+      if (data2) {
+        if (memcmp (data2, "compare", 3) == 0) {
+          gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+          return;
+        }
+      } else {
+        gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, MOD_CAPS);
+        return;
+      }
+    }
+    /* GDM */
+    if (memcmp (data, "GDM\xFE", 4) == 0) {
+      const guint8 *data2 = gst_type_find_peek (tf, 71, 4);
+
+      if (data2) {
+        if (memcmp (data2, "GMFS", 4) == 0) {
+          gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+          return;
+        }
+      } else {
+        gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, MOD_CAPS);
+        return;
+      }
+    }
+  }
+  /* IMF */
+  if ((data = gst_type_find_peek (tf, 60, 4)) != NULL) {
+    if (memcmp (data, "IM10", 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  /* S3M */
+  if ((data = gst_type_find_peek (tf, 44, 4)) != NULL) {
+    if (memcmp (data, "SCRM", 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  /* STM */
+  if ((data = gst_type_find_peek (tf, 20, 8)) != NULL) {
+    if (g_ascii_strncasecmp ((gchar *) data, "!Scream!", 8) == 0 ||
+        g_ascii_strncasecmp ((gchar *) data, "BMOD2STM", 8) == 0) {
+      const guint8 *id, *stmtype;
+
+      if ((id = gst_type_find_peek (tf, 28, 1)) == NULL)
+        return;
+      if ((stmtype = gst_type_find_peek (tf, 29, 1)) == NULL)
+        return;
+      if (*id == 0x1A && *stmtype == 2)
+        gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+  /* AMF */
+  if ((data = gst_type_find_peek (tf, 0, 19)) != NULL) {
+    if (memcmp (data, "ASYLUM Music Format", 19) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MOD_CAPS);
+      return;
+    }
+  }
+}
+
+/*** application/x-shockwave-flash ***/
+
+static GstStaticCaps swf_caps =
+GST_STATIC_CAPS ("application/x-shockwave-flash");
+#define SWF_CAPS (gst_static_caps_get(&swf_caps))
+static void
+swf_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data && (data[0] == 'F' || data[0] == 'C') &&
+      data[1] == 'W' && data[2] == 'S') {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SWF_CAPS);
+  }
+}
+
+/*** image/jpeg ***/
+
+#define JPEG_MARKER_IS_START_OF_FRAME(x) \
+    ((x)>=0xc0 && (x) <= 0xcf && (x)!=0xc4 && (x)!=0xc8 && (x)!=0xcc)
+
+static GstStaticCaps jpeg_caps = GST_STATIC_CAPS ("image/jpeg");
+
+#define JPEG_CAPS (gst_static_caps_get(&jpeg_caps))
+static void
+jpeg_type_find (GstTypeFind * tf, gpointer unused)
+{
+  GstTypeFindProbability prob = GST_TYPE_FIND_POSSIBLE;
+  DataScanCtx c = { 0, NULL, 0 };
+  GstCaps *caps;
+  guint num_markers;
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 2)))
+    return;
+
+  if (c.data[0] != 0xff || c.data[1] != 0xd8)
+    return;
+
+  num_markers = 1;
+  data_scan_ctx_advance (tf, &c, 2);
+
+  caps = gst_caps_copy (JPEG_CAPS);
+
+  while (data_scan_ctx_ensure_data (tf, &c, 4) && c.offset < (200 * 1024)) {
+    guint16 len;
+    guint8 marker;
+
+    if (c.data[0] != 0xff)
+      break;
+
+    marker = c.data[1];
+    if (G_UNLIKELY (marker == 0xff)) {
+      data_scan_ctx_advance (tf, &c, 1);
+      continue;
+    }
+
+    data_scan_ctx_advance (tf, &c, 2);
+
+    /* we assume all markers we'll see before SOF have a payload length; if
+     * that's not the case we'll just detect a false sync and bail out, but
+     * still report POSSIBLE probability */
+    len = GST_READ_UINT16_BE (c.data);
+
+    GST_LOG ("possible JPEG marker 0x%02x (@0x%04x), segment length %u",
+        marker, (guint) c.offset, len);
+
+    if (!data_scan_ctx_ensure_data (tf, &c, len))
+      break;
+
+    if (marker == 0xc4 ||       /* DEFINE_HUFFMAN_TABLES          */
+        marker == 0xcc ||       /* DEFINE_ARITHMETIC_CONDITIONING */
+        marker == 0xdb ||       /* DEFINE_QUANTIZATION_TABLES     */
+        marker == 0xdd ||       /* DEFINE_RESTART_INTERVAL        */
+        marker == 0xfe) {       /* COMMENT                        */
+      data_scan_ctx_advance (tf, &c, len);
+      ++num_markers;
+    } else if (marker == 0xe0 && len >= (2 + 4) &&      /* APP0 */
+        data_scan_ctx_memcmp (tf, &c, 2, "JFIF", 4)) {
+      GST_LOG ("found JFIF tag");
+      prob = GST_TYPE_FIND_MAXIMUM;
+      data_scan_ctx_advance (tf, &c, len);
+      ++num_markers;
+      /* we continue until we find a start of frame marker */
+    } else if (marker == 0xe1 && len >= (2 + 4) &&      /* APP1 */
+        data_scan_ctx_memcmp (tf, &c, 2, "Exif", 4)) {
+      GST_LOG ("found Exif tag");
+      prob = GST_TYPE_FIND_MAXIMUM;
+      data_scan_ctx_advance (tf, &c, len);
+      ++num_markers;
+      /* we continue until we find a start of frame marker */
+    } else if (marker >= 0xe0 && marker <= 0xef) {      /* APPn */
+      data_scan_ctx_advance (tf, &c, len);
+      ++num_markers;
+    } else if (JPEG_MARKER_IS_START_OF_FRAME (marker) && len >= (2 + 8)) {
+      int h, w;
+
+      h = GST_READ_UINT16_BE (c.data + 2 + 1);
+      w = GST_READ_UINT16_BE (c.data + 2 + 1 + 2);
+      if (h == 0 || w == 0) {
+        GST_WARNING ("bad width %u and/or height %u in SOF header", w, h);
+        break;
+      }
+
+      GST_LOG ("SOF at offset %" G_GUINT64_FORMAT ", num_markers=%d, "
+          "WxH=%dx%d", c.offset - 2, num_markers, w, h);
+
+      if (num_markers >= 5 || prob == GST_TYPE_FIND_MAXIMUM)
+        prob = GST_TYPE_FIND_MAXIMUM;
+      else
+        prob = GST_TYPE_FIND_LIKELY;
+
+      gst_caps_set_simple (caps, "width", G_TYPE_INT, w,
+          "height", G_TYPE_INT, h, NULL);
+      break;
+    } else {
+      GST_WARNING ("bad length or unexpected JPEG marker 0xff 0x%02x", marker);
+      break;
+    }
+  }
+
+  gst_type_find_suggest (tf, prob, caps);
+  gst_caps_unref (caps);
+}
+
+/*** image/bmp ***/
+
+static GstStaticCaps bmp_caps = GST_STATIC_CAPS ("image/bmp");
+
+#define BMP_CAPS (gst_static_caps_get(&bmp_caps))
+static void
+bmp_type_find (GstTypeFind * tf, gpointer unused)
+{
+  DataScanCtx c = { 0, NULL, 0 };
+  guint32 struct_size, w, h, planes, bpp;
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 54)))
+    return;
+
+  if (c.data[0] != 'B' || c.data[1] != 'M')
+    return;
+
+  /* skip marker + size */
+  data_scan_ctx_advance (tf, &c, 2 + 4);
+
+  /* reserved, must be 0 */
+  if (c.data[0] != 0 || c.data[1] != 0 || c.data[2] != 0 || c.data[3] != 0)
+    return;
+
+  data_scan_ctx_advance (tf, &c, 2 + 2);
+
+  /* offset to start of image data in bytes (check for sanity) */
+  GST_LOG ("offset=%u", GST_READ_UINT32_LE (c.data));
+  if (GST_READ_UINT32_LE (c.data) > (10 * 1024 * 1024))
+    return;
+
+  struct_size = GST_READ_UINT32_LE (c.data + 4);
+  GST_LOG ("struct_size=%u", struct_size);
+
+  data_scan_ctx_advance (tf, &c, 4 + 4);
+
+  if (struct_size == 0x0C) {
+    w = GST_READ_UINT16_LE (c.data);
+    h = GST_READ_UINT16_LE (c.data + 2);
+    planes = GST_READ_UINT16_LE (c.data + 2 + 2);
+    bpp = GST_READ_UINT16_LE (c.data + 2 + 2 + 2);
+  } else if (struct_size == 40 || struct_size == 64 || struct_size == 108
+      || struct_size == 124 || struct_size == 0xF0) {
+    w = GST_READ_UINT32_LE (c.data);
+    h = GST_READ_UINT32_LE (c.data + 4);
+    planes = GST_READ_UINT16_LE (c.data + 4 + 4);
+    bpp = GST_READ_UINT16_LE (c.data + 4 + 4 + 2);
+  } else {
+    return;
+  }
+
+  /* image sizes sanity check */
+  GST_LOG ("w=%u, h=%u, planes=%u, bpp=%u", w, h, planes, bpp);
+  if (w == 0 || w > 0xfffff || h == 0 || h > 0xfffff || planes != 1 ||
+      (bpp != 1 && bpp != 4 && bpp != 8 && bpp != 16 && bpp != 24 && bpp != 32))
+    return;
+
+  gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM, "image/bmp",
+      "width", G_TYPE_INT, w, "height", G_TYPE_INT, h, "bpp", G_TYPE_INT, bpp,
+      NULL);
+}
+
+/*** image/tiff ***/
+static GstStaticCaps tiff_caps = GST_STATIC_CAPS ("image/tiff, "
+    "endianness = (int) { BIG_ENDIAN, LITTLE_ENDIAN }");
+#define TIFF_CAPS (gst_static_caps_get(&tiff_caps))
+static GstStaticCaps tiff_be_caps = GST_STATIC_CAPS ("image/tiff, "
+    "endianness = (int) BIG_ENDIAN");
+#define TIFF_BE_CAPS (gst_static_caps_get(&tiff_be_caps))
+static GstStaticCaps tiff_le_caps = GST_STATIC_CAPS ("image/tiff, "
+    "endianness = (int) LITTLE_ENDIAN");
+#define TIFF_LE_CAPS (gst_static_caps_get(&tiff_le_caps))
+static void
+tiff_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 8);
+  guint8 le_header[4] = { 0x49, 0x49, 0x2A, 0x00 };
+  guint8 be_header[4] = { 0x4D, 0x4D, 0x00, 0x2A };
+
+  if (data) {
+    if (memcmp (data, le_header, 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, TIFF_LE_CAPS);
+    } else if (memcmp (data, be_header, 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, TIFF_BE_CAPS);
+    }
+  }
+}
+
+/*** PNM ***/
+
+static GstStaticCaps pnm_caps = GST_STATIC_CAPS ("image/x-portable-bitmap; "
+    "image/x-portable-graymap; image/x-portable-pixmap; "
+    "image/x-portable-anymap");
+
+#define PNM_CAPS (gst_static_caps_get(&pnm_caps))
+
+#define IS_PNM_WHITESPACE(c) \
+    ((c) == ' ' || (c) == '\r' || (c) == '\n' || (c) == 't')
+
+static void
+pnm_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  const gchar *media_type = NULL;
+  DataScanCtx c = { 0, NULL, 0 };
+  guint h = 0, w = 0;
+
+  if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 16)))
+    return;
+
+  /* see http://en.wikipedia.org/wiki/Netpbm_format */
+  if (c.data[0] != 'P' || c.data[1] < '1' || c.data[1] > '7' ||
+      !IS_PNM_WHITESPACE (c.data[2]) ||
+      (c.data[3] != '#' && c.data[3] < '0' && c.data[3] > '9'))
+    return;
+
+  switch (c.data[1]) {
+    case '1':
+      media_type = "image/x-portable-bitmap";   /* ASCII */
+      break;
+    case '2':
+      media_type = "image/x-portable-graymap";  /* ASCII */
+      break;
+    case '3':
+      media_type = "image/x-portable-pixmap";   /* ASCII */
+      break;
+    case '4':
+      media_type = "image/x-portable-bitmap";   /* Raw */
+      break;
+    case '5':
+      media_type = "image/x-portable-graymap";  /* Raw */
+      break;
+    case '6':
+      media_type = "image/x-portable-pixmap";   /* Raw */
+      break;
+    case '7':
+      media_type = "image/x-portable-anymap";
+      break;
+    default:
+      g_return_if_reached ();
+  }
+
+  /* try to extract width and height as well */
+  if (c.data[1] != '7') {
+    gchar s[64] = { 0, }
+    , sep1, sep2;
+
+    /* need to skip any comment lines first */
+    data_scan_ctx_advance (tf, &c, 3);
+    while (c.data[0] == '#') {  /* we know there's still data left */
+      data_scan_ctx_advance (tf, &c, 1);
+      while (c.data[0] != '\n' && c.data[0] != '\r') {
+        if (!data_scan_ctx_ensure_data (tf, &c, 4))
+          return;
+        data_scan_ctx_advance (tf, &c, 1);
+      }
+      data_scan_ctx_advance (tf, &c, 1);
+      GST_LOG ("skipped comment line in PNM header");
+    }
+
+    if (!data_scan_ctx_ensure_data (tf, &c, 32) &&
+        !data_scan_ctx_ensure_data (tf, &c, 4)) {
+      return;
+    }
+
+    /* need to NUL-terminate data for sscanf */
+    memcpy (s, c.data, MIN (sizeof (s) - 1, c.size));
+    if (sscanf (s, "%u%c%u%c", &w, &sep1, &h, &sep2) == 4 &&
+        IS_PNM_WHITESPACE (sep1) && IS_PNM_WHITESPACE (sep2) &&
+        w > 0 && w < G_MAXINT && h > 0 && h < G_MAXINT) {
+      GST_LOG ("extracted PNM width and height: %dx%d", w, h);
+    } else {
+      w = 0;
+      h = 0;
+    }
+  } else {
+    /* FIXME: extract width + height for anymaps too */
+  }
+
+  if (w > 0 && h > 0) {
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM, media_type,
+        "width", G_TYPE_INT, w, "height", G_TYPE_INT, h, NULL);
+  } else {
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_LIKELY, media_type, NULL);
+  }
+}
+
+static GstStaticCaps sds_caps = GST_STATIC_CAPS ("audio/x-sds");
+
+#define SDS_CAPS (gst_static_caps_get(&sds_caps))
+static void
+sds_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+  guint8 mask[4] = { 0xFF, 0xFF, 0x80, 0xFF };
+  guint8 match[4] = { 0xF0, 0x7E, 0, 0x01 };
+  gint x;
+
+  if (data) {
+    for (x = 0; x < 4; x++) {
+      if ((data[x] & mask[x]) != match[x]) {
+        return;
+      }
+    }
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SDS_CAPS);
+  }
+}
+
+static GstStaticCaps ircam_caps = GST_STATIC_CAPS ("audio/x-ircam");
+
+#define IRCAM_CAPS (gst_static_caps_get(&ircam_caps))
+static void
+ircam_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+  guint8 mask[4] = { 0xFF, 0xFF, 0xF8, 0xFF };
+  guint8 match[4] = { 0x64, 0xA3, 0x00, 0x00 };
+  gint x;
+  gboolean matched = TRUE;
+
+  if (!data) {
+    return;
+  }
+  for (x = 0; x < 4; x++) {
+    if ((data[x] & mask[x]) != match[x]) {
+      matched = FALSE;
+    }
+  }
+  if (matched) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, IRCAM_CAPS);
+    return;
+  }
+  /* now try the reverse version */
+  matched = TRUE;
+  for (x = 0; x < 4; x++) {
+    if ((data[x] & mask[3 - x]) != match[3 - x]) {
+      matched = FALSE;
+    }
+  }
+}
+
+/* EBML typefind helper */
+static gboolean
+ebml_check_header (GstTypeFind * tf, const gchar * doctype, int doctype_len)
+{
+  /* 4 bytes for EBML ID, 1 byte for header length identifier */
+  const guint8 *data = gst_type_find_peek (tf, 0, 4 + 1);
+  gint len_mask = 0x80, size = 1, n = 1, total;
+
+  if (!data)
+    return FALSE;
+
+  /* ebml header? */
+  if (data[0] != 0x1A || data[1] != 0x45 || data[2] != 0xDF || data[3] != 0xA3)
+    return FALSE;
+
+  /* length of header */
+  total = data[4];
+  while (size <= 8 && !(total & len_mask)) {
+    size++;
+    len_mask >>= 1;
+  }
+  if (size > 8)
+    return FALSE;
+  total &= (len_mask - 1);
+  while (n < size)
+    total = (total << 8) | data[4 + n++];
+
+  /* get new data for full header, 4 bytes for EBML ID,
+   * EBML length tag and the actual header */
+  data = gst_type_find_peek (tf, 0, 4 + size + total);
+  if (!data)
+    return FALSE;
+
+  /* only check doctype if asked to do so */
+  if (doctype == NULL || doctype_len == 0)
+    return TRUE;
+
+  /* the header must contain the doctype. For now, we don't parse the
+   * whole header but simply check for the availability of that array
+   * of characters inside the header. Not fully fool-proof, but good
+   * enough. */
+  for (n = 4 + size; n <= 4 + size + total - doctype_len; n++)
+    if (!memcmp (&data[n], doctype, doctype_len))
+      return TRUE;
+
+  return FALSE;
+}
+
+/*** video/x-matroska ***/
+static GstStaticCaps matroska_caps = GST_STATIC_CAPS ("video/x-matroska");
+
+#define MATROSKA_CAPS (gst_static_caps_get(&matroska_caps))
+static void
+matroska_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  if (ebml_check_header (tf, "matroska", 8))
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MATROSKA_CAPS);
+  else if (ebml_check_header (tf, NULL, 0))
+    gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, MATROSKA_CAPS);
+}
+
+/*** video/webm ***/
+static GstStaticCaps webm_caps = GST_STATIC_CAPS ("video/webm");
+
+#define WEBM_CAPS (gst_static_caps_get(&webm_caps))
+static void
+webm_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  if (ebml_check_header (tf, "webm", 4))
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, WEBM_CAPS);
+}
+
+/*** application/mxf ***/
+static GstStaticCaps mxf_caps = GST_STATIC_CAPS ("application/mxf");
+
+#define MXF_MAX_PROBE_LENGTH (1024 * 64)
+#define MXF_CAPS (gst_static_caps_get(&mxf_caps))
+
+/*
+ * MXF files start with a header partition pack key of 16 bytes which is defined
+ * at SMPTE-377M 6.1. Before this there can be up to 64K of run-in which _must_
+ * not contain the partition pack key.
+ */
+static void
+mxf_type_find (GstTypeFind * tf, gpointer ununsed)
+{
+  static const guint8 partition_pack_key[] =
+      { 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0d, 0x01, 0x02, 0x01,
+    0x01
+  };
+  DataScanCtx c = { 0, NULL, 0 };
+
+  while (c.offset <= MXF_MAX_PROBE_LENGTH) {
+    guint i;
+    if (G_UNLIKELY (!data_scan_ctx_ensure_data (tf, &c, 1024)))
+      break;
+
+    /* look over in chunks of 1kbytes to avoid too much overhead */
+
+    for (i = 0; i < 1024 - 16; i++) {
+      /* Check first byte before calling more expensive memcmp function */
+      if (G_UNLIKELY (c.data[i] == 0x06
+              && memcmp (c.data + i, partition_pack_key, 13) == 0)) {
+        /* Header partition pack? */
+        if (c.data[i + 13] != 0x02)
+          goto advance;
+
+        /* Partition status */
+        if (c.data[i + 14] >= 0x05)
+          goto advance;
+
+        /* Reserved, must be 0x00 */
+        if (c.data[i + 15] != 0x00)
+          goto advance;
+
+        gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MXF_CAPS);
+        return;
+      }
+    }
+
+  advance:
+    data_scan_ctx_advance (tf, &c, 1024 - 16);
+  }
+}
+
+/*** video/x-dv ***/
+
+static GstStaticCaps dv_caps = GST_STATIC_CAPS ("video/x-dv, "
+    "systemstream = (boolean) true");
+#define DV_CAPS (gst_static_caps_get(&dv_caps))
+static void
+dv_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 0, 5);
+
+  /* check for DIF  and DV flag */
+  if (data && (data[0] == 0x1f) && (data[1] == 0x07) && (data[2] == 0x00)) {
+    const gchar *format;
+
+    if (data[3] & 0x80) {
+      format = "PAL";
+    } else {
+      format = "NTSC";
+    }
+
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM, "video/x-dv",
+        "systemstream", G_TYPE_BOOLEAN, TRUE,
+        "format", G_TYPE_STRING, format, NULL);
+  }
+}
+
+
+/*** application/ogg and application/x-annodex ***/
+static GstStaticCaps ogg_caps = GST_STATIC_CAPS ("application/ogg");
+static GstStaticCaps annodex_caps = GST_STATIC_CAPS ("application/x-annodex");
+static GstStaticCaps ogg_annodex_caps =
+    GST_STATIC_CAPS ("application/ogg;application/x-annodex");
+
+#define OGGANX_CAPS (gst_static_caps_get(&ogg_annodex_caps))
+
+static void
+ogganx_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if ((data != NULL) && (memcmp (data, "OggS", 4) == 0)) {
+
+    /* Check for an annodex fishbone header */
+    data = gst_type_find_peek (tf, 28, 8);
+    if (data && memcmp (data, "fishead\0", 8) == 0)
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM,
+          gst_static_caps_get (&annodex_caps));
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM,
+        gst_static_caps_get (&ogg_caps));
+  }
+}
+
+/*** audio/x-vorbis ***/
+static GstStaticCaps vorbis_caps = GST_STATIC_CAPS ("audio/x-vorbis");
+
+#define VORBIS_CAPS (gst_static_caps_get(&vorbis_caps))
+static void
+vorbis_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 30);
+
+  if (data) {
+    guint blocksize_0;
+    guint blocksize_1;
+
+    /* 1 byte packet type (identification=0x01)
+       6 byte string "vorbis"
+       4 byte vorbis version */
+    if (memcmp (data, "\001vorbis\000\000\000\000", 11) != 0)
+      return;
+    data += 11;
+    /* 1 byte channels must be != 0 */
+    if (data[0] == 0)
+      return;
+    data++;
+    /* 4 byte samplerate must be != 0 */
+    if (GST_READ_UINT32_LE (data) == 0)
+      return;
+    data += 16;
+    /* blocksize checks */
+    blocksize_0 = data[0] & 0x0F;
+    blocksize_1 = (data[0] & 0xF0) >> 4;
+    if (blocksize_0 > blocksize_1)
+      return;
+    if (blocksize_0 < 6 || blocksize_0 > 13)
+      return;
+    if (blocksize_1 < 6 || blocksize_1 > 13)
+      return;
+    data++;
+    /* framing bit */
+    if ((data[0] & 0x01) != 1)
+      return;
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, VORBIS_CAPS);
+  }
+}
+
+/*** video/x-theora ***/
+
+static GstStaticCaps theora_caps = GST_STATIC_CAPS ("video/x-theora");
+
+#define THEORA_CAPS (gst_static_caps_get(&theora_caps))
+static void
+theora_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 7);   //42);
+
+  if (data) {
+    if (data[0] != 0x80)
+      return;
+    if (memcmp (&data[1], "theora", 6) != 0)
+      return;
+    /* FIXME: make this more reliable when specs are out */
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, THEORA_CAPS);
+  }
+}
+
+/*** kate ***/
+static void
+kate_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 64);
+  gchar category[16] = { 0, };
+
+  if (G_UNLIKELY (data == NULL))
+    return;
+
+  /* see: http://wiki.xiph.org/index.php/OggKate#Format_specification */
+  if (G_LIKELY (memcmp (data, "\200kate\0\0\0", 8) != 0))
+    return;
+
+  /* make sure we always have a NUL-terminated string */
+  memcpy (category, data + 48, 15);
+  GST_LOG ("kate category: %s", category);
+  /* canonical categories for subtitles: subtitles, spu-subtitles, SUB, K-SPU */
+  if (strcmp (category, "subtitles") == 0 || strcmp (category, "SUB") == 0 ||
+      strcmp (category, "spu-subtitles") == 0 ||
+      strcmp (category, "K-SPU") == 0) {
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM,
+        "subtitle/x-kate", NULL);
+  } else {
+    gst_type_find_suggest_simple (tf, GST_TYPE_FIND_MAXIMUM,
+        "application/x-kate", NULL);
+  }
+}
+
+/*** application/x-ogm-video or audio***/
+
+static GstStaticCaps ogmvideo_caps =
+GST_STATIC_CAPS ("application/x-ogm-video");
+#define OGMVIDEO_CAPS (gst_static_caps_get(&ogmvideo_caps))
+static void
+ogmvideo_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 9);
+
+  if (data) {
+    if (memcmp (data, "\001video\000\000\000", 9) != 0)
+      return;
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, OGMVIDEO_CAPS);
+  }
+}
+
+static GstStaticCaps ogmaudio_caps =
+GST_STATIC_CAPS ("application/x-ogm-audio");
+#define OGMAUDIO_CAPS (gst_static_caps_get(&ogmaudio_caps))
+static void
+ogmaudio_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 9);
+
+  if (data) {
+    if (memcmp (data, "\001audio\000\000\000", 9) != 0)
+      return;
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, OGMAUDIO_CAPS);
+  }
+}
+
+static GstStaticCaps ogmtext_caps = GST_STATIC_CAPS ("application/x-ogm-text");
+
+#define OGMTEXT_CAPS (gst_static_caps_get(&ogmtext_caps))
+static void
+ogmtext_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 9);
+
+  if (data) {
+    if (memcmp (data, "\001text\000\000\000\000", 9) != 0)
+      return;
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, OGMTEXT_CAPS);
+  }
+}
+
+/*** audio/x-speex ***/
+
+static GstStaticCaps speex_caps = GST_STATIC_CAPS ("audio/x-speex");
+
+#define SPEEX_CAPS (gst_static_caps_get(&speex_caps))
+static void
+speex_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 80);
+
+  if (data) {
+    /* 8 byte string "Speex   "
+       24 byte speex version string + int */
+    if (memcmp (data, "Speex   ", 8) != 0)
+      return;
+    data += 32;
+
+    /* 4 byte header size >= 80 */
+    if (GST_READ_UINT32_LE (data) < 80)
+      return;
+    data += 4;
+
+    /* 4 byte sample rate <= 48000 */
+    if (GST_READ_UINT32_LE (data) > 48000)
+      return;
+    data += 4;
+
+    /* currently there are only 3 speex modes. */
+    if (GST_READ_UINT32_LE (data) > 3)
+      return;
+    data += 12;
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SPEEX_CAPS);
+  }
+}
+
+/*** audio/x-celt ***/
+
+static GstStaticCaps celt_caps = GST_STATIC_CAPS ("audio/x-celt");
+
+#define CELT_CAPS (gst_static_caps_get(&celt_caps))
+static void
+celt_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 8);
+
+  if (data) {
+    /* 8 byte string "CELT   " */
+    if (memcmp (data, "CELT    ", 8) != 0)
+      return;
+
+    /* TODO: Check other values of the CELT header */
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, CELT_CAPS);
+  }
+}
+
+/*** application/x-ogg-skeleton ***/
+static GstStaticCaps ogg_skeleton_caps =
+GST_STATIC_CAPS ("application/x-ogg-skeleton, parsed=(boolean)FALSE");
+#define OGG_SKELETON_CAPS (gst_static_caps_get(&ogg_skeleton_caps))
+static void
+oggskel_type_find (GstTypeFind * tf, gpointer private)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 12);
+
+  if (data) {
+    /* 8 byte string "fishead\0" for the ogg skeleton stream */
+    if (memcmp (data, "fishead\0", 8) != 0)
+      return;
+    data += 8;
+
+    /* Require that the header contains version 3.0 */
+    if (GST_READ_UINT16_LE (data) != 3)
+      return;
+    data += 2;
+    if (GST_READ_UINT16_LE (data) != 0)
+      return;
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, OGG_SKELETON_CAPS);
+  }
+}
+
+static GstStaticCaps cmml_caps = GST_STATIC_CAPS ("text/x-cmml");
+
+#define CMML_CAPS (gst_static_caps_get(&cmml_caps))
+static void
+cmml_type_find (GstTypeFind * tf, gpointer private)
+{
+  /* Header is 12 bytes minimum (though we don't check the minor version */
+  const guint8 *data = gst_type_find_peek (tf, 0, 12);
+
+  if (data) {
+
+    /* 8 byte string "CMML\0\0\0\0" for the magic number */
+    if (memcmp (data, "CMML\0\0\0\0", 8) != 0)
+      return;
+    data += 8;
+
+    /* Require that the header contains at least version 2.0 */
+    if (GST_READ_UINT16_LE (data) < 2)
+      return;
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, CMML_CAPS);
+  }
+}
+
+/*** application/x-tar ***/
+
+static GstStaticCaps tar_caps = GST_STATIC_CAPS ("application/x-tar");
+
+#define TAR_CAPS (gst_static_caps_get(&tar_caps))
+#define OLDGNU_MAGIC "ustar  "  /* 7 chars and a NUL */
+#define NEWGNU_MAGIC "ustar"    /* 5 chars and a NUL */
+static void
+tar_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 257, 8);
+
+  /* of course we are not certain, but we don't want other typefind funcs
+   * to detect formats of files within the tar archive, e.g. mp3s */
+  if (data) {
+    if (memcmp (data, OLDGNU_MAGIC, 8) == 0) {  /* sic */
+      gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, TAR_CAPS);
+    } else if (memcmp (data, NEWGNU_MAGIC, 6) == 0 &&   /* sic */
+        g_ascii_isdigit (data[6]) && g_ascii_isdigit (data[7])) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, TAR_CAPS);
+    }
+  }
+}
+
+/*** application/x-ar ***/
+
+static GstStaticCaps ar_caps = GST_STATIC_CAPS ("application/x-ar");
+
+#define AR_CAPS (gst_static_caps_get(&ar_caps))
+static void
+ar_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 24);
+
+  if (data && memcmp (data, "!<arch>", 7) == 0) {
+    gint i;
+
+    for (i = 7; i < 24; ++i) {
+      if (!g_ascii_isprint (data[i]) && data[i] != '\n') {
+        gst_type_find_suggest (tf, GST_TYPE_FIND_POSSIBLE, AR_CAPS);
+      }
+    }
+
+    gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, AR_CAPS);
+  }
+}
+
+/*** audio/x-au ***/
+
+/* NOTE: we cannot replace this function with TYPE_FIND_REGISTER_START_WITH,
+ * as it is only possible to register one typefind factory per 'name'
+ * (which is in this case the caps), and the first one would be replaced by
+ * the second one. */
+static GstStaticCaps au_caps = GST_STATIC_CAPS ("audio/x-au");
+
+#define AU_CAPS (gst_static_caps_get(&au_caps))
+static void
+au_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data) {
+    if (memcmp (data, ".snd", 4) == 0 || memcmp (data, "dns.", 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, AU_CAPS);
+    }
+  }
+}
+
+
+/*** video/x-nuv ***/
+
+/* NOTE: we cannot replace this function with TYPE_FIND_REGISTER_START_WITH,
+ * as it is only possible to register one typefind factory per 'name'
+ * (which is in this case the caps), and the first one would be replaced by
+ * the second one. */
+static GstStaticCaps nuv_caps = GST_STATIC_CAPS ("video/x-nuv");
+
+#define NUV_CAPS (gst_static_caps_get(&nuv_caps))
+static void
+nuv_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 11);
+
+  if (data) {
+    if (memcmp (data, "MythTVVideo", 11) == 0
+        || memcmp (data, "NuppelVideo", 11) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, NUV_CAPS);
+    }
+  }
+}
+
+/*** audio/x-paris ***/
+/* NOTE: do not replace this function with two TYPE_FIND_REGISTER_START_WITH */
+static GstStaticCaps paris_caps = GST_STATIC_CAPS ("audio/x-paris");
+
+#define PARIS_CAPS (gst_static_caps_get(&paris_caps))
+static void
+paris_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 4);
+
+  if (data) {
+    if (memcmp (data, " paf", 4) == 0 || memcmp (data, "fap ", 4) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, PARIS_CAPS);
+    }
+  }
+}
+
+/*** audio/iLBC-sh ***/
+/* NOTE: do not replace this function with two TYPE_FIND_REGISTER_START_WITH */
+static GstStaticCaps ilbc_caps = GST_STATIC_CAPS ("audio/iLBC-sh");
+
+#define ILBC_CAPS (gst_static_caps_get(&ilbc_caps))
+static void
+ilbc_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 8);
+
+  if (data) {
+    if (memcmp (data, "#!iLBC30", 8) == 0 || memcmp (data, "#!iLBC20", 8) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, ILBC_CAPS);
+    }
+  }
+}
+
+/*** application/x-ms-dos-executable ***/
+
+static GstStaticCaps msdos_caps =
+GST_STATIC_CAPS ("application/x-ms-dos-executable");
+#define MSDOS_CAPS (gst_static_caps_get(&msdos_caps))
+/* see http://www.madchat.org/vxdevl/papers/winsys/pefile/pefile.htm */
+static void
+msdos_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 64);
+
+  if (data && data[0] == 'M' && data[1] == 'Z' &&
+      GST_READ_UINT16_LE (data + 8) == 4) {
+    guint32 pe_offset = GST_READ_UINT32_LE (data + 60);
+
+    data = gst_type_find_peek (tf, pe_offset, 2);
+    if (data && data[0] == 'P' && data[1] == 'E') {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, MSDOS_CAPS);
+    }
+  }
+}
+
+/*** application/x-mmsh ***/
+
+static GstStaticCaps mmsh_caps = GST_STATIC_CAPS ("application/x-mmsh");
+
+#define MMSH_CAPS gst_static_caps_get(&mmsh_caps)
+
+/* This is to recognise mssh-over-http */
+static void
+mmsh_type_find (GstTypeFind * tf, gpointer unused)
+{
+  static const guint8 asf_marker[16] = { 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
+    0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
+  };
+
+  const guint8 *data;
+
+  data = gst_type_find_peek (tf, 0, 2 + 2 + 4 + 2 + 2 + 16);
+  if (data && data[0] == 0x24 && data[1] == 0x48 &&
+      GST_READ_UINT16_LE (data + 2) > 2 + 2 + 4 + 2 + 2 + 16 &&
+      memcmp (data + 2 + 2 + 4 + 2 + 2, asf_marker, 16) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, MMSH_CAPS);
+  }
+}
+
+/*** video/x-dirac ***/
+
+/* NOTE: we cannot replace this function with TYPE_FIND_REGISTER_START_WITH,
+ * as it is only possible to register one typefind factory per 'name'
+ * (which is in this case the caps), and the first one would be replaced by
+ * the second one. */
+static GstStaticCaps dirac_caps = GST_STATIC_CAPS ("video/x-dirac");
+
+#define DIRAC_CAPS (gst_static_caps_get(&dirac_caps))
+static void
+dirac_type_find (GstTypeFind * tf, gpointer unused)
+{
+  const guint8 *data = gst_type_find_peek (tf, 0, 8);
+
+  if (data) {
+    if (memcmp (data, "BBCD", 4) == 0 || memcmp (data, "KW-DIRAC", 8) == 0) {
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, DIRAC_CAPS);
+    }
+  }
+}
+
+/*** video/vivo ***/
+
+static GstStaticCaps vivo_caps = GST_STATIC_CAPS ("video/vivo");
+
+#define VIVO_CAPS gst_static_caps_get(&vivo_caps)
+
+static void
+vivo_type_find (GstTypeFind * tf, gpointer unused)
+{
+  static const guint8 vivo_marker[] = { 'V', 'e', 'r', 's', 'i', 'o', 'n',
+    ':', 'V', 'i', 'v', 'o', '/'
+  };
+  const guint8 *data;
+  guint hdr_len, pos;
+
+  data = gst_type_find_peek (tf, 0, 1024);
+  if (data == NULL || data[0] != 0x00)
+    return;
+
+  if ((data[1] & 0x80)) {
+    if ((data[2] & 0x80))
+      return;
+    hdr_len = ((guint) (data[1] & 0x7f)) << 7;
+    hdr_len += data[2];
+    if (hdr_len > 2048)
+      return;
+    pos = 3;
+  } else {
+    hdr_len = data[1];
+    pos = 2;
+  }
+
+  /* 1008 = 1022 - strlen ("Version:Vivo/") - 1 */
+  while (pos < 1008 && data[pos] == '\r' && data[pos + 1] == '\n')
+    pos += 2;
+
+  if (memcmp (data + pos, vivo_marker, sizeof (vivo_marker)) == 0) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, VIVO_CAPS);
+  }
+}
+
+/*** XDG MIME typefinder (to avoid false positives mostly) ***/
+
+#ifdef USE_GIO
+static void
+xdgmime_typefind (GstTypeFind * find, gpointer user_data)
+{
+  gchar *mimetype;
+  gsize length = 16384;
+  guint64 tf_length;
+  const guint8 *data;
+  gchar *tmp;
+
+  if ((tf_length = gst_type_find_get_length (find)) > 0)
+    length = MIN (length, tf_length);
+
+  if ((data = gst_type_find_peek (find, 0, length)) == NULL)
+    return;
+
+  tmp = g_content_type_guess (NULL, data, length, NULL);
+  if (tmp == NULL || g_content_type_is_unknown (tmp)) {
+    g_free (tmp);
+    return;
+  }
+
+  mimetype = g_content_type_get_mime_type (tmp);
+  g_free (tmp);
+
+  if (mimetype == NULL)
+    return;
+
+  GST_DEBUG ("Got mimetype '%s'", mimetype);
+
+  /* Ignore audio/video types:
+   *  - our own typefinders in -base are likely to be better at this
+   *    (and if they're not, we really want to fix them, that's why we don't
+   *    report xdg-detected audio/video types at all, not even with a low
+   *    probability)
+   *  - we want to detect GStreamer media types and not MIME types
+   *  - the purpose of this xdg mime finder is mainly to prevent false
+   *    positives of non-media formats, not to typefind audio/video formats */
+  if (g_str_has_prefix (mimetype, "audio/") ||
+      g_str_has_prefix (mimetype, "video/")) {
+    GST_LOG ("Ignoring audio/video mime type");
+    g_free (mimetype);
+    return;
+  }
+
+  /* Again, we mainly want the xdg typefinding to prevent false-positives on
+   * non-media formats, so suggest the type with a probability that trumps
+   * uncertain results of our typefinders, but not more than that. */
+  GST_LOG ("Suggesting '%s' with probability POSSIBLE", mimetype);
+  gst_type_find_suggest_simple (find, GST_TYPE_FIND_POSSIBLE, mimetype, NULL);
+  g_free (mimetype);
+}
+#endif /* USE_GIO */
+
+/*** Windows icon typefinder (to avoid false positives mostly) ***/
+
+static void
+windows_icon_typefind (GstTypeFind * find, gpointer user_data)
+{
+  const guint8 *data;
+  gint64 datalen;
+  guint16 type, nimages;
+  gint32 size, offset;
+
+  datalen = gst_type_find_get_length (find);
+  if ((data = gst_type_find_peek (find, 0, 6)) == NULL)
+    return;
+
+  /* header - simple and not enough to rely on it alone */
+  if (GST_READ_UINT16_LE (data) != 0)
+    return;
+  type = GST_READ_UINT16_LE (data + 2);
+  if (type != 1 && type != 2)
+    return;
+  nimages = GST_READ_UINT16_LE (data + 4);
+  if (nimages == 0)             /* we can assume we can't have an empty image file ? */
+    return;
+
+  /* first image */
+  if (data[6 + 3] != 0)
+    return;
+  if (type == 1) {
+    guint16 planes = GST_READ_UINT16_LE (data + 6 + 4);
+    if (planes > 1)
+      return;
+  }
+  size = GST_READ_UINT32_LE (data + 6 + 8);
+  offset = GST_READ_UINT32_LE (data + 6 + 12);
+  if (offset < 0 || size <= 0 || size >= datalen || offset >= datalen
+      || size + offset > datalen)
+    return;
+
+  gst_type_find_suggest_simple (find, GST_TYPE_FIND_NEARLY_CERTAIN,
+      "image/x-icon", NULL);
+}
+
+/*** WAP WBMP typefinder ***/
+
+static void
+wbmp_typefind (GstTypeFind * find, gpointer user_data)
+{
+  const guint8 *data;
+  gint64 datalen;
+  guint w, h, size;
+
+  /* http://en.wikipedia.org/wiki/Wireless_Application_Protocol_Bitmap_Format */
+  datalen = gst_type_find_get_length (find);
+  if (datalen == 0)
+    return;
+
+  data = gst_type_find_peek (find, 0, 5);
+  if (data == NULL)
+    return;
+
+  /* want 0x00 0x00 at start */
+  if (*data++ != 0 || *data++ != 0)
+    return;
+
+  /* min header size */
+  size = 4;
+
+  /* let's assume max width/height is 65536 */
+  w = *data++;
+  if ((w & 0x80)) {
+    w = (w << 8) | *data++;
+    if ((w & 0x80))
+      return;
+    ++size;
+    data = gst_type_find_peek (find, 4, 2);
+    if (data == NULL)
+      return;
+  }
+  h = *data++;
+  if ((h & 0x80)) {
+    h = (h << 8) | *data++;
+    if ((h & 0x80))
+      return;
+    ++size;
+  }
+
+  if (w == 0 || h == 0)
+    return;
+
+  /* now add bitmap size */
+  size += h * (GST_ROUND_UP_8 (w) / 8);
+
+  if (datalen == size) {
+    gst_type_find_suggest_simple (find, GST_TYPE_FIND_POSSIBLE - 10,
+        "image/vnd.wap.wbmp", NULL);
+  }
+}
+
+/*** DEGAS Atari images (also to avoid false positives, see #625129) ***/
+static void
+degas_type_find (GstTypeFind * tf, gpointer private)
+{
+  /* No magic, but it should have a fixed size and a few invalid values */
+  /* http://www.fileformat.info/format/atari/spec/6ecf9f6eb5be494284a47feb8a214687/view.htm */
+  gint64 len;
+  const guint8 *data;
+  guint16 resolution;
+  int n;
+
+  len = gst_type_find_get_length (tf);
+  if (len < 34)                 /* smallest header of the lot */
+    return;
+  data = gst_type_find_peek (tf, 0, 4);
+  if (G_UNLIKELY (data == NULL))
+    return;
+  resolution = GST_READ_UINT16_BE (data);
+  if (len == 32034) {
+    /* could be DEGAS */
+    if (resolution <= 2)
+      gst_type_find_suggest_simple (tf, GST_TYPE_FIND_POSSIBLE + 5,
+          "image/x-degas", NULL);
+  } else if (len == 32066) {
+    /* could be DEGAS Elite */
+    if (resolution <= 2) {
+      data = gst_type_find_peek (tf, len - 16, 8);
+      if (G_UNLIKELY (data == NULL))
+        return;
+      for (n = 0; n < 4; n++) {
+        if (GST_READ_UINT16_BE (data + n * 2) > 2)
+          return;
+      }
+      gst_type_find_suggest_simple (tf, GST_TYPE_FIND_POSSIBLE + 5,
+          "image/x-degas", NULL);
+    }
+  } else if (len >= 66 && len < 32066) {
+    /* could be compressed DEGAS Elite, but it's compressed and so we can't rely on size,
+       it does have 4 16 bytes values near the end that are 0-2 though. */
+    if ((resolution & 0x8000) && (resolution & 0x7fff) <= 2) {
+      data = gst_type_find_peek (tf, len - 16, 8);
+      if (G_UNLIKELY (data == NULL))
+        return;
+      for (n = 0; n < 4; n++) {
+        if (GST_READ_UINT16_BE (data + n * 2) > 2)
+          return;
+      }
+      gst_type_find_suggest_simple (tf, GST_TYPE_FIND_POSSIBLE + 5,
+          "image/x-degas", NULL);
+    }
+  }
+}
+
+/*** generic typefind for streams that have some data at a specific position***/
+typedef struct
+{
+  const guint8 *data;
+  guint size;
+  guint probability;
+  GstCaps *caps;
+}
+GstTypeFindData;
+
+static void
+start_with_type_find (GstTypeFind * tf, gpointer private)
+{
+  GstTypeFindData *start_with = (GstTypeFindData *) private;
+  const guint8 *data;
+
+  GST_LOG ("trying to find mime type %s with the first %u bytes of data",
+      gst_structure_get_name (gst_caps_get_structure (start_with->caps, 0)),
+      start_with->size);
+  data = gst_type_find_peek (tf, 0, start_with->size);
+  if (data && memcmp (data, start_with->data, start_with->size) == 0) {
+    gst_type_find_suggest (tf, start_with->probability, start_with->caps);
+  }
+}
+
+static void
+sw_data_destroy (GstTypeFindData * sw_data)
+{
+  if (G_LIKELY (sw_data->caps != NULL))
+    gst_caps_unref (sw_data->caps);
+  g_free (sw_data);
+}
+
+#define TYPE_FIND_REGISTER_START_WITH(plugin,name,rank,ext,_data,_size,_probability)\
+G_BEGIN_DECLS{                                                          \
+  GstTypeFindData *sw_data = g_new (GstTypeFindData, 1);                \
+  sw_data->data = (const guint8 *)_data;                                \
+  sw_data->size = _size;                                                \
+  sw_data->probability = _probability;                                  \
+  sw_data->caps = gst_caps_new_simple (name, NULL);                     \
+  if (!gst_type_find_register (plugin, name, rank, start_with_type_find,\
+                      (char **) ext, sw_data->caps, sw_data,            \
+                     (GDestroyNotify) (sw_data_destroy))) {             \
+    gst_caps_unref (sw_data->caps);                                     \
+    g_free (sw_data);                                                   \
+  }                                                                     \
+}G_END_DECLS
+
+/*** same for riff types ***/
+
+static void
+riff_type_find (GstTypeFind * tf, gpointer private)
+{
+  GstTypeFindData *riff_data = (GstTypeFindData *) private;
+  const guint8 *data = gst_type_find_peek (tf, 0, 12);
+
+  if (data && (memcmp (data, "RIFF", 4) == 0 || memcmp (data, "AVF0", 4) == 0)) {
+    data += 8;
+    if (memcmp (data, riff_data->data, 4) == 0)
+      gst_type_find_suggest (tf, riff_data->probability, riff_data->caps);
+  }
+}
+
+#define TYPE_FIND_REGISTER_RIFF(plugin,name,rank,ext,_data)             \
+G_BEGIN_DECLS{                                                          \
+  GstTypeFindData *sw_data = g_new (GstTypeFindData, 1);                \
+  sw_data->data = (gpointer)_data;                                      \
+  sw_data->size = 4;                                                    \
+  sw_data->probability = GST_TYPE_FIND_MAXIMUM;                         \
+  sw_data->caps = gst_caps_new_simple (name, NULL);                     \
+  if (!gst_type_find_register (plugin, name, rank, riff_type_find,      \
+                      (char **) ext, sw_data->caps, sw_data,            \
+                      (GDestroyNotify) (sw_data_destroy))) {            \
+    gst_caps_unref (sw_data->caps);                                     \
+    g_free (sw_data);                                                   \
+  }                                                                     \
+}G_END_DECLS
+
+
+/*** plugin initialization ***/
+
+#define TYPE_FIND_REGISTER(plugin,name,rank,func,ext,caps,priv,notify) \
+G_BEGIN_DECLS{\
+  if (!gst_type_find_register (plugin, name, rank, func, (char **) ext, caps, priv, notify))\
+    return FALSE; \
+}G_END_DECLS
+
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  /* can't initialize this via a struct as caps can't be statically initialized */
+
+  /* note: asx/wax/wmx are XML files, asf doesn't handle them */
+  /* FIXME-0.11: these should be const,
+     this requires gstreamer/gst/gsttypefind::gst_type_find_register()
+     to have define the parameter as const
+   */
+  static const gchar *asf_exts[] = { "asf", "wm", "wma", "wmv", NULL };
+  static const gchar *au_exts[] = { "au", "snd", NULL };
+  static const gchar *avi_exts[] = { "avi", NULL };
+  static const gchar *qcp_exts[] = { "qcp", NULL };
+  static const gchar *cdxa_exts[] = { "dat", NULL };
+  static const gchar *flac_exts[] = { "flac", NULL };
+  static const gchar *flx_exts[] = { "flc", "fli", NULL };
+  static const gchar *id3_exts[] =
+      { "mp3", "mp2", "mp1", "mpga", "ogg", "flac", "tta", NULL };
+  static const gchar *apetag_exts[] = { "mp3", "ape", "mpc", "wv", NULL };
+  static const gchar *tta_exts[] = { "tta", NULL };
+  static const gchar *mod_exts[] = { "669", "amf", "dsm", "gdm", "far", "imf",
+    "it", "med", "mod", "mtm", "okt", "sam",
+    "s3m", "stm", "stx", "ult", "xm", NULL
+  };
+  static const gchar *mp3_exts[] = { "mp3", "mp2", "mp1", "mpga", NULL };
+  static const gchar *ac3_exts[] = { "ac3", "eac3", NULL };
+  static const gchar *dts_exts[] = { "dts", NULL };
+  static const gchar *gsm_exts[] = { "gsm", NULL };
+  static const gchar *musepack_exts[] = { "mpc", "mpp", "mp+", NULL };
+  static const gchar *mpeg_sys_exts[] = { "mpe", "mpeg", "mpg", NULL };
+  static const gchar *mpeg_video_exts[] = { "mpv", "mpeg", "mpg", NULL };
+  static const gchar *mpeg_ts_exts[] = { "ts", "mts", NULL };
+  static const gchar *ogg_exts[] = { "anx", "ogg", "ogm", NULL };
+  static const gchar *qt_exts[] = { "mov", NULL };
+  static const gchar *qtif_exts[] = { "qif", "qtif", "qti", NULL };
+  static const gchar *mj2_exts[] = { "mj2", NULL };
+  static const gchar *jp2_exts[] = { "jp2", NULL };
+  static const gchar *rm_exts[] = { "ra", "ram", "rm", "rmvb", NULL };
+  static const gchar *swf_exts[] = { "swf", "swfl", NULL };
+  static const gchar *utf8_exts[] = { "txt", NULL };
+  static const gchar *wav_exts[] = { "wav", NULL };
+  static const gchar *aiff_exts[] = { "aiff", "aif", "aifc", NULL };
+  static const gchar *svx_exts[] = { "iff", "svx", NULL };
+  static const gchar *paris_exts[] = { "paf", NULL };
+  static const gchar *nist_exts[] = { "nist", NULL };
+  static const gchar *voc_exts[] = { "voc", NULL };
+  static const gchar *sds_exts[] = { "sds", NULL };
+  static const gchar *ircam_exts[] = { "sf", NULL };
+  static const gchar *w64_exts[] = { "w64", NULL };
+  static const gchar *shn_exts[] = { "shn", NULL };
+  static const gchar *ape_exts[] = { "ape", NULL };
+  static const gchar *uri_exts[] = { "ram", NULL };
+  static const gchar *hls_exts[] = { "m3u8", NULL };
+  static const gchar *sdp_exts[] = { "sdp", NULL };
+  static const gchar *smil_exts[] = { "smil", NULL };
+  static const gchar *html_exts[] = { "htm", "html", NULL };
+  static const gchar *xml_exts[] = { "xml", NULL };
+  static const gchar *jpeg_exts[] = { "jpg", "jpe", "jpeg", NULL };
+  static const gchar *gif_exts[] = { "gif", NULL };
+  static const gchar *png_exts[] = { "png", NULL };
+  static const gchar *bmp_exts[] = { "bmp", NULL };
+  static const gchar *tiff_exts[] = { "tif", "tiff", NULL };
+  static const gchar *matroska_exts[] = { "mkv", "mka", NULL };
+  static const gchar *webm_exts[] = { "webm", NULL };
+  static const gchar *mve_exts[] = { "mve", NULL };
+  static const gchar *dv_exts[] = { "dv", "dif", NULL };
+  static const gchar *amr_exts[] = { "amr", NULL };
+  static const gchar *ilbc_exts[] = { "ilbc", NULL };
+  static const gchar *sid_exts[] = { "sid", NULL };
+  static const gchar *xcf_exts[] = { "xcf", NULL };
+  static const gchar *mng_exts[] = { "mng", NULL };
+  static const gchar *jng_exts[] = { "jng", NULL };
+  static const gchar *xpm_exts[] = { "xpm", NULL };
+  static const gchar *pnm_exts[] = { "pnm", "ppm", "pgm", "pbm", NULL };
+  static const gchar *ras_exts[] = { "ras", NULL };
+  static const gchar *bz2_exts[] = { "bz2", NULL };
+  static const gchar *gz_exts[] = { "gz", NULL };
+  static const gchar *zip_exts[] = { "zip", NULL };
+  static const gchar *compress_exts[] = { "Z", NULL };
+  static const gchar *m4a_exts[] = { "m4a", NULL };
+  static const gchar *q3gp_exts[] = { "3gp", NULL };
+  static const gchar *aac_exts[] = { "aac", "adts", "adif", "loas", NULL };
+  static const gchar *spc_exts[] = { "spc", NULL };
+  static const gchar *wavpack_exts[] = { "wv", "wvp", NULL };
+  static const gchar *wavpack_correction_exts[] = { "wvc", NULL };
+  static const gchar *rar_exts[] = { "rar", NULL };
+  static const gchar *tar_exts[] = { "tar", NULL };
+  static const gchar *ar_exts[] = { "a", NULL };
+  static const gchar *msdos_exts[] = { "dll", "exe", "ocx", "sys", "scr",
+    "msstyles", "cpl", NULL
+  };
+  static const gchar *flv_exts[] = { "flv", NULL };
+  static const gchar *m4v_exts[] = { "m4v", NULL };
+  static const gchar *h263_exts[] = { "h263", "263", NULL };
+  static const gchar *h264_exts[] = { "h264", "x264", "264", NULL };
+  static const gchar *nuv_exts[] = { "nuv", NULL };
+  static const gchar *vivo_exts[] = { "viv", NULL };
+  static const gchar *nsf_exts[] = { "nsf", NULL };
+  static const gchar *gym_exts[] = { "gym", NULL };
+  static const gchar *ay_exts[] = { "ay", NULL };
+  static const gchar *gbs_exts[] = { "gbs", NULL };
+  static const gchar *kss_exts[] = { "kss", NULL };
+  static const gchar *sap_exts[] = { "sap", NULL };
+  static const gchar *vgm_exts[] = { "vgm", NULL };
+  static const gchar *mid_exts[] = { "mid", "midi", NULL };
+  static const gchar *mxmf_exts[] = { "mxmf", NULL };
+  static const gchar *imelody_exts[] = { "imy", "ime", "imelody", NULL };
+  static const gchar *pdf_exts[] = { "pdf", NULL };
+  static const gchar *ps_exts[] = { "ps", NULL };
+  static const gchar *svg_exts[] = { "svg", NULL };
+  static const gchar *mxf_exts[] = { "mxf", NULL };
+  static const gchar *ivf_exts[] = { "ivf", NULL };
+  static const gchar *msword_exts[] = { "doc", NULL };
+  static const gchar *dsstore_exts[] = { "DS_Store", NULL };
+  static const gchar *psd_exts[] = { "psd", NULL };
+  static const gchar *y4m_exts[] = { "y4m", NULL };
+
+  GST_DEBUG_CATEGORY_INIT (type_find_debug, "typefindfunctions",
+      GST_DEBUG_FG_GREEN | GST_DEBUG_BG_RED, "generic type find functions");
+
+  /* must use strings, macros don't accept initializers */
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-ms-asf", GST_RANK_SECONDARY,
+      asf_exts,
+      "\060\046\262\165\216\146\317\021\246\331\000\252\000\142\316\154", 16,
+      GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/x-musepack", GST_RANK_PRIMARY,
+      musepack_type_find, musepack_exts, MUSEPACK_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-au", GST_RANK_MARGINAL,
+      au_type_find, au_exts, AU_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_RIFF (plugin, "video/x-msvideo", GST_RANK_PRIMARY,
+      avi_exts, "AVI ");
+  TYPE_FIND_REGISTER_RIFF (plugin, "audio/qcelp", GST_RANK_PRIMARY,
+      qcp_exts, "QLCM");
+  TYPE_FIND_REGISTER_RIFF (plugin, "video/x-cdxa", GST_RANK_PRIMARY,
+      cdxa_exts, "CDXA");
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-vcd", GST_RANK_PRIMARY,
+      cdxa_exts, "\000\377\377\377\377\377\377\377\377\377\377\000", 12,
+      GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-imelody", GST_RANK_PRIMARY,
+      imelody_exts, "BEGIN:IMELODY", 13, GST_TYPE_FIND_MAXIMUM);
+#if 0
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-smoke", GST_RANK_PRIMARY,
+      NULL, "\x80smoke\x00\x01\x00", 6, GST_TYPE_FIND_MAXIMUM);
+#endif
+  TYPE_FIND_REGISTER (plugin, "audio/midi", GST_RANK_PRIMARY, mid_type_find,
+      mid_exts, MID_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_RIFF (plugin, "audio/riff-midi", GST_RANK_PRIMARY,
+      mid_exts, "RMID");
+  TYPE_FIND_REGISTER (plugin, "audio/mobile-xmf", GST_RANK_PRIMARY,
+      mxmf_type_find, mxmf_exts, MXMF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-fli", GST_RANK_MARGINAL, flx_type_find,
+      flx_exts, FLX_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-id3v2", GST_RANK_PRIMARY + 103,
+      id3v2_type_find, id3_exts, ID3_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-id3v1", GST_RANK_PRIMARY + 101,
+      id3v1_type_find, id3_exts, ID3_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-apetag", GST_RANK_PRIMARY + 102,
+      apetag_type_find, apetag_exts, APETAG_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-ttafile", GST_RANK_PRIMARY,
+      tta_type_find, tta_exts, TTA_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-mod", GST_RANK_SECONDARY, mod_type_find,
+      mod_exts, MOD_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/mpeg", GST_RANK_PRIMARY, mp3_type_find,
+      mp3_exts, MP3_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-ac3", GST_RANK_PRIMARY, ac3_type_find,
+      ac3_exts, AC3_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-dts", GST_RANK_SECONDARY, dts_type_find,
+      dts_exts, DTS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-gsm", GST_RANK_PRIMARY, NULL, gsm_exts,
+      GSM_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/mpeg-sys", GST_RANK_PRIMARY,
+      mpeg_sys_type_find, mpeg_sys_exts, MPEG_SYS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/mpegts", GST_RANK_PRIMARY,
+      mpeg_ts_type_find, mpeg_ts_exts, MPEGTS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/ogg", GST_RANK_PRIMARY,
+      ogganx_type_find, ogg_exts, OGGANX_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/mpeg-elementary", GST_RANK_MARGINAL,
+      mpeg_video_stream_type_find, mpeg_video_exts, MPEG_VIDEO_CAPS, NULL,
+      NULL);
+  TYPE_FIND_REGISTER (plugin, "video/mpeg4", GST_RANK_PRIMARY,
+      mpeg4_video_type_find, m4v_exts, MPEG_VIDEO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-h263", GST_RANK_SECONDARY,
+      h263_video_type_find, h263_exts, H263_VIDEO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-h264", GST_RANK_PRIMARY,
+      h264_video_type_find, h264_exts, H264_VIDEO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-nuv", GST_RANK_SECONDARY, nuv_type_find,
+      nuv_exts, NUV_CAPS, NULL, NULL);
+
+  /* ISO formats */
+  TYPE_FIND_REGISTER (plugin, "audio/x-m4a", GST_RANK_PRIMARY, m4a_type_find,
+      m4a_exts, M4A_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-3gp", GST_RANK_PRIMARY,
+      q3gp_type_find, q3gp_exts, Q3GP_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/quicktime", GST_RANK_SECONDARY,
+      qt_type_find, qt_exts, QT_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/x-quicktime", GST_RANK_SECONDARY,
+      qtif_type_find, qtif_exts, QTIF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/jp2", GST_RANK_PRIMARY,
+      jp2_type_find, jp2_exts, JP2_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/mj2", GST_RANK_PRIMARY,
+      jp2_type_find, mj2_exts, MJ2_CAPS, NULL, NULL);
+
+  TYPE_FIND_REGISTER (plugin, "text/html", GST_RANK_SECONDARY, html_type_find,
+      html_exts, HTML_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/vnd.rn-realmedia",
+      GST_RANK_SECONDARY, rm_exts, ".RMF", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-pn-realaudio",
+      GST_RANK_SECONDARY, rm_exts, ".ra\375", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "application/x-shockwave-flash",
+      GST_RANK_SECONDARY, swf_type_find, swf_exts, SWF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-flv", GST_RANK_SECONDARY,
+      flv_exts, "FLV", 3, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "text/plain", GST_RANK_MARGINAL, utf8_type_find,
+      utf8_exts, UTF8_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "text/uri-list", GST_RANK_MARGINAL, uri_type_find,
+      uri_exts, URI_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-hls", GST_RANK_MARGINAL,
+      hls_type_find, hls_exts, HLS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/sdp", GST_RANK_SECONDARY,
+      sdp_type_find, sdp_exts, SDP_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/smil", GST_RANK_SECONDARY,
+      smil_type_find, smil_exts, SMIL_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/xml", GST_RANK_MARGINAL,
+      xml_type_find, xml_exts, GENERIC_XML_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_RIFF (plugin, "audio/x-wav", GST_RANK_PRIMARY, wav_exts,
+      "WAVE");
+  TYPE_FIND_REGISTER (plugin, "audio/x-aiff", GST_RANK_SECONDARY,
+      aiff_type_find, aiff_exts, AIFF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-svx", GST_RANK_SECONDARY, svx_type_find,
+      svx_exts, SVX_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-paris", GST_RANK_SECONDARY,
+      paris_type_find, paris_exts, PARIS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-nist", GST_RANK_SECONDARY,
+      nist_exts, "NIST", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-voc", GST_RANK_SECONDARY,
+      voc_exts, "Creative", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/x-sds", GST_RANK_SECONDARY, sds_type_find,
+      sds_exts, SDS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-ircam", GST_RANK_SECONDARY,
+      ircam_type_find, ircam_exts, IRCAM_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-w64", GST_RANK_SECONDARY,
+      w64_exts, "riff", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/x-shorten", GST_RANK_SECONDARY,
+      shn_type_find, shn_exts, SHN_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ape", GST_RANK_SECONDARY,
+      ape_type_find, ape_exts, APE_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/jpeg", GST_RANK_PRIMARY + 15,
+      jpeg_type_find, jpeg_exts, JPEG_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/gif", GST_RANK_PRIMARY,
+      gif_exts, "GIF8", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/png", GST_RANK_PRIMARY + 14,
+      png_exts, "\211PNG\015\012\032\012", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "image/bmp", GST_RANK_PRIMARY, bmp_type_find,
+      bmp_exts, BMP_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/tiff", GST_RANK_PRIMARY, tiff_type_find,
+      tiff_exts, TIFF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/x-portable-pixmap", GST_RANK_SECONDARY,
+      pnm_type_find, pnm_exts, PNM_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-matroska", GST_RANK_PRIMARY,
+      matroska_type_find, matroska_exts, MATROSKA_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/webm", GST_RANK_PRIMARY,
+      webm_type_find, webm_exts, WEBM_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/mxf", GST_RANK_PRIMARY,
+      mxf_type_find, mxf_exts, MXF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-mve", GST_RANK_SECONDARY,
+      mve_exts, "Interplay MVE File\032\000\032\000\000\001\063\021", 26,
+      GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "video/x-dv", GST_RANK_SECONDARY, dv_type_find,
+      dv_exts, DV_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-amr-nb-sh", GST_RANK_PRIMARY,
+      amr_exts, "#!AMR", 5, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-amr-wb-sh", GST_RANK_PRIMARY,
+      amr_exts, "#!AMR-WB", 7, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/iLBC-sh", GST_RANK_PRIMARY,
+      ilbc_type_find, ilbc_exts, ILBC_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-sid", GST_RANK_MARGINAL,
+      sid_exts, "PSID", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/x-xcf", GST_RANK_SECONDARY,
+      xcf_exts, "gimp xcf", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-mng", GST_RANK_SECONDARY,
+      mng_exts, "\212MNG\015\012\032\012", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/x-jng", GST_RANK_SECONDARY,
+      jng_exts, "\213JNG\015\012\032\012", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/x-xpixmap", GST_RANK_SECONDARY,
+      xpm_exts, "/* XPM */", 9, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/x-sun-raster",
+      GST_RANK_SECONDARY, ras_exts, "\131\246\152\225", 4,
+      GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-bzip",
+      GST_RANK_SECONDARY, bz2_exts, "BZh", 3, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-gzip",
+      GST_RANK_SECONDARY, gz_exts, "\037\213", 2, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/zip", GST_RANK_SECONDARY,
+      zip_exts, "PK\003\004", 4, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-compress",
+      GST_RANK_SECONDARY, compress_exts, "\037\235", 2, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER (plugin, "subtitle/x-kate", GST_RANK_MARGINAL,
+      kate_type_find, NULL, NULL, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-flac", GST_RANK_PRIMARY,
+      flac_type_find, flac_exts, FLAC_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-vorbis", GST_RANK_PRIMARY,
+      vorbis_type_find, NULL, VORBIS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-theora", GST_RANK_PRIMARY,
+      theora_type_find, NULL, THEORA_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ogm-video", GST_RANK_PRIMARY,
+      ogmvideo_type_find, NULL, OGMVIDEO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ogm-audio", GST_RANK_PRIMARY,
+      ogmaudio_type_find, NULL, OGMAUDIO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ogm-text", GST_RANK_PRIMARY,
+      ogmtext_type_find, NULL, OGMTEXT_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-speex", GST_RANK_PRIMARY,
+      speex_type_find, NULL, SPEEX_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-celt", GST_RANK_PRIMARY,
+      celt_type_find, NULL, CELT_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ogg-skeleton", GST_RANK_PRIMARY,
+      oggskel_type_find, NULL, OGG_SKELETON_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "text/x-cmml", GST_RANK_PRIMARY, cmml_type_find,
+      NULL, CMML_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-executable",
+      GST_RANK_MARGINAL, NULL, "\177ELF", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/aac", GST_RANK_SECONDARY,
+      aac_type_find, aac_exts, AAC_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-spc", GST_RANK_SECONDARY,
+      spc_exts, "SNES-SPC700 Sound File Data", 27, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER (plugin, "audio/x-wavpack", GST_RANK_SECONDARY,
+      wavpack_type_find, wavpack_exts, WAVPACK_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "audio/x-wavpack-correction", GST_RANK_SECONDARY,
+      wavpack_type_find, wavpack_correction_exts, WAVPACK_CORRECTION_CAPS, NULL,
+      NULL);
+  TYPE_FIND_REGISTER (plugin, "application/postscript", GST_RANK_SECONDARY,
+      postscript_type_find, ps_exts, POSTSCRIPT_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "image/svg+xml", GST_RANK_SECONDARY,
+      svg_type_find, svg_exts, SVG_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-rar",
+      GST_RANK_SECONDARY, rar_exts, "Rar!", 4, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER (plugin, "application/x-tar", GST_RANK_SECONDARY,
+      tar_type_find, tar_exts, TAR_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ar", GST_RANK_SECONDARY,
+      ar_type_find, ar_exts, AR_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-ms-dos-executable",
+      GST_RANK_SECONDARY, msdos_type_find, msdos_exts, MSDOS_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/x-dirac", GST_RANK_PRIMARY,
+      dirac_type_find, NULL, DIRAC_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "multipart/x-mixed-replace", GST_RANK_SECONDARY,
+      multipart_type_find, NULL, MULTIPART_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/x-mmsh", GST_RANK_SECONDARY,
+      mmsh_type_find, NULL, MMSH_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "video/vivo", GST_RANK_SECONDARY,
+      vivo_type_find, vivo_exts, VIVO_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-nsf",
+      GST_RANK_SECONDARY, nsf_exts, "NESM\x1a", 5, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-gym",
+      GST_RANK_SECONDARY, gym_exts, "GYMX", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-ay",
+      GST_RANK_SECONDARY, ay_exts, "ZXAYEMUL", 8, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-gbs",
+      GST_RANK_SECONDARY, gbs_exts, "GBS\x01", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-vgm",
+      GST_RANK_SECONDARY, vgm_exts, "Vgm\x20", 4, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-sap",
+      GST_RANK_SECONDARY, sap_exts, "SAP\x0d\x0a" "AUTHOR\x20", 12,
+      GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-ivf", GST_RANK_SECONDARY,
+      ivf_exts, "DKIF", 4, GST_TYPE_FIND_NEARLY_CERTAIN);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-kss", GST_RANK_SECONDARY,
+      kss_exts, "KSSX\0", 5, GST_TYPE_FIND_MAXIMUM);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/pdf", GST_RANK_SECONDARY,
+      pdf_exts, "%PDF-", 5, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/msword",
+      GST_RANK_SECONDARY, msword_exts, "\320\317\021\340\241\261\032\341", 8,
+      GST_TYPE_FIND_LIKELY);
+  /* Mac OS X .DS_Store files tend to be taken for video/mpeg */
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/octet-stream",
+      GST_RANK_SECONDARY, dsstore_exts, "\000\000\000\001Bud1", 8,
+      GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "image/vnd.adobe.photoshop",
+      GST_RANK_SECONDARY, psd_exts, "8BPS\000\001\000\000\000\000", 10,
+      GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER (plugin, "image/vnd.wap.wbmp", GST_RANK_MARGINAL,
+      wbmp_typefind, NULL, NULL, NULL, NULL);
+  TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-yuv4mpeg",
+      GST_RANK_SECONDARY, y4m_exts, "YUV4MPEG2 ", 10, GST_TYPE_FIND_LIKELY);
+  TYPE_FIND_REGISTER (plugin, "image/x-icon", GST_RANK_MARGINAL,
+      windows_icon_typefind, NULL, NULL, NULL, NULL);
+
+#ifdef USE_GIO
+  TYPE_FIND_REGISTER (plugin, "xdgmime-base", GST_RANK_MARGINAL,
+      xdgmime_typefind, NULL, NULL, NULL, NULL);
+#endif
+
+  TYPE_FIND_REGISTER (plugin, "image/x-degas", GST_RANK_MARGINAL,
+      degas_type_find, NULL, NULL, NULL, NULL);
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "typefindfunctions",
+    "default typefind functions",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/videoconvert/Makefile.am b/gst/videoconvert/Makefile.am
new file mode 100644
index 0000000..e9c8f78
--- /dev/null
+++ b/gst/videoconvert/Makefile.am
@@ -0,0 +1,35 @@
+plugin_LTLIBRARIES = libgstvideoconvert.la
+
+ORC_SOURCE=gstvideoconvertorc
+include $(top_srcdir)/common/orc.mak
+
+libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c
+nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvideoconvert_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ORC_CFLAGS)
+libgstvideoconvert_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS)
+libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoconvert_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstvideoconvert.h videoconvert.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideoconvert_la_SOURCES) \
+	           $(nodist_libgstvideoconvert_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \
+	           $(libgstvideoconvert_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/videoconvert/Makefile.in b/gst/videoconvert/Makefile.in
new file mode 100644
index 0000000..2e580ad
--- /dev/null
+++ b/gst/videoconvert/Makefile.in
@@ -0,0 +1,881 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+subdir = gst/videoconvert
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvideoconvert_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstvideoconvert_la_OBJECTS =  \
+	libgstvideoconvert_la-gstvideoconvert.lo \
+	libgstvideoconvert_la-videoconvert.lo
+am__objects_1 = libgstvideoconvert_la-tmp-orc.lo
+nodist_libgstvideoconvert_la_OBJECTS = $(am__objects_1)
+libgstvideoconvert_la_OBJECTS = $(am_libgstvideoconvert_la_OBJECTS) \
+	$(nodist_libgstvideoconvert_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvideoconvert_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) \
+	$(libgstvideoconvert_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvideoconvert_la_SOURCES) \
+	$(nodist_libgstvideoconvert_la_SOURCES)
+DIST_SOURCES = $(libgstvideoconvert_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstvideoconvert.la
+ORC_SOURCE = gstvideoconvertorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c
+nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvideoconvert_la_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) \
+	$(ORC_CFLAGS)
+
+libgstvideoconvert_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS)
+
+libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoconvert_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstvideoconvert.h videoconvert.h
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoconvert/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/videoconvert/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvideoconvert.la: $(libgstvideoconvert_la_OBJECTS) $(libgstvideoconvert_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideoconvert_la_LINK) -rpath $(plugindir) $(libgstvideoconvert_la_OBJECTS) $(libgstvideoconvert_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvideoconvert_la-gstvideoconvert.lo: gstvideoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-gstvideoconvert.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Tpo -c -o libgstvideoconvert_la-gstvideoconvert.lo `test -f 'gstvideoconvert.c' || echo '$(srcdir)/'`gstvideoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Tpo $(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideoconvert.c' object='libgstvideoconvert_la-gstvideoconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-gstvideoconvert.lo `test -f 'gstvideoconvert.c' || echo '$(srcdir)/'`gstvideoconvert.c
+
+libgstvideoconvert_la-videoconvert.lo: videoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-videoconvert.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo $(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='videoconvert.c' object='libgstvideoconvert_la-videoconvert.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c
+
+libgstvideoconvert_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstvideoconvert_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-pluginLTLIBRARIES ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pluginLTLIBRARIES install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideoconvert_la_SOURCES) \
+	           $(nodist_libgstvideoconvert_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \
+	           $(libgstvideoconvert_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/videoconvert/gstvideoconvert.c b/gst/videoconvert/gstvideoconvert.c
new file mode 100644
index 0000000..b920fdd
--- /dev/null
+++ b/gst/videoconvert/gstvideoconvert.c
@@ -0,0 +1,516 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * This file:
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2010 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-videoconvert
+ *
+ * Convert video frames between a great variety of video formats.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v videotestsrc ! video/x-raw,format=\(fourcc\)YUY2 ! videoconvert ! ximagesink
+ * ]|
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstvideoconvert.h"
+#include <gst/video/video.h>
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+#include <string.h>
+
+GST_DEBUG_CATEGORY (videoconvert_debug);
+#define GST_CAT_DEFAULT videoconvert_debug
+GST_DEBUG_CATEGORY (videoconvert_performance);
+
+enum
+{
+  PROP_0,
+  PROP_DITHER
+};
+
+#define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL)
+
+static GstStaticPadTemplate gst_video_convert_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CSP_VIDEO_CAPS)
+    );
+
+static GstStaticPadTemplate gst_video_convert_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CSP_VIDEO_CAPS)
+    );
+
+GType gst_video_convert_get_type (void);
+
+static void gst_video_convert_set_property (GObject * object,
+    guint property_id, const GValue * value, GParamSpec * pspec);
+static void gst_video_convert_get_property (GObject * object,
+    guint property_id, GValue * value, GParamSpec * pspec);
+
+static gboolean gst_video_convert_set_caps (GstBaseTransform * btrans,
+    GstCaps * incaps, GstCaps * outcaps);
+static gboolean gst_video_convert_get_unit_size (GstBaseTransform * btrans,
+    GstCaps * caps, gsize * size);
+static GstFlowReturn gst_video_convert_transform (GstBaseTransform * btrans,
+    GstBuffer * inbuf, GstBuffer * outbuf);
+
+static GType
+dither_method_get_type (void)
+{
+  static GType gtype = 0;
+
+  if (gtype == 0) {
+    static const GEnumValue values[] = {
+      {DITHER_NONE, "No dithering (default)", "none"},
+      {DITHER_VERTERR, "Vertical error propogation", "verterr"},
+      {DITHER_HALFTONE, "Half-tone", "halftone"},
+      {0, NULL, NULL}
+    };
+
+    gtype = g_enum_register_static ("GstColorspaceDitherMethod", values);
+  }
+  return gtype;
+}
+
+/* copies the given caps */
+static GstCaps *
+gst_video_convert_caps_remove_format_info (GstCaps * caps)
+{
+  GstStructure *st;
+  gint i, n;
+  GstCaps *res;
+
+  res = gst_caps_new_empty ();
+
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    st = gst_caps_get_structure (caps, i);
+
+    /* If this is already expressed by the existing caps
+     * skip this structure */
+    if (i > 0 && gst_caps_is_subset_structure (res, st))
+      continue;
+
+    st = gst_structure_copy (st);
+    gst_structure_remove_fields (st, "format", "palette_data",
+        "colorimetry", "chroma-site", NULL);
+
+    gst_caps_append_structure (res, st);
+  }
+
+  return res;
+}
+
+/* The caps can be transformed into any other caps with format info removed.
+ * However, we should prefer passthrough, so if passthrough is possible,
+ * put it first in the list. */
+static GstCaps *
+gst_video_convert_transform_caps (GstBaseTransform * btrans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  GstCaps *tmp, *tmp2;
+  GstCaps *result;
+
+  result = gst_caps_copy (caps);
+
+  /* Get all possible caps that we can transform to */
+  tmp = gst_video_convert_caps_remove_format_info (caps);
+
+  if (filter) {
+    tmp2 = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (tmp);
+    tmp = tmp2;
+  }
+
+  result = tmp;
+
+  GST_DEBUG_OBJECT (btrans, "transformed %" GST_PTR_FORMAT " into %"
+      GST_PTR_FORMAT, caps, result);
+
+  return result;
+}
+
+static gboolean
+gst_video_convert_decide_allocation (GstBaseTransform * trans, GstQuery * query)
+{
+  GstBufferPool *pool = NULL;
+  guint size, min, max, prefix, alignment;
+
+  gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+      &alignment, &pool);
+
+  if (pool) {
+    GstStructure *config;
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_META_VIDEO);
+    gst_buffer_pool_set_config (pool, config);
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
+    GstCaps * outcaps)
+{
+  GstVideoConvert *space;
+  GstVideoInfo in_info;
+  GstVideoInfo out_info;
+  ColorSpaceColorSpec in_spec, out_spec;
+  gboolean interlaced;
+
+  space = GST_VIDEO_CONVERT_CAST (btrans);
+
+  if (space->convert) {
+    videoconvert_convert_free (space->convert);
+  }
+
+  /* input caps */
+  if (!gst_video_info_from_caps (&in_info, incaps))
+    goto invalid_caps;
+
+  if (in_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_RGB) {
+    in_spec = COLOR_SPEC_RGB;
+  } else if (in_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_YUV) {
+    if (in_info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT709)
+      in_spec = COLOR_SPEC_YUV_BT709;
+    else
+      in_spec = COLOR_SPEC_YUV_BT470_6;
+  } else {
+    in_spec = COLOR_SPEC_GRAY;
+  }
+
+  /* output caps */
+  if (!gst_video_info_from_caps (&out_info, outcaps))
+    goto invalid_caps;
+
+  if (out_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_RGB) {
+    out_spec = COLOR_SPEC_RGB;
+  } else if (out_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_YUV) {
+    if (out_info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT709)
+      out_spec = COLOR_SPEC_YUV_BT709;
+    else
+      out_spec = COLOR_SPEC_YUV_BT470_6;
+  } else {
+    out_spec = COLOR_SPEC_GRAY;
+  }
+
+  /* these must match */
+  if (in_info.width != out_info.width || in_info.height != out_info.height ||
+      in_info.fps_n != out_info.fps_n || in_info.fps_d != out_info.fps_d)
+    goto format_mismatch;
+
+  /* if present, these must match too */
+  if (in_info.par_n != out_info.par_n || in_info.par_d != out_info.par_d)
+    goto format_mismatch;
+
+  /* if present, these must match too */
+  if ((in_info.flags & GST_VIDEO_FLAG_INTERLACED) !=
+      (out_info.flags & GST_VIDEO_FLAG_INTERLACED))
+    goto format_mismatch;
+
+  space->from_info = in_info;
+  space->from_spec = in_spec;
+  space->to_info = out_info;
+  space->to_spec = out_spec;
+
+  interlaced = (in_info.flags & GST_VIDEO_FLAG_INTERLACED) != 0;
+
+  space->convert =
+      videoconvert_convert_new (GST_VIDEO_INFO_FORMAT (&out_info), out_spec,
+      GST_VIDEO_INFO_FORMAT (&in_info), in_spec, in_info.width, in_info.height);
+  if (space->convert == NULL)
+    goto no_convert;
+
+  videoconvert_convert_set_interlaced (space->convert, interlaced);
+
+  /* palette, only for from data */
+  if (GST_VIDEO_INFO_FORMAT (&space->from_info) ==
+      GST_VIDEO_FORMAT_RGB8_PALETTED
+      && GST_VIDEO_INFO_FORMAT (&space->to_info) ==
+      GST_VIDEO_FORMAT_RGB8_PALETTED) {
+    goto format_mismatch;
+  } else if (GST_VIDEO_INFO_FORMAT (&space->from_info) ==
+      GST_VIDEO_FORMAT_RGB8_PALETTED) {
+    GstBuffer *palette;
+    guint32 *data;
+
+    palette = gst_video_parse_caps_palette (incaps);
+
+    if (!palette || gst_buffer_get_size (palette) < 256 * 4) {
+      if (palette)
+        gst_buffer_unref (palette);
+      goto invalid_palette;
+    }
+
+    data = gst_buffer_map (palette, NULL, NULL, GST_MAP_READ);
+    videoconvert_convert_set_palette (space->convert, data);
+    gst_buffer_unmap (palette, data, -1);
+
+    gst_buffer_unref (palette);
+  } else if (GST_VIDEO_INFO_FORMAT (&space->to_info) ==
+      GST_VIDEO_FORMAT_RGB8_PALETTED) {
+    const guint32 *palette;
+    GstBuffer *p_buf;
+
+    palette = videoconvert_convert_get_palette (space->convert);
+
+    p_buf = gst_buffer_new_and_alloc (256 * 4);
+    gst_buffer_fill (p_buf, 0, palette, 256 * 4);
+    gst_caps_set_simple (outcaps, "palette_data", GST_TYPE_BUFFER, p_buf, NULL);
+    gst_buffer_unref (p_buf);
+  }
+
+  GST_DEBUG ("reconfigured %d %d", GST_VIDEO_INFO_FORMAT (&space->from_info),
+      GST_VIDEO_INFO_FORMAT (&space->to_info));
+
+  space->negotiated = TRUE;
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_caps:
+  {
+    GST_ERROR_OBJECT (space, "invalid caps");
+    goto error_done;
+  }
+format_mismatch:
+  {
+    GST_ERROR_OBJECT (space, "input and output formats do not match");
+    goto error_done;
+  }
+no_convert:
+  {
+    GST_ERROR_OBJECT (space, "could not create converter");
+    goto error_done;
+  }
+invalid_palette:
+  {
+    GST_ERROR_OBJECT (space, "invalid palette");
+    goto error_done;
+  }
+error_done:
+  {
+    space->negotiated = FALSE;
+    return FALSE;
+  }
+}
+
+#define gst_video_convert_parent_class parent_class
+G_DEFINE_TYPE (GstVideoConvert, gst_video_convert, GST_TYPE_VIDEO_FILTER);
+
+static void
+gst_video_convert_finalize (GObject * obj)
+{
+  GstVideoConvert *space = GST_VIDEO_CONVERT (obj);
+
+  if (space->convert) {
+    videoconvert_convert_free (space->convert);
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_video_convert_class_init (GstVideoConvertClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+  GstBaseTransformClass *gstbasetransform_class =
+      (GstBaseTransformClass *) klass;
+
+  gobject_class->set_property = gst_video_convert_set_property;
+  gobject_class->get_property = gst_video_convert_get_property;
+  gobject_class->finalize = gst_video_convert_finalize;
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_video_convert_src_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_video_convert_sink_template));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      " Colorspace converter", "Filter/Converter/Video",
+      "Converts video from one colorspace to another",
+      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
+  gstbasetransform_class->transform_caps =
+      GST_DEBUG_FUNCPTR (gst_video_convert_transform_caps);
+  gstbasetransform_class->set_caps =
+      GST_DEBUG_FUNCPTR (gst_video_convert_set_caps);
+  gstbasetransform_class->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_video_convert_get_unit_size);
+  gstbasetransform_class->decide_allocation =
+      GST_DEBUG_FUNCPTR (gst_video_convert_decide_allocation);
+  gstbasetransform_class->transform =
+      GST_DEBUG_FUNCPTR (gst_video_convert_transform);
+
+  gstbasetransform_class->passthrough_on_same_caps = TRUE;
+
+  g_object_class_install_property (gobject_class, PROP_DITHER,
+      g_param_spec_enum ("dither", "Dither", "Apply dithering while converting",
+          dither_method_get_type (), DITHER_NONE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_video_convert_init (GstVideoConvert * space)
+{
+  space->negotiated = FALSE;
+}
+
+void
+gst_video_convert_set_property (GObject * object, guint property_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVideoConvert *csp;
+
+  csp = GST_VIDEO_CONVERT (object);
+
+  switch (property_id) {
+    case PROP_DITHER:
+      csp->dither = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+  }
+}
+
+void
+gst_video_convert_get_property (GObject * object, guint property_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstVideoConvert *csp;
+
+  csp = GST_VIDEO_CONVERT (object);
+
+  switch (property_id) {
+    case PROP_DITHER:
+      g_value_set_enum (value, csp->dither);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_video_convert_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
+    gsize * size)
+{
+  gboolean ret = TRUE;
+  GstVideoInfo info;
+
+  g_assert (size);
+
+  ret = gst_video_info_from_caps (&info, caps);
+  if (ret) {
+    *size = info.size;
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_video_convert_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
+    GstBuffer * outbuf)
+{
+  GstVideoConvert *space;
+  GstVideoFrame in_frame, out_frame;
+
+  space = GST_VIDEO_CONVERT_CAST (btrans);
+
+  GST_DEBUG ("from %s -> to %s", GST_VIDEO_INFO_NAME (&space->from_info),
+      GST_VIDEO_INFO_NAME (&space->to_info));
+
+  if (G_UNLIKELY (!space->negotiated))
+    goto unknown_format;
+
+  videoconvert_convert_set_dither (space->convert, space->dither);
+
+  if (!gst_video_frame_map (&in_frame, &space->from_info, inbuf, GST_MAP_READ))
+    goto invalid_buffer;
+
+  if (!gst_video_frame_map (&out_frame, &space->to_info, outbuf, GST_MAP_WRITE))
+    goto invalid_buffer;
+
+  videoconvert_convert_convert (space->convert, &out_frame, &in_frame);
+
+  gst_video_frame_unmap (&out_frame);
+  gst_video_frame_unmap (&in_frame);
+
+  /* baseclass copies timestamps */
+  GST_DEBUG ("from %s -> to %s done", GST_VIDEO_INFO_NAME (&space->from_info),
+      GST_VIDEO_INFO_NAME (&space->to_info));
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+unknown_format:
+  {
+    GST_ELEMENT_ERROR (space, CORE, NOT_IMPLEMENTED, (NULL),
+        ("attempting to convert colorspaces between unknown formats"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+invalid_buffer:
+  {
+    GST_ELEMENT_WARNING (space, CORE, NOT_IMPLEMENTED, (NULL),
+        ("invalid video buffer received"));
+    return GST_FLOW_OK;
+  }
+#if 0
+not_supported:
+  {
+    GST_ELEMENT_ERROR (space, CORE, NOT_IMPLEMENTED, (NULL),
+        ("cannot convert between formats"));
+    return GST_FLOW_NOT_SUPPORTED;
+  }
+#endif
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (videoconvert_debug, "videoconvert", 0,
+      "Colorspace Converter");
+  GST_DEBUG_CATEGORY_GET (videoconvert_performance, "GST_PERFORMANCE");
+
+  return gst_element_register (plugin, "videoconvert",
+      GST_RANK_NONE, GST_TYPE_VIDEO_CONVERT);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "videoconvert", "Colorspace conversion", plugin_init, VERSION, "LGPL", "",
+    "")
diff --git a/gst/videoconvert/gstvideoconvert.h b/gst/videoconvert/gstvideoconvert.h
new file mode 100644
index 0000000..abd8270
--- /dev/null
+++ b/gst/videoconvert/gstvideoconvert.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * This file:
+ * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEOCONVERT_H__
+#define __GST_VIDEOCONVERT_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
+#include "videoconvert.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_CONVERT	          (gst_video_convert_get_type())
+#define GST_VIDEO_CONVERT(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_CONVERT,GstVideoConvert))
+#define GST_VIDEO_CONVERT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_CONVERT,GstVideoConvertClass))
+#define GST_IS_VIDEO_CONVERT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_CONVERT))
+#define GST_IS_VIDEO_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_CONVERT))
+#define GST_VIDEO_CONVERT_CAST(obj)       ((GstVideoConvert *)(obj))
+
+typedef struct _GstVideoConvert GstVideoConvert;
+typedef struct _GstVideoConvertClass GstVideoConvertClass;
+
+/**
+ * GstVideoConvert:
+ *
+ * Opaque object data structure.
+ */
+struct _GstVideoConvert {
+  GstVideoFilter element;
+
+  GstVideoInfo from_info;
+  GstVideoInfo to_info;
+  gboolean negotiated;
+
+  ColorSpaceColorSpec from_spec;
+  ColorSpaceColorSpec to_spec;
+
+  VideoConvert *convert;
+  gboolean dither;
+};
+
+struct _GstVideoConvertClass
+{
+  GstVideoFilterClass parent_class;
+};
+
+G_END_DECLS
+
+#endif /* __GST_VIDEOCONVERT_H__ */
diff --git a/gst/videoconvert/gstvideoconvertorc-dist.c b/gst/videoconvert/gstvideoconvertorc-dist.c
new file mode 100644
index 0000000..6645465
--- /dev/null
+++ b/gst/videoconvert/gstvideoconvertorc-dist.c
@@ -0,0 +1,19395 @@
+
+/* autogenerated from gstvideoconvertorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
+void orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int p2, int n);
+void orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int p2, int n);
+void orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int p4, int n);
+void orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int n);
+void orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n);
+void orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n);
+void orc_pack_123x (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n);
+void orc_pack_x123 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n);
+void cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int p2, int n);
+void cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
+    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m);
+void cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m);
+void cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
+    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const guint8 * ORC_RESTRICT s5, int n);
+void cogorc_getline_I420 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_getline_A420 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, int n);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* cogorc_memcpy_2d */
+#ifdef DISABLE_ORC
+void
+cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+void
+cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_memcpy_2d");
+      orc_program_set_backup_function (p, _backup_cogorc_memcpy_2d);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_horiz_cosite_1tap */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[0];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[0];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_horiz_cosite_1tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_downsample_horiz_cosite_1tap);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_horiz_cosite_3tap */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+  /* 9: loadpw */
+  var40.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+  /* 13: loadpw */
+  var41.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var38 = ptr4[i];
+    /* 1: copyw */
+    var43.i = var38.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var44 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var45 = _src.x2[1];
+    }
+    /* 4: loadw */
+    var39 = ptr5[i];
+    /* 5: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var39.i;
+      var46 = _src.x2[0];
+    }
+    /* 6: convubw */
+    var47.i = (orc_uint8) var44;
+    /* 7: convubw */
+    var48.i = (orc_uint8) var45;
+    /* 8: convubw */
+    var49.i = (orc_uint8) var46;
+    /* 10: mullw */
+    var50.i = (var48.i * var40.i) & 0xffff;
+    /* 11: addw */
+    var51.i = var47.i + var49.i;
+    /* 12: addw */
+    var52.i = var51.i + var50.i;
+    /* 14: addw */
+    var53.i = var52.i + var41.i;
+    /* 15: shrsw */
+    var54.i = var53.i >> 2;
+    /* 16: convsuswb */
+    var42 = ORC_CLAMP_UB (var54.i);
+    /* 17: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_horiz_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+  /* 9: loadpw */
+  var40.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+  /* 13: loadpw */
+  var41.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var38 = ptr4[i];
+    /* 1: copyw */
+    var43.i = var38.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var44 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var45 = _src.x2[1];
+    }
+    /* 4: loadw */
+    var39 = ptr5[i];
+    /* 5: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var39.i;
+      var46 = _src.x2[0];
+    }
+    /* 6: convubw */
+    var47.i = (orc_uint8) var44;
+    /* 7: convubw */
+    var48.i = (orc_uint8) var45;
+    /* 8: convubw */
+    var49.i = (orc_uint8) var46;
+    /* 10: mullw */
+    var50.i = (var48.i * var40.i) & 0xffff;
+    /* 11: addw */
+    var51.i = var47.i + var49.i;
+    /* 12: addw */
+    var52.i = var51.i + var50.i;
+    /* 14: addw */
+    var53.i = var52.i + var41.i;
+    /* 15: shrsw */
+    var54.i = var53.i >> 2;
+    /* 16: convsuswb */
+    var42 = ORC_CLAMP_UB (var54.i);
+    /* 17: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_horiz_cosite_3tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_downsample_horiz_cosite_3tap);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_constant (p, 4, 0x00000002, "c1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+
+      orc_program_append_2 (p, "copyw", 0, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_420_jpeg */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var40.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.i;
+      var41 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.i;
+      var42 = _src.x2[1];
+    }
+    /* 4: avgub */
+    var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
+    /* 5: loadw */
+    var38 = ptr5[i];
+    /* 6: copyw */
+    var44.i = var38.i;
+    /* 7: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var45 = _src.x2[0];
+    }
+    /* 8: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var46 = _src.x2[1];
+    }
+    /* 9: avgub */
+    var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
+    /* 10: avgub */
+    var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
+    /* 11: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_420_jpeg (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var40.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.i;
+      var41 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.i;
+      var42 = _src.x2[1];
+    }
+    /* 4: avgub */
+    var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
+    /* 5: loadw */
+    var38 = ptr5[i];
+    /* 6: copyw */
+    var44.i = var38.i;
+    /* 7: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var45 = _src.x2[0];
+    }
+    /* 8: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var46 = _src.x2[1];
+    }
+    /* 9: avgub */
+    var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
+    /* 10: avgub */
+    var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
+    /* 11: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_420_jpeg");
+      orc_program_set_backup_function (p, _backup_cogorc_downsample_420_jpeg);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+
+      orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T4, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_vert_halfsite_2tap */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr5[i];
+    /* 2: avgub */
+    var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_vert_halfsite_2tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr5[i];
+    /* 2: avgub */
+    var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_vert_halfsite_2tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_downsample_vert_halfsite_2tap);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_vert_cosite_3tap */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 6: loadpw */
+  var38.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+  /* 10: loadpw */
+  var39.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var35;
+    /* 2: loadb */
+    var36 = ptr5[i];
+    /* 3: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 4: loadb */
+    var37 = ptr6[i];
+    /* 5: convubw */
+    var43.i = (orc_uint8) var37;
+    /* 7: mullw */
+    var44.i = (var42.i * var38.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var41.i + var43.i;
+    /* 9: addw */
+    var46.i = var45.i + var44.i;
+    /* 11: addw */
+    var47.i = var46.i + var39.i;
+    /* 12: shrsw */
+    var48.i = var47.i >> 2;
+    /* 13: convsuswb */
+    var40 = ORC_CLAMP_UB (var48.i);
+    /* 14: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_vert_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 6: loadpw */
+  var38.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+  /* 10: loadpw */
+  var39.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var35;
+    /* 2: loadb */
+    var36 = ptr5[i];
+    /* 3: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 4: loadb */
+    var37 = ptr6[i];
+    /* 5: convubw */
+    var43.i = (orc_uint8) var37;
+    /* 7: mullw */
+    var44.i = (var42.i * var38.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var41.i + var43.i;
+    /* 9: addw */
+    var46.i = var45.i + var44.i;
+    /* 11: addw */
+    var47.i = var46.i + var39.i;
+    /* 12: shrsw */
+    var48.i = var47.i >> 2;
+    /* 13: convsuswb */
+    var40 = ORC_CLAMP_UB (var48.i);
+    /* 14: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_vert_cosite_3tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_downsample_vert_cosite_3tap);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 4, 0x00000002, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_downsample_vert_halfsite_4tap */
+#ifdef DISABLE_ORC
+void
+cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 9: loadpw */
+  var40.i = (int) 0x0000001a;   /* 26 or 1.28457e-322f */
+  /* 12: loadpw */
+  var41.i = (int) 0x00000006;   /* 6 or 2.96439e-323f */
+  /* 15: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 2: loadb */
+    var37 = ptr5[i];
+    /* 3: convubw */
+    var45.i = (orc_uint8) var37;
+    /* 4: loadb */
+    var38 = ptr6[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var38;
+    /* 6: loadb */
+    var39 = ptr7[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 8: addw */
+    var48.i = var45.i + var46.i;
+    /* 10: mullw */
+    var49.i = (var48.i * var40.i) & 0xffff;
+    /* 11: addw */
+    var50.i = var44.i + var47.i;
+    /* 13: mullw */
+    var51.i = (var50.i * var41.i) & 0xffff;
+    /* 14: addw */
+    var52.i = var49.i + var51.i;
+    /* 16: addw */
+    var53.i = var52.i + var42.i;
+    /* 17: shrsw */
+    var54.i = var53.i >> 6;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var54.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_downsample_vert_halfsite_4tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 9: loadpw */
+  var40.i = (int) 0x0000001a;   /* 26 or 1.28457e-322f */
+  /* 12: loadpw */
+  var41.i = (int) 0x00000006;   /* 6 or 2.96439e-323f */
+  /* 15: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 2: loadb */
+    var37 = ptr5[i];
+    /* 3: convubw */
+    var45.i = (orc_uint8) var37;
+    /* 4: loadb */
+    var38 = ptr6[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var38;
+    /* 6: loadb */
+    var39 = ptr7[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 8: addw */
+    var48.i = var45.i + var46.i;
+    /* 10: mullw */
+    var49.i = (var48.i * var40.i) & 0xffff;
+    /* 11: addw */
+    var50.i = var44.i + var47.i;
+    /* 13: mullw */
+    var51.i = (var50.i * var41.i) & 0xffff;
+    /* 14: addw */
+    var52.i = var49.i + var51.i;
+    /* 16: addw */
+    var53.i = var52.i + var42.i;
+    /* 17: shrsw */
+    var54.i = var53.i >> 6;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var54.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_downsample_vert_halfsite_4tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_downsample_vert_halfsite_4tap);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_constant (p, 4, 0x0000001a, "c1");
+      orc_program_add_constant (p, 4, 0x00000006, "c2");
+      orc_program_add_constant (p, 4, 0x00000020, "c3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_upsample_horiz_cosite_1tap */
+#ifdef DISABLE_ORC
+void
+cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: copyb */
+    var35 = var33;
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35;
+      _dest.x2[1] = var35;
+      var34.i = _dest.i;
+    }
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_upsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: copyb */
+    var35 = var33;
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35;
+      _dest.x2[1] = var35;
+      var34.i = _dest.i;
+    }
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_upsample_horiz_cosite_1tap");
+      orc_program_set_backup_function (p,
+          _backup_cogorc_upsample_horiz_cosite_1tap);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_upsample_horiz_cosite */
+#ifdef DISABLE_ORC
+void
+cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: copyb */
+    var37 = var34;
+    /* 2: loadb */
+    var35 = ptr5[i];
+    /* 3: avgub */
+    var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37;
+      _dest.x2[1] = var38;
+      var36.i = _dest.i;
+    }
+    /* 5: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_upsample_horiz_cosite (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: copyb */
+    var37 = var34;
+    /* 2: loadb */
+    var35 = ptr5[i];
+    /* 3: avgub */
+    var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37;
+      _dest.x2[1] = var38;
+      var36.i = _dest.i;
+    }
+    /* 5: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_upsample_horiz_cosite");
+      orc_program_set_backup_function (p, _backup_cogorc_upsample_horiz_cosite);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_upsample_vert_avgub */
+#ifdef DISABLE_ORC
+void
+cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr5[i];
+    /* 2: avgub */
+    var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_upsample_vert_avgub (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr5[i];
+    /* 2: avgub */
+    var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_upsample_vert_avgub");
+      orc_program_set_backup_function (p, _backup_cogorc_upsample_vert_avgub);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_yuyv_y */
+#ifdef DISABLE_ORC
+void
+orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[0];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_yuyv_y (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[0];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_yuyv_y");
+      orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_y);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_yuyv_u */
+#ifdef DISABLE_ORC
+void
+orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_yuyv_u (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_yuyv_u");
+      orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_u);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_yuyv_v */
+#ifdef DISABLE_ORC
+void
+orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[1];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_yuyv_v (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[1];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_yuyv_v");
+      orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_v);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_pack_yuyv */
+#ifdef DISABLE_ORC
+void
+orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var41.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var42 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var43 = _src.x2[1];
+    }
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var42;
+      _dest.x2[1] = var38;
+      var44.i = _dest.i;
+    }
+    /* 6: loadb */
+    var39 = ptr6[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43;
+      _dest.x2[1] = var39;
+      var45.i = _dest.i;
+    }
+    /* 8: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var45.i;
+      var40.i = _dest.i;
+    }
+    /* 9: storel */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_orc_pack_yuyv (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var41.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var42 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var43 = _src.x2[1];
+    }
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var42;
+      _dest.x2[1] = var38;
+      var44.i = _dest.i;
+    }
+    /* 6: loadb */
+    var39 = ptr6[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43;
+      _dest.x2[1] = var39;
+      var45.i = _dest.i;
+    }
+    /* 8: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var45.i;
+      var40.i = _dest.i;
+    }
+    /* 9: storel */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_pack_yuyv");
+      orc_program_set_backup_function (p, _backup_orc_pack_yuyv);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+
+      orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_uyvy_y */
+#ifdef DISABLE_ORC
+void
+orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[1];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_uyvy_y (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var32.i;
+      var33 = _src.x2[1];
+    }
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_uyvy_y");
+      orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_y);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_uyvy_u */
+#ifdef DISABLE_ORC
+void
+orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_uyvy_u (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_uyvy_u");
+      orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_u);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_unpack_uyvy_v */
+#ifdef DISABLE_ORC
+void
+orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[1];
+    }
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_unpack_uyvy_v (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[1];
+    }
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_unpack_uyvy_v");
+      orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_v);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_pack_uyvy */
+#ifdef DISABLE_ORC
+void
+orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var41.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var42 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var43 = _src.x2[1];
+    }
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38;
+      _dest.x2[1] = var42;
+      var44.i = _dest.i;
+    }
+    /* 6: loadb */
+    var39 = ptr6[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var43;
+      var45.i = _dest.i;
+    }
+    /* 8: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var45.i;
+      var40.i = _dest.i;
+    }
+    /* 9: storel */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_orc_pack_uyvy (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var37 = ptr4[i];
+    /* 1: copyw */
+    var41.i = var37.i;
+    /* 2: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var42 = _src.x2[0];
+    }
+    /* 3: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.i;
+      var43 = _src.x2[1];
+    }
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38;
+      _dest.x2[1] = var42;
+      var44.i = _dest.i;
+    }
+    /* 6: loadb */
+    var39 = ptr6[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var43;
+      var45.i = _dest.i;
+    }
+    /* 8: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var45.i;
+      var40.i = _dest.i;
+    }
+    /* 9: storel */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_pack_uyvy");
+      orc_program_set_backup_function (p, _backup_orc_pack_uyvy);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+
+      orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_S3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix2_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 9: loadpw */
+  var38.i = p3;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var40.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var41.i = (var40.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var43.i = (var42.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var44.i = var41.i + var43.i;
+    /* 10: addw */
+    var45.i = var44.i + var38.i;
+    /* 11: shrsw */
+    var46.i = var45.i >> 6;
+    /* 12: convsuswb */
+    var39 = ORC_CLAMP_UB (var46.i);
+    /* 13: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix2_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 9: loadpw */
+  var38.i = ex->params[26];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var40.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var41.i = (var40.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var43.i = (var42.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var44.i = var41.i + var43.i;
+    /* 10: addw */
+    var45.i = var44.i + var38.i;
+    /* 11: shrsw */
+    var46.i = var45.i >> 6;
+    /* 12: convsuswb */
+    var39 = ORC_CLAMP_UB (var46.i);
+    /* 13: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix2_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix2_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 4, 0x00000006, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix2_11_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 2: loadpw */
+  var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var38.i = p1;
+  /* 8: loadpw */
+  var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var41.i = p2;
+  /* 13: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 3: subw */
+    var45.i = var44.i - var37.i;
+    /* 5: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 6: loadb */
+    var39 = ptr5[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 9: subw */
+    var48.i = var47.i - var40.i;
+    /* 11: mullw */
+    var49.i = (var48.i * var41.i) & 0xffff;
+    /* 12: addw */
+    var50.i = var46.i + var49.i;
+    /* 14: addw */
+    var51.i = var50.i + var42.i;
+    /* 15: shrsw */
+    var52.i = var51.i >> 8;
+    /* 16: addw */
+    var53.i = var52.i + var45.i;
+    /* 17: addw */
+    var54.i = var53.i + var48.i;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var54.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix2_11_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 2: loadpw */
+  var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var38.i = ex->params[24];
+  /* 8: loadpw */
+  var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var41.i = ex->params[25];
+  /* 13: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 3: subw */
+    var45.i = var44.i - var37.i;
+    /* 5: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 6: loadb */
+    var39 = ptr5[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 9: subw */
+    var48.i = var47.i - var40.i;
+    /* 11: mullw */
+    var49.i = (var48.i * var41.i) & 0xffff;
+    /* 12: addw */
+    var50.i = var46.i + var49.i;
+    /* 14: addw */
+    var51.i = var50.i + var42.i;
+    /* 15: shrsw */
+    var52.i = var51.i >> 8;
+    /* 16: addw */
+    var53.i = var52.i + var45.i;
+    /* 17: addw */
+    var54.i = var53.i + var48.i;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var54.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix2_11_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix2_11_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 4, 0x00000010, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x00000008, "c3");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix2_12_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 2: loadpw */
+  var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var38.i = p1;
+  /* 8: loadpw */
+  var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var41.i = p2;
+  /* 13: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 3: subw */
+    var45.i = var44.i - var37.i;
+    /* 5: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 6: loadb */
+    var39 = ptr5[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 9: subw */
+    var48.i = var47.i - var40.i;
+    /* 11: mullw */
+    var49.i = (var48.i * var41.i) & 0xffff;
+    /* 12: addw */
+    var50.i = var46.i + var49.i;
+    /* 14: addw */
+    var51.i = var50.i + var42.i;
+    /* 15: shrsw */
+    var52.i = var51.i >> 8;
+    /* 16: addw */
+    var53.i = var52.i + var45.i;
+    /* 17: addw */
+    var54.i = var53.i + var48.i;
+    /* 18: addw */
+    var55.i = var54.i + var48.i;
+    /* 19: convsuswb */
+    var43 = ORC_CLAMP_UB (var55.i);
+    /* 20: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix2_12_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 2: loadpw */
+  var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var38.i = ex->params[24];
+  /* 8: loadpw */
+  var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var41.i = ex->params[25];
+  /* 13: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 3: subw */
+    var45.i = var44.i - var37.i;
+    /* 5: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 6: loadb */
+    var39 = ptr5[i];
+    /* 7: convubw */
+    var47.i = (orc_uint8) var39;
+    /* 9: subw */
+    var48.i = var47.i - var40.i;
+    /* 11: mullw */
+    var49.i = (var48.i * var41.i) & 0xffff;
+    /* 12: addw */
+    var50.i = var46.i + var49.i;
+    /* 14: addw */
+    var51.i = var50.i + var42.i;
+    /* 15: shrsw */
+    var52.i = var51.i >> 8;
+    /* 16: addw */
+    var53.i = var52.i + var45.i;
+    /* 17: addw */
+    var54.i = var53.i + var48.i;
+    /* 18: addw */
+    var55.i = var54.i + var48.i;
+    /* 19: convsuswb */
+    var43 = ORC_CLAMP_UB (var55.i);
+    /* 20: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix2_12_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix2_12_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 4, 0x00000010, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x00000008, "c3");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix3_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 14: loadpw */
+  var40.i = p4;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 15: addw */
+    var50.i = var49.i + var40.i;
+    /* 16: shrsw */
+    var51.i = var50.i >> 6;
+    /* 17: convsuswb */
+    var41 = ORC_CLAMP_UB (var51.i);
+    /* 18: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix3_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 14: loadpw */
+  var40.i = ex->params[27];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 15: addw */
+    var50.i = var49.i + var40.i;
+    /* 16: shrsw */
+    var51.i = var50.i >> 6;
+    /* 17: convsuswb */
+    var41 = ORC_CLAMP_UB (var51.i);
+    /* 18: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix3_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix3_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 4, 0x00000006, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix3_100_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_int8 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_union16 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 2: loadpw */
+  var36.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var37.i = p1;
+  /* 8: loadpw */
+  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var40.i = p2;
+  /* 15: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 17: loadpw */
+  var43.i = p3;
+  /* 20: loadpw */
+  var44.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var46.i = (orc_uint8) var35;
+    /* 3: subw */
+    var47.i = var46.i - var36.i;
+    /* 5: mullw */
+    var48.i = (var47.i * var37.i) & 0xffff;
+    /* 6: loadb */
+    var38 = ptr5[i];
+    /* 7: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 9: subw */
+    var50.i = var49.i - var39.i;
+    /* 11: mullw */
+    var51.i = (var50.i * var40.i) & 0xffff;
+    /* 12: addw */
+    var52.i = var48.i + var51.i;
+    /* 13: loadb */
+    var41 = ptr6[i];
+    /* 14: convubw */
+    var53.i = (orc_uint8) var41;
+    /* 16: subw */
+    var54.i = var53.i - var42.i;
+    /* 18: mullw */
+    var55.i = (var54.i * var43.i) & 0xffff;
+    /* 19: addw */
+    var56.i = var52.i + var55.i;
+    /* 21: addw */
+    var57.i = var56.i + var44.i;
+    /* 22: shrsw */
+    var58.i = var57.i >> 8;
+    /* 23: addw */
+    var59.i = var58.i + var47.i;
+    /* 24: convsuswb */
+    var45 = ORC_CLAMP_UB (var59.i);
+    /* 25: storeb */
+    ptr0[i] = var45;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix3_100_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_int8 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_union16 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 2: loadpw */
+  var36.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
+  /* 4: loadpw */
+  var37.i = ex->params[24];
+  /* 8: loadpw */
+  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var40.i = ex->params[25];
+  /* 15: loadpw */
+  var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+  /* 17: loadpw */
+  var43.i = ex->params[26];
+  /* 20: loadpw */
+  var44.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var46.i = (orc_uint8) var35;
+    /* 3: subw */
+    var47.i = var46.i - var36.i;
+    /* 5: mullw */
+    var48.i = (var47.i * var37.i) & 0xffff;
+    /* 6: loadb */
+    var38 = ptr5[i];
+    /* 7: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 9: subw */
+    var50.i = var49.i - var39.i;
+    /* 11: mullw */
+    var51.i = (var50.i * var40.i) & 0xffff;
+    /* 12: addw */
+    var52.i = var48.i + var51.i;
+    /* 13: loadb */
+    var41 = ptr6[i];
+    /* 14: convubw */
+    var53.i = (orc_uint8) var41;
+    /* 16: subw */
+    var54.i = var53.i - var42.i;
+    /* 18: mullw */
+    var55.i = (var54.i * var43.i) & 0xffff;
+    /* 19: addw */
+    var56.i = var52.i + var55.i;
+    /* 21: addw */
+    var57.i = var56.i + var44.i;
+    /* 22: shrsw */
+    var58.i = var57.i >> 8;
+    /* 23: addw */
+    var59.i = var58.i + var47.i;
+    /* 24: convsuswb */
+    var45 = ORC_CLAMP_UB (var59.i);
+    /* 25: storeb */
+    ptr0[i] = var45;
+  }
+
+}
+
+void
+orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix3_100_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix3_100_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 4, 0x00000010, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x00000008, "c3");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix3_100_offset_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 2: loadpw */
+  var36.i = p1;
+  /* 6: loadpw */
+  var38.i = p2;
+  /* 11: loadpw */
+  var40.i = p3;
+  /* 14: loadpw */
+  var41.i = p4;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var35;
+    /* 3: mullw */
+    var44.i = (var43.i * var36.i) & 0xffff;
+    /* 4: loadb */
+    var37 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var37;
+    /* 7: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var39 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var39;
+    /* 12: mullw */
+    var49.i = (var48.i * var40.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 15: addw */
+    var51.i = var50.i + var41.i;
+    /* 16: shrsw */
+    var52.i = var51.i >> p5;
+    /* 17: addw */
+    var53.i = var52.i + var43.i;
+    /* 18: convsuswb */
+    var42 = ORC_CLAMP_UB (var53.i);
+    /* 19: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix3_100_offset_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 2: loadpw */
+  var36.i = ex->params[24];
+  /* 6: loadpw */
+  var38.i = ex->params[25];
+  /* 11: loadpw */
+  var40.i = ex->params[26];
+  /* 14: loadpw */
+  var41.i = ex->params[27];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var35;
+    /* 3: mullw */
+    var44.i = (var43.i * var36.i) & 0xffff;
+    /* 4: loadb */
+    var37 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var37;
+    /* 7: mullw */
+    var46.i = (var45.i * var38.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var39 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var39;
+    /* 12: mullw */
+    var49.i = (var48.i * var40.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 15: addw */
+    var51.i = var50.i + var41.i;
+    /* 16: shrsw */
+    var52.i = var51.i >> ex->params[28];
+    /* 17: addw */
+    var53.i = var52.i + var43.i;
+    /* 18: convsuswb */
+    var42 = ORC_CLAMP_UB (var53.i);
+    /* 19: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix3_100_offset_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix3_100_offset_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_matrix3_000_u8 */
+#ifdef DISABLE_ORC
+void
+orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int p4, int p5, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 14: loadpw */
+  var40.i = p4;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 15: addw */
+    var50.i = var49.i + var40.i;
+    /* 16: shrsw */
+    var51.i = var50.i >> p5;
+    /* 17: convwb */
+    var41 = var51.i;
+    /* 18: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_orc_matrix3_000_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 14: loadpw */
+  var40.i = ex->params[27];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 15: addw */
+    var50.i = var49.i + var40.i;
+    /* 16: shrsw */
+    var51.i = var50.i >> ex->params[28];
+    /* 17: convwb */
+    var41 = var51.i;
+    /* 18: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int p2, int p3, int p4, int p5, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_matrix3_000_u8");
+      orc_program_set_backup_function (p, _backup_orc_matrix3_000_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_pack_123x */
+#ifdef DISABLE_ORC
+void
+orc_pack_123x (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 4: loadpb */
+  var37 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: loadb */
+    var35 = ptr5[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr6[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var40.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_orc_pack_123x (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 4: loadpb */
+  var37 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: loadb */
+    var35 = ptr5[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr6[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var40.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+orc_pack_123x (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_pack_123x");
+      orc_program_set_backup_function (p, _backup_orc_pack_123x);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_pack_x123 */
+#ifdef DISABLE_ORC
+void
+orc_pack_x123 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 0: loadpb */
+  var34 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadb */
+    var35 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr5[i];
+    /* 4: loadb */
+    var37 = ptr6[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var40.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_orc_pack_x123 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 0: loadpb */
+  var34 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadb */
+    var35 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr5[i];
+    /* 4: loadb */
+    var37 = ptr6[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var40.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+orc_pack_x123 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "orc_pack_x123");
+      orc_program_set_backup_function (p, _backup_orc_pack_x123);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_combine2_u8 */
+#ifdef DISABLE_ORC
+void
+cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var39.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var40.i = (var39.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var41.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var42.i = (var41.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var43.i = var40.i + var42.i;
+    /* 9: shruw */
+    var44.i = ((orc_uint16) var43.i) >> 8;
+    /* 10: convsuswb */
+    var38 = ORC_CLAMP_UB (var44.i);
+    /* 11: storeb */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_combine2_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var39.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var40.i = (var39.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var41.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var42.i = (var41.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var43.i = var40.i + var42.i;
+    /* 9: shruw */
+    var44.i = ((orc_uint16) var43.i) >> 8;
+    /* 10: convsuswb */
+    var38 = ORC_CLAMP_UB (var44.i);
+    /* 11: storeb */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_combine2_u8");
+      orc_program_set_backup_function (p, _backup_cogorc_combine2_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_I420_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var35.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var35.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var35.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var35.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+void
+cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_I420_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_I420_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_I420_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+void
+cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_I420_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_I420_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_I420_AYUV */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union32 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 8: loadpb */
+  var39 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var42 = ptr6[i >> 1];
+    /* 1: loadupdb */
+    var43 = ptr7[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var42;
+      _dest.x2[1] = var43;
+      var44.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var45.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var44.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+    /* 9: loadb */
+    var40 = ptr5[i];
+    /* 10: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var46.i = _dest.i;
+    }
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var44.i;
+      var41.i = _dest.i;
+    }
+    /* 12: storel */
+    ptr1[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union32 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 8: loadpb */
+  var39 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var42 = ptr6[i >> 1];
+    /* 1: loadupdb */
+    var43 = ptr7[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var42;
+      _dest.x2[1] = var43;
+      var44.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var45.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var44.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+    /* 9: loadb */
+    var40 = ptr5[i];
+    /* 10: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var46.i = _dest.i;
+    }
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var44.i;
+      var41.i = _dest.i;
+    }
+    /* 12: storel */
+    ptr1[i] = var41;
+  }
+
+}
+
+void
+cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_I420_AYUV");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_I420_AYUV);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_YUY2_I420 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr3 = (orc_int8 *) d4;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var40;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var42;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr3 = (orc_int8 *) ex->arrays[3];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var40;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var42;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+void
+cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_YUY2_I420");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_UYVY_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var32 = ptr4[i];
+      /* 1: swapw */
+      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
+      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
+      /* 2: storel */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var32 = ptr4[i];
+      /* 1: swapw */
+      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
+      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
+      /* 2: storel */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+void
+cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_UYVY_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+
+      orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_420_422 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+      /* 3: loadb */
+      var34 = ptr4[i];
+      /* 4: copyb */
+      var35 = var34;
+      /* 5: storeb */
+      ptr1[i] = var35;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+      /* 3: loadb */
+      var34 = ptr4[i];
+      /* 4: copyb */
+      var35 = var34;
+      /* 5: storeb */
+      ptr1[i] = var35;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_420_422");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_422);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_420_444 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: storew */
+      ptr1[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: storew */
+      ptr1[i] = var34;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_420_444");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_422_444 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_422_444");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_444_422 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var34.i;
+        var36 = _src.x2[1];
+        var37 = _src.x2[0];
+      }
+      /* 2: avgub */
+      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var35;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var34.i;
+        var36 = _src.x2[1];
+        var37 = _src.x2[0];
+      }
+      /* 2: avgub */
+      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var35;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_444_422");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_422);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_444_420 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var35 = ptr4[i];
+      /* 1: loadw */
+      var36 = ptr5[i];
+      /* 2: avgub */
+      var38.x2[0] =
+          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
+      var38.x2[1] =
+          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var39 = _src.x2[1];
+        var40 = _src.x2[0];
+      }
+      /* 4: avgub */
+      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
+      /* 5: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var35 = ptr4[i];
+      /* 1: loadw */
+      var36 = ptr5[i];
+      /* 2: avgub */
+      var38.x2[0] =
+          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
+      var38.x2[1] =
+          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var39 = _src.x2[1];
+        var40 = _src.x2[0];
+      }
+      /* 4: avgub */
+      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
+      /* 5: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_444_420");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_420);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_planar_chroma_422_420 */
+#ifdef DISABLE_ORC
+void
+cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: loadb */
+      var33 = ptr5[i];
+      /* 2: avgub */
+      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: loadb */
+      var33 = ptr5[i];
+      /* 2: avgub */
+      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+void
+cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_planar_chroma_422_420");
+      orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_420);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_YUY2_AYUV */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var40.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var40.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var39.i;
+        _dest.x2[1] = var39.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var40.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var40.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var39.i;
+        _dest.x2[1] = var39.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_YUY2_AYUV");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 2, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_UYVY_AYUV */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var40.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var40.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_UYVY_AYUV");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 2, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_YUY2_Y42B */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var37.x2[0] = _src.x2[1];
+        var34.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var37.x2[1] = _src.x2[1];
+        var34.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var37.x2[0] = _src.x2[1];
+        var34.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var37.x2[1] = _src.x2[1];
+        var34.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+void
+cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_YUY2_Y42B");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_UYVY_Y42B */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var34.x2[0] = _src.x2[1];
+        var37.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var34.x2[1] = _src.x2[1];
+        var37.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var34.x2[0] = _src.x2[1];
+        var37.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var34.x2[1] = _src.x2[1];
+        var37.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+void
+cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_UYVY_Y42B");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_YUY2_Y444 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var36.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var36.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var36.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var36.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_YUY2_Y444");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 2, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_UYVY_Y444 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var36.x2[0] = _src.x2[1];
+        var39.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var36.x2[1] = _src.x2[1];
+        var39.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var36.x2[0] = _src.x2[1];
+        var39.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var36.x2[1] = _src.x2[1];
+        var39.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_UYVY_Y444");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 2, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_UYVY_I420 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr3 = (orc_int8 *) d4;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var39;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var41;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr3 = (orc_int8 *) ex->arrays[3];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var39;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var41;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+void
+cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_UYVY_I420");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_I420 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union64 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var40 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[0];
+        var46.x2[0] = _src.x2[1];
+        var47.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[1];
+        var46.x2[1] = _src.x2[1];
+        var47.x2[1] = _src.x2[0];
+      }
+      /* 2: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[0];
+        var41.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[1];
+        var41.x2[1] = _src.x2[1];
+      }
+      /* 3: storew */
+      ptr0[i] = var41;
+      /* 4: loadq */
+      var42 = ptr5[i];
+      /* 5: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[0];
+        var48.x2[0] = _src.x2[1];
+        var49.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[1];
+        var48.x2[1] = _src.x2[1];
+        var49.x2[1] = _src.x2[0];
+      }
+      /* 6: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[0];
+        var43.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[1];
+        var43.x2[1] = _src.x2[1];
+      }
+      /* 7: storew */
+      ptr1[i] = var43;
+      /* 8: avgub */
+      var50.x4[0] =
+          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
+      var50.x4[1] =
+          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
+      var50.x4[2] =
+          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
+      var50.x4[3] =
+          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
+      /* 9: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[0];
+        var51.x2[0] = _src.x2[1];
+        var52.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[1];
+        var51.x2[1] = _src.x2[1];
+        var52.x2[1] = _src.x2[0];
+      }
+      /* 10: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var52.i;
+        var53 = _src.x2[1];
+        var54 = _src.x2[0];
+      }
+      /* 11: avgub */
+      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
+      /* 12: storeb */
+      ptr2[i] = var44;
+      /* 13: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var51.i;
+        var55 = _src.x2[1];
+        var56 = _src.x2[0];
+      }
+      /* 14: avgub */
+      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
+      /* 15: storeb */
+      ptr3[i] = var45;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union64 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var40 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[0];
+        var46.x2[0] = _src.x2[1];
+        var47.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[1];
+        var46.x2[1] = _src.x2[1];
+        var47.x2[1] = _src.x2[0];
+      }
+      /* 2: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[0];
+        var41.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[1];
+        var41.x2[1] = _src.x2[1];
+      }
+      /* 3: storew */
+      ptr0[i] = var41;
+      /* 4: loadq */
+      var42 = ptr5[i];
+      /* 5: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[0];
+        var48.x2[0] = _src.x2[1];
+        var49.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[1];
+        var48.x2[1] = _src.x2[1];
+        var49.x2[1] = _src.x2[0];
+      }
+      /* 6: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[0];
+        var43.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[1];
+        var43.x2[1] = _src.x2[1];
+      }
+      /* 7: storew */
+      ptr1[i] = var43;
+      /* 8: avgub */
+      var50.x4[0] =
+          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
+      var50.x4[1] =
+          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
+      var50.x4[2] =
+          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
+      var50.x4[3] =
+          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
+      /* 9: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[0];
+        var51.x2[0] = _src.x2[1];
+        var52.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[1];
+        var51.x2[1] = _src.x2[1];
+        var52.x2[1] = _src.x2[0];
+      }
+      /* 10: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var52.i;
+        var53 = _src.x2[1];
+        var54 = _src.x2[0];
+      }
+      /* 11: avgub */
+      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
+      /* 12: storeb */
+      ptr2[i] = var44;
+      /* 13: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var51.i;
+        var55 = _src.x2[1];
+        var56 = _src.x2[0];
+      }
+      /* 14: avgub */
+      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
+      /* 15: storeb */
+      ptr3[i] = var45;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_I420");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_source (p, 8, "s2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 1, "t7");
+      orc_program_add_temporary (p, 1, "t8");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->params[ORC_VAR_D4] = d4_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var44.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var44.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var44.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var44.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_Y42B */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var36 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[0];
+        var40.x2[0] = _src.x2[1];
+        var41.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[1];
+        var40.x2[1] = _src.x2[1];
+        var41.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var42.i = _src.x2[1];
+        var43.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var44.x2[0] =
+          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+      var44.x2[1] =
+          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var44.i;
+        var37 = _src.x2[1];
+        var38 = _src.x2[0];
+      }
+      /* 5: storeb */
+      ptr2[i] = var37;
+      /* 6: storeb */
+      ptr1[i] = var38;
+      /* 7: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[0];
+        var39.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[1];
+        var39.x2[1] = _src.x2[1];
+      }
+      /* 8: storew */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var36 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[0];
+        var40.x2[0] = _src.x2[1];
+        var41.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[1];
+        var40.x2[1] = _src.x2[1];
+        var41.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var42.i = _src.x2[1];
+        var43.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var44.x2[0] =
+          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+      var44.x2[1] =
+          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var44.i;
+        var37 = _src.x2[1];
+        var38 = _src.x2[0];
+      }
+      /* 5: storeb */
+      ptr2[i] = var37;
+      /* 6: storeb */
+      ptr1[i] = var38;
+      /* 7: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[0];
+        var39.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[1];
+        var39.x2[1] = _src.x2[1];
+      }
+      /* 8: storew */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_Y42B");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_Y444 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var34 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var34.i;
+        var38.i = _src.x2[1];
+        var39.i = _src.x2[0];
+      }
+      /* 2: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 3: storeb */
+      ptr2[i] = var35;
+      /* 4: storeb */
+      ptr1[i] = var36;
+      /* 5: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var37 = _src.x2[1];
+      }
+      /* 6: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var34 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var34.i;
+        var38.i = _src.x2[1];
+        var39.i = _src.x2[0];
+      }
+      /* 2: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 3: storeb */
+      ptr2[i] = var35;
+      /* 4: storeb */
+      ptr1[i] = var36;
+      /* 5: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var37 = _src.x2[1];
+      }
+      /* 6: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_Y444");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y444);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y42B_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y42B_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y42B_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var35.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var35.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var35.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var35.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y42B_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y42B_AYUV */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+    /* 3: loadpb */
+    var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var36 = ptr5[i];
+      /* 1: loadb */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var41.i = _dest.i;
+      }
+      /* 4: loadw */
+      var39 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var42.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var42.x2[1] = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.i;
+        _dest.x2[1] = var41.i;
+        var43.i = _dest.i;
+      }
+      /* 7: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 8: storeq */
+      ptr0[i] = var40;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+    /* 3: loadpb */
+    var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+    var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var36 = ptr5[i];
+      /* 1: loadb */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var41.i = _dest.i;
+      }
+      /* 4: loadw */
+      var39 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var42.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var42.x2[1] = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.i;
+        _dest.x2[1] = var41.i;
+        var43.i = _dest.i;
+      }
+      /* 7: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 8: storeq */
+      ptr0[i] = var40;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y42B_AYUV");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y444_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y444_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y444_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var38.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var38.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var38.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var38.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y444_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_Y444_AYUV */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+    /* 3: loadpb */
+    var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr5[i];
+      /* 1: loadb */
+      var35 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var34;
+        _dest.x2[1] = var35;
+        var39.i = _dest.i;
+      }
+      /* 4: loadb */
+      var37 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var40.i = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var39.i;
+        var38.i = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+    /* 3: loadpb */
+    var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr5[i];
+      /* 1: loadb */
+      var35 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var34;
+        _dest.x2[1] = var35;
+        var39.i = _dest.i;
+      }
+      /* 4: loadb */
+      var37 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var40.i = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var39.i;
+        var38.i = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_Y444_AYUV");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_AYUV);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_ARGB */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var61;
+        _dest.x2[1] = var87;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var88;
+        _dest.x2[1] = var89;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var61;
+        _dest.x2[1] = var87;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var88;
+        _dest.x2[1] = var89;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_ARGB");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ARGB);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 2, "t11");
+      orc_program_add_temporary (p, 2, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 1, "t14");
+      orc_program_add_temporary (p, 1, "t15");
+      orc_program_add_temporary (p, 4, "t16");
+
+      orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T9, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_T13, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
+          ORC_VAR_T15, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_BGRA */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var89;
+        _dest.x2[1] = var88;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var87;
+        _dest.x2[1] = var61;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var89;
+        _dest.x2[1] = var88;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var87;
+        _dest.x2[1] = var61;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_BGRA");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 2, "t11");
+      orc_program_add_temporary (p, 2, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 1, "t14");
+      orc_program_add_temporary (p, 1, "t15");
+      orc_program_add_temporary (p, 4, "t16");
+
+      orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T9, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T15,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T13,
+          ORC_VAR_T3, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_ABGR */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var61;
+        _dest.x2[1] = var89;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var88;
+        _dest.x2[1] = var87;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var61;
+        _dest.x2[1] = var89;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var88;
+        _dest.x2[1] = var87;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_ABGR");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ABGR);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 2, "t11");
+      orc_program_add_temporary (p, 2, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 1, "t14");
+      orc_program_add_temporary (p, 1, "t15");
+      orc_program_add_temporary (p, 4, "t16");
+
+      orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T9, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_T15, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
+          ORC_VAR_T13, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_AYUV_RGBA */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var87;
+        _dest.x2[1] = var88;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var89;
+        _dest.x2[1] = var61;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union16 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_int8 var87;
+  orc_int8 var88;
+  orc_int8 var89;
+  orc_union16 var90;
+  orc_union16 var91;
+  orc_union32 var92;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
+    /* 14: loadpw */
+    var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
+    /* 21: loadpw */
+    var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
+    /* 25: loadpw */
+    var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
+    /* 29: loadpw */
+    var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
+    /* 40: loadpb */
+    var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var48 = ptr4[i];
+      /* 2: subb */
+      var57.x4[0] = var48.x4[0] - var49.x4[0];
+      var57.x4[1] = var48.x4[1] - var49.x4[1];
+      var57.x4[2] = var48.x4[2] - var49.x4[2];
+      var57.x4[3] = var48.x4[3] - var49.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var57.i;
+        var58.i = _src.x2[1];
+        var59.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var59.i;
+        var60 = _src.x2[1];
+        var61 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var58.i;
+        var62 = _src.x2[1];
+        var63 = _src.x2[0];
+      }
+      /* 6: convsbw */
+      var64.i = var60;
+      /* 7: convsbw */
+      var65.i = var63;
+      /* 8: convsbw */
+      var66.i = var62;
+      /* 10: mullw */
+      var67.i = (var64.i * var50.i) & 0xffff;
+      /* 11: shrsw */
+      var68.i = var67.i >> 8;
+      /* 12: addssw */
+      var69.i = ORC_CLAMP_SW (var64.i + var68.i);
+      /* 13: addssw */
+      var70.i = ORC_CLAMP_SW (var69.i + var66.i);
+      /* 15: mullw */
+      var71.i = (var66.i * var51.i) & 0xffff;
+      /* 16: shrsw */
+      var72.i = var71.i >> 8;
+      /* 17: subssw */
+      var73.i = ORC_CLAMP_SW (var70.i - var72.i);
+      /* 18: addssw */
+      var74.i = ORC_CLAMP_SW (var73.i + var66.i);
+      /* 19: addssw */
+      var75.i = ORC_CLAMP_SW (var69.i + var65.i);
+      /* 20: addssw */
+      var76.i = ORC_CLAMP_SW (var75.i + var65.i);
+      /* 22: mullw */
+      var77.i = (var65.i * var52.i) & 0xffff;
+      /* 23: shrsw */
+      var78.i = var77.i >> 8;
+      /* 24: addssw */
+      var79.i = ORC_CLAMP_SW (var76.i + var78.i);
+      /* 26: mullw */
+      var80.i = (var65.i * var53.i) & 0xffff;
+      /* 27: shrsw */
+      var81.i = var80.i >> 8;
+      /* 28: subssw */
+      var82.i = ORC_CLAMP_SW (var69.i - var81.i);
+      /* 30: mullw */
+      var83.i = (var66.i * var54.i) & 0xffff;
+      /* 31: shrsw */
+      var84.i = var83.i >> 8;
+      /* 32: subssw */
+      var85.i = ORC_CLAMP_SW (var82.i - var84.i);
+      /* 33: subssw */
+      var86.i = ORC_CLAMP_SW (var85.i - var84.i);
+      /* 34: convssswb */
+      var87 = ORC_CLAMP_SB (var74.i);
+      /* 35: convssswb */
+      var88 = ORC_CLAMP_SB (var86.i);
+      /* 36: convssswb */
+      var89 = ORC_CLAMP_SB (var79.i);
+      /* 37: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var87;
+        _dest.x2[1] = var88;
+        var90.i = _dest.i;
+      }
+      /* 38: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var89;
+        _dest.x2[1] = var61;
+        var91.i = _dest.i;
+      }
+      /* 39: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var90.i;
+        _dest.x2[1] = var91.i;
+        var92.i = _dest.i;
+      }
+      /* 41: addb */
+      var56.x4[0] = var92.x4[0] + var55.x4[0];
+      var56.x4[1] = var92.x4[1] + var55.x4[1];
+      var56.x4[2] = var92.x4[2] + var55.x4[2];
+      var56.x4[3] = var92.x4[3] + var55.x4[3];
+      /* 42: storel */
+      ptr0[i] = var56;
+    }
+  }
+
+}
+
+void
+cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "cogorc_convert_AYUV_RGBA");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_RGBA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 2, "t11");
+      orc_program_add_temporary (p, 2, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 1, "t14");
+      orc_program_add_temporary (p, 1, "t15");
+      orc_program_add_temporary (p, 4, "t16");
+
+      orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T9, ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T15,
+          ORC_VAR_T3, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_I420_BGRA */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_int8 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_int8 var57;
+  orc_union16 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_int8 var85;
+  orc_int8 var86;
+  orc_int8 var87;
+  orc_union16 var88;
+  orc_union16 var89;
+  orc_union32 var90;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 1: loadpb */
+  var46 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 5: loadpb */
+  var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 9: loadpb */
+  var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 12: loadpw */
+  var49.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
+  /* 17: loadpw */
+  var50.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
+  /* 24: loadpw */
+  var51.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
+  /* 28: loadpw */
+  var52.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
+  /* 32: loadpw */
+  var53.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
+  /* 41: loadpb */
+  var54 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 44: loadpb */
+  var55.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var45 = ptr4[i];
+    /* 2: subb */
+    var57 = var45 - var46;
+    /* 3: convsbw */
+    var58.i = var57;
+    /* 4: loadupib */
+    var59 =
+        (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
+        1) >> 1 : ptr5[i >> 1];
+    /* 6: subb */
+    var60 = var59 - var47;
+    /* 7: convsbw */
+    var61.i = var60;
+    /* 8: loadupib */
+    var62 =
+        (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
+        1) >> 1 : ptr6[i >> 1];
+    /* 10: subb */
+    var63 = var62 - var48;
+    /* 11: convsbw */
+    var64.i = var63;
+    /* 13: mullw */
+    var65.i = (var58.i * var49.i) & 0xffff;
+    /* 14: shrsw */
+    var66.i = var65.i >> 8;
+    /* 15: addssw */
+    var67.i = ORC_CLAMP_SW (var58.i + var66.i);
+    /* 16: addssw */
+    var68.i = ORC_CLAMP_SW (var67.i + var64.i);
+    /* 18: mullw */
+    var69.i = (var64.i * var50.i) & 0xffff;
+    /* 19: shrsw */
+    var70.i = var69.i >> 8;
+    /* 20: subssw */
+    var71.i = ORC_CLAMP_SW (var68.i - var70.i);
+    /* 21: addssw */
+    var72.i = ORC_CLAMP_SW (var71.i + var64.i);
+    /* 22: addssw */
+    var73.i = ORC_CLAMP_SW (var67.i + var61.i);
+    /* 23: addssw */
+    var74.i = ORC_CLAMP_SW (var73.i + var61.i);
+    /* 25: mullw */
+    var75.i = (var61.i * var51.i) & 0xffff;
+    /* 26: shrsw */
+    var76.i = var75.i >> 8;
+    /* 27: addssw */
+    var77.i = ORC_CLAMP_SW (var74.i + var76.i);
+    /* 29: mullw */
+    var78.i = (var61.i * var52.i) & 0xffff;
+    /* 30: shrsw */
+    var79.i = var78.i >> 8;
+    /* 31: subssw */
+    var80.i = ORC_CLAMP_SW (var67.i - var79.i);
+    /* 33: mullw */
+    var81.i = (var64.i * var53.i) & 0xffff;
+    /* 34: shrsw */
+    var82.i = var81.i >> 8;
+    /* 35: subssw */
+    var83.i = ORC_CLAMP_SW (var80.i - var82.i);
+    /* 36: subssw */
+    var84.i = ORC_CLAMP_SW (var83.i - var82.i);
+    /* 37: convssswb */
+    var85 = ORC_CLAMP_SB (var72.i);
+    /* 38: convssswb */
+    var86 = ORC_CLAMP_SB (var84.i);
+    /* 39: convssswb */
+    var87 = ORC_CLAMP_SB (var77.i);
+    /* 40: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var87;
+      _dest.x2[1] = var86;
+      var88.i = _dest.i;
+    }
+    /* 42: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var85;
+      _dest.x2[1] = var54;
+      var89.i = _dest.i;
+    }
+    /* 43: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var88.i;
+      _dest.x2[1] = var89.i;
+      var90.i = _dest.i;
+    }
+    /* 45: addb */
+    var56.x4[0] = var90.x4[0] + var55.x4[0];
+    var56.x4[1] = var90.x4[1] + var55.x4[1];
+    var56.x4[2] = var90.x4[2] + var55.x4[2];
+    var56.x4[3] = var90.x4[3] + var55.x4[3];
+    /* 46: storel */
+    ptr0[i] = var56;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_int8 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_int8 var57;
+  orc_union16 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_union16 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_int8 var85;
+  orc_int8 var86;
+  orc_int8 var87;
+  orc_union16 var88;
+  orc_union16 var89;
+  orc_union32 var90;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 1: loadpb */
+  var46 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 5: loadpb */
+  var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 9: loadpb */
+  var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 12: loadpw */
+  var49.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
+  /* 17: loadpw */
+  var50.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
+  /* 24: loadpw */
+  var51.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
+  /* 28: loadpw */
+  var52.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
+  /* 32: loadpw */
+  var53.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
+  /* 41: loadpb */
+  var54 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 44: loadpb */
+  var55.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var55.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var45 = ptr4[i];
+    /* 2: subb */
+    var57 = var45 - var46;
+    /* 3: convsbw */
+    var58.i = var57;
+    /* 4: loadupib */
+    var59 =
+        (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
+        1) >> 1 : ptr5[i >> 1];
+    /* 6: subb */
+    var60 = var59 - var47;
+    /* 7: convsbw */
+    var61.i = var60;
+    /* 8: loadupib */
+    var62 =
+        (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
+        1) >> 1 : ptr6[i >> 1];
+    /* 10: subb */
+    var63 = var62 - var48;
+    /* 11: convsbw */
+    var64.i = var63;
+    /* 13: mullw */
+    var65.i = (var58.i * var49.i) & 0xffff;
+    /* 14: shrsw */
+    var66.i = var65.i >> 8;
+    /* 15: addssw */
+    var67.i = ORC_CLAMP_SW (var58.i + var66.i);
+    /* 16: addssw */
+    var68.i = ORC_CLAMP_SW (var67.i + var64.i);
+    /* 18: mullw */
+    var69.i = (var64.i * var50.i) & 0xffff;
+    /* 19: shrsw */
+    var70.i = var69.i >> 8;
+    /* 20: subssw */
+    var71.i = ORC_CLAMP_SW (var68.i - var70.i);
+    /* 21: addssw */
+    var72.i = ORC_CLAMP_SW (var71.i + var64.i);
+    /* 22: addssw */
+    var73.i = ORC_CLAMP_SW (var67.i + var61.i);
+    /* 23: addssw */
+    var74.i = ORC_CLAMP_SW (var73.i + var61.i);
+    /* 25: mullw */
+    var75.i = (var61.i * var51.i) & 0xffff;
+    /* 26: shrsw */
+    var76.i = var75.i >> 8;
+    /* 27: addssw */
+    var77.i = ORC_CLAMP_SW (var74.i + var76.i);
+    /* 29: mullw */
+    var78.i = (var61.i * var52.i) & 0xffff;
+    /* 30: shrsw */
+    var79.i = var78.i >> 8;
+    /* 31: subssw */
+    var80.i = ORC_CLAMP_SW (var67.i - var79.i);
+    /* 33: mullw */
+    var81.i = (var64.i * var53.i) & 0xffff;
+    /* 34: shrsw */
+    var82.i = var81.i >> 8;
+    /* 35: subssw */
+    var83.i = ORC_CLAMP_SW (var80.i - var82.i);
+    /* 36: subssw */
+    var84.i = ORC_CLAMP_SW (var83.i - var82.i);
+    /* 37: convssswb */
+    var85 = ORC_CLAMP_SB (var72.i);
+    /* 38: convssswb */
+    var86 = ORC_CLAMP_SB (var84.i);
+    /* 39: convssswb */
+    var87 = ORC_CLAMP_SB (var77.i);
+    /* 40: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var87;
+      _dest.x2[1] = var86;
+      var88.i = _dest.i;
+    }
+    /* 42: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var85;
+      _dest.x2[1] = var54;
+      var89.i = _dest.i;
+    }
+    /* 43: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var88.i;
+      _dest.x2[1] = var89.i;
+      var90.i = _dest.i;
+    }
+    /* 45: addb */
+    var56.x4[0] = var90.x4[0] + var55.x4[0];
+    var56.x4[1] = var90.x4[1] + var55.x4[1];
+    var56.x4[2] = var90.x4[2] + var55.x4[2];
+    var56.x4[3] = var90.x4[3] + var55.x4[3];
+    /* 46: storel */
+    ptr0[i] = var56;
+  }
+
+}
+
+void
+cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_I420_BGRA");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 1, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_constant (p, 4, 0x000000ff, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 1, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 4, "t13");
+
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T4, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T10, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T12,
+          ORC_VAR_T11, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T10,
+          ORC_VAR_C8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T13, ORC_VAR_T1,
+          ORC_VAR_T2, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T13, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_convert_I420_BGRA_avg */
+#ifdef DISABLE_ORC
+void
+cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const guint8 * ORC_RESTRICT s5, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  const orc_int8 *ORC_RESTRICT ptr8;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_int8 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_int8 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_int8 var65;
+  orc_int8 var66;
+  orc_int8 var67;
+  orc_int8 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_union16 var87;
+  orc_union16 var88;
+  orc_union16 var89;
+  orc_int8 var90;
+  orc_int8 var91;
+  orc_int8 var92;
+  orc_union16 var93;
+  orc_union16 var94;
+  orc_union32 var95;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+  ptr8 = (orc_int8 *) s5;
+
+  /* 1: loadpb */
+  var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 7: loadpb */
+  var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 13: loadpb */
+  var49 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 16: loadpw */
+  var50.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
+  /* 21: loadpw */
+  var51.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
+  /* 28: loadpw */
+  var52.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
+  /* 32: loadpw */
+  var53.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
+  /* 36: loadpw */
+  var54.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
+  /* 45: loadpb */
+  var55 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 48: loadpb */
+  var56.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var46 = ptr4[i];
+    /* 2: subb */
+    var58 = var46 - var47;
+    /* 3: convsbw */
+    var59.i = var58;
+    /* 4: loadupib */
+    var60 =
+        (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
+        1) >> 1 : ptr5[i >> 1];
+    /* 5: loadupib */
+    var61 =
+        (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
+        1) >> 1 : ptr6[i >> 1];
+    /* 6: avgub */
+    var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
+    /* 8: subb */
+    var63 = var62 - var48;
+    /* 9: convsbw */
+    var64.i = var63;
+    /* 10: loadupib */
+    var65 =
+        (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
+        1) >> 1 : ptr7[i >> 1];
+    /* 11: loadupib */
+    var66 =
+        (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
+        1) >> 1 : ptr8[i >> 1];
+    /* 12: avgub */
+    var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
+    /* 14: subb */
+    var68 = var67 - var49;
+    /* 15: convsbw */
+    var69.i = var68;
+    /* 17: mullw */
+    var70.i = (var59.i * var50.i) & 0xffff;
+    /* 18: shrsw */
+    var71.i = var70.i >> 8;
+    /* 19: addssw */
+    var72.i = ORC_CLAMP_SW (var59.i + var71.i);
+    /* 20: addssw */
+    var73.i = ORC_CLAMP_SW (var72.i + var69.i);
+    /* 22: mullw */
+    var74.i = (var69.i * var51.i) & 0xffff;
+    /* 23: shrsw */
+    var75.i = var74.i >> 8;
+    /* 24: subssw */
+    var76.i = ORC_CLAMP_SW (var73.i - var75.i);
+    /* 25: addssw */
+    var77.i = ORC_CLAMP_SW (var76.i + var69.i);
+    /* 26: addssw */
+    var78.i = ORC_CLAMP_SW (var72.i + var64.i);
+    /* 27: addssw */
+    var79.i = ORC_CLAMP_SW (var78.i + var64.i);
+    /* 29: mullw */
+    var80.i = (var64.i * var52.i) & 0xffff;
+    /* 30: shrsw */
+    var81.i = var80.i >> 8;
+    /* 31: addssw */
+    var82.i = ORC_CLAMP_SW (var79.i + var81.i);
+    /* 33: mullw */
+    var83.i = (var64.i * var53.i) & 0xffff;
+    /* 34: shrsw */
+    var84.i = var83.i >> 8;
+    /* 35: subssw */
+    var85.i = ORC_CLAMP_SW (var72.i - var84.i);
+    /* 37: mullw */
+    var86.i = (var69.i * var54.i) & 0xffff;
+    /* 38: shrsw */
+    var87.i = var86.i >> 8;
+    /* 39: subssw */
+    var88.i = ORC_CLAMP_SW (var85.i - var87.i);
+    /* 40: subssw */
+    var89.i = ORC_CLAMP_SW (var88.i - var87.i);
+    /* 41: convssswb */
+    var90 = ORC_CLAMP_SB (var77.i);
+    /* 42: convssswb */
+    var91 = ORC_CLAMP_SB (var89.i);
+    /* 43: convssswb */
+    var92 = ORC_CLAMP_SB (var82.i);
+    /* 44: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var92;
+      _dest.x2[1] = var91;
+      var93.i = _dest.i;
+    }
+    /* 46: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var90;
+      _dest.x2[1] = var55;
+      var94.i = _dest.i;
+    }
+    /* 47: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var93.i;
+      _dest.x2[1] = var94.i;
+      var95.i = _dest.i;
+    }
+    /* 49: addb */
+    var57.x4[0] = var95.x4[0] + var56.x4[0];
+    var57.x4[1] = var95.x4[1] + var56.x4[1];
+    var57.x4[2] = var95.x4[2] + var56.x4[2];
+    var57.x4[3] = var95.x4[3] + var56.x4[3];
+    /* 50: storel */
+    ptr0[i] = var57;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_convert_I420_BGRA_avg (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  const orc_int8 *ORC_RESTRICT ptr8;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_int8 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_int8 var58;
+  orc_union16 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_int8 var65;
+  orc_int8 var66;
+  orc_int8 var67;
+  orc_int8 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_union16 var76;
+  orc_union16 var77;
+  orc_union16 var78;
+  orc_union16 var79;
+  orc_union16 var80;
+  orc_union16 var81;
+  orc_union16 var82;
+  orc_union16 var83;
+  orc_union16 var84;
+  orc_union16 var85;
+  orc_union16 var86;
+  orc_union16 var87;
+  orc_union16 var88;
+  orc_union16 var89;
+  orc_int8 var90;
+  orc_int8 var91;
+  orc_int8 var92;
+  orc_union16 var93;
+  orc_union16 var94;
+  orc_union32 var95;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+  ptr8 = (orc_int8 *) ex->arrays[8];
+
+  /* 1: loadpb */
+  var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 7: loadpb */
+  var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 13: loadpb */
+  var49 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 16: loadpw */
+  var50.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
+  /* 21: loadpw */
+  var51.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
+  /* 28: loadpw */
+  var52.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
+  /* 32: loadpw */
+  var53.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
+  /* 36: loadpw */
+  var54.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
+  /* 45: loadpb */
+  var55 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 48: loadpb */
+  var56.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var56.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var46 = ptr4[i];
+    /* 2: subb */
+    var58 = var46 - var47;
+    /* 3: convsbw */
+    var59.i = var58;
+    /* 4: loadupib */
+    var60 =
+        (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
+        1) >> 1 : ptr5[i >> 1];
+    /* 5: loadupib */
+    var61 =
+        (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
+        1) >> 1 : ptr6[i >> 1];
+    /* 6: avgub */
+    var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
+    /* 8: subb */
+    var63 = var62 - var48;
+    /* 9: convsbw */
+    var64.i = var63;
+    /* 10: loadupib */
+    var65 =
+        (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
+        1) >> 1 : ptr7[i >> 1];
+    /* 11: loadupib */
+    var66 =
+        (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
+        1) >> 1 : ptr8[i >> 1];
+    /* 12: avgub */
+    var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
+    /* 14: subb */
+    var68 = var67 - var49;
+    /* 15: convsbw */
+    var69.i = var68;
+    /* 17: mullw */
+    var70.i = (var59.i * var50.i) & 0xffff;
+    /* 18: shrsw */
+    var71.i = var70.i >> 8;
+    /* 19: addssw */
+    var72.i = ORC_CLAMP_SW (var59.i + var71.i);
+    /* 20: addssw */
+    var73.i = ORC_CLAMP_SW (var72.i + var69.i);
+    /* 22: mullw */
+    var74.i = (var69.i * var51.i) & 0xffff;
+    /* 23: shrsw */
+    var75.i = var74.i >> 8;
+    /* 24: subssw */
+    var76.i = ORC_CLAMP_SW (var73.i - var75.i);
+    /* 25: addssw */
+    var77.i = ORC_CLAMP_SW (var76.i + var69.i);
+    /* 26: addssw */
+    var78.i = ORC_CLAMP_SW (var72.i + var64.i);
+    /* 27: addssw */
+    var79.i = ORC_CLAMP_SW (var78.i + var64.i);
+    /* 29: mullw */
+    var80.i = (var64.i * var52.i) & 0xffff;
+    /* 30: shrsw */
+    var81.i = var80.i >> 8;
+    /* 31: addssw */
+    var82.i = ORC_CLAMP_SW (var79.i + var81.i);
+    /* 33: mullw */
+    var83.i = (var64.i * var53.i) & 0xffff;
+    /* 34: shrsw */
+    var84.i = var83.i >> 8;
+    /* 35: subssw */
+    var85.i = ORC_CLAMP_SW (var72.i - var84.i);
+    /* 37: mullw */
+    var86.i = (var69.i * var54.i) & 0xffff;
+    /* 38: shrsw */
+    var87.i = var86.i >> 8;
+    /* 39: subssw */
+    var88.i = ORC_CLAMP_SW (var85.i - var87.i);
+    /* 40: subssw */
+    var89.i = ORC_CLAMP_SW (var88.i - var87.i);
+    /* 41: convssswb */
+    var90 = ORC_CLAMP_SB (var77.i);
+    /* 42: convssswb */
+    var91 = ORC_CLAMP_SB (var89.i);
+    /* 43: convssswb */
+    var92 = ORC_CLAMP_SB (var82.i);
+    /* 44: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var92;
+      _dest.x2[1] = var91;
+      var93.i = _dest.i;
+    }
+    /* 46: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var90;
+      _dest.x2[1] = var55;
+      var94.i = _dest.i;
+    }
+    /* 47: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var93.i;
+      _dest.x2[1] = var94.i;
+      var95.i = _dest.i;
+    }
+    /* 49: addb */
+    var57.x4[0] = var95.x4[0] + var56.x4[0];
+    var57.x4[1] = var95.x4[1] + var56.x4[1];
+    var57.x4[2] = var95.x4[2] + var56.x4[2];
+    var57.x4[3] = var95.x4[3] + var56.x4[3];
+    /* 50: storel */
+    ptr0[i] = var57;
+  }
+
+}
+
+void
+cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const guint8 * ORC_RESTRICT s5, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_convert_I420_BGRA_avg");
+      orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA_avg);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_source (p, 1, "s5");
+      orc_program_add_constant (p, 1, 0x00000008, "c1");
+      orc_program_add_constant (p, 1, 0x00000080, "c2");
+      orc_program_add_constant (p, 4, 0x0000002a, "c3");
+      orc_program_add_constant (p, 4, 0x00000067, "c4");
+      orc_program_add_constant (p, 4, 0x00000004, "c5");
+      orc_program_add_constant (p, 4, 0x00000064, "c6");
+      orc_program_add_constant (p, 4, 0x00000068, "c7");
+      orc_program_add_constant (p, 4, 0x000000ff, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 4, "t14");
+
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T6, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
+          ORC_VAR_T12, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T11,
+          ORC_VAR_C8, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T1,
+          ORC_VAR_T2, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->arrays[ORC_VAR_S5] = (void *) s5;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_I420 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var39 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var40 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var41.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var42.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var41.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var39 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var40 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var41.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var42.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var41.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_I420");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_I420);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_YUV9 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union64 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 4: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var40 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var41 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var40;
+      _dest.x2[1] = var41;
+      var42.i = _dest.i;
+    }
+    /* 3: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var42.i;
+      var43.i = _dest.i;
+    }
+    /* 5: loadw */
+    var38 = ptr4[i];
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var38.x2[0];
+      var44.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var38.x2[1];
+      var44.x2[1] = _dest.i;
+    }
+    /* 7: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var39.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var39.x2[1] = _dest.i;
+    }
+    /* 8: storeq */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_YUV9 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union64 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 4: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var40 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var41 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var40;
+      _dest.x2[1] = var41;
+      var42.i = _dest.i;
+    }
+    /* 3: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var42.i;
+      var43.i = _dest.i;
+    }
+    /* 5: loadw */
+    var38 = ptr4[i];
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var38.x2[0];
+      var44.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var38.x2[1];
+      var44.x2[1] = _dest.i;
+    }
+    /* 7: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var39.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var39.x2[1] = _dest.i;
+    }
+    /* 8: storeq */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_YUV9");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_YUV9);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T5, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var39.i;
+      var42.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var42.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var42.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var39.i;
+      var42.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var42.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var42.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_YUY2);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 2, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var40.i;
+      var42.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var42.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var42.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var40.i;
+      var42.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var42.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var42.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_UYVY);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 2, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_YVYU */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 3: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: swapw */
+    var41.i = ORC_SWAP_W (var39.i);
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var42.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var42.x2[1] = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var43.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_YVYU (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 3: loadpb */
+  var37.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var37.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var36 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: swapw */
+    var41.i = ORC_SWAP_W (var39.i);
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var42.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var42.x2[1] = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var43.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_YVYU");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_YVYU);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 2, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_Y42B */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 3: loadpb */
+  var38.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var38.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr5[i];
+    /* 1: loadb */
+    var37 = ptr6[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var41.i = _dest.i;
+    }
+    /* 4: loadw */
+    var39 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var42.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var42.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var43.i = _dest.i;
+    }
+    /* 7: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var40.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var40.x2[1] = _dest.i;
+    }
+    /* 8: storeq */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 3: loadpb */
+  var38.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var38.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr5[i];
+    /* 1: loadb */
+    var37 = ptr6[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var41.i = _dest.i;
+    }
+    /* 4: loadw */
+    var39 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var42.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var38.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var42.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var43.i = _dest.i;
+    }
+    /* 7: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var40.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var40.x2[1] = _dest.i;
+    }
+    /* 8: storeq */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_Y42B");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_Y42B);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_Y444 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr5[i];
+    /* 1: loadb */
+    var35 = ptr6[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var39.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 3: loadpb */
+  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr5[i];
+    /* 1: loadb */
+    var35 = ptr6[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34;
+      _dest.x2[1] = var35;
+      var39.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var40.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var39.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_Y444");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_Y444);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_Y800 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 0: loadpb */
+  var33 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 3: loadpw */
+  var35.i = (int) 0x00008080;   /* 32896 or 1.62528e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadb */
+    var34 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var37.i = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var35.i;
+      var36.i = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_Y800 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 0: loadpb */
+  var33 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 3: loadpw */
+  var35.i = (int) 0x00008080;   /* 32896 or 1.62528e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadb */
+    var34 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var37.i = _dest.i;
+    }
+    /* 4: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var35.i;
+      var36.i = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_Y800");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_Y800);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_constant (p, 2, 0x00008080, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_Y16 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 2: loadpb */
+  var35 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 4: loadpw */
+  var36.i = (int) 0x00008080;   /* 32896 or 1.62528e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convhwb */
+    var38 = ((orc_uint16) var34.i) >> 8;
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35;
+      _dest.x2[1] = var38;
+      var39.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var36.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_Y16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 2: loadpb */
+  var35 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
+  /* 4: loadpw */
+  var36.i = (int) 0x00008080;   /* 32896 or 1.62528e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convhwb */
+    var38 = ((orc_uint16) var34.i) >> 8;
+    /* 3: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35;
+      _dest.x2[1] = var38;
+      var39.i = _dest.i;
+    }
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var36.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_Y16");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_Y16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_constant (p, 2, 0x00008080, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+
+      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_BGRA */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: swapl */
+    var33.i = ORC_SWAP_L (var32.i);
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: swapl */
+    var33.i = ORC_SWAP_L (var32.i);
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_BGRA");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_ABGR */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var47;
+      _dest.x2[1] = var44;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var45;
+      _dest.x2[1] = var46;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_ABGR (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var47;
+      _dest.x2[1] = var44;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var45;
+      _dest.x2[1] = var46;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_ABGR");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_ABGR);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_RGBA */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var46;
+      _dest.x2[1] = var45;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44;
+      _dest.x2[1] = var47;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_RGBA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var46;
+      _dest.x2[1] = var45;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44;
+      _dest.x2[1] = var47;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_RGBA");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_RGBA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_NV12 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+  /* 3: loadpb */
+  var36.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var36.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr5[i];
+    /* 1: loadw */
+    var35 = ptr5[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var34.i;
+      _dest.x2[1] = var35.i;
+      var39.i = _dest.i;
+    }
+    /* 4: loadw */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var40.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var40.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_NV12 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+  /* 3: loadpb */
+  var36.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var36.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr5[i];
+    /* 1: loadw */
+    var35 = ptr5[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var34.i;
+      _dest.x2[1] = var35.i;
+      var39.i = _dest.i;
+    }
+    /* 4: loadw */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var40.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var40.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var40.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_NV12");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_NV12);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_NV21 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+  /* 3: loadpb */
+  var36.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var36.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr5[i];
+    /* 1: swapw */
+    var39.i = ORC_SWAP_W (var35.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var39.i;
+      var40.i = _dest.i;
+    }
+    /* 4: loadw */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_NV21 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+  /* 3: loadpb */
+  var36.x2[0] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+  var36.x2[1] = (int) 0x000000ff;       /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr5[i];
+    /* 1: swapw */
+    var39.i = ORC_SWAP_W (var35.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var39.i;
+      var40.i = _dest.i;
+    }
+    /* 4: loadw */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var41.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var41.x2[1] = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[0];
+      _dest.x2[1] = var40.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.x2[1];
+      _dest.x2[1] = var40.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_NV21");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_NV21);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_constant (p, 1, 0x000000ff, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_getline_A420 */
+#ifdef DISABLE_ORC
+void
+cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var39 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var40 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var41.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr7[i];
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var42.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var41.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_getline_A420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var39 = ptr5[i >> 1];
+    /* 1: loadupdb */
+    var40 = ptr6[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39;
+      _dest.x2[1] = var40;
+      var41.i = _dest.i;
+    }
+    /* 3: loadb */
+    var36 = ptr7[i];
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var42.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var41.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_getline_A420");
+      orc_program_set_backup_function (p, _backup_cogorc_getline_A420);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_I420 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_int8 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[0];
+      var42.x2[0] = _src.x2[1];
+      var43.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[1];
+      var42.x2[1] = _src.x2[1];
+      var43.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var39;
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.x2[0];
+      var44.x2[0] = _src.x2[1];
+      var45.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var42.x2[1];
+      var44.x2[1] = _src.x2[1];
+      var45.x2[1] = _src.x2[0];
+    }
+    /* 5: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var45.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 6: avgub */
+    var40 = ((orc_uint8) var46 + (orc_uint8) var47 + 1) >> 1;
+    /* 7: storeb */
+    ptr1[i] = var40;
+    /* 8: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var48 = _src.x2[1];
+      var49 = _src.x2[0];
+    }
+    /* 9: avgub */
+    var41 = ((orc_uint8) var48 + (orc_uint8) var49 + 1) >> 1;
+    /* 10: storeb */
+    ptr2[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_int8 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[0];
+      var42.x2[0] = _src.x2[1];
+      var43.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[1];
+      var42.x2[1] = _src.x2[1];
+      var43.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var39;
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.x2[0];
+      var44.x2[0] = _src.x2[1];
+      var45.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var42.x2[1];
+      var44.x2[1] = _src.x2[1];
+      var45.x2[1] = _src.x2[0];
+    }
+    /* 5: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var45.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 6: avgub */
+    var40 = ((orc_uint8) var46 + (orc_uint8) var47 + 1) >> 1;
+    /* 7: storeb */
+    ptr1[i] = var40;
+    /* 8: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var48 = _src.x2[1];
+      var49 = _src.x2[0];
+    }
+    /* 9: avgub */
+    var41 = ((orc_uint8) var48 + (orc_uint8) var49 + 1) >> 1;
+    /* 10: storeb */
+    ptr2[i] = var41;
+  }
+
+}
+
+void
+cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_I420");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_YUY2 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var43.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var43.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_YUY2");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_YVYU */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: swapw */
+    var45.i = ORC_SWAP_W (var43.i);
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var45.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var45.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_YVYU (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: swapw */
+    var45.i = ORC_SWAP_W (var43.i);
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var45.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var45.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_YVYU");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_YVYU);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_UYVY */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43.x2[0];
+      _dest.x2[1] = var44.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43.x2[1];
+      _dest.x2[1] = var44.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var43.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 4: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var44.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var44.x2[1] = _src.x2[1];
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43.x2[0];
+      _dest.x2[1] = var44.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var43.x2[1];
+      _dest.x2[1] = var44.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_UYVY");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_Y42B */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_int8 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[0];
+      var40.x2[0] = _src.x2[1];
+      var41.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[1];
+      var40.x2[1] = _src.x2[1];
+      var41.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 5: storeb */
+    ptr2[i] = var37;
+    /* 6: storeb */
+    ptr1[i] = var38;
+    /* 7: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 8: storew */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_int8 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[0];
+      var40.x2[0] = _src.x2[1];
+      var41.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[1];
+      var40.x2[1] = _src.x2[1];
+      var41.x2[1] = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 3: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var44.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 5: storeb */
+    ptr2[i] = var37;
+    /* 6: storeb */
+    ptr1[i] = var38;
+    /* 7: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 8: storew */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_Y42B");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_Y444 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr1 = (orc_int8 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var38.i;
+      var35 = _src.x2[1];
+      var36 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr2[i] = var35;
+    /* 4: storeb */
+    ptr1[i] = var36;
+    /* 5: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var39.i;
+      var37 = _src.x2[1];
+    }
+    /* 6: storeb */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr1 = (orc_int8 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var38.i;
+      var35 = _src.x2[1];
+      var36 = _src.x2[0];
+    }
+    /* 3: storeb */
+    ptr2[i] = var35;
+    /* 4: storeb */
+    ptr1[i] = var36;
+    /* 5: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var39.i;
+      var37 = _src.x2[1];
+    }
+    /* 6: storeb */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_Y444");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_Y444);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_Y800 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_Y800 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_Y800");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_Y800);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_Y16 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var37 = _src.x2[1];
+    }
+    /* 3: convubw */
+    var38.i = (orc_uint8) var37;
+    /* 4: shlw */
+    var35.i = var38.i << 8;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_Y16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var37 = _src.x2[1];
+    }
+    /* 3: convubw */
+    var38.i = (orc_uint8) var37;
+    /* 4: shlw */
+    var35.i = var38.i << 8;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_Y16");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_Y16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_BGRA */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: swapl */
+    var33.i = ORC_SWAP_L (var32.i);
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr4[i];
+    /* 1: swapl */
+    var33.i = ORC_SWAP_L (var32.i);
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_BGRA");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_ABGR */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var47;
+      _dest.x2[1] = var44;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var45;
+      _dest.x2[1] = var46;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_ABGR (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var47;
+      _dest.x2[1] = var44;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var45;
+      _dest.x2[1] = var46;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var49.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_ABGR");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_ABGR);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_T5,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_RGBA */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44;
+      _dest.x2[1] = var47;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var46;
+      _dest.x2[1] = var45;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var48.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_RGBA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var40 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var42.i;
+      var44 = _src.x2[1];
+      var45 = _src.x2[0];
+    }
+    /* 3: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var46 = _src.x2[1];
+      var47 = _src.x2[0];
+    }
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44;
+      _dest.x2[1] = var47;
+      var48.i = _dest.i;
+    }
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var46;
+      _dest.x2[1] = var45;
+      var49.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var48.i;
+      var41.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_RGBA");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_RGBA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_NV12 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var37.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var37.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var37;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var38.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var38.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 6: storew */
+    ptr1[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_NV12 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var36 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var36.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var37.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var37.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var37;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var38.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var38.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 6: storew */
+    ptr1[i] = var38;
+  }
+
+}
+
+void
+cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_NV12");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_NV12);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_NV21 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var40.x2[0] = _src.x2[1];
+      var41.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var40.x2[1] = _src.x2[1];
+      var41.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[0];
+      var38.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[1];
+      var38.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var38;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 6: swapw */
+    var39.i = ORC_SWAP_W (var44.i);
+    /* 7: storew */
+    ptr1[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_NV21 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[0];
+      var40.x2[0] = _src.x2[1];
+      var41.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var37.x2[1];
+      var40.x2[1] = _src.x2[1];
+      var41.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[0];
+      var38.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var41.x2[1];
+      var38.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var38;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var42.i = _src.x2[1];
+      var43.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 6: swapw */
+    var39.i = ORC_SWAP_W (var44.i);
+    /* 7: storew */
+    ptr1[i] = var39;
+  }
+
+}
+
+void
+cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_NV21");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_NV21);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* cogorc_putline_A420 */
+#ifdef DISABLE_ORC
+void
+cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_union16 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_int8 var50;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_int8 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr3 = (orc_union16 *) d4;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[0];
+      var43.x2[0] = _src.x2[1];
+      var44.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[1];
+      var43.x2[1] = _src.x2[1];
+      var44.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var39;
+    /* 4: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[0];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr3[i] = var40;
+    /* 6: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[0];
+      var45.x2[0] = _src.x2[1];
+      var46.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[1];
+      var45.x2[1] = _src.x2[1];
+      var46.x2[1] = _src.x2[0];
+    }
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var46.i;
+      var47 = _src.x2[1];
+      var48 = _src.x2[0];
+    }
+    /* 8: avgub */
+    var41 = ((orc_uint8) var47 + (orc_uint8) var48 + 1) >> 1;
+    /* 9: storeb */
+    ptr1[i] = var41;
+    /* 10: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var45.i;
+      var49 = _src.x2[1];
+      var50 = _src.x2[0];
+    }
+    /* 11: avgub */
+    var42 = ((orc_uint8) var49 + (orc_uint8) var50 + 1) >> 1;
+    /* 12: storeb */
+    ptr2[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_cogorc_putline_A420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_union16 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_int8 var50;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_int8 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr3 = (orc_union16 *) ex->arrays[3];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[0];
+      var43.x2[0] = _src.x2[1];
+      var44.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union32 _src;
+      _src.i = var38.x2[1];
+      var43.x2[1] = _src.x2[1];
+      var44.x2[1] = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[0];
+      var39.x2[0] = _src.x2[1];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[1];
+      var39.x2[1] = _src.x2[1];
+    }
+    /* 3: storew */
+    ptr0[i] = var39;
+    /* 4: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[0];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var44.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr3[i] = var40;
+    /* 6: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[0];
+      var45.x2[0] = _src.x2[1];
+      var46.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var43.x2[1];
+      var45.x2[1] = _src.x2[1];
+      var46.x2[1] = _src.x2[0];
+    }
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var46.i;
+      var47 = _src.x2[1];
+      var48 = _src.x2[0];
+    }
+    /* 8: avgub */
+    var41 = ((orc_uint8) var47 + (orc_uint8) var48 + 1) >> 1;
+    /* 9: storeb */
+    ptr1[i] = var41;
+    /* 10: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var45.i;
+      var49 = _src.x2[1];
+      var50 = _src.x2[0];
+    }
+    /* 11: avgub */
+    var42 = ((orc_uint8) var49 + (orc_uint8) var50 + 1) >> 1;
+    /* 12: storeb */
+    ptr2[i] = var42;
+  }
+
+}
+
+void
+cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "cogorc_putline_A420");
+      orc_program_set_backup_function (p, _backup_cogorc_putline_A420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 2, "d4");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 1, ORC_VAR_D4, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D2, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+
+      orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
diff --git a/gst/videoconvert/gstvideoconvertorc-dist.h b/gst/videoconvert/gstvideoconvertorc-dist.h
new file mode 100644
index 0000000..6ba5ae6
--- /dev/null
+++ b/gst/videoconvert/gstvideoconvertorc-dist.h
@@ -0,0 +1,168 @@
+
+/* autogenerated from gstvideoconvertorc.orc */
+
+#ifndef _GSTVIDEOCONVERTORC_H_
+#define _GSTVIDEOCONVERTORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void cogorc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_downsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_downsample_horiz_cosite_3tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_420_jpeg (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_vert_halfsite_2tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_downsample_vert_cosite_3tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_downsample_vert_halfsite_4tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_upsample_vert_avgub (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void orc_unpack_yuyv_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_yuyv_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_yuyv_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_pack_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void orc_unpack_uyvy_y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_uyvy_u (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_unpack_uyvy_v (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_pack_uyvy (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
+void orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
+void orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
+void orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int n);
+void orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int n);
+void orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
+void orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
+void orc_pack_123x (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int n);
+void orc_pack_x123 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int n);
+void cogorc_combine2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int n);
+void cogorc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void cogorc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void cogorc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void cogorc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, int n);
+void cogorc_getline_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_YUV9 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_Y42B (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_Y444 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
+void cogorc_getline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_getline_NV12 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_getline_NV21 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void cogorc_getline_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void cogorc_putline_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_YVYU (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y42B (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y444 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y800 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_Y16 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_ABGR (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_RGBA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_NV12 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_NV21 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
+void cogorc_putline_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/videoconvert/gstvideoconvertorc.orc b/gst/videoconvert/gstvideoconvertorc.orc
new file mode 100644
index 0000000..086990e
--- /dev/null
+++ b/gst/videoconvert/gstvideoconvertorc.orc
@@ -0,0 +1,1757 @@
+
+.function cogorc_memcpy_2d
+.flags 2d
+.dest 1 d1 guint8
+.source 1 s1 guint8
+
+copyb d1, s1
+
+
+.function cogorc_downsample_horiz_cosite_1tap
+.dest 1 d1 guint8
+.source 2 s1 guint8
+
+select0wb d1, s1
+
+
+.function cogorc_downsample_horiz_cosite_3tap
+.dest 1 d1 guint8
+.source 2 s1 guint8
+.source 2 s2 guint8
+.temp 1 t1
+.temp 1 t2
+.temp 1 t3
+.temp 2 t4
+.temp 2 t5
+.temp 2 t6
+
+copyw t4, s1
+select0wb t1, t4
+select1wb t2, t4
+select0wb t3, s2
+convubw t4, t1
+convubw t5, t2
+convubw t6, t3
+mullw t5, t5, 2
+addw t4, t4, t6
+addw t4, t4, t5
+addw t4, t4, 2
+shrsw t4, t4, 2
+convsuswb d1, t4
+
+
+.function cogorc_downsample_420_jpeg
+.dest 1 d1 guint8
+.source 2 s1 guint8
+.source 2 s2 guint8
+.temp 2 t1
+.temp 1 t2
+.temp 1 t3
+.temp 1 t4
+.temp 1 t5
+
+copyw t1, s1
+select0wb t2, t1
+select1wb t3, t1
+avgub t2, t2, t3
+copyw t1, s2
+select0wb t4, t1
+select1wb t5, t1
+avgub t4, t4, t5
+avgub d1, t2, t4
+
+
+.function cogorc_downsample_vert_halfsite_2tap
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+
+avgub d1, s1, s2
+
+
+.function cogorc_downsample_vert_cosite_3tap
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+
+convubw t1, s1
+convubw t2, s2
+convubw t3, s3
+mullw t2, t2, 2
+addw t1, t1, t3
+addw t1, t1, t2
+addw t1, t1, 2
+shrsw t1, t1, 2
+convsuswb d1, t1
+
+
+
+.function cogorc_downsample_vert_halfsite_4tap
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+.temp 2 t4
+
+convubw t1, s1
+convubw t2, s2
+convubw t3, s3
+convubw t4, s4
+addw t2, t2, t3
+mullw t2, t2, 26
+addw t1, t1, t4
+mullw t1, t1, 6
+addw t2, t2, t1
+addw t2, t2, 32
+shrsw t2, t2, 6
+convsuswb d1, t2
+
+
+.function cogorc_upsample_horiz_cosite_1tap
+.dest 2 d1 guint8 guint8
+.source 1 s1 guint8
+.temp 1 t1
+
+copyb t1, s1
+mergebw d1, t1, t1
+
+
+.function cogorc_upsample_horiz_cosite
+.dest 2 d1 guint8 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.temp 1 t1
+.temp 1 t2
+
+copyb t1, s1
+avgub t2, t1, s2
+mergebw d1, t1, t2
+
+
+.function cogorc_upsample_vert_avgub
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+
+avgub d1, s1, s2
+
+
+
+
+.function orc_unpack_yuyv_y
+.dest 1 d1 guint8
+.source 2 s1 guint8
+
+select0wb d1, s1
+
+
+.function orc_unpack_yuyv_u
+.dest 1 d1 guint8
+.source 4 s1 guint8
+.temp 2 t1
+
+select0lw t1, s1
+select1wb d1, t1
+
+
+.function orc_unpack_yuyv_v
+.dest 1 d1 guint8
+.source 4 s1 guint8
+.temp 2 t1
+
+select1lw t1, s1
+select1wb d1, t1
+
+
+.function orc_pack_yuyv
+.dest 4 d1 guint8
+.source 2 s1 guint8 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.temp 1 t1
+.temp 1 t2
+.temp 2 t3
+.temp 2 t4
+.temp 2 t5
+
+copyw t5, s1
+select0wb t1, t5
+select1wb t2, t5
+mergebw t3, t1, s2
+mergebw t4, t2, s3
+mergewl d1, t3, t4
+
+
+.function orc_unpack_uyvy_y
+.dest 1 d1 guint8
+.source 2 s1 guint8
+
+select1wb d1, s1
+
+
+.function orc_unpack_uyvy_u
+.dest 1 d1 guint8
+.source 4 s1 guint8
+.temp 2 t1
+
+select0lw t1, s1
+select0wb d1, t1
+
+
+.function orc_unpack_uyvy_v
+.dest 1 d1 guint8
+.source 4 s1 guint8
+.temp 2 t1
+
+select1lw t1, s1
+select0wb d1, t1
+
+
+.function orc_pack_uyvy
+.dest 4 d1 guint8
+.source 2 s1 guint8 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.temp 1 t1
+.temp 1 t2
+.temp 2 t3
+.temp 2 t4
+.temp 2 t5
+
+copyw t5, s1
+select0wb t1, t5
+select1wb t2, t5
+mergebw t3, s2, t1
+mergebw t4, s3, t2
+mergewl d1, t3, t4
+
+
+.function orc_matrix2_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.temp 2 t1
+.temp 2 t2
+
+convubw t1, s1
+mullw t1, t1, p1
+convubw t2, s2
+mullw t2, t2, p2
+addw t1, t1, t2
+addw t1, t1, p3
+shrsw t1, t1, 6
+convsuswb d1, t1
+
+
+.function orc_matrix2_11_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.param 2 p1
+.param 2 p2
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+.temp 2 t4
+
+convubw t1, s1
+subw t1, t1, 16
+mullw t3, t1, p1
+convubw t2, s2
+subw t2, t2, 128
+mullw t4, t2, p2
+addw t3, t3, t4
+addw t3, t3, 128
+shrsw t3, t3, 8
+addw t3, t3, t1
+addw t3, t3, t2
+convsuswb d1, t3
+
+
+.function orc_matrix2_12_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.param 2 p1
+.param 2 p2
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+.temp 2 t4
+
+convubw t1, s1
+subw t1, t1, 16
+mullw t3, t1, p1
+convubw t2, s2
+subw t2, t2, 128
+mullw t4, t2, p2
+addw t3, t3, t4
+addw t3, t3, 128
+shrsw t3, t3, 8
+addw t3, t3, t1
+addw t3, t3, t2
+addw t3, t3, t2
+convsuswb d1, t3
+
+
+.function orc_matrix3_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.source 1 s3 guint8 guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.temp 2 t1
+.temp 2 t2
+
+convubw t1, s1
+mullw t1, t1, p1
+convubw t2, s2
+mullw t2, t2, p2
+addw t1, t1, t2
+convubw t2, s3
+mullw t2, t2, p3
+addw t1, t1, t2
+addw t1, t1, p4
+shrsw t1, t1, 6
+convsuswb d1, t1
+
+
+.function orc_matrix3_100_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.source 1 s3 guint8 guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+#.temp 2 t4
+
+convubw t1, s1
+subw t1, t1, 16
+mullw t3, t1, p1
+convubw t2, s2
+subw t2, t2, 128
+mullw t2, t2, p2
+addw t3, t3, t2
+convubw t2, s3
+subw t2, t2, 128
+mullw t2, t2, p3
+addw t3, t3, t2
+addw t3, t3, 128
+shrsw t3, t3, 8
+addw t3, t3, t1
+convsuswb d1, t3
+
+
+.function orc_matrix3_100_offset_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.source 1 s3 guint8 guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+#.param 2 p6
+.temp 2 t1
+.temp 2 t2
+.temp 2 t3
+#.temp 2 t3
+#.temp 2 t4
+
+convubw t3, s1
+mullw t1, t3, p1
+convubw t2, s2
+mullw t2, t2, p2
+addw t1, t1, t2
+convubw t2, s3
+mullw t2, t2, p3
+addw t1, t1, t2
+addw t1, t1, p4
+shrsw t1, t1, p5
+#addw t1, t1, p6
+addw t1, t1, t3
+convsuswb d1, t1
+
+
+
+.function orc_matrix3_000_u8
+.dest 1 d1 guint8 guint8
+.source 1 s1 guint8 guint8
+.source 1 s2 guint8 guint8
+.source 1 s3 guint8 guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+#.param 2 p6
+.temp 2 t1
+.temp 2 t2
+#.temp 2 t3
+#.temp 2 t4
+
+convubw t1, s1
+mullw t1, t1, p1
+convubw t2, s2
+mullw t2, t2, p2
+addw t1, t1, t2
+convubw t2, s3
+mullw t2, t2, p3
+addw t1, t1, t2
+addw t1, t1, p4
+shrsw t1, t1, p5
+#addw t1, t1, p6
+convwb d1, t1
+
+
+
+.function orc_pack_123x
+.dest 4 d1 guint32 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.param 1 p1
+.temp 2 t1
+.temp 2 t2
+
+mergebw t1, s1, s2
+mergebw t2, s3, p1
+mergewl d1, t1, t2
+
+
+.function orc_pack_x123
+.dest 4 d1 guint32 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.param 1 p1
+.temp 2 t1
+.temp 2 t2
+
+mergebw t1, p1, s1
+mergebw t2, s2, s3
+mergewl d1, t1, t2
+
+
+.function cogorc_combine2_u8
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.param 2 p1
+.param 2 p2
+.temp 2 t1
+.temp 2 t2
+
+convubw t1, s1
+mullw t1, t1, p1
+convubw t2, s2
+mullw t2, t2, p2
+addw t1, t1, t2
+shruw t1, t1, 8
+convsuswb d1, t1
+
+
+.function cogorc_convert_I420_UYVY
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 2 y1 guint8
+.source 2 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw d1, uv, y1
+x2 mergebw d2, uv, y2
+
+
+.function cogorc_convert_I420_YUY2
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 2 y1 guint8
+.source 2 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw d1, y1, uv
+x2 mergebw d2, y2, uv
+
+
+
+.function cogorc_convert_I420_AYUV
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 1 y1 guint8
+.source 1 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+.temp 1 tu
+.temp 1 tv
+
+loadupdb tu, u
+loadupdb tv, v
+mergebw uv, tu, tv
+mergebw ay, c255, y1
+mergewl d1, ay, uv
+mergebw ay, c255, y2
+mergewl d2, ay, uv
+
+
+.function cogorc_convert_YUY2_I420
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuv1 guint8
+.source 4 yuv2 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 ty
+
+x2 splitwb t1, ty, yuv1
+storew y1, ty
+x2 splitwb t2, ty, yuv2
+storew y2, ty
+x2 avgub t1, t1, t2
+splitwb v, u, t1
+
+
+.function cogorc_convert_UYVY_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 4 uyvy guint8
+
+x2 swapw yuy2, uyvy
+
+
+.function cogorc_planar_chroma_420_422
+.flags 2d
+.dest 1 d1 guint8
+.dest 1 d2 guint8
+.source 1 s guint8
+
+copyb d1, s
+copyb d2, s
+
+
+.function cogorc_planar_chroma_420_444
+.flags 2d
+.dest 2 d1 guint8
+.dest 2 d2 guint8
+.source 1 s guint8
+.temp 2 t
+
+splatbw t, s
+storew d1, t
+storew d2, t
+
+
+.function cogorc_planar_chroma_422_444
+.flags 2d
+.dest 2 d1 guint8
+.source 1 s guint8
+.temp 2 t
+
+splatbw t, s
+storew d1, t
+
+
+.function cogorc_planar_chroma_444_422
+.flags 2d
+.dest 1 d guint8
+.source 2 s guint8
+.temp 1 t1
+.temp 1 t2
+
+splitwb t1, t2, s
+avgub d, t1, t2
+
+
+.function cogorc_planar_chroma_444_420
+.flags 2d
+.dest 1 d guint8
+.source 2 s1 guint8
+.source 2 s2 guint8
+.temp 2 t
+.temp 1 t1
+.temp 1 t2
+
+x2 avgub t, s1, s2
+splitwb t1, t2, t
+avgub d, t1, t2
+
+
+.function cogorc_planar_chroma_422_420
+.flags 2d
+.dest 1 d guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+
+avgub d, s1, s2
+
+
+.function cogorc_convert_YUY2_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 4 yuy2 guint8
+.const 2 c255 0xff
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb uv, yy, yuy2
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_convert_UYVY_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 4 uyvy guint8
+.const 2 c255 0xff
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb yy, uv, uyvy
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_convert_YUY2_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuy2 guint8
+.temp 2 uv
+
+x2 splitwb uv, y, yuy2
+splitwb v, u, uv
+
+
+.function cogorc_convert_UYVY_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 uyvy guint8
+.temp 2 uv
+
+x2 splitwb y, uv, uyvy
+splitwb v, u, uv
+
+
+.function cogorc_convert_YUY2_Y444
+.flags 2d
+.dest 2 y guint8
+.dest 2 uu guint8
+.dest 2 vv guint8
+.source 4 yuy2 guint8
+.temp 2 uv
+.temp 1 u
+.temp 1 v
+
+x2 splitwb uv, y, yuy2
+splitwb v, u, uv
+splatbw uu, u
+splatbw vv, v
+
+
+.function cogorc_convert_UYVY_Y444
+.flags 2d
+.dest 2 y guint8
+.dest 2 uu guint8
+.dest 2 vv guint8
+.source 4 uyvy guint8
+.temp 2 uv
+.temp 1 u
+.temp 1 v
+
+x2 splitwb y, uv, uyvy
+splitwb v, u, uv
+splatbw uu, u
+splatbw vv, v
+
+
+.function cogorc_convert_UYVY_I420
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuv1 guint8
+.source 4 yuv2 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 ty
+
+x2 splitwb ty, t1, yuv1
+storew y1, ty
+x2 splitwb ty, t2, yuv2
+storew y2, ty
+x2 avgub t1, t1, t2
+splitwb v, u, t1
+
+
+
+.function cogorc_convert_AYUV_I420
+.flags 2d
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv1 guint8
+.source 8 ayuv2 guint8
+.temp 4 ay
+.temp 4 uv1
+.temp 4 uv2
+.temp 4 uv
+.temp 2 uu
+.temp 2 vv
+.temp 1 t1
+.temp 1 t2
+
+x2 splitlw uv1, ay, ayuv1
+x2 select1wb y1, ay
+x2 splitlw uv2, ay, ayuv2
+x2 select1wb y2, ay
+x4 avgub uv, uv1, uv2
+x2 splitwb vv, uu, uv
+splitwb t1, t2, uu
+avgub u, t1, t2
+splitwb t1, t2, vv
+avgub v, t1, t2
+
+
+
+.function cogorc_convert_AYUV_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, yy, uv1
+
+
+.function cogorc_convert_AYUV_UYVY
+.flags 2d
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, uv1, yy
+
+
+
+.function cogorc_convert_AYUV_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv guint8
+.temp 4 ayay
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+splitwb v, u, uv1
+x2 select1wb y, ayay
+
+
+.function cogorc_convert_AYUV_Y444
+.flags 2d
+.dest 1 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 ayuv guint8
+.temp 2 ay
+.temp 2 uv
+
+splitlw uv, ay, ayuv
+splitwb v, u, uv
+select1wb y, ay
+
+
+.function cogorc_convert_Y42B_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 2 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw yuy2, y, uv
+
+
+.function cogorc_convert_Y42B_UYVY
+.flags 2d
+.dest 4 uyvy guint8
+.source 2 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw uyvy, uv, y
+
+
+.function cogorc_convert_Y42B_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 2 yy guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+.temp 4 uvuv
+.temp 4 ayay
+
+mergebw uv, u, v
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_convert_Y444_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 2 y guint8
+.source 2 u guint8
+.source 2 v guint8
+.temp 2 uv
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 mergebw uvuv, u, v
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+x2 mergebw yuy2, y, uv
+
+
+.function cogorc_convert_Y444_UYVY
+.flags 2d
+.dest 4 uyvy guint8
+.source 2 y guint8
+.source 2 u guint8
+.source 2 v guint8
+.temp 2 uv
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 mergebw uvuv, u, v
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+x2 mergebw uyvy, uv, y
+
+
+.function cogorc_convert_Y444_AYUV
+.flags 2d
+.dest 4 ayuv guint8
+.source 1 yy guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+
+mergebw uv, u, v
+mergebw ay, c255, yy
+mergewl ayuv, ay, uv
+
+
+
+.function cogorc_convert_AYUV_ARGB
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+
+x4 subb x, ayuv, 128
+splitlw t1, t2, x
+splitwb y, a, t2
+splitwb v, u, t1
+convsbw wy, y
+convsbw wu, u
+convsbw wv, v
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, a, r
+mergebw t2, g, b
+mergewl x, t1, t2
+x4 addb argb, x, 128
+
+
+
+.function cogorc_convert_AYUV_BGRA
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+
+x4 subb x, ayuv, 128
+splitlw t1, t2, x
+splitwb y, a, t2
+splitwb v, u, t1
+convsbw wy, y
+convsbw wu, u
+convsbw wv, v
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, b, g
+mergebw t2, r, a
+mergewl x, t1, t2
+x4 addb argb, x, 128
+
+
+
+
+.function cogorc_convert_AYUV_ABGR
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+
+x4 subb x, ayuv, 128
+splitlw t1, t2, x
+splitwb y, a, t2
+splitwb v, u, t1
+convsbw wy, y
+convsbw wu, u
+convsbw wv, v
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, a, b
+mergebw t2, g, r
+mergewl x, t1, t2
+x4 addb argb, x, 128
+
+
+
+.function cogorc_convert_AYUV_RGBA
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+
+x4 subb x, ayuv, 128
+splitlw t1, t2, x
+splitwb y, a, t2
+splitwb v, u, t1
+convsbw wy, y
+convsbw wu, u
+convsbw wv, v
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, r, g
+mergebw t2, b, a
+mergewl x, t1, t2
+x4 addb argb, x, 128
+
+
+
+.function cogorc_convert_I420_BGRA
+.dest 4 argb guint8
+.source 1 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 t3
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+.const 1 c128 128
+
+subb t3, y, c128
+convsbw wy, t3
+loadupib t3, u
+subb t3, t3, c128
+convsbw wu, t3
+loadupib t3, v
+subb t3, t3, c128
+convsbw wv, t3
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, b, g
+mergebw t2, r, 255
+mergewl x, t1, t2
+x4 addb argb, x, c128
+
+
+
+.function cogorc_convert_I420_BGRA_avg
+.dest 4 argb guint8
+.source 1 y guint8
+.source 1 u1 guint8
+.source 1 u2 guint8
+.source 1 v1 guint8
+.source 1 v2 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 1 t3
+.temp 1 t4
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c8 8
+.const 1 c128 128
+
+subb t3, y, c128
+convsbw wy, t3
+loadupib t3, u1
+loadupib t4, u2
+avgub t3, t3, t4
+subb t3, t3, c128
+convsbw wu, t3
+loadupib t3, v1
+loadupib t4, v2
+avgub t3, t3, t4
+subb t3, t3, c128
+convsbw wv, t3
+
+mullw t1, wy, 42
+shrsw t1, t1, c8
+addssw wy, wy, t1
+
+addssw wr, wy, wv
+mullw t1, wv, 103
+shrsw t1, t1, c8
+subssw wr, wr, t1
+addssw wr, wr, wv
+
+addssw wb, wy, wu
+addssw wb, wb, wu
+mullw t1, wu, 4
+shrsw t1, t1, c8
+addssw wb, wb, t1
+
+mullw t1, wu, 100
+shrsw t1, t1, c8
+subssw wg, wy, t1
+mullw t1, wv, 104
+shrsw t1, t1, c8
+subssw wg, wg, t1
+subssw wg, wg, t1
+
+convssswb r, wr
+convssswb g, wg
+convssswb b, wb
+
+mergebw t1, b, g
+mergebw t2, r, 255
+mergewl x, t1, t2
+x4 addb argb, x, c128
+
+
+
+.function cogorc_getline_I420
+.dest 4 d guint8
+.source 1 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+.temp 1 tu
+.temp 1 tv
+
+loadupdb tu, u
+loadupdb tv, v
+mergebw uv, tu, tv
+mergebw ay, c255, y
+mergewl d, ay, uv
+
+.function cogorc_getline_YUV9
+.dest 8 d guint8
+.source 2 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 tuv
+.temp 4 ay
+.temp 4 uv
+.temp 1 tu
+.temp 1 tv
+
+loadupdb tu, u
+loadupdb tv, v
+mergebw tuv, tu, tv
+mergewl uv, tuv, tuv
+x2 mergebw ay, c255, y
+x2 mergewl d, ay, uv
+
+.function cogorc_getline_YUY2
+.dest 8 ayuv guint8
+.source 4 yuy2 guint8
+.const 2 c255 0xff
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb uv, yy, yuy2
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_getline_UYVY
+.dest 8 ayuv guint8
+.source 4 uyvy guint8
+.const 2 c255 0xff
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb yy, uv, uyvy
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_getline_YVYU
+.dest 8 ayuv guint8
+.source 4 uyvy guint8
+.const 2 c255 0xff
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb uv, yy, uyvy
+swapw uv, uv
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_getline_Y42B
+.dest 8 ayuv guint8
+.source 2 yy guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+.temp 4 uvuv
+.temp 4 ayay
+
+mergebw uv, u, v
+x2 mergebw ayay, c255, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function cogorc_getline_Y444
+.dest 4 ayuv guint8
+.source 1 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 2 ay
+
+mergebw uv, u, v
+mergebw ay, c255, y
+mergewl ayuv, ay, uv
+
+
+.function cogorc_getline_Y800
+.dest 4 ayuv guint8
+.source 1 y guint8
+.const 1 c255 255
+.const 2 c0x8080 0x8080
+.temp 2 ay
+
+mergebw ay, c255, y
+mergewl ayuv, ay, c0x8080
+
+.function cogorc_getline_Y16
+.dest 4 ayuv guint8
+.source 2 y guint8
+.const 1 c255 255
+.const 2 c0x8080 0x8080
+.temp 2 ay
+.temp 1 yb
+
+convhwb yb, y
+mergebw ay, c255, yb
+mergewl ayuv, ay, c0x8080
+
+.function cogorc_getline_BGRA
+.dest 4 argb guint8
+.source 4 bgra guint8
+
+swapl argb, bgra
+
+
+.function cogorc_getline_ABGR
+.dest 4 argb guint8
+.source 4 abgr guint8
+.temp 1 a
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 2 gr
+.temp 2 ab
+.temp 2 ar
+.temp 2 gb
+
+splitlw gr, ab, abgr
+splitwb r, g, gr
+splitwb b, a, ab
+mergebw ar, a, r
+mergebw gb, g, b
+mergewl argb, ar, gb
+
+
+.function cogorc_getline_RGBA
+.dest 4 argb guint8
+.source 4 rgba guint8
+.temp 1 a
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 2 rg
+.temp 2 ba
+.temp 2 ar
+.temp 2 gb
+
+splitlw ba, rg, rgba
+splitwb g, r, rg
+splitwb a, b, ba
+mergebw ar, a, r
+mergebw gb, g, b
+mergewl argb, ar, gb
+
+
+.function cogorc_getline_NV12
+.dest 8 d guint8
+.source 2 y guint8
+.source 2 uv guint8
+.const 1 c255 255
+.temp 4 ay
+.temp 4 uvuv
+
+mergewl uvuv, uv, uv
+x2 mergebw ay, c255, y
+x2 mergewl d, ay, uvuv
+
+
+.function cogorc_getline_NV21
+.dest 8 d guint8
+.source 2 y guint8
+.source 2 vu guint8
+.const 1 c255 255
+.temp 2 uv
+.temp 4 ay
+.temp 4 uvuv
+
+swapw uv, vu
+mergewl uvuv, uv, uv
+x2 mergebw ay, c255, y
+x2 mergewl d, ay, uvuv
+
+.function cogorc_getline_A420
+.dest 4 d guint8
+.source 1 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.source 1 a guint8
+.temp 2 uv
+.temp 2 ay
+.temp 1 tu
+.temp 1 tv
+
+loadupdb tu, u
+loadupdb tv, v
+mergebw uv, tu, tv
+mergebw ay, a, y
+mergewl d, ay, uv
+
+.function cogorc_putline_I420
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv guint8
+.temp 4 ay
+.temp 4 uv
+.temp 2 uu
+.temp 2 vv
+.temp 1 t1
+.temp 1 t2
+
+x2 splitlw uv, ay, ayuv
+x2 select1wb y, ay
+x2 splitwb vv, uu, uv
+splitwb t1, t2, uu
+avgub u, t1, t2
+splitwb t1, t2, vv
+avgub v, t1, t2
+
+
+
+.function cogorc_putline_YUY2
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, yy, uv1
+
+
+.function cogorc_putline_YVYU
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+swapw uv1, uv1
+x2 mergebw yuy2, yy, uv1
+
+
+.function cogorc_putline_UYVY
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, uv1, yy
+
+
+
+.function cogorc_putline_Y42B
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv guint8
+.temp 4 ayay
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+splitwb v, u, uv1
+x2 select1wb y, ayay
+
+
+.function cogorc_putline_Y444
+.dest 1 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 ayuv guint8
+.temp 2 ay
+.temp 2 uv
+
+splitlw uv, ay, ayuv
+splitwb v, u, uv
+select1wb y, ay
+
+
+.function cogorc_putline_Y800
+.dest 1 y guint8
+.source 4 ayuv guint8
+.temp 2 ay
+
+select0lw ay, ayuv
+select1wb y, ay
+
+.function cogorc_putline_Y16
+.dest 2 y guint8
+.source 4 ayuv guint8
+.temp 2 ay
+.temp 1 yb
+
+select0lw ay, ayuv
+select1wb yb, ay
+convubw ay, yb
+shlw y, ay, 8
+
+.function cogorc_putline_BGRA
+.dest 4 bgra guint8
+.source 4 argb guint8
+
+swapl bgra, argb
+
+
+.function cogorc_putline_ABGR
+.dest 4 abgr guint8
+.source 4 argb guint8
+.temp 1 a
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 2 gr
+.temp 2 ab
+.temp 2 ar
+.temp 2 gb
+
+splitlw gb, ar, argb
+splitwb b, g, gb
+splitwb r, a, ar
+mergebw ab, a, b
+mergebw gr, g, r
+mergewl abgr, ab, gr
+
+
+.function cogorc_putline_RGBA
+.dest 4 rgba guint8
+.source 4 argb guint8
+.temp 1 a
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 2 rg
+.temp 2 ba
+.temp 2 ar
+.temp 2 gb
+
+splitlw gb, ar, argb
+splitwb b, g, gb
+splitwb r, a, ar
+mergebw ba, b, a
+mergebw rg, r, g
+mergewl rgba, rg, ba
+
+
+.function cogorc_putline_NV12
+.dest 2 y guint8
+.dest 2 uv guint8
+.source 8 ayuv guint8
+.temp 4 ay
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 splitlw uvuv, ay, ayuv
+x2 select1wb y, ay
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+
+
+.function cogorc_putline_NV21
+.dest 2 y guint8
+.dest 2 vu guint8
+.source 8 ayuv guint8
+.temp 4 ay
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+.temp 2 uv
+
+x2 splitlw uvuv, ay, ayuv
+x2 select1wb y, ay
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+swapw vu, uv
+
+.function cogorc_putline_A420
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.dest 2 a guint8
+.source 8 ayuv guint8
+.temp 4 ay
+.temp 4 uv
+.temp 2 uu
+.temp 2 vv
+.temp 1 t1
+.temp 1 t2
+
+x2 splitlw uv, ay, ayuv
+x2 select1wb y, ay
+x2 select0wb a, ay
+x2 splitwb vv, uu, uv
+splitwb t1, t2, uu
+avgub u, t1, t2
+splitwb t1, t2, vv
+avgub v, t1, t2
diff --git a/gst/videoconvert/videoconvert.c b/gst/videoconvert/videoconvert.c
new file mode 100644
index 0000000..690d4e0
--- /dev/null
+++ b/gst/videoconvert/videoconvert.c
@@ -0,0 +1,2386 @@
+/* GStreamer
+ * Copyright (C) 2010 David Schleef <ds@schleef.org>
+ * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "videoconvert.h"
+#include <glib.h>
+#include <string.h>
+#include "gstvideoconvertorc.h"
+
+
+static void videoconvert_convert_generic (VideoConvert * convert,
+    GstVideoFrame * dest, const GstVideoFrame * src);
+static void videoconvert_convert_lookup_fastpath (VideoConvert * convert);
+static void videoconvert_convert_lookup_getput (VideoConvert * convert);
+static void videoconvert_dither_none (VideoConvert * convert, int j);
+static void videoconvert_dither_verterr (VideoConvert * convert, int j);
+static void videoconvert_dither_halftone (VideoConvert * convert, int j);
+
+
+VideoConvert *
+videoconvert_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
+    GstVideoFormat from_format, ColorSpaceColorSpec from_spec,
+    int width, int height)
+{
+  const GstVideoFormatInfo *to_info, *from_info;
+  VideoConvert *convert;
+  int i;
+
+  from_info = gst_video_format_get_info (from_format);
+  to_info = gst_video_format_get_info (to_format);
+
+  g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_RGB (to_info)
+      || to_spec == COLOR_SPEC_RGB, NULL);
+  g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_YUV (to_info)
+      || to_spec == COLOR_SPEC_YUV_BT709
+      || to_spec == COLOR_SPEC_YUV_BT470_6, NULL);
+  g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (to_info)
+      || GST_VIDEO_FORMAT_INFO_IS_YUV (to_info)
+      || (GST_VIDEO_FORMAT_INFO_IS_GRAY (to_info) &&
+          to_spec == COLOR_SPEC_GRAY), NULL);
+
+  g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_RGB (from_info)
+      || from_spec == COLOR_SPEC_RGB, NULL);
+  g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_YUV (from_info)
+      || from_spec == COLOR_SPEC_YUV_BT709
+      || from_spec == COLOR_SPEC_YUV_BT470_6, NULL);
+  g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (from_info)
+      || GST_VIDEO_FORMAT_INFO_IS_YUV (from_info)
+      || (GST_VIDEO_FORMAT_INFO_IS_GRAY (from_info) &&
+          from_spec == COLOR_SPEC_GRAY), NULL);
+
+  convert = g_malloc (sizeof (VideoConvert));
+  memset (convert, 0, sizeof (VideoConvert));
+
+  convert->to_format = to_format;
+  convert->to_spec = to_spec;
+  convert->from_format = from_format;
+  convert->from_spec = from_spec;
+  convert->height = height;
+  convert->width = width;
+  convert->convert = videoconvert_convert_generic;
+  convert->dither16 = videoconvert_dither_none;
+
+  if (to_info->depth[0] > 8 || from_info->depth[0] > 8) {
+    convert->use_16bit = TRUE;
+  } else {
+    convert->use_16bit = FALSE;
+  }
+
+  videoconvert_convert_lookup_fastpath (convert);
+  videoconvert_convert_lookup_getput (convert);
+
+  convert->tmpline = g_malloc (sizeof (guint8) * (width + 8) * 4);
+  convert->tmpline16 = g_malloc (sizeof (guint16) * (width + 8) * 4);
+  convert->errline = g_malloc (sizeof (guint16) * width * 4);
+
+  if (to_format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
+    /* build poor man's palette, taken from ffmpegcolorspace */
+    static const guint8 pal_value[6] = { 0x00, 0x33, 0x66, 0x99, 0xcc, 0xff };
+    guint32 *palette;
+    gint r, g, b;
+
+    convert->palette = palette = g_new (guint32, 256);
+    i = 0;
+    for (r = 0; r < 6; r++) {
+      for (g = 0; g < 6; g++) {
+        for (b = 0; b < 6; b++) {
+          palette[i++] =
+              (0xffU << 24) | (pal_value[r] << 16) | (pal_value[g] << 8) |
+              pal_value[b];
+        }
+      }
+    }
+    palette[i++] = 0;           /* 100% transparent, i == 6*6*6 */
+    while (i < 256)
+      palette[i++] = 0xff000000;
+  }
+
+  return convert;
+}
+
+void
+videoconvert_convert_free (VideoConvert * convert)
+{
+  g_free (convert->palette);
+  g_free (convert->tmpline);
+  g_free (convert->tmpline16);
+  g_free (convert->errline);
+
+  g_free (convert);
+}
+
+void
+videoconvert_convert_set_interlaced (VideoConvert * convert,
+    gboolean interlaced)
+{
+  convert->interlaced = interlaced;
+}
+
+void
+videoconvert_convert_set_dither (VideoConvert * convert, int type)
+{
+  switch (type) {
+    case 0:
+    default:
+      convert->dither16 = videoconvert_dither_none;
+      break;
+    case 1:
+      convert->dither16 = videoconvert_dither_verterr;
+      break;
+    case 2:
+      convert->dither16 = videoconvert_dither_halftone;
+      break;
+  }
+}
+
+void
+videoconvert_convert_set_palette (VideoConvert * convert,
+    const guint32 * palette)
+{
+  if (convert->palette == NULL) {
+    convert->palette = g_malloc (sizeof (guint32) * 256);
+  }
+  memcpy (convert->palette, palette, sizeof (guint32) * 256);
+}
+
+const guint32 *
+videoconvert_convert_get_palette (VideoConvert * convert)
+{
+  return convert->palette;
+}
+
+void
+videoconvert_convert_convert (VideoConvert * convert,
+    GstVideoFrame * dest, const GstVideoFrame * src)
+{
+  convert->convert (convert, dest, src);
+}
+
+/* Line conversion to AYUV */
+
+#define FRAME_GET_STRIDE(dir, comp) \
+  ((dir)->info.stride[comp])
+#define FRAME_GET_LINE(dir, comp, line) \
+  (((guint8*)(dir)->data[comp]) + FRAME_GET_STRIDE (dir, comp) * (line))
+
+static void
+getline_I420 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_I420 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j >> 1),
+      FRAME_GET_LINE (src, 2, j >> 1), convert->width);
+}
+
+static void
+putline_I420 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_I420 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j >> 1),
+      FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
+}
+
+static void
+getline_YV12 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_I420 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j >> 1),
+      FRAME_GET_LINE (src, 2, j >> 1), convert->width);
+}
+
+static void
+putline_YV12 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_I420 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j >> 1),
+      FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
+}
+
+static void
+getline_YUY2 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_YUY2 (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
+}
+
+static void
+putline_YUY2 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_YUY2 (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
+}
+
+static void
+getline_UYVY (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_UYVY (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
+}
+
+static void
+putline_UYVY (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_UYVY (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
+}
+
+static void
+getline_YVYU (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_YVYU (dest, FRAME_GET_LINE (src, 0, j), convert->width / 2);
+}
+
+static void
+putline_YVYU (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_YVYU (FRAME_GET_LINE (dest, 0, j), src, convert->width / 2);
+}
+
+static void
+getline_v308 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = srcline[i * 3 + 0];
+    dest[i * 4 + 2] = srcline[i * 3 + 1];
+    dest[i * 4 + 3] = srcline[i * 3 + 2];
+  }
+}
+
+static void
+putline_v308 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i * 3 + 0] = src[i * 4 + 1];
+    destline[i * 3 + 1] = src[i * 4 + 2];
+    destline[i * 3 + 2] = src[i * 4 + 3];
+  }
+}
+
+static void
+getline_AYUV (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  memcpy (dest, FRAME_GET_LINE (src, 0, j), convert->width * 4);
+}
+
+static void
+putline_AYUV (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  memcpy (FRAME_GET_LINE (dest, 0, j), src, convert->width * 4);
+}
+
+#if 0
+static void
+getline_v410 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = GST_READ_UINT16_LE (srcline + i * 8 + 0);
+    dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 8 + 2);
+    dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + i * 8 + 4);
+    dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + i * 8 + 6);
+  }
+}
+#endif
+
+static void
+getline_v210 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+
+  for (i = 0; i < convert->width; i += 6) {
+    guint32 a0, a1, a2, a3;
+    guint16 y0, y1, y2, y3, y4, y5;
+    guint16 u0, u2, u4;
+    guint16 v0, v2, v4;
+
+    a0 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 0);
+    a1 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 4);
+    a2 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 8);
+    a3 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 12);
+
+    u0 = ((a0 >> 0) & 0x3ff) >> 2;
+    y0 = ((a0 >> 10) & 0x3ff) >> 2;
+    v0 = ((a0 >> 20) & 0x3ff) >> 2;
+    y1 = ((a1 >> 0) & 0x3ff) >> 2;
+
+    u2 = ((a1 >> 10) & 0x3ff) >> 2;
+    y2 = ((a1 >> 20) & 0x3ff) >> 2;
+    v2 = ((a2 >> 0) & 0x3ff) >> 2;
+    y3 = ((a2 >> 10) & 0x3ff) >> 2;
+
+    u4 = ((a2 >> 20) & 0x3ff) >> 2;
+    y4 = ((a3 >> 0) & 0x3ff) >> 2;
+    v4 = ((a3 >> 10) & 0x3ff) >> 2;
+    y5 = ((a3 >> 20) & 0x3ff) >> 2;
+
+    dest[4 * (i + 0) + 0] = 0xff;
+    dest[4 * (i + 0) + 1] = y0;
+    dest[4 * (i + 0) + 2] = u0;
+    dest[4 * (i + 0) + 3] = v0;
+
+    dest[4 * (i + 1) + 0] = 0xff;
+    dest[4 * (i + 1) + 1] = y1;
+    dest[4 * (i + 1) + 2] = u0;
+    dest[4 * (i + 1) + 3] = v0;
+
+    dest[4 * (i + 2) + 0] = 0xff;
+    dest[4 * (i + 2) + 1] = y2;
+    dest[4 * (i + 2) + 2] = u2;
+    dest[4 * (i + 2) + 3] = v2;
+
+    dest[4 * (i + 3) + 0] = 0xff;
+    dest[4 * (i + 3) + 1] = y3;
+    dest[4 * (i + 3) + 2] = u2;
+    dest[4 * (i + 3) + 3] = v2;
+
+    dest[4 * (i + 4) + 0] = 0xff;
+    dest[4 * (i + 4) + 1] = y4;
+    dest[4 * (i + 4) + 2] = u4;
+    dest[4 * (i + 4) + 3] = v4;
+
+    dest[4 * (i + 5) + 0] = 0xff;
+    dest[4 * (i + 5) + 1] = y5;
+    dest[4 * (i + 5) + 2] = u4;
+    dest[4 * (i + 5) + 3] = v4;
+
+  }
+
+}
+
+static void
+putline_v210 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+
+  for (i = 0; i < convert->width + 5; i += 6) {
+    guint32 a0, a1, a2, a3;
+    guint16 y0, y1, y2, y3, y4, y5;
+    guint16 u0, u1, u2;
+    guint16 v0, v1, v2;
+
+    y0 = src[4 * (i + 0) + 1] << 2;
+    y1 = src[4 * (i + 1) + 1] << 2;
+    y2 = src[4 * (i + 2) + 1] << 2;
+    y3 = src[4 * (i + 3) + 1] << 2;
+    y4 = src[4 * (i + 4) + 1] << 2;
+    y5 = src[4 * (i + 5) + 1] << 2;
+
+    u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2]) << 1;
+    u1 = (src[4 * (i + 2) + 2] + src[4 * (i + 3) + 2]) << 1;
+    u2 = (src[4 * (i + 4) + 2] + src[4 * (i + 5) + 2]) << 1;
+
+    v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3]) << 1;
+    v1 = (src[4 * (i + 2) + 3] + src[4 * (i + 3) + 3]) << 1;
+    v2 = (src[4 * (i + 4) + 3] + src[4 * (i + 5) + 3]) << 1;
+
+    a0 = u0 | (y0 << 10) | (v0 << 20);
+    a1 = y1 | (u1 << 10) | (y2 << 20);
+    a2 = v1 | (y3 << 10) | (u2 << 20);
+    a3 = y4 | (v2 << 10) | (y5 << 20);
+
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 0, a0);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 4, a1);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 8, a2);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 12, a3);
+  }
+}
+
+static void
+getline16_v210 (VideoConvert * convert, guint16 * dest,
+    const GstVideoFrame * src, int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+
+  for (i = 0; i < convert->width; i += 6) {
+    guint32 a0, a1, a2, a3;
+    guint16 y0, y1, y2, y3, y4, y5;
+    guint16 u0, u2, u4;
+    guint16 v0, v2, v4;
+
+    a0 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 0);
+    a1 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 4);
+    a2 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 8);
+    a3 = GST_READ_UINT32_LE (srcline + (i / 6) * 16 + 12);
+
+    u0 = ((a0 >> 0) & 0x3ff) << 6;
+    y0 = ((a0 >> 10) & 0x3ff) << 6;
+    v0 = ((a0 >> 20) & 0x3ff) << 6;
+    y1 = ((a1 >> 0) & 0x3ff) << 6;
+
+    u2 = ((a1 >> 10) & 0x3ff) << 6;
+    y2 = ((a1 >> 20) & 0x3ff) << 6;
+    v2 = ((a2 >> 0) & 0x3ff) << 6;
+    y3 = ((a2 >> 10) & 0x3ff) << 6;
+
+    u4 = ((a2 >> 20) & 0x3ff) << 6;
+    y4 = ((a3 >> 0) & 0x3ff) << 6;
+    v4 = ((a3 >> 10) & 0x3ff) << 6;
+    y5 = ((a3 >> 20) & 0x3ff) << 6;
+
+    dest[4 * (i + 0) + 0] = 0xffff;
+    dest[4 * (i + 0) + 1] = y0;
+    dest[4 * (i + 0) + 2] = u0;
+    dest[4 * (i + 0) + 3] = v0;
+
+    dest[4 * (i + 1) + 0] = 0xffff;
+    dest[4 * (i + 1) + 1] = y1;
+    dest[4 * (i + 1) + 2] = u0;
+    dest[4 * (i + 1) + 3] = v0;
+
+    dest[4 * (i + 2) + 0] = 0xffff;
+    dest[4 * (i + 2) + 1] = y2;
+    dest[4 * (i + 2) + 2] = u2;
+    dest[4 * (i + 2) + 3] = v2;
+
+    dest[4 * (i + 3) + 0] = 0xffff;
+    dest[4 * (i + 3) + 1] = y3;
+    dest[4 * (i + 3) + 2] = u2;
+    dest[4 * (i + 3) + 3] = v2;
+
+    dest[4 * (i + 4) + 0] = 0xffff;
+    dest[4 * (i + 4) + 1] = y4;
+    dest[4 * (i + 4) + 2] = u4;
+    dest[4 * (i + 4) + 3] = v4;
+
+    dest[4 * (i + 5) + 0] = 0xffff;
+    dest[4 * (i + 5) + 1] = y5;
+    dest[4 * (i + 5) + 2] = u4;
+    dest[4 * (i + 5) + 3] = v4;
+
+  }
+}
+
+static void
+putline16_v210 (VideoConvert * convert, GstVideoFrame * dest,
+    const guint16 * src, int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+
+  for (i = 0; i < convert->width + 5; i += 6) {
+    guint32 a0, a1, a2, a3;
+    guint16 y0, y1, y2, y3, y4, y5;
+    guint16 u0, u1, u2;
+    guint16 v0, v1, v2;
+
+    y0 = src[4 * (i + 0) + 1] >> 6;
+    y1 = src[4 * (i + 1) + 1] >> 6;
+    y2 = src[4 * (i + 2) + 1] >> 6;
+    y3 = src[4 * (i + 3) + 1] >> 6;
+    y4 = src[4 * (i + 4) + 1] >> 6;
+    y5 = src[4 * (i + 5) + 1] >> 6;
+
+    u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2] + 1) >> 7;
+    u1 = (src[4 * (i + 2) + 2] + src[4 * (i + 3) + 2] + 1) >> 7;
+    u2 = (src[4 * (i + 4) + 2] + src[4 * (i + 5) + 2] + 1) >> 7;
+
+    v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3] + 1) >> 7;
+    v1 = (src[4 * (i + 2) + 3] + src[4 * (i + 3) + 3] + 1) >> 7;
+    v2 = (src[4 * (i + 4) + 3] + src[4 * (i + 5) + 3] + 1) >> 7;
+
+    a0 = u0 | (y0 << 10) | (v0 << 20);
+    a1 = y1 | (u1 << 10) | (y2 << 20);
+    a2 = v1 | (y3 << 10) | (u2 << 20);
+    a3 = y4 | (v2 << 10) | (y5 << 20);
+
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 0, a0);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 4, a1);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 8, a2);
+    GST_WRITE_UINT32_LE (destline + (i / 6) * 16 + 12, a3);
+  }
+}
+
+static void
+getline_v216 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 4 + 2) >> 8;
+    dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 0) >> 8;
+    dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 4) >> 8;
+  }
+}
+
+static void
+putline_v216 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width / 2; i++) {
+    GST_WRITE_UINT16_LE (destline + i * 8 + 0, src[(i * 2 + 0) * 4 + 2] << 8);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 2, src[(i * 2 + 0) * 4 + 1] << 8);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 4, src[(i * 2 + 1) * 4 + 3] << 8);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 8, src[(i * 2 + 0) * 4 + 1] << 8);
+  }
+}
+
+static void
+getline16_v216 (VideoConvert * convert, guint16 * dest,
+    const GstVideoFrame * src, int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xffff;
+    dest[i * 4 + 1] = GST_READ_UINT16_LE (srcline + i * 4 + 2);
+    dest[i * 4 + 2] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 0);
+    dest[i * 4 + 3] = GST_READ_UINT16_LE (srcline + (i >> 1) * 8 + 4);
+  }
+}
+
+static void
+putline16_v216 (VideoConvert * convert, GstVideoFrame * dest,
+    const guint16 * src, int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width / 2; i++) {
+    GST_WRITE_UINT16_LE (destline + i * 8 + 0, src[(i * 2 + 0) * 4 + 2]);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 2, src[(i * 2 + 0) * 4 + 1]);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 4, src[(i * 2 + 1) * 4 + 3]);
+    GST_WRITE_UINT16_LE (destline + i * 8 + 8, src[(i * 2 + 0) * 4 + 1]);
+  }
+}
+
+static void
+getline_Y41B (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_YUV9 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j), FRAME_GET_LINE (src, 2, j),
+      convert->width / 2);
+}
+
+static void
+putline_Y41B (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destlineY = FRAME_GET_LINE (dest, 0, j);
+  guint8 *destlineU = FRAME_GET_LINE (dest, 1, j);
+  guint8 *destlineV = FRAME_GET_LINE (dest, 2, j);
+
+  for (i = 0; i < convert->width - 3; i += 4) {
+    destlineY[i] = src[i * 4 + 1];
+    destlineY[i + 1] = src[i * 4 + 5];
+    destlineY[i + 2] = src[i * 4 + 9];
+    destlineY[i + 3] = src[i * 4 + 13];
+
+    destlineU[i >> 2] =
+        (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 + 14] +
+        2) >> 2;
+    destlineV[i >> 2] =
+        (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 + 15] +
+        2) >> 2;
+  }
+
+  if (i == convert->width - 3) {
+    destlineY[i] = src[i * 4 + 1];
+    destlineY[i + 1] = src[i * 4 + 5];
+    destlineY[i + 2] = src[i * 4 + 9];
+
+    destlineU[i >> 2] =
+        (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + 1) / 3;
+    destlineV[i >> 2] =
+        (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + 1) / 3;
+  } else if (i == convert->width - 2) {
+    destlineY[i] = src[i * 4 + 1];
+    destlineY[i + 1] = src[i * 4 + 5];
+
+    destlineU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6] + 1) >> 1;
+    destlineV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7] + 1) >> 1;
+  } else if (i == convert->width - 1) {
+    destlineY[i + 1] = src[i * 4 + 5];
+
+    destlineU[i >> 2] = src[i * 4 + 2];
+    destlineV[i >> 2] = src[i * 4 + 3];
+  }
+}
+
+static void
+getline_Y42B (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_Y42B (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j),
+      FRAME_GET_LINE (src, 2, j), convert->width / 2);
+}
+
+static void
+putline_Y42B (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_Y42B (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j),
+      FRAME_GET_LINE (dest, 2, j), src, convert->width / 2);
+}
+
+static void
+getline_Y444 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_Y444 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j), FRAME_GET_LINE (src, 2, j), convert->width);
+}
+
+static void
+putline_Y444 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_Y444 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j),
+      FRAME_GET_LINE (dest, 2, j), src, convert->width);
+}
+
+static void
+getline_Y800 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_Y800 (dest, FRAME_GET_LINE (src, 0, j), convert->width);
+}
+
+static void
+putline_Y800 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_Y800 (FRAME_GET_LINE (dest, 0, j), src, convert->width);
+}
+
+static void
+getline_Y16 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_Y16 (dest, FRAME_GET_LINE (src, 0, j), convert->width);
+}
+
+static void
+putline_Y16 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_Y16 (FRAME_GET_LINE (dest, 0, j), src, convert->width);
+}
+
+static void
+getline_RGB16 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = ((srcline[i] >> 11) & 0x1f) << 3;
+    dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x3f) << 2;
+    dest[i * 4 + 3] = ((srcline[i]) & 0x1f) << 3;
+  }
+}
+
+static void
+putline_RGB16 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i] =
+        ((src[i * 4 + 1] >> 3) << 11) | ((src[i * 4 +
+                2] >> 2) << 5) | (src[i * 4 + 3] >> 3);
+  }
+}
+
+static void
+getline_BGR16 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 3] = ((srcline[i] >> 11) & 0x1f) << 3;
+    dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x3f) << 2;
+    dest[i * 4 + 1] = ((srcline[i]) & 0x1f) << 3;
+  }
+}
+
+static void
+putline_BGR16 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i] =
+        ((src[i * 4 + 3] >> 3) << 11) | ((src[i * 4 +
+                2] >> 2) << 5) | (src[i * 4 + 1] >> 3);
+  }
+}
+
+static void
+getline_RGB15 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = ((srcline[i] >> 10) & 0x1f) << 3;
+    dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x1f) << 3;
+    dest[i * 4 + 3] = ((srcline[i]) & 0x1f) << 3;
+  }
+}
+
+static void
+putline_RGB15 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i] =
+        ((src[i * 4 + 1] >> 3) << 10) | ((src[i * 4 +
+                2] >> 3) << 5) | (src[i * 4 + 3] >> 3);
+  }
+}
+
+static void
+getline_BGR15 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 3] = ((srcline[i] >> 10) & 0x1f) << 3;
+    dest[i * 4 + 2] = ((srcline[i] >> 5) & 0x1f) << 3;
+    dest[i * 4 + 1] = ((srcline[i]) & 0x1f) << 3;
+  }
+}
+
+static void
+putline_BGR15 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i] =
+        ((src[i * 4 + 3] >> 3) << 10) | ((src[i * 4 +
+                2] >> 3) << 5) | (src[i * 4 + 1] >> 3);
+  }
+}
+
+static void
+getline_BGRA (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_BGRA (dest, FRAME_GET_LINE (src, 0, j), convert->width);
+}
+
+static void
+putline_BGRA (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_BGRA (FRAME_GET_LINE (dest, 0, j), src, convert->width);
+}
+
+static void
+getline_ABGR (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_ABGR (dest, FRAME_GET_LINE (src, 0, j), convert->width);
+}
+
+static void
+putline_ABGR (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_ABGR (FRAME_GET_LINE (dest, 0, j), src, convert->width);
+}
+
+static void
+getline_RGBA (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_RGBA (dest, FRAME_GET_LINE (src, 0, j), convert->width);
+}
+
+static void
+putline_RGBA (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_RGBA (FRAME_GET_LINE (dest, 0, j), src, convert->width);
+}
+
+static void
+getline_RGB (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = srcline[i * 3 + 0];
+    dest[i * 4 + 2] = srcline[i * 3 + 1];
+    dest[i * 4 + 3] = srcline[i * 3 + 2];
+  }
+}
+
+static void
+putline_RGB (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i * 3 + 0] = src[i * 4 + 1];
+    destline[i * 3 + 1] = src[i * 4 + 2];
+    destline[i * 3 + 2] = src[i * 4 + 3];
+  }
+}
+
+static void
+getline_BGR (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = srcline[i * 3 + 2];
+    dest[i * 4 + 2] = srcline[i * 3 + 1];
+    dest[i * 4 + 3] = srcline[i * 3 + 0];
+  }
+}
+
+static void
+putline_BGR (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    destline[i * 3 + 0] = src[i * 4 + 3];
+    destline[i * 3 + 1] = src[i * 4 + 2];
+    destline[i * 3 + 2] = src[i * 4 + 1];
+  }
+}
+
+static void
+getline_NV12 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_NV12 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j >> 1), convert->width / 2);
+}
+
+static void
+putline_NV12 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_NV12 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j >> 1), src, convert->width / 2);
+}
+
+static void
+getline_NV21 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_NV21 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 2, j >> 1), convert->width / 2);
+}
+
+static void
+putline_NV21 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_NV21 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 2, j >> 1), src, convert->width / 2);
+}
+
+static void
+getline_UYVP (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i += 2) {
+    guint16 y0, y1;
+    guint16 u0;
+    guint16 v0;
+
+    u0 = (srcline[(i / 2) * 5 + 0] << 2) | (srcline[(i / 2) * 5 + 1] >> 6);
+    y0 = ((srcline[(i / 2) * 5 + 1] & 0x3f) << 4) | (srcline[(i / 2) * 5 +
+            2] >> 4);
+    v0 = ((srcline[(i / 2) * 5 + 2] & 0x0f) << 6) | (srcline[(i / 2) * 5 +
+            3] >> 2);
+    y1 = ((srcline[(i / 2) * 5 + 3] & 0x03) << 8) | srcline[(i / 2) * 5 + 4];
+
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = y0 >> 2;
+    dest[i * 4 + 2] = u0 >> 2;
+    dest[i * 4 + 3] = v0 >> 2;
+    dest[i * 4 + 4] = 0xff;
+    dest[i * 4 + 5] = y1 >> 2;
+    dest[i * 4 + 6] = u0 >> 2;
+    dest[i * 4 + 7] = v0 >> 2;
+  }
+}
+
+static void
+putline_UYVP (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width; i += 2) {
+    guint16 y0, y1;
+    guint16 u0;
+    guint16 v0;
+
+    y0 = src[4 * (i + 0) + 1];
+    y1 = src[4 * (i + 1) + 1];
+    u0 = (src[4 * (i + 0) + 2] + src[4 * (i + 1) + 2] + 1) >> 1;
+    v0 = (src[4 * (i + 0) + 3] + src[4 * (i + 1) + 3] + 1) >> 1;
+
+    destline[(i / 2) * 5 + 0] = u0;
+    destline[(i / 2) * 5 + 1] = y0 >> 2;
+    destline[(i / 2) * 5 + 2] = (y0 << 6) | (v0 >> 4);
+    destline[(i / 2) * 5 + 3] = (v0 << 4) | (y1 >> 2);
+    destline[(i / 2) * 5 + 4] = (y1 << 2);
+  }
+}
+
+static void
+getline_A420 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_A420 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j >> 1),
+      FRAME_GET_LINE (src, 2, j >> 1),
+      FRAME_GET_LINE (src, 3, j), convert->width);
+}
+
+static void
+putline_A420 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  cogorc_putline_A420 (FRAME_GET_LINE (dest, 0, j),
+      FRAME_GET_LINE (dest, 1, j >> 1),
+      FRAME_GET_LINE (dest, 2, j >> 1),
+      FRAME_GET_LINE (dest, 3, j), src, convert->width / 2);
+}
+
+static void
+getline_RGB8P (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    guint32 v = convert->palette[srcline[i]];
+    dest[i * 4 + 0] = (v >> 24) & 0xff;
+    dest[i * 4 + 1] = (v >> 16) & 0xff;
+    dest[i * 4 + 2] = (v >> 8) & 0xff;
+    dest[i * 4 + 3] = (v) & 0xff;
+  }
+}
+
+static void
+putline_RGB8P (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  /* Use our poor man's palette, taken from ffmpegcolorspace too */
+  for (i = 0; i < convert->width; i++) {
+    /* crude approximation for alpha ! */
+    if (src[i * 4 + 0] < 0x80)
+      destline[i] = 6 * 6 * 6;
+    else
+      destline[i] =
+          ((((src[i * 4 + 1]) / 47) % 6) * 6 * 6 + (((src[i * 4 +
+                          2]) / 47) % 6) * 6 + (((src[i * 4 + 3]) / 47) % 6));
+  }
+}
+
+
+static void
+getline_YUV9 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  cogorc_getline_YUV9 (dest,
+      FRAME_GET_LINE (src, 0, j),
+      FRAME_GET_LINE (src, 1, j >> 2),
+      FRAME_GET_LINE (src, 2, j >> 2), convert->width / 2);
+}
+
+static void
+putline_YUV9 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destY = FRAME_GET_LINE (dest, 0, j);
+  guint8 *destU = FRAME_GET_LINE (dest, 1, j >> 2);
+  guint8 *destV = FRAME_GET_LINE (dest, 2, j >> 2);
+
+  for (i = 0; i < convert->width - 3; i += 4) {
+    destY[i] = src[i * 4 + 1];
+    destY[i + 1] = src[i * 4 + 5];
+    destY[i + 2] = src[i * 4 + 9];
+    destY[i + 3] = src[i * 4 + 13];
+    if (j % 4 == 0) {
+      destU[i >> 2] =
+          (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 +
+              14]) >> 2;
+      destV[i >> 2] =
+          (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 +
+              15]) >> 2;
+    }
+  }
+
+  if (i == convert->width - 3) {
+    destY[i] = src[i * 4 + 1];
+    destY[i + 1] = src[i * 4 + 5];
+    destY[i + 2] = src[i * 4 + 9];
+    if (j % 4 == 0) {
+      destU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10]) / 3;
+      destV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11]) / 3;
+    }
+  } else if (i == convert->width - 2) {
+    destY[i] = src[i * 4 + 1];
+    destY[i + 1] = src[i * 4 + 5];
+    if (j % 4 == 0) {
+      destU[i >> 2] = (src[i * 4 + 2] + src[i * 4 + 6]) >> 1;
+      destV[i >> 2] = (src[i * 4 + 3] + src[i * 4 + 7]) >> 1;
+    }
+  } else if (i == convert->width - 1) {
+    destY[i] = src[i * 4 + 1];
+    destU[i >> 2] = src[i * 4 + 2];
+    destV[i >> 2] = src[i * 4 + 3];
+  }
+}
+
+static void
+getline_IYU1 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+
+  for (i = 0; i < convert->width - 3; i += 4) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 4] = 0xff;
+    dest[i * 4 + 8] = 0xff;
+    dest[i * 4 + 12] = 0xff;
+    dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
+    dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
+    dest[i * 4 + 9] = srcline[(i >> 2) * 6 + 4];
+    dest[i * 4 + 13] = srcline[(i >> 2) * 6 + 5];
+    dest[i * 4 + 2] = dest[i * 4 + 6] = dest[i * 4 + 10] = dest[i * 4 + 14] =
+        srcline[(i >> 2) * 6 + 0];
+    dest[i * 4 + 3] = dest[i * 4 + 7] = dest[i * 4 + 11] = dest[i * 4 + 15] =
+        srcline[(i >> 2) * 6 + 3];
+  }
+
+  if (i == convert->width - 3) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 4] = 0xff;
+    dest[i * 4 + 8] = 0xff;
+    dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
+    dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
+    dest[i * 4 + 9] = srcline[(i >> 2) * 6 + 4];
+    dest[i * 4 + 2] = dest[i * 4 + 6] = dest[i * 4 + 10] =
+        srcline[(i >> 2) * 6 + 0];
+    dest[i * 4 + 3] = dest[i * 4 + 7] = dest[i * 4 + 11] =
+        srcline[(i >> 2) * 6 + 3];
+  } else if (i == convert->width - 2) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 4] = 0xff;
+    dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
+    dest[i * 4 + 5] = srcline[(i >> 2) * 6 + 2];
+    dest[i * 4 + 2] = dest[i * 4 + 6] = srcline[(i >> 2) * 6 + 0];
+    dest[i * 4 + 3] = dest[i * 4 + 7] = srcline[(i >> 2) * 6 + 3];
+  } else if (i == convert->width - 1) {
+    dest[i * 4 + 0] = 0xff;
+    dest[i * 4 + 1] = srcline[(i >> 2) * 6 + 1];
+    dest[i * 4 + 2] = srcline[(i >> 2) * 6 + 0];
+    dest[i * 4 + 3] = srcline[(i >> 2) * 6 + 3];
+  }
+}
+
+static void
+putline_IYU1 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+
+  for (i = 0; i < convert->width - 3; i += 4) {
+    destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
+    destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
+    destline[(i >> 2) * 6 + 4] = src[i * 4 + 9];
+    destline[(i >> 2) * 6 + 5] = src[i * 4 + 13];
+    destline[(i >> 2) * 6 + 0] =
+        (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10] + src[i * 4 +
+            14]) >> 2;
+    destline[(i >> 2) * 6 + 3] =
+        (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11] + src[i * 4 +
+            15]) >> 2;
+  }
+
+  if (i == convert->width - 3) {
+    destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
+    destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
+    destline[(i >> 2) * 6 + 4] = src[i * 4 + 9];
+    destline[(i >> 2) * 6 + 0] =
+        (src[i * 4 + 2] + src[i * 4 + 6] + src[i * 4 + 10]) / 3;
+    destline[(i >> 2) * 6 + 3] =
+        (src[i * 4 + 3] + src[i * 4 + 7] + src[i * 4 + 11]) / 3;
+  } else if (i == convert->width - 2) {
+    destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
+    destline[(i >> 2) * 6 + 2] = src[i * 4 + 5];
+    destline[(i >> 2) * 6 + 0] = (src[i * 4 + 2] + src[i * 4 + 6]) >> 1;
+    destline[(i >> 2) * 6 + 3] = (src[i * 4 + 3] + src[i * 4 + 7]) >> 1;
+  } else if (i == convert->width - 1) {
+    destline[(i >> 2) * 6 + 1] = src[i * 4 + 1];
+    destline[(i >> 2) * 6 + 0] = src[i * 4 + 2];
+    destline[(i >> 2) * 6 + 3] = src[i * 4 + 3];
+  }
+}
+
+static void
+getline_AY64 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint16 *srcline = (const guint16 *) FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width * 4; i++) {
+    dest[i] = srcline[i] >> 8;
+  }
+}
+
+static void
+putline_AY64 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint16 *destline = (guint16 *) FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width * 4; i++) {
+    destline[i] = src[i] << 8;
+  }
+}
+
+static void
+getline16_AY64 (VideoConvert * convert, guint16 * dest,
+    const GstVideoFrame * src, int j)
+{
+  memcpy (dest, FRAME_GET_LINE (src, 0, j), convert->width * 8);
+}
+
+static void
+putline16_AY64 (VideoConvert * convert, GstVideoFrame * dest,
+    const guint16 * src, int j)
+{
+  memcpy (FRAME_GET_LINE (dest, 0, j), src, convert->width * 8);
+}
+
+static void
+getline_r210 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
+    int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    guint8 x;
+    dest[i * 4 + 0] = 0xff;
+    x = GST_READ_UINT32_BE (srcline + i * 4);
+    dest[i * 4 + 1] = (x >> 22) & 0xff;
+    dest[i * 4 + 2] = (x >> 12) & 0xff;
+    dest[i * 4 + 3] = (x >> 2) & 0xff;
+  }
+}
+
+static void
+putline_r210 (VideoConvert * convert, GstVideoFrame * dest, const guint8 * src,
+    int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width / 2; i++) {
+    guint32 x = 0;
+    x |= src[i * 4 + 1] << 22;
+    x |= (src[i * 4 + 1] & 0xc0) << 14;
+    x |= src[i * 4 + 2] << 12;
+    x |= (src[i * 4 + 2] & 0xc0) << 10;
+    x |= src[i * 4 + 3] << 2;
+    x |= (src[i * 4 + 3] & 0xc0) >> 6;
+    GST_WRITE_UINT32_BE (destline + i * 4, x);
+  }
+}
+
+static void
+getline16_r210 (VideoConvert * convert, guint16 * dest,
+    const GstVideoFrame * src, int j)
+{
+  int i;
+  const guint8 *srcline = FRAME_GET_LINE (src, 0, j);
+  for (i = 0; i < convert->width; i++) {
+    guint32 x;
+    dest[i * 4 + 0] = 0xffff;
+    x = GST_READ_UINT32_BE (srcline + i * 4);
+    dest[i * 4 + 1] = ((x >> 14) & 0xffc0) | (x >> 24);
+    dest[i * 4 + 2] = ((x >> 4) & 0xffc0) | ((x >> 14) & 0x3f);
+    dest[i * 4 + 3] = ((x << 6) & 0xffc0) | ((x >> 4) & 0x3f);
+  }
+}
+
+static void
+putline16_r210 (VideoConvert * convert, GstVideoFrame * dest,
+    const guint16 * src, int j)
+{
+  int i;
+  guint8 *destline = FRAME_GET_LINE (dest, 0, j);
+  for (i = 0; i < convert->width / 2; i++) {
+    guint32 x = 0;
+    x |= (src[i * 4 + 1] & 0xffc0) << 14;
+    x |= (src[i * 4 + 2] & 0xffc0) << 4;
+    x |= (src[i * 4 + 3] & 0xffc0) >> 6;
+    GST_WRITE_UINT32_BE (destline + i * 4, x);
+  }
+}
+
+static void
+getline16_convert (VideoConvert * convert, guint16 * dest,
+    const GstVideoFrame * src, int j)
+{
+  int i;
+  convert->getline (convert, convert->tmpline, src, j);
+  for (i = 0; i < convert->width * 4; i++) {
+    dest[i] = convert->tmpline[i] << 8;
+  }
+}
+
+static void
+putline16_convert (VideoConvert * convert, GstVideoFrame * dest,
+    const guint16 * src, int j)
+{
+  int i;
+  for (i = 0; i < convert->width * 4; i++) {
+    convert->tmpline[i] = src[i] >> 8;
+  }
+  convert->putline (convert, dest, convert->tmpline, j);
+}
+
+typedef struct
+{
+  GstVideoFormat format;
+  void (*getline) (VideoConvert * convert, guint8 * dest,
+      const GstVideoFrame * src, int j);
+  void (*putline) (VideoConvert * convert, GstVideoFrame * dest,
+      const guint8 * src, int j);
+  void (*getline16) (VideoConvert * convert, guint16 * dest,
+      const GstVideoFrame * src, int j);
+  void (*putline16) (VideoConvert * convert, GstVideoFrame * dest,
+      const guint16 * src, int j);
+} VideoLine;
+static const VideoLine lines[] = {
+  {GST_VIDEO_FORMAT_I420, getline_I420, putline_I420},
+  {GST_VIDEO_FORMAT_YV12, getline_YV12, putline_YV12},
+  {GST_VIDEO_FORMAT_YUY2, getline_YUY2, putline_YUY2},
+  {GST_VIDEO_FORMAT_UYVY, getline_UYVY, putline_UYVY},
+  {GST_VIDEO_FORMAT_AYUV, getline_AYUV, putline_AYUV},
+  {GST_VIDEO_FORMAT_RGBx, getline_RGBA, putline_RGBA},
+  {GST_VIDEO_FORMAT_BGRx, getline_BGRA, putline_BGRA},
+  {GST_VIDEO_FORMAT_xRGB, getline_AYUV, putline_AYUV},
+  {GST_VIDEO_FORMAT_xBGR, getline_ABGR, putline_ABGR},
+  {GST_VIDEO_FORMAT_RGBA, getline_RGBA, putline_RGBA},
+  {GST_VIDEO_FORMAT_BGRA, getline_BGRA, putline_BGRA},
+  {GST_VIDEO_FORMAT_ARGB, getline_AYUV, putline_AYUV},
+  {GST_VIDEO_FORMAT_ABGR, getline_ABGR, putline_ABGR},
+  {GST_VIDEO_FORMAT_RGB, getline_RGB, putline_RGB},
+  {GST_VIDEO_FORMAT_BGR, getline_BGR, putline_BGR},
+  {GST_VIDEO_FORMAT_Y41B, getline_Y41B, putline_Y41B},
+  {GST_VIDEO_FORMAT_Y42B, getline_Y42B, putline_Y42B},
+  {GST_VIDEO_FORMAT_YVYU, getline_YVYU, putline_YVYU},
+  {GST_VIDEO_FORMAT_Y444, getline_Y444, putline_Y444},
+  {GST_VIDEO_FORMAT_v210, getline_v210, putline_v210,
+      getline16_v210, putline16_v210},
+  {GST_VIDEO_FORMAT_v216, getline_v216, putline_v216,
+      getline16_v216, putline16_v216},
+  {GST_VIDEO_FORMAT_NV12, getline_NV12, putline_NV12},
+  {GST_VIDEO_FORMAT_NV21, getline_NV21, putline_NV21},
+  //{GST_VIDEO_FORMAT_GRAY8, getline_GRAY8, putline_GRAY8},
+  //{GST_VIDEO_FORMAT_GRAY16_BE, getline_GRAY16_BE, putline_GRAY16_BE},
+  //{GST_VIDEO_FORMAT_GRAY16_LE, getline_GRAY16_LE, putline_GRAY16_LE},
+  {GST_VIDEO_FORMAT_v308, getline_v308, putline_v308},
+  {GST_VIDEO_FORMAT_Y800, getline_Y800, putline_Y800},
+  {GST_VIDEO_FORMAT_Y16, getline_Y16, putline_Y16},
+  {GST_VIDEO_FORMAT_RGB16, getline_RGB16, putline_RGB16},
+  {GST_VIDEO_FORMAT_BGR16, getline_BGR16, putline_BGR16},
+  {GST_VIDEO_FORMAT_RGB15, getline_RGB15, putline_RGB15},
+  {GST_VIDEO_FORMAT_BGR15, getline_BGR15, putline_BGR15},
+  {GST_VIDEO_FORMAT_UYVP, getline_UYVP, putline_UYVP},
+  {GST_VIDEO_FORMAT_A420, getline_A420, putline_A420}
+  , {GST_VIDEO_FORMAT_RGB8_PALETTED, getline_RGB8P, putline_RGB8P},
+  {GST_VIDEO_FORMAT_YUV9, getline_YUV9, putline_YUV9},
+  {GST_VIDEO_FORMAT_YVU9, getline_YUV9, putline_YUV9},  /* alias */
+  {GST_VIDEO_FORMAT_IYU1, getline_IYU1, putline_IYU1},
+  {GST_VIDEO_FORMAT_ARGB64, getline_AY64, putline_AY64, getline16_AY64,
+      putline16_AY64},
+  {GST_VIDEO_FORMAT_AYUV64, getline_AY64, putline_AY64, getline16_AY64,
+      putline16_AY64},
+  {GST_VIDEO_FORMAT_r210, getline_r210, putline_r210, getline16_r210,
+      putline16_r210}
+};
+
+static void
+matrix_rgb_to_yuv_bt470_6 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    r = tmpline[i * 4 + 1];
+    g = tmpline[i * 4 + 2];
+    b = tmpline[i * 4 + 3];
+
+    y = (66 * r + 129 * g + 25 * b + 4096) >> 8;
+    u = (-38 * r - 74 * g + 112 * b + 32768) >> 8;
+    v = (112 * r - 94 * g - 18 * b + 32768) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (y, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (u, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (v, 0, 255);
+  }
+}
+
+static void
+matrix_rgb_to_yuv_bt709 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    r = tmpline[i * 4 + 1];
+    g = tmpline[i * 4 + 2];
+    b = tmpline[i * 4 + 3];
+
+    y = (47 * r + 157 * g + 16 * b + 4096) >> 8;
+    u = (-26 * r - 87 * g + 112 * b + 32768) >> 8;
+    v = (112 * r - 102 * g - 10 * b + 32768) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (y, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (u, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (v, 0, 255);
+  }
+}
+
+static void
+matrix_yuv_bt470_6_to_rgb (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (298 * y + 409 * v - 57068) >> 8;
+    g = (298 * y - 100 * u - 208 * v + 34707) >> 8;
+    b = (298 * y + 516 * u - 70870) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
+  }
+}
+
+static void
+matrix_yuv_bt709_to_rgb (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (298 * y + 459 * v - 63514) >> 8;
+    g = (298 * y - 55 * u - 136 * v + 19681) >> 8;
+    b = (298 * y + 541 * u - 73988) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
+  }
+}
+
+static void
+matrix_yuv_bt709_to_yuv_bt470_6 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (256 * y + 25 * u + 49 * v - 9536) >> 8;
+    g = (253 * u - 28 * v + 3958) >> 8;
+    b = (-19 * u + 252 * v + 2918) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
+  }
+}
+
+static void
+matrix_yuv_bt470_6_to_yuv_bt709 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint8 *tmpline = convert->tmpline;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (256 * y - 30 * u - 53 * v + 10600) >> 8;
+    g = (261 * u + 29 * v - 4367) >> 8;
+    b = (19 * u + 262 * v - 3289) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 255);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 255);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 255);
+  }
+}
+
+static void
+matrix_identity (VideoConvert * convert)
+{
+  /* do nothing */
+}
+
+static void
+matrix16_rgb_to_yuv_bt470_6 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    r = tmpline[i * 4 + 1];
+    g = tmpline[i * 4 + 2];
+    b = tmpline[i * 4 + 3];
+
+    y = (66 * r + 129 * g + 25 * b + 4096 * 256) >> 8;
+    u = (-38 * r - 74 * g + 112 * b + 32768 * 256) >> 8;
+    v = (112 * r - 94 * g - 18 * b + 32768 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (y, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (u, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (v, 0, 65535);
+  }
+}
+
+static void
+matrix16_rgb_to_yuv_bt709 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    r = tmpline[i * 4 + 1];
+    g = tmpline[i * 4 + 2];
+    b = tmpline[i * 4 + 3];
+
+    y = (47 * r + 157 * g + 16 * b + 4096 * 256) >> 8;
+    u = (-26 * r - 87 * g + 112 * b + 32768 * 256) >> 8;
+    v = (112 * r - 102 * g - 10 * b + 32768 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (y, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (u, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (v, 0, 65535);
+  }
+}
+
+static void
+matrix16_yuv_bt470_6_to_rgb (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (298 * y + 409 * v - 57068 * 256) >> 8;
+    g = (298 * y - 100 * u - 208 * v + 34707 * 256) >> 8;
+    b = (298 * y + 516 * u - 70870 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
+  }
+}
+
+static void
+matrix16_yuv_bt709_to_rgb (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (298 * y + 459 * v - 63514 * 256) >> 8;
+    g = (298 * y - 55 * u - 136 * v + 19681 * 256) >> 8;
+    b = (298 * y + 541 * u - 73988 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
+  }
+}
+
+static void
+matrix16_yuv_bt709_to_yuv_bt470_6 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (256 * y + 25 * u + 49 * v - 9536 * 256) >> 8;
+    g = (253 * u - 28 * v + 3958 * 256) >> 8;
+    b = (-19 * u + 252 * v + 2918 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
+  }
+}
+
+static void
+matrix16_yuv_bt470_6_to_yuv_bt709 (VideoConvert * convert)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *tmpline = convert->tmpline16;
+
+  for (i = 0; i < convert->width; i++) {
+    y = tmpline[i * 4 + 1];
+    u = tmpline[i * 4 + 2];
+    v = tmpline[i * 4 + 3];
+
+    r = (256 * y - 30 * u - 53 * v + 10600 * 256) >> 8;
+    g = (261 * u + 29 * v - 4367 * 256) >> 8;
+    b = (19 * u + 262 * v - 3289 * 256) >> 8;
+
+    tmpline[i * 4 + 1] = CLAMP (r, 0, 65535);
+    tmpline[i * 4 + 2] = CLAMP (g, 0, 65535);
+    tmpline[i * 4 + 3] = CLAMP (b, 0, 65535);
+  }
+}
+
+static void
+matrix16_identity (VideoConvert * convert)
+{
+  /* do nothing */
+}
+
+
+
+static void
+videoconvert_convert_lookup_getput (VideoConvert * convert)
+{
+  int i;
+
+  convert->getline = NULL;
+  convert->getline16 = NULL;
+  for (i = 0; i < sizeof (lines) / sizeof (lines[0]); i++) {
+    if (lines[i].format == convert->from_format) {
+      convert->getline = lines[i].getline;
+      convert->getline16 = lines[i].getline16;
+      break;
+    }
+  }
+  convert->putline = NULL;
+  convert->putline16 = NULL;
+  for (i = 0; i < sizeof (lines) / sizeof (lines[0]); i++) {
+    if (lines[i].format == convert->to_format) {
+      convert->putline = lines[i].putline;
+      convert->putline16 = lines[i].putline16;
+      break;
+    }
+  }
+  GST_DEBUG ("get %p put %p", convert->getline, convert->putline);
+
+  if (convert->getline16 == NULL) {
+    convert->getline16 = getline16_convert;
+  }
+  if (convert->putline16 == NULL) {
+    convert->putline16 = putline16_convert;
+  }
+
+  if (convert->from_spec == convert->to_spec) {
+    convert->matrix = matrix_identity;
+    convert->matrix16 = matrix16_identity;
+  } else if (convert->from_spec == COLOR_SPEC_RGB
+      && convert->to_spec == COLOR_SPEC_YUV_BT470_6) {
+    convert->matrix = matrix_rgb_to_yuv_bt470_6;
+    convert->matrix16 = matrix16_rgb_to_yuv_bt470_6;
+  } else if (convert->from_spec == COLOR_SPEC_RGB
+      && convert->to_spec == COLOR_SPEC_YUV_BT709) {
+    convert->matrix = matrix_rgb_to_yuv_bt709;
+    convert->matrix16 = matrix16_rgb_to_yuv_bt709;
+  } else if (convert->from_spec == COLOR_SPEC_YUV_BT470_6
+      && convert->to_spec == COLOR_SPEC_RGB) {
+    convert->matrix = matrix_yuv_bt470_6_to_rgb;
+    convert->matrix16 = matrix16_yuv_bt470_6_to_rgb;
+  } else if (convert->from_spec == COLOR_SPEC_YUV_BT709
+      && convert->to_spec == COLOR_SPEC_RGB) {
+    convert->matrix = matrix_yuv_bt709_to_rgb;
+    convert->matrix16 = matrix16_yuv_bt709_to_rgb;
+  } else if (convert->from_spec == COLOR_SPEC_YUV_BT709
+      && convert->to_spec == COLOR_SPEC_YUV_BT470_6) {
+    convert->matrix = matrix_yuv_bt709_to_yuv_bt470_6;
+    convert->matrix16 = matrix16_yuv_bt709_to_yuv_bt470_6;
+  } else if (convert->from_spec == COLOR_SPEC_YUV_BT470_6
+      && convert->to_spec == COLOR_SPEC_YUV_BT709) {
+    convert->matrix = matrix_yuv_bt470_6_to_yuv_bt709;
+    convert->matrix16 = matrix16_yuv_bt470_6_to_yuv_bt709;
+  }
+}
+
+static void
+videoconvert_convert_generic (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int j;
+
+  if (convert->getline == NULL) {
+    GST_ERROR ("no getline");
+    return;
+  }
+
+  if (convert->putline == NULL) {
+    GST_ERROR ("no putline");
+    return;
+  }
+
+  if (convert->use_16bit) {
+    for (j = 0; j < convert->height; j++) {
+      convert->getline16 (convert, convert->tmpline16, src, j);
+      convert->matrix16 (convert);
+      convert->dither16 (convert, j);
+      convert->putline16 (convert, dest, convert->tmpline16, j);
+    }
+  } else {
+    for (j = 0; j < convert->height; j++) {
+      convert->getline (convert, convert->tmpline, src, j);
+      convert->matrix (convert);
+      convert->putline (convert, dest, convert->tmpline, j);
+    }
+  }
+}
+
+static void
+videoconvert_dither_none (VideoConvert * convert, int j)
+{
+}
+
+static void
+videoconvert_dither_verterr (VideoConvert * convert, int j)
+{
+  int i;
+  guint16 *tmpline = convert->tmpline16;
+  guint16 *errline = convert->errline;
+
+  for (i = 0; i < 4 * convert->width; i++) {
+    tmpline[i] += errline[i];
+    errline[i] = tmpline[i] & 0xff;
+  }
+}
+
+static void
+videoconvert_dither_halftone (VideoConvert * convert, int j)
+{
+  int i;
+  guint16 *tmpline = convert->tmpline16;
+  static guint16 halftone[8][8] = {
+    {0, 128, 32, 160, 8, 136, 40, 168},
+    {192, 64, 224, 96, 200, 72, 232, 104},
+    {48, 176, 16, 144, 56, 184, 24, 152},
+    {240, 112, 208, 80, 248, 120, 216, 88},
+    {12, 240, 44, 172, 4, 132, 36, 164},
+    {204, 76, 236, 108, 196, 68, 228, 100},
+    {60, 188, 28, 156, 52, 180, 20, 148},
+    {252, 142, 220, 92, 244, 116, 212, 84}
+  };
+
+  for (i = 0; i < convert->width * 4; i++) {
+    tmpline[i] += halftone[(i >> 2) & 7][j & 7];
+  }
+}
+
+/* Fast paths */
+
+static void
+convert_I420_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+
+  for (i = 0; i < convert->height; i += 2) {
+    cogorc_convert_I420_YUY2 (FRAME_GET_LINE (dest, 0, i),
+        FRAME_GET_LINE (dest, 0, i + 1),
+        FRAME_GET_LINE (src, 0, i),
+        FRAME_GET_LINE (src, 0, i + 1),
+        FRAME_GET_LINE (src, 1, i >> 1),
+        FRAME_GET_LINE (src, 2, i >> 1), (convert->width + 1) / 2);
+  }
+}
+
+static void
+convert_I420_UYVY (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+
+  for (i = 0; i < convert->height; i += 2) {
+    cogorc_convert_I420_UYVY (FRAME_GET_LINE (dest, 0, i),
+        FRAME_GET_LINE (dest, 0, i + 1),
+        FRAME_GET_LINE (src, 0, i),
+        FRAME_GET_LINE (src, 0, i + 1),
+        FRAME_GET_LINE (src, 1, i >> 1),
+        FRAME_GET_LINE (src, 2, i >> 1), (convert->width + 1) / 2);
+  }
+}
+
+static void
+convert_I420_AYUV (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+
+  for (i = 0; i < convert->height; i += 2) {
+    cogorc_convert_I420_AYUV (FRAME_GET_LINE (dest, 0, i),
+        FRAME_GET_LINE (dest, 0, i + 1),
+        FRAME_GET_LINE (src, 0, i),
+        FRAME_GET_LINE (src, 0, i + 1),
+        FRAME_GET_LINE (src, 1, i >> 1),
+        FRAME_GET_LINE (src, 2, i >> 1), convert->width);
+  }
+}
+
+static void
+convert_I420_Y42B (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_420_422 (FRAME_GET_LINE (dest, 1, 0),
+      2 * FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 1, 1),
+      2 * FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2, convert->height / 2);
+
+  cogorc_planar_chroma_420_422 (FRAME_GET_LINE (dest, 2, 0),
+      2 * FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (dest, 2, 1),
+      2 * FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height / 2);
+}
+
+static void
+convert_I420_Y444 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_420_444 (FRAME_GET_LINE (dest, 1, 0),
+      2 * FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 1, 1),
+      2 * FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+
+  cogorc_planar_chroma_420_444 (FRAME_GET_LINE (dest, 2, 0),
+      2 * FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (dest, 2, 1),
+      2 * FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+}
+
+static void
+convert_YUY2_I420 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+
+  for (i = 0; i < convert->height; i += 2) {
+    cogorc_convert_YUY2_I420 (FRAME_GET_LINE (dest, 0, i),
+        FRAME_GET_LINE (dest, 0, i + 1),
+        FRAME_GET_LINE (dest, 1, i >> 1),
+        FRAME_GET_LINE (dest, 2, i >> 1),
+        FRAME_GET_LINE (src, 0, i),
+        FRAME_GET_LINE (src, 0, i + 1), (convert->width + 1) / 2);
+  }
+}
+
+static void
+convert_YUY2_AYUV (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_YUY2_AYUV (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_YUY2_Y42B (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_YUY2_Y42B (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_YUY2_Y444 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_YUY2_Y444 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+
+static void
+convert_UYVY_I420 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+
+  for (i = 0; i < convert->height; i += 2) {
+    cogorc_convert_UYVY_I420 (FRAME_GET_LINE (dest, 0, i),
+        FRAME_GET_LINE (dest, 0, i + 1),
+        FRAME_GET_LINE (dest, 1, i >> 1),
+        FRAME_GET_LINE (dest, 2, i >> 1),
+        FRAME_GET_LINE (src, 0, i),
+        FRAME_GET_LINE (src, 0, i + 1), (convert->width + 1) / 2);
+  }
+}
+
+static void
+convert_UYVY_AYUV (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_UYVY_AYUV (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_UYVY_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_UYVY_YUY2 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_UYVY_Y42B (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_UYVY_Y42B (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_UYVY_Y444 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_UYVY_Y444 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_AYUV_I420 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_I420 (FRAME_GET_LINE (dest, 0, 0),
+      2 * FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 0, 1),
+      2 * FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      2 * FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 0, 1),
+      2 * FRAME_GET_STRIDE (src, 0), convert->width / 2, convert->height / 2);
+}
+
+static void
+convert_AYUV_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_YUY2 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width / 2, convert->height);
+}
+
+static void
+convert_AYUV_UYVY (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_UYVY (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width / 2, convert->height);
+}
+
+static void
+convert_AYUV_Y42B (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_Y42B (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_AYUV_Y444 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_Y444 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width, convert->height);
+}
+
+static void
+convert_Y42B_I420 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_422_420 (FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      2 * FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 1, 1),
+      2 * FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+
+  cogorc_planar_chroma_422_420 (FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      2 * FRAME_GET_STRIDE (src, 2), FRAME_GET_LINE (src, 2, 1),
+      2 * FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+}
+
+static void
+convert_Y42B_Y444 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_422_444 (FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2, convert->height);
+
+  cogorc_planar_chroma_422_444 (FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y42B_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y42B_YUY2 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y42B_UYVY (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y42B_UYVY (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y42B_AYUV (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y42B_AYUV (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width) / 2, convert->height);
+}
+
+static void
+convert_Y444_I420 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_444_420 (FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      2 * FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 1, 1),
+      2 * FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+
+  cogorc_planar_chroma_444_420 (FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      2 * FRAME_GET_STRIDE (src, 2), FRAME_GET_LINE (src, 2, 1),
+      2 * FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2,
+      (convert->height + 1) / 2);
+}
+
+static void
+convert_Y444_Y42B (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_memcpy_2d (FRAME_GET_LINE (dest, 0, 0), FRAME_GET_STRIDE (dest, 0),
+      FRAME_GET_LINE (src, 0, 0), FRAME_GET_STRIDE (src, 0),
+      convert->width, convert->height);
+
+  cogorc_planar_chroma_444_422 (FRAME_GET_LINE (dest, 1, 0),
+      FRAME_GET_STRIDE (dest, 1), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), (convert->width + 1) / 2, convert->height);
+
+  cogorc_planar_chroma_444_422 (FRAME_GET_LINE (dest, 2, 0),
+      FRAME_GET_STRIDE (dest, 2), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y444_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y444_YUY2 (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y444_UYVY (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y444_UYVY (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), (convert->width + 1) / 2, convert->height);
+}
+
+static void
+convert_Y444_AYUV (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_Y444_AYUV (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), FRAME_GET_LINE (src, 1, 0),
+      FRAME_GET_STRIDE (src, 1), FRAME_GET_LINE (src, 2, 0),
+      FRAME_GET_STRIDE (src, 2), convert->width, convert->height);
+}
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+static void
+convert_AYUV_ARGB (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_ARGB (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width, convert->height);
+}
+
+static void
+convert_AYUV_BGRA (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_BGRA (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width, convert->height);
+}
+
+static void
+convert_AYUV_ABGR (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_ABGR (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width, convert->height);
+}
+
+static void
+convert_AYUV_RGBA (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  cogorc_convert_AYUV_RGBA (FRAME_GET_LINE (dest, 0, 0),
+      FRAME_GET_STRIDE (dest, 0), FRAME_GET_LINE (src, 0, 0),
+      FRAME_GET_STRIDE (src, 0), convert->width, convert->height);
+}
+
+static void
+convert_I420_BGRA (VideoConvert * convert, GstVideoFrame * dest,
+    const GstVideoFrame * src)
+{
+  int i;
+  int quality = 0;
+
+  if (quality > 3) {
+    for (i = 0; i < convert->height; i++) {
+      if (i & 1) {
+        cogorc_convert_I420_BGRA_avg (FRAME_GET_LINE (dest, 0, i),
+            FRAME_GET_LINE (src, 0, i),
+            FRAME_GET_LINE (src, 1, i >> 1),
+            FRAME_GET_LINE (src, 1, (i >> 1) + 1),
+            FRAME_GET_LINE (src, 2, i >> 1),
+            FRAME_GET_LINE (src, 2, (i >> 1) + 1), convert->width);
+      } else {
+        cogorc_convert_I420_BGRA (FRAME_GET_LINE (dest, 0, i),
+            FRAME_GET_LINE (src, 0, i),
+            FRAME_GET_LINE (src, 1, i >> 1),
+            FRAME_GET_LINE (src, 2, i >> 1), convert->width);
+      }
+    }
+  } else {
+    for (i = 0; i < convert->height; i++) {
+      cogorc_convert_I420_BGRA (FRAME_GET_LINE (dest, 0, i),
+          FRAME_GET_LINE (src, 0, i),
+          FRAME_GET_LINE (src, 1, i >> 1),
+          FRAME_GET_LINE (src, 2, i >> 1), convert->width);
+    }
+  }
+}
+#endif
+
+
+
+/* Fast paths */
+
+typedef struct
+{
+  GstVideoFormat from_format;
+  ColorSpaceColorSpec from_spec;
+  GstVideoFormat to_format;
+  ColorSpaceColorSpec to_spec;
+  gboolean keeps_color_spec;
+  void (*convert) (VideoConvert * convert, GstVideoFrame * dest,
+      const GstVideoFrame * src);
+} VideoTransform;
+static const VideoTransform transforms[] = {
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
+      COLOR_SPEC_NONE, TRUE, convert_I420_YUY2},
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
+      COLOR_SPEC_NONE, TRUE, convert_I420_UYVY},
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
+      COLOR_SPEC_NONE, TRUE, convert_I420_AYUV},
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
+      COLOR_SPEC_NONE, TRUE, convert_I420_Y42B},
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
+      COLOR_SPEC_NONE, TRUE, convert_I420_Y444},
+
+  {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
+      COLOR_SPEC_NONE, TRUE, convert_YUY2_I420},
+  {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, TRUE, convert_UYVY_YUY2},    /* alias */
+  {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
+      COLOR_SPEC_NONE, TRUE, convert_YUY2_AYUV},
+  {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
+      COLOR_SPEC_NONE, TRUE, convert_YUY2_Y42B},
+  {GST_VIDEO_FORMAT_YUY2, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
+      COLOR_SPEC_NONE, TRUE, convert_YUY2_Y444},
+
+  {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
+      COLOR_SPEC_NONE, TRUE, convert_UYVY_I420},
+  {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
+      COLOR_SPEC_NONE, TRUE, convert_UYVY_YUY2},
+  {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
+      COLOR_SPEC_NONE, TRUE, convert_UYVY_AYUV},
+  {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
+      COLOR_SPEC_NONE, TRUE, convert_UYVY_Y42B},
+  {GST_VIDEO_FORMAT_UYVY, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
+      COLOR_SPEC_NONE, TRUE, convert_UYVY_Y444},
+
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
+      COLOR_SPEC_NONE, TRUE, convert_AYUV_I420},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
+      COLOR_SPEC_NONE, TRUE, convert_AYUV_YUY2},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
+      COLOR_SPEC_NONE, TRUE, convert_AYUV_UYVY},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
+      COLOR_SPEC_NONE, TRUE, convert_AYUV_Y42B},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
+      COLOR_SPEC_NONE, TRUE, convert_AYUV_Y444},
+
+  {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
+      COLOR_SPEC_NONE, TRUE, convert_Y42B_I420},
+  {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
+      COLOR_SPEC_NONE, TRUE, convert_Y42B_YUY2},
+  {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
+      COLOR_SPEC_NONE, TRUE, convert_Y42B_UYVY},
+  {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
+      COLOR_SPEC_NONE, TRUE, convert_Y42B_AYUV},
+  {GST_VIDEO_FORMAT_Y42B, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y444,
+      COLOR_SPEC_NONE, TRUE, convert_Y42B_Y444},
+
+  {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_I420,
+      COLOR_SPEC_NONE, TRUE, convert_Y444_I420},
+  {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_YUY2,
+      COLOR_SPEC_NONE, TRUE, convert_Y444_YUY2},
+  {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_UYVY,
+      COLOR_SPEC_NONE, TRUE, convert_Y444_UYVY},
+  {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_AYUV,
+      COLOR_SPEC_NONE, TRUE, convert_Y444_AYUV},
+  {GST_VIDEO_FORMAT_Y444, COLOR_SPEC_NONE, GST_VIDEO_FORMAT_Y42B,
+      COLOR_SPEC_NONE, TRUE, convert_Y444_Y42B},
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_ARGB,
+      COLOR_SPEC_RGB, FALSE, convert_AYUV_ARGB},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRA,
+      COLOR_SPEC_RGB, FALSE, convert_AYUV_BGRA},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_xRGB, COLOR_SPEC_RGB, FALSE, convert_AYUV_ARGB},     /* alias */
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRx, COLOR_SPEC_RGB, FALSE, convert_AYUV_BGRA},     /* alias */
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_ABGR,
+      COLOR_SPEC_RGB, FALSE, convert_AYUV_ABGR},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_RGBA,
+      COLOR_SPEC_RGB, FALSE, convert_AYUV_RGBA},
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_xBGR, COLOR_SPEC_RGB, FALSE, convert_AYUV_ABGR},     /* alias */
+  {GST_VIDEO_FORMAT_AYUV, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_RGBx, COLOR_SPEC_RGB, FALSE, convert_AYUV_RGBA},     /* alias */
+
+  {GST_VIDEO_FORMAT_I420, COLOR_SPEC_YUV_BT470_6, GST_VIDEO_FORMAT_BGRA,
+      COLOR_SPEC_RGB, FALSE, convert_I420_BGRA},
+#endif
+};
+
+static void
+videoconvert_convert_lookup_fastpath (VideoConvert * convert)
+{
+  int i;
+
+  for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
+    if (transforms[i].to_format == convert->to_format &&
+        transforms[i].from_format == convert->from_format &&
+        (transforms[i].keeps_color_spec ||
+            (transforms[i].from_spec == convert->from_spec &&
+                transforms[i].to_spec == convert->to_spec))) {
+      convert->convert = transforms[i].convert;
+      return;
+    }
+  }
+}
diff --git a/gst/videoconvert/videoconvert.h b/gst/videoconvert/videoconvert.h
new file mode 100644
index 0000000..8d946ab
--- /dev/null
+++ b/gst/videoconvert/videoconvert.h
@@ -0,0 +1,91 @@
+/* Video conversion functions
+ * Copyright (C) 2010 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __COLORSPACE_H__
+#define __COLORSPACE_H__
+
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+typedef struct _VideoConvert VideoConvert;
+
+typedef enum {
+  COLOR_SPEC_NONE = 0,
+  COLOR_SPEC_RGB,
+  COLOR_SPEC_GRAY,
+  COLOR_SPEC_YUV_BT470_6,
+  COLOR_SPEC_YUV_BT709
+} ColorSpaceColorSpec;
+
+typedef enum {
+  DITHER_NONE,
+  DITHER_VERTERR,
+  DITHER_HALFTONE
+} ColorSpaceDitherMethod;
+
+struct _VideoConvert {
+  gint width, height;
+  gboolean interlaced;
+  gboolean use_16bit;
+  gboolean dither;
+
+  GstVideoFormat from_format;
+  ColorSpaceColorSpec from_spec;
+  GstVideoFormat to_format;
+  ColorSpaceColorSpec to_spec;
+  guint32 *palette;
+
+  guint8 *tmpline;
+  guint16 *tmpline16;
+  guint16 *errline;
+
+  void (*convert) (VideoConvert *convert, GstVideoFrame *dest, const GstVideoFrame *src);
+  void (*getline) (VideoConvert *convert, guint8 *dest, const GstVideoFrame *src, int j);
+  void (*putline) (VideoConvert *convert, GstVideoFrame *dest, const guint8 *src, int j);
+  void (*matrix) (VideoConvert *convert);
+
+  void (*getline16) (VideoConvert *convert, guint16 *dest, const GstVideoFrame *src, int j);
+  void (*putline16) (VideoConvert *convert, GstVideoFrame *dest, const guint16 *src, int j);
+  void (*matrix16) (VideoConvert *convert);
+  void (*dither16) (VideoConvert *convert, int j);
+};
+
+VideoConvert *   videoconvert_convert_new            (GstVideoFormat to_format,
+                                                      ColorSpaceColorSpec from_spec,
+                                                      GstVideoFormat from_format,
+                                                      ColorSpaceColorSpec to_spec,
+                                                      int width, int height);
+void             videoconvert_convert_free           (VideoConvert * convert);
+
+void             videoconvert_convert_set_dither     (VideoConvert * convert, int type);
+void             videoconvert_convert_set_interlaced (VideoConvert *convert,
+                                                      gboolean interlaced);
+
+void             videoconvert_convert_set_palette    (VideoConvert *convert,
+                                                      const guint32 *palette);
+const guint32 *  videoconvert_convert_get_palette    (VideoConvert *convert);
+
+void             videoconvert_convert_convert        (VideoConvert * convert,
+                                                      GstVideoFrame *dest, const GstVideoFrame *src);
+
+
+G_END_DECLS
+
+#endif /* __GST_COLORSPACE_H__ */
diff --git a/gst/videorate/Makefile.am b/gst/videorate/Makefile.am
new file mode 100644
index 0000000..b275aba
--- /dev/null
+++ b/gst/videorate/Makefile.am
@@ -0,0 +1,23 @@
+noinst_HEADERS = gstvideorate.h
+
+plugin_LTLIBRARIES = libgstvideorate.la
+
+libgstvideorate_la_SOURCES = gstvideorate.c
+libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstvideorate_la_LIBTOOLFLAGS = --tag=disable-static
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideorate -:SHARED libgstvideorate \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideorate_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \
+	           $(libgstvideorate_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/videorate/Makefile.in b/gst/videorate/Makefile.in
new file mode 100644
index 0000000..c6d60b7
--- /dev/null
+++ b/gst/videorate/Makefile.in
@@ -0,0 +1,769 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gst/videorate
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvideorate_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_libgstvideorate_la_OBJECTS = libgstvideorate_la-gstvideorate.lo
+libgstvideorate_la_OBJECTS = $(am_libgstvideorate_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvideorate_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvideorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstvideorate_la_CFLAGS) $(CFLAGS) \
+	$(libgstvideorate_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvideorate_la_SOURCES)
+DIST_SOURCES = $(libgstvideorate_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = gstvideorate.h
+plugin_LTLIBRARIES = libgstvideorate.la
+libgstvideorate_la_SOURCES = gstvideorate.c
+libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstvideorate_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videorate/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/videorate/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvideorate.la: $(libgstvideorate_la_OBJECTS) $(libgstvideorate_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideorate_la_LINK) -rpath $(plugindir) $(libgstvideorate_la_OBJECTS) $(libgstvideorate_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideorate_la-gstvideorate.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvideorate_la-gstvideorate.lo: gstvideorate.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideorate_la_CFLAGS) $(CFLAGS) -MT libgstvideorate_la-gstvideorate.lo -MD -MP -MF $(DEPDIR)/libgstvideorate_la-gstvideorate.Tpo -c -o libgstvideorate_la-gstvideorate.lo `test -f 'gstvideorate.c' || echo '$(srcdir)/'`gstvideorate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideorate_la-gstvideorate.Tpo $(DEPDIR)/libgstvideorate_la-gstvideorate.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideorate.c' object='libgstvideorate_la-gstvideorate.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideorate_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideorate_la_CFLAGS) $(CFLAGS) -c -o libgstvideorate_la-gstvideorate.lo `test -f 'gstvideorate.c' || echo '$(srcdir)/'`gstvideorate.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideorate -:SHARED libgstvideorate \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideorate_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \
+	           $(libgstvideorate_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/videorate/gstvideorate.c b/gst/videorate/gstvideorate.c
new file mode 100644
index 0000000..3317af2
--- /dev/null
+++ b/gst/videorate/gstvideorate.c
@@ -0,0 +1,1217 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-videorate
+ *
+ * This element takes an incoming stream of timestamped video frames.
+ * It will produce a perfect stream that matches the source pad's framerate.
+ *
+ * The correction is performed by dropping and duplicating frames, no fancy
+ * algorithm is used to interpolate frames (yet).
+ *
+ * By default the element will simply negotiate the same framerate on its
+ * source and sink pad.
+ *
+ * This operation is useful to link to elements that require a perfect stream.
+ * Typical examples are formats that do not store timestamps for video frames,
+ * but only store a framerate, like Ogg and AVI.
+ *
+ * A conversion to a specific framerate can be forced by using filtered caps on
+ * the source pad.
+ *
+ * The properties #GstVideoRate:in, #GstVideoRate:out, #GstVideoRate:duplicate
+ * and #GstVideoRate:drop can be read to obtain information about number of
+ * input frames, output frames, dropped frames (i.e. the number of unused input
+ * frames) and duplicated frames (i.e. the number of times an input frame was
+ * duplicated, beside being used normally).
+ *
+ * An input stream that needs no adjustments will thus never have dropped or
+ * duplicated frames.
+ *
+ * When the #GstVideoRate:silent property is set to FALSE, a GObject property
+ * notification will be emitted whenever one of the #GstVideoRate:duplicate or
+ * #GstVideoRate:drop values changes.
+ * This can potentially cause performance degradation.
+ * Note that property notification will happen from the streaming thread, so
+ * applications should be prepared for this.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videorate ! video/x-raw,framerate=15/1 ! xvimagesink
+ * ]| Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing.
+ * To create the test Ogg/Theora file refer to the documentation of theoraenc.
+ * |[
+ * gst-launch -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
+ * ]| Capture video from a V4L device, and adjust the stream to 12.5 fps before
+ * encoding to Ogg/Theora.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-09-02 (0.10.11)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstvideorate.h"
+
+GST_DEBUG_CATEGORY_STATIC (video_rate_debug);
+#define GST_CAT_DEFAULT video_rate_debug
+
+/* GstVideoRate signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+#define DEFAULT_SILENT          TRUE
+#define DEFAULT_NEW_PREF        1.0
+#define DEFAULT_SKIP_TO_FIRST   FALSE
+#define DEFAULT_DROP_ONLY       FALSE
+#define DEFAULT_AVERAGE_PERIOD  0
+#define DEFAULT_MAX_RATE        G_MAXINT
+
+enum
+{
+  ARG_0,
+  ARG_IN,
+  ARG_OUT,
+  ARG_DUP,
+  ARG_DROP,
+  ARG_SILENT,
+  ARG_NEW_PREF,
+  ARG_SKIP_TO_FIRST,
+  ARG_DROP_ONLY,
+  ARG_AVERAGE_PERIOD,
+  ARG_MAX_RATE
+      /* FILL ME */
+};
+
+static GstStaticPadTemplate gst_video_rate_src_template =
+    GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png")
+    );
+
+static GstStaticPadTemplate gst_video_rate_sink_template =
+    GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png")
+    );
+
+static void gst_video_rate_swap_prev (GstVideoRate * videorate,
+    GstBuffer * buffer, gint64 time);
+static gboolean gst_video_rate_sink_event (GstBaseTransform * trans,
+    GstEvent * event);
+static gboolean gst_video_rate_query (GstBaseTransform * trans,
+    GstPadDirection direction, GstQuery * query);
+
+static gboolean gst_video_rate_setcaps (GstBaseTransform * trans,
+    GstCaps * in_caps, GstCaps * out_caps);
+
+static GstCaps *gst_video_rate_transform_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter);
+
+static void gst_video_rate_fixate_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
+
+static GstFlowReturn gst_video_rate_transform_ip (GstBaseTransform * trans,
+    GstBuffer * buf);
+
+static gboolean gst_video_rate_start (GstBaseTransform * trans);
+
+
+static void gst_video_rate_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_video_rate_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GParamSpec *pspec_drop = NULL;
+static GParamSpec *pspec_duplicate = NULL;
+
+#define gst_video_rate_parent_class parent_class
+G_DEFINE_TYPE (GstVideoRate, gst_video_rate, GST_TYPE_BASE_TRANSFORM);
+
+static void
+gst_video_rate_class_init (GstVideoRateClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstBaseTransformClass *base_class = GST_BASE_TRANSFORM_CLASS (klass);
+
+  object_class->set_property = gst_video_rate_set_property;
+  object_class->get_property = gst_video_rate_get_property;
+
+  base_class->set_caps = GST_DEBUG_FUNCPTR (gst_video_rate_setcaps);
+  base_class->transform_caps =
+      GST_DEBUG_FUNCPTR (gst_video_rate_transform_caps);
+  base_class->transform_ip = GST_DEBUG_FUNCPTR (gst_video_rate_transform_ip);
+  base_class->sink_event = GST_DEBUG_FUNCPTR (gst_video_rate_sink_event);
+  base_class->start = GST_DEBUG_FUNCPTR (gst_video_rate_start);
+  base_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_rate_fixate_caps);
+  base_class->query = GST_DEBUG_FUNCPTR (gst_video_rate_query);
+
+  g_object_class_install_property (object_class, ARG_IN,
+      g_param_spec_uint64 ("in", "In",
+          "Number of input frames", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, ARG_OUT,
+      g_param_spec_uint64 ("out", "Out", "Number of output frames", 0,
+          G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  pspec_duplicate = g_param_spec_uint64 ("duplicate", "Duplicate",
+      "Number of duplicated frames", 0, G_MAXUINT64, 0,
+      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, ARG_DUP, pspec_duplicate);
+  pspec_drop = g_param_spec_uint64 ("drop", "Drop", "Number of dropped frames",
+      0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, ARG_DROP, pspec_drop);
+  g_object_class_install_property (object_class, ARG_SILENT,
+      g_param_spec_boolean ("silent", "silent",
+          "Don't emit notify for dropped and duplicated frames", DEFAULT_SILENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, ARG_NEW_PREF,
+      g_param_spec_double ("new-pref", "New Pref",
+          "Value indicating how much to prefer new frames (unused)", 0.0, 1.0,
+          DEFAULT_NEW_PREF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstVideoRate:skip-to-first:
+   * 
+   * Don't produce buffers before the first one we receive.
+   *
+   * Since: 0.10.25
+   */
+  g_object_class_install_property (object_class, ARG_SKIP_TO_FIRST,
+      g_param_spec_boolean ("skip-to-first", "Skip to first buffer",
+          "Don't produce buffers before the first one we receive",
+          DEFAULT_SKIP_TO_FIRST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstVideoRate:drop-only:
+   *
+   * Only drop frames, no duplicates are produced.
+   *
+   * Since: 0.10.36
+   */
+  g_object_class_install_property (object_class, ARG_DROP_ONLY,
+      g_param_spec_boolean ("drop-only", "Only Drop",
+          "Only drop frames, no duplicates are produced",
+          DEFAULT_DROP_ONLY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstVideoRate:average-period:
+   *
+   * Arrange for maximum framerate by dropping frames beyond a certain framerate,
+   * where the framerate is calculated using a moving average over the
+   * configured.
+   *
+   * Since: 0.10.36
+   */
+  g_object_class_install_property (object_class, ARG_AVERAGE_PERIOD,
+      g_param_spec_uint64 ("average-period", "Period over which to average",
+          "Period over which to average the framerate (in ns) (0 = disabled)",
+          0, G_MAXINT64, DEFAULT_AVERAGE_PERIOD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstVideoRate:max-rate:
+   *
+   * maximum framerate to pass through
+   *
+   * Since: 0.10.36
+   */
+  g_object_class_install_property (object_class, ARG_MAX_RATE,
+      g_param_spec_int ("max-rate", "maximum framerate",
+          "Maximum framerate allowed to pass through "
+          "(in frames per second, implies drop-only)",
+          1, G_MAXINT, DEFAULT_MAX_RATE,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (element_class,
+      "Video rate adjuster", "Filter/Effect/Video",
+      "Drops/duplicates/adjusts timestamps on video frames to make a perfect stream",
+      "Wim Taymans <wim@fluendo.com>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_video_rate_sink_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_video_rate_src_template));
+}
+
+static void
+gst_value_fraction_get_extremes (const GValue * v,
+    gint * min_num, gint * min_denom, gint * max_num, gint * max_denom)
+{
+  if (GST_VALUE_HOLDS_FRACTION (v)) {
+    *min_num = *max_num = gst_value_get_fraction_numerator (v);
+    *min_denom = *max_denom = gst_value_get_fraction_denominator (v);
+  } else if (GST_VALUE_HOLDS_FRACTION_RANGE (v)) {
+    const GValue *min, *max;
+
+    min = gst_value_get_fraction_range_min (v);
+    *min_num = gst_value_get_fraction_numerator (min);
+    *min_denom = gst_value_get_fraction_denominator (min);
+
+    max = gst_value_get_fraction_range_max (v);
+    *max_num = gst_value_get_fraction_numerator (max);
+    *max_denom = gst_value_get_fraction_denominator (max);
+  } else if (GST_VALUE_HOLDS_LIST (v)) {
+    gint min_n = G_MAXINT, min_d = 1, max_n = 0, max_d = 1;
+    int i, n;
+
+    *min_num = G_MAXINT;
+    *min_denom = 1;
+    *max_num = 0;
+    *max_denom = 1;
+
+    n = gst_value_list_get_size (v);
+
+    g_assert (n > 0);
+
+    for (i = 0; i < n; i++) {
+      const GValue *t = gst_value_list_get_value (v, i);
+
+      gst_value_fraction_get_extremes (t, &min_n, &min_d, &max_n, &max_d);
+      if (gst_util_fraction_compare (min_n, min_d, *min_num, *min_denom) < 0) {
+        *min_num = min_n;
+        *min_denom = min_d;
+      }
+
+      if (gst_util_fraction_compare (max_n, max_d, *max_num, *max_denom) > 0) {
+        *max_num = max_n;
+        *max_denom = max_d;
+      }
+    }
+  } else {
+    g_warning ("Unknown type for framerate");
+    *min_num = 0;
+    *min_denom = 1;
+    *max_num = G_MAXINT;
+    *max_denom = 1;
+  }
+}
+
+/* Clamp the framerate in a caps structure to be a smaller range then
+ * [1...max_rate], otherwise return false */
+static gboolean
+gst_video_max_rate_clamp_structure (GstStructure * s, gint maxrate,
+    gint * min_num, gint * min_denom, gint * max_num, gint * max_denom)
+{
+  gboolean ret = FALSE;
+
+  if (!gst_structure_has_field (s, "framerate")) {
+    /* No framerate field implies any framerate, clamping would result in
+     * [1..max_rate] so not a real subset */
+    goto out;
+  } else {
+    const GValue *v;
+    GValue intersection = { 0, };
+    GValue clamp = { 0, };
+    gint tmp_num, tmp_denom;
+
+    g_value_init (&clamp, GST_TYPE_FRACTION_RANGE);
+    gst_value_set_fraction_range_full (&clamp, 0, 1, maxrate, 1);
+
+    v = gst_structure_get_value (s, "framerate");
+    ret = gst_value_intersect (&intersection, v, &clamp);
+    g_value_unset (&clamp);
+
+    if (!ret)
+      goto out;
+
+    gst_value_fraction_get_extremes (&intersection,
+        min_num, min_denom, max_num, max_denom);
+
+    gst_value_fraction_get_extremes (v,
+        &tmp_num, &tmp_denom, max_num, max_denom);
+
+    if (gst_util_fraction_compare (*max_num, *max_denom, maxrate, 1) > 0) {
+      *max_num = maxrate;
+      *max_denom = 1;
+    }
+
+    gst_structure_take_value (s, "framerate", &intersection);
+  }
+
+out:
+  return ret;
+}
+
+static GstCaps *
+gst_video_rate_transform_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  GstVideoRate *videorate = GST_VIDEO_RATE (trans);
+  GstCaps *ret;
+  GstStructure *s, *s2;
+  GstStructure *s3 = NULL;
+  int maxrate = g_atomic_int_get (&videorate->max_rate);
+
+  /* Should always be called with simple caps */
+  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL);
+
+  ret = gst_caps_copy (caps);
+
+  s = gst_caps_get_structure (ret, 0);
+  s2 = gst_structure_copy (s);
+
+  if (videorate->drop_only) {
+    gint min_num = 0, min_denom = 1;
+    gint max_num = G_MAXINT, max_denom = 1;
+
+    /* Clamp the caps to our maximum rate as the first caps if possible */
+    if (!gst_video_max_rate_clamp_structure (s, maxrate,
+            &min_num, &min_denom, &max_num, &max_denom)) {
+      min_num = 0;
+      min_denom = 1;
+      max_num = maxrate;
+      max_denom = 1;
+
+      /* clamp wouldn't be a real subset of 1..maxrate, in this case the sink
+       * caps should become [1..maxrate], [1..maxint] and the src caps just
+       * [1..maxrate].  In case there was a caps incompatibility things will
+       * explode later as appropriate :)
+       *
+       * In case [X..maxrate] == [X..maxint], skip as we'll set it later
+       */
+      if (direction == GST_PAD_SRC && maxrate != G_MAXINT)
+        gst_structure_set (s, "framerate", GST_TYPE_FRACTION_RANGE,
+            min_num, min_denom, maxrate, 1, NULL);
+      else
+        gst_caps_remove_structure (ret, 0);
+    }
+
+    if (direction == GST_PAD_SRC) {
+      /* We can accept anything as long as it's at least the minimal framerate
+       * the the sink needs */
+      gst_structure_set (s2, "framerate", GST_TYPE_FRACTION_RANGE,
+          min_num, min_denom, G_MAXINT, 1, NULL);
+
+      /* Also allow unknown framerate, if it isn't already */
+      if (min_num != 0 || min_denom != 1) {
+        s3 = gst_structure_copy (s);
+        gst_structure_set (s3, "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+      }
+    } else if (max_num != 0 || max_denom != 1) {
+      /* We can provide everything upto the maximum framerate at the src */
+      gst_structure_set (s2, "framerate", GST_TYPE_FRACTION_RANGE,
+          0, 1, max_num, max_denom, NULL);
+    }
+  } else if (direction == GST_PAD_SINK) {
+    gint min_num = 0, min_denom = 1;
+    gint max_num = G_MAXINT, max_denom = 1;
+
+    if (!gst_video_max_rate_clamp_structure (s, maxrate,
+            &min_num, &min_denom, &max_num, &max_denom))
+      gst_caps_remove_structure (ret, 0);
+
+    gst_structure_set (s2, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1,
+        maxrate, 1, NULL);
+  } else {
+    /* set the framerate as a range */
+    gst_structure_set (s2, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1,
+        G_MAXINT, 1, NULL);
+  }
+
+  gst_caps_merge_structure (ret, s2);
+  if (s3 != NULL)
+    gst_caps_merge_structure (ret, s3);
+
+  return ret;
+}
+
+static void
+gst_video_rate_fixate_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
+{
+  GstStructure *s;
+  gint num, denom;
+
+  s = gst_caps_get_structure (caps, 0);
+  if (G_UNLIKELY (!gst_structure_get_fraction (s, "framerate", &num, &denom)))
+    return;
+
+  s = gst_caps_get_structure (othercaps, 0);
+  gst_structure_fixate_field_nearest_fraction (s, "framerate", num, denom);
+}
+
+static gboolean
+gst_video_rate_setcaps (GstBaseTransform * trans, GstCaps * in_caps,
+    GstCaps * out_caps)
+{
+  GstVideoRate *videorate = GST_VIDEO_RATE (trans);
+  GstStructure *structure;
+  gboolean ret = TRUE;
+  gint rate_numerator, rate_denominator;
+
+  videorate = GST_VIDEO_RATE (trans);
+
+  GST_DEBUG_OBJECT (trans, "setcaps called in: %" GST_PTR_FORMAT
+      " out: %" GST_PTR_FORMAT, in_caps, out_caps);
+
+  structure = gst_caps_get_structure (in_caps, 0);
+  if (!gst_structure_get_fraction (structure, "framerate",
+          &rate_numerator, &rate_denominator))
+    goto no_framerate;
+
+  videorate->from_rate_numerator = rate_numerator;
+  videorate->from_rate_denominator = rate_denominator;
+
+  structure = gst_caps_get_structure (out_caps, 0);
+  if (!gst_structure_get_fraction (structure, "framerate",
+          &rate_numerator, &rate_denominator))
+    goto no_framerate;
+
+  /* out_frame_count is scaled by the frame rate caps when calculating next_ts.
+   * when the frame rate caps change, we must update base_ts and reset
+   * out_frame_count */
+  if (videorate->to_rate_numerator) {
+    videorate->base_ts +=
+        gst_util_uint64_scale (videorate->out_frame_count,
+        videorate->to_rate_denominator * GST_SECOND,
+        videorate->to_rate_numerator);
+  }
+  videorate->out_frame_count = 0;
+  videorate->to_rate_numerator = rate_numerator;
+  videorate->to_rate_denominator = rate_denominator;
+
+  if (rate_numerator)
+    videorate->wanted_diff = gst_util_uint64_scale_int (GST_SECOND,
+        rate_denominator, rate_numerator);
+  else
+    videorate->wanted_diff = 0;
+
+done:
+  /* After a setcaps, our caps may have changed. In that case, we can't use
+   * the old buffer, if there was one (it might have different dimensions) */
+  GST_DEBUG_OBJECT (videorate, "swapping old buffers");
+  gst_video_rate_swap_prev (videorate, NULL, GST_CLOCK_TIME_NONE);
+  videorate->last_ts = GST_CLOCK_TIME_NONE;
+  videorate->average = 0;
+
+  return ret;
+
+no_framerate:
+  {
+    GST_DEBUG_OBJECT (videorate, "no framerate specified");
+    ret = FALSE;
+    goto done;
+  }
+}
+
+static void
+gst_video_rate_reset (GstVideoRate * videorate)
+{
+  GST_DEBUG_OBJECT (videorate, "resetting internal variables");
+
+  videorate->in = 0;
+  videorate->out = 0;
+  videorate->base_ts = 0;
+  videorate->out_frame_count = 0;
+  videorate->drop = 0;
+  videorate->dup = 0;
+  videorate->next_ts = GST_CLOCK_TIME_NONE;
+  videorate->last_ts = GST_CLOCK_TIME_NONE;
+  videorate->discont = TRUE;
+  videorate->average = 0;
+  gst_video_rate_swap_prev (videorate, NULL, 0);
+
+  gst_segment_init (&videorate->segment, GST_FORMAT_TIME);
+}
+
+static void
+gst_video_rate_init (GstVideoRate * videorate)
+{
+  gst_video_rate_reset (videorate);
+  videorate->silent = DEFAULT_SILENT;
+  videorate->new_pref = DEFAULT_NEW_PREF;
+  videorate->drop_only = DEFAULT_DROP_ONLY;
+  videorate->average_period = DEFAULT_AVERAGE_PERIOD;
+  videorate->average_period_set = DEFAULT_AVERAGE_PERIOD;
+  videorate->max_rate = DEFAULT_MAX_RATE;
+
+  videorate->from_rate_numerator = 0;
+  videorate->from_rate_denominator = 0;
+  videorate->to_rate_numerator = 0;
+  videorate->to_rate_denominator = 0;
+
+  gst_base_transform_set_gap_aware (GST_BASE_TRANSFORM (videorate), TRUE);
+}
+
+/* flush the oldest buffer */
+static GstFlowReturn
+gst_video_rate_flush_prev (GstVideoRate * videorate, gboolean duplicate)
+{
+  GstFlowReturn res;
+  GstBuffer *outbuf;
+  GstClockTime push_ts;
+
+  if (!videorate->prevbuf)
+    goto eos_before_buffers;
+
+  /* make sure we can write to the metadata */
+  outbuf = gst_buffer_make_writable (gst_buffer_ref (videorate->prevbuf));
+
+  GST_BUFFER_OFFSET (outbuf) = videorate->out;
+  GST_BUFFER_OFFSET_END (outbuf) = videorate->out + 1;
+
+  if (videorate->discont) {
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+    videorate->discont = FALSE;
+  } else
+    GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DISCONT);
+
+  if (duplicate)
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
+  else
+    GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_GAP);
+
+  /* this is the timestamp we put on the buffer */
+  push_ts = videorate->next_ts;
+
+  videorate->out++;
+  videorate->out_frame_count++;
+  if (videorate->to_rate_numerator) {
+    /* interpolate next expected timestamp in the segment */
+    videorate->next_ts =
+        videorate->segment.base + videorate->segment.start +
+        videorate->base_ts + gst_util_uint64_scale (videorate->out_frame_count,
+        videorate->to_rate_denominator * GST_SECOND,
+        videorate->to_rate_numerator);
+    GST_BUFFER_DURATION (outbuf) = videorate->next_ts - push_ts;
+  }
+
+  /* We do not need to update time in VFR (variable frame rate) mode */
+  if (!videorate->drop_only) {
+    /* adapt for looping, bring back to time in current segment. */
+    GST_BUFFER_TIMESTAMP (outbuf) = push_ts - videorate->segment.base;
+  }
+
+  GST_LOG_OBJECT (videorate,
+      "old is best, dup, pushing buffer outgoing ts %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (push_ts));
+
+  res = gst_pad_push (GST_BASE_TRANSFORM_SRC_PAD (videorate), outbuf);
+
+  return res;
+
+  /* WARNINGS */
+eos_before_buffers:
+  {
+    GST_INFO_OBJECT (videorate, "got EOS before any buffer was received");
+    return GST_FLOW_OK;
+  }
+}
+
+static void
+gst_video_rate_swap_prev (GstVideoRate * videorate, GstBuffer * buffer,
+    gint64 time)
+{
+  GST_LOG_OBJECT (videorate, "swap_prev: storing buffer %p in prev", buffer);
+  if (videorate->prevbuf)
+    gst_buffer_unref (videorate->prevbuf);
+  videorate->prevbuf = buffer != NULL ? gst_buffer_ref (buffer) : NULL;
+  videorate->prev_ts = time;
+}
+
+static void
+gst_video_rate_notify_drop (GstVideoRate * videorate)
+{
+#if !GLIB_CHECK_VERSION(2,26,0)
+  g_object_notify ((GObject *) videorate, "drop");
+#else
+  g_object_notify_by_pspec ((GObject *) videorate, pspec_drop);
+#endif
+}
+
+static void
+gst_video_rate_notify_duplicate (GstVideoRate * videorate)
+{
+#if !GLIB_CHECK_VERSION(2,26,0)
+  g_object_notify ((GObject *) videorate, "duplicate");
+#else
+  g_object_notify_by_pspec ((GObject *) videorate, pspec_duplicate);
+#endif
+}
+
+#define MAGIC_LIMIT  25
+static gboolean
+gst_video_rate_sink_event (GstBaseTransform * trans, GstEvent * event)
+{
+  GstVideoRate *videorate;
+
+  videorate = GST_VIDEO_RATE (trans);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+    {
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      if (segment->format != GST_FORMAT_TIME)
+        goto format_error;
+
+      GST_DEBUG_OBJECT (videorate, "handle NEWSEGMENT");
+
+      /* close up the previous segment, if appropriate */
+      if (videorate->prevbuf) {
+        gint count = 0;
+        GstFlowReturn res;
+
+        res = GST_FLOW_OK;
+        /* fill up to the end of current segment,
+         * or only send out the stored buffer if there is no specific stop.
+         * regardless, prevent going loopy in strange cases */
+        while (res == GST_FLOW_OK && count <= MAGIC_LIMIT &&
+            ((GST_CLOCK_TIME_IS_VALID (videorate->segment.stop) &&
+                    videorate->next_ts - videorate->segment.base
+                    < videorate->segment.stop)
+                || count < 1)) {
+          res = gst_video_rate_flush_prev (videorate, count > 0);
+          count++;
+        }
+        if (count > 1) {
+          videorate->dup += count - 1;
+          if (!videorate->silent)
+            gst_video_rate_notify_duplicate (videorate);
+        } else if (count == 0) {
+          videorate->drop++;
+          if (!videorate->silent)
+            gst_video_rate_notify_drop (videorate);
+        }
+        /* clean up for the new one; _chain will resume from the new start */
+        videorate->base_ts = 0;
+        videorate->out_frame_count = 0;
+        gst_video_rate_swap_prev (videorate, NULL, 0);
+        videorate->next_ts = GST_CLOCK_TIME_NONE;
+      }
+
+      /* We just want to update the accumulated stream_time  */
+      gst_segment_copy_into (segment, &videorate->segment);
+
+      GST_DEBUG_OBJECT (videorate, "updated segment: %" GST_SEGMENT_FORMAT,
+          &videorate->segment);
+      break;
+    }
+    case GST_EVENT_EOS:{
+      gint count = 0;
+      GstFlowReturn res = GST_FLOW_OK;
+
+      GST_DEBUG_OBJECT (videorate, "Got EOS");
+
+      /* If the segment has a stop position, fill the segment */
+      if (GST_CLOCK_TIME_IS_VALID (videorate->segment.stop)) {
+        /* fill up to the end of current segment,
+         * or only send out the stored buffer if there is no specific stop.
+         * regardless, prevent going loopy in strange cases */
+        while (res == GST_FLOW_OK && count <= MAGIC_LIMIT &&
+            ((videorate->next_ts - videorate->segment.base <
+                    videorate->segment.stop)
+                || count < 1)) {
+          res = gst_video_rate_flush_prev (videorate, count > 0);
+          count++;
+        }
+      } else if (videorate->prevbuf) {
+        /* Output at least one frame but if the buffer duration is valid, output
+         * enough frames to use the complete buffer duration */
+        if (GST_BUFFER_DURATION_IS_VALID (videorate->prevbuf)) {
+          GstClockTime end_ts =
+              videorate->next_ts + GST_BUFFER_DURATION (videorate->prevbuf);
+
+          while (res == GST_FLOW_OK && count <= MAGIC_LIMIT &&
+              ((videorate->next_ts - videorate->segment.base < end_ts)
+                  || count < 1)) {
+            res = gst_video_rate_flush_prev (videorate, count > 0);
+            count++;
+          }
+        } else {
+          res = gst_video_rate_flush_prev (videorate, FALSE);
+          count = 1;
+        }
+      }
+
+      if (count > 1) {
+        videorate->dup += count - 1;
+        if (!videorate->silent)
+          gst_video_rate_notify_duplicate (videorate);
+      } else if (count == 0) {
+        videorate->drop++;
+        if (!videorate->silent)
+          gst_video_rate_notify_drop (videorate);
+      }
+
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      /* also resets the segment */
+      GST_DEBUG_OBJECT (videorate, "Got FLUSH_STOP");
+      gst_video_rate_reset (videorate);
+      break;
+    default:
+      break;
+  }
+
+  return TRUE;
+
+  /* ERRORS */
+format_error:
+  {
+    GST_WARNING_OBJECT (videorate,
+        "Got segment but doesn't have GST_FORMAT_TIME value");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_video_rate_query (GstBaseTransform * trans, GstPadDirection direction,
+    GstQuery * query)
+{
+  GstVideoRate *videorate = GST_VIDEO_RATE (trans);
+  gboolean res = FALSE;
+  GstPad *otherpad;
+
+  otherpad = (direction == GST_PAD_SRC) ?
+      GST_BASE_TRANSFORM_SINK_PAD (trans) : GST_BASE_TRANSFORM_SRC_PAD (trans);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      GstClockTime min, max;
+      gboolean live;
+      guint64 latency;
+      guint64 avg_period;
+      GstPad *peer;
+
+      GST_OBJECT_LOCK (videorate);
+      avg_period = videorate->average_period_set;
+      GST_OBJECT_UNLOCK (videorate);
+
+      if (avg_period == 0 && (peer = gst_pad_get_peer (otherpad))) {
+        if ((res = gst_pad_query (peer, query))) {
+          gst_query_parse_latency (query, &live, &min, &max);
+
+          GST_DEBUG_OBJECT (videorate, "Peer latency: min %"
+              GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+          if (videorate->from_rate_numerator != 0) {
+            /* add latency. We don't really know since we hold on to the frames
+             * until we get a next frame, which can be anything. We assume
+             * however that this will take from_rate time. */
+            latency = gst_util_uint64_scale (GST_SECOND,
+                videorate->from_rate_denominator,
+                videorate->from_rate_numerator);
+          } else {
+            /* no input framerate, we don't know */
+            latency = 0;
+          }
+
+          GST_DEBUG_OBJECT (videorate, "Our latency: %"
+              GST_TIME_FORMAT, GST_TIME_ARGS (latency));
+
+          min += latency;
+          if (max != -1)
+            max += latency;
+
+          GST_DEBUG_OBJECT (videorate, "Calculated total latency : min %"
+              GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+          gst_query_set_latency (query, live, min, max);
+        }
+        gst_object_unref (peer);
+        break;
+      }
+      /* Simple fallthrough if we don't have a latency or not a peer that we
+       * can't ask about its latency yet.. */
+    }
+    default:
+      res =
+          GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction,
+          query);
+      break;
+  }
+
+  return res;
+}
+
+static GstFlowReturn
+gst_video_rate_trans_ip_max_avg (GstVideoRate * videorate, GstBuffer * buf)
+{
+  GstClockTime ts = GST_BUFFER_TIMESTAMP (buf);
+
+  videorate->in++;
+
+  if (!GST_CLOCK_TIME_IS_VALID (ts) || videorate->wanted_diff == 0)
+    goto push;
+
+  /* drop frames if they exceed our output rate */
+  if (GST_CLOCK_TIME_IS_VALID (videorate->last_ts)) {
+    GstClockTimeDiff diff = ts - videorate->last_ts;
+
+    /* Drop buffer if its early compared to the desired frame rate and
+     * the current average is higher than the desired average
+     */
+    if (diff < videorate->wanted_diff &&
+        videorate->average < videorate->wanted_diff)
+      goto drop;
+
+    /* Update average */
+    if (videorate->average) {
+      GstClockTimeDiff wanted_diff;
+
+      if (G_LIKELY (videorate->average_period > videorate->wanted_diff))
+        wanted_diff = videorate->wanted_diff;
+      else
+        wanted_diff = videorate->average_period * 10;
+
+      videorate->average =
+          gst_util_uint64_scale_round (videorate->average,
+          videorate->average_period - wanted_diff,
+          videorate->average_period) +
+          gst_util_uint64_scale_round (diff, wanted_diff,
+          videorate->average_period);
+    } else {
+      videorate->average = diff;
+    }
+  }
+
+  videorate->last_ts = ts;
+
+push:
+  videorate->out++;
+  return GST_FLOW_OK;
+
+drop:
+  if (!videorate->silent)
+    gst_video_rate_notify_drop (videorate);
+  return GST_BASE_TRANSFORM_FLOW_DROPPED;
+}
+
+static GstFlowReturn
+gst_video_rate_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
+{
+  GstVideoRate *videorate;
+  GstFlowReturn res = GST_BASE_TRANSFORM_FLOW_DROPPED;
+  GstClockTime intime, in_ts, in_dur;
+  GstClockTime avg_period;
+  gboolean skip = FALSE;
+
+  videorate = GST_VIDEO_RATE (trans);
+
+  /* make sure the denominators are not 0 */
+  if (videorate->from_rate_denominator == 0 ||
+      videorate->to_rate_denominator == 0)
+    goto not_negotiated;
+
+  GST_OBJECT_LOCK (videorate);
+  avg_period = videorate->average_period_set;
+  GST_OBJECT_UNLOCK (videorate);
+
+  /* MT-safe switching between modes */
+  if (G_UNLIKELY (avg_period != videorate->average_period)) {
+    gboolean switch_mode = (avg_period == 0 || videorate->average_period == 0);
+    videorate->average_period = avg_period;
+    videorate->last_ts = GST_CLOCK_TIME_NONE;
+
+    if (switch_mode) {
+      if (avg_period) {
+        /* enabling average mode */
+        videorate->average = 0;
+        /* make sure no cached buffers from regular mode are left */
+        gst_video_rate_swap_prev (videorate, NULL, 0);
+      } else {
+        /* enable regular mode */
+        videorate->next_ts = GST_CLOCK_TIME_NONE;
+        skip = TRUE;
+      }
+
+      /* max averaging mode has a no latency, normal mode does */
+      gst_element_post_message (GST_ELEMENT (videorate),
+          gst_message_new_latency (GST_OBJECT (videorate)));
+    }
+  }
+
+  if (videorate->average_period > 0)
+    return gst_video_rate_trans_ip_max_avg (videorate, buffer);
+
+  in_ts = GST_BUFFER_TIMESTAMP (buffer);
+  in_dur = GST_BUFFER_DURATION (buffer);
+
+  if (G_UNLIKELY (in_ts == GST_CLOCK_TIME_NONE)) {
+    in_ts = videorate->last_ts;
+    if (G_UNLIKELY (in_ts == GST_CLOCK_TIME_NONE))
+      goto invalid_buffer;
+  }
+
+  /* get the time of the next expected buffer timestamp, we use this when the
+   * next buffer has -1 as a timestamp */
+  videorate->last_ts = in_ts;
+  if (in_dur != GST_CLOCK_TIME_NONE)
+    videorate->last_ts += in_dur;
+
+  GST_DEBUG_OBJECT (videorate, "got buffer with timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (in_ts));
+
+  /* the input time is the time in the segment + all previously accumulated
+   * segments */
+  intime = in_ts + videorate->segment.base;
+
+  /* we need to have two buffers to compare */
+  if (videorate->prevbuf == NULL) {
+    gst_video_rate_swap_prev (videorate, buffer, intime);
+    videorate->in++;
+    if (!GST_CLOCK_TIME_IS_VALID (videorate->next_ts)) {
+      /* new buffer, we expect to output a buffer that matches the first
+       * timestamp in the segment */
+      if (videorate->skip_to_first || skip) {
+        videorate->next_ts = intime;
+        videorate->base_ts = in_ts - videorate->segment.start;
+        videorate->out_frame_count = 0;
+      } else {
+        videorate->next_ts = videorate->segment.start + videorate->segment.base;
+      }
+    }
+  } else {
+    GstClockTime prevtime;
+    gint count = 0;
+    gint64 diff1, diff2;
+
+    prevtime = videorate->prev_ts;
+
+    GST_LOG_OBJECT (videorate,
+        "BEGINNING prev buf %" GST_TIME_FORMAT " new buf %" GST_TIME_FORMAT
+        " outgoing ts %" GST_TIME_FORMAT, GST_TIME_ARGS (prevtime),
+        GST_TIME_ARGS (intime), GST_TIME_ARGS (videorate->next_ts));
+
+    videorate->in++;
+
+    /* drop new buffer if it's before previous one */
+    if (intime < prevtime) {
+      GST_DEBUG_OBJECT (videorate,
+          "The new buffer (%" GST_TIME_FORMAT
+          ") is before the previous buffer (%"
+          GST_TIME_FORMAT "). Dropping new buffer.",
+          GST_TIME_ARGS (intime), GST_TIME_ARGS (prevtime));
+      videorate->drop++;
+      if (!videorate->silent)
+        gst_video_rate_notify_drop (videorate);
+      goto done;
+    }
+
+    /* got 2 buffers, see which one is the best */
+    do {
+
+      diff1 = prevtime - videorate->next_ts;
+      diff2 = intime - videorate->next_ts;
+
+      /* take absolute values, beware: abs and ABS don't work for gint64 */
+      if (diff1 < 0)
+        diff1 = -diff1;
+      if (diff2 < 0)
+        diff2 = -diff2;
+
+      GST_LOG_OBJECT (videorate,
+          "diff with prev %" GST_TIME_FORMAT " diff with new %"
+          GST_TIME_FORMAT " outgoing ts %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (diff1), GST_TIME_ARGS (diff2),
+          GST_TIME_ARGS (videorate->next_ts));
+
+      /* output first one when its the best */
+      if (diff1 <= diff2) {
+        GstFlowReturn r;
+        count++;
+
+        /* on error the _flush function posted a warning already */
+        if ((r = gst_video_rate_flush_prev (videorate,
+                    count > 1)) != GST_FLOW_OK) {
+          res = r;
+          goto done;
+        }
+      }
+
+      /* Do not produce any dups. We can exit loop now */
+      if (videorate->drop_only)
+        break;
+      /* continue while the first one was the best, if they were equal avoid
+       * going into an infinite loop */
+    }
+    while (diff1 < diff2);
+
+    /* if we outputed the first buffer more then once, we have dups */
+    if (count > 1) {
+      videorate->dup += count - 1;
+      if (!videorate->silent)
+        gst_video_rate_notify_duplicate (videorate);
+    }
+    /* if we didn't output the first buffer, we have a drop */
+    else if (count == 0) {
+      videorate->drop++;
+
+      if (!videorate->silent)
+        gst_video_rate_notify_drop (videorate);
+
+      GST_LOG_OBJECT (videorate,
+          "new is best, old never used, drop, outgoing ts %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (videorate->next_ts));
+    }
+    GST_LOG_OBJECT (videorate,
+        "END, putting new in old, diff1 %" GST_TIME_FORMAT
+        ", diff2 %" GST_TIME_FORMAT ", next_ts %" GST_TIME_FORMAT
+        ", in %" G_GUINT64_FORMAT ", out %" G_GUINT64_FORMAT ", drop %"
+        G_GUINT64_FORMAT ", dup %" G_GUINT64_FORMAT, GST_TIME_ARGS (diff1),
+        GST_TIME_ARGS (diff2), GST_TIME_ARGS (videorate->next_ts),
+        videorate->in, videorate->out, videorate->drop, videorate->dup);
+
+    /* swap in new one when it's the best */
+    gst_video_rate_swap_prev (videorate, buffer, intime);
+  }
+done:
+  return res;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    GST_WARNING_OBJECT (videorate, "no framerate negotiated");
+    res = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+
+invalid_buffer:
+  {
+    GST_WARNING_OBJECT (videorate,
+        "Got buffer with GST_CLOCK_TIME_NONE timestamp, discarding it");
+    res = GST_BASE_TRANSFORM_FLOW_DROPPED;
+    goto done;
+  }
+}
+
+static gboolean
+gst_video_rate_start (GstBaseTransform * trans)
+{
+  gst_video_rate_reset (GST_VIDEO_RATE (trans));
+  return TRUE;
+}
+
+static void
+gst_video_rate_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+  GstVideoRate *videorate = GST_VIDEO_RATE (object);
+
+  GST_OBJECT_LOCK (videorate);
+  switch (prop_id) {
+    case ARG_SILENT:
+      videorate->silent = g_value_get_boolean (value);
+      break;
+    case ARG_NEW_PREF:
+      videorate->new_pref = g_value_get_double (value);
+      break;
+    case ARG_SKIP_TO_FIRST:
+      videorate->skip_to_first = g_value_get_boolean (value);
+      break;
+    case ARG_DROP_ONLY:
+      videorate->drop_only = g_value_get_boolean (value);
+      goto reconfigure;
+      break;
+    case ARG_AVERAGE_PERIOD:
+      videorate->average_period_set = g_value_get_uint64 (value);
+      break;
+    case ARG_MAX_RATE:
+      g_atomic_int_set (&videorate->max_rate, g_value_get_int (value));
+      goto reconfigure;
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (videorate);
+  return;
+
+reconfigure:
+  GST_OBJECT_UNLOCK (videorate);
+  gst_base_transform_reconfigure (GST_BASE_TRANSFORM (videorate));
+}
+
+static void
+gst_video_rate_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec)
+{
+  GstVideoRate *videorate = GST_VIDEO_RATE (object);
+
+  GST_OBJECT_LOCK (videorate);
+  switch (prop_id) {
+    case ARG_IN:
+      g_value_set_uint64 (value, videorate->in);
+      break;
+    case ARG_OUT:
+      g_value_set_uint64 (value, videorate->out);
+      break;
+    case ARG_DUP:
+      g_value_set_uint64 (value, videorate->dup);
+      break;
+    case ARG_DROP:
+      g_value_set_uint64 (value, videorate->drop);
+      break;
+    case ARG_SILENT:
+      g_value_set_boolean (value, videorate->silent);
+      break;
+    case ARG_NEW_PREF:
+      g_value_set_double (value, videorate->new_pref);
+      break;
+    case ARG_SKIP_TO_FIRST:
+      g_value_set_boolean (value, videorate->skip_to_first);
+      break;
+    case ARG_DROP_ONLY:
+      g_value_set_boolean (value, videorate->drop_only);
+      break;
+    case ARG_AVERAGE_PERIOD:
+      g_value_set_uint64 (value, videorate->average_period_set);
+      break;
+    case ARG_MAX_RATE:
+      g_value_set_int (value, g_atomic_int_get (&videorate->max_rate));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (videorate);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (video_rate_debug, "videorate", 0,
+      "VideoRate stream fixer");
+
+  return gst_element_register (plugin, "videorate", GST_RANK_NONE,
+      GST_TYPE_VIDEO_RATE);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "videorate",
+    "Adjusts video frames",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/videorate/gstvideorate.h b/gst/videorate/gstvideorate.h
new file mode 100644
index 0000000..998d6da
--- /dev/null
+++ b/gst/videorate/gstvideorate.h
@@ -0,0 +1,92 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_RATE_H__
+#define __GST_VIDEO_RATE_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_RATE \
+  (gst_video_rate_get_type())
+#define GST_VIDEO_RATE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_RATE,GstVideoRate))
+#define GST_VIDEO_RATE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_RATE,GstVideoRateClass))
+#define GST_IS_VIDEO_RATE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_RATE))
+#define GST_IS_VIDEO_RATE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_RATE))
+
+typedef struct _GstVideoRate GstVideoRate;
+typedef struct _GstVideoRateClass GstVideoRateClass;
+
+/**
+ * GstVideoRate:
+ *
+ * Opaque data structure.
+ */
+struct _GstVideoRate
+{
+  GstBaseTransform parent;
+
+  /* video state */
+  gint from_rate_numerator, from_rate_denominator;
+  gint to_rate_numerator, to_rate_denominator;
+  guint64 next_ts;              /* Timestamp of next buffer to output */
+  GstBuffer *prevbuf;
+  guint64 prev_ts;              /* Previous buffer timestamp */
+  guint64 out_frame_count;      /* number of frames output since the beginning
+                                 * of the segment or the last frame rate caps
+                                 * change, whichever was later */
+  guint64 base_ts;              /* used in next_ts calculation after a
+                                 * frame rate caps change */
+  gboolean discont;
+  guint64 last_ts;              /* Timestamp of last input buffer */
+
+  guint64 average_period;
+  GstClockTimeDiff wanted_diff; /* target average diff */
+  GstClockTimeDiff average;     /* moving average period */
+
+  /* segment handling */
+  GstSegment segment;
+
+  /* properties */
+  guint64 in, out, dup, drop;
+  gboolean silent;
+  gdouble new_pref;
+  gboolean skip_to_first;
+  gboolean drop_only;
+  guint64 average_period_set;
+
+  volatile int max_rate;
+};
+
+struct _GstVideoRateClass
+{
+  GstBaseTransformClass parent_class;
+};
+
+GType gst_video_rate_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_RATE_H__ */
diff --git a/gst/videoscale/Makefile.am b/gst/videoscale/Makefile.am
new file mode 100644
index 0000000..1d68f80
--- /dev/null
+++ b/gst/videoscale/Makefile.am
@@ -0,0 +1,43 @@
+plugin_LTLIBRARIES = libgstvideoscale.la
+
+ORC_SOURCE=gstvideoscaleorc
+include $(top_srcdir)/common/orc.mak
+
+libgstvideoscale_la_SOURCES = \
+	gstvideoscale.c \
+	vs_image.c \
+	vs_scanline.c \
+	vs_4tap.c \
+	vs_fill_borders.c \
+	vs_lanczos.c
+
+nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES)
+
+libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoscale_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+libgstvideoscale_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+	gstvideoscale.h \
+	vs_image.h \
+	vs_scanline.h \
+	vs_4tap.h \
+	vs_fill_borders.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideoscale -:SHARED libgstvideoscale \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideoscale_la_SOURCES) \
+	 	   $(nodist_libgstvideoscale_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \
+	           $(libgstvideoscale_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/videoscale/Makefile.in b/gst/videoscale/Makefile.in
new file mode 100644
index 0000000..852b61e
--- /dev/null
+++ b/gst/videoscale/Makefile.in
@@ -0,0 +1,927 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+subdir = gst/videoscale
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvideoscale_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstvideoscale_la_OBJECTS = libgstvideoscale_la-gstvideoscale.lo \
+	libgstvideoscale_la-vs_image.lo \
+	libgstvideoscale_la-vs_scanline.lo \
+	libgstvideoscale_la-vs_4tap.lo \
+	libgstvideoscale_la-vs_fill_borders.lo \
+	libgstvideoscale_la-vs_lanczos.lo
+am__objects_1 = libgstvideoscale_la-tmp-orc.lo
+nodist_libgstvideoscale_la_OBJECTS = $(am__objects_1)
+libgstvideoscale_la_OBJECTS = $(am_libgstvideoscale_la_OBJECTS) \
+	$(nodist_libgstvideoscale_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvideoscale_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) \
+	$(libgstvideoscale_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvideoscale_la_SOURCES) \
+	$(nodist_libgstvideoscale_la_SOURCES)
+DIST_SOURCES = $(libgstvideoscale_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstvideoscale.la
+ORC_SOURCE = gstvideoscaleorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstvideoscale_la_SOURCES = \
+	gstvideoscale.c \
+	vs_image.c \
+	vs_scanline.c \
+	vs_4tap.c \
+	vs_fill_borders.c \
+	vs_lanczos.c
+
+nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideoscale_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+
+libgstvideoscale_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+	gstvideoscale.h \
+	vs_image.h \
+	vs_scanline.h \
+	vs_4tap.h \
+	vs_fill_borders.h
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoscale/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/videoscale/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvideoscale.la: $(libgstvideoscale_la_OBJECTS) $(libgstvideoscale_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideoscale_la_LINK) -rpath $(plugindir) $(libgstvideoscale_la_OBJECTS) $(libgstvideoscale_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-gstvideoscale.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_image.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvideoscale_la-gstvideoscale.lo: gstvideoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-gstvideoscale.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-gstvideoscale.Tpo -c -o libgstvideoscale_la-gstvideoscale.lo `test -f 'gstvideoscale.c' || echo '$(srcdir)/'`gstvideoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-gstvideoscale.Tpo $(DEPDIR)/libgstvideoscale_la-gstvideoscale.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideoscale.c' object='libgstvideoscale_la-gstvideoscale.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-gstvideoscale.lo `test -f 'gstvideoscale.c' || echo '$(srcdir)/'`gstvideoscale.c
+
+libgstvideoscale_la-vs_image.lo: vs_image.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_image.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo $(DEPDIR)/libgstvideoscale_la-vs_image.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vs_image.c' object='libgstvideoscale_la-vs_image.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c
+
+libgstvideoscale_la-vs_scanline.lo: vs_scanline.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_scanline.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo $(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vs_scanline.c' object='libgstvideoscale_la-vs_scanline.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c
+
+libgstvideoscale_la-vs_4tap.lo: vs_4tap.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_4tap.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo $(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vs_4tap.c' object='libgstvideoscale_la-vs_4tap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c
+
+libgstvideoscale_la-vs_fill_borders.lo: vs_fill_borders.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_fill_borders.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vs_fill_borders.c' object='libgstvideoscale_la-vs_fill_borders.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c
+
+libgstvideoscale_la-vs_lanczos.lo: vs_lanczos.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_lanczos.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='vs_lanczos.c' object='libgstvideoscale_la-vs_lanczos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c
+
+libgstvideoscale_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstvideoscale_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-pluginLTLIBRARIES ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pluginLTLIBRARIES install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideoscale -:SHARED libgstvideoscale \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideoscale_la_SOURCES) \
+	 	   $(nodist_libgstvideoscale_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \
+	           $(libgstvideoscale_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/videoscale/README b/gst/videoscale/README
new file mode 100644
index 0000000..3e08f4e
--- /dev/null
+++ b/gst/videoscale/README
@@ -0,0 +1,5 @@
+- test different strides using
+gst-launch -v videotestsrc ! video/x-raw-yuv,width=320,height=240,format=\(fourcc\)UYVY ! videoscale ! video/x-raw-yuv,width=328,height=240 ! xvimagesink 
+gst-launch -v videotestsrc ! video/x-raw-yuv,width=320,height=240,format=\(fourcc\)UYVY ! videoscale ! video/x-raw-yuv,width=324,height=240 ! xvimagesink 
+gst-launch -v videotestsrc ! video/x-raw-yuv,width=320,height=240,format=\(fourcc\)UYVY ! videoscale ! video/x-raw-yuv,width=322,height=240 ! xvimagesink 
+gst-launch -v videotestsrc ! video/x-raw-yuv,width=320,height=240,format=\(fourcc\)UYVY ! videoscale ! video/x-raw-yuv,width=321,height=240 ! xvimagesink 
diff --git a/gst/videoscale/gstvideoscale.c b/gst/videoscale/gstvideoscale.c
new file mode 100644
index 0000000..416dc1d
--- /dev/null
+++ b/gst/videoscale/gstvideoscale.c
@@ -0,0 +1,1446 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2005 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-videoscale
+ * @see_also: videorate, videoconvert
+ *
+ * This element resizes video frames. By default the element will try to
+ * negotiate to the same size on the source and sinkpad so that no scaling
+ * is needed. It is therefore safe to insert this element in a pipeline to
+ * get more robust behaviour without any cost if no scaling is needed.
+ *
+ * This element supports a wide range of color spaces including various YUV and
+ * RGB formats and is therefore generally able to operate anywhere in a
+ * pipeline.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! ximagesink
+ * ]| Decode an Ogg/Theora and display the video using ximagesink. Since
+ * ximagesink cannot perform scaling, the video scaling will be performed by
+ * videoscale when you resize the video window.
+ * To create the test Ogg/Theora file refer to the documentation of theoraenc.
+ * |[
+ * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw, width=50 ! xvimagesink
+ * ]| Decode an Ogg/Theora and display the video using xvimagesink with a width
+ * of 50.
+ * </refsect2>
+ *
+ * Last reviewed on 2006-03-02 (0.10.4)
+ */
+
+/* 
+ * Formulas for PAR, DAR, width and height relations:
+ *
+ * dar_n   w   par_n
+ * ----- = - * -----
+ * dar_d   h   par_d
+ *
+ * par_n    h   dar_n
+ * ----- =  - * -----
+ * par_d    w   dar_d
+ * 
+ *         dar_n   par_d
+ * w = h * ----- * -----
+ *         dar_d   par_n
+ *
+ *         dar_d   par_n
+ * h = w * ----- * -----
+ *         dar_n   par_d
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <math.h>
+
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+#include "gstvideoscale.h"
+#include "gstvideoscaleorc.h"
+#include "vs_image.h"
+#include "vs_4tap.h"
+#include "vs_fill_borders.h"
+
+/* debug variable definition */
+GST_DEBUG_CATEGORY (video_scale_debug);
+
+#define DEFAULT_PROP_METHOD       GST_VIDEO_SCALE_BILINEAR
+#define DEFAULT_PROP_ADD_BORDERS  FALSE
+#define DEFAULT_PROP_SHARPNESS    1.0
+#define DEFAULT_PROP_SHARPEN      0.0
+#define DEFAULT_PROP_DITHER       FALSE
+#define DEFAULT_PROP_SUBMETHOD    1
+#define DEFAULT_PROP_ENVELOPE     2.0
+
+enum
+{
+  PROP_0,
+  PROP_METHOD,
+  PROP_ADD_BORDERS,
+  PROP_SHARPNESS,
+  PROP_SHARPEN,
+  PROP_DITHER,
+  PROP_SUBMETHOD,
+  PROP_ENVELOPE
+};
+
+#undef GST_VIDEO_SIZE_RANGE
+#define GST_VIDEO_SIZE_RANGE "(int) [ 1, 32767]"
+
+#define GST_VIDEO_FORMATS "{ \"I420\", \"YV12\", \"YUY2\", \"UYVY\", \"AYUV\", \"RGBx\", " \
+    "\"BGRx\", \"xRGB\", \"xBGR\", \"RGBA\", \"BGRA\", \"ARGB\", \"ABGR\", \"RGB\", " \
+    "\"BGR\", \"Y41B\", \"Y42B\", \"YVYU\", \"Y444\", \"GRAY8\", \"GRAY16_BE\", \"GRAY16_LE\", " \
+    "\"v308\", \"Y800\", \"Y16\", \"RGB16\", \"RGB15\", \"ARGB64\", \"AYUV64\" } "
+
+
+static GstStaticCaps gst_video_scale_format_caps[] = {
+  GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS))
+};
+
+#define GST_TYPE_VIDEO_SCALE_METHOD (gst_video_scale_method_get_type())
+static GType
+gst_video_scale_method_get_type (void)
+{
+  static GType video_scale_method_type = 0;
+
+  static const GEnumValue video_scale_methods[] = {
+    {GST_VIDEO_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"},
+    {GST_VIDEO_SCALE_BILINEAR, "Bilinear", "bilinear"},
+    {GST_VIDEO_SCALE_4TAP, "4-tap", "4-tap"},
+    {GST_VIDEO_SCALE_LANCZOS, "Lanczos", "lanczos"},
+    {0, NULL, NULL},
+  };
+
+  if (!video_scale_method_type) {
+    video_scale_method_type =
+        g_enum_register_static ("GstVideoScaleMethod", video_scale_methods);
+  }
+  return video_scale_method_type;
+}
+
+static GstCaps *
+gst_video_scale_get_capslist (void)
+{
+  static GstCaps *caps = NULL;
+  static volatile gsize inited = 0;
+
+  if (g_once_init_enter (&inited)) {
+    gint i;
+
+    g_assert (caps == NULL);
+
+    caps = gst_caps_new_empty ();
+    for (i = 0; i < G_N_ELEMENTS (gst_video_scale_format_caps); i++)
+      gst_caps_append (caps,
+          gst_caps_make_writable
+          (gst_static_caps_get (&gst_video_scale_format_caps[i])));
+    g_once_init_leave (&inited, 1);
+  }
+
+  return caps;
+}
+
+static GstPadTemplate *
+gst_video_scale_src_template_factory (void)
+{
+  return gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+      gst_video_scale_get_capslist ());
+}
+
+static GstPadTemplate *
+gst_video_scale_sink_template_factory (void)
+{
+  return gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+      gst_video_scale_get_capslist ());
+}
+
+
+static void gst_video_scale_finalize (GstVideoScale * videoscale);
+static gboolean gst_video_scale_src_event (GstBaseTransform * trans,
+    GstEvent * event);
+
+/* base transform vmethods */
+static GstCaps *gst_video_scale_transform_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter);
+static gboolean gst_video_scale_set_caps (GstBaseTransform * trans,
+    GstCaps * in, GstCaps * out);
+static gboolean gst_video_scale_get_unit_size (GstBaseTransform * trans,
+    GstCaps * caps, gsize * size);
+static gboolean gst_video_scale_decide_allocation (GstBaseTransform * trans,
+    GstQuery * query);
+static GstFlowReturn gst_video_scale_transform (GstBaseTransform * trans,
+    GstBuffer * in, GstBuffer * out);
+static void gst_video_scale_fixate_caps (GstBaseTransform * base,
+    GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
+
+static void gst_video_scale_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_video_scale_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define gst_video_scale_parent_class parent_class
+G_DEFINE_TYPE (GstVideoScale, gst_video_scale, GST_TYPE_VIDEO_FILTER);
+
+static void
+gst_video_scale_class_init (GstVideoScaleClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *element_class = (GstElementClass *) klass;
+  GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass;
+
+  gobject_class->finalize = (GObjectFinalizeFunc) gst_video_scale_finalize;
+  gobject_class->set_property = gst_video_scale_set_property;
+  gobject_class->get_property = gst_video_scale_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_METHOD,
+      g_param_spec_enum ("method", "method", "method",
+          GST_TYPE_VIDEO_SCALE_METHOD, DEFAULT_PROP_METHOD,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_ADD_BORDERS,
+      g_param_spec_boolean ("add-borders", "Add Borders",
+          "Add black borders if necessary to keep the display aspect ratio",
+          DEFAULT_PROP_ADD_BORDERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SHARPNESS,
+      g_param_spec_double ("sharpness", "Sharpness",
+          "Sharpness of filter", 0.0, 2.0, DEFAULT_PROP_SHARPNESS,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SHARPEN,
+      g_param_spec_double ("sharpen", "Sharpen",
+          "Sharpening", 0.0, 1.0, DEFAULT_PROP_SHARPEN,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_DITHER,
+      g_param_spec_boolean ("dither", "Dither",
+          "Add dither (only used for Lanczos method)",
+          DEFAULT_PROP_DITHER,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+#if 0
+  /* I am hiding submethod for now, since it's poorly named, poorly
+   * documented, and will probably just get people into trouble. */
+  g_object_class_install_property (gobject_class, PROP_SUBMETHOD,
+      g_param_spec_int ("submethod", "submethod",
+          "submethod", 0, 3, DEFAULT_PROP_SUBMETHOD,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
+  g_object_class_install_property (gobject_class, PROP_ENVELOPE,
+      g_param_spec_double ("envelope", "Envelope",
+          "Size of filter envelope", 0.0, 5.0, DEFAULT_PROP_ENVELOPE,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (element_class,
+      "Video scaler", "Filter/Converter/Video/Scaler",
+      "Resizes video", "Wim Taymans <wim.taymans@chello.be>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_video_scale_sink_template_factory ());
+  gst_element_class_add_pad_template (element_class,
+      gst_video_scale_src_template_factory ());
+
+  trans_class->transform_caps =
+      GST_DEBUG_FUNCPTR (gst_video_scale_transform_caps);
+  trans_class->set_caps = GST_DEBUG_FUNCPTR (gst_video_scale_set_caps);
+  trans_class->get_unit_size =
+      GST_DEBUG_FUNCPTR (gst_video_scale_get_unit_size);
+  trans_class->decide_allocation =
+      GST_DEBUG_FUNCPTR (gst_video_scale_decide_allocation);
+  trans_class->transform = GST_DEBUG_FUNCPTR (gst_video_scale_transform);
+  trans_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_scale_fixate_caps);
+  trans_class->src_event = GST_DEBUG_FUNCPTR (gst_video_scale_src_event);
+}
+
+static void
+gst_video_scale_init (GstVideoScale * videoscale)
+{
+  videoscale->tmp_buf = NULL;
+  videoscale->method = DEFAULT_PROP_METHOD;
+  videoscale->add_borders = DEFAULT_PROP_ADD_BORDERS;
+  videoscale->submethod = DEFAULT_PROP_SUBMETHOD;
+  videoscale->sharpness = DEFAULT_PROP_SHARPNESS;
+  videoscale->sharpen = DEFAULT_PROP_SHARPEN;
+  videoscale->dither = DEFAULT_PROP_DITHER;
+  videoscale->envelope = DEFAULT_PROP_ENVELOPE;
+}
+
+static void
+gst_video_scale_finalize (GstVideoScale * videoscale)
+{
+  if (videoscale->tmp_buf)
+    g_free (videoscale->tmp_buf);
+
+  G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (videoscale));
+}
+
+static void
+gst_video_scale_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVideoScale *vscale = GST_VIDEO_SCALE (object);
+
+  switch (prop_id) {
+    case PROP_METHOD:
+      GST_OBJECT_LOCK (vscale);
+      vscale->method = g_value_get_enum (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_ADD_BORDERS:
+      GST_OBJECT_LOCK (vscale);
+      vscale->add_borders = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (vscale);
+      gst_base_transform_reconfigure (GST_BASE_TRANSFORM_CAST (vscale));
+      break;
+    case PROP_SHARPNESS:
+      GST_OBJECT_LOCK (vscale);
+      vscale->sharpness = g_value_get_double (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_SHARPEN:
+      GST_OBJECT_LOCK (vscale);
+      vscale->sharpen = g_value_get_double (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_DITHER:
+      GST_OBJECT_LOCK (vscale);
+      vscale->dither = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_SUBMETHOD:
+      GST_OBJECT_LOCK (vscale);
+      vscale->submethod = g_value_get_int (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_ENVELOPE:
+      GST_OBJECT_LOCK (vscale);
+      vscale->envelope = g_value_get_double (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_video_scale_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstVideoScale *vscale = GST_VIDEO_SCALE (object);
+
+  switch (prop_id) {
+    case PROP_METHOD:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_enum (value, vscale->method);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_ADD_BORDERS:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_boolean (value, vscale->add_borders);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_SHARPNESS:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_double (value, vscale->sharpness);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_SHARPEN:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_double (value, vscale->sharpen);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_DITHER:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_boolean (value, vscale->dither);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_SUBMETHOD:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_int (value, vscale->submethod);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    case PROP_ENVELOPE:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_double (value, vscale->envelope);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstCaps *
+gst_video_scale_transform_caps (GstBaseTransform * trans,
+    GstPadDirection direction, GstCaps * caps, GstCaps * filter)
+{
+  GstCaps *ret;
+  GstStructure *structure;
+  gint i, n;
+
+  GST_DEBUG_OBJECT (trans,
+      "Transforming caps %" GST_PTR_FORMAT " in direction %s", caps,
+      (direction == GST_PAD_SINK) ? "sink" : "src");
+
+  ret = gst_caps_new_empty ();
+  n = gst_caps_get_size (caps);
+  for (i = 0; i < n; i++) {
+    structure = gst_caps_get_structure (caps, i);
+
+    /* If this is already expressed by the existing caps
+     * skip this structure */
+    if (i > 0 && gst_caps_is_subset_structure (ret, structure))
+      continue;
+
+    structure = gst_structure_copy (structure);
+    gst_structure_set (structure,
+        "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+        "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+
+    /* if pixel aspect ratio, make a range of it */
+    if (gst_structure_has_field (structure, "pixel-aspect-ratio")) {
+      gst_structure_set (structure, "pixel-aspect-ratio",
+          GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, NULL);
+    }
+    gst_caps_append_structure (ret, structure);
+  }
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (ret);
+    ret = intersection;
+  }
+
+  GST_DEBUG_OBJECT (trans, "returning caps: %" GST_PTR_FORMAT, ret);
+
+  return ret;
+}
+
+
+static gboolean
+gst_video_scale_decide_allocation (GstBaseTransform * trans, GstQuery * query)
+{
+  GstBufferPool *pool = NULL;
+  guint size, min, max, prefix, alignment;
+
+  gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+      &alignment, &pool);
+
+  if (pool) {
+    GstStructure *config;
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_META_VIDEO);
+    gst_buffer_pool_set_config (pool, config);
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_video_scale_set_caps (GstBaseTransform * trans, GstCaps * in, GstCaps * out)
+{
+  GstVideoScale *videoscale = GST_VIDEO_SCALE (trans);
+  gboolean ret;
+  GstVideoInfo in_info, out_info;
+  gint from_dar_n, from_dar_d, to_dar_n, to_dar_d;
+
+  ret = gst_video_info_from_caps (&in_info, in);
+  ret &= gst_video_info_from_caps (&out_info, out);
+  if (!ret)
+    goto invalid_formats;
+
+  if (!gst_util_fraction_multiply (in_info.width,
+          in_info.height, out_info.par_n, out_info.par_d, &from_dar_n,
+          &from_dar_d)) {
+    from_dar_n = from_dar_d = -1;
+  }
+
+  if (!gst_util_fraction_multiply (out_info.width,
+          out_info.height, out_info.par_n, out_info.par_d, &to_dar_n,
+          &to_dar_d)) {
+    to_dar_n = to_dar_d = -1;
+  }
+
+  videoscale->borders_w = videoscale->borders_h = 0;
+  if (to_dar_n != from_dar_n || to_dar_d != from_dar_d) {
+    if (videoscale->add_borders) {
+      gint n, d, to_h, to_w;
+
+      if (from_dar_n != -1 && from_dar_d != -1
+          && gst_util_fraction_multiply (from_dar_n, from_dar_d, out_info.par_n,
+              out_info.par_d, &n, &d)) {
+        to_h = gst_util_uint64_scale_int (out_info.width, d, n);
+        if (to_h <= out_info.height) {
+          videoscale->borders_h = out_info.height - to_h;
+          videoscale->borders_w = 0;
+        } else {
+          to_w = gst_util_uint64_scale_int (out_info.height, n, d);
+          g_assert (to_w <= out_info.width);
+          videoscale->borders_h = 0;
+          videoscale->borders_w = out_info.width - to_w;
+        }
+      } else {
+        GST_WARNING_OBJECT (videoscale, "Can't calculate borders");
+      }
+    } else {
+      GST_WARNING_OBJECT (videoscale, "Can't keep DAR!");
+    }
+  }
+
+  if (videoscale->tmp_buf)
+    g_free (videoscale->tmp_buf);
+  videoscale->tmp_buf = g_malloc (out_info.width * 8 * 4);
+
+  gst_base_transform_set_passthrough (trans,
+      (in_info.width == out_info.width && in_info.height == out_info.height));
+
+  GST_DEBUG_OBJECT (videoscale, "from=%dx%d (par=%d/%d dar=%d/%d), size %"
+      G_GSIZE_FORMAT " -> to=%dx%d (par=%d/%d dar=%d/%d borders=%d:%d), "
+      "size %" G_GSIZE_FORMAT,
+      in_info.width, in_info.height, out_info.par_n, out_info.par_d,
+      from_dar_n, from_dar_d, in_info.size, out_info.width,
+      out_info.height, out_info.par_n, out_info.par_d, to_dar_n, to_dar_d,
+      videoscale->borders_w, videoscale->borders_h, out_info.size);
+
+  videoscale->from_info = in_info;
+  videoscale->to_info = out_info;
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_formats:
+  {
+    GST_DEBUG_OBJECT (videoscale, "could not parse formats");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_video_scale_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
+    gsize * size)
+{
+  GstVideoInfo info;
+
+  if (!gst_video_info_from_caps (&info, caps))
+    return FALSE;
+
+  *size = info.size;
+
+  return TRUE;
+}
+
+static void
+gst_video_scale_fixate_caps (GstBaseTransform * base, GstPadDirection direction,
+    GstCaps * caps, GstCaps * othercaps)
+{
+  GstStructure *ins, *outs;
+  const GValue *from_par, *to_par;
+  GValue fpar = { 0, }, tpar = {
+  0,};
+
+  g_return_if_fail (gst_caps_is_fixed (caps));
+
+  GST_DEBUG_OBJECT (base, "trying to fixate othercaps %" GST_PTR_FORMAT
+      " based on caps %" GST_PTR_FORMAT, othercaps, caps);
+
+  ins = gst_caps_get_structure (caps, 0);
+  outs = gst_caps_get_structure (othercaps, 0);
+
+  from_par = gst_structure_get_value (ins, "pixel-aspect-ratio");
+  to_par = gst_structure_get_value (outs, "pixel-aspect-ratio");
+
+  /* If we're fixating from the sinkpad we always set the PAR and
+   * assume that missing PAR on the sinkpad means 1/1 and
+   * missing PAR on the srcpad means undefined
+   */
+  if (direction == GST_PAD_SINK) {
+    if (!from_par) {
+      g_value_init (&fpar, GST_TYPE_FRACTION);
+      gst_value_set_fraction (&fpar, 1, 1);
+      from_par = &fpar;
+    }
+    if (!to_par) {
+      g_value_init (&tpar, GST_TYPE_FRACTION_RANGE);
+      gst_value_set_fraction_range_full (&tpar, 1, G_MAXINT, G_MAXINT, 1);
+      to_par = &tpar;
+    }
+  } else {
+    if (!to_par) {
+      g_value_init (&tpar, GST_TYPE_FRACTION);
+      gst_value_set_fraction (&tpar, 1, 1);
+      to_par = &tpar;
+
+      gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
+          NULL);
+    }
+    if (!from_par) {
+      g_value_init (&fpar, GST_TYPE_FRACTION);
+      gst_value_set_fraction (&fpar, 1, 1);
+      from_par = &fpar;
+    }
+  }
+
+  /* we have both PAR but they might not be fixated */
+  {
+    gint from_w, from_h, from_par_n, from_par_d, to_par_n, to_par_d;
+    gint w = 0, h = 0;
+    gint from_dar_n, from_dar_d;
+    gint num, den;
+
+    /* from_par should be fixed */
+    g_return_if_fail (gst_value_is_fixed (from_par));
+
+    from_par_n = gst_value_get_fraction_numerator (from_par);
+    from_par_d = gst_value_get_fraction_denominator (from_par);
+
+    gst_structure_get_int (ins, "width", &from_w);
+    gst_structure_get_int (ins, "height", &from_h);
+
+    gst_structure_get_int (outs, "width", &w);
+    gst_structure_get_int (outs, "height", &h);
+
+    /* if both width and height are already fixed, we can't do anything
+     * about it anymore */
+    if (w && h) {
+      guint n, d;
+
+      GST_DEBUG_OBJECT (base, "dimensions already set to %dx%d, not fixating",
+          w, h);
+      if (!gst_value_is_fixed (to_par)) {
+        if (gst_video_calculate_display_ratio (&n, &d, from_w, from_h,
+                from_par_n, from_par_d, w, h)) {
+          GST_DEBUG_OBJECT (base, "fixating to_par to %dx%d", n, d);
+          if (gst_structure_has_field (outs, "pixel-aspect-ratio"))
+            gst_structure_fixate_field_nearest_fraction (outs,
+                "pixel-aspect-ratio", n, d);
+          else if (n != d)
+            gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+                n, d, NULL);
+        }
+      }
+      goto done;
+    }
+
+    /* Calculate input DAR */
+    if (!gst_util_fraction_multiply (from_w, from_h, from_par_n, from_par_d,
+            &from_dar_n, &from_dar_d)) {
+      GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+          ("Error calculating the output scaled size - integer overflow"));
+      goto done;
+    }
+
+    GST_DEBUG_OBJECT (base, "Input DAR is %d/%d", from_dar_n, from_dar_d);
+
+    /* If either width or height are fixed there's not much we
+     * can do either except choosing a height or width and PAR
+     * that matches the DAR as good as possible
+     */
+    if (h) {
+      GstStructure *tmp;
+      gint set_w, set_par_n, set_par_d;
+
+      GST_DEBUG_OBJECT (base, "height is fixed (%d)", h);
+
+      /* If the PAR is fixed too, there's not much to do
+       * except choosing the width that is nearest to the
+       * width with the same DAR */
+      if (gst_value_is_fixed (to_par)) {
+        to_par_n = gst_value_get_fraction_numerator (to_par);
+        to_par_d = gst_value_get_fraction_denominator (to_par);
+
+        GST_DEBUG_OBJECT (base, "PAR is fixed %d/%d", to_par_n, to_par_d);
+
+        if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_d,
+                to_par_n, &num, &den)) {
+          GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+              ("Error calculating the output scaled size - integer overflow"));
+          goto done;
+        }
+
+        w = (guint) gst_util_uint64_scale_int (h, num, den);
+        gst_structure_fixate_field_nearest_int (outs, "width", w);
+
+        goto done;
+      }
+
+      /* The PAR is not fixed and it's quite likely that we can set
+       * an arbitrary PAR. */
+
+      /* Check if we can keep the input width */
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "width", from_w);
+      gst_structure_get_int (tmp, "width", &set_w);
+
+      /* Might have failed but try to keep the DAR nonetheless by
+       * adjusting the PAR */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, h, set_w,
+              &to_par_n, &to_par_d)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        gst_structure_free (tmp);
+        goto done;
+      }
+
+      if (!gst_structure_has_field (tmp, "pixel-aspect-ratio"))
+        gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par);
+      gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio",
+          to_par_n, to_par_d);
+      gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n,
+          &set_par_d);
+      gst_structure_free (tmp);
+
+      /* Check if the adjusted PAR is accepted */
+      if (set_par_n == to_par_n && set_par_d == to_par_d) {
+        if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+            set_par_n != set_par_d)
+          gst_structure_set (outs, "width", G_TYPE_INT, set_w,
+              "pixel-aspect-ratio", GST_TYPE_FRACTION, set_par_n, set_par_d,
+              NULL);
+        goto done;
+      }
+
+      /* Otherwise scale the width to the new PAR and check if the
+       * adjusted with is accepted. If all that fails we can't keep
+       * the DAR */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d,
+              set_par_n, &num, &den)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        goto done;
+      }
+
+      w = (guint) gst_util_uint64_scale_int (h, num, den);
+      gst_structure_fixate_field_nearest_int (outs, "width", w);
+      if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+          set_par_n != set_par_d)
+        gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+            set_par_n, set_par_d, NULL);
+
+      goto done;
+    } else if (w) {
+      GstStructure *tmp;
+      gint set_h, set_par_n, set_par_d;
+
+      GST_DEBUG_OBJECT (base, "width is fixed (%d)", w);
+
+      /* If the PAR is fixed too, there's not much to do
+       * except choosing the height that is nearest to the
+       * height with the same DAR */
+      if (gst_value_is_fixed (to_par)) {
+        to_par_n = gst_value_get_fraction_numerator (to_par);
+        to_par_d = gst_value_get_fraction_denominator (to_par);
+
+        GST_DEBUG_OBJECT (base, "PAR is fixed %d/%d", to_par_n, to_par_d);
+
+        if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_d,
+                to_par_n, &num, &den)) {
+          GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+              ("Error calculating the output scaled size - integer overflow"));
+          goto done;
+        }
+
+        h = (guint) gst_util_uint64_scale_int (w, den, num);
+        gst_structure_fixate_field_nearest_int (outs, "height", h);
+
+        goto done;
+      }
+
+      /* The PAR is not fixed and it's quite likely that we can set
+       * an arbitrary PAR. */
+
+      /* Check if we can keep the input height */
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "height", from_h);
+      gst_structure_get_int (tmp, "height", &set_h);
+
+      /* Might have failed but try to keep the DAR nonetheless by
+       * adjusting the PAR */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_h, w,
+              &to_par_n, &to_par_d)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        gst_structure_free (tmp);
+        goto done;
+      }
+      if (!gst_structure_has_field (tmp, "pixel-aspect-ratio"))
+        gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par);
+      gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio",
+          to_par_n, to_par_d);
+      gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n,
+          &set_par_d);
+      gst_structure_free (tmp);
+
+      /* Check if the adjusted PAR is accepted */
+      if (set_par_n == to_par_n && set_par_d == to_par_d) {
+        if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+            set_par_n != set_par_d)
+          gst_structure_set (outs, "height", G_TYPE_INT, set_h,
+              "pixel-aspect-ratio", GST_TYPE_FRACTION, set_par_n, set_par_d,
+              NULL);
+        goto done;
+      }
+
+      /* Otherwise scale the height to the new PAR and check if the
+       * adjusted with is accepted. If all that fails we can't keep
+       * the DAR */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d,
+              set_par_n, &num, &den)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        goto done;
+      }
+
+      h = (guint) gst_util_uint64_scale_int (w, den, num);
+      gst_structure_fixate_field_nearest_int (outs, "height", h);
+      if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+          set_par_n != set_par_d)
+        gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+            set_par_n, set_par_d, NULL);
+
+      goto done;
+    } else if (gst_value_is_fixed (to_par)) {
+      GstStructure *tmp;
+      gint set_h, set_w, f_h, f_w;
+
+      to_par_n = gst_value_get_fraction_numerator (to_par);
+      to_par_d = gst_value_get_fraction_denominator (to_par);
+
+      /* Calculate scale factor for the PAR change */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, to_par_n,
+              to_par_d, &num, &den)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        goto done;
+      }
+
+      /* Try to keep the input height (because of interlacing) */
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "height", from_h);
+      gst_structure_get_int (tmp, "height", &set_h);
+
+      /* This might have failed but try to scale the width
+       * to keep the DAR nonetheless */
+      w = (guint) gst_util_uint64_scale_int (set_h, num, den);
+      gst_structure_fixate_field_nearest_int (tmp, "width", w);
+      gst_structure_get_int (tmp, "width", &set_w);
+      gst_structure_free (tmp);
+
+      /* We kept the DAR and the height is nearest to the original height */
+      if (set_w == w) {
+        gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height",
+            G_TYPE_INT, set_h, NULL);
+        goto done;
+      }
+
+      f_h = set_h;
+      f_w = set_w;
+
+      /* If the former failed, try to keep the input width at least */
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "width", from_w);
+      gst_structure_get_int (tmp, "width", &set_w);
+
+      /* This might have failed but try to scale the width
+       * to keep the DAR nonetheless */
+      h = (guint) gst_util_uint64_scale_int (set_w, den, num);
+      gst_structure_fixate_field_nearest_int (tmp, "height", h);
+      gst_structure_get_int (tmp, "height", &set_h);
+      gst_structure_free (tmp);
+
+      /* We kept the DAR and the width is nearest to the original width */
+      if (set_h == h) {
+        gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height",
+            G_TYPE_INT, set_h, NULL);
+        goto done;
+      }
+
+      /* If all this failed, keep the height that was nearest to the orignal
+       * height and the nearest possible width. This changes the DAR but
+       * there's not much else to do here.
+       */
+      gst_structure_set (outs, "width", G_TYPE_INT, f_w, "height", G_TYPE_INT,
+          f_h, NULL);
+      goto done;
+    } else {
+      GstStructure *tmp;
+      gint set_h, set_w, set_par_n, set_par_d, tmp2;
+
+      /* width, height and PAR are not fixed but passthrough is not possible */
+
+      /* First try to keep the height and width as good as possible
+       * and scale PAR */
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "height", from_h);
+      gst_structure_get_int (tmp, "height", &set_h);
+      gst_structure_fixate_field_nearest_int (tmp, "width", from_w);
+      gst_structure_get_int (tmp, "width", &set_w);
+
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_h, set_w,
+              &to_par_n, &to_par_d)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        goto done;
+      }
+
+      if (!gst_structure_has_field (tmp, "pixel-aspect-ratio"))
+        gst_structure_set_value (tmp, "pixel-aspect-ratio", to_par);
+      gst_structure_fixate_field_nearest_fraction (tmp, "pixel-aspect-ratio",
+          to_par_n, to_par_d);
+      gst_structure_get_fraction (tmp, "pixel-aspect-ratio", &set_par_n,
+          &set_par_d);
+      gst_structure_free (tmp);
+
+      if (set_par_n == to_par_n && set_par_d == to_par_d) {
+        gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height",
+            G_TYPE_INT, set_h, NULL);
+
+        if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+            set_par_n != set_par_d)
+          gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+              set_par_n, set_par_d, NULL);
+        goto done;
+      }
+
+      /* Otherwise try to scale width to keep the DAR with the set
+       * PAR and height */
+      if (!gst_util_fraction_multiply (from_dar_n, from_dar_d, set_par_d,
+              set_par_n, &num, &den)) {
+        GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
+            ("Error calculating the output scaled size - integer overflow"));
+        goto done;
+      }
+
+      w = (guint) gst_util_uint64_scale_int (set_h, num, den);
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "width", w);
+      gst_structure_get_int (tmp, "width", &tmp2);
+      gst_structure_free (tmp);
+
+      if (tmp2 == w) {
+        gst_structure_set (outs, "width", G_TYPE_INT, tmp2, "height",
+            G_TYPE_INT, set_h, NULL);
+        if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+            set_par_n != set_par_d)
+          gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+              set_par_n, set_par_d, NULL);
+        goto done;
+      }
+
+      /* ... or try the same with the height */
+      h = (guint) gst_util_uint64_scale_int (set_w, den, num);
+      tmp = gst_structure_copy (outs);
+      gst_structure_fixate_field_nearest_int (tmp, "height", h);
+      gst_structure_get_int (tmp, "height", &tmp2);
+      gst_structure_free (tmp);
+
+      if (tmp2 == h) {
+        gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height",
+            G_TYPE_INT, tmp2, NULL);
+        if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+            set_par_n != set_par_d)
+          gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+              set_par_n, set_par_d, NULL);
+        goto done;
+      }
+
+      /* If all fails we can't keep the DAR and take the nearest values
+       * for everything from the first try */
+      gst_structure_set (outs, "width", G_TYPE_INT, set_w, "height",
+          G_TYPE_INT, set_h, NULL);
+      if (gst_structure_has_field (outs, "pixel-aspect-ratio") ||
+          set_par_n != set_par_d)
+        gst_structure_set (outs, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+            set_par_n, set_par_d, NULL);
+    }
+  }
+
+done:
+  GST_DEBUG_OBJECT (base, "fixated othercaps to %" GST_PTR_FORMAT, othercaps);
+
+  if (from_par == &fpar)
+    g_value_unset (&fpar);
+  if (to_par == &tpar)
+    g_value_unset (&tpar);
+}
+
+static void
+gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
+    gint component, gint b_w, gint b_h)
+{
+  GstVideoFormat format;
+  gint width, height;
+
+  format = GST_VIDEO_FRAME_FORMAT (frame);
+  width = GST_VIDEO_FRAME_WIDTH (frame);
+  height = GST_VIDEO_FRAME_HEIGHT (frame);
+
+  image->real_width = GST_VIDEO_FRAME_COMP_WIDTH (frame, component);
+  image->real_height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, component);
+  image->width = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame->info.finfo,
+      component, MAX (1, width - b_w));
+  image->height = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame->info.finfo,
+      component, MAX (1, height - b_h));
+
+  image->border_top = (image->real_height - image->height) / 2;
+  image->border_bottom = image->real_height - image->height - image->border_top;
+
+  if (format == GST_VIDEO_FORMAT_YUY2 || format == GST_VIDEO_FORMAT_YVYU
+      || format == GST_VIDEO_FORMAT_UYVY) {
+    g_assert (component == 0);
+
+    image->border_left = (image->real_width - image->width) / 2;
+
+    if (image->border_left % 2 == 1)
+      image->border_left--;
+    image->border_right = image->real_width - image->width - image->border_left;
+  } else {
+    image->border_left = (image->real_width - image->width) / 2;
+    image->border_right = image->real_width - image->width - image->border_left;
+  }
+
+  image->real_pixels = frame->data[component];
+  image->stride = frame->info.stride[component];
+
+  image->pixels =
+      image->real_pixels + image->border_top * image->stride +
+      image->border_left * GST_VIDEO_FRAME_COMP_PSTRIDE (frame, component);
+}
+
+static const guint8 *
+_get_black_for_format (GstVideoFormat format)
+{
+  static const guint8 black[][4] = {
+    {255, 0, 0, 0},             /*  0 = ARGB, ABGR, xRGB, xBGR */
+    {0, 0, 0, 255},             /*  1 = RGBA, BGRA, RGBx, BGRx */
+    {255, 16, 128, 128},        /*  2 = AYUV */
+    {0, 0, 0, 0},               /*  3 = RGB and BGR */
+    {16, 128, 128, 0},          /*  4 = v301 */
+    {16, 128, 16, 128},         /*  5 = YUY2, YUYV */
+    {128, 16, 128, 16},         /*  6 = UYVY */
+    {16, 0, 0, 0},              /*  7 = Y */
+    {0, 0, 0, 0}                /*  8 = RGB565, RGB666 */
+  };
+
+  switch (format) {
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_ARGB64:
+      return black[0];
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRx:
+      return black[1];
+    case GST_VIDEO_FORMAT_AYUV:
+    case GST_VIDEO_FORMAT_AYUV64:
+      return black[2];
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+      return black[3];
+    case GST_VIDEO_FORMAT_v308:
+      return black[4];
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+      return black[5];
+    case GST_VIDEO_FORMAT_UYVY:
+      return black[6];
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_GRAY8:
+      return black[7];
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_Y16:
+      return NULL;              /* Handled by the caller */
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+    case GST_VIDEO_FORMAT_Y444:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y41B:
+      return black[4];          /* Y, U, V, 0 */
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_RGB15:
+      return black[8];
+    default:
+      return NULL;
+  }
+}
+
+static GstFlowReturn
+gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
+    GstBuffer * out)
+{
+  GstVideoScale *videoscale = GST_VIDEO_SCALE (trans);
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstVideoFrame in_frame, out_frame;
+  VSImage dest[4] = { {NULL,}, };
+  VSImage src[4] = { {NULL,}, };
+  gint method;
+  const guint8 *black;
+  gboolean add_borders;
+  GstVideoFormat format;
+  gint i;
+
+  GST_OBJECT_LOCK (videoscale);
+  method = videoscale->method;
+  add_borders = videoscale->add_borders;
+  GST_OBJECT_UNLOCK (videoscale);
+
+  format = GST_VIDEO_INFO_FORMAT (&videoscale->from_info);
+  black = _get_black_for_format (format);
+
+  if (videoscale->from_info.width == 1) {
+    method = GST_VIDEO_SCALE_NEAREST;
+  }
+  if (method == GST_VIDEO_SCALE_4TAP &&
+      (videoscale->from_info.width < 4 || videoscale->from_info.height < 4)) {
+    method = GST_VIDEO_SCALE_BILINEAR;
+  }
+
+  gst_video_frame_map (&in_frame, &videoscale->from_info, in, GST_MAP_READ);
+  gst_video_frame_map (&out_frame, &videoscale->to_info, out, GST_MAP_WRITE);
+
+  for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (&in_frame); i++) {
+    gst_video_scale_setup_vs_image (&src[i], &in_frame, i, 0, 0);
+    gst_video_scale_setup_vs_image (&dest[i], &out_frame, i,
+        videoscale->borders_w, videoscale->borders_h);
+  }
+
+  switch (format) {
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_AYUV:
+      if (add_borders)
+        vs_fill_borders_RGBA (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_LANCZOS:
+          vs_image_scale_lanczos_AYUV (&dest[0], &src[0], videoscale->tmp_buf,
+              videoscale->sharpness, videoscale->dither, videoscale->submethod,
+              videoscale->envelope, videoscale->sharpen);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_ARGB64:
+    case GST_VIDEO_FORMAT_AYUV64:
+      if (add_borders)
+        vs_fill_borders_AYUV64 (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_AYUV64 (&dest[0], &src[0],
+              videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_v308:
+      if (add_borders)
+        vs_fill_borders_RGB (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_RGB (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_RGB (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_RGB (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+      if (add_borders)
+        vs_fill_borders_YUYV (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_UYVY:
+      if (add_borders)
+        vs_fill_borders_UYVY (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_GRAY8:
+      if (add_borders)
+        vs_fill_borders_Y (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_Y16:
+      if (add_borders)
+        vs_fill_borders_Y16 (&dest[0], 0);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+    case GST_VIDEO_FORMAT_Y444:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y41B:
+      if (add_borders) {
+        vs_fill_borders_Y (&dest[0], black);
+        vs_fill_borders_Y (&dest[1], black + 1);
+        vs_fill_borders_Y (&dest[2], black + 2);
+      }
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          vs_image_scale_nearest_Y (&dest[1], &src[1], videoscale->tmp_buf);
+          vs_image_scale_nearest_Y (&dest[2], &src[2], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          vs_image_scale_linear_Y (&dest[1], &src[1], videoscale->tmp_buf);
+          vs_image_scale_linear_Y (&dest[2], &src[2], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf);
+          vs_image_scale_4tap_Y (&dest[1], &src[1], videoscale->tmp_buf);
+          vs_image_scale_4tap_Y (&dest[2], &src[2], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_LANCZOS:
+          vs_image_scale_lanczos_Y (&dest[0], &src[0], videoscale->tmp_buf,
+              videoscale->sharpness, videoscale->dither, videoscale->submethod,
+              videoscale->envelope, videoscale->sharpen);
+          vs_image_scale_lanczos_Y (&dest[1], &src[1], videoscale->tmp_buf,
+              videoscale->sharpness, videoscale->dither, videoscale->submethod,
+              videoscale->envelope, videoscale->sharpen);
+          vs_image_scale_lanczos_Y (&dest[2], &src[2], videoscale->tmp_buf,
+              videoscale->sharpness, videoscale->dither, videoscale->submethod,
+              videoscale->envelope, videoscale->sharpen);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_RGB16:
+      if (add_borders)
+        vs_fill_borders_RGB565 (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_RGB565 (&dest[0], &src[0],
+              videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_RGB565 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_RGB565 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    case GST_VIDEO_FORMAT_RGB15:
+      if (add_borders)
+        vs_fill_borders_RGB555 (&dest[0], black);
+      switch (method) {
+        case GST_VIDEO_SCALE_NEAREST:
+          vs_image_scale_nearest_RGB555 (&dest[0], &src[0],
+              videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_BILINEAR:
+          vs_image_scale_linear_RGB555 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        case GST_VIDEO_SCALE_4TAP:
+          vs_image_scale_4tap_RGB555 (&dest[0], &src[0], videoscale->tmp_buf);
+          break;
+        default:
+          goto unknown_mode;
+      }
+      break;
+    default:
+      goto unsupported;
+  }
+
+  GST_LOG_OBJECT (videoscale, "pushing buffer of %" G_GSIZE_FORMAT " bytes",
+      gst_buffer_get_size (out));
+
+done:
+  gst_video_frame_unmap (&out_frame);
+  gst_video_frame_unmap (&in_frame);
+
+  return ret;
+
+  /* ERRORS */
+unsupported:
+  {
+    GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("Unsupported format %d for scaling method %d", format, method));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+unknown_mode:
+  {
+    GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
+        ("Unknown scaling method %d", videoscale->method));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static gboolean
+gst_video_scale_src_event (GstBaseTransform * trans, GstEvent * event)
+{
+  GstVideoScale *videoscale = GST_VIDEO_SCALE (trans);
+  gboolean ret;
+  gdouble a;
+  GstStructure *structure;
+
+  GST_DEBUG_OBJECT (videoscale, "handling %s event",
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_NAVIGATION:
+      event =
+          GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
+
+      structure = (GstStructure *) gst_event_get_structure (event);
+      if (gst_structure_get_double (structure, "pointer_x", &a)) {
+        gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE,
+            a * videoscale->from_info.width / videoscale->to_info.width, NULL);
+      }
+      if (gst_structure_get_double (structure, "pointer_y", &a)) {
+        gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE,
+            a * videoscale->from_info.height / videoscale->to_info.height,
+            NULL);
+      }
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_BASE_TRANSFORM_CLASS (parent_class)->src_event (trans, event);
+
+  return ret;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_videoscale_orc_init ();
+
+  if (!gst_element_register (plugin, "videoscale", GST_RANK_NONE,
+          GST_TYPE_VIDEO_SCALE))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (video_scale_debug, "videoscale", 0,
+      "videoscale element");
+
+  vs_4tap_init ();
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "videoscale",
+    "Resizes video", plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN)
diff --git a/gst/videoscale/gstvideoscale.h b/gst/videoscale/gstvideoscale.h
new file mode 100644
index 0000000..c414b3f
--- /dev/null
+++ b/gst/videoscale/gstvideoscale.h
@@ -0,0 +1,100 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_SCALE_H__
+#define __GST_VIDEO_SCALE_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
+
+#include "vs_image.h"
+
+G_BEGIN_DECLS
+
+GST_DEBUG_CATEGORY_EXTERN (video_scale_debug);
+#define GST_CAT_DEFAULT video_scale_debug
+
+#define GST_TYPE_VIDEO_SCALE \
+  (gst_video_scale_get_type())
+#define GST_VIDEO_SCALE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_SCALE,GstVideoScale))
+#define GST_VIDEO_SCALE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_SCALE,GstVideoScaleClass))
+#define GST_IS_VIDEO_SCALE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_SCALE))
+#define GST_IS_VIDEO_SCALE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_SCALE))
+
+/**
+ * GstVideoScaleMethod:
+ * @GST_VIDEO_SCALE_NEAREST: use nearest neighbour scaling (fast and ugly)
+ * @GST_VIDEO_SCALE_BILINEAR: use bilinear scaling (slower but prettier).
+ * @GST_VIDEO_SCALE_4TAP: use a 4-tap filter for scaling (slow).
+ * @GST_VIDEO_SCALE_LANCZOS: use a multitap Lanczos filter for scaling (slow).
+ *
+ * The videoscale method to use.
+ */
+typedef enum {
+  GST_VIDEO_SCALE_NEAREST,
+  GST_VIDEO_SCALE_BILINEAR,
+  GST_VIDEO_SCALE_4TAP,
+  GST_VIDEO_SCALE_LANCZOS
+} GstVideoScaleMethod;
+
+typedef struct _GstVideoScale GstVideoScale;
+typedef struct _GstVideoScaleClass GstVideoScaleClass;
+
+/**
+ * GstVideoScale:
+ *
+ * Opaque data structure
+ */
+struct _GstVideoScale {
+  GstVideoFilter element;
+
+  /* properties */
+  GstVideoScaleMethod method;
+  gboolean add_borders;
+  double sharpness;
+  double sharpen;
+  gboolean dither;
+  int submethod;
+  double envelope;
+
+  /* negotiated stuff */
+  GstVideoInfo from_info;
+  GstVideoInfo to_info;
+
+  gint borders_h;
+  gint borders_w;
+
+  /*< private >*/
+  guint8 *tmp_buf;
+};
+
+struct _GstVideoScaleClass {
+  GstVideoFilterClass parent_class;
+};
+
+GType gst_video_scale_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_SCALE_H__ */
diff --git a/gst/videoscale/gstvideoscaleorc-dist.c b/gst/videoscale/gstvideoscaleorc-dist.c
new file mode 100644
index 0000000..034baf5
--- /dev/null
+++ b/gst/videoscale/gstvideoscaleorc-dist.c
@@ -0,0 +1,2264 @@
+
+/* autogenerated from gstvideoscaleorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
+    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
+    int p1, int n);
+void orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
+    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
+    int p1, int p2, int n);
+void orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n);
+void orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
+void gst_videoscale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n);
+
+void gst_videoscale_orc_init (void);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* orc_merge_linear_u8 */
+#ifdef DISABLE_ORC
+void
+orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
+    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
+    int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_int8 var47;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 6: loadpw */
+  var38.i = p1;
+  /* 8: loadpw */
+  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var41 = ptr4[i];
+    /* 1: loadb */
+    var36 = ptr4[i];
+    /* 2: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 3: loadb */
+    var37 = ptr5[i];
+    /* 4: convubw */
+    var43.i = (orc_uint8) var37;
+    /* 5: subw */
+    var44.i = var43.i - var42.i;
+    /* 7: mullw */
+    var45.i = (var44.i * var38.i) & 0xffff;
+    /* 9: addw */
+    var46.i = var45.i + var39.i;
+    /* 10: convhwb */
+    var47 = ((orc_uint16) var46.i) >> 8;
+    /* 11: addb */
+    var40 = var47 + var41;
+    /* 12: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_int8 var47;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 6: loadpw */
+  var38.i = ex->params[24];
+  /* 8: loadpw */
+  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var41 = ptr4[i];
+    /* 1: loadb */
+    var36 = ptr4[i];
+    /* 2: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 3: loadb */
+    var37 = ptr5[i];
+    /* 4: convubw */
+    var43.i = (orc_uint8) var37;
+    /* 5: subw */
+    var44.i = var43.i - var42.i;
+    /* 7: mullw */
+    var45.i = (var44.i * var38.i) & 0xffff;
+    /* 9: addw */
+    var46.i = var45.i + var39.i;
+    /* 10: convhwb */
+    var47 = ((orc_uint16) var46.i) >> 8;
+    /* 11: addb */
+    var40 = var47 + var41;
+    /* 12: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_merge_linear_u8;
+void
+orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
+    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
+    int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_merge_linear_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_merge_linear_u16 */
+#ifdef DISABLE_ORC
+void
+orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
+    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
+    int p1, int p2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+  /* 1: loadpw */
+  var35.i = p1;
+  /* 4: loadpw */
+  var37.i = p2;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 2: muluwl */
+    var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i);
+    /* 3: loadw */
+    var36 = ptr5[i];
+    /* 5: muluwl */
+    var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i);
+    /* 6: addl */
+    var41.i = var39.i + var40.i;
+    /* 7: shrul */
+    var42.i = ((orc_uint32) var41.i) >> 16;
+    /* 8: convlw */
+    var38.i = var42.i;
+    /* 9: storew */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_orc_merge_linear_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+  /* 1: loadpw */
+  var35.i = ex->params[24];
+  /* 4: loadpw */
+  var37.i = ex->params[25];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 2: muluwl */
+    var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i);
+    /* 3: loadw */
+    var36 = ptr5[i];
+    /* 5: muluwl */
+    var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i);
+    /* 6: addl */
+    var41.i = var39.i + var40.i;
+    /* 7: shrul */
+    var42.i = ((orc_uint32) var41.i) >> 16;
+    /* 8: convlw */
+    var38.i = var42.i;
+    /* 9: storew */
+    ptr0[i] = var38;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_merge_linear_u16;
+void
+orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
+    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
+    int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_merge_linear_u16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_splat_u16 */
+#ifdef DISABLE_ORC
+void
+orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 0: loadpw */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 0: loadpw */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_splat_u16;
+void
+orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_splat_u16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_splat_u32 */
+#ifdef DISABLE_ORC
+void
+orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 0: loadpl */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyl */
+    var33.i = var32.i;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 0: loadpl */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyl */
+    var33.i = var32.i;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_splat_u32;
+void
+orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_splat_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_splat_u64 */
+#ifdef DISABLE_ORC
+void
+orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 0: loadpq */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 0: loadpq */
+  var32.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_splat_u64;
+void
+orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_splat_u64;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = tmp.x2[0];
+    ex->params[ORC_VAR_T1] = tmp.x2[1];
+  }
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_downsample_u8 */
+#ifdef DISABLE_ORC
+void
+orc_downsample_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var34.i;
+      var36 = _src.x2[1];
+      var37 = _src.x2[0];
+    }
+    /* 2: avgub */
+    var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_downsample_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var34.i;
+      var36 = _src.x2[1];
+      var37 = _src.x2[0];
+    }
+    /* 2: avgub */
+    var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+    /* 3: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_downsample_u8;
+void
+orc_downsample_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_downsample_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_downsample_u16 */
+#ifdef DISABLE_ORC
+void
+orc_downsample_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[1];
+      var37.i = _src.x2[0];
+    }
+    /* 2: avguw */
+    var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
+    /* 3: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_downsample_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[1];
+      var37.i = _src.x2[0];
+    }
+    /* 2: avguw */
+    var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
+    /* 3: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_downsample_u16;
+void
+orc_downsample_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_downsample_u16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_downsample_u32 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[1];
+      var37.i = _src.x2[0];
+    }
+    /* 2: avgub */
+    var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
+    var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
+    var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
+    var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
+    /* 3: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_downsample_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var34.i;
+      var36.i = _src.x2[1];
+      var37.i = _src.x2[0];
+    }
+    /* 2: avgub */
+    var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
+    var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
+    var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
+    var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
+    /* 3: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_downsample_u32;
+void
+gst_videoscale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_downsample_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_downsample_yuyv */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[0];
+      var40.x4[0] = _src.x2[1];
+      var41.x4[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[1];
+      var40.x4[1] = _src.x2[1];
+      var41.x4[1] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[2];
+      var40.x4[2] = _src.x2[1];
+      var41.x4[2] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[3];
+      var40.x4[3] = _src.x2[1];
+      var41.x4[3] = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var42.x2[0] = _src.x2[1];
+      var43.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var42.x2[1] = _src.x2[1];
+      var43.x2[1] = _src.x2[0];
+    }
+    /* 3: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var41.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
+    var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var47.x2[0];
+      var39.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var47.x2[1];
+      var39.x2[1] = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_downsample_yuyv (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var38 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[0];
+      var40.x4[0] = _src.x2[1];
+      var41.x4[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[1];
+      var40.x4[1] = _src.x2[1];
+      var41.x4[1] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[2];
+      var40.x4[2] = _src.x2[1];
+      var41.x4[2] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var38.x4[3];
+      var40.x4[3] = _src.x2[1];
+      var41.x4[3] = _src.x2[0];
+    }
+    /* 2: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[0];
+      var42.x2[0] = _src.x2[1];
+      var43.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var40.x2[1];
+      var42.x2[1] = _src.x2[1];
+      var43.x2[1] = _src.x2[0];
+    }
+    /* 3: avgub */
+    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 4: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var41.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 5: avgub */
+    var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
+    var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
+    /* 6: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[0];
+      _dest.x2[1] = var47.x2[0];
+      var39.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var44.x2[1];
+      _dest.x2[1] = var47.x2[1];
+      var39.x2[1] = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var39;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_downsample_yuyv;
+void
+gst_videoscale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_downsample_yuyv;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_resample_nearest_u8 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearb */
+    var32 = ptr4[(p1 + i * p2) >> 16];
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_resample_nearest_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearb */
+    var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_resample_nearest_u8;
+void
+gst_videoscale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_resample_nearest_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_resample_bilinear_u8 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinb */
+    {
+      int tmp = p1 + i * p2;
+      var32 =
+          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_resample_bilinear_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinb */
+    {
+      int tmp = ex->params[24] + i * ex->params[25];
+      var32 =
+          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_resample_bilinear_u8;
+void
+gst_videoscale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_resample_bilinear_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_resample_nearest_u32 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearl */
+    var32 = ptr4[(p1 + i * p2) >> 16];
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_resample_nearest_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearl */
+    var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_resample_nearest_u32;
+void
+gst_videoscale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_resample_nearest_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_resample_bilinear_u32 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = p1 + i * p2;
+      orc_union32 a = ptr4[tmp >> 16];
+      orc_union32 b = ptr4[(tmp >> 16) + 1];
+      var32.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = ex->params[24] + i * ex->params[25];
+      orc_union32 a = ptr4[tmp >> 16];
+      orc_union32 b = ptr4[(tmp >> 16) + 1];
+      var32.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_resample_bilinear_u32;
+void
+gst_videoscale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_resample_bilinear_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_resample_merge_bilinear_u32 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union64 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+  /* 6: loadpw */
+  var37.x4[0] = p1;
+  var37.x4[1] = p1;
+  var37.x4[2] = p1;
+  var37.x4[3] = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = p2 + i * p3;
+      orc_union32 a = ptr5[tmp >> 16];
+      orc_union32 b = ptr5[(tmp >> 16) + 1];
+      var39.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr1[i] = var39;
+    /* 2: loadl */
+    var40 = ptr4[i];
+    /* 3: convubw */
+    var41.x4[0] = (orc_uint8) var40.x4[0];
+    var41.x4[1] = (orc_uint8) var40.x4[1];
+    var41.x4[2] = (orc_uint8) var40.x4[2];
+    var41.x4[3] = (orc_uint8) var40.x4[3];
+    /* 4: convubw */
+    var42.x4[0] = (orc_uint8) var39.x4[0];
+    var42.x4[1] = (orc_uint8) var39.x4[1];
+    var42.x4[2] = (orc_uint8) var39.x4[2];
+    var42.x4[3] = (orc_uint8) var39.x4[3];
+    /* 5: subw */
+    var43.x4[0] = var42.x4[0] - var41.x4[0];
+    var43.x4[1] = var42.x4[1] - var41.x4[1];
+    var43.x4[2] = var42.x4[2] - var41.x4[2];
+    var43.x4[3] = var42.x4[3] - var41.x4[3];
+    /* 7: mullw */
+    var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
+    var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
+    var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
+    var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
+    /* 8: convhwb */
+    var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
+    var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
+    var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
+    var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
+    /* 9: addb */
+    var38.x4[0] = var45.x4[0] + var40.x4[0];
+    var38.x4[1] = var45.x4[1] + var40.x4[1];
+    var38.x4[2] = var45.x4[2] + var40.x4[2];
+    var38.x4[3] = var45.x4[3] + var40.x4[3];
+    /* 10: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_resample_merge_bilinear_u32 (OrcExecutor *
+    ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union64 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+  /* 6: loadpw */
+  var37.x4[0] = ex->params[24];
+  var37.x4[1] = ex->params[24];
+  var37.x4[2] = ex->params[24];
+  var37.x4[3] = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = ex->params[25] + i * ex->params[26];
+      orc_union32 a = ptr5[tmp >> 16];
+      orc_union32 b = ptr5[(tmp >> 16) + 1];
+      var39.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var39.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr1[i] = var39;
+    /* 2: loadl */
+    var40 = ptr4[i];
+    /* 3: convubw */
+    var41.x4[0] = (orc_uint8) var40.x4[0];
+    var41.x4[1] = (orc_uint8) var40.x4[1];
+    var41.x4[2] = (orc_uint8) var40.x4[2];
+    var41.x4[3] = (orc_uint8) var40.x4[3];
+    /* 4: convubw */
+    var42.x4[0] = (orc_uint8) var39.x4[0];
+    var42.x4[1] = (orc_uint8) var39.x4[1];
+    var42.x4[2] = (orc_uint8) var39.x4[2];
+    var42.x4[3] = (orc_uint8) var39.x4[3];
+    /* 5: subw */
+    var43.x4[0] = var42.x4[0] - var41.x4[0];
+    var43.x4[1] = var42.x4[1] - var41.x4[1];
+    var43.x4[2] = var42.x4[2] - var41.x4[2];
+    var43.x4[3] = var42.x4[3] - var41.x4[3];
+    /* 7: mullw */
+    var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
+    var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
+    var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
+    var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
+    /* 8: convhwb */
+    var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
+    var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
+    var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
+    var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
+    /* 9: addb */
+    var38.x4[0] = var45.x4[0] + var40.x4[0];
+    var38.x4[1] = var45.x4[1] + var40.x4[1];
+    var38.x4[2] = var45.x4[2] + var40.x4[2];
+    var38.x4[3] = var45.x4[3] + var40.x4[3];
+    /* 10: storel */
+    ptr0[i] = var38;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_resample_merge_bilinear_u32;
+void
+gst_videoscale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_resample_merge_bilinear_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_videoscale_orc_merge_bicubic_u8 */
+#ifdef DISABLE_ORC
+void
+gst_videoscale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 1: loadpb */
+  var35 = p2;
+  /* 4: loadpb */
+  var37 = p3;
+  /* 8: loadpb */
+  var39 = p1;
+  /* 12: loadpb */
+  var41 = p4;
+  /* 15: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr5[i];
+    /* 2: mulubw */
+    var44.i = ((orc_uint8) var34) * ((orc_uint8) var35);
+    /* 3: loadb */
+    var36 = ptr6[i];
+    /* 5: mulubw */
+    var45.i = ((orc_uint8) var36) * ((orc_uint8) var37);
+    /* 6: addw */
+    var46.i = var44.i + var45.i;
+    /* 7: loadb */
+    var38 = ptr4[i];
+    /* 9: mulubw */
+    var47.i = ((orc_uint8) var38) * ((orc_uint8) var39);
+    /* 10: subw */
+    var48.i = var46.i - var47.i;
+    /* 11: loadb */
+    var40 = ptr7[i];
+    /* 13: mulubw */
+    var49.i = ((orc_uint8) var40) * ((orc_uint8) var41);
+    /* 14: subw */
+    var50.i = var48.i - var49.i;
+    /* 16: addw */
+    var51.i = var50.i + var42.i;
+    /* 17: shrsw */
+    var52.i = var51.i >> 6;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var52.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_gst_videoscale_orc_merge_bicubic_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 1: loadpb */
+  var35 = ex->params[25];
+  /* 4: loadpb */
+  var37 = ex->params[26];
+  /* 8: loadpb */
+  var39 = ex->params[24];
+  /* 12: loadpb */
+  var41 = ex->params[27];
+  /* 15: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr5[i];
+    /* 2: mulubw */
+    var44.i = ((orc_uint8) var34) * ((orc_uint8) var35);
+    /* 3: loadb */
+    var36 = ptr6[i];
+    /* 5: mulubw */
+    var45.i = ((orc_uint8) var36) * ((orc_uint8) var37);
+    /* 6: addw */
+    var46.i = var44.i + var45.i;
+    /* 7: loadb */
+    var38 = ptr4[i];
+    /* 9: mulubw */
+    var47.i = ((orc_uint8) var38) * ((orc_uint8) var39);
+    /* 10: subw */
+    var48.i = var46.i - var47.i;
+    /* 11: loadb */
+    var40 = ptr7[i];
+    /* 13: mulubw */
+    var49.i = ((orc_uint8) var40) * ((orc_uint8) var41);
+    /* 14: subw */
+    var50.i = var48.i - var49.i;
+    /* 16: addw */
+    var51.i = var50.i + var42.i;
+    /* 17: shrsw */
+    var52.i = var51.i >> 6;
+    /* 18: convsuswb */
+    var43 = ORC_CLAMP_UB (var52.i);
+    /* 19: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_videoscale_orc_merge_bicubic_u8;
+void
+gst_videoscale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_videoscale_orc_merge_bicubic_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+void
+gst_videoscale_orc_init (void)
+{
+#ifndef DISABLE_ORC
+  {
+    /* orc_merge_linear_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_merge_linear_u8");
+    orc_program_set_backup_function (p, _backup_orc_merge_linear_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+    orc_program_add_source (p, 1, "s2");
+    orc_program_add_constant (p, 4, 0x00000080, "c1");
+    orc_program_add_parameter (p, 1, "p1");
+    orc_program_add_temporary (p, 2, "t1");
+    orc_program_add_temporary (p, 2, "t2");
+    orc_program_add_temporary (p, 1, "t3");
+    orc_program_add_temporary (p, 1, "t4");
+
+    orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_merge_linear_u8 = p;
+  }
+  {
+    /* orc_merge_linear_u16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_merge_linear_u16");
+    orc_program_set_backup_function (p, _backup_orc_merge_linear_u16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 2, "s1");
+    orc_program_add_source (p, 2, "s2");
+    orc_program_add_constant (p, 4, 0x00000010, "c1");
+    orc_program_add_parameter (p, 2, "p1");
+    orc_program_add_parameter (p, 2, "p2");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+
+    orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_P2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_merge_linear_u16 = p;
+  }
+  {
+    /* orc_splat_u16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_splat_u16");
+    orc_program_set_backup_function (p, _backup_orc_splat_u16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_parameter (p, 2, "p1");
+
+    orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_splat_u16 = p;
+  }
+  {
+    /* orc_splat_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_splat_u32");
+    orc_program_set_backup_function (p, _backup_orc_splat_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_parameter (p, 4, "p1");
+
+    orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_splat_u32 = p;
+  }
+  {
+    /* orc_splat_u64 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_splat_u64");
+    orc_program_set_backup_function (p, _backup_orc_splat_u64);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_parameter_int64 (p, 8, "p1");
+
+    orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_splat_u64 = p;
+  }
+  {
+    /* orc_downsample_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_downsample_u8");
+    orc_program_set_backup_function (p, _backup_orc_downsample_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 2, "s1");
+    orc_program_add_temporary (p, 1, "t1");
+    orc_program_add_temporary (p, 1, "t2");
+
+    orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_downsample_u8 = p;
+  }
+  {
+    /* orc_downsample_u16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_downsample_u16");
+    orc_program_set_backup_function (p, _backup_orc_downsample_u16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 4, "s1");
+    orc_program_add_temporary (p, 2, "t1");
+    orc_program_add_temporary (p, 2, "t2");
+
+    orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "avguw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_downsample_u16 = p;
+  }
+  {
+    /* gst_videoscale_orc_downsample_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_downsample_u32");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_downsample_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+
+    orc_program_append_2 (p, "splitql", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "avgub", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_downsample_u32 = p;
+  }
+  {
+    /* gst_videoscale_orc_downsample_yuyv */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_downsample_yuyv");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_downsample_yuyv);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+    orc_program_add_temporary (p, 2, "t3");
+    orc_program_add_temporary (p, 2, "t4");
+    orc_program_add_temporary (p, 2, "t5");
+    orc_program_add_temporary (p, 2, "t6");
+
+    orc_program_append_2 (p, "splitwb", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "avgub", 1, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_downsample_yuyv = p;
+  }
+  {
+    /* gst_videoscale_orc_resample_nearest_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_resample_nearest_u8");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_resample_nearest_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+
+    orc_program_append_2 (p, "ldresnearb", 0, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_P1, ORC_VAR_P2);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_resample_nearest_u8 = p;
+  }
+  {
+    /* gst_videoscale_orc_resample_bilinear_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_resample_bilinear_u8");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_resample_bilinear_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+
+    orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_P1,
+        ORC_VAR_P2);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_resample_bilinear_u8 = p;
+  }
+  {
+    /* gst_videoscale_orc_resample_nearest_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_resample_nearest_u32");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_resample_nearest_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 4, "s1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+
+    orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_P1, ORC_VAR_P2);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_resample_nearest_u32 = p;
+  }
+  {
+    /* gst_videoscale_orc_resample_bilinear_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_resample_bilinear_u32");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_resample_bilinear_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 4, "s1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+
+    orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_P1,
+        ORC_VAR_P2);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_resample_bilinear_u32 = p;
+  }
+  {
+    /* gst_videoscale_orc_resample_merge_bilinear_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_resample_merge_bilinear_u32");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_resample_merge_bilinear_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_destination (p, 4, "d2");
+    orc_program_add_source (p, 4, "s1");
+    orc_program_add_source (p, 4, "s2");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+    orc_program_add_parameter (p, 4, "p3");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+    orc_program_add_temporary (p, 4, "t3");
+    orc_program_add_temporary (p, 8, "t4");
+    orc_program_add_temporary (p, 8, "t5");
+
+    orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_P2,
+        ORC_VAR_P3);
+    orc_program_append_2 (p, "storel", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convhwb", 2, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_resample_merge_bilinear_u32 = p;
+  }
+  {
+    /* gst_videoscale_orc_merge_bicubic_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_videoscale_orc_merge_bicubic_u8");
+    orc_program_set_backup_function (p,
+        _backup_gst_videoscale_orc_merge_bicubic_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 1, "s1");
+    orc_program_add_source (p, 1, "s2");
+    orc_program_add_source (p, 1, "s3");
+    orc_program_add_source (p, 1, "s4");
+    orc_program_add_constant (p, 4, 0x00000020, "c1");
+    orc_program_add_constant (p, 4, 0x00000006, "c2");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_parameter (p, 4, "p2");
+    orc_program_add_parameter (p, 4, "p3");
+    orc_program_add_parameter (p, 4, "p4");
+    orc_program_add_temporary (p, 2, "t1");
+    orc_program_add_temporary (p, 2, "t2");
+
+    orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_P2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P3,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_P4,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_videoscale_orc_merge_bicubic_u8 = p;
+  }
+#endif
+}
diff --git a/gst/videoscale/gstvideoscaleorc-dist.h b/gst/videoscale/gstvideoscaleorc-dist.h
new file mode 100644
index 0000000..214b72f
--- /dev/null
+++ b/gst/videoscale/gstvideoscaleorc-dist.h
@@ -0,0 +1,93 @@
+
+/* autogenerated from gstvideoscaleorc.orc */
+
+#ifndef _GSTVIDEOSCALEORC_H_
+#define _GSTVIDEOSCALEORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void gst_videoscale_orc_init (void);
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n);
+void orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, int p1, int p2, int n);
+void orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n);
+void orc_downsample_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void orc_downsample_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void gst_videoscale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void gst_videoscale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
+void gst_videoscale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/videoscale/gstvideoscaleorc.orc b/gst/videoscale/gstvideoscaleorc.orc
new file mode 100644
index 0000000..81623e2
--- /dev/null
+++ b/gst/videoscale/gstvideoscaleorc.orc
@@ -0,0 +1,199 @@
+
+.init gst_videoscale_orc_init
+
+.function orc_merge_linear_u8
+.dest 1 d1
+.source 1 s1
+.source 1 s2
+.param 1 p1
+.temp 2 t1
+.temp 2 t2
+.temp 1 a
+.temp 1 t
+
+loadb a, s1
+convubw t1, s1
+convubw t2, s2
+subw t2, t2, t1
+mullw t2, t2, p1
+addw t2, t2, 128
+convhwb t, t2
+addb d1, t, a
+
+
+
+.function orc_merge_linear_u16
+.dest 2 d1
+.source 2 s1
+.source 2 s2
+.param 2 p1
+.param 2 p2
+.temp 4 t1
+.temp 4 t2
+
+# This is slightly different thatn the u8 case, since muluwl
+# tends to be much faster than mulll
+muluwl t1, s1, p1
+muluwl t2, s2, p2
+addl t1, t1, t2
+shrul t1, t1, 16
+convlw d1, t1
+
+
+.function orc_splat_u16
+.dest 2 d1
+.param 2 p1
+
+copyw d1, p1
+
+
+.function orc_splat_u32
+.dest 4 d1
+.param 4 p1
+
+copyl d1, p1
+
+
+.function orc_splat_u64
+.dest 8 d1
+.longparam 8 p1
+
+copyq d1, p1
+
+
+.function orc_downsample_u8
+.dest 1 d1 guint8
+.source 2 s1 guint8
+.temp 1 t1
+.temp 1 t2
+
+splitwb t1, t2, s1
+avgub d1, t1, t2
+
+
+.function orc_downsample_u16
+.dest 2 d1 guint16
+.source 4 s1 guint16
+.temp 2 t1
+.temp 2 t2
+
+splitlw t1, t2, s1
+avguw d1, t1, t2
+
+
+.function gst_videoscale_orc_downsample_u32
+.dest 4 d1 guint8
+.source 8 s1 guint8
+.temp 4 t1
+.temp 4 t2
+
+splitql t1, t2, s1
+x4 avgub d1, t1, t2
+
+
+.function gst_videoscale_orc_downsample_yuyv
+.dest 4 d1 guint8
+.source 8 s1 guint8
+.temp 4 yyyy
+.temp 4 uvuv
+.temp 2 t1
+.temp 2 t2
+.temp 2 yy
+.temp 2 uv
+
+x4 splitwb yyyy, uvuv, s1
+x2 splitwb t1, t2, yyyy
+x2 avgub yy, t1, t2
+splitlw t1, t2, uvuv
+x2 avgub uv, t1, t2
+x2 mergebw d1, yy, uv
+
+
+
+.function gst_videoscale_orc_resample_nearest_u8
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.param 4 p1
+.param 4 p2
+
+ldresnearb d1, s1, p1, p2
+
+
+.function gst_videoscale_orc_resample_bilinear_u8
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.param 4 p1
+.param 4 p2
+
+ldreslinb d1, s1, p1, p2
+
+
+.function gst_videoscale_orc_resample_nearest_u32
+.dest 4 d1 guint8
+.source 4 s1 guint8
+.param 4 p1
+.param 4 p2
+
+ldresnearl d1, s1, p1, p2
+
+
+.function gst_videoscale_orc_resample_bilinear_u32
+.dest 4 d1 guint8
+.source 4 s1 guint8
+.param 4 p1
+.param 4 p2
+
+ldreslinl d1, s1, p1, p2
+
+
+.function gst_videoscale_orc_resample_merge_bilinear_u32
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 4 s1 guint8
+.source 4 s2 guint8
+.temp 4 a
+.temp 4 b
+.temp 4 t
+.temp 8 t1
+.temp 8 t2
+.param 4 p1
+.param 4 p2
+.param 4 p3
+
+ldreslinl b, s2, p2, p3
+storel d2, b
+loadl a, s1
+x4 convubw t1, a
+x4 convubw t2, b
+x4 subw t2, t2, t1
+x4 mullw t2, t2, p1
+x4 convhwb t, t2
+x4 addb d1, t, a
+
+
+
+.function gst_videoscale_orc_merge_bicubic_u8
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.param 4 p1
+.param 4 p2
+.param 4 p3
+.param 4 p4
+.temp 2 t1
+.temp 2 t2
+
+mulubw t1, s2, p2
+mulubw t2, s3, p3
+addw t1, t1, t2
+mulubw t2, s1, p1
+subw t1, t1, t2
+mulubw t2, s4, p4
+subw t1, t1, t2
+addw t1, t1, 32
+shrsw t1, t1, 6
+convsuswb d1, t1
+
+
diff --git a/gst/videoscale/vs_4tap.c b/gst/videoscale/vs_4tap.c
new file mode 100644
index 0000000..93024bc
--- /dev/null
+++ b/gst/videoscale/vs_4tap.c
@@ -0,0 +1,1451 @@
+/*
+ * Image Scaling Functions (4 tap)
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * Copyright (c) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "vs_image.h"
+#include "vs_scanline.h"
+
+#include "vs_4tap.h"
+
+#include <gst/math-compat.h>
+
+#define SHIFT 10
+
+static int16_t vs_4tap_taps[256][4];
+
+static double
+vs_4tap_func (double x)
+{
+#if 0
+  if (x < -1)
+    return 0;
+  if (x > 1)
+    return 0;
+  if (x < 0)
+    return 1 + x;
+  return 1 - x;
+#endif
+#if 0
+  if (x == 0)
+    return 1;
+  return sin (G_PI * x) / (G_PI * x) * (1 - 0.25 * x * x);
+#endif
+#if 1
+  if (x == 0)
+    return 1;
+  return sin (G_PI * x) / (G_PI * x);
+#endif
+}
+
+void
+vs_4tap_init (void)
+{
+  int i;
+  double a, b, c, d;
+  double sum;
+
+  for (i = 0; i < 256; i++) {
+    a = vs_4tap_func (-1 - i / 256.0);
+    b = vs_4tap_func (0 - i / 256.0);
+    c = vs_4tap_func (1 - i / 256.0);
+    d = vs_4tap_func (2 - i / 256.0);
+    sum = a + b + c + d;
+
+    vs_4tap_taps[i][0] = rint ((1 << SHIFT) * (a / sum));
+    vs_4tap_taps[i][1] = rint ((1 << SHIFT) * (b / sum));
+    vs_4tap_taps[i][2] = rint ((1 << SHIFT) * (c / sum));
+    vs_4tap_taps[i][3] = rint ((1 << SHIFT) * (d / sum));
+  }
+}
+
+
+void
+vs_scanline_resample_4tap_Y (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xff00) >> 8;
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * src[MAX (j - 1, 0)];
+      y += vs_4tap_taps[x][1] * src[j];
+      y += vs_4tap_taps[x][2] * src[j + 1];
+      y += vs_4tap_taps[x][3] * src[j + 2];
+    } else {
+      y = vs_4tap_taps[x][0] * src[CLAMP (j - 1, 0, src_width - 1)];
+      y += vs_4tap_taps[x][1] * src[CLAMP (j, 0, src_width - 1)];
+      y += vs_4tap_taps[x][2] * src[CLAMP (j + 1, 0, src_width - 1)];
+      y += vs_4tap_taps[x][3] * src[CLAMP (j + 2, 0, src_width - 1)];
+    }
+    y += (1 << (SHIFT - 1));
+    dest[i] = CLAMP (y >> SHIFT, 0, 255);
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int a, b, c, d;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < n; i++) {
+    y = a * src1[i];
+    y += b * src2[i];
+    y += c * src3[i];
+    y += d * src4[i];
+    y += (1 << (SHIFT - 1));
+    dest[i] = CLAMP (y >> SHIFT, 0, 255);
+  }
+}
+
+
+void
+vs_image_scale_4tap_Y (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_Y (tmpbuf + i * dest->width,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_Y (tmpbuf + ((k + 3) & 3) * dest->width,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->width;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->width;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->width;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->width;
+    vs_scanline_merge_4tap_Y (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_Y16 (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xff00) >> 8;
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * s[MAX (j - 1, 0)];
+      y += vs_4tap_taps[x][1] * s[j];
+      y += vs_4tap_taps[x][2] * s[j + 1];
+      y += vs_4tap_taps[x][3] * s[j + 2];
+    } else {
+      y = vs_4tap_taps[x][0] * s[CLAMP (j - 1, 0, src_width - 1)];
+      y += vs_4tap_taps[x][1] * s[CLAMP (j, 0, src_width - 1)];
+      y += vs_4tap_taps[x][2] * s[CLAMP (j + 1, 0, src_width - 1)];
+      y += vs_4tap_taps[x][3] * s[CLAMP (j + 2, 0, src_width - 1)];
+    }
+    y += (1 << (SHIFT - 1));
+    d[i] = CLAMP (y >> SHIFT, 0, 65535);
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int a, b, c, d;
+  uint16_t *de = (uint16_t *) dest, *s1 = (uint16_t *) src1;
+  uint16_t *s2 = (uint16_t *) src2, *s3 = (uint16_t *) src3;
+  uint16_t *s4 = (uint16_t *) src4;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < n; i++) {
+    y = a * s1[i];
+    y += b * s2[i];
+    y += c * s3[i];
+    y += d * s4[i];
+    y += (1 << (SHIFT - 1));
+    de[i] = CLAMP (y >> SHIFT, 0, 65535);
+  }
+}
+
+
+void
+vs_image_scale_4tap_Y16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_Y16 (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_Y16 (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_Y16 (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_RGBA (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  int off;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    for (off = 0; off < 4; off++) {
+      if (j - 1 >= 0 && j + 2 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX ((j - 1) * 4 + off, 0)];
+        y += vs_4tap_taps[x][1] * src[j * 4 + off];
+        y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off];
+        y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off];
+      } else {
+        y = vs_4tap_taps[x][0] *
+            src[CLAMP ((j - 1), 0, src_width - 1) * 4 + off];
+        y += vs_4tap_taps[x][1] *
+            src[CLAMP ((j + 0), 0, src_width - 1) * 4 + off];
+        y += vs_4tap_taps[x][2] *
+            src[CLAMP ((j + 1), 0, src_width - 1) * 4 + off];
+        y += vs_4tap_taps[x][3] *
+            src[CLAMP ((j + 2), 0, src_width - 1) * 4 + off];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
+    }
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int off;
+  int a, b, c, d;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < n; i++) {
+    for (off = 0; off < 4; off++) {
+      y = a * src1[i * 4 + off];
+      y += b * src2[i * 4 + off];
+      y += c * src3[i * 4 + off];
+      y += d * src4[i * 4 + off];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
+    }
+  }
+}
+
+void
+vs_image_scale_4tap_RGBA (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_RGBA (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height) * src->stride,
+        dest->width, src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_RGBA (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_RGBA (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_RGB (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  int off;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    for (off = 0; off < 3; off++) {
+      if (j - 1 >= 0 && j + 2 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX ((j - 1) * 3 + off, 0)];
+        y += vs_4tap_taps[x][1] * src[j * 3 + off];
+        y += vs_4tap_taps[x][2] * src[(j + 1) * 3 + off];
+        y += vs_4tap_taps[x][3] * src[(j + 2) * 3 + off];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 3 + off, 0,
+                3 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 3 + off, 0,
+                3 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 3 + off, 0,
+                3 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 3 + off, 0,
+                3 * (src_width - 1) + off)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255);
+    }
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int off;
+  int a, b, c, d;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < n; i++) {
+    for (off = 0; off < 3; off++) {
+      y = a * src1[i * 3 + off];
+      y += b * src2[i * 3 + off];
+      y += c * src3[i * 3 + off];
+      y += d * src4[i * 3 + off];
+      y += (1 << (SHIFT - 1));
+      dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255);
+    }
+  }
+}
+
+void
+vs_image_scale_4tap_RGB (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_RGB (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_RGB (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_RGB (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_YUYV (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  int quads = (n + 1) / 2;
+  int last_y = 2 * (src_width - 1);
+  int last_u =
+      MAX ((2 * (src_width - 1) % 4 ==
+          0) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1);
+  int last_v =
+      MAX ((2 * (src_width - 1) % 4 ==
+          2) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1);
+
+  acc = *xacc;
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 0 - 2, 0)];
+      y += vs_4tap_taps[x][1] * src[j * 2 + 0];
+      y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2];
+      y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4];
+    } else {
+      y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)];
+      y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)];
+      y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)];
+      y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)];
+    }
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
+
+    j = acc >> 17;
+    x = (acc & 0x1ffff) >> 9;
+
+    if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
+      y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 1 - 4, 1)];
+      y += vs_4tap_taps[x][1] * src[j * 4 + 1];
+      y += vs_4tap_taps[x][2] * src[j * 4 + 1 + 4];
+      y += vs_4tap_taps[x][3] * src[j * 4 + 1 + 8];
+    } else {
+      y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 1 - 4, 1, last_u)];
+      y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 1, 1, last_u)];
+      y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 1 + 4, 1, last_u)];
+      y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 1 + 8, 1, last_u)];
+    }
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
+
+    if (2 * i + 1 < n) {
+      if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 3 - 4, 3)];
+        y += vs_4tap_taps[x][1] * src[j * 4 + 3];
+        y += vs_4tap_taps[x][2] * src[j * 4 + 3 + 4];
+        y += vs_4tap_taps[x][3] * src[j * 4 + 3 + 8];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 3 - 4, 3, last_v)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 3, 3, last_v)];
+        y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 3 + 4, 3, last_v)];
+        y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 3 + 8, 3, last_v)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
+    }
+
+    acc += increment;
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    if (2 * i + 1 < n) {
+      if (j - 1 >= 0 && j + 2 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 0 - 2, 0)];
+        y += vs_4tap_taps[x][1] * src[j * 2 + 0];
+        y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2];
+        y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)];
+        y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)];
+        y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
+      acc += increment;
+    }
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int a, b, c, d;
+  int quads = (n + 1) / 2;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < quads; i++) {
+    y = a * src1[i * 4 + 0];
+    y += b * src2[i * 4 + 0];
+    y += c * src3[i * 4 + 0];
+    y += d * src4[i * 4 + 0];
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * src1[i * 4 + 1];
+    y += b * src2[i * 4 + 1];
+    y += c * src3[i * 4 + 1];
+    y += d * src4[i * 4 + 1];
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
+
+    if (2 * i + 1 < n) {
+      y = a * src1[i * 4 + 2];
+      y += b * src2[i * 4 + 2];
+      y += c * src3[i * 4 + 2];
+      y += d * src4[i * 4 + 2];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
+
+      y = a * src1[i * 4 + 3];
+      y += b * src2[i * 4 + 3];
+      y += c * src3[i * 4 + 3];
+      y += d * src4[i * 4 + 3];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
+    }
+  }
+}
+
+void
+vs_image_scale_4tap_YUYV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_YUYV (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_YUYV (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_YUYV (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_UYVY (uint8_t * dest, uint8_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  int quads = (n + 1) / 2;
+  int last_y = 2 * (src_width - 1) + 1;
+  int last_u =
+      MAX ((2 * (src_width - 1) % 4 ==
+          0) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0);
+  int last_v =
+      MAX ((2 * (src_width - 1) % 4 ==
+          2) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0);
+
+  acc = *xacc;
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 1)];
+      y += vs_4tap_taps[x][1] * src[j * 2 + 1];
+      y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2];
+      y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4];
+    } else {
+      y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)];
+      y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)];
+      y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)];
+      y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)];
+    }
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
+
+    j = acc >> 17;
+    x = (acc & 0x1ffff) >> 9;
+
+    if (2 * j - 2 >= 0 && 2 * j + 4 < src_width) {
+      y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 0 - 4, 0)];
+      y += vs_4tap_taps[x][1] * src[j * 4 + 0];
+      y += vs_4tap_taps[x][2] * src[j * 4 + 0 + 4];
+      y += vs_4tap_taps[x][3] * src[j * 4 + 0 + 8];
+    } else {
+      y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 0 - 4, 0, last_u)];
+      y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 0, 0, last_u)];
+      y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 0 + 4, 0, last_u)];
+      y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 0 + 8, 0, last_u)];
+    }
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
+
+    if (2 * i + 1 < n) {
+      if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 2 - 4, 2)];
+        y += vs_4tap_taps[x][1] * src[j * 4 + 2];
+        y += vs_4tap_taps[x][2] * src[j * 4 + 2 + 4];
+        y += vs_4tap_taps[x][3] * src[j * 4 + 2 + 8];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 2 - 4, 2, last_v)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 2, 2, last_v)];
+        y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 2 + 4, 2, last_v)];
+        y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 2 + 8, 2, last_v)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
+    }
+
+    acc += increment;
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    if (2 * i + 1 < n) {
+      if (j - 1 >= 0 && j + 2 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 0)];
+        y += vs_4tap_taps[x][1] * src[j * 2 + 1];
+        y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2];
+        y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)];
+        y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)];
+        y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
+      acc += increment;
+    }
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_UYVY (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    uint8_t * src3, uint8_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int a, b, c, d;
+  int quads = (n + 1) / 2;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < quads; i++) {
+    y = a * src1[i * 4 + 0];
+    y += b * src2[i * 4 + 0];
+    y += c * src3[i * 4 + 0];
+    y += d * src4[i * 4 + 0];
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * src1[i * 4 + 1];
+    y += b * src2[i * 4 + 1];
+    y += c * src3[i * 4 + 1];
+    y += d * src4[i * 4 + 1];
+    y += (1 << (SHIFT - 1));
+    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
+
+    if (2 * i + 1 < n) {
+      y = a * src1[i * 4 + 2];
+      y += b * src2[i * 4 + 2];
+      y += c * src3[i * 4 + 2];
+      y += d * src4[i * 4 + 2];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
+
+      y = a * src1[i * 4 + 3];
+      y += b * src2[i * 4 + 3];
+      y += c * src3[i * 4 + 3];
+      y += d * src4[i * 4 + 3];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
+    }
+  }
+}
+
+void
+vs_image_scale_4tap_UYVY (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_UYVY (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_UYVY (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_UYVY (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+/* note that src and dest are uint16_t, and thus endian dependent */
+
+#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13)
+#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9)
+#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
+
+#define RGB565(r,g,b) \
+  ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f))
+
+void
+vs_scanline_resample_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y, y_r, y_b, y_g;
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff >> 8;
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB565_R (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB565_R (src[j]);
+      y += vs_4tap_taps[x][2] * RGB565_R (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_R (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB565_R (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB565_R (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB565_R (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_R (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_r = CLAMP (y >> SHIFT, 0, 255);
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB565_G (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB565_G (src[j]);
+      y += vs_4tap_taps[x][2] * RGB565_G (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_G (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB565_G (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB565_G (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB565_G (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_G (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_g = CLAMP (y >> SHIFT, 0, 255);
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB565_B (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB565_B (src[j]);
+      y += vs_4tap_taps[x][2] * RGB565_B (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_B (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB565_B (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB565_B (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB565_B (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB565_B (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_b = CLAMP (y >> SHIFT, 0, 255);
+
+    dest[i] = RGB565 (y_r, y_b, y_g);
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8,
+    uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc)
+{
+  int i;
+  int y, y_r, y_b, y_g;
+  int a, b, c, d;
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src1 = (uint16_t *) src1_u8;
+  uint16_t *src2 = (uint16_t *) src2_u8;
+  uint16_t *src3 = (uint16_t *) src3_u8;
+  uint16_t *src4 = (uint16_t *) src4_u8;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+
+  for (i = 0; i < n; i++) {
+    y = a * RGB565_R (src1[i]);
+    y += b * RGB565_R (src2[i]);
+    y += c * RGB565_R (src3[i]);
+    y += d * RGB565_R (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_r = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * RGB565_G (src1[i]);
+    y += b * RGB565_G (src2[i]);
+    y += c * RGB565_G (src3[i]);
+    y += d * RGB565_G (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_g = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * RGB565_B (src1[i]);
+    y += b * RGB565_B (src2[i]);
+    y += c * RGB565_B (src3[i]);
+    y += d * RGB565_B (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_b = CLAMP (y >> SHIFT, 0, 255);
+
+    dest[i] = RGB565 (y_r, y_b, y_g);
+  }
+}
+
+void
+vs_image_scale_4tap_RGB565 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_RGB565 (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_RGB565 (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_RGB565 (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+/* note that src and dest are uint16_t, and thus endian dependent */
+
+#define RGB555_R(x) (((x)&0x7c00)>>8 | ((x)&0x7c00)>>13)
+#define RGB555_G(x) (((x)&0x03e0)>>3 | ((x)&0x03e0)>>9)
+#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
+
+#define RGB555(r,g,b) \
+  ((((r)<<7)&0x7c00) | (((g)<<2)&0x03e0) | (((b)>>3)&0x001f))
+
+void
+vs_scanline_resample_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y, y_r, y_b, y_g;
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff >> 8;
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB555_R (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB555_R (src[j]);
+      y += vs_4tap_taps[x][2] * RGB555_R (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_R (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB555_R (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB555_R (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB555_R (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_R (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_r = CLAMP (y >> SHIFT, 0, 255);
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB555_G (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB555_G (src[j]);
+      y += vs_4tap_taps[x][2] * RGB555_G (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_G (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB555_G (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB555_G (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB555_G (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_G (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_g = CLAMP (y >> SHIFT, 0, 255);
+
+    if (j - 1 >= 0 && j + 2 < src_width) {
+      y = vs_4tap_taps[x][0] * RGB555_B (src[MAX ((j - 1), 0)]);
+      y += vs_4tap_taps[x][1] * RGB555_B (src[j]);
+      y += vs_4tap_taps[x][2] * RGB555_B (src[(j + 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_B (src[(j + 2)]);
+    } else {
+      y = vs_4tap_taps[x][0] * RGB555_B (src[CLAMP ((j - 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][1] * RGB555_B (src[CLAMP (j, 0, src_width - 1)]);
+      y += vs_4tap_taps[x][2] * RGB555_B (src[CLAMP ((j + 1), 0,
+                  src_width - 1)]);
+      y += vs_4tap_taps[x][3] * RGB555_B (src[CLAMP ((j + 2), 0,
+                  src_width - 1)]);
+    }
+    y += (1 << (SHIFT - 1));
+    y_b = CLAMP (y >> SHIFT, 0, 255);
+
+    dest[i] = RGB555 (y_r, y_b, y_g);
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8,
+    uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc)
+{
+  int i;
+  int y, y_r, y_b, y_g;
+  int a, b, c, d;
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src1 = (uint16_t *) src1_u8;
+  uint16_t *src2 = (uint16_t *) src2_u8;
+  uint16_t *src3 = (uint16_t *) src3_u8;
+  uint16_t *src4 = (uint16_t *) src4_u8;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+
+  for (i = 0; i < n; i++) {
+    y = a * RGB555_R (src1[i]);
+    y += b * RGB555_R (src2[i]);
+    y += c * RGB555_R (src3[i]);
+    y += d * RGB555_R (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_r = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * RGB555_G (src1[i]);
+    y += b * RGB555_G (src2[i]);
+    y += c * RGB555_G (src3[i]);
+    y += d * RGB555_G (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_g = CLAMP (y >> SHIFT, 0, 255);
+
+    y = a * RGB555_B (src1[i]);
+    y += b * RGB555_B (src2[i]);
+    y += c * RGB555_B (src3[i]);
+    y += d * RGB555_B (src4[i]);
+    y += (1 << (SHIFT - 1));
+    y_b = CLAMP (y >> SHIFT, 0, 255);
+
+    dest[i] = RGB555 (y_r, y_b, y_g);
+  }
+}
+
+void
+vs_image_scale_4tap_RGB555 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_RGB555 (tmpbuf + i * dest->stride,
+        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
+        src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint8_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_RGB555 (tmpbuf + ((k + 3) & 3) * dest->stride,
+            src->pixels + (k + 3) * src->stride,
+            dest->width, src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_RGB555 (dest->pixels + i * dest->stride,
+        t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
+
+void
+vs_scanline_resample_4tap_AYUV64 (uint16_t * dest, uint16_t * src,
+    int n, int src_width, int *xacc, int increment)
+{
+  int i;
+  int j;
+  int acc;
+  int x;
+  int y;
+  int off;
+
+  acc = *xacc;
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 8;
+
+    for (off = 0; off < 4; off++) {
+      if (j - 1 >= 0 && j + 2 < src_width) {
+        y = vs_4tap_taps[x][0] * src[MAX ((j - 1) * 4 + off, 0)];
+        y += vs_4tap_taps[x][1] * src[j * 4 + off];
+        y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off];
+        y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off];
+      } else {
+        y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 4 + off, 0,
+                4 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + off, 0,
+                4 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 4 + off, 0,
+                4 * (src_width - 1) + off)];
+        y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 4 + off, 0,
+                4 * (src_width - 1) + off)];
+      }
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
+    }
+    acc += increment;
+  }
+  *xacc = acc;
+}
+
+void
+vs_scanline_merge_4tap_AYUV64 (uint16_t * dest, uint16_t * src1,
+    uint16_t * src2, uint16_t * src3, uint16_t * src4, int n, int acc)
+{
+  int i;
+  int y;
+  int off;
+  int a, b, c, d;
+
+  acc = (acc >> 8) & 0xff;
+  a = vs_4tap_taps[acc][0];
+  b = vs_4tap_taps[acc][1];
+  c = vs_4tap_taps[acc][2];
+  d = vs_4tap_taps[acc][3];
+  for (i = 0; i < n; i++) {
+    for (off = 0; off < 4; off++) {
+      y = a * src1[i * 4 + off];
+      y += b * src2[i * 4 + off];
+      y += c * src3[i * 4 + off];
+      y += d * src4[i * 4 + off];
+      y += (1 << (SHIFT - 1));
+      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 65535);
+    }
+  }
+}
+
+void
+vs_image_scale_4tap_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf8)
+{
+  int yacc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+  int k;
+  guint16 *tmpbuf = (guint16 *) tmpbuf8;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  k = 0;
+  for (i = 0; i < 4; i++) {
+    xacc = 0;
+    vs_scanline_resample_4tap_AYUV64 ((guint16 *) (tmpbuf + i * dest->stride),
+        (guint16 *) (src->pixels + CLAMP (i, 0, src->height - 1) * src->stride),
+        dest->width, src->width, &xacc, x_increment);
+  }
+
+  yacc = 0;
+  for (i = 0; i < dest->height; i++) {
+    uint16_t *t0, *t1, *t2, *t3;
+
+    j = yacc >> 16;
+
+    while (j > k) {
+      k++;
+      if (k + 3 < src->height) {
+        xacc = 0;
+        vs_scanline_resample_4tap_AYUV64 ((guint16 *) (tmpbuf + ((k +
+                        3) & 3) * dest->stride),
+            (guint16 *) (src->pixels + (k + 3) * src->stride), dest->width,
+            src->width, &xacc, x_increment);
+      }
+    }
+
+    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
+    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
+    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
+    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
+    vs_scanline_merge_4tap_AYUV64 ((guint16 *) (dest->pixels +
+            i * dest->stride), t0, t1, t2, t3, dest->width, yacc & 0xffff);
+
+    yacc += y_increment;
+  }
+}
diff --git a/gst/videoscale/vs_4tap.h b/gst/videoscale/vs_4tap.h
new file mode 100644
index 0000000..6b51b52
--- /dev/null
+++ b/gst/videoscale/vs_4tap.h
@@ -0,0 +1,99 @@
+/*
+ * Image Scaling Functions (4 tap)
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _VS_4TAP_H_
+#define _VS_4TAP_H_
+
+#include "vs_image.h"
+
+
+void vs_4tap_init (void);
+void vs_scanline_resample_4tap_Y (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_Y (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_Y (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_RGBA (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_RGBA (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_RGBA (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_RGB (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_RGB (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_RGB (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_YUYV (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_YUYV (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_YUYV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_UYVY (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_UYVY (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_UYVY (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_RGB565 (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_RGB565 (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_RGB565 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_RGB555 (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_RGB555 (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_RGB555 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_Y16 (uint8_t *dest, uint8_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_Y16 (uint8_t *dest, uint8_t *src1, uint8_t *src2,
+    uint8_t *src3, uint8_t *src4, int n, int acc);
+void vs_image_scale_4tap_Y16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+void vs_scanline_resample_4tap_AYUV64 (uint16_t *dest, uint16_t *src,
+    int n, int src_width, int *xacc, int increment);
+void vs_scanline_merge_4tap_AYUV64 (uint16_t *dest, uint16_t *src1, uint16_t *src2,
+    uint16_t *src3, uint16_t *src4, int n, int acc);
+void vs_image_scale_4tap_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf);
+
+#endif
+
diff --git a/gst/videoscale/vs_fill_borders.c b/gst/videoscale/vs_fill_borders.c
new file mode 100644
index 0000000..160e137
--- /dev/null
+++ b/gst/videoscale/vs_fill_borders.c
@@ -0,0 +1,422 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <string.h>
+
+#include "vs_fill_borders.h"
+#include "gstvideoscaleorc.h"
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define READ_UINT32(ptr) GST_READ_UINT32_LE(ptr)
+#define READ_UINT16(ptr) GST_READ_UINT16_LE(ptr)
+#else
+#define READ_UINT32(ptr) GST_READ_UINT32_BE(ptr)
+#define READ_UINT16(ptr) GST_READ_UINT16_BE(ptr)
+#endif
+
+void
+vs_fill_borders_RGBA (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+  uint32_t v = READ_UINT32 (val);
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    orc_splat_u32 ((uint32_t *) data, v, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 4;
+    for (i = 0; i < tmp; i++) {
+      orc_splat_u32 ((uint32_t *) data, v, left);
+      orc_splat_u32 ((uint32_t *) (data + tmp2), v, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    orc_splat_u32 ((uint32_t *) data, v, real_width);
+    data += stride;
+  }
+}
+
+static void
+_memset_u24 (uint8_t * data, uint8_t val1, uint8_t val2, uint8_t val3,
+    unsigned int n)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; i++) {
+    data[0] = val1;
+    data[1] = val2;
+    data[2] = val3;
+    data += 3;
+  }
+}
+
+void
+vs_fill_borders_RGB (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    _memset_u24 (data, val[0], val[1], val[2], real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 3;
+    for (i = 0; i < tmp; i++) {
+      _memset_u24 (data, val[0], val[1], val[2], left);
+      _memset_u24 (data + tmp2, val[0], val[1], val[2], right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    _memset_u24 (data, val[0], val[1], val[2], real_width);
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_YUYV (const VSImage * dest, const uint8_t * val)
+{
+  int i, j;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    for (j = 0; j < real_width; j++) {
+      data[2 * j] = val[0];
+      data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
+    }
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 2;
+    for (i = 0; i < tmp; i++) {
+      for (j = 0; j < left; j++) {
+        data[2 * j] = val[0];
+        data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
+      }
+      for (j = 0; j < right; j++) {
+        data[tmp2 + 2 * j] = val[0];
+        data[tmp2 + 2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
+      }
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    for (j = 0; j < real_width; j++) {
+      data[2 * j] = val[0];
+      data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
+    }
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_UYVY (const VSImage * dest, const uint8_t * val)
+{
+  int i, j;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    for (j = 0; j < real_width; j++) {
+      data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
+      data[2 * j + 1] = val[1];
+    }
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 2;
+    for (i = 0; i < tmp; i++) {
+      for (j = 0; j < left; j++) {
+        data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
+        data[2 * j + 1] = val[1];
+      }
+      for (j = 0; j < right; j++) {
+        data[tmp2 + 2 * j] = (j % 2 == 0) ? val[0] : val[2];
+        data[tmp2 + 2 * j + 1] = val[1];
+      }
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    for (j = 0; j < real_width; j++) {
+      data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
+      data[2 * j + 1] = val[1];
+    }
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_Y (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    memset (data, *val, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = left + width;
+    for (i = 0; i < tmp; i++) {
+      memset (data, *val, left);
+      memset (data + tmp2, *val, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    memset (data, *val, real_width);
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_Y16 (const VSImage * dest, const uint16_t val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    orc_splat_u16 ((uint16_t *) data, val, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 2;
+    for (i = 0; i < tmp; i++) {
+      orc_splat_u16 ((uint16_t *) data, val, left);
+      orc_splat_u16 ((uint16_t *) (data + tmp2), val, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    orc_splat_u16 ((uint16_t *) data, val, real_width);
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_RGB565 (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+  uint16_t v = READ_UINT16 (val);
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    orc_splat_u16 ((uint16_t *) data, v, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 2;
+    for (i = 0; i < tmp; i++) {
+      orc_splat_u16 ((uint16_t *) data, v, left);
+      orc_splat_u16 ((uint16_t *) (data + tmp2), v, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    orc_splat_u16 ((uint16_t *) data, v, real_width);
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_RGB555 (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+  uint16_t v = READ_UINT16 (val);
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    orc_splat_u16 ((uint16_t *) data, v, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 2;
+    for (i = 0; i < tmp; i++) {
+      orc_splat_u16 ((uint16_t *) data, v, left);
+      orc_splat_u16 ((uint16_t *) (data + tmp2), v, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    orc_splat_u16 ((uint16_t *) data, v, real_width);
+    data += stride;
+  }
+}
+
+void
+vs_fill_borders_AYUV64 (const VSImage * dest, const uint8_t * val)
+{
+  int i;
+  int top = dest->border_top, bottom = dest->border_bottom;
+  int left = dest->border_left, right = dest->border_right;
+  int width = dest->width;
+  int height = dest->height;
+  int real_width = dest->real_width;
+  int stride = dest->stride;
+  int tmp, tmp2;
+  uint8_t *data;
+  uint64_t v;
+
+  v = (val[0] << 8) | (val[1] << 24) | (((guint64) val[2]) << 40) | (((guint64)
+          val[3]) << 56);
+
+  data = dest->real_pixels;
+  for (i = 0; i < top; i++) {
+    orc_splat_u64 ((uint64_t *) data, v, real_width);
+    data += stride;
+  }
+
+  if (left || right) {
+    tmp = height;
+    tmp2 = (left + width) * 8;
+    for (i = 0; i < tmp; i++) {
+      orc_splat_u64 ((uint64_t *) data, v, left);
+      orc_splat_u64 ((uint64_t *) (data + tmp2), v, right);
+      data += stride;
+    }
+  } else {
+    data += stride * height;
+  }
+
+  for (i = 0; i < bottom; i++) {
+    orc_splat_u64 ((uint64_t *) data, v, real_width);
+    data += stride;
+  }
+}
diff --git a/gst/videoscale/vs_fill_borders.h b/gst/videoscale/vs_fill_borders.h
new file mode 100644
index 0000000..faf00db
--- /dev/null
+++ b/gst/videoscale/vs_fill_borders.h
@@ -0,0 +1,44 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */ 
+
+#ifndef __VS_FILL_BORDERS_H__
+#define __VS_FILL_BORDERS_H__
+
+#include <_stdint.h>
+#include "vs_image.h"
+
+void vs_fill_borders_RGBA (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_RGB (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_YUYV (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_UYVY (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_Y (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_Y16 (const VSImage *dest, const uint16_t val);
+void vs_fill_borders_RGB565 (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_RGB555 (const VSImage *dest, const uint8_t *val);
+void vs_fill_borders_AYUV64 (const VSImage *dest, const uint8_t *val);
+
+#endif /* __VS_FILL_BORDERS_H__ */
diff --git a/gst/videoscale/vs_image.c b/gst/videoscale/vs_image.c
new file mode 100644
index 0000000..c28b0d8
--- /dev/null
+++ b/gst/videoscale/vs_image.c
@@ -0,0 +1,1155 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <string.h>
+
+#include "vs_scanline.h"
+#include "vs_image.h"
+
+#include "gstvideoscaleorc.h"
+#include <gst/gst.h>
+
+#define ROUND_UP_2(x)  (((x)+1)&~1)
+#define ROUND_UP_4(x)  (((x)+3)&~3)
+#define ROUND_UP_8(x)  (((x)+7)&~7)
+
+void
+vs_image_scale_nearest_RGBA (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int prev_j;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+
+  acc = 0;
+  prev_j = -1;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    if (j == prev_j) {
+      memcpy (dest->pixels + i * dest->stride,
+          dest->pixels + (i - 1) * dest->stride, dest->width * 4);
+    } else {
+      gst_videoscale_orc_resample_nearest_u32 (dest->pixels + i * dest->stride,
+          src->pixels + j * src->stride, 0, x_increment, dest->width);
+    }
+
+    prev_j = j;
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int y1;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width * 4;
+
+#define LINE(x) ((tmpbuf) + (dest_size)*((x)&1))
+
+  acc = 0;
+  gst_videoscale_orc_resample_bilinear_u32 (LINE (0), src->pixels,
+      0, x_increment, dest->width);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size);
+    } else {
+      if (j > y1) {
+        gst_videoscale_orc_resample_bilinear_u32 (LINE (j),
+            src->pixels + j * src->stride, 0, x_increment, dest->width);
+        y1++;
+      }
+      if (j >= y1) {
+        gst_videoscale_orc_resample_bilinear_u32 (LINE (j + 1),
+            src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
+        y1++;
+      }
+      orc_merge_linear_u8 (dest->pixels + i * dest->stride,
+          LINE (j), LINE (j + 1), (x >> 8), dest->width * 4);
+    }
+
+    acc += y_increment;
+  }
+}
+
+
+void
+vs_image_scale_nearest_RGB (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_RGB (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_RGB (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width * 3;
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_RGB (tmp1, src->pixels, src->width, dest->width,
+      &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_RGB (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+/* YUYV */
+
+void
+vs_image_scale_nearest_YUYV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_YUYV (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_YUYV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = ROUND_UP_4 (dest->width * 2);
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_YUYV (tmp1, src->pixels, src->width, dest->width,
+      &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_YUYV (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_YUYV (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_YUYV (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width,
+            &xacc, x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+/* UYVY */
+
+void
+vs_image_scale_nearest_UYVY (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_UYVY (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_UYVY (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = ROUND_UP_4 (dest->width * 2);
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_UYVY (tmp1, src->pixels, src->width, dest->width,
+      &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_UYVY (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_UYVY (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_UYVY (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width,
+            &xacc, x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+/* greyscale */
+
+void
+vs_image_scale_nearest_Y (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    gst_videoscale_orc_resample_nearest_u8 (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, 0, x_increment, dest->width);
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width;
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  y2 = -1;
+  gst_videoscale_orc_resample_bilinear_u8 (tmp1, src->pixels,
+      0, x_increment, dest->width);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        gst_videoscale_orc_resample_bilinear_u8 (tmp1,
+            src->pixels + j * src->stride, 0, x_increment, dest->width);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          gst_videoscale_orc_resample_bilinear_u8 (tmp2,
+              src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
+          y2 = j + 1;
+        }
+        if ((x >> 8) == 0) {
+          memcpy (dest->pixels + i * dest->stride, tmp1, dest->width);
+        } else {
+          orc_merge_linear_u8 (dest->pixels + i * dest->stride,
+              tmp1, tmp2, (x >> 8), dest->width);
+        }
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          gst_videoscale_orc_resample_bilinear_u8 (tmp1,
+              src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
+          y1 = j + 1;
+        }
+        if ((x >> 8) == 0) {
+          memcpy (dest->pixels + i * dest->stride, tmp2, dest->width);
+        } else {
+          orc_merge_linear_u8 (dest->pixels + i * dest->stride,
+              tmp2, tmp1, (x >> 8), dest->width);
+        }
+      } else {
+        gst_videoscale_orc_resample_bilinear_u8 (tmp1,
+            src->pixels + j * src->stride, 0, x_increment, dest->width);
+        y1 = j;
+        gst_videoscale_orc_resample_bilinear_u8 (tmp2,
+            src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
+        y2 = (j + 1);
+        if ((x >> 8) == 0) {
+          memcpy (dest->pixels + i * dest->stride, tmp1, dest->width);
+        } else {
+          orc_merge_linear_u8 (dest->pixels + i * dest->stride,
+              tmp1, tmp2, (x >> 8), dest->width);
+        }
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_nearest_Y16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_Y16 (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_Y16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = 2 * dest->width;
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_Y16 (tmp1, src->pixels, src->width, dest->width,
+      &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_Y16 (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_Y16 (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_Y16 (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+/* RGB565 */
+
+void
+vs_image_scale_nearest_RGB565 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_RGB565 (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_RGB565 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width * 2;
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_RGB565 (tmp1, src->pixels, src->width,
+      dest->width, &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB565 (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB565 (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_RGB565 (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+/* RGB555 */
+
+void
+vs_image_scale_nearest_RGB555 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+  acc = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    xacc = 0;
+    vs_scanline_resample_nearest_RGB555 (dest->pixels + i * dest->stride,
+        src->pixels + j * src->stride, src->width, dest->width, &xacc,
+        x_increment);
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_RGB555 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  uint8_t *tmp1;
+  uint8_t *tmp2;
+  int y1;
+  int y2;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width * 2;
+
+  tmp1 = tmpbuf;
+  tmp2 = tmpbuf + dest_size;
+
+  acc = 0;
+  xacc = 0;
+  y2 = -1;
+  vs_scanline_resample_linear_RGB555 (tmp1, src->pixels, src->width,
+      dest->width, &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      if (j == y1) {
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      } else if (j == y2) {
+        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
+      }
+    } else {
+      if (j == y1) {
+        if (j + 1 != y2) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB555 (tmp2,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y2 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      } else if (j == y2) {
+        if (j + 1 != y1) {
+          xacc = 0;
+          vs_scanline_resample_linear_RGB555 (tmp1,
+              src->pixels + (j + 1) * src->stride, src->width, dest->width,
+              &xacc, x_increment);
+          y1 = j + 1;
+        }
+        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
+            tmp2, tmp1, dest->width, x);
+      } else {
+        xacc = 0;
+        vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride,
+            src->width, dest->width, &xacc, x_increment);
+        y1 = j;
+        xacc = 0;
+        vs_scanline_resample_linear_RGB555 (tmp2,
+            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        y2 = (j + 1);
+        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
+            tmp1, tmp2, dest->width, x);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_nearest_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf8)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int i;
+  int j;
+  int prev_j;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
+
+
+  acc = 0;
+  prev_j = -1;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+
+    if (j == prev_j) {
+      memcpy (dest->pixels + i * dest->stride,
+          dest->pixels + (i - 1) * dest->stride, dest->width * 8);
+    } else {
+      int xacc = 0;
+      vs_scanline_resample_nearest_AYUV64 (dest->pixels + i * dest->stride,
+          src->pixels + j * src->stride, src->width, dest->width, &xacc,
+          x_increment);
+    }
+
+    prev_j = j;
+    acc += y_increment;
+  }
+}
+
+void
+vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf)
+{
+  int acc;
+  int y_increment;
+  int x_increment;
+  int y1;
+  int i;
+  int j;
+  int x;
+  int dest_size;
+  int xacc;
+
+  if (dest->height == 1)
+    y_increment = 0;
+  else
+    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
+
+  if (dest->width == 1)
+    x_increment = 0;
+  else
+    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
+
+  dest_size = dest->width * 8;
+
+#undef LINE
+#define LINE(x) ((guint16 *)((tmpbuf) + (dest_size)*((x)&1)))
+
+  acc = 0;
+  //gst_videoscale_orc_resample_bilinear_u64 (LINE (0), src->pixels,
+  //    0, x_increment, dest->width);
+  xacc = 0;
+  vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (0),
+      src->pixels, src->width, dest->width, &xacc, x_increment);
+  y1 = 0;
+  for (i = 0; i < dest->height; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (x == 0) {
+      memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size);
+    } else {
+      if (j > y1) {
+        xacc = 0;
+        vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j),
+            src->pixels + j * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        //gst_videoscale_orc_resample_bilinear_u64 (LINE (j),
+        //    src->pixels + j * src->stride, 0, x_increment, dest->width);
+        y1++;
+      }
+      if (j >= y1) {
+        xacc = 0;
+        vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j + 1),
+            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
+            x_increment);
+        orc_merge_linear_u16 ((guint16 *) (dest->pixels + i * dest->stride),
+            LINE (j), LINE (j + 1), 65536 - x, x, dest->width * 4);
+        //gst_videoscale_orc_resample_merge_bilinear_u64 (dest->pixels +
+        //    i * dest->stride, LINE (j + 1), LINE (j),
+        //    src->pixels + (j + 1) * src->stride, (x >> 8), 0, x_increment,
+        //    dest->width);
+        y1++;
+      } else {
+        orc_merge_linear_u16 ((guint16 *) (dest->pixels + i * dest->stride),
+            LINE (j), LINE (j + 1), 65536 - x, x, dest->width * 4);
+      }
+    }
+
+    acc += y_increment;
+  }
+}
diff --git a/gst/videoscale/vs_image.h b/gst/videoscale/vs_image.h
new file mode 100644
index 0000000..2312acc
--- /dev/null
+++ b/gst/videoscale/vs_image.h
@@ -0,0 +1,105 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __VS_IMAGE_H__
+#define __VS_IMAGE_H__
+
+#include <glib.h>
+#include <_stdint.h>
+
+typedef struct _VSImage VSImage;
+
+struct _VSImage {
+  uint8_t *real_pixels;
+  int real_width;
+  int real_height;
+  int border_left, border_right;
+  int border_top, border_bottom;
+  uint8_t *pixels;
+  int width;
+  int height;
+  int stride;
+};
+
+void vs_image_scale_nearest_RGBA (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_RGBA (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_lanczos_AYUV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
+    double a, double sharpen);
+
+void vs_image_scale_nearest_RGB (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_RGB (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_YUYV (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_YUYV (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_UYVY (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_UYVY (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_Y (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_Y (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_lanczos_Y (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf, double sharpness, gboolean dither, int submethod,
+    double a, double sharpen);
+
+void vs_image_scale_nearest_RGB565 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_RGB565 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_RGB555 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_RGB555 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_Y16 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_Y16 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_AYUV16 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+void vs_image_scale_linear_AYUV16 (const VSImage *dest, const VSImage *src,
+    uint8_t *tmpbuf);
+
+void vs_image_scale_nearest_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf8);
+void vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf8);
+
+#endif
+
diff --git a/gst/videoscale/vs_lanczos.c b/gst/videoscale/vs_lanczos.c
new file mode 100644
index 0000000..1c87ba3
--- /dev/null
+++ b/gst/videoscale/vs_lanczos.c
@@ -0,0 +1,1558 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2011 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ *
+ * Modified Lanczos scaling algorithm
+ * ==================================
+ *
+ * This algorithm was developed by the author.  The primary goals of
+ * the algorithm are high-quality video downscaling for medium scale
+ * factors (in the range of 1.3x to 5.0x) using methods that can be
+ * converted to SIMD code.  Concerns with existing algorithms were
+ * mainly related to either over-soft filtering (Lanczos) or aliasing
+ * (bilinear or any other method with inadequate sampling).
+ *
+ * The problems with bilinear scaling are apparent when downscaling
+ * more than a factor of 2.  For example, when downscaling by a factor
+ * of 3, only two-thirds of the input pixels contribute to the output
+ * pixels.  This is only considering scaling in one direction; after
+ * scaling both vertically and horizontally in a 2-D image, fewer than
+ * half of the input pixels contribute to the output, so it should not
+ * be surprising that the output is suboptimal.
+ *
+ * The problems with Lanczos scaling are more subtle.  From a theoretical
+ * perspective, Lanczos is an optimal algorithm for resampling equally-
+ * spaced values.  This theoretical perspective is based on analysis
+ * done in frequency space, thus, Lanczos works very well for audio
+ * resampling, since the ear hears primarily in frequency space.  The
+ * human visual system is sensitive primarily in the spatial domain,
+ * therefore any resampling algorithm should take this into account.
+ * This difference is immediately clear in the size of resampling
+ * window or envelope that is chosen for resampling: for audio, an
+ * envelope of a=64 is typical, in image scaling, the envelope is
+ * usually a=2 or a=3.
+ *
+ * One result of the HVS being sensitive in the spatial domain (and
+ * also probably due to oversampling capabilities of the retina and
+ * visual cortex) is that it is less sensitive to the exact magnitude
+ * of high-frequency visual signals than to the appropriate amount of
+ * energy in the nearby frequency band.  A Lanczos kernel with a=2
+ * or a=3 strongly decreases the amount of energy in the high frequency
+ * bands.  The energy in this area can be increased by increasing a,
+ * which brings in energy from different areas of the image (bad for
+ * reasons mentioned above), or by oversampling the input data.  We
+ * have chosen two methods for doing the latter.  Firstly, there is
+ * a sharpness parameter, which increases the cutoff frequency of the
+ * filter, aliasing higher frequency noise into the passband.  And
+ * secondly, there is the sharpen parameter, which increases the
+ * contribution of high-frequency (but in-band) components.
+ *
+ * An alternate explanation of the usefulness of a sharpening filter
+ * is that many natural images have a roughly 1/f spectrum.  In order
+ * for a downsampled image to look more "natural" when high frequencies
+ * are removed, the frequencies in the pass band near the cutoff
+ * frequency are amplified, causing the spectrum to be more roughly
+ * 1/f.  I said "roughly", not "literally".
+ *
+ * This alternate explanation is useful for understanding the author's
+ * secondary motivation for developing this algorithm, namely, as a
+ * method of video compression.  Several recent techniques (such as
+ * HTTP Live Streaming and SVC) use image scaling as a method to get
+ * increased compression out of nominally non-scalable codecs such as
+ * H.264.  For optimal quality, it is thusly important to consider
+ * the scaler and encoder as a combined unit.  Tuning of the sharpness
+ * and sharpen parameters was performed using the Toro encoder tuner,
+ * where scaled and encoded video was compared to unscaled and encoded
+ * video.  This tuning suggested values that were very close to the
+ * values chosen by manual inspection of scaled images and video.
+ *
+ * The optimal values of sharpen and sharpness were slightly different
+ * depending whether the comparison was still images or video.  Video
+ * comparisons were more sensitive to aliasing, since the aliasing
+ * artifacts tended to move or "crawl" around the video.  The default
+ * values are for video; image scaling may prefer higher values.
+ *
+ * A number of related techniques were rejected for various reasons.
+ * An early technique of selecting the sharpness factor locally based
+ * on edge detection (in order to use a higher sharpness values without
+ * the corresponding aliasing on edges) worked very well for still
+ * images, but caused too much "crawling" on textures in video.  Also,
+ * this method is slow, as it does not parallelize well.
+ *
+ * Non-separable techniques were rejected because the fastest would
+ * have been at least 4x slower.
+ *
+ * It is infrequently appreciated that image scaling should ideally be
+ * done in linear light space.  Converting to linear light space has
+ * a similar effect to a sharpening filter.  This approach was not
+ * taken because the added benefit is minor compared to the additional
+ * computational cost.  Morever, the benefit is decreased by increasing
+ * the strength of the sharpening filter.
+ *
+ */
+#include <string.h>
+
+#include "vs_scanline.h"
+#include "vs_image.h"
+
+#include "gstvideoscaleorc.h"
+#include <gst/gst.h>
+#include <math.h>
+
+#define NEED_CLAMP(x,a,b) ((x) < (a) || (x) > (b))
+
+#define ROUND_UP_2(x)  (((x)+1)&~1)
+#define ROUND_UP_4(x)  (((x)+3)&~3)
+#define ROUND_UP_8(x)  (((x)+7)&~7)
+
+#define SRC_LINE(i) (scale->src->pixels + scale->src->stride * (i))
+
+#define TMP_LINE_S16(i) ((gint16 *)scale->tmpdata + (i)*(scale->dest->width))
+#define TMP_LINE_S32(i) ((gint32 *)scale->tmpdata + (i)*(scale->dest->width))
+#define TMP_LINE_FLOAT(i) ((float *)scale->tmpdata + (i)*(scale->dest->width))
+#define TMP_LINE_DOUBLE(i) ((double *)scale->tmpdata + (i)*(scale->dest->width))
+#define TMP_LINE_S16_AYUV(i) ((gint16 *)scale->tmpdata + (i)*4*(scale->dest->width))
+#define TMP_LINE_S32_AYUV(i) ((gint32 *)scale->tmpdata + (i)*4*(scale->dest->width))
+#define TMP_LINE_FLOAT_AYUV(i) ((float *)scale->tmpdata + (i)*4*(scale->dest->width))
+#define TMP_LINE_DOUBLE_AYUV(i) ((double *)scale->tmpdata + (i)*4*(scale->dest->width))
+
+#define PTR_OFFSET(a,b) ((void *)((char *)(a) + (b)))
+
+typedef void (*HorizResampleFunc) (void *dest, const gint32 * offsets,
+    const void *taps, const void *src, int n_taps, int shift, int n);
+
+typedef struct _Scale1D Scale1D;
+struct _Scale1D
+{
+  int n;
+  double offset;
+  double scale;
+
+  double fx;
+  double ex;
+  int dx;
+
+  int n_taps;
+  gint32 *offsets;
+  void *taps;
+};
+
+typedef struct _Scale Scale;
+struct _Scale
+{
+  const VSImage *dest;
+  const VSImage *src;
+
+  double sharpness;
+  gboolean dither;
+
+  void *tmpdata;
+
+  HorizResampleFunc horiz_resample_func;
+
+  Scale1D x_scale1d;
+  Scale1D y_scale1d;
+};
+
+static void
+vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen);
+static void vs_image_scale_lanczos_Y_int32 (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+static void vs_image_scale_lanczos_Y_float (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+static void vs_image_scale_lanczos_Y_double (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+static void
+vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen);
+static void vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+static void vs_image_scale_lanczos_AYUV_float (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+static void vs_image_scale_lanczos_AYUV_double (const VSImage * dest,
+    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
+    double a, double sharpen);
+
+static double
+sinc (double x)
+{
+  if (x == 0)
+    return 1;
+  return sin (G_PI * x) / (G_PI * x);
+}
+
+static double
+envelope (double x)
+{
+  if (x <= -1 || x >= 1)
+    return 0;
+  return sinc (x);
+}
+
+static int
+scale1d_get_n_taps (int src_size, int dest_size, double a, double sharpness)
+{
+  double scale;
+  double fx;
+  int dx;
+
+  scale = src_size / (double) dest_size;
+  if (scale > 1.0) {
+    fx = (1.0 / scale) * sharpness;
+  } else {
+    fx = (1.0) * sharpness;
+  }
+  dx = ceil (a / fx);
+
+  return 2 * dx;
+}
+
+static void
+scale1d_cleanup (Scale1D * scale)
+{
+  g_free (scale->taps);
+  g_free (scale->offsets);
+}
+
+/*
+ * Calculates a set of taps for each destination element in double
+ * format.  Each set of taps sums to 1.0.
+ *
+ */
+static void
+scale1d_calculate_taps (Scale1D * scale, int src_size, int dest_size,
+    int n_taps, double a, double sharpness, double sharpen)
+{
+  int j;
+  double *tap_array;
+  gint32 *offsets;
+  double scale_offset;
+  double scale_increment;
+  int dx;
+  double fx;
+  double ex;
+
+  scale->scale = src_size / (double) dest_size;
+  scale->offset = scale->scale / 2 - 0.5;
+
+  if (scale->scale > 1.0) {
+    scale->fx = (1.0 / scale->scale) * sharpness;
+  } else {
+    scale->fx = (1.0) * sharpness;
+  }
+  scale->ex = scale->fx / a;
+  scale->dx = ceil (a / scale->fx);
+
+  g_assert (n_taps >= 2 * scale->dx);
+  scale->n_taps = n_taps;
+
+  scale->taps = g_malloc (sizeof (double) * scale->n_taps * dest_size);
+  scale->offsets = g_malloc (sizeof (gint32) * dest_size);
+  tap_array = scale->taps;
+  offsets = scale->offsets;
+
+  scale_offset = scale->offset;
+  scale_increment = scale->scale;
+  dx = scale->dx;
+  fx = scale->fx;
+  ex = scale->ex;
+
+  for (j = 0; j < dest_size; j++) {
+    double x;
+    int xi;
+    int l;
+    double weight;
+    double *taps;
+
+    x = scale_offset + scale_increment * j;
+    x = CLAMP (x, 0, src_size);
+    xi = ceil (x) - dx;
+
+    offsets[j] = xi;
+    weight = 0;
+    taps = tap_array + j * n_taps;
+
+    for (l = 0; l < n_taps; l++) {
+      int xl = xi + l;
+      taps[l] = sinc ((x - xl) * fx) * envelope ((x - xl) * ex);
+      taps[l] -= sharpen * envelope ((x - xl) * ex);
+      weight += taps[l];
+    }
+    g_assert (envelope ((x - (xi - 1)) * ex) == 0);
+    g_assert (envelope ((x - (xi + n_taps)) * ex) == 0);
+    for (l = 0; l < n_taps; l++) {
+      taps[l] /= weight;
+    }
+
+    if (xi < 0) {
+      int shift = -xi;
+
+      for (l = 0; l < shift; l++) {
+        taps[shift] += taps[l];
+      }
+      for (l = 0; l < n_taps - shift; l++) {
+        taps[l] = taps[shift + l];
+      }
+      for (; l < n_taps; l++) {
+        taps[l] = 0;
+      }
+      offsets[j] += shift;
+    }
+
+    if (xi > src_size - n_taps) {
+      int shift = xi - (src_size - n_taps);
+
+      for (l = 0; l < shift; l++) {
+        taps[n_taps - shift - 1] += taps[n_taps - shift + l];
+      }
+      for (l = 0; l < n_taps - shift; l++) {
+        taps[n_taps - 1 - l] = taps[n_taps - 1 - shift - l];
+      }
+      for (l = 0; l < shift; l++) {
+        taps[l] = 0;
+      }
+      offsets[j] -= shift;
+    }
+  }
+}
+
+/*
+ * Calculates a set of taps for each destination element in float
+ * format.  Each set of taps sums to 1.0.
+ */
+static void
+scale1d_calculate_taps_float (Scale1D * scale, int src_size, int dest_size,
+    int n_taps, double a, double sharpness, double sharpen)
+{
+  double *taps_d;
+  float *taps_f;
+  int j;
+
+  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
+      sharpen);
+
+  taps_d = scale->taps;
+  taps_f = g_malloc (sizeof (float) * scale->n_taps * dest_size);
+
+  for (j = 0; j < dest_size * n_taps; j++) {
+    taps_f[j] = taps_d[j];
+  }
+
+  g_free (taps_d);
+  scale->taps = taps_f;
+}
+
+/*
+ * Calculates a set of taps for each destination element in gint32
+ * format.  Each set of taps sums to (very nearly) (1<<shift).  A
+ * typical value for shift is 10 to 15, so that applying the taps to
+ * uint8 values and summing will fit in a (signed) int32.
+ */
+static void
+scale1d_calculate_taps_int32 (Scale1D * scale, int src_size, int dest_size,
+    int n_taps, double a, double sharpness, double sharpen, int shift)
+{
+  double *taps_d;
+  gint32 *taps_i;
+  int i;
+  int j;
+  double multiplier;
+
+  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
+      sharpen);
+
+  taps_d = scale->taps;
+  taps_i = g_malloc (sizeof (gint32) * scale->n_taps * dest_size);
+
+  multiplier = (1 << shift);
+
+  for (j = 0; j < dest_size; j++) {
+    for (i = 0; i < n_taps; i++) {
+      taps_i[j * n_taps + i] =
+          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
+    }
+  }
+
+  g_free (taps_d);
+  scale->taps = taps_i;
+}
+
+/*
+ * Calculates a set of taps for each destination element in gint16
+ * format.  Each set of taps sums to (1<<shift).  A typical value
+ * for shift is 7, so that applying the taps to uint8 values and
+ * summing will fit in a (signed) int16.
+ */
+static void
+scale1d_calculate_taps_int16 (Scale1D * scale, int src_size, int dest_size,
+    int n_taps, double a, double sharpness, double sharpen, int shift)
+{
+  double *taps_d;
+  gint16 *taps_i;
+  int i;
+  int j;
+  double multiplier;
+
+  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
+      sharpen);
+
+  taps_d = scale->taps;
+  taps_i = g_malloc (sizeof (gint16) * scale->n_taps * dest_size);
+
+  multiplier = (1 << shift);
+
+  /* Various methods for converting floating point taps to integer.
+   * The dB values are the SSIM value between scaling an image via
+   * the floating point pathway vs. the integer pathway using the
+   * given code to generate the taps.  Only one image was tested,
+   * scaling from 1920x1080 to 640x360.  Several variations of the
+   * methods were also tested, with nothing appearing useful.  */
+#if 0
+  /* Standard round to integer.  This causes bad DC errors. */
+  /* 44.588 dB */
+  for (j = 0; j < dest_size; j++) {
+    for (i = 0; i < n_taps; i++) {
+      taps_i[j * n_taps + i] =
+          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
+    }
+  }
+#endif
+#if 0
+  /* Dithering via error propogation.  Works pretty well, but
+   * really we want to propogate errors across rows, which would
+   * mean having several sets of tap arrays.  Possible, but more work,
+   * and it may not even be better. */
+  /* 57.0961 dB */
+  {
+    double err = 0;
+    for (j = 0; j < dest_size; j++) {
+      for (i = 0; i < n_taps; i++) {
+        err += taps_d[j * n_taps + i] * multiplier;
+        taps_i[j * n_taps + i] = floor (err);
+        err -= floor (err);
+      }
+    }
+  }
+#endif
+#if 1
+  /* Round to integer, but with an adjustable bias that we use to
+   * eliminate the DC error.  This search method is a bit crude, and
+   * could perhaps be improved somewhat. */
+  /* 60.4851 dB */
+  for (j = 0; j < dest_size; j++) {
+    int k;
+    for (k = 0; k < 100; k++) {
+      int sum = 0;
+      double offset;
+
+      offset = k * 0.01;
+      for (i = 0; i < n_taps; i++) {
+        taps_i[j * n_taps + i] =
+            floor (offset + taps_d[j * n_taps + i] * multiplier);
+        sum += taps_i[j * n_taps + i];
+      }
+
+      if (sum >= (1 << shift))
+        break;
+    }
+  }
+#endif
+#if 0
+  /* Round to integer, but adjust the multiplier.  The search method is
+   * wrong a lot, but was sufficient enough to calculate dB error. */
+  /* 58.6517 dB */
+  for (j = 0; j < dest_size; j++) {
+    int k;
+    int sum = 0;
+    for (k = 0; k < 200; k++) {
+      sum = 0;
+
+      multiplier = (1 << shift) - 1.0 + k * 0.01;
+      for (i = 0; i < n_taps; i++) {
+        taps_i[j * n_taps + i] =
+            floor (0.5 + taps_d[j * n_taps + i] * multiplier);
+        sum += taps_i[j * n_taps + i];
+      }
+
+      if (sum >= (1 << shift))
+        break;
+    }
+    if (sum != (1 << shift)) {
+      GST_ERROR ("%g %d", multiplier, sum);
+    }
+  }
+#endif
+#if 0
+  /* Round to integer, but subtract the error from the largest tap */
+  /* 58.3677 dB */
+  for (j = 0; j < dest_size; j++) {
+    int err = -multiplier;
+    for (i = 0; i < n_taps; i++) {
+      taps_i[j * n_taps + i] =
+          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
+      err += taps_i[j * n_taps + i];
+    }
+    if (taps_i[j * n_taps + (n_taps / 2 - 1)] >
+        taps_i[j * n_taps + (n_taps / 2)]) {
+      taps_i[j * n_taps + (n_taps / 2 - 1)] -= err;
+    } else {
+      taps_i[j * n_taps + (n_taps / 2)] -= err;
+    }
+  }
+#endif
+
+  g_free (taps_d);
+  scale->taps = taps_i;
+}
+
+
+void
+vs_image_scale_lanczos_Y (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
+    double a, double sharpen)
+{
+  switch (submethod) {
+    case 0:
+    default:
+      vs_image_scale_lanczos_Y_int16 (dest, src, tmpbuf, sharpness, dither, a,
+          sharpen);
+      break;
+    case 1:
+      vs_image_scale_lanczos_Y_int32 (dest, src, tmpbuf, sharpness, dither, a,
+          sharpen);
+      break;
+    case 2:
+      vs_image_scale_lanczos_Y_float (dest, src, tmpbuf, sharpness, dither, a,
+          sharpen);
+      break;
+    case 3:
+      vs_image_scale_lanczos_Y_double (dest, src, tmpbuf, sharpness, dither, a,
+          sharpen);
+      break;
+  }
+}
+
+void
+vs_image_scale_lanczos_AYUV (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
+    double a, double sharpen)
+{
+  switch (submethod) {
+    case 0:
+    default:
+      vs_image_scale_lanczos_AYUV_int16 (dest, src, tmpbuf, sharpness, dither,
+          a, sharpen);
+      break;
+    case 1:
+      vs_image_scale_lanczos_AYUV_int32 (dest, src, tmpbuf, sharpness, dither,
+          a, sharpen);
+      break;
+    case 2:
+      vs_image_scale_lanczos_AYUV_float (dest, src, tmpbuf, sharpness, dither,
+          a, sharpen);
+      break;
+    case 3:
+      vs_image_scale_lanczos_AYUV_double (dest, src, tmpbuf, sharpness, dither,
+          a, sharpen);
+      break;
+  }
+}
+
+
+
+#define RESAMPLE_HORIZ_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \
+static void \
+function (dest_type *dest, const gint32 *offsets, \
+    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
+{ \
+  int i; \
+  int k; \
+  dest_type sum; \
+  const src_type *srcline; \
+  const tap_type *tapsline; \
+  for (i = 0; i < n; i++) { \
+    srcline = src + offsets[i]; \
+    tapsline = taps + i * _n_taps; \
+    sum = 0; \
+    for (k = 0; k < _n_taps; k++) { \
+      sum += srcline[k] * tapsline[k]; \
+    } \
+    dest[i] = sum; \
+  } \
+}
+
+#define RESAMPLE_HORIZ(function, dest_type, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (dest_type *dest, const gint32 *offsets, \
+    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
+{ \
+  int i; \
+  int k; \
+  dest_type sum; \
+  const src_type *srcline; \
+  const tap_type *tapsline; \
+  int offset; \
+  if (_shift > 0) offset = (1<<_shift)>>1; \
+  else offset = 0; \
+  for (i = 0; i < n; i++) { \
+    srcline = src + offsets[i]; \
+    tapsline = taps + i * _n_taps; \
+    sum = 0; \
+    for (k = 0; k < _n_taps; k++) { \
+      sum += srcline[k] * tapsline[k]; \
+    } \
+    dest[i] = (sum + offset) >> _shift; \
+  } \
+}
+
+#define RESAMPLE_HORIZ_AYUV_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \
+static void \
+function (dest_type *dest, const gint32 *offsets, \
+    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
+{ \
+  int i; \
+  int k; \
+  dest_type sum1; \
+  dest_type sum2; \
+  dest_type sum3; \
+  dest_type sum4; \
+  const src_type *srcline; \
+  const tap_type *tapsline; \
+  for (i = 0; i < n; i++) { \
+    srcline = src + 4*offsets[i]; \
+    tapsline = taps + i * _n_taps; \
+    sum1 = 0; \
+    sum2 = 0; \
+    sum3 = 0; \
+    sum4 = 0; \
+    for (k = 0; k < _n_taps; k++) { \
+      sum1 += srcline[k*4+0] * tapsline[k]; \
+      sum2 += srcline[k*4+1] * tapsline[k]; \
+      sum3 += srcline[k*4+2] * tapsline[k]; \
+      sum4 += srcline[k*4+3] * tapsline[k]; \
+    } \
+    dest[i*4+0] = sum1; \
+    dest[i*4+1] = sum2; \
+    dest[i*4+2] = sum3; \
+    dest[i*4+3] = sum4; \
+  } \
+}
+
+#define RESAMPLE_HORIZ_AYUV(function, dest_type, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (dest_type *dest, const gint32 *offsets, \
+    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
+{ \
+  int i; \
+  int k; \
+  dest_type sum1; \
+  dest_type sum2; \
+  dest_type sum3; \
+  dest_type sum4; \
+  const src_type *srcline; \
+  const tap_type *tapsline; \
+  int offset; \
+  if (_shift > 0) offset = (1<<_shift)>>1; \
+  else offset = 0; \
+  for (i = 0; i < n; i++) { \
+    srcline = src + 4*offsets[i]; \
+    tapsline = taps + i * _n_taps; \
+    sum1 = 0; \
+    sum2 = 0; \
+    sum3 = 0; \
+    sum4 = 0; \
+    for (k = 0; k < _n_taps; k++) { \
+      sum1 += srcline[k*4+0] * tapsline[k]; \
+      sum2 += srcline[k*4+1] * tapsline[k]; \
+      sum3 += srcline[k*4+2] * tapsline[k]; \
+      sum4 += srcline[k*4+3] * tapsline[k]; \
+    } \
+    dest[i*4+0] = (sum1 + offset) >> _shift; \
+    dest[i*4+1] = (sum2 + offset) >> _shift; \
+    dest[i*4+2] = (sum3 + offset) >> _shift; \
+    dest[i*4+3] = (sum4 + offset) >> _shift; \
+  } \
+}
+
+/* *INDENT-OFF* */
+RESAMPLE_HORIZ_FLOAT (resample_horiz_double_u8_generic, double, double,
+    guint8, n_taps)
+RESAMPLE_HORIZ_FLOAT (resample_horiz_float_u8_generic, float, float,
+    guint8, n_taps)
+RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_double_ayuv_generic, double, double,
+    guint8, n_taps)
+RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_float_ayuv_generic, float, float,
+    guint8, n_taps)
+
+RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_generic, gint32, gint32,
+    guint8, n_taps, shift)
+RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_generic, gint16, gint16,
+    guint8, n_taps, shift)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_generic, gint32, gint32,
+    guint8, n_taps, shift)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_generic, gint16, gint16,
+    guint8, n_taps, shift)
+
+/* Candidates for orcification */
+RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps16_shift0, gint32, gint32,
+    guint8, 16, 0)
+RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps12_shift0, gint32, gint32,
+    guint8, 12, 0)
+RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps8_shift0, gint32, gint32,
+    guint8, 8, 0)
+RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps4_shift0, gint32, gint32,
+    guint8, 4, 0)
+RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps16_shift0, gint16, gint16,
+    guint8, 16, 0)
+RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps12_shift0, gint16, gint16,
+    guint8, 12, 0)
+RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps8_shift0, gint16, gint16,
+    guint8, 8, 0)
+RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps4_shift0, gint16, gint16,
+    guint8, 4, 0)
+
+RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps16_shift0, gint32, gint32,
+    guint8, 16, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps12_shift0, gint32, gint32,
+    guint8, 12, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps8_shift0, gint32, gint32,
+    guint8, 8, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps4_shift0, gint32, gint32,
+    guint8, 4, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps16_shift0, gint16, gint16,
+    guint8, 16, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps12_shift0, gint16, gint16,
+    guint8, 12, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps8_shift0, gint16, gint16,
+    guint8, 8, 0)
+RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps4_shift0, gint16, gint16,
+    guint8, 4, 0)
+/* *INDENT-ON* */
+
+#define RESAMPLE_VERT(function, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (guint8 *dest, \
+    const tap_type *taps, const src_type *src, int stride, int n_taps, \
+    int shift, int n) \
+{ \
+  int i; \
+  int l; \
+  gint32 sum_y; \
+  gint32 offset = (1<<_shift) >> 1; \
+  for (i = 0; i < n; i++) { \
+    sum_y = 0; \
+    for (l = 0; l < n_taps; l++) { \
+      const src_type *line = PTR_OFFSET(src, stride * l); \
+      sum_y += line[i] * taps[l]; \
+    } \
+    dest[i] = CLAMP ((sum_y + offset) >> _shift, 0, 255); \
+  } \
+}
+
+#define RESAMPLE_VERT_DITHER(function, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (guint8 *dest, \
+    const tap_type *taps, const src_type *src, int stride, int n_taps, \
+    int shift, int n) \
+{ \
+  int i; \
+  int l; \
+  gint32 sum_y; \
+  gint32 err_y = 0; \
+  gint32 mask = (1<<_shift) - 1; \
+  for (i = 0; i < n; i++) { \
+    sum_y = 0; \
+    for (l = 0; l < n_taps; l++) { \
+      const src_type *line = PTR_OFFSET(src, stride * l); \
+      sum_y += line[i] * taps[l]; \
+    } \
+    err_y += sum_y; \
+    dest[i] = CLAMP (err_y >> _shift, 0, 255); \
+    err_y &= mask; \
+  } \
+}
+
+/* *INDENT-OFF* */
+RESAMPLE_VERT (resample_vert_int32_generic, gint32, gint32, n_taps, shift)
+RESAMPLE_VERT_DITHER (resample_vert_dither_int32_generic, gint32, gint32,
+    n_taps, shift)
+RESAMPLE_VERT (resample_vert_int16_generic, gint16, gint16, n_taps, shift);
+RESAMPLE_VERT_DITHER (resample_vert_dither_int16_generic, gint16, gint16,
+    n_taps, shift)
+/* *INDENT-ON* */
+
+#define RESAMPLE_VERT_FLOAT(function, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (guint8 *dest, \
+    const tap_type *taps, const src_type *src, int stride, int n_taps, \
+    int shift, int n) \
+{ \
+  int i; \
+  int l; \
+  src_type sum_y; \
+  for (i = 0; i < n; i++) { \
+    sum_y = 0; \
+    for (l = 0; l < n_taps; l++) { \
+      const src_type *line = PTR_OFFSET(src, stride * l); \
+      sum_y += line[i] * taps[l]; \
+    } \
+    dest[i] = CLAMP (floor(0.5 + sum_y), 0, 255); \
+  } \
+}
+
+#define RESAMPLE_VERT_FLOAT_DITHER(function, tap_type, src_type, _n_taps, _shift) \
+static void \
+function (guint8 *dest, \
+    const tap_type *taps, const src_type *src, int stride, int n_taps, \
+    int shift, int n) \
+{ \
+  int i; \
+  int l; \
+  src_type sum_y; \
+  src_type err_y = 0; \
+  for (i = 0; i < n; i++) { \
+    sum_y = 0; \
+    for (l = 0; l < n_taps; l++) { \
+      const src_type *line = PTR_OFFSET(src, stride * l); \
+      sum_y += line[i] * taps[l]; \
+    } \
+    err_y += sum_y; \
+    dest[i] = CLAMP (floor (err_y), 0, 255); \
+    err_y -= floor (err_y); \
+  } \
+}
+
+/* *INDENT-OFF* */
+RESAMPLE_VERT_FLOAT (resample_vert_double_generic, double, double, n_taps,
+    shift)
+RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_double_generic, double, double,
+    n_taps, shift)
+
+RESAMPLE_VERT_FLOAT (resample_vert_float_generic, float, float, n_taps, shift)
+RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_float_generic, float, float,
+    n_taps, shift)
+/* *INDENT-ON* */
+
+#define S16_SHIFT1 7
+#define S16_SHIFT2 7
+#define S16_MIDSHIFT 0
+#define S16_POSTSHIFT (S16_SHIFT1+S16_SHIFT2-S16_MIDSHIFT)
+
+static void
+vs_scale_lanczos_Y_int16 (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    gint16 *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_S16 (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_int16_generic (destline,
+          taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]),
+          sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps,
+          S16_POSTSHIFT, scale->dest->width);
+    } else {
+      resample_vert_int16_generic (destline,
+          taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]),
+          sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps,
+          S16_POSTSHIFT, scale->dest->width);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  n_taps = ROUND_UP_4 (n_taps);
+  scale1d_calculate_taps_int16 (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_int16 (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2);
+
+  scale->dither = dither;
+
+  switch (scale->x_scale1d.n_taps) {
+    case 4:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps4_shift0;
+      break;
+    case 8:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps8_shift0;
+      break;
+    case 12:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps12_shift0;
+      break;
+    case 16:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps16_shift0;
+      break;
+    default:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_u8_generic;
+      break;
+  }
+
+  scale->tmpdata =
+      g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height);
+
+  vs_scale_lanczos_Y_int16 (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+
+#define S32_SHIFT1 11
+#define S32_SHIFT2 11
+#define S32_MIDSHIFT 0
+#define S32_POSTSHIFT (S32_SHIFT1+S32_SHIFT2-S32_MIDSHIFT)
+
+static void
+vs_scale_lanczos_Y_int32 (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    gint32 *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_S32 (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_int32_generic (destline,
+          taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]),
+          sizeof (gint32) * scale->dest->width,
+          scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width);
+    } else {
+      resample_vert_int32_generic (destline,
+          taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]),
+          sizeof (gint32) * scale->dest->width,
+          scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_Y_int32 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  n_taps = ROUND_UP_4 (n_taps);
+  scale1d_calculate_taps_int32 (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_int32 (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2);
+
+  scale->dither = dither;
+
+  switch (scale->x_scale1d.n_taps) {
+    case 4:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps4_shift0;
+      break;
+    case 8:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps8_shift0;
+      break;
+    case 12:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps12_shift0;
+      break;
+    case 16:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps16_shift0;
+      break;
+    default:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_u8_generic;
+      break;
+  }
+
+  scale->tmpdata =
+      g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height);
+
+  vs_scale_lanczos_Y_int32 (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+static void
+vs_scale_lanczos_Y_double (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    double *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_DOUBLE (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, 0, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_double_generic (destline,
+          taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]),
+          sizeof (double) * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width);
+    } else {
+      resample_vert_double_generic (destline,
+          taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]),
+          sizeof (double) * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_Y_double (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  scale1d_calculate_taps (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen);
+
+  scale->dither = dither;
+
+  scale->horiz_resample_func =
+      (HorizResampleFunc) resample_horiz_double_u8_generic;
+
+  scale->tmpdata =
+      g_malloc (sizeof (double) * scale->dest->width * scale->src->height);
+
+  vs_scale_lanczos_Y_double (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+static void
+vs_scale_lanczos_Y_float (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    float *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_FLOAT (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, 0, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_float_generic (destline,
+          taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]),
+          sizeof (float) * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width);
+    } else {
+      resample_vert_float_generic (destline,
+          taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]),
+          sizeof (float) * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_Y_float (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  scale1d_calculate_taps_float (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_float (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen);
+
+  scale->dither = dither;
+
+  scale->horiz_resample_func =
+      (HorizResampleFunc) resample_horiz_float_u8_generic;
+
+  scale->tmpdata =
+      g_malloc (sizeof (float) * scale->dest->width * scale->src->height);
+
+  vs_scale_lanczos_Y_float (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+
+
+
+
+static void
+vs_scale_lanczos_AYUV_int16 (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    gint16 *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_S16_AYUV (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_int16_generic (destline,
+          taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (gint16) * 4 * scale->dest->width,
+          scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4);
+    } else {
+      resample_vert_int16_generic (destline,
+          taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (gint16) * 4 * scale->dest->width,
+          scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  n_taps = ROUND_UP_4 (n_taps);
+  scale1d_calculate_taps_int16 (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_int16 (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2);
+
+  scale->dither = dither;
+
+  switch (scale->x_scale1d.n_taps) {
+    case 4:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps4_shift0;
+      break;
+    case 8:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps8_shift0;
+      break;
+    case 12:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps12_shift0;
+      break;
+    case 16:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps16_shift0;
+      break;
+    default:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_generic;
+      break;
+  }
+
+  scale->tmpdata =
+      g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height * 4);
+
+  vs_scale_lanczos_AYUV_int16 (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+
+static void
+vs_scale_lanczos_AYUV_int32 (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    gint32 *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_S32_AYUV (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_int32_generic (destline,
+          taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps,
+          S32_POSTSHIFT, scale->dest->width * 4);
+    } else {
+      resample_vert_int32_generic (destline,
+          taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps,
+          S32_POSTSHIFT, scale->dest->width * 4);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  n_taps = ROUND_UP_4 (n_taps);
+  scale1d_calculate_taps_int32 (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_int32 (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2);
+
+  scale->dither = dither;
+
+  switch (scale->x_scale1d.n_taps) {
+    case 4:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps4_shift0;
+      break;
+    case 8:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps8_shift0;
+      break;
+    case 12:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps12_shift0;
+      break;
+    case 16:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps16_shift0;
+      break;
+    default:
+      scale->horiz_resample_func =
+          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_generic;
+      break;
+  }
+
+  scale->tmpdata =
+      g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height * 4);
+
+  vs_scale_lanczos_AYUV_int32 (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+static void
+vs_scale_lanczos_AYUV_double (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    double *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_DOUBLE_AYUV (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, 0, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_double_generic (destline,
+          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (double) * 4 * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
+    } else {
+      resample_vert_double_generic (destline,
+          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (double) * 4 * scale->dest->width,
+          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_AYUV_double (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  scale1d_calculate_taps (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen);
+
+  scale->dither = dither;
+
+  scale->horiz_resample_func =
+      (HorizResampleFunc) resample_horiz_double_ayuv_generic;
+
+  scale->tmpdata =
+      g_malloc (sizeof (double) * scale->dest->width * scale->src->height * 4);
+
+  vs_scale_lanczos_AYUV_double (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
+
+static void
+vs_scale_lanczos_AYUV_float (Scale * scale)
+{
+  int j;
+  int yi;
+  int tmp_yi;
+
+  tmp_yi = 0;
+
+  for (j = 0; j < scale->dest->height; j++) {
+    guint8 *destline;
+    float *taps;
+
+    destline = scale->dest->pixels + scale->dest->stride * j;
+
+    yi = scale->y_scale1d.offsets[j];
+
+    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
+      scale->horiz_resample_func (TMP_LINE_FLOAT_AYUV (tmp_yi),
+          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
+          scale->x_scale1d.n_taps, 0, scale->dest->width);
+      tmp_yi++;
+    }
+
+    taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
+    if (scale->dither) {
+      resample_vert_dither_float_generic (destline,
+          taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0,
+          scale->dest->width * 4);
+    } else {
+      resample_vert_float_generic (destline,
+          taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]),
+          sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0,
+          scale->dest->width * 4);
+    }
+  }
+}
+
+void
+vs_image_scale_lanczos_AYUV_float (const VSImage * dest, const VSImage * src,
+    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
+    double sharpen)
+{
+  Scale s = { 0 };
+  Scale *scale = &s;
+  int n_taps;
+
+  scale->dest = dest;
+  scale->src = src;
+
+  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
+  scale1d_calculate_taps_float (&scale->x_scale1d,
+      src->width, dest->width, n_taps, a, sharpness, sharpen);
+
+  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
+  scale1d_calculate_taps_float (&scale->y_scale1d,
+      src->height, dest->height, n_taps, a, sharpness, sharpen);
+
+  scale->dither = dither;
+
+  scale->horiz_resample_func =
+      (HorizResampleFunc) resample_horiz_float_ayuv_generic;
+
+  scale->tmpdata =
+      g_malloc (sizeof (float) * scale->dest->width * scale->src->height * 4);
+
+  vs_scale_lanczos_AYUV_float (scale);
+
+  scale1d_cleanup (&scale->x_scale1d);
+  scale1d_cleanup (&scale->y_scale1d);
+  g_free (scale->tmpdata);
+}
diff --git a/gst/videoscale/vs_scanline.c b/gst/videoscale/vs_scanline.c
new file mode 100644
index 0000000..822a6b6
--- /dev/null
+++ b/gst/videoscale/vs_scanline.c
@@ -0,0 +1,781 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "vs_scanline.h"
+
+#include "gstvideoscaleorc.h"
+#include <gst/gst.h>
+
+#include <string.h>
+
+/* greyscale, i.e., single componenet */
+
+void
+vs_scanline_downsample_Y (uint8_t * dest, uint8_t * src, int n)
+{
+  orc_downsample_u8 (dest, src, n);
+}
+
+void
+vs_scanline_resample_nearest_Y (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  gst_videoscale_orc_resample_nearest_u8 (dest, src,
+      *accumulator, increment, n);
+
+  *accumulator += n * increment;
+}
+
+#include <glib.h>
+void
+vs_scanline_resample_linear_Y (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  gst_videoscale_orc_resample_bilinear_u8 (dest, src,
+      *accumulator, increment, n);
+
+  *accumulator += n * increment;
+}
+
+void
+vs_scanline_merge_linear_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    int n, int x)
+{
+  uint32_t value = x >> 8;
+
+  if (value == 0) {
+    memcpy (dest, src1, n);
+  } else {
+    orc_merge_linear_u8 (dest, src1, src2, value, n);
+  }
+}
+
+void
+vs_scanline_downsample_Y16 (uint8_t * dest, uint8_t * src, int n)
+{
+  orc_downsample_u16 ((uint16_t *) dest, (uint16_t *) src, n);
+}
+
+void
+vs_scanline_resample_nearest_Y16 (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    d[i] = (x < 32768 || j + 1 >= src_width) ? s[j] : s[j + 1];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_Y16 (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width)
+      d[i] = (s[j] * (65536 - x) + s[j + 1] * x) >> 16;
+    else
+      d[i] = s[j];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    int n, int x)
+{
+  uint16_t *d = (uint16_t *) dest;
+  const uint16_t *s1 = (const uint16_t *) src1;
+  const uint16_t *s2 = (const uint16_t *) src2;
+
+  if (x == 0) {
+    memcpy (d, s1, n * 2);
+  } else {
+    orc_merge_linear_u16 (d, s1, s2, 65536 - x, x, n);
+  }
+}
+
+/* RGBA */
+
+void
+vs_scanline_downsample_RGBA (uint8_t * dest, uint8_t * src, int n)
+{
+  gst_videoscale_orc_downsample_u32 (dest, src, n);
+}
+
+void
+vs_scanline_resample_nearest_RGBA (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  gst_videoscale_orc_resample_nearest_u32 (dest, src,
+      *accumulator, increment, n);
+
+  *accumulator += n * increment;
+}
+
+void
+vs_scanline_resample_linear_RGBA (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  gst_videoscale_orc_resample_bilinear_u32 (dest, src,
+      *accumulator, increment, n);
+
+  *accumulator += n * increment;
+}
+
+void
+vs_scanline_merge_linear_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    int n, int x)
+{
+  uint32_t value = x >> 8;
+
+  if (value == 0) {
+    memcpy (dest, src1, n * 4);
+  } else {
+    orc_merge_linear_u8 (dest, src1, src2, value, n * 4);
+  }
+}
+
+
+/* RGB */
+
+void
+vs_scanline_downsample_RGB (uint8_t * dest, uint8_t * src, int n)
+{
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i * 3 + 0] = (src[i * 6 + 0] + src[i * 6 + 3]) / 2;
+    dest[i * 3 + 1] = (src[i * 6 + 1] + src[i * 6 + 4]) / 2;
+    dest[i * 3 + 2] = (src[i * 6 + 2] + src[i * 6 + 5]) / 2;
+  }
+}
+
+void
+vs_scanline_resample_nearest_RGB (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    dest[i * 3 + 0] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 3 + 0] : src[j * 3 + 3];
+    dest[i * 3 + 1] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 3 + 1] : src[j * 3 + 4];
+    dest[i * 3 + 2] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 3 + 2] : src[j * 3 + 5];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_RGB (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width) {
+      dest[i * 3 + 0] =
+          (src[j * 3 + 0] * (65536 - x) + src[j * 3 + 3] * x) >> 16;
+      dest[i * 3 + 1] =
+          (src[j * 3 + 1] * (65536 - x) + src[j * 3 + 4] * x) >> 16;
+      dest[i * 3 + 2] =
+          (src[j * 3 + 2] * (65536 - x) + src[j * 3 + 5] * x) >> 16;
+    } else {
+      dest[i * 3 + 0] = src[j * 3 + 0];
+      dest[i * 3 + 1] = src[j * 3 + 1];
+      dest[i * 3 + 2] = src[j * 3 + 2];
+    }
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    int n, int x)
+{
+  uint32_t value = x >> 8;
+
+  if (value == 0) {
+    memcpy (dest, src1, n * 3);
+  } else {
+    orc_merge_linear_u8 (dest, src1, src2, value, n * 3);
+  }
+}
+
+
+/* YUYV */
+
+/* n is the number of pixels */
+/* increment is per Y pixel */
+
+void
+vs_scanline_downsample_YUYV (uint8_t * dest, uint8_t * src, int n)
+{
+  gst_videoscale_orc_downsample_yuyv (dest, src, n);
+}
+
+void
+vs_scanline_resample_nearest_YUYV (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  int quads = (n + 1) / 2;
+
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    dest[i * 4 + 0] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 2 + 0] : src[j * 2 + 2];
+
+    j = acc >> 17;
+    x = acc & 0x1ffff;
+    dest[i * 4 + 1] = (x < 65536
+        || 2 * j + 2 >= src_width) ? src[j * 4 + 1] : src[j * 4 + 5];
+
+    if (2 * i + 1 < n && 2 * j + 1 < src_width)
+      dest[i * 4 + 3] = (x < 65536
+          || 2 * j + 3 >= src_width) ? src[j * 4 + 3] : src[j * 4 + 7];
+
+    acc += increment;
+
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (2 * i + 1 < n && j < src_width) {
+      dest[i * 4 + 2] = (x < 32768
+          || j + 1 >= src_width) ? src[j * 2 + 0] : src[j * 2 + 2];
+      acc += increment;
+    }
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_YUYV (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  int quads = (n + 1) / 2;
+
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width)
+      dest[i * 4 + 0] =
+          (src[j * 2 + 0] * (65536 - x) + src[j * 2 + 2] * x) >> 16;
+    else
+      dest[i * 4 + 0] = src[j * 2 + 0];
+
+    j = acc >> 17;
+    x = acc & 0x1ffff;
+
+    if (2 * j + 2 < src_width)
+      dest[i * 4 + 1] =
+          (src[j * 4 + 1] * (131072 - x) + src[j * 4 + 5] * x) >> 17;
+    else
+      dest[i * 4 + 1] = src[j * 4 + 1];
+
+    if (2 * i + 1 < n && 2 * j + 1 < src_width) {
+      if (2 * j + 3 < src_width)
+        dest[i * 4 + 3] =
+            (src[j * 4 + 3] * (131072 - x) + src[j * 4 + 7] * x) >> 17;
+      else
+        dest[i * 4 + 3] = src[j * 4 + 3];
+    }
+
+    acc += increment;
+
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (2 * i + 1 < n && j < src_width) {
+      if (j + 1 < src_width)
+        dest[i * 4 + 2] =
+            (src[j * 2 + 0] * (65536 - x) + src[j * 2 + 2] * x) >> 16;
+      else
+        dest[i * 4 + 2] = src[j * 2 + 0];
+      acc += increment;
+    }
+  }
+
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2,
+    int n, int x)
+{
+  int quads = (n + 1) / 2;
+  uint32_t value = x >> 8;
+
+  if (value == 0) {
+    memcpy (dest, src1, quads * 4);
+  } else {
+    orc_merge_linear_u8 (dest, src1, src2, value, quads * 4);
+  }
+}
+
+
+/* UYVY */
+
+/* n is the number of bi-pixels */
+/* increment is per Y pixel */
+
+void
+vs_scanline_downsample_UYVY (uint8_t * dest, uint8_t * src, int n)
+{
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i * 4 + 0] = (src[i * 8 + 0] + src[i * 8 + 4]) / 2;
+    dest[i * 4 + 1] = (src[i * 8 + 1] + src[i * 8 + 3]) / 2;
+    dest[i * 4 + 2] = (src[i * 8 + 2] + src[i * 8 + 6]) / 2;
+    dest[i * 4 + 3] = (src[i * 8 + 5] + src[i * 8 + 7]) / 2;
+  }
+}
+
+void
+vs_scanline_resample_nearest_UYVY (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  int quads = (n + 1) / 2;
+
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    dest[i * 4 + 1] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 2 + 1] : src[j * 2 + 3];
+
+    j = acc >> 17;
+    x = acc & 0x1ffff;
+
+    dest[i * 4 + 0] = (x < 65536
+        || 2 * j + 2 >= src_width) ? src[j * 4 + 0] : src[j * 4 + 4];
+
+    if (2 * i + 1 < n && 2 * j + 1 < src_width)
+      dest[i * 4 + 2] = (x < 65536
+          || 2 * j + 3 >= src_width) ? src[j * 4 + 2] : src[j * 4 + 6];
+
+    acc += increment;
+
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (2 * i + 1 < n && j < src_width) {
+      dest[i * 4 + 3] = (x < 32768
+          || j + 1 >= src_width) ? src[j * 2 + 1] : src[j * 2 + 3];
+      acc += increment;
+    }
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_UYVY (uint8_t * dest, uint8_t * src, int src_width,
+    int n, int *accumulator, int increment)
+{
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+  int quads = (n + 1) / 2;
+
+  for (i = 0; i < quads; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width)
+      dest[i * 4 + 1] =
+          (src[j * 2 + 1] * (65536 - x) + src[j * 2 + 3] * x) >> 16;
+    else
+      dest[i * 4 + 1] = src[j * 2 + 1];
+
+    j = acc >> 17;
+    x = acc & 0x1ffff;
+    if (2 * j + 2 < src_width)
+      dest[i * 4 + 0] =
+          (src[j * 4 + 0] * (131072 - x) + src[j * 4 + 4] * x) >> 17;
+    else
+      dest[i * 4 + 0] = src[j * 4 + 0];
+
+    if (i * 2 + 1 < n && 2 * j + 1 < src_width) {
+      if (2 * j + 3 < src_width)
+        dest[i * 4 + 2] =
+            (src[j * 4 + 2] * (131072 - x) + src[j * 4 + 6] * x) >> 17;
+      else
+        dest[i * 4 + 2] = src[j * 4 + 2];
+    }
+
+    acc += increment;
+
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (2 * i + 1 < n && j < src_width) {
+      if (j + 1 < src_width)
+        dest[i * 4 + 3] =
+            (src[j * 2 + 1] * (65536 - x) + src[j * 2 + 3] * x) >> 16;
+      else
+        dest[i * 4 + 3] = src[j * 2 + 1];
+      acc += increment;
+    }
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_UYVY (uint8_t * dest, uint8_t * src1,
+    uint8_t * src2, int n, int x)
+{
+  int quads = (n + 1) / 2;
+  uint32_t value = x >> 8;
+
+  if (value == 0) {
+    memcpy (dest, src1, quads * 4);
+  } else {
+    orc_merge_linear_u8 (dest, src1, src2, value, quads * 4);
+  }
+}
+
+
+/* RGB565 */
+
+/* note that src and dest are uint16_t, and thus endian dependent */
+
+#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13)
+#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9)
+#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
+
+#define RGB565(r,g,b) \
+  ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f))
+
+
+void
+vs_scanline_downsample_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, int n)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i] = RGB565 (
+        (RGB565_R (src[i * 2]) + RGB565_R (src[i * 2 + 1])) / 2,
+        (RGB565_G (src[i * 2]) + RGB565_G (src[i * 2 + 1])) / 2,
+        (RGB565_B (src[i * 2]) + RGB565_B (src[i * 2 + 1])) / 2);
+  }
+}
+
+void
+vs_scanline_resample_nearest_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    dest[i] = (x < 32768 || j + 1 >= src_width) ? src[j] : src[j + 1];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width) {
+      dest[i] = RGB565 (
+          (RGB565_R (src[j]) * (65536 - x) + RGB565_R (src[j + 1]) * x) >> 16,
+          (RGB565_G (src[j]) * (65536 - x) + RGB565_G (src[j + 1]) * x) >> 16,
+          (RGB565_B (src[j]) * (65536 - x) + RGB565_B (src[j + 1]) * x) >> 16);
+    } else {
+      dest[i] = RGB565 (RGB565_R (src[j]),
+          RGB565_G (src[j]), RGB565_B (src[j]));
+    }
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8,
+    uint8_t * src2_u8, int n, int x)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src1 = (uint16_t *) src1_u8;
+  uint16_t *src2 = (uint16_t *) src2_u8;
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i] = RGB565 (
+        (RGB565_R (src1[i]) * (65536 - x) + RGB565_R (src2[i]) * x) >> 16,
+        (RGB565_G (src1[i]) * (65536 - x) + RGB565_G (src2[i]) * x) >> 16,
+        (RGB565_B (src1[i]) * (65536 - x) + RGB565_B (src2[i]) * x) >> 16);
+  }
+}
+
+
+/* RGB555 */
+
+/* note that src and dest are uint16_t, and thus endian dependent */
+
+#define RGB555_R(x) (((x)&0x7c00)>>8 | ((x)&0x7c00)>>13)
+#define RGB555_G(x) (((x)&0x03e0)>>3 | ((x)&0x03e0)>>9)
+#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
+
+#define RGB555(r,g,b) \
+  ((((r)<<7)&0x7c00) | (((g)<<3)&0x03e0) | (((b)>>3)&0x001f))
+
+
+void
+vs_scanline_downsample_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, int n)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i] = RGB555 (
+        (RGB555_R (src[i * 2]) + RGB555_R (src[i * 2 + 1])) / 2,
+        (RGB555_G (src[i * 2]) + RGB555_G (src[i * 2 + 1])) / 2,
+        (RGB555_B (src[i * 2]) + RGB555_B (src[i * 2 + 1])) / 2);
+  }
+}
+
+void
+vs_scanline_resample_nearest_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    dest[i] = (x < 32768 || j + 1 >= src_width) ? src[j] : src[j + 1];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src = (uint16_t *) src_u8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+
+    if (j + 1 < src_width) {
+      dest[i] = RGB555 (
+          (RGB555_R (src[j]) * (65536 - x) + RGB555_R (src[j + 1]) * x) >> 16,
+          (RGB555_G (src[j]) * (65536 - x) + RGB555_G (src[j + 1]) * x) >> 16,
+          (RGB555_B (src[j]) * (65536 - x) + RGB555_B (src[j + 1]) * x) >> 16);
+    } else {
+      dest[i] = RGB555 (RGB555_R (src[j]),
+          RGB555_G (src[j]), RGB555_B (src[j]));
+    }
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_merge_linear_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8,
+    uint8_t * src2_u8, int n, int x)
+{
+  uint16_t *dest = (uint16_t *) dest_u8;
+  uint16_t *src1 = (uint16_t *) src1_u8;
+  uint16_t *src2 = (uint16_t *) src2_u8;
+  int i;
+
+  for (i = 0; i < n; i++) {
+    dest[i] = RGB555 (
+        (RGB555_R (src1[i]) * (65536 - x) + RGB555_R (src2[i]) * x) >> 16,
+        (RGB555_G (src1[i]) * (65536 - x) + RGB555_G (src2[i]) * x) >> 16,
+        (RGB555_B (src1[i]) * (65536 - x) + RGB555_B (src2[i]) * x) >> 16);
+  }
+}
+
+void
+vs_scanline_resample_nearest_AYUV64 (uint8_t * dest8, uint8_t * src8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  guint16 *dest = (guint16 *) dest8;
+  guint16 *src = (guint16 *) src8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = acc & 0xffff;
+    dest[i * 4 + 0] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 4 + 0] : src[j * 4 + 4];
+    dest[i * 4 + 1] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 4 + 1] : src[j * 4 + 5];
+    dest[i * 4 + 2] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 4 + 2] : src[j * 4 + 6];
+    dest[i * 4 + 3] = (x < 32768
+        || j + 1 >= src_width) ? src[j * 4 + 3] : src[j * 4 + 7];
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
+
+void
+vs_scanline_resample_linear_AYUV64 (uint8_t * dest8, uint8_t * src8,
+    int src_width, int n, int *accumulator, int increment)
+{
+  guint16 *dest = (guint16 *) dest8;
+  guint16 *src = (guint16 *) src8;
+  int acc = *accumulator;
+  int i;
+  int j;
+  int x;
+
+  for (i = 0; i < n; i++) {
+    j = acc >> 16;
+    x = (acc & 0xffff) >> 1;
+
+    if (j + 1 < src_width) {
+      dest[i * 4 + 0] =
+          (src[j * 3 + 0] * (32768 - x) + src[j * 4 + 4] * x) >> 15;
+      dest[i * 4 + 1] =
+          (src[j * 4 + 1] * (32768 - x) + src[j * 4 + 5] * x) >> 15;
+      dest[i * 4 + 2] =
+          (src[j * 4 + 2] * (32768 - x) + src[j * 4 + 6] * x) >> 15;
+      dest[i * 4 + 3] =
+          (src[j * 4 + 3] * (32768 - x) + src[j * 4 + 7] * x) >> 15;
+    } else {
+      dest[i * 4 + 0] = src[j * 4 + 0];
+      dest[i * 4 + 1] = src[j * 4 + 1];
+      dest[i * 4 + 2] = src[j * 4 + 2];
+      dest[i * 4 + 3] = src[j * 4 + 3];
+    }
+
+    acc += increment;
+  }
+
+  *accumulator = acc;
+}
diff --git a/gst/videoscale/vs_scanline.h b/gst/videoscale/vs_scanline.h
new file mode 100644
index 0000000..387fc95
--- /dev/null
+++ b/gst/videoscale/vs_scanline.h
@@ -0,0 +1,79 @@
+/*
+ * Image Scaling Functions
+ * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __VS_SCANLINE_H__
+#define __VS_SCANLINE_H__
+
+#include <_stdint.h>
+
+void vs_scanline_downsample_Y (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
+void vs_scanline_resample_linear_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
+void vs_scanline_merge_linear_Y (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_RGBA (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_RGBA (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_RGB (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_RGB (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_YUYV (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_YUYV (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_UYVY (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_UYVY (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_RGB565 (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_RGB565 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_RGB555 (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
+void vs_scanline_merge_linear_RGB555 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_downsample_Y16 (uint8_t *dest, uint8_t *src, int n);
+void vs_scanline_resample_nearest_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
+void vs_scanline_resample_linear_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
+void vs_scanline_merge_linear_Y16 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
+
+void vs_scanline_resample_nearest_AYUV64 (uint8_t * dest, uint8_t * src,
+    int src_width, int n, int *accumulator, int increment);
+void vs_scanline_resample_linear_AYUV64 (uint8_t * dest, uint8_t * src,
+    int src_width, int n, int *accumulator, int increment);
+
+#endif
+
diff --git a/gst/videotestsrc/Makefile.am b/gst/videotestsrc/Makefile.am
new file mode 100644
index 0000000..cbfda81
--- /dev/null
+++ b/gst/videotestsrc/Makefile.am
@@ -0,0 +1,39 @@
+plugin_LTLIBRARIES = libgstvideotestsrc.la
+
+ORC_SOURCE=gstvideotestsrcorc
+include $(top_srcdir)/common/orc.mak
+
+libgstvideotestsrc_la_SOURCES = \
+			gstvideotestsrc.c \
+			videotestsrc.c
+nodist_libgstvideotestsrc_la_SOURCES = $(ORC_NODIST_SOURCES)
+
+libgstvideotestsrc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideotestsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideotestsrc_la_LIBADD = 	\
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+libgstvideotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstvideotestsrc.h videotestsrc.h
+
+noinst_PROGRAMS = generate_sine_table
+
+generate_sine_table_SOURCES = generate_sine_table.c
+generate_sine_table_CFLAGS = $(GST_CFLAGS)
+generate_sine_table_LDADD = $(LIBM)
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideotestsrc_la_SOURCES) \
+	 	   $(nodist_libgstvideotestsrc_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \
+	           $(libgstvideotestsrc_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/videotestsrc/Makefile.in b/gst/videotestsrc/Makefile.in
new file mode 100644
index 0000000..feed72a
--- /dev/null
+++ b/gst/videotestsrc/Makefile.in
@@ -0,0 +1,923 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+noinst_PROGRAMS = generate_sine_table$(EXEEXT)
+subdir = gst/videotestsrc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvideotestsrc_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstvideotestsrc_la_OBJECTS =  \
+	libgstvideotestsrc_la-gstvideotestsrc.lo \
+	libgstvideotestsrc_la-videotestsrc.lo
+am__objects_1 = libgstvideotestsrc_la-tmp-orc.lo
+nodist_libgstvideotestsrc_la_OBJECTS = $(am__objects_1)
+libgstvideotestsrc_la_OBJECTS = $(am_libgstvideotestsrc_la_OBJECTS) \
+	$(nodist_libgstvideotestsrc_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvideotestsrc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) \
+	$(libgstvideotestsrc_la_LDFLAGS) $(LDFLAGS) -o $@
+PROGRAMS = $(noinst_PROGRAMS)
+am_generate_sine_table_OBJECTS =  \
+	generate_sine_table-generate_sine_table.$(OBJEXT)
+generate_sine_table_OBJECTS = $(am_generate_sine_table_OBJECTS)
+generate_sine_table_DEPENDENCIES = $(am__DEPENDENCIES_1)
+generate_sine_table_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(generate_sine_table_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvideotestsrc_la_SOURCES) \
+	$(nodist_libgstvideotestsrc_la_SOURCES) \
+	$(generate_sine_table_SOURCES)
+DIST_SOURCES = $(libgstvideotestsrc_la_SOURCES) \
+	$(generate_sine_table_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstvideotestsrc.la
+ORC_SOURCE = gstvideotestsrcorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstvideotestsrc_la_SOURCES = \
+			gstvideotestsrc.c \
+			videotestsrc.c
+
+nodist_libgstvideotestsrc_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvideotestsrc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideotestsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvideotestsrc_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+
+libgstvideotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstvideotestsrc.h videotestsrc.h
+generate_sine_table_SOURCES = generate_sine_table.c
+generate_sine_table_CFLAGS = $(GST_CFLAGS)
+generate_sine_table_LDADD = $(LIBM)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videotestsrc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/videotestsrc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvideotestsrc.la: $(libgstvideotestsrc_la_OBJECTS) $(libgstvideotestsrc_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvideotestsrc_la_LINK) -rpath $(plugindir) $(libgstvideotestsrc_la_OBJECTS) $(libgstvideotestsrc_la_LIBADD) $(LIBS)
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+generate_sine_table$(EXEEXT): $(generate_sine_table_OBJECTS) $(generate_sine_table_DEPENDENCIES) 
+	@rm -f generate_sine_table$(EXEEXT)
+	$(AM_V_CCLD)$(generate_sine_table_LINK) $(generate_sine_table_OBJECTS) $(generate_sine_table_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_sine_table-generate_sine_table.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideotestsrc_la-gstvideotestsrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideotestsrc_la-tmp-orc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideotestsrc_la-videotestsrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvideotestsrc_la-gstvideotestsrc.lo: gstvideotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -MT libgstvideotestsrc_la-gstvideotestsrc.lo -MD -MP -MF $(DEPDIR)/libgstvideotestsrc_la-gstvideotestsrc.Tpo -c -o libgstvideotestsrc_la-gstvideotestsrc.lo `test -f 'gstvideotestsrc.c' || echo '$(srcdir)/'`gstvideotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideotestsrc_la-gstvideotestsrc.Tpo $(DEPDIR)/libgstvideotestsrc_la-gstvideotestsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvideotestsrc.c' object='libgstvideotestsrc_la-gstvideotestsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -c -o libgstvideotestsrc_la-gstvideotestsrc.lo `test -f 'gstvideotestsrc.c' || echo '$(srcdir)/'`gstvideotestsrc.c
+
+libgstvideotestsrc_la-videotestsrc.lo: videotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -MT libgstvideotestsrc_la-videotestsrc.lo -MD -MP -MF $(DEPDIR)/libgstvideotestsrc_la-videotestsrc.Tpo -c -o libgstvideotestsrc_la-videotestsrc.lo `test -f 'videotestsrc.c' || echo '$(srcdir)/'`videotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideotestsrc_la-videotestsrc.Tpo $(DEPDIR)/libgstvideotestsrc_la-videotestsrc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='videotestsrc.c' object='libgstvideotestsrc_la-videotestsrc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -c -o libgstvideotestsrc_la-videotestsrc.lo `test -f 'videotestsrc.c' || echo '$(srcdir)/'`videotestsrc.c
+
+libgstvideotestsrc_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -MT libgstvideotestsrc_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideotestsrc_la-tmp-orc.Tpo -c -o libgstvideotestsrc_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideotestsrc_la-tmp-orc.Tpo $(DEPDIR)/libgstvideotestsrc_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstvideotestsrc_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideotestsrc_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideotestsrc_la_CFLAGS) $(CFLAGS) -c -o libgstvideotestsrc_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+generate_sine_table-generate_sine_table.o: generate_sine_table.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_sine_table_CFLAGS) $(CFLAGS) -MT generate_sine_table-generate_sine_table.o -MD -MP -MF $(DEPDIR)/generate_sine_table-generate_sine_table.Tpo -c -o generate_sine_table-generate_sine_table.o `test -f 'generate_sine_table.c' || echo '$(srcdir)/'`generate_sine_table.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/generate_sine_table-generate_sine_table.Tpo $(DEPDIR)/generate_sine_table-generate_sine_table.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generate_sine_table.c' object='generate_sine_table-generate_sine_table.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_sine_table_CFLAGS) $(CFLAGS) -c -o generate_sine_table-generate_sine_table.o `test -f 'generate_sine_table.c' || echo '$(srcdir)/'`generate_sine_table.c
+
+generate_sine_table-generate_sine_table.obj: generate_sine_table.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_sine_table_CFLAGS) $(CFLAGS) -MT generate_sine_table-generate_sine_table.obj -MD -MP -MF $(DEPDIR)/generate_sine_table-generate_sine_table.Tpo -c -o generate_sine_table-generate_sine_table.obj `if test -f 'generate_sine_table.c'; then $(CYGPATH_W) 'generate_sine_table.c'; else $(CYGPATH_W) '$(srcdir)/generate_sine_table.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/generate_sine_table-generate_sine_table.Tpo $(DEPDIR)/generate_sine_table-generate_sine_table.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generate_sine_table.c' object='generate_sine_table-generate_sine_table.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(generate_sine_table_CFLAGS) $(CFLAGS) -c -o generate_sine_table-generate_sine_table.obj `if test -f 'generate_sine_table.c'; then $(CYGPATH_W) 'generate_sine_table.c'; else $(CYGPATH_W) '$(srcdir)/generate_sine_table.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-noinstPROGRAMS \
+	clean-pluginLTLIBRARIES ctags dist-hook distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvideotestsrc_la_SOURCES) \
+	 	   $(nodist_libgstvideotestsrc_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \
+	           $(libgstvideotestsrc_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/videotestsrc/generate_sine_table.c b/gst/videotestsrc/generate_sine_table.c
new file mode 100644
index 0000000..11d17af
--- /dev/null
+++ b/gst/videotestsrc/generate_sine_table.c
@@ -0,0 +1,43 @@
+
+#include <stdio.h>
+#include <math.h>
+#include <glib.h>
+
+static int
+get_value (int i)
+{
+  int x;
+
+  x = floor (256 * (0.5 + 0.5 * sin (i * 2 * G_PI / 256)));
+  if (x > 255)
+    x = 255;
+  return x;
+}
+
+int
+main (int argc, char *argv[])
+{
+  int i;
+  int j;
+
+  printf ("static const guint8\n");
+  printf ("sine_table[256] = {\n");
+  for (i = 0; i < 256; i += 8) {
+    printf ("  ");
+    for (j = 0; j < 8; j++) {
+      printf ("%3d", get_value (i + j));
+      if (j != 7) {
+        printf (", ");
+      } else {
+        if (i + j != 255) {
+          printf (",\n");
+        } else {
+          printf ("\n");
+        }
+      }
+    }
+  }
+  printf ("};\n");
+
+  return 0;
+}
diff --git a/gst/videotestsrc/gstvideotestsrc.c b/gst/videotestsrc/gstvideotestsrc.c
new file mode 100644
index 0000000..022eb46
--- /dev/null
+++ b/gst/videotestsrc/gstvideotestsrc.c
@@ -0,0 +1,883 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2002> David A. Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-videotestsrc
+ *
+ * The videotestsrc element is used to produce test video data in a wide variaty
+ * of formats. The video test data produced can be controlled with the "pattern"
+ * property.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v videotestsrc pattern=snow ! ximagesink
+ * ]| Shows random noise in an X window.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "gstvideotestsrc.h"
+#include "gstvideotestsrcorc.h"
+#include "videotestsrc.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY_STATIC (video_test_src_debug);
+#define GST_CAT_DEFAULT video_test_src_debug
+
+#define DEFAULT_PATTERN            GST_VIDEO_TEST_SRC_SMPTE
+#define DEFAULT_TIMESTAMP_OFFSET   0
+#define DEFAULT_IS_LIVE            FALSE
+#define DEFAULT_COLOR_SPEC         GST_VIDEO_TEST_SRC_BT601
+#define DEFAULT_FOREGROUND_COLOR   0xffffffff
+#define DEFAULT_BACKGROUND_COLOR   0xff000000
+#define DEFAULT_HORIZONTAL_SPEED   0
+
+enum
+{
+  PROP_0,
+  PROP_PATTERN,
+  PROP_TIMESTAMP_OFFSET,
+  PROP_IS_LIVE,
+  PROP_K0,
+  PROP_KX,
+  PROP_KY,
+  PROP_KT,
+  PROP_KXT,
+  PROP_KYT,
+  PROP_KXY,
+  PROP_KX2,
+  PROP_KY2,
+  PROP_KT2,
+  PROP_XOFFSET,
+  PROP_YOFFSET,
+  PROP_FOREGROUND_COLOR,
+  PROP_BACKGROUND_COLOR,
+  PROP_HORIZONTAL_SPEED,
+  PROP_LAST
+};
+
+
+#define gst_video_test_src_parent_class parent_class
+G_DEFINE_TYPE (GstVideoTestSrc, gst_video_test_src, GST_TYPE_PUSH_SRC);
+
+static void gst_video_test_src_set_pattern (GstVideoTestSrc * videotestsrc,
+    int pattern_type);
+static void gst_video_test_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_video_test_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static GstCaps *gst_video_test_src_getcaps (GstBaseSrc * bsrc,
+    GstCaps * filter);
+static gboolean gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps);
+static void gst_video_test_src_src_fixate (GstBaseSrc * bsrc, GstCaps * caps);
+
+static gboolean gst_video_test_src_is_seekable (GstBaseSrc * psrc);
+static gboolean gst_video_test_src_do_seek (GstBaseSrc * bsrc,
+    GstSegment * segment);
+static gboolean gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query);
+
+static void gst_video_test_src_get_times (GstBaseSrc * basesrc,
+    GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
+static gboolean gst_video_test_src_decide_allocation (GstBaseSrc * bsrc,
+    GstQuery * query);
+static GstFlowReturn gst_video_test_src_fill (GstPushSrc * psrc,
+    GstBuffer * buffer);
+static gboolean gst_video_test_src_start (GstBaseSrc * basesrc);
+static gboolean gst_video_test_src_stop (GstBaseSrc * basesrc);
+
+#define GST_TYPE_VIDEO_TEST_SRC_PATTERN (gst_video_test_src_pattern_get_type ())
+static GType
+gst_video_test_src_pattern_get_type (void)
+{
+  static GType video_test_src_pattern_type = 0;
+  static const GEnumValue pattern_types[] = {
+    {GST_VIDEO_TEST_SRC_SMPTE, "SMPTE 100% color bars", "smpte"},
+    {GST_VIDEO_TEST_SRC_SNOW, "Random (television snow)", "snow"},
+    {GST_VIDEO_TEST_SRC_BLACK, "100% Black", "black"},
+    {GST_VIDEO_TEST_SRC_WHITE, "100% White", "white"},
+    {GST_VIDEO_TEST_SRC_RED, "Red", "red"},
+    {GST_VIDEO_TEST_SRC_GREEN, "Green", "green"},
+    {GST_VIDEO_TEST_SRC_BLUE, "Blue", "blue"},
+    {GST_VIDEO_TEST_SRC_CHECKERS1, "Checkers 1px", "checkers-1"},
+    {GST_VIDEO_TEST_SRC_CHECKERS2, "Checkers 2px", "checkers-2"},
+    {GST_VIDEO_TEST_SRC_CHECKERS4, "Checkers 4px", "checkers-4"},
+    {GST_VIDEO_TEST_SRC_CHECKERS8, "Checkers 8px", "checkers-8"},
+    {GST_VIDEO_TEST_SRC_CIRCULAR, "Circular", "circular"},
+    {GST_VIDEO_TEST_SRC_BLINK, "Blink", "blink"},
+    {GST_VIDEO_TEST_SRC_SMPTE75, "SMPTE 75% color bars", "smpte75"},
+    {GST_VIDEO_TEST_SRC_ZONE_PLATE, "Zone plate", "zone-plate"},
+    {GST_VIDEO_TEST_SRC_GAMUT, "Gamut checkers", "gamut"},
+    {GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE, "Chroma zone plate",
+        "chroma-zone-plate"},
+    {GST_VIDEO_TEST_SRC_SOLID, "Solid color", "solid-color"},
+    {GST_VIDEO_TEST_SRC_BALL, "Moving ball", "ball"},
+    {GST_VIDEO_TEST_SRC_SMPTE100, "SMPTE 100% color bars", "smpte100"},
+    {GST_VIDEO_TEST_SRC_BAR, "Bar", "bar"},
+    {0, NULL, NULL}
+  };
+
+  if (!video_test_src_pattern_type) {
+    video_test_src_pattern_type =
+        g_enum_register_static ("GstVideoTestSrcPattern", pattern_types);
+  }
+  return video_test_src_pattern_type;
+}
+
+static void
+gst_video_test_src_class_init (GstVideoTestSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstPushSrcClass *gstpushsrc_class;
+  GstCaps *templ_caps;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstpushsrc_class = (GstPushSrcClass *) klass;
+
+  gobject_class->set_property = gst_video_test_src_set_property;
+  gobject_class->get_property = gst_video_test_src_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_PATTERN,
+      g_param_spec_enum ("pattern", "Pattern",
+          "Type of test pattern to generate", GST_TYPE_VIDEO_TEST_SRC_PATTERN,
+          DEFAULT_PATTERN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_TIMESTAMP_OFFSET,
+      g_param_spec_int64 ("timestamp-offset", "Timestamp offset",
+          "An offset added to timestamps set on buffers (in ns)", G_MININT64,
+          G_MAXINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_IS_LIVE,
+      g_param_spec_boolean ("is-live", "Is Live",
+          "Whether to act as a live source", DEFAULT_IS_LIVE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_K0,
+      g_param_spec_int ("k0", "Zoneplate zero order phase",
+          "Zoneplate zero order phase, for generating plain fields or phase offsets",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KX,
+      g_param_spec_int ("kx", "Zoneplate 1st order x phase",
+          "Zoneplate 1st order x phase, for generating constant horizontal frequencies",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KY,
+      g_param_spec_int ("ky", "Zoneplate 1st order y phase",
+          "Zoneplate 1st order y phase, for generating contant vertical frequencies",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KT,
+      g_param_spec_int ("kt", "Zoneplate 1st order t phase",
+          "Zoneplate 1st order t phase, for generating phase rotation as a function of time",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KXT,
+      g_param_spec_int ("kxt", "Zoneplate x*t product phase",
+          "Zoneplate x*t product phase, normalised to kxy/256 cycles per vertical pixel at width/2 from origin",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KYT,
+      g_param_spec_int ("kyt", "Zoneplate y*t product phase",
+          "Zoneplate y*t product phase", G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KXY,
+      g_param_spec_int ("kxy", "Zoneplate x*y product phase",
+          "Zoneplate x*y product phase", G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KX2,
+      g_param_spec_int ("kx2", "Zoneplate 2nd order x phase",
+          "Zoneplate 2nd order x phase, normalised to kx2/256 cycles per horizontal pixel at width/2 from origin",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KY2,
+      g_param_spec_int ("ky2", "Zoneplate 2nd order y phase",
+          "Zoneplate 2nd order y phase, normailsed to ky2/256 cycles per vertical pixel at height/2 from origin",
+          G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_KT2,
+      g_param_spec_int ("kt2", "Zoneplate 2nd order t phase",
+          "Zoneplate 2nd order t phase, t*t/256 cycles per picture", G_MININT32,
+          G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_XOFFSET,
+      g_param_spec_int ("xoffset", "Zoneplate 2nd order products x offset",
+          "Zoneplate 2nd order products x offset", G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_YOFFSET,
+      g_param_spec_int ("yoffset", "Zoneplate 2nd order products y offset",
+          "Zoneplate 2nd order products y offset", G_MININT32, G_MAXINT32, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstVideoTestSrc:foreground-color
+   *
+   * Color to use for solid-color pattern and foreground color of other
+   * patterns.  Default is white (0xffffffff).
+   *
+   * Since: 0.10.31
+   **/
+  g_object_class_install_property (gobject_class, PROP_FOREGROUND_COLOR,
+      g_param_spec_uint ("foreground-color", "Foreground Color",
+          "Foreground color to use (big-endian ARGB)", 0, G_MAXUINT32,
+          DEFAULT_FOREGROUND_COLOR,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstVideoTestSrc:background-color
+   *
+   * Color to use for background color of some patterns.  Default is
+   * black (0xff000000).
+   *
+   * Since: 0.10.31
+   **/
+  g_object_class_install_property (gobject_class, PROP_BACKGROUND_COLOR,
+      g_param_spec_uint ("background-color", "Background Color",
+          "Background color to use (big-endian ARGB)", 0, G_MAXUINT32,
+          DEFAULT_BACKGROUND_COLOR,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_HORIZONTAL_SPEED,
+      g_param_spec_int ("horizontal-speed", "Horizontal Speed",
+          "Scroll image number of pixels per frame (positive is scroll to the left)",
+          G_MININT32, G_MAXINT32, DEFAULT_HORIZONTAL_SPEED,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Video test source", "Source/Video",
+      "Creates a test video stream", "David A. Schleef <ds@schleef.org>");
+
+  templ_caps = gst_video_test_src_getcaps (NULL, NULL);
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
+  gst_caps_unref (templ_caps);
+
+  gstbasesrc_class->get_caps = gst_video_test_src_getcaps;
+  gstbasesrc_class->set_caps = gst_video_test_src_setcaps;
+  gstbasesrc_class->fixate = gst_video_test_src_src_fixate;
+  gstbasesrc_class->is_seekable = gst_video_test_src_is_seekable;
+  gstbasesrc_class->do_seek = gst_video_test_src_do_seek;
+  gstbasesrc_class->query = gst_video_test_src_query;
+  gstbasesrc_class->get_times = gst_video_test_src_get_times;
+  gstbasesrc_class->start = gst_video_test_src_start;
+  gstbasesrc_class->stop = gst_video_test_src_stop;
+  gstbasesrc_class->decide_allocation = gst_video_test_src_decide_allocation;
+
+  gstpushsrc_class->fill = gst_video_test_src_fill;
+}
+
+static void
+gst_video_test_src_init (GstVideoTestSrc * src)
+{
+  gst_video_test_src_set_pattern (src, DEFAULT_PATTERN);
+
+  src->timestamp_offset = DEFAULT_TIMESTAMP_OFFSET;
+  src->foreground_color = DEFAULT_FOREGROUND_COLOR;
+  src->background_color = DEFAULT_BACKGROUND_COLOR;
+  src->horizontal_speed = DEFAULT_HORIZONTAL_SPEED;
+
+  /* we operate in time */
+  gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
+  gst_base_src_set_live (GST_BASE_SRC (src), DEFAULT_IS_LIVE);
+}
+
+static void
+gst_video_test_src_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  GstStructure *structure;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  gst_structure_fixate_field_nearest_int (structure, "width", 320);
+  gst_structure_fixate_field_nearest_int (structure, "height", 240);
+  gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+  if (gst_structure_has_field (structure, "pixel-aspect-ratio"))
+    gst_structure_fixate_field_nearest_fraction (structure,
+        "pixel-aspect-ratio", 1, 1);
+  if (gst_structure_has_field (structure, "colorimetry"))
+    gst_structure_fixate_field_string (structure, "colorimetry", "bt601");
+  if (gst_structure_has_field (structure, "chroma-site"))
+    gst_structure_fixate_field_string (structure, "chroma-site", "mpeg2");
+
+  if (gst_structure_has_field (structure, "interlaced"))
+    gst_structure_fixate_field_boolean (structure, "interlaced", FALSE);
+
+  GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
+}
+
+static void
+gst_video_test_src_set_pattern (GstVideoTestSrc * videotestsrc,
+    int pattern_type)
+{
+  videotestsrc->pattern_type = pattern_type;
+
+  GST_DEBUG_OBJECT (videotestsrc, "setting pattern to %d", pattern_type);
+
+  switch (pattern_type) {
+    case GST_VIDEO_TEST_SRC_SMPTE:
+      videotestsrc->make_image = gst_video_test_src_smpte;
+      break;
+    case GST_VIDEO_TEST_SRC_SNOW:
+      videotestsrc->make_image = gst_video_test_src_snow;
+      break;
+    case GST_VIDEO_TEST_SRC_BLACK:
+      videotestsrc->make_image = gst_video_test_src_black;
+      break;
+    case GST_VIDEO_TEST_SRC_WHITE:
+      videotestsrc->make_image = gst_video_test_src_white;
+      break;
+    case GST_VIDEO_TEST_SRC_RED:
+      videotestsrc->make_image = gst_video_test_src_red;
+      break;
+    case GST_VIDEO_TEST_SRC_GREEN:
+      videotestsrc->make_image = gst_video_test_src_green;
+      break;
+    case GST_VIDEO_TEST_SRC_BLUE:
+      videotestsrc->make_image = gst_video_test_src_blue;
+      break;
+    case GST_VIDEO_TEST_SRC_CHECKERS1:
+      videotestsrc->make_image = gst_video_test_src_checkers1;
+      break;
+    case GST_VIDEO_TEST_SRC_CHECKERS2:
+      videotestsrc->make_image = gst_video_test_src_checkers2;
+      break;
+    case GST_VIDEO_TEST_SRC_CHECKERS4:
+      videotestsrc->make_image = gst_video_test_src_checkers4;
+      break;
+    case GST_VIDEO_TEST_SRC_CHECKERS8:
+      videotestsrc->make_image = gst_video_test_src_checkers8;
+      break;
+    case GST_VIDEO_TEST_SRC_CIRCULAR:
+      videotestsrc->make_image = gst_video_test_src_circular;
+      break;
+    case GST_VIDEO_TEST_SRC_BLINK:
+      videotestsrc->make_image = gst_video_test_src_blink;
+      break;
+    case GST_VIDEO_TEST_SRC_SMPTE75:
+      videotestsrc->make_image = gst_video_test_src_smpte75;
+      break;
+    case GST_VIDEO_TEST_SRC_ZONE_PLATE:
+      videotestsrc->make_image = gst_video_test_src_zoneplate;
+      break;
+    case GST_VIDEO_TEST_SRC_GAMUT:
+      videotestsrc->make_image = gst_video_test_src_gamut;
+      break;
+    case GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE:
+      videotestsrc->make_image = gst_video_test_src_chromazoneplate;
+      break;
+    case GST_VIDEO_TEST_SRC_SOLID:
+      videotestsrc->make_image = gst_video_test_src_solid;
+      break;
+    case GST_VIDEO_TEST_SRC_BALL:
+      videotestsrc->make_image = gst_video_test_src_ball;
+      break;
+    case GST_VIDEO_TEST_SRC_SMPTE100:
+      videotestsrc->make_image = gst_video_test_src_smpte100;
+      break;
+    case GST_VIDEO_TEST_SRC_BAR:
+      videotestsrc->make_image = gst_video_test_src_bar;
+      break;
+    default:
+      g_assert_not_reached ();
+  }
+}
+
+static void
+gst_video_test_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (object);
+
+  switch (prop_id) {
+    case PROP_PATTERN:
+      gst_video_test_src_set_pattern (src, g_value_get_enum (value));
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      src->timestamp_offset = g_value_get_int64 (value);
+      break;
+    case PROP_IS_LIVE:
+      gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value));
+      break;
+    case PROP_K0:
+      src->k0 = g_value_get_int (value);
+      break;
+    case PROP_KX:
+      src->kx = g_value_get_int (value);
+      break;
+    case PROP_KY:
+      src->ky = g_value_get_int (value);
+      break;
+    case PROP_KT:
+      src->kt = g_value_get_int (value);
+      break;
+    case PROP_KXT:
+      src->kxt = g_value_get_int (value);
+      break;
+    case PROP_KYT:
+      src->kyt = g_value_get_int (value);
+      break;
+    case PROP_KXY:
+      src->kxy = g_value_get_int (value);
+      break;
+    case PROP_KX2:
+      src->kx2 = g_value_get_int (value);
+      break;
+    case PROP_KY2:
+      src->ky2 = g_value_get_int (value);
+      break;
+    case PROP_KT2:
+      src->kt2 = g_value_get_int (value);
+      break;
+    case PROP_XOFFSET:
+      src->xoffset = g_value_get_int (value);
+      break;
+    case PROP_YOFFSET:
+      src->yoffset = g_value_get_int (value);
+      break;
+    case PROP_FOREGROUND_COLOR:
+      src->foreground_color = g_value_get_uint (value);
+      break;
+    case PROP_BACKGROUND_COLOR:
+      src->background_color = g_value_get_uint (value);
+      break;
+    case PROP_HORIZONTAL_SPEED:
+      src->horizontal_speed = g_value_get_int (value);
+    default:
+      break;
+  }
+}
+
+static void
+gst_video_test_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (object);
+
+  switch (prop_id) {
+    case PROP_PATTERN:
+      g_value_set_enum (value, src->pattern_type);
+      break;
+    case PROP_TIMESTAMP_OFFSET:
+      g_value_set_int64 (value, src->timestamp_offset);
+      break;
+    case PROP_IS_LIVE:
+      g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
+      break;
+    case PROP_K0:
+      g_value_set_int (value, src->k0);
+      break;
+    case PROP_KX:
+      g_value_set_int (value, src->kx);
+      break;
+    case PROP_KY:
+      g_value_set_int (value, src->ky);
+      break;
+    case PROP_KT:
+      g_value_set_int (value, src->kt);
+      break;
+    case PROP_KXT:
+      g_value_set_int (value, src->kxt);
+      break;
+    case PROP_KYT:
+      g_value_set_int (value, src->kyt);
+      break;
+    case PROP_KXY:
+      g_value_set_int (value, src->kxy);
+      break;
+    case PROP_KX2:
+      g_value_set_int (value, src->kx2);
+      break;
+    case PROP_KY2:
+      g_value_set_int (value, src->ky2);
+      break;
+    case PROP_KT2:
+      g_value_set_int (value, src->kt2);
+      break;
+    case PROP_XOFFSET:
+      g_value_set_int (value, src->xoffset);
+      break;
+    case PROP_YOFFSET:
+      g_value_set_int (value, src->yoffset);
+      break;
+    case PROP_FOREGROUND_COLOR:
+      g_value_set_uint (value, src->foreground_color);
+      break;
+    case PROP_BACKGROUND_COLOR:
+      g_value_set_uint (value, src->background_color);
+      break;
+    case PROP_HORIZONTAL_SPEED:
+      g_value_set_int (value, src->horizontal_speed);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/* threadsafe because this gets called as the plugin is loaded */
+static GstCaps *
+gst_video_test_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
+{
+  static GstCaps *capslist = NULL;
+
+  if (!capslist) {
+    GstCaps *caps;
+    GstStructure *structure;
+    int i;
+
+    caps = gst_caps_new_empty ();
+    for (i = 0; i < n_formats; i++) {
+      structure = paint_get_structure (format_list + i);
+      gst_structure_set (structure,
+          "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+          "height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+          "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+      gst_caps_append_structure (caps, structure);
+    }
+
+    capslist = caps;
+  }
+
+  if (filter)
+    return gst_caps_intersect_full (filter, capslist, GST_CAPS_INTERSECT_FIRST);
+  else
+    return gst_caps_ref (capslist);
+}
+
+static gboolean
+gst_video_test_src_parse_caps (const GstCaps * caps,
+    gint * width, gint * height, gint * fps_n, gint * fps_d,
+    GstVideoColorimetry * colorimetry)
+{
+  const GstStructure *structure;
+  GstPadLinkReturn ret;
+  const GValue *framerate;
+  const gchar *csp;
+
+  GST_DEBUG ("parsing caps");
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  ret = gst_structure_get_int (structure, "width", width);
+  ret &= gst_structure_get_int (structure, "height", height);
+  framerate = gst_structure_get_value (structure, "framerate");
+
+  if (framerate) {
+    *fps_n = gst_value_get_fraction_numerator (framerate);
+    *fps_d = gst_value_get_fraction_denominator (framerate);
+  } else
+    goto no_framerate;
+
+  if ((csp = gst_structure_get_string (structure, "colorimetry")))
+    gst_video_colorimetry_from_string (colorimetry, csp);
+
+  return ret;
+
+  /* ERRORS */
+no_framerate:
+  {
+    GST_DEBUG ("videotestsrc no framerate given");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_video_test_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+{
+  GstVideoTestSrc *videotestsrc;
+  GstBufferPool *pool;
+  guint size, min, max, prefix, alignment;
+
+  videotestsrc = GST_VIDEO_TEST_SRC (bsrc);
+
+  gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
+      &alignment, &pool);
+  /* adjust size */
+  size = MAX (size, videotestsrc->info.size);
+
+  if (pool) {
+    GstStructure *config;
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_META_VIDEO);
+    gst_buffer_pool_set_config (pool, config);
+  }
+  gst_query_set_allocation_params (query, size, min, max, prefix,
+      alignment, pool);
+
+  return TRUE;
+}
+
+static gboolean
+gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
+{
+  struct format_list_struct *format;
+  const GstStructure *structure;
+  GstVideoTestSrc *videotestsrc;
+  GstVideoInfo info;
+
+  videotestsrc = GST_VIDEO_TEST_SRC (bsrc);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (gst_structure_has_name (structure, "video/x-raw")) {
+    /* we can use the parsing code */
+    if (!gst_video_info_from_caps (&info, caps))
+      goto parse_failed;
+
+  } else if (gst_structure_has_name (structure, "video/x-raw-bayer")) {
+    if (!gst_video_test_src_parse_caps (caps, &info.width, &info.height,
+            &info.fps_n, &info.fps_d, &info.colorimetry))
+      goto parse_failed;
+
+    info.size =
+        gst_video_test_src_get_size (videotestsrc, info.width, info.height);
+  }
+
+  if (!(format = paintinfo_find_by_structure (structure)))
+    goto unknown_format;
+
+  /* looks ok here */
+  videotestsrc->format = format;
+  videotestsrc->info = info;
+
+  GST_DEBUG_OBJECT (videotestsrc, "size %dx%d, %d/%d fps",
+      info.width, info.height, info.fps_n, info.fps_d);
+
+  g_free (videotestsrc->tmpline);
+  g_free (videotestsrc->tmpline2);
+  g_free (videotestsrc->tmpline_u8);
+  videotestsrc->tmpline_u8 = g_malloc (info.width + 8);
+  videotestsrc->tmpline = g_malloc ((info.width + 8) * 4);
+  videotestsrc->tmpline2 = g_malloc ((info.width + 8) * 4);
+
+  return TRUE;
+
+  /* ERRORS */
+parse_failed:
+  {
+    GST_DEBUG_OBJECT (bsrc, "failed to parse caps");
+    return FALSE;
+  }
+unknown_format:
+  {
+    GST_DEBUG ("videotestsrc format not found");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query)
+{
+  gboolean res;
+  GstVideoTestSrc *src;
+
+  src = GST_VIDEO_TEST_SRC (bsrc);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CONVERT:
+    {
+      GstFormat src_fmt, dest_fmt;
+      gint64 src_val, dest_val;
+
+      gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
+      res =
+          gst_video_info_convert (&src->info, src_fmt, src_val, dest_fmt,
+          &dest_val);
+      gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
+      break;
+    }
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query);
+      break;
+  }
+  return res;
+}
+
+static void
+gst_video_test_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
+    GstClockTime * start, GstClockTime * end)
+{
+  /* for live sources, sync on the timestamp of the buffer */
+  if (gst_base_src_is_live (basesrc)) {
+    GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
+
+    if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+      /* get duration to calculate end time */
+      GstClockTime duration = GST_BUFFER_DURATION (buffer);
+
+      if (GST_CLOCK_TIME_IS_VALID (duration)) {
+        *end = timestamp + duration;
+      }
+      *start = timestamp;
+    }
+  } else {
+    *start = -1;
+    *end = -1;
+  }
+}
+
+static gboolean
+gst_video_test_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
+{
+  GstClockTime position;
+  GstVideoTestSrc *src;
+
+  src = GST_VIDEO_TEST_SRC (bsrc);
+
+  segment->time = segment->start;
+  position = segment->position;
+
+  /* now move to the position indicated */
+  if (src->info.fps_n) {
+    src->n_frames = gst_util_uint64_scale (position,
+        src->info.fps_n, src->info.fps_d * GST_SECOND);
+  } else {
+    src->n_frames = 0;
+  }
+  if (src->info.fps_n) {
+    src->running_time = gst_util_uint64_scale (src->n_frames,
+        src->info.fps_d * GST_SECOND, src->info.fps_n);
+  } else {
+    /* FIXME : Not sure what to set here */
+    src->running_time = 0;
+  }
+
+  g_assert (src->running_time <= position);
+
+  return TRUE;
+}
+
+static gboolean
+gst_video_test_src_is_seekable (GstBaseSrc * psrc)
+{
+  /* we're seekable... */
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_video_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
+{
+  GstVideoTestSrc *src;
+  GstClockTime next_time;
+  GstVideoFrame frame;
+
+  src = GST_VIDEO_TEST_SRC (psrc);
+
+  if (G_UNLIKELY (src->format == NULL))
+    goto not_negotiated;
+
+  /* 0 framerate and we are at the second frame, eos */
+  if (G_UNLIKELY (src->info.fps_n == 0 && src->n_frames == 1))
+    goto eos;
+
+  GST_LOG_OBJECT (src,
+      "creating buffer from pool for frame %d", (gint) src->n_frames);
+
+  if (!gst_video_frame_map (&frame, &src->info, buffer, GST_MAP_WRITE))
+    goto invalid_frame;
+
+  src->make_image (src, &frame);
+
+  gst_video_frame_unmap (&frame);
+
+  GST_BUFFER_TIMESTAMP (buffer) = src->timestamp_offset + src->running_time;
+  GST_BUFFER_OFFSET (buffer) = src->n_frames;
+  src->n_frames++;
+  GST_BUFFER_OFFSET_END (buffer) = src->n_frames;
+  if (src->info.fps_n) {
+    next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
+        src->info.fps_d, src->info.fps_n);
+    GST_BUFFER_DURATION (buffer) = next_time - src->running_time;
+  } else {
+    next_time = src->timestamp_offset;
+    /* NONE means forever */
+    GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
+  }
+
+  src->running_time = next_time;
+
+  return GST_FLOW_OK;
+
+not_negotiated:
+  {
+    GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL),
+        ("format wasn't negotiated before get function"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+eos:
+  {
+    GST_DEBUG_OBJECT (src, "eos: 0 framerate, frame %d", (gint) src->n_frames);
+    return GST_FLOW_UNEXPECTED;
+  }
+invalid_frame:
+  {
+    GST_DEBUG_OBJECT (src, "invalid frame");
+    return GST_FLOW_OK;
+  }
+}
+
+static gboolean
+gst_video_test_src_start (GstBaseSrc * basesrc)
+{
+  GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (basesrc);
+
+  src->running_time = 0;
+  src->n_frames = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_video_test_src_stop (GstBaseSrc * basesrc)
+{
+  GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (basesrc);
+
+  g_free (src->tmpline);
+  src->tmpline = NULL;
+  g_free (src->tmpline2);
+  src->tmpline2 = NULL;
+  g_free (src->tmpline_u8);
+  src->tmpline_u8 = NULL;
+
+  return TRUE;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_videotestsrc_orc_init ();
+
+  GST_DEBUG_CATEGORY_INIT (video_test_src_debug, "videotestsrc", 0,
+      "Video Test Source");
+
+  return gst_element_register (plugin, "videotestsrc", GST_RANK_NONE,
+      GST_TYPE_VIDEO_TEST_SRC);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "videotestsrc",
+    "Creates a test video stream",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/videotestsrc/gstvideotestsrc.h b/gst/videotestsrc/gstvideotestsrc.h
new file mode 100644
index 0000000..30d4904
--- /dev/null
+++ b/gst/videotestsrc/gstvideotestsrc.h
@@ -0,0 +1,174 @@
+/* GStreamer
+ * Copyright (C) <2002> David A. Schleef <ds@schleef.org>
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VIDEO_TEST_SRC_H__
+#define __GST_VIDEO_TEST_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_TEST_SRC \
+  (gst_video_test_src_get_type())
+#define GST_VIDEO_TEST_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_TEST_SRC,GstVideoTestSrc))
+#define GST_VIDEO_TEST_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_TEST_SRC,GstVideoTestSrcClass))
+#define GST_IS_VIDEO_TEST_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_TEST_SRC))
+#define GST_IS_VIDEO_TEST_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_TEST_SRC))
+
+/**
+ * GstVideoTestSrcPattern:
+ * @GST_VIDEO_TEST_SRC_SMPTE: A standard SMPTE test pattern
+ * @GST_VIDEO_TEST_SRC_SNOW: Random noise
+ * @GST_VIDEO_TEST_SRC_BLACK: A black image
+ * @GST_VIDEO_TEST_SRC_WHITE: A white image
+ * @GST_VIDEO_TEST_SRC_RED: A red image
+ * @GST_VIDEO_TEST_SRC_GREEN: A green image
+ * @GST_VIDEO_TEST_SRC_BLUE: A blue image
+ * @GST_VIDEO_TEST_SRC_CHECKERS1: Checkers pattern (1px)
+ * @GST_VIDEO_TEST_SRC_CHECKERS2: Checkers pattern (2px)
+ * @GST_VIDEO_TEST_SRC_CHECKERS4: Checkers pattern (4px)
+ * @GST_VIDEO_TEST_SRC_CHECKERS8: Checkers pattern (8px)
+ * @GST_VIDEO_TEST_SRC_CIRCULAR: Circular pattern
+ * @GST_VIDEO_TEST_SRC_BLINK: Alternate between black and white
+ * @GST_VIDEO_TEST_SRC_SMPTE75: SMPTE test pattern (75% color bars)
+ * @GST_VIDEO_TEST_SRC_ZONE_PLATE: Zone plate
+ * @GST_VIDEO_TEST_SRC_GAMUT: Gamut checking pattern
+ * @GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE: Chroma zone plate
+ * @GST_VIDEO_TEST_SRC_BALL: Moving ball
+ * @GST_VIDEO_TEST_SRC_SMPTE100: SMPTE test pattern (100% color bars)
+ * @GST_VIDEO_TEST_SRC_BAR: Bar with foreground color
+ *
+ * The test pattern to produce.
+ *
+ * The Gamut pattern creates a checkerboard pattern of colors at the
+ * edge of the YCbCr gamut and nearby colors that are out of gamut.
+ * The pattern is divided into 4 regions: black, white, red, and blue.
+ * After conversion to RGB, the out-of-gamut colors should be converted
+ * to the same value as their in-gamut neighbors.  If the checkerboard
+ * pattern is still visible after conversion, this indicates a faulty
+ * conversion.  Image manipulation, such as adjusting contrast or
+ * brightness, can also cause the pattern to be visible.
+ *
+ * The Zone Plate pattern is based on BBC R&D Report 1978/23, and can
+ * be used to test spatial frequency response of a system.  This
+ * pattern generator is controlled by the xoffset and yoffset parameters
+ * and also by all the parameters starting with 'k'.  The default
+ * parameters produce a grey pattern.  Try 'videotestsrc
+ * pattern=zone-plate kx2=20 ky2=20 kt=1' to produce something
+ * interesting.
+ */
+typedef enum {
+  GST_VIDEO_TEST_SRC_SMPTE,
+  GST_VIDEO_TEST_SRC_SNOW,
+  GST_VIDEO_TEST_SRC_BLACK,
+  GST_VIDEO_TEST_SRC_WHITE,
+  GST_VIDEO_TEST_SRC_RED,
+  GST_VIDEO_TEST_SRC_GREEN,
+  GST_VIDEO_TEST_SRC_BLUE,
+  GST_VIDEO_TEST_SRC_CHECKERS1,
+  GST_VIDEO_TEST_SRC_CHECKERS2,
+  GST_VIDEO_TEST_SRC_CHECKERS4,
+  GST_VIDEO_TEST_SRC_CHECKERS8,
+  GST_VIDEO_TEST_SRC_CIRCULAR,
+  GST_VIDEO_TEST_SRC_BLINK,
+  GST_VIDEO_TEST_SRC_SMPTE75,
+  GST_VIDEO_TEST_SRC_ZONE_PLATE,
+  GST_VIDEO_TEST_SRC_GAMUT,
+  GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE,
+  GST_VIDEO_TEST_SRC_SOLID,
+  GST_VIDEO_TEST_SRC_BALL,
+  GST_VIDEO_TEST_SRC_SMPTE100,
+  GST_VIDEO_TEST_SRC_BAR
+} GstVideoTestSrcPattern;
+
+typedef struct _GstVideoTestSrc GstVideoTestSrc;
+typedef struct _GstVideoTestSrcClass GstVideoTestSrcClass;
+
+/**
+ * GstVideoTestSrc:
+ *
+ * Opaque data structure.
+ */
+struct _GstVideoTestSrc {
+  GstPushSrc element;
+
+  /*< private >*/
+
+  /* type of output */
+  GstVideoTestSrcPattern pattern_type;
+
+  /* video state */
+  GstVideoInfo info;
+
+  char *format_name;
+  struct format_list_struct *format;
+
+  /* private */
+  gint64 timestamp_offset;              /* base offset */
+  GstClockTime running_time;            /* total running time */
+  gint64 n_frames;                      /* total frames sent */
+
+  /* zoneplate */
+  gint k0;
+  gint kx;
+  gint ky;
+  gint kt;
+  gint kxt;
+  gint kyt;
+  gint kxy;
+  gint kx2;
+  gint ky2;
+  gint kt2;
+  gint xoffset;
+  gint yoffset;
+
+  /* solid color */
+  guint foreground_color;
+  guint background_color;
+
+  /* moving color bars */
+  gint horizontal_offset;
+  gint horizontal_speed;
+
+  void (*make_image) (GstVideoTestSrc *v, GstVideoFrame *frame);
+
+  /* temporary AYUV/ARGB scanline */
+  guint8 *tmpline_u8;
+  guint8 *tmpline;
+  guint8 *tmpline2;
+};
+
+struct _GstVideoTestSrcClass {
+  GstPushSrcClass parent_class;
+};
+
+GType gst_video_test_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_TEST_SRC_H__ */
diff --git a/gst/videotestsrc/gstvideotestsrcorc-dist.c b/gst/videotestsrc/gstvideotestsrcorc-dist.c
new file mode 100644
index 0000000..2f6c588
--- /dev/null
+++ b/gst/videotestsrc/gstvideotestsrcorc-dist.c
@@ -0,0 +1,482 @@
+
+/* autogenerated from gstvideotestsrcorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void gst_orc_splat_u8 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_s16 (gint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n);
+
+void gst_videotestsrc_orc_init (void);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* gst_orc_splat_u8 */
+#ifdef DISABLE_ORC
+void
+gst_orc_splat_u8 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) d1;
+
+  /* 0: loadpb */
+  var32 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyb */
+    var33 = var32;
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_gst_orc_splat_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+
+  /* 0: loadpb */
+  var32 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyb */
+    var33 = var32;
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_orc_splat_u8;
+void
+gst_orc_splat_u8 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_orc_splat_u8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_orc_splat_s16 */
+#ifdef DISABLE_ORC
+void
+gst_orc_splat_s16 (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 0: loadpw */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_gst_orc_splat_s16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 0: loadpw */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_orc_splat_s16;
+void
+gst_orc_splat_s16 (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_orc_splat_s16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_orc_splat_u16 */
+#ifdef DISABLE_ORC
+void
+gst_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 0: loadpw */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_gst_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+  orc_union16 var33;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 0: loadpw */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyw */
+    var33.i = var32.i;
+    /* 2: storew */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_orc_splat_u16;
+void
+gst_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_orc_splat_u16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* gst_orc_splat_u32 */
+#ifdef DISABLE_ORC
+void
+gst_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 0: loadpl */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyl */
+    var33.i = var32.i;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_gst_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 0: loadpl */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyl */
+    var33.i = var32.i;
+    /* 2: storel */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_gst_orc_splat_u32;
+void
+gst_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_gst_orc_splat_u32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+void
+gst_videotestsrc_orc_init (void)
+{
+#ifndef DISABLE_ORC
+  {
+    /* gst_orc_splat_u8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_orc_splat_u8");
+    orc_program_set_backup_function (p, _backup_gst_orc_splat_u8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_parameter (p, 1, "p1");
+
+    orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_orc_splat_u8 = p;
+  }
+  {
+    /* gst_orc_splat_s16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_orc_splat_s16");
+    orc_program_set_backup_function (p, _backup_gst_orc_splat_s16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_parameter (p, 2, "p1");
+
+    orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_orc_splat_s16 = p;
+  }
+  {
+    /* gst_orc_splat_u16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_orc_splat_u16");
+    orc_program_set_backup_function (p, _backup_gst_orc_splat_u16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_parameter (p, 2, "p1");
+
+    orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_orc_splat_u16 = p;
+  }
+  {
+    /* gst_orc_splat_u32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "gst_orc_splat_u32");
+    orc_program_set_backup_function (p, _backup_gst_orc_splat_u32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_parameter (p, 4, "p1");
+
+    orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_gst_orc_splat_u32 = p;
+  }
+#endif
+}
diff --git a/gst/videotestsrc/gstvideotestsrcorc-dist.h b/gst/videotestsrc/gstvideotestsrcorc-dist.h
new file mode 100644
index 0000000..9c7ba64
--- /dev/null
+++ b/gst/videotestsrc/gstvideotestsrcorc-dist.h
@@ -0,0 +1,82 @@
+
+/* autogenerated from gstvideotestsrcorc.orc */
+
+#ifndef _GSTVIDEOTESTSRCORC_H_
+#define _GSTVIDEOTESTSRCORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void gst_videotestsrc_orc_init (void);
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void gst_orc_splat_u8 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_s16 (gint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void gst_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/videotestsrc/gstvideotestsrcorc.orc b/gst/videotestsrc/gstvideotestsrcorc.orc
new file mode 100644
index 0000000..a2fc80b
--- /dev/null
+++ b/gst/videotestsrc/gstvideotestsrcorc.orc
@@ -0,0 +1,31 @@
+
+.init gst_videotestsrc_orc_init
+
+.function gst_orc_splat_u8
+.dest 1 d1 guint8
+.param 1 p1
+
+copyb d1, p1
+
+
+.function gst_orc_splat_s16
+.dest 2 d1 gint8
+.param 2 p1
+
+copyw d1, p1
+
+
+.function gst_orc_splat_u16
+.dest 2 d1 guint8
+.param 2 p1
+
+copyw d1, p1
+
+
+.function gst_orc_splat_u32
+.dest 4 d1 guint8
+.param 4 p1
+
+copyl d1, p1
+
+
diff --git a/gst/videotestsrc/videotestsrc.c b/gst/videotestsrc/videotestsrc.c
new file mode 100644
index 0000000..184352a
--- /dev/null
+++ b/gst/videotestsrc/videotestsrc.c
@@ -0,0 +1,2526 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* non-GST-specific stuff */
+
+#include "gstvideotestsrc.h"
+#include "videotestsrc.h"
+#include "gstvideotestsrcorc.h"
+
+#include <gst/math-compat.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#define TO_16(x) (((x)<<8) | (x))
+#define TO_10(x) (((x)<<2) | ((x)>>6))
+
+static void paint_tmpline_ARGB (paintinfo * p, int x, int w);
+static void paint_tmpline_AYUV (paintinfo * p, int x, int w);
+
+static unsigned char
+random_char (void)
+{
+  static unsigned int state;
+
+  state *= 1103515245;
+  state += 12345;
+  return (state >> 16) & 0xff;
+}
+
+enum
+{
+  COLOR_WHITE = 0,
+  COLOR_YELLOW,
+  COLOR_CYAN,
+  COLOR_GREEN,
+  COLOR_MAGENTA,
+  COLOR_RED,
+  COLOR_BLUE,
+  COLOR_BLACK,
+  COLOR_NEG_I,
+  COLOR_POS_Q,
+  COLOR_SUPER_BLACK,
+  COLOR_DARK_GREY
+};
+
+static const struct vts_color_struct vts_colors_bt709_ycbcr_100[] = {
+  {235, 128, 128, 255, 255, 255, 255, (235 << 8)},
+  {219, 16, 138, 255, 255, 255, 0, (219 << 8)},
+  {188, 154, 16, 255, 0, 255, 255, (188 < 8)},
+  {173, 42, 26, 255, 0, 255, 0, (173 << 8)},
+  {78, 214, 230, 255, 255, 0, 255, (78 << 8)},
+  {63, 102, 240, 255, 255, 0, 0, (64 << 8)},
+  {32, 240, 118, 255, 0, 0, 255, (32 << 8)},
+  {16, 128, 128, 255, 0, 0, 0, (16 << 8)},
+  {16, 198, 21, 255, 0, 0, 128, (16 << 8)},     /* -I ? */
+  {16, 235, 198, 255, 0, 128, 255, (16 << 8)},  /* +Q ? */
+  {0, 128, 128, 255, 0, 0, 0, 0},
+  {32, 128, 128, 255, 19, 19, 19, (32 << 8)},
+};
+
+static const struct vts_color_struct vts_colors_bt709_ycbcr_75[] = {
+  {180, 128, 128, 255, 191, 191, 191, (180 << 8)},
+  {168, 44, 136, 255, 191, 191, 0, (168 << 8)},
+  {145, 147, 44, 255, 0, 191, 191, (145 << 8)},
+  {133, 63, 52, 255, 0, 191, 0, (133 << 8)},
+  {63, 193, 204, 255, 191, 0, 191, (63 << 8)},
+  {51, 109, 212, 255, 191, 0, 0, (51 << 8)},
+  {28, 212, 120, 255, 0, 0, 191, (28 << 8)},
+  {16, 128, 128, 255, 0, 0, 0, (16 << 8)},
+  {16, 198, 21, 255, 0, 0, 128, (16 << 8)},     /* -I ? */
+  {16, 235, 198, 255, 0, 128, 255, (16 << 8)},  /* +Q ? */
+  {0, 128, 128, 255, 0, 0, 0, 0},
+  {32, 128, 128, 255, 19, 19, 19, (32 << 8)},
+};
+
+static const struct vts_color_struct vts_colors_bt601_ycbcr_100[] = {
+  {235, 128, 128, 255, 255, 255, 255, (235 << 8)},
+  {210, 16, 146, 255, 255, 255, 0, (219 << 8)},
+  {170, 166, 16, 255, 0, 255, 255, (188 < 8)},
+  {145, 54, 34, 255, 0, 255, 0, (173 << 8)},
+  {106, 202, 222, 255, 255, 0, 255, (78 << 8)},
+  {81, 90, 240, 255, 255, 0, 0, (64 << 8)},
+  {41, 240, 110, 255, 0, 0, 255, (32 << 8)},
+  {16, 128, 128, 255, 0, 0, 0, (16 << 8)},
+  {16, 198, 21, 255, 0, 0, 128, (16 << 8)},     /* -I ? */
+  {16, 235, 198, 255, 0, 128, 255, (16 << 8)},  /* +Q ? */
+  {-0, 128, 128, 255, 0, 0, 0, 0},
+  {32, 128, 128, 255, 19, 19, 19, (32 << 8)},
+};
+
+static const struct vts_color_struct vts_colors_bt601_ycbcr_75[] = {
+  {180, 128, 128, 255, 191, 191, 191, (180 << 8)},
+  {162, 44, 142, 255, 191, 191, 0, (168 << 8)},
+  {131, 156, 44, 255, 0, 191, 191, (145 << 8)},
+  {112, 72, 58, 255, 0, 191, 0, (133 << 8)},
+  {84, 184, 198, 255, 191, 0, 191, (63 << 8)},
+  {65, 100, 212, 255, 191, 0, 0, (51 << 8)},
+  {35, 212, 114, 255, 0, 0, 191, (28 << 8)},
+  {16, 128, 128, 255, 0, 0, 0, (16 << 8)},
+  {16, 198, 21, 255, 0, 0, 128, (16 << 8)},     /* -I ? */
+  {16, 235, 198, 255, 0, 128, 255, (16 << 8)},  /* +Q ? */
+  {-0, 128, 128, 255, 0, 0, 0, 0},
+  {32, 128, 128, 255, 19, 19, 19, (32 << 8)},
+};
+
+
+static void paint_setup_I420 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_YV12 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame);
+#ifdef disabled
+static void paint_setup_IYU2 (paintinfo * p, GstVideoFrame * frame);
+#endif
+static void paint_setup_Y41B (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_Y42B (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_Y444 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_Y800 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_AYUV (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_v308 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_NV21 (paintinfo * p, GstVideoFrame * frame);
+#ifdef disabled
+static void paint_setup_v410 (paintinfo * p, GstVideoFrame * frame);
+#endif
+static void paint_setup_v216 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_v210 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_AY64 (paintinfo * p, GstVideoFrame * frame);
+
+static void paint_setup_YUV9 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_YVU9 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_ARGB8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_ABGR8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_RGBA8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_BGRA8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_RGB565 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_ARGB64 (paintinfo * p, GstVideoFrame * frame);
+
+static void paint_setup_bayer_bggr (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_bayer_rggb (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_bayer_gbrg (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_bayer_grbg (paintinfo * p, GstVideoFrame * frame);
+
+static void convert_hline_I420 (paintinfo * p, int y);
+static void convert_hline_NV12 (paintinfo * p, int y);
+static void convert_hline_NV21 (paintinfo * p, int y);
+static void convert_hline_YUY2 (paintinfo * p, int y);
+#ifdef disabled
+static void convert_hline_IYU2 (paintinfo * p, int y);
+#endif
+static void convert_hline_Y41B (paintinfo * p, int y);
+static void convert_hline_Y42B (paintinfo * p, int y);
+static void convert_hline_Y444 (paintinfo * p, int y);
+static void convert_hline_Y800 (paintinfo * p, int y);
+static void convert_hline_v308 (paintinfo * p, int y);
+static void convert_hline_AYUV (paintinfo * p, int y);
+#ifdef disabled
+static void convert_hline_v410 (paintinfo * p, int y);
+#endif
+static void convert_hline_v216 (paintinfo * p, int y);
+static void convert_hline_v210 (paintinfo * p, int y);
+static void convert_hline_UYVP (paintinfo * p, int y);
+static void convert_hline_AY64 (paintinfo * p, int y);
+
+static void convert_hline_YUV9 (paintinfo * p, int y);
+static void convert_hline_astr4 (paintinfo * p, int y);
+static void convert_hline_astr8 (paintinfo * p, int y);
+static void convert_hline_str4 (paintinfo * p, int y);
+static void convert_hline_str3 (paintinfo * p, int y);
+static void convert_hline_RGB565 (paintinfo * p, int y);
+static void convert_hline_xRGB1555 (paintinfo * p, int y);
+
+static void convert_hline_bayer (paintinfo * p, int y);
+
+static void paint_setup_GRAY8 (paintinfo * p, GstVideoFrame * frame);
+static void paint_setup_GRAY16 (paintinfo * p, GstVideoFrame * frame);
+static void convert_hline_GRAY8 (paintinfo * p, int y);
+static void convert_hline_GRAY16 (paintinfo * p, int y);
+
+struct format_list_struct format_list[] = {
+/* packed */
+  {VTS_YUV, "YUY2", "YUY2", 16, paint_setup_YUY2, convert_hline_YUY2},
+  {VTS_YUV, "UYVY", "UYVY", 16, paint_setup_UYVY, convert_hline_YUY2},
+#ifdef disabled
+  {VTS_YUV, "Y422", "Y422", 16, paint_setup_UYVY, convert_hline_YUY2},
+  {VTS_YUV, "UYNV", "UYNV", 16, paint_setup_UYVY, convert_hline_YUY2},  /* FIXME: UYNV? */
+#endif
+  {VTS_YUV, "YVYU", "YVYU", 16, paint_setup_YVYU, convert_hline_YUY2},
+  {VTS_YUV, "v308", "v308", 24, paint_setup_v308, convert_hline_v308},
+  {VTS_YUV, "AYUV", "AYUV", 32, paint_setup_AYUV, convert_hline_AYUV},
+#ifdef disabled
+  {VTS_YUV, "v410", "v410", 32, paint_setup_v410, convert_hline_v410},
+#endif
+  {VTS_YUV, "v210", "v210", 21, paint_setup_v210, convert_hline_v210},
+  {VTS_YUV, "v216", "v216", 32, paint_setup_v216, convert_hline_v216},
+  {VTS_YUV, "UYVP", "UYVP", 20, paint_setup_UYVP, convert_hline_UYVP},
+  {VTS_YUV, "AY64", "AY64", 64, paint_setup_AY64, convert_hline_AY64},
+
+#ifdef disabled
+  {VTS_YUV, "IYU2", "IYU2", 24, paint_setup_IYU2, convert_hline_IYU2},
+#endif
+
+/* planar */
+  /* YVU9 */
+  {VTS_YUV, "YVU9", "YVU9", 9, paint_setup_YVU9, convert_hline_YUV9},
+  /* YUV9 */
+  {VTS_YUV, "YUV9", "YUV9", 9, paint_setup_YUV9, convert_hline_YUV9},
+  /* IF09 */
+  /* YV12 */
+  {VTS_YUV, "YV12", "YV12", 12, paint_setup_YV12, convert_hline_I420},
+  /* I420 */
+  {VTS_YUV, "I420", "I420", 12, paint_setup_I420, convert_hline_I420},
+  /* NV12 */
+  {VTS_YUV, "NV12", "NV12", 12, paint_setup_NV12, convert_hline_NV12},
+  /* NV21 */
+  {VTS_YUV, "NV21", "NV21", 12, paint_setup_NV21, convert_hline_NV21},
+  /* CLPL */
+  /* Y41B */
+  {VTS_YUV, "Y41B", "Y41B", 12, paint_setup_Y41B, convert_hline_Y41B},
+  /* Y42B */
+  {VTS_YUV, "Y42B", "Y42B", 16, paint_setup_Y42B, convert_hline_Y42B},
+  /* Y444 */
+  {VTS_YUV, "Y444", "Y444", 24, paint_setup_Y444, convert_hline_Y444},
+  /* Y800 grayscale */
+  {VTS_YUV, "Y800", "Y800", 8, paint_setup_Y800, convert_hline_Y800},
+
+  /* Not exactly YUV but it's the same as above */
+  {VTS_GRAY, "GRAY8", "GRAY8", 8, paint_setup_GRAY8, convert_hline_GRAY8},
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  {VTS_GRAY, "GRAY16_LE", "GRAY16", 16, paint_setup_GRAY16,
+      convert_hline_GRAY16},
+#else
+  {VTS_GRAY, "GRAY16_BE", "GRAY16", 16, paint_setup_GRAY16,
+      convert_hline_GRAY16},
+#endif
+
+  {VTS_RGB, "xRGB", "xRGB8888", 32, paint_setup_xRGB8888, convert_hline_str4,
+        24,
+      0x00ff0000, 0x0000ff00, 0x000000ff},
+  {VTS_RGB, "xBGR", "xBGR8888", 32, paint_setup_xBGR8888, convert_hline_str4,
+        24,
+      0x000000ff, 0x0000ff00, 0x00ff0000},
+  {VTS_RGB, "RGBx", "RGBx8888", 32, paint_setup_RGBx8888, convert_hline_str4,
+        24,
+      0xff000000, 0x00ff0000, 0x0000ff00},
+  {VTS_RGB, "BGRx", "BGRx8888", 32, paint_setup_BGRx8888, convert_hline_str4,
+        24,
+      0x0000ff00, 0x00ff0000, 0xff000000},
+  {VTS_RGB, "ARGB", "ARGB8888", 32, paint_setup_ARGB8888, convert_hline_astr4,
+        32,
+      0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000},
+  {VTS_RGB, "ABGR", "ABGR8888", 32, paint_setup_ABGR8888, convert_hline_astr4,
+        32,
+      0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000},
+  {VTS_RGB, "RGBA", "RGBA8888", 32, paint_setup_RGBA8888, convert_hline_astr4,
+        32,
+      0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff},
+  {VTS_RGB, "BGRA", "BGRA8888", 32, paint_setup_BGRA8888, convert_hline_astr4,
+        32,
+      0x0000ff00, 0x00ff0000, 0xff000000, 0x000000ff},
+  {VTS_RGB, "RGB", "RGB888", 24, paint_setup_RGB888, convert_hline_str3, 24,
+      0x00ff0000, 0x0000ff00, 0x000000ff},
+  {VTS_RGB, "BGR", "BGR888", 24, paint_setup_BGR888, convert_hline_str3, 24,
+      0x000000ff, 0x0000ff00, 0x00ff0000},
+  {VTS_RGB, "RGB16", "RGB565", 16, paint_setup_RGB565, convert_hline_RGB565, 16,
+      0x0000f800, 0x000007e0, 0x0000001f},
+  {VTS_RGB, "RGB15", "xRGB1555", 16, paint_setup_xRGB1555,
+        convert_hline_xRGB1555,
+        15,
+      0x00007c00, 0x000003e0, 0x0000001f},
+  {VTS_RGB, "ARGB64", "ARGB8888", 64, paint_setup_ARGB64, convert_hline_astr8,
+        64,
+      0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000},
+
+  {VTS_BAYER, "bggr", "Bayer", 8, paint_setup_bayer_bggr, convert_hline_bayer},
+  {VTS_BAYER, "rggb", "Bayer", 8, paint_setup_bayer_rggb, convert_hline_bayer},
+  {VTS_BAYER, "grbg", "Bayer", 8, paint_setup_bayer_grbg, convert_hline_bayer},
+  {VTS_BAYER, "gbrg", "Bayer", 8, paint_setup_bayer_gbrg, convert_hline_bayer}
+};
+
+int n_formats = G_N_ELEMENTS (format_list);
+
+struct format_list_struct *
+paintinfo_find_by_structure (const GstStructure * structure)
+{
+  int i;
+  const char *media_type = gst_structure_get_name (structure);
+
+  g_return_val_if_fail (structure, NULL);
+
+  if (strcmp (media_type, "video/x-raw") == 0) {
+    const gchar *format;
+
+    format = gst_structure_get_string (structure, "format");
+    if (!format) {
+      GST_WARNING ("incomplete caps structure: %" GST_PTR_FORMAT, structure);
+      return NULL;
+    }
+
+    for (i = 0; i < n_formats; i++) {
+      if (g_str_equal (format, format_list[i].format)) {
+        return format_list + i;
+      }
+    }
+    return NULL;
+  } else if (strcmp (media_type, "video/x-raw-bayer") == 0) {
+    const gchar *format;
+
+    format = gst_structure_get_string (structure, "format");
+    if (!format) {
+      GST_WARNING ("incomplete caps structure: %" GST_PTR_FORMAT, structure);
+      return NULL;
+    }
+
+    for (i = 0; i < n_formats; i++) {
+      if (format_list[i].type == VTS_BAYER &&
+          g_str_equal (format, format_list[i].format)) {
+        return format_list + i;
+      }
+    }
+    return NULL;
+  }
+
+  g_critical ("format not found for media type %s", media_type);
+
+  return NULL;
+}
+
+struct format_list_struct *
+paintrect_find_format (const gchar * find_format)
+{
+  int i;
+
+  for (i = 0; i < n_formats; i++) {
+    if (g_str_equal (find_format, format_list[i].format)) {
+      return format_list + i;
+    }
+  }
+  return NULL;
+}
+
+struct format_list_struct *
+paintrect_find_name (const char *name)
+{
+  int i;
+
+  for (i = 0; i < n_formats; i++) {
+    if (g_str_equal (name, format_list[i].name)) {
+      return format_list + i;
+    }
+  }
+  return NULL;
+}
+
+
+GstStructure *
+paint_get_structure (struct format_list_struct * format)
+{
+  GstStructure *structure = NULL;
+
+  g_return_val_if_fail (format, NULL);
+
+  switch (format->type) {
+    case VTS_RGB:
+    case VTS_GRAY:
+      structure = gst_structure_new ("video/x-raw",
+          "format", G_TYPE_STRING, format->format, NULL);
+      break;
+    case VTS_YUV:
+    {
+      GValue value_list = { 0 };
+      GValue value = { 0 };
+
+      structure = gst_structure_new ("video/x-raw",
+          "format", G_TYPE_STRING, format->format, NULL);
+
+      if (strcmp (format->format, "Y800") != 0) {
+        g_value_init (&value_list, GST_TYPE_LIST);
+
+        g_value_init (&value, G_TYPE_STRING);
+        g_value_set_static_string (&value, "bt601");
+        gst_value_list_append_value (&value_list, &value);
+
+        g_value_set_static_string (&value, "bt709");
+        gst_value_list_append_value (&value_list, &value);
+
+        gst_structure_set_value (structure, "colorimetry", &value_list);
+        g_value_reset (&value_list);
+
+        if (strcmp (format->format, "AYUV") &&
+            strcmp (format->format, "v308") &&
+            strcmp (format->format, "v410") &&
+            strcmp (format->format, "Y444")) {
+          g_value_set_static_string (&value, "mpeg2");
+          gst_value_list_append_value (&value_list, &value);
+
+          g_value_set_static_string (&value, "jpeg");
+          gst_value_list_append_value (&value_list, &value);
+
+          gst_structure_set_value (structure, "chroma-site", &value_list);
+        }
+        g_value_unset (&value_list);
+      }
+      break;
+    }
+    case VTS_BAYER:
+      structure = gst_structure_new ("video/x-raw-bayer",
+          "format", G_TYPE_STRING, format->format, NULL);
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+  return structure;
+}
+
+/* returns the size in bytes for one video frame of the given dimensions
+ * given the format in GstVideoTestSrc */
+int
+gst_video_test_src_get_size (GstVideoTestSrc * v, int w, int h)
+{
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+
+  p->width = w;
+  p->height = h;
+  format = v->format;
+  if (format == NULL)
+    return 0;
+
+  format->paint_setup (p, NULL);
+
+  return p->size;
+}
+
+#define SCALEBITS 10
+#define ONE_HALF  (1 << (SCALEBITS - 1))
+#define FIX(x)    ((int) ((x) * (1<<SCALEBITS) + 0.5))
+
+#define RGB_TO_Y(r, g, b) \
+((FIX(0.29900) * (r) + FIX(0.58700) * (g) + \
+  FIX(0.11400) * (b) + ONE_HALF) >> SCALEBITS)
+
+#define RGB_TO_U(r1, g1, b1, shift)\
+(((- FIX(0.16874) * r1 - FIX(0.33126) * g1 +         \
+     FIX(0.50000) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+#define RGB_TO_V(r1, g1, b1, shift)\
+(((FIX(0.50000) * r1 - FIX(0.41869) * g1 -           \
+   FIX(0.08131) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+#define RGB_TO_Y_CCIR(r, g, b) \
+((FIX(0.29900*219.0/255.0) * (r) + FIX(0.58700*219.0/255.0) * (g) + \
+  FIX(0.11400*219.0/255.0) * (b) + (ONE_HALF + (16 << SCALEBITS))) >> SCALEBITS)
+
+#define RGB_TO_U_CCIR(r1, g1, b1, shift)\
+(((- FIX(0.16874*224.0/255.0) * r1 - FIX(0.33126*224.0/255.0) * g1 +         \
+     FIX(0.50000*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+#define RGB_TO_V_CCIR(r1, g1, b1, shift)\
+(((FIX(0.50000*224.0/255.0) * r1 - FIX(0.41869*224.0/255.0) * g1 -           \
+   FIX(0.08131*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+#define RGB_TO_Y_CCIR_709(r, g, b) \
+((FIX(0.212600*219.0/255.0) * (r) + FIX(0.715200*219.0/255.0) * (g) + \
+  FIX(0.072200*219.0/255.0) * (b) + (ONE_HALF + (16 << SCALEBITS))) >> SCALEBITS)
+
+#define RGB_TO_U_CCIR_709(r1, g1, b1, shift)\
+(((- FIX(0.114572*224.0/255.0) * r1 - FIX(0.385427*224.0/255.0) * g1 +         \
+     FIX(0.50000*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+#define RGB_TO_V_CCIR_709(r1, g1, b1, shift)\
+(((FIX(0.50000*224.0/255.0) * r1 - FIX(0.454153*224.0/255.0) * g1 -           \
+   FIX(0.045847*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
+
+static void
+videotestsrc_setup_paintinfo (GstVideoTestSrc * v, paintinfo * p, int w, int h)
+{
+  int a, r, g, b;
+
+  if (v->info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT601) {
+    p->colors = vts_colors_bt601_ycbcr_100;
+  } else {
+    p->colors = vts_colors_bt709_ycbcr_100;
+  }
+  p->width = w;
+  p->height = h;
+
+  p->convert_tmpline = v->format->convert_hline;
+  if (v->format->type == VTS_RGB || v->format->type == VTS_BAYER) {
+    p->paint_tmpline = paint_tmpline_ARGB;
+  } else {
+    p->paint_tmpline = paint_tmpline_AYUV;
+  }
+  p->tmpline = v->tmpline;
+  p->tmpline2 = v->tmpline2;
+  p->tmpline_u8 = v->tmpline_u8;
+  p->x_offset = (v->horizontal_speed * v->n_frames) % p->width;
+  if (p->x_offset < 0)
+    p->x_offset += p->width;
+
+  a = (v->foreground_color >> 24) & 0xff;
+  r = (v->foreground_color >> 16) & 0xff;
+  g = (v->foreground_color >> 8) & 0xff;
+  b = (v->foreground_color >> 0) & 0xff;
+  p->foreground_color.A = a;
+  p->foreground_color.R = r;
+  p->foreground_color.G = g;
+  p->foreground_color.B = b;
+  if (v->info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT601) {
+    p->foreground_color.Y = RGB_TO_Y_CCIR (r, g, b);
+    p->foreground_color.U = RGB_TO_U_CCIR (r, g, b, 0);
+    p->foreground_color.V = RGB_TO_V_CCIR (r, g, b, 0);
+  } else {
+    p->foreground_color.Y = RGB_TO_Y_CCIR_709 (r, g, b);
+    p->foreground_color.U = RGB_TO_U_CCIR_709 (r, g, b, 0);
+    p->foreground_color.V = RGB_TO_V_CCIR_709 (r, g, b, 0);
+  }
+  p->foreground_color.gray = RGB_TO_Y (r, g, b);
+
+  a = (v->background_color >> 24) & 0xff;
+  r = (v->background_color >> 16) & 0xff;
+  g = (v->background_color >> 8) & 0xff;
+  b = (v->background_color >> 0) & 0xff;
+  p->background_color.A = a;
+  p->background_color.R = r;
+  p->background_color.G = g;
+  p->background_color.B = b;
+  if (v->info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT601) {
+    p->background_color.Y = RGB_TO_Y_CCIR (r, g, b);
+    p->background_color.U = RGB_TO_U_CCIR (r, g, b, 0);
+    p->background_color.V = RGB_TO_V_CCIR (r, g, b, 0);
+  } else {
+    p->background_color.Y = RGB_TO_Y_CCIR_709 (r, g, b);
+    p->background_color.U = RGB_TO_U_CCIR_709 (r, g, b, 0);
+    p->background_color.V = RGB_TO_V_CCIR_709 (r, g, b, 0);
+  }
+  p->background_color.gray = RGB_TO_Y (r, g, b);
+
+}
+
+static void
+videotestsrc_convert_tmpline (paintinfo * p, int j)
+{
+  int x = p->x_offset;
+  int i;
+
+  if (x != 0) {
+    memcpy (p->tmpline2, p->tmpline, p->width * 4);
+    memcpy (p->tmpline, p->tmpline2 + x * 4, (p->width - x) * 4);
+    memcpy (p->tmpline + (p->width - x) * 4, p->tmpline2, x * 4);
+  }
+
+  for (i = p->width; i < p->width + 5; i++) {
+    p->tmpline[4 * i + 0] = p->tmpline[4 * (p->width - 1) + 0];
+    p->tmpline[4 * i + 1] = p->tmpline[4 * (p->width - 1) + 1];
+    p->tmpline[4 * i + 2] = p->tmpline[4 * (p->width - 1) + 2];
+    p->tmpline[4 * i + 3] = p->tmpline[4 * (p->width - 1) + 3];
+  }
+
+  p->convert_tmpline (p, j);
+}
+
+#define BLEND1(a,b,x) ((a)*(x) + (b)*(255-(x)))
+#define DIV255(x) (((x) + (((x)+128)>>8) + 128)>>8)
+#define BLEND(a,b,x) DIV255(BLEND1(a,b,x))
+
+#ifdef unused
+static void
+videotestsrc_blend_color (struct vts_color_struct *dest,
+    struct vts_color_struct *a, struct vts_color_struct *b, int x)
+{
+  dest->Y = BLEND (a->Y, b->Y, x);
+  dest->U = BLEND (a->U, b->U, x);
+  dest->V = BLEND (a->V, b->V, x);
+  dest->R = BLEND (a->R, b->R, x);
+  dest->G = BLEND (a->G, b->G, x);
+  dest->B = BLEND (a->B, b->B, x);
+  dest->gray = BLEND (a->gray, b->gray, x);
+
+}
+#endif
+
+static void
+videotestsrc_blend_line (GstVideoTestSrc * v, guint8 * dest, guint8 * src,
+    struct vts_color_struct *a, struct vts_color_struct *b, int n)
+{
+  int i;
+  if (v->format->type == VTS_RGB || v->format->type == VTS_BAYER) {
+    for (i = 0; i < n; i++) {
+      dest[i * 4 + 0] = BLEND (a->A, b->A, src[i]);
+      dest[i * 4 + 1] = BLEND (a->R, b->R, src[i]);
+      dest[i * 4 + 2] = BLEND (a->G, b->G, src[i]);
+      dest[i * 4 + 3] = BLEND (a->B, b->B, src[i]);
+    }
+  } else {
+    for (i = 0; i < n; i++) {
+      dest[i * 4 + 0] = BLEND (a->A, b->A, src[i]);
+      dest[i * 4 + 1] = BLEND (a->Y, b->Y, src[i]);
+      dest[i * 4 + 2] = BLEND (a->U, b->U, src[i]);
+      dest[i * 4 + 3] = BLEND (a->V, b->V, src[i]);
+    }
+  }
+#undef BLEND
+}
+
+void
+gst_video_test_src_smpte (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int y1, y2;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, frame->info.width, frame->info.height);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  y1 = 2 * h / 3;
+  y2 = h * 0.75;
+
+  /* color bars */
+  for (j = 0; j < y1; j++) {
+    for (i = 0; i < 7; i++) {
+      int x1 = i * w / 7;
+      int x2 = (i + 1) * w / 7;
+
+      p->color = p->colors + i;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+    videotestsrc_convert_tmpline (p, j);
+  }
+
+  /* inverse blue bars */
+  for (j = y1; j < y2; j++) {
+    for (i = 0; i < 7; i++) {
+      int x1 = i * w / 7;
+      int x2 = (i + 1) * w / 7;
+      int k;
+
+      if (i & 1) {
+        k = 7;
+      } else {
+        k = 6 - i;
+      }
+      p->color = p->colors + k;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+    videotestsrc_convert_tmpline (p, j);
+  }
+
+  for (j = y2; j < h; j++) {
+    /* -I, white, Q regions */
+    for (i = 0; i < 3; i++) {
+      int x1 = i * w / 6;
+      int x2 = (i + 1) * w / 6;
+      int k;
+
+      if (i == 0) {
+        k = 8;
+      } else if (i == 1) {
+        k = 0;
+      } else
+        k = 9;
+
+      p->color = p->colors + k;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+
+    /* superblack, black, dark grey */
+    for (i = 0; i < 3; i++) {
+      int x1 = w / 2 + i * w / 12;
+      int x2 = w / 2 + (i + 1) * w / 12;
+      int k;
+
+      if (i == 0) {
+        k = COLOR_SUPER_BLACK;
+      } else if (i == 1) {
+        k = COLOR_BLACK;
+      } else
+        k = COLOR_DARK_GREY;
+
+      p->color = p->colors + k;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+
+    {
+      int x1 = w * 3 / 4;
+      struct vts_color_struct color;
+
+      color = p->colors[COLOR_BLACK];
+      p->color = &color;
+
+      for (i = x1; i < w; i++) {
+        int y = random_char ();
+        p->tmpline_u8[i] = y;
+      }
+      videotestsrc_blend_line (v, p->tmpline + x1 * 4, p->tmpline_u8 + x1,
+          &p->foreground_color, &p->background_color, w - x1);
+
+    }
+    videotestsrc_convert_tmpline (p, j);
+
+  }
+}
+
+void
+gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  if (v->info.colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_BT601) {
+    p->colors = vts_colors_bt601_ycbcr_75;
+  } else {
+    p->colors = vts_colors_bt709_ycbcr_75;
+  }
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  /* color bars */
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < 7; i++) {
+      int x1 = i * w / 7;
+      int x2 = (i + 1) * w / 7;
+
+      p->color = p->colors + i;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+void
+gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  /* color bars */
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < 7; i++) {
+      int x1 = i * w / 7;
+      int x2 = (i + 1) * w / 7;
+
+      p->color = p->colors + i;
+      p->paint_tmpline (p, x1, (x2 - x1));
+    }
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+void
+gst_video_test_src_bar (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (j = 0; j < h; j++) {
+    /* use fixed size for now */
+    int x2 = w / 7;
+
+    p->color = &p->foreground_color;
+    p->paint_tmpline (p, 0, x2);
+    p->color = &p->background_color;
+    p->paint_tmpline (p, x2, (w - x2));
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+void
+gst_video_test_src_snow (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  struct vts_color_struct color;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  color = p->colors[COLOR_BLACK];
+  p->color = &color;
+
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < w; i++) {
+      int y = random_char ();
+      p->tmpline_u8[i] = y;
+    }
+    videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
+        &p->foreground_color, &p->background_color, p->width);
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+static void
+gst_video_test_src_unicolor (GstVideoTestSrc * v, GstVideoFrame * frame,
+    int color_index)
+{
+  int i;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  p->color = p->colors + color_index;
+  if (color_index == COLOR_BLACK) {
+    p->color = &p->background_color;
+  }
+  if (color_index == COLOR_WHITE) {
+    p->color = &p->foreground_color;
+  }
+
+  for (i = 0; i < h; i++) {
+    p->paint_tmpline (p, 0, w);
+    videotestsrc_convert_tmpline (p, i);
+  }
+}
+
+void
+gst_video_test_src_black (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  gst_video_test_src_unicolor (v, frame, COLOR_BLACK);
+}
+
+void
+gst_video_test_src_white (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  gst_video_test_src_unicolor (v, frame, COLOR_WHITE);
+}
+
+void
+gst_video_test_src_red (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  gst_video_test_src_unicolor (v, frame, COLOR_RED);
+}
+
+void
+gst_video_test_src_green (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  gst_video_test_src_unicolor (v, frame, COLOR_GREEN);
+}
+
+void
+gst_video_test_src_blue (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  gst_video_test_src_unicolor (v, frame, COLOR_BLUE);
+}
+
+void
+gst_video_test_src_blink (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  if (v->n_frames & 1) {
+    p->color = &p->foreground_color;
+  } else {
+    p->color = &p->background_color;
+  }
+
+  for (i = 0; i < h; i++) {
+    p->paint_tmpline (p, 0, w);
+    videotestsrc_convert_tmpline (p, i);
+  }
+}
+
+void
+gst_video_test_src_solid (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  p->color = &p->foreground_color;
+
+  for (i = 0; i < h; i++) {
+    p->paint_tmpline (p, 0, w);
+    videotestsrc_convert_tmpline (p, i);
+  }
+}
+
+void
+gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int x, y;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (y = 0; y < h; y++) {
+    for (x = 0; x < w; x++) {
+      if ((x ^ y) & 1) {
+        p->color = p->colors + COLOR_GREEN;
+      } else {
+        p->color = p->colors + COLOR_RED;
+      }
+      p->paint_tmpline (p, x, 1);
+    }
+    videotestsrc_convert_tmpline (p, y);
+  }
+}
+
+void
+gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int x, y;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (y = 0; y < h; y++) {
+    for (x = 0; x < w; x += 2) {
+      guint len = MIN (2, w - x);
+
+      if ((x ^ y) & 2) {
+        p->color = p->colors + COLOR_GREEN;
+      } else {
+        p->color = p->colors + COLOR_RED;
+      }
+      p->paint_tmpline (p, x, len);
+    }
+    videotestsrc_convert_tmpline (p, y);
+  }
+}
+
+void
+gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int x, y;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (y = 0; y < h; y++) {
+    for (x = 0; x < w; x += 4) {
+      guint len = MIN (4, w - x);
+
+      if ((x ^ y) & 4) {
+        p->color = p->colors + COLOR_GREEN;
+      } else {
+        p->color = p->colors + COLOR_RED;
+      }
+      p->paint_tmpline (p, x, len);
+    }
+    videotestsrc_convert_tmpline (p, y);
+  }
+}
+
+void
+gst_video_test_src_checkers8 (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int x, y;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (y = 0; y < h; y++) {
+    for (x = 0; x < w; x += 8) {
+      guint len = MIN (8, w - x);
+
+      if ((x ^ y) & 8) {
+        p->color = p->colors + COLOR_GREEN;
+      } else {
+        p->color = p->colors + COLOR_RED;
+      }
+      p->paint_tmpline (p, x, len);
+    }
+    videotestsrc_convert_tmpline (p, y);
+  }
+}
+
+static const guint8 sine_table[256] = {
+  128, 131, 134, 137, 140, 143, 146, 149,
+  152, 156, 159, 162, 165, 168, 171, 174,
+  176, 179, 182, 185, 188, 191, 193, 196,
+  199, 201, 204, 206, 209, 211, 213, 216,
+  218, 220, 222, 224, 226, 228, 230, 232,
+  234, 236, 237, 239, 240, 242, 243, 245,
+  246, 247, 248, 249, 250, 251, 252, 252,
+  253, 254, 254, 255, 255, 255, 255, 255,
+  255, 255, 255, 255, 255, 255, 254, 254,
+  253, 252, 252, 251, 250, 249, 248, 247,
+  246, 245, 243, 242, 240, 239, 237, 236,
+  234, 232, 230, 228, 226, 224, 222, 220,
+  218, 216, 213, 211, 209, 206, 204, 201,
+  199, 196, 193, 191, 188, 185, 182, 179,
+  176, 174, 171, 168, 165, 162, 159, 156,
+  152, 149, 146, 143, 140, 137, 134, 131,
+  128, 124, 121, 118, 115, 112, 109, 106,
+  103, 99, 96, 93, 90, 87, 84, 81,
+  79, 76, 73, 70, 67, 64, 62, 59,
+  56, 54, 51, 49, 46, 44, 42, 39,
+  37, 35, 33, 31, 29, 27, 25, 23,
+  21, 19, 18, 16, 15, 13, 12, 10,
+  9, 8, 7, 6, 5, 4, 3, 3,
+  2, 1, 1, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 1, 1,
+  2, 3, 3, 4, 5, 6, 7, 8,
+  9, 10, 12, 13, 15, 16, 18, 19,
+  21, 23, 25, 27, 29, 31, 33, 35,
+  37, 39, 42, 44, 46, 49, 51, 54,
+  56, 59, 62, 64, 67, 70, 73, 76,
+  79, 81, 84, 87, 90, 93, 96, 99,
+  103, 106, 109, 112, 115, 118, 121, 124
+};
+
+
+void
+gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  struct vts_color_struct color;
+  int t = v->n_frames;
+  int w = frame->info.width, h = frame->info.height;
+  int xreset = -(w / 2) - v->xoffset;   /* starting values for x^2 and y^2, centering the ellipse */
+  int yreset = -(h / 2) - v->yoffset;
+
+  int x, y;
+  int accum_kx;
+  int accum_kxt;
+  int accum_ky;
+  int accum_kyt;
+  int accum_kxy;
+  int kt;
+  int kt2;
+  int ky2;
+  int delta_kxt = v->kxt * t;
+  int delta_kxy;
+  int scale_kxy = 0xffff / (w / 2);
+  int scale_kx2 = 0xffff / w;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  color = p->colors[COLOR_BLACK];
+  p->color = &color;
+
+  /* Zoneplate equation:
+   *
+   * phase = k0 + kx*x + ky*y + kt*t
+   *       + kxt*x*t + kyt*y*t + kxy*x*y
+   *       + kx2*x*x + ky2*y*y + Kt2*t*t
+   */
+
+#if 0
+  for (j = 0, y = yreset; j < h; j++, y++) {
+    for (i = 0, x = xreset; i < w; i++, x++) {
+
+      /* zero order */
+      int phase = v->k0;
+
+      /* first order */
+      phase = phase + (v->kx * i) + (v->ky * j) + (v->kt * t);
+
+      /* cross term */
+      /* phase = phase + (v->kxt * i * t) + (v->kyt * j * t); */
+      /* phase = phase + (v->kxy * x * y) / (w/2); */
+
+      /*second order */
+      /*normalise x/y terms to rate of change of phase at the picture edge */
+      phase =
+          phase + ((v->kx2 * x * x) / w) + ((v->ky2 * y * y) / h) +
+          ((v->kt2 * t * t) >> 1);
+
+      color.Y = sine_table[phase & 0xff];
+
+      color.R = color.Y;
+      color.G = color.Y;
+      color.B = color.Y;
+      p->paint_tmpline (p, i, 1);
+    }
+  }
+#endif
+
+  /* optimised version, with original code shown in comments */
+  accum_ky = 0;
+  accum_kyt = 0;
+  kt = v->kt * t;
+  kt2 = v->kt2 * t * t;
+  for (j = 0, y = yreset; j < h; j++, y++) {
+    accum_kx = 0;
+    accum_kxt = 0;
+    accum_ky += v->ky;
+    accum_kyt += v->kyt * t;
+    delta_kxy = v->kxy * y * scale_kxy;
+    accum_kxy = delta_kxy * xreset;
+    ky2 = (v->ky2 * y * y) / h;
+    for (i = 0, x = xreset; i < w; i++, x++) {
+
+      /* zero order */
+      int phase = v->k0;
+
+      /* first order */
+      accum_kx += v->kx;
+      /* phase = phase + (v->kx * i) + (v->ky * j) + (v->kt * t); */
+      phase = phase + accum_kx + accum_ky + kt;
+
+      /* cross term */
+      accum_kxt += delta_kxt;
+      accum_kxy += delta_kxy;
+      /* phase = phase + (v->kxt * i * t) + (v->kyt * j * t); */
+      phase = phase + accum_kxt + accum_kyt;
+
+      /* phase = phase + (v->kxy * x * y) / (w/2); */
+      /* phase = phase + accum_kxy / (w/2); */
+      phase = phase + (accum_kxy >> 16);
+
+      /*second order */
+      /*normalise x/y terms to rate of change of phase at the picture edge */
+      /*phase = phase + ((v->kx2 * x * x)/w) + ((v->ky2 * y * y)/h) + ((v->kt2 * t * t)>>1); */
+      phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
+
+      p->tmpline_u8[i] = sine_table[phase & 0xff];
+    }
+    videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
+        &p->foreground_color, &p->background_color, p->width);
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+void
+gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  struct vts_color_struct color;
+  int t = v->n_frames;
+  int w = frame->info.width, h = frame->info.height;
+
+  int xreset = -(w / 2) - v->xoffset;   /* starting values for x^2 and y^2, centering the ellipse */
+  int yreset = -(h / 2) - v->yoffset;
+
+  int x, y;
+  int accum_kx;
+  int accum_kxt;
+  int accum_ky;
+  int accum_kyt;
+  int accum_kxy;
+  int kt;
+  int kt2;
+  int ky2;
+  int delta_kxt = v->kxt * t;
+  int delta_kxy;
+  int scale_kxy = 0xffff / (w / 2);
+  int scale_kx2 = 0xffff / w;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  color = p->colors[COLOR_BLACK];
+  p->color = &color;
+
+  /* Zoneplate equation:
+   *
+   * phase = k0 + kx*x + ky*y + kt*t
+   *       + kxt*x*t + kyt*y*t + kxy*x*y
+   *       + kx2*x*x + ky2*y*y + Kt2*t*t
+   */
+
+  /* optimised version, with original code shown in comments */
+  accum_ky = 0;
+  accum_kyt = 0;
+  kt = v->kt * t;
+  kt2 = v->kt2 * t * t;
+  for (j = 0, y = yreset; j < h; j++, y++) {
+    accum_kx = 0;
+    accum_kxt = 0;
+    accum_ky += v->ky;
+    accum_kyt += v->kyt * t;
+    delta_kxy = v->kxy * y * scale_kxy;
+    accum_kxy = delta_kxy * xreset;
+    ky2 = (v->ky2 * y * y) / h;
+    for (i = 0, x = xreset; i < w; i++, x++) {
+
+      /* zero order */
+      int phase = v->k0;
+
+      /* first order */
+      accum_kx += v->kx;
+      /* phase = phase + (v->kx * i) + (v->ky * j) + (v->kt * t); */
+      phase = phase + accum_kx + accum_ky + kt;
+
+      /* cross term */
+      accum_kxt += delta_kxt;
+      accum_kxy += delta_kxy;
+      /* phase = phase + (v->kxt * i * t) + (v->kyt * j * t); */
+      phase = phase + accum_kxt + accum_kyt;
+
+      /* phase = phase + (v->kxy * x * y) / (w/2); */
+      /* phase = phase + accum_kxy / (w/2); */
+      phase = phase + (accum_kxy >> 16);
+
+      /*second order */
+      /*normalise x/y terms to rate of change of phase at the picture edge */
+      /*phase = phase + ((v->kx2 * x * x)/w) + ((v->ky2 * y * y)/h) + ((v->kt2 * t * t)>>1); */
+      phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
+
+      color.Y = 128;
+      color.U = sine_table[phase & 0xff];
+      color.V = sine_table[phase & 0xff];
+
+      color.R = 128;
+      color.G = 128;
+      color.B = color.V;
+
+      color.gray = color.Y << 8;
+      p->paint_tmpline (p, i, 1);
+    }
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+#undef SCALE_AMPLITUDE
+void
+gst_video_test_src_circular (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  double freq[8];
+  int w = frame->info.width, h = frame->info.height;
+
+  int d;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (i = 1; i < 8; i++) {
+    freq[i] = 200 * pow (2.0, -(i - 1) / 4.0);
+  }
+
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < w; i++) {
+      double dist;
+      int seg;
+
+      dist =
+          sqrt ((2 * i - w) * (2 * i - w) + (2 * j - h) * (2 * j -
+              h)) / (2 * w);
+      seg = floor (dist * 16);
+      if (seg == 0 || seg >= 8) {
+        p->tmpline_u8[i] = 0;
+      } else {
+        d = floor (256 * dist * freq[seg] + 0.5);
+        p->tmpline_u8[i] = sine_table[d & 0xff];
+      }
+    }
+    videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
+        &p->foreground_color, &p->background_color, p->width);
+    videotestsrc_convert_tmpline (p, j);
+  }
+}
+
+void
+gst_video_test_src_gamut (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int x, y;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  struct vts_color_struct yuv_primary;
+  struct vts_color_struct yuv_secondary;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  for (y = 0; y < h; y++) {
+    int region = (y * 4) / h;
+
+    switch (region) {
+      case 0:                  /* black */
+        yuv_primary = p->colors[COLOR_BLACK];
+        yuv_secondary = p->colors[COLOR_BLACK];
+        yuv_secondary.Y = 0;
+        break;
+      case 1:
+        yuv_primary = p->colors[COLOR_WHITE];
+        yuv_secondary = p->colors[COLOR_WHITE];
+        yuv_secondary.Y = 255;
+        break;
+      case 2:
+        yuv_primary = p->colors[COLOR_RED];
+        yuv_secondary = p->colors[COLOR_RED];
+        yuv_secondary.V = 255;
+        break;
+      case 3:
+        yuv_primary = p->colors[COLOR_BLUE];
+        yuv_secondary = p->colors[COLOR_BLUE];
+        yuv_secondary.U = 255;
+        break;
+    }
+
+    for (x = 0; x < w; x += 8) {
+      int len = MIN (8, w - x);
+
+      if ((x ^ y) & (1 << 4)) {
+        p->color = &yuv_primary;
+      } else {
+        p->color = &yuv_secondary;
+      }
+      p->paint_tmpline (p, x, len);
+    }
+    videotestsrc_convert_tmpline (p, y);
+  }
+}
+
+void
+gst_video_test_src_ball (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+  struct format_list_struct *format;
+  int t = v->n_frames;
+  double x, y;
+  int radius = 20;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+  format = v->format;
+  if (format == NULL)
+    return;
+
+  format->paint_setup (p, frame);
+
+  x = radius + (0.5 + 0.5 * sin (2 * G_PI * t / 200)) * (w - 2 * radius);
+  y = radius + (0.5 + 0.5 * sin (2 * G_PI * sqrt (2) * t / 200)) * (h -
+      2 * radius);
+
+  for (i = 0; i < h; i++) {
+    if (i < y - radius || i > y + radius) {
+      memset (p->tmpline_u8, 0, w);
+    } else {
+      int r = rint (sqrt (radius * radius - (i - y) * (i - y)));
+      int x1, x2;
+      int j;
+
+      x1 = 0;
+      x2 = MAX (0, x - r);
+      for (j = x1; j < x2; j++) {
+        p->tmpline_u8[j] = 0;
+      }
+
+      x1 = MAX (0, x - r);
+      x2 = MIN (w, x + r + 1);
+      for (j = x1; j < x2; j++) {
+        double rr = radius - sqrt ((j - x) * (j - x) + (i - y) * (i - y));
+
+        rr *= 0.5;
+        p->tmpline_u8[j] = CLAMP ((int) floor (256 * rr), 0, 255);
+      }
+
+      x1 = MIN (w, x + r + 1);
+      x2 = w;
+      for (j = x1; j < x2; j++) {
+        p->tmpline_u8[j] = 0;
+      }
+    }
+    videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
+        &p->foreground_color, &p->background_color, p->width);
+    videotestsrc_convert_tmpline (p, i);
+  }
+}
+
+static void
+paint_tmpline_ARGB (paintinfo * p, int x, int w)
+{
+  int offset;
+  guint32 value;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  value = (p->color->A << 0) | (p->color->R << 8) |
+      (p->color->G << 16) | (p->color->B << 24);
+#else
+  value = (p->color->A << 24) | (p->color->R << 16) |
+      (p->color->G << 8) | (p->color->B << 0);
+#endif
+
+  offset = (x * 4);
+  gst_orc_splat_u32 (p->tmpline + offset, value, w);
+}
+
+static void
+paint_tmpline_AYUV (paintinfo * p, int x, int w)
+{
+  int offset;
+  guint32 value;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  value = (p->color->A << 0) | (p->color->Y << 8) |
+      (p->color->U << 16) | (p->color->V << 24);
+#else
+  value = (p->color->A << 24) | (p->color->Y << 16) |
+      (p->color->U << 8) | (p->color->V << 0);
+#endif
+
+  offset = (x * 4);
+  gst_orc_splat_u32 (p->tmpline + offset, value, w);
+}
+
+
+static void
+paint_setup_I420 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vp = p->up + 1;
+  p->vstride = p->ustride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_NV21 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->up = p->vp + 1;
+  p->ustride = p->vstride;
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_I420 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + (y / 2) * p->ustride;
+  guint8 *V = p->vp + (y / 2) * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    U[i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
+    V[i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
+  }
+}
+
+static void
+convert_hline_NV12 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + (y / 2) * p->ustride;
+  guint8 *V = p->vp + (y / 2) * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    U[i * 2] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
+    V[i * 2] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
+  }
+}
+
+static void
+convert_hline_NV21 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + (y / 2) * p->ustride;
+  guint8 *V = p->vp + (y / 2) * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    U[i * 2] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
+    V[i * 2] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
+  }
+}
+
+
+static void
+paint_setup_YV12 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_v308 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->yp + 1;
+  p->vp = p->yp + 2;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_AYUV (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 1;
+  p->up = p->ap + 2;
+  p->vp = p->ap + 3;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+#ifdef disabled
+static void
+paint_setup_v410 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = dest + 0;
+  p->up = dest + 0;
+  p->vp = dest + 0;
+  p->ystride = p->width * 4;
+  p->endptr = dest + p->ystride * p->height;
+  p->size = frame->info.size;
+}
+#endif
+
+static void
+paint_setup_v216 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 2;
+  p->up = p->ap + 0;
+  p->vp = p->ap + 4;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_v210 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap;
+  p->up = p->ap;
+  p->vp = p->ap;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap;
+  p->up = p->ap;
+  p->vp = p->ap;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->yp + 1;
+  p->vp = p->yp + 3;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame)
+{
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->up + 1;
+  p->vp = p->up + 2;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->yp + 3;
+  p->vp = p->yp + 1;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_AY64 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 2;
+  p->up = p->ap + 4;
+  p->vp = p->ap + 6;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_v308 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i * 3] = ayuv[4 * i + 1];
+    U[i * 3] = ayuv[4 * i + 2];
+    V[i * 3] = ayuv[4 * i + 3];
+  }
+}
+
+static void
+convert_hline_AYUV (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *A = p->ap + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    A[i * 4] = ayuv[4 * i + 0];
+    Y[i * 4] = ayuv[4 * i + 1];
+    U[i * 4] = ayuv[4 * i + 2];
+    V[i * 4] = ayuv[4 * i + 3];
+  }
+}
+
+static void
+convert_hline_v216 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    GST_WRITE_UINT16_LE (Y + i * 4, TO_16 (ayuv[4 * i + 1]));
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    GST_WRITE_UINT16_LE (U + i * 8, TO_16 (ayuv[4 * (i * 2) + 2]));
+    GST_WRITE_UINT16_LE (V + i * 8, TO_16 (ayuv[4 * (i * 2) + 3]));
+  }
+}
+
+#ifdef disabled
+static void
+convert_hline_v410 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    guint32 a;
+
+    a = (TO_10 (ayuv[4 * i + 2]) << 22) |
+        (TO_10 (ayuv[4 * i + 1]) << 12) | (TO_10 (ayuv[4 * i + 3]) << 2);
+    GST_WRITE_UINT32_LE (Y + i * 4, a);
+  }
+}
+#endif
+
+static void
+convert_hline_v210 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width + 5; i += 6) {
+    guint32 a0, a1, a2, a3;
+    guint16 y0, y1, y2, y3, y4, y5;
+    guint16 u0, u1, u2;
+    guint16 v0, v1, v2;
+
+    y0 = ayuv[4 * (i + 0) + 1];
+    y1 = ayuv[4 * (i + 1) + 1];
+    y2 = ayuv[4 * (i + 2) + 1];
+    y3 = ayuv[4 * (i + 3) + 1];
+    y4 = ayuv[4 * (i + 4) + 1];
+    y5 = ayuv[4 * (i + 5) + 1];
+
+    u0 = (ayuv[4 * (i + 0) + 2] + ayuv[4 * (i + 1) + 2] + 1) >> 1;
+    u1 = (ayuv[4 * (i + 2) + 2] + ayuv[4 * (i + 3) + 2] + 1) >> 1;
+    u2 = (ayuv[4 * (i + 4) + 2] + ayuv[4 * (i + 5) + 2] + 1) >> 1;
+
+    v0 = (ayuv[4 * (i + 0) + 3] + ayuv[4 * (i + 1) + 3] + 1) >> 1;
+    v1 = (ayuv[4 * (i + 2) + 3] + ayuv[4 * (i + 3) + 3] + 1) >> 1;
+    v2 = (ayuv[4 * (i + 4) + 3] + ayuv[4 * (i + 5) + 3] + 1) >> 1;
+
+#if 0
+    a0 = TO_10 (ayuv[4 * (i + 0) + 2]) | (TO_10 (ayuv[4 * (i + 0) + 1]) << 10)
+        | (TO_10 (ayuv[4 * (i + 0) + 3]) << 20);
+    a1 = TO_10 (ayuv[4 * (i + 1) + 1]) | (TO_10 (ayuv[4 * (i + 2) + 2]) << 10)
+        | (TO_10 (ayuv[4 * (i + 2) + 1]) << 20);
+    a2 = TO_10 (ayuv[4 * (i + 2) + 3]) | (TO_10 (ayuv[4 * (i + 3) + 1]) << 10)
+        | (TO_10 (ayuv[4 * (i + 4) + 2]) << 20);
+    a3 = TO_10 (ayuv[4 * (i + 4) + 1]) | (TO_10 (ayuv[4 * (i + 4) + 3]) << 10)
+        | (TO_10 (ayuv[4 * (i + 5) + 1]) << 20);
+#endif
+
+    a0 = TO_10 (u0) | (TO_10 (y0) << 10) | (TO_10 (v0) << 20);
+    a1 = TO_10 (y1) | (TO_10 (u1) << 10) | (TO_10 (y2) << 20);
+    a2 = TO_10 (v1) | (TO_10 (y3) << 10) | (TO_10 (u2) << 20);
+    a3 = TO_10 (y4) | (TO_10 (v2) << 10) | (TO_10 (y5) << 20);
+
+    GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 0, a0);
+    GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 4, a1);
+    GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 8, a2);
+    GST_WRITE_UINT32_LE (Y + (i / 6) * 16 + 12, a3);
+  }
+}
+
+static void
+convert_hline_UYVP (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i += 2) {
+    guint16 y0, y1;
+    guint16 u0;
+    guint16 v0;
+
+    y0 = ayuv[4 * (i + 0) + 1];
+    y1 = ayuv[4 * (i + 1) + 1];
+    u0 = (ayuv[4 * (i + 0) + 2] + ayuv[4 * (i + 1) + 2] + 1) >> 1;
+    v0 = (ayuv[4 * (i + 0) + 3] + ayuv[4 * (i + 1) + 3] + 1) >> 1;
+
+    Y[(i / 2) * 5 + 0] = u0;
+    Y[(i / 2) * 5 + 1] = y0 >> 2;
+    Y[(i / 2) * 5 + 2] = (y0 << 6) | (v0 >> 4);
+    Y[(i / 2) * 5 + 3] = (v0 << 4) | (y1 >> 2);
+    Y[(i / 2) * 5 + 4] = (y1 << 2);
+  }
+}
+
+static void
+convert_hline_YUY2 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i * 2] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    U[4 * i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
+    V[4 * i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
+  }
+}
+
+static void
+convert_hline_AY64 (paintinfo * p, int y)
+{
+  int i;
+  guint16 *ayuv16 = (guint16 *) (p->ap + y * p->ystride);
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 0, TO_16 (ayuv[4 * i + 0]));
+    GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 1, TO_16 (ayuv[4 * i + 1]));
+    GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 2, TO_16 (ayuv[4 * i + 2]));
+    GST_WRITE_UINT16_LE (ayuv16 + i * 4 + 3, TO_16 (ayuv[4 * i + 3]));
+  }
+}
+
+#ifdef disabled
+static void
+paint_setup_IYU2 (paintinfo * p, GstVideoFrame * frame)
+{
+  /* untested */
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->up + 1;
+  p->vp = p->up + 2;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_IYU2 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i * 3] = ayuv[4 * i + 1];
+    U[i * 3] = ayuv[4 * i + 2];
+    V[i * 3] = ayuv[4 * i + 3];
+  }
+}
+#endif
+
+static void
+paint_setup_Y41B (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_Y41B (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 3) / 4; i++) {
+    U[i] = (ayuv[4 * (i * 4) + 2] + ayuv[4 * (i * 4 + 1) + 2] +
+        ayuv[4 * (i * 4 + 2) + 2] + ayuv[4 * (i * 4 + 3) + 2] + 2) >> 2;
+    V[i] = (ayuv[4 * (i * 4) + 3] + ayuv[4 * (i * 4 + 1) + 3] +
+        ayuv[4 * (i * 4 + 2) + 3] + ayuv[4 * (i * 4 + 3) + 3] + 2) >> 2;
+  }
+}
+
+static void
+paint_setup_Y42B (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_Y42B (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 1) / 2; i++) {
+    U[i] = (ayuv[4 * (i * 2) + 2] + ayuv[4 * (i * 2 + 1) + 2] + 1) >> 1;
+    V[i] = (ayuv[4 * (i * 2) + 3] + ayuv[4 * (i * 2 + 1) + 3] + 1) >> 1;
+  }
+}
+
+static void
+paint_setup_Y444 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_Y444 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + y * p->ustride;
+  guint8 *V = p->vp + y * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+    U[i] = ayuv[4 * i + 2];
+    V[i] = ayuv[4 * i + 3];
+  }
+}
+
+static void
+paint_setup_Y800 (paintinfo * p, GstVideoFrame * frame)
+{
+  /* untested */
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_Y800 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+}
+
+static void
+paint_setup_YVU9 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_YUV9 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+  p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_YUV9 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *U = p->up + (y / 4) * p->ustride;
+  guint8 *V = p->vp + (y / 4) * p->vstride;
+  guint8 *ayuv = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+  for (i = 0; i < (p->width + 3) / 4; i++) {
+    U[i] = (ayuv[4 * (i * 4) + 2] + ayuv[4 * (i * 4 + 1) + 2] +
+        ayuv[4 * (i * 4 + 2) + 2] + ayuv[4 * (i * 4 + 3) + 2] + 2) >> 2;
+    V[i] = (ayuv[4 * (i * 4) + 3] + ayuv[4 * (i * 4 + 1) + 3] +
+        ayuv[4 * (i * 4 + 2) + 3] + ayuv[4 * (i * 4 + 3) + 3] + 2) >> 2;
+  }
+}
+
+static void
+paint_setup_ARGB8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  paint_setup_xRGB8888 (p, frame);
+}
+
+static void
+paint_setup_ABGR8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  paint_setup_xBGR8888 (p, frame);
+}
+
+static void
+paint_setup_RGBA8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  paint_setup_RGBx8888 (p, frame);
+}
+
+static void
+paint_setup_BGRA8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  paint_setup_BGRx8888 (p, frame);
+}
+
+static void
+paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 1;
+  p->up = p->ap + 2;
+  p->vp = p->ap + 3;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 3;
+  p->up = p->ap + 2;
+  p->vp = p->ap + 1;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->yp + 1;
+  p->vp = p->yp + 2;
+  p->ap = p->yp + 3;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->vp + 1;
+  p->yp = p->vp + 2;
+  p->ap = p->vp + 3;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->yp + 1;
+  p->vp = p->yp + 2;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->up = p->vp + 1;
+  p->yp = p->vp + 2;
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+paint_setup_ARGB64 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->yp = p->ap + 2;
+  p->up = p->ap + 4;
+  p->yp = p->ap + 6;
+  p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ystride = p->astride;
+  p->ustride = p->astride;
+  p->vstride = p->astride;
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_str4 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *A = p->ap + y * p->ystride;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *G = p->up + y * p->ustride;
+  guint8 *B = p->vp + y * p->vstride;
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    A[4 * i] = 0xff;
+    R[4 * i] = argb[4 * i + 1];
+    G[4 * i] = argb[4 * i + 2];
+    B[4 * i] = argb[4 * i + 3];
+  }
+}
+
+static void
+convert_hline_astr4 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *A = p->ap + y * p->ystride;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *G = p->up + y * p->ustride;
+  guint8 *B = p->vp + y * p->vstride;
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    A[4 * i] = argb[4 * i + 0];
+    R[4 * i] = argb[4 * i + 1];
+    G[4 * i] = argb[4 * i + 2];
+    B[4 * i] = argb[4 * i + 3];
+  }
+}
+
+static void
+convert_hline_astr8 (paintinfo * p, int y)
+{
+  int i;
+  guint16 *A = (guint16 *) (p->ap + y * p->ystride);
+  guint16 *R = (guint16 *) (p->yp + y * p->ystride);
+  guint16 *G = (guint16 *) (p->up + y * p->ustride);
+  guint16 *B = (guint16 *) (p->vp + y * p->vstride);
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    A[4 * i] = TO_16 (argb[4 * i + 0]);
+    R[4 * i] = TO_16 (argb[4 * i + 1]);
+    G[4 * i] = TO_16 (argb[4 * i + 2]);
+    B[4 * i] = TO_16 (argb[4 * i + 3]);
+  }
+}
+
+static void
+convert_hline_str3 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *G = p->up + y * p->ustride;
+  guint8 *B = p->vp + y * p->vstride;
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    R[3 * i] = argb[4 * i + 1];
+    G[3 * i] = argb[4 * i + 2];
+    B[3 * i] = argb[4 * i + 3];
+  }
+}
+
+static void
+paint_setup_RGB565 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_RGB565 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    guint16 value = ((argb[4 * i + 1] & 0xf8) << 8) |
+        ((argb[4 * i + 2] & 0xfc) << 3) | ((argb[4 * i + 3] & 0xf8) >> 3);
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    GST_WRITE_UINT16_LE (R + 2 * i, value);
+#else
+    GST_WRITE_UINT16_BE (R + 2 * i, value);
+#endif
+  }
+}
+
+static void
+convert_hline_xRGB1555 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *argb = p->tmpline;
+
+  for (i = 0; i < p->width; i++) {
+    guint16 value = ((argb[4 * i + 1] & 0xf8) << 7) |
+        ((argb[4 * i + 2] & 0xf8) << 2) | ((argb[4 * i + 3] & 0xf8) >> 3);
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    GST_WRITE_UINT16_LE (R + 2 * i, value);
+#else
+    GST_WRITE_UINT16_BE (R + 2 * i, value);
+#endif
+  }
+}
+
+static void
+paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->ustride = p->ystride;
+  p->vstride = p->ystride;
+  p->size = frame->info.size;
+}
+
+
+static void
+paint_setup_bayer_bggr (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->ustride = GST_ROUND_UP_4 (p->width);
+  p->vstride = GST_ROUND_UP_4 (p->width);
+  p->size = p->ystride * p->height;
+  p->bayer_x_invert = 0;
+  p->bayer_y_invert = 0;
+}
+
+static void
+paint_setup_bayer_rggb (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->ustride = GST_ROUND_UP_4 (p->width);
+  p->vstride = GST_ROUND_UP_4 (p->width);
+  p->size = p->ystride * p->height;
+  p->bayer_x_invert = 1;
+  p->bayer_y_invert = 1;
+}
+
+static void
+paint_setup_bayer_grbg (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->ustride = GST_ROUND_UP_4 (p->width);
+  p->vstride = GST_ROUND_UP_4 (p->width);
+  p->size = p->ystride * p->height;
+  p->bayer_x_invert = 0;
+  p->bayer_y_invert = 1;
+}
+
+static void
+paint_setup_bayer_gbrg (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->ustride = GST_ROUND_UP_4 (p->width);
+  p->vstride = GST_ROUND_UP_4 (p->width);
+  p->size = p->ystride * p->height;
+  p->bayer_x_invert = 1;
+  p->bayer_y_invert = 0;
+}
+
+static void
+convert_hline_bayer (paintinfo * p, int y)
+{
+  int i;
+  guint8 *R = p->yp + y * p->ystride;
+  guint8 *argb = p->tmpline;
+  int x_inv = p->bayer_x_invert;
+  int y_inv = p->bayer_y_invert;
+
+  if ((y ^ y_inv) & 1) {
+    for (i = 0; i < p->width; i++) {
+      if ((i ^ x_inv) & 1) {
+        R[i] = argb[4 * i + 1];
+      } else {
+        R[i] = argb[4 * i + 2];
+      }
+    }
+  } else {
+    for (i = 0; i < p->width; i++) {
+      if ((i ^ x_inv) & 1) {
+        R[i] = argb[4 * i + 2];
+      } else {
+        R[i] = argb[4 * i + 3];
+      }
+    }
+  }
+}
+
+static void
+paint_setup_GRAY8 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_GRAY8 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  /* FIXME this should use gray, not YUV */
+  for (i = 0; i < p->width; i++) {
+    Y[i] = ayuv[4 * i + 1];
+  }
+}
+
+static void
+paint_setup_GRAY16 (paintinfo * p, GstVideoFrame * frame)
+{
+  p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+  p->size = frame->info.size;
+}
+
+static void
+convert_hline_GRAY16 (paintinfo * p, int y)
+{
+  int i;
+  guint8 *Y = p->yp + y * p->ystride;
+  guint8 *ayuv = p->tmpline;
+
+  /* FIXME this should use gray, not YUV */
+  for (i = 0; i < p->width; i++) {
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    GST_WRITE_UINT16_LE (Y + i * 2, ayuv[4 * i + 1] << 8);
+#else
+    GST_WRITE_UINT16_BE (Y + i * 2, ayuv[4 * i + 1] << 8);
+#endif
+  }
+}
diff --git a/gst/videotestsrc/videotestsrc.h b/gst/videotestsrc/videotestsrc.h
new file mode 100644
index 0000000..ee1f4f2
--- /dev/null
+++ b/gst/videotestsrc/videotestsrc.h
@@ -0,0 +1,125 @@
+/* GStreamer
+ * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __VIDEO_TEST_SRC_H__
+#define __VIDEO_TEST_SRC_H__
+
+#include <glib.h>
+
+enum {
+  VTS_YUV,
+  VTS_RGB,
+  VTS_GRAY,
+  VTS_BAYER
+};
+
+enum {
+  VTS_BAYER_BGGR,
+  VTS_BAYER_RGGB,
+  VTS_BAYER_GRBG,
+  VTS_BAYER_GBRG
+};
+
+struct vts_color_struct {
+  guint8 Y, U, V, A;
+  guint8 R, G, B;
+  guint16 gray;
+};
+
+
+typedef struct paintinfo_struct paintinfo;
+struct paintinfo_struct
+{
+  unsigned char *ap, *yp, *up, *vp; /* pointers to first byte of each component
+                                     * for both packed/planar YUV and RGB */
+  int astride, ystride, ustride, vstride;
+
+  int size;                     /* size of a frame */
+  int width;
+  int height;
+  const struct vts_color_struct *colors;
+  const struct vts_color_struct *color;
+  /*  const struct vts_color_struct *color; */
+  void (*paint_hline) (paintinfo * p, int x, int y, int w);
+  void (*paint_tmpline) (paintinfo * p, int x, int w);
+  void (*convert_tmpline) (paintinfo * p, int y);
+  int x_offset;
+
+  int bayer_x_invert;
+  int bayer_y_invert;
+
+  guint8 *tmpline;
+  guint8 *tmpline2;
+  guint8 *tmpline_u8;
+
+  struct vts_color_struct foreground_color;
+  struct vts_color_struct background_color;
+};
+
+struct format_list_struct
+{
+  int type;
+  const char *format;
+  const char *name;
+  int bitspp;
+  void (*paint_setup) (paintinfo * p, GstVideoFrame *frame);
+  void (*convert_hline) (paintinfo * p, int y);
+  int depth;
+  unsigned int red_mask;
+  unsigned int green_mask;
+  unsigned int blue_mask;
+  unsigned int alpha_mask;
+};
+
+struct format_list_struct *
+        paintrect_find_format           (const gchar *find_format);
+struct format_list_struct *
+        paintrect_find_name             (const char *name);
+struct format_list_struct *
+        paintinfo_find_by_structure     (const GstStructure *structure);
+GstStructure *
+        paint_get_structure             (struct format_list_struct *format);
+
+int     gst_video_test_src_get_size     (GstVideoTestSrc * v, int w, int h);
+void    gst_video_test_src_smpte        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_smpte75      (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_snow         (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_black        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_white        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_red          (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_green        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_blue         (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_solid        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_blink        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_checkers1    (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_checkers2    (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_checkers4    (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_checkers8    (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_circular     (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_zoneplate    (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_gamut        (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_ball         (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_smpte100     (GstVideoTestSrc * v, GstVideoFrame *frame);
+void    gst_video_test_src_bar          (GstVideoTestSrc * v, GstVideoFrame *frame);
+
+extern struct format_list_struct format_list[];
+extern int n_formats;
+
+#endif
diff --git a/gst/volume/Makefile.am b/gst/volume/Makefile.am
new file mode 100644
index 0000000..d750912
--- /dev/null
+++ b/gst/volume/Makefile.am
@@ -0,0 +1,34 @@
+plugin_LTLIBRARIES = libgstvolume.la
+
+ORC_SOURCE=gstvolumeorc
+include $(top_srcdir)/common/orc.mak
+
+libgstvolume_la_SOURCES = gstvolume.c
+nodist_libgstvolume_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvolume_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvolume_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvolume_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la  \
+	$(GST_BASE_LIBS) \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS)
+libgstvolume_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gstvolume.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvolume -:SHARED libgstvolume \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvolume_la_SOURCES) \
+	  $(nodist_libgstvolume_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvolume_la_LDFLAGS) \
+	           $(libgstvolume_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
diff --git a/gst/volume/Makefile.in b/gst/volume/Makefile.in
new file mode 100644
index 0000000..c833ab5
--- /dev/null
+++ b/gst/volume/Makefile.in
@@ -0,0 +1,868 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# This is a makefile.am fragment to build Orc code.
+#
+# Define ORC_SOURCE and then include this file, such as:
+#
+#  ORC_SOURCE=gstadderorc
+#  include $(top_srcdir)/common/orc.mak
+#
+# This fragment will create tmp-orc.c and gstadderorc.h from
+# gstadderorc.orc.
+#
+# When 'make dist' is run at the top level, or 'make orc-update'
+# in a directory including this fragment, the generated source 
+# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
+# should be checked in to git, since they are used if Orc is
+# disabled.
+# 
+# Note that this file defines BUILT_SOURCES, so any later usage
+# of BUILT_SOURCES in the Makefile.am that includes this file
+# must use '+='.
+#
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak
+subdir = gst/volume
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstvolume_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstvolume_la_OBJECTS = libgstvolume_la-gstvolume.lo
+am__objects_1 = libgstvolume_la-tmp-orc.lo
+nodist_libgstvolume_la_OBJECTS = $(am__objects_1)
+libgstvolume_la_OBJECTS = $(am_libgstvolume_la_OBJECTS) \
+	$(nodist_libgstvolume_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstvolume_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstvolume_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(libgstvolume_la_CFLAGS) $(CFLAGS) \
+	$(libgstvolume_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstvolume_la_SOURCES) $(nodist_libgstvolume_la_SOURCES)
+DIST_SOURCES = $(libgstvolume_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstvolume.la
+ORC_SOURCE = gstvolumeorc
+EXTRA_DIST = $(ORC_SOURCE).orc
+ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
+orcc_v_gen = $(orcc_v_gen_$(V))
+orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
+orcc_v_gen_0 = @echo "  ORCC   $@";
+cp_v_gen = $(cp_v_gen_$(V))
+cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
+cp_v_gen_0 = @echo "  CP     $@";
+libgstvolume_la_SOURCES = gstvolume.c
+nodist_libgstvolume_la_SOURCES = $(ORC_NODIST_SOURCES)
+libgstvolume_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvolume_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstvolume_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la  \
+	$(GST_BASE_LIBS) \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_LIBS) \
+	$(ORC_LIBS)
+
+libgstvolume_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gstvolume.h
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/volume/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu gst/volume/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstvolume.la: $(libgstvolume_la_OBJECTS) $(libgstvolume_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstvolume_la_LINK) -rpath $(plugindir) $(libgstvolume_la_OBJECTS) $(libgstvolume_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvolume_la-gstvolume.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvolume_la-tmp-orc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstvolume_la-gstvolume.lo: gstvolume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvolume_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvolume_la_CFLAGS) $(CFLAGS) -MT libgstvolume_la-gstvolume.lo -MD -MP -MF $(DEPDIR)/libgstvolume_la-gstvolume.Tpo -c -o libgstvolume_la-gstvolume.lo `test -f 'gstvolume.c' || echo '$(srcdir)/'`gstvolume.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvolume_la-gstvolume.Tpo $(DEPDIR)/libgstvolume_la-gstvolume.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gstvolume.c' object='libgstvolume_la-gstvolume.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvolume_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvolume_la_CFLAGS) $(CFLAGS) -c -o libgstvolume_la-gstvolume.lo `test -f 'gstvolume.c' || echo '$(srcdir)/'`gstvolume.c
+
+libgstvolume_la-tmp-orc.lo: tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvolume_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvolume_la_CFLAGS) $(CFLAGS) -MT libgstvolume_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvolume_la-tmp-orc.Tpo -c -o libgstvolume_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvolume_la-tmp-orc.Tpo $(DEPDIR)/libgstvolume_la-tmp-orc.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tmp-orc.c' object='libgstvolume_la-tmp-orc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvolume_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvolume_la_CFLAGS) $(CFLAGS) -c -o libgstvolume_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+	clean-pluginLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-local clean-pluginLTLIBRARIES ctags \
+	dist-hook distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pluginLTLIBRARIES install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-pluginLTLIBRARIES
+
+
+orc-update: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
+	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
+
+@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
+
+@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
+@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
+
+@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
+@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
+
+clean-local: clean-orc
+.PHONY: clean-orc
+clean-orc:
+	rm -f tmp-orc.c $(ORC_SOURCE).h
+
+dist-hook: dist-hook-orc
+.PHONY: dist-hook-orc
+
+# we try and copy updated orc -dist files below, but don't fail if it
+# doesn't work as the srcdir might not be writable
+dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
+	$(top_srcdir)/common/gst-indent tmp-orc.c
+	rm -f tmp-orc.c~
+	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
+	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
+	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
+	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
+	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
+	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+	androgenizer \
+	-:PROJECT libgstvolume -:SHARED libgstvolume \
+	 -:TAGS eng debug \
+         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:SOURCES $(libgstvolume_la_SOURCES) \
+	  $(nodist_libgstvolume_la_SOURCES) \
+	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \
+	 -:LDFLAGS $(libgstvolume_la_LDFLAGS) \
+	           $(libgstvolume_la_LIBADD) \
+	           -ldl \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gst/volume/gstvolume.c b/gst/volume/gstvolume.c
new file mode 100644
index 0000000..9910da4
--- /dev/null
+++ b/gst/volume/gstvolume.c
@@ -0,0 +1,980 @@
+/* -*- c-basic-offset: 2 -*-
+ * vi:si:et:sw=2:sts=8:ts=8:expandtab
+ *
+ * GStreamer
+ * Copyright (C) 1999-2001 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2005 Andy Wingo <wingo@pobox.com>
+ * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-volume
+ *
+ * The volume element changes the volume of the audio data.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
+ * ]| This pipeline shows that the level of audiotestsrc has been halved
+ * (peak values are around -6 dB and RMS around -9 dB) compared to
+ * the same pipeline without the volume element.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/audio/audio.h>
+#include <gst/interfaces/mixer.h>
+#include <gst/controller/gstcontroller.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiofilter.h>
+
+#ifdef HAVE_ORC
+#include <orc/orcfunctions.h>
+#else
+#define orc_memset memset
+#endif
+
+#include "gstvolumeorc.h"
+#include "gstvolume.h"
+
+/* some defines for audio processing */
+/* the volume factor is a range from 0.0 to (arbitrary) VOLUME_MAX_DOUBLE = 10.0
+ * we map 1.0 to VOLUME_UNITY_INT*
+ */
+#define VOLUME_UNITY_INT8            8  /* internal int for unity 2^(8-5) */
+#define VOLUME_UNITY_INT8_BIT_SHIFT  3  /* number of bits to shift for unity */
+#define VOLUME_UNITY_INT16           2048       /* internal int for unity 2^(16-5) */
+#define VOLUME_UNITY_INT16_BIT_SHIFT 11 /* number of bits to shift for unity */
+#define VOLUME_UNITY_INT24           524288     /* internal int for unity 2^(24-5) */
+#define VOLUME_UNITY_INT24_BIT_SHIFT 19 /* number of bits to shift for unity */
+#define VOLUME_UNITY_INT32           134217728  /* internal int for unity 2^(32-5) */
+#define VOLUME_UNITY_INT32_BIT_SHIFT 27
+#define VOLUME_MAX_DOUBLE            10.0
+#define VOLUME_MAX_INT8              G_MAXINT8
+#define VOLUME_MIN_INT8              G_MININT8
+#define VOLUME_MAX_INT16             G_MAXINT16
+#define VOLUME_MIN_INT16             G_MININT16
+#define VOLUME_MAX_INT24             8388607
+#define VOLUME_MIN_INT24             -8388608
+#define VOLUME_MAX_INT32             G_MAXINT32
+#define VOLUME_MIN_INT32             G_MININT32
+
+/* number of steps we use for the mixer interface to go from 0.0 to 1.0 */
+# define VOLUME_STEPS           100
+
+#define GST_CAT_DEFAULT gst_volume_debug
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
+
+/* Filter signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+#define DEFAULT_PROP_MUTE       FALSE
+#define DEFAULT_PROP_VOLUME     1.0
+
+enum
+{
+  PROP_0,
+  PROP_MUTE,
+  PROP_VOLUME
+};
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define ALLOWED_CAPS \
+    GST_AUDIO_CAPS_MAKE ("{ F32LE, F64LE, S8, S16LE, S24LE, S32LE }")
+#else
+#define ALLOWED_CAPS \
+    GST_AUDIO_CAPS_MAKE ("{ F32BE, F64BE, S8, S16BE, S24BE, S32BE }")
+#endif
+
+static void gst_volume_mixer_init (GstMixerClass * iface);
+
+#define gst_volume_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstVolume, gst_volume,
+    GST_TYPE_AUDIO_FILTER,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_MIXER, gst_volume_mixer_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_STREAM_VOLUME, NULL));
+
+static void volume_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void volume_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void volume_before_transform (GstBaseTransform * base,
+    GstBuffer * buffer);
+static GstFlowReturn volume_transform_ip (GstBaseTransform * base,
+    GstBuffer * outbuf);
+static gboolean volume_stop (GstBaseTransform * base);
+static gboolean volume_setup (GstAudioFilter * filter,
+    const GstAudioInfo * info);
+
+static void volume_process_double (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_double (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes);
+static void volume_process_float (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_float (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes);
+static void volume_process_int32 (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_int32_clamp (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_int32_clamp (GstVolume * self,
+    gpointer bytes, gdouble * volume, guint channels, guint n_bytes);
+static void volume_process_int24 (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_int24_clamp (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_int24_clamp (GstVolume * self,
+    gpointer bytes, gdouble * volume, guint channels, guint n_bytes);
+static void volume_process_int16 (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_int16_clamp (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_int16_clamp (GstVolume * self,
+    gpointer bytes, gdouble * volume, guint channels, guint n_bytes);
+static void volume_process_int8 (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_int8_clamp (GstVolume * self, gpointer bytes,
+    guint n_bytes);
+static void volume_process_controlled_int8_clamp (GstVolume * self,
+    gpointer bytes, gdouble * volume, guint channels, guint n_bytes);
+
+
+/* helper functions */
+
+static gboolean
+volume_choose_func (GstVolume * self)
+{
+  GstAudioFilter *filter = GST_AUDIO_FILTER (self);
+  GstAudioFormat format;
+
+  self->process = NULL;
+  self->process_controlled = NULL;
+
+  format = GST_AUDIO_FORMAT_INFO_FORMAT (filter->info.finfo);
+
+  if (format == GST_AUDIO_FORMAT_UNKNOWN)
+    return FALSE;
+
+  switch (format) {
+    case GST_AUDIO_FORMAT_S32:
+      /* only clamp if the gain is greater than 1.0 */
+      if (self->current_vol_i32 > VOLUME_UNITY_INT32) {
+        self->process = volume_process_int32_clamp;
+      } else {
+        self->process = volume_process_int32;
+      }
+      self->process_controlled = volume_process_controlled_int32_clamp;
+      break;
+    case GST_AUDIO_FORMAT_S24:
+      /* only clamp if the gain is greater than 1.0 */
+      if (self->current_vol_i24 > VOLUME_UNITY_INT24) {
+        self->process = volume_process_int24_clamp;
+      } else {
+        self->process = volume_process_int24;
+      }
+      self->process_controlled = volume_process_controlled_int24_clamp;
+      break;
+    case GST_AUDIO_FORMAT_S16:
+      /* only clamp if the gain is greater than 1.0 */
+      if (self->current_vol_i16 > VOLUME_UNITY_INT16) {
+        self->process = volume_process_int16_clamp;
+      } else {
+        self->process = volume_process_int16;
+      }
+      self->process_controlled = volume_process_controlled_int16_clamp;
+      break;
+    case GST_AUDIO_FORMAT_S8:
+      /* only clamp if the gain is greater than 1.0 */
+      if (self->current_vol_i8 > VOLUME_UNITY_INT8) {
+        self->process = volume_process_int8_clamp;
+      } else {
+        self->process = volume_process_int8;
+      }
+      self->process_controlled = volume_process_controlled_int8_clamp;
+      break;
+    case GST_AUDIO_FORMAT_F32:
+      self->process = volume_process_float;
+      self->process_controlled = volume_process_controlled_float;
+      break;
+    case GST_AUDIO_FORMAT_F64:
+      self->process = volume_process_double;
+      self->process_controlled = volume_process_controlled_double;
+      break;
+    default:
+      break;
+  }
+
+  return (self->process != NULL);
+}
+
+static gboolean
+volume_update_volume (GstVolume * self, gfloat volume, gboolean mute)
+{
+  gboolean passthrough;
+  gboolean res;
+  GstController *controller;
+
+  GST_DEBUG_OBJECT (self, "configure mute %d, volume %f", mute, volume);
+
+  if (mute) {
+    self->current_mute = TRUE;
+    self->current_volume = 0.0;
+
+    self->current_vol_i8 = 0;
+    self->current_vol_i16 = 0;
+    self->current_vol_i24 = 0;
+    self->current_vol_i32 = 0;
+
+    passthrough = FALSE;
+  } else {
+    self->current_mute = FALSE;
+    self->current_volume = volume;
+
+    self->current_vol_i8 = volume * VOLUME_UNITY_INT8;
+    self->current_vol_i16 = volume * VOLUME_UNITY_INT16;
+    self->current_vol_i24 = volume * VOLUME_UNITY_INT24;
+    self->current_vol_i32 = volume * VOLUME_UNITY_INT32;
+
+    passthrough = (self->current_vol_i16 == VOLUME_UNITY_INT16);
+  }
+
+  /* If a controller is used, never use passthrough mode
+   * because the property can change from 1.0 to something
+   * else in the middle of a buffer.
+   */
+  controller = gst_object_get_controller (G_OBJECT (self));
+  passthrough = passthrough && (controller == NULL);
+
+  GST_DEBUG_OBJECT (self, "set passthrough %d", passthrough);
+
+  gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (self), passthrough);
+
+  res = self->negotiated = volume_choose_func (self);
+
+  return res;
+}
+
+/* Mixer interface */
+
+static const GList *
+gst_volume_list_tracks (GstMixer * mixer)
+{
+  GstVolume *self = GST_VOLUME (mixer);
+
+  g_return_val_if_fail (self != NULL, NULL);
+  g_return_val_if_fail (GST_IS_VOLUME (self), NULL);
+
+  return self->tracklist;
+}
+
+static void
+gst_volume_set_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
+{
+  GstVolume *self = GST_VOLUME (mixer);
+
+  g_return_if_fail (self != NULL);
+  g_return_if_fail (GST_IS_VOLUME (self));
+
+  GST_OBJECT_LOCK (self);
+  self->volume = (gfloat) volumes[0] / VOLUME_STEPS;
+  GST_OBJECT_UNLOCK (self);
+}
+
+static void
+gst_volume_get_volume (GstMixer * mixer, GstMixerTrack * track, gint * volumes)
+{
+  GstVolume *self = GST_VOLUME (mixer);
+
+  g_return_if_fail (self != NULL);
+  g_return_if_fail (GST_IS_VOLUME (self));
+
+  GST_OBJECT_LOCK (self);
+  volumes[0] = (gint) self->volume * VOLUME_STEPS;
+  GST_OBJECT_UNLOCK (self);
+}
+
+static void
+gst_volume_set_mute (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
+{
+  GstVolume *self = GST_VOLUME (mixer);
+
+  g_return_if_fail (self != NULL);
+  g_return_if_fail (GST_IS_VOLUME (self));
+
+  GST_OBJECT_LOCK (self);
+  self->mute = mute;
+  GST_OBJECT_UNLOCK (self);
+}
+
+static void
+gst_volume_mixer_init (GstMixerClass * klass)
+{
+  GST_MIXER_TYPE (klass) = GST_MIXER_SOFTWARE;
+
+  /* default virtual functions */
+  klass->list_tracks = gst_volume_list_tracks;
+  klass->set_volume = gst_volume_set_volume;
+  klass->get_volume = gst_volume_get_volume;
+  klass->set_mute = gst_volume_set_mute;
+}
+
+/* Element class */
+
+static void
+gst_volume_dispose (GObject * object)
+{
+  GstVolume *volume = GST_VOLUME (object);
+
+  if (volume->tracklist) {
+    if (volume->tracklist->data)
+      g_object_unref (volume->tracklist->data);
+    g_list_free (volume->tracklist);
+    volume->tracklist = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_volume_class_init (GstVolumeClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *element_class;
+  GstBaseTransformClass *trans_class;
+  GstAudioFilterClass *filter_class;
+  GstCaps *caps;
+
+  gobject_class = (GObjectClass *) klass;
+  element_class = (GstElementClass *) klass;
+  trans_class = (GstBaseTransformClass *) klass;
+  filter_class = (GstAudioFilterClass *) (klass);
+
+  gobject_class->set_property = volume_set_property;
+  gobject_class->get_property = volume_get_property;
+  gobject_class->dispose = gst_volume_dispose;
+
+  g_object_class_install_property (gobject_class, PROP_MUTE,
+      g_param_spec_boolean ("mute", "Mute", "mute channel",
+          DEFAULT_PROP_MUTE,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_VOLUME,
+      g_param_spec_double ("volume", "Volume", "volume factor, 1.0=100%",
+          0.0, VOLUME_MAX_DOUBLE, DEFAULT_PROP_VOLUME,
+          G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (element_class, "Volume",
+      "Filter/Effect/Audio",
+      "Set volume on audio/raw streams", "Andy Wingo <wingo@pobox.com>");
+
+  caps = gst_caps_from_string (ALLOWED_CAPS);
+  gst_audio_filter_class_add_pad_templates (filter_class, caps);
+  gst_caps_unref (caps);
+
+  trans_class->before_transform = GST_DEBUG_FUNCPTR (volume_before_transform);
+  trans_class->transform_ip = GST_DEBUG_FUNCPTR (volume_transform_ip);
+  trans_class->stop = GST_DEBUG_FUNCPTR (volume_stop);
+  filter_class->setup = GST_DEBUG_FUNCPTR (volume_setup);
+}
+
+static void
+gst_volume_init (GstVolume * self)
+{
+  GstMixerTrack *track = NULL;
+
+  self->mute = DEFAULT_PROP_MUTE;;
+  self->volume = DEFAULT_PROP_VOLUME;
+
+  self->tracklist = NULL;
+  self->negotiated = FALSE;
+
+  track = g_object_new (GST_TYPE_MIXER_TRACK, NULL);
+
+  if (GST_IS_MIXER_TRACK (track)) {
+    track->label = g_strdup ("volume");
+    track->num_channels = 1;
+    track->min_volume = 0;
+    track->max_volume = VOLUME_STEPS;
+    track->flags = GST_MIXER_TRACK_SOFTWARE;
+    self->tracklist = g_list_append (self->tracklist, track);
+  }
+
+  gst_base_transform_set_gap_aware (GST_BASE_TRANSFORM (self), TRUE);
+}
+
+static void
+volume_process_double (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gdouble *data = (gdouble *) bytes;
+  guint num_samples = n_bytes / sizeof (gdouble);
+
+  orc_scalarmultiply_f64_ns (data, self->current_volume, num_samples);
+}
+
+static void
+volume_process_controlled_double (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gdouble *data = (gdouble *) bytes;
+  guint num_samples = n_bytes / (sizeof (gdouble) * channels);
+  guint i, j;
+  gdouble vol;
+
+  if (channels == 1) {
+    orc_process_controlled_f64_1ch (data, volume, num_samples);
+  } else {
+    for (i = 0; i < num_samples; i++) {
+      vol = *volume++;
+      for (j = 0; j < channels; j++) {
+        *data++ *= vol;
+      }
+    }
+  }
+}
+
+static void
+volume_process_float (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gfloat *data = (gfloat *) bytes;
+  guint num_samples = n_bytes / sizeof (gfloat);
+
+  orc_scalarmultiply_f32_ns (data, self->current_volume, num_samples);
+}
+
+static void
+volume_process_controlled_float (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gfloat *data = (gfloat *) bytes;
+  guint num_samples = n_bytes / (sizeof (gfloat) * channels);
+  guint i, j;
+  gdouble vol;
+
+  if (channels == 1) {
+    orc_process_controlled_f32_1ch (data, volume, num_samples);
+  } else if (channels == 2) {
+    orc_process_controlled_f32_2ch (data, volume, num_samples);
+  } else {
+    for (i = 0; i < num_samples; i++) {
+      vol = *volume++;
+      for (j = 0; j < channels; j++) {
+        *data++ *= vol;
+      }
+    }
+  }
+}
+
+static void
+volume_process_int32 (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint32 *data = (gint32 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT32_BIT_SHIFT == 27);
+  orc_process_int32 (data, self->current_vol_i32, num_samples);
+}
+
+static void
+volume_process_int32_clamp (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint32 *data = (gint32 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT32_BIT_SHIFT == 27);
+
+  orc_process_int32_clamp (data, self->current_vol_i32, num_samples);
+}
+
+static void
+volume_process_controlled_int32_clamp (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gint32 *data = (gint32 *) bytes;
+  guint i, j;
+  guint num_samples = n_bytes / (sizeof (gint32) * channels);
+  gdouble vol, val;
+
+  if (channels == 1) {
+    orc_process_controlled_int32_1ch (data, volume, num_samples);
+  } else {
+    for (i = 0; i < num_samples; i++) {
+      vol = *volume++;
+      for (j = 0; j < channels; j++) {
+        val = *data * vol;
+        *data++ = (gint32) CLAMP (val, VOLUME_MIN_INT32, VOLUME_MAX_INT32);
+      }
+    }
+  }
+}
+
+#if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+#define get_unaligned_i24(_x) ( (((guint8*)_x)[0]) | ((((guint8*)_x)[1]) << 8) | ((((gint8*)_x)[2]) << 16) )
+
+#define write_unaligned_u24(_x,samp) \
+G_STMT_START { \
+  *(_x)++ = samp & 0xFF; \
+  *(_x)++ = (samp >> 8) & 0xFF; \
+  *(_x)++ = (samp >> 16) & 0xFF; \
+} G_STMT_END
+
+#else /* BIG ENDIAN */
+#define get_unaligned_i24(_x) ( (((guint8*)_x)[2]) | ((((guint8*)_x)[1]) << 8) | ((((gint8*)_x)[0]) << 16) )
+#define write_unaligned_u24(_x,samp) \
+G_STMT_START { \
+  *(_x)++ = (samp >> 16) & 0xFF; \
+  *(_x)++ = (samp >> 8) & 0xFF; \
+  *(_x)++ = samp & 0xFF; \
+} G_STMT_END
+#endif
+
+static void
+volume_process_int24 (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;        /* treat the data as a byte stream */
+  guint i, num_samples;
+  guint32 samp;
+  gint64 val;
+
+  num_samples = n_bytes / (sizeof (gint8) * 3);
+  for (i = 0; i < num_samples; i++) {
+    samp = get_unaligned_i24 (data);
+
+    val = (gint32) samp;
+    val =
+        (((gint64) self->current_vol_i24 *
+            val) >> VOLUME_UNITY_INT24_BIT_SHIFT);
+    samp = (guint32) val;
+
+    /* write the value back into the stream */
+    write_unaligned_u24 (data, samp);
+  }
+}
+
+static void
+volume_process_int24_clamp (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;        /* treat the data as a byte stream */
+  guint i, num_samples;
+  guint32 samp;
+  gint64 val;
+
+  num_samples = n_bytes / (sizeof (gint8) * 3);
+  for (i = 0; i < num_samples; i++) {
+    samp = get_unaligned_i24 (data);
+
+    val = (gint32) samp;
+    val =
+        (((gint64) self->current_vol_i24 *
+            val) >> VOLUME_UNITY_INT24_BIT_SHIFT);
+    samp = (guint32) CLAMP (val, VOLUME_MIN_INT24, VOLUME_MAX_INT24);
+
+    /* write the value back into the stream */
+    write_unaligned_u24 (data, samp);
+  }
+}
+
+static void
+volume_process_controlled_int24_clamp (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;        /* treat the data as a byte stream */
+  guint i, j;
+  guint num_samples = n_bytes / (sizeof (gint8) * 3 * channels);
+  gdouble vol, val;
+
+  for (i = 0; i < num_samples; i++) {
+    vol = *volume++;
+    for (j = 0; j < channels; j++) {
+      val = get_unaligned_i24 (data) * vol;
+      val = CLAMP (val, VOLUME_MIN_INT24, VOLUME_MAX_INT24);
+      write_unaligned_u24 (data, (gint32) val);
+    }
+  }
+}
+
+static void
+volume_process_int16 (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint16 *data = (gint16 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint16);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT16_BIT_SHIFT == 11);
+
+  orc_process_int16 (data, self->current_vol_i16, num_samples);
+}
+
+static void
+volume_process_int16_clamp (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint16 *data = (gint16 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint16);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT16_BIT_SHIFT == 11);
+
+  orc_process_int16_clamp (data, self->current_vol_i16, num_samples);
+}
+
+static void
+volume_process_controlled_int16_clamp (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gint16 *data = (gint16 *) bytes;
+  guint i, j;
+  guint num_samples = n_bytes / (sizeof (gint16) * channels);
+  gdouble vol, val;
+
+  if (channels == 1) {
+    orc_process_controlled_int16_1ch (data, volume, num_samples);
+  } else if (channels == 2) {
+    orc_process_controlled_int16_2ch (data, volume, num_samples);
+  } else {
+    for (i = 0; i < num_samples; i++) {
+      vol = *volume++;
+      for (j = 0; j < channels; j++) {
+        val = *data * vol;
+        *data++ = (gint16) CLAMP (val, VOLUME_MIN_INT16, VOLUME_MAX_INT16);
+      }
+    }
+  }
+}
+
+static void
+volume_process_int8 (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint8);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT8_BIT_SHIFT == 3);
+
+  orc_process_int8 (data, self->current_vol_i8, num_samples);
+}
+
+static void
+volume_process_int8_clamp (GstVolume * self, gpointer bytes, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;
+  guint num_samples = n_bytes / sizeof (gint8);
+
+  /* hard coded in volume.orc */
+  g_assert (VOLUME_UNITY_INT8_BIT_SHIFT == 3);
+
+  orc_process_int8_clamp (data, self->current_vol_i8, num_samples);
+}
+
+static void
+volume_process_controlled_int8_clamp (GstVolume * self, gpointer bytes,
+    gdouble * volume, guint channels, guint n_bytes)
+{
+  gint8 *data = (gint8 *) bytes;
+  guint i, j;
+  guint num_samples = n_bytes / (sizeof (gint8) * channels);
+  gdouble val, vol;
+
+  if (channels == 1) {
+    orc_process_controlled_int8_1ch (data, volume, num_samples);
+  } else if (channels == 2) {
+    orc_process_controlled_int8_2ch (data, volume, num_samples);
+  } else {
+    for (i = 0; i < num_samples; i++) {
+      vol = *volume++;
+      for (j = 0; j < channels; j++) {
+        val = *data * vol;
+        *data++ = (gint8) CLAMP (val, VOLUME_MIN_INT8, VOLUME_MAX_INT8);
+      }
+    }
+  }
+}
+
+/* GstBaseTransform vmethod implementations */
+
+/* get notified of caps and plug in the correct process function */
+static gboolean
+volume_setup (GstAudioFilter * filter, const GstAudioInfo * info)
+{
+  gboolean res;
+  GstVolume *self = GST_VOLUME (filter);
+  gfloat volume;
+  gboolean mute;
+
+  GST_OBJECT_LOCK (self);
+  volume = self->volume;
+  mute = self->mute;
+  GST_OBJECT_UNLOCK (self);
+
+  res = volume_update_volume (self, volume, mute);
+  if (!res) {
+    GST_ELEMENT_ERROR (self, CORE, NEGOTIATION,
+        ("Invalid incoming format"), (NULL));
+  }
+  self->negotiated = res;
+
+  return res;
+}
+
+static gboolean
+volume_stop (GstBaseTransform * base)
+{
+  GstVolume *self = GST_VOLUME (base);
+
+  g_free (self->volumes);
+  self->volumes = NULL;
+  self->volumes_count = 0;
+
+  g_free (self->mutes);
+  self->mutes = NULL;
+  self->mutes_count = 0;
+
+  return GST_CALL_PARENT_WITH_DEFAULT (GST_BASE_TRANSFORM_CLASS, stop, (base),
+      TRUE);
+}
+
+static void
+volume_before_transform (GstBaseTransform * base, GstBuffer * buffer)
+{
+  GstClockTime timestamp;
+  GstVolume *self = GST_VOLUME (base);
+  gfloat volume;
+  gboolean mute;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  timestamp =
+      gst_segment_to_stream_time (&base->segment, GST_FORMAT_TIME, timestamp);
+
+  GST_DEBUG_OBJECT (base, "sync to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+
+  if (GST_CLOCK_TIME_IS_VALID (timestamp))
+    gst_object_sync_values (G_OBJECT (self), timestamp);
+
+  /* get latest values */
+  GST_OBJECT_LOCK (self);
+  volume = self->volume;
+  mute = self->mute;
+  GST_OBJECT_UNLOCK (self);
+
+  if ((volume != self->current_volume) || (mute != self->current_mute)) {
+    /* the volume or mute was updated, update our internal state before
+     * we continue processing. */
+    volume_update_volume (self, volume, mute);
+  }
+}
+
+/* call the plugged-in process function for this instance
+ * needs to be done with this indirection since volume_transform is
+ * a class-global method
+ */
+static GstFlowReturn
+volume_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
+{
+  GstAudioFilter *filter = GST_AUDIO_FILTER_CAST (base);
+  GstVolume *self = GST_VOLUME (base);
+  guint8 *data;
+  gsize size;
+  GstControlSource *mute_csource, *volume_csource;
+
+  if (G_UNLIKELY (!self->negotiated))
+    goto not_negotiated;
+
+  /* don't process data in passthrough-mode */
+  if (gst_base_transform_is_passthrough (base) ||
+      GST_BUFFER_FLAG_IS_SET (outbuf, GST_BUFFER_FLAG_GAP))
+    return GST_FLOW_OK;
+
+  data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READWRITE);
+
+  mute_csource = gst_object_get_control_source (G_OBJECT (self), "mute");
+  volume_csource = gst_object_get_control_source (G_OBJECT (self), "volume");
+
+  if (mute_csource || (volume_csource && !self->current_mute)) {
+    gint rate = GST_AUDIO_INFO_RATE (&filter->info);
+    gint width = GST_AUDIO_FORMAT_INFO_WIDTH (filter->info.finfo) / 8;
+    gint channels = GST_AUDIO_INFO_CHANNELS (&filter->info);
+    guint nsamples = size / (width * channels);
+    GstClockTime interval = gst_util_uint64_scale_int (1, GST_SECOND, rate);
+    GstClockTime ts = GST_BUFFER_TIMESTAMP (outbuf);
+    gboolean use_mutes = FALSE;
+
+    ts = gst_segment_to_stream_time (&base->segment, GST_FORMAT_TIME, ts);
+
+    if (self->mutes_count < nsamples && mute_csource) {
+      self->mutes = g_realloc (self->mutes, sizeof (gboolean) * nsamples);
+      self->mutes_count = nsamples;
+    }
+
+    if (self->volumes_count < nsamples) {
+      self->volumes = g_realloc (self->volumes, sizeof (gdouble) * nsamples);
+      self->volumes_count = nsamples;
+    }
+
+    if (mute_csource) {
+      GstValueArray va = { "mute", nsamples, interval, (gpointer) self->mutes };
+
+      if (!gst_control_source_get_value_array (mute_csource, ts, &va))
+        goto controller_failure;
+
+      gst_object_unref (mute_csource);
+      mute_csource = NULL;
+      use_mutes = TRUE;
+    } else {
+      g_free (self->mutes);
+      self->mutes = NULL;
+      self->mutes_count = 0;
+    }
+
+    if (volume_csource) {
+      GstValueArray va =
+          { "volume", nsamples, interval, (gpointer) self->volumes };
+
+      if (!gst_control_source_get_value_array (volume_csource, ts, &va))
+        goto controller_failure;
+
+      gst_object_unref (volume_csource);
+      volume_csource = NULL;
+    } else {
+      orc_memset_f64 (self->volumes, self->current_volume, nsamples);
+    }
+
+    if (use_mutes) {
+      orc_prepare_volumes (self->volumes, self->mutes, nsamples);
+    }
+
+    self->process_controlled (self, data, self->volumes, channels, size);
+
+    return GST_FLOW_OK;
+  } else if (volume_csource) {
+    gst_object_unref (volume_csource);
+  }
+
+  if (self->current_volume == 0.0 || self->current_mute) {
+    orc_memset (data, 0, size);
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
+  } else if (self->current_volume != 1.0) {
+    self->process (self, data, size);
+  }
+  gst_buffer_unmap (outbuf, data, size);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+not_negotiated:
+  {
+    GST_ELEMENT_ERROR (self, CORE, NEGOTIATION,
+        ("No format was negotiated"), (NULL));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+controller_failure:
+  {
+    if (mute_csource)
+      gst_object_unref (mute_csource);
+    if (volume_csource)
+      gst_object_unref (volume_csource);
+
+    GST_ELEMENT_ERROR (self, CORE, FAILED,
+        ("Failed to get values from controller"), (NULL));
+    gst_buffer_unmap (outbuf, data, size);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+volume_set_property (GObject * object, guint prop_id, const GValue * value,
+    GParamSpec * pspec)
+{
+  GstVolume *self = GST_VOLUME (object);
+
+  switch (prop_id) {
+    case PROP_MUTE:
+      GST_OBJECT_LOCK (self);
+      self->mute = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_VOLUME:
+      GST_OBJECT_LOCK (self);
+      self->volume = g_value_get_double (value);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+volume_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstVolume *self = GST_VOLUME (object);
+
+  switch (prop_id) {
+    case PROP_MUTE:
+      GST_OBJECT_LOCK (self);
+      g_value_set_boolean (value, self->mute);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_VOLUME:
+      GST_OBJECT_LOCK (self);
+      g_value_set_double (value, self->volume);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gst_volume_orc_init ();
+
+  /* initialize gst controller library */
+  gst_controller_init (NULL, NULL);
+
+  GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "volume", 0, "Volume gain");
+
+  /* ref class from a thread-safe context to work around missing bit of
+   * thread-safety in GObject */
+  g_type_class_ref (GST_TYPE_MIXER_TRACK);
+
+  return gst_element_register (plugin, "volume", GST_RANK_NONE,
+      GST_TYPE_VOLUME);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "volume",
+    "plugin for controlling audio volume",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/volume/gstvolume.h b/gst/volume/gstvolume.h
new file mode 100644
index 0000000..047227d
--- /dev/null
+++ b/gst/volume/gstvolume.h
@@ -0,0 +1,88 @@
+/* -*- c-basic-offset: 2 -*-
+ * vi:si:et:sw=2:sts=8:ts=8:expandtab
+ *
+ * GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_VOLUME_H__
+#define __GST_VOLUME_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/interfaces/streamvolume.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiofilter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VOLUME \
+  (gst_volume_get_type())
+#define GST_VOLUME(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VOLUME,GstVolume))
+#define GST_VOLUME_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VOLUME,GstVolumeClass))
+#define GST_IS_VOLUME(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VOLUME))
+#define GST_IS_VOLUME_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VOLUME))
+
+typedef struct _GstVolume GstVolume;
+typedef struct _GstVolumeClass GstVolumeClass;
+
+/**
+ * GstVolume:
+ *
+ * Opaque data structure.
+ */
+struct _GstVolume {
+  GstAudioFilter element;
+
+  void (*process)(GstVolume*, gpointer, guint);
+  void (*process_controlled)(GstVolume*, gpointer, gdouble *, guint, guint);
+
+  gboolean mute;
+  gfloat volume;
+
+  gboolean current_mute;
+  gfloat current_volume;
+
+  gint   current_vol_i32;
+  gint   current_vol_i24; /* the _i(nt) values get synchronized with the */
+  gint   current_vol_i16; /* the _i(nt) values get synchronized with the */
+  gint   current_vol_i8;   /* the _i(nt) values get synchronized with the */
+  
+  GList *tracklist;
+  gboolean negotiated;
+
+  gboolean *mutes;
+  guint mutes_count;
+  gdouble *volumes;
+  guint volumes_count;
+};
+
+struct _GstVolumeClass {
+  GstAudioFilterClass parent_class;
+};
+
+GType gst_volume_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_VOLUME_H__ */
diff --git a/gst/volume/gstvolumeorc-dist.c b/gst/volume/gstvolumeorc-dist.c
new file mode 100644
index 0000000..3159e90
--- /dev/null
+++ b/gst/volume/gstvolumeorc-dist.c
@@ -0,0 +1,2721 @@
+
+/* autogenerated from gstvolumeorc.orc */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <glib.h>
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union
+{
+  orc_int16 i;
+  orc_int8 x2[2];
+} orc_union16;
+typedef union
+{
+  orc_int32 i;
+  float f;
+  orc_int16 x2[2];
+  orc_int8 x4[4];
+} orc_union32;
+typedef union
+{
+  orc_int64 i;
+  double f;
+  orc_int32 x2[2];
+  float x2f[2];
+  orc_int16 x4[4];
+} orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+
+#ifndef DISABLE_ORC
+#include <orc/orc.h>
+#endif
+void orc_scalarmultiply_f64_ns (double *ORC_RESTRICT d1, double p1, int n);
+void orc_scalarmultiply_f32_ns (float *ORC_RESTRICT d1, float p1, int n);
+void orc_process_int32 (gint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int32_clamp (gint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int16 (gint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int16_clamp (gint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int8 (gint8 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int8_clamp (gint8 * ORC_RESTRICT d1, int p1, int n);
+void orc_memset_f64 (gdouble * ORC_RESTRICT d1, double p1, int n);
+void orc_prepare_volumes (gdouble * ORC_RESTRICT d1,
+    const gboolean * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f64_1ch (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f32_1ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f32_2ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int32_1ch (gint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int16_1ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int16_2ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int8_1ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int8_2ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
+
+void gst_volume_orc_init (void);
+
+
+/* begin Orc C target preamble */
+#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
+#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
+#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
+#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
+#define ORC_SB_MAX 127
+#define ORC_SB_MIN (-1-ORC_SB_MAX)
+#define ORC_UB_MAX 255
+#define ORC_UB_MIN 0
+#define ORC_SW_MAX 32767
+#define ORC_SW_MIN (-1-ORC_SW_MAX)
+#define ORC_UW_MAX 65535
+#define ORC_UW_MIN 0
+#define ORC_SL_MAX 2147483647
+#define ORC_SL_MIN (-1-ORC_SL_MAX)
+#define ORC_UL_MAX 4294967295U
+#define ORC_UL_MIN 0
+#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
+#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
+#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
+#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
+#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
+#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
+#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
+#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
+#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
+#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
+#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
+#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
+#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
+#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+/* end Orc C target preamble */
+
+
+
+/* orc_scalarmultiply_f64_ns */
+#ifdef DISABLE_ORC
+void
+orc_scalarmultiply_f64_ns (double *ORC_RESTRICT d1, double p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+  orc_union64 var34;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 1: loadpq */
+  var33.f = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr0[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_scalarmultiply_f64_ns (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+  orc_union64 var34;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 1: loadpq */
+  var33.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr0[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_scalarmultiply_f64_ns;
+void
+orc_scalarmultiply_f64_ns (double *ORC_RESTRICT d1, double p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_scalarmultiply_f64_ns;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union64 tmp;
+    tmp.f = p1;
+    ex->params[ORC_VAR_P1] = tmp.x2[0];
+    ex->params[ORC_VAR_T1] = tmp.x2[1];
+  }
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_scalarmultiply_f32_ns */
+#ifdef DISABLE_ORC
+void
+orc_scalarmultiply_f32_ns (float *ORC_RESTRICT d1, float p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 1: loadpl */
+  var33.f = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 2: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_scalarmultiply_f32_ns (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+  orc_union32 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 1: loadpl */
+  var33.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var32 = ptr0[i];
+    /* 2: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var32.i);
+      _src2.i = ORC_DENORMAL (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_scalarmultiply_f32_ns;
+void
+orc_scalarmultiply_f32_ns (float *ORC_RESTRICT d1, float p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_scalarmultiply_f32_ns;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union32 tmp;
+    tmp.f = p1;
+    ex->params[ORC_VAR_P1] = tmp.i;
+  }
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int32 */
+#ifdef DISABLE_ORC
+void
+orc_process_int32 (gint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 1: loadpl */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulslq */
+    var36.i = ((orc_int64) var33.i) * ((orc_int64) var34.i);
+    /* 3: shrsq */
+    var37.i = var36.i >> 27;
+    /* 4: convql */
+    var35.i = var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 1: loadpl */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulslq */
+    var36.i = ((orc_int64) var33.i) * ((orc_int64) var34.i);
+    /* 3: shrsq */
+    var37.i = var36.i >> 27;
+    /* 4: convql */
+    var35.i = var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int32;
+void
+orc_process_int32 (gint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int32;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int32_clamp */
+#ifdef DISABLE_ORC
+void
+orc_process_int32_clamp (gint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 1: loadpl */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulslq */
+    var36.i = ((orc_int64) var33.i) * ((orc_int64) var34.i);
+    /* 3: shrsq */
+    var37.i = var36.i >> 27;
+    /* 4: convsssql */
+    var35.i = ORC_CLAMP_SL (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int32_clamp (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 1: loadpl */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulslq */
+    var36.i = ((orc_int64) var33.i) * ((orc_int64) var34.i);
+    /* 3: shrsq */
+    var37.i = var36.i >> 27;
+    /* 4: convsssql */
+    var35.i = ORC_CLAMP_SL (var37.i);
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int32_clamp;
+void
+orc_process_int32_clamp (gint32 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int32_clamp;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int16 */
+#ifdef DISABLE_ORC
+void
+orc_process_int16 (gint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 1: loadpw */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr0[i];
+    /* 2: mulswl */
+    var36.i = var33.i * var34.i;
+    /* 3: shrsl */
+    var37.i = var36.i >> 11;
+    /* 4: convlw */
+    var35.i = var37.i;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 1: loadpw */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr0[i];
+    /* 2: mulswl */
+    var36.i = var33.i * var34.i;
+    /* 3: shrsl */
+    var37.i = var36.i >> 11;
+    /* 4: convlw */
+    var35.i = var37.i;
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int16;
+void
+orc_process_int16 (gint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int16;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int16_clamp */
+#ifdef DISABLE_ORC
+void
+orc_process_int16_clamp (gint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 1: loadpw */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr0[i];
+    /* 2: mulswl */
+    var36.i = var33.i * var34.i;
+    /* 3: shrsl */
+    var37.i = var36.i >> 11;
+    /* 4: convssslw */
+    var35.i = ORC_CLAMP_SW (var37.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int16_clamp (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 1: loadpw */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr0[i];
+    /* 2: mulswl */
+    var36.i = var33.i * var34.i;
+    /* 3: shrsl */
+    var37.i = var36.i >> 11;
+    /* 4: convssslw */
+    var35.i = ORC_CLAMP_SW (var37.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int16_clamp;
+void
+orc_process_int16_clamp (gint16 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int16_clamp;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int8 */
+#ifdef DISABLE_ORC
+void
+orc_process_int8 (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) d1;
+
+  /* 1: loadpb */
+  var34 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr0[i];
+    /* 2: mulsbw */
+    var36.i = var33 * var34;
+    /* 3: shrsw */
+    var37.i = var36.i >> 3;
+    /* 4: convwb */
+    var35 = var37.i;
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+
+  /* 1: loadpb */
+  var34 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr0[i];
+    /* 2: mulsbw */
+    var36.i = var33 * var34;
+    /* 3: shrsw */
+    var37.i = var36.i >> 3;
+    /* 4: convwb */
+    var35 = var37.i;
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int8;
+void
+orc_process_int8 (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int8;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_int8_clamp */
+#ifdef DISABLE_ORC
+void
+orc_process_int8_clamp (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) d1;
+
+  /* 1: loadpb */
+  var34 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr0[i];
+    /* 2: mulsbw */
+    var36.i = var33 * var34;
+    /* 3: shrsw */
+    var37.i = var36.i >> 3;
+    /* 4: convssswb */
+    var35 = ORC_CLAMP_SB (var37.i);
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_int8_clamp (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+
+  /* 1: loadpb */
+  var34 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr0[i];
+    /* 2: mulsbw */
+    var36.i = var33 * var34;
+    /* 3: shrsw */
+    var37.i = var36.i >> 3;
+    /* 4: convssswb */
+    var35 = ORC_CLAMP_SB (var37.i);
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_int8_clamp;
+void
+orc_process_int8_clamp (gint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_int8_clamp;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_memset_f64 */
+#ifdef DISABLE_ORC
+void
+orc_memset_f64 (gdouble * ORC_RESTRICT d1, double p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 0: loadpq */
+  var32.f = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_orc_memset_f64 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+  orc_union64 var33;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 0: loadpq */
+  var32.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: copyq */
+    var33.i = var32.i;
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_memset_f64;
+void
+orc_memset_f64 (gdouble * ORC_RESTRICT d1, double p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_memset_f64;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union64 tmp;
+    tmp.f = p1;
+    ex->params[ORC_VAR_P1] = tmp.x2[0];
+    ex->params[ORC_VAR_T1] = tmp.x2[1];
+  }
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_prepare_volumes */
+#ifdef DISABLE_ORC
+void
+orc_prepare_volumes (gdouble * ORC_RESTRICT d1,
+    const gboolean * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x3ff0000000000000);  /* 1f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var37.f = var33.i;
+    /* 3: subd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _dest1.f = _src1.f - _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: loadq */
+    var35 = ptr0[i];
+    /* 5: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var38.i);
+      _dest1.f = _src1.f * _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 6: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_prepare_volumes (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x3ff0000000000000);  /* 1f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var37.f = var33.i;
+    /* 3: subd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var37.i);
+      _dest1.f = _src1.f - _src2.f;
+      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: loadq */
+    var35 = ptr0[i];
+    /* 5: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var38.i);
+      _dest1.f = _src1.f * _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 6: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_prepare_volumes;
+void
+orc_prepare_volumes (gdouble * ORC_RESTRICT d1,
+    const gboolean * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_prepare_volumes;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_f64_1ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_f64_1ch (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+  orc_union64 var34;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr0[i];
+    /* 1: loadq */
+    var33 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_f64_1ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var32;
+  orc_union64 var33;
+  orc_union64 var34;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var32 = ptr0[i];
+    /* 1: loadq */
+    var33 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest1.f = _src1.f * _src2.f;
+      var34.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_f64_1ch;
+void
+orc_process_controlled_f64_1ch (gdouble * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_f64_1ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_f32_1ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_f32_1ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest.f = _src1.f;
+      var36.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: loadl */
+    var34 = ptr0[i];
+    /* 3: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var34.i);
+      _src2.i = ORC_DENORMAL (var36.i);
+      _dest1.f = _src1.f * _src2.f;
+      var35.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_f32_1ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _dest.f = _src1.f;
+      var36.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: loadl */
+    var34 = ptr0[i];
+    /* 3: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var34.i);
+      _src2.i = ORC_DENORMAL (var36.i);
+      _dest1.f = _src1.f * _src2.f;
+      var35.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_f32_1ch;
+void
+orc_process_controlled_f32_1ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_f32_1ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_f32_2ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_f32_2ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest.f = _src1.f;
+      var37.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var37.i;
+      var38.i = _dest.i;
+    }
+    /* 3: loadq */
+    var35 = ptr0[i];
+    /* 4: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.x2[0]);
+      _src2.i = ORC_DENORMAL (var38.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var36.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.x2[1]);
+      _src2.i = ORC_DENORMAL (var38.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var36.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_f32_2ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var34 = ptr4[i];
+    /* 1: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest.f = _src1.f;
+      var37.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 2: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var37.i;
+      var38.i = _dest.i;
+    }
+    /* 3: loadq */
+    var35 = ptr0[i];
+    /* 4: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.x2[0]);
+      _src2.i = ORC_DENORMAL (var38.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var36.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var35.x2[1]);
+      _src2.i = ORC_DENORMAL (var38.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var36.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 5: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_f32_2ch;
+void
+orc_process_controlled_f32_2ch (gfloat * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_f32_2ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_int32_1ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_int32_1ch (gint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 2: loadq */
+    var34 = ptr4[i];
+    /* 3: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: convdl */
+    {
+      int tmp;
+      tmp = var37.f;
+      if (tmp == 0x80000000 && !(var37.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_int32_1ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union64 var34;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 2: loadq */
+    var34 = ptr4[i];
+    /* 3: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: convdl */
+    {
+      int tmp;
+      tmp = var37.f;
+      if (tmp == 0x80000000 && !(var37.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_int32_1ch;
+void
+orc_process_controlled_int32_1ch (gint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_int32_1ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_int16_1ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_int16_1ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr0[i];
+    /* 1: convswl */
+    var37.i = var34.i;
+    /* 2: convlf */
+    var38.f = var37.i;
+    /* 3: loadq */
+    var35 = ptr4[i];
+    /* 4: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _dest.f = _src1.f;
+      var39.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 5: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var38.i);
+      _src2.i = ORC_DENORMAL (var39.i);
+      _dest1.f = _src1.f * _src2.f;
+      var40.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 6: convfl */
+    {
+      int tmp;
+      tmp = (int) var40.f;
+      if (tmp == 0x80000000 && !(var40.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var41.i = tmp;
+    }
+    /* 7: convssslw */
+    var36.i = ORC_CLAMP_SW (var41.i);
+    /* 8: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_int16_1ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union64 var35;
+  orc_union16 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr0[i];
+    /* 1: convswl */
+    var37.i = var34.i;
+    /* 2: convlf */
+    var38.f = var37.i;
+    /* 3: loadq */
+    var35 = ptr4[i];
+    /* 4: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
+      _dest.f = _src1.f;
+      var39.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 5: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var38.i);
+      _src2.i = ORC_DENORMAL (var39.i);
+      _dest1.f = _src1.f * _src2.f;
+      var40.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 6: convfl */
+    {
+      int tmp;
+      tmp = (int) var40.f;
+      if (tmp == 0x80000000 && !(var40.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var41.i = tmp;
+    }
+    /* 7: convssslw */
+    var36.i = ORC_CLAMP_SW (var41.i);
+    /* 8: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_int16_1ch;
+void
+orc_process_controlled_int16_1ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_int16_1ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_int16_2ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_int16_2ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union32 var40;
+  orc_union64 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr0[i];
+    /* 1: convswl */
+    var38.x2[0] = var35.x2[0];
+    var38.x2[1] = var35.x2[1];
+    /* 2: convlf */
+    var39.x2f[0] = var38.x2[0];
+    var39.x2f[1] = var38.x2[1];
+    /* 3: loadq */
+    var36 = ptr4[i];
+    /* 4: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var40.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 5: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var40.i;
+      var41.i = _dest.i;
+    }
+    /* 6: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var41.x2[0]);
+      _src2.i = ORC_DENORMAL (var39.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var42.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var41.x2[1]);
+      _src2.i = ORC_DENORMAL (var39.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var42.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 7: convfl */
+    {
+      int tmp;
+      tmp = (int) var42.x2f[0];
+      if (tmp == 0x80000000 && !(var42.x2[0] & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.x2[0] = tmp;
+    }
+    {
+      int tmp;
+      tmp = (int) var42.x2f[1];
+      if (tmp == 0x80000000 && !(var42.x2[1] & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.x2[1] = tmp;
+    }
+    /* 8: convssslw */
+    var37.x2[0] = ORC_CLAMP_SW (var43.x2[0]);
+    var37.x2[1] = ORC_CLAMP_SW (var43.x2[1]);
+    /* 9: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_int16_2ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union32 var40;
+  orc_union64 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr0[i];
+    /* 1: convswl */
+    var38.x2[0] = var35.x2[0];
+    var38.x2[1] = var35.x2[1];
+    /* 2: convlf */
+    var39.x2f[0] = var38.x2[0];
+    var39.x2f[1] = var38.x2[1];
+    /* 3: loadq */
+    var36 = ptr4[i];
+    /* 4: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var40.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 5: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var40.i;
+      _dest.x2[1] = var40.i;
+      var41.i = _dest.i;
+    }
+    /* 6: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var41.x2[0]);
+      _src2.i = ORC_DENORMAL (var39.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var42.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var41.x2[1]);
+      _src2.i = ORC_DENORMAL (var39.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var42.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 7: convfl */
+    {
+      int tmp;
+      tmp = (int) var42.x2f[0];
+      if (tmp == 0x80000000 && !(var42.x2[0] & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.x2[0] = tmp;
+    }
+    {
+      int tmp;
+      tmp = (int) var42.x2f[1];
+      if (tmp == 0x80000000 && !(var42.x2[1] & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.x2[1] = tmp;
+    }
+    /* 8: convssslw */
+    var37.x2[0] = ORC_CLAMP_SW (var43.x2[0]);
+    var37.x2[1] = ORC_CLAMP_SW (var43.x2[1]);
+    /* 9: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_int16_2ch;
+void
+orc_process_controlled_int16_2ch (gint16 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_int16_2ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_int8_1ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_int8_1ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_int8 var35;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr0[i];
+    /* 1: convsbw */
+    var38.i = var35;
+    /* 2: convswl */
+    var39.i = var38.i;
+    /* 3: convlf */
+    var40.f = var39.i;
+    /* 4: loadq */
+    var36 = ptr4[i];
+    /* 5: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var41.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 6: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.i);
+      _src2.i = ORC_DENORMAL (var41.i);
+      _dest1.f = _src1.f * _src2.f;
+      var42.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 7: convfl */
+    {
+      int tmp;
+      tmp = (int) var42.f;
+      if (tmp == 0x80000000 && !(var42.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.i = tmp;
+    }
+    /* 8: convlw */
+    var44.i = var43.i;
+    /* 9: convssswb */
+    var37 = ORC_CLAMP_SB (var44.i);
+    /* 10: storeb */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_int8_1ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_int8 var35;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union16 var44;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr0[i];
+    /* 1: convsbw */
+    var38.i = var35;
+    /* 2: convswl */
+    var39.i = var38.i;
+    /* 3: convlf */
+    var40.f = var39.i;
+    /* 4: loadq */
+    var36 = ptr4[i];
+    /* 5: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var41.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 6: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.i);
+      _src2.i = ORC_DENORMAL (var41.i);
+      _dest1.f = _src1.f * _src2.f;
+      var42.i = ORC_DENORMAL (_dest1.i);
+    }
+    /* 7: convfl */
+    {
+      int tmp;
+      tmp = (int) var42.f;
+      if (tmp == 0x80000000 && !(var42.i & 0x80000000))
+        tmp = 0x7fffffff;
+      var43.i = tmp;
+    }
+    /* 8: convlw */
+    var44.i = var43.i;
+    /* 9: convssswb */
+    var37 = ORC_CLAMP_SB (var44.i);
+    /* 10: storeb */
+    ptr0[i] = var37;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_int8_1ch;
+void
+orc_process_controlled_int8_1ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_int8_1ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+/* orc_process_controlled_int8_2ch */
+#ifdef DISABLE_ORC
+void
+orc_process_controlled_int8_2ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union16 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+  orc_union32 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr0[i];
+    /* 1: convsbw */
+    var38.x2[0] = var35.x2[0];
+    var38.x2[1] = var35.x2[1];
+    /* 2: convswl */
+    var39.x2[0] = var38.x2[0];
+    var39.x2[1] = var38.x2[1];
+    /* 3: convlf */
+    var40.x2f[0] = var39.x2[0];
+    var40.x2f[1] = var39.x2[1];
+    /* 4: loadq */
+    var36 = ptr4[i];
+    /* 5: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var41.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 6: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var42.i = _dest.i;
+    }
+    /* 7: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.x2[0]);
+      _src2.i = ORC_DENORMAL (var42.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var43.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.x2[1]);
+      _src2.i = ORC_DENORMAL (var42.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var43.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 8: convfl */
+    {
+      int tmp;
+      tmp = (int) var43.x2f[0];
+      if (tmp == 0x80000000 && !(var43.x2[0] & 0x80000000))
+        tmp = 0x7fffffff;
+      var44.x2[0] = tmp;
+    }
+    {
+      int tmp;
+      tmp = (int) var43.x2f[1];
+      if (tmp == 0x80000000 && !(var43.x2[1] & 0x80000000))
+        tmp = 0x7fffffff;
+      var44.x2[1] = tmp;
+    }
+    /* 9: convlw */
+    var45.x2[0] = var44.x2[0];
+    var45.x2[1] = var44.x2[1];
+    /* 10: convssswb */
+    var37.x2[0] = ORC_CLAMP_SB (var45.x2[0]);
+    var37.x2[1] = ORC_CLAMP_SB (var45.x2[1]);
+    /* 11: storew */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_orc_process_controlled_int8_2ch (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union16 var35;
+  orc_union64 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+  orc_union32 var41;
+  orc_union64 var42;
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr0[i];
+    /* 1: convsbw */
+    var38.x2[0] = var35.x2[0];
+    var38.x2[1] = var35.x2[1];
+    /* 2: convswl */
+    var39.x2[0] = var38.x2[0];
+    var39.x2[1] = var38.x2[1];
+    /* 3: convlf */
+    var40.x2f[0] = var39.x2[0];
+    var40.x2f[1] = var39.x2[1];
+    /* 4: loadq */
+    var36 = ptr4[i];
+    /* 5: convdf */
+    {
+      orc_union64 _src1;
+      orc_union32 _dest;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _dest.f = _src1.f;
+      var41.i = ORC_DENORMAL (_dest.i);
+    }
+    /* 6: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var41.i;
+      var42.i = _dest.i;
+    }
+    /* 7: mulf */
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.x2[0]);
+      _src2.i = ORC_DENORMAL (var42.x2[0]);
+      _dest1.f = _src1.f * _src2.f;
+      var43.x2[0] = ORC_DENORMAL (_dest1.i);
+    }
+    {
+      orc_union32 _src1;
+      orc_union32 _src2;
+      orc_union32 _dest1;
+      _src1.i = ORC_DENORMAL (var40.x2[1]);
+      _src2.i = ORC_DENORMAL (var42.x2[1]);
+      _dest1.f = _src1.f * _src2.f;
+      var43.x2[1] = ORC_DENORMAL (_dest1.i);
+    }
+    /* 8: convfl */
+    {
+      int tmp;
+      tmp = (int) var43.x2f[0];
+      if (tmp == 0x80000000 && !(var43.x2[0] & 0x80000000))
+        tmp = 0x7fffffff;
+      var44.x2[0] = tmp;
+    }
+    {
+      int tmp;
+      tmp = (int) var43.x2f[1];
+      if (tmp == 0x80000000 && !(var43.x2[1] & 0x80000000))
+        tmp = 0x7fffffff;
+      var44.x2[1] = tmp;
+    }
+    /* 9: convlw */
+    var45.x2[0] = var44.x2[0];
+    var45.x2[1] = var44.x2[1];
+    /* 10: convssswb */
+    var37.x2[0] = ORC_CLAMP_SB (var45.x2[0]);
+    var37.x2[1] = ORC_CLAMP_SB (var45.x2[1]);
+    /* 11: storew */
+    ptr0[i] = var37;
+  }
+
+}
+
+static OrcProgram *_orc_program_orc_process_controlled_int8_2ch;
+void
+orc_process_controlled_int8_2ch (gint8 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  OrcProgram *p = _orc_program_orc_process_controlled_int8_2ch;
+  void (*func) (OrcExecutor *);
+
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
+
+
+void
+gst_volume_orc_init (void)
+{
+#ifndef DISABLE_ORC
+  {
+    /* orc_scalarmultiply_f64_ns */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_scalarmultiply_f64_ns");
+    orc_program_set_backup_function (p, _backup_orc_scalarmultiply_f64_ns);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_parameter_double (p, 8, "p1");
+
+    orc_program_append_2 (p, "muld", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_scalarmultiply_f64_ns = p;
+  }
+  {
+    /* orc_scalarmultiply_f32_ns */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_scalarmultiply_f32_ns");
+    orc_program_set_backup_function (p, _backup_orc_scalarmultiply_f32_ns);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_parameter_float (p, 4, "p1");
+
+    orc_program_append_2 (p, "mulf", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_scalarmultiply_f32_ns = p;
+  }
+  {
+    /* orc_process_int32 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int32");
+    orc_program_set_backup_function (p, _backup_orc_process_int32);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_constant (p, 4, 0x0000001b, "c1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_temporary (p, 8, "t1");
+
+    orc_program_append_2 (p, "mulslq", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsq", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convql", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int32 = p;
+  }
+  {
+    /* orc_process_int32_clamp */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int32_clamp");
+    orc_program_set_backup_function (p, _backup_orc_process_int32_clamp);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_constant (p, 4, 0x0000001b, "c1");
+    orc_program_add_parameter (p, 4, "p1");
+    orc_program_add_temporary (p, 8, "t1");
+
+    orc_program_append_2 (p, "mulslq", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsq", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convsssql", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int32_clamp = p;
+  }
+  {
+    /* orc_process_int16 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int16");
+    orc_program_set_backup_function (p, _backup_orc_process_int16);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_constant (p, 4, 0x0000000b, "c1");
+    orc_program_add_parameter (p, 2, "p1");
+    orc_program_add_temporary (p, 4, "t1");
+
+    orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int16 = p;
+  }
+  {
+    /* orc_process_int16_clamp */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int16_clamp");
+    orc_program_set_backup_function (p, _backup_orc_process_int16_clamp);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_constant (p, 4, 0x0000000b, "c1");
+    orc_program_add_parameter (p, 2, "p1");
+    orc_program_add_temporary (p, 4, "t1");
+
+    orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssslw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int16_clamp = p;
+  }
+  {
+    /* orc_process_int8 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int8");
+    orc_program_set_backup_function (p, _backup_orc_process_int8);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_constant (p, 4, 0x00000003, "c1");
+    orc_program_add_parameter (p, 1, "p1");
+    orc_program_add_temporary (p, 2, "t1");
+
+    orc_program_append_2 (p, "mulsbw", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int8 = p;
+  }
+  {
+    /* orc_process_int8_clamp */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_int8_clamp");
+    orc_program_set_backup_function (p, _backup_orc_process_int8_clamp);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_constant (p, 4, 0x00000003, "c1");
+    orc_program_add_parameter (p, 1, "p1");
+    orc_program_add_temporary (p, 2, "t1");
+
+    orc_program_append_2 (p, "mulsbw", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_P1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssswb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_int8_clamp = p;
+  }
+  {
+    /* orc_memset_f64 */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_memset_f64");
+    orc_program_set_backup_function (p, _backup_orc_memset_f64);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_parameter_double (p, 8, "p1");
+
+    orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_memset_f64 = p;
+  }
+  {
+    /* orc_prepare_volumes */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_prepare_volumes");
+    orc_program_set_backup_function (p, _backup_orc_prepare_volumes);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_source (p, 4, "s1");
+    orc_program_add_constant_int64 (p, 8, 0x3ff0000000000000ULL, "c1");
+    orc_program_add_temporary (p, 8, "t1");
+
+    orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "subd", 0, ORC_VAR_T1, ORC_VAR_C1, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "muld", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_prepare_volumes = p;
+  }
+  {
+    /* orc_process_controlled_f64_1ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_f64_1ch");
+    orc_program_set_backup_function (p, _backup_orc_process_controlled_f64_1ch);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_source (p, 8, "s1");
+
+    orc_program_append_2 (p, "muld", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_f64_1ch = p;
+  }
+  {
+    /* orc_process_controlled_f32_1ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_f32_1ch");
+    orc_program_set_backup_function (p, _backup_orc_process_controlled_f32_1ch);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_f32_1ch = p;
+  }
+  {
+    /* orc_process_controlled_f32_2ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_f32_2ch");
+    orc_program_set_backup_function (p, _backup_orc_process_controlled_f32_2ch);
+    orc_program_add_destination (p, 8, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 8, "t2");
+
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 1, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T2,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_f32_2ch = p;
+  }
+  {
+    /* orc_process_controlled_int32_1ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_int32_1ch");
+    orc_program_set_backup_function (p,
+        _backup_orc_process_controlled_int32_1ch);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 8, "t1");
+
+    orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convdl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_int32_1ch = p;
+  }
+  {
+    /* orc_process_controlled_int16_1ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_int16_1ch");
+    orc_program_set_backup_function (p,
+        _backup_orc_process_controlled_int16_1ch);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+
+    orc_program_append_2 (p, "convswl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convfl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssslw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_int16_1ch = p;
+  }
+  {
+    /* orc_process_controlled_int16_2ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_int16_2ch");
+    orc_program_set_backup_function (p,
+        _backup_orc_process_controlled_int16_2ch);
+    orc_program_add_destination (p, 4, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 8, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+    orc_program_add_temporary (p, 8, "t3");
+
+    orc_program_append_2 (p, "convswl", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlf", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T2,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convfl", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssslw", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_int16_2ch = p;
+  }
+  {
+    /* orc_process_controlled_int8_1ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_int8_1ch");
+    orc_program_set_backup_function (p,
+        _backup_orc_process_controlled_int8_1ch);
+    orc_program_add_destination (p, 1, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 2, "t1");
+    orc_program_add_temporary (p, 4, "t2");
+    orc_program_add_temporary (p, 4, "t3");
+
+    orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlf", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convfl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssswb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_int8_1ch = p;
+  }
+  {
+    /* orc_process_controlled_int8_2ch */
+    OrcProgram *p;
+
+    p = orc_program_new ();
+    orc_program_set_name (p, "orc_process_controlled_int8_2ch");
+    orc_program_set_backup_function (p,
+        _backup_orc_process_controlled_int8_2ch);
+    orc_program_add_destination (p, 2, "d1");
+    orc_program_add_source (p, 8, "s1");
+    orc_program_add_temporary (p, 4, "t1");
+    orc_program_add_temporary (p, 8, "t2");
+    orc_program_add_temporary (p, 8, "t3");
+
+    orc_program_append_2 (p, "convsbw", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convswl", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlf", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convdf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "mulf", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convfl", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convlw", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1,
+        ORC_VAR_D1);
+    orc_program_append_2 (p, "convssswb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+        ORC_VAR_D1);
+
+    orc_program_compile (p);
+
+    _orc_program_orc_process_controlled_int8_2ch = p;
+  }
+#endif
+}
diff --git a/gst/volume/gstvolumeorc-dist.h b/gst/volume/gstvolumeorc-dist.h
new file mode 100644
index 0000000..45411b8
--- /dev/null
+++ b/gst/volume/gstvolumeorc-dist.h
@@ -0,0 +1,96 @@
+
+/* autogenerated from gstvolumeorc.orc */
+
+#ifndef _GSTVOLUMEORC_H_
+#define _GSTVOLUMEORC_H_
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void gst_volume_orc_init (void);
+
+
+
+#ifndef _ORC_INTEGER_TYPEDEFS_
+#define _ORC_INTEGER_TYPEDEFS_
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <stdint.h>
+typedef int8_t orc_int8;
+typedef int16_t orc_int16;
+typedef int32_t orc_int32;
+typedef int64_t orc_int64;
+typedef uint8_t orc_uint8;
+typedef uint16_t orc_uint16;
+typedef uint32_t orc_uint32;
+typedef uint64_t orc_uint64;
+#define ORC_UINT64_C(x) UINT64_C(x)
+#elif defined(_MSC_VER)
+typedef signed __int8 orc_int8;
+typedef signed __int16 orc_int16;
+typedef signed __int32 orc_int32;
+typedef signed __int64 orc_int64;
+typedef unsigned __int8 orc_uint8;
+typedef unsigned __int16 orc_uint16;
+typedef unsigned __int32 orc_uint32;
+typedef unsigned __int64 orc_uint64;
+#define ORC_UINT64_C(x) (x##Ui64)
+#define inline __inline
+#else
+#include <limits.h>
+typedef signed char orc_int8;
+typedef short orc_int16;
+typedef int orc_int32;
+typedef unsigned char orc_uint8;
+typedef unsigned short orc_uint16;
+typedef unsigned int orc_uint32;
+#if INT_MAX == LONG_MAX
+typedef long long orc_int64;
+typedef unsigned long long orc_uint64;
+#define ORC_UINT64_C(x) (x##ULL)
+#else
+typedef long orc_int64;
+typedef unsigned long orc_uint64;
+#define ORC_UINT64_C(x) (x##UL)
+#endif
+#endif
+typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
+typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
+typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
+#endif
+#ifndef ORC_RESTRICT
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define ORC_RESTRICT restrict
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define ORC_RESTRICT __restrict__
+#else
+#define ORC_RESTRICT
+#endif
+#endif
+void orc_scalarmultiply_f64_ns (double * ORC_RESTRICT d1, double p1, int n);
+void orc_scalarmultiply_f32_ns (float * ORC_RESTRICT d1, float p1, int n);
+void orc_process_int32 (gint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int32_clamp (gint32 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int16 (gint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int16_clamp (gint16 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int8 (gint8 * ORC_RESTRICT d1, int p1, int n);
+void orc_process_int8_clamp (gint8 * ORC_RESTRICT d1, int p1, int n);
+void orc_memset_f64 (gdouble * ORC_RESTRICT d1, double p1, int n);
+void orc_prepare_volumes (gdouble * ORC_RESTRICT d1, const gboolean * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f64_1ch (gdouble * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f32_1ch (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_f32_2ch (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int32_1ch (gint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int16_1ch (gint16 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int16_2ch (gint16 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int8_1ch (gint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+void orc_process_controlled_int8_2ch (gint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/gst/volume/gstvolumeorc.orc b/gst/volume/gstvolumeorc.orc
new file mode 100644
index 0000000..5fdf174
--- /dev/null
+++ b/gst/volume/gstvolumeorc.orc
@@ -0,0 +1,180 @@
+
+.init gst_volume_orc_init
+
+.function orc_scalarmultiply_f64_ns
+.dest 8 d1 double
+.doubleparam 8 p1
+
+muld d1, d1, p1
+
+.function orc_scalarmultiply_f32_ns
+.dest 4 d1 float
+.floatparam 4 p1
+
+mulf d1, d1, p1
+
+.function orc_process_int32
+.dest 4 d1 gint32
+.param 4 p1
+.temp 8 t1
+
+mulslq t1, d1, p1
+shrsq t1, t1, 27
+convql d1, t1
+
+.function orc_process_int32_clamp
+.dest 4 d1 gint32
+.param 4 p1
+.temp 8 t1
+
+mulslq t1, d1, p1
+shrsq t1, t1, 27
+convsssql d1, t1
+
+.function orc_process_int16
+.dest 2 d1 gint16
+.param 2 p1
+.temp 4 t1
+
+mulswl t1, d1, p1
+shrsl t1, t1, 11
+convlw d1, t1
+
+
+.function orc_process_int16_clamp
+.dest 2 d1 gint16
+.param 2 p1
+.temp 4 t1
+
+mulswl t1, d1, p1
+shrsl t1, t1, 11
+convssslw d1, t1
+
+.function orc_process_int8
+.dest 1 d1 gint8
+.param 1 p1
+.temp 2 t1
+
+mulsbw t1, d1, p1
+shrsw t1, t1, 3
+convwb d1, t1
+
+
+.function orc_process_int8_clamp
+.dest 1 d1 gint8
+.param 1 p1
+.temp 2 t1
+
+mulsbw t1, d1, p1
+shrsw t1, t1, 3
+convssswb d1, t1
+
+.function orc_memset_f64
+.dest 8 d1 gdouble
+.doubleparam 8 p1
+
+copyq d1, p1
+
+.function orc_prepare_volumes
+.dest 8 d1 gdouble
+.source 4 s1 gboolean
+.temp 8 t1
+
+convld t1, s1
+subd t1, 0x3FF0000000000000L, t1
+muld d1, d1, t1
+
+.function orc_process_controlled_f64_1ch
+.dest 8 d1 gdouble
+.source 8 s1 gdouble
+
+muld d1, d1, s1
+
+.function orc_process_controlled_f32_1ch
+.dest 4 d1 gfloat
+.source 8 s1 gdouble
+.temp 4 t1
+
+convdf t1, s1
+mulf d1, d1, t1
+
+.function orc_process_controlled_f32_2ch
+.dest 8 d1 gfloat
+.source 8 s1 gdouble
+.temp 4 t1
+.temp 8 t2
+
+convdf t1, s1
+mergelq t2, t1, t1
+x2 mulf d1, d1, t2
+
+.function orc_process_controlled_int32_1ch
+.dest 4 d1 gint32
+.source 8 s1 gdouble
+.temp 8 t1
+
+convld t1, d1
+muld t1, t1, s1
+convdl d1, t1
+
+.function orc_process_controlled_int16_1ch
+.dest 2 d1 gint16
+.source 8 s1 gdouble
+.temp 4 t1
+.temp 4 t2
+
+convswl t1, d1
+convlf t1, t1
+convdf t2, s1
+mulf t1, t1, t2
+convfl t1, t1
+convssslw d1, t1
+
+.function orc_process_controlled_int16_2ch
+.dest 4 d1 gint16
+.source 8 s1 gdouble
+.temp 8 t1
+.temp 4 t2
+.temp 8 t3
+
+x2 convswl t1, d1
+x2 convlf t1, t1
+convdf t2, s1
+mergelq t3, t2, t2
+x2 mulf t3, t3, t1
+x2 convfl t3, t3
+x2 convssslw d1, t3
+
+.function orc_process_controlled_int8_1ch
+.dest 1 d1 gint8
+.source 8 s1 gdouble
+.temp 2 t1
+.temp 4 t2
+.temp 4 t3
+
+convsbw t1, d1
+convswl t2, t1
+convlf t2, t2
+convdf t3, s1
+mulf t2, t2, t3
+convfl t2, t2
+convlw t1, t2
+convssswb d1, t1
+
+.function orc_process_controlled_int8_2ch
+.dest 2 d1 gint8
+.source 8 s1 gdouble
+.temp 4 t1
+.temp 8 t2
+.temp 8 t3
+
+x2 convsbw t1, d1
+x2 convswl t2, t1
+x2 convlf t2, t2
+convdf t1, s1
+mergelq t3, t1, t1
+x2 mulf t2, t2, t3
+x2 convfl t2, t2
+x2 convlw t1, t2
+x2 convssswb d1, t1
+
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..6781b98
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755
index 0000000..fa4b1e1
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8413 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:	$host
+#       shell:		$SHELL
+#       compiler:		$LTCC
+#       compiler flags:		$LTCFLAGS
+#       linker:		$LD (gnu? $with_gnu_ld)
+#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3
+#       automake:		$automake_version
+#       autoconf:		$autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="2.2.6b Debian-2.2.6b-2ubuntu3"
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+	  export $lt_var
+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+	fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+	IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+	my_arg=`$ECHO "X$1" | $Xsed \
+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+	    $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+	s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+	s/^# *$//
+	s/\$progname/'$progname'/
+	p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+	s/^# *$//
+	s*\$progname*'$progname'*
+	s*\$host*'"$host"'*
+	s*\$SHELL*'"$SHELL"'*
+	s*\$LTCC*'"$LTCC"'*
+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+	s*\$LD*'"$LD"'*
+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	taglist="$taglist $tagname"
+
+	# Evaluate the configuration.  Be careful to quote the path
+	# and the sed script, to avoid splitting on whitespace, but
+	# also don't use non-portable quotes within backquotes within
+	# quotes we have to do it in 2 steps:
+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	eval "$extractedcf"
+      else
+	func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)		func_config					;;
+
+      --debug)		preserve_args="$preserve_args $opt"
+			func_echo "enabling shell trace mode"
+			opt_debug='set -x'
+			$opt_debug
+			;;
+
+      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+			execute_dlfiles="$execute_dlfiles $1"
+			shift
+			;;
+
+      --dry-run | -n)	opt_dry_run=:					;;
+      --features)       func_features					;;
+      --finish)		mode="finish"					;;
+
+      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+			case $1 in
+			  # Valid mode arguments:
+			  clean)	;;
+			  compile)	;;
+			  execute)	;;
+			  finish)	;;
+			  install)	;;
+			  link)		;;
+			  relink)	;;
+			  uninstall)	;;
+
+			  # Catch anything else as an error
+			  *) func_error "invalid argument for $opt"
+			     exit_cmd=exit
+			     break
+			     ;;
+		        esac
+
+			mode="$1"
+			shift
+			;;
+
+      --preserve-dup-deps)
+			opt_duplicate_deps=:				;;
+
+      --quiet|--silent)	preserve_args="$preserve_args $opt"
+			opt_silent=:
+			;;
+
+      --verbose| -v)	preserve_args="$preserve_args $opt"
+			opt_silent=false
+			;;
+
+      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
+			preserve_args="$preserve_args $opt $1"
+			func_enable_tag "$1"	# tagname is set here
+			shift
+			;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+			func_opt_split "$opt"
+			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+			shift
+			;;
+
+      -\?|-h)		func_usage					;;
+      --help)		opt_help=:					;;
+      --version)	func_version					;;
+
+      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
+
+      *)		nonopt="$opt"
+			break
+			;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case "$lalib_p_line" in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+	func_dirname_and_basename "$1" "" "."
+	func_stripname '' '.exe' "$func_basename_result"
+	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+	CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_quote_for_eval "$arg"
+	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	    done
+	    case "$@ " in
+	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with \`--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify \`-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  later="$later $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+	  for arg in $args; do
+	    IFS="$save_ifs"
+	    func_quote_for_eval "$arg"
+	    lastarg="$lastarg $func_quote_for_eval_result"
+	  done
+	  IFS="$save_ifs"
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  base_compile="$base_compile $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+	|| func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  dir="$dir/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+	;;
+
+      *)
+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	$ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+	libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	$ECHO "pages."
+	;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+	files="$files $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+	case " $install_prog " in
+	*[\\\ /]cp\ *) ;;
+	*) prev=$arg ;;
+	esac
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	staticlibs="$staticlibs $file"
+	;;
+
+      *.la)
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir="$func_dirname_result"
+	dir="$dir$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking \`$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname="$1"
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme="$stripme"
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=""
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name="$func_basename_result"
+	instname="$dir/$name"i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "\`$lib' has not been installed in \`$libdir'"
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if test "$finalize" = yes; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file="$func_basename_result"
+	        outputname="$tmpdir/$file"
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_silent || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink \`$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file="$outputname"
+	      else
+	        func_warning "cannot relink \`$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms="${my_outputname}S.c"
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist="$output_objdir/${my_outputname}.nm"
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test "$dlself" = yes; then
+	  func_verbose "generating symbol list for \`$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_verbose "extracting global C symbols from \`$progfile'"
+	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols="$output_objdir/$outputname.exp"
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_basename "$dlprefile"
+	  name="$func_basename_result"
+	  $opt_dry_run || {
+	    eval '$ECHO ": $name " >> "$nlist"'
+	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	  }
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc* )
+	    $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+	    lt_dlsym_const= ;;
+	  *osf5*)
+	    echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+	    lt_dlsym_const= ;;
+	  *)
+	    lt_dlsym_const=const ;;
+	  esac
+
+	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    if test "X$my_pic_p" != Xno; then
+	      pic_flag_for_symtable=" $pic_flag"
+	    fi
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) symtab_cflags="$symtab_cflags $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+	$SED -n -e '
+	    1,100{
+		/ I /{
+		    s,.*,import,
+		    p
+		    q
+		}
+	    }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`basename "$darwin_archive"`
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+	func_emit_wrapper_part1_arg1=no
+	if test -n "$1" ; then
+	  func_emit_wrapper_part1_arg1=$1
+	fi
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+	$ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+	func_emit_wrapper_part2_arg1=no
+	if test -n "$1" ; then
+	  func_emit_wrapper_part2_arg1=$1
+	fi
+
+	$ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	# fixup the dll searchpath if we need to.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+	case $host in
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2* | *-cegcc*)
+	  $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+	  ;;
+
+	*)
+	  $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+	  ;;
+	esac
+	$ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=no
+	if test -n "$1" ; then
+	  func_emit_wrapper_arg1=$1
+	fi
+
+	# split this up so that func_emit_cwrapperexe_src
+	# can call each part independently.
+	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+	    cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+	    func_emit_wrapper_part1 yes |
+	        $SED -e 's/\([\\"]\)/\\\1/g' \
+	             -e 's/^/  "/' -e 's/$/\\n"/'
+	    echo ";"
+	    cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+	    func_emit_wrapper_part2 yes |
+	        $SED -e 's/\([\\"]\)/\\\1/g' \
+	             -e 's/^/  "/' -e 's/$/\\n"/'
+	    echo ";"
+
+	    cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test "$fast_install" = yes; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+	{
+EOF
+	    case "$host" in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  printf ("%s", script_text_part1);
+	  printf ("%s", script_text_part2);
+	  return 0;
+	}
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+			  tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+			  actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+			  target_name));
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = q - p;
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal ("getcwd failed");
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+			      tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  char *errstr = strerror (errno);
+	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+	*str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      dlfiles="$dlfiles $arg"
+	    else
+	      dlprefiles="$dlprefiles $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file \`$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      moreargs="$moreargs $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none &&
+		   test "$non_pic_object" = none; then
+		  func_fatal_error "cannot find name of object for \`$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir="$func_dirname_result"
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      dlfiles="$dlfiles $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    dlprefiles="$dlprefiles $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir="$func_dirname_result"
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "\`$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file \`$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) rpath="$rpath $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) xrpath="$xrpath $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  weak_libs="$weak_libs $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname '-L' '' "$arg"
+	dir=$func_stripname_result
+	if test -z "$dir"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between \`-L' and \`$1'"
+	  else
+	    func_fatal_error "need path for \`-L' option"
+	  fi
+	fi
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    deplibs="$deplibs System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+	compiler_flags="$compiler_flags $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	compiler_flags="$compiler_flags $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module="${wl}-multi_module"
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "\`-no-install' is ignored for $host"
+	  func_warning "assuming \`-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) xrpath="$xrpath $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  arg="$arg $wl$func_quote_for_eval_result"
+	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  arg="$arg $wl$func_quote_for_eval_result"
+	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+	  linker_flags="$linker_flags $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      *.$objext)
+	# A standard object.
+	objs="$objs $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none &&
+	     test "$non_pic_object" = none; then
+	    func_fatal_error "cannot find name of object for \`$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir="$func_dirname_result"
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		dlfiles="$dlfiles $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      dlprefiles="$dlprefiles $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir="$func_dirname_result"
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "\`$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+	case "$libs " in
+	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  esac
+	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link)
+	  libs="$deplibs %DEPLIBS%"
+	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+	  ;;
+	esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  case $lib in
+	  *.la)	func_source "$lib" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) deplibs="$deplibs $deplib" ;;
+	    esac
+	  done
+	done
+	libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    compiler_flags="$compiler_flags $deplib"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    func_warning "\`-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test "$linkmode" = lib; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    func_dirname "$lib" "" "."
+		    ladir="$func_dirname_result"
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    ;;
+	  *)
+	    func_warning "\`-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    func_stripname '-R' '' "$deplib"
+	    dir=$func_stripname_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=no
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=yes
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=yes
+		;;
+	      esac
+	      if test "$valid_a_lib" != yes; then
+		$ECHO
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		$ECHO "*** I have the capability to make that library automatically link in when"
+		$ECHO "*** you link to this library.  But I can only do this if you have a"
+		$ECHO "*** shared version of the library, which you do not appear to have"
+		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
+		$ECHO "*** that it is just a static archive that I should not use here."
+	      else
+		$ECHO
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      newdlprefiles="$newdlprefiles $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      newdlfiles="$newdlfiles $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+	fi
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir="$func_dirname_result"
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for \`$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+	      if $opt_duplicate_deps ; then
+		case "$tmp_libs " in
+		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+		esac
+	      fi
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	for l in $old_library $library_names; do
+	  linklib="$l"
+	done
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for \`$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname="$func_basename_result"
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library \`$lib' was moved."
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    notinst_path="$notinst_path $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    notinst_path="$notinst_path $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir" && test "$linkmode" = prog; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	    # Keep a list of preopened convenience libraries to check
+	    # that they are being used correctly in the link pass.
+	    test -z "$libdir" && \
+		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
+	  else
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
+	  fi
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         newlib_search_path="$newlib_search_path $func_stripname_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_duplicate_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { { test "$prefer_static_libs" = no ||
+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath:" in
+	      *"$absdir:"*) ;;
+	      *) temp_rpath="$temp_rpath$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc*)
+	      # No point in relinking DLLs because paths are not encoded
+	      notinst_deplibs="$notinst_deplibs $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test "$installed" = no; then
+	      notinst_deplibs="$notinst_deplibs $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=""
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule="$dlpremoduletest"
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	    $ECHO
+	    if test "$linkmode" = prog; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname="$1"
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    func_basename "$soroot"
+	    soname="$func_basename_result"
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for \`$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we can not
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null ; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library" ; then
+			  $ECHO
+			  $ECHO "*** And there doesn't seem to be a static archive available"
+			  $ECHO "*** The link will probably fail, sorry"
+			else
+			  add="$dir/$old_library"
+			fi
+		      elif test -n "$old_library"; then
+			add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes &&
+	         test "$hardcode_direct_absolute" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes &&
+		 test "$hardcode_minus_L" != yes &&
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes &&
+	       test "$hardcode_direct_absolute" = no; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+		add="$inst_prefix_dir$libdir/$linklib"
+	      else
+		add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    $ECHO
+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    $ECHO "*** I have the capability to make that library automatically link in when"
+	    $ECHO "*** you link to this library.  But I can only do this if you have a"
+	    $ECHO "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      $ECHO "*** But as you try to build a module library, libtool will still create "
+	      $ECHO "*** a static module, that should work as long as the dlopening application"
+	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		$ECHO
+		$ECHO "*** However, this would only work if libtool was able to extract symbol"
+		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		$ECHO "*** not find such a program.  So, this module is probably useless."
+		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    if $opt_duplicate_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+	        func_dirname "$deplib" "" "."
+		dir="$func_dirname_result"
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of \`$dir'"
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl" ; then
+		      depdepl="$absdir/$objdir/$depdepl"
+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path="-L$absdir/$objdir"
+		  ;;
+		esac
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "\`$deplib' seems to be moved"
+
+		  path="-L$absdir"
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+	if test "$linkmode" = "prog"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  tmp_libs="$tmp_libs $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test "$module" = no && \
+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	else
+	  $ECHO
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
+      fi
+
+      test "$dlself" != no && \
+	func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+	func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	shift
+	IFS="$save_ifs"
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to \`-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$1"
+	  number_minor="$2"
+	  number_revision="$3"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_minor"
+	    lt_irix_increment=no
+	    ;;
+	  *)
+	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$1"
+	  revision="$2"
+	  age="$3"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT \`$current' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION \`$revision' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE \`$age' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	irix | nonstopux)
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  verstring="$verstring:${current}.0"
+	  ;;
+
+	qnx)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    func_warning "undefined symbols not allowed in $host shared libraries"
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       removelist="$removelist $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    newdeplibs="$newdeplibs $i"
+		    i=""
+		    ;;
+		  esac
+		fi
+		if test -n "$i" ; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    $ECHO
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    $ECHO "*** I have the capability to make that library automatically link in when"
+		    $ECHO "*** you link to this library.  But I can only do this if you have a"
+		    $ECHO "*** shared version of the library, which I believe you do not have"
+		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		newdeplibs="$newdeplibs $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      newdeplibs="$newdeplibs $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      newdeplibs="$newdeplibs $i"
+		    else
+		      droppeddeps=yes
+		      $ECHO
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      $ECHO "*** I have the capability to make that library automatically link in when"
+		      $ECHO "*** you link to this library.  But I can only do this if you have a"
+		      $ECHO "*** shared version of the library, which you do not appear to have"
+		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  $ECHO
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  $ECHO "*** make it link in!  You will probably need to install it or some"
+		  $ECHO "*** library that it depends on before this library will be fully"
+		  $ECHO "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		newdeplibs="$newdeplibs $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			newdeplibs="$newdeplibs $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$ECHO
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		$ECHO "*** I have the capability to make that library automatically link in when"
+		$ECHO "*** you link to this library.  But I can only do this if you have a"
+		$ECHO "*** shared version of the library, which you do not appear to have"
+		$ECHO "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      newdeplibs="$newdeplibs $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$ECHO
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		$ECHO "*** I have the capability to make that library automatically link in when"
+		$ECHO "*** you link to this library.  But I can only do this if you have a"
+		$ECHO "*** shared version of the library, which you do not appear to have"
+		$ECHO "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+	    done
+	  fi
+	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
+	     $GREP . >/dev/null; then
+	    $ECHO
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    $ECHO "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	  fi
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    $ECHO
+	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    $ECHO "*** a static module, that should work as long as the dlopening"
+	    $ECHO "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      $ECHO
+	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
+	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      $ECHO "*** not find such a program.  So, this module is probably useless."
+	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
+	    $ECHO "*** automatically added whenever a program is linked with this library"
+	    $ECHO "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      $ECHO
+	      $ECHO "*** Since this library must not contain undefined symbols,"
+	      $ECHO "*** because either the platform does not support them or"
+	      $ECHO "*** it was explicitly requested with -no-undefined,"
+	      $ECHO "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    new_libs="$new_libs -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) new_libs="$new_libs $deplib" ;;
+	  esac
+	  ;;
+	*) new_libs="$new_libs $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname="$1"
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  linknames="$linknames $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols="$output_objdir/$libname.uexp"
+	  delfiles="$delfiles $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols="$export_symbols"
+	      export_symbols=
+	      always_export_symbols=yes
+	    fi
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $cmds; do
+	      IFS="$save_ifs"
+	      eval cmd=\"$cmd\"
+	      func_len " $cmd"
+	      len=$func_len_result
+	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols="$export_symbols"
+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    tmp_deplibs="$tmp_deplibs $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test "$compiler_needs_object" = yes &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    generated="$generated $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    libobjs="$libobjs $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    $ECHO 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      $ECHO "$obj" >> $output
+	    done
+	    $ECHO ')' >> $output
+	    delfiles="$delfiles $output"
+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test "$compiler_needs_object" = yes; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      $ECHO "$obj" >> $output
+	    done
+	    delfiles="$delfiles $output"
+	    output=$firstobj\"$file_list_spec$output\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-${k}.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test "X$objlist" = X ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test "$k" -eq 1 ; then
+		    # The first file doesn't have a previous command to add.
+		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-${k}.$objext
+		  objlist=$obj
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	      fi
+	      delfiles="$delfiles $output"
+
+	    else
+	      output=
+	    fi
+
+	    if ${skipped_export-false}; then
+	      func_verbose "generating symbol list for \`$libname.la'"
+	      export_symbols="$output_objdir/$libname.exp"
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    fi
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      $opt_silent || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test "$mode" = relink; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS="$save_ifs"
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          if ${skipped_export-false}; then
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols="$export_symbols"
+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  fi
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  generated="$generated $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  libobjs="$libobjs $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $opt_silent || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$mode" = relink; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+	else
+	  gentop="$output_objdir/${obj}x"
+	  generated="$generated $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+	&& test "$dlopen_self" = unknown \
+	&& test "$dlopen_self_static" = unknown && \
+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test "$tagname" = CXX ; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      compile_command="$compile_command ${wl}-bind_at_load"
+	      finalize_command="$finalize_command ${wl}-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    new_libs="$new_libs -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) new_libs="$new_libs $deplib" ;;
+	  esac
+	  ;;
+	*) new_libs="$new_libs $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+	# Replace the output file specification.
+	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.${objext}"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	func_warning "this platform does not like uninstalled shared libraries"
+	func_warning "\`$output' will be relinked during installation"
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+	case $progpath in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+	esac
+	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
+	    cwrapper="$output_path/$output_name.exe"
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host" ; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save $symfileobj"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  if test "$preload" = yes && test -f "$symfileobj"; then
+	    oldobjs="$oldobjs $symfileobj"
+	  fi
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	generated="$generated $gentop"
+
+	func_extract_archives $gentop $addlibs
+	oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  generated="$generated $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  oldobjs="$oldobjs $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  $ECHO "copying selected object files to avoid basename conflicts..."
+	  gentop="$output_objdir/${outputname}x"
+	  generated="$generated $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase="$func_basename_result"
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      oldobjs="$oldobjs $gentop/$newobj"
+	      ;;
+	    *) oldobjs="$oldobjs $obj" ;;
+	    esac
+	  done
+	fi
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		newdlfiles="$newdlfiles $libdir/$name"
+		;;
+	      *) newdlfiles="$newdlfiles $lib" ;;
+	      esac
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		newdlprefiles="$newdlprefiles $libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlfiles="$newdlfiles $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlprefiles="$newdlprefiles $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+	objdir="$origobjdir"
+      else
+	objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    rmfiles="$rmfiles $objdir/$n"
+	  done
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+	  case "$mode" in
+	  clean)
+	    case "  $library_names " in
+	    # "  " in the beginning catches empty $dlname
+	    *" $dlname "*) ;;
+	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" &&
+	     test "$pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" &&
+	     test "$non_pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    rmfiles="$rmfiles $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      rmfiles="$rmfiles $objdir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644
index 0000000..6252121
--- /dev/null
+++ b/m4/Makefile.am
@@ -0,0 +1,24 @@
+EXTRA_DIST = \
+	check-libheader.m4 \
+	codeset.m4 \
+	freetype2.m4 \
+	gettext.m4 \
+	glibc21.m4 \
+	gst-alsa.m4 \
+	gst-fionread.m4 \
+	gst-ivorbis.m4 \
+	iconv.m4 \
+	intdiv0.m4 \
+	inttypes_h.m4 \
+	inttypes-pri.m4 \
+	lcmessage.m4 \
+	lib-ld.m4 \
+	lib-link.m4 \
+	lib-prefix.m4 \
+	lrintf.m4 \
+	lrint.m4 \
+	ogg.m4 \
+	progtest.m4 \
+	stdint_h.m4 \
+	uintmax_t.m4 \
+	vorbis.m4
diff --git a/m4/Makefile.in b/m4/Makefile.in
new file mode 100644
index 0000000..a1d58af
--- /dev/null
+++ b/m4/Makefile.in
@@ -0,0 +1,581 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = m4
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+	check-libheader.m4 \
+	codeset.m4 \
+	freetype2.m4 \
+	gettext.m4 \
+	glibc21.m4 \
+	gst-alsa.m4 \
+	gst-fionread.m4 \
+	gst-ivorbis.m4 \
+	iconv.m4 \
+	intdiv0.m4 \
+	inttypes_h.m4 \
+	inttypes-pri.m4 \
+	lcmessage.m4 \
+	lib-ld.m4 \
+	lib-link.m4 \
+	lib-prefix.m4 \
+	lrintf.m4 \
+	lrint.m4 \
+	ogg.m4 \
+	progtest.m4 \
+	stdint_h.m4 \
+	uintmax_t.m4 \
+	vorbis.m4
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/m4/README b/m4/README
new file mode 100644
index 0000000..f044598
--- /dev/null
+++ b/m4/README
@@ -0,0 +1,3 @@
+All aclocal .m4 files we need are put here and cat'd to acinclude.m4 in 
+the source root.  Official ones (taken from the relevant devel packages) 
+are named as-is, unofficial ones (or changed ones) get a gst-prefix.
diff --git a/m4/check-libheader.m4 b/m4/check-libheader.m4
new file mode 100644
index 0000000..a7fc5a6
--- /dev/null
+++ b/m4/check-libheader.m4
@@ -0,0 +1,39 @@
+dnl
+dnl CHECK-LIBHEADER(FEATURE-NAME, LIB-NAME, LIB-FUNCTION, HEADER-NAME,
+dnl                 ACTION-IF-FOUND, ACTION-IF-NOT-FOUND,
+dnl                 EXTRA-LDFLAGS, EXTRA-CPPFLAGS)
+dnl
+dnl FEATURE-NAME        - feature name; library and header files are treated
+dnl                       as feature, which we look for
+dnl LIB-NAME            - library name as in AC_CHECK_LIB macro
+dnl LIB-FUNCTION        - library symbol as in AC_CHECK_LIB macro
+dnl HEADER-NAME         - header file name as in AC_CHECK_HEADER
+dnl ACTION-IF-FOUND     - when feature is found then execute given action
+dnl ACTION-IF-NOT-FOUND - when feature is not found then execute given action
+dnl EXTRA-LDFLAGS       - extra linker flags (-L or -l)
+dnl EXTRA-CPPFLAGS      - extra C preprocessor flags, i.e. -I/usr/X11R6/include
+dnl
+dnl Based on GST_CHECK_LIBHEADER from gstreamer plugins 0.3.1.
+dnl
+AC_DEFUN([CHECK_LIBHEADER],
+[
+  AC_CHECK_LIB([$2], [$3], HAVE_[$1]=yes, HAVE_[$1]=no, [$7])
+  check_libheader_feature_name=translit([$1], A-Z, a-z)
+
+  if test "x$HAVE_[$1]" = "xyes"; then
+    check_libheader_save_CPPFLAGS=$CPPFLAGS
+    CPPFLAGS="[$8] $CPPFLAGS"
+    AC_CHECK_HEADER([$4], :, HAVE_[$1]=no)
+    CPPFLAGS=$check_libheader_save_CPPFLAGS
+  fi
+
+  if test "x$HAVE_[$1]" = "xyes"; then
+    ifelse([$5], , :, [$5])
+    AC_MSG_NOTICE($check_libheader_feature_name was found)
+  else
+    ifelse([$6], , :, [$6])
+    AC_MSG_WARN($check_libheader_feature_name not found)
+  fi
+  AC_SUBST(HAVE_[$1])
+]
+)
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644
index 0000000..223955b
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,21 @@
+# codeset.m4 serial 2 (gettext-0.16)
+dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET); return !cs;],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/freetype2.m4 b/m4/freetype2.m4
new file mode 100644
index 0000000..7199071
--- /dev/null
+++ b/m4/freetype2.m4
@@ -0,0 +1,143 @@
+# Configure paths for FreeType2
+# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
+
+dnl AC_CHECK_FT2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for FreeType2, and define FT2_CFLAGS and FT2_LIBS
+dnl
+AC_DEFUN([AC_CHECK_FT2],
+[dnl
+dnl Get the cflags and libraries from the freetype-config script
+dnl
+AC_ARG_WITH(ft-prefix,
+[  --with-ft-prefix=PREFIX
+                          Prefix where FreeType is installed (optional)],
+            ft_config_prefix="$withval", ft_config_prefix="")
+AC_ARG_WITH(ft-exec-prefix,
+[  --with-ft-exec-prefix=PREFIX
+                          Exec prefix where FreeType is installed (optional)],
+            ft_config_exec_prefix="$withval", ft_config_exec_prefix="")
+AC_ARG_ENABLE(freetypetest,
+[  --disable-freetypetest  Do not try to compile and run
+                          a test FreeType program],
+              [], enable_fttest=yes)
+
+if test x$ft_config_exec_prefix != x ; then
+  ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+  fi
+fi
+if test x$ft_config_prefix != x ; then
+  ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+  if test x${FT2_CONFIG+set} != xset ; then
+    FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+  fi
+fi
+AC_PATH_PROG(FT2_CONFIG, freetype-config, no)
+
+min_ft_version=ifelse([$1], ,6.1.0,$1)
+AC_MSG_CHECKING(for FreeType - version >= $min_ft_version)
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+  no_ft=yes
+else
+  FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+  FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+  ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+  ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+  ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+  ft_min_major_version=`echo $min_ft_version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+  ft_min_minor_version=`echo $min_ft_version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+  ft_min_micro_version=`echo $min_ft_version | \
+         sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+  if test x$enable_fttest = xyes ; then
+    ft_config_is_lt=""
+    if test $ft_config_major_version -lt $ft_min_major_version ; then
+      ft_config_is_lt=yes
+    else
+      if test $ft_config_major_version -eq $ft_min_major_version ; then
+        if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+          ft_config_is_lt=yes
+        else
+          if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+            if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+              ft_config_is_lt=yes
+            fi
+          fi
+        fi
+      fi
+    fi
+    if test x$ft_config_is_lt = xyes ; then
+      no_ft=yes
+    else
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $FT2_CFLAGS"
+      LIBS="$FT2_LIBS $LIBS"
+dnl
+dnl Sanity checks for the results of freetype-config to some extent
+dnl
+      AC_TRY_RUN([
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+  FT_Library library;
+  FT_Error error;
+
+  error = FT_Init_FreeType(&library);
+
+  if (error)
+    return 1;
+  else
+  {
+    FT_Done_FreeType(library);
+    return 0;
+  }
+}
+],, no_ft=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+      CFLAGS="$ac_save_CFLAGS"
+      LIBS="$ac_save_LIBS"
+    fi             # test $ft_config_version -lt $ft_min_version
+  fi               # test x$enable_fttest = xyes
+fi                 # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+   AC_MSG_RESULT(yes)
+   ifelse([$2], , :, [$2])
+else
+   AC_MSG_RESULT(no)
+   if test "$FT2_CONFIG" = "no" ; then
+     echo "*** The freetype-config script installed by FreeType 2 could not be found."
+     echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+     echo "*** your path, or set the FT2_CONFIG environment variable to the"
+     echo "*** full path to freetype-config."
+   else
+     if test x$ft_config_is_lt = xyes ; then
+       echo "*** Your installed version of the FreeType 2 library is too old."
+       echo "*** If you have different versions of FreeType 2, make sure that"
+       echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+       echo "*** are used, or set the FT2_CONFIG environment variable to the"
+       echo "*** full path to freetype-config."
+     else
+       echo "*** The FreeType test program failed to run.  If your system uses"
+       echo "*** shared libraries and they are installed outside the normal"
+       echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+       echo "*** (or whatever is appropiate for your system) is correctly set."
+     fi
+   fi
+   FT2_CFLAGS=""
+   FT2_LIBS=""
+   ifelse([$3], , :, [$3])
+fi
+AC_SUBST(FT2_CFLAGS)
+AC_SUBST(FT2_LIBS)
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..c9ae1f7
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,381 @@
+# gettext.m4 serial 60 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644
index 0000000..d95fd98
--- /dev/null
+++ b/m4/glibc21.m4
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+	[
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+	],
+	ac_cv_gnu_library_2_1=yes,
+	ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/gst-alsa.m4 b/m4/gst-alsa.m4
new file mode 100644
index 0000000..4141d06
--- /dev/null
+++ b/m4/gst-alsa.m4
@@ -0,0 +1,150 @@
+dnl Configure Paths for Alsa
+dnl Some modifications by Richard Boulton <richard-alsa@tartarus.org>
+dnl Christopher Lansdown <lansdoct@cs.alfred.edu>
+dnl Jaroslav Kysela <perex@suse.cz>
+dnl Last modification: alsa.m4,v 1.23 2004/01/16 18:14:22 tiwai Exp
+dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate.
+dnl enables arguments --with-alsa-prefix=
+dnl                   --with-alsa-enc-prefix=
+dnl                   --disable-alsatest
+dnl
+dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified,
+dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result.
+dnl
+AC_DEFUN([AM_PATH_ALSA],
+[dnl Save the original CFLAGS, LDFLAGS, and LIBS
+alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+dnl
+dnl Get the cflags and libraries for alsa
+dnl
+AC_ARG_WITH(alsa-prefix,
+  AC_HELP_STRING([--with-alsa-prefix=PFX],
+                 [prefix where Alsa library is installed(optional)]),
+  [alsa_prefix="$withval"], [alsa_prefix=""])
+
+AC_ARG_WITH(alsa-inc-prefix,
+  AC_HELP_STRING([--with-alsa-inc-prefix=PFX],
+                 [prefix where include libraries are (optional)]),
+  [alsa_inc_prefix="$withval"], [alsa_inc_prefix=""])
+
+dnl FIXME: this is not yet implemented
+dnl AC_ARG_ENABLE(alsatest,
+dnl  AC_HELP_STRING([--disable-alsatest],
+dnl                 [do not try to compile and run a test Alsa program],
+dnl                 [enable_alsatest=no], [enable_alsatest=yes])
+
+dnl Add any special include directories
+AC_MSG_CHECKING(for ALSA CFLAGS)
+if test "$alsa_inc_prefix" != "" ; then
+	ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix"
+	CFLAGS="$CFLAGS -I$alsa_inc_prefix"
+fi
+AC_MSG_RESULT($ALSA_CFLAGS)
+
+dnl add any special lib dirs
+AC_MSG_CHECKING(for ALSA LDFLAGS)
+if test "$alsa_prefix" != "" ; then
+	ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix"
+	LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+dnl add the alsa library
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/  //'`
+LIBS="$ALSA_LIBS $LIBS"
+AC_MSG_RESULT($ALSA_LIBS)
+
+dnl Check for a working version of libasound that is of the right version.
+min_alsa_version=ifelse([$1], ,0.1.1,$1)
+AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version)
+no_alsa=""
+    alsa_min_major_version=`echo $min_alsa_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    alsa_min_minor_version=`echo $min_alsa_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    alsa_min_micro_version=`echo $min_alsa_version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE([
+#include <alsa/asoundlib.h>
+], [
+void main(void)
+{
+/* ensure backward compatibility */
+#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
+#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
+#endif
+#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR)
+#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR
+#endif
+#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR)
+#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR
+#endif
+
+#  if(SND_LIB_MAJOR > $alsa_min_major_version)
+  exit(0);
+#  else
+#    if(SND_LIB_MAJOR < $alsa_min_major_version)
+#       error not present
+#    endif
+
+#   if(SND_LIB_MINOR > $alsa_min_minor_version)
+  exit(0);
+#   else
+#     if(SND_LIB_MINOR < $alsa_min_minor_version)
+#          error not present
+#      endif
+
+#      if(SND_LIB_SUBMINOR < $alsa_min_micro_version)
+#        error not present
+#      endif
+#    endif
+#  endif
+exit(0);
+}
+],
+  [AC_MSG_RESULT(found.)],
+  [AC_MSG_RESULT(not present.)
+   ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)])
+   alsa_found=no]
+)
+AC_LANG_RESTORE
+
+dnl Now that we know that we have the right version, let's see if we have the library and not just the headers.
+if test "x$enable_alsatest" = "xyes"; then
+AC_CHECK_LIB([asound], [snd_ctl_open],,
+	[ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)])
+	 alsa_found=no]
+)
+fi
+
+if test "x$alsa_found" = "xyes" ; then
+   ifelse([$2], , :, [$2])
+   LIBS=`echo $LIBS | sed 's/-lasound//g'`
+   LIBS=`echo $LIBS | sed 's/  //'`
+   LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+   ifelse([$3], , :, [$3])
+   CFLAGS="$alsa_save_CFLAGS"
+   LDFLAGS="$alsa_save_LDFLAGS"
+   LIBS="$alsa_save_LIBS"
+   ALSA_CFLAGS=""
+   ALSA_LIBS=""
+fi
+
+dnl That should be it.  Now just export out symbols:
+AC_SUBST(ALSA_CFLAGS)
+AC_SUBST(ALSA_LIBS)
+])
+
diff --git a/m4/gst-fionread.m4 b/m4/gst-fionread.m4
new file mode 100644
index 0000000..603aa45
--- /dev/null
+++ b/m4/gst-fionread.m4
@@ -0,0 +1,42 @@
+AC_DEFUN([GST_CHECK_FIONREAD], [
+
+  AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h)
+  AC_CACHE_VAL(_cv_gst_fionread_in_sys_ioctl, [
+    AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/ioctl.h>
+], [
+int x = FIONREAD;
+if ( x )
+  return 0;
+    ], _cv_gst_fionread_in_sys_ioctl="yes",_cv_gst_fionread_in_sys_ioctl="no")
+  ])
+
+  AC_MSG_RESULT($_cv_gst_fionread_in_sys_ioctl)
+
+  if test "$_cv_gst_fionread_in_sys_ioctl" = "yes"; then
+    AC_DEFINE([HAVE_FIONREAD_IN_SYS_IOCTL], 1, [FIONREAD ioctl found in sys/ioclt.h])
+
+  else
+
+    AC_MSG_CHECKING(for FIONREAD in sys/filio.h)
+    AC_CACHE_VAL(_cv_gst_fionread_in_sys_filio, [
+      AC_TRY_COMPILE([
+  #include <sys/types.h>
+  #include <sys/filio.h>
+  ], [
+  int x = FIONREAD;
+  if ( x )
+    return 0;
+      ], _cv_gst_fionread_in_sys_filio="yes",_cv_gst_fionread_in_sys_filio="no")
+    ])
+
+    AC_MSG_RESULT($_cv_gst_fionread_in_sys_filio)
+
+    if test "$_cv_gst_fionread_in_sys_filio" = "yes"; then
+      AC_DEFINE([HAVE_FIONREAD_IN_SYS_FILIO], 1, [FIONREAD ioctl found in sys/filio.h])
+    fi
+
+  fi
+
+])
diff --git a/m4/gst-ivorbis.m4 b/m4/gst-ivorbis.m4
new file mode 100644
index 0000000..ae35bbb
--- /dev/null
+++ b/m4/gst-ivorbis.m4
@@ -0,0 +1,68 @@
+# Configure paths for Tremor
+
+dnl XIPH_PATH_IVORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libivorbis, and define IVORBIS_CFLAGS and IVORBIS_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_IVORBIS],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ivorbis,[  --with-ivorbis=PFX   Prefix where libivorbis is installed (optional)], ivorbis_prefix="$withval", ivorbis_prefix="")
+AC_ARG_WITH(ivorbis-libraries,[  --with-ivorbis-libraries=DIR   Directory where libivorbis library is installed (optional)], ivorbis_libraries="$withval", ivorbis_libraries="")
+AC_ARG_WITH(ivorbis-includes,[  --with-ivorbis-includes=DIR   Directory where libivorbis header files are installed (optional)], ivorbis_includes="$withval", ivorbis_includes="")
+AC_ARG_ENABLE(ivorbistest, [  --disable-ivorbistest       Do not try to compile and run a test Ivorbis program],, enable_ivorbistest=yes)
+
+  if test "x$ivorbis_libraries" != "x" ; then
+    IVORBIS_LIBS="-L$ivorbis_libraries"
+  elif test "x$ivorbis_prefix" != "x" ; then
+    IVORBIS_LIBS="-L$ivorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    IVORBIS_LIBS="-L$prefix/lib"
+  fi
+
+  IVORBIS_LIBS="$IVORBIS_LIBS -lvorbisidec -lm"
+
+  if test "x$ivorbis_includes" != "x" ; then
+    IVORBIS_CFLAGS="-I$ivorbis_includes"
+  elif test "x$ivorbis_prefix" != "x" ; then
+    IVORBIS_CFLAGS="-I$ivorbis_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    IVORBIS_CFLAGS="-I$prefix/include"
+  fi
+
+  AC_MSG_CHECKING(for Tremor)
+  no_ivorbis=""
+
+  if test "x$enable_ivorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $IVORBIS_CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $IVORBIS_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Tremor is sufficiently new.
+dnl
+      rm -f conf.ivorbistest
+      AC_TRY_COMPILE([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <tremor/codec.h>
+],,, no_ivorbis=yes)
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ivorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     IVORBIS_CFLAGS=""
+     IVORBIS_LIBS=""
+     IVORBISFILE_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(IVORBIS_CFLAGS)
+  AC_SUBST(IVORBIS_LIBS)
+  AC_SUBST(IVORBISFILE_LIBS)
+])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..66bc76f
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,180 @@
+# iconv.m4 serial AM6 (gettext-0.17)
+dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
+      dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1,
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
new file mode 100644
index 0000000..8c8a670
--- /dev/null
+++ b/m4/intdiv0.m4
@@ -0,0 +1,84 @@
+# intdiv0.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+    gt_cv_int_divbyzero_sigfpe,
+    [
+      gt_cv_int_divbyzero_sigfpe=
+changequote(,)dnl
+      case "$host_os" in
+        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
+          # On MacOS X 10.2 or newer, just assume the same as when cross-
+          # compiling. If we were to perform the real test, 1 Crash Report
+          # dialog window would pop up.
+          case "$host_cpu" in
+            i[34567]86 | x86_64)
+              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
+          esac
+          ;;
+      esac
+changequote([,])dnl
+      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
+        AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+sigfpe_handler (int sig)
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+          [
+            # Guess based on the CPU.
+changequote(,)dnl
+            case "$host_cpu" in
+              alpha* | i[34567]86 | x86_64 | m68k | s390*)
+                gt_cv_int_divbyzero_sigfpe="guessing yes";;
+              *)
+                gt_cv_int_divbyzero_sigfpe="guessing no";;
+            esac
+changequote([,])dnl
+          ])
+      fi
+    ])
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+  AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+    [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..d3f0d90
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,51 @@
+# intlmacosx.m4 serial 1 (gettext-0.17)
+dnl Copyright (C) 2004-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in MacOS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    gt_cv_func_CFPreferencesCopyAppValue,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in MacOS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644
index 0000000..7c7f894
--- /dev/null
+++ b/m4/inttypes-pri.m4
@@ -0,0 +1,36 @@
+# inttypes-pri.m4 serial 4 (gettext-0.16)
+dnl Copyright (C) 1997-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.52)
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      gt_cv_inttypes_pri_broken,
+      [
+        AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100644
index 0000000..edc8ecb
--- /dev/null
+++ b/m4/inttypes_h.m4
@@ -0,0 +1,26 @@
+# inttypes_h.m4 serial 7
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_inttypes_h=yes,
+    gl_cv_header_inttypes_h=no)])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644
index 0000000..19aa77e
--- /dev/null
+++ b/m4/lcmessage.m4
@@ -0,0 +1,30 @@
+# lcmessage.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+  AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES,
+    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)])
+  if test $gt_cv_val_LC_MESSAGES = yes; then
+    AC_DEFINE(HAVE_LC_MESSAGES, 1,
+      [Define if your <locale.h> file defines LC_MESSAGES.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..96c4e2c
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break ;;
+      *)
+	test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..e3d26fc
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,709 @@
+# lib-link.m4 serial 13 (gettext-0.17)
+dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.54)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix],
+[  --with-lib]N_A_M_E[-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib]N_A_M_E[-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIB[]NAME[]_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..a8684e1
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS= 	}"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..a3fee53
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7377 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	  # Cool, printf works
+	  :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	  export CONFIG_SHELL
+	  SHELL="$CONFIG_SHELL"
+	  export SHELL
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	     test "X$echo_testing_string" = 'X\t' &&
+	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	     test "X$echo_testing_string" = "X$echo_test_string"; then
+	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+	  # maybe with a smaller string...
+	  prev=:
+
+	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+	    then
+	      break
+	    fi
+	    prev="$cmd"
+	  done
+
+	  if test "$prev" != 'sed 50q "[$]0"'; then
+	    echo_test_string=`eval $prev`
+	    export echo_test_string
+	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	  else
+	    # Oops.  We lost completely, so just stick with echo.
+	    ECHO=echo
+	  fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC*)
+	    # IBM XL 8.0 on PPC
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | netbsdelf*-gnu)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+	# IBM XL C 8.0/Fortran 10.1 on PPC
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+	_LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    cp $export_symbols $output_objdir/$soname.def;
+          else
+	    echo EXPORTS > $output_objdir/$soname.def;
+	    cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 will use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  xl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='echo'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=echo
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='echo'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/lrint.m4 b/m4/lrint.m4
new file mode 100644
index 0000000..7d72c73
--- /dev/null
+++ b/m4/lrint.m4
@@ -0,0 +1,27 @@
+dnl @synopsis AC_C99_FUNC_LRINT
+dnl
+dnl Check whether C99's lrint function is available.
+dnl @version 1.1
+dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this file for any 
+dnl purpose is hereby granted without fee, provided that the above copyright 
+dnl and this permission notice appear in all copies.  No representations are
+dnl made about the suitability of this software for any purpose.  It is 
+dnl provided "as is" without express or implied warranty.
+dnl
+AC_DEFUN([AC_C99_FUNC_LRINT],
+[AC_CACHE_CHECK(for lrint,
+  ac_cv_c99_lrint,
+[AC_TRY_LINK([
+#define		_ISOC9X_SOURCE	1
+#define 	_ISOC99_SOURCE	1
+#define		__USE_ISOC99	1
+#define 	__USE_ISOC9X	1
+#include	<math.h>],
+[	int value = lrint (0.432) ; ], ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)])
+if test $ac_cv_c99_lrint = yes; then
+  AC_DEFINE(HAVE_LRINT, 1,
+            [Define if you have C99's lrint function.])
+fi
+])# AC_C99_LRINT
diff --git a/m4/lrintf.m4 b/m4/lrintf.m4
new file mode 100644
index 0000000..f9b76e3
--- /dev/null
+++ b/m4/lrintf.m4
@@ -0,0 +1,27 @@
+dnl @synopsis AC_C99_FUNC_LRINTF
+dnl
+dnl Check whether C99's lrintf function is available.
+dnl @version 1.1
+dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this file for any 
+dnl purpose is hereby granted without fee, provided that the above copyright 
+dnl and this permission notice appear in all copies.  No representations are
+dnl made about the suitability of this software for any purpose.  It is 
+dnl provided "as is" without express or implied warranty.
+dnl
+AC_DEFUN([AC_C99_FUNC_LRINTF],
+[AC_CACHE_CHECK(for lrintf,
+  ac_cv_c99_lrintf,
+[AC_TRY_LINK([
+#define		_ISOC9X_SOURCE	1
+#define 	_ISOC99_SOURCE	1
+#define		__USE_ISOC99	1
+#define 	__USE_ISOC9X	1
+#include	<math.h>],
+[	int value = lrintf (0.432) ; ], ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)])
+if test $ac_cv_c99_lrintf = yes; then
+  AC_DEFINE(HAVE_LRINTF, 1,
+            [Define if you have C99's lrintf function.])
+fi
+])# AC_C99_LRINTF
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..34151a3
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..f3c5309
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..637bb20
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..7967cc2
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
diff --git a/m4/ogg.m4 b/m4/ogg.m4
new file mode 100644
index 0000000..0e1f1ab
--- /dev/null
+++ b/m4/ogg.m4
@@ -0,0 +1,102 @@
+# Configure paths for libogg
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+
+dnl XIPH_PATH_OGG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libogg, and define OGG_CFLAGS and OGG_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_OGG],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(ogg,[  --with-ogg=PFX   Prefix where libogg is installed (optional)], ogg_prefix="$withval", ogg_prefix="")
+AC_ARG_WITH(ogg-libraries,[  --with-ogg-libraries=DIR   Directory where libogg library is installed (optional)], ogg_libraries="$withval", ogg_libraries="")
+AC_ARG_WITH(ogg-includes,[  --with-ogg-includes=DIR   Directory where libogg header files are installed (optional)], ogg_includes="$withval", ogg_includes="")
+AC_ARG_ENABLE(oggtest, [  --disable-oggtest       Do not try to compile and run a test Ogg program],, enable_oggtest=yes)
+
+  if test "x$ogg_libraries" != "x" ; then
+    OGG_LIBS="-L$ogg_libraries"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_LIBS="-L$ogg_prefix/lib"
+  elif test "x$prefix" != "xNONE" ; then
+    OGG_LIBS="-L$prefix/lib"
+  fi
+
+  OGG_LIBS="$OGG_LIBS -logg"
+
+  if test "x$ogg_includes" != "x" ; then
+    OGG_CFLAGS="-I$ogg_includes"
+  elif test "x$ogg_prefix" != "x" ; then
+    OGG_CFLAGS="-I$ogg_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    OGG_CFLAGS="-I$prefix/include"
+  fi
+
+  AC_MSG_CHECKING(for Ogg)
+  no_ogg=""
+
+
+  if test "x$enable_oggtest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Ogg is sufficiently new.
+dnl
+      rm -f conf.oggtest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ogg/ogg.h>
+
+int main ()
+{
+  system("touch conf.oggtest");
+  return 0;
+}
+
+],, no_ogg=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_ogg" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.oggtest ; then
+       :
+     else
+       echo "*** Could not run Ogg test program, checking why..."
+       CFLAGS="$CFLAGS $OGG_CFLAGS"
+       LIBS="$LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <ogg/ogg.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Ogg or finding the wrong"
+       echo "*** version of Ogg. If it is not finding Ogg, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Ogg was incorrectly installed"
+       echo "*** or that you have moved Ogg since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     OGG_CFLAGS=""
+     OGG_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(OGG_CFLAGS)
+  AC_SUBST(OGG_LIBS)
+  rm -f conf.oggtest
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..0734762
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 15 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Release version of the gettext macros. This is used to ensure that
+  dnl the gettext macros and po/Makefile.in.in are in sync.
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.17])
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  dnl Support for AM_XGETTEXT_OPTION.
+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[	 ]*VARIABLE[	 ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[	 ]*VARIABLE[	 ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+  XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..a56365c
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644
index 0000000..db9a8ac
--- /dev/null
+++ b/m4/stdint_h.m4
@@ -0,0 +1,26 @@
+# stdint_h.m4 serial 6
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_stdint_h=yes,
+    gl_cv_header_stdint_h=no)])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
new file mode 100644
index 0000000..641c489
--- /dev/null
+++ b/m4/uintmax_t.m4
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 10
+dnl Copyright (C) 1997-2004, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+    test $ac_cv_type_unsigned_long_long_int = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+      [Define to unsigned long or unsigned long long
+       if <stdint.h> and <inttypes.h> don't define.])
+  else
+    AC_DEFINE(HAVE_UINTMAX_T, 1,
+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/vorbis.m4 b/m4/vorbis.m4
new file mode 100644
index 0000000..6a28893
--- /dev/null
+++ b/m4/vorbis.m4
@@ -0,0 +1,128 @@
+# Configure paths for libvorbis
+# Jack Moffitt <jack@icecast.org> 10-21-2000
+# Shamelessly stolen from Owen Taylor and Manish Singh
+# thomasvs added check for vorbis_bitrate_addblock which is new in rc3
+# thomasvs added check for OV_ECTL_RATEMANAGE_SET which is new in 1.0 final
+
+dnl XIPH_PATH_VORBIS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Test for libvorbis, and define VORBIS_CFLAGS and VORBIS_LIBS
+dnl
+AC_DEFUN([XIPH_PATH_VORBIS],
+[dnl 
+dnl Get the cflags and libraries
+dnl
+AC_ARG_WITH(vorbis,[  --with-vorbis=PFX   Prefix where libvorbis is installed (optional)], vorbis_prefix="$withval", vorbis_prefix="")
+AC_ARG_WITH(vorbis-libraries,[  --with-vorbis-libraries=DIR   Directory where libvorbis library is installed (optional)], vorbis_libraries="$withval", vorbis_libraries="")
+AC_ARG_WITH(vorbis-includes,[  --with-vorbis-includes=DIR   Directory where libvorbis header files are installed (optional)], vorbis_includes="$withval", vorbis_includes="")
+AC_ARG_ENABLE(vorbistest, [  --disable-vorbistest       Do not try to compile and run a test Vorbis program],, enable_vorbistest=yes)
+
+  if test "x$vorbis_libraries" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_libraries"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_LIBS="-L$vorbis_prefix/lib"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_LIBS="-L$prefix/lib"
+  fi
+
+  VORBIS_LIBS="$VORBIS_LIBS -lvorbis -lm"
+  VORBISFILE_LIBS="-lvorbisfile"
+  VORBISENC_LIBS="-lvorbisenc"
+
+  if test "x$vorbis_includes" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_includes"
+  elif test "x$vorbis_prefix" != "x" ; then
+    VORBIS_CFLAGS="-I$vorbis_prefix/include"
+  elif test "x$prefix" != "xNONE"; then
+    VORBIS_CFLAGS="-I$prefix/include"
+  fi
+
+
+  AC_MSG_CHECKING(for Vorbis)
+  no_vorbis=""
+
+
+  if test "x$enable_vorbistest" = "xyes" ; then
+    ac_save_CFLAGS="$CFLAGS"
+    ac_save_LIBS="$LIBS"
+    CFLAGS="$CFLAGS $VORBIS_CFLAGS $OGG_CFLAGS"
+    LIBS="$LIBS $VORBIS_LIBS $VORBISENC_LIBS $OGG_LIBS"
+dnl
+dnl Now check if the installed Vorbis is sufficiently new.
+dnl
+      rm -f conf.vorbistest
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+int main ()
+{
+    vorbis_block 	vb;
+    vorbis_dsp_state	vd;
+    vorbis_info		vi;
+
+    vorbis_info_init (&vi);
+    vorbis_encode_init (&vi, 2, 44100, -1, 128000, -1);
+    vorbis_analysis_init (&vd, &vi);
+    vorbis_block_init (&vd, &vb);
+    /* this function was added in 1.0rc3, so this is what we're testing for */
+    vorbis_bitrate_addblock (&vb);
+
+    /* this define was added in 1.0 final */
+#ifdef OV_ECTL_RATEMANAGE_SET
+    system("touch conf.vorbistest");
+    return 0;
+#else
+    return -1;
+#endif
+}
+
+],, no_vorbis=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+  fi
+
+  if test "x$no_vorbis" = "x" ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$1], , :, [$1])     
+  else
+     AC_MSG_RESULT(no)
+     if test -f conf.vorbistest ; then
+       :
+     else
+       echo "*** Could not run Vorbis test program, checking why..."
+       CFLAGS="$CFLAGS $VORBIS_CFLAGS"
+       LIBS="$LIBS $VORBIS_LIBS $OGG_LIBS"
+       AC_TRY_LINK([
+#include <stdio.h>
+#include <vorbis/codec.h>
+],     [ return 0; ],
+       [ echo "*** The test program compiled, but did not run. This usually means"
+       echo "*** that the run-time linker is not finding Vorbis or finding the wrong"
+       echo "*** version of Vorbis. If it is not finding Vorbis, you'll need to set your"
+       echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+       echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+       echo "*** is required on your system"
+       echo "***"
+       echo "*** If you have an old version installed, it is best to remove it, although"
+       echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+       [ echo "*** The test program failed to compile or link. See the file config.log for the"
+       echo "*** exact error that occured. This usually means Vorbis was incorrectly installed"
+       echo "*** or that you have moved Vorbis since it was installed." ])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+     VORBIS_CFLAGS=""
+     VORBIS_LIBS=""
+     VORBISFILE_LIBS=""
+     VORBISENC_LIBS=""
+     ifelse([$2], , :, [$2])
+  fi
+  AC_SUBST(VORBIS_CFLAGS)
+  AC_SUBST(VORBIS_LIBS)
+  AC_SUBST(VORBISFILE_LIBS)
+  AC_SUBST(VORBISENC_LIBS)
+  rm -f conf.vorbistest
+])
diff --git a/missing b/missing
new file mode 100755
index 0000000..28055d2
--- /dev/null
+++ b/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar*)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar*)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case $firstarg in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case $firstarg in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am
new file mode 100644
index 0000000..11b8f47
--- /dev/null
+++ b/pkgconfig/Makefile.am
@@ -0,0 +1,66 @@
+### all of the standard pc files we need to generate
+pcverfiles =  \
+	gstreamer-audio-@GST_MAJORMINOR@.pc \
+	gstreamer-app-@GST_MAJORMINOR@.pc \
+	gstreamer-cdda-@GST_MAJORMINOR@.pc \
+	gstreamer-fft-@GST_MAJORMINOR@.pc \
+	gstreamer-interfaces-@GST_MAJORMINOR@.pc \
+	gstreamer-netbuffer-@GST_MAJORMINOR@.pc \
+	gstreamer-pbutils-@GST_MAJORMINOR@.pc \
+	gstreamer-riff-@GST_MAJORMINOR@.pc \
+	gstreamer-rtp-@GST_MAJORMINOR@.pc \
+	gstreamer-rtsp-@GST_MAJORMINOR@.pc \
+	gstreamer-sdp-@GST_MAJORMINOR@.pc \
+	gstreamer-tag-@GST_MAJORMINOR@.pc \
+	gstreamer-video-@GST_MAJORMINOR@.pc \
+	gstreamer-plugins-base-@GST_MAJORMINOR@.pc
+pcverfiles_uninstalled = \
+	gstreamer-audio-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-app-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-cdda-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-fft-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-interfaces-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-netbuffer-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-pbutils-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-riff-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-rtp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-rtsp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-sdp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-tag-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-video-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-plugins-base-@GST_MAJORMINOR@-uninstalled.pc
+
+all-local: $(pcverfiles) $(pcverfiles_uninstalled)
+
+cp_verbose = $(cp_verbose_$(V))
+cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY))
+cp_verbose_0 = @echo "  CP     $@";
+
+### how to generate versioned .pc files from .pc files in this dir
+%-@GST_MAJORMINOR@.pc: %.pc
+	$(cp_verbose_0)cp $< $@
+%-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc
+	$(cp_verbose_0)cp $< $@
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(pcverfiles)
+
+CLEANFILES = $(pcverfiles) $(pcverfiles_uninstalled)
+pcinfiles = \
+           gstreamer-audio.pc.in gstreamer-audio-uninstalled.pc.in \
+           gstreamer-app.pc.in gstreamer-app-uninstalled.pc.in \
+           gstreamer-cdda.pc.in gstreamer-cdda-uninstalled.pc.in \
+           gstreamer-fft.pc.in gstreamer-fft-uninstalled.pc.in \
+           gstreamer-interfaces.pc.in gstreamer-interfaces-uninstalled.pc.in \
+           gstreamer-netbuffer.pc.in gstreamer-netbuffer-uninstalled.pc.in \
+           gstreamer-pbutils.pc.in gstreamer-pbutils-uninstalled.pc.in \
+           gstreamer-riff.pc.in gstreamer-riff-uninstalled.pc.in \
+           gstreamer-rtp.pc.in gstreamer-rtp-uninstalled.pc.in \
+           gstreamer-rtsp.pc.in gstreamer-rtsp-uninstalled.pc.in \
+           gstreamer-sdp.pc.in gstreamer-sdp-uninstalled.pc.in \
+           gstreamer-tag.pc.in gstreamer-tag-uninstalled.pc.in \
+           gstreamer-video.pc.in gstreamer-video-uninstalled.pc.in \
+           gstreamer-plugins-base.pc.in gstreamer-plugins-base-uninstalled.pc.in
+
+DISTCLEANFILES = $(pcinfiles:.in=)
+EXTRA_DIST = $(pcinfiles)
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
new file mode 100644
index 0000000..359dccd
--- /dev/null
+++ b/pkgconfig/Makefile.in
@@ -0,0 +1,769 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = pkgconfig
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/gstreamer-app-uninstalled.pc.in \
+	$(srcdir)/gstreamer-app.pc.in \
+	$(srcdir)/gstreamer-audio-uninstalled.pc.in \
+	$(srcdir)/gstreamer-audio.pc.in \
+	$(srcdir)/gstreamer-cdda-uninstalled.pc.in \
+	$(srcdir)/gstreamer-cdda.pc.in \
+	$(srcdir)/gstreamer-fft-uninstalled.pc.in \
+	$(srcdir)/gstreamer-fft.pc.in \
+	$(srcdir)/gstreamer-interfaces-uninstalled.pc.in \
+	$(srcdir)/gstreamer-interfaces.pc.in \
+	$(srcdir)/gstreamer-netbuffer-uninstalled.pc.in \
+	$(srcdir)/gstreamer-netbuffer.pc.in \
+	$(srcdir)/gstreamer-pbutils-uninstalled.pc.in \
+	$(srcdir)/gstreamer-pbutils.pc.in \
+	$(srcdir)/gstreamer-plugins-base-uninstalled.pc.in \
+	$(srcdir)/gstreamer-plugins-base.pc.in \
+	$(srcdir)/gstreamer-riff-uninstalled.pc.in \
+	$(srcdir)/gstreamer-riff.pc.in \
+	$(srcdir)/gstreamer-rtp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-rtp.pc.in \
+	$(srcdir)/gstreamer-rtsp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-rtsp.pc.in \
+	$(srcdir)/gstreamer-sdp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-sdp.pc.in \
+	$(srcdir)/gstreamer-tag-uninstalled.pc.in \
+	$(srcdir)/gstreamer-tag.pc.in \
+	$(srcdir)/gstreamer-video-uninstalled.pc.in \
+	$(srcdir)/gstreamer-video.pc.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = gstreamer-audio.pc gstreamer-audio-uninstalled.pc \
+	gstreamer-app.pc gstreamer-app-uninstalled.pc \
+	gstreamer-cdda.pc gstreamer-cdda-uninstalled.pc \
+	gstreamer-fft.pc gstreamer-fft-uninstalled.pc \
+	gstreamer-interfaces.pc gstreamer-interfaces-uninstalled.pc \
+	gstreamer-netbuffer.pc gstreamer-netbuffer-uninstalled.pc \
+	gstreamer-pbutils.pc gstreamer-pbutils-uninstalled.pc \
+	gstreamer-riff.pc gstreamer-riff-uninstalled.pc \
+	gstreamer-rtp.pc gstreamer-rtp-uninstalled.pc \
+	gstreamer-rtsp.pc gstreamer-rtsp-uninstalled.pc \
+	gstreamer-sdp.pc gstreamer-sdp-uninstalled.pc gstreamer-tag.pc \
+	gstreamer-tag-uninstalled.pc gstreamer-video.pc \
+	gstreamer-video-uninstalled.pc gstreamer-plugins-base.pc \
+	gstreamer-plugins-base-uninstalled.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+### all of the standard pc files we need to generate
+pcverfiles = \
+	gstreamer-audio-@GST_MAJORMINOR@.pc \
+	gstreamer-app-@GST_MAJORMINOR@.pc \
+	gstreamer-cdda-@GST_MAJORMINOR@.pc \
+	gstreamer-fft-@GST_MAJORMINOR@.pc \
+	gstreamer-interfaces-@GST_MAJORMINOR@.pc \
+	gstreamer-netbuffer-@GST_MAJORMINOR@.pc \
+	gstreamer-pbutils-@GST_MAJORMINOR@.pc \
+	gstreamer-riff-@GST_MAJORMINOR@.pc \
+	gstreamer-rtp-@GST_MAJORMINOR@.pc \
+	gstreamer-rtsp-@GST_MAJORMINOR@.pc \
+	gstreamer-sdp-@GST_MAJORMINOR@.pc \
+	gstreamer-tag-@GST_MAJORMINOR@.pc \
+	gstreamer-video-@GST_MAJORMINOR@.pc \
+	gstreamer-plugins-base-@GST_MAJORMINOR@.pc
+
+pcverfiles_uninstalled = \
+	gstreamer-audio-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-app-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-cdda-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-fft-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-interfaces-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-netbuffer-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-pbutils-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-riff-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-rtp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-rtsp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-sdp-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-tag-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-video-@GST_MAJORMINOR@-uninstalled.pc \
+	gstreamer-plugins-base-@GST_MAJORMINOR@-uninstalled.pc
+
+cp_verbose = $(cp_verbose_$(V))
+cp_verbose_ = $(cp_verbose_$(AM_DEFAULT_VERBOSITY))
+cp_verbose_0 = @echo "  CP     $@";
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(pcverfiles)
+CLEANFILES = $(pcverfiles) $(pcverfiles_uninstalled)
+pcinfiles = \
+           gstreamer-audio.pc.in gstreamer-audio-uninstalled.pc.in \
+           gstreamer-app.pc.in gstreamer-app-uninstalled.pc.in \
+           gstreamer-cdda.pc.in gstreamer-cdda-uninstalled.pc.in \
+           gstreamer-fft.pc.in gstreamer-fft-uninstalled.pc.in \
+           gstreamer-interfaces.pc.in gstreamer-interfaces-uninstalled.pc.in \
+           gstreamer-netbuffer.pc.in gstreamer-netbuffer-uninstalled.pc.in \
+           gstreamer-pbutils.pc.in gstreamer-pbutils-uninstalled.pc.in \
+           gstreamer-riff.pc.in gstreamer-riff-uninstalled.pc.in \
+           gstreamer-rtp.pc.in gstreamer-rtp-uninstalled.pc.in \
+           gstreamer-rtsp.pc.in gstreamer-rtsp-uninstalled.pc.in \
+           gstreamer-sdp.pc.in gstreamer-sdp-uninstalled.pc.in \
+           gstreamer-tag.pc.in gstreamer-tag-uninstalled.pc.in \
+           gstreamer-video.pc.in gstreamer-video-uninstalled.pc.in \
+           gstreamer-plugins-base.pc.in gstreamer-plugins-base-uninstalled.pc.in
+
+DISTCLEANFILES = $(pcinfiles:.in=)
+EXTRA_DIST = $(pcinfiles)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu pkgconfig/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+gstreamer-audio.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-audio.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-audio-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-audio-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-app.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-app.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-app-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-app-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-cdda.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-cdda.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-cdda-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-cdda-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-fft.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-fft.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-fft-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-fft-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-interfaces.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-interfaces.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-interfaces-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-interfaces-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-netbuffer.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-netbuffer.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-netbuffer-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-netbuffer-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-pbutils.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-pbutils.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-pbutils-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-pbutils-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-riff.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-riff.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-riff-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-riff-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-rtp.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-rtp.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-rtp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-rtp-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-rtsp.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-rtsp.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-rtsp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-rtsp-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-sdp.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-sdp.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-sdp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-sdp-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-tag.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-tag.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-tag-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-tag-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-video.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-video.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-video-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-video-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-plugins-base.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-plugins-base.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+gstreamer-plugins-base-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/gstreamer-plugins-base-uninstalled.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am uninstall uninstall-am uninstall-pkgconfigDATA
+
+
+all-local: $(pcverfiles) $(pcverfiles_uninstalled)
+
+### how to generate versioned .pc files from .pc files in this dir
+%-@GST_MAJORMINOR@.pc: %.pc
+	$(cp_verbose_0)cp $< $@
+%-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc
+	$(cp_verbose_0)cp $< $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pkgconfig/gstreamer-app-uninstalled.pc.in b/pkgconfig/gstreamer-app-uninstalled.pc.in
new file mode 100644
index 0000000..b989798
--- /dev/null
+++ b/pkgconfig/gstreamer-app-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/app
+typelibdir=@abs_top_builddir@/gst-libs/gst/app
+
+Name: GStreamer Application Library, Uninstalled
+Description: Helper functions and base classes for application integration, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-app.pc.in b/pkgconfig/gstreamer-app.pc.in
new file mode 100644
index 0000000..8152eff
--- /dev/null
+++ b/pkgconfig/gstreamer-app.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Application Library
+Description: Helper functions and base classes for application integration
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstapp-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-audio-uninstalled.pc.in b/pkgconfig/gstreamer-audio-uninstalled.pc.in
new file mode 100644
index 0000000..ce55cf9
--- /dev/null
+++ b/pkgconfig/gstreamer-audio-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/audio
+typelibdir=@abs_top_builddir@/gst-libs/gst/audio
+
+Name: GStreamer Audio Library, Uninstalled
+Description: Audio helper functions and base classes, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ gstreamer-interfaces-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-audio.pc.in b/pkgconfig/gstreamer-audio.pc.in
new file mode 100644
index 0000000..5743ccf
--- /dev/null
+++ b/pkgconfig/gstreamer-audio.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Audio library
+Description: Audio helper functions and base classes
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ gstreamer-interfaces-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstaudio-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-cdda-uninstalled.pc.in b/pkgconfig/gstreamer-cdda-uninstalled.pc.in
new file mode 100644
index 0000000..15773e8
--- /dev/null
+++ b/pkgconfig/gstreamer-cdda-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/cdda
+typelibdir=@abs_top_builddir@/gst-libs/gst/cdda
+
+Name: GStreamer CDDA Library, Uninstalled
+Description: CDDA base classes, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ gstreamer-tag-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-cdda.pc.in b/pkgconfig/gstreamer-cdda.pc.in
new file mode 100644
index 0000000..86f4a2b
--- /dev/null
+++ b/pkgconfig/gstreamer-cdda.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer CDDA Library
+Description: CDDA base classes
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ gstreamer-tag-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstcdda-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-fft-uninstalled.pc.in b/pkgconfig/gstreamer-fft-uninstalled.pc.in
new file mode 100644
index 0000000..163f3f0
--- /dev/null
+++ b/pkgconfig/gstreamer-fft-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/fft
+typelibdir=@abs_top_builddir@/gst-libs/gst/fft
+
+Name: GStreamer FFT Library, Uninstalled
+Description: FFT implementation, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la @LIBM@
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-fft.pc.in b/pkgconfig/gstreamer-fft.pc.in
new file mode 100644
index 0000000..5680a0c
--- /dev/null
+++ b/pkgconfig/gstreamer-fft.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer FFT Library
+Description: FFT implementation
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstfft-@GST_MAJORMINOR@ @LIBM@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-interfaces-uninstalled.pc.in b/pkgconfig/gstreamer-interfaces-uninstalled.pc.in
new file mode 100644
index 0000000..676a23f
--- /dev/null
+++ b/pkgconfig/gstreamer-interfaces-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/interfaces
+typelibdir=@abs_top_builddir@/gst-libs/gst/interfaces
+
+Name: GStreamer Interfaces Library, Uninstalled
+Description: Interfaces for GStreamer elements, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-interfaces.pc.in b/pkgconfig/gstreamer-interfaces.pc.in
new file mode 100644
index 0000000..24749be
--- /dev/null
+++ b/pkgconfig/gstreamer-interfaces.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Interfaces Library
+Description: Interfaces for GStreamer elements
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstinterfaces-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-netbuffer-uninstalled.pc.in b/pkgconfig/gstreamer-netbuffer-uninstalled.pc.in
new file mode 100644
index 0000000..941c728
--- /dev/null
+++ b/pkgconfig/gstreamer-netbuffer-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/netbuffer
+typelibdir=@abs_top_builddir@/gst-libs/gst/netbuffer
+
+Name: GStreamer Network Buffer Library, Uninstalled
+Description: Network buffer for use in network sources/sinks, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-netbuffer.pc.in b/pkgconfig/gstreamer-netbuffer.pc.in
new file mode 100644
index 0000000..28d7ed2
--- /dev/null
+++ b/pkgconfig/gstreamer-netbuffer.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Network Buffer Library
+Description: Network buffer for use in network sources/sinks
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstnetbuffer-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-pbutils-uninstalled.pc.in b/pkgconfig/gstreamer-pbutils-uninstalled.pc.in
new file mode 100644
index 0000000..e08758c
--- /dev/null
+++ b/pkgconfig/gstreamer-pbutils-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/pbutils
+typelibdir=@abs_top_builddir@/gst-libs/gst/pbutils
+
+Name: GStreamer Base Utils Library, Uninstalled
+Description: General utility functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-pbutils.pc.in b/pkgconfig/gstreamer-pbutils.pc.in
new file mode 100644
index 0000000..e1626a4
--- /dev/null
+++ b/pkgconfig/gstreamer-pbutils.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Base Utils Library
+Description: General utility functions
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstpbutils-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in b/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in
new file mode 100644
index 0000000..8a9bea2
--- /dev/null
+++ b/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+pluginsdir=@abs_top_builddir@
+
+Name: GStreamer Base Plugins Libraries, Uninstalled
+Description: Streaming media framework, base plugins libraries, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: -L@abs_top_builddir@/gst-libs/gst/audio -L@abs_top_builddir@/gst-libs/gst/cdda -L@abs_top_builddir@/gst-libs/gst/fft -L@abs_top_builddir@/gst-libs/gst/floatcast -L@abs_top_builddir@/gst-libs/gst/interfaces -L@abs_top_builddir@/gst-libs/gst/netbuffer -L@abs_top_builddir@/gst-libs/gst/riff -L@abs_top_builddir@/gst-libs/gst/rtp -L@abs_top_builddir@/gst-libs/gst/rtsp -L@abs_top_builddir@/gst-libs/gst/sdp -L@abs_top_builddir@/gst-libs/gst/tag -L@abs_top_builddir@/gst-libs/gst/pbutils -L@abs_top_builddir@/gst-libs/gst/video -L@abs_top_builddir@/gst-libs/gst/app
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
+libraries=app audio cdda fft floatcast interfaces netbuffer riff rtp rtsp sdp tag pbutils video
diff --git a/pkgconfig/gstreamer-plugins-base.pc.in b/pkgconfig/gstreamer-plugins-base.pc.in
new file mode 100644
index 0000000..4bc6088
--- /dev/null
+++ b/pkgconfig/gstreamer-plugins-base.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+pluginsdir=@libdir@/gstreamer-@GST_MAJORMINOR@
+
+Name: GStreamer Base Plugins Libraries
+Description: Streaming media framework, base plugins libraries
+Requires: gstreamer-@GST_MAJORMINOR@ 
+Version: @VERSION@
+Libs: -L${libdir}
+Cflags: -I${includedir}
+
+libraries=audio cdda fft floatcast interfaces netbuffer riff rtp tag pbutils video
diff --git a/pkgconfig/gstreamer-riff-uninstalled.pc.in b/pkgconfig/gstreamer-riff-uninstalled.pc.in
new file mode 100644
index 0000000..2592ba1
--- /dev/null
+++ b/pkgconfig/gstreamer-riff-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/riff
+typelibdir=@abs_top_builddir@/gst-libs/gst/riff
+
+Name: GStreamer RIFF Library, Uninstalled
+Description: RIFF helper functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/riff/libgstriff-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-riff.pc.in b/pkgconfig/gstreamer-riff.pc.in
new file mode 100644
index 0000000..0858276
--- /dev/null
+++ b/pkgconfig/gstreamer-riff.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer RIFF Library
+Description: RIFF helper functions
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstriff-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-rtp-uninstalled.pc.in b/pkgconfig/gstreamer-rtp-uninstalled.pc.in
new file mode 100644
index 0000000..96c66cd
--- /dev/null
+++ b/pkgconfig/gstreamer-rtp-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/rtp
+typelibdir=@abs_top_builddir@/gst-libs/gst/rtp
+
+Name: GStreamer RTP Library, Uninstalled
+Description: RTP base classes and helper functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-rtp.pc.in b/pkgconfig/gstreamer-rtp.pc.in
new file mode 100644
index 0000000..ff74a9d
--- /dev/null
+++ b/pkgconfig/gstreamer-rtp.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer RTP Library
+Description: RTP base classes and helper functions
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstrtp-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-rtsp-uninstalled.pc.in b/pkgconfig/gstreamer-rtsp-uninstalled.pc.in
new file mode 100644
index 0000000..53258ec
--- /dev/null
+++ b/pkgconfig/gstreamer-rtsp-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/rtsp
+typelibdir=@abs_top_builddir@/gst-libs/gst/rtsp
+
+Name: GStreamer RTSP Library, Uninstalled
+Description: RTSP base classes and helper functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-sdp-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-rtsp.pc.in b/pkgconfig/gstreamer-rtsp.pc.in
new file mode 100644
index 0000000..203e400
--- /dev/null
+++ b/pkgconfig/gstreamer-rtsp.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer RTSP Library
+Description: RTSP base classes and helper functions
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-sdp-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstrtsp-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-sdp-uninstalled.pc.in b/pkgconfig/gstreamer-sdp-uninstalled.pc.in
new file mode 100644
index 0000000..bd1d89d
--- /dev/null
+++ b/pkgconfig/gstreamer-sdp-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/sdp
+typelibdir=@abs_top_builddir@/gst-libs/gst/sdp
+
+Name: GStreamer SDP Library, Uninstalled
+Description: SDP helper functions, uninstalled
+Version: @VERSION@
+Requires: glib-2.0
+Libs: @abs_top_builddir@/gst-libs/gst/sdp/libgstsdp-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-sdp.pc.in b/pkgconfig/gstreamer-sdp.pc.in
new file mode 100644
index 0000000..9bb0f40
--- /dev/null
+++ b/pkgconfig/gstreamer-sdp.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer SDP Library
+Description: SDP helper functions
+Requires: glib-2.0
+Version: @VERSION@
+Libs: -L${libdir} -lgstsdp-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-tag-uninstalled.pc.in b/pkgconfig/gstreamer-tag-uninstalled.pc.in
new file mode 100644
index 0000000..b953a4c
--- /dev/null
+++ b/pkgconfig/gstreamer-tag-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/tag
+typelibdir=@abs_top_builddir@/gst-libs/gst/tag
+
+Name: GStreamer Tag Library, Uninstalled
+Description: Tag base classes and helper functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-tag.pc.in b/pkgconfig/gstreamer-tag.pc.in
new file mode 100644
index 0000000..a7a564c
--- /dev/null
+++ b/pkgconfig/gstreamer-tag.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Tag Library
+Description: Tag base classes and helper functions
+Requires: gstreamer-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgsttag-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/pkgconfig/gstreamer-video-uninstalled.pc.in b/pkgconfig/gstreamer-video-uninstalled.pc.in
new file mode 100644
index 0000000..450be2b
--- /dev/null
+++ b/pkgconfig/gstreamer-video-uninstalled.pc.in
@@ -0,0 +1,16 @@
+# the standard variables don't make sense for an uninstalled copy
+prefix=
+exec_prefix=
+libdir=
+# includedir is builddir because it is used to find gstconfig.h in places
+includedir=@abs_top_builddir@/gst-libs
+girdir=@abs_top_builddir@/gst-libs/gst/video
+typelibdir=@abs_top_builddir@/gst-libs/gst/video
+
+Name: GStreamer Video Library, Uninstalled
+Description: Video base classes and helper functions, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Libs: @abs_top_builddir@/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la
+Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+
diff --git a/pkgconfig/gstreamer-video.pc.in b/pkgconfig/gstreamer-video.pc.in
new file mode 100644
index 0000000..59a217d
--- /dev/null
+++ b/pkgconfig/gstreamer-video.pc.in
@@ -0,0 +1,16 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+datarootdir=${prefix}/share
+datadir=${datarootdir}
+girdir=${datadir}/gir-1.0
+typelibdir=${libdir}/girepository-1.0
+
+Name: GStreamer Video Library
+Description: Video base classes and helper functions
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstvideo-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..c512a1a
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1 @@
+af az bg ca cs da de el en_GB es eo eu fi fr gl hu id it ja lt lv nb nl or pl pt_BR ro ru sk sl sq sr sv tr uk vi zh_CN
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..1283c32
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,432 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.17
+GETTEXT_MACRO_VERSION = 0.17
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+# thomas: add GETTEXT_PACKAGE substitution as used in Makevars
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: check-macro-version all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+	@test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+	       exit 1; \
+	     }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	test ! -f $(srcdir)/$(DOMAIN).pot || \
+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
+	  echo "touch stamp-po" && \
+	  echo timestamp > stamp-poT && \
+	  mv stamp-poT stamp-po; \
+	}
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+	  package_gnu='GNU '; \
+	else \
+	  package_gnu=''; \
+	fi; \
+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+	else \
+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+	fi; \
+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	  *) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-version='@VERSION@' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	esac
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+	  cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+	else \
+	  $(MAKE) $${lang}.po-create; \
+	fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	$(mkdir_p) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	$(mkdir_p) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	$(MAKE) update-po
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/$(DOMAIN).pot; then \
+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir) || exit 1; \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+	exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..10ed9f6
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,47 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(GETTEXT_PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# Avoid line numbers in *.po, but keep them in *.pot.
+MSGMERGE = msgmerge --no-location
+MSGMERGE_UPDATE = msgmerge --no-location --update --backup=off
+MSGFILTER = msgfilter --no-location
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..6b19ec3
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,18 @@
+ext/alsa/gstalsamixertrack.c
+ext/alsa/gstalsasink.c
+ext/alsa/gstalsasrc.c
+ext/cdparanoia/gstcdparanoiasrc.c
+ext/ogg/gstoggdemux.c
+gst/playback/gstdecodebin2.c
+gst/playback/gstplaysink.c
+gst/playback/gstsubtitleoverlay.c
+gst/playback/gsturidecodebin.c
+gst/tcp/gsttcp.c
+gst/tcp/gsttcpclientsink.c
+gst/tcp/gsttcpclientsrc.c
+gst-libs/gst/audio/gstbaseaudiosrc.c
+gst-libs/gst/tag/gsttagdemux.c
+gst-libs/gst/tag/tags.c
+gst-libs/gst/cdda/gstcddabasesrc.c
+gst-libs/gst/pbutils/descriptions.c
+gst-libs/gst/pbutils/missing-plugins.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..9c2a995
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+	$(MAKE) en@quot.po-update
+en@boldquot.po-create:
+	$(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	ll=`echo $$lang | sed -e 's/@.*//'`; \
+	LC_ALL=C; export LC_ALL; \
+	cd $(srcdir); \
+	if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "creation of $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+en@quot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+	rm -f *.insert-header
diff --git a/po/af.gmo b/po/af.gmo
new file mode 100644
index 0000000..6ea6a68
--- /dev/null
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
new file mode 100644
index 0000000..95dadf4
--- /dev/null
+++ b/po/af.po
@@ -0,0 +1,667 @@
+# Translation of gstreamer plugin messages to Afrikaans. 
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Petri Jooste <rkwjpj@puk.ac.za>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.7.6\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-03-18 14:16+0200\n"
+"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
+"Language-Team: Afrikaans <i18n@af.org.za>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Treble"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetiseerder"
+
+msgid "Line-in"
+msgstr "Lyn-in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofoon"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "Luidspreker"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "Kon nie oudio-toestel \"%s\" oopmaak vir skryf nie."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+msgid "Could not open CD device for reading."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "Kon nie skryf na toestel \"%s\" nie."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Fout tydens toemaak van lêer \"%s\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir skryf nie."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Fout tydens toemaak van lêer \"%s\"."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "Toestel \"%s\" is nie 'n vasleggingtoestel nie."
+
+#~ msgid "No device specified."
+#~ msgstr "Geen toestel gespesifiseer"
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Toestel \"%s\" bestaan nie."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "OSS-toestel \"%s\" is reeds in gebruik deur 'n ander program."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Geen toestel gespesifiseer"
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om te lees nie."
+
+#~ msgid "Device is not open."
+#~ msgstr "Toestel is nie oop nie."
+
+#~ msgid "Device is open."
+#~ msgstr "Toestel is oop."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir lees nie."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om in te skryf nie."
+
+#~ msgid "No filename specified."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Kon nie beheertoestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" konfigureer nie."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Kon nie klanktoestel \"%s\" verstel na %d Hz nie."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Kon nie beheertoestel \"%s\" toemaak nie."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Kon nie video-toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Kon nie video-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Kon nie toegang kry tot toestel \"%s\" nie, kyk na toegangsregte."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees nie."
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Speaker"
+#~ msgstr "Luidspreker"
+
+#~ msgid "Mixer"
+#~ msgstr "Menger"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Neem op"
+
+#~ msgid "In-gain"
+#~ msgstr "In-versterking"
+
+#~ msgid "Out-gain"
+#~ msgstr "Uit-versterking"
+
+#~ msgid "Line-1"
+#~ msgstr "Lyn-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Lyn-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Lyn-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digitaal-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digitaal-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digitaal-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefoon-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefoon-uit"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Kon nie genoeg buffers vanaf toestel \"%s\" kry nie."
diff --git a/po/az.gmo b/po/az.gmo
new file mode 100644
index 0000000..8e2623c
--- /dev/null
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
new file mode 100644
index 0000000..9b6b29e
--- /dev/null
+++ b/po/az.po
@@ -0,0 +1,668 @@
+# Translation of 'gst-plugins' messages to Azerbaijani.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Mətin Əmirov <metin@karegen.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-03-19 18:29+0200\n"
+"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
+"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "İncə"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sint"
+
+msgid "Line-in"
+msgstr "Xətd-giriş"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "Spiker"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "\"%s\" audio avadanlığı yazma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+msgid "Could not open CD device for reading."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "\"%s\" avadanlığına yazıla bilmədi."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "\"%s\" faylına yazıla bilmədi."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "\"%s\" faylı bağlana bilmədi."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "\"%s\" vfs faylı yazma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "\"%s\" faylı bağlana bilmədi."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "\"%s\" avadanlığı capture avadanlığı deyil."
+
+#~ msgid "No device specified."
+#~ msgstr "Avadanlıq bildirilməyib."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" avadanlığı mövcud deyil."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "\"%s\" OSS avadanlığı başqa bir proqram tərəfindən istifadədədir."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "\"%s\" faylına yazıla bilmədi."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Avadanlıq bildirilməyib."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "\"%s\" faylına yazıla bilmədi."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" faylı oxuma üçün açıla bilmədi."
+
+#~ msgid "Device is not open."
+#~ msgstr "Avadanlıq açıq deyil."
+
+#~ msgid "Device is open."
+#~ msgstr "Avadanlıq açıqdır."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "\"%s\" vfs faylı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" faylı yazma üçün açıla bilmədi."
+
+#~ msgid "No filename specified."
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" idarə avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı quraşdırıla bilmədi."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" audio avadanlığı %d Hz-ə keçirilə bilmədi."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" idarə avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" video avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" video avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" avadanlığına yetişə bilmədi, səlahiyyətlərini yoxlayın."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" avadanlığı oxuma üçün açıla bilmədi."
+
+#~ msgid "Volume"
+#~ msgstr "Səs"
+
+#~ msgid "Speaker"
+#~ msgstr "Spiker"
+
+#~ msgid "Mixer"
+#~ msgstr "Mikser"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Qeyd"
+
+#~ msgid "In-gain"
+#~ msgstr "Giriş-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Çıxış-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Xətd-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Xətd-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Xətd-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dijital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dijital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dijital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefon-girişi"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefon-çıxışı"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından kifayət qədər bufferlər alına bilmədi."
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644
index 0000000..e7bc9d5
--- /dev/null
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..27aa6df
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,618 @@
+# Bulgarian translation of gst-plugins-base.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Alexander Shopov <ash@kambanaria.org>, 2005, 2006, 2007, 2008, 2009, 2010, 2011.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-26 22:31+0300\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Master"
+msgstr "Главен"
+
+msgid "Bass"
+msgstr "Баси"
+
+msgid "Treble"
+msgstr "Високи"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Синтезатор"
+
+msgid "Line-in"
+msgstr "Вход"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Микрофон"
+
+msgid "PC Speaker"
+msgstr "Високоговорител на PC"
+
+msgid "Playback"
+msgstr "Изпълнение"
+
+msgid "Capture"
+msgstr "Запис"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Устройството не може да се отвори за изпълнение в моно режим."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Устройството не може да се отвори за изпълнение в стерео режим."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Устройството не може да се отвори за изпълнение в %d-канален режим."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Звуковото устройство не може да се отвори за изпълнение, защото се ползва от "
+"друго приложение."
+
+msgid "Could not open audio device for playback."
+msgstr "Звуковото устройство не може да се отвори за изпълнение."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Устройството не може да се отвори за запис в моно режим."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Устройството не може да се отвори за изпълнение в стерео режим."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Устройството не може да се отвори за изпълнение в %d-канален режим."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Звуковото устройство не може да се отвори за запис, защото се ползва от "
+"друго приложение."
+
+msgid "Could not open audio device for recording."
+msgstr "Звуковото устройство не може да се отвори за запис."
+
+msgid "Could not open CD device for reading."
+msgstr "Устройството за CD-та не може да се отвори за четене."
+
+msgid "Could not seek CD."
+msgstr "По CD-то не може да се търси."
+
+msgid "Could not read CD."
+msgstr "CD-то не може да бъде прочетено."
+
+msgid "Internal data stream error."
+msgstr "Вътрешна грешка на потока от данни."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"За да пуснете този поток, се нуждаете от приставка за %s. Такава не е "
+"инсталирана."
+
+msgid "Could not determine type of stream"
+msgstr "Видът на потока не може да бъде определен"
+
+msgid "This appears to be a text file"
+msgstr "Това изглежда е текстов файл"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Елементът „%s“ липсва — проверете инсталацията на GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Едновременно липсват елементите-приемници „autovideosink“ и „%s“."
+
+msgid "The autovideosink element is missing."
+msgstr "Липсва елементът-приемник „autovideosink“."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Настроеният елемент-приемник за видео %s не работи."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Едновременно не работят елементите-приемници „autovideosink“ и „%s“."
+
+msgid "The autovideosink element is not working."
+msgstr "Елементът-приемник за автоматично видео „autovideosink“ не работи."
+
+msgid "Custom text sink element is not usable."
+msgstr "Потребителският елемент-приемник за текст е неизползваем."
+
+msgid "No volume control found"
+msgstr "Липсва управление на силата на звука"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Едновременно липсват елементите-приемници „autoaudiosink“ и „%s“."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Липсва елементът „autoaudiosink“."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Настроеният елемент-приемник за аудио %s не работи."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Едновременно не работят елементите „autoaudiosink“ и „%s“."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Елементът „autoaudiosink“ не работи."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Текстов файл не може да се изпълни без видео или визуализация."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Липсва декодер за вида „%s“."
+
+msgid "No URI specified to play from."
+msgstr "Не е указан адрес за пускане."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Грешен адрес „%s“."
+
+msgid "This stream type cannot be played yet."
+msgstr "Потоци от този тип все още не могат да бъдат изпълнявани."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Обработката на адреси „%s“ не е реализирана."
+
+msgid "Source element is invalid."
+msgstr "Елементът-източник е грешен."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Грешка при запис във файла „%s:%d“."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Връзката към %s:%d е отказана."
+
+msgid "Can't record audio fast enough"
+msgstr "Звукът не може да бъде записан достатъчно бързо"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Неуспешно прочитано на етикет: липсват достатъчно данни"
+
+msgid "track ID"
+msgstr "идентификатор на песен"
+
+msgid "MusicBrainz track ID"
+msgstr "идентификатор на песен според MusicBrainz"
+
+msgid "artist ID"
+msgstr "идентификатор на изпълнител"
+
+msgid "MusicBrainz artist ID"
+msgstr "идентификатор на изпълнител според MusicBrainz"
+
+msgid "album ID"
+msgstr "идентификатор на албум"
+
+msgid "MusicBrainz album ID"
+msgstr "идентификатор на албум според MusicBrainz"
+
+msgid "album artist ID"
+msgstr "идентификатор на изпълнител в албума"
+
+msgid "MusicBrainz album artist ID"
+msgstr "идентификатор на изпълнител в албума според MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "индустриален идентификатор на песен (TRM)"
+
+msgid "MusicBrainz TRM ID"
+msgstr "индустриален идентификатор на песен според MusicBrainz (TRM)"
+
+msgid "capturing shutter speed"
+msgstr "скорост на затвора"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Скорост на затвора при заснемане в секунди"
+
+msgid "capturing focal ratio"
+msgstr "относителна бленда"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Относителна бленда при заснемане"
+
+msgid "capturing focal length"
+msgstr "фокусно разстояние"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Фокусно разстояние на обектива при заснемане в милиметри"
+
+msgid "capturing digital zoom ratio"
+msgstr "цифрово увеличение"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Цифрово увеличение при заснемане"
+
+msgid "capturing iso speed"
+msgstr "светлочувствителност по ISO"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Светлочувствителност по ISO при заснемане"
+
+msgid "capturing exposure program"
+msgstr "програма на експозиция"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Програма на експозиция при заснемане"
+
+msgid "capturing exposure mode"
+msgstr "режим на експозиция"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Режим на експозиция при заснемане"
+
+msgid "capturing exposure compensation"
+msgstr "компенсация на експозицията"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Компенсацията на експозицията при заснемане"
+
+msgid "capturing scene capture type"
+msgstr "вид сцена"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Вид сцена при заснемане"
+
+msgid "capturing gain adjustment"
+msgstr "корекция с усилване"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Общата корекция с усилване при заснемане "
+
+msgid "capturing white balance"
+msgstr "баланс на бялото"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Режим на баланс на бялото при заснемане"
+
+msgid "capturing contrast"
+msgstr "контраст"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Посоката на обработката за контраст при заснемане"
+
+msgid "capturing saturation"
+msgstr "наситеност"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Посоката на обработката за наситеност при заснемане"
+
+msgid "capturing sharpness"
+msgstr "острота"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Посоката на обработката за острота при заснемане"
+
+msgid "capturing flash fired"
+msgstr "светкавица"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Дали е ползвана светкавица при заснемане"
+
+msgid "capturing flash mode"
+msgstr "режим на светкавица"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Режимът на светкавица при заснемане"
+
+msgid "capturing metering mode"
+msgstr "режим на заснемане"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Режим на заснемане при определянето на експозиция"
+
+msgid "capturing source"
+msgstr "източник"
+
+msgid "The source or type of device used for the capture"
+msgstr "Видът на устройството-източник при заснемане"
+
+msgid "image horizontal ppi"
+msgstr "точки на инч по хоризонтал"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Целевата разделителна способност на медията по хоризонтал"
+
+msgid "image vertical ppi"
+msgstr "точки на инч по вертикал"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Целевата разделителна способност на медията по вертикал"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "В това CD липсва аудио"
+
+msgid "ID3 tag"
+msgstr "Етикет ID3"
+
+msgid "APE tag"
+msgstr "Етикет APE"
+
+msgid "ICY internet radio"
+msgstr "Радио в Интернет по ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Аудио на Епъл без загуба на качество (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Свободен кодер за аудио без загуба на качество (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Истинско аудио без загуба на качество (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Говор, формат Windows Media"
+
+msgid "CYUV Lossless"
+msgstr "CYUV без загуба на качество"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg, версия 1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH без загуба на качество"
+
+msgid "Run-length encoding"
+msgstr "Последователно кодиране RLE"
+
+msgid "Sami subtitle format"
+msgstr "Субтитри, формат Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Субтитри, формат TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Субтитри, формат Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Некомпресирано видео YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Некомпресирано изображение с нива на сивото"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Некомпресирано видео YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Некомпресирано, индексирано, %d-битово %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 версия %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Некомпресирано видео YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Аудио, формат необработен %d-битов PCM"
+
+msgid "Audio CD source"
+msgstr "Елемент-източник — CD"
+
+msgid "DVD source"
+msgstr "Елемент-източник — DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Елемент-източник — RTSP (поточен протокол в реално време)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Елемент-източник — MMS (сървър за медия на Майкрософт)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Елемент-източник, протокол %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s елемент, разтоварващ видеото от RTP"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s елемент, разтоварващ аудиото от RTP"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s елемент, разтоварващ  данни от RTP"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Разделител (демултиплексор) %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Декодер %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s елемент, товарещ видеото по RTP"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s елемент, товарещ аудиото по RTP"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s елемент, товарещ данни по RTP"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Уплътнител (мултиплексор) %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Кодер %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Елемент на GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Непознат елемент-източник"
+
+msgid "Unknown sink element"
+msgstr "Непознат елемент-приемник"
+
+msgid "Unknown element"
+msgstr "Непознат елемент"
+
+msgid "Unknown decoder element"
+msgstr "Непознат елемент-декодер"
+
+msgid "Unknown encoder element"
+msgstr "Непознат елемент-кодер"
+
+msgid "Plugin or element of unknown type"
+msgstr "Приставка или елемент от непознат вид"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Некомпресирано видео по равнини YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Некомпресирано видео по равнини YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Некомпресирано, пакетирано видео YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Некомпресирано, пакетирано видео YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Некомпресирано, пакетирано видео YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Некомпресирано, пакетирано видео YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Некомпресирано, пакетирано видео YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Некомпресирано видео по равнини YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Некомпресирано видео по равнини YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Некомпресирано видео с черна и бяла равнини за Y"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Аудио, формат необработен PCM"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Аудио, необработено, %d-битово, с плаваща запетая"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Аудио, необработено с плаваща запетая"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr ""
+#~ "Файлът „%s“ от виртуалната файлова система не може да се отвори за запис: "
+#~ "%s."
+
+#~ msgid "No filename given"
+#~ msgstr "Не е дадено име на файл"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Файлът „%s“ от виртуалната файлова система не може да се затвори."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Грешка при запис във файла „%s“."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Грешен адрес за субтитри „%s“, субтитрите са изключени."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Потоци с RTSP все още не се поддържат."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Не може да се създаде елемент „decodebin“."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Бе засечен единствено поток със субтитри. Или сте заредили файл със "
+#~ "субтитри, или някакъв друг вид текстов файл, или просто видът на "
+#~ "мултимедийния файл не е разпознат."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Липсва декодер за обработката на този файл. Ще трябва да инсталирате "
+#~ "необходимите приставки."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Това не е медиен файл"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Открит е поток със субтитри, липсва видео поток."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr ""
+#~ "Едновременно липсват елементите-приемници „autovideosink“ и „xvimagesink“."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr ""
+#~ "Едновременно липсват елементите-приемници „autoaudiosink“ и „alsasink“."
+
+#~ msgid "No device specified."
+#~ msgstr "Не е указано устройство."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Устройството „%s“ не съществува."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Устройството „%s“ вече се използва."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Устройството „%s“ не може да се отвори за четене и запис."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Грешка при запис на заглавните данни gdp във файла „%s:%d“."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Грешка при изпращането на натоварените по gtp данни към „%s:%d“."
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“[1m/g
+s/”/[0m”/g
+s/‘/‘[1m/g
+s/’/[0m’/g
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..a6d1dda
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..dabbcf3
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,592 @@
+# Catalan translation of gst-plugins-base.
+# Copyright © 2005, 2010 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Jordi Mallach <jordi@sindominio.net>, 2005, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-11-04 23:13+0100\n"
+"Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Mestre"
+
+msgid "Bass"
+msgstr "Baixos"
+
+msgid "Treble"
+msgstr "Treble"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetitzador"
+
+msgid "Line-in"
+msgstr "Línia d'entrada"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Micròfon"
+
+msgid "PC Speaker"
+msgstr "Altaveu PC"
+
+msgid "Playback"
+msgstr "Reproducció"
+
+msgid "Capture"
+msgstr "Captura"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "No s'ha pogut obrir el dispositiu per a reproduir en mode mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "No s'ha pogut obrir el dispositiu per a reproduir en mode estèreo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "No s'ha pogut obrir el dispositiu per a reproduir en mode %d-canals."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"No s'ha pogut obrir el dispositiu d'àudio per a reproduir. El dispositiu "
+"està en ús per una altra aplicació."
+
+msgid "Could not open audio device for playback."
+msgstr "No s'ha pogut obrir el dispositiu d'àudio per a reproduir."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "No s'ha pogut obrir el dispositiu per a enregistrar en mode mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "No s'ha pogut obrir el dispositiu per a enregistrar en mode estèreo."
+
+# FIXME Trailing dot. jm
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "No s'ha pogut obrir el dispositiu per a enregistrar en mode %d-canals"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"No s'ha pogut obrir el dispositiu d'àudio per a enregistrar. El dispositiu "
+"està en ús per una altra aplicació."
+
+msgid "Could not open audio device for recording."
+msgstr "No s'ha pogut obrir el dispositiu d'àudio per a enregistrar."
+
+msgid "Could not open CD device for reading."
+msgstr "No s'ha pogut obrir el dispositiu del CD per a lectura."
+
+msgid "Could not seek CD."
+msgstr "No s'ha pogut cercar el CD."
+
+msgid "Could not read CD."
+msgstr "No s'ha pogut llegir el CD."
+
+msgid "Internal data stream error."
+msgstr "S'ha produït un error intern de flux de dades."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Es requereix un connector %s per a reproduir aquest flux, però no és "
+"instaŀlat."
+
+msgid "Could not determine type of stream"
+msgstr "No s'ha pogut determinar el tipus de flux"
+
+msgid "This appears to be a text file"
+msgstr "Açò sembla ser un fitxer de text"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Manca l'element «%s» - comproveu la vostra instaŀlació del GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Manquen els elements autovideosink i %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Manca l'element autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "El videosink configurat %s no funciona."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Tant l'element autovideosink com el %s no funcionen."
+
+msgid "The autovideosink element is not working."
+msgstr "L'element autovideosink no funciona."
+
+msgid "Custom text sink element is not usable."
+msgstr "L'element sortida personalitzat de text no es pot emprar."
+
+msgid "No volume control found"
+msgstr "No s'ha trobat un control de volum"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Manquen els elements autoaudiosink i %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Manca l'element autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "L'audiosink configurat %s no funciona."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "No funcionen tant l'element autoaudiosink com el %s."
+
+msgid "The autoaudiosink element is not working."
+msgstr "L'element autoaudiosink no funciona."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "No es pot reproduir un fitxer de text sense vídeo o visualitzacions."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "No hi ha un decodificador disponible per al tipus «%s»."
+
+msgid "No URI specified to play from."
+msgstr "No s'ha especificat cap URL des d'on reproduir."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "L'URI «%s» és invàlid."
+
+msgid "This stream type cannot be played yet."
+msgstr "Encara no es pot reproduir aquest tipus de flux."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "No hi ha cap gestor d'URI implementat per a «%s»."
+
+msgid "Source element is invalid."
+msgstr "L'element font és invàlid."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "S'ha produït un error en enviar dades a «%s:%d»."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "S'ha refusat la connexió amb %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "No es pot enregistrar l'àudio el suficientment ràpid"
+
+msgid "Failed to read tag: not enough data"
+msgstr "No s'ha pogut llegir l'etiqueta: no hi ha dades suficients"
+
+msgid "track ID"
+msgstr "ID de la pista"
+
+msgid "MusicBrainz track ID"
+msgstr "ID de la pista al MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID de l'artista"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID de l'artista al MusicBrainz"
+
+msgid "album ID"
+msgstr "ID de l'àlbum"
+
+msgid "MusicBrainz album ID"
+msgstr "ID de l'àlbum al MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID de l'artista de l'àlbum"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID de l'artista de l'àlbum al MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID TRM de la pista"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM al MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "velocitat de l'obturador de la captura"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr "ppi horitzontal de la imatge"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Densitat horitzontal de píxels del medi (imatge/vídeo), en ppi"
+
+msgid "image vertical ppi"
+msgstr "ppi vertical de la imatge"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Densitat vertical de píxels del medi (imatge/vídeo), en ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Aquest CD no té pistes d'àudio"
+
+msgid "ID3 tag"
+msgstr "Etiqueta ID3"
+
+msgid "APE tag"
+msgstr "Etiqueta APE"
+
+msgid "ICY internet radio"
+msgstr "Emisora de ràdio per Internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV sense pèrdua"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH sense pèrdua"
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr "Format de subtítols Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Format de subtítols TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Format de subtítols Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV sense comprimir"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Imatge en escala de grisos no comprimida"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV sense comprimir"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "YUV sense comprimir"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versió %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV sense comprimir"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Àudio en cru de %d-bit"
+
+msgid "Audio CD source"
+msgstr "Font de CD d'àudio"
+
+msgid "DVD source"
+msgstr "Font de DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Font del Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Font del protocol Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Font del protocol %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Descarregador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Descarregador d'àudio RTP %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Descarregador RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demultiplexor %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Decodificador %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Carregador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Carregador d'àudio RTP %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Carregador RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Multiplexor %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Codificador %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Element del GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "L'element de font és desconegut"
+
+msgid "Unknown sink element"
+msgstr "L'element de sortida és desconegut"
+
+msgid "Unknown element"
+msgstr "L'element és desconegut"
+
+msgid "Unknown decoder element"
+msgstr "L'element decodificador és desconegut"
+
+msgid "Unknown encoder element"
+msgstr "L'element codificador és desconegut"
+
+msgid "Plugin or element of unknown type"
+msgstr "El connector o element és de tipus desconegut"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Àudio PCM en cru"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Àudio en cru de %d-bit en coma flotant"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Àudio en cru en coma flotant"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "No s'ha pogut obrir el fitxer vfs «%s» per a l'escriptura: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "No s'ha donat cap nom de fitxer"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "No s'ha pogut tancar el fitxer vfs «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "S'ha produït un error en escriure al fitxer «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "L'URI de subtítols «%s» és invàlida, s'inhabiliten els subtítols."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Encara no es poden reproduir els fluxes RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "No s'ha pogut crear l'element «decodebin»."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Només s'ha detectat un flux de subtítols. O bé esteu carregant un fitxer "
+#~ "de subtítols o qualsevol altre tipus de fitxer de text, o no s'ha "
+#~ "reconegut el fitxer de medi."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "No teniu un decodificador instaŀlat per a gestionar aquest fitxer. És "
+#~ "possible que necessiteu instaŀlar els connectors necessaris."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Aquest no és un fitxer de medi"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "S'ha detectat un flux de subtítols, però no un flux de vídeo."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Manquen l'element autovideosink i el xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Manquen l'element autoaudiosink i l'alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "No s'ha especificat un dispositiu."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "El dispositiu «%s» no existeix."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "El dispositiu «%s» ja és en ús."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "No s'ha pogut obrir el dispositiu «%s» per a llegir i escriure."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr ""
+#~ "S'ha produït un error en enviar dades de la capçalera gdp a «%s:%d»."
+
+# Payload -> càrrega en molts àmbits. jm
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr ""
+#~ "S'ha produït un error en enviar la càrrega de dades de gdp a «%s:%d»."
+
+#~ msgid "discid"
+#~ msgstr "id del disc"
+
+#~ msgid "CDDA discid for metadata retrieval"
+#~ msgstr "id del disc de CDDA per a l'obtenció de les metadades"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..d8082c3
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..9e42eed
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,618 @@
+# Czech translations of gst-plugins-base.
+# Copyright (C) 2007, 2008, 2009, 2010, 2011 the author(s) of gst-plugins-base.
+# Copyright (C) 2004 Miloslav Trmac <mitr@volny.cz>.
+# This file is put in the public domain.
+# Miloslav Trmac <mitr@volny.cz>, 2004.
+# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base-0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-10-31 10:51+0100\n"
+"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Lokalize 1.2\n"
+
+msgid "Master"
+msgstr "Master"
+
+msgid "Bass"
+msgstr "Basy"
+
+msgid "Treble"
+msgstr "Výšky"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Syntezátor"
+
+msgid "Line-in"
+msgstr "Linkový vstup"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC Speaker"
+
+msgid "Playback"
+msgstr "Přehrávání"
+
+msgid "Capture"
+msgstr "Záznam"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nezdařilo se otevření zařízení k přehrávání v režimu mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nezdařilo se otevření zařízení k přehrávání v režimu stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Nezdařilo se otevření zařízení k přehrávání v %dkanálovém režimu."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nezdařilo se otevření zvukového zařízení k přehrávání. Zařízení je používáno "
+"jinou aplikací."
+
+msgid "Could not open audio device for playback."
+msgstr "Nezdařilo se otevření zvukového zařízení k přehrávání."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nezdařilo se otevření zařízení k záznamu v režimu mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Nezdařilo se otevření zařízení k záznamu v režimu stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Nezdařilo se otevření zařízení k záznamu v %dkanálovém režimu"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nezdařilo se otevření zvukového zařízení k záznamu. Zařízení je používáno "
+"jinou aplikací."
+
+msgid "Could not open audio device for recording."
+msgstr "Nezdařilo se otevření zvukového zařízení k záznamu."
+
+msgid "Could not open CD device for reading."
+msgstr "Nezdařilo se otevření zařízení CD ke čtení."
+
+msgid "Could not seek CD."
+msgstr "Nezdařilo se nalézt CD."
+
+msgid "Could not read CD."
+msgstr "Nezdařilo se přečíst CD."
+
+msgid "Internal data stream error."
+msgstr "Vnitřní chyba datového proudu."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Zásuvný modul %s je vyžadován k přehrání tohoto proudu, ale není "
+"nainstalován."
+
+msgid "Could not determine type of stream"
+msgstr "Nezdařilo se určit typ proudu"
+
+msgid "This appears to be a text file"
+msgstr "Zdá se, že se jedná o textový soubor"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Schází prvek \"%s\" - zkontrolujte prosím instalaci systému GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Schází jak prvek autovideosink, tak %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Schází prvek autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Nefunguje prvek videosink %s."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Nefunguje ani prvek autovideosink, ani %s."
+
+msgid "The autovideosink element is not working."
+msgstr "Nefunguje prvek autovideosink."
+
+msgid "Custom text sink element is not usable."
+msgstr "Vlastní prvek kanálu textu není použitelný."
+
+msgid "No volume control found"
+msgstr "Nenalezeno žádné ovládání hlasitosti"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Schází jak prvek autoaudiosink, tak %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Schází prvek autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Nefunguje prvek audiosink %s."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Nefunguje ani prvek autoaudiosink, ani %s."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Nefunguje prvek autoaudiosink."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Textový soubor nelze přehrát bez videa nebo vizualizací."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "K typu \"%s\" není dostupný dekodér."
+
+msgid "No URI specified to play from."
+msgstr "Nezadáno žádné URI, ze kterého se má přehrávat."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Neplatné URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Tento typ proudu zatím nemůže být přehrán."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "U \"%s\" není prováděna obsluha URI."
+
+msgid "Source element is invalid."
+msgstr "Zdrojový prvek je neplatný."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Chyba při odesílání dat na \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Spojení s %s:%d bylo odmítnuto."
+
+msgid "Can't record audio fast enough"
+msgstr "Zvuk nelze zaznamenat s dostatečnou rychlostí"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Nezdařilo se přečtení značky: nedostatek dat"
+
+msgid "track ID"
+msgstr "ID stopy"
+
+msgid "MusicBrainz track ID"
+msgstr "ID stopy MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID umělce"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID umělce MusicBrainz"
+
+msgid "album ID"
+msgstr "ID alba"
+
+msgid "MusicBrainz album ID"
+msgstr "ID alba MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID umělce alba"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID umělce alba MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID stopy TRM"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID stopy TRM MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "rychlost závěrky záznamu"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Rychlost závěrky při záznamu obrazu, v sekundách"
+
+msgid "capturing focal ratio"
+msgstr "ohnisková vzdálenost záznamu"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Clonové číslo při záznamu obrazu"
+
+msgid "capturing focal length"
+msgstr "ohnisková vzdálenost záznamu"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Ohnisková vzdálenost čoček při záznamu obrazu, v mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "stupeň digitálního přiblížení záznamu"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Stupeň digitálního přiblížení při záznamu obrazu"
+
+msgid "capturing iso speed"
+msgstr "rychlost ISO záznamu"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Rychlost ISO při záznamu obrazu"
+
+msgid "capturing exposure program"
+msgstr "program expozice záznamu"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Program expozice při záznamu obrazu"
+
+msgid "capturing exposure mode"
+msgstr "režim expozice záznamu"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Režim expozice při záznamu obrazu"
+
+msgid "capturing exposure compensation"
+msgstr "kompenzace expozice záznamu"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Kompenzace expozice při záznamu obrazu"
+
+msgid "capturing scene capture type"
+msgstr "typ zachycení scény záznamu"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Typ zachycení scény při záznamu obrazu"
+
+msgid "capturing gain adjustment"
+msgstr "úprava zesílení záznamu"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Úprava zesílení při záznamu obrazu"
+
+msgid "capturing white balance"
+msgstr "vyvážení bílé záznamu"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Režim vyvážení bílé nastavený při záznamu obrazu"
+
+msgid "capturing contrast"
+msgstr "kontrast záznamu"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Použité zpracování kontrastu při záznamu obrazu"
+
+msgid "capturing saturation"
+msgstr "sytost záznamu"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Použité zpracování sytosti při záznamu obrazu"
+
+msgid "capturing sharpness"
+msgstr "ostrost záznamu"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Použité zpracování ostrosti při záznamu obrazu"
+
+msgid "capturing flash fired"
+msgstr "použití blesku při záznamu"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Zda byl při záznamu obrazu použit blesk"
+
+msgid "capturing flash mode"
+msgstr "režim blesku při záznamu"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Režim blesku vybraný při záznamu obrazu"
+
+msgid "capturing metering mode"
+msgstr "režim měření při záznamu"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Režim měření expozice při záznamu obrazu"
+
+msgid "capturing source"
+msgstr "zdroj záznamu"
+
+msgid "The source or type of device used for the capture"
+msgstr "Zdroj nebo typ zařízení použitého při záznamu"
+
+msgid "image horizontal ppi"
+msgstr "pixelů na palec vodorovně v obrazu"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Zamýšlená hustota pixelů multimédia (image/video) vodorovně v pixelech na "
+"palec"
+
+msgid "image vertical ppi"
+msgstr "pixelů na palec svisle v obrazu"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Zamýšlená hustota pixelů multimédia (image/video) svisle v pixelech na palec"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Toto CD nemá žádné zvukové stopy"
+
+msgid "ID3 tag"
+msgstr "Značka ID3"
+
+msgid "APE tag"
+msgstr "Značka APE"
+
+msgid "ICY internet radio"
+msgstr "Internetové rádio ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "Bezeztrátový CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Bezeztrátové MSZH"
+
+msgid "Run-length encoding"
+msgstr "RLE (Run-Length Encoding)"
+
+msgid "Sami subtitle format"
+msgstr "Formát titulků Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Formát titulků TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Formát titulků Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Uncompressed Gray Image"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nekomprimovaný paletizovaný %dbitový %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4, verze %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Surový %dbitový zvuk PCM"
+
+msgid "Audio CD source"
+msgstr "Zdroj zvukového CD"
+
+msgid "DVD source"
+msgstr "Zdroj DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Zdroj Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Zdroj protokolu Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Zdroj protokolu %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Depayloader RTP %s, video"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Depayloader RTP %s, audio"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Depayloader RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demultiplexer %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Dekodér %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Payloader RTP %s, video"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Payloader RTP %s, audio"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Payloader RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Multiplexer %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Kodér %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Prvek systému GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Neznámý zdrojový prvek"
+
+msgid "Unknown sink element"
+msgstr "Neznámý kanálový prvek"
+
+msgid "Unknown element"
+msgstr "Neznámý prvek"
+
+msgid "Unknown decoder element"
+msgstr "Neznámý dekodérový prvek"
+
+msgid "Unknown encoder element"
+msgstr "Neznámý kodérový prvek"
+
+msgid "Plugin or element of unknown type"
+msgstr "Zásuvný modul nebo prvek neznámého typu"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nekomprimovaný planární YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nekomprimovaný planární YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nekomprimovaný zabalený YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nekomprimovaný zabalený YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nekomprimovaný zabalený YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nekomprimovaný zabalený YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nekomprimovaný zabalený YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nekomprimovaný planární YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nekomprimovaný planární YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nekomprimovaná černá a bílá rovina Y"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Surový zvuk PCM"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Surový %dbitový zvuk s pohyblivou desetinnou čárkou"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Surový zvuk s pohyblivou desetinnou čárkou"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nezdařilo se otevření souboru vfs \"%s\" k zápisu: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nezadán název souboru"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nezdařilo se zavření souboru vfs \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Chyba při zápisu do souboru \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Neplatné URI titulků \"%s\", titulky vypnuty."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Proudy RTSP zatím nemohou být přehrávány."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nezdařilo se vytvoření prvku \"decodebin\"."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Byl rozpoznán pouze proud titulků. Buď je nahráván pouze soubor titulků "
+#~ "nebo nějaký jiný typ textového soubor, popřípadě nebyl rozpoznán "
+#~ "multimediální soubor."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "K obsluze tohoto souboru není nainstalován dekodér. Patrně bude nutné "
+#~ "nainstalovat nezbytné zásuvné moduly."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Toto není multimediální soubor"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Byl rozpoznán proud titulků, ale nikoliv obrazový proud."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Schází jak prvek autovideosink, tak xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Schází jak prvek autoaudiosink, tak alsasink."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Chyba při odesílání dat záhlaví gdp na \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Chyba při odesílání zátěžových dat gdp na \"%s:%d\"."
+
+#~ msgid "No device specified."
+#~ msgstr "Nezadáno zařízení."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Zařízení \"%s\" neexistuje."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Zařízení \"%s\" je již používáno."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Zařízení \"%s\" se nezdařilo otevřít ke čtení a k zápisu."
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..0628323
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..586cbd3
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,657 @@
+# Danish translation of gst-plugins-base.
+# Copyright (C) 2011 gst, Mogens Jaeger, Joe Hansen.
+# This file is distributed under the same license as the gst-plugins-base package.
+#
+# Mogens Jaeger <mogens@jaeger.tf>, 2007.
+# Joe Hansen <joedalton2@yahoo.dk>, 2009, 2010, 2011.
+#
+# capture -> optage
+# gain -> forstærkning
+# shutter -> lukketid
+#
+# Hej Torben, de fleste af dem her er vist afklaringen af hvorvidt det er et
+# udsagnsord eller navneord. Har du været i koden og kigge? Ville godt nok 
+# være ked af at rette alle dem her, for så bare at »opdage« at de var gode nok,
+# Nu har jeg haft src/gst-plugins-base/tags.c åben i en nylig version
+# (gst-blugins-base version 0.10.31), og jeg tror ikke strengene bruges,
+# mens der sker en aktiv handling.
+# I filen ser det således ud:
+#    /* photography tags */
+#    gst_tag_register (GST_TAG_CAPTURING_SHUTTER_SPEED,
+#       GST_TAG_FLAG_META,
+#       GST_TYPE_FRACTION,
+#       _("capturing shutter speed"),
+#       _("Shutter speed used when capturing an image,
+#          in seconds"), NULL);
+# Dette kan du se som en indgang i en tabel over strenge. Den første korte
+# streng er navnet på mærket, den anden er en beskrivelse af samme mærke.
+# Strengene er altså betegnelser/navneord. 
+#
+# brugt kunne erstattes med der blev brugt (men skal så rettes igennem for alle).
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-28 16:38+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Master"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Diskant"
+
+msgid "PCM"
+msgstr "Pcm"
+
+msgid "Synth"
+msgstr "Synthesizer"
+
+msgid "Line-in"
+msgstr "Linie-ind"
+
+msgid "CD"
+msgstr "Cd"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "Pc-højttaler"
+
+msgid "Playback"
+msgstr "Afspilning"
+
+msgid "Capture"
+msgstr "Optage"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Kunne ikke afspille fra enheden i mono-tilstand."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Kunne ikke afspille fra enheden i stereo-tilstand."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Kunne ikke afspille fra enheden i %d-kanals-tilstand."
+
+# måske bruges af et andet program.
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Kunne ikke åbne lydenhed til afspilning. Enhed anvendes af et andet program."
+
+msgid "Could not open audio device for playback."
+msgstr "Kunne ikke åbne lydenhed til afspilning."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Kunne ikke optage fra enheden i mono-tilstand."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Kunne ikke optage fra enheden i stereo-tilstand."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Kunne ikke optage fra enheden i %d-kanals-tilstand."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Kunne ikke åbne lydenhed til optagelse. Enheden anvendes af et andet program."
+
+msgid "Could not open audio device for recording."
+msgstr "Kunne ikke åbne lydenhed til optagelse."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke læse fra cd-enhed."
+
+msgid "Could not seek CD."
+msgstr "Kunne ikke søge på cd."
+
+msgid "Could not read CD."
+msgstr "Kunne ikke læse cd."
+
+msgid "Internal data stream error."
+msgstr "Intern datastrømsfejl."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Et %s plugin er nødvendigt ved afspilning af denne sekvens, men ikke "
+"installeret."
+
+msgid "Could not determine type of stream"
+msgstr "Kunne ikke afgøre strømtypen"
+
+msgid "This appears to be a text file"
+msgstr "Denne fremstår som en tekstfil"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "'%s' elementet mangler - check din GStreamer installation."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Både autovideosink og %s elementer mangler."
+
+msgid "The autovideosink element is missing."
+msgstr "Elementet autovideosink mangler."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Konfigureret videosink %s virker ikke."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Både autovideosink og %s elementerne virker ikke."
+
+msgid "The autovideosink element is not working."
+msgstr "Elementet autovideosink virker ikke."
+
+msgid "Custom text sink element is not usable."
+msgstr "Brugertilpasset tekstsinkelement er ikke brugbart."
+
+msgid "No volume control found"
+msgstr "Ingen lydstyrkekontrol fundet"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Både autoaudiosink og %s elementerne mangler."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Elementet autoaudiosink mangler."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Konfigureret audiosink %s virker ikke."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Både autoaudiosink og  %s elementerne virker ikke."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Elementet autoaudiosink virker ikke."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Kan ikke afspille en tekstfil uden video eller visualiseringer."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Ingen dekoder tilgængelig for type '%s'."
+
+msgid "No URI specified to play from."
+msgstr "Ingen angivet URI til afspilning."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Ugyldig URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Denne type lydstrøm kan ikke afspilles endnu."
+
+# har beholdt »er«
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Ingen URI-håndtering er implementeret for \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Kildeelement er ugyldigt."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Der opstod en fejl under data-overførsel til \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Opkobling til %s:%d afvist."
+
+msgid "Can't record audio fast enough"
+msgstr "Kan ikke optage lyd hurtigt nok"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Kunne ikke læse mærke: Ikke nok data"
+
+msgid "track ID"
+msgstr "spor-id"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz spor-id"
+
+msgid "artist ID"
+msgstr "kunstner-id"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz kunstner-id"
+
+msgid "album ID"
+msgstr "album-id"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz album-id"
+
+msgid "album artist ID"
+msgstr "albumkunstner-id"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albumkunstner-id"
+
+msgid "track TRM ID"
+msgstr "spor TRM-id"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM-id"
+
+# nb ikke handling men navneord.
+# "optagelukkertid" / "optagerlukkertid"
+# Mogens: shutter speed = lukkerhastighed
+msgid "capturing shutter speed"
+msgstr "optagerlukkertid"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Lukketidshastighed brugt når et billede optages, i sekunder"
+
+msgid "capturing focal ratio"
+msgstr "brændforhold for optager"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Brændforhold (f-nummer) brugt under optagelse af billedet"
+
+msgid "capturing focal length"
+msgstr "brændvidde for optager"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Brændvidde på linse brugt under optagelse af billedet, i mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "digitalt zoomforhold for optager"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Digitalt zoomforhold brugt under optagelse af et billede"
+
+msgid "capturing iso speed"
+msgstr "iso-hastighed for optager"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "ISO-hastigheden brugt under optagelse af et billede"
+
+msgid "capturing exposure program"
+msgstr "belysningsprogram for optagelse"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Belysningsprogrammet brugt under optagelse af et billede"
+
+msgid "capturing exposure mode"
+msgstr "belysningstilstand for optagelse"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Belysningstilstanden brugt under optagelse af et billede"
+
+msgid "capturing exposure compensation"
+msgstr "belysningskompensation for optagelse"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Belysningskompensationen brugt under optagelse af et billede"
+
+# "optagelsestype for optagelse af scene" /
+# "optagelsestype for sceneoptagelse" /
+# "sceneoptagelsestype for optager" /
+# "optageroptagelsestype for scene"
+# De to første rammer vist forlægget mest præcist.
+msgid "capturing scene capture type"
+msgstr "optagelsestype for optagelse af scene"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Sceneoptagelsestilstanden brugt da billedet blev optaget"
+
+# "justering af optageforstærkning" /
+# "justering af optagerforstærkning"
+msgid "capturing gain adjustment"
+msgstr "justering af optageforstærkning"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Den samlede optageforstærkning brugt på et billede"
+
+msgid "capturing white balance"
+msgstr "hvidbalance for optagelse"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Hvidbalancetilstanden angivet under optagelse af et billede"
+
+# kontrast for optagelse
+msgid "capturing contrast"
+msgstr "optagekontrast"
+
+# Jeg tror "direction" skal oversættes til "indstilling af"
+# (sml. "director" ~ "instruction" ~ "instruering" ~ "indstilling"
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Indstilling af kontrastprocessen brugt under optagelse af et billede"
+
+msgid "capturing saturation"
+msgstr "farvemætning for optagelse"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"Indstillingen af farvemætningsprocessen brugt under optagelse af et billede"
+
+msgid "capturing sharpness"
+msgstr "optageskarphed"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "skarphedindstilling brugt under optagelse af et billede"
+
+msgid "capturing flash fired"
+msgstr "optagerblitzen der blev brugt"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Hvorvidt blitzen blev brugt under optagelse af et billede"
+
+msgid "capturing flash mode"
+msgstr "optagererens blitztilstand"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Den valgte blitztilstand under optagelse af et billede"
+
+msgid "capturing metering mode"
+msgstr "optagerens måletilstand"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Måletilstanden brugt da optagelsens belysning skulle bestemmes"
+
+msgid "capturing source"
+msgstr "optagekilde"
+
+msgid "The source or type of device used for the capture"
+msgstr "Kilden eller typen af enhed brugt under optagelsen"
+
+msgid "image horizontal ppi"
+msgstr "billedets vandrette billedtæthed (ppi)"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Påtænkt vandret billedtæthed for medie (billede/video) i ppi"
+
+msgid "image vertical ppi"
+msgstr "billedets lodrette billedtæthed (ppi)"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Påtænkt lodret billedtæthed for medie (billede/video) i ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Denne cd har ingen lydspor"
+
+msgid "ID3 tag"
+msgstr "ID3-mærke"
+
+msgid "APE tag"
+msgstr "APE-mærke"
+
+msgid "ICY internet radio"
+msgstr "ICY-internetradio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "Kørsels-længde indkodning"
+
+msgid "Sami subtitle format"
+msgstr "Sami undertekstformat"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer undertekstformat"
+
+msgid "Kate subtitle format"
+msgstr "Undertekstformat Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Ukomprimeret YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Ukomprimeret gråtonebillede"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Ukomprimeret YUV"
+
+# Findes dette ord palettet på dansk ? evt. indekseret
+# Ukomprimeret palettet %d-bit %s
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Ukomprimeret indekseret %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 version %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Ukomprimeret YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Ufiltreret %d-bit PCM audio"
+
+msgid "Audio CD source"
+msgstr "Audio cd kilde"
+
+msgid "DVD source"
+msgstr "DVD kilde"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol (RTSP) kilde"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) protokol kilde"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokol kilde"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video RTP-depayloader"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s lyd RTP-depayloader"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP-depayloader"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s afkoder"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video RTP-payloader"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s lyd RTP-payloader"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP-payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s muxer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s indkoder"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer element %s"
+
+msgid "Unknown source element"
+msgstr "Ukendt kildeelement"
+
+# sink ? (afløb, kanal)
+msgid "Unknown sink element"
+msgstr "Ukendt afløbselement"
+
+msgid "Unknown element"
+msgstr "Ukendt element"
+
+msgid "Unknown decoder element"
+msgstr "Ukendt afkodeelement"
+
+msgid "Unknown encoder element"
+msgstr "Ukendt indkodeelement"
+
+msgid "Plugin or element of unknown type"
+msgstr "Plugin eller element af ukendt type"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Ukomprimeret plan-YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Ukomprimeret plan-YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Ukomprimeret pakket YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Ukomprimeret pakket YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Ukomprimeret pakket YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Ukomprimeret pakket YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Ukomprimeret pakket YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Ukomprimeret plan-YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Ukomprimeret plan-YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Ukomprimeret sort og hvid Y-plan"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Ufiltreret PCM audio"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Ufiltreret %d-bit flydende-komma audio"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Ufiltreret flydende-komma audio"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kunne ikke åbne vfs-filen \"%s\" til skrivning: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Intet filnavn angivet"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Kunne ikke lukke vfs-filen \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Fejl ved skrivning til filen \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Defekt undertekst URI \"%s\", undertekster deaktiveret."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP sekvenser kan endnu ikke afspilles."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Kunne ikke danne et \"decodebin\" element."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Der blev kun fundet en undertekst-sekvens. Enten forsøger du at indlæse "
+#~ "en undertekst-fil eller en anden type tekstfil, eller media-filen blev "
+#~ "ikke genkendt."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Du har ingen dekoder installeret, der kan håndtere denne fil. Du er nødt "
+#~ "til at installere de nødvendige plugins."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Dette er ikke en media-fil"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "En undertekst-sekvens blev fundet, men ingen video-sekvens."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Både autovideosink og xvimagesink elementerne mangler."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Både autoaudiosink og alsasink elementerne mangler."
+
+#~ msgid "No device specified."
+#~ msgstr "Ingen enhed angivet."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Enheden \"%s\" eksisterer ikke."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Enheden \"%s\" er allerede i brug."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kunne ikke tilgå enheden \"%s\"."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Der opstod en fejl under overførsel af gdp-overskriftsdata til \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Der opstod en fejl under overførsel af gdp-pakkeindhold til \"%s:%d\"."
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..0e6d11d
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..9869981
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,653 @@
+# German messages for gst-plugins-base 0.10.32.2
+# Copyright © 2006 Karl Eichwalder
+# This file is distributed under the same license as the gst-plugins-base package.
+# Karl Eichwalder <ke@suse.de>, 2006.
+# Mario Blättermann <mariobl@gnome.org>, 2010.
+# Christian Kirbach <christian.kirbach@googlemail.com>, 2009, 2010, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-28 00:04+0200\n"
+"Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Hauptregler"
+
+msgid "Bass"
+msgstr "Bass"
+
+msgid "Treble"
+msgstr "Höhen"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Line-Eingang"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC-Lautsprecher"
+
+msgid "Playback"
+msgstr "Wiedergabe"
+
+msgid "Capture"
+msgstr "Aufnahme"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Gerät konnte nicht zur Wiedergabe in Mono geöffnet werden."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Gerät konnte nicht zur Wiedergabe in Stereo geöffnet werden."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Gerät konnte nicht zur Wiedergabe im %d-Kanalmodus geöffnet werden."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Audio-Gerät konnte nicht zur Wiedergabe geöffnet werden. Es wird durch eine "
+"andere Anwendung verwendet."
+
+msgid "Could not open audio device for playback."
+msgstr "Audio-Gerät konnte nicht zur Wiedergabe geöffnet werden."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Gerät konnte nicht zur Aufnahme in Mono geöffnet werden."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Gerät konnte nicht zur Aufnahme in Stereo geöffnet werden."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Gerät konnte nicht zur Aufnahme im %d-Kanalmodus geöffnet werden."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Audio-Gerät konnte nicht zur Aufnahme geöffnet werden. Es wird durch eine "
+"andere Anwendung verwendet."
+
+msgid "Could not open audio device for recording."
+msgstr "Audio-Gerät konnte nicht zur Aufnahme geöffnet werden."
+
+msgid "Could not open CD device for reading."
+msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
+
+msgid "Could not seek CD."
+msgstr "Suchvorgang auf der CD ist fehlgeschlagen."
+
+msgid "Could not read CD."
+msgstr "CD konnte nicht gelesen werden."
+
+msgid "Internal data stream error."
+msgstr "Interner Fehler im Datenstrom."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber "
+"nicht installiert."
+
+msgid "Could not determine type of stream"
+msgstr "Der Typ des Datenstroms konnte nicht bestimmt werden"
+
+msgid "This appears to be a text file"
+msgstr "Dies scheint eine Textdatei zu sein"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+"Das Element »%s« fehlt - überprüfen Sie Ihre Installation von GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Beide Elemente »autovideosink« und »%s« fehlen."
+
+msgid "The autovideosink element is missing."
+msgstr "Das Element »autovideosink« fehlt."
+
+# »Senke« hört sich echt scheußlich an.
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Das konfigurierte Videoziel »%s« funktioniert nicht."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Beide Elemente »autovideosink« und »%s« funktionieren nicht."
+
+msgid "The autovideosink element is not working."
+msgstr "Das Element »autovideosink« funktioniert nicht."
+
+msgid "Custom text sink element is not usable."
+msgstr "Das eigene Element des Textziels ist nicht verwendbar."
+
+msgid "No volume control found"
+msgstr "Keine Lautstärkeregelung gefunden"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Beide Elemente »autoaudiosink« und »%s« fehlen."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Das Element »autoaudiosink« fehlt."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Das konfigurierte Audioziel »%s« funktioniert nicht."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Beide Elemente »autoaudiosink« und »%s« funktionieren nicht."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Das Element »autoaudiosink« funktioniert nicht."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Es kann keine Textdatei ohne Video oder Visualisierungen abgespielt werden."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Für den Typ »%s« ist kein Decoder vorhanden."
+
+msgid "No URI specified to play from."
+msgstr "Keine Adresse (URI) zum Abspielen angegeben."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Ungültige Adresse (URI) »%s«."
+
+msgid "This stream type cannot be played yet."
+msgstr "Dieser Datenstrom kann noch nicht abgespielt werden."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Es ist kein URI-Handler für »%s« implementiert."
+
+msgid "Source element is invalid."
+msgstr "Das Quellelement ist ungültig."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Fehler beim Senden der Daten nach »%s:%d«."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Verbindung nach %s:%d wurde verweigert."
+
+msgid "Can't record audio fast enough"
+msgstr "Der Ton kann nicht schnell genug aufgezeichnet werden"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Lesen der Kennzeichnung schlug fehl: Nicht genug Daten"
+
+msgid "track ID"
+msgstr "Titelkennung"
+
+msgid "MusicBrainz track ID"
+msgstr "Titelkennung von MusicBrainz"
+
+# Hach, hier haben wir ja noch mehr »Interpreten«!
+msgid "artist ID"
+msgstr "Künstlerkennung"
+
+msgid "MusicBrainz artist ID"
+msgstr "Künstlerkennung von MusicBrainz"
+
+msgid "album ID"
+msgstr "Albenkennung"
+
+msgid "MusicBrainz album ID"
+msgstr "Albenkennung von MusicBrainz"
+
+msgid "album artist ID"
+msgstr "Kennung des Albenkünstlers"
+
+msgid "MusicBrainz album artist ID"
+msgstr "Kennung des Albenkünstlers von MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "TRM-Kennung verfolgen"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz-TRM-Kennung"
+
+msgid "capturing shutter speed"
+msgstr "Belichtungszeit"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Belichtungszeit bei Aufnahme eines Bildes in Sekunden"
+
+msgid "capturing focal ratio"
+msgstr "Blendenwert"
+
+# F-Nummer kennt bei uns kein Mensch. Oder doch...?
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Der verwendete Blendenwert bei Bildaufnahme"
+
+msgid "capturing focal length"
+msgstr "Brennweite"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Die verwendete Brennweite des Objektivs bei Bildaufnahme in mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "Digitale Vergrößerung"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Die verwendete digitale Vergrößerung bei Bildaufnahme"
+
+msgid "capturing iso speed"
+msgstr "ISO-Empfindlichkeit"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Die verwendete ISO-Empfindlichkeit bei Bildaufnahme"
+
+msgid "capturing exposure program"
+msgstr "Belichtungsprogramm"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Das verwendete Belichtungsprogramm bei Bildaufnahme"
+
+msgid "capturing exposure mode"
+msgstr "Belichtungsmodus der Aufnahme"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Der verwendete Belichtungsmodus bei Bildaufnahme"
+
+msgid "capturing exposure compensation"
+msgstr "Belichtungskorrektur der Aufnahme"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Der verwendete Belichtungskorrektur bei Bildaufnahme"
+
+msgid "capturing scene capture type"
+msgstr "Motivwahl"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Die verwendete Motivwahl bei Bildaufnahme"
+
+msgid "capturing gain adjustment"
+msgstr "Anpassung der Aufnahmebelichtung"
+
+# »Gain adjustment« kenne ich eigentlich nur bei Audiodateien. Müsste sich hier um eine Anpassung der Belichtungswerte handeln.
+msgid "The overall gain adjustment applied on an image"
+msgstr "Die auf das Bild angewendete Anpassung der Belichtungswerte"
+
+msgid "capturing white balance"
+msgstr "Weißabgleich"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Der eingestellte Weißabgleich bei Bildaufnahme"
+
+msgid "capturing contrast"
+msgstr "Kontrast"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Die Einstellung zur angewendeten Kontrastbearbeitung bei Bildaufnahme"
+
+msgid "capturing saturation"
+msgstr "Sättigung"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"Die Einstellung zur angewendeten Sättigungsbearbeitung bei Bildaufnahme"
+
+msgid "capturing sharpness"
+msgstr "Schärfe"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Die Einstellung zur angewendeten Schärfebearbeitung bei Bildaufnahme"
+
+msgid "capturing flash fired"
+msgstr "Blitzauslösung"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Gibt an, ob der Blitz bei der Bildaufnahme ausgelöst wurde"
+
+msgid "capturing flash mode"
+msgstr "Blitzmodus"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Der gewählte Blitzmodus bei Bildaufnahme"
+
+msgid "capturing metering mode"
+msgstr "Messmethode der Aufnahme"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Die während der Bestimmung der Belichtungszeit eingesetzte Messmethode zur "
+"Aufnahme eines Bildes"
+
+msgid "capturing source"
+msgstr "Aufnahmequelle"
+
+msgid "The source or type of device used for the capture"
+msgstr "Die Quelle oder der Gerätetyp, mit dem aufgenommen wird"
+
+msgid "image horizontal ppi"
+msgstr "Horizontale Bildauflösung"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Horizontale Auflösung des Bildes oder Videos in ppi (Pixel pro Zoll)"
+
+msgid "image vertical ppi"
+msgstr "Vertikale Bildauflösung"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Vertikale Auflösung des Bildes oder Videos in ppi (Pixel pro Zoll)"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Auf dieser CD befinden sich keine Audio-Titel"
+
+msgid "ID3 tag"
+msgstr "ID3-Kennzeichnung"
+
+msgid "APE tag"
+msgstr "APE-Kennzeichnung"
+
+msgid "ICY internet radio"
+msgstr "ICY Internet-Radio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV verlustlos"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "verlustloses MSZH"
+
+msgid "Run-length encoding"
+msgstr "RLE-Codierung"
+
+msgid "Sami subtitle format"
+msgstr "Untertitel-Format Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Untertitel-Format TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Untertitel-Format Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Unkomprimiertes YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Unkomprimiertes Graubild"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Unkomprimiertes YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Unkomprimiertes palettiertes %d-Bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Version %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Unkomprimiertes YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Rohes %d-bit PCM-Audio"
+
+msgid "Audio CD source"
+msgstr "Musik-CD-Quelle"
+
+msgid "DVD source"
+msgstr "DVD-Quelle"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol (RTSP)-Quelle"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS)-Protokollquelle"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s Protokollquelle"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s-Video RTP-Payload-Entnahme"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s-Audio RTP-Payload-Entnahme"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s-RTP-Payload-Entnahme"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s-Demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s-Decoder"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s-Video RTP-Payloader"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s-Audio RTP-Payloader"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s-RTP-Payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s-Multiplexer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s-Encoder"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer-Element %s"
+
+msgid "Unknown source element"
+msgstr "Unbekanntes Quellelement"
+
+msgid "Unknown sink element"
+msgstr "Unbekanntes Zielelement"
+
+msgid "Unknown element"
+msgstr "Unbekanntes Element"
+
+msgid "Unknown decoder element"
+msgstr "Unbekanntes Decoder-Element"
+
+msgid "Unknown encoder element"
+msgstr "Unbekanntes Encoder-Element"
+
+msgid "Plugin or element of unknown type"
+msgstr "Plugin oder Element unbekannten Typs"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Unkomprimiertes ungepacktes YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Unkomprimiertes ungepacktes YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Unkomprimiertes gepacktes YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Unkomprimiertes gepacktes YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Unkomprimiertes gepacktes YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Unkomprimiertes gepacktes YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Unkomprimiertes gepacktes  YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Unkomprimiertes ungepacktes YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Unkomprimiertes ungepacktes YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Unkomprimiertes schwarz-weißes Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Rohes PCM-Audio"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Rohes %d-Bit Gleitkomma-Audio"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Rohes Gleitkomma-Audio"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "VFS-Datei »%s« konnte nicht zum Schreiben geöffnet werden: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Kein Dateiname angegeben"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "VFS-Datei »%s« konnte nicht geschlossen werden."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Fehler beim Schreiben in die Datei »%s«."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Ungültige Untertitel-URI »%s«, Untertitel werden deaktiviert."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP-Datenströme können noch nicht abgespielt werden."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Das Element »decodebin« konnte nicht erstellt werden."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Es wurde nur ein Datenstrom mit Untertiteln erkannt. Entweder laden Sie "
+#~ "eine Datei mit Untertiteln oder eine andere Art Textdatei oder die "
+#~ "Mediendatei wurde nicht erkannt."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Sie haben keinen Decoder für den Umgang mit dieser Datei installiert. Sie "
+#~ "sollten die erforderlichen Plugins installieren."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Dies ist keine Mediendatei"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Ein Datenstrom mit Untertiteln wurde erkannt, aber kein Videostrom."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Beide Elemente »autovideosink« und »xvimagesink« fehlen."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Beide Elemente »autoaudiosink« und »alsasink« fehlen."
+
+#~ msgid "No device specified."
+#~ msgstr "Kein Gerät angegeben."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Das Gerät »%s« existiert nicht."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Das Gerät »%s« wird bereits verwendet."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr ""
+#~ "Das Gerät »%s« konnte nicht zum Lesen und Schreiben geöffnet werden."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Fehler beim Senden der GDP-Kopfdaten nach »%s:%d«."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Fehler beim Senden der GDP-Nutzdaten nach »%s:%d«."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr ""
+#~ "Es können nicht Untertiteltexte und Kleinbilder zugleich angezeigt werden."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Kein temporärer Ordner angegeben."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Temporäre Datei »%s« konnte nicht erstellt werden."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Die Datei »%s« konnte zum Lesen nicht geöffnet werden."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interner Fehler im Datenstrom."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Das Element »decodebin2« konnte nicht erstellt werden."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Das Element »queue2« konnte nicht erstellt werden."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Das Element »typefind« konnte nicht erstellt werden."
+
+#~ msgid "No file name specified."
+#~ msgstr "Kein Dateiname angegeben."
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..5ffbf09
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..5e1e5b7
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,634 @@
+# Greek translation for gst-plugins-base.
+# This file is put in the public domain.
+#
+# Simos Xenitellis <simos.lists@googlemail.com>, 2010.
+# Michael Kotsarinis <mk73628@gmail.com>, 2010. 
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-10-27 12:05+0200\n"
+"Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+"X-Poedit-Language: Greek\n"
+"X-Poedit-Country: GREECE\n"
+
+msgid "Master"
+msgstr "Γενικός"
+
+msgid "Bass"
+msgstr "Μπάσα"
+
+msgid "Treble"
+msgstr "Πρίμα"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Συνθεσάιζερ"
+
+msgid "Line-in"
+msgstr "Είσοδος γραμμής"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Μικρόφωνο"
+
+msgid "PC Speaker"
+msgstr "Ηχείο υπολογιστή"
+
+msgid "Playback"
+msgstr "Αναπαραγωγή"
+
+msgid "Capture"
+msgstr "Σύλληψη"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Αδυναμία ανοίγματος συσκευής για μονοφωνική αναπαραγωγή."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Αδυναμία ανοίγματος συσκευής για στερεοφωνική αναπαραγωγή."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Αδυναμία ανοίγματος συσκευής για αναπαραγωγή %d-καναλιών."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Αδυναμία ανοίγματος συσκευής ήχου για αναπαραγωγή. Η συσκευή χρησιμοποιείται "
+"από άλλη εφαρμογή."
+
+msgid "Could not open audio device for playback."
+msgstr "Αδυναμία ανοίγματος συσκευής για αναπαραγωγή."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Αδυναμία ανοίγματος συσκευής για μονοφωνική εγγραφή."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Αδυναμία ανοίγματος συσκευής για στερεοφωνική εγγραφή."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Αδυναμία ανοίγματος συσκευής για εγγραφή %d-καναλιών."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Αδυναμία ανοίγματος συσκευής ήχου για εγγραφή. Η συσκευή χρησιμοποιείται από "
+"άλλη εφαρμογή."
+
+msgid "Could not open audio device for recording."
+msgstr "Αδυναμία ανοίγματος συσκευής ήχου για εγγραφή."
+
+msgid "Could not open CD device for reading."
+msgstr "Αδυναμία ανοίγματος συσκευής CD για ανάγνωση."
+
+msgid "Could not seek CD."
+msgstr "Αδυναμία αναζήτησης CD."
+
+msgid "Could not read CD."
+msgstr "Αδυναμία ανάγνωσης CD."
+
+msgid "Internal data stream error."
+msgstr "Σφάλμα εσωτερικής ροής δεδομένων."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Απαιτείται μια πρόσθετη λειτουργία %s για την αναπαραγωγή αυτής της ροής, "
+"αλλά δεν έχει εγκατασταθεί."
+
+msgid "Could not determine type of stream"
+msgstr "Αδυναμία προσδιορισμού τύπου ροής"
+
+msgid "This appears to be a text file"
+msgstr "Αυτό φαίνεται να είναι αρχείο κειμένου"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Λείπει το στοιχείο '%s' - ελέγξτε την εγκατάσταση του GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Λείπουν και τα δύο στοιχεία autoaudiosink και %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Το στοιχείο autovideosink λείπει."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Το διαμορφωμένο videosink %s δεν δουλεύει."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Λείπουν και τα δύο στοιχεία autovideosink και %s."
+
+msgid "The autovideosink element is not working."
+msgstr "Το στοιχείο autovideosink δεν δουλεύει."
+
+msgid "Custom text sink element is not usable."
+msgstr "Το προσαρμοσμένο στοιχείο text sink δεν είναι λειτουργικό."
+
+msgid "No volume control found"
+msgstr "Δεν βρέθηκε ρυθμιστικό έντασης"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Λείπουν και τα δύο στοιχεία autoaudiosink και %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Το στοιχείο autoaudiosink λείπει."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Το διαμορφωμένο audiosink %s δεν δουλεύει."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Και τα δύο στοιχεία autoaudiosink και %s δεν δουλεύουν."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Το στοιχείο autoaudiosink δεν δουλεύει."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Αδυναμία αναπαραγωγής αρχείου κειμένου χωρίς βίντεο ή οπτικοποίηση."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Δεν υπάρχει διαθέσιμος αποκωδικοποιητής για τον τύπο '%s'."
+
+msgid "No URI specified to play from."
+msgstr "Δεν ορίσθηκε URI από το οποίο θα γίνει αναπαραγωγή."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Μη έγκυρο URI «%s»."
+
+msgid "This stream type cannot be played yet."
+msgstr "Αυτός ο τύπος ροής δεν μπορεί να αναπαραχθεί ακόμη."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Δεν έχει υλοποιηθεί χειριστής URI για «%s»."
+
+msgid "Source element is invalid."
+msgstr "Το στοιχείο προέλευσης δεν είναι έγκυρο."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Σφάλμα κατά την αποστολή δεδομένων σε «%s:%d»."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Άρνηση σύνδεσης σε %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "Αδυναμία εγγραφής ήχου αρκετά γρήγορα"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Αποτυχία ανάγνωσης ετικέτας: δεν υπάρχουν αρκετά δεδομένα"
+
+msgid "track ID"
+msgstr "ID κομματιού"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz ID κομματιού"
+
+msgid "artist ID"
+msgstr "ID καλλιτέχνη"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz ID καλλιτέχνη"
+
+msgid "album ID"
+msgstr "ID άλμπουμ"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz ID άλμπουμ"
+
+msgid "album artist ID"
+msgstr "ID καλλιτενη άλμπουμ"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz ID καλλιτέχνη άλμπουμ"
+
+msgid "track TRM ID"
+msgstr "TRM ID κομματιού"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr "ταχύτητα κλείστρου λήψης"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Ταχύτητα κλείστρου κατά τη λήψη μιας εικόνας, σε δευτερόλεπτα"
+
+msgid "capturing focal ratio"
+msgstr "εστιακός λόγος λήψης"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+"Εστιακός λόγος (f-number ή f-stop) που χρησιμοποιήθηκε κατά τη λήψη της "
+"εικόνας"
+
+msgid "capturing focal length"
+msgstr "εστιακό μήκος λήψης"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+"Το εστιακό μήκος του φακού που χρησιμοποιήθηκε κατά τη λήψη της εικόνας, σε "
+"mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "λόγος ψηφιακού ζουμ λήψης"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Ο λόγος ψηφιακού ζουμ που χρησιμοποιήθηκε κατά τη λήψη μιας εικόνας"
+
+msgid "capturing iso speed"
+msgstr "ταχύτητα iso λήψης"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Η ταχύτητα ISO που χρησιμοποιήθηκε κατά τη λήψη μιας εικόνας"
+
+msgid "capturing exposure program"
+msgstr "πρόγραμμα έκθεσης λήψης"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Το πρόγραμμα έκθεσης που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+msgid "capturing exposure mode"
+msgstr "τρόπος έκθεσης λήψης"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Ο τρόπος έκθεσης που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "τρόπος έκθεσης λήψης"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "Ο τρόπος έκθεσης που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+msgid "capturing scene capture type"
+msgstr "τύπος σύλληψης σκηνής της λήψης"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Ο τρόπος σύλληψης σκηνής που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+msgid "capturing gain adjustment"
+msgstr "προσαρμογή κέρδους λήψης"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Η συνολική προσαρμογή κέρδους που εφαρμόσθηκε σε μια εικόνα"
+
+msgid "capturing white balance"
+msgstr "ισορροπία λευκού λήψης"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Η ισορροπία λευκού που ορίσθηκε κατά τη λήψη μιας εικόνας"
+
+msgid "capturing contrast"
+msgstr "αντίθεση λήψης"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+"Η κατεύθυνση της επεξεργασίας της αντίθεσης που εφαρμόσθηκε κατά τη λήψη "
+"μιας εικόνας"
+
+msgid "capturing saturation"
+msgstr "κορεσμός λήψης"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"Η κατεύθυνση της επεξεργασίας του κορεσμού  που εφαρμόσθηκε κατά τη λήψη "
+"μιας εικόνας"
+
+msgid "capturing sharpness"
+msgstr "ευκρίνεια λήψης"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+"Η κατεύθυνση της επεξεργασίας της ευκρίνειας  που εφαρμόσθηκε κατά τη λήψη "
+"μιας εικόνας"
+
+msgid "capturing flash fired"
+msgstr "ενεργοποίηση φλας στη λήψη"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Αν ενεργοποιήθηκε το φλας κατά τη λήψη μιας εικόνας"
+
+msgid "capturing flash mode"
+msgstr "κατάσταση φλας λήψης"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Η επιλεγμένη κατάσταση λειτουργίας του φλας κατά τη λήψη μιας εικόνας"
+
+msgid "capturing metering mode"
+msgstr "τρόπος φωτομέτρησης λήψης"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Ο τρόπος φωτομέτρησης που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+msgid "capturing source"
+msgstr "πηγή λήψης"
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+"Η πηγή ή ο τύπος της συσκευής που χρησιμοποιήθηκε για τη λήψη μιας εικόνας"
+
+msgid "image horizontal ppi"
+msgstr "οριζόντια ppi εικόνας"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Η σκοπούμενη οριζόντια πυκνότητα εικονοστοιχείων (pixel) του μέσου (εικόνα/"
+"βίντεο) σε ppi"
+
+msgid "image vertical ppi"
+msgstr "κάθετα ppi εικόνας"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Η σκοπούμενη κάθετη πυκνότητα εικονοστοιχείων (pixel) του μέσου (εικόνα/"
+"βίντεο) σε ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Αυτό το CD δεν έχει ηχητικά κομμάτια"
+
+msgid "ID3 tag"
+msgstr "Ετικέτα ID3"
+
+msgid "APE tag"
+msgstr "Ετικέτα APE"
+
+msgid "ICY internet radio"
+msgstr "Διαδικτυακό ραδιόφωνο ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Μη απωλεστικός ήχος της Apple (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Ελεύθερος μη απωλεστικός κωδικοποιητής ήχου (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Μη απωλεστικός αληθής ήχος (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "Μη απωλεστικός CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Μη απωλεστικός MSZH"
+
+msgid "Run-length encoding"
+msgstr "Κωδικοποίηση Run-length"
+
+msgid "Sami subtitle format"
+msgstr "Μορφή υποτίτλων Sami "
+
+msgid "TMPlayer subtitle format"
+msgstr "Μορφή υποτίτλων TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Μορφή υποτίτλων Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Ασυμπίεστο YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Ασυμπίεστη εικόνα κλίμακας του γκρι"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Ασυμπίεστο YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Ασυμπίεστο palettized %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Έκδοση %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Ασυμπίεστο YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Καθαρός %d-bit PCM ήχος"
+
+msgid "Audio CD source"
+msgstr "Πηγή CD ήχου"
+
+msgid "DVD source"
+msgstr "Πηγή DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Πηγή Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Πηγή πρωτοκόλλου Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Πηγή πρωτοκόλλου %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "RTP depayloader βίντεο %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "RTP depayloader ήχου %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP depayloader"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Αποπλέκτης %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Αποκωδικοποιητής %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "RTP payloader βίντεο %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "RTP payloader ήχου %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Πολυπλέκτης %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Κωδικοποιητής %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Στοιχείο %s του GStreamer"
+
+msgid "Unknown source element"
+msgstr "Άγνωστο στοιχείο πηγής"
+
+msgid "Unknown sink element"
+msgstr "Άγνωστο στοιχείο απαγωγής"
+
+msgid "Unknown element"
+msgstr "Άγνωστο στοιχείο"
+
+msgid "Unknown decoder element"
+msgstr "Άγνωστο στοιχείο αποκωδικοποιητή"
+
+msgid "Unknown encoder element"
+msgstr "Άγνωστο στοιχείο κωδικοποιητή"
+
+msgid "Plugin or element of unknown type"
+msgstr "Πρόσθετη λειτουργία ή στοιχείο άγνωστου τύπου"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Ασυμπίεστο planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Ασυμπίεστο planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Ασυμπίεστο packed YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Ασυμπίεστο packed YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Ασυμπίεστο packed YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Ασυμπίεστο packed YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Ασυμπίεστο packed YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Ασυμπίεστο planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Ασυμπίεστο planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Ασυμπίεστο ασπρόμαυρο Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Καθαρός ήχος PCM "
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Καθαρός ήχος %d-bit floating-point"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Καθαρός floating-point ήχος"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Αδυναμία ανοίγματος αρχείου vfs «%s» για εγγραφή: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Δεν δόθηκε όνομα αρχείου"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Αδυναμία κλεισίματος αρχείου vfs «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Σφάλμα κατά την εγγραφή στο αρχείο «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Μη έγκυρο URI υποτίτλων «%s», υπότιτλοι απενεργοποιήθηκαν."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Ροές RTSP δεν μπορούν να αναπαραχθούν ακόμα."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Αδυναμία δημιουργία στοιχείου «decodebin»."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Ανιχνεύθηκε μόνο μια ροή υποτίτλων. Είτε φορτώνετε ένα αρχείο υποτίτλων ή "
+#~ "κάποιο άλλο τύπο αρχείου κειμένου, ή το αρχείο πολυμέσων δεν "
+#~ "αναγνωρίσθηκε."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Δεν έχετε εγκατεστημένο αποκωδικοποιητή για να χειριστεί αυτό το αρχείο. "
+#~ "Μπορεί να χρειάζεται να εγκαταστήσετε τις απαραίτητες πρόσθετες "
+#~ "λειτουργίες."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Αυτό δεν είναι αρχείο πολυμέσων"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Ανιχνεύθηκε ροή υποτίτλων αλλά όχι ροή βίντεο."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Λείπουν και τα δύο στοιχεία autovideosink και xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Λείπουν και τα δύο στοιχεία autoaudiosink και alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Δεν ορίσθηκε συσκευή."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Η συσκευή «%s» δεν υπάρχει."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Η συσκευή «%s» χρησιμοποιείται ήδη."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Αδυναμία ανοίγματος συσκευής «%s» για ανάγνωση και εγγραφή."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Σφάλμα κατά την αποστολή δεδομένων κεφαλίδας gdp σε «%s:%d»."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Σφάλμα κατά την αποστολή δεδομένων φόρτου gdp σε «%s:%d»."
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
new file mode 100644
index 0000000..38e6319
--- /dev/null
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..7b592c8
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,673 @@
+# English (British) translation.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Gareth Owen <gowen72@yahoo.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-04-26 10:41-0400\n"
+"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
+"Language-Team: English (British) <en_gb@li.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "Bass"
+
+msgid "Treble"
+msgstr "Treble"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Line-in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Microphone"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "Speaker"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Could not open CD device for reading."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "Could not open audio device \"%s\" for writing."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "Could not open device \"%s\" for reading and writing."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "Could not open CD device for reading."
+
+msgid "Could not open CD device for reading."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "Could not close vfs file \"%s\"."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "Could not write to device \"%s\"."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "Could not write to file \"%s\"."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Error closing file \"%s\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Could not open vfs file \"%s\" for writing."
+
+#~ msgid "No filename given"
+#~ msgstr "No filename given"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Could not close vfs file \"%s\"."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Error closing file \"%s\"."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "Device \"%s\" is not a capture device."
+
+#~ msgid "No device specified."
+#~ msgstr "No device specified."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Device \"%s\" does not exist."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "OSS device \"%s\" is already in use by another program."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Could not open device \"%s\" for reading and writing."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Could not write to file \"%s\"."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "No device specified."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Could not write to file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Could not open file \"%s\" for reading."
+
+#~ msgid "Device is not open."
+#~ msgstr "Device is not open."
+
+#~ msgid "Device is open."
+#~ msgstr "Device is open."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Could not open vfs file \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "No filename given"
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Could not open file \"%s\" for writing."
+
+#~ msgid "No filename specified."
+#~ msgstr "No filename specified."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "No or invalid input audio, AVI stream will be corrupt."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Could not open control device \"%s\" for writing."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Could not configure audio device \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Could not set audio device \"%s\" to %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Could not close audio device \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Could not close control device \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Could not open video device \"%s\" for writing."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Could not close video device \"%s\"."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Could not access device \"%s\", check its permissions."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Could not open device \"%s\" for writing."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Could not open device \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Your oss device could not be probed correctly"
+
+#, fuzzy
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Your oss device could not be probed correctly"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Speaker"
+#~ msgstr "Speaker"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Record"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Line-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Line-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Line-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-out"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Could not get buffers from device \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Could not get enough buffers from device \"%s\"."
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644
index 0000000..b598244
--- /dev/null
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..da9f7ac
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,538 @@
+# Esperanto translation for gst-plugins-base.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-06-04 21:11+0100\n"
+"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Ĉefa regilo"
+
+msgid "Bass"
+msgstr "Baso"
+
+msgid "Treble"
+msgstr ""
+
+msgid "PCM"
+msgstr ""
+
+msgid "Synth"
+msgstr "Sintezilo"
+
+msgid "Line-in"
+msgstr ""
+
+msgid "CD"
+msgstr "KD"
+
+msgid "Microphone"
+msgstr "Mikrofono"
+
+msgid "PC Speaker"
+msgstr "Komputila laŭtparolilo"
+
+msgid "Playback"
+msgstr "Reproduktado"
+
+msgid "Capture"
+msgstr "Kapti"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Ne eblis malfermi aparaton por reproduktado per unukanala reĝimo."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Ne eblis malfermi aparaton por reproduktado per dukanala reĝimo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Ne eblis malfermi la aparaton por reproduktado per %d-kanala reĝimo."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Ne eblis malfermi la sonaparaton por reproduktado. Ĝi estas uzate de alia "
+"aplikaĵo."
+
+msgid "Could not open audio device for playback."
+msgstr "Ne eblis malfermi la sonaparaton por reproduktado."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Ne eblis malfermi la aparaton por registrado per unukanala reĝimo."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Ne eblis malfermi la aparaton por registrado per dukanala reĝimo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Ne eblis malfermi la aparaton por registrado per %d-kanala reĝimo."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Ne eblis malfermi la aparaton por registrado. Ĝi estas uzate de alia "
+"aplikaĵo."
+
+msgid "Could not open audio device for recording."
+msgstr "Ne eblis malfermi sonaparaton por registrado."
+
+msgid "Could not open CD device for reading."
+msgstr "Ne eblis malfermi KD-aparaton por legado."
+
+msgid "Could not seek CD."
+msgstr "Ne eblis traserĉi la KD-n."
+
+msgid "Could not read CD."
+msgstr "Ne eblis legi la KD-n."
+
+msgid "Internal data stream error."
+msgstr "Interna datumflu-eraro."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "%s-kromprogramo bezonatas, sed tia ne estas instalite."
+
+msgid "Could not determine type of stream"
+msgstr "Ne eblis rekoni la tipon de la fluo"
+
+msgid "This appears to be a text file"
+msgstr "Tio ŝajnas esti tekstdosiero"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr "Ne trovis laŭtec-regilon"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Nevalida URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr "Font-elemento estas nevalide."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Eraro dum sendado de datumoj al \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr "Ne eblas registri la sonon sufiĉe rapide"
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr "album-ID"
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "\"DivX MPEG-4\"-versio %d"
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr "Son-KD-fonto"
+
+msgid "DVD source"
+msgstr "DVD-fonto"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokolfonto"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr "Nekonata fontelemento"
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr "Nekonata elemento"
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Ne eblis malfermi la vfs-dosieron \"%s\" por skribado: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Ne donis dosiernomon"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Ne eblis fermi vfs-dosieron \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Eraro dum skribo al dosiero \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Nevalida subtekst-adreso \"%s\", subtekstoj estos elŝaltate."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Ankoraŭ ne eblas ludi RTSP-fluojn."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Ne eblis krei \"decodebin\"-elementon."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Tio ne estas aŭdvidaĵa dosiero"
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Ambaŭ elementoj \"autovideosink\" kaj \"xvimagesink\" mankas."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Aparato \"%s\" ne ekzistas."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Aparato \"%s\" jam estas uzata."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Ne eblis malfermi aparaton  \"%s\" por legado aŭ skribado."
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..c138f7b
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..481c79d
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,644 @@
+# translation of gst-plugins-base-0.10.30.3.po to Español
+# spanish translation for gst-plugins-base
+# This file is put in the public domain.
+# Jorge González González <aloriel@gmail.com>, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-11-02 15:40+0100\n"
+"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Maestro"
+
+msgid "Bass"
+msgstr "Bajo"
+
+msgid "Treble"
+msgstr "Agudos"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizador"
+
+msgid "Line-in"
+msgstr "Línea de entrada"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Micrófono"
+
+msgid "PC Speaker"
+msgstr "Altavoz del equipo"
+
+msgid "Playback"
+msgstr "Reproducción"
+
+msgid "Capture"
+msgstr "Capturar"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "No se pudo abrir el dispositivo para la reproducir en modo mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "No se pudo abrir el dispositivo para la reproducir en modo estéreo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "No se pudo abrir el dispositivo para reproducir en modo %d-canales."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"No se pudo abrir el dispositivo para la reproducir. Otra aplicación está "
+"usando el dispositivo."
+
+msgid "Could not open audio device for playback."
+msgstr "No se pudo abrir el dispositivo para la reproducir."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "No se pudo abrir el dispositivo para grabar en modo mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "No se pudo abrir el dispositivo para grabar en modo estéreo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "No se pudo abrir el dispositivo para grabar en modo %d-canales."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"No se pudo abrir el dispositivo de sonido para grabar. Otra aplicación está "
+"usando el dispositivo."
+
+msgid "Could not open audio device for recording."
+msgstr "No se pudo abrir el dispositivo de sonido para grabar."
+
+msgid "Could not open CD device for reading."
+msgstr "No se pudo abrir el dispositivo de CD para leer."
+
+msgid "Could not seek CD."
+msgstr "No se pudo buscar en el CD."
+
+msgid "Could not read CD."
+msgstr "No se pudo leer del D."
+
+msgid "Internal data stream error."
+msgstr "Error interno de flujo de datos."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Se requiere un complemento de %s para reproducir este medio, pero no está "
+"instalado."
+
+msgid "Could not determine type of stream"
+msgstr "No se pudo determinar el tipo de flujo"
+
+msgid "This appears to be a text file"
+msgstr "Esto parece ser un archivo de texto"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Falta el elemento «%s»; compruebe su instalación de GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Tanto el elemento autovideosink como %s faltan."
+
+msgid "The autovideosink element is missing."
+msgstr "Falta el elemento autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "El videosink configurado %s no está funcionando."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Tanto el elemento autovideosink como %s no están funcionando."
+
+msgid "The autovideosink element is not working."
+msgstr "El elemento autovideosink no está funcionando."
+
+msgid "Custom text sink element is not usable."
+msgstr "No se puede usar el elemento sumidero (sink) de texto personalizado."
+
+msgid "No volume control found"
+msgstr "No se encontró ningún control de volumen"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Tanto el elemento autoaudiosink como %s faltan."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Falta el elemento autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "El audiosink configurado %s no está funcionando."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Tanto el elemento autoaudiosink como %s no están funcionando."
+
+msgid "The autoaudiosink element is not working."
+msgstr "El elemento autoaudiosink no está funcionando."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"No se puede reproducir un archivo de texto sin vídeo o visualizaciones."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "No hay un decodificador disponible para el tipo «%s»."
+
+msgid "No URI specified to play from."
+msgstr "No se especificó una URI para reproducir."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "El URI «%s» no es válido."
+
+msgid "This stream type cannot be played yet."
+msgstr "Este tipo de flujo no se puede reproducir aún."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "No existe un manejador URI implementado para «%s»."
+
+msgid "Source element is invalid."
+msgstr "El elemento fuente no es válido."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Error al enviar los datos a «%s:%d»."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Se rechazó la conexión con %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "No se puede grabar el sonido lo suficientemente rápido"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Falló al leer la etiqueta: no hay datos suficientes"
+
+msgid "track ID"
+msgstr "ID de la pista"
+
+msgid "MusicBrainz track ID"
+msgstr "ID de la pista en MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID del artista"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID del artista en MusicBrainz"
+
+msgid "album ID"
+msgstr "ID del álbum"
+
+msgid "MusicBrainz album ID"
+msgstr "ID del álbum en MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID del álbum del artista"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID del álbum del artista en MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID TRM de la pista"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM en MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "velocidad del obturador de la toma"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Velocidad del obturador usada al tomar una imagen, en segundos"
+
+msgid "capturing focal ratio"
+msgstr "tasa focal de la toma"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Tasa focal (número-f) usada al tomar la imagen"
+
+msgid "capturing focal length"
+msgstr "longitud focal de la toma"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Longitud focal de la lente usada al tomar la imagen, en mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "tasa de ampliación digital de la toma"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Tasa de ampliación digital usada al tomar una imagen"
+
+msgid "capturing iso speed"
+msgstr "velocidad ISO de la toma"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "La velocidad de captura ISO usada al tomar una imagen"
+
+msgid "capturing exposure program"
+msgstr "programa de exposición de la toma"
+
+msgid "The exposure program used when capturing an image"
+msgstr "El programa de exposición usado al tomar una imagen"
+
+msgid "capturing exposure mode"
+msgstr "modo de exposición de la toma"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "El modo de exposición usado al tomar una imagen"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "modo de exposición de la toma"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "El modo de exposición usado al tomar una imagen"
+
+msgid "capturing scene capture type"
+msgstr "tipo de escena usado en la toma"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "El modo de captura usado al tomar una imagen"
+
+msgid "capturing gain adjustment"
+msgstr "ajuste de ganancia de la toma"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "El ajuste general de ganancia aplicado en una imagen"
+
+msgid "capturing white balance"
+msgstr "balance de blancos de la toma"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "El modo de balance de blancos usado al tomar una imagen"
+
+msgid "capturing contrast"
+msgstr "contraste de la toma"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "La dirección de contraste procesada aplicada al tomar una imagen"
+
+msgid "capturing saturation"
+msgstr "saturación de la toma"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "La dirección de saturación procesada aplicacada al tomar una imagen"
+
+msgid "capturing sharpness"
+msgstr "nitidez de la toma"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "La dirección de nitidez procesada aplicada al tomar una imagen"
+
+msgid "capturing flash fired"
+msgstr "disparo de flash de la toma"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Si el flash se disparó al capturar una imagen"
+
+msgid "capturing flash mode"
+msgstr "modo de flash de la toma"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "El modo de flash seleccionado al tomar una imagen"
+
+msgid "capturing metering mode"
+msgstr "modo de medición de la toma"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"El modo de medición usado al determinado la exposición al tomar una imagen"
+
+msgid "capturing source"
+msgstr "fuente de la toma"
+
+msgid "The source or type of device used for the capture"
+msgstr "El origen o tipo de dispositivo usado para la toma"
+
+msgid "image horizontal ppi"
+msgstr "ppi horizontal de la imagen"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Densidad horizontal de píxeles, en ppi, del medio (imagen o vídeo)"
+
+msgid "image vertical ppi"
+msgstr "ppi vertical de la imagen"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Densidad vertical de píxeles, en ppi, del medio (imagen o vídeo)"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Este CD no tiene pistas de sonido"
+
+msgid "ID3 tag"
+msgstr "Etiqueta ID3"
+
+msgid "APE tag"
+msgstr "Etiqueta APE"
+
+msgid "ICY internet radio"
+msgstr "Emisora de internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV sin pérdida"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH sin pérdida"
+
+msgid "Run-length encoding"
+msgstr "Codificación del tamaño durante la ejecución"
+
+msgid "Sami subtitle format"
+msgstr "Formato de subtítulos Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Formato de subtítulos TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Formato de subtítulos kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV sin comprimir"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Imagen en escala de grises sin comprimir"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV sin comprimir"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Paletizado sin comprimir de %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versión %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV sin comprimir"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Audio PCM sin comprimir de %d-bits"
+
+msgid "Audio CD source"
+msgstr "Fuente: CD de audio"
+
+msgid "DVD source"
+msgstr "Fuente: DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Fuente: Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Fuente: Protocolo Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Fuente: Protocolo %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "decodificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "decodificador de sonido RTP %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "decodificador RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "demultiplexor %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "decodificador %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "codificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "codificador de sonido RTP %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "codificador RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "multiplexor %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "codificador %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Elemento %s de GStreamer"
+
+msgid "Unknown source element"
+msgstr "Fuente: Elemento desconocido"
+
+msgid "Unknown sink element"
+msgstr "Elemento sumidero (sink) desconocido"
+
+msgid "Unknown element"
+msgstr "Elemento desconocido"
+
+msgid "Unknown decoder element"
+msgstr "Elemento decodificador desconocido"
+
+msgid "Unknown encoder element"
+msgstr "Elemento codificador desconocido"
+
+msgid "Plugin or element of unknown type"
+msgstr "Complemento o elemento de tipo desconocido"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 plano sin comprimir"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YVU 4:2:0 plano sin comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 empaquetado sin comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 empaquetado sin comprimir"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU 4:1:0 empaquetado sin comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 empaquetado sin comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 empaquetado sin comprimir"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 plano sin comprimir"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 plano sin comprimir"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Plano Y en blanco y negro sin comprimir"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Audio PCM sin comprimir"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio sin comprimir de %d-bits en coma flotante"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio sin comprimir en coma flotante"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "No se pudo abrir el archivo VFS «%s» para escribir: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "No se dio un nombre de archivo"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "No se pudo cerrar el archivo VFS «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Error al escribir al archivo «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "URI de subtítulos «%s» no válida, se desactivaron los subtítulos."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Aún no se pueden reproducir los medios RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "No se pudo crear el elemento «decodebin»."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Sólo se detecto un flujo de subtítulos. O bien está cargando un archivo "
+#~ "de subtítulos o algún otro tipo de archivo de texto o el archivo "
+#~ "multimedia no se pudo reconocer."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "No tiene un decodificador instalado para manejar este archivo. Debe "
+#~ "instalar los complementos necesarios."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Este no es un archivo multimedia"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Se detectó un flujo de subtítulos, pero no un flujo de vídeo."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Tanto el elemento autovideosink como xvimagesink faltan."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Tanto el elemento autoaudiosink como alsasink faltan."
+
+#~ msgid "No device specified."
+#~ msgstr "No se especificó un dispositivo."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "El dispositivo «%s» no existe."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "El dispositivo «%s» ya se está usando."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "No se pudo abrir el dispositivo «%s» para su lectura y escritura."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Error al enviar los datos de la cabecera gdp a «%s:%d»."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Error al enviar la carga de datos de gdp a «%s:%d»."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "No se pueden mostrar a la vez subtítulos de texto y subimágenes."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "No se especificó un directorio temporal."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "No se pudo cerrar el archivo temporal «%s»."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "No se pudo abrir el archivo «%s» para leer."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Error en el flujo de datos interno."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "No se pudo crear el elemento «decodebin2»."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "No se pudo crear el elemento «queue2»."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "No se pudo crear el elemento «typefind»."
+
+#~ msgid "No file name specified."
+#~ msgstr "No se especificó un nombre de archivo."
diff --git a/po/eu.gmo b/po/eu.gmo
new file mode 100644
index 0000000..df6360f
--- /dev/null
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..a243a33
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,620 @@
+# translation of gst-plugins-base.master.po to Basque
+# Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+#
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009, 2010.
+# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base-0.10.26.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-03-25 12:32+0100\n"
+"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Maisua"
+
+msgid "Bass"
+msgstr "Baxua"
+
+msgid "Treble"
+msgstr "Altua"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizadorea"
+
+msgid "Line-in"
+msgstr "Linea-sarrera"
+
+msgid "CD"
+msgstr "CDa"
+
+msgid "Microphone"
+msgstr "Mikrofonoa"
+
+msgid "PC Speaker"
+msgstr "Ordenagailuko bozgorailua"
+
+msgid "Playback"
+msgstr "Erreproduzitzea"
+
+msgid "Capture"
+msgstr "Kapturatzea"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Ezin izan da gailua ireki mono moduan erreproduzitzeko."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Ezin izan da gailua ireki estereo moduan erreproduzitzeko."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Ezin izan da gailua ireki %d kanaleko moduan erreproduzitzeko."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Ezin izan da audioaren gailua ireki erreproduzitzeko. Beste aplikazio batek "
+"darabil gailua."
+
+msgid "Could not open audio device for playback."
+msgstr "Ezin izan da audioaren gailua ireki erreproduzitzeko."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Ezin izan da gailua ireki mono moduan grabatzeko."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Ezin izan da gailua ireki estereo moduan grabatzeko."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Ezin izan da gailua ireki %d kanaleko moduan grabatzeko."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Ezin izan da audioaren gailua ireki grabatzeko. Beste aplikazio batek "
+"darabil gailua."
+
+msgid "Could not open audio device for recording."
+msgstr "Ezin izan da audioaren gailua ireki grabatzeko."
+
+msgid "Could not open CD device for reading."
+msgstr "Ezin izan da CD gailua ireki irakurtzeko."
+
+msgid "Could not seek CD."
+msgstr "Ezin izan da CDan bilatu."
+
+msgid "Could not read CD."
+msgstr "Ezin izan da CDa irakurri."
+
+msgid "Internal data stream error."
+msgstr "Datu-korrontearen barne-errorea."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"%s plugina behar da korronte hori erreproduzitzeko, baina ez dago instalatua."
+
+msgid "Could not determine type of stream"
+msgstr "Ezin izan da korronte mota zehaztu"
+
+msgid "This appears to be a text file"
+msgstr "Testu-fitxategia dela dirudi"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "'%s' elementua falta da. Begiratu GStreamer ondo instalatua dagoen."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Autovideosink eta %s elementuak, biak, falta dira."
+
+msgid "The autovideosink element is missing."
+msgstr "Autovideosink elementua falta da."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Konfiguratutako %s videosink ez da lanean ari."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Autovideosink eta %s elementuak, biak, ez dira lanean ari."
+
+msgid "The autovideosink element is not working."
+msgstr "Autovideosink elementua ez da lanean ari."
+
+msgid "Custom text sink element is not usable."
+msgstr "Helburuko testu pertsonalizatua ez dago erabilgarri."
+
+msgid "No volume control found"
+msgstr "Ez da bolumenaren kontrolik aurkitu"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Autoaudiosink eta %s elementuak, biak, falta dira."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Autoaudiosink falta da."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Konfiguratutako %s audiosink ez da lanean ari."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Autoaudiosink eta %s elementuak, biak, ez dira lanean ari."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Autoaudiosink elementua ez da lanean ari."
+
+#, fuzzy
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Ezin da bideo edo bisualizaziorik gabeko testu-fitxategi bat erreproduzitu."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Ez dago deskodetzaile erabilgarririk '%s' motarentzat."
+
+msgid "No URI specified to play from."
+msgstr "Ez da URIrik zehaztu irakurtzeko."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "\"%s\" URI baliogabea."
+
+msgid "This stream type cannot be played yet."
+msgstr "Oraindik ezin da erreproduzitu korronte mota hori."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Ez da URI maneiatzailerik ezarri \"%s\"(r)entzat."
+
+msgid "Source element is invalid."
+msgstr "Iturburuko elementua baliogabea da."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Errorea gertatu da datuak \"%s:%d\"(e)ra bidaltzean."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "%s:%d(e)ra konektatzea ukatu da."
+
+msgid "Can't record audio fast enough"
+msgstr "Ezin da behar bezain bizkor grabatu audioa"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Huts egin du etiketa irakurtzean: ez dago nahikoa daturik"
+
+msgid "track ID"
+msgstr "pistaren IDa"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz pistaren IDa"
+
+msgid "artist ID"
+msgstr "interpretearen IDa"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz interpretearen IDa"
+
+msgid "album ID"
+msgstr "albumaren IDa"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz albumaren IDa"
+
+msgid "album artist ID"
+msgstr "albumaren interpretearen IDa"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albumaren interpretearen IDa"
+
+msgid "track TRM ID"
+msgstr "pistaren TRM IDa"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM IDa"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "CD honek ez du audio-pistarik"
+
+msgid "ID3 tag"
+msgstr "ID3 etiketa"
+
+msgid "APE tag"
+msgstr "APE etiketa"
+
+msgid "ICY internet radio"
+msgstr "ICY interneteko irratia"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple-ren galerarik gabeko audioa (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Galerarik gabeko audio-kodek librea (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Galerarik gabeko True audioa (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "Galerarik gabeko CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg 1.b"
+
+msgid "Lossless MSZH"
+msgstr "Galerarik gabeko MSZH"
+
+msgid "Run-length encoding"
+msgstr "Run-length kodeketa"
+
+msgid "Sami subtitle format"
+msgstr "Sami azpititulu-formatua"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer azpititulu-formatua"
+
+msgid "Kate subtitle format"
+msgstr "'Kate' azpititulu-formatua"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Konprimitu gabeko YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Konprimitu gabeko irudi grisa"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Konprimitu gabeko YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Konprimitu gabeko paleta moduko %d biteko %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 %d. bertsioa"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Konprimitu gabeko YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "%d biteko prozesatu gabeko PCM audioa"
+
+msgid "Audio CD source"
+msgstr "Audio CDaren iturburua"
+
+msgid "DVD source"
+msgstr "DVD iturburua"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Denbora errealeko transmisio-protokoloaren (RTSP) iturburua"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) protokoloaren iturburua"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokolo-ituruburua"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s bideoaren RTP depayloader-a"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audiooaren RTP depayloader-a"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP depayloader-a"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demultiplexadorea"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s deskodetzailea"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s bideoaren RTP payloader-a"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audiooaren RTP payloader-a"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP payloader-a"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s multiplexadorea"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s kodetzailea"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "%s GStreamer elementua"
+
+msgid "Unknown source element"
+msgstr "Iturburu-elementu ezezaguna"
+
+msgid "Unknown sink element"
+msgstr "Kolektore-elementu ezezaguna"
+
+msgid "Unknown element"
+msgstr "Elementu ezezaguna"
+
+msgid "Unknown decoder element"
+msgstr "Deskodetzailearen elementu ezezaguna"
+
+msgid "Unknown encoder element"
+msgstr "Kodetzailearen elementu ezezaguna"
+
+msgid "Plugin or element of unknown type"
+msgstr "Mota ezezaguneko plugina edo elementua"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Konprimitu gabeko YUV 4:2:0 planarra"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Konprimitu gabeko YVU 4:2:0 planarra"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Konprimitu gabeko YUV 4:2:2 paketatua"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Konprimitu gabeko YUV 4:1:0 paketatua"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Konprimitu gabeko YVU 4:1:0 paketatua"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Konprimitu gabeko YUV 4:1:1 paketatua"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Konprimitu gabeko YUV 4:4:4 paketatua"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Konprimitu gabeko YUV 4:2:2 planarra"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Konprimitu gabeko YUV 4:1:1 planarra"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Konprimitu gabeko zuri-beltzeko Y-planoa"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Prozesatu gabeko PCM audioa"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Koma mugikorreko %d biteko prozesatu gabeko PCM audioa"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Koma mugikorreko prozesatu gabeko audioa"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Ezin izan da \"%s\" vfs fitxategia ireki idazteko: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Ez da fitxategi-izenik eman"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Ezin izan da itxi \"%s\" vfs fitxategia."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Errorea gertatu da \"%s\" fitxategian idaztean."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr ""
+#~ "Azpitituluen \"%s\" URIa ez da baliozkoa. Azpitituluak desgaitu egin dira."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Oraindik ezin dira erreproduzitu RTSP korronteak."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Ezin izan da sortu \"decodebin\" elementua."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Azpitituluen korrontea soilik detektatu da. Azpitituluen fitxategi bat "
+#~ "edo beste testu-fitxategi bat ari zara kargatzen, edo multimedia-"
+#~ "fitxategi hori ez da onartzen."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Ez da instalatu fitxategi hori maneiatzeko deskodetzailerik  Litekeena da "
+#~ "beharrezko pluginak instalatu behar izatea."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Hori ez da multimedia-fitxategi bat"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Azpitituluen korrontea detektatu da, baina ez bideoarena."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Autovideosink eta xvimagesink elementuak, biak, falta dira."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Autoaudiosink eta alsasink elementuak, biak, falta dira."
+
+#~ msgid "No device specified."
+#~ msgstr "Ez da gailurik zehaztu."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" gailua ez dago."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "\"%s\" gailua erabiltzen ari dira."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Ezin izan da \"%s\" gailua ireki irakurtzeko eta idazteko."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Errorea gertatu da gdp goiburuaren datuak \"%s:%d\"(e)ra bidaltzean."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Errorea gertatu da gdp karga erabilgarriaren datuak \"%s:%d\"(e)ra "
+#~ "bidaltzean."
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..777ce86
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..5c2772f
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,650 @@
+# Finnish messages for gst-plugins-base.
+#
+# This file is distributed under the same license as the gst-plugins-base package.
+# Copyright (C) 2008-2010 Tommi Vainikainen,
+# Copyright (C) 2007 Ilkka Tuohela.
+#
+# Tommi Vainikainen <Tommi.Vainikainen@iki.fi>, 2008-2010.
+# Ilkka Tuohela <hile@iki.fi>, 2007.
+#
+# Suomennos: http://gnome.fi/
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-12-31 23:21+0200\n"
+"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Pääkanava"
+
+msgid "Bass"
+msgstr "Basso"
+
+msgid "Treble"
+msgstr "Ylä-äänet"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Linjatulo"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofoni"
+
+msgid "PC Speaker"
+msgstr "PC-kaiutin"
+
+msgid "Playback"
+msgstr "Toisto"
+
+msgid "Capture"
+msgstr "Nauhoitus"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Laitetta ei voitu avata toistoa varten monona."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Laitetta ei voitu avata toistoa varten stereona."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Laitetta ei voitu avata toistoa varten %d-kanavaisessa tilassa."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Laitetta ei voitu avata toistoa varten. Laitetta käyttää toinen sovellus."
+
+msgid "Could not open audio device for playback."
+msgstr "Laitetta ei voitu avata toistoa varten."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Laitetta ei voitu avata nauhoitusta varten monona."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Laitetta ei voitu avata nauhoitusta varten stereona."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Laitetta ei voitu avata nauhoitusta varten %d-kanavaisessa tilassa."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Äänilaitetta ei voitu avata nauhoitusta varten. Laitetta käyttää toinen "
+"sovellus."
+
+msgid "Could not open audio device for recording."
+msgstr "Äänilaitetta ei voitu avat nauhoitusta varten."
+
+msgid "Could not open CD device for reading."
+msgstr "CD-laitetta ei voitu avata luettavaksi."
+
+msgid "Could not seek CD."
+msgstr "CD-levyllä ei voitu siirtyä."
+
+msgid "Could not read CD."
+msgstr "CD-levyä ei voitu lukea."
+
+msgid "Internal data stream error."
+msgstr "Sisäisen tietovirran virhe."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Virran toistamiseen tarvitaan %s-liitännäinen, mutta se ei ole asennettu."
+
+msgid "Could not determine type of stream"
+msgstr "Virran tyyppiä ei voitu määrittää"
+
+msgid "This appears to be a text file"
+msgstr "Tämä näyttää olevan tekstitiedosto"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Puuttuva elementti \"%s\" - tarkista GStreamer-asennuksesi."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Sekä autovideosink- ja %s-elementit puuttuvat."
+
+msgid "The autovideosink element is missing."
+msgstr "Autovideosink-elementti puuttuu."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Asetettu videonielu %s ei toimi."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Sekä autovideosink- ja %s-elementit eivät toimi."
+
+msgid "The autovideosink element is not working."
+msgstr "Autovideosink-elementti ei toimi."
+
+msgid "Custom text sink element is not usable."
+msgstr "Räätälöity tekstinieluelementti ei ole käyttökunnossa."
+
+msgid "No volume control found"
+msgstr "Äänenvoimakkuuden hallintaa ei löytynyt"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Sekä autoaudiosink- että %s-elementit puuttuvat."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Autoaudiosink-elementti puuttuu."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Asetettu ääninielu %s ei toimi."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Sekä autoaudiosink- että %s-elementit eivät toimi."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Autoaudiosink-elementti ei toimi."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Ei voida toistaa tekstitiedosta ilman videota tai visualisointia."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Purkajaa tyypille \"%s\" ei ole saatavilla."
+
+msgid "No URI specified to play from."
+msgstr "URIa, josta soitetaan, ei annettu."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Virheellinen URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Tätä virtatyyppiä ei voi vielä soittaa."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Protokollalle \"%s\" ei ole määritelty URI-käsittelijää."
+
+msgid "Source element is invalid."
+msgstr "Lähde-elementti on virheellinen."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Virhe lähetettäessä tietoa kohteeseen \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Yhteys kohteeseen %s:%d estettiin."
+
+msgid "Can't record audio fast enough"
+msgstr "Ääntä ei voi nauhoittaa tarpeeksi nopeasti"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Tagin lukeminen epäonnistui: ei riittävästi dataa"
+
+msgid "track ID"
+msgstr "kappaletunniste"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz-kappaletunniste"
+
+msgid "artist ID"
+msgstr "esittäjätunniste"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz-esittäjätunniste"
+
+msgid "album ID"
+msgstr "levytunniste"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz-levytunniste"
+
+msgid "album artist ID"
+msgstr "levyn esittäjätunniste"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz levyn esittäjätunniste"
+
+msgid "track TRM ID"
+msgstr "kappaleen TRM-tunniste"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM-tunniste"
+
+msgid "capturing shutter speed"
+msgstr "kuvaamisen suljinnopeus"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Suljinnopeus kuvattaessa, sekunteina"
+
+msgid "capturing focal ratio"
+msgstr "kuvaamisen aukkosuhde"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Aukkosuhde (f-luku) kuvattaessa"
+
+msgid "capturing focal length"
+msgstr "kuvaamisen polttoväli"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Linssin polttoväli kuvattaessa, millimetriä"
+
+msgid "capturing digital zoom ratio"
+msgstr "kuvaamisen digitaalinen zoomaus"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Digitaalinen suurennuskerroin kuvattaessa"
+
+msgid "capturing iso speed"
+msgstr "kuvaamisen ISO-nopeus"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "ISO-nopeus kuvattaessa"
+
+msgid "capturing exposure program"
+msgstr "kuvaamisen valotusohjelma"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Valotusohjelma kuvattaessa"
+
+msgid "capturing exposure mode"
+msgstr "kuvaamisen valotustapa"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Valotustapa kuvattaessa"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "kuvaamisen valotustapa"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "Valotustapa kuvattaessa"
+
+msgid "capturing scene capture type"
+msgstr "kuvaamisen kuvausmoodi"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Kuvausmoodi kuvattaessa"
+
+msgid "capturing gain adjustment"
+msgstr "kuvaamisen kirkkauskorjaus"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Yleinen kirkkauskorjaus, joka kuvalle on tehty"
+
+msgid "capturing white balance"
+msgstr "kuvaamisen valkotasapaino"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Valittu valkotasapainotila kuvattaessa"
+
+msgid "capturing contrast"
+msgstr "kuvaamisen kontrasti"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Käytetty kontrastikäsittelyn suunta kuvattessa"
+
+msgid "capturing saturation"
+msgstr "kuvaamisen saturaatio"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Käytetty saturaatiokäsittelyn suunta kuvattessa"
+
+msgid "capturing sharpness"
+msgstr "kuvaamisen terävyys"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Käytetty terävyyskäsittelyn suunta kuvattessa"
+
+msgid "capturing flash fired"
+msgstr "kuvaamisen salamankäyttö"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Syttyikö salama kuvattaessa"
+
+msgid "capturing flash mode"
+msgstr "kuvaamisen salamamoodi"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Valittu salamamoodi kuvattessa"
+
+msgid "capturing metering mode"
+msgstr "kuvaamisen mittausmoodi"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Käytetty mittausmoodi päätettäessä valotusta kuvattaessa"
+
+msgid "capturing source"
+msgstr "kuvaamisen lähde"
+
+msgid "The source or type of device used for the capture"
+msgstr "Lähde tai laitetyyppi kuvattaessa"
+
+msgid "image horizontal ppi"
+msgstr "kuvan vaakasuora ppi"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Median (kuva tai video) tarkoitettu vaakasuora pikselitiheys ppi:nä"
+
+msgid "image vertical ppi"
+msgstr "kuvan pystysuora ppi"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Median (kuva tai video) tarkoitettu pystysuora pikselitiheys ppi:nä"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Tällä CD-levyllä ei ole ääniraitoja"
+
+msgid "ID3 tag"
+msgstr "ID3-tagi"
+
+msgid "APE tag"
+msgstr "APE-tagi"
+
+msgid "ICY internet radio"
+msgstr "ICY-Internet-radio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows-media (puhe)"
+
+msgid "CYUV Lossless"
+msgstr "Häviötön CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Häviötön MSZH"
+
+msgid "Run-length encoding"
+msgstr "RLE-koodaus"
+
+msgid "Sami subtitle format"
+msgstr "Sami-tekstitysmuoto"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer-tekstitysmuoto"
+
+msgid "Kate subtitle format"
+msgstr "Kate-tekstitysmuoto"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Pakkaamaton YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Pakkaamaton harmaakuva"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Pakkaamaton YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Pakkaamaton paletillinen %d-bittinen %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versio %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Pakkaamaton YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Raaka %d-bittinen pcm-ääni"
+
+msgid "Audio CD source"
+msgstr "Ääni-CD-lähde"
+
+msgid "DVD source"
+msgstr "DVD-lähde"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol (RTSP) -lähde"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) -protokollalähde"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s-protokollalähde"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s-video-RTP-purkaja"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s-ääni-RTP-purkaja"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s-RTP-purkaja"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s-demukseri"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s-purkaja"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s-video-RTP-pakkain"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s-ääni-RTP-pakkain"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s-RTP-pakkain"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s-mukseri"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s-pakkain"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer-elementti %s"
+
+msgid "Unknown source element"
+msgstr "Tuntematon lähde-elementti"
+
+msgid "Unknown sink element"
+msgstr "Tuntematon nieluelementti"
+
+msgid "Unknown element"
+msgstr "Tuntematon elementti"
+
+msgid "Unknown decoder element"
+msgstr "Tuntematon purkajaelementti"
+
+msgid "Unknown encoder element"
+msgstr "Tuntematon kodekkielementti"
+
+msgid "Plugin or element of unknown type"
+msgstr "Liitännäisen tai elementin tyyppi on tuntematon"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Pakkaamaton tasollinen YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Pakkaamaton tasollinen YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Pakkaamaton paketoitu YUV 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Pakkaamaton paketoitu YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Pakkaamaton paketoitu YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Pakkaamaton paketoitu YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Pakkaamaton paketoitu YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Pakkaamaton tasollinen YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Pakkaamaton tasollinen YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Pakkaamaton mustavalkoinen Y-taso"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Raaka pcm-ääni"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Raaka %d-bittinen liukulukupohjainen ääni"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Raaka liukulukupohjainen ääni"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "VFS-tiedostoa \"%s\" ei voi avata kirjoitettavaksi: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Tiedostonimeä ei annettu"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "VFS-tiedostoa \"%s\" ei voitu sulkea."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Virhe kirjoitettaessa tiedostoon \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Virheellinen tekstitysten URI \"%s\", tekstitys ei ole käytössä."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP-virtoja ei voi vielä soittaa."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Elementtiä \"decodebin\" ei voitu luoda."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Havaittiin vain tekstitysvirta. Joko yrität ladata tekstitystiedostoa tai "
+#~ "muuta tekstitiedostoa, tai mediatiedostoa ei voitu tunnistaa."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Tämän tiedoston käsittelyyn ei ole asennettu purkajaa. Voi olla, että "
+#~ "sinun täytyy asentaa tarvittavia liitännäisiä."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Tämä ei ole mediatiedosto"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Havaittiin tekstitysvirta, mutta ei videovirtaa."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Sekä autovideosink- ja xvimagesink-elementit puuttuvat."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Sekä autoaudiosink- että alsasink-elementit puuttuvat."
+
+#~ msgid "No device specified."
+#~ msgstr "Laitetta ei ole määritelty."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Laitetta \"%s\" ei ole olemassa."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Laite \"%s\" on jo käytössä."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Laitetta \"%s\" ei voi avata luettavaksi ja kirjoitettavaksi."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Virhe lähetettäessä gdp-otsaketietoja kohteeseen \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Virhe lähetettäessä gdp-sisältöä kohteeseen \"%s:%d\"."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Ei voida toistaa sekä tekstitystä että alikuvaa."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Tilapäishakemistoa ei ole määritelty."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Tilapäistiedostoa ”%s” ei voitu luoda."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Tiedostoa \"%s\" ei voi avata luettavaksi."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Sisäisen tietovirran virhe."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Elementtiä \"decodebin2\" ei voitu luoda."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Elementtiä \"queue2\" ei voitu luoda."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Elementtiä \"typefind\" ei voitu luoda."
+
+#~ msgid "No file name specified."
+#~ msgstr "Tiedostonimeä ei annettu."
+
+#~ msgid "artist sortname"
+#~ msgstr "esittäjän järjestysnimi"
+
+#~ msgid "MusicBrainz artist sortname"
+#~ msgstr "MusicBrainz esittäjän järjestysnimi"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..936f80c
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..0058913
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,636 @@
+# Translation of gst-plugins-base to French
+# Copyright (C) 2003-2011 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-base package.
+#
+# Nicolas Velin <nicolas@velin.fr>, 2008.
+# Claude Paroz <claude@2xlibre.net>, 2008-2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-28 09:19+0200\n"
+"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+msgid "Master"
+msgstr "Volume général"
+
+msgid "Bass"
+msgstr "Basses"
+
+msgid "Treble"
+msgstr "Aiguës"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Entrée ligne"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Micro"
+
+msgid "PC Speaker"
+msgstr "Haut-parleur PC"
+
+msgid "Playback"
+msgstr "Lecture"
+
+msgid "Capture"
+msgstr "Enregistrement"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Impossible d'utiliser le périphérique pour la lecture en mode mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Impossible d'utiliser le périphérique pour la lecture en mode stéréo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+"Impossible d'utiliser le périphérique pour la lecture en mode %d canaux."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Impossible d'utiliser le périphérique audio pour la lecture. Celui-ci est "
+"occupé par une autre application."
+
+msgid "Could not open audio device for playback."
+msgstr "Impossible d'utiliser le périphérique audio pour la lecture."
+
+msgid "Could not open device for recording in mono mode."
+msgstr ""
+"Impossible d'utiliser le périphérique pour l'enregistrement en mode mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr ""
+"Impossible d'utiliser le périphérique pour l'enregistrement en mode stéréo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr ""
+"Impossible d'utiliser le périphérique pour l'enregistrement en mode %d "
+"canaux."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Impossible d'utiliser le périphérique audio pour l'enregistrement. Celui-ci "
+"est occupé par une autre application."
+
+msgid "Could not open audio device for recording."
+msgstr "Impossible d'utiliser le périphérique audio pour l'enregistrement."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossible d'utiliser le lecteur CD pour la lecture."
+
+msgid "Could not seek CD."
+msgstr "Impossible de se positionner sur le CD."
+
+msgid "Could not read CD."
+msgstr "Impossible de lire le CD."
+
+msgid "Internal data stream error."
+msgstr "Erreur interne de flux de données."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Un greffon %s est requis pour lire ce flux, mais il n'est pas installé."
+
+msgid "Could not determine type of stream"
+msgstr "Impossible de déterminer le type de flux"
+
+msgid "This appears to be a text file"
+msgstr "Ce fichier semble être un fichier texte"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Élément « %s » manquant, contrôlez votre installation de GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Les éléments autovideosink et %s sont tous deux manquants."
+
+msgid "The autovideosink element is missing."
+msgstr "L'élément autovideosink est manquant."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "L'élément videosink configuré %s ne fonctionne pas."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Les éléments autovideosink et %s ne fonctionnent pas."
+
+msgid "The autovideosink element is not working."
+msgstr "L'élément autovideosink ne fonctionne pas."
+
+msgid "Custom text sink element is not usable."
+msgstr "L'élément sink text personnalisé n'est pas utilisable."
+
+msgid "No volume control found"
+msgstr "Aucun contrôle de volume trouvé"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Les éléments autoaudiosink et %s sont tous deux manquants."
+
+msgid "The autoaudiosink element is missing."
+msgstr "L'élément autoaudiosink est manquant."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "L'élément autoaudiosink configuré %s ne fonctionne pas."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Les éléments autoaudiosink et %s ne fonctionnent pas."
+
+msgid "The autoaudiosink element is not working."
+msgstr "L'élément autoaudiosink ne fonctionne pas."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Impossible de lire un fichier texte sans vidéo ou visualisation."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Aucun décodeur n'est disponible pour le type « %s »."
+
+msgid "No URI specified to play from."
+msgstr "Aucun URI source indiqué pour la lecture."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "URI « %s » non valide."
+
+msgid "This stream type cannot be played yet."
+msgstr "Ce type de flux ne peut pas encore être lu."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Aucun gestionnaire d'URI implémenté pour « %s »."
+
+msgid "Source element is invalid."
+msgstr "Élément source non valide."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Erreur lors de l'envoi de données vers « %s:%d »."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Connexion refusée vers %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "Impossible d'enregistrer assez rapidement les données audio"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Échec de lecture de l'étiquette : données insuffisantes"
+
+msgid "track ID"
+msgstr "identifiant de piste"
+
+msgid "MusicBrainz track ID"
+msgstr "identifiant de piste MusicBrainz"
+
+msgid "artist ID"
+msgstr "identifiant d'artiste"
+
+msgid "MusicBrainz artist ID"
+msgstr "identifiant d'artiste MusicBrainz"
+
+msgid "album ID"
+msgstr "identifiant d'album"
+
+msgid "MusicBrainz album ID"
+msgstr "identifiant d'album MusicBrainz"
+
+msgid "album artist ID"
+msgstr "identifiant d'artiste de l'album"
+
+msgid "MusicBrainz album artist ID"
+msgstr "identifiant d'artiste de l'album MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "identifiant TRM de piste"
+
+msgid "MusicBrainz TRM ID"
+msgstr "identifiant TRM MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "vitesse d'obturation de la capture"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+"Vitesse d'obturation utilisée lors de la capture de l'image, en secondes"
+
+# http://www.blog-couleur.com/?Qu-est-ce-que-l-ouverture-en
+msgid "capturing focal ratio"
+msgstr "ouverture absolue de la capture"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Ouverture absolue (nombre f) utilisée lors de la capture de l'image"
+
+msgid "capturing focal length"
+msgstr "distance focale de la capture"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+"Distance focale de l'optique utilisée pour la capture de l'image, en mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "valeur du zoom numérique de la capture"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Valeur du zoom numérique utilisé lors de la capture de l'image"
+
+msgid "capturing iso speed"
+msgstr "sensibilité iso de la capture"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "La sensibilité ISO utilisée lors de la capture de l'image"
+
+msgid "capturing exposure program"
+msgstr "programme d'exposition de la capture"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Le programme d'exposition utilisé lors de la capture de l'image"
+
+msgid "capturing exposure mode"
+msgstr "mode d'exposition de la capture"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Le mode d'exposition utilisé lors de la capture de l'image"
+
+msgid "capturing exposure compensation"
+msgstr "compensation d'exposition de la capture"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "La compensation d'exposition utilisée lors de la capture de l'image"
+
+msgid "capturing scene capture type"
+msgstr "type de mode scène de la capture"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Le mode scène utilisé lors de la capture de l'image"
+
+msgid "capturing gain adjustment"
+msgstr "ajustement de gain de la capture"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "L'ajustement général de gain appliqué à une image"
+
+msgid "capturing white balance"
+msgstr "balance des blancs de la capture"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Le mode de balance des blancs défini lors de la capture d'une image"
+
+msgid "capturing contrast"
+msgstr "contraste de la capture"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+"La direction du traitement de contraste appliqué lors de la capture d'une "
+"image"
+
+msgid "capturing saturation"
+msgstr "saturation de la capture"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"La direction du traitement de saturation appliqué lors de la capture d'une "
+"image"
+
+msgid "capturing sharpness"
+msgstr "netteté de la capture"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+"La direction du traitement de netteté appliqué lors de la capture d'une image"
+
+msgid "capturing flash fired"
+msgstr "flash utilisé pour la capture"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Indique si le flash a été utilisé pour capturer une image"
+
+msgid "capturing flash mode"
+msgstr "mode de flash de la capture"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Le mode de flash sélectionné lors de la capture d'une image"
+
+msgid "capturing metering mode"
+msgstr "mode de msure de la capture"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Le mode de mesure utilisé lors de l'évaluation de l'exposition pour la "
+"capture d'une image"
+
+msgid "capturing source"
+msgstr "source de capture"
+
+msgid "The source or type of device used for the capture"
+msgstr "La source ou le type d'appareil utilisé pour la capture"
+
+msgid "image horizontal ppi"
+msgstr "ppp horizontal de l'image"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Densité de pixels horizontale annoncée par le média (image/vidéo), en points "
+"par pouce"
+
+msgid "image vertical ppi"
+msgstr "ppp vertical de l'image"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Densité de pixels verticale annoncée par le média (image/vidéo), en points "
+"par pouce"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Ce CD ne contient aucune piste audio"
+
+msgid "ID3 tag"
+msgstr "Étiquette ID3"
+
+msgid "APE tag"
+msgstr "Étiquette APE"
+
+msgid "ICY internet radio"
+msgstr "Radio Internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "ALAC (Apple Lossless Audio)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "FLAC (Free Lossless Audio Codec)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "TTA (Lossless True Audio)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV sans perte"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH sans perte"
+
+# http://fr.wikipedia.org/wiki/Run-length_encoding
+msgid "Run-length encoding"
+msgstr "Codage par plages"
+
+msgid "Sami subtitle format"
+msgstr "Format de sous-titres Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Format de sous-titres TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Format de sous-titres Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV non compressé"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Image niveaux de gris non compressée"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV non compressé"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "%2$s %1$d bits en palette non compressé"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "MPEG-4 DivX version %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV non compressé"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Audio PCM brut %d bits"
+
+msgid "Audio CD source"
+msgstr "Source CD audio"
+
+msgid "DVD source"
+msgstr "Source DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Source RTSP (Real Time Streaming Protocol)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Source protocole MMS (Microsoft Media Server)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Source protocole %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Depayloader RTP vidéo %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Depayloader RTP audio %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Depayloader RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Démultiplexeur %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Décodeur %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Payloader RTP vidéo %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Payloader RTP audio %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Payloader RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Multiplexeur %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Codeur %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Élément GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Élément source inconnu"
+
+msgid "Unknown sink element"
+msgstr "Élément d'entrée inconnu"
+
+msgid "Unknown element"
+msgstr "Élément inconnu"
+
+msgid "Unknown decoder element"
+msgstr "Élément décodeur inconnu"
+
+msgid "Unknown encoder element"
+msgstr "Élément codeur inconnu"
+
+msgid "Plugin or element of unknown type"
+msgstr "Greffon ou élément de type inconnu"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV planaire 4:2:0 non compressé"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YVU planaire 4:2:0 non compressé"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV empaqueté 4:2:2 non compressé"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV empaqueté 4:1:0 non compressé"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU empaqueté 4:1:0 non compressé"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV empaqueté 4:1:1 non compressé"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV empaqueté 4:4:4 non compressé"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV planaire 4:2:2 non compressé"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV planaire 4:1:1 non compressé"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Plan Y noir et blanc non compressé"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Audio PCM brut"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio brut virgule flottante %d bits"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio brut virgule flottante"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Impossible d'ouvrir le fichier vfs « %s » en écriture : %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Aucun nom de fichier indiqué"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Impossible de fermer le fichier vfs « %s »."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Erreur lors de l'écriture dans le fichier « %s »."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr ""
+#~ "URI de sous-titres « %s » non valide, les sous-titres sont désactivés."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Il n'est pas encore possible de lire les flux RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Impossible de créer un élément « decodebin »."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Seul un flux de sous-titres a été détecté. Soit vous essayez d'ouvrir un "
+#~ "fichier de sous-titres ou un autre type de fichier texte, soit le fichier "
+#~ "multimédia n'a pas été reconnu."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Aucun décodeur n'est installé pour gérer ce fichier. Vous devriez "
+#~ "probablement installer des greffons supplémentaires."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Ceci n'est pas un fichier multimédia"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Un flux de sous-titres a été détecté, mais pas de flux vidéo."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Les éléments autovideosink et xvimagesink sont tous deux manquants."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Les éléments autoaudiosink et alsasink sont tous deux manquants."
+
+#~ msgid "No device specified."
+#~ msgstr "Aucun périphérique indiqué."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Le périphérique « %s » n'existe pas."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Le périphérique « %s » est déjà en cours d'utilisation."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Impossible d'ouvrir le périphérique « %s » en lecture et écriture."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Erreur lors de l'envoi de données d'en-tête gdp vers « %s:%d »."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Erreur lors de l'envoi de données de charge utile gdp vers « %s:%d »."
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644
index 0000000..608d482
--- /dev/null
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..78b8656
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,620 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2010 Fran Dieguez
+# This file is distributed under the same license as the gst-plugins-base package.
+# Fran Diéguez <frandieguez@ubuntu.com>, 2010, 2011.
+# Fran Dieguez <frandieguez@ubuntu.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-09-05 12:48+0200\n"
+"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Poedit-Language: galego\n"
+
+msgid "Master"
+msgstr "Mestre"
+
+msgid "Bass"
+msgstr "Graves"
+
+msgid "Treble"
+msgstr "Agudos"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizador"
+
+msgid "Line-in"
+msgstr "Liña de entrada"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Micrófono"
+
+msgid "PC Speaker"
+msgstr "Altofalante do PC"
+
+msgid "Playback"
+msgstr "Reproducir"
+
+msgid "Capture"
+msgstr "Capturar"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Non foi posíbel abrir o dispositivo para a reprodución en modo mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr ""
+"Non foi posíbel abrir o dispositivo para a reprodución en modo estéreo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Non foi posíbel abrir o dispositivo para reproducir no modo %d-canles."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Non foi posíbel abrir o dispositivo de son para reproducir. Outro aplicativo "
+"está usado o dispositivo."
+
+msgid "Could not open audio device for playback."
+msgstr "Non foi posíbel abrir o dispositivo de son para reproducir."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Non foi posíbel abrir o dispositivo para gravar en modo mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Non foi posíbel abrir o dispositivo para gravar en modo estéreo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Non foi posíbel abrir o dispositivo para gravar en modo %d-canles."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Non foi posíbel abrir o dispositivo de son para gravar. Outro aplicativo "
+"está usando o dispositivo."
+
+msgid "Could not open audio device for recording."
+msgstr "Non foi posíbel abrir o dispositivo de son para gravar."
+
+msgid "Could not open CD device for reading."
+msgstr "Non foi posíbel abrir o dispositivo de CD para ler."
+
+msgid "Could not seek CD."
+msgstr "Non foi posíbel buscar no CD."
+
+msgid "Could not read CD."
+msgstr "Non foi posíbel ler o CD."
+
+msgid "Internal data stream error."
+msgstr "Produciuse un erro no fluxo de datos internos."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Precísase un engadido %s que non está instalado para reproducir este fluxo."
+
+msgid "Could not determine type of stream"
+msgstr "Non foi posíbel determinar o tipo de fluxo."
+
+msgid "This appears to be a text file"
+msgstr "Isto parece ser un ficheiro de texto"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Falta o elemento «%s» - comprobe a instalación do GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Faltan os elementos autivideosink e %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Falta o elemento autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "O videosink configurado %s non está funcionando."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Os elementos autovideosink e %s non están funcionando."
+
+msgid "The autovideosink element is not working."
+msgstr "O elemento autovideosink non está funcionando."
+
+msgid "Custom text sink element is not usable."
+msgstr "Non é posíbel usar o elemento sumideiro (sink) de texto personaizado."
+
+msgid "No volume control found"
+msgstr "Non foi posíbel encontrar o control do volume"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Faltan os elementos autoaudiosink e %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Falta o elemento autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "O audiosink configurado %s non está funcionando"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Os elementos autoaudiosink e %s non están funcionando."
+
+msgid "The autoaudiosink element is not working."
+msgstr "O elemento autoaudiosink non está funcionando."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Non é posíbel reproducir un ficheiro de texto sen vídeo nin visualizacións."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Non hai dispoñíbel ningún decodificador para o tipo «%s»."
+
+msgid "No URI specified to play from."
+msgstr "Non se especificou un URI para reproducir."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "O URI «%s» é incorrecto."
+
+msgid "This stream type cannot be played yet."
+msgstr "Aínda non é posíbel reproducir este tipo de fluxo."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Non hai implementado un manexador de URIs para «%s»."
+
+msgid "Source element is invalid."
+msgstr "O elemento fonte é incorrecto."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Produciuse un erro mentres se enviaban datos a \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Rexeitouse a conexión a %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "Non é posíbel gravar o son cunha velocidade suficiente"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Produciuse un fallo ao ler a etiqueta: non hai datos suficientes"
+
+msgid "track ID"
+msgstr "ID da pista"
+
+msgid "MusicBrainz track ID"
+msgstr "ID da pista en MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID do artista"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID do artista en MusicBrainz"
+
+msgid "album ID"
+msgstr "ID do álbum"
+
+msgid "MusicBrainz album ID"
+msgstr "ID do álbum en MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID do álbum do artista"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID do álbum do artista en MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID TRM da pista"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM en MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "velocidade do obturador da toma"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Velocidade do obturador usada ao tomar unha imaxe, en segundos"
+
+msgid "capturing focal ratio"
+msgstr "taxa focal da toma"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Taxa focal (número-f) usada ao tomar a imaxe"
+
+msgid "capturing focal length"
+msgstr "lonxitude focal da toma"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Lonxitude focal da lente usada ao tomar a imaxe, en mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "taxa de ampliación dixital da toma"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Taxa de ampliación dixital usada ao tomar unha imaxe"
+
+msgid "capturing iso speed"
+msgstr "velocidade ISO da toma"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "A velocidade de captura ISO usada ao tomar unha imaxe"
+
+msgid "capturing exposure program"
+msgstr "programa de exposición da toma"
+
+msgid "The exposure program used when capturing an image"
+msgstr "O programa de exposición usado ao tomar unha imaxe"
+
+msgid "capturing exposure mode"
+msgstr "modo de exposición da toma"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "O modo de exposición usado ao tomar unha imaxe"
+
+msgid "capturing exposure compensation"
+msgstr "capturando a compensación de exposición"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "A compensación de exposición usada ao capturar unha imaxe"
+
+msgid "capturing scene capture type"
+msgstr "tipo de escena usado na toma"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "O modo de captura usado ao tomar unha imaxe"
+
+msgid "capturing gain adjustment"
+msgstr "axuste de ganancia da toma"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "O axuste xeral de ganancia aplicado nunha imaxe"
+
+msgid "capturing white balance"
+msgstr "balance de brancos da toma"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "O modo de balance de brancos usado ao tomar unha imaxe"
+
+msgid "capturing contrast"
+msgstr "contraste da toma"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "A dirección de contraste procesada aplicada ao tomar unha imaxe"
+
+msgid "capturing saturation"
+msgstr "saturación da toma"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "A dirección de saturación procesada aplicada ao tomar unha imaxe"
+
+msgid "capturing sharpness"
+msgstr "nitidez da toma"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "A dirección de nitidez procesada aplicada ao tomar unha imaxe"
+
+msgid "capturing flash fired"
+msgstr "disparo de flash da toma"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Se o flash se disparou ao capturar unha imaxe"
+
+msgid "capturing flash mode"
+msgstr "modo de flash da toma"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "O modo de flash seleccionado ao tomar unha imaxe"
+
+msgid "capturing metering mode"
+msgstr "modo de medición da toma"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"O modo de medición usado ao determinar a exposición ao tomar unha imaxe"
+
+msgid "capturing source"
+msgstr "orixe da toma"
+
+msgid "The source or type of device used for the capture"
+msgstr "A orixe ou tipo de dispositivo usado para a toma"
+
+msgid "image horizontal ppi"
+msgstr "ppi horizontal da imaxe"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Densidade horizontal de píxeles, en ppi, do medio (imaxe ou vídeo)"
+
+msgid "image vertical ppi"
+msgstr "ppi vertical da imaxe"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Densidade vertical de píxeles, en ppi, do medio (imaxe ou vídeo)"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Este CD non contén pistas de son"
+
+msgid "ID3 tag"
+msgstr "Etiqueta ID3"
+
+msgid "APE tag"
+msgstr "Etiqueta APE"
+
+msgid "ICY internet radio"
+msgstr "Emisora de internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH sen perda"
+
+msgid "Run-length encoding"
+msgstr "Codificación do tamaño durante a execución"
+
+msgid "Sami subtitle format"
+msgstr "Formato de subtítulos Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Formato de subtítulos TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Formato de subtítulos Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV sen comprimir"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Imaxe en escala de grises sen comprimir"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV sen comprimir"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Paletizado sen comprimir de %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Versión %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV sen comprimir"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Audio PCM sen comprimir de %d-bits"
+
+msgid "Audio CD source"
+msgstr "Fonte: CD de son"
+
+msgid "DVD source"
+msgstr "Fonte: DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Fonte: Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Fonte: protocolo Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Fonte: Protocolo %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "decodificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "decodificador de son RTP %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "decodificador RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "demultiplexor %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "decodificador %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "codificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "codificador de son RTP %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "codificador RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "multiplexor %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "codificador %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Elemento %s do GStreamer"
+
+msgid "Unknown source element"
+msgstr "Fonte: Elemento descoñecido"
+
+msgid "Unknown sink element"
+msgstr "Elemento sumideiro (sink) descoñecido"
+
+msgid "Unknown element"
+msgstr "Elemento descoñecido"
+
+msgid "Unknown decoder element"
+msgstr "O elemento decodificador é descoñecido"
+
+msgid "Unknown encoder element"
+msgstr "O elemento codificador é descoñecido"
+
+msgid "Plugin or element of unknown type"
+msgstr "Engadido ou elemento de tipo descoñecido"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Non foi posíbel abrir o ficheiro vfs «%s» para escribir: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Non se forneceu un nome de ficheiro"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Non foi posíbel pechar o ficheiro vfs «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Produciuse un erro ao escribir no ficheiro «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr ""
+#~ "O URI dos subtítulos «%s» é incorrecto, desactiváronse os subtítulos."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Aínda non é posíbel reproducir os fluxos RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Non foi posíbel crear o elemento \"decodebin\" ."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Só se detectou un fluxo de subtítulos. Ou ben está cargando un ficheiro "
+#~ "de subtítulos ou calquera outro ficheiro de texto ou quizais o ficheiro "
+#~ "multimedia non foi recoñecido."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Non ten instalado un decodificador para manexar este ficheiro. É posíbel "
+#~ "que precise instalar os engadidos necesarios. "
+
+#~ msgid "This is not a media file"
+#~ msgstr "Este non é un ficheiro multimedia"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Detectouse un fluxo de subtítulos pero non de vídeo."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Faltan os elementos autovideosink e xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Faltan os elementos autoaudiosink e alsasink."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr ""
+#~ "Produciuse un erro ao enviar os datos da cabeceira gdp a  \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Produciuse un erro ao enviar a carga de datos de gdp a «%s:%d»."
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 plano sen comprimir"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YUV 4:2:0 plano sen comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 empaquetado sen comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 empaquetado sen comprimir"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YUV 4:1:0 empaquetado sen comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 empaquetado sen comprimir"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 empaquetado sen comprimir"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 plano sen comprimir"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 plano sen comprimir"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Plano Y en branco e negro sen comprimir"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Audio PCM sen comprimir"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio sen comprimir de %d-bits en coma flotante"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio sen comprimir en coma flotante"
+
+#~ msgid "No device specified."
+#~ msgstr "Non se especificou un dispositivo."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "O dispositivo «%s» non existe."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "O dispositivo «%s» xa está en uso."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr ""
+#~ "Non foi posíbel abrir o dispositivo «%s» para a súa lectura e escritura."
diff --git a/po/gst-plugins-base-0.11.pot b/po/gst-plugins-base-0.11.pot
new file mode 100644
index 0000000..f914a7e
--- /dev/null
+++ b/po/gst-plugins-base-0.11.pot
@@ -0,0 +1,657 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.11.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/alsa/gstalsamixertrack.c:144
+msgid "Master"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:145
+msgid "Bass"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:146
+msgid "Treble"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:147
+msgid "PCM"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:148
+msgid "Synth"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:149
+msgid "Line-in"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:150
+msgid "CD"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:151
+msgid "Microphone"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:152
+msgid "PC Speaker"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:153
+msgid "Playback"
+msgstr ""
+
+#: ext/alsa/gstalsamixertrack.c:154 ext/alsa/gstalsamixertrack.c:221
+#: ext/alsa/gstalsamixertrack.c:224
+msgid "Capture"
+msgstr ""
+
+#: ext/alsa/gstalsasink.c:464
+msgid "Could not open device for playback in mono mode."
+msgstr ""
+
+#: ext/alsa/gstalsasink.c:466
+msgid "Could not open device for playback in stereo mode."
+msgstr ""
+
+#: ext/alsa/gstalsasink.c:470
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+
+#: ext/alsa/gstalsasink.c:743
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#: ext/alsa/gstalsasink.c:748
+msgid "Could not open audio device for playback."
+msgstr ""
+
+#: ext/alsa/gstalsasrc.c:488
+msgid "Could not open device for recording in mono mode."
+msgstr ""
+
+#: ext/alsa/gstalsasrc.c:490
+msgid "Could not open device for recording in stereo mode."
+msgstr ""
+
+#: ext/alsa/gstalsasrc.c:494
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr ""
+
+#: ext/alsa/gstalsasrc.c:774
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+
+#: ext/alsa/gstalsasrc.c:779
+msgid "Could not open audio device for recording."
+msgstr ""
+
+#: ext/cdparanoia/gstcdparanoiasrc.c:278 ext/cdparanoia/gstcdparanoiasrc.c:284
+msgid "Could not open CD device for reading."
+msgstr ""
+
+#: ext/cdparanoia/gstcdparanoiasrc.c:410
+msgid "Could not seek CD."
+msgstr ""
+
+#: ext/cdparanoia/gstcdparanoiasrc.c:418
+msgid "Could not read CD."
+msgstr ""
+
+#: ext/ogg/gstoggdemux.c:4279
+msgid "Internal data stream error."
+msgstr ""
+
+#: gst/playback/gstdecodebin2.c:1642
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#: gst/playback/gstdecodebin2.c:1649
+msgid "Could not determine type of stream"
+msgstr ""
+
+#: gst/playback/gstdecodebin2.c:2224
+msgid "This appears to be a text file"
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1140 gst/playback/gstplaysink.c:1153
+#: gst/playback/gstplaysink.c:1284 gst/playback/gstplaysink.c:1464
+#: gst/playback/gstplaysink.c:1513 gst/playback/gstplaysink.c:1528
+#: gst/playback/gstplaysink.c:1553 gst/playback/gstplaysink.c:1577
+#: gst/playback/gstplaysink.c:1697 gst/playback/gstplaysink.c:2051
+#: gst/playback/gstplaysink.c:2060 gst/playback/gstplaysink.c:2069
+#: gst/playback/gstplaysink.c:2078 gst/playback/gstplaysink.c:3088
+#: gst/playback/gsturidecodebin.c:1342
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1333
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1337
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1342
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1346
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1350
+msgid "The autovideosink element is not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1501
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1814
+msgid "No volume control found"
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1834
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1838
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1843
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1847
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:1851
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+#: gst/playback/gstplaysink.c:2154 gst/playback/gstplaysink.c:2159
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:869
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:1255
+msgid "No URI specified to play from."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:1261
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:1267
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:1284
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+#: gst/playback/gsturidecodebin.c:2093
+msgid "Source element is invalid."
+msgstr ""
+
+#: gst/tcp/gsttcpclientsink.c:187
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr ""
+
+#: gst/tcp/gsttcpclientsink.c:293 gst/tcp/gsttcpclientsrc.c:330
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+#: gst-libs/gst/audio/gstbaseaudiosrc.c:827
+msgid "Can't record audio fast enough"
+msgstr ""
+
+#: gst-libs/gst/tag/gsttagdemux.c:1086
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:79
+msgid "track ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:79
+msgid "MusicBrainz track ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:81
+msgid "artist ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:81
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:83
+msgid "album ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:83
+msgid "MusicBrainz album ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:86
+msgid "album artist ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:86
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:88
+msgid "track TRM ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:88
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:110
+msgid "capturing shutter speed"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:111
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:114
+msgid "capturing focal ratio"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:115
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:118
+msgid "capturing focal length"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:119
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:122
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:123
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:126
+msgid "capturing iso speed"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:127
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:130
+msgid "capturing exposure program"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:131
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:134
+msgid "capturing exposure mode"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:135
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:138
+msgid "capturing exposure compensation"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:139
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:142
+msgid "capturing scene capture type"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:143
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:146
+msgid "capturing gain adjustment"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:147
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:150
+msgid "capturing white balance"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:151
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:154
+msgid "capturing contrast"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:155
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:159
+msgid "capturing saturation"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:160
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:164
+msgid "capturing sharpness"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:165
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:169
+msgid "capturing flash fired"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:170
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:173
+msgid "capturing flash mode"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:174
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:177
+msgid "capturing metering mode"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:178
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:182
+msgid "capturing source"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:183
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:186
+msgid "image horizontal ppi"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:187
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:190
+msgid "image vertical ppi"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:191
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:194
+msgid "ID3v2 frame"
+msgstr ""
+
+#: gst-libs/gst/tag/tags.c:194
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+#: gst-libs/gst/cdda/gstcddabasesrc.c:1447
+#: gst-libs/gst/cdda/gstcddabasesrc.c:1480
+msgid "This CD has no audio tracks"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:73
+msgid "ID3 tag"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:74
+#: gst-libs/gst/pbutils/descriptions.c:75
+msgid "APE tag"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:76
+msgid "ICY internet radio"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:105
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:115
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:141
+#: gst-libs/gst/pbutils/descriptions.c:142
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:150
+msgid "Windows Media Speech"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:165
+msgid "CYUV Lossless"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:170
+msgid "FFMpeg v1"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:184
+msgid "Lossless MSZH"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:194
+msgid "Run-length encoding"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:240
+msgid "Sami subtitle format"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:241
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:243
+msgid "Kate subtitle format"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:307
+#: gst-libs/gst/pbutils/descriptions.c:350
+msgid "Uncompressed video"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:312
+msgid "Uncompressed gray"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:338
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:347
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:400
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:621
+msgid "Uncompressed audio"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:627
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:714
+msgid "Audio CD source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:717
+msgid "DVD source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:720
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:724
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:732
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:804
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:806
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:808
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:815
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:817
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:855
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:857
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:859
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:866
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:868
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:900
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:559
+msgid "Unknown source element"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:562
+msgid "Unknown sink element"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:565
+msgid "Unknown element"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:568
+msgid "Unknown decoder element"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:571
+msgid "Unknown encoder element"
+msgstr ""
+
+#: gst-libs/gst/pbutils/missing-plugins.c:576
+msgid "Plugin or element of unknown type"
+msgstr ""
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..ebb05d8
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..90ad6aa
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,617 @@
+# Hungarian translation of gst-plugins-base
+# This file is distributed under the same license as the gst-plugins-base package.
+# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+#
+# Laszlo Dvornik <dvornik@invitel.hu>, 2004.
+# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-11-03 02:48+0100\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Rosetta-Export-Date: 2007-03-10 00:18+0000\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Fő hangerő"
+
+msgid "Bass"
+msgstr "Basszus"
+
+msgid "Treble"
+msgstr "Magas"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Szintet."
+
+msgid "Line-in"
+msgstr "Vonalbemenet"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC hangszóró"
+
+msgid "Playback"
+msgstr "Lejátszás"
+
+msgid "Capture"
+msgstr "Felvétel"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nem lehet lejátszásra megnyitni az eszközt mono módban."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nem lehet lejátszásra megnyitni az eszközt sztereó módban."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Nem lehet lejátszásra megnyitni az eszközt %d csatornás módban."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nem lehet lejátszásra megnyitni a hangeszközt. Az eszközt másik alkalmazás "
+"használja."
+
+msgid "Could not open audio device for playback."
+msgstr "Nem lehet lejátszásra megnyitni a hangeszközt."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nem lehet felvételre megnyitni az eszközt mono módban."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Nem lehet felvételre megnyitni az eszközt sztereó módban."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Az eszköz nem nyitható meg felvételre %d csatornás módban."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nem lehet felvételre megnyitni a hangeszközt. Az eszközt másik alkalmazás "
+"használja."
+
+msgid "Could not open audio device for recording."
+msgstr "Nem lehet felvételre megnyitni a hangeszközt."
+
+msgid "Could not open CD device for reading."
+msgstr "Nem lehet olvasásra megnyitni a CD-eszközt."
+
+msgid "Could not seek CD."
+msgstr "Nem kereshető a CD."
+
+msgid "Could not read CD."
+msgstr "Nem olvasható a CD."
+
+msgid "Internal data stream error."
+msgstr "Belső adatfolyam-hiba."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Az adatfolyam lejátszásához egy %s bővítmény szükséges, de az nincs "
+"telepítve."
+
+msgid "Could not determine type of stream"
+msgstr "Nem határozható meg az adatfolyam típusa"
+
+msgid "This appears to be a text file"
+msgstr "Ez egy szövegfájlnak tűnik"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "A(z) „%s” elem hiányzik - ellenőrizze a Gstreamer telepítését."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Az autovideosink és a(z) %s elem is hiányzik."
+
+msgid "The autovideosink element is missing."
+msgstr "Az autovideosink elem hiányzik."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "A beállított %s videosink elem nem működik."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Sem az autovideosink, sem a(z) %s elem nem működik."
+
+msgid "The autovideosink element is not working."
+msgstr "Az autovideosink elem nem működik."
+
+msgid "Custom text sink element is not usable."
+msgstr "Az egyéni szövegnyelő elem nem használható."
+
+msgid "No volume control found"
+msgstr "Nem található hangerőszabályzó"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Az autoaudiosink és a(z) %s elem is hiányzik."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Az autoaudiosink elem hiányzik."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "A beállított %s audiosink elem nem működik."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Sem az autoaudiosink, sem a(z) %s elem nem működik."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Az autoaudiosink elem nem működik."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "A szövegfájl nem játszható le videó vagy vizualizációk nélkül."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Nem érhető el dekódoló a(z) „%s” típushoz."
+
+msgid "No URI specified to play from."
+msgstr "Nincs megadva URI a lejátszáshoz."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Érvénytelen URI: „%s”."
+
+msgid "This stream type cannot be played yet."
+msgstr "Ez az adatfolyamtípus még nem játszható le."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nincs URI kezelő megvalósítva a következőhöz: „%s”."
+
+msgid "Source element is invalid."
+msgstr "A forráselem érvénytelen."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Hiba adatok küldése során a következőnek: „%s:%d”."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "A kapcsolat visszautasítva a következőhöz: %s:%d."
+
+msgid "Can't record audio fast enough"
+msgstr "Nem lehet elég gyorsan rögzíteni a hangot"
+
+msgid "Failed to read tag: not enough data"
+msgstr "A címke nem olvasható: nincs elég adat"
+
+msgid "track ID"
+msgstr "számazonosító"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz számazonosító"
+
+msgid "artist ID"
+msgstr "előadó-azonosító"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz előadó-azonosító"
+
+msgid "album ID"
+msgstr "Albumazonosító"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz albumazonosító"
+
+msgid "album artist ID"
+msgstr "Albumelőadó azonosítója"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albumelőadó azonosítója"
+
+msgid "track TRM ID"
+msgstr "szám TRM azonosítója"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz szám TRM azonosítója"
+
+msgid "capturing shutter speed"
+msgstr "felvétel zársebessége"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Kép felvételéhez használt zársebesség másodpercben"
+
+msgid "capturing focal ratio"
+msgstr "felvétel fókuszaránya"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "A kép felvételéhez használt fókuszarány (f-szám)"
+
+msgid "capturing focal length"
+msgstr "felvétel fókusztávolsága"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "A kép felvételéhez használt lencse fókusztávolsága mm-ben"
+
+msgid "capturing digital zoom ratio"
+msgstr "felvétel digitális nagyítási aránya"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "A kép felvételéhez használt digitális nagyítási arány"
+
+msgid "capturing iso speed"
+msgstr "felvétel ISO sebessége"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "A kép felvételéhez használt ISO sebesség"
+
+msgid "capturing exposure program"
+msgstr "felvétel expozíciós programja"
+
+msgid "The exposure program used when capturing an image"
+msgstr "A kép felvételéhez használt expozíciós program"
+
+msgid "capturing exposure mode"
+msgstr "felvétel expozíciós módja"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "A kép felvételéhez használt expozíciós mód"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "felvétel expozíciós módja"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "A kép felvételéhez használt expozíciós mód"
+
+msgid "capturing scene capture type"
+msgstr "felvétel helyszínfelvételi módja"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "A kép felvételéhez használt helyszínfelvételi mód"
+
+msgid "capturing gain adjustment"
+msgstr "felvétel erősítésmódosítása"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "A képre alkalmazott általános erősítésmódosítás"
+
+msgid "capturing white balance"
+msgstr "felvétel fehéregyensúlya"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "A kép felvételéhez használt fehéregyensúlymód"
+
+msgid "capturing contrast"
+msgstr "felvétel kontrasztja"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "A kép felvételekor használt kontrasztfeldolgozás iránya"
+
+msgid "capturing saturation"
+msgstr "felvétel telítettsége"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "A kép felvételekor alkalmazott telítettségfeldolgozás iránya"
+
+msgid "capturing sharpness"
+msgstr "felvétel élessége"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "A kép felvételekor alkalmazott élességfeldolgozás iránya"
+
+msgid "capturing flash fired"
+msgstr "felvétel vakuja"
+
+msgid "If the flash fired while capturing an image"
+msgstr "A kép felvételéhez használt vaku"
+
+msgid "capturing flash mode"
+msgstr "felvétel vakumódja"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "A kép felvételéhez használt kijelölt vakumód"
+
+msgid "capturing metering mode"
+msgstr "felvétel mérési módja"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "A kép felvételekor az expozíció meghatározásához használt mérési mód"
+
+msgid "capturing source"
+msgstr "felvétel forrása"
+
+msgid "The source or type of device used for the capture"
+msgstr "A felvételhez használt forrás vagy eszköz típusa"
+
+msgid "image horizontal ppi"
+msgstr "kép vízszintes ppi"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "A média (kép/videó) tervezett vízszintes képpontsűrűsége ppi-ben"
+
+msgid "image vertical ppi"
+msgstr "kép függőleges ppi"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "A média (kép/videó) tervezett függőleges képpontsűrűsége ppi-ben"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Ez a CD nem rendelkezik hangsávokkal"
+
+msgid "ID3 tag"
+msgstr "ID3 címke"
+
+msgid "APE tag"
+msgstr "APE címke"
+
+msgid "ICY internet radio"
+msgstr "ICY internetrádió"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple veszteségmentes hang (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Szabad veszteségmentes hangkodek (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Veszteségmentes valódi hang (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media beszéd"
+
+msgid "CYUV Lossless"
+msgstr "CYUV veszteségmentes"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Veszteségmentes MSZH"
+
+msgid "Run-length encoding"
+msgstr "Műsorhossz-kódolás"
+
+msgid "Sami subtitle format"
+msgstr "Sami feliratformátum"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer feliratformátum"
+
+msgid "Kate subtitle format"
+msgstr "Kate feliratformátum"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Tömörítetlen YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Tömörítetlen szürke kép"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Tömörítetlen YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Tömörítetlen, palettás %d bites %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 %d. verzió"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Tömörítetlen YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Nyers %d bites PCM hang"
+
+msgid "Audio CD source"
+msgstr "Hang CD forrás"
+
+msgid "DVD source"
+msgstr "DVD forrás"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Valósidejű adatfolyam-protokoll (RTSP) forrás"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) protokollforrás"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokollforrás"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s videó RTP dekódoló"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s hang RTP dekódoló"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP dekódoló"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s szétválasztó"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s dekódoló"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s videó RTP kódoló"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s hang RTP kódoló"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP kódoló"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s egyesítő"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s kódoló"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer elem: %s"
+
+msgid "Unknown source element"
+msgstr "Ismeretlen forráselem"
+
+msgid "Unknown sink element"
+msgstr "Ismeretlen nyelőelem"
+
+msgid "Unknown element"
+msgstr "Ismeretlen elem"
+
+msgid "Unknown decoder element"
+msgstr "Ismeretlen dekódolóelem"
+
+msgid "Unknown encoder element"
+msgstr "Ismeretlen kódolóelem"
+
+msgid "Plugin or element of unknown type"
+msgstr "Ismeretlen típusú bővítmény vagy elem"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Tömörítetlen síkbeli YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Tömörítetlen síkbeli YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Tömörítetlen pakolt YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Tömörítetlen pakolt YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Tömörítetlen pakolt YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Tömörítetlen pakolt YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Tömörítetlen pakolt YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Tömörítetlen síkbeli YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Tömörítetlen síkbeli YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Tömörítetlen fekete-fehér Y-sík"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Nyers PCM hang"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Nyers %d bites lebegőpontos hang"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Nyers lebegőpontos hang"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nem lehet írásra megnyitni a(z) „%s” vfs-fájlt: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nincs fájlnév megadva"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nem lehet bezárni a(z) „%s” vfs-fájlt."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Hiba a(z) „%s” fájl írása közben."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Érvénytelen felirat URI: „%s”, a feliratok letiltva."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Az RTSP adatfolyamok még nem játszhatók le."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nem hozható létre „decodebin” elem"
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Csak egy feliratfolyam észlelhető. Vagy egy feliratfájlt vagy más "
+#~ "szövegfájlt tölt be, vagy a médiafájl nem ismerhető fel."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Nincs telepítve a fájl kezeléséhez szükséges dekódoló. Lehetséges, hogy "
+#~ "telepítenie kell a szükséges bővítményeket."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Ez nem egy médiafájl"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Egy feliratfolyam felismerve, de nincs videofolyam."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Mind az autovideosink, mind az xvimagesink elemek hiányoznak."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Az autoaudiosink és az alsasink elem is hiányzik."
+
+#~ msgid "No device specified."
+#~ msgstr "Nincs megadva eszköz."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Az eszköz („%s”) nem létezik."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Az eszköz („%s”) már használatban van."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nem lehet olvasásra és írásra megnyitni az eszközt („%s”)."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Hiba a gdp fejlécadatok küldésekor a következőnek: „%s:%d”."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Hiba a gdp küldeményadatok elküldésekor a következőnek: „%s:%d”."
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..4c6778f
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..be978e9
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,635 @@
+# Indonesian translations for gst-plugins-base package.
+# This file is put in the public domain.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-04-26 22:01+0700\n"
+"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Utama"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Treble"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Jalur masuk"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "Pengeras Suara PC"
+
+msgid "Playback"
+msgstr "Putar kembali"
+
+msgid "Capture"
+msgstr "Tangkap"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Tak dapat membuka divais untuk putar kembali dalam mode mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Tak dapat membuka divais untuk putar kembali dalam mode stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Tak dapat membuka divais untuk putar kembali dalam mode %d-kanal."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Tak dapat membuka divais audio untuk putar kembali. Divais sedang digunakan "
+"oleh aplikasi lain."
+
+msgid "Could not open audio device for playback."
+msgstr "Tak dapat membuka divais audio untuk putar kembali."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Tak dapat membuka divais untuk merekam dalam mode mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Tak dapat membuka divais untuk merekam dalam mode stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Tak dapat membuka divais untuk merekam dalam mode %d-kanal"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Tak dapat membuka divais audio untuk merekam. Divais sedang digunakan oleh "
+"aplikasi lain."
+
+msgid "Could not open audio device for recording."
+msgstr "Tak dapat membuka divais audio untuk merekam."
+
+msgid "Could not open CD device for reading."
+msgstr "Tak dapat membuka divais CD untuk dibaca."
+
+msgid "Could not seek CD."
+msgstr "Tak dapat mencari CD."
+
+msgid "Could not read CD."
+msgstr "Tak dapat membaca CD."
+
+msgid "Internal data stream error."
+msgstr "Galat arus data internal."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Plugin %s dibutuhkan untuk memutar arus ini, tapi tidak diinstal."
+
+msgid "Could not determine type of stream"
+msgstr "Tak dapat menentukan tipe arus"
+
+msgid "This appears to be a text file"
+msgstr "Ini kelihatannya merupakan berkas teks"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Elemen '%s' hilang - cek instalasi GStreamer anda."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Baik elemen autovideosink maupun %s hilang."
+
+msgid "The autovideosink element is missing."
+msgstr "Elemen autovideosink hilang."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Videosink yang dikonfigurasi %s tidak bekerja."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Baik elemen autovideosink maupun %s tidak bekerja."
+
+msgid "The autovideosink element is not working."
+msgstr "Elemen autovideosink tidak bekerja."
+
+msgid "Custom text sink element is not usable."
+msgstr "Elemen teks tenggelam suai tak dapat digunakan."
+
+msgid "No volume control found"
+msgstr "Tak ada kontrol volume yang ditemukan"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Baik elemen autoaudiosink maupun %s hilang."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Elemen autoaudiosink hilang."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Audiosink yang dikonfigurasi %s tidak bekerja."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Baik elemen autoaudiosink maupun %s tidak bekerja."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Elemen autoaudiosink tidak bekerja."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Tak dapat memutar berkas teks tanpa video atau visualisasi."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Tak ada pengawasandi yang tersedia untuk tipe '%s'."
+
+msgid "No URI specified to play from."
+msgstr "Tak ada URI yang ditentukan untuk diputar."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "URI \"%s\" tidak sah."
+
+msgid "This stream type cannot be played yet."
+msgstr "Tipe arus ini belum dapat dimainkan."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Tak ada penanganan URI yang diimplementasikan untuk \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Elemen sumber tidak sah."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Galat ketika mengirim data ke \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Koneksi ke %s:%d ditolak."
+
+msgid "Can't record audio fast enough"
+msgstr "Tak dapat merekam audio cukup cepat"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Gagal membaca tanda: tak cukup data"
+
+msgid "track ID"
+msgstr "ID jalur"
+
+msgid "MusicBrainz track ID"
+msgstr "ID jalur MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID artis"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID artis MusicBrainz"
+
+msgid "album ID"
+msgstr "ID album"
+
+msgid "MusicBrainz album ID"
+msgstr "ID album MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID artis album"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID artis album MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID TRM jalur"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "CD ini tidak memiliki jalur audio"
+
+msgid "ID3 tag"
+msgstr "Tag ID3"
+
+msgid "APE tag"
+msgstr "Tag APE"
+
+msgid "ICY internet radio"
+msgstr "Radio internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "Penyandian sepanjang-jalan"
+
+msgid "Sami subtitle format"
+msgstr "Format subjudul Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Format subjudul TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Format subjudul Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV tak dikompresi"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Citra Abu-abu Tak Dikompres"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV tak dikompresi"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Terpalet dan tak dikompresi dari %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Versi %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV tak dikompresi"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Audio PCM %d-bita mentah"
+
+msgid "Audio CD source"
+msgstr "Sumber CD audio"
+
+msgid "DVD source"
+msgstr "Sumber DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Sumber Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Sumber protokol Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s sumber protokol"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video RTP depayloader"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audio RTP depayloader"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP depayloader"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s pengawasandi"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video RTP payloader"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audio RTP payloader"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s muxer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s penyandi"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Elemen GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Elemen sumber tak diketahui"
+
+msgid "Unknown sink element"
+msgstr "Elemen tenggelam tak diketahui"
+
+msgid "Unknown element"
+msgstr "Elemen tak diketahui"
+
+msgid "Unknown decoder element"
+msgstr "Elemen pengawasandi tak diketahui"
+
+msgid "Unknown encoder element"
+msgstr "Elemen penyandi tak diketahui"
+
+msgid "Plugin or element of unknown type"
+msgstr "Plugin atau elemen dari tipe yang tak diketahui"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Tak dapat membuka berkas vfs \"%s\" untuk ditulis: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Tak ada nama berkas yang diberikan"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Tak dapat menutup berkas vfs \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Galat ketika menulis ke berkas \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "URI subjudul \"%s\" tidak sah, subjudul dinonaktifkan."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Arus RTSP belum dapat dimainkan."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Tak dapat membuat elemen \"decodebin\""
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Hanya arus subjudul yang terdeteksi. Mungkin anda memuat berkas subjudul "
+#~ "atau tipe lain dari berkas teks, atau berkas media yang tidak dikenal."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Anda tidak memiliki pengawasandi terinstal untuk menangani berkas ini. "
+#~ "Anda mungkin harus menginstal plugin yang diperlukan."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Ini bukan berkas media"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Arus subjudul terdeteksi, tapi bukan arus video."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Baik elemen autovideosink maupun xvimagesink hilang."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Baik elemen autoaudiosink maupun alsasink hilang."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Galat ketika mengirim data tajuk gdp ke \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Galat ketika mengirim data pemuat gdp ke \"%s:%d\"."
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 planar tak dikompresi"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YVU 4:2:0 planar tak dikompresi"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 terkemas tak dikompresi"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 terkemas tak dikompresi"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU 4:1:0 terkemas tak dikompresi"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 terkemas tak dikompresi"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 terkemas tak dikompresi"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 planar tak dikompresi"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 planar tak dikompresi"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Y-plane hitam dan putih tak dikompresi"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Audio PCM mentah"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio titik-apung %d-bita mentah"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio titik-apung mentah"
+
+#~ msgid "No device specified."
+#~ msgstr "Tak ada divais yang ditentukan."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Divais \"%s\" tak ada."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Divais \"%s\" telah digunakan."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Tak dapat membuka divaus \"%s\" untuk dibaca dan ditulis."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Tak dapat menampilkan baik teks subjudul dan subgambar."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Tak ada direktori Temp yang ditentukan."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Tak dapat membuat berkas temp \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Tak dapat membuka berkas \"%s\" untuk dibaca."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Galat arus data internal."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Tak dapat membuat elemen \"decodebin2\"."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Tak dapat membuat elemen \"queue2\"."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Tak dapat membuat elemen \"typefind\"."
+
+#~ msgid "No file name specified."
+#~ msgstr "Tak ada nama berkas yang ditentukan."
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..17a0fac
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..0f195fd
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,638 @@
+# Italian translation for gst-plugins-base package of GStreamer project.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 GStreamer team
+# This file is distributed under the same license as the gst-plugins-base package.
+# Luca Ferretti <elle.uca@infinito.it>, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-04-28 14:27+0200\n"
+"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Principale"
+
+msgid "Bass"
+msgstr "Bassi"
+
+msgid "Treble"
+msgstr "Acuti"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetiz"
+
+msgid "Line-in"
+msgstr "Linea in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Microfono"
+
+msgid "PC Speaker"
+msgstr "Altoparlanti PC"
+
+msgid "Playback"
+msgstr "Riproduzione"
+
+msgid "Capture"
+msgstr "Cattura"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Impossibile aprire il device per la riproduzione in modalità mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Impossibile aprire il device per la riproduzione in modalità stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+"Impossibile aprire il device per la riproduzione in modalità %d-canali."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Impossibile aprire il device audio per la riproduzione. Il device è "
+"utilizzato da un'altra applicazione."
+
+msgid "Could not open audio device for playback."
+msgstr "Impossibile aprire il device audio per la riproduzione."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Impossibile aprire il device per la registrazione in modalità mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Impossibile aprire il device per la registrazione in modalità stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr ""
+"Impossibile aprire il device per la registrazione in modalità %d-canali."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Impossibile aprire il device audio per la registrazione. Il device è "
+"utilizzato da un'altra applicazione."
+
+msgid "Could not open audio device for recording."
+msgstr "Impossibile aprire il device audio per la registrazione."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossibile aprire il device CD in lettura."
+
+# seek --> posizionamento (come in glib/gio)
+msgid "Could not seek CD."
+msgstr "Impossibile effettuare il posizionamento nel CD."
+
+msgid "Could not read CD."
+msgstr "Impossibile leggere il CD."
+
+msgid "Internal data stream error."
+msgstr "Errore interno nel flusso di dati."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Per riprodurre questo stream è richiesto un plugin %s, che però non risulta "
+"installato. "
+
+msgid "Could not determine type of stream"
+msgstr "Impossibile determinare il tipo di stream"
+
+msgid "This appears to be a text file"
+msgstr "Questo sembra essere un file di testo"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+"Risulta mancante l'elemento «%s» - verificare la propria installazione di "
+"GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Risultano mancanti entrambi gli elementi «autovideosink» e «%s»."
+
+msgid "The autovideosink element is missing."
+msgstr "Risulta mancante l'elemento «autovideosink»."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "L'elemento videosink «%s» non è operativo."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Entrambi gli elementi «autovideosink» e «%s» non sono operativi."
+
+msgid "The autovideosink element is not working."
+msgstr "L'elemento «autovideosink» non è operativo."
+
+msgid "Custom text sink element is not usable."
+msgstr "L'elemento sink di testo personalizzato non è utilizzabile."
+
+msgid "No volume control found"
+msgstr "Non è stato trovato alcun controllo del volume"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Risultano mancanti entrambi gli elementi «autoaudiosink» e «%s»."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Risulta mancante l'elemento «autoaudiosink»."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "L'elemento audiosink «%s» non è operativo."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Entrambi gli elementi «autoaudiosink» e «%s» non sono operativi."
+
+msgid "The autoaudiosink element is not working."
+msgstr "L'elemento «autoaudiosink» non è operativo."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Impossibile riprodurre un file di testo senza video o visualizzazioni."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Nessun decoder disponibile per il tipo «%s»."
+
+msgid "No URI specified to play from."
+msgstr "Non è stato specificato alcun URI da cui riprodurre."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "URI «%s» non valido."
+
+msgid "This stream type cannot be played yet."
+msgstr "Non è ancora possibile riprodurre questo tipo di stream."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nessun gestore di URI implementato per «%s»."
+
+msgid "Source element is invalid."
+msgstr "L'elemento sorgente non è valido."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Errore durante l'invio dei dati a \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Connessione a %s:%d rifiutata."
+
+# una parafrasi, ma mi pare non perda...  -Luca
+msgid "Can't record audio fast enough"
+msgstr "Impossibile registrare l'audio a velocità adeguata"
+
+# dati non sufficienti... mah
+msgid "Failed to read tag: not enough data"
+msgstr "Lettura del tag non riuscita: non abbastanza dati"
+
+msgid "track ID"
+msgstr "ID traccia"
+
+msgid "MusicBrainz track ID"
+msgstr "ID MusicBrainz della traccia"
+
+msgid "artist ID"
+msgstr "ID artista"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID MusicBrainz dell'artista"
+
+msgid "album ID"
+msgstr "ID album"
+
+msgid "MusicBrainz album ID"
+msgstr "ID MusicBrainz dell'album"
+
+msgid "album artist ID"
+msgstr "ID artista dell'album"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID MusicBrainz dell'artista dell'album"
+
+msgid "track TRM ID"
+msgstr "ID TRM della traccia"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID MusicBrainz del TRM"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Questo CD non presenta alcuna traccia audio"
+
+msgid "ID3 tag"
+msgstr "Tag ID3"
+
+msgid "APE tag"
+msgstr "Tag APE"
+
+msgid "ICY internet radio"
+msgstr "Radio internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "ALAC (Apple Lossless Audio)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "FLAC (Free Lossless Audio Codec)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "TTA (Lossless True Audio)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV senza perdita"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH senza perdita"
+
+# cfr http://en.wikipedia.org/wiki/Run_length_encoding
+msgid "Run-length encoding"
+msgstr "RLE (Run-Length Encoding)"
+
+# grazie San Google
+msgid "Sami subtitle format"
+msgstr "Sottotitoli formato SAMI"
+
+msgid "TMPlayer subtitle format"
+msgstr "Sottotitoli formato TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Sottotitoli formato Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV non compresso"
+
+# non ho trovato info utili...
+# Copiato il messaggio originale solo per arrivare a 100 per cento
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Uncompressed Gray Image"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV non compresso"
+
+# %s è qualcosa come gli YUV dei precedenti
+#
+# Non so perché, ma senza X$ non lo dava buono....
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "%2$s %1$d-bit con tavolozza non compresso"
+
+# o MPEG-4 DivX ?
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versione %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV non compresso"
+
+# o audio grezzo ?
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Audio raw PCM %d-bit"
+
+msgid "Audio CD source"
+msgstr "Sorgente CD audio"
+
+msgid "DVD source"
+msgstr "Sorgente DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Sorgente RTSP (Real Time Streaming Protocol)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Sorgente protocollo MMS (Microsoft Media Server)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Sorgente protocollo %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Depayloader RTP %s video"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Depayloader RTP %s audio"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Depayloader RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demuxer %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Decoder %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Payloader RTP %s video"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Payloader RTP %s audio"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Payloader RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Muxer %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Encoder %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Elemento GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Elemento sorgente sconosciuto"
+
+msgid "Unknown sink element"
+msgstr "Elemento sink sconosciuto"
+
+msgid "Unknown element"
+msgstr "Elemento sconosciuto"
+
+msgid "Unknown decoder element"
+msgstr "Elemendo di decodifica sconosciuto"
+
+msgid "Unknown encoder element"
+msgstr "Elemento di codifica sconosciuto"
+
+msgid "Plugin or element of unknown type"
+msgstr "Plugin o elemento di tipo sconosciuto"
+
+# cfr http://en.wikipedia.org/wiki/YUV
+#     http://support.microsoft.com/kb/281188/it
+#     http://support.microsoft.com/kb/294880/it (traduz automatica) :-(
+#     http://www.benis.it/dvd/agg3.htm
+#
+# Dal secondo e terzo, evinco YUV compresso o planare sarebbero
+# buone abbreviazioni, ma tengo planare/packed + compresso/noncompresso
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 planare non compresso"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YVU 4:2:0 planare non compresso"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 packed non compresso"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 packed non compresso"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU 4:1:0 packed non compresso"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 packed non compresso"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 packed non compresso"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 planare non compresso"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 planare non compresso"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Bianco e nero Y-plane non compresso"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Audio raw PCM"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio raw floating-point %d-bit"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio raw floating-point"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Impossibile aprire il file vfs «%s» in scrittura: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nessun nome di file fornito"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Impossibile chiudere il file vfs «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Errore durante la scrittura sul file «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "URI dei sottotitoli «%s» non valido, sottotitoli disabilitati."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Non è ancora possibile riprodurre gli stream RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Impossibile creare l'elemento «decodebin»."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "È stato rilevato unicamente uno stream di sottotitoli. Ciò significa che "
+#~ "si sta caricando un file di sottotitoli o un altro tipo di file di testo, "
+#~ "oppure che il file multimediale non è stato riconosciuto."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Non risulta installato alcun decoder in grado di gestire questo file. "
+#~ "Potrebbe essere necessario installare gli opportuni plugin."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Questo non è un file multimediale"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr ""
+#~ "È stato rilevato uno stream di sottotitoli, ma nessuno stream video."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr ""
+#~ "Risultano mancanti entrambi gli elementi «autovideosink» e «xvimagesink»."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr ""
+#~ "Risultano mancanti entrambi gli elementi «autoaudiosink» e «alsasink»."
+
+#~ msgid "No device specified."
+#~ msgstr "Nessun device specificato."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Il device «%s» non esiste."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Il device «%s» è già in uso."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Impossibile aprire il device «%s» in lettura e scrittura."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Errore durante l'invio di dati header gdp a \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Errore durante l'invio di dati payload gdp a \"%s:%d\"."
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..7fb8495
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..bf0a2ed
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,629 @@
+# Japanese translation of gst-plugins-base
+# This file is put in the public domain.
+#
+# Makoto Kato <makoto.kt@gmail.com>, 2009-2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-10-25 10:27+0900\n"
+"Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "Master"
+msgstr "マスター"
+
+msgid "Bass"
+msgstr "低音"
+
+msgid "Treble"
+msgstr "高音"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "シンセ"
+
+msgid "Line-in"
+msgstr "ライン入力"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "マイクロフォン"
+
+msgid "PC Speaker"
+msgstr "PCスピーカー"
+
+msgid "Playback"
+msgstr "再生"
+
+msgid "Capture"
+msgstr "キャプチャ"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "モノラルモードで再生用にデバイスをオープンできませんでした"
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "ステレオモードで再生用にデバイスをオープンできませんでした"
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "%d チャンネルモードで再生用にデバイスを開くことができませんでした"
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"再生用にオーディオデバイスを開くことができませんでした。デバイスは他のアプリ"
+"ケーションで利用されています"
+
+msgid "Could not open audio device for playback."
+msgstr "再生用にオーティオデバイスを開くことができませんでした"
+
+msgid "Could not open device for recording in mono mode."
+msgstr "モノラルモードで録音用にデバイスを開くことができませんでした"
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "ステレオモードで録音用にデバイスを開くことができませんでした"
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "%d チャンネルモードで録音用にデバイスを開くことができませんでした"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"録音用にオーディオデバイスを開くことができませんでした。デバイスは他のアプリ"
+"ケーションで利用されています"
+
+msgid "Could not open audio device for recording."
+msgstr "録音用にオーディオデバイスを開くことができませんでした"
+
+msgid "Could not open CD device for reading."
+msgstr "読み込み用に CD デバイスを開くことができませんでした"
+
+msgid "Could not seek CD."
+msgstr "CDをシークすることができませんでした"
+
+msgid "Could not read CD."
+msgstr "CD を読むことができませんでした"
+
+msgid "Internal data stream error."
+msgstr "内部データストリームエラー"
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"%s プラグインはこのストリームを再生するのに必要ですが、インストールされていま"
+"せん"
+
+msgid "Could not determine type of stream"
+msgstr "ストリームの種類を判別できませんでした"
+
+msgid "This appears to be a text file"
+msgstr "これはテキストファイルのようです"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+"エレメント '%s' が見つかりません - GStreamer のインストールが失敗している可能"
+"性があります"
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "autovideosinkと%sエレメントの両方が見つかりません。"
+
+msgid "The autovideosink element is missing."
+msgstr "autovideosinkエレメントが見つかりません。"
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "設定された videosink %s が動作していません。"
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "autovideosinkと%sエレメントの両方が動作していません。"
+
+msgid "The autovideosink element is not working."
+msgstr "autovideosinkエレメントが動作していません。"
+
+msgid "Custom text sink element is not usable."
+msgstr "カスタムテキストシンクエレメントは使用できません。"
+
+msgid "No volume control found"
+msgstr "ボリュームコントロールが見つかりません"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "autoaudiosinkと%sエレメントの両方が見つかりません。"
+
+msgid "The autoaudiosink element is missing."
+msgstr "autoaudiosinkエレメントが見つかりません。"
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "設定された autoaudiosink %s が動作していません。"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "autoaudiosinkと%sエレメントの両方が動作していません。"
+
+msgid "The autoaudiosink element is not working."
+msgstr "autoaudiosinkエレメントが動作していません。"
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "ビデオまたは視覚化なしでテキストファイルを再生できません。"
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "タイプ '%s' 用のデコーダーが利用可能ではありません。"
+
+msgid "No URI specified to play from."
+msgstr "再生するURIが指定されていません"
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "不正な URI \"%s\""
+
+msgid "This stream type cannot be played yet."
+msgstr "このストリームタイプをまだ再生することはできません"
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "\"%s\" 用の URI ハンドラの実装はありません"
+
+msgid "Source element is invalid."
+msgstr "ソースエレメントが不正です。"
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "データを \"%s:%d\" へ送信中にエラーが発生しました"
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "%s:%d への接続が拒否されました"
+
+msgid "Can't record audio fast enough"
+msgstr "十分に速くオーディオを録音することができません"
+
+msgid "Failed to read tag: not enough data"
+msgstr "タグの読み込みに失敗しました: データが十分にありません"
+
+msgid "track ID"
+msgstr "トラック ID"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz トラック ID"
+
+msgid "artist ID"
+msgstr "アーティスト ID"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz アーティスト ID"
+
+msgid "album ID"
+msgstr "アルバム ID"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz アルバム ID"
+
+msgid "album artist ID"
+msgstr "アルバムアーティスト ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz アルバムアーティスト ID"
+
+msgid "track TRM ID"
+msgstr "トラック TRM ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr "キャプチャーのシャッタースピード"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "イメージをキャプチャするときに使われるシャッタースピード (秒)"
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "キャプチャーの彩度"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "イメージをキャプチャするときのホワイトバランスモードセット"
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr "キャプチャーのホワイトバランス"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "イメージをキャプチャするときのホワイトバランスモードセット"
+
+msgid "capturing contrast"
+msgstr "キャプチャーのコントラスト"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr "キャプチャーの彩度"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr "キャプチャーのシャープネス"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr "キャプチャーのソース"
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "この CD にはオーディオトラックがありません"
+
+msgid "ID3 tag"
+msgstr "ID3 タグ"
+
+msgid "APE tag"
+msgstr "APE タグ"
+
+msgid "ICY internet radio"
+msgstr "ICY インターネットラジオ"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "ロスレス True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV ロスレス"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "ロスレス MSZH"
+
+msgid "Run-length encoding"
+msgstr "ランレングス符号化"
+
+msgid "Sami subtitle format"
+msgstr "Sami 字幕形式"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer 字幕形式"
+
+msgid "Kate subtitle format"
+msgstr "Kate 字幕形式"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "非圧縮 YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "非圧縮グレーイメージ"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "非圧縮 YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "非圧縮 palettized %d ビット %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 バージョン %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "非圧縮 YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Raw %d ビット PCM オーディオ"
+
+msgid "Audio CD source"
+msgstr "オーディオ CD ソース"
+
+msgid "DVD source"
+msgstr "DVD ソース"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol (RTSP) ソース"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) プロトコルソース"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s プロトコルソース"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s ビデオ RTP デペイローダー"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s オーディオ RTP デペイローダー"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP デペイローダー"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s デコーダー"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s ビデオ RTP ペイローダー"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s オーディオ RTP ペイローダー"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP ペイローダー"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s ミキサー"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s エンコーダー"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer エレメント %s"
+
+msgid "Unknown source element"
+msgstr "不明なソースエレメント"
+
+msgid "Unknown sink element"
+msgstr "不明なシンクエレメント"
+
+msgid "Unknown element"
+msgstr "不明なエレメント"
+
+msgid "Unknown decoder element"
+msgstr "不明なデコーダーエレメント"
+
+msgid "Unknown encoder element"
+msgstr "不明なエンコーダーエレメント"
+
+msgid "Plugin or element of unknown type"
+msgstr "不明な種類のプラグインまたはエレメント"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "非圧縮 planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "非圧縮 planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "非圧縮 packed YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "非圧縮 packed YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "非圧縮 packed YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "非圧縮 packed YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "非圧縮 packed YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "非圧縮 planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "非圧縮 planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "非圧縮黒と白Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Raw PCM オーディオ"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Raw %d ビット浮動小数点オーディオ"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Raw 浮動小数点オーディオ"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "書き込み用に vfs ファイル \"%s\" を開くことができませんでした: %s"
+
+#~ msgid "No filename given"
+#~ msgstr "ファイル名が与えられていません"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "vfs ファイル \"%s\" をクローズできませんでした"
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "ファイル \"%s\" の書き込み中にエラーが発生しました"
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "不正な字幕 URI \"%s\"。字幕を無効にします。"
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP ストリームをまだ再生できません"
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "\"decodebin\" エレメントを作成できません。"
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "字幕ストリームのみを認識しました。字幕ファイルかテキストファイルをロード中"
+#~ "か、メディアファイルが認識されないのかどちらかです。"
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "このファイルを扱うことができるデコーダがインストールされていません。必要な"
+#~ "プラグインをインストールする必要があるかもしれません"
+
+#~ msgid "This is not a media file"
+#~ msgstr "これはメディアファイルではありません"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "字幕のストリームを認識しましたが、動画ストリームがありません"
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "autovideosinkとxvimagesinkエレメントの両方が見つかりません。"
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "autovideosinkとalsasinkエレメントの両方が見つかりません。"
+
+#~ msgid "No device specified."
+#~ msgstr "デバイスが指定されていません。"
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "デバイス \"%s\" は存在しません。"
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "デバイス \"%s\" は既に使われています。"
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr ""
+#~ "読み込み用と書き込み用にデバイス \"%s\" を開くことができませんでした。"
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "gdp ヘッダデータを \"%s:%d\" へ送信中にエラーが発生しました"
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "gdp ペイロードデータを \"%s:%d\" へ送信中にエラーが発生しました"
+
+#~ msgid "No file name specified."
+#~ msgstr "ファイル名が指定されていません"
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "読み込み用にファイル \"%s\" を開くことができませんでした"
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "\"decodebin2\" エレメントを作成できませんでした"
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "\"queue2\" エレメントを作成できませんでした"
diff --git a/po/lt.gmo b/po/lt.gmo
new file mode 100644
index 0000000..02ea200
--- /dev/null
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..d0b82e1
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,646 @@
+# translation of lt.gst-plugins-base.HEAD.po to Lithuanian
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+#
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base-0.10.15.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2008-03-07 23:43+0200\n"
+"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgid "Master"
+msgstr "Pagrindinis"
+
+msgid "Bass"
+msgstr "Žemi dažniai"
+
+msgid "Treble"
+msgstr "Aukšti dažniai"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintezatorius"
+
+msgid "Line-in"
+msgstr "Įvedimas"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofonas"
+
+msgid "PC Speaker"
+msgstr "PC garsiakalbis"
+
+msgid "Playback"
+msgstr "Grojimas"
+
+msgid "Capture"
+msgstr "Įrašymas"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nepavyko atverti įrenginio monofoniniam grojimui."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nepavyko atverti įrenginio stereofoniniam grojimui."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Nepavyko atverti įrenginio %d kanalų grojimui."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nepavyko atverti audio įrenginio grojimui. Įrenginys naudojamas kitos "
+"programos."
+
+msgid "Could not open audio device for playback."
+msgstr "Nepavyko atverti audio įrenginio grojimui."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nepavyko atverti įrenginio monofoniniam įrašymui."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Nepavyko atverti įrenginio stereofoniniam įrašymui."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Nepavyko atverti įrenginio %d kanalų įrašymui"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nepavyko atverti audio įrenginio įrašymui. Įrenginys naudojamas kitos "
+"programos."
+
+msgid "Could not open audio device for recording."
+msgstr "Nepavyko atverti audio įrenginio įrašymui."
+
+msgid "Could not open CD device for reading."
+msgstr "Nepavyko atverti CD įrenginio skaitymui."
+
+msgid "Could not seek CD."
+msgstr "Nepavyko pakeisti pozicijos CD."
+
+msgid "Could not read CD."
+msgstr "Nepavyko perskaityti CD."
+
+msgid "Internal data stream error."
+msgstr "Vidinė duomenų srauto klaida."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Šiam srautui groti reikalingas %s įskiepis, bet jis nėra įdiegtas."
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "Nepavyko sukurti „decodebin“ elemento."
+
+msgid "This appears to be a text file"
+msgstr "Atrodo, kad šis failas tekstinis"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Trūksta elemento „%s“ - patikrinkite GStreamer įdiegimą."
+
+#, fuzzy, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+#, fuzzy
+msgid "The autovideosink element is missing."
+msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+#, fuzzy, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+#, fuzzy, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+#, fuzzy
+msgid "The autovideosink element is not working."
+msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+#, fuzzy
+msgid "The autoaudiosink element is missing."
+msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+#, fuzzy, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+#, fuzzy, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+#, fuzzy
+msgid "The autoaudiosink element is not working."
+msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Tipui „%s“ dekoderių nerasta."
+
+msgid "No URI specified to play from."
+msgstr "Nenurodytas URI, iš kurio groti."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Netaisyklingas URI „%s“."
+
+msgid "This stream type cannot be played yet."
+msgstr "Šis srautas dar negali būti rodomas."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nėra URI valdyklės „%s“."
+
+msgid "Source element is invalid."
+msgstr "Šaltinio elementas nekorektiškas."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Klaida siunčiant duomenis į „%s:%d“."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Prisijungimas prie %s:%d atmestas."
+
+msgid "Can't record audio fast enough"
+msgstr "Nepakankamai greitai įrašomas garsas"
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr "takelio ID"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz takelio ID"
+
+msgid "artist ID"
+msgstr "atlikėjo ID"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz atlikėjo ID"
+
+msgid "album ID"
+msgstr "albumo ID"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz albumo ID"
+
+msgid "album artist ID"
+msgstr "albumo atlikėjo ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albumo atlikėjo ID"
+
+msgid "track TRM ID"
+msgstr "takelio TRM ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Šiame CD nėra audio takelių"
+
+msgid "ID3 tag"
+msgstr "ID3 žymė"
+
+msgid "APE tag"
+msgstr "APE žymė"
+
+msgid "ICY internet radio"
+msgstr "ICY interneto radijas"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "Eilės ilgio kodavimas (RLE)"
+
+msgid "Sami subtitle format"
+msgstr "Sami titrų formatas"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer titrų formatas"
+
+#, fuzzy
+msgid "Kate subtitle format"
+msgstr "Sami titrų formatas"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nekompresuotas YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Nesuspaustas bespalvis paveikslas"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nekompresuotas YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nekompresuotas paletizuotas %d bitų %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versija %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nekompresuotas YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Neapdorotas %d bitų PCM garsas"
+
+msgid "Audio CD source"
+msgstr "Audio CD šaltinis"
+
+msgid "DVD source"
+msgstr "DVD šaltinis"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Realaus laiko srautų protokolo (RTSP) šaltinis"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) protokolo šaltinis"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokolo šaltinis"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video RTP depayloader'is"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audio RTP depayloader'is"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP depayloader'is"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demukseris"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s dekoderis"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video RTP payloader'is"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audio RTP payloader'is"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP payloader'is"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s mukseris"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s enkoderis"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer elementas %s"
+
+msgid "Unknown source element"
+msgstr "Nežinomas šaltinio elementas"
+
+msgid "Unknown sink element"
+msgstr "Nežinomas paskirties elementas"
+
+msgid "Unknown element"
+msgstr "Nežinomas elementas"
+
+msgid "Unknown decoder element"
+msgstr "Nežinomas dekodavimo elementas"
+
+msgid "Unknown encoder element"
+msgstr "Nežinomas kodavimo elementas"
+
+msgid "Plugin or element of unknown type"
+msgstr "Nežinomo tipo įskiepis ar elementas"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nekompresuotas planarinis YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nekompresuotas planarinis YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nekompresuotas planarinis YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nekompresuotas planarinis YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nekompresuotas planarinis YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nekompresuotas planarinis YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nekompresuotas planarinis YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nekompresuotas planarinis YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nekompresuotas planarinis YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nekompresuota juodai balta Y plokštuma"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Neapdorotas PCM garsas"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Neapdorotas %d bitų slankaus kablelio garsas"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Neapdorotas slankaus kablelio garsas"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nepavyko atverti vfs failo „%s“ rašymui: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nenurodytas failo vardas"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nepavyko užverti vfs failo „%s“."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Klaida rašant į failą „%s“."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Netaisyklingas titrų URI „%s“, titrai išjungti."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP srautai dar negali būti rodomi."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nepavyko sukurti „decodebin“ elemento."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Rastas tik subtitrų srautas. Arba bandote įkelti subtitrų failą ar kitokį "
+#~ "tekstinį failą, arba failas nebuvo teisingai atpažintas."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Neturite dekoderio, reikalingo šiam failui rodyti. Gali prireikti įdiegti "
+#~ "reikalingus įskiepius."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Tai nėra medijos failas"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Rastas titrų srautas, bet be video srauto."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Trūksta ir autovideosink, ir xvimagesink elementų."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Trūksta ir autoaudiosink, ir alsasink elementų."
+
+#~ msgid "No device specified."
+#~ msgstr "Nenurodytas įrenginys."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Įrenginys „%s“ neegzistuoja."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Įrenginys „%s“ jau naudojamas."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nepavyko atverti įrenginio „%s“ skaitymui ir rašymui."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Klaida siunčiant gdp antraštės duomenis į \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Klaida siunčiant gdp duomenis į „%s:%d“."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Nepavyko sukurti „decodebin2“ elemento."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Nepavyko sukurti „queue2“ elemento."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Nepavyko sukurti „decodebin“ elemento."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Nenurodytas įrenginys."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Nepavyko užverti vfs failo „%s“."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Nepavyko atverti failo „%s“ rašymui."
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
+#~ msgid "No file name specified."
+#~ msgstr "Nenurodytas failo vardas."
diff --git a/po/lv.gmo b/po/lv.gmo
new file mode 100644
index 0000000..622b9f8
--- /dev/null
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 0000000..a1b218f
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,634 @@
+# Latvian translation of gst-plugins-base
+# This file is put in the public domain.
+#
+# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
+# Rihards Priedītis <rprieditis@gmail.com>, 2010.
+# Rihards Priedītis <rprieditis@gmail.com>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-09-02 12:02-0000\n"
+"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
+"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Latvian\n"
+"X-Poedit-Country: LATVIA\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Lokalize 1.0\n"
+
+msgid "Master"
+msgstr "Galvenais"
+
+msgid "Bass"
+msgstr "Bass"
+
+msgid "Treble"
+msgstr "Diskants"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintēze"
+
+msgid "Line-in"
+msgstr "Line-in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofons"
+
+msgid "PC Speaker"
+msgstr "Datora skaļrunis"
+
+msgid "Playback"
+msgstr "Atskaņošana"
+
+msgid "Capture"
+msgstr "Tveršana"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nevarēja atvērt ierīci atskaņošanai mono režīmā."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nevarēja atvērt ierīci atskaņošanai stereo režīmā."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Nevarēja atvērt ierīci atskaņošanai %d-kanāla režīmā."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nevarēja atvērt audio ierīci atskaņošanai. Ierīci pašlaik izmanto cita "
+"lietotne."
+
+msgid "Could not open audio device for playback."
+msgstr "Nevarēja atvērt audio ierīci atskaņošanai."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nevarēja atvērt ierīci ierakstīšanai mono režīmā."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Nevarēja atvērt ierīci ierakstīšanai stereo režīmā."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Nevarēja atvērt ierīci ierakstīšanai %d-kanāla režīmā"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nevarēja atvērt audio ierīci ierakstīšanai. Ierīci pašlaik izmanto cita "
+"lietotne."
+
+msgid "Could not open audio device for recording."
+msgstr "Nevarēja atvērt audio ierīci ierakstīšanai."
+
+msgid "Could not open CD device for reading."
+msgstr "Nevarēja atvērt CD ierīci lasīšanai."
+
+msgid "Could not seek CD."
+msgstr "Nevarēja meklēt pa CD."
+
+msgid "Could not read CD."
+msgstr "Nevarēja nolasīt CD."
+
+msgid "Internal data stream error."
+msgstr "Iekšējās datu plūsmas kļūda."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Nepieciešamas %s spraudnis, lai atskaņotu šo plūsmu, bet tas nav instalēts."
+
+msgid "Could not determine type of stream"
+msgstr "Nevarēja noteikts straumes tipu"
+
+msgid "This appears to be a text file"
+msgstr "Tiek atpazīts kā teksta fails"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Trūkst elements \"%s\" - pārbaudiet savu GStreamer instalāciju."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Trūkst gan autovideosink, gan %s elementi."
+
+msgid "The autovideosink element is missing."
+msgstr "Trūkst autovideosink elements."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Konfigurētais videosink %s nestrādā."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Gan autovideosink, gan %s elementi nedarbojas."
+
+msgid "The autovideosink element is not working."
+msgstr "autovideosink elements nedarbojas."
+
+msgid "Custom text sink element is not usable."
+msgstr "Pielāgots teksta iegremdēšanas elements nav lietojams."
+
+msgid "No volume control found"
+msgstr "Netika atrasta neviena skaļuma kontrole"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Trūkst gan autoaudiosink, gan %s elementi."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Trūkst autoaudiosink elements."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Konfigurētais audiosink %s nestrādā."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Nedarbojas autoaudiosink un %s elementi."
+
+msgid "The autoaudiosink element is not working."
+msgstr "autoaudiosink elements nedarbojas."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Nevar atskaņot teksta failu bez video vai vizualizācijas."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Nav pieejams neviens atkodētājs failu veidam \"%s\"."
+
+msgid "No URI specified to play from."
+msgstr "Nav norādīts neviens URI, no kā varētu spēlēt. "
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Nederīgs URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Šī plūsma pagaidām nevar tikt atskaņota."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nav izstrādāts neviens URI apstrādātājs priekš \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Avota elements ir nederīgs."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Radās kļūda nosūtot datus uz \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Savienojums ar %s:%d noraidīts."
+
+msgid "Can't record audio fast enough"
+msgstr "Nevar ierakstīt audio pietiekami ātri"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Neizdevās nolasīt atzīmi: nepietiek datu"
+
+msgid "track ID"
+msgstr "celiņa ID"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz celiņa ID"
+
+msgid "artist ID"
+msgstr "izpildītāja ID"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz izpildītāja ID"
+
+msgid "album ID"
+msgstr "albuma ID"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz albuma ID"
+
+msgid "album artist ID"
+msgstr "albuma izpildītāja ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albuma izpildītāja ID"
+
+msgid "track TRM ID"
+msgstr "celiņa TRM ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr "Tveršanā aizvara ātrums"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Attēla tveršanā izmantotais aizvara ātrums sekundēs"
+
+msgid "capturing focal ratio"
+msgstr "tveršanā fokusa attiecība"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Attēla tveršanā izmantotā fokusa attiecība (f-cipars)"
+
+msgid "capturing focal length"
+msgstr "tveršanā fokusa attālums"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Attēla tveršanā izmantotā lēcas fokusa attālums milimetros"
+
+msgid "capturing digital zoom ratio"
+msgstr "tveršanā digitālais tālummaiņas attiecība"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Attēla tveršanā izmantotais digitālās tālummaiņas attiecība"
+
+msgid "capturing iso speed"
+msgstr "tveršanā iso ātrums"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Attēla tveršanā izmantotais ISO ātrums"
+
+msgid "capturing exposure program"
+msgstr "tveršanā atseguma programma"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Attēla tveršanā izmantotā atseguma programma"
+
+msgid "capturing exposure mode"
+msgstr "tveršanā atseguma režīms"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Attēla tveršanā izmantotais atseguma režīms"
+
+msgid "capturing exposure compensation"
+msgstr "tveršanā atseguma kompensācija"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Attēla tveršanā izmantotais atseguma kompensācija"
+
+msgid "capturing scene capture type"
+msgstr "tveršanā ainas tveršanas tips"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Attēla tveršanā izmantotas ainas tveršanas režīms"
+
+msgid "capturing gain adjustment"
+msgstr "tveršanā pieaguma korekcija"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Attēla tveršanā izmantotais vispārējā pieauguma korekcija"
+
+msgid "capturing white balance"
+msgstr "tveršanas baltais balanss"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Lietotais baltais balanss virziens attēla tveršanā"
+
+msgid "capturing contrast"
+msgstr "tveršanā kontrasts"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Lietotais kontrasts virziens attēla tveršanā"
+
+msgid "capturing saturation"
+msgstr "tveršanā piesātinājums"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Lietotais piesātinājuma virziens attēla tveršanā"
+
+msgid "capturing sharpness"
+msgstr "tveršanā asumss"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Lietotais asuma virziens attēla tveršanā"
+
+msgid "capturing flash fired"
+msgstr "tveršanā zibsnis palaists"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Ja zibsnis palaists attēla tveršanā"
+
+msgid "capturing flash mode"
+msgstr "tveršanā zibšņa režīms"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Atlasītais zibšņa režīms priekš attēla tveršanas"
+
+msgid "capturing metering mode"
+msgstr "tveršanā mērīšanas režīms"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Mērīšanas režīms, lai noteiktu atsegumu attēla tveršanai"
+
+msgid "capturing source"
+msgstr "tveršanā avots"
+
+msgid "The source or type of device used for the capture"
+msgstr "Tveršanas avots vai iekārtas tips"
+
+msgid "image horizontal ppi"
+msgstr "attēla horizontālais ppi"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Medija (attēls/video) domātā horizontālā pikseļu blīvums ppi"
+
+msgid "image vertical ppi"
+msgstr "attēla vertikālais ppi"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Medija (attēls/video) domātā vertikālā pikseļu blīvums ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Šajā CD nav neviena audio celiņa"
+
+msgid "ID3 tag"
+msgstr "ID3 atzīme"
+
+msgid "APE tag"
+msgstr "APE atzīme"
+
+msgid "ICY internet radio"
+msgstr "ICY interneta radio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Bez zudumu True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows mediju runa"
+
+msgid "CYUV Lossless"
+msgstr "CYUV bez zudumu"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Bez zudumu MSZH"
+
+msgid "Run-length encoding"
+msgstr "Sērijas garuma kodēšana"
+
+msgid "Sami subtitle format"
+msgstr "Sami subtitru formāts"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer subtitru formāts"
+
+msgid "Kate subtitle format"
+msgstr "Kate subtitru formāts"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nesaspiests YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Neatspiests Pelēks attēls"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nesaspiests YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nesaspiests paletizēts %d-bitu %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versija %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nesaspiests YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Jēls %d-bitu PCM audio"
+
+msgid "Audio CD source"
+msgstr "Audio CD avots"
+
+msgid "DVD source"
+msgstr "DVD avots"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Tiešās straumēšanas protokola (RTSP) avots"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Mediju Servera (MMS) protokola avots"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokola avots"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video RTP izkrāvējs"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audio RTP izskrāvējs"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP izkrāvējs"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s atjaucējs"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s atkodētājs"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video RTP iekrāvējs"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audio RTP iekrāvējs"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP iekrāvējs"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s jaucējs"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s kodētājs"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer elements %s"
+
+msgid "Unknown source element"
+msgstr "Nezināms avota elements"
+
+msgid "Unknown sink element"
+msgstr "Nezināms iegremdēšanas elements"
+
+msgid "Unknown element"
+msgstr "Nezināms elements"
+
+msgid "Unknown decoder element"
+msgstr "Nezināms atkodētāja elements"
+
+msgid "Unknown encoder element"
+msgstr "Nezināms kodētāja elements"
+
+msgid "Plugin or element of unknown type"
+msgstr "Nezināma veida spraudnis vai elements"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nevarēja atvērt vfs failu \"%s\" rakstīšanai: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nav norādīts faila nosaukums"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nevarēja aizvērt vfs failu \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Kļūda rakstot failā \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Nederīgs subtitru URI \"%s\", subtitri izslēgti."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP plūsmas pagaidām nevar tikt atskaņotas."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nevarēja izveidot \"decodebin\" elementu."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Tika pamanīta tikai subtitru plūsma. Vai nu jūs ielādējat subtitru failu "
+#~ "vai cita veida teksta failu, vai arī mediju fails netika atpazīts."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Jums nav instalēta atkodētāja, lai apietos ar šo failu. Jums iespējams "
+#~ "vajadzētu instalēt nepieciešamos spraudņus."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Šis nav mediju fails"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Tika pamanīta subtitru plūsma, bet ne video plūsma."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Trūkst gan autovideosink, gan xvimagesink elementi."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Trūkst gan autoaudiosink, gan alsasink elementi."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Radās kļūda nosūtot gdb galvenas datus uz \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Kļūda sūtot gdp iekrāvēja datus uz \"%s:%d\""
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nesaspiesta plakne YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nesaspiesta plakne YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nesaspiests pakots YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nesaspiests pakots YUP 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nesaspiests pakots YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nesaspiests pakots YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nesaspiests pakots YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nesaspiesta plakne YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nesaspiesta plakne YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nesaspiests melnbaltais Y-plakne"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Jēls PCM audio"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Jēls %d-bitu plūstošā punkta audio"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Jēls plūstošā punkta audio"
+
+#~ msgid "No device specified."
+#~ msgstr "Nav norādīta ierīce."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Ierīce \"%s\" neeksistē."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Ierīce \"%s\" jau tiek izmantota."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nevarēja atvērt ierīci \"%s\" lasīšanai vai rakstīšanai."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Nav iespējams izveidot \"decodebin2\" elementu."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Nav iespējams izveidot  \"queue2\" elementu."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Nav iespējams izveidot \"typefind\" elementu."
+
+#~ msgid "Can't play a text subtitles and subpictures."
+#~ msgstr "Nevar atskaņot teksta subtitrus un subattēlus."
+
+#~ msgid "No file name specified."
+#~ msgstr "Nav norādīts faila nosaukums."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Nav iespējams atvērt failu \"%s\" lasīšanai."
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..9cbf73a
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..c0ded66
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,536 @@
+# Norwegian bokmaal translation of gst-utils.
+# This file is put in the public domain.
+# Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-10-24 21:44+0200\n"
+"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Master"
+msgstr "Hovedvolum"
+
+msgid "Bass"
+msgstr "Bass"
+
+msgid "Treble"
+msgstr "Diskant"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Linje inn"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC-høyttaler"
+
+msgid "Playback"
+msgstr "Spill av"
+
+msgid "Capture"
+msgstr "Ta opp"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Kunne ikke åpne enheten for avspilling i mono-modus."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Kunne ikke åpne enheten for avspilling i stereo-modus."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+msgid "Could not open audio device for playback."
+msgstr "Kunne ikke åpne lydenheten for avspilling."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+msgid "Could not open audio device for recording."
+msgstr "Kunne ikke åpne lydenheten for opptak."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+msgid "Could not seek CD."
+msgstr "Kunne ikke søke på CD."
+
+msgid "Could not read CD."
+msgstr "Kunne ikke lese CD."
+
+msgid "Internal data stream error."
+msgstr "Intern feil i datastrøm."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke "
+"installert."
+
+msgid "Could not determine type of stream"
+msgstr "Kunne ikke bestemme type strøm."
+
+msgid "This appears to be a text file"
+msgstr "Dette ser ut som en tekstfil"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr "Fant ikke volumkontroll"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr "Ingen URI for avspilling oppgitt."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Ugyldig URI «%s»."
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr "Kildeelement er ugyldig."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr ""
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr "spor-ID"
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr "artist-ID"
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr "album-ID"
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Denne CDen har ingen lydspor"
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr "Ukjent element for koding"
+
+msgid "Plugin or element of unknown type"
+msgstr "Tillegg eller element av ukjent type"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kunne ikke åpne VFS-fil «%s» for skriving: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Ingen filnavn oppgitt"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Kunne ikke lukke VFS-fil «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Feil under skriving til fil «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Ugyldig URI «%s» til undertekst. Undertekst er slått av."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP-strømmer kan ikke spilles av ennå."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Dette er ikke en mediefil"
+
+#~ msgid "No device specified."
+#~ msgstr "Ingen enhet oppgitt."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Enhet «%s» eksisterer ikke."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Enhet «%s» er allerede i bruk."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kunne ikke åpne enhet «%s» for lesing og skriving."
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..81da802
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..a1bc1fa
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,622 @@
+# translation of gst-plugins-base-0.10.32.2.po to Dutch
+# This file is put in the public domain.
+#
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-27 00:12+0200\n"
+"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.1\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Master"
+msgstr "Master"
+
+msgid "Bass"
+msgstr "Lage tonen"
+
+msgid "Treble"
+msgstr "Hoge tonen"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Lijn-in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Microfoon"
+
+msgid "PC Speaker"
+msgstr "PC-luidspreker"
+
+msgid "Playback"
+msgstr "Afspelen"
+
+msgid "Capture"
+msgstr "Opnemen"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Kan het apparaat niet openen voor afspelen in mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Kan het apparaat niet openen voor afspelen in stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Kan het apparaat niet openen voor afspelen in %d-kanalen."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Kan het audio-apparaat niet openen voor afspelen. Apparaat is in gebruik bij "
+"een andere applicatie."
+
+msgid "Could not open audio device for playback."
+msgstr "Kan het audio-apparaat niet openen voor afspelen."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Kan het apparaat niet openen in mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Kan het apparaat niet openen voor opnemen in stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Kan het apparaat niet openen voor opnemen in %d-kanalen."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Kan het audio-apparaat niet openen voor opnemen. Apparaat is in gebruik bij "
+"een andere applicatie."
+
+msgid "Could not open audio device for recording."
+msgstr "Kan het audio-apparaat niet openen voor opnemen."
+
+msgid "Could not open CD device for reading."
+msgstr "Kan het CD-apparaat niet openen om te lezen."
+
+msgid "Could not seek CD."
+msgstr "Kan geen seek doen op CD."
+
+msgid "Could not read CD."
+msgstr "Kan niet lezen van CD."
+
+msgid "Internal data stream error."
+msgstr "Interne fout in gegevensstroom."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Een %s plugin is vereist voor het afspelen van deze gegevens, echter deze is "
+"niet geïnstalleerd."
+
+msgid "Could not determine type of stream"
+msgstr "Kan het type stream niet bepalen"
+
+msgid "This appears to be a text file"
+msgstr "Dit lijkt een tekstbestand te zijn"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Ontbrekend element '%s' - controleer de instalatie van uw GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "De elementen 'autovideosink' en '%s' ontbreken beide."
+
+msgid "The autovideosink element is missing."
+msgstr "Het element 'autovideosink' ontbreekt."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Het geconfigureerde videosink %s werkt niet."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "De elementen 'autovideosink' en '%s' werken beide niet."
+
+msgid "The autovideosink element is not working."
+msgstr "Het element 'autovideosink' werkt niet."
+
+msgid "Custom text sink element is not usable."
+msgstr "De aangepaste element 'tekst-sink' is niet bruikbaar."
+
+msgid "No volume control found"
+msgstr "Geen volumecontrole gevonden"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "De elementen 'autoaudiosink' en '%s' ontbreken beide."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Het element 'autoaudiosink' ontbreekt."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Het geconfigureerde audiosink %s werkt niet."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "De elementen 'autoaudiosink' en '%s' werken beide niet."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Het element 'autoaudiosink' werkt niet."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Kan geen tekstbestand afspelen zonder video of visualisaties."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Geen decoder beschikbaar voor het type '%s'."
+
+msgid "No URI specified to play from."
+msgstr "Geen URI opgegeven om van af te spelen."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Ongeldige URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Deze stroom kan nog niet afgespeeld worden."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Geen URI-handler geïmplementeerd voor \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Bronelement is ongeldig."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Fout bij het zenden van gegevens naar \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Verbinding naar %s:%d is geweigerd."
+
+msgid "Can't record audio fast enough"
+msgstr "Kan geluid niet snel genoeg opslaan"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Lezen van tag is mislukt: niet genoeg gegevens"
+
+msgid "track ID"
+msgstr "track-ID"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz track-ID"
+
+msgid "artist ID"
+msgstr "artiest-ID"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz artiest-ID"
+
+msgid "album ID"
+msgstr "album-ID"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz album-ID"
+
+msgid "album artist ID"
+msgstr "album-artiest-ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz album-artiest-ID"
+
+msgid "track TRM ID"
+msgstr "track-TRM-ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM-ID"
+
+msgid "capturing shutter speed"
+msgstr "sluitersnelheid bij het maken"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Gebruikte sluitersnelheid bij het maken van een foto, in seconden"
+
+msgid "capturing focal ratio"
+msgstr "F-nummer bij maken"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Gebruikte F-nummer bij het maken van de foto"
+
+msgid "capturing focal length"
+msgstr "brandpuntsafstand bij maken"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+"Ge bruikte brandpuntsafstand van de lens bij het maken van de foto, in mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "digitale zoom-verhouding bij het maken"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Gebruikte digitale zoom-verhouding bij het maken van een foto"
+
+msgid "capturing iso speed"
+msgstr "ISO-snelheid bij het maken"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Gebruikte ISO-snelheid bij het maken van een foto"
+
+msgid "capturing exposure program"
+msgstr "belichtingsprogramma bij het maken"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Gebruikte belichtingsprogramma bij het maken van een foto"
+
+msgid "capturing exposure mode"
+msgstr "belichtingmodus bij het maken"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Gebruikte belichtingmodus bij het maken van een foto"
+
+msgid "capturing exposure compensation"
+msgstr "belichtingscompensatie bij het maken"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Gebruikte belichtingscompensatie bij het maken van een foto"
+
+msgid "capturing scene capture type"
+msgstr "type scene-opname bij het maken"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Gebruikte type scene-opname bij het maken van een foto"
+
+msgid "capturing gain adjustment"
+msgstr "aanpassing versterking bij het maken"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Gebruikte aanpassing versterking bij het maken van een foto"
+
+msgid "capturing white balance"
+msgstr "witbalans bij het maken"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Gebruikte witbalans bij het maken van een foto"
+
+msgid "capturing contrast"
+msgstr "contrast bij het maken"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+"De richting van de contrastbewerking toegepast bij het nemen van een foto"
+
+msgid "capturing saturation"
+msgstr "verzadiging bij het nemen"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"De richting van de bewerking van de verzadiging toegepast bij het nemen van "
+"een foto"
+
+msgid "capturing sharpness"
+msgstr "scherpte bij het nemen"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+"De richting van de scherptebewerking toegepast bij het nemen van een foto"
+
+msgid "capturing flash fired"
+msgstr "flitser gebruikt bij het nemen"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Of de flitser is gebruikt bij het nemen van een foto"
+
+msgid "capturing flash mode"
+msgstr "flitsmodus bij het nemen"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Geselecteerde flitsmodus bij het nemen van een foto"
+
+msgid "capturing metering mode"
+msgstr "meetmethode bij het nemen"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Gebruikte meetmethode bij het bepalen van de belichting voor het nemen van "
+"een foto"
+
+msgid "capturing source"
+msgstr "opnameapparaat bij het nemen"
+
+msgid "The source or type of device used for the capture"
+msgstr "Het gebruikte opnameapparaat of type apparaat voor het nemen"
+
+msgid "image horizontal ppi"
+msgstr "horizontale ppi van afbeelding"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Voorgenomen horizontale pixeldichtheid van medium (afbeelding/video) in ppi"
+
+msgid "image vertical ppi"
+msgstr "verticale ppi van afbeelding"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Voorgenomen verticale pixeldichtheid van medium (afbeelding/video) in ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Deze CD heeft geen audiotracks"
+
+msgid "ID3 tag"
+msgstr "ID3-tag"
+
+msgid "APE tag"
+msgstr "APE-tag"
+
+msgid "ICY internet radio"
+msgstr "ICY-internetradio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "Run-length encoding (RLE)"
+
+msgid "Sami subtitle format"
+msgstr "Sami ondertitelformaat"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer ondertitelformaat"
+
+msgid "Kate subtitle format"
+msgstr "Kate ondertitelformaat"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Niet-gecomprimeerde YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Niet-gecomprimeerde grijze afbeelding"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Niet-gecomprimeerde YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Niet-gecomprimeerde, gepaletteerde %d-bits %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versie %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Niet-gecomprimeerde YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Raw %d-bits PCM-audio"
+
+msgid "Audio CD source"
+msgstr "Audio-CD-bron"
+
+msgid "DVD source"
+msgstr "DVD-bron"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol (RTSP)-bron"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server (MMS) protocol-bron"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protocol-bron"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video-RTP-depayloader"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audio-RTP-depayloader"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP-depayloader"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s decoder"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video-RTP-payloader"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audio-RTP-payloader"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP-payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s muxer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s encoder"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer element %s"
+
+msgid "Unknown source element"
+msgstr "Onbekend bronelement"
+
+msgid "Unknown sink element"
+msgstr "Onbekend bestemmingselement"
+
+msgid "Unknown element"
+msgstr "Onbekend element"
+
+msgid "Unknown decoder element"
+msgstr "Onbekend decoder-element"
+
+msgid "Unknown encoder element"
+msgstr "Onbekend encoder-element"
+
+msgid "Plugin or element of unknown type"
+msgstr "Plugin of element van onbekend type"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Niet-gecomprimeerde planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Niet-gecomprimeerde planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Niet-gecomprimeerde packed YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Niet-gecomprimeerde packed YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Niet-gecomprimeerde packed YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Niet-gecomprimeerde packed YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Niet-gecomprimeerde packed YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Niet-gecomprimeerde planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Niet-gecomprimeerde planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Niet-gecomprimeerd zwartwit Y-vlak"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Raw PCM-audio"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Raw %d-bits drijvendekomma-audio"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Raw drijvendekomma-audio"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kon het VFS-bestand \"%s\" niet openen om te schrijven: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Geen bestandsnaam opgegeven"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Kan het VFS-bestand \"%s\" niet sluiten."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Fout bij het schrijven naar bestand \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Ongeldige ondertitel-URI \"%s\"; ondertitels zijn uitgezet."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP-gegevensstromen zijn nog niet af te spelen."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Kan \"decodebin\"-element niet aanmaken."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Er is alleen een ondertitelgegevensstroom gedetecteerd. Ofwel bent u een "
+#~ "ondertitelbestand of een ander type tekstbestand aan het laden, of het "
+#~ "mediabestand is niet herkend."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "U hebt geen decoder geïnstalleerd voor dit bestand. U moet mogelijk de "
+#~ "noodzakelijke plugins installeren."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Dit is geen mediabestand."
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Een ondertitelstroom is gedetecteerd, maar geen videostroom."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "De elementen 'autovideosink' en 'xvimagesink' ontbreken beide."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "De elementen 'autoaudiosink' en 'alsasink' ontbreken beide."
+
+#~ msgid "No device specified."
+#~ msgstr "Geen apparaat opgegeven."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Apparaat \"%s\" bestaat niet."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Apparaat \"%s\" is al in gebruik."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kan apparaat \"%s\" niet openen voor lezen en schrijven."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Fout tijdens het zenden van gdp-headergegevens naar \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Fout tijdens het zenden van gdp-gegevens naar \"%s:%d\"."
diff --git a/po/or.gmo b/po/or.gmo
new file mode 100644
index 0000000..3073788
--- /dev/null
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
new file mode 100644
index 0000000..e086c51
--- /dev/null
+++ b/po/or.po
@@ -0,0 +1,689 @@
+# Oriya translation of gst-plugins-0.8.3.pot.
+# Copyright (C) 2004, Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-0.8.3 package.
+# Gora Mohanty <gora_mohanty@yahoo.co.in>, 2004.
+# $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-09-27 13:32+0530\n"
+"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
+"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
+"Language: or\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
+
+msgid "Treble"
+msgstr "ଉଚ୍ଚ ସ୍ବର"
+
+msgid "PCM"
+msgstr "ପି.ସି.ଏମ."
+
+msgid "Synth"
+msgstr "ସିନ୍ଥେସାଇଜର"
+
+msgid "Line-in"
+msgstr "ଲାଇନ-ଇନ"
+
+msgid "CD"
+msgstr "ସି.ଡି."
+
+msgid "Microphone"
+msgstr "ମାଇକ୍ରୋଫୋନ୍"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+msgid "Could not open CD device for reading."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "\"%s\" ଯନ୍ତ୍ରରେ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଗୋଟିଏ ଅନୁଲିପିକାର ନୁହେଁ."
+
+#~ msgid "No device specified."
+#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଅବସ୍ଥିତ ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "\"%s\" ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ର ପୂର୍ବରୁ ଅନ୍ଯ କାରିକା ଦ୍ବାରା ବ୍ଯବହାର କରାଯାଉଛି."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" ଫାଇଲ ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "No file name specified."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଉଲ୍ଲେଖିତ ହୋଇ ନାହିଁ."
+
+#~ msgid "Device is not open."
+#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇ ନାହିଁ."
+
+#~ msgid "Device is open."
+#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇଚ୍ଛି."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "%s ଉପାଦାନ ମିଳିଲା ନାହିଁ. ପୁନଃପ୍ରଦର୍ଶନ ପାଇଁ ଏହି ଉପାଦାନଟି ଆବଶ୍ଯକ. ଦୟା କରି ସଠିକ ପ୍ଲଗ୍ଇନ୍ "
+#~ "ସ୍ଥାପିତ କରନ୍ତୁ, ଓ 'gst-inspect %s' ଚଳାଇ ଯାଞ୍ଚ କରନ୍ତୁ କି ଏହା କାର୍ଯ୍ଯକାରୀ ଅଛି"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "କୌଣସି ବ୍ଯବହାରଯୋଗ୍ଯ ରଙ୍ଗକ୍ଷେତ୍ର ଉପାଦାନ ମିଳିଲା ନାହିଁ.\n"
+#~ "ଦୟା କରି ଗୋଟିଏ ଉପାଦାନ ସ୍ଥାପିତ କରି ପୁନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ରକୁ %d ହର୍ଜରେ ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ବ୍ଯବହାର କରିହେଲା ନାହିଁ, ତାହାର ଅନୁମତି ଦେଖନ୍ତୁ."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Volume"
+#~ msgstr "ପ୍ରବଳତା"
+
+#~ msgid "Speaker"
+#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+#~ msgid "Mixer"
+#~ msgstr "ମିଶ୍ରଣ ଯନ୍ତ୍ର"
+
+#~ msgid "PCM-2"
+#~ msgstr "ପି.ସି.ଏମ.-୨"
+
+#~ msgid "Record"
+#~ msgstr "ଅନୁଲିପିକରଣ"
+
+#~ msgid "In-gain"
+#~ msgstr "ନିବେଶ-ବୃଦ୍ଧି"
+
+#~ msgid "Out-gain"
+#~ msgstr "ନିର୍ଗମ-ବୃଦ୍ଧି"
+
+#~ msgid "Line-1"
+#~ msgstr "ଲାଇନ-୧"
+
+#~ msgid "Line-2"
+#~ msgstr "ଲାଇନ-୨"
+
+#~ msgid "Line-3"
+#~ msgstr "ଲାଇନ-୩"
+
+#~ msgid "Digital-1"
+#~ msgstr "ସାଂଖ୍ଯିକ-୧"
+
+#~ msgid "Digital-2"
+#~ msgstr "ସାଂଖ୍ଯିକ-୨"
+
+#~ msgid "Digital-3"
+#~ msgstr "ସାଂଖ୍ଯିକ-୩"
+
+#~ msgid "Phone-in"
+#~ msgstr "ଫୋନ-ନିବେଶ"
+
+#~ msgid "Phone-out"
+#~ msgstr "ଫୋନ-ନିର୍ଗମ"
+
+#~ msgid "Video"
+#~ msgstr "ଭିଡିଓ"
+
+#~ msgid "Radio"
+#~ msgstr "ରେଡିଓ"
+
+#~ msgid "Monitor"
+#~ msgstr "ପ୍ରଦର୍ଶିକା"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ପର୍ଯ୍ଯାପ୍ତ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..4d885c3
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..3ed8d76
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,619 @@
+# Polish translation for gst-plugins-base.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-26 18:01+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Główny"
+
+msgid "Bass"
+msgstr "Niskie"
+
+msgid "Treble"
+msgstr "Wysokie"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Syntezator"
+
+msgid "Line-in"
+msgstr "Wejście"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "Głośnik PC"
+
+msgid "Playback"
+msgstr "Odtwarzanie"
+
+msgid "Capture"
+msgstr "Nagrywanie"
+
+msgid "Could not open device for playback in mono mode."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie %d-"
+"kanałowym."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania. Urządzenie "
+"jest używane przez inną aplikację."
+
+msgid "Could not open audio device for playback."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania."
+
+msgid "Could not open device for recording in mono mode."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie %d-"
+"kanałowym."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania. Urządzenie jest "
+"używane przez inną aplikację."
+
+msgid "Could not open audio device for recording."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania."
+
+msgid "Could not open CD device for reading."
+msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
+
+msgid "Could not seek CD."
+msgstr "Nie udało się ustawić położenia na CD."
+
+msgid "Could not read CD."
+msgstr "Nie udał się odczyt CD."
+
+msgid "Internal data stream error."
+msgstr "Błąd wewnętrzny strumienia danych."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Wtyczka %s jest wymagana do otworzenia tego strumienia, ale nie jest "
+"zainstalowana."
+
+msgid "Could not determine type of stream"
+msgstr "Nie udało się określić typu strumienia"
+
+msgid "This appears to be a text file"
+msgstr "To wygląda na plik tekstowy"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Brak elementu '%s' - proszę sprawdzić instalację GStreamera."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Nie ma żadnego z elementów autovideosink i %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Nie ma elementu autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Skonfigurowany element videosink %s nie działa."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Żaden z elementów autovideosink i %s nie działa."
+
+msgid "The autovideosink element is not working."
+msgstr "Element autovideosink nie działa."
+
+msgid "Custom text sink element is not usable."
+msgstr "Własny element text sink nie jest użyteczny."
+
+msgid "No volume control found"
+msgstr "Nie znaleziono sterowania głośnością"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Nie ma żadnego z elementów autoaudiosink i %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Nie ma elementu autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Skonfigurowany element audiosink %s nie działa."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Żaden z elementów autoaudiosink i %s nie działa."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Element autoaudiosink nie działa."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Nie można odtwarzać pliku tekstowego bez obrazu lub wizualizacji."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Brak dostępnego dekodera dla typu '%s'."
+
+msgid "No URI specified to play from."
+msgstr "Nie podano URI do odtwarzania."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Niepoprawne URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Tego strumienia jeszcze nie można odtworzyć."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nie ma zaimplementowanej obsługi URI dla \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Element źródłowy jest niepoprawny."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Błąd podczas wysyłania danych do \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Połączenie z %s:%d odrzucone."
+
+msgid "Can't record audio fast enough"
+msgstr "Nie można zapisywać danych dźwiękowych wystarczająco szybko"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Nie udało się odczytać znacznika: za mało danych"
+
+msgid "track ID"
+msgstr "ID ścieżki"
+
+msgid "MusicBrainz track ID"
+msgstr "ID ścieżki wg MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID artysty"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID artysty wg MusicBrainz"
+
+msgid "album ID"
+msgstr "ID albumu"
+
+msgid "MusicBrainz album ID"
+msgstr "ID albumu wg MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID artysty albumu ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID artysty albumu wg MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "TRM ID ścieżki"
+
+msgid "MusicBrainz TRM ID"
+msgstr "TRM ID wg MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "szybkość migawki"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Szybkość migawki zastosowana przy robieniu zdjęcia, w sekundach"
+
+msgid "capturing focal ratio"
+msgstr "współczynnik przysłony"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Przysłona (liczba f) użyta przy robieniu zdjęcia"
+
+msgid "capturing focal length"
+msgstr "ogniskowa obiektywu"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Długość ogniskowej obiektywu użyta przy robieniu zdjęcia, w mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "współczynnik powiększenia cyfrowego"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Współczynnik powiększenia cyfrowego użytego przy robieniu zdjęcia"
+
+msgid "capturing iso speed"
+msgstr "czyłość ISO"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Czułość ISO użyta przy robieniu zdjęcia"
+
+msgid "capturing exposure program"
+msgstr "program ekspozycji"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Program ekspozycji użyty przy robieniu zdjęcia"
+
+msgid "capturing exposure mode"
+msgstr "tryb ekspozycji"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Tryb ekspozycji użyty przy robieniu zdjęcia"
+
+msgid "capturing exposure compensation"
+msgstr "kompensacja ekspozycji"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Kompensacja ekspozycji użyta przy robieniu zdjęcia"
+
+msgid "capturing scene capture type"
+msgstr "Tyb sceny zdjęcia"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Tryb sceny użyty przy robieniu zdjęcia"
+
+msgid "capturing gain adjustment"
+msgstr "korekcja zdjęcia"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Całkowita korekcja zastosowana dla zdjęcia"
+
+msgid "capturing white balance"
+msgstr "balans bieli"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Tryb balansu bieli ustawiony przy robieniu zdjęcia"
+
+msgid "capturing contrast"
+msgstr "kontrast zdjęcia"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Kierunek korekty kontrastu zastosowanej przy robieniu zdjęcia"
+
+msgid "capturing saturation"
+msgstr "nasycenie zdjęcia"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Kierunek korekty nasycenia zastosowanej przy robieniu zdjęcia"
+
+msgid "capturing sharpness"
+msgstr "ostrość zdjęcia"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Kierunek korekty ostrości zastosowanej przy robieniu zdjęcia"
+
+msgid "capturing flash fired"
+msgstr "użycie flesza"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Czy flesz był uruchomiony przy robieniu zdjęcia"
+
+msgid "capturing flash mode"
+msgstr "tryb flesza"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Tryb flesza wybrany przy robieniu zdjęcia"
+
+msgid "capturing metering mode"
+msgstr "tryb pomiaru dla zdjęcia"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Tryb pomiaru użyty przy określaniu ekspozycji dla zdjęcia"
+
+msgid "capturing source"
+msgstr "źródło zdjęcia"
+
+msgid "The source or type of device used for the capture"
+msgstr "Źródło lub rodzaj urządzenia użytego do zrobienia zdjęcia"
+
+msgid "image horizontal ppi"
+msgstr "rozdzielczość pozioma"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Rozdzielczość pozioma nośnika w pikselach na cal"
+
+msgid "image vertical ppi"
+msgstr "rozdzielczość pionowa"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Rozdzielczość pionowa nośnika w pikselach na cal"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Ta płyta CD nie ma ścieżek dźwiękowych"
+
+msgid "ID3 tag"
+msgstr "Znacznik ID3"
+
+msgid "APE tag"
+msgstr "Znacznik APE"
+
+msgid "ICY internet radio"
+msgstr "Radio internetowe ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless (bezstratne CYUV)"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "Kodowanie RLE"
+
+msgid "Sami subtitle format"
+msgstr "Format podpisów Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Format podpisów TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Format podpisów Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nieskompresowany YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Nieskompresowany obraz w szarości"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nieskompresowany YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nieskompresowany %d-bitowy %s z paletą"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 w wersji %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nieskompresowany YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Surowe %d-bitowy dźwięk PCM"
+
+msgid "Audio CD source"
+msgstr "Źródło Audio CD"
+
+msgid "DVD source"
+msgstr "Źródło DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Źródło RTSP (Real Time Streaming Protocol)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Źródło protokołu MMS (Microsoft Media Server)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Źródło protokołu %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Depayloader obrazu RTP %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Depayloader dźwięku RTP %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Depayloader RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demuxer %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Dekoder %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Payloader obrazu RTP %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Payloader dźwięku RTP %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Payloader RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Muxer %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Koder %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Element GStreamera %s"
+
+msgid "Unknown source element"
+msgstr "Nieznany element źródłowy"
+
+msgid "Unknown sink element"
+msgstr "Nieznany element pochłaniający"
+
+msgid "Unknown element"
+msgstr "Nieznany element"
+
+msgid "Unknown decoder element"
+msgstr "Nieznany element dekodujący"
+
+msgid "Unknown encoder element"
+msgstr "Nieznany element kodujący"
+
+msgid "Plugin or element of unknown type"
+msgstr "Wtyczka lub element nieznanego typu"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nieskompresowany planarny YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nieskompresowany planarny YUV 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nieskompresowany spakowany YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nieskompresowany spakowany YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nieskompresowany spakowany YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nieskompresowany spakowany YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nieskompresowany spakowany YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nieskompresowany planarny YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nieskompresowany planarny YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nieskompresowany czarno-biały plan Y"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Surowy dźwięk PCM"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Surowy %d-bitowy dźwięk zmiennoprzecinkowy"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Surowy dźwięk zmiennoprzecinkowy"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nie udało się otworzyć pliku vfs \"%s\" do zapisu: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nie podano nazwy pliku"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nie udało się zamknąć pliku vfs \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Błąd podczas zapisu do pliku \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Niepoprawne URI podpisów \"%s\", podpisy wyłączone."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Strumieni RTSP jeszcze nie można odtwarzać."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nie udało się utworzyć elementu \"decodebin\"."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Wykryto tylko strumień podpisów. Albo żądano wczytania pliku podpisów lub "
+#~ "innego rodzaju pliku tekstowego, albo nie rozpoznano pliku "
+#~ "multimedialnego."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Nie ma zainstalowanego dekodera do obsługi tego pliku. Być może trzeba "
+#~ "zainstalować potrzebne wtyczki."
+
+#~ msgid "This is not a media file"
+#~ msgstr "To nie jest plik multimedialny"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Wykryto strumień podpisów, ale brak strumienia obrazu."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Nie ma żadnego z elementów autovideosink i xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Nie ma żadnego z elementów autoaudiosink i alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Nie określono urządzenia."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Urządzenie \"%s\" nie istnieje."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Urządzenie \"%s\" jest już używane."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nie udało się otworzyć urządzenia \"%s\" do odczytu i zapisu."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Błąd podczas wysyłania danych nagłówka gdp do \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Błąd podczas wysyłania danych gdp do \"%s:%d\"."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..18b291f
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..2073f40
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,652 @@
+# Brazilian Portuguese translation of gst-plugins-base.
+# Copyright (C) 2008-2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Fabrício Godoy <skarllot@gmail.com>, 2008-2011.
+#
+# PCM -> PCM
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base-0.10.31.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-01-08 01:02-0300\n"
+"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgid "Master"
+msgstr "Principal"
+
+msgid "Bass"
+msgstr "Grave"
+
+msgid "Treble"
+msgstr "Agudo"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizador"
+
+msgid "Line-in"
+msgstr "Entrada de linha"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Microfone"
+
+msgid "PC Speaker"
+msgstr "Alto-falante do PC"
+
+msgid "Playback"
+msgstr "Reprodução"
+
+msgid "Capture"
+msgstr "Captura"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Não foi possível abrir o dispositivo para reprodução em mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Não foi possível abrir o dispositivo para reprodução em estéreo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Não foi possível abrir o dispositivo para reprodução com %d canal(is)."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Não foi possível abrir o dispositivo de áudio para reprodução. O dispositivo "
+"está sendo usado por outro aplicativo."
+
+msgid "Could not open audio device for playback."
+msgstr "Não foi possível abrir o dispositivo de áudio para reprodução."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Não foi possível abrir o dispositivo para gravação em mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Não foi possível abrir o dispositivo para gravação em estéreo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Não foi possível abrir o dispositivo para gravação com %d canal(is)."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Não foi possível abrir o dispositivo de áudio para gravação. O dispositivo "
+"está sendo usado por outro aplicativo."
+
+msgid "Could not open audio device for recording."
+msgstr "Não foi possível abrir o dispositivo de áudio para gravação."
+
+msgid "Could not open CD device for reading."
+msgstr "Não foi possível abrir o dispositivo de CD para leitura."
+
+msgid "Could not seek CD."
+msgstr "Não foi possível buscar no CD."
+
+msgid "Could not read CD."
+msgstr "Não foi possível ler o CD."
+
+msgid "Internal data stream error."
+msgstr "Erro interno no fluxo de dados."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"O plug-in %s é necessário para reproduzir este fluxo, mas não está instalado."
+
+msgid "Could not determine type of stream"
+msgstr "Não foi possível determinar o tipo de fluxo"
+
+msgid "This appears to be a text file"
+msgstr "Este parece ser um arquivo de texto"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+"O elemento \"%s\" está faltando, verifique a instalação do seu GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Os elementos autovideosink e %s estão faltando."
+
+msgid "The autovideosink element is missing."
+msgstr "O elemento autovideosink está faltando."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "O videosink configurado %s não está funcionando."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Os elementos autovideosink e %s não estão funcionando."
+
+msgid "The autovideosink element is not working."
+msgstr "O elemento autovideosink não está funcionando."
+
+msgid "Custom text sink element is not usable."
+msgstr "O elemento consumidor personalizado de texto não é utilizável."
+
+msgid "No volume control found"
+msgstr "Nenhum controle de volume encontrado"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Os elementos autoaudiosink e %s estão faltando."
+
+msgid "The autoaudiosink element is missing."
+msgstr "O elemento autoaudiosink não está faltando."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "O audiosink configurado %s não está funcionando."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Os elementos autoaudiosink e %s não estão funcionando."
+
+msgid "The autoaudiosink element is not working."
+msgstr "O elemento autoaudiosink não está funcionando."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Não é possível reproduzir um arquivo de texto sem vídeo ou visualização."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Decodificador não disponível para o tipo \"%s\"."
+
+msgid "No URI specified to play from."
+msgstr "Nenhum URI especificado para reprodução."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "O URI \"%s\" é inválido."
+
+msgid "This stream type cannot be played yet."
+msgstr "Este tipo de fluxo ainda não pode ser reproduzido."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nenhum manipulador para o URI \"%s\" foi implementado."
+
+msgid "Source element is invalid."
+msgstr "O elemente de origem é inválido."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Erro ao enviar dados para \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "A conexão para %s:%d foi recusada."
+
+msgid "Can't record audio fast enough"
+msgstr "Não é possível gravar o áudio rápido suficiente"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Falha ao ler etiqueta: dados insuficientes"
+
+msgid "track ID"
+msgstr "ident. da trilha"
+
+msgid "MusicBrainz track ID"
+msgstr "ident. da trilha no MusicBrainz"
+
+msgid "artist ID"
+msgstr "ident. do artista"
+
+msgid "MusicBrainz artist ID"
+msgstr "ident. do artista no MusicBrainz"
+
+msgid "album ID"
+msgstr "ident. do álbum"
+
+msgid "MusicBrainz album ID"
+msgstr "ident. do álbum no MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ident. do artista do álbum"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ident. do artista do álbum no MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ident. da trilha TRM"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ident. da trilha TRM no MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "velocidade do obturador ao capturar"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Velocidade do obturador usada ao capturar uma imagem, em segundos"
+
+msgid "capturing focal ratio"
+msgstr "taxa focal ao capturar"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Taxa focal usada ao capturar a imagem, f-number"
+
+msgid "capturing focal length"
+msgstr "distância focal ao capturar"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Distância focal das lentes usada ao capturar a imagem, em mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "taxa de zoom digital ao capturar"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Taxa de zoom digital usada ao capturar uma imagem"
+
+msgid "capturing iso speed"
+msgstr "velocidade ISO ao capturar"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "A velocidade ISO usada ao capturar uma imagem"
+
+msgid "capturing exposure program"
+msgstr "programa de exposição ao capturar"
+
+msgid "The exposure program used when capturing an image"
+msgstr "O programa de exposição usado ao capturar uma imagem"
+
+msgid "capturing exposure mode"
+msgstr "modo de exposição ao capturar"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "O modo de exposição usado ao capturar uma imagem"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "modo de exposição ao capturar"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "O modo de exposição usado ao capturar uma imagem"
+
+msgid "capturing scene capture type"
+msgstr "tipo de captura de cena ao capturar"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "O modo de captura de cena usado ao capturar uma imagem"
+
+msgid "capturing gain adjustment"
+msgstr "ajuste de ganho ao capturar"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "O ajuste de ganho geral aplicado na imagem"
+
+msgid "capturing white balance"
+msgstr "balanço de branco ao capturar"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "O modo de balanço de branco definido ao capturar uma imagem"
+
+msgid "capturing contrast"
+msgstr "contraste ao capturar"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+"O procedimento de processamento de contraste aplicado ao capturar uma imagem"
+
+msgid "capturing saturation"
+msgstr "saturação ao capturar"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+"O procedimento de processamento de saturação aplicado ao capturar uma imagem"
+
+msgid "capturing sharpness"
+msgstr "nitidez ao capturar"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+"O procedimento de processamento de nitidez aplicado ao capturar uma imagem"
+
+msgid "capturing flash fired"
+msgstr "disparar flash ao capturar"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Define se o flash é disparado ao capturar uma imagem"
+
+msgid "capturing flash mode"
+msgstr "modo de flash ao capturar"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "O modo de flash selecionado ao capturar uma imagem"
+
+msgid "capturing metering mode"
+msgstr "modo de medição de luz ao capturar"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"O modo de medição de luz usado ao determinar a exposição para captura de uma "
+"imagem"
+
+msgid "capturing source"
+msgstr "fonte ao capturar"
+
+msgid "The source or type of device used for the capture"
+msgstr "A fonte ou tipo de dispositivo usado para a captura"
+
+msgid "image horizontal ppi"
+msgstr "PPI horizontal da imagem"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Densidade de pixels horizontais desejado para a mídia (imagem/vídeo), em PPI"
+
+msgid "image vertical ppi"
+msgstr "PPI vertical da imagem"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Densidade de pixels verticais desejado para a mídia (imagem/vídeo), em PPI"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Este CD não tem trilhas de áudio"
+
+msgid "ID3 tag"
+msgstr "Etiqueta ID3"
+
+msgid "APE tag"
+msgstr "Etiqueta APE"
+
+msgid "ICY internet radio"
+msgstr "Rádio on-line ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Áudio Sem Perdas da Apple (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Codec Livre de Áudio Sem Perdas (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Áudio Real Sem Perdas (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Mídia de Voz do Windows (WMS)"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Sem Perdas"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH Sem Perdas"
+
+msgid "Run-length encoding"
+msgstr "Codificação Run-length"
+
+msgid "Sami subtitle format"
+msgstr "Formato de legendas Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Formato de legendas TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Formato de legendas Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV sem compressão"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Imagem Monocromática Sem Compressão"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV sem compressão"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "%2$s de %1$d bits com paletas sem compressão"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Versão %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV sem compressão"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Áudio PCM Raw de %d bits"
+
+msgid "Audio CD source"
+msgstr "Origem: CD de áudio"
+
+msgid "DVD source"
+msgstr "Origem: DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Origem: Protocolo de Fluxo Contínuo em Tempo Real (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Origem: protocolo do Servidor de Mídia da Microsoft (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Origem: protocolo %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "decodificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "decodificador de áudio RTP %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "decodificador RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demultiplexador %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Decodificador %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "codificador de vídeo RTP %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "codificador de áudio RTP %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "codificador RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Multiplexador %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Codificador %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Elemento \"%s\" do GStreamer"
+
+msgid "Unknown source element"
+msgstr "Elemento de origem desconhecida"
+
+msgid "Unknown sink element"
+msgstr "Elemento consumidor desconhecido"
+
+msgid "Unknown element"
+msgstr "Elemento desconhecido"
+
+msgid "Unknown decoder element"
+msgstr "Elemento decodificador desconhecido"
+
+msgid "Unknown encoder element"
+msgstr "Elemento codificador desconhecido"
+
+msgid "Plugin or element of unknown type"
+msgstr "Elemento ou plug-in de tipo desconhecido"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 plano sem compressão"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YVU 4:2:0 plano sem compressão"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 empacotado sem compressão"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 empacotado sem compressão"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU 4:1:0 empacotado sem compressão"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 empacotado sem compressão"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 empacotado sem compressão"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 plano sem compressão"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 plano sem compressão"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Plano Y em preto e branco sem compressão"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Áudio PCM Raw"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Áudio Raw de ponto-flutuante de %d bits"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Áudio Raw de ponto-flutuante"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Não foi possível abrir o arquivo VFS \"%s\" para escrita: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Não foi fornecido um nome de arquivo"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Não foi possível fechar o arquivo VFS \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Erro ao gravar no arquivo \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "O URI \"%s\" para legenda é inválido, legendas desabilitadas."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Os fluxos RTSP ainda não podem ser reproduzidos."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Não foi possível criar o elemento \"decodebin\"."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Apenas um fluxo de legendas foi detectado. Ou você está carregando um "
+#~ "arquivo de legenda ou algum outro tipo de arquivo de texto, ou o arquivo "
+#~ "de mídia não é reconhecido."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Você não tem um decodificador instalado para manipular este arquivo. Você "
+#~ "deveria instalar os plug-ins necessários."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Este não é um arquivo de mídia"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Um fluxo de legenda foi detectado, mas nenhum fluxo de vídeo."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Os elementos autovideosink e xvimagesink estão faltando."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Os elementos autoaudiosink e alsasink estão faltando."
+
+#~ msgid "No device specified."
+#~ msgstr "Nenhum dispositivo especificado."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "O dispositivo \"%s\" não existe."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "O dispositivo \"%s\" já está sendo usado."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Não foi possível abrir o dispositivo \"%s\" para leitura e escrita."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Erro ao enviar o cabeçalho de dados GDP para \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Erro ao enviar codificação de dados GDP para \"%s:%d\"."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Não foi possível criar o elemento \"decodebin2\"."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Não foi possível criar o elemento \"queue2\"."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Não foi possível criar o elemento \"typefind\"."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Não é possível reproduzir legendas de texto e subimagens."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Nenhum diretório temporário especificado."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Não foi possível criar o arquivo temporário \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Não foi possível abrir o arquivo \"%s\" para leitura."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Erro interno no fluxo de dados."
+
+#~ msgid "No file name specified."
+#~ msgstr "Não foi especificado um nome de arquivo."
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..dacf7d3
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..8c125d8
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,614 @@
+# Romanian translation for gst-plugins-base
+# This file is distributed under the same license as the gst-plugins-base package.
+# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.29.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-08-16 01:21+0300\n"
+"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+
+msgid "Master"
+msgstr "Principal"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Înalte"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Linie intrare"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Microfon"
+
+msgid "PC Speaker"
+msgstr "Difuzor PC"
+
+msgid "Playback"
+msgstr "Redare"
+
+msgid "Capture"
+msgstr "Captură"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nu s-a putut deschide dispozitivul pentru redare în modul mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nu s-a putut deschide dispozitivul pentru redare în modul stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Nu s-a putut deschide dispozitivul pentru redare în modul %d-canal."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nu s-a putut deschide dispozitivul audio pentru redare. Dispozitivul este "
+"folosit de o altă aplicație."
+
+msgid "Could not open audio device for playback."
+msgstr "Nu s-a putut deschide dispozitivul audio pentru redare."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nu s-a putut deschide dispozitivul pentru înregistrare în modul mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr ""
+"Nu s-a putut deschide dispozitivul pentru înregistrare în modul stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr ""
+"Nu s-a putut deschide dispozitivul pentru înregistrare în modul %d-canal"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nu s-a putut deschide dispozitivul audio pentru înregistrare. Dispozitivul "
+"este folosit de o altă aplicație."
+
+msgid "Could not open audio device for recording."
+msgstr "Nu s-a putut deschide dispozitivul audio pentru înregistrare."
+
+msgid "Could not open CD device for reading."
+msgstr "Nu s-a putut deschide unitatea CD pentru redare."
+
+msgid "Could not seek CD."
+msgstr "Nu s-a putut accesa CD-ul."
+
+msgid "Could not read CD."
+msgstr "Nu s-a putut citi CD-ul."
+
+msgid "Internal data stream error."
+msgstr "Eroare internă a fluxului de date."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Un modul de extensie %s este necesar pentru a reda acest flux, dar acesta nu "
+"este instalat."
+
+msgid "Could not determine type of stream"
+msgstr "Nu s-a putut determina tipul fluxului"
+
+msgid "This appears to be a text file"
+msgstr "Acesta pare să fie un fișier text."
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Element %s lipsă - verificați instalarea GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Lipsește atât elementul autovideosink cât și %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Elementul autovideosink lipsește."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Videosink-ul configurat %s nu funcționează."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Nu funcționează atât elementul autovideosink cât și %s."
+
+msgid "The autovideosink element is not working."
+msgstr "Elementul autovideosink nu funcționează."
+
+msgid "Custom text sink element is not usable."
+msgstr "Elementul sink de text personalizat nu este utilizabil."
+
+msgid "No volume control found"
+msgstr "Nu s-a găsit niciun control de volum"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Lipsește atât elementul autoaudiosink cât și %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Elementul autoaudiosink lipsește."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Audiosink-ul configurat %s nu funcționează."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Nu funcționează atât elementul autoaudiosink cât și %s."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Elementul autoaudiosink nu funcționează."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Nu se poate reda un fișier text fără video sau vizualizări."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Niciun decodor disponibil pentru tipul „%s”."
+
+msgid "No URI specified to play from."
+msgstr "Nu s-a specificat URI pentru redare."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "URI „%s” nevalid."
+
+msgid "This stream type cannot be played yet."
+msgstr "Acest tip de flux nu poate fi redat încă."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Nicio rutină de tratare de URI implementată pentru „%s”."
+
+msgid "Source element is invalid."
+msgstr "Element sursă nevalid."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Eroare la trimiterea datelor către „%s:%d”."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Conexiunea la %s:%d a fost refuzată."
+
+msgid "Can't record audio fast enough"
+msgstr "Nu se poate înregistra sunetul destul de repede"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Citirea etichetei a eșuat: date insuficiente"
+
+msgid "track ID"
+msgstr "ID pistă"
+
+msgid "MusicBrainz track ID"
+msgstr "ID pistă MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID artist"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID artist MusicBrainz"
+
+msgid "album ID"
+msgstr "ID album"
+
+msgid "MusicBrainz album ID"
+msgstr "ID album MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID artist album"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID album artist MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "TRM ID pistă"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Acest CD nu conține piste audio"
+
+msgid "ID3 tag"
+msgstr "etichetă ID3"
+
+msgid "APE tag"
+msgstr "etichetă APE"
+
+msgid "ICY internet radio"
+msgstr "Radio Internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Audio fără pierdere (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Codec audio liber fără pierdere (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV fără pierdere"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH fără pierdere"
+
+msgid "Run-length encoding"
+msgstr "Codarea run-length"
+
+msgid "Sami subtitle format"
+msgstr "Format subtitrare Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Format subtitrare TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Format subtitrare Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV necomprimat"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Imagine gri necomprimată"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV necomprimat"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Paletizat la %d biți necomprimat %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 versiunea %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV necomprimat"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "PCM audio brut %d biți"
+
+msgid "Audio CD source"
+msgstr "Sursă CD audio"
+
+msgid "DVD source"
+msgstr "Sursă DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Sursă RTSP (protocol pentru flux în timp real)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Sursă protocol Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Sursă protocol %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Demuxer %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Decoder %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr "Muxer %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "codificator %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Element GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Element sursă necunoscut"
+
+msgid "Unknown sink element"
+msgstr "Element sink necunoscut"
+
+msgid "Unknown element"
+msgstr "Element necunoscut"
+
+msgid "Unknown decoder element"
+msgstr "Element decodor necunoscut"
+
+msgid "Unknown encoder element"
+msgstr "Element codor necunoscut"
+
+msgid "Plugin or element of unknown type"
+msgstr "Modul de extensie sau element de tip necunoscut"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Planar necomprimat YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Planar necomprimat YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Pachet necomprimat YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Pachet necomprimat YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Pachet necomprimat YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Pachet necomprimat YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Pachet necomprimat YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Planar necomprimat YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Planar necomprimat YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Plan-Y alb și negru necomprimat"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "PCM audio brut"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Audio în virgulă mobilă brut la %d biți"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Audio în virgulă mobilă brut"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nu s-a putut deschide fișierul vsf „%s\" pentru scriere: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Niciun nume de fișier dat."
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nu s-a putut închide fișierul vsf „%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Eroare la scrierea fișierului „%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "URI subtitrare „%s” nevalid, subtitrare dezactivată."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Fluxurile RTSP nu pot fi redate încă."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nu se poate crea elementul „decodebin”."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "A fost detectat doar un flux pentru subtitrare. Fie încărcați un fișier "
+#~ "de subtitrare sau un alt tip de fișier text, sau fișierul nu a fost "
+#~ "recunoscut."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Nu există instalat un decodor pentru deschiderea acestui fișier. Probabil "
+#~ "trebuie să instalați modulele de extensie necesare."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Acesta nu este un fișier media"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "A fost detectat un flux de subtitrare, dar nu există flux video."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Lipsesc ambele elemente autovideosink și xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Lipsesc ambele elemente autoaudiosink și alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Nu s-a specificat niciun dispozitiv."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Dispozitivul „%s” nu există."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Dispozitivul „%s” este deja folosit."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nu s-a putut deschide dispozitivul „%s” pentru citire și scriere."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Eroare la trimiterea antetului gdp către „%s:%d”."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Eroare la trimiterea conținutului gdp către „%s:%d”."
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..9bb51c4
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..555cc25
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,630 @@
+# Translation for gst-plugins-base messages to Russian
+# This file is put in the public domain.
+#
+# Артём Попов <artfwo@gmail.com>, 2009.
+# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-26 20:30+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgid "Master"
+msgstr "Общий"
+
+msgid "Bass"
+msgstr "Низкие"
+
+msgid "Treble"
+msgstr "Высокие"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Синтезатор"
+
+msgid "Line-in"
+msgstr "Линейный вход"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Микрофон"
+
+msgid "PC Speaker"
+msgstr "Внутренний динамик"
+
+msgid "Playback"
+msgstr "Воспроизведение"
+
+msgid "Capture"
+msgstr "Съёмка"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Не удалось открыть устройство для воспроизведения в режиме моно."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Не удалось открыть устройство для воспроизведения в режиме стерео."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+"Не удалось открыть устройство для воспроизведения в %d-канальном режиме."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Не удалось открыть устройство для воспроизведения. Устройство используется "
+"другим приложением."
+
+msgid "Could not open audio device for playback."
+msgstr "Не удалось открыть устройство для воспроизведения."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Не удалось открыть устройство для записи в режиме моно."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Не удалось открыть устройство для записи в режиме стерео."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Не удалось открыть устройство для записи в %d-канальном режиме."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Не удалось открыть устройство для записи. Устройство используется другим "
+"приложением."
+
+msgid "Could not open audio device for recording."
+msgstr "Не удалось открыть устройство для записи."
+
+msgid "Could not open CD device for reading."
+msgstr "Не удалось открыть CD-устройство для чтения."
+
+msgid "Could not seek CD."
+msgstr "Не удалось сменить позицию воспроизведения CD."
+
+msgid "Could not read CD."
+msgstr "Не удалось прочитать диск."
+
+msgid "Internal data stream error."
+msgstr "Внутренняя ошибка потока данных."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Для воспроизведения этого потока требуется модуль %s, но он не установлен."
+
+msgid "Could not determine type of stream"
+msgstr "Не удалось определить тип потока"
+
+msgid "This appears to be a text file"
+msgstr "Этот файл является текстовым"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Отсутствует элемент «%s» — проверьте правильность установки GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Отсутствуют элементы autovideosink и %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Отсутствует элемент autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Настроенный videosink %s не работает."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Элементы autovideosink и %s не работают."
+
+msgid "The autovideosink element is not working."
+msgstr "Элемент autovideosink не работает."
+
+msgid "Custom text sink element is not usable."
+msgstr "Входной элемент пользовательского текста не работоспособен."
+
+msgid "No volume control found"
+msgstr "Не найден элемент управления громкостью"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Отсутствуют элементы autoaudiosink и %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Отсутствует элемент autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Настроенный audiosink %s не работает."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Элементы autoaudiosink и %s не работают."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Элемент autoaudiosink не работает."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Воспроизведение текстового файла без видео или видеотображения невозможно."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Для типа «%s» недоступен декодер."
+
+msgid "No URI specified to play from."
+msgstr "Не указан URI источника воспроизведения."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Неверный URI «%s»."
+
+msgid "This stream type cannot be played yet."
+msgstr "Воспроизведение этого потока в данный момент невозможно."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Для «%s» не реализован обработчик URI."
+
+msgid "Source element is invalid."
+msgstr "Неверный элемент источника."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Ошибка отправки данных в «%s:%d»."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "В соединении с %s:%d отказано."
+
+msgid "Can't record audio fast enough"
+msgstr "Невозможна запись аудио с достаточной скоростью"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Не удалось прочитать тег: недостаточно данных"
+
+msgid "track ID"
+msgstr "ID дорожки"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz ID дорожки"
+
+msgid "artist ID"
+msgstr "ID исполнителя"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz ID исполнителя"
+
+msgid "album ID"
+msgstr "ID альбома"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz ID альбома"
+
+msgid "album artist ID"
+msgstr "ID исполнителя альбома"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz ID исполнителя альбома"
+
+msgid "track TRM ID"
+msgstr "ID TRM дорожки"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr "выдержка при съёмке"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Выдержка при съёмке изображения, в секундах"
+
+msgid "capturing focal ratio"
+msgstr "диафрагменное число при съёмке"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Диафрагменное число (f) при съёмке изображения"
+
+msgid "capturing focal length"
+msgstr "фокусное расстояние при съёмке"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Фокусное расстояние зеркала при съёмке изображения, в мм"
+
+msgid "capturing digital zoom ratio"
+msgstr "коэффициент цифрового трансфокатора при съёмке"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Коэффициент цифрового трансфокатора при съёмке изображения"
+
+msgid "capturing iso speed"
+msgstr "чувствительность ISO при съёмке"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Чувствительность ISO при съёмке изображения"
+
+msgid "capturing exposure program"
+msgstr "программа экспозиции при съёмке"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Программа экспозиции при съёмке изображения"
+
+msgid "capturing exposure mode"
+msgstr "режим экспозиции при съёмке"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Режим экспозиции при съёмке изображения"
+
+msgid "capturing exposure compensation"
+msgstr "компенсация экспозиции при съёмке"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Компенсация экспозиции при съёмке изображения"
+
+msgid "capturing scene capture type"
+msgstr "тип сцены при съёмке"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Тип сцены при съёмке изображения"
+
+msgid "capturing gain adjustment"
+msgstr "регулировка усиления при съёмке"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Итоговая настройка усиления, применяемая к изображению"
+
+msgid "capturing white balance"
+msgstr "баланс белого при съёмке"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Режим баланса белого при съёмке изображения"
+
+msgid "capturing contrast"
+msgstr "контрастность при съёмке"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Направление обработки контраста при съёмке изображения"
+
+msgid "capturing saturation"
+msgstr "насыщенность при съёмке"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Направление обработки насыщенности при съёмке изображения"
+
+msgid "capturing sharpness"
+msgstr "резкость при съёмке"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Направление обработки резкости при съёмке изображения"
+
+msgid "capturing flash fired"
+msgstr "вспышка при съёмке"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Сработала ли вспышка при съёмке изображения"
+
+msgid "capturing flash mode"
+msgstr "режим вспышки при съёмке"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Выбранный режим для вспышки при съёмке изображения"
+
+msgid "capturing metering mode"
+msgstr "режим замера при съёмке"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Режим замера, использованный для определения экспозиции при съёмке "
+"изображения"
+
+msgid "capturing source"
+msgstr "источник для съёмки"
+
+msgid "The source or type of device used for the capture"
+msgstr "Источник или тип устройства, использованный для съёмки"
+
+msgid "image horizontal ppi"
+msgstr "изображение в ppi по горизонтали"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Горизонтальная плотность носителя (изображение/видео) в ppi"
+
+msgid "image vertical ppi"
+msgstr "изображение в ppi по вертикали"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Вертикальная плотность носителя (изображение/видео) в ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "На CD нет звуковых дорожек"
+
+msgid "ID3 tag"
+msgstr "ID3-тег"
+
+msgid "APE tag"
+msgstr "APE-тег"
+
+msgid "ICY internet radio"
+msgstr "Интернет-радио ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Lossless"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Lossless MSZH"
+
+msgid "Run-length encoding"
+msgstr "RLE-сжатие"
+
+msgid "Sami subtitle format"
+msgstr "Формат субтитров Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Формат субтитров TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Формат субтитров Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Несжатый YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Несжатое полутоновое изображение"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Несжатый YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Несжатое %d-битное %s-изображение с палитрой"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Версия %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Несжатый YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Несжатое %d-битное PCM-аудио"
+
+msgid "Audio CD source"
+msgstr "Источник аудио-CD"
+
+msgid "DVD source"
+msgstr "Источник DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Источник протокола Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Источник протокола Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Источник протокола %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "RTP-разгрузчик %s-видео"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "RTP-разгрузчик %s-аудио"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "RTP-разгрузчик %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Демуксер %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Декодер %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "RTP-нагрузчик %s-видео"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "RTP-нагрузчик %s-аудио"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "RTP-нагрузчик %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Муксер %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Кодировщик %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Элемент GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Неизвестный элемент-источник"
+
+msgid "Unknown sink element"
+msgstr "Неизвестный элемент-приёмник"
+
+msgid "Unknown element"
+msgstr "Неизвестный элемент"
+
+msgid "Unknown decoder element"
+msgstr "Неизвестный элемент-декодер"
+
+msgid "Unknown encoder element"
+msgstr "Неизвестный элемент-кодировщик"
+
+msgid "Plugin or element of unknown type"
+msgstr "Модуль или элемент неизвестного типа"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Несжатый планарный YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Несжатый планарный YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Несжатый смешанный YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Несжатый смешанный YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Несжатый смешанный YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Несжатый смешанный YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Несжатый смешанный YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Несжатый планарный YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Несжатый планарный YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Несжатая чёрно-белая Y-плоскость"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Несжатое PCM-аудио"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Несжатое %d-битное аудио с плавающей точкой"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Несжатое аудио с плавающей точкой"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Не удалось открыть vfs-файл «%s» для записи: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Не указано имя файла"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Не удалось закрыть vfs-файл «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Ошибка записи в файл «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Неверный URI субтитров «%s», субтитры выключены."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Воспроизведение RTSP-потоков в данный момент невозможно."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Не удалось создать элемент «decodebin»."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Обнаружен только поток субтитров. Либо вы загружаете файл субтитров или "
+#~ "иной текстовый файл, либо медиа-файл не распознан."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Не установлен требуемый декодер для обработки этого файла. Возможно, вам "
+#~ "следует поставить необходимые модули."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Файл не является медиа-файлом"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Обнаружен только поток субтитров, поток видео не обнаружен."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Отсутствуют элементы autovideosink и xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Отсутствуют элементы autoaudiosink и alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Не указано устройство."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Устройство «%s» не существует."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Устройство «%s» уже используется."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Не удалось открыть устройство «%s» для чтения и записи."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Ошибка отправки данных заголовка gdp в «%s:%d»."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Ошибка отправки данных gdp в «%s:%d»."
+
+#~ msgid "No file name specified."
+#~ msgstr "Не указано имя файла."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Не удалось открыть файл «%s» для чтения."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Не удалось создать элемент «decodebin2»."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Не удалось создать элемент «queue2»."
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644
index 0000000..c92a053
--- /dev/null
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..15c0e1a
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,651 @@
+# Slovak translations for gst-plugins-base.
+# This file is put in the public domain.
+#
+# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-11-08 15:34+0100\n"
+"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+
+msgid "Master"
+msgstr "Hlavný"
+
+msgid "Bass"
+msgstr "Basy"
+
+msgid "Treble"
+msgstr "Výšky"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synth"
+
+msgid "Line-in"
+msgstr "Line-in"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofón"
+
+msgid "PC Speaker"
+msgstr "Reproduktor"
+
+msgid "Playback"
+msgstr "Prehrávanie"
+
+msgid "Capture"
+msgstr "Zachytávanie"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Nepodarilo sa otvoriť zariadenie pre prehrávanie v režime mono."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Nepodarilo sa otvoriť zariadenie pre prehrávanie v režime stereo."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr ""
+"Nepodarilo sa otvoriť zariadenie pre prehrávanie v %d-kanálovom režime."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Nepodarilo sa otvoriť zvukové zariadenie pre prehrávanie. Zariadenie už "
+"používa iná aplikácia."
+
+msgid "Could not open audio device for playback."
+msgstr "Nepodarilo sa otvoriť zvukové zariadenie pre prehrávanie."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Nepodarilo sa otvoriť zariadenie pre nahrávanie v režime mono."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Nepodarilo sa otvoriť zariadenie pre nahrávanie v režime stereo."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Nepodarilo sa otvoriť zariadenie pre nahrávanie v %d-kanálovom režime."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Nepodarilo sa otvoriť zvukové zariadenie pre nahrávanie. Zariadenie už "
+"používa iná aplikácia."
+
+msgid "Could not open audio device for recording."
+msgstr "Nepodarilo sa otvoriť zvukové zariadenie pre nahrávanie."
+
+msgid "Could not open CD device for reading."
+msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
+
+msgid "Could not seek CD."
+msgstr "Nepodarilo sa nastaviť pozíciu na CD."
+
+msgid "Could not read CD."
+msgstr "Nepodarilo sa čítať CD."
+
+msgid "Internal data stream error."
+msgstr "Vnútorná chyba prúdu údajov."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"Na prehratie tohto prúdu údajov je vyžadovaný zásuvný modul %s, ktorý nie je "
+"nainštalovaný."
+
+msgid "Could not determine type of stream"
+msgstr "Nepodarilo sa zistiť typ prádu údajov"
+
+msgid "This appears to be a text file"
+msgstr "Tento súbor je asi textový"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Chýa prvok '%s' - skontrolujte svoju inštaláciu GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Chýbajú prvky autovideosink aj %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Chýba prvok autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Nastavený videosink %s nefunguje."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Nefungujú prvky autovideosink a %s."
+
+msgid "The autovideosink element is not working."
+msgstr "Nefunguje prvok autovideosink."
+
+msgid "Custom text sink element is not usable."
+msgstr "Používateľský textový prvok sink nie je použiteľný."
+
+msgid "No volume control found"
+msgstr "+Ziadny ovl8da4 hlasitosti sa nena3iel"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Chýbajú prvky autoaudiosink aj %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Chýba prvok autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Nastavený audiosink %s nefunguje."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Nefungujú prvky autoaudiosink aj %s."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Nefunguje prvok autoaudiosink."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Nemôžem prehrať textový súbor bez videa alebo vizualizácií."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Pre typ '%s' nie je k dispozícii dekodér."
+
+msgid "No URI specified to play from."
+msgstr "Nebolo špecifikované žiadne URI, z ktorého by sa dalo prehrávať."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Chybné URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Tento typ prúdu údajov sa teraz nedá prehrávať."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Pre \"%s\" nie je implementovaná obsluha."
+
+msgid "Source element is invalid."
+msgstr "Zdrojový prvok je chybný."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Chyba pri posielaní údajov do \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Spojenie s %s:%d bolo odmietnuté."
+
+msgid "Can't record audio fast enough"
+msgstr "Zvuk sa nedá nahrávať dostatočne rýchlo"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Načítanie značky zlyhalo: málo údajov"
+
+msgid "track ID"
+msgstr "ID stopy"
+
+msgid "MusicBrainz track ID"
+msgstr "ID stopy MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID umelca"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID umelca MusicBrainz"
+
+msgid "album ID"
+msgstr "ID albumu"
+
+msgid "MusicBrainz album ID"
+msgstr "ID albumu MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID umelca albumu"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID umelca albumu MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ID TRM stopy"
+
+msgid "MusicBrainz TRM ID"
+msgstr "ID TRM MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "zachytávacia rýchlosť uzávierky"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Rýchlosť uzávierky použitá pri zachytávaní obrázku, v sekundách"
+
+msgid "capturing focal ratio"
+msgstr "zachytávacií pomer F"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Pomer (číslo F) použitý pri zachytávaní obrázku"
+
+msgid "capturing focal length"
+msgstr "zachytávacia ohnisková vzdialenosť"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Ohnisková vzdialenosť objektívu pri zachytávaní obrázku, v mm"
+
+msgid "capturing digital zoom ratio"
+msgstr "zachytávací pomer digitálneho priblíženia"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Pomer digitálneho priblíženia použitý pri zachytávaní obrázku"
+
+msgid "capturing iso speed"
+msgstr "zachytávacia rýchlosť ISO"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Rýchlosť ISO použítá pri zachytávaní obrázku"
+
+msgid "capturing exposure program"
+msgstr "zachytávací program expozície"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Program expozície použitý pri zachytávaní obrázko"
+
+msgid "capturing exposure mode"
+msgstr "zachytávací režim expozície"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Režim expozície použitý pri zachytávaní obrázku"
+
+#, fuzzy
+msgid "capturing exposure compensation"
+msgstr "zachytávací režim expozície"
+
+#, fuzzy
+msgid "The exposure compensation used when capturing an image"
+msgstr "Režim expozície použitý pri zachytávaní obrázku"
+
+msgid "capturing scene capture type"
+msgstr "zachytávací typ zachytenia scény"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Režim zachytenia scény použitý pri zachytávaní obrázku"
+
+msgid "capturing gain adjustment"
+msgstr "zachytávacie nastavenie zisku"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Celkové nastavenie zisku aplikovaného na obrázok"
+
+msgid "capturing white balance"
+msgstr "zachytávacie vyváženie bielej"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Režim vyváženia bielej nastavený pri zachytávaní obrázku"
+
+msgid "capturing contrast"
+msgstr "zachytávací kontrast"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Smerovanie spracovania kontrastu použitého pri zachytávaní obrázku"
+
+msgid "capturing saturation"
+msgstr "zachytávacia sýtosť"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Smerovanie spracovania sýtosti použitého pri zachytávaní obrázku"
+
+msgid "capturing sharpness"
+msgstr "zachytávacia ostrosť"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Smerovanie spracovania ostrosti použitého pri zachytávaní obrázku"
+
+msgid "capturing flash fired"
+msgstr "zachytávací blesk"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Bol alebo nebol použitý blesk pri zachytávaní obrázku"
+
+msgid "capturing flash mode"
+msgstr "zachytávací režim blesku"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Vybraný režim blesku pri zachytávaní obrázku"
+
+msgid "capturing metering mode"
+msgstr "zachytávacie meranie blesku"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Režim merania blesku pri zisťovaní expozície pre zachytenie obrázku"
+
+msgid "capturing source"
+msgstr "zachytávací zdroj"
+
+msgid "The source or type of device used for the capture"
+msgstr "Zdroj alebo typ zariadenia použitý na zachytenie"
+
+msgid "image horizontal ppi"
+msgstr "vodorovné ppi obrázku"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Cieľová vodorovná hustota pixlov média (obrázku/videa) v ppi"
+
+msgid "image vertical ppi"
+msgstr "zvislé ppi obrázku"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Cieľová zvislá hustota pixlov média (obrázku/videa) v ppi"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Toto CD nemá zvukové stopy"
+
+msgid "ID3 tag"
+msgstr "ID3 značka"
+
+msgid "APE tag"
+msgstr "APE značka"
+
+msgid "ICY internet radio"
+msgstr "Internetové rádio ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Bezstratový zvuk Apple (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Slobodný bezstratový zvukový kodek (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Bezstratový verný zvuk (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Reč"
+
+msgid "CYUV Lossless"
+msgstr "Bezstratové CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Bezstratové MSZH"
+
+msgid "Run-length encoding"
+msgstr "Kódovanie počas prehrávania"
+
+msgid "Sami subtitle format"
+msgstr "Formát titulkov sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Titulkový formát TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Formát titulkov Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Nekomprimovaný šedotónový obrázok"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nekomprimovaný paletizovaný %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Verzie %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nekomprimovaný YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Surový %d-bit PCM zvuk"
+
+msgid "Audio CD source"
+msgstr "Zdroj zvukové CD"
+
+msgid "DVD source"
+msgstr "Zdroj DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Zdroj Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Zdroj protokolu Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "zdroj protokolu %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s dekodér"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s muxer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s enkodér"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Prvok GStreamera %s"
+
+msgid "Unknown source element"
+msgstr "Neznámy zdrojový prvok"
+
+msgid "Unknown sink element"
+msgstr "Neznámy prvok sink"
+
+msgid "Unknown element"
+msgstr "Neznámy prvok"
+
+msgid "Unknown decoder element"
+msgstr "Neznámy prvok dekodéra"
+
+msgid "Unknown encoder element"
+msgstr "Neznámy prvok enkodéra"
+
+msgid "Plugin or element of unknown type"
+msgstr "Neznámy typ zásuvného modulu alebo prvku"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nekomprimovaný planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nekomprimovaný planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nekomprimovaný pakovaný YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nekomprimovaný planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nekomprimovaný planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nekomprimovaný čierno-biely Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Surový PCM zvuk"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Surový %d-bit zvuk s pohyblivou desatinnou čiarkou"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Surový zvuk s pohyblivou desatinnou čiarkou"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nepodarilo sa otvoriť vfs súbor \"%s\" pre zápis: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nebol zadaný názov súboru"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Nepodarilo sa zatvoriť súbor \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Chyba pri zápise do súboru \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Chybné URI titulkov \"%s\", titulky zakázané."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP prúdy sa teraz nedajú prehrávať."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Nepodarilo sa vytvoriť prvok \"decodebin\""
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Bol zistený iba prúd titulkov. Buď načítavate titulkový súbor alebo "
+#~ "nejaký iný typ textového súboru, alebo ide o neznámy typ mediálneho "
+#~ "súboru."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Nemáte nainštalovaný dekodér pre tento typ súboru. Zrejme bude potrebné "
+#~ "nainštalovať príslušné zásuvné moduly."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Toto nie je mediálny súbor"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Bol zistený prúd titulkov, ale bez video prúdu údajov."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Chýbajú prvky autovideosink aj xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Chýbajú prvky autoaudiosink aj alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Nebolo zadané zariadenie."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Zariadenie \"%s\" neexistuje."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Zariadenie \"%s\" sa už používa."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nepodarilo sa otvoriť zariadenie  \"%s\" pre čítanie a zápis."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Chyba pri posielaní hlavičky gdp údajov do \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Chyba pri posielaní gdp záťažových údajov do \"%s:%d\"."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Nemôžem zobrazovať naraz textové titulky aj podobrázky."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Nebol zadaný dočasný adresár (Temp)."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Nepodarilo sa vytvoriť dočasný súbor \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Nepodarilo sa otvoriť súbor \"%s\" na čítanie."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Nepodarilo sa vytvoriť prvok \"decodebin2\"."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Nepodarilo sa vytvoriť prvok \"queue2\"."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Nepodarilo sa vytvoriť prvok \"typefind\""
+
+#~ msgid "No file name specified."
+#~ msgstr "Nebolo zadané meno súboru."
+
+#~ msgid "artist sortname"
+#~ msgstr "katalógové meno umelca"
+
+#~ msgid "MusicBrainz artist sortname"
+#~ msgstr "katalógové meno umelca pre MusicBrainz"
diff --git a/po/sl.gmo b/po/sl.gmo
new file mode 100644
index 0000000..a8ed7dd
--- /dev/null
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..a65c6af
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,644 @@
+# Slovenian translation for gst-plugins-base.
+# Copyright (C) 2005 - 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Matej Urbančič <matej.urban@gmail.com>, 2010.
+# Klemen Košir <klemen.kosir@gmx.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-26 15:56+0100\n"
+"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+msgid "Master"
+msgstr "Glavni"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Visoki toni"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizator"
+
+msgid "Line-in"
+msgstr "Analogni vhod"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "Računalniški zvočnik"
+
+msgid "Playback"
+msgstr "Predvajanje"
+
+msgid "Capture"
+msgstr "Zajemanje"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Naprave ni mogoče odpreti za predvajanje v mono načinu."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Naprave ni mogoče odpreti za predvajanje v stereo načinu."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Naprave ni mogoče odpreti za predvajanje v %d-kanalnem načinu."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Zvočne naprave ni mogoče odpreti za predvajanje. Napravo uporablja drug "
+"program."
+
+msgid "Could not open audio device for playback."
+msgstr "Zvočne naprave ni mogoče odpreti za predvajanje."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Naprave ni mogoče odpreti za snemanje v mono načinu."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Naprave ni mogoče odpreti za snemanje v stereo načinu."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Naprave ni mogoče odpreti za snemanje v %d-kanalnem načinu."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Zvočne naprave ni mogoče odpreti za snemanje. Napravo uporablja drug program."
+
+msgid "Could not open audio device for recording."
+msgstr "Zvočne naprave ni mogoče odpreti za snemanje."
+
+msgid "Could not open CD device for reading."
+msgstr "Naprave CD ni mogoče odpreti za branje."
+
+msgid "Could not seek CD."
+msgstr "Po CD-ju ni mogoče iskati."
+
+msgid "Could not read CD."
+msgstr "CD-ja ni mogoče prebrati."
+
+msgid "Internal data stream error."
+msgstr "Notranja napaka pretoka podatkov."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Za predvajanje tega pretoka je potreben vstavek %s, ki pa ni nameščen."
+
+msgid "Could not determine type of stream"
+msgstr "Vrste pretoka ni mogoče določiti."
+
+msgid "This appears to be a text file"
+msgstr "Datoteka je videti kot besedilna datoteka"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Predmet '%s' manjka - preverite namestitev paketa GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Predmeta autovideosink in %s manjkata."
+
+msgid "The autovideosink element is missing."
+msgstr "Predmet autovideosink manjka."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Nastavljeni predmet videosink %s ne deluje."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Predmeta autovideosink in %s ne delujeta."
+
+msgid "The autovideosink element is not working."
+msgstr "Predmet autovideosink ne deluje."
+
+msgid "Custom text sink element is not usable."
+msgstr "Predmet ponora besedila po meri ni uporaben."
+
+msgid "No volume control found"
+msgstr "Nadzornika glasnosti ni mogoče najti"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Predmeta autoaudiosink in %s manjkata."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Predmet autoaudiosink manjka."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Nastavljeni predmet autosink %s ne deluje."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Predmeta autovideosink in %s ne delujeta."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Predmet autovideosink ne deluje."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Besedilne datoteke ni mogoče predvajati brez videa ali predočenja."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Za vrsto \"%s\" ni ustreznega odkodirnika."
+
+msgid "No URI specified to play from."
+msgstr "Ni navedenega naslova URI za predvajanje."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Neveljaven URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Te vrste pretoka še ni mogoče predvajati."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Ni ročnika naslovov URI za \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Izvorni predmet je neveljaven."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Napaka med pošiljanjem podatkov na \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Povezava s %s:%d zavrnjena."
+
+msgid "Can't record audio fast enough"
+msgstr "Ni mogoče dovolj hitro snemati zvoka"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Oznake ni mogoče prebrati: ni dovolj podatkov"
+
+msgid "track ID"
+msgstr "ID sledi"
+
+msgid "MusicBrainz track ID"
+msgstr "ID sledi MusicBrainz"
+
+msgid "artist ID"
+msgstr "ID izvajalca"
+
+msgid "MusicBrainz artist ID"
+msgstr "ID izvajalca MusicBrainz"
+
+msgid "album ID"
+msgstr "ID albuma"
+
+msgid "MusicBrainz album ID"
+msgstr "ID albuma MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ID izvajalca albuma"
+
+msgid "MusicBrainz album artist ID"
+msgstr "ID izvajalca albuma MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "TRM ID sledi"
+
+msgid "MusicBrainz TRM ID"
+msgstr "TRM ID MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "hitrost zaslonke"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Hitrost zaslonke, uporabljene med zajemanjem slike (v sekundah)"
+
+msgid "capturing focal ratio"
+msgstr "goriščno razmerje med zajemanjem"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Goriščno razmerje, uporabljeno med zajemanjem slike"
+
+msgid "capturing focal length"
+msgstr "goriščna razdalja med zajemanjem"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Goriščna razdalja leč, uporabljena med zajemanjem slike"
+
+msgid "capturing digital zoom ratio"
+msgstr "razmerje digitalnega približevanja med zajemanjem"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Razmerje digitalnega približevanja, uporabljeno med zajemanjem slike"
+
+msgid "capturing iso speed"
+msgstr "hitrost ISO zajema"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Hitrost ISO, uporabljena med zajemanjem slike"
+
+msgid "capturing exposure program"
+msgstr "program osvetlitve zajema"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Program osvetlitve, uporabljen med zajemanjem slike"
+
+msgid "capturing exposure mode"
+msgstr "način osvetlitve zajema"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Program osvetlitve, uporabljen med zajemanjem slike"
+
+msgid "capturing exposure compensation"
+msgstr "nadomestitev osvetlitve zajema"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Nadomestitev osvetlitve, uporabljena med zajemanjem slike"
+
+msgid "capturing scene capture type"
+msgstr "vrsta zajemanja scene med zajemanjem"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Način zajemanja scene, uporabljen med zajemanjem slike"
+
+msgid "capturing gain adjustment"
+msgstr "prilagoditev ojačitve med zajemanjem"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Skupna prilagoditev ojačitve slike"
+
+msgid "capturing white balance"
+msgstr "ravnotežje bele barve zajema"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Način ravnotežja bele barve, uporabljen med zajemanjem slike"
+
+msgid "capturing contrast"
+msgstr "kontrast zajema"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Smer kontrasta, uporabljenega med zajemanjem slike"
+
+msgid "capturing saturation"
+msgstr "nasičenost zajema"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Smer nasičenosti, uporabljene med zajemanjem slike"
+
+msgid "capturing sharpness"
+msgstr "ostrina zajema"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Smer ostrine, uporabljene med zajemanjem slike"
+
+msgid "capturing flash fired"
+msgstr "sproženje bliskavice med zajemanjem"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Ali je med zajemanjem slike bliskavica sprožena"
+
+msgid "capturing flash mode"
+msgstr "način bliskavice med zajemanjem"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Izbrani način bliskavice, uporabljene med zajemanjem slike"
+
+msgid "capturing metering mode"
+msgstr "način umerjanja med zajemanjem"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Način umerjanja, uporabljen med določevanjem osvetljenosti zajemanja slike"
+
+msgid "capturing source"
+msgstr "vir zajema"
+
+msgid "The source or type of device used for the capture"
+msgstr "Vir ali vrsta naprave, uporabljene za zajemanje"
+
+msgid "image horizontal ppi"
+msgstr "vodoravne slikovne točke slike (ppi)"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Gostota vodoravnih slikovnih točk (v ppi)"
+
+msgid "image vertical ppi"
+msgstr "navpične slikovne točke slike (ppi)"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Gostota navpičnih slikovnih točk (v ppi)"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Ta CD nima zvočnih sledi"
+
+msgid "ID3 tag"
+msgstr "Oznaka ID3"
+
+msgid "APE tag"
+msgstr "Oznaka APE"
+
+msgid "ICY internet radio"
+msgstr "Internetni radio ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Govor Windows Media"
+
+msgid "CYUV Lossless"
+msgstr "Brezizgubni CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Brezizgubni MSZH"
+
+msgid "Run-length encoding"
+msgstr "Kodiranje trajanja izvajanja"
+
+msgid "Sami subtitle format"
+msgstr "Oblika podnapisov Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Oblika podnapisov TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Oblika podnapisov Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Nestisnjen YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Nestisnjena sivinska slika"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Nestisnjen YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Nestisnjen paletni %d-bitni %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 različice %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Nestisnjen YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Surovi %d-bitni zvok PCM"
+
+msgid "Audio CD source"
+msgstr "Vir zvočnega CD-ja"
+
+msgid "DVD source"
+msgstr "Vir DVD-ja"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Vir protokola Real Time Streaming Protocol (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Vir protokola Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Vir protokola %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "Razlagalnik video vsebine %s RTP"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "Razlagalnik zvočne vsebine %s RTP"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "Razlagalnik vsebine %s RTP"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "Odvijalnik %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "Odkodirnik %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "Nalagalnik video vsebine %s RTP"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "Nalagalnik zvočne vsebine %s RTP"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "Nalagalnik vsebine %s RTP"
+
+#, c-format
+msgid "%s muxer"
+msgstr "Zvijalnik %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "Kodirnik %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Predmet GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Neznan predmet vira"
+
+msgid "Unknown sink element"
+msgstr "Neznan predmet ponora"
+
+msgid "Unknown element"
+msgstr "Neznan predmet"
+
+msgid "Unknown decoder element"
+msgstr "Neznan predmet odkodirnika"
+
+msgid "Unknown encoder element"
+msgstr "Neznan predmet kodirnika"
+
+msgid "Plugin or element of unknown type"
+msgstr "Vstavek ali predmet neznane vrste"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Nestisnjen ploskovni YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nestisnjen ploskovni YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Nestisnjen pakiran YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nestisnjen pakiran YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nestisnjen pakiran YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nestisnjen pakiran YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nestisnjen pakiran YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nestisnjen ploskovni YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nestisnjen ploskovni YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nestisnjena črno-bela slika Y-ravnine"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Surovi zvok PCM"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Surovi %d-bitni zvok, določen s plavajočo vejico"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Surovi zvok, določen s plavajočo vejico"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "VFS datoteke \"%s\" ni mogoče odpreti za pisanje: %s"
+
+#~ msgid "No filename given"
+#~ msgstr "Ni podanega imena datoteke"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "VFS datoteke \"%s\" ni mogoče zapreti."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Napaka med pisanjem v datoteko \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Neveljaven URI podnapisov \"%s\", zato bodo onemogočeni."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Pretokov RTSP še ni mogoče predvajati."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Predmeta \"decodebin\" ni mogoče ustvariti."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Zaznan je bil le pretok podnapisov. Morda je bila naložena datoteka "
+#~ "podnapisov ali katera druga vrsta besedilne datoteke, ali pa "
+#~ "predstavnostne datoteke ni mogoče prepoznati."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Za to vrsto datotek ni nameščenega ustreznega odkodirnika. Morda je "
+#~ "potrebno namestiti manjkajoče vstavke."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Datoteka ni predstavnostna datoteka"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Zaznan je bil pretok podnapisov, ne pa tudi pretok videa."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Predmeta autovideosink in xvimagesink manjkata."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Predmeta autovideosink in alsasink manjkata."
+
+#~ msgid "No device specified."
+#~ msgstr "Ni navedene naprave."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Naprava \"%s\" ne obstaja."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Naprava \"%s\" je že v uporabi."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Naprave \"%s\" ni mogoče odpreti za branje in pisanje."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Napaka med pošiljanjem podatkov glave GDP na \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Napaka med pošiljanjem podatkov vsebine GDP na \"%s:%d\"."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Ni določenega izvornega pogona"
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Ni mogoče ustvariti datoteke predpomnilnika"
+
+#, fuzzy
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Ni mogoče odpreti CD naprave za branje."
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
+#, fuzzy
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Elementa filesrc ni mogoče ustvariti"
+
+#, fuzzy
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Elementa filesrc ni mogoče ustvariti"
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Elementa filesrc ni mogoče ustvariti"
diff --git a/po/sq.gmo b/po/sq.gmo
new file mode 100644
index 0000000..c81f9e8
--- /dev/null
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
new file mode 100644
index 0000000..d28e5ff
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,689 @@
+# Përkthimi i mesazheve të gst-plugins në shqip.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Laurent Dhima <laurenti@alblinux.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-08-07 20:29+0200\n"
+"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
+"Language-Team: Albanian <begraj@hotmail.com>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Treble"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Sintetizuesi"
+
+msgid "Line-in"
+msgstr "Linja-hyrje"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofoni"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "Zë folës"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "E pamundur hapja e dispozitivit të zërit \"%s\" për shkrim."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+msgid "Could not open CD device for reading."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "I pamundur shkrimi në dispozitivin \"%s\"."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "I pamundur shkrimi tek file \"%s\"."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Gabim gjatë mbylljes së file \"%s\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për shkrim: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Gabim gjatë mbylljes së file \"%s\"."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "Dispozitivi \"%s\" nuk është një dispozitiv marrje."
+
+#~ msgid "No device specified."
+#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Dispozitivi \"%s\" nuk ekziston."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr ""
+#~ "Dispozitivi OSS \"%s\" është duke u përdorur nga një tjetër program."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "I pamundur shkrimi tek file \"%s\"."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "I pamundur shkrimi tek file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file \"%s\" për lexim."
+
+#~ msgid "Device is not open."
+#~ msgstr "Dispozitivi nuk është hapur."
+
+#~ msgid "Device is open."
+#~ msgstr "Dispozitivi është i hapur."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për lexim."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "E pamundur hapja e file \"%s\" në shkrim."
+
+#~ msgid "No filename specified."
+#~ msgstr "Nuk është përcaktuar emri i file."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "E pamundur gjetja e elementit %s. Ky element është thelbësor për "
+#~ "playback. Ju lutem instaloni plug-in e duhur dhe kontrollo funksionimin "
+#~ "duke ekzekutuar 'gst-inspect %s'"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Nuk arrin të gjehet asnjë element ngjyra e hapësirës.\n"
+#~ "Ju lutem instaloni një dhe rinisni."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit të kontrollit \"%s\" për shkrim."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "I pamundur konfigurimi i dispozitivit të zërit \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "I pamundur rregullimi i dispozitivit audio \"%s\" në %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit të kontrollit \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit video \"%s\" për shkrim."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit video \"%s\"."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr ""
+#~ "E pamundur futja në dispozitivin \"%s\", kontrollo të drejtat e tij."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për shkrim."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim."
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "Volume"
+#~ msgstr "Volumi"
+
+#~ msgid "Speaker"
+#~ msgstr "Zë folës"
+
+#~ msgid "Mixer"
+#~ msgstr "Kontrolli i volumit"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Regjistrimi"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Linja-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Linja-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Linja-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dixhitale-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dixhitale-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dixhitale-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-hyrja"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-dalja"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Ekrani"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers të mjaftueshëm nga dispozitivi \"%s\"."
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..2df0a42
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..5792028
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,669 @@
+# Serbian translation of gst-plugins
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Danilo Segan <dsegan@gmx.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.7.6\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2004-03-13 00:18+0100\n"
+"Last-Translator: Danilo Segan <dsegan@gmx.net>\n"
+"Language-Team: Serbian <gnu@prevod.org>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3;    plural=n%10==1 && n%100!=11 ? 0 :  (n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgid "Master"
+msgstr ""
+
+msgid "Bass"
+msgstr "Бас"
+
+msgid "Treble"
+msgstr "Шум"
+
+msgid "PCM"
+msgstr "ПЦМ"
+
+msgid "Synth"
+msgstr "Синт."
+
+msgid "Line-in"
+msgstr "Ул.лин."
+
+msgid "CD"
+msgstr "ЦД"
+
+msgid "Microphone"
+msgstr "Микрофон"
+
+#, fuzzy
+msgid "PC Speaker"
+msgstr "Звучник"
+
+msgid "Playback"
+msgstr ""
+
+msgid "Capture"
+msgstr ""
+
+#, fuzzy
+msgid "Could not open device for playback in mono mode."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy
+msgid "Could not open device for playback in stereo mode."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+
+#, fuzzy
+msgid "Could not open audio device for playback."
+msgstr "Не могу да отворим звучни уређај „%s“ ради уписа."
+
+#, fuzzy
+msgid "Could not open device for recording in mono mode."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy
+msgid "Could not open device for recording in stereo mode."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "Не могу да отворим уређај „%s“ ради читања и уписа."
+
+#, fuzzy
+msgid "Could not open audio device for recording."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+msgid "Could not open CD device for reading."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+#, fuzzy
+msgid "Could not seek CD."
+msgstr "Не могу да затворим ВСД датотеку „%s“."
+
+#, fuzzy
+msgid "Could not read CD."
+msgstr "Не могу да пишем на видео уређај „%s“."
+
+msgid "Internal data stream error."
+msgstr ""
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "Не могу да пишем у датотеку „%s“."
+
+msgid "This appears to be a text file"
+msgstr ""
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr ""
+
+msgid "The autovideosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr ""
+
+msgid "The autovideosink element is not working."
+msgstr ""
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr ""
+
+msgid "The autoaudiosink element is missing."
+msgstr ""
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr ""
+
+msgid "The autoaudiosink element is not working."
+msgstr ""
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr ""
+
+msgid "No URI specified to play from."
+msgstr ""
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr ""
+
+msgid "This stream type cannot be played yet."
+msgstr ""
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr ""
+
+msgid "Source element is invalid."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Грешка при затварању датотеке „%s“."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr ""
+
+msgid "Can't record audio fast enough"
+msgstr ""
+
+msgid "Failed to read tag: not enough data"
+msgstr ""
+
+msgid "track ID"
+msgstr ""
+
+msgid "MusicBrainz track ID"
+msgstr ""
+
+msgid "artist ID"
+msgstr ""
+
+msgid "MusicBrainz artist ID"
+msgstr ""
+
+msgid "album ID"
+msgstr ""
+
+msgid "MusicBrainz album ID"
+msgstr ""
+
+msgid "album artist ID"
+msgstr ""
+
+msgid "MusicBrainz album artist ID"
+msgstr ""
+
+msgid "track TRM ID"
+msgstr ""
+
+msgid "MusicBrainz TRM ID"
+msgstr ""
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr ""
+
+msgid "ID3 tag"
+msgstr ""
+
+msgid "APE tag"
+msgstr ""
+
+msgid "ICY internet radio"
+msgstr ""
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr ""
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+
+msgid "Lossless True Audio (TTA)"
+msgstr ""
+
+msgid "Windows Media Speech"
+msgstr ""
+
+msgid "CYUV Lossless"
+msgstr ""
+
+msgid "FFMpeg v1"
+msgstr ""
+
+msgid "Lossless MSZH"
+msgstr ""
+
+msgid "Run-length encoding"
+msgstr ""
+
+msgid "Sami subtitle format"
+msgstr ""
+
+msgid "TMPlayer subtitle format"
+msgstr ""
+
+msgid "Kate subtitle format"
+msgstr ""
+
+msgid "Uncompressed video"
+msgstr ""
+
+msgid "Uncompressed gray"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr ""
+
+#, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr ""
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr ""
+
+msgid "Uncompressed audio"
+msgstr ""
+
+#, c-format
+msgid "Raw %d-bit %s audio"
+msgstr ""
+
+msgid "Audio CD source"
+msgstr ""
+
+msgid "DVD source"
+msgstr ""
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#, c-format
+msgid "%s muxer"
+msgstr ""
+
+#, c-format
+msgid "%s encoder"
+msgstr ""
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr ""
+
+msgid "Unknown source element"
+msgstr ""
+
+msgid "Unknown sink element"
+msgstr ""
+
+msgid "Unknown element"
+msgstr ""
+
+msgid "Unknown decoder element"
+msgstr ""
+
+msgid "Unknown encoder element"
+msgstr ""
+
+msgid "Plugin or element of unknown type"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Не могу да отворим ВСД датотеку „%s“ ради уписа."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Име датотеке није задато."
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Не могу да затворим ВСД датотеку „%s“."
+
+#, fuzzy
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Грешка при затварању датотеке „%s“."
+
+#, fuzzy
+#~ msgid "This is not a media file"
+#~ msgstr "Уређај „%s“ не представља уређај за снимање."
+
+#~ msgid "No device specified."
+#~ msgstr "Уређај није наведен."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Не постоји уређај „%s“."
+
+#, fuzzy
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "OSS уређај „%s“ већ користи неки програм."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Не могу да отворим уређај „%s“ ради читања и уписа."
+
+#, fuzzy
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Не могу да пишем у датотеку „%s“."
+
+#, fuzzy
+#~ msgid "No Temp directory specified."
+#~ msgstr "Уређај није наведен."
+
+#, fuzzy
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Не могу да пишем у датотеку „%s“."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Не могу да отворим датотеку „%s“ ради читања."
+
+#~ msgid "Device is not open."
+#~ msgstr "Уређај није отворен."
+
+#~ msgid "Device is open."
+#~ msgstr "Уређај је отворен."
+
+# Виртуелни Систем Датотека
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Не могу да отворим ВСД датотеку „%s“ ради читања."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Име датотеке није задато."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Не могу да отворим датотеку „%s“ ради уписа."
+
+#~ msgid "No filename specified."
+#~ msgstr "Име датотеке није задато."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Улазног звука нема или је неисправан, АВИ ток ће бити искварен."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Не могу да отворим управљачки уређај „%s“ ради уписа."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Не могу да подесим звучни уређај „%s“."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Не могу да поставим звучни уређај „%s“ на %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Не могу да отворим радио уређај '%s'"
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Не могу да затворим управљачки уређај „%s“."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Не могу да отворим видео уређај „%s“ ради уписа."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Не могу да затворим видео уређај „%s“."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Не могу да приступим уређају „%s“, проверите његова овлашћења."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Не могу да отворим уређај „%s“ ради уписа."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Не могу да отворим уређај „%s“ ради читања."
+
+#~ msgid "Volume"
+#~ msgstr "Јачина звука"
+
+#~ msgid "Speaker"
+#~ msgstr "Звучник"
+
+#~ msgid "Mixer"
+#~ msgstr "Миксер"
+
+#~ msgid "PCM-2"
+#~ msgstr "ПЦМ-2"
+
+#~ msgid "Record"
+#~ msgstr "Снимање"
+
+#~ msgid "In-gain"
+#~ msgstr "Ул. пој."
+
+#~ msgid "Out-gain"
+#~ msgstr "Из. пој."
+
+#~ msgid "Line-1"
+#~ msgstr "Лин. 1"
+
+#~ msgid "Line-2"
+#~ msgstr "Лин. 2"
+
+#~ msgid "Line-3"
+#~ msgstr "Лин. 3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Диг. 1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Диг. 2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Диг. 3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Тел. ул."
+
+#~ msgid "Phone-out"
+#~ msgstr "Тел. из."
+
+#~ msgid "Video"
+#~ msgstr "Видео"
+
+#~ msgid "Radio"
+#~ msgstr "Радио"
+
+#~ msgid "Monitor"
+#~ msgstr "Праћење"
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Не могу да примим бафере са уређаја „%s“."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Не могу да примим довољно бафера са уређаја „%s“."
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..1f41398
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..3ddf692
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1783 @@
+# Swedish messages for gst-plugins-base.
+# Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Christian Rose <menthos@menthos.com>, 2004.
+# Daniel Nylander <po@danielnylander.se>, 2007, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-06-07 18:17+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Övergripande"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Diskant"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synt"
+
+msgid "Line-in"
+msgstr "Linje-in"
+
+msgid "CD"
+msgstr "Cd"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC-högtalare"
+
+msgid "Playback"
+msgstr "Uppspelning"
+
+msgid "Capture"
+msgstr "Fångst"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Kunde inte öppna enheten för uppspelning i monoläge."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Kunde inte öppna enheten för uppspelning i stereoläge."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Kunde inte öppna enheten för uppspelning i %d-kanalsläge."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Kunde inte öppna ljudenheten för uppspelning. Enheten används av ett annat "
+"program."
+
+msgid "Could not open audio device for playback."
+msgstr "Kunde inte öppna ljudenheten för uppspelning."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Kunde inte öppna enheten för inspelning i monoläge."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Kunde inte öppna enheten för inspelning i stereoläge."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Kunde inte öppna enheten för inspelning i %d-kanalsläge."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Kunde inte öppna ljudenheten för inspelning. Enheten används av ett annat "
+"program."
+
+msgid "Could not open audio device for recording."
+msgstr "Kunde inte öppna ljudenheten för inspelning."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunde inte öppna cd-enheten för läsning."
+
+msgid "Could not seek CD."
+msgstr "Kunde inte söka på cd-skivan."
+
+msgid "Could not read CD."
+msgstr "Kunde inte läsa cd-skivan."
+
+msgid "Internal data stream error."
+msgstr "Internt dataströmfel."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr ""
+"En %s-insticksmodul krävs för att spela upp den här strömmen men är inte "
+"installerad."
+
+msgid "Could not determine type of stream"
+msgstr "Kunde inte fastställa typ av ström"
+
+msgid "This appears to be a text file"
+msgstr "Den här ser ut att vara en textfil"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Saknar elementet \"%s\" - kontrollera din GStreamer-installation."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Både autovideosink- och %s-elementet saknas."
+
+msgid "The autovideosink element is missing."
+msgstr "Elementet autovideosink saknas."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Konfigurerat videosink %s fungerar inte."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Det finns både autovideosink- och %s-element som inte fungerar."
+
+msgid "The autovideosink element is not working."
+msgstr "Elementet autovideosink fungerar inte."
+
+msgid "Custom text sink element is not usable."
+msgstr "Anpassat text sink-element är inte användbart."
+
+msgid "No volume control found"
+msgstr "Ingen volymkontroll hittades"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Både autoaudiosink- och %s-elementet saknas."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Elementet autoaudiosink saknas."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Konfigurerat audiosink %s fungerar inte."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Det finns både autoaudiosink- och %s-element som inte fungerar.."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Elementet autoaudiosink fungerar inte."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Kan inte spela upp en textfil utan video eller visualiseringar."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Ingen avkodare finns tillgänglig för typen \"%s\"."
+
+msgid "No URI specified to play from."
+msgstr "Ingen uri angiven att spela upp från."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Ogiltig uri \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Den här strömtypen kan inte spelas upp än."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Ingen URI-hanterare implementerad för \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Källelementet är ogiltigt."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Fel vid sändning av data till \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Anslutningen till %s:%d nekades."
+
+msgid "Can't record audio fast enough"
+msgstr "Kan inte spela in ljud tillräckligt snabbt"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Misslyckades med att läsa tagg: inte tillräckligt mycket data"
+
+msgid "track ID"
+msgstr "spår-id"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz spår-id"
+
+msgid "artist ID"
+msgstr "artist-id"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz artist-id"
+
+msgid "album ID"
+msgstr "album-id"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz album-id"
+
+msgid "album artist ID"
+msgstr "albumartist-id"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albumartist-id"
+
+msgid "track TRM ID"
+msgstr "spår TRM-ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM-ID"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Den här cd-skivan saknar ljudspår"
+
+msgid "ID3 tag"
+msgstr "ID3-tagg"
+
+msgid "APE tag"
+msgstr "APE-tagg"
+
+msgid "ICY internet radio"
+msgstr "ICY internetradio"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "Förlustfri CYUV"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Förlustfri MSZH"
+
+msgid "Run-length encoding"
+msgstr "Körlängdskodning"
+
+msgid "Sami subtitle format"
+msgstr "Undertextformatet Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Undertextformatet TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Undertextformatet Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Okomprimerad YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Okomprimerad gråskalebild"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Okomprimerad YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Okomprimerad palettiserad %d-bitars %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 version %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Okomprimerad YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Rått %d-bitars PCM-ljud"
+
+msgid "Audio CD source"
+msgstr "Ljud-cd-källa"
+
+msgid "DVD source"
+msgstr "Dvd-källa"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Real Time Streaming Protocol-källa (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Media Server-protokollkälla (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s-protokollkälla"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s RTP-uppackare (video)"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s RTP-uppackare (ljud)"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP-uppackare"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s-avmultiplexor"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s-avkodare"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s RTP-packare (video)"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s RTP-packare (ljud)"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP-packare"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s-multiplexor"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s-kodare"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer-elementet %s"
+
+msgid "Unknown source element"
+msgstr "Okänt source-element"
+
+msgid "Unknown sink element"
+msgstr "Okänt sink-element"
+
+msgid "Unknown element"
+msgstr "Okänt element"
+
+msgid "Unknown decoder element"
+msgstr "Okänt avkodarelement"
+
+msgid "Unknown encoder element"
+msgstr "Okänt kodarelement"
+
+msgid "Plugin or element of unknown type"
+msgstr "Insticksmodul eller element av okänd typ"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Okomprimerad plan YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Okomprimerad plan YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Okomprimerad paketerad YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Okomprimerad paketerad YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Okomprimerad paketerad YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Okomprimerad paketerad YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Okomprimerad paketerad YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Okomprimerad plan YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Okomprimerad plan YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Okomprimerad svartvitt y-plan"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Rått PCM-ljud"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Rått %d-bitars flyttalsljud"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Rått flyttalsljud"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kunde inte öppna vfs-filen \"%s\" för skrivning: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Inget filnamn angivet"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Kunde inte stänga vfs-filen \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Fel vid skrivning till filen \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Ogiltig uri för undertext \"%s\", undertexter inaktiverade."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP-strömmar kan inte spelas upp än."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Kunde inte skapa \"decodebin\"-element."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Endast en undertextström identifierades. Antingen läser du in en "
+#~ "undertextfil eller någon annan typ av textfil, eller så kändes inte "
+#~ "mediafilen igen."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Du har inte en installerad avkodare som kan hantera den här filen. Du "
+#~ "kanske behöver installera de nödvändiga insticksmodulerna."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Det här är inte en mediafil"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "En undertextström identifierades men ingen videoström."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Både autovideosink- och xvimagesink-elementet saknas."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Både autoaudiosink- och alsasink-elementet saknas."
+
+#~ msgid "No device specified."
+#~ msgstr "Ingen enheten angiven."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Enheten \"%s\" finns inte."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Enheten \"%s\" används redan."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kunde inte öppna enheten \"%s\" för läsning och skrivning."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Fel vid sändning av gdp-huvuddata till \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Fel vid sändning av gdp-paketdata till \"%s:%d\"."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Kan inte visa både undertexter och underbilder."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Ingen temporärkatalog har angivits."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Kunde inte skapa temporärfilen \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Kunde inte öppna filen \"%s\" för läsning."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Internt dataflödesfel."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Kunde inte skapa \"decodebin2\"-element."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Kunde inte skapa \"queue2\"-element."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Kunde inte skapa \"typefind\"-element."
+
+#~ msgid "No file name specified."
+#~ msgstr "Inget filnamn angivet."
+
+#~ msgid "artist sortname"
+#~ msgstr "artistsorteringsnamn"
+
+#~ msgid "MusicBrainz artist sortname"
+#~ msgstr "MusicBrainz sorteringsnamn för artist"
+
+#~ msgid "discid"
+#~ msgstr "skiv-id"
+
+#~ msgid "Device is not open."
+#~ msgstr "Enheten är inte öppen."
+
+#~ msgid "Device is open."
+#~ msgstr "Enheten är öppen."
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Kunde inte öppna vfs-filen \"%s\" för läsning."
+
+#~ msgid "No filename given."
+#~ msgstr "Inget filnamn angivet."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Kunde inte öppna filen \"%s\" för skrivning."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Inget eller ogiltigt inljud. AVI-flödet kommer att skadas."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "Elementet %s kunde inte hittas. Detta element är nödvändigt för "
+#~ "uppspelning. Installera rätt insticksmodul och verifiera att den fungerar "
+#~ "genom att köra \"gst-inspect %s\""
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Inget användbart namnrymdselement kunde hittas.\n"
+#~ "Installera ett och starta om."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Kunde inte öppna ljudenheten \"%s\" för skrivning."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Kunde inte öppna styrenheten \"%s\" för skrivning."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Kunde inte konfigurera ljudenheten \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Kan inte ställa in ljudenheten \"%s\" till %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Kunde inte stänga ljudenheten \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Kunde inte stänga styrenheten \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Kunde inte öppna videoenheten \"%s\" för skrivning."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Kunde inte stänga vidoeenheten \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Kunde inte skriva till enheten \"%s\"."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Kunde inte komma åt enheten \"%s\". Kontrollera dess rättigheter."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Kunde inte öppna enheten \"%s\" för skrivning."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Kunde inte öppna enheten \"%s\" för läsning."
+
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Din OSS-enhet saknar stöd för mono eller stereo."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Din OSS-enhet kunde inte undersökas korrekt"
+
+#~ msgid "Volume"
+#~ msgstr "Volym"
+
+#~ msgid "Speaker"
+#~ msgstr "Högtalare"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Spela in"
+
+#~ msgid "In-gain"
+#~ msgstr "Införstärkning"
+
+#~ msgid "Out-gain"
+#~ msgstr "Utförstärkning"
+
+#~ msgid "Line-1"
+#~ msgstr "Linje-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Linje-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Linje-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Tele-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Tele-ut"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Enheten \"%s\" är ingen fångstenhet."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Kunde inte få tag i buffertar från enheten \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr ""
+#~ "Kunde inte få tag i tillräckligt många buffertar från enheten \"%s\"."
+
+#~ msgid "Line"
+#~ msgstr "Linje"
+
+#~ msgid "Digital"
+#~ msgstr "Digital"
+
+#~ msgid "Phone in"
+#~ msgstr "Tele in"
+
+#~ msgid "Phone out"
+#~ msgstr "Tele ut"
+
+#~ msgid "Address of the server to contact for CD queries"
+#~ msgstr "Adress till servern som ska kontaktas för cd-frågor"
+
+#~ msgid "Information to send to server"
+#~ msgstr "Information att skicka till server"
+
+#~ msgid "Port"
+#~ msgstr "Port"
+
+#~ msgid "Server name"
+#~ msgstr "Servernamn"
+
+#~ msgid "Server type"
+#~ msgstr "Servertyp"
+
+#~ msgid "The hostname that will be sent with all queries"
+#~ msgstr "Värdnamnet som kommer att skickas med alla frågor"
+
+#~ msgid "The port that the server is running the database on"
+#~ msgstr "Porten som servern kör databasen på"
+
+#~ msgid ""
+#~ "There was an error displaying help: \n"
+#~ "%s"
+#~ msgstr ""
+#~ "Det uppstod ett fel vid visning av hjälp: \n"
+#~ "%s"
+
+#~ msgid "Login Information"
+#~ msgstr "Inloggningsinformation"
+
+#~ msgid "Sen_d no information"
+#~ msgstr "Ski_cka ingen information"
+
+#~ msgid "Send real _information"
+#~ msgstr "Skicka verklig _information"
+
+#~ msgid "Send _other information:"
+#~ msgstr "Skicka _annan information:"
+
+#~ msgid "_Name:"
+#~ msgstr "_Namn:"
+
+#~ msgid "Hostna_me:"
+#~ msgstr "Värdna_mn:"
+
+#~ msgid "Server"
+#~ msgstr "Server"
+
+#~ msgid "Location"
+#~ msgstr "Plats"
+
+#~ msgid "_Update Server List"
+#~ msgstr "_Uppdatera serverlistan"
+
+#~ msgid "Other _server:"
+#~ msgstr "Annan _server:"
+
+#~ msgid "Hos_tname:"
+#~ msgstr "Vä_rdnamn:"
+
+#~ msgid "_Port:"
+#~ msgstr "_Port:"
+
+#~ msgid "CD Database Preferences"
+#~ msgstr "Inställningar för cd-databas"
+
+#~ msgid "Unknown / Unknown"
+#~ msgstr "Okänd / Okänd"
+
+#~ msgid "Unknown"
+#~ msgstr "Okänd"
+
+#~ msgid "Multiple matches..."
+#~ msgstr "Flera träffar..."
+
+#~ msgid "Category"
+#~ msgstr "Kategori"
+
+#~ msgid "Artist and Title"
+#~ msgstr "Artist och titel"
+
+#~ msgid "Unknown track"
+#~ msgstr "Okänt spår"
+
+#~ msgid "CD Database"
+#~ msgstr "Cd-databas"
+
+#~ msgid "Modify your CD database preferences"
+#~ msgstr "Ändra dina inställningar för cd-databas"
+
+#~ msgid "Blues"
+#~ msgstr "Blues"
+
+#~ msgid "Classical Rock"
+#~ msgstr "Klassisk rock"
+
+#~ msgid "Country"
+#~ msgstr "Country"
+
+#~ msgid "Dance"
+#~ msgstr "Dance"
+
+#~ msgid "Disco"
+#~ msgstr "Disco"
+
+#~ msgid "Funk"
+#~ msgstr "Funk"
+
+#~ msgid "Grunge"
+#~ msgstr "Grunge"
+
+#~ msgid "Hip-Hop"
+#~ msgstr "Hip-Hop"
+
+#~ msgid "Jazz"
+#~ msgstr "Jazz"
+
+#~ msgid "Metal"
+#~ msgstr "Metal"
+
+#~ msgid "New Age"
+#~ msgstr "New Age"
+
+#~ msgid "Oldies"
+#~ msgstr "Gamla godingar"
+
+#~ msgid "Other"
+#~ msgstr "Annat"
+
+#~ msgid "Pop"
+#~ msgstr "Pop"
+
+#~ msgid "R&B"
+#~ msgstr "R&B"
+
+#~ msgid "Rap"
+#~ msgstr "Rap"
+
+#~ msgid "Reggae"
+#~ msgstr "Reggae"
+
+#~ msgid "Rock"
+#~ msgstr "Rock"
+
+#~ msgid "Techno"
+#~ msgstr "Techno"
+
+#~ msgid "Industrial"
+#~ msgstr "Industrial"
+
+#~ msgid "Alternative"
+#~ msgstr "Alternativmusik"
+
+#~ msgid "Ska"
+#~ msgstr "Ska"
+
+#~ msgid "Death Metal"
+#~ msgstr "Death Metal"
+
+#~ msgid "Pranks"
+#~ msgstr "Pranks"
+
+#~ msgid "Soundtrack"
+#~ msgstr "Filmmusik"
+
+#~ msgid "Euro-Techno"
+#~ msgstr "Euro-Techno"
+
+#~ msgid "Ambient"
+#~ msgstr "Ambient"
+
+#~ msgid "Trip-Hop"
+#~ msgstr "Trip-Hop"
+
+#~ msgid "Vocal"
+#~ msgstr "Vocal"
+
+#~ msgid "Jazz+Funk"
+#~ msgstr "Jazz+Funk"
+
+#~ msgid "Fusion"
+#~ msgstr "Fusion"
+
+#~ msgid "Trance"
+#~ msgstr "Trance"
+
+#~ msgid "Classical"
+#~ msgstr "Klassiskt"
+
+#~ msgid "Instrumental"
+#~ msgstr "Instrumentellt"
+
+#~ msgid "Acid"
+#~ msgstr "Acid"
+
+#~ msgid "House"
+#~ msgstr "House"
+
+#~ msgid "Game"
+#~ msgstr "Spel"
+
+#~ msgid "Sound Clip"
+#~ msgstr "Ljudklipp"
+
+#~ msgid "Gospel"
+#~ msgstr "Gospel"
+
+#~ msgid "Noise"
+#~ msgstr "Brus"
+
+#~ msgid "Alt"
+#~ msgstr "Alt"
+
+#~ msgid "Soul"
+#~ msgstr "Soul"
+
+#~ msgid "Punk"
+#~ msgstr "Punk"
+
+#~ msgid "Space"
+#~ msgstr "Space"
+
+#~ msgid "Meditative"
+#~ msgstr "Meditativt"
+
+#~ msgid "Instrumental Pop"
+#~ msgstr "Instrumentell pop"
+
+#~ msgid "Instrumental Rock"
+#~ msgstr "Instrumentell rock"
+
+#~ msgid "Ethnic"
+#~ msgstr "Folkmusik"
+
+#~ msgid "Gothic"
+#~ msgstr "Gotiskt"
+
+#~ msgid "Darkwave"
+#~ msgstr "Darkwave"
+
+#~ msgid "Techno-Industrial"
+#~ msgstr "Techno-Industrial"
+
+#~ msgid "Electronic"
+#~ msgstr "Electroniskt"
+
+#~ msgid "Pop-Folk"
+#~ msgstr "Pop-Folk"
+
+#~ msgid "Eurodance"
+#~ msgstr "Eurodance"
+
+#~ msgid "Dream"
+#~ msgstr "Dream"
+
+#~ msgid "Southern Rock"
+#~ msgstr "Southern Rock"
+
+#~ msgid "Comedy"
+#~ msgstr "Komedi"
+
+#~ msgid "Cult"
+#~ msgstr "Kult"
+
+#~ msgid "Gangsta Rap"
+#~ msgstr "Gangsta rap"
+
+#~ msgid "Top 40"
+#~ msgstr "Topp 40"
+
+#~ msgid "Christian Rap"
+#~ msgstr "Kristen rap"
+
+#~ msgid "Pop/Funk"
+#~ msgstr "Pop/Funk"
+
+#~ msgid "Jungle"
+#~ msgstr "Jungle"
+
+#~ msgid "Native American"
+#~ msgstr "Amerikansk folkmusik"
+
+#~ msgid "Cabaret"
+#~ msgstr "Kabaré"
+
+#~ msgid "New Wave"
+#~ msgstr "New Wave"
+
+#~ msgid "Psychedelic"
+#~ msgstr "Psykedeliskt"
+
+#~ msgid "Rave"
+#~ msgstr "Rave"
+
+#~ msgid "Showtunes"
+#~ msgstr "Showtunes"
+
+#~ msgid "Trailer"
+#~ msgstr "Trailer"
+
+#~ msgid "Lo-Fi"
+#~ msgstr "Lo-Fi"
+
+#~ msgid "Tribal"
+#~ msgstr "Tribal"
+
+#~ msgid "Acid Punk"
+#~ msgstr "Acid Punk"
+
+#~ msgid "Acid Jazz"
+#~ msgstr "Acid Jazz"
+
+#~ msgid "Polka"
+#~ msgstr "Polka"
+
+#~ msgid "Retro"
+#~ msgstr "Retro"
+
+#~ msgid "Musical"
+#~ msgstr "Musikal"
+
+#~ msgid "Rock & Roll"
+#~ msgstr "Rock & roll"
+
+#~ msgid "Hard Rock"
+#~ msgstr "Hårdrock"
+
+#~ msgid "Folk"
+#~ msgstr "Folk"
+
+#~ msgid "Folk/Rock"
+#~ msgstr "Folk/Rock"
+
+#~ msgid "National Folk"
+#~ msgstr "Nationell folkmusik"
+
+#~ msgid "Swing"
+#~ msgstr "Swing"
+
+#~ msgid "Fast-Fusion"
+#~ msgstr "Fast-Fusion"
+
+#~ msgid "Bebop"
+#~ msgstr "Bebop"
+
+#~ msgid "Latin"
+#~ msgstr "Latinskt"
+
+#~ msgid "Revival"
+#~ msgstr "Uppväckelse"
+
+#~ msgid "Celtic"
+#~ msgstr "Keltiskt"
+
+#~ msgid "Bluegrass"
+#~ msgstr "Bluegrass"
+
+#~ msgid "Avantgarde"
+#~ msgstr "Avantgarde"
+
+#~ msgid "Gothic Rock"
+#~ msgstr "Gotisk rock"
+
+#~ msgid "Progressive Rock"
+#~ msgstr "Progressiv rock"
+
+#~ msgid "Psychedelic Rock"
+#~ msgstr "Psykedelisk rock"
+
+#~ msgid "Symphonic Rock"
+#~ msgstr "Symfonisk rock"
+
+#~ msgid "Slow Rock"
+#~ msgstr "Slow Rock"
+
+#~ msgid "Big Band"
+#~ msgstr "Big Band"
+
+#~ msgid "Chorus"
+#~ msgstr "Kör"
+
+#~ msgid "Easy Listening"
+#~ msgstr "Lättlyssnat"
+
+#~ msgid "Acoustic"
+#~ msgstr "Akustiskt"
+
+#~ msgid "Humour"
+#~ msgstr "Humor"
+
+#~ msgid "Speech"
+#~ msgstr "Tal"
+
+#~ msgid "Chanson"
+#~ msgstr "Chanson"
+
+#~ msgid "Opera"
+#~ msgstr "Opera"
+
+#~ msgid "Chamber Music"
+#~ msgstr "Kammarmusik"
+
+#~ msgid "Sonata"
+#~ msgstr "Sonat"
+
+#~ msgid "Symphony"
+#~ msgstr "Symfoni"
+
+#~ msgid "Booty Bass"
+#~ msgstr "Booty Bass"
+
+#~ msgid "Primus"
+#~ msgstr "Primus"
+
+#~ msgid "Porn Groove"
+#~ msgstr "Porn Groove"
+
+#~ msgid "Slow Jam"
+#~ msgstr "Slow Jam"
+
+#~ msgid "Club"
+#~ msgstr "Klubb"
+
+#~ msgid "Tango"
+#~ msgstr "Tango"
+
+#~ msgid "Samba"
+#~ msgstr "Samba"
+
+#~ msgid "Folklore"
+#~ msgstr "Folklore"
+
+#~ msgid "Ballad"
+#~ msgstr "Ballad"
+
+#~ msgid "Power Ballad"
+#~ msgstr "Power Ballad"
+
+#~ msgid "Rhythmic Soul"
+#~ msgstr "Rhythmic Soul"
+
+#~ msgid "Freestyle"
+#~ msgstr "Freestyle"
+
+#~ msgid "Duet"
+#~ msgstr "Duett"
+
+#~ msgid "Punk Rock"
+#~ msgstr "Punkrock"
+
+#~ msgid "Drum Solo"
+#~ msgstr "Trumsolo"
+
+#~ msgid "A Cappella"
+#~ msgstr "A cappella"
+
+#~ msgid "Euro-House"
+#~ msgstr "Euro-House"
+
+#~ msgid "Dance Hall"
+#~ msgstr "Dance Hall"
+
+#~ msgid "Goa"
+#~ msgstr "Goa"
+
+#~ msgid "Drum & Bass"
+#~ msgstr "Drum & Bass"
+
+#~ msgid "Club-House"
+#~ msgstr "Club-House"
+
+#~ msgid "Hardcore"
+#~ msgstr "Hardcore"
+
+#~ msgid "Terror"
+#~ msgstr "Terror"
+
+#~ msgid "Indie"
+#~ msgstr "Indie"
+
+#~ msgid "BritPop"
+#~ msgstr "BritPop"
+
+#~ msgid "Negerpunk"
+#~ msgstr "Negerpunk"
+
+#~ msgid "Polsk Punk"
+#~ msgstr "Polsk punk"
+
+#~ msgid "Beat"
+#~ msgstr "Beat"
+
+#~ msgid "Christian Gangsta Rap"
+#~ msgstr "Kristen gangsta rap"
+
+#~ msgid "Heavy Metal"
+#~ msgstr "Heavy Metal"
+
+#~ msgid "Black Metal"
+#~ msgstr "Black Metal"
+
+#~ msgid "Crossover"
+#~ msgstr "Crossover"
+
+#~ msgid "Contemporary Christian"
+#~ msgstr "Modern kristen"
+
+#~ msgid "Christian Rock"
+#~ msgstr "Kristen rock"
+
+#~ msgid "Merengue"
+#~ msgstr "Merengue"
+
+#~ msgid "Salsa"
+#~ msgstr "Salsa"
+
+#~ msgid "Thrash Metal"
+#~ msgstr "Thrash Metal"
+
+#~ msgid "Anime"
+#~ msgstr "Anime"
+
+#~ msgid "JPop"
+#~ msgstr "JPop"
+
+#~ msgid "Synthpop"
+#~ msgstr "Synthpop"
+
+#~ msgid "Nu-Metal"
+#~ msgstr "Nu-Metal"
+
+#~ msgid "Art Rock"
+#~ msgstr "Art rock"
+
+#~ msgid "Editing Disc ID: %s"
+#~ msgstr "Redigerar skiv-id: %s"
+
+#~ msgid "Editing Disc ID: "
+#~ msgstr "Redigerar skiv-id: "
+
+#~ msgid "_Artist:"
+#~ msgstr "_Artist:"
+
+#~ msgid "Disc _Title:"
+#~ msgstr "Skiv_titel:"
+
+#~ msgid "Show advanced disc options"
+#~ msgstr "Visa avancerade skivalternativ"
+
+#~ msgid "Hide advanced disc options"
+#~ msgstr "Dölj avancerade skivalternativ"
+
+#~ msgid "_Disc comments:"
+#~ msgstr "_Skivkommentarer:"
+
+#~ msgid "_Genre:"
+#~ msgstr "_Genre:"
+
+#~ msgid "_Year:"
+#~ msgstr "_År:"
+
+#~ msgid "Title"
+#~ msgstr "Titel"
+
+#~ msgid "Length"
+#~ msgstr "Speltid"
+
+#~ msgid "Show advanced track options"
+#~ msgstr "Visa avancerade spåralternativ"
+
+#~ msgid "Hide advanced track options"
+#~ msgstr "Dölj avancerade spåralternativ"
+
+#~ msgid "_Extra track data:"
+#~ msgstr "_Extra spårdata:"
+
+#~ msgid "Time Line"
+#~ msgstr "Tidslinje"
+
+#~ msgid "Line for displaying the time elapsed for the current track"
+#~ msgstr "Linje för visning av den tid som gått tid för aktuellt spår"
+
+#~ msgid "Info Line"
+#~ msgstr "Informationsrad"
+
+#~ msgid "Line for displaying information"
+#~ msgstr "Rad för visning av information"
+
+#~ msgid "Line for displaying the name of the artist"
+#~ msgstr "Rad för visning av namnet på artisten"
+
+#~ msgid "Album Line"
+#~ msgstr "Albumrad"
+
+#~ msgid "Line for displaying the name of the album"
+#~ msgstr "Rad för visning av namnet på albumet"
+
+#~ msgid "Pause"
+#~ msgstr "Paus"
+
+#~ msgid "Playing %s - %s"
+#~ msgstr "Spelar %s - %s"
+
+#~ msgid "Unknown Artist"
+#~ msgstr "Okänd artist"
+
+#~ msgid "Unknown Album"
+#~ msgstr "Okänt album"
+
+#~ msgid "Playing"
+#~ msgstr "Spelar"
+
+#~ msgid "Paused"
+#~ msgstr "Gör paus"
+
+#~ msgid "CD Player"
+#~ msgstr "Cd-spelare"
+
+#~ msgid "Stopped"
+#~ msgstr "Stoppad"
+
+#~ msgid "Disc error"
+#~ msgstr "Skivfel"
+
+#~ msgid "Data CD"
+#~ msgstr "Data-cd"
+
+#~ msgid "No Cdrom"
+#~ msgstr "Ingen cd-rom"
+
+#~ msgid "Drive Error"
+#~ msgstr "Enhetsfel"
+
+#~ msgid "You do not seem to have permission to access %s."
+#~ msgstr "Du verkar inte ha rättighet att komma åt %s."
+
+#~ msgid "Unknown artist"
+#~ msgstr "Okänd artist"
+
+#~ msgid "Unknown disc"
+#~ msgstr "Okänd skiva"
+
+#~ msgid "%d - Unknown"
+#~ msgstr "%d - okänd"
+
+#~ msgid "P_revious track"
+#~ msgstr "F_öregående spår"
+
+#~ msgid "_Stop"
+#~ msgstr "_Stopp"
+
+#~ msgid "_Play / Pause"
+#~ msgstr "S_pela/Paus"
+
+#~ msgid "_Next track"
+#~ msgstr "_Nästa spår"
+
+#~ msgid "_Eject disc"
+#~ msgstr "_Mata ut skiva"
+
+#~ msgid "_Help"
+#~ msgstr "_Hjälp"
+
+#~ msgid "_About CD player"
+#~ msgstr "_Om cd-spelare"
+
+#~ msgid "Set device"
+#~ msgstr "Ställ in enhet"
+
+#~ msgid "No CD device"
+#~ msgstr "Ingen cd-enhet"
+
+#~ msgid "_Details"
+#~ msgstr "_Detaljer"
+
+#~ msgid "_Set device"
+#~ msgstr "_Ställ in enhet"
+
+#~ msgid "Invalid CD device"
+#~ msgstr "Ogiltig cd-enhet"
+
+#~ msgid "Position"
+#~ msgstr "Position"
+
+#~ msgid "Open track editor"
+#~ msgstr "Öppna spårredigerare"
+
+#~ msgid "Track editor"
+#~ msgstr "Spårredigerare"
+
+#~ msgid "Open preferences"
+#~ msgstr "Öppna inställningar"
+
+#~ msgid "Preferences"
+#~ msgstr "Inställningar"
+
+#~ msgid "Track List"
+#~ msgstr "Spårlista"
+
+#~ msgid "Previous track"
+#~ msgstr "Föregående spår"
+
+#~ msgid "Previous"
+#~ msgstr "Föregående"
+
+#~ msgid "Rewind"
+#~ msgstr "Spola tillbaka"
+
+#~ msgid "Play / Pause"
+#~ msgstr "Spela/Paus"
+
+#~ msgid "Stop"
+#~ msgstr "Stopp"
+
+#~ msgid "Fast forward"
+#~ msgstr "Snabbspola"
+
+#~ msgid "Next track"
+#~ msgstr "Nästa spår"
+
+#~ msgid "Eject CD"
+#~ msgstr "Mata ut cd"
+
+#~ msgid "Eject"
+#~ msgstr "Mata ut"
+
+#~ msgid "CD device to use"
+#~ msgstr "Cd-enhet att använda"
+
+#~ msgid "Only start if there isn't already a CD player application running"
+#~ msgstr "Starta endast om det inte finns ett annat cd-spelarprogram som kör"
+
+#~ msgid "Play the CD on startup"
+#~ msgstr "Spela cd-skivan vid uppstart"
+
+#~ msgid "Cannot create player"
+#~ msgstr "Kan inte skapa spelare"
+
+#~ msgid "Play audio CDs"
+#~ msgstr "Spela ljud-cd"
+
+#~ msgid "CD player theme"
+#~ msgstr "Cd-spelartema"
+
+#~ msgid "Device path"
+#~ msgstr "Enhetssökväg"
+
+#~ msgid "Record sound clips"
+#~ msgstr "Spela in ljudklipp"
+
+#~ msgid "Sound Recorder"
+#~ msgstr "Ljudinspelare"
+
+#~ msgid "About"
+#~ msgstr "Om"
+
+#~ msgid "Close"
+#~ msgstr "Stäng"
+
+#~ msgid "Close this window"
+#~ msgstr "Stäng detta fönster"
+
+#~ msgid "Contents"
+#~ msgstr "Innehåll"
+
+#~ msgid "Create a new sample"
+#~ msgstr "Skapa ett nytt ljudklipp"
+
+#~ msgid "File Information"
+#~ msgstr "Filinformation"
+
+#~ msgid "File _Information"
+#~ msgstr "Fil_information"
+
+#~ msgid "Main toolbar"
+#~ msgstr "Huvudverktygsrad"
+
+#~ msgid "New"
+#~ msgstr "Nytt"
+
+#~ msgid "Open"
+#~ msgstr "Öppna"
+
+#~ msgid "Open a file"
+#~ msgstr "Öppna en fil"
+
+#~ msgid "Play sound"
+#~ msgstr "Spela ljud"
+
+#~ msgid "Quit"
+#~ msgstr "Avsluta"
+
+#~ msgid "Quit the application"
+#~ msgstr "Avsluta programmet"
+
+#~ msgid "Recent _Files"
+#~ msgstr "Senaste _filer"
+
+#~ msgid "Record sound"
+#~ msgstr "Spela in ljud"
+
+#~ msgid "Run Mixer"
+#~ msgstr "Kör mixer"
+
+#~ msgid "Run _Mixer"
+#~ msgstr "Kör _mixer"
+
+#~ msgid "Run the audio mixer"
+#~ msgstr "Kör ljudmixern"
+
+#~ msgid "Save"
+#~ msgstr "Spara"
+
+#~ msgid "Save As"
+#~ msgstr "Spara som"
+
+#~ msgid "Save _As..."
+#~ msgstr "Spara so_m..."
+
+#~ msgid "Save the current file"
+#~ msgstr "Spara den aktuella filen"
+
+#~ msgid "Save the current file with a different name"
+#~ msgstr "Spara den aktuella filen med ett annat namn"
+
+#~ msgid "Show information about the current file"
+#~ msgstr "Visa information om den aktuella filen"
+
+#~ msgid "Show information for Sound Recorder"
+#~ msgstr "Visa information för ljudinspelaren"
+
+#~ msgid "Stop sound"
+#~ msgstr "Stoppa ljud"
+
+#~ msgid "_About"
+#~ msgstr "_Om"
+
+#~ msgid "_Close Window"
+#~ msgstr "S_täng fönster"
+
+#~ msgid "_Contents"
+#~ msgstr "_Innehåll"
+
+#~ msgid "_Control"
+#~ msgstr "_Kontroll"
+
+#~ msgid "_File"
+#~ msgstr "_Fil"
+
+#~ msgid "_New"
+#~ msgstr "_Nytt"
+
+#~ msgid "_Open..."
+#~ msgstr "_Öppna..."
+
+#~ msgid "_Play"
+#~ msgstr "_Spela"
+
+#~ msgid "_Quit"
+#~ msgstr "_Avsluta"
+
+#~ msgid "_Record"
+#~ msgstr "Spela _in"
+
+#~ msgid "_Save"
+#~ msgstr "_Spara"
+
+#~ msgid "hours"
+#~ msgstr "timmar"
+
+#~ msgid "hour"
+#~ msgstr "timme"
+
+#~ msgid "minutes"
+#~ msgstr "minuter"
+
+#~ msgid "minute"
+#~ msgstr "minut"
+
+#~ msgid "seconds"
+#~ msgstr "sekunder"
+
+#~ msgid "second"
+#~ msgstr "sekund"
+
+#~ msgid "Ready"
+#~ msgstr "Klar"
+
+#~ msgid "Save file as"
+#~ msgstr "Spara fil som"
+
+#~ msgid "%s is not installed in the path."
+#~ msgstr "%s är inte installerad i sökvägen."
+
+#~ msgid "There was an error starting %s: %s"
+#~ msgstr "Det uppstod ett fel vid start av %s: %s"
+
+#~ msgid "%s (Has not been saved)"
+#~ msgstr "%s (Har inte sparats)"
+
+#~ msgid "Unknown size"
+#~ msgstr "Okänd storlek"
+
+#~ msgid "%.1f kHz"
+#~ msgstr "%.1f kHz"
+
+#~ msgid "%.0f kb/s"
+#~ msgstr "%.0f kb/s"
+
+#~ msgid "1 (mono)"
+#~ msgstr "1 (mono)"
+
+#~ msgid "2 (stereo)"
+#~ msgstr "2 (stereo)"
+
+#~ msgid "%s Information"
+#~ msgstr "Information om %s"
+
+#~ msgid "Folder:"
+#~ msgstr "Mapp:"
+
+#~ msgid "Filename:"
+#~ msgstr "Filnamn:"
+
+#~ msgid "File size:"
+#~ msgstr "Filstorlek:"
+
+#~ msgid "Audio Information"
+#~ msgstr "Ljudinformation"
+
+#~ msgid "Song length:"
+#~ msgstr "Låtlängd:"
+
+#~ msgid "Number of channels:"
+#~ msgstr "Antal kanaler:"
+
+#~ msgid "Sample rate:"
+#~ msgstr "Samplingsfrekvens:"
+
+#~ msgid "Bit rate:"
+#~ msgstr "Bitfrekvens:"
+
+#~ msgid "Playing..."
+#~ msgstr "Spelar upp..."
+
+#~ msgid "%s.%s - Sound Recorder"
+#~ msgstr "%s.%s - Ljudinspelare"
+
+#~ msgid "Recording..."
+#~ msgstr "Spelar in..."
+
+#~ msgid "Record as"
+#~ msgstr "Spela in som"
+
+#~ msgid "File information"
+#~ msgstr "Filinformation"
+
+#~ msgid "<none>"
+#~ msgstr "<ingen>"
+
+#~ msgid "Length:"
+#~ msgstr "Längd:"
+
+#~ msgid "Adjust the volume level"
+#~ msgstr "Justera nivån på volymen"
+
+#~ msgid "Volume Control"
+#~ msgstr "Volymkontroll"
+
+#~ msgid "Channel %d of %s Slider"
+#~ msgstr "Kanal %d för %s-skjutreglage"
+
+#~ msgid "%s Slider %d"
+#~ msgstr "%s-skjutreglage %d"
+
+#~ msgid "Lock"
+#~ msgstr "Lås"
+
+#~ msgid "%s Lock"
+#~ msgstr "%s-lås"
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..22fb1e8
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..d2d052e
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,634 @@
+# translation of gst-plugins-base-0.10.32.2.po to Turkish
+# This file is put in the public domain.
+# Server Acim <serveracim@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-26 19:22+0200\n"
+"Last-Translator: Server Acim <serveracim@gmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "Ana"
+
+msgid "Bass"
+msgstr "Bas"
+
+msgid "Treble"
+msgstr "Tiz"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Synthizer"
+
+msgid "Line-in"
+msgstr "Hat-girişi"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Mikrofon"
+
+msgid "PC Speaker"
+msgstr "PC Hoparlörü"
+
+msgid "Playback"
+msgstr "Çalma"
+
+msgid "Capture"
+msgstr "Yakala"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Mono kipte çalmak için aygıt açılamıyor."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Stereo kipte çalmak için aygıt açılamıyor."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Aygıtı %d- kanal kipinde çalmak için açamıyor."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Aygıtı çalmak için için açamıyor. Aygıt başka bir uygulama tarafından "
+"kullanılmakta."
+
+msgid "Could not open audio device for playback."
+msgstr "Aygıtı çalma için açamıyor."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Mono kipte kaydetmek için aygıtı açamıyor."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Stereo kipte kaydetmek için aygıtı açamıyor."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Aygıtı %d- kanal kipinde kaydetmek için açamıyor"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Aygıtı kaydetmek için açamıyor. Aygıt başka bir uygulama tarafından "
+"kullanılmakta."
+
+msgid "Could not open audio device for recording."
+msgstr "Kayıt için ses aygıtı açılamıyor."
+
+msgid "Could not open CD device for reading."
+msgstr "Okumak için CD aygıtı açılamıyor."
+
+msgid "Could not seek CD."
+msgstr "CD bulunamıyor."
+
+msgid "Could not read CD."
+msgstr "CD okunamıyor."
+
+msgid "Internal data stream error."
+msgstr "İç veri akışı hatası."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Bir %s eklenti bu akışı çalmak için gerekli, fakat kurulu değil."
+
+msgid "Could not determine type of stream"
+msgstr "Akışın türü belirlenemiyor"
+
+msgid "This appears to be a text file"
+msgstr "Bu bir metin dosyasına benziyor"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Kayıp öğe '%s' - GStreamer kurulumunu denetleyin."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Autovideosink ve xvimagesink %s öğelerininin ikisi de kayıp."
+
+msgid "The autovideosink element is missing."
+msgstr "Autovideosink öğelesi kayıp."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Yapılandırılmış olan videosink öğesi %s çalışmıyor."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Autoaudiosink ve xvimagesink %s öğelerinin ikisi de çalışmıyor."
+
+msgid "The autovideosink element is not working."
+msgstr "Autoaudiosink öğesi çalışmıyor."
+
+msgid "Custom text sink element is not usable."
+msgstr "Varsayılan metin gömme öğesi kullanılamaz durumda."
+
+msgid "No volume control found"
+msgstr "Ses denetimi bulunamadı"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Autoaudiosink ve alsasink %s öğelerinin ikisi de kayıp."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Autoaudiosink öğesi kayıp."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Yapılandırılmış olan videosink öğesi %s çalışmıyor."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Autoaudiosink ve %s öğelerinin ikisi de çalışmıyor."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Autoaudiosink öğesi çalışmıyor."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Vidyo veya görsellik olmadan metin dosyasını oynatamaz."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Şu tür '%s' için kod çözücü bulunamadı."
+
+msgid "No URI specified to play from."
+msgstr "Çalmak için bir ağ adresi belirtilmedi."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Geçersiz URI \"%s\"."
+
+msgid "This stream type cannot be played yet."
+msgstr "Bu akış türü henüz çalınamıyor."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Hiç bir URI bağlantısı sağlanmadı \"%s\"."
+
+msgid "Source element is invalid."
+msgstr "Kaynak öğesi geçersiz."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Dosyayı şuraya gönderirken hata \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Şuraya bağlantı %s:%d reddedildi."
+
+msgid "Can't record audio fast enough"
+msgstr "Sesi yeterince hızlı kaydedemiyor"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Etiketi okunamadı: yetersiz veri"
+
+msgid "track ID"
+msgstr "iz BAŞLIĞI"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz iz BAŞLIĞI ID"
+
+msgid "artist ID"
+msgstr "sanatçı BAŞLIĞI"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz sanatçı BAŞLIĞI ID"
+
+msgid "album ID"
+msgstr "albüm BAŞLIĞI"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz albümü BAŞLIĞI"
+
+msgid "album artist ID"
+msgstr "albüm sanatçısı BAŞLIĞI"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz albüm sanatçısı BAŞLIĞI"
+
+msgid "track TRM ID"
+msgstr "iz TRM BAŞLIĞI"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM BAŞLIĞI"
+
+msgid "capturing shutter speed"
+msgstr "objektif hızını yakalıyor"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Saniye bazında, bir resim çekerken kullanılan objektif hızı"
+
+msgid "capturing focal ratio"
+msgstr "odaksal oranı yakalıyor"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr "Resim çekerken kullanılan odaksal oran (f-numarası)"
+
+msgid "capturing focal length"
+msgstr "odaksal uzunluğu yakalıyor"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr "Mm bazında, resim çekerken kullanılan odaksal uzunluk"
+
+msgid "capturing digital zoom ratio"
+msgstr "sayısal zum oranını yakalıyor"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr "Bir resim çekerken kullanılan sayısal yakınlaştırma oranı"
+
+msgid "capturing iso speed"
+msgstr "iso hızını yakalıyor"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Bir resim çekerken kulllanılan ISO hızı"
+
+msgid "capturing exposure program"
+msgstr "pozlandırma programını yakalıyor"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Bir resim çekerken kullanılan pozlandırma programı"
+
+msgid "capturing exposure mode"
+msgstr "pozlandırma kipini yakalıyor"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Bir resim çekerken kullanılan pozlandırma kipi"
+
+msgid "capturing exposure compensation"
+msgstr "pozlandırma kipini yakalanıyor"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Bir resim çekerken kullanılan pozlandırma kipi"
+
+msgid "capturing scene capture type"
+msgstr "manzara çekme türünü yakalıyor"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Bir resim çekerken kullanılan manzara yakalama kipi"
+
+msgid "capturing gain adjustment"
+msgstr "kazanç ayarı yakalanıyor"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Bir resime uygulanan kapsamlı kazanç ayarı"
+
+msgid "capturing white balance"
+msgstr "beyaz dengesi yakalanıyor"
+
+msgid "The white balance mode set when capturing an image"
+msgstr "Bir resim çekerken kullanılan beyaz dengesi kipi"
+
+msgid "capturing contrast"
+msgstr "zıtlık yakalanıyor"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Bir resim çekerken uygulanan zıtlık işleminin yönü"
+
+msgid "capturing saturation"
+msgstr "canlılık yakalanıyor"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Bir resim çekerken uygulanan doygunluk işleminin yönü"
+
+msgid "capturing sharpness"
+msgstr "keskinlik yakalanıyor"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Bir resim çekerken uygulanan keskinlik işleminin yönü"
+
+msgid "capturing flash fired"
+msgstr "flaşın yanışı yakalanıyor"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Bir resim çekerken eğer flaş patlamışsa"
+
+msgid "capturing flash mode"
+msgstr "flaş kipi yakalanıyor"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Bir resim çekerken kullanılan flaş kipi"
+
+msgid "capturing metering mode"
+msgstr "metreleme kipi yakalanıyor"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr "Bir resim çekmek için pozlandırmanın metreleme kipi"
+
+msgid "capturing source"
+msgstr "kaynak yakalanıyor"
+
+msgid "The source or type of device used for the capture"
+msgstr "Resim çekerken kullanılan aygıtın kaynak türü"
+
+msgid "image horizontal ppi"
+msgstr "yatay resim ppi değeri"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr "Medya (resim/vidyo)'nın ppi değerinden yatay piksel yoğunluğu"
+
+msgid "image vertical ppi"
+msgstr "resim dikey ppi değeri"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr "Medya (resim/vidyo)'nun ppi değerinden dikey piksel yoğunluğu"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Bu CD hiç ses izi içermiyor"
+
+msgid "ID3 tag"
+msgstr "ID3 etiketi"
+
+msgid "APE tag"
+msgstr "APE etiketi"
+
+msgid "ICY internet radio"
+msgstr "ICY internet radyosu"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple Lossless Audio (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Free Lossless Audio Codec (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Hecelemesi"
+
+msgid "CYUV Lossless"
+msgstr "CYUV Kayıpsız"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "Kayıpsız MSZH"
+
+msgid "Run-length encoding"
+msgstr "Çalıştırma-uzunluğu kodlaması"
+
+msgid "Sami subtitle format"
+msgstr "Sami altyazı kipi"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer altyazı kipi"
+
+msgid "Kate subtitle format"
+msgstr "Kate altyazı kipi"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Sıkıştırılmamış YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Sıkıştırılmamış Gri Resim"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Sıkıştırılmamış YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Şıkıştırılmamış seviyesi şuna düşürülmüş %d-bit %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Versiyonu %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Sıkıştırılmamış YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Ham %d-bit PCM ses"
+
+msgid "Audio CD source"
+msgstr "Ses CD'si kaynağı"
+
+msgid "DVD source"
+msgstr "DVD kaynağı"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Gerçek Zamanlı Akış Protokolu (RTSP) kaynağı"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft Medya Sunucusu (MMS) protokol kaynağı"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s protokol kaynağı"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s video RTP depayloader"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s audio RTP depayloader"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP depayloader"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s demuxer"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s kod çözücü"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s video RTP payloader"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s audio RTP payloader"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP payloader"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s muxer"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s kodlayıcı"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer öğesi %s"
+
+msgid "Unknown source element"
+msgstr "Bilinmeyen kaynak öğesi"
+
+msgid "Unknown sink element"
+msgstr "Bilinmeyen gömme öğesi"
+
+msgid "Unknown element"
+msgstr "Bilinmeyen öğe"
+
+msgid "Unknown decoder element"
+msgstr "Bilinmeyen kod çözücü öğesi"
+
+msgid "Unknown encoder element"
+msgstr "Bilinmeyen kodlama öğesi"
+
+msgid "Plugin or element of unknown type"
+msgstr "Bilinmeyen türde eklenti veya öğe"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Vfs dosyası \"%s\" yazmak için açılamıyor: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Dosya adı verilmedi"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Vfs dosyası kapatılamıyor \"%s\"."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Dosyaya yazmada hata \"%s\"."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Geçersiz altyazı adresi \"%s\", altyazılar kaldırıldı."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP akışları henüz çalınamıyor."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "\"decodebin\" öğesi oluşturulamıyor."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Bir altyazı dosyası algılandı. Siz ya bir altyazı veya başka bir metin "
+#~ "dosyası yüklemek üzeresiniz, veya çokluortam dosyası tanınamadı."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Bu yüklü dosyası çözümleyecek bir kod çözücüye sahip değilsiniz. Gerekli "
+#~ "eklentileri kurmak zorundasınız."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Bu bir çokluortam dosyası değil."
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Bir altyazı akışı algılanda, ancak vidyo akışı bulunamadı."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Autovideosink ve xvimagesink öğelerininin ikisi de kayıp."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Autoaudiosink ve alsasink öğelerinin ikisi de kayıp."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Bir gdp başlık verisini şuraya gönderirken hata \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Bir gdp verisini şuraya gönderirken hata \"%s:%d\"."
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Sıkıştırılmamış planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Sıkıştırılmamış planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Sıkıştırılmamış paket YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Sıkıştırılmamış paket YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Sıkıştırılmamış paket YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Sıkıştırılmamış paket YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Sıkıştırılmamış paket YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Sıkıştırılmamış planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Sıkıştırılmamış planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Sıkıştırılmamış siyah ve beyaz Y"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Ham PCM ses"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Ham %d-bit yüzer-noktalı ses"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Ham yüzer-noktalı ses"
+
+#~ msgid "No device specified."
+#~ msgstr "Aygıt belirtilmedi."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Aygıt \"%s\" bulunamadı."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Aygıt \"%s\" zaten kullanımda."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Şu aygıtı\"%s\" for okuma veya yazma için açamıyor."
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "Metin altyazılarını altgörüntülerini oynatamıyor."
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "Geçici Temp dizini belirtilmedi."
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "Geçici dosya oluşturulamıyor \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Dosyayı \"%s\" okumak için açamıyor."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "İç veri akışı hatası."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Bir \"decodebin2\" öğesi oluşturamıyor."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Bir \"queue2\" öğesi oluşturamıyor."
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "Bir \"typefind\" öğesi oluşturamıyor."
+
+#~ msgid "No file name specified."
+#~ msgstr "Dosya adı belirtilmedi."
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..932732e
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..50fe9e0
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,644 @@
+# Ukrainian translation to gst-plugins.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-base package.
+#
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
+# Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2011-04-27 17:49+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 1.1\n"
+
+msgid "Master"
+msgstr "Головний"
+
+msgid "Bass"
+msgstr "Низькі"
+
+msgid "Treble"
+msgstr "Високі"
+
+msgid "PCM"
+msgstr "КІМ"
+
+msgid "Synth"
+msgstr "Синтезатор"
+
+msgid "Line-in"
+msgstr "Лінійний вхід"
+
+msgid "CD"
+msgstr "Компакт-диск"
+
+msgid "Microphone"
+msgstr "Мікрофон"
+
+msgid "PC Speaker"
+msgstr "Гучномовець"
+
+msgid "Playback"
+msgstr "Відтворення"
+
+msgid "Capture"
+msgstr "Запис"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Не вдалося відкрити пристрій відтворення у режимі моно."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Не вдалося відкрити пристрій відтворення у режимі стерео."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Не вдалося відкрити пристрій відтворення у %d канальному режимі."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Не вдалося відкрити пристрій для відтворення. Пристрій використовується "
+"сторонньою програмою."
+
+msgid "Could not open audio device for playback."
+msgstr "Не вдалося відкрити пристрій для відтворення."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Не вдалося відкрити пристрій запису у режимі моно."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Не вдалося відкрити пристрій запису у режимі стерео."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Не вдалося відкрити пристрій запису у %d-канальному режимі."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Не вдалося відкрити пристрій для запису. Пристрій використовується "
+"сторонньою програмою."
+
+msgid "Could not open audio device for recording."
+msgstr "Не вдалося відкрити пристрій для запису."
+
+msgid "Could not open CD device for reading."
+msgstr "Не вдалося відкрити пристрій компакт-дисків для читання."
+
+msgid "Could not seek CD."
+msgstr "Не вдалося встановити позицію на CD."
+
+msgid "Could not read CD."
+msgstr "Не вдалося прочитати CD."
+
+msgid "Internal data stream error."
+msgstr "Помилка внутрішнього потоку даних."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Для відтворення потоку потрібен модуль %s, але він не встановлений."
+
+msgid "Could not determine type of stream"
+msgstr "Не вдалося визначити тип даних потоку"
+
+msgid "This appears to be a text file"
+msgstr "Файл схожий на текстовий файл"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+"Відсутній елемент «%s». Перевірте чи встановлено GStreamer належним чином."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Не вказано елементів autovideosink і %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Не вказано елемента autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Налаштований приймач відеоданих, %s, не працює."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Непридатними є обидва елементи: autovideosink і %s."
+
+msgid "The autovideosink element is not working."
+msgstr "Елемент autovideosink є непридатним."
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+"Нетиповий елемент приймача текстових даних непридатний до використання."
+
+msgid "No volume control found"
+msgstr "Не знайдено регулятора гучності"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Не вказано обох елементів: autoaudiosink і %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Не вказано елемента autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Налаштований приймач звукових даних, %s, не працює."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Елементи autoaudiosink і %s є непридатними."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Елемент autoaudiosink є непридатним."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr "Відтворення текстового файла без відео або візуалізації неможливе."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Для типу '%s' немає доступних декодерів."
+
+msgid "No URI specified to play from."
+msgstr "Не вказано URI для відтворення."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "Неправильний URI «%s»."
+
+msgid "This stream type cannot be played yet."
+msgstr "Цей потік поки-що не може бути відтворений."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Не реалізовано обробник URI для «%s»."
+
+msgid "Source element is invalid."
+msgstr "Неправильний вхідний елемент."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Помилка при надсиланні даних до \"%s:%d\"."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "У з'єднанні з %s:%d відмовлено."
+
+msgid "Can't record audio fast enough"
+msgstr "Не вдалося запис аудіоданих з потрібною швидкістю"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Не вдалося прочитати мітку: недостатньо даних"
+
+msgid "track ID"
+msgstr "ідентифікатор доріжки"
+
+msgid "MusicBrainz track ID"
+msgstr "Ідентифікатор доріжки у MusicBrainz"
+
+msgid "artist ID"
+msgstr "ідентифікатор виконавця"
+
+msgid "MusicBrainz artist ID"
+msgstr "Ідентифікатор виконавця у MusicBrainz"
+
+msgid "album ID"
+msgstr "ідентифікатор альбому"
+
+msgid "MusicBrainz album ID"
+msgstr "Ідентифікатор альбому у MusicBrainz"
+
+msgid "album artist ID"
+msgstr "ідентифікатор виконавця альбому"
+
+msgid "MusicBrainz album artist ID"
+msgstr "Ідентифікатор виконавця альбому у MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "ідентифікатор доріжки TRM"
+
+msgid "MusicBrainz TRM ID"
+msgstr "Ідентифікатор доріжки TRM у MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr "швидкість затвору"
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr "Швидкість затвору (діафрагми) під час створення зображення, у секундах"
+
+msgid "capturing focal ratio"
+msgstr "фокальний коефіцієнт"
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+"Фокальний коефіцієнт (число діафрагми), використаний під час створення "
+"зображення"
+
+msgid "capturing focal length"
+msgstr "фокальна відстань"
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+"Фокальна відстань об’єктива, використаного при створенні зображення, у мм"
+
+msgid "capturing digital zoom ratio"
+msgstr "коефіцієнт цифрового збільшення"
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+"Коефіцієнт цифрового збільшення, використаний під час створення зображення"
+
+msgid "capturing iso speed"
+msgstr "світлочутливість ISO"
+
+msgid "The ISO speed used when capturing an image"
+msgstr "Світлочутливість ISO, використана під час створення зображення"
+
+msgid "capturing exposure program"
+msgstr "програма експозиції"
+
+msgid "The exposure program used when capturing an image"
+msgstr "Програма експозиції, використана під час створення зображення"
+
+msgid "capturing exposure mode"
+msgstr "режим експозиції"
+
+msgid "The exposure mode used when capturing an image"
+msgstr "Режим експозиції, використаний під час створення зображення"
+
+msgid "capturing exposure compensation"
+msgstr "компенсація експозиції під час захоплення"
+
+msgid "The exposure compensation used when capturing an image"
+msgstr "Компенсація часу експозиції, потрібного для захоплення зображення"
+
+msgid "capturing scene capture type"
+msgstr "тип сцени"
+
+msgid "The scene capture mode used when capturing an image"
+msgstr "Режим типу сцени, використаний під час створення зображення"
+
+msgid "capturing gain adjustment"
+msgstr "коригування підсилання"
+
+msgid "The overall gain adjustment applied on an image"
+msgstr "Загальне коригування підсилення, застосоване до зображення"
+
+msgid "capturing white balance"
+msgstr "баланс білого"
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+"Режим балансування білого кольору, використаний під час створення зображення"
+
+msgid "capturing contrast"
+msgstr "контрастність"
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr "Напрям обробки контрастності, застосований при створенні зображення"
+
+msgid "capturing saturation"
+msgstr "насиченість"
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr "Напрям обробки насиченості, застосований при створенні зображення"
+
+msgid "capturing sharpness"
+msgstr "різкість"
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr "Напрям обробки різкості, застосований при створенні зображення"
+
+msgid "capturing flash fired"
+msgstr "спалах"
+
+msgid "If the flash fired while capturing an image"
+msgstr "Чи було використано спалах при створенні зображення"
+
+msgid "capturing flash mode"
+msgstr "режим спалаху"
+
+msgid "The selected flash mode while capturing an image"
+msgstr "Вибраний режим спалаху під час створення зображення"
+
+msgid "capturing metering mode"
+msgstr "режим вимірювання"
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+"Режим вимірювання, застосований для визначення експозиції створеного "
+"зображення"
+
+msgid "capturing source"
+msgstr "джерело"
+
+msgid "The source or type of device used for the capture"
+msgstr "Тип пристрою-джерела зображення"
+
+msgid "image horizontal ppi"
+msgstr "горизонтальна щільність пікселів"
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+"Горизонтальна щільність пікселів на матриці (зображення або відео), у точках "
+"на дюйм"
+
+msgid "image vertical ppi"
+msgstr "вертикальна щільність пікселів"
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+"Вертикальна щільність пікселів на матриці (зображення або відео), у точках "
+"на дюйм"
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "На цьому компакт-диску немає звукових доріжок"
+
+msgid "ID3 tag"
+msgstr "Мітка ID3"
+
+msgid "APE tag"
+msgstr "Мітка APE"
+
+msgid "ICY internet radio"
+msgstr "Інтернет-радіо ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Аудіо без втрат від Apple (ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "Вільний алгоритм аудіо без втрат (FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Lossless True Audio (TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media Speech"
+
+msgid "CYUV Lossless"
+msgstr "CYUV без втрат"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH без втрат"
+
+msgid "Run-length encoding"
+msgstr "Кодування Run-length"
+
+msgid "Sami subtitle format"
+msgstr "Формат субтитрів Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Формат субтитрів TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Формат субтитрів Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "Нестиснений YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Нестиснене сіре зображення"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "Нестиснений YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "Нестиснений пакетний %d-бітовий %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 версії %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "Нестиснений YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Необроблений %d-бітовий PCM-звук"
+
+msgid "Audio CD source"
+msgstr "Джерело аудіо-CD"
+
+msgid "DVD source"
+msgstr "Джерело DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "Джерело потокового протоколу реального часу (RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Джерело протоколу Microsoft Media Server (MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Джерело протоколу %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "RTP модуль розпаковування відеоданих %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "RTP модуль розпаковування аудіоданих %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "RTP модуль розпаковування даних %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "демультиплексор %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "декодер %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "RTP модуль запаковування відеоданих %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "RTP модуль запаковування аудіоданих %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "RTP модуль запаковування даних %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "мультиплексор %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "кодер %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Елемент GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Невідомий елемент джерела"
+
+msgid "Unknown sink element"
+msgstr "Невідомий елемент приймача"
+
+msgid "Unknown element"
+msgstr "Невідомий елемент"
+
+msgid "Unknown decoder element"
+msgstr "Невідомий елемент декодера"
+
+msgid "Unknown encoder element"
+msgstr "Невідомий елемент кодера"
+
+msgid "Plugin or element of unknown type"
+msgstr "Модуль або елемент невідомого типу"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "Нестиснений планарний YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Нестиснений планарний YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "Нестиснений пакетний YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Нестиснений пакетний YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Нестиснений пакетний YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Нестиснений пакетний YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Нестиснений пакетний YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Нестиснений планарний YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Нестиснений планарний YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Нестиснений чорно-білий Y-проекція"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Необроблений PCM-звук"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Необроблений %d-бітовий звук (дані з плаваючою комою)"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Необроблений звук (дані з плаваючою комою)"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr ""
+#~ "Не вдалося відкрити файл віртуальної файлової системи «%s» для запису: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Не вказано файл"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Не вдалося закрити файл віртуальної файлової системи «%s»."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Помилка при записі у файл «%s»."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "Неправильний URI субтитру «%s», субтитри вимкнено."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Відтворення потоків RTSP поки-що не підтримується."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Не вдалося створити елемент \"decodebin\"."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Виявлено лише потік субтитрів. Або ви завантажили файл субтитрів чи інший "
+#~ "текстовий файл, або носій не розпізнано."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Не встановлено декодер для обробки цього файлу. Можливо потрібно "
+#~ "встановити додаткові модулі."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Файл не є мультимедійним"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Виявлено потік субтитрів, але не відеопотік."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Відсутні елементи autovideosink та xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Відсутні елементи autoaudiosink та alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Пристрій не вказано."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Пристрою «%s» не існує."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Пристрій «%s» вже використовується іншою програмою."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Не вдалося відкрити пристрій «%s» для читання чи запису."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Помилка при надсиланні заголовку gdp даних до \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Помилка при надсиланні даних gdp до «%s:%d»."
+
+#~ msgid "No file name specified."
+#~ msgstr "Не вказано назву файлу."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Не вдається відкрити файл \"%s\" для читання."
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "Не вдається створити елемент \"decodebin2\"."
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "Не вдається створити елемент \"queue2\"."
+
+#~ msgid "artist sortname"
+#~ msgstr "категорія виконавця"
+
+#~ msgid "MusicBrainz artist sortname"
+#~ msgstr "Категорія виконавця у MusicBrainz"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..b06139d
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..36ae915
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,614 @@
+# Vietnamese Translation for GST Plugins Base.
+# This file is distributed under the same license as the gst-plugins-base package.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2010-04-27 22:51+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+
+msgid "Master"
+msgstr "Chủ"
+
+msgid "Bass"
+msgstr "Trầm"
+
+msgid "Treble"
+msgstr "Cao"
+
+msgid "PCM"
+msgstr "PCM"
+
+msgid "Synth"
+msgstr "Tổng hợp"
+
+msgid "Line-in"
+msgstr "Dây-vào"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "Máy vi âm"
+
+msgid "PC Speaker"
+msgstr "Loa PC"
+
+msgid "Playback"
+msgstr "Phát lại"
+
+msgid "Capture"
+msgstr "Bắt"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "Không thể mở thiết bị để phát lại trong chế độ đơn nguồn."
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "Không thể mở thiết bị để phát lại trong chế độ âm lập thể."
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "Không thể mở thiết bị để phát lại trong chế độ %d kênh."
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr ""
+"Không thể mở thiết bị âm thanh để phát lại, vì ứng dụng khác đang sử dụng nó."
+
+msgid "Could not open audio device for playback."
+msgstr "Không thể mở thiết bị âm thanh để phát lại."
+
+msgid "Could not open device for recording in mono mode."
+msgstr "Không thể mở thiết bị để thu trong chế độ đơn nguồn."
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "Không thể mở thiết bị để thu trong chế độ âm lập thể."
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "Không thể mở thiết bị để thu trong chế độ %d kênh."
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr ""
+"Không thể mở thiết bị âm thanh để thu, vì ứng dụng khác đang sử dụng nó."
+
+msgid "Could not open audio device for recording."
+msgstr "Không thể mở thiết bị âm thanh để thu."
+
+msgid "Could not open CD device for reading."
+msgstr "Không thể mở thiết bị đĩa CD để đọc."
+
+msgid "Could not seek CD."
+msgstr "Không thể tìm trên đĩa CD."
+
+msgid "Could not read CD."
+msgstr "Không thể đọc đĩa CD."
+
+msgid "Internal data stream error."
+msgstr "Lỗi luồng dữ liệu nội bộ."
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "Cần phần bổ sung %s để phát luồng này nhưng chưa cài đặt."
+
+msgid "Could not determine type of stream"
+msgstr "Không thể quyết định loại luồng"
+
+msgid "This appears to be a text file"
+msgstr "Hình như đây là tập tin văn bản"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "Thiếu phần tử « %s » — hãy kiểm tra lại cài đặt GStreamer."
+
+#, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "Thiếu phần tử autovideosink, cũng thiếu phần tử %s."
+
+msgid "The autovideosink element is missing."
+msgstr "Thiếu phần tử autovideosink."
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr "Phần tử videosink %s đã cấu hình mà không hoạt động."
+
+#, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "Cả hai phần tử autovideosink và %s không hoạt động."
+
+msgid "The autovideosink element is not working."
+msgstr "Phần tử autovideosink không hoạt động."
+
+msgid "Custom text sink element is not usable."
+msgstr "Không thể sử dụng yếu tố ổ chìm văn bản riêng."
+
+msgid "No volume control found"
+msgstr "Không tìm thấy điều khiển âm lượng"
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "Thiếu phần tử autoaudiosink, cũng thiếu phần tử %s."
+
+msgid "The autoaudiosink element is missing."
+msgstr "Thiếu phần tử autoaudiosink."
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr "Phần tử audiosink %s đã cấu hình mà không hoạt động."
+
+#, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "Cả hai phần tử autoaudiosink và %s không hoạt động."
+
+msgid "The autoaudiosink element is not working."
+msgstr "Phần tử autoaudiosink không hoạt động."
+
+msgid "Can't play a text file without video or visualizations."
+msgstr ""
+"Không thể phát tập tin văn bản mà không có ảnh động hay cách thức hiển thị."
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "Không có bộ giải mã sẵn sàng cho kiểu « %s »."
+
+msgid "No URI specified to play from."
+msgstr "Chưa ghi rõ URI từ đó cần phát."
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "URI không hợp lệ « %s »."
+
+msgid "This stream type cannot be played yet."
+msgstr "Chưa có khả năng phát kiểu luồng này."
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "Không có bộ quản lý địa chỉ URI được thực hiện cho « %s »."
+
+msgid "Source element is invalid."
+msgstr "Phần tử nguồn không phải hợp lệ."
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "Lỗi khi gởi dữ liệu cho « %s:%d »."
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "Kết nối tới « %s:%d » bị từ chối."
+
+msgid "Can't record audio fast enough"
+msgstr "Không thể thu âm thanh một cách đủ nhanh"
+
+msgid "Failed to read tag: not enough data"
+msgstr "Lỗi đọc thẻ: không đủ dữ liệu"
+
+msgid "track ID"
+msgstr "mã rãnh"
+
+msgid "MusicBrainz track ID"
+msgstr "mã rãnh MusicBrainz"
+
+msgid "artist ID"
+msgstr "mã nghệ sĩ"
+
+msgid "MusicBrainz artist ID"
+msgstr "mã nghệ sĩ MusicBrainz"
+
+msgid "album ID"
+msgstr "mã tập nhạc"
+
+msgid "MusicBrainz album ID"
+msgstr "mã tập nhạc MusicBrainz"
+
+msgid "album artist ID"
+msgstr "mã nghệ sĩ tập nhạc"
+
+msgid "MusicBrainz album artist ID"
+msgstr "mã nghệ sĩ tập nhạc MusicBrainz"
+
+msgid "track TRM ID"
+msgstr "mã TRM rãnh"
+
+msgid "MusicBrainz TRM ID"
+msgstr "mã TRM rãnh MusicBrainz"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "Đĩa CD này không có rãnh âm thanh nào"
+
+msgid "ID3 tag"
+msgstr "Thẻ ID3"
+
+msgid "APE tag"
+msgstr "Thẻ APE"
+
+msgid "ICY internet radio"
+msgstr "Thu thanh Internet ICY"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Âm thanh không mất gì của Apple (Apple Lossless Audio: ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr ""
+"Phương pháp tự do không mất gì nén và truyền nhiều loại dữ liệu âm thanh "
+"khác (Free Lossless Audio Codec: FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "Âm thanh đúng không mất gì (Lossless True Audio: TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Tiếng nói của nhạc/ảnh Windows (Windows Media Speech)"
+
+msgid "CYUV Lossless"
+msgstr "CYUV không mất gì (CYUV Lossless)"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "MSZH không mất gì (Lossless MSZH)"
+
+msgid "Run-length encoding"
+msgstr "Mã hoá độ dài chạy (Run-Length Encoding: RLE)"
+
+msgid "Sami subtitle format"
+msgstr "Định dạng phụ đề Sami"
+
+msgid "TMPlayer subtitle format"
+msgstr "Định dạng phụ đề TMPlayer"
+
+msgid "Kate subtitle format"
+msgstr "Định dạng phụ đề Kate"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "YUV không nén"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "Ảnh màu xám không nén"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "YUV không nén"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "%d-bit %s có bảng chọn không nén"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 Phiên bản %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "YUV không nén"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "Âm thanh PCM %d-bit thô"
+
+msgid "Audio CD source"
+msgstr "Nguồn đĩa CD âm thanh"
+
+msgid "DVD source"
+msgstr "Nguồn đĩa DVD"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr ""
+"Nguồn Giao thức chạy luồng giờ thật (Real Time Streaming Protocol: RTSP)"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr ""
+"Nguồn Giao thức trình phục vụ nhạc/ảnh Microsoft (Microsoft Media Server: "
+"MMS)"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "Nguồn giao thức %s"
+
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr "depayloader (bộ trừ trọng tải?) RTP ảnh động %s"
+
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr "depayloader (bộ trừ trọng tải?) RTP âm thanh %s"
+
+#, c-format
+msgid "%s RTP depayloader"
+msgstr "depayloader (bộ trừ trọng tải?) RTP %s"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "demuxer (bộ chia ra) %s"
+
+#, c-format
+msgid "%s decoder"
+msgstr "bộ giải mã %s"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "payloader (bộ cộng trọng tải?) RTP ảnh động %s"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "payloader (bộ cộng trọng tải?) RTP âm thanh %s"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "payloader (bộ cộng trọng tải?) RTP %s"
+
+#, c-format
+msgid "%s muxer"
+msgstr "muxer (bộ kết hợp lại) %s"
+
+#, c-format
+msgid "%s encoder"
+msgstr "bộ mã hoá %s"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "Phần tử GStreamer %s"
+
+msgid "Unknown source element"
+msgstr "Không rõ phần tử nguồn"
+
+msgid "Unknown sink element"
+msgstr "Không rõ phần tử ổ chìm"
+
+msgid "Unknown element"
+msgstr "Không rõ phần tử"
+
+msgid "Unknown decoder element"
+msgstr "Không rõ phần tử giải mã"
+
+msgid "Unknown encoder element"
+msgstr "Không rõ phần tử mã hoá"
+
+msgid "Plugin or element of unknown type"
+msgstr "Không rõ kiểu phần bổ sung hay phần tử"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "YUV 4:2:0 phẳng không nén"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "YUV 4:2:0 phẳng không nén"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 đóng gói không nén"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "YUV 4:1:0 đóng gói không nén"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "YVU 4:1:0 đóng gói không nén"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 đóng gói không nén"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "YUV 4:4:4 đóng gói không nén"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "YUV 4:2:2 phẳng không nén"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "YUV 4:1:1 phẳng không nén"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Mặt phẳng Y đen trắng không nén"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Âm thanh PCM thô"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Âm thanh dấu phẩy động %d-bit thô"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Âm thanh dấu phẩy động thô"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Không thể mở tập tin VFS « %s » để ghi: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Chưa nhập tên tập tin"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "Không thể đóng tập tin VFS « %s »."
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "Lỗi khi ghi vào tập tin « %s »."
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "URI phụ đề không hợp lệ « %s » nên tắt khả năng phụ đề."
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "Chưa có khả năng phát luồng RTSP."
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "Không thể tạo phần tử « decodebin »."
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "Chỉ phát hiện luồng phụ đề. Hoặc bạn đang nạp tập tin phụ đề hay tập tin "
+#~ "văn bản kiểu khác, hoặc không nhận diện tập tin nhạc/ảnh."
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr ""
+#~ "Chưa cài đặt bộ giải mã có khả năng quản lý tập tin này. Có thể cần phải "
+#~ "cài đặt các phần bổ sung thích hợp."
+
+#~ msgid "This is not a media file"
+#~ msgstr "Đây không phải tập tin nhạc/ảnh"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "Phát hiện luồng phụ đề, không có luồng ảnh động."
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "Thiếu phần tử autovideosink, cũng thiếu phần tử xvimagesink."
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "Thiếu phần tử autoaudiosink, cũng thiếu phần tử alsasink."
+
+#~ msgid "No device specified."
+#~ msgstr "Chưa ghi rõ thiết bị nào"
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Không có thiết bị « %s »."
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "Thiết bị « %s » đang được dùng."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Không thể mở thiết bị « %s » để đọc và ghi."
+
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Lỗi khi gởi dữ liệu phần đầu GDP cho « %s:%d »."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Lỗi khi gởi dữ liệu trọng tải GDP cho « %s:%d »."
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..257332e
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..05c7089
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,615 @@
+# Chinese (simplified) translation about gst-plugin-base.
+# This file is put in the public domain.
+# Funda Wang <fundawang@linux.net.cn>, 2005.
+# Ji ZhengYu <zhengyuji@gmail.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-base 0.10.21.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2011-09-29 17:27+0200\n"
+"PO-Revision-Date: 2009-01-14 12:41+0800\n"
+"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Master"
+msgstr "主音量"
+
+msgid "Bass"
+msgstr "低音(Bass)"
+
+msgid "Treble"
+msgstr "高音(Treble)"
+
+msgid "PCM"
+msgstr "波形"
+
+msgid "Synth"
+msgstr "合成器"
+
+msgid "Line-in"
+msgstr "线路输入"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "Microphone"
+msgstr "话筒"
+
+msgid "PC Speaker"
+msgstr "PC 扬声器"
+
+msgid "Playback"
+msgstr "回放"
+
+msgid "Capture"
+msgstr "录音"
+
+msgid "Could not open device for playback in mono mode."
+msgstr "无法在单声道模式打开设备播放。"
+
+msgid "Could not open device for playback in stereo mode."
+msgstr "无法在立体声模式打开设备播放。"
+
+#, c-format
+msgid "Could not open device for playback in %d-channel mode."
+msgstr "无法在 %d 声道模式打开设备播放。"
+
+msgid ""
+"Could not open audio device for playback. Device is being used by another "
+"application."
+msgstr "无法打开音频设备用于回放。目前有另一个程序正在使用该设备。"
+
+msgid "Could not open audio device for playback."
+msgstr "无法打开音频设备播放。"
+
+msgid "Could not open device for recording in mono mode."
+msgstr "无法在单声道模式打开设备录音。"
+
+msgid "Could not open device for recording in stereo mode."
+msgstr "无法在立体声模式打开设备录音。"
+
+#, c-format
+msgid "Could not open device for recording in %d-channel mode"
+msgstr "无法在 %d 声道模式打开设备录音。"
+
+msgid ""
+"Could not open audio device for recording. Device is being used by another "
+"application."
+msgstr "无法打开音频设备用于录音。目前有另一个程序正在使用该设备。"
+
+msgid "Could not open audio device for recording."
+msgstr "无法打开音频设备录音。"
+
+msgid "Could not open CD device for reading."
+msgstr "无法打开 CD 设备读取。"
+
+msgid "Could not seek CD."
+msgstr "无法搜索 CD。"
+
+msgid "Could not read CD."
+msgstr "无法读取 CD。"
+
+msgid "Internal data stream error."
+msgstr "内部数据流错误。"
+
+#, c-format
+msgid "A %s plugin is required to play this stream, but not installed."
+msgstr "播放此数据流需要 %s 插件，但它未安装。"
+
+#, fuzzy
+msgid "Could not determine type of stream"
+msgstr "无法创建“typefind”组件。"
+
+msgid "This appears to be a text file"
+msgstr "此文件是个文本文件"
+
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr "未找到组件‘%s’－请检查您的 GStreamer 安装情况。"
+
+#, fuzzy, c-format
+msgid "Both autovideosink and %s elements are missing."
+msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+
+#, fuzzy
+msgid "The autovideosink element is missing."
+msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+
+#, c-format
+msgid "Configured videosink %s is not working."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Both autovideosink and %s elements are not working."
+msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+
+#, fuzzy
+msgid "The autovideosink element is not working."
+msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+
+msgid "Custom text sink element is not usable."
+msgstr ""
+
+msgid "No volume control found"
+msgstr "未找到音量控制"
+
+#, fuzzy, c-format
+msgid "Both autoaudiosink and %s elements are missing."
+msgstr "autovideosink 和 alsasink 组件都缺少。"
+
+#, fuzzy
+msgid "The autoaudiosink element is missing."
+msgstr "autovideosink 和 alsasink 组件都缺少。"
+
+#, c-format
+msgid "Configured audiosink %s is not working."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Both autoaudiosink and %s elements are not working."
+msgstr "autovideosink 和 alsasink 组件都缺少。"
+
+#, fuzzy
+msgid "The autoaudiosink element is not working."
+msgstr "autovideosink 和 alsasink 组件都缺少。"
+
+#, fuzzy
+msgid "Can't play a text file without video or visualizations."
+msgstr "无法播放不带视频的文本文件。"
+
+#, c-format
+msgid "No decoder available for type '%s'."
+msgstr "找不到‘%s’类型可用的解码器。"
+
+msgid "No URI specified to play from."
+msgstr "未指定要播放的 URI。"
+
+#, c-format
+msgid "Invalid URI \"%s\"."
+msgstr "无效的 URI“%s”。"
+
+msgid "This stream type cannot be played yet."
+msgstr "此类型的数据流尚不能播放。"
+
+#, c-format
+msgid "No URI handler implemented for \"%s\"."
+msgstr "“%s”未实现 URI 处理器。"
+
+msgid "Source element is invalid."
+msgstr "无效的源组件。"
+
+#, c-format
+msgid "Error while sending data to \"%s:%d\"."
+msgstr "发送数据至“%s:%d”时出错。"
+
+#, c-format
+msgid "Connection to %s:%d refused."
+msgstr "拒绝连接至 %s:%d。"
+
+msgid "Can't record audio fast enough"
+msgstr "无法足够快的录音"
+
+msgid "Failed to read tag: not enough data"
+msgstr "无法读取标签: 数据不足"
+
+msgid "track ID"
+msgstr "音轨 ID"
+
+msgid "MusicBrainz track ID"
+msgstr "MusicBrainz 音轨 ID"
+
+msgid "artist ID"
+msgstr "艺人 ID"
+
+msgid "MusicBrainz artist ID"
+msgstr "MusicBrainz 艺人 ID"
+
+msgid "album ID"
+msgstr "专辑 ID"
+
+msgid "MusicBrainz album ID"
+msgstr "MusicBrainz 专辑 ID"
+
+msgid "album artist ID"
+msgstr "音轨艺人 ID"
+
+msgid "MusicBrainz album artist ID"
+msgstr "MusicBrainz 专辑艺人 ID"
+
+msgid "track TRM ID"
+msgstr "音轨 TRM ID"
+
+msgid "MusicBrainz TRM ID"
+msgstr "MusicBrainz TRM ID"
+
+msgid "capturing shutter speed"
+msgstr ""
+
+msgid "Shutter speed used when capturing an image, in seconds"
+msgstr ""
+
+msgid "capturing focal ratio"
+msgstr ""
+
+msgid "Focal ratio (f-number) used when capturing the image"
+msgstr ""
+
+msgid "capturing focal length"
+msgstr ""
+
+msgid "Focal length of the lens used capturing the image, in mm"
+msgstr ""
+
+msgid "capturing digital zoom ratio"
+msgstr ""
+
+msgid "Digital zoom ratio used when capturing an image"
+msgstr ""
+
+msgid "capturing iso speed"
+msgstr ""
+
+msgid "The ISO speed used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure program"
+msgstr ""
+
+msgid "The exposure program used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure mode"
+msgstr ""
+
+msgid "The exposure mode used when capturing an image"
+msgstr ""
+
+msgid "capturing exposure compensation"
+msgstr ""
+
+msgid "The exposure compensation used when capturing an image"
+msgstr ""
+
+msgid "capturing scene capture type"
+msgstr ""
+
+msgid "The scene capture mode used when capturing an image"
+msgstr ""
+
+msgid "capturing gain adjustment"
+msgstr ""
+
+msgid "The overall gain adjustment applied on an image"
+msgstr ""
+
+msgid "capturing white balance"
+msgstr ""
+
+msgid "The white balance mode set when capturing an image"
+msgstr ""
+
+msgid "capturing contrast"
+msgstr ""
+
+msgid "The direction of contrast processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing saturation"
+msgstr ""
+
+msgid "The direction of saturation processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing sharpness"
+msgstr ""
+
+msgid "The direction of sharpness processing applied when capturing an image"
+msgstr ""
+
+msgid "capturing flash fired"
+msgstr ""
+
+msgid "If the flash fired while capturing an image"
+msgstr ""
+
+msgid "capturing flash mode"
+msgstr ""
+
+msgid "The selected flash mode while capturing an image"
+msgstr ""
+
+msgid "capturing metering mode"
+msgstr ""
+
+msgid ""
+"The metering mode used while determining exposure for capturing an image"
+msgstr ""
+
+msgid "capturing source"
+msgstr ""
+
+msgid "The source or type of device used for the capture"
+msgstr ""
+
+msgid "image horizontal ppi"
+msgstr ""
+
+msgid "Media (image/video) intended horizontal pixel density in ppi"
+msgstr ""
+
+msgid "image vertical ppi"
+msgstr ""
+
+msgid "Media (image/video) intended vertical pixel density in ppi"
+msgstr ""
+
+msgid "ID3v2 frame"
+msgstr ""
+
+msgid "unparsed id3v2 tag frame"
+msgstr ""
+
+msgid "This CD has no audio tracks"
+msgstr "此 CD 无音轨"
+
+msgid "ID3 tag"
+msgstr "ID3 标识"
+
+msgid "APE tag"
+msgstr "APE 标识"
+
+msgid "ICY internet radio"
+msgstr "ICY 网络电台"
+
+msgid "Apple Lossless Audio (ALAC)"
+msgstr "Apple 无损音频(ALAC)"
+
+msgid "Free Lossless Audio Codec (FLAC)"
+msgstr "自由无损音频编码(FLAC)"
+
+msgid "Lossless True Audio (TTA)"
+msgstr "无损高保真音频(TTA)"
+
+msgid "Windows Media Speech"
+msgstr "Windows Media 语音"
+
+msgid "CYUV Lossless"
+msgstr "CYUV 无损"
+
+msgid "FFMpeg v1"
+msgstr "FFMpeg v1"
+
+msgid "Lossless MSZH"
+msgstr "无损 MSZH"
+
+msgid "Run-length encoding"
+msgstr "Run-length 编码"
+
+msgid "Sami subtitle format"
+msgstr "Sami 字幕格式"
+
+msgid "TMPlayer subtitle format"
+msgstr "TMPlayer 字幕格式"
+
+msgid "Kate subtitle format"
+msgstr "Kate 字幕格式"
+
+#, fuzzy
+msgid "Uncompressed video"
+msgstr "未压缩的 YUV"
+
+#, fuzzy
+msgid "Uncompressed gray"
+msgstr "未压缩的灰度图像"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s YUV %s"
+msgstr "未压缩的 YUV"
+
+#, fuzzy, c-format
+msgid "Uncompressed %s%d-bit %s"
+msgstr "未压缩的 palettized %d-位 %s"
+
+#, c-format
+msgid "DivX MPEG-4 Version %d"
+msgstr "DivX MPEG-4 版本 %d"
+
+#, fuzzy
+msgid "Uncompressed audio"
+msgstr "未压缩的 YUV"
+
+#, fuzzy, c-format
+msgid "Raw %d-bit %s audio"
+msgstr "原始 %d-位 PCM 音频"
+
+msgid "Audio CD source"
+msgstr "音频 CD 源"
+
+msgid "DVD source"
+msgstr "DVD 源"
+
+msgid "Real Time Streaming Protocol (RTSP) source"
+msgstr "实时流协议(RTSP)源"
+
+msgid "Microsoft Media Server (MMS) protocol source"
+msgstr "Microsoft 媒体服务协议(MMS)源"
+
+#, c-format
+msgid "%s protocol source"
+msgstr "%s 协议源"
+
+#, fuzzy, c-format
+msgid "%s video RTP depayloader"
+msgstr "%s 视频 RTP 去负载器"
+
+#, fuzzy, c-format
+msgid "%s audio RTP depayloader"
+msgstr "%s 音频 RTP 去负载器"
+
+#, fuzzy, c-format
+msgid "%s RTP depayloader"
+msgstr "%s RTP 去负载器"
+
+#, c-format
+msgid "%s demuxer"
+msgstr "%s 多路分配器"
+
+#, c-format
+msgid "%s decoder"
+msgstr "%s 解码器"
+
+#, c-format
+msgid "%s video RTP payloader"
+msgstr "%s 视频 RTP 负载器"
+
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr "%s 音频 RTP 负载器"
+
+#, c-format
+msgid "%s RTP payloader"
+msgstr "%s RTP 负载器"
+
+#, c-format
+msgid "%s muxer"
+msgstr "%s 混音器"
+
+#, c-format
+msgid "%s encoder"
+msgstr "%s 编码器"
+
+#, c-format
+msgid "GStreamer element %s"
+msgstr "GStreamer 组件 %s"
+
+msgid "Unknown source element"
+msgstr "未知源组件"
+
+msgid "Unknown sink element"
+msgstr "未知消音组件"
+
+msgid "Unknown element"
+msgstr "未知组件"
+
+msgid "Unknown decoder element"
+msgstr "未知的解码组件"
+
+msgid "Unknown encoder element"
+msgstr "未知的编码组件"
+
+msgid "Plugin or element of unknown type"
+msgstr "未知类型的插件或组件"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "无法打开 vfs 文件“%s”写入：%s。"
+
+#~ msgid "No filename given"
+#~ msgstr "没有给定文件名"
+
+#~ msgid "Could not close vfs file \"%s\"."
+#~ msgstr "无法关闭 vfs 文件“%s”。"
+
+#~ msgid "Error while writing to file \"%s\"."
+#~ msgstr "写入文件“%s”时出错。"
+
+#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgstr "无效的字幕 URI “%s”，不使用字幕。"
+
+#~ msgid "RTSP streams cannot be played yet."
+#~ msgstr "RTSP 流尚不能播放。"
+
+#~ msgid "Could not create \"decodebin\" element."
+#~ msgstr "无法创建“decodebin”组件。"
+
+#~ msgid ""
+#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
+#~ "file or some other type of text file, or the media file was not "
+#~ "recognized."
+#~ msgstr ""
+#~ "仅检测到字幕流。您可能装入的是字幕文件或者其它类型文本文件，又或者是媒体文"
+#~ "件无法识别。"
+
+#~ msgid ""
+#~ "You do not have a decoder installed to handle this file. You might need "
+#~ "to install the necessary plugins."
+#~ msgstr "您没有安装可处理此文件的解码器。您可能需要安装必要的插件。"
+
+#~ msgid "This is not a media file"
+#~ msgstr "此文件不是媒体文件"
+
+#~ msgid "A subtitle stream was detected, but no video stream."
+#~ msgstr "检测到了字幕流，但无视频流。"
+
+#~ msgid "No file name specified."
+#~ msgstr "未给定文件名。"
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "无法打开文件“%s”读取。"
+
+#~ msgid "Could not create \"decodebin2\" element."
+#~ msgstr "无法创建“decodebin”组件。"
+
+#~ msgid "Could not create \"queue2\" element."
+#~ msgstr "无法创建“queue2”组件。"
+
+#, fuzzy
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "发送 gdp 头部数据至“%s:%d”时出错。"
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "发送 gdp 负载数据至“%s:%d”时出错。"
+
+#~ msgid "Uncompressed planar YUV 4:2:0"
+#~ msgstr "未压缩的 planar YUV 4:2:0"
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "未压缩的 planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:2:2"
+#~ msgstr "未压缩的 packed YUV 4:2:2"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "未压缩的 packed YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "未压缩的 packed YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "未压缩的 packed YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "未压缩的 packed YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "未压缩的 planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "未压缩的 planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "未压缩的黑白 Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "原始 PCM 音频"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "原始 %d-位浮点音频"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "原始浮点音频"
+
+#~ msgid "No device specified."
+#~ msgstr "未指定设备。"
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "设备“%s”不存在。"
+
+#~ msgid "Device \"%s\" is already being used."
+#~ msgstr "设备“%s”目前已被使用了。"
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "无法打开设备“%s”读取。"
diff --git a/sys/Makefile.am b/sys/Makefile.am
new file mode 100644
index 0000000..c3c2238
--- /dev/null
+++ b/sys/Makefile.am
@@ -0,0 +1,21 @@
+if USE_X
+XIMAGE_DIR=ximage
+else
+XIMAGE_DIR=
+endif
+
+if USE_XVIDEO
+XVIMAGE_DIR=xvimage
+else
+XVIMAGE_DIR=
+endif
+
+SUBDIRS = \
+  $(XIMAGE_DIR) \
+  $(XVIMAGE_DIR)
+
+DIST_SUBDIRS = \
+  ximage \
+  xvimage
+
+include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/sys/Makefile.in b/sys/Makefile.in
new file mode 100644
index 0000000..ef5d80e
--- /dev/null
+++ b/sys/Makefile.in
@@ -0,0 +1,784 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# include this at the end of $MODULE/ext/Makefile.am to force make to
+# build subdirectories in parallel when make -jN is used. We will end up
+# descending into all subdirectories a second time, but only after the first
+# (parallel) run has finished, so it should go right through the second time.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
+subdir = sys
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_X_FALSE@XIMAGE_DIR = 
+@USE_X_TRUE@XIMAGE_DIR = ximage
+@USE_XVIDEO_FALSE@XVIMAGE_DIR = 
+@USE_XVIDEO_TRUE@XVIMAGE_DIR = xvimage
+SUBDIRS = \
+  $(XIMAGE_DIR) \
+  $(XVIMAGE_DIR)
+
+DIST_SUBDIRS = \
+  ximage \
+  xvimage
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu sys/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+.PHONY: independent-subdirs $(SUBDIRS)
+
+independent-subdirs: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sys/ximage/Makefile.am b/sys/ximage/Makefile.am
new file mode 100644
index 0000000..df14448
--- /dev/null
+++ b/sys/ximage/Makefile.am
@@ -0,0 +1,14 @@
+plugin_LTLIBRARIES = libgstximagesink.la
+
+libgstximagesink_la_SOURCES =  ximagesink.c ximage.c ximagepool.c
+libgstximagesink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+libgstximagesink_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(X_LIBS) $(XSHM_LIBS)
+libgstximagesink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstximagesink_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la
+libgstximagesink_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = ximagesink.h ximagepool.h
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
new file mode 100644
index 0000000..21f5c6b
--- /dev/null
+++ b/sys/ximage/Makefile.in
@@ -0,0 +1,779 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = sys/ximage
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libgstximagesink_la_OBJECTS = libgstximagesink_la-ximagesink.lo \
+	libgstximagesink_la-ximage.lo \
+	libgstximagesink_la-ximagepool.lo
+libgstximagesink_la_OBJECTS = $(am_libgstximagesink_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstximagesink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstximagesink_la_CFLAGS) $(CFLAGS) \
+	$(libgstximagesink_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstximagesink_la_SOURCES)
+DIST_SOURCES = $(libgstximagesink_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstximagesink.la
+libgstximagesink_la_SOURCES = ximagesink.c ximage.c ximagepool.c
+libgstximagesink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+libgstximagesink_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(X_LIBS) $(XSHM_LIBS)
+
+libgstximagesink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstximagesink_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la
+libgstximagesink_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = ximagesink.h ximagepool.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/ximage/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu sys/ximage/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstximagesink.la: $(libgstximagesink_la_OBJECTS) $(libgstximagesink_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstximagesink_la_LINK) -rpath $(plugindir) $(libgstximagesink_la_OBJECTS) $(libgstximagesink_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstximagesink_la-ximage.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstximagesink_la-ximagepool.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstximagesink_la-ximagesink.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstximagesink_la-ximagesink.lo: ximagesink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -MT libgstximagesink_la-ximagesink.lo -MD -MP -MF $(DEPDIR)/libgstximagesink_la-ximagesink.Tpo -c -o libgstximagesink_la-ximagesink.lo `test -f 'ximagesink.c' || echo '$(srcdir)/'`ximagesink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstximagesink_la-ximagesink.Tpo $(DEPDIR)/libgstximagesink_la-ximagesink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ximagesink.c' object='libgstximagesink_la-ximagesink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -c -o libgstximagesink_la-ximagesink.lo `test -f 'ximagesink.c' || echo '$(srcdir)/'`ximagesink.c
+
+libgstximagesink_la-ximage.lo: ximage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -MT libgstximagesink_la-ximage.lo -MD -MP -MF $(DEPDIR)/libgstximagesink_la-ximage.Tpo -c -o libgstximagesink_la-ximage.lo `test -f 'ximage.c' || echo '$(srcdir)/'`ximage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstximagesink_la-ximage.Tpo $(DEPDIR)/libgstximagesink_la-ximage.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ximage.c' object='libgstximagesink_la-ximage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -c -o libgstximagesink_la-ximage.lo `test -f 'ximage.c' || echo '$(srcdir)/'`ximage.c
+
+libgstximagesink_la-ximagepool.lo: ximagepool.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -MT libgstximagesink_la-ximagepool.lo -MD -MP -MF $(DEPDIR)/libgstximagesink_la-ximagepool.Tpo -c -o libgstximagesink_la-ximagepool.lo `test -f 'ximagepool.c' || echo '$(srcdir)/'`ximagepool.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstximagesink_la-ximagepool.Tpo $(DEPDIR)/libgstximagesink_la-ximagepool.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='ximagepool.c' object='libgstximagesink_la-ximagepool.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstximagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstximagesink_la_CFLAGS) $(CFLAGS) -c -o libgstximagesink_la-ximagepool.lo `test -f 'ximagepool.c' || echo '$(srcdir)/'`ximagepool.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sys/ximage/ximage.c b/sys/ximage/ximage.c
new file mode 100644
index 0000000..24a9e61
--- /dev/null
+++ b/sys/ximage/ximage.c
@@ -0,0 +1,51 @@
+/* GStreamer
+ * Copyright (C) <2003> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ximagesink.h"
+
+GST_DEBUG_CATEGORY (gst_debug_ximagepool);
+GST_DEBUG_CATEGORY (gst_debug_ximagesink);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "ximagesink",
+          GST_RANK_SECONDARY, GST_TYPE_XIMAGESINK))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (gst_debug_ximagesink, "ximagesink", 0,
+      "ximagesink element");
+  GST_DEBUG_CATEGORY_INIT (gst_debug_ximagepool, "ximagepool", 0,
+      "ximagepool object");
+
+  GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "ximagesink",
+    "X11 video output element based on standard Xlib calls",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/ximage/ximagepool.c b/sys/ximage/ximagepool.c
new file mode 100644
index 0000000..06a5c72
--- /dev/null
+++ b/sys/ximage/ximagepool.c
@@ -0,0 +1,649 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* Object header */
+#include "ximagesink.h"
+
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagepool);
+#define GST_CAT_DEFAULT gst_debug_ximagepool
+
+struct _GstXImageBufferPoolPrivate
+{
+  GstCaps *caps;
+  GstVideoInfo info;
+  GstVideoAlignment align;
+  guint padded_width;
+  guint padded_height;
+  gboolean add_metavideo;
+  gboolean need_alignment;
+};
+
+static void gst_meta_ximage_free (GstMetaXImage * meta, GstBuffer * buffer);
+
+/* ximage metadata */
+const GstMetaInfo *
+gst_meta_ximage_get_info (void)
+{
+  static const GstMetaInfo *meta_ximage_info = NULL;
+
+  if (meta_ximage_info == NULL) {
+    meta_ximage_info = gst_meta_register ("GstMetaXImage", "GstMetaXImage",
+        sizeof (GstMetaXImage),
+        (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) gst_meta_ximage_free,
+        (GstMetaCopyFunction) NULL, (GstMetaTransformFunction) NULL);
+  }
+  return meta_ximage_info;
+}
+
+/* X11 stuff */
+static gboolean error_caught = FALSE;
+
+static int
+gst_ximagesink_handle_xerror (Display * display, XErrorEvent * xevent)
+{
+  char error_msg[1024];
+
+  XGetErrorText (display, xevent->error_code, error_msg, 1024);
+  GST_DEBUG ("ximagesink triggered an XError. error: %s", error_msg);
+  error_caught = TRUE;
+  return 0;
+}
+
+static GstMetaXImage *
+gst_buffer_add_meta_ximage (GstBuffer * buffer, GstXImageBufferPool * xpool)
+{
+  GstXImageSink *ximagesink;
+  int (*handler) (Display *, XErrorEvent *);
+  gboolean success = FALSE;
+  GstXContext *xcontext;
+  GstMetaXImage *meta;
+  gint width, height;
+  GstXImageBufferPoolPrivate *priv;
+
+  priv = xpool->priv;
+  ximagesink = xpool->sink;
+  xcontext = ximagesink->xcontext;
+
+  width = priv->padded_width;
+  height = priv->padded_height;
+
+  meta =
+      (GstMetaXImage *) gst_buffer_add_meta (buffer, GST_META_INFO_XIMAGE,
+      NULL);
+#ifdef HAVE_XSHM
+  meta->SHMInfo.shmaddr = ((void *) -1);
+  meta->SHMInfo.shmid = -1;
+#endif
+  meta->x = priv->align.padding_left;
+  meta->y = priv->align.padding_top;
+  meta->width = GST_VIDEO_INFO_WIDTH (&priv->info);
+  meta->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
+  meta->sink = gst_object_ref (ximagesink);
+
+  GST_DEBUG_OBJECT (ximagesink, "creating image %p (%dx%d)", buffer,
+      width, height);
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  /* Setting an error handler to catch failure */
+  error_caught = FALSE;
+  handler = XSetErrorHandler (gst_ximagesink_handle_xerror);
+
+#ifdef HAVE_XSHM
+  if (xcontext->use_xshm) {
+    meta->ximage = XShmCreateImage (xcontext->disp,
+        xcontext->visual,
+        xcontext->depth, ZPixmap, NULL, &meta->SHMInfo, width, height);
+    if (!meta->ximage || error_caught) {
+      g_mutex_unlock (ximagesink->x_lock);
+
+      /* Reset error flag */
+      error_caught = FALSE;
+
+      /* Push a warning */
+      GST_ELEMENT_WARNING (ximagesink, RESOURCE, WRITE,
+          ("Failed to create output image buffer of %dx%d pixels",
+              width, height),
+          ("could not XShmCreateImage a %dx%d image", width, height));
+
+      /* Retry without XShm */
+      ximagesink->xcontext->use_xshm = FALSE;
+
+      /* Hold X mutex again to try without XShm */
+      g_mutex_lock (ximagesink->x_lock);
+
+      goto no_xshm;
+    }
+
+    /* we have to use the returned bytes_per_line for our shm size */
+    meta->size = meta->ximage->bytes_per_line * meta->ximage->height;
+    GST_LOG_OBJECT (ximagesink,
+        "XShm image size is %" G_GSIZE_FORMAT ", width %d, stride %d",
+        meta->size, width, meta->ximage->bytes_per_line);
+
+    /* get shared memory */
+    meta->SHMInfo.shmid = shmget (IPC_PRIVATE, meta->size, IPC_CREAT | 0777);
+    if (meta->SHMInfo.shmid == -1)
+      goto shmget_failed;
+
+    /* attach */
+    meta->SHMInfo.shmaddr = shmat (meta->SHMInfo.shmid, NULL, 0);
+    if (meta->SHMInfo.shmaddr == ((void *) -1))
+      goto shmat_failed;
+
+    /* now we can set up the image data */
+    meta->ximage->data = meta->SHMInfo.shmaddr;
+    meta->SHMInfo.readOnly = FALSE;
+
+    if (XShmAttach (xcontext->disp, &meta->SHMInfo) == 0)
+      goto xattach_failed;
+
+    XSync (xcontext->disp, FALSE);
+
+    /* Now that everyone has attached, we can delete the shared memory segment.
+     * This way, it will be deleted as soon as we detach later, and not
+     * leaked if we crash. */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+
+    GST_DEBUG_OBJECT (ximagesink, "XServer ShmAttached to 0x%x, id 0x%lx",
+        meta->SHMInfo.shmid, meta->SHMInfo.shmseg);
+  } else
+  no_xshm:
+#endif /* HAVE_XSHM */
+  {
+    guint allocsize;
+
+    meta->ximage = XCreateImage (xcontext->disp,
+        xcontext->visual,
+        xcontext->depth, ZPixmap, 0, NULL, width, height, xcontext->bpp, 0);
+    if (!meta->ximage || error_caught)
+      goto create_failed;
+
+    /* upstream will assume that rowstrides are multiples of 4, but this
+     * doesn't always seem to be the case with XCreateImage() */
+    if ((meta->ximage->bytes_per_line % 4) != 0) {
+      GST_WARNING_OBJECT (ximagesink, "returned stride not a multiple of 4 as "
+          "usually assumed");
+    }
+
+    /* we have to use the returned bytes_per_line for our image size */
+    meta->size = meta->ximage->bytes_per_line * meta->ximage->height;
+
+    /* alloc a bit more for unexpected strides to avoid crashes upstream.
+     * FIXME: if we get an unrounded stride, the image will be displayed
+     * distorted, since all upstream elements assume a rounded stride */
+    allocsize =
+        GST_ROUND_UP_4 (meta->ximage->bytes_per_line) * meta->ximage->height;
+
+    meta->ximage->data = g_malloc (allocsize);
+    GST_LOG_OBJECT (ximagesink,
+        "non-XShm image size is %" G_GSIZE_FORMAT " (alloced: %u), width %d, "
+        "stride %d", meta->size, allocsize, width,
+        meta->ximage->bytes_per_line);
+
+    XSync (xcontext->disp, FALSE);
+  }
+
+  /* Reset error handler */
+  error_caught = FALSE;
+  XSetErrorHandler (handler);
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, meta->ximage->data,
+          NULL, meta->size, 0, meta->size));
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  success = TRUE;
+
+beach:
+  if (!success)
+    meta = NULL;
+
+  return meta;
+
+  /* ERRORS */
+create_failed:
+  {
+    g_mutex_unlock (ximagesink->x_lock);
+    /* Reset error handler */
+    error_caught = FALSE;
+    XSetErrorHandler (handler);
+    /* Push an error */
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height),
+        ("could not XShmCreateImage a %dx%d image", width, height));
+    goto beach;
+  }
+shmget_failed:
+  {
+    g_mutex_unlock (ximagesink->x_lock);
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height),
+        ("could not get shared memory of %" G_GSIZE_FORMAT " bytes",
+            meta->size));
+    goto beach;
+  }
+shmat_failed:
+  {
+    g_mutex_unlock (ximagesink->x_lock);
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height), ("Failed to shmat: %s", g_strerror (errno)));
+    /* Clean up the shared memory segment */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+xattach_failed:
+  {
+    /* Clean up the shared memory segment */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+    g_mutex_unlock (ximagesink->x_lock);
+
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height), ("Failed to XShmAttach"));
+    goto beach;
+  }
+}
+
+static void
+gst_meta_ximage_free (GstMetaXImage * meta, GstBuffer * buffer)
+{
+  GstXImageSink *ximagesink;
+
+  ximagesink = meta->sink;
+
+  GST_DEBUG_OBJECT (ximagesink, "free meta on buffer %p", buffer);
+
+  /* Hold the object lock to ensure the XContext doesn't disappear */
+  GST_OBJECT_LOCK (ximagesink);
+  /* We might have some buffers destroyed after changing state to NULL */
+  if (ximagesink->xcontext == NULL) {
+    GST_DEBUG_OBJECT (ximagesink, "Destroying XImage after XContext");
+#ifdef HAVE_XSHM
+    /* Need to free the shared memory segment even if the x context
+     * was already cleaned up */
+    if (meta->SHMInfo.shmaddr != ((void *) -1)) {
+      shmdt (meta->SHMInfo.shmaddr);
+    }
+#endif
+    goto beach;
+  }
+
+  g_mutex_lock (ximagesink->x_lock);
+
+#ifdef HAVE_XSHM
+  if (ximagesink->xcontext->use_xshm) {
+    if (meta->SHMInfo.shmaddr != ((void *) -1)) {
+      GST_DEBUG_OBJECT (ximagesink, "XServer ShmDetaching from 0x%x id 0x%lx",
+          meta->SHMInfo.shmid, meta->SHMInfo.shmseg);
+      XShmDetach (ximagesink->xcontext->disp, &meta->SHMInfo);
+      XSync (ximagesink->xcontext->disp, FALSE);
+      shmdt (meta->SHMInfo.shmaddr);
+      meta->SHMInfo.shmaddr = (void *) -1;
+    }
+    if (meta->ximage)
+      XDestroyImage (meta->ximage);
+  } else
+#endif /* HAVE_XSHM */
+  {
+    if (meta->ximage) {
+      XDestroyImage (meta->ximage);
+    }
+  }
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+beach:
+  GST_OBJECT_UNLOCK (ximagesink);
+
+  gst_object_unref (meta->sink);
+}
+
+#ifdef HAVE_XSHM
+/* This function checks that it is actually really possible to create an image
+   using XShm */
+gboolean
+gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink,
+    GstXContext * xcontext)
+{
+  XImage *ximage;
+  XShmSegmentInfo SHMInfo;
+  size_t size;
+  int (*handler) (Display *, XErrorEvent *);
+  gboolean result = FALSE;
+  gboolean did_attach = FALSE;
+
+  g_return_val_if_fail (xcontext != NULL, FALSE);
+
+  /* Sync to ensure any older errors are already processed */
+  XSync (xcontext->disp, FALSE);
+
+  /* Set defaults so we don't free these later unnecessarily */
+  SHMInfo.shmaddr = ((void *) -1);
+  SHMInfo.shmid = -1;
+
+  /* Setting an error handler to catch failure */
+  error_caught = FALSE;
+  handler = XSetErrorHandler (gst_ximagesink_handle_xerror);
+
+  /* Trying to create a 1x1 ximage */
+  GST_DEBUG ("XShmCreateImage of 1x1");
+
+  ximage = XShmCreateImage (xcontext->disp, xcontext->visual,
+      xcontext->depth, ZPixmap, NULL, &SHMInfo, 1, 1);
+
+  /* Might cause an error, sync to ensure it is noticed */
+  XSync (xcontext->disp, FALSE);
+  if (!ximage || error_caught) {
+    GST_WARNING ("could not XShmCreateImage a 1x1 image");
+    goto beach;
+  }
+  size = ximage->height * ximage->bytes_per_line;
+
+  SHMInfo.shmid = shmget (IPC_PRIVATE, size, IPC_CREAT | 0777);
+  if (SHMInfo.shmid == -1) {
+    GST_WARNING ("could not get shared memory of %" G_GSIZE_FORMAT " bytes",
+        size);
+    goto beach;
+  }
+
+  SHMInfo.shmaddr = shmat (SHMInfo.shmid, NULL, 0);
+  if (SHMInfo.shmaddr == ((void *) -1)) {
+    GST_WARNING ("Failed to shmat: %s", g_strerror (errno));
+    /* Clean up the shared memory segment */
+    shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+
+  ximage->data = SHMInfo.shmaddr;
+  SHMInfo.readOnly = FALSE;
+
+  if (XShmAttach (xcontext->disp, &SHMInfo) == 0) {
+    GST_WARNING ("Failed to XShmAttach");
+    /* Clean up the shared memory segment */
+    shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+
+  /* Sync to ensure we see any errors we caused */
+  XSync (xcontext->disp, FALSE);
+
+  /* Delete the shared memory segment as soon as everyone is attached.
+   * This way, it will be deleted as soon as we detach later, and not
+   * leaked if we crash. */
+  shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+
+  if (!error_caught) {
+    GST_DEBUG ("XServer ShmAttached to 0x%x, id 0x%lx", SHMInfo.shmid,
+        SHMInfo.shmseg);
+
+    did_attach = TRUE;
+    /* store whether we succeeded in result */
+    result = TRUE;
+  } else {
+    GST_WARNING ("MIT-SHM extension check failed at XShmAttach. "
+        "Not using shared memory.");
+  }
+
+beach:
+  /* Sync to ensure we swallow any errors we caused and reset error_caught */
+  XSync (xcontext->disp, FALSE);
+
+  error_caught = FALSE;
+  XSetErrorHandler (handler);
+
+  if (did_attach) {
+    GST_DEBUG ("XServer ShmDetaching from 0x%x id 0x%lx",
+        SHMInfo.shmid, SHMInfo.shmseg);
+    XShmDetach (xcontext->disp, &SHMInfo);
+    XSync (xcontext->disp, FALSE);
+  }
+  if (SHMInfo.shmaddr != ((void *) -1))
+    shmdt (SHMInfo.shmaddr);
+  if (ximage)
+    XDestroyImage (ximage);
+  return result;
+}
+#endif /* HAVE_XSHM */
+
+/* bufferpool */
+static void gst_ximage_buffer_pool_finalize (GObject * object);
+
+#define GST_XIMAGE_BUFFER_POOL_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XIMAGE_BUFFER_POOL, GstXImageBufferPoolPrivate))
+
+#define gst_ximage_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE (GstXImageBufferPool, gst_ximage_buffer_pool,
+    GST_TYPE_BUFFER_POOL);
+
+static const gchar **
+ximage_buffer_pool_get_options (GstBufferPool * pool)
+{
+  static const gchar *options[] = { GST_BUFFER_POOL_OPTION_META_VIDEO,
+    GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, NULL
+  };
+
+  return options;
+}
+
+static gboolean
+ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+{
+  GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
+  GstXImageBufferPoolPrivate *priv = xpool->priv;
+  GstVideoInfo info;
+  const GstCaps *caps;
+
+  if (!gst_buffer_pool_config_get (config, &caps, NULL, NULL, NULL, NULL, NULL))
+    goto wrong_config;
+
+  if (caps == NULL)
+    goto no_caps;
+
+  /* now parse the caps from the config */
+  if (!gst_video_info_from_caps (&info, caps))
+    goto wrong_caps;
+
+  priv->info = info;
+
+  GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
+      caps);
+
+  /* keep track of the width and height and caps */
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+  priv->caps = gst_caps_copy (caps);
+
+  /* check for the configured metadata */
+  priv->add_metavideo =
+      gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_META_VIDEO);
+
+  /* parse extra alignment info */
+  priv->need_alignment = gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+
+  if (priv->need_alignment) {
+    gst_buffer_pool_config_get_video_alignment (config, &priv->align);
+
+    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
+        priv->align.padding_left, priv->align.padding_left,
+        priv->align.padding_bottom);
+
+    /* we need the video metadata too now */
+    priv->add_metavideo = TRUE;
+  }
+
+  /* add the padding */
+  priv->padded_width =
+      GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
+      priv->align.padding_right;
+  priv->padded_height =
+      GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
+      priv->align.padding_bottom;
+
+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+
+  /* ERRORS */
+wrong_config:
+  {
+    GST_WARNING_OBJECT (pool, "invalid config");
+    return FALSE;
+  }
+no_caps:
+  {
+    GST_WARNING_OBJECT (pool, "no caps in config");
+    return FALSE;
+  }
+wrong_caps:
+  {
+    GST_WARNING_OBJECT (pool,
+        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+}
+
+/* This function handles GstXImageBuffer creation depending on XShm availability */
+static GstFlowReturn
+ximage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+    GstBufferPoolParams * params)
+{
+  GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
+  GstXImageBufferPoolPrivate *priv = xpool->priv;
+  GstVideoInfo *info;
+  GstBuffer *ximage;
+  GstMetaXImage *meta;
+
+  info = &priv->info;
+
+  ximage = gst_buffer_new ();
+  meta = gst_buffer_add_meta_ximage (ximage, xpool);
+  if (meta == NULL) {
+    gst_buffer_unref (ximage);
+    goto no_buffer;
+  }
+  if (priv->add_metavideo) {
+    GstMetaVideo *meta;
+
+    GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
+    /* these are just the defaults for now */
+    meta = gst_buffer_add_meta_video (ximage, 0, GST_VIDEO_INFO_FORMAT (info),
+        priv->padded_width, priv->padded_height);
+
+    if (priv->need_alignment) {
+      gint vpad, hpad, pstride;
+
+      vpad = priv->align.padding_left;
+      hpad = priv->align.padding_top;
+
+      meta->width = GST_VIDEO_INFO_WIDTH (&priv->info);
+      meta->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
+      pstride = GST_VIDEO_INFO_COMP_PSTRIDE (&priv->info, 0);
+
+      meta->offset[0] += (vpad * meta->stride[0]) + (hpad * pstride);
+    }
+  }
+  *buffer = ximage;
+
+  return GST_FLOW_OK;
+
+  /* ERROR */
+no_buffer:
+  {
+    GST_WARNING_OBJECT (pool, "can't create image");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+ximage_buffer_pool_free (GstBufferPool * pool, GstBuffer * buffer)
+{
+  gst_buffer_unref (buffer);
+}
+
+GstBufferPool *
+gst_ximage_buffer_pool_new (GstXImageSink * ximagesink)
+{
+  GstXImageBufferPool *pool;
+
+  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+
+  pool = g_object_new (GST_TYPE_XIMAGE_BUFFER_POOL, NULL);
+  pool->sink = gst_object_ref (ximagesink);
+
+  GST_LOG_OBJECT (pool, "new XImage buffer pool %p", pool);
+
+  return GST_BUFFER_POOL_CAST (pool);
+}
+
+static void
+gst_ximage_buffer_pool_class_init (GstXImageBufferPoolClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstXImageBufferPoolPrivate));
+
+  gobject_class->finalize = gst_ximage_buffer_pool_finalize;
+
+  gstbufferpool_class->get_options = ximage_buffer_pool_get_options;
+  gstbufferpool_class->set_config = ximage_buffer_pool_set_config;
+  gstbufferpool_class->alloc_buffer = ximage_buffer_pool_alloc;
+  gstbufferpool_class->free_buffer = ximage_buffer_pool_free;
+}
+
+static void
+gst_ximage_buffer_pool_init (GstXImageBufferPool * pool)
+{
+  pool->priv = GST_XIMAGE_BUFFER_POOL_GET_PRIVATE (pool);
+}
+
+static void
+gst_ximage_buffer_pool_finalize (GObject * object)
+{
+  GstXImageBufferPool *pool = GST_XIMAGE_BUFFER_POOL_CAST (object);
+  GstXImageBufferPoolPrivate *priv = pool->priv;
+
+  GST_LOG_OBJECT (pool, "finalize XImage buffer pool %p", pool);
+
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+  gst_object_unref (pool->sink);
+
+  G_OBJECT_CLASS (gst_ximage_buffer_pool_parent_class)->finalize (object);
+}
diff --git a/sys/ximage/ximagepool.h b/sys/ximage/ximagepool.h
new file mode 100644
index 0000000..ec88c27
--- /dev/null
+++ b/sys/ximage/ximagepool.h
@@ -0,0 +1,112 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_XIMAGEPOOL_H__
+#define __GST_XIMAGEPOOL_H__
+
+#ifdef HAVE_XSHM
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif /* HAVE_XSHM */
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef HAVE_XSHM
+#include <X11/extensions/XShm.h>
+#endif /* HAVE_XSHM */
+
+#include <string.h>
+#include <math.h>
+
+
+G_BEGIN_DECLS
+
+typedef struct _GstMetaXImage GstMetaXImage;
+
+typedef struct _GstXImageBufferPool GstXImageBufferPool;
+typedef struct _GstXImageBufferPoolClass GstXImageBufferPoolClass;
+typedef struct _GstXImageBufferPoolPrivate GstXImageBufferPoolPrivate;
+
+#include "ximagesink.h"
+
+const GstMetaInfo * gst_meta_ximage_get_info (void);
+#define GST_META_INFO_XIMAGE  (gst_meta_ximage_get_info())
+
+#define gst_buffer_get_meta_ximage(b) ((GstMetaXImage*)gst_buffer_get_meta((b),GST_META_INFO_XIMAGE))
+
+/**
+ * GstMetaXImage:
+ * @simagesink: a reference to the our #GstXImageSink
+ * @ximage: the XImage of this buffer
+ * @width: the width in pixels of XImage @ximage
+ * @height: the height in pixels of XImage @ximage
+ * @size: the size in bytes of XImage @ximage
+ *
+ * Subclass of #GstMeta containing additional information about an XImage.
+ */
+struct _GstMetaXImage
+{
+  GstMeta meta;
+
+  /* Reference to the ximagesink we belong to */
+  GstXImageSink *sink;
+
+  XImage *ximage;
+
+#ifdef HAVE_XSHM
+  XShmSegmentInfo SHMInfo;
+#endif                          /* HAVE_XSHM */
+
+  gint x, y;
+  gint width, height;
+  size_t size;
+};
+
+/* buffer pool functions */
+#define GST_TYPE_XIMAGE_BUFFER_POOL      (gst_ximage_buffer_pool_get_type())
+#define GST_IS_XIMAGE_BUFFER_POOL(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_XIMAGE_BUFFER_POOL))
+#define GST_XIMAGE_BUFFER_POOL(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_XIMAGE_BUFFER_POOL, GstXImageBufferPool))
+#define GST_XIMAGE_BUFFER_POOL_CAST(obj) ((GstXImageBufferPool*)(obj))
+
+struct _GstXImageBufferPool
+{
+  GstBufferPool bufferpool;
+
+  GstXImageSink *sink;
+
+  GstXImageBufferPoolPrivate *priv;
+};
+
+struct _GstXImageBufferPoolClass
+{
+  GstBufferPoolClass parent_class;
+};
+
+GType gst_ximage_buffer_pool_get_type (void);
+
+GstBufferPool * gst_ximage_buffer_pool_new     (GstXImageSink * ximagesink);
+
+gboolean gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink,
+        GstXContext * xcontext);
+
+G_END_DECLS
+
+#endif /* __GST_XIMAGEPOOL_H__ */
diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c
new file mode 100644
index 0000000..a0a1420
--- /dev/null
+++ b/sys/ximage/ximagesink.c
@@ -0,0 +1,1985 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-ximagesink
+ *
+ * XImageSink renders video frames to a drawable (XWindow) on a local or remote
+ * display. This element can receive a Window ID from the application through
+ * the #GstVideoOverlay interface and will then render video frames in this
+ * drawable. If no Window ID was provided by the application, the element will
+ * create its own internal window and render into it.
+ *
+ * <refsect2>
+ * <title>Scaling</title>
+ * <para>
+ * As standard XImage rendering to a drawable is not scaled, XImageSink will use
+ * reverse caps negotiation to try to get scaled video frames for the drawable.
+ * This is accomplished by asking the peer pad if it accepts some different caps
+ * which in most cases implies that there is a scaling element in the pipeline,
+ * or that an element generating the video frames can generate them with a 
+ * different geometry. This mechanism is handled during buffer allocations, for
+ * each allocation request the video sink will check the drawable geometry, look
+ * at the #GstXImageSink:force-aspect-ratio property, calculate the geometry of
+ * desired video frames and then check that the peer pad accept those new caps.
+ * If it does it will then allocate a buffer in video memory with this new
+ * geometry and return it with the new caps.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Events</title>
+ * <para>
+ * XImageSink creates a thread to handle events coming from the drawable. There
+ * are several kind of events that can be grouped in 2 big categories: input 
+ * events and window state related events. Input events will be translated to
+ * navigation events and pushed upstream for other elements to react on them.
+ * This includes events such as pointer moves, key press/release, clicks etc...
+ * Other events are used to handle the drawable appearance even when the data
+ * is not flowing (GST_STATE_PAUSED). That means that even when the element is
+ * paused, it will receive expose events from the drawable and draw the latest
+ * frame with correct borders/aspect-ratio.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Pixel aspect ratio</title>
+ * <para>
+ * When changing state to GST_STATE_READY, XImageSink will open a connection to
+ * the display specified in the #GstXImageSink:display property or the default
+ * display if nothing specified. Once this connection is open it will inspect 
+ * the display configuration including the physical display geometry and 
+ * then calculate the pixel aspect ratio. When caps negotiation will occur, the
+ * video sink will set the calculated pixel aspect ratio on the caps to make 
+ * sure that incoming video frames will have the correct pixel aspect ratio for
+ * this display. Sometimes the calculated pixel aspect ratio can be wrong, it is
+ * then possible to enforce a specific pixel aspect ratio using the
+ * #GstXImageSink:pixel-aspect-ratio property.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch -v videotestsrc ! queue ! ximagesink
+ * ]| A pipeline to test reverse negotiation. When the test video signal appears
+ * you can resize the window and see that scaled buffers of the desired size are
+ * going to arrive with a short delay. This illustrates how buffers of desired
+ * size are allocated along the way. If you take away the queue, scaling will
+ * happen almost immediately.
+ * |[
+ * gst-launch -v videotestsrc ! navigationtest ! videoconvert ! ximagesink
+ * ]| A pipeline to test navigation events.
+ * While moving the mouse pointer over the test signal you will see a black box
+ * following the mouse pointer. If you press the mouse button somewhere on the 
+ * video and release it somewhere else a green box will appear where you pressed
+ * the button and a red one where you released it. (The navigationtest element
+ * is part of gst-plugins-good.)
+ * |[
+ * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! videoscale ! ximagesink
+ * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by
+ * videotestsrc, in most cases the pixel aspect ratio of the display will be
+ * 1/1. This means that videoscale will have to do the scaling to convert 
+ * incoming frames to a size that will match the display pixel aspect ratio
+ * (from 320x240 to 320x180 in this case). Note that you might have to escape 
+ * some characters for your shell like '\(fraction\)'.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* Our interfaces */
+#include <gst/interfaces/navigation.h>
+#include <gst/interfaces/videooverlay.h>
+
+#include <gst/video/gstmetavideo.h>
+
+/* Object header */
+#include "ximagesink.h"
+
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink);
+GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
+#define GST_CAT_DEFAULT gst_debug_ximagesink
+
+typedef struct
+{
+  unsigned long flags;
+  unsigned long functions;
+  unsigned long decorations;
+  long input_mode;
+  unsigned long status;
+}
+MotifWmHints, MwmHints;
+
+#define MWM_HINTS_DECORATIONS   (1L << 1)
+
+static void gst_ximagesink_reset (GstXImageSink * ximagesink);
+static void gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink);
+static void gst_ximagesink_expose (GstVideoOverlay * overlay);
+
+static GstStaticPadTemplate gst_ximagesink_sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "framerate = (fraction) [ 0, MAX ], "
+        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]")
+    );
+
+enum
+{
+  PROP_0,
+  PROP_DISPLAY,
+  PROP_SYNCHRONOUS,
+  PROP_PIXEL_ASPECT_RATIO,
+  PROP_FORCE_ASPECT_RATIO,
+  PROP_HANDLE_EVENTS,
+  PROP_HANDLE_EXPOSE,
+  PROP_WINDOW_WIDTH,
+  PROP_WINDOW_HEIGHT
+};
+
+/* ============================================================= */
+/*                                                               */
+/*                       Public Methods                          */
+/*                                                               */
+/* ============================================================= */
+
+/* =========================================== */
+/*                                             */
+/*          Object typing & Creation           */
+/*                                             */
+/* =========================================== */
+static void gst_ximagesink_navigation_init (GstNavigationInterface * klass);
+static void gst_ximagesink_video_overlay_init (GstVideoOverlayIface * iface);
+#define gst_ximagesink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstXImageSink, gst_ximagesink, GST_TYPE_VIDEO_SINK,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, gst_ximagesink_navigation_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
+        gst_ximagesink_video_overlay_init));
+
+/* ============================================================= */
+/*                                                               */
+/*                       Private Methods                         */
+/*                                                               */
+/* ============================================================= */
+
+/* X11 stuff */
+
+/* We are called with the x_lock taken */
+static void
+gst_ximagesink_xwindow_draw_borders (GstXImageSink * ximagesink,
+    GstXWindow * xwindow, GstVideoRectangle rect)
+{
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (xwindow != NULL);
+
+  XSetForeground (ximagesink->xcontext->disp, xwindow->gc,
+      ximagesink->xcontext->black);
+
+  /* Left border */
+  if (rect.x > 0) {
+    XFillRectangle (ximagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        0, 0, rect.x, xwindow->height);
+  }
+
+  /* Right border */
+  if ((rect.x + rect.w) < xwindow->width) {
+    XFillRectangle (ximagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        rect.x + rect.w, 0, xwindow->width, xwindow->height);
+  }
+
+  /* Top border */
+  if (rect.y > 0) {
+    XFillRectangle (ximagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        0, 0, xwindow->width, rect.y);
+  }
+
+  /* Bottom border */
+  if ((rect.y + rect.h) < xwindow->height) {
+    XFillRectangle (ximagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        0, rect.y + rect.h, xwindow->width, xwindow->height);
+  }
+}
+
+/* This function puts a GstXImageBuffer on a GstXImageSink's window */
+static gboolean
+gst_ximagesink_ximage_put (GstXImageSink * ximagesink, GstBuffer * ximage)
+{
+  GstMetaXImage *meta;
+  GstMetaVideoCrop *crop;
+  GstVideoRectangle src, dst, result;
+  gboolean draw_border = FALSE;
+
+  /* We take the flow_lock. If expose is in there we don't want to run
+     concurrently from the data flow thread */
+  g_mutex_lock (ximagesink->flow_lock);
+
+  if (G_UNLIKELY (ximagesink->xwindow == NULL)) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    return FALSE;
+  }
+
+  /* Draw borders when displaying the first frame. After this
+     draw borders only on expose event or caps change (ximagesink->draw_border = TRUE). */
+  if (!ximagesink->cur_image || ximagesink->draw_border) {
+    draw_border = TRUE;
+  }
+
+  /* Store a reference to the last image we put, lose the previous one */
+  if (ximage && ximagesink->cur_image != ximage) {
+    if (ximagesink->cur_image) {
+      GST_LOG_OBJECT (ximagesink, "unreffing %p", ximagesink->cur_image);
+      gst_buffer_unref (ximagesink->cur_image);
+    }
+    GST_LOG_OBJECT (ximagesink, "reffing %p as our current image", ximage);
+    ximagesink->cur_image = gst_buffer_ref (ximage);
+  }
+
+  /* Expose sends a NULL image, we take the latest frame */
+  if (!ximage) {
+    draw_border = TRUE;
+    if (ximagesink->cur_image) {
+      ximage = ximagesink->cur_image;
+    } else {
+      g_mutex_unlock (ximagesink->flow_lock);
+      return TRUE;
+    }
+  }
+
+  meta = gst_buffer_get_meta_ximage (ximage);
+  crop = gst_buffer_get_meta_video_crop (ximage);
+
+  if (crop) {
+    src.x = crop->x + meta->x;
+    src.y = crop->y + meta->y;
+    src.w = crop->width;
+    src.h = crop->height;
+  } else {
+    src.x = meta->x;
+    src.y = meta->y;
+    src.w = meta->width;
+    src.h = meta->height;
+  }
+  dst.w = ximagesink->xwindow->width;
+  dst.h = ximagesink->xwindow->height;
+
+  gst_video_sink_center_rect (src, dst, &result, FALSE);
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  if (draw_border) {
+    gst_ximagesink_xwindow_draw_borders (ximagesink, ximagesink->xwindow,
+        result);
+    ximagesink->draw_border = FALSE;
+  }
+#ifdef HAVE_XSHM
+  if (ximagesink->xcontext->use_xshm) {
+    GST_LOG_OBJECT (ximagesink,
+        "XShmPutImage on %p, src: %d, %d - dest: %d, %d, dim: %dx%d, win %dx%d",
+        ximage, 0, 0, result.x, result.y, result.w, result.h,
+        ximagesink->xwindow->width, ximagesink->xwindow->height);
+    XShmPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win,
+        ximagesink->xwindow->gc, meta->ximage, src.x, src.y, result.x, result.y,
+        result.w, result.h, FALSE);
+  } else
+#endif /* HAVE_XSHM */
+  {
+    GST_LOG_OBJECT (ximagesink,
+        "XPutImage on %p, src: %d, %d - dest: %d, %d, dim: %dx%d, win %dx%d",
+        ximage, 0, 0, result.x, result.y, result.w, result.h,
+        ximagesink->xwindow->width, ximagesink->xwindow->height);
+    XPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win,
+        ximagesink->xwindow->gc, meta->ximage, src.x, src.y, result.x, result.y,
+        result.w, result.h);
+  }
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  g_mutex_unlock (ximagesink->flow_lock);
+
+  return TRUE;
+}
+
+static gboolean
+gst_ximagesink_xwindow_decorate (GstXImageSink * ximagesink,
+    GstXWindow * window)
+{
+  Atom hints_atom = None;
+  MotifWmHints *hints;
+
+  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), FALSE);
+  g_return_val_if_fail (window != NULL, FALSE);
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  hints_atom = XInternAtom (ximagesink->xcontext->disp, "_MOTIF_WM_HINTS",
+      True);
+  if (hints_atom == None) {
+    g_mutex_unlock (ximagesink->x_lock);
+    return FALSE;
+  }
+
+  hints = g_malloc0 (sizeof (MotifWmHints));
+
+  hints->flags |= MWM_HINTS_DECORATIONS;
+  hints->decorations = 1 << 0;
+
+  XChangeProperty (ximagesink->xcontext->disp, window->win,
+      hints_atom, hints_atom, 32, PropModeReplace,
+      (guchar *) hints, sizeof (MotifWmHints) / sizeof (long));
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  g_free (hints);
+
+  return TRUE;
+}
+
+static void
+gst_ximagesink_xwindow_set_title (GstXImageSink * ximagesink,
+    GstXWindow * xwindow, const gchar * media_title)
+{
+  if (media_title) {
+    g_free (ximagesink->media_title);
+    ximagesink->media_title = g_strdup (media_title);
+  }
+  if (xwindow) {
+    /* we have a window */
+    if (xwindow->internal) {
+      XTextProperty xproperty;
+      const gchar *app_name;
+      const gchar *title = NULL;
+      gchar *title_mem = NULL;
+
+      /* set application name as a title */
+      app_name = g_get_application_name ();
+
+      if (app_name && ximagesink->media_title) {
+        title = title_mem = g_strconcat (ximagesink->media_title, " : ",
+            app_name, NULL);
+      } else if (app_name) {
+        title = app_name;
+      } else if (ximagesink->media_title) {
+        title = ximagesink->media_title;
+      }
+
+      if (title) {
+        if ((XStringListToTextProperty (((char **) &title), 1,
+                    &xproperty)) != 0) {
+          XSetWMName (ximagesink->xcontext->disp, xwindow->win, &xproperty);
+          XFree (xproperty.value);
+        }
+
+        g_free (title_mem);
+      }
+    }
+  }
+}
+
+/* This function handles a GstXWindow creation */
+static GstXWindow *
+gst_ximagesink_xwindow_new (GstXImageSink * ximagesink, gint width, gint height)
+{
+  GstXWindow *xwindow = NULL;
+  XGCValues values;
+
+  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+
+  xwindow = g_new0 (GstXWindow, 1);
+
+  xwindow->width = width;
+  xwindow->height = height;
+  xwindow->internal = TRUE;
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  xwindow->win = XCreateSimpleWindow (ximagesink->xcontext->disp,
+      ximagesink->xcontext->root,
+      0, 0, width, height, 0, 0, ximagesink->xcontext->black);
+
+  /* We have to do that to prevent X from redrawing the background on 
+     ConfigureNotify. This takes away flickering of video when resizing. */
+  XSetWindowBackgroundPixmap (ximagesink->xcontext->disp, xwindow->win, None);
+
+  /* set application name as a title */
+  gst_ximagesink_xwindow_set_title (ximagesink, xwindow, NULL);
+
+  if (ximagesink->handle_events) {
+    Atom wm_delete;
+
+    XSelectInput (ximagesink->xcontext->disp, xwindow->win, ExposureMask |
+        StructureNotifyMask | PointerMotionMask | KeyPressMask |
+        KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
+
+    /* Tell the window manager we'd like delete client messages instead of
+     * being killed */
+    wm_delete = XInternAtom (ximagesink->xcontext->disp,
+        "WM_DELETE_WINDOW", False);
+    (void) XSetWMProtocols (ximagesink->xcontext->disp, xwindow->win,
+        &wm_delete, 1);
+  }
+
+  xwindow->gc = XCreateGC (ximagesink->xcontext->disp, xwindow->win,
+      0, &values);
+
+  XMapRaised (ximagesink->xcontext->disp, xwindow->win);
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  gst_ximagesink_xwindow_decorate (ximagesink, xwindow);
+
+  gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (ximagesink),
+      xwindow->win);
+
+  return xwindow;
+}
+
+/* This function destroys a GstXWindow */
+static void
+gst_ximagesink_xwindow_destroy (GstXImageSink * ximagesink,
+    GstXWindow * xwindow)
+{
+  g_return_if_fail (xwindow != NULL);
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  /* If we did not create that window we just free the GC and let it live */
+  if (xwindow->internal)
+    XDestroyWindow (ximagesink->xcontext->disp, xwindow->win);
+  else
+    XSelectInput (ximagesink->xcontext->disp, xwindow->win, 0);
+
+  XFreeGC (ximagesink->xcontext->disp, xwindow->gc);
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  g_free (xwindow);
+}
+
+static void
+gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink)
+{
+  XWindowAttributes attr;
+  gboolean reconfigure;
+
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+
+  /* Update the window geometry */
+  g_mutex_lock (ximagesink->x_lock);
+  if (G_UNLIKELY (ximagesink->xwindow == NULL)) {
+    g_mutex_unlock (ximagesink->x_lock);
+    return;
+  }
+
+  XGetWindowAttributes (ximagesink->xcontext->disp,
+      ximagesink->xwindow->win, &attr);
+
+  /* Check if we would suggest a different width/height now */
+  reconfigure = (ximagesink->xwindow->width != attr.width)
+      || (ximagesink->xwindow->height != attr.height);
+  ximagesink->xwindow->width = attr.width;
+  ximagesink->xwindow->height = attr.height;
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  if (reconfigure)
+    gst_pad_push_event (GST_BASE_SINK (ximagesink)->sinkpad,
+        gst_event_new_reconfigure ());
+}
+
+static void
+gst_ximagesink_xwindow_clear (GstXImageSink * ximagesink, GstXWindow * xwindow)
+{
+  g_return_if_fail (xwindow != NULL);
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  XSetForeground (ximagesink->xcontext->disp, xwindow->gc,
+      ximagesink->xcontext->black);
+
+  XFillRectangle (ximagesink->xcontext->disp, xwindow->win, xwindow->gc,
+      0, 0, xwindow->width, xwindow->height);
+
+  XSync (ximagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (ximagesink->x_lock);
+}
+
+/* This function handles XEvents that might be in the queue. It generates
+   GstEvent that will be sent upstream in the pipeline to handle interactivity
+   and navigation.*/
+static void
+gst_ximagesink_handle_xevents (GstXImageSink * ximagesink)
+{
+  XEvent e;
+  guint pointer_x = 0, pointer_y = 0;
+  gboolean pointer_moved = FALSE;
+  gboolean exposed = FALSE, configured = FALSE;
+
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+
+  /* Then we get all pointer motion events, only the last position is
+     interesting. */
+  g_mutex_lock (ximagesink->flow_lock);
+  g_mutex_lock (ximagesink->x_lock);
+  while (XCheckWindowEvent (ximagesink->xcontext->disp,
+          ximagesink->xwindow->win, PointerMotionMask, &e)) {
+    g_mutex_unlock (ximagesink->x_lock);
+    g_mutex_unlock (ximagesink->flow_lock);
+
+    switch (e.type) {
+      case MotionNotify:
+        pointer_x = e.xmotion.x;
+        pointer_y = e.xmotion.y;
+        pointer_moved = TRUE;
+        break;
+      default:
+        break;
+    }
+    g_mutex_lock (ximagesink->flow_lock);
+    g_mutex_lock (ximagesink->x_lock);
+  }
+
+  if (pointer_moved) {
+    g_mutex_unlock (ximagesink->x_lock);
+    g_mutex_unlock (ximagesink->flow_lock);
+
+    GST_DEBUG ("ximagesink pointer moved over window at %d,%d",
+        pointer_x, pointer_y);
+    gst_navigation_send_mouse_event (GST_NAVIGATION (ximagesink),
+        "mouse-move", 0, pointer_x, pointer_y);
+
+    g_mutex_lock (ximagesink->flow_lock);
+    g_mutex_lock (ximagesink->x_lock);
+  }
+
+  /* We get all remaining events on our window to throw them upstream */
+  while (XCheckWindowEvent (ximagesink->xcontext->disp,
+          ximagesink->xwindow->win,
+          KeyPressMask | KeyReleaseMask |
+          ButtonPressMask | ButtonReleaseMask, &e)) {
+    KeySym keysym;
+
+    /* We lock only for the X function call */
+    g_mutex_unlock (ximagesink->x_lock);
+    g_mutex_unlock (ximagesink->flow_lock);
+
+    switch (e.type) {
+      case ButtonPress:
+        /* Mouse button pressed/released over our window. We send upstream
+           events for interactivity/navigation */
+        GST_DEBUG ("ximagesink button %d pressed over window at %d,%d",
+            e.xbutton.button, e.xbutton.x, e.xbutton.x);
+        gst_navigation_send_mouse_event (GST_NAVIGATION (ximagesink),
+            "mouse-button-press", e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        break;
+      case ButtonRelease:
+        GST_DEBUG ("ximagesink button %d release over window at %d,%d",
+            e.xbutton.button, e.xbutton.x, e.xbutton.x);
+        gst_navigation_send_mouse_event (GST_NAVIGATION (ximagesink),
+            "mouse-button-release", e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        break;
+      case KeyPress:
+      case KeyRelease:
+        /* Key pressed/released over our window. We send upstream
+           events for interactivity/navigation */
+        GST_DEBUG ("ximagesink key %d pressed over window at %d,%d",
+            e.xkey.keycode, e.xkey.x, e.xkey.x);
+        g_mutex_lock (ximagesink->x_lock);
+        keysym = XKeycodeToKeysym (ximagesink->xcontext->disp,
+            e.xkey.keycode, 0);
+        g_mutex_unlock (ximagesink->x_lock);
+        if (keysym != NoSymbol) {
+          char *key_str = NULL;
+
+          g_mutex_lock (ximagesink->x_lock);
+          key_str = XKeysymToString (keysym);
+          g_mutex_unlock (ximagesink->x_lock);
+          gst_navigation_send_key_event (GST_NAVIGATION (ximagesink),
+              e.type == KeyPress ? "key-press" : "key-release", key_str);
+        } else {
+          gst_navigation_send_key_event (GST_NAVIGATION (ximagesink),
+              e.type == KeyPress ? "key-press" : "key-release", "unknown");
+        }
+        break;
+      default:
+        GST_DEBUG_OBJECT (ximagesink, "ximagesink unhandled X event (%d)",
+            e.type);
+    }
+    g_mutex_lock (ximagesink->flow_lock);
+    g_mutex_lock (ximagesink->x_lock);
+  }
+
+  /* Handle Expose */
+  while (XCheckWindowEvent (ximagesink->xcontext->disp,
+          ximagesink->xwindow->win, ExposureMask | StructureNotifyMask, &e)) {
+    switch (e.type) {
+      case Expose:
+        exposed = TRUE;
+        break;
+      case ConfigureNotify:
+        g_mutex_unlock (ximagesink->x_lock);
+        gst_ximagesink_xwindow_update_geometry (ximagesink);
+        g_mutex_lock (ximagesink->x_lock);
+        configured = TRUE;
+        break;
+      default:
+        break;
+    }
+  }
+
+  if (ximagesink->handle_expose && (exposed || configured)) {
+    g_mutex_unlock (ximagesink->x_lock);
+    g_mutex_unlock (ximagesink->flow_lock);
+
+    gst_ximagesink_expose (GST_VIDEO_OVERLAY (ximagesink));
+
+    g_mutex_lock (ximagesink->flow_lock);
+    g_mutex_lock (ximagesink->x_lock);
+  }
+
+  /* Handle Display events */
+  while (XPending (ximagesink->xcontext->disp)) {
+    XNextEvent (ximagesink->xcontext->disp, &e);
+
+    switch (e.type) {
+      case ClientMessage:{
+        Atom wm_delete;
+
+        wm_delete = XInternAtom (ximagesink->xcontext->disp,
+            "WM_DELETE_WINDOW", False);
+        if (wm_delete == (Atom) e.xclient.data.l[0]) {
+          /* Handle window deletion by posting an error on the bus */
+          GST_ELEMENT_ERROR (ximagesink, RESOURCE, NOT_FOUND,
+              ("Output window was closed"), (NULL));
+
+          g_mutex_unlock (ximagesink->x_lock);
+          gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+          ximagesink->xwindow = NULL;
+          g_mutex_lock (ximagesink->x_lock);
+        }
+        break;
+      }
+      default:
+        break;
+    }
+  }
+
+  g_mutex_unlock (ximagesink->x_lock);
+  g_mutex_unlock (ximagesink->flow_lock);
+}
+
+static gpointer
+gst_ximagesink_event_thread (GstXImageSink * ximagesink)
+{
+  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+
+  GST_OBJECT_LOCK (ximagesink);
+  while (ximagesink->running) {
+    GST_OBJECT_UNLOCK (ximagesink);
+
+    if (ximagesink->xwindow) {
+      gst_ximagesink_handle_xevents (ximagesink);
+    }
+    /* FIXME: do we want to align this with the framerate or anything else? */
+    g_usleep (G_USEC_PER_SEC / 20);
+
+    GST_OBJECT_LOCK (ximagesink);
+  }
+  GST_OBJECT_UNLOCK (ximagesink);
+
+  return NULL;
+}
+
+static void
+gst_ximagesink_manage_event_thread (GstXImageSink * ximagesink)
+{
+  GThread *thread = NULL;
+
+  /* don't start the thread too early */
+  if (ximagesink->xcontext == NULL) {
+    return;
+  }
+
+  GST_OBJECT_LOCK (ximagesink);
+  if (ximagesink->handle_expose || ximagesink->handle_events) {
+    if (!ximagesink->event_thread) {
+      /* Setup our event listening thread */
+      GST_DEBUG_OBJECT (ximagesink, "run xevent thread, expose %d, events %d",
+          ximagesink->handle_expose, ximagesink->handle_events);
+      ximagesink->running = TRUE;
+      ximagesink->event_thread = g_thread_create (
+          (GThreadFunc) gst_ximagesink_event_thread, ximagesink, TRUE, NULL);
+    }
+  } else {
+    if (ximagesink->event_thread) {
+      GST_DEBUG_OBJECT (ximagesink, "stop xevent thread, expose %d, events %d",
+          ximagesink->handle_expose, ximagesink->handle_events);
+      ximagesink->running = FALSE;
+      /* grab thread and mark it as NULL */
+      thread = ximagesink->event_thread;
+      ximagesink->event_thread = NULL;
+    }
+  }
+  GST_OBJECT_UNLOCK (ximagesink);
+
+  /* Wait for our event thread to finish */
+  if (thread)
+    g_thread_join (thread);
+
+}
+
+
+/* This function calculates the pixel aspect ratio based on the properties
+ * in the xcontext structure and stores it there. */
+static void
+gst_ximagesink_calculate_pixel_aspect_ratio (GstXContext * xcontext)
+{
+  static const gint par[][2] = {
+    {1, 1},                     /* regular screen */
+    {16, 15},                   /* PAL TV */
+    {11, 10},                   /* 525 line Rec.601 video */
+    {54, 59},                   /* 625 line Rec.601 video */
+    {64, 45},                   /* 1280x1024 on 16:9 display */
+    {5, 3},                     /* 1280x1024 on 4:3 display */
+    {4, 3}                      /*  800x600 on 16:9 display */
+  };
+  gint i;
+  gint index;
+  gdouble ratio;
+  gdouble delta;
+
+#define DELTA(idx) (ABS (ratio - ((gdouble) par[idx][0] / par[idx][1])))
+
+  /* first calculate the "real" ratio based on the X values;
+   * which is the "physical" w/h divided by the w/h in pixels of the display */
+  ratio = (gdouble) (xcontext->widthmm * xcontext->height)
+      / (xcontext->heightmm * xcontext->width);
+
+  /* DirectFB's X in 720x576 reports the physical dimensions wrong, so
+   * override here */
+  if (xcontext->width == 720 && xcontext->height == 576) {
+    ratio = 4.0 * 576 / (3.0 * 720);
+  }
+  GST_DEBUG ("calculated pixel aspect ratio: %f", ratio);
+
+  /* now find the one from par[][2] with the lowest delta to the real one */
+  delta = DELTA (0);
+  index = 0;
+
+  for (i = 1; i < sizeof (par) / (sizeof (gint) * 2); ++i) {
+    gdouble this_delta = DELTA (i);
+
+    if (this_delta < delta) {
+      index = i;
+      delta = this_delta;
+    }
+  }
+
+  GST_DEBUG ("Decided on index %d (%d/%d)", index,
+      par[index][0], par[index][1]);
+
+  g_free (xcontext->par);
+  xcontext->par = g_new0 (GValue, 1);
+  g_value_init (xcontext->par, GST_TYPE_FRACTION);
+  gst_value_set_fraction (xcontext->par, par[index][0], par[index][1]);
+  GST_DEBUG ("set xcontext PAR to %d/%d",
+      gst_value_get_fraction_numerator (xcontext->par),
+      gst_value_get_fraction_denominator (xcontext->par));
+}
+
+/* This function gets the X Display and global info about it. Everything is
+   stored in our object and will be cleaned when the object is disposed. Note
+   here that caps for supported format are generated without any window or
+   image creation */
+static GstXContext *
+gst_ximagesink_xcontext_get (GstXImageSink * ximagesink)
+{
+  GstXContext *xcontext = NULL;
+  XPixmapFormatValues *px_formats = NULL;
+  gint nb_formats = 0, i;
+  gint endianness;
+  GstVideoFormat vformat;
+
+  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+
+  xcontext = g_new0 (GstXContext, 1);
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  xcontext->disp = XOpenDisplay (ximagesink->display_name);
+
+  if (!xcontext->disp) {
+    g_mutex_unlock (ximagesink->x_lock);
+    g_free (xcontext);
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Could not initialise X output"), ("Could not open display"));
+    return NULL;
+  }
+
+  xcontext->screen = DefaultScreenOfDisplay (xcontext->disp);
+  xcontext->screen_num = DefaultScreen (xcontext->disp);
+  xcontext->visual = DefaultVisual (xcontext->disp, xcontext->screen_num);
+  xcontext->root = DefaultRootWindow (xcontext->disp);
+  xcontext->white = XWhitePixel (xcontext->disp, xcontext->screen_num);
+  xcontext->black = XBlackPixel (xcontext->disp, xcontext->screen_num);
+  xcontext->depth = DefaultDepthOfScreen (xcontext->screen);
+
+  xcontext->width = DisplayWidth (xcontext->disp, xcontext->screen_num);
+  xcontext->height = DisplayHeight (xcontext->disp, xcontext->screen_num);
+  xcontext->widthmm = DisplayWidthMM (xcontext->disp, xcontext->screen_num);
+  xcontext->heightmm = DisplayHeightMM (xcontext->disp, xcontext->screen_num);
+
+  GST_DEBUG_OBJECT (ximagesink, "X reports %dx%d pixels and %d mm x %d mm",
+      xcontext->width, xcontext->height, xcontext->widthmm, xcontext->heightmm);
+
+  gst_ximagesink_calculate_pixel_aspect_ratio (xcontext);
+
+  /* We get supported pixmap formats at supported depth */
+  px_formats = XListPixmapFormats (xcontext->disp, &nb_formats);
+
+  if (!px_formats) {
+    XCloseDisplay (xcontext->disp);
+    g_mutex_unlock (ximagesink->x_lock);
+    g_free (xcontext->par);
+    g_free (xcontext);
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, SETTINGS,
+        ("Could not get supported pixmap formats"), (NULL));
+    return NULL;
+  }
+
+  /* We get bpp value corresponding to our running depth */
+  for (i = 0; i < nb_formats; i++) {
+    if (px_formats[i].depth == xcontext->depth)
+      xcontext->bpp = px_formats[i].bits_per_pixel;
+  }
+
+  XFree (px_formats);
+
+  endianness = (ImageByteOrder (xcontext->disp) ==
+      LSBFirst) ? G_LITTLE_ENDIAN : G_BIG_ENDIAN;
+
+  /* Search for XShm extension support */
+#ifdef HAVE_XSHM
+  if (XShmQueryExtension (xcontext->disp) &&
+      gst_ximagesink_check_xshm_calls (ximagesink, xcontext)) {
+    xcontext->use_xshm = TRUE;
+    GST_DEBUG ("ximagesink is using XShm extension");
+  } else
+#endif /* HAVE_XSHM */
+  {
+    xcontext->use_xshm = FALSE;
+    GST_DEBUG ("ximagesink is not using XShm extension");
+  }
+
+  vformat = gst_video_format_from_masks (xcontext->depth, xcontext->bpp,
+      endianness, xcontext->visual->red_mask, xcontext->visual->green_mask,
+      xcontext->visual->blue_mask, 0);
+
+  if (vformat == GST_VIDEO_FORMAT_UNKNOWN)
+    goto unknown_format;
+
+  /* update object's par with calculated one if not set yet */
+  if (!ximagesink->par) {
+    ximagesink->par = g_new0 (GValue, 1);
+    gst_value_init_and_copy (ximagesink->par, xcontext->par);
+    GST_DEBUG_OBJECT (ximagesink, "set calculated PAR on object's PAR");
+  }
+  xcontext->caps = gst_caps_new_simple ("video/x-raw",
+      "format", G_TYPE_STRING, gst_video_format_to_string (vformat),
+      "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+      "height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+      "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+  if (ximagesink->par) {
+    int nom, den;
+
+    nom = gst_value_get_fraction_numerator (ximagesink->par);
+    den = gst_value_get_fraction_denominator (ximagesink->par);
+    gst_caps_set_simple (xcontext->caps, "pixel-aspect-ratio",
+        GST_TYPE_FRACTION, nom, den, NULL);
+  }
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  return xcontext;
+
+  /* ERRORS */
+unknown_format:
+  {
+    GST_ERROR_OBJECT (ximagesink, "unknown format");
+    return NULL;
+  }
+}
+
+/* This function cleans the X context. Closing the Display and unrefing the
+   caps for supported formats. */
+static void
+gst_ximagesink_xcontext_clear (GstXImageSink * ximagesink)
+{
+  GstXContext *xcontext;
+
+  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+
+  GST_OBJECT_LOCK (ximagesink);
+  if (ximagesink->xcontext == NULL) {
+    GST_OBJECT_UNLOCK (ximagesink);
+    return;
+  }
+
+  /* Take the xcontext reference and NULL it while we
+   * clean it up, so that any buffer-alloced buffers 
+   * arriving after this will be freed correctly */
+  xcontext = ximagesink->xcontext;
+  ximagesink->xcontext = NULL;
+
+  GST_OBJECT_UNLOCK (ximagesink);
+
+  gst_caps_unref (xcontext->caps);
+  g_free (xcontext->par);
+  g_free (ximagesink->par);
+  ximagesink->par = NULL;
+
+  if (xcontext->last_caps)
+    gst_caps_replace (&xcontext->last_caps, NULL);
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  XCloseDisplay (xcontext->disp);
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  g_free (xcontext);
+}
+
+/* Element stuff */
+
+static GstCaps *
+gst_ximagesink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+{
+  GstXImageSink *ximagesink;
+  GstCaps *caps;
+  int i;
+
+  ximagesink = GST_XIMAGESINK (bsink);
+
+  g_mutex_lock (ximagesink->x_lock);
+  if (ximagesink->xcontext) {
+    GstCaps *caps;
+
+    caps = gst_caps_ref (ximagesink->xcontext->caps);
+
+    if (filter) {
+      GstCaps *intersection;
+
+      intersection =
+          gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+      gst_caps_unref (caps);
+      caps = intersection;
+    }
+
+    if (ximagesink->xwindow && ximagesink->xwindow->width) {
+      GstStructure *s0, *s1;
+
+      caps = gst_caps_make_writable (caps);
+
+      /* There can only be a single structure because the xcontext
+       * caps only have a single structure */
+      s0 = gst_caps_get_structure (caps, 0);
+      s1 = gst_structure_copy (gst_caps_get_structure (caps, 0));
+
+      gst_structure_set (s0, "width", G_TYPE_INT, ximagesink->xwindow->width,
+          "height", G_TYPE_INT, ximagesink->xwindow->height, NULL);
+      gst_caps_append_structure (caps, s1);
+
+      /* This will not change the order but will remove the
+       * fixed width/height caps again if not possible
+       * upstream */
+      if (filter) {
+        GstCaps *intersection;
+
+        intersection =
+            gst_caps_intersect_full (caps, filter, GST_CAPS_INTERSECT_FIRST);
+        gst_caps_unref (caps);
+        caps = intersection;
+      }
+    }
+
+    g_mutex_unlock (ximagesink->x_lock);
+    return caps;
+  }
+  g_mutex_unlock (ximagesink->x_lock);
+
+  /* get a template copy and add the pixel aspect ratio */
+  caps = gst_pad_get_pad_template_caps (GST_BASE_SINK (ximagesink)->sinkpad);
+  if (ximagesink->par) {
+    caps = gst_caps_make_writable (caps);
+    for (i = 0; i < gst_caps_get_size (caps); ++i) {
+      GstStructure *structure = gst_caps_get_structure (caps, i);
+      int nom, den;
+
+      nom = gst_value_get_fraction_numerator (ximagesink->par);
+      den = gst_value_get_fraction_denominator (ximagesink->par);
+      gst_structure_set (structure, "pixel-aspect-ratio",
+          GST_TYPE_FRACTION, nom, den, NULL);
+    }
+  }
+
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = intersection;
+  }
+
+  return caps;
+}
+
+static gboolean
+gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstXImageSink *ximagesink;
+  GstStructure *structure;
+  GstVideoInfo info;
+  GstBufferPool *newpool, *oldpool;
+  const GValue *par;
+  gint size;
+
+  ximagesink = GST_XIMAGESINK (bsink);
+
+  if (!ximagesink->xcontext)
+    return FALSE;
+
+  GST_DEBUG_OBJECT (ximagesink,
+      "sinkconnect possible caps %" GST_PTR_FORMAT " with given caps %"
+      GST_PTR_FORMAT, ximagesink->xcontext->caps, caps);
+
+  /* We intersect those caps with our template to make sure they are correct */
+  if (!gst_caps_can_intersect (ximagesink->xcontext->caps, caps))
+    goto incompatible_caps;
+
+  if (!gst_video_info_from_caps (&info, caps))
+    goto invalid_format;
+
+  size = info.size;
+
+  structure = gst_caps_get_structure (caps, 0);
+  /* if the caps contain pixel-aspect-ratio, they have to match ours,
+   * otherwise linking should fail */
+  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
+  if (par) {
+    if (ximagesink->par) {
+      if (gst_value_compare (par, ximagesink->par) != GST_VALUE_EQUAL) {
+        goto wrong_aspect;
+      }
+    } else if (ximagesink->xcontext->par) {
+      if (gst_value_compare (par, ximagesink->xcontext->par) != GST_VALUE_EQUAL) {
+        goto wrong_aspect;
+      }
+    }
+  }
+
+  GST_VIDEO_SINK_WIDTH (ximagesink) = info.width;
+  GST_VIDEO_SINK_HEIGHT (ximagesink) = info.height;
+  ximagesink->fps_n = info.fps_n;
+  ximagesink->fps_d = info.fps_d;
+
+  /* Notify application to set xwindow id now */
+  g_mutex_lock (ximagesink->flow_lock);
+  if (!ximagesink->xwindow) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (ximagesink));
+  } else {
+    g_mutex_unlock (ximagesink->flow_lock);
+  }
+
+  /* Creating our window and our image */
+  if (GST_VIDEO_SINK_WIDTH (ximagesink) <= 0 ||
+      GST_VIDEO_SINK_HEIGHT (ximagesink) <= 0)
+    goto invalid_size;
+
+  g_mutex_lock (ximagesink->flow_lock);
+  if (!ximagesink->xwindow) {
+    ximagesink->xwindow = gst_ximagesink_xwindow_new (ximagesink,
+        GST_VIDEO_SINK_WIDTH (ximagesink), GST_VIDEO_SINK_HEIGHT (ximagesink));
+  }
+
+  ximagesink->info = info;
+
+  /* Remember to draw borders for next frame */
+  ximagesink->draw_border = TRUE;
+
+  /* create a new pool for the new configuration */
+  newpool = gst_ximage_buffer_pool_new (ximagesink);
+
+  structure = gst_buffer_pool_get_config (newpool);
+  gst_buffer_pool_config_set (structure, caps, size, 2, 0, 0, 15);
+  if (!gst_buffer_pool_set_config (newpool, structure))
+    goto config_failed;
+
+  oldpool = ximagesink->pool;
+  ximagesink->pool = newpool;
+
+  /* unref the old sink */
+  if (oldpool) {
+    /* we don't deactivate, some elements might still be using it, it will be
+     * deactivated when the last ref is gone */
+    gst_object_unref (oldpool);
+  }
+  g_mutex_unlock (ximagesink->flow_lock);
+
+  return TRUE;
+
+  /* ERRORS */
+incompatible_caps:
+  {
+    GST_ERROR_OBJECT (ximagesink, "caps incompatible");
+    return FALSE;
+  }
+invalid_format:
+  {
+    GST_ERROR_OBJECT (ximagesink, "caps invalid");
+    return FALSE;
+  }
+wrong_aspect:
+  {
+    GST_INFO_OBJECT (ximagesink, "pixel aspect ratio does not match");
+    return FALSE;
+  }
+invalid_size:
+  {
+    GST_ELEMENT_ERROR (ximagesink, CORE, NEGOTIATION, (NULL),
+        ("Invalid image size."));
+    return FALSE;
+  }
+config_failed:
+  {
+    GST_ERROR_OBJECT (ximagesink, "failed to set config.");
+    g_mutex_unlock (ximagesink->flow_lock);
+    return FALSE;
+  }
+}
+
+static GstStateChangeReturn
+gst_ximagesink_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstXImageSink *ximagesink;
+  GstXContext *xcontext = NULL;
+
+  ximagesink = GST_XIMAGESINK (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      /* Initializing the XContext */
+      if (ximagesink->xcontext == NULL) {
+        xcontext = gst_ximagesink_xcontext_get (ximagesink);
+        if (xcontext == NULL) {
+          ret = GST_STATE_CHANGE_FAILURE;
+          goto beach;
+        }
+        GST_OBJECT_LOCK (ximagesink);
+        if (xcontext)
+          ximagesink->xcontext = xcontext;
+        GST_OBJECT_UNLOCK (ximagesink);
+      }
+
+      /* call XSynchronize with the current value of synchronous */
+      GST_DEBUG_OBJECT (ximagesink, "XSynchronize called with %s",
+          ximagesink->synchronous ? "TRUE" : "FALSE");
+      g_mutex_lock (ximagesink->x_lock);
+      XSynchronize (ximagesink->xcontext->disp, ximagesink->synchronous);
+      g_mutex_unlock (ximagesink->x_lock);
+      gst_ximagesink_manage_event_thread (ximagesink);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      g_mutex_lock (ximagesink->flow_lock);
+      if (ximagesink->xwindow)
+        gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow);
+      g_mutex_unlock (ximagesink->flow_lock);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      ximagesink->fps_n = 0;
+      ximagesink->fps_d = 1;
+      GST_VIDEO_SINK_WIDTH (ximagesink) = 0;
+      GST_VIDEO_SINK_HEIGHT (ximagesink) = 0;
+      g_mutex_lock (ximagesink->flow_lock);
+      if (ximagesink->pool)
+        gst_buffer_pool_set_active (ximagesink->pool, FALSE);
+      g_mutex_unlock (ximagesink->flow_lock);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_ximagesink_reset (ximagesink);
+      break;
+    default:
+      break;
+  }
+
+beach:
+  return ret;
+}
+
+static void
+gst_ximagesink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end)
+{
+  GstXImageSink *ximagesink;
+
+  ximagesink = GST_XIMAGESINK (bsink);
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    *start = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_BUFFER_DURATION_IS_VALID (buf)) {
+      *end = *start + GST_BUFFER_DURATION (buf);
+    } else {
+      if (ximagesink->fps_n > 0) {
+        *end = *start +
+            gst_util_uint64_scale_int (GST_SECOND, ximagesink->fps_d,
+            ximagesink->fps_n);
+      }
+    }
+  }
+}
+
+static GstFlowReturn
+gst_ximagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+{
+  GstFlowReturn res;
+  GstXImageSink *ximagesink;
+  GstMetaXImage *meta;
+  GstBuffer *to_put = NULL;
+
+  ximagesink = GST_XIMAGESINK (vsink);
+
+  meta = gst_buffer_get_meta_ximage (buf);
+
+  if (meta && meta->sink == ximagesink) {
+    /* If this buffer has been allocated using our buffer management we simply
+       put the ximage which is in the PRIVATE pointer */
+    GST_LOG_OBJECT (ximagesink, "buffer from our pool, writing directly");
+    to_put = buf;
+    res = GST_FLOW_OK;
+  } else {
+    GstVideoFrame src, dest;
+
+    /* Else we have to copy the data into our private image, */
+    /* if we have one... */
+    GST_LOG_OBJECT (ximagesink, "buffer not from our pool, copying");
+
+    /* we should have a pool, configured in setcaps */
+    if (ximagesink->pool == NULL)
+      goto no_pool;
+
+    if (!gst_buffer_pool_set_active (ximagesink->pool, TRUE))
+      goto activate_failed;
+
+    /* take a buffer form our pool */
+    res = gst_buffer_pool_acquire_buffer (ximagesink->pool, &to_put, NULL);
+    if (res != GST_FLOW_OK)
+      goto no_buffer;
+
+    if (gst_buffer_get_size (to_put) < gst_buffer_get_size (buf))
+      goto wrong_size;
+
+    GST_CAT_LOG_OBJECT (GST_CAT_PERFORMANCE, ximagesink,
+        "slow copy into bufferpool buffer %p", to_put);
+
+    if (!gst_video_frame_map (&src, &ximagesink->info, buf, GST_MAP_READ))
+      goto invalid_buffer;
+
+    if (!gst_video_frame_map (&dest, &ximagesink->info, to_put, GST_MAP_WRITE)) {
+      gst_video_frame_unmap (&src);
+      goto invalid_buffer;
+    }
+
+    gst_video_frame_copy (&dest, &src);
+
+    gst_video_frame_unmap (&dest);
+    gst_video_frame_unmap (&src);
+  }
+
+  if (!gst_ximagesink_ximage_put (ximagesink, to_put))
+    goto no_window;
+
+done:
+  if (to_put != buf)
+    gst_buffer_unref (to_put);
+
+  return res;
+
+  /* ERRORS */
+no_pool:
+  {
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Internal error: can't allocate images"),
+        ("We don't have a bufferpool negotiated"));
+    return GST_FLOW_ERROR;
+  }
+no_buffer:
+  {
+    /* No image available. That's very bad ! */
+    GST_WARNING_OBJECT (ximagesink, "could not create image");
+    return res;
+  }
+wrong_size:
+  {
+    GST_ELEMENT_ERROR (ximagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer"),
+        ("XServer allocated buffer size did not match input buffer %"
+            G_GSIZE_FORMAT " - %" G_GSIZE_FORMAT, gst_buffer_get_size (to_put),
+            gst_buffer_get_size (buf)));
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+invalid_buffer:
+  {
+    /* No Window available to put our image into */
+    GST_WARNING_OBJECT (ximagesink, "could map image");
+    res = GST_FLOW_OK;
+    goto done;
+  }
+no_window:
+  {
+    /* No Window available to put our image into */
+    GST_WARNING_OBJECT (ximagesink, "could not output image - no window");
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+activate_failed:
+  {
+    GST_ERROR_OBJECT (ximagesink, "failed to activate bufferpool.");
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static gboolean
+gst_ximagesink_event (GstBaseSink * sink, GstEvent * event)
+{
+  GstXImageSink *ximagesink = GST_XIMAGESINK (sink);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_TAG:{
+      GstTagList *l;
+      gchar *title = NULL;
+
+      gst_event_parse_tag (event, &l);
+      gst_tag_list_get_string (l, GST_TAG_TITLE, &title);
+
+      if (title) {
+        GST_DEBUG_OBJECT (ximagesink, "got tags, title='%s'", title);
+        gst_ximagesink_xwindow_set_title (ximagesink, ximagesink->xwindow,
+            title);
+
+        g_free (title);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  if (GST_BASE_SINK_CLASS (parent_class)->event)
+    return GST_BASE_SINK_CLASS (parent_class)->event (sink, event);
+  else
+    return TRUE;
+}
+
+static gboolean
+gst_ximagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+{
+  GstXImageSink *ximagesink = GST_XIMAGESINK (bsink);
+  GstBufferPool *pool;
+  GstStructure *config;
+  GstCaps *caps;
+  guint size;
+  gboolean need_pool;
+
+  gst_query_parse_allocation (query, &caps, &need_pool);
+
+  if (caps == NULL)
+    goto no_caps;
+
+  g_mutex_lock (ximagesink->flow_lock);
+  if ((pool = ximagesink->pool))
+    gst_object_ref (pool);
+  g_mutex_unlock (ximagesink->flow_lock);
+
+  if (pool != NULL) {
+    const GstCaps *pcaps;
+
+    /* we had a pool, check caps */
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL);
+
+    GST_DEBUG_OBJECT (ximagesink,
+        "we had a pool with caps %" GST_PTR_FORMAT, pcaps);
+    if (!gst_caps_is_equal (caps, pcaps)) {
+      /* different caps, we can't use this pool */
+      GST_DEBUG_OBJECT (ximagesink, "pool has different caps");
+      gst_object_unref (pool);
+      pool = NULL;
+    }
+  }
+  if (pool == NULL && need_pool) {
+    GstVideoInfo info;
+
+    GST_DEBUG_OBJECT (ximagesink, "create new pool");
+    pool = gst_ximage_buffer_pool_new (ximagesink);
+
+    if (!gst_video_info_from_caps (&info, caps))
+      goto invalid_caps;
+
+    /* the normal size of a frame */
+    size = info.size;
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 0);
+    if (!gst_buffer_pool_set_config (pool, config))
+      goto config_failed;
+  }
+  /* we need at least 2 buffer because we hold on to the last one */
+  gst_query_set_allocation_params (query, size, 2, 0, 0, 0, pool);
+
+  /* we also support various metadata */
+  gst_query_add_allocation_meta (query, GST_META_API_VIDEO);
+  gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP);
+
+  gst_object_unref (pool);
+
+  return TRUE;
+
+  /* ERRORS */
+no_caps:
+  {
+    GST_DEBUG_OBJECT (bsink, "no caps specified");
+    return FALSE;
+  }
+invalid_caps:
+  {
+    GST_DEBUG_OBJECT (bsink, "invalid caps specified");
+    return FALSE;
+  }
+config_failed:
+  {
+    GST_DEBUG_OBJECT (bsink, "failed setting config");
+    return FALSE;
+  }
+}
+
+/* Interfaces stuff */
+static void
+gst_ximagesink_navigation_send_event (GstNavigation * navigation,
+    GstStructure * structure)
+{
+  GstXImageSink *ximagesink = GST_XIMAGESINK (navigation);
+  GstEvent *event;
+  gint x_offset, y_offset;
+  gdouble x, y;
+  GstPad *pad = NULL;
+
+  event = gst_event_new_navigation (structure);
+
+  /* We are not converting the pointer coordinates as there's no hardware
+     scaling done here. The only possible scaling is done by videoscale and
+     videoscale will have to catch those events and tranform the coordinates
+     to match the applied scaling. So here we just add the offset if the image
+     is centered in the window.  */
+
+  /* We take the flow_lock while we look at the window */
+  g_mutex_lock (ximagesink->flow_lock);
+
+  if (!ximagesink->xwindow) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    return;
+  }
+
+  x_offset = ximagesink->xwindow->width - GST_VIDEO_SINK_WIDTH (ximagesink);
+  y_offset = ximagesink->xwindow->height - GST_VIDEO_SINK_HEIGHT (ximagesink);
+
+  g_mutex_unlock (ximagesink->flow_lock);
+
+  if (x_offset > 0 && gst_structure_get_double (structure, "pointer_x", &x)) {
+    x -= x_offset / 2;
+    gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, x, NULL);
+  }
+  if (y_offset > 0 && gst_structure_get_double (structure, "pointer_y", &y)) {
+    y -= y_offset / 2;
+    gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL);
+  }
+
+  pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (ximagesink));
+
+  if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) {
+    gst_pad_send_event (pad, event);
+
+    gst_object_unref (pad);
+  }
+}
+
+static void
+gst_ximagesink_navigation_init (GstNavigationInterface * iface)
+{
+  iface->send_event = gst_ximagesink_navigation_send_event;
+}
+
+static void
+gst_ximagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
+{
+  XID xwindow_id = id;
+  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+  GstXWindow *xwindow = NULL;
+  XWindowAttributes attr;
+
+  /* We acquire the stream lock while setting this window in the element.
+     We are basically cleaning tons of stuff replacing the old window, putting
+     images while we do that would surely crash */
+  g_mutex_lock (ximagesink->flow_lock);
+
+  /* If we already use that window return */
+  if (ximagesink->xwindow && (xwindow_id == ximagesink->xwindow->win)) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    return;
+  }
+
+  /* If the element has not initialized the X11 context try to do so */
+  if (!ximagesink->xcontext &&
+      !(ximagesink->xcontext = gst_ximagesink_xcontext_get (ximagesink))) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    /* we have thrown a GST_ELEMENT_ERROR now */
+    return;
+  }
+
+  /* If a window is there already we destroy it */
+  if (ximagesink->xwindow) {
+    gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+    ximagesink->xwindow = NULL;
+  }
+
+  /* If the xid is 0 we go back to an internal window */
+  if (xwindow_id == 0) {
+    /* If no width/height caps nego did not happen window will be created
+       during caps nego then */
+    if (GST_VIDEO_SINK_WIDTH (ximagesink) && GST_VIDEO_SINK_HEIGHT (ximagesink)) {
+      xwindow = gst_ximagesink_xwindow_new (ximagesink,
+          GST_VIDEO_SINK_WIDTH (ximagesink),
+          GST_VIDEO_SINK_HEIGHT (ximagesink));
+    }
+  } else {
+    xwindow = g_new0 (GstXWindow, 1);
+
+    xwindow->win = xwindow_id;
+
+    /* We get window geometry, set the event we want to receive,
+       and create a GC */
+    g_mutex_lock (ximagesink->x_lock);
+    XGetWindowAttributes (ximagesink->xcontext->disp, xwindow->win, &attr);
+    xwindow->width = attr.width;
+    xwindow->height = attr.height;
+    xwindow->internal = FALSE;
+    if (ximagesink->handle_events) {
+      XSelectInput (ximagesink->xcontext->disp, xwindow->win, ExposureMask |
+          StructureNotifyMask | PointerMotionMask | KeyPressMask |
+          KeyReleaseMask);
+    }
+
+    xwindow->gc = XCreateGC (ximagesink->xcontext->disp, xwindow->win, 0, NULL);
+    g_mutex_unlock (ximagesink->x_lock);
+  }
+
+  if (xwindow)
+    ximagesink->xwindow = xwindow;
+
+  g_mutex_unlock (ximagesink->flow_lock);
+}
+
+static void
+gst_ximagesink_expose (GstVideoOverlay * overlay)
+{
+  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+
+  gst_ximagesink_xwindow_update_geometry (ximagesink);
+  gst_ximagesink_ximage_put (ximagesink, NULL);
+}
+
+static void
+gst_ximagesink_set_event_handling (GstVideoOverlay * overlay,
+    gboolean handle_events)
+{
+  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+
+  ximagesink->handle_events = handle_events;
+
+  g_mutex_lock (ximagesink->flow_lock);
+
+  if (G_UNLIKELY (!ximagesink->xwindow)) {
+    g_mutex_unlock (ximagesink->flow_lock);
+    return;
+  }
+
+  g_mutex_lock (ximagesink->x_lock);
+
+  if (handle_events) {
+    if (ximagesink->xwindow->internal) {
+      XSelectInput (ximagesink->xcontext->disp, ximagesink->xwindow->win,
+          ExposureMask | StructureNotifyMask | PointerMotionMask |
+          KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
+    } else {
+      XSelectInput (ximagesink->xcontext->disp, ximagesink->xwindow->win,
+          ExposureMask | StructureNotifyMask | PointerMotionMask |
+          KeyPressMask | KeyReleaseMask);
+    }
+  } else {
+    XSelectInput (ximagesink->xcontext->disp, ximagesink->xwindow->win, 0);
+  }
+
+  g_mutex_unlock (ximagesink->x_lock);
+
+  g_mutex_unlock (ximagesink->flow_lock);
+}
+
+static void
+gst_ximagesink_video_overlay_init (GstVideoOverlayIface * iface)
+{
+  iface->set_window_handle = gst_ximagesink_set_window_handle;
+  iface->expose = gst_ximagesink_expose;
+  iface->handle_events = gst_ximagesink_set_event_handling;
+}
+
+/* =========================================== */
+/*                                             */
+/*              Init & Class init              */
+/*                                             */
+/* =========================================== */
+
+static void
+gst_ximagesink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstXImageSink *ximagesink;
+
+  g_return_if_fail (GST_IS_XIMAGESINK (object));
+
+  ximagesink = GST_XIMAGESINK (object);
+
+  switch (prop_id) {
+    case PROP_DISPLAY:
+      ximagesink->display_name = g_strdup (g_value_get_string (value));
+      break;
+    case PROP_SYNCHRONOUS:
+      ximagesink->synchronous = g_value_get_boolean (value);
+      if (ximagesink->xcontext) {
+        GST_DEBUG_OBJECT (ximagesink, "XSynchronize called with %s",
+            ximagesink->synchronous ? "TRUE" : "FALSE");
+        g_mutex_lock (ximagesink->x_lock);
+        XSynchronize (ximagesink->xcontext->disp, ximagesink->synchronous);
+        g_mutex_unlock (ximagesink->x_lock);
+      }
+      break;
+    case PROP_FORCE_ASPECT_RATIO:
+      ximagesink->keep_aspect = g_value_get_boolean (value);
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+    {
+      GValue *tmp;
+
+      tmp = g_new0 (GValue, 1);
+      g_value_init (tmp, GST_TYPE_FRACTION);
+
+      if (!g_value_transform (value, tmp)) {
+        GST_WARNING_OBJECT (ximagesink,
+            "Could not transform string to aspect ratio");
+        g_free (tmp);
+      } else {
+        GST_DEBUG_OBJECT (ximagesink, "set PAR to %d/%d",
+            gst_value_get_fraction_numerator (tmp),
+            gst_value_get_fraction_denominator (tmp));
+        g_free (ximagesink->par);
+        ximagesink->par = tmp;
+      }
+    }
+      break;
+    case PROP_HANDLE_EVENTS:
+      gst_ximagesink_set_event_handling (GST_VIDEO_OVERLAY (ximagesink),
+          g_value_get_boolean (value));
+      gst_ximagesink_manage_event_thread (ximagesink);
+      break;
+    case PROP_HANDLE_EXPOSE:
+      ximagesink->handle_expose = g_value_get_boolean (value);
+      gst_ximagesink_manage_event_thread (ximagesink);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_ximagesink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstXImageSink *ximagesink;
+
+  g_return_if_fail (GST_IS_XIMAGESINK (object));
+
+  ximagesink = GST_XIMAGESINK (object);
+
+  switch (prop_id) {
+    case PROP_DISPLAY:
+      g_value_set_string (value, ximagesink->display_name);
+      break;
+    case PROP_SYNCHRONOUS:
+      g_value_set_boolean (value, ximagesink->synchronous);
+      break;
+    case PROP_FORCE_ASPECT_RATIO:
+      g_value_set_boolean (value, ximagesink->keep_aspect);
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+      if (ximagesink->par)
+        g_value_transform (ximagesink->par, value);
+      break;
+    case PROP_HANDLE_EVENTS:
+      g_value_set_boolean (value, ximagesink->handle_events);
+      break;
+    case PROP_HANDLE_EXPOSE:
+      g_value_set_boolean (value, ximagesink->handle_expose);
+      break;
+    case PROP_WINDOW_WIDTH:
+      if (ximagesink->xwindow)
+        g_value_set_uint64 (value, ximagesink->xwindow->width);
+      else
+        g_value_set_uint64 (value, 0);
+      break;
+    case PROP_WINDOW_HEIGHT:
+      if (ximagesink->xwindow)
+        g_value_set_uint64 (value, ximagesink->xwindow->height);
+      else
+        g_value_set_uint64 (value, 0);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_ximagesink_reset (GstXImageSink * ximagesink)
+{
+  GThread *thread;
+
+  GST_OBJECT_LOCK (ximagesink);
+  ximagesink->running = FALSE;
+  /* grab thread and mark it as NULL */
+  thread = ximagesink->event_thread;
+  ximagesink->event_thread = NULL;
+  GST_OBJECT_UNLOCK (ximagesink);
+
+  /* Wait for our event thread to finish before we clean up our stuff. */
+  if (thread)
+    g_thread_join (thread);
+
+  if (ximagesink->cur_image) {
+    gst_buffer_unref (ximagesink->cur_image);
+    ximagesink->cur_image = NULL;
+  }
+
+  g_mutex_lock (ximagesink->flow_lock);
+
+  if (ximagesink->pool) {
+    gst_object_unref (ximagesink->pool);
+    ximagesink->pool = NULL;
+  }
+
+  if (ximagesink->xwindow) {
+    gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow);
+    gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+    ximagesink->xwindow = NULL;
+  }
+  g_mutex_unlock (ximagesink->flow_lock);
+
+  gst_ximagesink_xcontext_clear (ximagesink);
+}
+
+static void
+gst_ximagesink_finalize (GObject * object)
+{
+  GstXImageSink *ximagesink;
+
+  ximagesink = GST_XIMAGESINK (object);
+
+  gst_ximagesink_reset (ximagesink);
+
+  if (ximagesink->display_name) {
+    g_free (ximagesink->display_name);
+    ximagesink->display_name = NULL;
+  }
+  if (ximagesink->par) {
+    g_free (ximagesink->par);
+    ximagesink->par = NULL;
+  }
+  if (ximagesink->x_lock) {
+    g_mutex_free (ximagesink->x_lock);
+    ximagesink->x_lock = NULL;
+  }
+  if (ximagesink->flow_lock) {
+    g_mutex_free (ximagesink->flow_lock);
+    ximagesink->flow_lock = NULL;
+  }
+
+  g_free (ximagesink->media_title);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_ximagesink_init (GstXImageSink * ximagesink)
+{
+  ximagesink->display_name = NULL;
+  ximagesink->xcontext = NULL;
+  ximagesink->xwindow = NULL;
+  ximagesink->cur_image = NULL;
+
+  ximagesink->event_thread = NULL;
+  ximagesink->running = FALSE;
+
+  ximagesink->fps_n = 0;
+  ximagesink->fps_d = 1;
+
+  ximagesink->x_lock = g_mutex_new ();
+  ximagesink->flow_lock = g_mutex_new ();
+
+  ximagesink->par = NULL;
+
+  ximagesink->pool = NULL;
+
+  ximagesink->synchronous = FALSE;
+  ximagesink->keep_aspect = FALSE;
+  ximagesink->handle_events = TRUE;
+  ximagesink->handle_expose = TRUE;
+}
+
+static void
+gst_ximagesink_class_init (GstXImageSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+  GstVideoSinkClass *videosink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+  videosink_class = (GstVideoSinkClass *) klass;
+
+  gobject_class->finalize = gst_ximagesink_finalize;
+  gobject_class->set_property = gst_ximagesink_set_property;
+  gobject_class->get_property = gst_ximagesink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_DISPLAY,
+      g_param_spec_string ("display", "Display", "X Display name",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SYNCHRONOUS,
+      g_param_spec_boolean ("synchronous", "Synchronous", "When enabled, runs "
+          "the X display in synchronous mode. (used only for debugging)", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
+      g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio",
+          "When enabled, reverse caps negotiation (scaling) will respect "
+          "original aspect ratio", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
+      g_param_spec_string ("pixel-aspect-ratio", "Pixel Aspect Ratio",
+          "The pixel aspect ratio of the device", "1/1",
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HANDLE_EVENTS,
+      g_param_spec_boolean ("handle-events", "Handle XEvents",
+          "When enabled, XEvents will be selected and handled", TRUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HANDLE_EXPOSE,
+      g_param_spec_boolean ("handle-expose", "Handle expose",
+          "When enabled, "
+          "the current frame will always be drawn in response to X Expose "
+          "events", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXImageSink:window-width
+   *
+   * Actual width of the video window.
+   *
+   * Since: 0.10.32
+   */
+  g_object_class_install_property (gobject_class, PROP_WINDOW_WIDTH,
+      g_param_spec_uint64 ("window-width", "window-width",
+          "Width of the window", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXImageSink:window-height
+   *
+   * Actual height of the video window.
+   *
+   * Since: 0.10.32
+   */
+  g_object_class_install_property (gobject_class, PROP_WINDOW_HEIGHT,
+      g_param_spec_uint64 ("window-height", "window-height",
+          "Height of the window", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Video sink", "Sink/Video",
+      "A standard X based videosink", "Julien Moutte <julien@moutte.net>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_ximagesink_sink_template_factory));
+
+  gstelement_class->change_state = gst_ximagesink_change_state;
+
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_getcaps);
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_setcaps);
+  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_ximagesink_get_times);
+  gstbasesink_class->propose_allocation =
+      GST_DEBUG_FUNCPTR (gst_ximagesink_propose_allocation);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_ximagesink_event);
+
+  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_ximagesink_show_frame);
+}
diff --git a/sys/ximage/ximagesink.h b/sys/ximage/ximagesink.h
new file mode 100644
index 0000000..0cdd896
--- /dev/null
+++ b/sys/ximage/ximagesink.h
@@ -0,0 +1,210 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_XIMAGESINK_H__
+#define __GST_XIMAGESINK_H__
+
+#include <gst/video/gstvideosink.h>
+
+#ifdef HAVE_XSHM
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif /* HAVE_XSHM */
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef HAVE_XSHM
+#include <X11/extensions/XShm.h>
+#endif /* HAVE_XSHM */
+
+#include <string.h>
+#include <math.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_XIMAGESINK \
+  (gst_ximagesink_get_type())
+#define GST_XIMAGESINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XIMAGESINK, GstXImageSink))
+#define GST_XIMAGESINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XIMAGESINK, GstXImageSinkClass))
+#define GST_IS_XIMAGESINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XIMAGESINK))
+#define GST_IS_XIMAGESINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XIMAGESINK))
+
+typedef struct _GstXContext GstXContext;
+typedef struct _GstXWindow GstXWindow;
+
+typedef struct _GstXImageSink GstXImageSink;
+typedef struct _GstXImageSinkClass GstXImageSinkClass;
+
+#include "ximagepool.h"
+
+/*
+ * GstXContext:
+ * @disp: the X11 Display of this context
+ * @screen: the default Screen of Display @disp
+ * @screen_num: the Screen number of @screen
+ * @visual: the default Visual of Screen @screen
+ * @root: the root Window of Display @disp
+ * @white: the value of a white pixel on Screen @screen
+ * @black: the value of a black pixel on Screen @screen
+ * @depth: the color depth of Display @disp
+ * @bpp: the number of bits per pixel on Display @disp
+ * @endianness: the endianness of image bytes on Display @disp
+ * @width: the width in pixels of Display @disp
+ * @height: the height in pixels of Display @disp
+ * @widthmm: the width in millimeters of Display @disp
+ * @heightmm: the height in millimeters of Display @disp
+ * @par: the pixel aspect ratio calculated from @width, @widthmm and @height, 
+ * @heightmm ratio
+ * @use_xshm: used to known wether of not XShm extension is usable or not even
+ * if the Extension is present
+ * @caps: the #GstCaps that Display @disp can accept
+ *
+ * Structure used to store various informations collected/calculated for a
+ * Display.
+ */
+struct _GstXContext
+{
+  Display *disp;
+
+  Screen *screen;
+  gint screen_num;
+
+  Visual *visual;
+
+  Window root;
+
+  gulong white, black;
+
+  gint depth;
+  gint bpp;
+
+  gint width, height;
+  gint widthmm, heightmm;
+  GValue *par;                  /* calculated pixel aspect ratio */
+
+  gboolean use_xshm;
+
+  GstCaps *caps;
+  GstCaps *last_caps;
+};
+
+/*
+ * GstXWindow:
+ * @win: the Window ID of this X11 window
+ * @width: the width in pixels of Window @win
+ * @height: the height in pixels of Window @win
+ * @internal: used to remember if Window @win was created internally or passed
+ * through the #GstXOverlay interface
+ * @gc: the Graphical Context of Window @win
+ *
+ * Structure used to store informations about a Window.
+ */
+struct _GstXWindow
+{
+  Window win;
+  gint width, height;
+  gboolean internal;
+  GC gc;
+};
+
+/**
+ * GstXImageSink:
+ * @display_name: the name of the Display we want to render to
+ * @xcontext: our instance's #GstXContext
+ * @xwindow: the #GstXWindow we are rendering to
+ * @ximage: internal #GstXImage used to store incoming buffers and render when
+ * not using the buffer_alloc optimization mechanism
+ * @cur_image: a reference to the last #GstXImage that was put to @xwindow. It
+ * is used when Expose events are received to redraw the latest video frame
+ * @event_thread: a thread listening for events on @xwindow and handling them
+ * @running: used to inform @event_thread if it should run/shutdown
+ * @fps_n: the framerate fraction numerator
+ * @fps_d: the framerate fraction denominator
+ * @x_lock: used to protect X calls as we are not using the XLib in threaded
+ * mode
+ * @flow_lock: used to protect data flow routines from external calls such as
+ * events from @event_thread or methods from the #GstXOverlay interface
+ * @par: used to override calculated pixel aspect ratio from @xcontext
+ * @pool_lock: used to protect the buffer pool
+ * @buffer_pool: a list of #GstXImageBuffer that could be reused at next buffer
+ * allocation call
+ * @synchronous: used to store if XSynchronous should be used or not (for 
+ * debugging purpose only)
+ * @keep_aspect: used to remember if reverse negotiation scaling should respect
+ * aspect ratio
+ * @handle_events: used to know if we should handle select XEvents or not
+ *
+ * The #GstXImageSink data structure.
+ */
+struct _GstXImageSink
+{
+  /* Our element stuff */
+  GstVideoSink videosink;
+
+  char *display_name;
+
+  GstXContext *xcontext;
+  GstXWindow *xwindow;
+  GstBuffer *cur_image;
+
+  GThread *event_thread;
+  gboolean running;
+
+  GstVideoInfo info;
+
+  /* Framerate numerator and denominator */
+  gint fps_n;
+  gint fps_d;
+
+  GMutex *x_lock;
+  GMutex *flow_lock;
+
+  /* object-set pixel aspect ratio */
+  GValue *par;
+
+  /* the buffer pool */
+  GstBufferPool *pool;
+
+  gboolean synchronous;
+  gboolean keep_aspect;
+  gboolean handle_events;
+  gboolean handle_expose;
+  gboolean draw_border;
+
+  /* stream metadata */
+  gchar *media_title;
+};
+
+struct _GstXImageSinkClass
+{
+  GstVideoSinkClass parent_class;
+};
+
+GType gst_ximagesink_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_XIMAGESINK_H__ */
diff --git a/sys/xvimage/Makefile.am b/sys/xvimage/Makefile.am
new file mode 100644
index 0000000..9669e72
--- /dev/null
+++ b/sys/xvimage/Makefile.am
@@ -0,0 +1,15 @@
+plugin_LTLIBRARIES = libgstxvimagesink.la
+
+libgstxvimagesink_la_SOURCES =  xvimagesink.c xvimage.c xvimagepool.c 
+libgstxvimagesink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+libgstxvimagesink_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(X_LIBS) $(XVIDEO_LIBS) $(XSHM_LIBS) $(LIBM)
+libgstxvimagesink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstxvimagesink_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la
+libgstxvimagesink_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = xvimagesink.h xvimagepool.h
diff --git a/sys/xvimage/Makefile.in b/sys/xvimage/Makefile.in
new file mode 100644
index 0000000..c31cbd0
--- /dev/null
+++ b/sys/xvimage/Makefile.in
@@ -0,0 +1,780 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = sys/xvimage
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libgstxvimagesink_la_OBJECTS = libgstxvimagesink_la-xvimagesink.lo \
+	libgstxvimagesink_la-xvimage.lo \
+	libgstxvimagesink_la-xvimagepool.lo
+libgstxvimagesink_la_OBJECTS = $(am_libgstxvimagesink_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libgstxvimagesink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) \
+	$(libgstxvimagesink_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgstxvimagesink_la_SOURCES)
+DIST_SOURCES = $(libgstxvimagesink_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstxvimagesink.la
+libgstxvimagesink_la_SOURCES = xvimagesink.c xvimage.c xvimagepool.c 
+libgstxvimagesink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+libgstxvimagesink_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS) \
+	$(X_LIBS) $(XVIDEO_LIBS) $(XSHM_LIBS) $(LIBM)
+
+libgstxvimagesink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstxvimagesink_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la
+libgstxvimagesink_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = xvimagesink.h xvimagepool.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/xvimage/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu sys/xvimage/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+	}
+
+uninstall-pluginLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+	done
+
+clean-pluginLTLIBRARIES:
+	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgstxvimagesink.la: $(libgstxvimagesink_la_OBJECTS) $(libgstxvimagesink_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libgstxvimagesink_la_LINK) -rpath $(plugindir) $(libgstxvimagesink_la_OBJECTS) $(libgstxvimagesink_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstxvimagesink_la-xvimage.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstxvimagesink_la-xvimagepool.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstxvimagesink_la-xvimagesink.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+libgstxvimagesink_la-xvimagesink.lo: xvimagesink.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -MT libgstxvimagesink_la-xvimagesink.lo -MD -MP -MF $(DEPDIR)/libgstxvimagesink_la-xvimagesink.Tpo -c -o libgstxvimagesink_la-xvimagesink.lo `test -f 'xvimagesink.c' || echo '$(srcdir)/'`xvimagesink.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstxvimagesink_la-xvimagesink.Tpo $(DEPDIR)/libgstxvimagesink_la-xvimagesink.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xvimagesink.c' object='libgstxvimagesink_la-xvimagesink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -c -o libgstxvimagesink_la-xvimagesink.lo `test -f 'xvimagesink.c' || echo '$(srcdir)/'`xvimagesink.c
+
+libgstxvimagesink_la-xvimage.lo: xvimage.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -MT libgstxvimagesink_la-xvimage.lo -MD -MP -MF $(DEPDIR)/libgstxvimagesink_la-xvimage.Tpo -c -o libgstxvimagesink_la-xvimage.lo `test -f 'xvimage.c' || echo '$(srcdir)/'`xvimage.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstxvimagesink_la-xvimage.Tpo $(DEPDIR)/libgstxvimagesink_la-xvimage.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xvimage.c' object='libgstxvimagesink_la-xvimage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -c -o libgstxvimagesink_la-xvimage.lo `test -f 'xvimage.c' || echo '$(srcdir)/'`xvimage.c
+
+libgstxvimagesink_la-xvimagepool.lo: xvimagepool.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -MT libgstxvimagesink_la-xvimagepool.lo -MD -MP -MF $(DEPDIR)/libgstxvimagesink_la-xvimagepool.Tpo -c -o libgstxvimagesink_la-xvimagepool.lo `test -f 'xvimagepool.c' || echo '$(srcdir)/'`xvimagepool.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstxvimagesink_la-xvimagepool.Tpo $(DEPDIR)/libgstxvimagesink_la-xvimagepool.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xvimagepool.c' object='libgstxvimagesink_la-xvimagepool.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstxvimagesink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstxvimagesink_la_CFLAGS) $(CFLAGS) -c -o libgstxvimagesink_la-xvimagepool.lo `test -f 'xvimagepool.c' || echo '$(srcdir)/'`xvimagepool.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(plugindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pluginLTLIBRARIES \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sys/xvimage/xvimage.c b/sys/xvimage/xvimage.c
new file mode 100644
index 0000000..5e2d619
--- /dev/null
+++ b/sys/xvimage/xvimage.c
@@ -0,0 +1,51 @@
+/* GStreamer
+ * Copyright (C) <2003> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xvimagesink.h"
+
+GST_DEBUG_CATEGORY (gst_debug_xvimagepool);
+GST_DEBUG_CATEGORY (gst_debug_xvimagesink);
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  if (!gst_element_register (plugin, "xvimagesink",
+          GST_RANK_PRIMARY, GST_TYPE_XVIMAGESINK))
+    return FALSE;
+
+  GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagesink, "xvimagesink", 0,
+      "xvimagesink element");
+  GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagepool, "xvimagepool", 0,
+      "xvimagepool object");
+
+  GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
+
+  return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "xvimagesink",
+    "XFree86 video output plugin using Xv extension",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/xvimage/xvimagepool.c b/sys/xvimage/xvimagepool.c
new file mode 100644
index 0000000..855d877
--- /dev/null
+++ b/sys/xvimage/xvimagepool.c
@@ -0,0 +1,733 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* Object header */
+#include "xvimagesink.h"
+
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+#include <gst/video/gstmetavideo.h>
+#include <gst/video/gstvideopool.h>
+
+
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagepool);
+#define GST_CAT_DEFAULT gst_debug_xvimagepool
+
+
+struct _GstXvImageBufferPoolPrivate
+{
+  GstCaps *caps;
+  gint im_format;
+  GstVideoInfo info;
+  GstVideoAlignment align;
+  guint padded_width;
+  guint padded_height;
+  gboolean add_metavideo;
+  gboolean need_alignment;
+};
+
+static void gst_meta_xvimage_free (GstMetaXvImage * meta, GstBuffer * buffer);
+
+/* xvimage metadata */
+const GstMetaInfo *
+gst_meta_xvimage_get_info (void)
+{
+  static const GstMetaInfo *meta_xvimage_info = NULL;
+
+  if (meta_xvimage_info == NULL) {
+    meta_xvimage_info = gst_meta_register ("GstMetaXvImage", "GstMetaXvImage",
+        sizeof (GstMetaXvImage),
+        (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) gst_meta_xvimage_free,
+        (GstMetaCopyFunction) NULL, (GstMetaTransformFunction) NULL);
+  }
+  return meta_xvimage_info;
+}
+
+/* X11 stuff */
+static gboolean error_caught = FALSE;
+
+static int
+gst_xvimagesink_handle_xerror (Display * display, XErrorEvent * xevent)
+{
+  char error_msg[1024];
+
+  XGetErrorText (display, xevent->error_code, error_msg, 1024);
+  GST_DEBUG ("xvimagesink triggered an XError. error: %s", error_msg);
+  error_caught = TRUE;
+  return 0;
+}
+
+static GstMetaXvImage *
+gst_buffer_add_meta_xvimage (GstBuffer * buffer, GstXvImageBufferPool * xvpool)
+{
+  GstXvImageSink *xvimagesink;
+  int (*handler) (Display *, XErrorEvent *);
+  gboolean success = FALSE;
+  GstXContext *xcontext;
+  GstMetaXvImage *meta;
+  gint width, height, im_format;
+  GstXvImageBufferPoolPrivate *priv;
+
+  priv = xvpool->priv;
+  xvimagesink = xvpool->sink;
+  xcontext = xvimagesink->xcontext;
+
+  width = priv->padded_width;
+  height = priv->padded_height;
+  im_format = priv->im_format;
+
+  meta =
+      (GstMetaXvImage *) gst_buffer_add_meta (buffer, GST_META_INFO_XVIMAGE,
+      NULL);
+#ifdef HAVE_XSHM
+  meta->SHMInfo.shmaddr = ((void *) -1);
+  meta->SHMInfo.shmid = -1;
+#endif
+  meta->x = priv->align.padding_left;
+  meta->y = priv->align.padding_top;
+  meta->width = priv->info.width;
+  meta->height = priv->info.height;
+  meta->sink = gst_object_ref (xvimagesink);
+  meta->im_format = im_format;
+
+  GST_DEBUG_OBJECT (xvimagesink, "creating image %p (%dx%d)", buffer,
+      width, height);
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  /* Setting an error handler to catch failure */
+  error_caught = FALSE;
+  handler = XSetErrorHandler (gst_xvimagesink_handle_xerror);
+
+#ifdef HAVE_XSHM
+  if (xcontext->use_xshm) {
+    int expected_size;
+
+    meta->xvimage = XvShmCreateImage (xcontext->disp,
+        xcontext->xv_port_id, im_format, NULL, width, height, &meta->SHMInfo);
+    if (!meta->xvimage || error_caught) {
+      g_mutex_unlock (xvimagesink->x_lock);
+
+      /* Reset error flag */
+      error_caught = FALSE;
+
+      /* Push a warning */
+      GST_ELEMENT_WARNING (xvimagesink, RESOURCE, WRITE,
+          ("Failed to create output image buffer of %dx%d pixels",
+              width, height),
+          ("could not XShmCreateImage a %dx%d image", width, height));
+
+      /* Retry without XShm */
+      xvimagesink->xcontext->use_xshm = FALSE;
+
+      /* Hold X mutex again to try without XShm */
+      g_mutex_lock (xvimagesink->x_lock);
+      goto no_xshm;
+    }
+
+    /* we have to use the returned data_size for our shm size */
+    meta->size = meta->xvimage->data_size;
+    GST_LOG_OBJECT (xvimagesink, "XShm image size is %" G_GSIZE_FORMAT,
+        meta->size);
+
+    /* calculate the expected size.  This is only for sanity checking the
+     * number we get from X. */
+    switch (im_format) {
+      case GST_MAKE_FOURCC ('I', '4', '2', '0'):
+      case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
+      {
+        gint pitches[3];
+        gint offsets[3];
+        guint plane;
+
+        offsets[0] = 0;
+        pitches[0] = GST_ROUND_UP_4 (width);
+        offsets[1] = offsets[0] + pitches[0] * GST_ROUND_UP_2 (height);
+        pitches[1] = GST_ROUND_UP_8 (width) / 2;
+        offsets[2] = offsets[1] + pitches[1] * GST_ROUND_UP_2 (height) / 2;
+        pitches[2] = GST_ROUND_UP_8 (pitches[0]) / 2;
+
+        expected_size = offsets[2] + pitches[2] * GST_ROUND_UP_2 (height) / 2;
+
+        for (plane = 0; plane < meta->xvimage->num_planes; plane++) {
+          GST_DEBUG_OBJECT (xvimagesink,
+              "Plane %u has a expected pitch of %d bytes, " "offset of %d",
+              plane, pitches[plane], offsets[plane]);
+        }
+        break;
+      }
+      case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
+      case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
+        expected_size = height * GST_ROUND_UP_4 (width * 2);
+        break;
+      default:
+        expected_size = 0;
+        break;
+    }
+    if (expected_size != 0 && meta->size != expected_size) {
+      GST_WARNING_OBJECT (xvimagesink,
+          "unexpected XShm image size (got %" G_GSIZE_FORMAT ", expected %d)",
+          meta->size, expected_size);
+    }
+
+    /* Be verbose about our XvImage stride */
+    {
+      guint plane;
+
+      for (plane = 0; plane < meta->xvimage->num_planes; plane++) {
+        GST_DEBUG_OBJECT (xvimagesink, "Plane %u has a pitch of %d bytes, "
+            "offset of %d", plane, meta->xvimage->pitches[plane],
+            meta->xvimage->offsets[plane]);
+      }
+    }
+
+    /* get shared memory */
+    meta->SHMInfo.shmid = shmget (IPC_PRIVATE, meta->size, IPC_CREAT | 0777);
+    if (meta->SHMInfo.shmid == -1)
+      goto shmget_failed;
+
+    /* attach */
+    meta->SHMInfo.shmaddr = shmat (meta->SHMInfo.shmid, NULL, 0);
+    if (meta->SHMInfo.shmaddr == ((void *) -1))
+      goto shmat_failed;
+
+    /* now we can set up the image data */
+    meta->xvimage->data = meta->SHMInfo.shmaddr;
+    meta->SHMInfo.readOnly = FALSE;
+
+    if (XShmAttach (xcontext->disp, &meta->SHMInfo) == 0)
+      goto xattach_failed;
+
+    XSync (xcontext->disp, FALSE);
+
+    /* Delete the shared memory segment as soon as we everyone is attached.
+     * This way, it will be deleted as soon as we detach later, and not
+     * leaked if we crash. */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+
+    GST_DEBUG_OBJECT (xvimagesink, "XServer ShmAttached to 0x%x, id 0x%lx",
+        meta->SHMInfo.shmid, meta->SHMInfo.shmseg);
+  } else
+  no_xshm:
+#endif /* HAVE_XSHM */
+  {
+    meta->xvimage = XvCreateImage (xcontext->disp,
+        xcontext->xv_port_id, im_format, NULL, width, height);
+    if (!meta->xvimage || error_caught)
+      goto create_failed;
+
+    /* we have to use the returned data_size for our image size */
+    meta->size = meta->xvimage->data_size;
+    meta->xvimage->data = g_malloc (meta->size);
+
+    XSync (xcontext->disp, FALSE);
+  }
+
+  /* Reset error handler */
+  error_caught = FALSE;
+  XSetErrorHandler (handler);
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, meta->xvimage->data,
+          NULL, meta->size, 0, meta->size));
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  success = TRUE;
+
+beach:
+  if (!success)
+    meta = NULL;
+
+  return meta;
+
+  /* ERRORS */
+create_failed:
+  {
+    g_mutex_unlock (xvimagesink->x_lock);
+    /* Reset error handler */
+    error_caught = FALSE;
+    XSetErrorHandler (handler);
+    /* Push an error */
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height),
+        ("could not XvShmCreateImage a %dx%d image", width, height));
+    goto beach;
+  }
+shmget_failed:
+  {
+    g_mutex_unlock (xvimagesink->x_lock);
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height),
+        ("could not get shared memory of %" G_GSIZE_FORMAT " bytes",
+            meta->size));
+    goto beach;
+  }
+shmat_failed:
+  {
+    g_mutex_unlock (xvimagesink->x_lock);
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height), ("Failed to shmat: %s", g_strerror (errno)));
+    /* Clean up the shared memory segment */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+xattach_failed:
+  {
+    /* Clean up the shared memory segment */
+    shmctl (meta->SHMInfo.shmid, IPC_RMID, NULL);
+    g_mutex_unlock (xvimagesink->x_lock);
+
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            width, height), ("Failed to XShmAttach"));
+    goto beach;
+  }
+}
+
+static void
+gst_meta_xvimage_free (GstMetaXvImage * meta, GstBuffer * buffer)
+{
+  GstXvImageSink *xvimagesink;
+
+  xvimagesink = meta->sink;
+
+  GST_DEBUG_OBJECT (xvimagesink, "free meta on buffer %p", buffer);
+
+  /* Hold the object lock to ensure the XContext doesn't disappear */
+  GST_OBJECT_LOCK (xvimagesink);
+  /* We might have some buffers destroyed after changing state to NULL */
+  if (xvimagesink->xcontext == NULL) {
+    GST_DEBUG_OBJECT (xvimagesink, "Destroying XvImage after Xcontext");
+#ifdef HAVE_XSHM
+    /* Need to free the shared memory segment even if the x context
+     * was already cleaned up */
+    if (meta->SHMInfo.shmaddr != ((void *) -1)) {
+      shmdt (meta->SHMInfo.shmaddr);
+    }
+#endif
+    goto beach;
+  }
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+#ifdef HAVE_XSHM
+  if (xvimagesink->xcontext->use_xshm) {
+    if (meta->SHMInfo.shmaddr != ((void *) -1)) {
+      GST_DEBUG_OBJECT (xvimagesink, "XServer ShmDetaching from 0x%x id 0x%lx",
+          meta->SHMInfo.shmid, meta->SHMInfo.shmseg);
+      XShmDetach (xvimagesink->xcontext->disp, &meta->SHMInfo);
+      XSync (xvimagesink->xcontext->disp, FALSE);
+      shmdt (meta->SHMInfo.shmaddr);
+      meta->SHMInfo.shmaddr = (void *) -1;
+    }
+    if (meta->xvimage)
+      XFree (meta->xvimage);
+  } else
+#endif /* HAVE_XSHM */
+  {
+    if (meta->xvimage) {
+      g_free (meta->xvimage->data);
+      XFree (meta->xvimage);
+    }
+  }
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+beach:
+  GST_OBJECT_UNLOCK (xvimagesink);
+
+  gst_object_unref (meta->sink);
+}
+
+#ifdef HAVE_XSHM
+/* This function checks that it is actually really possible to create an image
+   using XShm */
+gboolean
+gst_xvimagesink_check_xshm_calls (GstXvImageSink * xvimagesink,
+    GstXContext * xcontext)
+{
+  XvImage *xvimage;
+  XShmSegmentInfo SHMInfo;
+  size_t size;
+  int (*handler) (Display *, XErrorEvent *);
+  gboolean result = FALSE;
+  gboolean did_attach = FALSE;
+
+  g_return_val_if_fail (xcontext != NULL, FALSE);
+
+  /* Sync to ensure any older errors are already processed */
+  XSync (xcontext->disp, FALSE);
+
+  /* Set defaults so we don't free these later unnecessarily */
+  SHMInfo.shmaddr = ((void *) -1);
+  SHMInfo.shmid = -1;
+
+  /* Setting an error handler to catch failure */
+  error_caught = FALSE;
+  handler = XSetErrorHandler (gst_xvimagesink_handle_xerror);
+
+  /* Trying to create a 1x1 picture */
+  GST_DEBUG ("XvShmCreateImage of 1x1");
+  xvimage = XvShmCreateImage (xcontext->disp, xcontext->xv_port_id,
+      xcontext->im_format, NULL, 1, 1, &SHMInfo);
+
+  /* Might cause an error, sync to ensure it is noticed */
+  XSync (xcontext->disp, FALSE);
+  if (!xvimage || error_caught) {
+    GST_WARNING ("could not XvShmCreateImage a 1x1 image");
+    goto beach;
+  }
+  size = xvimage->data_size;
+
+  SHMInfo.shmid = shmget (IPC_PRIVATE, size, IPC_CREAT | 0777);
+  if (SHMInfo.shmid == -1) {
+    GST_WARNING ("could not get shared memory of %" G_GSIZE_FORMAT " bytes",
+        size);
+    goto beach;
+  }
+
+  SHMInfo.shmaddr = shmat (SHMInfo.shmid, NULL, 0);
+  if (SHMInfo.shmaddr == ((void *) -1)) {
+    GST_WARNING ("Failed to shmat: %s", g_strerror (errno));
+    /* Clean up the shared memory segment */
+    shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+
+  xvimage->data = SHMInfo.shmaddr;
+  SHMInfo.readOnly = FALSE;
+
+  if (XShmAttach (xcontext->disp, &SHMInfo) == 0) {
+    GST_WARNING ("Failed to XShmAttach");
+    /* Clean up the shared memory segment */
+    shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+    goto beach;
+  }
+
+  /* Sync to ensure we see any errors we caused */
+  XSync (xcontext->disp, FALSE);
+
+  /* Delete the shared memory segment as soon as everyone is attached.
+   * This way, it will be deleted as soon as we detach later, and not
+   * leaked if we crash. */
+  shmctl (SHMInfo.shmid, IPC_RMID, NULL);
+
+  if (!error_caught) {
+    GST_DEBUG ("XServer ShmAttached to 0x%x, id 0x%lx", SHMInfo.shmid,
+        SHMInfo.shmseg);
+
+    did_attach = TRUE;
+    /* store whether we succeeded in result */
+    result = TRUE;
+  } else {
+    GST_WARNING ("MIT-SHM extension check failed at XShmAttach. "
+        "Not using shared memory.");
+  }
+
+beach:
+  /* Sync to ensure we swallow any errors we caused and reset error_caught */
+  XSync (xcontext->disp, FALSE);
+
+  error_caught = FALSE;
+  XSetErrorHandler (handler);
+
+  if (did_attach) {
+    GST_DEBUG ("XServer ShmDetaching from 0x%x id 0x%lx",
+        SHMInfo.shmid, SHMInfo.shmseg);
+    XShmDetach (xcontext->disp, &SHMInfo);
+    XSync (xcontext->disp, FALSE);
+  }
+  if (SHMInfo.shmaddr != ((void *) -1))
+    shmdt (SHMInfo.shmaddr);
+  if (xvimage)
+    XFree (xvimage);
+  return result;
+}
+#endif /* HAVE_XSHM */
+
+/* bufferpool */
+static void gst_xvimage_buffer_pool_finalize (GObject * object);
+
+#define GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE(obj)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XVIMAGE_BUFFER_POOL, GstXvImageBufferPoolPrivate))
+
+#define gst_xvimage_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE (GstXvImageBufferPool, gst_xvimage_buffer_pool,
+    GST_TYPE_BUFFER_POOL);
+
+static const gchar **
+xvimage_buffer_pool_get_options (GstBufferPool * pool)
+{
+  static const gchar *options[] = { GST_BUFFER_POOL_OPTION_META_VIDEO,
+    GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, NULL
+  };
+
+  return options;
+}
+
+static gboolean
+xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+{
+  GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
+  GstXvImageBufferPoolPrivate *priv = xvpool->priv;
+  GstVideoInfo info;
+  const GstCaps *caps;
+
+  if (!gst_buffer_pool_config_get (config, &caps, NULL, NULL, NULL, NULL, NULL))
+    goto wrong_config;
+
+  if (caps == NULL)
+    goto no_caps;
+
+  /* now parse the caps from the config */
+  if (!gst_video_info_from_caps (&info, caps))
+    goto wrong_caps;
+
+  GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
+      caps);
+
+  priv->im_format = gst_xvimagesink_get_format_from_info (xvpool->sink, &info);
+  if (priv->im_format == -1)
+    goto unknown_format;
+
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+  priv->caps = gst_caps_copy (caps);
+  priv->info = info;
+
+  /* enable metadata based on config of the pool */
+  priv->add_metavideo =
+      gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_META_VIDEO);
+
+  /* parse extra alignment info */
+  priv->need_alignment = gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+
+  if (priv->need_alignment) {
+    gst_buffer_pool_config_get_video_alignment (config, &priv->align);
+
+    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
+        priv->align.padding_left, priv->align.padding_left,
+        priv->align.padding_bottom);
+
+    /* we need the video metadata too now */
+    priv->add_metavideo = TRUE;
+  }
+
+  /* add the padding */
+  priv->padded_width =
+      GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
+      priv->align.padding_right;
+  priv->padded_height =
+      GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
+      priv->align.padding_bottom;
+
+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+
+  /* ERRORS */
+wrong_config:
+  {
+    GST_WARNING_OBJECT (pool, "invalid config");
+    return FALSE;
+  }
+no_caps:
+  {
+    GST_WARNING_OBJECT (pool, "no caps in config");
+    return FALSE;
+  }
+wrong_caps:
+  {
+    GST_WARNING_OBJECT (pool,
+        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+unknown_format:
+  {
+    GST_WARNING_OBJECT (xvpool->sink, "failed to get format from caps %"
+        GST_PTR_FORMAT, caps);
+    GST_ELEMENT_ERROR (xvpool->sink, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            priv->info.width, priv->info.height), ("Invalid input caps"));
+    return FALSE;;
+  }
+}
+
+/* This function handles GstXImageBuffer creation depending on XShm availability */
+static GstFlowReturn
+xvimage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+    GstBufferPoolParams * params)
+{
+  GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
+  GstXvImageBufferPoolPrivate *priv = xvpool->priv;
+  GstVideoInfo *info;
+  GstBuffer *xvimage;
+  GstMetaXvImage *meta;
+
+  info = &priv->info;
+
+  xvimage = gst_buffer_new ();
+  meta = gst_buffer_add_meta_xvimage (xvimage, xvpool);
+  if (meta == NULL) {
+    gst_buffer_unref (xvimage);
+    goto no_buffer;
+  }
+
+  if (priv->add_metavideo) {
+    GstMetaVideo *meta;
+    const GstVideoFormatInfo *vinfo = info->finfo;
+    gint i;
+
+    GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
+    /* these are just the defaults for now */
+    meta = gst_buffer_add_meta_video (xvimage, 0, GST_VIDEO_INFO_FORMAT (info),
+        priv->padded_width, priv->padded_height);
+
+    if (priv->need_alignment) {
+      meta->width = GST_VIDEO_INFO_WIDTH (&priv->info);
+      meta->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
+
+      /* FIXME, not quite correct, NV12 would apply the vedge twice on the second
+       * plane */
+      for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (info); i++) {
+        gint vedge, hedge, plane;
+
+        hedge =
+            GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (vinfo, i,
+            priv->align.padding_left);
+        vedge =
+            GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo, i,
+            priv->align.padding_top);
+        plane = GST_VIDEO_FORMAT_INFO_PLANE (vinfo, i);
+
+        GST_LOG_OBJECT (pool, "comp %d, plane %d: hedge %d, vedge %d", i,
+            plane, hedge, vedge);
+
+        meta->offset[plane] += (vedge * meta->stride[plane]) + hedge;
+      }
+    }
+  }
+
+  *buffer = xvimage;
+
+  return GST_FLOW_OK;
+
+  /* ERROR */
+no_buffer:
+  {
+    GST_WARNING_OBJECT (pool, "can't create image");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+xvimage_buffer_pool_free (GstBufferPool * pool, GstBuffer * buffer)
+{
+  gst_buffer_unref (buffer);
+}
+
+GstBufferPool *
+gst_xvimage_buffer_pool_new (GstXvImageSink * xvimagesink)
+{
+  GstXvImageBufferPool *pool;
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+
+  pool = g_object_new (GST_TYPE_XVIMAGE_BUFFER_POOL, NULL);
+  pool->sink = gst_object_ref (xvimagesink);
+
+  GST_LOG_OBJECT (pool, "new XvImage buffer pool %p", pool);
+
+  return GST_BUFFER_POOL_CAST (pool);
+}
+
+static void
+gst_xvimage_buffer_pool_class_init (GstXvImageBufferPoolClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
+
+  g_type_class_add_private (klass, sizeof (GstXvImageBufferPoolPrivate));
+
+  gobject_class->finalize = gst_xvimage_buffer_pool_finalize;
+
+  gstbufferpool_class->get_options = xvimage_buffer_pool_get_options;
+  gstbufferpool_class->set_config = xvimage_buffer_pool_set_config;
+  gstbufferpool_class->alloc_buffer = xvimage_buffer_pool_alloc;
+  gstbufferpool_class->free_buffer = xvimage_buffer_pool_free;
+}
+
+static void
+gst_xvimage_buffer_pool_init (GstXvImageBufferPool * pool)
+{
+  pool->priv = GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE (pool);
+}
+
+static void
+gst_xvimage_buffer_pool_finalize (GObject * object)
+{
+  GstXvImageBufferPool *pool = GST_XVIMAGE_BUFFER_POOL_CAST (object);
+  GstXvImageBufferPoolPrivate *priv = pool->priv;
+
+  GST_LOG_OBJECT (pool, "finalize XvImage buffer pool %p", pool);
+
+  if (priv->caps)
+    gst_caps_unref (priv->caps);
+  gst_object_unref (pool->sink);
+
+  G_OBJECT_CLASS (gst_xvimage_buffer_pool_parent_class)->finalize (object);
+}
+
+/* This function tries to get a format matching with a given caps in the
+   supported list of formats we generated in gst_xvimagesink_get_xv_support */
+gint
+gst_xvimagesink_get_format_from_info (GstXvImageSink * xvimagesink,
+    GstVideoInfo * info)
+{
+  GList *list = NULL;
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), 0);
+
+  list = xvimagesink->xcontext->formats_list;
+
+  while (list) {
+    GstXvImageFormat *format = list->data;
+
+    if (format && format->vformat == GST_VIDEO_INFO_FORMAT (info))
+      return format->format;
+
+    list = g_list_next (list);
+  }
+
+  return -1;
+}
diff --git a/sys/xvimage/xvimagepool.h b/sys/xvimage/xvimagepool.h
new file mode 100644
index 0000000..7136498
--- /dev/null
+++ b/sys/xvimage/xvimagepool.h
@@ -0,0 +1,117 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_XVIMAGEPOOL_H__
+#define __GST_XVIMAGEPOOL_H__
+
+#ifdef HAVE_XSHM
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif /* HAVE_XSHM */
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef HAVE_XSHM
+#include <X11/extensions/XShm.h>
+#endif /* HAVE_XSHM */
+
+#include <string.h>
+#include <math.h>
+
+
+G_BEGIN_DECLS
+
+typedef struct _GstMetaXvImage GstMetaXvImage;
+
+typedef struct _GstXvImageBufferPool GstXvImageBufferPool;
+typedef struct _GstXvImageBufferPoolClass GstXvImageBufferPoolClass;
+typedef struct _GstXvImageBufferPoolPrivate GstXvImageBufferPoolPrivate;
+
+#include "xvimagesink.h"
+
+const GstMetaInfo * gst_meta_xvimage_get_info (void);
+#define GST_META_INFO_XVIMAGE  (gst_meta_xvimage_get_info())
+
+#define gst_buffer_get_meta_xvimage(b) ((GstMetaXvImage*)gst_buffer_get_meta((b),GST_META_INFO_XVIMAGE))
+
+/**
+ * GstMetaXvImage:
+ * @sink: a reference to the our #GstXvImageSink
+ * @xvimage: the XvImage of this buffer
+ * @width: the width in pixels of XvImage @xvimage
+ * @height: the height in pixels of XvImage @xvimage
+ * @im_format: the format of XvImage @xvimage
+ * @size: the size in bytes of XvImage @xvimage
+ *
+ * Subclass of #GstMeta containing additional information about an XvImage.
+ */
+struct _GstMetaXvImage
+{
+  GstMeta meta;
+
+  /* Reference to the xvimagesink we belong to */
+  GstXvImageSink *sink;
+
+  XvImage *xvimage;
+
+#ifdef HAVE_XSHM
+  XShmSegmentInfo SHMInfo;
+#endif                          /* HAVE_XSHM */
+
+  gint x, y;
+  gint width, height;
+  gint im_format;
+  size_t size;
+};
+
+/* buffer pool functions */
+#define GST_TYPE_XVIMAGE_BUFFER_POOL      (gst_xvimage_buffer_pool_get_type())
+#define GST_IS_XVIMAGE_BUFFER_POOL(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_XVIMAGE_BUFFER_POOL))
+#define GST_XVIMAGE_BUFFER_POOL(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_XVIMAGE_BUFFER_POOL, GstXvImageBufferPool))
+#define GST_XVIMAGE_BUFFER_POOL_CAST(obj) ((GstXvImageBufferPool*)(obj))
+
+struct _GstXvImageBufferPool
+{
+  GstBufferPool bufferpool;
+
+  GstXvImageSink *sink;
+
+  GstXvImageBufferPoolPrivate *priv;
+};
+
+struct _GstXvImageBufferPoolClass
+{
+  GstBufferPoolClass parent_class;
+};
+
+GType gst_xvimage_buffer_pool_get_type (void);
+
+GstBufferPool *gst_xvimage_buffer_pool_new (GstXvImageSink * xvimagesink);
+
+gboolean gst_xvimagesink_check_xshm_calls (GstXvImageSink * xvimagesink,
+      GstXContext * xcontext);
+
+gint gst_xvimagesink_get_format_from_info (GstXvImageSink * xvimagesink,
+    GstVideoInfo * info);
+
+G_END_DECLS
+
+#endif /*__GST_XVIMAGEPOOL_H__*/
diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
new file mode 100644
index 0000000..a4a5bc5
--- /dev/null
+++ b/sys/xvimage/xvimagesink.c
@@ -0,0 +1,2955 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *               <2009>,<2010> Stefan Kost <stefan.kost@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-xvimagesink
+ *
+ * XvImageSink renders video frames to a drawable (XWindow) on a local display
+ * using the XVideo extension. Rendering to a remote display is theorically
+ * possible but i doubt that the XVideo extension is actually available when
+ * connecting to a remote display. This element can receive a Window ID from the
+ * application through the XOverlay interface and will then render video frames
+ * in this drawable. If no Window ID was provided by the application, the
+ * element will create its own internal window and render into it.
+ *
+ * <refsect2>
+ * <title>Scaling</title>
+ * <para>
+ * The XVideo extension, when it's available, handles hardware accelerated
+ * scaling of video frames. This means that the element will just accept
+ * incoming video frames no matter their geometry and will then put them to the
+ * drawable scaling them on the fly. Using the #GstXvImageSink:force-aspect-ratio
+ * property it is possible to enforce scaling with a constant aspect ratio,
+ * which means drawing black borders around the video frame.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Events</title>
+ * <para>
+ * XvImageSink creates a thread to handle events coming from the drawable. There
+ * are several kind of events that can be grouped in 2 big categories: input
+ * events and window state related events. Input events will be translated to
+ * navigation events and pushed upstream for other elements to react on them.
+ * This includes events such as pointer moves, key press/release, clicks etc...
+ * Other events are used to handle the drawable appearance even when the data
+ * is not flowing (GST_STATE_PAUSED). That means that even when the element is
+ * paused, it will receive expose events from the drawable and draw the latest
+ * frame with correct borders/aspect-ratio.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Pixel aspect ratio</title>
+ * <para>
+ * When changing state to GST_STATE_READY, XvImageSink will open a connection to
+ * the display specified in the #GstXvImageSink:display property or the
+ * default display if nothing specified. Once this connection is open it will
+ * inspect the display configuration including the physical display geometry and
+ * then calculate the pixel aspect ratio. When receiving video frames with a
+ * different pixel aspect ratio, XvImageSink will use hardware scaling to
+ * display the video frames correctly on display's pixel aspect ratio.
+ * Sometimes the calculated pixel aspect ratio can be wrong, it is
+ * then possible to enforce a specific pixel aspect ratio using the
+ * #GstXvImageSink:pixel-aspect-ratio property.
+ * </para>
+ * </refsect2>
+ * <refsect2>
+ * <title>Examples</title>
+ * |[
+ * gst-launch -v videotestsrc ! xvimagesink
+ * ]| A pipeline to test hardware scaling.
+ * When the test video signal appears you can resize the window and see that
+ * video frames are scaled through hardware (no extra CPU cost).
+ * |[
+ * gst-launch -v videotestsrc ! xvimagesink force-aspect-ratio=true
+ * ]| Same pipeline with #GstXvImageSink:force-aspect-ratio property set to true
+ * You can observe the borders drawn around the scaled image respecting aspect
+ * ratio.
+ * |[
+ * gst-launch -v videotestsrc ! navigationtest ! xvimagesink
+ * ]| A pipeline to test navigation events.
+ * While moving the mouse pointer over the test signal you will see a black box
+ * following the mouse pointer. If you press the mouse button somewhere on the
+ * video and release it somewhere else a green box will appear where you pressed
+ * the button and a red one where you released it. (The navigationtest element
+ * is part of gst-plugins-good.) You can observe here that even if the images
+ * are scaled through hardware the pointer coordinates are converted back to the
+ * original video frame geometry so that the box can be drawn to the correct
+ * position. This also handles borders correctly, limiting coordinates to the
+ * image area
+ * |[
+ * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! xvimagesink
+ * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by
+ * videotestsrc, in most cases the pixel aspect ratio of the display will be
+ * 1/1. This means that XvImageSink will have to do the scaling to convert
+ * incoming frames to a size that will match the display pixel aspect ratio
+ * (from 320x240 to 320x180 in this case). Note that you might have to escape
+ * some characters for your shell like '\(fraction\)'.
+ * |[
+ * gst-launch -v videotestsrc ! xvimagesink hue=100 saturation=-100 brightness=100
+ * ]| Demonstrates how to use the colorbalance interface.
+ * </refsect2>
+ */
+
+/* for developers: there are two useful tools : xvinfo and xvattr */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* Our interfaces */
+#include <gst/interfaces/navigation.h>
+#include <gst/interfaces/videooverlay.h>
+#include <gst/interfaces/colorbalance.h>
+#include <gst/interfaces/propertyprobe.h>
+/* Helper functions */
+#include <gst/video/gstmetavideo.h>
+
+/* Object header */
+#include "xvimagesink.h"
+
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagesink);
+GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
+#define GST_CAT_DEFAULT gst_debug_xvimagesink
+
+typedef struct
+{
+  unsigned long flags;
+  unsigned long functions;
+  unsigned long decorations;
+  long input_mode;
+  unsigned long status;
+}
+MotifWmHints, MwmHints;
+
+#define MWM_HINTS_DECORATIONS   (1L << 1)
+
+static void gst_xvimagesink_reset (GstXvImageSink * xvimagesink);
+static void gst_xvimagesink_xwindow_update_geometry (GstXvImageSink *
+    xvimagesink);
+static void gst_xvimagesink_expose (GstVideoOverlay * overlay);
+
+/* Default template - initiated with class struct to allow gst-register to work
+   without X running */
+static GstStaticPadTemplate gst_xvimagesink_sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "framerate = (fraction) [ 0, MAX ], "
+        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]")
+    );
+
+enum
+{
+  PROP_0,
+  PROP_CONTRAST,
+  PROP_BRIGHTNESS,
+  PROP_HUE,
+  PROP_SATURATION,
+  PROP_DISPLAY,
+  PROP_SYNCHRONOUS,
+  PROP_PIXEL_ASPECT_RATIO,
+  PROP_FORCE_ASPECT_RATIO,
+  PROP_HANDLE_EVENTS,
+  PROP_DEVICE,
+  PROP_DEVICE_NAME,
+  PROP_HANDLE_EXPOSE,
+  PROP_DOUBLE_BUFFER,
+  PROP_AUTOPAINT_COLORKEY,
+  PROP_COLORKEY,
+  PROP_DRAW_BORDERS,
+  PROP_WINDOW_WIDTH,
+  PROP_WINDOW_HEIGHT
+};
+
+/* ============================================================= */
+/*                                                               */
+/*                       Public Methods                          */
+/*                                                               */
+/* ============================================================= */
+
+/* =========================================== */
+/*                                             */
+/*          Object typing & Creation           */
+/*                                             */
+/* =========================================== */
+static void gst_xvimagesink_navigation_init (GstNavigationInterface * iface);
+static void gst_xvimagesink_video_overlay_init (GstVideoOverlayIface * iface);
+static void gst_xvimagesink_colorbalance_init (GstColorBalanceClass * iface);
+static void
+gst_xvimagesink_property_probe_interface_init (GstPropertyProbeInterface *
+    iface);
+#define gst_xvimagesink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstXvImageSink, gst_xvimagesink, GST_TYPE_VIDEO_SINK,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
+        gst_xvimagesink_navigation_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
+        gst_xvimagesink_video_overlay_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
+        gst_xvimagesink_colorbalance_init);
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PROPERTY_PROBE,
+        gst_xvimagesink_property_probe_interface_init));
+
+
+/* ============================================================= */
+/*                                                               */
+/*                       Private Methods                         */
+/*                                                               */
+/* ============================================================= */
+
+
+/* We are called with the x_lock taken */
+static void
+gst_xvimagesink_xwindow_draw_borders (GstXvImageSink * xvimagesink,
+    GstXWindow * xwindow, GstVideoRectangle rect)
+{
+  gint t1, t2;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (xwindow != NULL);
+
+  XSetForeground (xvimagesink->xcontext->disp, xwindow->gc,
+      xvimagesink->xcontext->black);
+
+  /* Left border */
+  if (rect.x > xvimagesink->render_rect.x) {
+    XFillRectangle (xvimagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        xvimagesink->render_rect.x, xvimagesink->render_rect.y,
+        rect.x - xvimagesink->render_rect.x, xvimagesink->render_rect.h);
+  }
+
+  /* Right border */
+  t1 = rect.x + rect.w;
+  t2 = xvimagesink->render_rect.x + xvimagesink->render_rect.w;
+  if (t1 < t2) {
+    XFillRectangle (xvimagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        t1, xvimagesink->render_rect.y, t2 - t1, xvimagesink->render_rect.h);
+  }
+
+  /* Top border */
+  if (rect.y > xvimagesink->render_rect.y) {
+    XFillRectangle (xvimagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        xvimagesink->render_rect.x, xvimagesink->render_rect.y,
+        xvimagesink->render_rect.w, rect.y - xvimagesink->render_rect.y);
+  }
+
+  /* Bottom border */
+  t1 = rect.y + rect.h;
+  t2 = xvimagesink->render_rect.y + xvimagesink->render_rect.h;
+  if (t1 < t2) {
+    XFillRectangle (xvimagesink->xcontext->disp, xwindow->win, xwindow->gc,
+        xvimagesink->render_rect.x, t1, xvimagesink->render_rect.w, t2 - t1);
+  }
+}
+
+/* This function puts a GstXvImage on a GstXvImageSink's window. Returns FALSE
+ * if no window was available  */
+static gboolean
+gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, GstBuffer * xvimage)
+{
+  GstMetaXvImage *meta;
+  GstMetaVideoCrop *crop;
+  GstVideoRectangle result;
+  gboolean draw_border = FALSE;
+  GstVideoRectangle src, dst;
+
+  /* We take the flow_lock. If expose is in there we don't want to run
+     concurrently from the data flow thread */
+  g_mutex_lock (xvimagesink->flow_lock);
+
+  if (G_UNLIKELY (xvimagesink->xwindow == NULL)) {
+    g_mutex_unlock (xvimagesink->flow_lock);
+    return FALSE;
+  }
+
+  /* Draw borders when displaying the first frame. After this
+     draw borders only on expose event or after a size change. */
+  if (!xvimagesink->cur_image || xvimagesink->redraw_border) {
+    draw_border = TRUE;
+  }
+
+  /* Store a reference to the last image we put, lose the previous one */
+  if (xvimage && xvimagesink->cur_image != xvimage) {
+    if (xvimagesink->cur_image) {
+      GST_LOG_OBJECT (xvimagesink, "unreffing %p", xvimagesink->cur_image);
+      gst_buffer_unref (xvimagesink->cur_image);
+    }
+    GST_LOG_OBJECT (xvimagesink, "reffing %p as our current image", xvimage);
+    xvimagesink->cur_image = gst_buffer_ref (xvimage);
+  }
+
+  /* Expose sends a NULL image, we take the latest frame */
+  if (!xvimage) {
+    if (xvimagesink->cur_image) {
+      draw_border = TRUE;
+      xvimage = xvimagesink->cur_image;
+    } else {
+      g_mutex_unlock (xvimagesink->flow_lock);
+      return TRUE;
+    }
+  }
+
+  meta = gst_buffer_get_meta_xvimage (xvimage);
+
+  crop = gst_buffer_get_meta_video_crop (xvimage);
+
+  if (crop) {
+    src.x = crop->x + meta->x;
+    src.y = crop->y + meta->y;
+    src.w = crop->width;
+    src.h = crop->height;
+  } else {
+    src.x = meta->x;
+    src.y = meta->y;
+    src.w = meta->width;
+    src.h = meta->height;
+  }
+
+  if (xvimagesink->keep_aspect) {
+    dst.w = xvimagesink->render_rect.w;
+    dst.h = xvimagesink->render_rect.h;
+
+    gst_video_sink_center_rect (src, dst, &result, TRUE);
+    result.x += xvimagesink->render_rect.x;
+    result.y += xvimagesink->render_rect.y;
+  } else {
+    memcpy (&result, &xvimagesink->render_rect, sizeof (GstVideoRectangle));
+  }
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  if (draw_border && xvimagesink->draw_borders) {
+    gst_xvimagesink_xwindow_draw_borders (xvimagesink, xvimagesink->xwindow,
+        result);
+    xvimagesink->redraw_border = FALSE;
+  }
+#ifdef HAVE_XSHM
+  if (xvimagesink->xcontext->use_xshm) {
+    GST_LOG_OBJECT (xvimagesink,
+        "XvShmPutImage with image %dx%d and window %dx%d, from xvimage %"
+        GST_PTR_FORMAT, meta->width, meta->height,
+        xvimagesink->render_rect.w, xvimagesink->render_rect.h, xvimage);
+
+    XvShmPutImage (xvimagesink->xcontext->disp,
+        xvimagesink->xcontext->xv_port_id,
+        xvimagesink->xwindow->win,
+        xvimagesink->xwindow->gc, meta->xvimage,
+        src.x, src.y, src.w, src.h,
+        result.x, result.y, result.w, result.h, FALSE);
+  } else
+#endif /* HAVE_XSHM */
+  {
+    XvPutImage (xvimagesink->xcontext->disp,
+        xvimagesink->xcontext->xv_port_id,
+        xvimagesink->xwindow->win,
+        xvimagesink->xwindow->gc, meta->xvimage,
+        src.x, src.y, src.w, src.h, result.x, result.y, result.w, result.h);
+  }
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  g_mutex_unlock (xvimagesink->flow_lock);
+
+  return TRUE;
+}
+
+static gboolean
+gst_xvimagesink_xwindow_decorate (GstXvImageSink * xvimagesink,
+    GstXWindow * window)
+{
+  Atom hints_atom = None;
+  MotifWmHints *hints;
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), FALSE);
+  g_return_val_if_fail (window != NULL, FALSE);
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  hints_atom = XInternAtom (xvimagesink->xcontext->disp, "_MOTIF_WM_HINTS",
+      True);
+  if (hints_atom == None) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    return FALSE;
+  }
+
+  hints = g_malloc0 (sizeof (MotifWmHints));
+
+  hints->flags |= MWM_HINTS_DECORATIONS;
+  hints->decorations = 1 << 0;
+
+  XChangeProperty (xvimagesink->xcontext->disp, window->win,
+      hints_atom, hints_atom, 32, PropModeReplace,
+      (guchar *) hints, sizeof (MotifWmHints) / sizeof (long));
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  g_free (hints);
+
+  return TRUE;
+}
+
+static void
+gst_xvimagesink_xwindow_set_title (GstXvImageSink * xvimagesink,
+    GstXWindow * xwindow, const gchar * media_title)
+{
+  if (media_title) {
+    g_free (xvimagesink->media_title);
+    xvimagesink->media_title = g_strdup (media_title);
+  }
+  if (xwindow) {
+    /* we have a window */
+    if (xwindow->internal) {
+      XTextProperty xproperty;
+      const gchar *app_name;
+      const gchar *title = NULL;
+      gchar *title_mem = NULL;
+
+      /* set application name as a title */
+      app_name = g_get_application_name ();
+
+      if (app_name && xvimagesink->media_title) {
+        title = title_mem = g_strconcat (xvimagesink->media_title, " : ",
+            app_name, NULL);
+      } else if (app_name) {
+        title = app_name;
+      } else if (xvimagesink->media_title) {
+        title = xvimagesink->media_title;
+      }
+
+      if (title) {
+        if ((XStringListToTextProperty (((char **) &title), 1,
+                    &xproperty)) != 0) {
+          XSetWMName (xvimagesink->xcontext->disp, xwindow->win, &xproperty);
+          XFree (xproperty.value);
+        }
+
+        g_free (title_mem);
+      }
+    }
+  }
+}
+
+/* This function handles a GstXWindow creation
+ * The width and height are the actual pixel size on the display */
+static GstXWindow *
+gst_xvimagesink_xwindow_new (GstXvImageSink * xvimagesink,
+    gint width, gint height)
+{
+  GstXWindow *xwindow = NULL;
+  XGCValues values;
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+
+  xwindow = g_new0 (GstXWindow, 1);
+
+  xvimagesink->render_rect.x = xvimagesink->render_rect.y = 0;
+  xvimagesink->render_rect.w = width;
+  xvimagesink->render_rect.h = height;
+
+  xwindow->width = width;
+  xwindow->height = height;
+  xwindow->internal = TRUE;
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  xwindow->win = XCreateSimpleWindow (xvimagesink->xcontext->disp,
+      xvimagesink->xcontext->root,
+      0, 0, width, height, 0, 0, xvimagesink->xcontext->black);
+
+  /* We have to do that to prevent X from redrawing the background on
+   * ConfigureNotify. This takes away flickering of video when resizing. */
+  XSetWindowBackgroundPixmap (xvimagesink->xcontext->disp, xwindow->win, None);
+
+  /* set application name as a title */
+  gst_xvimagesink_xwindow_set_title (xvimagesink, xwindow, NULL);
+
+  if (xvimagesink->handle_events) {
+    Atom wm_delete;
+
+    XSelectInput (xvimagesink->xcontext->disp, xwindow->win, ExposureMask |
+        StructureNotifyMask | PointerMotionMask | KeyPressMask |
+        KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
+
+    /* Tell the window manager we'd like delete client messages instead of
+     * being killed */
+    wm_delete = XInternAtom (xvimagesink->xcontext->disp,
+        "WM_DELETE_WINDOW", True);
+    if (wm_delete != None) {
+      (void) XSetWMProtocols (xvimagesink->xcontext->disp, xwindow->win,
+          &wm_delete, 1);
+    }
+  }
+
+  xwindow->gc = XCreateGC (xvimagesink->xcontext->disp,
+      xwindow->win, 0, &values);
+
+  XMapRaised (xvimagesink->xcontext->disp, xwindow->win);
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  gst_xvimagesink_xwindow_decorate (xvimagesink, xwindow);
+
+  gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (xvimagesink),
+      xwindow->win);
+
+  return xwindow;
+}
+
+/* This function destroys a GstXWindow */
+static void
+gst_xvimagesink_xwindow_destroy (GstXvImageSink * xvimagesink,
+    GstXWindow * xwindow)
+{
+  g_return_if_fail (xwindow != NULL);
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  /* If we did not create that window we just free the GC and let it live */
+  if (xwindow->internal)
+    XDestroyWindow (xvimagesink->xcontext->disp, xwindow->win);
+  else
+    XSelectInput (xvimagesink->xcontext->disp, xwindow->win, 0);
+
+  XFreeGC (xvimagesink->xcontext->disp, xwindow->gc);
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  g_free (xwindow);
+}
+
+static void
+gst_xvimagesink_xwindow_update_geometry (GstXvImageSink * xvimagesink)
+{
+  XWindowAttributes attr;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  /* Update the window geometry */
+  g_mutex_lock (xvimagesink->x_lock);
+  if (G_UNLIKELY (xvimagesink->xwindow == NULL)) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    return;
+  }
+
+  XGetWindowAttributes (xvimagesink->xcontext->disp,
+      xvimagesink->xwindow->win, &attr);
+
+  xvimagesink->xwindow->width = attr.width;
+  xvimagesink->xwindow->height = attr.height;
+
+  if (!xvimagesink->have_render_rect) {
+    xvimagesink->render_rect.x = xvimagesink->render_rect.y = 0;
+    xvimagesink->render_rect.w = attr.width;
+    xvimagesink->render_rect.h = attr.height;
+  }
+
+  g_mutex_unlock (xvimagesink->x_lock);
+}
+
+static void
+gst_xvimagesink_xwindow_clear (GstXvImageSink * xvimagesink,
+    GstXWindow * xwindow)
+{
+  g_return_if_fail (xwindow != NULL);
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  XvStopVideo (xvimagesink->xcontext->disp, xvimagesink->xcontext->xv_port_id,
+      xwindow->win);
+
+  XSync (xvimagesink->xcontext->disp, FALSE);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+}
+
+/* This function commits our internal colorbalance settings to our grabbed Xv
+   port. If the xcontext is not initialized yet it simply returns */
+static void
+gst_xvimagesink_update_colorbalance (GstXvImageSink * xvimagesink)
+{
+  GList *channels = NULL;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  /* If we haven't initialized the X context we can't update anything */
+  if (xvimagesink->xcontext == NULL)
+    return;
+
+  /* Don't set the attributes if they haven't been changed, to avoid
+   * rounding errors changing the values */
+  if (!xvimagesink->cb_changed)
+    return;
+
+  /* For each channel of the colorbalance we calculate the correct value
+     doing range conversion and then set the Xv port attribute to match our
+     values. */
+  channels = xvimagesink->xcontext->channels_list;
+
+  while (channels) {
+    if (channels->data && GST_IS_COLOR_BALANCE_CHANNEL (channels->data)) {
+      GstColorBalanceChannel *channel = NULL;
+      Atom prop_atom;
+      gint value = 0;
+      gdouble convert_coef;
+
+      channel = GST_COLOR_BALANCE_CHANNEL (channels->data);
+      g_object_ref (channel);
+
+      /* Our range conversion coef */
+      convert_coef = (channel->max_value - channel->min_value) / 2000.0;
+
+      if (g_ascii_strcasecmp (channel->label, "XV_HUE") == 0) {
+        value = xvimagesink->hue;
+      } else if (g_ascii_strcasecmp (channel->label, "XV_SATURATION") == 0) {
+        value = xvimagesink->saturation;
+      } else if (g_ascii_strcasecmp (channel->label, "XV_CONTRAST") == 0) {
+        value = xvimagesink->contrast;
+      } else if (g_ascii_strcasecmp (channel->label, "XV_BRIGHTNESS") == 0) {
+        value = xvimagesink->brightness;
+      } else {
+        g_warning ("got an unknown channel %s", channel->label);
+        g_object_unref (channel);
+        return;
+      }
+
+      /* Committing to Xv port */
+      g_mutex_lock (xvimagesink->x_lock);
+      prop_atom =
+          XInternAtom (xvimagesink->xcontext->disp, channel->label, True);
+      if (prop_atom != None) {
+        int xv_value;
+        xv_value =
+            floor (0.5 + (value + 1000) * convert_coef + channel->min_value);
+        XvSetPortAttribute (xvimagesink->xcontext->disp,
+            xvimagesink->xcontext->xv_port_id, prop_atom, xv_value);
+      }
+      g_mutex_unlock (xvimagesink->x_lock);
+
+      g_object_unref (channel);
+    }
+    channels = g_list_next (channels);
+  }
+}
+
+/* This function handles XEvents that might be in the queue. It generates
+   GstEvent that will be sent upstream in the pipeline to handle interactivity
+   and navigation. It will also listen for configure events on the window to
+   trigger caps renegotiation so on the fly software scaling can work. */
+static void
+gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink)
+{
+  XEvent e;
+  guint pointer_x = 0, pointer_y = 0;
+  gboolean pointer_moved = FALSE;
+  gboolean exposed = FALSE, configured = FALSE;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  /* Handle Interaction, produces navigation events */
+
+  /* We get all pointer motion events, only the last position is
+     interesting. */
+  g_mutex_lock (xvimagesink->flow_lock);
+  g_mutex_lock (xvimagesink->x_lock);
+  while (XCheckWindowEvent (xvimagesink->xcontext->disp,
+          xvimagesink->xwindow->win, PointerMotionMask, &e)) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_mutex_unlock (xvimagesink->flow_lock);
+
+    switch (e.type) {
+      case MotionNotify:
+        pointer_x = e.xmotion.x;
+        pointer_y = e.xmotion.y;
+        pointer_moved = TRUE;
+        break;
+      default:
+        break;
+    }
+    g_mutex_lock (xvimagesink->flow_lock);
+    g_mutex_lock (xvimagesink->x_lock);
+  }
+
+  if (pointer_moved) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_mutex_unlock (xvimagesink->flow_lock);
+
+    GST_DEBUG ("xvimagesink pointer moved over window at %d,%d",
+        pointer_x, pointer_y);
+    gst_navigation_send_mouse_event (GST_NAVIGATION (xvimagesink),
+        "mouse-move", 0, e.xbutton.x, e.xbutton.y);
+
+    g_mutex_lock (xvimagesink->flow_lock);
+    g_mutex_lock (xvimagesink->x_lock);
+  }
+
+  /* We get all events on our window to throw them upstream */
+  while (XCheckWindowEvent (xvimagesink->xcontext->disp,
+          xvimagesink->xwindow->win,
+          KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask,
+          &e)) {
+    KeySym keysym;
+
+    /* We lock only for the X function call */
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_mutex_unlock (xvimagesink->flow_lock);
+
+    switch (e.type) {
+      case ButtonPress:
+        /* Mouse button pressed over our window. We send upstream
+           events for interactivity/navigation */
+        GST_DEBUG ("xvimagesink button %d pressed over window at %d,%d",
+            e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        gst_navigation_send_mouse_event (GST_NAVIGATION (xvimagesink),
+            "mouse-button-press", e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        break;
+      case ButtonRelease:
+        /* Mouse button released over our window. We send upstream
+           events for interactivity/navigation */
+        GST_DEBUG ("xvimagesink button %d released over window at %d,%d",
+            e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        gst_navigation_send_mouse_event (GST_NAVIGATION (xvimagesink),
+            "mouse-button-release", e.xbutton.button, e.xbutton.x, e.xbutton.y);
+        break;
+      case KeyPress:
+      case KeyRelease:
+        /* Key pressed/released over our window. We send upstream
+           events for interactivity/navigation */
+        GST_DEBUG ("xvimagesink key %d pressed over window at %d,%d",
+            e.xkey.keycode, e.xkey.x, e.xkey.y);
+        g_mutex_lock (xvimagesink->x_lock);
+        keysym = XKeycodeToKeysym (xvimagesink->xcontext->disp,
+            e.xkey.keycode, 0);
+        g_mutex_unlock (xvimagesink->x_lock);
+        if (keysym != NoSymbol) {
+          char *key_str = NULL;
+
+          g_mutex_lock (xvimagesink->x_lock);
+          key_str = XKeysymToString (keysym);
+          g_mutex_unlock (xvimagesink->x_lock);
+          gst_navigation_send_key_event (GST_NAVIGATION (xvimagesink),
+              e.type == KeyPress ? "key-press" : "key-release", key_str);
+        } else {
+          gst_navigation_send_key_event (GST_NAVIGATION (xvimagesink),
+              e.type == KeyPress ? "key-press" : "key-release", "unknown");
+        }
+        break;
+      default:
+        GST_DEBUG_OBJECT (xvimagesink, "xvimagesink unhandled X event (%d)",
+            e.type);
+    }
+    g_mutex_lock (xvimagesink->flow_lock);
+    g_mutex_lock (xvimagesink->x_lock);
+  }
+
+  /* Handle Expose */
+  while (XCheckWindowEvent (xvimagesink->xcontext->disp,
+          xvimagesink->xwindow->win, ExposureMask | StructureNotifyMask, &e)) {
+    switch (e.type) {
+      case Expose:
+        exposed = TRUE;
+        break;
+      case ConfigureNotify:
+        g_mutex_unlock (xvimagesink->x_lock);
+        gst_xvimagesink_xwindow_update_geometry (xvimagesink);
+        g_mutex_lock (xvimagesink->x_lock);
+        configured = TRUE;
+        break;
+      default:
+        break;
+    }
+  }
+
+  if (xvimagesink->handle_expose && (exposed || configured)) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_mutex_unlock (xvimagesink->flow_lock);
+
+    gst_xvimagesink_expose (GST_VIDEO_OVERLAY (xvimagesink));
+
+    g_mutex_lock (xvimagesink->flow_lock);
+    g_mutex_lock (xvimagesink->x_lock);
+  }
+
+  /* Handle Display events */
+  while (XPending (xvimagesink->xcontext->disp)) {
+    XNextEvent (xvimagesink->xcontext->disp, &e);
+
+    switch (e.type) {
+      case ClientMessage:{
+        Atom wm_delete;
+
+        wm_delete = XInternAtom (xvimagesink->xcontext->disp,
+            "WM_DELETE_WINDOW", True);
+        if (wm_delete != None && wm_delete == (Atom) e.xclient.data.l[0]) {
+          /* Handle window deletion by posting an error on the bus */
+          GST_ELEMENT_ERROR (xvimagesink, RESOURCE, NOT_FOUND,
+              ("Output window was closed"), (NULL));
+
+          g_mutex_unlock (xvimagesink->x_lock);
+          gst_xvimagesink_xwindow_destroy (xvimagesink, xvimagesink->xwindow);
+          xvimagesink->xwindow = NULL;
+          g_mutex_lock (xvimagesink->x_lock);
+        }
+        break;
+      }
+      default:
+        break;
+    }
+  }
+
+  g_mutex_unlock (xvimagesink->x_lock);
+  g_mutex_unlock (xvimagesink->flow_lock);
+}
+
+static void
+gst_lookup_xv_port_from_adaptor (GstXContext * xcontext,
+    XvAdaptorInfo * adaptors, int adaptor_no)
+{
+  gint j;
+  gint res;
+
+  /* Do we support XvImageMask ? */
+  if (!(adaptors[adaptor_no].type & XvImageMask)) {
+    GST_DEBUG ("XV Adaptor %s has no support for XvImageMask",
+        adaptors[adaptor_no].name);
+    return;
+  }
+
+  /* We found such an adaptor, looking for an available port */
+  for (j = 0; j < adaptors[adaptor_no].num_ports && !xcontext->xv_port_id; j++) {
+    /* We try to grab the port */
+    res = XvGrabPort (xcontext->disp, adaptors[adaptor_no].base_id + j, 0);
+    if (Success == res) {
+      xcontext->xv_port_id = adaptors[adaptor_no].base_id + j;
+      GST_DEBUG ("XV Adaptor %s with %ld ports", adaptors[adaptor_no].name,
+          adaptors[adaptor_no].num_ports);
+    } else {
+      GST_DEBUG ("GrabPort %d for XV Adaptor %s failed: %d", j,
+          adaptors[adaptor_no].name, res);
+    }
+  }
+}
+
+/* This function generates a caps with all supported format by the first
+   Xv grabable port we find. We store each one of the supported formats in a
+   format list and append the format to a newly created caps that we return
+   If this function does not return NULL because of an error, it also grabs
+   the port via XvGrabPort */
+static GstCaps *
+gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink,
+    GstXContext * xcontext)
+{
+  gint i;
+  XvAdaptorInfo *adaptors;
+  gint nb_formats;
+  XvImageFormatValues *formats = NULL;
+  guint nb_encodings;
+  XvEncodingInfo *encodings = NULL;
+  gulong max_w = G_MAXINT, max_h = G_MAXINT;
+  GstCaps *caps = NULL;
+  GstCaps *rgb_caps = NULL;
+
+  g_return_val_if_fail (xcontext != NULL, NULL);
+
+  /* First let's check that XVideo extension is available */
+  if (!XQueryExtension (xcontext->disp, "XVideo", &i, &i, &i)) {
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS,
+        ("Could not initialise Xv output"),
+        ("XVideo extension is not available"));
+    return NULL;
+  }
+
+  /* Then we get adaptors list */
+  if (Success != XvQueryAdaptors (xcontext->disp, xcontext->root,
+          &xcontext->nb_adaptors, &adaptors)) {
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS,
+        ("Could not initialise Xv output"),
+        ("Failed getting XV adaptors list"));
+    return NULL;
+  }
+
+  xcontext->xv_port_id = 0;
+
+  GST_DEBUG ("Found %u XV adaptor(s)", xcontext->nb_adaptors);
+
+  xcontext->adaptors =
+      (gchar **) g_malloc0 (xcontext->nb_adaptors * sizeof (gchar *));
+
+  /* Now fill up our adaptor name array */
+  for (i = 0; i < xcontext->nb_adaptors; i++) {
+    xcontext->adaptors[i] = g_strdup (adaptors[i].name);
+  }
+
+  if (xvimagesink->adaptor_no >= 0 &&
+      xvimagesink->adaptor_no < xcontext->nb_adaptors) {
+    /* Find xv port from user defined adaptor */
+    gst_lookup_xv_port_from_adaptor (xcontext, adaptors,
+        xvimagesink->adaptor_no);
+  }
+
+  if (!xcontext->xv_port_id) {
+    /* Now search for an adaptor that supports XvImageMask */
+    for (i = 0; i < xcontext->nb_adaptors && !xcontext->xv_port_id; i++) {
+      gst_lookup_xv_port_from_adaptor (xcontext, adaptors, i);
+      xvimagesink->adaptor_no = i;
+    }
+  }
+
+  XvFreeAdaptorInfo (adaptors);
+
+  if (!xcontext->xv_port_id) {
+    xvimagesink->adaptor_no = -1;
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, BUSY,
+        ("Could not initialise Xv output"), ("No port available"));
+    return NULL;
+  }
+
+  /* Set XV_AUTOPAINT_COLORKEY and XV_DOUBLE_BUFFER and XV_COLORKEY */
+  {
+    int count, todo = 3;
+    XvAttribute *const attr = XvQueryPortAttributes (xcontext->disp,
+        xcontext->xv_port_id, &count);
+    static const char autopaint[] = "XV_AUTOPAINT_COLORKEY";
+    static const char dbl_buffer[] = "XV_DOUBLE_BUFFER";
+    static const char colorkey[] = "XV_COLORKEY";
+
+    GST_DEBUG_OBJECT (xvimagesink, "Checking %d Xv port attributes", count);
+
+    xvimagesink->have_autopaint_colorkey = FALSE;
+    xvimagesink->have_double_buffer = FALSE;
+    xvimagesink->have_colorkey = FALSE;
+
+    for (i = 0; ((i < count) && todo); i++)
+      if (!strcmp (attr[i].name, autopaint)) {
+        const Atom atom = XInternAtom (xcontext->disp, autopaint, False);
+
+        /* turn on autopaint colorkey */
+        XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
+            (xvimagesink->autopaint_colorkey ? 1 : 0));
+        todo--;
+        xvimagesink->have_autopaint_colorkey = TRUE;
+      } else if (!strcmp (attr[i].name, dbl_buffer)) {
+        const Atom atom = XInternAtom (xcontext->disp, dbl_buffer, False);
+
+        XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
+            (xvimagesink->double_buffer ? 1 : 0));
+        todo--;
+        xvimagesink->have_double_buffer = TRUE;
+      } else if (!strcmp (attr[i].name, colorkey)) {
+        /* Set the colorkey, default is something that is dark but hopefully
+         * won't randomly appear on the screen elsewhere (ie not black or greys)
+         * can be overridden by setting "colorkey" property
+         */
+        const Atom atom = XInternAtom (xcontext->disp, colorkey, False);
+        guint32 ckey = 0;
+        gboolean set_attr = TRUE;
+        guint cr, cg, cb;
+
+        /* set a colorkey in the right format RGB565/RGB888
+         * We only handle these 2 cases, because they're the only types of
+         * devices we've encountered. If we don't recognise it, leave it alone
+         */
+        cr = (xvimagesink->colorkey >> 16);
+        cg = (xvimagesink->colorkey >> 8) & 0xFF;
+        cb = (xvimagesink->colorkey) & 0xFF;
+        switch (xcontext->depth) {
+          case 16:             /* RGB 565 */
+            cr >>= 3;
+            cg >>= 2;
+            cb >>= 3;
+            ckey = (cr << 11) | (cg << 5) | cb;
+            break;
+          case 24:
+          case 32:             /* RGB 888 / ARGB 8888 */
+            ckey = (cr << 16) | (cg << 8) | cb;
+            break;
+          default:
+            GST_DEBUG_OBJECT (xvimagesink,
+                "Unknown bit depth %d for Xv Colorkey - not adjusting",
+                xcontext->depth);
+            set_attr = FALSE;
+            break;
+        }
+
+        if (set_attr) {
+          ckey = CLAMP (ckey, (guint32) attr[i].min_value,
+              (guint32) attr[i].max_value);
+          GST_LOG_OBJECT (xvimagesink,
+              "Setting color key for display depth %d to 0x%x",
+              xcontext->depth, ckey);
+
+          XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom,
+              (gint) ckey);
+        }
+        todo--;
+        xvimagesink->have_colorkey = TRUE;
+      }
+
+    XFree (attr);
+  }
+
+  /* Get the list of encodings supported by the adapter and look for the
+   * XV_IMAGE encoding so we can determine the maximum width and height
+   * supported */
+  XvQueryEncodings (xcontext->disp, xcontext->xv_port_id, &nb_encodings,
+      &encodings);
+
+  for (i = 0; i < nb_encodings; i++) {
+    GST_LOG_OBJECT (xvimagesink,
+        "Encoding %d, name %s, max wxh %lux%lu rate %d/%d",
+        i, encodings[i].name, encodings[i].width, encodings[i].height,
+        encodings[i].rate.numerator, encodings[i].rate.denominator);
+    if (strcmp (encodings[i].name, "XV_IMAGE") == 0) {
+      max_w = encodings[i].width;
+      max_h = encodings[i].height;
+    }
+  }
+
+  XvFreeEncodingInfo (encodings);
+
+  /* We get all image formats supported by our port */
+  formats = XvListImageFormats (xcontext->disp,
+      xcontext->xv_port_id, &nb_formats);
+  caps = gst_caps_new_empty ();
+  for (i = 0; i < nb_formats; i++) {
+    GstCaps *format_caps = NULL;
+    gboolean is_rgb_format = FALSE;
+    GstVideoFormat vformat;
+
+    /* We set the image format of the xcontext to an existing one. This
+       is just some valid image format for making our xshm calls check before
+       caps negotiation really happens. */
+    xcontext->im_format = formats[i].id;
+
+    switch (formats[i].type) {
+      case XvRGB:
+      {
+        XvImageFormatValues *fmt = &(formats[i]);
+        gint endianness;
+
+        endianness =
+            (fmt->byte_order == LSBFirst ? G_LITTLE_ENDIAN : G_BIG_ENDIAN);
+
+        vformat = gst_video_format_from_masks (fmt->depth, fmt->bits_per_pixel,
+            endianness, fmt->red_mask, fmt->green_mask, fmt->blue_mask, 0);
+        if (vformat == GST_VIDEO_FORMAT_UNKNOWN)
+          break;
+
+        format_caps = gst_caps_new_simple ("video/x-raw",
+            "format", G_TYPE_STRING, gst_video_format_to_string (vformat),
+            "width", GST_TYPE_INT_RANGE, 1, max_w,
+            "height", GST_TYPE_INT_RANGE, 1, max_h,
+            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+
+        is_rgb_format = TRUE;
+        break;
+      }
+      case XvYUV:
+      {
+        vformat = gst_video_format_from_fourcc (formats[i].id);
+        if (vformat == GST_VIDEO_FORMAT_UNKNOWN)
+          break;
+
+        format_caps = gst_caps_new_simple ("video/x-raw",
+            "format", G_TYPE_STRING, gst_video_format_to_string (vformat),
+            "width", GST_TYPE_INT_RANGE, 1, max_w,
+            "height", GST_TYPE_INT_RANGE, 1, max_h,
+            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+        break;
+      }
+      default:
+        vformat = GST_VIDEO_FORMAT_UNKNOWN;
+        g_assert_not_reached ();
+        break;
+    }
+
+    if (format_caps) {
+      GstXvImageFormat *format = NULL;
+
+      format = g_new0 (GstXvImageFormat, 1);
+      if (format) {
+        format->format = formats[i].id;
+        format->vformat = vformat;
+        format->caps = gst_caps_copy (format_caps);
+        xcontext->formats_list = g_list_append (xcontext->formats_list, format);
+      }
+
+      if (is_rgb_format) {
+        if (rgb_caps == NULL)
+          rgb_caps = format_caps;
+        else
+          gst_caps_append (rgb_caps, format_caps);
+      } else
+        gst_caps_append (caps, format_caps);
+    }
+  }
+
+  /* Collected all caps into either the caps or rgb_caps structures.
+   * Append rgb_caps on the end of YUV, so that YUV is always preferred */
+  if (rgb_caps)
+    gst_caps_append (caps, rgb_caps);
+
+  if (formats)
+    XFree (formats);
+
+  GST_DEBUG ("Generated the following caps: %" GST_PTR_FORMAT, caps);
+
+  if (gst_caps_is_empty (caps)) {
+    gst_caps_unref (caps);
+    XvUngrabPort (xcontext->disp, xcontext->xv_port_id, 0);
+    GST_ELEMENT_ERROR (xvimagesink, STREAM, WRONG_TYPE, (NULL),
+        ("No supported format found"));
+    return NULL;
+  }
+
+  return caps;
+}
+
+static gpointer
+gst_xvimagesink_event_thread (GstXvImageSink * xvimagesink)
+{
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+
+  GST_OBJECT_LOCK (xvimagesink);
+  while (xvimagesink->running) {
+    GST_OBJECT_UNLOCK (xvimagesink);
+
+    if (xvimagesink->xwindow) {
+      gst_xvimagesink_handle_xevents (xvimagesink);
+    }
+    /* FIXME: do we want to align this with the framerate or anything else? */
+    g_usleep (G_USEC_PER_SEC / 20);
+
+    GST_OBJECT_LOCK (xvimagesink);
+  }
+  GST_OBJECT_UNLOCK (xvimagesink);
+
+  return NULL;
+}
+
+static void
+gst_xvimagesink_manage_event_thread (GstXvImageSink * xvimagesink)
+{
+  GThread *thread = NULL;
+
+  /* don't start the thread too early */
+  if (xvimagesink->xcontext == NULL) {
+    return;
+  }
+
+  GST_OBJECT_LOCK (xvimagesink);
+  if (xvimagesink->handle_expose || xvimagesink->handle_events) {
+    if (!xvimagesink->event_thread) {
+      /* Setup our event listening thread */
+      GST_DEBUG_OBJECT (xvimagesink, "run xevent thread, expose %d, events %d",
+          xvimagesink->handle_expose, xvimagesink->handle_events);
+      xvimagesink->running = TRUE;
+      xvimagesink->event_thread = g_thread_create (
+          (GThreadFunc) gst_xvimagesink_event_thread, xvimagesink, TRUE, NULL);
+    }
+  } else {
+    if (xvimagesink->event_thread) {
+      GST_DEBUG_OBJECT (xvimagesink, "stop xevent thread, expose %d, events %d",
+          xvimagesink->handle_expose, xvimagesink->handle_events);
+      xvimagesink->running = FALSE;
+      /* grab thread and mark it as NULL */
+      thread = xvimagesink->event_thread;
+      xvimagesink->event_thread = NULL;
+    }
+  }
+  GST_OBJECT_UNLOCK (xvimagesink);
+
+  /* Wait for our event thread to finish */
+  if (thread)
+    g_thread_join (thread);
+
+}
+
+
+/* This function calculates the pixel aspect ratio based on the properties
+ * in the xcontext structure and stores it there. */
+static void
+gst_xvimagesink_calculate_pixel_aspect_ratio (GstXContext * xcontext)
+{
+  static const gint par[][2] = {
+    {1, 1},                     /* regular screen */
+    {16, 15},                   /* PAL TV */
+    {11, 10},                   /* 525 line Rec.601 video */
+    {54, 59},                   /* 625 line Rec.601 video */
+    {64, 45},                   /* 1280x1024 on 16:9 display */
+    {5, 3},                     /* 1280x1024 on 4:3 display */
+    {4, 3}                      /*  800x600 on 16:9 display */
+  };
+  gint i;
+  gint index;
+  gdouble ratio;
+  gdouble delta;
+
+#define DELTA(idx) (ABS (ratio - ((gdouble) par[idx][0] / par[idx][1])))
+
+  /* first calculate the "real" ratio based on the X values;
+   * which is the "physical" w/h divided by the w/h in pixels of the display */
+  ratio = (gdouble) (xcontext->widthmm * xcontext->height)
+      / (xcontext->heightmm * xcontext->width);
+
+  /* DirectFB's X in 720x576 reports the physical dimensions wrong, so
+   * override here */
+  if (xcontext->width == 720 && xcontext->height == 576) {
+    ratio = 4.0 * 576 / (3.0 * 720);
+  }
+  GST_DEBUG ("calculated pixel aspect ratio: %f", ratio);
+
+  /* now find the one from par[][2] with the lowest delta to the real one */
+  delta = DELTA (0);
+  index = 0;
+
+  for (i = 1; i < sizeof (par) / (sizeof (gint) * 2); ++i) {
+    gdouble this_delta = DELTA (i);
+
+    if (this_delta < delta) {
+      index = i;
+      delta = this_delta;
+    }
+  }
+
+  GST_DEBUG ("Decided on index %d (%d/%d)", index,
+      par[index][0], par[index][1]);
+
+  g_free (xcontext->par);
+  xcontext->par = g_new0 (GValue, 1);
+  g_value_init (xcontext->par, GST_TYPE_FRACTION);
+  gst_value_set_fraction (xcontext->par, par[index][0], par[index][1]);
+  GST_DEBUG ("set xcontext PAR to %d/%d",
+      gst_value_get_fraction_numerator (xcontext->par),
+      gst_value_get_fraction_denominator (xcontext->par));
+}
+
+/* This function gets the X Display and global info about it. Everything is
+   stored in our object and will be cleaned when the object is disposed. Note
+   here that caps for supported format are generated without any window or
+   image creation */
+static GstXContext *
+gst_xvimagesink_xcontext_get (GstXvImageSink * xvimagesink)
+{
+  GstXContext *xcontext = NULL;
+  XPixmapFormatValues *px_formats = NULL;
+  gint nb_formats = 0, i, j, N_attr;
+  XvAttribute *xv_attr;
+  Atom prop_atom;
+  const char *channels[4] = { "XV_HUE", "XV_SATURATION",
+    "XV_BRIGHTNESS", "XV_CONTRAST"
+  };
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+
+  xcontext = g_new0 (GstXContext, 1);
+  xcontext->im_format = 0;
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  xcontext->disp = XOpenDisplay (xvimagesink->display_name);
+
+  if (!xcontext->disp) {
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_free (xcontext);
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Could not initialise Xv output"), ("Could not open display"));
+    return NULL;
+  }
+
+  xcontext->screen = DefaultScreenOfDisplay (xcontext->disp);
+  xcontext->screen_num = DefaultScreen (xcontext->disp);
+  xcontext->visual = DefaultVisual (xcontext->disp, xcontext->screen_num);
+  xcontext->root = DefaultRootWindow (xcontext->disp);
+  xcontext->white = XWhitePixel (xcontext->disp, xcontext->screen_num);
+  xcontext->black = XBlackPixel (xcontext->disp, xcontext->screen_num);
+  xcontext->depth = DefaultDepthOfScreen (xcontext->screen);
+
+  xcontext->width = DisplayWidth (xcontext->disp, xcontext->screen_num);
+  xcontext->height = DisplayHeight (xcontext->disp, xcontext->screen_num);
+  xcontext->widthmm = DisplayWidthMM (xcontext->disp, xcontext->screen_num);
+  xcontext->heightmm = DisplayHeightMM (xcontext->disp, xcontext->screen_num);
+
+  GST_DEBUG_OBJECT (xvimagesink, "X reports %dx%d pixels and %d mm x %d mm",
+      xcontext->width, xcontext->height, xcontext->widthmm, xcontext->heightmm);
+
+  gst_xvimagesink_calculate_pixel_aspect_ratio (xcontext);
+  /* We get supported pixmap formats at supported depth */
+  px_formats = XListPixmapFormats (xcontext->disp, &nb_formats);
+
+  if (!px_formats) {
+    XCloseDisplay (xcontext->disp);
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_free (xcontext->par);
+    g_free (xcontext);
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS,
+        ("Could not initialise Xv output"), ("Could not get pixel formats"));
+    return NULL;
+  }
+
+  /* We get bpp value corresponding to our running depth */
+  for (i = 0; i < nb_formats; i++) {
+    if (px_formats[i].depth == xcontext->depth)
+      xcontext->bpp = px_formats[i].bits_per_pixel;
+  }
+
+  XFree (px_formats);
+
+  xcontext->endianness =
+      (ImageByteOrder (xcontext->disp) ==
+      LSBFirst) ? G_LITTLE_ENDIAN : G_BIG_ENDIAN;
+
+  /* our caps system handles 24/32bpp RGB as big-endian. */
+  if ((xcontext->bpp == 24 || xcontext->bpp == 32) &&
+      xcontext->endianness == G_LITTLE_ENDIAN) {
+    xcontext->endianness = G_BIG_ENDIAN;
+    xcontext->visual->red_mask = GUINT32_TO_BE (xcontext->visual->red_mask);
+    xcontext->visual->green_mask = GUINT32_TO_BE (xcontext->visual->green_mask);
+    xcontext->visual->blue_mask = GUINT32_TO_BE (xcontext->visual->blue_mask);
+    if (xcontext->bpp == 24) {
+      xcontext->visual->red_mask >>= 8;
+      xcontext->visual->green_mask >>= 8;
+      xcontext->visual->blue_mask >>= 8;
+    }
+  }
+
+  xcontext->caps = gst_xvimagesink_get_xv_support (xvimagesink, xcontext);
+
+  /* Search for XShm extension support */
+#ifdef HAVE_XSHM
+  if (XShmQueryExtension (xcontext->disp) &&
+      gst_xvimagesink_check_xshm_calls (xvimagesink, xcontext)) {
+    xcontext->use_xshm = TRUE;
+    GST_DEBUG ("xvimagesink is using XShm extension");
+  } else
+#endif /* HAVE_XSHM */
+  {
+    xcontext->use_xshm = FALSE;
+    GST_DEBUG ("xvimagesink is not using XShm extension");
+  }
+
+  if (!xcontext->caps) {
+    XCloseDisplay (xcontext->disp);
+    g_mutex_unlock (xvimagesink->x_lock);
+    g_free (xcontext->par);
+    g_free (xcontext);
+    /* GST_ELEMENT_ERROR is thrown by gst_xvimagesink_get_xv_support */
+    return NULL;
+  }
+
+  xv_attr = XvQueryPortAttributes (xcontext->disp,
+      xcontext->xv_port_id, &N_attr);
+
+
+  /* Generate the channels list */
+  for (i = 0; i < (sizeof (channels) / sizeof (char *)); i++) {
+    XvAttribute *matching_attr = NULL;
+
+    /* Retrieve the property atom if it exists. If it doesn't exist,
+     * the attribute itself must not either, so we can skip */
+    prop_atom = XInternAtom (xcontext->disp, channels[i], True);
+    if (prop_atom == None)
+      continue;
+
+    if (xv_attr != NULL) {
+      for (j = 0; j < N_attr && matching_attr == NULL; ++j)
+        if (!g_ascii_strcasecmp (channels[i], xv_attr[j].name))
+          matching_attr = xv_attr + j;
+    }
+
+    if (matching_attr) {
+      GstColorBalanceChannel *channel;
+
+      channel = g_object_new (GST_TYPE_COLOR_BALANCE_CHANNEL, NULL);
+      channel->label = g_strdup (channels[i]);
+      channel->min_value = matching_attr ? matching_attr->min_value : -1000;
+      channel->max_value = matching_attr ? matching_attr->max_value : 1000;
+
+      xcontext->channels_list = g_list_append (xcontext->channels_list,
+          channel);
+
+      /* If the colorbalance settings have not been touched we get Xv values
+         as defaults and update our internal variables */
+      if (!xvimagesink->cb_changed) {
+        gint val;
+
+        XvGetPortAttribute (xcontext->disp, xcontext->xv_port_id,
+            prop_atom, &val);
+        /* Normalize val to [-1000, 1000] */
+        val = floor (0.5 + -1000 + 2000 * (val - channel->min_value) /
+            (double) (channel->max_value - channel->min_value));
+
+        if (!g_ascii_strcasecmp (channels[i], "XV_HUE"))
+          xvimagesink->hue = val;
+        else if (!g_ascii_strcasecmp (channels[i], "XV_SATURATION"))
+          xvimagesink->saturation = val;
+        else if (!g_ascii_strcasecmp (channels[i], "XV_BRIGHTNESS"))
+          xvimagesink->brightness = val;
+        else if (!g_ascii_strcasecmp (channels[i], "XV_CONTRAST"))
+          xvimagesink->contrast = val;
+      }
+    }
+  }
+
+  if (xv_attr)
+    XFree (xv_attr);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  return xcontext;
+}
+
+/* This function cleans the X context. Closing the Display, releasing the XV
+   port and unrefing the caps for supported formats. */
+static void
+gst_xvimagesink_xcontext_clear (GstXvImageSink * xvimagesink)
+{
+  GList *formats_list, *channels_list;
+  GstXContext *xcontext;
+  gint i = 0;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  GST_OBJECT_LOCK (xvimagesink);
+  if (xvimagesink->xcontext == NULL) {
+    GST_OBJECT_UNLOCK (xvimagesink);
+    return;
+  }
+
+  /* Take the XContext from the sink and clean it up */
+  xcontext = xvimagesink->xcontext;
+  xvimagesink->xcontext = NULL;
+
+  GST_OBJECT_UNLOCK (xvimagesink);
+
+
+  formats_list = xcontext->formats_list;
+
+  while (formats_list) {
+    GstXvImageFormat *format = formats_list->data;
+
+    gst_caps_unref (format->caps);
+    g_free (format);
+    formats_list = g_list_next (formats_list);
+  }
+
+  if (xcontext->formats_list)
+    g_list_free (xcontext->formats_list);
+
+  channels_list = xcontext->channels_list;
+
+  while (channels_list) {
+    GstColorBalanceChannel *channel = channels_list->data;
+
+    g_object_unref (channel);
+    channels_list = g_list_next (channels_list);
+  }
+
+  if (xcontext->channels_list)
+    g_list_free (xcontext->channels_list);
+
+  gst_caps_unref (xcontext->caps);
+  if (xcontext->last_caps)
+    gst_caps_replace (&xcontext->last_caps, NULL);
+
+  for (i = 0; i < xcontext->nb_adaptors; i++) {
+    g_free (xcontext->adaptors[i]);
+  }
+
+  g_free (xcontext->adaptors);
+
+  g_free (xcontext->par);
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  GST_DEBUG_OBJECT (xvimagesink, "Closing display and freeing X Context");
+
+  XvUngrabPort (xcontext->disp, xcontext->xv_port_id, 0);
+
+  XCloseDisplay (xcontext->disp);
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  g_free (xcontext);
+}
+
+/* Element stuff */
+
+static GstCaps *
+gst_xvimagesink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+{
+  GstXvImageSink *xvimagesink;
+  GstCaps *caps;
+
+  xvimagesink = GST_XVIMAGESINK (bsink);
+
+  if (xvimagesink->xcontext) {
+    if (filter)
+      return gst_caps_intersect_full (filter, xvimagesink->xcontext->caps,
+          GST_CAPS_INTERSECT_FIRST);
+    else
+      return gst_caps_ref (xvimagesink->xcontext->caps);
+  }
+
+  caps = gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (xvimagesink));
+  if (filter) {
+    GstCaps *intersection;
+
+    intersection =
+        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = intersection;
+  }
+  return caps;
+}
+
+static gboolean
+gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstXvImageSink *xvimagesink;
+  GstStructure *structure;
+  GstBufferPool *newpool, *oldpool;
+  GstVideoInfo info;
+  guint32 im_format = 0;
+  gint video_par_n, video_par_d;        /* video's PAR */
+  gint display_par_n, display_par_d;    /* display's PAR */
+  guint num, den;
+  gint size;
+
+  xvimagesink = GST_XVIMAGESINK (bsink);
+
+  GST_DEBUG_OBJECT (xvimagesink,
+      "In setcaps. Possible caps %" GST_PTR_FORMAT ", setting caps %"
+      GST_PTR_FORMAT, xvimagesink->xcontext->caps, caps);
+
+  if (!gst_caps_can_intersect (xvimagesink->xcontext->caps, caps))
+    goto incompatible_caps;
+
+  if (!gst_video_info_from_caps (&info, caps))
+    goto invalid_format;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  xvimagesink->fps_n = info.fps_n;
+  xvimagesink->fps_d = info.fps_d;
+
+  xvimagesink->video_width = info.width;
+  xvimagesink->video_height = info.height;
+
+  im_format = gst_xvimagesink_get_format_from_info (xvimagesink, &info);
+  if (im_format == -1)
+    goto invalid_format;
+
+  size = info.size;
+
+  /* get aspect ratio from caps if it's present, and
+   * convert video width and height to a display width and height
+   * using wd / hd = wv / hv * PARv / PARd */
+
+  /* get video's PAR */
+  video_par_n = info.par_n;
+  video_par_d = info.par_d;
+
+  /* get display's PAR */
+  if (xvimagesink->par) {
+    display_par_n = gst_value_get_fraction_numerator (xvimagesink->par);
+    display_par_d = gst_value_get_fraction_denominator (xvimagesink->par);
+  } else {
+    display_par_n = 1;
+    display_par_d = 1;
+  }
+
+  if (!gst_video_calculate_display_ratio (&num, &den, info.width,
+          info.height, video_par_n, video_par_d, display_par_n, display_par_d))
+    goto no_disp_ratio;
+
+  GST_DEBUG_OBJECT (xvimagesink,
+      "video width/height: %dx%d, calculated display ratio: %d/%d",
+      info.width, info.height, num, den);
+
+  /* now find a width x height that respects this display ratio.
+   * prefer those that have one of w/h the same as the incoming video
+   * using wd / hd = num / den */
+
+  /* start with same height, because of interlaced video */
+  /* check hd / den is an integer scale factor, and scale wd with the PAR */
+  if (info.height % den == 0) {
+    GST_DEBUG_OBJECT (xvimagesink, "keeping video height");
+    GST_VIDEO_SINK_WIDTH (xvimagesink) = (guint)
+        gst_util_uint64_scale_int (info.height, num, den);
+    GST_VIDEO_SINK_HEIGHT (xvimagesink) = info.height;
+  } else if (info.width % num == 0) {
+    GST_DEBUG_OBJECT (xvimagesink, "keeping video width");
+    GST_VIDEO_SINK_WIDTH (xvimagesink) = info.width;
+    GST_VIDEO_SINK_HEIGHT (xvimagesink) = (guint)
+        gst_util_uint64_scale_int (info.width, den, num);
+  } else {
+    GST_DEBUG_OBJECT (xvimagesink, "approximating while keeping video height");
+    GST_VIDEO_SINK_WIDTH (xvimagesink) = (guint)
+        gst_util_uint64_scale_int (info.height, num, den);
+    GST_VIDEO_SINK_HEIGHT (xvimagesink) = info.height;
+  }
+  GST_DEBUG_OBJECT (xvimagesink, "scaling to %dx%d",
+      GST_VIDEO_SINK_WIDTH (xvimagesink), GST_VIDEO_SINK_HEIGHT (xvimagesink));
+
+  /* Notify application to set xwindow id now */
+  g_mutex_lock (xvimagesink->flow_lock);
+  if (!xvimagesink->xwindow) {
+    g_mutex_unlock (xvimagesink->flow_lock);
+    gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (xvimagesink));
+  } else {
+    g_mutex_unlock (xvimagesink->flow_lock);
+  }
+
+  /* Creating our window and our image with the display size in pixels */
+  if (GST_VIDEO_SINK_WIDTH (xvimagesink) <= 0 ||
+      GST_VIDEO_SINK_HEIGHT (xvimagesink) <= 0)
+    goto no_display_size;
+
+  g_mutex_lock (xvimagesink->flow_lock);
+  if (!xvimagesink->xwindow) {
+    xvimagesink->xwindow = gst_xvimagesink_xwindow_new (xvimagesink,
+        GST_VIDEO_SINK_WIDTH (xvimagesink),
+        GST_VIDEO_SINK_HEIGHT (xvimagesink));
+  }
+
+  xvimagesink->info = info;
+
+  /* After a resize, we want to redraw the borders in case the new frame size
+   * doesn't cover the same area */
+  xvimagesink->redraw_border = TRUE;
+
+  /* create a new pool for the new configuration */
+  newpool = gst_xvimage_buffer_pool_new (xvimagesink);
+
+  structure = gst_buffer_pool_get_config (newpool);
+  gst_buffer_pool_config_set (structure, caps, size, 2, 0, 0, 15);
+  if (!gst_buffer_pool_set_config (newpool, structure))
+    goto config_failed;
+
+  oldpool = xvimagesink->pool;
+  xvimagesink->pool = newpool;
+  g_mutex_unlock (xvimagesink->flow_lock);
+
+  /* unref the old sink */
+  if (oldpool) {
+    /* we don't deactivate, some elements might still be using it, it will
+     * be deactivated when the last ref is gone */
+    gst_object_unref (oldpool);
+  }
+
+  return TRUE;
+
+  /* ERRORS */
+incompatible_caps:
+  {
+    GST_ERROR_OBJECT (xvimagesink, "caps incompatible");
+    return FALSE;
+  }
+invalid_format:
+  {
+    GST_DEBUG_OBJECT (xvimagesink,
+        "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+no_disp_ratio:
+  {
+    GST_ELEMENT_ERROR (xvimagesink, CORE, NEGOTIATION, (NULL),
+        ("Error calculating the output display ratio of the video."));
+    return FALSE;
+  }
+no_display_size:
+  {
+    GST_ELEMENT_ERROR (xvimagesink, CORE, NEGOTIATION, (NULL),
+        ("Error calculating the output display ratio of the video."));
+    return FALSE;
+  }
+config_failed:
+  {
+    GST_ERROR_OBJECT (xvimagesink, "failed to set config.");
+    g_mutex_unlock (xvimagesink->flow_lock);
+    return FALSE;
+  }
+}
+
+static GstStateChangeReturn
+gst_xvimagesink_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstXvImageSink *xvimagesink;
+  GstXContext *xcontext = NULL;
+
+  xvimagesink = GST_XVIMAGESINK (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      /* Initializing the XContext */
+      if (xvimagesink->xcontext == NULL) {
+        xcontext = gst_xvimagesink_xcontext_get (xvimagesink);
+        if (xcontext == NULL) {
+          ret = GST_STATE_CHANGE_FAILURE;
+          goto beach;
+        }
+        GST_OBJECT_LOCK (xvimagesink);
+        if (xcontext)
+          xvimagesink->xcontext = xcontext;
+        GST_OBJECT_UNLOCK (xvimagesink);
+      }
+
+      /* update object's par with calculated one if not set yet */
+      if (!xvimagesink->par) {
+        xvimagesink->par = g_new0 (GValue, 1);
+        gst_value_init_and_copy (xvimagesink->par, xvimagesink->xcontext->par);
+        GST_DEBUG_OBJECT (xvimagesink, "set calculated PAR on object's PAR");
+      }
+      /* call XSynchronize with the current value of synchronous */
+      GST_DEBUG_OBJECT (xvimagesink, "XSynchronize called with %s",
+          xvimagesink->synchronous ? "TRUE" : "FALSE");
+      XSynchronize (xvimagesink->xcontext->disp, xvimagesink->synchronous);
+      gst_xvimagesink_update_colorbalance (xvimagesink);
+      gst_xvimagesink_manage_event_thread (xvimagesink);
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      xvimagesink->fps_n = 0;
+      xvimagesink->fps_d = 1;
+      GST_VIDEO_SINK_WIDTH (xvimagesink) = 0;
+      GST_VIDEO_SINK_HEIGHT (xvimagesink) = 0;
+      g_mutex_lock (xvimagesink->flow_lock);
+      if (xvimagesink->pool)
+        gst_buffer_pool_set_active (xvimagesink->pool, FALSE);
+      g_mutex_unlock (xvimagesink->flow_lock);
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_xvimagesink_reset (xvimagesink);
+      break;
+    default:
+      break;
+  }
+
+beach:
+  return ret;
+}
+
+static void
+gst_xvimagesink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end)
+{
+  GstXvImageSink *xvimagesink;
+
+  xvimagesink = GST_XVIMAGESINK (bsink);
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    *start = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_BUFFER_DURATION_IS_VALID (buf)) {
+      *end = *start + GST_BUFFER_DURATION (buf);
+    } else {
+      if (xvimagesink->fps_n > 0) {
+        *end = *start +
+            gst_util_uint64_scale_int (GST_SECOND, xvimagesink->fps_d,
+            xvimagesink->fps_n);
+      }
+    }
+  }
+}
+
+static GstFlowReturn
+gst_xvimagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+{
+  GstFlowReturn res;
+  GstXvImageSink *xvimagesink;
+  GstMetaXvImage *meta;
+  GstBuffer *to_put;
+
+  xvimagesink = GST_XVIMAGESINK (vsink);
+
+  meta = gst_buffer_get_meta_xvimage (buf);
+
+  if (meta && meta->sink == xvimagesink) {
+    /* If this buffer has been allocated using our buffer management we simply
+       put the ximage which is in the PRIVATE pointer */
+    GST_LOG_OBJECT (xvimagesink, "buffer %p from our pool, writing directly",
+        buf);
+    to_put = buf;
+    res = GST_FLOW_OK;
+  } else {
+    GstVideoFrame src, dest;
+
+    /* Else we have to copy the data into our private image, */
+    /* if we have one... */
+    GST_LOG_OBJECT (xvimagesink, "buffer %p not from our pool, copying", buf);
+
+    /* we should have a pool, configured in setcaps */
+    if (xvimagesink->pool == NULL)
+      goto no_pool;
+
+    if (!gst_buffer_pool_set_active (xvimagesink->pool, TRUE))
+      goto activate_failed;
+
+    /* take a buffer form our pool */
+    res = gst_buffer_pool_acquire_buffer (xvimagesink->pool, &to_put, NULL);
+    if (res != GST_FLOW_OK)
+      goto no_buffer;
+
+    if (gst_buffer_get_size (to_put) < gst_buffer_get_size (buf))
+      goto wrong_size;
+
+    GST_CAT_LOG_OBJECT (GST_CAT_PERFORMANCE, xvimagesink,
+        "slow copy into bufferpool buffer %p", to_put);
+
+    if (!gst_video_frame_map (&src, &xvimagesink->info, buf, GST_MAP_READ))
+      goto invalid_buffer;
+
+    if (!gst_video_frame_map (&dest, &xvimagesink->info, to_put, GST_MAP_WRITE)) {
+      gst_video_frame_unmap (&src);
+      goto invalid_buffer;
+    }
+
+    gst_video_frame_copy (&dest, &src);
+
+    gst_video_frame_unmap (&dest);
+    gst_video_frame_unmap (&src);
+  }
+
+  if (!gst_xvimagesink_xvimage_put (xvimagesink, to_put))
+    goto no_window;
+
+done:
+  if (to_put != buf)
+    gst_buffer_unref (to_put);
+
+  return res;
+
+  /* ERRORS */
+no_pool:
+  {
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Internal error: can't allocate images"),
+        ("We don't have a bufferpool negotiated"));
+    return GST_FLOW_ERROR;
+  }
+no_buffer:
+  {
+    /* No image available. That's very bad ! */
+    GST_WARNING_OBJECT (xvimagesink, "could not create image");
+    return res;
+  }
+wrong_size:
+  {
+    GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE,
+        ("Failed to create output image buffer"),
+        ("XServer allocated buffer size did not match input buffer %"
+            G_GSIZE_FORMAT " - %" G_GSIZE_FORMAT, gst_buffer_get_size (to_put),
+            gst_buffer_get_size (buf)));
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+invalid_buffer:
+  {
+    /* No Window available to put our image into */
+    GST_WARNING_OBJECT (xvimagesink, "could map image");
+    res = GST_FLOW_OK;
+    goto done;
+  }
+no_window:
+  {
+    /* No Window available to put our image into */
+    GST_WARNING_OBJECT (xvimagesink, "could not output image - no window");
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+activate_failed:
+  {
+    GST_ERROR_OBJECT (xvimagesink, "failed to activate bufferpool.");
+    res = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static gboolean
+gst_xvimagesink_event (GstBaseSink * sink, GstEvent * event)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (sink);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_TAG:{
+      GstTagList *l;
+      gchar *title = NULL;
+
+      gst_event_parse_tag (event, &l);
+      gst_tag_list_get_string (l, GST_TAG_TITLE, &title);
+
+      if (title) {
+        GST_DEBUG_OBJECT (xvimagesink, "got tags, title='%s'", title);
+        gst_xvimagesink_xwindow_set_title (xvimagesink, xvimagesink->xwindow,
+            title);
+
+        g_free (title);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  if (GST_BASE_SINK_CLASS (parent_class)->event)
+    return GST_BASE_SINK_CLASS (parent_class)->event (sink, event);
+  else
+    return TRUE;
+}
+
+static gboolean
+gst_xvimagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (bsink);
+  GstBufferPool *pool;
+  GstStructure *config;
+  GstCaps *caps;
+  guint size;
+  gboolean need_pool;
+
+  gst_query_parse_allocation (query, &caps, &need_pool);
+
+  if (caps == NULL)
+    goto no_caps;
+
+  g_mutex_lock (xvimagesink->flow_lock);
+  if ((pool = xvimagesink->pool))
+    gst_object_ref (pool);
+  g_mutex_unlock (xvimagesink->flow_lock);
+
+  if (pool != NULL) {
+    const GstCaps *pcaps;
+
+    /* we had a pool, check caps */
+    GST_DEBUG_OBJECT (xvimagesink, "check existing pool caps");
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL);
+
+    if (!gst_caps_is_equal (caps, pcaps)) {
+      GST_DEBUG_OBJECT (xvimagesink, "pool has different caps");
+      /* different caps, we can't use this pool */
+      gst_object_unref (pool);
+      pool = NULL;
+    }
+  }
+  if (pool == NULL && need_pool) {
+    GstVideoInfo info;
+
+    GST_DEBUG_OBJECT (xvimagesink, "create new pool");
+    pool = gst_xvimage_buffer_pool_new (xvimagesink);
+
+    if (!gst_video_info_from_caps (&info, caps))
+      goto invalid_caps;
+
+    /* the normal size of a frame */
+    size = info.size;
+
+    config = gst_buffer_pool_get_config (pool);
+    gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 0);
+    if (!gst_buffer_pool_set_config (pool, config))
+      goto config_failed;
+  }
+  /* we need at least 2 buffer because we hold on to the last one */
+  gst_query_set_allocation_params (query, size, 2, 0, 0, 0, pool);
+
+  /* we also support various metadata */
+  gst_query_add_allocation_meta (query, GST_META_API_VIDEO);
+  gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP);
+
+  gst_object_unref (pool);
+
+  return TRUE;
+
+  /* ERRORS */
+no_caps:
+  {
+    GST_DEBUG_OBJECT (bsink, "no caps specified");
+    return FALSE;
+  }
+invalid_caps:
+  {
+    GST_DEBUG_OBJECT (bsink, "invalid caps specified");
+    return FALSE;
+  }
+config_failed:
+  {
+    GST_DEBUG_OBJECT (bsink, "failed setting config");
+    return FALSE;
+  }
+}
+
+/* Interfaces stuff */
+static void
+gst_xvimagesink_navigation_send_event (GstNavigation * navigation,
+    GstStructure * structure)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (navigation);
+  GstPad *peer;
+
+  if ((peer = gst_pad_get_peer (GST_VIDEO_SINK_PAD (xvimagesink)))) {
+    GstEvent *event;
+    GstVideoRectangle src, dst, result;
+    gdouble x, y, xscale = 1.0, yscale = 1.0;
+
+    event = gst_event_new_navigation (structure);
+
+    /* We take the flow_lock while we look at the window */
+    g_mutex_lock (xvimagesink->flow_lock);
+
+    if (!xvimagesink->xwindow) {
+      g_mutex_unlock (xvimagesink->flow_lock);
+      return;
+    }
+
+    if (xvimagesink->keep_aspect) {
+      /* We get the frame position using the calculated geometry from _setcaps
+         that respect pixel aspect ratios */
+      src.w = GST_VIDEO_SINK_WIDTH (xvimagesink);
+      src.h = GST_VIDEO_SINK_HEIGHT (xvimagesink);
+      dst.w = xvimagesink->render_rect.w;
+      dst.h = xvimagesink->render_rect.h;
+
+      gst_video_sink_center_rect (src, dst, &result, TRUE);
+      result.x += xvimagesink->render_rect.x;
+      result.y += xvimagesink->render_rect.y;
+    } else {
+      memcpy (&result, &xvimagesink->render_rect, sizeof (GstVideoRectangle));
+    }
+
+    g_mutex_unlock (xvimagesink->flow_lock);
+
+    /* We calculate scaling using the original video frames geometry to include
+       pixel aspect ratio scaling. */
+    xscale = (gdouble) xvimagesink->video_width / result.w;
+    yscale = (gdouble) xvimagesink->video_height / result.h;
+
+    /* Converting pointer coordinates to the non scaled geometry */
+    if (gst_structure_get_double (structure, "pointer_x", &x)) {
+      x = MIN (x, result.x + result.w);
+      x = MAX (x - result.x, 0);
+      gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE,
+          (gdouble) x * xscale, NULL);
+    }
+    if (gst_structure_get_double (structure, "pointer_y", &y)) {
+      y = MIN (y, result.y + result.h);
+      y = MAX (y - result.y, 0);
+      gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE,
+          (gdouble) y * yscale, NULL);
+    }
+
+    gst_pad_send_event (peer, event);
+    gst_object_unref (peer);
+  }
+}
+
+static void
+gst_xvimagesink_navigation_init (GstNavigationInterface * iface)
+{
+  iface->send_event = gst_xvimagesink_navigation_send_event;
+}
+
+static void
+gst_xvimagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
+{
+  XID xwindow_id = id;
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+  GstXWindow *xwindow = NULL;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+
+  g_mutex_lock (xvimagesink->flow_lock);
+
+  /* If we already use that window return */
+  if (xvimagesink->xwindow && (xwindow_id == xvimagesink->xwindow->win)) {
+    g_mutex_unlock (xvimagesink->flow_lock);
+    return;
+  }
+
+  /* If the element has not initialized the X11 context try to do so */
+  if (!xvimagesink->xcontext &&
+      !(xvimagesink->xcontext = gst_xvimagesink_xcontext_get (xvimagesink))) {
+    g_mutex_unlock (xvimagesink->flow_lock);
+    /* we have thrown a GST_ELEMENT_ERROR now */
+    return;
+  }
+
+  gst_xvimagesink_update_colorbalance (xvimagesink);
+
+  /* If a window is there already we destroy it */
+  if (xvimagesink->xwindow) {
+    gst_xvimagesink_xwindow_destroy (xvimagesink, xvimagesink->xwindow);
+    xvimagesink->xwindow = NULL;
+  }
+
+  /* If the xid is 0 we go back to an internal window */
+  if (xwindow_id == 0) {
+    /* If no width/height caps nego did not happen window will be created
+       during caps nego then */
+    if (GST_VIDEO_SINK_WIDTH (xvimagesink)
+        && GST_VIDEO_SINK_HEIGHT (xvimagesink)) {
+      xwindow =
+          gst_xvimagesink_xwindow_new (xvimagesink,
+          GST_VIDEO_SINK_WIDTH (xvimagesink),
+          GST_VIDEO_SINK_HEIGHT (xvimagesink));
+    }
+  } else {
+    XWindowAttributes attr;
+
+    xwindow = g_new0 (GstXWindow, 1);
+    xwindow->win = xwindow_id;
+
+    /* Set the event we want to receive and create a GC */
+    g_mutex_lock (xvimagesink->x_lock);
+
+    XGetWindowAttributes (xvimagesink->xcontext->disp, xwindow->win, &attr);
+
+    xwindow->width = attr.width;
+    xwindow->height = attr.height;
+    xwindow->internal = FALSE;
+    if (!xvimagesink->have_render_rect) {
+      xvimagesink->render_rect.x = xvimagesink->render_rect.y = 0;
+      xvimagesink->render_rect.w = attr.width;
+      xvimagesink->render_rect.h = attr.height;
+    }
+    if (xvimagesink->handle_events) {
+      XSelectInput (xvimagesink->xcontext->disp, xwindow->win, ExposureMask |
+          StructureNotifyMask | PointerMotionMask | KeyPressMask |
+          KeyReleaseMask);
+    }
+
+    xwindow->gc = XCreateGC (xvimagesink->xcontext->disp,
+        xwindow->win, 0, NULL);
+    g_mutex_unlock (xvimagesink->x_lock);
+  }
+
+  if (xwindow)
+    xvimagesink->xwindow = xwindow;
+
+  g_mutex_unlock (xvimagesink->flow_lock);
+}
+
+static void
+gst_xvimagesink_expose (GstVideoOverlay * overlay)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+
+  GST_DEBUG ("doing expose");
+  gst_xvimagesink_xwindow_update_geometry (xvimagesink);
+  gst_xvimagesink_xvimage_put (xvimagesink, NULL);
+}
+
+static void
+gst_xvimagesink_set_event_handling (GstVideoOverlay * overlay,
+    gboolean handle_events)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+
+  xvimagesink->handle_events = handle_events;
+
+  g_mutex_lock (xvimagesink->flow_lock);
+
+  if (G_UNLIKELY (!xvimagesink->xwindow)) {
+    g_mutex_unlock (xvimagesink->flow_lock);
+    return;
+  }
+
+  g_mutex_lock (xvimagesink->x_lock);
+
+  if (handle_events) {
+    if (xvimagesink->xwindow->internal) {
+      XSelectInput (xvimagesink->xcontext->disp, xvimagesink->xwindow->win,
+          ExposureMask | StructureNotifyMask | PointerMotionMask |
+          KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
+    } else {
+      XSelectInput (xvimagesink->xcontext->disp, xvimagesink->xwindow->win,
+          ExposureMask | StructureNotifyMask | PointerMotionMask |
+          KeyPressMask | KeyReleaseMask);
+    }
+  } else {
+    XSelectInput (xvimagesink->xcontext->disp, xvimagesink->xwindow->win, 0);
+  }
+
+  g_mutex_unlock (xvimagesink->x_lock);
+
+  g_mutex_unlock (xvimagesink->flow_lock);
+}
+
+static void
+gst_xvimagesink_set_render_rectangle (GstVideoOverlay * overlay, gint x, gint y,
+    gint width, gint height)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+
+  /* FIXME: how about some locking? */
+  if (width >= 0 && height >= 0) {
+    xvimagesink->render_rect.x = x;
+    xvimagesink->render_rect.y = y;
+    xvimagesink->render_rect.w = width;
+    xvimagesink->render_rect.h = height;
+    xvimagesink->have_render_rect = TRUE;
+  } else {
+    xvimagesink->render_rect.x = 0;
+    xvimagesink->render_rect.y = 0;
+    xvimagesink->render_rect.w = xvimagesink->xwindow->width;
+    xvimagesink->render_rect.h = xvimagesink->xwindow->height;
+    xvimagesink->have_render_rect = FALSE;
+  }
+}
+
+static void
+gst_xvimagesink_video_overlay_init (GstVideoOverlayIface * iface)
+{
+  iface->set_window_handle = gst_xvimagesink_set_window_handle;
+  iface->expose = gst_xvimagesink_expose;
+  iface->handle_events = gst_xvimagesink_set_event_handling;
+  iface->set_render_rectangle = gst_xvimagesink_set_render_rectangle;
+}
+
+static const GList *
+gst_xvimagesink_colorbalance_list_channels (GstColorBalance * balance)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+
+  if (xvimagesink->xcontext)
+    return xvimagesink->xcontext->channels_list;
+  else
+    return NULL;
+}
+
+static void
+gst_xvimagesink_colorbalance_set_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel, gint value)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (channel->label != NULL);
+
+  xvimagesink->cb_changed = TRUE;
+
+  /* Normalize val to [-1000, 1000] */
+  value = floor (0.5 + -1000 + 2000 * (value - channel->min_value) /
+      (double) (channel->max_value - channel->min_value));
+
+  if (g_ascii_strcasecmp (channel->label, "XV_HUE") == 0) {
+    xvimagesink->hue = value;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_SATURATION") == 0) {
+    xvimagesink->saturation = value;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_CONTRAST") == 0) {
+    xvimagesink->contrast = value;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_BRIGHTNESS") == 0) {
+    xvimagesink->brightness = value;
+  } else {
+    g_warning ("got an unknown channel %s", channel->label);
+    return;
+  }
+
+  gst_xvimagesink_update_colorbalance (xvimagesink);
+}
+
+static gint
+gst_xvimagesink_colorbalance_get_value (GstColorBalance * balance,
+    GstColorBalanceChannel * channel)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+  gint value = 0;
+
+  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), 0);
+  g_return_val_if_fail (channel->label != NULL, 0);
+
+  if (g_ascii_strcasecmp (channel->label, "XV_HUE") == 0) {
+    value = xvimagesink->hue;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_SATURATION") == 0) {
+    value = xvimagesink->saturation;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_CONTRAST") == 0) {
+    value = xvimagesink->contrast;
+  } else if (g_ascii_strcasecmp (channel->label, "XV_BRIGHTNESS") == 0) {
+    value = xvimagesink->brightness;
+  } else {
+    g_warning ("got an unknown channel %s", channel->label);
+  }
+
+  /* Normalize val to [channel->min_value, channel->max_value] */
+  value = channel->min_value + (channel->max_value - channel->min_value) *
+      (value + 1000) / 2000;
+
+  return value;
+}
+
+static void
+gst_xvimagesink_colorbalance_init (GstColorBalanceClass * iface)
+{
+  GST_COLOR_BALANCE_TYPE (iface) = GST_COLOR_BALANCE_HARDWARE;
+  iface->list_channels = gst_xvimagesink_colorbalance_list_channels;
+  iface->set_value = gst_xvimagesink_colorbalance_set_value;
+  iface->get_value = gst_xvimagesink_colorbalance_get_value;
+}
+
+static const GList *
+gst_xvimagesink_probe_get_properties (GstPropertyProbe * probe)
+{
+  GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
+  static GList *list = NULL;
+
+  if (!list) {
+    list = g_list_append (NULL, g_object_class_find_property (klass, "device"));
+    list =
+        g_list_append (list, g_object_class_find_property (klass,
+            "autopaint-colorkey"));
+    list =
+        g_list_append (list, g_object_class_find_property (klass,
+            "double-buffer"));
+    list =
+        g_list_append (list, g_object_class_find_property (klass, "colorkey"));
+  }
+
+  return list;
+}
+
+static void
+gst_xvimagesink_probe_probe_property (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+    case PROP_AUTOPAINT_COLORKEY:
+    case PROP_DOUBLE_BUFFER:
+    case PROP_COLORKEY:
+      GST_DEBUG_OBJECT (xvimagesink,
+          "probing device list and get capabilities");
+      if (!xvimagesink->xcontext) {
+        GST_DEBUG_OBJECT (xvimagesink, "generating xcontext");
+        xvimagesink->xcontext = gst_xvimagesink_xcontext_get (xvimagesink);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_xvimagesink_probe_needs_probe (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+  gboolean ret = FALSE;
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+    case PROP_AUTOPAINT_COLORKEY:
+    case PROP_DOUBLE_BUFFER:
+    case PROP_COLORKEY:
+      if (xvimagesink->xcontext != NULL) {
+        ret = FALSE;
+      } else {
+        ret = TRUE;
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+      break;
+  }
+
+  return ret;
+}
+
+static GValueArray *
+gst_xvimagesink_probe_get_values (GstPropertyProbe * probe,
+    guint prop_id, const GParamSpec * pspec)
+{
+  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+  GValueArray *array = NULL;
+
+  if (G_UNLIKELY (!xvimagesink->xcontext)) {
+    GST_WARNING_OBJECT (xvimagesink, "we don't have any xcontext, can't "
+        "get values");
+    goto beach;
+  }
+
+  switch (prop_id) {
+    case PROP_DEVICE:
+    {
+      guint i;
+      GValue value = { 0 };
+
+      array = g_value_array_new (xvimagesink->xcontext->nb_adaptors);
+      g_value_init (&value, G_TYPE_STRING);
+
+      for (i = 0; i < xvimagesink->xcontext->nb_adaptors; i++) {
+        gchar *adaptor_id_s = g_strdup_printf ("%u", i);
+
+        g_value_set_string (&value, adaptor_id_s);
+        g_value_array_append (array, &value);
+        g_free (adaptor_id_s);
+      }
+      g_value_unset (&value);
+      break;
+    }
+    case PROP_AUTOPAINT_COLORKEY:
+      if (xvimagesink->have_autopaint_colorkey) {
+        GValue value = { 0 };
+
+        array = g_value_array_new (2);
+        g_value_init (&value, G_TYPE_BOOLEAN);
+        g_value_set_boolean (&value, FALSE);
+        g_value_array_append (array, &value);
+        g_value_set_boolean (&value, TRUE);
+        g_value_array_append (array, &value);
+        g_value_unset (&value);
+      }
+      break;
+    case PROP_DOUBLE_BUFFER:
+      if (xvimagesink->have_double_buffer) {
+        GValue value = { 0 };
+
+        array = g_value_array_new (2);
+        g_value_init (&value, G_TYPE_BOOLEAN);
+        g_value_set_boolean (&value, FALSE);
+        g_value_array_append (array, &value);
+        g_value_set_boolean (&value, TRUE);
+        g_value_array_append (array, &value);
+        g_value_unset (&value);
+      }
+      break;
+    case PROP_COLORKEY:
+      if (xvimagesink->have_colorkey) {
+        GValue value = { 0 };
+
+        array = g_value_array_new (1);
+        g_value_init (&value, GST_TYPE_INT_RANGE);
+        gst_value_set_int_range (&value, 0, 0xffffff);
+        g_value_array_append (array, &value);
+        g_value_unset (&value);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
+      break;
+  }
+
+beach:
+  return array;
+}
+
+static void
+gst_xvimagesink_property_probe_interface_init (GstPropertyProbeInterface *
+    iface)
+{
+  iface->get_properties = gst_xvimagesink_probe_get_properties;
+  iface->probe_property = gst_xvimagesink_probe_probe_property;
+  iface->needs_probe = gst_xvimagesink_probe_needs_probe;
+  iface->get_values = gst_xvimagesink_probe_get_values;
+}
+
+/* =========================================== */
+/*                                             */
+/*              Init & Class init              */
+/*                                             */
+/* =========================================== */
+
+static void
+gst_xvimagesink_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstXvImageSink *xvimagesink;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (object));
+
+  xvimagesink = GST_XVIMAGESINK (object);
+
+  switch (prop_id) {
+    case PROP_HUE:
+      xvimagesink->hue = g_value_get_int (value);
+      xvimagesink->cb_changed = TRUE;
+      gst_xvimagesink_update_colorbalance (xvimagesink);
+      break;
+    case PROP_CONTRAST:
+      xvimagesink->contrast = g_value_get_int (value);
+      xvimagesink->cb_changed = TRUE;
+      gst_xvimagesink_update_colorbalance (xvimagesink);
+      break;
+    case PROP_BRIGHTNESS:
+      xvimagesink->brightness = g_value_get_int (value);
+      xvimagesink->cb_changed = TRUE;
+      gst_xvimagesink_update_colorbalance (xvimagesink);
+      break;
+    case PROP_SATURATION:
+      xvimagesink->saturation = g_value_get_int (value);
+      xvimagesink->cb_changed = TRUE;
+      gst_xvimagesink_update_colorbalance (xvimagesink);
+      break;
+    case PROP_DISPLAY:
+      xvimagesink->display_name = g_strdup (g_value_get_string (value));
+      break;
+    case PROP_SYNCHRONOUS:
+      xvimagesink->synchronous = g_value_get_boolean (value);
+      if (xvimagesink->xcontext) {
+        XSynchronize (xvimagesink->xcontext->disp, xvimagesink->synchronous);
+        GST_DEBUG_OBJECT (xvimagesink, "XSynchronize called with %s",
+            xvimagesink->synchronous ? "TRUE" : "FALSE");
+      }
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+      g_free (xvimagesink->par);
+      xvimagesink->par = g_new0 (GValue, 1);
+      g_value_init (xvimagesink->par, GST_TYPE_FRACTION);
+      if (!g_value_transform (value, xvimagesink->par)) {
+        g_warning ("Could not transform string to aspect ratio");
+        gst_value_set_fraction (xvimagesink->par, 1, 1);
+      }
+      GST_DEBUG_OBJECT (xvimagesink, "set PAR to %d/%d",
+          gst_value_get_fraction_numerator (xvimagesink->par),
+          gst_value_get_fraction_denominator (xvimagesink->par));
+      break;
+    case PROP_FORCE_ASPECT_RATIO:
+      xvimagesink->keep_aspect = g_value_get_boolean (value);
+      break;
+    case PROP_HANDLE_EVENTS:
+      gst_xvimagesink_set_event_handling (GST_VIDEO_OVERLAY (xvimagesink),
+          g_value_get_boolean (value));
+      gst_xvimagesink_manage_event_thread (xvimagesink);
+      break;
+    case PROP_DEVICE:
+      xvimagesink->adaptor_no = atoi (g_value_get_string (value));
+      break;
+    case PROP_HANDLE_EXPOSE:
+      xvimagesink->handle_expose = g_value_get_boolean (value);
+      gst_xvimagesink_manage_event_thread (xvimagesink);
+      break;
+    case PROP_DOUBLE_BUFFER:
+      xvimagesink->double_buffer = g_value_get_boolean (value);
+      break;
+    case PROP_AUTOPAINT_COLORKEY:
+      xvimagesink->autopaint_colorkey = g_value_get_boolean (value);
+      break;
+    case PROP_COLORKEY:
+      xvimagesink->colorkey = g_value_get_int (value);
+      break;
+    case PROP_DRAW_BORDERS:
+      xvimagesink->draw_borders = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_xvimagesink_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstXvImageSink *xvimagesink;
+
+  g_return_if_fail (GST_IS_XVIMAGESINK (object));
+
+  xvimagesink = GST_XVIMAGESINK (object);
+
+  switch (prop_id) {
+    case PROP_HUE:
+      g_value_set_int (value, xvimagesink->hue);
+      break;
+    case PROP_CONTRAST:
+      g_value_set_int (value, xvimagesink->contrast);
+      break;
+    case PROP_BRIGHTNESS:
+      g_value_set_int (value, xvimagesink->brightness);
+      break;
+    case PROP_SATURATION:
+      g_value_set_int (value, xvimagesink->saturation);
+      break;
+    case PROP_DISPLAY:
+      g_value_set_string (value, xvimagesink->display_name);
+      break;
+    case PROP_SYNCHRONOUS:
+      g_value_set_boolean (value, xvimagesink->synchronous);
+      break;
+    case PROP_PIXEL_ASPECT_RATIO:
+      if (xvimagesink->par)
+        g_value_transform (xvimagesink->par, value);
+      break;
+    case PROP_FORCE_ASPECT_RATIO:
+      g_value_set_boolean (value, xvimagesink->keep_aspect);
+      break;
+    case PROP_HANDLE_EVENTS:
+      g_value_set_boolean (value, xvimagesink->handle_events);
+      break;
+    case PROP_DEVICE:
+    {
+      char *adaptor_no_s = g_strdup_printf ("%u", xvimagesink->adaptor_no);
+
+      g_value_set_string (value, adaptor_no_s);
+      g_free (adaptor_no_s);
+      break;
+    }
+    case PROP_DEVICE_NAME:
+      if (xvimagesink->xcontext && xvimagesink->xcontext->adaptors) {
+        g_value_set_string (value,
+            xvimagesink->xcontext->adaptors[xvimagesink->adaptor_no]);
+      } else {
+        g_value_set_string (value, NULL);
+      }
+      break;
+    case PROP_HANDLE_EXPOSE:
+      g_value_set_boolean (value, xvimagesink->handle_expose);
+      break;
+    case PROP_DOUBLE_BUFFER:
+      g_value_set_boolean (value, xvimagesink->double_buffer);
+      break;
+    case PROP_AUTOPAINT_COLORKEY:
+      g_value_set_boolean (value, xvimagesink->autopaint_colorkey);
+      break;
+    case PROP_COLORKEY:
+      g_value_set_int (value, xvimagesink->colorkey);
+      break;
+    case PROP_DRAW_BORDERS:
+      g_value_set_boolean (value, xvimagesink->draw_borders);
+      break;
+    case PROP_WINDOW_WIDTH:
+      if (xvimagesink->xwindow)
+        g_value_set_uint64 (value, xvimagesink->xwindow->width);
+      else
+        g_value_set_uint64 (value, 0);
+      break;
+    case PROP_WINDOW_HEIGHT:
+      if (xvimagesink->xwindow)
+        g_value_set_uint64 (value, xvimagesink->xwindow->height);
+      else
+        g_value_set_uint64 (value, 0);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_xvimagesink_reset (GstXvImageSink * xvimagesink)
+{
+  GThread *thread;
+
+  GST_OBJECT_LOCK (xvimagesink);
+  xvimagesink->running = FALSE;
+  /* grab thread and mark it as NULL */
+  thread = xvimagesink->event_thread;
+  xvimagesink->event_thread = NULL;
+  GST_OBJECT_UNLOCK (xvimagesink);
+
+  /* Wait for our event thread to finish before we clean up our stuff. */
+  if (thread)
+    g_thread_join (thread);
+
+  if (xvimagesink->cur_image) {
+    gst_buffer_unref (xvimagesink->cur_image);
+    xvimagesink->cur_image = NULL;
+  }
+
+  g_mutex_lock (xvimagesink->flow_lock);
+
+  if (xvimagesink->pool) {
+    gst_object_unref (xvimagesink->pool);
+    xvimagesink->pool = NULL;
+  }
+
+  if (xvimagesink->xwindow) {
+    gst_xvimagesink_xwindow_clear (xvimagesink, xvimagesink->xwindow);
+    gst_xvimagesink_xwindow_destroy (xvimagesink, xvimagesink->xwindow);
+    xvimagesink->xwindow = NULL;
+  }
+  g_mutex_unlock (xvimagesink->flow_lock);
+
+  xvimagesink->render_rect.x = xvimagesink->render_rect.y =
+      xvimagesink->render_rect.w = xvimagesink->render_rect.h = 0;
+  xvimagesink->have_render_rect = FALSE;
+
+  gst_xvimagesink_xcontext_clear (xvimagesink);
+}
+
+/* Finalize is called only once, dispose can be called multiple times.
+ * We use mutexes and don't reset stuff to NULL here so let's register
+ * as a finalize. */
+static void
+gst_xvimagesink_finalize (GObject * object)
+{
+  GstXvImageSink *xvimagesink;
+
+  xvimagesink = GST_XVIMAGESINK (object);
+
+  gst_xvimagesink_reset (xvimagesink);
+
+  if (xvimagesink->display_name) {
+    g_free (xvimagesink->display_name);
+    xvimagesink->display_name = NULL;
+  }
+
+  if (xvimagesink->par) {
+    g_free (xvimagesink->par);
+    xvimagesink->par = NULL;
+  }
+  if (xvimagesink->x_lock) {
+    g_mutex_free (xvimagesink->x_lock);
+    xvimagesink->x_lock = NULL;
+  }
+  if (xvimagesink->flow_lock) {
+    g_mutex_free (xvimagesink->flow_lock);
+    xvimagesink->flow_lock = NULL;
+  }
+
+  g_free (xvimagesink->media_title);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_xvimagesink_init (GstXvImageSink * xvimagesink)
+{
+  xvimagesink->display_name = NULL;
+  xvimagesink->adaptor_no = 0;
+  xvimagesink->xcontext = NULL;
+  xvimagesink->xwindow = NULL;
+  xvimagesink->cur_image = NULL;
+
+  xvimagesink->hue = xvimagesink->saturation = 0;
+  xvimagesink->contrast = xvimagesink->brightness = 0;
+  xvimagesink->cb_changed = FALSE;
+
+  xvimagesink->fps_n = 0;
+  xvimagesink->fps_d = 0;
+  xvimagesink->video_width = 0;
+  xvimagesink->video_height = 0;
+
+  xvimagesink->x_lock = g_mutex_new ();
+  xvimagesink->flow_lock = g_mutex_new ();
+
+  xvimagesink->pool = NULL;
+
+  xvimagesink->synchronous = FALSE;
+  xvimagesink->double_buffer = TRUE;
+  xvimagesink->running = FALSE;
+  xvimagesink->keep_aspect = FALSE;
+  xvimagesink->handle_events = TRUE;
+  xvimagesink->par = NULL;
+  xvimagesink->handle_expose = TRUE;
+  xvimagesink->autopaint_colorkey = TRUE;
+
+  /* on 16bit displays this becomes r,g,b = 1,2,3
+   * on 24bit displays this becomes r,g,b = 8,8,16
+   * as a port atom value
+   */
+  xvimagesink->colorkey = (8 << 16) | (8 << 8) | 16;
+  xvimagesink->draw_borders = TRUE;
+}
+
+static void
+gst_xvimagesink_class_init (GstXvImageSinkClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSinkClass *gstbasesink_class;
+  GstVideoSinkClass *videosink_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesink_class = (GstBaseSinkClass *) klass;
+  videosink_class = (GstVideoSinkClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->set_property = gst_xvimagesink_set_property;
+  gobject_class->get_property = gst_xvimagesink_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_CONTRAST,
+      g_param_spec_int ("contrast", "Contrast", "The contrast of the video",
+          -1000, 1000, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BRIGHTNESS,
+      g_param_spec_int ("brightness", "Brightness",
+          "The brightness of the video", -1000, 1000, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HUE,
+      g_param_spec_int ("hue", "Hue", "The hue of the video", -1000, 1000, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SATURATION,
+      g_param_spec_int ("saturation", "Saturation",
+          "The saturation of the video", -1000, 1000, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_DISPLAY,
+      g_param_spec_string ("display", "Display", "X Display name", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SYNCHRONOUS,
+      g_param_spec_boolean ("synchronous", "Synchronous",
+          "When enabled, runs "
+          "the X display in synchronous mode. (used only for debugging)", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
+      g_param_spec_string ("pixel-aspect-ratio", "Pixel Aspect Ratio",
+          "The pixel aspect ratio of the device", "1/1",
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
+      g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio",
+          "When enabled, scaling will respect original aspect ratio", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_HANDLE_EVENTS,
+      g_param_spec_boolean ("handle-events", "Handle XEvents",
+          "When enabled, XEvents will be selected and handled", TRUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_DEVICE,
+      g_param_spec_string ("device", "Adaptor number",
+          "The number of the video adaptor", "0",
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+      g_param_spec_string ("device-name", "Adaptor name",
+          "The name of the video adaptor", NULL,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstXvImageSink:handle-expose
+   *
+   * When enabled, the current frame will always be drawn in response to X
+   * Expose.
+   *
+   * Since: 0.10.14
+   */
+  g_object_class_install_property (gobject_class, PROP_HANDLE_EXPOSE,
+      g_param_spec_boolean ("handle-expose", "Handle expose",
+          "When enabled, "
+          "the current frame will always be drawn in response to X Expose "
+          "events", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXvImageSink:double-buffer
+   *
+   * Whether to double-buffer the output.
+   *
+   * Since: 0.10.14
+   */
+  g_object_class_install_property (gobject_class, PROP_DOUBLE_BUFFER,
+      g_param_spec_boolean ("double-buffer", "Double-buffer",
+          "Whether to double-buffer the output", TRUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstXvImageSink:autopaint-colorkey
+   *
+   * Whether to autofill overlay with colorkey
+   *
+   * Since: 0.10.21
+   */
+  g_object_class_install_property (gobject_class, PROP_AUTOPAINT_COLORKEY,
+      g_param_spec_boolean ("autopaint-colorkey", "Autofill with colorkey",
+          "Whether to autofill overlay with colorkey", TRUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstXvImageSink:colorkey
+   *
+   * Color to use for the overlay mask.
+   *
+   * Since: 0.10.21
+   */
+  g_object_class_install_property (gobject_class, PROP_COLORKEY,
+      g_param_spec_int ("colorkey", "Colorkey",
+          "Color to use for the overlay mask", G_MININT, G_MAXINT, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXvImageSink:draw-borders
+   *
+   * Draw black borders when using GstXvImageSink:force-aspect-ratio to fill
+   * unused parts of the video area.
+   *
+   * Since: 0.10.21
+   */
+  g_object_class_install_property (gobject_class, PROP_DRAW_BORDERS,
+      g_param_spec_boolean ("draw-borders", "Colorkey",
+          "Draw black borders to fill unused area in force-aspect-ratio mode",
+          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXvImageSink:window-width
+   *
+   * Actual width of the video window.
+   *
+   * Since: 0.10.32
+   */
+  g_object_class_install_property (gobject_class, PROP_WINDOW_WIDTH,
+      g_param_spec_uint64 ("window-width", "window-width",
+          "Width of the window", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstXvImageSink:window-height
+   *
+   * Actual height of the video window.
+   *
+   * Since: 0.10.32
+   */
+  g_object_class_install_property (gobject_class, PROP_WINDOW_HEIGHT,
+      g_param_spec_uint64 ("window-height", "window-height",
+          "Height of the window", 0, G_MAXUINT64, 0,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  gobject_class->finalize = gst_xvimagesink_finalize;
+
+  gst_element_class_set_details_simple (gstelement_class,
+      "Video sink", "Sink/Video",
+      "A Xv based videosink", "Julien Moutte <julien@moutte.net>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_xvimagesink_sink_template_factory));
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_xvimagesink_change_state);
+
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_getcaps);
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_setcaps);
+  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_xvimagesink_get_times);
+  gstbasesink_class->propose_allocation =
+      GST_DEBUG_FUNCPTR (gst_xvimagesink_propose_allocation);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xvimagesink_event);
+
+  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_xvimagesink_show_frame);
+}
diff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h
new file mode 100644
index 0000000..635ab23
--- /dev/null
+++ b/sys/xvimage/xvimagesink.h
@@ -0,0 +1,278 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_XVIMAGESINK_H__
+#define __GST_XVIMAGESINK_H__
+
+#include <gst/video/gstvideosink.h>
+
+#ifdef HAVE_XSHM
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif /* HAVE_XSHM */
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef HAVE_XSHM
+#include <X11/extensions/XShm.h>
+#endif /* HAVE_XSHM */
+
+#include <X11/extensions/Xv.h>
+#include <X11/extensions/Xvlib.h>
+
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_XVIMAGESINK \
+  (gst_xvimagesink_get_type())
+#define GST_XVIMAGESINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XVIMAGESINK, GstXvImageSink))
+#define GST_XVIMAGESINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XVIMAGESINK, GstXvImageSinkClass))
+#define GST_IS_XVIMAGESINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XVIMAGESINK))
+#define GST_IS_XVIMAGESINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XVIMAGESINK))
+typedef struct _GstXContext GstXContext;
+typedef struct _GstXWindow GstXWindow;
+typedef struct _GstXvImageFormat GstXvImageFormat;
+
+typedef struct _GstXvImageSink GstXvImageSink;
+typedef struct _GstXvImageSinkClass GstXvImageSinkClass;
+
+#include "xvimagepool.h"
+
+/*
+ * GstXContext:
+ * @disp: the X11 Display of this context
+ * @screen: the default Screen of Display @disp
+ * @screen_num: the Screen number of @screen
+ * @visual: the default Visual of Screen @screen
+ * @root: the root Window of Display @disp
+ * @white: the value of a white pixel on Screen @screen
+ * @black: the value of a black pixel on Screen @screen
+ * @depth: the color depth of Display @disp
+ * @bpp: the number of bits per pixel on Display @disp
+ * @endianness: the endianness of image bytes on Display @disp
+ * @width: the width in pixels of Display @disp
+ * @height: the height in pixels of Display @disp
+ * @widthmm: the width in millimeters of Display @disp
+ * @heightmm: the height in millimeters of Display @disp
+ * @par: the pixel aspect ratio calculated from @width, @widthmm and @height,
+ * @heightmm ratio
+ * @use_xshm: used to known wether of not XShm extension is usable or not even
+ * if the Extension is present
+ * @xv_port_id: the XVideo port ID
+ * @im_format: used to store at least a valid format for XShm calls checks
+ * @formats_list: list of supported image formats on @xv_port_id
+ * @channels_list: list of #GstColorBalanceChannels
+ * @caps: the #GstCaps that Display @disp can accept
+ *
+ * Structure used to store various informations collected/calculated for a
+ * Display.
+ */
+struct _GstXContext
+{
+  Display *disp;
+
+  Screen *screen;
+  gint screen_num;
+
+  Visual *visual;
+
+  Window root;
+
+  gulong white, black;
+
+  gint depth;
+  gint bpp;
+  gint endianness;
+
+  gint width, height;
+  gint widthmm, heightmm;
+  GValue *par;                  /* calculated pixel aspect ratio */
+
+  gboolean use_xshm;
+
+  XvPortID xv_port_id;
+  guint nb_adaptors;
+  gchar **adaptors;
+  gint im_format;
+
+  GList *formats_list;
+  GList *channels_list;
+
+  GstCaps *caps;
+
+  /* Optimisation storage for buffer_alloc return */
+  GstCaps *last_caps;
+  gint last_format;
+  gint last_width;
+  gint last_height;
+};
+
+/*
+ * GstXWindow:
+ * @win: the Window ID of this X11 window
+ * @width: the width in pixels of Window @win
+ * @height: the height in pixels of Window @win
+ * @internal: used to remember if Window @win was created internally or passed
+ * through the #GstXOverlay interface
+ * @gc: the Graphical Context of Window @win
+ *
+ * Structure used to store informations about a Window.
+ */
+struct _GstXWindow
+{
+  Window win;
+  gint width, height;
+  gboolean internal;
+  GC gc;
+};
+
+/**
+ * GstXvImageFormat:
+ * @format: the image format
+ * @caps: generated #GstCaps for this image format
+ *
+ * Structure storing image format to #GstCaps association.
+ */
+struct _GstXvImageFormat
+{
+  gint format;
+  GstVideoFormat vformat;
+  GstCaps *caps;
+};
+
+
+/**
+ * GstXvImageSink:
+ * @display_name: the name of the Display we want to render to
+ * @xcontext: our instance's #GstXContext
+ * @xwindow: the #GstXWindow we are rendering to
+ * @cur_image: a reference to the last #GstXvImage that was put to @xwindow. It
+ * is used when Expose events are received to redraw the latest video frame
+ * @event_thread: a thread listening for events on @xwindow and handling them
+ * @running: used to inform @event_thread if it should run/shutdown
+ * @fps_n: the framerate fraction numerator
+ * @fps_d: the framerate fraction denominator
+ * @x_lock: used to protect X calls as we are not using the XLib in threaded
+ * mode
+ * @flow_lock: used to protect data flow routines from external calls such as
+ * events from @event_thread or methods from the #GstXOverlay interface
+ * @par: used to override calculated pixel aspect ratio from @xcontext
+ * @pool_lock: used to protect the buffer pool
+ * @image_pool: a list of #GstXvImageBuffer that could be reused at next buffer
+ * allocation call
+ * @synchronous: used to store if XSynchronous should be used or not (for
+ * debugging purpose only)
+ * @keep_aspect: used to remember if reverse negotiation scaling should respect
+ * aspect ratio
+ * @handle_events: used to know if we should handle select XEvents or not
+ * @brightness: used to store the user settings for color balance brightness
+ * @contrast: used to store the user settings for color balance contrast
+ * @hue: used to store the user settings for color balance hue
+ * @saturation: used to store the user settings for color balance saturation
+ * @cb_changed: used to store if the color balance settings where changed
+ * @video_width: the width of incoming video frames in pixels
+ * @video_height: the height of incoming video frames in pixels
+ *
+ * The #GstXvImageSink data structure.
+ */
+struct _GstXvImageSink
+{
+  /* Our element stuff */
+  GstVideoSink videosink;
+
+  char *display_name;
+  guint adaptor_no;
+
+  GstXContext *xcontext;
+  GstXWindow *xwindow;
+  GstBuffer *cur_image;
+
+  GThread *event_thread;
+  gboolean running;
+
+  GstVideoInfo info;
+
+  /* Framerate numerator and denominator */
+  gint fps_n;
+  gint fps_d;
+
+  GMutex *x_lock;
+  GMutex *flow_lock;
+
+  /* object-set pixel aspect ratio */
+  GValue *par;
+
+  /* the buffer pool */
+  GstBufferPool *pool;
+
+  gboolean synchronous;
+  gboolean double_buffer;
+  gboolean keep_aspect;
+  gboolean redraw_border;
+  gboolean handle_events;
+  gboolean handle_expose;
+
+  gint brightness;
+  gint contrast;
+  gint hue;
+  gint saturation;
+  gboolean cb_changed;
+
+  /* size of incoming video, used as the size for XvImage */
+  guint video_width, video_height;
+
+  /* port attributes */
+  gboolean autopaint_colorkey;
+  gint colorkey;
+
+  gboolean draw_borders;
+
+  /* port features */
+  gboolean have_autopaint_colorkey;
+  gboolean have_colorkey;
+  gboolean have_double_buffer;
+
+  /* stream metadata */
+  gchar *media_title;
+
+  /* target video rectagle */
+  GstVideoRectangle render_rect;
+  gboolean have_render_rect;
+};
+
+struct _GstXvImageSinkClass
+{
+  GstVideoSinkClass parent_class;
+};
+
+GType gst_xvimagesink_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_XVIMAGESINK_H__ */
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..de36755
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,28 @@
+if BUILD_EXAMPLES
+SUBDIRS_EXAMPLES = examples
+else
+SUBDIRS_EXAMPLES =
+endif
+
+if HAVE_GST_CHECK
+SUBDIRS_CHECK = check
+else
+SUBDIRS_CHECK =
+endif
+
+if USE_X
+SUBDIRS_ICLES = icles
+else
+SUBDIRS_ICLES =
+endif
+
+SUBDIRS = 			\
+	$(SUBDIRS_CHECK)	\
+	$(SUBDIRS_EXAMPLES)	\
+	$(SUBDIRS_ICLES)
+
+DIST_SUBDIRS = 			\
+	check			\
+	examples		\
+	files			\
+	icles
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..7fadea3
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,774 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@BUILD_EXAMPLES_FALSE@SUBDIRS_EXAMPLES = 
+@BUILD_EXAMPLES_TRUE@SUBDIRS_EXAMPLES = examples
+@HAVE_GST_CHECK_FALSE@SUBDIRS_CHECK = 
+@HAVE_GST_CHECK_TRUE@SUBDIRS_CHECK = check
+@USE_X_FALSE@SUBDIRS_ICLES = 
+@USE_X_TRUE@SUBDIRS_ICLES = icles
+SUBDIRS = \
+	$(SUBDIRS_CHECK)	\
+	$(SUBDIRS_EXAMPLES)	\
+	$(SUBDIRS_ICLES)
+
+DIST_SUBDIRS = \
+	check			\
+	examples		\
+	files			\
+	icles
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
new file mode 100644
index 0000000..530d61a
--- /dev/null
+++ b/tests/check/Makefile.am
@@ -0,0 +1,527 @@
+include $(top_srcdir)/common/check.mak
+
+CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg
+TEST_FILES_DIRECTORY = $(top_srcdir)/tests/files
+
+REGISTRY_ENVIRONMENT = \
+	GST_REGISTRY=$(CHECK_REGISTRY)
+
+TESTS_ENVIRONMENT = \
+        CK_DEFAULT_TIMEOUT=120                                  \
+        GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)"	\
+	$(REGISTRY_ENVIRONMENT)					\
+	GST_PLUGIN_SYSTEM_PATH=					\
+	GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_DIR) \
+	GST_PLUGIN_LOADING_WHITELIST="gstreamer:gst-plugins-base@$(top_builddir)" \
+	GST_TAG_LICENSE_TRANSLATIONS_DICT="$(top_srcdir)/gst-libs/gst/tag/license-translations.dict"
+
+
+# ths core dumps of some machines have PIDs appended
+CLEANFILES = core.* test-registry.*
+
+clean-local: clean-local-check clean-local-orc
+
+$(CHECK_REGISTRY):
+	$(TESTS_ENVIRONMENT)
+
+# elements to ignore for the state tests
+STATE_IGNORE_ELEMENTS = cdio cdparanoiasrc libvisual_ alsasrc alsamixer alsasink
+
+TESTS = $(check_PROGRAMS)
+
+if USE_ALSA
+check_alsa = elements/alsa
+else
+check_alsa =
+endif
+
+if USE_GIO
+check_gio = pipelines/gio
+else
+check_gio =
+endif
+
+if USE_LIBVISUAL
+check_libvisual = elements/libvisual
+else
+check_libvisual =
+endif
+
+if USE_OGG
+check_ogg = pipelines/oggmux
+else
+check_ogg =
+endif
+
+if USE_PANGO
+check_pango = elements/textoverlay
+else
+check_pango =
+endif
+
+if USE_VORBIS
+check_vorbis = elements/vorbisdec pipelines/vorbisenc pipelines/vorbisdec \
+	elements/vorbistag
+else
+check_vorbis =
+endif
+
+if USE_THEORA
+check_theora = pipelines/theoraenc
+else
+check_theora =
+endif
+
+if USE_VORBIS
+if USE_THEORA
+check_encodebin = elements/encodebin
+else
+check_encodebin =
+endif
+else
+check_encodebin =
+endif
+
+if USE_PLUGIN_SUBPARSE
+check_subparse = elements/subparse
+else
+check_subparse =
+endif
+
+if HAVE_ORC
+check_orc = orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc
+else
+check_orc =
+endif
+
+if HAVE_CXX
+cxx_checks = libs/gstlibscpp
+else
+cxx_checks =
+endif
+
+# FIXME 0.11: convert elements/ffmpegcolorspace to videoconvert or remove
+
+check_PROGRAMS = \
+	$(check_alsa) \
+	$(check_gio) \
+	$(check_ogg) \
+	$(check_vorbis) \
+	elements/audioconvert \
+	elements/audiotestsrc \
+	elements/decodebin \
+	$(check_encodebin) \
+	generic/clock-selection \
+	generic/states \
+	gst/typefindfunctions \
+	libs/libsabi \
+	libs/audio \
+	libs/cddabasesrc \
+	libs/discoverer \
+	libs/fft \
+	libs/mixer \
+	libs/navigation \
+	libs/netbuffer \
+	libs/pbutils \
+	libs/profile \
+	libs/rtp \
+	libs/rtsp \
+	libs/tag \
+	libs/video \
+	libs/xmpwriter \
+	$(cxx_checks) \
+	$(check_orc) \
+	pipelines/simple-launch-lines
+
+# TORTURE_TO_FIX = \
+#       elements/adder
+
+# videoconvert takes too long, so disabled for now
+VALGRIND_TO_FIX = \
+	elements/videoconvert \
+	libs/video
+
+# FIXME 0.11: these tests don't even build at the moment
+ZERO_11_TO_PORT = \
+	pipelines/streamheader \
+	pipelines/basetime \
+	pipelines/capsfilter-renegotiation \
+	elements/appsink            \
+	elements/appsrc             \
+	elements/audiorate          \
+	elements/audioresample      \
+	elements/gdpdepay           \
+	elements/gdppay             \
+	elements/multifdsink        \
+	elements/playbin            \
+	elements/playbin-compressed \
+	$(check_pango)              \
+	$(check_subparse)           \
+	elements/videorate          \
+	elements/videoscale         \
+	elements/videotestsrc       \
+	elements/volume
+
+# FIXME 0.11: these tests don't pass at the moment
+ZERO_11_TO_FIX = \
+	elements/adder	       \
+	$(check_theora)
+
+# these tests don't even pass
+noinst_PROGRAMS = $(check_libvisual) $(ZERO_11_TO_FIX)
+
+noinst_HEADERS = \
+	libs/struct_arm.h     \
+	libs/struct_i386.h     \
+	libs/struct_i386_osx.h \
+	libs/struct_x86_64.h
+
+AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) $(GST_CHECK_CFLAGS) \
+	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \
+	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+LDADD = $(GST_LIBS) $(GST_CHECK_LIBS)
+
+# valgrind testing
+VALGRIND_TESTS_DISABLE = $(VALGRIND_TO_FIX)
+
+SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-base.supp
+
+libs_libsabi_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_libsabi_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_audio_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_audio_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_cddabasesrc_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_cddabasesrc_LDADD = \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_discoverer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	-DGST_TEST_FILE="\"$(abs_top_srcdir)/tests/files/partialframe.mjpeg\""
+libs_discoverer_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_fft_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_fft_LDADD = \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_mixer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_mixer_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+libs_navigation_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_navigation_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+libs_netbuffer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_netbuffer_LDADD = \
+	$(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+libs_rtp_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_rtp_LDADD = \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_rtsp_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_rtsp_LDADD = \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_tag_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_tag_LDADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_pbutils_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_pbutils_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_profile_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+libs_profile_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la $(LDADD)
+
+libs_xmpwriter_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_xmpwriter_LDADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+
+libs_gstlibscpp_SOURCES = libs/gstlibscpp.cc
+
+elements_appsink_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_appsink_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_appsrc_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_appsrc_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_alsa_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_alsa_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_audioconvert_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_audioconvert_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_audiorate_LDADD =  $(LDADD)
+elements_audiorate_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+
+elements_libvisual_LDADD =  $(LDADD)
+elements_libvisual_CFLAGS = $(CFLAGS) $(AM_CFLAGS)
+
+elements_gdpdepay_LDADD = $(GST_GDP_LIBS) $(LDADD)
+elements_gdppay_LDADD = $(GST_GDP_LIBS) $(LDADD)
+
+elements_playbin_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_playbin_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_playbin_compressed_LDADD = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la $(GST_BASE_LIBS) $(LDADD)
+elements_playbin_compressed_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_decodebin_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_decodebin_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_encodebin_LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la $(GST_BASE_LIBS) $(LDADD)
+elements_encodebin_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_subparse_LDADD =  $(LDADD)
+elements_subparse_CFLAGS = $(CFLAGS) $(AM_CFLAGS)
+
+elements_audioresample_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_audioresample_LDADD = \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_textoverlay_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_textoverlay_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+
+elements_volume_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_volume_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CONTROLLER_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_vorbisdec_LDADD = \
+	$(LDADD) \
+	$(VORBIS_LIBS) \
+	$(VORBISENC_LIBS)
+
+elements_vorbisdec_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	$(VORBIS_CFLAGS) \
+	$(CFLAGS)
+
+elements_vorbistag_LDADD = \
+	$(LDADD) \
+	$(VORBIS_LIBS) \
+	$(VORBISENC_LIBS)
+
+elements_vorbistag_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	$(VORBIS_CFLAGS) \
+	$(CFLAGS)
+
+elements_videoscale_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+elements_videoscale_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+gst_typefindfunctions_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+gst_typefindfunctions_LDADD = $(GST_BASE_LIBS) $(LDADD)
+
+libs_video_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_video_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
+pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD)
+
+pipelines_vorbisenc_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+# this seemingly useless CFLAGS line is here only to avoid
+# vorbisdec.$(OBJEXT) by triggering creation of pipelines_vorbisdec.$(OBJEXT)
+# instead
+pipelines_vorbisdec_CFLAGS = $(AM_CFLAGS)
+
+pipelines_oggmux_LDADD = $(LDADD) $(OGG_LIBS)
+pipelines_oggmux_CFLAGS = $(AM_CFLAGS) $(OGG_CFLAGS)
+
+pipelines_theoraenc_CFLAGS = $(AM_CFLAGS) $(THEORA_CFLAGS)
+pipelines_theoraenc_LDADD = $(LDADD) $(THEORA_LIBS)
+
+pipelines_simple_launch_lines_CFLAGS = \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+pipelines_simple_launch_lines_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+orc_adder_CFLAGS = $(ORC_CFLAGS)
+orc_adder_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_adder_SOURCES = orc/adder.c
+orc_audioconvert_CFLAGS = $(ORC_CFLAGS)
+orc_audioconvert_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_audioconvert_SOURCES = orc/audioconvert.c
+orc_volume_CFLAGS = $(ORC_CFLAGS)
+orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_volume_SOURCES = orc/volume.c
+orc_videoscale_CFLAGS = $(ORC_CFLAGS)
+orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_videoscale_SOURCES = orc/videoscale.c
+orc_videotestsrc_CFLAGS = $(ORC_CFLAGS)
+orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c
+
+orc/adder.c: $(top_srcdir)/gst/adder/gstadderorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/audioconvert.c: $(top_srcdir)/gst/audioconvert/gstaudioconvertorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/volume.c: $(top_srcdir)/gst/volume/gstvolumeorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+
+clean-local-orc:
+	rm -rf orc
+
+EXTRA_DIST = gst-plugins-base.supp
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
new file mode 100644
index 0000000..96ec42d
--- /dev/null
+++ b/tests/check/Makefile.in
@@ -0,0 +1,2610 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/common/check.mak
+check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+	$(am__EXEEXT_4) elements/audioconvert$(EXEEXT) \
+	elements/audiotestsrc$(EXEEXT) elements/decodebin$(EXEEXT) \
+	$(am__EXEEXT_5) generic/clock-selection$(EXEEXT) \
+	generic/states$(EXEEXT) gst/typefindfunctions$(EXEEXT) \
+	libs/libsabi$(EXEEXT) libs/audio$(EXEEXT) \
+	libs/cddabasesrc$(EXEEXT) libs/discoverer$(EXEEXT) \
+	libs/fft$(EXEEXT) libs/mixer$(EXEEXT) libs/navigation$(EXEEXT) \
+	libs/netbuffer$(EXEEXT) libs/pbutils$(EXEEXT) \
+	libs/profile$(EXEEXT) libs/rtp$(EXEEXT) libs/rtsp$(EXEEXT) \
+	libs/tag$(EXEEXT) libs/video$(EXEEXT) libs/xmpwriter$(EXEEXT) \
+	$(am__EXEEXT_6) $(am__EXEEXT_7) \
+	pipelines/simple-launch-lines$(EXEEXT)
+noinst_PROGRAMS = $(am__EXEEXT_8) $(am__EXEEXT_10)
+subdir = tests/check
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@USE_ALSA_TRUE@am__EXEEXT_1 = elements/alsa$(EXEEXT)
+@USE_GIO_TRUE@am__EXEEXT_2 = pipelines/gio$(EXEEXT)
+@USE_OGG_TRUE@am__EXEEXT_3 = pipelines/oggmux$(EXEEXT)
+@USE_VORBIS_TRUE@am__EXEEXT_4 = elements/vorbisdec$(EXEEXT) \
+@USE_VORBIS_TRUE@	pipelines/vorbisenc$(EXEEXT) \
+@USE_VORBIS_TRUE@	pipelines/vorbisdec$(EXEEXT) \
+@USE_VORBIS_TRUE@	elements/vorbistag$(EXEEXT)
+@USE_THEORA_TRUE@@USE_VORBIS_TRUE@am__EXEEXT_5 =  \
+@USE_THEORA_TRUE@@USE_VORBIS_TRUE@	elements/encodebin$(EXEEXT)
+@HAVE_CXX_TRUE@am__EXEEXT_6 = libs/gstlibscpp$(EXEEXT)
+@HAVE_ORC_TRUE@am__EXEEXT_7 = orc/adder$(EXEEXT) \
+@HAVE_ORC_TRUE@	orc/audioconvert$(EXEEXT) orc/volume$(EXEEXT) \
+@HAVE_ORC_TRUE@	orc/videoscale$(EXEEXT) \
+@HAVE_ORC_TRUE@	orc/videotestsrc$(EXEEXT)
+@USE_LIBVISUAL_TRUE@am__EXEEXT_8 = elements/libvisual$(EXEEXT)
+@USE_THEORA_TRUE@am__EXEEXT_9 = pipelines/theoraenc$(EXEEXT)
+am__EXEEXT_10 = elements/adder$(EXEEXT) $(am__EXEEXT_9)
+PROGRAMS = $(noinst_PROGRAMS)
+elements_adder_SOURCES = elements/adder.c
+elements_adder_OBJECTS = adder.$(OBJEXT)
+elements_adder_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+elements_adder_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__dirstamp = $(am__leading_dot)dirstamp
+elements_alsa_SOURCES = elements/alsa.c
+elements_alsa_OBJECTS = elements_alsa-alsa.$(OBJEXT)
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+elements_alsa_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_2)
+elements_alsa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_alsa_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+elements_audioconvert_SOURCES = elements/audioconvert.c
+elements_audioconvert_OBJECTS =  \
+	elements_audioconvert-audioconvert.$(OBJEXT)
+elements_audioconvert_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_audioconvert_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_audioconvert_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_audiotestsrc_SOURCES = elements/audiotestsrc.c
+elements_audiotestsrc_OBJECTS = audiotestsrc.$(OBJEXT)
+elements_audiotestsrc_LDADD = $(LDADD)
+elements_audiotestsrc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+elements_decodebin_SOURCES = elements/decodebin.c
+elements_decodebin_OBJECTS = elements_decodebin-decodebin.$(OBJEXT)
+elements_decodebin_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+elements_decodebin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_decodebin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_encodebin_SOURCES = elements/encodebin.c
+elements_encodebin_OBJECTS = elements_encodebin-encodebin.$(OBJEXT)
+elements_encodebin_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_encodebin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_encodebin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_libvisual_SOURCES = elements/libvisual.c
+elements_libvisual_OBJECTS = elements_libvisual-libvisual.$(OBJEXT)
+elements_libvisual_DEPENDENCIES = $(am__DEPENDENCIES_2)
+elements_libvisual_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_libvisual_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_vorbisdec_SOURCES = elements/vorbisdec.c
+elements_vorbisdec_OBJECTS = elements_vorbisdec-vorbisdec.$(OBJEXT)
+elements_vorbisdec_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+elements_vorbisdec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_vorbisdec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+elements_vorbistag_SOURCES = elements/vorbistag.c
+elements_vorbistag_OBJECTS = elements_vorbistag-vorbistag.$(OBJEXT)
+elements_vorbistag_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+elements_vorbistag_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_vorbistag_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+generic_clock_selection_SOURCES = generic/clock-selection.c
+generic_clock_selection_OBJECTS = clock-selection.$(OBJEXT)
+generic_clock_selection_LDADD = $(LDADD)
+generic_clock_selection_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+generic_states_SOURCES = generic/states.c
+generic_states_OBJECTS = states.$(OBJEXT)
+generic_states_LDADD = $(LDADD)
+generic_states_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+gst_typefindfunctions_SOURCES = gst/typefindfunctions.c
+gst_typefindfunctions_OBJECTS =  \
+	gst_typefindfunctions-typefindfunctions.$(OBJEXT)
+gst_typefindfunctions_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+gst_typefindfunctions_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(gst_typefindfunctions_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+libs_audio_SOURCES = libs/audio.c
+libs_audio_OBJECTS = libs_audio-audio.$(OBJEXT)
+libs_audio_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_audio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_audio_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_cddabasesrc_SOURCES = libs/cddabasesrc.c
+libs_cddabasesrc_OBJECTS = libs_cddabasesrc-cddabasesrc.$(OBJEXT)
+libs_cddabasesrc_DEPENDENCIES = $(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_cddabasesrc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_cddabasesrc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+libs_discoverer_SOURCES = libs/discoverer.c
+libs_discoverer_OBJECTS = libs_discoverer-discoverer.$(OBJEXT)
+libs_discoverer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_discoverer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_discoverer_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+libs_fft_SOURCES = libs/fft.c
+libs_fft_OBJECTS = libs_fft-fft.$(OBJEXT)
+libs_fft_DEPENDENCIES = $(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_fft_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_fft_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_libs_gstlibscpp_OBJECTS = gstlibscpp.$(OBJEXT)
+libs_gstlibscpp_OBJECTS = $(am_libs_gstlibscpp_OBJECTS)
+libs_gstlibscpp_LDADD = $(LDADD)
+libs_gstlibscpp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+libs_libsabi_SOURCES = libs/libsabi.c
+libs_libsabi_OBJECTS = libs_libsabi-libsabi.$(OBJEXT)
+libs_libsabi_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_libsabi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_libsabi_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_mixer_SOURCES = libs/mixer.c
+libs_mixer_OBJECTS = libs_mixer-mixer.$(OBJEXT)
+libs_mixer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_mixer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_mixer_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_navigation_SOURCES = libs/navigation.c
+libs_navigation_OBJECTS = libs_navigation-navigation.$(OBJEXT)
+libs_navigation_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_navigation_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_navigation_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+libs_netbuffer_SOURCES = libs/netbuffer.c
+libs_netbuffer_OBJECTS = libs_netbuffer-netbuffer.$(OBJEXT)
+libs_netbuffer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_2)
+libs_netbuffer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_netbuffer_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+libs_pbutils_SOURCES = libs/pbutils.c
+libs_pbutils_OBJECTS = libs_pbutils-pbutils.$(OBJEXT)
+libs_pbutils_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_pbutils_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_pbutils_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_profile_SOURCES = libs/profile.c
+libs_profile_OBJECTS = libs_profile-profile.$(OBJEXT)
+libs_profile_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_2)
+libs_profile_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_profile_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_rtp_SOURCES = libs/rtp.c
+libs_rtp_OBJECTS = libs_rtp-rtp.$(OBJEXT)
+libs_rtp_DEPENDENCIES = $(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_rtp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_rtp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_rtsp_SOURCES = libs/rtsp.c
+libs_rtsp_OBJECTS = libs_rtsp-rtsp.$(OBJEXT)
+libs_rtsp_DEPENDENCIES = $(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_rtsp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_rtsp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_tag_SOURCES = libs/tag.c
+libs_tag_OBJECTS = libs_tag-tag.$(OBJEXT)
+libs_tag_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_tag_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_tag_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_video_SOURCES = libs/video.c
+libs_video_OBJECTS = libs_video-video.$(OBJEXT)
+libs_video_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_video_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_video_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_xmpwriter_SOURCES = libs/xmpwriter.c
+libs_xmpwriter_OBJECTS = libs_xmpwriter-xmpwriter.$(OBJEXT)
+libs_xmpwriter_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_xmpwriter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_xmpwriter_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+nodist_orc_adder_OBJECTS = orc_adder-adder.$(OBJEXT)
+orc_adder_OBJECTS = $(nodist_orc_adder_OBJECTS)
+orc_adder_DEPENDENCIES = $(am__DEPENDENCIES_1)
+orc_adder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(orc_adder_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+nodist_orc_audioconvert_OBJECTS =  \
+	orc_audioconvert-audioconvert.$(OBJEXT)
+orc_audioconvert_OBJECTS = $(nodist_orc_audioconvert_OBJECTS)
+orc_audioconvert_DEPENDENCIES = $(am__DEPENDENCIES_1)
+orc_audioconvert_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(orc_audioconvert_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+nodist_orc_videoscale_OBJECTS = orc_videoscale-videoscale.$(OBJEXT)
+orc_videoscale_OBJECTS = $(nodist_orc_videoscale_OBJECTS)
+orc_videoscale_DEPENDENCIES = $(am__DEPENDENCIES_1)
+orc_videoscale_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(orc_videoscale_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+nodist_orc_videotestsrc_OBJECTS =  \
+	orc_videotestsrc-videotestsrc.$(OBJEXT)
+orc_videotestsrc_OBJECTS = $(nodist_orc_videotestsrc_OBJECTS)
+orc_videotestsrc_DEPENDENCIES = $(am__DEPENDENCIES_1)
+orc_videotestsrc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(orc_videotestsrc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+nodist_orc_volume_OBJECTS = orc_volume-volume.$(OBJEXT)
+orc_volume_OBJECTS = $(nodist_orc_volume_OBJECTS)
+orc_volume_DEPENDENCIES = $(am__DEPENDENCIES_1)
+orc_volume_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(orc_volume_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+pipelines_gio_SOURCES = pipelines/gio.c
+pipelines_gio_OBJECTS = pipelines_gio-gio.$(OBJEXT)
+pipelines_gio_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+pipelines_gio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(pipelines_gio_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+pipelines_oggmux_SOURCES = pipelines/oggmux.c
+pipelines_oggmux_OBJECTS = pipelines_oggmux-oggmux.$(OBJEXT)
+pipelines_oggmux_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
+pipelines_oggmux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(pipelines_oggmux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+pipelines_simple_launch_lines_SOURCES =  \
+	pipelines/simple-launch-lines.c
+pipelines_simple_launch_lines_OBJECTS =  \
+	pipelines_simple_launch_lines-simple-launch-lines.$(OBJEXT)
+pipelines_simple_launch_lines_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+pipelines_simple_launch_lines_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+pipelines_theoraenc_SOURCES = pipelines/theoraenc.c
+pipelines_theoraenc_OBJECTS = pipelines_theoraenc-theoraenc.$(OBJEXT)
+pipelines_theoraenc_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
+pipelines_theoraenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(pipelines_theoraenc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+pipelines_vorbisdec_SOURCES = pipelines/vorbisdec.c
+pipelines_vorbisdec_OBJECTS = pipelines_vorbisdec-vorbisdec.$(OBJEXT)
+pipelines_vorbisdec_LDADD = $(LDADD)
+pipelines_vorbisdec_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+pipelines_vorbisdec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(pipelines_vorbisdec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+pipelines_vorbisenc_SOURCES = pipelines/vorbisenc.c
+pipelines_vorbisenc_OBJECTS = pipelines_vorbisenc-vorbisenc.$(OBJEXT)
+pipelines_vorbisenc_LDADD = $(LDADD)
+pipelines_vorbisenc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+pipelines_vorbisenc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(pipelines_vorbisenc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = elements/adder.c elements/alsa.c elements/audioconvert.c \
+	elements/audiotestsrc.c elements/decodebin.c \
+	elements/encodebin.c elements/libvisual.c elements/vorbisdec.c \
+	elements/vorbistag.c generic/clock-selection.c \
+	generic/states.c gst/typefindfunctions.c libs/audio.c \
+	libs/cddabasesrc.c libs/discoverer.c libs/fft.c \
+	$(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/mixer.c \
+	libs/navigation.c libs/netbuffer.c libs/pbutils.c \
+	libs/profile.c libs/rtp.c libs/rtsp.c libs/tag.c libs/video.c \
+	libs/xmpwriter.c $(nodist_orc_adder_SOURCES) \
+	$(nodist_orc_audioconvert_SOURCES) \
+	$(nodist_orc_videoscale_SOURCES) \
+	$(nodist_orc_videotestsrc_SOURCES) \
+	$(nodist_orc_volume_SOURCES) pipelines/gio.c \
+	pipelines/oggmux.c pipelines/simple-launch-lines.c \
+	pipelines/theoraenc.c pipelines/vorbisdec.c \
+	pipelines/vorbisenc.c
+DIST_SOURCES = elements/adder.c elements/alsa.c \
+	elements/audioconvert.c elements/audiotestsrc.c \
+	elements/decodebin.c elements/encodebin.c elements/libvisual.c \
+	elements/vorbisdec.c elements/vorbistag.c \
+	generic/clock-selection.c generic/states.c \
+	gst/typefindfunctions.c libs/audio.c libs/cddabasesrc.c \
+	libs/discoverer.c libs/fft.c $(libs_gstlibscpp_SOURCES) \
+	libs/libsabi.c libs/mixer.c libs/navigation.c libs/netbuffer.c \
+	libs/pbutils.c libs/profile.c libs/rtp.c libs/rtsp.c \
+	libs/tag.c libs/video.c libs/xmpwriter.c pipelines/gio.c \
+	pipelines/oggmux.c pipelines/simple-launch-lines.c \
+	pipelines/theoraenc.c pipelines/vorbisdec.c \
+	pipelines/vorbisenc.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LOOPS = 10
+
+# inspect every plugin feature
+GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_MAJORMINOR)
+CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg
+TEST_FILES_DIRECTORY = $(top_srcdir)/tests/files
+REGISTRY_ENVIRONMENT = \
+	GST_REGISTRY=$(CHECK_REGISTRY)
+
+TESTS_ENVIRONMENT = \
+        CK_DEFAULT_TIMEOUT=120                                  \
+        GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)"	\
+	$(REGISTRY_ENVIRONMENT)					\
+	GST_PLUGIN_SYSTEM_PATH=					\
+	GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_DIR) \
+	GST_PLUGIN_LOADING_WHITELIST="gstreamer:gst-plugins-base@$(top_builddir)" \
+	GST_TAG_LICENSE_TRANSLATIONS_DICT="$(top_srcdir)/gst-libs/gst/tag/license-translations.dict"
+
+
+# ths core dumps of some machines have PIDs appended
+CLEANFILES = core.* test-registry.*
+
+# elements to ignore for the state tests
+STATE_IGNORE_ELEMENTS = cdio cdparanoiasrc libvisual_ alsasrc alsamixer alsasink
+TESTS = $(check_PROGRAMS)
+@USE_ALSA_FALSE@check_alsa = 
+@USE_ALSA_TRUE@check_alsa = elements/alsa
+@USE_GIO_FALSE@check_gio = 
+@USE_GIO_TRUE@check_gio = pipelines/gio
+@USE_LIBVISUAL_FALSE@check_libvisual = 
+@USE_LIBVISUAL_TRUE@check_libvisual = elements/libvisual
+@USE_OGG_FALSE@check_ogg = 
+@USE_OGG_TRUE@check_ogg = pipelines/oggmux
+@USE_PANGO_FALSE@check_pango = 
+@USE_PANGO_TRUE@check_pango = elements/textoverlay
+@USE_VORBIS_FALSE@check_vorbis = 
+@USE_VORBIS_TRUE@check_vorbis = elements/vorbisdec pipelines/vorbisenc pipelines/vorbisdec \
+@USE_VORBIS_TRUE@	elements/vorbistag
+
+@USE_THEORA_FALSE@check_theora = 
+@USE_THEORA_TRUE@check_theora = pipelines/theoraenc
+@USE_THEORA_FALSE@@USE_VORBIS_TRUE@check_encodebin = 
+@USE_THEORA_TRUE@@USE_VORBIS_TRUE@check_encodebin = elements/encodebin
+@USE_VORBIS_FALSE@check_encodebin = 
+@USE_PLUGIN_SUBPARSE_FALSE@check_subparse = 
+@USE_PLUGIN_SUBPARSE_TRUE@check_subparse = elements/subparse
+@HAVE_ORC_FALSE@check_orc = 
+@HAVE_ORC_TRUE@check_orc = orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc
+@HAVE_CXX_FALSE@cxx_checks = 
+@HAVE_CXX_TRUE@cxx_checks = libs/gstlibscpp
+
+# TORTURE_TO_FIX = \
+#       elements/adder
+
+# videoconvert takes too long, so disabled for now
+VALGRIND_TO_FIX = \
+	elements/videoconvert \
+	libs/video
+
+
+# FIXME 0.11: these tests don't even build at the moment
+ZERO_11_TO_PORT = \
+	pipelines/streamheader \
+	pipelines/basetime \
+	pipelines/capsfilter-renegotiation \
+	elements/appsink            \
+	elements/appsrc             \
+	elements/audiorate          \
+	elements/audioresample      \
+	elements/gdpdepay           \
+	elements/gdppay             \
+	elements/multifdsink        \
+	elements/playbin            \
+	elements/playbin-compressed \
+	$(check_pango)              \
+	$(check_subparse)           \
+	elements/videorate          \
+	elements/videoscale         \
+	elements/videotestsrc       \
+	elements/volume
+
+
+# FIXME 0.11: these tests don't pass at the moment
+ZERO_11_TO_FIX = \
+	elements/adder	       \
+	$(check_theora)
+
+noinst_HEADERS = \
+	libs/struct_arm.h     \
+	libs/struct_i386.h     \
+	libs/struct_i386_osx.h \
+	libs/struct_x86_64.h
+
+AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_CFLAGS) $(GST_CHECK_CFLAGS) \
+	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+
+AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
+	$(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \
+	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+
+LDADD = $(GST_LIBS) $(GST_CHECK_LIBS)
+
+# valgrind testing
+VALGRIND_TESTS_DISABLE = $(VALGRIND_TO_FIX)
+SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-base.supp
+libs_libsabi_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_libsabi_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_audio_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_audio_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_cddabasesrc_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_cddabasesrc_LDADD = \
+	$(top_builddir)/gst-libs/gst/cdda/libgstcdda-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_discoverer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	-DGST_TEST_FILE="\"$(abs_top_srcdir)/tests/files/partialframe.mjpeg\""
+
+libs_discoverer_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_fft_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_fft_LDADD = \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+libs_mixer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_mixer_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+libs_navigation_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_navigation_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+libs_netbuffer_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_netbuffer_LDADD = \
+	$(top_builddir)/gst-libs/gst/netbuffer/libgstnetbuffer-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+libs_rtp_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_rtp_LDADD = \
+	$(top_builddir)/gst-libs/gst/rtp/libgstrtp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_rtsp_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_rtsp_LDADD = \
+	$(top_builddir)/gst-libs/gst/rtsp/libgstrtsp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_tag_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_tag_LDADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_pbutils_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_pbutils_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+libs_profile_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_profile_LDADD = \
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la $(LDADD)
+
+libs_xmpwriter_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+libs_xmpwriter_LDADD = \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+        $(GST_BASE_LIBS) \
+        $(LDADD)
+
+libs_gstlibscpp_SOURCES = libs/gstlibscpp.cc
+elements_appsink_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_appsink_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_appsrc_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_appsrc_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_alsa_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_alsa_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(LDADD)
+
+elements_audioconvert_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_audioconvert_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_audiorate_LDADD = $(LDADD)
+elements_audiorate_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+elements_libvisual_LDADD = $(LDADD)
+elements_libvisual_CFLAGS = $(CFLAGS) $(AM_CFLAGS)
+elements_gdpdepay_LDADD = $(GST_GDP_LIBS) $(LDADD)
+elements_gdppay_LDADD = $(GST_GDP_LIBS) $(LDADD)
+elements_playbin_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_playbin_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_playbin_compressed_LDADD = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la $(GST_BASE_LIBS) $(LDADD)
+elements_playbin_compressed_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_decodebin_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_decodebin_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_encodebin_LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la $(GST_BASE_LIBS) $(LDADD)
+elements_encodebin_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_subparse_LDADD = $(LDADD)
+elements_subparse_CFLAGS = $(CFLAGS) $(AM_CFLAGS)
+elements_audioresample_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_audioresample_LDADD = \
+	$(top_builddir)/gst-libs/gst/fft/libgstfft-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_textoverlay_LDADD = $(GST_BASE_LIBS) $(LDADD)
+elements_textoverlay_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_volume_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_CONTROLLER_LIBS) \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+elements_volume_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CONTROLLER_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_vorbisdec_LDADD = \
+	$(LDADD) \
+	$(VORBIS_LIBS) \
+	$(VORBISENC_LIBS)
+
+elements_vorbisdec_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	$(VORBIS_CFLAGS) \
+	$(CFLAGS)
+
+elements_vorbistag_LDADD = \
+	$(LDADD) \
+	$(VORBIS_LIBS) \
+	$(VORBISENC_LIBS)
+
+elements_vorbistag_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(AM_CFLAGS) \
+	$(VORBIS_CFLAGS) \
+	$(CFLAGS)
+
+elements_videoscale_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+elements_videoscale_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(LDADD)
+
+gst_typefindfunctions_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+gst_typefindfunctions_LDADD = $(GST_BASE_LIBS) $(LDADD)
+libs_video_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_video_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
+pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD)
+pipelines_vorbisenc_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+        $(AM_CFLAGS)
+
+
+# this seemingly useless CFLAGS line is here only to avoid
+# vorbisdec.$(OBJEXT) by triggering creation of pipelines_vorbisdec.$(OBJEXT)
+# instead
+pipelines_vorbisdec_CFLAGS = $(AM_CFLAGS)
+pipelines_oggmux_LDADD = $(LDADD) $(OGG_LIBS)
+pipelines_oggmux_CFLAGS = $(AM_CFLAGS) $(OGG_CFLAGS)
+pipelines_theoraenc_CFLAGS = $(AM_CFLAGS) $(THEORA_CFLAGS)
+pipelines_theoraenc_LDADD = $(LDADD) $(THEORA_LIBS)
+pipelines_simple_launch_lines_CFLAGS = \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+pipelines_simple_launch_lines_LDADD = \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
+orc_adder_CFLAGS = $(ORC_CFLAGS)
+orc_adder_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_adder_SOURCES = orc/adder.c
+orc_audioconvert_CFLAGS = $(ORC_CFLAGS)
+orc_audioconvert_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_audioconvert_SOURCES = orc/audioconvert.c
+orc_volume_CFLAGS = $(ORC_CFLAGS)
+orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_volume_SOURCES = orc/volume.c
+orc_videoscale_CFLAGS = $(ORC_CFLAGS)
+orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_videoscale_SOURCES = orc/videoscale.c
+orc_videotestsrc_CFLAGS = $(ORC_CFLAGS)
+orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c
+EXTRA_DIST = gst-plugins-base.supp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/check.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/check/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/check/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+elements/$(am__dirstamp):
+	@$(MKDIR_P) elements
+	@: > elements/$(am__dirstamp)
+elements/adder$(EXEEXT): $(elements_adder_OBJECTS) $(elements_adder_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/adder$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_adder_OBJECTS) $(elements_adder_LDADD) $(LIBS)
+elements/alsa$(EXEEXT): $(elements_alsa_OBJECTS) $(elements_alsa_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/alsa$(EXEEXT)
+	$(AM_V_CCLD)$(elements_alsa_LINK) $(elements_alsa_OBJECTS) $(elements_alsa_LDADD) $(LIBS)
+elements/audioconvert$(EXEEXT): $(elements_audioconvert_OBJECTS) $(elements_audioconvert_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/audioconvert$(EXEEXT)
+	$(AM_V_CCLD)$(elements_audioconvert_LINK) $(elements_audioconvert_OBJECTS) $(elements_audioconvert_LDADD) $(LIBS)
+elements/audiotestsrc$(EXEEXT): $(elements_audiotestsrc_OBJECTS) $(elements_audiotestsrc_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/audiotestsrc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_audiotestsrc_OBJECTS) $(elements_audiotestsrc_LDADD) $(LIBS)
+elements/decodebin$(EXEEXT): $(elements_decodebin_OBJECTS) $(elements_decodebin_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/decodebin$(EXEEXT)
+	$(AM_V_CCLD)$(elements_decodebin_LINK) $(elements_decodebin_OBJECTS) $(elements_decodebin_LDADD) $(LIBS)
+elements/encodebin$(EXEEXT): $(elements_encodebin_OBJECTS) $(elements_encodebin_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/encodebin$(EXEEXT)
+	$(AM_V_CCLD)$(elements_encodebin_LINK) $(elements_encodebin_OBJECTS) $(elements_encodebin_LDADD) $(LIBS)
+elements/libvisual$(EXEEXT): $(elements_libvisual_OBJECTS) $(elements_libvisual_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/libvisual$(EXEEXT)
+	$(AM_V_CCLD)$(elements_libvisual_LINK) $(elements_libvisual_OBJECTS) $(elements_libvisual_LDADD) $(LIBS)
+elements/vorbisdec$(EXEEXT): $(elements_vorbisdec_OBJECTS) $(elements_vorbisdec_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/vorbisdec$(EXEEXT)
+	$(AM_V_CCLD)$(elements_vorbisdec_LINK) $(elements_vorbisdec_OBJECTS) $(elements_vorbisdec_LDADD) $(LIBS)
+elements/vorbistag$(EXEEXT): $(elements_vorbistag_OBJECTS) $(elements_vorbistag_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/vorbistag$(EXEEXT)
+	$(AM_V_CCLD)$(elements_vorbistag_LINK) $(elements_vorbistag_OBJECTS) $(elements_vorbistag_LDADD) $(LIBS)
+generic/$(am__dirstamp):
+	@$(MKDIR_P) generic
+	@: > generic/$(am__dirstamp)
+generic/clock-selection$(EXEEXT): $(generic_clock_selection_OBJECTS) $(generic_clock_selection_DEPENDENCIES) generic/$(am__dirstamp)
+	@rm -f generic/clock-selection$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(generic_clock_selection_OBJECTS) $(generic_clock_selection_LDADD) $(LIBS)
+generic/states$(EXEEXT): $(generic_states_OBJECTS) $(generic_states_DEPENDENCIES) generic/$(am__dirstamp)
+	@rm -f generic/states$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(generic_states_OBJECTS) $(generic_states_LDADD) $(LIBS)
+gst/$(am__dirstamp):
+	@$(MKDIR_P) gst
+	@: > gst/$(am__dirstamp)
+gst/typefindfunctions$(EXEEXT): $(gst_typefindfunctions_OBJECTS) $(gst_typefindfunctions_DEPENDENCIES) gst/$(am__dirstamp)
+	@rm -f gst/typefindfunctions$(EXEEXT)
+	$(AM_V_CCLD)$(gst_typefindfunctions_LINK) $(gst_typefindfunctions_OBJECTS) $(gst_typefindfunctions_LDADD) $(LIBS)
+libs/$(am__dirstamp):
+	@$(MKDIR_P) libs
+	@: > libs/$(am__dirstamp)
+libs/audio$(EXEEXT): $(libs_audio_OBJECTS) $(libs_audio_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/audio$(EXEEXT)
+	$(AM_V_CCLD)$(libs_audio_LINK) $(libs_audio_OBJECTS) $(libs_audio_LDADD) $(LIBS)
+libs/cddabasesrc$(EXEEXT): $(libs_cddabasesrc_OBJECTS) $(libs_cddabasesrc_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/cddabasesrc$(EXEEXT)
+	$(AM_V_CCLD)$(libs_cddabasesrc_LINK) $(libs_cddabasesrc_OBJECTS) $(libs_cddabasesrc_LDADD) $(LIBS)
+libs/discoverer$(EXEEXT): $(libs_discoverer_OBJECTS) $(libs_discoverer_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/discoverer$(EXEEXT)
+	$(AM_V_CCLD)$(libs_discoverer_LINK) $(libs_discoverer_OBJECTS) $(libs_discoverer_LDADD) $(LIBS)
+libs/fft$(EXEEXT): $(libs_fft_OBJECTS) $(libs_fft_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/fft$(EXEEXT)
+	$(AM_V_CCLD)$(libs_fft_LINK) $(libs_fft_OBJECTS) $(libs_fft_LDADD) $(LIBS)
+libs/gstlibscpp$(EXEEXT): $(libs_gstlibscpp_OBJECTS) $(libs_gstlibscpp_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/gstlibscpp$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(libs_gstlibscpp_OBJECTS) $(libs_gstlibscpp_LDADD) $(LIBS)
+libs/libsabi$(EXEEXT): $(libs_libsabi_OBJECTS) $(libs_libsabi_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/libsabi$(EXEEXT)
+	$(AM_V_CCLD)$(libs_libsabi_LINK) $(libs_libsabi_OBJECTS) $(libs_libsabi_LDADD) $(LIBS)
+libs/mixer$(EXEEXT): $(libs_mixer_OBJECTS) $(libs_mixer_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/mixer$(EXEEXT)
+	$(AM_V_CCLD)$(libs_mixer_LINK) $(libs_mixer_OBJECTS) $(libs_mixer_LDADD) $(LIBS)
+libs/navigation$(EXEEXT): $(libs_navigation_OBJECTS) $(libs_navigation_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/navigation$(EXEEXT)
+	$(AM_V_CCLD)$(libs_navigation_LINK) $(libs_navigation_OBJECTS) $(libs_navigation_LDADD) $(LIBS)
+libs/netbuffer$(EXEEXT): $(libs_netbuffer_OBJECTS) $(libs_netbuffer_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/netbuffer$(EXEEXT)
+	$(AM_V_CCLD)$(libs_netbuffer_LINK) $(libs_netbuffer_OBJECTS) $(libs_netbuffer_LDADD) $(LIBS)
+libs/pbutils$(EXEEXT): $(libs_pbutils_OBJECTS) $(libs_pbutils_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/pbutils$(EXEEXT)
+	$(AM_V_CCLD)$(libs_pbutils_LINK) $(libs_pbutils_OBJECTS) $(libs_pbutils_LDADD) $(LIBS)
+libs/profile$(EXEEXT): $(libs_profile_OBJECTS) $(libs_profile_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/profile$(EXEEXT)
+	$(AM_V_CCLD)$(libs_profile_LINK) $(libs_profile_OBJECTS) $(libs_profile_LDADD) $(LIBS)
+libs/rtp$(EXEEXT): $(libs_rtp_OBJECTS) $(libs_rtp_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/rtp$(EXEEXT)
+	$(AM_V_CCLD)$(libs_rtp_LINK) $(libs_rtp_OBJECTS) $(libs_rtp_LDADD) $(LIBS)
+libs/rtsp$(EXEEXT): $(libs_rtsp_OBJECTS) $(libs_rtsp_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/rtsp$(EXEEXT)
+	$(AM_V_CCLD)$(libs_rtsp_LINK) $(libs_rtsp_OBJECTS) $(libs_rtsp_LDADD) $(LIBS)
+libs/tag$(EXEEXT): $(libs_tag_OBJECTS) $(libs_tag_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/tag$(EXEEXT)
+	$(AM_V_CCLD)$(libs_tag_LINK) $(libs_tag_OBJECTS) $(libs_tag_LDADD) $(LIBS)
+libs/video$(EXEEXT): $(libs_video_OBJECTS) $(libs_video_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/video$(EXEEXT)
+	$(AM_V_CCLD)$(libs_video_LINK) $(libs_video_OBJECTS) $(libs_video_LDADD) $(LIBS)
+libs/xmpwriter$(EXEEXT): $(libs_xmpwriter_OBJECTS) $(libs_xmpwriter_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/xmpwriter$(EXEEXT)
+	$(AM_V_CCLD)$(libs_xmpwriter_LINK) $(libs_xmpwriter_OBJECTS) $(libs_xmpwriter_LDADD) $(LIBS)
+orc/$(am__dirstamp):
+	@$(MKDIR_P) orc
+	@: > orc/$(am__dirstamp)
+orc/adder$(EXEEXT): $(orc_adder_OBJECTS) $(orc_adder_DEPENDENCIES) orc/$(am__dirstamp)
+	@rm -f orc/adder$(EXEEXT)
+	$(AM_V_CCLD)$(orc_adder_LINK) $(orc_adder_OBJECTS) $(orc_adder_LDADD) $(LIBS)
+orc/audioconvert$(EXEEXT): $(orc_audioconvert_OBJECTS) $(orc_audioconvert_DEPENDENCIES) orc/$(am__dirstamp)
+	@rm -f orc/audioconvert$(EXEEXT)
+	$(AM_V_CCLD)$(orc_audioconvert_LINK) $(orc_audioconvert_OBJECTS) $(orc_audioconvert_LDADD) $(LIBS)
+orc/videoscale$(EXEEXT): $(orc_videoscale_OBJECTS) $(orc_videoscale_DEPENDENCIES) orc/$(am__dirstamp)
+	@rm -f orc/videoscale$(EXEEXT)
+	$(AM_V_CCLD)$(orc_videoscale_LINK) $(orc_videoscale_OBJECTS) $(orc_videoscale_LDADD) $(LIBS)
+orc/videotestsrc$(EXEEXT): $(orc_videotestsrc_OBJECTS) $(orc_videotestsrc_DEPENDENCIES) orc/$(am__dirstamp)
+	@rm -f orc/videotestsrc$(EXEEXT)
+	$(AM_V_CCLD)$(orc_videotestsrc_LINK) $(orc_videotestsrc_OBJECTS) $(orc_videotestsrc_LDADD) $(LIBS)
+orc/volume$(EXEEXT): $(orc_volume_OBJECTS) $(orc_volume_DEPENDENCIES) orc/$(am__dirstamp)
+	@rm -f orc/volume$(EXEEXT)
+	$(AM_V_CCLD)$(orc_volume_LINK) $(orc_volume_OBJECTS) $(orc_volume_LDADD) $(LIBS)
+pipelines/$(am__dirstamp):
+	@$(MKDIR_P) pipelines
+	@: > pipelines/$(am__dirstamp)
+pipelines/gio$(EXEEXT): $(pipelines_gio_OBJECTS) $(pipelines_gio_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/gio$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_gio_LINK) $(pipelines_gio_OBJECTS) $(pipelines_gio_LDADD) $(LIBS)
+pipelines/oggmux$(EXEEXT): $(pipelines_oggmux_OBJECTS) $(pipelines_oggmux_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/oggmux$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_oggmux_LINK) $(pipelines_oggmux_OBJECTS) $(pipelines_oggmux_LDADD) $(LIBS)
+pipelines/simple-launch-lines$(EXEEXT): $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/simple-launch-lines$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_simple_launch_lines_LINK) $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_LDADD) $(LIBS)
+pipelines/theoraenc$(EXEEXT): $(pipelines_theoraenc_OBJECTS) $(pipelines_theoraenc_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/theoraenc$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_theoraenc_LINK) $(pipelines_theoraenc_OBJECTS) $(pipelines_theoraenc_LDADD) $(LIBS)
+pipelines/vorbisdec$(EXEEXT): $(pipelines_vorbisdec_OBJECTS) $(pipelines_vorbisdec_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/vorbisdec$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_vorbisdec_LINK) $(pipelines_vorbisdec_OBJECTS) $(pipelines_vorbisdec_LDADD) $(LIBS)
+pipelines/vorbisenc$(EXEEXT): $(pipelines_vorbisenc_OBJECTS) $(pipelines_vorbisenc_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/vorbisenc$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_vorbisenc_LINK) $(pipelines_vorbisenc_OBJECTS) $(pipelines_vorbisenc_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adder.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audiotestsrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock-selection.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_alsa-alsa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_audioconvert-audioconvert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_decodebin-decodebin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_encodebin-encodebin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_libvisual-libvisual.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_vorbisdec-vorbisdec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_vorbistag-vorbistag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst_typefindfunctions-typefindfunctions.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstlibscpp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_audio-audio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_cddabasesrc-cddabasesrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_discoverer-discoverer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_fft-fft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_libsabi-libsabi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_mixer-mixer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_navigation-navigation.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_netbuffer-netbuffer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_pbutils-pbutils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_profile-profile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_rtp-rtp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_rtsp-rtsp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_tag-tag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_video-video.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libs_xmpwriter-xmpwriter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_adder-adder.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_audioconvert-audioconvert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_videoscale-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_videotestsrc-videotestsrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_volume-volume.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_gio-gio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_oggmux-oggmux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_theoraenc-theoraenc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_vorbisdec-vorbisdec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_vorbisenc-vorbisenc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/states.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+adder.o: elements/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT adder.o -MD -MP -MF $(DEPDIR)/adder.Tpo -c -o adder.o `test -f 'elements/adder.c' || echo '$(srcdir)/'`elements/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/adder.Tpo $(DEPDIR)/adder.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/adder.c' object='adder.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adder.o `test -f 'elements/adder.c' || echo '$(srcdir)/'`elements/adder.c
+
+adder.obj: elements/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT adder.obj -MD -MP -MF $(DEPDIR)/adder.Tpo -c -o adder.obj `if test -f 'elements/adder.c'; then $(CYGPATH_W) 'elements/adder.c'; else $(CYGPATH_W) '$(srcdir)/elements/adder.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/adder.Tpo $(DEPDIR)/adder.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/adder.c' object='adder.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adder.obj `if test -f 'elements/adder.c'; then $(CYGPATH_W) 'elements/adder.c'; else $(CYGPATH_W) '$(srcdir)/elements/adder.c'; fi`
+
+elements_alsa-alsa.o: elements/alsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_alsa_CFLAGS) $(CFLAGS) -MT elements_alsa-alsa.o -MD -MP -MF $(DEPDIR)/elements_alsa-alsa.Tpo -c -o elements_alsa-alsa.o `test -f 'elements/alsa.c' || echo '$(srcdir)/'`elements/alsa.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_alsa-alsa.Tpo $(DEPDIR)/elements_alsa-alsa.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/alsa.c' object='elements_alsa-alsa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_alsa_CFLAGS) $(CFLAGS) -c -o elements_alsa-alsa.o `test -f 'elements/alsa.c' || echo '$(srcdir)/'`elements/alsa.c
+
+elements_alsa-alsa.obj: elements/alsa.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_alsa_CFLAGS) $(CFLAGS) -MT elements_alsa-alsa.obj -MD -MP -MF $(DEPDIR)/elements_alsa-alsa.Tpo -c -o elements_alsa-alsa.obj `if test -f 'elements/alsa.c'; then $(CYGPATH_W) 'elements/alsa.c'; else $(CYGPATH_W) '$(srcdir)/elements/alsa.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_alsa-alsa.Tpo $(DEPDIR)/elements_alsa-alsa.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/alsa.c' object='elements_alsa-alsa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_alsa_CFLAGS) $(CFLAGS) -c -o elements_alsa-alsa.obj `if test -f 'elements/alsa.c'; then $(CYGPATH_W) 'elements/alsa.c'; else $(CYGPATH_W) '$(srcdir)/elements/alsa.c'; fi`
+
+elements_audioconvert-audioconvert.o: elements/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_audioconvert_CFLAGS) $(CFLAGS) -MT elements_audioconvert-audioconvert.o -MD -MP -MF $(DEPDIR)/elements_audioconvert-audioconvert.Tpo -c -o elements_audioconvert-audioconvert.o `test -f 'elements/audioconvert.c' || echo '$(srcdir)/'`elements/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_audioconvert-audioconvert.Tpo $(DEPDIR)/elements_audioconvert-audioconvert.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/audioconvert.c' object='elements_audioconvert-audioconvert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_audioconvert_CFLAGS) $(CFLAGS) -c -o elements_audioconvert-audioconvert.o `test -f 'elements/audioconvert.c' || echo '$(srcdir)/'`elements/audioconvert.c
+
+elements_audioconvert-audioconvert.obj: elements/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_audioconvert_CFLAGS) $(CFLAGS) -MT elements_audioconvert-audioconvert.obj -MD -MP -MF $(DEPDIR)/elements_audioconvert-audioconvert.Tpo -c -o elements_audioconvert-audioconvert.obj `if test -f 'elements/audioconvert.c'; then $(CYGPATH_W) 'elements/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/elements/audioconvert.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_audioconvert-audioconvert.Tpo $(DEPDIR)/elements_audioconvert-audioconvert.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/audioconvert.c' object='elements_audioconvert-audioconvert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_audioconvert_CFLAGS) $(CFLAGS) -c -o elements_audioconvert-audioconvert.obj `if test -f 'elements/audioconvert.c'; then $(CYGPATH_W) 'elements/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/elements/audioconvert.c'; fi`
+
+audiotestsrc.o: elements/audiotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT audiotestsrc.o -MD -MP -MF $(DEPDIR)/audiotestsrc.Tpo -c -o audiotestsrc.o `test -f 'elements/audiotestsrc.c' || echo '$(srcdir)/'`elements/audiotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/audiotestsrc.Tpo $(DEPDIR)/audiotestsrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/audiotestsrc.c' object='audiotestsrc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o audiotestsrc.o `test -f 'elements/audiotestsrc.c' || echo '$(srcdir)/'`elements/audiotestsrc.c
+
+audiotestsrc.obj: elements/audiotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT audiotestsrc.obj -MD -MP -MF $(DEPDIR)/audiotestsrc.Tpo -c -o audiotestsrc.obj `if test -f 'elements/audiotestsrc.c'; then $(CYGPATH_W) 'elements/audiotestsrc.c'; else $(CYGPATH_W) '$(srcdir)/elements/audiotestsrc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/audiotestsrc.Tpo $(DEPDIR)/audiotestsrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/audiotestsrc.c' object='audiotestsrc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o audiotestsrc.obj `if test -f 'elements/audiotestsrc.c'; then $(CYGPATH_W) 'elements/audiotestsrc.c'; else $(CYGPATH_W) '$(srcdir)/elements/audiotestsrc.c'; fi`
+
+elements_decodebin-decodebin.o: elements/decodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_decodebin_CFLAGS) $(CFLAGS) -MT elements_decodebin-decodebin.o -MD -MP -MF $(DEPDIR)/elements_decodebin-decodebin.Tpo -c -o elements_decodebin-decodebin.o `test -f 'elements/decodebin.c' || echo '$(srcdir)/'`elements/decodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_decodebin-decodebin.Tpo $(DEPDIR)/elements_decodebin-decodebin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/decodebin.c' object='elements_decodebin-decodebin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_decodebin_CFLAGS) $(CFLAGS) -c -o elements_decodebin-decodebin.o `test -f 'elements/decodebin.c' || echo '$(srcdir)/'`elements/decodebin.c
+
+elements_decodebin-decodebin.obj: elements/decodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_decodebin_CFLAGS) $(CFLAGS) -MT elements_decodebin-decodebin.obj -MD -MP -MF $(DEPDIR)/elements_decodebin-decodebin.Tpo -c -o elements_decodebin-decodebin.obj `if test -f 'elements/decodebin.c'; then $(CYGPATH_W) 'elements/decodebin.c'; else $(CYGPATH_W) '$(srcdir)/elements/decodebin.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_decodebin-decodebin.Tpo $(DEPDIR)/elements_decodebin-decodebin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/decodebin.c' object='elements_decodebin-decodebin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_decodebin_CFLAGS) $(CFLAGS) -c -o elements_decodebin-decodebin.obj `if test -f 'elements/decodebin.c'; then $(CYGPATH_W) 'elements/decodebin.c'; else $(CYGPATH_W) '$(srcdir)/elements/decodebin.c'; fi`
+
+elements_encodebin-encodebin.o: elements/encodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_encodebin_CFLAGS) $(CFLAGS) -MT elements_encodebin-encodebin.o -MD -MP -MF $(DEPDIR)/elements_encodebin-encodebin.Tpo -c -o elements_encodebin-encodebin.o `test -f 'elements/encodebin.c' || echo '$(srcdir)/'`elements/encodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_encodebin-encodebin.Tpo $(DEPDIR)/elements_encodebin-encodebin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/encodebin.c' object='elements_encodebin-encodebin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_encodebin_CFLAGS) $(CFLAGS) -c -o elements_encodebin-encodebin.o `test -f 'elements/encodebin.c' || echo '$(srcdir)/'`elements/encodebin.c
+
+elements_encodebin-encodebin.obj: elements/encodebin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_encodebin_CFLAGS) $(CFLAGS) -MT elements_encodebin-encodebin.obj -MD -MP -MF $(DEPDIR)/elements_encodebin-encodebin.Tpo -c -o elements_encodebin-encodebin.obj `if test -f 'elements/encodebin.c'; then $(CYGPATH_W) 'elements/encodebin.c'; else $(CYGPATH_W) '$(srcdir)/elements/encodebin.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_encodebin-encodebin.Tpo $(DEPDIR)/elements_encodebin-encodebin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/encodebin.c' object='elements_encodebin-encodebin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_encodebin_CFLAGS) $(CFLAGS) -c -o elements_encodebin-encodebin.obj `if test -f 'elements/encodebin.c'; then $(CYGPATH_W) 'elements/encodebin.c'; else $(CYGPATH_W) '$(srcdir)/elements/encodebin.c'; fi`
+
+elements_libvisual-libvisual.o: elements/libvisual.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_libvisual_CFLAGS) $(CFLAGS) -MT elements_libvisual-libvisual.o -MD -MP -MF $(DEPDIR)/elements_libvisual-libvisual.Tpo -c -o elements_libvisual-libvisual.o `test -f 'elements/libvisual.c' || echo '$(srcdir)/'`elements/libvisual.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_libvisual-libvisual.Tpo $(DEPDIR)/elements_libvisual-libvisual.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/libvisual.c' object='elements_libvisual-libvisual.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_libvisual_CFLAGS) $(CFLAGS) -c -o elements_libvisual-libvisual.o `test -f 'elements/libvisual.c' || echo '$(srcdir)/'`elements/libvisual.c
+
+elements_libvisual-libvisual.obj: elements/libvisual.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_libvisual_CFLAGS) $(CFLAGS) -MT elements_libvisual-libvisual.obj -MD -MP -MF $(DEPDIR)/elements_libvisual-libvisual.Tpo -c -o elements_libvisual-libvisual.obj `if test -f 'elements/libvisual.c'; then $(CYGPATH_W) 'elements/libvisual.c'; else $(CYGPATH_W) '$(srcdir)/elements/libvisual.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_libvisual-libvisual.Tpo $(DEPDIR)/elements_libvisual-libvisual.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/libvisual.c' object='elements_libvisual-libvisual.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_libvisual_CFLAGS) $(CFLAGS) -c -o elements_libvisual-libvisual.obj `if test -f 'elements/libvisual.c'; then $(CYGPATH_W) 'elements/libvisual.c'; else $(CYGPATH_W) '$(srcdir)/elements/libvisual.c'; fi`
+
+elements_vorbisdec-vorbisdec.o: elements/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbisdec_CFLAGS) $(CFLAGS) -MT elements_vorbisdec-vorbisdec.o -MD -MP -MF $(DEPDIR)/elements_vorbisdec-vorbisdec.Tpo -c -o elements_vorbisdec-vorbisdec.o `test -f 'elements/vorbisdec.c' || echo '$(srcdir)/'`elements/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_vorbisdec-vorbisdec.Tpo $(DEPDIR)/elements_vorbisdec-vorbisdec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/vorbisdec.c' object='elements_vorbisdec-vorbisdec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbisdec_CFLAGS) $(CFLAGS) -c -o elements_vorbisdec-vorbisdec.o `test -f 'elements/vorbisdec.c' || echo '$(srcdir)/'`elements/vorbisdec.c
+
+elements_vorbisdec-vorbisdec.obj: elements/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbisdec_CFLAGS) $(CFLAGS) -MT elements_vorbisdec-vorbisdec.obj -MD -MP -MF $(DEPDIR)/elements_vorbisdec-vorbisdec.Tpo -c -o elements_vorbisdec-vorbisdec.obj `if test -f 'elements/vorbisdec.c'; then $(CYGPATH_W) 'elements/vorbisdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/vorbisdec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_vorbisdec-vorbisdec.Tpo $(DEPDIR)/elements_vorbisdec-vorbisdec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/vorbisdec.c' object='elements_vorbisdec-vorbisdec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbisdec_CFLAGS) $(CFLAGS) -c -o elements_vorbisdec-vorbisdec.obj `if test -f 'elements/vorbisdec.c'; then $(CYGPATH_W) 'elements/vorbisdec.c'; else $(CYGPATH_W) '$(srcdir)/elements/vorbisdec.c'; fi`
+
+elements_vorbistag-vorbistag.o: elements/vorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbistag_CFLAGS) $(CFLAGS) -MT elements_vorbistag-vorbistag.o -MD -MP -MF $(DEPDIR)/elements_vorbistag-vorbistag.Tpo -c -o elements_vorbistag-vorbistag.o `test -f 'elements/vorbistag.c' || echo '$(srcdir)/'`elements/vorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_vorbistag-vorbistag.Tpo $(DEPDIR)/elements_vorbistag-vorbistag.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/vorbistag.c' object='elements_vorbistag-vorbistag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbistag_CFLAGS) $(CFLAGS) -c -o elements_vorbistag-vorbistag.o `test -f 'elements/vorbistag.c' || echo '$(srcdir)/'`elements/vorbistag.c
+
+elements_vorbistag-vorbistag.obj: elements/vorbistag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbistag_CFLAGS) $(CFLAGS) -MT elements_vorbistag-vorbistag.obj -MD -MP -MF $(DEPDIR)/elements_vorbistag-vorbistag.Tpo -c -o elements_vorbistag-vorbistag.obj `if test -f 'elements/vorbistag.c'; then $(CYGPATH_W) 'elements/vorbistag.c'; else $(CYGPATH_W) '$(srcdir)/elements/vorbistag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/elements_vorbistag-vorbistag.Tpo $(DEPDIR)/elements_vorbistag-vorbistag.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='elements/vorbistag.c' object='elements_vorbistag-vorbistag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vorbistag_CFLAGS) $(CFLAGS) -c -o elements_vorbistag-vorbistag.obj `if test -f 'elements/vorbistag.c'; then $(CYGPATH_W) 'elements/vorbistag.c'; else $(CYGPATH_W) '$(srcdir)/elements/vorbistag.c'; fi`
+
+clock-selection.o: generic/clock-selection.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clock-selection.o -MD -MP -MF $(DEPDIR)/clock-selection.Tpo -c -o clock-selection.o `test -f 'generic/clock-selection.c' || echo '$(srcdir)/'`generic/clock-selection.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/clock-selection.Tpo $(DEPDIR)/clock-selection.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generic/clock-selection.c' object='clock-selection.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clock-selection.o `test -f 'generic/clock-selection.c' || echo '$(srcdir)/'`generic/clock-selection.c
+
+clock-selection.obj: generic/clock-selection.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clock-selection.obj -MD -MP -MF $(DEPDIR)/clock-selection.Tpo -c -o clock-selection.obj `if test -f 'generic/clock-selection.c'; then $(CYGPATH_W) 'generic/clock-selection.c'; else $(CYGPATH_W) '$(srcdir)/generic/clock-selection.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/clock-selection.Tpo $(DEPDIR)/clock-selection.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generic/clock-selection.c' object='clock-selection.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clock-selection.obj `if test -f 'generic/clock-selection.c'; then $(CYGPATH_W) 'generic/clock-selection.c'; else $(CYGPATH_W) '$(srcdir)/generic/clock-selection.c'; fi`
+
+states.o: generic/states.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT states.o -MD -MP -MF $(DEPDIR)/states.Tpo -c -o states.o `test -f 'generic/states.c' || echo '$(srcdir)/'`generic/states.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/states.Tpo $(DEPDIR)/states.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generic/states.c' object='states.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o states.o `test -f 'generic/states.c' || echo '$(srcdir)/'`generic/states.c
+
+states.obj: generic/states.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT states.obj -MD -MP -MF $(DEPDIR)/states.Tpo -c -o states.obj `if test -f 'generic/states.c'; then $(CYGPATH_W) 'generic/states.c'; else $(CYGPATH_W) '$(srcdir)/generic/states.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/states.Tpo $(DEPDIR)/states.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='generic/states.c' object='states.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o states.obj `if test -f 'generic/states.c'; then $(CYGPATH_W) 'generic/states.c'; else $(CYGPATH_W) '$(srcdir)/generic/states.c'; fi`
+
+gst_typefindfunctions-typefindfunctions.o: gst/typefindfunctions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -MT gst_typefindfunctions-typefindfunctions.o -MD -MP -MF $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Tpo -c -o gst_typefindfunctions-typefindfunctions.o `test -f 'gst/typefindfunctions.c' || echo '$(srcdir)/'`gst/typefindfunctions.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Tpo $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gst/typefindfunctions.c' object='gst_typefindfunctions-typefindfunctions.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -c -o gst_typefindfunctions-typefindfunctions.o `test -f 'gst/typefindfunctions.c' || echo '$(srcdir)/'`gst/typefindfunctions.c
+
+gst_typefindfunctions-typefindfunctions.obj: gst/typefindfunctions.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -MT gst_typefindfunctions-typefindfunctions.obj -MD -MP -MF $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Tpo -c -o gst_typefindfunctions-typefindfunctions.obj `if test -f 'gst/typefindfunctions.c'; then $(CYGPATH_W) 'gst/typefindfunctions.c'; else $(CYGPATH_W) '$(srcdir)/gst/typefindfunctions.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Tpo $(DEPDIR)/gst_typefindfunctions-typefindfunctions.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gst/typefindfunctions.c' object='gst_typefindfunctions-typefindfunctions.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -c -o gst_typefindfunctions-typefindfunctions.obj `if test -f 'gst/typefindfunctions.c'; then $(CYGPATH_W) 'gst/typefindfunctions.c'; else $(CYGPATH_W) '$(srcdir)/gst/typefindfunctions.c'; fi`
+
+libs_audio-audio.o: libs/audio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -MT libs_audio-audio.o -MD -MP -MF $(DEPDIR)/libs_audio-audio.Tpo -c -o libs_audio-audio.o `test -f 'libs/audio.c' || echo '$(srcdir)/'`libs/audio.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_audio-audio.Tpo $(DEPDIR)/libs_audio-audio.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/audio.c' object='libs_audio-audio.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -c -o libs_audio-audio.o `test -f 'libs/audio.c' || echo '$(srcdir)/'`libs/audio.c
+
+libs_audio-audio.obj: libs/audio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -MT libs_audio-audio.obj -MD -MP -MF $(DEPDIR)/libs_audio-audio.Tpo -c -o libs_audio-audio.obj `if test -f 'libs/audio.c'; then $(CYGPATH_W) 'libs/audio.c'; else $(CYGPATH_W) '$(srcdir)/libs/audio.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_audio-audio.Tpo $(DEPDIR)/libs_audio-audio.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/audio.c' object='libs_audio-audio.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -c -o libs_audio-audio.obj `if test -f 'libs/audio.c'; then $(CYGPATH_W) 'libs/audio.c'; else $(CYGPATH_W) '$(srcdir)/libs/audio.c'; fi`
+
+libs_cddabasesrc-cddabasesrc.o: libs/cddabasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_cddabasesrc_CFLAGS) $(CFLAGS) -MT libs_cddabasesrc-cddabasesrc.o -MD -MP -MF $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Tpo -c -o libs_cddabasesrc-cddabasesrc.o `test -f 'libs/cddabasesrc.c' || echo '$(srcdir)/'`libs/cddabasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Tpo $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/cddabasesrc.c' object='libs_cddabasesrc-cddabasesrc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_cddabasesrc_CFLAGS) $(CFLAGS) -c -o libs_cddabasesrc-cddabasesrc.o `test -f 'libs/cddabasesrc.c' || echo '$(srcdir)/'`libs/cddabasesrc.c
+
+libs_cddabasesrc-cddabasesrc.obj: libs/cddabasesrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_cddabasesrc_CFLAGS) $(CFLAGS) -MT libs_cddabasesrc-cddabasesrc.obj -MD -MP -MF $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Tpo -c -o libs_cddabasesrc-cddabasesrc.obj `if test -f 'libs/cddabasesrc.c'; then $(CYGPATH_W) 'libs/cddabasesrc.c'; else $(CYGPATH_W) '$(srcdir)/libs/cddabasesrc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Tpo $(DEPDIR)/libs_cddabasesrc-cddabasesrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/cddabasesrc.c' object='libs_cddabasesrc-cddabasesrc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_cddabasesrc_CFLAGS) $(CFLAGS) -c -o libs_cddabasesrc-cddabasesrc.obj `if test -f 'libs/cddabasesrc.c'; then $(CYGPATH_W) 'libs/cddabasesrc.c'; else $(CYGPATH_W) '$(srcdir)/libs/cddabasesrc.c'; fi`
+
+libs_discoverer-discoverer.o: libs/discoverer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -MT libs_discoverer-discoverer.o -MD -MP -MF $(DEPDIR)/libs_discoverer-discoverer.Tpo -c -o libs_discoverer-discoverer.o `test -f 'libs/discoverer.c' || echo '$(srcdir)/'`libs/discoverer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_discoverer-discoverer.Tpo $(DEPDIR)/libs_discoverer-discoverer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/discoverer.c' object='libs_discoverer-discoverer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -c -o libs_discoverer-discoverer.o `test -f 'libs/discoverer.c' || echo '$(srcdir)/'`libs/discoverer.c
+
+libs_discoverer-discoverer.obj: libs/discoverer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -MT libs_discoverer-discoverer.obj -MD -MP -MF $(DEPDIR)/libs_discoverer-discoverer.Tpo -c -o libs_discoverer-discoverer.obj `if test -f 'libs/discoverer.c'; then $(CYGPATH_W) 'libs/discoverer.c'; else $(CYGPATH_W) '$(srcdir)/libs/discoverer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_discoverer-discoverer.Tpo $(DEPDIR)/libs_discoverer-discoverer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/discoverer.c' object='libs_discoverer-discoverer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -c -o libs_discoverer-discoverer.obj `if test -f 'libs/discoverer.c'; then $(CYGPATH_W) 'libs/discoverer.c'; else $(CYGPATH_W) '$(srcdir)/libs/discoverer.c'; fi`
+
+libs_fft-fft.o: libs/fft.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_fft_CFLAGS) $(CFLAGS) -MT libs_fft-fft.o -MD -MP -MF $(DEPDIR)/libs_fft-fft.Tpo -c -o libs_fft-fft.o `test -f 'libs/fft.c' || echo '$(srcdir)/'`libs/fft.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_fft-fft.Tpo $(DEPDIR)/libs_fft-fft.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/fft.c' object='libs_fft-fft.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_fft_CFLAGS) $(CFLAGS) -c -o libs_fft-fft.o `test -f 'libs/fft.c' || echo '$(srcdir)/'`libs/fft.c
+
+libs_fft-fft.obj: libs/fft.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_fft_CFLAGS) $(CFLAGS) -MT libs_fft-fft.obj -MD -MP -MF $(DEPDIR)/libs_fft-fft.Tpo -c -o libs_fft-fft.obj `if test -f 'libs/fft.c'; then $(CYGPATH_W) 'libs/fft.c'; else $(CYGPATH_W) '$(srcdir)/libs/fft.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_fft-fft.Tpo $(DEPDIR)/libs_fft-fft.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/fft.c' object='libs_fft-fft.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_fft_CFLAGS) $(CFLAGS) -c -o libs_fft-fft.obj `if test -f 'libs/fft.c'; then $(CYGPATH_W) 'libs/fft.c'; else $(CYGPATH_W) '$(srcdir)/libs/fft.c'; fi`
+
+libs_libsabi-libsabi.o: libs/libsabi.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_libsabi_CFLAGS) $(CFLAGS) -MT libs_libsabi-libsabi.o -MD -MP -MF $(DEPDIR)/libs_libsabi-libsabi.Tpo -c -o libs_libsabi-libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_libsabi-libsabi.Tpo $(DEPDIR)/libs_libsabi-libsabi.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/libsabi.c' object='libs_libsabi-libsabi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_libsabi_CFLAGS) $(CFLAGS) -c -o libs_libsabi-libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
+
+libs_libsabi-libsabi.obj: libs/libsabi.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_libsabi_CFLAGS) $(CFLAGS) -MT libs_libsabi-libsabi.obj -MD -MP -MF $(DEPDIR)/libs_libsabi-libsabi.Tpo -c -o libs_libsabi-libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_libsabi-libsabi.Tpo $(DEPDIR)/libs_libsabi-libsabi.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/libsabi.c' object='libs_libsabi-libsabi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_libsabi_CFLAGS) $(CFLAGS) -c -o libs_libsabi-libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
+
+libs_mixer-mixer.o: libs/mixer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_mixer_CFLAGS) $(CFLAGS) -MT libs_mixer-mixer.o -MD -MP -MF $(DEPDIR)/libs_mixer-mixer.Tpo -c -o libs_mixer-mixer.o `test -f 'libs/mixer.c' || echo '$(srcdir)/'`libs/mixer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_mixer-mixer.Tpo $(DEPDIR)/libs_mixer-mixer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/mixer.c' object='libs_mixer-mixer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_mixer_CFLAGS) $(CFLAGS) -c -o libs_mixer-mixer.o `test -f 'libs/mixer.c' || echo '$(srcdir)/'`libs/mixer.c
+
+libs_mixer-mixer.obj: libs/mixer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_mixer_CFLAGS) $(CFLAGS) -MT libs_mixer-mixer.obj -MD -MP -MF $(DEPDIR)/libs_mixer-mixer.Tpo -c -o libs_mixer-mixer.obj `if test -f 'libs/mixer.c'; then $(CYGPATH_W) 'libs/mixer.c'; else $(CYGPATH_W) '$(srcdir)/libs/mixer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_mixer-mixer.Tpo $(DEPDIR)/libs_mixer-mixer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/mixer.c' object='libs_mixer-mixer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_mixer_CFLAGS) $(CFLAGS) -c -o libs_mixer-mixer.obj `if test -f 'libs/mixer.c'; then $(CYGPATH_W) 'libs/mixer.c'; else $(CYGPATH_W) '$(srcdir)/libs/mixer.c'; fi`
+
+libs_navigation-navigation.o: libs/navigation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_navigation_CFLAGS) $(CFLAGS) -MT libs_navigation-navigation.o -MD -MP -MF $(DEPDIR)/libs_navigation-navigation.Tpo -c -o libs_navigation-navigation.o `test -f 'libs/navigation.c' || echo '$(srcdir)/'`libs/navigation.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_navigation-navigation.Tpo $(DEPDIR)/libs_navigation-navigation.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/navigation.c' object='libs_navigation-navigation.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_navigation_CFLAGS) $(CFLAGS) -c -o libs_navigation-navigation.o `test -f 'libs/navigation.c' || echo '$(srcdir)/'`libs/navigation.c
+
+libs_navigation-navigation.obj: libs/navigation.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_navigation_CFLAGS) $(CFLAGS) -MT libs_navigation-navigation.obj -MD -MP -MF $(DEPDIR)/libs_navigation-navigation.Tpo -c -o libs_navigation-navigation.obj `if test -f 'libs/navigation.c'; then $(CYGPATH_W) 'libs/navigation.c'; else $(CYGPATH_W) '$(srcdir)/libs/navigation.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_navigation-navigation.Tpo $(DEPDIR)/libs_navigation-navigation.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/navigation.c' object='libs_navigation-navigation.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_navigation_CFLAGS) $(CFLAGS) -c -o libs_navigation-navigation.obj `if test -f 'libs/navigation.c'; then $(CYGPATH_W) 'libs/navigation.c'; else $(CYGPATH_W) '$(srcdir)/libs/navigation.c'; fi`
+
+libs_netbuffer-netbuffer.o: libs/netbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_netbuffer_CFLAGS) $(CFLAGS) -MT libs_netbuffer-netbuffer.o -MD -MP -MF $(DEPDIR)/libs_netbuffer-netbuffer.Tpo -c -o libs_netbuffer-netbuffer.o `test -f 'libs/netbuffer.c' || echo '$(srcdir)/'`libs/netbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_netbuffer-netbuffer.Tpo $(DEPDIR)/libs_netbuffer-netbuffer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/netbuffer.c' object='libs_netbuffer-netbuffer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_netbuffer_CFLAGS) $(CFLAGS) -c -o libs_netbuffer-netbuffer.o `test -f 'libs/netbuffer.c' || echo '$(srcdir)/'`libs/netbuffer.c
+
+libs_netbuffer-netbuffer.obj: libs/netbuffer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_netbuffer_CFLAGS) $(CFLAGS) -MT libs_netbuffer-netbuffer.obj -MD -MP -MF $(DEPDIR)/libs_netbuffer-netbuffer.Tpo -c -o libs_netbuffer-netbuffer.obj `if test -f 'libs/netbuffer.c'; then $(CYGPATH_W) 'libs/netbuffer.c'; else $(CYGPATH_W) '$(srcdir)/libs/netbuffer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_netbuffer-netbuffer.Tpo $(DEPDIR)/libs_netbuffer-netbuffer.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/netbuffer.c' object='libs_netbuffer-netbuffer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_netbuffer_CFLAGS) $(CFLAGS) -c -o libs_netbuffer-netbuffer.obj `if test -f 'libs/netbuffer.c'; then $(CYGPATH_W) 'libs/netbuffer.c'; else $(CYGPATH_W) '$(srcdir)/libs/netbuffer.c'; fi`
+
+libs_pbutils-pbutils.o: libs/pbutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_pbutils_CFLAGS) $(CFLAGS) -MT libs_pbutils-pbutils.o -MD -MP -MF $(DEPDIR)/libs_pbutils-pbutils.Tpo -c -o libs_pbutils-pbutils.o `test -f 'libs/pbutils.c' || echo '$(srcdir)/'`libs/pbutils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_pbutils-pbutils.Tpo $(DEPDIR)/libs_pbutils-pbutils.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/pbutils.c' object='libs_pbutils-pbutils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_pbutils_CFLAGS) $(CFLAGS) -c -o libs_pbutils-pbutils.o `test -f 'libs/pbutils.c' || echo '$(srcdir)/'`libs/pbutils.c
+
+libs_pbutils-pbutils.obj: libs/pbutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_pbutils_CFLAGS) $(CFLAGS) -MT libs_pbutils-pbutils.obj -MD -MP -MF $(DEPDIR)/libs_pbutils-pbutils.Tpo -c -o libs_pbutils-pbutils.obj `if test -f 'libs/pbutils.c'; then $(CYGPATH_W) 'libs/pbutils.c'; else $(CYGPATH_W) '$(srcdir)/libs/pbutils.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_pbutils-pbutils.Tpo $(DEPDIR)/libs_pbutils-pbutils.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/pbutils.c' object='libs_pbutils-pbutils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_pbutils_CFLAGS) $(CFLAGS) -c -o libs_pbutils-pbutils.obj `if test -f 'libs/pbutils.c'; then $(CYGPATH_W) 'libs/pbutils.c'; else $(CYGPATH_W) '$(srcdir)/libs/pbutils.c'; fi`
+
+libs_profile-profile.o: libs/profile.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_profile_CFLAGS) $(CFLAGS) -MT libs_profile-profile.o -MD -MP -MF $(DEPDIR)/libs_profile-profile.Tpo -c -o libs_profile-profile.o `test -f 'libs/profile.c' || echo '$(srcdir)/'`libs/profile.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_profile-profile.Tpo $(DEPDIR)/libs_profile-profile.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/profile.c' object='libs_profile-profile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_profile_CFLAGS) $(CFLAGS) -c -o libs_profile-profile.o `test -f 'libs/profile.c' || echo '$(srcdir)/'`libs/profile.c
+
+libs_profile-profile.obj: libs/profile.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_profile_CFLAGS) $(CFLAGS) -MT libs_profile-profile.obj -MD -MP -MF $(DEPDIR)/libs_profile-profile.Tpo -c -o libs_profile-profile.obj `if test -f 'libs/profile.c'; then $(CYGPATH_W) 'libs/profile.c'; else $(CYGPATH_W) '$(srcdir)/libs/profile.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_profile-profile.Tpo $(DEPDIR)/libs_profile-profile.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/profile.c' object='libs_profile-profile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_profile_CFLAGS) $(CFLAGS) -c -o libs_profile-profile.obj `if test -f 'libs/profile.c'; then $(CYGPATH_W) 'libs/profile.c'; else $(CYGPATH_W) '$(srcdir)/libs/profile.c'; fi`
+
+libs_rtp-rtp.o: libs/rtp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtp_CFLAGS) $(CFLAGS) -MT libs_rtp-rtp.o -MD -MP -MF $(DEPDIR)/libs_rtp-rtp.Tpo -c -o libs_rtp-rtp.o `test -f 'libs/rtp.c' || echo '$(srcdir)/'`libs/rtp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_rtp-rtp.Tpo $(DEPDIR)/libs_rtp-rtp.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/rtp.c' object='libs_rtp-rtp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtp_CFLAGS) $(CFLAGS) -c -o libs_rtp-rtp.o `test -f 'libs/rtp.c' || echo '$(srcdir)/'`libs/rtp.c
+
+libs_rtp-rtp.obj: libs/rtp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtp_CFLAGS) $(CFLAGS) -MT libs_rtp-rtp.obj -MD -MP -MF $(DEPDIR)/libs_rtp-rtp.Tpo -c -o libs_rtp-rtp.obj `if test -f 'libs/rtp.c'; then $(CYGPATH_W) 'libs/rtp.c'; else $(CYGPATH_W) '$(srcdir)/libs/rtp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_rtp-rtp.Tpo $(DEPDIR)/libs_rtp-rtp.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/rtp.c' object='libs_rtp-rtp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtp_CFLAGS) $(CFLAGS) -c -o libs_rtp-rtp.obj `if test -f 'libs/rtp.c'; then $(CYGPATH_W) 'libs/rtp.c'; else $(CYGPATH_W) '$(srcdir)/libs/rtp.c'; fi`
+
+libs_rtsp-rtsp.o: libs/rtsp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtsp_CFLAGS) $(CFLAGS) -MT libs_rtsp-rtsp.o -MD -MP -MF $(DEPDIR)/libs_rtsp-rtsp.Tpo -c -o libs_rtsp-rtsp.o `test -f 'libs/rtsp.c' || echo '$(srcdir)/'`libs/rtsp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_rtsp-rtsp.Tpo $(DEPDIR)/libs_rtsp-rtsp.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/rtsp.c' object='libs_rtsp-rtsp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtsp_CFLAGS) $(CFLAGS) -c -o libs_rtsp-rtsp.o `test -f 'libs/rtsp.c' || echo '$(srcdir)/'`libs/rtsp.c
+
+libs_rtsp-rtsp.obj: libs/rtsp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtsp_CFLAGS) $(CFLAGS) -MT libs_rtsp-rtsp.obj -MD -MP -MF $(DEPDIR)/libs_rtsp-rtsp.Tpo -c -o libs_rtsp-rtsp.obj `if test -f 'libs/rtsp.c'; then $(CYGPATH_W) 'libs/rtsp.c'; else $(CYGPATH_W) '$(srcdir)/libs/rtsp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_rtsp-rtsp.Tpo $(DEPDIR)/libs_rtsp-rtsp.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/rtsp.c' object='libs_rtsp-rtsp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_rtsp_CFLAGS) $(CFLAGS) -c -o libs_rtsp-rtsp.obj `if test -f 'libs/rtsp.c'; then $(CYGPATH_W) 'libs/rtsp.c'; else $(CYGPATH_W) '$(srcdir)/libs/rtsp.c'; fi`
+
+libs_tag-tag.o: libs/tag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_tag_CFLAGS) $(CFLAGS) -MT libs_tag-tag.o -MD -MP -MF $(DEPDIR)/libs_tag-tag.Tpo -c -o libs_tag-tag.o `test -f 'libs/tag.c' || echo '$(srcdir)/'`libs/tag.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_tag-tag.Tpo $(DEPDIR)/libs_tag-tag.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/tag.c' object='libs_tag-tag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_tag_CFLAGS) $(CFLAGS) -c -o libs_tag-tag.o `test -f 'libs/tag.c' || echo '$(srcdir)/'`libs/tag.c
+
+libs_tag-tag.obj: libs/tag.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_tag_CFLAGS) $(CFLAGS) -MT libs_tag-tag.obj -MD -MP -MF $(DEPDIR)/libs_tag-tag.Tpo -c -o libs_tag-tag.obj `if test -f 'libs/tag.c'; then $(CYGPATH_W) 'libs/tag.c'; else $(CYGPATH_W) '$(srcdir)/libs/tag.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_tag-tag.Tpo $(DEPDIR)/libs_tag-tag.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/tag.c' object='libs_tag-tag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_tag_CFLAGS) $(CFLAGS) -c -o libs_tag-tag.obj `if test -f 'libs/tag.c'; then $(CYGPATH_W) 'libs/tag.c'; else $(CYGPATH_W) '$(srcdir)/libs/tag.c'; fi`
+
+libs_video-video.o: libs/video.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_video_CFLAGS) $(CFLAGS) -MT libs_video-video.o -MD -MP -MF $(DEPDIR)/libs_video-video.Tpo -c -o libs_video-video.o `test -f 'libs/video.c' || echo '$(srcdir)/'`libs/video.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_video-video.Tpo $(DEPDIR)/libs_video-video.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/video.c' object='libs_video-video.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_video_CFLAGS) $(CFLAGS) -c -o libs_video-video.o `test -f 'libs/video.c' || echo '$(srcdir)/'`libs/video.c
+
+libs_video-video.obj: libs/video.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_video_CFLAGS) $(CFLAGS) -MT libs_video-video.obj -MD -MP -MF $(DEPDIR)/libs_video-video.Tpo -c -o libs_video-video.obj `if test -f 'libs/video.c'; then $(CYGPATH_W) 'libs/video.c'; else $(CYGPATH_W) '$(srcdir)/libs/video.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_video-video.Tpo $(DEPDIR)/libs_video-video.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/video.c' object='libs_video-video.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_video_CFLAGS) $(CFLAGS) -c -o libs_video-video.obj `if test -f 'libs/video.c'; then $(CYGPATH_W) 'libs/video.c'; else $(CYGPATH_W) '$(srcdir)/libs/video.c'; fi`
+
+libs_xmpwriter-xmpwriter.o: libs/xmpwriter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_xmpwriter_CFLAGS) $(CFLAGS) -MT libs_xmpwriter-xmpwriter.o -MD -MP -MF $(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo -c -o libs_xmpwriter-xmpwriter.o `test -f 'libs/xmpwriter.c' || echo '$(srcdir)/'`libs/xmpwriter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo $(DEPDIR)/libs_xmpwriter-xmpwriter.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/xmpwriter.c' object='libs_xmpwriter-xmpwriter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_xmpwriter_CFLAGS) $(CFLAGS) -c -o libs_xmpwriter-xmpwriter.o `test -f 'libs/xmpwriter.c' || echo '$(srcdir)/'`libs/xmpwriter.c
+
+libs_xmpwriter-xmpwriter.obj: libs/xmpwriter.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_xmpwriter_CFLAGS) $(CFLAGS) -MT libs_xmpwriter-xmpwriter.obj -MD -MP -MF $(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo -c -o libs_xmpwriter-xmpwriter.obj `if test -f 'libs/xmpwriter.c'; then $(CYGPATH_W) 'libs/xmpwriter.c'; else $(CYGPATH_W) '$(srcdir)/libs/xmpwriter.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo $(DEPDIR)/libs_xmpwriter-xmpwriter.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libs/xmpwriter.c' object='libs_xmpwriter-xmpwriter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_xmpwriter_CFLAGS) $(CFLAGS) -c -o libs_xmpwriter-xmpwriter.obj `if test -f 'libs/xmpwriter.c'; then $(CYGPATH_W) 'libs/xmpwriter.c'; else $(CYGPATH_W) '$(srcdir)/libs/xmpwriter.c'; fi`
+
+orc_adder-adder.o: orc/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_adder_CFLAGS) $(CFLAGS) -MT orc_adder-adder.o -MD -MP -MF $(DEPDIR)/orc_adder-adder.Tpo -c -o orc_adder-adder.o `test -f 'orc/adder.c' || echo '$(srcdir)/'`orc/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_adder-adder.Tpo $(DEPDIR)/orc_adder-adder.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/adder.c' object='orc_adder-adder.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_adder_CFLAGS) $(CFLAGS) -c -o orc_adder-adder.o `test -f 'orc/adder.c' || echo '$(srcdir)/'`orc/adder.c
+
+orc_adder-adder.obj: orc/adder.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_adder_CFLAGS) $(CFLAGS) -MT orc_adder-adder.obj -MD -MP -MF $(DEPDIR)/orc_adder-adder.Tpo -c -o orc_adder-adder.obj `if test -f 'orc/adder.c'; then $(CYGPATH_W) 'orc/adder.c'; else $(CYGPATH_W) '$(srcdir)/orc/adder.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_adder-adder.Tpo $(DEPDIR)/orc_adder-adder.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/adder.c' object='orc_adder-adder.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_adder_CFLAGS) $(CFLAGS) -c -o orc_adder-adder.obj `if test -f 'orc/adder.c'; then $(CYGPATH_W) 'orc/adder.c'; else $(CYGPATH_W) '$(srcdir)/orc/adder.c'; fi`
+
+orc_audioconvert-audioconvert.o: orc/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -MT orc_audioconvert-audioconvert.o -MD -MP -MF $(DEPDIR)/orc_audioconvert-audioconvert.Tpo -c -o orc_audioconvert-audioconvert.o `test -f 'orc/audioconvert.c' || echo '$(srcdir)/'`orc/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_audioconvert-audioconvert.Tpo $(DEPDIR)/orc_audioconvert-audioconvert.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/audioconvert.c' object='orc_audioconvert-audioconvert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -c -o orc_audioconvert-audioconvert.o `test -f 'orc/audioconvert.c' || echo '$(srcdir)/'`orc/audioconvert.c
+
+orc_audioconvert-audioconvert.obj: orc/audioconvert.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -MT orc_audioconvert-audioconvert.obj -MD -MP -MF $(DEPDIR)/orc_audioconvert-audioconvert.Tpo -c -o orc_audioconvert-audioconvert.obj `if test -f 'orc/audioconvert.c'; then $(CYGPATH_W) 'orc/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/orc/audioconvert.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_audioconvert-audioconvert.Tpo $(DEPDIR)/orc_audioconvert-audioconvert.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/audioconvert.c' object='orc_audioconvert-audioconvert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -c -o orc_audioconvert-audioconvert.obj `if test -f 'orc/audioconvert.c'; then $(CYGPATH_W) 'orc/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/orc/audioconvert.c'; fi`
+
+orc_videoscale-videoscale.o: orc/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc_videoscale-videoscale.o -MD -MP -MF $(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_videoscale-videoscale.Tpo $(DEPDIR)/orc_videoscale-videoscale.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/videoscale.c' object='orc_videoscale-videoscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c
+
+orc_videoscale-videoscale.obj: orc/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc_videoscale-videoscale.obj -MD -MP -MF $(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_videoscale-videoscale.Tpo $(DEPDIR)/orc_videoscale-videoscale.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/videoscale.c' object='orc_videoscale-videoscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi`
+
+orc_videotestsrc-videotestsrc.o: orc/videotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -MT orc_videotestsrc-videotestsrc.o -MD -MP -MF $(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo -c -o orc_videotestsrc-videotestsrc.o `test -f 'orc/videotestsrc.c' || echo '$(srcdir)/'`orc/videotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo $(DEPDIR)/orc_videotestsrc-videotestsrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/videotestsrc.c' object='orc_videotestsrc-videotestsrc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -c -o orc_videotestsrc-videotestsrc.o `test -f 'orc/videotestsrc.c' || echo '$(srcdir)/'`orc/videotestsrc.c
+
+orc_videotestsrc-videotestsrc.obj: orc/videotestsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -MT orc_videotestsrc-videotestsrc.obj -MD -MP -MF $(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo -c -o orc_videotestsrc-videotestsrc.obj `if test -f 'orc/videotestsrc.c'; then $(CYGPATH_W) 'orc/videotestsrc.c'; else $(CYGPATH_W) '$(srcdir)/orc/videotestsrc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo $(DEPDIR)/orc_videotestsrc-videotestsrc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/videotestsrc.c' object='orc_videotestsrc-videotestsrc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -c -o orc_videotestsrc-videotestsrc.obj `if test -f 'orc/videotestsrc.c'; then $(CYGPATH_W) 'orc/videotestsrc.c'; else $(CYGPATH_W) '$(srcdir)/orc/videotestsrc.c'; fi`
+
+orc_volume-volume.o: orc/volume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_volume_CFLAGS) $(CFLAGS) -MT orc_volume-volume.o -MD -MP -MF $(DEPDIR)/orc_volume-volume.Tpo -c -o orc_volume-volume.o `test -f 'orc/volume.c' || echo '$(srcdir)/'`orc/volume.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_volume-volume.Tpo $(DEPDIR)/orc_volume-volume.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/volume.c' object='orc_volume-volume.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_volume_CFLAGS) $(CFLAGS) -c -o orc_volume-volume.o `test -f 'orc/volume.c' || echo '$(srcdir)/'`orc/volume.c
+
+orc_volume-volume.obj: orc/volume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_volume_CFLAGS) $(CFLAGS) -MT orc_volume-volume.obj -MD -MP -MF $(DEPDIR)/orc_volume-volume.Tpo -c -o orc_volume-volume.obj `if test -f 'orc/volume.c'; then $(CYGPATH_W) 'orc/volume.c'; else $(CYGPATH_W) '$(srcdir)/orc/volume.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/orc_volume-volume.Tpo $(DEPDIR)/orc_volume-volume.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='orc/volume.c' object='orc_volume-volume.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_volume_CFLAGS) $(CFLAGS) -c -o orc_volume-volume.obj `if test -f 'orc/volume.c'; then $(CYGPATH_W) 'orc/volume.c'; else $(CYGPATH_W) '$(srcdir)/orc/volume.c'; fi`
+
+pipelines_gio-gio.o: pipelines/gio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_gio_CFLAGS) $(CFLAGS) -MT pipelines_gio-gio.o -MD -MP -MF $(DEPDIR)/pipelines_gio-gio.Tpo -c -o pipelines_gio-gio.o `test -f 'pipelines/gio.c' || echo '$(srcdir)/'`pipelines/gio.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_gio-gio.Tpo $(DEPDIR)/pipelines_gio-gio.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/gio.c' object='pipelines_gio-gio.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_gio_CFLAGS) $(CFLAGS) -c -o pipelines_gio-gio.o `test -f 'pipelines/gio.c' || echo '$(srcdir)/'`pipelines/gio.c
+
+pipelines_gio-gio.obj: pipelines/gio.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_gio_CFLAGS) $(CFLAGS) -MT pipelines_gio-gio.obj -MD -MP -MF $(DEPDIR)/pipelines_gio-gio.Tpo -c -o pipelines_gio-gio.obj `if test -f 'pipelines/gio.c'; then $(CYGPATH_W) 'pipelines/gio.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/gio.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_gio-gio.Tpo $(DEPDIR)/pipelines_gio-gio.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/gio.c' object='pipelines_gio-gio.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_gio_CFLAGS) $(CFLAGS) -c -o pipelines_gio-gio.obj `if test -f 'pipelines/gio.c'; then $(CYGPATH_W) 'pipelines/gio.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/gio.c'; fi`
+
+pipelines_oggmux-oggmux.o: pipelines/oggmux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_oggmux_CFLAGS) $(CFLAGS) -MT pipelines_oggmux-oggmux.o -MD -MP -MF $(DEPDIR)/pipelines_oggmux-oggmux.Tpo -c -o pipelines_oggmux-oggmux.o `test -f 'pipelines/oggmux.c' || echo '$(srcdir)/'`pipelines/oggmux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_oggmux-oggmux.Tpo $(DEPDIR)/pipelines_oggmux-oggmux.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/oggmux.c' object='pipelines_oggmux-oggmux.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_oggmux_CFLAGS) $(CFLAGS) -c -o pipelines_oggmux-oggmux.o `test -f 'pipelines/oggmux.c' || echo '$(srcdir)/'`pipelines/oggmux.c
+
+pipelines_oggmux-oggmux.obj: pipelines/oggmux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_oggmux_CFLAGS) $(CFLAGS) -MT pipelines_oggmux-oggmux.obj -MD -MP -MF $(DEPDIR)/pipelines_oggmux-oggmux.Tpo -c -o pipelines_oggmux-oggmux.obj `if test -f 'pipelines/oggmux.c'; then $(CYGPATH_W) 'pipelines/oggmux.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/oggmux.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_oggmux-oggmux.Tpo $(DEPDIR)/pipelines_oggmux-oggmux.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/oggmux.c' object='pipelines_oggmux-oggmux.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_oggmux_CFLAGS) $(CFLAGS) -c -o pipelines_oggmux-oggmux.obj `if test -f 'pipelines/oggmux.c'; then $(CYGPATH_W) 'pipelines/oggmux.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/oggmux.c'; fi`
+
+pipelines_simple_launch_lines-simple-launch-lines.o: pipelines/simple-launch-lines.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -MT pipelines_simple_launch_lines-simple-launch-lines.o -MD -MP -MF $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Tpo -c -o pipelines_simple_launch_lines-simple-launch-lines.o `test -f 'pipelines/simple-launch-lines.c' || echo '$(srcdir)/'`pipelines/simple-launch-lines.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Tpo $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/simple-launch-lines.c' object='pipelines_simple_launch_lines-simple-launch-lines.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -c -o pipelines_simple_launch_lines-simple-launch-lines.o `test -f 'pipelines/simple-launch-lines.c' || echo '$(srcdir)/'`pipelines/simple-launch-lines.c
+
+pipelines_simple_launch_lines-simple-launch-lines.obj: pipelines/simple-launch-lines.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -MT pipelines_simple_launch_lines-simple-launch-lines.obj -MD -MP -MF $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Tpo -c -o pipelines_simple_launch_lines-simple-launch-lines.obj `if test -f 'pipelines/simple-launch-lines.c'; then $(CYGPATH_W) 'pipelines/simple-launch-lines.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/simple-launch-lines.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Tpo $(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/simple-launch-lines.c' object='pipelines_simple_launch_lines-simple-launch-lines.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -c -o pipelines_simple_launch_lines-simple-launch-lines.obj `if test -f 'pipelines/simple-launch-lines.c'; then $(CYGPATH_W) 'pipelines/simple-launch-lines.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/simple-launch-lines.c'; fi`
+
+pipelines_theoraenc-theoraenc.o: pipelines/theoraenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -MT pipelines_theoraenc-theoraenc.o -MD -MP -MF $(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo -c -o pipelines_theoraenc-theoraenc.o `test -f 'pipelines/theoraenc.c' || echo '$(srcdir)/'`pipelines/theoraenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo $(DEPDIR)/pipelines_theoraenc-theoraenc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/theoraenc.c' object='pipelines_theoraenc-theoraenc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -c -o pipelines_theoraenc-theoraenc.o `test -f 'pipelines/theoraenc.c' || echo '$(srcdir)/'`pipelines/theoraenc.c
+
+pipelines_theoraenc-theoraenc.obj: pipelines/theoraenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -MT pipelines_theoraenc-theoraenc.obj -MD -MP -MF $(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo -c -o pipelines_theoraenc-theoraenc.obj `if test -f 'pipelines/theoraenc.c'; then $(CYGPATH_W) 'pipelines/theoraenc.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/theoraenc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo $(DEPDIR)/pipelines_theoraenc-theoraenc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/theoraenc.c' object='pipelines_theoraenc-theoraenc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -c -o pipelines_theoraenc-theoraenc.obj `if test -f 'pipelines/theoraenc.c'; then $(CYGPATH_W) 'pipelines/theoraenc.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/theoraenc.c'; fi`
+
+pipelines_vorbisdec-vorbisdec.o: pipelines/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisdec_CFLAGS) $(CFLAGS) -MT pipelines_vorbisdec-vorbisdec.o -MD -MP -MF $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Tpo -c -o pipelines_vorbisdec-vorbisdec.o `test -f 'pipelines/vorbisdec.c' || echo '$(srcdir)/'`pipelines/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Tpo $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/vorbisdec.c' object='pipelines_vorbisdec-vorbisdec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisdec_CFLAGS) $(CFLAGS) -c -o pipelines_vorbisdec-vorbisdec.o `test -f 'pipelines/vorbisdec.c' || echo '$(srcdir)/'`pipelines/vorbisdec.c
+
+pipelines_vorbisdec-vorbisdec.obj: pipelines/vorbisdec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisdec_CFLAGS) $(CFLAGS) -MT pipelines_vorbisdec-vorbisdec.obj -MD -MP -MF $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Tpo -c -o pipelines_vorbisdec-vorbisdec.obj `if test -f 'pipelines/vorbisdec.c'; then $(CYGPATH_W) 'pipelines/vorbisdec.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/vorbisdec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Tpo $(DEPDIR)/pipelines_vorbisdec-vorbisdec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/vorbisdec.c' object='pipelines_vorbisdec-vorbisdec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisdec_CFLAGS) $(CFLAGS) -c -o pipelines_vorbisdec-vorbisdec.obj `if test -f 'pipelines/vorbisdec.c'; then $(CYGPATH_W) 'pipelines/vorbisdec.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/vorbisdec.c'; fi`
+
+pipelines_vorbisenc-vorbisenc.o: pipelines/vorbisenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisenc_CFLAGS) $(CFLAGS) -MT pipelines_vorbisenc-vorbisenc.o -MD -MP -MF $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Tpo -c -o pipelines_vorbisenc-vorbisenc.o `test -f 'pipelines/vorbisenc.c' || echo '$(srcdir)/'`pipelines/vorbisenc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Tpo $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/vorbisenc.c' object='pipelines_vorbisenc-vorbisenc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisenc_CFLAGS) $(CFLAGS) -c -o pipelines_vorbisenc-vorbisenc.o `test -f 'pipelines/vorbisenc.c' || echo '$(srcdir)/'`pipelines/vorbisenc.c
+
+pipelines_vorbisenc-vorbisenc.obj: pipelines/vorbisenc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisenc_CFLAGS) $(CFLAGS) -MT pipelines_vorbisenc-vorbisenc.obj -MD -MP -MF $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Tpo -c -o pipelines_vorbisenc-vorbisenc.obj `if test -f 'pipelines/vorbisenc.c'; then $(CYGPATH_W) 'pipelines/vorbisenc.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/vorbisenc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Tpo $(DEPDIR)/pipelines_vorbisenc-vorbisenc.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pipelines/vorbisenc.c' object='pipelines_vorbisenc-vorbisenc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_vorbisenc_CFLAGS) $(CFLAGS) -c -o pipelines_vorbisenc-vorbisenc.obj `if test -f 'pipelines/vorbisenc.c'; then $(CYGPATH_W) 'pipelines/vorbisenc.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/vorbisenc.c'; fi`
+
+.cc.o:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+gstlibscpp.o: libs/gstlibscpp.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gstlibscpp.o -MD -MP -MF $(DEPDIR)/gstlibscpp.Tpo -c -o gstlibscpp.o `test -f 'libs/gstlibscpp.cc' || echo '$(srcdir)/'`libs/gstlibscpp.cc
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gstlibscpp.Tpo $(DEPDIR)/gstlibscpp.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='libs/gstlibscpp.cc' object='gstlibscpp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gstlibscpp.o `test -f 'libs/gstlibscpp.cc' || echo '$(srcdir)/'`libs/gstlibscpp.cc
+
+gstlibscpp.obj: libs/gstlibscpp.cc
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gstlibscpp.obj -MD -MP -MF $(DEPDIR)/gstlibscpp.Tpo -c -o gstlibscpp.obj `if test -f 'libs/gstlibscpp.cc'; then $(CYGPATH_W) 'libs/gstlibscpp.cc'; else $(CYGPATH_W) '$(srcdir)/libs/gstlibscpp.cc'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gstlibscpp.Tpo $(DEPDIR)/gstlibscpp.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='libs/gstlibscpp.cc' object='gstlibscpp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gstlibscpp.obj `if test -f 'libs/gstlibscpp.cc'; then $(CYGPATH_W) 'libs/gstlibscpp.cc'; else $(CYGPATH_W) '$(srcdir)/libs/gstlibscpp.cc'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf elements/.libs elements/_libs
+	-rm -rf generic/.libs generic/_libs
+	-rm -rf gst/.libs gst/_libs
+	-rm -rf libs/.libs libs/_libs
+	-rm -rf orc/.libs orc/_libs
+	-rm -rf pipelines/.libs pipelines/_libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	$(am__tty_colors); \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=XPASS; \
+	      ;; \
+	      *) \
+		col=$$grn; res=PASS; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *[\ \	]$$tst[\ \	]*) \
+		xfail=`expr $$xfail + 1`; \
+		col=$$lgn; res=XFAIL; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		col=$$red; res=FAIL; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      col=$$blu; res=SKIP; \
+	    fi; \
+	    echo "$${col}$$res$${std}: $$tst"; \
+	  done; \
+	  if test "$$all" -eq 1; then \
+	    tests="test"; \
+	    All=""; \
+	  else \
+	    tests="tests"; \
+	    All="All "; \
+	  fi; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="$$All$$all $$tests passed"; \
+	    else \
+	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all $$tests failed"; \
+	    else \
+	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    if test "$$skip" -eq 1; then \
+	      skipped="($$skip test was not run)"; \
+	    else \
+	      skipped="($$skip tests were not run)"; \
+	    fi; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  if test "$$failed" -eq 0; then \
+	    echo "$$grn$$dashes"; \
+	  else \
+	    echo "$$red$$dashes"; \
+	  fi; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes$$std"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f elements/$(am__dirstamp)
+	-rm -f generic/$(am__dirstamp)
+	-rm -f gst/$(am__dirstamp)
+	-rm -f libs/$(am__dirstamp)
+	-rm -f orc/$(am__dirstamp)
+	-rm -f pipelines/$(am__dirstamp)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+	clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+	clean-noinstPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+# keep target around, since it's referenced in the modules' Makefiles
+clean-local-check:
+	@echo
+
+# hangs spectacularly on some machines, so let's not do this by default yet
+@HAVE_VALGRIND_TRUE@check-valgrind:
+@HAVE_VALGRIND_TRUE@	$(MAKE) valgrind
+@HAVE_VALGRIND_FALSE@check-valgrind:
+@HAVE_VALGRIND_FALSE@	@true
+
+# run any given test by running make test.check
+# if the test fails, run it again at at least debug level 2
+%.check: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$* ||							\
+	$(TESTS_ENVIRONMENT)					\
+	GST_DEBUG=$$GST_DEBUG,*:2				\
+	CK_DEFAULT_TIMEOUT=20					\
+	$*
+
+# run any given test in a loop
+%.torture: %
+	@for i in `seq 1 $(LOOPS)`; do				\
+	$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$*; done
+
+# run any given test in an infinite loop
+%.forever: %
+	@while true; do						\
+	$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=20					\
+	$* || break; done
+
+# valgrind any given test by running make test.valgrind
+%.valgrind: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=360					\
+	G_SLICE=always-malloc					\
+	$(LIBTOOL) --mode=execute				\
+	$(VALGRIND_PATH) -q					\
+	$(foreach s,$(SUPPRESSIONS),--suppressions=$(s))	\
+	--tool=memcheck --leak-check=full --trace-children=yes	\
+	--leak-resolution=high --num-callers=20			\
+	./$* 2>&1 | tee valgrind.log
+	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
+	    rm valgrind.log;					\
+	    exit 1;						\
+	fi
+	@rm valgrind.log
+
+# valgrind any given test and generate suppressions for it
+%.valgrind.gen-suppressions: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_DEFAULT_TIMEOUT=360					\
+	G_SLICE=always-malloc					\
+	$(LIBTOOL) --mode=execute				\
+	$(VALGRIND_PATH) -q 					\
+	$(foreach s,$(SUPPRESSIONS),--suppressions=$(s))	\
+	--tool=memcheck --leak-check=full --trace-children=yes	\
+	--leak-resolution=high --num-callers=20			\
+	--gen-suppressions=all					\
+	./$* 2>&1 | tee suppressions.log
+
+# valgrind any given test until failure by running make test.valgrind-forever
+%.valgrind-forever: %
+	@while $(MAKE) $*.valgrind; do				\
+	  true; done
+
+# gdb any given test by running make test.gdb
+%.gdb: %
+	@$(TESTS_ENVIRONMENT)					\
+	CK_FORK=no						\
+	$(LIBTOOL) --mode=execute				\
+	gdb $*
+
+# torture tests
+torture: $(TESTS)
+	-rm test-registry.xml
+	@echo "Torturing tests ..."
+	@for i in `seq 1 $(LOOPS)`; do				\
+		$(MAKE) check ||				\
+		(echo "Failure after $$i runs"; exit 1) ||	\
+		exit 1;						\
+	done
+	@banner="All $(LOOPS) loops passed";			\
+	dashes=`echo "$$banner" | sed s/./=/g`;			\
+	echo $$dashes; echo $$banner; echo $$dashes
+
+# forever tests
+forever: $(TESTS)
+	-rm test-registry.xml
+	@echo "Forever tests ..."
+	@while true; do						\
+		$(MAKE) check ||				\
+		(echo "Failure"; exit 1) ||			\
+		exit 1;						\
+	done
+
+# valgrind all tests
+valgrind: $(TESTS)
+	@echo "Valgrinding tests ..."
+	@failed=0;							\
+	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
+		$(MAKE) $$t.valgrind;					\
+		if test "$$?" -ne 0; then                               \
+			echo "Valgrind error for test $$t";		\
+			failed=`expr $$failed + 1`;			\
+			whicht="$$whicht $$t";				\
+		fi;							\
+	done;								\
+	if test "$$failed" -ne 0; then					\
+		echo "$$failed tests had leaks or errors under valgrind:";	\
+		echo "$$whicht";					\
+		false;							\
+	fi
+
+# valgrind all tests and generate suppressions
+valgrind.gen-suppressions: $(TESTS)
+	@echo "Valgrinding tests ..."
+	@failed=0;							\
+	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
+		$(MAKE) $$t.valgrind.gen-suppressions;			\
+		if test "$$?" -ne 0; then                               \
+			echo "Valgrind error for test $$t";		\
+			failed=`expr $$failed + 1`;			\
+			whicht="$$whicht $$t";				\
+		fi;							\
+	done;								\
+	if test "$$failed" -ne 0; then					\
+		echo "$$failed tests had leaks or errors under valgrind:";	\
+		echo "$$whicht";					\
+		false;							\
+	fi
+inspect:
+	@echo "Inspecting features ..."
+	@for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
+	  | cut -d: -f2`;						\
+	  do echo Inspecting $$e;					\
+	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
+
+help:
+	@echo
+	@echo "make check                         -- run all checks"
+	@echo "make torture                       -- run all checks $(LOOPS) times"
+	@echo "make (dir)/(test).check            -- run the given check once"
+	@echo "make (dir)/(test).forever          -- run the given check forever"
+	@echo "make (dir)/(test).torture          -- run the given check $(LOOPS) times"
+	@echo
+	@echo "make (dir)/(test).gdb              -- start up gdb for the given test"
+	@echo
+	@echo "make valgrind                      -- valgrind all tests"
+	@echo "make valgrind.gen-suppressions     -- generate suppressions for all tests"
+	@echo "                                      and save to suppressions.log"
+	@echo "make (dir)/(test).valgrind         -- valgrind the given test"
+	@echo "make (dir)/(test).valgrind-forever -- valgrind the given test forever"
+	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
+	@echo "                                               and save to suppressions.log"
+	@echo "make inspect                       -- inspect all plugin features"
+	@echo
+	@echo
+	@echo "Additionally, you can use the GST_CHECKS environment variable to"
+	@echo "specify which test(s) should be run. This is useful if you are"
+	@echo "debugging a failure in one particular test, or want to reproduce"
+	@echo "a race condition in a single test."
+	@echo
+	@echo "Examples:"
+	@echo
+	@echo "  GST_CHECKS=test_this,test_that  make element/foobar.check"
+	@echo "  GST_CHECKS=test_many_threads    make element/foobar.forever"
+	@echo
+
+clean-local: clean-local-check clean-local-orc
+
+$(CHECK_REGISTRY):
+	$(TESTS_ENVIRONMENT)
+
+orc/adder.c: $(top_srcdir)/gst/adder/gstadderorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/audioconvert.c: $(top_srcdir)/gst/audioconvert/gstaudioconvertorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/volume.c: $(top_srcdir)/gst/volume/gstvolumeorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc
+	$(MKDIR_P) orc/
+	$(ORCC) --test -o $@ $<
+
+clean-local-orc:
+	rm -rf orc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/check/elements/adder.c b/tests/check/elements/adder.c
new file mode 100644
index 0000000..6daa6c7
--- /dev/null
+++ b/tests/check/elements/adder.c
@@ -0,0 +1,873 @@
+/* GStreamer
+ *
+ * unit test for adder
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_VALGRIND
+# include <valgrind/valgrind.h>
+#endif
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstconsistencychecker.h>
+
+static GMainLoop *main_loop;
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * bin)
+{
+  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
+      GST_MESSAGE_SRC (message), message);
+
+  switch (message->type) {
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (main_loop);
+      break;
+    case GST_MESSAGE_WARNING:{
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_warning (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+      break;
+    }
+    case GST_MESSAGE_ERROR:{
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_error (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+      g_main_loop_quit (main_loop);
+      break;
+    }
+    default:
+      break;
+  }
+}
+
+
+static GstFormat format = GST_FORMAT_UNDEFINED;
+static gint64 position = -1;
+
+static void
+test_event_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * bin)
+{
+  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
+      GST_MESSAGE_SRC (message), message);
+
+  switch (message->type) {
+    case GST_MESSAGE_SEGMENT_DONE:
+      gst_message_parse_segment_done (message, &format, &position);
+      GST_INFO ("received segment_done : %" G_GINT64_FORMAT, position);
+      g_main_loop_quit (main_loop);
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
+
+
+GST_START_TEST (test_event)
+{
+  GstElement *bin, *src1, *src2, *adder, *sink;
+  GstBus *bus;
+  GstEvent *seek_event;
+  gboolean res;
+  GstPad *srcpad;
+  GstStreamConsistency *consist;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  /* FIXME, fakesrc with default setting will produce 0 sized
+   * buffers and incompatible caps for adder that will make
+   * adder EOS and error out */
+  src1 = gst_element_factory_make ("audiotestsrc", "src1");
+  g_object_set (src1, "wave", 4, NULL); /* silence */
+  src2 = gst_element_factory_make ("audiotestsrc", "src2");
+  g_object_set (src2, "wave", 4, NULL); /* silence */
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src1, src2, adder, sink, NULL);
+
+  res = gst_element_link (src1, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (src2, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  consist = gst_consistency_checker_new (srcpad);
+  gst_object_unref (srcpad);
+
+  seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_SEGMENT | GST_SEEK_FLAG_FLUSH,
+      GST_SEEK_TYPE_SET, (GstClockTime) 0,
+      GST_SEEK_TYPE_SET, (GstClockTime) 2 * GST_SECOND);
+
+  format = GST_FORMAT_UNDEFINED;
+  position = -1;
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::segment-done",
+      (GCallback) test_event_message_received, bin);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  GST_INFO ("starting test");
+
+  /* prepare playing */
+  res = gst_element_set_state (bin, GST_STATE_PAUSED);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* wait for completion */
+  res = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  res = gst_element_send_event (bin, seek_event);
+  fail_unless (res == TRUE, NULL);
+
+  /* run pipeline */
+  res = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  g_main_loop_run (main_loop);
+
+  res = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  fail_unless (position == 2 * GST_SECOND, NULL);
+
+  /* cleanup */
+  g_main_loop_unref (main_loop);
+  gst_consistency_checker_free (consist);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+static guint play_count = 0;
+static GstEvent *play_seek_event = NULL;
+
+static void
+test_play_twice_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * bin)
+{
+  gboolean res;
+
+  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
+      GST_MESSAGE_SRC (message), message);
+
+  switch (message->type) {
+    case GST_MESSAGE_SEGMENT_DONE:
+      play_count++;
+      if (play_count == 1) {
+        res = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_READY);
+        fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+        /* prepare playing again */
+        res = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PAUSED);
+        fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+        /* wait for completion */
+        res =
+            gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+            GST_CLOCK_TIME_NONE);
+        fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+        res = gst_element_send_event (GST_ELEMENT (bin),
+            gst_event_ref (play_seek_event));
+        fail_unless (res == TRUE, NULL);
+
+        res = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING);
+        fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+      } else {
+        g_main_loop_quit (main_loop);
+      }
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
+
+
+GST_START_TEST (test_play_twice)
+{
+  GstElement *bin, *src1, *src2, *adder, *sink;
+  GstBus *bus;
+  gboolean res;
+  GstPad *srcpad;
+  GstStreamConsistency *consist;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  src1 = gst_element_factory_make ("audiotestsrc", "src1");
+  g_object_set (src1, "wave", 4, NULL); /* silence */
+  src2 = gst_element_factory_make ("audiotestsrc", "src2");
+  g_object_set (src2, "wave", 4, NULL); /* silence */
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src1, src2, adder, sink, NULL);
+
+  res = gst_element_link (src1, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (src2, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  consist = gst_consistency_checker_new (srcpad);
+  gst_object_unref (srcpad);
+
+  play_seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_SEGMENT | GST_SEEK_FLAG_FLUSH,
+      GST_SEEK_TYPE_SET, (GstClockTime) 0,
+      GST_SEEK_TYPE_SET, (GstClockTime) 2 * GST_SECOND);
+
+  play_count = 0;
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::segment-done",
+      (GCallback) test_play_twice_message_received, bin);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  GST_INFO ("starting test");
+
+  /* prepare playing */
+  res = gst_element_set_state (bin, GST_STATE_PAUSED);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* wait for completion */
+  res =
+      gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+      GST_CLOCK_TIME_NONE);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  res = gst_element_send_event (bin, gst_event_ref (play_seek_event));
+  fail_unless (res == TRUE, NULL);
+
+  GST_INFO ("seeked");
+
+  /* run pipeline */
+  res = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  g_main_loop_run (main_loop);
+
+  res = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  fail_unless (play_count == 2, NULL);
+
+  /* cleanup */
+  g_main_loop_unref (main_loop);
+  gst_consistency_checker_free (consist);
+  gst_event_ref (play_seek_event);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_play_twice_then_add_and_play_again)
+{
+  GstElement *bin, *src1, *src2, *src3, *adder, *sink;
+  GstBus *bus;
+  gboolean res;
+  gint i;
+  GstPad *srcpad;
+  GstStreamConsistency *consist;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  src1 = gst_element_factory_make ("audiotestsrc", "src1");
+  g_object_set (src1, "wave", 4, NULL); /* silence */
+  src2 = gst_element_factory_make ("audiotestsrc", "src2");
+  g_object_set (src2, "wave", 4, NULL); /* silence */
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src1, src2, adder, sink, NULL);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  consist = gst_consistency_checker_new (srcpad);
+  gst_object_unref (srcpad);
+
+  res = gst_element_link (src1, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (src2, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  play_seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_SEGMENT | GST_SEEK_FLAG_FLUSH,
+      GST_SEEK_TYPE_SET, (GstClockTime) 0,
+      GST_SEEK_TYPE_SET, (GstClockTime) 2 * GST_SECOND);
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::segment-done",
+      (GCallback) test_play_twice_message_received, bin);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  /* run it twice */
+  for (i = 0; i < 2; i++) {
+    play_count = 0;
+
+    GST_INFO ("starting test-loop %d", i);
+
+    /* prepare playing */
+    res = gst_element_set_state (bin, GST_STATE_PAUSED);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    /* wait for completion */
+    res =
+        gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+        GST_CLOCK_TIME_NONE);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    res = gst_element_send_event (bin, gst_event_ref (play_seek_event));
+    fail_unless (res == TRUE, NULL);
+
+    GST_INFO ("seeked");
+
+    /* run pipeline */
+    res = gst_element_set_state (bin, GST_STATE_PLAYING);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    g_main_loop_run (main_loop);
+
+    res = gst_element_set_state (bin, GST_STATE_READY);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    fail_unless (play_count == 2, NULL);
+
+    /* plug another source */
+    if (i == 0) {
+      src3 = gst_element_factory_make ("audiotestsrc", "src3");
+      g_object_set (src3, "wave", 4, NULL);     /* silence */
+      gst_bin_add (GST_BIN (bin), src3);
+
+      res = gst_element_link (src3, adder);
+      fail_unless (res == TRUE, NULL);
+    }
+
+    gst_consistency_checker_reset (consist);
+  }
+
+  res = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* cleanup */
+  g_main_loop_unref (main_loop);
+  gst_event_ref (play_seek_event);
+  gst_consistency_checker_free (consist);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+
+static void
+test_live_seeking_eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * bin)
+{
+  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
+      GST_MESSAGE_SRC (message), message);
+
+  switch (message->type) {
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (main_loop);
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+}
+
+
+/* test failing seeks on live-sources */
+GST_START_TEST (test_live_seeking)
+{
+  GstElement *bin, *src1, *src2, *ac1, *ac2, *adder, *sink;
+  GstBus *bus;
+  gboolean res;
+  GstPad *srcpad;
+  gint i;
+  GstStreamConsistency *consist;
+
+  GST_INFO ("preparing test");
+  main_loop = NULL;
+  play_seek_event = NULL;
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  /* normal audiosources behave differently than audiotestsrc */
+#if 0
+  src1 = gst_element_factory_make ("audiotestsrc", "src1");
+  g_object_set (src1, "wave", 4, "is-live", TRUE, NULL);        /* silence */
+#else
+  src1 = gst_element_factory_make ("alsasrc", "src1");
+  if (!src1) {
+    GST_INFO ("no audiosrc, skipping");
+    goto cleanup;
+  }
+  /* Test that the audio source can get to paused, else skip */
+  res = gst_element_set_state (src1, GST_STATE_PAUSED);
+  (void) gst_element_set_state (src1, GST_STATE_NULL);
+  gst_object_unref (src1);
+
+  if (res == GST_STATE_CHANGE_FAILURE)
+    goto cleanup;
+  src1 = gst_element_factory_make ("alsasrc", "src1");
+
+  /* live sources ignore seeks, force eos after 2 sec (4 buffers half second
+   * each) - don't use autoaudiosrc, as then we can't set anything here */
+  g_object_set (src1, "num-buffers", 4, "blocksize", 44100, NULL);
+#endif
+  ac1 = gst_element_factory_make ("audioconvert", "ac1");
+  src2 = gst_element_factory_make ("audiotestsrc", "src2");
+  g_object_set (src2, "wave", 4, NULL); /* silence */
+  ac2 = gst_element_factory_make ("audioconvert", "ac2");
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src1, ac1, src2, ac2, adder, sink, NULL);
+
+  res = gst_element_link (src1, ac1);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (ac1, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (src2, ac2);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (ac2, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  play_seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_FLUSH,
+      GST_SEEK_TYPE_SET, (GstClockTime) 0,
+      GST_SEEK_TYPE_SET, (GstClockTime) 2 * GST_SECOND);
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos",
+      (GCallback) test_live_seeking_eos_message_received, bin);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  consist = gst_consistency_checker_new (srcpad);
+  gst_object_unref (srcpad);
+
+  GST_INFO ("starting test");
+
+  /* run it twice */
+  for (i = 0; i < 2; i++) {
+
+    GST_INFO ("starting test-loop %d", i);
+
+    /* prepare playing */
+    res = gst_element_set_state (bin, GST_STATE_PAUSED);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE);
+
+    /* wait for completion */
+    res =
+        gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+        GST_CLOCK_TIME_NONE);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    res = gst_element_send_event (bin, gst_event_ref (play_seek_event));
+#if 1
+    fail_unless (res == TRUE, NULL);
+#else
+    /* adder is picky, if a single seek fails it totaly fails */
+    fail_unless (res == FALSE, NULL);
+#endif
+
+    GST_INFO ("seeked");
+
+    /* run pipeline */
+    res = gst_element_set_state (bin, GST_STATE_PLAYING);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    GST_INFO ("playing");
+
+    g_main_loop_run (main_loop);
+
+    res = gst_element_set_state (bin, GST_STATE_NULL);
+    fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+    gst_consistency_checker_reset (consist);
+  }
+
+  /* cleanup */
+cleanup:
+  GST_INFO ("cleaning up");
+  if (main_loop)
+    g_main_loop_unref (main_loop);
+  if (play_seek_event)
+    gst_event_unref (play_seek_event);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+/* check if adding pads work as expected */
+GST_START_TEST (test_add_pad)
+{
+  GstElement *bin, *src1, *src2, *adder, *sink;
+  GstBus *bus;
+  GstPad *srcpad;
+  gboolean res;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  src1 = gst_element_factory_make ("audiotestsrc", "src1");
+  g_object_set (src1, "num-buffers", 4, NULL);
+  g_object_set (src1, "wave", 4, NULL); /* silence */
+  src2 = gst_element_factory_make ("audiotestsrc", "src2");
+  /* one buffer less, we connect with 1 buffer of delay */
+  g_object_set (src2, "num-buffers", 3, NULL);
+  g_object_set (src2, "wave", 4, NULL); /* silence */
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src1, adder, sink, NULL);
+
+  res = gst_element_link (src1, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  gst_object_unref (srcpad);
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::segment-done", (GCallback) message_received,
+      bin);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  GST_INFO ("starting test");
+
+  /* prepare playing */
+  res = gst_element_set_state (bin, GST_STATE_PAUSED);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* wait for completion */
+  res =
+      gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+      GST_CLOCK_TIME_NONE);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* add other element */
+  gst_bin_add_many (GST_BIN (bin), src2, NULL);
+
+  /* now link the second element */
+  res = gst_element_link (src2, adder);
+  fail_unless (res == TRUE, NULL);
+
+  /* set to PAUSED as well */
+  res = gst_element_set_state (src2, GST_STATE_PAUSED);
+
+  /* now play all */
+  res = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  g_main_loop_run (main_loop);
+
+  res = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* cleanup */
+  g_main_loop_unref (main_loop);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+/* check if removing pads work as expected */
+GST_START_TEST (test_remove_pad)
+{
+  GstElement *bin, *src, *adder, *sink;
+  GstBus *bus;
+  GstPad *pad, *srcpad;
+  gboolean res;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  src = gst_element_factory_make ("audiotestsrc", "src");
+  g_object_set (src, "num-buffers", 4, NULL);
+  g_object_set (src, "wave", 4, NULL);
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  gst_bin_add_many (GST_BIN (bin), src, adder, sink, NULL);
+
+  res = gst_element_link (src, adder);
+  fail_unless (res == TRUE, NULL);
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  /* create an unconnected sinkpad in adder */
+  pad = gst_element_get_request_pad (adder, "sink%d");
+  fail_if (pad == NULL, NULL);
+
+  srcpad = gst_element_get_static_pad (adder, "src");
+  gst_object_unref (srcpad);
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+  g_signal_connect (bus, "message::segment-done", (GCallback) message_received,
+      bin);
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  GST_INFO ("starting test");
+
+  /* prepare playing, this will not preroll as adder is waiting
+   * on the unconnected sinkpad. */
+  res = gst_element_set_state (bin, GST_STATE_PAUSED);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* wait for completion for one second, will return ASYNC */
+  res = gst_element_get_state (GST_ELEMENT (bin), NULL, NULL, GST_SECOND);
+  fail_unless (res == GST_STATE_CHANGE_ASYNC, NULL);
+
+  /* get rid of the pad now, adder should stop waiting on it and
+   * continue the preroll */
+  gst_element_release_request_pad (adder, pad);
+  gst_object_unref (pad);
+
+  /* wait for completion, should work now */
+  res =
+      gst_element_get_state (GST_ELEMENT (bin), NULL, NULL,
+      GST_CLOCK_TIME_NONE);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* now play all */
+  res = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  g_main_loop_run (main_loop);
+
+  res = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* cleanup */
+  g_main_loop_unref (main_loop);
+  gst_object_unref (G_OBJECT (bus));
+  gst_object_unref (G_OBJECT (bin));
+}
+
+GST_END_TEST;
+
+
+static GstBuffer *handoff_buffer = NULL;
+static void
+handoff_buffer_cb (GstElement * fakesink, GstBuffer * buffer, GstPad * pad,
+    gpointer user_data)
+{
+  GST_DEBUG ("got buffer %p", buffer);
+  gst_buffer_replace (&handoff_buffer, buffer);
+}
+
+/* check if clipping works as expected */
+GST_START_TEST (test_clip)
+{
+  GstSegment segment;
+  GstElement *bin, *adder, *sink;
+  GstBus *bus;
+  GstPad *sinkpad;
+  gboolean res;
+  GstFlowReturn ret;
+  GstEvent *event;
+  GstBuffer *buffer;
+//FIXME:  GstCaps *caps;
+
+  GST_INFO ("preparing test");
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (bin);
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+
+  g_signal_connect (bus, "message::error", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received, bin);
+  g_signal_connect (bus, "message::eos", (GCallback) message_received, bin);
+
+  /* just an adder and a fakesink */
+  adder = gst_element_factory_make ("adder", "adder");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  g_object_set (sink, "signal-handoffs", TRUE, NULL);
+  g_signal_connect (sink, "handoff", (GCallback) handoff_buffer_cb, NULL);
+  gst_bin_add_many (GST_BIN (bin), adder, sink, NULL);
+
+  res = gst_element_link (adder, sink);
+  fail_unless (res == TRUE, NULL);
+
+  /* set to playing */
+  res = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_unless (res != GST_STATE_CHANGE_FAILURE, NULL);
+
+  /* create an unconnected sinkpad in adder, should also automatically activate
+   * the pad */
+  sinkpad = gst_element_get_request_pad (adder, "sink%d");
+  fail_if (sinkpad == NULL, NULL);
+
+  /* send segment to adder */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.start = GST_SECOND;
+  segment.stop = 2 * GST_SECOND;
+  segment.time = 0;
+  event = gst_event_new_segment (&segment);
+  gst_pad_send_event (sinkpad, event);
+
+/*FIXME:  caps = gst_caps_new_simple ("audio/x-raw",
+      "format", G_TYPE_STRING, GST_AUDIO_NE (S16),
+      "rate", G_TYPE_INT, 44100,
+      "channels", G_TYPE_INT, 2, NULL);
+*/
+
+  /* should be clipped and ok */
+  buffer = gst_buffer_new_and_alloc (44100);
+  GST_BUFFER_TIMESTAMP (buffer) = 0;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+//FIXME:  gst_buffer_set_caps (buffer, caps);
+  GST_DEBUG ("pushing buffer %p", buffer);
+  ret = gst_pad_chain (sinkpad, buffer);
+  fail_unless (ret == GST_FLOW_OK);
+  fail_unless (handoff_buffer == NULL);
+
+  /* should be partially clipped */
+  buffer = gst_buffer_new_and_alloc (44100);
+  GST_BUFFER_TIMESTAMP (buffer) = 900 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+//FIXME:  gst_buffer_set_caps (buffer, caps);
+  GST_DEBUG ("pushing buffer %p", buffer);
+  ret = gst_pad_chain (sinkpad, buffer);
+  fail_unless (ret == GST_FLOW_OK);
+  fail_unless (handoff_buffer != NULL);
+  gst_buffer_replace (&handoff_buffer, NULL);
+
+  /* should not be clipped */
+  buffer = gst_buffer_new_and_alloc (44100);
+  GST_BUFFER_TIMESTAMP (buffer) = 1 * GST_SECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+//FIXME:  gst_buffer_set_caps (buffer, caps);
+  GST_DEBUG ("pushing buffer %p", buffer);
+  ret = gst_pad_chain (sinkpad, buffer);
+  fail_unless (ret == GST_FLOW_OK);
+  fail_unless (handoff_buffer != NULL);
+  gst_buffer_replace (&handoff_buffer, NULL);
+
+  /* should be clipped and ok */
+  buffer = gst_buffer_new_and_alloc (44100);
+  GST_BUFFER_TIMESTAMP (buffer) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+//FIXME:  gst_buffer_set_caps (buffer, caps);
+  GST_DEBUG ("pushing buffer %p", buffer);
+  ret = gst_pad_chain (sinkpad, buffer);
+  fail_unless (ret == GST_FLOW_OK);
+  fail_unless (handoff_buffer == NULL);
+
+
+}
+
+GST_END_TEST;
+
+static Suite *
+adder_suite (void)
+{
+  Suite *s = suite_create ("adder");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_event);
+  tcase_add_test (tc_chain, test_play_twice);
+  tcase_add_test (tc_chain, test_play_twice_then_add_and_play_again);
+  tcase_add_test (tc_chain, test_live_seeking);
+  tcase_add_test (tc_chain, test_add_pad);
+  tcase_add_test (tc_chain, test_remove_pad);
+  tcase_add_test (tc_chain, test_clip);
+
+  /* Use a longer timeout */
+#ifdef HAVE_VALGRIND
+  if (RUNNING_ON_VALGRIND) {
+    tcase_set_timeout (tc_chain, 5 * 60);
+  } else
+#endif
+  {
+    /* this is shorter than the default 60 seconds?! (tpm) */
+    /* tcase_set_timeout (tc_chain, 6); */
+  }
+
+  return s;
+}
+
+GST_CHECK_MAIN (adder);
diff --git a/tests/check/elements/alsa.c b/tests/check/elements/alsa.c
new file mode 100644
index 0000000..ddd95c7
--- /dev/null
+++ b/tests/check/elements/alsa.c
@@ -0,0 +1,134 @@
+/* GStreamer
+ *
+ * unit test for alsa elements
+ *
+ * Copyright (C) 2006  Tim-Philipp Müller  <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/interfaces/propertyprobe.h>
+#include <gst/interfaces/mixer.h>
+
+/* just a simple test that runs device probing on
+ * an alsasrc, alsasink and alsamixer instance */
+
+GST_START_TEST (test_device_property_probe)
+{
+  const gchar *elements[] = { "alsasink", "alsasrc", "alsamixer" };
+  gint n;
+
+  for (n = 0; n < G_N_ELEMENTS (elements); ++n) {
+    GstPropertyProbe *probe;
+    GValueArray *arr;
+    GstElement *element;
+    gint i;
+
+    element = gst_element_factory_make (elements[n], elements[n]);
+    fail_unless (element != NULL);
+
+    probe = GST_PROPERTY_PROBE (element);
+    fail_unless (probe != NULL);
+
+    arr = gst_property_probe_probe_and_get_values_name (probe, "device");
+    if (arr) {
+      for (i = 0; i < arr->n_values; ++i) {
+        const gchar *device;
+        GValue *val;
+
+        val = g_value_array_get_nth (arr, i);
+        fail_unless (val != NULL);
+        fail_unless (G_VALUE_HOLDS_STRING (val));
+
+        device = g_value_get_string (val);
+        fail_unless (device != NULL);
+        GST_LOG_OBJECT (element, "device[%d] = %s", i, device);
+      }
+      g_value_array_free (arr);
+    } else {
+      GST_LOG_OBJECT (element, "no devices found");
+    }
+
+    gst_object_unref (element);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_alsa_mixer_track)
+{
+  GstStateChangeReturn state_ret;
+  GstElement *mixer;
+  GList *tracks, *l;
+
+  mixer = gst_element_factory_make ("alsamixer", "alsamixer");
+  fail_unless (mixer != NULL, "Failed to create 'alsamixer' element!");
+
+  state_ret = gst_element_set_state (mixer, GST_STATE_READY);
+  if (state_ret != GST_STATE_CHANGE_SUCCESS) {
+    gst_object_unref (mixer);
+    return;
+  }
+
+  GST_LOG ("opened alsamixer");
+  fail_unless (GST_IS_MIXER (mixer), "is not a GstMixer?!");
+
+  tracks = (GList *) gst_mixer_list_tracks (GST_MIXER (mixer));
+  for (l = tracks; l != NULL; l = l->next) {
+    GstMixerTrack *track;
+    gchar *ulabel = NULL, *label = NULL;
+
+    track = GST_MIXER_TRACK (l->data);
+    g_object_get (track, "label", &label, "untranslated-label", &ulabel, NULL);
+    fail_unless (label == NULL || g_utf8_validate (label, -1, NULL));
+    if (ulabel != NULL) {
+      gchar *p;
+
+      for (p = ulabel; p != NULL && *p != '\0'; ++p) {
+        fail_unless (g_ascii_isprint (*p),
+            "untranslated label '%s' not printable ASCII", ulabel);
+      }
+    }
+    GST_DEBUG ("%s: %s", GST_STR_NULL (ulabel), GST_STR_NULL (label));
+    g_free (label);
+    g_free (ulabel);
+  }
+
+  fail_unless_equals_int (gst_element_set_state (mixer, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (mixer);
+}
+
+GST_END_TEST;
+
+static Suite *
+alsa_suite (void)
+{
+  Suite *s = suite_create ("alsa");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_device_property_probe);
+  tcase_add_test (tc_chain, test_alsa_mixer_track);
+
+  return s;
+}
+
+GST_CHECK_MAIN (alsa)
diff --git a/tests/check/elements/audioconvert.c b/tests/check/elements/audioconvert.c
new file mode 100644
index 0000000..e849c4d
--- /dev/null
+++ b/tests/check/elements/audioconvert.c
@@ -0,0 +1,1731 @@
+/* GStreamer
+ *
+ * unit test for audioconvert
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) <2007> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/multichannel.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+#define FORMATS "{ F32LE, F32BE, F64LE, F64BE, " \
+                  "S32LE, S32BE, U32LE, U32BE, " \
+                  "S24LE, S24BE, U24LE, U24BE, " \
+                  "S16LE, S16BE, U16LE, U16BE, " \
+                  "S8, U8 } "
+
+#define CONVERT_CAPS_TEMPLATE_STRING    \
+  "audio/x-raw, " \
+    "format = (string) "FORMATS", " \
+    "rate = (int) [ 1, MAX ], " \
+    "channels = (int) [ 1, MAX ]"
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CONVERT_CAPS_TEMPLATE_STRING)
+    );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CONVERT_CAPS_TEMPLATE_STRING)
+    );
+
+/* takes over reference for outcaps */
+static GstElement *
+setup_audioconvert (GstCaps * outcaps)
+{
+  GstElement *audioconvert;
+
+  GST_DEBUG ("setup_audioconvert with caps %" GST_PTR_FORMAT, outcaps);
+  audioconvert = gst_check_setup_element ("audioconvert");
+  g_object_set (G_OBJECT (audioconvert), "dithering", 0, NULL);
+  g_object_set (G_OBJECT (audioconvert), "noise-shaping", 0, NULL);
+  mysrcpad = gst_check_setup_src_pad (audioconvert, &srctemplate, NULL);
+  mysinkpad = gst_check_setup_sink_pad (audioconvert, &sinktemplate, NULL);
+  /* this installs a getcaps func that will always return the caps we set
+   * later */
+  gst_pad_use_fixed_caps (mysinkpad);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  gst_pad_set_caps (mysinkpad, outcaps);
+  gst_caps_unref (outcaps);
+  outcaps = gst_pad_get_current_caps (mysinkpad);
+  fail_unless (gst_caps_is_fixed (outcaps));
+  gst_caps_unref (outcaps);
+
+  return audioconvert;
+}
+
+static void
+cleanup_audioconvert (GstElement * audioconvert)
+{
+  GST_DEBUG ("cleanup_audioconvert");
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (audioconvert);
+  gst_check_teardown_sink_pad (audioconvert);
+  gst_check_teardown_element (audioconvert);
+}
+
+/* returns a newly allocated caps */
+static GstCaps *
+get_int_caps (guint channels, gint endianness, guint width,
+    guint depth, gboolean signedness)
+{
+  GstCaps *caps;
+  gchar *string;
+  GstAudioFormat fmt;
+
+  fmt = gst_audio_format_build_integer (signedness, endianness, width, depth);
+
+  string = g_strdup_printf ("audio/x-raw, "
+      "format = (string) %s, "
+      "rate = (int) 44100, "
+      "channels = (int) %d", gst_audio_format_to_string (fmt), channels);
+  GST_DEBUG ("creating caps from %s", string);
+  caps = gst_caps_from_string (string);
+  g_free (string);
+  fail_unless (caps != NULL);
+  GST_DEBUG ("returning caps %p", caps);
+  return caps;
+}
+
+/* returns a newly allocated caps */
+static GstCaps *
+get_float_caps (guint channels, gint endianness, guint width)
+{
+  GstCaps *caps;
+  gchar *string;
+  const gchar *format;
+
+  if (endianness == G_LITTLE_ENDIAN) {
+    if (width == 32)
+      format = "F32LE";
+    else
+      format = "F64LE";
+  } else {
+    if (width == 32)
+      format = "F32BE";
+    else
+      format = "F64BE";
+  }
+
+  string = g_strdup_printf ("audio/x-raw, "
+      "format = (string) %s, "
+      "rate = (int) 44100, " "channels = (int) %d", format, channels);
+  GST_DEBUG ("creating caps from %s", string);
+  caps = gst_caps_from_string (string);
+  g_free (string);
+  fail_unless (caps != NULL);
+  GST_DEBUG ("returning caps %p", caps);
+  return caps;
+}
+
+/* Copied from vorbis; the particular values used don't matter */
+static GstAudioChannelPosition channelpositions[][6] = {
+  {                             /* Mono */
+      GST_AUDIO_CHANNEL_POSITION_FRONT_MONO},
+  {                             /* Stereo */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  {                             /* Stereo + Centre */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  {                             /* Quadraphonic */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  {                             /* Stereo + Centre + rear stereo */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  {                             /* Full 5.1 Surround */
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+      }
+};
+
+/* these are a bunch of random positions, they are mostly just
+ * different from the ones above, don't use elsewhere */
+static GstAudioChannelPosition mixed_up_positions[][6] = {
+  {
+      GST_AUDIO_CHANNEL_POSITION_FRONT_MONO},
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT},
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT},
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      },
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      },
+  {
+        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_LFE,
+      }
+};
+
+/* we get this when recording from a soundcard with lots of input channels */
+static GstAudioChannelPosition undefined_positions[][15] = {
+  {
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE},
+  {
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+        GST_AUDIO_CHANNEL_POSITION_NONE,
+      GST_AUDIO_CHANNEL_POSITION_NONE}
+};
+
+static void
+set_channel_positions (GstCaps * caps, int channels,
+    GstAudioChannelPosition * channelpositions)
+{
+  GValue chanpos = { 0 };
+  GValue pos = { 0 };
+  GstStructure *structure = gst_caps_get_structure (caps, 0);
+  int c;
+
+  g_value_init (&chanpos, GST_TYPE_ARRAY);
+  g_value_init (&pos, GST_TYPE_AUDIO_CHANNEL_POSITION);
+
+  for (c = 0; c < channels; c++) {
+    g_value_set_enum (&pos, channelpositions[c]);
+    gst_value_array_append_value (&chanpos, &pos);
+  }
+  g_value_unset (&pos);
+
+  gst_structure_set_value (structure, "channel-positions", &chanpos);
+  g_value_unset (&chanpos);
+}
+
+/* For channels > 2, caps have to have channel positions. This adds some simple
+ * ones. Only implemented for channels between 1 and 6.
+ */
+static GstCaps *
+get_float_mc_caps (guint channels, gint endianness, guint width,
+    gboolean mixed_up_layout)
+{
+  GstCaps *caps = get_float_caps (channels, endianness, width);
+
+  if (channels <= 6) {
+    if (mixed_up_layout)
+      set_channel_positions (caps, channels, mixed_up_positions[channels - 1]);
+    else
+      set_channel_positions (caps, channels, channelpositions[channels - 1]);
+  }
+
+  return caps;
+}
+
+static GstCaps *
+get_int_mc_caps (guint channels, gint endianness, guint width,
+    guint depth, gboolean signedness, gboolean mixed_up_layout)
+{
+  GstCaps *caps = get_int_caps (channels, endianness, width, depth, signedness);
+
+  if (channels <= 6) {
+    if (mixed_up_layout)
+      set_channel_positions (caps, channels, mixed_up_positions[channels - 1]);
+    else
+      set_channel_positions (caps, channels, channelpositions[channels - 1]);
+  }
+
+  return caps;
+}
+
+/* eats the refs to the caps */
+static void
+verify_convert (const gchar * which, void *in, int inlength,
+    GstCaps * incaps, void *out, int outlength, GstCaps * outcaps,
+    GstFlowReturn expected_flow)
+{
+  GstBuffer *inbuffer, *outbuffer;
+  GstElement *audioconvert;
+
+  GST_DEBUG ("verifying conversion %s", which);
+  GST_DEBUG ("incaps: %" GST_PTR_FORMAT, incaps);
+  GST_DEBUG ("outcaps: %" GST_PTR_FORMAT, outcaps);
+  ASSERT_CAPS_REFCOUNT (incaps, "incaps", 1);
+  ASSERT_CAPS_REFCOUNT (outcaps, "outcaps", 1);
+  audioconvert = setup_audioconvert (outcaps);
+  ASSERT_CAPS_REFCOUNT (outcaps, "outcaps", 1);
+
+  fail_unless (gst_element_set_state (audioconvert,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
+  gst_pad_push_event (mysrcpad, gst_event_new_caps (incaps));
+
+  GST_DEBUG ("Creating buffer of %d bytes", inlength);
+  inbuffer = gst_buffer_new_and_alloc (inlength);
+  gst_buffer_fill (inbuffer, 0, in, inlength);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+  /* pushing gives away my reference ... */
+  GST_DEBUG ("push it");
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), expected_flow);
+  GST_DEBUG ("pushed it");
+
+  if (expected_flow != GST_FLOW_OK)
+    goto done;
+
+  /* ... and puts a new buffer on the global list */
+  fail_unless (g_list_length (buffers) == 1);
+  fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+
+  ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+  fail_unless_equals_int (gst_buffer_get_size (outbuffer), outlength);
+
+  gst_check_buffer_data (outbuffer, out, outlength);
+#if 0
+  if (memcmp (GST_BUFFER_DATA (outbuffer), out, outlength) != 0) {
+    g_print ("\nInput data:\n");
+    gst_util_dump_mem (in, inlength);
+    g_print ("\nConverted data:\n");
+    gst_util_dump_mem (GST_BUFFER_DATA (outbuffer), outlength);
+    g_print ("\nExpected data:\n");
+    gst_util_dump_mem (out, outlength);
+  }
+  fail_unless (memcmp (GST_BUFFER_DATA (outbuffer), out, outlength) == 0,
+      "failed converting %s", which);
+#endif
+
+  /* make sure that the channel positions are not lost */
+  {
+    GstStructure *in_s, *out_s;
+    gint out_chans;
+
+    in_s = gst_caps_get_structure (incaps, 0);
+    out_s = gst_caps_get_structure (gst_pad_get_current_caps (mysinkpad), 0);
+    fail_unless (gst_structure_get_int (out_s, "channels", &out_chans));
+
+    /* positions for 1 and 2 channels are implicit if not provided */
+    if (out_chans > 2 && gst_structure_has_field (in_s, "channel-positions")) {
+      if (!gst_structure_has_field (out_s, "channel-positions")) {
+        g_error ("Channel layout got lost somewhere:\n\nIns : %s\nOuts: %s\n",
+            gst_structure_to_string (in_s), gst_structure_to_string (out_s));
+      }
+    }
+  }
+
+  buffers = g_list_remove (buffers, outbuffer);
+  gst_buffer_unref (outbuffer);
+
+done:
+  fail_unless (gst_element_set_state (audioconvert,
+          GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+  /* cleanup */
+  GST_DEBUG ("cleanup audioconvert");
+  cleanup_audioconvert (audioconvert);
+  GST_DEBUG ("cleanup, unref incaps");
+  gst_caps_unref (incaps);
+}
+
+
+#define RUN_CONVERSION(which, inarray, in_get_caps, outarray, out_get_caps)    \
+  verify_convert (which, inarray, sizeof (inarray),                            \
+        in_get_caps, outarray, sizeof (outarray), out_get_caps, GST_FLOW_OK)
+
+#define RUN_CONVERSION_TO_FAIL(which, inarray, in_caps, outarray, out_caps)    \
+  verify_convert (which, inarray, sizeof (inarray),                            \
+        in_caps, outarray, sizeof (outarray), out_caps, GST_FLOW_NOT_NEGOTIATED)
+
+
+GST_START_TEST (test_int16)
+{
+  /* stereo to mono */
+  {
+    gint16 in[] = { 16384, -256, 1024, 1024 };
+    gint16 out[] = { 8064, 1024 };
+
+    RUN_CONVERSION ("int16 stereo to mono",
+        in, get_int_caps (2, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+  }
+  /* mono to stereo */
+  {
+    gint16 in[] = { 512, 1024 };
+    gint16 out[] = { 512, 512, 1024, 1024 };
+
+    RUN_CONVERSION ("int16 mono to stereo",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (2, G_BYTE_ORDER, 16, 16, TRUE));
+  }
+  /* signed -> unsigned */
+  {
+    gint16 in[] = { 0, -32767, 32767, -32768 };
+    guint16 out[] = { 32768, 1, 65535, 0 };
+
+    RUN_CONVERSION ("int16 signed to unsigned",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE));
+    RUN_CONVERSION ("int16 unsigned to signed",
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE),
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+  }
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_float32)
+{
+  /* stereo to mono */
+  {
+    gfloat in[] = { 0.6, -0.0078125, 0.03125, 0.03125 };
+    gfloat out[] = { 0.29609375, 0.03125 };
+
+    RUN_CONVERSION ("float32 stereo to mono",
+        in, get_float_caps (2, G_BYTE_ORDER, 32),
+        out, get_float_caps (1, G_BYTE_ORDER, 32));
+  }
+  /* mono to stereo */
+  {
+    gfloat in[] = { 0.015625, 0.03125 };
+    gfloat out[] = { 0.015625, 0.015625, 0.03125, 0.03125 };
+
+    RUN_CONVERSION ("float32 mono to stereo",
+        in, get_float_caps (1, G_BYTE_ORDER, 32),
+        out, get_float_caps (2, G_BYTE_ORDER, 32));
+  }
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_int_conversion)
+{
+  /* 8 <-> 16 signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gint8 in[] = { 0, 1, 2, 127, -127 };
+    gint16 out[] = { 0, 256, 512, 32512, -32512 };
+
+    RUN_CONVERSION ("int 8bit to 16bit signed",
+        in, get_int_caps (1, G_BYTE_ORDER, 8, 8, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE)
+        );
+    RUN_CONVERSION ("int 16bit signed to 8bit",
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        in, get_int_caps (1, G_BYTE_ORDER, 8, 8, TRUE)
+        );
+  }
+  /* 16 -> 8 signed */
+  {
+    gint16 in[] = { 0, 127, 128, 256, 256 + 127, 256 + 128 };
+    gint8 out[] = { 0, 0, 1, 1, 1, 2 };
+
+    RUN_CONVERSION ("16 bit to 8 signed",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 8, 8, TRUE)
+        );
+  }
+  /* 8 unsigned <-> 16 signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    guint8 in[] = { 128, 129, 130, 255, 1 };
+    gint16 out[] = { 0, 256, 512, 32512, -32512 };
+    GstCaps *incaps, *outcaps;
+
+    /* exploded for easier valgrinding */
+    incaps = get_int_caps (1, G_BYTE_ORDER, 8, 8, FALSE);
+    outcaps = get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE);
+    GST_DEBUG ("incaps: %" GST_PTR_FORMAT, incaps);
+    GST_DEBUG ("outcaps: %" GST_PTR_FORMAT, outcaps);
+    RUN_CONVERSION ("8 unsigned to 16 signed", in, incaps, out, outcaps);
+    RUN_CONVERSION ("16 signed to 8 unsigned", out, get_int_caps (1,
+            G_BYTE_ORDER, 16, 16, TRUE), in, get_int_caps (1, G_BYTE_ORDER, 8,
+            8, FALSE)
+        );
+  }
+  /* 8 <-> 24 signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gint8 in[] = { 0, 1, 127 };
+    guint8 out[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7f };
+    /* out has the bytes in little-endian, so that's how they should be
+     * interpreted during conversion */
+
+    RUN_CONVERSION ("8 to 24 signed", in, get_int_caps (1, G_BYTE_ORDER, 8, 8,
+            TRUE), out, get_int_caps (1, G_LITTLE_ENDIAN, 24, 24, TRUE)
+        );
+    RUN_CONVERSION ("24 signed to 8", out, get_int_caps (1, G_LITTLE_ENDIAN, 24,
+            24, TRUE), in, get_int_caps (1, G_BYTE_ORDER, 8, 8, TRUE)
+        );
+  }
+
+  /* 16 bit signed <-> unsigned */
+  {
+    gint16 in[] = { 0, 128, -128 };
+    guint16 out[] = { 32768, 32896, 32640 };
+    RUN_CONVERSION ("16 signed to 16 unsigned",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE)
+        );
+    RUN_CONVERSION ("16 unsigned to 16 signed",
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE),
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE)
+        );
+  }
+
+  /* 16 bit signed <-> 8 in 16 bit signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gint16 in[] = { 0, 64 << 8, -64 << 8 };
+    gint16 out[] = { 0, 64, -64 };
+    RUN_CONVERSION ("16 signed to 8 in 16 signed",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 8, TRUE)
+        );
+    RUN_CONVERSION ("8 in 16 signed to 16 signed",
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 8, TRUE),
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE)
+        );
+  }
+
+  /* 16 bit unsigned <-> 8 in 16 bit unsigned */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    guint16 in[] = { 1 << 15, (1 << 15) - (64 << 8), (1 << 15) + (64 << 8) };
+    guint16 out[] = { 1 << 7, (1 << 7) - 64, (1 << 7) + 64 };
+    RUN_CONVERSION ("16 unsigned to 8 in 16 unsigned",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 8, FALSE)
+        );
+    RUN_CONVERSION ("8 in 16 unsigned to 16 unsigned",
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 8, FALSE),
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE)
+        );
+  }
+
+  /* 32 bit signed -> 16 bit signed for rounding check */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gint32 in[] = { 0, G_MININT32, G_MAXINT32,
+      (32 << 16), (32 << 16) + (1 << 15), (32 << 16) - (1 << 15),
+      (32 << 16) + (2 << 15), (32 << 16) - (2 << 15),
+      (-32 << 16) + (1 << 15), (-32 << 16) - (1 << 15),
+      (-32 << 16) + (2 << 15), (-32 << 16) - (2 << 15),
+      (-32 << 16)
+    };
+    gint16 out[] = { 0, G_MININT16, G_MAXINT16,
+      32, 33, 32,
+      33, 31,
+      -31, -32,
+      -31, -33,
+      -32
+    };
+    RUN_CONVERSION ("32 signed to 16 signed for rounding",
+        in, get_int_caps (1, G_BYTE_ORDER, 32, 32, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE)
+        );
+  }
+
+  /* 32 bit signed -> 16 bit unsigned for rounding check */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gint32 in[] = { 0, G_MININT32, G_MAXINT32,
+      (32 << 16), (32 << 16) + (1 << 15), (32 << 16) - (1 << 15),
+      (32 << 16) + (2 << 15), (32 << 16) - (2 << 15),
+      (-32 << 16) + (1 << 15), (-32 << 16) - (1 << 15),
+      (-32 << 16) + (2 << 15), (-32 << 16) - (2 << 15),
+      (-32 << 16)
+    };
+    guint16 out[] = { (1 << 15), 0, G_MAXUINT16,
+      (1 << 15) + 32, (1 << 15) + 33, (1 << 15) + 32,
+      (1 << 15) + 33, (1 << 15) + 31,
+      (1 << 15) - 31, (1 << 15) - 32,
+      (1 << 15) - 31, (1 << 15) - 33,
+      (1 << 15) - 32
+    };
+    RUN_CONVERSION ("32 signed to 16 unsigned for rounding",
+        in, get_int_caps (1, G_BYTE_ORDER, 32, 32, TRUE),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, FALSE)
+        );
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_float_conversion)
+{
+  /* 32 float <-> 16 signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gfloat in_le[] =
+        { GFLOAT_TO_LE (0.0), GFLOAT_TO_LE (1.0), GFLOAT_TO_LE (-1.0),
+      GFLOAT_TO_LE (0.5), GFLOAT_TO_LE (-0.5), GFLOAT_TO_LE (1.1),
+      GFLOAT_TO_LE (-1.1)
+    };
+    gfloat in_be[] =
+        { GFLOAT_TO_BE (0.0), GFLOAT_TO_BE (1.0), GFLOAT_TO_BE (-1.0),
+      GFLOAT_TO_BE (0.5), GFLOAT_TO_BE (-0.5), GFLOAT_TO_BE (1.1),
+      GFLOAT_TO_BE (-1.1)
+    };
+    gint16 out[] = { 0, 32767, -32768, 16384, -16384, 32767, -32768 };
+
+    /* only one direction conversion, the other direction does
+     * not produce exactly the same as the input due to floating
+     * point rounding errors etc. */
+    RUN_CONVERSION ("32 float le to 16 signed",
+        in_le, get_float_caps (1, G_LITTLE_ENDIAN, 32),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+    RUN_CONVERSION ("32 float be to 16 signed",
+        in_be, get_float_caps (1, G_BIG_ENDIAN, 32),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+  }
+
+  {
+    gint16 in[] = { 0, -32768, 16384, -16384 };
+    gfloat out[] = { 0.0, -1.0, 0.5, -0.5 };
+
+    RUN_CONVERSION ("16 signed to 32 float",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_float_caps (1, G_BYTE_ORDER, 32));
+  }
+
+  /* 64 float <-> 16 signed */
+  /* NOTE: if audioconvert was doing dithering we'd have a problem */
+  {
+    gdouble in_le[] =
+        { GDOUBLE_TO_LE (0.0), GDOUBLE_TO_LE (1.0), GDOUBLE_TO_LE (-1.0),
+      GDOUBLE_TO_LE (0.5), GDOUBLE_TO_LE (-0.5), GDOUBLE_TO_LE (1.1),
+      GDOUBLE_TO_LE (-1.1)
+    };
+    gdouble in_be[] =
+        { GDOUBLE_TO_BE (0.0), GDOUBLE_TO_BE (1.0), GDOUBLE_TO_BE (-1.0),
+      GDOUBLE_TO_BE (0.5), GDOUBLE_TO_BE (-0.5), GDOUBLE_TO_BE (1.1),
+      GDOUBLE_TO_BE (-1.1)
+    };
+    gint16 out[] = { 0, 32767, -32768, 16384, -16384, 32767, -32768 };
+
+    /* only one direction conversion, the other direction does
+     * not produce exactly the same as the input due to floating
+     * point rounding errors etc. */
+    RUN_CONVERSION ("64 float LE to 16 signed",
+        in_le, get_float_caps (1, G_LITTLE_ENDIAN, 64),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+    RUN_CONVERSION ("64 float BE to 16 signed",
+        in_be, get_float_caps (1, G_BIG_ENDIAN, 64),
+        out, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE));
+  }
+  {
+    gint16 in[] = { 0, -32768, 16384, -16384 };
+    gdouble out[] = { 0.0,
+      (gdouble) (-32768L << 16) / 2147483647.0, /* ~ -1.0 */
+      (gdouble) (16384L << 16) / 2147483647.0,  /* ~  0.5 */
+      (gdouble) (-16384L << 16) / 2147483647.0, /* ~ -0.5 */
+    };
+
+    RUN_CONVERSION ("16 signed to 64 float",
+        in, get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE),
+        out, get_float_caps (1, G_BYTE_ORDER, 64));
+  }
+  {
+    gint32 in[] = { 0, (-1L << 31), (1L << 30), (-1L << 30) };
+    gdouble out[] = { 0.0,
+      (gdouble) (-1L << 31) / 2147483647.0,     /* ~ -1.0 */
+      (gdouble) (1L << 30) / 2147483647.0,      /* ~  0.5 */
+      (gdouble) (-1L << 30) / 2147483647.0,     /* ~ -0.5 */
+    };
+
+    RUN_CONVERSION ("32 signed to 64 float",
+        in, get_int_caps (1, G_BYTE_ORDER, 32, 32, TRUE),
+        out, get_float_caps (1, G_BYTE_ORDER, 64));
+  }
+
+  /* 64-bit float <-> 32-bit float */
+  {
+    gdouble in[] = { 0.0, 1.0, -1.0, 0.5, -0.5 };
+    gfloat out[] = { 0.0, 1.0, -1.0, 0.5, -0.5 };
+
+    RUN_CONVERSION ("64 float to 32 float",
+        in, get_float_caps (1, G_BYTE_ORDER, 64),
+        out, get_float_caps (1, G_BYTE_ORDER, 32));
+
+    RUN_CONVERSION ("32 float to 64 float",
+        out, get_float_caps (1, G_BYTE_ORDER, 32),
+        in, get_float_caps (1, G_BYTE_ORDER, 64));
+  }
+
+  /* 32-bit float little endian <-> big endian */
+  {
+    gfloat le[] = { GFLOAT_TO_LE (0.0), GFLOAT_TO_LE (1.0), GFLOAT_TO_LE (-1.0),
+      GFLOAT_TO_LE (0.5), GFLOAT_TO_LE (-0.5)
+    };
+    gfloat be[] = { GFLOAT_TO_BE (0.0), GFLOAT_TO_BE (1.0), GFLOAT_TO_BE (-1.0),
+      GFLOAT_TO_BE (0.5), GFLOAT_TO_BE (-0.5)
+    };
+
+    RUN_CONVERSION ("32 float LE to BE",
+        le, get_float_caps (1, G_LITTLE_ENDIAN, 32),
+        be, get_float_caps (1, G_BIG_ENDIAN, 32));
+
+    RUN_CONVERSION ("32 float BE to LE",
+        be, get_float_caps (1, G_BIG_ENDIAN, 32),
+        le, get_float_caps (1, G_LITTLE_ENDIAN, 32));
+  }
+
+  /* 64-bit float little endian <-> big endian */
+  {
+    gdouble le[] =
+        { GDOUBLE_TO_LE (0.0), GDOUBLE_TO_LE (1.0), GDOUBLE_TO_LE (-1.0),
+      GDOUBLE_TO_LE (0.5), GDOUBLE_TO_LE (-0.5)
+    };
+    gdouble be[] =
+        { GDOUBLE_TO_BE (0.0), GDOUBLE_TO_BE (1.0), GDOUBLE_TO_BE (-1.0),
+      GDOUBLE_TO_BE (0.5), GDOUBLE_TO_BE (-0.5)
+    };
+
+    RUN_CONVERSION ("64 float LE to BE",
+        le, get_float_caps (1, G_LITTLE_ENDIAN, 64),
+        be, get_float_caps (1, G_BIG_ENDIAN, 64));
+
+    RUN_CONVERSION ("64 float BE to LE",
+        be, get_float_caps (1, G_BIG_ENDIAN, 64),
+        le, get_float_caps (1, G_LITTLE_ENDIAN, 64));
+  }
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_multichannel_conversion)
+{
+  {
+    gfloat in[] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+    gfloat out[] = { 0.0, 0.0 };
+
+    RUN_CONVERSION ("3 channels to 1", in, get_float_mc_caps (3,
+            G_BYTE_ORDER, 32, FALSE), out, get_float_caps (1, G_BYTE_ORDER,
+            32));
+    RUN_CONVERSION ("1 channels to 3", out, get_float_caps (1,
+            G_BYTE_ORDER, 32), in, get_float_mc_caps (3, G_BYTE_ORDER,
+            32, TRUE));
+  }
+
+  {
+    gint16 in[] = { 0, 0, 0, 0, 0, 0 };
+    gint16 out[] = { 0, 0 };
+
+    RUN_CONVERSION ("3 channels to 1", in, get_int_mc_caps (3,
+            G_BYTE_ORDER, 16, 16, TRUE, FALSE), out, get_int_caps (1,
+            G_BYTE_ORDER, 16, 16, TRUE));
+    RUN_CONVERSION ("1 channels to 3", out, get_int_caps (1, G_BYTE_ORDER, 16,
+            16, TRUE), in, get_int_mc_caps (3, G_BYTE_ORDER, 16, 16, TRUE,
+            TRUE));
+  }
+
+  {
+    gint16 in[] = { 1, 2 };
+    gint16 out[] = { 1, 1, 2, 2 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+    GstAudioChannelPosition out_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+
+    set_channel_positions (in_caps, 1, in_layout);
+    set_channel_positions (out_caps, 2, out_layout);
+
+    RUN_CONVERSION ("1 channels to 2 with standard layout", in,
+        in_caps, out, out_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2 };
+    gint16 out[] = { 1, 1, 2, 2 };
+    GstCaps *in_caps = get_int_caps (1, G_BYTE_ORDER, 16, 16, TRUE);
+    GstCaps *out_caps = get_int_caps (2, G_BYTE_ORDER, 16, 16, TRUE);
+
+    RUN_CONVERSION ("1 channels to 2 with standard layout and no positions set",
+        in, gst_caps_copy (in_caps), out, gst_caps_copy (out_caps));
+
+    RUN_CONVERSION ("2 channels to 1 with standard layout and no positions set",
+        out, out_caps, in, in_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2 };
+    gint16 out[] = { 1, 0, 2, 0 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT };
+    GstAudioChannelPosition out_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+
+    set_channel_positions (in_caps, 1, in_layout);
+    set_channel_positions (out_caps, 2, out_layout);
+
+    RUN_CONVERSION ("1 channels to 2 with non-standard layout", in,
+        in_caps, out, out_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 2, 4 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("2 channels to 1 with non-standard layout", in,
+        in_caps, out, out_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 2, 4 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("2 channels to 1 with standard layout", in,
+        in_caps, out, out_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 3 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER
+    };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("2 channels to 1 with non-standard layout", in,
+        in_caps, out, out_caps);
+  }
+
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 3 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_REAR_LEFT
+    };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("2 channels to 1 with non-standard layout", in,
+        in_caps, out, out_caps);
+  }
+  {
+    gint16 in[] = { 4, 5, 4, 2, 2, 1 };
+    gint16 out[] = { 3, 3 };
+    GstCaps *in_caps = get_int_mc_caps (6, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_caps (2, G_BYTE_ORDER, 16, 16, TRUE);
+
+    RUN_CONVERSION ("5.1 to 2 channels", in, in_caps, out, out_caps);
+  }
+  {
+    gint16 in[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+    gint16 out[] = { 0, 0 };
+    GstCaps *in_caps = get_int_mc_caps (11, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[11] = {
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+    };
+
+    set_channel_positions (in_caps, 11, in_layout);
+
+    RUN_CONVERSION ("11 channels to 2", in,
+        gst_caps_copy (in_caps), out, gst_caps_copy (out_caps));
+    RUN_CONVERSION ("2 channels to 11", out, out_caps, in, in_caps);
+  }
+
+}
+
+GST_END_TEST;
+
+/* for testing channel remapping with 8 channels */
+static GstAudioChannelPosition n8chan_pos_remap_in[8] = {
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_LFE,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT
+};
+
+static GstAudioChannelPosition n8chan_pos_remap_out[8] = {
+  GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+  GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+  GST_AUDIO_CHANNEL_POSITION_LFE
+};
+
+GST_START_TEST (test_channel_remapping)
+{
+  /* float */
+  {
+    gfloat in[] = { 0.0, 1.0, -0.5 };
+    gfloat out[] = { -0.5, 1.0, 0.0 };
+    GstCaps *in_caps = get_float_mc_caps (3, G_BYTE_ORDER, 32, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (3, G_BYTE_ORDER, 32, TRUE);
+
+    RUN_CONVERSION ("3 channels layout remapping float", in, in_caps,
+        out, out_caps);
+  }
+
+  /* int */
+  {
+    guint16 in[] = { 0, 65535, 0x9999 };
+    guint16 out[] = { 0x9999, 65535, 0 };
+    GstCaps *in_caps = get_int_mc_caps (3, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (3, G_BYTE_ORDER, 16, 16, FALSE, TRUE);
+
+    RUN_CONVERSION ("3 channels layout remapping int", in, in_caps,
+        out, out_caps);
+  }
+
+  /* int with 8 channels (= largest number allowed with channel positions) */
+  {
+    guint16 in[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
+    guint16 out[] = { 4, 0, 1, 6, 7, 2, 3, 5 };
+    GstCaps *in_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, FALSE, TRUE);
+
+    set_channel_positions (in_caps, 8, n8chan_pos_remap_in);
+    set_channel_positions (out_caps, 8, n8chan_pos_remap_out);
+
+    RUN_CONVERSION ("8 channels layout remapping int", in, in_caps,
+        out, out_caps);
+  }
+
+  /* int16 to int32 with 8 channels (= largest number allowed with channel positions) */
+  {
+    guint16 in[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
+    guint32 out[] =
+        { 4 << 16, 0, 1 << 16, 6 << 16, 7 << 16, 2 << 16, 3 << 16, 5 << 16 };
+    GstCaps *in_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (8, G_BYTE_ORDER, 32, 32, FALSE, TRUE);
+
+    set_channel_positions (in_caps, 8, n8chan_pos_remap_in);
+    set_channel_positions (out_caps, 8, n8chan_pos_remap_out);
+
+    RUN_CONVERSION ("8 channels layout remapping int16 --> int32", in, in_caps,
+        out, out_caps);
+
+    in_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    out_caps = get_int_mc_caps (8, G_BYTE_ORDER, 32, 32, FALSE, TRUE);
+    set_channel_positions (in_caps, 8, n8chan_pos_remap_in);
+    set_channel_positions (out_caps, 8, n8chan_pos_remap_out);
+    RUN_CONVERSION ("8 channels layout remapping int16 <-- int32", out,
+        out_caps, in, in_caps);
+  }
+
+  /* float to gint16 with 3 channels */
+  {
+    gfloat in[] = { 100.0 / G_MAXINT16, 0.0, -100.0 / G_MAXINT16 };
+    gint16 out[] = { -100, 0, 100 };
+    GstCaps *in_caps = get_float_mc_caps (3, G_BYTE_ORDER, 32, TRUE);
+    GstCaps *out_caps = get_int_mc_caps (3, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+
+    RUN_CONVERSION ("3 channels layout remapping float32 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 2 channels and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 2, 2, 4 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE
+    };
+    GstAudioChannelPosition out_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 2, out_layout);
+
+    RUN_CONVERSION ("2 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 2 channels and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 2, 1, 4, 3 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT
+    };
+    GstAudioChannelPosition out_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 2, out_layout);
+
+    RUN_CONVERSION ("2 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 2 channels and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 1, 3, 3 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER
+    };
+    GstAudioChannelPosition out_layout[2] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+    };
+
+    set_channel_positions (in_caps, 2, in_layout);
+    set_channel_positions (out_caps, 2, out_layout);
+
+    RUN_CONVERSION ("2 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 1 channel and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 0, 0, 0, 0 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT };
+
+    set_channel_positions (in_caps, 1, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("1 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 1 channel and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 2, 3, 4 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER };
+
+    set_channel_positions (in_caps, 1, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("1 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+
+  /* gint16 to gint16 with 1 channel and non-standard layout */
+  {
+    gint16 in[] = { 1, 2, 3, 4 };
+    gint16 out[] = { 1, 2, 3, 4 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstAudioChannelPosition in_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_FRONT_MONO };
+    GstAudioChannelPosition out_layout[1] =
+        { GST_AUDIO_CHANNEL_POSITION_REAR_LEFT };
+
+    set_channel_positions (in_caps, 1, in_layout);
+    set_channel_positions (out_caps, 1, out_layout);
+
+    RUN_CONVERSION ("1 channels layout remapping int16 --> int16", in,
+        in_caps, out, out_caps);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_caps_negotiation)
+{
+  GstElement *src, *ac1, *ac2, *ac3, *sink;
+  GstElement *pipeline;
+  GstPad *ac3_src;
+  GstCaps *caps1, *caps2;
+
+  pipeline = gst_pipeline_new ("test");
+
+  /* create elements */
+  src = gst_element_factory_make ("audiotestsrc", "src");
+  ac1 = gst_element_factory_make ("audioconvert", "ac1");
+  ac2 = gst_element_factory_make ("audioconvert", "ac2");
+  ac3 = gst_element_factory_make ("audioconvert", "ac3");
+  sink = gst_element_factory_make ("fakesink", "sink");
+  ac3_src = gst_element_get_static_pad (ac3, "src");
+
+  /* test with 2 audioconvert elements */
+  gst_bin_add_many (GST_BIN (pipeline), src, ac1, ac3, sink, NULL);
+  gst_element_link_many (src, ac1, ac3, sink, NULL);
+
+  /* Set to PAUSED and wait for PREROLL */
+  fail_if (gst_element_set_state (pipeline, GST_STATE_PAUSED) ==
+      GST_STATE_CHANGE_FAILURE, "Failed to set test pipeline to PAUSED");
+  fail_if (gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) !=
+      GST_STATE_CHANGE_SUCCESS, "Failed to set test pipeline to PAUSED");
+
+  caps1 = gst_pad_get_caps (ac3_src, NULL);
+  fail_if (caps1 == NULL, "gst_pad_get_caps returned NULL");
+  GST_DEBUG ("Caps size 1 : %d", gst_caps_get_size (caps1));
+
+  fail_if (gst_element_set_state (pipeline, GST_STATE_READY) ==
+      GST_STATE_CHANGE_FAILURE, "Failed to set test pipeline back to READY");
+  fail_if (gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) !=
+      GST_STATE_CHANGE_SUCCESS, "Failed to set test pipeline back to READY");
+
+  /* test with 3 audioconvert elements */
+  gst_element_unlink (ac1, ac3);
+  gst_bin_add (GST_BIN (pipeline), ac2);
+  gst_element_link_many (ac1, ac2, ac3, NULL);
+
+  fail_if (gst_element_set_state (pipeline, GST_STATE_PAUSED) ==
+      GST_STATE_CHANGE_FAILURE, "Failed to set test pipeline back to PAUSED");
+  fail_if (gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) !=
+      GST_STATE_CHANGE_SUCCESS, "Failed to set test pipeline back to PAUSED");
+
+  caps2 = gst_pad_get_caps (ac3_src, NULL);
+
+  fail_if (caps2 == NULL, "gst_pad_get_caps returned NULL");
+  GST_DEBUG ("Caps size 2 : %d", gst_caps_get_size (caps2));
+  fail_unless (gst_caps_get_size (caps1) == gst_caps_get_size (caps2));
+
+  gst_caps_unref (caps1);
+  gst_caps_unref (caps2);
+
+  fail_if (gst_element_set_state (pipeline, GST_STATE_NULL) ==
+      GST_STATE_CHANGE_FAILURE, "Failed to set test pipeline back to NULL");
+  fail_if (gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) !=
+      GST_STATE_CHANGE_SUCCESS, "Failed to set test pipeline back to NULL");
+
+  gst_object_unref (ac3_src);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_convert_undefined_multichannel)
+{
+  /* (A) CONVERSION FROM 'WORSE' TO 'BETTER' FORMAT */
+
+  /* 1 channel, NONE positions, int8 => int16 */
+  {
+    guint16 out[] = { 0x2000 };
+    guint8 in[] = { 0x20 };
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 1, undefined_positions[1 - 1]);
+    set_channel_positions (in_caps, 1, undefined_positions[1 - 1]);
+
+    RUN_CONVERSION ("1 channel, undefined layout, identity conversion, "
+        "int8 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 2 channels, NONE positions, int8 => int16 */
+  {
+    guint16 out[] = { 0x8000, 0x2000 };
+    guint8 in[] = { 0x80, 0x20 };
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 2, undefined_positions[2 - 1]);
+    set_channel_positions (in_caps, 2, undefined_positions[2 - 1]);
+
+    RUN_CONVERSION ("2 channels, undefined layout, identity conversion, "
+        "int8 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 6 channels, NONE positions, int8 => int16 */
+  {
+    guint16 out[] = { 0x0000, 0x2000, 0x8000, 0x2000, 0x0000, 0xff00 };
+    guint8 in[] = { 0x00, 0x20, 0x80, 0x20, 0x00, 0xff };
+    GstCaps *out_caps = get_int_mc_caps (6, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *in_caps = get_int_mc_caps (6, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 6, undefined_positions[6 - 1]);
+    set_channel_positions (in_caps, 6, undefined_positions[6 - 1]);
+
+    RUN_CONVERSION ("6 channels, undefined layout, identity conversion, "
+        "int8 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 9 channels, NONE positions, int8 => int16 */
+  {
+    guint16 out[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000
+    };
+    guint8 in[] = { 0x00, 0xff, 0x00, 0x20, 0x80, 0x20, 0x00, 0xff, 0x00 };
+    GstCaps *out_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *in_caps = get_int_mc_caps (9, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 9, undefined_positions[9 - 1]);
+
+    RUN_CONVERSION ("9 channels, undefined layout, identity conversion, "
+        "int8 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 15 channels, NONE positions, int8 => int16 */
+  {
+    guint16 out[] =
+        { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000, 0x0000, 0xff00,
+      0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000, 0x0000
+    };
+    guint8 in[] =
+        { 0x00, 0xff, 0x00, 0x20, 0x80, 0x20, 0x00, 0xff, 0x00, 0xff, 0x00,
+      0x20, 0x80, 0x20, 0x00
+    };
+    GstCaps *out_caps =
+        get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *in_caps = get_int_mc_caps (15, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 15, undefined_positions[15 - 1]);
+    set_channel_positions (in_caps, 15, undefined_positions[15 - 1]);
+
+    RUN_CONVERSION ("15 channels, undefined layout, identity conversion, "
+        "int8 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* (B) CONVERSION FROM 'BETTER' TO 'WORSE' FORMAT */
+
+  /* 1 channel, NONE positions, int16 => int8 */
+  {
+    guint16 in[] = { 0x2000 };
+    guint8 out[] = { 0x20 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 1, undefined_positions[1 - 1]);
+    set_channel_positions (in_caps, 1, undefined_positions[1 - 1]);
+
+    RUN_CONVERSION ("1 channel, undefined layout, identity conversion, "
+        "int16 => int8", in, in_caps, out, out_caps);
+  }
+
+  /* 2 channels, NONE positions, int16 => int8 */
+  {
+    guint16 in[] = { 0x8000, 0x2000 };
+    guint8 out[] = { 0x80, 0x20 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 2, undefined_positions[2 - 1]);
+    set_channel_positions (in_caps, 2, undefined_positions[2 - 1]);
+
+    RUN_CONVERSION ("2 channels, undefined layout, identity conversion, "
+        "int16 => int8", in, in_caps, out, out_caps);
+  }
+
+  /* 6 channels, NONE positions, int16 => int8 */
+  {
+    guint16 in[] = { 0x0000, 0x2000, 0x8000, 0x2000, 0x0000, 0xff00 };
+    guint8 out[] = { 0x00, 0x20, 0x80, 0x20, 0x00, 0xff };
+    GstCaps *in_caps = get_int_mc_caps (6, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (6, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 6, undefined_positions[6 - 1]);
+    set_channel_positions (in_caps, 6, undefined_positions[6 - 1]);
+
+    RUN_CONVERSION ("6 channels, undefined layout, identity conversion, "
+        "int16 => int8", in, in_caps, out, out_caps);
+  }
+
+  /* 9 channels, NONE positions, int16 => int8 */
+  {
+    guint16 in[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000
+    };
+    guint8 out[] = { 0x00, 0xff, 0x00, 0x20, 0x80, 0x20, 0x00, 0xff, 0x00 };
+    GstCaps *in_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (9, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 9, undefined_positions[9 - 1]);
+
+    RUN_CONVERSION ("9 channels, undefined layout, identity conversion, "
+        "int16 => int8", in, in_caps, out, out_caps);
+  }
+
+  /* 15 channels, NONE positions, int16 => int8 */
+  {
+    guint16 in[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000
+    };
+    guint8 out[] =
+        { 0x00, 0xff, 0x00, 0x20, 0x80, 0x20, 0x00, 0xff, 0x00, 0xff, 0x00,
+      0x20, 0x80, 0x20, 0x00
+    };
+    GstCaps *in_caps = get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (15, G_BYTE_ORDER, 8, 8, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 15, undefined_positions[15 - 1]);
+    set_channel_positions (in_caps, 15, undefined_positions[15 - 1]);
+
+    RUN_CONVERSION ("15 channels, undefined layout, identity conversion, "
+        "int16 => int8", in, in_caps, out, out_caps);
+  }
+
+
+  /* (C) NO CONVERSION, SAME FORMAT */
+
+  /* 1 channel, NONE positions, int16 => int16 */
+  {
+    guint16 in[] = { 0x2000 };
+    guint16 out[] = { 0x2000 };
+    GstCaps *in_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (1, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 1, undefined_positions[1 - 1]);
+    set_channel_positions (in_caps, 1, undefined_positions[1 - 1]);
+
+    RUN_CONVERSION ("1 channel, undefined layout, identity conversion, "
+        "int16 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 2 channels, NONE positions, int16 => int16 */
+  {
+    guint16 in[] = { 0x8000, 0x2000 };
+    guint16 out[] = { 0x8000, 0x2000 };
+    GstCaps *in_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 2, undefined_positions[2 - 1]);
+    set_channel_positions (in_caps, 2, undefined_positions[2 - 1]);
+
+    RUN_CONVERSION ("2 channels, undefined layout, identity conversion, "
+        "int16 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 6 channels, NONE positions, int16 => int16 */
+  {
+    guint16 in[] = { 0x0000, 0x2000, 0x8000, 0x2000, 0x0000, 0xff00 };
+    guint16 out[] = { 0x0000, 0x2000, 0x8000, 0x2000, 0x0000, 0xff00 };
+    GstCaps *in_caps = get_int_mc_caps (6, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (6, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 6, undefined_positions[6 - 1]);
+    set_channel_positions (in_caps, 6, undefined_positions[6 - 1]);
+
+    RUN_CONVERSION ("6 channels, undefined layout, identity conversion, "
+        "int16 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 9 channels, NONE positions, int16 => int16 */
+  {
+    guint16 in[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000
+    };
+    guint16 out[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000
+    };
+    GstCaps *in_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 9, undefined_positions[9 - 1]);
+
+    RUN_CONVERSION ("9 channels, undefined layout, identity conversion, "
+        "int16 => int16", in, in_caps, out, out_caps);
+  }
+
+  /* 15 channels, NONE positions, int16 => int16 */
+  {
+    guint16 in[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000
+    };
+    guint16 out[] = { 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000, 0xff00, 0x0000, 0xff00, 0x0000, 0x2000, 0x8000, 0x2000,
+      0x0000
+    };
+    GstCaps *in_caps = get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps =
+        get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+
+    set_channel_positions (out_caps, 15, undefined_positions[15 - 1]);
+    set_channel_positions (in_caps, 15, undefined_positions[15 - 1]);
+
+    RUN_CONVERSION ("15 channels, undefined layout, identity conversion, "
+        "int16 => int16", in, in_caps, out, out_caps);
+  }
+
+
+  /* (C) int16 => float */
+
+  /* 9 channels, NONE positions, int16 => float */
+  {
+    guint16 in[] = { 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000, 0x8000, 0x0000
+    };
+    gfloat out[] = { -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0 };
+    GstCaps *in_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (9, G_BYTE_ORDER, 32, FALSE);
+
+    set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 9, undefined_positions[9 - 1]);
+
+    RUN_CONVERSION ("9 channels, undefined layout, identity conversion, "
+        "int16 => float", in, in_caps, out, out_caps);
+  }
+
+  /* 15 channels, NONE positions, int16 => float */
+  {
+    guint16 in[] = { 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000, 0x8000, 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000
+    };
+    gfloat out[] =
+        { -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0,
+      0.0, -1.0
+    };
+    GstCaps *in_caps = get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (15, G_BYTE_ORDER, 32, FALSE);
+
+    set_channel_positions (out_caps, 15, undefined_positions[15 - 1]);
+    set_channel_positions (in_caps, 15, undefined_positions[15 - 1]);
+
+    RUN_CONVERSION ("15 channels, undefined layout, identity conversion, "
+        "int16 => float", in, in_caps, out, out_caps);
+  }
+
+
+  /* 9 channels, NONE positions, int16 => float (same as above, but no
+   * position on output caps to see if audioconvert transforms correctly) */
+  {
+    guint16 in[] = { 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000, 0x8000, 0x0000
+    };
+    gfloat out[] = { -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0 };
+    GstCaps *in_caps = get_int_mc_caps (9, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (9, G_BYTE_ORDER, 32, FALSE);
+
+    //set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 9, undefined_positions[9 - 1]);
+
+    RUN_CONVERSION ("9 channels, undefined layout, identity conversion, "
+        "int16 => float", in, in_caps, out, out_caps);
+  }
+
+  /* 15 channels, NONE positions, int16 => float (same as above, but no
+   * position on output caps to see if audioconvert transforms correctly) */
+  {
+    guint16 in[] = { 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000, 0x8000, 0x0000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+      0x0000
+    };
+    gfloat out[] =
+        { -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0,
+      0.0, -1.0
+    };
+    GstCaps *in_caps = get_int_mc_caps (15, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (15, G_BYTE_ORDER, 32, FALSE);
+
+    //set_channel_positions (out_caps, 9, undefined_positions[9 - 1]);
+    set_channel_positions (in_caps, 15, undefined_positions[15 - 1]);
+
+    RUN_CONVERSION ("15 channels, undefined layout, identity conversion, "
+        "int16 => float", in, in_caps, out, out_caps);
+  }
+
+  /* 8 channels, NONE positions => 2 channels: should fail, no mixing allowed */
+  {
+    guint16 in[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+    gfloat out[] = { -1.0, -1.0 };
+    GstCaps *in_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, FALSE, FALSE);
+    GstCaps *out_caps = get_float_mc_caps (2, G_BYTE_ORDER, 32, FALSE);
+
+    set_channel_positions (in_caps, 8, undefined_positions[8 - 1]);
+
+    RUN_CONVERSION_TO_FAIL ("8 channels with layout => 2 channels",
+        in, in_caps, out, out_caps);
+  }
+
+  /* 8 channels, with positions => 2 channels (makes sure channel-position
+   * fields are removed properly in some cases in ::transform_caps, so we
+   * don't up with caps with 2 channels and 8 channel positions) */
+  {
+    GstAudioChannelPosition layout8ch[] = {
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_LFE,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT
+    };
+    gint16 in[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+    gint16 out[] = { 0, 0 };
+    GstCaps *in_caps = get_int_mc_caps (8, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+    GstCaps *out_caps = get_int_mc_caps (2, G_BYTE_ORDER, 16, 16, TRUE, FALSE);
+
+    set_channel_positions (in_caps, 8, layout8ch);
+
+    RUN_CONVERSION ("8 channels with layout => 2 channels",
+        in, in_caps, out, out_caps);
+  }
+}
+
+GST_END_TEST;
+
+static Suite *
+audioconvert_suite (void)
+{
+  Suite *s = suite_create ("audioconvert");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_int16);
+  tcase_add_test (tc_chain, test_float32);
+  tcase_add_test (tc_chain, test_int_conversion);
+  tcase_add_test (tc_chain, test_float_conversion);
+  tcase_add_test (tc_chain, test_multichannel_conversion);
+  tcase_add_test (tc_chain, test_channel_remapping);
+  tcase_add_test (tc_chain, test_caps_negotiation);
+  tcase_add_test (tc_chain, test_convert_undefined_multichannel);
+
+  return s;
+}
+
+GST_CHECK_MAIN (audioconvert);
diff --git a/tests/check/elements/audiotestsrc.c b/tests/check/elements/audiotestsrc.c
new file mode 100644
index 0000000..0fecc5d
--- /dev/null
+++ b/tests/check/elements/audiotestsrc.c
@@ -0,0 +1,126 @@
+/* GStreamer
+ *
+ * unit test for audiotestsrc
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysinkpad;
+
+
+#define CAPS_TEMPLATE_STRING            \
+    "audio/x-raw, "                     \
+    "format = (string) "GST_AUDIO_NE(S16)", "   \
+    "channels = (int) 1, "              \
+    "rate = (int) [ 1,  MAX ]"
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CAPS_TEMPLATE_STRING)
+    );
+
+static GstElement *
+setup_audiotestsrc (void)
+{
+  GstElement *audiotestsrc;
+
+  GST_DEBUG ("setup_audiotestsrc");
+  audiotestsrc = gst_check_setup_element ("audiotestsrc");
+  mysinkpad = gst_check_setup_sink_pad (audiotestsrc, &sinktemplate, NULL);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  return audiotestsrc;
+}
+
+static void
+cleanup_audiotestsrc (GstElement * audiotestsrc)
+{
+  GST_DEBUG ("cleanup_audiotestsrc");
+
+  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_sink_pad (audiotestsrc);
+  gst_check_teardown_element (audiotestsrc);
+}
+
+GST_START_TEST (test_all_waves)
+{
+  GstElement *audiotestsrc;
+  GObjectClass *oclass;
+  GParamSpec *property;
+  GEnumValue *values;
+  guint j = 0;
+
+  audiotestsrc = setup_audiotestsrc ();
+  oclass = G_OBJECT_GET_CLASS (audiotestsrc);
+  property = g_object_class_find_property (oclass, "wave");
+  fail_unless (G_IS_PARAM_SPEC_ENUM (property));
+  values = G_ENUM_CLASS (g_type_class_ref (property->value_type))->values;
+
+
+  while (values[j].value_name) {
+    GST_DEBUG_OBJECT (audiotestsrc, "testing wave %s", values[j].value_name);
+
+    fail_unless (gst_element_set_state (audiotestsrc,
+            GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+        "could not set to playing");
+
+    g_mutex_lock (check_mutex);
+    while (g_list_length (buffers) < 10)
+      g_cond_wait (check_cond, check_mutex);
+    g_mutex_unlock (check_mutex);
+
+    gst_element_set_state (audiotestsrc, GST_STATE_READY);
+
+    g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+    g_list_free (buffers);
+    buffers = NULL;
+    ++j;
+  }
+
+  /* cleanup */
+  cleanup_audiotestsrc (audiotestsrc);
+}
+
+GST_END_TEST;
+
+static Suite *
+audiotestsrc_suite (void)
+{
+  Suite *s = suite_create ("audiotestsrc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_all_waves);
+
+  return s;
+}
+
+GST_CHECK_MAIN (audiotestsrc);
diff --git a/tests/check/elements/decodebin.c b/tests/check/elements/decodebin.c
new file mode 100644
index 0000000..79cfe63
--- /dev/null
+++ b/tests/check/elements/decodebin.c
@@ -0,0 +1,380 @@
+/* GStreamer unit tests for decodebin
+ *
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2011 Hewlett-Packard Development Company, L.P.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/base/gstbaseparse.h>
+#include <unistd.h>
+
+static const gchar dummytext[] =
+    "Quick Brown Fox Jumps over a Lazy Frog Quick Brown "
+    "Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick "
+    "Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog "
+    "Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy "
+    "Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a "
+    "Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps "
+    "over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox "
+    "jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown "
+    "Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick "
+    "Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog "
+    "Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a Lazy "
+    "Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps over a "
+    "Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox Jumps "
+    "over a Lazy Frog Quick Brown Fox Jumps over a Lazy Frog Quick Brown Fox ";
+
+static void
+src_need_data_cb (GstElement * src, guint size, gpointer data)
+{
+  GstBuffer *buf;
+  GstFlowReturn ret;
+
+  buf = gst_buffer_new ();
+  gst_buffer_take_memory (buf, 0,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) dummytext, NULL, sizeof (dummytext), 0,
+          sizeof (dummytext)));
+
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  g_signal_emit_by_name (src, "push-buffer", buf, &ret);
+
+  fail_unless (ret == GST_FLOW_OK);
+}
+
+static void
+decodebin_pad_added_cb (GstElement * decodebin, GstPad * pad,
+    gboolean last, gboolean * p_flag)
+{
+  /* we should not be reached */
+  fail_unless (decodebin == NULL, "pad-added should not be emitted");
+}
+
+/* make sure that decodebin errors out instead of creating a new decoded pad
+ * if the entire stream is a plain text file */
+GST_START_TEST (test_text_plain_streams)
+{
+  GstElement *pipe, *src, *decodebin;
+  GstMessage *msg;
+
+  pipe = gst_pipeline_new (NULL);
+  fail_unless (pipe != NULL, "failed to create pipeline");
+
+  src = gst_element_factory_make ("appsrc", "src");
+  fail_unless (src != NULL, "Failed to create appsrc element");
+
+  g_object_set (src, "emit-signals", TRUE, NULL);
+  g_object_set (src, "num-buffers", 1, NULL);
+  g_signal_connect (src, "need-data", G_CALLBACK (src_need_data_cb), NULL);
+
+  decodebin = gst_element_factory_make ("decodebin", "decodebin");
+  fail_unless (decodebin != NULL, "Failed to create decodebin element");
+
+  g_signal_connect (decodebin, "pad-added",
+      G_CALLBACK (decodebin_pad_added_cb), NULL);
+
+  fail_unless (gst_bin_add (GST_BIN (pipe), src));
+  fail_unless (gst_bin_add (GST_BIN (pipe), decodebin));
+  fail_unless (gst_element_link (src, decodebin), "can't link src<->decodebin");
+
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  /* it's push-based, so should be async */
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_ASYNC);
+
+  /* it should error out at some point */
+  msg = gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR, -1);
+  fail_unless (msg != NULL);
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+  gst_message_unref (msg);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+
+static void
+pad_added_plug_fakesink_cb (GstElement * decodebin, GstPad * srcpad,
+    gboolean last, GstElement * pipeline)
+{
+  GstElement *sink;
+  GstPad *sinkpad;
+
+  GST_LOG ("Linking fakesink");
+
+  sink = gst_element_factory_make ("fakesink", "sink");
+  fail_unless (sink != NULL, "Failed to create fakesink element");
+
+  gst_bin_add (GST_BIN (pipeline), sink);
+
+  sinkpad = gst_element_get_static_pad (sink, "sink");
+  fail_unless_equals_int (gst_pad_link (srcpad, sinkpad), GST_PAD_LINK_OK);
+  gst_object_unref (sinkpad);
+
+  gst_element_set_state (sink, GST_STATE_PLAYING);
+}
+
+GST_START_TEST (test_reuse_without_decoders)
+{
+  GstElement *pipe, *src, *decodebin, *sink;
+
+  pipe = gst_pipeline_new (NULL);
+  fail_unless (pipe != NULL, "failed to create pipeline");
+
+  src = gst_element_factory_make ("audiotestsrc", "src");
+  fail_unless (src != NULL, "Failed to create audiotestsrc element");
+
+  decodebin = gst_element_factory_make ("decodebin", "decodebin");
+  fail_unless (decodebin != NULL, "Failed to create decodebin element");
+
+  g_signal_connect (decodebin, "pad-added",
+      G_CALLBACK (pad_added_plug_fakesink_cb), pipe);
+
+  fail_unless (gst_bin_add (GST_BIN (pipe), src));
+  fail_unless (gst_bin_add (GST_BIN (pipe), decodebin));
+  fail_unless (gst_element_link (src, decodebin), "can't link src<->decodebin");
+
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  /* it's push-based, so should be async */
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_ASYNC);
+
+  /* wait for state change to complete */
+  fail_unless_equals_int (gst_element_get_state (pipe, NULL, NULL, -1),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* there shouldn't be any errors */
+  fail_if (gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR, 0) != NULL);
+
+  /* reset */
+  gst_element_set_state (pipe, GST_STATE_READY);
+
+  sink = gst_bin_get_by_name (GST_BIN (pipe), "sink");
+  gst_bin_remove (GST_BIN (pipe), sink);
+  gst_element_set_state (sink, GST_STATE_NULL);
+  gst_object_unref (sink);
+
+  GST_LOG ("second try");
+
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  /* it's push-based, so should be async */
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_ASYNC);
+
+  /* wait for state change to complete */
+  fail_unless_equals_int (gst_element_get_state (pipe, NULL, NULL, -1),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* there shouldn't be any errors */
+  fail_if (gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR, 0) != NULL);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+
+/* Fake mp3 parser for test */
+typedef GstBaseParse TestMpegAudioParse;
+typedef GstBaseParseClass TestMpegAudioParseClass;
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, mpegversion=1, layer=[1,3], parsed=(b)true")
+    );
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, mpegversion=1, parsed=(bool) { false, true }")
+    );
+
+static GType test_mpeg_audio_parse_get_type (void);
+static gboolean test_mpeg_audio_parse_start (GstBaseParse * parse);
+static gboolean test_mpeg_audio_parse_stop (GstBaseParse * parse);
+static gboolean test_mpeg_audio_parse_check_valid_frame (GstBaseParse * parse,
+    GstBaseParseFrame * frame, guint * size, gint * skipsize);
+static GstFlowReturn test_mpeg_audio_parse_parse_frame (GstBaseParse * parse,
+    GstBaseParseFrame * frame);
+
+G_DEFINE_TYPE (TestMpegAudioParse, test_mpeg_audio_parse, GST_TYPE_BASE_PARSE);
+
+static void
+test_mpeg_audio_parse_class_init (TestMpegAudioParseClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstBaseParseClass *parse_class = GST_BASE_PARSE_CLASS (klass);
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&sink_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&src_template));
+
+  gst_element_class_set_details_simple (element_class, "MPEG1 Audio Parser",
+      "Codec/Parser/Audio", "Pretends to parse mpeg1 audio stream",
+      "Foo Bar <foo@bar.com>");
+
+  parse_class->start = test_mpeg_audio_parse_start;
+  parse_class->stop = test_mpeg_audio_parse_stop;
+  parse_class->check_valid_frame = test_mpeg_audio_parse_check_valid_frame;
+  parse_class->parse_frame = test_mpeg_audio_parse_parse_frame;
+}
+
+static gint num_parse_instances = 0;
+
+static void
+test_mpeg_audio_parse_init (TestMpegAudioParse * mp3parse)
+{
+  /* catch decodebin plugging parsers in a loop early */
+  fail_unless (++num_parse_instances < 10);
+}
+
+static gboolean
+test_mpeg_audio_parse_start (GstBaseParse * parse)
+{
+  gst_base_parse_set_min_frame_size (parse, 6);
+  return TRUE;
+}
+
+static gboolean
+test_mpeg_audio_parse_stop (GstBaseParse * parse)
+{
+  return TRUE;
+}
+
+static gboolean
+test_mpeg_audio_parse_check_valid_frame (GstBaseParse * parse,
+    GstBaseParseFrame * frame, guint * framesize, gint * skipsize)
+{
+  guint8 data[2];
+
+  gst_buffer_extract (frame->buffer, 0, data, 2);
+
+  if ((GST_READ_UINT16_BE (data) & 0xffe0) == 0xffe0) {
+    /* this framesize is hard-coded for ../test.mp3 */
+    *framesize = 1045;
+    return TRUE;
+  } else {
+    *skipsize = 1;
+    return FALSE;
+  }
+}
+
+static GstFlowReturn
+test_mpeg_audio_parse_parse_frame (GstBaseParse * parse,
+    GstBaseParseFrame * frame)
+{
+  if (GST_BUFFER_OFFSET (frame->buffer) == 0) {
+    GstCaps *caps;
+
+    caps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 1,
+        "mpegaudioversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3,
+        "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 2, NULL);
+    gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
+    gst_caps_unref (caps);
+  }
+  return GST_FLOW_OK;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return gst_element_register (plugin, "testmpegaudioparse", GST_RANK_NONE,
+      test_mpeg_audio_parse_get_type ());
+}
+
+GST_START_TEST (test_mp3_parser_loop)
+{
+  GstStateChangeReturn sret;
+  GstPluginFeature *feature;
+  GstMessage *msg;
+  GstElement *pipe, *src, *dec;
+  gchar *path;
+
+  num_parse_instances = 0;
+
+  gst_plugin_register_static (GST_VERSION_MAJOR, GST_VERSION_MINOR,
+      "fakemp3parse", "fakemp3parse", plugin_init, VERSION, "LGPL",
+      "gst-plugins-base", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+
+  feature = gst_default_registry_find_feature ("testmpegaudioparse",
+      GST_TYPE_ELEMENT_FACTORY);
+
+  gst_plugin_feature_set_rank (feature, GST_RANK_PRIMARY + 100);
+
+  pipe = gst_pipeline_new (NULL);
+
+  src = gst_element_factory_make ("filesrc", NULL);
+  fail_unless (src != NULL);
+
+  path = g_build_filename (GST_TEST_FILES_PATH, "test.mp3", NULL);
+  g_object_set (src, "location", path, NULL);
+  g_free (path);
+
+  dec = gst_element_factory_make ("decodebin", NULL);
+  fail_unless (dec != NULL);
+
+  gst_bin_add_many (GST_BIN (pipe), src, dec, NULL);
+  gst_element_link_many (src, dec, NULL);
+
+  sret = gst_element_set_state (pipe, GST_STATE_PLAYING);
+  fail_unless_equals_int (sret, GST_STATE_CHANGE_ASYNC);
+
+  /* wait for unlinked error */
+  msg = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe),
+      GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR);
+  gst_message_unref (msg);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+
+  /* make sure out parser got plugged at all though */
+  fail_unless_equals_int (num_parse_instances, 1);
+
+  /* don't want to interfere with any other of the other tests */
+  gst_plugin_feature_set_rank (feature, GST_RANK_NONE);
+  gst_object_unref (feature);
+}
+
+GST_END_TEST;
+
+static Suite *
+decodebin_suite (void)
+{
+  Suite *s = suite_create ("decodebin");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_text_plain_streams);
+  tcase_add_test (tc_chain, test_reuse_without_decoders);
+  tcase_add_test (tc_chain, test_mp3_parser_loop);
+
+  return s;
+}
+
+GST_CHECK_MAIN (decodebin);
diff --git a/tests/check/elements/encodebin.c b/tests/check/elements/encodebin.c
new file mode 100644
index 0000000..2f84d2d
--- /dev/null
+++ b/tests/check/elements/encodebin.c
@@ -0,0 +1,902 @@
+/* GStreamer unit test for gstprofile
+ *
+ * Copyright (C) <2009> Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/check/gstcheck.h>
+
+/* Helper functions to create profiles */
+
+static GstEncodingProfile *
+create_ogg_vorbis_profile (guint presence, gchar * preset)
+{
+  GstEncodingContainerProfile *cprof;
+  GstCaps *ogg, *vorbis;
+
+  ogg = gst_caps_new_simple ("application/ogg", NULL);
+  cprof =
+      gst_encoding_container_profile_new ((gchar *) "myprofile", NULL, ogg,
+      NULL);
+  gst_caps_unref (ogg);
+
+  vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
+  fail_unless (gst_encoding_container_profile_add_profile (cprof,
+          (GstEncodingProfile *) gst_encoding_audio_profile_new (vorbis, preset,
+              NULL, presence)));
+  gst_caps_unref (vorbis);
+
+  return (GstEncodingProfile *) cprof;
+}
+
+static GstEncodingProfile *
+create_ogg_theora_vorbis_profile (guint theorapresence, guint vorbispresence)
+{
+  GstEncodingContainerProfile *prof;
+  GstCaps *ogg, *vorbis, *theora;
+
+  ogg = gst_caps_new_simple ("application/ogg", NULL);
+  prof =
+      gst_encoding_container_profile_new ((gchar *) "myprofile", NULL, ogg,
+      NULL);
+  gst_caps_unref (ogg);
+
+  vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
+  fail_unless (gst_encoding_container_profile_add_profile (prof,
+          (GstEncodingProfile *) gst_encoding_audio_profile_new (vorbis, NULL,
+              NULL, vorbispresence)));
+  gst_caps_unref (vorbis);
+
+  theora = gst_caps_new_simple ("video/x-theora", NULL);
+  fail_unless (gst_encoding_container_profile_add_profile (prof,
+          (GstEncodingProfile *) gst_encoding_video_profile_new (theora, NULL,
+              NULL, theorapresence)));
+  gst_caps_unref (theora);
+
+  return (GstEncodingProfile *) prof;
+}
+
+static GstEncodingProfile *
+create_vorbis_only_profile (void)
+{
+  GstEncodingProfile *prof;
+  GstCaps *vorbis;
+
+  vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
+  prof =
+      (GstEncodingProfile *) gst_encoding_audio_profile_new (vorbis, NULL, NULL,
+      0);
+  gst_caps_unref (vorbis);
+
+  return prof;
+}
+
+GST_START_TEST (test_encodebin_states)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof, *prof2;
+  GstCaps *ogg;
+  GstPad *srcpad;
+  GstPad *target;
+
+  /* Create an encodebin and check that it correctly changes states
+   * according to whether a profile is set or not */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+
+  /* At this point, the ghostpad has *NO* target */
+  target = gst_ghost_pad_get_target (GST_GHOST_PAD (srcpad));
+  fail_unless (target == NULL);
+  gst_object_unref (srcpad);
+
+  /* No profile,
+   * switching to READY should succeed,
+   * but switching to PAUSED should fail
+   */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_FAILURE);
+
+  /* Set a profile on encodebin... */
+  ogg = gst_caps_new_simple ("application/ogg", NULL);
+  prof = (GstEncodingProfile *) gst_encoding_container_profile_new ((gchar *)
+      "myprofile", NULL, ogg, NULL);
+  gst_caps_unref (ogg);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  /* ... and check the profile has been properly set */
+  g_object_get (ebin, "profile", &prof2, NULL);
+
+  fail_unless (gst_encoding_profile_is_equal (prof, prof2));
+
+  gst_encoding_profile_unref (prof);
+  gst_encoding_profile_unref (prof2);
+
+  /* Make sure we can go to PAUSED */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* At this point, the source pad *HAS* a target */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  target = gst_ghost_pad_get_target (GST_GHOST_PAD (srcpad));
+  fail_unless (target != NULL);
+  gst_object_unref (target);
+  gst_object_unref (srcpad);
+
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_static)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstPad *srcpad, *sinkpad;
+
+  /* Create an encodebin and check that it properly creates the sink pads
+   * for a single-stream profile with fixed presence */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* streamprofile that has a forced presence of 1 */
+  prof = create_ogg_vorbis_profile (1, NULL);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  gst_object_unref (srcpad);
+
+  /* Check if the audio sink pad was properly created */
+  sinkpad = gst_element_get_static_pad (ebin, "audio_0");
+  fail_unless (sinkpad != NULL);
+  gst_object_unref (sinkpad);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_nopreset_static)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+
+  /* Create an encodebin with a bogus preset and check it fails switching states */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* streamprofile that has a forced presence of 1 */
+  prof = create_ogg_vorbis_profile (1, (gchar *) "nowaythispresetexists");
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  /* It will go to READY... */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  /* ... but to not PAUSED */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_FAILURE);
+
+  gst_element_set_state (ebin, GST_STATE_NULL);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_dynamic)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstPad *srcpad, *sinkpad;
+  GstCaps *sinkcaps;
+
+  /* Create an encodebin and check that it properly creates the sink pads
+   * for a single-stream profile with a unfixed presence */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* streamprofile that has non-forced presence */
+  prof = create_ogg_vorbis_profile (0, NULL);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  gst_object_unref (srcpad);
+
+  /* Check if the audio sink pad can be requested */
+  sinkpad = gst_element_get_request_pad (ebin, "audio_0");
+  fail_unless (sinkpad != NULL);
+  gst_element_release_request_pad (ebin, sinkpad);
+  gst_object_unref (sinkpad);
+  sinkpad = NULL;
+
+  /* Check again with the 'request-pad' signal */
+  sinkcaps = gst_caps_new_simple ("audio/x-raw", NULL);
+  g_signal_emit_by_name (ebin, "request-pad", sinkcaps, &sinkpad);
+  gst_caps_unref (sinkcaps);
+  fail_unless (sinkpad != NULL);
+  gst_element_release_request_pad (ebin, sinkpad);
+  gst_object_unref (sinkpad);
+  sinkpad = NULL;
+
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_multiple_static)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstPad *srcpad, *sinkpadvorbis, *sinkpadtheora;
+
+  /* Create an encodebin and check that it properly creates the sink pads */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* First try is with a streamprofile that has a forced presence of 1 */
+  prof = create_ogg_theora_vorbis_profile (1, 1);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  gst_object_unref (srcpad);
+
+  /* Check if the audio sink pad was properly created */
+  sinkpadvorbis = gst_element_get_static_pad (ebin, "audio_0");
+  fail_unless (sinkpadvorbis != NULL);
+  gst_object_unref (sinkpadvorbis);
+
+  /* Check if the video sink pad was properly created */
+  sinkpadtheora = gst_element_get_static_pad (ebin, "video_1");
+  fail_unless (sinkpadtheora != NULL);
+  gst_object_unref (sinkpadtheora);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_multiple_dynamic)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstPad *srcpad, *sinkpadvorbis, *sinkpadtheora;
+
+  /* Create an encodebin and check that it properly creates the sink pads
+   * for a multiple-stream with unfixed presence */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* multi-stream profile that has non-forced presence */
+  prof = create_ogg_theora_vorbis_profile (0, 0);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  gst_object_unref (srcpad);
+
+  /* Check if the audio sink pad was properly created */
+  sinkpadvorbis = gst_element_get_request_pad (ebin, "audio_0");
+  fail_unless (sinkpadvorbis != NULL);
+
+  /* Check if the video sink pad was properly created */
+  sinkpadtheora = gst_element_get_request_pad (ebin, "video_1");
+  fail_unless (sinkpadtheora != NULL);
+
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpadvorbis);
+  gst_object_unref (sinkpadvorbis);
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpadtheora);
+  gst_object_unref (sinkpadtheora);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_sink_pads_dynamic_encoder)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstPad *srcpad, *sinkpad = NULL;
+  GstCaps *vorbiscaps;
+
+  /* Create an encodebin and check that it properly creates the sink pads
+   * for a single-stream profile with a unfixed presence */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* streamprofile that has non-forced presence */
+  prof = create_ogg_vorbis_profile (0, NULL);
+
+  g_object_set (ebin, "profile", prof, NULL);
+
+  gst_encoding_profile_unref (prof);
+
+  /* Check if the source pad was properly created */
+  srcpad = gst_element_get_static_pad (ebin, "src");
+  fail_unless (srcpad != NULL);
+  gst_object_unref (srcpad);
+
+  /* Check if the audio sink pad was properly created */
+  vorbiscaps = gst_caps_from_string ("audio/x-vorbis,channels=2,rate=44100");
+  g_signal_emit_by_name (ebin, "request-pad", vorbiscaps, &sinkpad);
+  gst_caps_unref (vorbiscaps);
+  fail_unless (sinkpad != NULL);
+  gst_element_release_request_pad (ebin, sinkpad);
+  gst_object_unref (sinkpad);
+
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_render_audio_static)
+{
+  GstElement *ebin, *pipeline, *audiotestsrc, *fakesink;
+  GstEncodingProfile *prof;
+  GstBus *bus;
+  gboolean done = FALSE;
+
+  /* Create an encodebin and render 5s of vorbis/ogg */
+
+  pipeline = gst_pipeline_new ("encodebin-pipeline");
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 10, NULL);
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  prof = create_ogg_vorbis_profile (1, NULL);
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  gst_bin_add_many ((GstBin *) pipeline, audiotestsrc, ebin, fakesink, NULL);
+
+  fail_unless (gst_element_link_many (audiotestsrc, ebin, fakesink, NULL));
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+
+  while (!done) {
+    GstMessage *msg;
+
+    /* poll the bus until we get EOS without any errors */
+    msg = gst_bus_timed_pop (bus, GST_SECOND / 10);
+    if (msg) {
+      switch (GST_MESSAGE_TYPE (msg)) {
+        case GST_MESSAGE_ERROR:
+          fail ("GST_MESSAGE_ERROR");
+          break;
+        case GST_MESSAGE_EOS:
+          done = TRUE;
+          break;
+        default:
+          break;
+      }
+      gst_message_unref (msg);
+    }
+  }
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (bus);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_render_audio_only_static)
+{
+  GstElement *ebin, *pipeline, *audiotestsrc, *fakesink;
+  GstEncodingProfile *prof;
+  GstBus *bus;
+  gboolean done = FALSE;
+  GstPad *sinkpad;
+  GstCaps *sinkcaps;
+
+  /* Create an encodebin and render 5s of vorbis only */
+
+  pipeline = gst_pipeline_new ("encodebin-pipeline");
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 10, NULL);
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  prof = create_vorbis_only_profile ();
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  gst_bin_add_many ((GstBin *) pipeline, audiotestsrc, ebin, fakesink, NULL);
+
+  fail_unless (gst_element_link_many (audiotestsrc, ebin, fakesink, NULL));
+
+  /* Requesting a new pad should fail */
+  ASSERT_CRITICAL (gst_element_get_request_pad (ebin, "audio_0"));
+
+  sinkcaps = gst_caps_new_simple ("audio/x-raw", NULL);
+  g_signal_emit_by_name (ebin, "request-pad", sinkcaps, &sinkpad);
+  gst_caps_unref (sinkcaps);
+  fail_if (sinkpad != NULL);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+
+  while (!done) {
+    GstMessage *msg;
+
+    /* poll the bus until we get EOS without any errors */
+    msg = gst_bus_timed_pop (bus, GST_SECOND / 10);
+    if (msg) {
+      switch (GST_MESSAGE_TYPE (msg)) {
+        case GST_MESSAGE_ERROR:
+          fail ("GST_MESSAGE_ERROR");
+          break;
+        case GST_MESSAGE_EOS:
+          done = TRUE;
+          break;
+        default:
+          break;
+      }
+      gst_message_unref (msg);
+    }
+  }
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (bus);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_render_audio_dynamic)
+{
+  GstElement *ebin, *pipeline, *audiotestsrc, *fakesink;
+  GstEncodingProfile *prof;
+  GstBus *bus;
+  GstPad *sinkpad, *srcpad;
+  gboolean done = FALSE;
+
+  /* Create an encodebin and render 5s of vorbis/ogg */
+
+  pipeline = gst_pipeline_new ("encodebin-pipeline");
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 10, NULL);
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  prof = create_ogg_vorbis_profile (0, NULL);
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  gst_bin_add_many ((GstBin *) pipeline, audiotestsrc, ebin, fakesink, NULL);
+
+  srcpad = gst_element_get_static_pad (audiotestsrc, "src");
+  fail_unless (srcpad != NULL);
+
+  sinkpad = gst_element_get_request_pad (ebin, "audio_0");
+  fail_unless (sinkpad != NULL);
+
+  fail_unless_equals_int (gst_pad_link (srcpad, sinkpad), GST_PAD_LINK_OK);
+
+  gst_object_unref (srcpad);
+
+  fail_unless (gst_element_link (ebin, fakesink));
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+
+  while (!done) {
+    GstMessage *msg;
+
+    /* poll the bus until we get EOS without any errors */
+    msg = gst_bus_timed_pop (bus, GST_SECOND / 10);
+    if (msg) {
+      switch (GST_MESSAGE_TYPE (msg)) {
+        case GST_MESSAGE_ERROR:
+          fail ("GST_MESSAGE_ERROR");
+          break;
+        case GST_MESSAGE_EOS:
+          done = TRUE;
+          break;
+        default:
+          break;
+      }
+      gst_message_unref (msg);
+    }
+  }
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad);
+  gst_object_unref (sinkpad);
+
+  gst_object_unref (bus);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_render_audio_video_static)
+{
+  GstElement *ebin, *pipeline, *audiotestsrc, *videotestsrc, *fakesink;
+  GstEncodingProfile *prof;
+  GstBus *bus;
+  gboolean done = FALSE;
+
+  /* Create an encodebin and render 5s of vorbis/ogg */
+
+  pipeline = gst_pipeline_new ("encodebin-pipeline");
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 10, NULL);
+  videotestsrc = gst_element_factory_make ("videotestsrc", NULL);
+  g_object_set (videotestsrc, "num-buffers", 5, NULL);
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  prof = create_ogg_theora_vorbis_profile (1, 1);
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  gst_bin_add_many ((GstBin *) pipeline, audiotestsrc, videotestsrc, ebin,
+      fakesink, NULL);
+
+  fail_unless (gst_element_link (videotestsrc, ebin));
+  fail_unless (gst_element_link_many (audiotestsrc, ebin, fakesink, NULL));
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+
+  while (!done) {
+    GstMessage *msg;
+
+    /* poll the bus until we get EOS without any errors */
+    msg = gst_bus_timed_pop (bus, GST_SECOND / 10);
+    if (msg) {
+      switch (GST_MESSAGE_TYPE (msg)) {
+        case GST_MESSAGE_ERROR:
+          fail ("GST_MESSAGE_ERROR");
+          break;
+        case GST_MESSAGE_EOS:
+          done = TRUE;
+          break;
+        default:
+          break;
+      }
+      gst_message_unref (msg);
+    }
+  }
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (bus);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_render_audio_video_dynamic)
+{
+  GstElement *ebin, *pipeline, *audiotestsrc, *videotestsrc, *fakesink;
+  GstEncodingProfile *prof;
+  GstBus *bus;
+  gboolean done = FALSE;
+  GstPad *sinkpad1, *sinkpad2, *srcpad;
+
+  /* Create an encodebin and render 5s of vorbis/ogg */
+
+  pipeline = gst_pipeline_new ("encodebin-pipeline");
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 10, NULL);
+  videotestsrc = gst_element_factory_make ("videotestsrc", NULL);
+  g_object_set (videotestsrc, "num-buffers", 5, NULL);
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  prof = create_ogg_theora_vorbis_profile (0, 0);
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  gst_bin_add_many ((GstBin *) pipeline, audiotestsrc, videotestsrc, ebin,
+      fakesink, NULL);
+
+  fail_unless (gst_element_link (ebin, fakesink));
+
+  srcpad = gst_element_get_static_pad (audiotestsrc, "src");
+  sinkpad1 = gst_element_get_request_pad (ebin, "audio_0");
+  fail_unless (srcpad != NULL);
+  fail_unless (sinkpad1 != NULL);
+  fail_unless_equals_int (gst_pad_link (srcpad, sinkpad1), GST_PAD_LINK_OK);
+  gst_object_unref (srcpad);
+
+  srcpad = gst_element_get_static_pad (videotestsrc, "src");
+  sinkpad2 = gst_element_get_request_pad (ebin, "video_1");
+  fail_unless_equals_int (gst_pad_link (srcpad, sinkpad2), GST_PAD_LINK_OK);
+  gst_object_unref (srcpad);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+
+  while (!done) {
+    GstMessage *msg;
+
+    /* poll the bus until we get EOS without any errors */
+    msg = gst_bus_timed_pop (bus, GST_SECOND / 10);
+    if (msg) {
+      switch (GST_MESSAGE_TYPE (msg)) {
+        case GST_MESSAGE_ERROR:
+          fail ("GST_MESSAGE_ERROR");
+          break;
+        case GST_MESSAGE_EOS:
+          done = TRUE;
+          break;
+        default:
+          break;
+      }
+      gst_message_unref (msg);
+    }
+  }
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad1);
+  gst_object_unref (sinkpad1);
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad2);
+  gst_object_unref (sinkpad2);
+
+  gst_object_unref (bus);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_encodebin_impossible_element_combination)
+{
+  GstElement *ebin;
+  GstEncodingProfile *prof;
+  GstCaps *ogg, *x264;
+
+  ebin = gst_element_factory_make ("x264enc", NULL);
+  if (ebin == NULL) {
+    GST_DEBUG ("No available h264 encoder, skipping test");
+    return;
+  }
+  gst_object_unref (ebin);
+
+  /* Make sure that impossible combinations of encoders and muxer
+   * properly fail. In this case we try putting h264 in ogg.
+   *
+   * To properly test we abort early, we use a presence of zero for the
+   * h264 stream profile. */
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  ogg = gst_caps_new_simple ("application/ogg", NULL);
+  prof = (GstEncodingProfile *) gst_encoding_container_profile_new ((gchar *)
+      "myprofile", NULL, ogg, NULL);
+  gst_caps_unref (ogg);
+
+  x264 = gst_caps_new_simple ("video/x-h264", NULL);
+  fail_unless (gst_encoding_container_profile_add_profile
+      (GST_ENCODING_CONTAINER_PROFILE (prof),
+          (GstEncodingProfile *) gst_encoding_video_profile_new (x264, NULL,
+              NULL, 0)));
+  gst_caps_unref (x264);
+
+  g_object_set (ebin, "profile", prof, NULL);
+  gst_encoding_profile_unref (prof);
+
+  /* It will go to READY... */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+  /* ... but to not PAUSED */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_FAILURE);
+
+  gst_element_set_state (ebin, GST_STATE_NULL);
+
+  gst_object_unref (ebin);
+};
+
+GST_END_TEST;
+
+static void
+_test_encodebin_reuse (GstEncodingProfile * prof1, GstEncodingProfile * prof2)
+{
+  GstElement *ebin;
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+
+  /* Set a profile on encodebin... */
+  if (prof1)
+    g_object_set (ebin, "profile", prof1, NULL);
+
+  /* Make sure we can go to PAUSED */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  if (prof2)
+    g_object_set (ebin, "profile", prof2, NULL);
+
+  /* Make sure we can go to PLAYING */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (ebin);
+}
+
+GST_START_TEST (test_encodebin_reuse)
+{
+  GstEncodingProfile *prof1;
+  GstEncodingProfile *prof2;
+  GstEncodingProfile *prof3;
+  GstCaps *caps;
+
+  caps = gst_caps_new_simple ("application/ogg", NULL);
+  prof1 = (GstEncodingProfile *) gst_encoding_container_profile_new ((gchar *)
+      "myprofile", NULL, caps, NULL);
+  gst_caps_unref (caps);
+
+  prof2 = create_ogg_theora_vorbis_profile (1, 1);
+  prof3 = create_vorbis_only_profile ();
+
+  _test_encodebin_reuse (prof1, NULL);
+  _test_encodebin_reuse (prof1, prof1);
+
+  _test_encodebin_reuse (prof1, prof2);
+
+  _test_encodebin_reuse (prof2, prof3);
+
+  gst_encoding_profile_unref (prof1);
+  gst_encoding_profile_unref (prof2);
+  gst_encoding_profile_unref (prof3);
+};
+
+GST_END_TEST;
+
+
+static Suite *
+encodebin_suite (void)
+{
+  Suite *s = suite_create ("encodebin element");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_encodebin_states);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_static);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_nopreset_static);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_dynamic);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_multiple_static);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_multiple_dynamic);
+  tcase_add_test (tc_chain, test_encodebin_sink_pads_dynamic_encoder);
+  tcase_add_test (tc_chain, test_encodebin_render_audio_static);
+  tcase_add_test (tc_chain, test_encodebin_render_audio_only_static);
+  tcase_add_test (tc_chain, test_encodebin_render_audio_dynamic);
+  tcase_add_test (tc_chain, test_encodebin_render_audio_video_static);
+  tcase_add_test (tc_chain, test_encodebin_render_audio_video_dynamic);
+  tcase_add_test (tc_chain, test_encodebin_impossible_element_combination);
+  tcase_add_test (tc_chain, test_encodebin_reuse);
+
+  return s;
+}
+
+GST_CHECK_MAIN (encodebin);
diff --git a/tests/check/elements/libvisual.c b/tests/check/elements/libvisual.c
new file mode 100644
index 0000000..f2f37d7
--- /dev/null
+++ b/tests/check/elements/libvisual.c
@@ -0,0 +1,118 @@
+/* GStreamer unit test for libvisual plugin
+ *
+ * Copyright (C) 2007 Tim-Philipp Müller <tim at centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+
+static gboolean
+filter_func (GstPluginFeature * feature, gpointer user_data)
+{
+  return (g_str_has_prefix (GST_OBJECT_NAME (feature), "libvisual_"));
+}
+
+static void
+test_shutdown_for_factory (const gchar * factory_name)
+{
+  GstElement *pipeline, *src, *q, *ac, *vis, *cf, *q2, *sink;
+  GstCaps *caps;
+  guint i;
+
+  pipeline = gst_pipeline_new (NULL);
+
+  src = gst_check_setup_element ("audiotestsrc");
+  q = gst_check_setup_element ("queue");
+  ac = gst_check_setup_element ("audioconvert");
+
+  GST_INFO ("Using %s", factory_name);
+  vis = gst_check_setup_element (factory_name);
+
+  cf = gst_check_setup_element ("capsfilter");
+  caps = gst_caps_new_simple ("video/x-raw", "width", G_TYPE_INT, 320,
+      "height", G_TYPE_INT, 240, "framerate", GST_TYPE_FRACTION, 15, 1, NULL);
+  g_object_set (cf, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  q2 = gst_check_setup_element ("queue");
+  gst_object_set_name (GST_OBJECT (q2), "queue2");
+  sink = gst_check_setup_element ("fakesink");
+
+  /* don't want to sync against the clock, the more throughput the better */
+  g_object_set (src, "is-live", FALSE, NULL);
+  g_object_set (sink, "sync", FALSE, NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), src, q, ac, vis, cf, q2, sink, NULL);
+  fail_if (!gst_element_link_many (src, q, ac, vis, cf, q2, sink, NULL));
+
+  /* now, wait until pipeline is running and then shut it down again; repeat;
+   * this makes sure we can shut down cleanly while stuff is going on in the
+   * chain function */
+  for (i = 0; i < 50; ++i) {
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    gst_element_get_state (pipeline, NULL, NULL, -1);
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    g_usleep (100);
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+  }
+
+  gst_object_unref (pipeline);
+}
+
+GST_START_TEST (test_shutdown)
+{
+  const gchar *factory_to_test;
+
+  factory_to_test = g_getenv ("LIBVISUAL_UNIT_TEST_FACTORY");
+
+  if (factory_to_test == NULL) {
+    GList *list, *l;
+
+    list = gst_default_registry_feature_filter (filter_func, FALSE, NULL);
+    if (list == NULL) {
+      g_print ("No libvisual plugins installed.\n");
+      return;
+    }
+    for (l = list; l != NULL; l = l->next) {
+      test_shutdown_for_factory (GST_OBJECT_NAME (l->data));
+    }
+    gst_plugin_feature_list_free (list);
+  } else {
+    test_shutdown_for_factory (factory_to_test);
+  }
+}
+
+GST_END_TEST;
+
+static Suite *
+libvisual_suite (void)
+{
+  Suite *s = suite_create ("libvisual");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+
+  /* set one manually, since we're currently built as uninst program with
+   * the default timeout of 3 seconds, which is way too short */
+  tcase_set_timeout (tc_chain, 30);
+
+  tcase_add_test (tc_chain, test_shutdown);
+
+  return s;
+}
+
+GST_CHECK_MAIN (libvisual);
diff --git a/tests/check/elements/vorbisdec.c b/tests/check/elements/vorbisdec.c
new file mode 100644
index 0000000..ecdc329
--- /dev/null
+++ b/tests/check/elements/vorbisdec.c
@@ -0,0 +1,339 @@
+/* GStreamer
+ *
+ * unit test for vorbisdec
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+/* a valid first header packet */
+static guchar identification_header[30] = {
+  1,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  0, 0, 0, 0,                   /* vorbis_version */
+  2,                            /* audio_channels */
+  0x44, 0xac, 0, 0,             /* sample_rate */
+  0xff, 0xff, 0xff, 0xff,       /* bitrate_maximum */
+  0x00, 0xee, 0x02, 0x00,       /* bitrate_nominal */
+  0xff, 0xff, 0xff, 0xff,       /* bitrate_minimum */
+  0xb8,                         /* blocksize_0, blocksize_1 */
+  0x01,                         /* framing_flag */
+};
+
+static guchar comment_header[] = {
+  3,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  2, 0, 0, 0,                   /* vendor_length */
+  'm', 'e',
+  1, 0, 0, 0,                   /* user_comment_list_length */
+  9, 0, 0, 0,                   /* length comment[0] */
+  'A', 'R', 'T', 'I', 'S', 'T', '=', 'm', 'e',
+  0x01,                         /* framing bit */
+};
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstElement *
+setup_vorbisdec (void)
+{
+  GstElement *vorbisdec;
+
+  GST_DEBUG ("setup_vorbisdec");
+  vorbisdec = gst_check_setup_element ("vorbisdec");
+  mysrcpad = gst_check_setup_src_pad (vorbisdec, &srctemplate, NULL);
+  mysinkpad = gst_check_setup_sink_pad (vorbisdec, &sinktemplate, NULL);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  return vorbisdec;
+}
+
+static void
+cleanup_vorbisdec (GstElement * vorbisdec)
+{
+  GST_DEBUG ("cleanup_vorbisdec");
+  gst_element_set_state (vorbisdec, GST_STATE_NULL);
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (vorbisdec);
+  gst_check_teardown_sink_pad (vorbisdec);
+  gst_check_teardown_element (vorbisdec);
+}
+
+GST_START_TEST (test_empty_identification_header)
+{
+  GstElement *vorbisdec;
+  GstBuffer *inbuffer;
+  GstBus *bus;
+  GstMessage *message;
+
+  vorbisdec = setup_vorbisdec ();
+  bus = gst_bus_new ();
+
+  fail_unless (gst_element_set_state (vorbisdec,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
+  inbuffer = gst_buffer_new_and_alloc (0);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+  /* set a bus here so we avoid getting state change messages */
+  gst_element_set_bus (vorbisdec, bus);
+
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_ERROR);
+  /* ... but it ends up being collected on the global buffer list */
+  fail_unless_equals_int (g_list_length (buffers), 0);
+
+  fail_if ((message = gst_bus_pop (bus)) == NULL);
+  fail_unless_message_error (message, STREAM, DECODE);
+  gst_message_unref (message);
+  gst_element_set_bus (vorbisdec, NULL);
+
+  /* cleanup */
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_vorbisdec (vorbisdec);
+}
+
+GST_END_TEST;
+
+/* FIXME: also tests comment header */
+GST_START_TEST (test_identification_header)
+{
+  GstElement *vorbisdec;
+  GstBuffer *inbuffer;
+  GstBus *bus;
+  GstMessage *message;
+  GstTagList *tag_list;
+  gchar *artist;
+
+  vorbisdec = setup_vorbisdec ();
+  fail_unless (gst_element_set_state (vorbisdec,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+  bus = gst_bus_new ();
+
+  inbuffer = gst_buffer_new_and_alloc (30);
+  gst_buffer_fill (inbuffer, 0, identification_header, 30);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_ref (inbuffer);
+
+  gst_element_set_bus (vorbisdec, bus);
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+  /* ... and nothing ends up on the global buffer list */
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+  fail_unless (g_list_length (buffers) == 0);
+  fail_if ((message = gst_bus_pop (bus)) != NULL);
+
+  inbuffer = gst_buffer_new_and_alloc (sizeof (comment_header));
+  gst_buffer_fill (inbuffer, 0, comment_header, sizeof (comment_header));
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_ref (inbuffer);
+
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+  /* ... and nothing ends up on the global buffer list */
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+  fail_unless (g_list_length (buffers) == 0);
+  /* there's a tag message waiting */
+  fail_if ((message = gst_bus_pop (bus)) == NULL);
+  gst_message_parse_tag (message, &tag_list);
+  fail_unless_equals_int (gst_tag_list_get_tag_size (tag_list, GST_TAG_ARTIST),
+      1);
+  fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
+  fail_unless_equals_string (artist, "me");
+  g_free (artist);
+  fail_unless_equals_int (gst_tag_list_get_tag_size (tag_list, "album"), 0);
+  gst_tag_list_free (tag_list);
+  gst_message_unref (message);
+
+  /* cleanup */
+  gst_bus_set_flushing (bus, TRUE);
+  gst_element_set_bus (vorbisdec, NULL);
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_vorbisdec (vorbisdec);
+}
+
+GST_END_TEST;
+
+static vorbis_comment vc;
+static vorbis_dsp_state vd;
+static vorbis_info vi;
+static vorbis_block vb;
+
+static GstBuffer *
+_create_codebook_header_buffer (void)
+{
+  GstBuffer *buffer;
+  ogg_packet header;
+  ogg_packet header_comm;
+  ogg_packet header_code;
+
+  vorbis_info_init (&vi);
+  vorbis_encode_setup_vbr (&vi, 1, 44000, 0.5);
+  vorbis_encode_setup_init (&vi);
+  vorbis_analysis_init (&vd, &vi);
+  vorbis_block_init (&vd, &vb);
+  vorbis_comment_init (&vc);
+  vorbis_analysis_headerout (&vd, &vc, &header, &header_comm, &header_code);
+
+  buffer = gst_buffer_new_and_alloc (header_code.bytes);
+  gst_buffer_fill (buffer, 0, header_code.packet, header_code.bytes);
+
+  return buffer;
+}
+
+static GstBuffer *
+_create_audio_buffer (void)
+{
+  GstBuffer *buffer;
+  ogg_packet packet;
+  float **vorbis_buffer;
+  gint i;
+
+  vorbis_buffer = vorbis_analysis_buffer (&vd, 44100);
+  for (i = 0; i < 44100 * 1; ++i)
+    vorbis_buffer[0][i] = 0.0;
+  vorbis_analysis_wrote (&vd, 44100);
+  vorbis_analysis_blockout (&vd, &vb);
+  vorbis_analysis (&vb, NULL);
+  vorbis_bitrate_addblock (&vb);
+  vorbis_bitrate_flushpacket (&vd, &packet);
+  buffer = gst_buffer_new_and_alloc (packet.bytes);
+  gst_buffer_fill (buffer, 0, packet.packet, packet.bytes);
+
+  vorbis_comment_clear (&vc);
+  vorbis_block_clear (&vb);
+  vorbis_dsp_clear (&vd);
+  vorbis_info_clear (&vi);
+
+  return buffer;
+}
+
+GST_START_TEST (test_empty_vorbis_packet)
+{
+  GstElement *vorbisdec;
+  GstBuffer *inbuffer;
+  GstMessage *message;
+  GstBus *bus;
+
+  vorbisdec = setup_vorbisdec ();
+  fail_unless_equals_int (gst_element_set_state (vorbisdec, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_SUCCESS);
+
+  bus = gst_bus_new ();
+
+  inbuffer = gst_buffer_new_and_alloc (30);
+  gst_buffer_fill (inbuffer, 0, identification_header, 30);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_ref (inbuffer);
+
+  gst_element_set_bus (vorbisdec, bus);
+
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+  /* ... and nothing ends up on the global buffer list */
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+  fail_unless (g_list_length (buffers) == 0);
+  fail_if ((message = gst_bus_pop (bus)) != NULL);
+
+  inbuffer = gst_buffer_new_and_alloc (sizeof (comment_header));
+  gst_buffer_fill (inbuffer, 0, comment_header, sizeof (comment_header));
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_ref (inbuffer);
+
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+  /* ... and nothing ends up on the global buffer list */
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+  fail_unless (g_list_length (buffers) == 0);
+
+  /* send minimal codebook header and audio packers */
+  inbuffer = _create_codebook_header_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* now send an empty vorbis packet, which should just be skipped */
+  inbuffer = gst_buffer_new_and_alloc (0);
+  gst_buffer_ref (inbuffer);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+  fail_unless (g_list_length (buffers) == 0);
+
+  /* create and push an encoded audio packet */
+  inbuffer = _create_audio_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* now send another empty vorbis packet, which should just be skipped */
+  inbuffer = gst_buffer_new_and_alloc (0);
+  gst_buffer_ref (inbuffer);
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_unref (inbuffer);
+
+  /* make sure there's no error on the bus */
+  message = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
+  fail_if (message != NULL);
+
+  /* cleanup */
+  gst_bus_set_flushing (bus, TRUE);
+  gst_element_set_bus (vorbisdec, NULL);
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_vorbisdec (vorbisdec);
+}
+
+GST_END_TEST;
+
+static Suite *
+vorbisdec_suite (void)
+{
+  Suite *s = suite_create ("vorbisdec");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_empty_identification_header);
+  tcase_add_test (tc_chain, test_identification_header);
+  tcase_add_test (tc_chain, test_empty_vorbis_packet);
+
+  return s;
+}
+
+GST_CHECK_MAIN (vorbisdec);
diff --git a/tests/check/elements/vorbistag.c b/tests/check/elements/vorbistag.c
new file mode 100644
index 0000000..9601625
--- /dev/null
+++ b/tests/check/elements/vorbistag.c
@@ -0,0 +1,411 @@
+/* GStreamer
+ *
+ * unit test for vorbisdec
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+#include <glib.h>
+
+#include <vorbis/codec.h>
+#include <vorbis/vorbisenc.h>
+
+#include <gst/gsttagsetter.h>
+#include <gst/check/gstcheck.h>
+
+/* a valid first header packet */
+static guchar identification_header[30] = {
+  1,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  0, 0, 0, 0,                   /* vorbis_version */
+  2,                            /* audio_channels */
+  0x44, 0xac, 0, 0,             /* sample_rate */
+  0xff, 0xff, 0xff, 0xff,       /* bitrate_maximum */
+  0x00, 0xee, 0x02, 0x00,       /* bitrate_nominal */
+  0xff, 0xff, 0xff, 0xff,       /* bitrate_minimum */
+  0xb8,                         /* blocksize_0, blocksize_1 */
+  0x01                          /* framing_flag */
+};
+
+static guchar artist_comment_header[] = {
+  3,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  2, 0, 0, 0,                   /* vendor_length */
+  'm', 'e',
+  1, 0, 0, 0,                   /* user_comment_list_length */
+  9, 0, 0, 0,                   /* length comment[0] */
+  'A', 'R', 'T', 'I', 'S', 'T', '=', 'm', 'e',
+  0x01,                         /* framing bit */
+};
+
+static guchar title_comment_header[] = {
+  3,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  2, 0, 0, 0,                   /* vendor_length */
+  'm', 'e',
+  1, 0, 0, 0,                   /* user_comment_list_length */
+  12, 0, 0, 0,                  /* length comment[0] */
+  'T', 'I', 'T', 'L', 'E', '=', 'f', 'o', 'o', 'b', 'a', 'r',
+  0x01,                         /* framing bit */
+};
+
+static guchar empty_comment_header[] = {
+  3,                            /* packet_type */
+  'v', 'o', 'r', 'b', 'i', 's',
+  2, 0, 0, 0,                   /* vendor_length */
+  'm', 'e',
+  0, 0, 0, 0,                   /* user_comment_list_length */
+  0x01,                         /* framing bit */
+};
+
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstPad *mysrcpad, *mysinkpad;
+static GAsyncQueue *pending_buffers;
+static gulong id;
+
+
+static GstElement *
+setup_vorbistag (void)
+{
+  GstElement *vorbistag;
+
+  GST_DEBUG ("setup_vorbistag");
+  vorbistag = gst_check_setup_element ("vorbistag");
+  mysrcpad = gst_check_setup_src_pad (vorbistag, &srctemplate, NULL);
+  mysinkpad = gst_check_setup_sink_pad (vorbistag, &sinktemplate, NULL);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  return vorbistag;
+}
+
+static void
+cleanup_vorbistag (GstElement * vorbistag)
+{
+  GST_DEBUG ("cleanup_vorbistag");
+  gst_element_set_state (vorbistag, GST_STATE_NULL);
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (vorbistag);
+  gst_check_teardown_sink_pad (vorbistag);
+  gst_check_teardown_element (vorbistag);
+}
+
+
+static GstProbeReturn
+buffer_probe (GstPad * pad, GstProbeType type, GstBuffer * buffer,
+    gpointer unused)
+{
+  g_async_queue_push (pending_buffers, gst_buffer_ref (buffer));
+  return GST_PROBE_OK;
+}
+
+static void
+start_pipeline (GstElement * element)
+{
+  id = gst_pad_add_probe (mysinkpad, GST_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) buffer_probe, NULL, NULL);
+
+  pending_buffers = g_async_queue_new ();
+  gst_element_set_state (element, GST_STATE_PLAYING);
+}
+
+static GstBuffer *
+get_buffer (void)
+{
+  return GST_BUFFER (g_async_queue_pop (pending_buffers));
+}
+
+static void
+stop_pipeline (GstElement * element)
+{
+  GstBuffer *buf;
+
+  while ((buf = g_async_queue_try_pop (pending_buffers)))
+    gst_buffer_unref (buf);
+
+  gst_pad_remove_probe (mysinkpad, id);
+  id = 0;
+
+  gst_element_set_state (element, GST_STATE_NULL);
+
+  while ((buf = g_async_queue_try_pop (pending_buffers)))
+    gst_buffer_unref (buf);
+
+  g_async_queue_unref (pending_buffers);
+  pending_buffers = NULL;
+}
+
+static void
+compare_buffer (GstBuffer * buf, const guint8 * data, gsize size)
+{
+  guint8 *bdata;
+  gsize bsize;
+
+  bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  fail_unless_equals_int (bsize, size);
+  fail_unless_equals_int (memcmp (bdata, data, size), 0);
+  gst_buffer_unmap (buf, bdata, bsize);
+}
+
+static vorbis_comment vc;
+static vorbis_dsp_state vd;
+static vorbis_info vi;
+static vorbis_block vb;
+
+static GstBuffer *
+_create_codebook_header_buffer (void)
+{
+  GstBuffer *buffer;
+  ogg_packet header;
+  ogg_packet header_comm;
+  ogg_packet header_code;
+
+  vorbis_info_init (&vi);
+  vorbis_encode_setup_vbr (&vi, 1, 44000, 0.5);
+  vorbis_encode_setup_init (&vi);
+  vorbis_analysis_init (&vd, &vi);
+  vorbis_block_init (&vd, &vb);
+  vorbis_comment_init (&vc);
+  vorbis_analysis_headerout (&vd, &vc, &header, &header_comm, &header_code);
+
+  buffer = gst_buffer_new_and_alloc (header_code.bytes);
+  gst_buffer_fill (buffer, 0, header_code.packet, header_code.bytes);
+
+  return buffer;
+}
+
+static GstBuffer *
+_create_audio_buffer (void)
+{
+  GstBuffer *buffer;
+  ogg_packet packet;
+  float **vorbis_buffer G_GNUC_UNUSED;
+
+  vorbis_buffer = vorbis_analysis_buffer (&vd, 0);
+  vorbis_analysis_wrote (&vd, 0);
+  vorbis_analysis_blockout (&vd, &vb);
+  vorbis_analysis (&vb, NULL);
+  vorbis_bitrate_addblock (&vb);
+  vorbis_bitrate_flushpacket (&vd, &packet);
+  buffer = gst_buffer_new_and_alloc (packet.bytes);
+  gst_buffer_fill (buffer, 0, packet.packet, packet.bytes);
+
+  vorbis_comment_clear (&vc);
+  vorbis_block_clear (&vb);
+  vorbis_dsp_clear (&vd);
+  vorbis_info_clear (&vi);
+
+  return buffer;
+}
+
+
+GST_START_TEST (test_empty_tags_set)
+{
+  GstTagList *tags;
+  GstElement *vorbistag;
+  GstBuffer *inbuffer, *outbuffer;
+
+  vorbistag = setup_vorbistag ();
+
+  tags = gst_tag_list_new ();
+  gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE, "foobar", NULL);
+  gst_tag_setter_merge_tags (GST_TAG_SETTER (vorbistag), tags,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_setter_set_tag_merge_mode (GST_TAG_SETTER (vorbistag),
+      GST_TAG_MERGE_KEEP_ALL);
+  gst_tag_list_free (tags);
+
+  start_pipeline (vorbistag);
+
+  /* send identification header */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (identification_header));
+  gst_buffer_fill (inbuffer, 0, identification_header,
+      sizeof (identification_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send empty comment buffer */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (empty_comment_header));
+  gst_buffer_fill (inbuffer, 0, empty_comment_header,
+      sizeof (empty_comment_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send minimal codebook header and audio packers */
+  inbuffer = _create_codebook_header_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+  inbuffer = _create_audio_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+
+  /* check identification header is unchanged */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, identification_header,
+      sizeof (identification_header));
+  gst_buffer_unref (outbuffer);
+
+  /* check comment header is correct */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, title_comment_header,
+      sizeof (title_comment_header));
+  gst_buffer_unref (outbuffer);
+
+  stop_pipeline (vorbistag);
+  cleanup_vorbistag (vorbistag);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_filled_tags_unset)
+{
+  GstTagList *tags;
+  GstElement *vorbistag;
+  GstBuffer *inbuffer, *outbuffer;
+
+  vorbistag = setup_vorbistag ();
+
+  tags = gst_tag_list_new ();
+  gst_tag_setter_merge_tags (GST_TAG_SETTER (vorbistag), tags,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_setter_set_tag_merge_mode (GST_TAG_SETTER (vorbistag),
+      GST_TAG_MERGE_KEEP_ALL);
+  gst_tag_list_free (tags);
+
+  start_pipeline (vorbistag);
+
+  /* send identification header */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (identification_header));
+  gst_buffer_fill (inbuffer, 0, identification_header,
+      sizeof (identification_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send empty comment buffer */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (title_comment_header));
+  gst_buffer_fill (inbuffer, 0, title_comment_header,
+      sizeof (title_comment_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send minimal codebook header and audio packers */
+  inbuffer = _create_codebook_header_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+  inbuffer = _create_audio_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+
+  /* check identification header is unchanged */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, identification_header,
+      sizeof (identification_header));
+  gst_buffer_unref (outbuffer);
+
+  /* check comment header is correct */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, empty_comment_header,
+      sizeof (empty_comment_header));
+  gst_buffer_unref (outbuffer);
+
+  stop_pipeline (vorbistag);
+  cleanup_vorbistag (vorbistag);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_filled_tags_change)
+{
+  GstTagList *tags;
+  GstElement *vorbistag;
+  GstBuffer *inbuffer, *outbuffer;
+
+  vorbistag = setup_vorbistag ();
+
+  tags = gst_tag_list_new ();
+  gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE, "foobar", NULL);
+  gst_tag_setter_merge_tags (GST_TAG_SETTER (vorbistag), tags,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_setter_set_tag_merge_mode (GST_TAG_SETTER (vorbistag),
+      GST_TAG_MERGE_KEEP_ALL);
+  gst_tag_list_free (tags);
+
+  start_pipeline (vorbistag);
+
+  /* send identification header */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (identification_header));
+  gst_buffer_fill (inbuffer, 0, identification_header,
+      sizeof (identification_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send empty comment buffer */
+  inbuffer = gst_buffer_new_and_alloc (sizeof (artist_comment_header));
+  gst_buffer_fill (inbuffer, 0, artist_comment_header,
+      sizeof (artist_comment_header));
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  /* send minimal codebook header and audio packers */
+  inbuffer = _create_codebook_header_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+  inbuffer = _create_audio_buffer ();
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+
+  /* check identification header is unchanged */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, identification_header,
+      sizeof (identification_header));
+  gst_buffer_unref (outbuffer);
+
+  /* check comment header is correct */
+  outbuffer = get_buffer ();
+  compare_buffer (outbuffer, title_comment_header,
+      sizeof (title_comment_header));
+  gst_buffer_unref (outbuffer);
+
+  stop_pipeline (vorbistag);
+  cleanup_vorbistag (vorbistag);
+}
+
+GST_END_TEST;
+
+
+
+static Suite *
+vorbistag_suite (void)
+{
+  Suite *s = suite_create ("vorbistag");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_empty_tags_set);
+  tcase_add_test (tc_chain, test_filled_tags_unset);
+  tcase_add_test (tc_chain, test_filled_tags_change);
+
+  return s;
+}
+
+GST_CHECK_MAIN (vorbistag)
diff --git a/tests/check/generic/clock-selection.c b/tests/check/generic/clock-selection.c
new file mode 100644
index 0000000..8e332f8
--- /dev/null
+++ b/tests/check/generic/clock-selection.c
@@ -0,0 +1,72 @@
+/* GStreamer
+ *
+ * unit test for clock selection
+ *
+ * Copyright (C) <2005> Wim Taymans <wim at fluendo dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+
+GST_START_TEST (test_add)
+{
+  GstElement *pipeline;
+  GstStateChangeReturn ret;
+
+  pipeline = gst_pipeline_new ("pipeline");
+  fail_unless (pipeline != NULL, "could not create pipeline");
+
+  ret = gst_element_set_state (pipeline, GST_STATE_READY);
+  fail_unless (ret == GST_STATE_CHANGE_SUCCESS, "could not set to READY");
+
+  /* cleanup */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
+static Suite *
+volume_suite (void)
+{
+  Suite *s = suite_create ("clocks");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_add);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = volume_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c
new file mode 100644
index 0000000..4db8a1b
--- /dev/null
+++ b/tests/check/generic/states.c
@@ -0,0 +1,222 @@
+/* GStreamer
+ *
+ * unit test for state changes on all elements
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup (void)
+{
+  GList *features, *f;
+  GList *plugins, *p;
+  gchar **ignorelist = NULL;
+  const gchar *STATE_IGNORE_ELEMENTS = NULL;
+
+  GST_DEBUG ("getting elements for package %s", PACKAGE);
+  STATE_IGNORE_ELEMENTS = g_getenv ("GST_STATE_IGNORE_ELEMENTS");
+  if (!g_getenv ("GST_NO_STATE_IGNORE_ELEMENTS") && STATE_IGNORE_ELEMENTS) {
+    GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
+    ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
+  }
+
+  plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
+
+  for (p = plugins; p; p = p->next) {
+    GstPlugin *plugin = p->data;
+
+    if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+      continue;
+
+    features =
+        gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
+        gst_plugin_get_name (plugin));
+
+    for (f = features; f; f = f->next) {
+      GstPluginFeature *feature = f->data;
+      const gchar *name = gst_plugin_feature_get_name (feature);
+      gboolean ignore = FALSE;
+
+      if (!GST_IS_ELEMENT_FACTORY (feature))
+        continue;
+
+      if (ignorelist) {
+        gchar **s;
+
+        for (s = ignorelist; s && *s; ++s) {
+          if (g_str_has_prefix (name, *s)) {
+            GST_DEBUG ("ignoring element %s", name);
+            ignore = TRUE;
+          }
+        }
+        if (ignore)
+          continue;
+      }
+
+      GST_DEBUG ("adding element %s", name);
+      elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+    }
+    gst_plugin_feature_list_free (features);
+  }
+  gst_plugin_list_free (plugins);
+  g_strfreev (ignorelist);
+}
+
+static void
+teardown (void)
+{
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    g_free (e->data);
+  }
+  g_list_free (elements);
+  elements = NULL;
+}
+
+
+GST_START_TEST (test_state_changes_up_and_down_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_DEBUG ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_up_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_DEBUG ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_down_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_DEBUG ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+
+static Suite *
+states_suite (void)
+{
+  Suite *s = suite_create ("states");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, setup, teardown);
+  tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
+  tcase_add_test (tc_chain, test_state_changes_up_seq);
+  tcase_add_test (tc_chain, test_state_changes_down_seq);
+
+  return s;
+}
+
+GST_CHECK_MAIN (states);
diff --git a/tests/check/gst-plugins-base.supp b/tests/check/gst-plugins-base.supp
new file mode 100644
index 0000000..0d0705d
--- /dev/null
+++ b/tests/check/gst-plugins-base.supp
@@ -0,0 +1,389 @@
+# A suppression for an old bug in libtheora (fixed in more recent versions,
+# but some of our buildslaves still have this)
+{
+   <Leaky libtheora>
+   Memcheck:Leak
+   fun:realloc
+   fun:oggpackB_write
+   fun:EncodeData
+   obj:/usr/lib/libtheora.so*
+   fun:theora_encode_YUVin
+}
+
+# Suppression for pango on ubuntu edgy/x86 and textoverlay test
+{
+   <pango>
+   Memcheck:Param
+   access(pathname)
+   fun:access
+   fun:pango_config_key_get
+   fun:pango_find_map
+}
+
+{
+   <suppression for a singleton in GIO that can't be cleaned up>
+   Memcheck:Leak
+   fun:realloc
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:g_type_create_instance
+   fun:g_object_constructor
+   fun:g_object_newv
+   fun:g_object_new_valist
+   fun:g_object_new
+   fun:get_default_vfs
+   fun:g_once_impl
+   fun:g_vfs_get_default
+}
+
+{
+   <suppression for a singleton in GIO that can't be cleaned up>
+   Memcheck:Leak
+   fun:malloc
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   fun:g_type_create_instance
+   fun:g_object_constructor
+   fun:g_object_newv
+   fun:g_object_new_valist
+   fun:g_object_new
+   fun:get_default_vfs
+   fun:g_once_impl
+   fun:g_vfs_get_default
+}
+
+{
+   <ALSA unitialised access>
+   Memcheck:Cond
+   obj:/usr/lib/libasound.so.*
+   fun:snd_pcm_hw_params_set_buffer_time_near
+}
+
+{
+   <ALSA unitialized access>
+   Memcheck:Cond
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_pcm_hw_params_set_buffer_time_near
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:malloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsa_device_property_probe_get_values
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:calloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_hook_load
+   obj:*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_searcha_hooks
+   fun:snd_config_searchva_hooks
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_search_definition
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsa_device_property_probe_get_values
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:calloc
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_searcha_hooks
+   fun:snd_config_searchva_hooks
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_search_definition
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsa_device_property_probe_get_values
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:calloc
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_searcha_hooks
+   fun:snd_config_searchva_hooks
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_search_definition
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsa_device_property_probe_get_values
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:calloc
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_searcha_hooks
+   fun:snd_config_searchva_hooks
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_search_definition
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsa_device_property_probe_get_values
+}
+
+{
+   <One time init in ALSA>
+   Memcheck:Leak
+   fun:malloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_hctl_open
+   fun:snd_mixer_attach
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_proplist_sets
+   fun:pa_context_new_with_proplist
+   fun:pa_context_new
+   obj:/usr/lib/alsa-lib/libasound_module_pcm_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_pcm_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_hook_load
+   obj:/usr/lib/alsa-lib/libasound_module_ctl_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_proplist_sets
+   fun:pa_context_new_with_proplist
+   fun:pa_context_new
+   obj:/usr/lib/alsa-lib/libasound_module_ctl_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_ctl_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_ctl_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_ctl_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:snd_config_hook_load
+   obj:/usr/lib/alsa-lib/libasound_module_pcm_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_pcm_pulse.so
+}
+
+{
+   <Pulseaudio ALSA plugin initialisation>
+   Memcheck:Leak
+   fun:calloc
+   fun:pa_xmalloc0
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   obj:/usr/lib/libpulse.so.*
+   fun:pa_mainloop_dispatch
+   obj:/usr/lib/alsa-lib/libasound_module_pcm_pulse.so
+}
+
+{
+   <One time ALSA init>
+   Memcheck:Leak
+   fun:malloc
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   obj:/usr/lib/libasound.so.*
+   fun:gst_alsasrc_open
+}
+
+{
+   <Fontconfig init>
+   Memcheck:Leak
+   fun:*alloc
+   ...
+   fun:FcConfigParseAndLoad
+}
+
+{
+   <Fontconfig init>
+   Memcheck:Leak
+   fun:realloc
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   fun:FcDefaultSubstitute
+}
+
+{
+   <Fontconfig init>
+   Memcheck:Leak
+   fun:realloc
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   fun:FcConfigSubstituteWithPat
+}
+
+{
+   <Fontconfig init>
+   Memcheck:Leak
+   fun:realloc
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   obj:/usr/lib/libfontconfig.so.*
+   fun:FcFontRenderPrepare
+}
diff --git a/tests/check/gst/typefindfunctions.c b/tests/check/gst/typefindfunctions.c
new file mode 100644
index 0000000..c9d8a33
--- /dev/null
+++ b/tests/check/gst/typefindfunctions.c
@@ -0,0 +1,407 @@
+/* GStreamer unit tests for the -base typefind functions
+ *
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/base/gsttypefindhelper.h>
+
+GST_START_TEST (test_quicktime_mpeg4video)
+{
+  /* quicktime redirect file which starts with what could also be interpreted
+   * as an MPEG-4 video object layer start code */
+  const guint8 qt_redirect_396042[] =
+      { 0x00, 0x00, 0x01, 0x22, 0x6d, 0x6f, 0x6f, 0x76, 0x00, 0x00, 0x01, 0x1a,
+    0x72, 0x6d, 0x72, 0x61, 0x00, 0x00, 0x00, 0x86, 0x72, 0x6d, 0x64, 0x61,
+    0x00, 0x00, 0x00, 0x54, 0x72, 0x64, 0x72, 0x66, 0x00, 0x00, 0x00, 0x00,
+    0x75, 0x72, 0x6c, 0x20, 0x00, 0x00, 0x00, 0x40, 0x68, 0x74, 0x74, 0x70,
+    0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x71, 0x74,
+    0x76, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+    0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6a, 0x61, 0x6e, 0x2f, 0x6a,
+    0x34, 0x37, 0x64, 0x35, 0x32, 0x6f, 0x6f, 0x2f, 0x71, 0x74, 0x37, 0x72,
+    0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x6d, 0x6f, 0x76, 0x00,
+    0x00, 0x00, 0x00, 0x10, 0x72, 0x6d, 0x64, 0x72, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x00, 0x1a, 0x72, 0x6d, 0x76, 0x63,
+    0x00, 0x00, 0x00, 0x00, 0x71, 0x74, 0x69, 0x6d, 0x06, 0x50, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x72, 0x6d,
+    0x64, 0x61, 0x00, 0x00, 0x00, 0x5a, 0x72, 0x64, 0x72, 0x66, 0x00, 0x00,
+    0x00, 0x00, 0x75, 0x72, 0x6c, 0x20, 0x00, 0x00, 0x00, 0x46, 0x68, 0x74,
+    0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e,
+    0x71, 0x74, 0x76, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
+    0x6d, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6a, 0x61, 0x6e,
+    0x2f, 0x6a, 0x34, 0x37, 0x64, 0x35, 0x32, 0x6f, 0x6f, 0x2f, 0x38, 0x38,
+    0x34, 0x38, 0x31, 0x32, 0x35, 0x5f, 0x32, 0x5f, 0x33, 0x35, 0x30, 0x5f,
+    0x72, 0x65, 0x66, 0x2e, 0x6d, 0x6f, 0x76, 0x00, 0x00, 0x00, 0x00, 0x10,
+    0x72, 0x6d, 0x64, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xf0,
+    0x00, 0x00, 0x00, 0x1a, 0x72, 0x6d, 0x76, 0x63, 0x00, 0x00, 0x00, 0x00,
+    0x71, 0x74, 0x69, 0x6d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00
+  };
+  GstTypeFindProbability prob;
+  const gchar *type;
+  GstBuffer *buf;
+  GstCaps *caps = NULL;
+
+  buf = gst_buffer_new ();
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) qt_redirect_396042, NULL,
+          sizeof (qt_redirect_396042), 0, sizeof (qt_redirect_396042)));
+
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
+  fail_unless (caps != NULL);
+  GST_LOG ("Found type: %" GST_PTR_FORMAT, caps);
+
+  type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (type, "video/quicktime");
+  fail_unless (prob > GST_TYPE_FIND_MINIMUM && prob <= GST_TYPE_FIND_MAXIMUM);
+
+  gst_buffer_unref (buf);
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_broken_flac_in_ogg)
+{
+  const guint8 flac_id_packet[4] = { 'f', 'L', 'a', 'C' };
+  GstTypeFindProbability prob;
+  const gchar *type;
+  GstBuffer *buf;
+  GstCaps *caps = NULL;
+
+  buf = gst_buffer_new ();
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) flac_id_packet, NULL,
+          sizeof (flac_id_packet), 0, sizeof (flac_id_packet)));
+
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
+  fail_unless (caps != NULL);
+  GST_LOG ("Found type: %" GST_PTR_FORMAT, caps);
+
+  type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (type, "audio/x-flac");
+  fail_unless (prob > GST_TYPE_FIND_MINIMUM && prob <= GST_TYPE_FIND_MAXIMUM);
+
+  gst_buffer_unref (buf);
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+static GstCaps *
+typefind_test_file (const gchar * filename)
+{
+  GstBuffer *buf;
+  GError *err = NULL;
+  GstCaps *caps = NULL;
+  gchar *path, *data = NULL;
+  gsize data_len;
+
+  path = g_build_filename (GST_TEST_FILES_PATH, filename, NULL);
+  GST_LOG ("reading file '%s'", path);
+  if (!g_file_get_contents (path, &data, &data_len, &err)) {
+    g_error ("error loading test file: %s", err->message);
+  }
+
+  buf = gst_buffer_new ();
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) data, NULL, data_len, 0, data_len));
+
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  caps = gst_type_find_helper_for_buffer (NULL, buf, NULL);
+  fail_unless (caps != NULL);
+  GST_LOG ("Found type: %" GST_PTR_FORMAT, caps);
+
+  gst_buffer_unref (buf);
+  g_free (data);
+  g_free (path);
+
+  return caps;
+}
+
+GST_START_TEST (test_jpeg_not_ac3)
+{
+  const gchar *type;
+  GstCaps *caps = NULL;
+
+  caps = typefind_test_file ("partialframe.mjpeg");
+  type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (type, "image/jpeg");
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_mpegts)
+{
+  GstStructure *s;
+  gboolean systemstream = FALSE;
+  GstCaps *caps = NULL;
+  gint packetsize = -1;
+
+  caps = typefind_test_file ("623663.mts");
+  s = gst_caps_get_structure (caps, 0);
+  fail_unless (gst_structure_has_name (s, "video/mpegts"));
+  fail_unless (gst_structure_has_field (s, "systemstream"));
+  fail_unless (gst_structure_get_boolean (s, "systemstream", &systemstream));
+  fail_unless_equals_int (systemstream, TRUE);
+  fail_unless (gst_structure_has_field (s, "packetsize"));
+  fail_unless (gst_structure_get_int (s, "packetsize", &packetsize));
+  fail_unless_equals_int (packetsize, 192);
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+struct ac3_frmsize
+{
+  unsigned frmsizecod;
+  unsigned frmsize;
+};
+
+static void
+make_ac3_packet (guint8 * data, guint bytesize, guint bsid)
+{
+  /* Actually not a fully valid packet; if the typefinder starts to
+   * check e.g. the CRCs, this test needs to be improved as well. */
+  const guint8 ac3_header[] = {
+    0x0b, 0x77,                 /* syncword */
+    0x00, 0x00,                 /* crc1 */
+    0x00,                       /* fscod 0xc0, frmsizecod 0x3f */
+    0x00                        /* bsid 0xf8, bsmod 0x07 */
+  };
+  const struct ac3_frmsize frmsize[] = {
+    {17, 256}, {26, 640}        /* small subset of supported sizes */
+  };
+  guint wordsize = bytesize >> 1, frmsizecod = 0;
+  int i;
+
+  fail_unless ((bytesize & 0x01) == 0);
+  fail_unless (bytesize >= sizeof (ac3_header));
+
+  for (i = 0; i < G_N_ELEMENTS (frmsize); i++) {
+    if (frmsize[i].frmsize == wordsize) {
+      frmsizecod = frmsize[i].frmsizecod;
+      break;
+    }
+  }
+
+  fail_unless (frmsizecod);
+
+  memcpy (data, ac3_header, sizeof (ac3_header));
+  data[4] = (data[4] & ~0x3f) | (frmsizecod & 0x3f);
+  data[5] = (bsid & 0x1f) << 3;
+  memset (data + 6, 0, bytesize - 6);
+}
+
+GST_START_TEST (test_ac3)
+{
+  GstTypeFindProbability prob;
+  const gchar *type;
+  GstBuffer *buf;
+  GstCaps *caps = NULL;
+  guint bsid;
+  guint8 *data;
+
+  for (bsid = 0; bsid < 32; bsid++) {
+    buf = gst_buffer_new_and_alloc ((256 + 640) * 2);
+    data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+    make_ac3_packet (data, 256 * 2, bsid);
+    make_ac3_packet (data + 256 * 2, 640 * 2, bsid);
+    gst_buffer_unmap (buf, data, (256 + 640) * 2);
+
+    caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
+    if (bsid <= 8) {
+      fail_unless (caps != NULL);
+      GST_LOG ("Found type for BSID %u: %" GST_PTR_FORMAT, bsid, caps);
+
+      type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+      fail_unless_equals_string (type, "audio/x-ac3");
+      fail_unless (prob > GST_TYPE_FIND_MINIMUM
+          && prob <= GST_TYPE_FIND_MAXIMUM);
+      gst_caps_unref (caps);
+    } else {
+      fail_unless (caps == NULL);
+    }
+
+    gst_buffer_unref (buf);
+  }
+}
+
+GST_END_TEST;
+
+static void
+make_eac3_packet (guint8 * data, guint bytesize, guint bsid)
+{
+  /* Actually not a fully valid packet; if the typefinder starts to
+   * check e.g. the CRCs, this test needs to be improved as well. */
+  const guint8 eac3_header[] = {
+    0x0b, 0x77,                 /* syncword */
+    0x00,                       /* strmtyp 0xc0, substreamid 0x38,
+                                 * frmsize 0x07 (3 high bits) */
+    0x00,                       /* frmsize (low bits -> 11 total) */
+    0x00,                       /* fscod 0xc0, fscod2/numblocks 0x30,
+                                 * acmod 0x0e, lfeon 0x01 */
+    0x00                        /* bsid 0xf8, dialnorm 0x07 (3 high bits) */
+  };
+  guint wordsize = bytesize >> 1;
+
+  fail_unless ((bytesize & 0x01) == 0);
+  fail_unless (bytesize >= sizeof (eac3_header));
+
+  memcpy (data, eac3_header, sizeof (eac3_header));
+  data[2] = (data[2] & ~0x07) | ((((wordsize - 1) & 0x700) >> 8) & 0xff);
+  data[3] = (wordsize - 1) & 0xff;
+  data[5] = (bsid & 0x1f) << 3;
+  memset (data + 6, 0, bytesize - 6);
+}
+
+GST_START_TEST (test_eac3)
+{
+  GstTypeFindProbability prob;
+  const gchar *type;
+  GstBuffer *buf;
+  GstCaps *caps = NULL;
+  guint bsid;
+  guint8 *data;
+
+  for (bsid = 0; bsid <= 32; bsid++) {
+    buf = gst_buffer_new_and_alloc (558 + 384);
+    data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+    make_eac3_packet (data, 558, bsid);
+    make_eac3_packet (data + 558, 384, bsid);
+    gst_buffer_unmap (buf, data, 558 + 384);
+
+    caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
+    if (bsid > 10 && bsid <= 16) {
+      /* Only BSIs 11..16 are valid for Annex E */
+      fail_unless (caps != NULL);
+      GST_LOG ("Found type for BSID %u: %" GST_PTR_FORMAT, bsid, caps);
+
+      type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+      fail_unless_equals_string (type, "audio/x-eac3");
+      fail_unless (prob > GST_TYPE_FIND_MINIMUM
+          && prob <= GST_TYPE_FIND_MAXIMUM);
+      gst_caps_unref (caps);
+    } else {
+      /* Invalid E-AC-3 BSID, must not be detected as anything: */
+      fail_unless (caps == NULL);
+    }
+
+    gst_buffer_unref (buf);
+  }
+}
+
+GST_END_TEST;
+
+#define TEST_RANDOM_DATA_SIZE (4*1024)
+
+/* typefind random data, to make sure all typefinders are called */
+GST_START_TEST (test_random_data)
+{
+  GstTypeFindProbability prob;
+  const gchar *seed_env;
+  GstBuffer *buf;
+  GstCaps *caps;
+  guint32 seed;
+  guint8 *data;
+  gint i;
+
+  seed_env = g_getenv ("GST_TYPEFIND_TEST_SEED");
+  if (seed_env != NULL)
+    seed = atoi (seed_env);
+  else
+    seed = (guint32) time (NULL);
+
+  g_random_set_seed (seed);
+
+  data = g_malloc (TEST_RANDOM_DATA_SIZE);
+  for (i = 0; i < TEST_RANDOM_DATA_SIZE; ++i)
+    data[i] = g_random_int () & 0xff;
+
+  buf = gst_buffer_new ();
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          data, NULL, TEST_RANDOM_DATA_SIZE, 0, TEST_RANDOM_DATA_SIZE));
+
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
+  GST_INFO ("caps: %" GST_PTR_FORMAT ", probability=%u", caps, prob);
+  /* for now we just print an error log message */
+  if (caps != NULL /* && prob >= GST_TYPE_FIND_LIKELY */ ) {
+    GST_ERROR ("typefinder thinks random data is %" GST_PTR_FORMAT ", with a "
+        "probability of %u (seed was %u)", caps, prob, seed);
+    gst_caps_unref (caps);
+  }
+
+  gst_buffer_unref (buf);
+  g_free (data);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_hls_m3u8)
+{
+  const gchar *type;
+  GstCaps *caps = NULL;
+
+  caps = typefind_test_file ("hls.m3u8");
+  type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (type, "application/x-hls");
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+static Suite *
+typefindfunctions_suite (void)
+{
+  Suite *s = suite_create ("typefindfunctions");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+
+  tcase_add_test (tc_chain, test_quicktime_mpeg4video);
+  tcase_add_test (tc_chain, test_broken_flac_in_ogg);
+  tcase_add_test (tc_chain, test_jpeg_not_ac3);
+  tcase_add_test (tc_chain, test_mpegts);
+  tcase_add_test (tc_chain, test_ac3);
+  tcase_add_test (tc_chain, test_eac3);
+  tcase_add_test (tc_chain, test_random_data);
+  tcase_add_test (tc_chain, test_hls_m3u8);
+
+  return s;
+}
+
+GST_CHECK_MAIN (typefindfunctions);
diff --git a/tests/check/libs/audio.c b/tests/check/libs/audio.c
new file mode 100644
index 0000000..990f46d
--- /dev/null
+++ b/tests/check/libs/audio.c
@@ -0,0 +1,586 @@
+/* GStreamer
+ *
+ * unit tests for audio support library
+ *
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/audio/audio.h>
+#include <gst/audio/multichannel.h>
+#include <string.h>
+
+static gboolean
+structure_contains_channel_positions (const GstStructure * s)
+{
+  return (gst_structure_get_value (s, "channel-positions") != NULL);
+}
+
+#if 0
+static gboolean
+fixed_caps_have_channel_positions (const GstCaps * caps)
+{
+  GstStructure *s;
+
+  fail_unless (caps != NULL);
+
+  s = gst_caps_get_structure (caps, 0);
+  fail_unless (s != NULL);
+
+  return structure_contains_channel_positions (s);
+}
+#endif
+
+GST_START_TEST (test_multichannel_checks)
+{
+  GstAudioChannelPosition pos_2_mixed[2] = {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+    GST_AUDIO_CHANNEL_POSITION_NONE
+  };
+  GstAudioChannelPosition pos_2_none[2] = {
+    GST_AUDIO_CHANNEL_POSITION_NONE,
+    GST_AUDIO_CHANNEL_POSITION_NONE
+  };
+  GstAudioChannelPosition pos_2_flr[2] = {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+    GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+  };
+  GstAudioChannelPosition pos_2_frr[2] = {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+    GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+  };
+  GstStructure *s;
+
+  s = gst_structure_new ("audio/x-raw", "channels", G_TYPE_INT, 2, NULL);
+
+  /* check if the audio channel position checks work */
+  fail_if (gst_audio_check_channel_positions (pos_2_mixed, 2));
+  fail_unless (gst_audio_check_channel_positions (pos_2_none, 2));
+  fail_unless (gst_audio_check_channel_positions (pos_2_flr, 2));
+  fail_if (gst_audio_check_channel_positions (pos_2_frr, 2));
+
+  /* this should not work and issue a warning: FRONT_MONO + NONE */
+  _gst_check_expecting_log = TRUE;
+  gst_audio_set_channel_positions (s, pos_2_mixed);
+  _gst_check_expecting_log = FALSE;
+  fail_if (structure_contains_channel_positions (s));
+
+  /* this should work: NONE + NONE */
+  gst_audio_set_channel_positions (s, pos_2_none);
+  fail_unless (structure_contains_channel_positions (s));
+  gst_structure_remove_field (s, "channel-positions");
+
+  /* this should also work: FRONT_LEFT + FRONT_RIGHT */
+  gst_audio_set_channel_positions (s, pos_2_flr);
+  fail_unless (structure_contains_channel_positions (s));
+  gst_structure_remove_field (s, "channel-positions");
+
+  /* this should not work and issue a warning: FRONT_RIGHT twice */
+  _gst_check_expecting_log = TRUE;
+  gst_audio_set_channel_positions (s, pos_2_frr);
+  _gst_check_expecting_log = FALSE;
+
+/* FIXME: did I misunderstand _set_structure_channel_positions_list? */
+#if  0
+  /* this should not work and issue a warning: FRONT_RIGHT twice */
+  _gst_check_expecting_log = TRUE;
+  gst_audio_set_structure_channel_positions_list (s, pos_2_frr, 2);
+  _gst_check_expecting_log = FALSE;
+
+  /* this should not work and issue a warning: FRONT_MONO + NONE */
+  _gst_check_expecting_log = TRUE;
+  gst_audio_set_structure_channel_positions_list (s, pos_2_mixed, 2);
+  _gst_check_expecting_log = FALSE;
+
+  /* this should not work either (channel count mismatch) */
+  _gst_check_expecting_log = TRUE;
+  gst_audio_set_structure_channel_positions_list (s, pos_2_none, 44);
+  _gst_check_expecting_log = FALSE;
+  fail_if (structure_contains_channel_positions (s));
+#endif
+
+  gst_structure_free (s);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_buffer_clipping_time)
+{
+  GstSegment s;
+  GstBuffer *buf;
+  GstBuffer *ret;
+  guint8 *data, *sdata;
+  gsize ssize;
+
+  /* Clip start and end */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 4 * GST_SECOND;
+  s.stop = 8 * GST_SECOND;
+  s.time = 4 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 800);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 400);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Clip only start */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 4 * GST_SECOND;
+  s.stop = 12 * GST_SECOND;
+  s.time = 4 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 8 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 1200);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 800);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Clip only stop */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 2 * GST_SECOND;
+  s.stop = 10 * GST_SECOND;
+  s.time = 2 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 2 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 8 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 200);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 1000);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data);
+  fail_unless (ssize == 800);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Buffer outside segment */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 12 * GST_SECOND;
+  s.stop = 20 * GST_SECOND;
+  s.time = 12 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret == NULL);
+
+  /* Clip start and end but don't touch duration and offset_end */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 4 * GST_SECOND;
+  s.stop = 8 * GST_SECOND;
+  s.time = 4 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET_NONE;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == GST_CLOCK_TIME_NONE);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == GST_BUFFER_OFFSET_NONE);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 400);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* If the buffer has no timestamp it should assert()
+   * FIXME: check if return value is the same as the input buffer.
+   *        probably can't be done because the assert() does a SIGABRT.
+   */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_TIME);
+  s.start = 0 * GST_SECOND;
+  s.stop = 10 * GST_SECOND;
+  s.time = 0 * GST_SECOND;
+
+  GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (buf) = GST_BUFFER_OFFSET_NONE;
+  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET_NONE;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret == buf);
+
+  gst_buffer_unref (buf);
+
+  /* If the format is not TIME or DEFAULT it should assert()
+   * FIXME: check if return value is the same as the input buffer.
+   *        probably can't be done because the assert() does a SIGABRT.
+   */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_PERCENT);
+  s.start = 0;
+  s.stop = 10;
+  s.time = 0;
+
+  GST_BUFFER_TIMESTAMP (buf) = 0 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 0;
+  GST_BUFFER_OFFSET (buf) = GST_BUFFER_OFFSET_NONE;
+  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET_NONE;
+
+  ASSERT_CRITICAL (ret = gst_audio_buffer_clip (buf, &s, 100, 1));
+
+  gst_buffer_unref (buf);
+
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_buffer_clipping_samples)
+{
+  GstSegment s;
+  GstBuffer *buf;
+  GstBuffer *ret;
+  guint8 *data, *sdata;
+  gsize ssize;
+
+  /* Clip start and end */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 400;
+  s.stop = 800;
+  s.time = 400;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 800);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 400);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Clip only start */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 400;
+  s.stop = 1200;
+  s.time = 400;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 8 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 1200);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 800);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Clip only stop */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 200;
+  s.stop = 1000;
+  s.time = 200;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 2 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == 8 * GST_SECOND);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 200);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == 1000);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data);
+  fail_unless (ssize == 800);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* Buffer outside segment */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 1200;
+  s.stop = 2000;
+  s.time = 1200;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = 10 * GST_SECOND;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = 1200;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret == NULL);
+
+  /* Clip start and end but don't touch duration and offset_end */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 400;
+  s.stop = 800;
+  s.time = 400;
+
+  GST_BUFFER_TIMESTAMP (buf) = 2 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (buf) = 200;
+  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET_NONE;
+
+  ret = gst_audio_buffer_clip (buf, &s, 100, 1);
+  fail_unless (ret != NULL);
+
+  fail_unless (GST_BUFFER_TIMESTAMP (ret) == 4 * GST_SECOND);
+  fail_unless (GST_BUFFER_DURATION (ret) == GST_CLOCK_TIME_NONE);
+  fail_unless (GST_BUFFER_OFFSET (ret) == 400);
+  fail_unless (GST_BUFFER_OFFSET_END (ret) == GST_BUFFER_OFFSET_NONE);
+  sdata = gst_buffer_map (ret, &ssize, NULL, GST_MAP_READ);
+  fail_unless (sdata == data + 200);
+  fail_unless (ssize == 400);
+  gst_buffer_unmap (ret, sdata, ssize);
+
+  gst_buffer_unref (ret);
+
+  /* If the buffer has no offset it should assert()
+   * FIXME: check if return value is the same as the input buffer.
+   *        probably can't be done because the assert() does a SIGABRT.
+   */
+  buf = gst_buffer_new ();
+  data = (guint8 *) g_malloc (1000);
+  gst_buffer_take_memory (buf, -1,
+      gst_memory_new_wrapped (0, data, g_free, 1000, 0, 1000));
+
+  gst_segment_init (&s, GST_FORMAT_DEFAULT);
+  s.start = 0;
+  s.stop = 10;
+  s.time = 0;
+
+  GST_BUFFER_TIMESTAMP (buf) = 0 * GST_SECOND;
+  GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (buf) = GST_BUFFER_OFFSET_NONE;
+  GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET_NONE;
+
+  ASSERT_CRITICAL (ret = gst_audio_buffer_clip (buf, &s, 100, 1));
+
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+static void
+init_value_to_channel_layout (GValue * val, GstAudioChannelPosition pos1,
+    GstAudioChannelPosition pos2)
+{
+  GValue pos = { 0, };
+
+  g_value_init (val, GST_TYPE_ARRAY);
+  g_value_init (&pos, GST_TYPE_AUDIO_CHANNEL_POSITION);
+  g_value_set_enum (&pos, pos1);
+  gst_value_array_append_value (val, &pos);
+  g_value_set_enum (&pos, pos2);
+  gst_value_array_append_value (val, &pos);
+  g_value_unset (&pos);
+}
+
+GST_START_TEST (test_channel_layout_value_intersect)
+{
+  GValue layout = { 0, };
+  GValue list = { 0, };
+  GValue res = { 0, };
+
+  g_value_init (&list, GST_TYPE_LIST);
+  init_value_to_channel_layout (&layout, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT);
+  gst_value_list_append_value (&list, &layout);
+  g_value_unset (&layout);
+  init_value_to_channel_layout (&layout, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT);
+  gst_value_list_append_value (&list, &layout);
+  g_value_unset (&layout);
+
+  init_value_to_channel_layout (&layout, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT);
+
+  /* we should get the second layout in the list, as it matches the input */
+  fail_unless (gst_value_intersect (&res, &layout, &list));
+  g_value_unset (&layout);
+  fail_unless (GST_VALUE_HOLDS_ARRAY (&res));
+  fail_unless_equals_int (gst_value_array_get_size (&res), 2);
+  fail_unless_equals_int (g_value_get_enum (gst_value_array_get_value (&res,
+              0)), GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT);
+  fail_unless_equals_int (g_value_get_enum (gst_value_array_get_value (&res,
+              1)), GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT);
+  g_value_unset (&res);
+
+  /* this (with rear position) should not yield any results */
+  init_value_to_channel_layout (&layout, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT);
+  fail_if (gst_value_intersect (&res, &layout, &list));
+  g_value_unset (&layout);
+
+  g_value_unset (&list);
+}
+
+GST_END_TEST;
+
+static Suite *
+audio_suite (void)
+{
+  Suite *s = suite_create ("audio support library");
+
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_multichannel_checks);
+  tcase_add_test (tc_chain, test_buffer_clipping_time);
+  tcase_add_test (tc_chain, test_buffer_clipping_samples);
+  tcase_add_test (tc_chain, test_channel_layout_value_intersect);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = audio_suite ();
+
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/cddabasesrc.c b/tests/check/libs/cddabasesrc.c
new file mode 100644
index 0000000..1c60c11
--- /dev/null
+++ b/tests/check/libs/cddabasesrc.c
@@ -0,0 +1,512 @@
+/* GStreamer
+ *
+ * unit test for cddabasesrc
+ *
+ * Copyright (C) <2005> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* TODO:
+ *  - test different modes (when seeking to tracks in track mode, buffer
+ *    timestamps should start from 0, when seeking to tracks in disc mode,
+ *    buffer timestamps should increment, etc.)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+
+#include <gst/cdda/gstcddabasesrc.h>
+#include <string.h>
+
+#define CD_FRAMESIZE_RAW 2352
+
+#define GST_TYPE_CD_FOO_SRC            (gst_cd_foo_src_get_type())
+#define GST_CD_FOO_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CD_FOO_SRC,GstCdFooSrc))
+#define GST_CD_FOO_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CD_FOO_SRC,GstCdFooSrcClass))
+#define GST_IS_CD_FOO_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CD_FOO_SRC))
+#define GST_IS_CD_FOO_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CD_FOO_SRC))
+#define GST_CD_FOO_SRC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CDDA_BASAE_SRC, GstCdFooSrcClass))
+
+typedef struct _GstCdFooSrc GstCdFooSrc;
+typedef struct _GstCdFooSrcClass GstCdFooSrcClass;
+
+
+/* Neue Heimat (CD 2) */
+static GstCddaBaseSrcTrack nh_cd2_tracks[] = {
+  {TRUE, 1, 0, 20664, NULL,},
+  {TRUE, 2, 20665, 52377, NULL,},
+  {TRUE, 3, 52378, 84100, NULL,},
+  {TRUE, 4, 84101, 105401, NULL,},
+  {TRUE, 5, 105402, 123060, NULL,},
+  {TRUE, 6, 123061, 146497, NULL,},
+  {TRUE, 7, 146498, 175693, NULL,},
+  {TRUE, 8, 175694, 203272, NULL,},
+  {TRUE, 9, 203273, 217909, NULL,},
+  {TRUE, 10, 217910, 240938, NULL,},
+  {TRUE, 11, 240939, 256169, NULL,},
+  {TRUE, 12, 256170, 282237, NULL,},
+  {TRUE, 13, 282238, 307606, NULL,},
+  {TRUE, 14, 307607, 337245, NULL,}
+};
+
+/* Offspring - Smash */
+static GstCddaBaseSrcTrack offspring_tracks[] = {
+  {TRUE, 1, 0, 1924, NULL,},
+  {TRUE, 2, 1925, 12947, NULL,},
+  {TRUE, 3, 12948, 29739, NULL,},
+  {TRUE, 4, 29740, 47202, NULL,},
+  {TRUE, 5, 47203, 63134, NULL,},
+  {TRUE, 6, 63135, 77954, NULL,},
+  {TRUE, 7, 77955, 92789, NULL,},
+  {TRUE, 8, 92790, 112127, NULL,},
+  {TRUE, 9, 112128, 124372, NULL,},
+  {TRUE, 10, 124373, 133574, NULL,},
+  {TRUE, 11, 133575, 143484, NULL,},
+  {TRUE, 12, 143485, 149279, NULL,},
+  {TRUE, 13, 149280, 162357, NULL,},
+  {TRUE, 14, 162358, 210372, NULL,}
+};
+
+/* this matches the sample TOC from the DiscIDCalculation
+ * page in the Musicbrainz wiki. It's a tricky one because
+ * it's got a data track as well. */
+static GstCddaBaseSrcTrack mb_sample_tracks[] = {
+  {TRUE, 1, 0, 18640, NULL,},
+  {TRUE, 2, 18641, 34666, NULL,},
+  {TRUE, 3, 34667, 56349, NULL,},
+  {TRUE, 4, 56350, 77005, NULL,},
+  {TRUE, 5, 77006, 106093, NULL,},
+  {TRUE, 6, 106094, 125728, NULL,},
+  {TRUE, 7, 125729, 149784, NULL,},
+  {TRUE, 8, 149785, 168884, NULL,},
+  {TRUE, 9, 168885, 185909, NULL,},
+  {TRUE, 10, 185910, 205828, NULL,},
+  {TRUE, 11, 205829, 230141, NULL,},
+  {TRUE, 12, 230142, 246658, NULL,},
+  {TRUE, 13, 246659, 265613, NULL,},
+  {TRUE, 14, 265614, 289478, NULL,},
+  {FALSE, 15, 289479, 325731, NULL,}
+};
+
+/* Nicola Conte - Other Directions (also
+ * tricky due to the extra data track) */
+static GstCddaBaseSrcTrack nconte_odir_tracks[] = {
+  {TRUE, 1, 0, 17852, NULL,},
+  {TRUE, 2, 17853, 39956, NULL,},
+  {TRUE, 3, 39957, 68449, NULL,},
+  {TRUE, 4, 68450, 88725, NULL,},
+  {TRUE, 5, 88726, 106413, NULL,},
+  {TRUE, 6, 106414, 131966, NULL,},
+  {TRUE, 7, 131967, 152372, NULL,},
+  {TRUE, 8, 152373, 168602, NULL,},
+  {TRUE, 9, 168603, 190348, NULL,},
+  {TRUE, 10, 190349, 209044, NULL,},
+  {TRUE, 11, 209045, 235586, NULL,},
+  {TRUE, 12, 235587, 253830, NULL,},
+  {TRUE, 13, 253831, 272213, NULL,},
+  {FALSE, 14, 272214, 332849, NULL,}
+};
+
+/* Pink Martini - Sympathique (11 track version) */
+static GstCddaBaseSrcTrack pm_symp_tracks[] = {
+  {TRUE, 1, 0, 21667, NULL,},
+  {TRUE, 2, 21668, 49576, NULL,},
+  {TRUE, 3, 49577, 62397, NULL,},
+  {TRUE, 4, 62398, 81087, NULL,},
+  {TRUE, 5, 81088, 106595, NULL,},
+  {TRUE, 6, 106596, 122012, NULL,},
+  {TRUE, 7, 122013, 138469, NULL,},
+  {TRUE, 8, 138470, 157306, NULL,},
+  {TRUE, 9, 157307, 179635, NULL,},
+  {TRUE, 10, 179636, 203673, NULL,},
+  {TRUE, 11, 203674, 213645, NULL,}
+};
+
+#define NUM_TEST_DISCS 5
+
+struct _test_disc
+{
+  GstCddaBaseSrcTrack *tracks;
+  guint num_tracks;
+  guint32 cddb_discid;
+  const gchar *musicbrainz_discid;
+};
+
+/* FIXME: now we just need to find out how to treat
+ * data tracks for the cddb id calculation .... */
+static struct _test_disc test_discs[NUM_TEST_DISCS] = {
+  {nh_cd2_tracks, G_N_ELEMENTS (nh_cd2_tracks), 0xae11900e,
+      NULL},
+  {mb_sample_tracks, G_N_ELEMENTS (mb_sample_tracks), 0x00000000,
+      "MUtMmKN402WPj3_VFsgUelxpc8U-"},
+  {offspring_tracks, G_N_ELEMENTS (offspring_tracks), 0xc20af40e,
+      "ahg7JUcfR3vCYBphSDIogOOWrr0-"},
+  {nconte_odir_tracks, G_N_ELEMENTS (nconte_odir_tracks), 0x00000000,
+        /* hKx_PejjG47X161ND_Sh0HyqaS0- according to libmusicbrainz, but that's
+         * wrong according to the wiki docs (or not?) (neither discid is listed) */
+      "fboaOQtfqwENv8WyXa9tRyvyUbQ-"},
+  {pm_symp_tracks, G_N_ELEMENTS (pm_symp_tracks), 0xa00b200b,
+      "iP0DOLdr4vt_IfKSIXoRUR.q_Wc-"}
+};
+
+struct _GstCdFooSrc
+{
+  GstCddaBaseSrc cddabasesrc;
+
+  struct _test_disc *cur_test;
+  guint cur_disc;
+};
+
+struct _GstCdFooSrcClass
+{
+  GstCddaBaseSrcClass parent_class;
+};
+
+GType gst_cd_foo_src_get_type (void);
+G_DEFINE_TYPE (GstCdFooSrc, gst_cd_foo_src, GST_TYPE_CDDA_BASE_SRC);
+
+static GstBuffer *gst_cd_foo_src_read_sector (GstCddaBaseSrc * src,
+    gint sector);
+static gboolean gst_cd_foo_src_open (GstCddaBaseSrc * src,
+    const gchar * device);
+static void gst_cd_foo_src_close (GstCddaBaseSrc * src);
+
+static void
+gst_cd_foo_src_init (GstCdFooSrc * src)
+{
+  src->cur_disc = 0;
+}
+
+static void
+gst_cd_foo_src_class_init (GstCdFooSrcClass * klass)
+{
+  GstCddaBaseSrcClass *cddabasesrc_class = GST_CDDA_BASE_SRC_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_set_details_simple (element_class,
+      "CD Audio (cdda) Source, FooBar", "Source/File",
+      "Read audio from CD", "Foo Bar <foo@bar.com>");
+
+  cddabasesrc_class->open = gst_cd_foo_src_open;
+  cddabasesrc_class->close = gst_cd_foo_src_close;
+  cddabasesrc_class->read_sector = gst_cd_foo_src_read_sector;
+}
+
+static gboolean
+gst_cd_foo_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+{
+  GstCddaBaseSrcTrack *tracks;
+  GstCdFooSrc *src;
+  gint i;
+
+  src = GST_CD_FOO_SRC (cddabasesrc);
+
+  /* if this fails, the test is wrong */
+  g_assert (src->cur_disc < NUM_TEST_DISCS);
+
+  src->cur_test = &test_discs[src->cur_disc];
+
+  /* add tracks */
+  tracks = src->cur_test->tracks;
+  for (i = 0; i < src->cur_test->num_tracks; ++i) {
+    gst_cdda_base_src_add_track (GST_CDDA_BASE_SRC (src), &tracks[i]);
+  }
+
+  return TRUE;
+}
+
+static void
+gst_cd_foo_src_close (GstCddaBaseSrc * cddabasesrc)
+{
+  GstCdFooSrc *src = GST_CD_FOO_SRC (cddabasesrc);
+
+  if (src->cur_test->cddb_discid != 0) {
+    g_assert (cddabasesrc->discid == src->cur_test->cddb_discid);
+  }
+
+  if (src->cur_test->musicbrainz_discid != NULL) {
+    g_assert (g_str_equal (cddabasesrc->mb_discid,
+            src->cur_test->musicbrainz_discid));
+  }
+}
+
+static GstBuffer *
+gst_cd_foo_src_read_sector (GstCddaBaseSrc * cddabasesrc, gint sector)
+{
+  GstBuffer *buf;
+  guint8 *data;
+
+  buf = gst_buffer_new_and_alloc (CD_FRAMESIZE_RAW);
+  data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+  memset (data, 0, CD_FRAMESIZE_RAW);
+  gst_buffer_unmap (buf, data, CD_FRAMESIZE_RAW);
+
+  return buf;
+}
+
+static inline gboolean
+tag_list_has_tag (GstTagList * list, const gchar * tag, GType type)
+{
+  const GValue *val = gst_tag_list_get_value_index (list, tag, 0);
+
+  if (val == NULL) {
+    GST_LOG ("no tag '%s' in taglist %" GST_PTR_FORMAT, tag, list);
+    return FALSE;
+  }
+
+  if (!G_VALUE_HOLDS (val, type)) {
+    GST_LOG ("tag '%s' in taglist %" GST_PTR_FORMAT " is not of type %s",
+        tag, list, g_type_name (type));
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static void
+test_uri_parse (const gchar * uri, const gchar * device, gint track)
+{
+  GstElement *foosrc;
+  gchar *set_device = NULL;
+  gint set_track = 0;
+
+  foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc), uri) == TRUE,
+      "couldn't set uri %s", uri);
+  g_object_get (foosrc, "device", &set_device, "track", &set_track, NULL);
+  fail_unless (set_device != NULL);
+  fail_unless (strcmp (set_device, device) == 0,
+      "device set was %s, expected %s", set_device, device);
+  fail_unless (set_track == track, "track set was %d, expected %d", set_track,
+      track);
+  g_free (set_device);
+  gst_object_unref (foosrc);
+}
+
+GST_START_TEST (test_discid_calculations)
+{
+  GstElement *foosrc, *pipeline, *sink;
+  gint i;
+
+  fail_unless (gst_element_register (NULL, "cdfoosrc", GST_RANK_SECONDARY,
+          GST_TYPE_CD_FOO_SRC));
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  sink = gst_element_factory_make ("fakesink", "sink");
+  fail_unless (sink != NULL, "couldn't create fakesink");
+
+  foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
+  fail_unless (foosrc != NULL, "couldn't create cdfoosrc");
+
+  gst_bin_add (GST_BIN (pipeline), foosrc);
+  gst_bin_add (GST_BIN (pipeline), sink);
+  fail_unless (gst_element_link (foosrc, sink));
+
+  for (i = 0; i < G_N_ELEMENTS (test_discs); ++i) {
+    GstTagList *tags = NULL;
+    GstMessage *msg;
+
+    GST_LOG ("Testing disc layout %u ...", i);
+    GST_CD_FOO_SRC (foosrc)->cur_disc = i;
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+    msg =
+        gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipeline),
+        GST_CLOCK_TIME_NONE, GST_MESSAGE_TAG);
+    gst_message_parse_tag (msg, &tags);
+    fail_unless (tags != NULL);
+    fail_unless (tag_list_has_tag (tags, "track-count", G_TYPE_UINT));
+    fail_unless (tag_list_has_tag (tags, "track-number", G_TYPE_UINT));
+    fail_unless (tag_list_has_tag (tags, "duration", G_TYPE_UINT64));
+    fail_unless (tag_list_has_tag (tags, "discid", G_TYPE_STRING));
+    fail_unless (tag_list_has_tag (tags, "discid-full", G_TYPE_STRING));
+    fail_unless (tag_list_has_tag (tags, "musicbrainz-discid", G_TYPE_STRING));
+    fail_unless (tag_list_has_tag (tags, "musicbrainz-discid-full",
+            G_TYPE_STRING));
+    gst_tag_list_free (tags);
+    gst_message_unref (msg);
+
+    msg =
+        gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipeline),
+        GST_CLOCK_TIME_NONE, GST_MESSAGE_ASYNC_DONE);
+    gst_message_unref (msg);
+
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+  }
+
+  gst_object_unref (pipeline);
+
+  gst_task_cleanup_all ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_buffer_timestamps)
+{
+  GstElement *foosrc, *pipeline, *fakesink;
+  GstClockTime prev_ts, prev_duration, ts;
+  GstPad *sinkpad;
+  gint i;
+
+  fail_unless (gst_element_register (NULL, "cdfoosrc", GST_RANK_SECONDARY,
+          GST_TYPE_CD_FOO_SRC));
+
+  pipeline = gst_pipeline_new ("pipeline");
+  foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
+  fakesink = gst_element_factory_make ("fakesink", "fakesink");
+  gst_bin_add_many (GST_BIN (pipeline), foosrc, fakesink, NULL);
+  fail_unless (gst_element_link (foosrc, fakesink));
+  sinkpad = gst_element_get_static_pad (fakesink, "sink");
+
+  GST_CD_FOO_SRC (foosrc)->cur_disc = 0;
+
+  gst_buffer_straw_start_pipeline (pipeline, sinkpad);
+
+  prev_ts = GST_CLOCK_TIME_NONE;
+  prev_duration = GST_CLOCK_TIME_NONE;
+
+  for (i = 0; i < 100; ++i) {
+    GstBuffer *buf;
+
+    buf = gst_buffer_straw_get_buffer (pipeline, sinkpad);
+    GST_LOG ("buffer, ts=%" GST_TIME_FORMAT ", dur=%" GST_TIME_FORMAT,
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+    ts = GST_BUFFER_TIMESTAMP (buf);
+    fail_unless (GST_CLOCK_TIME_IS_VALID (ts));
+    fail_unless (GST_BUFFER_DURATION_IS_VALID (buf));
+    if (i > 0) {
+      fail_unless (GST_CLOCK_TIME_IS_VALID (prev_ts));
+      fail_unless (GST_CLOCK_TIME_IS_VALID (prev_duration));
+      fail_unless ((prev_ts + prev_duration) == ts);
+    }
+    prev_ts = ts;
+    prev_duration = GST_BUFFER_DURATION (buf);
+    gst_buffer_unref (buf);
+  }
+
+  gst_buffer_straw_stop_pipeline (pipeline, sinkpad);
+
+  gst_task_cleanup_all ();
+  gst_object_unref (pipeline);
+  gst_object_unref (sinkpad);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_uri_parsing)
+{
+  GstElement *foosrc;
+
+  fail_unless (gst_element_register (NULL, "cdfoosrc", GST_RANK_SECONDARY,
+          GST_TYPE_CD_FOO_SRC));
+
+  /* wrong protocol */
+  foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "x://") == FALSE);
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "cddaq://") == FALSE);
+
+  /* cdda://track */
+  test_uri_parse ("cdda://", "/dev/cdrom", 1);
+  test_uri_parse ("cdda://2", "/dev/cdrom", 2);
+  test_uri_parse ("cdda://47", "/dev/cdrom", 47);
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "cdda://-1") == FALSE);
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "cdda://what") == FALSE);
+
+  /* cdda://device#track */
+  test_uri_parse ("cdda:///dev/hdb#1", "/dev/hdb", 1);
+  test_uri_parse ("cdda://anything#8", "anything", 8);
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "cdda:///dev/hdb#nonsense") == FALSE);
+  fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (foosrc),
+          "cdda:///dev/hdb#-2") == FALSE);
+
+  /* cdda://track#device (device should be ignored - FIXME 0.11) */
+  test_uri_parse ("cdda://8#/dev/hdb", "/dev/cdrom", 8);
+
+  gst_object_unref (foosrc);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_properties)
+{
+  GstElement *foosrc;
+  gchar *device;
+  guint track;
+
+  fail_unless (gst_element_register (NULL, "cdfoosrc", GST_RANK_SECONDARY,
+          GST_TYPE_CD_FOO_SRC));
+
+  foosrc = gst_element_factory_make ("cdfoosrc", "cdfoosrc");
+
+  g_object_set (foosrc, "device", "/dev/cdrom", NULL);
+  g_object_get (foosrc, "device", &device, "track", &track, NULL);
+  fail_unless (g_str_equal (device, "/dev/cdrom"));
+  fail_unless_equals_int (track, 1);
+  g_free (device);
+
+  g_object_set (foosrc, "device", "/dev/cdrom1", "track", 17, NULL);
+  g_object_get (foosrc, "device", &device, "track", &track, NULL);
+  fail_unless (g_str_equal (device, "/dev/cdrom1"));
+  fail_unless_equals_int (track, 17);
+  g_free (device);
+
+  g_object_set (foosrc, "track", 17, "device", "/dev/cdrom1", NULL);
+  g_object_get (foosrc, "device", &device, "track", &track, NULL);
+  fail_unless (g_str_equal (device, "/dev/cdrom1"));
+  fail_unless_equals_int (track, 17);
+  g_free (device);
+
+  g_object_set (foosrc, "track", 12, NULL);
+  g_object_get (foosrc, "device", &device, "track", &track, NULL);
+  fail_unless (g_str_equal (device, "/dev/cdrom1"));
+  fail_unless_equals_int (track, 12);
+  g_free (device);
+
+  gst_object_unref (foosrc);
+}
+
+GST_END_TEST;
+
+static Suite *
+cddabasesrc_suite (void)
+{
+  Suite *s = suite_create ("cddabasesrc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_discid_calculations);
+  tcase_add_test (tc_chain, test_buffer_timestamps);
+  tcase_add_test (tc_chain, test_uri_parsing);
+  tcase_add_test (tc_chain, test_properties);
+
+  return s;
+}
+
+GST_CHECK_MAIN (cddabasesrc)
diff --git a/tests/check/libs/discoverer.c b/tests/check/libs/discoverer.c
new file mode 100644
index 0000000..2d20576
--- /dev/null
+++ b/tests/check/libs/discoverer.c
@@ -0,0 +1,94 @@
+/* GStreamer unit tests for discoverer
+ *
+ * Copyright (C) 2011 Stefan Kost <ensonic@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/pbutils/pbutils.h>
+
+#include <stdio.h>
+#include <glib/gstdio.h>
+#include <glib/gprintf.h>
+
+
+GST_START_TEST (test_disco_init)
+{
+  GError *err = NULL;
+  GstDiscoverer *dc;
+
+  dc = gst_discoverer_new (GST_SECOND, &err);
+  fail_unless (dc != NULL);
+  fail_unless (err == NULL);
+
+  g_object_unref (dc);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_disco_sync)
+{
+  GError *err = NULL;
+  GstDiscoverer *dc;
+  GstDiscovererInfo *info;
+  GstDiscovererResult result;
+  gchar *uri;
+
+  dc = gst_discoverer_new (GST_SECOND, &err);
+  fail_unless (dc != NULL);
+  fail_unless (err == NULL);
+
+  /* GST_TEST_FILE comes from makefile CFLAGS */
+  GST_INFO ("discovering file '%s'", GST_TEST_FILE);
+  uri = g_filename_to_uri (GST_TEST_FILE, NULL, &err);
+  fail_unless (err == NULL);
+  GST_INFO ("discovering uri '%s'", uri);
+
+  info = gst_discoverer_discover_uri (dc, uri, &err);
+  result = gst_discoverer_info_get_result (info);
+  GST_INFO ("result: %d", result);
+  gst_discoverer_info_unref (info);
+  g_free (uri);
+
+  if (err) {
+    /* we won't have the codec for the jpeg */
+    g_error_free (err);
+  }
+
+  g_object_unref (dc);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+discoverer_suite (void)
+{
+  Suite *s = suite_create ("discoverer");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_disco_init);
+  tcase_add_test (tc_chain, test_disco_sync);
+  return s;
+}
+
+GST_CHECK_MAIN (discoverer);
diff --git a/tests/check/libs/fft.c b/tests/check/libs/fft.c
new file mode 100644
index 0000000..bcaf967
--- /dev/null
+++ b/tests/check/libs/fft.c
@@ -0,0 +1,563 @@
+/* GStreamer
+ *
+ * unit test for FFT library
+ *
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/fft/gstfft.h>
+#include <gst/fft/gstffts16.h>
+#include <gst/fft/gstffts32.h>
+#include <gst/fft/gstfftf32.h>
+#include <gst/fft/gstfftf64.h>
+
+GST_START_TEST (test_next_fast_length)
+{
+  fail_unless_equals_int (gst_fft_next_fast_length (13), 16);
+  fail_unless_equals_int (gst_fft_next_fast_length (30), 30);
+  fail_unless_equals_int (gst_fft_next_fast_length (31), 32);
+  fail_unless_equals_int (gst_fft_next_fast_length (1), 2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s16_0hz)
+{
+  gint i;
+  gint16 *in;
+  GstFFTS16Complex *out;
+  GstFFTS16 *ctx;
+
+  in = g_new (gint16, 2048);
+  out = g_new (GstFFTS16Complex, 1025);
+  ctx = gst_fft_s16_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i++)
+    in[i] = G_MAXINT16;
+
+  gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s16_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 32767.0 * 32767.0;
+    mag = 10.0 * log10 (mag);
+    if (i < 2)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -55.0);
+  }
+
+  gst_fft_s16_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s16_11025hz)
+{
+  gint i;
+  gint16 *in;
+  GstFFTS16Complex *out;
+  GstFFTS16 *ctx;
+
+  in = g_new (gint16, 2048);
+  out = g_new (GstFFTS16Complex, 1025);
+  ctx = gst_fft_s16_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 4) {
+    in[i] = 0;
+    in[i + 1] = G_MAXINT16;
+    in[i + 2] = 0;
+    in[i + 3] = G_MININT16;
+  }
+
+  gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s16_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 32767.0 * 32767.0;
+    mag = 10.0 * log10 (mag);
+
+    if (abs (512 - i) < 2)
+      fail_unless (mag > -20.0);
+    else
+      fail_unless (mag < -55.0);
+  }
+
+  gst_fft_s16_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s16_22050hz)
+{
+  gint i;
+  gint16 *in;
+  GstFFTS16Complex *out;
+  GstFFTS16 *ctx;
+
+  in = g_new (gint16, 2048);
+  out = g_new (GstFFTS16Complex, 1025);
+  ctx = gst_fft_s16_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 2) {
+    in[i] = G_MAXINT16;
+    in[i + 1] = G_MININT16;
+  }
+
+  gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s16_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 32767.0 * 32767.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i > 1022)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -55.0);
+  }
+
+  gst_fft_s16_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s32_0hz)
+{
+  gint i;
+  gint32 *in;
+  GstFFTS32Complex *out;
+  GstFFTS32 *ctx;
+
+  in = g_new (gint32, 2048);
+  out = g_new (GstFFTS32Complex, 1025);
+  ctx = gst_fft_s32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i++)
+    in[i] = 2147483647;
+
+  gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2147483647.0 * 2147483647.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i < 2)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_s32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s32_11025hz)
+{
+  gint i;
+  gint32 *in;
+  GstFFTS32Complex *out;
+  GstFFTS32 *ctx;
+
+  in = g_new (gint32, 2048);
+  out = g_new (GstFFTS32Complex, 1025);
+  ctx = gst_fft_s32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 4) {
+    in[i] = 0;
+    in[i + 1] = G_MAXINT32;
+    in[i + 2] = 0;
+    in[i + 3] = G_MININT32;
+  }
+
+  gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2147483647.0 * 2147483647.0;
+    mag = 10.0 * log10 (mag);
+
+    if (abs (512 - i) < 2)
+      fail_unless (mag > -20.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_s32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_s32_22050hz)
+{
+  gint i;
+  gint32 *in;
+  GstFFTS32Complex *out;
+  GstFFTS32 *ctx;
+
+  in = g_new (gint32, 2048);
+  out = g_new (GstFFTS32Complex, 1025);
+  ctx = gst_fft_s32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 2) {
+    in[i] = G_MAXINT32;
+    in[i + 1] = G_MININT32;
+  }
+
+  gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_s32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2147483647.0 * 2147483647.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i > 1022)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_s32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f32_0hz)
+{
+  gint i;
+  gfloat *in;
+  GstFFTF32Complex *out;
+  GstFFTF32 *ctx;
+
+  in = g_new (gfloat, 2048);
+  out = g_new (GstFFTF32Complex, 1025);
+  ctx = gst_fft_f32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i++)
+    in[i] = 1.0;
+
+  gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i < 2)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f32_11025hz)
+{
+  gint i;
+  gfloat *in;
+  GstFFTF32Complex *out;
+  GstFFTF32 *ctx;
+
+  in = g_new (gfloat, 2048);
+  out = g_new (GstFFTF32Complex, 1025);
+  ctx = gst_fft_f32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 4) {
+    in[i] = 0.0;
+    in[i + 1] = 1.0;
+    in[i + 2] = 0.0;
+    in[i + 3] = -1.0;
+  }
+
+  gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (abs (512 - i) < 2)
+      fail_unless (mag > -20.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f32_22050hz)
+{
+  gint i;
+  gfloat *in;
+  GstFFTF32Complex *out;
+  GstFFTF32 *ctx;
+
+  in = g_new (gfloat, 2048);
+  out = g_new (GstFFTF32Complex, 1025);
+  ctx = gst_fft_f32_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 2) {
+    in[i] = 1.0;
+    in[i + 1] = -1.0;
+  }
+
+  gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f32_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i > 1022)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f32_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f64_0hz)
+{
+  gint i;
+  gdouble *in;
+  GstFFTF64Complex *out;
+  GstFFTF64 *ctx;
+
+  in = g_new (gdouble, 2048);
+  out = g_new (GstFFTF64Complex, 1025);
+  ctx = gst_fft_f64_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i++)
+    in[i] = 1.0;
+
+  gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f64_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i < 2)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f64_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f64_11025hz)
+{
+  gint i;
+  gdouble *in;
+  GstFFTF64Complex *out;
+  GstFFTF64 *ctx;
+
+  in = g_new (gdouble, 2048);
+  out = g_new (GstFFTF64Complex, 1025);
+  ctx = gst_fft_f64_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 4) {
+    in[i] = 0.0;
+    in[i + 1] = 1.0;
+    in[i + 2] = 0.0;
+    in[i + 3] = -1.0;
+  }
+
+  gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f64_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (abs (512 - i) < 2)
+      fail_unless (mag > -20.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f64_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_f64_22050hz)
+{
+  gint i;
+  gdouble *in;
+  GstFFTF64Complex *out;
+  GstFFTF64 *ctx;
+
+  in = g_new (gdouble, 2048);
+  out = g_new (GstFFTF64Complex, 1025);
+  ctx = gst_fft_f64_new (2048, FALSE);
+
+  for (i = 0; i < 2048; i += 2) {
+    in[i] = 1.0;
+    in[i + 1] = -1.0;
+  }
+
+  gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
+  gst_fft_f64_fft (ctx, in, out);
+
+  for (i = 0; i < 1025; i++) {
+    gdouble mag;
+
+    mag = (gdouble) out[i].r * (gdouble) out[i].r;
+    mag += (gdouble) out[i].i * (gdouble) out[i].i;
+    mag /= 2048.0 * 2048.0;
+    mag = 10.0 * log10 (mag);
+
+    if (i > 1022)
+      fail_unless (mag > -15.0);
+    else
+      fail_unless (mag < -60.0);
+  }
+
+  gst_fft_f64_free (ctx);
+  g_free (in);
+  g_free (out);
+}
+
+GST_END_TEST;
+
+static Suite *
+fft_suite (void)
+{
+  Suite *s = suite_create ("fft library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_next_fast_length);
+  tcase_add_test (tc_chain, test_s16_0hz);
+  tcase_add_test (tc_chain, test_s16_11025hz);
+  tcase_add_test (tc_chain, test_s16_22050hz);
+  tcase_add_test (tc_chain, test_s32_0hz);
+  tcase_add_test (tc_chain, test_s32_11025hz);
+  tcase_add_test (tc_chain, test_s32_22050hz);
+  tcase_add_test (tc_chain, test_f32_0hz);
+  tcase_add_test (tc_chain, test_f32_11025hz);
+  tcase_add_test (tc_chain, test_f32_22050hz);
+  tcase_add_test (tc_chain, test_f64_0hz);
+  tcase_add_test (tc_chain, test_f64_11025hz);
+  tcase_add_test (tc_chain, test_f64_22050hz);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = fft_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/gstlibscpp.cc b/tests/check/libs/gstlibscpp.cc
new file mode 100644
index 0000000..f95cd78
--- /dev/null
+++ b/tests/check/libs/gstlibscpp.cc
@@ -0,0 +1,136 @@
+/* GStreamer
+ * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/gst.h>
+#include <gst/check/gstcheck.h>
+
+#include <gst/app/gstapp-marshal.h>
+#include <gst/app/gstappsink.h>
+#include <gst/app/gstappsrc.h>
+
+#include <gst/audio/audio-enumtypes.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudioclock.h>
+#include <gst/audio/gstaudiofilter.h>
+#include <gst/audio/gstaudiosink.h>
+#include <gst/audio/gstaudiosrc.h>
+#include <gst/audio/gstbaseaudiosink.h>
+#include <gst/audio/gstbaseaudiosrc.h>
+#include <gst/audio/gstringbuffer.h>
+#include <gst/audio/mixerutils.h>
+#include <gst/audio/multichannel.h>
+
+#include <gst/cdda/gstcddabasesrc.h>
+
+#include <gst/fft/gstfftf32.h>
+#include <gst/fft/gstfftf64.h>
+#include <gst/fft/gstfft.h>
+#include <gst/fft/gstffts16.h>
+#include <gst/fft/gstffts32.h>
+
+#include <gst/interfaces/colorbalancechannel.h>
+#include <gst/interfaces/colorbalance.h>
+#include <gst/interfaces/interfaces-enumtypes.h>
+#include <gst/interfaces/interfaces-marshal.h>
+#include <gst/interfaces/mixer.h>
+#include <gst/interfaces/mixeroptions.h>
+#include <gst/interfaces/mixertrack.h>
+#include <gst/interfaces/navigation.h>
+#include <gst/interfaces/propertyprobe.h>
+#include <gst/interfaces/streamvolume.h>
+#include <gst/interfaces/tunerchannel.h>
+#include <gst/interfaces/tuner.h>
+#include <gst/interfaces/tunernorm.h>
+#include <gst/interfaces/videoorientation.h>
+#include <gst/interfaces/videooverlay.h>
+
+#include <gst/netbuffer/gstnetbuffer.h>
+
+#include <gst/pbutils/codec-utils.h>
+#include <gst/pbutils/descriptions.h>
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/pbutils/encoding-target.h>
+#include <gst/pbutils/gstdiscoverer.h>
+#include <gst/pbutils/gstpluginsbaseversion.h>
+#include <gst/pbutils/install-plugins.h>
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/pbutils-enumtypes.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/pbutils/pbutils-marshal.h>
+
+#include <gst/riff/riff-ids.h>
+#include <gst/riff/riff-media.h>
+#include <gst/riff/riff-read.h>
+
+#include <gst/rtp/gstbasertpaudiopayload.h>
+#include <gst/rtp/gstbasertpdepayload.h>
+#include <gst/rtp/gstbasertppayload.h>
+#include <gst/rtp/gstrtcpbuffer.h>
+#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/rtp/gstrtppayloads.h>
+
+#include <gst/rtsp/gstrtspbase64.h>
+#include <gst/rtsp/gstrtspconnection.h>
+#include <gst/rtsp/gstrtspdefs.h>
+#include <gst/rtsp/gstrtsp-enumtypes.h>
+#include <gst/rtsp/gstrtspextension.h>
+#include <gst/rtsp/gstrtsp.h>
+#include <gst/rtsp/gstrtsp-marshal.h>
+#include <gst/rtsp/gstrtspmessage.h>
+#include <gst/rtsp/gstrtsprange.h>
+#include <gst/rtsp/gstrtsptransport.h>
+#include <gst/rtsp/gstrtspurl.h>
+
+#include <gst/sdp/gstsdp.h>
+#include <gst/sdp/gstsdpmessage.h>
+#include <gst/tag/gsttagdemux.h>
+
+#include <gst/tag/tag.h>
+
+#include <gst/video/gstvideofilter.h>
+#include <gst/video/gstvideosink.h>
+#include <gst/video/video-enumtypes.h>
+#include <gst/video/video.h>
+
+/* we mostly just want to make sure that our library headers don't
+ * contain anything a C++ compiler might not like */
+GST_START_TEST (test_nothing)
+{
+  gst_init (NULL, NULL);
+}
+
+GST_END_TEST;
+
+static Suite *
+libscpp_suite (void)
+{
+  Suite *s = suite_create ("GstLibsCpp");
+  TCase *tc_chain = tcase_create ("C++ libs header tests");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_nothing);
+
+  return s;
+}
+
+GST_CHECK_MAIN (libscpp);
diff --git a/tests/check/libs/libsabi.c b/tests/check/libs/libsabi.c
new file mode 100644
index 0000000..5c4135d
--- /dev/null
+++ b/tests/check/libs/libsabi.c
@@ -0,0 +1,130 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *               2011 Stefan Kost <ensonic@users.sf.net>
+ *
+ * libsabi.c: Unit test for ABI compatibility
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gst/check/gstcheck.h>
+
+#include <gst/app/gstappsrc.h>
+#include <gst/app/gstappsink.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudioclock.h>
+#include <gst/audio/gstaudiofilter.h>
+#include <gst/audio/gstaudiosrc.h>
+#include <gst/audio/gstaudiosink.h>
+#include <gst/audio/gstringbuffer.h>
+#include <gst/audio/multichannel.h>
+#include <gst/cdda/gstcddabasesrc.h>
+#include <gst/fft/gstfft.h>
+#include <gst/fft/gstffts16.h>
+#include <gst/fft/gstffts32.h>
+#include <gst/fft/gstfftf32.h>
+#include <gst/fft/gstfftf64.h>
+#include <gst/interfaces/colorbalance.h>
+#include <gst/interfaces/mixer.h>
+#include <gst/interfaces/navigation.h>
+#include <gst/interfaces/propertyprobe.h>
+#include <gst/interfaces/streamvolume.h>
+#include <gst/interfaces/tuner.h>
+#include <gst/interfaces/videoorientation.h>
+#include <gst/interfaces/videooverlay.h>
+#include <gst/netbuffer/gstnetbuffer.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/riff/riff-media.h>
+#include <gst/riff/riff-read.h>
+#include <gst/rtp/gstbasertpaudiopayload.h>
+#include <gst/rtp/gstbasertpdepayload.h>
+#include <gst/rtp/gstbasertppayload.h>
+#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/rtp/gstrtcpbuffer.h>
+#include <gst/rtp/gstrtppayloads.h>
+#include <gst/rtsp/gstrtsp.h>
+#include <gst/rtsp/gstrtspconnection.h>
+#include <gst/rtsp/gstrtspextension.h>
+#include <gst/rtsp/gstrtspmessage.h>
+#include <gst/rtsp/gstrtsprange.h>
+#include <gst/rtsp/gstrtsptransport.h>
+#include <gst/rtsp/gstrtspurl.h>
+#include <gst/sdp/gstsdp.h>
+#include <gst/sdp/gstsdpmessage.h>
+#include <gst/tag/tag.h>
+#include <gst/tag/gsttagdemux.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideofilter.h>
+#include <gst/video/gstvideosink.h>
+
+/* initial version of the file was generated using:
+ * grep -A1 "<STRUCT>" ../../docs/libs/gst-plugins-base-libs-decl.txt | \
+ * grep "<NAME>" | grep -v "Private" | sort | \
+ * sed -e 's/<NAME>\(.*\)<\/NAME>/\  {\"\1\", sizeof (\1), 0\},/'
+ *
+ * it needs a bit of editing to remove opaque structs
+ */
+
+#ifdef HAVE_CPU_I386
+# ifdef __APPLE__
+#   include "struct_i386_osx.h"
+#   define HAVE_ABI_SIZES TRUE
+# else
+#   include "struct_i386.h"
+#   define HAVE_ABI_SIZES TRUE
+# endif
+#else
+#ifdef HAVE_CPU_X86_64
+#include "struct_x86_64.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_ARM
+#include "struct_arm.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+/* in case someone wants to generate a new arch */
+#include "struct_i386.h"
+#define HAVE_ABI_SIZES FALSE
+#endif
+#endif
+#endif
+
+/* disabled for 0.11 */
+#undef HAVE_ABI_SIZES
+#define HAVE_ABI_SIZES FALSE
+
+GST_START_TEST (test_ABI)
+{
+  gst_check_abi_list (list, HAVE_ABI_SIZES);
+}
+
+GST_END_TEST;
+
+static Suite *
+libsabi_suite (void)
+{
+  Suite *s = suite_create ("LibsABI");
+  TCase *tc_chain = tcase_create ("size check");
+
+  tcase_set_timeout (tc_chain, 0);
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_ABI);
+  return s;
+}
+
+GST_CHECK_MAIN (libsabi);
diff --git a/tests/check/libs/mixer.c b/tests/check/libs/mixer.c
new file mode 100644
index 0000000..0028f58
--- /dev/null
+++ b/tests/check/libs/mixer.c
@@ -0,0 +1,216 @@
+/* GStreamer
+ *
+ * unit tests for audio support library
+ *
+ * Copyright (C) 2007 Jan Schmidt <thaytan@noraisin.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/interfaces/mixer.h>
+
+#include <string.h>
+
+#define TEST_ELEMENT_TYPE (test_element_get_type())
+
+/* FIXME 0.11: possibly remove mixer interface entirely, or simplify, or
+ * radically change */
+typedef struct TestElement TestElement;
+typedef struct TestElementClass TestElementClass;
+
+struct TestElement
+{
+  GstElement parent;
+};
+
+struct TestElementClass
+{
+  GstElementClass parent_class;
+};
+
+GType test_element_get_type (void);
+
+static void init_interface (GType type);
+
+G_DEFINE_TYPE_WITH_CODE (TestElement, test_element, GST_TYPE_ELEMENT,
+    init_interface (g_define_type_id));
+
+static void
+test_element_mixer_interface_init (GstMixerClass * klass)
+{
+  /* Not actually implementing any interfaces for this test atm */
+}
+
+static void
+init_interface (GType type)
+{
+  static const GInterfaceInfo mixer_iface_info = {
+    (GInterfaceInitFunc) test_element_mixer_interface_init,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_MIXER, &mixer_iface_info);
+}
+
+static void
+test_element_class_init (TestElementClass * klass)
+{
+}
+
+static void
+test_element_init (TestElement * this)
+{
+}
+
+GST_START_TEST (test_messages)
+{
+  /* Create an empty GstElement that has a GstMixer interface and then
+   * send some notifications and validate them */
+  GstElement *test_element =
+      (GstElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
+  GstBus *bus = gst_bus_new ();
+  GstMixerTrack *mtrack = g_object_new (GST_TYPE_MIXER_TRACK, NULL);
+  GstMixerOptions *mopts = g_object_new (GST_TYPE_MIXER_OPTIONS, NULL);
+  GstMixerTrack *t;
+  GstMixerOptions *o;
+  gint vols_in[2] = { 50, 75 };
+  gboolean mute, record;
+  gint *vols_out;
+  gint n_chans, i;
+  const gchar *val;
+  GstMessage *message;
+
+  mtrack->num_channels = 2;
+  mtrack->flags = GST_MIXER_TRACK_MUTE | GST_MIXER_TRACK_RECORD;
+
+  gst_element_set_bus (test_element, bus);
+
+  /* Test mute-toggled */
+  gst_mixer_mute_toggled (GST_MIXER (test_element), mtrack, TRUE);
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_MUTE_TOGGLED);
+  /* Test that we can pass NULL args */
+  gst_mixer_message_parse_mute_toggled (message, NULL, NULL);
+  /* Test the parsing */
+  gst_mixer_message_parse_mute_toggled (message, &t, &mute);
+  fail_unless (t == mtrack);
+  fail_unless (mute == TRUE);
+  gst_message_unref (message);
+
+  /* Test record-toggled */
+  gst_mixer_record_toggled (GST_MIXER (test_element), mtrack, TRUE);
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_RECORD_TOGGLED);
+  gst_mixer_message_parse_record_toggled (message, NULL, NULL);
+  gst_mixer_message_parse_record_toggled (message, &t, &record);
+  fail_unless (t == mtrack);
+  fail_unless (record == TRUE);
+  gst_message_unref (message);
+
+  /* Test volume-changed */
+  gst_mixer_volume_changed (GST_MIXER (test_element), mtrack, vols_in);
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_VOLUME_CHANGED);
+  gst_mixer_message_parse_volume_changed (message, NULL, NULL, NULL);
+  gst_mixer_message_parse_volume_changed (message, NULL, NULL, &n_chans);
+  fail_unless (n_chans == 2);
+  gst_mixer_message_parse_volume_changed (message, &t, &vols_out, &n_chans);
+  fail_unless (mtrack == t);
+  for (i = 0; i < n_chans; i++)
+    fail_unless (vols_out[i] == vols_in[i]);
+
+  gst_message_unref (message);
+  g_free (vols_out);
+
+  /* Test option-changed */
+  gst_mixer_option_changed (GST_MIXER (test_element), mopts, "TESTING");
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_OPTION_CHANGED);
+  gst_mixer_message_parse_option_changed (message, NULL, NULL);
+  gst_mixer_message_parse_option_changed (message, &o, &val);
+  fail_unless (o == mopts);
+  fail_unless (g_str_equal (val, "TESTING"));
+  gst_message_unref (message);
+
+  /* Test options-list-changed */
+  gst_mixer_options_list_changed (GST_MIXER (test_element), mopts);
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED);
+  gst_mixer_message_parse_options_list_changed (message, &o);
+  fail_unless (o == mopts);
+  gst_message_unref (message);
+
+  /* Test mixer-changed */
+  gst_mixer_mixer_changed (GST_MIXER (test_element));
+  message = gst_bus_poll (bus, GST_MESSAGE_ELEMENT, GST_CLOCK_TIME_NONE);
+  fail_if (message == NULL);
+  fail_unless (gst_mixer_message_get_type (message) ==
+      GST_MIXER_MESSAGE_MIXER_CHANGED);
+  gst_message_unref (message);
+
+  gst_object_unref (mtrack);
+  gst_object_unref (mopts);
+  gst_object_unref (bus);
+  gst_object_unref (test_element);
+}
+
+GST_END_TEST;
+
+static Suite *
+mixer_suite (void)
+{
+  Suite *s = suite_create ("mixer interface");
+  TCase *tc_chain = tcase_create ("notifications");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_messages);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = mixer_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/navigation.c b/tests/check/libs/navigation.c
new file mode 100644
index 0000000..893ed0b
--- /dev/null
+++ b/tests/check/libs/navigation.c
@@ -0,0 +1,324 @@
+/* GStreamer
+ *
+ * unit tests for the navigation interface library
+ *
+ * Copyright (C) 2009 Jan Schmidt <thaytan@noraisin.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/interfaces/navigation.h>
+
+#include <string.h>
+
+#define TEST_ELEMENT_TYPE (test_element_get_type())
+
+typedef struct TestElement TestElement;
+typedef struct TestElementClass TestElementClass;
+
+struct TestElement
+{
+  GstElement parent;
+
+  GstNavigationEventType sent_type;
+  const gchar *sent_key;
+  gdouble sent_x, sent_y;
+  gint sent_button;
+  GstNavigationCommand sent_command;
+};
+
+struct TestElementClass
+{
+  GstElementClass parent_class;
+};
+
+GType test_element_get_type (void);
+
+static void init_interface (GType type);
+static void nav_send_event (GstNavigation * navigation,
+    GstStructure * structure);
+
+G_DEFINE_TYPE_WITH_CODE (TestElement, test_element, GST_TYPE_ELEMENT,
+    init_interface (g_define_type_id));
+
+static void
+test_element_navigation_interface_init (GstNavigationInterface * klass)
+{
+  klass->send_event = nav_send_event;
+}
+
+static void
+init_interface (GType type)
+{
+  static const GInterfaceInfo navigation_iface_info = {
+    (GInterfaceInitFunc) test_element_navigation_interface_init,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_NAVIGATION,
+      &navigation_iface_info);
+}
+
+static void
+test_element_class_init (TestElementClass * klass)
+{
+}
+
+static void
+test_element_init (TestElement * this)
+{
+}
+
+static void
+nav_send_event (GstNavigation * navigation, GstStructure * structure)
+{
+  GstEvent *event = gst_event_new_navigation (structure);
+  GstNavigationEventType etype = gst_navigation_event_get_type (event);
+  TestElement *self = (TestElement *) (navigation);
+
+  fail_if (etype == GST_NAVIGATION_EVENT_INVALID,
+      "Received navigation event could not be parsed");
+  fail_unless (etype == self->sent_type,
+      "Received navigation event did not match sent");
+
+  switch (etype) {
+    case GST_NAVIGATION_EVENT_KEY_PRESS:
+    case GST_NAVIGATION_EVENT_KEY_RELEASE:{
+      const gchar *key;
+      fail_unless (gst_navigation_event_parse_key_event (event, &key));
+      fail_unless (strcmp (key, self->sent_key) == 0);
+      break;
+    }
+    case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS:
+    case GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE:{
+      gint button;
+      gdouble x, y;
+      fail_unless (gst_navigation_event_parse_mouse_button_event (event,
+              &button, &x, &y));
+      fail_unless (button == self->sent_button);
+      fail_unless (x == self->sent_x);
+      fail_unless (y == self->sent_y);
+      break;
+    }
+    case GST_NAVIGATION_EVENT_MOUSE_MOVE:{
+      gdouble x, y;
+      fail_unless (gst_navigation_event_parse_mouse_move_event (event, &x, &y));
+      fail_unless (x == self->sent_x);
+      fail_unless (y == self->sent_y);
+      break;
+    }
+    case GST_NAVIGATION_EVENT_COMMAND:{
+      GstNavigationCommand cmd;
+      fail_unless (gst_navigation_event_parse_command (event, &cmd));
+      fail_unless (cmd == self->sent_command);
+    }
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+}
+
+GST_START_TEST (test_events)
+{
+  /* Create an empty GstElement that has a GstNavigation interface and then
+   * send some navigation events and validate them */
+  TestElement *test_element =
+      (TestElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
+  GstNavigationCommand cmds[] = {
+    GST_NAVIGATION_COMMAND_MENU1, GST_NAVIGATION_COMMAND_MENU2,
+    GST_NAVIGATION_COMMAND_MENU3, GST_NAVIGATION_COMMAND_MENU4,
+    GST_NAVIGATION_COMMAND_MENU5, GST_NAVIGATION_COMMAND_MENU6,
+    GST_NAVIGATION_COMMAND_MENU7, GST_NAVIGATION_COMMAND_LEFT,
+    GST_NAVIGATION_COMMAND_RIGHT, GST_NAVIGATION_COMMAND_UP,
+    GST_NAVIGATION_COMMAND_DOWN, GST_NAVIGATION_COMMAND_ACTIVATE,
+    GST_NAVIGATION_COMMAND_PREV_ANGLE, GST_NAVIGATION_COMMAND_NEXT_ANGLE
+  };
+  gint i;
+
+  test_element->sent_type = GST_NAVIGATION_EVENT_KEY_PRESS;
+  test_element->sent_key = "1";
+  gst_navigation_send_key_event (GST_NAVIGATION (test_element), "key-press",
+      "1");
+
+  test_element->sent_type = GST_NAVIGATION_EVENT_KEY_RELEASE;
+  test_element->sent_key = "2";
+  gst_navigation_send_key_event (GST_NAVIGATION (test_element), "key-release",
+      "2");
+
+  test_element->sent_type = GST_NAVIGATION_EVENT_MOUSE_MOVE;
+  test_element->sent_x = 50;
+  test_element->sent_y = 100;
+  gst_navigation_send_mouse_event (GST_NAVIGATION (test_element), "mouse-move",
+      0, 50, 100);
+
+  test_element->sent_type = GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS;
+  test_element->sent_x = 10;
+  test_element->sent_y = 20;
+  test_element->sent_button = 1;
+  gst_navigation_send_mouse_event (GST_NAVIGATION (test_element),
+      "mouse-button-press", 1, 10, 20);
+
+  for (i = 0; i < G_N_ELEMENTS (cmds); i++) {
+    test_element->sent_type = GST_NAVIGATION_EVENT_COMMAND;
+    test_element->sent_command = cmds[i];
+    gst_navigation_send_command (GST_NAVIGATION (test_element), cmds[i]);
+  }
+
+  gst_object_unref (test_element);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_messages)
+{
+  GstMessage *m;
+  /* GST_NAVIGATION_MESSAGE_MOUSE_OVER */
+  {
+    gboolean active;
+    m = gst_navigation_message_new_mouse_over (NULL, TRUE);
+    fail_if (m == NULL);
+    fail_unless (gst_navigation_message_get_type (m) ==
+        GST_NAVIGATION_MESSAGE_MOUSE_OVER);
+    fail_unless (GST_MESSAGE_SRC (m) == NULL);
+    fail_unless (gst_navigation_message_parse_mouse_over (m, &active));
+    fail_unless (active == TRUE);
+    gst_message_unref (m);
+
+    m = gst_navigation_message_new_mouse_over (NULL, FALSE);
+    fail_if (m == NULL);
+    fail_unless (GST_MESSAGE_SRC (m) == NULL);
+    fail_unless (gst_navigation_message_get_type (m) ==
+        GST_NAVIGATION_MESSAGE_MOUSE_OVER);
+    fail_unless (gst_navigation_message_parse_mouse_over (m, &active));
+    fail_unless (active == FALSE);
+    gst_message_unref (m);
+  }
+
+  /* GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED */
+  {
+    m = gst_navigation_message_new_commands_changed (NULL);
+    fail_if (m == NULL);
+    fail_unless (GST_MESSAGE_SRC (m) == NULL);
+    fail_unless (gst_navigation_message_get_type (m) ==
+        GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED);
+    gst_message_unref (m);
+  }
+
+  /* GST_NAVIGATION_MESSAGE_ANGLES_CHANGED */
+  {
+    guint angle, angles;
+    m = gst_navigation_message_new_angles_changed (NULL, 1, 5);
+    fail_if (m == NULL);
+    fail_unless (GST_MESSAGE_SRC (m) == NULL);
+    fail_unless (gst_navigation_message_get_type (m) ==
+        GST_NAVIGATION_MESSAGE_ANGLES_CHANGED);
+    fail_unless (gst_navigation_message_parse_angles_changed (m, &angle,
+            &angles));
+    fail_unless (angle == 1);
+    fail_unless (angles == 5);
+    gst_message_unref (m);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_queries)
+{
+  GstQuery *q;
+
+  /* GST_NAVIGATION_QUERY_COMMANDS */
+  {
+    guint n;
+    GstNavigationCommand cmd;
+
+    q = gst_navigation_query_new_commands ();
+    fail_unless (q != NULL);
+    fail_unless (gst_navigation_query_get_type (q) ==
+        GST_NAVIGATION_QUERY_COMMANDS);
+    gst_navigation_query_set_commands (q, 3, GST_NAVIGATION_COMMAND_LEFT,
+        GST_NAVIGATION_COMMAND_MENU1, GST_NAVIGATION_COMMAND_MENU5);
+    fail_unless (gst_navigation_query_parse_commands_length (q, &n));
+    fail_unless (n == 3);
+    fail_unless (gst_navigation_query_parse_commands_nth (q, 1, &cmd));
+    fail_unless (cmd == GST_NAVIGATION_COMMAND_MENU1);
+
+    fail_unless (gst_navigation_query_parse_commands_length (q, NULL));
+    fail_unless (gst_navigation_query_parse_commands_nth (q, 2, NULL));
+
+    gst_query_unref (q);
+  }
+
+  /* GST_NAVIGATION_QUERY_ANGLES */
+  {
+    guint angle, angles;
+    q = gst_navigation_query_new_angles ();
+    fail_unless (q != NULL);
+    fail_unless (gst_navigation_query_get_type (q) ==
+        GST_NAVIGATION_QUERY_ANGLES);
+    gst_navigation_query_set_angles (q, 4, 8);
+    fail_unless (gst_navigation_query_parse_angles (q, &angle, &angles));
+    fail_unless (angle == 4);
+    fail_unless (angles == 8);
+
+    fail_unless (gst_navigation_query_parse_angles (q, NULL, &angles));
+    fail_unless (gst_navigation_query_parse_angles (q, &angle, NULL));
+    fail_unless (gst_navigation_query_parse_angles (q, NULL, NULL));
+
+    gst_query_unref (q);
+  }
+
+}
+
+GST_END_TEST;
+
+static Suite *
+navigation_suite (void)
+{
+  Suite *s = suite_create ("navigation interface");
+  TCase *tc_chain = tcase_create ("notifications");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_events);
+  tcase_add_test (tc_chain, test_messages);
+  tcase_add_test (tc_chain, test_queries);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = navigation_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/netbuffer.c b/tests/check/libs/netbuffer.c
new file mode 100644
index 0000000..5485439
--- /dev/null
+++ b/tests/check/libs/netbuffer.c
@@ -0,0 +1,140 @@
+/* GStreamer unit tests for libgstnetbuffer
+ *
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/netbuffer/gstnetbuffer.h>
+
+#define DATA_STRING "Yoho this is a string"
+
+GST_START_TEST (test_netbuffer_copy)
+{
+  GstBuffer *netbuf, *copy;
+  guint8 ipv6_addr[16] = { 0xff, 0x11, 0xee, 0x22, 0xdd, 0x33, 0xcc,
+    0x44, 0xbb, 0x55, 0xaa, 0x66, 0x00, 0x77, 0x99, 0x88
+  };
+  guint8 ipv6_copy[16];
+  guint32 ipv4_copy, ipv4_addr = 0xfe12dc34;
+  guint16 ipv6_port = 3490;
+  guint16 ipv4_port = 5678;
+  guint16 port;
+  GstMetaNetAddress *meta, *cmeta;
+  gsize len;
+  guint8 *data1, *data2;
+  gsize size1, size2;
+
+  netbuf = gst_buffer_new ();
+  fail_unless (netbuf != NULL, "failed to create net buffer");
+  meta = gst_buffer_add_meta_net_address (netbuf);
+
+  gst_netaddress_set_ip4_address (&meta->naddr, ipv4_addr, ipv4_port);
+
+  len = strlen (DATA_STRING);
+  gst_buffer_take_memory (netbuf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) DATA_STRING, NULL, len, 0, len));
+
+  GST_BUFFER_FLAG_SET (netbuf, GST_BUFFER_FLAG_DISCONT);
+
+  copy = gst_buffer_copy (netbuf);
+  fail_unless (copy != NULL, "failed to copy net buffer");
+
+  cmeta = gst_buffer_get_meta_net_address (copy);
+  fail_unless (cmeta != NULL, "copied buffer is not a GstNetBuffer!");
+
+  fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (copy), 1);
+
+  data1 = gst_buffer_map (netbuf, &size1, NULL, GST_MAP_READ);
+  data2 = gst_buffer_map (copy, &size2, NULL, GST_MAP_READ);
+  fail_unless_equals_int (size1, size2);
+  fail_unless (memcmp (data1, data2, size1) == 0);
+  gst_buffer_unmap (copy, data2, size2);
+  gst_buffer_unmap (netbuf, data1, size1);
+
+  fail_unless (GST_BUFFER_FLAG_IS_SET (copy, GST_BUFFER_FLAG_DISCONT));
+
+  fail_unless (gst_netaddress_get_ip4_address (&cmeta->naddr, &ipv4_copy,
+          &port));
+  fail_unless (ipv4_copy == ipv4_addr,
+      "Copied buffer has wrong IPV4 from address");
+  fail_unless (port == ipv4_port, "Copied buffer has wrong IPV4 from port");
+  gst_buffer_unref (netbuf);
+  gst_buffer_unref (copy);
+
+  netbuf = gst_buffer_new ();
+  fail_unless (netbuf != NULL, "failed to create net buffer");
+  meta = gst_buffer_add_meta_net_address (netbuf);
+
+  gst_netaddress_set_ip6_address (&meta->naddr, ipv6_addr, ipv6_port);
+
+  len = strlen (DATA_STRING);
+  gst_buffer_take_memory (netbuf, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (gpointer) DATA_STRING, NULL, len, 0, len));
+
+  GST_BUFFER_FLAG_SET (netbuf, GST_BUFFER_FLAG_DISCONT);
+
+  copy = gst_buffer_copy (netbuf);
+  fail_unless (copy != NULL, "failed to copy net buffer");
+
+  cmeta = gst_buffer_get_meta_net_address (copy);
+  fail_unless (cmeta != NULL, "copied buffer is not a GstNetBuffer!");
+
+  fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (copy), 1);
+
+  data1 = gst_buffer_map (netbuf, &size1, NULL, GST_MAP_READ);
+  data2 = gst_buffer_map (copy, &size2, NULL, GST_MAP_READ);
+  fail_unless_equals_int (size1, size2);
+  fail_unless (memcmp (data1, data2, size1) == 0);
+  gst_buffer_unmap (copy, data2, size2);
+  gst_buffer_unmap (netbuf, data1, size1);
+
+  fail_unless (GST_BUFFER_FLAG_IS_SET (copy, GST_BUFFER_FLAG_DISCONT));
+
+  fail_unless (gst_netaddress_get_ip6_address (&cmeta->naddr, ipv6_copy,
+          &port));
+  fail_unless (memcmp (ipv6_copy, ipv6_addr, 16) == 0,
+      "Copied buffer has wrong IPv6 destination address");
+  fail_unless (port == ipv6_port,
+      "Copied buffer has wrong IPv6 destination port");
+  gst_buffer_unref (netbuf);
+  gst_buffer_unref (copy);
+
+}
+
+GST_END_TEST;
+
+static Suite *
+netbuffer_suite (void)
+{
+  Suite *s = suite_create ("netbuffer");
+  TCase *tc_chain = tcase_create ("netbuffer");
+
+  suite_add_tcase (s, tc_chain);
+
+  tcase_add_test (tc_chain, test_netbuffer_copy);
+
+  return s;
+}
+
+GST_CHECK_MAIN (netbuffer);
diff --git a/tests/check/libs/pbutils.c b/tests/check/libs/pbutils.c
new file mode 100644
index 0000000..9f74ca1
--- /dev/null
+++ b/tests/check/libs/pbutils.c
@@ -0,0 +1,750 @@
+/* GStreamer unit tests for libgstpbutils
+ *
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/pbutils/pbutils.h>
+
+#include <stdio.h>
+#include <glib/gstdio.h>
+#include <glib/gprintf.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>          /* for chmod() and getpid () */
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>           /* for chmod() */
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>             /* for unlink() */
+#endif
+
+static void
+missing_msg_check_getters (GstMessage * msg)
+{
+  gchar *str;
+
+  str = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (str != NULL);
+  fail_unless (*str != '\0');
+  fail_unless (g_str_has_prefix (str, "gstreamer|"));
+  g_free (str);
+
+  str = gst_missing_plugin_message_get_description (msg);
+  fail_unless (str != NULL);
+  fail_unless (*str != '\0');
+  g_free (str);
+}
+
+GST_START_TEST (test_pb_utils_post_missing_messages)
+{
+  const GstStructure *s;
+  GstElement *pipeline;
+  GstMessage *msg;
+  GstCaps *caps;
+  GstBus *bus;
+
+  gst_pb_utils_init ();
+
+  pipeline = gst_pipeline_new ("pipeline");
+  bus = gst_element_get_bus (pipeline);
+
+  /* first, test common assertion failure cases */
+  ASSERT_CRITICAL (msg = gst_missing_uri_source_message_new (NULL, "http"));
+  ASSERT_CRITICAL (gst_missing_uri_source_message_new (pipeline, NULL));
+
+  ASSERT_CRITICAL (gst_missing_uri_sink_message_new (NULL, "http"));
+  ASSERT_CRITICAL (gst_missing_uri_sink_message_new (pipeline, NULL));
+
+  ASSERT_CRITICAL (gst_missing_element_message_new (NULL, "rgbfyltr"));
+  ASSERT_CRITICAL (gst_missing_element_message_new (pipeline, NULL));
+
+  caps = gst_caps_new_simple ("audio/x-dontexist", NULL);
+
+  ASSERT_CRITICAL (gst_missing_decoder_message_new (NULL, caps));
+  ASSERT_CRITICAL (gst_missing_decoder_message_new (pipeline, NULL));
+
+  ASSERT_CRITICAL (gst_missing_encoder_message_new (NULL, caps));
+  ASSERT_CRITICAL (gst_missing_encoder_message_new (pipeline, NULL));
+
+  gst_caps_unref (caps);
+
+  /* URI source (with existing protocol) */
+  msg = gst_missing_uri_source_message_new (pipeline, "http");
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "urisource");
+  fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "detail"), "http");
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* URI sink (with existing protocol) */
+  msg = gst_missing_uri_sink_message_new (pipeline, "smb");
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "urisink");
+  fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "detail"), "smb");
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* URI source (with bogus protocol) */
+  msg = gst_missing_uri_source_message_new (pipeline, "chchck");
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "urisource");
+  fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "detail"), "chchck");
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* URI sink (with bogus protocol) */
+  msg = gst_missing_uri_sink_message_new (pipeline, "chchck");
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "urisink");
+  fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "detail"), "chchck");
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* element */
+  msg = gst_missing_element_message_new (pipeline, "foobar");
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "element");
+  fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "detail"), "foobar");
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* create bogus caps that don't exist */
+  caps = gst_caps_new_simple ("do/x-not", "exist", G_TYPE_BOOLEAN, FALSE, NULL);
+
+  /* decoder (with unknown caps) */
+  msg = gst_missing_decoder_message_new (pipeline, caps);
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "decoder");
+  fail_unless (gst_structure_has_field_typed (s, "detail", GST_TYPE_CAPS));
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* encoder (with unknown caps) */
+  msg = gst_missing_encoder_message_new (pipeline, caps);
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "encoder");
+  fail_unless (gst_structure_has_field_typed (s, "detail", GST_TYPE_CAPS));
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  gst_caps_unref (caps);
+
+  /* create caps that exist */
+  caps = gst_caps_new_simple ("video/x-matroska", NULL);
+  /* decoder (with known caps) */
+  msg = gst_missing_decoder_message_new (pipeline, caps);
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "decoder");
+  fail_unless (gst_structure_has_field_typed (s, "detail", GST_TYPE_CAPS));
+  fail_unless (gst_structure_has_field_typed (s, "name", G_TYPE_STRING));
+  fail_unless (gst_structure_get_string (s, "name") != NULL);
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  /* encoder (with known caps) */
+  msg = gst_missing_encoder_message_new (pipeline, caps);
+  fail_unless (msg != NULL);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT);
+  fail_unless (gst_message_get_structure (msg) != NULL);
+  s = gst_message_get_structure (msg);
+  fail_unless (gst_structure_has_name (s, "missing-plugin"));
+  fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING));
+  fail_unless_equals_string (gst_structure_get_string (s, "type"), "encoder");
+  fail_unless (gst_structure_has_field_typed (s, "detail", GST_TYPE_CAPS));
+  fail_unless (gst_structure_has_field_typed (s, "name", G_TYPE_STRING));
+  fail_unless (gst_structure_get_string (s, "name") != NULL);
+  missing_msg_check_getters (msg);
+  gst_message_unref (msg);
+
+  gst_caps_unref (caps);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+  gst_object_unref (bus);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_pb_utils_init)
+{
+  /* should be fine to call multiple times */
+  gst_pb_utils_init ();
+  gst_pb_utils_init ();
+  gst_pb_utils_init ();
+  gst_pb_utils_init ();
+}
+
+GST_END_TEST;
+
+static const gchar *caps_strings[] = {
+  /* formats with static descriptions */
+  "application/ogg", "application/vnd.rn-realmedia", "video/x-fli",
+  "video/x-flv", "video/x-matroska", "video/x-ms-asf", "video/x-msvideo",
+  "video/x-quicktime", "video/quicktime", "audio/x-ac3", "audio/ac3",
+  "audio/x-private-ac3", "audio/x-private1-ac3", "audio/x-adpcm",
+  "audio/aiff", "audio/x-alaw", "audio/amr", "audio/AMR", "audio/AMR-WB",
+  "audio/iLBC-sh", "audio/ms-gsm", "audio/qcelp", "audio/x-adpcm",
+  "audio/x-aiff", "audio/x-alac", "audio/x-amr-nb-sh", "audio/x-amr-wb-sh",
+  "audio/x-au", "audio/x-cinepak", "audio/x-dpcm", "audio/x-dts",
+  "audio/x-dv", "audio/x-flac", "audio/x-gsm", "audio/x-iec958",
+  "audio/x-iLBC", "audio/x-ircam", "audio/x-lpcm", "audio/x-private1-lpcm",
+  "audio/x-m4a", "audio/x-mod", "audio/x-mulaw", "audio/x-musepack",
+  "audio/x-nist", "audio/x-nsf", "audio/x-paris", "audio/x-qdm2",
+  "audio/x-ralf-mpeg4-generic", "audio/x-sds", "audio/x-shorten",
+  "audio/x-sid", "audio/x-sipro", "audio/x-spc", "audio/x-speex",
+  "audio/x-svx", "audio/x-tta", "audio/x-ttafile",
+  "audio/x-vnd.sony.atrac3", "audio/x-vorbis", "audio/x-voc", "audio/x-w64",
+  "audio/x-wav", "audio/x-wavpack", "audio/x-wavpack-correction",
+  "audio/x-wms", "audio/x-voxware", "video/sp5x", "video/vivo",
+  "video/x-3ivx", "video/x-4xm", "video/x-apple-video", "video/x-camtasia",
+  "video/x-cdxa", "video/x-cinepak", "video/x-cirrus-logic-accupak",
+  "video/x-compressed-yuv", "video/x-dirac", "video/x-dvd-subpicture",
+  "video/x-ffv", "video/x-flash-screen", "video/x-flash-video",
+  "video/x-h261", "video/x-huffyuv", "video/x-intel-h263", "video/x-jpeg",
+  "video/x-mjpeg", "video/x-mjpeg-b", "video/mpegts", "video/x-mng",
+  "video/x-mszh", "video/x-msvideocodec", "video/x-mve", "video/x-nut",
+  "video/x-nuv", "video/x-qdrw", "video/x-raw", "video/x-smc",
+  "video/x-smoke", "video/x-tarkin", "video/x-theora", "video/x-rle",
+  "video/x-ultimotion", "video/x-vcd", "video/x-vmnc", "video/x-vp3",
+  "video/x-vp5", "video/x-vp6", "video/x-vp6-flash", "video/x-vp7",
+  "video/x-xvid", "video/x-zlib", "image/bmp", "image/x-bmp",
+  "image/x-MS-bmp", "image/gif", "image/jpeg", "image/jng", "image/png",
+  "image/pbm", "image/ppm", "image/svg+xml", "image/tiff",
+  "image/x-cmu-raster", "image/x-icon", "image/x-xcf", "image/x-pixmap",
+  "image/x-xpixmap", "image/x-quicktime", "image/x-sun-raster",
+  "image/x-tga", "video/x-dv", "video/x-dv",
+  /* some RTP formats */
+  "application/x-rtp, media=(string)video, encoding-name=(string)TimVCodec",
+  "application/x-rtp, media=(string)audio, encoding-name=(string)TimACodec",
+  "application/x-rtp, media=(string)application, encoding-name=(string)TimMux",
+  "application/x-rtp, media=(string)woohoo, encoding-name=(string)TPM",
+  /* incomplete RTP formats */
+  "application/x-rtp, media=(string)woohoo",
+  "application/x-rtp, encoding-name=(string)TPM",
+  "application/x-rtp, media=(string)woohoo",
+  /* formats with dynamic descriptions */
+  "audio/x-adpcm",
+  "audio/x-adpcm, layout=(string)dvi",
+  "audio/x-adpcm, layout=(string)swf",
+  "audio/x-adpcm, layout=(string)microsoft",
+  "audio/x-adpcm, layout=(string)quicktime",
+  "audio/mpeg, mpegversion=(int)4",
+  "audio/mpeg, mpegversion=(int)1, layer=(int)1",
+  "audio/mpeg, mpegversion=(int)1, layer=(int)2",
+  "audio/mpeg, mpegversion=(int)1, layer=(int)3",
+  "audio/mpeg, mpegversion=(int)1, layer=(int)99",
+  "audio/mpeg, mpegversion=(int)99",
+  "video/mpeg, mpegversion=(int)2, systemstream=(boolean)TRUE",
+  "video/mpeg, systemstream=(boolean)FALSE",
+  "video/mpeg, mpegversion=(int)2",
+  "video/mpeg, mpegversion=(int)1, systemstream=(boolean)FALSE",
+  "video/mpeg, mpegversion=(int)2, systemstream=(boolean)FALSE",
+  "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE",
+  "video/mpeg, mpegversion=(int)99, systemstream=(boolean)TRUE",
+  "video/mpeg, mpegversion=(int)99, systemstream=(boolean)FALSE",
+  "video/mpeg",
+  "video/x-indeo, indeoversion=(int)3",
+  "video/x-indeo, indeoversion=(int)5",
+  "video/x-indeo",
+  "video/x-wmv, wmvversion=(int)1",
+  "video/x-wmv, wmvversion=(int)2",
+  "video/x-wmv, wmvversion=(int)3",
+  "video/x-wmv, wmvversion=(int)99",
+  "video/x-wmv",
+  "audio/x-wma, wmaversion=(int)1",
+  "audio/x-wma, wmaversion=(int)2",
+  "audio/x-wma, wmaversion=(int)3",
+  "audio/x-wma, wmaversion=(int)99",
+  "audio/x-wma",
+  "video/x-divx, divxversion=(int)3",
+  "video/x-divx, divxversion=(int)4",
+  "video/x-divx, divxversion=(int)5",
+  "video/x-divx, divxversion=(int)99",
+  "video/x-divx",
+  "video/x-svq, svqversion=(int)1",
+  "video/x-svq, svqversion=(int)3",
+  "video/x-svq, svqversion=(int)99",
+  "video/x-svq",
+  "video/x-h264, variant=(string)itu",
+  "video/x-h264, variant=(string)videosoft",
+  "video/x-h264, variant=(string)foobar",
+  "video/x-h264",
+  "video/x-h263, variant=(string)itu",
+  "video/x-h263, variant=(string)lead",
+  "video/x-h263, variant=(string)microsoft",
+  "video/x-h263, variant=(string)vdolive",
+  "video/x-h263, variant=(string)vivo",
+  "video/x-h263, variant=(string)xirlink",
+  "video/x-h263, variant=(string)foobar",
+  "video/x-h263",
+  "video/x-msmpeg, msmpegversion=(int)41",
+  "video/x-msmpeg, msmpegversion=(int)42",
+  "video/x-msmpeg, msmpegversion=(int)43",
+  "video/x-msmpeg, msmpegversion=(int)99",
+  "video/x-msmpeg",
+  "video/x-pn-realvideo, rmversion=(int)1",
+  "video/x-pn-realvideo, rmversion=(int)2",
+  "video/x-pn-realvideo, rmversion=(int)3",
+  "video/x-pn-realvideo, rmversion=(int)4",
+  "video/x-pn-realvideo, rmversion=(int)99",
+  "video/x-pn-realvideo",
+  "audio/x-pn-realaudio, raversion=(int)1",
+  "audio/x-pn-realaudio, raversion=(int)2",
+  "audio/x-pn-realaudio, raversion=(int)99",
+  "audio/x-pn-realaudio",
+  "audio/x-mace, maceversion=(int)3",
+  "audio/x-mace, maceversion=(int)6",
+  "audio/x-mace, maceversion=(int)99",
+  "audio/x-mace",
+  "video/x-truemotion, trueversion=(int)1",
+  "video/x-truemotion, trueversion=(int)2",
+  "video/x-truemotion, trueversion=(int)99",
+  "video/x-truemotion",
+  "video/x-asus, asusversion=(int)1",
+  "video/x-asus, asusversion=(int)2",
+  "video/x-asus, asusversion=(int)99",
+  "video/x-asus",
+  "video/x-xan, wcversion=(int)1",
+  "video/x-xan, wcversion=(int)99",
+  "video/x-xan",
+  "video/x-ati-vcr, vcrversion=(int)1",
+  "video/x-ati-vcr, vcrversion=(int)2",
+  "video/x-ati-vcr, vcrversion=(int)99",
+  "video/x-ati-vcr",
+  /* raw audio */
+  "audio/x-raw, format=(string)S16LE, rate=(int)44100, channels=(int)2",
+  "audio/x-raw, format=(string)F32,rate=(int)22050, channels=(int)2",
+  /* raw video */
+  "video/x-raw, format=(string)RGB16, width=(int)320, height=(int)240, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1",
+  "video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, framerate=(fraction)30/1",
+  /* and a made-up format */
+  "video/x-tpm"
+};
+
+GST_START_TEST (test_pb_utils_get_codec_description)
+{
+  gint i;
+
+  gst_pb_utils_init ();
+
+  for (i = 0; i < G_N_ELEMENTS (caps_strings); ++i) {
+    GstCaps *caps;
+    gchar *desc;
+
+    caps = gst_caps_from_string (caps_strings[i]);
+    fail_unless (caps != NULL, "could not create caps from string '%s'",
+        caps_strings[i]);
+    GST_LOG ("Caps %s:", caps_strings[i]);
+    desc = gst_pb_utils_get_codec_description (caps);
+    fail_unless (desc != NULL);
+    GST_LOG (" - codec   : %s", desc);
+    g_free (desc);
+    desc = gst_pb_utils_get_decoder_description (caps);
+    fail_unless (desc != NULL);
+    GST_LOG (" - decoder : %s", desc);
+    g_free (desc);
+    desc = gst_pb_utils_get_encoder_description (caps);
+    fail_unless (desc != NULL);
+    GST_LOG (" - encoder : %s", desc);
+    g_free (desc);
+    gst_caps_unref (caps);
+  }
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_pb_utils_taglist_add_codec_info)
+{
+  GstTagList *list;
+  GstCaps *caps;
+
+  gst_pb_utils_init ();
+  list = gst_tag_list_new ();
+  caps = gst_caps_new_simple ("video/x-theora", NULL);
+  ASSERT_CRITICAL (fail_if
+      (gst_pb_utils_add_codec_description_to_tag_list (NULL,
+              GST_TAG_VIDEO_CODEC, caps)));
+  ASSERT_CRITICAL (fail_if
+      (gst_pb_utils_add_codec_description_to_tag_list (list, NULL, caps)));
+  ASSERT_CRITICAL (fail_if
+      (gst_pb_utils_add_codec_description_to_tag_list (list, "asdfa", caps)));
+  ASSERT_CRITICAL (fail_if
+      (gst_pb_utils_add_codec_description_to_tag_list (list,
+              GST_TAG_IMAGE, caps)));
+  ASSERT_CRITICAL (fail_if
+      (gst_pb_utils_add_codec_description_to_tag_list (list,
+              GST_TAG_VIDEO_CODEC, NULL)));
+  /* FIXME: do something here */
+  fail_unless (gst_pb_utils_add_codec_description_to_tag_list (list,
+          GST_TAG_VIDEO_CODEC, caps));
+  fail_if (gst_tag_list_is_empty (list));
+  gst_tag_list_free (list);
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+static gint marker;
+
+static void
+result_cb (GstInstallPluginsReturn result, gpointer user_data)
+{
+  GST_LOG ("result = %u, user_data = %p", result, user_data);
+
+  fail_unless (user_data == (gpointer) & marker);
+
+  marker = result;
+}
+
+#define SCRIPT_NO_XID \
+    "#!/bin/sh\n"                                  \
+    "if test x$1 != xdetail1; then exit 21; fi;\n" \
+    "if test x$2 != xdetail2; then exit 22; fi;\n" \
+    "exit 1\n"
+
+#define SCRIPT_WITH_XID \
+    "#!/bin/sh\n"                                  \
+    "if test x$1 != 'x--transient-for=42'; then exit 21; fi;\n"      \
+    "if test x$2 != xdetail1; then exit 22; fi;\n" \
+    "if test x$3 != xdetail2; then exit 23; fi;\n" \
+    "exit 0\n"
+
+/* make sure our script gets called with the right parameters */
+static void
+test_pb_utils_install_plugins_do_callout (gchar ** details,
+    GstInstallPluginsContext * ctx, const gchar * script,
+    GstInstallPluginsReturn expected_result)
+{
+#ifdef G_OS_UNIX
+  GstInstallPluginsReturn ret;
+  GError *err = NULL;
+  gchar *path;
+
+  path = g_strdup_printf ("%s/gst-plugins-base-unit-test-helper.%s.%lu",
+      g_get_tmp_dir (), (g_get_user_name ())? g_get_user_name () : "nobody",
+      (gulong) getpid ());
+
+  if (!g_file_set_contents (path, script, -1, &err)) {
+    GST_DEBUG ("Failed to write test script to %s: %s", path, err->message);
+    g_error_free (err);
+    goto done;
+  }
+
+  if (chmod (path, S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
+    GST_DEBUG ("Could not set mode u+rwx on '%s'", path);
+    goto done;
+  }
+
+  /* test gst_install_plugins_supported() I */
+  g_setenv ("GST_INSTALL_PLUGINS_HELPER", "/i/do/not/ex.ist!", 1);
+  fail_if (gst_install_plugins_supported ());
+
+  GST_LOG ("setting GST_INSTALL_PLUGINS_HELPER to '%s'", path);
+  g_setenv ("GST_INSTALL_PLUGINS_HELPER", path, 1);
+
+  /* test gst_install_plugins_supported() II */
+  fail_unless (gst_install_plugins_supported ());
+
+  /* test sync callout */
+  ret = gst_install_plugins_sync (details, ctx);
+  fail_unless (ret == GST_INSTALL_PLUGINS_HELPER_MISSING ||
+      ret == expected_result,
+      "gst_install_plugins_sync() failed with unexpected ret %d, which is "
+      "neither HELPER_MISSING nor %d", ret, expected_result);
+
+  /* test async callout */
+  marker = -333;
+  ret = gst_install_plugins_async (details, ctx, result_cb,
+      (gpointer) & marker);
+  fail_unless (ret == GST_INSTALL_PLUGINS_HELPER_MISSING ||
+      ret == GST_INSTALL_PLUGINS_STARTED_OK,
+      "gst_install_plugins_async() failed with unexpected ret %d", ret);
+  if (ret == GST_INSTALL_PLUGINS_STARTED_OK) {
+    while (marker == -333) {
+      g_usleep (500);
+      g_main_context_iteration (NULL, FALSE);
+    }
+    /* and check that the callback was called with the expected code */
+    fail_unless_equals_int (marker, expected_result);
+  }
+
+done:
+
+  unlink (path);
+  g_free (path);
+#endif /* G_OS_UNIX */
+}
+
+GST_START_TEST (test_pb_utils_install_plugins)
+{
+  GstInstallPluginsContext *ctx;
+  GstInstallPluginsReturn ret;
+  gchar *details[] = { (char *) "detail1", (char *) "detail2", NULL };
+  gchar *details_multi[] =
+      { (char *) "detail1", (char *) "detail1", (char *) "detail2", NULL };
+
+  ctx = gst_install_plugins_context_new ();
+
+  ASSERT_CRITICAL (ret = gst_install_plugins_sync (NULL, ctx));
+  ASSERT_CRITICAL (ret =
+      gst_install_plugins_async (NULL, ctx, result_cb, (gpointer) & marker));
+  ASSERT_CRITICAL (ret =
+      gst_install_plugins_async (details, ctx, NULL, (gpointer) & marker));
+
+  /* make sure the functions return the right error code if the helper does
+   * not exist */
+  g_setenv ("GST_INSTALL_PLUGINS_HELPER", "/does/not/ex/is.t", 1);
+  ret = gst_install_plugins_sync (details, NULL);
+  fail_unless_equals_int (ret, GST_INSTALL_PLUGINS_HELPER_MISSING);
+
+  marker = -333;
+  ret =
+      gst_install_plugins_async (details, NULL, result_cb, (gpointer) & marker);
+  fail_unless_equals_int (ret, GST_INSTALL_PLUGINS_HELPER_MISSING);
+  /* and check that the callback wasn't called */
+  fail_unless_equals_int (marker, -333);
+
+  /* now make sure our scripts are actually called as expected (if possible) */
+  test_pb_utils_install_plugins_do_callout (details, NULL, SCRIPT_NO_XID,
+      GST_INSTALL_PLUGINS_NOT_FOUND);
+
+  /* and again with context */
+  gst_install_plugins_context_set_xid (ctx, 42);
+  test_pb_utils_install_plugins_do_callout (details, ctx, SCRIPT_WITH_XID,
+      GST_INSTALL_PLUGINS_SUCCESS);
+
+  /* and make sure that duplicate detail strings get dropped */
+  test_pb_utils_install_plugins_do_callout (details_multi, NULL, SCRIPT_NO_XID,
+      GST_INSTALL_PLUGINS_NOT_FOUND);
+
+  /* and the same again with context */
+  gst_install_plugins_context_set_xid (ctx, 42);
+  test_pb_utils_install_plugins_do_callout (details_multi, ctx, SCRIPT_WITH_XID,
+      GST_INSTALL_PLUGINS_SUCCESS);
+
+  /* and free the context now that we don't need it any longer */
+  gst_install_plugins_context_free (ctx);
+
+  /* completely silly test to check gst_install_plugins_return_get_name()
+   * is somewhat well-behaved */
+  {
+    gint i;
+
+    for (i = -99; i < 16738; ++i) {
+      const gchar *s;
+
+      s = gst_install_plugins_return_get_name ((GstInstallPluginsReturn) i);
+      fail_unless (s != NULL);
+      /* GST_LOG ("%5d = %s", i, s); */
+    }
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_pb_utils_installer_details)
+{
+  GstMessage *msg;
+  GstElement *el;
+  GstCaps *caps;
+  gchar *detail1, *detail2;
+
+  el = gst_pipeline_new ("dummy-element");
+
+  /* uri source */
+  detail1 = gst_missing_uri_source_installer_detail_new ("http");
+  fail_unless (detail1 != NULL);
+  fail_unless (g_str_has_prefix (detail1, "gstreamer|0.11|"));
+  fail_unless (g_str_has_suffix (detail1, "|urisource-http"));
+  msg = gst_missing_uri_source_message_new (el, "http");
+  fail_unless (msg != NULL);
+  detail2 = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (detail2 != NULL);
+  gst_message_unref (msg);
+  fail_unless_equals_string (detail1, detail2);
+  g_free (detail1);
+  g_free (detail2);
+
+  /* uri sink */
+  detail1 = gst_missing_uri_sink_installer_detail_new ("http");
+  fail_unless (detail1 != NULL);
+  fail_unless (g_str_has_prefix (detail1, "gstreamer|0.11|"));
+  fail_unless (g_str_has_suffix (detail1, "|urisink-http"));
+  msg = gst_missing_uri_sink_message_new (el, "http");
+  fail_unless (msg != NULL);
+  detail2 = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (detail2 != NULL);
+  gst_message_unref (msg);
+  fail_unless_equals_string (detail1, detail2);
+  g_free (detail1);
+  g_free (detail2);
+
+  /* element */
+  detail1 = gst_missing_element_installer_detail_new ("deinterlace");
+  fail_unless (detail1 != NULL);
+  fail_unless (g_str_has_prefix (detail1, "gstreamer|0.11|"));
+  fail_unless (g_str_has_suffix (detail1, "|element-deinterlace"));
+  msg = gst_missing_element_message_new (el, "deinterlace");
+  fail_unless (msg != NULL);
+  detail2 = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (detail2 != NULL);
+  gst_message_unref (msg);
+  fail_unless_equals_string (detail1, detail2);
+  g_free (detail1);
+  g_free (detail2);
+
+  /* decoder */
+  caps = gst_caps_new_simple ("audio/x-spiffy", "spiffyversion", G_TYPE_INT,
+      2, "channels", G_TYPE_INT, 6, NULL);
+  detail1 = gst_missing_decoder_installer_detail_new (caps);
+  fail_unless (detail1 != NULL);
+  fail_unless (g_str_has_prefix (detail1, "gstreamer|0.11|"));
+  fail_unless (g_str_has_suffix (detail1,
+          "|decoder-audio/x-spiffy, spiffyversion=(int)2"));
+  msg = gst_missing_decoder_message_new (el, caps);
+  fail_unless (msg != NULL);
+  detail2 = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (detail2 != NULL);
+  gst_message_unref (msg);
+  gst_caps_unref (caps);
+  fail_unless_equals_string (detail1, detail2);
+  g_free (detail1);
+  g_free (detail2);
+
+  /* encoder */
+  caps = gst_caps_new_simple ("audio/x-spiffy", "spiffyversion", G_TYPE_INT,
+      2, "channels", G_TYPE_INT, 6, NULL);
+  detail1 = gst_missing_encoder_installer_detail_new (caps);
+  fail_unless (g_str_has_prefix (detail1, "gstreamer|0.11|"));
+  fail_unless (g_str_has_suffix (detail1,
+          "|encoder-audio/x-spiffy, spiffyversion=(int)2"));
+  fail_unless (detail1 != NULL);
+  msg = gst_missing_encoder_message_new (el, caps);
+  fail_unless (msg != NULL);
+  detail2 = gst_missing_plugin_message_get_installer_detail (msg);
+  fail_unless (detail2 != NULL);
+  gst_message_unref (msg);
+  gst_caps_unref (caps);
+  fail_unless_equals_string (detail1, detail2);
+  g_free (detail1);
+  g_free (detail2);
+
+  gst_object_unref (el);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_pb_utils_versions)
+{
+  gchar *s;
+  guint maj, min, mic, nano;
+
+  gst_plugins_base_version (NULL, NULL, NULL, NULL);
+  gst_plugins_base_version (&maj, &min, &mic, &nano);
+  fail_unless_equals_int (maj, GST_PLUGINS_BASE_VERSION_MAJOR);
+  fail_unless_equals_int (min, GST_PLUGINS_BASE_VERSION_MINOR);
+  fail_unless_equals_int (mic, GST_PLUGINS_BASE_VERSION_MICRO);
+  fail_unless_equals_int (nano, GST_PLUGINS_BASE_VERSION_NANO);
+
+  s = gst_plugins_base_version_string ();
+  if (GST_PLUGINS_BASE_VERSION_NANO == 0) {
+    fail_if (strstr (s, "GIT") || strstr (s, "git") || strstr (s, "prerel"));
+  }
+  if (GST_PLUGINS_BASE_VERSION_NANO == 1) {
+    fail_unless (strstr (s, "GIT") || strstr (s, "git"));
+  }
+  if (GST_PLUGINS_BASE_VERSION_NANO >= 2) {
+    fail_unless (strstr (s, "Prerelease") || strstr (s, "prerelease"));
+  }
+  g_free (s);
+}
+
+GST_END_TEST;
+
+static Suite *
+libgstpbutils_suite (void)
+{
+  Suite *s = suite_create ("pbutils library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_pb_utils_init);
+  tcase_add_test (tc_chain, test_pb_utils_post_missing_messages);
+  tcase_add_test (tc_chain, test_pb_utils_taglist_add_codec_info);
+  tcase_add_test (tc_chain, test_pb_utils_get_codec_description);
+  tcase_add_test (tc_chain, test_pb_utils_install_plugins);
+  tcase_add_test (tc_chain, test_pb_utils_installer_details);
+  tcase_add_test (tc_chain, test_pb_utils_versions);
+  return s;
+}
+
+GST_CHECK_MAIN (libgstpbutils);
diff --git a/tests/check/libs/profile.c b/tests/check/libs/profile.c
new file mode 100644
index 0000000..a040962
--- /dev/null
+++ b/tests/check/libs/profile.c
@@ -0,0 +1,627 @@
+/* GStreamer unit test for gstprofile
+ *
+ * Copyright (C) <2009> Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* #include <fcntl.h> */
+#include <unistd.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gst/check/gstcheck.h>
+
+#include <gst/pbutils/encoding-profile.h>
+#include <gst/pbutils/encoding-target.h>
+
+#define CHECK_PROFILE(profile, name, description, format, preset, presence, restriction) \
+  {									\
+  fail_if(profile == NULL);						\
+  fail_unless_equals_string (gst_encoding_profile_get_name (profile), name); \
+  fail_unless_equals_string (gst_encoding_profile_get_description (profile), description); \
+  fail_unless (gst_caps_is_equal (gst_encoding_profile_get_format (profile), format)); \
+  fail_unless_equals_string (gst_encoding_profile_get_preset (profile), preset); \
+  fail_unless_equals_int (gst_encoding_profile_get_presence (profile), presence); \
+  fail_unless (gst_caps_is_equal (gst_encoding_profile_get_restriction (profile), restriction)); \
+  }
+
+GST_START_TEST (test_profile_creation)
+{
+  GstEncodingProfile *encprof;
+  GstEncodingAudioProfile *audioprof;
+  GstEncodingVideoProfile *videoprof;
+  GstCaps *ogg, *vorbis, *theora;
+  GstCaps *test1, *test2;
+
+  ogg = gst_caps_new_simple ("application/ogg", NULL);
+  vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
+  theora = gst_caps_new_simple ("video/x-theora", NULL);
+
+  encprof = (GstEncodingProfile *) gst_encoding_container_profile_new ((gchar *)
+      "ogg-theora-vorbis", "dumb-profile", ogg, (gchar *) "dumb-preset");
+  CHECK_PROFILE (encprof, "ogg-theora-vorbis", "dumb-profile", ogg,
+      "dumb-preset", 0, NULL);
+
+  audioprof = gst_encoding_audio_profile_new (vorbis, (gchar *) "HQ", NULL, 0);
+  CHECK_PROFILE ((GstEncodingProfile *) audioprof, NULL, NULL, vorbis, "HQ", 0,
+      NULL);
+
+  videoprof = gst_encoding_video_profile_new (theora, (gchar *) "HQ", NULL, 0);
+  CHECK_PROFILE ((GstEncodingProfile *) videoprof, NULL, NULL, theora, "HQ",
+      0, NULL);
+
+  fail_unless (gst_encoding_container_profile_add_profile (
+          (GstEncodingContainerProfile *) encprof,
+          (GstEncodingProfile *) audioprof));
+  fail_unless (gst_encoding_container_profile_add_profile (
+          (GstEncodingContainerProfile *) encprof,
+          (GstEncodingProfile *) videoprof));
+
+  /* Test caps */
+  test1 = gst_caps_from_string ("video/x-theora; audio/x-vorbis");
+  test2 = gst_encoding_profile_get_input_caps (encprof);
+  fail_unless (gst_caps_is_equal (test1, test2));
+  gst_caps_unref (test1);
+  gst_caps_unref (test2);
+
+  gst_encoding_profile_unref (encprof);
+  gst_caps_unref (ogg);
+  gst_caps_unref (theora);
+  gst_caps_unref (vorbis);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_profile_input_caps)
+{
+  GstEncodingProfile *sprof;
+  GstCaps *vorbis;
+  GstCaps *out, *restriction, *test1;
+
+  vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
+
+  /* Simple case, no restriction */
+  sprof = (GstEncodingProfile *)
+      gst_encoding_audio_profile_new (vorbis, NULL, NULL, 0);
+  fail_if (sprof == NULL);
+
+  out = gst_encoding_profile_get_input_caps (sprof);
+  fail_if (out == NULL);
+  fail_unless (gst_caps_is_equal (out, vorbis));
+  gst_caps_unref (out);
+  gst_encoding_profile_unref (sprof);
+
+  /* One simple restriction */
+  restriction = gst_caps_from_string ("audio/x-raw,channels=2,rate=44100");
+  test1 = gst_caps_from_string ("audio/x-vorbis,channels=2,rate=44100");
+  fail_if (restriction == NULL);
+
+  sprof = (GstEncodingProfile *)
+      gst_encoding_audio_profile_new (vorbis, NULL, restriction, 0);
+  fail_if (sprof == NULL);
+
+  out = gst_encoding_profile_get_input_caps (sprof);
+  fail_if (out == NULL);
+  GST_DEBUG ("got caps %" GST_PTR_FORMAT, out);
+  fail_unless (gst_caps_is_equal (out, test1));
+  gst_caps_unref (out);
+  gst_caps_unref (restriction);
+  gst_caps_unref (test1);
+  gst_encoding_profile_unref (sprof);
+
+  gst_caps_unref (vorbis);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_target_naming)
+{
+  GstEncodingTarget *target;
+
+  gst_debug_set_threshold_for_name ("default", GST_LEVEL_NONE);
+
+  /* NULL values */
+  ASSERT_CRITICAL (target = gst_encoding_target_new (NULL, NULL, NULL, NULL));
+  fail_if (target != NULL);
+  ASSERT_CRITICAL (target =
+      gst_encoding_target_new ("donkey", NULL, NULL, NULL));
+  fail_if (target != NULL);
+  ASSERT_CRITICAL (target =
+      gst_encoding_target_new (NULL, "donkey", NULL, NULL));
+  fail_if (target != NULL);
+  ASSERT_CRITICAL (target =
+      gst_encoding_target_new (NULL, NULL, "donkey", NULL));
+  fail_if (target != NULL);
+
+  /* Name and Category validation */
+
+  /* empty non-NULL strings */
+  fail_if (gst_encoding_target_new ("", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "", "description", NULL) != NULL);
+
+  /* don't start with a lower case ASCII character */
+  fail_if (gst_encoding_target_new ("A", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("3", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("-", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("!", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new (" ", "valid", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "A", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "3", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "-", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "!", "description", NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", " ", "description", NULL) != NULL);
+
+  /* Starting with anything else is valid */
+  target = gst_encoding_target_new ("a", "valid", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+  target = gst_encoding_target_new ("z", "valid", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+  target = gst_encoding_target_new ("valid", "a", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+  target = gst_encoding_target_new ("valid", "z", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+
+  /* only inner valid characters are lower-case ASCII letters *OR* digits *OR* hyphens */
+  fail_if (gst_encoding_target_new ("aA", "valid", "description",
+          NULL) != NULL);
+  fail_if (gst_encoding_target_new ("a!", "valid", "description",
+          NULL) != NULL);
+  fail_if (gst_encoding_target_new ("space donkeys", "valid", "description",
+          NULL) != NULL);
+  fail_if (gst_encoding_target_new ("howaboutùnicode", "valid", "description",
+          NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "aA", "description",
+          NULL) != NULL);
+  fail_if (gst_encoding_target_new ("valid", "a!", "description",
+          NULL) != NULL);
+
+  target =
+      gst_encoding_target_new ("donkey-4-ever", "valid", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+  target =
+      gst_encoding_target_new ("valid", "donkey-4-ever", "description", NULL);
+  fail_if (target == NULL);
+  gst_encoding_target_unref (target);
+
+}
+
+GST_END_TEST;
+
+static GstEncodingTarget *
+create_saveload_target (const gchar * targetname)
+{
+  GstEncodingTarget *target;
+  GstEncodingProfile *profile, *sprof;
+  GstCaps *caps, *caps2;
+
+  GST_DEBUG ("Creating target");
+
+  target = gst_encoding_target_new (targetname, "herding",
+      "Plenty of pony glitter profiles", NULL);
+  caps = gst_caps_from_string ("animal/x-pony");
+  profile =
+      (GstEncodingProfile *) gst_encoding_container_profile_new ("pony",
+      "I don't want a description !", caps, NULL);
+  gst_caps_unref (caps);
+  gst_encoding_target_add_profile (target, profile);
+
+  caps = gst_caps_from_string ("audio/x-pony-song,pretty=True");
+  caps2 = gst_caps_from_string ("audio/x-raw,channels=1,rate=44100");
+  sprof =
+      (GstEncodingProfile *) gst_encoding_audio_profile_new (caps, NULL, caps2,
+      1);
+  gst_encoding_container_profile_add_profile ((GstEncodingContainerProfile *)
+      profile, sprof);
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  caps = gst_caps_from_string ("video/x-glitter,sparkling=True");
+  caps2 =
+      gst_caps_from_string ("video/x-raw,width=640,height=480,framerate=15/1");
+  sprof = (GstEncodingProfile *)
+      gst_encoding_video_profile_new (caps, "seriously glittery", caps2, 0);
+  gst_encoding_video_profile_set_variableframerate ((GstEncodingVideoProfile *)
+      sprof, TRUE);
+  gst_encoding_container_profile_add_profile ((GstEncodingContainerProfile *)
+      profile, sprof);
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  return target;
+}
+
+GST_START_TEST (test_target_profile)
+{
+  GstEncodingTarget *target;
+  GstEncodingProfile *prof;
+
+  target = create_saveload_target ("myponytarget");
+
+  /* NULL isn't a valid profile name */
+  ASSERT_CRITICAL (gst_encoding_target_get_profile (target, NULL));
+
+  /* try finding a profile that doesn't exist */
+  fail_if (gst_encoding_target_get_profile (target,
+          "no-really-does-not-exist"));
+
+  /* try finding a profile that exists */
+  prof = gst_encoding_target_get_profile (target, "pony");
+  fail_if (prof == NULL);
+
+  gst_encoding_profile_unref (prof);
+  gst_encoding_target_unref (target);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_saving_profile)
+{
+  GstEncodingTarget *orig, *loaded = NULL;
+  GstEncodingProfile *proforig, *profloaded;
+  gchar *profile_file_name;
+
+  /* Create and store a target */
+  orig = create_saveload_target ("myponytarget2");
+  GST_DEBUG ("Saving target 'myponytarget2'");
+  fail_unless (gst_encoding_target_save (orig, NULL));
+
+  /* Check we can load it */
+  profile_file_name =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", "myponytarget2.gep", NULL);
+  GST_DEBUG ("Loading target from '%s'", profile_file_name);
+  loaded = gst_encoding_target_load_from_file (profile_file_name, NULL);
+  fail_unless (loaded != NULL);
+  g_free (profile_file_name);
+
+  GST_DEBUG ("Checking targets are equal");
+  /* Check targets are identical */
+  /* 1. at the target level */
+  fail_unless_equals_string (gst_encoding_target_get_name (orig),
+      gst_encoding_target_get_name (loaded));
+  fail_unless_equals_string (gst_encoding_target_get_category (orig),
+      gst_encoding_target_get_category (loaded));
+  fail_unless_equals_string (gst_encoding_target_get_description (orig),
+      gst_encoding_target_get_description (loaded));
+  fail_unless_equals_int (g_list_length ((GList *)
+          gst_encoding_target_get_profiles (loaded)), 1);
+
+  /* 2. at the profile level */
+  profloaded =
+      (GstEncodingProfile *) gst_encoding_target_get_profiles (loaded)->data;
+  proforig =
+      (GstEncodingProfile *) gst_encoding_target_get_profiles (orig)->data;
+
+  fail_unless_equals_int (G_TYPE_FROM_INSTANCE (profloaded),
+      G_TYPE_FROM_INSTANCE (proforig));
+  GST_DEBUG ("Comparing loaded:%p to original:%p", profloaded, proforig);
+  fail_unless (gst_encoding_profile_is_equal (profloaded, proforig));
+
+  gst_encoding_target_unref (orig);
+  gst_encoding_target_unref (loaded);
+}
+
+GST_END_TEST;
+
+static void
+test_individual_target (GstEncodingTarget * target)
+{
+  GstEncodingProfile *prof;
+  GstCaps *tmpcaps, *tmpcaps2;
+  GstEncodingProfile *sprof1, *sprof2;
+
+  GST_DEBUG ("Checking the target properties");
+  /* Check the target  */
+  fail_unless_equals_string (gst_encoding_target_get_name (target),
+      "myponytarget");
+  fail_unless_equals_string (gst_encoding_target_get_category (target),
+      "herding");
+  fail_unless_equals_string (gst_encoding_target_get_description (target),
+      "Plenty of pony glitter profiles");
+
+  GST_DEBUG ("Checking the number of profiles the target contains");
+  fail_unless_equals_int (g_list_length ((GList *)
+          gst_encoding_target_get_profiles (target)), 1);
+
+
+  GST_DEBUG ("Checking the container profile");
+  /* Check the profile */
+  prof = (GstEncodingProfile *) gst_encoding_target_get_profiles (target)->data;
+  tmpcaps = gst_caps_from_string ("animal/x-pony");
+  CHECK_PROFILE (prof, "pony", "I don't want a description !", tmpcaps, NULL, 0,
+      0);
+  gst_caps_unref (tmpcaps);
+
+  GST_DEBUG ("Checking the container profile has 2 stream profiles");
+  /* Check the stream profiles */
+  fail_unless_equals_int (g_list_length ((GList *)
+          gst_encoding_container_profile_get_profiles (
+              (GstEncodingContainerProfile *) prof)), 2);
+
+  GST_DEBUG ("Checking the container profile has the audio/x-pony-song stream");
+  tmpcaps = gst_caps_from_string ("audio/x-pony-song,pretty=True");
+  tmpcaps2 = gst_caps_from_string ("audio/x-raw,channels=1,rate=44100");
+  sprof1 =
+      (GstEncodingProfile *) gst_encoding_audio_profile_new (tmpcaps, NULL,
+      tmpcaps2, 1);
+  fail_unless (gst_encoding_container_profile_contains_profile (
+          (GstEncodingContainerProfile *) prof, sprof1));
+  gst_encoding_profile_unref (sprof1);
+  gst_caps_unref (tmpcaps);
+  gst_caps_unref (tmpcaps2);
+
+  GST_DEBUG ("Checking the container profile has the video//x-glitter stream");
+  tmpcaps = gst_caps_from_string ("video/x-glitter,sparkling=True");
+  tmpcaps2 =
+      gst_caps_from_string ("video/x-raw,width=640,height=480,framerate=15/1");
+  sprof2 = (GstEncodingProfile *)
+      gst_encoding_video_profile_new (tmpcaps, "seriously glittery", tmpcaps2,
+      0);
+  gst_encoding_video_profile_set_variableframerate ((GstEncodingVideoProfile *)
+      sprof2, TRUE);
+  fail_unless (gst_encoding_container_profile_contains_profile (
+          (GstEncodingContainerProfile *) prof, sprof2));
+  gst_encoding_profile_unref (sprof2);
+  gst_caps_unref (tmpcaps);
+  gst_caps_unref (tmpcaps2);
+}
+
+GST_START_TEST (test_loading_profile)
+{
+  GstEncodingTarget *target;
+  gchar *profile_file_name;
+  GstEncodingProfile *profile;
+  GstCaps *tmpcaps;
+  GValue strvalue = { 0, };
+  GValue objectvalue = { 0, };
+
+  gst_debug_set_threshold_for_name ("default", GST_LEVEL_NONE);
+
+  /* Test loading using short method and all arguments */
+  target = gst_encoding_target_load ("myponytarget", "herding", NULL);
+  fail_unless (target != NULL);
+  test_individual_target (target);
+  gst_encoding_target_unref (target);
+
+  /* Test loading using short method and no category */
+  target = gst_encoding_target_load ("myponytarget", NULL, NULL);
+  fail_unless (target != NULL);
+  test_individual_target (target);
+  gst_encoding_target_unref (target);
+
+  /* Test loading using fully specified path */
+  profile_file_name =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", "myponytarget.gep", NULL);
+
+  GST_DEBUG ("Loading target from '%s'", profile_file_name);
+  target = gst_encoding_target_load_from_file (profile_file_name, NULL);
+  g_free (profile_file_name);
+  fail_unless (target != NULL);
+  test_individual_target (target);
+  gst_encoding_target_unref (target);
+
+  /* Test getting the profiles directly
+   * First without category */
+  profile = gst_encoding_profile_find ("myponytarget", "pony", NULL);
+  fail_unless (profile != NULL);
+  tmpcaps = gst_caps_from_string ("animal/x-pony");
+  CHECK_PROFILE (profile, "pony", "I don't want a description !", tmpcaps, NULL,
+      0, 0);
+  gst_caps_unref (tmpcaps);
+  gst_encoding_profile_unref (profile);
+
+  /* Then with a specific category */
+  profile = gst_encoding_profile_find ("myponytarget", "pony", "herding");
+  fail_unless (profile != NULL);
+  tmpcaps = gst_caps_from_string ("animal/x-pony");
+  CHECK_PROFILE (profile, "pony", "I don't want a description !", tmpcaps, NULL,
+      0, 0);
+  gst_caps_unref (tmpcaps);
+  gst_encoding_profile_unref (profile);
+
+  /* For my next trick, I will need the assistance of a GValue */
+  g_value_init (&strvalue, G_TYPE_STRING);
+  g_value_init (&objectvalue, GST_TYPE_ENCODING_PROFILE);
+  g_value_set_static_string (&strvalue, "myponytarget/pony");
+  fail_unless (g_value_transform (&strvalue, &objectvalue));
+  profile = (GstEncodingProfile *) g_value_dup_object (&objectvalue);
+  fail_if (profile == NULL);
+  g_value_unset (&strvalue);
+  g_value_unset (&objectvalue);
+  tmpcaps = gst_caps_from_string ("animal/x-pony");
+  CHECK_PROFILE (profile, "pony", "I don't want a description !", tmpcaps, NULL,
+      0, 0);
+  gst_caps_unref (tmpcaps);
+  gst_encoding_profile_unref (profile);
+
+  /* Let's go crazy for error detection */
+  fail_if (gst_encoding_profile_find ("myponytarget", "whales", NULL));
+  fail_if (gst_encoding_profile_find ("myponytarget", "whales", "herding"));
+  fail_if (gst_encoding_profile_find ("myponytarget", "", NULL));
+  fail_if (gst_encoding_profile_find ("", "pony", NULL));
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_target_list)
+{
+  GList *categories;
+  GList *targets;
+  GList *tmp;
+
+  /* Make sure we get our test category in the available categories */
+  categories = gst_encoding_list_available_categories ();
+  fail_if (categories == NULL);
+  fail_if (g_list_find_custom (categories, "herding",
+          (GCompareFunc) g_strcmp0) == NULL);
+  g_list_foreach (categories, (GFunc) g_free, NULL);
+  g_list_free (categories);
+
+  /* Try getting all available targets with a specified category */
+  targets = gst_encoding_list_all_targets ("herding");
+  fail_if (targets == NULL);
+  for (tmp = targets; tmp; tmp = tmp->next) {
+    GstEncodingTarget *target = (GstEncodingTarget *) tmp->data;
+    if (!g_strcmp0 (gst_encoding_target_get_name (target), "myponytarget"))
+      break;
+  }
+  /* If tmp is NULL, it means we iterated the whole list without finding
+   * our target */
+  fail_if (tmp == NULL);
+  g_list_foreach (targets, (GFunc) g_object_unref, NULL);
+  g_list_free (targets);
+
+  /* Try getting all available targets without a specified category */
+  targets = gst_encoding_list_all_targets (NULL);
+  fail_if (targets == NULL);
+  for (tmp = targets; tmp; tmp = tmp->next) {
+    GstEncodingTarget *target = (GstEncodingTarget *) tmp->data;
+    if (!g_strcmp0 (gst_encoding_target_get_name (target), "myponytarget"))
+      break;
+  }
+  /* If tmp is NULL, it means we iterated the whole list without finding
+   * our target */
+  fail_if (tmp == NULL);
+  g_list_foreach (targets, (GFunc) g_object_unref, NULL);
+  g_list_free (targets);
+}
+
+GST_END_TEST;
+
+
+static const gchar *profile_string = "\
+[GStreamer Encoding Target]\n\
+name=myponytarget\n\
+category=herding\n\
+description=Plenty of pony glitter profiles\n\
+\n\
+[profile-pony1]\n\
+name=pony\n\
+type=container\n\
+description=I don't want a description !\n\
+format=animal/x-pony\n\
+\n\
+[streamprofile-pony11]\n\
+parent=pony\n\
+type=audio\n\
+format=audio/x-pony-song,pretty=True\n\
+restriction=audio/x-raw,channels=1,rate=44100\n\
+presence=1\n\
+\n\
+[streamprofile-pony12]\n\
+parent=pony\n\
+type=video\n\
+preset=seriously glittery\n\
+format=video/x-glitter,sparkling=True\n\
+restriction=video/x-raw,width=640,height=480,framerate=15/1\n\
+presence=0\n\
+variableframerate=true\n\
+";
+
+static void
+remove_profile_file (void)
+{
+  gchar *profile_file_name;
+
+  profile_file_name =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", "myponytarget.gep", NULL);
+  g_unlink (profile_file_name);
+  g_free (profile_file_name);
+  profile_file_name =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", "myponytarget2.gep", NULL);
+  g_unlink (profile_file_name);
+  g_free (profile_file_name);
+}
+
+static void
+create_profile_file (void)
+{
+  gchar *profile_file_name;
+  gchar *profile_dir;
+  GError *error = NULL;
+
+  profile_dir =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", NULL);
+  profile_file_name =
+      g_build_filename (g_get_user_data_dir (), "gstreamer-0.11",
+      "encoding-profiles", "herding", "myponytarget.gep", NULL);
+  g_mkdir_with_parents (profile_dir, S_IRUSR | S_IWUSR | S_IXUSR);
+  if (!g_file_set_contents (profile_file_name, profile_string,
+          strlen (profile_string), &error))
+    GST_WARNING ("Couldn't write contents to file : %s", error->message);
+  g_free (profile_dir);
+  g_free (profile_file_name);
+}
+
+static void
+test_setup (void)
+{
+  create_profile_file ();
+}
+
+static void
+test_teardown (void)
+{
+  remove_profile_file ();
+}
+
+
+static Suite *
+profile_suite (void)
+{
+  Suite *s = suite_create ("profile support library");
+  TCase *tc_chain = tcase_create ("general");
+  gboolean can_write;
+  gchar *gst_dir;
+
+  /* cehck if we can create profiles */
+  gst_dir = g_build_filename (g_get_user_data_dir (), "gstreamer-0.11", NULL);
+  can_write = (g_access (gst_dir, R_OK | W_OK | X_OK) == 0);
+  g_free (gst_dir);
+
+  suite_add_tcase (s, tc_chain);
+
+  tcase_add_test (tc_chain, test_profile_creation);
+  tcase_add_test (tc_chain, test_profile_input_caps);
+  tcase_add_test (tc_chain, test_target_naming);
+  tcase_add_test (tc_chain, test_target_profile);
+  if (can_write) {
+    tcase_add_test (tc_chain, test_loading_profile);
+    tcase_add_test (tc_chain, test_saving_profile);
+    tcase_add_test (tc_chain, test_target_list);
+  }
+
+  tcase_add_unchecked_fixture (tc_chain, test_setup, test_teardown);
+
+  return s;
+}
+
+GST_CHECK_MAIN (profile);
diff --git a/tests/check/libs/rtp.c b/tests/check/libs/rtp.c
new file mode 100644
index 0000000..16603be
--- /dev/null
+++ b/tests/check/libs/rtp.c
@@ -0,0 +1,807 @@
+/* GStreamer unit tests for the RTP support library
+ *
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/rtp/gstrtpbuffer.h>
+#include <gst/rtp/gstrtcpbuffer.h>
+#include <string.h>
+
+#define RTP_HEADER_LEN 12
+
+GST_START_TEST (test_rtp_buffer)
+{
+  GstBuffer *buf;
+  guint8 *data;
+  gsize size;
+  GstRTPBuffer rtp = { NULL, };
+
+  /* check GstRTPHeader structure alignment and packing */
+  buf = gst_rtp_buffer_new_allocate (16, 4, 0);
+  fail_unless (buf != NULL);
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  fail_unless_equals_int (size, RTP_HEADER_LEN + 16 + 4);
+
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  /* check defaults */
+  fail_unless_equals_int (gst_rtp_buffer_get_version (&rtp), 2);
+  fail_unless (gst_rtp_buffer_get_padding (&rtp) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == FALSE);
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc_count (&rtp), 0);
+  fail_unless (gst_rtp_buffer_get_marker (&rtp) == FALSE);
+  fail_unless (gst_rtp_buffer_get_payload_type (&rtp) == 0);
+  fail_unless_equals_int (GST_READ_UINT16_BE (data), 0x8000);
+
+  /* check version in bitfield */
+  gst_rtp_buffer_set_version (&rtp, 3);
+  fail_unless_equals_int (gst_rtp_buffer_get_version (&rtp), 3);
+  fail_unless_equals_int ((data[0] & 0xC0) >> 6, 3);
+  gst_rtp_buffer_set_version (&rtp, 2);
+  fail_unless_equals_int (gst_rtp_buffer_get_version (&rtp), 2);
+  fail_unless_equals_int ((data[0] & 0xC0) >> 6, 2);
+
+  /* check padding bit */
+  gst_rtp_buffer_set_padding (&rtp, TRUE);
+  fail_unless (gst_rtp_buffer_get_padding (&rtp) == TRUE);
+  fail_unless_equals_int ((data[0] & 0x20) >> 5, 1);
+  gst_rtp_buffer_set_padding (&rtp, FALSE);
+  fail_unless (gst_rtp_buffer_get_padding (&rtp) == FALSE);
+  fail_unless_equals_int ((data[0] & 0x20) >> 5, 0);
+
+  /* check marker bit */
+  gst_rtp_buffer_set_marker (&rtp, TRUE);
+  fail_unless (gst_rtp_buffer_get_marker (&rtp) == TRUE);
+  fail_unless_equals_int ((data[1] & 0x80) >> 7, 1);
+  gst_rtp_buffer_set_marker (&rtp, FALSE);
+  fail_unless (gst_rtp_buffer_get_marker (&rtp) == FALSE);
+  fail_unless_equals_int ((data[1] & 0x80) >> 7, 0);
+
+  /* check sequence offset */
+  gst_rtp_buffer_set_seq (&rtp, 0xF2C9);
+  fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), 0xF2C9);
+  fail_unless_equals_int (GST_READ_UINT16_BE (data + 2), 0xF2C9);
+  gst_rtp_buffer_set_seq (&rtp, 0);
+  fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), 0);
+  fail_unless_equals_int (GST_READ_UINT16_BE (data + 2), 0);
+
+  /* check timestamp offset */
+  gst_rtp_buffer_set_timestamp (&rtp, 432191);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 4), 432191);
+  fail_unless_equals_int (gst_rtp_buffer_get_timestamp (&rtp), 432191);
+  gst_rtp_buffer_set_timestamp (&rtp, 0);
+  fail_unless_equals_int (gst_rtp_buffer_get_timestamp (&rtp), 0);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 4), 0);
+
+  /* check ssrc offset */
+  gst_rtp_buffer_set_ssrc (&rtp, 0xf04043C2);
+  fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), (gint) 0xf04043c2);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 4 + 4), (gint) 0xf04043c2);
+  gst_rtp_buffer_set_ssrc (&rtp, 0);
+  fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), 0);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 4 + 4), 0);
+
+  /* check csrc bits */
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc_count (&rtp), 0);
+  ASSERT_CRITICAL (gst_rtp_buffer_get_csrc (&rtp, 0));
+  fail_unless_equals_int (data[0] & 0xf, 0);
+
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unmap (buf, data, size);
+  gst_buffer_unref (buf);
+
+  /* and again, this time with CSRCs */
+  buf = gst_rtp_buffer_new_allocate (16, 4, 3);
+  fail_unless (buf != NULL);
+  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+  fail_unless_equals_int (size, RTP_HEADER_LEN + 16 + 4 + 4 * 3);
+
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc_count (&rtp), 3);
+  ASSERT_CRITICAL (gst_rtp_buffer_get_csrc (&rtp, 3));
+  fail_unless_equals_int (data[0] & 0xf, 3);
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc (&rtp, 0), 0);
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc (&rtp, 1), 0);
+  fail_unless_equals_int (gst_rtp_buffer_get_csrc (&rtp, 2), 0);
+
+  data += RTP_HEADER_LEN;       /* skip the other header stuff */
+  gst_rtp_buffer_set_csrc (&rtp, 0, 0xf7c0);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 0 * 4), 0xf7c0);
+  gst_rtp_buffer_set_csrc (&rtp, 1, 0xf7c1);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 1 * 4), 0xf7c1);
+  gst_rtp_buffer_set_csrc (&rtp, 2, 0xf7c2);
+  fail_unless_equals_int (GST_READ_UINT32_BE (data + 2 * 4), 0xf7c2);
+  ASSERT_CRITICAL (gst_rtp_buffer_set_csrc (&rtp, 3, 0xf123));
+
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unmap (buf, data, size);
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtp_buffer_validate_corrupt)
+{
+  GstBuffer *buf;
+  guint8 corrupt_rtp_packet[58] = {
+    0x90, 0x7a, 0xbf, 0x28, 0x3a, 0x8a, 0x0a, 0xf4, 0x69, 0x6b, 0x76, 0xc0,
+    0x21, 0xe0, 0xe0, 0x60, 0x81, 0x10, 0x84, 0x30, 0x21, 0x52, 0x06, 0xc2,
+    0xb8, 0x30, 0x10, 0x4c, 0x08, 0x62, 0x67, 0xc2, 0x6e, 0x1a, 0x53, 0x3f,
+    0xaf, 0xd6, 0x1b, 0x29, 0x40, 0xe0, 0xa5, 0x83, 0x01, 0x4b, 0x04, 0x02,
+    0xb0, 0x97, 0x63, 0x08, 0x10, 0x4b, 0x43, 0x85, 0x37, 0x2c
+  };
+
+  buf = gst_buffer_new_and_alloc (sizeof (corrupt_rtp_packet));
+  gst_buffer_fill (buf, 0, corrupt_rtp_packet, sizeof (corrupt_rtp_packet));
+  fail_if (gst_rtp_buffer_validate (buf));
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+#if 0
+GST_START_TEST (test_rtp_buffer_list)
+{
+  GstBuffer *rtp_header;
+  GstBuffer *rtp_payload;
+  GstBufferList *list = NULL;
+  GstBufferListIterator *it;
+  guint i;
+
+  list = gst_buffer_list_new ();
+  it = gst_buffer_list_iterate (list);
+
+  /* Creating a list of two RTP packages */
+
+  /* Create first group to hold the rtp header and the payload */
+  gst_buffer_list_iterator_add_group (it);
+  rtp_header = gst_rtp_buffer_new_allocate (0, 0, 0);
+  gst_buffer_list_iterator_add (it, rtp_header);
+  rtp_payload = gst_buffer_new_and_alloc (42);
+  gst_buffer_list_iterator_add (it, rtp_payload);
+
+  /* Create second group to hold an rtp header and a payload */
+  gst_buffer_list_iterator_add_group (it);
+  rtp_header = gst_rtp_buffer_new_allocate (0, 0, 0);
+  gst_buffer_list_iterator_add (it, rtp_header);
+  rtp_payload = gst_buffer_new_and_alloc (42);
+  gst_buffer_list_iterator_add (it, rtp_payload);
+
+  gst_buffer_list_iterator_free (it);
+
+  /* Test SEQ number */
+  i = gst_rtp_buffer_list_set_seq (list, 1024);
+  fail_if (1026 != i);
+  fail_if (!gst_rtp_buffer_list_validate (list));
+
+  /* Timestamp */
+  gst_rtp_buffer_list_set_timestamp (list, 432191);
+  fail_unless_equals_int (gst_rtp_buffer_list_get_timestamp (list), 432191);
+
+  /* SSRC */
+  gst_rtp_buffer_list_set_ssrc (list, 0xf04043C2);
+  fail_unless_equals_int (gst_rtp_buffer_list_get_ssrc (list),
+      (gint) 0xf04043c2);
+
+  /* Payload type */
+  gst_rtp_buffer_list_set_payload_type (list, 127);
+  fail_unless_equals_int (gst_rtp_buffer_list_get_payload_type (list), 127);
+
+  gst_buffer_list_unref (list);
+}
+
+GST_END_TEST;
+#endif
+
+GST_START_TEST (test_rtp_buffer_set_extension_data)
+{
+  GstBuffer *buf;
+  guint8 *data;
+  guint16 bits;
+  guint size;
+  guint8 misc_data[4] = { 1, 2, 3, 4 };
+  gpointer pointer;
+  guint8 appbits;
+  gsize bsize;
+  GstRTPBuffer rtp = { NULL, };
+
+  /* check GstRTPHeader structure alignment and packing */
+  buf = gst_rtp_buffer_new_allocate (4, 0, 0);
+  data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  /* should be impossible to set the extension data */
+  ASSERT_WARNING (fail_unless (gst_rtp_buffer_set_extension_data (&rtp, 0,
+              4) == FALSE));
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == FALSE);
+
+  /* should be possible to set the extension data */
+  fail_unless (gst_rtp_buffer_set_extension_data (&rtp, 270, 0) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == TRUE);
+  gst_rtp_buffer_get_extension_data (&rtp, &bits, &pointer, &size);
+  fail_unless (bits == 270);
+  fail_unless (size == 0);
+  fail_unless (pointer == data + 16);
+  pointer = gst_rtp_buffer_get_payload (&rtp);
+  fail_unless (pointer == data + 16);
+
+  gst_buffer_unmap (buf, data, bsize);
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unref (buf);
+
+  buf = gst_rtp_buffer_new_allocate (20, 0, 0);
+  data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == FALSE);
+  fail_unless (gst_rtp_buffer_set_extension_data (&rtp, 333, 2) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == TRUE);
+  gst_rtp_buffer_get_extension_data (&rtp, &bits, &pointer, &size);
+  fail_unless (bits == 333);
+  fail_unless (size == 2);
+  fail_unless (pointer == data + 16);
+  pointer = gst_rtp_buffer_get_payload (&rtp);
+  fail_unless (pointer == data + 24);
+
+  gst_buffer_unmap (buf, data, bsize);
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unref (buf);
+
+  /* Test header extensions with a one byte header */
+  buf = gst_rtp_buffer_new_allocate (20, 0, 0);
+  data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == FALSE);
+
+  fail_unless (gst_rtp_buffer_add_extension_onebyte_header (&rtp, 5,
+          misc_data, 2) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_data (&rtp, &bits, &pointer,
+          &size));
+  fail_unless (bits == 0xBEDE);
+  fail_unless (size == 1);
+  data = (guint8 *) pointer;
+  fail_unless (data[0] == ((5 << 4) | 1));
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 2,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  fail_unless (gst_rtp_buffer_add_extension_onebyte_header (&rtp, 5,
+          misc_data, 4) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 2,
+          1, &pointer, &size) == FALSE);
+
+  fail_unless (gst_rtp_buffer_add_extension_onebyte_header (&rtp, 6,
+          misc_data, 2) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          3, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 2,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 6,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_onebyte_header (&rtp, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  gst_buffer_unmap (buf, data, bsize);
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unref (buf);
+
+  /* Test header extensions with a two bytes header */
+  buf = gst_rtp_buffer_new_allocate (20, 0, 0);
+  data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+  gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp);
+
+  fail_unless (gst_rtp_buffer_get_extension (&rtp) == FALSE);
+
+  fail_unless (gst_rtp_buffer_add_extension_twobytes_header (&rtp, 0, 5,
+          misc_data, 2) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_data (&rtp, &bits, &pointer,
+          &size));
+  fail_unless (bits == 0x100 << 4);
+  fail_unless (size == 1);
+  data = (guint8 *) pointer;
+  fail_unless (data[0] == 5);
+  fail_unless (data[1] == 2);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 2,
+          0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  fail_unless (gst_rtp_buffer_add_extension_twobytes_header (&rtp, 0, 5,
+          misc_data, 4) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 2,
+          0, &pointer, &size) == FALSE);
+
+  fail_unless (gst_rtp_buffer_add_extension_twobytes_header (&rtp, 0, 6,
+          misc_data, 2) == TRUE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 2,
+          0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 6,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_get_extension_twobytes_header (&rtp, &appbits, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  gst_buffer_unmap (buf, data, bsize);
+  gst_rtp_buffer_unmap (&rtp);
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+#if 0
+GST_START_TEST (test_rtp_buffer_list_set_extension)
+{
+  GstBufferList *list;
+  GstBuffer *buf;
+  guint8 *data;
+  guint16 bits;
+  guint size;
+  guint8 misc_data[4] = { 1, 2, 3, 4 };
+  gpointer pointer;
+  guint8 appbits;
+  GstBufferListIterator *it;
+
+  buf = gst_rtp_buffer_new_allocate (20, 0, 0);
+  list = gst_rtp_buffer_list_from_buffer (buf);
+  gst_buffer_unref (buf);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  buf = gst_buffer_list_iterator_next (it);
+  fail_unless (buf != NULL);
+  fail_unless (GST_BUFFER_SIZE (buf) == 12);
+  buf = gst_buffer_list_iterator_next (it);
+  fail_unless (buf != NULL);
+  fail_unless (GST_BUFFER_SIZE (buf) == 20);
+  gst_buffer_list_iterator_free (it);
+
+  /* Test header extensions with a one byte header */
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 2,
+          1, &pointer, &size) == FALSE);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_onebyte_header (it, 5,
+          misc_data, 2) == TRUE);
+  gst_buffer_list_iterator_free (it);
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  buf = gst_buffer_list_iterator_next (it);
+  fail_unless (gst_rtp_buffer_get_extension_data (buf, &bits, &pointer, &size));
+  fail_unless (bits == 0xBEDE);
+  fail_unless (size == 1);
+  data = (guint8 *) pointer;
+  fail_unless (data[0] == ((5 << 4) | 1));
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 2,
+          0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_onebyte_header (it, 5,
+          misc_data, 4) == TRUE);
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 2,
+          0, &pointer, &size) == FALSE);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_onebyte_header (it, 6,
+          misc_data, 2) == TRUE);
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 2,
+          0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 6,
+          1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_onebyte_header (list, 0, 5,
+          0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  gst_buffer_list_unref (list);
+
+
+  /* Test header extensions with a two bytes header */
+  buf = gst_rtp_buffer_new_allocate (20, 0, 0);
+  list = gst_rtp_buffer_list_from_buffer (buf);
+  gst_buffer_unref (buf);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_twobytes_header (it, 0, 5,
+          misc_data, 2) == TRUE);
+  gst_buffer_list_iterator_free (it);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  buf = gst_buffer_list_iterator_next (it);
+  fail_unless (gst_rtp_buffer_get_extension_data (buf, &bits, &pointer, &size));
+  fail_unless (bits == 0x100 << 4);
+  fail_unless (size == 1);
+  data = (guint8 *) pointer;
+  fail_unless (data[0] == 5);
+  fail_unless (data[1] == 2);
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 2, 0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_twobytes_header (it, 0, 5,
+          misc_data, 4) == TRUE);
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 2, 0, &pointer, &size) == FALSE);
+
+  it = gst_buffer_list_iterate (list);
+  fail_unless (gst_buffer_list_iterator_next_group (it));
+  fail_unless (gst_buffer_list_iterator_next (it) != NULL);
+  fail_unless (gst_rtp_buffer_list_add_extension_twobytes_header (it, 0, 6,
+          misc_data, 2) == TRUE);
+  gst_buffer_list_iterator_free (it);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 1, &pointer, &size) == TRUE);
+  fail_unless (size == 4);
+  fail_unless (memcmp (pointer, misc_data, 4) == 0);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 2, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 2, 0, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 6, 1, &pointer, &size) == FALSE);
+  fail_unless (gst_rtp_buffer_list_get_extension_twobytes_header (list, 0,
+          &appbits, 5, 0, &pointer, &size) == TRUE);
+  fail_unless (size == 2);
+  fail_unless (memcmp (pointer, misc_data, 2) == 0);
+
+  gst_buffer_list_unref (list);
+}
+
+GST_END_TEST;
+#endif
+
+GST_START_TEST (test_rtp_seqnum_compare)
+{
+#define ASSERT_COMP(a,b,c) fail_unless (gst_rtp_buffer_compare_seqnum ((guint16)a,(guint16)b) == c);
+  ASSERT_COMP (0xfffe, 0xfffd, -1);
+  ASSERT_COMP (0xffff, 0xfffe, -1);
+  ASSERT_COMP (0x0000, 0xffff, -1);
+  ASSERT_COMP (0x0001, 0x0000, -1);
+  ASSERT_COMP (0x0002, 0x0001, -1);
+
+  ASSERT_COMP (0xffff, 0xfffd, -2);
+  ASSERT_COMP (0x0000, 0xfffd, -3);
+  ASSERT_COMP (0x0001, 0xfffd, -4);
+  ASSERT_COMP (0x0002, 0xfffd, -5);
+
+  ASSERT_COMP (0x7ffe, 0x7ffd, -1);
+  ASSERT_COMP (0x7fff, 0x7ffe, -1);
+  ASSERT_COMP (0x8000, 0x7fff, -1);
+  ASSERT_COMP (0x8001, 0x8000, -1);
+  ASSERT_COMP (0x8002, 0x8001, -1);
+
+  ASSERT_COMP (0x7fff, 0x7ffd, -2);
+  ASSERT_COMP (0x8000, 0x7ffd, -3);
+  ASSERT_COMP (0x8001, 0x7ffd, -4);
+  ASSERT_COMP (0x8002, 0x7ffd, -5);
+
+  ASSERT_COMP (0x7ffd, 0xffff, -0x7ffe);
+  ASSERT_COMP (0x7ffe, 0x0000, -0x7ffe);
+  ASSERT_COMP (0x7fff, 0x0001, -0x7ffe);
+  ASSERT_COMP (0x7fff, 0x0000, -0x7fff);
+  ASSERT_COMP (0x8000, 0x0001, -0x7fff);
+  ASSERT_COMP (0x8001, 0x0002, -0x7fff);
+
+  ASSERT_COMP (0xfffd, 0x7ffe, -0x7fff);
+  ASSERT_COMP (0xfffe, 0x7fff, -0x7fff);
+  ASSERT_COMP (0xffff, 0x8000, -0x7fff);
+  ASSERT_COMP (0x0000, 0x8001, -0x7fff);
+  ASSERT_COMP (0x0001, 0x8002, -0x7fff);
+
+  ASSERT_COMP (0xfffe, 0x7ffe, -0x8000);
+  ASSERT_COMP (0xffff, 0x7fff, -0x8000);
+  ASSERT_COMP (0x0000, 0x8000, -0x8000);
+  ASSERT_COMP (0x0001, 0x8001, -0x8000);
+
+  ASSERT_COMP (0x7ffe, 0xfffe, -0x8000);
+  ASSERT_COMP (0x7fff, 0xffff, -0x8000);
+  ASSERT_COMP (0x8000, 0x0000, -0x8000);
+  ASSERT_COMP (0x8001, 0x0001, -0x8000);
+
+  ASSERT_COMP (0x0001, 0x0002, 1);
+  ASSERT_COMP (0x0000, 0x0001, 1);
+  ASSERT_COMP (0xffff, 0x0000, 1);
+  ASSERT_COMP (0xfffe, 0xffff, 1);
+  ASSERT_COMP (0xfffd, 0xfffe, 1);
+
+  ASSERT_COMP (0x0000, 0x0002, 2);
+  ASSERT_COMP (0xffff, 0x0002, 3);
+  ASSERT_COMP (0xfffe, 0x0002, 4);
+  ASSERT_COMP (0xfffd, 0x0002, 5);
+
+  ASSERT_COMP (0x8001, 0x8002, 1);
+  ASSERT_COMP (0x8000, 0x8001, 1);
+  ASSERT_COMP (0x7fff, 0x8000, 1);
+  ASSERT_COMP (0x7ffe, 0x7fff, 1);
+  ASSERT_COMP (0x7ffd, 0x7ffe, 1);
+
+  ASSERT_COMP (0x8000, 0x8002, 2);
+  ASSERT_COMP (0x7fff, 0x8002, 3);
+  ASSERT_COMP (0x7ffe, 0x8002, 4);
+  ASSERT_COMP (0x7ffd, 0x8002, 5);
+
+  ASSERT_COMP (0xfffe, 0x7ffd, 0x7fff);
+  ASSERT_COMP (0xffff, 0x7ffe, 0x7fff);
+  ASSERT_COMP (0x0000, 0x7fff, 0x7fff);
+  ASSERT_COMP (0x0001, 0x8000, 0x7fff);
+  ASSERT_COMP (0x0002, 0x8001, 0x7fff);
+
+  ASSERT_COMP (0x7ffe, 0xfffd, 0x7fff);
+  ASSERT_COMP (0x7fff, 0xfffe, 0x7fff);
+  ASSERT_COMP (0x8000, 0xffff, 0x7fff);
+  ASSERT_COMP (0x8001, 0x0000, 0x7fff);
+  ASSERT_COMP (0x8002, 0x0001, 0x7fff);
+#undef ASSERT_COMP
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_buffer)
+{
+  GstBuffer *buf;
+  GstRTCPPacket packet;
+  GstRTCPBuffer rtcp = { NULL, };
+
+  buf = gst_rtcp_buffer_new (1400);
+  fail_unless (buf != NULL);
+  fail_unless_equals_int (gst_buffer_get_size (buf), 1400);
+
+  gst_rtcp_buffer_map (buf, GST_MAP_READWRITE, &rtcp);
+
+  fail_unless (gst_rtcp_buffer_validate (buf) == FALSE);
+  fail_unless (gst_rtcp_buffer_get_first_packet (&rtcp, &packet) == FALSE);
+  fail_unless (gst_rtcp_buffer_get_packet_count (&rtcp) == 0);
+
+  /* add an SR packet */
+  fail_unless (gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_SR,
+          &packet) == TRUE);
+
+  fail_unless (gst_rtcp_packet_get_padding (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_count (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_type (&packet) == GST_RTCP_TYPE_SR);
+  fail_unless (gst_rtcp_packet_get_length (&packet) == 6);
+
+  gst_rtcp_packet_sr_set_sender_info (&packet, 0x44556677,
+      G_GUINT64_CONSTANT (1), 0x11111111, 101, 123456);
+  {
+    guint32 ssrc;
+    guint64 ntptime;
+    guint32 rtptime;
+    guint32 packet_count;
+    guint32 octet_count;
+
+    gst_rtcp_packet_sr_get_sender_info (&packet, &ssrc, &ntptime, &rtptime,
+        &packet_count, &octet_count);
+
+    fail_unless (ssrc == 0x44556677);
+    fail_unless (ntptime == G_GUINT64_CONSTANT (1));
+    fail_unless (rtptime == 0x11111111);
+    fail_unless (packet_count == 101);
+    fail_unless (octet_count == 123456);
+  }
+
+  /* go to first packet, this should be the packet we just added */
+  fail_unless (gst_rtcp_buffer_get_first_packet (&rtcp, &packet) == TRUE);
+
+  fail_unless (gst_rtcp_packet_get_padding (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_count (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_type (&packet) == GST_RTCP_TYPE_SR);
+  fail_unless (gst_rtcp_packet_get_length (&packet) == 6);
+
+  fail_unless (gst_rtcp_packet_move_to_next (&packet) == FALSE);
+
+  /* add some SDES */
+  fail_unless (gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_SDES,
+          &packet) == TRUE);
+  fail_unless (gst_rtcp_packet_sdes_add_item (&packet, 0xff658743) == TRUE);
+  fail_unless (gst_rtcp_packet_sdes_add_entry (&packet, GST_RTCP_SDES_CNAME,
+          sizeof ("test@foo.bar"), (guint8 *) "test@foo.bar") == TRUE);
+
+  /* add some BYE */
+  fail_unless (gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_BYE,
+          &packet) == TRUE);
+  fail_unless (gst_rtcp_packet_bye_add_ssrc (&packet, 0x5613212f) == TRUE);
+  fail_unless (gst_rtcp_packet_bye_add_ssrc (&packet, 0x00112233) == TRUE);
+  fail_unless (gst_rtcp_packet_bye_get_ssrc_count (&packet) == 2);
+
+  fail_unless (gst_rtcp_packet_get_padding (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_count (&packet) == 2);
+  fail_unless (gst_rtcp_packet_get_type (&packet) == GST_RTCP_TYPE_BYE);
+  fail_unless (gst_rtcp_packet_get_length (&packet) == 2);
+
+  /* move to SDES */
+  fail_unless (gst_rtcp_buffer_get_first_packet (&rtcp, &packet) == TRUE);
+  fail_unless (gst_rtcp_packet_move_to_next (&packet) == TRUE);
+
+  fail_unless (gst_rtcp_packet_get_padding (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_count (&packet) == 1);
+  fail_unless (gst_rtcp_packet_get_type (&packet) == GST_RTCP_TYPE_SDES);
+  fail_unless (gst_rtcp_packet_get_length (&packet) == 5);
+
+  /* remove the SDES */
+  fail_unless (gst_rtcp_packet_remove (&packet) == TRUE);
+
+  /* we are now at the BYE packet */
+  fail_unless (gst_rtcp_packet_get_padding (&packet) == 0);
+  fail_unless (gst_rtcp_packet_get_count (&packet) == 2);
+  fail_unless (gst_rtcp_packet_get_type (&packet) == GST_RTCP_TYPE_BYE);
+  fail_unless (gst_rtcp_packet_get_length (&packet) == 2);
+
+  /* close and validate */
+  gst_rtcp_buffer_unmap (&rtcp);
+  fail_unless (gst_rtcp_buffer_validate (buf) == TRUE);
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+static Suite *
+rtp_suite (void)
+{
+  Suite *s = suite_create ("rtp support library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_rtp_buffer);
+  tcase_add_test (tc_chain, test_rtp_buffer_validate_corrupt);
+  tcase_add_test (tc_chain, test_rtp_buffer_set_extension_data);
+  //tcase_add_test (tc_chain, test_rtp_buffer_list_set_extension);
+  tcase_add_test (tc_chain, test_rtp_seqnum_compare);
+
+  tcase_add_test (tc_chain, test_rtcp_buffer);
+
+  //tcase_add_test (tc_chain, test_rtp_buffer_list);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = rtp_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/rtsp.c b/tests/check/libs/rtsp.c
new file mode 100644
index 0000000..377f277
--- /dev/null
+++ b/tests/check/libs/rtsp.c
@@ -0,0 +1,153 @@
+/* GStreamer unit tests for the RTSP support library
+ *
+ * Copyright (C) 2010 Andy Wingo <wingo@oblong.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/rtsp/gstrtspurl.h>
+#include <string.h>
+
+GST_START_TEST (test_rtsp_url_basic)
+{
+  GstRTSPUrl *url = NULL;
+  GstRTSPResult res;
+
+  res = gst_rtsp_url_parse ("rtsp://localhost/foo/bar", &url);
+  fail_unless (res == GST_RTSP_OK);
+  fail_unless (url != NULL);
+  fail_unless (url->transports & GST_RTSP_LOWER_TRANS_TCP);
+  fail_unless (url->transports & GST_RTSP_LOWER_TRANS_UDP);
+  fail_unless (url->transports & GST_RTSP_LOWER_TRANS_UDP_MCAST);
+  fail_unless (url->family == GST_RTSP_FAM_INET);
+  fail_unless (!url->user);
+  fail_unless (!url->passwd);
+  fail_unless (!strcmp (url->host, "localhost"));
+  /* fail_unless (url->port == GST_RTSP_DEFAULT_PORT); */
+  fail_unless (!strcmp (url->abspath, "/foo/bar"));
+  fail_unless (!url->query);
+
+  gst_rtsp_url_free (url);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtsp_url_components_1)
+{
+  GstRTSPUrl *url = NULL;
+  GstRTSPResult res;
+  gchar **comps = NULL;
+
+  res = gst_rtsp_url_parse ("rtsp://localhost/foo/bar", &url);
+  fail_unless (res == GST_RTSP_OK);
+  fail_unless (url != NULL);
+
+  comps = gst_rtsp_url_decode_path_components (url);
+  fail_unless (comps != NULL);
+  fail_unless (g_strv_length (comps) == 3);
+  fail_unless (!strcmp (comps[0], ""));
+  fail_unless (!strcmp (comps[1], "foo"));
+  fail_unless (!strcmp (comps[2], "bar"));
+
+  g_strfreev (comps);
+  gst_rtsp_url_free (url);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtsp_url_components_2)
+{
+  GstRTSPUrl *url = NULL;
+  GstRTSPResult res;
+  gchar **comps = NULL;
+
+  res = gst_rtsp_url_parse ("rtsp://localhost/foo%2Fbar/qux%20baz", &url);
+  fail_unless (res == GST_RTSP_OK);
+  fail_unless (url != NULL);
+
+  comps = gst_rtsp_url_decode_path_components (url);
+  fail_unless (comps != NULL);
+  fail_unless (g_strv_length (comps) == 3);
+  fail_unless (!strcmp (comps[0], ""));
+  fail_unless (!strcmp (comps[1], "foo/bar"));
+  fail_unless (!strcmp (comps[2], "qux baz"));
+
+  g_strfreev (comps);
+  gst_rtsp_url_free (url);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtsp_url_components_3)
+{
+  GstRTSPUrl *url = NULL;
+  GstRTSPResult res;
+  gchar **comps = NULL;
+
+  res = gst_rtsp_url_parse ("rtsp://localhost/foo%00bar/qux%20baz", &url);
+  fail_unless (res == GST_RTSP_OK);
+  fail_unless (url != NULL);
+
+  comps = gst_rtsp_url_decode_path_components (url);
+  fail_unless (comps != NULL);
+  fail_unless (g_strv_length (comps) == 3);
+  fail_unless (!strcmp (comps[0], ""));
+  fail_unless (!strcmp (comps[1], "foo%00bar"));
+  fail_unless (!strcmp (comps[2], "qux baz"));
+
+  g_strfreev (comps);
+  gst_rtsp_url_free (url);
+}
+
+GST_END_TEST;
+
+static Suite *
+rtsp_suite (void)
+{
+  Suite *s = suite_create ("rtsp support library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_rtsp_url_basic);
+  tcase_add_test (tc_chain, test_rtsp_url_components_1);
+  tcase_add_test (tc_chain, test_rtsp_url_components_2);
+  tcase_add_test (tc_chain, test_rtsp_url_components_3);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = rtsp_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/struct_arm.h b/tests/check/libs/struct_arm.h
new file mode 100644
index 0000000..1d90bdc
--- /dev/null
+++ b/tests/check/libs/struct_arm.h
@@ -0,0 +1,100 @@
+
+GstCheckABIStruct list[] = {
+  {"GstAppBufferClass", sizeof (GstAppBufferClass), 16},
+  {"GstAppBuffer", sizeof (GstAppBuffer), 96},
+  {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 28},
+  {"GstAppSinkClass", sizeof (GstAppSinkClass), 404},
+  {"GstAppSink", sizeof (GstAppSink), 432},
+  {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 28},
+  {"GstAppSrcClass", sizeof (GstAppSrcClass), 412},
+  {"GstAppSrc", sizeof (GstAppSrc), 416},
+  {"GstAudioClockClass", sizeof (GstAudioClockClass), 192},
+  {"GstAudioClock", sizeof (GstAudioClock), 232},
+  {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 396},
+  {"GstAudioFilter", sizeof (GstAudioFilter), 504},
+  {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 432},
+  {"GstAudioSink", sizeof (GstAudioSink), 488},
+  {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 460},
+  {"GstAudioSrc", sizeof (GstAudioSrc), 488},
+  {"GstBaseAudioSinkClass", sizeof (GstBaseAudioSinkClass), 388},
+  {"GstBaseAudioSink", sizeof (GstBaseAudioSink), 464},
+  {"GstBaseAudioSrcClass", sizeof (GstBaseAudioSrcClass), 416},
+  {"GstBaseAudioSrc", sizeof (GstBaseAudioSrc), 464},
+  {"GstBaseRTPAudioPayloadClass", sizeof (GstBaseRTPAudioPayloadClass), 288},
+  {"GstBaseRTPAudioPayload", sizeof (GstBaseRTPAudioPayload), 384},
+  {"GstBaseRTPDepayloadClass", sizeof (GstBaseRTPDepayloadClass), 280},
+  {"GstBaseRTPDepayload", sizeof (GstBaseRTPDepayload), 328},
+  {"GstBaseRTPPayloadClass", sizeof (GstBaseRTPPayloadClass), 272},
+  {"GstBaseRTPPayload", sizeof (GstBaseRTPPayload), 336},
+  {"GstCddaBaseSrcClass", sizeof (GstCddaBaseSrcClass), 432},
+  {"GstCddaBaseSrc", sizeof (GstCddaBaseSrc), 528},
+  {"GstCddaBaseSrcTrack", sizeof (GstCddaBaseSrcTrack), 36},
+  {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 88},
+  {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 24},
+  {"GstColorBalanceClass", sizeof (GstColorBalanceClass), 44},
+  {"GstDiscovererClass", sizeof (GstDiscovererClass), 96},
+  {"GstDiscoverer", sizeof (GstDiscoverer), 32},
+  {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8},
+  {"GstFFTF32", sizeof (GstFFTF32), 28},
+  {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16},
+  {"GstFFTF64", sizeof (GstFFTF64), 28},
+  {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4},
+  {"GstFFTS16", sizeof (GstFFTS16), 28},
+  {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8},
+  {"GstFFTS32", sizeof (GstFFTS32), 28},
+  {"GstMixerClass", sizeof (GstMixerClass), 72},
+  {"GstMixerOptionsClass", sizeof (GstMixerOptionsClass), 100},
+  {"GstMixerOptions", sizeof (GstMixerOptions), 52},
+  {"GstMixerTrackClass", sizeof (GstMixerTrackClass), 84},
+  {"GstMixerTrack", sizeof (GstMixerTrack), 32},
+  {"GstNavigationInterface", sizeof (GstNavigationInterface), 28},
+  {"GstNetAddress", sizeof (GstNetAddress), 40},
+  {"GstNetBufferClass", sizeof (GstNetBufferClass), 32},
+  {"GstNetBuffer", sizeof (GstNetBuffer), 184},
+  {"GstPropertyProbeInterface", sizeof (GstPropertyProbeInterface), 44},
+  {"gst_riff_acid", sizeof (gst_riff_acid), 24},
+  {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4},
+  {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16},
+  {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16},
+  {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32},
+  {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40},
+  {"gst_riff_strh", sizeof (gst_riff_strh), 48},
+  {"GstRingBufferClass", sizeof (GstRingBufferClass), 172},
+  {"GstRingBuffer", sizeof (GstRingBuffer), 232},
+  {"GstRingBufferSpec", sizeof (GstRingBufferSpec), 120},
+  {"GstRTCPPacket", sizeof (GstRTCPPacket), 36},
+  {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 24},
+  {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 60},
+  {"GstRTSPMessage", sizeof (GstRTSPMessage), 28},
+  {"GstRTSPRange", sizeof (GstRTSPRange), 8},
+  {"GstRTSPTime", sizeof (GstRTSPTime), 16},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 40},
+  {"GstRTSPTransport", sizeof (GstRTSPTransport), 76},
+  {"GstRTSPUrl", sizeof (GstRTSPUrl), 32},
+  {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 40},
+  {"GstSDPAttribute", sizeof (GstSDPAttribute), 8},
+  {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 8},
+  {"GstSDPConnection", sizeof (GstSDPConnection), 20},
+  {"GstSDPKey", sizeof (GstSDPKey), 8},
+  {"GstSDPMedia", sizeof (GstSDPMedia), 44},
+  {"GstSDPMessage", sizeof (GstSDPMessage), 96},
+  {"GstSDPOrigin", sizeof (GstSDPOrigin), 24},
+  {"GstSDPTime", sizeof (GstSDPTime), 12},
+  {"GstSDPZone", sizeof (GstSDPZone), 8},
+  {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 24},
+  {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 284},
+  {"GstTagDemux", sizeof (GstTagDemux), 160},
+  {"GstTunerChannelClass", sizeof (GstTunerChannelClass), 92},
+  {"GstTunerChannel", sizeof (GstTunerChannel), 40},
+  {"GstTunerClass", sizeof (GstTunerClass), 76},
+  {"GstTunerNormClass", sizeof (GstTunerNormClass), 84},
+  {"GstTunerNorm", sizeof (GstTunerNorm), 40},
+  {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 376},
+  {"GstVideoFilter", sizeof (GstVideoFilter), 376},
+  {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 56},
+  {"GstVideoRectangle", sizeof (GstVideoRectangle), 16},
+  {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 384},
+  {"GstVideoSink", sizeof (GstVideoSink), 432},
+  {"GstXOverlayClass", sizeof (GstXOverlayClass), 32},
+  {NULL, 0, 0}
+};
diff --git a/tests/check/libs/struct_i386.h b/tests/check/libs/struct_i386.h
new file mode 100644
index 0000000..bbedd28
--- /dev/null
+++ b/tests/check/libs/struct_i386.h
@@ -0,0 +1,96 @@
+
+GstCheckABIStruct list[] = {
+  {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 28},
+  {"GstAppSinkClass", sizeof (GstAppSinkClass), 404},
+  {"GstAppSink", sizeof (GstAppSink), 404},
+  {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 28},
+  {"GstAppSrcClass", sizeof (GstAppSrcClass), 412},
+  {"GstAppSrc", sizeof (GstAppSrc), 396},
+  {"GstAudioClockClass", sizeof (GstAudioClockClass), 192},
+  {"GstAudioClock", sizeof (GstAudioClock), 228},
+  {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 396},
+  {"GstAudioFilter", sizeof (GstAudioFilter), 480},
+  {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 432},
+  {"GstAudioSink", sizeof (GstAudioSink), 456},
+  {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 460},
+  {"GstAudioSrc", sizeof (GstAudioSrc), 460},
+  {"GstBaseAudioSinkClass", sizeof (GstBaseAudioSinkClass), 388},
+  {"GstBaseAudioSink", sizeof (GstBaseAudioSink), 436},
+  {"GstBaseAudioSrcClass", sizeof (GstBaseAudioSrcClass), 416},
+  {"GstBaseAudioSrc", sizeof (GstBaseAudioSrc), 440},
+  {"GstBaseRTPAudioPayloadClass", sizeof (GstBaseRTPAudioPayloadClass), 288},
+  {"GstBaseRTPAudioPayload", sizeof (GstBaseRTPAudioPayload), 364},
+  {"GstBaseRTPDepayloadClass", sizeof (GstBaseRTPDepayloadClass), 280},
+  {"GstBaseRTPDepayload", sizeof (GstBaseRTPDepayload), 304},
+  {"GstBaseRTPPayloadClass", sizeof (GstBaseRTPPayloadClass), 272},
+  {"GstBaseRTPPayload", sizeof (GstBaseRTPPayload), 324},
+  {"GstCddaBaseSrcClass", sizeof (GstCddaBaseSrcClass), 432},
+  {"GstCddaBaseSrc", sizeof (GstCddaBaseSrc), 508},
+  {"GstCddaBaseSrcTrack", sizeof (GstCddaBaseSrcTrack), 36},
+  {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 88},
+  {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 24},
+  {"GstColorBalanceClass", sizeof (GstColorBalanceClass), 44},
+  {"GstDiscovererClass", sizeof (GstDiscovererClass), 96},
+  {"GstDiscoverer", sizeof (GstDiscoverer), 32},
+  {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8},
+  {"GstFFTF32", sizeof (GstFFTF32), 28},
+  {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16},
+  {"GstFFTF64", sizeof (GstFFTF64), 28},
+  {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4},
+  {"GstFFTS16", sizeof (GstFFTS16), 28},
+  {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8},
+  {"GstFFTS32", sizeof (GstFFTS32), 28},
+  {"GstMixerClass", sizeof (GstMixerClass), 72},
+  {"GstMixerOptionsClass", sizeof (GstMixerOptionsClass), 100},
+  {"GstMixerOptions", sizeof (GstMixerOptions), 52},
+  {"GstMixerTrackClass", sizeof (GstMixerTrackClass), 84},
+  {"GstMixerTrack", sizeof (GstMixerTrack), 32},
+  {"GstNavigationInterface", sizeof (GstNavigationInterface), 28},
+  {"GstNetAddress", sizeof (GstNetAddress), 40},
+  {"GstPropertyProbeInterface", sizeof (GstPropertyProbeInterface), 44},
+  {"gst_riff_acid", sizeof (gst_riff_acid), 24},
+  {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4},
+  {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16},
+  {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16},
+  {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32},
+  {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40},
+  {"gst_riff_strh", sizeof (gst_riff_strh), 48},
+  {"GstRingBufferClass", sizeof (GstRingBufferClass), 172},
+  {"GstRingBuffer", sizeof (GstRingBuffer), 220},
+  {"GstRingBufferSpec", sizeof (GstRingBufferSpec), 112},
+  {"GstRTCPPacket", sizeof (GstRTCPPacket), 36},
+  {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 24},
+  {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 60},
+  {"GstRTSPMessage", sizeof (GstRTSPMessage), 28},
+  {"GstRTSPRange", sizeof (GstRTSPRange), 8},
+  {"GstRTSPTime", sizeof (GstRTSPTime), 12},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 28},
+  {"GstRTSPTransport", sizeof (GstRTSPTransport), 76},
+  {"GstRTSPUrl", sizeof (GstRTSPUrl), 32},
+  {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 40},
+  {"GstSDPAttribute", sizeof (GstSDPAttribute), 8},
+  {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 8},
+  {"GstSDPConnection", sizeof (GstSDPConnection), 20},
+  {"GstSDPKey", sizeof (GstSDPKey), 8},
+  {"GstSDPMedia", sizeof (GstSDPMedia), 44},
+  {"GstSDPMessage", sizeof (GstSDPMessage), 96},
+  {"GstSDPOrigin", sizeof (GstSDPOrigin), 24},
+  {"GstSDPTime", sizeof (GstSDPTime), 12},
+  {"GstSDPZone", sizeof (GstSDPZone), 8},
+  {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 24},
+  {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 284},
+  {"GstTagDemux", sizeof (GstTagDemux), 148},
+  {"GstTunerChannelClass", sizeof (GstTunerChannelClass), 92},
+  {"GstTunerChannel", sizeof (GstTunerChannel), 40},
+  {"GstTunerClass", sizeof (GstTunerClass), 76},
+  {"GstTunerNormClass", sizeof (GstTunerNormClass), 84},
+  {"GstTunerNorm", sizeof (GstTunerNorm), 36},
+  {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 376},
+  {"GstVideoFilter", sizeof (GstVideoFilter), 356},
+  {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 56},
+  {"GstVideoRectangle", sizeof (GstVideoRectangle), 16},
+  {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 384},
+  {"GstVideoSink", sizeof (GstVideoSink), 408},
+  {"GstXOverlayClass", sizeof (GstXOverlayClass), 32},
+  {NULL, 0, 0}
+};
diff --git a/tests/check/libs/struct_i386_osx.h b/tests/check/libs/struct_i386_osx.h
new file mode 100644
index 0000000..1714aec
--- /dev/null
+++ b/tests/check/libs/struct_i386_osx.h
@@ -0,0 +1,100 @@
+
+GstCheckABIStruct list[] = {
+  {"GstAppBufferClass", sizeof (GstAppBufferClass), 16},
+  {"GstAppBuffer", sizeof (GstAppBuffer), 88},
+  {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 28},
+  {"GstAppSinkClass", sizeof (GstAppSinkClass), 404},
+  {"GstAppSink", sizeof (GstAppSink), 404},
+  {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 28},
+  {"GstAppSrcClass", sizeof (GstAppSrcClass), 412},
+  {"GstAppSrc", sizeof (GstAppSrc), 396},
+  {"GstAudioClockClass", sizeof (GstAudioClockClass), 192},
+  {"GstAudioClock", sizeof (GstAudioClock), 228},
+  {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 396},
+  {"GstAudioFilter", sizeof (GstAudioFilter), 480},
+  {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 432},
+  {"GstAudioSink", sizeof (GstAudioSink), 456},
+  {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 460},
+  {"GstAudioSrc", sizeof (GstAudioSrc), 460},
+  {"GstBaseAudioSinkClass", sizeof (GstBaseAudioSinkClass), 388},
+  {"GstBaseAudioSink", sizeof (GstBaseAudioSink), 436},
+  {"GstBaseAudioSrcClass", sizeof (GstBaseAudioSrcClass), 416},
+  {"GstBaseAudioSrc", sizeof (GstBaseAudioSrc), 440},
+  {"GstBaseRTPAudioPayloadClass", sizeof (GstBaseRTPAudioPayloadClass), 288},
+  {"GstBaseRTPAudioPayload", sizeof (GstBaseRTPAudioPayload), 364},
+  {"GstBaseRTPDepayloadClass", sizeof (GstBaseRTPDepayloadClass), 280},
+  {"GstBaseRTPDepayload", sizeof (GstBaseRTPDepayload), 324},
+  {"GstBaseRTPPayloadClass", sizeof (GstBaseRTPPayloadClass), 272},
+  {"GstBaseRTPPayload", sizeof (GstBaseRTPPayload), 324},
+  {"GstCddaBaseSrcClass", sizeof (GstCddaBaseSrcClass), 432},
+  {"GstCddaBaseSrc", sizeof (GstCddaBaseSrc), 508},
+  {"GstCddaBaseSrcTrack", sizeof (GstCddaBaseSrcTrack), 36},
+  {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 88},
+  {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 24},
+  {"GstColorBalanceClass", sizeof (GstColorBalanceClass), 44},
+  {"GstDiscovererClass", sizeof (GstDiscovererClass), 96},
+  {"GstDiscoverer", sizeof (GstDiscoverer), 32},
+  {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8},
+  {"GstFFTF32", sizeof (GstFFTF32), 28},
+  {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16},
+  {"GstFFTF64", sizeof (GstFFTF64), 28},
+  {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4},
+  {"GstFFTS16", sizeof (GstFFTS16), 28},
+  {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8},
+  {"GstFFTS32", sizeof (GstFFTS32), 28},
+  {"GstMixerClass", sizeof (GstMixerClass), 72},
+  {"GstMixerOptionsClass", sizeof (GstMixerOptionsClass), 100},
+  {"GstMixerOptions", sizeof (GstMixerOptions), 52},
+  {"GstMixerTrackClass", sizeof (GstMixerTrackClass), 84},
+  {"GstMixerTrack", sizeof (GstMixerTrack), 32},
+  {"GstNavigationInterface", sizeof (GstNavigationInterface), 28},
+  {"GstNetAddress", sizeof (GstNetAddress), 40},
+  {"GstNetBufferClass", sizeof (GstNetBufferClass), 32},
+  {"GstNetBuffer", sizeof (GstNetBuffer), 176},
+  {"GstPropertyProbeInterface", sizeof (GstPropertyProbeInterface), 44},
+  {"gst_riff_acid", sizeof (gst_riff_acid), 24},
+  {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4},
+  {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16},
+  {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16},
+  {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32},
+  {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40},
+  {"gst_riff_strh", sizeof (gst_riff_strh), 48},
+  {"GstRingBufferClass", sizeof (GstRingBufferClass), 172},
+  {"GstRingBuffer", sizeof (GstRingBuffer), 220},
+  {"GstRingBufferSpec", sizeof (GstRingBufferSpec), 112},
+  {"GstRTCPPacket", sizeof (GstRTCPPacket), 36},
+  {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 24},
+  {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 60},
+  {"GstRTSPMessage", sizeof (GstRTSPMessage), 28},
+  {"GstRTSPRange", sizeof (GstRTSPRange), 8},
+  {"GstRTSPTime", sizeof (GstRTSPTime), 12},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 28},
+  {"GstRTSPTransport", sizeof (GstRTSPTransport), 76},
+  {"GstRTSPUrl", sizeof (GstRTSPUrl), 32},
+  {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 40},
+  {"GstSDPAttribute", sizeof (GstSDPAttribute), 8},
+  {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 8},
+  {"GstSDPConnection", sizeof (GstSDPConnection), 20},
+  {"GstSDPKey", sizeof (GstSDPKey), 8},
+  {"GstSDPMedia", sizeof (GstSDPMedia), 44},
+  {"GstSDPMessage", sizeof (GstSDPMessage), 96},
+  {"GstSDPOrigin", sizeof (GstSDPOrigin), 24},
+  {"GstSDPTime", sizeof (GstSDPTime), 12},
+  {"GstSDPZone", sizeof (GstSDPZone), 8},
+  {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 24},
+  {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 284},
+  {"GstTagDemux", sizeof (GstTagDemux), 148},
+  {"GstTunerChannelClass", sizeof (GstTunerChannelClass), 92},
+  {"GstTunerChannel", sizeof (GstTunerChannel), 40},
+  {"GstTunerClass", sizeof (GstTunerClass), 76},
+  {"GstTunerNormClass", sizeof (GstTunerNormClass), 84},
+  {"GstTunerNorm", sizeof (GstTunerNorm), 36},
+  {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 376},
+  {"GstVideoFilter", sizeof (GstVideoFilter), 356},
+  {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 56},
+  {"GstVideoRectangle", sizeof (GstVideoRectangle), 16},
+  {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 384},
+  {"GstVideoSink", sizeof (GstVideoSink), 408},
+  {"GstXOverlayClass", sizeof (GstXOverlayClass), 32},
+  {NULL, 0, 0}
+};
diff --git a/tests/check/libs/struct_x86_64.h b/tests/check/libs/struct_x86_64.h
new file mode 100644
index 0000000..9f18dfb
--- /dev/null
+++ b/tests/check/libs/struct_x86_64.h
@@ -0,0 +1,96 @@
+
+GstCheckABIStruct list[] = {
+  {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 56},
+  {"GstAppSinkClass", sizeof (GstAppSinkClass), 800},
+  {"GstAppSink", sizeof (GstAppSink), 640},
+  {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 56},
+  {"GstAppSrcClass", sizeof (GstAppSrcClass), 816},
+  {"GstAppSrc", sizeof (GstAppSrc), 640},
+  {"GstAudioClockClass", sizeof (GstAudioClockClass), 384},
+  {"GstAudioClock", sizeof (GstAudioClock), 344},
+  {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 784},
+  {"GstAudioFilter", sizeof (GstAudioFilter), 744},
+  {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 856},
+  {"GstAudioSink", sizeof (GstAudioSink), 720},
+  {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 912},
+  {"GstAudioSrc", sizeof (GstAudioSrc), 744},
+  {"GstBaseAudioSinkClass", sizeof (GstBaseAudioSinkClass), 768},
+  {"GstBaseAudioSink", sizeof (GstBaseAudioSink), 680},
+  {"GstBaseAudioSrcClass", sizeof (GstBaseAudioSrcClass), 824},
+  {"GstBaseAudioSrc", sizeof (GstBaseAudioSrc), 704},
+  {"GstBaseRTPAudioPayloadClass", sizeof (GstBaseRTPAudioPayloadClass), 568},
+  {"GstBaseRTPAudioPayload", sizeof (GstBaseRTPAudioPayload), 544},
+  {"GstBaseRTPDepayloadClass", sizeof (GstBaseRTPDepayloadClass), 552},
+  {"GstBaseRTPDepayload", sizeof (GstBaseRTPDepayload), 488},
+  {"GstBaseRTPPayloadClass", sizeof (GstBaseRTPPayloadClass), 536},
+  {"GstBaseRTPPayload", sizeof (GstBaseRTPPayload), 480},
+  {"GstCddaBaseSrcClass", sizeof (GstCddaBaseSrcClass), 856},
+  {"GstCddaBaseSrc", sizeof (GstCddaBaseSrc), 792},
+  {"GstCddaBaseSrcTrack", sizeof (GstCddaBaseSrcTrack), 48},
+  {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 176},
+  {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 40},
+  {"GstColorBalanceClass", sizeof (GstColorBalanceClass), 88},
+  {"GstDiscovererClass", sizeof (GstDiscovererClass), 192},
+  {"GstDiscoverer", sizeof (GstDiscoverer), 64},
+  {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8},
+  {"GstFFTF32", sizeof (GstFFTF32), 48},
+  {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16},
+  {"GstFFTF64", sizeof (GstFFTF64), 48},
+  {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4},
+  {"GstFFTS16", sizeof (GstFFTS16), 48},
+  {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8},
+  {"GstFFTS32", sizeof (GstFFTS32), 48},
+  {"GstMixerClass", sizeof (GstMixerClass), 144},
+  {"GstMixerOptionsClass", sizeof (GstMixerOptionsClass), 200},
+  {"GstMixerOptions", sizeof (GstMixerOptions), 88},
+  {"GstMixerTrackClass", sizeof (GstMixerTrackClass), 168},
+  {"GstMixerTrack", sizeof (GstMixerTrack), 48},
+  {"GstNavigationInterface", sizeof (GstNavigationInterface), 56},
+  {"GstNetAddress", sizeof (GstNetAddress), 56},
+  {"GstPropertyProbeInterface", sizeof (GstPropertyProbeInterface), 88},
+  {"gst_riff_acid", sizeof (gst_riff_acid), 24},
+  {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4},
+  {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16},
+  {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16},
+  {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32},
+  {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40},
+  {"gst_riff_strh", sizeof (gst_riff_strh), 48},
+  {"GstRingBufferClass", sizeof (GstRingBufferClass), 344},
+  {"GstRingBuffer", sizeof (GstRingBuffer), 328},
+  {"GstRingBufferSpec", sizeof (GstRingBufferSpec), 136},
+  {"GstRTCPPacket", sizeof (GstRTCPPacket), 40},
+  {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 48},
+  {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 120},
+  {"GstRTSPMessage", sizeof (GstRTSPMessage), 56},
+  {"GstRTSPRange", sizeof (GstRTSPRange), 8},
+  {"GstRTSPTime", sizeof (GstRTSPTime), 16},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 40},
+  {"GstRTSPTransport", sizeof (GstRTSPTransport), 88},
+  {"GstRTSPUrl", sizeof (GstRTSPUrl), 56},
+  {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 80},
+  {"GstSDPAttribute", sizeof (GstSDPAttribute), 16},
+  {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 16},
+  {"GstSDPConnection", sizeof (GstSDPConnection), 32},
+  {"GstSDPKey", sizeof (GstSDPKey), 16},
+  {"GstSDPMedia", sizeof (GstSDPMedia), 80},
+  {"GstSDPMessage", sizeof (GstSDPMessage), 184},
+  {"GstSDPOrigin", sizeof (GstSDPOrigin), 48},
+  {"GstSDPTime", sizeof (GstSDPTime), 24},
+  {"GstSDPZone", sizeof (GstSDPZone), 16},
+  {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 48},
+  {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 552},
+  {"GstTagDemux", sizeof (GstTagDemux), 272},
+  {"GstTunerChannelClass", sizeof (GstTunerChannelClass), 184},
+  {"GstTunerChannel", sizeof (GstTunerChannel), 64},
+  {"GstTunerClass", sizeof (GstTunerClass), 152},
+  {"GstTunerNormClass", sizeof (GstTunerNormClass), 168},
+  {"GstTunerNorm", sizeof (GstTunerNorm), 56},
+  {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 744},
+  {"GstVideoFilter", sizeof (GstVideoFilter), 584},
+  {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 112},
+  {"GstVideoRectangle", sizeof (GstVideoRectangle), 16},
+  {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 760},
+  {"GstVideoSink", sizeof (GstVideoSink), 640},
+  {"GstVideoOverlayIface", sizeof (GstVideoOverlayIface), 64},
+  {NULL, 0, 0}
+};
diff --git a/tests/check/libs/tag.c b/tests/check/libs/tag.c
new file mode 100644
index 0000000..8dfd793
--- /dev/null
+++ b/tests/check/libs/tag.c
@@ -0,0 +1,1871 @@
+/* GStreamer
+ *
+ * unit tests for the tag support library
+ *
+ * Copyright (C) 2006-2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/tag/tag.h>
+#include <gst/base/gstbytewriter.h>
+#include <string.h>
+#include <locale.h>
+
+GST_START_TEST (test_parse_extended_comment)
+{
+  gchar *key, *val, *lang;
+
+  /* first check the g_return_val_if_fail conditions */
+  ASSERT_CRITICAL (gst_tag_parse_extended_comment (NULL, NULL, NULL, NULL,
+          FALSE));
+  ASSERT_CRITICAL (gst_tag_parse_extended_comment ("\377\000", NULL, NULL, NULL,
+          FALSE));
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("a=b", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key != NULL);
+  fail_unless (lang == NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (key, "a");
+  fail_unless_equals_string (val, "b");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("a[l]=b", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key != NULL);
+  fail_unless (lang != NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (key, "a");
+  fail_unless_equals_string (lang, "l");
+  fail_unless_equals_string (val, "b");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("foo=bar", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key != NULL);
+  fail_unless (lang == NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (key, "foo");
+  fail_unless_equals_string (val, "bar");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("foo[fr]=bar", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key != NULL);
+  fail_unless (lang != NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (key, "foo");
+  fail_unless_equals_string (lang, "fr");
+  fail_unless_equals_string (val, "bar");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("foo=[fr]bar", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key != NULL);
+  fail_unless (lang == NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (key, "foo");
+  fail_unless_equals_string (val, "[fr]bar");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+
+  /* test NULL for output locations */
+  fail_unless (gst_tag_parse_extended_comment ("foo[fr]=bar", NULL, NULL, NULL,
+          FALSE) == TRUE);
+
+  /* test strict mode (key must be specified) */
+  fail_unless (gst_tag_parse_extended_comment ("foo[fr]=bar", NULL, NULL, NULL,
+          TRUE) == TRUE);
+  fail_unless (gst_tag_parse_extended_comment ("foo=bar", NULL, NULL, NULL,
+          TRUE) == TRUE);
+  fail_unless (gst_tag_parse_extended_comment ("foobar", NULL, NULL, NULL,
+          TRUE) == FALSE);
+
+  /* test non-strict mode (if there's no key, that's fine too) */
+  fail_unless (gst_tag_parse_extended_comment ("foobar", NULL, NULL, NULL,
+          FALSE) == TRUE);
+  fail_unless (gst_tag_parse_extended_comment ("[fr]bar", NULL, NULL, NULL,
+          FALSE) == TRUE);
+
+  key = val = lang = NULL;
+  fail_unless (gst_tag_parse_extended_comment ("[fr]bar", &key, &lang, &val,
+          FALSE) == TRUE);
+  fail_unless (key == NULL);
+  fail_unless (lang == NULL);
+  fail_unless (val != NULL);
+  fail_unless_equals_string (val, "[fr]bar");
+  g_free (key);
+  g_free (lang);
+  g_free (val);
+}
+
+GST_END_TEST;
+
+#define ASSERT_TAG_LIST_HAS_STRING(list,field,string)                      \
+  {                                                                        \
+    gboolean got_match = FALSE;                                            \
+    guint i, size;                                                         \
+                                                                           \
+    fail_unless (gst_tag_list_get_tag_size (list,field) > 0);              \
+    size = gst_tag_list_get_tag_size (list,field);                         \
+    for (i = 0; i < size; ++i) {                                           \
+      gchar *___s = NULL;                                                  \
+                                                                           \
+      fail_unless (gst_tag_list_get_string_index (list, field, i, &___s)); \
+      fail_unless (___s != NULL);                                          \
+      if (g_str_equal (___s, string)) {                                    \
+        got_match = TRUE;                                                  \
+        g_free (___s);                                                     \
+        break;                                                             \
+      }                                                                    \
+      g_free (___s);                                                       \
+    }                                                                      \
+    fail_unless (got_match);                                               \
+  }
+
+#define ASSERT_TAG_LIST_HAS_UINT(list,field,num)                           \
+  {                                                                        \
+    guint ___n;                                                            \
+                                                                           \
+    fail_unless (gst_tag_list_get_tag_size (list,field) > 0);              \
+    fail_unless (gst_tag_list_get_tag_size (list,field) == 1);             \
+    fail_unless (gst_tag_list_get_uint_index (list, field, 0, &___n));     \
+    fail_unless_equals_int (___n, num);                                    \
+  }
+
+#define MATCH_DOUBLE(p1, p2) ((p1 < p2 + 1e-6) && (p2 < p1 + 1e-6))
+#define ASSERT_TAG_LIST_HAS_DOUBLE(list,field,d)                           \
+  {                                                                        \
+    gdouble ___d;                                                          \
+                                                                           \
+    fail_unless (gst_tag_list_get_tag_size (list,field) > 0);              \
+    fail_unless (gst_tag_list_get_tag_size (list,field) == 1);             \
+    fail_unless (gst_tag_list_get_double_index (list, field, 0, &___d));   \
+    fail_unless (MATCH_DOUBLE (d, ___d),                                   \
+        "%f does not match expected %f", ___d, d);                         \
+  }
+
+GST_START_TEST (test_musicbrainz_tag_registration)
+{
+  GstTagList *list;
+
+  gst_tag_register_musicbrainz_tags ();
+
+  list = gst_tag_list_new ();
+
+  /* musicbrainz tags aren't registered yet */
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_TRACKID", "123456");
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_ARTISTID", "234567");
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_ALBUMID", "345678");
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_ALBUMARTISTID", "4567890");
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_TRMID", "5678901");
+  /* MUSICBRAINZ_SORTNAME = GST_TAG_ARTIST_SORTNAME now */
+  gst_vorbis_tag_add (list, "MUSICBRAINZ_SORTNAME", "Five, 678901");
+
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_MUSICBRAINZ_TRACKID, "123456");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_MUSICBRAINZ_ARTISTID, "234567");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_MUSICBRAINZ_ALBUMID, "345678");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_MUSICBRAINZ_ALBUMARTISTID,
+      "4567890");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_MUSICBRAINZ_TRMID, "5678901");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ARTIST_SORTNAME, "Five, 678901");
+
+  gst_tag_list_free (list);
+}
+
+GST_END_TEST;
+
+/* is there an easier way to compare two structures / tagslists? */
+static gboolean
+taglists_are_equal (const GstTagList * list_1, const GstTagList * list_2)
+{
+  GstCaps *c_list_1 = gst_caps_new_empty ();
+  GstCaps *c_list_2 = gst_caps_new_empty ();
+  gboolean ret;
+
+  gst_caps_append_structure (c_list_1,
+      gst_structure_copy ((GstStructure *) list_1));
+  gst_caps_append_structure (c_list_2,
+      gst_structure_copy ((GstStructure *) list_2));
+
+  ret = gst_caps_is_equal (c_list_2, c_list_1);
+
+  gst_caps_unref (c_list_1);
+  gst_caps_unref (c_list_2);
+
+  return ret;
+}
+
+GST_START_TEST (test_vorbis_tags)
+{
+  GstTagList *list;
+
+  list = gst_tag_list_new ();
+
+  /* NULL pointers aren't allowed */
+  ASSERT_CRITICAL (gst_vorbis_tag_add (NULL, "key", "value"));
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, NULL, "value"));
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, "key", NULL));
+
+  /* must be UTF-8 */
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, "key", "v\377lue"));
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, "k\377y", "value"));
+
+  /* key can't have a '=' in it */
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, "k=y", "value"));
+  ASSERT_CRITICAL (gst_vorbis_tag_add (list, "key=", "value"));
+
+  /* should be allowed in values though */
+  gst_vorbis_tag_add (list, "keeey", "va=ue");
+
+  /* add some tags */
+  gst_vorbis_tag_add (list, "TITLE", "Too");
+  gst_vorbis_tag_add (list, "ALBUM", "Aoo");
+  gst_vorbis_tag_add (list, "ARTIST", "Alboo");
+  gst_vorbis_tag_add (list, "PERFORMER", "Perfoo");
+  gst_vorbis_tag_add (list, "COPYRIGHT", "Copyfoo");
+  gst_vorbis_tag_add (list, "DESCRIPTION", "Descoo");
+  gst_vorbis_tag_add (list, "LICENSE", "Licoo");
+  gst_vorbis_tag_add (list, "LICENSE",
+      "http://creativecommons.org/licenses/by/3.0/");
+  gst_vorbis_tag_add (list, "LOCATION", "Bristol, UK");
+  gst_vorbis_tag_add (list, "ORGANIZATION", "Orgoo");
+  gst_vorbis_tag_add (list, "GENRE", "Goo");
+  gst_vorbis_tag_add (list, "CONTACT", "Coo");
+  gst_vorbis_tag_add (list, "COMMENT", "Stroodle is good");
+  gst_vorbis_tag_add (list, "COMMENT", "Peroxysulfid stroodles the brain");
+
+  gst_vorbis_tag_add (list, "TRACKNUMBER", "5");
+  gst_vorbis_tag_add (list, "TRACKTOTAL", "77");
+  gst_vorbis_tag_add (list, "DISCNUMBER", "1");
+  gst_vorbis_tag_add (list, "DISCTOTAL", "2");
+  gst_vorbis_tag_add (list, "DATE", "1954-12-31");
+
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_TITLE, "Too");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ALBUM, "Aoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ARTIST, "Alboo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_PERFORMER, "Perfoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_COPYRIGHT, "Copyfoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_DESCRIPTION, "Descoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LICENSE, "Licoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LICENSE_URI,
+      "http://creativecommons.org/licenses/by/3.0/");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_GEO_LOCATION_NAME, "Bristol, UK");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ORGANIZATION, "Orgoo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_GENRE, "Goo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_CONTACT, "Coo");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_COMMENT,
+      "Peroxysulfid stroodles the brain");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_COMMENT, "Stroodle is good");
+  ASSERT_TAG_LIST_HAS_UINT (list, GST_TAG_TRACK_NUMBER, 5);
+  ASSERT_TAG_LIST_HAS_UINT (list, GST_TAG_TRACK_COUNT, 77);
+  ASSERT_TAG_LIST_HAS_UINT (list, GST_TAG_ALBUM_VOLUME_NUMBER, 1);
+  ASSERT_TAG_LIST_HAS_UINT (list, GST_TAG_ALBUM_VOLUME_COUNT, 2);
+
+  {
+    GDate *date = NULL;
+
+    fail_unless (gst_tag_list_get_date (list, GST_TAG_DATE, &date));
+    fail_unless (date != NULL);
+    fail_unless (g_date_get_day (date) == 31);
+    fail_unless (g_date_get_month (date) == G_DATE_DECEMBER);
+    fail_unless (g_date_get_year (date) == 1954);
+
+    g_date_free (date);
+  }
+
+  /* unknown vorbis comments should go into a GST_TAG_EXTENDED_COMMENT */
+  gst_vorbis_tag_add (list, "CoEdSub_ID", "98172AF-973-10-B");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_EXTENDED_COMMENT,
+      "CoEdSub_ID=98172AF-973-10-B");
+  gst_vorbis_tag_add (list, "RuBuWuHash", "1337BA42F91");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_EXTENDED_COMMENT,
+      "RuBuWuHash=1337BA42F91");
+
+  gst_vorbis_tag_add (list, "REPLAYGAIN_REFERENCE_LOUDNESS", "89.");
+  ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_REFERENCE_LEVEL, 89.);
+  gst_vorbis_tag_add (list, "REPLAYGAIN_TRACK_GAIN", "+12.36");
+  ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_TRACK_GAIN, +12.36);
+  gst_vorbis_tag_add (list, "REPLAYGAIN_TRACK_PEAK", "0.96349");
+  ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_TRACK_PEAK, 0.96349);
+  gst_vorbis_tag_add (list, "REPLAYGAIN_ALBUM_GAIN", "+10.12");
+  ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_ALBUM_GAIN, +10.12);
+  /* now check that we can parse floating point numbers with any separator
+   * (',' or '.') regardless of the current locale */
+  gst_vorbis_tag_add (list, "REPLAYGAIN_ALBUM_PEAK", "0,98107");
+  ASSERT_TAG_LIST_HAS_DOUBLE (list, GST_TAG_ALBUM_PEAK, 0.98107);
+  gst_vorbis_tag_add (list, "LICENSE", "http://foo.com/license-1.html");
+
+  /* make sure we can convert back and forth without loss */
+  {
+    GstTagList *new_list, *even_newer_list;
+    GstBuffer *buf, *buf2;
+    gchar *vendor_id = NULL;
+
+    buf = gst_tag_list_to_vorbiscomment_buffer (list,
+        (const guint8 *) "\003vorbis", 7, "libgstunittest");
+    fail_unless (buf != NULL);
+    new_list = gst_tag_list_from_vorbiscomment_buffer (buf,
+        (const guint8 *) "\003vorbis", 7, &vendor_id);
+    fail_unless (new_list != NULL);
+    fail_unless (vendor_id != NULL);
+    g_free (vendor_id);
+    vendor_id = NULL;
+
+    GST_LOG ("new_list = %" GST_PTR_FORMAT, new_list);
+    fail_unless (taglists_are_equal (list, new_list));
+
+    buf2 = gst_tag_list_to_vorbiscomment_buffer (new_list,
+        (const guint8 *) "\003vorbis", 7, "libgstunittest");
+    fail_unless (buf2 != NULL);
+    even_newer_list = gst_tag_list_from_vorbiscomment_buffer (buf2,
+        (const guint8 *) "\003vorbis", 7, &vendor_id);
+    fail_unless (even_newer_list != NULL);
+    fail_unless (vendor_id != NULL);
+    g_free (vendor_id);
+    vendor_id = NULL;
+
+    GST_LOG ("even_newer_list = %" GST_PTR_FORMAT, even_newer_list);
+    fail_unless (taglists_are_equal (new_list, even_newer_list));
+
+    gst_tag_list_free (new_list);
+    gst_tag_list_free (even_newer_list);
+    gst_buffer_unref (buf);
+    gst_buffer_unref (buf2);
+  }
+
+  /* there can only be one language per taglist ... */
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "fr");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "fr");
+
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "[fr]");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "fr");
+
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "French [fr]");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "fr");
+
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "[eng] English");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "eng");
+
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "eng");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "eng");
+
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "[eng]");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "eng");
+
+  /* free-form *sigh* */
+  gst_tag_list_free (list);
+  list = gst_tag_list_new ();
+  gst_vorbis_tag_add (list, "LANGUAGE", "English");
+  ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_LANGUAGE_CODE, "English");
+
+  /* now, while we still have a taglist, test _to_vorbiscomment_buffer() */
+  {
+    GstBuffer *buf1, *buf2;
+    guint8 *data1, *data2;
+    gsize size1, size2;
+
+    ASSERT_CRITICAL (gst_tag_list_to_vorbiscomment_buffer (NULL,
+            (const guint8 *) "x", 1, "x"));
+
+    buf1 = gst_tag_list_to_vorbiscomment_buffer (list, NULL, 0, NULL);
+    fail_unless (buf1 != NULL);
+
+    buf2 = gst_tag_list_to_vorbiscomment_buffer (list,
+        (const guint8 *) "foo", 3, NULL);
+    fail_unless (buf2 != NULL);
+
+    data1 = gst_buffer_map (buf1, &size1, NULL, GST_MAP_READ);
+    data2 = gst_buffer_map (buf2, &size2, NULL, GST_MAP_READ);
+
+    fail_unless (memcmp (data1, data2 + 3, size1) == 0);
+
+    gst_buffer_unmap (buf2, data2, size2);
+    gst_buffer_unmap (buf1, data1, size1);
+
+    gst_buffer_unref (buf1);
+    gst_buffer_unref (buf2);
+  }
+
+  gst_tag_list_free (list);
+
+  /* make sure gst_tag_list_from_vorbiscomment_buffer() works with an
+   * empty ID (for Speex) */
+  {
+    const guint8 speex_comments_buf1[] = { 0x03, 0x00, 0x00, 0x00, 'f', 'o',
+      'o', 0x00, 0x00, 0x00, 0x00
+    };
+    GstBuffer *buf;
+    gchar *vendor = NULL;
+
+    buf = gst_buffer_new ();
+    gst_buffer_take_memory (buf, -1,
+        gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+            (gpointer) speex_comments_buf1, NULL,
+            sizeof (speex_comments_buf1), 0, sizeof (speex_comments_buf1)));
+
+    /* make sure it doesn't memcmp over the end of the buffer */
+    fail_unless (gst_tag_list_from_vorbiscomment_buffer (buf,
+            (const guint8 *) "averylongstringbrownfoxjumpoverthefence", 39,
+            &vendor) == NULL);
+    fail_unless (vendor == NULL);
+
+    /* make sure it bails out if the ID doesn't match */
+    fail_unless (gst_tag_list_from_vorbiscomment_buffer (buf,
+            (guint8 *) "short", 4, &vendor) == NULL);
+    fail_unless (vendor == NULL);
+
+    /* now read properly */
+    list = gst_tag_list_from_vorbiscomment_buffer (buf, NULL, 0, &vendor);
+    fail_unless (vendor != NULL);
+    fail_unless_equals_string (vendor, "foo");
+    fail_unless (list != NULL);
+    fail_unless (gst_structure_n_fields ((GstStructure *) list) == 0);
+    g_free (vendor);
+    gst_tag_list_free (list);
+
+    /* now again without vendor */
+    list = gst_tag_list_from_vorbiscomment_buffer (buf, NULL, 0, NULL);
+    fail_unless (list != NULL);
+    fail_unless (gst_structure_n_fields ((GstStructure *) list) == 0);
+    gst_tag_list_free (list);
+
+    gst_buffer_unref (buf);
+  }
+
+  /* the same with an ID */
+  {
+    const guint8 vorbis_comments_buf[] = { 0x03, 'v', 'o', 'r', 'b', 'i', 's',
+      0x03, 0x00, 0x00, 0x00, 'f', 'o', 'o', 0x01, 0x00, 0x00, 0x00,
+      strlen ("ARTIST=foo bar"), 0x00, 0x00, 0x00, 'A', 'R', 'T', 'I', 'S',
+      'T', '=', 'f', 'o', 'o', ' ', 'b', 'a', 'r'
+    };
+    GstBuffer *buf;
+    gchar *vendor = NULL;
+
+    buf = gst_buffer_new ();
+    gst_buffer_take_memory (buf, -1,
+        gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+            (gpointer) vorbis_comments_buf, NULL,
+            sizeof (vorbis_comments_buf), 0, sizeof (vorbis_comments_buf)));
+
+    /* make sure it doesn't memcmp over the end of the buffer */
+    fail_unless (gst_tag_list_from_vorbiscomment_buffer (buf,
+            (const guint8 *) "averylongstringbrownfoxjumpoverthefence", 39,
+            &vendor) == NULL);
+    fail_unless (vendor == NULL);
+
+    /* make sure it bails out if the ID doesn't match */
+    fail_unless (gst_tag_list_from_vorbiscomment_buffer (buf,
+            (guint8 *) "short", 4, &vendor) == NULL);
+    fail_unless (vendor == NULL);
+
+    /* now read properly */
+    list = gst_tag_list_from_vorbiscomment_buffer (buf,
+        (guint8 *) "\003vorbis", 7, &vendor);
+    fail_unless (vendor != NULL);
+    fail_unless_equals_string (vendor, "foo");
+    fail_unless (list != NULL);
+    fail_unless (gst_structure_n_fields ((GstStructure *) list) == 1);
+    ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ARTIST, "foo bar");
+    g_free (vendor);
+    gst_tag_list_free (list);
+
+    /* now again without vendor */
+    list = gst_tag_list_from_vorbiscomment_buffer (buf,
+        (guint8 *) "\003vorbis", 7, NULL);
+    fail_unless (list != NULL);
+    fail_unless (gst_structure_n_fields ((GstStructure *) list) == 1);
+    ASSERT_TAG_LIST_HAS_STRING (list, GST_TAG_ARTIST, "foo bar");
+    gst_tag_list_free (list);
+
+    gst_buffer_unref (buf);
+  }
+
+  /* check date with time */
+  {
+    GDate *date = NULL;
+
+    list = gst_tag_list_new ();
+    gst_vorbis_tag_add (list, "DATE", "2006-09-25 22:02:38");
+
+    fail_unless (gst_tag_list_get_date_index (list, GST_TAG_DATE, 0, &date));
+    fail_unless (date != NULL);
+    fail_unless (g_date_get_day (date) == 25);
+    fail_unless (g_date_get_month (date) == G_DATE_SEPTEMBER);
+    fail_unless (g_date_get_year (date) == 2006);
+
+    g_date_free (date);
+    gst_tag_list_free (list);
+  }
+
+  /* check date with month/day of 00-00 */
+  {
+    GDate *date = NULL;
+
+    list = gst_tag_list_new ();
+    gst_vorbis_tag_add (list, "DATE", "1992-00-00");
+
+    fail_unless (gst_tag_list_get_date_index (list, GST_TAG_DATE, 0, &date));
+    fail_unless (date != NULL);
+    fail_unless (g_date_get_year (date) == 1992);
+
+    g_date_free (date);
+    gst_tag_list_free (list);
+  }
+
+  /* check date with valid month, but day of 00 */
+  {
+    GDate *date = NULL;
+
+    list = gst_tag_list_new ();
+    gst_vorbis_tag_add (list, "DATE", "1992-05-00");
+
+    fail_unless (gst_tag_list_get_date_index (list, GST_TAG_DATE, 0, &date));
+    fail_unless (date != NULL);
+    fail_unless (g_date_get_year (date) == 1992);
+    fail_unless (g_date_get_month (date) == G_DATE_MAY);
+
+    g_date_free (date);
+    gst_tag_list_free (list);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_id3_tags)
+{
+  guint i;
+
+  fail_unless (gst_tag_id3_genre_count () > 0);
+
+  for (i = 0; i < gst_tag_id3_genre_count (); ++i) {
+    const gchar *genre;
+
+    genre = gst_tag_id3_genre_get (i);
+    GST_LOG ("genre: %s", genre);
+    fail_unless (genre != NULL);
+  }
+
+  {
+    /* TODO: GstTagList *gst_tag_list_new_from_id3v1 (const guint8 *data) */
+  }
+
+  /* gst_tag_from_id3_tag */
+  fail_unless (gst_tag_from_id3_tag ("TALB") != NULL);
+  ASSERT_CRITICAL (gst_tag_from_id3_tag (NULL));
+  fail_unless (gst_tag_from_id3_tag ("R2D2") == NULL);
+  fail_unless_equals_string (gst_tag_from_id3_tag ("WCOP"),
+      GST_TAG_COPYRIGHT_URI);
+
+  /* gst_tag_from_id3_user_tag */
+  ASSERT_CRITICAL (gst_tag_from_id3_user_tag (NULL, "foo"));
+  ASSERT_CRITICAL (gst_tag_from_id3_user_tag ("foo", NULL));
+  fail_unless (gst_tag_from_id3_user_tag ("R2D2", "R2D2") == NULL);
+
+  /* gst_tag_to_id3_tag */
+  ASSERT_CRITICAL (gst_tag_to_id3_tag (NULL));
+  fail_unless (gst_tag_to_id3_tag ("R2D2") == NULL);
+  fail_unless (gst_tag_to_id3_tag (GST_TAG_ARTIST) != NULL);
+  fail_unless_equals_string (gst_tag_to_id3_tag (GST_TAG_COPYRIGHT_URI),
+      "WCOP");
+
+  fail_unless (GST_TYPE_TAG_IMAGE_TYPE != 0);
+  fail_unless (g_type_name (GST_TYPE_TAG_IMAGE_TYPE) != NULL);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_id3v1_utf8_tag)
+{
+  const guint8 id3v1[128] = {
+    /* marker */
+    'T', 'A', 'G',
+    /* title (30 bytes) */
+    'D', 0xc3, 0xad, 'v', 'k', 'a', ' ', 's',
+    ' ', 'p', 'e', 'r', 'l', 'a', 'm', 'i',
+    ' ', 'v', 'e', ' ', 'v', 'l', 'a', 's',
+    'e', 'c', 'h', 0, 0, 0,
+    /* artist (30 bytes) */
+    'A', 'l', 'e', 0xc5, 0xa1, ' ', 'B', 'r', 'i', 'c', 'h', 't', 'a',
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    /* album (30 bytes) */
+    'B', 'e', 's', 't', ' ', 'o', 'f', ' ', '(', 'P', 'r', 'o', 's', 't',
+    0xc4, 0x9b, ' ', 0xc3, 0xba, 0xc5, 0xbe, 'a', 's', 'n', 0xc3, 0xbd, ')',
+    0, 0, 0,
+    /* year (4 bytes) */
+    '2', '0', '0', '0',
+    /* comment (28 bytes) */
+    '-', '-', '-', ' ', 0xc4, 0x8d, 'e', 's', 'k', 0xc3, 0xa9, ' ', 'p',
+    0xc3, 0xad, 's', 'n', 'i', 0xc4, 0x8d, 'k', 'y', ' ', '-', '-', '-',
+    0, 0,
+    /* track number */
+    0, 0,
+    /* genre */
+    0x11
+  };
+  GstTagList *tags;
+  GDate *d;
+  gchar *s;
+
+  /* set this, to make sure UTF-8 strings are really interpreted properly
+   * as UTF-8, regardless of the locale set */
+  g_setenv ("GST_ID3V1_TAG_ENCODING", "WINDOWS-1250", TRUE);
+
+  tags = gst_tag_list_new_from_id3v1 (id3v1);
+  fail_unless (tags != NULL);
+
+  GST_LOG ("Got tags: %" GST_PTR_FORMAT, tags);
+
+  s = NULL;
+  fail_unless (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s));
+  fail_unless (s != NULL);
+  fail_unless_equals_string (s, "Dívka s perlami ve vlasech");
+  g_free (s);
+
+  s = NULL;
+  fail_unless (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &s));
+  fail_unless (s != NULL);
+  fail_unless_equals_string (s, "Aleš Brichta");
+  g_free (s);
+
+  s = NULL;
+  fail_unless (gst_tag_list_get_string (tags, GST_TAG_ALBUM, &s));
+  fail_unless (s != NULL);
+  fail_unless_equals_string (s, "Best of (Prostě úžasný)");
+  g_free (s);
+
+  d = NULL;
+  fail_unless (gst_tag_list_get_date (tags, GST_TAG_DATE, &d));
+  fail_unless (d != NULL);
+  fail_unless_equals_int (g_date_get_year (d), 2000);
+  g_date_free (d);
+  d = NULL;
+
+  gst_tag_list_free (tags);
+
+  g_unsetenv ("GST_ID3V1_TAG_ENCODING");
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_language_utils)
+{
+  gchar **lang_codes, **c;
+
+#define ASSERT_STRINGS_EQUAL fail_unless_equals_string
+
+  lang_codes = gst_tag_get_language_codes ();
+  fail_unless (lang_codes != NULL);
+  fail_unless (*lang_codes != NULL);
+
+  for (c = lang_codes; c != NULL && *c != NULL; ++c) {
+    const gchar *lang_name, *c1, *c2t, *c2b;
+
+    lang_name = gst_tag_get_language_name (*c);
+    fail_unless (lang_name != NULL);
+    fail_unless (g_utf8_validate (lang_name, -1, NULL));
+
+    c1 = gst_tag_get_language_code_iso_639_1 (*c);
+    fail_unless (c1 != NULL);
+    fail_unless (g_utf8_validate (c1, -1, NULL));
+
+    c2t = gst_tag_get_language_code_iso_639_2T (*c);
+    fail_unless (c2t != NULL);
+    fail_unless (g_utf8_validate (c2t, -1, NULL));
+
+    c2b = gst_tag_get_language_code_iso_639_2B (*c);
+    fail_unless (c2b != NULL);
+    fail_unless (g_utf8_validate (c2b, -1, NULL));
+
+    ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 (*c), *c);
+    ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 (c2t), *c);
+    ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 (c2b), *c);
+
+    GST_DEBUG ("[%s] %s %s %s : %s\n", *c, c1, c2t, c2b, lang_name);
+
+  }
+  g_strfreev (lang_codes);
+
+  fail_unless (gst_tag_get_language_name ("de") != NULL);
+  fail_unless (gst_tag_get_language_name ("deu") != NULL);
+  fail_unless (gst_tag_get_language_name ("ger") != NULL);
+  fail_unless_equals_string (gst_tag_get_language_name ("deu"),
+      gst_tag_get_language_name ("ger"));
+  fail_unless_equals_string (gst_tag_get_language_name ("de"),
+      gst_tag_get_language_name ("ger"));
+  fail_unless (gst_tag_get_language_name ("de") !=
+      gst_tag_get_language_name ("fr"));
+
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code ("deu"), "de");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code ("de"), "de");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code ("ger"), "de");
+
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 ("deu"), "de");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 ("de"), "de");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_1 ("ger"), "de");
+
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2T ("de"), "deu");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2T ("deu"), "deu");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2T ("ger"), "deu");
+
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2B ("de"), "ger");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2B ("deu"), "ger");
+  ASSERT_STRINGS_EQUAL (gst_tag_get_language_code_iso_639_2B ("ger"), "ger");
+}
+
+GST_END_TEST;
+
+#define SPECIFIC_L "http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/"
+#define GENERIC_L "http://creativecommons.org/licenses/by/1.0/"
+#define DERIVED_L "http://creativecommons.org/licenses/sampling+/1.0/tw/"
+
+GST_START_TEST (test_license_utils)
+{
+  GHashTable *ht;
+  GError *err = NULL;
+  gchar **liblicense_refs, **r;
+  gchar **lrefs, **l;
+  gchar *path, *data = NULL;
+  gsize data_len;
+
+  gst_debug_set_threshold_for_name ("tag-licenses", GST_LEVEL_NONE);
+
+  /* test jurisdiction-specific license */
+  fail_unless_equals_int (gst_tag_get_license_flags (SPECIFIC_L), 0x01010703);
+  fail_unless_equals_string (gst_tag_get_license_nick (SPECIFIC_L),
+      "CC BY-NC-SA 2.5 SCOTLAND");
+  fail_unless_equals_string (gst_tag_get_license_version (SPECIFIC_L), "2.5");
+  fail_unless_equals_string (gst_tag_get_license_jurisdiction (SPECIFIC_L),
+      "scotland");
+
+  g_setenv ("GST_TAG_LICENSE_TRANSLATIONS_LANG", "C", TRUE);
+  fail_unless_equals_string (gst_tag_get_license_title (SPECIFIC_L),
+      "Attribution-NonCommercial-ShareAlike");
+  fail_unless (gst_tag_get_license_description (SPECIFIC_L) == NULL);
+
+  /* test generic license */
+  fail_unless_equals_int (gst_tag_get_license_flags (GENERIC_L), 0x01000307);
+  fail_unless_equals_string (gst_tag_get_license_nick (GENERIC_L), "CC BY 1.0");
+  fail_unless_equals_string (gst_tag_get_license_version (GENERIC_L), "1.0");
+  fail_unless (gst_tag_get_license_jurisdiction (GENERIC_L) == NULL);
+
+  g_setenv ("GST_TAG_LICENSE_TRANSLATIONS_LANG", "C", TRUE);
+  fail_unless_equals_string (gst_tag_get_license_title (GENERIC_L),
+      "Attribution");
+  fail_unless_equals_string (gst_tag_get_license_description (GENERIC_L),
+      "You must attribute the work in the manner specified by the author or licensor.");
+
+#ifdef ENABLE_NLS
+  g_setenv ("GST_TAG_LICENSE_TRANSLATIONS_LANG", "fr", TRUE);
+  fail_unless_equals_string (gst_tag_get_license_title (GENERIC_L),
+      "Paternité");
+  fail_unless_equals_string (gst_tag_get_license_description (GENERIC_L),
+      "L'offrant autorise les autres à reproduire, distribuer et communiquer cette création au public. En échange, les personnes qui acceptent ce contrat doivent citer le nom de l'auteur original.");
+#endif
+
+  /* test derived (for a certain jurisdiction) license */
+  fail_unless_equals_int (gst_tag_get_license_flags (DERIVED_L), 0x0100030d);
+  fail_unless_equals_string (gst_tag_get_license_nick (DERIVED_L),
+      "CC SAMPLING+ 1.0 TW");
+  fail_unless_equals_string (gst_tag_get_license_version (DERIVED_L), "1.0");
+  fail_unless_equals_string (gst_tag_get_license_jurisdiction (DERIVED_L),
+      "tw");
+
+  g_setenv ("GST_TAG_LICENSE_TRANSLATIONS_LANG", "C", TRUE);
+  fail_unless_equals_string (gst_tag_get_license_title (DERIVED_L),
+      "Sampling Plus");
+  fail_unless_equals_string (gst_tag_get_license_description (GENERIC_L),
+      "You must attribute the work in the manner specified by the author or licensor.");
+
+  /* test all we know about */
+  lrefs = gst_tag_get_licenses ();
+  fail_unless (lrefs != NULL);
+  fail_unless (*lrefs != NULL);
+
+  GST_INFO ("%d licenses", g_strv_length (lrefs));
+  fail_unless (g_strv_length (lrefs) >= 376);
+
+  ht = g_hash_table_new (g_str_hash, g_str_equal);
+
+  for (l = lrefs; l != NULL && *l != NULL; ++l) {
+    const gchar *ref, *nick, *title, *desc G_GNUC_UNUSED;
+
+    ref = (const gchar *) *l;
+    nick = gst_tag_get_license_nick (ref);
+    title = gst_tag_get_license_title (ref);
+    desc = gst_tag_get_license_description (ref);
+    fail_unless (nick != NULL, "no nick for license '%s'", ref);
+    fail_unless (title != NULL, "no title for license '%s'", ref);
+    GST_LOG ("ref: %s [nick %s]", ref, (nick) ? nick : "none");
+    GST_TRACE ("    %s : %s", title, (desc) ? desc : "(no description)");
+
+    /* make sure the list contains no duplicates */
+    fail_if (g_hash_table_lookup (ht, (gpointer) ref) != NULL);
+    g_hash_table_insert (ht, (gpointer) ref, (gpointer) "meep");
+  }
+  g_hash_table_destroy (ht);
+
+  /* trailing slash shouldn't make a difference */
+  fail_unless_equals_int (gst_tag_get_license_flags
+      ("http://creativecommons.org/licenses/by-nd/1.0/"),
+      gst_tag_get_license_flags
+      ("http://creativecommons.org/licenses/by-nd/1.0"));
+  fail_unless_equals_string (gst_tag_get_license_nick
+      ("http://creativecommons.org/licenses/by-nd/1.0/"),
+      gst_tag_get_license_nick
+      ("http://creativecommons.org/licenses/by-nd/1.0"));
+  fail_unless_equals_int (gst_tag_get_license_flags
+      ("http://creativecommons.org/licenses/by-nd/2.5/ca/"),
+      gst_tag_get_license_flags
+      ("http://creativecommons.org/licenses/by-nd/2.5/ca"));
+  fail_unless_equals_string (gst_tag_get_license_nick
+      ("http://creativecommons.org/licenses/by-nd/2.5/ca/"),
+      gst_tag_get_license_nick
+      ("http://creativecommons.org/licenses/by-nd/2.5/ca"));
+
+  /* unknown licenses */
+  fail_unless (gst_tag_get_license_nick
+      ("http://creativecommons.org/licenses/by-nd/25/ca/") == NULL);
+  fail_unless (gst_tag_get_license_flags
+      ("http://creativecommons.org/licenses/by-nd/25/ca") == 0);
+  fail_unless (gst_tag_get_license_jurisdiction
+      ("http://creativecommons.org/licenses/by-nd/25/ca/") == NULL);
+  fail_unless (gst_tag_get_license_jurisdiction
+      ("http://creativecommons.org/licenses/by-nd/25/ca") == NULL);
+  fail_unless (gst_tag_get_license_title
+      ("http://creativecommons.org/licenses/by-nd/25/ca") == NULL);
+  fail_unless (gst_tag_get_license_jurisdiction
+      ("http://creativecommons.org/licenses/by-nd/25/ca") == NULL);
+
+  /* unknown prefixes even */
+  fail_unless (gst_tag_get_license_nick
+      ("http://copycats.org/licenses/by-nd/2.5/ca/") == NULL);
+  fail_unless (gst_tag_get_license_flags
+      ("http://copycats.org/licenses/by-nd/2.5/ca") == 0);
+  fail_unless (gst_tag_get_license_jurisdiction
+      ("http://copycats.org/licenses/by-nd/2.5/ca/") == NULL);
+  fail_unless (gst_tag_get_license_title
+      ("http://copycats.org/licenses/by-nd/2.5/ca/") == NULL);
+  fail_unless (gst_tag_get_license_description
+      ("http://copycats.org/licenses/by-nd/2.5/ca/") == NULL);
+
+  /* read list of liblicense refs from file */
+  path = g_build_filename (GST_TEST_FILES_PATH, "license-uris", NULL);
+  GST_LOG ("reading file '%s'", path);
+  if (!g_file_get_contents (path, &data, &data_len, &err)) {
+    g_error ("error loading test file: %s", err->message);
+  }
+
+  while (data_len > 0 && data[data_len - 1] == '\n') {
+    data[--data_len] = '\0';
+  }
+
+  liblicense_refs = g_strsplit (data, "\n", -1);
+  g_free (data);
+  g_free (path);
+
+  fail_unless (g_strv_length (lrefs) >= g_strv_length (liblicense_refs));
+
+  for (r = liblicense_refs; r != NULL && *r != NULL; ++r) {
+    GstTagLicenseFlags flags;
+    const gchar *version, *nick, *jur;
+    const gchar *ref = *r;
+
+    GST_LOG ("liblicense ref: %s", ref);
+
+    version = gst_tag_get_license_version (ref);
+    if (strstr (ref, "publicdomain") != NULL)
+      fail_unless (version == NULL);
+    else
+      fail_unless (version != NULL, "expected version for license %s", ref);
+
+    flags = gst_tag_get_license_flags (ref);
+    fail_unless (flags != 0, "expected non-zero flags for license %s", ref);
+
+    nick = gst_tag_get_license_nick (ref);
+    fail_unless (nick != NULL, "expected nick for license %s", ref);
+
+    jur = gst_tag_get_license_jurisdiction (ref);
+    if (g_str_has_suffix (ref, "de/")) {
+      fail_unless_equals_string (jur, "de");
+    } else if (g_str_has_suffix (ref, "scotland")) {
+      fail_unless_equals_string (jur, "scotland");
+    } else if (g_str_has_suffix (ref, ".0") || g_str_has_suffix (ref, ".1")) {
+      fail_unless (jur == NULL);
+    }
+  }
+
+  g_strfreev (liblicense_refs);
+  g_strfreev (lrefs);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_xmp_formatting)
+{
+  GstTagList *list;
+  GstBuffer *buf;
+  const gchar *text;
+  gsize len;
+
+  /* test data */
+  list = gst_tag_list_new_full (GST_TAG_TITLE, "test title",
+      GST_TAG_DESCRIPTION, "test decription",
+      GST_TAG_KEYWORDS, "keyword1", GST_TAG_KEYWORDS, "keyword2", NULL);
+
+  buf = gst_tag_list_to_xmp_buffer (list, FALSE);
+  fail_unless (buf != NULL);
+
+  text = gst_buffer_map (buf, &len, NULL, GST_MAP_READ);
+
+  /* check the content */
+  fail_unless (g_strrstr_len (text, len, "<?xpacket begin") == text);
+  fail_unless (g_strrstr_len (text, len, ">test title<") != NULL);
+  fail_unless (g_strrstr_len (text, len, ">test decription<") != NULL);
+  fail_unless (g_strrstr_len (text, len, ">keyword1<") != NULL);
+  fail_unless (g_strrstr_len (text, len, ">keyword2<") != NULL);
+  fail_unless (g_strrstr_len (text, len, "<?xpacket end") != NULL);
+  gst_buffer_unmap (buf, (gpointer) text, len);
+
+  gst_buffer_unref (buf);
+  gst_tag_list_free (list);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_xmp_parsing)
+{
+  GstTagList *list;
+  GstBuffer *buf;
+  guint i, result_size;
+  gchar *text;
+  const gchar *xmp_header =
+      "<?xpacket begin=\"\xEF\xBB\xBF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>"
+      "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"GStreamer\">"
+      "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">";
+  const gchar *xmp_footer = "</rdf:RDF>" "</x:xmpmeta>" "<?xpacket end=\"r\"?>";
+  struct
+  {
+    const gchar *xmp_data;
+    gint result_size;
+    gint result_test;
+  } test_data[] = {
+    {
+    "", -1, -1}, {
+    "<rdf:Description rdf:about=\"\" />", 0, -1}, {
+    "<rdf:Description rdf:about=\"\"></rdf:Description>", 0, -1}, {
+    "<rdf:Description    rdf:about=\"\"    ></rdf:Description>", 0, -1}, {
+    "<rdf:Description rdf:about=\"\"><dc:description>test</dc:description></rdf:Description>",
+          1, 0}, {
+    "<rdf:Description rdf:about=\"\" dc:description=\"test\"></rdf:Description>",
+          1, 0}, {
+    NULL, -1, -1}
+  };
+
+  /* test data */
+  i = 0;
+  while (test_data[i].xmp_data) {
+    gsize len;
+
+    GST_DEBUG ("trying test-data %u", i);
+
+    text = g_strconcat (xmp_header, test_data[i].xmp_data, xmp_footer, NULL);
+
+    buf = gst_buffer_new ();
+    len = strlen (text) + 1;
+    gst_buffer_take_memory (buf, -1,
+        gst_memory_new_wrapped (0, text, NULL, len, 0, len));
+
+    list = gst_tag_list_from_xmp_buffer (buf);
+    if (test_data[i].result_size >= 0) {
+      fail_unless (list != NULL);
+
+      result_size = gst_structure_n_fields ((GstStructure *) list);
+      fail_unless (result_size == test_data[i].result_size);
+
+      /* check the taglist content */
+      switch (test_data[i].result_test) {
+        case 0:
+          ASSERT_TAG_LIST_HAS_STRING (list, "description", "test");
+          break;
+        default:
+          break;
+      }
+    }
+    if (list)
+      gst_tag_list_free (list);
+
+    gst_buffer_unref (buf);
+    g_free (text);
+    i++;
+  }
+}
+
+GST_END_TEST;
+
+static void
+tag_list_equals (GstTagList * taglist, GstTagList * taglist2)
+{
+  const gchar *name_sent, *name_recv;
+  const GValue *value_sent, *value_recv;
+  gboolean found;
+  gint comparison;
+  gint n_recv;
+  gint n_sent;
+  gint i, j;
+
+  /* verify tags */
+  fail_unless (taglist2 != NULL);
+  n_recv = gst_structure_n_fields (taglist2);
+  n_sent = gst_structure_n_fields (taglist);
+  fail_unless (n_recv == n_sent);
+  fail_unless (n_sent > 0);
+
+  /* FIXME: compare taglist values */
+  for (i = 0; i < n_sent; i++) {
+    name_sent = gst_structure_nth_field_name (taglist, i);
+    value_sent = gst_structure_get_value (taglist, name_sent);
+    found = FALSE;
+    for (j = 0; j < n_recv; j++) {
+      name_recv = gst_structure_nth_field_name (taglist2, j);
+      if (!strcmp (name_sent, name_recv)) {
+        value_recv = gst_structure_get_value (taglist2, name_recv);
+        comparison = gst_value_compare (value_sent, value_recv);
+        if (comparison != GST_VALUE_EQUAL) {
+          gchar *vs = g_strdup_value_contents (value_sent);
+          gchar *vr = g_strdup_value_contents (value_recv);
+          GST_DEBUG ("sent = %s:'%s', recv = %s:'%s'",
+              G_VALUE_TYPE_NAME (value_sent), vs,
+              G_VALUE_TYPE_NAME (value_recv), vr);
+          g_free (vs);
+          g_free (vr);
+        }
+        if (comparison != GST_VALUE_EQUAL &&
+            G_VALUE_HOLDS (value_sent, G_TYPE_DOUBLE)) {
+          gdouble vs;
+          gdouble vr;
+
+          /* add some tolerance for doubles */
+          vs = g_value_get_double (value_sent);
+          vr = g_value_get_double (value_recv);
+          if (vr >= vs - 0.001 && vr <= vs + 0.001)
+            comparison = GST_VALUE_EQUAL;
+        }
+        fail_unless (comparison == GST_VALUE_EQUAL,
+            "tag item %s has been received with different type or value",
+            name_sent);
+        found = TRUE;
+        break;
+      }
+    }
+    fail_unless (found, "tag item %s is lost", name_sent);
+  }
+}
+
+static void
+do_xmp_tag_serialization_deserialization (GstTagList * taglist,
+    const gchar ** schemas)
+{
+  GstTagList *taglist2;
+  GstBuffer *buf;
+
+  buf = gst_tag_list_to_xmp_buffer_full (taglist, TRUE, schemas);
+  taglist2 = gst_tag_list_from_xmp_buffer (buf);
+
+  tag_list_equals (taglist, taglist2);
+
+  gst_buffer_unref (buf);
+  gst_tag_list_free (taglist2);
+}
+
+static void
+do_simple_xmp_tag_serialization_deserialization (const gchar * gsttag,
+    GValue * value)
+{
+  GstTagList *taglist = gst_tag_list_new ();
+
+  gst_tag_list_add_value (taglist, GST_TAG_MERGE_REPLACE, gsttag, value);
+
+  do_xmp_tag_serialization_deserialization (taglist, NULL);
+  gst_tag_list_free (taglist);
+}
+
+GST_START_TEST (test_xmp_tags_serialization_deserialization)
+{
+  GValue value = { 0 };
+  GDate *date;
+  GstDateTime *datetime;
+
+  gst_tag_register_musicbrainz_tags ();
+
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_static_string (&value, "my string");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_ARTIST, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_COPYRIGHT, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DESCRIPTION, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_KEYWORDS, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_TITLE, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_VIDEO_CODEC, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_GEO_LOCATION_COUNTRY,
+      &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_GEO_LOCATION_CITY,
+      &value);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_SUBLOCATION, &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DEVICE_MANUFACTURER,
+      &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DEVICE_MODEL,
+      &value);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_APPLICATION_NAME,
+      &value);
+
+  g_value_set_static_string (&value, "rotate-0");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-0");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-180");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-180");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-270");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-90");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-90");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-270");
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+
+  g_value_unset (&value);
+  g_value_init (&value, G_TYPE_DOUBLE);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LATITUDE, &value);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+  g_value_set_double (&value, 10.5);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LATITUDE, &value);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+  g_value_set_double (&value, -32.375);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LATITUDE, &value);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+
+  g_value_set_double (&value, 0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+  g_value_set_double (&value, 100);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+  g_value_set_double (&value, 500.25);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+  g_value_set_double (&value, -12.75);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+  g_value_set_double (&value, 10.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+  g_value_set_double (&value, 786.125);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+  g_value_set_double (&value, -2.5);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, &value);
+  g_value_set_double (&value, 180.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, &value);
+  g_value_set_double (&value, 359.99);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+  g_value_set_double (&value, 90.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+  g_value_set_double (&value, 359.99);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, 1.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, -2.5);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, GST_TYPE_DATE);
+  date = g_date_new_dmy (22, 3, 2010);
+  gst_value_set_date (&value, date);
+  g_date_free (date);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, G_TYPE_UINT);
+  g_value_set_uint (&value, 0);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value);
+  g_value_set_uint (&value, 100);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value);
+  g_value_set_uint (&value, 22);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_USER_RATING, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, GST_TYPE_DATE_TIME);
+  datetime = gst_date_time_new (0, 2010, 6, 22, 12, 5, 10);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new (0, 2010, 6, 22, 12, 5, 10.000125);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new (0, 2010, 6, 22, 12, 5, 10.000001);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new (0, 2010, 6, 22, 12, 5, 10.123456);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new (-3, 2010, 6, 22, 12, 5, 10.123456);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new (5, 2010, 6, 22, 12, 5, 10.123456);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  datetime = gst_date_time_new_local_time (2010, 12, 2, 12, 5, 10.000043);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_xmp_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  g_value_unset (&value);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_xmp_compound_tags)
+{
+  const gchar *schemas[] = { "Iptc4xmpExt", NULL };
+  GstTagList *taglist = gst_tag_list_new ();
+
+  gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_KEYWORDS, "k1",
+      GST_TAG_KEYWORDS, "k2", GST_TAG_TITLE, "title", GST_TAG_KEYWORDS, "k3",
+      NULL);
+  do_xmp_tag_serialization_deserialization (taglist, NULL);
+  gst_tag_list_free (taglist);
+
+  taglist = gst_tag_list_new ();
+  gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_GEO_LOCATION_COUNTRY,
+      "Brazil", GST_TAG_GEO_LOCATION_CITY, "Campina Grande", NULL);
+  do_xmp_tag_serialization_deserialization (taglist, schemas);
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_exif_parsing)
+{
+  GstTagList *taglist;
+  GstBuffer *buf;
+  GstByteWriter writer;
+  const gchar *str;
+
+  gst_byte_writer_init (&writer);
+
+  /* write the IFD */
+  /* 1 entry */
+  gst_byte_writer_put_uint16_le (&writer, 1);
+
+  /* copyright tag */
+  /* tag id */
+  gst_byte_writer_put_uint16_le (&writer, 0x8298);
+  /* tag type */
+  gst_byte_writer_put_uint16_le (&writer, 0x2);
+  /* count */
+  gst_byte_writer_put_uint32_le (&writer, strlen ("my copyright") + 1);
+  /* offset */
+  gst_byte_writer_put_uint32_le (&writer, 8 + 14);
+
+  /* data */
+  gst_byte_writer_put_string (&writer, "my copyright");
+
+  buf = gst_byte_writer_reset_and_get_buffer (&writer);
+
+  taglist = gst_tag_list_from_exif_buffer (buf, G_LITTLE_ENDIAN, 8);
+
+  fail_unless (gst_structure_n_fields (taglist) == 1);
+  fail_unless (gst_structure_has_field_typed (taglist, GST_TAG_COPYRIGHT,
+          G_TYPE_STRING));
+  str = gst_structure_get_string (taglist, GST_TAG_COPYRIGHT);
+  fail_unless (strcmp (str, "my copyright") == 0);
+
+  gst_tag_list_free (taglist);
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+
+static void
+do_exif_tag_serialization_deserialization (GstTagList * taglist)
+{
+  GstTagList *taglist2;
+  GstBuffer *buf;
+
+  /* LE */
+  buf = gst_tag_list_to_exif_buffer (taglist, G_LITTLE_ENDIAN, 0);
+  taglist2 = gst_tag_list_from_exif_buffer (buf, G_LITTLE_ENDIAN, 0);
+  gst_buffer_unref (buf);
+
+  tag_list_equals (taglist, taglist2);
+  gst_tag_list_free (taglist2);
+
+  /* BE */
+  buf = gst_tag_list_to_exif_buffer (taglist, G_BIG_ENDIAN, 0);
+  taglist2 = gst_tag_list_from_exif_buffer (buf, G_BIG_ENDIAN, 0);
+  gst_buffer_unref (buf);
+
+  tag_list_equals (taglist, taglist2);
+  gst_tag_list_free (taglist2);
+
+  /* APP1 */
+  buf = gst_tag_list_to_exif_buffer_with_tiff_header (taglist);
+  taglist2 = gst_tag_list_from_exif_buffer_with_tiff_header (buf);
+  gst_buffer_unref (buf);
+
+  tag_list_equals (taglist, taglist2);
+  gst_tag_list_free (taglist2);
+}
+
+static void
+do_simple_exif_tag_serialization_deserialization (const gchar * gsttag,
+    GValue * value)
+{
+  GstTagList *taglist = gst_tag_list_new ();
+
+  gst_tag_list_add_value (taglist, GST_TAG_MERGE_REPLACE, gsttag, value);
+  do_exif_tag_serialization_deserialization (taglist);
+
+  gst_tag_list_free (taglist);
+}
+
+/*
+ * Adds tags from multiple ifd tables and tries serializing them
+ */
+GST_START_TEST (test_exif_multiple_tags)
+{
+  GstTagList *taglist;
+  GstDateTime *datetime;
+  GValue value = { 0 };
+
+  gst_tag_register_musicbrainz_tags ();
+
+  taglist = gst_tag_list_new_full (GST_TAG_ARTIST, "artist",
+      GST_TAG_DEVICE_MANUFACTURER, "make",
+      GST_TAG_DEVICE_MODEL, "model", GST_TAG_GEO_LOCATION_LATITUDE, 45.5,
+      GST_TAG_GEO_LOCATION_LONGITUDE, -10.25,
+      GST_TAG_IMAGE_HORIZONTAL_PPI, 300.0,
+      GST_TAG_IMAGE_VERTICAL_PPI, 300.0, NULL);
+
+  g_value_init (&value, GST_TYPE_DATE_TIME);
+  datetime = gst_date_time_new_local_time (2010, 6, 22, 12, 5, 10);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  gst_tag_list_add_value (taglist, GST_TAG_MERGE_APPEND, GST_TAG_DATE_TIME,
+      &value);
+  g_value_unset (&value);
+
+  do_exif_tag_serialization_deserialization (taglist);
+
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_exif_tags_serialization_deserialization)
+{
+  GValue value = { 0 };
+  GstDateTime *datetime = NULL;
+  GstBuffer *buf = NULL;
+  gint i;
+  GstTagList *taglist;
+  guint8 *data;
+
+  gst_tag_register_musicbrainz_tags ();
+
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_static_string (&value, "my string");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_COPYRIGHT, &value);
+  g_value_set_static_string (&value, "ty");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_ARTIST, &value);
+  g_value_set_static_string (&value, "Company Software 1.2b (info)");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_APPLICATION_NAME,
+      &value);
+
+  /* non ascii chars */
+  g_value_set_static_string (&value, "AaÄäEeËëIiÏïOoÖöUuÜü");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_ARTIST, &value);
+  g_value_set_static_string (&value, "Äë");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_ARTIST, &value);
+
+  /* image orientation tests */
+  g_value_set_static_string (&value, "rotate-0");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-0");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-180");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-180");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-270");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-90");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "flip-rotate-90");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+  g_value_set_static_string (&value, "rotate-270");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_IMAGE_ORIENTATION,
+      &value);
+
+  /* exposure program */
+  g_value_set_static_string (&value, "undefined");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "manual");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "normal");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "aperture-priority");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "shutter-priority");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "creative");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "action");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "portrait");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+  g_value_set_static_string (&value, "landscape");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_PROGRAM, &value);
+
+  /* exposure mode */
+  g_value_set_static_string (&value, "auto-exposure");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_MODE, &value);
+  g_value_set_static_string (&value, "manual-exposure");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_MODE, &value);
+  g_value_set_static_string (&value, "auto-bracket");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_MODE, &value);
+
+  /* scene capture type */
+  g_value_set_static_string (&value, "standard");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, &value);
+  g_value_set_static_string (&value, "portrait");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, &value);
+  g_value_set_static_string (&value, "landscape");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, &value);
+  g_value_set_static_string (&value, "night-scene");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, &value);
+
+  g_value_set_static_string (&value, "none");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, &value);
+  g_value_set_static_string (&value, "high-gain-up");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, &value);
+  g_value_set_static_string (&value, "low-gain-up");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, &value);
+  g_value_set_static_string (&value, "high-gain-down");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, &value);
+  g_value_set_static_string (&value, "low-gain-down");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_GAIN_ADJUSTMENT, &value);
+
+  g_value_set_static_string (&value, "auto");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_WHITE_BALANCE, &value);
+  g_value_set_static_string (&value, "manual");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_WHITE_BALANCE, &value);
+
+  g_value_set_static_string (&value, "normal");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_CONTRAST,
+      &value);
+  g_value_set_static_string (&value, "hard");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_CONTRAST,
+      &value);
+  g_value_set_static_string (&value, "soft");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_CONTRAST,
+      &value);
+
+  g_value_set_static_string (&value, "normal");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SATURATION, &value);
+  g_value_set_static_string (&value, "low-saturation");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SATURATION, &value);
+  g_value_set_static_string (&value, "high-saturation");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SATURATION, &value);
+
+  g_value_set_static_string (&value, "normal");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SHARPNESS,
+      &value);
+  g_value_set_static_string (&value, "hard");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SHARPNESS,
+      &value);
+  g_value_set_static_string (&value, "soft");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SHARPNESS,
+      &value);
+
+  g_value_set_static_string (&value, "unknown");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "average");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "center-weighted-average");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "spot");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "multi-spot");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "pattern");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "partial");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+  g_value_set_static_string (&value, "other");
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_METERING_MODE, &value);
+
+  g_value_set_static_string (&value, "dsc");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SOURCE,
+      &value);
+  g_value_set_static_string (&value, "other");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SOURCE,
+      &value);
+  g_value_set_static_string (&value, "transparent-scanner");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SOURCE,
+      &value);
+  g_value_set_static_string (&value, "reflex-scanner");
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_CAPTURING_SOURCE,
+      &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, G_TYPE_DOUBLE);
+  g_value_set_double (&value, 30.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LATITUDE, &value);
+  g_value_set_double (&value, -12.125);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LATITUDE, &value);
+  g_value_set_double (&value, 0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+  g_value_set_double (&value, 65.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+  g_value_set_double (&value, -0.75);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_LONGITUDE, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+  g_value_set_double (&value, 180.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+  g_value_set_double (&value, 0.12345);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, &value);
+  g_value_set_double (&value, 359.9);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+  g_value_set_double (&value, 321.456);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+  g_value_set_double (&value, -12.56);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_ELEVATION, &value);
+
+  g_value_set_double (&value, 0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+  g_value_set_double (&value, 100 / 3.6);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, &value);
+
+  g_value_set_double (&value, 0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, &value);
+  g_value_set_double (&value, 50.25);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, &value);
+
+  g_value_set_double (&value, 0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, &value);
+  g_value_set_double (&value, 2.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, &value);
+  g_value_set_double (&value, 8.75);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, &value);
+
+  g_value_set_double (&value, 20.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_FOCAL_LENGTH, &value);
+  g_value_set_double (&value, 5.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_FOCAL_LENGTH, &value);
+
+  g_value_set_double (&value, 16);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_FOCAL_RATIO, &value);
+  g_value_set_double (&value, 2.7);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_FOCAL_LENGTH, &value);
+
+  g_value_set_double (&value, 96.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_IMAGE_HORIZONTAL_PPI, &value);
+  g_value_set_double (&value, 300.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_IMAGE_HORIZONTAL_PPI, &value);
+  g_value_set_double (&value, 87.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_IMAGE_VERTICAL_PPI, &value);
+  g_value_set_double (&value, 600.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_IMAGE_VERTICAL_PPI, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, 1.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, -2.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, G_TYPE_INT);
+  g_value_set_int (&value, 400);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_ISO_SPEED, &value);
+  g_value_set_int (&value, 1600);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_ISO_SPEED, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, GST_TYPE_DATE_TIME);
+  datetime = gst_date_time_new_local_time (2010, 6, 22, 12, 5, 10);
+  g_value_set_boxed (&value, datetime);
+  gst_date_time_unref (datetime);
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_DATE_TIME, &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, GST_TYPE_BUFFER);
+  buf = gst_buffer_new_and_alloc (1024);
+  data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+  for (i = 0; i < 1024; i++)
+    data[i] = i % 255;
+  gst_buffer_unmap (buf, data, 1024);
+  gst_value_set_buffer (&value, buf);
+  gst_buffer_unref (buf);
+  do_simple_exif_tag_serialization_deserialization (GST_TAG_APPLICATION_DATA,
+      &value);
+  g_value_unset (&value);
+
+  g_value_init (&value, GST_TYPE_FRACTION);
+  gst_value_set_fraction (&value, 1, 1);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SHUTTER_SPEED, &value);
+  gst_value_set_fraction (&value, 1, 30);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SHUTTER_SPEED, &value);
+  gst_value_set_fraction (&value, 1, 200);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SHUTTER_SPEED, &value);
+  gst_value_set_fraction (&value, 1, 8000);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_SHUTTER_SPEED, &value);
+  g_value_unset (&value);
+
+  /* flash is a little bit more tricky, because 2 tags are merged into 1 in
+   * exif */
+  taglist = gst_tag_list_new_full (GST_TAG_CAPTURING_FLASH_FIRED, FALSE,
+      GST_TAG_CAPTURING_FLASH_MODE, "auto", NULL);
+  do_exif_tag_serialization_deserialization (taglist);
+  gst_tag_list_free (taglist);
+
+  taglist = gst_tag_list_new_full (GST_TAG_CAPTURING_FLASH_FIRED, TRUE,
+      GST_TAG_CAPTURING_FLASH_MODE, "auto", NULL);
+  do_exif_tag_serialization_deserialization (taglist);
+  gst_tag_list_free (taglist);
+
+  taglist = gst_tag_list_new_full (GST_TAG_CAPTURING_FLASH_FIRED, FALSE,
+      GST_TAG_CAPTURING_FLASH_MODE, "never", NULL);
+  do_exif_tag_serialization_deserialization (taglist);
+  gst_tag_list_free (taglist);
+
+  taglist = gst_tag_list_new_full (GST_TAG_CAPTURING_FLASH_FIRED, TRUE,
+      GST_TAG_CAPTURING_FLASH_MODE, "always", NULL);
+  do_exif_tag_serialization_deserialization (taglist);
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+static Suite *
+tag_suite (void)
+{
+  Suite *s = suite_create ("tag support library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_musicbrainz_tag_registration);
+  tcase_add_test (tc_chain, test_parse_extended_comment);
+  tcase_add_test (tc_chain, test_vorbis_tags);
+  tcase_add_test (tc_chain, test_id3_tags);
+  tcase_add_test (tc_chain, test_id3v1_utf8_tag);
+  tcase_add_test (tc_chain, test_language_utils);
+  tcase_add_test (tc_chain, test_license_utils);
+  tcase_add_test (tc_chain, test_xmp_formatting);
+  tcase_add_test (tc_chain, test_xmp_parsing);
+  tcase_add_test (tc_chain, test_xmp_tags_serialization_deserialization);
+  tcase_add_test (tc_chain, test_xmp_compound_tags);
+  tcase_add_test (tc_chain, test_exif_parsing);
+  tcase_add_test (tc_chain, test_exif_tags_serialization_deserialization);
+  tcase_add_test (tc_chain, test_exif_multiple_tags);
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = tag_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c
new file mode 100644
index 0000000..6719823
--- /dev/null
+++ b/tests/check/libs/video.c
@@ -0,0 +1,861 @@
+/* GStreamer unit test for video
+ *
+ * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
+ * Copyright (C) <2006> Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright (C) <2008> Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/video/video.h>
+#include <string.h>
+
+/* These are from the current/old videotestsrc; we check our new public API
+ * in libgstvideo against the old one to make sure the sizes and offsets
+ * end up the same */
+
+typedef struct paintinfo_struct paintinfo;
+struct paintinfo_struct
+{
+  unsigned char *dest;          /* pointer to first byte of video data */
+  unsigned char *yp, *up, *vp;  /* pointers to first byte of each component
+                                 * for both packed/planar YUV and RGB */
+  unsigned char *ap;            /* pointer to first byte of alpha component */
+  unsigned char *endptr;        /* pointer to byte beyond last video data */
+  int ystride;
+  int ustride;
+  int vstride;
+  int width;
+  int height;
+};
+
+struct fourcc_list_struct
+{
+  const char *fourcc;
+  const char *name;
+  int bitspp;
+  void (*paint_setup) (paintinfo * p, unsigned char *dest);
+};
+
+static void paint_setup_I420 (paintinfo * p, unsigned char *dest);
+static void paint_setup_YV12 (paintinfo * p, unsigned char *dest);
+static void paint_setup_YUY2 (paintinfo * p, unsigned char *dest);
+static void paint_setup_UYVY (paintinfo * p, unsigned char *dest);
+static void paint_setup_YVYU (paintinfo * p, unsigned char *dest);
+static void paint_setup_IYU2 (paintinfo * p, unsigned char *dest);
+static void paint_setup_Y41B (paintinfo * p, unsigned char *dest);
+static void paint_setup_Y42B (paintinfo * p, unsigned char *dest);
+static void paint_setup_Y800 (paintinfo * p, unsigned char *dest);
+static void paint_setup_AYUV (paintinfo * p, unsigned char *dest);
+
+#if 0
+static void paint_setup_IMC1 (paintinfo * p, unsigned char *dest);
+static void paint_setup_IMC2 (paintinfo * p, unsigned char *dest);
+static void paint_setup_IMC3 (paintinfo * p, unsigned char *dest);
+static void paint_setup_IMC4 (paintinfo * p, unsigned char *dest);
+#endif
+static void paint_setup_YUV9 (paintinfo * p, unsigned char *dest);
+static void paint_setup_YVU9 (paintinfo * p, unsigned char *dest);
+
+int fourcc_get_size (struct fourcc_list_struct *fourcc, int w, int h);
+
+struct fourcc_list_struct fourcc_list[] = {
+/* packed */
+  {"YUY2", "YUY2", 16, paint_setup_YUY2},
+  {"UYVY", "UYVY", 16, paint_setup_UYVY},
+  {"Y422", "Y422", 16, paint_setup_UYVY},
+  {"UYNV", "UYNV", 16, paint_setup_UYVY},       /* FIXME: UYNV? */
+  {"YVYU", "YVYU", 16, paint_setup_YVYU},
+  {"AYUV", "AYUV", 32, paint_setup_AYUV},
+
+  /* interlaced */
+  /*{   "IUYV", "IUY2", 16, paint_setup_YVYU }, */
+
+  /* inverted */
+  /*{   "cyuv", "cyuv", 16, paint_setup_YVYU }, */
+
+  /*{   "Y41P", "Y41P", 12, paint_setup_YVYU }, */
+
+  /* interlaced */
+  /*{   "IY41", "IY41", 12, paint_setup_YVYU }, */
+
+  /*{   "Y211", "Y211", 8, paint_setup_YVYU }, */
+
+  /*{   "Y41T", "Y41T", 12, paint_setup_YVYU }, */
+  /*{   "Y42P", "Y42P", 16, paint_setup_YVYU }, */
+  /*{   "CLJR", "CLJR", 8, paint_setup_YVYU }, */
+  /*{   "IYU1", "IYU1", 12, paint_setup_YVYU }, */
+  {"IYU2", "IYU2", 24, paint_setup_IYU2},
+
+/* planar */
+  /* YVU9 */
+  {"YVU9", "YVU9", 9, paint_setup_YVU9},
+  /* YUV9 */
+  {"YUV9", "YUV9", 9, paint_setup_YUV9},
+  /* IF09 */
+  /* YV12 */
+  {"YV12", "YV12", 12, paint_setup_YV12},
+  /* I420 */
+  {"I420", "I420", 12, paint_setup_I420},
+  /* NV12 */
+  /* NV21 */
+#if 0
+  /* IMC1 */
+  {"IMC1", "IMC1", 16, paint_setup_IMC1},
+  /* IMC2 */
+  {"IMC2", "IMC2", 12, paint_setup_IMC2},
+  /* IMC3 */
+  {"IMC3", "IMC3", 16, paint_setup_IMC3},
+  /* IMC4 */
+  {"IMC4", "IMC4", 12, paint_setup_IMC4},
+#endif
+  /* CLPL */
+  /* Y41B */
+  {"Y41B", "Y41B", 12, paint_setup_Y41B},
+  /* Y42B */
+  {"Y42B", "Y42B", 16, paint_setup_Y42B},
+  /* Y800 grayscale */
+  {"Y800", "Y800", 8, paint_setup_Y800}
+};
+
+/* returns the size in bytes for one video frame of the given dimensions
+ * given the fourcc */
+int
+fourcc_get_size (struct fourcc_list_struct *fourcc, int w, int h)
+{
+  paintinfo pi = { NULL, };
+  paintinfo *p = &pi;
+
+  p->width = w;
+  p->height = h;
+
+  fourcc->paint_setup (p, NULL);
+
+  return (unsigned long) p->endptr;
+}
+
+static void
+paint_setup_I420 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->up = p->yp + p->ystride * GST_ROUND_UP_2 (p->height);
+  p->ustride = GST_ROUND_UP_8 (p->width) / 2;
+  p->vp = p->up + p->ustride * GST_ROUND_UP_2 (p->height) / 2;
+  p->vstride = GST_ROUND_UP_8 (p->ystride) / 2;
+  p->endptr = p->vp + p->vstride * GST_ROUND_UP_2 (p->height) / 2;
+}
+
+static void
+paint_setup_YV12 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->vp = p->yp + p->ystride * GST_ROUND_UP_2 (p->height);
+  p->vstride = GST_ROUND_UP_8 (p->ystride) / 2;
+  p->up = p->vp + p->vstride * GST_ROUND_UP_2 (p->height) / 2;
+  p->ustride = GST_ROUND_UP_8 (p->ystride) / 2;
+  p->endptr = p->up + p->ustride * GST_ROUND_UP_2 (p->height) / 2;
+}
+
+static void
+paint_setup_AYUV (paintinfo * p, unsigned char *dest)
+{
+  p->ap = dest;
+  p->yp = dest + 1;
+  p->up = dest + 2;
+  p->vp = dest + 3;
+  p->ystride = p->width * 4;
+  p->endptr = dest + p->ystride * p->height;
+}
+
+static void
+paint_setup_YUY2 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->up = dest + 1;
+  p->vp = dest + 3;
+  p->ystride = GST_ROUND_UP_2 (p->width) * 2;
+  p->endptr = dest + p->ystride * p->height;
+}
+
+static void
+paint_setup_UYVY (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest + 1;
+  p->up = dest;
+  p->vp = dest + 2;
+  p->ystride = GST_ROUND_UP_2 (p->width) * 2;
+  p->endptr = dest + p->ystride * p->height;
+}
+
+static void
+paint_setup_YVYU (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->up = dest + 3;
+  p->vp = dest + 1;
+  p->ystride = GST_ROUND_UP_2 (p->width) * 2;
+  p->endptr = dest + p->ystride * p->height;
+}
+
+static void
+paint_setup_IYU2 (paintinfo * p, unsigned char *dest)
+{
+  /* untested */
+  p->yp = dest + 1;
+  p->up = dest + 0;
+  p->vp = dest + 2;
+  p->ystride = GST_ROUND_UP_4 (p->width * 3);
+  p->endptr = dest + p->ystride * p->height;
+}
+
+static void
+paint_setup_Y41B (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->up = p->yp + p->ystride * p->height;
+  p->ustride = GST_ROUND_UP_16 (p->width) / 4;
+  p->vp = p->up + p->ustride * p->height;
+  p->vstride = GST_ROUND_UP_16 (p->width) / 4;
+  p->endptr = p->vp + p->vstride * p->height;
+}
+
+static void
+paint_setup_Y42B (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->up = p->yp + p->ystride * p->height;
+  p->ustride = GST_ROUND_UP_8 (p->width) / 2;
+  p->vp = p->up + p->ustride * p->height;
+  p->vstride = GST_ROUND_UP_8 (p->width) / 2;
+  p->endptr = p->vp + p->vstride * p->height;
+}
+
+static void
+paint_setup_Y800 (paintinfo * p, unsigned char *dest)
+{
+  /* untested */
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->endptr = dest + p->ystride * p->height;
+}
+
+#if 0
+static void
+paint_setup_IMC1 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->up = dest + p->width * p->height;
+  p->vp = dest + p->width * p->height + p->width * p->height / 2;
+}
+
+static void
+paint_setup_IMC2 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->vp = dest + p->width * p->height;
+  p->up = dest + p->width * p->height + p->width / 2;
+}
+
+static void
+paint_setup_IMC3 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->up = dest + p->width * p->height + p->width * p->height / 2;
+  p->vp = dest + p->width * p->height;
+}
+
+static void
+paint_setup_IMC4 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->vp = dest + p->width * p->height + p->width / 2;
+  p->up = dest + p->width * p->height;
+}
+#endif
+
+static void
+paint_setup_YVU9 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->vp = p->yp + p->ystride * p->height;
+  p->vstride = GST_ROUND_UP_4 (p->ystride / 4);
+  p->up = p->vp + p->vstride * (GST_ROUND_UP_4 (p->height) / 4);
+  p->ustride = GST_ROUND_UP_4 (p->ystride / 4);
+  p->endptr = p->up + p->ustride * (GST_ROUND_UP_4 (p->height) / 4);
+}
+
+static void
+paint_setup_YUV9 (paintinfo * p, unsigned char *dest)
+{
+  p->yp = dest;
+  p->ystride = GST_ROUND_UP_4 (p->width);
+  p->up = p->yp + p->ystride * p->height;
+  p->ustride = GST_ROUND_UP_4 (p->ystride / 4);
+  p->vp = p->up + p->ustride * (GST_ROUND_UP_4 (p->height) / 4);
+  p->vstride = GST_ROUND_UP_4 (p->ystride / 4);
+  p->endptr = p->vp + p->vstride * (GST_ROUND_UP_4 (p->height) / 4);
+}
+
+#define gst_video_format_is_packed video_format_is_packed
+static gboolean
+video_format_is_packed (GstVideoFormat fmt)
+{
+  switch (fmt) {
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+    case GST_VIDEO_FORMAT_Y41B:
+    case GST_VIDEO_FORMAT_Y42B:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_YUV9:
+    case GST_VIDEO_FORMAT_YVU9:
+      return FALSE;
+    case GST_VIDEO_FORMAT_IYU1:
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+    case GST_VIDEO_FORMAT_UYVY:
+    case GST_VIDEO_FORMAT_AYUV:
+    case GST_VIDEO_FORMAT_RGBx:
+    case GST_VIDEO_FORMAT_BGRx:
+    case GST_VIDEO_FORMAT_xRGB:
+    case GST_VIDEO_FORMAT_xBGR:
+    case GST_VIDEO_FORMAT_RGBA:
+    case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_ARGB:
+    case GST_VIDEO_FORMAT_ABGR:
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_RGB8_PALETTED:
+      return TRUE;
+    default:
+      g_return_val_if_reached (FALSE);
+  }
+  return FALSE;
+}
+
+GST_START_TEST (test_video_formats_all)
+{
+  GstStructure *s;
+  const GValue *val, *list_val;
+  GstCaps *caps;
+  guint num, n, num_formats;
+
+  num_formats = 100;
+  fail_unless (gst_video_format_to_string (num_formats) == NULL);
+  while (gst_video_format_to_string (num_formats) == NULL)
+    --num_formats;
+  GST_INFO ("number of known video formats: %d", num_formats);
+
+  caps = gst_caps_from_string ("video/x-raw, format=" GST_VIDEO_FORMATS_ALL);
+  s = gst_caps_get_structure (caps, 0);
+  val = gst_structure_get_value (s, "format");
+  fail_unless (val != NULL);
+  fail_unless (GST_VALUE_HOLDS_LIST (val));
+  num = gst_value_list_get_size (val);
+  fail_unless (num > 0);
+  for (n = 0; n < num; ++n) {
+    const gchar *fmt_str;
+
+    list_val = gst_value_list_get_value (val, n);
+    fail_unless (G_VALUE_HOLDS_STRING (list_val));
+    fmt_str = g_value_get_string (list_val);
+    GST_INFO ("format: %s", fmt_str);
+    fail_if (gst_video_format_from_string (fmt_str) ==
+        GST_VIDEO_FORMAT_UNKNOWN);
+  }
+  fail_unless_equals_int (num, num_formats);
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_formats)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS (fourcc_list); ++i) {
+    const GstVideoFormatInfo *vf_info;
+    GstVideoFormat fmt;
+    const gchar *s;
+    guint32 fourcc;
+    guint w, h;
+
+    s = fourcc_list[i].fourcc;
+    fourcc = GST_MAKE_FOURCC (s[0], s[1], s[2], s[3]);
+    fmt = gst_video_format_from_fourcc (fourcc);
+
+    if (fmt == GST_VIDEO_FORMAT_UNKNOWN)
+      continue;
+
+    vf_info = gst_video_format_get_info (fmt);
+    fail_unless (vf_info != NULL);
+
+    fail_unless_equals_int (GST_VIDEO_FORMAT_INFO_FORMAT (vf_info), fmt);
+
+    GST_INFO ("Fourcc %s, packed=%", fourcc_list[i].fourcc,
+        gst_video_format_is_packed (fmt));
+
+    fail_unless (GST_VIDEO_FORMAT_INFO_IS_YUV (vf_info));
+
+    /* use any non-NULL pointer so we can compare against NULL */
+    {
+      paintinfo paintinfo = { 0, };
+      fourcc_list[i].paint_setup (&paintinfo, (unsigned char *) s);
+      if (paintinfo.ap != NULL) {
+        fail_unless (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (vf_info));
+      } else {
+        fail_if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (vf_info));
+      }
+    }
+
+    for (w = 1; w <= 65; ++w) {
+      for (h = 1; h <= 65; ++h) {
+        GstVideoInfo vinfo;
+        paintinfo paintinfo = { 0, };
+        guint off0, off1, off2, off3;
+        guint size;
+
+        GST_LOG ("%s, %dx%d", fourcc_list[i].fourcc, w, h);
+
+        gst_video_info_init (&vinfo);
+        gst_video_info_set_format (&vinfo, fmt, w, h);
+
+        paintinfo.width = w;
+        paintinfo.height = h;
+        fourcc_list[i].paint_setup (&paintinfo, NULL);
+        fail_unless_equals_int (GST_VIDEO_INFO_COMP_STRIDE (&vinfo, 0),
+            paintinfo.ystride);
+        if (!gst_video_format_is_packed (fmt)
+            && !GST_VIDEO_FORMAT_INFO_IS_GRAY (vf_info)) {
+          /* planar */
+          fail_unless_equals_int (GST_VIDEO_INFO_COMP_STRIDE (&vinfo, 1),
+              paintinfo.ustride);
+          fail_unless_equals_int (GST_VIDEO_INFO_COMP_STRIDE (&vinfo, 2),
+              paintinfo.vstride);
+          /* check component_width * height against offsets/size somehow? */
+        }
+
+        size = GST_VIDEO_INFO_SIZE (&vinfo);
+        off0 = GST_VIDEO_INFO_COMP_OFFSET (&vinfo, 0);
+        off1 = GST_VIDEO_INFO_COMP_OFFSET (&vinfo, 1);
+        off2 = GST_VIDEO_INFO_COMP_OFFSET (&vinfo, 2);
+
+        fail_unless_equals_int (size, (unsigned long) paintinfo.endptr);
+        fail_unless_equals_int (off0, (unsigned long) paintinfo.yp);
+        fail_unless_equals_int (off1, (unsigned long) paintinfo.up);
+        fail_unless_equals_int (off2, (unsigned long) paintinfo.vp);
+
+        /* should be 0 if there's no alpha component */
+        off3 = GST_VIDEO_INFO_COMP_OFFSET (&vinfo, 3);
+        fail_unless_equals_int (off3, (unsigned long) paintinfo.ap);
+
+        /* some gstvideo checks ... (FIXME: fails for Y41B and Y42B; not sure
+         * if the check or the _get_component_size implementation is wrong) */
+        if (fmt != GST_VIDEO_FORMAT_Y41B && fmt != GST_VIDEO_FORMAT_Y42B
+            && fmt != GST_VIDEO_FORMAT_Y800) {
+          guint cs0, cs1, cs2, cs3;
+
+          cs0 = GST_VIDEO_INFO_COMP_WIDTH (&vinfo, 0) *
+              GST_VIDEO_INFO_COMP_HEIGHT (&vinfo, 0);
+          cs1 = GST_VIDEO_INFO_COMP_WIDTH (&vinfo, 1) *
+              GST_VIDEO_INFO_COMP_HEIGHT (&vinfo, 1);
+          cs2 = GST_VIDEO_INFO_COMP_WIDTH (&vinfo, 2) *
+              GST_VIDEO_INFO_COMP_HEIGHT (&vinfo, 2);
+
+          /* GST_LOG ("cs0=%d,cs1=%d,cs2=%d,off0=%d,off1=%d,off2=%d,size=%d",
+             cs0, cs1, cs2, off0, off1, off2, size); */
+
+          if (!gst_video_format_is_packed (fmt))
+            fail_unless (cs0 <= off1);
+
+          if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (vinfo.finfo)) {
+            cs3 = GST_VIDEO_INFO_COMP_WIDTH (&vinfo, 3) *
+                GST_VIDEO_INFO_COMP_HEIGHT (&vinfo, 2);
+            fail_unless (cs3 < size);
+            /* U/V/alpha shouldn't take up more space than the Y component */
+            fail_if (cs1 > cs0, "cs1 (%d) should be <= cs0 (%d)", cs1, cs0);
+            fail_if (cs2 > cs0, "cs2 (%d) should be <= cs0 (%d)", cs2, cs0);
+            fail_if (cs3 > cs0, "cs3 (%d) should be <= cs0 (%d)", cs3, cs0);
+
+            /* all components together shouldn't take up more space than size */
+            fail_unless (cs0 + cs1 + cs2 + cs3 <= size);
+          } else {
+            /* U/V shouldn't take up more space than the Y component */
+            fail_if (cs1 > cs0, "cs1 (%d) should be <= cs0 (%d)", cs1, cs0);
+            fail_if (cs2 > cs0, "cs2 (%d) should be <= cs0 (%d)", cs2, cs0);
+
+            /* all components together shouldn't take up more space than size */
+            fail_unless (cs0 + cs1 + cs2 <= size,
+                "cs0 (%d) + cs1 (%d) + cs2 (%d) should be <= size (%d)",
+                cs0, cs1, cs2, size);
+          }
+        }
+      }
+    }
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_formats_rgb)
+{
+  GstVideoInfo vinfo;
+  gint width, height, framerate_n, framerate_d, par_n, par_d;
+  GstCaps *caps;
+  GstStructure *structure;
+
+  gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_RGB, 800, 600);
+  vinfo.par_n = 1;
+  vinfo.par_d = 1;
+  vinfo.fps_n = 0;
+  vinfo.fps_d = 1;
+  caps = gst_video_info_to_caps (&vinfo);
+  structure = gst_caps_get_structure (caps, 0);
+
+  fail_unless (gst_structure_get_int (structure, "width", &width));
+  fail_unless (gst_structure_get_int (structure, "height", &height));
+  fail_unless (gst_structure_get_fraction (structure, "framerate", &framerate_n,
+          &framerate_d));
+  fail_unless (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
+          &par_n, &par_d));
+
+  fail_unless (width == 800);
+  fail_unless (height == 600);
+  fail_unless (framerate_n == 0);
+  fail_unless (framerate_d == 1);
+  fail_unless (par_n == 1);
+  fail_unless (par_d == 1);
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_dar_calc)
+{
+  guint display_ratio_n, display_ratio_d;
+
+  /* Ensure that various Display Ratio calculations are correctly done */
+  /* video 768x576, par 16/15, display par 16/15 = 4/3 */
+  fail_unless (gst_video_calculate_display_ratio (&display_ratio_n,
+          &display_ratio_d, 768, 576, 16, 15, 16, 15));
+  fail_unless (display_ratio_n == 4 && display_ratio_d == 3);
+
+  /* video 720x480, par 32/27, display par 1/1 = 16/9 */
+  fail_unless (gst_video_calculate_display_ratio (&display_ratio_n,
+          &display_ratio_d, 720, 480, 32, 27, 1, 1));
+  fail_unless (display_ratio_n == 16 && display_ratio_d == 9);
+
+  /* video 360x288, par 533333/500000, display par 16/15 = 
+   * dar 1599999/1600000 */
+  fail_unless (gst_video_calculate_display_ratio (&display_ratio_n,
+          &display_ratio_d, 360, 288, 533333, 500000, 16, 15));
+  fail_unless (display_ratio_n == 1599999 && display_ratio_d == 1280000);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_parse_caps_rgb)
+{
+  struct
+  {
+    const gchar *tmpl_caps_string;
+    GstVideoFormat fmt;
+  } formats[] = {
+    /* 24 bit */
+    {
+    GST_VIDEO_CAPS_MAKE ("RGB"), GST_VIDEO_FORMAT_RGB}, {
+    GST_VIDEO_CAPS_MAKE ("BGR"), GST_VIDEO_FORMAT_BGR},
+        /* 32 bit (no alpha) */
+    {
+    GST_VIDEO_CAPS_MAKE ("RGBx"), GST_VIDEO_FORMAT_RGBx}, {
+    GST_VIDEO_CAPS_MAKE ("xRGB"), GST_VIDEO_FORMAT_xRGB}, {
+    GST_VIDEO_CAPS_MAKE ("BGRx"), GST_VIDEO_FORMAT_BGRx}, {
+    GST_VIDEO_CAPS_MAKE ("xBGR"), GST_VIDEO_FORMAT_xBGR},
+        /* 32 bit (with alpha) */
+    {
+    GST_VIDEO_CAPS_MAKE ("RGBA"), GST_VIDEO_FORMAT_RGBA}, {
+    GST_VIDEO_CAPS_MAKE ("ARGB"), GST_VIDEO_FORMAT_ARGB}, {
+    GST_VIDEO_CAPS_MAKE ("BGRA"), GST_VIDEO_FORMAT_BGRA}, {
+    GST_VIDEO_CAPS_MAKE ("ABGR"), GST_VIDEO_FORMAT_ABGR}
+  };
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (formats); ++i) {
+    GstVideoInfo vinfo;
+    GstCaps *caps, *caps2;
+
+    caps = gst_caps_from_string (formats[i].tmpl_caps_string);
+    gst_caps_set_simple (caps, "width", G_TYPE_INT, 2 * (i + 1), "height",
+        G_TYPE_INT, i + 1, "framerate", GST_TYPE_FRACTION, 15, 1,
+        "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL);
+    g_assert (gst_caps_is_fixed (caps));
+
+    GST_DEBUG ("testing caps: %" GST_PTR_FORMAT, caps);
+
+    gst_video_info_init (&vinfo);
+    fail_unless (gst_video_info_from_caps (&vinfo, caps));
+    fail_unless_equals_int (GST_VIDEO_INFO_FORMAT (&vinfo), formats[i].fmt);
+    fail_unless_equals_int (GST_VIDEO_INFO_WIDTH (&vinfo), 2 * (i + 1));
+    fail_unless_equals_int (GST_VIDEO_INFO_HEIGHT (&vinfo), i + 1);
+
+    /* make sure they're serialised back correctly */
+    caps2 = gst_video_info_to_caps (&vinfo);
+    fail_unless (caps != NULL);
+    fail_unless (gst_caps_is_equal (caps, caps2));
+
+    gst_caps_unref (caps);
+    gst_caps_unref (caps2);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_events)
+{
+  GstEvent *e;
+  gboolean in_still;
+
+  e = gst_video_event_new_still_frame (TRUE);
+  fail_if (e == NULL, "Failed to create still frame event");
+  fail_unless (gst_video_event_parse_still_frame (e, &in_still),
+      "Failed to parse still frame event");
+  fail_unless (gst_video_event_parse_still_frame (e, NULL),
+      "Failed to parse still frame event w/ in_still == NULL");
+  fail_unless (in_still == TRUE);
+  gst_event_unref (e);
+
+  e = gst_video_event_new_still_frame (FALSE);
+  fail_if (e == NULL, "Failed to create still frame event");
+  fail_unless (gst_video_event_parse_still_frame (e, &in_still),
+      "Failed to parse still frame event");
+  fail_unless (gst_video_event_parse_still_frame (e, NULL),
+      "Failed to parse still frame event w/ in_still == NULL");
+  fail_unless (in_still == FALSE);
+  gst_event_unref (e);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_convert_frame)
+{
+  GstVideoInfo vinfo;
+  GstCaps *from_caps, *to_caps;
+  GstBuffer *from_buffer, *to_buffer;
+  GError *error = NULL;
+  gint i;
+  guint8 *data;
+
+  gst_debug_set_threshold_for_name ("default", GST_LEVEL_NONE);
+
+  from_buffer = gst_buffer_new_and_alloc (640 * 480 * 4);
+
+  data = gst_buffer_map (from_buffer, NULL, NULL, GST_MAP_WRITE);
+  for (i = 0; i < 640 * 480; i++) {
+    data[4 * i + 0] = 0;        /* x */
+    data[4 * i + 1] = 255;      /* R */
+    data[4 * i + 2] = 0;        /* G */
+    data[4 * i + 3] = 0;        /* B */
+  }
+  gst_buffer_unmap (from_buffer, data, 640 * 480 * 4);
+
+  gst_video_info_init (&vinfo);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_xRGB, 640, 480);
+  vinfo.fps_n = 25;
+  vinfo.fps_d = 1;
+  vinfo.par_n = 1;
+  vinfo.par_d = 1;
+  from_caps = gst_video_info_to_caps (&vinfo);
+
+  to_caps =
+      gst_caps_from_string
+      ("something/that, does=(string)not, exist=(boolean)FALSE");
+
+  to_buffer =
+      gst_video_convert_frame (from_buffer, from_caps, to_caps,
+      GST_CLOCK_TIME_NONE, &error);
+  fail_if (to_buffer != NULL);
+  fail_unless (error != NULL);
+  g_error_free (error);
+  error = NULL;
+
+  gst_caps_unref (to_caps);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_I420, 240, 320);
+  vinfo.fps_n = 25;
+  vinfo.fps_d = 1;
+  vinfo.par_n = 1;
+  vinfo.par_d = 2;
+  to_caps = gst_video_info_to_caps (&vinfo);
+
+  to_buffer =
+      gst_video_convert_frame (from_buffer, from_caps, to_caps,
+      GST_CLOCK_TIME_NONE, &error);
+  fail_unless (to_buffer != NULL);
+  fail_unless (error == NULL);
+
+  gst_buffer_unref (from_buffer);
+  gst_caps_unref (from_caps);
+  gst_buffer_unref (to_buffer);
+  gst_caps_unref (to_caps);
+}
+
+GST_END_TEST;
+
+typedef struct
+{
+  GMainLoop *loop;
+  GstBuffer *buffer;
+  GError *error;
+} ConvertFrameContext;
+
+static void
+convert_frame_async_callback (GstBuffer * buf, GError * err,
+    ConvertFrameContext * cf_data)
+{
+  cf_data->buffer = buf;
+  cf_data->error = err;
+
+  g_main_loop_quit (cf_data->loop);
+}
+
+GST_START_TEST (test_convert_frame_async)
+{
+  GstVideoInfo vinfo;
+  GstCaps *from_caps, *to_caps;
+  GstBuffer *from_buffer;
+  gint i;
+  guint8 *data;
+  GMainLoop *loop;
+  ConvertFrameContext cf_data = { NULL, NULL, NULL };
+
+  gst_debug_set_threshold_for_name ("default", GST_LEVEL_NONE);
+
+  from_buffer = gst_buffer_new_and_alloc (640 * 480 * 4);
+
+  data = gst_buffer_map (from_buffer, NULL, NULL, GST_MAP_WRITE);
+  for (i = 0; i < 640 * 480; i++) {
+    data[4 * i + 0] = 0;        /* x */
+    data[4 * i + 1] = 255;      /* R */
+    data[4 * i + 2] = 0;        /* G */
+    data[4 * i + 3] = 0;        /* B */
+  }
+  gst_buffer_unmap (from_buffer, data, 640 * 480 * 4);
+
+  gst_video_info_init (&vinfo);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_xRGB, 640, 470);
+  vinfo.par_n = 1;
+  vinfo.par_d = 1;
+  vinfo.fps_n = 25;
+  vinfo.fps_d = 1;
+  from_caps = gst_video_info_to_caps (&vinfo);
+
+  to_caps =
+      gst_caps_from_string
+      ("something/that, does=(string)not, exist=(boolean)FALSE");
+
+  loop = cf_data.loop = g_main_loop_new (NULL, FALSE);
+
+  gst_video_convert_frame_async (from_buffer, from_caps, to_caps,
+      GST_CLOCK_TIME_NONE,
+      (GstVideoConvertFrameCallback) convert_frame_async_callback, &cf_data,
+      NULL);
+
+  g_main_loop_run (loop);
+
+  fail_if (cf_data.buffer != NULL);
+  fail_unless (cf_data.error != NULL);
+  g_error_free (cf_data.error);
+  cf_data.error = NULL;
+
+  gst_caps_unref (to_caps);
+  gst_video_info_init (&vinfo);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_I420, 240, 320);
+  vinfo.par_n = 1;
+  vinfo.par_d = 2;
+  vinfo.fps_n = 25;
+  vinfo.fps_d = 1;
+  to_caps = gst_video_info_to_caps (&vinfo);
+  gst_video_convert_frame_async (from_buffer, from_caps, to_caps,
+      GST_CLOCK_TIME_NONE,
+      (GstVideoConvertFrameCallback) convert_frame_async_callback, &cf_data,
+      NULL);
+  g_main_loop_run (loop);
+  fail_unless (cf_data.buffer != NULL);
+  fail_unless (cf_data.error == NULL);
+
+  gst_buffer_unref (from_buffer);
+  gst_caps_unref (from_caps);
+  gst_buffer_unref (cf_data.buffer);
+  gst_caps_unref (to_caps);
+
+  g_main_loop_unref (loop);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_size_from_caps)
+{
+  GstVideoInfo vinfo;
+  GstCaps *caps;
+
+  caps = gst_caps_new_simple ("video/x-raw",
+      "format", G_TYPE_STRING, "YV12",
+      "width", G_TYPE_INT, 640,
+      "height", G_TYPE_INT, 480, "framerate", GST_TYPE_FRACTION, 25, 1, NULL);
+
+  gst_video_info_init (&vinfo);
+  fail_unless (gst_video_info_from_caps (&vinfo, caps));
+  fail_unless (GST_VIDEO_INFO_SIZE (&vinfo) == (640 * 480 * 12 / 8));
+
+  gst_caps_unref (caps);
+}
+
+GST_END_TEST;
+
+static Suite *
+video_suite (void)
+{
+  Suite *s = suite_create ("video support library");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_video_formats);
+  tcase_add_test (tc_chain, test_video_formats_rgb);
+  tcase_add_test (tc_chain, test_video_formats_all);
+  tcase_add_test (tc_chain, test_dar_calc);
+  tcase_add_test (tc_chain, test_parse_caps_rgb);
+  tcase_add_test (tc_chain, test_events);
+  tcase_add_test (tc_chain, test_convert_frame);
+  tcase_add_test (tc_chain, test_convert_frame_async);
+  tcase_add_test (tc_chain, test_video_size_from_caps);
+
+  return s;
+}
+
+GST_CHECK_MAIN (video);
diff --git a/tests/check/libs/xmpwriter.c b/tests/check/libs/xmpwriter.c
new file mode 100644
index 0000000..49fd1e7
--- /dev/null
+++ b/tests/check/libs/xmpwriter.c
@@ -0,0 +1,281 @@
+/* GStreamer
+ *
+ * unit tests for xmp config library
+ *
+ * Copyright (C) 2011 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#include <gst/tag/tag.h>
+#include <gst/tag/xmpwriter.h>
+
+#include <string.h>
+
+#define TEST_ELEMENT_TYPE (test_element_get_type())
+
+typedef struct TestElement TestElement;
+typedef struct TestElementClass TestElementClass;
+
+struct TestElement
+{
+  GstElement parent;
+};
+
+struct TestElementClass
+{
+  GstElementClass parent_class;
+};
+
+GType test_element_get_type (void);
+
+static void init_interface (GType type);
+
+G_DEFINE_TYPE_WITH_CODE (TestElement, test_element, GST_TYPE_ELEMENT,
+    init_interface (g_define_type_id));
+
+static void
+init_interface (GType type)
+{
+  static const GInterfaceInfo tagxmpwriter_info = {
+    NULL,
+    NULL,
+    NULL,
+  };
+
+  g_type_add_interface_static (type, GST_TYPE_TAG_XMP_WRITER,
+      &tagxmpwriter_info);
+}
+
+static void
+test_element_class_init (TestElementClass * klass)
+{
+}
+
+static void
+test_element_init (TestElement * this)
+{
+}
+
+static void
+tag_list_equals (GstTagList * taglist, GstTagList * taglist2)
+{
+  const gchar *name_sent, *name_recv;
+  const GValue *value_sent, *value_recv;
+  gboolean found;
+  gint comparison;
+  gint n_recv;
+  gint n_sent;
+  gint i, j;
+
+  /* verify tags */
+  fail_unless (taglist2 != NULL);
+  n_recv = gst_structure_n_fields (taglist2);
+  n_sent = gst_structure_n_fields (taglist);
+  fail_unless (n_recv == n_sent);
+  fail_unless (n_sent > 0);
+
+  /* FIXME: compare taglist values */
+  for (i = 0; i < n_sent; i++) {
+    name_sent = gst_structure_nth_field_name (taglist, i);
+    value_sent = gst_structure_get_value (taglist, name_sent);
+    found = FALSE;
+    for (j = 0; j < n_recv; j++) {
+      name_recv = gst_structure_nth_field_name (taglist2, j);
+      if (!strcmp (name_sent, name_recv)) {
+        value_recv = gst_structure_get_value (taglist2, name_recv);
+        comparison = gst_value_compare (value_sent, value_recv);
+        if (comparison != GST_VALUE_EQUAL) {
+          gchar *vs = g_strdup_value_contents (value_sent);
+          gchar *vr = g_strdup_value_contents (value_recv);
+          GST_DEBUG ("sent = %s:'%s', recv = %s:'%s'",
+              G_VALUE_TYPE_NAME (value_sent), vs,
+              G_VALUE_TYPE_NAME (value_recv), vr);
+          g_free (vs);
+          g_free (vr);
+        }
+        if (comparison != GST_VALUE_EQUAL &&
+            G_VALUE_HOLDS (value_sent, G_TYPE_DOUBLE)) {
+          gdouble vs;
+          gdouble vr;
+
+          /* add some tolerance for doubles */
+          vs = g_value_get_double (value_sent);
+          vr = g_value_get_double (value_recv);
+          if (vr >= vs - 0.001 && vr <= vs + 0.001)
+            comparison = GST_VALUE_EQUAL;
+        }
+        fail_unless (comparison == GST_VALUE_EQUAL,
+            "tag item %s has been received with different type or value",
+            name_sent);
+        found = TRUE;
+        break;
+      }
+    }
+    fail_unless (found, "tag item %s is lost", name_sent);
+  }
+}
+
+static gboolean
+gst_buffer_equals (GstBuffer * buf_a, GstBuffer * buf_b)
+{
+  gboolean res;
+  gpointer data1, data2;
+  gsize size1, size2;
+
+  data1 = gst_buffer_map (buf_a, &size1, NULL, GST_MAP_READ);
+  data2 = gst_buffer_map (buf_b, &size2, NULL, GST_MAP_READ);
+
+  if (size1 == size2) {
+    res = memcmp (data1, data2, size1) == 0;
+  } else {
+    res = FALSE;
+  }
+  gst_buffer_unmap (buf_a, data1, size1);
+  gst_buffer_unmap (buf_b, data2, size2);
+
+  return res;
+}
+
+static GstTagList *
+create_taglist (void)
+{
+  return gst_tag_list_new_full (GST_TAG_ARTIST, "artist",
+      GST_TAG_TITLE, "title", GST_TAG_COPYRIGHT, "copyright", NULL);
+}
+
+GST_START_TEST (test_no_xmp)
+{
+  GstTagList *taglist = create_taglist ();
+  GstElement *test_element =
+      (GstElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
+
+  gst_tag_xmp_writer_remove_all_schemas (GST_TAG_XMP_WRITER (test_element));
+
+  fail_unless (gst_tag_xmp_writer_tag_list_to_xmp_buffer (GST_TAG_XMP_WRITER
+          (test_element), taglist, TRUE) == NULL);
+
+  gst_object_unref (test_element);
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_default)
+{
+  GstTagList *taglist = create_taglist ();
+  GstElement *test_element =
+      (GstElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
+  GstBuffer *buf;
+  GstBuffer *buf2;
+
+  buf =
+      gst_tag_xmp_writer_tag_list_to_xmp_buffer (GST_TAG_XMP_WRITER
+      (test_element), taglist, TRUE);
+  buf2 = gst_tag_list_to_xmp_buffer (taglist, TRUE);
+  fail_unless (gst_buffer_equals (buf, buf2));
+
+  gst_object_unref (test_element);
+  gst_buffer_unref (buf);
+  gst_buffer_unref (buf2);
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_disable)
+{
+  GstTagList *taglist;
+  GstTagList *taglist2;
+  GstElement *test_element =
+      (GstElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
+  GstBuffer *buf;
+  const gchar *str;
+
+  taglist = gst_tag_list_new_full (GST_TAG_ARTIST, "artist", NULL);
+
+  /* add a tag that is mapped on xmp schema (as of Mar, 21th 2011) */
+  gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, GST_TAG_USER_RATING, 5,
+      NULL);
+
+  buf =
+      gst_tag_xmp_writer_tag_list_to_xmp_buffer (GST_TAG_XMP_WRITER
+      (test_element), taglist, TRUE);
+  taglist2 = gst_tag_list_from_xmp_buffer (buf);
+  tag_list_equals (taglist, taglist2);
+  gst_tag_list_free (taglist2);
+  gst_buffer_unref (buf);
+
+  gst_tag_xmp_writer_remove_schema (GST_TAG_XMP_WRITER (test_element), "xap");
+  buf =
+      gst_tag_xmp_writer_tag_list_to_xmp_buffer (GST_TAG_XMP_WRITER
+      (test_element), taglist, TRUE);
+  taglist2 = gst_tag_list_from_xmp_buffer (buf);
+
+  /* artist should be there, but rating shouldn't */
+  fail_unless (gst_tag_list_peek_string_index (taglist2, GST_TAG_ARTIST, 0,
+          &str));
+  fail_unless (gst_tag_list_get_value_index (taglist2, GST_TAG_USER_RATING,
+          0) == NULL);
+
+  gst_tag_list_free (taglist2);
+  gst_buffer_unref (buf);
+
+  gst_object_unref (test_element);
+  gst_tag_list_free (taglist);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+xmp_config_suite (void)
+{
+  Suite *s = suite_create ("xmpconfig interface");
+  TCase *tc_chain = tcase_create ("configuration");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_no_xmp);
+  tcase_add_test (tc_chain, test_default);
+  tcase_add_test (tc_chain, test_disable);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = xmp_config_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/pipelines/gio.c b/tests/check/pipelines/gio.c
new file mode 100644
index 0000000..10b9213
--- /dev/null
+++ b/tests/check/pipelines/gio.c
@@ -0,0 +1,180 @@
+/* GStreamer
+ *
+ * unit test for GIO
+ *
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+#include <gio/gio.h>
+
+static gboolean got_eos = FALSE;
+
+static gboolean
+message_handler (GstBus * bus, GstMessage * msg, gpointer data)
+{
+  GMainLoop *loop = (GMainLoop *) data;
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_EOS:
+      got_eos = TRUE;
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_ERROR:{
+      gchar *debug;
+      GError *err;
+
+      gst_message_parse_error (msg, &err, &debug);
+      g_free (debug);
+
+      /* Will abort the check */
+      g_warning ("Error: %s\n", err->message);
+      g_error_free (err);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+GST_START_TEST (test_memory_stream)
+{
+  GMainLoop *loop;
+  GstElement *bin;
+  GstElement *src, *sink;
+  GstBus *bus;
+  GMemoryInputStream *input;
+  GMemoryOutputStream *output;
+  guint8 *in_data;
+  guint8 *out_data;
+  gint i;
+  gint64 duration;
+  guint bus_watch = 0;
+
+  got_eos = FALSE;
+
+  in_data = g_new (guint8, 512);
+  out_data = g_new (guint8, 512);
+  for (i = 0; i < 512; i++)
+    in_data[i] = i % 256;
+
+  input =
+      G_MEMORY_INPUT_STREAM (g_memory_input_stream_new_from_data (in_data, 512,
+          (GDestroyNotify) g_free));
+
+  output = G_MEMORY_OUTPUT_STREAM (g_memory_output_stream_new (out_data, 512,
+          (GReallocFunc) g_realloc, (GDestroyNotify) g_free));
+  out_data = NULL;
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  bin = gst_pipeline_new ("bin");
+
+  src = gst_element_factory_make ("giostreamsrc", "src");
+  fail_unless (src != NULL);
+  g_object_set (G_OBJECT (src), "stream", input, NULL);
+
+  sink = gst_element_factory_make ("giostreamsink", "sink");
+  fail_unless (sink != NULL);
+  g_object_set (G_OBJECT (sink), "stream", output, NULL);
+
+  gst_bin_add_many (GST_BIN (bin), src, sink, NULL);
+
+  fail_unless (gst_element_link_many (src, sink, NULL));
+
+  bus = gst_element_get_bus (bin);
+  bus_watch = gst_bus_add_watch (bus, message_handler, loop);
+  gst_object_unref (bus);
+
+  gst_element_set_state (bin, GST_STATE_PAUSED);
+  gst_element_get_state (bin, NULL, NULL, -1);
+
+  fail_unless (gst_element_query_duration (bin, GST_FORMAT_BYTES, &duration));
+  fail_unless_equals_int (duration, 512);
+
+  gst_element_set_state (bin, GST_STATE_PLAYING);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (bin, GST_STATE_NULL);
+
+  fail_unless (got_eos);
+  got_eos = FALSE;
+
+  out_data = g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (output));
+
+  for (i = 0; i < 512; i++)
+    fail_unless_equals_int (in_data[i], out_data[i]);
+
+  gst_element_set_state (bin, GST_STATE_PAUSED);
+  gst_element_get_state (bin, NULL, NULL, -1);
+
+  fail_unless (gst_element_query_duration (bin, GST_FORMAT_BYTES, &duration));
+  fail_unless_equals_int (duration, 512);
+
+  gst_element_set_state (bin, GST_STATE_PLAYING);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (bin, GST_STATE_NULL);
+  gst_object_unref (bin);
+
+  fail_unless (got_eos);
+
+  g_object_unref (input);
+  g_object_unref (output);
+
+  g_main_loop_unref (loop);
+  g_source_remove (bus_watch);
+}
+
+GST_END_TEST;
+
+static Suite *
+gio_testsuite (void)
+{
+  Suite *s = suite_create ("gio");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_memory_stream);
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = gio_testsuite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/pipelines/oggmux.c b/tests/check/pipelines/oggmux.c
new file mode 100644
index 0000000..6b072bc
--- /dev/null
+++ b/tests/check/pipelines/oggmux.c
@@ -0,0 +1,432 @@
+/* GStreamer
+ *
+ * unit tests for oggmux
+ *
+ * Copyright (C) 2006 James Livingston <doclivingston at gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gst/check/gstcheck.h>
+#include <ogg/ogg.h>
+
+
+typedef enum
+{
+  CODEC_UNKNOWN,
+  CODEC_VORBIS,
+  CODEC_THEORA,
+  CODEC_SPEEX,
+} ChainCodec;
+
+typedef struct
+{
+  gboolean eos;
+  gulong serialno;
+  gint64 last_granule;
+  ChainCodec codec;
+} ChainState;
+
+#if (defined (HAVE_THEORA) || defined (HAVE_VORBIS))
+static ogg_sync_state oggsync;
+static GHashTable *eos_chain_states;
+static gulong probe_id;
+
+static ChainCodec
+get_page_codec (ogg_page * page)
+{
+  ChainCodec codec = CODEC_UNKNOWN;
+  ogg_stream_state state;
+  ogg_packet packet;
+
+  ogg_stream_init (&state, ogg_page_serialno (page));
+  if (ogg_stream_pagein (&state, page) == 0) {
+    if (ogg_stream_packetpeek (&state, &packet) > 0) {
+      if (strncmp ((char *) &packet.packet[1], "vorbis",
+              strlen ("vorbis")) == 0)
+        codec = CODEC_VORBIS;
+      else if (strncmp ((char *) &packet.packet[1], "theora",
+              strlen ("theora")) == 0)
+        codec = CODEC_THEORA;
+      else if (strncmp ((char *) &packet.packet[0], "Speex   ",
+              strlen ("Speex   ")) == 0)
+        codec = CODEC_SPEEX;
+    }
+  }
+  ogg_stream_clear (&state);
+
+  return codec;
+}
+
+static void
+fail_if_audio (gpointer key, ChainState * state, gpointer data)
+{
+  fail_if (state->codec == CODEC_VORBIS,
+      "vorbis BOS occurred before theora BOS");
+  fail_if (state->codec == CODEC_SPEEX, "speex BOS occurred before theora BOS");
+}
+
+static ChainState *
+validate_ogg_page (ogg_page * page)
+{
+  gulong serialno;
+  gint64 granule;
+  ChainState *state;
+
+  serialno = ogg_page_serialno (page);
+  granule = ogg_page_granulepos (page);
+  state = g_hash_table_lookup (eos_chain_states, GINT_TO_POINTER (serialno));
+
+  fail_if (ogg_page_packets (page) == 0 && granule != -1,
+      "Must have granulepos -1 when page has no packets, has %" G_GINT64_FORMAT,
+      granule);
+
+  if (ogg_page_bos (page)) {
+    fail_unless (state == NULL, "Extraneous BOS flag on chain %u", serialno);
+
+    state = g_new0 (ChainState, 1);
+    g_hash_table_insert (eos_chain_states, GINT_TO_POINTER (serialno), state);
+    state->serialno = serialno;
+    state->last_granule = granule;
+    state->codec = get_page_codec (page);
+
+    /* check for things like BOS ordering, etc */
+    switch (state->codec) {
+      case CODEC_THEORA:
+        /* check we have no vorbis/speex chains yet */
+        g_hash_table_foreach (eos_chain_states, (GHFunc) fail_if_audio, NULL);
+        break;
+      case CODEC_VORBIS:
+      case CODEC_SPEEX:
+        /* no checks (yet) */
+        break;
+      case CODEC_UNKNOWN:
+      default:
+        break;
+    }
+  } else if (ogg_page_eos (page)) {
+    fail_unless (state != NULL, "Missing BOS flag on chain %u", serialno);
+    state->eos = TRUE;
+  } else {
+    fail_unless (state != NULL, "Missing BOS flag on chain %u", serialno);
+    fail_unless (!state->eos, "Data after EOS flag on chain %u", serialno);
+  }
+
+  if (granule != -1) {
+    fail_unless (granule >= state->last_granule,
+        "Granulepos out-of-order for chain %u: old=%" G_GINT64_FORMAT ", new="
+        G_GINT64_FORMAT, serialno, state->last_granule, granule);
+    state->last_granule = granule;
+  }
+
+  return state;
+}
+
+static void
+is_video (gpointer key, ChainState * state, gpointer data)
+{
+  if (state->codec == CODEC_THEORA)
+    *((gboolean *) data) = TRUE;
+}
+
+static gboolean
+check_chain_final_state (gpointer key, ChainState * state, gpointer data)
+{
+  fail_unless (state->eos, "missing EOS flag on chain %u", state->serialno);
+
+  /* return TRUE to empty the chain table */
+  return TRUE;
+}
+
+static GstProbeReturn
+eos_buffer_probe (GstPad * pad, GstProbeType type, GstBuffer * buffer,
+    gpointer unused)
+{
+  gint ret;
+  gint size;
+  gchar *oggbuffer;
+  ChainState *state = NULL;
+  gboolean has_video = FALSE;
+
+  size = gst_buffer_get_size (buffer);
+
+  oggbuffer = ogg_sync_buffer (&oggsync, size);
+  gst_buffer_extract (buffer, 0, oggbuffer, size);
+  ogg_sync_wrote (&oggsync, size);
+
+  do {
+    ogg_page page;
+
+    ret = ogg_sync_pageout (&oggsync, &page);
+    if (ret > 0)
+      state = validate_ogg_page (&page);
+  }
+  while (ret != 0);
+
+  if (state) {
+    /* Now, we can do buffer-level checks...
+     * If we have video somewhere, then we should have DELTA_UNIT set on all
+     * non-header (not IN_CAPS), non-video buffers
+     */
+    g_hash_table_foreach (eos_chain_states, (GHFunc) is_video, &has_video);
+    if (has_video && state->codec != CODEC_THEORA) {
+      if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_IN_CAPS))
+        fail_unless (GST_BUFFER_FLAG_IS_SET (buffer,
+                GST_BUFFER_FLAG_DELTA_UNIT),
+            "Non-video buffer doesn't have DELTA_UNIT in stream with video");
+    }
+  }
+
+  return GST_PROBE_OK;
+}
+
+static void
+start_pipeline (GstElement * bin, GstPad * pad)
+{
+  GstStateChangeReturn ret;
+
+  ogg_sync_init (&oggsync);
+
+  eos_chain_states =
+      g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
+  probe_id =
+      gst_pad_add_probe (pad, GST_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) eos_buffer_probe, NULL, NULL);
+
+  ret = gst_element_set_state (bin, GST_STATE_PLAYING);
+  fail_if (ret == GST_STATE_CHANGE_FAILURE, "Could not start test pipeline");
+  if (ret == GST_STATE_CHANGE_ASYNC) {
+    ret = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
+    fail_if (ret != GST_STATE_CHANGE_SUCCESS, "Could not start test pipeline");
+  }
+}
+
+static void
+stop_pipeline (GstElement * bin, GstPad * pad)
+{
+  GstStateChangeReturn ret;
+
+  ret = gst_element_set_state (bin, GST_STATE_NULL);
+  fail_if (ret == GST_STATE_CHANGE_FAILURE, "Could not stop test pipeline");
+  if (ret == GST_STATE_CHANGE_ASYNC) {
+    ret = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
+    fail_if (ret != GST_STATE_CHANGE_SUCCESS, "Could not stop test pipeline");
+  }
+
+  gst_pad_remove_probe (pad, probe_id);
+  ogg_sync_clear (&oggsync);
+
+  /* check end conditions, such as EOS flags */
+  g_hash_table_foreach_remove (eos_chain_states,
+      (GHRFunc) check_chain_final_state, NULL);
+}
+
+static gboolean
+eos_watch (GstBus * bus, GstMessage * message, GMainLoop * loop)
+{
+  if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_EOS) {
+    g_main_loop_quit (loop);
+  }
+  return TRUE;
+}
+
+static void
+test_pipeline (const char *pipeline)
+{
+  GstElement *bin, *sink;
+  GstPad *pad, *sinkpad;
+  GstBus *bus;
+  GError *error = NULL;
+  GMainLoop *loop;
+  GstPadLinkReturn linkret;
+  guint bus_watch = 0;
+
+  bin = gst_parse_launch (pipeline, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  pad = gst_bin_find_unlinked_pad (GST_BIN (bin), GST_PAD_SRC);
+  fail_unless (pad != NULL, "Could not locate free src pad");
+
+  /* connect the fake sink */
+  sink = gst_element_factory_make ("fakesink", "fake_sink");
+  fail_unless (sink != NULL, "Could create fakesink");
+  fail_unless (gst_bin_add (GST_BIN (bin), sink), "Could not insert fakesink");
+  sinkpad = gst_element_get_static_pad (sink, "sink");
+  fail_unless (sinkpad != NULL, "Could not get fakesink src pad");
+
+  linkret = gst_pad_link (pad, sinkpad);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (linkret),
+      "Could not link to fake sink");
+  gst_object_unref (sinkpad);
+
+  /* run until we receive EOS */
+  loop = g_main_loop_new (NULL, FALSE);
+  bus = gst_element_get_bus (bin);
+  bus_watch = gst_bus_add_watch (bus, (GstBusFunc) eos_watch, loop);
+  gst_object_unref (bus);
+
+  start_pipeline (bin, pad);
+  g_main_loop_run (loop);
+
+  /* we're EOS now; make sure oggmux out caps have stream headers on them */
+  {
+    GstStructure *s;
+    GstCaps *muxcaps;
+
+    muxcaps = gst_pad_get_current_caps (sinkpad);
+    fail_unless (muxcaps != NULL);
+    s = gst_caps_get_structure (muxcaps, 0);
+    fail_unless (gst_structure_has_name (s, "application/ogg"));
+    fail_unless (gst_structure_has_field (s, "streamheader"));
+    fail_unless (gst_structure_has_field_typed (s, "streamheader",
+            GST_TYPE_ARRAY));
+    gst_caps_unref (muxcaps);
+  }
+
+  stop_pipeline (bin, pad);
+
+  /* clean up */
+  g_main_loop_unref (loop);
+  g_source_remove (bus_watch);
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+#endif
+
+#ifdef HAVE_VORBIS
+GST_START_TEST (test_vorbis)
+{
+  test_pipeline
+      ("audiotestsrc num-buffers=5 ! audioconvert ! vorbisenc ! oggmux");
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_vorbis_oggmux_unlinked)
+{
+  GstElement *pipe;
+  GstMessage *msg;
+
+  pipe = gst_parse_launch ("audiotestsrc ! vorbisenc ! oggmux", NULL);
+  if (pipe == NULL) {
+    g_printerr ("Skipping test 'test_vorbis_oggmux_unlinked'");
+    return;
+  }
+  /* no sink, no async state change */
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_SUCCESS);
+  /* we expect an error (without any criticals/warnings) */
+  msg = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1,
+      GST_MESSAGE_ERROR);
+  gst_message_unref (msg);
+  fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+  gst_object_unref (pipe);
+}
+
+GST_END_TEST;
+#endif
+
+#ifdef HAVE_THEORA
+GST_START_TEST (test_theora)
+{
+  test_pipeline
+      ("videotestsrc num-buffers=5 ! videoconvert ! theoraenc ! oggmux");
+}
+
+GST_END_TEST;
+#endif
+
+#if (defined (HAVE_THEORA) && defined (HAVE_VORBIS))
+GST_START_TEST (test_theora_vorbis)
+{
+  test_pipeline
+      ("videotestsrc num-buffers=10 ! videoconvert ! theoraenc ! queue ! oggmux name=mux "
+      "audiotestsrc num-buffers=2 ! audioconvert ! vorbisenc ! queue ! mux.");
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_vorbis_theora)
+{
+  test_pipeline
+      ("videotestsrc num-buffers=2 ! videoconvert ! theoraenc ! queue ! oggmux name=mux "
+      "audiotestsrc num-buffers=10 ! audioconvert ! vorbisenc ! queue ! mux.");
+}
+
+GST_END_TEST;
+#endif
+
+GST_START_TEST (test_simple_cleanup)
+{
+  GstElement *oggmux;
+
+  oggmux = gst_element_factory_make ("oggmux", NULL);
+  gst_object_unref (oggmux);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_request_pad_cleanup)
+{
+  GstElement *oggmux;
+  GstPad *pad;
+
+  oggmux = gst_element_factory_make ("oggmux", NULL);
+  pad = gst_element_get_request_pad (oggmux, "sink_%d");
+  fail_unless (pad != NULL);
+  gst_object_unref (pad);
+  pad = gst_element_get_request_pad (oggmux, "sink_%d");
+  fail_unless (pad != NULL);
+  gst_object_unref (pad);
+  gst_object_unref (oggmux);
+}
+
+GST_END_TEST;
+
+static Suite *
+oggmux_suite (void)
+{
+  Suite *s = suite_create ("oggmux");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+#ifdef HAVE_VORBIS
+  tcase_add_test (tc_chain, test_vorbis);
+  tcase_add_test (tc_chain, test_vorbis_oggmux_unlinked);
+#endif
+
+#ifdef HAVE_THEORA
+  tcase_add_test (tc_chain, test_theora);
+#endif
+
+#if (defined (HAVE_THEORA) && defined (HAVE_VORBIS))
+  tcase_add_test (tc_chain, test_vorbis_theora);
+  tcase_add_test (tc_chain, test_theora_vorbis);
+#endif
+
+  tcase_add_test (tc_chain, test_simple_cleanup);
+  tcase_add_test (tc_chain, test_request_pad_cleanup);
+  return s;
+}
+
+GST_CHECK_MAIN (oggmux);
diff --git a/tests/check/pipelines/simple-launch-lines.c b/tests/check/pipelines/simple-launch-lines.c
new file mode 100644
index 0000000..5c3218b
--- /dev/null
+++ b/tests/check/pipelines/simple-launch-lines.c
@@ -0,0 +1,237 @@
+/* GStreamer
+ * Copyright (C) 2005 Andy Wingo <wingo@pobox.com>
+ *
+ * simple_launch_lines.c: Unit test for simple pipelines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include <gst/check/gstcheck.h>
+
+#ifndef GST_DISABLE_PARSE
+
+static GstElement *
+setup_pipeline (const gchar * pipe_descr)
+{
+  GstElement *pipeline;
+
+  GST_LOG ("pipeline: %s", pipe_descr);
+  pipeline = gst_parse_launch (pipe_descr, NULL);
+  g_return_val_if_fail (GST_IS_PIPELINE (pipeline), NULL);
+  return pipeline;
+}
+
+/* 
+ * run_pipeline:
+ * @pipe: the pipeline to run
+ * @desc: the description for use in messages
+ * @events: is a mask of expected events
+ * @tevent: is the expected terminal event.
+ *
+ * the poll call will time out after half a second.
+ */
+static void
+run_pipeline (GstElement * pipe, const gchar * descr,
+    GstMessageType events, GstMessageType tevent)
+{
+  GstBus *bus;
+  GstMessage *message;
+  GstMessageType revent;
+  GstStateChangeReturn ret;
+
+  g_assert (pipe);
+  bus = gst_element_get_bus (pipe);
+  g_assert (bus);
+
+  fail_if (gst_element_set_state (pipe, GST_STATE_PLAYING) ==
+      GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to playing", descr);
+  ret = gst_element_get_state (pipe, NULL, NULL, 10 * GST_SECOND);
+  if (ret == GST_STATE_CHANGE_ASYNC) {
+    g_critical ("Pipeline '%s' failed to go to PLAYING fast enough", descr);
+    goto done;
+  } else if (ret != GST_STATE_CHANGE_SUCCESS) {
+    g_critical ("Pipeline '%s' failed to go into PLAYING state", descr);
+    goto done;
+  }
+
+  while (1) {
+    message = gst_bus_poll (bus, GST_MESSAGE_ANY, GST_SECOND / 2);
+
+
+    /* always have to pop the message before getting back into poll */
+    if (message) {
+      revent = GST_MESSAGE_TYPE (message);
+      gst_message_unref (message);
+    } else {
+      revent = GST_MESSAGE_UNKNOWN;
+    }
+
+    if (revent == tevent) {
+      break;
+    } else if (revent == GST_MESSAGE_UNKNOWN) {
+      g_critical ("Unexpected timeout in gst_bus_poll, looking for %d: %s",
+          tevent, descr);
+      break;
+    } else if (revent & events) {
+      continue;
+    }
+    g_critical
+        ("Unexpected message received of type %d, '%s', looking for %d: %s",
+        revent, gst_message_type_get_name (revent), tevent, descr);
+  }
+
+done:
+  fail_if (gst_element_set_state (pipe, GST_STATE_NULL) ==
+      GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to NULL", descr);
+  gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE);
+  gst_object_unref (pipe);
+
+  gst_bus_set_flushing (bus, TRUE);
+  gst_object_unref (bus);
+}
+
+GST_START_TEST (test_element_negotiation)
+{
+  const gchar *s;
+
+  /* Ensures that filtering buffers with unknown caps down to fixed-caps 
+   * will apply those caps to the buffers.
+   * see http://bugzilla.gnome.org/show_bug.cgi?id=315126 */
+  s = "fakesrc num-buffers=2 ! "
+      "audio/x-raw,format=S16LE,rate=22050,channels=1 ! "
+      "audioconvert ! audio/x-raw,format=S16LE,rate=22050,channels=1 "
+      "! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+
+#ifdef HAVE_LIBVISUAL
+  s = "audiotestsrc num-buffers=30 ! tee name=t ! alsasink t. ! audioconvert ! "
+      "libvisual_lv_scope ! videoconvert ! xvimagesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+#endif
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_basetransform_based)
+{
+  /* Each of these tests is to check whether various basetransform based 
+   * elements can select output caps when not allowed to do passthrough 
+   * and going to a generic sink such as fakesink or filesink */
+  const gchar *s;
+
+  /* Check that videoscale can pick a height given only a width */
+  s = "videotestsrc num-buffers=2 ! "
+      "video/x-raw,format=(string)I420,width=320,height=240 ! "
+      "videoscale ! video/x-raw,width=640 ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+
+  /* Test that videoconvert can pick an output format that isn't
+   * passthrough without completely specified output caps */
+  s = "videotestsrc num-buffers=2 ! "
+      "video/x-raw,format=(string)I420,width=320,height=240 ! "
+      "videoconvert ! video/x-raw,format=(string)RGB ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+
+  /* Check that audioresample can pick a samplerate to use from a
+   * range that doesn't include the input */
+  s = "audiotestsrc num-buffers=2 ! "
+      "audio/x-raw,format=S16LE,rate=8000 ! "
+      "audioresample ! audio/x-raw,rate=[16000,48000] ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+
+  /* Check that audioconvert can pick a depth to use, given a width */
+  s = "audiotestsrc num-buffers=30 ! audio/x-raw,format=S16LE ! "
+      "audioconvert ! " "audio/x-raw,format=S32LE ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+
+  /* Check that videoscale doesn't claim to be able to transform input in
+   * formats it can't handle for a given scaling method; videoconvert
+   * should then make sure a format that can be handled is chosen (4-tap
+   * scaling is not implemented for RGB and packed yuv currently) */
+  s = "videotestsrc num-buffers=2 ! video/x-raw,format=(string)ARGB64 ! "
+      "videoconvert ! videoscale method=4-tap ! videoconvert ! "
+      "video/x-raw,format=(string)RGB, width=32,height=32,framerate=(fraction)30/1,"
+      "pixel-aspect-ratio=(fraction)1/1 ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+  s = "videotestsrc num-buffers=2 ! video/x-raw,format=(string)AYUV,"
+      "width=64,height=64 ! videoconvert ! videoscale method=4-tap ! "
+      "videoconvert ! video/x-raw,format=(string)AYUV,width=32,"
+      "height=32 ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+  /* make sure nothing funny happens in passthrough mode (we don't check that
+   * passthrough mode is chosen though) */
+  s = "videotestsrc num-buffers=2 ! video/x-raw,format=(string)I420,"
+      "width=64,height=64 ! videoconvert ! videoscale method=4-tap ! "
+      "videoconvert ! video/x-raw,format=(string)I420,width=32,"
+      "height=32 ! fakesink";
+  run_pipeline (setup_pipeline (s), s,
+      GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+      GST_MESSAGE_UNKNOWN);
+}
+
+GST_END_TEST;
+
+#endif /* #ifndef GST_DISABLE_PARSE */
+static Suite *
+simple_launch_lines_suite (void)
+{
+  Suite *s = suite_create ("Pipelines");
+  TCase *tc_chain = tcase_create ("linear");
+
+  /* time out after 60s, not the default 3 */
+  tcase_set_timeout (tc_chain, 60);
+
+  suite_add_tcase (s, tc_chain);
+#ifndef GST_DISABLE_PARSE
+  tcase_add_test (tc_chain, test_element_negotiation);
+  tcase_add_test (tc_chain, test_basetransform_based);
+#endif
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = simple_launch_lines_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/pipelines/theoraenc.c b/tests/check/pipelines/theoraenc.c
new file mode 100644
index 0000000..88eb373
--- /dev/null
+++ b/tests/check/pipelines/theoraenc.c
@@ -0,0 +1,467 @@
+/* GStreamer
+ *
+ * unit test for theoraenc
+ *
+ * Copyright (C) 2006 Andy Wingo <wingo at pobox.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+
+#include <theora/theora.h>
+
+#ifndef GST_DISABLE_PARSE
+
+#define TIMESTAMP_OFFSET G_GINT64_CONSTANT(3249870963)
+#define FRAMERATE 10
+
+/* I know all of these have a shift of 6 bits */
+#define GRANULEPOS_SHIFT 6
+
+
+#define check_buffer_is_header(buffer,is_header) \
+  fail_unless (GST_BUFFER_FLAG_IS_SET (buffer,   \
+          GST_BUFFER_FLAG_IN_CAPS) == is_header, \
+      "GST_BUFFER_IN_CAPS is set to %d but expected %d", \
+      GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_IN_CAPS), is_header)
+
+#define check_buffer_timestamp(buffer,timestamp) \
+  fail_unless (GST_BUFFER_TIMESTAMP (buffer) == timestamp, \
+      "expected timestamp %" GST_TIME_FORMAT \
+      ", but got timestamp %" GST_TIME_FORMAT, \
+      GST_TIME_ARGS (timestamp), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)))
+
+#define check_buffer_duration(buffer,duration) \
+  fail_unless (GST_BUFFER_DURATION (buffer) == duration, \
+      "expected duration %" GST_TIME_FORMAT \
+      ", but got duration %" GST_TIME_FORMAT, \
+      GST_TIME_ARGS (duration), GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)))
+
+static gboolean old_libtheora;
+
+static void
+check_libtheora (void)
+{
+  old_libtheora = (theora_version_number () <= 0x00030200);
+}
+
+static void
+check_buffer_granulepos (GstBuffer * buffer, gint64 granulepos)
+{
+  GstClockTime clocktime;
+  int framecount;
+
+  /* With old versions of libtheora, the granulepos represented the
+   * start time, not end time. Adapt for that. */
+  if (old_libtheora) {
+    if (granulepos >> GRANULEPOS_SHIFT)
+      granulepos -= 1 << GRANULEPOS_SHIFT;
+    else if (granulepos)
+      granulepos -= 1;
+  }
+
+  fail_unless (GST_BUFFER_OFFSET_END (buffer) == granulepos,
+      "expected granulepos %" G_GUINT64_FORMAT
+      ", but got granulepos %" G_GUINT64_FORMAT,
+      granulepos, GST_BUFFER_OFFSET_END (buffer));
+
+  /* contrary to what we record as TIMESTAMP, we can use OFFSET to check
+   * the granulepos correctly here */
+  framecount = GST_BUFFER_OFFSET_END (buffer);
+  framecount = granulepos >> GRANULEPOS_SHIFT;
+  framecount += granulepos & ((1 << GRANULEPOS_SHIFT) - 1);
+  clocktime = gst_util_uint64_scale (framecount, GST_SECOND, FRAMERATE);
+
+  fail_unless (clocktime == GST_BUFFER_OFFSET (buffer),
+      "expected OFFSET set to clocktime %" GST_TIME_FORMAT
+      ", but got %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (clocktime), GST_TIME_ARGS (GST_BUFFER_OFFSET (buffer)));
+}
+
+/* this check is here to check that the granulepos we derive from the
+   timestamp is about correct. This is "about correct" because you can't
+   precisely go from timestamp to granulepos due to the downward-rounding
+   characteristics of gst_util_uint64_scale, so you check if granulepos is
+   equal to the number, or the number plus one. */
+/* should be from_endtime, but theora's granulepos mapping is "special" */
+static void
+check_buffer_granulepos_from_starttime (GstBuffer * buffer,
+    GstClockTime starttime)
+{
+  gint64 granulepos, expected, framecount;
+
+  granulepos = GST_BUFFER_OFFSET_END (buffer);
+  /* Now convert to 'granulepos for start time', depending on libtheora 
+   * version */
+  if (!old_libtheora) {
+    if (granulepos & ((1 << GRANULEPOS_SHIFT) - 1))
+      granulepos -= 1;
+    else if (granulepos)
+      granulepos -= 1 << GRANULEPOS_SHIFT;
+  }
+
+  framecount = granulepos >> GRANULEPOS_SHIFT;
+  framecount += granulepos & ((1 << GRANULEPOS_SHIFT) - 1);
+  expected = gst_util_uint64_scale (starttime, FRAMERATE, GST_SECOND);
+
+  fail_unless (framecount == expected || framecount == expected + 1,
+      "expected frame count %" G_GUINT64_FORMAT
+      " or %" G_GUINT64_FORMAT
+      ", but got frame count %" G_GUINT64_FORMAT,
+      expected, expected + 1, framecount);
+}
+
+GST_START_TEST (test_granulepos_offset)
+{
+  GstElement *bin;
+  GstPad *pad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+
+  pipe_str = g_strdup_printf ("videotestsrc timestamp-offset=%" G_GUINT64_FORMAT
+      " num-buffers=10 ! video/x-raw,format=(string)I420,framerate=10/1"
+      " ! theoraenc ! fakesink name=fs0", TIMESTAMP_OFFSET);
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fs0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* header packets should have timestamp == NONE, granulepos 0, IN_CAPS */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  {
+    GstClockTime next_timestamp;
+    gint64 last_granulepos;
+
+    /* first buffer should have timestamp of TIMESTAMP_OFFSET, granulepos to
+     * match the timestamp of the end of the last sample in the output buffer.
+     * Note that one cannot go timestamp->granulepos->timestamp and get the
+     * same value due to loss of precision with granulepos. theoraenc does
+     * take care to timestamp correctly based on the offset of the input data
+     * however, so it does do sub-granulepos timestamping. */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    last_granulepos = GST_BUFFER_OFFSET_END (buffer);
+    check_buffer_timestamp (buffer, TIMESTAMP_OFFSET);
+    /* don't really have a good way of checking duration... */
+    check_buffer_granulepos_from_starttime (buffer, TIMESTAMP_OFFSET);
+    check_buffer_is_header (buffer, FALSE);
+
+    next_timestamp = TIMESTAMP_OFFSET + GST_BUFFER_DURATION (buffer);
+
+    gst_buffer_unref (buffer);
+
+    /* check continuity with the next buffer */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, next_timestamp);
+    check_buffer_duration (buffer,
+        gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
+            FRAMERATE)
+        - gst_util_uint64_scale (last_granulepos, GST_SECOND, FRAMERATE));
+    check_buffer_granulepos_from_starttime (buffer, next_timestamp);
+    check_buffer_is_header (buffer, FALSE);
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_continuity)
+{
+  GstElement *bin;
+  GstPad *pad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+
+  pipe_str = g_strdup_printf ("videotestsrc num-buffers=10"
+      " ! video/x-raw,format=(string)I420,framerate=10/1"
+      " ! theoraenc ! fakesink name=fs0");
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fs0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* header packets should have timestamp == NONE, granulepos 0 */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  {
+    GstClockTime next_timestamp;
+
+    /* first buffer should have timestamp of TIMESTAMP_OFFSET, granulepos to
+     * match the timestamp of the end of the last sample in the output buffer.
+     * Note that one cannot go timestamp->granulepos->timestamp and get the
+     * same value due to loss of precision with granulepos. theoraenc does
+     * take care to timestamp correctly based on the offset of the input data
+     * however, so it does do sub-granulepos timestamping. */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, 0);
+    /* plain division because I know the answer is exact */
+    check_buffer_duration (buffer, GST_SECOND / 10);
+    check_buffer_granulepos (buffer, 1 << GRANULEPOS_SHIFT);
+    check_buffer_is_header (buffer, FALSE);
+
+    next_timestamp = GST_BUFFER_DURATION (buffer);
+
+    gst_buffer_unref (buffer);
+
+    /* check continuity with the next buffer */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, next_timestamp);
+    check_buffer_duration (buffer, GST_SECOND / 10);
+    check_buffer_granulepos (buffer, (1 << GRANULEPOS_SHIFT) | 1);
+    check_buffer_is_header (buffer, FALSE);
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+static GstProbeReturn
+drop_second_data_buffer (GstPad * droppad, GstProbeType probe_type,
+    gpointer probe_obj, gpointer unused)
+{
+  GstBuffer *buffer = probe_obj;
+
+  if (GST_BUFFER_OFFSET (buffer) == 1)
+    return GST_PROBE_DROP;
+  else
+    return GST_PROBE_OK;
+}
+
+GST_START_TEST (test_discontinuity)
+{
+  GstElement *bin;
+  GstPad *pad, *droppad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+  guint drop_id;
+
+  pipe_str = g_strdup_printf ("videotestsrc num-buffers=10"
+      " ! video/x-raw,format=(string)I420,framerate=10/1"
+      " ! theoraenc ! fakesink name=fs0");
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* the plan: same as test_continuity, but dropping a buffer and seeing if
+     theoraenc correctly notes the discontinuity */
+
+  /* get the pad to use to drop buffers */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "theoraenc0");
+
+    fail_unless (sink != NULL, "Could not get theoraenc out of bin");
+    droppad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (droppad != NULL, "Could not get pad out of theoraenc");
+    gst_object_unref (sink);
+  }
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fs0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  drop_id = gst_pad_add_probe (droppad, GST_PROBE_TYPE_BUFFER,
+      drop_second_data_buffer, NULL, NULL);
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* header packets should have timestamp == NONE, granulepos 0 */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  check_buffer_is_header (buffer, TRUE);
+  gst_buffer_unref (buffer);
+
+  {
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, 0);
+    /* plain division because I know the answer is exact */
+    check_buffer_duration (buffer, GST_SECOND / 10);
+    check_buffer_granulepos (buffer, 1 << GRANULEPOS_SHIFT);
+    check_buffer_is_header (buffer, FALSE);
+    fail_if (GST_BUFFER_IS_DISCONT (buffer), "expected continuous buffer yo");
+    gst_buffer_unref (buffer);
+
+    /* check discontinuity with the next buffer */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_duration (buffer, GST_SECOND / 10);
+    /* After a discont, we'll always get a keyframe, so this one should be 
+     * 3<<GRANULEPOS_SHIFT */
+    check_buffer_granulepos (buffer, 3 << GRANULEPOS_SHIFT);
+    check_buffer_is_header (buffer, FALSE);
+    fail_unless (GST_BUFFER_IS_DISCONT (buffer),
+        "expected discontinuous buffer yo");
+    gst_buffer_unref (buffer);
+
+    /* Then the buffer after that should be continuous */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    fail_if (GST_BUFFER_IS_DISCONT (buffer), "expected continuous buffer yo");
+    /* plain division because I know the answer is exact */
+    check_buffer_duration (buffer, GST_SECOND / 10);
+    check_buffer_granulepos (buffer, (3 << GRANULEPOS_SHIFT) | 1);
+    check_buffer_is_header (buffer, FALSE);
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+  gst_pad_remove_probe (droppad, drop_id);
+
+  gst_object_unref (droppad);
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+#endif /* #ifndef GST_DISABLE_PARSE */
+
+static Suite *
+theoraenc_suite (void)
+{
+  Suite *s = suite_create ("theoraenc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+
+  check_libtheora ();
+
+#ifndef GST_DISABLE_PARSE
+  tcase_add_test (tc_chain, test_granulepos_offset);
+  tcase_add_test (tc_chain, test_continuity);
+  tcase_add_test (tc_chain, test_discontinuity);
+#endif
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = theoraenc_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/pipelines/vorbisdec.c b/tests/check/pipelines/vorbisdec.c
new file mode 100644
index 0000000..1df6741
--- /dev/null
+++ b/tests/check/pipelines/vorbisdec.c
@@ -0,0 +1,118 @@
+/* GStreamer
+ *
+ * unit test for vorbisdec
+ *
+ * Copyright (C) 2007 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+
+#ifndef GST_DISABLE_PARSE
+
+static GMainLoop *loop;
+static gint messages = 0;
+
+static void
+element_message_cb (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+  gchar *s;
+
+  s = gst_structure_to_string (gst_message_get_structure (message));
+  GST_DEBUG ("Received message: %s", s);
+  g_free (s);
+
+  messages++;
+}
+
+static void
+eos_message_cb (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+  GST_DEBUG ("Received eos");
+  g_main_loop_quit (loop);
+}
+
+GST_START_TEST (test_timestamps)
+{
+  GstElement *pipeline;
+  gchar *pipe_str;
+  GstBus *bus;
+  GError *error = NULL;
+
+  pipe_str = g_strdup_printf ("audiotestsrc num-buffers=100"
+      " ! audio/x-raw,rate=44100 ! audioconvert ! vorbisenc ! vorbisdec"
+      " ! identity check-imperfect-timestamp=TRUE ! fakesink");
+
+  pipeline = gst_parse_launch (pipe_str, &error);
+  fail_unless (pipeline != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  bus = gst_element_get_bus (pipeline);
+  fail_if (bus == NULL);
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message::element", (GCallback) element_message_cb,
+      NULL);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_cb, NULL);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* run until we receive EOS */
+  loop = g_main_loop_new (NULL, FALSE);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  fail_if (messages > 0, "Received imperfect timestamp messages");
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+#endif /* #ifndef GST_DISABLE_PARSE */
+
+static Suite *
+vorbisenc_suite (void)
+{
+  Suite *s = suite_create ("vorbisenc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+#ifndef GST_DISABLE_PARSE
+  tcase_add_test (tc_chain, test_timestamps);
+#endif
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = vorbisenc_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/check/pipelines/vorbisenc.c b/tests/check/pipelines/vorbisenc.c
new file mode 100644
index 0000000..a172479
--- /dev/null
+++ b/tests/check/pipelines/vorbisenc.c
@@ -0,0 +1,418 @@
+/* GStreamer
+ *
+ * unit test for vorbisenc
+ *
+ * Copyright (C) 2006 Andy Wingo <wingo at pobox.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+
+#ifndef GST_DISABLE_PARSE
+
+#define TIMESTAMP_OFFSET G_GINT64_CONSTANT(3249870963)
+
+static void
+check_buffer_timestamp (GstBuffer * buffer, GstClockTime timestamp)
+{
+  fail_unless (GST_BUFFER_TIMESTAMP (buffer) == timestamp,
+      "expected timestamp %" GST_TIME_FORMAT
+      ", but got timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+}
+
+static void
+check_buffer_duration (GstBuffer * buffer, GstClockTime duration)
+{
+  fail_unless (GST_BUFFER_DURATION (buffer) == duration,
+      "expected duration %" GST_TIME_FORMAT
+      ", but got duration %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (duration), GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
+}
+
+static void
+check_buffer_granulepos (GstBuffer * buffer, gint64 granulepos)
+{
+  GstClockTime clocktime;
+
+  fail_unless (GST_BUFFER_OFFSET_END (buffer) == granulepos,
+      "expected granulepos %" G_GUINT64_FORMAT
+      ", but got granulepos %" G_GUINT64_FORMAT,
+      granulepos, GST_BUFFER_OFFSET_END (buffer));
+
+  /* contrary to what we record as TIMESTAMP, we can use OFFSET to check
+   * the granulepos correctly here */
+  clocktime = gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), 44100,
+      GST_SECOND);
+
+  fail_unless (clocktime == GST_BUFFER_OFFSET (buffer),
+      "expected OFFSET set to clocktime %" GST_TIME_FORMAT
+      ", but got %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (clocktime), GST_TIME_ARGS (GST_BUFFER_OFFSET (buffer)));
+}
+
+/* this check is here to check that the granulepos we derive from the timestamp
+   is about correct. This is "about correct" because you can't precisely go from
+   timestamp to granulepos due to the downward-rounding characteristics of
+   gst_util_uint64_scale, so you check if granulepos is equal to the number, or
+   the number plus one. */
+static void
+check_buffer_granulepos_from_endtime (GstBuffer * buffer, GstClockTime endtime)
+{
+  gint64 granulepos, expected;
+
+  granulepos = GST_BUFFER_OFFSET_END (buffer);
+  expected = gst_util_uint64_scale (endtime, 44100, GST_SECOND);
+
+  fail_unless (granulepos == expected || granulepos == expected + 1,
+      "expected granulepos %" G_GUINT64_FORMAT
+      " or %" G_GUINT64_FORMAT
+      ", but got granulepos %" G_GUINT64_FORMAT,
+      expected, expected + 1, granulepos);
+}
+
+GST_START_TEST (test_granulepos_offset)
+{
+  GstElement *bin;
+  GstPad *pad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+
+  pipe_str = g_strdup_printf ("audiotestsrc timestamp-offset=%" G_GUINT64_FORMAT
+      " ! audio/x-raw,rate=44100"
+      " ! audioconvert ! vorbisenc ! fakesink", TIMESTAMP_OFFSET);
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* header packets should have timestamp == NONE, granulepos 0 */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  GST_DEBUG ("Got buffer in test");
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+  GST_DEBUG ("Unreffed buffer in test");
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  {
+    GstClockTime next_timestamp;
+    gint64 last_granulepos = 0;
+
+    /* first buffer should have timestamp of TIMESTAMP_OFFSET, granulepos to
+     * match the timestamp of the end of the last sample in the output buffer.
+     * Note that one cannot go timestamp->granulepos->timestamp and get the same
+     * value due to loss of precision with granulepos. vorbisenc does take care
+     * to timestamp correctly based on the offset of the input data however, so
+     * it does do sub-granulepos timestamping. */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    last_granulepos = GST_BUFFER_OFFSET_END (buffer);
+    check_buffer_timestamp (buffer, TIMESTAMP_OFFSET);
+    /* don't really have a good way of checking duration... */
+    check_buffer_granulepos_from_endtime (buffer,
+        TIMESTAMP_OFFSET + GST_BUFFER_DURATION (buffer));
+
+    next_timestamp = TIMESTAMP_OFFSET + GST_BUFFER_DURATION (buffer);
+
+    gst_buffer_unref (buffer);
+
+    /* check continuity with the next buffer */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, next_timestamp);
+    check_buffer_duration (buffer,
+        gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
+            44100)
+        - gst_util_uint64_scale (last_granulepos, GST_SECOND, 44100));
+    check_buffer_granulepos_from_endtime (buffer,
+        next_timestamp + GST_BUFFER_DURATION (buffer));
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_timestamps)
+{
+  GstElement *bin;
+  GstPad *pad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+
+  pipe_str = g_strdup_printf ("audiotestsrc"
+      " ! audio/x-raw,rate=44100 ! audioconvert ! vorbisenc ! fakesink");
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* check header packets */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  {
+    GstClockTime next_timestamp;
+    gint64 last_granulepos;
+
+    /* first buffer has timestamp 0 */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    last_granulepos = GST_BUFFER_OFFSET_END (buffer);
+    check_buffer_timestamp (buffer, 0);
+    /* don't really have a good way of checking duration... */
+    check_buffer_granulepos_from_endtime (buffer, GST_BUFFER_DURATION (buffer));
+
+    next_timestamp = GST_BUFFER_DURATION (buffer);
+
+    gst_buffer_unref (buffer);
+
+    /* check continuity with the next buffer */
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    check_buffer_timestamp (buffer, next_timestamp);
+    check_buffer_duration (buffer,
+        gst_util_uint64_scale (GST_BUFFER_OFFSET_END (buffer), GST_SECOND,
+            44100)
+        - gst_util_uint64_scale (last_granulepos, GST_SECOND, 44100));
+    check_buffer_granulepos_from_endtime (buffer,
+        next_timestamp + GST_BUFFER_DURATION (buffer));
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+static GstProbeReturn
+drop_second_data_buffer (GstPad * droppad, GstProbeType type,
+    GstBuffer * buffer, gpointer unused)
+{
+  GstProbeReturn res = GST_PROBE_OK;
+
+  if (GST_BUFFER_OFFSET (buffer) == 1024)
+    res = GST_PROBE_DROP;
+
+  GST_DEBUG ("dropping %d", res);
+
+  return res;
+}
+
+GST_START_TEST (test_discontinuity)
+{
+  GstElement *bin;
+  GstPad *pad, *droppad;
+  gchar *pipe_str;
+  GstBuffer *buffer;
+  GError *error = NULL;
+  guint drop_id;
+
+  pipe_str = g_strdup_printf ("audiotestsrc samplesperbuffer=1024"
+      " ! audio/x-raw,rate=44100" " ! audioconvert ! vorbisenc ! fakesink");
+
+  bin = gst_parse_launch (pipe_str, &error);
+  fail_unless (bin != NULL, "Error parsing pipeline: %s",
+      error ? error->message : "(invalid error)");
+  g_free (pipe_str);
+
+  /* the plan: same as test_timestamps, but dropping a buffer and seeing if
+     vorbisenc correctly notes the discontinuity */
+
+  /* get the pad to use to drop buffers */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "vorbisenc0");
+
+    fail_unless (sink != NULL, "Could not get vorbisenc out of bin");
+    droppad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (droppad != NULL, "Could not get pad out of vorbisenc");
+    gst_object_unref (sink);
+  }
+
+  /* get the pad */
+  {
+    GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink0");
+
+    fail_unless (sink != NULL, "Could not get fakesink out of bin");
+    pad = gst_element_get_static_pad (sink, "sink");
+    fail_unless (pad != NULL, "Could not get pad out of fakesink");
+    gst_object_unref (sink);
+  }
+
+  drop_id = gst_pad_add_probe (droppad, GST_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) drop_second_data_buffer, NULL, NULL);
+  gst_buffer_straw_start_pipeline (bin, pad);
+
+  /* check header packets */
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  buffer = gst_buffer_straw_get_buffer (bin, pad);
+  check_buffer_timestamp (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_duration (buffer, GST_CLOCK_TIME_NONE);
+  check_buffer_granulepos (buffer, 0);
+  gst_buffer_unref (buffer);
+
+  /* two phases: continuous granulepos values up to 1024, then a first
+     discontinuous granulepos whose granulepos corresponds to a gap ending at
+     2048. */
+  {
+    GstClockTime next_timestamp = 0;
+    gint64 last_granulepos = 0;
+
+    while (last_granulepos < 1024) {
+      buffer = gst_buffer_straw_get_buffer (bin, pad);
+      last_granulepos = GST_BUFFER_OFFSET_END (buffer);
+      check_buffer_timestamp (buffer, next_timestamp);
+      fail_if (GST_BUFFER_IS_DISCONT (buffer), "expected continuous buffer");
+      next_timestamp += GST_BUFFER_DURATION (buffer);
+      gst_buffer_unref (buffer);
+    }
+
+    fail_unless (last_granulepos == 1024,
+        "unexpected granulepos: %" G_GUINT64_FORMAT, last_granulepos);
+  }
+
+  {
+    buffer = gst_buffer_straw_get_buffer (bin, pad);
+    /* The first buffer after the discontinuity will produce zero output
+     * samples (because of the overlap/add), so it won't increment the 
+     * granulepos, which should be 2048 after the discontinuity.
+     */
+    fail_unless (GST_BUFFER_IS_DISCONT (buffer),
+        "expected discontinuous buffer");
+    fail_unless (GST_BUFFER_OFFSET_END (buffer) == 2048,
+        "expected granulepos after gap: %" G_GUINT64_FORMAT,
+        GST_BUFFER_OFFSET_END (buffer));
+    gst_buffer_unref (buffer);
+  }
+
+  gst_buffer_straw_stop_pipeline (bin, pad);
+  gst_pad_remove_probe (droppad, drop_id);
+
+  gst_object_unref (droppad);
+  gst_object_unref (pad);
+  gst_object_unref (bin);
+}
+
+GST_END_TEST;
+
+#endif /* #ifndef GST_DISABLE_PARSE */
+
+static Suite *
+vorbisenc_suite (void)
+{
+  Suite *s = suite_create ("vorbisenc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+#ifndef GST_DISABLE_PARSE
+  tcase_add_test (tc_chain, test_granulepos_offset);
+  tcase_add_test (tc_chain, test_timestamps);
+  tcase_add_test (tc_chain, test_discontinuity);
+#endif
+
+  return s;
+}
+
+int
+main (int argc, char **argv)
+{
+  int nf;
+
+  Suite *s = vorbisenc_suite ();
+  SRunner *sr = srunner_create (s);
+
+  gst_check_init (&argc, &argv);
+
+  srunner_run_all (sr, CK_NORMAL);
+  nf = srunner_ntests_failed (sr);
+  srunner_free (sr);
+
+  return nf;
+}
diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am
new file mode 100644
index 0000000..317f851
--- /dev/null
+++ b/tests/examples/Makefile.am
@@ -0,0 +1,15 @@
+if HAVE_FT2
+FT2_SUBDIRS = seek snapshot
+else
+FT2_SUBDIRS =
+endif
+
+if USE_GIO
+GIO_SUBDIRS = gio
+endif
+
+SUBDIRS = app audio dynamic $(FT2_SUBDIRS) $(GIO_SUBDIRS) overlay playrec volume encoding
+
+DIST_SUBDIRS = app audio dynamic gio overlay seek snapshot playrec volume encoding
+
+include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
new file mode 100644
index 0000000..7766b57
--- /dev/null
+++ b/tests/examples/Makefile.in
@@ -0,0 +1,777 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# include this at the end of $MODULE/ext/Makefile.am to force make to
+# build subdirectories in parallel when make -jN is used. We will end up
+# descending into all subdirectories a second time, but only after the first
+# (parallel) run has finished, so it should go right through the second time.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
+subdir = tests/examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_FT2_FALSE@FT2_SUBDIRS = 
+@HAVE_FT2_TRUE@FT2_SUBDIRS = seek snapshot
+@USE_GIO_TRUE@GIO_SUBDIRS = gio
+SUBDIRS = app audio dynamic $(FT2_SUBDIRS) $(GIO_SUBDIRS) overlay playrec volume encoding
+DIST_SUBDIRS = app audio dynamic gio overlay seek snapshot playrec volume encoding
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/parallel-subdirs.mak $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+.PHONY: independent-subdirs $(SUBDIRS)
+
+independent-subdirs: $(SUBDIRS)
+
+$(SUBDIRS):
+	$(MAKE) -C $@
+
+all-recursive: independent-subdirs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/app/Makefile.am b/tests/examples/app/Makefile.am
new file mode 100644
index 0000000..4f17ad7
--- /dev/null
+++ b/tests/examples/app/Makefile.am
@@ -0,0 +1,32 @@
+
+noinst_PROGRAMS = appsrc_ex appsrc-stream appsrc-stream2 appsrc-ra \
+		  appsrc-seekable appsink-src
+
+appsrc_ex_SOURCES = appsrc_ex.c
+appsrc_ex_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_ex_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS)
+
+appsrc_stream_SOURCES = appsrc-stream.c
+appsrc_stream_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_stream_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+
+appsrc_stream2_SOURCES = appsrc-stream2.c
+appsrc_stream2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_stream2_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+
+appsrc_ra_SOURCES = appsrc-ra.c
+appsrc_ra_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_ra_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+
+appsrc_seekable_SOURCES = appsrc-seekable.c
+appsrc_seekable_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_seekable_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+
+appsink_src_SOURCES = appsink-src.c
+appsink_src_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsink_src_LDADD = \
+    $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+    $(GST_BASE_LIBS) $(GST_LIBS)
+
diff --git a/tests/examples/app/Makefile.in b/tests/examples/app/Makefile.in
new file mode 100644
index 0000000..8e8b61c
--- /dev/null
+++ b/tests/examples/app/Makefile.in
@@ -0,0 +1,873 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = appsrc_ex$(EXEEXT) appsrc-stream$(EXEEXT) \
+	appsrc-stream2$(EXEEXT) appsrc-ra$(EXEEXT) \
+	appsrc-seekable$(EXEEXT) appsink-src$(EXEEXT)
+subdir = tests/examples/app
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_appsink_src_OBJECTS = appsink_src-appsink-src.$(OBJEXT)
+appsink_src_OBJECTS = $(am_appsink_src_OBJECTS)
+am__DEPENDENCIES_1 =
+appsink_src_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+appsink_src_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsink_src_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_appsrc_ra_OBJECTS = appsrc_ra-appsrc-ra.$(OBJEXT)
+appsrc_ra_OBJECTS = $(am_appsrc_ra_OBJECTS)
+appsrc_ra_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+appsrc_ra_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsrc_ra_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_appsrc_seekable_OBJECTS =  \
+	appsrc_seekable-appsrc-seekable.$(OBJEXT)
+appsrc_seekable_OBJECTS = $(am_appsrc_seekable_OBJECTS)
+appsrc_seekable_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+appsrc_seekable_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(appsrc_seekable_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+am_appsrc_stream_OBJECTS = appsrc_stream-appsrc-stream.$(OBJEXT)
+appsrc_stream_OBJECTS = $(am_appsrc_stream_OBJECTS)
+appsrc_stream_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+appsrc_stream_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsrc_stream_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_appsrc_stream2_OBJECTS = appsrc_stream2-appsrc-stream2.$(OBJEXT)
+appsrc_stream2_OBJECTS = $(am_appsrc_stream2_OBJECTS)
+appsrc_stream2_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+appsrc_stream2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(appsrc_stream2_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+am_appsrc_ex_OBJECTS = appsrc_ex-appsrc_ex.$(OBJEXT)
+appsrc_ex_OBJECTS = $(am_appsrc_ex_OBJECTS)
+appsrc_ex_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+appsrc_ex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsrc_ex_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \
+	$(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \
+	$(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES)
+DIST_SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \
+	$(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \
+	$(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+appsrc_ex_SOURCES = appsrc_ex.c
+appsrc_ex_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_ex_LDADD = \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS)
+
+appsrc_stream_SOURCES = appsrc-stream.c
+appsrc_stream_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_stream_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+appsrc_stream2_SOURCES = appsrc-stream2.c
+appsrc_stream2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_stream2_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+appsrc_ra_SOURCES = appsrc-ra.c
+appsrc_ra_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_ra_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+appsrc_seekable_SOURCES = appsrc-seekable.c
+appsrc_seekable_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsrc_seekable_LDADD = $(GST_BASE_LIBS) $(GST_LIBS)
+appsink_src_SOURCES = appsink-src.c
+appsink_src_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsink_src_LDADD = \
+    $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_MAJORMINOR@.la \
+    $(GST_BASE_LIBS) $(GST_LIBS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/app/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/app/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+appsink-src$(EXEEXT): $(appsink_src_OBJECTS) $(appsink_src_DEPENDENCIES) 
+	@rm -f appsink-src$(EXEEXT)
+	$(AM_V_CCLD)$(appsink_src_LINK) $(appsink_src_OBJECTS) $(appsink_src_LDADD) $(LIBS)
+appsrc-ra$(EXEEXT): $(appsrc_ra_OBJECTS) $(appsrc_ra_DEPENDENCIES) 
+	@rm -f appsrc-ra$(EXEEXT)
+	$(AM_V_CCLD)$(appsrc_ra_LINK) $(appsrc_ra_OBJECTS) $(appsrc_ra_LDADD) $(LIBS)
+appsrc-seekable$(EXEEXT): $(appsrc_seekable_OBJECTS) $(appsrc_seekable_DEPENDENCIES) 
+	@rm -f appsrc-seekable$(EXEEXT)
+	$(AM_V_CCLD)$(appsrc_seekable_LINK) $(appsrc_seekable_OBJECTS) $(appsrc_seekable_LDADD) $(LIBS)
+appsrc-stream$(EXEEXT): $(appsrc_stream_OBJECTS) $(appsrc_stream_DEPENDENCIES) 
+	@rm -f appsrc-stream$(EXEEXT)
+	$(AM_V_CCLD)$(appsrc_stream_LINK) $(appsrc_stream_OBJECTS) $(appsrc_stream_LDADD) $(LIBS)
+appsrc-stream2$(EXEEXT): $(appsrc_stream2_OBJECTS) $(appsrc_stream2_DEPENDENCIES) 
+	@rm -f appsrc-stream2$(EXEEXT)
+	$(AM_V_CCLD)$(appsrc_stream2_LINK) $(appsrc_stream2_OBJECTS) $(appsrc_stream2_LDADD) $(LIBS)
+appsrc_ex$(EXEEXT): $(appsrc_ex_OBJECTS) $(appsrc_ex_DEPENDENCIES) 
+	@rm -f appsrc_ex$(EXEEXT)
+	$(AM_V_CCLD)$(appsrc_ex_LINK) $(appsrc_ex_OBJECTS) $(appsrc_ex_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink_src-appsink-src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ex-appsrc_ex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ra-appsrc-ra.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_seekable-appsrc-seekable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_stream-appsrc-stream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_stream2-appsrc-stream2.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+appsink_src-appsink-src.o: appsink-src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src_CFLAGS) $(CFLAGS) -MT appsink_src-appsink-src.o -MD -MP -MF $(DEPDIR)/appsink_src-appsink-src.Tpo -c -o appsink_src-appsink-src.o `test -f 'appsink-src.c' || echo '$(srcdir)/'`appsink-src.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src-appsink-src.Tpo $(DEPDIR)/appsink_src-appsink-src.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsink-src.c' object='appsink_src-appsink-src.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src_CFLAGS) $(CFLAGS) -c -o appsink_src-appsink-src.o `test -f 'appsink-src.c' || echo '$(srcdir)/'`appsink-src.c
+
+appsink_src-appsink-src.obj: appsink-src.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src_CFLAGS) $(CFLAGS) -MT appsink_src-appsink-src.obj -MD -MP -MF $(DEPDIR)/appsink_src-appsink-src.Tpo -c -o appsink_src-appsink-src.obj `if test -f 'appsink-src.c'; then $(CYGPATH_W) 'appsink-src.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src-appsink-src.Tpo $(DEPDIR)/appsink_src-appsink-src.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsink-src.c' object='appsink_src-appsink-src.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src_CFLAGS) $(CFLAGS) -c -o appsink_src-appsink-src.obj `if test -f 'appsink-src.c'; then $(CYGPATH_W) 'appsink-src.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src.c'; fi`
+
+appsrc_ra-appsrc-ra.o: appsrc-ra.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -MT appsrc_ra-appsrc-ra.o -MD -MP -MF $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo -c -o appsrc_ra-appsrc-ra.o `test -f 'appsrc-ra.c' || echo '$(srcdir)/'`appsrc-ra.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo $(DEPDIR)/appsrc_ra-appsrc-ra.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-ra.c' object='appsrc_ra-appsrc-ra.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -c -o appsrc_ra-appsrc-ra.o `test -f 'appsrc-ra.c' || echo '$(srcdir)/'`appsrc-ra.c
+
+appsrc_ra-appsrc-ra.obj: appsrc-ra.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -MT appsrc_ra-appsrc-ra.obj -MD -MP -MF $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo -c -o appsrc_ra-appsrc-ra.obj `if test -f 'appsrc-ra.c'; then $(CYGPATH_W) 'appsrc-ra.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-ra.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo $(DEPDIR)/appsrc_ra-appsrc-ra.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-ra.c' object='appsrc_ra-appsrc-ra.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -c -o appsrc_ra-appsrc-ra.obj `if test -f 'appsrc-ra.c'; then $(CYGPATH_W) 'appsrc-ra.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-ra.c'; fi`
+
+appsrc_seekable-appsrc-seekable.o: appsrc-seekable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_seekable_CFLAGS) $(CFLAGS) -MT appsrc_seekable-appsrc-seekable.o -MD -MP -MF $(DEPDIR)/appsrc_seekable-appsrc-seekable.Tpo -c -o appsrc_seekable-appsrc-seekable.o `test -f 'appsrc-seekable.c' || echo '$(srcdir)/'`appsrc-seekable.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_seekable-appsrc-seekable.Tpo $(DEPDIR)/appsrc_seekable-appsrc-seekable.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-seekable.c' object='appsrc_seekable-appsrc-seekable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_seekable_CFLAGS) $(CFLAGS) -c -o appsrc_seekable-appsrc-seekable.o `test -f 'appsrc-seekable.c' || echo '$(srcdir)/'`appsrc-seekable.c
+
+appsrc_seekable-appsrc-seekable.obj: appsrc-seekable.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_seekable_CFLAGS) $(CFLAGS) -MT appsrc_seekable-appsrc-seekable.obj -MD -MP -MF $(DEPDIR)/appsrc_seekable-appsrc-seekable.Tpo -c -o appsrc_seekable-appsrc-seekable.obj `if test -f 'appsrc-seekable.c'; then $(CYGPATH_W) 'appsrc-seekable.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-seekable.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_seekable-appsrc-seekable.Tpo $(DEPDIR)/appsrc_seekable-appsrc-seekable.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-seekable.c' object='appsrc_seekable-appsrc-seekable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_seekable_CFLAGS) $(CFLAGS) -c -o appsrc_seekable-appsrc-seekable.obj `if test -f 'appsrc-seekable.c'; then $(CYGPATH_W) 'appsrc-seekable.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-seekable.c'; fi`
+
+appsrc_stream-appsrc-stream.o: appsrc-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream_CFLAGS) $(CFLAGS) -MT appsrc_stream-appsrc-stream.o -MD -MP -MF $(DEPDIR)/appsrc_stream-appsrc-stream.Tpo -c -o appsrc_stream-appsrc-stream.o `test -f 'appsrc-stream.c' || echo '$(srcdir)/'`appsrc-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_stream-appsrc-stream.Tpo $(DEPDIR)/appsrc_stream-appsrc-stream.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-stream.c' object='appsrc_stream-appsrc-stream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream_CFLAGS) $(CFLAGS) -c -o appsrc_stream-appsrc-stream.o `test -f 'appsrc-stream.c' || echo '$(srcdir)/'`appsrc-stream.c
+
+appsrc_stream-appsrc-stream.obj: appsrc-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream_CFLAGS) $(CFLAGS) -MT appsrc_stream-appsrc-stream.obj -MD -MP -MF $(DEPDIR)/appsrc_stream-appsrc-stream.Tpo -c -o appsrc_stream-appsrc-stream.obj `if test -f 'appsrc-stream.c'; then $(CYGPATH_W) 'appsrc-stream.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-stream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_stream-appsrc-stream.Tpo $(DEPDIR)/appsrc_stream-appsrc-stream.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-stream.c' object='appsrc_stream-appsrc-stream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream_CFLAGS) $(CFLAGS) -c -o appsrc_stream-appsrc-stream.obj `if test -f 'appsrc-stream.c'; then $(CYGPATH_W) 'appsrc-stream.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-stream.c'; fi`
+
+appsrc_stream2-appsrc-stream2.o: appsrc-stream2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream2_CFLAGS) $(CFLAGS) -MT appsrc_stream2-appsrc-stream2.o -MD -MP -MF $(DEPDIR)/appsrc_stream2-appsrc-stream2.Tpo -c -o appsrc_stream2-appsrc-stream2.o `test -f 'appsrc-stream2.c' || echo '$(srcdir)/'`appsrc-stream2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_stream2-appsrc-stream2.Tpo $(DEPDIR)/appsrc_stream2-appsrc-stream2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-stream2.c' object='appsrc_stream2-appsrc-stream2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream2_CFLAGS) $(CFLAGS) -c -o appsrc_stream2-appsrc-stream2.o `test -f 'appsrc-stream2.c' || echo '$(srcdir)/'`appsrc-stream2.c
+
+appsrc_stream2-appsrc-stream2.obj: appsrc-stream2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream2_CFLAGS) $(CFLAGS) -MT appsrc_stream2-appsrc-stream2.obj -MD -MP -MF $(DEPDIR)/appsrc_stream2-appsrc-stream2.Tpo -c -o appsrc_stream2-appsrc-stream2.obj `if test -f 'appsrc-stream2.c'; then $(CYGPATH_W) 'appsrc-stream2.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-stream2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_stream2-appsrc-stream2.Tpo $(DEPDIR)/appsrc_stream2-appsrc-stream2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc-stream2.c' object='appsrc_stream2-appsrc-stream2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_stream2_CFLAGS) $(CFLAGS) -c -o appsrc_stream2-appsrc-stream2.obj `if test -f 'appsrc-stream2.c'; then $(CYGPATH_W) 'appsrc-stream2.c'; else $(CYGPATH_W) '$(srcdir)/appsrc-stream2.c'; fi`
+
+appsrc_ex-appsrc_ex.o: appsrc_ex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ex_CFLAGS) $(CFLAGS) -MT appsrc_ex-appsrc_ex.o -MD -MP -MF $(DEPDIR)/appsrc_ex-appsrc_ex.Tpo -c -o appsrc_ex-appsrc_ex.o `test -f 'appsrc_ex.c' || echo '$(srcdir)/'`appsrc_ex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ex-appsrc_ex.Tpo $(DEPDIR)/appsrc_ex-appsrc_ex.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc_ex.c' object='appsrc_ex-appsrc_ex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ex_CFLAGS) $(CFLAGS) -c -o appsrc_ex-appsrc_ex.o `test -f 'appsrc_ex.c' || echo '$(srcdir)/'`appsrc_ex.c
+
+appsrc_ex-appsrc_ex.obj: appsrc_ex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ex_CFLAGS) $(CFLAGS) -MT appsrc_ex-appsrc_ex.obj -MD -MP -MF $(DEPDIR)/appsrc_ex-appsrc_ex.Tpo -c -o appsrc_ex-appsrc_ex.obj `if test -f 'appsrc_ex.c'; then $(CYGPATH_W) 'appsrc_ex.c'; else $(CYGPATH_W) '$(srcdir)/appsrc_ex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ex-appsrc_ex.Tpo $(DEPDIR)/appsrc_ex-appsrc_ex.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='appsrc_ex.c' object='appsrc_ex-appsrc_ex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ex_CFLAGS) $(CFLAGS) -c -o appsrc_ex-appsrc_ex.obj `if test -f 'appsrc_ex.c'; then $(CYGPATH_W) 'appsrc_ex.c'; else $(CYGPATH_W) '$(srcdir)/appsrc_ex.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/app/appsink-src.c b/tests/examples/app/appsink-src.c
new file mode 100644
index 0000000..9772e8a
--- /dev/null
+++ b/tests/examples/app/appsink-src.c
@@ -0,0 +1,186 @@
+#include <gst/gst.h>
+
+#include <string.h>
+
+#include <gst/app/gstappsrc.h>
+#include <gst/app/gstappsink.h>
+
+/* these are the caps we are going to pass through the appsink and appsrc */
+const gchar *audio_caps =
+    "audio/x-raw-int,channels=1,rate=8000,signed=(boolean)true,width=16,depth=16,endianness=1234";
+
+typedef struct
+{
+  GMainLoop *loop;
+  GstElement *source;
+  GstElement *sink;
+} ProgramData;
+
+/* called when the appsink notifies us that there is a new buffer ready for
+ * processing */
+static void
+on_new_buffer_from_source (GstElement * elt, ProgramData * data)
+{
+  guint size;
+  GstBuffer *app_buffer, *buffer;
+  GstElement *source;
+
+  /* get the buffer from appsink */
+  buffer = gst_app_sink_pull_buffer (GST_APP_SINK (elt));
+
+  /* turn it into an app buffer, it's not really needed, we could simply push
+   * the retrieved buffer from appsink into appsrc just fine.  */
+  size = gst_buffer_get_size (buffer);
+  g_print ("Pushing a buffer of size %d\n", size);
+  app_buffer = gst_buffer_new_and_alloc (size);
+
+  gst_buffer_copy_into (app_buffer, buffer, GST_BUFFER_COPY_MEMORY, 0, size);
+
+  /* we don't need the appsink buffer anymore */
+  gst_buffer_unref (buffer);
+
+  /* get source an push new buffer */
+  source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+  gst_app_src_push_buffer (GST_APP_SRC (source), app_buffer);
+}
+
+/* called when we get a GstMessage from the source pipeline when we get EOS, we
+ * notify the appsrc of it. */
+static gboolean
+on_source_message (GstBus * bus, GstMessage * message, ProgramData * data)
+{
+  GstElement *source;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_EOS:
+      g_print ("The source got dry\n");
+      source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+      gst_app_src_end_of_stream (GST_APP_SRC (source));
+      break;
+    case GST_MESSAGE_ERROR:
+      g_print ("Received error\n");
+      g_main_loop_quit (data->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+/* called when we get a GstMessage from the sink pipeline when we get EOS, we
+ * exit the mainloop and this testapp. */
+static gboolean
+on_sink_message (GstBus * bus, GstMessage * message, ProgramData * data)
+{
+  /* nil */
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_EOS:
+      g_print ("Finished playback\n");
+      g_main_loop_quit (data->loop);
+      break;
+    case GST_MESSAGE_ERROR:
+      g_print ("Received error\n");
+      g_main_loop_quit (data->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  gchar *filename = NULL;
+  ProgramData *data = NULL;
+  gchar *string = NULL;
+  GstBus *bus = NULL;
+  GstElement *testsink = NULL;
+  GstElement *testsource = NULL;
+
+  gst_init (&argc, &argv);
+
+  if (argc == 2)
+    filename = g_strdup (argv[1]);
+  else
+    filename = g_strdup ("/usr/share/sounds/ekiga/ring.wav");
+
+  data = g_new0 (ProgramData, 1);
+
+  data->loop = g_main_loop_new (NULL, FALSE);
+
+  /* setting up source pipeline, we read from a file and convert to our desired
+   * caps. */
+  string =
+      g_strdup_printf
+      ("filesrc location=\"%s\" ! wavparse ! audioconvert ! audioresample ! appsink caps=\"%s\" name=testsink",
+      filename, audio_caps);
+  g_free (filename);
+  data->source = gst_parse_launch (string, NULL);
+  g_free (string);
+
+  if (data->source == NULL) {
+    g_print ("Bad source\n");
+    return -1;
+  }
+
+  /* to be notified of messages from this pipeline, mostly EOS */
+  bus = gst_element_get_bus (data->source);
+  gst_bus_add_watch (bus, (GstBusFunc) on_source_message, data);
+  gst_object_unref (bus);
+
+  /* we use appsink in push mode, it sends us a signal when data is available
+   * and we pull out the data in the signal callback. We want the appsink to
+   * push as fast as it can, hence the sync=false */
+  testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink");
+  g_object_set (G_OBJECT (testsink), "emit-signals", TRUE, "sync", FALSE, NULL);
+  g_signal_connect (testsink, "new-buffer",
+      G_CALLBACK (on_new_buffer_from_source), data);
+  gst_object_unref (testsink);
+
+  /* setting up sink pipeline, we push audio data into this pipeline that will
+   * then play it back using the default audio sink. We have no blocking
+   * behaviour on the src which means that we will push the entire file into
+   * memory. */
+  string =
+      g_strdup_printf ("appsrc name=testsource caps=\"%s\" ! autoaudiosink",
+      audio_caps);
+  data->sink = gst_parse_launch (string, NULL);
+  g_free (string);
+
+  if (data->sink == NULL) {
+    g_print ("Bad sink\n");
+    return -1;
+  }
+
+  testsource = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+  /* configure for time-based format */
+  g_object_set (testsource, "format", GST_FORMAT_TIME, NULL);
+  /* uncomment the next line to block when appsrc has buffered enough */
+  /* g_object_set (testsource, "block", TRUE, NULL); */
+  gst_object_unref (testsource);
+
+  bus = gst_element_get_bus (data->sink);
+  gst_bus_add_watch (bus, (GstBusFunc) on_sink_message, data);
+  gst_object_unref (bus);
+
+  /* launching things */
+  gst_element_set_state (data->sink, GST_STATE_PLAYING);
+  gst_element_set_state (data->source, GST_STATE_PLAYING);
+
+  /* let's run !, this loop will quit when the sink pipeline goes EOS or when an
+   * error occurs in the source or sink pipelines. */
+  g_print ("Let's run!\n");
+  g_main_loop_run (data->loop);
+  g_print ("Going out\n");
+
+  gst_element_set_state (data->source, GST_STATE_NULL);
+  gst_element_set_state (data->sink, GST_STATE_NULL);
+
+  gst_object_unref (data->source);
+  gst_object_unref (data->sink);
+  g_main_loop_unref (data->loop);
+  g_free (data);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc-ra.c b/tests/examples/app/appsrc-ra.c
new file mode 100644
index 0000000..deb20ef
--- /dev/null
+++ b/tests/examples/app/appsrc-ra.c
@@ -0,0 +1,226 @@
+/* GStreamer
+ *
+ * appsrc-ra.c: example for using appsrc in random-access mode.
+ *
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY (appsrc_playbin_debug);
+#define GST_CAT_DEFAULT appsrc_playbin_debug
+
+/*
+ * an example application of using appsrc in random-access mode. When the
+ * appsrc requests data with the need-data signal, we retrieve a buffer of the
+ * requested size and push it to appsrc.
+ *
+ * This is a good example how one would deal with a local file resource.
+ *
+ * Appsrc in random-access mode needs seeking support and we must thus connect
+ * to the seek signal to perform any seeks when requested.
+ *
+ * In random-access mode we must set the size of the source material.
+ */
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *playbin;
+  GstElement *appsrc;
+
+  GMainLoop *loop;
+
+  GMappedFile *file;
+  guint8 *data;
+  gsize length;
+  guint64 offset;
+};
+
+App s_app;
+
+/* This method is called by the need-data signal callback, we feed data into the
+ * appsrc with the requested size.
+ */
+static void
+feed_data (GstElement * appsrc, guint size, App * app)
+{
+  GstBuffer *buffer;
+  GstFlowReturn ret;
+
+  buffer = gst_buffer_new ();
+
+  if (app->offset >= app->length) {
+    /* we are EOS, send end-of-stream */
+    g_signal_emit_by_name (app->appsrc, "end-of-stream", &ret);
+    return;
+  }
+
+  /* read the amount of data, we are allowed to return less if we are EOS */
+  if (app->offset + size > app->length)
+    size = app->length - app->offset;
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          app->data, NULL, app->length, app->offset, size));
+
+  /* we need to set an offset for random access */
+  GST_BUFFER_OFFSET (buffer) = app->offset;
+  GST_BUFFER_OFFSET_END (buffer) = app->offset + size;
+
+  GST_DEBUG ("feed buffer %p, offset %" G_GUINT64_FORMAT "-%u", buffer,
+      app->offset, size);
+  g_signal_emit_by_name (app->appsrc, "push-buffer", buffer, &ret);
+  gst_buffer_unref (buffer);
+
+  app->offset += size;
+
+  return;
+}
+
+/* called when appsrc wants us to return data from a new position with the next
+ * call to push-buffer. */
+static gboolean
+seek_data (GstElement * appsrc, guint64 position, App * app)
+{
+  GST_DEBUG ("seek to offset %" G_GUINT64_FORMAT, position);
+  app->offset = position;
+
+  return TRUE;
+}
+
+/* this callback is called when playbin2 has constructed a source object to read
+ * from. Since we provided the appsrc:// uri to playbin2, this will be the
+ * appsrc that we must handle. We set up some signals to push data into appsrc
+ * and one to perform a seek. */
+static void
+found_source (GObject * object, GObject * orig, GParamSpec * pspec, App * app)
+{
+  /* get a handle to the appsrc */
+  g_object_get (orig, pspec->name, &app->appsrc, NULL);
+
+  GST_DEBUG ("got appsrc %p", app->appsrc);
+
+  /* we can set the length in appsrc. This allows some elements to estimate the
+   * total duration of the stream. It's a good idea to set the property when you
+   * can but it's not required. */
+  g_object_set (app->appsrc, "size", (gint64) app->length, NULL);
+  gst_util_set_object_arg (G_OBJECT (app->appsrc), "stream-type",
+      "random-access");
+
+  /* configure the appsrc, we will push a buffer to appsrc when it needs more
+   * data */
+  g_signal_connect (app->appsrc, "need-data", G_CALLBACK (feed_data), app);
+  g_signal_connect (app->appsrc, "seek-data", G_CALLBACK (seek_data), app);
+}
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, App * app)
+{
+  GST_DEBUG ("got message %s",
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_error ("received error");
+      g_main_loop_quit (app->loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (app->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  GError *error = NULL;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  GST_DEBUG_CATEGORY_INIT (appsrc_playbin_debug, "appsrc-playbin", 0,
+      "appsrc playbin example");
+
+  if (argc < 2) {
+    g_print ("usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* try to open the file as an mmapped file */
+  app->file = g_mapped_file_new (argv[1], FALSE, &error);
+  if (error) {
+    g_print ("failed to open file: %s\n", error->message);
+    g_error_free (error);
+    return -2;
+  }
+  /* get some vitals, this will be used to read data from the mmapped file and
+   * feed it to appsrc. */
+  app->length = g_mapped_file_get_length (app->file);
+  app->data = (guint8 *) g_mapped_file_get_contents (app->file);
+  app->offset = 0;
+
+  /* create a mainloop to get messages */
+  app->loop = g_main_loop_new (NULL, TRUE);
+
+  app->playbin = gst_element_factory_make ("playbin2", NULL);
+  g_assert (app->playbin);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (app->playbin));
+
+  /* add watch for messages */
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);
+
+  /* set to read from appsrc */
+  g_object_set (app->playbin, "uri", "appsrc://", NULL);
+
+  /* get notification when the source is created so that we get a handle to it
+   * and can configure it */
+  g_signal_connect (app->playbin, "deep-notify::source",
+      (GCallback) found_source, app);
+
+  /* go to playing and wait in a mainloop. */
+  gst_element_set_state (app->playbin, GST_STATE_PLAYING);
+
+  /* this mainloop is stopped when we receive an error or EOS */
+  g_main_loop_run (app->loop);
+
+  GST_DEBUG ("stopping");
+
+  gst_element_set_state (app->playbin, GST_STATE_NULL);
+
+  /* free the file */
+  g_mapped_file_unref (app->file);
+
+  gst_object_unref (bus);
+  g_main_loop_unref (app->loop);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc-seekable.c b/tests/examples/app/appsrc-seekable.c
new file mode 100644
index 0000000..0da6e76
--- /dev/null
+++ b/tests/examples/app/appsrc-seekable.c
@@ -0,0 +1,230 @@
+/* GStreamer
+ *
+ * appsrc-seekable.c: example for using appsrc in seekable mode.
+ *
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY (appsrc_playbin_debug);
+#define GST_CAT_DEFAULT appsrc_playbin_debug
+
+/*
+ * an example application of using appsrc in seekable mode. When the
+ * appsrc requests data with the need-data signal, we retrieve a buffer and
+ * push it to appsrc. We can also use the method as demonstrated in
+ * appsrc-stream.c, ie. pushing buffers when we can.
+ *
+ * This is a good example how one would deal with a remote http server that
+ * supports range requests.
+ *
+ * Appsrc in seekable mode needs seeking support and we must thus connect
+ * to the seek signal to perform any seeks when requested.
+ *
+ * In seekable mode we should set the size of the source material.
+ */
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *playbin;
+  GstElement *appsrc;
+
+  GMainLoop *loop;
+
+  GMappedFile *file;
+  guint8 *data;
+  gsize length;
+  guint64 offset;
+};
+
+App s_app;
+
+#define CHUNK_SIZE  4096
+
+/* This method is called by the need-data signal callback, we feed data into the
+ * appsrc with an arbitrary size.
+ */
+static void
+feed_data (GstElement * appsrc, guint size, App * app)
+{
+  GstBuffer *buffer;
+  guint len;
+  GstFlowReturn ret;
+
+  buffer = gst_buffer_new ();
+
+  if (app->offset >= app->length) {
+    /* we are EOS, send end-of-stream */
+    g_signal_emit_by_name (app->appsrc, "end-of-stream", &ret);
+    return;
+  }
+
+  /* read any amount of data, we are allowed to return less if we are EOS */
+  len = CHUNK_SIZE;
+  if (app->offset + len > app->length)
+    len = app->length - app->offset;
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          app->data, NULL, app->length, app->offset, len));
+
+  GST_DEBUG ("feed buffer %p, offset %" G_GUINT64_FORMAT "-%u", buffer,
+      app->offset, len);
+  g_signal_emit_by_name (app->appsrc, "push-buffer", buffer, &ret);
+  gst_buffer_unref (buffer);
+
+  app->offset += len;
+
+  return;
+}
+
+/* called when appsrc wants us to return data from a new position with the next
+ * call to push-buffer. */
+static gboolean
+seek_data (GstElement * appsrc, guint64 position, App * app)
+{
+  GST_DEBUG ("seek to offset %" G_GUINT64_FORMAT, position);
+  app->offset = position;
+
+  return TRUE;
+}
+
+/* this callback is called when playbin2 has constructed a source object to read
+ * from. Since we provided the appsrc:// uri to playbin2, this will be the
+ * appsrc that we must handle. We set up some signals to push data into appsrc
+ * and one to perform a seek. */
+static void
+found_source (GObject * object, GObject * orig, GParamSpec * pspec, App * app)
+{
+  /* get a handle to the appsrc */
+  g_object_get (orig, pspec->name, &app->appsrc, NULL);
+
+  GST_DEBUG ("got appsrc %p", app->appsrc);
+
+  /* we can set the length in appsrc. This allows some elements to estimate the
+   * total duration of the stream. It's a good idea to set the property when you
+   * can but it's not required. */
+  g_object_set (app->appsrc, "size", (gint64) app->length, NULL);
+  /* we are seekable in push mode, this means that the element usually pushes
+   * out buffers of an undefined size and that seeks happen only occasionally
+   * and only by request of the user. */
+  gst_util_set_object_arg (G_OBJECT (app->appsrc), "stream-type", "seekable");
+
+  /* configure the appsrc, we will push a buffer to appsrc when it needs more
+   * data */
+  g_signal_connect (app->appsrc, "need-data", G_CALLBACK (feed_data), app);
+  g_signal_connect (app->appsrc, "seek-data", G_CALLBACK (seek_data), app);
+}
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, App * app)
+{
+  GST_DEBUG ("got message %s",
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_error ("received error");
+      g_main_loop_quit (app->loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (app->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  GError *error = NULL;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  GST_DEBUG_CATEGORY_INIT (appsrc_playbin_debug, "appsrc-playbin", 0,
+      "appsrc playbin example");
+
+  if (argc < 2) {
+    g_print ("usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* try to open the file as an mmapped file */
+  app->file = g_mapped_file_new (argv[1], FALSE, &error);
+  if (error) {
+    g_print ("failed to open file: %s\n", error->message);
+    g_error_free (error);
+    return -2;
+  }
+  /* get some vitals, this will be used to read data from the mmapped file and
+   * feed it to appsrc. */
+  app->length = g_mapped_file_get_length (app->file);
+  app->data = (guint8 *) g_mapped_file_get_contents (app->file);
+  app->offset = 0;
+
+  /* create a mainloop to get messages */
+  app->loop = g_main_loop_new (NULL, TRUE);
+
+  app->playbin = gst_element_factory_make ("playbin2", NULL);
+  g_assert (app->playbin);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (app->playbin));
+
+  /* add watch for messages */
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);
+
+  /* set to read from appsrc */
+  g_object_set (app->playbin, "uri", "appsrc://", NULL);
+
+  /* get notification when the source is created so that we get a handle to it
+   * and can configure it */
+  g_signal_connect (app->playbin, "deep-notify::source",
+      (GCallback) found_source, app);
+
+  /* go to playing and wait in a mainloop. */
+  gst_element_set_state (app->playbin, GST_STATE_PLAYING);
+
+  /* this mainloop is stopped when we receive an error or EOS */
+  g_main_loop_run (app->loop);
+
+  GST_DEBUG ("stopping");
+
+  gst_element_set_state (app->playbin, GST_STATE_NULL);
+
+  /* free the file */
+  g_mapped_file_unref (app->file);
+
+  gst_object_unref (bus);
+  g_main_loop_unref (app->loop);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc-stream.c b/tests/examples/app/appsrc-stream.c
new file mode 100644
index 0000000..75ecf77
--- /dev/null
+++ b/tests/examples/app/appsrc-stream.c
@@ -0,0 +1,250 @@
+/* GStreamer
+ *
+ * appsrc-stream.c: example for using appsrc in streaming mode.
+ *
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY (appsrc_playbin_debug);
+#define GST_CAT_DEFAULT appsrc_playbin_debug
+
+/*
+ * an example application of using appsrc in streaming push mode. We simply push
+ * buffers into appsrc. The size of the buffers we push can be any size we
+ * choose.
+ *
+ * This example is very close to how one would deal with a streaming webserver
+ * that does not support range requests or does not report the total file size.
+ *
+ * Some optimisations are done so that we don't push too much data. We connect
+ * to the need-data and enough-data signals to start/stop sending buffers.
+ *
+ * Appsrc in streaming mode (the default) does not support seeking so we don't
+ * have to handle any seek callbacks.
+ *
+ * Some formats are able to estimate the duration of the media file based on the
+ * file length (mp3, mpeg,..), others report an unknown length (ogg,..).
+ */
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *playbin;
+  GstElement *appsrc;
+
+  GMainLoop *loop;
+  guint sourceid;
+
+  GMappedFile *file;
+  guint8 *data;
+  gsize length;
+  guint64 offset;
+};
+
+App s_app;
+
+#define CHUNK_SIZE  4096
+
+/* This method is called by the idle GSource in the mainloop. We feed CHUNK_SIZE
+ * bytes into appsrc.
+ * The ide handler is added to the mainloop when appsrc requests us to start
+ * sending data (need-data signal) and is removed when appsrc has enough data
+ * (enough-data signal).
+ */
+static gboolean
+read_data (App * app)
+{
+  GstBuffer *buffer;
+  guint len;
+  GstFlowReturn ret;
+
+  buffer = gst_buffer_new ();
+
+  if (app->offset >= app->length) {
+    /* we are EOS, send end-of-stream and remove the source */
+    g_signal_emit_by_name (app->appsrc, "end-of-stream", &ret);
+    return FALSE;
+  }
+
+  /* read the next chunk */
+  len = CHUNK_SIZE;
+  if (app->offset + len > app->length)
+    len = app->length - app->offset;
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          app->data, NULL, app->length, app->offset, len));
+
+  GST_DEBUG ("feed buffer %p, offset %" G_GUINT64_FORMAT "-%u", buffer,
+      app->offset, len);
+  g_signal_emit_by_name (app->appsrc, "push-buffer", buffer, &ret);
+  gst_buffer_unref (buffer);
+  if (ret != GST_FLOW_OK) {
+    /* some error, stop sending data */
+    return FALSE;
+  }
+
+  app->offset += len;
+
+  return TRUE;
+}
+
+/* This signal callback is called when appsrc needs data, we add an idle handler
+ * to the mainloop to start pushing data into the appsrc */
+static void
+start_feed (GstElement * playbin, guint size, App * app)
+{
+  if (app->sourceid == 0) {
+    GST_DEBUG ("start feeding");
+    app->sourceid = g_idle_add ((GSourceFunc) read_data, app);
+  }
+}
+
+/* This callback is called when appsrc has enough data and we can stop sending.
+ * We remove the idle handler from the mainloop */
+static void
+stop_feed (GstElement * playbin, App * app)
+{
+  if (app->sourceid != 0) {
+    GST_DEBUG ("stop feeding");
+    g_source_remove (app->sourceid);
+    app->sourceid = 0;
+  }
+}
+
+/* this callback is called when playbin2 has constructed a source object to read
+ * from. Since we provided the appsrc:// uri to playbin2, this will be the
+ * appsrc that we must handle. We set up some signals to start and stop pushing
+ * data into appsrc */
+static void
+found_source (GObject * object, GObject * orig, GParamSpec * pspec, App * app)
+{
+  /* get a handle to the appsrc */
+  g_object_get (orig, pspec->name, &app->appsrc, NULL);
+
+  GST_DEBUG ("got appsrc %p", app->appsrc);
+
+  /* we can set the length in appsrc. This allows some elements to estimate the
+   * total duration of the stream. It's a good idea to set the property when you
+   * can but it's not required. */
+  g_object_set (app->appsrc, "size", (gint64) app->length, NULL);
+
+  /* configure the appsrc, we will push data into the appsrc from the
+   * mainloop. */
+  g_signal_connect (app->appsrc, "need-data", G_CALLBACK (start_feed), app);
+  g_signal_connect (app->appsrc, "enough-data", G_CALLBACK (stop_feed), app);
+}
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, App * app)
+{
+  GST_DEBUG ("got message %s",
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_error ("received error");
+      g_main_loop_quit (app->loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (app->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  GError *error = NULL;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  GST_DEBUG_CATEGORY_INIT (appsrc_playbin_debug, "appsrc-playbin", 0,
+      "appsrc playbin example");
+
+  if (argc < 2) {
+    g_print ("usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* try to open the file as an mmapped file */
+  app->file = g_mapped_file_new (argv[1], FALSE, &error);
+  if (error) {
+    g_print ("failed to open file: %s\n", error->message);
+    g_error_free (error);
+    return -2;
+  }
+  /* get some vitals, this will be used to read data from the mmapped file and
+   * feed it to appsrc. */
+  app->length = g_mapped_file_get_length (app->file);
+  app->data = (guint8 *) g_mapped_file_get_contents (app->file);
+  app->offset = 0;
+
+  /* create a mainloop to get messages and to handle the idle handler that will
+   * feed data to appsrc. */
+  app->loop = g_main_loop_new (NULL, TRUE);
+
+  app->playbin = gst_element_factory_make ("playbin2", NULL);
+  g_assert (app->playbin);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (app->playbin));
+
+  /* add watch for messages */
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);
+
+  /* set to read from appsrc */
+  g_object_set (app->playbin, "uri", "appsrc://", NULL);
+
+  /* get notification when the source is created so that we get a handle to it
+   * and can configure it */
+  g_signal_connect (app->playbin, "deep-notify::source",
+      (GCallback) found_source, app);
+
+  /* go to playing and wait in a mainloop. */
+  gst_element_set_state (app->playbin, GST_STATE_PLAYING);
+
+  /* this mainloop is stopped when we receive an error or EOS */
+  g_main_loop_run (app->loop);
+
+  GST_DEBUG ("stopping");
+
+  gst_element_set_state (app->playbin, GST_STATE_NULL);
+
+  /* free the file */
+  g_mapped_file_unref (app->file);
+
+  gst_object_unref (bus);
+  g_main_loop_unref (app->loop);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc-stream2.c b/tests/examples/app/appsrc-stream2.c
new file mode 100644
index 0000000..b92259e
--- /dev/null
+++ b/tests/examples/app/appsrc-stream2.c
@@ -0,0 +1,220 @@
+/* GStreamer
+ *
+ * appsrc-stream2.c: example for using appsrc in streaming mode.
+ *
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY (appsrc_playbin_debug);
+#define GST_CAT_DEFAULT appsrc_playbin_debug
+
+/*
+ * an example application of using appsrc in streaming pull mode. When the
+ * appsrc request data with the need-data signal, we retrieve a buffer of an
+ * arbitrary size and push it to appsrc.
+ *
+ * This example keeps the internal buffer queue of appsrc to a minimal size,
+ * only feeding data to appsrc when needed.
+ *
+ * This is a good example how one would deal with a live resource, such as a udp
+ * socket where one would feed the most recently acquired buffer to appsrc. 
+ *
+ * Usually one would timestamp the buffers with the running_time of the
+ * pipeline or configure the appsrc to do timestamping by setting the 
+ * do-timestamp property to TRUE.
+ *
+ * Appsrc in streaming mode (the default) does not support seeking so we don't
+ * have to handle any seek callbacks.
+ *
+ * Some formats are able to estimate the duration of the media file based on the
+ * file length (mp3, mpeg,..), others report an unknown length (ogg,..).
+ */
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *playbin;
+  GstElement *appsrc;
+
+  GMainLoop *loop;
+
+  GMappedFile *file;
+  guint8 *data;
+  gsize length;
+  guint64 offset;
+};
+
+App s_app;
+
+#define CHUNK_SIZE  4096
+
+/* This method is called by the need-data signal callback, we feed data into the
+ * appsrc.
+ */
+static void
+feed_data (GstElement * appsrc, guint size, App * app)
+{
+  GstBuffer *buffer;
+  guint len;
+  GstFlowReturn ret;
+
+  buffer = gst_buffer_new ();
+
+  if (app->offset >= app->length) {
+    /* we are EOS, send end-of-stream */
+    g_signal_emit_by_name (app->appsrc, "end-of-stream", &ret);
+    return;
+  }
+
+  /* read the next chunk */
+  len = CHUNK_SIZE;
+  if (app->offset + len > app->length)
+    len = app->length - app->offset;
+
+  gst_buffer_take_memory (buffer, -1,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          app->data, NULL, app->length, app->offset, len));
+
+  GST_DEBUG ("feed buffer %p, offset %" G_GUINT64_FORMAT "-%u", buffer,
+      app->offset, len);
+  g_signal_emit_by_name (app->appsrc, "push-buffer", buffer, &ret);
+  gst_buffer_unref (buffer);
+
+  app->offset += len;
+
+  return;
+}
+
+/* this callback is called when playbin2 has constructed a source object to read
+ * from. Since we provided the appsrc:// uri to playbin2, this will be the
+ * appsrc that we must handle. We set up a signals to push data into appsrc. */
+static void
+found_source (GObject * object, GObject * orig, GParamSpec * pspec, App * app)
+{
+  /* get a handle to the appsrc */
+  g_object_get (orig, pspec->name, &app->appsrc, NULL);
+
+  GST_DEBUG ("got appsrc %p", app->appsrc);
+
+  /* we can set the length in appsrc. This allows some elements to estimate the
+   * total duration of the stream. It's a good idea to set the property when you
+   * can but it's not required. */
+  g_object_set (app->appsrc, "size", (gint64) app->length, NULL);
+
+  /* configure the appsrc, we will push a buffer to appsrc when it needs more
+   * data */
+  g_signal_connect (app->appsrc, "need-data", G_CALLBACK (feed_data), app);
+}
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, App * app)
+{
+  GST_DEBUG ("got message %s",
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_error ("received error");
+      g_main_loop_quit (app->loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (app->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  GError *error = NULL;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  GST_DEBUG_CATEGORY_INIT (appsrc_playbin_debug, "appsrc-playbin", 0,
+      "appsrc playbin example");
+
+  if (argc < 2) {
+    g_print ("usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* try to open the file as an mmapped file */
+  app->file = g_mapped_file_new (argv[1], FALSE, &error);
+  if (error) {
+    g_print ("failed to open file: %s\n", error->message);
+    g_error_free (error);
+    return -2;
+  }
+  /* get some vitals, this will be used to read data from the mmapped file and
+   * feed it to appsrc. */
+  app->length = g_mapped_file_get_length (app->file);
+  app->data = (guint8 *) g_mapped_file_get_contents (app->file);
+  app->offset = 0;
+
+  /* create a mainloop to get messages */
+  app->loop = g_main_loop_new (NULL, TRUE);
+
+  app->playbin = gst_element_factory_make ("playbin2", NULL);
+  g_assert (app->playbin);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (app->playbin));
+
+  /* add watch for messages */
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);
+
+  /* set to read from appsrc */
+  g_object_set (app->playbin, "uri", "appsrc://", NULL);
+
+  /* get notification when the source is created so that we get a handle to it
+   * and can configure it */
+  g_signal_connect (app->playbin, "deep-notify::source",
+      (GCallback) found_source, app);
+
+  /* go to playing and wait in a mainloop. */
+  gst_element_set_state (app->playbin, GST_STATE_PLAYING);
+
+  /* this mainloop is stopped when we receive an error or EOS */
+  g_main_loop_run (app->loop);
+
+  GST_DEBUG ("stopping");
+
+  gst_element_set_state (app->playbin, GST_STATE_NULL);
+
+  /* free the file */
+  g_mapped_file_unref (app->file);
+
+  gst_object_unref (bus);
+  g_main_loop_unref (app->loop);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc_ex.c b/tests/examples/app/appsrc_ex.c
new file mode 100644
index 0000000..5468a66
--- /dev/null
+++ b/tests/examples/app/appsrc_ex.c
@@ -0,0 +1,86 @@
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/app/gstappsrc.h>
+#include <gst/app/gstappsink.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+typedef struct _App App;
+struct _App
+{
+  GstElement *pipe;
+  GstElement *src;
+  GstElement *id;
+  GstElement *sink;
+};
+
+App s_app;
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  int i;
+
+  gst_init (&argc, &argv);
+
+  app->pipe = gst_pipeline_new (NULL);
+  g_assert (app->pipe);
+
+  app->src = gst_element_factory_make ("appsrc", NULL);
+  g_assert (app->src);
+  gst_bin_add (GST_BIN (app->pipe), app->src);
+
+  app->id = gst_element_factory_make ("identity", NULL);
+  g_assert (app->id);
+  gst_bin_add (GST_BIN (app->pipe), app->id);
+
+  app->sink = gst_element_factory_make ("appsink", NULL);
+  g_assert (app->sink);
+  gst_bin_add (GST_BIN (app->pipe), app->sink);
+
+  gst_element_link (app->src, app->id);
+  gst_element_link (app->id, app->sink);
+
+  gst_element_set_state (app->pipe, GST_STATE_PLAYING);
+
+  for (i = 0; i < 10; i++) {
+    GstBuffer *buf;
+    void *data;
+
+    buf = gst_buffer_new_and_alloc (100);
+    data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+    memset (data, i, 100);
+    gst_buffer_unmap (buf, data, 100);
+
+    printf ("%d: pushing buffer for pointer %p, %p\n", i, data, buf);
+    gst_app_src_push_buffer (GST_APP_SRC (app->src), buf);
+  }
+
+  /* push EOS */
+  gst_app_src_end_of_stream (GST_APP_SRC (app->src));
+
+  /* _is_eos() does not block and returns TRUE if there is not currently an EOS
+   * to be retrieved */
+  while (!gst_app_sink_is_eos (GST_APP_SINK (app->sink))) {
+    GstBuffer *buf;
+
+    /* pull the next item, this can return NULL when there is no more data and
+     * EOS has been received */
+    buf = gst_app_sink_pull_buffer (GST_APP_SINK (app->sink));
+    printf ("retrieved buffer %p\n", buf);
+    if (buf)
+      gst_buffer_unref (buf);
+  }
+  gst_element_set_state (app->pipe, GST_STATE_NULL);
+
+  return 0;
+}
diff --git a/tests/examples/audio/Makefile.am b/tests/examples/audio/Makefile.am
new file mode 100644
index 0000000..49d7266
--- /dev/null
+++ b/tests/examples/audio/Makefile.am
@@ -0,0 +1,6 @@
+
+noinst_PROGRAMS = testchannels
+testchannels_SOURCES = testchannels.c
+testchannels_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+testchannels_LDADD = $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+                     $(GST_LIBS)
diff --git a/tests/examples/audio/Makefile.in b/tests/examples/audio/Makefile.in
new file mode 100644
index 0000000..97faf08
--- /dev/null
+++ b/tests/examples/audio/Makefile.in
@@ -0,0 +1,711 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = testchannels$(EXEEXT)
+subdir = tests/examples/audio
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_testchannels_OBJECTS = testchannels-testchannels.$(OBJEXT)
+testchannels_OBJECTS = $(am_testchannels_OBJECTS)
+am__DEPENDENCIES_1 =
+testchannels_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+testchannels_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testchannels_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(testchannels_SOURCES)
+DIST_SOURCES = $(testchannels_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+testchannels_SOURCES = testchannels.c
+testchannels_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+testchannels_LDADD = $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+                     $(GST_LIBS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/audio/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/audio/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+testchannels$(EXEEXT): $(testchannels_OBJECTS) $(testchannels_DEPENDENCIES) 
+	@rm -f testchannels$(EXEEXT)
+	$(AM_V_CCLD)$(testchannels_LINK) $(testchannels_OBJECTS) $(testchannels_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testchannels-testchannels.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+testchannels-testchannels.o: testchannels.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testchannels_CFLAGS) $(CFLAGS) -MT testchannels-testchannels.o -MD -MP -MF $(DEPDIR)/testchannels-testchannels.Tpo -c -o testchannels-testchannels.o `test -f 'testchannels.c' || echo '$(srcdir)/'`testchannels.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testchannels-testchannels.Tpo $(DEPDIR)/testchannels-testchannels.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='testchannels.c' object='testchannels-testchannels.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testchannels_CFLAGS) $(CFLAGS) -c -o testchannels-testchannels.o `test -f 'testchannels.c' || echo '$(srcdir)/'`testchannels.c
+
+testchannels-testchannels.obj: testchannels.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testchannels_CFLAGS) $(CFLAGS) -MT testchannels-testchannels.obj -MD -MP -MF $(DEPDIR)/testchannels-testchannels.Tpo -c -o testchannels-testchannels.obj `if test -f 'testchannels.c'; then $(CYGPATH_W) 'testchannels.c'; else $(CYGPATH_W) '$(srcdir)/testchannels.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testchannels-testchannels.Tpo $(DEPDIR)/testchannels-testchannels.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='testchannels.c' object='testchannels-testchannels.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testchannels_CFLAGS) $(CFLAGS) -c -o testchannels-testchannels.obj `if test -f 'testchannels.c'; then $(CYGPATH_W) 'testchannels.c'; else $(CYGPATH_W) '$(srcdir)/testchannels.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/audio/testchannels.c b/tests/examples/audio/testchannels.c
new file mode 100644
index 0000000..691bb58
--- /dev/null
+++ b/tests/examples/audio/testchannels.c
@@ -0,0 +1,49 @@
+/* GStreamer Multichannel Test
+ * (c) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/audio/multichannel.h>
+#include <gst/audio/audio-enumtypes.h>
+
+gint
+main (gint argc, gchar * argv[])
+{
+  gchar *str;
+  GstCaps *caps;
+  GstAudioChannelPosition pos[2] = { GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+    GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT
+  };
+
+  /* register multichannel type */
+  gst_init (&argc, &argv);
+  gst_audio_channel_position_get_type ();
+
+  /* test some caps-string conversions */
+  caps = gst_caps_new_simple ("audio/x-raw-int",
+      "channels", G_TYPE_INT, 2, NULL);
+  str = gst_caps_to_string (caps);
+  g_print ("Test caps #1: %s\n", str);
+  g_free (str);
+  gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
+  str = gst_caps_to_string (caps);
+  g_print ("Test caps #2: %s\n", str);
+  g_free (str);
+  gst_caps_unref (caps);
+
+  return 0;
+}
diff --git a/tests/examples/dynamic/Makefile.am b/tests/examples/dynamic/Makefile.am
new file mode 100644
index 0000000..6cdb8ff
--- /dev/null
+++ b/tests/examples/dynamic/Makefile.am
@@ -0,0 +1,21 @@
+noinst_PROGRAMS = addstream codec-select sprinkle sprinkle2 sprinkle3
+
+addstream_SOURCES = addstream.c 
+addstream_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+addstream_LDADD = $(GST_LIBS)
+
+codec_select_SOURCES = codec-select.c 
+codec_select_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+codec_select_LDADD = $(GST_LIBS)
+
+sprinkle_SOURCES = sprinkle.c 
+sprinkle_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle_LDADD = $(GST_LIBS)
+
+sprinkle2_SOURCES = sprinkle2.c 
+sprinkle2_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle2_LDADD = $(GST_LIBS)
+
+sprinkle3_SOURCES = sprinkle3.c 
+sprinkle3_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle3_LDADD = $(GST_LIBS)
diff --git a/tests/examples/dynamic/Makefile.in b/tests/examples/dynamic/Makefile.in
new file mode 100644
index 0000000..ac59926
--- /dev/null
+++ b/tests/examples/dynamic/Makefile.in
@@ -0,0 +1,827 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = addstream$(EXEEXT) codec-select$(EXEEXT) \
+	sprinkle$(EXEEXT) sprinkle2$(EXEEXT) sprinkle3$(EXEEXT)
+subdir = tests/examples/dynamic
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_addstream_OBJECTS = addstream-addstream.$(OBJEXT)
+addstream_OBJECTS = $(am_addstream_OBJECTS)
+am__DEPENDENCIES_1 =
+addstream_DEPENDENCIES = $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+addstream_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(addstream_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_codec_select_OBJECTS = codec_select-codec-select.$(OBJEXT)
+codec_select_OBJECTS = $(am_codec_select_OBJECTS)
+codec_select_DEPENDENCIES = $(am__DEPENDENCIES_1)
+codec_select_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(codec_select_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_sprinkle_OBJECTS = sprinkle-sprinkle.$(OBJEXT)
+sprinkle_OBJECTS = $(am_sprinkle_OBJECTS)
+sprinkle_DEPENDENCIES = $(am__DEPENDENCIES_1)
+sprinkle_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(sprinkle_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_sprinkle2_OBJECTS = sprinkle2-sprinkle2.$(OBJEXT)
+sprinkle2_OBJECTS = $(am_sprinkle2_OBJECTS)
+sprinkle2_DEPENDENCIES = $(am__DEPENDENCIES_1)
+sprinkle2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(sprinkle2_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_sprinkle3_OBJECTS = sprinkle3-sprinkle3.$(OBJEXT)
+sprinkle3_OBJECTS = $(am_sprinkle3_OBJECTS)
+sprinkle3_DEPENDENCIES = $(am__DEPENDENCIES_1)
+sprinkle3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(sprinkle3_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(addstream_SOURCES) $(codec_select_SOURCES) \
+	$(sprinkle_SOURCES) $(sprinkle2_SOURCES) $(sprinkle3_SOURCES)
+DIST_SOURCES = $(addstream_SOURCES) $(codec_select_SOURCES) \
+	$(sprinkle_SOURCES) $(sprinkle2_SOURCES) $(sprinkle3_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+addstream_SOURCES = addstream.c 
+addstream_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+addstream_LDADD = $(GST_LIBS)
+codec_select_SOURCES = codec-select.c 
+codec_select_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+codec_select_LDADD = $(GST_LIBS)
+sprinkle_SOURCES = sprinkle.c 
+sprinkle_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle_LDADD = $(GST_LIBS)
+sprinkle2_SOURCES = sprinkle2.c 
+sprinkle2_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle2_LDADD = $(GST_LIBS)
+sprinkle3_SOURCES = sprinkle3.c 
+sprinkle3_CFLAGS = $(GST_CFLAGS) -D_GNU_SOURCE
+sprinkle3_LDADD = $(GST_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+addstream$(EXEEXT): $(addstream_OBJECTS) $(addstream_DEPENDENCIES) 
+	@rm -f addstream$(EXEEXT)
+	$(AM_V_CCLD)$(addstream_LINK) $(addstream_OBJECTS) $(addstream_LDADD) $(LIBS)
+codec-select$(EXEEXT): $(codec_select_OBJECTS) $(codec_select_DEPENDENCIES) 
+	@rm -f codec-select$(EXEEXT)
+	$(AM_V_CCLD)$(codec_select_LINK) $(codec_select_OBJECTS) $(codec_select_LDADD) $(LIBS)
+sprinkle$(EXEEXT): $(sprinkle_OBJECTS) $(sprinkle_DEPENDENCIES) 
+	@rm -f sprinkle$(EXEEXT)
+	$(AM_V_CCLD)$(sprinkle_LINK) $(sprinkle_OBJECTS) $(sprinkle_LDADD) $(LIBS)
+sprinkle2$(EXEEXT): $(sprinkle2_OBJECTS) $(sprinkle2_DEPENDENCIES) 
+	@rm -f sprinkle2$(EXEEXT)
+	$(AM_V_CCLD)$(sprinkle2_LINK) $(sprinkle2_OBJECTS) $(sprinkle2_LDADD) $(LIBS)
+sprinkle3$(EXEEXT): $(sprinkle3_OBJECTS) $(sprinkle3_DEPENDENCIES) 
+	@rm -f sprinkle3$(EXEEXT)
+	$(AM_V_CCLD)$(sprinkle3_LINK) $(sprinkle3_OBJECTS) $(sprinkle3_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addstream-addstream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/codec_select-codec-select.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sprinkle-sprinkle.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sprinkle2-sprinkle2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sprinkle3-sprinkle3.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+addstream-addstream.o: addstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(addstream_CFLAGS) $(CFLAGS) -MT addstream-addstream.o -MD -MP -MF $(DEPDIR)/addstream-addstream.Tpo -c -o addstream-addstream.o `test -f 'addstream.c' || echo '$(srcdir)/'`addstream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/addstream-addstream.Tpo $(DEPDIR)/addstream-addstream.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='addstream.c' object='addstream-addstream.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(addstream_CFLAGS) $(CFLAGS) -c -o addstream-addstream.o `test -f 'addstream.c' || echo '$(srcdir)/'`addstream.c
+
+addstream-addstream.obj: addstream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(addstream_CFLAGS) $(CFLAGS) -MT addstream-addstream.obj -MD -MP -MF $(DEPDIR)/addstream-addstream.Tpo -c -o addstream-addstream.obj `if test -f 'addstream.c'; then $(CYGPATH_W) 'addstream.c'; else $(CYGPATH_W) '$(srcdir)/addstream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/addstream-addstream.Tpo $(DEPDIR)/addstream-addstream.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='addstream.c' object='addstream-addstream.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(addstream_CFLAGS) $(CFLAGS) -c -o addstream-addstream.obj `if test -f 'addstream.c'; then $(CYGPATH_W) 'addstream.c'; else $(CYGPATH_W) '$(srcdir)/addstream.c'; fi`
+
+codec_select-codec-select.o: codec-select.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(codec_select_CFLAGS) $(CFLAGS) -MT codec_select-codec-select.o -MD -MP -MF $(DEPDIR)/codec_select-codec-select.Tpo -c -o codec_select-codec-select.o `test -f 'codec-select.c' || echo '$(srcdir)/'`codec-select.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/codec_select-codec-select.Tpo $(DEPDIR)/codec_select-codec-select.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='codec-select.c' object='codec_select-codec-select.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(codec_select_CFLAGS) $(CFLAGS) -c -o codec_select-codec-select.o `test -f 'codec-select.c' || echo '$(srcdir)/'`codec-select.c
+
+codec_select-codec-select.obj: codec-select.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(codec_select_CFLAGS) $(CFLAGS) -MT codec_select-codec-select.obj -MD -MP -MF $(DEPDIR)/codec_select-codec-select.Tpo -c -o codec_select-codec-select.obj `if test -f 'codec-select.c'; then $(CYGPATH_W) 'codec-select.c'; else $(CYGPATH_W) '$(srcdir)/codec-select.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/codec_select-codec-select.Tpo $(DEPDIR)/codec_select-codec-select.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='codec-select.c' object='codec_select-codec-select.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(codec_select_CFLAGS) $(CFLAGS) -c -o codec_select-codec-select.obj `if test -f 'codec-select.c'; then $(CYGPATH_W) 'codec-select.c'; else $(CYGPATH_W) '$(srcdir)/codec-select.c'; fi`
+
+sprinkle-sprinkle.o: sprinkle.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle_CFLAGS) $(CFLAGS) -MT sprinkle-sprinkle.o -MD -MP -MF $(DEPDIR)/sprinkle-sprinkle.Tpo -c -o sprinkle-sprinkle.o `test -f 'sprinkle.c' || echo '$(srcdir)/'`sprinkle.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle-sprinkle.Tpo $(DEPDIR)/sprinkle-sprinkle.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle.c' object='sprinkle-sprinkle.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle_CFLAGS) $(CFLAGS) -c -o sprinkle-sprinkle.o `test -f 'sprinkle.c' || echo '$(srcdir)/'`sprinkle.c
+
+sprinkle-sprinkle.obj: sprinkle.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle_CFLAGS) $(CFLAGS) -MT sprinkle-sprinkle.obj -MD -MP -MF $(DEPDIR)/sprinkle-sprinkle.Tpo -c -o sprinkle-sprinkle.obj `if test -f 'sprinkle.c'; then $(CYGPATH_W) 'sprinkle.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle-sprinkle.Tpo $(DEPDIR)/sprinkle-sprinkle.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle.c' object='sprinkle-sprinkle.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle_CFLAGS) $(CFLAGS) -c -o sprinkle-sprinkle.obj `if test -f 'sprinkle.c'; then $(CYGPATH_W) 'sprinkle.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle.c'; fi`
+
+sprinkle2-sprinkle2.o: sprinkle2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle2_CFLAGS) $(CFLAGS) -MT sprinkle2-sprinkle2.o -MD -MP -MF $(DEPDIR)/sprinkle2-sprinkle2.Tpo -c -o sprinkle2-sprinkle2.o `test -f 'sprinkle2.c' || echo '$(srcdir)/'`sprinkle2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle2-sprinkle2.Tpo $(DEPDIR)/sprinkle2-sprinkle2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle2.c' object='sprinkle2-sprinkle2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle2_CFLAGS) $(CFLAGS) -c -o sprinkle2-sprinkle2.o `test -f 'sprinkle2.c' || echo '$(srcdir)/'`sprinkle2.c
+
+sprinkle2-sprinkle2.obj: sprinkle2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle2_CFLAGS) $(CFLAGS) -MT sprinkle2-sprinkle2.obj -MD -MP -MF $(DEPDIR)/sprinkle2-sprinkle2.Tpo -c -o sprinkle2-sprinkle2.obj `if test -f 'sprinkle2.c'; then $(CYGPATH_W) 'sprinkle2.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle2-sprinkle2.Tpo $(DEPDIR)/sprinkle2-sprinkle2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle2.c' object='sprinkle2-sprinkle2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle2_CFLAGS) $(CFLAGS) -c -o sprinkle2-sprinkle2.obj `if test -f 'sprinkle2.c'; then $(CYGPATH_W) 'sprinkle2.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle2.c'; fi`
+
+sprinkle3-sprinkle3.o: sprinkle3.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle3_CFLAGS) $(CFLAGS) -MT sprinkle3-sprinkle3.o -MD -MP -MF $(DEPDIR)/sprinkle3-sprinkle3.Tpo -c -o sprinkle3-sprinkle3.o `test -f 'sprinkle3.c' || echo '$(srcdir)/'`sprinkle3.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle3-sprinkle3.Tpo $(DEPDIR)/sprinkle3-sprinkle3.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle3.c' object='sprinkle3-sprinkle3.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle3_CFLAGS) $(CFLAGS) -c -o sprinkle3-sprinkle3.o `test -f 'sprinkle3.c' || echo '$(srcdir)/'`sprinkle3.c
+
+sprinkle3-sprinkle3.obj: sprinkle3.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle3_CFLAGS) $(CFLAGS) -MT sprinkle3-sprinkle3.obj -MD -MP -MF $(DEPDIR)/sprinkle3-sprinkle3.Tpo -c -o sprinkle3-sprinkle3.obj `if test -f 'sprinkle3.c'; then $(CYGPATH_W) 'sprinkle3.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle3.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/sprinkle3-sprinkle3.Tpo $(DEPDIR)/sprinkle3-sprinkle3.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sprinkle3.c' object='sprinkle3-sprinkle3.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sprinkle3_CFLAGS) $(CFLAGS) -c -o sprinkle3-sprinkle3.obj `if test -f 'sprinkle3.c'; then $(CYGPATH_W) 'sprinkle3.c'; else $(CYGPATH_W) '$(srcdir)/sprinkle3.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/dynamic/addstream.c b/tests/examples/dynamic/addstream.c
new file mode 100644
index 0000000..5d23630
--- /dev/null
+++ b/tests/examples/dynamic/addstream.c
@@ -0,0 +1,253 @@
+/* GStreamer
+ *
+ * addstream.c: sample application to dynamically add streams to a running
+ * pipeline
+ *
+ * Copyright (C) <2007> Wim Taymans <wim dot taymans at gmail dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+static GstElement *pipeline;
+static GstClock *theclock;
+static GMainLoop *loop;
+static GstElement *bin1, *bin2, *bin3, *bin4, *bin5;
+
+/* start a bin with the given description */
+static GstElement *
+create_stream (const gchar * descr)
+{
+  GstElement *bin;
+  GError *error = NULL;
+
+  bin = gst_parse_launch (descr, &error);
+  if (error) {
+    g_print ("pipeline could not be constructed: %s\n", error->message);
+    g_error_free (error);
+    return NULL;
+  }
+
+  /* add the bin to the pipeline now, this will set the current base_time of the
+   * pipeline on the new bin. */
+  gst_bin_add (GST_BIN_CAST (pipeline), bin);
+
+  return bin;
+}
+
+static gboolean
+pause_play_stream (GstElement * bin, gint seconds)
+{
+  gboolean punch_in;
+  GstStateChangeReturn ret;
+  GstClockTime now, base_time, running_time;
+
+  /* get current running time, we need this value to continue playback of
+   * non-live pipelines. */
+  now = gst_clock_get_time (theclock);
+  base_time = gst_element_get_base_time (bin);
+
+  running_time = now - base_time;
+
+  /* set the new bin to PAUSED, the parent bin will notice (because of the ASYNC
+   * message and will perform latency calculations again when going to PLAYING
+   * later. */
+  ret = gst_element_set_state (bin, GST_STATE_PAUSED);
+
+  switch (ret) {
+    case GST_STATE_CHANGE_NO_PREROLL:
+      /* live source, timestamps are running_time of the pipeline clock. */
+      punch_in = FALSE;
+      break;
+    case GST_STATE_CHANGE_SUCCESS:
+      /* success, no async state changes, same as async, timestamps start
+       * from 0 */
+    case GST_STATE_CHANGE_ASYNC:
+      /* no live source, bin will preroll. We have to punch it in because in
+       * this situation timestamps start from 0.  */
+      punch_in = TRUE;
+      break;
+    default:
+    case GST_STATE_CHANGE_FAILURE:
+      return FALSE;
+  }
+
+  if (seconds)
+    g_usleep (seconds * G_USEC_PER_SEC);
+
+  if (punch_in) {
+    /* new bin has to be aligned with previous running_time. We do this by taking
+     * the current absolute clock time and calculating the base time that would
+     * give the previous running_time. We set this base_time on the bin before
+     * setting it to PLAYING. */
+    now = gst_clock_get_time (theclock);
+    base_time = now - running_time;
+
+    gst_element_set_base_time (bin, base_time);
+  }
+
+  /* now set the pipeline to PLAYING */
+  gst_element_set_state (bin, GST_STATE_PLAYING);
+
+  return TRUE;
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static void
+eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * pipeline)
+{
+  message_received (bus, message, pipeline);
+  g_main_loop_quit (loop);
+}
+
+static gboolean
+perform_step (gpointer pstep)
+{
+  gint step = GPOINTER_TO_INT (pstep);
+
+  switch (step) {
+    case 0:
+      /* live stream locks on to running_time, pipeline configures latency. */
+      g_print ("creating bin1\n");
+      bin1 =
+          create_stream
+          ("( v4l2src ! videoconvert ! timeoverlay ! queue ! xvimagesink name=v4llive )");
+      pause_play_stream (bin1, 0);
+      g_timeout_add (1000, (GSourceFunc) perform_step, GINT_TO_POINTER (1));
+      break;
+    case 1:
+      /* live stream locks on to running_time, pipeline reconfigures latency
+       * together with the previously added bin so that they run synchronized. */
+      g_print ("creating bin2\n");
+      bin2 = create_stream ("( alsasrc ! queue ! alsasink name=alsalive )");
+      pause_play_stream (bin2, 0);
+      g_timeout_add (1000, (GSourceFunc) perform_step, GINT_TO_POINTER (2));
+      break;
+    case 2:
+      /* non-live stream, need base_time to align with current running live sources. */
+      g_print ("creating bin3\n");
+      bin3 = create_stream ("( audiotestsrc ! alsasink name=atnonlive )");
+      pause_play_stream (bin3, 0);
+      g_timeout_add (1000, (GSourceFunc) perform_step, GINT_TO_POINTER (3));
+      break;
+    case 3:
+      g_print ("creating bin4\n");
+      bin4 =
+          create_stream
+          ("( videotestsrc ! timeoverlay ! videoconvert ! ximagesink name=vtnonlive )");
+      pause_play_stream (bin4, 0);
+      g_timeout_add (1000, (GSourceFunc) perform_step, GINT_TO_POINTER (4));
+      break;
+    case 4:
+      /* live stream locks on to running_time */
+      g_print ("creating bin5\n");
+      bin5 =
+          create_stream
+          ("( videotestsrc is-live=1 ! timeoverlay ! videoconvert ! ximagesink name=vtlive )");
+      pause_play_stream (bin5, 0);
+      g_timeout_add (1000, (GSourceFunc) perform_step, GINT_TO_POINTER (5));
+      break;
+    case 5:
+      /* pause the fist live stream for 2 seconds */
+      g_print ("PAUSE bin1 for 2 seconds\n");
+      pause_play_stream (bin1, 2);
+      /* pause the non-live stream for 2 seconds */
+      g_print ("PAUSE bin4 for 2 seconds\n");
+      pause_play_stream (bin4, 2);
+      /* pause the pseudo live stream for 2 seconds */
+      g_print ("PAUSE bin5 for 2 seconds\n");
+      pause_play_stream (bin5, 2);
+      g_print ("Waiting 5 seconds\n");
+      g_timeout_add (5000, (GSourceFunc) perform_step, GINT_TO_POINTER (6));
+      break;
+    case 6:
+      g_print ("quiting\n");
+      g_main_loop_quit (loop);
+      break;
+    default:
+      break;
+  }
+  return FALSE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  /* setup message handling */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_received,
+      pipeline);
+
+  /* we set the pipeline to PLAYING, this will distribute a default clock and
+   * start running. no preroll is needed */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* get the clock now. Since we never set the pipeline to PAUSED again, the
+   * clock will not change, even when we add new clock providers later.  */
+  theclock = gst_element_get_clock (pipeline);
+
+  /* start our actions while we are in the mainloop so that we can catch errors
+   * and other messages. */
+  g_idle_add ((GSourceFunc) perform_step, GINT_TO_POINTER (0));
+  /* go to main loop */
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+  gst_object_unref (theclock);
+
+  return 0;
+}
diff --git a/tests/examples/dynamic/codec-select.c b/tests/examples/dynamic/codec-select.c
new file mode 100644
index 0000000..2d8f9fa
--- /dev/null
+++ b/tests/examples/dynamic/codec-select.c
@@ -0,0 +1,298 @@
+/* GStreamer
+ *
+ * codec-select.c: sample application to dynamically select a codec
+ *
+ * Copyright (C) <2008> Wim Taymans <wim dot taymans at gmail dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * This example sets up a pipeline to 'encode' an audiotestsrc into 3 different
+ * formats. The format can be selected dynamically at runtime.
+ *
+ * Each of the encoders require the audio in a specific different format.
+ *
+ * This example uses identity as the encoder and enforces the caps on identity
+ * with a capsfilter.
+ *
+ * This is a good example of input and output selector and how these elements
+ * preserve segment and timing information while switching between streams.
+ */
+
+#include <string.h>
+#include <gst/gst.h>
+
+/* Create an encoder element.
+ * We make a bin containing:
+ *
+ * audioresample ! <enccaps> ! identity
+ *
+ * The sinkpad of audioresample and source pad of identity are ghosted on the
+ * bin.
+ */
+static GstElement *
+make_encoder (const GstCaps * caps)
+{
+  GstElement *result;
+  GstElement *audioresample;
+  GstElement *capsfilter;
+  GstElement *identity;
+  GstPad *pad;
+
+  /* create result bin */
+  result = gst_bin_new (NULL);
+  g_assert (result);
+
+  /* create elements */
+  audioresample = gst_element_factory_make ("audioresample", NULL);
+  g_assert (audioresample);
+
+  capsfilter = gst_element_factory_make ("capsfilter", NULL);
+  g_assert (capsfilter);
+  g_object_set (capsfilter, "caps", caps, NULL);
+
+  identity = gst_element_factory_make ("identity", NULL);
+  g_assert (identity);
+  g_object_set (identity, "silent", TRUE, NULL);
+
+  /* add elements to result bin */
+  gst_bin_add (GST_BIN (result), audioresample);
+  gst_bin_add (GST_BIN (result), capsfilter);
+  gst_bin_add (GST_BIN (result), identity);
+
+  /* link elements */
+  gst_element_link_pads (audioresample, "src", capsfilter, "sink");
+  gst_element_link_pads (capsfilter, "src", identity, "sink");
+
+  /* ghost src and sink pads */
+  pad = gst_element_get_static_pad (audioresample, "sink");
+  gst_element_add_pad (result, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  pad = gst_element_get_static_pad (identity, "src");
+  gst_element_add_pad (result, gst_ghost_pad_new ("src", pad));
+  gst_object_unref (pad);
+
+  return result;
+}
+
+/*
+ * We generate:
+ *
+ * audiotestsrc ! <audiocaps> ! output-selector ! [enc1 .. enc3] ! input-selector
+ * select-all = true ! fakesink
+ *
+ * <audiocaps> makes sure we only produce one format from the audiotestsrc.
+ *
+ * Each encX element consists of:
+ *
+ *  audioresample ! <enccaps> ! identity !
+ *
+ * This way we can simply switch encoders without having to renegotiate.
+ */
+static GstElement *
+make_pipeline (void)
+{
+  GstElement *result;
+  GstElement *audiotestsrc;
+  GstElement *audiocaps;
+  GstElement *outputselect;
+  GstElement *inputselect;
+  GstElement *sink;
+  GstCaps *caps;
+  GstCaps *capslist[3];
+  gint i;
+
+  /* create result pipeline */
+  result = gst_pipeline_new (NULL);
+  g_assert (result);
+
+  /* create various elements */
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 1000, NULL);
+  g_assert (audiotestsrc);
+
+  audiocaps = gst_element_factory_make ("capsfilter", NULL);
+  g_assert (audiocaps);
+
+  caps =
+      gst_caps_from_string
+      ("audio/x-raw-int,signed=true,width=16,depth=16,rate=48000,channels=1");
+  g_object_set (audiocaps, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  outputselect = gst_element_factory_make ("output-selector", "select");
+  g_assert (outputselect);
+
+  inputselect = gst_element_factory_make ("input-selector", NULL);
+  g_assert (inputselect);
+  g_object_set (inputselect, "select-all", TRUE, NULL);
+
+  sink = gst_element_factory_make ("fakesink", NULL);
+  g_object_set (sink, "sync", TRUE, NULL);
+  g_object_set (sink, "silent", TRUE, NULL);
+  g_assert (sink);
+
+  /* add elements */
+  gst_bin_add (GST_BIN (result), audiotestsrc);
+  gst_bin_add (GST_BIN (result), audiocaps);
+  gst_bin_add (GST_BIN (result), outputselect);
+  gst_bin_add (GST_BIN (result), inputselect);
+  gst_bin_add (GST_BIN (result), sink);
+
+  /* link elements */
+  gst_element_link_pads (audiotestsrc, "src", audiocaps, "sink");
+  gst_element_link_pads (audiocaps, "src", outputselect, "sink");
+  gst_element_link_pads (inputselect, "src", sink, "sink");
+
+  /* make caps */
+  capslist[0] =
+      gst_caps_from_string
+      ("audio/x-raw-int,signed=true,width=16,depth=16,rate=48000,channels=1");
+  capslist[1] =
+      gst_caps_from_string
+      ("audio/x-raw-int,signed=true,width=16,depth=16,rate=16000,channels=1");
+  capslist[2] =
+      gst_caps_from_string
+      ("audio/x-raw-int,signed=true,width=16,depth=16,rate=8000,channels=1");
+
+  /* create encoder elements */
+  for (i = 0; i < 3; i++) {
+    GstElement *encoder;
+    GstPad *srcpad, *sinkpad;
+
+    encoder = make_encoder (capslist[i]);
+    g_assert (encoder);
+
+    gst_bin_add (GST_BIN (result), encoder);
+
+    srcpad = gst_element_get_request_pad (outputselect, "src%d");
+    sinkpad = gst_element_get_static_pad (encoder, "sink");
+    gst_pad_link (srcpad, sinkpad);
+    gst_object_unref (srcpad);
+    gst_object_unref (sinkpad);
+
+    srcpad = gst_element_get_static_pad (encoder, "src");
+    sinkpad = gst_element_get_request_pad (inputselect, "sink%d");
+    gst_pad_link (srcpad, sinkpad);
+    gst_object_unref (srcpad);
+    gst_object_unref (sinkpad);
+  }
+
+  return result;
+}
+
+static gboolean
+do_switch (GstElement * pipeline)
+{
+  gint rand;
+  GstElement *select;
+  gchar *name;
+  GstPad *pad;
+
+  rand = g_random_int_range (0, 3);
+
+  g_print ("switching to %d\n", rand);
+
+  /* find the selector */
+  select = gst_bin_get_by_name (GST_BIN (pipeline), "select");
+
+  /* get the named pad */
+  name = g_strdup_printf ("src%d", rand);
+  pad = gst_element_get_static_pad (select, name);
+  g_free (name);
+
+  /* set the active pad */
+  g_object_set (select, "active-pad", pad, NULL);
+
+  return TRUE;
+}
+
+static gboolean
+my_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
+{
+  GstElement *sender = (GstElement *) GST_MESSAGE_SRC (message);
+  const gchar *name = gst_element_get_name (sender);
+  GMainLoop *loop = (GMainLoop *) data;
+
+  g_print ("Got %s message from %s\n", GST_MESSAGE_TYPE_NAME (message), name);
+
+  switch (GST_MESSAGE_TYPE (message)) {
+
+    case GST_MESSAGE_ERROR:{
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_print ("Error: %s (%s)\n", err->message, debug);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  return TRUE;
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *pipeline;
+  GstBus *bus;
+  GMainLoop *loop;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* set up */
+  pipeline = make_pipeline ();
+
+  g_signal_connect (pipeline, "deep_notify",
+      G_CALLBACK (gst_object_default_deep_notify), NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  g_print ("Starting pipeline\n");
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* add a timeout to cycle between the formats */
+  g_timeout_add (1000, (GSourceFunc) do_switch, pipeline);
+
+  /* now run */
+  g_main_loop_run (loop);
+
+  g_print ("Nulling pipeline\n");
+
+  /* also clean up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/dynamic/sprinkle.c b/tests/examples/dynamic/sprinkle.c
new file mode 100644
index 0000000..1b75840
--- /dev/null
+++ b/tests/examples/dynamic/sprinkle.c
@@ -0,0 +1,264 @@
+/* GStreamer
+ *
+ * sprinkle.c: sample application to dynamically mix tones with adder
+ *
+ * Copyright (C) <2009> Wim Taymans <wim dot taymans at gmail dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Produces a sweeping sprinkle of tones by dynamically adding and removing
+ * elements to adder.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+static GstElement *pipeline, *adder;
+static GMainLoop *loop;
+
+typedef struct
+{
+  GstElement *element;
+  GstPad *srcpad;
+  GstPad *sinkpad;
+  gdouble freq;
+} SourceInfo;
+
+/* dynamically add the source to the pipeline and link it to a new pad on
+ * adder */
+static SourceInfo *
+add_source (gdouble freq)
+{
+  SourceInfo *info;
+
+  info = g_new0 (SourceInfo, 1);
+  info->freq = freq;
+
+  /* make source with unique name */
+  info->element = gst_element_factory_make ("audiotestsrc", NULL);
+
+  g_object_set (info->element, "freq", freq, NULL);
+
+  /* add to the bin */
+  gst_bin_add (GST_BIN (pipeline), info->element);
+
+  /* get pad from the element */
+  info->srcpad = gst_element_get_static_pad (info->element, "src");
+
+  /* get new pad from adder, adder will now wait for data on this pad */
+  info->sinkpad = gst_element_get_request_pad (adder, "sink%d");
+
+  /* link pad to adder */
+  gst_pad_link (info->srcpad, info->sinkpad);
+
+  /* and play the element */
+  gst_element_set_state (info->element, GST_STATE_PLAYING);
+
+  g_print ("added freq %f\n", info->freq);
+
+  return info;
+}
+
+/* remove the source from the pipeline after removing it from adder */
+static void
+remove_source (SourceInfo * info)
+{
+  g_print ("remove freq %f\n", info->freq);
+
+  /* lock the state so that we can put it to NULL without the parent messing
+   * with our state */
+  gst_element_set_locked_state (info->element, TRUE);
+
+  /* first stop the source. Remember that this might block when in the PAUSED
+   * state. Alternatively one could send EOS to the source, install an event
+   * probe and schedule a state change/unlink/release from the mainthread.
+   * Note that changing the state of a source makes it emit an EOS, which can
+   * make adder go EOS. */
+  gst_element_set_state (info->element, GST_STATE_NULL);
+
+  /* unlink from adder */
+  gst_pad_unlink (info->srcpad, info->sinkpad);
+  gst_object_unref (info->srcpad);
+
+  /* remove from the bin */
+  gst_bin_remove (GST_BIN (pipeline), info->element);
+
+  /* give back the pad */
+  gst_element_release_request_pad (adder, info->sinkpad);
+  gst_object_unref (info->sinkpad);
+
+  g_free (info);
+}
+
+/* we'll keep the state of the sources in this structure. We keep 3 sources
+ * alive */
+typedef struct
+{
+  guint count;
+  SourceInfo *infos[3];
+} SprinkleState;
+
+static SprinkleState *
+create_state (void)
+{
+  SprinkleState *state;
+
+  state = g_new0 (SprinkleState, 1);
+
+  return state;
+}
+
+static void
+free_state (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  for (i = 0; i < 3; i++) {
+    info = state->infos[i];
+    if (info)
+      remove_source (info);
+  }
+
+  g_free (state);
+}
+
+static gboolean
+do_sprinkle (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  /* first remove the oldest info */
+  info = state->infos[2];
+
+  if (info)
+    remove_source (info);
+
+  /* move sources */
+  for (i = 2; i > 0; i--) {
+    state->infos[i] = state->infos[i - 1];
+  }
+
+  /* add new source, stop adding sources after 10 rounds. */
+  if (state->count < 10) {
+    state->infos[0] = add_source ((state->count * 100) + 200);
+    state->count++;
+  } else {
+    state->infos[0] = NULL;
+  }
+  return TRUE;
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static void
+eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * pipeline)
+{
+  message_received (bus, message, pipeline);
+  g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+  GstElement *filter, *convert, *sink;
+  GstCaps *caps;
+  gboolean res;
+  SprinkleState *state;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  /* add the fixed part to the pipeline. Remember that we need a capsfilter
+   * after adder so that multiple sources are not racing to negotiate
+   * a format */
+  adder = gst_element_factory_make ("adder", "adder");
+  filter = gst_element_factory_make ("capsfilter", "filter");
+  convert = gst_element_factory_make ("audioconvert", "convert");
+  sink = gst_element_factory_make ("autoaudiosink", "sink");
+
+  caps = gst_caps_new_simple ("audio/x-raw-int",
+      "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
+      "channels", G_TYPE_INT, 1,
+      "width", G_TYPE_INT, 16,
+      "depth", G_TYPE_INT, 16,
+      "rate", G_TYPE_INT, 44100, "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+  g_object_set (filter, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  gst_bin_add_many (GST_BIN (pipeline), adder, filter, convert, sink, NULL);
+
+  res = gst_element_link_many (adder, filter, convert, sink, NULL);
+  g_assert (res);
+
+  /* setup message handling */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_received,
+      pipeline);
+
+  /* we set the pipeline to PLAYING, the pipeline will not yet preroll because
+   * there is no source providing data for it yet */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* and add the function that modifies the pipeline every 100ms */
+  state = create_state ();
+  g_timeout_add (100, (GSourceFunc) do_sprinkle, state);
+
+  /* go to main loop */
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  free_state (state);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/dynamic/sprinkle2.c b/tests/examples/dynamic/sprinkle2.c
new file mode 100644
index 0000000..abab47c
--- /dev/null
+++ b/tests/examples/dynamic/sprinkle2.c
@@ -0,0 +1,288 @@
+/* GStreamer
+ *
+ * sprinkle.c: sample application to dynamically mix tones with adder
+ *
+ * Copyright (C) <2009> Wim Taymans <wim dot taymans at gmail dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Produces a sweeping sprinkle of tones by dynamically adding and removing
+ * elements to adder.
+ *
+ * gcc `pkg-config --cflags --libs gstreamer-0.10` sprinkle2.c -osprinkle2
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+static GstElement *pipeline, *adder;
+static GMainLoop *loop;
+
+typedef struct
+{
+  GstElement *src, *fx;
+  GstPad *src_srcpad;
+  GstPad *fx_sinkpad, *fx_srcpad;
+  GstPad *adder_sinkpad;
+  gdouble freq;
+  gfloat pos;
+} SourceInfo;
+
+/* dynamically add the source to the pipeline and link it to a new pad on
+ * adder */
+static SourceInfo *
+add_source (gdouble freq, gfloat pos)
+{
+  SourceInfo *info;
+
+  info = g_new0 (SourceInfo, 1);
+  info->freq = freq;
+  info->pos = pos;
+
+  /* make source with unique name */
+  info->src = gst_element_factory_make ("audiotestsrc", NULL);
+  info->fx = gst_element_factory_make ("audiopanorama", NULL);
+
+  g_object_set (info->src, "freq", freq, "volume", (gdouble) 0.35, NULL);
+  g_object_set (info->fx, "panorama", pos, NULL);
+
+  /* add to the bin */
+  gst_bin_add (GST_BIN (pipeline), info->src);
+  gst_bin_add (GST_BIN (pipeline), info->fx);
+
+  /* get pads from the elements */
+  info->src_srcpad = gst_element_get_static_pad (info->src, "src");
+  info->fx_srcpad = gst_element_get_static_pad (info->fx, "src");
+  info->fx_sinkpad = gst_element_get_static_pad (info->fx, "sink");
+
+  /* get new pad from adder, adder will now wait for data on this pad */
+  info->adder_sinkpad = gst_element_get_request_pad (adder, "sink%d");
+
+  /* link src to fx and fx to adder */
+  gst_pad_link (info->fx_srcpad, info->adder_sinkpad);
+  gst_pad_link (info->src_srcpad, info->fx_sinkpad);
+
+  /* and play the elements, change the state from sink to source */
+  gst_element_set_state (info->fx, GST_STATE_PLAYING);
+  gst_element_set_state (info->src, GST_STATE_PLAYING);
+
+  g_print ("added  freq %5.0f, pos %3.1f\n", info->freq, info->pos);
+
+  return info;
+}
+
+/* remove the source from the pipeline after removing it from adder */
+static void
+remove_source (SourceInfo * info)
+{
+  g_print ("remove freq %5.0f, pos %3.1f\n", info->freq, info->pos);
+
+  /* lock the state so that we can put it to NULL without the parent messing
+   * with our state */
+  gst_element_set_locked_state (info->src, TRUE);
+  gst_element_set_locked_state (info->fx, TRUE);
+
+  /* first stop the source. Remember that this might block when in the PAUSED
+   * state. Alternatively one could send EOS to the source, install an event
+   * probe and schedule a state change/unlink/release from the mainthread. */
+  gst_element_set_state (info->fx, GST_STATE_NULL);
+  /* NOTE that the source emits EOS when shutting down but the EOS will not
+   * reach the adder sinkpad because the effect is in the NULL state. We will
+   * send an EOS to adder later. */
+  gst_element_set_state (info->src, GST_STATE_NULL);
+
+  /* unlink from adder */
+  gst_pad_unlink (info->src_srcpad, info->fx_sinkpad);
+  gst_pad_unlink (info->fx_srcpad, info->adder_sinkpad);
+  gst_object_unref (info->src_srcpad);
+  gst_object_unref (info->fx_srcpad);
+  gst_object_unref (info->fx_sinkpad);
+
+  /* remove from the bin */
+  gst_bin_remove (GST_BIN (pipeline), info->src);
+  gst_bin_remove (GST_BIN (pipeline), info->fx);
+
+  /* send EOS to the sinkpad to make adder EOS when needed */
+  gst_pad_send_event (info->adder_sinkpad, gst_event_new_eos ());
+
+  /* give back the pad */
+  gst_element_release_request_pad (adder, info->adder_sinkpad);
+  gst_object_unref (info->adder_sinkpad);
+
+  g_free (info);
+}
+
+/* we'll keep the state of the sources in this structure. We keep 3 sources
+ * alive */
+typedef struct
+{
+  guint count;
+  SourceInfo *infos[3];
+} SprinkleState;
+
+static SprinkleState *
+create_state (void)
+{
+  SprinkleState *state;
+
+  state = g_new0 (SprinkleState, 1);
+
+  return state;
+}
+
+static void
+free_state (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  for (i = 0; i < 3; i++) {
+    info = state->infos[i];
+    if (info)
+      remove_source (info);
+  }
+
+  g_free (state);
+}
+
+static gboolean
+do_sprinkle (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  /* first remove the oldest info */
+  info = state->infos[2];
+
+  if (info)
+    remove_source (info);
+
+  /* move sources */
+  for (i = 2; i > 0; i--) {
+    state->infos[i] = state->infos[i - 1];
+  }
+
+  /* add new source, stop adding sources after 10 rounds. */
+  if (state->count < 20) {
+    state->infos[0] = add_source (
+        (gdouble) ((state->count * 100) + 200),
+        ((gfloat) (state->count % 5) / 2.0 - 1.0));
+    state->count++;
+  } else {
+    state->infos[0] = NULL;
+  }
+  return TRUE;
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static void
+eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * pipeline)
+{
+  message_received (bus, message, pipeline);
+  g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+  GstElement *filter, *convert, *sink;
+  GstCaps *caps;
+  gboolean res;
+  SprinkleState *state;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  /* add the fixed part to the pipeline. Remember that we need a capsfilter
+   * after adder so that multiple sources are not racing to negotiate
+   * a format */
+  adder = gst_element_factory_make ("adder", "adder");
+  filter = gst_element_factory_make ("capsfilter", "filter");
+  convert = gst_element_factory_make ("audioconvert", "convert");
+  sink = gst_element_factory_make ("autoaudiosink", "sink");
+
+  caps = gst_caps_new_simple ("audio/x-raw-int",
+      "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
+      "channels", G_TYPE_INT, 2,
+      "width", G_TYPE_INT, 16,
+      "depth", G_TYPE_INT, 16,
+      "rate", G_TYPE_INT, 44100, "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+  g_object_set (filter, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  gst_bin_add_many (GST_BIN (pipeline), adder, filter, convert, sink, NULL);
+
+  res = gst_element_link_many (adder, filter, convert, sink, NULL);
+  g_assert (res);
+
+  /* setup message handling */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_received,
+      pipeline);
+
+  /* we set the pipeline to PLAYING, the pipeline will not yet preroll because
+   * there is no source providing data for it yet */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* and add the function that modifies the pipeline every 100ms */
+  state = create_state ();
+  g_timeout_add (100, (GSourceFunc) do_sprinkle, state);
+
+  /* go to main loop */
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  free_state (state);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/dynamic/sprinkle3.c b/tests/examples/dynamic/sprinkle3.c
new file mode 100644
index 0000000..5983c33
--- /dev/null
+++ b/tests/examples/dynamic/sprinkle3.c
@@ -0,0 +1,301 @@
+/* GStreamer
+ *
+ * sprinkle.c: sample application to dynamically mix tones with adder
+ *
+ * Copyright (C) <2009> Wim Taymans <wim dot taymans at gmail dot com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Produces a sweeping sprinkle of tones by dynamically adding and removing
+ * elements to adder.
+ *
+ * gcc `pkg-config --cflags --libs gstreamer-0.10` sprinkle3.c -osprinkle3
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+static GstElement *pipeline, *adder;
+static GMainLoop *loop;
+
+typedef struct
+{
+  GstElement *bin, *src, *fx;
+  GstPad *src_srcpad;
+  GstPad *fx_sinkpad, *fx_srcpad;
+  GstPad *adder_sinkpad;
+  GstPad *bin_srcpad;
+  gdouble freq;
+  gfloat pos;
+} SourceInfo;
+
+/* dynamically add the source to the pipeline and link it to a new pad on
+ * adder */
+static SourceInfo *
+add_source (gdouble freq, gfloat pos)
+{
+  SourceInfo *info;
+
+  info = g_new0 (SourceInfo, 1);
+  info->freq = freq;
+  info->pos = pos;
+
+  /* make source with unique name */
+  info->bin = gst_element_factory_make ("bin", NULL);
+  info->src = gst_element_factory_make ("audiotestsrc", NULL);
+  info->fx = gst_element_factory_make ("audiopanorama", NULL);
+
+  g_object_set (info->src, "freq", freq, "volume", (gdouble) 0.35, NULL);
+  g_object_set (info->fx, "panorama", pos, NULL);
+
+  /* add to the bin */
+  gst_bin_add (GST_BIN (info->bin), info->src);
+  gst_bin_add (GST_BIN (info->bin), info->fx);
+
+  /* get pads from the elements */
+  info->src_srcpad = gst_element_get_static_pad (info->src, "src");
+  info->fx_srcpad = gst_element_get_static_pad (info->fx, "src");
+  info->fx_sinkpad = gst_element_get_static_pad (info->fx, "sink");
+
+  /* create and add a pad for the bin */
+  info->bin_srcpad = gst_ghost_pad_new ("src", info->fx_srcpad);
+  gst_element_add_pad (info->bin, info->bin_srcpad);
+
+  /* get new pad from adder, adder will now wait for data on this pad */
+  info->adder_sinkpad = gst_element_get_request_pad (adder, "sink%d");
+
+  /* link inside the bin */
+  gst_pad_link (info->src_srcpad, info->fx_sinkpad);
+
+  /* add bin to pipeline */
+  gst_bin_add (GST_BIN (pipeline), info->bin);
+
+  /* link bin to adder */
+  gst_pad_link (info->bin_srcpad, info->adder_sinkpad);
+
+  /* and play the elements */
+  gst_element_set_state (info->bin, GST_STATE_PLAYING);
+
+  g_print ("added  freq %5.0f, pos %3.1f\n", info->freq, info->pos);
+
+  return info;
+}
+
+/* remove the source from the pipeline after removing it from adder */
+static void
+remove_source (SourceInfo * info)
+{
+  g_print ("remove freq %5.0f, pos %3.1f\n", info->freq, info->pos);
+
+  /* lock the state so that we can put it to NULL without the parent messing
+   * with our state */
+  gst_element_set_locked_state (info->bin, TRUE);
+
+  /* first stop the source. Remember that this might block when in the PAUSED
+   * state. Alternatively one could send EOS to the source, install an event
+   * probe and schedule a state change/unlink/release from the mainthread. */
+  /* NOTE that the source inside the bin will emit EOS but it will not reach
+   * adder because the element after the source is shut down first. We will send
+   * EOS later */
+  gst_element_set_state (info->bin, GST_STATE_NULL);
+
+  /* unlink bin from adder */
+  gst_pad_unlink (info->bin_srcpad, info->adder_sinkpad);
+
+  /* release pads */
+  gst_object_unref (info->src_srcpad);
+  gst_object_unref (info->fx_srcpad);
+  gst_object_unref (info->fx_sinkpad);
+
+  /* remove from the bin */
+  gst_bin_remove (GST_BIN (pipeline), info->bin);
+
+  /* send EOS to the sinkpad to make adder EOS when needed */
+  gst_pad_send_event (info->adder_sinkpad, gst_event_new_eos ());
+
+  /* give back the pad */
+  gst_element_release_request_pad (adder, info->adder_sinkpad);
+  gst_object_unref (info->adder_sinkpad);
+
+  g_free (info);
+}
+
+/* we'll keep the state of the sources in this structure. We keep 3 sources
+ * alive */
+typedef struct
+{
+  guint count;
+  SourceInfo *infos[3];
+} SprinkleState;
+
+static SprinkleState *
+create_state (void)
+{
+  SprinkleState *state;
+
+  state = g_new0 (SprinkleState, 1);
+
+  return state;
+}
+
+static void
+free_state (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  for (i = 0; i < 3; i++) {
+    info = state->infos[i];
+    if (info)
+      remove_source (info);
+  }
+
+  g_free (state);
+}
+
+static gboolean
+do_sprinkle (SprinkleState * state)
+{
+  SourceInfo *info;
+  gint i;
+
+  /* first remove the oldest info */
+  info = state->infos[2];
+
+  if (info)
+    remove_source (info);
+
+  /* move sources */
+  for (i = 2; i > 0; i--) {
+    state->infos[i] = state->infos[i - 1];
+  }
+
+  /* add new source, stop adding sources after 10 rounds. */
+  if (state->count < 20) {
+    state->infos[0] = add_source (
+        (gdouble) ((state->count * 100) + 200),
+        ((gfloat) (state->count % 5) / 2.0 - 1.0));
+    state->count++;
+  } else {
+    state->infos[0] = NULL;
+  }
+
+  GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pipeline),
+      /*GST_DEBUG_GRAPH_SHOW_ALL, */
+      GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS | GST_DEBUG_GRAPH_SHOW_STATES,
+      "sprinkle3");
+  return TRUE;
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static void
+eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * pipeline)
+{
+  message_received (bus, message, pipeline);
+  g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+  GstElement *filter, *convert, *sink;
+  GstCaps *caps;
+  gboolean res;
+  SprinkleState *state;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  /* add the fixed part to the pipeline. Remember that we need a capsfilter
+   * after adder so that multiple sources are not racing to negotiate
+   * a format */
+  adder = gst_element_factory_make ("adder", "adder");
+  filter = gst_element_factory_make ("capsfilter", "filter");
+  convert = gst_element_factory_make ("audioconvert", "convert");
+  sink = gst_element_factory_make ("autoaudiosink", "sink");
+
+  caps = gst_caps_new_simple ("audio/x-raw-int",
+      "endianness", G_TYPE_INT, G_LITTLE_ENDIAN,
+      "channels", G_TYPE_INT, 2,
+      "width", G_TYPE_INT, 16,
+      "depth", G_TYPE_INT, 16,
+      "rate", G_TYPE_INT, 44100, "signed", G_TYPE_BOOLEAN, TRUE, NULL);
+  g_object_set (filter, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  gst_bin_add_many (GST_BIN (pipeline), adder, filter, convert, sink, NULL);
+
+  res = gst_element_link_many (adder, filter, convert, sink, NULL);
+  g_assert (res);
+
+  /* setup message handling */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_received,
+      pipeline);
+
+  /* we set the pipeline to PLAYING, the pipeline will not yet preroll because
+   * there is no source providing data for it yet */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* and add the function that modifies the pipeline every 100ms */
+  state = create_state ();
+  g_timeout_add (100, (GSourceFunc) do_sprinkle, state);
+
+  /* go to main loop */
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  free_state (state);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/encoding/Makefile.am b/tests/examples/encoding/Makefile.am
new file mode 100644
index 0000000..820a608
--- /dev/null
+++ b/tests/examples/encoding/Makefile.am
@@ -0,0 +1,14 @@
+examples = encoding
+
+encoding_SOURCES = gstcapslist.c encoding.c
+EXTRA_DIST = gstcapslist.h
+
+noinst_PROGRAMS = $(examples)
+
+LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
+AM_CFLAGS = -I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
diff --git a/tests/examples/encoding/Makefile.in b/tests/examples/encoding/Makefile.in
new file mode 100644
index 0000000..79b0d44
--- /dev/null
+++ b/tests/examples/encoding/Makefile.in
@@ -0,0 +1,702 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/examples/encoding
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = encoding$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am_encoding_OBJECTS = gstcapslist.$(OBJEXT) encoding.$(OBJEXT)
+encoding_OBJECTS = $(am_encoding_OBJECTS)
+encoding_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+encoding_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(encoding_SOURCES)
+DIST_SOURCES = $(encoding_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+examples = encoding
+encoding_SOURCES = gstcapslist.c encoding.c
+EXTRA_DIST = gstcapslist.h
+LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
+
+AM_CFLAGS = -I$(top_builddir)/gst-libs \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(GST_CFLAGS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/encoding/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/encoding/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+encoding$(EXEEXT): $(encoding_OBJECTS) $(encoding_DEPENDENCIES) 
+	@rm -f encoding$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(encoding_OBJECTS) $(encoding_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstcapslist.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/encoding/encoding.c b/tests/examples/encoding/encoding.c
new file mode 100644
index 0000000..497aa63
--- /dev/null
+++ b/tests/examples/encoding/encoding.c
@@ -0,0 +1,512 @@
+/* Example application for using GstProfile and encodebin
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils.h>
+#include <gst/pbutils/encoding-profile.h>
+#include "gstcapslist.h"
+
+static gboolean silent = FALSE;
+
+static void
+list_codecs (void)
+{
+  GstCaps *l;
+  GstCaps *caps;
+  guint i, len;
+
+  caps = gst_caps_new_empty ();
+
+  g_print ("Available container formats:\n");
+  l = gst_caps_list_container_formats (GST_RANK_NONE);
+  len = gst_caps_get_size (l);
+  for (i = 0; i < len; i++) {
+    GstStructure *st = gst_caps_steal_structure (l, 0);
+    gchar *tmpstr, *desc;
+
+    gst_caps_append_structure (caps, st);
+
+    tmpstr = gst_caps_to_string (caps);
+    desc = gst_pb_utils_get_codec_description (caps);
+    g_print ("  %s - %s\n", desc, tmpstr);
+    g_free (tmpstr);
+    if (desc)
+      g_free (desc);
+    gst_caps_remove_structure (caps, 0);
+  }
+  g_print ("\n");
+  gst_caps_unref (l);
+
+  g_print ("Available video codecs:\n");
+  l = gst_caps_list_video_encoding_formats (GST_RANK_NONE);
+  len = gst_caps_get_size (l);
+  for (i = 0; i < len; i++) {
+    GstStructure *st = gst_caps_steal_structure (l, 0);
+    gchar *tmpstr, *desc;
+
+    gst_caps_append_structure (caps, st);
+
+    tmpstr = gst_caps_to_string (caps);
+    desc = gst_pb_utils_get_codec_description (caps);
+    g_print ("  %s - %s\n", desc, tmpstr);
+    g_free (tmpstr);
+    if (desc)
+      g_free (desc);
+    gst_caps_remove_structure (caps, 0);
+  }
+  g_print ("\n");
+  gst_caps_unref (l);
+
+  g_print ("Available audio codecs:\n");
+  l = gst_caps_list_audio_encoding_formats (GST_RANK_NONE);
+  len = gst_caps_get_size (l);
+  for (i = 0; i < len; i++) {
+    GstStructure *st = gst_caps_steal_structure (l, 0);
+    gchar *tmpstr, *desc;
+
+    gst_caps_append_structure (caps, st);
+
+    tmpstr = gst_caps_to_string (caps);
+    desc = gst_pb_utils_get_codec_description (caps);
+    g_print ("  %s - %s\n", desc, tmpstr);
+    g_free (tmpstr);
+    if (desc)
+      g_free (desc);
+    gst_caps_remove_structure (caps, 0);
+  }
+  g_print ("\n");
+  gst_caps_unref (l);
+
+  gst_caps_unref (caps);
+}
+
+static gchar *
+generate_filename (const GstCaps * container, const GstCaps * vcodec,
+    const GstCaps * acodec)
+{
+  gchar *a, *b, *c;
+  gchar *res = NULL;
+  guint i;
+
+  a = gst_pb_utils_get_codec_description (container);
+  b = gst_pb_utils_get_codec_description (vcodec);
+  c = gst_pb_utils_get_codec_description (acodec);
+
+  if (!a)
+    a = g_strdup_printf ("%.10s",
+        g_uri_escape_string (gst_caps_to_string (container), NULL, FALSE));
+  if (!b)
+    b = g_strdup_printf ("%.10s",
+        g_uri_escape_string (gst_caps_to_string (vcodec), NULL, FALSE));
+  if (!c)
+    c = g_strdup_printf ("%.10s",
+        g_uri_escape_string (gst_caps_to_string (acodec), NULL, FALSE));
+
+  for (i = 0; i < 256 && res == NULL; i++) {
+    res = g_strdup_printf ("%s-%s-%s-%d.file", a, b, c, i);
+    if (g_file_test (res, G_FILE_TEST_EXISTS)) {
+      g_free (res);
+      res = NULL;
+    }
+  }
+  /* Make sure file doesn't already exist */
+
+  g_free (a);
+  g_free (b);
+  g_free (c);
+
+  return res;
+}
+
+static GstEncodingProfile *
+create_profile (GstCaps * cf, GstCaps * vf, GstCaps * af)
+{
+  GstEncodingContainerProfile *cprof = NULL;
+
+  cprof =
+      gst_encoding_container_profile_new ((gchar *) "test-application-profile",
+      NULL, cf, NULL);
+
+  if (vf)
+    gst_encoding_container_profile_add_profile (cprof,
+        (GstEncodingProfile *) gst_encoding_video_profile_new (vf,
+            NULL, NULL, 0));
+  if (af)
+    gst_encoding_container_profile_add_profile (cprof, (GstEncodingProfile *)
+        gst_encoding_audio_profile_new (af, NULL, NULL, 0));
+
+  /* Let's print out some info */
+  if (!silent) {
+    gchar *desc = gst_pb_utils_get_codec_description (cf);
+    gchar *cd = gst_caps_to_string (cf);
+    g_print ("Encoding parameters\n");
+    g_print ("  Container format : %s (%s)\n", desc, cd);
+    g_free (desc);
+    g_free (cd);
+    if (vf) {
+      desc = gst_pb_utils_get_codec_description (vf);
+      cd = gst_caps_to_string (vf);
+      g_print ("  Video format : %s (%s)\n", desc, cd);
+      g_free (desc);
+      g_free (cd);
+    }
+    if (af) {
+      desc = gst_pb_utils_get_codec_description (af);
+      cd = gst_caps_to_string (af);
+      g_print ("  Audio format : %s (%s)\n", desc, cd);
+      g_free (desc);
+      g_free (cd);
+    }
+  }
+
+  return (GstEncodingProfile *) cprof;
+}
+
+static GstEncodingProfile *
+create_profile_from_string (gchar * format, gchar * vformat, gchar * aformat)
+{
+  GstEncodingProfile *prof = NULL;
+  GstCaps *cf = NULL, *vf = NULL, *af = NULL;
+
+  if (format)
+    cf = gst_caps_from_string (format);
+  if (vformat)
+    vf = gst_caps_from_string (vformat);
+  if (aformat)
+    af = gst_caps_from_string (aformat);
+
+  if (G_UNLIKELY ((vformat && (vf == NULL)) || (aformat && (af == NULL))))
+    goto beach;
+
+  prof = create_profile (cf, vf, af);
+
+beach:
+  if (cf)
+    gst_caps_unref (cf);
+  if (vf)
+    gst_caps_unref (vf);
+  if (af)
+    gst_caps_unref (af);
+
+  return prof;
+}
+
+static void
+pad_added_cb (GstElement * uridecodebin, GstPad * pad, GstElement * encodebin)
+{
+  GstPad *sinkpad;
+
+  sinkpad = gst_element_get_compatible_pad (encodebin, pad, NULL);
+
+  if (sinkpad == NULL) {
+    GstCaps *caps;
+
+    /* Ask encodebin for a compatible pad */
+    caps = gst_pad_get_caps (pad, NULL);
+    g_signal_emit_by_name (encodebin, "request-pad", caps, &sinkpad);
+    if (caps)
+      gst_caps_unref (caps);
+  }
+  if (sinkpad == NULL) {
+    g_print ("Couldn't get an encoding channel for pad %s:%s\n",
+        GST_DEBUG_PAD_NAME (pad));
+    return;
+  }
+
+  if (G_UNLIKELY (gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) {
+    g_print ("Couldn't link pads\n");
+  }
+
+  return;
+}
+
+static gboolean
+autoplug_continue_cb (GstElement * uridecodebin, GstPad * somepad,
+    GstCaps * caps, GstElement * encodebin)
+{
+  GstPad *sinkpad;
+
+  g_signal_emit_by_name (encodebin, "request-pad", caps, &sinkpad);
+
+  if (sinkpad == NULL)
+    return TRUE;
+
+  return FALSE;
+}
+
+static void
+bus_message_cb (GstBus * bus, GstMessage * message, GMainLoop * mainloop)
+{
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_print ("ERROR\n");
+      gst_bus_set_flushing (bus, TRUE);
+      g_main_loop_quit (mainloop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_print ("Done\n");
+      g_main_loop_quit (mainloop);
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+transcode_file (gchar * uri, gchar * outputuri, GstEncodingProfile * prof)
+{
+  GstElement *pipeline;
+  GstElement *src;
+  GstElement *ebin;
+  GstElement *sink;
+  GstBus *bus;
+  GstCaps *profilecaps, *rescaps;
+  GMainLoop *mainloop;
+
+  g_print (" Input URI  : %s\n", uri);
+  g_print (" Output URI : %s\n", outputuri);
+
+  sink = gst_element_make_from_uri (GST_URI_SINK, outputuri, "sink");
+  if (G_UNLIKELY (sink == NULL)) {
+    g_print ("Can't create output sink, most likely invalid output URI !\n");
+    return;
+  }
+
+  src = gst_element_factory_make ("uridecodebin", NULL);
+  if (G_UNLIKELY (src == NULL)) {
+    g_print ("Can't create uridecodebin for input URI, aborting!\n");
+    return;
+  }
+
+  /* Figure out the streams that can be passed as-is to encodebin */
+  g_object_get (src, "caps", &rescaps, NULL);
+  rescaps = gst_caps_copy (rescaps);
+  profilecaps = gst_encoding_profile_get_input_caps (prof);
+  gst_caps_append (rescaps, profilecaps);
+
+  /* Set properties */
+  g_object_set (src, "uri", uri, "caps", rescaps, NULL);
+
+  ebin = gst_element_factory_make ("encodebin", NULL);
+  g_object_set (ebin, "profile", prof, NULL);
+
+  g_signal_connect (src, "autoplug-continue", G_CALLBACK (autoplug_continue_cb),
+      ebin);
+  g_signal_connect (src, "pad-added", G_CALLBACK (pad_added_cb), ebin);
+
+  pipeline = gst_pipeline_new ("encoding-pipeline");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, ebin, sink, NULL);
+
+  gst_element_link (ebin, sink);
+
+  mainloop = g_main_loop_new (NULL, FALSE);
+
+  bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message", G_CALLBACK (bus_message_cb), mainloop);
+
+  if (gst_element_set_state (pipeline,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
+    g_print ("Failed to start the encoding\n");
+    return;
+  }
+
+  g_main_loop_run (mainloop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+}
+
+static gchar *
+ensure_uri (gchar * location)
+{
+  gchar *res;
+  gchar *path;
+
+  if (gst_uri_is_valid (location))
+    return g_strdup (location);
+
+  if (!g_path_is_absolute (location)) {
+    gchar *cur_dir;
+    cur_dir = g_get_current_dir ();
+    path = g_build_filename (cur_dir, location, NULL);
+    g_free (cur_dir);
+  } else
+    path = g_strdup (location);
+
+  res = g_filename_to_uri (path, NULL, NULL);
+  g_free (path);
+
+  return res;
+}
+
+int
+main (int argc, char **argv)
+{
+  GError *err = NULL;
+  gchar *outputuri = NULL;
+  gchar *format = NULL;
+  gchar *aformat = NULL;
+  gchar *vformat = NULL;
+  gboolean allmissing = FALSE;
+  gboolean listcodecs = FALSE;
+  GOptionEntry options[] = {
+    {"silent", 's', 0, G_OPTION_ARG_NONE, &silent,
+        "Don't output the information structure", NULL},
+    {"outputuri", 'o', 0, G_OPTION_ARG_STRING, &outputuri,
+        "URI to encode to", "URI (<protocol>://<location>)"},
+    {"format", 'f', 0, G_OPTION_ARG_STRING, &format,
+        "Container format", "<GstCaps>"},
+    {"vformat", 'v', 0, G_OPTION_ARG_STRING, &vformat,
+        "Video format", "<GstCaps>"},
+    {"aformat", 'a', 0, G_OPTION_ARG_STRING, &aformat,
+        "Audio format", "<GstCaps>"},
+    {"allmissing", 'm', 0, G_OPTION_ARG_NONE, &allmissing,
+        "encode to all matching format/codec that aren't specified", NULL},
+    {"list-codecs", 'l', 0, G_OPTION_ARG_NONE, &listcodecs,
+        "list all available codecs and container formats", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GstEncodingProfile *prof;
+  gchar *inputuri;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx = g_option_context_new ("- encode URIs with GstProfile and encodebin");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  if (listcodecs) {
+    list_codecs ();
+    g_option_context_free (ctx);
+    exit (0);
+  }
+
+  if (outputuri == NULL || argc != 2) {
+    g_print ("%s", g_option_context_get_help (ctx, TRUE, NULL));
+    g_option_context_free (ctx);
+    exit (-1);
+  }
+
+  g_option_context_free (ctx);
+
+  /* Fixup outputuri to be a URI */
+  inputuri = ensure_uri (argv[1]);
+  outputuri = ensure_uri (outputuri);
+
+  if (allmissing) {
+    GList *muxers;
+    GstCaps *formats = NULL;
+    GstCaps *vformats = NULL;
+    GstCaps *aformats = NULL;
+    guint f, v, a, flen, vlen, alen;
+
+    if (!format)
+      formats = gst_caps_list_container_formats (GST_RANK_NONE);
+    else
+      formats = gst_caps_from_string (format);
+
+    if (!vformat)
+      vformats = gst_caps_list_video_encoding_formats (GST_RANK_NONE);
+    else
+      vformats = gst_caps_from_string (vformat);
+
+    if (!aformat)
+      aformats = gst_caps_list_audio_encoding_formats (GST_RANK_NONE);
+    else
+      aformats = gst_caps_from_string (aformat);
+    muxers =
+        gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_MUXER,
+        GST_RANK_NONE);
+
+    flen = gst_caps_get_size (formats);
+
+    for (f = 0; f < flen; f++) {
+      GstCaps *container =
+          gst_caps_new_full (gst_caps_steal_structure (formats, 0), NULL);
+      GstCaps *compatv =
+          gst_caps_list_compatible_codecs (container, vformats, muxers);
+      GstCaps *compata =
+          gst_caps_list_compatible_codecs (container, aformats, muxers);
+
+      vlen = gst_caps_get_size (compatv);
+      alen = gst_caps_get_size (compata);
+
+
+      for (v = 0; v < vlen; v++) {
+        GstCaps *vcodec =
+            gst_caps_new_full (gst_structure_copy (gst_caps_get_structure
+                (compatv, v)), NULL);
+        for (a = 0; a < alen; a++) {
+          GstCaps *acodec =
+              gst_caps_new_full (gst_structure_copy (gst_caps_get_structure
+                  (compata, a)), NULL);
+
+          prof =
+              create_profile ((GstCaps *) container, (GstCaps *) vcodec,
+              (GstCaps *) acodec);
+          if (G_UNLIKELY (prof == NULL)) {
+            g_print ("Wrong arguments\n");
+            break;
+          }
+          outputuri =
+              ensure_uri (generate_filename (container, vcodec, acodec));
+          transcode_file (inputuri, outputuri, prof);
+          gst_encoding_profile_unref (prof);
+
+          gst_caps_unref (acodec);
+        }
+        gst_caps_unref (vcodec);
+      }
+      gst_caps_unref (container);
+    }
+
+  } else {
+
+    /* Create the profile */
+    prof = create_profile_from_string (format, vformat, aformat);
+    if (G_UNLIKELY (prof == NULL)) {
+      g_print ("Encoding arguments are not valid !\n");
+      return 1;
+    }
+
+    /* Trancode file */
+    transcode_file (inputuri, outputuri, prof);
+
+    /* cleanup */
+    gst_encoding_profile_unref (prof);
+
+  }
+  return 0;
+}
diff --git a/tests/examples/encoding/gstcapslist.c b/tests/examples/encoding/gstcapslist.c
new file mode 100644
index 0000000..aed5821
--- /dev/null
+++ b/tests/examples/encoding/gstcapslist.c
@@ -0,0 +1,285 @@
+/* GStreamer
+ * Copyright (C) <2010> Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstcapslist.h"
+
+/*
+ * Caps listing convenience functions
+ */
+
+static gboolean
+remove_range_foreach (GQuark field_id, const GValue * value, GstStructure * st)
+{
+  GType ftype = G_VALUE_TYPE (value);
+  /* const gchar *fname; */
+
+  if (ftype == GST_TYPE_INT_RANGE || ftype == GST_TYPE_DOUBLE_RANGE ||
+      ftype == GST_TYPE_FRACTION_RANGE) {
+    gst_structure_remove_field (st, g_quark_to_string (field_id));
+    return FALSE;
+  }
+
+  /* fname = g_quark_to_string (field_id); */
+  /* if (strstr (fname, "framerate") || strstr (fname, "pixel-aspect-ratio") || */
+  /*     strstr (fname, "rate")) { */
+  /*   gst_structure_remove_field (st, g_quark_to_string (field_id)); */
+  /*   return FALSE; */
+  /* } */
+
+  return TRUE;
+}
+
+static void
+clear_caps (GstCaps * caps, GstCaps * rescaps)
+{
+  GstCaps *res;
+  GstStructure *st;
+  guint i;
+
+  res = gst_caps_make_writable (caps);
+
+  GST_DEBUG ("incoming caps %" GST_PTR_FORMAT, res);
+
+  /* Remove width/height/framerate/depth/width fields */
+  for (i = gst_caps_get_size (res); i; i--) {
+    st = gst_caps_get_structure (res, i - 1);
+
+    /* Remove range fields */
+    while (!gst_structure_foreach (st,
+            (GstStructureForeachFunc) remove_range_foreach, st));
+  }
+
+  GST_DEBUG ("stripped %" GST_PTR_FORMAT, res);
+
+  /* And append to list without duplicates */
+  while ((st = gst_caps_steal_structure (res, 0))) {
+    /* Skip fake codecs/containers */
+    if (gst_structure_has_name (st, "audio/x-raw-int") ||
+        gst_structure_has_name (st, "audio/x-raw-float") ||
+        gst_structure_has_name (st, "video/x-raw-yuv") ||
+        gst_structure_has_name (st, "video/x-raw-rgb") ||
+        gst_structure_has_name (st, "unknown/unknown")) {
+      gst_structure_free (st);
+      continue;
+    }
+
+    gst_caps_append_structure (rescaps, st);
+  }
+
+  gst_caps_unref (res);
+}
+
+static GstCaps *
+get_all_caps (GList * elements, GstPadDirection direction)
+{
+  GstCaps *res = NULL, *res2;
+  GList *tmp;
+
+  res = gst_caps_new_empty ();
+
+  for (tmp = elements; tmp; tmp = tmp->next) {
+    GstElementFactory *factory = (GstElementFactory *) tmp->data;
+    const GList *templates;
+    GList *walk;
+
+    templates = gst_element_factory_get_static_pad_templates (factory);
+    for (walk = (GList *) templates; walk; walk = g_list_next (walk)) {
+      GstStaticPadTemplate *templ = walk->data;
+      if (templ->direction == direction)
+        clear_caps (gst_static_caps_get (&templ->static_caps), res);
+    }
+  }
+
+  res2 = gst_caps_normalize (res);
+  gst_caps_unref (res);
+  return res2;
+}
+
+/**
+ * gst_caps_list_container_formats:
+ * @minrank: The minimum #GstRank
+ *
+ * Returns a #GstCaps corresponding to all the container formats
+ * one can mux to on this system.
+ *
+ * Returns: A #GstCaps. Unref with %gst_caps_unref when done with it.
+ */
+GstCaps *
+gst_caps_list_container_formats (GstRank minrank)
+{
+  GstCaps *res;
+  GList *muxers;
+
+  muxers =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_MUXER,
+      minrank);
+  res = get_all_caps (muxers, GST_PAD_SRC);
+  gst_plugin_feature_list_free (muxers);
+
+  return res;
+}
+
+static GstCaps *
+gst_caps_list_encoding_formats (GstRank minrank)
+{
+  GstCaps *res;
+  GList *encoders;
+
+  encoders =
+      gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_ENCODER,
+      minrank);
+  res = get_all_caps (encoders, GST_PAD_SRC);
+  gst_plugin_feature_list_free (encoders);
+
+  return res;
+}
+
+/**
+ * gst_caps_list_video_encoding_formats:
+ * @minrank: The minimum #GstRank
+ *
+ * Returns a #GstCaps corresponding to all the video or image formats one
+ * can encode to on this system.
+ *
+ * Returns: A #GstCaps. Unref with %gst_caps_unref when done with it.
+ */
+GstCaps *
+gst_caps_list_video_encoding_formats (GstRank minrank)
+{
+  GstCaps *res;
+  GList *encoders;
+
+  encoders =
+      gst_element_factory_list_get_elements
+      (GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER, minrank);
+  res = get_all_caps (encoders, GST_PAD_SRC);
+  gst_plugin_feature_list_free (encoders);
+
+  return res;
+}
+
+
+/**
+ * gst_caps_list_audio_encoding_formats:
+ * @minrank: The minimum #GstRank
+ *
+ * Returns a #GstCaps corresponding to all the audio formats one
+ * can encode to on this system.
+ *
+ * Returns: A  #GstCaps. Unref with %gst_caps_unref when done with it.
+ */
+GstCaps *
+gst_caps_list_audio_encoding_formats (GstRank minrank)
+{
+  GstCaps *res;
+  GList *encoders;
+
+  encoders =
+      gst_element_factory_list_get_elements
+      (GST_ELEMENT_FACTORY_TYPE_AUDIO_ENCODER, minrank);
+  res = get_all_caps (encoders, GST_PAD_SRC);
+  gst_plugin_feature_list_free (encoders);
+
+  return res;
+}
+
+/**
+ * gst_caps_list_compatible_codecs:
+ * @containerformat: A #GstCaps corresponding to a container format
+ * @codecformats: An optional #GstCaps of codec formats
+ * @muxers: An optional #GList of muxer #GstElementFactory.
+ *
+ * Returns an array of #GstCaps corresponding to the audio/video/text formats
+ * one can encode to and that can be muxed in the provided @containerformat.
+ *
+ * If specified, only the #GstCaps contained in @codecformats will be checked
+ * against, else all compatible audio/video formats will be returned.
+ *
+ * If specified, only the #GstElementFactory contained in @muxers will be checked,
+ * else all available muxers on the system will be checked.
+ *
+ * Returns: A #GstCaps containing all compatible formats. Unref with %gst_caps_unref
+ * when done.
+ */
+GstCaps *
+gst_caps_list_compatible_codecs (const GstCaps * containerformat,
+    GstCaps * codecformats, GList * muxers)
+{
+  const GList *templates;
+  GstElementFactory *factory;
+  GList *walk;
+  GstCaps *res = NULL;
+  GstCaps *tmpcaps;
+  GList *tmp;
+  gboolean hadmuxers = (muxers != NULL);
+  gboolean hadcodecs = (codecformats != NULL);
+
+  GST_DEBUG ("containerformat: %" GST_PTR_FORMAT, containerformat);
+  GST_DEBUG ("codecformats: %" GST_PTR_FORMAT, codecformats);
+
+  if (!hadmuxers)
+    muxers =
+        gst_element_factory_list_get_elements (GST_ELEMENT_FACTORY_TYPE_MUXER,
+        GST_RANK_NONE);
+  if (!hadcodecs)
+    codecformats = gst_caps_list_encoding_formats (GST_RANK_NONE);
+
+  /* Get the highest rank muxer matching containerformat */
+  tmp =
+      gst_element_factory_list_filter (muxers, containerformat, GST_PAD_SRC,
+      TRUE);
+  if (G_UNLIKELY (tmp == NULL))
+    goto beach;
+
+  factory = (GstElementFactory *) tmp->data;
+
+  GST_DEBUG ("Trying with factory %s",
+      gst_element_factory_get_longname (factory));
+
+  /* Match all muxer sink pad templates against the available codec formats */
+  templates = gst_element_factory_get_static_pad_templates (factory);
+  gst_plugin_feature_list_free (tmp);
+
+  tmpcaps = gst_caps_new_empty ();
+
+  for (walk = (GList *) templates; walk; walk = walk->next) {
+    GstStaticPadTemplate *templ = walk->data;
+
+    if (templ->direction == GST_PAD_SINK) {
+      GstCaps *templ_caps;
+
+      templ_caps = gst_static_caps_get (&templ->static_caps);
+      gst_caps_append (tmpcaps, gst_caps_copy (templ_caps));
+    }
+  }
+
+  res = gst_caps_intersect (tmpcaps, codecformats);
+  gst_caps_unref (tmpcaps);
+
+beach:
+  if (!hadmuxers)
+    gst_plugin_feature_list_free (muxers);
+  if (!hadcodecs)
+    gst_caps_unref (codecformats);
+
+  tmpcaps = gst_caps_normalize (res);
+  gst_caps_unref (res);
+
+  return tmpcaps;
+}
diff --git a/tests/examples/encoding/gstcapslist.h b/tests/examples/encoding/gstcapslist.h
new file mode 100644
index 0000000..fa0ed83
--- /dev/null
+++ b/tests/examples/encoding/gstcapslist.h
@@ -0,0 +1,35 @@
+/* GStreamer
+ * Copyright (C) <2010> Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+
+GstCaps *gst_caps_list_compatible_codecs (const GstCaps *containerformat,
+					  GstCaps *codecformats,
+					  GList *muxers);
+
+GstCaps *gst_caps_list_compatible_containers (GstCaps *mediaformat,
+					      GList *containerformats);
+
+
+GstCaps *gst_caps_list_container_formats (GstRank minrank);
+
+GstCaps *gst_caps_list_video_encoding_formats (GstRank minrank);
+
+GstCaps *gst_caps_list_audio_encoding_formats (GstRank minrank);
+
diff --git a/tests/examples/gio/Makefile.am b/tests/examples/gio/Makefile.am
new file mode 100644
index 0000000..c4306f8
--- /dev/null
+++ b/tests/examples/gio/Makefile.am
@@ -0,0 +1,8 @@
+if HAVE_GTK
+if USE_GIO
+noinst_PROGRAMS = giosrc-mounting
+giosrc_mounting_SOURCES = giosrc-mounting.c
+giosrc_mounting_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) $(GIO_CFLAGS)
+giosrc_mounting_LDADD = $(GST_LIBS) $(GTK_LIBS) $(GIO_LIBS)
+endif
+endif
diff --git a/tests/examples/gio/Makefile.in b/tests/examples/gio/Makefile.in
new file mode 100644
index 0000000..3fcc6ff
--- /dev/null
+++ b/tests/examples/gio/Makefile.in
@@ -0,0 +1,714 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@noinst_PROGRAMS =  \
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@	giosrc-mounting$(EXEEXT)
+subdir = tests/examples/gio
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am__giosrc_mounting_SOURCES_DIST = giosrc-mounting.c
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@am_giosrc_mounting_OBJECTS = giosrc_mounting-giosrc-mounting.$(OBJEXT)
+giosrc_mounting_OBJECTS = $(am_giosrc_mounting_OBJECTS)
+am__DEPENDENCIES_1 =
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@giosrc_mounting_DEPENDENCIES =  \
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+giosrc_mounting_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(giosrc_mounting_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(giosrc_mounting_SOURCES)
+DIST_SOURCES = $(am__giosrc_mounting_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@giosrc_mounting_SOURCES = giosrc-mounting.c
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@giosrc_mounting_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) $(GIO_CFLAGS)
+@HAVE_GTK_TRUE@@USE_GIO_TRUE@giosrc_mounting_LDADD = $(GST_LIBS) $(GTK_LIBS) $(GIO_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/gio/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/gio/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+giosrc-mounting$(EXEEXT): $(giosrc_mounting_OBJECTS) $(giosrc_mounting_DEPENDENCIES) 
+	@rm -f giosrc-mounting$(EXEEXT)
+	$(AM_V_CCLD)$(giosrc_mounting_LINK) $(giosrc_mounting_OBJECTS) $(giosrc_mounting_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/giosrc_mounting-giosrc-mounting.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+giosrc_mounting-giosrc-mounting.o: giosrc-mounting.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(giosrc_mounting_CFLAGS) $(CFLAGS) -MT giosrc_mounting-giosrc-mounting.o -MD -MP -MF $(DEPDIR)/giosrc_mounting-giosrc-mounting.Tpo -c -o giosrc_mounting-giosrc-mounting.o `test -f 'giosrc-mounting.c' || echo '$(srcdir)/'`giosrc-mounting.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/giosrc_mounting-giosrc-mounting.Tpo $(DEPDIR)/giosrc_mounting-giosrc-mounting.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='giosrc-mounting.c' object='giosrc_mounting-giosrc-mounting.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(giosrc_mounting_CFLAGS) $(CFLAGS) -c -o giosrc_mounting-giosrc-mounting.o `test -f 'giosrc-mounting.c' || echo '$(srcdir)/'`giosrc-mounting.c
+
+giosrc_mounting-giosrc-mounting.obj: giosrc-mounting.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(giosrc_mounting_CFLAGS) $(CFLAGS) -MT giosrc_mounting-giosrc-mounting.obj -MD -MP -MF $(DEPDIR)/giosrc_mounting-giosrc-mounting.Tpo -c -o giosrc_mounting-giosrc-mounting.obj `if test -f 'giosrc-mounting.c'; then $(CYGPATH_W) 'giosrc-mounting.c'; else $(CYGPATH_W) '$(srcdir)/giosrc-mounting.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/giosrc_mounting-giosrc-mounting.Tpo $(DEPDIR)/giosrc_mounting-giosrc-mounting.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='giosrc-mounting.c' object='giosrc_mounting-giosrc-mounting.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(giosrc_mounting_CFLAGS) $(CFLAGS) -c -o giosrc_mounting-giosrc-mounting.obj `if test -f 'giosrc-mounting.c'; then $(CYGPATH_W) 'giosrc-mounting.c'; else $(CYGPATH_W) '$(srcdir)/giosrc-mounting.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/gio/giosrc-mounting.c b/tests/examples/gio/giosrc-mounting.c
new file mode 100644
index 0000000..cf34f55
--- /dev/null
+++ b/tests/examples/gio/giosrc-mounting.c
@@ -0,0 +1,126 @@
+/* GStreamer
+ *
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+static GstElement *pipeline = NULL;
+
+static void
+mount_cb (GObject * obj, GAsyncResult * res, gpointer user_data)
+{
+  gboolean ret;
+  GError *err = NULL;
+
+  ret = g_file_mount_enclosing_volume_finish (G_FILE (obj), res, &err);
+
+  if (ret) {
+    g_print ("mounted successfully\n");
+    gst_bus_set_flushing ((GstBus *) user_data, FALSE);
+
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  } else {
+    g_print ("mounting failed: %s\n", err->message);
+    g_clear_error (&err);
+    gtk_main_quit ();
+  }
+}
+
+static gboolean
+message_handler (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+
+  switch (message->type) {
+    case GST_MESSAGE_ELEMENT:{
+      const GstStructure *s = gst_message_get_structure (message);
+      const gchar *name = gst_structure_get_name (s);
+
+      if (strcmp (name, "not-mounted") == 0) {
+        GMountOperation *mop = gtk_mount_operation_new (NULL);
+        GFile *file =
+            G_FILE (g_value_get_object (gst_structure_get_value (s, "file")));
+
+        g_print ("not-mounted\n");
+        gst_element_set_state (pipeline, GST_STATE_NULL);
+        gst_bus_set_flushing (bus, TRUE);
+
+        g_file_mount_enclosing_volume (file, G_MOUNT_MOUNT_NONE,
+            mop, NULL, mount_cb, bus);
+
+        g_object_unref (mop);
+      }
+      break;
+    }
+
+    case GST_MESSAGE_EOS:
+      g_print ("EOS\n");
+      gtk_main_quit ();
+      break;
+    case GST_MESSAGE_ERROR:{
+      GError *err = NULL;
+
+      gst_message_parse_error (message, &err, NULL);
+      g_print ("error: %s\n", err->message);
+      g_clear_error (&err);
+
+      gtk_main_quit ();
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+  gint watch_id;
+
+  if (argc != 2) {
+    g_print ("usage: giosrc-mounting URI\n");
+    return -1;
+  }
+
+  gst_init (NULL, NULL);
+  gtk_init (NULL, NULL);
+
+  pipeline = gst_element_factory_make ("playbin2", NULL);
+  g_assert (pipeline);
+  g_object_set (G_OBJECT (pipeline), "uri", argv[1], NULL);
+
+  bus = gst_element_get_bus (pipeline);
+  watch_id = gst_bus_add_watch (bus, message_handler, NULL);
+  gst_object_unref (bus);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  gtk_main ();
+
+  g_source_remove (watch_id);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/overlay/Makefile.am b/tests/examples/overlay/Makefile.am
new file mode 100644
index 0000000..31615b4
--- /dev/null
+++ b/tests/examples/overlay/Makefile.am
@@ -0,0 +1,49 @@
+EXAMPLES =
+
+if USE_X
+
+if HAVE_GTK_X11
+EXAMPLES += gtk-videooverlay
+
+gtk_videooverlay_SOURCES = gtk-videooverlay.c
+gtk_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+gtk_videooverlay_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+endif
+
+if HAVE_QT
+EXAMPLES += qt-videooverlay
+
+qt_videooverlay_SOURCES = qt-videooverlay.cpp
+qt_videooverlay_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(X_CFLAGS) $(QT_CFLAGS)
+qt_videooverlay_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM) $(QT_LIBS)
+endif
+
+if HAVE_QT_GV
+EXAMPLES += qtgv-videooverlay
+
+qtgv_videooverlay_SOURCES = qtgv-videooverlay.cpp qtgv-videooverlay.h
+qtgv_videooverlay_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(X_CFLAGS) $(QT_CFLAGS)
+qtgv_videooverlay_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM) $(QT_LIBS)
+
+# qt moc support, according to http://qtnode.net/wiki/Qt_with_autotools
+
+nodist_qtgv_videooverlay_SOURCES = moc_qtgv-videooverlay.cpp
+
+moc_%.cpp:%.h
+	$(AM_V_GEN)$(QT4_MOC) $< -o $@
+
+EXTRA_DIST = $(nodist_qtgv_videooverlay_SOURCES:moc_%.cpp=%.h)
+CLEANFILES = $(nodist_qtgv_videooverlay_SOURCES)
+
+endif
+
+endif
+
+noinst_PROGRAMS = $(EXAMPLES)
+
diff --git a/tests/examples/overlay/Makefile.in b/tests/examples/overlay/Makefile.in
new file mode 100644
index 0000000..de4d094
--- /dev/null
+++ b/tests/examples/overlay/Makefile.in
@@ -0,0 +1,876 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am__append_1 = gtk-videooverlay
+@HAVE_QT_TRUE@@USE_X_TRUE@am__append_2 = qt-videooverlay
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@am__append_3 = qtgv-videooverlay
+noinst_PROGRAMS = $(am__EXEEXT_4)
+subdir = tests/examples/overlay
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am__EXEEXT_1 =  \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	gtk-videooverlay$(EXEEXT)
+@HAVE_QT_TRUE@@USE_X_TRUE@am__EXEEXT_2 = qt-videooverlay$(EXEEXT)
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@am__EXEEXT_3 =  \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	qtgv-videooverlay$(EXEEXT)
+am__EXEEXT_4 = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
+PROGRAMS = $(noinst_PROGRAMS)
+am__gtk_videooverlay_SOURCES_DIST = gtk-videooverlay.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am_gtk_videooverlay_OBJECTS = gtk_videooverlay-gtk-videooverlay.$(OBJEXT)
+gtk_videooverlay_OBJECTS = $(am_gtk_videooverlay_OBJECTS)
+am__DEPENDENCIES_1 =
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@gtk_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+gtk_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(gtk_videooverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+am__qt_videooverlay_SOURCES_DIST = qt-videooverlay.cpp
+@HAVE_QT_TRUE@@USE_X_TRUE@am_qt_videooverlay_OBJECTS = qt_videooverlay-qt-videooverlay.$(OBJEXT)
+qt_videooverlay_OBJECTS = $(am_qt_videooverlay_OBJECTS)
+@HAVE_QT_TRUE@@USE_X_TRUE@qt_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+qt_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(qt_videooverlay_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am__qtgv_videooverlay_SOURCES_DIST = qtgv-videooverlay.cpp \
+	qtgv-videooverlay.h
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@am_qtgv_videooverlay_OBJECTS = qtgv_videooverlay-qtgv-videooverlay.$(OBJEXT)
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@nodist_qtgv_videooverlay_OBJECTS = qtgv_videooverlay-moc_qtgv-videooverlay.$(OBJEXT)
+qtgv_videooverlay_OBJECTS = $(am_qtgv_videooverlay_OBJECTS) \
+	$(nodist_qtgv_videooverlay_OBJECTS)
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@qtgv_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+qtgv_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+	$(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_$(V))
+am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
+am__v_CXX_0 = @echo "  CXX   " $@;
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_$(V))
+am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CXXLD_0 = @echo "  CXXLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(gtk_videooverlay_SOURCES) $(qt_videooverlay_SOURCES) \
+	$(qtgv_videooverlay_SOURCES) \
+	$(nodist_qtgv_videooverlay_SOURCES)
+DIST_SOURCES = $(am__gtk_videooverlay_SOURCES_DIST) \
+	$(am__qt_videooverlay_SOURCES_DIST) \
+	$(am__qtgv_videooverlay_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXAMPLES = $(am__append_1) $(am__append_2) $(am__append_3)
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@gtk_videooverlay_SOURCES = gtk-videooverlay.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@gtk_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@gtk_videooverlay_LDADD = \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+
+@HAVE_QT_TRUE@@USE_X_TRUE@qt_videooverlay_SOURCES = qt-videooverlay.cpp
+@HAVE_QT_TRUE@@USE_X_TRUE@qt_videooverlay_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(X_CFLAGS) $(QT_CFLAGS)
+@HAVE_QT_TRUE@@USE_X_TRUE@qt_videooverlay_LDADD = \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_QT_TRUE@@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM) $(QT_LIBS)
+
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@qtgv_videooverlay_SOURCES = qtgv-videooverlay.cpp qtgv-videooverlay.h
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@qtgv_videooverlay_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(X_CFLAGS) $(QT_CFLAGS)
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@qtgv_videooverlay_LDADD = \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM) $(QT_LIBS)
+
+
+# qt moc support, according to http://qtnode.net/wiki/Qt_with_autotools
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@nodist_qtgv_videooverlay_SOURCES = moc_qtgv-videooverlay.cpp
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@EXTRA_DIST = $(nodist_qtgv_videooverlay_SOURCES:moc_%.cpp=%.h)
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@CLEANFILES = $(nodist_qtgv_videooverlay_SOURCES)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/overlay/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/overlay/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+gtk-videooverlay$(EXEEXT): $(gtk_videooverlay_OBJECTS) $(gtk_videooverlay_DEPENDENCIES) 
+	@rm -f gtk-videooverlay$(EXEEXT)
+	$(AM_V_CCLD)$(gtk_videooverlay_LINK) $(gtk_videooverlay_OBJECTS) $(gtk_videooverlay_LDADD) $(LIBS)
+qt-videooverlay$(EXEEXT): $(qt_videooverlay_OBJECTS) $(qt_videooverlay_DEPENDENCIES) 
+	@rm -f qt-videooverlay$(EXEEXT)
+	$(AM_V_CXXLD)$(qt_videooverlay_LINK) $(qt_videooverlay_OBJECTS) $(qt_videooverlay_LDADD) $(LIBS)
+qtgv-videooverlay$(EXEEXT): $(qtgv_videooverlay_OBJECTS) $(qtgv_videooverlay_DEPENDENCIES) 
+	@rm -f qtgv-videooverlay$(EXEEXT)
+	$(AM_V_CXXLD)$(qtgv_videooverlay_LINK) $(qtgv_videooverlay_OBJECTS) $(qtgv_videooverlay_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qt_videooverlay-qt-videooverlay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+gtk_videooverlay-gtk-videooverlay.o: gtk-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_videooverlay_CFLAGS) $(CFLAGS) -MT gtk_videooverlay-gtk-videooverlay.o -MD -MP -MF $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Tpo -c -o gtk_videooverlay-gtk-videooverlay.o `test -f 'gtk-videooverlay.c' || echo '$(srcdir)/'`gtk-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Tpo $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gtk-videooverlay.c' object='gtk_videooverlay-gtk-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_videooverlay_CFLAGS) $(CFLAGS) -c -o gtk_videooverlay-gtk-videooverlay.o `test -f 'gtk-videooverlay.c' || echo '$(srcdir)/'`gtk-videooverlay.c
+
+gtk_videooverlay-gtk-videooverlay.obj: gtk-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_videooverlay_CFLAGS) $(CFLAGS) -MT gtk_videooverlay-gtk-videooverlay.obj -MD -MP -MF $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Tpo -c -o gtk_videooverlay-gtk-videooverlay.obj `if test -f 'gtk-videooverlay.c'; then $(CYGPATH_W) 'gtk-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/gtk-videooverlay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Tpo $(DEPDIR)/gtk_videooverlay-gtk-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='gtk-videooverlay.c' object='gtk_videooverlay-gtk-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gtk_videooverlay_CFLAGS) $(CFLAGS) -c -o gtk_videooverlay-gtk-videooverlay.obj `if test -f 'gtk-videooverlay.c'; then $(CYGPATH_W) 'gtk-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/gtk-videooverlay.c'; fi`
+
+.cpp.o:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+qt_videooverlay-qt-videooverlay.o: qt-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qt_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qt_videooverlay-qt-videooverlay.o -MD -MP -MF $(DEPDIR)/qt_videooverlay-qt-videooverlay.Tpo -c -o qt_videooverlay-qt-videooverlay.o `test -f 'qt-videooverlay.cpp' || echo '$(srcdir)/'`qt-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qt_videooverlay-qt-videooverlay.Tpo $(DEPDIR)/qt_videooverlay-qt-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qt-videooverlay.cpp' object='qt_videooverlay-qt-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qt_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qt_videooverlay-qt-videooverlay.o `test -f 'qt-videooverlay.cpp' || echo '$(srcdir)/'`qt-videooverlay.cpp
+
+qt_videooverlay-qt-videooverlay.obj: qt-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qt_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qt_videooverlay-qt-videooverlay.obj -MD -MP -MF $(DEPDIR)/qt_videooverlay-qt-videooverlay.Tpo -c -o qt_videooverlay-qt-videooverlay.obj `if test -f 'qt-videooverlay.cpp'; then $(CYGPATH_W) 'qt-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/qt-videooverlay.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qt_videooverlay-qt-videooverlay.Tpo $(DEPDIR)/qt_videooverlay-qt-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qt-videooverlay.cpp' object='qt_videooverlay-qt-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qt_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qt_videooverlay-qt-videooverlay.obj `if test -f 'qt-videooverlay.cpp'; then $(CYGPATH_W) 'qt-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/qt-videooverlay.cpp'; fi`
+
+qtgv_videooverlay-qtgv-videooverlay.o: qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qtgv_videooverlay-qtgv-videooverlay.o -MD -MP -MF $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Tpo -c -o qtgv_videooverlay-qtgv-videooverlay.o `test -f 'qtgv-videooverlay.cpp' || echo '$(srcdir)/'`qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Tpo $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qtgv-videooverlay.cpp' object='qtgv_videooverlay-qtgv-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qtgv_videooverlay-qtgv-videooverlay.o `test -f 'qtgv-videooverlay.cpp' || echo '$(srcdir)/'`qtgv-videooverlay.cpp
+
+qtgv_videooverlay-qtgv-videooverlay.obj: qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qtgv_videooverlay-qtgv-videooverlay.obj -MD -MP -MF $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Tpo -c -o qtgv_videooverlay-qtgv-videooverlay.obj `if test -f 'qtgv-videooverlay.cpp'; then $(CYGPATH_W) 'qtgv-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/qtgv-videooverlay.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Tpo $(DEPDIR)/qtgv_videooverlay-qtgv-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qtgv-videooverlay.cpp' object='qtgv_videooverlay-qtgv-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qtgv_videooverlay-qtgv-videooverlay.obj `if test -f 'qtgv-videooverlay.cpp'; then $(CYGPATH_W) 'qtgv-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/qtgv-videooverlay.cpp'; fi`
+
+qtgv_videooverlay-moc_qtgv-videooverlay.o: moc_qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qtgv_videooverlay-moc_qtgv-videooverlay.o -MD -MP -MF $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Tpo -c -o qtgv_videooverlay-moc_qtgv-videooverlay.o `test -f 'moc_qtgv-videooverlay.cpp' || echo '$(srcdir)/'`moc_qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Tpo $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='moc_qtgv-videooverlay.cpp' object='qtgv_videooverlay-moc_qtgv-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qtgv_videooverlay-moc_qtgv-videooverlay.o `test -f 'moc_qtgv-videooverlay.cpp' || echo '$(srcdir)/'`moc_qtgv-videooverlay.cpp
+
+qtgv_videooverlay-moc_qtgv-videooverlay.obj: moc_qtgv-videooverlay.cpp
+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -MT qtgv_videooverlay-moc_qtgv-videooverlay.obj -MD -MP -MF $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Tpo -c -o qtgv_videooverlay-moc_qtgv-videooverlay.obj `if test -f 'moc_qtgv-videooverlay.cpp'; then $(CYGPATH_W) 'moc_qtgv-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_qtgv-videooverlay.cpp'; fi`
+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Tpo $(DEPDIR)/qtgv_videooverlay-moc_qtgv-videooverlay.Po
+@am__fastdepCXX_FALSE@	$(AM_V_CXX) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='moc_qtgv-videooverlay.cpp' object='qtgv_videooverlay-moc_qtgv-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(qtgv_videooverlay_CXXFLAGS) $(CXXFLAGS) -c -o qtgv_videooverlay-moc_qtgv-videooverlay.obj `if test -f 'moc_qtgv-videooverlay.cpp'; then $(CYGPATH_W) 'moc_qtgv-videooverlay.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_qtgv-videooverlay.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@moc_%.cpp:%.h
+@HAVE_QT_GV_TRUE@@USE_X_TRUE@	$(AM_V_GEN)$(QT4_MOC) $< -o $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/overlay/gtk-videooverlay.c b/tests/examples/overlay/gtk-videooverlay.c
new file mode 100644
index 0000000..427aaa7
--- /dev/null
+++ b/tests/examples/overlay/gtk-videooverlay.c
@@ -0,0 +1,149 @@
+/* GStreamer
+ * Copyright (C) <2010> Stefan Kost <ensonic@users.sf.net>
+ *
+ * gtk-videooverlay: demonstrate overlay handling using gtk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+#include <gst/gst.h>
+#include <gst/interfaces/videooverlay.h>
+
+#include <string.h>
+
+static void
+window_closed (GtkWidget * widget, GdkEvent * event, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+
+  gtk_widget_hide (widget);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gtk_main_quit ();
+}
+
+/* slightly convoluted way to find a working video sink that's not a bin,
+ * one could use autovideosink from gst-plugins-good instead
+ */
+static GstElement *
+find_video_sink (void)
+{
+  GstStateChangeReturn sret;
+  GstElement *sink;
+
+  if ((sink = gst_element_factory_make ("xvimagesink", NULL))) {
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+
+  if ((sink = gst_element_factory_make ("ximagesink", NULL))) {
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+
+  if (strcmp (DEFAULT_VIDEOSINK, "xvimagesink") == 0 ||
+      strcmp (DEFAULT_VIDEOSINK, "ximagesink") == 0)
+    return NULL;
+
+  if ((sink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL))) {
+    if (GST_IS_BIN (sink)) {
+      gst_object_unref (sink);
+      return NULL;
+    }
+
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+  return NULL;
+}
+
+int
+main (int argc, char **argv)
+{
+  GdkWindow *video_window_xwindow;
+  GtkWidget *window, *video_window;
+  GstElement *pipeline, *src, *sink;
+  gulong embed_xid;
+  GstStateChangeReturn sret;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gst_init (&argc, &argv);
+  gtk_init (&argc, &argv);
+
+  /* prepare the pipeline */
+
+  pipeline = gst_pipeline_new ("xvoverlay");
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  sink = find_video_sink ();
+
+  if (sink == NULL)
+    g_error ("Couldn't find a working video sink.");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+
+  /* prepare the ui */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  g_signal_connect (G_OBJECT (window), "delete-event",
+      G_CALLBACK (window_closed), (gpointer) pipeline);
+  gtk_window_set_default_size (GTK_WINDOW (window), 320, 240);
+  gtk_window_set_title (GTK_WINDOW (window), "GstXOverlay Gtk+ demo");
+
+  video_window = gtk_drawing_area_new ();
+  gtk_widget_set_double_buffered (video_window, FALSE);
+  gtk_container_add (GTK_CONTAINER (window), video_window);
+  gtk_container_set_border_width (GTK_CONTAINER (window), 16);
+
+  gtk_widget_show_all (window);
+  gtk_widget_realize (window);
+
+  video_window_xwindow = gtk_widget_get_window (video_window);
+  embed_xid = GDK_WINDOW_XID (video_window_xwindow);
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), embed_xid);
+
+  /* run the pipeline */
+
+  sret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE)
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+  else
+    gtk_main ();
+
+  gst_object_unref (pipeline);
+  return 0;
+}
diff --git a/tests/examples/overlay/qt-videooverlay.cpp b/tests/examples/overlay/qt-videooverlay.cpp
new file mode 100644
index 0000000..e102280
--- /dev/null
+++ b/tests/examples/overlay/qt-videooverlay.cpp
@@ -0,0 +1,130 @@
+/* GStreamer
+ * Copyright (C) <2010> Stefan Kost <ensonic@users.sf.net>
+ *
+ * qt-xoverlay: demonstrate overlay handling using qt
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <gst/gst.h>
+#include <gst/interfaces/videooverlay.h>
+
+#include <QApplication>
+#include <QTimer>
+#include <QWidget>
+
+/* slightly convoluted way to find a working video sink that's not a bin,
+ * one could use autovideosink from gst-plugins-good instead
+ */
+static GstElement *
+find_video_sink (void)
+{
+  GstStateChangeReturn sret;
+  GstElement *sink;
+
+  if ((sink = gst_element_factory_make ("xvimagesink", NULL))) {
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+  
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+
+  if ((sink = gst_element_factory_make ("ximagesink", NULL))) {
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+  
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+
+  if (strcmp (DEFAULT_VIDEOSINK, "xvimagesink") == 0 ||
+      strcmp (DEFAULT_VIDEOSINK, "ximagesink") == 0)
+    return NULL;
+
+  if ((sink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL))) {
+    if (GST_IS_BIN (sink)) {
+      gst_object_unref (sink);
+      return NULL;
+    }
+  
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret == GST_STATE_CHANGE_SUCCESS)
+      return sink;
+  
+    gst_element_set_state (sink, GST_STATE_NULL);
+  }
+  gst_object_unref (sink);
+  return NULL;
+}
+
+int main(int argc, char *argv[])
+{
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gst_init (&argc, &argv);
+  QApplication app(argc, argv);
+  app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit ()));
+
+  /* prepare the pipeline */
+
+  GstElement *pipeline = gst_pipeline_new ("xvoverlay");
+  GstElement *src = gst_element_factory_make ("videotestsrc", NULL);
+  GstElement *sink = find_video_sink ();
+
+  if (sink == NULL)
+    g_error ("Couldn't find a working video sink.");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+  
+  /* prepare the ui */
+
+  QWidget window;
+  window.resize(320, 240);
+  window.setWindowTitle("GstXOverlay Qt demo");
+  window.show();
+  
+  WId xwinid = window.winId();
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), xwinid);
+
+  /* run the pipeline */
+
+  GstStateChangeReturn sret = gst_element_set_state (pipeline,
+      GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE) {
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    /* Exit application */
+    QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
+  }
+
+  int ret = app.exec();
+  
+  window.hide();
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return ret;
+}
diff --git a/tests/examples/overlay/qtgv-videooverlay.cpp b/tests/examples/overlay/qtgv-videooverlay.cpp
new file mode 100644
index 0000000..fea8c52
--- /dev/null
+++ b/tests/examples/overlay/qtgv-videooverlay.cpp
@@ -0,0 +1,128 @@
+/* GStreamer
+ * Copyright (C) <2010> Alexander Bokovoy <ab@samba.org>
+ *
+ * qtgv-xoverlay: demonstrate overlay handling using qt graphics view
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "qtgv-videooverlay.h"
+
+#include <QApplication>
+#include <QTimer>
+
+#include <gst/interfaces/videooverlay.h>
+
+SinkPipeline::SinkPipeline(QGraphicsView *parent) : QObject(parent)
+{
+  GstStateChangeReturn sret;
+  
+  pipeline = gst_pipeline_new ("xvoverlay");
+  src = gst_element_factory_make ("videotestsrc", NULL);
+
+  if ((sink = gst_element_factory_make ("xvimagesink", NULL))) {
+    sret = gst_element_set_state (sink, GST_STATE_READY);
+    if (sret != GST_STATE_CHANGE_SUCCESS) {
+      gst_element_set_state (sink, GST_STATE_NULL);
+      gst_object_unref (sink);
+  
+      if ((sink = gst_element_factory_make ("ximagesink", NULL))) {
+        sret = gst_element_set_state (sink, GST_STATE_READY);
+        if (sret != GST_STATE_CHANGE_SUCCESS) {
+          gst_element_set_state (sink, GST_STATE_NULL);
+          gst_object_unref (sink);
+    
+          if (strcmp (DEFAULT_VIDEOSINK, "xvimagesink") != 0 &&
+              strcmp (DEFAULT_VIDEOSINK, "ximagesink") != 0) {
+    
+            if ((sink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL))) {
+              if (!GST_IS_BIN (sink)) {
+                sret = gst_element_set_state (sink, GST_STATE_READY);
+                if (sret != GST_STATE_CHANGE_SUCCESS) {
+                  gst_element_set_state (sink, GST_STATE_NULL);
+                  gst_object_unref (sink);
+                  sink = NULL;
+                }
+              } else {
+                gst_object_unref (sink);
+                sink = NULL;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  if (sink == NULL)
+    g_error ("Couldn't find a working video sink.");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+  xwinid = parent->winId();
+}
+
+SinkPipeline::~SinkPipeline()
+{
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+}
+
+void SinkPipeline::startPipeline()
+{
+  GstStateChangeReturn sret;
+
+  /* we know what the video sink is in this case (xvimagesink), so we can
+   * just set it directly here now (instead of waiting for a
+   * prepare-window-handle element message in a sync bus handler and setting
+   * it there) */
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), xwinid);
+
+  sret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE) {
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    /* Exit application */
+    QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
+  }
+}
+
+int main( int argc, char **argv )
+{
+    QApplication app(argc, argv);
+
+    QGraphicsScene scene;
+    scene.setSceneRect( -100.0, -100.0, 200.0, 200.0 );
+
+    QGraphicsView view( &scene );
+    view.resize(320, 240);
+    view.setWindowTitle("GstXOverlay Qt GraphicsView demo");
+    view.show();
+
+    gst_init (&argc, &argv);
+    SinkPipeline pipeline(&view);
+    pipeline.startPipeline();
+
+    int ret = app.exec();
+
+    view.hide();
+    
+    return ret;
+}
diff --git a/tests/examples/overlay/qtgv-videooverlay.h b/tests/examples/overlay/qtgv-videooverlay.h
new file mode 100644
index 0000000..091fff8
--- /dev/null
+++ b/tests/examples/overlay/qtgv-videooverlay.h
@@ -0,0 +1,45 @@
+/* GStreamer
+ * Copyright (C) <2010> Alexander Bokovoy <ab@samba.org>
+ *
+ * qtgv-xoverlay: demonstrate overlay handling using qt graphics view
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef QTGV_XOVERLAY_H
+#define QTGV_XOVERLAY_H
+
+#include <QGraphicsView>
+#include <gst/gst.h>
+
+
+class SinkPipeline : public QObject
+{
+    Q_OBJECT
+public:
+    SinkPipeline(QGraphicsView *parent = 0);
+    ~SinkPipeline();
+
+    void startPipeline();
+
+private:
+    GstElement *pipeline;
+    GstElement *sink;
+    GstElement *src;
+    WId xwinid;
+};
+
+#endif // QTGV_XOVERLAY_H
diff --git a/tests/examples/playrec/Makefile.am b/tests/examples/playrec/Makefile.am
new file mode 100644
index 0000000..f7548b5
--- /dev/null
+++ b/tests/examples/playrec/Makefile.am
@@ -0,0 +1,4 @@
+noinst_PROGRAMS = playrec
+playrec_SOURCES = playrec.c
+playrec_CFLAGS = $(GST_CFLAGS)
+playrec_LDADD = $(GST_LIBS)
diff --git a/tests/examples/playrec/Makefile.in b/tests/examples/playrec/Makefile.in
new file mode 100644
index 0000000..5a18cab
--- /dev/null
+++ b/tests/examples/playrec/Makefile.in
@@ -0,0 +1,708 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = playrec$(EXEEXT)
+subdir = tests/examples/playrec
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_playrec_OBJECTS = playrec-playrec.$(OBJEXT)
+playrec_OBJECTS = $(am_playrec_OBJECTS)
+am__DEPENDENCIES_1 =
+playrec_DEPENDENCIES = $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+playrec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(playrec_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(playrec_SOURCES)
+DIST_SOURCES = $(playrec_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+playrec_SOURCES = playrec.c
+playrec_CFLAGS = $(GST_CFLAGS)
+playrec_LDADD = $(GST_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/playrec/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/playrec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+playrec$(EXEEXT): $(playrec_OBJECTS) $(playrec_DEPENDENCIES) 
+	@rm -f playrec$(EXEEXT)
+	$(AM_V_CCLD)$(playrec_LINK) $(playrec_OBJECTS) $(playrec_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playrec-playrec.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+playrec-playrec.o: playrec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playrec_CFLAGS) $(CFLAGS) -MT playrec-playrec.o -MD -MP -MF $(DEPDIR)/playrec-playrec.Tpo -c -o playrec-playrec.o `test -f 'playrec.c' || echo '$(srcdir)/'`playrec.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/playrec-playrec.Tpo $(DEPDIR)/playrec-playrec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='playrec.c' object='playrec-playrec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playrec_CFLAGS) $(CFLAGS) -c -o playrec-playrec.o `test -f 'playrec.c' || echo '$(srcdir)/'`playrec.c
+
+playrec-playrec.obj: playrec.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playrec_CFLAGS) $(CFLAGS) -MT playrec-playrec.obj -MD -MP -MF $(DEPDIR)/playrec-playrec.Tpo -c -o playrec-playrec.obj `if test -f 'playrec.c'; then $(CYGPATH_W) 'playrec.c'; else $(CYGPATH_W) '$(srcdir)/playrec.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/playrec-playrec.Tpo $(DEPDIR)/playrec-playrec.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='playrec.c' object='playrec-playrec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playrec_CFLAGS) $(CFLAGS) -c -o playrec-playrec.obj `if test -f 'playrec.c'; then $(CYGPATH_W) 'playrec.c'; else $(CYGPATH_W) '$(srcdir)/playrec.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/playrec/playrec.c b/tests/examples/playrec/playrec.c
new file mode 100644
index 0000000..352f65a
--- /dev/null
+++ b/tests/examples/playrec/playrec.c
@@ -0,0 +1,166 @@
+/* GStreamer
+ *
+ * Copyright (C) 2010 Wim Taymans <wim.taymans@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* An example of synchronized playback and recording.
+ * The trick is to wait for the playback pipeline to preroll before starting
+ * playback and recording.
+ */
+#include <string.h>
+
+#include <gst/gst.h>
+
+/* Define to run the asynchronous version. This requires 0.10.31 of the
+ * GStreamer core. The async version has the benefit that it doesn't block the
+ * main thread but it produces slightly less clear code. */
+#define ASYNC_VERSION
+
+static GMainLoop *loop;
+static GstElement *pipeline = NULL;
+static GstElement *play_bin, *play_source, *play_sink;
+static GstElement *rec_bin, *rec_source, *rec_sink;
+
+static gboolean
+message_handler (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+
+  switch (GST_MESSAGE_TYPE (message)) {
+#ifdef ASYNC_VERSION
+    case GST_MESSAGE_ELEMENT:{
+      const GstStructure *str;
+
+      str = gst_message_get_structure (message);
+
+      if (gst_structure_has_name (str, "GstBinForwarded")) {
+        GstMessage *orig;
+
+        /* unwrap the element message */
+        gst_structure_get (str, "message", GST_TYPE_MESSAGE, &orig, NULL);
+        g_assert (orig);
+
+        switch (GST_MESSAGE_TYPE (orig)) {
+          case GST_MESSAGE_ASYNC_DONE:
+            g_print ("ASYNC done %s\n", GST_MESSAGE_SRC_NAME (orig));
+            if (GST_MESSAGE_SRC (orig) == GST_OBJECT_CAST (play_bin)) {
+              g_print
+                  ("prerolled, starting synchronized playback and recording\n");
+              /* returns ASYNC because the sink linked to the live source is not
+               * prerolled */
+              g_assert (gst_element_set_state (pipeline,
+                      GST_STATE_PLAYING) == GST_STATE_CHANGE_ASYNC);
+            }
+            break;
+          default:
+            break;
+        }
+      }
+      break;
+    }
+#endif
+    case GST_MESSAGE_EOS:
+      g_print ("EOS\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_ERROR:{
+      GError *err = NULL;
+
+      gst_message_parse_error (message, &err, NULL);
+      g_print ("error: %s\n", err->message);
+      g_clear_error (&err);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstBus *bus;
+  gint watch_id;
+
+  gst_init (NULL, NULL);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+#ifdef ASYNC_VERSION
+  /* this enables messages of individual elements inside the pipeline */
+  g_object_set (pipeline, "message-forward", TRUE, NULL);
+#endif
+
+  /* make a bin with the playback elements this is a non-live pipeline */
+  play_bin = gst_bin_new ("play_bin");
+  play_source = gst_element_factory_make ("audiotestsrc", "play_source");
+  play_sink = gst_element_factory_make ("autoaudiosink", "play_sink");
+
+  gst_bin_add (GST_BIN (play_bin), play_source);
+  gst_bin_add (GST_BIN (play_bin), play_sink);
+
+  gst_element_link (play_source, play_sink);
+
+  /* make bin with the record elements, this is a live pipeline */
+  rec_bin = gst_bin_new ("rec_bin");
+  rec_source = gst_element_factory_make ("autoaudiosrc", "rec_source");
+  rec_sink = gst_element_factory_make ("fakesink", "rec_sink");
+
+  gst_bin_add (GST_BIN (rec_bin), rec_source);
+  gst_bin_add (GST_BIN (rec_bin), rec_sink);
+
+  gst_element_link (rec_source, rec_sink);
+
+  gst_bin_add (GST_BIN (pipeline), play_bin);
+  gst_bin_add (GST_BIN (pipeline), rec_bin);
+
+  bus = gst_element_get_bus (pipeline);
+  watch_id = gst_bus_add_watch (bus, message_handler, NULL);
+  gst_object_unref (bus);
+
+  g_print ("going to PAUSED\n");
+  /* returns NO_PREROLL because we have a live element */
+  g_assert (gst_element_set_state (pipeline,
+          GST_STATE_PAUSED) == GST_STATE_CHANGE_NO_PREROLL);
+
+  g_print ("waiting for playback preroll\n");
+#ifndef ASYNC_VERSION
+  /* sync wait for preroll on the playback bin and then go to PLAYING */
+  g_assert (gst_element_get_state (play_bin, NULL, NULL,
+          GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_SUCCESS);
+  g_print ("prerolled, starting synchronized playback and recording\n");
+  /* returns ASYNC because the sink linked to the live source is not
+   * prerolled */
+  g_assert (gst_element_set_state (pipeline,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_ASYNC);
+#endif
+
+  g_main_loop_run (loop);
+
+  g_source_remove (watch_id);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  g_main_loop_unref (loop);
+
+  return 0;
+}
diff --git a/tests/examples/seek/Makefile.am b/tests/examples/seek/Makefile.am
new file mode 100644
index 0000000..ae34780
--- /dev/null
+++ b/tests/examples/seek/Makefile.am
@@ -0,0 +1,17 @@
+if HAVE_GTK_X11
+if HAVE_LINUX_JOYSTICK_HEADERS
+GTK_EXAMPLES=seek scrubby jsseek
+else
+GTK_EXAMPLES=seek scrubby
+endif
+endif
+
+examples = $(GTK_EXAMPLES) stepping stepping2
+
+noinst_PROGRAMS = $(examples)
+
+LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) $(GTK_LIBS) $(LIBM)
+
+AM_CFLAGS = -I$(top_builddir)/gst-libs $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GTK_CFLAGS)
diff --git a/tests/examples/seek/Makefile.in b/tests/examples/seek/Makefile.in
new file mode 100644
index 0000000..0d5924e
--- /dev/null
+++ b/tests/examples/seek/Makefile.in
@@ -0,0 +1,743 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = $(am__EXEEXT_2)
+subdir = tests/examples/seek
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_FALSE@am__EXEEXT_1 = seek$(EXEEXT) \
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_FALSE@	scrubby$(EXEEXT)
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_TRUE@am__EXEEXT_1 = seek$(EXEEXT) \
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_TRUE@	scrubby$(EXEEXT) \
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_TRUE@	jsseek$(EXEEXT)
+am__EXEEXT_2 = $(am__EXEEXT_1) stepping$(EXEEXT) stepping2$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+jsseek_SOURCES = jsseek.c
+jsseek_OBJECTS = jsseek.$(OBJEXT)
+jsseek_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+jsseek_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+scrubby_SOURCES = scrubby.c
+scrubby_OBJECTS = scrubby.$(OBJEXT)
+scrubby_LDADD = $(LDADD)
+scrubby_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+seek_SOURCES = seek.c
+seek_OBJECTS = seek.$(OBJEXT)
+seek_LDADD = $(LDADD)
+seek_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+stepping_SOURCES = stepping.c
+stepping_OBJECTS = stepping.$(OBJEXT)
+stepping_LDADD = $(LDADD)
+stepping_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+stepping2_SOURCES = stepping2.c
+stepping2_OBJECTS = stepping2.$(OBJEXT)
+stepping2_LDADD = $(LDADD)
+stepping2_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = jsseek.c scrubby.c seek.c stepping.c stepping2.c
+DIST_SOURCES = jsseek.c scrubby.c seek.c stepping.c stepping2.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_FALSE@GTK_EXAMPLES = seek scrubby
+@HAVE_GTK_X11_TRUE@@HAVE_LINUX_JOYSTICK_HEADERS_TRUE@GTK_EXAMPLES = seek scrubby jsseek
+examples = $(GTK_EXAMPLES) stepping stepping2
+LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-@GST_MAJORMINOR@.la \
+	$(GST_LIBS) $(GTK_LIBS) $(LIBM)
+
+AM_CFLAGS = -I$(top_builddir)/gst-libs $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GTK_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/seek/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/seek/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+jsseek$(EXEEXT): $(jsseek_OBJECTS) $(jsseek_DEPENDENCIES) 
+	@rm -f jsseek$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(jsseek_OBJECTS) $(jsseek_LDADD) $(LIBS)
+scrubby$(EXEEXT): $(scrubby_OBJECTS) $(scrubby_DEPENDENCIES) 
+	@rm -f scrubby$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(scrubby_OBJECTS) $(scrubby_LDADD) $(LIBS)
+seek$(EXEEXT): $(seek_OBJECTS) $(seek_DEPENDENCIES) 
+	@rm -f seek$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(seek_OBJECTS) $(seek_LDADD) $(LIBS)
+stepping$(EXEEXT): $(stepping_OBJECTS) $(stepping_DEPENDENCIES) 
+	@rm -f stepping$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(stepping_OBJECTS) $(stepping_LDADD) $(LIBS)
+stepping2$(EXEEXT): $(stepping2_OBJECTS) $(stepping2_DEPENDENCIES) 
+	@rm -f stepping2$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(stepping2_OBJECTS) $(stepping2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsseek.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrubby.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seek.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stepping.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stepping2.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c
new file mode 100644
index 0000000..3329d56
--- /dev/null
+++ b/tests/examples/seek/jsseek.c
@@ -0,0 +1,3060 @@
+/* GStreamer
+ *
+ * seek.c: seeking sample application
+ *
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *               2006 Stefan Kost <ensonic@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <math.h>
+
+#include <gtk/gtk.h>
+#include <gst/gst.h>
+#include <string.h>
+
+#include <linux/input.h>
+#include <linux/joystick.h>
+
+#ifdef HAVE_X
+#include <gdk/gdkx.h>
+#endif
+#include <gst/interfaces/videooverlay.h>
+
+GST_DEBUG_CATEGORY_STATIC (seek_debug);
+#define GST_CAT_DEFAULT (seek_debug)
+
+#if (!GTK_CHECK_VERSION(2, 23, 0) || GTK_CHECK_VERSION(2, 90, 0)) && !GTK_CHECK_VERSION(2, 91, 1)
+#define gtk_combo_box_text_new gtk_combo_box_new_text
+#define gtk_combo_box_text_append_text gtk_combo_box_append_text
+#define gtk_combo_box_text_remove gtk_combo_box_remove_text
+#define GTK_COMBO_BOX_TEXT GTK_COMBO_BOX
+#endif
+
+#if !GTK_CHECK_VERSION (2, 17, 7)
+static void
+gtk_widget_get_allocation (GtkWidget * w, GtkAllocation * a)
+{
+  *a = w->allocation;
+}
+#endif
+
+/* configuration */
+#define SOURCE "filesrc"
+
+#define ASINK "alsasink"
+//#define ASINK "osssink"
+
+#define VSINK "xvimagesink"
+//#define VSINK "sdlvideosink"
+//#define VSINK "ximagesink"
+//#define VSINK "aasink"
+//#define VSINK "cacasink"
+
+#define FILL_INTERVAL 100
+//#define UPDATE_INTERVAL 500
+//#define UPDATE_INTERVAL 100
+//#define UPDATE_INTERVAL 10
+#define UPDATE_INTERVAL 40
+
+/* number of milliseconds to play for after a seek */
+#define SCRUB_TIME 100
+
+/* timeout for gst_element_get_state() after a seek */
+#define SEEK_TIMEOUT 40 * GST_MSECOND
+
+#define DEFAULT_VIDEO_HEIGHT 300
+
+/* the state to go to when stop is pressed */
+#define STOP_STATE      GST_STATE_READY
+
+
+static GList *seekable_pads = NULL;
+static GList *rate_pads = NULL;
+static GList *seekable_elements = NULL;
+
+static gboolean accurate_seek = FALSE;
+static gboolean keyframe_seek = FALSE;
+static gboolean loop_seek = FALSE;
+static gboolean flush_seek = TRUE;
+static gboolean scrub = TRUE;
+static gboolean play_scrub = FALSE;
+static gboolean skip_seek = FALSE;
+static gdouble rate = 1.0;
+
+static GstElement *pipeline;
+static gint pipeline_type;
+static const gchar *pipeline_spec;
+static gint64 position = -1;
+static gint64 duration = -1;
+static GtkAdjustment *adjustment;
+static GtkWidget *hscale, *statusbar;
+static guint status_id = 0;
+static gboolean stats = FALSE;
+static gboolean elem_seek = FALSE;
+static gboolean verbose = FALSE;
+static gchar *js_device = NULL;
+
+static gboolean is_live = FALSE;
+static gboolean buffering = FALSE;
+static GstBufferingMode mode;
+static gint64 buffering_left;
+static GstState state = GST_STATE_NULL;
+static guint update_id = 0;
+static guint seek_timeout_id = 0;
+static gulong changed_id;
+static guint fill_id = 0;
+
+static gint n_video = 0, n_audio = 0, n_text = 0;
+static gboolean need_streams = TRUE;
+static GtkWidget *video_combo, *audio_combo, *text_combo, *vis_combo;
+static GtkWidget *vis_checkbox, *video_checkbox, *audio_checkbox;
+static GtkWidget *text_checkbox, *mute_checkbox, *volume_spinbutton;
+static GtkWidget *skip_checkbox, *video_window, *download_checkbox;
+static GtkWidget *buffer_checkbox, *rate_spinbutton;
+
+static GStaticMutex state_mutex = G_STATIC_MUTEX_INIT;
+
+static GtkWidget *format_combo, *step_amount_spinbutton, *step_rate_spinbutton;
+static GtkWidget *shuttle_checkbox, *step_button;
+static GtkWidget *shuttle_hscale;
+static GtkAdjustment *shuttle_adjustment;
+
+static GList *paths = NULL, *l = NULL;
+
+gint js_fd;
+
+/* we keep an array of the visualisation entries so that we can easily switch
+ * with the combo box index. */
+typedef struct
+{
+  GstElementFactory *factory;
+} VisEntry;
+
+static GArray *vis_entries;
+
+static void clear_streams (GstElement * pipeline);
+static void volume_notify_cb (GstElement * pipeline, GParamSpec * arg,
+    gpointer user_dat);
+
+/* pipeline construction */
+
+typedef struct
+{
+  const gchar *padname;
+  GstPad *target;
+  GstElement *bin;
+}
+dyn_link;
+
+static GstElement *
+gst_element_factory_make_or_warn (const gchar * type, const gchar * name)
+{
+  GstElement *element = gst_element_factory_make (type, name);
+
+  if (!element) {
+    g_warning ("Failed to create element %s of type %s", name, type);
+  }
+
+  return element;
+}
+
+static void
+dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data)
+{
+  gchar *padname;
+  dyn_link *connect = (dyn_link *) data;
+
+  padname = gst_pad_get_name (newpad);
+
+  if (connect->padname == NULL || !strcmp (padname, connect->padname)) {
+    if (connect->bin)
+      gst_bin_add (GST_BIN (pipeline), connect->bin);
+    gst_pad_link (newpad, connect->target);
+
+    //seekable_pads = g_list_prepend (seekable_pads, newpad);
+    rate_pads = g_list_prepend (rate_pads, newpad);
+  }
+  g_free (padname);
+}
+
+static void
+setup_dynamic_link (GstElement * element, const gchar * padname,
+    GstPad * target, GstElement * bin)
+{
+  dyn_link *connect;
+
+  connect = g_new0 (dyn_link, 1);
+  connect->padname = g_strdup (padname);
+  connect->target = target;
+  connect->bin = bin;
+
+  g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
+      connect);
+}
+
+static GstElement *
+make_mod_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *decoder, *audiosink;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  decoder = gst_element_factory_make_or_warn ("modplug", "decoder");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+  //g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, decoder);
+  gst_element_link (decoder, audiosink);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_dv_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *demux, *decoder, *audiosink, *videosink;
+  GstElement *a_queue, *v_queue;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  demux = gst_element_factory_make_or_warn ("dvdemux", "demuxer");
+  v_queue = gst_element_factory_make_or_warn ("queue", "v_queue");
+  decoder = gst_element_factory_make_or_warn ("ffdec_dvvideo", "decoder");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  audiosink = gst_element_factory_make_or_warn ("alsasink", "a_sink");
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_bin_add (GST_BIN (pipeline), a_queue);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+  gst_bin_add (GST_BIN (pipeline), v_queue);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), videosink);
+
+  gst_element_link (src, demux);
+  gst_element_link (a_queue, audiosink);
+  gst_element_link (v_queue, decoder);
+  gst_element_link (decoder, videosink);
+
+  setup_dynamic_link (demux, "video", gst_element_get_static_pad (v_queue,
+          "sink"), NULL);
+  setup_dynamic_link (demux, "audio", gst_element_get_static_pad (a_queue,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+
+  return pipeline;
+}
+
+static GstElement *
+make_wav_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *decoder, *audiosink;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  decoder = gst_element_factory_make_or_warn ("wavparse", "decoder");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, decoder);
+
+  setup_dynamic_link (decoder, "src", gst_element_get_static_pad (audiosink,
+          "sink"), NULL);
+
+  seekable_elements = g_list_prepend (seekable_elements, audiosink);
+
+  /* force element seeking on this pipeline */
+  elem_seek = TRUE;
+
+  return pipeline;
+}
+
+static GstElement *
+make_flac_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *decoder, *audiosink;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  decoder = gst_element_factory_make_or_warn ("flacdec", "decoder");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+  g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, decoder);
+  gst_element_link (decoder, audiosink);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_sid_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *decoder, *audiosink;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  decoder = gst_element_factory_make_or_warn ("siddec", "decoder");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+  //g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, decoder);
+  gst_element_link (decoder, audiosink);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_parse_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *parser, *fakesink;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  parser = gst_element_factory_make_or_warn ("mpegparse", "parse");
+  fakesink = gst_element_factory_make_or_warn ("fakesink", "sink");
+  g_object_set (G_OBJECT (fakesink), "silent", TRUE, NULL);
+  g_object_set (G_OBJECT (fakesink), "sync", TRUE, NULL);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), parser);
+  gst_bin_add (GST_BIN (pipeline), fakesink);
+
+  gst_element_link (src, parser);
+  gst_element_link (parser, fakesink);
+
+  seekable = gst_element_get_static_pad (parser, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (parser, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_vorbis_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin;
+  GstElement *src, *demux, *decoder, *convert, *audiosink;
+  GstPad *pad, *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  demux = gst_element_factory_make_or_warn ("oggdemux", "demux");
+  decoder = gst_element_factory_make_or_warn ("vorbisdec", "decoder");
+  convert = gst_element_factory_make_or_warn ("audioconvert", "convert");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+  g_object_set (G_OBJECT (audiosink), "sync", TRUE, NULL);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_bin_add (GST_BIN (audio_bin), decoder);
+  gst_bin_add (GST_BIN (audio_bin), convert);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+  gst_bin_add (GST_BIN (pipeline), audio_bin);
+
+  gst_element_link (src, demux);
+  gst_element_link (decoder, convert);
+  gst_element_link (convert, audiosink);
+
+  pad = gst_element_get_static_pad (decoder, "sink");
+  gst_element_add_pad (audio_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (audio_bin,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_theora_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *video_bin;
+  GstElement *src, *demux, *decoder, *convert, *videosink;
+  GstPad *pad, *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  demux = gst_element_factory_make_or_warn ("oggdemux", "demux");
+  decoder = gst_element_factory_make_or_warn ("theoradec", "decoder");
+  convert = gst_element_factory_make_or_warn ("videoconvert", "convert");
+  videosink = gst_element_factory_make_or_warn (VSINK, "sink");
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_bin_add (GST_BIN (video_bin), decoder);
+  gst_bin_add (GST_BIN (video_bin), convert);
+  gst_bin_add (GST_BIN (video_bin), videosink);
+  gst_bin_add (GST_BIN (pipeline), video_bin);
+
+  gst_element_link (src, demux);
+  gst_element_link (decoder, convert);
+  gst_element_link (convert, videosink);
+
+  pad = gst_element_get_static_pad (decoder, "sink");
+  gst_element_add_pad (video_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (video_bin,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_vorbis_theora_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin, *video_bin;
+  GstElement *src, *demux, *a_decoder, *a_convert, *v_decoder, *v_convert;
+  GstElement *audiosink, *videosink;
+  GstElement *a_queue, *v_queue, *v_scale;
+  GstPad *seekable;
+  GstPad *pad;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  demux = gst_element_factory_make_or_warn ("oggdemux", "demux");
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_element_link (src, demux);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  a_decoder = gst_element_factory_make_or_warn ("vorbisdec", "a_dec");
+  a_convert = gst_element_factory_make_or_warn ("audioconvert", "a_convert");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "a_sink");
+
+  gst_bin_add (GST_BIN (pipeline), audio_bin);
+
+  gst_bin_add (GST_BIN (audio_bin), a_queue);
+  gst_bin_add (GST_BIN (audio_bin), a_decoder);
+  gst_bin_add (GST_BIN (audio_bin), a_convert);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+
+  gst_element_link (a_queue, a_decoder);
+  gst_element_link (a_decoder, a_convert);
+  gst_element_link (a_convert, audiosink);
+
+  pad = gst_element_get_static_pad (a_queue, "sink");
+  gst_element_add_pad (audio_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (audio_bin,
+          "sink"), NULL);
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+  v_queue = gst_element_factory_make_or_warn ("queue", "v_queue");
+  v_decoder = gst_element_factory_make_or_warn ("theoradec", "v_dec");
+  v_convert = gst_element_factory_make_or_warn ("videoconvert", "v_convert");
+  v_scale = gst_element_factory_make_or_warn ("videoscale", "v_scale");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+
+  gst_bin_add (GST_BIN (pipeline), video_bin);
+
+  gst_bin_add (GST_BIN (video_bin), v_queue);
+  gst_bin_add (GST_BIN (video_bin), v_decoder);
+  gst_bin_add (GST_BIN (video_bin), v_convert);
+  gst_bin_add (GST_BIN (video_bin), v_scale);
+  gst_bin_add (GST_BIN (video_bin), videosink);
+
+  gst_element_link_many (v_queue, v_decoder, v_convert, v_scale, videosink,
+      NULL);
+
+  pad = gst_element_get_static_pad (v_queue, "sink");
+  gst_element_add_pad (video_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (video_bin,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (a_decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (a_decoder,
+          "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_avi_msmpeg4v3_mp3_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin, *video_bin;
+  GstElement *src, *demux, *a_decoder, *a_convert, *v_decoder, *v_convert;
+  GstElement *audiosink, *videosink;
+  GstElement *a_queue, *v_queue;
+  GstPad *seekable, *pad;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  demux = gst_element_factory_make_or_warn ("avidemux", "demux");
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_element_link (src, demux);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec");
+  a_convert = gst_element_factory_make_or_warn ("audioconvert", "a_convert");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "a_sink");
+
+  gst_bin_add (GST_BIN (audio_bin), a_queue);
+  gst_bin_add (GST_BIN (audio_bin), a_decoder);
+  gst_bin_add (GST_BIN (audio_bin), a_convert);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+
+  gst_element_link (a_queue, a_decoder);
+  gst_element_link (a_decoder, a_convert);
+  gst_element_link (a_convert, audiosink);
+
+  gst_bin_add (GST_BIN (pipeline), audio_bin);
+
+  pad = gst_element_get_static_pad (a_queue, "sink");
+  gst_element_add_pad (audio_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (audio_bin,
+          "sink"), NULL);
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+  v_queue = gst_element_factory_make_or_warn ("queue", "v_queue");
+  v_decoder = gst_element_factory_make_or_warn ("ffdec_msmpeg4", "v_dec");
+  v_convert = gst_element_factory_make_or_warn ("videoconvert", "v_convert");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+
+  gst_bin_add (GST_BIN (video_bin), v_queue);
+  gst_bin_add (GST_BIN (video_bin), v_decoder);
+  gst_bin_add (GST_BIN (video_bin), v_convert);
+  gst_bin_add (GST_BIN (video_bin), videosink);
+
+  gst_element_link_many (v_queue, v_decoder, v_convert, videosink, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), video_bin);
+
+  pad = gst_element_get_static_pad (v_queue, "sink");
+  gst_element_add_pad (video_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, NULL, gst_element_get_static_pad (video_bin,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (a_decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (a_decoder,
+          "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_mp3_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *parser, *decoder, *audiosink, *queue;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  parser = gst_element_factory_make_or_warn ("mp3parse", "parse");
+  decoder = gst_element_factory_make_or_warn ("mad", "dec");
+  queue = gst_element_factory_make_or_warn ("queue", "queue");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+
+  seekable_elements = g_list_prepend (seekable_elements, audiosink);
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+  //g_object_set (G_OBJECT (audiosink), "fragment", 0x00180008, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), parser);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), queue);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, parser);
+  gst_element_link (parser, decoder);
+  gst_element_link (decoder, queue);
+  gst_element_link (queue, audiosink);
+
+  seekable = gst_element_get_static_pad (queue, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (decoder, "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_avi_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin, *video_bin;
+  GstElement *src, *demux, *a_decoder, *v_decoder, *audiosink, *videosink;
+  GstElement *a_queue = NULL, *v_queue = NULL;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  demux = gst_element_factory_make_or_warn ("avidemux", "demux");
+  seekable_elements = g_list_prepend (seekable_elements, demux);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_element_link (src, demux);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+  a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "a_sink");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  gst_element_link (a_decoder, a_queue);
+  gst_element_link (a_queue, audiosink);
+  gst_bin_add (GST_BIN (audio_bin), a_decoder);
+  gst_bin_add (GST_BIN (audio_bin), a_queue);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+  gst_element_set_state (audio_bin, GST_STATE_PAUSED);
+
+  setup_dynamic_link (demux, "audio_00", gst_element_get_static_pad (a_decoder,
+          "sink"), audio_bin);
+
+  seekable = gst_element_get_static_pad (a_queue, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (a_decoder,
+          "sink"));
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+  v_decoder = gst_element_factory_make_or_warn ("ffmpegdecall", "v_dec");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+  v_queue = gst_element_factory_make_or_warn ("queue", "v_queue");
+  gst_element_link (v_decoder, v_queue);
+  gst_element_link (v_queue, videosink);
+  gst_bin_add (GST_BIN (video_bin), v_decoder);
+  gst_bin_add (GST_BIN (video_bin), v_queue);
+  gst_bin_add (GST_BIN (video_bin), videosink);
+
+  gst_element_set_state (video_bin, GST_STATE_PAUSED);
+
+  setup_dynamic_link (demux, "video_00", gst_element_get_static_pad (v_decoder,
+          "sink"), video_bin);
+
+  seekable = gst_element_get_static_pad (v_queue, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (v_decoder,
+          "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_mpeg_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin, *video_bin;
+  GstElement *src, *demux, *a_decoder, *v_decoder, *v_filter;
+  GstElement *audiosink, *videosink;
+  GstElement *a_queue, *v_queue;
+  GstPad *seekable;
+  GstPad *pad;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  //demux = gst_element_factory_make_or_warn ("mpegdemux", "demux");
+  demux = gst_element_factory_make_or_warn ("flupsdemux", "demux");
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_element_link (src, demux);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+  a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "a_sink");
+  gst_bin_add (GST_BIN (audio_bin), a_decoder);
+  gst_bin_add (GST_BIN (audio_bin), a_queue);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+
+  gst_element_link (a_decoder, a_queue);
+  gst_element_link (a_queue, audiosink);
+
+  gst_bin_add (GST_BIN (pipeline), audio_bin);
+
+  pad = gst_element_get_static_pad (a_decoder, "sink");
+  gst_element_add_pad (audio_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, "audio_c0", gst_element_get_static_pad (audio_bin,
+          "sink"), NULL);
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+  v_decoder = gst_element_factory_make_or_warn ("mpeg2dec", "v_dec");
+  v_queue = gst_element_factory_make_or_warn ("queue", "v_queue");
+  v_filter = gst_element_factory_make_or_warn ("videoconvert", "v_filter");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+
+  gst_bin_add (GST_BIN (video_bin), v_decoder);
+  gst_bin_add (GST_BIN (video_bin), v_queue);
+  gst_bin_add (GST_BIN (video_bin), v_filter);
+  gst_bin_add (GST_BIN (video_bin), videosink);
+
+  gst_element_link (v_decoder, v_queue);
+  gst_element_link (v_queue, v_filter);
+  gst_element_link (v_filter, videosink);
+
+  gst_bin_add (GST_BIN (pipeline), video_bin);
+
+  pad = gst_element_get_static_pad (v_decoder, "sink");
+  gst_element_add_pad (video_bin, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  setup_dynamic_link (demux, "video_e0", gst_element_get_static_pad (video_bin,
+          "sink"), NULL);
+
+  seekable = gst_element_get_static_pad (v_filter, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (v_decoder,
+          "sink"));
+
+  return pipeline;
+}
+
+static GstElement *
+make_mpegnt_pipeline (const gchar * location)
+{
+  GstElement *pipeline, *audio_bin, *video_bin;
+  GstElement *src, *demux, *a_decoder, *v_decoder, *v_filter;
+  GstElement *audiosink, *videosink;
+  GstElement *a_queue;
+  GstPad *seekable;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  demux = gst_element_factory_make_or_warn ("mpegdemux", "demux");
+  //g_object_set (G_OBJECT (demux), "sync", TRUE, NULL);
+
+  seekable_elements = g_list_prepend (seekable_elements, demux);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), demux);
+  gst_element_link (src, demux);
+
+  audio_bin = gst_bin_new ("a_decoder_bin");
+  a_decoder = gst_element_factory_make_or_warn ("mad", "a_dec");
+  a_queue = gst_element_factory_make_or_warn ("queue", "a_queue");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "a_sink");
+  //g_object_set (G_OBJECT (audiosink), "fragment", 0x00180008, NULL);
+  g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
+  gst_element_link (a_decoder, a_queue);
+  gst_element_link (a_queue, audiosink);
+  gst_bin_add (GST_BIN (audio_bin), a_decoder);
+  gst_bin_add (GST_BIN (audio_bin), a_queue);
+  gst_bin_add (GST_BIN (audio_bin), audiosink);
+
+  setup_dynamic_link (demux, "audio_00", gst_element_get_static_pad (a_decoder,
+          "sink"), audio_bin);
+
+  seekable = gst_element_get_static_pad (a_queue, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (a_decoder,
+          "sink"));
+
+  video_bin = gst_bin_new ("v_decoder_bin");
+  v_decoder = gst_element_factory_make_or_warn ("mpeg2dec", "v_dec");
+  v_filter = gst_element_factory_make_or_warn ("videoconvert", "v_filter");
+  videosink = gst_element_factory_make_or_warn (VSINK, "v_sink");
+  gst_element_link_many (v_decoder, v_filter, videosink, NULL);
+
+  gst_bin_add_many (GST_BIN (video_bin), v_decoder, v_filter, videosink, NULL);
+
+  setup_dynamic_link (demux, "video_00", gst_element_get_static_pad (v_decoder,
+          "sink"), video_bin);
+
+  seekable = gst_element_get_static_pad (v_decoder, "src");
+  seekable_pads = g_list_prepend (seekable_pads, seekable);
+  rate_pads = g_list_prepend (rate_pads, seekable);
+  rate_pads =
+      g_list_prepend (rate_pads, gst_element_get_static_pad (v_decoder,
+          "sink"));
+
+  return pipeline;
+}
+
+static void
+playerbin_set_uri (GstElement * player, const gchar * location)
+{
+  gchar *uri;
+
+  /* Add "file://" prefix for convenience */
+  if (g_str_has_prefix (location, "/")) {
+    uri = g_strconcat ("file://", location, NULL);
+    g_object_set (G_OBJECT (player), "uri", uri, NULL);
+    g_free (uri);
+  } else {
+    g_object_set (G_OBJECT (player), "uri", location, NULL);
+  }
+}
+
+static GstElement *
+construct_playerbin (const gchar * name, const gchar * location)
+{
+  GstElement *player;
+
+  player = gst_element_factory_make (name, "player");
+  g_assert (player);
+
+  playerbin_set_uri (player, location);
+
+  seekable_elements = g_list_prepend (seekable_elements, player);
+
+  /* force element seeking on this pipeline */
+  elem_seek = TRUE;
+
+  return player;
+}
+
+static GstElement *
+make_playerbin_pipeline (const gchar * location)
+{
+  return construct_playerbin ("playbin", location);
+}
+
+static GstElement *
+make_playerbin2_pipeline (const gchar * location)
+{
+  GstElement *pipeline = construct_playerbin ("playbin2", location);
+
+  /* FIXME: this is not triggered, playbin2 is not forwarding it from the sink */
+  g_signal_connect (pipeline, "notify::volume", G_CALLBACK (volume_notify_cb),
+      NULL);
+  return pipeline;
+}
+
+#ifndef GST_DISABLE_PARSE
+static GstElement *
+make_parselaunch_pipeline (const gchar * description)
+{
+  GstElement *pipeline;
+  GError *error = NULL;
+
+  pipeline = gst_parse_launch (description, &error);
+
+  seekable_elements = g_list_prepend (seekable_elements, pipeline);
+
+  elem_seek = TRUE;
+
+  return pipeline;
+}
+#endif
+
+typedef struct
+{
+  const gchar *name;
+  GstElement *(*func) (const gchar * location);
+}
+Pipeline;
+
+static Pipeline pipelines[] = {
+  {"mp3", make_mp3_pipeline},
+  {"avi", make_avi_pipeline},
+  {"mpeg1", make_mpeg_pipeline},
+  {"mpegparse", make_parse_pipeline},
+  {"vorbis", make_vorbis_pipeline},
+  {"theora", make_theora_pipeline},
+  {"ogg/v/t", make_vorbis_theora_pipeline},
+  {"avi/msmpeg4v3/mp3", make_avi_msmpeg4v3_mp3_pipeline},
+  {"sid", make_sid_pipeline},
+  {"flac", make_flac_pipeline},
+  {"wav", make_wav_pipeline},
+  {"mod", make_mod_pipeline},
+  {"dv", make_dv_pipeline},
+  {"mpeg1nothreads", make_mpegnt_pipeline},
+  {"playerbin", make_playerbin_pipeline},
+#ifndef GST_DISABLE_PARSE
+  {"parse-launch", make_parselaunch_pipeline},
+#endif
+  {"playerbin2", make_playerbin2_pipeline},
+  {NULL, NULL},
+};
+
+#define NUM_TYPES       ((sizeof (pipelines) / sizeof (Pipeline)) - 1)
+
+/* ui callbacks and helpers */
+
+static gchar *
+format_value (GtkScale * scale, gdouble value)
+{
+  gint64 real;
+  gint64 seconds;
+  gint64 subseconds;
+
+  real = value * duration / 100;
+  seconds = (gint64) real / GST_SECOND;
+  subseconds = (gint64) real / (GST_SECOND / 100);
+
+  return g_strdup_printf ("%02" G_GINT64_FORMAT ":%02" G_GINT64_FORMAT ":%02"
+      G_GINT64_FORMAT, seconds / 60, seconds % 60, subseconds % 100);
+}
+
+
+static gchar *
+shuttle_format_value (GtkScale * scale, gdouble value)
+{
+  return g_strdup_printf ("%0.*g", gtk_scale_get_digits (scale), value);
+}
+
+typedef struct
+{
+  const gchar *name;
+  const GstFormat format;
+}
+seek_format;
+
+static seek_format seek_formats[] = {
+  {"tim", GST_FORMAT_TIME},
+  {"byt", GST_FORMAT_BYTES},
+  {"buf", GST_FORMAT_BUFFERS},
+  {"def", GST_FORMAT_DEFAULT},
+  {NULL, 0},
+};
+
+G_GNUC_UNUSED static void
+query_rates (void)
+{
+  GList *walk = rate_pads;
+
+  while (walk) {
+    GstPad *pad = GST_PAD (walk->data);
+    gint i = 0;
+
+    g_print ("rate/sec  %8.8s: ", GST_PAD_NAME (pad));
+    while (seek_formats[i].name) {
+      gint64 value;
+      GstFormat format;
+
+      format = seek_formats[i].format;
+
+      if (gst_pad_query_convert (pad, GST_FORMAT_TIME, GST_SECOND, format,
+              &value)) {
+        g_print ("%s %13" G_GINT64_FORMAT " | ", seek_formats[i].name, value);
+      } else {
+        g_print ("%s %13.13s | ", seek_formats[i].name, "*NA*");
+      }
+
+      i++;
+    }
+    g_print (" %s:%s\n", GST_DEBUG_PAD_NAME (pad));
+
+    walk = g_list_next (walk);
+  }
+}
+
+G_GNUC_UNUSED static void
+query_positions_elems (void)
+{
+  GList *walk = seekable_elements;
+
+  while (walk) {
+    GstElement *element = GST_ELEMENT (walk->data);
+    gint i = 0;
+
+    g_print ("positions %8.8s: ", GST_ELEMENT_NAME (element));
+    while (seek_formats[i].name) {
+      gint64 position, total;
+      GstFormat format;
+
+      format = seek_formats[i].format;
+
+      if (gst_element_query_position (element, format, &position) &&
+          gst_element_query_duration (element, format, &total)) {
+        g_print ("%s %13" G_GINT64_FORMAT " / %13" G_GINT64_FORMAT " | ",
+            seek_formats[i].name, position, total);
+      } else {
+        g_print ("%s %13.13s / %13.13s | ", seek_formats[i].name, "*NA*",
+            "*NA*");
+      }
+      i++;
+    }
+    g_print (" %s\n", GST_ELEMENT_NAME (element));
+
+    walk = g_list_next (walk);
+  }
+}
+
+G_GNUC_UNUSED static void
+query_positions_pads (void)
+{
+  GList *walk = seekable_pads;
+
+  while (walk) {
+    GstPad *pad = GST_PAD (walk->data);
+    gint i = 0;
+
+    g_print ("positions %8.8s: ", GST_PAD_NAME (pad));
+    while (seek_formats[i].name) {
+      GstFormat format;
+      gint64 position, total;
+
+      format = seek_formats[i].format;
+
+      if (gst_pad_query_position (pad, format, &position) &&
+          gst_pad_query_duration (pad, format, &total)) {
+        g_print ("%s %13" G_GINT64_FORMAT " / %13" G_GINT64_FORMAT " | ",
+            seek_formats[i].name, position, total);
+      } else {
+        g_print ("%s %13.13s / %13.13s | ", seek_formats[i].name, "*NA*",
+            "*NA*");
+      }
+
+      i++;
+    }
+    g_print (" %s:%s\n", GST_DEBUG_PAD_NAME (pad));
+
+    walk = g_list_next (walk);
+  }
+}
+
+static gboolean start_seek (GtkWidget * widget, GdkEventButton * event,
+    gpointer user_data);
+static gboolean stop_seek (GtkWidget * widget, GdkEventButton * event,
+    gpointer user_data);
+static void seek_cb (GtkWidget * widget);
+
+static void
+set_scale (gdouble value)
+{
+  g_signal_handlers_block_by_func (hscale, (void *) start_seek,
+      (void *) pipeline);
+  g_signal_handlers_block_by_func (hscale, (void *) stop_seek,
+      (void *) pipeline);
+  g_signal_handlers_block_by_func (hscale, (void *) seek_cb, (void *) pipeline);
+  gtk_adjustment_set_value (adjustment, value);
+  g_signal_handlers_unblock_by_func (hscale, (void *) start_seek,
+      (void *) pipeline);
+  g_signal_handlers_unblock_by_func (hscale, (void *) stop_seek,
+      (void *) pipeline);
+  g_signal_handlers_unblock_by_func (hscale, (void *) seek_cb,
+      (void *) pipeline);
+  gtk_widget_queue_draw (hscale);
+}
+
+static gboolean
+update_fill (gpointer data)
+{
+  if (elem_seek) {
+    if (seekable_elements) {
+      GstElement *element = GST_ELEMENT (seekable_elements->data);
+      GstQuery *query;
+
+      query = gst_query_new_buffering (GST_FORMAT_PERCENT);
+      if (gst_element_query (element, query)) {
+        gint64 start, stop, buffering_total;
+        GstFormat format;
+        gdouble fill;
+        gboolean busy;
+        gint percent;
+        GstBufferingMode mode;
+        gint avg_in, avg_out;
+        gint64 buffering_left;
+
+        gst_query_parse_buffering_percent (query, &busy, &percent);
+        gst_query_parse_buffering_range (query, &format, &start, &stop,
+            &buffering_total);
+        gst_query_parse_buffering_stats (query, &mode, &avg_in, &avg_out,
+            &buffering_left);
+
+        /* note that we could start the playback when buffering_left < remaining
+         * playback time */
+        GST_DEBUG ("buffering total %" G_GINT64_FORMAT " ms, left %"
+            G_GINT64_FORMAT " ms", buffering_total, buffering_left);
+        GST_DEBUG ("start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT,
+            start, stop);
+
+        if (stop != -1)
+          fill = 100.0 * stop / GST_FORMAT_PERCENT_MAX;
+        else
+          fill = 100.0;
+
+        gtk_range_set_fill_level (GTK_RANGE (hscale), fill);
+      }
+      gst_query_unref (query);
+    }
+  }
+  return TRUE;
+}
+
+static gboolean
+update_scale (gpointer data)
+{
+  if (elem_seek) {
+    if (seekable_elements) {
+      GstElement *element = GST_ELEMENT (seekable_elements->data);
+
+      gst_element_query_position (element, GST_FORMAT_TIME, &position);
+      gst_element_query_duration (element, GST_FORMAT_TIME, &duration);
+    }
+  } else {
+    if (seekable_pads) {
+      GstPad *pad = GST_PAD (seekable_pads->data);
+
+      gst_pad_query_position (pad, GST_FORMAT_TIME, &position);
+      gst_pad_query_duration (pad, GST_FORMAT_TIME, &duration);
+    }
+  }
+
+  if (stats) {
+    if (elem_seek) {
+      query_positions_elems ();
+    } else {
+      query_positions_pads ();
+    }
+    query_rates ();
+  }
+
+  if (position >= duration)
+    duration = position;
+
+  if (duration > 0) {
+    set_scale (position * 100.0 / duration);
+  }
+
+  /* FIXME: see make_playerbin2_pipeline() and volume_notify_cb() */
+  if (pipeline_type == 16) {
+    g_object_notify (G_OBJECT (pipeline), "volume");
+  }
+
+  return TRUE;
+}
+
+static void do_seek (GtkWidget * widget);
+static void connect_bus_signals (GstElement * pipeline);
+static void set_update_scale (gboolean active);
+static void set_update_fill (gboolean active);
+
+static gboolean
+end_scrub (GtkWidget * widget)
+{
+  GST_DEBUG ("end scrub, PAUSE");
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  seek_timeout_id = 0;
+
+  return FALSE;
+}
+
+static gboolean
+send_event (GstEvent * event)
+{
+  gboolean res = FALSE;
+
+  if (!elem_seek) {
+    GList *walk = seekable_pads;
+
+    while (walk) {
+      GstPad *seekable = GST_PAD (walk->data);
+
+      GST_DEBUG ("send event on pad %s:%s", GST_DEBUG_PAD_NAME (seekable));
+
+      gst_event_ref (event);
+      res = gst_pad_send_event (seekable, event);
+
+      walk = g_list_next (walk);
+    }
+  } else {
+    GList *walk = seekable_elements;
+
+    while (walk) {
+      GstElement *seekable = GST_ELEMENT (walk->data);
+
+      GST_DEBUG ("send event on element %s", GST_ELEMENT_NAME (seekable));
+
+      gst_event_ref (event);
+      res = gst_element_send_event (seekable, event);
+
+      walk = g_list_next (walk);
+    }
+  }
+  gst_event_unref (event);
+  return res;
+}
+
+static void
+do_seek (GtkWidget * widget)
+{
+  gint64 real;
+  gboolean res = FALSE;
+  GstEvent *s_event;
+  GstSeekFlags flags;
+
+  real = gtk_range_get_value (GTK_RANGE (widget)) * duration / 100;
+
+  flags = 0;
+  if (flush_seek)
+    flags |= GST_SEEK_FLAG_FLUSH;
+  if (accurate_seek)
+    flags |= GST_SEEK_FLAG_ACCURATE;
+  if (keyframe_seek)
+    flags |= GST_SEEK_FLAG_KEY_UNIT;
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  if (rate >= 0) {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_SET,
+        GST_CLOCK_TIME_NONE);
+    GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
+        rate, GST_TIME_ARGS (real), GST_TIME_ARGS (duration));
+  } else {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, real);
+    GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
+        rate, GST_TIME_ARGS (0), GST_TIME_ARGS (real));
+  }
+
+  res = send_event (s_event);
+
+  if (res) {
+    if (flush_seek) {
+      gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, SEEK_TIMEOUT);
+    } else {
+      set_update_scale (TRUE);
+    }
+  } else {
+    g_print ("seek failed\n");
+    set_update_scale (TRUE);
+  }
+}
+
+static void
+seek_cb (GtkWidget * widget)
+{
+  /* If the timer hasn't expired yet, then the pipeline is running */
+  if (play_scrub && seek_timeout_id != 0) {
+    GST_DEBUG ("do scrub seek, PAUSED");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  }
+
+  GST_DEBUG ("do seek");
+  do_seek (widget);
+
+  if (play_scrub) {
+    GST_DEBUG ("do scrub seek, PLAYING");
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+    if (seek_timeout_id == 0) {
+      seek_timeout_id =
+          g_timeout_add (SCRUB_TIME, (GSourceFunc) end_scrub, widget);
+    }
+  }
+}
+
+static void
+set_update_fill (gboolean active)
+{
+  GST_DEBUG ("fill scale is %d", active);
+
+  if (active) {
+    if (fill_id == 0) {
+      fill_id =
+          g_timeout_add (FILL_INTERVAL, (GSourceFunc) update_fill, pipeline);
+    }
+  } else {
+    if (fill_id) {
+      g_source_remove (fill_id);
+      fill_id = 0;
+    }
+  }
+}
+
+static void
+set_update_scale (gboolean active)
+{
+
+  GST_DEBUG ("update scale is %d", active);
+
+  if (active) {
+    if (update_id == 0) {
+      update_id =
+          g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline);
+    }
+  } else {
+    if (update_id) {
+      g_source_remove (update_id);
+      update_id = 0;
+    }
+  }
+}
+
+static gboolean
+start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+  if (event->type != GDK_BUTTON_PRESS)
+    return FALSE;
+
+  set_update_scale (FALSE);
+
+  if (state == GST_STATE_PLAYING && flush_seek && scrub) {
+    GST_DEBUG ("start scrub seek, PAUSE");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  }
+
+  if (changed_id == 0 && flush_seek && scrub) {
+    changed_id =
+        g_signal_connect (hscale, "value_changed", G_CALLBACK (seek_cb),
+        pipeline);
+  }
+
+  return FALSE;
+}
+
+static gboolean
+stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+  if (changed_id) {
+    g_signal_handler_disconnect (hscale, changed_id);
+    changed_id = 0;
+  }
+
+  if (!flush_seek || !scrub) {
+    GST_DEBUG ("do final seek");
+    do_seek (widget);
+  }
+
+  if (seek_timeout_id != 0) {
+    g_source_remove (seek_timeout_id);
+    seek_timeout_id = 0;
+    /* Still scrubbing, so the pipeline is playing, see if we need PAUSED
+     * instead. */
+    if (state == GST_STATE_PAUSED) {
+      GST_DEBUG ("stop scrub seek, PAUSED");
+      gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    }
+  } else {
+    if (state == GST_STATE_PLAYING) {
+      GST_DEBUG ("stop scrub seek, PLAYING");
+      gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    }
+  }
+
+  return FALSE;
+}
+
+static void
+play_cb (GtkButton * button, gpointer data)
+{
+  GstStateChangeReturn ret;
+
+  if (state != GST_STATE_PLAYING) {
+    g_print ("PLAY pipeline\n");
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+
+    ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    switch (ret) {
+      case GST_STATE_CHANGE_FAILURE:
+        goto failed;
+      case GST_STATE_CHANGE_NO_PREROLL:
+        is_live = TRUE;
+        break;
+      default:
+        break;
+    }
+    state = GST_STATE_PLAYING;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Playing");
+  }
+
+  return;
+
+failed:
+  {
+    g_print ("PLAY failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Play failed");
+  }
+}
+
+static void
+pause_cb (GtkButton * button, gpointer data)
+{
+  g_static_mutex_lock (&state_mutex);
+  if (state != GST_STATE_PAUSED) {
+    GstStateChangeReturn ret;
+
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+    g_print ("PAUSE pipeline\n");
+    ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    switch (ret) {
+      case GST_STATE_CHANGE_FAILURE:
+        goto failed;
+      case GST_STATE_CHANGE_NO_PREROLL:
+        is_live = TRUE;
+        break;
+      default:
+        break;
+    }
+
+    state = GST_STATE_PAUSED;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Paused");
+  }
+  g_static_mutex_unlock (&state_mutex);
+
+  return;
+
+failed:
+  {
+    g_static_mutex_unlock (&state_mutex);
+    g_print ("PAUSE failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Pause failed");
+  }
+}
+
+static void
+stop_cb (GtkButton * button, gpointer data)
+{
+  if (state != STOP_STATE) {
+    GstStateChangeReturn ret;
+
+    g_print ("READY pipeline\n");
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+
+    g_static_mutex_lock (&state_mutex);
+    ret = gst_element_set_state (pipeline, STOP_STATE);
+    if (ret == GST_STATE_CHANGE_FAILURE)
+      goto failed;
+
+    state = STOP_STATE;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped");
+
+    is_live = FALSE;
+    buffering = FALSE;
+    set_update_scale (FALSE);
+    set_scale (0.0);
+    set_update_fill (FALSE);
+
+    if (pipeline_type == 16)
+      clear_streams (pipeline);
+    g_static_mutex_unlock (&state_mutex);
+
+#if 0
+    /* if one uses parse_launch, play, stop and play again it fails as all the
+     * pads after the demuxer can't be reconnected
+     */
+    if (!strcmp (pipelines[pipeline_type].name, "parse-launch")) {
+      gst_element_set_state (pipeline, GST_STATE_NULL);
+      gst_object_unref (pipeline);
+
+      g_list_free (seekable_elements);
+      seekable_elements = NULL;
+      g_list_free (seekable_pads);
+      seekable_pads = NULL;
+      g_list_free (rate_pads);
+      rate_pads = NULL;
+
+      pipeline = pipelines[pipeline_type].func (pipeline_spec);
+      g_assert (pipeline);
+      gst_element_set_state (pipeline, STOP_STATE);
+      connect_bus_signals (pipeline);
+    }
+#endif
+  }
+  return;
+
+failed:
+  {
+    g_static_mutex_unlock (&state_mutex);
+    g_print ("STOP failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stop failed");
+  }
+}
+
+static void
+accurate_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  accurate_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+key_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  keyframe_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+loop_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  loop_seek = gtk_toggle_button_get_active (button);
+  if (state == GST_STATE_PLAYING) {
+    do_seek (hscale);
+  }
+}
+
+static void
+flush_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  flush_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+scrub_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  scrub = gtk_toggle_button_get_active (button);
+}
+
+static void
+play_scrub_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  play_scrub = gtk_toggle_button_get_active (button);
+}
+
+static void
+skip_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  skip_seek = gtk_toggle_button_get_active (button);
+  if (state == GST_STATE_PLAYING) {
+    do_seek (hscale);
+  }
+}
+
+static void
+rate_spinbutton_changed_cb (GtkSpinButton * button, GstPipeline * pipeline)
+{
+  gboolean res = FALSE;
+  GstEvent *s_event;
+  GstSeekFlags flags;
+
+  rate = gtk_spin_button_get_value (button);
+
+  GST_DEBUG ("rate changed to %lf", rate);
+
+  flags = 0;
+  if (flush_seek)
+    flags |= GST_SEEK_FLAG_FLUSH;
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (accurate_seek)
+    flags |= GST_SEEK_FLAG_ACCURATE;
+  if (keyframe_seek)
+    flags |= GST_SEEK_FLAG_KEY_UNIT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  if (rate >= 0.0) {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, position,
+        GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+  } else {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, position);
+  }
+
+  res = send_event (s_event);
+
+  if (res) {
+    if (flush_seek) {
+      gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, SEEK_TIMEOUT);
+    }
+  } else
+    g_print ("seek failed\n");
+}
+
+static void
+update_flag (GstPipeline * pipeline, gint num, gboolean state)
+{
+  gint flags;
+
+  g_object_get (pipeline, "flags", &flags, NULL);
+  if (state)
+    flags |= (1 << num);
+  else
+    flags &= ~(1 << num);
+  g_object_set (pipeline, "flags", flags, NULL);
+}
+
+static void
+vis_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 3, state);
+  gtk_widget_set_sensitive (vis_combo, state);
+}
+
+static void
+audio_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 1, state);
+  gtk_widget_set_sensitive (audio_combo, state);
+}
+
+static void
+video_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 0, state);
+  gtk_widget_set_sensitive (video_combo, state);
+}
+
+static void
+text_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 2, state);
+  gtk_widget_set_sensitive (text_combo, state);
+}
+
+static void
+mute_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean mute;
+
+  mute = gtk_toggle_button_get_active (button);
+  g_object_set (pipeline, "mute", mute, NULL);
+}
+
+static void
+download_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 7, state);
+}
+
+static void
+buffer_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 8, state);
+}
+
+static void
+clear_streams (GstElement * pipeline)
+{
+  gint i;
+
+  /* remove previous info */
+  for (i = 0; i < n_video; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (video_combo), 0);
+  for (i = 0; i < n_audio; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (audio_combo), 0);
+  for (i = 0; i < n_text; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (text_combo), 0);
+
+  n_audio = n_video = n_text = 0;
+  gtk_widget_set_sensitive (video_combo, FALSE);
+  gtk_widget_set_sensitive (audio_combo, FALSE);
+  gtk_widget_set_sensitive (text_combo, FALSE);
+
+  need_streams = TRUE;
+}
+
+static void
+update_streams (GstPipeline * pipeline)
+{
+  gint i;
+
+  if (pipeline_type == 16 && need_streams) {
+    GstTagList *tags;
+    gchar *name, *str;
+    gint active_idx;
+    gboolean state;
+
+    /* remove previous info */
+    clear_streams (GST_ELEMENT_CAST (pipeline));
+
+    /* here we get and update the different streams detected by playbin2 */
+    g_object_get (pipeline, "n-video", &n_video, NULL);
+    g_object_get (pipeline, "n-audio", &n_audio, NULL);
+    g_object_get (pipeline, "n-text", &n_text, NULL);
+
+    g_print ("video %d, audio %d, text %d\n", n_video, n_audio, n_text);
+
+    active_idx = 0;
+    for (i = 0; i < n_video; i++) {
+      g_signal_emit_by_name (pipeline, "get-video-tags", i, &tags);
+      if (tags) {
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("video %d: %s\n", i, str);
+        g_free (str);
+      }
+      /* find good name for the label */
+      name = g_strdup_printf ("video %d", i + 1);
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (video_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (video_checkbox));
+    gtk_widget_set_sensitive (video_combo, state && n_video > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (video_combo), active_idx);
+
+    active_idx = 0;
+    for (i = 0; i < n_audio; i++) {
+      g_signal_emit_by_name (pipeline, "get-audio-tags", i, &tags);
+      if (tags) {
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("audio %d: %s\n", i, str);
+        g_free (str);
+      }
+      /* find good name for the label */
+      name = g_strdup_printf ("audio %d", i + 1);
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (audio_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (audio_checkbox));
+    gtk_widget_set_sensitive (audio_combo, state && n_audio > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (audio_combo), active_idx);
+
+    active_idx = 0;
+    for (i = 0; i < n_text; i++) {
+      g_signal_emit_by_name (pipeline, "get-text-tags", i, &tags);
+
+      name = NULL;
+      if (tags) {
+        const GValue *value;
+
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("text %d: %s\n", i, str);
+        g_free (str);
+
+        /* get the language code if we can */
+        value = gst_tag_list_get_value_index (tags, GST_TAG_LANGUAGE_CODE, 0);
+        if (value && G_VALUE_HOLDS_STRING (value)) {
+          name = g_strdup_printf ("text %s", g_value_get_string (value));
+        }
+      }
+      /* find good name for the label if we didn't use a tag */
+      if (name == NULL)
+        name = g_strdup_printf ("text %d", i + 1);
+
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (text_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (text_checkbox));
+    gtk_widget_set_sensitive (text_combo, state && n_text > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (text_combo), active_idx);
+
+    need_streams = FALSE;
+  }
+}
+
+static void
+video_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current video track %d\n", active);
+  g_object_set (pipeline, "current-video", active, NULL);
+}
+
+static void
+audio_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current audio track %d\n", active);
+  g_object_set (pipeline, "current-audio", active, NULL);
+}
+
+static void
+text_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current text track %d\n", active);
+  g_object_set (pipeline, "current-text", active, NULL);
+}
+
+static gboolean
+filter_features (GstPluginFeature * feature, gpointer data)
+{
+  GstElementFactory *f;
+
+  if (!GST_IS_ELEMENT_FACTORY (feature))
+    return FALSE;
+  f = GST_ELEMENT_FACTORY (feature);
+  if (!g_strrstr (gst_element_factory_get_klass (f), "Visualization"))
+    return FALSE;
+
+  return TRUE;
+}
+
+static void
+init_visualization_features (void)
+{
+  GList *list, *walk;
+
+  vis_entries = g_array_new (FALSE, FALSE, sizeof (VisEntry));
+
+  list = gst_registry_feature_filter (gst_registry_get_default (),
+      filter_features, FALSE, NULL);
+
+  for (walk = list; walk; walk = g_list_next (walk)) {
+    VisEntry entry;
+    const gchar *name;
+
+    entry.factory = GST_ELEMENT_FACTORY (walk->data);
+    name = gst_element_factory_get_longname (entry.factory);
+
+    g_array_append_val (vis_entries, entry);
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (vis_combo), name);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (vis_combo), 0);
+}
+
+static void
+vis_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  guint index;
+  VisEntry *entry;
+  GstElement *element;
+
+  /* get the selected index and get the factory for this index */
+  index = gtk_combo_box_get_active (GTK_COMBO_BOX (vis_combo));
+  if (vis_entries->len > 0) {
+    entry = &g_array_index (vis_entries, VisEntry, index);
+
+    /* create an instance of the element from the factory */
+    element = gst_element_factory_create (entry->factory, NULL);
+    if (!element)
+      return;
+
+    /* set vis plugin for playbin2 */
+    g_object_set (pipeline, "vis-plugin", element, NULL);
+  }
+}
+
+static void
+volume_spinbutton_changed_cb (GtkSpinButton * button, GstPipeline * pipeline)
+{
+  gdouble volume;
+
+  volume = gtk_spin_button_get_value (button);
+
+  g_object_set (pipeline, "volume", volume, NULL);
+}
+
+static void
+volume_notify_cb (GstElement * pipeline, GParamSpec * arg, gpointer user_dat)
+{
+  gdouble cur_volume, new_volume;
+
+  g_object_get (pipeline, "volume", &new_volume, NULL);
+  cur_volume = gtk_spin_button_get_value (GTK_SPIN_BUTTON (volume_spinbutton));
+  if (fabs (cur_volume - new_volume) > 0.001) {
+    g_signal_handlers_block_by_func (volume_spinbutton,
+        volume_spinbutton_changed_cb, pipeline);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (volume_spinbutton), new_volume);
+    g_signal_handlers_unblock_by_func (volume_spinbutton,
+        volume_spinbutton_changed_cb, pipeline);
+  }
+}
+
+static void
+shot_cb (GtkButton * button, gpointer data)
+{
+  GstBuffer *buffer;
+  GstCaps *caps;
+
+  /* convert to our desired format (RGB24) */
+  caps = gst_caps_new_simple ("video/x-raw-rgb",
+      "bpp", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24,
+      /* Note: we don't ask for a specific width/height here, so that
+       * videoscale can adjust dimensions from a non-1/1 pixel aspect
+       * ratio to a 1/1 pixel-aspect-ratio */
+      "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
+      "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+      "red_mask", G_TYPE_INT, 0xff0000,
+      "green_mask", G_TYPE_INT, 0x00ff00,
+      "blue_mask", G_TYPE_INT, 0x0000ff, NULL);
+
+  /* convert the latest frame to the requested format */
+  g_signal_emit_by_name (pipeline, "convert-frame", caps, &buffer);
+  gst_caps_unref (caps);
+
+  if (buffer) {
+    GstCaps *caps;
+    GstStructure *s;
+    gboolean res;
+    gint width, height;
+    GdkPixbuf *pixbuf;
+    GError *error = NULL;
+    gsize size;
+    guint8 *data;
+
+    /* get the snapshot buffer format now. We set the caps on the appsink so
+     * that it can only be an rgb buffer. The only thing we have not specified
+     * on the caps is the height, which is dependant on the pixel-aspect-ratio
+     * of the source material */
+#if 0
+    caps = GST_BUFFER_CAPS (buffer);
+#endif
+    /* FIXME, get the caps on the buffer somehow */
+    caps = NULL;
+    if (!caps) {
+      g_warning ("could not get snapshot format\n");
+      goto done;
+    }
+    s = gst_caps_get_structure (caps, 0);
+
+    /* we need to get the final caps on the buffer to get the size */
+    res = gst_structure_get_int (s, "width", &width);
+    res |= gst_structure_get_int (s, "height", &height);
+    if (!res) {
+      g_warning ("could not get snapshot dimension\n");
+      goto done;
+    }
+
+    /* create pixmap from buffer and save, gstreamer video buffers have a stride
+     * that is rounded up to the nearest multiple of 4 */
+    data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+    pixbuf = gdk_pixbuf_new_from_data (data,
+        GDK_COLORSPACE_RGB, FALSE, 8, width, height,
+        GST_ROUND_UP_4 (width * 3), NULL, NULL);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+    gst_buffer_unmap (buffer, data, size);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+
+  done:
+    gst_buffer_unref (buffer);
+  }
+}
+
+/* called when the Step button is pressed */
+static void
+step_cb (GtkButton * button, gpointer data)
+{
+  GstEvent *event;
+  GstFormat format;
+  guint64 amount;
+  gdouble rate;
+  gboolean flush, res;
+  gint active;
+
+  active = gtk_combo_box_get_active (GTK_COMBO_BOX (format_combo));
+  amount =
+      gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+      (step_amount_spinbutton));
+  rate = gtk_spin_button_get_value (GTK_SPIN_BUTTON (step_rate_spinbutton));
+  flush = TRUE;
+
+  switch (active) {
+    case 0:
+      format = GST_FORMAT_BUFFERS;
+      break;
+    case 1:
+      format = GST_FORMAT_TIME;
+      amount *= GST_MSECOND;
+      break;
+    default:
+      format = GST_FORMAT_UNDEFINED;
+      break;
+  }
+
+  event = gst_event_new_step (format, amount, rate, flush, FALSE);
+
+  res = send_event (event);
+
+  if (!res) {
+    g_print ("Sending step event failed\n");
+  }
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static gboolean shuttling = FALSE;
+static gdouble shuttle_rate = 0.0;
+static gdouble play_rate = 1.0;
+
+static void
+do_shuttle (GstElement * element)
+{
+  guint64 duration;
+
+  if (shuttling)
+    duration = 40 * GST_MSECOND;
+  else
+    duration = -1;
+
+  gst_element_send_event (element,
+      gst_event_new_step (GST_FORMAT_TIME, duration, shuttle_rate, FALSE,
+          FALSE));
+}
+
+static void
+msg_sync_step_done (GstBus * bus, GstMessage * message, GstElement * element)
+{
+  GstFormat format;
+  guint64 amount;
+  gdouble rate;
+  gboolean flush;
+  gboolean intermediate;
+  guint64 duration;
+  gboolean eos;
+
+  gst_message_parse_step_done (message, &format, &amount, &rate, &flush,
+      &intermediate, &duration, &eos);
+
+  if (eos) {
+    g_print ("stepped till EOS\n");
+    return;
+  }
+
+  if (g_static_mutex_trylock (&state_mutex)) {
+    if (shuttling)
+      do_shuttle (element);
+    g_static_mutex_unlock (&state_mutex);
+  } else {
+    /* ignore step messages that come while we are doing a state change */
+    g_print ("state change is busy\n");
+  }
+}
+
+static void
+shuttle_toggled (GtkToggleButton * button, GstElement * element)
+{
+  gboolean active;
+
+  active = gtk_toggle_button_get_active (button);
+
+  if (active != shuttling) {
+    shuttling = active;
+    g_print ("shuttling %s\n", shuttling ? "active" : "inactive");
+    if (active) {
+      shuttle_rate = 0.0;
+      play_rate = 1.0;
+      pause_cb (NULL, NULL);
+      gst_element_get_state (element, NULL, NULL, -1);
+    }
+  }
+}
+
+static void
+shuttle_rate_switch (GstElement * element)
+{
+  GstSeekFlags flags;
+  GstEvent *s_event;
+  gboolean res;
+
+  if (state == GST_STATE_PLAYING) {
+    /* pause when we need to */
+    pause_cb (NULL, NULL);
+    gst_element_get_state (element, NULL, NULL, -1);
+  }
+
+  if (play_rate == 1.0)
+    play_rate = -1.0;
+  else
+    play_rate = 1.0;
+
+  g_print ("rate changed to %lf %" GST_TIME_FORMAT "\n", play_rate,
+      GST_TIME_ARGS (position));
+
+  flags = GST_SEEK_FLAG_FLUSH;
+  flags |= GST_SEEK_FLAG_ACCURATE;
+
+  if (play_rate >= 0.0) {
+    s_event = gst_event_new_seek (play_rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, position,
+        GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+  } else {
+    s_event = gst_event_new_seek (play_rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, position);
+  }
+  res = send_event (s_event);
+  if (res) {
+    gst_element_get_state (element, NULL, NULL, SEEK_TIMEOUT);
+  } else {
+    g_print ("seek failed\n");
+  }
+}
+
+static void
+shuttle_value_changed (GtkRange * range, GstElement * element)
+{
+  gdouble rate;
+
+  rate = gtk_adjustment_get_value (shuttle_adjustment);
+
+  if (rate == 0.0) {
+    g_print ("rate 0.0, pause\n");
+    pause_cb (NULL, NULL);
+    gst_element_get_state (element, NULL, NULL, -1);
+  } else {
+    g_print ("rate changed %0.3g\n", rate);
+
+    if ((rate < 0.0 && play_rate > 0.0) || (rate > 0.0 && play_rate < 0.0)) {
+      shuttle_rate_switch (element);
+    }
+
+    shuttle_rate = ABS (rate);
+    if (state != GST_STATE_PLAYING) {
+      do_shuttle (element);
+      play_cb (NULL, NULL);
+    }
+  }
+}
+
+static void
+msg_async_done (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  GST_DEBUG ("async done");
+  /* when we get ASYNC_DONE we can query position, duration and other
+   * properties */
+  update_scale (pipeline);
+
+  /* update the available streams */
+  update_streams (pipeline);
+}
+
+static void
+msg_state_changed (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+
+  /* We only care about state changed on the pipeline */
+  if (s && GST_MESSAGE_SRC (message) == GST_OBJECT_CAST (pipeline)) {
+    GstState old, new, pending;
+
+    gst_message_parse_state_changed (message, &old, &new, &pending);
+
+    /* When state of the pipeline changes to paused or playing we start updating scale */
+    if (new == GST_STATE_PLAYING) {
+      set_update_scale (TRUE);
+    } else {
+      set_update_scale (FALSE);
+    }
+  }
+}
+
+static void
+msg_segment_done (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  GstEvent *s_event;
+  GstSeekFlags flags;
+  gboolean res;
+  GstFormat format;
+
+  GST_DEBUG ("position is %" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+  gst_message_parse_segment_done (message, &format, &position);
+  GST_DEBUG ("end of segment at %" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+
+  flags = 0;
+  /* in the segment-done callback we never flush as this would not make sense
+   * for seamless playback. */
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  s_event = gst_event_new_seek (rate,
+      GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+      GST_SEEK_TYPE_SET, duration);
+
+  GST_DEBUG ("restart loop with rate %lf to 0 / %" GST_TIME_FORMAT,
+      rate, GST_TIME_ARGS (duration));
+
+  res = send_event (s_event);
+  if (!res)
+    g_print ("segment seek failed\n");
+}
+
+/* in stream buffering mode we PAUSE the pipeline until we receive a 100%
+ * message */
+static void
+do_stream_buffering (gint percent)
+{
+  gchar *bufstr;
+
+  gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+  bufstr = g_strdup_printf ("Buffering...%d", percent);
+  gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, bufstr);
+  g_free (bufstr);
+
+  if (percent == 100) {
+    /* a 100% message means buffering is done */
+    buffering = FALSE;
+    /* if the desired state is playing, go back */
+    if (state == GST_STATE_PLAYING) {
+      /* no state management needed for live pipelines */
+      if (!is_live) {
+        fprintf (stderr, "Done buffering, setting pipeline to PLAYING ...\n");
+        gst_element_set_state (pipeline, GST_STATE_PLAYING);
+      }
+      gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+      gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Playing");
+    }
+  } else {
+    /* buffering busy */
+    if (buffering == FALSE && state == GST_STATE_PLAYING) {
+      /* we were not buffering but PLAYING, PAUSE  the pipeline. */
+      if (!is_live) {
+        fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n");
+        gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      }
+    }
+    buffering = TRUE;
+  }
+}
+
+static void
+do_download_buffering (gint percent)
+{
+  if (!buffering && percent < 100) {
+    gchar *bufstr;
+
+    buffering = TRUE;
+
+    bufstr = g_strdup_printf ("Downloading...");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, bufstr);
+    g_free (bufstr);
+
+    /* once we get a buffering message, we'll do the fill update */
+    set_update_fill (TRUE);
+
+    if (state == GST_STATE_PLAYING && !is_live) {
+      fprintf (stderr, "Downloading, setting pipeline to PAUSED ...\n");
+      gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      /* user has to manually start the playback */
+      state = GST_STATE_PAUSED;
+    }
+  }
+}
+
+static void
+msg_buffering (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  gint percent;
+
+  gst_message_parse_buffering (message, &percent);
+
+  /* get more stats */
+  gst_message_parse_buffering_stats (message, &mode, NULL, NULL,
+      &buffering_left);
+
+  switch (mode) {
+    case GST_BUFFERING_DOWNLOAD:
+      do_download_buffering (percent);
+      break;
+    case GST_BUFFERING_LIVE:
+    case GST_BUFFERING_TIMESHIFT:
+    case GST_BUFFERING_STREAM:
+      do_stream_buffering (percent);
+      break;
+  }
+}
+
+static void
+msg_clock_lost (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  g_print ("clock lost! PAUSE and PLAY to select a new clock\n");
+
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+}
+
+#ifdef HAVE_X
+
+static gulong embed_xid = 0;
+
+/* We set the xid here in response to the prepare-window-handle message via a
+ * bus sync handler because we don't know the actual videosink used from the
+ * start (as we don't know the pipeline, or bin elements such as autovideosink
+ * or gconfvideosink may be used which create the actual videosink only once
+ * the pipeline is started) */
+static GstBusSyncReply
+bus_sync_handler (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  GstElement *element;
+
+  if (!gst_is_video_overlay_prepare_window_handle_message (message))
+    return GST_BUS_PASS;
+
+  element = GST_ELEMENT (GST_MESSAGE_SRC (message));
+
+  g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid);
+
+  if (g_object_class_find_property (G_OBJECT_GET_CLASS (element),
+          "force-aspect-ratio")) {
+    g_object_set (element, "force-aspect-ratio", TRUE, NULL);
+  }
+
+  /* Should have been initialised from main thread before (can't use
+   * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will
+   * be called from a streaming thread and GDK_WINDOW_XID maps to more than
+   * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that
+   * shouldn't be done from a non-GUI thread without explicit locking).  */
+  g_assert (embed_xid != 0);
+
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), embed_xid);
+  return GST_BUS_PASS;
+}
+#endif
+
+static gboolean
+handle_expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer data)
+{
+  if (state < GST_STATE_PAUSED) {
+    GtkAllocation allocation;
+    GdkWindow *window = gtk_widget_get_window (widget);
+    cairo_t *cr;
+
+    gtk_widget_get_allocation (widget, &allocation);
+    cr = gdk_cairo_create (window);
+    cairo_set_source_rgb (cr, 0, 0, 0);
+    cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
+    cairo_fill (cr);
+    cairo_destroy (cr);
+  }
+  return FALSE;
+}
+
+static void
+realize_cb (GtkWidget * widget, gpointer data)
+{
+#if GTK_CHECK_VERSION(2,18,0)
+  {
+    GdkWindow *window = gtk_widget_get_window (widget);
+
+    /* This is here just for pedagogical purposes, GDK_WINDOW_XID will call it
+     * as well */
+    if (!gdk_window_ensure_native (window))
+      g_error ("Couldn't create native window needed for GstVideoOverlay!");
+  }
+#endif
+
+#ifdef HAVE_X
+  {
+    GdkWindow *window = gtk_widget_get_window (video_window);
+
+    embed_xid = GDK_WINDOW_XID (window);
+    g_print ("Window realize: video window XID = %lu\n", embed_xid);
+  }
+#endif
+}
+
+static void
+msg_eos (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  message_received (bus, message, data);
+
+  /* Set new uri for playerbins and continue playback */
+  if (l && (pipeline_type == 14 || pipeline_type == 16)) {
+    stop_cb (NULL, NULL);
+    l = g_list_next (l);
+    if (l) {
+      playerbin_set_uri (GST_ELEMENT (data), l->data);
+      play_cb (NULL, NULL);
+    }
+  }
+}
+
+static void
+msg_step_done (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  if (!shuttling)
+    message_received (bus, message, data);
+}
+
+static void
+connect_bus_signals (GstElement * pipeline)
+{
+  GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+
+#ifdef HAVE_X
+  /* handle prepare-window-handle element message synchronously */
+  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler,
+      pipeline);
+#endif
+
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  gst_bus_enable_sync_message_emission (bus);
+
+  g_signal_connect (bus, "message::state-changed",
+      (GCallback) msg_state_changed, pipeline);
+  g_signal_connect (bus, "message::segment-done", (GCallback) msg_segment_done,
+      pipeline);
+  g_signal_connect (bus, "message::async-done", (GCallback) msg_async_done,
+      pipeline);
+
+  g_signal_connect (bus, "message::new-clock", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::clock-lost", (GCallback) msg_clock_lost,
+      pipeline);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) msg_eos, pipeline);
+  g_signal_connect (bus, "message::tag", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::element", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::segment-done", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::buffering", (GCallback) msg_buffering,
+      pipeline);
+//  g_signal_connect (bus, "message::step-done", (GCallback) msg_step_done,
+//      pipeline);
+  g_signal_connect (bus, "message::step-start", (GCallback) msg_step_done,
+      pipeline);
+  g_signal_connect (bus, "sync-message::step-done",
+      (GCallback) msg_sync_step_done, pipeline);
+
+  gst_object_unref (bus);
+}
+
+/* Return GList of paths described in location string */
+static GList *
+handle_wildcards (const gchar * location)
+{
+  GList *res = NULL;
+  gchar *path = g_path_get_dirname (location);
+  gchar *pattern = g_path_get_basename (location);
+  GPatternSpec *pspec = g_pattern_spec_new (pattern);
+  GDir *dir = g_dir_open (path, 0, NULL);
+  const gchar *name;
+
+  g_print ("matching %s from %s\n", pattern, path);
+
+  if (!dir) {
+    g_print ("opening directory %s failed\n", path);
+    goto out;
+  }
+
+  while ((name = g_dir_read_name (dir)) != NULL) {
+    if (g_pattern_match_string (pspec, name)) {
+      res = g_list_append (res, g_strjoin ("/", path, name, NULL));
+      g_print ("  found clip %s\n", name);
+    }
+  }
+
+  g_dir_close (dir);
+out:
+  g_pattern_spec_free (pspec);
+  g_free (pattern);
+  g_free (path);
+
+  return res;
+}
+
+static void
+delete_event_cb (void)
+{
+  stop_cb (NULL, NULL);
+  gtk_main_quit ();
+}
+
+static void
+print_usage (int argc, char **argv)
+{
+  gint i;
+
+  g_print ("usage: %s <type> <filename>\n", argv[0]);
+  g_print ("   possible types:\n");
+
+  for (i = 0; i < NUM_TYPES; i++) {
+    g_print ("     %d = %s\n", i, pipelines[i].name);
+  }
+}
+
+static gboolean
+read_joystick (GIOChannel * source, GIOCondition condition, gpointer user_data)
+{
+  gchar buf[sizeof (struct js_event)];
+  struct js_event *js = (struct js_event *) buf;
+  GError *err = NULL;
+  gsize bytes_read = 0;
+  GIOStatus result;
+
+  result =
+      g_io_channel_read_chars (source, buf, sizeof (struct js_event),
+      &bytes_read, &err);
+  if (err) {
+    g_print ("error reading from joystick: %s", err->message);
+    g_error_free (err);
+    return FALSE;
+  } else if (bytes_read != sizeof (struct js_event)) {
+    g_print ("error reading joystick, read %u bytes of %u\n",
+        (guint) bytes_read, (guint) sizeof (struct js_event));
+    return TRUE;
+  } else if (result != G_IO_STATUS_NORMAL) {
+    g_print ("reading from joystick returned status %d", result);
+  }
+
+  switch (js->type & ~JS_EVENT_INIT) {
+    case JS_EVENT_AXIS:
+      if (js->number == 0) {
+        gdouble new_rate = (gdouble) (js->value) / 3000;
+        g_print ("Got: %d (rate %g)\n", js->value, new_rate);
+        if (shuttling)
+          gtk_adjustment_set_value (shuttle_adjustment, new_rate);
+      }
+      break;
+  }
+
+  return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window, *hbox, *vbox, *panel, *expander, *pb2vbox, *boxes,
+      *flagtable, *boxes2, *step;
+  GtkWidget *play_button, *pause_button, *stop_button, *shot_button;
+  GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox, *flush_checkbox;
+  GtkWidget *scrub_checkbox, *play_scrub_checkbox;
+  GtkWidget *rate_label, *volume_label;
+  GOptionEntry options[] = {
+    {"stats", 's', 0, G_OPTION_ARG_NONE, &stats,
+        "Show pad stats", NULL},
+    {"elem", 'e', 0, G_OPTION_ARG_NONE, &elem_seek,
+        "Seek on elements instead of pads", NULL},
+    {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+        "Verbose properties", NULL},
+    {"joystick", 'j', 0, G_OPTION_ARG_STRING, &js_device,
+        "Joystick device to use", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GError *err = NULL;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx = g_option_context_new ("- test seeking in gsteamer");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  g_option_context_add_group (ctx, gtk_get_option_group (TRUE));
+
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  GST_DEBUG_CATEGORY_INIT (seek_debug, "seek", 0, "seek example");
+
+  if (argc != 3) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  pipeline_type = atoi (argv[1]);
+
+  if (pipeline_type < 0 || pipeline_type >= NUM_TYPES) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  pipeline_spec = argv[2];
+
+  if (js_device == NULL)
+    js_device = g_strdup ("/dev/input/js0");
+
+  js_fd = g_open (js_device, O_RDONLY, 0);
+  if (js_fd < 0) {
+    g_print ("Failed to open joystick device %s\n", js_device);
+    exit (-1);
+  }
+
+  if (g_strrstr (pipeline_spec, "*") != NULL ||
+      g_strrstr (pipeline_spec, "?") != NULL) {
+    paths = handle_wildcards (pipeline_spec);
+  } else {
+    paths = g_list_prepend (paths, g_strdup (pipeline_spec));
+  }
+
+  if (!paths) {
+    g_print ("opening %s failed\n", pipeline_spec);
+    exit (-1);
+  }
+
+  l = paths;
+
+  pipeline = pipelines[pipeline_type].func ((gchar *) l->data);
+  g_assert (pipeline);
+
+  /* initialize gui elements ... */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  video_window = gtk_drawing_area_new ();
+  g_signal_connect (video_window, "expose-event",
+      G_CALLBACK (handle_expose_cb), NULL);
+  g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL);
+  gtk_widget_set_double_buffered (video_window, FALSE);
+
+  statusbar = gtk_statusbar_new ();
+  status_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "seek");
+  gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped");
+  hbox = gtk_hbox_new (FALSE, 0);
+  vbox = gtk_vbox_new (FALSE, 0);
+  flagtable = gtk_table_new (4, 2, FALSE);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
+
+  /* media controls */
+  play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
+  pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE);
+  stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP);
+
+  /* seek flags */
+  accurate_checkbox = gtk_check_button_new_with_label ("Accurate Seek");
+  key_checkbox = gtk_check_button_new_with_label ("Key-unit Seek");
+  loop_checkbox = gtk_check_button_new_with_label ("Loop");
+  flush_checkbox = gtk_check_button_new_with_label ("Flush");
+  scrub_checkbox = gtk_check_button_new_with_label ("Scrub");
+  play_scrub_checkbox = gtk_check_button_new_with_label ("Play Scrub");
+  skip_checkbox = gtk_check_button_new_with_label ("Play Skip");
+  rate_spinbutton = gtk_spin_button_new_with_range (-100, 100, 0.1);
+  gtk_spin_button_set_digits (GTK_SPIN_BUTTON (rate_spinbutton), 3);
+  rate_label = gtk_label_new ("Rate");
+
+  gtk_widget_set_tooltip_text (accurate_checkbox,
+      "accurate position is requested, this might be considerably slower for some formats");
+  gtk_widget_set_tooltip_text (key_checkbox,
+      "seek to the nearest keyframe. This might be faster but less accurate");
+  gtk_widget_set_tooltip_text (loop_checkbox, "loop playback");
+  gtk_widget_set_tooltip_text (flush_checkbox, "flush pipeline after seeking");
+  gtk_widget_set_tooltip_text (rate_spinbutton, "define the playback rate, "
+      "negative value trigger reverse playback");
+  gtk_widget_set_tooltip_text (scrub_checkbox, "show images while seeking");
+  gtk_widget_set_tooltip_text (play_scrub_checkbox, "play video while seeking");
+  gtk_widget_set_tooltip_text (skip_checkbox,
+      "Skip frames while playing at high frame rates");
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (flush_checkbox), TRUE);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (scrub_checkbox), TRUE);
+
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON (rate_spinbutton), rate);
+
+  /* step expander */
+  {
+    GtkWidget *hbox;
+
+    step = gtk_expander_new ("step options");
+    hbox = gtk_hbox_new (FALSE, 0);
+
+    format_combo = gtk_combo_box_text_new ();
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo),
+        "frames");
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo),
+        "time (ms)");
+    gtk_combo_box_set_active (GTK_COMBO_BOX (format_combo), 0);
+    gtk_box_pack_start (GTK_BOX (hbox), format_combo, FALSE, FALSE, 2);
+
+    step_amount_spinbutton = gtk_spin_button_new_with_range (1, 1000, 1);
+    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (step_amount_spinbutton), 0);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_amount_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (hbox), step_amount_spinbutton, FALSE, FALSE,
+        2);
+
+    step_rate_spinbutton = gtk_spin_button_new_with_range (0.0, 100, 0.1);
+    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (step_rate_spinbutton), 3);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_rate_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (hbox), step_rate_spinbutton, FALSE, FALSE, 2);
+
+    step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD);
+    gtk_button_set_label (GTK_BUTTON (step_button), "Step");
+    gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2);
+
+    g_signal_connect (G_OBJECT (step_button), "clicked", G_CALLBACK (step_cb),
+        pipeline);
+
+    /* shuttle scale */
+    shuttle_checkbox = gtk_check_button_new_with_label ("Shuttle");
+    gtk_box_pack_start (GTK_BOX (hbox), shuttle_checkbox, FALSE, FALSE, 2);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (shuttle_checkbox), FALSE);
+    g_signal_connect (shuttle_checkbox, "toggled", G_CALLBACK (shuttle_toggled),
+        pipeline);
+
+    shuttle_adjustment =
+        GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0));
+    shuttle_hscale = gtk_hscale_new (shuttle_adjustment);
+    gtk_scale_set_digits (GTK_SCALE (shuttle_hscale), 2);
+    gtk_scale_set_value_pos (GTK_SCALE (shuttle_hscale), GTK_POS_TOP);
+    g_signal_connect (shuttle_hscale, "value_changed",
+        G_CALLBACK (shuttle_value_changed), pipeline);
+    g_signal_connect (shuttle_hscale, "format_value",
+        G_CALLBACK (shuttle_format_value), pipeline);
+
+    gtk_box_pack_start (GTK_BOX (hbox), shuttle_hscale, TRUE, TRUE, 2);
+
+    gtk_container_add (GTK_CONTAINER (step), hbox);
+  }
+
+  /* seek bar */
+  adjustment =
+      GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, 100.0, 0.1, 1.0, 1.0));
+  hscale = gtk_hscale_new (adjustment);
+  gtk_scale_set_digits (GTK_SCALE (hscale), 2);
+  gtk_scale_set_value_pos (GTK_SCALE (hscale), GTK_POS_RIGHT);
+  gtk_range_set_show_fill_level (GTK_RANGE (hscale), TRUE);
+  gtk_range_set_fill_level (GTK_RANGE (hscale), 100.0);
+
+  g_signal_connect (hscale, "button_press_event", G_CALLBACK (start_seek),
+      pipeline);
+  g_signal_connect (hscale, "button_release_event", G_CALLBACK (stop_seek),
+      pipeline);
+  g_signal_connect (hscale, "format_value", G_CALLBACK (format_value),
+      pipeline);
+
+  if (pipeline_type == 16) {
+    /* the playbin2 panel controls for the video/audio/subtitle tracks */
+    panel = gtk_hbox_new (FALSE, 0);
+    video_combo = gtk_combo_box_text_new ();
+    audio_combo = gtk_combo_box_text_new ();
+    text_combo = gtk_combo_box_text_new ();
+    gtk_widget_set_sensitive (video_combo, FALSE);
+    gtk_widget_set_sensitive (audio_combo, FALSE);
+    gtk_widget_set_sensitive (text_combo, FALSE);
+    gtk_box_pack_start (GTK_BOX (panel), video_combo, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (panel), audio_combo, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (panel), text_combo, TRUE, TRUE, 2);
+    g_signal_connect (G_OBJECT (video_combo), "changed",
+        G_CALLBACK (video_combo_cb), pipeline);
+    g_signal_connect (G_OBJECT (audio_combo), "changed",
+        G_CALLBACK (audio_combo_cb), pipeline);
+    g_signal_connect (G_OBJECT (text_combo), "changed",
+        G_CALLBACK (text_combo_cb), pipeline);
+    /* playbin2 panel for flag checkboxes and volume/mute */
+    boxes = gtk_hbox_new (FALSE, 0);
+    vis_checkbox = gtk_check_button_new_with_label ("Vis");
+    video_checkbox = gtk_check_button_new_with_label ("Video");
+    audio_checkbox = gtk_check_button_new_with_label ("Audio");
+    text_checkbox = gtk_check_button_new_with_label ("Text");
+    mute_checkbox = gtk_check_button_new_with_label ("Mute");
+    download_checkbox = gtk_check_button_new_with_label ("Download");
+    buffer_checkbox = gtk_check_button_new_with_label ("Buffer");
+    volume_label = gtk_label_new ("Volume");
+    volume_spinbutton = gtk_spin_button_new_with_range (0, 10.0, 0.1);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (volume_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (boxes), video_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), audio_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), text_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), vis_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), mute_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), download_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), buffer_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), volume_label, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), volume_spinbutton, TRUE, TRUE, 2);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vis_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (audio_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (video_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (text_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mute_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (download_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buffer_checkbox), FALSE);
+    g_signal_connect (G_OBJECT (vis_checkbox), "toggled",
+        G_CALLBACK (vis_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (audio_checkbox), "toggled",
+        G_CALLBACK (audio_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (video_checkbox), "toggled",
+        G_CALLBACK (video_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (text_checkbox), "toggled",
+        G_CALLBACK (text_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (mute_checkbox), "toggled",
+        G_CALLBACK (mute_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (download_checkbox), "toggled",
+        G_CALLBACK (download_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (buffer_checkbox), "toggled",
+        G_CALLBACK (buffer_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (volume_spinbutton), "value_changed",
+        G_CALLBACK (volume_spinbutton_changed_cb), pipeline);
+    /* playbin2 panel for snapshot */
+    boxes2 = gtk_hbox_new (FALSE, 0);
+    shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE);
+    gtk_widget_set_tooltip_text (shot_button,
+        "save a screenshot .png in the current directory");
+    g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb),
+        pipeline);
+    vis_combo = gtk_combo_box_text_new ();
+    g_signal_connect (G_OBJECT (vis_combo), "changed",
+        G_CALLBACK (vis_combo_cb), pipeline);
+    gtk_widget_set_sensitive (vis_combo, FALSE);
+    gtk_box_pack_start (GTK_BOX (boxes2), shot_button, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes2), vis_combo, TRUE, TRUE, 2);
+
+    /* fill the vis combo box and the array of factories */
+    init_visualization_features ();
+  } else {
+    panel = boxes = boxes2 = NULL;
+  }
+
+  /* do the packing stuff ... */
+  gtk_window_set_default_size (GTK_WINDOW (window), 250, 96);
+  /* FIXME: can we avoid this for audio only? */
+  gtk_widget_set_size_request (GTK_WIDGET (video_window), -1,
+      DEFAULT_VIDEO_HEIGHT);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_box_pack_start (GTK_BOX (vbox), video_window, TRUE, TRUE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), play_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), pause_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), stop_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), flagtable, FALSE, FALSE, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), accurate_checkbox, 0, 1, 0,
+      1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), flush_checkbox, 1, 2, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), loop_checkbox, 2, 3, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), key_checkbox, 0, 1, 1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), scrub_checkbox, 1, 2, 1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), play_scrub_checkbox, 2, 3,
+      1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), skip_checkbox, 3, 4, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_label, 4, 5, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_spinbutton, 4, 5, 1,
+      2);
+  if (panel && boxes && boxes2) {
+    expander = gtk_expander_new ("playbin2 options");
+    pb2vbox = gtk_vbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2);
+    gtk_container_add (GTK_CONTAINER (expander), pb2vbox);
+    gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 2);
+  }
+  gtk_box_pack_start (GTK_BOX (vbox), step, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hscale, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 2);
+
+  /* connect things ... */
+  g_signal_connect (G_OBJECT (play_button), "clicked", G_CALLBACK (play_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (pause_button), "clicked", G_CALLBACK (pause_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (stop_button), "clicked", G_CALLBACK (stop_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (accurate_checkbox), "toggled",
+      G_CALLBACK (accurate_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (key_checkbox), "toggled",
+      G_CALLBACK (key_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (loop_checkbox), "toggled",
+      G_CALLBACK (loop_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (flush_checkbox), "toggled",
+      G_CALLBACK (flush_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (scrub_checkbox), "toggled",
+      G_CALLBACK (scrub_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (play_scrub_checkbox), "toggled",
+      G_CALLBACK (play_scrub_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (skip_checkbox), "toggled",
+      G_CALLBACK (skip_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (rate_spinbutton), "value_changed",
+      G_CALLBACK (rate_spinbutton_changed_cb), pipeline);
+
+  g_signal_connect (G_OBJECT (window), "delete-event", delete_event_cb, NULL);
+
+  /* show the gui. */
+  gtk_widget_show_all (window);
+
+  /* realize window now so that the video window gets created and we can
+   * obtain its XID before the pipeline is started up and the videosink
+   * asks for the XID of the window to render onto */
+  gtk_widget_realize (window);
+
+  /* we should have the XID now */
+  g_assert (embed_xid != 0);
+
+  if (verbose) {
+    g_signal_connect (pipeline, "deep_notify",
+        G_CALLBACK (gst_object_default_deep_notify), NULL);
+  }
+
+  {
+    GIOChannel *js_watch = g_io_channel_unix_new (js_fd);
+    g_io_channel_set_encoding (js_watch, NULL, NULL);
+    g_io_add_watch (js_watch, G_IO_IN, read_joystick, NULL);
+  }
+
+  connect_bus_signals (pipeline);
+  gtk_main ();
+
+  g_print ("NULL pipeline\n");
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  g_print ("free pipeline\n");
+  gst_object_unref (pipeline);
+
+  g_list_foreach (paths, (GFunc) g_free, NULL);
+  g_list_free (paths);
+
+  return 0;
+}
diff --git a/tests/examples/seek/scrubby.c b/tests/examples/seek/scrubby.c
new file mode 100644
index 0000000..f399cb4
--- /dev/null
+++ b/tests/examples/seek/scrubby.c
@@ -0,0 +1,563 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gst/gst.h>
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (scrubby_debug);
+#define GST_CAT_DEFAULT (scrubby_debug)
+
+static GstElement *pipeline;
+static gint64 position;
+static gint64 duration;
+static GtkAdjustment *adjustment;
+static GtkWidget *hscale;
+static GtkAdjustment *sadjustment;
+static GtkWidget *shscale;
+static gboolean verbose = FALSE;
+
+static guint bus_watch = 0;
+static guint update_id = 0;
+static guint changed_id = 0;
+static guint schanged_id = 0;
+
+#define SOURCE "filesrc"
+#define ASINK "alsasink"
+//#define ASINK "osssink"
+#define VSINK "xvimagesink"
+//#define VSINK "ximagesink"
+//#define VSINK "aasink"
+//#define VSINK "cacasink"
+
+#define RANGE_PREC 10000
+#define SEGMENT_LEN 100
+#define UPDATE_INTERVAL 500
+
+static gdouble prev_range = -1.0;
+static GstClockTime prev_time = GST_CLOCK_TIME_NONE;
+static gdouble cur_range;
+static GstClockTime cur_time;
+static GstClockTimeDiff diff;
+static gdouble cur_speed = 1.0;
+
+typedef struct
+{
+  const gchar *padname;
+  GstPad *target;
+  GstElement *bin;
+}
+dyn_link;
+
+static GstElement *
+gst_element_factory_make_or_warn (const gchar * type, const gchar * name)
+{
+  GstElement *element = gst_element_factory_make (type, name);
+
+  if (!element) {
+    g_warning ("Failed to create element %s of type %s", name, type);
+  }
+
+  return element;
+}
+
+static void
+dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data)
+{
+  dyn_link *connect = (dyn_link *) data;
+
+  if (connect->padname == NULL ||
+      !strcmp (gst_pad_get_name (newpad), connect->padname)) {
+    if (connect->bin)
+      gst_bin_add (GST_BIN (pipeline), connect->bin);
+    gst_pad_link (newpad, connect->target);
+  }
+}
+
+static void
+setup_dynamic_link (GstElement * element, const gchar * padname,
+    GstPad * target, GstElement * bin)
+{
+  dyn_link *connect;
+
+  connect = g_new0 (dyn_link, 1);
+  connect->padname = g_strdup (padname);
+  connect->target = target;
+  connect->bin = bin;
+
+  g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
+      connect);
+}
+
+static GstElement *
+make_wav_pipeline (const gchar * location)
+{
+  GstElement *pipeline;
+  GstElement *src, *decoder, *audiosink;
+
+  pipeline = gst_pipeline_new ("app");
+
+  src = gst_element_factory_make_or_warn (SOURCE, "src");
+  decoder = gst_element_factory_make_or_warn ("wavparse", "decoder");
+  audiosink = gst_element_factory_make_or_warn (ASINK, "sink");
+
+  g_object_set (G_OBJECT (src), "location", location, NULL);
+
+  gst_bin_add (GST_BIN (pipeline), src);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+  gst_bin_add (GST_BIN (pipeline), audiosink);
+
+  gst_element_link (src, decoder);
+
+  setup_dynamic_link (decoder, "src", gst_element_get_static_pad (audiosink,
+          "sink"), NULL);
+
+  return pipeline;
+}
+
+static GstElement *
+make_playerbin_pipeline (const gchar * location)
+{
+  GstElement *player;
+
+  player = gst_element_factory_make ("playbin", "player");
+  g_assert (player);
+
+  g_object_set (G_OBJECT (player), "uri", location, NULL);
+
+  return player;
+}
+
+static gchar *
+format_value (GtkScale * scale, gdouble value)
+{
+  gint64 real;
+  gint64 seconds;
+  gint64 subseconds;
+
+  real = value * duration / RANGE_PREC;
+  seconds = (gint64) real / GST_SECOND;
+  subseconds = (gint64) real / (GST_SECOND / RANGE_PREC);
+
+  return g_strdup_printf ("%02" G_GINT64_FORMAT ":%02" G_GINT64_FORMAT ":%02"
+      G_GINT64_FORMAT, seconds / 60, seconds % 60, subseconds % 100);
+}
+
+static gboolean
+update_scale (gpointer data)
+{
+  position = 0;
+  duration = 0;
+
+  gst_element_query_position (pipeline, GST_FORMAT_TIME, &position);
+  gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
+
+  if (position >= duration)
+    duration = position;
+
+  if (duration > 0) {
+    gtk_adjustment_set_value (adjustment,
+        position * (gdouble) RANGE_PREC / duration);
+    gtk_widget_queue_draw (hscale);
+  }
+
+  return TRUE;
+}
+
+static void
+speed_cb (GtkWidget * widget)
+{
+  GstEvent *s_event;
+  gboolean res;
+
+  GST_DEBUG ("speed change");
+  cur_speed = gtk_range_get_value (GTK_RANGE (widget));
+
+  if (cur_speed == 0.0)
+    return;
+
+  s_event = gst_event_new_seek (cur_speed,
+      GST_FORMAT_TIME, 0, GST_SEEK_TYPE_NONE, -1, GST_SEEK_TYPE_NONE, -1);
+
+  res = gst_element_send_event (pipeline, s_event);
+  if (!res)
+    g_print ("speed change failed\n");
+}
+
+static gboolean do_seek (GtkWidget * widget, gboolean flush, gboolean segment);
+
+static void
+seek_cb (GtkWidget * widget)
+{
+  if (changed_id) {
+    GST_DEBUG ("seek because of slider move");
+
+    if (do_seek (widget, TRUE, TRUE)) {
+      g_source_remove (changed_id);
+      changed_id = 0;
+    }
+  }
+}
+
+static gboolean
+do_seek (GtkWidget * widget, gboolean flush, gboolean segment)
+{
+  gint64 start, stop;
+  gboolean res = FALSE;
+  GstEvent *s_event;
+  gdouble rate;
+  GTimeVal tv;
+  gboolean valid;
+  gdouble new_range;
+
+  if (segment)
+    new_range = gtk_range_get_value (GTK_RANGE (widget));
+  else {
+    new_range = (gdouble) RANGE_PREC;
+    cur_time = -1;
+  }
+
+  valid = prev_time != -1;
+
+  GST_DEBUG ("flush %d, segment %d, valid %d", flush, segment, valid);
+
+  if (new_range == cur_range)
+    return FALSE;
+
+  prev_time = cur_time;
+  prev_range = cur_range;
+
+  cur_range = new_range;
+
+  g_get_current_time (&tv);
+  cur_time = GST_TIMEVAL_TO_TIME (tv);
+
+  if (!valid)
+    return FALSE;
+
+  GST_DEBUG ("cur:  %lf, %" GST_TIME_FORMAT, cur_range,
+      GST_TIME_ARGS (cur_time));
+  GST_DEBUG ("prev: %lf, %" GST_TIME_FORMAT, prev_range,
+      GST_TIME_ARGS (prev_time));
+
+  diff = cur_time - prev_time;
+
+  GST_DEBUG ("diff: %" GST_TIME_FORMAT, GST_TIME_ARGS (diff));
+
+  start = prev_range * duration / RANGE_PREC;
+  /* play 50 milliseconds */
+  stop = segment ? cur_range * duration / RANGE_PREC : duration;
+
+  if (start == stop)
+    return FALSE;
+
+  if (segment)
+    rate = (stop - start) / (gdouble) diff;
+  else
+    rate = cur_speed;
+
+  if (start > stop) {
+    gint64 tmp;
+
+    tmp = start;
+    start = stop;
+    stop = tmp;
+  }
+
+  if (rate == 0.0)
+    return TRUE;
+
+  GST_DEBUG ("seek to %" GST_TIME_FORMAT " -- %" GST_TIME_FORMAT ", rate %lf"
+      " on element %s",
+      GST_TIME_ARGS (start), GST_TIME_ARGS (stop), rate,
+      GST_ELEMENT_NAME (pipeline));
+
+  s_event = gst_event_new_seek (rate,
+      GST_FORMAT_TIME,
+      (flush ? GST_SEEK_FLAG_FLUSH : 0) |
+      (segment ? GST_SEEK_FLAG_SEGMENT : 0),
+      GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, stop);
+
+  res = gst_element_send_event (pipeline, s_event);
+  if (!res)
+    g_print ("seek failed\n");
+
+  gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
+
+  return TRUE;
+}
+
+static gboolean
+start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+  if (update_id) {
+    g_source_remove (update_id);
+    update_id = 0;
+  }
+
+  if (changed_id == 0) {
+    changed_id =
+        g_signal_connect (hscale, "value_changed", G_CALLBACK (seek_cb),
+        pipeline);
+  }
+
+  GST_DEBUG ("start seek");
+
+  return FALSE;
+}
+
+static gboolean
+stop_seek (GtkWidget * widget, gpointer user_data)
+{
+  update_id =
+      g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline);
+
+  GST_DEBUG ("stop seek");
+
+  if (changed_id) {
+    g_source_remove (changed_id);
+    changed_id = 0;
+  }
+
+  do_seek (hscale, FALSE, FALSE);
+
+  return FALSE;
+}
+
+static void
+play_cb (GtkButton * button, gpointer data)
+{
+  GstState state;
+
+  gst_element_get_state (pipeline, &state, NULL, GST_CLOCK_TIME_NONE);
+  if (state != GST_STATE_PLAYING) {
+    g_print ("PLAY pipeline\n");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    update_id =
+        g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline);
+  }
+}
+
+static void
+pause_cb (GtkButton * button, gpointer data)
+{
+  GstState state;
+
+  gst_element_get_state (pipeline, &state, NULL, GST_CLOCK_TIME_NONE);
+  if (state != GST_STATE_PAUSED) {
+    g_print ("PAUSE pipeline\n");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    g_source_remove (update_id);
+  }
+}
+
+static void
+stop_cb (GtkButton * button, gpointer data)
+{
+  GstState state;
+
+  gst_element_get_state (pipeline, &state, NULL, GST_CLOCK_TIME_NONE);
+  if (state != GST_STATE_READY) {
+    g_print ("READY pipeline\n");
+    gst_element_set_state (pipeline, GST_STATE_READY);
+    /* position and speed return to their default values */
+    gtk_adjustment_set_value (adjustment, 0.0);
+    gtk_adjustment_set_value (sadjustment, 1.0);
+    g_source_remove (update_id);
+  }
+}
+
+static void
+print_message (GstMessage * message)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("Got Message from element \"%s\"\n",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))));
+
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  }
+}
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, gpointer data)
+{
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_EOS:
+      g_print ("EOS\n");
+      break;
+    case GST_MESSAGE_ERROR:
+    case GST_MESSAGE_WARNING:
+      print_message (message);
+      break;
+    case GST_MESSAGE_SEGMENT_START:
+      break;
+    case GST_MESSAGE_SEGMENT_DONE:
+      GST_DEBUG ("segment_done, doing next seek");
+      if (!do_seek (hscale, FALSE, update_id == 0)) {
+        if (changed_id == 0) {
+          changed_id =
+              g_signal_connect (hscale, "value_changed", G_CALLBACK (seek_cb),
+              pipeline);
+        }
+      }
+      break;
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+typedef struct
+{
+  const gchar *name;
+  GstElement *(*func) (const gchar * location);
+}
+Pipeline;
+
+static Pipeline pipelines[] = {
+  {"wav", make_wav_pipeline},
+  {"playerbin", make_playerbin_pipeline},
+  {NULL, NULL},
+};
+
+#define NUM_TYPES       ((sizeof (pipelines) / sizeof (Pipeline)) - 1)
+
+static void
+print_usage (int argc, char **argv)
+{
+  gint i;
+
+  g_print ("usage: %s <type> <filename>\n", argv[0]);
+  g_print ("   possible types:\n");
+
+  for (i = 0; i < NUM_TYPES; i++) {
+    g_print ("     %d = %s\n", i, pipelines[i].name);
+  }
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window, *hbox, *vbox, *play_button, *pause_button, *stop_button;
+  GstBus *bus;
+  GOptionEntry options[] = {
+    {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+        "Verbose properties", NULL},
+    {NULL}
+  };
+  gint type;
+  GOptionContext *ctx;
+  GError *err = NULL;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx = g_option_context_new ("seek");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  GST_DEBUG_CATEGORY_INIT (scrubby_debug, "scrubby", 0, "scrubby example");
+
+  gtk_init (&argc, &argv);
+
+  if (argc != 3) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  type = atoi (argv[1]);
+
+  if (type < 0 || type >= NUM_TYPES) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  pipeline = pipelines[type].func (argv[2]);
+  g_assert (pipeline);
+
+  /* initialize gui elements ... */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  hbox = gtk_hbox_new (FALSE, 0);
+  vbox = gtk_vbox_new (FALSE, 0);
+  play_button = gtk_button_new_with_label ("play");
+  pause_button = gtk_button_new_with_label ("pause");
+  stop_button = gtk_button_new_with_label ("stop");
+
+  adjustment =
+      GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, (gdouble) RANGE_PREC, 0.1,
+          1.0, 1.0));
+  hscale = gtk_hscale_new (adjustment);
+  gtk_scale_set_digits (GTK_SCALE (hscale), 2);
+
+  sadjustment =
+      GTK_ADJUSTMENT (gtk_adjustment_new (1.0, 0.0, 5.0, 0.1, 1.0, 0.0));
+  shscale = gtk_hscale_new (sadjustment);
+  gtk_scale_set_digits (GTK_SCALE (shscale), 2);
+
+  schanged_id =
+      g_signal_connect (shscale, "value_changed", G_CALLBACK (speed_cb),
+      pipeline);
+
+  g_signal_connect (hscale, "button_press_event", G_CALLBACK (start_seek),
+      pipeline);
+  g_signal_connect (hscale, "button_release_event", G_CALLBACK (stop_seek),
+      pipeline);
+  g_signal_connect (hscale, "format_value", G_CALLBACK (format_value),
+      pipeline);
+
+  /* do the packing stuff ... */
+  gtk_window_set_default_size (GTK_WINDOW (window), 96, 96);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  gtk_box_pack_start (GTK_BOX (hbox), play_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), pause_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), stop_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hscale, TRUE, TRUE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), shscale, TRUE, TRUE, 2);
+
+  /* connect things ... */
+  g_signal_connect (G_OBJECT (play_button), "clicked", G_CALLBACK (play_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (pause_button), "clicked", G_CALLBACK (pause_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (stop_button), "clicked", G_CALLBACK (stop_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (window), "delete_event", gtk_main_quit, NULL);
+
+  /* show the gui. */
+  gtk_widget_show_all (window);
+
+  if (verbose) {
+    g_signal_connect (pipeline, "deep_notify",
+        G_CALLBACK (gst_object_default_deep_notify), NULL);
+  }
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  g_assert (bus);
+
+  bus_watch = gst_bus_add_watch_full (bus,
+      G_PRIORITY_HIGH, bus_message, pipeline, NULL);
+
+  gtk_main ();
+
+  g_print ("NULL pipeline\n");
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  g_print ("free pipeline\n");
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/seek/seek.c b/tests/examples/seek/seek.c
new file mode 100644
index 0000000..4f73aaf
--- /dev/null
+++ b/tests/examples/seek/seek.c
@@ -0,0 +1,2167 @@
+/* GStreamer
+ *
+ * seek.c: seeking sample application
+ *
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *               2006 Stefan Kost <ensonic@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <math.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gst/gst.h>
+#include <string.h>
+
+#include <gdk/gdk.h>
+#if defined (GDK_WINDOWING_X11)
+#include <gdk/gdkx.h>
+#elif defined (GDK_WINDOWING_WIN32)
+#include <gdk/gdkwin32.h>
+#endif
+
+#include <gst/interfaces/videooverlay.h>
+
+#if (!GTK_CHECK_VERSION(2, 23, 0) || GTK_CHECK_VERSION(2, 90, 0)) && !GTK_CHECK_VERSION(2, 91, 1)
+#define gtk_combo_box_text_new gtk_combo_box_new_text
+#define gtk_combo_box_text_append_text gtk_combo_box_append_text
+#define gtk_combo_box_text_remove gtk_combo_box_remove_text
+#define GTK_COMBO_BOX_TEXT GTK_COMBO_BOX
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (seek_debug);
+#define GST_CAT_DEFAULT (seek_debug)
+
+#if !GTK_CHECK_VERSION (2, 17, 7)
+static void
+gtk_widget_get_allocation (GtkWidget * w, GtkAllocation * a)
+{
+  *a = w->allocation;
+}
+#endif
+
+/* configuration */
+
+#define SOURCE "filesrc"
+
+static gchar *opt_audiosink_str;        /* NULL */
+static gchar *opt_videosink_str;        /* NULL */
+
+#define FILL_INTERVAL 100
+//#define UPDATE_INTERVAL 500
+//#define UPDATE_INTERVAL 100
+#define UPDATE_INTERVAL 40
+
+/* number of milliseconds to play for after a seek */
+#define SCRUB_TIME 100
+
+/* timeout for gst_element_get_state() after a seek */
+#define SEEK_TIMEOUT 40 * GST_MSECOND
+
+#define DEFAULT_VIDEO_HEIGHT 300
+
+/* the state to go to when stop is pressed */
+#define STOP_STATE      GST_STATE_READY
+
+#define N_GRAD 1000.0
+
+static GList *seekable_elements = NULL;
+
+static gboolean accurate_seek = FALSE;
+static gboolean keyframe_seek = FALSE;
+static gboolean loop_seek = FALSE;
+static gboolean flush_seek = TRUE;
+static gboolean scrub = TRUE;
+static gboolean play_scrub = FALSE;
+static gboolean skip_seek = FALSE;
+static gdouble rate = 1.0;
+
+static GstElement *pipeline;
+static gint pipeline_type;
+static const gchar *pipeline_spec;
+static gint64 position = -1;
+static gint64 duration = -1;
+static GtkAdjustment *adjustment;
+static GtkWidget *hscale, *statusbar;
+static guint status_id = 0;
+static gboolean stats = FALSE;
+static gboolean verbose = FALSE;
+
+static gboolean is_live = FALSE;
+static gboolean buffering = FALSE;
+static GstBufferingMode mode;
+static gint64 buffering_left;
+static GstState state = GST_STATE_NULL;
+static guint update_id = 0;
+static guint seek_timeout_id = 0;
+static gulong changed_id;
+static guint fill_id = 0;
+
+static gint n_video = 0, n_audio = 0, n_text = 0;
+static gboolean need_streams = TRUE;
+static GtkWidget *video_combo, *audio_combo, *text_combo, *vis_combo;
+static GtkWidget *vis_checkbox, *video_checkbox, *audio_checkbox;
+static GtkWidget *text_checkbox, *mute_checkbox, *volume_spinbutton;
+static GtkWidget *skip_checkbox, *video_window, *download_checkbox;
+static GtkWidget *buffer_checkbox, *rate_spinbutton;
+
+static GStaticMutex state_mutex = G_STATIC_MUTEX_INIT;
+
+static GtkWidget *format_combo, *step_amount_spinbutton, *step_rate_spinbutton;
+static GtkWidget *shuttle_checkbox, *step_button;
+static GtkWidget *shuttle_hscale;
+static GtkAdjustment *shuttle_adjustment;
+
+static GList *paths = NULL, *l = NULL;
+
+/* we keep an array of the visualisation entries so that we can easily switch
+ * with the combo box index. */
+typedef struct
+{
+  GstElementFactory *factory;
+} VisEntry;
+
+static GArray *vis_entries;
+
+static void clear_streams (GstElement * pipeline);
+static void volume_notify_cb (GstElement * pipeline, GParamSpec * arg,
+    gpointer user_dat);
+
+/* pipeline construction */
+
+typedef struct
+{
+  const gchar *padname;
+  GstPad *target;
+  GstElement *bin;
+}
+dyn_link;
+
+static GstElement *
+gst_element_factory_make_or_warn (const gchar * type, const gchar * name)
+{
+  GstElement *element = gst_element_factory_make (type, name);
+
+#ifndef GST_DISABLE_PARSE
+  if (!element) {
+    /* Try parsing it as a pipeline description */
+    element = gst_parse_bin_from_description (type, TRUE, NULL);
+    if (element) {
+      gst_element_set_name (element, name);
+    }
+  }
+#endif
+
+  if (!element) {
+    g_warning ("Failed to create element %s of type %s", name, type);
+  }
+
+  return element;
+}
+
+static void
+playerbin_set_uri (GstElement * player, const gchar * location)
+{
+  gchar *uri;
+
+  /* Add "file://" prefix for convenience */
+  if (g_str_has_prefix (location, "/") || !gst_uri_is_valid (location)) {
+    uri = gst_filename_to_uri (location, NULL);
+    g_print ("Setting URI: %s\n", uri);
+    g_object_set (G_OBJECT (player), "uri", uri, NULL);
+    g_free (uri);
+  } else {
+    g_print ("Setting URI: %s\n", location);
+    g_object_set (G_OBJECT (player), "uri", location, NULL);
+  }
+}
+
+static GstElement *
+construct_playbin (const gchar * name, const gchar * location)
+{
+  GstElement *player;
+  GstElement *avsink;
+
+  player = gst_element_factory_make (name, "player");
+  g_assert (player);
+
+  playerbin_set_uri (player, location);
+
+  seekable_elements = g_list_prepend (seekable_elements, player);
+
+  avsink = gst_element_factory_make_or_warn (opt_audiosink_str, "a_sink");
+  if (avsink)
+    g_object_set (player, "audio-sink", avsink, NULL);
+
+  avsink = gst_element_factory_make_or_warn (opt_videosink_str, "v_sink");
+  if (avsink)
+    g_object_set (player, "video-sink", avsink, NULL);
+
+  return player;
+}
+
+static GstElement *
+make_playbin_pipeline (const gchar * location)
+{
+  GstElement *pipeline = construct_playbin ("playbin", location);
+
+  /* FIXME: this is not triggered, playbin is not forwarding it from the sink */
+  g_signal_connect (pipeline, "notify::volume", G_CALLBACK (volume_notify_cb),
+      NULL);
+  return pipeline;
+}
+
+#ifndef GST_DISABLE_PARSE
+static GstElement *
+make_parselaunch_pipeline (const gchar * description)
+{
+  GstElement *pipeline;
+  GError *error = NULL;
+
+  pipeline = gst_parse_launch (description, &error);
+
+  seekable_elements = g_list_prepend (seekable_elements, pipeline);
+
+  return pipeline;
+}
+#endif
+
+typedef struct
+{
+  const gchar *name;
+  GstElement *(*func) (const gchar * location);
+}
+Pipeline;
+
+static Pipeline pipelines[] = {
+  {"playbin", make_playbin_pipeline},
+#ifndef GST_DISABLE_PARSE
+  {"parse-launch", make_parselaunch_pipeline},
+#endif
+  {NULL, NULL},
+};
+
+#define NUM_TYPES       ((sizeof (pipelines) / sizeof (Pipeline)) - 1)
+
+/* ui callbacks and helpers */
+
+static gchar *
+format_value (GtkScale * scale, gdouble value)
+{
+  gint64 real;
+  gint64 seconds;
+  gint64 subseconds;
+
+  real = value * duration / N_GRAD;
+  seconds = (gint64) real / GST_SECOND;
+  subseconds = (gint64) real / (GST_SECOND / N_GRAD);
+
+  return g_strdup_printf ("%02" G_GINT64_FORMAT ":%02" G_GINT64_FORMAT ":%02"
+      G_GINT64_FORMAT, seconds / 60, seconds % 60, subseconds % 100);
+}
+
+
+static gchar *
+shuttle_format_value (GtkScale * scale, gdouble value)
+{
+  return g_strdup_printf ("%0.*g", gtk_scale_get_digits (scale), value);
+}
+
+typedef struct
+{
+  const gchar *name;
+  const GstFormat format;
+}
+seek_format;
+
+static seek_format seek_formats[] = {
+  {"tim", GST_FORMAT_TIME},
+  {"byt", GST_FORMAT_BYTES},
+  {"buf", GST_FORMAT_BUFFERS},
+  {"def", GST_FORMAT_DEFAULT},
+  {NULL, 0},
+};
+
+G_GNUC_UNUSED static void
+query_positions_elems (void)
+{
+  GList *walk = seekable_elements;
+
+  while (walk) {
+    GstElement *element = GST_ELEMENT (walk->data);
+    gint i = 0;
+
+    g_print ("positions %8.8s: ", GST_ELEMENT_NAME (element));
+    while (seek_formats[i].name) {
+      gint64 position, total;
+      GstFormat format;
+
+      format = seek_formats[i].format;
+
+      if (gst_element_query_position (element, format, &position) &&
+          gst_element_query_duration (element, format, &total)) {
+        g_print ("%s %13" G_GINT64_FORMAT " / %13" G_GINT64_FORMAT " | ",
+            seek_formats[i].name, position, total);
+      } else {
+        g_print ("%s %13.13s / %13.13s | ", seek_formats[i].name, "*NA*",
+            "*NA*");
+      }
+      i++;
+    }
+    g_print (" %s\n", GST_ELEMENT_NAME (element));
+
+    walk = g_list_next (walk);
+  }
+}
+
+static gboolean start_seek (GtkWidget * widget, GdkEventButton * event,
+    gpointer user_data);
+static gboolean stop_seek (GtkWidget * widget, GdkEventButton * event,
+    gpointer user_data);
+static void seek_cb (GtkWidget * widget);
+
+static void
+set_scale (gdouble value)
+{
+  g_signal_handlers_block_by_func (hscale, (void *) start_seek,
+      (void *) pipeline);
+  g_signal_handlers_block_by_func (hscale, (void *) stop_seek,
+      (void *) pipeline);
+  g_signal_handlers_block_by_func (hscale, (void *) seek_cb, (void *) pipeline);
+  gtk_adjustment_set_value (adjustment, value);
+  g_signal_handlers_unblock_by_func (hscale, (void *) start_seek,
+      (void *) pipeline);
+  g_signal_handlers_unblock_by_func (hscale, (void *) stop_seek,
+      (void *) pipeline);
+  g_signal_handlers_unblock_by_func (hscale, (void *) seek_cb,
+      (void *) pipeline);
+  gtk_widget_queue_draw (hscale);
+}
+
+static gboolean
+update_fill (gpointer data)
+{
+  if (seekable_elements) {
+    GstElement *element = GST_ELEMENT (seekable_elements->data);
+    GstQuery *query;
+
+    query = gst_query_new_buffering (GST_FORMAT_PERCENT);
+    if (gst_element_query (element, query)) {
+      gint64 start, stop, buffering_total;
+      GstFormat format;
+      gdouble fill;
+      gboolean busy;
+      gint percent;
+      GstBufferingMode mode;
+      gint avg_in, avg_out;
+      gint64 buffering_left;
+
+      gst_query_parse_buffering_percent (query, &busy, &percent);
+      gst_query_parse_buffering_range (query, &format, &start, &stop,
+          &buffering_total);
+      gst_query_parse_buffering_stats (query, &mode, &avg_in, &avg_out,
+          &buffering_left);
+
+      /* note that we could start the playback when buffering_left < remaining
+       * playback time */
+      GST_DEBUG ("buffering total %" G_GINT64_FORMAT " ms, left %"
+          G_GINT64_FORMAT " ms", buffering_total, buffering_left);
+      GST_DEBUG ("start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT,
+          start, stop);
+
+      if (stop != -1)
+        fill = N_GRAD * stop / GST_FORMAT_PERCENT_MAX;
+      else
+        fill = N_GRAD;
+
+      gtk_range_set_fill_level (GTK_RANGE (hscale), fill);
+    }
+    gst_query_unref (query);
+  }
+  return TRUE;
+}
+
+static gboolean
+update_scale (gpointer data)
+{
+  if (seekable_elements) {
+    GstElement *element = GST_ELEMENT (seekable_elements->data);
+
+    gst_element_query_position (element, GST_FORMAT_TIME, &position);
+    gst_element_query_duration (element, GST_FORMAT_TIME, &duration);
+  }
+
+  if (stats) {
+    query_positions_elems ();
+  }
+
+  if (position >= duration)
+    duration = position;
+
+  if (duration > 0) {
+    set_scale (position * N_GRAD / duration);
+  }
+
+  /* FIXME: see make_playerbin2_pipeline() and volume_notify_cb() */
+  if (pipeline_type == 16) {
+    g_object_notify (G_OBJECT (pipeline), "volume");
+  }
+
+  return TRUE;
+}
+
+static void do_seek (GtkWidget * widget);
+static void connect_bus_signals (GstElement * pipeline);
+static void set_update_scale (gboolean active);
+static void set_update_fill (gboolean active);
+
+static gboolean
+end_scrub (GtkWidget * widget)
+{
+  GST_DEBUG ("end scrub, PAUSE");
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  seek_timeout_id = 0;
+
+  return FALSE;
+}
+
+static gboolean
+send_event (GstEvent * event)
+{
+  gboolean res = FALSE;
+  GList *walk = seekable_elements;
+
+  while (walk) {
+    GstElement *seekable = GST_ELEMENT (walk->data);
+
+    GST_DEBUG ("send event on element %s", GST_ELEMENT_NAME (seekable));
+
+    gst_event_ref (event);
+    res = gst_element_send_event (seekable, event);
+
+    walk = g_list_next (walk);
+  }
+  gst_event_unref (event);
+  return res;
+}
+
+static void
+do_seek (GtkWidget * widget)
+{
+  gint64 real;
+  gboolean res = FALSE;
+  GstEvent *s_event;
+  GstSeekFlags flags;
+
+  real = gtk_range_get_value (GTK_RANGE (widget)) * duration / N_GRAD;
+
+  GST_DEBUG ("value=%f, real=%" G_GINT64_FORMAT,
+      gtk_range_get_value (GTK_RANGE (widget)), real);
+
+  flags = 0;
+  if (flush_seek)
+    flags |= GST_SEEK_FLAG_FLUSH;
+  if (accurate_seek)
+    flags |= GST_SEEK_FLAG_ACCURATE;
+  if (keyframe_seek)
+    flags |= GST_SEEK_FLAG_KEY_UNIT;
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  if (rate >= 0) {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, real, GST_SEEK_TYPE_SET,
+        GST_CLOCK_TIME_NONE);
+    GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
+        rate, GST_TIME_ARGS (real), GST_TIME_ARGS (duration));
+  } else {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, real);
+    GST_DEBUG ("seek with rate %lf to %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
+        rate, GST_TIME_ARGS (0), GST_TIME_ARGS (real));
+  }
+
+  res = send_event (s_event);
+
+  if (res) {
+    if (flush_seek) {
+      gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, SEEK_TIMEOUT);
+    } else {
+      set_update_scale (TRUE);
+    }
+  } else {
+    g_print ("seek failed\n");
+    set_update_scale (TRUE);
+  }
+}
+
+static void
+seek_cb (GtkWidget * widget)
+{
+  /* If the timer hasn't expired yet, then the pipeline is running */
+  if (play_scrub && seek_timeout_id != 0) {
+    GST_DEBUG ("do scrub seek, PAUSED");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  }
+
+  GST_DEBUG ("do seek");
+  do_seek (widget);
+
+  if (play_scrub) {
+    GST_DEBUG ("do scrub seek, PLAYING");
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+    if (seek_timeout_id == 0) {
+      seek_timeout_id =
+          g_timeout_add (SCRUB_TIME, (GSourceFunc) end_scrub, widget);
+    }
+  }
+}
+
+static void
+set_update_fill (gboolean active)
+{
+  GST_DEBUG ("fill scale is %d", active);
+
+  if (active) {
+    if (fill_id == 0) {
+      fill_id =
+          g_timeout_add (FILL_INTERVAL, (GSourceFunc) update_fill, pipeline);
+    }
+  } else {
+    if (fill_id) {
+      g_source_remove (fill_id);
+      fill_id = 0;
+    }
+  }
+}
+
+static void
+set_update_scale (gboolean active)
+{
+
+  GST_DEBUG ("update scale is %d", active);
+
+  if (active) {
+    if (update_id == 0) {
+      update_id =
+          g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline);
+    }
+  } else {
+    if (update_id) {
+      g_source_remove (update_id);
+      update_id = 0;
+    }
+  }
+}
+
+static gboolean
+start_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+  if (event->type != GDK_BUTTON_PRESS)
+    return FALSE;
+
+  set_update_scale (FALSE);
+
+  if (state == GST_STATE_PLAYING && flush_seek && scrub) {
+    GST_DEBUG ("start scrub seek, PAUSE");
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  }
+
+  if (changed_id == 0 && flush_seek && scrub) {
+    changed_id =
+        g_signal_connect (hscale, "value_changed", G_CALLBACK (seek_cb),
+        pipeline);
+  }
+
+  return FALSE;
+}
+
+static gboolean
+stop_seek (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
+{
+  if (changed_id) {
+    g_signal_handler_disconnect (hscale, changed_id);
+    changed_id = 0;
+  }
+
+  if (!flush_seek || !scrub) {
+    GST_DEBUG ("do final seek");
+    do_seek (widget);
+  }
+
+  if (seek_timeout_id != 0) {
+    g_source_remove (seek_timeout_id);
+    seek_timeout_id = 0;
+    /* Still scrubbing, so the pipeline is playing, see if we need PAUSED
+     * instead. */
+    if (state == GST_STATE_PAUSED) {
+      GST_DEBUG ("stop scrub seek, PAUSED");
+      gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    }
+  } else {
+    if (state == GST_STATE_PLAYING) {
+      GST_DEBUG ("stop scrub seek, PLAYING");
+      gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    }
+  }
+
+  return FALSE;
+}
+
+static void
+play_cb (GtkButton * button, gpointer data)
+{
+  GstStateChangeReturn ret;
+
+  if (state != GST_STATE_PLAYING) {
+    g_print ("PLAY pipeline\n");
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+
+    ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+    switch (ret) {
+      case GST_STATE_CHANGE_FAILURE:
+        goto failed;
+      case GST_STATE_CHANGE_NO_PREROLL:
+        is_live = TRUE;
+        break;
+      default:
+        break;
+    }
+    state = GST_STATE_PLAYING;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Playing");
+  }
+
+  return;
+
+failed:
+  {
+    g_print ("PLAY failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Play failed");
+  }
+}
+
+static void
+pause_cb (GtkButton * button, gpointer data)
+{
+  g_static_mutex_lock (&state_mutex);
+  if (state != GST_STATE_PAUSED) {
+    GstStateChangeReturn ret;
+
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+    g_print ("PAUSE pipeline\n");
+    ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    switch (ret) {
+      case GST_STATE_CHANGE_FAILURE:
+        goto failed;
+      case GST_STATE_CHANGE_NO_PREROLL:
+        is_live = TRUE;
+        break;
+      default:
+        break;
+    }
+
+    state = GST_STATE_PAUSED;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Paused");
+  }
+  g_static_mutex_unlock (&state_mutex);
+
+  return;
+
+failed:
+  {
+    g_static_mutex_unlock (&state_mutex);
+    g_print ("PAUSE failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Pause failed");
+  }
+}
+
+static void
+stop_cb (GtkButton * button, gpointer data)
+{
+  if (state != STOP_STATE) {
+    GstStateChangeReturn ret;
+
+    g_print ("READY pipeline\n");
+    gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+
+    g_static_mutex_lock (&state_mutex);
+    ret = gst_element_set_state (pipeline, STOP_STATE);
+    if (ret == GST_STATE_CHANGE_FAILURE)
+      goto failed;
+
+    state = STOP_STATE;
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped");
+
+    is_live = FALSE;
+    buffering = FALSE;
+    set_update_scale (FALSE);
+    set_scale (0.0);
+    set_update_fill (FALSE);
+
+    if (pipeline_type == 16)
+      clear_streams (pipeline);
+    g_static_mutex_unlock (&state_mutex);
+
+#if 0
+    /* if one uses parse_launch, play, stop and play again it fails as all the
+     * pads after the demuxer can't be reconnected
+     */
+    if (!strcmp (pipelines[pipeline_type].name, "parse-launch")) {
+      gst_element_set_state (pipeline, GST_STATE_NULL);
+      gst_object_unref (pipeline);
+
+      g_list_free (seekable_elements);
+      seekable_elements = NULL;
+
+      pipeline = pipelines[pipeline_type].func (pipeline_spec);
+      g_assert (pipeline);
+      gst_element_set_state (pipeline, STOP_STATE);
+      connect_bus_signals (pipeline);
+    }
+#endif
+  }
+  return;
+
+failed:
+  {
+    g_static_mutex_unlock (&state_mutex);
+    g_print ("STOP failed\n");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stop failed");
+  }
+}
+
+static void
+accurate_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  accurate_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+key_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  keyframe_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+loop_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  loop_seek = gtk_toggle_button_get_active (button);
+  if (state == GST_STATE_PLAYING) {
+    do_seek (hscale);
+  }
+}
+
+static void
+flush_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  flush_seek = gtk_toggle_button_get_active (button);
+}
+
+static void
+scrub_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  scrub = gtk_toggle_button_get_active (button);
+}
+
+static void
+play_scrub_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  play_scrub = gtk_toggle_button_get_active (button);
+}
+
+static void
+skip_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  skip_seek = gtk_toggle_button_get_active (button);
+  if (state == GST_STATE_PLAYING) {
+    do_seek (hscale);
+  }
+}
+
+static void
+rate_spinbutton_changed_cb (GtkSpinButton * button, GstPipeline * pipeline)
+{
+  gboolean res = FALSE;
+  GstEvent *s_event;
+  GstSeekFlags flags;
+
+  rate = gtk_spin_button_get_value (button);
+
+  GST_DEBUG ("rate changed to %lf", rate);
+
+  flags = 0;
+  if (flush_seek)
+    flags |= GST_SEEK_FLAG_FLUSH;
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (accurate_seek)
+    flags |= GST_SEEK_FLAG_ACCURATE;
+  if (keyframe_seek)
+    flags |= GST_SEEK_FLAG_KEY_UNIT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  if (rate >= 0.0) {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, position,
+        GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+  } else {
+    s_event = gst_event_new_seek (rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, position);
+  }
+
+  res = send_event (s_event);
+
+  if (res) {
+    if (flush_seek) {
+      gst_element_get_state (GST_ELEMENT (pipeline), NULL, NULL, SEEK_TIMEOUT);
+    }
+  } else
+    g_print ("seek failed\n");
+}
+
+static void
+update_flag (GstPipeline * pipeline, gint num, gboolean state)
+{
+  gint flags;
+
+  g_object_get (pipeline, "flags", &flags, NULL);
+  if (state)
+    flags |= (1 << num);
+  else
+    flags &= ~(1 << num);
+  g_object_set (pipeline, "flags", flags, NULL);
+}
+
+static void
+vis_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 3, state);
+  gtk_widget_set_sensitive (vis_combo, state);
+}
+
+static void
+audio_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 1, state);
+  gtk_widget_set_sensitive (audio_combo, state);
+}
+
+static void
+video_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 0, state);
+  gtk_widget_set_sensitive (video_combo, state);
+}
+
+static void
+text_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 2, state);
+  gtk_widget_set_sensitive (text_combo, state);
+}
+
+static void
+mute_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean mute;
+
+  mute = gtk_toggle_button_get_active (button);
+  g_object_set (pipeline, "mute", mute, NULL);
+}
+
+static void
+download_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 7, state);
+}
+
+static void
+buffer_toggle_cb (GtkToggleButton * button, GstPipeline * pipeline)
+{
+  gboolean state;
+
+  state = gtk_toggle_button_get_active (button);
+  update_flag (pipeline, 8, state);
+}
+
+static void
+clear_streams (GstElement * pipeline)
+{
+  gint i;
+
+  /* remove previous info */
+  for (i = 0; i < n_video; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (video_combo), 0);
+  for (i = 0; i < n_audio; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (audio_combo), 0);
+  for (i = 0; i < n_text; i++)
+    gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (text_combo), 0);
+
+  n_audio = n_video = n_text = 0;
+  gtk_widget_set_sensitive (video_combo, FALSE);
+  gtk_widget_set_sensitive (audio_combo, FALSE);
+  gtk_widget_set_sensitive (text_combo, FALSE);
+
+  need_streams = TRUE;
+}
+
+static void
+update_streams (GstPipeline * pipeline)
+{
+  gint i;
+
+  if (pipeline_type == 16 && need_streams) {
+    GstTagList *tags;
+    gchar *name, *str;
+    gint active_idx;
+    gboolean state;
+
+    /* remove previous info */
+    clear_streams (GST_ELEMENT_CAST (pipeline));
+
+    /* here we get and update the different streams detected by playbin2 */
+    g_object_get (pipeline, "n-video", &n_video, NULL);
+    g_object_get (pipeline, "n-audio", &n_audio, NULL);
+    g_object_get (pipeline, "n-text", &n_text, NULL);
+
+    g_print ("video %d, audio %d, text %d\n", n_video, n_audio, n_text);
+
+    active_idx = 0;
+    for (i = 0; i < n_video; i++) {
+      g_signal_emit_by_name (pipeline, "get-video-tags", i, &tags);
+      if (tags) {
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("video %d: %s\n", i, str);
+        g_free (str);
+      }
+      /* find good name for the label */
+      name = g_strdup_printf ("video %d", i + 1);
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (video_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (video_checkbox));
+    gtk_widget_set_sensitive (video_combo, state && n_video > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (video_combo), active_idx);
+
+    active_idx = 0;
+    for (i = 0; i < n_audio; i++) {
+      g_signal_emit_by_name (pipeline, "get-audio-tags", i, &tags);
+      if (tags) {
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("audio %d: %s\n", i, str);
+        g_free (str);
+      }
+      /* find good name for the label */
+      name = g_strdup_printf ("audio %d", i + 1);
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (audio_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (audio_checkbox));
+    gtk_widget_set_sensitive (audio_combo, state && n_audio > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (audio_combo), active_idx);
+
+    active_idx = 0;
+    for (i = 0; i < n_text; i++) {
+      g_signal_emit_by_name (pipeline, "get-text-tags", i, &tags);
+
+      name = NULL;
+      if (tags) {
+        const GValue *value;
+
+        str = gst_structure_to_string ((GstStructure *) tags);
+        g_print ("text %d: %s\n", i, str);
+        g_free (str);
+
+        /* get the language code if we can */
+        value = gst_tag_list_get_value_index (tags, GST_TAG_LANGUAGE_CODE, 0);
+        if (value && G_VALUE_HOLDS_STRING (value)) {
+          name = g_strdup_printf ("text %s", g_value_get_string (value));
+        }
+      }
+      /* find good name for the label if we didn't use a tag */
+      if (name == NULL)
+        name = g_strdup_printf ("text %d", i + 1);
+
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (text_combo), name);
+      g_free (name);
+    }
+    state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (text_checkbox));
+    gtk_widget_set_sensitive (text_combo, state && n_text > 0);
+    gtk_combo_box_set_active (GTK_COMBO_BOX (text_combo), active_idx);
+
+    need_streams = FALSE;
+  }
+}
+
+static void
+video_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current video track %d\n", active);
+  g_object_set (pipeline, "current-video", active, NULL);
+}
+
+static void
+audio_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current audio track %d\n", active);
+  g_object_set (pipeline, "current-audio", active, NULL);
+}
+
+static void
+text_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  gint active;
+
+  active = gtk_combo_box_get_active (combo);
+
+  g_print ("setting current text track %d\n", active);
+  g_object_set (pipeline, "current-text", active, NULL);
+}
+
+static gboolean
+filter_features (GstPluginFeature * feature, gpointer data)
+{
+  GstElementFactory *f;
+
+  if (!GST_IS_ELEMENT_FACTORY (feature))
+    return FALSE;
+  f = GST_ELEMENT_FACTORY (feature);
+  if (!g_strrstr (gst_element_factory_get_klass (f), "Visualization"))
+    return FALSE;
+
+  return TRUE;
+}
+
+static void
+init_visualization_features (void)
+{
+  GList *list, *walk;
+
+  vis_entries = g_array_new (FALSE, FALSE, sizeof (VisEntry));
+
+  list = gst_registry_feature_filter (gst_registry_get_default (),
+      filter_features, FALSE, NULL);
+
+  for (walk = list; walk; walk = g_list_next (walk)) {
+    VisEntry entry;
+    const gchar *name;
+
+    entry.factory = GST_ELEMENT_FACTORY (walk->data);
+    name = gst_element_factory_get_longname (entry.factory);
+
+    g_array_append_val (vis_entries, entry);
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (vis_combo), name);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (vis_combo), 0);
+}
+
+static void
+vis_combo_cb (GtkComboBox * combo, GstPipeline * pipeline)
+{
+  guint index;
+  VisEntry *entry;
+  GstElement *element;
+
+  /* get the selected index and get the factory for this index */
+  index = gtk_combo_box_get_active (GTK_COMBO_BOX (vis_combo));
+  if (vis_entries->len > 0) {
+    entry = &g_array_index (vis_entries, VisEntry, index);
+
+    /* create an instance of the element from the factory */
+    element = gst_element_factory_create (entry->factory, NULL);
+    if (!element)
+      return;
+
+    /* set vis plugin for playbin2 */
+    g_object_set (pipeline, "vis-plugin", element, NULL);
+  }
+}
+
+static void
+volume_spinbutton_changed_cb (GtkSpinButton * button, GstPipeline * pipeline)
+{
+  gdouble volume;
+
+  volume = gtk_spin_button_get_value (button);
+
+  g_object_set (pipeline, "volume", volume, NULL);
+}
+
+static void
+volume_notify_cb (GstElement * pipeline, GParamSpec * arg, gpointer user_dat)
+{
+  gdouble cur_volume, new_volume;
+
+  if (volume_spinbutton == NULL)
+    return;
+
+  g_object_get (pipeline, "volume", &new_volume, NULL);
+  cur_volume = gtk_spin_button_get_value (GTK_SPIN_BUTTON (volume_spinbutton));
+  if (fabs (cur_volume - new_volume) > 0.001) {
+    g_signal_handlers_block_by_func (volume_spinbutton,
+        volume_spinbutton_changed_cb, pipeline);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (volume_spinbutton), new_volume);
+    g_signal_handlers_unblock_by_func (volume_spinbutton,
+        volume_spinbutton_changed_cb, pipeline);
+  }
+}
+
+static void
+shot_cb (GtkButton * button, gpointer data)
+{
+  GstBuffer *buffer;
+  GstCaps *caps;
+
+  /* convert to our desired format (RGB24) */
+  caps = gst_caps_new_simple ("video/x-raw-rgb",
+      "bpp", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24,
+      /* Note: we don't ask for a specific width/height here, so that
+       * videoscale can adjust dimensions from a non-1/1 pixel aspect
+       * ratio to a 1/1 pixel-aspect-ratio */
+      "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
+      "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+      "red_mask", G_TYPE_INT, 0xff0000,
+      "green_mask", G_TYPE_INT, 0x00ff00,
+      "blue_mask", G_TYPE_INT, 0x0000ff, NULL);
+
+  /* convert the latest frame to the requested format */
+  g_signal_emit_by_name (pipeline, "convert-frame", caps, &buffer);
+  gst_caps_unref (caps);
+
+  if (buffer) {
+    GstCaps *caps;
+    GstStructure *s;
+    gboolean res;
+    gint width, height;
+    GdkPixbuf *pixbuf;
+    GError *error = NULL;
+    guint8 *data;
+    gsize size;
+
+    /* get the snapshot buffer format now. We set the caps on the appsink so
+     * that it can only be an rgb buffer. The only thing we have not specified
+     * on the caps is the height, which is dependant on the pixel-aspect-ratio
+     * of the source material */
+#if 0
+    caps = GST_BUFFER_CAPS (buffer);
+#endif
+    /* FIXME, need to get the caps of the buffer somehow */
+    caps = NULL;
+    if (!caps) {
+      g_warning ("could not get snapshot format\n");
+      goto done;
+    }
+    s = gst_caps_get_structure (caps, 0);
+
+    /* we need to get the final caps on the buffer to get the size */
+    res = gst_structure_get_int (s, "width", &width);
+    res |= gst_structure_get_int (s, "height", &height);
+    if (!res) {
+      g_warning ("could not get snapshot dimension\n");
+      goto done;
+    }
+
+    /* create pixmap from buffer and save, gstreamer video buffers have a stride
+     * that is rounded up to the nearest multiple of 4 */
+    data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+    pixbuf = gdk_pixbuf_new_from_data (data,
+        GDK_COLORSPACE_RGB, FALSE, 8, width, height,
+        GST_ROUND_UP_4 (width * 3), NULL, NULL);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+    gst_buffer_unmap (buffer, data, size);
+
+  done:
+    gst_buffer_unref (buffer);
+  }
+}
+
+/* called when the Step button is pressed */
+static void
+step_cb (GtkButton * button, gpointer data)
+{
+  GstEvent *event;
+  GstFormat format;
+  guint64 amount;
+  gdouble rate;
+  gboolean flush, res;
+  gint active;
+
+  active = gtk_combo_box_get_active (GTK_COMBO_BOX (format_combo));
+  amount =
+      gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON
+      (step_amount_spinbutton));
+  rate = gtk_spin_button_get_value (GTK_SPIN_BUTTON (step_rate_spinbutton));
+  flush = TRUE;
+
+  switch (active) {
+    case 0:
+      format = GST_FORMAT_BUFFERS;
+      break;
+    case 1:
+      format = GST_FORMAT_TIME;
+      amount *= GST_MSECOND;
+      break;
+    default:
+      format = GST_FORMAT_UNDEFINED;
+      break;
+  }
+
+  event = gst_event_new_step (format, amount, rate, flush, FALSE);
+
+  res = send_event (event);
+
+  if (!res) {
+    g_print ("Sending step event failed\n");
+  }
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static gboolean shuttling = FALSE;
+static gdouble shuttle_rate = 0.0;
+static gdouble play_rate = 1.0;
+
+static void
+do_shuttle (GstElement * element)
+{
+  guint64 duration;
+
+  if (shuttling)
+    duration = 40 * GST_MSECOND;
+  else
+    duration = -1;
+
+  gst_element_send_event (element,
+      gst_event_new_step (GST_FORMAT_TIME, duration, shuttle_rate, FALSE,
+          FALSE));
+}
+
+static void
+msg_sync_step_done (GstBus * bus, GstMessage * message, GstElement * element)
+{
+  GstFormat format;
+  guint64 amount;
+  gdouble rate;
+  gboolean flush;
+  gboolean intermediate;
+  guint64 duration;
+  gboolean eos;
+
+  gst_message_parse_step_done (message, &format, &amount, &rate, &flush,
+      &intermediate, &duration, &eos);
+
+  if (eos) {
+    g_print ("stepped till EOS\n");
+    return;
+  }
+
+  if (g_static_mutex_trylock (&state_mutex)) {
+    if (shuttling)
+      do_shuttle (element);
+    g_static_mutex_unlock (&state_mutex);
+  } else {
+    /* ignore step messages that come while we are doing a state change */
+    g_print ("state change is busy\n");
+  }
+}
+
+static void
+shuttle_toggled (GtkToggleButton * button, GstElement * element)
+{
+  gboolean active;
+
+  active = gtk_toggle_button_get_active (button);
+
+  if (active != shuttling) {
+    shuttling = active;
+    g_print ("shuttling %s\n", shuttling ? "active" : "inactive");
+    if (active) {
+      shuttle_rate = 0.0;
+      play_rate = 1.0;
+      pause_cb (NULL, NULL);
+      gst_element_get_state (element, NULL, NULL, -1);
+    }
+  }
+}
+
+static void
+shuttle_rate_switch (GstElement * element)
+{
+  GstSeekFlags flags;
+  GstEvent *s_event;
+  gboolean res;
+
+  if (state == GST_STATE_PLAYING) {
+    /* pause when we need to */
+    pause_cb (NULL, NULL);
+    gst_element_get_state (element, NULL, NULL, -1);
+  }
+
+  if (play_rate == 1.0)
+    play_rate = -1.0;
+  else
+    play_rate = 1.0;
+
+  g_print ("rate changed to %lf %" GST_TIME_FORMAT "\n", play_rate,
+      GST_TIME_ARGS (position));
+
+  flags = GST_SEEK_FLAG_FLUSH;
+  flags |= GST_SEEK_FLAG_ACCURATE;
+
+  if (play_rate >= 0.0) {
+    s_event = gst_event_new_seek (play_rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, position,
+        GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+  } else {
+    s_event = gst_event_new_seek (play_rate,
+        GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+        GST_SEEK_TYPE_SET, position);
+  }
+  res = send_event (s_event);
+  if (res) {
+    gst_element_get_state (element, NULL, NULL, SEEK_TIMEOUT);
+  } else {
+    g_print ("seek failed\n");
+  }
+}
+
+static void
+shuttle_value_changed (GtkRange * range, GstElement * element)
+{
+  gdouble rate;
+
+  rate = gtk_adjustment_get_value (shuttle_adjustment);
+
+  if (rate == 0.0) {
+    g_print ("rate 0.0, pause\n");
+    pause_cb (NULL, NULL);
+    gst_element_get_state (element, NULL, NULL, -1);
+  } else {
+    g_print ("rate changed %0.3g\n", rate);
+
+    if ((rate < 0.0 && play_rate > 0.0) || (rate > 0.0 && play_rate < 0.0)) {
+      shuttle_rate_switch (element);
+    }
+
+    shuttle_rate = ABS (rate);
+    if (state != GST_STATE_PLAYING) {
+      do_shuttle (element);
+      play_cb (NULL, NULL);
+    }
+  }
+}
+
+static void
+msg_async_done (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  GST_DEBUG ("async done");
+  /* when we get ASYNC_DONE we can query position, duration and other
+   * properties */
+  update_scale (pipeline);
+
+  /* update the available streams */
+  update_streams (pipeline);
+}
+
+static void
+msg_state_changed (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+
+  /* We only care about state changed on the pipeline */
+  if (s && GST_MESSAGE_SRC (message) == GST_OBJECT_CAST (pipeline)) {
+    GstState old, new, pending;
+
+    gst_message_parse_state_changed (message, &old, &new, &pending);
+
+    /* When state of the pipeline changes to paused or playing we start updating scale */
+    if (new == GST_STATE_PLAYING) {
+      set_update_scale (TRUE);
+    } else {
+      set_update_scale (FALSE);
+    }
+  }
+}
+
+static void
+msg_segment_done (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  GstEvent *s_event;
+  GstSeekFlags flags;
+  gboolean res;
+  GstFormat format;
+
+  GST_DEBUG ("position is %" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+  gst_message_parse_segment_done (message, &format, &position);
+  GST_DEBUG ("end of segment at %" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+
+  flags = 0;
+  /* in the segment-done callback we never flush as this would not make sense
+   * for seamless playback. */
+  if (loop_seek)
+    flags |= GST_SEEK_FLAG_SEGMENT;
+  if (skip_seek)
+    flags |= GST_SEEK_FLAG_SKIP;
+
+  s_event = gst_event_new_seek (rate,
+      GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
+      GST_SEEK_TYPE_SET, duration);
+
+  GST_DEBUG ("restart loop with rate %lf to 0 / %" GST_TIME_FORMAT,
+      rate, GST_TIME_ARGS (duration));
+
+  res = send_event (s_event);
+  if (!res)
+    g_print ("segment seek failed\n");
+}
+
+/* in stream buffering mode we PAUSE the pipeline until we receive a 100%
+ * message */
+static void
+do_stream_buffering (gint percent)
+{
+  gchar *bufstr;
+
+  gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+  bufstr = g_strdup_printf ("Buffering...%d", percent);
+  gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, bufstr);
+  g_free (bufstr);
+
+  if (percent == 100) {
+    /* a 100% message means buffering is done */
+    buffering = FALSE;
+    /* if the desired state is playing, go back */
+    if (state == GST_STATE_PLAYING) {
+      /* no state management needed for live pipelines */
+      if (!is_live) {
+        fprintf (stderr, "Done buffering, setting pipeline to PLAYING ...\n");
+        gst_element_set_state (pipeline, GST_STATE_PLAYING);
+      }
+      gtk_statusbar_pop (GTK_STATUSBAR (statusbar), status_id);
+      gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Playing");
+    }
+  } else {
+    /* buffering busy */
+    if (buffering == FALSE && state == GST_STATE_PLAYING) {
+      /* we were not buffering but PLAYING, PAUSE  the pipeline. */
+      if (!is_live) {
+        fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n");
+        gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      }
+    }
+    buffering = TRUE;
+  }
+}
+
+static void
+do_download_buffering (gint percent)
+{
+  if (!buffering && percent < 100) {
+    gchar *bufstr;
+
+    buffering = TRUE;
+
+    bufstr = g_strdup_printf ("Downloading...");
+    gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, bufstr);
+    g_free (bufstr);
+
+    /* once we get a buffering message, we'll do the fill update */
+    set_update_fill (TRUE);
+
+    if (state == GST_STATE_PLAYING && !is_live) {
+      fprintf (stderr, "Downloading, setting pipeline to PAUSED ...\n");
+      gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      /* user has to manually start the playback */
+      state = GST_STATE_PAUSED;
+    }
+  }
+}
+
+static void
+msg_buffering (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  gint percent;
+
+  gst_message_parse_buffering (message, &percent);
+
+  /* get more stats */
+  gst_message_parse_buffering_stats (message, &mode, NULL, NULL,
+      &buffering_left);
+
+  switch (mode) {
+    case GST_BUFFERING_DOWNLOAD:
+      do_download_buffering (percent);
+      break;
+    case GST_BUFFERING_LIVE:
+      is_live = TRUE;
+    case GST_BUFFERING_TIMESHIFT:
+    case GST_BUFFERING_STREAM:
+      do_stream_buffering (percent);
+      break;
+  }
+}
+
+static void
+msg_clock_lost (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  g_print ("clock lost! PAUSE and PLAY to select a new clock\n");
+  if (state == GST_STATE_PLAYING) {
+    gst_element_set_state (pipeline, GST_STATE_PAUSED);
+    gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  }
+}
+
+#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32)
+
+static gulong embed_xid = 0;
+
+/* We set the xid here in response to the prepare-window-handle message via a
+ * bus sync handler because we don't know the actual videosink used from the
+ * start (as we don't know the pipeline, or bin elements such as autovideosink
+ * or gconfvideosink may be used which create the actual videosink only once
+ * the pipeline is started) */
+static GstBusSyncReply
+bus_sync_handler (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  GstElement *element;
+
+  if (!gst_is_video_overlay_prepare_window_handle_message (message))
+    return GST_BUS_PASS;
+
+  element = GST_ELEMENT (GST_MESSAGE_SRC (message));
+
+  g_print ("got prepare-window-handle, setting XID %lu\n", embed_xid);
+
+  if (g_object_class_find_property (G_OBJECT_GET_CLASS (element),
+          "force-aspect-ratio")) {
+    g_object_set (element, "force-aspect-ratio", TRUE, NULL);
+  }
+
+  /* Should have been initialised from main thread before (can't use
+   * GDK_WINDOW_XID here with Gtk+ >= 2.18, because the sync handler will
+   * be called from a streaming thread and GDK_WINDOW_XID maps to more than
+   * a simple structure lookup with Gtk+ >= 2.18, where 'more' is stuff that
+   * shouldn't be done from a non-GUI thread without explicit locking).  */
+  g_assert (embed_xid != 0);
+
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (element), embed_xid);
+  return GST_BUS_PASS;
+}
+#endif
+
+static gboolean
+handle_expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer data)
+{
+  if (state < GST_STATE_PAUSED) {
+    GtkAllocation allocation;
+    GdkWindow *window = gtk_widget_get_window (widget);
+    cairo_t *cr;
+
+    gtk_widget_get_allocation (widget, &allocation);
+    cr = gdk_cairo_create (window);
+    cairo_set_source_rgb (cr, 0, 0, 0);
+    cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
+    cairo_fill (cr);
+    cairo_destroy (cr);
+  }
+  return FALSE;
+}
+
+static void
+realize_cb (GtkWidget * widget, gpointer data)
+{
+#if GTK_CHECK_VERSION(2,18,0)
+  {
+    GdkWindow *window = gtk_widget_get_window (widget);
+
+    /* This is here just for pedagogical purposes, GDK_WINDOW_XID will call it
+     * as well */
+    if (!gdk_window_ensure_native (window))
+      g_error ("Couldn't create native window needed for GstVideoOverlay!");
+  }
+#endif
+
+#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32)
+  {
+    GdkWindow *window = gtk_widget_get_window (video_window);
+
+#if defined (GDK_WINDOWING_WIN32)
+    embed_xid = GDK_WINDOW_HWND (window);
+#else
+    embed_xid = GDK_WINDOW_XID (window);
+#endif
+    g_print ("Window realize: video window XID = %lu\n", embed_xid);
+  }
+#endif
+}
+
+static void
+msg_eos (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  message_received (bus, message, data);
+
+  /* Set new uri for playerbins and continue playback */
+  if (l && (pipeline_type == 14 || pipeline_type == 16)) {
+    stop_cb (NULL, NULL);
+    l = g_list_next (l);
+    if (l) {
+      playerbin_set_uri (GST_ELEMENT (data), l->data);
+      play_cb (NULL, NULL);
+    }
+  }
+}
+
+static void
+msg_step_done (GstBus * bus, GstMessage * message, GstPipeline * data)
+{
+  if (!shuttling)
+    message_received (bus, message, data);
+}
+
+static void
+connect_bus_signals (GstElement * pipeline)
+{
+  GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+
+#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32)
+  /* handle prepare-window-handle element message synchronously */
+  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler,
+      pipeline);
+#endif
+
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  gst_bus_enable_sync_message_emission (bus);
+
+  g_signal_connect (bus, "message::state-changed",
+      (GCallback) msg_state_changed, pipeline);
+  g_signal_connect (bus, "message::segment-done", (GCallback) msg_segment_done,
+      pipeline);
+  g_signal_connect (bus, "message::async-done", (GCallback) msg_async_done,
+      pipeline);
+
+  g_signal_connect (bus, "message::new-clock", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::clock-lost", (GCallback) msg_clock_lost,
+      pipeline);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) msg_eos, pipeline);
+  g_signal_connect (bus, "message::tag", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::element", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::segment-done", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::buffering", (GCallback) msg_buffering,
+      pipeline);
+//  g_signal_connect (bus, "message::step-done", (GCallback) msg_step_done,
+//      pipeline);
+  g_signal_connect (bus, "message::step-start", (GCallback) msg_step_done,
+      pipeline);
+  g_signal_connect (bus, "sync-message::step-done",
+      (GCallback) msg_sync_step_done, pipeline);
+
+  gst_object_unref (bus);
+}
+
+/* Return GList of paths described in location string */
+static GList *
+handle_wildcards (const gchar * location)
+{
+  GList *res = NULL;
+  gchar *path = g_path_get_dirname (location);
+  gchar *pattern = g_path_get_basename (location);
+  GPatternSpec *pspec = g_pattern_spec_new (pattern);
+  GDir *dir = g_dir_open (path, 0, NULL);
+  const gchar *name;
+
+  g_print ("matching %s from %s\n", pattern, path);
+
+  if (!dir) {
+    g_print ("opening directory %s failed\n", path);
+    goto out;
+  }
+
+  while ((name = g_dir_read_name (dir)) != NULL) {
+    if (g_pattern_match_string (pspec, name)) {
+      res = g_list_append (res, g_strjoin ("/", path, name, NULL));
+      g_print ("  found clip %s\n", name);
+    }
+  }
+
+  g_dir_close (dir);
+out:
+  g_pattern_spec_free (pspec);
+  g_free (pattern);
+  g_free (path);
+
+  return res;
+}
+
+static void
+delete_event_cb (void)
+{
+  stop_cb (NULL, NULL);
+  gtk_main_quit ();
+}
+
+static void
+print_usage (int argc, char **argv)
+{
+  gint i;
+
+  g_print ("usage: %s <type> <filename>\n", argv[0]);
+  g_print ("   possible types:\n");
+
+  for (i = 0; i < NUM_TYPES; i++) {
+    g_print ("     %d = %s\n", i, pipelines[i].name);
+  }
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window, *hbox, *vbox, *panel, *expander, *pb2vbox, *boxes,
+      *flagtable, *boxes2, *step;
+  GtkWidget *play_button, *pause_button, *stop_button, *shot_button;
+  GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox, *flush_checkbox;
+  GtkWidget *scrub_checkbox, *play_scrub_checkbox;
+  GtkWidget *rate_label, *volume_label;
+  GOptionEntry options[] = {
+    {"audiosink", '\0', 0, G_OPTION_ARG_STRING, &opt_audiosink_str,
+        "audio sink to use (default: " DEFAULT_AUDIOSINK ")", NULL},
+    {"stats", 's', 0, G_OPTION_ARG_NONE, &stats,
+        "Show pad stats", NULL},
+    {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+        "Verbose properties", NULL},
+    {"videosink", '\0', 0, G_OPTION_ARG_STRING, &opt_videosink_str,
+        "video sink to use (default: " DEFAULT_VIDEOSINK ")", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GError *err = NULL;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx = g_option_context_new ("- test seeking in gsteamer");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  g_option_context_add_group (ctx, gtk_get_option_group (TRUE));
+
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  if (opt_audiosink_str == NULL)
+    opt_audiosink_str = g_strdup (DEFAULT_AUDIOSINK);
+
+  if (opt_videosink_str == NULL)
+    opt_videosink_str = g_strdup (DEFAULT_VIDEOSINK);
+
+  GST_DEBUG_CATEGORY_INIT (seek_debug, "seek", 0, "seek example");
+
+  if (argc != 3) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  pipeline_type = atoi (argv[1]);
+
+  if (pipeline_type < 0 || pipeline_type >= NUM_TYPES) {
+    print_usage (argc, argv);
+    exit (-1);
+  }
+
+  pipeline_spec = argv[2];
+
+  if (g_path_is_absolute (pipeline_spec) &&
+      (g_strrstr (pipeline_spec, "*") != NULL ||
+          g_strrstr (pipeline_spec, "?") != NULL)) {
+    paths = handle_wildcards (pipeline_spec);
+  } else {
+    paths = g_list_prepend (paths, g_strdup (pipeline_spec));
+  }
+
+  if (!paths) {
+    g_print ("opening %s failed\n", pipeline_spec);
+    exit (-1);
+  }
+
+  l = paths;
+
+  pipeline = pipelines[pipeline_type].func ((gchar *) l->data);
+  g_assert (pipeline);
+
+  /* initialize gui elements ... */
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  video_window = gtk_drawing_area_new ();
+  g_signal_connect (video_window, "expose-event",
+      G_CALLBACK (handle_expose_cb), NULL);
+  g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL);
+  gtk_widget_set_double_buffered (video_window, FALSE);
+
+  statusbar = gtk_statusbar_new ();
+  status_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "seek");
+  gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped");
+  hbox = gtk_hbox_new (FALSE, 0);
+  vbox = gtk_vbox_new (FALSE, 0);
+  flagtable = gtk_table_new (4, 2, FALSE);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
+
+  /* media controls */
+  play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
+  pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE);
+  stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP);
+
+  /* seek flags */
+  accurate_checkbox = gtk_check_button_new_with_label ("Accurate Seek");
+  key_checkbox = gtk_check_button_new_with_label ("Key-unit Seek");
+  loop_checkbox = gtk_check_button_new_with_label ("Loop");
+  flush_checkbox = gtk_check_button_new_with_label ("Flush");
+  scrub_checkbox = gtk_check_button_new_with_label ("Scrub");
+  play_scrub_checkbox = gtk_check_button_new_with_label ("Play Scrub");
+  skip_checkbox = gtk_check_button_new_with_label ("Play Skip");
+  rate_spinbutton = gtk_spin_button_new_with_range (-100, 100, 0.1);
+  gtk_spin_button_set_digits (GTK_SPIN_BUTTON (rate_spinbutton), 3);
+  rate_label = gtk_label_new ("Rate");
+
+  gtk_widget_set_tooltip_text (accurate_checkbox,
+      "accurate position is requested, this might be considerably slower for some formats");
+  gtk_widget_set_tooltip_text (key_checkbox,
+      "seek to the nearest keyframe. This might be faster but less accurate");
+  gtk_widget_set_tooltip_text (loop_checkbox, "loop playback");
+  gtk_widget_set_tooltip_text (flush_checkbox, "flush pipeline after seeking");
+  gtk_widget_set_tooltip_text (rate_spinbutton, "define the playback rate, "
+      "negative value trigger reverse playback");
+  gtk_widget_set_tooltip_text (scrub_checkbox, "show images while seeking");
+  gtk_widget_set_tooltip_text (play_scrub_checkbox, "play video while seeking");
+  gtk_widget_set_tooltip_text (skip_checkbox,
+      "Skip frames while playing at high frame rates");
+
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (flush_checkbox), TRUE);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (scrub_checkbox), TRUE);
+
+  gtk_spin_button_set_value (GTK_SPIN_BUTTON (rate_spinbutton), rate);
+
+  /* step expander */
+  {
+    GtkWidget *hbox;
+
+    step = gtk_expander_new ("step options");
+    hbox = gtk_hbox_new (FALSE, 0);
+
+    format_combo = gtk_combo_box_text_new ();
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo),
+        "frames");
+    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo),
+        "time (ms)");
+    gtk_combo_box_set_active (GTK_COMBO_BOX (format_combo), 0);
+    gtk_box_pack_start (GTK_BOX (hbox), format_combo, FALSE, FALSE, 2);
+
+    step_amount_spinbutton = gtk_spin_button_new_with_range (1, 1000, 1);
+    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (step_amount_spinbutton), 0);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_amount_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (hbox), step_amount_spinbutton, FALSE, FALSE,
+        2);
+
+    step_rate_spinbutton = gtk_spin_button_new_with_range (0.0, 100, 0.1);
+    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (step_rate_spinbutton), 3);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_rate_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (hbox), step_rate_spinbutton, FALSE, FALSE, 2);
+
+    step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD);
+    gtk_button_set_label (GTK_BUTTON (step_button), "Step");
+    gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2);
+
+    g_signal_connect (G_OBJECT (step_button), "clicked", G_CALLBACK (step_cb),
+        pipeline);
+
+    /* shuttle scale */
+    shuttle_checkbox = gtk_check_button_new_with_label ("Shuttle");
+    gtk_box_pack_start (GTK_BOX (hbox), shuttle_checkbox, FALSE, FALSE, 2);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (shuttle_checkbox), FALSE);
+    g_signal_connect (shuttle_checkbox, "toggled", G_CALLBACK (shuttle_toggled),
+        pipeline);
+
+    shuttle_adjustment =
+        GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0));
+    shuttle_hscale = gtk_hscale_new (shuttle_adjustment);
+    gtk_scale_set_digits (GTK_SCALE (shuttle_hscale), 2);
+    gtk_scale_set_value_pos (GTK_SCALE (shuttle_hscale), GTK_POS_TOP);
+    g_signal_connect (shuttle_hscale, "value_changed",
+        G_CALLBACK (shuttle_value_changed), pipeline);
+    g_signal_connect (shuttle_hscale, "format_value",
+        G_CALLBACK (shuttle_format_value), pipeline);
+
+    gtk_box_pack_start (GTK_BOX (hbox), shuttle_hscale, TRUE, TRUE, 2);
+
+    gtk_container_add (GTK_CONTAINER (step), hbox);
+  }
+
+  /* seek bar */
+  adjustment =
+      GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, N_GRAD, 0.1, 1.0, 1.0));
+  hscale = gtk_hscale_new (adjustment);
+  gtk_scale_set_digits (GTK_SCALE (hscale), 2);
+  gtk_scale_set_value_pos (GTK_SCALE (hscale), GTK_POS_RIGHT);
+  gtk_range_set_show_fill_level (GTK_RANGE (hscale), TRUE);
+  gtk_range_set_fill_level (GTK_RANGE (hscale), N_GRAD);
+
+  g_signal_connect (hscale, "button_press_event", G_CALLBACK (start_seek),
+      pipeline);
+  g_signal_connect (hscale, "button_release_event", G_CALLBACK (stop_seek),
+      pipeline);
+  g_signal_connect (hscale, "format_value", G_CALLBACK (format_value),
+      pipeline);
+
+  if (pipeline_type == 0) {
+    /* the playbin2 panel controls for the video/audio/subtitle tracks */
+    panel = gtk_hbox_new (FALSE, 0);
+    video_combo = gtk_combo_box_text_new ();
+    audio_combo = gtk_combo_box_text_new ();
+    text_combo = gtk_combo_box_text_new ();
+    gtk_widget_set_sensitive (video_combo, FALSE);
+    gtk_widget_set_sensitive (audio_combo, FALSE);
+    gtk_widget_set_sensitive (text_combo, FALSE);
+    gtk_box_pack_start (GTK_BOX (panel), video_combo, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (panel), audio_combo, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (panel), text_combo, TRUE, TRUE, 2);
+    g_signal_connect (G_OBJECT (video_combo), "changed",
+        G_CALLBACK (video_combo_cb), pipeline);
+    g_signal_connect (G_OBJECT (audio_combo), "changed",
+        G_CALLBACK (audio_combo_cb), pipeline);
+    g_signal_connect (G_OBJECT (text_combo), "changed",
+        G_CALLBACK (text_combo_cb), pipeline);
+    /* playbin2 panel for flag checkboxes and volume/mute */
+    boxes = gtk_hbox_new (FALSE, 0);
+    vis_checkbox = gtk_check_button_new_with_label ("Vis");
+    video_checkbox = gtk_check_button_new_with_label ("Video");
+    audio_checkbox = gtk_check_button_new_with_label ("Audio");
+    text_checkbox = gtk_check_button_new_with_label ("Text");
+    mute_checkbox = gtk_check_button_new_with_label ("Mute");
+    download_checkbox = gtk_check_button_new_with_label ("Download");
+    buffer_checkbox = gtk_check_button_new_with_label ("Buffer");
+    volume_label = gtk_label_new ("Volume");
+    volume_spinbutton = gtk_spin_button_new_with_range (0, 10.0, 0.1);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (volume_spinbutton), 1.0);
+    gtk_box_pack_start (GTK_BOX (boxes), video_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), audio_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), text_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), vis_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), mute_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), download_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), buffer_checkbox, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), volume_label, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes), volume_spinbutton, TRUE, TRUE, 2);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vis_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (audio_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (video_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (text_checkbox), TRUE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mute_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (download_checkbox), FALSE);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buffer_checkbox), FALSE);
+    g_signal_connect (G_OBJECT (vis_checkbox), "toggled",
+        G_CALLBACK (vis_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (audio_checkbox), "toggled",
+        G_CALLBACK (audio_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (video_checkbox), "toggled",
+        G_CALLBACK (video_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (text_checkbox), "toggled",
+        G_CALLBACK (text_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (mute_checkbox), "toggled",
+        G_CALLBACK (mute_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (download_checkbox), "toggled",
+        G_CALLBACK (download_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (buffer_checkbox), "toggled",
+        G_CALLBACK (buffer_toggle_cb), pipeline);
+    g_signal_connect (G_OBJECT (volume_spinbutton), "value_changed",
+        G_CALLBACK (volume_spinbutton_changed_cb), pipeline);
+    /* playbin2 panel for snapshot */
+    boxes2 = gtk_hbox_new (FALSE, 0);
+    shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE);
+    gtk_widget_set_tooltip_text (shot_button,
+        "save a screenshot .png in the current directory");
+    g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb),
+        pipeline);
+    vis_combo = gtk_combo_box_text_new ();
+    g_signal_connect (G_OBJECT (vis_combo), "changed",
+        G_CALLBACK (vis_combo_cb), pipeline);
+    gtk_widget_set_sensitive (vis_combo, FALSE);
+    gtk_box_pack_start (GTK_BOX (boxes2), shot_button, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (boxes2), vis_combo, TRUE, TRUE, 2);
+
+    /* fill the vis combo box and the array of factories */
+    init_visualization_features ();
+  } else {
+    panel = boxes = boxes2 = NULL;
+  }
+
+  /* do the packing stuff ... */
+  gtk_window_set_default_size (GTK_WINDOW (window), 250, 96);
+  /* FIXME: can we avoid this for audio only? */
+  gtk_widget_set_size_request (GTK_WIDGET (video_window), -1,
+      DEFAULT_VIDEO_HEIGHT);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  gtk_box_pack_start (GTK_BOX (vbox), video_window, TRUE, TRUE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), play_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), pause_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), stop_button, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (hbox), flagtable, FALSE, FALSE, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), accurate_checkbox, 0, 1, 0,
+      1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), flush_checkbox, 1, 2, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), loop_checkbox, 2, 3, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), key_checkbox, 0, 1, 1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), scrub_checkbox, 1, 2, 1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), play_scrub_checkbox, 2, 3,
+      1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), skip_checkbox, 3, 4, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_label, 4, 5, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_spinbutton, 4, 5, 1,
+      2);
+  if (panel && boxes && boxes2) {
+    expander = gtk_expander_new ("playbin2 options");
+    pb2vbox = gtk_vbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2);
+    gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2);
+    gtk_container_add (GTK_CONTAINER (expander), pb2vbox);
+    gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 2);
+  }
+  gtk_box_pack_start (GTK_BOX (vbox), step, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), hscale, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 2);
+
+  /* connect things ... */
+  g_signal_connect (G_OBJECT (play_button), "clicked", G_CALLBACK (play_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (pause_button), "clicked", G_CALLBACK (pause_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (stop_button), "clicked", G_CALLBACK (stop_cb),
+      pipeline);
+  g_signal_connect (G_OBJECT (accurate_checkbox), "toggled",
+      G_CALLBACK (accurate_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (key_checkbox), "toggled",
+      G_CALLBACK (key_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (loop_checkbox), "toggled",
+      G_CALLBACK (loop_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (flush_checkbox), "toggled",
+      G_CALLBACK (flush_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (scrub_checkbox), "toggled",
+      G_CALLBACK (scrub_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (play_scrub_checkbox), "toggled",
+      G_CALLBACK (play_scrub_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (skip_checkbox), "toggled",
+      G_CALLBACK (skip_toggle_cb), pipeline);
+  g_signal_connect (G_OBJECT (rate_spinbutton), "value_changed",
+      G_CALLBACK (rate_spinbutton_changed_cb), pipeline);
+
+  g_signal_connect (G_OBJECT (window), "delete-event", delete_event_cb, NULL);
+
+  /* show the gui. */
+  gtk_widget_show_all (window);
+
+  /* realize window now so that the video window gets created and we can
+   * obtain its XID before the pipeline is started up and the videosink
+   * asks for the XID of the window to render onto */
+  gtk_widget_realize (window);
+
+#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_WIN32)
+  /* we should have the XID now */
+  g_assert (embed_xid != 0);
+#endif
+
+  if (verbose) {
+    g_signal_connect (pipeline, "deep_notify",
+        G_CALLBACK (gst_object_default_deep_notify), NULL);
+  }
+
+  connect_bus_signals (pipeline);
+  gtk_main ();
+
+  g_print ("NULL pipeline\n");
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  g_print ("free pipeline\n");
+  gst_object_unref (pipeline);
+
+  g_list_foreach (paths, (GFunc) g_free, NULL);
+  g_list_free (paths);
+
+  return 0;
+}
diff --git a/tests/examples/seek/stepping.c b/tests/examples/seek/stepping.c
new file mode 100644
index 0000000..6f6997f
--- /dev/null
+++ b/tests/examples/seek/stepping.c
@@ -0,0 +1,124 @@
+/* GStreamer
+ *
+ * stepping.c: stepping sample application
+ *
+ * Copyright (C) 2009 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+
+static gdouble period = 0.0;
+
+static gboolean
+do_step (GstElement * bin)
+{
+  gdouble length;
+
+  length = sin (period);
+
+  period += M_PI / 40;
+
+  length += 1.1;
+  length *= 100 * GST_MSECOND;
+
+  gst_element_send_event (bin,
+      gst_event_new_step (GST_FORMAT_TIME, length, 1.0, TRUE, FALSE));
+
+  return FALSE;
+}
+
+static gboolean
+handle_message (GstBus * bus, GstMessage * message, gpointer data)
+{
+  GstElement *bin = GST_ELEMENT_CAST (data);
+
+  switch (message->type) {
+    case GST_MESSAGE_EOS:
+      g_message ("got EOS");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_WARNING:
+    case GST_MESSAGE_ERROR:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      if (message->type == GST_MESSAGE_ERROR)
+        gst_message_parse_error (message, &gerror, &debug);
+      else
+        gst_message_parse_warning (message, &gerror, &debug);
+
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_ASYNC_DONE:
+      g_timeout_add (40, (GSourceFunc) do_step, bin);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *bin;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>\n", argv[0]);
+    return -1;
+  }
+
+  /* create a new bin to hold the elements */
+  bin = gst_element_factory_make ("playbin2", "bin");
+  g_assert (bin);
+  g_object_set (bin, "uri", argv[1], NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
+  gst_bus_add_watch (bus, handle_message, bin);
+
+  /* go to the PAUSED state and wait for preroll */
+  g_message ("prerolling first frame");
+  gst_element_set_state (bin, GST_STATE_PAUSED);
+  gst_element_get_state (bin, NULL, NULL, -1);
+
+  loop = g_main_loop_new (NULL, TRUE);
+  g_main_loop_run (loop);
+
+  g_message ("finished");
+
+  /* stop the bin */
+  gst_element_set_state (bin, GST_STATE_NULL);
+
+  g_main_loop_unref (loop);
+  gst_object_unref (bus);
+
+  exit (0);
+}
diff --git a/tests/examples/seek/stepping2.c b/tests/examples/seek/stepping2.c
new file mode 100644
index 0000000..8cea180
--- /dev/null
+++ b/tests/examples/seek/stepping2.c
@@ -0,0 +1,142 @@
+/* GStreamer
+ *
+ * stepping.c: stepping sample application
+ *
+ * Copyright (C) 2009 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+
+static gdouble period = 0.0;
+
+static void
+do_step (GstElement * bin)
+{
+  gdouble rate;
+
+  rate = sin (period);
+
+  period += M_PI / 150;
+
+  rate += 1.2;
+
+  gst_element_send_event (bin,
+      gst_event_new_step (GST_FORMAT_TIME, 40 * GST_MSECOND, rate, FALSE,
+          FALSE));
+}
+
+static void
+handle_sync_message (GstBus * bus, GstMessage * message, gpointer data)
+{
+  GstElement *bin;
+
+  bin = GST_ELEMENT_CAST (data);
+
+  switch (message->type) {
+    case GST_MESSAGE_STEP_DONE:
+      do_step (bin);
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+handle_message (GstBus * bus, GstMessage * message, gpointer data)
+{
+  switch (message->type) {
+    case GST_MESSAGE_EOS:
+      g_message ("got EOS");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_WARNING:
+    case GST_MESSAGE_ERROR:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      if (message->type == GST_MESSAGE_ERROR)
+        gst_message_parse_error (message, &gerror, &debug);
+      else
+        gst_message_parse_warning (message, &gerror, &debug);
+
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+      if (message->type == GST_MESSAGE_ERROR)
+        g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *bin;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>\n", argv[0]);
+    return -1;
+  }
+
+  /* create a new bin to hold the elements */
+  bin = gst_element_factory_make ("playbin2", "bin");
+  g_assert (bin);
+  g_object_set (bin, "uri", argv[1], NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
+  gst_bus_add_signal_watch (bus);
+  gst_bus_enable_sync_message_emission (bus);
+
+  g_signal_connect (bus, "message", (GCallback) handle_message, bin);
+  g_signal_connect (bus, "sync-message", (GCallback) handle_sync_message, bin);
+
+  /* go to the PAUSED state and wait for preroll */
+  g_message ("prerolling first frame");
+  gst_element_set_state (bin, GST_STATE_PAUSED);
+  gst_element_get_state (bin, NULL, NULL, -1);
+
+  /* queue step */
+  do_step (bin);
+
+  gst_element_set_state (bin, GST_STATE_PLAYING);
+
+  loop = g_main_loop_new (NULL, TRUE);
+  g_main_loop_run (loop);
+
+  g_message ("finished");
+
+  /* stop the bin */
+  gst_element_set_state (bin, GST_STATE_NULL);
+
+  g_main_loop_unref (loop);
+  gst_object_unref (bus);
+
+  exit (0);
+}
diff --git a/tests/examples/snapshot/Makefile.am b/tests/examples/snapshot/Makefile.am
new file mode 100644
index 0000000..16830ee
--- /dev/null
+++ b/tests/examples/snapshot/Makefile.am
@@ -0,0 +1,10 @@
+if HAVE_GTK
+GTK_EXAMPLES=snapshot
+endif
+
+examples = $(GTK_EXAMPLES)
+
+noinst_PROGRAMS = $(examples)
+
+LIBS = $(GST_LIBS) $(GTK_LIBS)
+AM_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS)
diff --git a/tests/examples/snapshot/Makefile.in b/tests/examples/snapshot/Makefile.in
new file mode 100644
index 0000000..b92fb3c
--- /dev/null
+++ b/tests/examples/snapshot/Makefile.in
@@ -0,0 +1,690 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = $(am__EXEEXT_2)
+subdir = tests/examples/snapshot
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@HAVE_GTK_TRUE@am__EXEEXT_1 = snapshot$(EXEEXT)
+am__EXEEXT_2 = $(am__EXEEXT_1)
+PROGRAMS = $(noinst_PROGRAMS)
+snapshot_SOURCES = snapshot.c
+snapshot_OBJECTS = snapshot.$(OBJEXT)
+snapshot_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = snapshot.c
+DIST_SOURCES = snapshot.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = $(GST_LIBS) $(GTK_LIBS)
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_GTK_TRUE@GTK_EXAMPLES = snapshot
+examples = $(GTK_EXAMPLES)
+AM_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+snapshot$(EXEEXT): $(snapshot_OBJECTS) $(snapshot_DEPENDENCIES) 
+	@rm -f snapshot$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(snapshot_OBJECTS) $(snapshot_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snapshot.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/snapshot/snapshot.c b/tests/examples/snapshot/snapshot.c
new file mode 100644
index 0000000..6f9755e
--- /dev/null
+++ b/tests/examples/snapshot/snapshot.c
@@ -0,0 +1,160 @@
+/* GStreamer snapshot example
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+
+#include <stdlib.h>
+
+#define CAPS "video/x-raw-rgb,width=160,pixel-aspect-ratio=1/1,bpp=(int)24,depth=(int)24,endianness=(int)4321,red_mask=(int)0xff0000, green_mask=(int)0x00ff00, blue_mask=(int)0x0000ff"
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *pipeline, *sink;
+  gint width, height;
+  GstBuffer *buffer;
+  gchar *descr;
+  GError *error = NULL;
+  GdkPixbuf *pixbuf;
+  gint64 duration, position;
+  GstStateChangeReturn ret;
+  gboolean res;
+  guint8 *data;
+  gsize size;
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_print ("usage: %s <uri>\n Writes snapshot.png in the current directory\n",
+        argv[0]);
+    exit (-1);
+  }
+
+  /* create a new pipeline */
+  descr =
+      g_strdup_printf ("uridecodebin uri=%s ! videoconvert ! videoscale ! "
+      " appsink name=sink caps=\"" CAPS "\"", argv[1]);
+  pipeline = gst_parse_launch (descr, &error);
+
+  if (error != NULL) {
+    g_print ("could not construct pipeline: %s\n", error->message);
+    g_error_free (error);
+    exit (-1);
+  }
+
+  /* get sink */
+  sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
+
+  /* set to PAUSED to make the first frame arrive in the sink */
+  ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  switch (ret) {
+    case GST_STATE_CHANGE_FAILURE:
+      g_print ("failed to play the file\n");
+      exit (-1);
+    case GST_STATE_CHANGE_NO_PREROLL:
+      /* for live sources, we need to set the pipeline to PLAYING before we can
+       * receive a buffer. We don't do that yet */
+      g_print ("live sources not supported yet\n");
+      exit (-1);
+    default:
+      break;
+  }
+  /* This can block for up to 5 seconds. If your machine is really overloaded,
+   * it might time out before the pipeline prerolled and we generate an error. A
+   * better way is to run a mainloop and catch errors there. */
+  ret = gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
+  if (ret == GST_STATE_CHANGE_FAILURE) {
+    g_print ("failed to play the file\n");
+    exit (-1);
+  }
+
+  /* get the duration */
+  gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
+
+  if (duration != -1)
+    /* we have a duration, seek to 5% */
+    position = duration * 5 / 100;
+  else
+    /* no duration, seek to 1 second, this could EOS */
+    position = 1 * GST_SECOND;
+
+  /* seek to the a position in the file. Most files have a black first frame so
+   * by seeking to somewhere else we have a bigger chance of getting something
+   * more interesting. An optimisation would be to detect black images and then
+   * seek a little more */
+  gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH, position);
+
+  /* get the preroll buffer from appsink, this block untils appsink really
+   * prerolls */
+  g_signal_emit_by_name (sink, "pull-preroll", &buffer, NULL);
+
+  /* if we have a buffer now, convert it to a pixbuf. It's possible that we
+   * don't have a buffer because we went EOS right away or had an error. */
+  if (buffer) {
+    GstCaps *caps;
+    GstStructure *s;
+
+    /* get the snapshot buffer format now. We set the caps on the appsink so
+     * that it can only be an rgb buffer. The only thing we have not specified
+     * on the caps is the height, which is dependant on the pixel-aspect-ratio
+     * of the source material */
+#if 0
+    caps = GST_BUFFER_CAPS (buffer);
+#endif
+    /* FIXME, get buffer caps somehow */
+    caps = NULL;
+    if (!caps) {
+      g_print ("could not get snapshot format\n");
+      exit (-1);
+    }
+    s = gst_caps_get_structure (caps, 0);
+
+    /* we need to get the final caps on the buffer to get the size */
+    res = gst_structure_get_int (s, "width", &width);
+    res |= gst_structure_get_int (s, "height", &height);
+    if (!res) {
+      g_print ("could not get snapshot dimension\n");
+      exit (-1);
+    }
+
+    /* create pixmap from buffer and save, gstreamer video buffers have a stride
+     * that is rounded up to the nearest multiple of 4 */
+    data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+    pixbuf = gdk_pixbuf_new_from_data (data,
+        GDK_COLORSPACE_RGB, FALSE, 8, width, height,
+        GST_ROUND_UP_4 (width * 3), NULL, NULL);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+    gst_buffer_unmap (buffer, data, size);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+  } else {
+    g_print ("could not make snapshot\n");
+  }
+
+  /* cleanup and exit */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  exit (0);
+}
diff --git a/tests/examples/volume/Makefile.am b/tests/examples/volume/Makefile.am
new file mode 100644
index 0000000..7b2f067
--- /dev/null
+++ b/tests/examples/volume/Makefile.am
@@ -0,0 +1,6 @@
+if HAVE_GTK
+noinst_PROGRAMS = volume
+volume_SOURCES = volume.c
+volume_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) -D_GNU_SOURCE
+volume_LDADD = $(GST_LIBS) $(GTK_LIBS) $(LIBM)
+endif
diff --git a/tests/examples/volume/Makefile.in b/tests/examples/volume/Makefile.in
new file mode 100644
index 0000000..7c4ff45
--- /dev/null
+++ b/tests/examples/volume/Makefile.in
@@ -0,0 +1,710 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GTK_TRUE@noinst_PROGRAMS = volume$(EXEEXT)
+subdir = tests/examples/volume
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am__volume_SOURCES_DIST = volume.c
+@HAVE_GTK_TRUE@am_volume_OBJECTS = volume-volume.$(OBJEXT)
+volume_OBJECTS = $(am_volume_OBJECTS)
+am__DEPENDENCIES_1 =
+@HAVE_GTK_TRUE@volume_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@HAVE_GTK_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+volume_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(volume_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(volume_SOURCES)
+DIST_SOURCES = $(am__volume_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_GTK_TRUE@volume_SOURCES = volume.c
+@HAVE_GTK_TRUE@volume_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) -D_GNU_SOURCE
+@HAVE_GTK_TRUE@volume_LDADD = $(GST_LIBS) $(GTK_LIBS) $(LIBM)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/volume/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/volume/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+volume$(EXEEXT): $(volume_OBJECTS) $(volume_DEPENDENCIES) 
+	@rm -f volume$(EXEEXT)
+	$(AM_V_CCLD)$(volume_LINK) $(volume_OBJECTS) $(volume_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/volume-volume.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+volume-volume.o: volume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_CFLAGS) $(CFLAGS) -MT volume-volume.o -MD -MP -MF $(DEPDIR)/volume-volume.Tpo -c -o volume-volume.o `test -f 'volume.c' || echo '$(srcdir)/'`volume.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/volume-volume.Tpo $(DEPDIR)/volume-volume.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='volume.c' object='volume-volume.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_CFLAGS) $(CFLAGS) -c -o volume-volume.o `test -f 'volume.c' || echo '$(srcdir)/'`volume.c
+
+volume-volume.obj: volume.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_CFLAGS) $(CFLAGS) -MT volume-volume.obj -MD -MP -MF $(DEPDIR)/volume-volume.Tpo -c -o volume-volume.obj `if test -f 'volume.c'; then $(CYGPATH_W) 'volume.c'; else $(CYGPATH_W) '$(srcdir)/volume.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/volume-volume.Tpo $(DEPDIR)/volume-volume.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='volume.c' object='volume-volume.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_CFLAGS) $(CFLAGS) -c -o volume-volume.obj `if test -f 'volume.c'; then $(CYGPATH_W) 'volume.c'; else $(CYGPATH_W) '$(srcdir)/volume.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/examples/volume/volume.c b/tests/examples/volume/volume.c
new file mode 100644
index 0000000..59e4981
--- /dev/null
+++ b/tests/examples/volume/volume.c
@@ -0,0 +1,172 @@
+/* GStreamer
+ *
+ * volume.c: sample application to change the volume of a pipeline
+ *
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+
+/* global pointer for the scale widget */
+GtkWidget *elapsed;
+GtkWidget *scale;
+
+#ifndef M_LN10
+#define M_LN10 (log(10.0))
+#endif
+
+static void
+value_changed_callback (GtkWidget * widget, GstElement * volume)
+{
+  gdouble value;
+  gdouble level;
+
+  value = gtk_range_get_value (GTK_RANGE (widget));
+  level = exp (value / 20.0 * M_LN10);
+  g_print ("Value: %f dB, level: %f\n", value, level);
+  g_object_set (volume, "volume", level, NULL);
+}
+
+static void
+setup_gui (GstElement * volume)
+{
+  GtkWidget *window;
+  GtkWidget *vbox;
+  GtkWidget *label, *hbox;
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  g_signal_connect (window, "destroy", gtk_main_quit, NULL);
+
+  vbox = gtk_vbox_new (TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  /* elapsed widget */
+  hbox = gtk_hbox_new (TRUE, 0);
+  label = gtk_label_new ("Elapsed");
+  elapsed = gtk_label_new ("0.000");
+  gtk_container_add (GTK_CONTAINER (hbox), label);
+  gtk_container_add (GTK_CONTAINER (hbox), elapsed);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+
+  /* volume */
+  hbox = gtk_hbox_new (TRUE, 0);
+  label = gtk_label_new ("volume");
+  gtk_container_add (GTK_CONTAINER (hbox), label);
+  scale = gtk_hscale_new_with_range (-90.0, 10.0, 0.2);
+  gtk_range_set_value (GTK_RANGE (scale), 0.0);
+  gtk_widget_set_size_request (scale, 100, -1);
+  gtk_container_add (GTK_CONTAINER (hbox), scale);
+  gtk_container_add (GTK_CONTAINER (vbox), hbox);
+  g_signal_connect (scale, "value-changed",
+      G_CALLBACK (value_changed_callback), volume);
+
+  gtk_widget_show_all (GTK_WIDGET (window));
+}
+
+static void
+message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+  g_print ("message from \"%s\" (%s): ",
+      GST_STR_NULL (GST_ELEMENT_NAME (GST_MESSAGE_SRC (message))),
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+  if (s) {
+    gchar *sstr;
+
+    sstr = gst_structure_to_string (s);
+    g_print ("%s\n", sstr);
+    g_free (sstr);
+  } else {
+    g_print ("no message details\n");
+  }
+}
+
+static void
+eos_message_received (GstBus * bus, GstMessage * message,
+    GstPipeline * pipeline)
+{
+  message_received (bus, message, pipeline);
+  gtk_main_quit ();
+}
+
+int
+main (int argc, char *argv[])
+{
+
+  GstElement *pipeline = NULL;
+
+#ifndef GST_DISABLE_PARSE
+  GError *error = NULL;
+#endif
+  GstElement *volume;
+  GstBus *bus;
+
+#ifdef GST_DISABLE_PARSE
+  g_print ("GStreamer was built without pipeline parsing capabilities.\n");
+  g_print
+      ("Please rebuild GStreamer with pipeline parsing capabilities activated to use this example.\n");
+  return 1;
+#else
+  gst_init (&argc, &argv);
+  gtk_init (&argc, &argv);
+
+  pipeline = gst_parse_launchv ((const gchar **) &argv[1], &error);
+  if (error) {
+    g_print ("pipeline could not be constructed: %s\n", error->message);
+    g_print ("Please give a complete pipeline  with a 'volume' element.\n");
+    g_print ("Example: audiotestsrc ! volume ! %s\n", DEFAULT_AUDIOSINK);
+    g_error_free (error);
+    return 1;
+  }
+#endif
+  volume = gst_bin_get_by_name (GST_BIN (pipeline), "volume0");
+  if (volume == NULL) {
+    g_print ("Please give a pipeline with a 'volume' element in it\n");
+    return 1;
+  }
+
+  /* setup message handling */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::error", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::warning", (GCallback) message_received,
+      pipeline);
+  g_signal_connect (bus, "message::eos", (GCallback) eos_message_received,
+      pipeline);
+
+  /* setup GUI */
+  setup_gui (volume);
+
+  /* go to main loop */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  gtk_main ();
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/files/623663.mts b/tests/files/623663.mts
new file mode 100644
index 0000000..482ddf7
--- /dev/null
+++ b/tests/files/623663.mts
Binary files differ
diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am
new file mode 100644
index 0000000..9556f5e
--- /dev/null
+++ b/tests/files/Makefile.am
@@ -0,0 +1,6 @@
+EXTRA_DIST = \
+	623663.mts \
+	hls.m3u8 \
+	license-uris \
+	partialframe.mjpeg \
+	test.mp3
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
new file mode 100644
index 0000000..a146128
--- /dev/null
+++ b/tests/files/Makefile.in
@@ -0,0 +1,563 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests/files
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+	623663.mts \
+	hls.m3u8 \
+	license-uris \
+	partialframe.mjpeg \
+	test.mp3
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/files/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/files/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/files/hls.m3u8 b/tests/files/hls.m3u8
new file mode 100644
index 0000000..3acce06
--- /dev/null
+++ b/tests/files/hls.m3u8
@@ -0,0 +1,15 @@
+#EXTM3U
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=246221
+0240/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=38872
+0064/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=153059
+0150/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=455394
+0440/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=650356
+0640/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=861738
+0840/prog_index.m3u8
+#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1258987
+1240/prog_index.m3u8
diff --git a/tests/files/license-uris b/tests/files/license-uris
new file mode 100644
index 0000000..651a447
--- /dev/null
+++ b/tests/files/license-uris
@@ -0,0 +1,376 @@
+http://creativecommons.org/licenses/by/1.0/fi/
+http://creativecommons.org/licenses/by/1.0/il/
+http://creativecommons.org/licenses/by/1.0/nl/
+http://creativecommons.org/licenses/by/1.0/
+http://creativecommons.org/licenses/by/2.0/at/
+http://creativecommons.org/licenses/by/2.0/au/
+http://creativecommons.org/licenses/by/2.0/be/
+http://creativecommons.org/licenses/by/2.0/br/
+http://creativecommons.org/licenses/by/2.0/ca/
+http://creativecommons.org/licenses/by/2.0/cl/
+http://creativecommons.org/licenses/by/2.0/de/
+http://creativecommons.org/licenses/by/2.0/es/
+http://creativecommons.org/licenses/by/2.0/fr/
+http://creativecommons.org/licenses/by/2.0/hr/
+http://creativecommons.org/licenses/by/2.0/it/
+http://creativecommons.org/licenses/by/2.0/jp/
+http://creativecommons.org/licenses/by/2.0/kr/
+http://creativecommons.org/licenses/by/2.0/nl/
+http://creativecommons.org/licenses/by/2.0/pl/
+http://creativecommons.org/licenses/by/2.0/
+http://creativecommons.org/licenses/by/2.0/tw/
+http://creativecommons.org/licenses/by/2.0/uk/
+http://creativecommons.org/licenses/by/2.0/za/
+http://creativecommons.org/licenses/by/2.1/au/
+http://creativecommons.org/licenses/by/2.1/es/
+http://creativecommons.org/licenses/by/2.1/jp/
+http://creativecommons.org/licenses/by/2.5/ar/
+http://creativecommons.org/licenses/by/2.5/au/
+http://creativecommons.org/licenses/by/2.5/bg/
+http://creativecommons.org/licenses/by/2.5/br/
+http://creativecommons.org/licenses/by/2.5/ca/
+http://creativecommons.org/licenses/by/2.5/ch/
+http://creativecommons.org/licenses/by/2.5/cn/
+http://creativecommons.org/licenses/by/2.5/co/
+http://creativecommons.org/licenses/by/2.5/dk/
+http://creativecommons.org/licenses/by/2.5/es/
+http://creativecommons.org/licenses/by/2.5/hr/
+http://creativecommons.org/licenses/by/2.5/hu/
+http://creativecommons.org/licenses/by/2.5/il/
+http://creativecommons.org/licenses/by/2.5/in/
+http://creativecommons.org/licenses/by/2.5/it/
+http://creativecommons.org/licenses/by/2.5/mk/
+http://creativecommons.org/licenses/by/2.5/mt/
+http://creativecommons.org/licenses/by/2.5/mx/
+http://creativecommons.org/licenses/by/2.5/my/
+http://creativecommons.org/licenses/by/2.5/nl/
+http://creativecommons.org/licenses/by/2.5/pe/
+http://creativecommons.org/licenses/by/2.5/pl/
+http://creativecommons.org/licenses/by/2.5/pt/
+http://creativecommons.org/licenses/by/2.5/
+http://creativecommons.org/licenses/by/2.5/scotland/
+http://creativecommons.org/licenses/by/2.5/se/
+http://creativecommons.org/licenses/by/2.5/si/
+http://creativecommons.org/licenses/by/2.5/tw/
+http://creativecommons.org/licenses/by/2.5/za/
+http://creativecommons.org/licenses/by/3.0/
+http://creativecommons.org/licenses/by/3.0/us/
+http://creativecommons.org/licenses/by-nc/1.0/fi/
+http://creativecommons.org/licenses/by-nc/1.0/il/
+http://creativecommons.org/licenses/by-nc/1.0/nl/
+http://creativecommons.org/licenses/by-nc/1.0/
+http://creativecommons.org/licenses/by-nc/2.0/at/
+http://creativecommons.org/licenses/by-nc/2.0/au/
+http://creativecommons.org/licenses/by-nc/2.0/be/
+http://creativecommons.org/licenses/by-nc/2.0/br/
+http://creativecommons.org/licenses/by-nc/2.0/ca/
+http://creativecommons.org/licenses/by-nc/2.0/cl/
+http://creativecommons.org/licenses/by-nc/2.0/de/
+http://creativecommons.org/licenses/by-nc/2.0/es/
+http://creativecommons.org/licenses/by-nc/2.0/fr/
+http://creativecommons.org/licenses/by-nc/2.0/hr/
+http://creativecommons.org/licenses/by-nc/2.0/it/
+http://creativecommons.org/licenses/by-nc/2.0/jp/
+http://creativecommons.org/licenses/by-nc/2.0/kr/
+http://creativecommons.org/licenses/by-nc/2.0/nl/
+http://creativecommons.org/licenses/by-nc/2.0/pl/
+http://creativecommons.org/licenses/by-nc/2.0/
+http://creativecommons.org/licenses/by-nc/2.0/tw/
+http://creativecommons.org/licenses/by-nc/2.0/uk/
+http://creativecommons.org/licenses/by-nc/2.0/za/
+http://creativecommons.org/licenses/by-nc/2.1/au/
+http://creativecommons.org/licenses/by-nc/2.1/es/
+http://creativecommons.org/licenses/by-nc/2.1/jp/
+http://creativecommons.org/licenses/by-nc/2.5/ar/
+http://creativecommons.org/licenses/by-nc/2.5/au/
+http://creativecommons.org/licenses/by-nc/2.5/bg/
+http://creativecommons.org/licenses/by-nc/2.5/br/
+http://creativecommons.org/licenses/by-nc/2.5/ca/
+http://creativecommons.org/licenses/by-nc/2.5/ch/
+http://creativecommons.org/licenses/by-nc/2.5/cn/
+http://creativecommons.org/licenses/by-nc/2.5/co/
+http://creativecommons.org/licenses/by-nc/2.5/dk/
+http://creativecommons.org/licenses/by-nc/2.5/es/
+http://creativecommons.org/licenses/by-nc/2.5/hr/
+http://creativecommons.org/licenses/by-nc/2.5/hu/
+http://creativecommons.org/licenses/by-nc/2.5/il/
+http://creativecommons.org/licenses/by-nc/2.5/in/
+http://creativecommons.org/licenses/by-nc/2.5/it/
+http://creativecommons.org/licenses/by-nc/2.5/mk/
+http://creativecommons.org/licenses/by-nc/2.5/mt/
+http://creativecommons.org/licenses/by-nc/2.5/mx/
+http://creativecommons.org/licenses/by-nc/2.5/my/
+http://creativecommons.org/licenses/by-nc/2.5/nl/
+http://creativecommons.org/licenses/by-nc/2.5/pe/
+http://creativecommons.org/licenses/by-nc/2.5/pl/
+http://creativecommons.org/licenses/by-nc/2.5/pt/
+http://creativecommons.org/licenses/by-nc/2.5/
+http://creativecommons.org/licenses/by-nc/2.5/scotland/
+http://creativecommons.org/licenses/by-nc/2.5/se/
+http://creativecommons.org/licenses/by-nc/2.5/si/
+http://creativecommons.org/licenses/by-nc/2.5/tw/
+http://creativecommons.org/licenses/by-nc/2.5/za/
+http://creativecommons.org/licenses/by-nc/3.0/
+http://creativecommons.org/licenses/by-nc/3.0/us/
+http://creativecommons.org/licenses/by-nc-nd/2.0/at/
+http://creativecommons.org/licenses/by-nc-nd/2.0/au/
+http://creativecommons.org/licenses/by-nc-nd/2.0/be/
+http://creativecommons.org/licenses/by-nc-nd/2.0/br/
+http://creativecommons.org/licenses/by-nc-nd/2.0/ca/
+http://creativecommons.org/licenses/by-nc-nd/2.0/cl/
+http://creativecommons.org/licenses/by-nc-nd/2.0/de/
+http://creativecommons.org/licenses/by-nc-nd/2.0/es/
+http://creativecommons.org/licenses/by-nc-nd/2.0/fr/
+http://creativecommons.org/licenses/by-nc-nd/2.0/hr/
+http://creativecommons.org/licenses/by-nc-nd/2.0/it/
+http://creativecommons.org/licenses/by-nc-nd/2.0/jp/
+http://creativecommons.org/licenses/by-nc-nd/2.0/kr/
+http://creativecommons.org/licenses/by-nc-nd/2.0/nl/
+http://creativecommons.org/licenses/by-nc-nd/2.0/pl/
+http://creativecommons.org/licenses/by-nc-nd/2.0/
+http://creativecommons.org/licenses/by-nc-nd/2.0/tw/
+http://creativecommons.org/licenses/by-nc-nd/2.0/uk/
+http://creativecommons.org/licenses/by-nc-nd/2.0/za/
+http://creativecommons.org/licenses/by-nc-nd/2.1/au/
+http://creativecommons.org/licenses/by-nc-nd/2.1/es/
+http://creativecommons.org/licenses/by-nc-nd/2.1/jp/
+http://creativecommons.org/licenses/by-nc-nd/2.5/ar/
+http://creativecommons.org/licenses/by-nc-nd/2.5/au/
+http://creativecommons.org/licenses/by-nc-nd/2.5/bg/
+http://creativecommons.org/licenses/by-nc-nd/2.5/br/
+http://creativecommons.org/licenses/by-nc-nd/2.5/ca/
+http://creativecommons.org/licenses/by-nc-nd/2.5/ch/
+http://creativecommons.org/licenses/by-nc-nd/2.5/cn/
+http://creativecommons.org/licenses/by-nc-nd/2.5/co/
+http://creativecommons.org/licenses/by-nc-nd/2.5/dk/
+http://creativecommons.org/licenses/by-nc-nd/2.5/es/
+http://creativecommons.org/licenses/by-nc-nd/2.5/hr/
+http://creativecommons.org/licenses/by-nc-nd/2.5/hu/
+http://creativecommons.org/licenses/by-nc-nd/2.5/il/
+http://creativecommons.org/licenses/by-nc-nd/2.5/in/
+http://creativecommons.org/licenses/by-nc-nd/2.5/it/
+http://creativecommons.org/licenses/by-nc-nd/2.5/mk/
+http://creativecommons.org/licenses/by-nc-nd/2.5/mt/
+http://creativecommons.org/licenses/by-nc-nd/2.5/mx/
+http://creativecommons.org/licenses/by-nc-nd/2.5/my/
+http://creativecommons.org/licenses/by-nc-nd/2.5/nl/
+http://creativecommons.org/licenses/by-nc-nd/2.5/pe/
+http://creativecommons.org/licenses/by-nc-nd/2.5/pl/
+http://creativecommons.org/licenses/by-nc-nd/2.5/pt/
+http://creativecommons.org/licenses/by-nc-nd/2.5/
+http://creativecommons.org/licenses/by-nc-nd/2.5/scotland/
+http://creativecommons.org/licenses/by-nc-nd/2.5/se/
+http://creativecommons.org/licenses/by-nc-nd/2.5/si/
+http://creativecommons.org/licenses/by-nc-nd/2.5/tw/
+http://creativecommons.org/licenses/by-nc-nd/2.5/za/
+http://creativecommons.org/licenses/by-nc-nd/3.0/
+http://creativecommons.org/licenses/by-nc-nd/3.0/us/
+http://creativecommons.org/licenses/by-nc-sa/1.0/fi/
+http://creativecommons.org/licenses/by-nc-sa/1.0/il/
+http://creativecommons.org/licenses/by-nc-sa/1.0/nl/
+http://creativecommons.org/licenses/by-nc-sa/1.0/
+http://creativecommons.org/licenses/by-nc-sa/2.0/at/
+http://creativecommons.org/licenses/by-nc-sa/2.0/au/
+http://creativecommons.org/licenses/by-nc-sa/2.0/be/
+http://creativecommons.org/licenses/by-nc-sa/2.0/br/
+http://creativecommons.org/licenses/by-nc-sa/2.0/ca/
+http://creativecommons.org/licenses/by-nc-sa/2.0/cl/
+http://creativecommons.org/licenses/by-nc-sa/2.0/de/
+http://creativecommons.org/licenses/by-nc-sa/2.0/es/
+http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
+http://creativecommons.org/licenses/by-nc-sa/2.0/hr/
+http://creativecommons.org/licenses/by-nc-sa/2.0/it/
+http://creativecommons.org/licenses/by-nc-sa/2.0/jp/
+http://creativecommons.org/licenses/by-nc-sa/2.0/kr/
+http://creativecommons.org/licenses/by-nc-sa/2.0/nl/
+http://creativecommons.org/licenses/by-nc-sa/2.0/pl/
+http://creativecommons.org/licenses/by-nc-sa/2.0/
+http://creativecommons.org/licenses/by-nc-sa/2.0/tw/
+http://creativecommons.org/licenses/by-nc-sa/2.0/uk/
+http://creativecommons.org/licenses/by-nc-sa/2.0/za/
+http://creativecommons.org/licenses/by-nc-sa/2.1/au/
+http://creativecommons.org/licenses/by-nc-sa/2.1/es/
+http://creativecommons.org/licenses/by-nc-sa/2.1/jp/
+http://creativecommons.org/licenses/by-nc-sa/2.5/ar/
+http://creativecommons.org/licenses/by-nc-sa/2.5/au/
+http://creativecommons.org/licenses/by-nc-sa/2.5/bg/
+http://creativecommons.org/licenses/by-nc-sa/2.5/br/
+http://creativecommons.org/licenses/by-nc-sa/2.5/ca/
+http://creativecommons.org/licenses/by-nc-sa/2.5/ch/
+http://creativecommons.org/licenses/by-nc-sa/2.5/cn/
+http://creativecommons.org/licenses/by-nc-sa/2.5/co/
+http://creativecommons.org/licenses/by-nc-sa/2.5/dk/
+http://creativecommons.org/licenses/by-nc-sa/2.5/es/
+http://creativecommons.org/licenses/by-nc-sa/2.5/hr/
+http://creativecommons.org/licenses/by-nc-sa/2.5/hu/
+http://creativecommons.org/licenses/by-nc-sa/2.5/il/
+http://creativecommons.org/licenses/by-nc-sa/2.5/in/
+http://creativecommons.org/licenses/by-nc-sa/2.5/it/
+http://creativecommons.org/licenses/by-nc-sa/2.5/mk/
+http://creativecommons.org/licenses/by-nc-sa/2.5/mt/
+http://creativecommons.org/licenses/by-nc-sa/2.5/mx/
+http://creativecommons.org/licenses/by-nc-sa/2.5/my/
+http://creativecommons.org/licenses/by-nc-sa/2.5/nl/
+http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
+http://creativecommons.org/licenses/by-nc-sa/2.5/pl/
+http://creativecommons.org/licenses/by-nc-sa/2.5/pt/
+http://creativecommons.org/licenses/by-nc-sa/2.5/
+http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/
+http://creativecommons.org/licenses/by-nc-sa/2.5/se/
+http://creativecommons.org/licenses/by-nc-sa/2.5/si/
+http://creativecommons.org/licenses/by-nc-sa/2.5/tw/
+http://creativecommons.org/licenses/by-nc-sa/2.5/za/
+http://creativecommons.org/licenses/by-nc-sa/3.0/
+http://creativecommons.org/licenses/by-nc-sa/3.0/us/
+http://creativecommons.org/licenses/by-nd/1.0/fi/
+http://creativecommons.org/licenses/by-nd/1.0/il/
+http://creativecommons.org/licenses/by-nd/1.0/nl/
+http://creativecommons.org/licenses/by-nd/1.0/
+http://creativecommons.org/licenses/by-nd/2.0/at/
+http://creativecommons.org/licenses/by-nd/2.0/au/
+http://creativecommons.org/licenses/by-nd/2.0/be/
+http://creativecommons.org/licenses/by-nd/2.0/br/
+http://creativecommons.org/licenses/by-nd/2.0/ca/
+http://creativecommons.org/licenses/by-nd/2.0/cl/
+http://creativecommons.org/licenses/by-nd/2.0/de/
+http://creativecommons.org/licenses/by-nd/2.0/es/
+http://creativecommons.org/licenses/by-nd/2.0/fr/
+http://creativecommons.org/licenses/by-nd/2.0/hr/
+http://creativecommons.org/licenses/by-nd/2.0/it/
+http://creativecommons.org/licenses/by-nd/2.0/jp/
+http://creativecommons.org/licenses/by-nd/2.0/kr/
+http://creativecommons.org/licenses/by-nd/2.0/nl/
+http://creativecommons.org/licenses/by-nd/2.0/pl/
+http://creativecommons.org/licenses/by-nd/2.0/
+http://creativecommons.org/licenses/by-nd/2.0/tw/
+http://creativecommons.org/licenses/by-nd/2.0/uk/
+http://creativecommons.org/licenses/by-nd/2.0/za/
+http://creativecommons.org/licenses/by-nd/2.1/au/
+http://creativecommons.org/licenses/by-nd/2.1/es/
+http://creativecommons.org/licenses/by-nd/2.1/jp/
+http://creativecommons.org/licenses/by-nd/2.5/ar/
+http://creativecommons.org/licenses/by-nd/2.5/au/
+http://creativecommons.org/licenses/by-nd/2.5/bg/
+http://creativecommons.org/licenses/by-nd/2.5/br/
+http://creativecommons.org/licenses/by-nd/2.5/ca/
+http://creativecommons.org/licenses/by-nd/2.5/ch/
+http://creativecommons.org/licenses/by-nd/2.5/cn/
+http://creativecommons.org/licenses/by-nd/2.5/co/
+http://creativecommons.org/licenses/by-nd/2.5/dk/
+http://creativecommons.org/licenses/by-nd/2.5/es/
+http://creativecommons.org/licenses/by-nd/2.5/hr/
+http://creativecommons.org/licenses/by-nd/2.5/hu/
+http://creativecommons.org/licenses/by-nd/2.5/il/
+http://creativecommons.org/licenses/by-nd/2.5/in/
+http://creativecommons.org/licenses/by-nd/2.5/it/
+http://creativecommons.org/licenses/by-nd/2.5/mk/
+http://creativecommons.org/licenses/by-nd/2.5/mt/
+http://creativecommons.org/licenses/by-nd/2.5/mx/
+http://creativecommons.org/licenses/by-nd/2.5/my/
+http://creativecommons.org/licenses/by-nd/2.5/nl/
+http://creativecommons.org/licenses/by-nd/2.5/pe/
+http://creativecommons.org/licenses/by-nd/2.5/pl/
+http://creativecommons.org/licenses/by-nd/2.5/pt/
+http://creativecommons.org/licenses/by-nd/2.5/
+http://creativecommons.org/licenses/by-nd/2.5/scotland/
+http://creativecommons.org/licenses/by-nd/2.5/se/
+http://creativecommons.org/licenses/by-nd/2.5/si/
+http://creativecommons.org/licenses/by-nd/2.5/tw/
+http://creativecommons.org/licenses/by-nd/2.5/za/
+http://creativecommons.org/licenses/by-nd/3.0/
+http://creativecommons.org/licenses/by-nd/3.0/us/
+http://creativecommons.org/licenses/by-nd-nc/1.0/fi/
+http://creativecommons.org/licenses/by-nd-nc/1.0/il/
+http://creativecommons.org/licenses/by-nd-nc/1.0/nl/
+http://creativecommons.org/licenses/by-nd-nc/1.0/
+http://creativecommons.org/licenses/by-nd-nc/2.0/jp/
+http://creativecommons.org/licenses/by-sa/1.0/fi/
+http://creativecommons.org/licenses/by-sa/1.0/il/
+http://creativecommons.org/licenses/by-sa/1.0/nl/
+http://creativecommons.org/licenses/by-sa/1.0/
+http://creativecommons.org/licenses/by-sa/2.0/at/
+http://creativecommons.org/licenses/by-sa/2.0/au/
+http://creativecommons.org/licenses/by-sa/2.0/be/
+http://creativecommons.org/licenses/by-sa/2.0/br/
+http://creativecommons.org/licenses/by-sa/2.0/ca/
+http://creativecommons.org/licenses/by-sa/2.0/cl/
+http://creativecommons.org/licenses/by-sa/2.0/de/
+http://creativecommons.org/licenses/by-sa/2.0/es/
+http://creativecommons.org/licenses/by-sa/2.0/fr/
+http://creativecommons.org/licenses/by-sa/2.0/hr/
+http://creativecommons.org/licenses/by-sa/2.0/it/
+http://creativecommons.org/licenses/by-sa/2.0/jp/
+http://creativecommons.org/licenses/by-sa/2.0/kr/
+http://creativecommons.org/licenses/by-sa/2.0/nl/
+http://creativecommons.org/licenses/by-sa/2.0/pl/
+http://creativecommons.org/licenses/by-sa/2.0/
+http://creativecommons.org/licenses/by-sa/2.0/tw/
+http://creativecommons.org/licenses/by-sa/2.0/uk/
+http://creativecommons.org/licenses/by-sa/2.0/za/
+http://creativecommons.org/licenses/by-sa/2.1/au/
+http://creativecommons.org/licenses/by-sa/2.1/es/
+http://creativecommons.org/licenses/by-sa/2.1/jp/
+http://creativecommons.org/licenses/by-sa/2.5/ar/
+http://creativecommons.org/licenses/by-sa/2.5/au/
+http://creativecommons.org/licenses/by-sa/2.5/bg/
+http://creativecommons.org/licenses/by-sa/2.5/br/
+http://creativecommons.org/licenses/by-sa/2.5/ca/
+http://creativecommons.org/licenses/by-sa/2.5/ch/
+http://creativecommons.org/licenses/by-sa/2.5/cn/
+http://creativecommons.org/licenses/by-sa/2.5/co/
+http://creativecommons.org/licenses/by-sa/2.5/dk/
+http://creativecommons.org/licenses/by-sa/2.5/es/
+http://creativecommons.org/licenses/by-sa/2.5/hr/
+http://creativecommons.org/licenses/by-sa/2.5/hu/
+http://creativecommons.org/licenses/by-sa/2.5/il/
+http://creativecommons.org/licenses/by-sa/2.5/in/
+http://creativecommons.org/licenses/by-sa/2.5/it/
+http://creativecommons.org/licenses/by-sa/2.5/mk/
+http://creativecommons.org/licenses/by-sa/2.5/mt/
+http://creativecommons.org/licenses/by-sa/2.5/mx/
+http://creativecommons.org/licenses/by-sa/2.5/my/
+http://creativecommons.org/licenses/by-sa/2.5/nl/
+http://creativecommons.org/licenses/by-sa/2.5/pe/
+http://creativecommons.org/licenses/by-sa/2.5/pl/
+http://creativecommons.org/licenses/by-sa/2.5/pt/
+http://creativecommons.org/licenses/by-sa/2.5/
+http://creativecommons.org/licenses/by-sa/2.5/scotland/
+http://creativecommons.org/licenses/by-sa/2.5/se/
+http://creativecommons.org/licenses/by-sa/2.5/si/
+http://creativecommons.org/licenses/by-sa/2.5/tw/
+http://creativecommons.org/licenses/by-sa/2.5/za/
+http://creativecommons.org/licenses/by-sa/3.0/
+http://creativecommons.org/licenses/by-sa/3.0/us/
+http://creativecommons.org/licenses/devnations/2.0/
+http://creativecommons.org/licenses/GPL/2.0/
+http://creativecommons.org/licenses/LGPL/2.1/
+http://creativecommons.org/licenses/nc/1.0/fi/
+http://creativecommons.org/licenses/nc/1.0/nl/
+http://creativecommons.org/licenses/nc/1.0/
+http://creativecommons.org/licenses/nc/2.0/jp/
+http://creativecommons.org/licenses/nc-sa/1.0/fi/
+http://creativecommons.org/licenses/nc-sa/1.0/nl/
+http://creativecommons.org/licenses/nc-sa/1.0/
+http://creativecommons.org/licenses/nc-sa/2.0/jp/
+http://creativecommons.org/licenses/nc-sampling+/1.0/
+http://creativecommons.org/licenses/nc-sampling+/1.0/tw/
+http://creativecommons.org/licenses/nd/1.0/fi/
+http://creativecommons.org/licenses/nd/1.0/nl/
+http://creativecommons.org/licenses/nd/1.0/
+http://creativecommons.org/licenses/nd/2.0/jp/
+http://creativecommons.org/licenses/nd-nc/1.0/fi/
+http://creativecommons.org/licenses/nd-nc/1.0/nl/
+http://creativecommons.org/licenses/nd-nc/1.0/
+http://creativecommons.org/licenses/nd-nc/2.0/jp/
+http://creativecommons.org/licenses/publicdomain/
+http://creativecommons.org/licenses/sa/1.0/fi/
+http://creativecommons.org/licenses/sa/1.0/nl/
+http://creativecommons.org/licenses/sa/1.0/
+http://creativecommons.org/licenses/sa/2.0/jp/
+http://creativecommons.org/licenses/sampling/1.0/br/
+http://creativecommons.org/licenses/sampling+/1.0/br/
+http://creativecommons.org/licenses/sampling+/1.0/de/
+http://creativecommons.org/licenses/sampling/1.0/
+http://creativecommons.org/licenses/sampling+/1.0/
+http://creativecommons.org/licenses/sampling/1.0/tw/
+http://creativecommons.org/licenses/sampling+/1.0/tw/
diff --git a/tests/files/partialframe.mjpeg b/tests/files/partialframe.mjpeg
new file mode 100644
index 0000000..fe8621e
--- /dev/null
+++ b/tests/files/partialframe.mjpeg
Binary files differ
diff --git a/tests/files/test.mp3 b/tests/files/test.mp3
new file mode 100644
index 0000000..304892c
--- /dev/null
+++ b/tests/files/test.mp3
Binary files differ
diff --git a/tests/icles/Makefile.am b/tests/icles/Makefile.am
new file mode 100644
index 0000000..de853c4
--- /dev/null
+++ b/tests/icles/Makefile.am
@@ -0,0 +1,85 @@
+SUBDIRS = playback
+DIST_SUBDIRS = playback
+
+if USE_X
+X_TESTS = stress-videooverlay
+
+stress_videooverlay_SOURCES = stress-videooverlay.c
+stress_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+stress_videooverlay_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM)
+
+if HAVE_GTK_X11
+X_TESTS += test-colorkey test-videooverlay
+
+test_colorkey_SOURCES = test-colorkey.c
+test_colorkey_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+test_colorkey_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+
+test_videooverlay_SOURCES = test-videooverlay.c
+test_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+test_videooverlay_LDADD = \
+	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+endif
+
+output_selector_test_SOURCES = output-selector-test.c
+output_selector_test_CFLAGS  = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+output_selector_test_LDADD   = $(GST_LIBS)
+output_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+
+input_selector_test_SOURCES = input-selector-test.c
+input_selector_test_CFLAGS  = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+input_selector_test_LDADD   = $(GST_LIBS)
+input_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+
+X_TESTS += output-selector-test input-selector-test
+
+else
+X_TESTS =
+endif
+
+if USE_PANGO
+PANGO_TESTS = test-textoverlay
+
+test_textoverlay_SOURCES = test-textoverlay.c
+test_textoverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_textoverlay_LDADD = $(GST_LIBS) $(LIBM)
+
+else
+PANGO_TESTS = 
+endif
+
+audio_trickplay_SOURCES = audio-trickplay.c
+audio_trickplay_CFLAGS  = $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
+audio_trickplay_LDADD = $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(LIBM)
+
+playbin_text_SOURCES = playbin-text.c
+playbin_text_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+playbin_text_LDADD = $(GST_LIBS) $(LIBM)
+
+position_formats_SOURCES = position-formats.c
+position_formats_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+position_formats_LDADD = $(GST_LIBS) $(LIBM)
+
+stress_playbin_SOURCES = stress-playbin.c
+stress_playbin_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+stress_playbin_LDADD = $(GST_LIBS) $(LIBM)
+
+test_scale_SOURCES = test-scale.c
+test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_scale_LDADD = $(GST_LIBS) $(LIBM)
+
+test_box_SOURCES = test-box.c
+test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_box_LDADD = $(GST_LIBS) $(LIBM)
+
+noinst_PROGRAMS = $(X_TESTS) $(PANGO_TESTS) \
+	audio-trickplay playbin-text position-formats stress-playbin \
+	test-scale test-box
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
new file mode 100644
index 0000000..11e1372
--- /dev/null
+++ b/tests/icles/Makefile.in
@@ -0,0 +1,1260 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am__append_1 = test-colorkey test-videooverlay
+noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) \
+	audio-trickplay$(EXEEXT) playbin-text$(EXEEXT) \
+	position-formats$(EXEEXT) stress-playbin$(EXEEXT) \
+	test-scale$(EXEEXT) test-box$(EXEEXT)
+subdir = tests/icles
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am__EXEEXT_1 = test-colorkey$(EXEEXT) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	test-videooverlay$(EXEEXT)
+@USE_X_TRUE@am__EXEEXT_2 = stress-videooverlay$(EXEEXT) \
+@USE_X_TRUE@	$(am__EXEEXT_1) output-selector-test$(EXEEXT) \
+@USE_X_TRUE@	input-selector-test$(EXEEXT)
+@USE_PANGO_TRUE@am__EXEEXT_3 = test-textoverlay$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am_audio_trickplay_OBJECTS =  \
+	audio_trickplay-audio-trickplay.$(OBJEXT)
+audio_trickplay_OBJECTS = $(am_audio_trickplay_OBJECTS)
+am__DEPENDENCIES_1 =
+audio_trickplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+audio_trickplay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(audio_trickplay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+am__input_selector_test_SOURCES_DIST = input-selector-test.c
+@USE_X_TRUE@am_input_selector_test_OBJECTS =  \
+@USE_X_TRUE@	input_selector_test-input-selector-test.$(OBJEXT)
+input_selector_test_OBJECTS = $(am_input_selector_test_OBJECTS)
+@USE_X_TRUE@input_selector_test_DEPENDENCIES = $(am__DEPENDENCIES_1)
+input_selector_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(input_selector_test_CFLAGS) $(CFLAGS) \
+	$(input_selector_test_LDFLAGS) $(LDFLAGS) -o $@
+am__output_selector_test_SOURCES_DIST = output-selector-test.c
+@USE_X_TRUE@am_output_selector_test_OBJECTS = output_selector_test-output-selector-test.$(OBJEXT)
+output_selector_test_OBJECTS = $(am_output_selector_test_OBJECTS)
+@USE_X_TRUE@output_selector_test_DEPENDENCIES = $(am__DEPENDENCIES_1)
+output_selector_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(output_selector_test_CFLAGS) $(CFLAGS) \
+	$(output_selector_test_LDFLAGS) $(LDFLAGS) -o $@
+am_playbin_text_OBJECTS = playbin_text-playbin-text.$(OBJEXT)
+playbin_text_OBJECTS = $(am_playbin_text_OBJECTS)
+playbin_text_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+playbin_text_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(playbin_text_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_position_formats_OBJECTS =  \
+	position_formats-position-formats.$(OBJEXT)
+position_formats_OBJECTS = $(am_position_formats_OBJECTS)
+position_formats_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+position_formats_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(position_formats_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+am_stress_playbin_OBJECTS = stress_playbin-stress-playbin.$(OBJEXT)
+stress_playbin_OBJECTS = $(am_stress_playbin_OBJECTS)
+stress_playbin_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+stress_playbin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(stress_playbin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+am__stress_videooverlay_SOURCES_DIST = stress-videooverlay.c
+@USE_X_TRUE@am_stress_videooverlay_OBJECTS =  \
+@USE_X_TRUE@	stress_videooverlay-stress-videooverlay.$(OBJEXT)
+stress_videooverlay_OBJECTS = $(am_stress_videooverlay_OBJECTS)
+@USE_X_TRUE@stress_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@USE_X_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+stress_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(stress_videooverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_test_box_OBJECTS = test_box-test-box.$(OBJEXT)
+test_box_OBJECTS = $(am_test_box_OBJECTS)
+test_box_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+test_box_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_box_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__test_colorkey_SOURCES_DIST = test-colorkey.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am_test_colorkey_OBJECTS = test_colorkey-test-colorkey.$(OBJEXT)
+test_colorkey_OBJECTS = $(am_test_colorkey_OBJECTS)
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_colorkey_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+test_colorkey_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_colorkey_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_test_scale_OBJECTS = test_scale-test-scale.$(OBJEXT)
+test_scale_OBJECTS = $(am_test_scale_OBJECTS)
+test_scale_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+test_scale_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_scale_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__test_textoverlay_SOURCES_DIST = test-textoverlay.c
+@USE_PANGO_TRUE@am_test_textoverlay_OBJECTS =  \
+@USE_PANGO_TRUE@	test_textoverlay-test-textoverlay.$(OBJEXT)
+test_textoverlay_OBJECTS = $(am_test_textoverlay_OBJECTS)
+@USE_PANGO_TRUE@test_textoverlay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@USE_PANGO_TRUE@	$(am__DEPENDENCIES_1)
+test_textoverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(test_textoverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+am__test_videooverlay_SOURCES_DIST = test-videooverlay.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@am_test_videooverlay_OBJECTS = test_videooverlay-test-videooverlay.$(OBJEXT)
+test_videooverlay_OBJECTS = $(am_test_videooverlay_OBJECTS)
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_videooverlay_DEPENDENCIES = $(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(am__DEPENDENCIES_1)
+test_videooverlay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(test_videooverlay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(audio_trickplay_SOURCES) $(input_selector_test_SOURCES) \
+	$(output_selector_test_SOURCES) $(playbin_text_SOURCES) \
+	$(position_formats_SOURCES) $(stress_playbin_SOURCES) \
+	$(stress_videooverlay_SOURCES) $(test_box_SOURCES) \
+	$(test_colorkey_SOURCES) $(test_scale_SOURCES) \
+	$(test_textoverlay_SOURCES) $(test_videooverlay_SOURCES)
+DIST_SOURCES = $(audio_trickplay_SOURCES) \
+	$(am__input_selector_test_SOURCES_DIST) \
+	$(am__output_selector_test_SOURCES_DIST) \
+	$(playbin_text_SOURCES) $(position_formats_SOURCES) \
+	$(stress_playbin_SOURCES) \
+	$(am__stress_videooverlay_SOURCES_DIST) $(test_box_SOURCES) \
+	$(am__test_colorkey_SOURCES_DIST) $(test_scale_SOURCES) \
+	$(am__test_textoverlay_SOURCES_DIST) \
+	$(am__test_videooverlay_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = playback
+DIST_SUBDIRS = playback
+@USE_X_FALSE@X_TESTS = 
+@USE_X_TRUE@X_TESTS = stress-videooverlay $(am__append_1) \
+@USE_X_TRUE@	output-selector-test input-selector-test
+@USE_X_TRUE@stress_videooverlay_SOURCES = stress-videooverlay.c
+@USE_X_TRUE@stress_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+@USE_X_TRUE@	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS)
+
+@USE_X_TRUE@stress_videooverlay_LDADD = \
+@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM)
+
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_colorkey_SOURCES = test-colorkey.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_colorkey_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_colorkey_LDADD = \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_videooverlay_SOURCES = test-videooverlay.c
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_videooverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(X_CFLAGS) $(GTK_CFLAGS)
+
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@test_videooverlay_LDADD = \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(top_builddir)/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \
+@HAVE_GTK_X11_TRUE@@USE_X_TRUE@	$(GST_LIBS) $(X_LIBS) $(LIBM) $(GTK_LIBS)
+
+@USE_X_TRUE@output_selector_test_SOURCES = output-selector-test.c
+@USE_X_TRUE@output_selector_test_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+@USE_X_TRUE@output_selector_test_LDADD = $(GST_LIBS)
+@USE_X_TRUE@output_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+@USE_X_TRUE@input_selector_test_SOURCES = input-selector-test.c
+@USE_X_TRUE@input_selector_test_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+@USE_X_TRUE@input_selector_test_LDADD = $(GST_LIBS)
+@USE_X_TRUE@input_selector_test_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+@USE_PANGO_FALSE@PANGO_TESTS = 
+@USE_PANGO_TRUE@PANGO_TESTS = test-textoverlay
+@USE_PANGO_TRUE@test_textoverlay_SOURCES = test-textoverlay.c
+@USE_PANGO_TRUE@test_textoverlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+@USE_PANGO_TRUE@test_textoverlay_LDADD = $(GST_LIBS) $(LIBM)
+audio_trickplay_SOURCES = audio-trickplay.c
+audio_trickplay_CFLAGS = $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
+audio_trickplay_LDADD = $(GST_CONTROLLER_LIBS) $(GST_LIBS) $(LIBM)
+playbin_text_SOURCES = playbin-text.c
+playbin_text_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+playbin_text_LDADD = $(GST_LIBS) $(LIBM)
+position_formats_SOURCES = position-formats.c
+position_formats_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+position_formats_LDADD = $(GST_LIBS) $(LIBM)
+stress_playbin_SOURCES = stress-playbin.c
+stress_playbin_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+stress_playbin_LDADD = $(GST_LIBS) $(LIBM)
+test_scale_SOURCES = test-scale.c
+test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_scale_LDADD = $(GST_LIBS) $(LIBM)
+test_box_SOURCES = test-box.c
+test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_box_LDADD = $(GST_LIBS) $(LIBM)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/icles/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+audio-trickplay$(EXEEXT): $(audio_trickplay_OBJECTS) $(audio_trickplay_DEPENDENCIES) 
+	@rm -f audio-trickplay$(EXEEXT)
+	$(AM_V_CCLD)$(audio_trickplay_LINK) $(audio_trickplay_OBJECTS) $(audio_trickplay_LDADD) $(LIBS)
+input-selector-test$(EXEEXT): $(input_selector_test_OBJECTS) $(input_selector_test_DEPENDENCIES) 
+	@rm -f input-selector-test$(EXEEXT)
+	$(AM_V_CCLD)$(input_selector_test_LINK) $(input_selector_test_OBJECTS) $(input_selector_test_LDADD) $(LIBS)
+output-selector-test$(EXEEXT): $(output_selector_test_OBJECTS) $(output_selector_test_DEPENDENCIES) 
+	@rm -f output-selector-test$(EXEEXT)
+	$(AM_V_CCLD)$(output_selector_test_LINK) $(output_selector_test_OBJECTS) $(output_selector_test_LDADD) $(LIBS)
+playbin-text$(EXEEXT): $(playbin_text_OBJECTS) $(playbin_text_DEPENDENCIES) 
+	@rm -f playbin-text$(EXEEXT)
+	$(AM_V_CCLD)$(playbin_text_LINK) $(playbin_text_OBJECTS) $(playbin_text_LDADD) $(LIBS)
+position-formats$(EXEEXT): $(position_formats_OBJECTS) $(position_formats_DEPENDENCIES) 
+	@rm -f position-formats$(EXEEXT)
+	$(AM_V_CCLD)$(position_formats_LINK) $(position_formats_OBJECTS) $(position_formats_LDADD) $(LIBS)
+stress-playbin$(EXEEXT): $(stress_playbin_OBJECTS) $(stress_playbin_DEPENDENCIES) 
+	@rm -f stress-playbin$(EXEEXT)
+	$(AM_V_CCLD)$(stress_playbin_LINK) $(stress_playbin_OBJECTS) $(stress_playbin_LDADD) $(LIBS)
+stress-videooverlay$(EXEEXT): $(stress_videooverlay_OBJECTS) $(stress_videooverlay_DEPENDENCIES) 
+	@rm -f stress-videooverlay$(EXEEXT)
+	$(AM_V_CCLD)$(stress_videooverlay_LINK) $(stress_videooverlay_OBJECTS) $(stress_videooverlay_LDADD) $(LIBS)
+test-box$(EXEEXT): $(test_box_OBJECTS) $(test_box_DEPENDENCIES) 
+	@rm -f test-box$(EXEEXT)
+	$(AM_V_CCLD)$(test_box_LINK) $(test_box_OBJECTS) $(test_box_LDADD) $(LIBS)
+test-colorkey$(EXEEXT): $(test_colorkey_OBJECTS) $(test_colorkey_DEPENDENCIES) 
+	@rm -f test-colorkey$(EXEEXT)
+	$(AM_V_CCLD)$(test_colorkey_LINK) $(test_colorkey_OBJECTS) $(test_colorkey_LDADD) $(LIBS)
+test-scale$(EXEEXT): $(test_scale_OBJECTS) $(test_scale_DEPENDENCIES) 
+	@rm -f test-scale$(EXEEXT)
+	$(AM_V_CCLD)$(test_scale_LINK) $(test_scale_OBJECTS) $(test_scale_LDADD) $(LIBS)
+test-textoverlay$(EXEEXT): $(test_textoverlay_OBJECTS) $(test_textoverlay_DEPENDENCIES) 
+	@rm -f test-textoverlay$(EXEEXT)
+	$(AM_V_CCLD)$(test_textoverlay_LINK) $(test_textoverlay_OBJECTS) $(test_textoverlay_LDADD) $(LIBS)
+test-videooverlay$(EXEEXT): $(test_videooverlay_OBJECTS) $(test_videooverlay_DEPENDENCIES) 
+	@rm -f test-videooverlay$(EXEEXT)
+	$(AM_V_CCLD)$(test_videooverlay_LINK) $(test_videooverlay_OBJECTS) $(test_videooverlay_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_trickplay-audio-trickplay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input_selector_test-input-selector-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output_selector_test-output-selector-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playbin_text-playbin-text.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/position_formats-position-formats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stress_playbin-stress-playbin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stress_videooverlay-stress-videooverlay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_box-test-box.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_colorkey-test-colorkey.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_scale-test-scale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_textoverlay-test-textoverlay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_videooverlay-test-videooverlay.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+audio_trickplay-audio-trickplay.o: audio-trickplay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -MT audio_trickplay-audio-trickplay.o -MD -MP -MF $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo -c -o audio_trickplay-audio-trickplay.o `test -f 'audio-trickplay.c' || echo '$(srcdir)/'`audio-trickplay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo $(DEPDIR)/audio_trickplay-audio-trickplay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='audio-trickplay.c' object='audio_trickplay-audio-trickplay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -c -o audio_trickplay-audio-trickplay.o `test -f 'audio-trickplay.c' || echo '$(srcdir)/'`audio-trickplay.c
+
+audio_trickplay-audio-trickplay.obj: audio-trickplay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -MT audio_trickplay-audio-trickplay.obj -MD -MP -MF $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo -c -o audio_trickplay-audio-trickplay.obj `if test -f 'audio-trickplay.c'; then $(CYGPATH_W) 'audio-trickplay.c'; else $(CYGPATH_W) '$(srcdir)/audio-trickplay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/audio_trickplay-audio-trickplay.Tpo $(DEPDIR)/audio_trickplay-audio-trickplay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='audio-trickplay.c' object='audio_trickplay-audio-trickplay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(audio_trickplay_CFLAGS) $(CFLAGS) -c -o audio_trickplay-audio-trickplay.obj `if test -f 'audio-trickplay.c'; then $(CYGPATH_W) 'audio-trickplay.c'; else $(CYGPATH_W) '$(srcdir)/audio-trickplay.c'; fi`
+
+input_selector_test-input-selector-test.o: input-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -MT input_selector_test-input-selector-test.o -MD -MP -MF $(DEPDIR)/input_selector_test-input-selector-test.Tpo -c -o input_selector_test-input-selector-test.o `test -f 'input-selector-test.c' || echo '$(srcdir)/'`input-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/input_selector_test-input-selector-test.Tpo $(DEPDIR)/input_selector_test-input-selector-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='input-selector-test.c' object='input_selector_test-input-selector-test.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -c -o input_selector_test-input-selector-test.o `test -f 'input-selector-test.c' || echo '$(srcdir)/'`input-selector-test.c
+
+input_selector_test-input-selector-test.obj: input-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -MT input_selector_test-input-selector-test.obj -MD -MP -MF $(DEPDIR)/input_selector_test-input-selector-test.Tpo -c -o input_selector_test-input-selector-test.obj `if test -f 'input-selector-test.c'; then $(CYGPATH_W) 'input-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/input-selector-test.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/input_selector_test-input-selector-test.Tpo $(DEPDIR)/input_selector_test-input-selector-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='input-selector-test.c' object='input_selector_test-input-selector-test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(input_selector_test_CFLAGS) $(CFLAGS) -c -o input_selector_test-input-selector-test.obj `if test -f 'input-selector-test.c'; then $(CYGPATH_W) 'input-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/input-selector-test.c'; fi`
+
+output_selector_test-output-selector-test.o: output-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -MT output_selector_test-output-selector-test.o -MD -MP -MF $(DEPDIR)/output_selector_test-output-selector-test.Tpo -c -o output_selector_test-output-selector-test.o `test -f 'output-selector-test.c' || echo '$(srcdir)/'`output-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/output_selector_test-output-selector-test.Tpo $(DEPDIR)/output_selector_test-output-selector-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='output-selector-test.c' object='output_selector_test-output-selector-test.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -c -o output_selector_test-output-selector-test.o `test -f 'output-selector-test.c' || echo '$(srcdir)/'`output-selector-test.c
+
+output_selector_test-output-selector-test.obj: output-selector-test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -MT output_selector_test-output-selector-test.obj -MD -MP -MF $(DEPDIR)/output_selector_test-output-selector-test.Tpo -c -o output_selector_test-output-selector-test.obj `if test -f 'output-selector-test.c'; then $(CYGPATH_W) 'output-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/output-selector-test.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/output_selector_test-output-selector-test.Tpo $(DEPDIR)/output_selector_test-output-selector-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='output-selector-test.c' object='output_selector_test-output-selector-test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(output_selector_test_CFLAGS) $(CFLAGS) -c -o output_selector_test-output-selector-test.obj `if test -f 'output-selector-test.c'; then $(CYGPATH_W) 'output-selector-test.c'; else $(CYGPATH_W) '$(srcdir)/output-selector-test.c'; fi`
+
+playbin_text-playbin-text.o: playbin-text.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -MT playbin_text-playbin-text.o -MD -MP -MF $(DEPDIR)/playbin_text-playbin-text.Tpo -c -o playbin_text-playbin-text.o `test -f 'playbin-text.c' || echo '$(srcdir)/'`playbin-text.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/playbin_text-playbin-text.Tpo $(DEPDIR)/playbin_text-playbin-text.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='playbin-text.c' object='playbin_text-playbin-text.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -c -o playbin_text-playbin-text.o `test -f 'playbin-text.c' || echo '$(srcdir)/'`playbin-text.c
+
+playbin_text-playbin-text.obj: playbin-text.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -MT playbin_text-playbin-text.obj -MD -MP -MF $(DEPDIR)/playbin_text-playbin-text.Tpo -c -o playbin_text-playbin-text.obj `if test -f 'playbin-text.c'; then $(CYGPATH_W) 'playbin-text.c'; else $(CYGPATH_W) '$(srcdir)/playbin-text.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/playbin_text-playbin-text.Tpo $(DEPDIR)/playbin_text-playbin-text.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='playbin-text.c' object='playbin_text-playbin-text.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(playbin_text_CFLAGS) $(CFLAGS) -c -o playbin_text-playbin-text.obj `if test -f 'playbin-text.c'; then $(CYGPATH_W) 'playbin-text.c'; else $(CYGPATH_W) '$(srcdir)/playbin-text.c'; fi`
+
+position_formats-position-formats.o: position-formats.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -MT position_formats-position-formats.o -MD -MP -MF $(DEPDIR)/position_formats-position-formats.Tpo -c -o position_formats-position-formats.o `test -f 'position-formats.c' || echo '$(srcdir)/'`position-formats.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/position_formats-position-formats.Tpo $(DEPDIR)/position_formats-position-formats.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='position-formats.c' object='position_formats-position-formats.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -c -o position_formats-position-formats.o `test -f 'position-formats.c' || echo '$(srcdir)/'`position-formats.c
+
+position_formats-position-formats.obj: position-formats.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -MT position_formats-position-formats.obj -MD -MP -MF $(DEPDIR)/position_formats-position-formats.Tpo -c -o position_formats-position-formats.obj `if test -f 'position-formats.c'; then $(CYGPATH_W) 'position-formats.c'; else $(CYGPATH_W) '$(srcdir)/position-formats.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/position_formats-position-formats.Tpo $(DEPDIR)/position_formats-position-formats.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='position-formats.c' object='position_formats-position-formats.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(position_formats_CFLAGS) $(CFLAGS) -c -o position_formats-position-formats.obj `if test -f 'position-formats.c'; then $(CYGPATH_W) 'position-formats.c'; else $(CYGPATH_W) '$(srcdir)/position-formats.c'; fi`
+
+stress_playbin-stress-playbin.o: stress-playbin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -MT stress_playbin-stress-playbin.o -MD -MP -MF $(DEPDIR)/stress_playbin-stress-playbin.Tpo -c -o stress_playbin-stress-playbin.o `test -f 'stress-playbin.c' || echo '$(srcdir)/'`stress-playbin.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/stress_playbin-stress-playbin.Tpo $(DEPDIR)/stress_playbin-stress-playbin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stress-playbin.c' object='stress_playbin-stress-playbin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -c -o stress_playbin-stress-playbin.o `test -f 'stress-playbin.c' || echo '$(srcdir)/'`stress-playbin.c
+
+stress_playbin-stress-playbin.obj: stress-playbin.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -MT stress_playbin-stress-playbin.obj -MD -MP -MF $(DEPDIR)/stress_playbin-stress-playbin.Tpo -c -o stress_playbin-stress-playbin.obj `if test -f 'stress-playbin.c'; then $(CYGPATH_W) 'stress-playbin.c'; else $(CYGPATH_W) '$(srcdir)/stress-playbin.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/stress_playbin-stress-playbin.Tpo $(DEPDIR)/stress_playbin-stress-playbin.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stress-playbin.c' object='stress_playbin-stress-playbin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_playbin_CFLAGS) $(CFLAGS) -c -o stress_playbin-stress-playbin.obj `if test -f 'stress-playbin.c'; then $(CYGPATH_W) 'stress-playbin.c'; else $(CYGPATH_W) '$(srcdir)/stress-playbin.c'; fi`
+
+stress_videooverlay-stress-videooverlay.o: stress-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -MT stress_videooverlay-stress-videooverlay.o -MD -MP -MF $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo -c -o stress_videooverlay-stress-videooverlay.o `test -f 'stress-videooverlay.c' || echo '$(srcdir)/'`stress-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo $(DEPDIR)/stress_videooverlay-stress-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stress-videooverlay.c' object='stress_videooverlay-stress-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -c -o stress_videooverlay-stress-videooverlay.o `test -f 'stress-videooverlay.c' || echo '$(srcdir)/'`stress-videooverlay.c
+
+stress_videooverlay-stress-videooverlay.obj: stress-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -MT stress_videooverlay-stress-videooverlay.obj -MD -MP -MF $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo -c -o stress_videooverlay-stress-videooverlay.obj `if test -f 'stress-videooverlay.c'; then $(CYGPATH_W) 'stress-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/stress-videooverlay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/stress_videooverlay-stress-videooverlay.Tpo $(DEPDIR)/stress_videooverlay-stress-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stress-videooverlay.c' object='stress_videooverlay-stress-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stress_videooverlay_CFLAGS) $(CFLAGS) -c -o stress_videooverlay-stress-videooverlay.obj `if test -f 'stress-videooverlay.c'; then $(CYGPATH_W) 'stress-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/stress-videooverlay.c'; fi`
+
+test_box-test-box.o: test-box.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -MT test_box-test-box.o -MD -MP -MF $(DEPDIR)/test_box-test-box.Tpo -c -o test_box-test-box.o `test -f 'test-box.c' || echo '$(srcdir)/'`test-box.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_box-test-box.Tpo $(DEPDIR)/test_box-test-box.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-box.c' object='test_box-test-box.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -c -o test_box-test-box.o `test -f 'test-box.c' || echo '$(srcdir)/'`test-box.c
+
+test_box-test-box.obj: test-box.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -MT test_box-test-box.obj -MD -MP -MF $(DEPDIR)/test_box-test-box.Tpo -c -o test_box-test-box.obj `if test -f 'test-box.c'; then $(CYGPATH_W) 'test-box.c'; else $(CYGPATH_W) '$(srcdir)/test-box.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_box-test-box.Tpo $(DEPDIR)/test_box-test-box.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-box.c' object='test_box-test-box.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_box_CFLAGS) $(CFLAGS) -c -o test_box-test-box.obj `if test -f 'test-box.c'; then $(CYGPATH_W) 'test-box.c'; else $(CYGPATH_W) '$(srcdir)/test-box.c'; fi`
+
+test_colorkey-test-colorkey.o: test-colorkey.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -MT test_colorkey-test-colorkey.o -MD -MP -MF $(DEPDIR)/test_colorkey-test-colorkey.Tpo -c -o test_colorkey-test-colorkey.o `test -f 'test-colorkey.c' || echo '$(srcdir)/'`test-colorkey.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_colorkey-test-colorkey.Tpo $(DEPDIR)/test_colorkey-test-colorkey.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-colorkey.c' object='test_colorkey-test-colorkey.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -c -o test_colorkey-test-colorkey.o `test -f 'test-colorkey.c' || echo '$(srcdir)/'`test-colorkey.c
+
+test_colorkey-test-colorkey.obj: test-colorkey.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -MT test_colorkey-test-colorkey.obj -MD -MP -MF $(DEPDIR)/test_colorkey-test-colorkey.Tpo -c -o test_colorkey-test-colorkey.obj `if test -f 'test-colorkey.c'; then $(CYGPATH_W) 'test-colorkey.c'; else $(CYGPATH_W) '$(srcdir)/test-colorkey.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_colorkey-test-colorkey.Tpo $(DEPDIR)/test_colorkey-test-colorkey.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-colorkey.c' object='test_colorkey-test-colorkey.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_colorkey_CFLAGS) $(CFLAGS) -c -o test_colorkey-test-colorkey.obj `if test -f 'test-colorkey.c'; then $(CYGPATH_W) 'test-colorkey.c'; else $(CYGPATH_W) '$(srcdir)/test-colorkey.c'; fi`
+
+test_scale-test-scale.o: test-scale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.o -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-scale.c' object='test_scale-test-scale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c
+
+test_scale-test-scale.obj: test-scale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.obj -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.obj `if test -f 'test-scale.c'; then $(CYGPATH_W) 'test-scale.c'; else $(CYGPATH_W) '$(srcdir)/test-scale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-scale.c' object='test_scale-test-scale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -c -o test_scale-test-scale.obj `if test -f 'test-scale.c'; then $(CYGPATH_W) 'test-scale.c'; else $(CYGPATH_W) '$(srcdir)/test-scale.c'; fi`
+
+test_textoverlay-test-textoverlay.o: test-textoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -MT test_textoverlay-test-textoverlay.o -MD -MP -MF $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo -c -o test_textoverlay-test-textoverlay.o `test -f 'test-textoverlay.c' || echo '$(srcdir)/'`test-textoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo $(DEPDIR)/test_textoverlay-test-textoverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-textoverlay.c' object='test_textoverlay-test-textoverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -c -o test_textoverlay-test-textoverlay.o `test -f 'test-textoverlay.c' || echo '$(srcdir)/'`test-textoverlay.c
+
+test_textoverlay-test-textoverlay.obj: test-textoverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -MT test_textoverlay-test-textoverlay.obj -MD -MP -MF $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo -c -o test_textoverlay-test-textoverlay.obj `if test -f 'test-textoverlay.c'; then $(CYGPATH_W) 'test-textoverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-textoverlay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_textoverlay-test-textoverlay.Tpo $(DEPDIR)/test_textoverlay-test-textoverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-textoverlay.c' object='test_textoverlay-test-textoverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_textoverlay_CFLAGS) $(CFLAGS) -c -o test_textoverlay-test-textoverlay.obj `if test -f 'test-textoverlay.c'; then $(CYGPATH_W) 'test-textoverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-textoverlay.c'; fi`
+
+test_videooverlay-test-videooverlay.o: test-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -MT test_videooverlay-test-videooverlay.o -MD -MP -MF $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo -c -o test_videooverlay-test-videooverlay.o `test -f 'test-videooverlay.c' || echo '$(srcdir)/'`test-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo $(DEPDIR)/test_videooverlay-test-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-videooverlay.c' object='test_videooverlay-test-videooverlay.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -c -o test_videooverlay-test-videooverlay.o `test -f 'test-videooverlay.c' || echo '$(srcdir)/'`test-videooverlay.c
+
+test_videooverlay-test-videooverlay.obj: test-videooverlay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -MT test_videooverlay-test-videooverlay.obj -MD -MP -MF $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo -c -o test_videooverlay-test-videooverlay.obj `if test -f 'test-videooverlay.c'; then $(CYGPATH_W) 'test-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-videooverlay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_videooverlay-test-videooverlay.Tpo $(DEPDIR)/test_videooverlay-test-videooverlay.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test-videooverlay.c' object='test_videooverlay-test-videooverlay.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_videooverlay_CFLAGS) $(CFLAGS) -c -o test_videooverlay-test-videooverlay.obj `if test -f 'test-videooverlay.c'; then $(CYGPATH_W) 'test-videooverlay.c'; else $(CYGPATH_W) '$(srcdir)/test-videooverlay.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	clean-noinstPROGRAMS ctags ctags-recursive distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/icles/audio-trickplay.c b/tests/icles/audio-trickplay.c
new file mode 100644
index 0000000..1deaaff
--- /dev/null
+++ b/tests/icles/audio-trickplay.c
@@ -0,0 +1,269 @@
+/*
+ * audio-trickplay.c
+ *
+ * Builds a pipeline with two audiotestsources mixed with adder. Assigns
+ * controller patterns to the audio generators and test various trick modes.
+ *
+ * There are currently several issues:
+ * - adder only work with flushing seeks
+ * - there is a gap of almost 4 seconds before backwards playback
+ *   - it is "waiting for free space"
+ *   - using sync=false on the sink does not help (but has some other weird effects)
+ *   - using fakesink shows same behaviour
+ *
+ * GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:2,default:3,*sink*:4,*ring*:4,*pulse*:5" ./audio-trickplay 2>log.txt
+ * GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:2,default:3,*sink*:4,*ring*:4,*pulse*:5" ./audio-trickplay -a -f 2>log-af.txt
+ */
+
+#include <gst/gst.h>
+#include <gst/controller/gstcontroller.h>
+#include <gst/controller/gstinterpolationcontrolsource.h>
+
+static void
+check_position (GstElement * elem, GstQuery * pos, const gchar * info)
+{
+  if (gst_element_query (elem, pos)) {
+    gint64 play_pos;
+    gst_query_parse_position (pos, NULL, &play_pos);
+    GST_INFO ("pos : %" GST_TIME_FORMAT " %s", GST_TIME_ARGS (play_pos), info);
+  } else {
+    GST_WARNING ("position query failed");
+  }
+}
+
+static GstProbeReturn
+print_buffer_ts (GstPad * pad, GstProbeType type, gpointer type_data,
+    gpointer user_data)
+{
+  GstBuffer *buffer = type_data;
+
+  GST_DEBUG_OBJECT (pad, "  ts: %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+
+  return GST_PROBE_OK;
+}
+
+gint
+main (gint argc, gchar ** argv)
+{
+  gint res = 1;
+  GstElement *src, *mix = NULL, *sink;
+  GstElement *bin;
+  GstController *ctrl;
+  GstInterpolationControlSource *csource1, *csource2;
+  GstClock *clock;
+  GstClockID clock_id;
+  GstClockReturn wait_ret;
+  GValue vol = { 0, };
+  GstEvent *pos_seek, *rate_seek1, *rate_seek2;
+  GstQuery *pos;
+  GstSeekFlags flags;
+  GstPad *src_pad;
+  /* options */
+  gboolean use_adder = FALSE;
+  gboolean use_flush = FALSE;
+  gboolean be_quiet = FALSE;
+
+  gst_init (&argc, &argv);
+  gst_controller_init (&argc, &argv);
+
+  if (argc) {
+    gint arg;
+    for (arg = 0; arg < argc; arg++) {
+      if (!strcmp (argv[arg], "-a"))
+        use_adder = TRUE;
+      else if (!strcmp (argv[arg], "-f"))
+        use_flush = TRUE;
+      else if (!strcmp (argv[arg], "-q"))
+        be_quiet = TRUE;
+    }
+  }
+
+  /* build pipeline */
+  bin = gst_pipeline_new ("pipeline");
+  clock = gst_pipeline_get_clock (GST_PIPELINE (bin));
+  src = gst_element_factory_make ("audiotestsrc", NULL);
+  if (!src) {
+    GST_WARNING ("need audiotestsrc from gst-plugins-base");
+    goto Error;
+  }
+  if (use_adder) {
+    mix = gst_element_factory_make ("adder", NULL);
+    if (!mix) {
+      GST_WARNING ("need adder from gst-plugins-base");
+      goto Error;
+    }
+  }
+  sink = gst_element_factory_make ((be_quiet ? "fakesink" : "autoaudiosink"),
+      NULL);
+  if (!sink) {
+    GST_WARNING ("need autoaudiosink from gst-plugins-base");
+    goto Error;
+  }
+
+  if (use_adder) {
+    gst_bin_add_many (GST_BIN (bin), src, mix, sink, NULL);
+    if (!gst_element_link_many (src, mix, sink, NULL)) {
+      GST_WARNING ("can't link elements");
+      goto Error;
+    }
+  } else {
+    gst_bin_add_many (GST_BIN (bin), src, sink, NULL);
+    if (!gst_element_link_many (src, sink, NULL)) {
+      GST_WARNING ("can't link elements");
+      goto Error;
+    }
+  }
+
+  /* use 10 buffers per second */
+  g_object_set (src, "samplesperbuffer", 44100 / 10, NULL);
+
+  if (be_quiet) {
+    g_object_set (sink, "sync", TRUE, NULL);
+  }
+
+  src_pad = gst_element_get_static_pad (src, "src");
+  gst_pad_add_probe (src_pad, GST_PROBE_TYPE_BUFFER, print_buffer_ts, NULL,
+      NULL);
+  gst_object_unref (src_pad);
+
+  /* add a controller to the source */
+  if (!(ctrl = gst_controller_new (G_OBJECT (src), "freq", "volume", NULL))) {
+    GST_WARNING ("can't control source element");
+    goto Error;
+  }
+
+  csource1 = gst_interpolation_control_source_new ();
+  csource2 = gst_interpolation_control_source_new ();
+
+  gst_controller_set_control_source (ctrl, "volume",
+      GST_CONTROL_SOURCE (csource1));
+  gst_controller_set_control_source (ctrl, "freq",
+      GST_CONTROL_SOURCE (csource2));
+
+  /* Set interpolation mode */
+
+  gst_interpolation_control_source_set_interpolation_mode (csource1,
+      GST_INTERPOLATE_LINEAR);
+  gst_interpolation_control_source_set_interpolation_mode (csource2,
+      GST_INTERPOLATE_LINEAR);
+
+  /* set control values */
+  g_value_init (&vol, G_TYPE_DOUBLE);
+  g_value_set_double (&vol, 0.0);
+  gst_interpolation_control_source_set (csource1, 0 * GST_SECOND, &vol);
+  g_value_set_double (&vol, 1.0);
+  gst_interpolation_control_source_set (csource1, 5 * GST_SECOND, &vol);
+
+  g_object_unref (csource1);
+
+  g_value_set_double (&vol, 220.0);
+  gst_interpolation_control_source_set (csource2, 0 * GST_SECOND, &vol);
+  g_value_set_double (&vol, 3520.0);
+  gst_interpolation_control_source_set (csource2, 2 * GST_SECOND, &vol);
+  g_value_set_double (&vol, 440.0);
+  gst_interpolation_control_source_set (csource2, 6 * GST_SECOND, &vol);
+
+  g_object_unref (csource2);
+
+  /* prepare events */
+  flags = use_flush ? GST_SEEK_FLAG_FLUSH : GST_SEEK_FLAG_NONE;
+  pos_seek = gst_event_new_seek (1.0, GST_FORMAT_TIME, flags,
+      GST_SEEK_TYPE_SET, 3 * GST_SECOND,
+      GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+  rate_seek1 = gst_event_new_seek (0.5, GST_FORMAT_TIME, flags,
+      GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE,
+      GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+  rate_seek2 = gst_event_new_seek (-1.0, GST_FORMAT_TIME, flags,
+      GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE,
+      GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+
+  /* prepare queries */
+  pos = gst_query_new_position (GST_FORMAT_TIME);
+
+
+  /* run the show */
+  if (gst_element_set_state (bin, GST_STATE_PAUSED) != GST_STATE_CHANGE_FAILURE) {
+
+    /* run for 5 seconds */
+    clock_id =
+        gst_clock_new_single_shot_id (clock,
+        gst_clock_get_time (clock) + (5 * GST_SECOND));
+
+    if (gst_element_set_state (bin,
+            GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE) {
+      check_position (bin, pos, "start");
+      if ((wait_ret = gst_clock_id_wait (clock_id, NULL)) != GST_CLOCK_OK) {
+        GST_WARNING ("clock_id_wait returned: %d", wait_ret);
+      }
+    }
+    gst_clock_id_unref (clock_id);
+
+    check_position (bin, pos, "before seek to new pos");
+
+    /* seek to 3:00 sec (back 2 sec) */
+    if (!gst_element_send_event (sink, pos_seek)) {
+      GST_WARNING ("element failed to seek to new position");
+    }
+
+    check_position (bin, pos, "after seek to new pos");
+
+    /* run for 2 seconds */
+    clock_id =
+        gst_clock_new_single_shot_id (clock,
+        gst_clock_get_time (clock) + (2 * GST_SECOND));
+    if ((wait_ret = gst_clock_id_wait (clock_id, NULL)) != GST_CLOCK_OK) {
+      GST_WARNING ("clock_id_wait returned: %d", wait_ret);
+    }
+    gst_clock_id_unref (clock_id);
+
+    check_position (bin, pos, "before slow down rate change");
+
+    /* change playback rate to 0.5 */
+    if (!gst_element_send_event (sink, rate_seek1)) {
+      GST_WARNING ("element failed to change playback rate");
+    }
+
+    check_position (bin, pos, "after slow down rate change");
+
+    /* run for 4 seconds */
+    clock_id =
+        gst_clock_new_single_shot_id (clock,
+        gst_clock_get_time (clock) + (4 * GST_SECOND));
+    if ((wait_ret = gst_clock_id_wait (clock_id, NULL)) != GST_CLOCK_OK) {
+      GST_WARNING ("clock_id_wait returned: %d", wait_ret);
+    }
+    gst_clock_id_unref (clock_id);
+
+    check_position (bin, pos, "before reverse rate change");
+
+    /* change playback rate to -1.0  */
+    if (!gst_element_send_event (sink, rate_seek2)) {
+      GST_WARNING ("element failed to change playback rate");
+    }
+
+    check_position (bin, pos, "after reverse rate change");
+
+    /* run for 7 seconds */
+    clock_id =
+        gst_clock_new_single_shot_id (clock,
+        gst_clock_get_time (clock) + (7 * GST_SECOND));
+    if ((wait_ret = gst_clock_id_wait (clock_id, NULL)) != GST_CLOCK_OK) {
+      GST_WARNING ("clock_id_wait returned: %d", wait_ret);
+    }
+    gst_clock_id_unref (clock_id);
+
+    check_position (bin, pos, "done");
+
+    gst_element_set_state (bin, GST_STATE_NULL);
+  }
+
+  /* cleanup */
+  gst_query_unref (pos);
+  g_object_unref (G_OBJECT (ctrl));
+  gst_object_unref (G_OBJECT (clock));
+  gst_object_unref (G_OBJECT (bin));
+  res = 0;
+Error:
+  return (res);
+}
diff --git a/tests/icles/input-selector-test.c b/tests/icles/input-selector-test.c
new file mode 100644
index 0000000..4742c03
--- /dev/null
+++ b/tests/icles/input-selector-test.c
@@ -0,0 +1,162 @@
+/* GStreamer
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <string.h>
+#include <stdlib.h>
+
+
+#include <gst/gst.h>
+
+static GMainLoop *loop = NULL;
+
+static gboolean
+my_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
+{
+  g_print ("Got %s message\n", GST_MESSAGE_TYPE_NAME (message));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:{
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_print ("Error: %s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* we want to be notified again the next time there is a message
+   * on the bus, so returning TRUE (FALSE means we want to stop watching
+   * for messages on the bus and our callback should not be called again)
+   */
+  return TRUE;
+}
+
+
+
+static gboolean
+switch_timer (GstElement * video_switch)
+{
+  gint nb_sources;
+  GstPad *active_pad, *new_pad;
+  gchar *active_name;
+
+  g_message ("switching");
+  g_object_get (G_OBJECT (video_switch), "n-pads", &nb_sources, NULL);
+  g_object_get (G_OBJECT (video_switch), "active-pad", &active_pad, NULL);
+
+  active_name = gst_pad_get_name (active_pad);
+  if (strcmp (active_name, "sink0") == 0) {
+    new_pad = gst_element_get_static_pad (video_switch, "sink1");
+  } else {
+    new_pad = gst_element_get_static_pad (video_switch, "sink0");
+  }
+  g_object_set (G_OBJECT (video_switch), "active-pad", new_pad, NULL);
+  g_free (active_name);
+  gst_object_unref (new_pad);
+
+  g_message ("current number of sources : %d, active source %s",
+      nb_sources, gst_pad_get_name (active_pad));
+
+  return (GST_STATE (GST_ELEMENT (video_switch)) == GST_STATE_PLAYING);
+}
+
+static void
+last_message_received (GObject * segment)
+{
+  gchar *last_message;
+
+  g_object_get (segment, "last_message", &last_message, NULL);
+  g_print ("last-message: %s\n", last_message);
+  g_free (last_message);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *pipeline, *src1, *src2, *video_switch, *video_sink, *segment;
+  GstElement *sink1_sync, *sink2_sync, *capsfilter;
+  GstBus *bus;
+
+  /* Initing GStreamer library */
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+  src1 = gst_element_factory_make ("videotestsrc", "src1");
+  g_object_set (G_OBJECT (src1), "pattern", 0, NULL);
+  src2 = gst_element_factory_make ("videotestsrc", "src2");
+  g_object_set (G_OBJECT (src2), "pattern", 1, NULL);
+  capsfilter = gst_element_factory_make ("capsfilter", "caps0");
+  g_object_set (G_OBJECT (capsfilter), "caps",
+      gst_caps_from_string ("video/x-raw-rgb,width=640,height=480"), NULL);
+  video_switch = gst_element_factory_make ("input-selector", "video_switch");
+  segment = gst_element_factory_make ("identity", "identity-segment");
+  g_object_set (G_OBJECT (segment), "silent", TRUE, NULL);
+  g_signal_connect (G_OBJECT (segment), "notify::last-message",
+      G_CALLBACK (last_message_received), segment);
+  g_object_set (G_OBJECT (segment), "single-segment", TRUE, NULL);
+  video_sink = gst_element_factory_make ("ximagesink", "video_sink");
+  g_object_set (G_OBJECT (video_sink), "sync", FALSE, NULL);
+  sink1_sync = gst_element_factory_make ("identity", "sink0_sync");
+  g_object_set (G_OBJECT (sink1_sync), "sync", TRUE, NULL);
+  sink2_sync = gst_element_factory_make ("identity", "sink1_sync");
+  g_object_set (G_OBJECT (sink2_sync), "sync", TRUE, NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src1, src2, segment, video_switch,
+      video_sink, sink1_sync, sink2_sync, capsfilter, NULL);
+  gst_element_link (src1, sink1_sync);
+  gst_element_link (sink1_sync, video_switch);
+  gst_element_link (src2, capsfilter);
+  gst_element_link (capsfilter, sink2_sync);
+  gst_element_link (sink2_sync, video_switch);
+  gst_element_link (video_switch, segment);
+  gst_element_link (segment,    /*scaler);
+                                   gst_element_link (scaler, */ video_sink);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, NULL);
+  gst_object_unref (bus);
+  gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
+
+  g_timeout_add (200, (GSourceFunc) switch_timer, video_switch);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_READY);
+
+  /* unref */
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  exit (0);
+}
diff --git a/tests/icles/output-selector-test.c b/tests/icles/output-selector-test.c
new file mode 100644
index 0000000..6d9b94e
--- /dev/null
+++ b/tests/icles/output-selector-test.c
@@ -0,0 +1,173 @@
+#include <gst/gst.h>
+
+#define SWITCH_TIMEOUT 1000
+#define NUM_VIDEO_BUFFERS 500
+
+static GMainLoop *loop;
+
+/* Output selector src pads */
+static GstPad *osel_src1 = NULL;
+static GstPad *osel_src2 = NULL;
+
+static gboolean
+my_bus_callback (GstBus * bus, GstMessage * message, gpointer data)
+{
+  g_print ("Got %s message\n", GST_MESSAGE_TYPE_NAME (message));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:{
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_print ("Error: %s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+  /* we want to be notified again the next time there is a message
+   * on the bus, so returning TRUE (FALSE means we want to stop watching
+   * for messages on the bus and our callback should not be called again)
+   */
+  return TRUE;
+}
+
+static gboolean
+switch_cb (gpointer user_data)
+{
+  GstElement *sel = GST_ELEMENT (user_data);
+  GstPad *old_pad, *new_pad = NULL;
+
+  g_object_get (G_OBJECT (sel), "active-pad", &old_pad, NULL);
+
+  if (old_pad == osel_src1)
+    new_pad = osel_src2;
+  else
+    new_pad = osel_src1;
+
+  g_object_set (G_OBJECT (sel), "active-pad", new_pad, NULL);
+
+  g_print ("switched from %s:%s to %s:%s\n", GST_DEBUG_PAD_NAME (old_pad),
+      GST_DEBUG_PAD_NAME (new_pad));
+
+  gst_object_unref (old_pad);
+
+  return TRUE;
+
+}
+
+static void
+on_bin_element_added (GstBin * bin, GstElement * element, gpointer user_data)
+{
+  g_object_set (G_OBJECT (element), "sync", FALSE, "async", FALSE, NULL);
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *pipeline, *src, *toverlay, *osel, *sink1, *sink2, *c1, *c2, *c0;
+  GstPad *sinkpad;
+  GstBus *bus;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* create elements */
+  pipeline = gst_element_factory_make ("pipeline", "pipeline");
+  src = gst_element_factory_make ("videotestsrc", "src");
+  c0 = gst_element_factory_make ("videoconvert", NULL);
+  toverlay = gst_element_factory_make ("timeoverlay", "timeoverlay");
+  osel = gst_element_factory_make ("output-selector", "osel");
+  c1 = gst_element_factory_make ("videoconvert", NULL);
+  c2 = gst_element_factory_make ("videoconvert", NULL);
+  sink1 = gst_element_factory_make ("autovideosink", "sink1");
+  sink2 = gst_element_factory_make ("autovideosink", "sink2");
+
+  if (!pipeline || !src || !c0 || !toverlay || !osel || !c1 || !c2 || !sink1 ||
+      !sink2) {
+    g_print ("missing element\n");
+    return -1;
+  }
+
+  /* add them to bin */
+  gst_bin_add_many (GST_BIN (pipeline), src, c0, toverlay, osel, c1, sink1, c2,
+      sink2, NULL);
+
+  /* set properties */
+  g_object_set (G_OBJECT (src), "is-live", TRUE, NULL);
+  g_object_set (G_OBJECT (src), "do-timestamp", TRUE, NULL);
+  g_object_set (G_OBJECT (src), "num-buffers", NUM_VIDEO_BUFFERS, NULL);
+  g_object_set (G_OBJECT (osel), "resend-latest", TRUE, NULL);
+
+  /* handle deferred properties */
+  g_signal_connect (G_OBJECT (sink1), "element-added",
+      G_CALLBACK (on_bin_element_added), NULL);
+  g_signal_connect (G_OBJECT (sink2), "element-added",
+      G_CALLBACK (on_bin_element_added), NULL);
+
+  /* link src ! timeoverlay ! osel */
+  if (!gst_element_link_many (src, c0, toverlay, osel, NULL)) {
+    g_print ("linking failed\n");
+    return -1;
+  }
+
+  /* link output 1 */
+  sinkpad = gst_element_get_static_pad (c1, "sink");
+  osel_src1 = gst_element_get_request_pad (osel, "src%d");
+  if (gst_pad_link (osel_src1, sinkpad) != GST_PAD_LINK_OK) {
+    g_print ("linking output 1 converter failed\n");
+    return -1;
+  }
+  gst_object_unref (sinkpad);
+
+  if (!gst_element_link (c1, sink1)) {
+    g_print ("linking output 1 failed\n");
+    return -1;
+  }
+
+  /* link output 2 */
+  sinkpad = gst_element_get_static_pad (c2, "sink");
+  osel_src2 = gst_element_get_request_pad (osel, "src%d");
+  if (gst_pad_link (osel_src2, sinkpad) != GST_PAD_LINK_OK) {
+    g_print ("linking output 2 converter failed\n");
+    return -1;
+  }
+  gst_object_unref (sinkpad);
+
+  if (!gst_element_link (c2, sink2)) {
+    g_print ("linking output 2 failed\n");
+    return -1;
+  }
+
+  /* add switch callback */
+  g_timeout_add (SWITCH_TIMEOUT, switch_cb, osel);
+
+  /* change to playing */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* now run */
+  g_main_loop_run (loop);
+
+  /* also clean up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_element_release_request_pad (osel, osel_src1);
+  gst_element_release_request_pad (osel, osel_src2);
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  return 0;
+}
diff --git a/tests/icles/playback/Makefile.am b/tests/icles/playback/Makefile.am
new file mode 100644
index 0000000..b1d7f94
--- /dev/null
+++ b/tests/icles/playback/Makefile.am
@@ -0,0 +1,26 @@
+noinst_PROGRAMS = test decodetest test2 test3 test4 test5 test6 test7
+
+test_LDADD = $(GST_LIBS) 
+test_CFLAGS = $(GST_CFLAGS)
+
+test2_LDADD = $(GST_LIBS) 
+test2_CFLAGS = $(GST_CFLAGS)
+
+test3_LDADD = $(GST_LIBS) 
+test3_CFLAGS = $(GST_CFLAGS)
+
+test4_LDADD = $(GST_LIBS) 
+test4_CFLAGS = $(GST_CFLAGS)
+
+test5_LDADD = $(GST_LIBS) 
+test5_CFLAGS = $(GST_CFLAGS)
+
+test6_LDADD = $(GST_LIBS) 
+test6_CFLAGS = $(GST_CFLAGS)
+
+test7_LDADD = $(GST_LIBS) 
+test7_CFLAGS = $(GST_CFLAGS)
+
+decodetest_LDADD = $(GST_LIBS) 
+decodetest_CFLAGS = $(GST_CFLAGS)
+
diff --git a/tests/icles/playback/Makefile.in b/tests/icles/playback/Makefile.in
new file mode 100644
index 0000000..020d151
--- /dev/null
+++ b/tests/icles/playback/Makefile.in
@@ -0,0 +1,907 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = test$(EXEEXT) decodetest$(EXEEXT) test2$(EXEEXT) \
+	test3$(EXEEXT) test4$(EXEEXT) test5$(EXEEXT) test6$(EXEEXT) \
+	test7$(EXEEXT)
+subdir = tests/icles/playback
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+decodetest_SOURCES = decodetest.c
+decodetest_OBJECTS = decodetest-decodetest.$(OBJEXT)
+am__DEPENDENCIES_1 =
+decodetest_DEPENDENCIES = $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+decodetest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(decodetest_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+test_SOURCES = test.c
+test_OBJECTS = test-test.$(OBJEXT)
+test_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test2_SOURCES = test2.c
+test2_OBJECTS = test2-test2.$(OBJEXT)
+test2_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test2_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test3_SOURCES = test3.c
+test3_OBJECTS = test3-test3.$(OBJEXT)
+test3_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test3_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test4_SOURCES = test4.c
+test4_OBJECTS = test4-test4.$(OBJEXT)
+test4_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test4_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test5_SOURCES = test5.c
+test5_OBJECTS = test5-test5.$(OBJEXT)
+test5_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test5_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test5_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test6_SOURCES = test6.c
+test6_OBJECTS = test6-test6.$(OBJEXT)
+test6_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test6_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test6_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+test7_SOURCES = test7.c
+test7_OBJECTS = test7-test7.$(OBJEXT)
+test7_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test7_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test7_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = decodetest.c test.c test2.c test3.c test4.c test5.c test6.c \
+	test7.c
+DIST_SOURCES = decodetest.c test.c test2.c test3.c test4.c test5.c \
+	test6.c test7.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+test_LDADD = $(GST_LIBS) 
+test_CFLAGS = $(GST_CFLAGS)
+test2_LDADD = $(GST_LIBS) 
+test2_CFLAGS = $(GST_CFLAGS)
+test3_LDADD = $(GST_LIBS) 
+test3_CFLAGS = $(GST_CFLAGS)
+test4_LDADD = $(GST_LIBS) 
+test4_CFLAGS = $(GST_CFLAGS)
+test5_LDADD = $(GST_LIBS) 
+test5_CFLAGS = $(GST_CFLAGS)
+test6_LDADD = $(GST_LIBS) 
+test6_CFLAGS = $(GST_CFLAGS)
+test7_LDADD = $(GST_LIBS) 
+test7_CFLAGS = $(GST_CFLAGS)
+decodetest_LDADD = $(GST_LIBS) 
+decodetest_CFLAGS = $(GST_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/playback/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/icles/playback/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+decodetest$(EXEEXT): $(decodetest_OBJECTS) $(decodetest_DEPENDENCIES) 
+	@rm -f decodetest$(EXEEXT)
+	$(AM_V_CCLD)$(decodetest_LINK) $(decodetest_OBJECTS) $(decodetest_LDADD) $(LIBS)
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) 
+	@rm -f test$(EXEEXT)
+	$(AM_V_CCLD)$(test_LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+test2$(EXEEXT): $(test2_OBJECTS) $(test2_DEPENDENCIES) 
+	@rm -f test2$(EXEEXT)
+	$(AM_V_CCLD)$(test2_LINK) $(test2_OBJECTS) $(test2_LDADD) $(LIBS)
+test3$(EXEEXT): $(test3_OBJECTS) $(test3_DEPENDENCIES) 
+	@rm -f test3$(EXEEXT)
+	$(AM_V_CCLD)$(test3_LINK) $(test3_OBJECTS) $(test3_LDADD) $(LIBS)
+test4$(EXEEXT): $(test4_OBJECTS) $(test4_DEPENDENCIES) 
+	@rm -f test4$(EXEEXT)
+	$(AM_V_CCLD)$(test4_LINK) $(test4_OBJECTS) $(test4_LDADD) $(LIBS)
+test5$(EXEEXT): $(test5_OBJECTS) $(test5_DEPENDENCIES) 
+	@rm -f test5$(EXEEXT)
+	$(AM_V_CCLD)$(test5_LINK) $(test5_OBJECTS) $(test5_LDADD) $(LIBS)
+test6$(EXEEXT): $(test6_OBJECTS) $(test6_DEPENDENCIES) 
+	@rm -f test6$(EXEEXT)
+	$(AM_V_CCLD)$(test6_LINK) $(test6_OBJECTS) $(test6_LDADD) $(LIBS)
+test7$(EXEEXT): $(test7_OBJECTS) $(test7_DEPENDENCIES) 
+	@rm -f test7$(EXEEXT)
+	$(AM_V_CCLD)$(test7_LINK) $(test7_OBJECTS) $(test7_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decodetest-decodetest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2-test2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test3-test3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test4-test4.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test5-test5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test6-test6.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test7-test7.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+decodetest-decodetest.o: decodetest.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(decodetest_CFLAGS) $(CFLAGS) -MT decodetest-decodetest.o -MD -MP -MF $(DEPDIR)/decodetest-decodetest.Tpo -c -o decodetest-decodetest.o `test -f 'decodetest.c' || echo '$(srcdir)/'`decodetest.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/decodetest-decodetest.Tpo $(DEPDIR)/decodetest-decodetest.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='decodetest.c' object='decodetest-decodetest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(decodetest_CFLAGS) $(CFLAGS) -c -o decodetest-decodetest.o `test -f 'decodetest.c' || echo '$(srcdir)/'`decodetest.c
+
+decodetest-decodetest.obj: decodetest.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(decodetest_CFLAGS) $(CFLAGS) -MT decodetest-decodetest.obj -MD -MP -MF $(DEPDIR)/decodetest-decodetest.Tpo -c -o decodetest-decodetest.obj `if test -f 'decodetest.c'; then $(CYGPATH_W) 'decodetest.c'; else $(CYGPATH_W) '$(srcdir)/decodetest.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/decodetest-decodetest.Tpo $(DEPDIR)/decodetest-decodetest.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='decodetest.c' object='decodetest-decodetest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(decodetest_CFLAGS) $(CFLAGS) -c -o decodetest-decodetest.obj `if test -f 'decodetest.c'; then $(CYGPATH_W) 'decodetest.c'; else $(CYGPATH_W) '$(srcdir)/decodetest.c'; fi`
+
+test-test.o: test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test.c' object='test-test.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+
+test-test.obj: test.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test.c' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+
+test2-test2.o: test2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test2_CFLAGS) $(CFLAGS) -MT test2-test2.o -MD -MP -MF $(DEPDIR)/test2-test2.Tpo -c -o test2-test2.o `test -f 'test2.c' || echo '$(srcdir)/'`test2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test2-test2.Tpo $(DEPDIR)/test2-test2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test2.c' object='test2-test2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test2_CFLAGS) $(CFLAGS) -c -o test2-test2.o `test -f 'test2.c' || echo '$(srcdir)/'`test2.c
+
+test2-test2.obj: test2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test2_CFLAGS) $(CFLAGS) -MT test2-test2.obj -MD -MP -MF $(DEPDIR)/test2-test2.Tpo -c -o test2-test2.obj `if test -f 'test2.c'; then $(CYGPATH_W) 'test2.c'; else $(CYGPATH_W) '$(srcdir)/test2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test2-test2.Tpo $(DEPDIR)/test2-test2.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test2.c' object='test2-test2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test2_CFLAGS) $(CFLAGS) -c -o test2-test2.obj `if test -f 'test2.c'; then $(CYGPATH_W) 'test2.c'; else $(CYGPATH_W) '$(srcdir)/test2.c'; fi`
+
+test3-test3.o: test3.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test3_CFLAGS) $(CFLAGS) -MT test3-test3.o -MD -MP -MF $(DEPDIR)/test3-test3.Tpo -c -o test3-test3.o `test -f 'test3.c' || echo '$(srcdir)/'`test3.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test3-test3.Tpo $(DEPDIR)/test3-test3.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test3.c' object='test3-test3.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test3_CFLAGS) $(CFLAGS) -c -o test3-test3.o `test -f 'test3.c' || echo '$(srcdir)/'`test3.c
+
+test3-test3.obj: test3.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test3_CFLAGS) $(CFLAGS) -MT test3-test3.obj -MD -MP -MF $(DEPDIR)/test3-test3.Tpo -c -o test3-test3.obj `if test -f 'test3.c'; then $(CYGPATH_W) 'test3.c'; else $(CYGPATH_W) '$(srcdir)/test3.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test3-test3.Tpo $(DEPDIR)/test3-test3.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test3.c' object='test3-test3.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test3_CFLAGS) $(CFLAGS) -c -o test3-test3.obj `if test -f 'test3.c'; then $(CYGPATH_W) 'test3.c'; else $(CYGPATH_W) '$(srcdir)/test3.c'; fi`
+
+test4-test4.o: test4.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test4_CFLAGS) $(CFLAGS) -MT test4-test4.o -MD -MP -MF $(DEPDIR)/test4-test4.Tpo -c -o test4-test4.o `test -f 'test4.c' || echo '$(srcdir)/'`test4.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test4-test4.Tpo $(DEPDIR)/test4-test4.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test4.c' object='test4-test4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test4_CFLAGS) $(CFLAGS) -c -o test4-test4.o `test -f 'test4.c' || echo '$(srcdir)/'`test4.c
+
+test4-test4.obj: test4.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test4_CFLAGS) $(CFLAGS) -MT test4-test4.obj -MD -MP -MF $(DEPDIR)/test4-test4.Tpo -c -o test4-test4.obj `if test -f 'test4.c'; then $(CYGPATH_W) 'test4.c'; else $(CYGPATH_W) '$(srcdir)/test4.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test4-test4.Tpo $(DEPDIR)/test4-test4.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test4.c' object='test4-test4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test4_CFLAGS) $(CFLAGS) -c -o test4-test4.obj `if test -f 'test4.c'; then $(CYGPATH_W) 'test4.c'; else $(CYGPATH_W) '$(srcdir)/test4.c'; fi`
+
+test5-test5.o: test5.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test5_CFLAGS) $(CFLAGS) -MT test5-test5.o -MD -MP -MF $(DEPDIR)/test5-test5.Tpo -c -o test5-test5.o `test -f 'test5.c' || echo '$(srcdir)/'`test5.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test5-test5.Tpo $(DEPDIR)/test5-test5.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test5.c' object='test5-test5.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test5_CFLAGS) $(CFLAGS) -c -o test5-test5.o `test -f 'test5.c' || echo '$(srcdir)/'`test5.c
+
+test5-test5.obj: test5.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test5_CFLAGS) $(CFLAGS) -MT test5-test5.obj -MD -MP -MF $(DEPDIR)/test5-test5.Tpo -c -o test5-test5.obj `if test -f 'test5.c'; then $(CYGPATH_W) 'test5.c'; else $(CYGPATH_W) '$(srcdir)/test5.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test5-test5.Tpo $(DEPDIR)/test5-test5.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test5.c' object='test5-test5.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test5_CFLAGS) $(CFLAGS) -c -o test5-test5.obj `if test -f 'test5.c'; then $(CYGPATH_W) 'test5.c'; else $(CYGPATH_W) '$(srcdir)/test5.c'; fi`
+
+test6-test6.o: test6.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test6_CFLAGS) $(CFLAGS) -MT test6-test6.o -MD -MP -MF $(DEPDIR)/test6-test6.Tpo -c -o test6-test6.o `test -f 'test6.c' || echo '$(srcdir)/'`test6.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test6-test6.Tpo $(DEPDIR)/test6-test6.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test6.c' object='test6-test6.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test6_CFLAGS) $(CFLAGS) -c -o test6-test6.o `test -f 'test6.c' || echo '$(srcdir)/'`test6.c
+
+test6-test6.obj: test6.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test6_CFLAGS) $(CFLAGS) -MT test6-test6.obj -MD -MP -MF $(DEPDIR)/test6-test6.Tpo -c -o test6-test6.obj `if test -f 'test6.c'; then $(CYGPATH_W) 'test6.c'; else $(CYGPATH_W) '$(srcdir)/test6.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test6-test6.Tpo $(DEPDIR)/test6-test6.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test6.c' object='test6-test6.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test6_CFLAGS) $(CFLAGS) -c -o test6-test6.obj `if test -f 'test6.c'; then $(CYGPATH_W) 'test6.c'; else $(CYGPATH_W) '$(srcdir)/test6.c'; fi`
+
+test7-test7.o: test7.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test7_CFLAGS) $(CFLAGS) -MT test7-test7.o -MD -MP -MF $(DEPDIR)/test7-test7.Tpo -c -o test7-test7.o `test -f 'test7.c' || echo '$(srcdir)/'`test7.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test7-test7.Tpo $(DEPDIR)/test7-test7.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test7.c' object='test7-test7.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test7_CFLAGS) $(CFLAGS) -c -o test7-test7.o `test -f 'test7.c' || echo '$(srcdir)/'`test7.c
+
+test7-test7.obj: test7.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test7_CFLAGS) $(CFLAGS) -MT test7-test7.obj -MD -MP -MF $(DEPDIR)/test7-test7.Tpo -c -o test7-test7.obj `if test -f 'test7.c'; then $(CYGPATH_W) 'test7.c'; else $(CYGPATH_W) '$(srcdir)/test7.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test7-test7.Tpo $(DEPDIR)/test7-test7.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='test7.c' object='test7-test7.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test7_CFLAGS) $(CFLAGS) -c -o test7-test7.obj `if test -f 'test7.c'; then $(CYGPATH_W) 'test7.c'; else $(CYGPATH_W) '$(srcdir)/test7.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/icles/playback/decodetest.c b/tests/icles/playback/decodetest.c
new file mode 100644
index 0000000..c50bf9f
--- /dev/null
+++ b/tests/icles/playback/decodetest.c
@@ -0,0 +1,169 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <gst/gst.h>
+#include <string.h>
+
+static void
+warning_cb (GstBus * bus, GstMessage * msg, gpointer foo)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_warning (msg, &err, &dbg);
+
+  g_printerr ("WARNING: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+error_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_error (msg, &err, &dbg);
+
+  g_printerr ("ERROR: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_main_loop_quit (main_loop);
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_print ("EOS\n");
+  g_main_loop_quit (main_loop);
+}
+
+static void
+state_cb (GstBus * bus, GstMessage * msg, GstElement * pipeline)
+{
+  if (msg->src == GST_OBJECT (pipeline)) {
+    GstState old_state, new_state, pending_state;
+
+    gst_message_parse_state_changed (msg, &old_state, &new_state,
+        &pending_state);
+    if (new_state == GST_STATE_PLAYING) {
+      g_print ("Decoding ...\n");
+    }
+  }
+}
+
+static void
+new_decoded_pad_cb (GstElement * decodebin, GstPad * pad, gboolean last,
+    GstElement * pipeline)
+{
+  GstPadLinkReturn ret;
+  GstElement *fakesink;
+  GstPad *fakesink_pad;
+
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+  fakesink_pad = gst_element_get_static_pad (fakesink, "sink");
+
+  gst_bin_add (GST_BIN (pipeline), fakesink);
+
+  /* this doesn't really seem right, but it makes things work for me */
+  gst_element_set_state (fakesink, GST_STATE_PLAYING);
+
+  ret = gst_pad_link (pad, fakesink_pad);
+  if (!GST_PAD_LINK_SUCCESSFUL (ret)) {
+    g_printerr ("Failed to link %s:%s to %s:%s (ret = %d)\n",
+        GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (fakesink_pad), ret);
+  } else {
+    g_printerr ("Linked %s:%s to %s:%s\n", GST_DEBUG_PAD_NAME (pad),
+        GST_DEBUG_PAD_NAME (fakesink_pad));
+  }
+
+  gst_object_unref (fakesink_pad);
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *decoder;
+  GstElement *source;
+  GstElement *pipeline;
+  GstStateChangeReturn res;
+  GMainLoop *loop;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_printerr ("Decode file from start to end.\n");
+    g_printerr ("Usage: %s URI\n\n", argv[0]);
+    return 1;
+  }
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), loop);
+  g_signal_connect (bus, "message::warning", G_CALLBACK (warning_cb), NULL);
+  g_signal_connect (bus, "message::state-changed", G_CALLBACK (state_cb),
+      pipeline);
+
+  source = gst_element_factory_make ("giosrc", "source");
+  g_assert (source);
+
+  if (argv[1] && strstr (argv[1], "://") != NULL) {
+    g_object_set (G_OBJECT (source), "location", argv[1], NULL);
+  } else if (argv[1]) {
+    gchar *uri = g_strdup_printf ("file://%s", argv[1]);
+
+    g_object_set (G_OBJECT (source), "location", uri, NULL);
+    g_free (uri);
+  }
+
+  decoder = gst_element_factory_make ("decodebin", "decoder");
+  g_assert (decoder);
+
+  gst_bin_add (GST_BIN (pipeline), source);
+  gst_bin_add (GST_BIN (pipeline), decoder);
+
+  gst_element_link_pads (source, "src", decoder, "sink");
+
+  g_signal_connect (decoder, "new-decoded-pad",
+      G_CALLBACK (new_decoded_pad_cb), pipeline);
+
+  res = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_main_loop_run (loop);
+
+  /* tidy up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+  gst_object_unref (bus);
+
+  return 0;
+}
diff --git a/tests/icles/playback/test.c b/tests/icles/playback/test.c
new file mode 100644
index 0000000..282302f
--- /dev/null
+++ b/tests/icles/playback/test.c
@@ -0,0 +1,193 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst.h>
+
+#include <stdlib.h>
+
+static GMainLoop *loop;
+
+static GstElement *
+gen_video_element (void)
+{
+  GstElement *element;
+  GstElement *conv;
+  GstElement *sink;
+  GstPad *pad;
+
+  element = gst_bin_new ("vbin");
+  conv = gst_element_factory_make ("videoconvert", "conv");
+  sink = gst_element_factory_make (DEFAULT_VIDEOSINK, "sink");
+
+  gst_bin_add (GST_BIN (element), conv);
+  gst_bin_add (GST_BIN (element), sink);
+  gst_element_link_pads (conv, "src", sink, "sink");
+
+  pad = gst_element_get_static_pad (conv, "sink");
+  gst_element_add_pad (element, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  return element;
+}
+
+static GstElement *
+gen_audio_element (void)
+{
+  GstElement *element;
+  GstElement *conv;
+  GstElement *sink;
+  GstPad *pad;
+
+  element = gst_bin_new ("abin");
+  conv = gst_element_factory_make ("audioconvert", "conv");
+  sink = gst_element_factory_make (DEFAULT_AUDIOSINK, "sink");
+
+  gst_bin_add (GST_BIN (element), conv);
+  gst_bin_add (GST_BIN (element), sink);
+  gst_element_link_pads (conv, "src", sink, "sink");
+
+  pad = gst_element_get_static_pad (conv, "sink");
+  gst_element_add_pad (element, gst_ghost_pad_new ("sink", pad));
+  gst_object_unref (pad);
+
+  return element;
+}
+
+static void
+cb_newpad (GstElement * decodebin, GstPad * pad, gboolean last, gpointer data)
+{
+  GstCaps *caps;
+  GstStructure *str;
+  GstPad *sinkpad;
+  GstElement *sink;
+  GstElement *pipeline;
+  const gchar *name;
+  GstStateChangeReturn ret;
+  GstPadLinkReturn lret;
+
+  /* check media type */
+  caps = gst_pad_get_caps (pad, NULL);
+  str = gst_caps_get_structure (caps, 0);
+
+  name = gst_structure_get_name (str);
+  g_print ("name: %s\n", name);
+
+  if (g_strrstr (name, "audio")) {
+    sink = gen_audio_element ();
+  } else if (g_strrstr (name, "video")) {
+    sink = gen_video_element ();
+  } else {
+    sink = NULL;
+  }
+  gst_caps_unref (caps);
+
+  if (sink) {
+    pipeline = GST_ELEMENT_CAST (data);
+
+    /* add new sink to the pipeline */
+    gst_bin_add (GST_BIN_CAST (pipeline), sink);
+
+    /* set the new sink tp PAUSED as well */
+    ret = gst_element_set_state (sink, GST_STATE_PAUSED);
+    if (ret == GST_STATE_CHANGE_FAILURE)
+      goto state_error;
+
+    /* get the ghostpad of the sink bin */
+    sinkpad = gst_element_get_static_pad (sink, "sink");
+
+    /* link'n'play */
+    lret = gst_pad_link (pad, sinkpad);
+    if (lret != GST_PAD_LINK_OK)
+      goto link_failed;
+
+    gst_object_unref (sinkpad);
+  }
+  return;
+
+  /* ERRORS */
+state_error:
+  {
+    gst_bin_remove (GST_BIN_CAST (pipeline), sink);
+    g_warning ("could not change state of new sink (%d)", ret);
+    return;
+  }
+link_failed:
+  {
+    g_warning ("could not link pad and sink (%d)", lret);
+    return;
+  }
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *pipeline, *filesrc, *decodebin;
+  GstStateChangeReturn res;
+
+  gst_init (&argc, &argv);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  filesrc = gst_element_factory_make ("filesrc", "filesrc");
+  g_assert (filesrc);
+  decodebin = gst_element_factory_make ("decodebin", "decodebin");
+  g_assert (decodebin);
+
+  g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad",
+      G_CALLBACK (cb_newpad), pipeline);
+
+  gst_bin_add_many (GST_BIN (pipeline), filesrc, decodebin, NULL);
+  gst_element_link (filesrc, decodebin);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>\n", argv[0]);
+    exit (-1);
+  }
+  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+
+  /* set to paused, decodebin will autoplug and signal new_pad callbacks */
+  res = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not pause\n");
+    return -1;
+  }
+  /* wait for paused to complete */
+  res = gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not pause\n");
+    return -1;
+  }
+
+  /* play, now all the sinks are added to the pipeline and are prerolled and
+   * ready to play. */
+  res = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  /* go in the mainloop now */
+  loop = g_main_loop_new (NULL, TRUE);
+  g_main_loop_run (loop);
+
+  return 0;
+}
diff --git a/tests/icles/playback/test2.c b/tests/icles/playback/test2.c
new file mode 100644
index 0000000..86f3c4c
--- /dev/null
+++ b/tests/icles/playback/test2.c
@@ -0,0 +1,43 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <gst/gst.h>
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *player;
+  GstStateChangeReturn res;
+
+  gst_init (&argc, &argv);
+
+  player = gst_element_factory_make ("playbin", "player");
+  g_assert (player);
+
+  g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
+
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_main_loop_run (g_main_loop_new (NULL, TRUE));
+
+  return 0;
+}
diff --git a/tests/icles/playback/test3.c b/tests/icles/playback/test3.c
new file mode 100644
index 0000000..d55e633
--- /dev/null
+++ b/tests/icles/playback/test3.c
@@ -0,0 +1,127 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <gst/gst.h>
+
+#define UPDATE_INTERVAL 500
+
+static gboolean
+update_scale (GstElement * element)
+{
+  gint64 duration = -1;
+  gint64 position = -1;
+  gchar dur_str[32], pos_str[32];
+
+  if (gst_element_query_position (element, GST_FORMAT_TIME, &position) &&
+      position != -1) {
+    g_snprintf (pos_str, 32, "%" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+  } else {
+    g_snprintf (pos_str, 32, "-:--:--.---------");
+  }
+
+  if (gst_element_query_duration (element, GST_FORMAT_TIME, &duration) &&
+      duration != -1) {
+    g_snprintf (dur_str, 32, "%" GST_TIME_FORMAT, GST_TIME_ARGS (duration));
+  } else {
+    g_snprintf (dur_str, 32, "-:--:--.---------");
+  }
+
+  g_print ("%s / %s\n", pos_str, dur_str);
+
+  return TRUE;
+}
+
+static void
+warning_cb (GstBus * bus, GstMessage * msg, gpointer foo)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_warning (msg, &err, &dbg);
+
+  g_printerr ("WARNING: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+error_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_error (msg, &err, &dbg);
+
+  g_printerr ("ERROR: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_main_loop_quit (main_loop);
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_print ("EOS\n");
+  g_main_loop_quit (main_loop);
+}
+
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstStateChangeReturn res;
+  GstElement *player;
+  GMainLoop *loop;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  player = gst_element_factory_make ("playbin", "player");
+  g_assert (player);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (player));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), loop);
+  g_signal_connect (bus, "message::warning", G_CALLBACK (warning_cb), NULL);
+
+  g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
+
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, player);
+
+  g_main_loop_run (loop);
+
+  /* tidy up */
+  gst_element_set_state (player, GST_STATE_NULL);
+  gst_object_unref (player);
+  gst_object_unref (bus);
+
+  return 0;
+}
diff --git a/tests/icles/playback/test4.c b/tests/icles/playback/test4.c
new file mode 100644
index 0000000..c2bb7c9
--- /dev/null
+++ b/tests/icles/playback/test4.c
@@ -0,0 +1,99 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>             /* exit() */
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <gst/gst.h>
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *player;
+  GstStateChangeReturn res;
+
+  gst_init (&argc, &argv);
+
+  player = gst_element_factory_make ("playbin", "player");
+  g_assert (player);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>\n", argv[0]);
+    exit (-1);
+  }
+
+  g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
+
+  g_print ("play...\n");
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_print ("sleep 2...\n");
+  g_usleep (2 * G_USEC_PER_SEC);
+
+  g_print ("pause...\n");
+  res = gst_element_set_state (player, GST_STATE_PAUSED);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_print ("sleep 2...\n");
+  g_usleep (2 * G_USEC_PER_SEC);
+
+  g_print ("play...\n");
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_print ("sleep 2...\n");
+  g_usleep (2 * G_USEC_PER_SEC);
+
+  g_print ("ready...\n");
+  res = gst_element_set_state (player, GST_STATE_READY);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_print ("sleep 2...\n");
+  g_usleep (2 * G_USEC_PER_SEC);
+
+  g_print ("play...\n");
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_main_loop_run (g_main_loop_new (NULL, TRUE));
+
+  return 0;
+}
diff --git a/tests/icles/playback/test5.c b/tests/icles/playback/test5.c
new file mode 100644
index 0000000..8badfd3
--- /dev/null
+++ b/tests/icles/playback/test5.c
@@ -0,0 +1,133 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>             /* exit */
+#endif
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+
+static void
+new_pad (GstElement * element, GstPad * pad, gboolean last, GstElement * sink)
+{
+  g_print ("New pad...\n");
+}
+
+static void
+no_more_pads (GstElement * element)
+{
+  g_print ("No more pads...\n");
+  g_main_loop_quit (loop);
+}
+
+static gboolean
+start_finding (GstElement * pipeline)
+{
+  GstStateChangeReturn res;
+
+  g_print ("finding caps...\n");
+  res = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not pause\n");
+    exit (-1);
+  }
+  return FALSE;
+}
+
+static void
+dump_element_stats (GstElement * element)
+{
+  GstIterator *it;
+  GValue data = { 0, };
+
+  it = gst_element_iterate_src_pads (element);
+  while (gst_iterator_next (it, &data) == GST_ITERATOR_OK) {
+    GstPad *pad = g_value_get_object (&data);
+    GstCaps *caps;
+    gchar *str;
+    GstQuery *query;
+
+    g_print ("stream %s:\n", GST_OBJECT_NAME (pad));
+
+    caps = gst_pad_get_caps (pad, NULL);
+    str = gst_caps_to_string (caps);
+    g_print (" caps: %s\n", str);
+    g_free (str);
+    gst_caps_unref (caps);
+
+    query = gst_query_new_duration (GST_FORMAT_TIME);
+    if (gst_pad_query (pad, query)) {
+      gint64 duration;
+
+      gst_query_parse_duration (query, NULL, &duration);
+
+      g_print (" duration: %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (duration));
+    }
+    gst_query_unref (query);
+
+    g_value_reset (&data);
+  }
+  g_value_unset (&data);
+  gst_iterator_free (it);
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *pipeline, *filesrc, *decodebin;
+
+  gst_init (&argc, &argv);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  filesrc = gst_element_factory_make ("filesrc", "filesrc");
+  g_assert (filesrc);
+
+  decodebin = gst_element_factory_make ("decodebin", "decodebin");
+  g_assert (decodebin);
+
+  g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad",
+      G_CALLBACK (new_pad), NULL);
+  g_signal_connect (G_OBJECT (decodebin), "no-more-pads",
+      G_CALLBACK (no_more_pads), NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), filesrc, decodebin, NULL);
+  gst_element_link (filesrc, decodebin);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>\n", argv[0]);
+    exit (-1);
+  }
+  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+
+  /* event based programming approach */
+  loop = g_main_loop_new (NULL, TRUE);
+  g_idle_add ((GSourceFunc) start_finding, pipeline);
+  g_main_loop_run (loop);
+
+  dump_element_stats (decodebin);
+
+  return 0;
+}
diff --git a/tests/icles/playback/test6.c b/tests/icles/playback/test6.c
new file mode 100644
index 0000000..696767b
--- /dev/null
+++ b/tests/icles/playback/test6.c
@@ -0,0 +1,165 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>             /* exit */
+#endif
+#include <gst/gst.h>
+
+static void
+new_decoded_pad_cb (GstElement * decodebin, GstPad * new_pad, gboolean last,
+    GstElement * pipeline)
+{
+  GstElement *fakesink;
+  GstPad *sinkpad;
+
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+  gst_bin_add (GST_BIN (pipeline), fakesink);
+
+  sinkpad = gst_element_get_static_pad (fakesink, "sink");
+  if (GST_PAD_LINK_FAILED (gst_pad_link (new_pad, sinkpad))) {
+    g_warning ("Failed to link %s:%s to %s:%s", GST_DEBUG_PAD_NAME (new_pad),
+        GST_DEBUG_PAD_NAME (sinkpad));
+    gst_bin_remove (GST_BIN (pipeline), fakesink);
+  } else {
+    gst_element_set_state (fakesink, GST_STATE_PAUSED);
+  }
+}
+
+static void
+show_error (const gchar * errmsg, GstBus * bus)
+{
+  GstMessage *msg;
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
+  if (msg) {
+    g_assert (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+
+    gst_message_parse_error (msg, &err, &dbg);
+  }
+
+  g_print ("ERROR: %s\n", errmsg);
+  g_print ("       %s\n", (err) ? err->message : "");
+  if (dbg) {
+    g_print ("\ndebug: %s\n\n", dbg);
+    g_free (dbg);
+  }
+
+  if (err)
+    g_error_free (err);
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstElement *pipeline, *filesrc, *decodebin;
+  GstStateChangeReturn res;
+  GstIterator *it;
+  GstBus *bus;
+  GValue data = { 0, };
+
+  gst_init (&argc, &argv);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  filesrc = gst_element_factory_make ("filesrc", "filesrc");
+  g_assert (filesrc);
+
+  decodebin = gst_element_factory_make ("decodebin", "decodebin");
+  g_assert (decodebin);
+
+  gst_bin_add_many (GST_BIN (pipeline), filesrc, decodebin, NULL);
+  gst_element_link (filesrc, decodebin);
+
+  if (argc < 2) {
+    g_print ("usage: %s <filenames>\n", argv[0]);
+    exit (-1);
+  }
+
+  if (!g_str_has_prefix (argv[1], "file://")) {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+  } else {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1] + 7, NULL);
+  }
+
+  /* we've got to connect fakesinks to newly decoded pads to make sure
+   * buffers have actually been flowing over those pads and caps have
+   * been set on them. decodebin might insert internal queues and
+   * without fakesinks it's pot-luck what caps we get from the pad, because
+   * it depends on whether the queues have started pushing buffers yet or not.
+   * With fakesinks we make sure that the pipeline doesn't go to PAUSED state
+   * before each fakesink has a buffer queued. */
+  g_signal_connect (decodebin, "new-decoded-pad",
+      G_CALLBACK (new_decoded_pad_cb), pipeline);
+
+  bus = gst_element_get_bus (pipeline);
+
+  g_print ("pause..\n");
+  res = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    show_error ("Could not go to PAUSED state", bus);
+    exit (-1);
+  }
+  g_print ("waiting..\n");
+  res = gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
+  if (res != GST_STATE_CHANGE_SUCCESS) {
+    show_error ("Failed to complete state change to PAUSED", bus);
+    exit (-1);
+  }
+  g_print ("stats..\n");
+
+  it = gst_element_iterate_src_pads (decodebin);
+  while (gst_iterator_next (it, &data) == GST_ITERATOR_OK) {
+    GstPad *pad = g_value_get_object (&data);
+    GstCaps *caps;
+    gchar *str;
+    GstQuery *query;
+
+    g_print ("stream %s:\n", GST_OBJECT_NAME (pad));
+
+    caps = gst_pad_get_caps (pad, NULL);
+    str = gst_caps_to_string (caps);
+    g_print (" caps: %s\n", str);
+    g_free (str);
+    gst_caps_unref (caps);
+
+    query = gst_query_new_duration (GST_FORMAT_TIME);
+    if (gst_pad_query (pad, query)) {
+      gint64 duration;
+
+      gst_query_parse_duration (query, NULL, &duration);
+
+      g_print (" duration: %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (duration));
+    }
+    gst_query_unref (query);
+
+    g_value_reset (&data);
+  }
+  g_value_unset (&data);
+  gst_iterator_free (it);
+
+  return 0;
+}
diff --git a/tests/icles/playback/test7.c b/tests/icles/playback/test7.c
new file mode 100644
index 0000000..6dc984a
--- /dev/null
+++ b/tests/icles/playback/test7.c
@@ -0,0 +1,178 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>             /* exit() */
+#endif
+#include <gst/gst.h>
+
+#define UPDATE_INTERVAL 500
+
+static int arg_count;
+static int max_count;
+
+static gboolean
+update_scale (GstElement * element)
+{
+  gint64 duration = -1;
+  gint64 position = -1;
+  gchar dur_str[32], pos_str[32];
+
+  if (gst_element_query_position (element, GST_FORMAT_TIME, &position) &&
+      position != -1) {
+    g_snprintf (pos_str, 32, "%" GST_TIME_FORMAT, GST_TIME_ARGS (position));
+  } else {
+    g_snprintf (pos_str, 32, "-:--:--.---------");
+  }
+
+  if (gst_element_query_duration (element, GST_FORMAT_TIME, &duration) &&
+      duration != -1) {
+    g_snprintf (dur_str, 32, "%" GST_TIME_FORMAT, GST_TIME_ARGS (duration));
+  } else {
+    g_snprintf (dur_str, 32, "-:--:--.---------");
+  }
+
+  g_print ("%s / %s\n", pos_str, dur_str);
+
+  return TRUE;
+}
+
+static void
+warning_cb (GstBus * bus, GstMessage * msg, gpointer foo)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_warning (msg, &err, &dbg);
+
+  g_printerr ("WARNING: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+error_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_error (msg, &err, &dbg);
+
+  g_printerr ("ERROR: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_main_loop_quit (main_loop);
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_print ("EOS\n");
+  g_main_loop_quit (main_loop);
+}
+
+static void
+new_clock_cb (GstBus * bus, GstMessage * msg, gpointer nothing)
+{
+  GstClock *clock;
+
+  gst_message_parse_new_clock (msg, &clock);
+  g_print ("NEW CLOCK: %s\n", GST_OBJECT_NAME (clock));
+}
+
+static void
+clock_lost_cb (GstBus * bus, GstMessage * msg, GstElement * playbin)
+{
+  GstClock *clock;
+
+  gst_message_parse_clock_lost (msg, &clock);
+  g_print ("CLOCK LOST: %s\n", GST_OBJECT_NAME (clock));
+
+  gst_element_set_state (playbin, GST_STATE_PAUSED);
+  gst_element_set_state (playbin, GST_STATE_PLAYING);
+}
+
+static void
+about_to_finish_cb (GstElement * element, gchar * uri[])
+{
+  if (arg_count < max_count) {
+    g_object_set (G_OBJECT (element), "uri", uri[arg_count], NULL);
+    arg_count++;
+  }
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GstStateChangeReturn res;
+  GstElement *player;
+  GMainLoop *loop;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri> [<uri> ... ]\n", argv[0]);
+    exit (-1);
+  }
+
+  player = gst_element_factory_make ("playbin2", "player");
+  g_assert (player);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (player));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), loop);
+  g_signal_connect (bus, "message::warning", G_CALLBACK (warning_cb), NULL);
+  g_signal_connect (bus, "message::new-clock", G_CALLBACK (new_clock_cb), NULL);
+  g_signal_connect (bus, "message::clock-lost", G_CALLBACK (clock_lost_cb),
+      player);
+
+  g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
+
+  arg_count = 2;
+  max_count = argc;
+  g_signal_connect (player, "about-to-finish", G_CALLBACK (about_to_finish_cb),
+      argv);
+
+  res = gst_element_set_state (player, GST_STATE_PLAYING);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, player);
+
+  g_main_loop_run (loop);
+
+  /* tidy up */
+  gst_element_set_state (player, GST_STATE_NULL);
+  gst_object_unref (player);
+  gst_object_unref (bus);
+
+  return 0;
+}
diff --git a/tests/icles/playbin-text.c b/tests/icles/playbin-text.c
new file mode 100644
index 0000000..a7c4736
--- /dev/null
+++ b/tests/icles/playbin-text.c
@@ -0,0 +1,175 @@
+/* GStreamer
+ *
+ * Copyright (C) 2009 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *playbin;
+  GstElement *textsink;
+
+  GMainLoop *loop;
+};
+
+static App s_app;
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, App * app)
+{
+  GST_DEBUG ("got message %s",
+      gst_message_type_get_name (GST_MESSAGE_TYPE (message)));
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_error (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+
+      g_main_loop_quit (app->loop);
+      break;
+    }
+    case GST_MESSAGE_WARNING:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_warning (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+
+      g_main_loop_quit (app->loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      g_message ("received EOS");
+      g_main_loop_quit (app->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+static void
+have_subtitle (GstElement * appsink, App * app)
+{
+  GstBuffer *buffer;
+
+  /* get the buffer, we can also wakeup the mainloop to get the subtitle from
+   * appsink in the mainloop */
+  g_signal_emit_by_name (appsink, "pull-buffer", &buffer);
+
+  if (buffer) {
+    guint8 *data;
+    gsize size;
+    gint64 position;
+    GstClock *clock;
+    GstClockTime base_time, running_time;
+
+    gst_element_query_position (appsink, GST_FORMAT_TIME, &position);
+
+    clock = gst_element_get_clock (appsink);
+    base_time = gst_element_get_base_time (appsink);
+
+    running_time = gst_clock_get_time (clock) - base_time;
+
+    gst_object_unref (clock);
+
+    g_message ("received a subtitle at position %" GST_TIME_FORMAT
+        ", running_time %" GST_TIME_FORMAT, GST_TIME_ARGS (position),
+        GST_TIME_ARGS (running_time));
+
+    data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+    gst_util_dump_mem (data, size);
+    gst_buffer_unmap (buffer, data, size);
+  }
+}
+
+int
+main (int argc, char *argv[])
+{
+  App *app = &s_app;
+  GstBus *bus;
+  GstCaps *subcaps;
+
+  gst_init (&argc, &argv);
+
+  if (argc < 2) {
+    g_print ("usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* create a mainloop to get messages */
+  app->loop = g_main_loop_new (NULL, TRUE);
+
+  app->playbin = gst_element_factory_make ("playbin2", NULL);
+  g_assert (app->playbin);
+
+  /* set appsink to get the subtitles */
+  app->textsink = gst_element_factory_make ("appsink", "subtitle_sink");
+  g_object_set (G_OBJECT (app->textsink), "emit-signals", TRUE, NULL);
+  g_object_set (G_OBJECT (app->textsink), "ts-offset", 0 * GST_SECOND, NULL);
+  g_signal_connect (app->textsink, "new-buffer", G_CALLBACK (have_subtitle),
+      app);
+  subcaps = gst_caps_from_string ("text/x-pango-markup; text/plain");
+  g_object_set (G_OBJECT (app->textsink), "caps", subcaps, NULL);
+  gst_caps_unref (subcaps);
+
+  g_object_set (G_OBJECT (app->playbin), "text-sink", app->textsink, NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (app->playbin));
+
+  /* add watch for messages */
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, app);
+
+  /* set to read from appsrc */
+  g_object_set (app->playbin, "uri", argv[1], NULL);
+
+  /* go to playing and wait in a mainloop. */
+  gst_element_set_state (app->playbin, GST_STATE_PLAYING);
+
+  /* this mainloop is stopped when we receive an error or EOS */
+  g_main_loop_run (app->loop);
+
+  g_message ("stopping");
+
+  gst_element_set_state (app->playbin, GST_STATE_NULL);
+
+  gst_object_unref (bus);
+  g_main_loop_unref (app->loop);
+
+  return 0;
+}
diff --git a/tests/icles/position-formats.c b/tests/icles/position-formats.c
new file mode 100644
index 0000000..774d288
--- /dev/null
+++ b/tests/icles/position-formats.c
@@ -0,0 +1,149 @@
+/*
+ * position-formats.c
+ *
+ * we mostly use GST_FORMAT_TIME in queries and seeks. Test the other ones to
+ * know what works and what not.
+ */
+
+#include <gst/gst.h>
+
+#include <stdio.h>
+
+static gboolean
+bus_message (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+  GMainLoop *loop = (GMainLoop *) user_data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_error (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_WARNING:
+    {
+      GError *gerror;
+      gchar *debug;
+
+      gst_message_parse_warning (message, &gerror, &debug);
+      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+      g_error_free (gerror);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      g_main_loop_quit (loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+static void
+print_value (gboolean res, GstFormat fmt, gint64 val)
+{
+  if (res) {
+    switch (fmt) {
+      case GST_FORMAT_TIME:
+        printf ("%" GST_TIME_FORMAT, GST_TIME_ARGS (val));
+        break;
+      case GST_FORMAT_PERCENT:
+        printf ("%8.4lf%%", (gdouble) val / GST_FORMAT_PERCENT_SCALE);
+        break;
+      case GST_FORMAT_DEFAULT:
+      case GST_FORMAT_BYTES:
+      case GST_FORMAT_BUFFERS:
+      default:
+        printf ("%" G_GINT64_FORMAT, val);
+        break;
+    }
+  } else {
+    printf ("-");
+  }
+}
+
+static gboolean
+run_queries (gpointer user_data)
+{
+  GstElement *bin = (GstElement *) user_data;
+  GstFormat i, fmt;
+  gint64 pos, dur;
+  gboolean pres, dres;
+
+  for (i = GST_FORMAT_DEFAULT; i <= GST_FORMAT_PERCENT; i++) {
+    fmt = i;
+    pres = gst_element_query_position (bin, fmt, &pos);
+    fmt = i;
+    dres = gst_element_query_duration (bin, fmt, &dur);
+    printf ("%-8s : ", gst_format_get_name (i));
+    print_value (pres, fmt, pos);
+    printf (" / ");
+    print_value (dres, fmt, dur);
+    printf ("\n");
+  }
+  printf ("\n");
+
+  return TRUE;
+}
+
+gint
+main (gint argc, gchar ** argv)
+{
+  gint res = 1;
+  GstElement *bin;
+  GstBus *bus;
+  GMainLoop *loop;
+  const gchar *uri;
+
+  gst_init (&argc, &argv);
+
+  if (argc < 2) {
+    printf ("Usage: %s <uri>\n", argv[0]);
+    goto Error;
+  }
+  uri = argv[1];
+
+  /* build pipeline */
+  bin = gst_element_factory_make ("playbin2", NULL);
+  if (!bin) {
+    GST_WARNING ("need playbin2 from gst-plugins-base");
+    goto Error;
+  }
+
+  g_object_set (bin, "uri", uri, NULL);
+
+  loop = g_main_loop_new (NULL, TRUE);
+
+  /* add watch for messages */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
+  gst_bus_add_watch (bus, (GstBusFunc) bus_message, (gpointer) loop);
+  gst_object_unref (bus);
+
+  /* add timeout for queries */
+  g_timeout_add (1000, (GSourceFunc) run_queries, (gpointer) bin);
+
+  /* run the show */
+  if (gst_element_set_state (bin,
+          GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE) {
+    g_main_loop_run (loop);
+    gst_element_set_state (bin, GST_STATE_NULL);
+  }
+
+  /* cleanup */
+  g_main_loop_unref (loop);
+  gst_object_unref (G_OBJECT (bin));
+  res = 0;
+Error:
+  return (res);
+}
diff --git a/tests/icles/stress-playbin.c b/tests/icles/stress-playbin.c
new file mode 100644
index 0000000..3b90710
--- /dev/null
+++ b/tests/icles/stress-playbin.c
@@ -0,0 +1,157 @@
+#include <gst/gst.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define TEST_RUNTIME 120.0      /* how long to run the test, in seconds */
+
+static void
+play_file (const gchar * bin, const gint delay, const gchar * uri)
+{
+  GstStateChangeReturn sret;
+  GstMessage *msg;
+  GstElement *play;
+  guint wait_nanosecs;
+
+  play = gst_element_factory_make (bin, "playbin");
+
+  g_object_set (play, "uri", uri, NULL);
+  g_printerr ("Playing %s\n", uri);
+  sret = gst_element_set_state (play, GST_STATE_PLAYING);
+  if (sret != GST_STATE_CHANGE_ASYNC && sret != GST_STATE_CHANGE_SUCCESS) {
+    g_printerr ("ERROR: state change failed, sret=%d\n", sret);
+    goto next;
+  }
+
+  wait_nanosecs = g_random_int_range (0, GST_MSECOND * delay);
+  msg = gst_bus_poll (GST_ELEMENT_BUS (play),
+      GST_MESSAGE_ERROR | GST_MESSAGE_EOS, wait_nanosecs);
+  if (msg) {
+    switch (GST_MESSAGE_TYPE (msg)) {
+      case GST_MESSAGE_ERROR:
+      {
+        GError *gerror;
+        gchar *debug;
+
+        gst_message_parse_error (msg, &gerror, &debug);
+        gst_object_default_error (GST_MESSAGE_SRC (msg), gerror, debug);
+        g_error_free (gerror);
+        g_free (debug);
+        break;
+      }
+      case GST_MESSAGE_EOS:
+        g_printerr ("Got EOS\n");
+        break;
+      default:
+        g_printerr ("Got unexpected %s messge\n", GST_MESSAGE_TYPE_NAME (msg));
+        break;
+    }
+    gst_message_unref (msg);
+    goto next;
+  }
+
+  /* on to the next one */
+  g_print (".");
+
+next:
+  gst_element_set_state (play, GST_STATE_NULL);
+  gst_object_unref (play);
+}
+
+static void
+check_arg (GPtrArray * files, const gchar * arg)
+{
+  GDir *dir;
+
+  if ((dir = g_dir_open (arg, 0, NULL))) {
+    const gchar *entry;
+
+    while ((entry = g_dir_read_name (dir))) {
+      gchar *path;
+
+      path = g_strconcat (arg, G_DIR_SEPARATOR_S, entry, NULL);
+      check_arg (files, path);
+      g_free (path);
+    }
+
+    g_dir_close (dir);
+    return;
+  } else if (g_file_test (arg, G_FILE_TEST_EXISTS)) {
+    /* hack: technically an URI is not just file:// + path, but it'll do here */
+    g_ptr_array_add (files, g_strdup_printf ("file://%s", arg));
+  }
+}
+
+int
+main (int argc, char **argv)
+{
+  GPtrArray *files;
+  gchar **args = NULL;
+  guint num, i;
+  GError *err = NULL;
+  gchar *bin = NULL;
+  gint run = 100;
+  GOptionContext *ctx;
+  GOptionEntry options[] = {
+    {"bin", '\000', 0, G_OPTION_ARG_STRING, &bin, "playbin factory name", NULL},
+    {"runtime", '\000', 0, G_OPTION_ARG_INT, &run, "maximum play time (ms)",
+        NULL},
+    {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &args, NULL},
+    {NULL}
+  };
+  GTimer *timer;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx = g_option_context_new ("FILES OR DIRECTORIES WITH AUDIO FILES");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    exit (1);
+  }
+  g_option_context_free (ctx);
+
+  if (!bin)
+    bin = g_strdup ("playbin");
+
+  if (strcmp (bin, "playbin") && strcmp (bin, "playbin2")) {
+    g_print ("Please provide a valid playbin argument; playbin | playbin2");
+    return 1;
+  }
+  if (args == NULL || *args == NULL) {
+    g_print ("Please provide one or more directories with audio files\n\n");
+    return 1;
+  }
+
+  files = g_ptr_array_new ();
+
+  num = g_strv_length (args);
+  for (i = 0; i < num; ++i) {
+    if (g_path_is_absolute (args[i])) {
+      check_arg (files, args[i]);
+    } else {
+      g_warning ("Argument '%s' is not an absolute file path", args[i]);
+    }
+  }
+
+  if (files->len == 0) {
+    g_print ("Did not find any files\n\n");
+    return 1;
+  }
+
+  timer = g_timer_new ();
+
+  while (g_timer_elapsed (timer, NULL) < TEST_RUNTIME) {
+    gint32 idx;
+
+    idx = g_random_int_range (0, files->len);
+    play_file (bin, run, (const gchar *) g_ptr_array_index (files, idx));
+  }
+
+  g_strfreev (args);
+  g_free (bin);
+  g_timer_destroy (timer);
+
+  return 0;
+}
diff --git a/tests/icles/stress-videooverlay.c b/tests/icles/stress-videooverlay.c
new file mode 100644
index 0000000..bcbe7dc
--- /dev/null
+++ b/tests/icles/stress-videooverlay.c
@@ -0,0 +1,245 @@
+/* GStreamer
+ * Copyright (C) <2005> Julien Moutte <julien@moutte.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/interfaces/videooverlay.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <math.h>
+#include <sys/time.h>
+
+static GMainLoop *loop;
+
+static Display *disp;
+static Window root, win = 0;
+static GC gc;
+static gint width = 320, height = 240, x = 0, y = 0;
+static gint disp_width, disp_height;
+
+static inline long
+myclock (void)
+{
+  struct timeval tv;
+
+  gettimeofday (&tv, NULL);
+  return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
+}
+
+static void
+open_display (void)
+{
+  gint screen_num;
+
+  disp = XOpenDisplay (NULL);
+  root = DefaultRootWindow (disp);
+  screen_num = DefaultScreen (disp);
+  disp_width = DisplayWidth (disp, screen_num);
+  disp_height = DisplayHeight (disp, screen_num);
+}
+
+static void
+close_display (void)
+{
+  XCloseDisplay (disp);
+}
+
+static gboolean
+resize_window (GstPipeline * pipeline)
+{
+  width = (sin (myclock () / 300.0) * 200) + 640;
+  height = (sin (myclock () / 300.0) * 200) + 480;
+
+  XResizeWindow (disp, win, width, height);
+
+  XSync (disp, FALSE);
+
+  return TRUE;
+}
+
+static gboolean
+move_window (GstPipeline * pipeline)
+{
+  x += 5;
+  y = disp_height - height + (sin (myclock () / 300.0) * height);
+  if (x > disp_width)
+    x = 0;
+
+  XMoveWindow (disp, win, x, y);
+
+  XSync (disp, FALSE);
+
+  return TRUE;
+}
+
+static gboolean
+toggle_events (GstVideoOverlay * ov)
+{
+  static gboolean events_toggled;
+
+  gst_video_overlay_handle_events (ov, events_toggled);
+
+  if (events_toggled) {
+    g_print ("Events are handled\n");
+    events_toggled = FALSE;
+  } else {
+    g_print ("Events are NOT handled\n");
+    events_toggled = TRUE;
+  }
+
+  return TRUE;
+}
+
+static gboolean
+cycle_window (GstVideoOverlay * ov)
+{
+  XGCValues values;
+  Window old_win = win;
+  GC old_gc = gc;
+
+  win = XCreateSimpleWindow (disp, root, 0, 0, width, height, 0, 0, 0);
+
+  XSetWindowBackgroundPixmap (disp, win, None);
+
+  gc = XCreateGC (disp, win, 0, &values);
+
+  XMapRaised (disp, win);
+
+  XSync (disp, FALSE);
+
+  gst_video_overlay_set_window_handle (ov, win);
+
+  if (old_win) {
+    XDestroyWindow (disp, old_win);
+    XFreeGC (disp, old_gc);
+    XSync (disp, FALSE);
+  }
+
+  return TRUE;
+}
+
+static GstBusSyncReply
+create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  GstVideoOverlay *ov = NULL;
+
+  if (!gst_is_video_overlay_prepare_window_handle_message (message))
+    return GST_BUS_PASS;
+
+  ov = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
+
+  g_print ("Creating our own window\n");
+
+  cycle_window (ov);
+
+  g_timeout_add (50, (GSourceFunc) resize_window, pipeline);
+  g_timeout_add (50, (GSourceFunc) move_window, pipeline);
+  g_timeout_add (100, (GSourceFunc) cycle_window, ov);
+  g_timeout_add (2000, (GSourceFunc) toggle_events, ov);
+
+  gst_message_unref (message);
+  return GST_BUS_DROP;
+}
+
+#if 0
+static gboolean
+terminate_playback (GstElement * pipeline)
+{
+  g_print ("Terminating playback\n");
+  g_main_loop_quit (loop);
+  return FALSE;
+}
+#endif
+
+static gboolean
+pause_playback (GstElement * pipeline)
+{
+  g_print ("Pausing playback\n");
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  return FALSE;
+}
+
+static gboolean
+start_playback (GstElement * pipeline)
+{
+  g_print ("Starting playback\n");
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+  GstElement *pipeline;
+  GstBus *bus;
+
+#ifndef GST_DISABLE_PARSE
+  GError *error = NULL;
+#endif
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_print ("Usage: %s \"pipeline description with launch format\"\n",
+        argv[0]);
+    g_print
+        ("The pipeline should contain an element implementing GstVideoOverlay.\n");
+    g_print ("Example: %s \"videotestsrc ! ximagesink\"\n", argv[0]);
+    return -1;
+  }
+#ifdef GST_DISABLE_PARSE
+  g_print ("GStreamer was built without pipeline parsing capabilities.\n");
+  g_print
+      ("Please rebuild GStreamer with pipeline parsing capabilities activated to use this example.\n");
+  return 1;
+#else
+  pipeline = gst_parse_launch (argv[1], &error);
+  if (error) {
+    g_print ("Error while parsing pipeline description: %s\n", error->message);
+    return -1;
+  }
+#endif
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  open_display ();
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, pipeline);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* We want to get out after */
+  //g_timeout_add (500000, (GSourceFunc) terminate_playback, pipeline);
+  g_timeout_add (10000, (GSourceFunc) pause_playback, pipeline);
+  g_timeout_add (20000, (GSourceFunc) start_playback, pipeline);
+
+  g_main_loop_run (loop);
+
+  close_display ();
+
+  g_main_loop_unref (loop);
+
+  return 0;
+}
diff --git a/tests/icles/test-box.c b/tests/icles/test-box.c
new file mode 100644
index 0000000..09fd3e7
--- /dev/null
+++ b/tests/icles/test-box.c
@@ -0,0 +1,144 @@
+/* GStreamer interactive videoscale test
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+
+#include <gst/gst.h>
+
+#define CAPS " capsfilter caps=\"video/x-raw-yuv, format=(fourcc)I420, width=(int)640, height=(int)480\" "
+
+static GstElement *
+make_pipeline (gint type)
+{
+  GstElement *result;
+  gchar *pstr;
+
+  switch (type) {
+    case 0:
+      pstr =
+          g_strdup_printf ("videotestsrc ! " CAPS
+          " ! videobox name=box ! videoscale ! " CAPS
+          " ! videoconvert ! ximagesink");
+      break;
+    default:
+      return NULL;
+  }
+
+  result = gst_parse_launch_full (pstr, NULL, GST_PARSE_FLAG_NONE, NULL);
+  g_print ("created test %d: \"%s\"\n", type, pstr);
+  g_free (pstr);
+
+  return result;
+}
+
+#define MAX_ROUND 100
+
+int
+main (int argc, char **argv)
+{
+  GstElement *pipe, *filter;
+  gint left, right;
+  gint top, bottom;
+  gint rdir, ldir;
+  gint tdir, bdir;
+  gint round, type, stop;
+
+  gst_init (&argc, &argv);
+
+  type = 0;
+  stop = -1;
+
+  if (argc > 1) {
+    type = atoi (argv[1]);
+    stop = type + 1;
+  }
+
+  while (TRUE) {
+    GstMessage *message;
+
+    pipe = make_pipeline (type);
+    if (pipe == NULL)
+      break;
+
+    filter = gst_bin_get_by_name (GST_BIN (pipe), "box");
+    g_assert (filter);
+
+    /* start with no borders or cropping */
+    left = right = top = bottom = 0;
+    rdir = ldir = tdir = bdir = -10;
+
+    for (round = 0; round < MAX_ROUND; round++) {
+      g_print ("box to %dx%d %dx%d (%d/%d)   \r", left, right, top, bottom,
+          round, MAX_ROUND);
+
+      g_object_set (filter, "left", left, "right", right, "top", top, "bottom",
+          bottom, NULL);
+
+      if (round == 0)
+        gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+      left += ldir;
+      if (left >= 40)
+        ldir = -10;
+      else if (left < -30)
+        ldir = 10;
+
+      right += rdir;
+      if (right >= 30)
+        rdir = -10;
+      else if (right < -20)
+        rdir = 10;
+
+      top += tdir;
+      if (top >= 20)
+        tdir = -10;
+      else if (top < -30)
+        tdir = 10;
+
+      bottom += bdir;
+      if (bottom >= 60)
+        bdir = -10;
+      else if (bottom < -40)
+        bdir = 10;
+
+      message =
+          gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
+          50 * GST_MSECOND);
+      if (message) {
+        g_print ("got error                                 \n");
+
+        gst_message_unref (message);
+      }
+    }
+    g_print ("test %d done                    \n", type);
+
+    gst_object_unref (filter);
+    gst_element_set_state (pipe, GST_STATE_NULL);
+    gst_object_unref (pipe);
+
+    type++;
+    if (type == stop)
+      break;
+  }
+  return 0;
+}
diff --git a/tests/icles/test-colorkey.c b/tests/icles/test-colorkey.c
new file mode 100644
index 0000000..ad5db92
--- /dev/null
+++ b/tests/icles/test-colorkey.c
@@ -0,0 +1,285 @@
+/* GStreamer
+ * Copyright (C) <2008> Stefan Kost <ensonic@users.sf.net>
+ *
+ * test-colorkey: test manual colorkey handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+#include <gst/gst.h>
+#include <gst/interfaces/videooverlay.h>
+#include <gst/interfaces/propertyprobe.h>
+
+#if !GTK_CHECK_VERSION (2, 17, 7)
+static void
+gtk_widget_get_allocation (GtkWidget * w, GtkAllocation * a)
+{
+  *a = w->allocation;
+}
+#endif
+
+static GtkWidget *video_window = NULL;
+static GstElement *sink = NULL;
+static gulong embed_xid = 0;
+static GdkColor trans_color;
+static gboolean trans_color_set = FALSE;
+
+static void
+redraw_overlay (GtkWidget * widget)
+{
+  GtkAllocation allocation;
+  GdkWindow *window = gtk_widget_get_window (widget);
+  cairo_t *cr;
+
+  cr = gdk_cairo_create (window);
+  gtk_widget_get_allocation (widget, &allocation);
+
+  cairo_set_source_rgb (cr, 1, 1, 1);
+  cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
+  cairo_fill (cr);
+
+  if (trans_color_set) {
+    guint x, y;
+    guint h = allocation.height * 0.75;
+
+    gdk_cairo_set_source_color (cr, &trans_color);
+    cairo_rectangle (cr, 0, 0, allocation.width, h);
+    cairo_fill (cr);
+
+    for (y = h; y < allocation.height; y++) {
+      for (x = 0; x < allocation.width; x++) {
+        if (((x & 1) || (y & 1)) && (x & 1) != (y & 1)) {
+          cairo_move_to (cr, x, y);
+          cairo_paint (cr);
+        }
+      }
+    }
+  }
+}
+
+static gboolean
+handle_resize_cb (GtkWidget * widget, GdkEventConfigure * event, gpointer data)
+{
+  redraw_overlay (widget);
+  return FALSE;
+}
+
+static gboolean
+handle_expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer data)
+{
+  redraw_overlay (widget);
+  return FALSE;
+}
+
+static void
+realize_cb (GtkWidget * widget, gpointer data)
+{
+#if GTK_CHECK_VERSION(2,18,0)
+  {
+    GdkWindow *window = gtk_widget_get_window (widget);
+
+    /* This is here just for pedagogical purposes, GDK_WINDOW_XID will call it
+     * as well */
+    if (!gdk_window_ensure_native (window))
+      g_error ("Couldn't create native window needed for GstVideoOverlay!");
+  }
+#endif
+
+  {
+    GdkWindow *window = gtk_widget_get_window (video_window);
+
+    embed_xid = GDK_WINDOW_XID (window);
+    g_print ("Window realize: video window XID = %lu\n", embed_xid);
+  }
+}
+
+static void
+msg_state_changed (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
+{
+  const GstStructure *s;
+
+  s = gst_message_get_structure (message);
+
+  /* We only care about state changed on the pipeline */
+  if (s && GST_MESSAGE_SRC (message) == GST_OBJECT_CAST (pipeline)) {
+    GstState old, new, pending;
+    gint color;
+
+    gst_message_parse_state_changed (message, &old, &new, &pending);
+
+    /* When state of the pipeline changes to paused or playing we start updating scale */
+    switch (GST_STATE_TRANSITION (old, new)) {
+      case GST_STATE_CHANGE_READY_TO_PAUSED:{
+        g_object_get (G_OBJECT (sink), "colorkey", &color, NULL);
+        if (color != -1) {
+          trans_color.red = (color & 0xff0000) >> 8;
+          trans_color.green = (color & 0xff00);
+          trans_color.blue = (color & 0xff) << 8;
+          trans_color_set = TRUE;
+        } else {
+          trans_color_set = FALSE;
+        }
+        handle_resize_cb (video_window, NULL, NULL);
+        break;
+      }
+      default:
+        break;
+    }
+  }
+}
+
+static void
+window_closed (GtkWidget * widget, GdkEvent * event, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+
+  g_print ("stopping\n");
+  gtk_widget_hide (widget);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gtk_main_quit ();
+}
+
+static gboolean
+start_pipeline (gpointer user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+  GstStateChangeReturn sret;
+
+  sret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE) {
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    gtk_main_quit ();
+  }
+  return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window;
+  GstElement *pipeline, *src;
+  GstBus *bus;
+  GstStateChangeReturn sret;
+  GstPropertyProbe *probe;
+  GValueArray *arr;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gst_init (&argc, &argv);
+  gtk_init (&argc, &argv);
+
+  /* prepare the pipeline */
+
+  pipeline = gst_pipeline_new ("xvoverlay");
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  sink = gst_element_factory_make ("xvimagesink", NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+
+#define COLOR_GRAY 0x7F7F7F
+
+  g_object_set (G_OBJECT (sink), "autopaint-colorkey", FALSE,
+      "force-aspect-ratio", TRUE, "draw-borders", FALSE,
+      "colorkey", COLOR_GRAY, NULL);
+
+  /* check xvimagesink capabilities */
+  sret = gst_element_set_state (pipeline, GST_STATE_READY);
+  if (sret == GST_STATE_CHANGE_FAILURE) {
+    g_printerr ("Can't set pipeline to READY\n");
+    gst_object_unref (pipeline);
+    return -1;
+  }
+
+  probe = GST_PROPERTY_PROBE (sink);
+  if (!probe) {
+    g_printerr ("Can't probe sink\n");
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    return -1;
+  }
+  arr =
+      gst_property_probe_probe_and_get_values_name (probe,
+      "autopaint-colorkey");
+  if (!arr || !arr->n_values) {
+    g_printerr ("Can't disable autopaint-colorkey property\n");
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+    gst_object_unref (pipeline);
+    return -1;
+  }
+  if (arr)
+    g_value_array_free (arr);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
+  g_signal_connect (bus, "message::state-changed",
+      G_CALLBACK (msg_state_changed), pipeline);
+  gst_object_unref (bus);
+
+  /* prepare the ui */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  g_signal_connect (G_OBJECT (window), "delete-event",
+      G_CALLBACK (window_closed), (gpointer) pipeline);
+  gtk_window_set_default_size (GTK_WINDOW (window), 320, 240);
+
+  video_window = gtk_drawing_area_new ();
+  g_signal_connect (G_OBJECT (video_window), "configure-event",
+      G_CALLBACK (handle_resize_cb), NULL);
+  g_signal_connect (G_OBJECT (video_window), "expose-event",
+      G_CALLBACK (handle_expose_cb), NULL);
+  g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL);
+  gtk_widget_set_double_buffered (video_window, FALSE);
+  gtk_container_add (GTK_CONTAINER (window), video_window);
+
+  /* show the gui and play */
+
+  gtk_widget_show_all (window);
+
+  /* realize window now so that the video window gets created and we can
+   * obtain its XID before the pipeline is started up and the videosink
+   * asks for the XID of the window to render onto */
+  gtk_widget_realize (window);
+
+  /* we should have the XID now */
+  g_assert (embed_xid != 0);
+
+  /* we know what the video sink is in this case (xvimagesink), so we can
+   * just set it directly here now (instead of waiting for a
+   * prepare-window-handle element message in a sync bus handler and setting
+   * it there) */
+  g_print ("setting XID %lu\n", embed_xid);
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), embed_xid);
+
+  g_idle_add (start_pipeline, pipeline);
+  gtk_main ();
+
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/icles/test-scale.c b/tests/icles/test-scale.c
new file mode 100644
index 0000000..719adee
--- /dev/null
+++ b/tests/icles/test-scale.c
@@ -0,0 +1,164 @@
+/* GStreamer interactive videoscale test
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+
+#include <gst/gst.h>
+
+static GstElement *
+make_pipeline (gint type)
+{
+  GstElement *result;
+  gchar *pstr;
+
+  switch (type) {
+    case 0:
+      pstr = g_strdup_printf ("videotestsrc ! capsfilter name=filter ! "
+          "ximagesink");
+      break;
+    case 1:
+      pstr = g_strdup_printf ("videotestsrc ! queue ! capsfilter name=filter ! "
+          "ximagesink");
+      break;
+    case 2:
+      pstr = g_strdup_printf ("videotestsrc peer-alloc=0 ! videoscale ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    case 3:
+      pstr =
+          g_strdup_printf ("videotestsrc peer-alloc=0 ! queue ! videoscale ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    case 4:
+      pstr =
+          g_strdup_printf ("videotestsrc peer-alloc=0 ! videoscale ! queue ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    case 5:
+      pstr = g_strdup_printf ("videotestsrc peer-alloc=0 ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    case 6:
+      pstr = g_strdup_printf ("videotestsrc ! videoscale ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    case 7:
+      pstr = g_strdup_printf ("v4l2src ! videoconvert ! videoscale ! "
+          "capsfilter name=filter ! " "ximagesink");
+      break;
+    default:
+      return NULL;
+  }
+
+  result = gst_parse_launch_full (pstr, NULL, GST_PARSE_FLAG_NONE, NULL);
+  g_print ("created test %d: \"%s\"\n", type, pstr);
+  g_free (pstr);
+
+  return result;
+}
+
+#define MAX_ROUND 100
+
+int
+main (int argc, char **argv)
+{
+  GstElement *pipe, *filter;
+  GstCaps *caps;
+  gint width, height;
+  gint xdir, ydir;
+  gint round, type, stop;
+
+  gst_init (&argc, &argv);
+
+  type = 0;
+  stop = -1;
+
+  if (argc > 1) {
+    type = atoi (argv[1]);
+    stop = type + 1;
+  }
+
+  while (TRUE) {
+    GstMessage *message;
+
+    pipe = make_pipeline (type);
+    if (pipe == NULL)
+      break;
+
+    filter = gst_bin_get_by_name (GST_BIN (pipe), "filter");
+    g_assert (filter);
+
+    width = 320;
+    height = 240;
+    xdir = ydir = -10;
+
+    for (round = 0; round < MAX_ROUND; round++) {
+      gchar *capsstr;
+      g_print ("resize to %dx%d (%d/%d)   \r", width, height, round, MAX_ROUND);
+
+      /* we prefer our fixed width and height but allow other dimensions to pass
+       * as well */
+      capsstr =
+          g_strdup_printf ("video/x-raw-rgb, width=(int)%d, height=(int)%d;"
+          "video/x-raw-rgb", width, height);
+      caps = gst_caps_from_string (capsstr);
+      g_free (capsstr);
+      g_object_set (filter, "caps", caps, NULL);
+      gst_caps_unref (caps);
+
+      if (round == 0)
+        gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+      width += xdir;
+      if (width >= 320)
+        xdir = -10;
+      else if (width < 200)
+        xdir = 10;
+
+      height += ydir;
+      if (height >= 240)
+        ydir = -10;
+      else if (height < 150)
+        ydir = 10;
+
+      message =
+          gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
+          50 * GST_MSECOND);
+      if (message) {
+        g_print ("got error           \n");
+
+        gst_message_unref (message);
+      }
+    }
+    g_print ("test %d done                    \n", type);
+
+    gst_object_unref (filter);
+    gst_element_set_state (pipe, GST_STATE_NULL);
+    gst_object_unref (pipe);
+
+    type++;
+    if (type == stop)
+      break;
+  }
+  return 0;
+}
diff --git a/tests/icles/test-textoverlay.c b/tests/icles/test-textoverlay.c
new file mode 100644
index 0000000..22119df
--- /dev/null
+++ b/tests/icles/test-textoverlay.c
@@ -0,0 +1,125 @@
+/* GStreamer interactive textoverlay test
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+static void
+set_enum_property_by_name (gpointer object, const gchar * prop,
+    const gchar * value)
+{
+  GParamSpec *pspec;
+  GValue val = { 0, };
+  GEnumClass *eclass;
+  GEnumValue *eval;
+
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (object), prop);
+  g_return_if_fail (pspec != NULL);
+
+  g_value_init (&val, pspec->value_type);
+  g_object_get_property (G_OBJECT (object), prop, &val);
+  eclass = G_ENUM_CLASS (g_type_class_peek (G_VALUE_TYPE (&val)));
+  g_return_if_fail (eclass != NULL);
+  eval = g_enum_get_value_by_name (eclass, value);
+  if (eval == NULL)
+    eval = g_enum_get_value_by_nick (eclass, value);
+  g_return_if_fail (eval != NULL);
+  g_value_set_enum (&val, eval->value);
+  g_object_set_property (G_OBJECT (object), prop, &val);
+  g_value_unset (&val);
+}
+
+static void
+show_text (GstElement * textoverlay, const gchar * txt, const gchar * valign,
+    const gchar * halign, const gchar * line_align)
+{
+  GstElement *pipe;
+
+  g_object_set (textoverlay, "text", txt, NULL);
+
+  set_enum_property_by_name (textoverlay, "valignment", valign);
+  set_enum_property_by_name (textoverlay, "halignment", halign);
+  set_enum_property_by_name (textoverlay, "line-alignment", line_align);
+
+  pipe = textoverlay;
+  while (GST_ELEMENT_PARENT (pipe))
+    pipe = GST_ELEMENT_PARENT (pipe);
+
+  gst_element_set_state (pipe, GST_STATE_PLAYING);
+  gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR, GST_SECOND);
+  gst_element_set_state (pipe, GST_STATE_NULL);
+}
+
+static void
+test_textoverlay (int width, int height)
+{
+  const gchar *valigns[] = { /* "baseline", */ "bottom", "top" };
+  const gchar *haligns[] = { "left", "center", "right" };
+  const gchar *linealigns[] = { "left", "center", "right" };
+  GstElement *pipe, *toverlay;
+  gchar *pstr;
+  gint a, b, c;
+
+  pstr = g_strdup_printf ("videotestsrc pattern=blue ! "
+      "video/x-raw-yuv,width=%d,height=%d ! t.video_sink "
+      "textoverlay name=t font-desc=\"Sans Serif, 20\" ! "
+      " videoconvert ! videoscale ! autovideosink", width, height);
+
+  pipe = gst_parse_launch_full (pstr, NULL, GST_PARSE_FLAG_NONE, NULL);
+  g_assert (pipe);
+
+  toverlay = gst_bin_get_by_name (GST_BIN (pipe), "t");
+  g_assert (toverlay);
+
+  g_object_set (toverlay, "xpad", 3, "ypad", 3, NULL);
+
+  for (a = 0; a < G_N_ELEMENTS (valigns); ++a) {
+    for (b = 0; b < G_N_ELEMENTS (haligns); ++b) {
+      for (c = 0; c < G_N_ELEMENTS (linealigns); ++c) {
+        gchar *s;
+
+        s = g_strdup_printf ("line-alignment = %s\n"
+            "&lt;----- halignment = %s -----&gt;\nvalignment = %s",
+            linealigns[c], haligns[b], valigns[a]);
+        show_text (toverlay, s, valigns[a], haligns[b], linealigns[c]);
+        g_free (s);
+      }
+    }
+  }
+
+  g_free (pstr);
+}
+
+int
+main (int argc, char **argv)
+{
+  gst_init (&argc, &argv);
+
+  test_textoverlay (640, 480);
+
+  g_print ("Now with odd width/height ...\n");
+  test_textoverlay (639, 479);
+
+  /* test_textoverlay (796, 256); */
+
+  return 0;
+}
diff --git a/tests/icles/test-videooverlay.c b/tests/icles/test-videooverlay.c
new file mode 100644
index 0000000..400d0ac
--- /dev/null
+++ b/tests/icles/test-videooverlay.c
@@ -0,0 +1,248 @@
+/* GStreamer
+ * Copyright (C) <2008> Stefan Kost <ensonic@users.sf.net>
+ *
+ * test-videooverlay: test videooverlay custom event handling and subregions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <glib.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+#include <gst/gst.h>
+#include <gst/interfaces/videooverlay.h>
+#include <gst/video/gstvideosink.h>
+
+#if !GTK_CHECK_VERSION (2, 17, 7)
+static void
+gtk_widget_get_allocation (GtkWidget * w, GtkAllocation * a)
+{
+  *a = w->allocation;
+}
+#endif
+
+static struct
+{
+  gint w, h;
+  GstVideoOverlay *overlay;
+  GtkWidget *widget;
+  gdouble a, p;
+  GstVideoRectangle rect;
+  gboolean running;
+} anim_state;
+
+static gboolean verbose = FALSE;
+
+static gboolean
+animate_render_rect (gpointer user_data)
+{
+  if (anim_state.running) {
+    GstVideoRectangle *r = &anim_state.rect;
+    gdouble s = sin (3.0 * anim_state.a);
+    gdouble c = cos (2.0 * anim_state.a);
+
+    anim_state.a += anim_state.p;
+    if (anim_state.a > (G_PI + G_PI))
+      anim_state.a -= (G_PI + G_PI);
+
+    r->w = anim_state.w / 2;
+    r->x = (r->w - (r->w / 2)) + c * (r->w / 2);
+    r->h = anim_state.h / 2;
+    r->y = (r->h - (r->h / 2)) + s * (r->h / 2);
+
+    gst_video_overlay_set_render_rectangle (anim_state.overlay, r->x, r->y,
+        r->w, r->h);
+    gtk_widget_queue_draw (anim_state.widget);
+  }
+  return TRUE;
+}
+
+static gboolean
+handle_resize_cb (GtkWidget * widget, GdkEventConfigure * event,
+    gpointer user_data)
+{
+  GtkAllocation allocation;
+
+  gtk_widget_get_allocation (widget, &allocation);
+
+  if (verbose) {
+    g_print ("resize(%p): %dx%d\n", widget, allocation.width,
+        allocation.height);
+  }
+  anim_state.w = allocation.width;
+  anim_state.h = allocation.height;
+  animate_render_rect (NULL);
+
+  return FALSE;
+}
+
+static gboolean
+handle_expose_cb (GtkWidget * widget, GdkEventExpose * event,
+    gpointer user_data)
+{
+  GstVideoRectangle *r = &anim_state.rect;
+  GtkAllocation allocation;
+  GdkWindow *window;
+  GtkStyle *style;
+  cairo_t *cr;
+
+  style = gtk_widget_get_style (widget);
+  window = gtk_widget_get_window (widget);
+  gtk_widget_get_allocation (widget, &allocation);
+  cr = gdk_cairo_create (window);
+
+  gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
+
+  /* we should only redraw outside of the video rect! */
+  cairo_rectangle (cr, 0, event->area.y, r->x, event->area.height);
+  cairo_rectangle (cr, r->x + r->w, event->area.y,
+      allocation.width - (r->x + r->w), event->area.height);
+
+  cairo_rectangle (cr, event->area.x, 0, event->area.width, r->y);
+  cairo_rectangle (cr, event->area.x, r->y + r->h,
+      event->area.width, allocation.height - (r->y + r->h));
+
+  cairo_fill (cr);
+
+  cairo_destroy (cr);
+
+  if (verbose) {
+    g_print ("expose(%p)\n", widget);
+  }
+  gst_video_overlay_expose (anim_state.overlay);
+  return FALSE;
+}
+
+static void
+window_closed (GtkWidget * widget, GdkEvent * event, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+
+  if (verbose) {
+    g_print ("stopping\n");
+  }
+  anim_state.running = FALSE;
+  gtk_widget_hide (widget);
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gtk_main_quit ();
+}
+
+gint
+main (gint argc, gchar ** argv)
+{
+  GdkWindow *video_window_xwindow;
+  GtkWidget *window, *video_window;
+  GstElement *pipeline, *src, *sink;
+  GstStateChangeReturn sret;
+  gulong embed_xid = 0;
+  gboolean force_aspect = FALSE, draw_borders = FALSE;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  gst_init (&argc, &argv);
+  gtk_init (&argc, &argv);
+
+  if (argc) {
+    gint arg;
+    for (arg = 0; arg < argc; arg++) {
+      if (!strcmp (argv[arg], "-a"))
+        force_aspect = TRUE;
+      else if (!strcmp (argv[arg], "-b"))
+        draw_borders = TRUE;
+      else if (!strcmp (argv[arg], "-v"))
+        verbose = TRUE;
+    }
+  }
+
+  /* prepare the pipeline */
+
+  pipeline = gst_pipeline_new ("xvoverlay");
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  sink = gst_element_factory_make ("xvimagesink", NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+  gst_element_link (src, sink);
+
+  g_object_set (G_OBJECT (sink), "handle-events", FALSE,
+      "force-aspect-ratio", force_aspect, "draw-borders", draw_borders, NULL);
+
+  /* prepare the ui */
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  g_signal_connect (G_OBJECT (window), "delete-event",
+      G_CALLBACK (window_closed), (gpointer) pipeline);
+  gtk_window_set_default_size (GTK_WINDOW (window), 320, 240);
+
+  video_window = gtk_drawing_area_new ();
+  gtk_widget_set_double_buffered (video_window, FALSE);
+  gtk_container_add (GTK_CONTAINER (window), video_window);
+
+  /* show the gui and play */
+  gtk_widget_show_all (window);
+
+  /* realize window now so that the video window gets created and we can
+   * obtain its XID before the pipeline is started up and the videosink
+   * asks for the XID of the window to render onto */
+  gtk_widget_realize (window);
+
+  video_window_xwindow = gtk_widget_get_window (video_window);
+  embed_xid = GDK_WINDOW_XID (video_window_xwindow);
+  if (verbose) {
+    g_print ("Window realize: got XID %lu\n", embed_xid);
+  }
+
+  /* we know what the video sink is in this case (xvimagesink), so we can
+   * just set it directly here now (instead of waiting for a
+   * prepare-window-handle element message in a sync bus handler and setting
+   * it there) */
+  gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), embed_xid);
+
+  anim_state.overlay = GST_VIDEO_OVERLAY (sink);
+  anim_state.widget = video_window;
+  anim_state.w = 320;
+  anim_state.h = 240;
+  anim_state.a = 0.0;
+  anim_state.p = (G_PI + G_PI) / 200.0;
+
+  handle_resize_cb (video_window, NULL, sink);
+  g_signal_connect (video_window, "configure-event",
+      G_CALLBACK (handle_resize_cb), NULL);
+  g_signal_connect (video_window, "expose-event",
+      G_CALLBACK (handle_expose_cb), NULL);
+
+  g_timeout_add (50, (GSourceFunc) animate_render_rect, NULL);
+
+  /* run the pipeline */
+  sret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  if (sret == GST_STATE_CHANGE_FAILURE)
+    gst_element_set_state (pipeline, GST_STATE_NULL);
+  else {
+    anim_state.running = TRUE;
+    gtk_main ();
+  }
+
+  gst_object_unref (pipeline);
+  return 0;
+}
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 0000000..647b634
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,49 @@
+bin_SCRIPTS = \
+	gst-visualise-@GST_MAJORMINOR@
+
+man_MANS = \
+        gst-visualise-@GST_MAJORMINOR@.1
+
+bin_PROGRAMS = \
+	gst-discoverer-@GST_MAJORMINOR@
+
+gst_discoverer_@GST_MAJORMINOR@_SOURCES = gst-discoverer.c
+
+CLEANFILES = $(man_MANS) $(bin_SCRIPTS) $(bin_PROGRAMS)
+
+EXTRA_DIST = \
+	gst-visualise-m.m gst-visualise.1.in
+
+
+LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la\
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la\
+	$(GST_BASE_LIBS) $(GST_LIBS)
+
+AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+
+# generate versioned scripts from templates
+%-@GST_MAJORMINOR@: %-m.m
+	$(AM_V_GEN)sed -e s,\@GST_MAJORMINOR\@,@GST_MAJORMINOR@,g $< > $@ && \
+	chmod +x $@
+
+# generate man pages
+%-@GST_MAJORMINOR@.1: %.1.in
+	$(AM_V_GEN)sed \
+                -e s,gst-visualise,gst-visualise-@GST_MAJORMINOR@,g \
+                $< >$@
+
+all: all-am chmod
+
+chmod: $(bin_SCRIPTS)
+	@chmod +x $^
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT gst-discoverer \
+	 -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:EXECUTABLE gst-discoverer -:TAGS eng debug \
+	 -:SOURCES $(gst_discoverer_@GST_MAJORMINOR@_SOURCES) \
+	 -:CFLAGS $(DEFS) $(AM_CFLAGS) \
+	 -:LDFLAGS -lgstpbutils-@GST_MAJORMINOR@ -lgstvideo-@GST_MAJORMINOR@ \
+	 	   $(GST_BASE_LIBS) $(GST_LIBS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
diff --git a/tools/Makefile.in b/tools/Makefile.in
new file mode 100644
index 0000000..4c396d8
--- /dev/null
+++ b/tools/Makefile.in
@@ -0,0 +1,887 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = gst-discoverer-@GST_MAJORMINOR@$(EXEEXT)
+subdir = tools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-python.m4 \
+	$(top_srcdir)/common/m4/as-scrub-include.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-default.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst-x11.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/gst-alsa.m4 $(top_srcdir)/m4/gst-fionread.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+	$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/lrint.m4 $(top_srcdir)/m4/lrintf.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/ogg.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vorbis.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
+	"$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_gst_discoverer_@GST_MAJORMINOR@_OBJECTS = gst-discoverer.$(OBJEXT)
+gst_discoverer_@GST_MAJORMINOR@_OBJECTS =  \
+	$(am_gst_discoverer_@GST_MAJORMINOR@_OBJECTS)
+gst_discoverer_@GST_MAJORMINOR@_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+gst_discoverer_@GST_MAJORMINOR@_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(gst_discoverer_@GST_MAJORMINOR@_SOURCES)
+DIST_SOURCES = $(gst_discoverer_@GST_MAJORMINOR@_SOURCES)
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUDIORESAMPLE_FORMAT_AUTO = @AUDIORESAMPLE_FORMAT_AUTO@
+AUDIORESAMPLE_FORMAT_FLOAT = @AUDIORESAMPLE_FORMAT_FLOAT@
+AUDIORESAMPLE_FORMAT_INT = @AUDIORESAMPLE_FORMAT_INT@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDPARANOIA_CFLAGS = @CDPARANOIA_CFLAGS@
+CDPARANOIA_LIBS = @CDPARANOIA_LIBS@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_GDP_CFLAGS = @GST_GDP_CFLAGS@
+GST_GDP_LIBS = @GST_GDP_LIBS@
+GST_INSTALL_PLUGINS_HELPER = @GST_INSTALL_PLUGINS_HELPER@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_MAJORMINOR = @GST_MAJORMINOR@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
+GTK_X11_LIBS = @GTK_X11_LIBS@
+HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
+HAVE_X = @HAVE_X@
+HAVE_XSHM = @HAVE_XSHM@
+HAVE_ZLIB = @HAVE_ZLIB@
+HSTRERROR_LIBS = @HSTRERROR_LIBS@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+IVORBIS_CFLAGS = @IVORBIS_CFLAGS@
+IVORBIS_LIBS = @IVORBIS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVISUAL_CFLAGS = @LIBVISUAL_CFLAGS@
+LIBVISUAL_LIBS = @LIBVISUAL_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OGG_CFLAGS = @OGG_CFLAGS@
+OGG_LIBS = @OGG_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PANGO_CFLAGS = @PANGO_CFLAGS@
+PANGO_LIBS = @PANGO_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QT4_MOC = @QT4_MOC@
+QT_CFLAGS = @QT_CFLAGS@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+THEORA_CFLAGS = @THEORA_CFLAGS@
+THEORA_LIBS = @THEORA_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+VORBISENC_LIBS = @VORBISENC_LIBS@
+VORBISFILE_LIBS = @VORBISFILE_LIBS@
+VORBIS_CFLAGS = @VORBIS_CFLAGS@
+VORBIS_LIBS = @VORBIS_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_LIBS = @XVIDEO_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_SCRIPTS = \
+	gst-visualise-@GST_MAJORMINOR@
+
+man_MANS = \
+        gst-visualise-@GST_MAJORMINOR@.1
+
+gst_discoverer_@GST_MAJORMINOR@_SOURCES = gst-discoverer.c
+CLEANFILES = $(man_MANS) $(bin_SCRIPTS) $(bin_PROGRAMS)
+EXTRA_DIST = \
+	gst-visualise-m.m gst-visualise.1.in
+
+LDADD = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_MAJORMINOR@.la\
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la\
+	$(GST_BASE_LIBS) $(GST_LIBS)
+
+AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tools/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+gst-discoverer-@GST_MAJORMINOR@$(EXEEXT): $(gst_discoverer_@GST_MAJORMINOR@_OBJECTS) $(gst_discoverer_@GST_MAJORMINOR@_DEPENDENCIES) 
+	@rm -f gst-discoverer-@GST_MAJORMINOR@$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(gst_discoverer_@GST_MAJORMINOR@_OBJECTS) $(gst_discoverer_@GST_MAJORMINOR@_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-discoverer.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	test -z "$$files" || { \
+	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@list='$(MANS)'; if test -n "$$list"; then \
+	  list=`for p in $$list; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+	  if test -n "$$list" && \
+	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+	    exit 1; \
+	  else :; fi; \
+	else :; fi
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-binSCRIPTS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-man1 install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-binSCRIPTS uninstall-man uninstall-man1
+
+
+# generate versioned scripts from templates
+%-@GST_MAJORMINOR@: %-m.m
+	$(AM_V_GEN)sed -e s,\@GST_MAJORMINOR\@,@GST_MAJORMINOR@,g $< > $@ && \
+	chmod +x $@
+
+# generate man pages
+%-@GST_MAJORMINOR@.1: %.1.in
+	$(AM_V_GEN)sed \
+                -e s,gst-visualise,gst-visualise-@GST_MAJORMINOR@,g \
+                $< >$@
+
+all: all-am chmod
+
+chmod: $(bin_SCRIPTS)
+	@chmod +x $^
+
+Android.mk: Makefile.am
+	androgenizer -:PROJECT gst-discoverer \
+	 -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+	 -:EXECUTABLE gst-discoverer -:TAGS eng debug \
+	 -:SOURCES $(gst_discoverer_@GST_MAJORMINOR@_SOURCES) \
+	 -:CFLAGS $(DEFS) $(AM_CFLAGS) \
+	 -:LDFLAGS -lgstpbutils-@GST_MAJORMINOR@ -lgstvideo-@GST_MAJORMINOR@ \
+	 	   $(GST_BASE_LIBS) $(GST_LIBS) \
+	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+	> $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c
new file mode 100644
index 0000000..5b2a74b
--- /dev/null
+++ b/tools/gst-discoverer.c
@@ -0,0 +1,559 @@
+/* GStreamer
+ * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <glib.h>
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils.h>
+
+static gboolean async = FALSE;
+static gboolean silent = FALSE;
+static gboolean verbose = FALSE;
+
+typedef struct
+{
+  GstDiscoverer *dc;
+  int argc;
+  char **argv;
+} PrivStruct;
+
+#define my_g_string_append_printf(str, format, ...) \
+  g_string_append_printf (str, "%*s" format, 2*depth, " ", ##__VA_ARGS__)
+
+static gchar *
+gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info,
+    gint depth)
+{
+  GstDiscovererAudioInfo *audio_info;
+  GString *s;
+  gchar *tmp;
+  const gchar *ctmp;
+  int len = 400;
+  const GstTagList *tags;
+  GstCaps *caps;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  s = g_string_sized_new (len);
+
+  my_g_string_append_printf (s, "Codec:\n");
+  caps = gst_discoverer_stream_info_get_caps (info);
+  tmp = gst_caps_to_string (caps);
+  gst_caps_unref (caps);
+  my_g_string_append_printf (s, "  %s\n", tmp);
+  g_free (tmp);
+
+  my_g_string_append_printf (s, "Additional info:\n");
+  if (gst_discoverer_stream_info_get_misc (info)) {
+    tmp = gst_structure_to_string (gst_discoverer_stream_info_get_misc (info));
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+
+  audio_info = (GstDiscovererAudioInfo *) info;
+  ctmp = gst_discoverer_audio_info_get_language (audio_info);
+  my_g_string_append_printf (s, "Language: %s\n", ctmp ? ctmp : "<unknown>");
+  my_g_string_append_printf (s, "Channels: %u\n",
+      gst_discoverer_audio_info_get_channels (audio_info));
+  my_g_string_append_printf (s, "Sample rate: %u\n",
+      gst_discoverer_audio_info_get_sample_rate (audio_info));
+  my_g_string_append_printf (s, "Depth: %u\n",
+      gst_discoverer_audio_info_get_depth (audio_info));
+
+  my_g_string_append_printf (s, "Bitrate: %u\n",
+      gst_discoverer_audio_info_get_bitrate (audio_info));
+  my_g_string_append_printf (s, "Max bitrate: %u\n",
+      gst_discoverer_audio_info_get_max_bitrate (audio_info));
+
+  my_g_string_append_printf (s, "Tags:\n");
+  tags = gst_discoverer_stream_info_get_tags (info);
+  if (tags) {
+    tmp = gst_structure_to_string ((GstStructure *) tags);
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+  if (verbose)
+    my_g_string_append_printf (s, "\n");
+
+  return g_string_free (s, FALSE);
+}
+
+static gchar *
+gst_stream_video_information_to_string (GstDiscovererStreamInfo * info,
+    gint depth)
+{
+  GstDiscovererVideoInfo *video_info;
+  GString *s;
+  gchar *tmp;
+  int len = 500;
+  const GstStructure *misc;
+  const GstTagList *tags;
+  GstCaps *caps;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  s = g_string_sized_new (len);
+
+  my_g_string_append_printf (s, "Codec:\n");
+  caps = gst_discoverer_stream_info_get_caps (info);
+  tmp = gst_caps_to_string (caps);
+  gst_caps_unref (caps);
+  my_g_string_append_printf (s, "  %s\n", tmp);
+  g_free (tmp);
+
+  my_g_string_append_printf (s, "Additional info:\n");
+  misc = gst_discoverer_stream_info_get_misc (info);
+  if (misc) {
+    tmp = gst_structure_to_string (misc);
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+
+  video_info = (GstDiscovererVideoInfo *) info;
+  my_g_string_append_printf (s, "Width: %u\n",
+      gst_discoverer_video_info_get_width (video_info));
+  my_g_string_append_printf (s, "Height: %u\n",
+      gst_discoverer_video_info_get_height (video_info));
+  my_g_string_append_printf (s, "Depth: %u\n",
+      gst_discoverer_video_info_get_depth (video_info));
+
+  my_g_string_append_printf (s, "Frame rate: %u/%u\n",
+      gst_discoverer_video_info_get_framerate_num (video_info),
+      gst_discoverer_video_info_get_framerate_denom (video_info));
+
+  my_g_string_append_printf (s, "Pixel aspect ratio: %u/%u\n",
+      gst_discoverer_video_info_get_par_num (video_info),
+      gst_discoverer_video_info_get_par_denom (video_info));
+
+  my_g_string_append_printf (s, "Interlaced: %s\n",
+      gst_discoverer_video_info_is_interlaced (video_info) ? "true" : "false");
+
+  my_g_string_append_printf (s, "Bitrate: %u\n",
+      gst_discoverer_video_info_get_bitrate (video_info));
+  my_g_string_append_printf (s, "Max bitrate: %u\n",
+      gst_discoverer_video_info_get_max_bitrate (video_info));
+
+  my_g_string_append_printf (s, "Tags:\n");
+  tags = gst_discoverer_stream_info_get_tags (info);
+  if (tags) {
+    tmp = gst_structure_to_string ((GstStructure *) tags);
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+  if (verbose)
+    my_g_string_append_printf (s, "\n");
+
+  return g_string_free (s, FALSE);
+}
+
+static gchar *
+gst_stream_subtitle_information_to_string (GstDiscovererStreamInfo * info,
+    gint depth)
+{
+  GstDiscovererSubtitleInfo *subtitle_info;
+  GString *s;
+  gchar *tmp;
+  const gchar *ctmp;
+  int len = 400;
+  const GstTagList *tags;
+  GstCaps *caps;
+
+  g_return_val_if_fail (info != NULL, NULL);
+
+  s = g_string_sized_new (len);
+
+  my_g_string_append_printf (s, "Codec:\n");
+  caps = gst_discoverer_stream_info_get_caps (info);
+  tmp = gst_caps_to_string (caps);
+  gst_caps_unref (caps);
+  my_g_string_append_printf (s, "  %s\n", tmp);
+  g_free (tmp);
+
+  my_g_string_append_printf (s, "Additional info:\n");
+  if (gst_discoverer_stream_info_get_misc (info)) {
+    tmp = gst_structure_to_string (gst_discoverer_stream_info_get_misc (info));
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+
+  subtitle_info = (GstDiscovererSubtitleInfo *) info;
+  ctmp = gst_discoverer_subtitle_info_get_language (subtitle_info);
+  my_g_string_append_printf (s, "Language: %s\n", ctmp ? ctmp : "<unknown>");
+
+  my_g_string_append_printf (s, "Tags:\n");
+  tags = gst_discoverer_stream_info_get_tags (info);
+  if (tags) {
+    tmp = gst_structure_to_string ((GstStructure *) tags);
+    my_g_string_append_printf (s, "  %s\n", tmp);
+    g_free (tmp);
+  } else {
+    my_g_string_append_printf (s, "  None\n");
+  }
+  if (verbose)
+    my_g_string_append_printf (s, "\n");
+
+  return g_string_free (s, FALSE);
+}
+
+static void
+print_stream_info (GstDiscovererStreamInfo * info, void *depth)
+{
+  gchar *desc = NULL;
+  GstCaps *caps;
+
+  caps = gst_discoverer_stream_info_get_caps (info);
+
+  if (caps) {
+    if (gst_caps_is_fixed (caps) && !verbose)
+      desc = gst_pb_utils_get_codec_description (caps);
+    else
+      desc = gst_caps_to_string (caps);
+    gst_caps_unref (caps);
+  }
+
+  g_print ("%*s%s: %s\n", 2 * GPOINTER_TO_INT (depth), " ",
+      gst_discoverer_stream_info_get_stream_type_nick (info), desc);
+
+  if (desc) {
+    g_free (desc);
+    desc = NULL;
+  }
+
+  if (verbose) {
+    if (GST_IS_DISCOVERER_AUDIO_INFO (info))
+      desc =
+          gst_stream_audio_information_to_string (info,
+          GPOINTER_TO_INT (depth) + 1);
+    else if (GST_IS_DISCOVERER_VIDEO_INFO (info))
+      desc =
+          gst_stream_video_information_to_string (info,
+          GPOINTER_TO_INT (depth) + 1);
+    else if (GST_IS_DISCOVERER_SUBTITLE_INFO (info))
+      desc =
+          gst_stream_subtitle_information_to_string (info,
+          GPOINTER_TO_INT (depth) + 1);
+    if (desc) {
+      g_print ("%s", desc);
+      g_free (desc);
+    }
+  }
+}
+
+static void
+print_topology (GstDiscovererStreamInfo * info, gint depth)
+{
+  GstDiscovererStreamInfo *next;
+
+  if (!info)
+    return;
+
+  print_stream_info (info, GINT_TO_POINTER (depth));
+
+  next = gst_discoverer_stream_info_get_next (info);
+  if (next) {
+    print_topology (next, depth + 1);
+    gst_discoverer_stream_info_unref (next);
+  } else if (GST_IS_DISCOVERER_CONTAINER_INFO (info)) {
+    GList *tmp, *streams;
+
+    streams =
+        gst_discoverer_container_info_get_streams (GST_DISCOVERER_CONTAINER_INFO
+        (info));
+    for (tmp = streams; tmp; tmp = tmp->next) {
+      GstDiscovererStreamInfo *tmpinf = (GstDiscovererStreamInfo *) tmp->data;
+      print_topology (tmpinf, depth + 1);
+    }
+    gst_discoverer_stream_info_list_free (streams);
+  }
+}
+
+static gboolean
+print_tag_each (GQuark field_id, const GValue * value, gpointer user_data)
+{
+  gint tab = GPOINTER_TO_INT (user_data);
+  gchar *ser;
+
+  if (G_VALUE_HOLDS_STRING (value))
+    ser = g_value_dup_string (value);
+  else if (GST_VALUE_HOLDS_BUFFER (value)) {
+    GstBuffer *buf = gst_value_get_buffer (value);
+    ser =
+        g_strdup_printf ("<GstBuffer [%" G_GSIZE_FORMAT " bytes]>",
+        gst_buffer_get_size (buf));
+  } else
+    ser = gst_value_serialize (value);
+
+  g_print ("%*s%s: %s\n", tab, " ",
+      gst_tag_get_nick (g_quark_to_string (field_id)), ser);
+  g_free (ser);
+
+  return TRUE;
+}
+
+static void
+print_properties (GstDiscovererInfo * info, gint tab)
+{
+  const GstTagList *tags;
+
+  g_print ("%*sDuration: %" GST_TIME_FORMAT "\n", tab + 1, " ",
+      GST_TIME_ARGS (gst_discoverer_info_get_duration (info)));
+  g_print ("%*sSeekable: %s\n", tab + 1, " ",
+      (gst_discoverer_info_get_seekable (info) ? "yes" : "no"));
+  if ((tags = gst_discoverer_info_get_tags (info))) {
+    g_print ("%*sTags: \n", tab + 1, " ");
+    gst_structure_foreach ((const GstStructure *) tags, print_tag_each,
+        GINT_TO_POINTER (tab + 5));
+  }
+}
+
+static void
+print_info (GstDiscovererInfo * info, GError * err)
+{
+  GstDiscovererResult result = gst_discoverer_info_get_result (info);
+  GstDiscovererStreamInfo *sinfo;
+
+  g_print ("Done discovering %s\n", gst_discoverer_info_get_uri (info));
+  switch (result) {
+    case GST_DISCOVERER_OK:
+    {
+      break;
+    }
+    case GST_DISCOVERER_URI_INVALID:
+    {
+      g_print ("URI is not valid\n");
+      break;
+    }
+    case GST_DISCOVERER_ERROR:
+    {
+      g_print ("An error was encountered while discovering the file\n");
+      g_print (" %s\n", err->message);
+      break;
+    }
+    case GST_DISCOVERER_TIMEOUT:
+    {
+      g_print ("Analyzing URI timed out\n");
+      break;
+    }
+    case GST_DISCOVERER_BUSY:
+    {
+      g_print ("Discoverer was busy\n");
+      break;
+    }
+    case GST_DISCOVERER_MISSING_PLUGINS:
+    {
+      g_print ("Missing plugins\n");
+      if (verbose) {
+        gchar *tmp =
+            gst_structure_to_string (gst_discoverer_info_get_misc (info));
+        g_print (" (%s)\n", tmp);
+        g_free (tmp);
+      }
+      break;
+    }
+  }
+
+  if ((sinfo = gst_discoverer_info_get_stream_info (info))) {
+    g_print ("\nTopology:\n");
+    print_topology (sinfo, 1);
+    g_print ("\nProperties:\n");
+    print_properties (info, 1);
+    gst_discoverer_stream_info_unref (sinfo);
+  }
+
+  g_print ("\n");
+}
+
+static void
+process_file (GstDiscoverer * dc, const gchar * filename)
+{
+  GError *err = NULL;
+  GDir *dir;
+  gchar *uri, *path;
+  GstDiscovererInfo *info;
+  GstStructure *st = NULL;
+
+  if (!gst_uri_is_valid (filename)) {
+    /* Recurse into directories */
+    if ((dir = g_dir_open (filename, 0, NULL))) {
+      const gchar *entry;
+
+      while ((entry = g_dir_read_name (dir))) {
+        gchar *path;
+        path = g_strconcat (filename, G_DIR_SEPARATOR_S, entry, NULL);
+        process_file (dc, path);
+        g_free (path);
+      }
+
+      g_dir_close (dir);
+      return;
+    }
+
+    if (!g_path_is_absolute (filename)) {
+      gchar *cur_dir;
+
+      cur_dir = g_get_current_dir ();
+      path = g_build_filename (cur_dir, filename, NULL);
+      g_free (cur_dir);
+    } else {
+      path = g_strdup (filename);
+    }
+
+    uri = g_filename_to_uri (path, NULL, &err);
+    g_free (path);
+    path = NULL;
+
+    if (err) {
+      g_warning ("Couldn't convert filename to URI: %s\n", err->message);
+      g_error_free (err);
+      return;
+    }
+  } else {
+    uri = g_strdup (filename);
+  }
+
+  if (async == FALSE) {
+    g_print ("Analyzing %s\n", uri);
+    info = gst_discoverer_discover_uri (dc, uri, &err);
+    print_info (info, err);
+    gst_discoverer_info_unref (info);
+    if (st)
+      gst_structure_free (st);
+  } else {
+    gst_discoverer_discover_uri_async (dc, uri);
+  }
+
+  g_free (uri);
+}
+
+static void
+_new_discovered_uri (GstDiscoverer * dc, GstDiscovererInfo * info, GError * err)
+{
+  print_info (info, err);
+}
+
+static gboolean
+_run_async (PrivStruct * ps)
+{
+  gint i;
+
+  for (i = 1; i < ps->argc; i++)
+    process_file (ps->dc, ps->argv[i]);
+
+  return FALSE;
+}
+
+static void
+_discoverer_finished (GstDiscoverer * dc, GMainLoop * ml)
+{
+  g_main_loop_quit (ml);
+}
+
+int
+main (int argc, char **argv)
+{
+  GError *err = NULL;
+  GstDiscoverer *dc;
+  gint timeout = 10;
+  GOptionEntry options[] = {
+    {"async", 'a', 0, G_OPTION_ARG_NONE, &async,
+        "Run asynchronously", NULL},
+    {"silent", 's', 0, G_OPTION_ARG_NONE, &silent,
+        "Don't output the information structure", NULL},
+    {"timeout", 't', 0, G_OPTION_ARG_INT, &timeout,
+        "Specify timeout (in seconds, default 10)", "T"},
+    /* {"elem", 'e', 0, G_OPTION_ARG_NONE, &elem_seek, */
+    /*     "Seek on elements instead of pads", NULL}, */
+    {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
+        "Verbose properties", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+
+  if (!g_thread_supported ())
+    g_thread_init (NULL);
+
+  ctx =
+      g_option_context_new
+      ("- discover files synchronously with GstDiscoverer");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  g_option_context_free (ctx);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uris>\n", argv[0]);
+    exit (-1);
+  }
+
+  dc = gst_discoverer_new (timeout * GST_SECOND, &err);
+  if (G_UNLIKELY (dc == NULL)) {
+    g_print ("Error initializing: %s\n", err->message);
+    exit (1);
+  }
+
+  if (async == FALSE) {
+    gint i;
+    for (i = 1; i < argc; i++)
+      process_file (dc, argv[i]);
+  } else {
+    PrivStruct *ps = g_new0 (PrivStruct, 1);
+    GMainLoop *ml = g_main_loop_new (NULL, FALSE);
+
+    ps->dc = dc;
+    ps->argc = argc;
+    ps->argv = argv;
+
+    /* adding uris will be started when the mainloop runs */
+    g_idle_add ((GSourceFunc) _run_async, ps);
+
+    /* connect signals */
+    g_signal_connect (dc, "discovered", G_CALLBACK (_new_discovered_uri), NULL);
+    g_signal_connect (dc, "finished", G_CALLBACK (_discoverer_finished), ml);
+
+    gst_discoverer_start (dc);
+    /* run mainloop */
+    g_main_loop_run (ml);
+
+    gst_discoverer_stop (dc);
+    g_free (ps);
+    g_main_loop_unref (ml);
+  }
+  g_object_unref (dc);
+
+  return 0;
+}
diff --git a/tools/gst-visualise-m.m b/tools/gst-visualise-m.m
new file mode 100644
index 0000000..798929b
--- /dev/null
+++ b/tools/gst-visualise-m.m
@@ -0,0 +1,77 @@
+#!/usr/bin/perl -w
+
+# launch a gst-launch pipeline to display a visualisation of the 
+# input audio.
+# make use of default input srcs.
+# visualisation plugin is specified on command line.
+
+### packages
+
+
+my (%pipes, %cfg);
+
+sub read_config
+{
+  my $config_file = `echo -n ~`."/.gst";
+  if (-e $config_file)
+  {
+    open CONFIG, $config_file;
+    while (<CONFIG>)
+    {
+      chomp;
+      s/#.*//;
+      s/\s+$//;
+      next unless length;
+      my ($var, $value) = split (/\s*=\s*/, $_, 2);
+      $cfg{$var} = $value;
+    }
+    if (!($cfg{AUDIOSRC}))
+    {
+      print "Please add an AUDIOSRC to $config_file !\n";
+    }
+    if (!($cfg{VIDEOSINK}))
+    {
+      print "Please add a VIDEOSINK to $config_file !\n";
+    }
+  }
+  else
+  {
+    print "No configuration file $config_file found.  You might want to create one.\n";
+  }
+  if (!defined $cfg{AUDIOSRC})   { $cfg{AUDIOSRC} = "osssrc"; }
+  if (!defined $cfg{VIDEOSINK})  { $cfg{VIDEOSINK} = "xvimagesink"; }
+  if (!defined $cfg{CVS_PATH})   { $cfg{CVS_PATH} =  `echo -n ~`."/gst/cvs"; }
+}
+
+sub visualise(@)
+{
+    my $vis = $cfg{VISUALIZER};
+    $vis = shift() if ($#_ != -1);
+    $vis = "goom" unless $vis;
+
+    my $pipe;
+    $pipe = $vis unless $pipe = $pipes{$vis};
+
+    $command = "gst-launch-@GST_MAJORMINOR@ $cfg{AUDIOSRC} ! $pipe ! { queue ! videoconvert ! $cfg{VIDEOSINK} }";
+    print "Running $command\n";
+    system ("PATH=\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools $command");
+}
+
+### main
+
+read_config ();
+
+%pipes = ( 
+  "goom", "goom",
+  "chart", "audioconvert ! chart",
+  "synaesthesia", "synaesthesia",
+  "monoscope", "audioconvert ! monoscope"
+);
+
+if ($#ARGV > 0) {
+    print STDERR "Usage: gst-visualise [visualiser]\n";
+    exit 1;
+}
+
+visualise(@ARGV);
+
diff --git a/tools/gst-visualise.1.in b/tools/gst-visualise.1.in
new file mode 100644
index 0000000..5b5a1fc
--- /dev/null
+++ b/tools/gst-visualise.1.in
@@ -0,0 +1,32 @@
+.TH "GStreamer" "1" "February 2002" "" ""
+.SH "NAME"
+gst\-visualise \- Run a GStreamer pipeline to display an audio visualisation
+.SH "SYNOPSIS"
+\fBgst\-visualise\fR \fI[visualiser]\fR
+.SH "DESCRIPTION"
+.LP 
+\fIgst\-visualise\fP is a tool that is used to run a basic \fIGStreamer\fP pipeline, to display a graphical visualisation of an audio stream.
+
+By default, the audio stream is read from ESD (the Enlightened Sound Daemon),
+but this can be changed by setting the AUDIOSRC parameter in ~/.gst.  For
+example, you might set "AUDIOSRC=osssrc" to display a visualisation of the
+sound input to your soundcard.
+
+You can select a visualiser by providing a parameter naming the visualiser.
+For example:
+
+ gst\-visualise synaesthesia
+
+will use the synaesthesia plugin.  If no visualiser is named, the VISUALIZER
+property in ~/.gst will be used.  If this is not specified either, the goom
+visualiser will be used.
+
+The videosink to use to display the visualisation will be read from the
+VIDEOSINK parameter in ~/.gst, defaulting to sdlvideosink.
+
+.SH "SEE ALSO"
+.BR gst\-launch\-ext (1),
+.BR gst\-inspect (1),
+.BR gst\-launch (1),
+.SH "AUTHOR"
+The GStreamer team at http://gstreamer.net/
diff --git a/win32/MANIFEST b/win32/MANIFEST
new file mode 100644
index 0000000..6785c88
--- /dev/null
+++ b/win32/MANIFEST
@@ -0,0 +1,82 @@
+win32/MANIFEST
+win32/common/_stdint.h
+win32/common/config.h
+win32/common/gstrtsp-enumtypes.c
+win32/common/gstrtsp-enumtypes.h
+win32/common/interfaces-enumtypes.c
+win32/common/interfaces-enumtypes.h
+win32/common/libgstapp.def
+win32/common/libgstaudio.def
+win32/common/libgstcdda.def
+win32/common/libgstinterfaces.def
+win32/common/libgstnetbuffer.def
+win32/common/libgstpbutils.def
+win32/common/libgstriff.def
+win32/common/libgstrtp.def
+win32/common/libgstrtsp.def
+win32/common/libgstsdp.def
+win32/common/libgsttag.def
+win32/common/libgstvideo.def
+win32/common/audio-enumtypes.c
+win32/common/audio-enumtypes.h
+win32/common/pbutils-enumtypes.c
+win32/common/pbutils-enumtypes.h
+win32/common/video-enumtypes.c
+win32/common/video-enumtypes.h
+win32/vs6/gst_plugins_base.dsw
+win32/vs6/grammar.dsp
+win32/vs6/libgstadder.dsp
+win32/vs6/libgstaudio.dsp
+win32/vs6/libgstaudioconvert.dsp
+win32/vs6/libgstaudiorate.dsp
+win32/vs6/libgstaudioresample.dsp
+win32/vs6/libgstaudioscale.dsp
+win32/vs6/libgstaudiotestsrc.dsp
+win32/vs6/libgstcdda.dsp
+win32/vs6/libgstdecodebin2.dsp
+win32/vs6/libgstdecodebin.dsp
+win32/vs6/libgstfft.dsp
+win32/vs6/libgstgdp.dsp
+win32/vs6/libgstinterfaces.dsp
+win32/vs6/libgstnetbuffer.dsp
+win32/vs6/libgstogg.dsp
+win32/vs6/libgstpbutils.dsp
+win32/vs6/libgstplaybin.dsp
+win32/vs6/libgstriff.dsp
+win32/vs6/libgstrtp.dsp
+win32/vs6/libgstrtsp.dsp
+win32/vs6/libgstsdp.dsp
+win32/vs6/libgstsinesrc.dsp
+win32/vs6/libgstsubparse.dsp
+win32/vs6/libgsttag.dsp
+win32/vs6/libgsttheora.dsp
+win32/vs6/libgsttypefindfunctions.dsp
+win32/vs6/libgstvideo.dsp
+win32/vs6/libgstvideorate.dsp
+win32/vs6/libgstvideoscale.dsp
+win32/vs6/libgstvideotestsrc.dsp
+win32/vs6/libgstvolume.dsp
+win32/vs6/libgstvorbis.dsp
+win32/vs8/gst-plugins-base.sln
+win32/vs8/libgstadder.vcproj
+win32/vs8/libgstaudio.vcproj
+win32/vs8/libgstaudioconvert.vcproj
+win32/vs8/libgstaudiorate.vcproj
+win32/vs8/libgstaudioresample.vcproj
+win32/vs8/libgstaudiotestsrc.vcproj
+win32/vs8/libgstdecodebin.vcproj
+win32/vs8/libgstinterfaces.vcproj
+win32/vs8/libgstogg.vcproj
+win32/vs8/libgstplaybin.vcproj
+win32/vs8/libgstriff.vcproj
+win32/vs8/libgstsubparse.vcproj
+win32/vs8/libgsttag.vcproj
+win32/vs8/libgsttcp.vcproj
+win32/vs8/libgsttheora.vcproj
+win32/vs8/libgsttypefind.vcproj
+win32/vs8/libgstvideo.vcproj
+win32/vs8/libgstvideorate.vcproj
+win32/vs8/libgstvideoscale.vcproj
+win32/vs8/libgstvideotestsrc.vcproj
+win32/vs8/libgstvolume.vcproj
+win32/vs8/libgstvorbis.vcproj
diff --git a/win32/common/_stdint.h b/win32/common/_stdint.h
new file mode 100644
index 0000000..54baf84
--- /dev/null
+++ b/win32/common/_stdint.h
@@ -0,0 +1,9 @@
+#ifndef _GST_PLUGINS_BASE__STDINT_H
+#define _GST_PLUGINS_BASE__STDINT_H 1
+#ifndef _GENERATED_STDINT_H
+#define _GENERATED_STDINT_H "gst-plugins-base 0.11.1"
+/* generated using gnu compiler gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 */
+#define _STDINT_HAVE_STDINT_H 1
+#include <stdint.h>
+#endif
+#endif
diff --git a/win32/common/audio-enumtypes.c b/win32/common/audio-enumtypes.c
new file mode 100644
index 0000000..84b8a80
--- /dev/null
+++ b/win32/common/audio-enumtypes.c
@@ -0,0 +1,134 @@
+
+
+
+#include "audio-enumtypes.h"
+
+#include "multichannel.h"
+#include "gstringbuffer.h"
+
+/* enumerations from "multichannel.h" */
+GType
+gst_audio_channel_position_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_AUDIO_CHANNEL_POSITION_INVALID, "GST_AUDIO_CHANNEL_POSITION_INVALID",
+          "invalid"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_MONO,
+          "GST_AUDIO_CHANNEL_POSITION_FRONT_MONO", "front-mono"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+          "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT", "front-left"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+          "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT", "front-right"},
+      {GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+          "GST_AUDIO_CHANNEL_POSITION_REAR_CENTER", "rear-center"},
+      {GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+          "GST_AUDIO_CHANNEL_POSITION_REAR_LEFT", "rear-left"},
+      {GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+          "GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT", "rear-right"},
+      {GST_AUDIO_CHANNEL_POSITION_LFE, "GST_AUDIO_CHANNEL_POSITION_LFE", "lfe"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+          "GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER", "front-center"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+            "GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER",
+          "front-left-of-center"},
+      {GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER,
+            "GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER",
+          "front-right-of-center"},
+      {GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+          "GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT", "side-left"},
+      {GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+          "GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT", "side-right"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_CENTER,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_CENTER", "top-center"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT", "top-front-left"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT", "top-front-right"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER", "top-front-center"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT", "top-rear-left"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT", "top-rear-right"},
+      {GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER,
+          "GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER", "top-rear-center"},
+      {GST_AUDIO_CHANNEL_POSITION_NONE, "GST_AUDIO_CHANNEL_POSITION_NONE",
+          "none"},
+      {GST_AUDIO_CHANNEL_POSITION_NUM, "GST_AUDIO_CHANNEL_POSITION_NUM", "num"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstAudioChannelPosition", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "gstringbuffer.h" */
+GType
+gst_ring_buffer_state_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RING_BUFFER_STATE_STOPPED, "GST_RING_BUFFER_STATE_STOPPED",
+          "stopped"},
+      {GST_RING_BUFFER_STATE_PAUSED, "GST_RING_BUFFER_STATE_PAUSED", "paused"},
+      {GST_RING_BUFFER_STATE_STARTED, "GST_RING_BUFFER_STATE_STARTED",
+          "started"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRingBufferState", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_ring_buffer_seg_state_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_SEGSTATE_INVALID, "GST_SEGSTATE_INVALID", "invalid"},
+      {GST_SEGSTATE_EMPTY, "GST_SEGSTATE_EMPTY", "empty"},
+      {GST_SEGSTATE_FILLED, "GST_SEGSTATE_FILLED", "filled"},
+      {GST_SEGSTATE_PARTIAL, "GST_SEGSTATE_PARTIAL", "partial"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRingBufferSegState", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_buffer_format_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_BUFTYPE_RAW, "GST_BUFTYPE_RAW", "raw"},
+      {GST_BUFTYPE_MU_LAW, "GST_BUFTYPE_MU_LAW", "mu-law"},
+      {GST_BUFTYPE_A_LAW, "GST_BUFTYPE_A_LAW", "a-law"},
+      {GST_BUFTYPE_IMA_ADPCM, "GST_BUFTYPE_IMA_ADPCM", "ima-adpcm"},
+      {GST_BUFTYPE_MPEG, "GST_BUFTYPE_MPEG", "mpeg"},
+      {GST_BUFTYPE_GSM, "GST_BUFTYPE_GSM", "gsm"},
+      {GST_BUFTYPE_IEC958, "GST_BUFTYPE_IEC958", "iec958"},
+      {GST_BUFTYPE_AC3, "GST_BUFTYPE_AC3", "ac3"},
+      {GST_BUFTYPE_EAC3, "GST_BUFTYPE_EAC3", "eac3"},
+      {GST_BUFTYPE_DTS, "GST_BUFTYPE_DTS", "dts"},
+      {GST_BUFTYPE_MPEG2_AAC, "GST_BUFTYPE_MPEG2_AAC", "mpeg2-aac"},
+      {GST_BUFTYPE_MPEG4_AAC, "GST_BUFTYPE_MPEG4_AAC", "mpeg4-aac"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstBufferFormatType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/audio-enumtypes.h b/win32/common/audio-enumtypes.h
new file mode 100644
index 0000000..3ace3cb
--- /dev/null
+++ b/win32/common/audio-enumtypes.h
@@ -0,0 +1,27 @@
+
+
+
+#ifndef __GST_AUDIO_ENUM_TYPES_H__
+#define __GST_AUDIO_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "multichannel.h" */
+GType gst_audio_channel_position_get_type (void);
+#define GST_TYPE_AUDIO_CHANNEL_POSITION (gst_audio_channel_position_get_type())
+
+/* enumerations from "gstringbuffer.h" */
+GType gst_ring_buffer_state_get_type (void);
+#define GST_TYPE_RING_BUFFER_STATE (gst_ring_buffer_state_get_type())
+GType gst_ring_buffer_seg_state_get_type (void);
+#define GST_TYPE_RING_BUFFER_SEG_STATE (gst_ring_buffer_seg_state_get_type())
+GType gst_buffer_format_type_get_type (void);
+#define GST_TYPE_BUFFER_FORMAT_TYPE (gst_buffer_format_type_get_type())
+G_END_DECLS
+
+#endif /* __GST_AUDIO_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/config.h b/win32/common/config.h
new file mode 100644
index 0000000..170fce4
--- /dev/null
+++ b/win32/common/config.h
@@ -0,0 +1,392 @@
+/* Autogenerated config.h created for win32 Visual Studio builds */
+
+/* PREFIX -- specifically added for Windows for easier moving */
+#define PREFIX "C:\\gstreamer"
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* The implementation that should be used for integer audio resampling witll
+   be benchmarked at runtime */
+#undef AUDIORESAMPLE_FORMAT_AUTO
+
+/* The float implementation should be used for integer audio resampling */
+#undef AUDIORESAMPLE_FORMAT_FLOAT
+
+/* The int implementation should be used for integer audio resampling */
+#undef AUDIORESAMPLE_FORMAT_INT
+
+/* defined if cdda headers are in a cdda/ directory */
+#undef CDPARANOIA_HEADERS_IN_DIR
+
+/* Default audio sink */
+#define DEFAULT_AUDIOSINK "directsoundsink"
+
+/* Default audio source */
+#undef DEFAULT_AUDIOSRC
+
+/* Default video sink */
+#define DEFAULT_VIDEOSINK "directdrawsink"
+
+/* Default video source */
+#undef DEFAULT_VIDEOSRC
+
+/* Default visualizer */
+#define DEFAULT_VISUALIZER "goom"
+
+/* Disable Orc */
+#undef DISABLE_ORC
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* gettext package name */
+#define GETTEXT_PACKAGE "gst-plugins-base-0.11"
+
+/* The GIO library directory. */
+#undef GIO_LIBDIR
+
+/* The GIO modules directory. */
+#undef GIO_MODULE_DIR
+
+/* system wide data directory */
+#define GST_DATADIR PREFIX "\\share"
+
+/* set to disable libxml2-dependent code in subparse */
+#undef GST_DISABLE_XML
+
+/* macro to use to show function name */
+#undef GST_FUNCTION
+
+/* Defined if gcov is enabled to force a rebuild due to config.h changing */
+#undef GST_GCOV_ENABLED
+
+/* plugin install helper script */
+#define GST_INSTALL_PLUGINS_HELPER PREFIX "\\libexec\\gst-install-plugins-helper.exe"
+
+/* Default errorlevel to use */
+#define GST_LEVEL_DEFAULT GST_LEVEL_ERROR
+
+/* GStreamer license */
+#define GST_LICENSE "LGPL"
+
+/* major/minor version */
+#define GST_MAJORMINOR "0.11"
+
+/* package name in plugins */
+#define GST_PACKAGE_NAME "GStreamer Base Plug-ins source release"
+
+/* package origin */
+#define GST_PACKAGE_ORIGIN "Unknown package origin"
+
+/* GStreamer package release date/time for plugins as YYYY-MM-DD */
+#define GST_PACKAGE_RELEASE_DATETIME "2011-09-29"
+
+/* Define to enable ALSA (used by alsa). */
+#undef HAVE_ALSA
+
+/* Define to enable CDParanoia (used by cdparanoia). */
+#undef HAVE_CDPARANOIA
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the host CPU is an Alpha */
+#undef HAVE_CPU_ALPHA
+
+/* Define if the host CPU is an ARM */
+#undef HAVE_CPU_ARM
+
+/* Define if the host CPU is a CRIS */
+#undef HAVE_CPU_CRIS
+
+/* Define if the host CPU is a CRISv32 */
+#undef HAVE_CPU_CRISV32
+
+/* Define if the host CPU is a HPPA */
+#undef HAVE_CPU_HPPA
+
+/* Define if the host CPU is an x86 */
+#define HAVE_CPU_I386 1
+
+/* Define if the host CPU is a IA64 */
+#undef HAVE_CPU_IA64
+
+/* Define if the host CPU is a M68K */
+#undef HAVE_CPU_M68K
+
+/* Define if the host CPU is a MIPS */
+#undef HAVE_CPU_MIPS
+
+/* Define if the host CPU is a PowerPC */
+#undef HAVE_CPU_PPC
+
+/* Define if the host CPU is a 64 bit PowerPC */
+#undef HAVE_CPU_PPC64
+
+/* Define if the host CPU is a S390 */
+#undef HAVE_CPU_S390
+
+/* Define if the host CPU is a SPARC */
+#undef HAVE_CPU_SPARC
+
+/* Define if the host CPU is a x86_64 */
+#undef HAVE_CPU_X86_64
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to enable building of experimental plug-ins. */
+#undef HAVE_EXPERIMENTAL
+
+/* Define to enable building of plug-ins with external deps. */
+#undef HAVE_EXTERNAL
+
+/* FIONREAD ioctl found in sys/filio.h */
+#undef HAVE_FIONREAD_IN_SYS_FILIO
+
+/* FIONREAD ioctl found in sys/ioclt.h */
+#undef HAVE_FIONREAD_IN_SYS_IOCTL
+
+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+#undef HAVE_FSEEKO
+
+/* defined if the compiler implements __func__ */
+#undef HAVE_FUNC
+
+/* defined if the compiler implements __FUNCTION__ */
+#undef HAVE_FUNCTION
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to enable GIO library (used by gio). */
+#undef HAVE_GIO
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#undef HAVE_GMTIME_R
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* make use of iso-codes for ISO-639 */
+#undef HAVE_ISO_CODES
+
+/* Define to enable integer vorbis plug-in (used by ivorbisdec). */
+#undef HAVE_IVORBIS
+
+/* Define to 1 if you have the `asound' library (-lasound). */
+#undef HAVE_LIBASOUND
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to enable libvisual visualization library (used by libvisual). */
+#undef HAVE_LIBVISUAL
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `log2' function. */
+#undef HAVE_LOG2
+
+/* Define if you have C99's lrint function. */
+#undef HAVE_LRINT
+
+/* Define if you have C99's lrintf function. */
+#undef HAVE_LRINTF
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to enable Xiph Ogg library (used by ogg). */
+#undef HAVE_OGG
+
+/* Use Orc */
+#undef HAVE_ORC
+
+/* Define to enable Pango font rendering (used by pango). */
+#undef HAVE_PANGO
+
+/* defined if the compiler implements __PRETTY_FUNCTION__ */
+#undef HAVE_PRETTY_FUNCTION
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define if RDTSC is available */
+#undef HAVE_RDTSC
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to enable Xiph Theora video codec (used by theora). */
+#undef HAVE_THEORA
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if valgrind should be used */
+#undef HAVE_VALGRIND
+
+/* Define to enable Xiph Vorbis audio codec (used by vorbis). */
+#undef HAVE_VORBIS
+
+/* defined if vorbis_synthesis_restart is present */
+#undef HAVE_VORBIS_SYNTHESIS_RESTART
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#define HAVE_WINSOCK2_H 1
+
+/* Define to enable X libraries and plugins (used by ximagesink). */
+#undef HAVE_X
+
+/* Define to enable X Shared Memory extension. */
+#undef HAVE_XSHM
+
+/* Define to enable X11 XVideo extensions (used by xvimagesink). */
+#undef HAVE_XVIDEO
+
+/* Define to enable zlib support for ID3 parsing in libgsttag. */
+#undef HAVE_ZLIB
+
+/* the host CPU */
+#define HOST_CPU "i686"
+
+/* prefix */
+#undef ISO_CODES_PREFIX
+
+/* */
+#undef ISO_CODES_VERSION
+
+/* directory in which the detected libvisual's plugins are located */
+#undef LIBVISUAL_PLUGINSBASEDIR
+
+/* gettext locale dir */
+#define LOCALEDIR PREFIX "\\share\\locale"
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define if you have no native hstrerror() function. */
+#undef NO_HSTRERROR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#define PACKAGE "gst-plugins-base"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "GStreamer Base Plug-ins"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "GStreamer Base Plug-ins 0.11.1"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "gst-plugins-base"
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.11.1"
+
+/* directory where plugins are located */
+#ifdef _DEBUG
+#  define PLUGINDIR PREFIX "\\debug\\lib\\gstreamer-0.11"
+#else
+#  define PLUGINDIR PREFIX "\\lib\\gstreamer-0.11"
+#endif
+
+/* The size of `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `void*', as computed by sizeof. */
+#undef SIZEOF_VOIDP
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* "Define if building for android" */
+#undef USE_TREMOLO
+
+/* Version number of package */
+#define VERSION "0.11.1"
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+#undef _LARGEFILE_SOURCE
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
diff --git a/win32/common/gstrtsp-enumtypes.c b/win32/common/gstrtsp-enumtypes.c
new file mode 100644
index 0000000..ea8ea4a
--- /dev/null
+++ b/win32/common/gstrtsp-enumtypes.c
@@ -0,0 +1,391 @@
+
+
+
+#include "gstrtsp-enumtypes.h"
+
+#include "gstrtspdefs.h"
+
+/* enumerations from "gstrtspdefs.h" */
+GType
+gst_rtsp_result_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_OK, "GST_RTSP_OK", "ok"},
+      {GST_RTSP_ERROR, "GST_RTSP_ERROR", "error"},
+      {GST_RTSP_EINVAL, "GST_RTSP_EINVAL", "einval"},
+      {GST_RTSP_EINTR, "GST_RTSP_EINTR", "eintr"},
+      {GST_RTSP_ENOMEM, "GST_RTSP_ENOMEM", "enomem"},
+      {GST_RTSP_ERESOLV, "GST_RTSP_ERESOLV", "eresolv"},
+      {GST_RTSP_ENOTIMPL, "GST_RTSP_ENOTIMPL", "enotimpl"},
+      {GST_RTSP_ESYS, "GST_RTSP_ESYS", "esys"},
+      {GST_RTSP_EPARSE, "GST_RTSP_EPARSE", "eparse"},
+      {GST_RTSP_EWSASTART, "GST_RTSP_EWSASTART", "ewsastart"},
+      {GST_RTSP_EWSAVERSION, "GST_RTSP_EWSAVERSION", "ewsaversion"},
+      {GST_RTSP_EEOF, "GST_RTSP_EEOF", "eeof"},
+      {GST_RTSP_ENET, "GST_RTSP_ENET", "enet"},
+      {GST_RTSP_ENOTIP, "GST_RTSP_ENOTIP", "enotip"},
+      {GST_RTSP_ETIMEOUT, "GST_RTSP_ETIMEOUT", "etimeout"},
+      {GST_RTSP_ETGET, "GST_RTSP_ETGET", "etget"},
+      {GST_RTSP_ETPOST, "GST_RTSP_ETPOST", "etpost"},
+      {GST_RTSP_ELAST, "GST_RTSP_ELAST", "elast"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPResult", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_event_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_RTSP_EV_READ, "GST_RTSP_EV_READ", "read"},
+      {GST_RTSP_EV_WRITE, "GST_RTSP_EV_WRITE", "write"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_flags_register_static ("GstRTSPEvent", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_family_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_FAM_NONE, "GST_RTSP_FAM_NONE", "none"},
+      {GST_RTSP_FAM_INET, "GST_RTSP_FAM_INET", "inet"},
+      {GST_RTSP_FAM_INET6, "GST_RTSP_FAM_INET6", "inet6"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPFamily", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_state_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_STATE_INVALID, "GST_RTSP_STATE_INVALID", "invalid"},
+      {GST_RTSP_STATE_INIT, "GST_RTSP_STATE_INIT", "init"},
+      {GST_RTSP_STATE_READY, "GST_RTSP_STATE_READY", "ready"},
+      {GST_RTSP_STATE_SEEKING, "GST_RTSP_STATE_SEEKING", "seeking"},
+      {GST_RTSP_STATE_PLAYING, "GST_RTSP_STATE_PLAYING", "playing"},
+      {GST_RTSP_STATE_RECORDING, "GST_RTSP_STATE_RECORDING", "recording"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPState", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_version_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_VERSION_INVALID, "GST_RTSP_VERSION_INVALID", "invalid"},
+      {GST_RTSP_VERSION_1_0, "GST_RTSP_VERSION_1_0", "1-0"},
+      {GST_RTSP_VERSION_1_1, "GST_RTSP_VERSION_1_1", "1-1"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPVersion", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_method_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_RTSP_INVALID, "GST_RTSP_INVALID", "invalid"},
+      {GST_RTSP_DESCRIBE, "GST_RTSP_DESCRIBE", "describe"},
+      {GST_RTSP_ANNOUNCE, "GST_RTSP_ANNOUNCE", "announce"},
+      {GST_RTSP_GET_PARAMETER, "GST_RTSP_GET_PARAMETER", "get-parameter"},
+      {GST_RTSP_OPTIONS, "GST_RTSP_OPTIONS", "options"},
+      {GST_RTSP_PAUSE, "GST_RTSP_PAUSE", "pause"},
+      {GST_RTSP_PLAY, "GST_RTSP_PLAY", "play"},
+      {GST_RTSP_RECORD, "GST_RTSP_RECORD", "record"},
+      {GST_RTSP_REDIRECT, "GST_RTSP_REDIRECT", "redirect"},
+      {GST_RTSP_SETUP, "GST_RTSP_SETUP", "setup"},
+      {GST_RTSP_SET_PARAMETER, "GST_RTSP_SET_PARAMETER", "set-parameter"},
+      {GST_RTSP_TEARDOWN, "GST_RTSP_TEARDOWN", "teardown"},
+      {GST_RTSP_GET, "GST_RTSP_GET", "get"},
+      {GST_RTSP_POST, "GST_RTSP_POST", "post"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_flags_register_static ("GstRTSPMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_auth_method_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_AUTH_NONE, "GST_RTSP_AUTH_NONE", "none"},
+      {GST_RTSP_AUTH_BASIC, "GST_RTSP_AUTH_BASIC", "basic"},
+      {GST_RTSP_AUTH_DIGEST, "GST_RTSP_AUTH_DIGEST", "digest"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRTSPAuthMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_header_field_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_HDR_INVALID, "GST_RTSP_HDR_INVALID", "invalid"},
+      {GST_RTSP_HDR_ACCEPT, "GST_RTSP_HDR_ACCEPT", "accept"},
+      {GST_RTSP_HDR_ACCEPT_ENCODING, "GST_RTSP_HDR_ACCEPT_ENCODING",
+          "accept-encoding"},
+      {GST_RTSP_HDR_ACCEPT_LANGUAGE, "GST_RTSP_HDR_ACCEPT_LANGUAGE",
+          "accept-language"},
+      {GST_RTSP_HDR_ALLOW, "GST_RTSP_HDR_ALLOW", "allow"},
+      {GST_RTSP_HDR_AUTHORIZATION, "GST_RTSP_HDR_AUTHORIZATION",
+          "authorization"},
+      {GST_RTSP_HDR_BANDWIDTH, "GST_RTSP_HDR_BANDWIDTH", "bandwidth"},
+      {GST_RTSP_HDR_BLOCKSIZE, "GST_RTSP_HDR_BLOCKSIZE", "blocksize"},
+      {GST_RTSP_HDR_CACHE_CONTROL, "GST_RTSP_HDR_CACHE_CONTROL",
+          "cache-control"},
+      {GST_RTSP_HDR_CONFERENCE, "GST_RTSP_HDR_CONFERENCE", "conference"},
+      {GST_RTSP_HDR_CONNECTION, "GST_RTSP_HDR_CONNECTION", "connection"},
+      {GST_RTSP_HDR_CONTENT_BASE, "GST_RTSP_HDR_CONTENT_BASE", "content-base"},
+      {GST_RTSP_HDR_CONTENT_ENCODING, "GST_RTSP_HDR_CONTENT_ENCODING",
+          "content-encoding"},
+      {GST_RTSP_HDR_CONTENT_LANGUAGE, "GST_RTSP_HDR_CONTENT_LANGUAGE",
+          "content-language"},
+      {GST_RTSP_HDR_CONTENT_LENGTH, "GST_RTSP_HDR_CONTENT_LENGTH",
+          "content-length"},
+      {GST_RTSP_HDR_CONTENT_LOCATION, "GST_RTSP_HDR_CONTENT_LOCATION",
+          "content-location"},
+      {GST_RTSP_HDR_CONTENT_TYPE, "GST_RTSP_HDR_CONTENT_TYPE", "content-type"},
+      {GST_RTSP_HDR_CSEQ, "GST_RTSP_HDR_CSEQ", "cseq"},
+      {GST_RTSP_HDR_DATE, "GST_RTSP_HDR_DATE", "date"},
+      {GST_RTSP_HDR_EXPIRES, "GST_RTSP_HDR_EXPIRES", "expires"},
+      {GST_RTSP_HDR_FROM, "GST_RTSP_HDR_FROM", "from"},
+      {GST_RTSP_HDR_IF_MODIFIED_SINCE, "GST_RTSP_HDR_IF_MODIFIED_SINCE",
+          "if-modified-since"},
+      {GST_RTSP_HDR_LAST_MODIFIED, "GST_RTSP_HDR_LAST_MODIFIED",
+          "last-modified"},
+      {GST_RTSP_HDR_PROXY_AUTHENTICATE, "GST_RTSP_HDR_PROXY_AUTHENTICATE",
+          "proxy-authenticate"},
+      {GST_RTSP_HDR_PROXY_REQUIRE, "GST_RTSP_HDR_PROXY_REQUIRE",
+          "proxy-require"},
+      {GST_RTSP_HDR_PUBLIC, "GST_RTSP_HDR_PUBLIC", "public"},
+      {GST_RTSP_HDR_RANGE, "GST_RTSP_HDR_RANGE", "range"},
+      {GST_RTSP_HDR_REFERER, "GST_RTSP_HDR_REFERER", "referer"},
+      {GST_RTSP_HDR_REQUIRE, "GST_RTSP_HDR_REQUIRE", "require"},
+      {GST_RTSP_HDR_RETRY_AFTER, "GST_RTSP_HDR_RETRY_AFTER", "retry-after"},
+      {GST_RTSP_HDR_RTP_INFO, "GST_RTSP_HDR_RTP_INFO", "rtp-info"},
+      {GST_RTSP_HDR_SCALE, "GST_RTSP_HDR_SCALE", "scale"},
+      {GST_RTSP_HDR_SESSION, "GST_RTSP_HDR_SESSION", "session"},
+      {GST_RTSP_HDR_SERVER, "GST_RTSP_HDR_SERVER", "server"},
+      {GST_RTSP_HDR_SPEED, "GST_RTSP_HDR_SPEED", "speed"},
+      {GST_RTSP_HDR_TRANSPORT, "GST_RTSP_HDR_TRANSPORT", "transport"},
+      {GST_RTSP_HDR_UNSUPPORTED, "GST_RTSP_HDR_UNSUPPORTED", "unsupported"},
+      {GST_RTSP_HDR_USER_AGENT, "GST_RTSP_HDR_USER_AGENT", "user-agent"},
+      {GST_RTSP_HDR_VIA, "GST_RTSP_HDR_VIA", "via"},
+      {GST_RTSP_HDR_WWW_AUTHENTICATE, "GST_RTSP_HDR_WWW_AUTHENTICATE",
+          "www-authenticate"},
+      {GST_RTSP_HDR_CLIENT_CHALLENGE, "GST_RTSP_HDR_CLIENT_CHALLENGE",
+          "client-challenge"},
+      {GST_RTSP_HDR_REAL_CHALLENGE1, "GST_RTSP_HDR_REAL_CHALLENGE1",
+          "real-challenge1"},
+      {GST_RTSP_HDR_REAL_CHALLENGE2, "GST_RTSP_HDR_REAL_CHALLENGE2",
+          "real-challenge2"},
+      {GST_RTSP_HDR_REAL_CHALLENGE3, "GST_RTSP_HDR_REAL_CHALLENGE3",
+          "real-challenge3"},
+      {GST_RTSP_HDR_SUBSCRIBE, "GST_RTSP_HDR_SUBSCRIBE", "subscribe"},
+      {GST_RTSP_HDR_ALERT, "GST_RTSP_HDR_ALERT", "alert"},
+      {GST_RTSP_HDR_CLIENT_ID, "GST_RTSP_HDR_CLIENT_ID", "client-id"},
+      {GST_RTSP_HDR_COMPANY_ID, "GST_RTSP_HDR_COMPANY_ID", "company-id"},
+      {GST_RTSP_HDR_GUID, "GST_RTSP_HDR_GUID", "guid"},
+      {GST_RTSP_HDR_REGION_DATA, "GST_RTSP_HDR_REGION_DATA", "region-data"},
+      {GST_RTSP_HDR_MAX_ASM_WIDTH, "GST_RTSP_HDR_MAX_ASM_WIDTH",
+          "max-asm-width"},
+      {GST_RTSP_HDR_LANGUAGE, "GST_RTSP_HDR_LANGUAGE", "language"},
+      {GST_RTSP_HDR_PLAYER_START_TIME, "GST_RTSP_HDR_PLAYER_START_TIME",
+          "player-start-time"},
+      {GST_RTSP_HDR_LOCATION, "GST_RTSP_HDR_LOCATION", "location"},
+      {GST_RTSP_HDR_ETAG, "GST_RTSP_HDR_ETAG", "etag"},
+      {GST_RTSP_HDR_IF_MATCH, "GST_RTSP_HDR_IF_MATCH", "if-match"},
+      {GST_RTSP_HDR_ACCEPT_CHARSET, "GST_RTSP_HDR_ACCEPT_CHARSET",
+          "accept-charset"},
+      {GST_RTSP_HDR_SUPPORTED, "GST_RTSP_HDR_SUPPORTED", "supported"},
+      {GST_RTSP_HDR_VARY, "GST_RTSP_HDR_VARY", "vary"},
+      {GST_RTSP_HDR_X_ACCELERATE_STREAMING,
+          "GST_RTSP_HDR_X_ACCELERATE_STREAMING", "x-accelerate-streaming"},
+      {GST_RTSP_HDR_X_ACCEPT_AUTHENT, "GST_RTSP_HDR_X_ACCEPT_AUTHENT",
+          "x-accept-authent"},
+      {GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT,
+          "GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT", "x-accept-proxy-authent"},
+      {GST_RTSP_HDR_X_BROADCAST_ID, "GST_RTSP_HDR_X_BROADCAST_ID",
+          "x-broadcast-id"},
+      {GST_RTSP_HDR_X_BURST_STREAMING, "GST_RTSP_HDR_X_BURST_STREAMING",
+          "x-burst-streaming"},
+      {GST_RTSP_HDR_X_NOTICE, "GST_RTSP_HDR_X_NOTICE", "x-notice"},
+      {GST_RTSP_HDR_X_PLAYER_LAG_TIME, "GST_RTSP_HDR_X_PLAYER_LAG_TIME",
+          "x-player-lag-time"},
+      {GST_RTSP_HDR_X_PLAYLIST, "GST_RTSP_HDR_X_PLAYLIST", "x-playlist"},
+      {GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE,
+            "GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE",
+          "x-playlist-change-notice"},
+      {GST_RTSP_HDR_X_PLAYLIST_GEN_ID, "GST_RTSP_HDR_X_PLAYLIST_GEN_ID",
+          "x-playlist-gen-id"},
+      {GST_RTSP_HDR_X_PLAYLIST_SEEK_ID, "GST_RTSP_HDR_X_PLAYLIST_SEEK_ID",
+          "x-playlist-seek-id"},
+      {GST_RTSP_HDR_X_PROXY_CLIENT_AGENT, "GST_RTSP_HDR_X_PROXY_CLIENT_AGENT",
+          "x-proxy-client-agent"},
+      {GST_RTSP_HDR_X_PROXY_CLIENT_VERB, "GST_RTSP_HDR_X_PROXY_CLIENT_VERB",
+          "x-proxy-client-verb"},
+      {GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE,
+            "GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE",
+          "x-receding-playlistchange"},
+      {GST_RTSP_HDR_X_RTP_INFO, "GST_RTSP_HDR_X_RTP_INFO", "x-rtp-info"},
+      {GST_RTSP_HDR_X_STARTUPPROFILE, "GST_RTSP_HDR_X_STARTUPPROFILE",
+          "x-startupprofile"},
+      {GST_RTSP_HDR_TIMESTAMP, "GST_RTSP_HDR_TIMESTAMP", "timestamp"},
+      {GST_RTSP_HDR_AUTHENTICATION_INFO, "GST_RTSP_HDR_AUTHENTICATION_INFO",
+          "authentication-info"},
+      {GST_RTSP_HDR_HOST, "GST_RTSP_HDR_HOST", "host"},
+      {GST_RTSP_HDR_PRAGMA, "GST_RTSP_HDR_PRAGMA", "pragma"},
+      {GST_RTSP_HDR_X_SERVER_IP_ADDRESS, "GST_RTSP_HDR_X_SERVER_IP_ADDRESS",
+          "x-server-ip-address"},
+      {GST_RTSP_HDR_X_SESSIONCOOKIE, "GST_RTSP_HDR_X_SESSIONCOOKIE",
+          "x-sessioncookie"},
+      {GST_RTSP_HDR_RTCP_INTERVAL, "GST_RTSP_HDR_RTCP_INTERVAL",
+          "rtcp-interval"},
+      {GST_RTSP_HDR_LAST, "GST_RTSP_HDR_LAST", "last"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRTSPHeaderField", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_status_code_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_STS_INVALID, "GST_RTSP_STS_INVALID", "invalid"},
+      {GST_RTSP_STS_CONTINUE, "GST_RTSP_STS_CONTINUE", "continue"},
+      {GST_RTSP_STS_OK, "GST_RTSP_STS_OK", "ok"},
+      {GST_RTSP_STS_CREATED, "GST_RTSP_STS_CREATED", "created"},
+      {GST_RTSP_STS_LOW_ON_STORAGE, "GST_RTSP_STS_LOW_ON_STORAGE",
+          "low-on-storage"},
+      {GST_RTSP_STS_MULTIPLE_CHOICES, "GST_RTSP_STS_MULTIPLE_CHOICES",
+          "multiple-choices"},
+      {GST_RTSP_STS_MOVED_PERMANENTLY, "GST_RTSP_STS_MOVED_PERMANENTLY",
+          "moved-permanently"},
+      {GST_RTSP_STS_MOVE_TEMPORARILY, "GST_RTSP_STS_MOVE_TEMPORARILY",
+          "move-temporarily"},
+      {GST_RTSP_STS_SEE_OTHER, "GST_RTSP_STS_SEE_OTHER", "see-other"},
+      {GST_RTSP_STS_NOT_MODIFIED, "GST_RTSP_STS_NOT_MODIFIED", "not-modified"},
+      {GST_RTSP_STS_USE_PROXY, "GST_RTSP_STS_USE_PROXY", "use-proxy"},
+      {GST_RTSP_STS_BAD_REQUEST, "GST_RTSP_STS_BAD_REQUEST", "bad-request"},
+      {GST_RTSP_STS_UNAUTHORIZED, "GST_RTSP_STS_UNAUTHORIZED", "unauthorized"},
+      {GST_RTSP_STS_PAYMENT_REQUIRED, "GST_RTSP_STS_PAYMENT_REQUIRED",
+          "payment-required"},
+      {GST_RTSP_STS_FORBIDDEN, "GST_RTSP_STS_FORBIDDEN", "forbidden"},
+      {GST_RTSP_STS_NOT_FOUND, "GST_RTSP_STS_NOT_FOUND", "not-found"},
+      {GST_RTSP_STS_METHOD_NOT_ALLOWED, "GST_RTSP_STS_METHOD_NOT_ALLOWED",
+          "method-not-allowed"},
+      {GST_RTSP_STS_NOT_ACCEPTABLE, "GST_RTSP_STS_NOT_ACCEPTABLE",
+          "not-acceptable"},
+      {GST_RTSP_STS_PROXY_AUTH_REQUIRED, "GST_RTSP_STS_PROXY_AUTH_REQUIRED",
+          "proxy-auth-required"},
+      {GST_RTSP_STS_REQUEST_TIMEOUT, "GST_RTSP_STS_REQUEST_TIMEOUT",
+          "request-timeout"},
+      {GST_RTSP_STS_GONE, "GST_RTSP_STS_GONE", "gone"},
+      {GST_RTSP_STS_LENGTH_REQUIRED, "GST_RTSP_STS_LENGTH_REQUIRED",
+          "length-required"},
+      {GST_RTSP_STS_PRECONDITION_FAILED, "GST_RTSP_STS_PRECONDITION_FAILED",
+          "precondition-failed"},
+      {GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE,
+            "GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE",
+          "request-entity-too-large"},
+      {GST_RTSP_STS_REQUEST_URI_TOO_LARGE, "GST_RTSP_STS_REQUEST_URI_TOO_LARGE",
+          "request-uri-too-large"},
+      {GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE,
+          "GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE", "unsupported-media-type"},
+      {GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD,
+            "GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD",
+          "parameter-not-understood"},
+      {GST_RTSP_STS_CONFERENCE_NOT_FOUND, "GST_RTSP_STS_CONFERENCE_NOT_FOUND",
+          "conference-not-found"},
+      {GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH, "GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH",
+          "not-enough-bandwidth"},
+      {GST_RTSP_STS_SESSION_NOT_FOUND, "GST_RTSP_STS_SESSION_NOT_FOUND",
+          "session-not-found"},
+      {GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE,
+            "GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE",
+          "method-not-valid-in-this-state"},
+      {GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE,
+            "GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE",
+          "header-field-not-valid-for-resource"},
+      {GST_RTSP_STS_INVALID_RANGE, "GST_RTSP_STS_INVALID_RANGE",
+          "invalid-range"},
+      {GST_RTSP_STS_PARAMETER_IS_READONLY, "GST_RTSP_STS_PARAMETER_IS_READONLY",
+          "parameter-is-readonly"},
+      {GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED,
+            "GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED",
+          "aggregate-operation-not-allowed"},
+      {GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED,
+            "GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED",
+          "only-aggregate-operation-allowed"},
+      {GST_RTSP_STS_UNSUPPORTED_TRANSPORT, "GST_RTSP_STS_UNSUPPORTED_TRANSPORT",
+          "unsupported-transport"},
+      {GST_RTSP_STS_DESTINATION_UNREACHABLE,
+          "GST_RTSP_STS_DESTINATION_UNREACHABLE", "destination-unreachable"},
+      {GST_RTSP_STS_INTERNAL_SERVER_ERROR, "GST_RTSP_STS_INTERNAL_SERVER_ERROR",
+          "internal-server-error"},
+      {GST_RTSP_STS_NOT_IMPLEMENTED, "GST_RTSP_STS_NOT_IMPLEMENTED",
+          "not-implemented"},
+      {GST_RTSP_STS_BAD_GATEWAY, "GST_RTSP_STS_BAD_GATEWAY", "bad-gateway"},
+      {GST_RTSP_STS_SERVICE_UNAVAILABLE, "GST_RTSP_STS_SERVICE_UNAVAILABLE",
+          "service-unavailable"},
+      {GST_RTSP_STS_GATEWAY_TIMEOUT, "GST_RTSP_STS_GATEWAY_TIMEOUT",
+          "gateway-timeout"},
+      {GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED,
+            "GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED",
+          "rtsp-version-not-supported"},
+      {GST_RTSP_STS_OPTION_NOT_SUPPORTED, "GST_RTSP_STS_OPTION_NOT_SUPPORTED",
+          "option-not-supported"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRTSPStatusCode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/gstrtsp-enumtypes.h b/win32/common/gstrtsp-enumtypes.h
new file mode 100644
index 0000000..3254324
--- /dev/null
+++ b/win32/common/gstrtsp-enumtypes.h
@@ -0,0 +1,35 @@
+
+
+
+#ifndef __gst_rtsp_ENUM_TYPES_H__
+#define __gst_rtsp_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "gstrtspdefs.h" */
+GType gst_rtsp_result_get_type (void);
+#define GST_TYPE_RTSP_RESULT (gst_rtsp_result_get_type())
+GType gst_rtsp_event_get_type (void);
+#define GST_TYPE_RTSP_EVENT (gst_rtsp_event_get_type())
+GType gst_rtsp_family_get_type (void);
+#define GST_TYPE_RTSP_FAMILY (gst_rtsp_family_get_type())
+GType gst_rtsp_state_get_type (void);
+#define GST_TYPE_RTSP_STATE (gst_rtsp_state_get_type())
+GType gst_rtsp_version_get_type (void);
+#define GST_TYPE_RTSP_VERSION (gst_rtsp_version_get_type())
+GType gst_rtsp_method_get_type (void);
+#define GST_TYPE_RTSP_METHOD (gst_rtsp_method_get_type())
+GType gst_rtsp_auth_method_get_type (void);
+#define GST_TYPE_RTSP_AUTH_METHOD (gst_rtsp_auth_method_get_type())
+GType gst_rtsp_header_field_get_type (void);
+#define GST_TYPE_RTSP_HEADER_FIELD (gst_rtsp_header_field_get_type())
+GType gst_rtsp_status_code_get_type (void);
+#define GST_TYPE_RTSP_STATUS_CODE (gst_rtsp_status_code_get_type())
+G_END_DECLS
+
+#endif /* __gst_rtsp_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/interfaces-enumtypes.c b/win32/common/interfaces-enumtypes.c
new file mode 100644
index 0000000..84e968e
--- /dev/null
+++ b/win32/common/interfaces-enumtypes.c
@@ -0,0 +1,274 @@
+
+
+
+#include "interfaces-enumtypes.h"
+
+#include "colorbalance.h"
+#include "colorbalancechannel.h"
+#include "mixer.h"
+#include "mixeroptions.h"
+#include "mixertrack.h"
+#include "navigation.h"
+#include "propertyprobe.h"
+#include "streamvolume.h"
+#include "tuner.h"
+#include "tunernorm.h"
+#include "tunerchannel.h"
+#include "videoorientation.h"
+#include "videooverlay.h"
+
+/* enumerations from "colorbalance.h" */
+GType
+gst_color_balance_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_COLOR_BALANCE_HARDWARE, "GST_COLOR_BALANCE_HARDWARE", "hardware"},
+      {GST_COLOR_BALANCE_SOFTWARE, "GST_COLOR_BALANCE_SOFTWARE", "software"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstColorBalanceType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "mixer.h" */
+GType
+gst_mixer_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_MIXER_HARDWARE, "GST_MIXER_HARDWARE", "hardware"},
+      {GST_MIXER_SOFTWARE, "GST_MIXER_SOFTWARE", "software"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstMixerType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_mixer_message_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_MIXER_MESSAGE_INVALID, "GST_MIXER_MESSAGE_INVALID", "invalid"},
+      {GST_MIXER_MESSAGE_MUTE_TOGGLED, "GST_MIXER_MESSAGE_MUTE_TOGGLED",
+          "mute-toggled"},
+      {GST_MIXER_MESSAGE_RECORD_TOGGLED, "GST_MIXER_MESSAGE_RECORD_TOGGLED",
+          "record-toggled"},
+      {GST_MIXER_MESSAGE_VOLUME_CHANGED, "GST_MIXER_MESSAGE_VOLUME_CHANGED",
+          "volume-changed"},
+      {GST_MIXER_MESSAGE_OPTION_CHANGED, "GST_MIXER_MESSAGE_OPTION_CHANGED",
+          "option-changed"},
+      {GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED,
+          "GST_MIXER_MESSAGE_OPTIONS_LIST_CHANGED", "options-list-changed"},
+      {GST_MIXER_MESSAGE_MIXER_CHANGED, "GST_MIXER_MESSAGE_MIXER_CHANGED",
+          "mixer-changed"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstMixerMessageType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_mixer_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_MIXER_FLAG_NONE, "GST_MIXER_FLAG_NONE", "none"},
+      {GST_MIXER_FLAG_AUTO_NOTIFICATIONS, "GST_MIXER_FLAG_AUTO_NOTIFICATIONS",
+          "auto-notifications"},
+      {GST_MIXER_FLAG_HAS_WHITELIST, "GST_MIXER_FLAG_HAS_WHITELIST",
+          "has-whitelist"},
+      {GST_MIXER_FLAG_GROUPING, "GST_MIXER_FLAG_GROUPING", "grouping"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_flags_register_static ("GstMixerFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "mixertrack.h" */
+GType
+gst_mixer_track_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_MIXER_TRACK_INPUT, "GST_MIXER_TRACK_INPUT", "input"},
+      {GST_MIXER_TRACK_OUTPUT, "GST_MIXER_TRACK_OUTPUT", "output"},
+      {GST_MIXER_TRACK_MUTE, "GST_MIXER_TRACK_MUTE", "mute"},
+      {GST_MIXER_TRACK_RECORD, "GST_MIXER_TRACK_RECORD", "record"},
+      {GST_MIXER_TRACK_MASTER, "GST_MIXER_TRACK_MASTER", "master"},
+      {GST_MIXER_TRACK_SOFTWARE, "GST_MIXER_TRACK_SOFTWARE", "software"},
+      {GST_MIXER_TRACK_NO_RECORD, "GST_MIXER_TRACK_NO_RECORD", "no-record"},
+      {GST_MIXER_TRACK_NO_MUTE, "GST_MIXER_TRACK_NO_MUTE", "no-mute"},
+      {GST_MIXER_TRACK_WHITELIST, "GST_MIXER_TRACK_WHITELIST", "whitelist"},
+      {GST_MIXER_TRACK_READONLY, "GST_MIXER_TRACK_READONLY", "readonly"},
+      {GST_MIXER_TRACK_WRITEONLY, "GST_MIXER_TRACK_WRITEONLY", "writeonly"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstMixerTrackFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "navigation.h" */
+GType
+gst_navigation_command_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_NAVIGATION_COMMAND_INVALID, "GST_NAVIGATION_COMMAND_INVALID",
+          "invalid"},
+      {GST_NAVIGATION_COMMAND_MENU1, "GST_NAVIGATION_COMMAND_MENU1", "menu1"},
+      {GST_NAVIGATION_COMMAND_MENU2, "GST_NAVIGATION_COMMAND_MENU2", "menu2"},
+      {GST_NAVIGATION_COMMAND_MENU3, "GST_NAVIGATION_COMMAND_MENU3", "menu3"},
+      {GST_NAVIGATION_COMMAND_MENU4, "GST_NAVIGATION_COMMAND_MENU4", "menu4"},
+      {GST_NAVIGATION_COMMAND_MENU5, "GST_NAVIGATION_COMMAND_MENU5", "menu5"},
+      {GST_NAVIGATION_COMMAND_MENU6, "GST_NAVIGATION_COMMAND_MENU6", "menu6"},
+      {GST_NAVIGATION_COMMAND_MENU7, "GST_NAVIGATION_COMMAND_MENU7", "menu7"},
+      {GST_NAVIGATION_COMMAND_LEFT, "GST_NAVIGATION_COMMAND_LEFT", "left"},
+      {GST_NAVIGATION_COMMAND_RIGHT, "GST_NAVIGATION_COMMAND_RIGHT", "right"},
+      {GST_NAVIGATION_COMMAND_UP, "GST_NAVIGATION_COMMAND_UP", "up"},
+      {GST_NAVIGATION_COMMAND_DOWN, "GST_NAVIGATION_COMMAND_DOWN", "down"},
+      {GST_NAVIGATION_COMMAND_ACTIVATE, "GST_NAVIGATION_COMMAND_ACTIVATE",
+          "activate"},
+      {GST_NAVIGATION_COMMAND_PREV_ANGLE, "GST_NAVIGATION_COMMAND_PREV_ANGLE",
+          "prev-angle"},
+      {GST_NAVIGATION_COMMAND_NEXT_ANGLE, "GST_NAVIGATION_COMMAND_NEXT_ANGLE",
+          "next-angle"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstNavigationCommand", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_navigation_query_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_NAVIGATION_QUERY_INVALID, "GST_NAVIGATION_QUERY_INVALID", "invalid"},
+      {GST_NAVIGATION_QUERY_COMMANDS, "GST_NAVIGATION_QUERY_COMMANDS",
+          "commands"},
+      {GST_NAVIGATION_QUERY_ANGLES, "GST_NAVIGATION_QUERY_ANGLES", "angles"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstNavigationQueryType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_navigation_message_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_NAVIGATION_MESSAGE_INVALID, "GST_NAVIGATION_MESSAGE_INVALID",
+          "invalid"},
+      {GST_NAVIGATION_MESSAGE_MOUSE_OVER, "GST_NAVIGATION_MESSAGE_MOUSE_OVER",
+          "mouse-over"},
+      {GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
+          "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED", "commands-changed"},
+      {GST_NAVIGATION_MESSAGE_ANGLES_CHANGED,
+          "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED", "angles-changed"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstNavigationMessageType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_navigation_event_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_NAVIGATION_EVENT_INVALID, "GST_NAVIGATION_EVENT_INVALID", "invalid"},
+      {GST_NAVIGATION_EVENT_KEY_PRESS, "GST_NAVIGATION_EVENT_KEY_PRESS",
+          "key-press"},
+      {GST_NAVIGATION_EVENT_KEY_RELEASE, "GST_NAVIGATION_EVENT_KEY_RELEASE",
+          "key-release"},
+      {GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS,
+          "GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS", "mouse-button-press"},
+      {GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE,
+            "GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE",
+          "mouse-button-release"},
+      {GST_NAVIGATION_EVENT_MOUSE_MOVE, "GST_NAVIGATION_EVENT_MOUSE_MOVE",
+          "mouse-move"},
+      {GST_NAVIGATION_EVENT_COMMAND, "GST_NAVIGATION_EVENT_COMMAND", "command"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstNavigationEventType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "streamvolume.h" */
+GType
+gst_stream_volume_format_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_STREAM_VOLUME_FORMAT_LINEAR, "GST_STREAM_VOLUME_FORMAT_LINEAR",
+          "linear"},
+      {GST_STREAM_VOLUME_FORMAT_CUBIC, "GST_STREAM_VOLUME_FORMAT_CUBIC",
+          "cubic"},
+      {GST_STREAM_VOLUME_FORMAT_DB, "GST_STREAM_VOLUME_FORMAT_DB", "db"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstStreamVolumeFormat", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "tunerchannel.h" */
+GType
+gst_tuner_channel_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_TUNER_CHANNEL_INPUT, "GST_TUNER_CHANNEL_INPUT", "input"},
+      {GST_TUNER_CHANNEL_OUTPUT, "GST_TUNER_CHANNEL_OUTPUT", "output"},
+      {GST_TUNER_CHANNEL_FREQUENCY, "GST_TUNER_CHANNEL_FREQUENCY", "frequency"},
+      {GST_TUNER_CHANNEL_AUDIO, "GST_TUNER_CHANNEL_AUDIO", "audio"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstTunerChannelFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/interfaces-enumtypes.h b/win32/common/interfaces-enumtypes.h
new file mode 100644
index 0000000..77fd7eb
--- /dev/null
+++ b/win32/common/interfaces-enumtypes.h
@@ -0,0 +1,49 @@
+
+
+
+#ifndef __GST_INTERFACES_ENUM_TYPES_H__
+#define __GST_INTERFACES_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "colorbalance.h" */
+GType gst_color_balance_type_get_type (void);
+#define GST_TYPE_COLOR_BALANCE_TYPE (gst_color_balance_type_get_type())
+
+/* enumerations from "mixer.h" */
+GType gst_mixer_type_get_type (void);
+#define GST_TYPE_MIXER_TYPE (gst_mixer_type_get_type())
+GType gst_mixer_message_type_get_type (void);
+#define GST_TYPE_MIXER_MESSAGE_TYPE (gst_mixer_message_type_get_type())
+GType gst_mixer_flags_get_type (void);
+#define GST_TYPE_MIXER_FLAGS (gst_mixer_flags_get_type())
+
+/* enumerations from "mixertrack.h" */
+GType gst_mixer_track_flags_get_type (void);
+#define GST_TYPE_MIXER_TRACK_FLAGS (gst_mixer_track_flags_get_type())
+
+/* enumerations from "navigation.h" */
+GType gst_navigation_command_get_type (void);
+#define GST_TYPE_NAVIGATION_COMMAND (gst_navigation_command_get_type())
+GType gst_navigation_query_type_get_type (void);
+#define GST_TYPE_NAVIGATION_QUERY_TYPE (gst_navigation_query_type_get_type())
+GType gst_navigation_message_type_get_type (void);
+#define GST_TYPE_NAVIGATION_MESSAGE_TYPE (gst_navigation_message_type_get_type())
+GType gst_navigation_event_type_get_type (void);
+#define GST_TYPE_NAVIGATION_EVENT_TYPE (gst_navigation_event_type_get_type())
+
+/* enumerations from "streamvolume.h" */
+GType gst_stream_volume_format_get_type (void);
+#define GST_TYPE_STREAM_VOLUME_FORMAT (gst_stream_volume_format_get_type())
+
+/* enumerations from "tunerchannel.h" */
+GType gst_tuner_channel_flags_get_type (void);
+#define GST_TYPE_TUNER_CHANNEL_FLAGS (gst_tuner_channel_flags_get_type())
+G_END_DECLS
+
+#endif /* __GST_INTERFACES_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/libgstapp.def b/win32/common/libgstapp.def
new file mode 100644
index 0000000..596a576
--- /dev/null
+++ b/win32/common/libgstapp.def
@@ -0,0 +1,32 @@
+EXPORTS
+	gst_app_sink_get_caps
+	gst_app_sink_get_drop
+	gst_app_sink_get_emit_signals
+	gst_app_sink_get_max_buffers
+	gst_app_sink_get_type
+	gst_app_sink_is_eos
+	gst_app_sink_pull_buffer
+	gst_app_sink_pull_buffer_list
+	gst_app_sink_pull_preroll
+	gst_app_sink_set_callbacks
+	gst_app_sink_set_caps
+	gst_app_sink_set_drop
+	gst_app_sink_set_emit_signals
+	gst_app_sink_set_max_buffers
+	gst_app_src_end_of_stream
+	gst_app_src_get_caps
+	gst_app_src_get_emit_signals
+	gst_app_src_get_latency
+	gst_app_src_get_max_bytes
+	gst_app_src_get_size
+	gst_app_src_get_stream_type
+	gst_app_src_get_type
+	gst_app_src_push_buffer
+	gst_app_src_set_callbacks
+	gst_app_src_set_caps
+	gst_app_src_set_emit_signals
+	gst_app_src_set_latency
+	gst_app_src_set_max_bytes
+	gst_app_src_set_size
+	gst_app_src_set_stream_type
+	gst_app_stream_type_get_type
diff --git a/win32/common/libgstaudio.def b/win32/common/libgstaudio.def
new file mode 100644
index 0000000..79cf6d9
--- /dev/null
+++ b/win32/common/libgstaudio.def
@@ -0,0 +1,125 @@
+EXPORTS
+	_gst_audio_decoder_error
+	gst_audio_buffer_clip
+	gst_audio_channel_position_get_type
+	gst_audio_check_channel_positions
+	gst_audio_clock_adjust
+	gst_audio_clock_get_time
+	gst_audio_clock_get_type
+	gst_audio_clock_invalidate
+	gst_audio_clock_new
+	gst_audio_clock_new_full
+	gst_audio_clock_reset
+	gst_audio_decoder_finish_frame
+	gst_audio_decoder_get_audio_info
+	gst_audio_decoder_get_byte_time
+	gst_audio_decoder_get_delay
+	gst_audio_decoder_get_latency
+	gst_audio_decoder_get_max_errors
+	gst_audio_decoder_get_min_latency
+	gst_audio_decoder_get_parse_state
+	gst_audio_decoder_get_plc
+	gst_audio_decoder_get_plc_aware
+	gst_audio_decoder_get_tolerance
+	gst_audio_decoder_get_type
+	gst_audio_decoder_set_byte_time
+	gst_audio_decoder_set_latency
+	gst_audio_decoder_set_max_errors
+	gst_audio_decoder_set_min_latency
+	gst_audio_decoder_set_outcaps
+	gst_audio_decoder_set_plc
+	gst_audio_decoder_set_plc_aware
+	gst_audio_decoder_set_tolerance
+	gst_audio_default_registry_mixer_filter
+	gst_audio_encoder_finish_frame
+	gst_audio_encoder_get_audio_info
+	gst_audio_encoder_get_frame_max
+	gst_audio_encoder_get_frame_samples_max
+	gst_audio_encoder_get_frame_samples_min
+	gst_audio_encoder_get_hard_resync
+	gst_audio_encoder_get_latency
+	gst_audio_encoder_get_lookahead
+	gst_audio_encoder_get_mark_granule
+	gst_audio_encoder_get_perfect_timestamp
+	gst_audio_encoder_get_tolerance
+	gst_audio_encoder_get_type
+	gst_audio_encoder_merge_tags
+	gst_audio_encoder_proxy_getcaps
+	gst_audio_encoder_set_frame_max
+	gst_audio_encoder_set_frame_samples_max
+	gst_audio_encoder_set_frame_samples_min
+	gst_audio_encoder_set_hard_resync
+	gst_audio_encoder_set_latency
+	gst_audio_encoder_set_lookahead
+	gst_audio_encoder_set_mark_granule
+	gst_audio_encoder_set_perfect_timestamp
+	gst_audio_encoder_set_tolerance
+	gst_audio_filter_class_add_pad_templates
+	gst_audio_filter_get_type
+	gst_audio_fixate_channel_positions
+	gst_audio_format_build_integer
+	gst_audio_format_fill_silence
+	gst_audio_format_from_string
+	gst_audio_format_get_info
+	gst_audio_format_to_string
+	gst_audio_get_channel_positions
+	gst_audio_iec61937_frame_size
+	gst_audio_iec61937_payload
+	gst_audio_info_convert
+	gst_audio_info_from_caps
+	gst_audio_info_init
+	gst_audio_info_set_format
+	gst_audio_info_to_caps
+	gst_audio_set_caps_channel_positions_list
+	gst_audio_set_channel_positions
+	gst_audio_set_structure_channel_positions_list
+	gst_audio_sink_get_type
+	gst_audio_src_get_type
+	gst_base_audio_sink_create_ringbuffer
+	gst_base_audio_sink_get_drift_tolerance
+	gst_base_audio_sink_get_provide_clock
+	gst_base_audio_sink_get_slave_method
+	gst_base_audio_sink_get_type
+	gst_base_audio_sink_set_drift_tolerance
+	gst_base_audio_sink_set_provide_clock
+	gst_base_audio_sink_set_slave_method
+	gst_base_audio_sink_slave_method_get_type
+	gst_base_audio_src_create_ringbuffer
+	gst_base_audio_src_get_provide_clock
+	gst_base_audio_src_get_slave_method
+	gst_base_audio_src_get_type
+	gst_base_audio_src_set_provide_clock
+	gst_base_audio_src_set_slave_method
+	gst_base_audio_src_slave_method_get_type
+	gst_buffer_format_type_get_type
+	gst_ring_buffer_acquire
+	gst_ring_buffer_activate
+	gst_ring_buffer_advance
+	gst_ring_buffer_clear
+	gst_ring_buffer_clear_all
+	gst_ring_buffer_close_device
+	gst_ring_buffer_commit
+	gst_ring_buffer_commit_full
+	gst_ring_buffer_convert
+	gst_ring_buffer_debug_spec_buff
+	gst_ring_buffer_debug_spec_caps
+	gst_ring_buffer_delay
+	gst_ring_buffer_device_is_open
+	gst_ring_buffer_get_type
+	gst_ring_buffer_is_acquired
+	gst_ring_buffer_is_active
+	gst_ring_buffer_may_start
+	gst_ring_buffer_open_device
+	gst_ring_buffer_parse_caps
+	gst_ring_buffer_pause
+	gst_ring_buffer_prepare_read
+	gst_ring_buffer_read
+	gst_ring_buffer_release
+	gst_ring_buffer_samples_done
+	gst_ring_buffer_seg_state_get_type
+	gst_ring_buffer_set_callback
+	gst_ring_buffer_set_flushing
+	gst_ring_buffer_set_sample
+	gst_ring_buffer_start
+	gst_ring_buffer_state_get_type
+	gst_ring_buffer_stop
diff --git a/win32/common/libgstcdda.def b/win32/common/libgstcdda.def
new file mode 100644
index 0000000..736f61c
--- /dev/null
+++ b/win32/common/libgstcdda.def
@@ -0,0 +1,4 @@
+EXPORTS
+	gst_cdda_base_src_add_track
+	gst_cdda_base_src_get_type
+	gst_cdda_base_src_mode_get_type
diff --git a/win32/common/libgstinterfaces.def b/win32/common/libgstinterfaces.def
new file mode 100644
index 0000000..6b974b5
--- /dev/null
+++ b/win32/common/libgstinterfaces.def
@@ -0,0 +1,121 @@
+EXPORTS
+	gst_color_balance_channel_get_type
+	gst_color_balance_get_balance_type
+	gst_color_balance_get_type
+	gst_color_balance_get_value
+	gst_color_balance_list_channels
+	gst_color_balance_set_value
+	gst_color_balance_type_get_type
+	gst_color_balance_value_changed
+	gst_is_video_overlay_prepare_window_handle_message
+	gst_mixer_flags_get_type
+	gst_mixer_get_mixer_flags
+	gst_mixer_get_mixer_type
+	gst_mixer_get_option
+	gst_mixer_get_type
+	gst_mixer_get_volume
+	gst_mixer_list_tracks
+	gst_mixer_message_get_type
+	gst_mixer_message_parse_mute_toggled
+	gst_mixer_message_parse_option_changed
+	gst_mixer_message_parse_options_list_changed
+	gst_mixer_message_parse_record_toggled
+	gst_mixer_message_parse_volume_changed
+	gst_mixer_message_type_get_type
+	gst_mixer_mixer_changed
+	gst_mixer_mute_toggled
+	gst_mixer_option_changed
+	gst_mixer_options_get_type
+	gst_mixer_options_get_values
+	gst_mixer_options_list_changed
+	gst_mixer_record_toggled
+	gst_mixer_set_mute
+	gst_mixer_set_option
+	gst_mixer_set_record
+	gst_mixer_set_volume
+	gst_mixer_track_flags_get_type
+	gst_mixer_track_get_type
+	gst_mixer_type_get_type
+	gst_mixer_volume_changed
+	gst_navigation_command_get_type
+	gst_navigation_event_get_type
+	gst_navigation_event_parse_command
+	gst_navigation_event_parse_key_event
+	gst_navigation_event_parse_mouse_button_event
+	gst_navigation_event_parse_mouse_move_event
+	gst_navigation_event_type_get_type
+	gst_navigation_get_type
+	gst_navigation_message_get_type
+	gst_navigation_message_new_angles_changed
+	gst_navigation_message_new_commands_changed
+	gst_navigation_message_new_mouse_over
+	gst_navigation_message_parse_angles_changed
+	gst_navigation_message_parse_mouse_over
+	gst_navigation_message_type_get_type
+	gst_navigation_query_get_type
+	gst_navigation_query_new_angles
+	gst_navigation_query_new_commands
+	gst_navigation_query_parse_angles
+	gst_navigation_query_parse_commands_length
+	gst_navigation_query_parse_commands_nth
+	gst_navigation_query_set_angles
+	gst_navigation_query_set_commands
+	gst_navigation_query_set_commandsv
+	gst_navigation_query_type_get_type
+	gst_navigation_send_command
+	gst_navigation_send_event
+	gst_navigation_send_key_event
+	gst_navigation_send_mouse_event
+	gst_property_probe_get_properties
+	gst_property_probe_get_property
+	gst_property_probe_get_type
+	gst_property_probe_get_values
+	gst_property_probe_get_values_name
+	gst_property_probe_needs_probe
+	gst_property_probe_needs_probe_name
+	gst_property_probe_probe_and_get_values
+	gst_property_probe_probe_and_get_values_name
+	gst_property_probe_probe_property
+	gst_property_probe_probe_property_name
+	gst_stream_volume_convert_volume
+	gst_stream_volume_format_get_type
+	gst_stream_volume_get_mute
+	gst_stream_volume_get_type
+	gst_stream_volume_get_volume
+	gst_stream_volume_set_mute
+	gst_stream_volume_set_volume
+	gst_tuner_channel_changed
+	gst_tuner_channel_flags_get_type
+	gst_tuner_channel_get_type
+	gst_tuner_find_channel_by_name
+	gst_tuner_find_norm_by_name
+	gst_tuner_frequency_changed
+	gst_tuner_get_channel
+	gst_tuner_get_frequency
+	gst_tuner_get_norm
+	gst_tuner_get_type
+	gst_tuner_list_channels
+	gst_tuner_list_norms
+	gst_tuner_norm_changed
+	gst_tuner_norm_get_type
+	gst_tuner_set_channel
+	gst_tuner_set_frequency
+	gst_tuner_set_norm
+	gst_tuner_signal_changed
+	gst_tuner_signal_strength
+	gst_video_orientation_get_hcenter
+	gst_video_orientation_get_hflip
+	gst_video_orientation_get_type
+	gst_video_orientation_get_vcenter
+	gst_video_orientation_get_vflip
+	gst_video_orientation_set_hcenter
+	gst_video_orientation_set_hflip
+	gst_video_orientation_set_vcenter
+	gst_video_orientation_set_vflip
+	gst_video_overlay_expose
+	gst_video_overlay_get_type
+	gst_video_overlay_got_window_handle
+	gst_video_overlay_handle_events
+	gst_video_overlay_prepare_window_handle
+	gst_video_overlay_set_render_rectangle
+	gst_video_overlay_set_window_handle
diff --git a/win32/common/libgstnetbuffer.def b/win32/common/libgstnetbuffer.def
new file mode 100644
index 0000000..4a191d4
--- /dev/null
+++ b/win32/common/libgstnetbuffer.def
@@ -0,0 +1,11 @@
+EXPORTS
+	gst_meta_net_address_get_info
+	gst_netaddress_equal
+	gst_netaddress_get_address_bytes
+	gst_netaddress_get_ip4_address
+	gst_netaddress_get_ip6_address
+	gst_netaddress_get_net_type
+	gst_netaddress_set_address_bytes
+	gst_netaddress_set_ip4_address
+	gst_netaddress_set_ip6_address
+	gst_netaddress_to_string
diff --git a/win32/common/libgstpbutils.def b/win32/common/libgstpbutils.def
new file mode 100644
index 0000000..3fa74d4
--- /dev/null
+++ b/win32/common/libgstpbutils.def
@@ -0,0 +1,142 @@
+EXPORTS
+	gst_codec_utils_aac_caps_set_level_and_profile
+	gst_codec_utils_aac_get_level
+	gst_codec_utils_aac_get_profile
+	gst_codec_utils_aac_get_sample_rate_from_index
+	gst_codec_utils_h264_caps_set_level_and_profile
+	gst_codec_utils_h264_get_level
+	gst_codec_utils_h264_get_level_idc
+	gst_codec_utils_h264_get_profile
+	gst_codec_utils_mpeg4video_caps_set_level_and_profile
+	gst_codec_utils_mpeg4video_get_level
+	gst_codec_utils_mpeg4video_get_profile
+	gst_discoverer_audio_info_get_bitrate
+	gst_discoverer_audio_info_get_channels
+	gst_discoverer_audio_info_get_depth
+	gst_discoverer_audio_info_get_language
+	gst_discoverer_audio_info_get_max_bitrate
+	gst_discoverer_audio_info_get_sample_rate
+	gst_discoverer_audio_info_get_type
+	gst_discoverer_container_info_get_streams
+	gst_discoverer_container_info_get_type
+	gst_discoverer_discover_uri
+	gst_discoverer_discover_uri_async
+	gst_discoverer_get_type
+	gst_discoverer_info_copy
+	gst_discoverer_info_get_audio_streams
+	gst_discoverer_info_get_container_streams
+	gst_discoverer_info_get_duration
+	gst_discoverer_info_get_misc
+	gst_discoverer_info_get_result
+	gst_discoverer_info_get_seekable
+	gst_discoverer_info_get_stream_info
+	gst_discoverer_info_get_stream_list
+	gst_discoverer_info_get_streams
+	gst_discoverer_info_get_subtitle_streams
+	gst_discoverer_info_get_tags
+	gst_discoverer_info_get_type
+	gst_discoverer_info_get_uri
+	gst_discoverer_info_get_video_streams
+	gst_discoverer_new
+	gst_discoverer_result_get_type
+	gst_discoverer_start
+	gst_discoverer_stop
+	gst_discoverer_stream_info_get_caps
+	gst_discoverer_stream_info_get_misc
+	gst_discoverer_stream_info_get_next
+	gst_discoverer_stream_info_get_previous
+	gst_discoverer_stream_info_get_stream_type_nick
+	gst_discoverer_stream_info_get_tags
+	gst_discoverer_stream_info_get_type
+	gst_discoverer_stream_info_list_free
+	gst_discoverer_subtitle_info_get_language
+	gst_discoverer_subtitle_info_get_type
+	gst_discoverer_video_info_get_bitrate
+	gst_discoverer_video_info_get_depth
+	gst_discoverer_video_info_get_framerate_denom
+	gst_discoverer_video_info_get_framerate_num
+	gst_discoverer_video_info_get_height
+	gst_discoverer_video_info_get_max_bitrate
+	gst_discoverer_video_info_get_par_denom
+	gst_discoverer_video_info_get_par_num
+	gst_discoverer_video_info_get_type
+	gst_discoverer_video_info_get_width
+	gst_discoverer_video_info_is_image
+	gst_discoverer_video_info_is_interlaced
+	gst_encoding_audio_profile_get_type
+	gst_encoding_audio_profile_new
+	gst_encoding_container_profile_add_profile
+	gst_encoding_container_profile_contains_profile
+	gst_encoding_container_profile_get_profiles
+	gst_encoding_container_profile_get_type
+	gst_encoding_container_profile_new
+	gst_encoding_list_all_targets
+	gst_encoding_list_available_categories
+	gst_encoding_profile_find
+	gst_encoding_profile_get_description
+	gst_encoding_profile_get_format
+	gst_encoding_profile_get_input_caps
+	gst_encoding_profile_get_name
+	gst_encoding_profile_get_presence
+	gst_encoding_profile_get_preset
+	gst_encoding_profile_get_restriction
+	gst_encoding_profile_get_type
+	gst_encoding_profile_get_type_nick
+	gst_encoding_profile_is_equal
+	gst_encoding_profile_set_description
+	gst_encoding_profile_set_format
+	gst_encoding_profile_set_name
+	gst_encoding_profile_set_presence
+	gst_encoding_profile_set_preset
+	gst_encoding_profile_set_restriction
+	gst_encoding_target_add_profile
+	gst_encoding_target_get_category
+	gst_encoding_target_get_description
+	gst_encoding_target_get_name
+	gst_encoding_target_get_profile
+	gst_encoding_target_get_profiles
+	gst_encoding_target_get_type
+	gst_encoding_target_load
+	gst_encoding_target_load_from_file
+	gst_encoding_target_new
+	gst_encoding_target_save
+	gst_encoding_target_save_to_file
+	gst_encoding_video_profile_get_pass
+	gst_encoding_video_profile_get_type
+	gst_encoding_video_profile_get_variableframerate
+	gst_encoding_video_profile_new
+	gst_encoding_video_profile_set_pass
+	gst_encoding_video_profile_set_variableframerate
+	gst_install_plugins_async
+	gst_install_plugins_context_free
+	gst_install_plugins_context_get_type
+	gst_install_plugins_context_new
+	gst_install_plugins_context_set_xid
+	gst_install_plugins_installation_in_progress
+	gst_install_plugins_return_get_name
+	gst_install_plugins_return_get_type
+	gst_install_plugins_supported
+	gst_install_plugins_sync
+	gst_is_missing_plugin_message
+	gst_missing_decoder_installer_detail_new
+	gst_missing_decoder_message_new
+	gst_missing_element_installer_detail_new
+	gst_missing_element_message_new
+	gst_missing_encoder_installer_detail_new
+	gst_missing_encoder_message_new
+	gst_missing_plugin_message_get_description
+	gst_missing_plugin_message_get_installer_detail
+	gst_missing_uri_sink_installer_detail_new
+	gst_missing_uri_sink_message_new
+	gst_missing_uri_source_installer_detail_new
+	gst_missing_uri_source_message_new
+	gst_pb_utils_add_codec_description_to_tag_list
+	gst_pb_utils_get_codec_description
+	gst_pb_utils_get_decoder_description
+	gst_pb_utils_get_element_description
+	gst_pb_utils_get_encoder_description
+	gst_pb_utils_get_sink_description
+	gst_pb_utils_get_source_description
+	gst_pb_utils_init
+	gst_plugins_base_version
+	gst_plugins_base_version_string
diff --git a/win32/common/libgstriff.def b/win32/common/libgstriff.def
new file mode 100644
index 0000000..e566107
--- /dev/null
+++ b/win32/common/libgstriff.def
@@ -0,0 +1,16 @@
+EXPORTS
+	gst_riff_create_audio_caps
+	gst_riff_create_audio_template_caps
+	gst_riff_create_iavs_caps
+	gst_riff_create_iavs_template_caps
+	gst_riff_create_video_caps
+	gst_riff_create_video_template_caps
+	gst_riff_init
+	gst_riff_parse_chunk
+	gst_riff_parse_file_header
+	gst_riff_parse_info
+	gst_riff_parse_strf_auds
+	gst_riff_parse_strf_iavs
+	gst_riff_parse_strf_vids
+	gst_riff_parse_strh
+	gst_riff_read_chunk
diff --git a/win32/common/libgstrtp.def b/win32/common/libgstrtp.def
new file mode 100644
index 0000000..54d855b
--- /dev/null
+++ b/win32/common/libgstrtp.def
@@ -0,0 +1,124 @@
+EXPORTS
+	gst_base_rtp_audio_payload_flush
+	gst_base_rtp_audio_payload_get_adapter
+	gst_base_rtp_audio_payload_get_type
+	gst_base_rtp_audio_payload_push
+	gst_base_rtp_audio_payload_set_frame_based
+	gst_base_rtp_audio_payload_set_frame_options
+	gst_base_rtp_audio_payload_set_sample_based
+	gst_base_rtp_audio_payload_set_sample_options
+	gst_base_rtp_audio_payload_set_samplebits_options
+	gst_base_rtp_depayload_get_type
+	gst_base_rtp_depayload_push
+	gst_base_rtp_depayload_push_list
+	gst_base_rtp_depayload_push_ts
+	gst_basertppayload_get_type
+	gst_basertppayload_is_filled
+	gst_basertppayload_push
+	gst_basertppayload_push_list
+	gst_basertppayload_set_options
+	gst_basertppayload_set_outcaps
+	gst_rtcp_buffer_add_packet
+	gst_rtcp_buffer_get_first_packet
+	gst_rtcp_buffer_get_packet_count
+	gst_rtcp_buffer_map
+	gst_rtcp_buffer_new
+	gst_rtcp_buffer_new_copy_data
+	gst_rtcp_buffer_new_take_data
+	gst_rtcp_buffer_unmap
+	gst_rtcp_buffer_validate
+	gst_rtcp_buffer_validate_data
+	gst_rtcp_ntp_to_unix
+	gst_rtcp_packet_add_rb
+	gst_rtcp_packet_bye_add_ssrc
+	gst_rtcp_packet_bye_add_ssrcs
+	gst_rtcp_packet_bye_get_nth_ssrc
+	gst_rtcp_packet_bye_get_reason
+	gst_rtcp_packet_bye_get_reason_len
+	gst_rtcp_packet_bye_get_ssrc_count
+	gst_rtcp_packet_bye_set_reason
+	gst_rtcp_packet_fb_get_fci
+	gst_rtcp_packet_fb_get_fci_length
+	gst_rtcp_packet_fb_get_media_ssrc
+	gst_rtcp_packet_fb_get_sender_ssrc
+	gst_rtcp_packet_fb_get_type
+	gst_rtcp_packet_fb_set_fci_length
+	gst_rtcp_packet_fb_set_media_ssrc
+	gst_rtcp_packet_fb_set_sender_ssrc
+	gst_rtcp_packet_fb_set_type
+	gst_rtcp_packet_get_count
+	gst_rtcp_packet_get_length
+	gst_rtcp_packet_get_padding
+	gst_rtcp_packet_get_rb
+	gst_rtcp_packet_get_rb_count
+	gst_rtcp_packet_get_type
+	gst_rtcp_packet_move_to_next
+	gst_rtcp_packet_remove
+	gst_rtcp_packet_rr_get_ssrc
+	gst_rtcp_packet_rr_set_ssrc
+	gst_rtcp_packet_sdes_add_entry
+	gst_rtcp_packet_sdes_add_item
+	gst_rtcp_packet_sdes_copy_entry
+	gst_rtcp_packet_sdes_first_entry
+	gst_rtcp_packet_sdes_first_item
+	gst_rtcp_packet_sdes_get_entry
+	gst_rtcp_packet_sdes_get_item_count
+	gst_rtcp_packet_sdes_get_ssrc
+	gst_rtcp_packet_sdes_next_entry
+	gst_rtcp_packet_sdes_next_item
+	gst_rtcp_packet_set_rb
+	gst_rtcp_packet_sr_get_sender_info
+	gst_rtcp_packet_sr_set_sender_info
+	gst_rtcp_sdes_name_to_type
+	gst_rtcp_sdes_type_to_name
+	gst_rtcp_unix_to_ntp
+	gst_rtp_buffer_add_extension_onebyte_header
+	gst_rtp_buffer_add_extension_twobytes_header
+	gst_rtp_buffer_allocate_data
+	gst_rtp_buffer_calc_header_len
+	gst_rtp_buffer_calc_packet_len
+	gst_rtp_buffer_calc_payload_len
+	gst_rtp_buffer_compare_seqnum
+	gst_rtp_buffer_default_clock_rate
+	gst_rtp_buffer_ext_timestamp
+	gst_rtp_buffer_get_csrc
+	gst_rtp_buffer_get_csrc_count
+	gst_rtp_buffer_get_extension
+	gst_rtp_buffer_get_extension_data
+	gst_rtp_buffer_get_extension_onebyte_header
+	gst_rtp_buffer_get_extension_twobytes_header
+	gst_rtp_buffer_get_header_len
+	gst_rtp_buffer_get_marker
+	gst_rtp_buffer_get_packet_len
+	gst_rtp_buffer_get_padding
+	gst_rtp_buffer_get_payload
+	gst_rtp_buffer_get_payload_buffer
+	gst_rtp_buffer_get_payload_len
+	gst_rtp_buffer_get_payload_subbuffer
+	gst_rtp_buffer_get_payload_type
+	gst_rtp_buffer_get_seq
+	gst_rtp_buffer_get_ssrc
+	gst_rtp_buffer_get_timestamp
+	gst_rtp_buffer_get_version
+	gst_rtp_buffer_map
+	gst_rtp_buffer_new_allocate
+	gst_rtp_buffer_new_allocate_len
+	gst_rtp_buffer_new_copy_data
+	gst_rtp_buffer_new_take_data
+	gst_rtp_buffer_pad_to
+	gst_rtp_buffer_set_csrc
+	gst_rtp_buffer_set_extension
+	gst_rtp_buffer_set_extension_data
+	gst_rtp_buffer_set_marker
+	gst_rtp_buffer_set_packet_len
+	gst_rtp_buffer_set_padding
+	gst_rtp_buffer_set_payload_type
+	gst_rtp_buffer_set_seq
+	gst_rtp_buffer_set_ssrc
+	gst_rtp_buffer_set_timestamp
+	gst_rtp_buffer_set_version
+	gst_rtp_buffer_unmap
+	gst_rtp_buffer_validate
+	gst_rtp_buffer_validate_data
+	gst_rtp_payload_info_for_name
+	gst_rtp_payload_info_for_pt
diff --git a/win32/common/libgstrtsp.def b/win32/common/libgstrtsp.def
new file mode 100644
index 0000000..5327c5b
--- /dev/null
+++ b/win32/common/libgstrtsp.def
@@ -0,0 +1,112 @@
+EXPORTS
+	gst_rtsp_auth_method_get_type
+	gst_rtsp_base64_decode_ip
+	gst_rtsp_base64_encode
+	gst_rtsp_connection_accept
+	gst_rtsp_connection_clear_auth_params
+	gst_rtsp_connection_close
+	gst_rtsp_connection_connect
+	gst_rtsp_connection_create
+	gst_rtsp_connection_create_from_fd
+	gst_rtsp_connection_do_tunnel
+	gst_rtsp_connection_flush
+	gst_rtsp_connection_free
+	gst_rtsp_connection_get_ip
+	gst_rtsp_connection_get_readfd
+	gst_rtsp_connection_get_tunnelid
+	gst_rtsp_connection_get_url
+	gst_rtsp_connection_get_writefd
+	gst_rtsp_connection_is_tunneled
+	gst_rtsp_connection_next_timeout
+	gst_rtsp_connection_poll
+	gst_rtsp_connection_read
+	gst_rtsp_connection_receive
+	gst_rtsp_connection_reset_timeout
+	gst_rtsp_connection_send
+	gst_rtsp_connection_set_auth
+	gst_rtsp_connection_set_auth_param
+	gst_rtsp_connection_set_http_mode
+	gst_rtsp_connection_set_ip
+	gst_rtsp_connection_set_proxy
+	gst_rtsp_connection_set_qos_dscp
+	gst_rtsp_connection_set_tunneled
+	gst_rtsp_connection_write
+	gst_rtsp_event_get_type
+	gst_rtsp_extension_after_send
+	gst_rtsp_extension_before_send
+	gst_rtsp_extension_configure_stream
+	gst_rtsp_extension_detect_server
+	gst_rtsp_extension_get_transports
+	gst_rtsp_extension_get_type
+	gst_rtsp_extension_parse_sdp
+	gst_rtsp_extension_receive_request
+	gst_rtsp_extension_send
+	gst_rtsp_extension_setup_media
+	gst_rtsp_extension_stream_select
+	gst_rtsp_family_get_type
+	gst_rtsp_find_header_field
+	gst_rtsp_find_method
+	gst_rtsp_header_allow_multiple
+	gst_rtsp_header_as_text
+	gst_rtsp_header_field_get_type
+	gst_rtsp_lower_trans_get_type
+	gst_rtsp_message_add_header
+	gst_rtsp_message_append_headers
+	gst_rtsp_message_dump
+	gst_rtsp_message_free
+	gst_rtsp_message_get_body
+	gst_rtsp_message_get_header
+	gst_rtsp_message_get_type
+	gst_rtsp_message_init
+	gst_rtsp_message_init_data
+	gst_rtsp_message_init_request
+	gst_rtsp_message_init_response
+	gst_rtsp_message_new
+	gst_rtsp_message_new_data
+	gst_rtsp_message_new_request
+	gst_rtsp_message_new_response
+	gst_rtsp_message_parse_data
+	gst_rtsp_message_parse_request
+	gst_rtsp_message_parse_response
+	gst_rtsp_message_remove_header
+	gst_rtsp_message_set_body
+	gst_rtsp_message_steal_body
+	gst_rtsp_message_take_body
+	gst_rtsp_message_take_header
+	gst_rtsp_message_unset
+	gst_rtsp_method_as_text
+	gst_rtsp_method_get_type
+	gst_rtsp_options_as_text
+	gst_rtsp_range_free
+	gst_rtsp_range_parse
+	gst_rtsp_range_to_string
+	gst_rtsp_result_get_type
+	gst_rtsp_state_get_type
+	gst_rtsp_status_as_text
+	gst_rtsp_status_code_get_type
+	gst_rtsp_strresult
+	gst_rtsp_transport_as_text
+	gst_rtsp_transport_free
+	gst_rtsp_transport_get_manager
+	gst_rtsp_transport_get_mime
+	gst_rtsp_transport_init
+	gst_rtsp_transport_new
+	gst_rtsp_transport_parse
+	gst_rtsp_url_copy
+	gst_rtsp_url_decode_path_components
+	gst_rtsp_url_free
+	gst_rtsp_url_get_port
+	gst_rtsp_url_get_request_uri
+	gst_rtsp_url_get_type
+	gst_rtsp_url_parse
+	gst_rtsp_url_set_port
+	gst_rtsp_version_as_text
+	gst_rtsp_version_get_type
+	gst_rtsp_watch_attach
+	gst_rtsp_watch_new
+	gst_rtsp_watch_queue_data
+	gst_rtsp_watch_queue_message
+	gst_rtsp_watch_reset
+	gst_rtsp_watch_send_message
+	gst_rtsp_watch_unref
+	gst_rtsp_watch_write_data
diff --git a/win32/common/libgstsdp.def b/win32/common/libgstsdp.def
new file mode 100644
index 0000000..186e4ff
--- /dev/null
+++ b/win32/common/libgstsdp.def
@@ -0,0 +1,78 @@
+EXPORTS
+	gst_sdp_address_is_multicast
+	gst_sdp_media_add_attribute
+	gst_sdp_media_add_bandwidth
+	gst_sdp_media_add_connection
+	gst_sdp_media_add_format
+	gst_sdp_media_as_text
+	gst_sdp_media_attributes_len
+	gst_sdp_media_bandwidths_len
+	gst_sdp_media_connections_len
+	gst_sdp_media_formats_len
+	gst_sdp_media_free
+	gst_sdp_media_get_attribute
+	gst_sdp_media_get_attribute_val
+	gst_sdp_media_get_attribute_val_n
+	gst_sdp_media_get_bandwidth
+	gst_sdp_media_get_connection
+	gst_sdp_media_get_format
+	gst_sdp_media_get_information
+	gst_sdp_media_get_key
+	gst_sdp_media_get_media
+	gst_sdp_media_get_num_ports
+	gst_sdp_media_get_port
+	gst_sdp_media_get_proto
+	gst_sdp_media_init
+	gst_sdp_media_new
+	gst_sdp_media_set_information
+	gst_sdp_media_set_key
+	gst_sdp_media_set_media
+	gst_sdp_media_set_port_info
+	gst_sdp_media_set_proto
+	gst_sdp_media_uninit
+	gst_sdp_message_add_attribute
+	gst_sdp_message_add_bandwidth
+	gst_sdp_message_add_email
+	gst_sdp_message_add_media
+	gst_sdp_message_add_phone
+	gst_sdp_message_add_time
+	gst_sdp_message_add_zone
+	gst_sdp_message_as_text
+	gst_sdp_message_as_uri
+	gst_sdp_message_attributes_len
+	gst_sdp_message_bandwidths_len
+	gst_sdp_message_dump
+	gst_sdp_message_emails_len
+	gst_sdp_message_free
+	gst_sdp_message_get_attribute
+	gst_sdp_message_get_attribute_val
+	gst_sdp_message_get_attribute_val_n
+	gst_sdp_message_get_bandwidth
+	gst_sdp_message_get_connection
+	gst_sdp_message_get_email
+	gst_sdp_message_get_information
+	gst_sdp_message_get_key
+	gst_sdp_message_get_media
+	gst_sdp_message_get_origin
+	gst_sdp_message_get_phone
+	gst_sdp_message_get_session_name
+	gst_sdp_message_get_time
+	gst_sdp_message_get_uri
+	gst_sdp_message_get_version
+	gst_sdp_message_get_zone
+	gst_sdp_message_init
+	gst_sdp_message_medias_len
+	gst_sdp_message_new
+	gst_sdp_message_parse_buffer
+	gst_sdp_message_parse_uri
+	gst_sdp_message_phones_len
+	gst_sdp_message_set_connection
+	gst_sdp_message_set_information
+	gst_sdp_message_set_key
+	gst_sdp_message_set_origin
+	gst_sdp_message_set_session_name
+	gst_sdp_message_set_uri
+	gst_sdp_message_set_version
+	gst_sdp_message_times_len
+	gst_sdp_message_uninit
+	gst_sdp_message_zones_len
diff --git a/win32/common/libgsttag.def b/win32/common/libgsttag.def
new file mode 100644
index 0000000..45a0fd4
--- /dev/null
+++ b/win32/common/libgsttag.def
@@ -0,0 +1,53 @@
+EXPORTS
+	gst_tag_demux_get_type
+	gst_tag_demux_result_get_type
+	gst_tag_freeform_string_to_utf8
+	gst_tag_from_id3_tag
+	gst_tag_from_id3_user_tag
+	gst_tag_from_vorbis_tag
+	gst_tag_get_id3v2_tag_size
+	gst_tag_get_language_code_iso_639_1
+	gst_tag_get_language_code_iso_639_2B
+	gst_tag_get_language_code_iso_639_2T
+	gst_tag_get_language_codes
+	gst_tag_get_language_name
+	gst_tag_get_license_description
+	gst_tag_get_license_flags
+	gst_tag_get_license_jurisdiction
+	gst_tag_get_license_nick
+	gst_tag_get_license_title
+	gst_tag_get_license_version
+	gst_tag_get_licenses
+	gst_tag_id3_genre_count
+	gst_tag_id3_genre_get
+	gst_tag_image_data_to_image_buffer
+	gst_tag_image_type_get_type
+	gst_tag_license_flags_get_type
+	gst_tag_list_add_id3_image
+	gst_tag_list_from_exif_buffer
+	gst_tag_list_from_exif_buffer_with_tiff_header
+	gst_tag_list_from_id3v2_tag
+	gst_tag_list_from_vorbiscomment
+	gst_tag_list_from_vorbiscomment_buffer
+	gst_tag_list_from_xmp_buffer
+	gst_tag_list_new_from_id3v1
+	gst_tag_list_to_exif_buffer
+	gst_tag_list_to_exif_buffer_with_tiff_header
+	gst_tag_list_to_vorbiscomment_buffer
+	gst_tag_list_to_xmp_buffer
+	gst_tag_list_to_xmp_buffer_full
+	gst_tag_mux_get_type
+	gst_tag_parse_extended_comment
+	gst_tag_register_musicbrainz_tags
+	gst_tag_to_id3_tag
+	gst_tag_to_vorbis_comments
+	gst_tag_to_vorbis_tag
+	gst_tag_xmp_list_schemas
+	gst_tag_xmp_writer_add_all_schemas
+	gst_tag_xmp_writer_add_schema
+	gst_tag_xmp_writer_get_type
+	gst_tag_xmp_writer_has_schema
+	gst_tag_xmp_writer_remove_all_schemas
+	gst_tag_xmp_writer_remove_schema
+	gst_tag_xmp_writer_tag_list_to_xmp_buffer
+	gst_vorbis_tag_add
diff --git a/win32/common/libgstvideo.def b/win32/common/libgstvideo.def
new file mode 100644
index 0000000..af7142a
--- /dev/null
+++ b/win32/common/libgstvideo.def
@@ -0,0 +1,45 @@
+EXPORTS
+	gst_buffer_add_meta_video
+	gst_buffer_add_meta_video_full
+	gst_buffer_get_meta_video_id
+	gst_buffer_pool_config_get_video_alignment
+	gst_buffer_pool_config_set_video_alignment
+	gst_meta_video_crop_get_info
+	gst_meta_video_get_info
+	gst_meta_video_map
+	gst_meta_video_unmap
+	gst_video_buffer_flags_get_type
+	gst_video_calculate_display_ratio
+	gst_video_chroma_site_get_type
+	gst_video_color_matrix_get_type
+	gst_video_color_primaries_get_type
+	gst_video_color_range_get_type
+	gst_video_colorimetry_from_string
+	gst_video_colorimetry_matches
+	gst_video_convert_frame
+	gst_video_convert_frame_async
+	gst_video_event_new_still_frame
+	gst_video_event_parse_still_frame
+	gst_video_filter_get_type
+	gst_video_flags_get_type
+	gst_video_format_flags_get_type
+	gst_video_format_from_fourcc
+	gst_video_format_from_masks
+	gst_video_format_from_string
+	gst_video_format_get_info
+	gst_video_format_get_type
+	gst_video_format_to_fourcc
+	gst_video_format_to_string
+	gst_video_frame_copy
+	gst_video_frame_map
+	gst_video_frame_map_id
+	gst_video_frame_unmap
+	gst_video_info_convert
+	gst_video_info_from_caps
+	gst_video_info_init
+	gst_video_info_set_format
+	gst_video_info_to_caps
+	gst_video_parse_caps_palette
+	gst_video_sink_center_rect
+	gst_video_sink_get_type
+	gst_video_transfer_function_get_type
diff --git a/win32/common/pbutils-enumtypes.c b/win32/common/pbutils-enumtypes.c
new file mode 100644
index 0000000..2652ec0
--- /dev/null
+++ b/win32/common/pbutils-enumtypes.c
@@ -0,0 +1,70 @@
+
+
+
+#include "pbutils-enumtypes.h"
+
+#include "pbutils.h"
+#include "codec-utils.h"
+#include "descriptions.h"
+#include "encoding-profile.h"
+#include "encoding-target.h"
+#include "install-plugins.h"
+#include "missing-plugins.h"
+#include "gstdiscoverer.h"
+
+/* enumerations from "install-plugins.h" */
+GType
+gst_install_plugins_return_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_INSTALL_PLUGINS_SUCCESS, "GST_INSTALL_PLUGINS_SUCCESS", "success"},
+      {GST_INSTALL_PLUGINS_NOT_FOUND, "GST_INSTALL_PLUGINS_NOT_FOUND",
+          "not-found"},
+      {GST_INSTALL_PLUGINS_ERROR, "GST_INSTALL_PLUGINS_ERROR", "error"},
+      {GST_INSTALL_PLUGINS_PARTIAL_SUCCESS,
+          "GST_INSTALL_PLUGINS_PARTIAL_SUCCESS", "partial-success"},
+      {GST_INSTALL_PLUGINS_USER_ABORT, "GST_INSTALL_PLUGINS_USER_ABORT",
+          "user-abort"},
+      {GST_INSTALL_PLUGINS_CRASHED, "GST_INSTALL_PLUGINS_CRASHED", "crashed"},
+      {GST_INSTALL_PLUGINS_INVALID, "GST_INSTALL_PLUGINS_INVALID", "invalid"},
+      {GST_INSTALL_PLUGINS_STARTED_OK, "GST_INSTALL_PLUGINS_STARTED_OK",
+          "started-ok"},
+      {GST_INSTALL_PLUGINS_INTERNAL_FAILURE,
+          "GST_INSTALL_PLUGINS_INTERNAL_FAILURE", "internal-failure"},
+      {GST_INSTALL_PLUGINS_HELPER_MISSING, "GST_INSTALL_PLUGINS_HELPER_MISSING",
+          "helper-missing"},
+      {GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS,
+          "GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS", "install-in-progress"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstInstallPluginsReturn", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "gstdiscoverer.h" */
+GType
+gst_discoverer_result_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_DISCOVERER_OK, "GST_DISCOVERER_OK", "ok"},
+      {GST_DISCOVERER_URI_INVALID, "GST_DISCOVERER_URI_INVALID", "uri-invalid"},
+      {GST_DISCOVERER_ERROR, "GST_DISCOVERER_ERROR", "error"},
+      {GST_DISCOVERER_TIMEOUT, "GST_DISCOVERER_TIMEOUT", "timeout"},
+      {GST_DISCOVERER_BUSY, "GST_DISCOVERER_BUSY", "busy"},
+      {GST_DISCOVERER_MISSING_PLUGINS, "GST_DISCOVERER_MISSING_PLUGINS",
+          "missing-plugins"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstDiscovererResult", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/pbutils-enumtypes.h b/win32/common/pbutils-enumtypes.h
new file mode 100644
index 0000000..30dadfd
--- /dev/null
+++ b/win32/common/pbutils-enumtypes.h
@@ -0,0 +1,23 @@
+
+
+
+#ifndef __PB_UTILS_ENUM_TYPES_H__
+#define __PB_UTILS_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "install-plugins.h" */
+GType gst_install_plugins_return_get_type (void);
+#define GST_TYPE_INSTALL_PLUGINS_RETURN (gst_install_plugins_return_get_type())
+
+/* enumerations from "gstdiscoverer.h" */
+GType gst_discoverer_result_get_type (void);
+#define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type())
+G_END_DECLS
+
+#endif /* __PB_UTILS_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/common/video-enumtypes.c b/win32/common/video-enumtypes.c
new file mode 100644
index 0000000..1ad3740
--- /dev/null
+++ b/win32/common/video-enumtypes.c
@@ -0,0 +1,254 @@
+
+
+
+#include "video-enumtypes.h"
+
+#include "video.h"
+
+/* enumerations from "video.h" */
+GType
+gst_video_format_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_FORMAT_UNKNOWN, "GST_VIDEO_FORMAT_UNKNOWN", "unknown"},
+      {GST_VIDEO_FORMAT_I420, "GST_VIDEO_FORMAT_I420", "i420"},
+      {GST_VIDEO_FORMAT_YV12, "GST_VIDEO_FORMAT_YV12", "yv12"},
+      {GST_VIDEO_FORMAT_YUY2, "GST_VIDEO_FORMAT_YUY2", "yuy2"},
+      {GST_VIDEO_FORMAT_UYVY, "GST_VIDEO_FORMAT_UYVY", "uyvy"},
+      {GST_VIDEO_FORMAT_AYUV, "GST_VIDEO_FORMAT_AYUV", "ayuv"},
+      {GST_VIDEO_FORMAT_RGBx, "GST_VIDEO_FORMAT_RGBx", "rgbx"},
+      {GST_VIDEO_FORMAT_BGRx, "GST_VIDEO_FORMAT_BGRx", "bgrx"},
+      {GST_VIDEO_FORMAT_xRGB, "GST_VIDEO_FORMAT_xRGB", "xrgb"},
+      {GST_VIDEO_FORMAT_xBGR, "GST_VIDEO_FORMAT_xBGR", "xbgr"},
+      {GST_VIDEO_FORMAT_RGBA, "GST_VIDEO_FORMAT_RGBA", "rgba"},
+      {GST_VIDEO_FORMAT_BGRA, "GST_VIDEO_FORMAT_BGRA", "bgra"},
+      {GST_VIDEO_FORMAT_ARGB, "GST_VIDEO_FORMAT_ARGB", "argb"},
+      {GST_VIDEO_FORMAT_ABGR, "GST_VIDEO_FORMAT_ABGR", "abgr"},
+      {GST_VIDEO_FORMAT_RGB, "GST_VIDEO_FORMAT_RGB", "rgb"},
+      {GST_VIDEO_FORMAT_BGR, "GST_VIDEO_FORMAT_BGR", "bgr"},
+      {GST_VIDEO_FORMAT_Y41B, "GST_VIDEO_FORMAT_Y41B", "y41b"},
+      {GST_VIDEO_FORMAT_Y42B, "GST_VIDEO_FORMAT_Y42B", "y42b"},
+      {GST_VIDEO_FORMAT_YVYU, "GST_VIDEO_FORMAT_YVYU", "yvyu"},
+      {GST_VIDEO_FORMAT_Y444, "GST_VIDEO_FORMAT_Y444", "y444"},
+      {GST_VIDEO_FORMAT_v210, "GST_VIDEO_FORMAT_v210", "v210"},
+      {GST_VIDEO_FORMAT_v216, "GST_VIDEO_FORMAT_v216", "v216"},
+      {GST_VIDEO_FORMAT_NV12, "GST_VIDEO_FORMAT_NV12", "nv12"},
+      {GST_VIDEO_FORMAT_NV21, "GST_VIDEO_FORMAT_NV21", "nv21"},
+      {GST_VIDEO_FORMAT_GRAY8, "GST_VIDEO_FORMAT_GRAY8", "gray8"},
+      {GST_VIDEO_FORMAT_GRAY16_BE, "GST_VIDEO_FORMAT_GRAY16_BE", "gray16-be"},
+      {GST_VIDEO_FORMAT_GRAY16_LE, "GST_VIDEO_FORMAT_GRAY16_LE", "gray16-le"},
+      {GST_VIDEO_FORMAT_v308, "GST_VIDEO_FORMAT_v308", "v308"},
+      {GST_VIDEO_FORMAT_Y800, "GST_VIDEO_FORMAT_Y800", "y800"},
+      {GST_VIDEO_FORMAT_Y16, "GST_VIDEO_FORMAT_Y16", "y16"},
+      {GST_VIDEO_FORMAT_RGB16, "GST_VIDEO_FORMAT_RGB16", "rgb16"},
+      {GST_VIDEO_FORMAT_BGR16, "GST_VIDEO_FORMAT_BGR16", "bgr16"},
+      {GST_VIDEO_FORMAT_RGB15, "GST_VIDEO_FORMAT_RGB15", "rgb15"},
+      {GST_VIDEO_FORMAT_BGR15, "GST_VIDEO_FORMAT_BGR15", "bgr15"},
+      {GST_VIDEO_FORMAT_UYVP, "GST_VIDEO_FORMAT_UYVP", "uyvp"},
+      {GST_VIDEO_FORMAT_A420, "GST_VIDEO_FORMAT_A420", "a420"},
+      {GST_VIDEO_FORMAT_RGB8_PALETTED, "GST_VIDEO_FORMAT_RGB8_PALETTED",
+          "rgb8-paletted"},
+      {GST_VIDEO_FORMAT_YUV9, "GST_VIDEO_FORMAT_YUV9", "yuv9"},
+      {GST_VIDEO_FORMAT_YVU9, "GST_VIDEO_FORMAT_YVU9", "yvu9"},
+      {GST_VIDEO_FORMAT_IYU1, "GST_VIDEO_FORMAT_IYU1", "iyu1"},
+      {GST_VIDEO_FORMAT_ARGB64, "GST_VIDEO_FORMAT_ARGB64", "argb64"},
+      {GST_VIDEO_FORMAT_AYUV64, "GST_VIDEO_FORMAT_AYUV64", "ayuv64"},
+      {GST_VIDEO_FORMAT_r210, "GST_VIDEO_FORMAT_r210", "r210"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstVideoFormat", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_format_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_FORMAT_FLAG_YUV, "GST_VIDEO_FORMAT_FLAG_YUV", "yuv"},
+      {GST_VIDEO_FORMAT_FLAG_RGB, "GST_VIDEO_FORMAT_FLAG_RGB", "rgb"},
+      {GST_VIDEO_FORMAT_FLAG_GRAY, "GST_VIDEO_FORMAT_FLAG_GRAY", "gray"},
+      {GST_VIDEO_FORMAT_FLAG_ALPHA, "GST_VIDEO_FORMAT_FLAG_ALPHA", "alpha"},
+      {GST_VIDEO_FORMAT_FLAG_LE, "GST_VIDEO_FORMAT_FLAG_LE", "le"},
+      {GST_VIDEO_FORMAT_FLAG_PALETTE, "GST_VIDEO_FORMAT_FLAG_PALETTE",
+          "palette"},
+      {GST_VIDEO_FORMAT_FLAG_COMPLEX, "GST_VIDEO_FORMAT_FLAG_COMPLEX",
+          "complex"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoFormatFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_FLAG_NONE, "GST_VIDEO_FLAG_NONE", "none"},
+      {GST_VIDEO_FLAG_INTERLACED, "GST_VIDEO_FLAG_INTERLACED", "interlaced"},
+      {GST_VIDEO_FLAG_TFF, "GST_VIDEO_FLAG_TFF", "tff"},
+      {GST_VIDEO_FLAG_RFF, "GST_VIDEO_FLAG_RFF", "rff"},
+      {GST_VIDEO_FLAG_ONEFIELD, "GST_VIDEO_FLAG_ONEFIELD", "onefield"},
+      {GST_VIDEO_FLAG_TELECINE, "GST_VIDEO_FLAG_TELECINE", "telecine"},
+      {GST_VIDEO_FLAG_PROGRESSIVE, "GST_VIDEO_FLAG_PROGRESSIVE", "progressive"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_flags_register_static ("GstVideoFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_chroma_site_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_CHROMA_SITE_UNKNOWN, "GST_VIDEO_CHROMA_SITE_UNKNOWN",
+          "unknown"},
+      {GST_VIDEO_CHROMA_SITE_NONE, "GST_VIDEO_CHROMA_SITE_NONE", "none"},
+      {GST_VIDEO_CHROMA_SITE_H_COSITED, "GST_VIDEO_CHROMA_SITE_H_COSITED",
+          "h-cosited"},
+      {GST_VIDEO_CHROMA_SITE_V_COSITED, "GST_VIDEO_CHROMA_SITE_V_COSITED",
+          "v-cosited"},
+      {GST_VIDEO_CHROMA_SITE_ALT_LINE, "GST_VIDEO_CHROMA_SITE_ALT_LINE",
+          "alt-line"},
+      {GST_VIDEO_CHROMA_SITE_COSITED, "GST_VIDEO_CHROMA_SITE_COSITED",
+          "cosited"},
+      {GST_VIDEO_CHROMA_SITE_JPEG, "GST_VIDEO_CHROMA_SITE_JPEG", "jpeg"},
+      {GST_VIDEO_CHROMA_SITE_MPEG2, "GST_VIDEO_CHROMA_SITE_MPEG2", "mpeg2"},
+      {GST_VIDEO_CHROMA_SITE_DV, "GST_VIDEO_CHROMA_SITE_DV", "dv"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoChromaSite", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_color_range_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_COLOR_RANGE_UNKNOWN, "GST_VIDEO_COLOR_RANGE_UNKNOWN",
+          "unknown"},
+      {GST_VIDEO_COLOR_RANGE_0_255, "GST_VIDEO_COLOR_RANGE_0_255", "0-255"},
+      {GST_VIDEO_COLOR_RANGE_16_235, "GST_VIDEO_COLOR_RANGE_16_235", "16-235"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoColorRange", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_color_matrix_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_COLOR_MATRIX_UNKNOWN, "GST_VIDEO_COLOR_MATRIX_UNKNOWN",
+          "unknown"},
+      {GST_VIDEO_COLOR_MATRIX_RGB, "GST_VIDEO_COLOR_MATRIX_RGB", "rgb"},
+      {GST_VIDEO_COLOR_MATRIX_BT709, "GST_VIDEO_COLOR_MATRIX_BT709", "bt709"},
+      {GST_VIDEO_COLOR_MATRIX_BT601, "GST_VIDEO_COLOR_MATRIX_BT601", "bt601"},
+      {GST_VIDEO_COLOR_MATRIX_SMPTE240M, "GST_VIDEO_COLOR_MATRIX_SMPTE240M",
+          "smpte240m"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoColorMatrix", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_transfer_function_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_TRANSFER_UNKNOWN, "GST_VIDEO_TRANSFER_UNKNOWN", "unknown"},
+      {GST_VIDEO_TRANSFER_GAMMA10, "GST_VIDEO_TRANSFER_GAMMA10", "gamma10"},
+      {GST_VIDEO_TRANSFER_GAMMA18, "GST_VIDEO_TRANSFER_GAMMA18", "gamma18"},
+      {GST_VIDEO_TRANSFER_GAMMA20, "GST_VIDEO_TRANSFER_GAMMA20", "gamma20"},
+      {GST_VIDEO_TRANSFER_GAMMA22, "GST_VIDEO_TRANSFER_GAMMA22", "gamma22"},
+      {GST_VIDEO_TRANSFER_BT709, "GST_VIDEO_TRANSFER_BT709", "bt709"},
+      {GST_VIDEO_TRANSFER_SMPTE240M, "GST_VIDEO_TRANSFER_SMPTE240M",
+          "smpte240m"},
+      {GST_VIDEO_TRANSFER_SRGB, "GST_VIDEO_TRANSFER_SRGB", "srgb"},
+      {GST_VIDEO_TRANSFER_GAMMA28, "GST_VIDEO_TRANSFER_GAMMA28", "gamma28"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoTransferFunction", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_color_primaries_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_COLOR_PRIMARIES_UNKNOWN, "GST_VIDEO_COLOR_PRIMARIES_UNKNOWN",
+          "unknown"},
+      {GST_VIDEO_COLOR_PRIMARIES_BT709, "GST_VIDEO_COLOR_PRIMARIES_BT709",
+          "bt709"},
+      {GST_VIDEO_COLOR_PRIMARIES_BT470M, "GST_VIDEO_COLOR_PRIMARIES_BT470M",
+          "bt470m"},
+      {GST_VIDEO_COLOR_PRIMARIES_BT470BG, "GST_VIDEO_COLOR_PRIMARIES_BT470BG",
+          "bt470bg"},
+      {GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
+          "GST_VIDEO_COLOR_PRIMARIES_SMPTE170M", "smpte170m"},
+      {GST_VIDEO_COLOR_PRIMARIES_SMPTE240M,
+          "GST_VIDEO_COLOR_PRIMARIES_SMPTE240M", "smpte240m"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoColorPrimaries", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_buffer_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_BUFFER_FLAG_TFF, "GST_VIDEO_BUFFER_FLAG_TFF", "tff"},
+      {GST_VIDEO_BUFFER_FLAG_RFF, "GST_VIDEO_BUFFER_FLAG_RFF", "rff"},
+      {GST_VIDEO_BUFFER_FLAG_ONEFIELD, "GST_VIDEO_BUFFER_FLAG_ONEFIELD",
+          "onefield"},
+      {GST_VIDEO_BUFFER_FLAG_PROGRESSIVE, "GST_VIDEO_BUFFER_FLAG_PROGRESSIVE",
+          "progressive"},
+      {GST_VIDEO_BUFFER_FLAG_LAST, "GST_VIDEO_BUFFER_FLAG_LAST", "last"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoBufferFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/video-enumtypes.h b/win32/common/video-enumtypes.h
new file mode 100644
index 0000000..dd1805d
--- /dev/null
+++ b/win32/common/video-enumtypes.h
@@ -0,0 +1,35 @@
+
+
+
+#ifndef __GST_VIDEO_ENUM_TYPES_H__
+#define __GST_VIDEO_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* enumerations from "video.h" */
+GType gst_video_format_get_type (void);
+#define GST_TYPE_VIDEO_FORMAT (gst_video_format_get_type())
+GType gst_video_format_flags_get_type (void);
+#define GST_TYPE_VIDEO_FORMAT_FLAGS (gst_video_format_flags_get_type())
+GType gst_video_flags_get_type (void);
+#define GST_TYPE_VIDEO_FLAGS (gst_video_flags_get_type())
+GType gst_video_chroma_site_get_type (void);
+#define GST_TYPE_VIDEO_CHROMA_SITE (gst_video_chroma_site_get_type())
+GType gst_video_color_range_get_type (void);
+#define GST_TYPE_VIDEO_COLOR_RANGE (gst_video_color_range_get_type())
+GType gst_video_color_matrix_get_type (void);
+#define GST_TYPE_VIDEO_COLOR_MATRIX (gst_video_color_matrix_get_type())
+GType gst_video_transfer_function_get_type (void);
+#define GST_TYPE_VIDEO_TRANSFER_FUNCTION (gst_video_transfer_function_get_type())
+GType gst_video_color_primaries_get_type (void);
+#define GST_TYPE_VIDEO_COLOR_PRIMARIES (gst_video_color_primaries_get_type())
+GType gst_video_buffer_flags_get_type (void);
+#define GST_TYPE_VIDEO_BUFFER_FLAGS (gst_video_buffer_flags_get_type())
+G_END_DECLS
+
+#endif /* __GST_VIDEO_ENUM_TYPES_H__ */
+
+
+
diff --git a/win32/vs6/grammar.dsp b/win32/vs6/grammar.dsp
new file mode 100644
index 0000000..4d67df1
--- /dev/null
+++ b/win32/vs6/grammar.dsp
@@ -0,0 +1,424 @@
+# Microsoft Developer Studio Project File - Name="grammar" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Generic Project" 0x010a
+
+CFG=grammar - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "grammar.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "grammar.mak" CFG="grammar - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "grammar - Win32 Release" (based on "Win32 (x86) Generic Project")
+!MESSAGE "grammar - Win32 Debug" (based on "Win32 (x86) Generic Project")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+MTL=midl.exe
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+
+!ENDIF 
+
+# Begin Target
+
+# Name "grammar - Win32 Release"
+# Name "grammar - Win32 Debug"
+# Begin Source File
+
+SOURCE="..\..\gst\playback\gstplay-marshal.list"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\..\gst\playback\gstplay-marshal.list"
+
+BuildCmds= \
+	echo #include "glib-object.h" > gstplay-marshal.c.tmp \
+	echo #include "gstplay-marshal.h" >> gstplay-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list >> gstplay-marshal.c.tmp \
+	move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c \
+	echo #include "gst/gstconfig.h" > gstplay-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list >> gstplay-marshal.h.tmp \
+	move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h	
+
+"..\..\gst\playback\gstplay-marshal.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst\playback\gstplay-marshal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\..\gst\playback\gstplay-marshal.list"
+
+BuildCmds= \
+	echo #include "glib-object.h" > gstplay-marshal.c.tmp \
+	echo #include "gstplay-marshal.h" >> gstplay-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list >> gstplay-marshal.c.tmp \
+	move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c \
+	echo #include "gst/gstconfig.h" > gstplay-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list >> gstplay-marshal.h.tmp \
+	move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h 
+
+"..\..\gst\playback\gstplay-marshal.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst\playback\gstplay-marshal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst\tcp\gsttcp-marshal.list"
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\..\gst\tcp\gsttcp-marshal.list"
+
+BuildCmds= \
+	echo #include "glib-object.h" > gsttcp-marshal.c.tmp \
+	echo #include "gsttcp-marshal.h" >> gsttcp-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_tcp_marshal ..\..\gst\tcp\gsttcp-marshal.list >> gsttcp-marshal.c.tmp \
+	move gsttcp-marshal.c.tmp ..\..\gst\tcp\gsttcp-marshal.c \
+	echo #include "gst/gstconfig.h" > gsttcp-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_tcp_marshal ..\..\gst\tcp\gsttcp-marshal.list >> gsttcp-marshal.h.tmp \
+	move gsttcp-marshal.h.tmp ..\..\gst\tcp\gsttcp-marshal.h
+	
+
+"..\..\gst\tcp\gsttcp-marshal.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst\tcp\gsttcp-marshal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\..\gst\tcp\gsttcp-marshal.list"
+
+BuildCmds= \
+	echo #include "glib-object.h" > gsttcp-marshal.c.tmp \
+	echo #include "gsttcp-marshal.h" >> gsttcp-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_tcp_marshal ..\..\gst\tcp\gsttcp-marshal.list >> gsttcp-marshal.c.tmp \
+	move gsttcp-marshal.c.tmp ..\..\gst\tcp\gsttcp-marshal.c \
+	echo #include "gst/gstconfig.h" > gsttcp-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_tcp_marshal ..\..\gst\tcp\gsttcp-marshal.list >> gsttcp-marshal.h.tmp \
+	move gsttcp-marshal.h.tmp ..\..\gst\tcp\gsttcp-marshal.h
+	
+
+"..\..\gst\tcp\gsttcp-marshal.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst\tcp\gsttcp-marshal.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\common\interfaces-enumtypes.c"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\common\interfaces-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\interfaces-enumtypes.h ..\..\gst-libs\gst\interfaces \
+	copy ..\common\interfaces-enumtypes.c ..\..\gst-libs\gst\interfaces
+	
+
+"..\..\gst-libs\gst\interfaces\interfaces-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\interfaces\interfaces-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\common\interfaces-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\interfaces-enumtypes.h ..\..\gst-libs\gst\interfaces \
+	copy ..\common\interfaces-enumtypes.c ..\..\gst-libs\gst\interfaces
+	
+
+"..\..\gst-libs\gst\interfaces\interfaces-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\interfaces\interfaces-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\interfaces-marshal.list"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\..\gst-libs\gst\interfaces\interfaces-marshal.list"
+
+BuildCmds= \
+	echo #include "interfaces-marshal.h" > interfaces-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list >> interfaces-marshal.c.tmp \
+	move interfaces-marshal.c.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.c \
+	echo #include "gst/gstconfig.h" > interfaces-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list >> interfaces-marshal.h.tmp \
+	move interfaces-marshal.h.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.h
+	
+
+"..\..\gst-libs\gst\interfaces\interfaces-marshal.list.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\interfaces\interfaces-marshal.list.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\..\gst-libs\gst\interfaces\interfaces-marshal.list"
+
+BuildCmds= \
+	echo #include "interfaces-marshal.h" > interfaces-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list >> interfaces-marshal.c.tmp \
+	move interfaces-marshal.c.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.c \
+	echo #include "gst/gstconfig.h" > interfaces-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list >> interfaces-marshal.h.tmp \
+	move interfaces-marshal.h.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.h
+	
+
+"..\..\gst-libs\gst\interfaces\interfaces-marshal.list.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\interfaces\interfaces-marshal.list.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\common\audio-enumtypes.c"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\common\audio-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\audio-enumtypes.h ..\..\gst-libs\gst\audio \
+	copy ..\common\audio-enumtypes.c ..\..\gst-libs\gst\audio
+	
+
+"..\..\gst-libs\gst\audio\audio-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\audio\audio-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\common\audio-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\audio-enumtypes.h ..\..\gst-libs\gst\audio \
+	copy ..\common\audio-enumtypes.c ..\..\gst-libs\gst\audio
+	
+
+"..\..\gst-libs\gst\audio\audio-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\audio\audio-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\rtsp-marshal.list"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\..\gst-libs\gst\rtsp\rtsp-marshal.list"
+
+BuildCmds= \
+	echo #include "rtsp-marshal.h" > rtsp-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_rtsp_marshal ..\..\gst-libs\gst\rtsp\rtsp-marshal.list >> rtsp-marshal.c.tmp \
+	move rtsp-marshal.c.tmp ..\..\gst-libs\gst\rtsp\rtsp-marshal.c \
+	echo #include "gst/gstconfig.h" > rtsp-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_rtsp_marshal ..\..\gst-libs\gst\rtsp\rtsp-marshal.list >> rtsp-marshal.h.tmp \
+	move rtsp-marshal.h.tmp ..\..\gst-libs\gst\rtsp\rtsp-marshal.h
+	
+
+"..\..\gst-libs\gst\rtsp\rtsp-marshal.list.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\rtsp\rtsp-marshal.list.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\..\gst-libs\gst\rtsp\rtsp-marshal.list"
+
+BuildCmds= \
+	echo #include "rtsp-marshal.h" > rtsp-marshal.c.tmp \
+	glib-genmarshal --body --prefix=gst_rtsp_marshal ..\..\gst-libs\gst\rtsp\rtsp-marshal.list >> rtsp-marshal.c.tmp \
+	move rtsp-marshal.c.tmp ..\..\gst-libs\gst\rtsp\rtsp-marshal.c \
+	echo #include "gst/gstconfig.h" > rtsp-marshal.h.tmp \
+	glib-genmarshal --header --prefix=gst_rtsp_marshal ..\..\gst-libs\gst\rtsp\rtsp-marshal.list >> rtsp-marshal.h.tmp \
+	move rtsp-marshal.h.tmp ..\..\gst-libs\gst\rtsp\rtsp-marshal.h
+	
+
+"..\..\gst-libs\gst\rtsp\rtsp-marshal.list.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+..\..\gst-libs\gst\rtsp\rtsp-marshal.list.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\common\gstrtsp-enumtypes.c"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\common\gstrtsp-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\gstrtsp-enumtypes.h ..\..\gst-libs\gst\rtsp \
+	copy ..\common\gstrtsp-enumtypes.c ..\..\gst-libs\gst\rtsp
+	
+
+"..\..\gst-libs\gst\rtsp\gstrtsp-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\rtsp\gstrtsp-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\common\gstrtsp-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\gstrtsp-enumtypes.h ..\..\gst-libs\gst\rtsp \
+	copy ..\common\gstrtsp-enumtypes.c ..\..\gst-libs\gst\rtsp
+	
+
+"..\..\gst-libs\gst\rtsp\gstrtsp-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\rtsp\gstrtsp-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE="..\common\pbutils-enumtypes.c"
+
+!IF  "$(CFG)" == "grammar - Win32 Release"
+
+# Begin Custom Build
+InputPath="..\common\pbutils-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\pbutils-enumtypes.h ..\..\gst-libs\gst\pbutils \
+	copy ..\common\pbutils-enumtypes.c ..\..\gst-libs\gst\pbutils
+	
+
+"..\..\gst-libs\gst\pbutils\pbutils-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\pbutils\pbutils-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "grammar - Win32 Debug"
+
+# Begin Custom Build
+InputPath="..\common\pbutils-enumtypes.c"
+
+BuildCmds= \
+	copy ..\common\pbutils-enumtypes.h ..\..\gst-libs\gst\pbutils \
+	copy ..\common\pbutils-enumtypes.c ..\..\gst-libs\gst\pbutils
+	
+
+"..\..\gst-libs\gst\pbutils\pbutils-enumtypes.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+
+"..\..\gst-libs\gst\pbutils\pbutils-enumtypes.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+   $(BuildCmds)
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Target
+# End Project
diff --git a/win32/vs6/gst_plugins_base.dsw b/win32/vs6/gst_plugins_base.dsw
new file mode 100644
index 0000000..a651927
--- /dev/null
+++ b/win32/vs6/gst_plugins_base.dsw
@@ -0,0 +1,428 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "grammar"=".\grammar.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstadder"=".\libgstadder.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstaudio"=".\libgstaudio.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name grammar
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libgstinterfaces
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstaudioconvert"=".\libgstaudioconvert.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstaudiorate"=".\libgstaudiorate.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstaudioresample"=".\libgstaudioresample.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstaudiotestsrc"=".\libgstaudiotestsrc.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstcdda"=".\libgstcdda.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libgsttag
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstdecodebin"=".\libgstdecodebin.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name grammar
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libgstpbutils
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstdecodebin2"=".\libgstdecodebin2.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstfft"=".\libgstfft.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstgdp"=".\libgstgdp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstinterfaces"=".\libgstinterfaces.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name grammar
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstnetbuffer"=".\libgstnetbuffer.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstogg"=".\libgstogg.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libgstriff
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstpbutils"=".\libgstpbutils.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstplaybin"=".\libgstplaybin.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name grammar
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libgstpbutils
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstriff"=".\libgstriff.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstrtp"=".\libgstrtp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstrtsp"=".\libgstrtsp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name grammar
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgstsdp"=".\libgstsdp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstsubparse"=".\libgstsubparse.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgsttag"=".\libgsttag.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgsttheora"=".\libgsttheora.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libgsttag
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libgsttypefindfunctions"=".\libgsttypefindfunctions.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvideo"=".\libgstvideo.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvideorate"=".\libgstvideorate.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvideoscale"=".\libgstvideoscale.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvideotestsrc"=".\libgstvideotestsrc.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvolume"=".\libgstvolume.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libgstvorbis"=".\libgstvorbis.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libgstaudio
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libgsttag
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/win32/vs6/libgstadder.dsp b/win32/vs6/libgstadder.dsp
new file mode 100644
index 0000000..3616c30
--- /dev/null
+++ b/win32/vs6/libgstadder.dsp
@@ -0,0 +1,123 @@
+# Microsoft Developer Studio Project File - Name="libgstadder" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstadder - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstadder.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstadder.mak" CFG="libgstadder - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstadder - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstadder - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstadder - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTADDER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTADDER_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstadder.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstadder - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTADDER_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTADDER_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstadder.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstadder - Win32 Release"
+# Name "libgstadder - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\adder\gstadder.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\adder\gstadder.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudio.dsp b/win32/vs6/libgstaudio.dsp
new file mode 100644
index 0000000..bfd0a8a
--- /dev/null
+++ b/win32/vs6/libgstaudio.dsp
@@ -0,0 +1,207 @@
+# Microsoft Developer Studio Project File - Name="libgstaudio" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudio - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudio.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudio.mak" CFG="libgstaudio - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudio - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudio - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudio - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIO_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "./" /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/audio" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIO_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib /nologo /dll /machine:I386 /out:"Release/libgstaudio-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudio-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudio - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIO_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/audio" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIO_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstinterfaces-0.10.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstaudio-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudio-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudio - Win32 Release"
+# Name "libgstaudio - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\audio.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudioclock.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiofilter.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiofiltertemplate.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiosink.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiosrc.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstbaseaudiosink.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstbaseaudiosrc.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstringbuffer.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstaudio.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\mixerutils.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\audio-enumtypes.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\multichannel.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\audio.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudioclock.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiofilter.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiosink.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstaudiosrc.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstbaseaudiosink.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstbaseaudiosrc.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\gstringbuffer.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\audio-enumtypes.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\audio\multichannel.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudioconvert.dsp b/win32/vs6/libgstaudioconvert.dsp
new file mode 100644
index 0000000..132c297
--- /dev/null
+++ b/win32/vs6/libgstaudioconvert.dsp
@@ -0,0 +1,151 @@
+# Microsoft Developer Studio Project File - Name="libgstaudioconvert" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudioconvert - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioconvert.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioconvert.mak" CFG="libgstaudioconvert - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudioconvert - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudioconvert - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudioconvert - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOCONVERT_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOCONVERT_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstaudio-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudioconvert.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudioconvert - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOCONVERT_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOCONVERT_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstaudio-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudioconvert.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudioconvert - Win32 Release"
+# Name "libgstaudioconvert - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\audioconvert.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\gstaudioconvert.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\gstaudioquantize.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\gstchannelmix.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\plugin.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\audioconvert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\gstaudioconvert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\gstchannelmix.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioconvert\plugin.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudiorate.dsp b/win32/vs6/libgstaudiorate.dsp
new file mode 100644
index 0000000..4487b11
--- /dev/null
+++ b/win32/vs6/libgstaudiorate.dsp
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="libgstaudiorate" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudiorate - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudiorate.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudiorate.mak" CFG="libgstaudiorate - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudiorate - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudiorate - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudiorate - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORATE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORATE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudiorate.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudiorate - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORATE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORATE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudiorate.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudiorate - Win32 Release"
+# Name "libgstaudiorate - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\audiorate\gstaudiorate.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudioresample.dsp b/win32/vs6/libgstaudioresample.dsp
new file mode 100644
index 0000000..a1ca5b0
--- /dev/null
+++ b/win32/vs6/libgstaudioresample.dsp
@@ -0,0 +1,163 @@
+# Microsoft Developer Studio Project File - Name="libgstaudioresample" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudioresample - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioresample.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioresample.mak" CFG="libgstaudioresample - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudioresample - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudioresample - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudioresample - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORESAMPLE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst/audioresample" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORESAMPLE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib liboil-0.3-0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudioresample.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudioresample - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORESAMPLE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst/audioresample" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIORESAMPLE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib liboil-0.3-0.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudioresample.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudioresample - Win32 Release"
+# Name "libgstaudioresample - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\buffer.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\functable.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\gstaudioresample.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\resample.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\resample_chunk.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\resample_functable.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\resample_ref.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\buffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\functable.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\gstaudioresample.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioresample\resample.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudioscale.dsp b/win32/vs6/libgstaudioscale.dsp
new file mode 100644
index 0000000..f6148cc
--- /dev/null
+++ b/win32/vs6/libgstaudioscale.dsp
@@ -0,0 +1,125 @@
+# Microsoft Developer Studio Project File - Name="libgstaudioscale" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudioscale - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioscale.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudioscale.mak" CFG="libgstaudioscale - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudioscale - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudioscale - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudioscale - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOSCALE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../../../gstreamer/win32/common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOSCALE_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudioscale.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudioscale - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOSCALE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../../../gstreamer/win32/common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOSCALE_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudioscale.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudioscale - Win32 Release"
+# Name "libgstaudioscale - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\audioscale\gstaudioscale.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\audioscale\gstaudioscale.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\audioscale\private.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstaudiotestsrc.dsp b/win32/vs6/libgstaudiotestsrc.dsp
new file mode 100644
index 0000000..ed291b3
--- /dev/null
+++ b/win32/vs6/libgstaudiotestsrc.dsp
@@ -0,0 +1,123 @@
+# Microsoft Developer Studio Project File - Name="libgstaudiotestsrc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstaudiotestsrc - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudiotestsrc.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstaudiotestsrc.mak" CFG="libgstaudiotestsrc - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstaudiotestsrc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstaudiotestsrc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstaudiotestsrc - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOTESTSRC_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOTESTSRC_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstaudiotestsrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstaudiotestsrc - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOTESTSRC_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTAUDIOTESTSRC_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstaudiotestsrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstaudiotestsrc - Win32 Release"
+# Name "libgstaudiotestsrc - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\audiotestsrc\gstaudiotestsrc.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\audiotestsrc\gstaudiotestsrc.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstcdda.dsp b/win32/vs6/libgstcdda.dsp
new file mode 100644
index 0000000..744b444
--- /dev/null
+++ b/win32/vs6/libgstcdda.dsp
@@ -0,0 +1,143 @@
+# Microsoft Developer Studio Project File - Name="libgstcdda" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstcdda - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstcdda.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstcdda.mak" CFG="libgstcdda - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstcdda - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstcdda - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstcdda - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTCDDA_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTCDDA_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib /nologo /dll /machine:I386 /out:"Release/libgstcdda-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstcdda-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstcdda - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTCDDA_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTCDDA_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstcdda-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstcdda-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstcdda - Win32 Release"
+# Name "libgstcdda - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\base64.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\gstcddabasesrc.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstcdda.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\sha1.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\base64.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\gstcddabasesrc.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\cdda\sha1.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstdecodebin.dsp b/win32/vs6/libgstdecodebin.dsp
new file mode 100644
index 0000000..bccea4f
--- /dev/null
+++ b/win32/vs6/libgstdecodebin.dsp
@@ -0,0 +1,123 @@
+# Microsoft Developer Studio Project File - Name="libgstdecodebin" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstdecodebin - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstdecodebin.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstdecodebin.mak" CFG="libgstdecodebin - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstdecodebin - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstdecodebin - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstdecodebin - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstdecodebin.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstdecodebin - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstdecodebin.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstdecodebin - Win32 Release"
+# Name "libgstdecodebin - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstdecodebin.c
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst\playback\gstplay-marshal.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstdecodebin2.dsp b/win32/vs6/libgstdecodebin2.dsp
new file mode 100644
index 0000000..72b2d17
--- /dev/null
+++ b/win32/vs6/libgstdecodebin2.dsp
@@ -0,0 +1,135 @@
+# Microsoft Developer Studio Project File - Name="libgstdecodebin2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstdecodebin2 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstdecodebin2.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstdecodebin2.mak" CFG="libgstdecodebin2 - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstdecodebin2 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstdecodebin2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstdecodebin2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN2_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN2_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstdecodebin2.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstdecodebin2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN2_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDECODEBIN2_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstdecodebin2.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstdecodebin2 - Win32 Release"
+# Name "libgstdecodebin2 - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstdecodebin2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstfactorylists.c
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst\playback\gstplay-enum.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst\playback\gstplay-marshal.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gsturidecodebin.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstfft.dsp b/win32/vs6/libgstfft.dsp
new file mode 100644
index 0000000..82e213f
--- /dev/null
+++ b/win32/vs6/libgstfft.dsp
@@ -0,0 +1,167 @@
+# Microsoft Developer Studio Project File - Name="libgstfft" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstfft - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstfft.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstfft.mak" CFG="libgstfft - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstfft - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstfft - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstfft - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFFT_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/interfaces" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFFT_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstfft-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstfft-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstfft - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFFT_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/interfaces" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTFFT_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstfft-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstfft-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstfft - Win32 Release"
+# Name "libgstfft - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\gstfft.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\gstfftf32.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\gstfftf64.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\gstffts16.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\gstffts32.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fft_f32.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fft_f64.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fft_s16.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fft_s32.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fftr_f32.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fftr_f64.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fftr_s16.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\fft\kiss_fftr_s32.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstgdp.dsp b/win32/vs6/libgstgdp.dsp
new file mode 100644
index 0000000..fb375ee
--- /dev/null
+++ b/win32/vs6/libgstgdp.dsp
@@ -0,0 +1,127 @@
+# Microsoft Developer Studio Project File - Name="libgstgdp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstgdp - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstgdp.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstgdp.mak" CFG="libgstgdp - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstgdp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstgdp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstgdp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTGDP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTGDP_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstcontroller-0.10.lib libgstinterfaces-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstdataprotocol-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstgdp.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstgdp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTGDP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTGDP_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstcontroller-0.10.lib libgstinterfaces-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstdataprotocol-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstgdp.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstgdp - Win32 Release"
+# Name "libgstgdp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\gdp\gstgdp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\gdp\gstgdpdepay.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\gdp\gstgdppay.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstinterfaces.dsp b/win32/vs6/libgstinterfaces.dsp
new file mode 100644
index 0000000..5b5596a
--- /dev/null
+++ b/win32/vs6/libgstinterfaces.dsp
@@ -0,0 +1,223 @@
+# Microsoft Developer Studio Project File - Name="libgstinterfaces" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstinterfaces - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstinterfaces.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstinterfaces.mak" CFG="libgstinterfaces - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstinterfaces - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstinterfaces - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstinterfaces - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTINTERFACES_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/interfaces" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTINTERFACES_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstinterfaces-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstinterfaces-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstinterfaces - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTINTERFACES_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/interfaces" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTINTERFACES_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstinterfaces-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstinterfaces-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstinterfaces - Win32 Release"
+# Name "libgstinterfaces - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\colorbalance.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\colorbalancechannel.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\interfaces-enumtypes.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\interfaces-marshal.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstinterfaces.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixer.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixeroptions.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixertrack.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\navigation.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\propertyprobe.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tuner.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tunerchannel.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tunernorm.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\videoorientation.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\xoverlay.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\colorbalance.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\colorbalancechannel.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\interfaces.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixer.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixeroptions.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\mixertrack.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\navigation.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\propertyprobe.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tuner.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tunerchannel.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\tunernorm.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\interfaces\xoverlay.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstnetbuffer.dsp b/win32/vs6/libgstnetbuffer.dsp
new file mode 100644
index 0000000..3111069
--- /dev/null
+++ b/win32/vs6/libgstnetbuffer.dsp
@@ -0,0 +1,127 @@
+# Microsoft Developer Studio Project File - Name="libgstnetbuffer" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstnetbuffer - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstnetbuffer.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstnetbuffer.mak" CFG="libgstnetbuffer - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstnetbuffer - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstnetbuffer - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstnetbuffer - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNETBUFFER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNETBUFFER_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstnetbuffer-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstnetbuffer-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstnetbuffer - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNETBUFFER_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTNETBUFFER_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstnetbuffer-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstnetbuffer-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstnetbuffer - Win32 Release"
+# Name "libgstnetbuffer - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\netbuffer\gstnetbuffer.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstnetbuffer.def
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\net\gstnetbuffer.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstogg.dsp b/win32/vs6/libgstogg.dsp
new file mode 100644
index 0000000..289097c
--- /dev/null
+++ b/win32/vs6/libgstogg.dsp
@@ -0,0 +1,139 @@
+# Microsoft Developer Studio Project File - Name="libgstogg" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstogg - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstogg.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstogg.mak" CFG="libgstogg - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstogg - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstogg - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstogg - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTOGG_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTOGG_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib glib-2.0.lib gobject-2.0.lib ogg.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstogg.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstogg - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTOGG_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTOGG_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib glib-2.0D.lib gobject-2.0D.lib ogg.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstogg.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstogg - Win32 Release"
+# Name "libgstogg - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstogg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstoggaviparse.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstoggdemux.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstoggmux.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstoggparse.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\ogg\gstogmparse.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstpbutils.dsp b/win32/vs6/libgstpbutils.dsp
new file mode 100644
index 0000000..0e944b5
--- /dev/null
+++ b/win32/vs6/libgstpbutils.dsp
@@ -0,0 +1,139 @@
+# Microsoft Developer Studio Project File - Name="libgstpbutils" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstpbutils - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstpbutils.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstpbutils.mak" CFG="libgstpbutils - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstpbutils - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstpbutils - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstpbutils - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPBUTILS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPBUTILS_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstpbutils-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstpbutils-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstpbutils - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPBUTILS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPBUTILS_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstpbutils-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstpbutils-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstpbutils - Win32 Release"
+# Name "libgstpbutils - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\pbutils\descriptions.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\pbutils\install-plugins.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstpbutils.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\pbutils\missing-plugins.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\common\pbutils-enumtypes.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\pbutils\pbutils.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstplaybin.dsp b/win32/vs6/libgstplaybin.dsp
new file mode 100644
index 0000000..722fc0a
--- /dev/null
+++ b/win32/vs6/libgstplaybin.dsp
@@ -0,0 +1,151 @@
+# Microsoft Developer Studio Project File - Name="libgstplaybin" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstplaybin - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstplaybin.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstplaybin.mak" CFG="libgstplaybin - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstplaybin - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstplaybin - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstplaybin - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPLAYBIN_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPLAYBIN_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstplaybin.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstplaybin - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPLAYBIN_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTPLAYBIN_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstpbutils-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstplaybin.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstplaybin - Win32 Release"
+# Name "libgstplaybin - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstfactorylists.c
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst\playback\gstplay-enum.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstplayback.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstplaybasebin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstplaybin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstplaybin2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gstplaysink.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gststreaminfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\playback\gststreamselector.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstriff.dsp b/win32/vs6/libgstriff.dsp
new file mode 100644
index 0000000..0b227ad
--- /dev/null
+++ b/win32/vs6/libgstriff.dsp
@@ -0,0 +1,143 @@
+# Microsoft Developer Studio Project File - Name="libgstriff" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstriff - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstriff.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstriff.mak" CFG="libgstriff - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstriff - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstriff - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstriff - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRIFF_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRIFF_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgsttag-0.10.lib /nologo /dll /machine:I386 /out:"Release/libgstriff-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstriff-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstriff - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRIFF_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRIFF_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgsttag-0.10.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstriff-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstriff-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstriff - Win32 Release"
+# Name "libgstriff - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\common\libgstriff.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff-media.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff-read.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff-ids.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff-media.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\riff\riff-read.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstrtp.dsp b/win32/vs6/libgstrtp.dsp
new file mode 100644
index 0000000..0cfe87b
--- /dev/null
+++ b/win32/vs6/libgstrtp.dsp
@@ -0,0 +1,155 @@
+# Microsoft Developer Studio Project File - Name="libgstrtp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstrtp - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstrtp.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstrtp.mak" CFG="libgstrtp - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstrtp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstrtp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstrtp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTP_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstrtp-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstrtp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstrtp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTP_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstrtp-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstrtp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstrtp - Win32 Release"
+# Name "libgstrtp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstbasertpaudiopayload.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstbasertpdepayload.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstbasertppayload.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstrtcpbuffer.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstrtpbuffer.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstrtppayloads.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstrtp.def
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstbasertpdepayload.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstbasertppayload.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtp\gstrtpbuffer.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstrtsp.dsp b/win32/vs6/libgstrtsp.dsp
new file mode 100644
index 0000000..d8fd438
--- /dev/null
+++ b/win32/vs6/libgstrtsp.dsp
@@ -0,0 +1,195 @@
+# Microsoft Developer Studio Project File - Name="libgstrtsp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstrtsp - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstrtsp.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstrtsp.mak" CFG="libgstrtsp - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstrtsp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstrtsp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstrtsp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTSP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/rtsp" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTSP_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib Ws2_32.lib /nologo /dll /machine:I386 /out:"Release/libgstrtsp-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstrtsp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstrtsp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTSP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/rtsp" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTRTSP_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib Ws2_32.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstrtsp-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstrtsp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstrtsp - Win32 Release"
+# Name "libgstrtsp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\common\gstrtsp-enumtypes.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtsp.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspbase64.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspconnection.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspdefs.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspextension.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspmessage.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtsprange.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtsptransport.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspurl.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstrtsp.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\rtsp-marshal.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspbase64.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspconnection.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspdefs.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspextension.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspmessage.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtsprange.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtsptransport.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\rtsp\gstrtspurl.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstsdp.dsp b/win32/vs6/libgstsdp.dsp
new file mode 100644
index 0000000..0b76921
--- /dev/null
+++ b/win32/vs6/libgstsdp.dsp
@@ -0,0 +1,123 @@
+# Microsoft Developer Studio Project File - Name="libgstsdp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstsdp - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsdp.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsdp.mak" CFG="libgstsdp - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstsdp - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstsdp - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstsdp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSDP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/rtsp" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSDP_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstreamer-0.10.lib libgstbase-0.10.lib Ws2_32.lib /nologo /dll /machine:I386 /out:"Release/libgstsdp-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstsdp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstsdp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSDP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /I "../../gst-libs/gst/rtsp" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSDP_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstreamer-0.10.lib libgstbase-0.10.lib Ws2_32.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstsdp-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstsdp-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstsdp - Win32 Release"
+# Name "libgstsdp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\sdp\gstsdpmessage.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstsdp.def
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstsinesrc.dsp b/win32/vs6/libgstsinesrc.dsp
new file mode 100644
index 0000000..52386ed
--- /dev/null
+++ b/win32/vs6/libgstsinesrc.dsp
@@ -0,0 +1,121 @@
+# Microsoft Developer Studio Project File - Name="libgstsinesrc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstsinesrc - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsinesrc.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsinesrc.mak" CFG="libgstsinesrc - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstsinesrc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstsinesrc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstsinesrc - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSINESRC_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../../../gstreamer/win32/common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSINESRC_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstsinesrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstsinesrc - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSINESRC_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../../../gstreamer/win32/common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSINESRC_EXPORTS" /D "HAVE_CONFIG_H" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstsinesrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstsinesrc - Win32 Release"
+# Name "libgstsinesrc - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\sine\gstsinesrc.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\sine\gstsinesrc.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstsubparse.dsp b/win32/vs6/libgstsubparse.dsp
new file mode 100644
index 0000000..aac5e13
--- /dev/null
+++ b/win32/vs6/libgstsubparse.dsp
@@ -0,0 +1,123 @@
+# Microsoft Developer Studio Project File - Name="libgstsubparse" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstsubparse - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsubparse.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstsubparse.mak" CFG="libgstsubparse - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstsubparse - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstsubparse - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstsubparse - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSUBPARSE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../../../gstreamer/win32/common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSUBPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstsubparse.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstsubparse - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSUBPARSE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTSUBPARSE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstsubparse.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstsubparse - Win32 Release"
+# Name "libgstsubparse - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\subparse\gstsubparse.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\subparse\gstsubparse.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgsttag.dsp b/win32/vs6/libgsttag.dsp
new file mode 100644
index 0000000..07bb70d
--- /dev/null
+++ b/win32/vs6/libgsttag.dsp
@@ -0,0 +1,135 @@
+# Microsoft Developer Studio Project File - Name="libgsttag" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgsttag - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttag.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttag.mak" CFG="libgsttag - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgsttag - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgsttag - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgsttag - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTAGEDIT_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTAGEDIT_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgsttag-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgsttag-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgsttag - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTAGEDIT_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTAGEDIT_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgsttag-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgsttag-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgsttag - Win32 Release"
+# Name "libgsttag - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\tag\gstid3tag.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\tag\gsttagdemux.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\tag\gstvorbistag.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgsttag.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\tag\tags.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgsttheora.dsp b/win32/vs6/libgsttheora.dsp
new file mode 100644
index 0000000..b36eed5
--- /dev/null
+++ b/win32/vs6/libgsttheora.dsp
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="libgsttheora" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgsttheora - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttheora.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttheora.mak" CFG="libgsttheora - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgsttheora - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgsttheora - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgsttheora - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTHEORA_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTHEORA_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib theora_static.lib ogg.lib libgsttag-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgsttheora.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgsttheora - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTHEORA_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTHEORA_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgsttag-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib theora_static.lib ogg.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgsttheora.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgsttheora - Win32 Release"
+# Name "libgsttheora - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\ext\theora\theora.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\theora\theoradec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\theora\theoraenc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\theora\theoraparse.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgsttypefindfunctions.dsp b/win32/vs6/libgsttypefindfunctions.dsp
new file mode 100644
index 0000000..043d9de
--- /dev/null
+++ b/win32/vs6/libgsttypefindfunctions.dsp
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="libgsttypefindfunctions" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgsttypefindfunctions - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttypefindfunctions.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgsttypefindfunctions.mak" CFG="libgsttypefindfunctions - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgsttypefindfunctions - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgsttypefindfunctions - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgsttypefindfunctions - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTYPEFINDFUNCTIONS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTYPEFINDFUNCTIONS_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgsttypefindfunctions.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgsttypefindfunctions - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTYPEFINDFUNCTIONS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTTYPEFINDFUNCTIONS_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgsttypefindfunctions.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgsttypefindfunctions - Win32 Release"
+# Name "libgsttypefindfunctions - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\typefind\gsttypefindfunctions.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvideo.dsp b/win32/vs6/libgstvideo.dsp
new file mode 100644
index 0000000..2560e15
--- /dev/null
+++ b/win32/vs6/libgstvideo.dsp
@@ -0,0 +1,143 @@
+# Microsoft Developer Studio Project File - Name="libgstvideo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvideo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideo.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideo.mak" CFG="libgstvideo - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvideo - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvideo - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvideo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEO_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEO_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /out:"Release/libgstvideo-0.10.dll" /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvideo-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\bin
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvideo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEO_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEO_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstvideo-0.10.dll" /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvideo-0.10.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\bin
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvideo - Win32 Release"
+# Name "libgstvideo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\gstvideofilter.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\gstvideosink.c"
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\libgstvideo.def
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\video.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\gstvideofilter.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\video.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\gst-libs\gst\video\videosink.h"
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvideorate.dsp b/win32/vs6/libgstvideorate.dsp
new file mode 100644
index 0000000..17f3e42
--- /dev/null
+++ b/win32/vs6/libgstvideorate.dsp
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="libgstvideorate" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvideorate - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideorate.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideorate.mak" CFG="libgstvideorate - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvideorate - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvideorate - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvideorate - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEORATE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEORATE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvideorate.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvideorate - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEORATE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEORATE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvideorate.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvideorate - Win32 Release"
+# Name "libgstvideorate - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\videorate\gstvideorate.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvideoscale.dsp b/win32/vs6/libgstvideoscale.dsp
new file mode 100644
index 0000000..ac69f82
--- /dev/null
+++ b/win32/vs6/libgstvideoscale.dsp
@@ -0,0 +1,143 @@
+# Microsoft Developer Studio Project File - Name="libgstvideoscale" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvideoscale - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideoscale.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideoscale.mak" CFG="libgstvideoscale - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvideoscale - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvideoscale - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvideoscale - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOSCALE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOSCALE_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstvideo-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib liboil-0.3-0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvideoscale.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvideoscale - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOSCALE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOSCALE_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstvideo-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib liboil-0.3-0.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvideoscale.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvideoscale - Win32 Release"
+# Name "libgstvideoscale - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\gstvideoscale.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\vs_4tap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\vs_image.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\vs_scanline.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\gstvideoscale.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\vs_image.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videoscale\vs_scanline.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvideotestsrc.dsp b/win32/vs6/libgstvideotestsrc.dsp
new file mode 100644
index 0000000..cb4947d
--- /dev/null
+++ b/win32/vs6/libgstvideotestsrc.dsp
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="libgstvideotestsrc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvideotestsrc - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideotestsrc.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvideotestsrc.mak" CFG="libgstvideotestsrc - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvideotestsrc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvideotestsrc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvideotestsrc - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOTESTSRC_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../.." /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOTESTSRC_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib liboil-0.3-0.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvideotestsrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvideotestsrc - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOTESTSRC_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer/win32" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVIDEOTESTSRC_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0D.lib gobject-2.0D.lib liboil-0.3-0.lib /nologo /dll /profile /debug /machine:I386 /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvideotestsrc.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvideotestsrc - Win32 Release"
+# Name "libgstvideotestsrc - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\videotestsrc\gstvideotestsrc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videotestsrc\videotestsrc.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\gst\videotestsrc\gstvideotestsrc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\gst\videotestsrc\videotestsrc.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvolume.dsp b/win32/vs6/libgstvolume.dsp
new file mode 100644
index 0000000..7f6a0ef
--- /dev/null
+++ b/win32/vs6/libgstvolume.dsp
@@ -0,0 +1,119 @@
+# Microsoft Developer Studio Project File - Name="libgstvolume" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvolume - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvolume.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvolume.mak" CFG="libgstvolume - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvolume - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvolume - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvolume - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVOLUME_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVOLUME_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 glib-2.0.lib gobject-2.0.lib libgstcontroller-0.10.lib libgstinterfaces-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib liboil-0.3-0.lib libgstaudio-0.10.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvolume.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvolume - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVOLUME_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVOLUME_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glib-2.0D.lib gobject-2.0D.lib libgstcontroller-0.10.lib libgstinterfaces-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib liboil-0.3-0.lib libgstaudio-0.10.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvolume.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvolume - Win32 Release"
+# Name "libgstvolume - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gst\volume\gstvolume.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs6/libgstvorbis.dsp b/win32/vs6/libgstvorbis.dsp
new file mode 100644
index 0000000..954038e
--- /dev/null
+++ b/win32/vs6/libgstvorbis.dsp
@@ -0,0 +1,147 @@
+# Microsoft Developer Studio Project File - Name="libgstvorbis" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=libgstvorbis - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvorbis.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libgstvorbis.mak" CFG="libgstvorbis - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libgstvorbis - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libgstvorbis - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libgstvorbis - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVORBIS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVORBIS_EXPORTS" /D "HAVE_CONFIG_H" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "NDEBUG"
+# ADD RSC /l 0x40c /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib libgstaudio-0.10.lib glib-2.0.lib gobject-2.0.lib vorbis.lib ogg.lib /nologo /dll /machine:I386 /libpath:"../../../gstreamer/win32/vs6/release" /libpath:"./release"
+# Begin Special Build Tool
+TargetPath=.\Release\libgstvorbis.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "libgstvorbis - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVORBIS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "../../gst-libs" /I "../../../gstreamer" /I "../common" /I "../../../gstreamer/libs" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTVORBIS_EXPORTS" /D "HAVE_CONFIG_H" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40c /d "_DEBUG"
+# ADD RSC /l 0x40c /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libgstreamer-0.10.lib libgstbase-0.10.lib libgsttag-0.10.lib libgstaudio-0.10.lib glib-2.0D.lib gobject-2.0D.lib vorbis.lib ogg.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"../../../gstreamer/win32/vs6/debug" /libpath:"./debug"
+# Begin Special Build Tool
+TargetPath=.\Debug\libgstvorbis.dll
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libgstvorbis - Win32 Release"
+# Name "libgstvorbis - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbis.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisdec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisenc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisparse.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbistag.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisdec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisenc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\ext\vorbis\vorbisparse.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/win32/vs8/gst-plugins-base.sln b/win32/vs8/gst-plugins-base.sln
new file mode 100644
index 0000000..d8a85f1
--- /dev/null
+++ b/win32/vs8/gst-plugins-base.sln
@@ -0,0 +1,175 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual C++ Express 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstriff", "libgstriff.vcproj", "{3D36330F-1F68-44F6-A712-803E819A3DCD}"
+	ProjectSection(ProjectDependencies) = postProject
+		{BD17F145-422C-4EC0-A756-C7675A5626B2} = {BD17F145-422C-4EC0-A756-C7675A5626B2}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstaudio", "libgstaudio.vcproj", "{BD17F145-422C-4EC0-A756-C7675A5626B2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstadder", "libgstadder.vcproj", "{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstaudioconvert", "libgstaudioconvert.vcproj", "{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}"
+	ProjectSection(ProjectDependencies) = postProject
+		{BD17F145-422C-4EC0-A756-C7675A5626B2} = {BD17F145-422C-4EC0-A756-C7675A5626B2}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstaudiorate", "libgstaudiorate.vcproj", "{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstaudioresample", "libgstaudioresample.vcproj", "{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstaudiotestsrc", "libgstaudiotestsrc.vcproj", "{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstplaybin", "libgstplaybin.vcproj", "{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{F7558C2A-C1BC-453C-8FDE-84F33DB73915} = {F7558C2A-C1BC-453C-8FDE-84F33DB73915}
+		{80270384-C551-471F-86C2-D80FE61D9883} = {80270384-C551-471F-86C2-D80FE61D9883}
+		{EA99F8DE-660D-42E9-B14D-08F34FA45AD1} = {EA99F8DE-660D-42E9-B14D-08F34FA45AD1}
+		{0969BEF1-77F5-468F-9497-8470FDEC615A} = {0969BEF1-77F5-468F-9497-8470FDEC615A}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsttypefind", "libgsttypefind.vcproj", "{F7558C2A-C1BC-453C-8FDE-84F33DB73915}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvideorate", "libgstvideorate.vcproj", "{84F3B76C-4733-4032-B51E-F8E71022AFE6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvideoscale", "libgstvideoscale.vcproj", "{557CB36F-7F92-4B43-973D-05C6BF0A6414}"
+	ProjectSection(ProjectDependencies) = postProject
+		{1975AEE8-05C5-42DE-8A8B-620168F9C1C9} = {1975AEE8-05C5-42DE-8A8B-620168F9C1C9}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvideotestsrc", "libgstvideotestsrc.vcproj", "{7586DFA1-F847-4BEF-9105-724DD9F12C2A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvolume", "libgstvolume.vcproj", "{80270384-C551-471F-86C2-D80FE61D9883}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4} = {CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdecodebin", "libgstdecodebin.vcproj", "{0969BEF1-77F5-468F-9497-8470FDEC615A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstinterfaces", "libgstinterfaces.vcproj", "{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstsubparse", "libgstsubparse.vcproj", "{C41E324E-03FD-4483-92B1-B50F6E3B6B82}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsttcp", "libgsttcp.vcproj", "{40412A73-43D3-4F1F-9078-DBD76705767D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvorbis", "libgstvorbis.vcproj", "{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}"
+	ProjectSection(ProjectDependencies) = postProject
+		{BD17F145-422C-4EC0-A756-C7675A5626B2} = {BD17F145-422C-4EC0-A756-C7675A5626B2}
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E} = {626AF6BD-0AAB-4019-929A-2DB5CAD0419E}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstogg", "libgstogg.vcproj", "{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{3D36330F-1F68-44F6-A712-803E819A3DCD} = {3D36330F-1F68-44F6-A712-803E819A3DCD}
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E} = {626AF6BD-0AAB-4019-929A-2DB5CAD0419E}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsttheora", "libgsttheora.vcproj", "{AB7AD55A-A521-42F2-A953-623E5F059C1A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E} = {626AF6BD-0AAB-4019-929A-2DB5CAD0419E}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsttag", "libgsttag.vcproj", "{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstvideo", "libgstvideo.vcproj", "{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3D36330F-1F68-44F6-A712-803E819A3DCD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3D36330F-1F68-44F6-A712-803E819A3DCD}.Debug|Win32.Build.0 = Debug|Win32
+		{3D36330F-1F68-44F6-A712-803E819A3DCD}.Release|Win32.ActiveCfg = Debug|Win32
+		{3D36330F-1F68-44F6-A712-803E819A3DCD}.Release|Win32.Build.0 = Debug|Win32
+		{BD17F145-422C-4EC0-A756-C7675A5626B2}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BD17F145-422C-4EC0-A756-C7675A5626B2}.Debug|Win32.Build.0 = Debug|Win32
+		{BD17F145-422C-4EC0-A756-C7675A5626B2}.Release|Win32.ActiveCfg = Debug|Win32
+		{BD17F145-422C-4EC0-A756-C7675A5626B2}.Release|Win32.Build.0 = Debug|Win32
+		{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}.Debug|Win32.Build.0 = Debug|Win32
+		{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}.Release|Win32.ActiveCfg = Debug|Win32
+		{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}.Release|Win32.Build.0 = Debug|Win32
+		{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}.Debug|Win32.Build.0 = Debug|Win32
+		{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}.Release|Win32.ActiveCfg = Debug|Win32
+		{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}.Release|Win32.Build.0 = Debug|Win32
+		{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}.Debug|Win32.Build.0 = Debug|Win32
+		{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}.Release|Win32.ActiveCfg = Debug|Win32
+		{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}.Release|Win32.Build.0 = Debug|Win32
+		{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}.Debug|Win32.Build.0 = Debug|Win32
+		{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}.Release|Win32.ActiveCfg = Debug|Win32
+		{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}.Release|Win32.Build.0 = Debug|Win32
+		{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}.Debug|Win32.Build.0 = Debug|Win32
+		{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}.Release|Win32.ActiveCfg = Debug|Win32
+		{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}.Release|Win32.Build.0 = Debug|Win32
+		{BE2600A9-5BEB-42D9-8F13-FD38FCF5B801}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BE2600A9-5BEB-42D9-8F13-FD38FCF5B801}.Debug|Win32.Build.0 = Debug|Win32
+		{BE2600A9-5BEB-42D9-8F13-FD38FCF5B801}.Release|Win32.ActiveCfg = Debug|Win32
+		{BE2600A9-5BEB-42D9-8F13-FD38FCF5B801}.Release|Win32.Build.0 = Debug|Win32
+		{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}.Debug|Win32.Build.0 = Debug|Win32
+		{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}.Release|Win32.ActiveCfg = Debug|Win32
+		{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}.Release|Win32.Build.0 = Debug|Win32
+		{F7558C2A-C1BC-453C-8FDE-84F33DB73915}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F7558C2A-C1BC-453C-8FDE-84F33DB73915}.Debug|Win32.Build.0 = Debug|Win32
+		{F7558C2A-C1BC-453C-8FDE-84F33DB73915}.Release|Win32.ActiveCfg = Debug|Win32
+		{F7558C2A-C1BC-453C-8FDE-84F33DB73915}.Release|Win32.Build.0 = Debug|Win32
+		{84F3B76C-4733-4032-B51E-F8E71022AFE6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{84F3B76C-4733-4032-B51E-F8E71022AFE6}.Debug|Win32.Build.0 = Debug|Win32
+		{84F3B76C-4733-4032-B51E-F8E71022AFE6}.Release|Win32.ActiveCfg = Debug|Win32
+		{84F3B76C-4733-4032-B51E-F8E71022AFE6}.Release|Win32.Build.0 = Debug|Win32
+		{557CB36F-7F92-4B43-973D-05C6BF0A6414}.Debug|Win32.ActiveCfg = Debug|Win32
+		{557CB36F-7F92-4B43-973D-05C6BF0A6414}.Debug|Win32.Build.0 = Debug|Win32
+		{557CB36F-7F92-4B43-973D-05C6BF0A6414}.Release|Win32.ActiveCfg = Debug|Win32
+		{557CB36F-7F92-4B43-973D-05C6BF0A6414}.Release|Win32.Build.0 = Debug|Win32
+		{7586DFA1-F847-4BEF-9105-724DD9F12C2A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7586DFA1-F847-4BEF-9105-724DD9F12C2A}.Debug|Win32.Build.0 = Debug|Win32
+		{7586DFA1-F847-4BEF-9105-724DD9F12C2A}.Release|Win32.ActiveCfg = Debug|Win32
+		{7586DFA1-F847-4BEF-9105-724DD9F12C2A}.Release|Win32.Build.0 = Debug|Win32
+		{80270384-C551-471F-86C2-D80FE61D9883}.Debug|Win32.ActiveCfg = Debug|Win32
+		{80270384-C551-471F-86C2-D80FE61D9883}.Debug|Win32.Build.0 = Debug|Win32
+		{80270384-C551-471F-86C2-D80FE61D9883}.Release|Win32.ActiveCfg = Debug|Win32
+		{80270384-C551-471F-86C2-D80FE61D9883}.Release|Win32.Build.0 = Debug|Win32
+		{0969BEF1-77F5-468F-9497-8470FDEC615A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0969BEF1-77F5-468F-9497-8470FDEC615A}.Debug|Win32.Build.0 = Debug|Win32
+		{0969BEF1-77F5-468F-9497-8470FDEC615A}.Release|Win32.ActiveCfg = Debug|Win32
+		{0969BEF1-77F5-468F-9497-8470FDEC615A}.Release|Win32.Build.0 = Debug|Win32
+		{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}.Debug|Win32.Build.0 = Debug|Win32
+		{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}.Release|Win32.ActiveCfg = Debug|Win32
+		{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}.Release|Win32.Build.0 = Debug|Win32
+		{C41E324E-03FD-4483-92B1-B50F6E3B6B82}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C41E324E-03FD-4483-92B1-B50F6E3B6B82}.Release|Win32.ActiveCfg = Debug|Win32
+		{40412A73-43D3-4F1F-9078-DBD76705767D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{40412A73-43D3-4F1F-9078-DBD76705767D}.Release|Win32.ActiveCfg = Debug|Win32
+		{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}.Debug|Win32.Build.0 = Debug|Win32
+		{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}.Release|Win32.ActiveCfg = Debug|Win32
+		{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}.Release|Win32.Build.0 = Debug|Win32
+		{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}.Debug|Win32.Build.0 = Debug|Win32
+		{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}.Release|Win32.ActiveCfg = Debug|Win32
+		{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}.Release|Win32.Build.0 = Debug|Win32
+		{AB7AD55A-A521-42F2-A953-623E5F059C1A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{AB7AD55A-A521-42F2-A953-623E5F059C1A}.Debug|Win32.Build.0 = Debug|Win32
+		{AB7AD55A-A521-42F2-A953-623E5F059C1A}.Release|Win32.ActiveCfg = Debug|Win32
+		{AB7AD55A-A521-42F2-A953-623E5F059C1A}.Release|Win32.Build.0 = Debug|Win32
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}.Debug|Win32.Build.0 = Debug|Win32
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}.Release|Win32.ActiveCfg = Debug|Win32
+		{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}.Release|Win32.Build.0 = Debug|Win32
+		{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}.Debug|Win32.Build.0 = Debug|Win32
+		{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}.Release|Win32.ActiveCfg = Debug|Win32
+		{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}.Release|Win32.Build.0 = Debug|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/win32/vs8/libgstadder.vcproj b/win32/vs8/libgstadder.vcproj
new file mode 100644
index 0000000..e582576
--- /dev/null
+++ b/win32/vs8/libgstadder.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstadder"
+	ProjectGUID="{E54E1872-C90A-4FF8-A4F4-27C3F8750D44}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTADDER_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstadder.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTADDER_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstadder.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\adder\gstadder.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstaudio.vcproj b/win32/vs8/libgstaudio.vcproj
new file mode 100644
index 0000000..6d320b0
--- /dev/null
+++ b/win32/vs8/libgstaudio.vcproj
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstaudio"
+	ProjectGUID="{BD17F145-422C-4EC0-A756-C7675A5626B2}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="copy /y ..\common\audio-enumtypes.h ..\..\gst-libs\gst\audio&#x0D;&#x0A;copy /y ..\common\audio-enumtypes.c ..\..\gst-libs\gst\audio&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common;&quot;../../gst-libs/gst/audio&quot;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIO_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudio-0.10.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstaudio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\bin"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="copy /y ..\common\audio-enumtypes.h ..\..\gst-libs\gst\audio&#x0D;&#x0A;copy /y ..\common\audio-enumtypes.c ..\..\gst-libs\gst\audio&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common;&quot;../../gst-libs/gst/audio&quot;"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIO_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudio-0.10.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstaudio.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\bin"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\audio.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstaudioclock.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstaudiofilter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstaudiofiltertemplate.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstaudiosink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstaudiosrc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstbaseaudiosink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstbaseaudiosrc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\gstringbuffer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\audio-enumtypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\audio\multichannel.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\common\libgstaudio.def"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstaudioconvert.vcproj b/win32/vs8/libgstaudioconvert.vcproj
new file mode 100644
index 0000000..037311c
--- /dev/null
+++ b/win32/vs8/libgstaudioconvert.vcproj
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstaudioconvert"
+	ProjectGUID="{EA99F8DE-660D-42E9-B14D-08F34FA45AD1}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIOCONVERT_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudioconvert.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIOCONVERT_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudioconvert.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\audioconvert\audioconvert.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioconvert\gstaudioconvert.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioconvert\gstchannelmix.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioconvert\plugin.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstaudiorate.vcproj b/win32/vs8/libgstaudiorate.vcproj
new file mode 100644
index 0000000..ac6acd7
--- /dev/null
+++ b/win32/vs8/libgstaudiorate.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstaudiorate"
+	ProjectGUID="{C51F9363-7DC1-40F7-84D3-C9D4FD67A3CA}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIORATE_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudiorate.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIORATE_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudiorate.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\audiorate\gstaudiorate.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstaudioresample.vcproj b/win32/vs8/libgstaudioresample.vcproj
new file mode 100644
index 0000000..0f9c62e
--- /dev/null
+++ b/win32/vs8/libgstaudioresample.vcproj
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstaudioresample"
+	ProjectGUID="{0EE3173E-FCD3-4EC6-A28F-5AE5CE7196AC}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common;../../gst/audioresample"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIORESAMPLE_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="liboil-0.3-0.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudioresample.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common;../../gst/audioresample"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIORESAMPLE_EXPORTS;HAVE_CONFIG_H;_USE_MATH_DEFINES"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="liboil-0.3-0.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudioresample.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\audioresample\buffer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\functable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\gstaudioresample.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\resample.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\resample_chunk.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\resample_functable.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\audioresample\resample_ref.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstaudiotestsrc.vcproj b/win32/vs8/libgstaudiotestsrc.vcproj
new file mode 100644
index 0000000..9bcf568
--- /dev/null
+++ b/win32/vs8/libgstaudiotestsrc.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstaudiotestsrc"
+	ProjectGUID="{B5CDFF9E-28E0-4915-8C3E-95EDAE2D9DE3}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIOTESTSRC_EXPORTS;_USE_MATH_DEFINES;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudiotestsrc.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTAUDIOTESTSRC_EXPORTS;_USE_MATH_DEFINES;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstaudiotestsrc.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\audiotestsrc\gstaudiotestsrc.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstdecodebin.vcproj b/win32/vs8/libgstdecodebin.vcproj
new file mode 100644
index 0000000..7f5332f
--- /dev/null
+++ b/win32/vs8/libgstdecodebin.vcproj
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstdecodebin"
+	ProjectGUID="{0969BEF1-77F5-468F-9497-8470FDEC615A}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst\playback\gstplay-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;glib-object.h&quot; &gt; gstplay-marshal.c.tmp&#x0D;&#x0A;echo #include &quot;gstplay-marshal.h&quot; &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst\playback\gstplay-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; gstplay-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.h.tmp&#x0D;&#x0A;move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTDECODEBIN_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstdecodebin.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst\playback\gstplay-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;glib-object.h&quot; &gt; gstplay-marshal.c.tmp&#x0D;&#x0A;echo #include &quot;gstplay-marshal.h&quot; &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst\playback\gstplay-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; gstplay-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.h.tmp&#x0D;&#x0A;move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTDECODEBIN_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstdecodebin.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\playback\gstdecodebin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\playback\gstplay-marshal.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstinterfaces.vcproj b/win32/vs8/libgstinterfaces.vcproj
new file mode 100644
index 0000000..10e8816
--- /dev/null
+++ b/win32/vs8/libgstinterfaces.vcproj
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstinterfaces"
+	ProjectGUID="{CF1687EC-9097-4A86-B7FB-C1ECF9E27EA4}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst-libs\gst\interfaces\interfaces-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;interfaces-marshal.h&quot; &gt;&gt; interfaces-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list &gt;&gt; interfaces-marshal.c.tmp&#x0D;&#x0A;move interfaces-marshal.c.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst-libs\gst\interfaces\interfaces-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; interfaces-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list &gt;&gt; interfaces-marshal.h.tmp&#x0D;&#x0A;move interfaces-marshal.h.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;copy /y ..\common\interfaces-enumtypes.h ..\..\gst-libs\gst\interfaces&#x0D;&#x0A;copy /y ..\common\interfaces-enumtypes.c ..\..\gst-libs\gst\interfaces&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTINTERFACES_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstinterfaces-0.10.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstinterfaces.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/libgstinterfaces-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\bin"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst-libs\gst\interfaces\interfaces-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;interfaces-marshal.h&quot; &gt;&gt; interfaces-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list &gt;&gt; interfaces-marshal.c.tmp&#x0D;&#x0A;move interfaces-marshal.c.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst-libs\gst\interfaces\interfaces-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; interfaces-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_interfaces_marshal ..\..\gst-libs\gst\interfaces\interfaces-marshal.list &gt;&gt; interfaces-marshal.h.tmp&#x0D;&#x0A;move interfaces-marshal.h.tmp ..\..\gst-libs\gst\interfaces\interfaces-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;copy /y ..\common\interfaces-enumtypes.h ..\..\gst-libs\gst\interfaces&#x0D;&#x0A;copy /y ..\common\interfaces-enumtypes.c ..\..\gst-libs\gst\interfaces&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTINTERFACES_EXPORTS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstinterfaces-0.10.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstinterfaces.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/libgstinterfaces-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\bin"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\colorbalance.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\colorbalancechannel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\interfaces-enumtypes.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\interfaces-marshal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\mixer.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\mixeroptions.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\mixertrack.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\navigation.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\propertyprobe.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\tuner.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\tunerchannel.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\tunernorm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\interfaces\xoverlay.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\common\libgstinterfaces.def"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstogg.vcproj b/win32/vs8/libgstogg.vcproj
new file mode 100644
index 0000000..f6b169b
--- /dev/null
+++ b/win32/vs8/libgstogg.vcproj
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstogg"
+	ProjectGUID="{51E1F9C4-091E-43A0-97C1-E1B68700A5AF}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBOGG_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libogg.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstogg.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBOGG_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libogg.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstogg.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\ext\ogg\gstogg.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\ogg\gstoggaviparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\ogg\gstoggdemux.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\ogg\gstoggmux.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\ogg\gstoggparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\ogg\gstogmparse.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstplaybin.vcproj b/win32/vs8/libgstplaybin.vcproj
new file mode 100644
index 0000000..d490bf6
--- /dev/null
+++ b/win32/vs8/libgstplaybin.vcproj
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstplaybin"
+	ProjectGUID="{7B296C12-D728-4CD8-8CF7-B8D7A433F85C}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst\playback\gstplay-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;glib-object.h&quot; &gt; gstplay-marshal.c.tmp&#x0D;&#x0A;echo #include &quot;gstplay-marshal.h&quot; &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst\playback\gstplay-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; gstplay-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.h.tmp&#x0D;&#x0A;move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTPLAYBIN_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstplaybin.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+				CommandLine="if exist ..\..\gst\playback\gstplay-marshal.c goto HEADER&#x0D;&#x0A;echo #include &quot;glib-object.h&quot; &gt; gstplay-marshal.c.tmp&#x0D;&#x0A;echo #include &quot;gstplay-marshal.h&quot; &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;glib-genmarshal --body --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.c.tmp&#x0D;&#x0A;move gstplay-marshal.c.tmp ..\..\gst\playback\gstplay-marshal.c&#x0D;&#x0A;:HEADER&#x0D;&#x0A;if exist ..\..\gst\playback\gstplay-marshal.h goto END&#x0D;&#x0A;echo #include &quot;gst/gstconfig.h&quot; &gt; gstplay-marshal.h.tmp&#x0D;&#x0A;glib-genmarshal --header --prefix=gst_play_marshal ..\..\gst\playback\gstplay-marshal.list &gt;&gt; gstplay-marshal.h.tmp&#x0D;&#x0A;move gstplay-marshal.h.tmp ..\..\gst\playback\gstplay-marshal.h&#x0D;&#x0A;:END&#x0D;&#x0A;"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTPLAYBIN_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstplaybin.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\playback\gstplay-marshal.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\playback\gstplaybasebin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\playback\gstplaybin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\playback\gststreaminfo.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\playback\gststreamselector.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstriff.vcproj b/win32/vs8/libgstriff.vcproj
new file mode 100644
index 0000000..232da11
--- /dev/null
+++ b/win32/vs8/libgstriff.vcproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstriff"
+	ProjectGUID="{3D36330F-1F68-44F6-A712-803E819A3DCD}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer,../../gst-libs"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTRIFF_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstriff-0.10.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstriff.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/libgstriff-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\bin"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer,../../gst-libs"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTRIFF_EXPORTS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstriff-0.10.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstriff.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/libgstriff-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\bin"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst-libs\gst\riff\riff-media.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\riff\riff-read.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\riff\riff.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\common\libgstriff.def"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstsubparse.vcproj b/win32/vs8/libgstsubparse.vcproj
new file mode 100644
index 0000000..3bc1c4f
--- /dev/null
+++ b/win32/vs8/libgstsubparse.vcproj
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstsubparse"
+	ProjectGUID="{C41E324E-03FD-4483-92B1-B50F6E3B6B82}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;libgstsubparse_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/libgstsubparse.dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=""
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;libgstsubparse_EXPORTS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/libgstsubparse.dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\subparse\gstsubparse.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgsttag.vcproj b/win32/vs8/libgsttag.vcproj
new file mode 100644
index 0000000..878b10c
--- /dev/null
+++ b/win32/vs8/libgsttag.vcproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgsttag"
+	ProjectGUID="{626AF6BD-0AAB-4019-929A-2DB5CAD0419E}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer,../../gst-libs,../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTTAG_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttag-0.10.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgsttag.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/libgsttag-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\bin"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer,../../gst-libs,../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTTAG_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttag-0.10.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgsttag.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/libgsttag-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\bin"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst-libs\gst\tag\gstid3tag.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\tag\gstvorbistag.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\tag\tags.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\common\libgsttag.def"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgsttcp.vcproj b/win32/vs8/libgsttcp.vcproj
new file mode 100644
index 0000000..6600730
--- /dev/null
+++ b/win32/vs8/libgsttcp.vcproj
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgsttcp"
+	ProjectGUID="{40412A73-43D3-4F1F-9078-DBD76705767D}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../gst-libs"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;libgsttcp_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/libgsttcp.dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../gst-libs"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;libgsttcp_EXPORTS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile="$(OutDir)/libgsttcp.dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\tcp\fdsetstress.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gstfdset.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gstmultifdsink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcp.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcpclientsink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcpclientsrc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcpplugin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcpserversink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\tcp\gsttcpserversrc.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgsttheora.vcproj b/win32/vs8/libgsttheora.vcproj
new file mode 100644
index 0000000..c0b7dec
--- /dev/null
+++ b/win32/vs8/libgsttheora.vcproj
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgsttheora"
+	ProjectGUID="{AB7AD55A-A521-42F2-A953-623E5F059C1A}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTTHEORA_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libtheora.lib libogg.lib libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttheora.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTTHEORA_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libtheora.lib libogg.lib libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttheora.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\ext\theora\theora.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\theora\theoradec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\theora\theoraenc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\theora\theoraparse.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgsttypefind.vcproj b/win32/vs8/libgsttypefind.vcproj
new file mode 100644
index 0000000..1c19e41
--- /dev/null
+++ b/win32/vs8/libgsttypefind.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgsttypefind"
+	ProjectGUID="{F7558C2A-C1BC-453C-8FDE-84F33DB73915}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTTYPEFIND_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttypefind.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTTYPEFIND_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgsttypefind.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\typefind\gsttypefindfunctions.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvideo.vcproj b/win32/vs8/libgstvideo.vcproj
new file mode 100644
index 0000000..4fa89d6
--- /dev/null
+++ b/win32/vs8/libgstvideo.vcproj
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstvideo"
+	ProjectGUID="{1975AEE8-05C5-42DE-8A8B-620168F9C1C9}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEO_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideo-0.10.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstvideo.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				ImportLibrary="$(OutDir)/libgstvideo-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\bin"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEO_EXPORTS"
+				RuntimeLibrary="0"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideo-0.10.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				ModuleDefinitionFile="..\common\libgstvideo.def"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				ImportLibrary="$(OutDir)/libgstvideo-0.10.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\bin"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst-libs\gst\video\gstvideofilter.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\video\gstvideosink.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst-libs\gst\video\video.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvideorate.vcproj b/win32/vs8/libgstvideorate.vcproj
new file mode 100644
index 0000000..8bec130
--- /dev/null
+++ b/win32/vs8/libgstvideorate.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstvideorate"
+	ProjectGUID="{84F3B76C-4733-4032-B51E-F8E71022AFE6}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEORATE_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideorate.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEORATE_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideorate.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\videorate\gstvideorate.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvideoscale.vcproj b/win32/vs8/libgstvideoscale.vcproj
new file mode 100644
index 0000000..8f9477b
--- /dev/null
+++ b/win32/vs8/libgstvideoscale.vcproj
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstvideoscale"
+	ProjectGUID="{557CB36F-7F92-4B43-973D-05C6BF0A6414}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEOSCALE_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib liboil-0.3-0.lib"
+				OutputFile="$(OutDir)/libgstvideoscale.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEOSCALE_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib liboil-0.3-0.lib"
+				OutputFile="$(OutDir)/libgstvideoscale.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\videoscale\gstvideoscale.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\videoscale\vs_4tap.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\videoscale\vs_image.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\videoscale\vs_scanline.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvideotestsrc.vcproj b/win32/vs8/libgstvideotestsrc.vcproj
new file mode 100644
index 0000000..b9d6d8a
--- /dev/null
+++ b/win32/vs8/libgstvideotestsrc.vcproj
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstvideotestsrc"
+	ProjectGUID="{7586DFA1-F847-4BEF-9105-724DD9F12C2A}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEOTESTSRC_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="liboil-0.3-0.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideotestsrc.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVIDEOTESTSRC_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="liboil-0.3-0.lib libgstreamer-0.10.lib libgstbase-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvideotestsrc.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\videotestsrc\gstvideotestsrc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\gst\videotestsrc\videotestsrc.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvolume.vcproj b/win32/vs8/libgstvolume.vcproj
new file mode 100644
index 0000000..02f6828
--- /dev/null
+++ b/win32/vs8/libgstvolume.vcproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="libgstvolume"
+	ProjectGUID="{80270384-C551-471F-86C2-D80FE61D9883}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVOLUME_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvolume.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;../../../gstreamer/libs;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVOLUME_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libgstreamer-0.10.lib libgstbase-0.10.lib libgstcontroller-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvolume.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\gst\volume\gstvolume.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/win32/vs8/libgstvorbis.vcproj b/win32/vs8/libgstvorbis.vcproj
new file mode 100644
index 0000000..92c38f8
--- /dev/null
+++ b/win32/vs8/libgstvorbis.vcproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libgstvorbis"
+	ProjectGUID="{4F2E05FD-F87C-4325-8C2A-C1EEA21A483F}"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBGSTVORBIS_EXPORTS;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libvorbis.lib libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvorbis.dll"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\debug\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="../../../gstreamer;&quot;../../gst-libs&quot;;../common"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBGSTVORBIS_EXPORTS;HAVE_CONFIG_H"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libvorbis.lib libgstreamer-0.10.lib glib-2.0.lib gobject-2.0.lib"
+				OutputFile="$(OutDir)/libgstvorbis.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../../gstreamer/win32/vs8/$(ConfigurationName)"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="copy /y &quot;$(TargetPath)&quot; c:\gstreamer\lib\gstreamer-0.10"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\ext\vorbis\vorbis.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\vorbis\vorbisdec.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\vorbis\vorbisenc.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\vorbis\vorbisparse.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\ext\vorbis\vorbistag.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
